summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 12:50:00 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 12:50:00 +0000
commit333f7ecfa3e040191c66b2b92f6c117ca2cbac1d (patch)
tree178a8f140927896970f47930dae9213161268f10
parentInitial commit. (diff)
downloadshadow-upstream.tar.xz
shadow-upstream.zip
Adding upstream version 1:4.8.1.upstream/1%4.8.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
-rw-r--r--ABOUT-NLS1101
-rw-r--r--COPYING118
-rw-r--r--ChangeLog15259
-rw-r--r--Makefile.am6
-rw-r--r--Makefile.in858
-rw-r--r--NEWS2166
-rw-r--r--README122
-rw-r--r--TODO127
-rw-r--r--acinclude.m454
-rw-r--r--aclocal.m412678
-rwxr-xr-xcompile348
-rwxr-xr-xconfig.guess1480
-rw-r--r--config.h.in630
-rwxr-xr-xconfig.rpath614
-rwxr-xr-xconfig.sub1801
-rwxr-xr-xconfigure21837
-rw-r--r--configure.ac749
-rw-r--r--contrib/Makefile.am6
-rw-r--r--contrib/Makefile.in482
-rw-r--r--contrib/README10
-rw-r--r--contrib/adduser-old.c300
-rw-r--r--contrib/adduser.c502
-rwxr-xr-xcontrib/adduser.sh90
-rwxr-xr-xcontrib/adduser2.sh743
-rwxr-xr-xcontrib/atudel85
-rw-r--r--contrib/groupmems.shar546
-rw-r--r--contrib/pwdauth.c308
-rw-r--r--contrib/shadow-anonftp.patch147
-rw-r--r--contrib/udbachk.tgzbin0 -> 17571 bytes
-rwxr-xr-xdepcomp791
-rw-r--r--doc/HOWTO1918
-rw-r--r--doc/Makefile.am5
-rw-r--r--doc/Makefile.in481
-rw-r--r--doc/README.limits66
-rw-r--r--doc/README.platforms33
-rw-r--r--doc/WISHLIST40
-rw-r--r--doc/console.c.spec.txt36
-rw-r--r--doc/cracklib26.diff340
-rw-r--r--etc/Makefile.am24
-rw-r--r--etc/Makefile.in776
-rw-r--r--etc/limits30
-rw-r--r--etc/login.access54
-rw-r--r--etc/login.defs430
-rw-r--r--etc/pam.d/Makefile.am35
-rw-r--r--etc/pam.d/Makefile.in550
-rw-r--r--etc/pam.d/chage4
-rw-r--r--etc/pam.d/chfn4
-rw-r--r--etc/pam.d/chgpasswd4
-rw-r--r--etc/pam.d/chpasswd4
-rw-r--r--etc/pam.d/chsh4
-rw-r--r--etc/pam.d/groupadd4
-rw-r--r--etc/pam.d/groupdel4
-rw-r--r--etc/pam.d/groupmems4
-rw-r--r--etc/pam.d/groupmod4
-rw-r--r--etc/pam.d/login11
-rw-r--r--etc/pam.d/newusers4
-rw-r--r--etc/pam.d/passwd4
-rw-r--r--etc/pam.d/su13
-rw-r--r--etc/pam.d/useradd4
-rw-r--r--etc/pam.d/userdel4
-rw-r--r--etc/pam.d/usermod4
-rw-r--r--etc/useradd8
-rwxr-xr-xinstall-sh518
-rw-r--r--lib/.indent.pro5
-rw-r--r--lib/Makefile.am75
-rw-r--r--lib/Makefile.in1040
-rw-r--r--lib/commonio.c1294
-rw-r--r--lib/commonio.h171
-rw-r--r--lib/defines.h391
-rw-r--r--lib/encrypt.c98
-rw-r--r--lib/exitcodes.h49
-rw-r--r--lib/faillog.h57
-rw-r--r--lib/fields.c130
-rw-r--r--lib/fputsx.c90
-rw-r--r--lib/get_gid.c54
-rw-r--r--lib/get_pid.c54
-rw-r--r--lib/get_uid.c54
-rw-r--r--lib/getdef.c632
-rw-r--r--lib/getdef.h48
-rw-r--r--lib/getlong.c59
-rw-r--r--lib/getulong.c62
-rw-r--r--lib/groupio.c463
-rw-r--r--lib/groupio.h55
-rw-r--r--lib/groupmem.c106
-rw-r--r--lib/gshadow.c529
-rw-r--r--lib/gshadow_.h75
-rw-r--r--lib/lockpw.c108
-rw-r--r--lib/nscd.c57
-rw-r--r--lib/nscd.h13
-rw-r--r--lib/pam_defs.h58
-rw-r--r--lib/port.c477
-rw-r--r--lib/port.h83
-rw-r--r--lib/prototypes.h466
-rw-r--r--lib/pwauth.c234
-rw-r--r--lib/pwauth.h66
-rw-r--r--lib/pwio.c227
-rw-r--r--lib/pwio.h55
-rw-r--r--lib/pwmem.c106
-rw-r--r--lib/selinux.c203
-rw-r--r--lib/semanage.c378
-rw-r--r--lib/sgetgrent.c154
-rw-r--r--lib/sgetpwent.c127
-rw-r--r--lib/sgetspent.c208
-rw-r--r--lib/sgroupio.c329
-rw-r--r--lib/sgroupio.h52
-rw-r--r--lib/shadow.c557
-rw-r--r--lib/shadowio.c268
-rw-r--r--lib/shadowio.h53
-rw-r--r--lib/shadowmem.c89
-rw-r--r--lib/spawn.c84
-rw-r--r--lib/sssd.c75
-rw-r--r--lib/sssd.h17
-rw-r--r--lib/subordinateio.c698
-rw-r--r--lib/subordinateio.h41
-rw-r--r--lib/tcbfuncs.c613
-rw-r--r--lib/tcbfuncs.h19
-rw-r--r--lib/utent.c93
-rw-r--r--libmisc/.indent.pro5
-rw-r--r--libmisc/Makefile.am79
-rw-r--r--libmisc/Makefile.in917
-rw-r--r--libmisc/addgrps.c131
-rw-r--r--libmisc/age.c201
-rw-r--r--libmisc/audit_help.c109
-rw-r--r--libmisc/basename.c50
-rw-r--r--libmisc/btrfs.c110
-rw-r--r--libmisc/chkname.c106
-rw-r--r--libmisc/chkname.h50
-rw-r--r--libmisc/chowndir.c201
-rw-r--r--libmisc/chowntty.c99
-rw-r--r--libmisc/cleanup.c144
-rw-r--r--libmisc/cleanup_group.c237
-rw-r--r--libmisc/cleanup_user.c152
-rw-r--r--libmisc/console.c134
-rw-r--r--libmisc/copydir.c839
-rw-r--r--libmisc/entry.c68
-rw-r--r--libmisc/env.c275
-rw-r--r--libmisc/failure.c343
-rw-r--r--libmisc/failure.h84
-rw-r--r--libmisc/find_new_gid.c498
-rw-r--r--libmisc/find_new_sub_gids.c86
-rw-r--r--libmisc/find_new_sub_uids.c86
-rw-r--r--libmisc/find_new_uid.c498
-rw-r--r--libmisc/getdate.c2676
-rw-r--r--libmisc/getdate.h39
-rw-r--r--libmisc/getdate.y977
-rw-r--r--libmisc/getgr_nam_gid.c66
-rw-r--r--libmisc/getrange.c124
-rw-r--r--libmisc/gettime.c89
-rw-r--r--libmisc/hushed.c100
-rw-r--r--libmisc/idmapping.c219
-rw-r--r--libmisc/idmapping.h44
-rw-r--r--libmisc/isexpired.c125
-rw-r--r--libmisc/limits.c611
-rw-r--r--libmisc/list.c271
-rw-r--r--libmisc/log.c116
-rw-r--r--libmisc/loginprompt.c178
-rw-r--r--libmisc/mail.c92
-rw-r--r--libmisc/motd.c81
-rw-r--r--libmisc/myname.c69
-rw-r--r--libmisc/obscure.c326
-rw-r--r--libmisc/pam_pass.c80
-rw-r--r--libmisc/pam_pass_non_interactive.c167
-rw-r--r--libmisc/prefix_flag.c347
-rw-r--r--libmisc/pwd2spwd.c90
-rw-r--r--libmisc/pwd_init.c102
-rw-r--r--libmisc/pwdcheck.c60
-rw-r--r--libmisc/remove_tree.c133
-rw-r--r--libmisc/rlogin.c198
-rw-r--r--libmisc/root_flag.c124
-rw-r--r--libmisc/salt.c373
-rw-r--r--libmisc/setugid.c148
-rw-r--r--libmisc/setupenv.c312
-rw-r--r--libmisc/shell.c103
-rw-r--r--libmisc/strtoday.c243
-rw-r--r--libmisc/sub.c78
-rw-r--r--libmisc/sulog.c106
-rw-r--r--libmisc/ttytype.c90
-rw-r--r--libmisc/tz.c80
-rw-r--r--libmisc/ulimit.c70
-rw-r--r--libmisc/user_busy.c294
-rw-r--r--libmisc/utmp.c496
-rw-r--r--libmisc/valid.c105
-rw-r--r--libmisc/xgetXXbyYY.c144
-rw-r--r--libmisc/xgetgrgid.c64
-rw-r--r--libmisc/xgetgrnam.c64
-rw-r--r--libmisc/xgetpwnam.c64
-rw-r--r--libmisc/xgetpwuid.c64
-rw-r--r--libmisc/xgetspnam.c64
-rw-r--r--libmisc/xmalloc.c68
-rw-r--r--libmisc/yesno.c79
-rw-r--r--ltmain.sh11249
-rw-r--r--man/Makefile.am222
-rw-r--r--man/Makefile.in1073
-rw-r--r--man/chage.1.xml327
-rw-r--r--man/chfn.1.xml238
-rw-r--r--man/chgpasswd.8.xml250
-rw-r--r--man/chpasswd.8.xml303
-rw-r--r--man/chsh.1.xml204
-rw-r--r--man/config.xml.in2
-rw-r--r--man/cs/Makefile.am26
-rw-r--r--man/cs/Makefile.in668
-rw-r--r--man/cs/man1/expiry.125
-rw-r--r--man/cs/man1/gpasswd.176
-rw-r--r--man/cs/man1/groups.129
-rw-r--r--man/cs/man1/id.162
-rw-r--r--man/cs/man1/su.1111
-rw-r--r--man/cs/man5/faillog.535
-rw-r--r--man/cs/man5/gshadow.552
-rw-r--r--man/cs/man5/passwd.557
-rw-r--r--man/cs/man5/shadow.564
-rw-r--r--man/cs/man8/faillog.886
-rw-r--r--man/cs/man8/groupadd.8113
-rw-r--r--man/cs/man8/groupdel.860
-rw-r--r--man/cs/man8/groupmems.885
-rw-r--r--man/cs/man8/groupmod.879
-rw-r--r--man/cs/man8/grpck.8111
-rw-r--r--man/cs/man8/lastlog.840
-rw-r--r--man/cs/man8/logoutd.830
-rw-r--r--man/cs/man8/nologin.828
-rw-r--r--man/cs/man8/vipw.871
-rw-r--r--man/da/Makefile.am32
-rw-r--r--man/da/Makefile.in718
-rw-r--r--man/da/man1/chfn.1163
-rw-r--r--man/da/man1/groups.164
-rw-r--r--man/da/man1/id.160
-rw-r--r--man/da/man1/newgrp.198
-rw-r--r--man/da/man1/sg.197
-rw-r--r--man/da/man5/gshadow.5101
-rw-r--r--man/da/man8/groupdel.8145
-rw-r--r--man/da/man8/logoutd.857
-rw-r--r--man/da/man8/nologin.855
-rw-r--r--man/da/man8/vigr.81
-rw-r--r--man/da/man8/vipw.8137
-rw-r--r--man/de/Makefile.am66
-rw-r--r--man/de/Makefile.in773
-rw-r--r--man/de/man1/chage.1189
-rw-r--r--man/de/man1/chfn.1163
-rw-r--r--man/de/man1/chsh.1121
-rw-r--r--man/de/man1/expiry.174
-rw-r--r--man/de/man1/gpasswd.1232
-rw-r--r--man/de/man1/groups.164
-rw-r--r--man/de/man1/id.160
-rw-r--r--man/de/man1/login.1488
-rw-r--r--man/de/man1/newgrp.198
-rw-r--r--man/de/man1/passwd.1365
-rw-r--r--man/de/man1/sg.197
-rw-r--r--man/de/man1/su.1448
-rw-r--r--man/de/man3/getspnam.31
-rw-r--r--man/de/man3/shadow.3245
-rw-r--r--man/de/man5/faillog.564
-rw-r--r--man/de/man5/gshadow.5101
-rw-r--r--man/de/man5/limits.5274
-rw-r--r--man/de/man5/login.access.567
-rw-r--r--man/de/man5/login.defs.5855
-rw-r--r--man/de/man5/passwd.5193
-rw-r--r--man/de/man5/porttime.596
-rw-r--r--man/de/man5/shadow.5148
-rw-r--r--man/de/man5/suauth.5146
-rw-r--r--man/de/man8/chgpasswd.8208
-rw-r--r--man/de/man8/chpasswd.8212
-rw-r--r--man/de/man8/faillog.8165
-rw-r--r--man/de/man8/groupadd.8257
-rw-r--r--man/de/man8/groupdel.8145
-rw-r--r--man/de/man8/groupmems.8180
-rw-r--r--man/de/man8/groupmod.8233
-rw-r--r--man/de/man8/grpck.8247
-rw-r--r--man/de/man8/grpconv.81
-rw-r--r--man/de/man8/grpunconv.81
-rw-r--r--man/de/man8/lastlog.8137
-rw-r--r--man/de/man8/logoutd.857
-rw-r--r--man/de/man8/newusers.8449
-rw-r--r--man/de/man8/nologin.855
-rw-r--r--man/de/man8/pwck.8328
-rw-r--r--man/de/man8/pwconv.8193
-rw-r--r--man/de/man8/pwunconv.81
-rw-r--r--man/de/man8/sulogin.8116
-rw-r--r--man/de/man8/useradd.8784
-rw-r--r--man/de/man8/userdel.8308
-rw-r--r--man/de/man8/usermod.8469
-rw-r--r--man/de/man8/vigr.81
-rw-r--r--man/de/man8/vipw.8137
-rw-r--r--man/es/Makefile.am17
-rw-r--r--man/es/Makefile.in488
-rw-r--r--man/expiry.1.xml149
-rw-r--r--man/faillog.5.xml116
-rw-r--r--man/faillog.8.xml265
-rw-r--r--man/fi/Makefile.am12
-rw-r--r--man/fi/Makefile.in564
-rw-r--r--man/fi/man1/chfn.168
-rw-r--r--man/fi/man1/chsh.149
-rw-r--r--man/fi/man1/su.1119
-rw-r--r--man/fr/Makefile.am80
-rw-r--r--man/fr/Makefile.in782
-rw-r--r--man/fr/man1/chage.1189
-rw-r--r--man/fr/man1/chfn.1163
-rw-r--r--man/fr/man1/chsh.1121
-rw-r--r--man/fr/man1/expiry.174
-rw-r--r--man/fr/man1/gpasswd.1232
-rw-r--r--man/fr/man1/groups.164
-rw-r--r--man/fr/man1/id.160
-rw-r--r--man/fr/man1/login.1487
-rw-r--r--man/fr/man1/newgidmap.197
-rw-r--r--man/fr/man1/newgrp.198
-rw-r--r--man/fr/man1/newuidmap.197
-rw-r--r--man/fr/man1/passwd.1365
-rw-r--r--man/fr/man1/sg.197
-rw-r--r--man/fr/man1/su.1448
-rw-r--r--man/fr/man3/getspnam.31
-rw-r--r--man/fr/man3/shadow.3245
-rw-r--r--man/fr/man5/faillog.564
-rw-r--r--man/fr/man5/gshadow.5101
-rw-r--r--man/fr/man5/limits.5274
-rw-r--r--man/fr/man5/login.access.567
-rw-r--r--man/fr/man5/login.defs.5854
-rw-r--r--man/fr/man5/passwd.5193
-rw-r--r--man/fr/man5/porttime.596
-rw-r--r--man/fr/man5/shadow.5148
-rw-r--r--man/fr/man5/suauth.5146
-rw-r--r--man/fr/man5/subgid.5100
-rw-r--r--man/fr/man5/subuid.5100
-rw-r--r--man/fr/man8/chgpasswd.8208
-rw-r--r--man/fr/man8/chpasswd.8212
-rw-r--r--man/fr/man8/faillog.8165
-rw-r--r--man/fr/man8/groupadd.8257
-rw-r--r--man/fr/man8/groupdel.8145
-rw-r--r--man/fr/man8/groupmems.8180
-rw-r--r--man/fr/man8/groupmod.8233
-rw-r--r--man/fr/man8/grpck.8247
-rw-r--r--man/fr/man8/grpconv.81
-rw-r--r--man/fr/man8/grpunconv.81
-rw-r--r--man/fr/man8/lastlog.8139
-rw-r--r--man/fr/man8/logoutd.857
-rw-r--r--man/fr/man8/newusers.8449
-rw-r--r--man/fr/man8/nologin.855
-rw-r--r--man/fr/man8/pwck.8328
-rw-r--r--man/fr/man8/pwconv.8193
-rw-r--r--man/fr/man8/pwunconv.81
-rw-r--r--man/fr/man8/sulogin.8116
-rw-r--r--man/fr/man8/useradd.8784
-rw-r--r--man/fr/man8/userdel.8308
-rw-r--r--man/fr/man8/usermod.8469
-rw-r--r--man/fr/man8/vigr.81
-rw-r--r--man/fr/man8/vipw.8137
-rw-r--r--man/generate_mans.mak56
-rw-r--r--man/generate_translations.mak30
-rw-r--r--man/gpasswd.1.xml322
-rw-r--r--man/groupadd.8.xml374
-rw-r--r--man/groupdel.8.xml245
-rw-r--r--man/groupmems.8.xml257
-rw-r--r--man/groupmod.8.xml355
-rw-r--r--man/groups.1.xml128
-rw-r--r--man/grpck.8.xml314
-rw-r--r--man/gshadow.5.xml193
-rw-r--r--man/hu/Makefile.am17
-rw-r--r--man/hu/Makefile.in658
-rw-r--r--man/hu/man1/chsh.165
-rw-r--r--man/hu/man1/gpasswd.181
-rw-r--r--man/hu/man1/groups.159
-rw-r--r--man/hu/man1/login.1123
-rw-r--r--man/hu/man1/newgrp.189
-rw-r--r--man/hu/man1/passwd.1164
-rw-r--r--man/hu/man1/sg.11
-rw-r--r--man/hu/man1/su.1185
-rw-r--r--man/hu/man5/passwd.599
-rw-r--r--man/hu/man8/lastlog.868
-rw-r--r--man/id.1.xml119
-rw-r--r--man/id/Makefile.am9
-rw-r--r--man/id/Makefile.in605
-rw-r--r--man/id/man1/chsh.153
-rw-r--r--man/id/man1/login.1311
-rw-r--r--man/id/man8/useradd.8214
-rw-r--r--man/it/Makefile.am66
-rw-r--r--man/it/Makefile.in773
-rw-r--r--man/it/man1/chage.1189
-rw-r--r--man/it/man1/chfn.1163
-rw-r--r--man/it/man1/chsh.1121
-rw-r--r--man/it/man1/expiry.174
-rw-r--r--man/it/man1/gpasswd.1232
-rw-r--r--man/it/man1/groups.164
-rw-r--r--man/it/man1/id.160
-rw-r--r--man/it/man1/login.1487
-rw-r--r--man/it/man1/newgrp.198
-rw-r--r--man/it/man1/passwd.1365
-rw-r--r--man/it/man1/sg.197
-rw-r--r--man/it/man1/su.1448
-rw-r--r--man/it/man3/getspnam.31
-rw-r--r--man/it/man3/shadow.3245
-rw-r--r--man/it/man5/faillog.564
-rw-r--r--man/it/man5/gshadow.5101
-rw-r--r--man/it/man5/limits.5274
-rw-r--r--man/it/man5/login.access.567
-rw-r--r--man/it/man5/login.defs.5854
-rw-r--r--man/it/man5/passwd.5193
-rw-r--r--man/it/man5/porttime.596
-rw-r--r--man/it/man5/shadow.5148
-rw-r--r--man/it/man5/suauth.5146
-rw-r--r--man/it/man8/chgpasswd.8208
-rw-r--r--man/it/man8/chpasswd.8212
-rw-r--r--man/it/man8/faillog.8165
-rw-r--r--man/it/man8/groupadd.8257
-rw-r--r--man/it/man8/groupdel.8145
-rw-r--r--man/it/man8/groupmems.8180
-rw-r--r--man/it/man8/groupmod.8233
-rw-r--r--man/it/man8/grpck.8247
-rw-r--r--man/it/man8/grpconv.81
-rw-r--r--man/it/man8/grpunconv.81
-rw-r--r--man/it/man8/lastlog.8138
-rw-r--r--man/it/man8/logoutd.857
-rw-r--r--man/it/man8/newusers.8449
-rw-r--r--man/it/man8/nologin.855
-rw-r--r--man/it/man8/pwck.8328
-rw-r--r--man/it/man8/pwconv.8193
-rw-r--r--man/it/man8/pwunconv.81
-rw-r--r--man/it/man8/sulogin.8116
-rw-r--r--man/it/man8/useradd.8784
-rw-r--r--man/it/man8/userdel.8308
-rw-r--r--man/it/man8/usermod.8469
-rw-r--r--man/it/man8/vigr.81
-rw-r--r--man/it/man8/vipw.8137
-rw-r--r--man/ja/Makefile.am58
-rw-r--r--man/ja/Makefile.in663
-rw-r--r--man/ja/man1/chage.1120
-rw-r--r--man/ja/man1/chfn.172
-rw-r--r--man/ja/man1/chsh.172
-rw-r--r--man/ja/man1/expiry.153
-rw-r--r--man/ja/man1/gpasswd.170
-rw-r--r--man/ja/man1/groups.165
-rw-r--r--man/ja/man1/id.157
-rw-r--r--man/ja/man1/login.1141
-rw-r--r--man/ja/man1/newgrp.192
-rw-r--r--man/ja/man1/passwd.1217
-rw-r--r--man/ja/man1/sg.11
-rw-r--r--man/ja/man1/su.188
-rw-r--r--man/ja/man3/shadow.3153
-rw-r--r--man/ja/man5/faillog.564
-rw-r--r--man/ja/man5/limits.589
-rw-r--r--man/ja/man5/login.access.569
-rw-r--r--man/ja/man5/login.defs.5193
-rw-r--r--man/ja/man5/passwd.5113
-rw-r--r--man/ja/man5/porttime.593
-rw-r--r--man/ja/man5/shadow.5102
-rw-r--r--man/ja/man5/suauth.5116
-rw-r--r--man/ja/man8/chpasswd.870
-rw-r--r--man/ja/man8/faillog.897
-rw-r--r--man/ja/man8/groupadd.868
-rw-r--r--man/ja/man8/groupdel.865
-rw-r--r--man/ja/man8/groupmod.870
-rw-r--r--man/ja/man8/grpck.8116
-rw-r--r--man/ja/man8/grpconv.81
-rw-r--r--man/ja/man8/grpunconv.81
-rw-r--r--man/ja/man8/lastlog.880
-rw-r--r--man/ja/man8/logoutd.855
-rw-r--r--man/ja/man8/newusers.871
-rw-r--r--man/ja/man8/pwck.8121
-rw-r--r--man/ja/man8/pwconv.880
-rw-r--r--man/ja/man8/pwunconv.81
-rw-r--r--man/ja/man8/sulogin.895
-rw-r--r--man/ja/man8/useradd.8176
-rw-r--r--man/ja/man8/userdel.877
-rw-r--r--man/ja/man8/usermod.8145
-rw-r--r--man/ja/man8/vigr.81
-rw-r--r--man/ja/man8/vipw.838
-rw-r--r--man/ko/Makefile.am16
-rw-r--r--man/ko/Makefile.in658
-rw-r--r--man/ko/man1/chfn.154
-rw-r--r--man/ko/man1/chsh.143
-rw-r--r--man/ko/man1/groups.132
-rw-r--r--man/ko/man1/login.1300
-rw-r--r--man/ko/man1/su.192
-rw-r--r--man/ko/man5/passwd.5119
-rw-r--r--man/ko/man8/vigr.81
-rw-r--r--man/ko/man8/vipw.864
-rw-r--r--man/lastlog.8.xml237
-rw-r--r--man/limits.5.xml219
-rw-r--r--man/login.1.xml429
-rw-r--r--man/login.access.5.xml140
-rw-r--r--man/login.defs.5.xml569
-rw-r--r--man/login.defs.d/CHFN_AUTH.xml40
-rw-r--r--man/login.defs.d/CHFN_RESTRICT.xml51
-rw-r--r--man/login.defs.d/CHSH_AUTH.xml40
-rw-r--r--man/login.defs.d/CONSOLE.xml46
-rw-r--r--man/login.defs.d/CONSOLE_GROUPS.xml44
-rw-r--r--man/login.defs.d/CREATE_HOME.xml41
-rw-r--r--man/login.defs.d/DEFAULT_HOME.xml44
-rw-r--r--man/login.defs.d/ENCRYPT_METHOD.xml54
-rw-r--r--man/login.defs.d/ENVIRON_FILE.xml42
-rw-r--r--man/login.defs.d/ENV_HZ.xml47
-rw-r--r--man/login.defs.d/ENV_PATH.xml43
-rw-r--r--man/login.defs.d/ENV_SUPATH.xml44
-rw-r--r--man/login.defs.d/ENV_TZ.xml48
-rw-r--r--man/login.defs.d/ERASECHAR.xml43
-rw-r--r--man/login.defs.d/FAILLOG_ENAB.xml39
-rw-r--r--man/login.defs.d/FAIL_DELAY.xml39
-rw-r--r--man/login.defs.d/FAKE_SHELL.xml39
-rw-r--r--man/login.defs.d/FTMP_FILE.xml38
-rw-r--r--man/login.defs.d/GID_MAX.xml45
-rw-r--r--man/login.defs.d/HUSHLOGIN_FILE.xml42
-rw-r--r--man/login.defs.d/ISSUE_FILE.xml38
-rw-r--r--man/login.defs.d/KILLCHAR.xml42
-rw-r--r--man/login.defs.d/LASTLOG_ENAB.xml38
-rw-r--r--man/login.defs.d/LASTLOG_UID_MAX.xml46
-rw-r--r--man/login.defs.d/LOGIN_RETRIES.xml44
-rw-r--r--man/login.defs.d/LOGIN_STRING.xml44
-rw-r--r--man/login.defs.d/LOGIN_TIMEOUT.xml38
-rw-r--r--man/login.defs.d/LOG_OK_LOGINS.xml38
-rw-r--r--man/login.defs.d/LOG_UNKFAIL_ENAB.xml43
-rw-r--r--man/login.defs.d/MAIL_CHECK_ENAB.xml42
-rw-r--r--man/login.defs.d/MAIL_DIR.xml60
-rw-r--r--man/login.defs.d/MAX_MEMBERS_PER_GROUP.xml57
-rw-r--r--man/login.defs.d/MD5_CRYPT_ENAB.xml60
-rw-r--r--man/login.defs.d/MOTD_FILE.xml39
-rw-r--r--man/login.defs.d/NOLOGINS_FILE.xml40
-rw-r--r--man/login.defs.d/OBSCURE_CHECKS_ENAB.xml38
-rw-r--r--man/login.defs.d/PASS_ALWAYS_WARN.xml38
-rw-r--r--man/login.defs.d/PASS_CHANGE_TRIES.xml39
-rw-r--r--man/login.defs.d/PASS_MAX_DAYS.xml40
-rw-r--r--man/login.defs.d/PASS_MAX_LEN.xml43
-rw-r--r--man/login.defs.d/PASS_MIN_DAYS.xml40
-rw-r--r--man/login.defs.d/PASS_WARN_AGE.xml41
-rw-r--r--man/login.defs.d/PORTTIME_CHECKS_ENAB.xml39
-rw-r--r--man/login.defs.d/QUOTAS_ENAB.xml40
-rw-r--r--man/login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml69
-rw-r--r--man/login.defs.d/SUB_GID_COUNT.xml48
-rw-r--r--man/login.defs.d/SUB_UID_COUNT.xml48
-rw-r--r--man/login.defs.d/SULOG_FILE.xml38
-rw-r--r--man/login.defs.d/SU_NAME.xml41
-rw-r--r--man/login.defs.d/SU_WHEEL_ONLY.xml44
-rw-r--r--man/login.defs.d/SYSLOG_SG_ENAB.xml38
-rw-r--r--man/login.defs.d/SYSLOG_SU_ENAB.xml39
-rw-r--r--man/login.defs.d/SYS_GID_MAX.xml43
-rw-r--r--man/login.defs.d/SYS_UID_MAX.xml42
-rw-r--r--man/login.defs.d/TCB_AUTH_GROUP.xml37
-rw-r--r--man/login.defs.d/TCB_SYMLINKS.xml53
-rw-r--r--man/login.defs.d/TTYGROUP.xml56
-rw-r--r--man/login.defs.d/TTYTYPE_FILE.xml39
-rw-r--r--man/login.defs.d/UID_MAX.xml44
-rw-r--r--man/login.defs.d/ULIMIT.xml38
-rw-r--r--man/login.defs.d/UMASK.xml56
-rw-r--r--man/login.defs.d/USERDEL_CMD.xml72
-rw-r--r--man/login.defs.d/USERGROUPS_ENAB.xml46
-rw-r--r--man/login.defs.d/USE_TCB.xml38
-rw-r--r--man/logoutd.8.xml105
-rw-r--r--man/man1/chage.1189
-rw-r--r--man/man1/chfn.1163
-rw-r--r--man/man1/chsh.1121
-rw-r--r--man/man1/expiry.174
-rw-r--r--man/man1/gpasswd.1232
-rw-r--r--man/man1/groups.164
-rw-r--r--man/man1/id.160
-rw-r--r--man/man1/login.1487
-rw-r--r--man/man1/newgidmap.197
-rw-r--r--man/man1/newgrp.198
-rw-r--r--man/man1/newuidmap.197
-rw-r--r--man/man1/passwd.1365
-rw-r--r--man/man1/sg.197
-rw-r--r--man/man1/su.1448
-rw-r--r--man/man3/getspnam.31
-rw-r--r--man/man3/shadow.3245
-rw-r--r--man/man5/faillog.564
-rw-r--r--man/man5/gshadow.5101
-rw-r--r--man/man5/limits.5274
-rw-r--r--man/man5/login.access.567
-rw-r--r--man/man5/login.defs.5854
-rw-r--r--man/man5/passwd.5193
-rw-r--r--man/man5/porttime.596
-rw-r--r--man/man5/shadow.5148
-rw-r--r--man/man5/suauth.5146
-rw-r--r--man/man5/subgid.5100
-rw-r--r--man/man5/subuid.5100
-rw-r--r--man/man8/chgpasswd.8208
-rw-r--r--man/man8/chpasswd.8212
-rw-r--r--man/man8/faillog.8165
-rw-r--r--man/man8/groupadd.8257
-rw-r--r--man/man8/groupdel.8145
-rw-r--r--man/man8/groupmems.8180
-rw-r--r--man/man8/groupmod.8233
-rw-r--r--man/man8/grpck.8247
-rw-r--r--man/man8/grpconv.81
-rw-r--r--man/man8/grpunconv.81
-rw-r--r--man/man8/lastlog.8137
-rw-r--r--man/man8/logoutd.857
-rw-r--r--man/man8/newusers.8449
-rw-r--r--man/man8/nologin.855
-rw-r--r--man/man8/pwck.8328
-rw-r--r--man/man8/pwconv.8193
-rw-r--r--man/man8/pwunconv.81
-rw-r--r--man/man8/sulogin.8116
-rw-r--r--man/man8/useradd.8784
-rw-r--r--man/man8/userdel.8308
-rw-r--r--man/man8/usermod.8469
-rw-r--r--man/man8/vigr.81
-rw-r--r--man/man8/vipw.8137
-rw-r--r--man/newgidmap.1.xml190
-rw-r--r--man/newgrp.1.xml177
-rw-r--r--man/newuidmap.1.xml189
-rw-r--r--man/newusers.8.xml486
-rw-r--r--man/nologin.8.xml98
-rw-r--r--man/passwd.1.xml515
-rw-r--r--man/passwd.5.xml225
-rw-r--r--man/pl/Makefile.am44
-rw-r--r--man/pl/Makefile.in768
-rw-r--r--man/pl/man1/chage.1191
-rw-r--r--man/pl/man1/chsh.1121
-rw-r--r--man/pl/man1/expiry.174
-rw-r--r--man/pl/man1/groups.164
-rw-r--r--man/pl/man1/id.160
-rw-r--r--man/pl/man1/newgrp.198
-rw-r--r--man/pl/man1/sg.197
-rw-r--r--man/pl/man3/getspnam.31
-rw-r--r--man/pl/man3/shadow.3245
-rw-r--r--man/pl/man5/faillog.564
-rw-r--r--man/pl/man5/porttime.596
-rw-r--r--man/pl/man8/faillog.8165
-rw-r--r--man/pl/man8/groupadd.8257
-rw-r--r--man/pl/man8/groupdel.8145
-rw-r--r--man/pl/man8/groupmems.8180
-rw-r--r--man/pl/man8/groupmod.8233
-rw-r--r--man/pl/man8/grpck.8247
-rw-r--r--man/pl/man8/lastlog.8137
-rw-r--r--man/pl/man8/logoutd.857
-rw-r--r--man/pl/man8/userdel.8308
-rw-r--r--man/pl/man8/usermod.8469
-rw-r--r--man/pl/man8/vigr.81
-rw-r--r--man/pl/man8/vipw.8137
-rw-r--r--man/po/LINGUAS8
-rw-r--r--man/po/Makefile.in245
-rw-r--r--man/po/Makevars27
-rw-r--r--man/po/XMLFILES42
-rw-r--r--man/po/da.po8304
-rw-r--r--man/po/de.po10879
-rw-r--r--man/po/fr.po10548
-rw-r--r--man/po/it.po11253
-rw-r--r--man/po/pl.po9659
-rw-r--r--man/po/ru.po12023
-rw-r--r--man/po/shadow-man-pages.pot5073
-rw-r--r--man/po/stamp-po1
-rw-r--r--man/po/sv.po9882
-rw-r--r--man/po/zh_CN.po9679
-rw-r--r--man/porttime.5.xml149
-rw-r--r--man/pt_BR/Makefile.am12
-rw-r--r--man/pt_BR/Makefile.in654
-rw-r--r--man/pt_BR/man1/gpasswd.193
-rw-r--r--man/pt_BR/man5/passwd.5133
-rw-r--r--man/pt_BR/man5/shadow.581
-rw-r--r--man/pt_BR/man8/groupadd.883
-rw-r--r--man/pt_BR/man8/groupdel.859
-rw-r--r--man/pt_BR/man8/groupmod.861
-rw-r--r--man/pwck.8.xml373
-rw-r--r--man/pwconv.8.xml281
-rw-r--r--man/ru/Makefile.am66
-rw-r--r--man/ru/Makefile.in773
-rw-r--r--man/ru/man1/chage.1189
-rw-r--r--man/ru/man1/chfn.1163
-rw-r--r--man/ru/man1/chsh.1121
-rw-r--r--man/ru/man1/expiry.174
-rw-r--r--man/ru/man1/gpasswd.1232
-rw-r--r--man/ru/man1/groups.164
-rw-r--r--man/ru/man1/id.160
-rw-r--r--man/ru/man1/login.1487
-rw-r--r--man/ru/man1/newgrp.198
-rw-r--r--man/ru/man1/passwd.1365
-rw-r--r--man/ru/man1/sg.197
-rw-r--r--man/ru/man1/su.1448
-rw-r--r--man/ru/man3/getspnam.31
-rw-r--r--man/ru/man3/shadow.3245
-rw-r--r--man/ru/man5/faillog.564
-rw-r--r--man/ru/man5/gshadow.5101
-rw-r--r--man/ru/man5/limits.5274
-rw-r--r--man/ru/man5/login.access.567
-rw-r--r--man/ru/man5/login.defs.5854
-rw-r--r--man/ru/man5/passwd.5193
-rw-r--r--man/ru/man5/porttime.596
-rw-r--r--man/ru/man5/shadow.5148
-rw-r--r--man/ru/man5/suauth.5146
-rw-r--r--man/ru/man8/chgpasswd.8208
-rw-r--r--man/ru/man8/chpasswd.8212
-rw-r--r--man/ru/man8/faillog.8165
-rw-r--r--man/ru/man8/groupadd.8257
-rw-r--r--man/ru/man8/groupdel.8145
-rw-r--r--man/ru/man8/groupmems.8180
-rw-r--r--man/ru/man8/groupmod.8233
-rw-r--r--man/ru/man8/grpck.8247
-rw-r--r--man/ru/man8/grpconv.81
-rw-r--r--man/ru/man8/grpunconv.81
-rw-r--r--man/ru/man8/lastlog.8137
-rw-r--r--man/ru/man8/logoutd.857
-rw-r--r--man/ru/man8/newusers.8449
-rw-r--r--man/ru/man8/nologin.855
-rw-r--r--man/ru/man8/pwck.8328
-rw-r--r--man/ru/man8/pwconv.8193
-rw-r--r--man/ru/man8/pwunconv.81
-rw-r--r--man/ru/man8/sulogin.8116
-rw-r--r--man/ru/man8/useradd.8784
-rw-r--r--man/ru/man8/userdel.8308
-rw-r--r--man/ru/man8/usermod.8469
-rw-r--r--man/ru/man8/vigr.81
-rw-r--r--man/ru/man8/vipw.8137
-rw-r--r--man/sg.1.xml166
-rw-r--r--man/shadow.3.xml248
-rw-r--r--man/shadow.5.xml314
-rw-r--r--man/su.1.xml452
-rw-r--r--man/suauth.5.xml229
-rw-r--r--man/subgid.5.xml146
-rw-r--r--man/subuid.5.xml146
-rw-r--r--man/sulogin.8.xml178
-rw-r--r--man/sv/Makefile.am49
-rw-r--r--man/sv/Makefile.in770
-rw-r--r--man/sv/man1/chage.1189
-rw-r--r--man/sv/man1/chsh.1121
-rw-r--r--man/sv/man1/expiry.174
-rw-r--r--man/sv/man1/groups.164
-rw-r--r--man/sv/man1/id.160
-rw-r--r--man/sv/man1/newgrp.198
-rw-r--r--man/sv/man1/passwd.1365
-rw-r--r--man/sv/man1/sg.197
-rw-r--r--man/sv/man3/getspnam.31
-rw-r--r--man/sv/man3/shadow.3245
-rw-r--r--man/sv/man5/faillog.564
-rw-r--r--man/sv/man5/gshadow.5101
-rw-r--r--man/sv/man5/limits.5274
-rw-r--r--man/sv/man5/passwd.5193
-rw-r--r--man/sv/man5/porttime.596
-rw-r--r--man/sv/man5/suauth.5146
-rw-r--r--man/sv/man8/faillog.8165
-rw-r--r--man/sv/man8/groupadd.8257
-rw-r--r--man/sv/man8/groupdel.8145
-rw-r--r--man/sv/man8/groupmems.8180
-rw-r--r--man/sv/man8/groupmod.8233
-rw-r--r--man/sv/man8/grpck.8247
-rw-r--r--man/sv/man8/lastlog.8137
-rw-r--r--man/sv/man8/logoutd.857
-rw-r--r--man/sv/man8/nologin.855
-rw-r--r--man/sv/man8/pwck.8328
-rw-r--r--man/sv/man8/userdel.8308
-rw-r--r--man/sv/man8/vigr.81
-rw-r--r--man/sv/man8/vipw.8137
-rw-r--r--man/tr/Makefile.am18
-rw-r--r--man/tr/Makefile.in661
-rw-r--r--man/tr/man1/chage.190
-rw-r--r--man/tr/man1/chfn.179
-rw-r--r--man/tr/man1/login.1114
-rw-r--r--man/tr/man1/passwd.1172
-rw-r--r--man/tr/man1/su.184
-rw-r--r--man/tr/man5/passwd.5113
-rw-r--r--man/tr/man5/shadow.596
-rw-r--r--man/tr/man8/groupadd.897
-rw-r--r--man/tr/man8/groupdel.877
-rw-r--r--man/tr/man8/groupmod.891
-rw-r--r--man/tr/man8/useradd.8195
-rw-r--r--man/tr/man8/userdel.894
-rw-r--r--man/tr/man8/usermod.8142
-rw-r--r--man/useradd.8.xml880
-rw-r--r--man/userdel.8.xml366
-rw-r--r--man/usermod.8.xml635
-rw-r--r--man/vipw.8.xml250
-rw-r--r--man/zh_CN/Makefile.am66
-rw-r--r--man/zh_CN/Makefile.in773
-rw-r--r--man/zh_CN/man1/chage.1189
-rw-r--r--man/zh_CN/man1/chfn.1163
-rw-r--r--man/zh_CN/man1/chsh.1121
-rw-r--r--man/zh_CN/man1/expiry.174
-rw-r--r--man/zh_CN/man1/gpasswd.1232
-rw-r--r--man/zh_CN/man1/groups.164
-rw-r--r--man/zh_CN/man1/id.160
-rw-r--r--man/zh_CN/man1/login.1487
-rw-r--r--man/zh_CN/man1/newgrp.198
-rw-r--r--man/zh_CN/man1/passwd.1365
-rw-r--r--man/zh_CN/man1/sg.197
-rw-r--r--man/zh_CN/man1/su.1448
-rw-r--r--man/zh_CN/man3/getspnam.31
-rw-r--r--man/zh_CN/man3/shadow.3245
-rw-r--r--man/zh_CN/man5/faillog.564
-rw-r--r--man/zh_CN/man5/gshadow.5101
-rw-r--r--man/zh_CN/man5/limits.5274
-rw-r--r--man/zh_CN/man5/login.access.567
-rw-r--r--man/zh_CN/man5/login.defs.5854
-rw-r--r--man/zh_CN/man5/passwd.5193
-rw-r--r--man/zh_CN/man5/porttime.596
-rw-r--r--man/zh_CN/man5/shadow.5148
-rw-r--r--man/zh_CN/man5/suauth.5146
-rw-r--r--man/zh_CN/man8/chgpasswd.8208
-rw-r--r--man/zh_CN/man8/chpasswd.8212
-rw-r--r--man/zh_CN/man8/faillog.8165
-rw-r--r--man/zh_CN/man8/groupadd.8257
-rw-r--r--man/zh_CN/man8/groupdel.8145
-rw-r--r--man/zh_CN/man8/groupmems.8180
-rw-r--r--man/zh_CN/man8/groupmod.8233
-rw-r--r--man/zh_CN/man8/grpck.8247
-rw-r--r--man/zh_CN/man8/grpconv.81
-rw-r--r--man/zh_CN/man8/grpunconv.81
-rw-r--r--man/zh_CN/man8/lastlog.8137
-rw-r--r--man/zh_CN/man8/logoutd.857
-rw-r--r--man/zh_CN/man8/newusers.8449
-rw-r--r--man/zh_CN/man8/nologin.855
-rw-r--r--man/zh_CN/man8/pwck.8328
-rw-r--r--man/zh_CN/man8/pwconv.8193
-rw-r--r--man/zh_CN/man8/pwunconv.81
-rw-r--r--man/zh_CN/man8/sulogin.8116
-rw-r--r--man/zh_CN/man8/useradd.8784
-rw-r--r--man/zh_CN/man8/userdel.8308
-rw-r--r--man/zh_CN/man8/usermod.8469
-rw-r--r--man/zh_CN/man8/vigr.81
-rw-r--r--man/zh_CN/man8/vipw.8137
-rw-r--r--man/zh_TW/Makefile.am18
-rw-r--r--man/zh_TW/Makefile.in662
-rw-r--r--man/zh_TW/man1/chfn.158
-rw-r--r--man/zh_TW/man1/chsh.145
-rw-r--r--man/zh_TW/man1/newgrp.138
-rw-r--r--man/zh_TW/man1/su.162
-rw-r--r--man/zh_TW/man5/passwd.5132
-rw-r--r--man/zh_TW/man8/chpasswd.869
-rw-r--r--man/zh_TW/man8/groupadd.888
-rw-r--r--man/zh_TW/man8/groupdel.855
-rw-r--r--man/zh_TW/man8/groupmod.863
-rw-r--r--man/zh_TW/man8/useradd.8184
-rw-r--r--man/zh_TW/man8/userdel.865
-rw-r--r--man/zh_TW/man8/usermod.8129
-rwxr-xr-xmissing215
-rw-r--r--po/LINGUAS38
-rw-r--r--po/Makefile.in.in403
-rw-r--r--po/Makevars31
-rw-r--r--po/POTFILES.in123
-rw-r--r--po/Rules-quot47
-rw-r--r--po/boldquot.sed10
-rw-r--r--po/bs.gmobin0 -> 2971 bytes
-rw-r--r--po/bs.po2663
-rw-r--r--po/ca.gmobin0 -> 66961 bytes
-rw-r--r--po/ca.po4022
-rw-r--r--po/cs.gmobin0 -> 70326 bytes
-rw-r--r--po/cs.po3943
-rw-r--r--po/da.gmobin0 -> 62518 bytes
-rw-r--r--po/da.po2932
-rw-r--r--po/de.gmobin0 -> 68187 bytes
-rw-r--r--po/de.po2999
-rw-r--r--po/dz.gmobin0 -> 33102 bytes
-rw-r--r--po/dz.po3613
-rw-r--r--po/el.gmobin0 -> 84103 bytes
-rw-r--r--po/el.po4037
-rw-r--r--po/en@boldquot.header25
-rw-r--r--po/en@quot.header22
-rw-r--r--po/es.gmobin0 -> 60011 bytes
-rw-r--r--po/es.po4013
-rw-r--r--po/eu.gmobin0 -> 47713 bytes
-rw-r--r--po/eu.po3524
-rw-r--r--po/fi.gmobin0 -> 19219 bytes
-rw-r--r--po/fi.po3732
-rw-r--r--po/fr.gmobin0 -> 536 bytes
-rw-r--r--po/fr.po11951
-rw-r--r--po/gl.gmobin0 -> 19296 bytes
-rw-r--r--po/gl.po3626
-rw-r--r--po/he.gmobin0 -> 4658 bytes
-rw-r--r--po/he.po2784
-rw-r--r--po/hu.gmobin0 -> 19000 bytes
-rw-r--r--po/hu.po3764
-rw-r--r--po/id.gmobin0 -> 16194 bytes
-rw-r--r--po/id.po3632
-rw-r--r--po/insert-header.sin23
-rw-r--r--po/it.gmobin0 -> 21482 bytes
-rw-r--r--po/it.po3891
-rw-r--r--po/ja.gmobin0 -> 71948 bytes
-rw-r--r--po/ja.po3192
-rw-r--r--po/kk.gmobin0 -> 83766 bytes
-rw-r--r--po/kk.po3262
-rw-r--r--po/km.gmobin0 -> 28595 bytes
-rw-r--r--po/km.po3621
-rw-r--r--po/ko.gmobin0 -> 31593 bytes
-rw-r--r--po/ko.po3411
-rw-r--r--po/nb.gmobin0 -> 66207 bytes
-rw-r--r--po/nb.po4111
-rw-r--r--po/ne.gmobin0 -> 28494 bytes
-rw-r--r--po/ne.po3609
-rw-r--r--po/nl.gmobin0 -> 80704 bytes
-rw-r--r--po/nl.po2957
-rw-r--r--po/nn.gmobin0 -> 12893 bytes
-rw-r--r--po/nn.po3164
-rw-r--r--po/pl.gmobin0 -> 19398 bytes
-rw-r--r--po/pl.po3748
-rw-r--r--po/pt.gmobin0 -> 66447 bytes
-rw-r--r--po/pt.po3609
-rw-r--r--po/pt_BR.gmobin0 -> 57295 bytes
-rw-r--r--po/pt_BR.po3961
-rw-r--r--po/quot.sed6
-rw-r--r--po/remove-potcdate.sin19
-rw-r--r--po/ro.gmobin0 -> 19167 bytes
-rw-r--r--po/ro.po3687
-rw-r--r--po/ru.gmobin0 -> 90171 bytes
-rw-r--r--po/ru.po3621
-rw-r--r--po/shadow.pot2607
-rw-r--r--po/sk.gmobin0 -> 43771 bytes
-rw-r--r--po/sk.po3998
-rw-r--r--po/sq.gmobin0 -> 1027 bytes
-rw-r--r--po/sq.po2626
-rw-r--r--po/stamp-po1
-rw-r--r--po/sv.gmobin0 -> 54826 bytes
-rw-r--r--po/sv.po3351
-rw-r--r--po/tl.gmobin0 -> 19232 bytes
-rw-r--r--po/tl.po3735
-rw-r--r--po/tr.gmobin0 -> 20898 bytes
-rw-r--r--po/tr.po3940
-rw-r--r--po/uk.gmobin0 -> 23513 bytes
-rw-r--r--po/uk.po3747
-rw-r--r--po/vi.gmobin0 -> 74867 bytes
-rw-r--r--po/vi.po3173
-rw-r--r--po/zh_CN.gmobin0 -> 63428 bytes
-rw-r--r--po/zh_CN.po3736
-rw-r--r--po/zh_TW.gmobin0 -> 67377 bytes
-rw-r--r--po/zh_TW.po3474
-rw-r--r--shadow.spec.in93
-rw-r--r--src/.indent.pro5
-rw-r--r--src/Makefile.am159
-rw-r--r--src/Makefile.in1386
-rw-r--r--src/chage.c958
-rw-r--r--src/chfn.c750
-rw-r--r--src/chgpasswd.c636
-rw-r--r--src/chpasswd.c689
-rw-r--r--src/chsh.c561
-rw-r--r--src/expiry.c210
-rw-r--r--src/faillog.c741
-rw-r--r--src/gpasswd.c1209
-rw-r--r--src/groupadd.c633
-rw-r--r--src/groupdel.c500
-rw-r--r--src/groupmems.c652
-rw-r--r--src/groupmod.c885
-rw-r--r--src/groups.c218
-rw-r--r--src/grpck.c891
-rw-r--r--src/grpconv.c289
-rw-r--r--src/grpunconv.c252
-rw-r--r--src/id.c207
-rw-r--r--src/lastlog.c449
-rw-r--r--src/login.c1357
-rw-r--r--src/login_nopam.c336
-rw-r--r--src/logoutd.c299
-rw-r--r--src/newgidmap.c257
-rw-r--r--src/newgrp.c879
-rw-r--r--src/newuidmap.c186
-rw-r--r--src/newusers.c1324
-rw-r--r--src/nologin.c61
-rw-r--r--src/passwd.c1105
-rw-r--r--src/pwck.c912
-rw-r--r--src/pwconv.c336
-rw-r--r--src/pwunconv.c258
-rw-r--r--src/su.c1205
-rw-r--r--src/suauth.c239
-rw-r--r--src/sulogin.c257
-rw-r--r--src/useradd.c2519
-rw-r--r--src/userdel.c1355
-rw-r--r--src/usermod.c2367
-rw-r--r--src/vipw.c607
-rwxr-xr-xylwrap247
949 files changed, 476077 insertions, 0 deletions
diff --git a/ABOUT-NLS b/ABOUT-NLS
new file mode 100644
index 0000000..ec20977
--- /dev/null
+++ b/ABOUT-NLS
@@ -0,0 +1,1101 @@
+1 Notes on the Free Translation Project
+***************************************
+
+Free software is going international! The Free Translation Project is
+a way to get maintainers of free software, translators, and users all
+together, so that free software will gradually become able to speak many
+languages. A few packages already provide translations for their
+messages.
+
+ If you found this `ABOUT-NLS' file inside a distribution, you may
+assume that the distributed package does use GNU `gettext' internally,
+itself available at your nearest GNU archive site. But you do _not_
+need to install GNU `gettext' prior to configuring, installing or using
+this package with messages translated.
+
+ Installers will find here some useful hints. These notes also
+explain how users should proceed for getting the programs to use the
+available translations. They tell how people wanting to contribute and
+work on translations can contact the appropriate team.
+
+ When reporting bugs in the `intl/' directory or bugs which may be
+related to internationalization, you should tell about the version of
+`gettext' which is used. The information can be found in the
+`intl/VERSION' file, in internationalized packages.
+
+1.1 Quick configuration advice
+==============================
+
+If you want to exploit the full power of internationalization, you
+should configure it using
+
+ ./configure --with-included-gettext
+
+to force usage of internationalizing routines provided within this
+package, despite the existence of internationalizing capabilities in the
+operating system where this package is being installed. So far, only
+the `gettext' implementation in the GNU C library version 2 provides as
+many features (such as locale alias, message inheritance, automatic
+charset conversion or plural form handling) as the implementation here.
+It is also not possible to offer this additional functionality on top
+of a `catgets' implementation. Future versions of GNU `gettext' will
+very likely convey even more functionality. So it might be a good idea
+to change to GNU `gettext' as soon as possible.
+
+ So you need _not_ provide this option if you are using GNU libc 2 or
+you have installed a recent copy of the GNU gettext package with the
+included `libintl'.
+
+1.2 INSTALL Matters
+===================
+
+Some packages are "localizable" when properly installed; the programs
+they contain can be made to speak your own native language. Most such
+packages use GNU `gettext'. Other packages have their own ways to
+internationalization, predating GNU `gettext'.
+
+ By default, this package will be installed to allow translation of
+messages. It will automatically detect whether the system already
+provides the GNU `gettext' functions. If not, the included GNU
+`gettext' library will be used. This library is wholly contained
+within this package, usually in the `intl/' subdirectory, so prior
+installation of the GNU `gettext' package is _not_ required.
+Installers may use special options at configuration time for changing
+the default behaviour. The commands:
+
+ ./configure --with-included-gettext
+ ./configure --disable-nls
+
+will, respectively, bypass any pre-existing `gettext' to use the
+internationalizing routines provided within this package, or else,
+_totally_ disable translation of messages.
+
+ When you already have GNU `gettext' installed on your system and run
+configure without an option for your new package, `configure' will
+probably detect the previously built and installed `libintl.a' file and
+will decide to use this. This might not be desirable. You should use
+the more recent version of the GNU `gettext' library. I.e. if the file
+`intl/VERSION' shows that the library which comes with this package is
+more recent, you should use
+
+ ./configure --with-included-gettext
+
+to prevent auto-detection.
+
+ The configuration process will not test for the `catgets' function
+and therefore it will not be used. The reason is that even an
+emulation of `gettext' on top of `catgets' could not provide all the
+extensions of the GNU `gettext' library.
+
+ Internationalized packages usually have many `po/LL.po' files, where
+LL gives an ISO 639 two-letter code identifying the language. Unless
+translations have been forbidden at `configure' time by using the
+`--disable-nls' switch, all available translations are installed
+together with the package. However, the environment variable `LINGUAS'
+may be set, prior to configuration, to limit the installed set.
+`LINGUAS' should then contain a space separated list of two-letter
+codes, stating which languages are allowed.
+
+1.3 Using This Package
+======================
+
+As a user, if your language has been installed for this package, you
+only have to set the `LANG' environment variable to the appropriate
+`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code,
+and `CC' is an ISO 3166 two-letter country code. For example, let's
+suppose that you speak German and live in Germany. At the shell
+prompt, merely execute `setenv LANG de_DE' (in `csh'),
+`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
+This can be done from your `.login' or `.profile' file, once and for
+all.
+
+ You might think that the country code specification is redundant.
+But in fact, some languages have dialects in different countries. For
+example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The
+country code serves to distinguish the dialects.
+
+ The locale naming convention of `LL_CC', with `LL' denoting the
+language and `CC' denoting the country, is the one use on systems based
+on GNU libc. On other systems, some variations of this scheme are
+used, such as `LL' or `LL_CC.ENCODING'. You can get the list of
+locales supported by your system for your language by running the
+command `locale -a | grep '^LL''.
+
+ Not all programs have translations for all languages. By default, an
+English message is shown in place of a nonexistent translation. If you
+understand other languages, you can set up a priority list of languages.
+This is done through a different environment variable, called
+`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG'
+for the purpose of message handling, but you still need to have `LANG'
+set to the primary language; this is required by other parts of the
+system libraries. For example, some Swedish users who would rather
+read translations in German than English for when Swedish is not
+available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
+
+ Special advice for Norwegian users: The language code for Norwegian
+bokma*l changed from `no' to `nb' recently (in 2003). During the
+transition period, while some message catalogs for this language are
+installed under `nb' and some older ones under `no', it's recommended
+for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and
+older translations are used.
+
+ In the `LANGUAGE' environment variable, but not in the `LANG'
+environment variable, `LL_CC' combinations can be abbreviated as `LL'
+to denote the language's main dialect. For example, `de' is equivalent
+to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
+(Portuguese as spoken in Portugal) in this context.
+
+1.4 Translating Teams
+=====================
+
+For the Free Translation Project to be a success, we need interested
+people who like their own language and write it well, and who are also
+able to synergize with other translators speaking the same language.
+Each translation team has its own mailing list. The up-to-date list of
+teams can be found at the Free Translation Project's homepage,
+`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
+area.
+
+ If you'd like to volunteer to _work_ at translating messages, you
+should become a member of the translating team for your own language.
+The subscribing address is _not_ the same as the list itself, it has
+`-request' appended. For example, speakers of Swedish can send a
+message to `sv-request@li.org', having this message body:
+
+ subscribe
+
+ Keep in mind that team members are expected to participate
+_actively_ in translations, or at solving translational difficulties,
+rather than merely lurking around. If your team does not exist yet and
+you want to start one, or if you are unsure about what to do or how to
+get started, please write to `translation@iro.umontreal.ca' to reach the
+coordinator for all translator teams.
+
+ The English team is special. It works at improving and uniformizing
+the terminology in use. Proven linguistic skills are praised more than
+programming skills, here.
+
+1.5 Available Packages
+======================
+
+Languages are not equally supported in all packages. The following
+matrix shows the current state of internationalization, as of October
+2006. The matrix shows, in regard of each package, for which languages
+PO files have been submitted to translation coordination, with a
+translation percentage of at least 50%.
+
+ Ready PO files af am ar az be bg bs ca cs cy da de el en en_GB eo
+ +----------------------------------------------------+
+ GNUnet | [] |
+ a2ps | [] [] [] [] [] |
+ aegis | () |
+ ant-phone | () |
+ anubis | [] |
+ ap-utils | |
+ aspell | [] [] [] [] [] |
+ bash | [] [] [] |
+ batchelor | [] |
+ bfd | |
+ bibshelf | [] |
+ binutils | [] |
+ bison | [] [] |
+ bison-runtime | |
+ bluez-pin | [] [] [] [] [] |
+ cflow | [] |
+ clisp | [] [] |
+ console-tools | [] [] |
+ coreutils | [] [] [] |
+ cpio | |
+ cpplib | [] [] [] |
+ cryptonit | [] |
+ darkstat | [] () [] |
+ dialog | [] [] [] [] [] [] |
+ diffutils | [] [] [] [] [] [] |
+ doodle | [] |
+ e2fsprogs | [] [] |
+ enscript | [] [] [] [] |
+ error | [] [] [] [] |
+ fetchmail | [] [] () [] |
+ fileutils | [] [] |
+ findutils | [] [] [] |
+ flex | [] [] [] |
+ fslint | [] |
+ gas | |
+ gawk | [] [] [] |
+ gbiff | [] |
+ gcal | [] |
+ gcc | [] |
+ gettext-examples | [] [] [] [] [] |
+ gettext-runtime | [] [] [] [] [] |
+ gettext-tools | [] [] |
+ gimp-print | [] [] [] [] |
+ gip | [] |
+ gliv | [] |
+ glunarclock | [] |
+ gmult | [] [] |
+ gnubiff | () |
+ gnucash | () () [] |
+ gnucash-glossary | [] () |
+ gnuedu | |
+ gnulib | [] [] [] [] [] [] |
+ gnunet-gtk | |
+ gnutls | |
+ gpe-aerial | [] [] |
+ gpe-beam | [] [] |
+ gpe-calendar | |
+ gpe-clock | [] [] |
+ gpe-conf | [] [] |
+ gpe-contacts | |
+ gpe-edit | [] |
+ gpe-filemanager | |
+ gpe-go | [] |
+ gpe-login | [] [] |
+ gpe-ownerinfo | [] [] |
+ gpe-package | |
+ gpe-sketchbook | [] [] |
+ gpe-su | [] [] |
+ gpe-taskmanager | [] [] |
+ gpe-timesheet | [] |
+ gpe-today | [] [] |
+ gpe-todo | |
+ gphoto2 | [] [] [] [] |
+ gprof | [] [] |
+ gpsdrive | () () |
+ gramadoir | [] [] |
+ grep | [] [] [] [] [] [] |
+ gretl | |
+ gsasl | |
+ gss | |
+ gst-plugins | [] [] [] [] |
+ gst-plugins-base | [] [] [] |
+ gst-plugins-good | [] [] [] [] [] [] [] |
+ gstreamer | [] [] [] [] [] [] [] |
+ gtick | () |
+ gtkam | [] [] [] |
+ gtkorphan | [] [] |
+ gtkspell | [] [] [] [] |
+ gutenprint | [] |
+ hello | [] [] [] [] [] |
+ id-utils | [] [] |
+ impost | |
+ indent | [] [] [] |
+ iso_3166 | [] [] |
+ iso_3166_2 | |
+ iso_4217 | [] |
+ iso_639 | [] [] |
+ jpilot | [] |
+ jtag | |
+ jwhois | |
+ kbd | [] [] [] [] |
+ keytouch | |
+ keytouch-editor | |
+ keytouch-keyboa... | |
+ latrine | () |
+ ld | [] |
+ leafpad | [] [] [] [] [] |
+ libc | [] [] [] [] [] |
+ libexif | [] |
+ libextractor | [] |
+ libgpewidget | [] [] [] |
+ libgpg-error | [] |
+ libgphoto2 | [] [] |
+ libgphoto2_port | [] [] |
+ libgsasl | |
+ libiconv | [] [] |
+ libidn | [] [] |
+ lifelines | [] () |
+ lilypond | [] |
+ lingoteach | |
+ lynx | [] [] [] [] |
+ m4 | [] [] [] [] |
+ mailutils | [] |
+ make | [] [] |
+ man-db | [] () [] [] |
+ minicom | [] [] [] |
+ mysecretdiary | [] [] |
+ nano | [] [] [] |
+ nano_1_0 | [] () [] [] |
+ opcodes | [] |
+ parted | |
+ pilot-qof | [] |
+ psmisc | [] |
+ pwdutils | |
+ python | |
+ qof | |
+ radius | [] |
+ recode | [] [] [] [] [] [] |
+ rpm | [] [] |
+ screem | |
+ scrollkeeper | [] [] [] [] [] [] [] [] |
+ sed | [] [] [] |
+ sh-utils | [] [] |
+ shared-mime-info | [] [] [] [] |
+ sharutils | [] [] [] [] [] [] |
+ shishi | |
+ silky | |
+ skencil | [] () |
+ sketch | [] () |
+ solfege | |
+ soundtracker | [] [] |
+ sp | [] |
+ stardict | [] |
+ system-tools-ba... | [] [] [] [] [] [] [] [] [] |
+ tar | [] |
+ texinfo | [] [] [] |
+ textutils | [] [] [] |
+ tin | () () |
+ tp-robot | [] |
+ tuxpaint | [] [] [] [] [] |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux | [] [] [] [] |
+ vorbis-tools | [] [] [] [] |
+ wastesedge | () |
+ wdiff | [] [] [] [] |
+ wget | [] [] |
+ xchat | [] [] [] [] [] [] |
+ xkeyboard-config | |
+ xpad | [] [] |
+ +----------------------------------------------------+
+ af am ar az be bg bs ca cs cy da de el en en_GB eo
+ 10 0 1 2 9 22 1 42 41 2 60 95 16 1 17 16
+
+ es et eu fa fi fr ga gl gu he hi hr hu id is it
+ +--------------------------------------------------+
+ GNUnet | |
+ a2ps | [] [] [] () |
+ aegis | |
+ ant-phone | [] |
+ anubis | [] |
+ ap-utils | [] [] |
+ aspell | [] [] [] |
+ bash | [] [] [] |
+ batchelor | [] [] |
+ bfd | [] |
+ bibshelf | [] [] [] |
+ binutils | [] [] [] |
+ bison | [] [] [] [] [] [] |
+ bison-runtime | [] [] [] [] [] |
+ bluez-pin | [] [] [] [] [] |
+ cflow | [] |
+ clisp | [] [] |
+ console-tools | |
+ coreutils | [] [] [] [] [] [] |
+ cpio | [] [] [] |
+ cpplib | [] [] |
+ cryptonit | [] |
+ darkstat | [] () [] [] [] |
+ dialog | [] [] [] [] [] [] [] [] |
+ diffutils | [] [] [] [] [] [] [] [] [] |
+ doodle | [] [] |
+ e2fsprogs | [] [] [] |
+ enscript | [] [] [] |
+ error | [] [] [] [] [] |
+ fetchmail | [] |
+ fileutils | [] [] [] [] [] [] |
+ findutils | [] [] [] [] |
+ flex | [] [] [] |
+ fslint | [] |
+ gas | [] [] |
+ gawk | [] [] [] [] |
+ gbiff | [] |
+ gcal | [] [] |
+ gcc | [] |
+ gettext-examples | [] [] [] [] [] [] |
+ gettext-runtime | [] [] [] [] [] [] |
+ gettext-tools | [] [] [] |
+ gimp-print | [] [] |
+ gip | [] [] [] |
+ gliv | () |
+ glunarclock | [] [] [] |
+ gmult | [] [] [] |
+ gnubiff | () () |
+ gnucash | () () () |
+ gnucash-glossary | [] [] |
+ gnuedu | [] |
+ gnulib | [] [] [] [] [] [] [] [] |
+ gnunet-gtk | |
+ gnutls | |
+ gpe-aerial | [] [] |
+ gpe-beam | [] [] |
+ gpe-calendar | |
+ gpe-clock | [] [] [] [] |
+ gpe-conf | [] |
+ gpe-contacts | [] [] |
+ gpe-edit | [] [] [] [] |
+ gpe-filemanager | [] |
+ gpe-go | [] [] [] |
+ gpe-login | [] [] [] |
+ gpe-ownerinfo | [] [] [] [] [] |
+ gpe-package | [] |
+ gpe-sketchbook | [] [] |
+ gpe-su | [] [] [] [] |
+ gpe-taskmanager | [] [] [] |
+ gpe-timesheet | [] [] [] [] |
+ gpe-today | [] [] [] [] |
+ gpe-todo | [] |
+ gphoto2 | [] [] [] [] [] |
+ gprof | [] [] [] [] |
+ gpsdrive | () () [] () |
+ gramadoir | [] [] |
+ grep | [] [] [] [] [] [] [] [] [] [] [] [] |
+ gretl | [] [] [] |
+ gsasl | [] [] |
+ gss | [] |
+ gst-plugins | [] [] [] |
+ gst-plugins-base | [] [] |
+ gst-plugins-good | [] [] [] |
+ gstreamer | [] [] [] |
+ gtick | [] |
+ gtkam | [] [] [] [] |
+ gtkorphan | [] [] |
+ gtkspell | [] [] [] [] [] [] |
+ gutenprint | [] |
+ hello | [] [] [] [] [] [] [] [] [] [] [] [] [] |
+ id-utils | [] [] [] [] [] |
+ impost | [] [] |
+ indent | [] [] [] [] [] [] [] [] [] [] |
+ iso_3166 | [] [] [] |
+ iso_3166_2 | [] |
+ iso_4217 | [] [] [] [] |
+ iso_639 | [] [] [] [] [] |
+ jpilot | [] [] |
+ jtag | [] |
+ jwhois | [] [] [] [] [] |
+ kbd | [] [] |
+ keytouch | [] |
+ keytouch-editor | [] |
+ keytouch-keyboa... | [] |
+ latrine | [] [] [] |
+ ld | [] [] |
+ leafpad | [] [] [] [] [] [] |
+ libc | [] [] [] [] [] |
+ libexif | [] |
+ libextractor | [] |
+ libgpewidget | [] [] [] [] [] |
+ libgpg-error | |
+ libgphoto2 | [] [] [] |
+ libgphoto2_port | [] [] |
+ libgsasl | [] [] |
+ libiconv | [] [] |
+ libidn | [] [] |
+ lifelines | () |
+ lilypond | [] |
+ lingoteach | [] [] [] |
+ lynx | [] [] [] |
+ m4 | [] [] [] [] |
+ mailutils | [] [] |
+ make | [] [] [] [] [] [] [] [] |
+ man-db | () |
+ minicom | [] [] [] [] |
+ mysecretdiary | [] [] [] |
+ nano | [] [] [] [] [] [] |
+ nano_1_0 | [] [] [] [] [] |
+ opcodes | [] [] [] [] |
+ parted | [] [] [] [] |
+ pilot-qof | |
+ psmisc | [] [] [] |
+ pwdutils | |
+ python | |
+ qof | [] |
+ radius | [] [] |
+ recode | [] [] [] [] [] [] [] [] |
+ rpm | [] [] |
+ screem | |
+ scrollkeeper | [] [] [] |
+ sed | [] [] [] [] [] |
+ sh-utils | [] [] [] [] [] [] [] |
+ shared-mime-info | [] [] [] [] [] [] |
+ sharutils | [] [] [] [] [] [] [] [] |
+ shishi | |
+ silky | [] |
+ skencil | [] [] |
+ sketch | [] [] |
+ solfege | [] |
+ soundtracker | [] [] [] |
+ sp | [] |
+ stardict | [] |
+ system-tools-ba... | [] [] [] [] [] [] [] [] |
+ tar | [] [] [] [] [] [] [] |
+ texinfo | [] [] |
+ textutils | [] [] [] [] [] |
+ tin | [] () |
+ tp-robot | [] [] [] [] |
+ tuxpaint | [] [] |
+ unicode-han-tra... | |
+ unicode-transla... | [] [] |
+ util-linux | [] [] [] [] [] [] [] |
+ vorbis-tools | [] [] |
+ wastesedge | () |
+ wdiff | [] [] [] [] [] [] [] [] |
+ wget | [] [] [] [] [] [] [] [] |
+ xchat | [] [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] [] [] |
+ xpad | [] [] [] |
+ +--------------------------------------------------+
+ es et eu fa fi fr ga gl gu he hi hr hu id is it
+ 88 22 14 2 40 115 61 14 1 8 1 6 59 31 0 52
+
+ ja ko ku ky lg lt lv mk mn ms mt nb ne nl nn no
+ +-------------------------------------------------+
+ GNUnet | |
+ a2ps | () [] [] () |
+ aegis | () |
+ ant-phone | [] |
+ anubis | [] [] [] |
+ ap-utils | [] |
+ aspell | [] [] |
+ bash | [] |
+ batchelor | [] [] |
+ bfd | |
+ bibshelf | [] |
+ binutils | |
+ bison | [] [] [] |
+ bison-runtime | [] [] [] |
+ bluez-pin | [] [] [] |
+ cflow | |
+ clisp | [] |
+ console-tools | |
+ coreutils | [] |
+ cpio | |
+ cpplib | [] |
+ cryptonit | [] |
+ darkstat | [] [] |
+ dialog | [] [] |
+ diffutils | [] [] [] |
+ doodle | |
+ e2fsprogs | [] |
+ enscript | [] |
+ error | [] |
+ fetchmail | [] [] |
+ fileutils | [] [] |
+ findutils | [] |
+ flex | [] [] |
+ fslint | [] [] |
+ gas | |
+ gawk | [] [] |
+ gbiff | [] |
+ gcal | |
+ gcc | |
+ gettext-examples | [] [] |
+ gettext-runtime | [] [] [] |
+ gettext-tools | [] [] |
+ gimp-print | [] [] |
+ gip | [] [] |
+ gliv | [] |
+ glunarclock | [] [] |
+ gmult | [] [] |
+ gnubiff | |
+ gnucash | () () |
+ gnucash-glossary | [] |
+ gnuedu | |
+ gnulib | [] [] [] [] |
+ gnunet-gtk | |
+ gnutls | |
+ gpe-aerial | [] |
+ gpe-beam | [] |
+ gpe-calendar | [] |
+ gpe-clock | [] [] [] |
+ gpe-conf | [] [] |
+ gpe-contacts | [] |
+ gpe-edit | [] [] [] |
+ gpe-filemanager | [] [] |
+ gpe-go | [] [] [] |
+ gpe-login | [] [] [] |
+ gpe-ownerinfo | [] [] |
+ gpe-package | [] [] |
+ gpe-sketchbook | [] [] |
+ gpe-su | [] [] [] |
+ gpe-taskmanager | [] [] [] [] |
+ gpe-timesheet | [] |
+ gpe-today | [] [] |
+ gpe-todo | [] |
+ gphoto2 | [] [] |
+ gprof | |
+ gpsdrive | () () () |
+ gramadoir | () |
+ grep | [] [] [] [] |
+ gretl | |
+ gsasl | [] |
+ gss | |
+ gst-plugins | [] |
+ gst-plugins-base | |
+ gst-plugins-good | [] |
+ gstreamer | [] |
+ gtick | |
+ gtkam | [] |
+ gtkorphan | [] |
+ gtkspell | [] [] |
+ gutenprint | |
+ hello | [] [] [] [] [] [] |
+ id-utils | [] |
+ impost | |
+ indent | [] [] |
+ iso_3166 | [] |
+ iso_3166_2 | [] |
+ iso_4217 | [] [] [] |
+ iso_639 | [] [] |
+ jpilot | () () () |
+ jtag | |
+ jwhois | [] |
+ kbd | [] |
+ keytouch | [] |
+ keytouch-editor | |
+ keytouch-keyboa... | |
+ latrine | [] |
+ ld | |
+ leafpad | [] [] |
+ libc | [] [] [] [] [] |
+ libexif | |
+ libextractor | |
+ libgpewidget | [] |
+ libgpg-error | |
+ libgphoto2 | [] |
+ libgphoto2_port | [] |
+ libgsasl | [] |
+ libiconv | |
+ libidn | [] [] |
+ lifelines | [] |
+ lilypond | |
+ lingoteach | [] |
+ lynx | [] [] |
+ m4 | [] [] |
+ mailutils | |
+ make | [] [] [] |
+ man-db | () |
+ minicom | [] |
+ mysecretdiary | [] |
+ nano | [] [] [] |
+ nano_1_0 | [] [] [] |
+ opcodes | [] |
+ parted | [] [] |
+ pilot-qof | |
+ psmisc | [] [] [] |
+ pwdutils | |
+ python | |
+ qof | |
+ radius | |
+ recode | [] |
+ rpm | [] [] |
+ screem | [] |
+ scrollkeeper | [] [] [] [] |
+ sed | [] [] |
+ sh-utils | [] [] |
+ shared-mime-info | [] [] [] [] [] |
+ sharutils | [] [] |
+ shishi | |
+ silky | [] |
+ skencil | |
+ sketch | |
+ solfege | |
+ soundtracker | |
+ sp | () |
+ stardict | [] [] |
+ system-tools-ba... | [] [] [] [] |
+ tar | [] [] [] |
+ texinfo | [] [] [] |
+ textutils | [] [] [] |
+ tin | |
+ tp-robot | [] |
+ tuxpaint | [] |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux | [] [] |
+ vorbis-tools | [] |
+ wastesedge | [] |
+ wdiff | [] [] |
+ wget | [] [] |
+ xchat | [] [] [] [] |
+ xkeyboard-config | [] |
+ xpad | [] [] [] |
+ +-------------------------------------------------+
+ ja ko ku ky lg lt lv mk mn ms mt nb ne nl nn no
+ 52 24 2 2 1 3 0 2 3 21 0 15 1 97 5 1
+
+ nso or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv ta
+ +------------------------------------------------------+
+ GNUnet | |
+ a2ps | () [] [] [] [] [] [] |
+ aegis | () () |
+ ant-phone | [] [] |
+ anubis | [] [] [] |
+ ap-utils | () |
+ aspell | [] [] |
+ bash | [] [] [] |
+ batchelor | [] [] |
+ bfd | |
+ bibshelf | [] |
+ binutils | [] [] |
+ bison | [] [] [] [] [] |
+ bison-runtime | [] [] [] [] |
+ bluez-pin | [] [] [] [] [] [] [] [] [] |
+ cflow | [] |
+ clisp | [] |
+ console-tools | [] |
+ coreutils | [] [] [] [] |
+ cpio | [] [] [] |
+ cpplib | [] |
+ cryptonit | [] [] |
+ darkstat | [] [] [] [] [] [] |
+ dialog | [] [] [] [] [] [] [] [] [] |
+ diffutils | [] [] [] [] [] [] |
+ doodle | [] [] |
+ e2fsprogs | [] [] |
+ enscript | [] [] [] [] [] |
+ error | [] [] [] [] |
+ fetchmail | [] [] [] |
+ fileutils | [] [] [] [] [] |
+ findutils | [] [] [] [] [] [] |
+ flex | [] [] [] [] [] |
+ fslint | [] [] [] [] |
+ gas | |
+ gawk | [] [] [] [] |
+ gbiff | [] |
+ gcal | [] |
+ gcc | [] |
+ gettext-examples | [] [] [] [] [] [] [] [] |
+ gettext-runtime | [] [] [] [] [] [] [] [] |
+ gettext-tools | [] [] [] [] [] [] [] |
+ gimp-print | [] [] |
+ gip | [] [] [] [] |
+ gliv | [] [] [] [] |
+ glunarclock | [] [] [] [] [] [] |
+ gmult | [] [] [] [] |
+ gnubiff | () |
+ gnucash | () [] |
+ gnucash-glossary | [] [] [] |
+ gnuedu | |
+ gnulib | [] [] [] [] [] |
+ gnunet-gtk | [] |
+ gnutls | [] [] |
+ gpe-aerial | [] [] [] [] [] [] [] |
+ gpe-beam | [] [] [] [] [] [] [] |
+ gpe-calendar | [] |
+ gpe-clock | [] [] [] [] [] [] [] [] |
+ gpe-conf | [] [] [] [] [] [] [] |
+ gpe-contacts | [] [] [] [] [] |
+ gpe-edit | [] [] [] [] [] [] [] [] |
+ gpe-filemanager | [] [] |
+ gpe-go | [] [] [] [] [] [] |
+ gpe-login | [] [] [] [] [] [] [] [] |
+ gpe-ownerinfo | [] [] [] [] [] [] [] [] |
+ gpe-package | [] [] |
+ gpe-sketchbook | [] [] [] [] [] [] [] [] |
+ gpe-su | [] [] [] [] [] [] [] [] |
+ gpe-taskmanager | [] [] [] [] [] [] [] [] |
+ gpe-timesheet | [] [] [] [] [] [] [] [] |
+ gpe-today | [] [] [] [] [] [] [] [] |
+ gpe-todo | [] [] [] [] |
+ gphoto2 | [] [] [] [] [] |
+ gprof | [] [] [] |
+ gpsdrive | [] [] [] |
+ gramadoir | [] [] |
+ grep | [] [] [] [] [] [] [] [] |
+ gretl | [] |
+ gsasl | [] [] [] |
+ gss | [] [] [] |
+ gst-plugins | [] [] [] [] |
+ gst-plugins-base | [] |
+ gst-plugins-good | [] [] [] [] |
+ gstreamer | [] [] [] |
+ gtick | [] |
+ gtkam | [] [] [] [] |
+ gtkorphan | [] |
+ gtkspell | [] [] [] [] [] [] [] [] |
+ gutenprint | [] |
+ hello | [] [] [] [] [] [] [] [] |
+ id-utils | [] [] [] [] |
+ impost | [] |
+ indent | [] [] [] [] [] [] |
+ iso_3166 | [] [] [] [] [] [] |
+ iso_3166_2 | |
+ iso_4217 | [] [] [] [] |
+ iso_639 | [] [] [] [] |
+ jpilot | |
+ jtag | [] |
+ jwhois | [] [] [] [] |
+ kbd | [] [] [] |
+ keytouch | [] |
+ keytouch-editor | [] |
+ keytouch-keyboa... | [] |
+ latrine | [] [] |
+ ld | [] |
+ leafpad | [] [] [] [] [] [] |
+ libc | [] [] [] [] [] |
+ libexif | [] |
+ libextractor | [] [] |
+ libgpewidget | [] [] [] [] [] [] [] |
+ libgpg-error | [] [] |
+ libgphoto2 | [] |
+ libgphoto2_port | [] [] [] |
+ libgsasl | [] [] [] [] |
+ libiconv | [] [] |
+ libidn | [] [] () |
+ lifelines | [] [] |
+ lilypond | |
+ lingoteach | [] |
+ lynx | [] [] [] |
+ m4 | [] [] [] [] [] |
+ mailutils | [] [] [] [] |
+ make | [] [] [] [] |
+ man-db | [] [] |
+ minicom | [] [] [] [] [] |
+ mysecretdiary | [] [] [] [] |
+ nano | [] [] [] |
+ nano_1_0 | [] [] [] [] |
+ opcodes | [] [] |
+ parted | [] |
+ pilot-qof | [] |
+ psmisc | [] [] |
+ pwdutils | [] [] |
+ python | |
+ qof | [] [] |
+ radius | [] [] |
+ recode | [] [] [] [] [] [] [] |
+ rpm | [] [] [] [] |
+ screem | |
+ scrollkeeper | [] [] [] [] [] [] [] |
+ sed | [] [] [] [] [] [] [] [] [] |
+ sh-utils | [] [] [] |
+ shared-mime-info | [] [] [] [] [] |
+ sharutils | [] [] [] [] |
+ shishi | [] |
+ silky | [] |
+ skencil | [] [] [] |
+ sketch | [] [] [] |
+ solfege | [] |
+ soundtracker | [] [] |
+ sp | |
+ stardict | [] [] [] |
+ system-tools-ba... | [] [] [] [] [] [] [] [] [] |
+ tar | [] [] [] [] [] |
+ texinfo | [] [] [] [] |
+ textutils | [] [] [] |
+ tin | () |
+ tp-robot | [] |
+ tuxpaint | [] [] [] [] [] |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux | [] [] [] [] |
+ vorbis-tools | [] [] |
+ wastesedge | |
+ wdiff | [] [] [] [] [] [] |
+ wget | [] [] [] [] |
+ xchat | [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] |
+ xpad | [] [] [] |
+ +------------------------------------------------------+
+ nso or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv ta
+ 0 2 3 58 30 54 5 73 72 4 40 46 11 50 128 2
+
+ tg th tk tr uk ven vi wa xh zh_CN zh_HK zh_TW zu
+ +---------------------------------------------------+
+ GNUnet | [] | 2
+ a2ps | [] [] [] | 19
+ aegis | | 0
+ ant-phone | [] [] | 6
+ anubis | [] [] [] | 11
+ ap-utils | () [] | 4
+ aspell | [] [] [] | 15
+ bash | [] | 11
+ batchelor | [] [] | 9
+ bfd | | 1
+ bibshelf | [] | 7
+ binutils | [] [] [] | 9
+ bison | [] [] [] | 19
+ bison-runtime | [] [] [] | 15
+ bluez-pin | [] [] [] [] [] [] | 28
+ cflow | [] [] | 5
+ clisp | | 6
+ console-tools | [] [] | 5
+ coreutils | [] [] | 16
+ cpio | [] [] [] | 9
+ cpplib | [] [] [] [] | 11
+ cryptonit | | 5
+ darkstat | [] () () | 15
+ dialog | [] [] [] [] [] | 30
+ diffutils | [] [] [] [] | 28
+ doodle | [] | 6
+ e2fsprogs | [] [] | 10
+ enscript | [] [] [] | 16
+ error | [] [] [] [] | 18
+ fetchmail | [] [] | 12
+ fileutils | [] [] [] | 18
+ findutils | [] [] [] | 17
+ flex | [] [] | 15
+ fslint | [] | 9
+ gas | [] | 3
+ gawk | [] [] | 15
+ gbiff | [] | 5
+ gcal | [] | 5
+ gcc | [] [] [] | 6
+ gettext-examples | [] [] [] [] [] [] | 27
+ gettext-runtime | [] [] [] [] [] [] | 28
+ gettext-tools | [] [] [] [] [] | 19
+ gimp-print | [] [] | 12
+ gip | [] [] | 12
+ gliv | [] [] | 8
+ glunarclock | [] [] [] | 15
+ gmult | [] [] [] [] | 15
+ gnubiff | [] | 1
+ gnucash | () | 2
+ gnucash-glossary | [] [] | 9
+ gnuedu | [] | 2
+ gnulib | [] [] [] [] [] | 28
+ gnunet-gtk | | 1
+ gnutls | | 2
+ gpe-aerial | [] [] | 14
+ gpe-beam | [] [] | 14
+ gpe-calendar | [] | 3
+ gpe-clock | [] [] [] [] | 21
+ gpe-conf | [] [] | 14
+ gpe-contacts | [] [] | 10
+ gpe-edit | [] [] [] [] | 20
+ gpe-filemanager | [] | 6
+ gpe-go | [] [] | 15
+ gpe-login | [] [] [] [] [] | 21
+ gpe-ownerinfo | [] [] [] [] | 21
+ gpe-package | [] | 6
+ gpe-sketchbook | [] [] | 16
+ gpe-su | [] [] [] | 20
+ gpe-taskmanager | [] [] [] | 20
+ gpe-timesheet | [] [] [] [] | 18
+ gpe-today | [] [] [] [] [] | 21
+ gpe-todo | [] | 7
+ gphoto2 | [] [] [] [] | 20
+ gprof | [] [] | 11
+ gpsdrive | | 4
+ gramadoir | [] | 7
+ grep | [] [] [] [] | 34
+ gretl | | 4
+ gsasl | [] [] | 8
+ gss | [] | 5
+ gst-plugins | [] [] [] | 15
+ gst-plugins-base | [] [] [] | 9
+ gst-plugins-good | [] [] [] [] [] | 20
+ gstreamer | [] [] [] | 17
+ gtick | [] | 3
+ gtkam | [] | 13
+ gtkorphan | [] | 7
+ gtkspell | [] [] [] [] [] [] | 26
+ gutenprint | | 3
+ hello | [] [] [] [] [] | 37
+ id-utils | [] [] | 14
+ impost | [] | 4
+ indent | [] [] [] [] | 25
+ iso_3166 | [] [] [] [] | 16
+ iso_3166_2 | | 2
+ iso_4217 | [] [] | 14
+ iso_639 | [] | 14
+ jpilot | [] [] [] [] | 7
+ jtag | [] | 3
+ jwhois | [] [] [] | 13
+ kbd | [] [] | 12
+ keytouch | [] | 4
+ keytouch-editor | | 2
+ keytouch-keyboa... | [] | 3
+ latrine | [] [] | 8
+ ld | [] [] [] [] | 8
+ leafpad | [] [] [] [] | 23
+ libc | [] [] [] | 23
+ libexif | [] | 4
+ libextractor | [] | 5
+ libgpewidget | [] [] [] | 19
+ libgpg-error | [] | 4
+ libgphoto2 | [] | 8
+ libgphoto2_port | [] [] [] | 11
+ libgsasl | [] | 8
+ libiconv | [] | 7
+ libidn | [] [] | 10
+ lifelines | | 4
+ lilypond | | 2
+ lingoteach | [] | 6
+ lynx | [] [] [] | 15
+ m4 | [] [] [] | 18
+ mailutils | [] | 8
+ make | [] [] [] | 20
+ man-db | [] | 6
+ minicom | [] | 14
+ mysecretdiary | [] [] | 12
+ nano | [] [] | 17
+ nano_1_0 | [] [] [] | 18
+ opcodes | [] [] | 10
+ parted | [] [] [] | 10
+ pilot-qof | [] | 3
+ psmisc | [] | 10
+ pwdutils | [] | 3
+ python | | 0
+ qof | [] | 4
+ radius | [] | 6
+ recode | [] [] [] | 25
+ rpm | [] [] [] [] | 14
+ screem | [] | 2
+ scrollkeeper | [] [] [] [] | 26
+ sed | [] [] [] | 22
+ sh-utils | [] | 15
+ shared-mime-info | [] [] [] [] | 24
+ sharutils | [] [] [] | 23
+ shishi | | 1
+ silky | [] | 4
+ skencil | [] | 7
+ sketch | | 6
+ solfege | | 2
+ soundtracker | [] [] | 9
+ sp | [] | 3
+ stardict | [] [] [] [] | 11
+ system-tools-ba... | [] [] [] [] [] [] [] | 37
+ tar | [] [] [] [] | 20
+ texinfo | [] [] [] | 15
+ textutils | [] [] [] | 17
+ tin | | 1
+ tp-robot | [] [] [] | 10
+ tuxpaint | [] [] [] | 16
+ unicode-han-tra... | | 0
+ unicode-transla... | | 2
+ util-linux | [] [] [] | 20
+ vorbis-tools | [] [] | 11
+ wastesedge | | 1
+ wdiff | [] [] | 22
+ wget | [] [] [] | 19
+ xchat | [] [] [] [] | 29
+ xkeyboard-config | [] [] [] [] | 11
+ xpad | [] [] [] | 14
+ +---------------------------------------------------+
+ 77 teams tg th tk tr uk ven vi wa xh zh_CN zh_HK zh_TW zu
+ 170 domains 0 1 1 77 39 0 136 10 1 48 5 54 0 2028
+
+ Some counters in the preceding matrix are higher than the number of
+visible blocks let us expect. This is because a few extra PO files are
+used for implementing regional variants of languages, or language
+dialects.
+
+ For a PO file in the matrix above to be effective, the package to
+which it applies should also have been internationalized and
+distributed as such by its maintainer. There might be an observable
+lag between the mere existence a PO file and its wide availability in a
+distribution.
+
+ If October 2006 seems to be old, you may fetch a more recent copy of
+this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date
+matrix with full percentage details can be found at
+`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
+
+1.6 Using `gettext' in new packages
+===================================
+
+If you are writing a freely available program and want to
+internationalize it you are welcome to use GNU `gettext' in your
+package. Of course you have to respect the GNU Library General Public
+License which covers the use of the GNU `gettext' library. This means
+in particular that even non-free programs can use `libintl' as a shared
+library, whereas only free software can use `libintl' as a static
+library or use modified versions of `libintl'.
+
+ Once the sources are changed appropriately and the setup can handle
+the use of `gettext' the only thing missing are the translations. The
+Free Translation Project is also available for packages which are not
+developed inside the GNU project. Therefore the information given above
+applies also for every other Free Software Project. Contact
+`translation@iro.umontreal.ca' to make the `.pot' files available to
+the translation teams.
+
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..88bd403
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,118 @@
+NOTE:
+ This license has been obsoleted by the change to the BSD-style copyright.
+ You may continue to use this license if you wish, but you are under no
+ obligation to do so.
+
+(*
+This document is freely plagiarised from the 'Artistic Licence',
+distributed as part of the Perl v4.0 kit by Larry Wall, which is
+available from most major archive sites. I stole it from CrackLib.
+
+ $Id$
+*)
+
+This documents purpose is to state the conditions under which this
+Package (See definition below) viz: "Shadow", the Shadow Password Suite
+which is held by Julianne Frances Haugh, may be copied, such that the
+copyright holder maintains some semblance of artistic control over the
+development of the package, while giving the users of the package the
+right to use and distribute the Package in a more-or-less customary
+fashion, plus the right to make reasonable modifications.
+
+So there.
+
+***************************************************************************
+
+Definitions:
+
+
+A "Package" refers to the collection of files distributed by the
+Copyright Holder, and derivatives of that collection of files created
+through textual modification, or segments thereof.
+
+"Standard Version" refers to such a Package if it has not been modified,
+or has been modified in accordance with the wishes of the Copyright
+Holder.
+
+"Copyright Holder" is whoever is named in the copyright or copyrights
+for the package.
+
+"You" is you, if you're thinking about copying or distributing this
+Package.
+
+"Reasonable copying fee" is whatever you can justify on the basis of
+media cost, duplication charges, time of people involved, and so on.
+(You will not be required to justify it to the Copyright Holder, but
+only to the computing community at large as a market that must bear the
+fee.)
+
+"Freely Available" means that no fee is charged for the item itself,
+though there may be fees involved in handling the item. It also means
+that recipients of the item may redistribute it under the same
+conditions they received it.
+
+
+1. You may make and give away verbatim copies of the source form of the
+Standard Version of this Package without restriction, provided that you
+duplicate all of the original copyright notices and associated
+disclaimers.
+
+2. You may apply bug fixes, portability fixes and other modifications
+derived from the Public Domain or from the Copyright Holder. A Package
+modified in such a way shall still be considered the Standard Version.
+
+3. You may otherwise modify your copy of this Package in any way,
+provided that you insert a prominent notice in each changed file stating
+how and when AND WHY you changed that file, and provided that you do at
+least ONE of the following:
+
+a) place your modifications in the Public Domain or otherwise make them
+Freely Available, such as by posting said modifications to Usenet or an
+equivalent medium, or placing the modifications on a major archive site
+such as uunet.uu.net, or by allowing the Copyright Holder to include
+your modifications in the Standard Version of the Package.
+
+b) use the modified Package only within your corporation or organization.
+
+c) rename any non-standard executables so the names do not conflict with
+standard executables, which must also be provided, and provide separate
+documentation for each non-standard executable that clearly documents
+how it differs from the Standard Version.
+
+d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or
+executable form, provided that you do at least ONE of the following:
+
+a) distribute a Standard Version of the executables and library files,
+together with instructions (in the manual page or equivalent) on where
+to get the Standard Version.
+
+b) accompany the distribution with the machine-readable source of the
+Package with your modifications.
+
+c) accompany any non-standard executables with their corresponding
+Standard Version executables, giving the non-standard executables
+non-standard names, and clearly documenting the differences in manual
+pages (or equivalent), together with instructions on where to get the
+Standard Version.
+
+d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of this
+Package. You may charge any fee you choose for support of this Package.
+YOU MAY NOT CHARGE A FEE FOR THIS PACKAGE ITSELF. However, you may
+distribute this Package in aggregate with other (possibly commercial)
+programs as part of a larger (possibly commercial) software distribution
+provided that YOU DO NOT ADVERTISE this package as a product of your
+own.
+
+6. The name of the Copyright Holder may not be used to endorse or
+promote products derived from this software without specific prior
+written permission.
+
+7. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+ The End
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..89b065a
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,15259 @@
+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
+
+2017-05-17 Serge Hallyn <serge@hallyn.com>
+
+ * Patch from Tobias Stoeckmann fixing regression in previous CVE fix
+ preventing SIGTERM to su from being propagated to the job.
+ * Patch from Chris Lamb making sp_lstchg shadow field reproducible.
+ * Merge Russian translation updates from Yuri Kozlov
+ * Fix missing close of subuid file on error
+
+2017-02-23 Serge Hallyn <serge@hallyn.com>
+
+ * Merge patch by Tobias Stoeckmann <tobias@stoeckmann.org> to fix
+ the equivalent of util-linux CVE-2017-2616.
+
+2017-02-08 Serge Hallyn <serge@hallyn.com>
+
+ * Update Kazakh translations
+ * Consult configuration before calculating subuids
+ * Remove misplaced semicolon
+
+2017-01-29 Serge Hallyn <serge@hallyn.com>
+
+ * Patch from Fedora to improve performance with SSSD, Winbind,
+ or nss_ldap. (Tomas Mraz)
+ * Make sure knowndef_table is NULL-terminated. (Bernhard Rosenkränzer)
+
+2016-12-21 Serge Hallyn <serge@hallyn.com>
+
+ * Drop leading underscore from _COMMONIO_H and _SHADOWIO_H
+ * Fix readability in usermod error messages.
+ * Reset user in tallylog
+ * Add audit support to su
+
+2016-12-02 Serge Hallyn <serge@hallyn.com>
+
+ * changes since 4.4
+ - Use sizeof rather than hardcoding snprintf args
+ - Fix useradd improper default loading
+ - Update Vietnamese translations
+ - Update Polish translations
+ - Remove non-POSIX chmod option in Makefile
+ - Fix suidubins assignments
+ - Fix --add-subuids etc spelling in manpages
+ - Audit homedir ownership change.
+ - Print error on selinux file context update failure
+ - Keep original file perms when creating a backup
+
+ * (henceforth we'll update Changelog with each commit
+ and proper credit)
+
+2016-12-02 Serge Hallyn <serge@hallyn.com>
+
+ * Changes since 4.2.1:
+ - Documentation, error report and translations updates
+ - Replace path_max with 32
+ - User namespace support fixes/updates including:
+ - Correct sanity checks in newXidmap
+ - Fix building without subuid support
+ - Add /etc/subuid support for UID matching
+ - Support subuid for nonlocal users
+ - Default to 65536 subuid allocations
+ - Respect -r
+ - Check for range overflows
+ - Add tests from svn tree
+ - Use AC_CHECK_SIZEOF for uid_t size checks
+ - Accomodate missing /etc and login.defs
+ - Support FORCE_SHADOW
+ - Be more robust in hostile environment
+ - Allow removing a primary group
+ - Clear passwords on __pw_dup errors
+ - Memory leak fix in commonio_update and get_map_ranges
+ - Fix resource leak in syslog_sg
+ - Fix user busy error at userdel
+ - Support set/clear lastlog record via lastlog command
+ - Add --no-create-home as longopt for -M
+ - Fix signal races
+ - Reduce syslog priority of common usage events
+
+2013-08-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/vipw.c: After waitpid(), use errno only if waitpid returned
+ -1. Debian#688260
+ * src/vipw.c: Likewise for system().
+
+2013-08-23 victory <victory.deb@gmail.com>
+
+ * po/ja.po: Updated to 558t
+
+2013-08-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/po/shadow-man-pages.pot: Regenerated.
+ * man/po/*.po: Updated PO files.
+
+2013-08-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/newgrp.1.xml: Fix encoding.
+ * man/sg.1.xml: Likewise.
+
+2013-08-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/po/da.po: Unfuzzy according to previous change.
+ * man/po/de.po: Likewise.
+ * man/po/fr.po: Likewise.
+ * man/po/it.po: Likewise.
+ * man/po/pl.po: Likewise.
+ * man/po/ru.po: Likewise.
+ * man/po/sv.po: Likewise.
+ * man/po/zh_CN.po: Likewise.
+
+2013-08-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/chage.1.xml: Add a non breaking space between options and
+ their parameter because xml2po removes those spaces. Alioth#314401
+ * man/chfn.1.xml: Likewise.
+ * man/chgpasswd.8.xml: Likewise.
+ * man/chpasswd.8.xml: Likewise.
+ * man/chsh.1.xml: Likewise.
+ * man/faillog.8.xml: Likewise.
+ * man/gpasswd.1.xml: Likewise.
+ * man/groupadd.8.xml: Likewise.
+ * man/groupdel.8.xml: Likewise.
+ * man/groupmems.8.xml: Likewise.
+ * man/groupmod.8.xml: Likewise.
+ * man/grpck.8.xml: Likewise.
+ * man/lastlog.8.xml: Likewise.
+ * man/newusers.8.xml: Likewise.
+ * man/passwd.1.xml: Likewise.
+ * man/pwck.8.xml: Likewise.
+ * man/pwconv.8.xml: Likewise.
+ * man/su.1.xml: Likewise.
+ * man/useradd.8.xml: Likewise.
+ * man/userdel.8.xml: Likewise.
+ * man/usermod.8.xml: Likewise.
+ * man/vipw.8.xml: Likewise.
+
+2013-08-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/po/shadow-man-pages.pot: Regenerated.
+ * man/po/*.po: Updated PO files.
+
+2013-08-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/po/de.po: Fix encoding.
+
+2013-08-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/subordinateio.c (subordinate_next): Fix return value.
+
+2013-08-16 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/idmapping.c: Include <stdio.h> needed for fprintf() and
+ stderr.
+
+2013-08-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/login.defs.d/SUB_GID_COUNT.xml: Document newusers behavior
+ when the user already have subordinate group IDs.
+ * man/login.defs.d/SUB_UID_COUNT.xml: Likewise.
+ * man/login.defs.d/SUB_GID_COUNT.xml: Fix typo (MAX<->MIN).
+ * man/login.defs.d/SUB_UID_COUNT.xml: Likewise.
+
+2013-08-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: Check early if /etc/subuid (/etc/subgid) exists
+ when option -v/-V (-w/-W) are provided.
+
+2013-08-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: Fix parse of ranges. The hyphen might be followed
+ by a negative integer.
+
+2013-08-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/subordinateio.c (find_free_range): max is allowed for new
+ ranges.
+
+2013-08-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/find_new_sub_gids.c: Remove dead code.
+ find_new_sub_gids() is always called with *range_count set to 0.
+ It's more difficult to keep the subordinate GIDs and UIDs
+ synchronized, than for the user's UID/GId because the count of
+ subordinate IDs may differ.
+ * libmisc/find_new_sub_uids.c: Likewise.
+ * lib/subordinateio.h, lib/subordinateio.c: Remove APIs that are
+ no more needed: is_sub_uid_range_free(), is_sub_gid_range_free(),
+ is_range_free().
+
+2013-08-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * configure.in: Check if sizeof uid_t and gid_t is larger than 32
+ bit to support subordinate IDs.
+
+2013-08-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/subordinateio.c: Avoid dead branches.
+ * lib/subordinateio.c: Add schematics with ranges to help reviews.
+ * lib/subordinateio.c: Avoid implicit conversion of pointers and
+ integers to booleans.
+ * lib/subordinateio.c: Added brackets.
+
+2013-08-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/vipw.c: Fail in case arguments are provided after options.
+ Debian#677812
+
+2013-08-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/subordinateio.c: Fix count for ranges truncated in
+ remove_range().
+
+2013-08-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/su.c: Terminate the child (if needed) before closing the PAM
+ session. This is probably more correct, and avoid reporting
+ termination from signals possibly sent by PAM modules (e.g. former
+ versions of pam_systemd). Debian#670132
+
+2013-08-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/su.c: When a SIGTSTP is caught, reset caught to 0. There is
+ no need to kill the child in such case after su is resumed. This
+ remove the "Session terminated, terminating shell...
+ ...terminated." messages in such case.
+
+2013-08-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/newgidmap.1.xml: Document the checks performed before
+ setting the mapping in /proc.
+ * man/newuidmap.1.xml: Likewise.
+
+2013-08-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/idmapping.h: Document what the upper and lower fields
+ are in struct map_range.
+ * man/newgidmap.1.xml: Document when the gid, gidlower and count
+ argument are.
+ * man/newuidmap.1.xml: Likewise for uid, uidlower and count.
+
+2013-08-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/salt.c (shadow_random): Use long instead of size_t.
+ Compatibility with size_t is easier to check since it's used for
+ smaller numbers (salt size).
+
+2013-08-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/groupmem.c: Add splint annotations. The added memset makes
+ splint think data was allocated.
+ * lib/pwmem.c: Likewise.
+ * lib/sgroupio.c: Likewise.
+ * lib/shadowmem.c: Likewise.
+
+2013-08-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/login.defs.d/SUB_GID_COUNT.xml: Document that the behavior
+ of useradd and newusers depends on the existence of /etc/subgid.
+ * man/login.defs.d/SUB_UID_COUNT.xml: Likewise for /etc/subuid.
+
+2013-08-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: Change message in case of find_new_sub_uids /
+ find_new_sub_gids failure. This complements the messages already
+ provided by these APIs.
+
+2013-08-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/subordinateio.c: Fix handling of boundaries.
+ * libmisc/find_new_sub_uids.c: Likewise.
+ * libmisc/find_new_sub_gids.c: Likewise.
+
+2013-08-12 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/subordinateio.c: Fix removal of ranges. The database needs
+ to be marked as changed or commonio_close will discard any change.
+
+2013-08-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/newusers.8.xml: Include documentation of SUB_GID_MIN,
+ SUB_GID_MAX, SUB_GID_COUNT, SUB_UID_MIN, SUB_UID_MAX,
+ SUB_UID_COUNT.
+ * man/useradd.8.xml: Likewise.
+ * man/usermod.8.xml: Likewise.
+ * man/newusers.8.xml: Document usage of /etc/subgid /etc/subuid.
+ * man/useradd.8.xml: Likewise.
+ * man/userdel.8.xml: Likewise.
+ * man/usermod.8.xml: Likewise.
+ * man/newusers.8.xml: Add references to subgid(5) and subuid(5).
+ * man/useradd.8.xml: Likewise.
+ * man/userdel.8.xml: Likewise.
+ * man/subgid.5.xml: Sort references alphabetically.
+ * man/subuid.5.xml: Likewise.
+ * man/subgid.5.xml: Add references to newusers(8), useradd(8),
+ userdel(8), usermod(8), user_namespaces(7).
+ * man/subuid.5.xml: Likewise.
+
+2013-08-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/newgidmap.1.xml: Sort references alphabetically.
+ * man/newuidmap.1.xml: Likewise.
+
+2013-08-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * configure.in: Add configure options --enable-subordinate-ids /
+ --disable-subordinate-ids. Enabled by default.
+ * lib/prototypes.h: Include <config.h> before using its macros.
+ * lib/commonio.h, lib/commonio.c: Define commonio_append only when
+ ENABLE_SUBIDS is defined.
+ * lib/prototypes.h, libmisc/find_new_sub_gids.c,
+ libmisc/find_new_sub_uids.c: Likewise.
+ * lib/subordinateio.h, lib/subordinateio.c: Likewise.
+ * libmisc/user_busy.c: Only check if subordinate IDs are in use if
+ ENABLE_SUBIDS is defined.
+ * src/Makefile.am: Create newgidmap and newuidmap only if
+ ENABLE_SUBIDS is defined.
+ * src/newusers.c: Check for ENABLE_SUBIDS to enable support for
+ subordinate IDs.
+ * src/useradd.c: Likewise.
+ * src/userdel.c: Likewise.
+ * src/usermod.c: Likewise.
+ * man/Makefile.am: Install man1/newgidmap.1, man1/newuidmap.1,
+ man5/subgid.5, and man5/subuid.5 only if ENABLE_SUBIDS is defined.
+ * man/fr/Makefile.am: Install man1/newgidmap.1, man1/newuidmap.1,
+ man5/subgid.5, and man5/subuid.5 (not translated yet).
+ * man/generate_mans.mak: Add xsltproc conditionals
+ subids/no_subids.
+ * man/login.defs.d/SUB_GID_COUNT.xml: Add dependency on subids
+ condition.
+ * man/login.defs.d/SUB_UID_COUNT.xml: Likewise.
+ * man/usermod.8.xml: Document options for subordinate IDs and
+ reference subgid(5) / subuid(5) depending on the subids condition.
+
+2013-08-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/salt.c: Remove unused variable.
+
+2013-08-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/utmp.c: Add include files needed for getaddrinfo().
+ See Alioth#314271
+
+2013-08-07 Mike Frysinger <vapier@gentoo.org>
+
+ * configure.in: Check at configure time whether libc supports
+ ruserok (support dropped by newer C libraries).
+
+2013-08-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/usermod.8.xml: Fix typos and wording.
+ * man/usermod.8.xml: Add references to subgid(5) and subuid(5).
+
+2013-08-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/find_new_sub_gids.c: Fix wording: secondary ->
+ subordinate.
+ * libmisc/find_new_sub_uids.c: Likewise.
+
+2013-08-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/find_new_sub_gids.c: Remove duplicate check (duplicate
+ at least in its intent).
+ * libmisc/find_new_sub_uids.c: Likewise.
+
+2013-08-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: Fix typos.
+
+2013-08-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/subgid.5.xml: Reorder words.
+ * man/subuid.5.xml: Likewise.
+
+2013-08-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/subgid.5.xml: Fix typos.
+ * man/subuid.5.xml: Likewise.
+ * man/subgid.5.xml: Fix copy-paste errors from subuid.5.xml.
+
+2013-08-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/newgidmap.1.xml: Remove copy-pasted NOTE.
+ * man/newuidmap.1.xml: Likewise.
+
+2013-08-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/subordinateio.c: Remove unused variables.
+
+2013-08-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/login.defs.d/SUB_GID_COUNT.xml: Fix typo.
+ * man/login.defs.d/SUB_UID_COUNT.xml: Likewise.
+ * man/login.defs.d/SUB_UID_COUNT.xml: Fix copy-paste issue from
+ SUB_GID_COUNT.
+ * man/newgidmap.1.xml: Fix Typo.
+ * src/useradd.c: Fix typos.
+ * lib/subordinateio.c: Fix typos.
+
+2013-08-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ Fix Debian bug #675824
+ * lib/groupmem.c (__gr_dup): Support libc which define other
+ fields in struct group.
+ * lib/pwmem.c: Likewise for struct passwd.
+ * lib/shadowmem.c: Likewise for struct spwd.
+ * lib/sgroupio.c: Apply same logic, even if this structure is
+ defined internally.
+
+2013-08-05 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/groupio.c: Revert change from 2013-07-29. The length of the
+ concatenated 2 lines was correct.
+
+2013-08-05 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/salt.c: random() max value is 2^31-1 (same as RAND_MAX
+ on GNU). As it is not clear whether on some systems the max value
+ can exceed this number and whether some systems have max values
+ which would be lower, we take this into account when defining the
+ salt size and number of rounds for SHA encrypted passwords. Higher
+ values are favored.
+
+2013-08-04 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/su.1.xml: With getopt, '-' does not need to be the last
+ option, but it is recommended for portability.
+ Closes https://bugs.launchpad.net/bugs/1100775
+
+2013-08-04 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS: Add NEWS entries.
+
+2013-08-04 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/po/da.po: Fix translation (--home became --home-dir).
+ * man/po/de.po: Likewise.
+ * man/po/fr.po: Likewise.
+ * man/po/pl.po: Likewise.
+ * man/po/ru.po: Likewise.
+ * man/po/sv.po: Likewise.
+
+2013-08-04 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/groupio.c (merge_group_entries): Do not allocate more than
+ necessary (sizeof char* instead of char).
+ Thanks for Tomáš Mráz (alioth#313962)
+ * lib/groupio.c (merge_group_entries): Document that new_members
+ is correctly NULL terminated. (alioth:#313940)
+
+2013-08-03 Nicolas François <nicolas.francois@centraliens.net>
+
+ * Changelog: Update documentation of 2013-07-28 mancha entry.
+ * lib/prototypes.h, lib/encrypt.c: Update splint marker,
+ pw_encrypt can return NULL.
+ * lib/encrypt.c: Fix outdated statement on GNU crypt.
+ * src/chgpasswd.c: Improve diagnostic to user when pw_encrypt
+ fails and use fail_exit() instead of exit().
+ * src/chpasswd.c: Likewise.
+ * src/newusers.c: Likewise.
+ * src/passwd.c: Likewise when new password is encrypted.
+ * src/newgrp.c: Improve diagnostic to user and syslog when
+ pw_encrypt fails. Do not apply 1s penalty as this is not an
+ invalid password issue.
+ * src/passwd.c: Likewise when password is checked.
+
+2013-08-02 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/setupenv.c: xstrdup the static char* temp_pw_dir /
+ temp_pw_shell. That way we can continue to use pw_free() without
+ segving. Thanks to Serge Hallyn for the patch.
+ * libmisc/setupenv.c: Free pw_dir and pw_shell before reallocating
+ them.
+
+2013-08-01 Yuri Kozlov <yuray@komyakino.ru>
+
+ * po/ru.po: completed translation
+ Closes: Debian#718356
+
+2013-07-29 Michael Scherer <misc-guest@alioth.debian.org>
+
+ * libmisc/root_flag.c: use chdir() before calling chroot() to
+ avoid potential security issue (see
+ http://www.bpfh.net/simes/computing/chroot-break.html)
+ Closes: alioth#313962
+
+2013-07-29 Christian Perrier <christian@perrier.eu.org>
+
+ * man/useradd.xml: use "--home-dir" instead of "--home"
+ Fix translations too.
+ Thanks to Ville Skyttä
+ Closes: alioth#313880
+
+2013-07-29 Ville Skyttä <scop-guest@alioth.debian.org>
+
+ * man/ja/man8/groupmod.8: Syntax fix
+ Closes: alioth#313785
+
+2013-07-29 Brad Hubbard <badone-guest@alioth.debian.org>
+
+ * lib/groupio.c: add newline char when two lines
+ are concatenated
+ Closes: alioth#313942
+ * lib/groupio.c: fix uninitialised memory in
+ merge_group_entries causes segfault in useradd by changing
+ a call to malloc to a call to calloc
+ Closes: alioth:#313940
+
+2013-07-28 Guido Trentalancia <guido@trentalancia.com>
+
+ * etc/login.defs: fix typographic errors and use a better format
+ Closes: Debian#685415
+
+2013-07-28 Simon Brandmair <sbrandmair@gmx.net>
+
+ * man/po/de.po: translation completed : 1203 translated messages
+ Closes: Debian#679152
+
+2013-07-28 mancha <mancha1@hush.com>
+
+ * lib/encrypt.c (pw_encrypt): crypt() in glibc/eglibc 2.17 now
+ fails if passed a salt that violates specs. On Linux, crypt() also
+ fails with DES/MD5 salts in FIPS140 mode. Rather than exit() on
+ NULL returns we send them back to the caller for appropriate
+ handling (instead of exiting). Closes: alioth#314234
+ * lib/pwauth.c: Handle NULL return from pw_crypt(), return non
+ zero (as in case of failure).
+ * libmisc/valid.c: Likewise.
+ * src/chgpasswd.c: Handle NULL return from pw_crypt(), report
+ crypt error to stderr and exit.
+ * src/chpasswd.c: Likewise.
+ * src/gpasswd.c: Likewise.
+ * src/newusers.c: Likewise.
+ * src/passwd.c: Likewise when new password is encrypted.
+ * src/newgrp.c: Handle NULL return from pw_crypt(), report crypt
+ error to stderr and syslog and return to report unchanged
+ password.
+ * src/passwd.c: Likewise when password is checked.
+
+2013-07-28 Christian Perrier <christian@perrier.eu.org>
+
+ * configure.in: Prepare for next point release 4.2.
+ * if using the static char* for pw_dir, strdup it so
+ pw_free() can be used. (Closes: Debian#691459, alioth#313957)
+ * Kill the child process group, rather than just the
+ immediate child; this is needed now that su no
+ longer starts a controlling terminal when not running an
+ interactive shell (closes: Debian#713979)
+ Thansk to Colin Watson for the patch.
+
+2012-05-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS: Set release date.
+ * man/po/shadow-man-pages.pot: Regenerated.
+ * man/po/*.po: Updated PO files.
+
+2012-05-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/*.xml: Add author based on copyright statement.
+ * man/<ll>/*.[1358], man/<ll>/man[1358]/*.[1358],
+ man/<ll>/Makefile.am: Sort manpages per section as the generated
+ manpages.
+
+2012-05-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * po/shadow.pot, man/po/shadow-man-pages.pot: Regenerated.
+ * po/*.po, man/po/*.po: Updated PO files.
+
+2012-05-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/Makefile.am, man/generate_mans.mak: Update clean targets,
+ due to the generation in separate sub folders.
+
+2012-05-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/su.1.xml: Document author to avoid warnings during
+ generation. This needs to be rolled out to other manpages.
+ * man/generate_mans.mak: Do not add a AUTHOR section in the man
+ pages.
+
+2012-05-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/su.c: non PAM enabled versions: do not fail if su is called
+ without a controlling terminal. Ignore ENXIO errors when opening
+ /dev/tty.
+
+2012-05-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: Cleanup, return code 13 no more used.
+ * man/useradd.8.xml: Document return code 14, and remove return
+ code 13.
+
+2012-05-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, man/generate_mans.mak: Generate manpages in man1, man3,
+ man5, man8 subdirectories. This fix the generation of .so links
+ which did not point to a path relative to the top-level manual
+ hierarchy.
+ * man/generate_mans.mak: Update man paths accordingly.
+ * man/Makefile.am: Likewise.
+ * man/da/Makefile.am: Likewise.
+ * man/de/Makefile.am: Likewise.
+ * man/fr/Makefile.am: Likewise.
+ * man/it/Makefile.am: Likewise.
+ * man/pl/Makefile.am: Likewise.
+ * man/ru/Makefile.am: Likewise.
+ * man/sv/Makefile.am: Likewise.
+ * man/zh_CN/Makefile.am: Likewise.
+
+2012-05-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * configure.in: Prepare for next point release 4.1.5.1.
+
+2012-05-19 Nitin A Kamble <nitin.a.kamble@intel.com>
+
+ * configure.in: Remove deprecated AM_C_PROTOTYPES (no more
+ supported in automake 1.12).
+
+2012-05-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: Keep the default file as much as possible to
+ avoid issue in case of crash. Use link instead of rename.
+
+2012-05-18 Peter Vrabec <pvrabec@redhat.com>
+
+ * lib/commonio.c: Fix labeling of /etc/{passwd,shadow,group,gshadow}.
+ It will basically label them with same context as
+ /etc/{passwd+,shadow+,group+,gshadow+}
+
+2012-05-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwunconv.c: Do not check spw_close() return value (file is
+ opened readonly).
+ * src/grpunconv.c: Do not check sgr_close() return value (file is
+ opened readonly).
+
+2012-05-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/userdel.c: Fix segfault when userdel removes the
+ user's group.
+
+2012-05-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/login.c: Log in utmp / utmpx / wtmp also when PAM is
+ enabled. This is not done by pam_lastlog. This was broken on
+ 2011-07-23.
+ * NEWS, libmisc/utmp.c: Do not log in wtmp when PAM is enabled.
+ This is done by pam_lastlog.
+
+2012-05-17 Christian Perrier <bubulle@Êebian.org>
+
+ * man/po/fr.po: French translation of manpages completed
+
+2012-05-17 Simon Brandmair <sbrandmair@gmx.net>
+
+ * man/po/de.po: German translation of manpages completed
+
+2012-02-12 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS: New placeholder for the next release (4.1.5.1 expected)
+
+2012-04-15 Robert Luberda <robert@debian.org>
+
+ * man/po/pl.po: Complete translation of logoutd(8) in Polish.
+
+2012-02-13 Mike Frysinger <vapier@gentoo.org>
+
+ * src/passwd.c: (non PAM flavour) Report permission denied when
+ access to /etc/shadow fails with EACCES.
+
+2012-02-13 Mike Frysinger <vapier@gentoo.org>
+
+ * lib/nscd.c: Add missing newline to error message.
+ * lib/nscd.c: If nscd is installed but not in use, then running
+ `nscd -i` will exit(1). We shouldn't warn in this case since this
+ is not abnormal behavior.
+
+2012-02-13 Mike Frysinger <vapier@gentoo.org>
+
+ * man/.gitignore: Add generate_mans.deps
+
+2012-02-13 Mike Frysinger <vapier@gentoo.org>
+
+ * man/grpck.8.xml: Relocate space.
+
+2012-02-13 Mike Frysinger <vapier@gentoo.org>
+
+ * libmisc/copydir.c: Add missing #include <stdarg.h>
+
+2012-02-12 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS: Set release date.
+
+2012-02-12 Nicolas François <nicolas.francois@centraliens.net>
+
+ * po/shadow.pot, man/po/shadow-man-pages.pot: Regenerated.
+ * po/*.po, man/po/*.po: Updated PO files.
+
+2012-02-11 Giuseppe Sacco <eppesuig@debian.org>
+
+ * man/po/it.po: Updated after review.
+
+2012-02-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/it/Makefile.am: Activate all manpages.
+ * man/po/it.po: Fix formal issues (end of lines).
+
+2012-02-11 Giuseppe Sacco <eppesuig@debian.org>
+
+ * man/po/it.po: Updated to 1173t.
+
+2012-01-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/useradd.8.xml, man/su.1.xml, man/po/da.po, man/po/ru.po,
+ man/po/fr.po, man/po/de.po, man/po/sv.po, man/po/pl.po,
+ man/po/it.po, man/po/shadow-man-pages.pot, man/po/zh_CN.po: Fix
+ two typos. Thanks to Giuseppe Sacco. Unfuzzy translations
+ * po/kk.po, po/nb.po, po/el.po, po/ca.po, po/ja.po: Re-generate.
+ * man/login.defs.d/ENV_PATH.xml, man/login.defs.d/ENV_SUPATH.xml:
+ Fix typo.
+
+2012-01-28 Innocent De Marchi <tangram.peces@gmail.com>
+
+ * po/ca.po: Updated to 557t.
+
+2012-01-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, configure.in, man/da/Makefile.am, man/Makefile.am: Build
+ manpages with more than 50% translated messages.
+ * man/fr/Makefile.am: Add missing manpages: chgpasswd.8,
+ groupmems.8, nologin.8, sulogin.8.
+ * man/de/Makefile.am: Add missing manpages: chage.1, chgpasswd.8,
+ chpasswd.8, expiry.1, faillog.5, faillog.8, getspnam.3, gpasswd.1,
+ groupadd.8, groupdel.8, groupmems.8, groupmod.8, grpck.8,
+ grpconv.8, grpunconv.8, gshadow.5, lastlog.8, login.defs.5,
+ logoutd.8, newusers.8, nologin.8, pwck.8, pwconv.8, pwunconv.8,
+ sg.1, shadow.3, shadow.5, suauth.5, useradd.8, userdel.8,
+ usermod.8, limits.5, login.access.5, porttime.5, id.1, sulogin.8
+ * man/zh_CN/Makefile.am: Add missing manpages: chgpasswd.8,
+ groupmems.8, nologin.8, sulogin.8
+ * man/pl/Makefile.am, man/sv/Makefile.am, man/it/Makefile.am:
+ Translate only manpages with more than 50% translated messages.
+ * man/po/da.po: Do not translate names of manpages (newusers,
+ limits, groups)
+
+2012-01-28 Yuri Kozlov <yuray@komyakino.ru>
+
+ * man/po/ru.po: Updated to 1173t.
+
+2012-01-27 Thomas Blein <tblein@tblein.eu>
+
+ * po/fr.po: Updated to 557t.
+ * man/po/fr.po: Updated to 1173t.
+
+2012-01-26 Joe Hansen <joedalton2@yahoo.dk>
+
+ * po/da.po: Updated to 557t.
+ * man/po/da.po: Updated to 294t879u.
+
+2012-01-23 Thomas Vasileiou <thomas-v@wildmail.com>
+
+ * po/el.po: Updated to 553t.
+
+2012-01-22 Baurzhan Muftakhidinov <baurthefirst@gmail.com>
+
+ * po/kk.po: Updated to 557t.
+
+2012-01-21 Miguel Figueiredo <elmig@debianpt.org>
+
+ * po/pt.po: Updated to 557t.
+
+2012-01-19 Holger Wansing <linux@wansing-online.de>
+
+ * po/de.po: Updated to 557t.
+
+2012-01-18 Bjørn Steensrud <bjornst@skogkatt.homelinux.org>
+
+ * po/nb.po: Updated to 557t. Thanks also to Hans Fredrik Nordhaug.
+
+2012-01-16 NAKANO Takeo <nakano@webmasters.gr.jp>
+
+ * po/ja.po: Updated to 557t
+
+2012-01-16 Simon Brandmair <sbrandmair@gmx.net>
+
+ * man/po/de.po: Updated to 1173t.
+
+2012-01-14 YunQiang Su <wzssyqa@gmail.com>
+
+ * po/zh_CN.po: Updated to 551t2f4u
+ * man/po/zh_CN.po: Updated to 1026t15f132u
+
+2012-01-09 Yuri Kozlov <yuray@komyakino.ru>
+
+ * po/ru.po: Updated to 557t.
+
+2012-01-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * po/shadow.pot, man/po/shadow-man-pages.pot: Regenerated.
+ * po/*.po, man/po/*.po: Updated PO files.
+
+2012-01-08 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/prototypes.h: Cleanup.
+ * lib/selinux.c, lib/semanage.c: prototypes.h was not included.
+
+2011-12-09 Peter Vrabec <pvrabec@redhat.com>
+
+ * lib/prototypes.h, lib/Makefile.am, po/POTFILES.in,
+ libmisc/copydir.c, lib/selinux.c: Move set_selinux_file_context()
+ and reset_selinux_file_context() from libmisc/copydir.c to
+ lib/selinux.c.
+ * lib/commonio.c: Use set_selinux_file_context() and
+ reset_selinux_file_context() instead of using the existing
+ database SELinux context to set the context for the newly created
+ files.
+
+2011-12-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/vipw.c: Do not use a hardcoded program name in the usage
+ message.
+
+2011-12-04 Nicolas François <nicolas.francois@centraliens.net>
+
+ * po/ca.po, po/cs.po, po/da.po, po/de.po, po/es.po, po/eu.po,
+ po/fr.po, po/ja.po, po/kk.po, po/pt.po, po/pt_BR.po, po/ru.po,
+ po/sk.po, po/sv.po, po/vi.po, po/zh_CN.po: Quick unfuzzy.
+
+2011-12-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newusers.c, src/chpasswd.c, src/chgpasswd.c: Harmonize
+ usage messages.
+
+2011-12-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/Makefile.am, lib/prototypes.h, lib/selinux.c,
+ lib/semanage.c, po/POTFILES.in: Move lib/selinux.c to
+ lib/semanage.c.
+
+2011-11-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c, man/usermod.8.xml: usermod -Z "" removes the
+ SELinux user mapping for the modified user.
+ * src/useradd.c: Zflg is #defined as user_selinux non empty.
+
+2011-11-21 Peter Vrabec <pvrabec@redhat.com>
+
+ * libmisc/copydir.c: Ignore errors to copy ACLs if the operation
+ is not supported.
+
+2011-11-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/root_flag.c, src/gpasswd.c, src/chsh.c: Add splint
+ annotations.
+ * src/pwconv.c, src/pwunconv.c, src/grpconv.c, src/grpunconv.c:
+ Ignore return value of spw_rewind, pw_rewind, sgr_rewind, and
+ gr_rewind.
+ * lib/commonio.h: Both head and tail cannot be owned. Set tail as
+ dependent.
+ * src/expiry.c: Ignore return value of expire ().
+ * src/expiry.c: The catch_signals function does not use its sig
+ parameter.
+ * src/userdel.c: Last audit_logger parameter is a
+ shadow_audit_result, use SHADOW_AUDIT_FAILURE instead of 0.
+ * lib/selinux.c: vasprintf requires _GNU_SOURCE to be defined
+ before including stdio.h.
+ * src/chage.c: Cast 3rd date_to_str parameter to a time_t
+ * src/passwd.c: Add missing cast.
+ * lib/commonio.c: Avoid multiple statements per line.
+ * lib/commonio.c: Ignore fclose return value when the file was
+ open read only or was not changed, or if an error is already
+ reported.
+
+2011-11-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/faillog.c: The fail_max field is a short, use a short also
+ for the max argument of setmax / setmax_one.
+ * src/faillog.c: Fail with an error message when faillog fails to
+ write to the faillog database.
+
+2011-11-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/gpasswd.1.xml: Document the difference between the -r and -R
+ options.
+
+2011-11-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/useradd.8.xml, man/groupadd.8.xml, man/usermod.8.xml,
+ man/groupmod.8.xml: Avoid hardcoded values, and reference instead
+ the configuration options (e.g. UID_MIN)
+ * man/groupmod.8.xml, man/usermod.8.xml: Add missing reference to
+ login.defs
+ * man/login.defs.d/UID_MAX.xml, man/login.defs.d/SYS_UID_MAX.xml,
+ man/login.defs.d/GID_MAX.xml, man/login.defs.d/SYS_GID_MAX.xml:
+ Document the default values.
+
+2011-11-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/gpasswd.c: Change of group password enforces gshadow
+ password. Set /etc/group password to "x".
+
+2011-11-16 Peter Vrabec <pvrabec@redhat.com>
+
+ * NEWS, src/userdel.c, man/userdel.8.xml: Add option -Z/--selinux-user.
+ * libmisc/system.c, lib/prototypes.h, libmisc/Makefile.am: Removed
+ safe_system().
+ * lib/selinux.c, po/POTFILES.in, lib/prototypes.h,
+ lib/Makefile.am: Added helper functions for semanage.
+ * NEWS, README, src/useradd.c, src/usermod.c, src/userdel.c,
+ configure.in: Use libsemanage instead of semanage.
+
+2011-11-16 Peter Vrabec <pvrabec@redhat.com>
+
+ * src/Makefile.am: useradd may need the LIBATTR library.
+
+2011-11-16 Peter Vrabec <pvrabec@redhat.com>
+
+ * libmisc/copydir.c: Ignore perm_copy_file() errors with errno set
+ to ENOTSUP.
+
+2011-11-16 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: Compilation fix when SHADOWGRP is not enabled.
+ * libmisc/root_flag.c: Add missing #include <stdio.h>
+
+2011-11-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * po/shadow.pot, man/po/shadow-man-pages.pot: Regenerated.
+ * po/*.po, man/po/*.po: Updated PO files.
+
+2011-11-12 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chage.c, src/chfn.c, src/chgpasswd.c, src/chpasswd.c,
+ src/chsh.c, src/groupadd.c, src/groupdel.c, src/groupmems.c,
+ src/groupmod.c, src/newusers.c, src/useradd.c, src/userdel.c,
+ src/usermod.c: Provide the PAM error
+ message instead of our own, and log error to syslog.
+ * src/groupmems.c: Exit with exit rather than fail_exit in usage().
+ * src/newusers.c: Check the number of arguments.
+ * src/newusers.c: Do not create the home directory when it is not
+ changed.
+ * src/useradd.c: Set the group password to "!" rather "x" if there
+ are no gshadow file.
+
+2011-11-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwck.c: Removed pw_opened.
+ * src/pwck.c: optind cannot be greater than argc.
+ * src/pwck.c: If spw_opened, then is_shadow is implicitly set.
+ * src/pwck.c: Do not report passwd entry without x password and a
+ shadow entry in --quiet mode (no interaction with the caller)
+ * src/pwck.c: Do not check if the last password change is in the
+ future if the time is set to 0.
+
+2011-11-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/root_flag.c: Drop privileges before changing root. The
+ --root option should not be used by regular users for suid utils.
+ * libmisc/root_flag.c: Improve error messages.
+
+2011-11-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwck.c: Compile fix for TCB.
+
+2011-11-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/copydir.c: Avoid conflict with glibc. Rename error to
+ error_acl.
+
+2011-11-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/newusers.8.xml: Document the optional file argument.
+ * man/newusers.8.xml: Fix the documentation of the inputs' format.
+
+2011-11-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/groupmod.8.xml: Document that the primary group of users may
+ be changed by groupmod -g.
+
+2011-11-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/newusers.c, man/newusers.8.xml: Add --root option.
+
+2011-11-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/vipw.c: Remove unused variable a.
+
+2011-11-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/generate_mans.mak: The xml-config files do not depend on the
+ Makefile.
+
+2011-10-31 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chage.c, src/chgpasswd.c, src/chpasswd.c, src/chsh.c,
+ src/faillog.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c,
+ src/groupmems.c, src/groupmod.c, src/grpconv.c, src/grpunconv.c,
+ src/lastlog.c, src/newusers.c, src/passwd.c, src/pwconv.c,
+ src/pwunconv.c, src/su.c, src/useradd.c, src/userdel.c,
+ src/usermod.c, src/vipw.c: Align and sort options.
+
+2011-10-31 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/pwck.c, man/pwck.8.xm, src/grpck.c, man/grpck.8.xml:
+ Add --root option.
+
+2011-10-31 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/limits.5.xml, libmisc/limits.c: Sort limit identifiers.
+ * libmisc/limits.c: Fix support for the K limit identifier.
+ * libmisc/limits.c: Add missing default limit for L and U.
+
+2011-10-31 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwck.c, man/pwck.8.xml: Add support for long options.
+ * src/pwck.c, man/pwck.8.xml: Add -h/--help option
+ * src/grpck.c, man/grpck.8.xml: Add support for long options.
+ * src/grpck.c, man/grpck.8.xml: Add -h/--help option
+
+2011-10-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/expiry.c, man/expiry.1.xml: Add support for long options.
+ * src/expiry.c, man/expiry.1.xml: Add -h/--help option
+
+2011-10-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chfn.c, man/chfn.1.xml: Add support for long options.
+ * src/chfn.c, man/chfn.1.xml: Add -u/--help option
+ * NEWS, src/chfn.c, man/chfn.1.xml: Add --root option.
+
+2011-10-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/vipw.c, man/vipw.8.xml: Add --root option.
+
+2011-10-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/faillog.c, man/faillog.8.xml: Add --root option.
+ * NEWS, src/lastlog.c, man/lastlog.8.xml: Likewise.
+ * src/faillog.c: Add Prog variable, and prefix error messages with
+ Prog rather than "faillog".
+ * src/lastlog.c: Likewise.
+ * src/lastlog.c: Split usage in smaller messages.
+
+2011-10-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/chage.c, man/chage.1.xml: Add --root option. Open
+ audit and syslog after the potential chroot. chage's usage split
+ in smaller messages.
+
+2011-10-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: re-indent.
+ * src/login.c: Fix support for sub-logins.
+
+2011-10-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/faillog.c, src/chage.c, src/newusers.c, src/su.c: The getopt
+ index of long options is not used.
+
+2011-10-29 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/prototypes.h, libmisc/Makefile.am, libmisc/root_flag.c,
+ po/POTFILES.in: Add process_root_flag() to process the --root
+ option and chroot so that the chroot config is used and changes
+ are applied to the chroot.
+ * NEWS, src/useradd.c, man/useradd.8.xml: Add --root option. Open
+ audit after the potential chroot.
+ * NEWS, src/userdel.c, man/userdel.8.xml: Add --root option. Open
+ audit and syslog after the potential chroot. userdel's usage split
+ in smaller messages.
+ * NEWS, src/usermod.c, man/usermod.8.xml: Likewise
+ * NEWS, src/groupadd.c, man/groupadd.8.xml: Add --root option. Open
+ audit and syslog after the potential chroot.
+ * src/groupadd.c: Check atexit failures.
+ * src/groupadd.c: Return E_SUCCESS instead of exit'ing at the end
+ of main().
+ * NEWS, src/groupadd.c, man/groupadd.8.xml: Add --root option. Open
+ audit and syslog after the potential chroot.
+ * src/groupmod.c: The getopt index of long options is not used.
+ * src/groupdel.c: Add process_flags().
+ * src/groupdel.c, man/groupdel.8.xml: Add --help option.
+ * NEWS, src/groupdel.c, man/groupdel.8.xml: Add --root option. Open
+ audit and syslog after the potential chroot.
+ * src/groupdel.c: Check atexit failures.
+ * NEWS, src/pwconv.c, src/pwunconv.c, src/grpconv.c,
+ src/grpunconv.c, man/pwconv.8.xml: Add --root option.
+ * src/pwconv.c, src/pwunconv.c, src/grpconv.c, src/grpunconv.c:
+ Add --help option.
+ * src/pwconv.c, src/pwunconv.c, src/grpconv.c, src/grpunconv.c:
+ Add process_flags() and usage().
+ * NEWS, src/chpasswd.c, man/chpasswd.8.xml, src/chgpasswd.c,
+ man/chgpasswd.8.xml: Add --root option.
+ * src/chpasswd.c, src/chgpasswd.c: The getopt index of long
+ options is not used.
+ * NEWS, src/passwd.c, man/passwd.1.xml: Add --root option.
+ passwd's usage split in smaller messages.
+ * src/passwd.c: Call sanitize_env() before setting the locales.
+ * NEWS, src/groupmems.c, man/groupmems.8.xml: Add --root option.
+ Open syslog after the potential chroot.
+ * src/groupmems.c: The getopt index of long options is not used.
+ * NEWS, src/chsh.c, man/chsh.1.xml: Add --root option.
+ chsh's usage split in smaller messages.
+ * src/chsh.c: The getopt index of long options is not used.
+ * NEWS, src/gpasswd.c, man/gpasswd.1.xml: Add --root option.
+ * src/gpasswd.c: The getopt index of long options is not used.
+
+2011-10-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/ja/Makefile.am, man/fr/Makefile.am, man/ru/Makefile.am,
+ man/sv/Makefile.am, man/pl/Makefile.am, man/zh_CN/Makefile.am,
+ man/it/Makefile.am, man/Makefile.am: Include man_nopam in
+ EXTRA_DIST only when USE_PAM (they are already in man_MANS
+ otherwise).
+
+2011-10-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/su.1.xml: Document that su -c does not providea controlling
+ terminal.
+
+2011-10-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newusers.c: Fix typo.
+ * src/useradd.c: Likewise.
+ * lib/nscd.c: Remove unused variable.
+ * lib/prototypes.h, libmisc/cleanup.c, lib/spawn.c, src/chage.c:
+ Add splint annotations.
+ * src/sulogin.c (main): env is only used when USE_PAM is not set.
+
+2011-10-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/login.defs.d/LOGIN_STRING.xml: Fix typo.
+
+2011-09-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/prototypes, libmisc/basename.c (Basename): Input is a
+ constant string.
+ * lib/prototypes.h, lib/spawn.h, lib/spawn.c, src/userdel.c,
+ lib/nscd.c, lib/Makefile.am: Delete spawn.h. Move from spawn.h to
+ prototypes.h.
+ * src/userdel.c: Remove unused variables.
+ * lib/nscd.c: Remove unused header files.
+ * lib/nscd.c: Add the program name to error messages.
+ * lib/nscd.c: Indicate when nscd does not terminate normally (signal).
+ * lib/spawn.c: Updated header.
+ * lib/spawn.c: Flush stdout and stderr to avoid inheriting from
+ ongoing buffers.
+ * lib/spawn.c: Avoid implicit conversion of pointer to boolean.
+ * lib/spawn.c: Replace perror by a complete message.
+ * lib/spawn.c: Continue to wait for the child if another child
+ terminates.
+ * lib/prototypes.h: The name field from cleanup_info_mod is a
+ constant string. (username).
+
+2011-09-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/cleanup.c: Spawn children should no trigger cleanup
+ actions. Make sure only the parent (initial caller) perform the
+ cleanup actions.
+
+2011-09-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/salt.c (SHA_salt_rounds): It is statically ensured that
+ the format fits in rounds_prefix.
+ * libmisc/loginprompt.c: Likewise.
+
+2011-09-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/grpconv.c: Fail if not called correctly.
+ * src/grpconv.c: At the end of main, the passwd and shadow files
+ are locked. No need to check before unlocking. No need to set the
+ lock as false neither since there cannot be anymore failures.
+
+2011-09-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chage.c: EPOCH is not needed, it's converted to -1 by
+ strtoday(). But we need to support "-1" specifically.
+ * src/chage.c: Fix usage: LOGIN is mandatory.
+ * src/chage.c: Display disabled expiry or last change as "-1"
+ instead of 1969-12-31. 1969-12-31 is still supported as input from
+ the user.
+ * src/chage.c: Exit cleanly with fail_exit() (lock files were not
+ removed).
+
+2011-09-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: Remove def_file. It was always set to
+ USER_DEFAULTS_FILE.
+ * src/useradd.c: Fix cut&paste issue causing bad warning when
+ the useradd.default file contains an invalid INACTIVE= value.
+ * src/useradd.c: Added missing end of line for rename errors.
+ * src/useradd.c: Added -D synopsis to the usage message.
+ * src/useradd.c: Do not scale_age(-1), just use -1.
+ * src/useradd.c: Added FIXME to be fixed later.
+ * src/useradd.c: Allow -e -1 when there is no shadow file.
+ * src/useradd.c: Fail, but do not print the usage message when the
+ -e argument is not valid.
+ * src/useradd.c: No need to check for oflg since uflg is
+ already checked.
+
+2011-09-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/su.c: Too much const were added on 2011-08-15. pw in
+ save_caller_context() is allocated and freed.
+ * src/su.c: Added missing #endif indication
+ * src/su.c (save_caller_context): password only needed if
+ SU_ACCESS and !USE_PAM.
+
+2011-09-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: date_to_str() is always called with negativ set
+ to "never", remove this argument.
+ * src/usermod.c: Added missing cast for gr_free argument.
+
+2011-09-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwconv.c: Fail if not called correctly.
+ * src/pwconv.c: At the end of main, the passwd and shadow files
+ are locked. No need to check before unlocking.
+
+2011-09-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newusers.c: Initially set the passwd's password to '*'
+ instead of 'x'. Only when it is confirmed that a shadow entry is
+ (will be) added, set the passwd's password to 'x'.
+ * src/newusers.c: An invalid line is an error. A failure needs to
+ be reported.
+
+2011-09-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/gpasswd.c: Remove log_gpasswd_success_gshadow(). Writing in
+ gshadow is the last sub-task.
+
+2011-09-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chsh.c: No needto remove lines tarting with '#' from
+ /etc/shells. This is already done by getusershell() and these
+ shell would fail the access(X_OK) test.
+
+2011-09-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/generate_mans.mak: Fix the generation of translated man
+ pages. xml2po removed the comment from empty headers and the
+ config was no more inserted.
+
+2011-09-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/chage.1.xml: The LOGIN argument is not optional.
+ * man/login.defs.d/QUOTAS_ENAB.xml: Document the dependency
+ between /etc/limits and QUOTAS_ENAB.
+
+2011-08-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * po/POTFILES.in: Added lib/spawn.c.
+
+2011-08-20 Jonathan Nieder <jrnieder@gmail.com>
+
+ * lib/Makefile.am: Added lib/spawn.c and lib/spawn.h.
+ * lib/nscd.c, lib/spawn.c, lib/spawn.h: It is not possible to
+ differentiate between an nscd failure, and a failure to execute
+ due to no nscd with posix_spawn. Use our own run_command routine.
+ * src/userdel.c: Use run_command()
+
+2011-08-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmod.c: Ignore return value from snprintf.
+ * src/groupmod.c: Add static qualifier to the cleanup structures.
+ * src/groupmod.c: Check atexit failures.
+
+2011-08-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: Do not assign static to NULL.
+ * src/usermod.c (date_to_str): buf needs to be unique (e.g.
+ independent from negativ), and is an out buffer.
+ * src/usermod.c: Ignore return value from snprintf, and force
+ nul-termination of buffer.
+ * src/usermod.c: Improve memory management.
+ * src/usermod.c: An audit bloc was not reachable, moved above on
+ success to move the home directory.
+ * src/usermod.c: Ignore close() return value for the mailbox
+ (opened read only).
+
+2011-08-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/su.c: Added const modifiers.
+ * lib/prototypes: Synchronize splint annotations.
+
+2011-08-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/su.c: Add splint annotations.
+ * src/su.c: Set caller_on_console as boolean.
+ * src/su.c: Ignore return value from fputs (usage) / puts (prompt).
+ * src/su.c: Improved memory management.
+
+2011-08-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chgpasswd.c, src/chpasswd.c, src/newusers.c: Replace cflg by
+ a test on crypt_method.
+
+2011-08-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/chowndir.c: Add splint annotations.
+ * src/chgpasswd.c: Likewise.
+ * src/chpasswd.c: Likewise.
+ * src/newusers.c: Likewise.
+ * libmisc/salt.c, lib/prototypes.h (crypt_make_salt): Likewise.
+
+2011-08-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/gshadow_.h: Fix typo in comment.
+
+2011-08-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/prototypes.h, libmisc/getgr_nam_gid.c: getgr_nam_gid()
+ returns an allocated structure.
+
+2011-08-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/su.c: Add annotations to indicate that su_failure() does
+ not return.
+
+2011-07-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/commonio.c: Display PID as unsigned long.
+
+2011-07-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: Remove unused Zflg.
+
+2011-07-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chgpasswd.c: Fix typo sp -> sg. sg_namp -> sg_name
+ * src/chgpasswd.c: Always update the group file when SHADOWGRP is
+ not enabled.
+
+2011-07-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newgrp.c: Fix typo in notreached annotation.
+
+2011-07-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: Add annotations to indicate that fail_exit() does
+ not return.
+ * src/usermod.c: Fix typo in notreached annotation.
+
+2011-07-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/find_new_uid.c: free (used_uids) on return.
+ * libmisc/find_new_gid.c: free (used_gids) on return.
+
+2011-07-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/commonio.c: Fix NIS commit from 2011-07-14.
+
+2011-07-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/chpasswd.c: Create a shadow entry if the password is
+ set to 'x' in passwd and there are no entry in shadow for the
+ user.
+ * NEWS, src/chgpasswd.c: Create a gshadow entry if the password is
+ set to 'x' in group and there are no entry in gshadow for the
+ group.
+
+2011-07-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwunconv.c: Exit after printing usage when arguments or
+ options are provided.
+ * src/pwunconv.c: Re-indent.
+ * src/pwunconv.c: Open the shadow file read only.
+ * src/grpunconv.c: Exit after printing usage when arguments or
+ options are provided.
+ * src/grpunconv.c: Open the gshadow file read only.
+
+2011-07-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chgpasswd.c: Fix typo.
+
+2011-07-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/login.c: Do not log in utmp / utmpx / wtmp when PAM is
+ enabled. This is already done by pam_lastlog. Note that
+ pam_lastlog can only log the parent PID, not the PID of the
+ process forked by login.
+
+2011-07-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chpasswd.c: Add annotations to indicate that usage() does
+ not return.
+ * src/chpasswd.c: Reindent.
+ * src/chpasswd.c: Remove dead code. No need to set crypt_method
+ to NULL when it is already NULL. sflg is only set if crypt_method
+ is not NULL.
+
+2011-07-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/lastlog.c: Add annotations to indicate that usage() does not
+ return.
+
+2011-07-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/faillog.c: Add annotations to indicate that usage() does not
+ return.
+ * src/faillog.c: Fix message: this is faillog, not lastlog.
+ * src/faillog.c: Check that there are no extra arguments after
+ parsing the options.
+
+2011-07-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chgpasswd.c: Add annotations to indicate that usage() does
+ not return.
+ * src/chgpasswd.c: Split usage in smaller parts. Those parts are
+ already translated for chpasswd. Usage is now closer to
+ chpasswd's.
+ * src/chgpasswd.c: Remove dead code. No need to set crypt_method
+ to NULL when it is already NULL. sflg is only set if crypt_method
+ is not NULL.
+
+2011-07-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/expiry.c: Remove dead code.
+ * src/expiry.c: Improve comments.
+
+2011-07-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/grpck.c: Added comments.
+ * src/grpck.c: Avoid implicit conversion of pointer to boolean.
+ * src/grpck.c: Remove dead code. argc cannot be lower than optind.
+ Avoid checking twice in a row for NULL != list[i].
+
+2011-07-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/find_new_gid.c, libmisc/find_new_uid.c: Fail in case of
+ invalid configuration.
+ * libmisc/find_new_gid.c, libmisc/find_new_uid.c: Updated
+ comments.
+ * libmisc/find_new_gid.c, libmisc/find_new_uid.c: Be more strict
+ on the loop stop conditions. Stop if we passed the limit, even if
+ the limit itself was never noticed.
+
+2011-07-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/po/fr.po: Fix some spacing issues due to configuration
+ variants.
+
+2011-07-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/passwd.c: Overflow when computing the number of days based
+ on the scaling. Use of long long needed.
+
+2011-07-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, lib/commonio.h, lib/commonio.c: Additional messages to
+ indicate why locking failed.
+ * NEWS, lib/commonio.c: Fix the sort algorithm in case of NIS. NIS
+ entries were dropped.
+ * lib/commonio.c: NIS entries can start by '+' or '-'.
+
+2011-07-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/groupmod.c: When the gshadow file exists but there are
+ no gshadow entries, an entry is created if the password is changed
+ and group requires a shadow entry.
+
+2011-07-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: Fix typo in comment.
+ * src/usermod.c (move_home): It is always an error to use -m if
+ the new home directory already exist (independently from the
+ existence of the old home directory did not exist)
+ * src/usermod.c (process_flags): Report usage if no options are
+ provided. Update the error message.
+ * src/usermod.c (process_flags): Check option compatibility and
+ dependency before options are discarded when no changes are
+ requested.
+ * src/usermod.c (process_flags): Check for oflg is not needed to
+ check if changes are needed.
+ * src/usermod.c: usage() does not return. Add annotations.
+ * src/usermod.c (update_gshadow): is_member was computed twice.
+ * src/usermod.c (update_group, update_gshadow): Reduce complexity
+ and document checks. Some checks were always true/false within
+ their call context.
+ * NEWS, src/usermod.c; man/usermod.8.xml: When the shadow file
+ exists but there are no shadow entries, an entry has to be created
+ if the password is changed and passwd requires a shadow entry, or
+ if aging features are used (-e or -f). Document this and also that
+ -e and -f require a shadow file.
+ * man/usermod.8.xml: Document behavior of an empty EXPIRE_DATE.
+ * man/usermod.8.xml: Document that the mail spool might have to be
+ renamed (as for the homedir)
+ * src/usermod.c (new_pwent): Document that pw_locate will not fail
+ because getpwnam returned successfully.
+ * src/usermod.c (process_flags): Do not display the usage in case
+ of an invalid -f value (similar to -e).
+ * src/usermod.c (process_flags): Indicate that the user name is
+ invalid, instead of just a 'field'.
+
+2011-07-08 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupadd.c: Fix typo in comment.
+ * src/userdel.c: Fix typo from 2011-06-04. Report failure on the
+ mailfile instead of user_home.
+ * lib/fields.c: Fixed typo from 2010-02-15. field instead of cp
+ ought to be checked.
+ * src/vipw.c: Use Prog instead of progname. This is needed since
+ Prog is used in the library.
+ * configure.in: Fix typo. libcrack default is 'no'.
+ * src/groupmod.c: Avoid implicit conversion of pointer to boolean.
+ * src/groupmod.c: osgrp can be set only if pflg || nflg. No need
+ to check for pflg || nflg again
+
+2011-07-08 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/*.xml, man/config.xml.in: Add source and version
+ information. This reduce the amount of warnings during the
+ manpages generation.
+
+2011-06-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/passwd.1.xml: Added reference to chpasswd(8).
+ * man/po/ru.po: Add space between option and argument.
+
+2011-06-16 Francisco Javier Cuadrado <fcocuadrado@gmail.com>
+
+ * po/es.po: Spanish translation
+
+2011-06-16 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/isexpired.c: Added parenthesis.
+ * libmisc/env.c: Added comments.
+ * libmisc/env.c: Avoid implicit conversion of pointer to boolean.
+
+2011-06-16 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/su.c: environ is provided by <unistd.h>.
+ * src/su.c: Added function prototypes.
+ * src/su.c: Rename shellstr parameter to shellname to avoid
+ collision with static variable.
+ * NEWS, src/su.c: Added support for PAM modules which change
+ PAM_USER.
+
+2011-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/su.c (prepare_pam_close_session): Extract the creation of a
+ child and listening for signal in the parent from run_shell().
+ prepare_pam_close_session() is now executed before the creation of
+ the pam session and before the UID is changed. This allows to
+ close the session as root.
+ * src/su.c: Also drop the controlling terminal when PAM is not
+ used.
+ * src/su.c: Remove run_shell().
+ * src/su.c: After prepare_pam_close_session() there is no need to
+ close the session in the child. Added pam_setcred to
+ prepare_pam_close_session().
+
+2011-06-12 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/su.c (save_caller_context): Extract from main() the code
+ used to save the caller's context.
+ * src/su.c: Split check_perms() in to a PAM (check_perms_pam) and
+ a non-PAM (check_perms_nopam) version.
+ * src/su.c: Cleanup check_perms_nopam().
+ * src/su.c: Merge environment setting blocks after the creation of
+ the session.
+ * src/su.c: Close the password databases together with syslog.
+ * src/su.c: Extract command line processing from main().
+ * src/su.c: Extract export of environment from main().
+
+2011-06-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/su.c: Group some of the environment processing blocks. The
+ definition of shellstr, PATH and IFS is not influenced (getenv,
+ getdef, restricted_shell) by and does not influence (addenv does
+ not change environ) the authentication. And the authentication
+ did not overwrite those definitions. This will ease an extraction
+ from the big main() function.
+ * src/su.c: Move definition of change_environment and shellstr
+ after the switch to the final subsystem. The previous architecture
+ forced to always change the environment (the shell starts with a
+ '*' and was thus restricted, and change_environment could not be
+ reset to false).
+ * src/su.c: No need to change the user's shell in case of
+ subsystem root. Update the comments.
+ * src/su.c: Define shellstr before the environment so that
+ restricted_shell is called only once. This will allow moving the
+ environment definition after the switch to the new user.
+ * src/su.c: Extract the authentication from the main function.
+ * lib/prototypes.h, src/suauth.c, src/su.c (check_su_auth): Do not
+ use the pwent global variable to communicate between APIs of
+ different files. Added boolean parameter su_to_root to
+ check_su_auth().
+ * src/su.c (check_perms): Return the passwd entry of the finally
+ authenticated user. Remove usage of the pwent variable.
+ * src/su.c: The password of the caller is the one from the
+ spwd structure only if the passwd's password is 'x'.
+ * src/su.c: Cleanup local variables.
+
+2011-06-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/su.c: Updating pwent after expire() is not useful. Only the
+ password information may have changed and they are not used
+ anymore afterwards.
+ * src/su.c: No need to call expire() if there are no shadow entry.
+ No need to convert a passwd entry into an spwd entry in that case.
+
+2011-06-12 Thomas Blein <tblein@tblein.eu>
+
+ * man/po/fr.po: French manpages translation
+
+2011-06-05 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/su.c: Do not forward the controlling terminal to
+ commands executed with -c. This prevents tty hijacking which could
+ lead to execution with the caller's privileges. This required to
+ forward signals from the terminal (SIGINT, SIGQUIT, SIGTSTP) to
+ the executed command.
+
+2011-06-05 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/userdel.c: Do not remove a group with the same name as
+ the user (usergroup) if this group isn't the user's primary group.
+
+2011-06-04 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/userdel.c: Check the existence of the user's mail
+ spool before trying to remove it. If it does not exist, a warning
+ is issued, but no failure.
+
+2011-06-03 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/sulogin.c: Added Prog, needed because of the last xmalloc()
+ change.
+
+2011-06-03 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/zh_CN/, man/zh_CN/Makefile.am: Added directory, and zh_CN
+ Makefile.
+ * man/Makefile.am: Build zh_CN pages.
+ * man/generate_translations.mak: Add config.xml to CLEANFILES.
+ * man/po/zh_CN.po: limits, groups, faillog, expiry should not be
+ translated (command name, file name), also this broke the build
+ system as they are used to derive manpage names.
+
+2011-06-02 Peter Vrabec <pvrabec@redhat.com>
+
+ * src/lastlog.c, src/faillog.c: Fix underflows causing wrong entry
+ to be displayed.
+
+2011-06-02 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/xmalloc.c: Harmonize message.
+
+2011-06-02 Peter Vrabec <pvrabec@redhat.com>
+
+ * libmisc/find_new_uid.c, libmisc/find_new_gid.c: Add missing
+ memory allocation check.
+
+2011-06-02 Cal Peake <cp@absolutedigital.net>
+
+ * NEWS, libmisc/addgrps.c: Fix allocator loop. Continue to
+ getgroups() when getgroups fails (-1) with errno==EINVAL.
+
+2011-06-01 Simon Brandmair <sbrandmair@gmx.net>
+
+ * man/newusers.8.xml, man/suauth.5.xml, man/suauth.5.xml,
+ man/logoutd.8.xml, man/chgpasswd.8.xml, man/groups.1.xml,
+ man/faillog.5.xml, man/login.defs.d/MD5_CRYPT_ENAB.xml,
+ man/login.defs.d/DEFAULT_HOME.xml,
+ man/login.defs.d/LOGIN_RETRIES.xml,
+ man/login.defs.d/MD5_CRYPT_ENAB.xml,
+ man/login.defs.d/PORTTIME_CHECKS_ENAB.xml,
+ man/login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml:
+ Fix typos
+ * man/po/de.po: German translation of manpages completed
+
+2011-05-23 Innocent De Marchi <tangram.peces@gmail.com>
+
+ * po/ca.po: Catalan translation completed
+
+2011-04-22 Miguel Figueiredo <elmig@debianpt.org>
+
+ * po/pt.po: Portuguese translation completed
+
+2011-04-22 Thomas Blein <tblein@tblein.eu>
+
+ * po/fr.po: French translation completed
+
+2011-04-16 Holger Wansing <linux@wansing-online.de>
+
+ * po/de.po: German translation completed
+
+2011-04-15 Fred Maranhão <fred.maranhao@gmail.com>
+
+ * po/pt_BR.po: Brazilian Portuguese translation completed
+
+2011-04-10 Yuri Kozlov <yuray@komyakino.ru>
+
+ * po/ru.po: Russian translation completed
+
+2011-04-07 Daniel Nylander <po@danielnylander.se>
+
+ * po/sv.po: Swedish translation completed
+
+2011-04-07 Joe Dalton <joedalton2@yahoo.dk>
+
+ * po/da.po: Danish translation completed
+
+2011-04-05 Timur Birsh <taem@linukz.org>
+
+ * po/kk.po: Kazakh translation completed
+
+2011-04-05 NAKANO Takeo <nakano@st.seikei.ac.jp>
+
+ * po/ja.po: Japanese translation completed
+
+2011-03-30 YunQiang Su <wzssyqa@gmail.com>
+
+ * man/po/zh_CN.po: convert Simplified Chinese translation
+ of manpages to gettext
+ * po/zh_CN.po: Simplified Chinese translation completed
+
+2010-02-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/ru/Makefile.am: Remove double inclusion of $(man_nopam)
+
+2010-02-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/user_busy.c, src/userdel.c, src/usermod.c: Warn in
+ user_busy() rather than in src/userdel.c or src/usermod.c to
+ provide more accurate failure cause (user is logged in or user
+ still executes processes).
+
+2010-02-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/groupio.c, lib/sgroupio.c, lib/shadowio.c, lib/pwio.c: Check
+ entry validity before commits to databases.
+ * libmisc/fields.c, libmisc/Makefile.am, lib/fields.c,
+ lib/Makefile.am, po/POTFILES.in: fields.c moved from libmisc to
+ lib.
+ * lib/fields.c: Fail if input pointer is NULL.
+
+2010-02-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/chfn.c, src/chsh.c: Fix CVE-2011-0721: forbid \n in
+ gecos or shell.
+
+2011-02-12 Nicolas François <nicolas.francois@centraliens.net>
+
+ * autogen.sh: Restore original autoreconf (see 2010-08-29's change
+ for autogen.sh)
+ * configure.in, man/po/Makefile.in.in, man/po/Makefile.in:
+ Makefile.in.in replaced by Makefile.in to avoid config.status
+ issues when there are multiple po directories.
+ * man/po/LINGUAS: Adapted to above change.
+ * man/po/POTFILES.in, man/po/XMLFILES: POTFILES.in replaced by
+ XMLFILES.
+ * man/Makefile.am: generate_mans.deps shall be included by make,
+ not automake.
+
+2010-11-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, libmisc/console.c: Fix CONSOLE parser. This caused login
+ to hang when CONSOLE was configured with a colon separated list of
+ TTYs. See http://bugs.gentoo.org/show_bug.cgi?id=324419
+
+2010-09-05 Nicolas François <nicolas.francois@centraliens.net>
+
+ Integrate review comments from Julien Cristau
+ * libmisc/copydir.c: Missing parenthesis in comment.
+ * libmisc/chowndir.c: Fixed memory leak on failed realloc().
+ * libmisc/chowndir.c: Make sure the buffer for the path is large
+ enough.
+ * libmisc/remove_tree.c: Remove check for NULL before free().
+
+2010-08-29 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/po/fr.po: Fix 2 fuzzy strings.
+
+2010-08-29 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/usermod.c: Accept options in any order (username not
+ necessarily at the end)
+
+2010-08-29 Nicolas François <nicolas.francois@centraliens.net>
+
+ * autogen.sh: Expand autoreconf to avoid running autopoint.
+
+2010-08-29 Nicolas François <nicolas.francois@centraliens.net>
+
+ * po/shadow.pot, man/po/shadow-man-pages.pot: Regenerated.
+ * po/*.po, man/po/*.po: Updated PO files.
+
+2010-08-28 Brian M. Carlson <sandals@crustytoothpaste.ath.cx>
+
+ * man/chsh.1.xml: Fix comma splice.
+
+2010-08-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/protoypes.h, libmisc/copydir.c, src/useradd.c:
+ selinux_file_context renamed set_selinux_file_context.
+ * lib/protoypes.h, libmisc/copydir.c, src/useradd.c:
+ Added reset_selinux_file_context.
+ * src/useradd.c: Check the return value of
+ set_selinux_file_context and reset_selinux_file_context.
+ * libmisc/copydir.c: Check the return value of
+ reset_selinux_file_context.
+
+2010-08-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/su.c: Fix handling of environment variables when
+ the environment is not changed. In particular, this makes su
+ behave as documented regarding PATH and IFS (i.e. they are reset)
+ when -p is provided.
+
+2010-08-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/su.1.xml: Fix typo.
+
+2010-08-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newgrp.c, src/userdel.c, src/grpck.c, src/gpasswd.c,
+ src/newusers.c, src/pwconv.c, src/chpasswd.c, src/logoutd.c,
+ src/chfn.c, src/groupmems.c, src/usermod.c, src/pwunconv.c,
+ src/expiry.c, src/groupdel.c, src/chgpasswd.c, src/useradd.c,
+ src/su.c, src/groupmod.c, src/passwd.c, src/pwck.c, src/chage.c,
+ src/groupadd.c, src/login.c, src/grpconv.c, src/groups.c,
+ src/grpunconv.c, src/chsh.c: Prog changed to a constant string.
+
+2010-08-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/limits.c: Avoid implicit conversion of integer to
+ boolean.
+ * libmisc/basename.c: Avoid implicit conversion of pointer to
+ boolean.
+ * libmisc/basename.c, lib/prototypes.h (Basename): Return a
+ constant string.
+ * libmisc/basename.c, libmisc/obscure.c, lib/prototypes.h,
+ libmisc/xmalloc.c, libmisc/getdate.h, libmisc/system.c,
+ libmisc/getgr_nam_gid.c, libmisc/failure.c, libmisc/valid.c: Add
+ splint annotations.
+ * libmisc/chowndir.c: Avoid memory leak.
+ * libmisc/chowndir.c: Do not check *printf/*puts return value.
+ * libmisc/chowntty.c: Avoid implicit conversion between integer
+ types.
+ * libmisc/obscure.c: Return a bool when possible instead of int.
+ * libmisc/shell.c: Do not check *printf/*puts return value.
+ * libmisc/shell.c: Do not check execle return value.
+ * libmisc/setupenv.c: Avoid implicit conversion between integer
+ types.
+ * libmisc/xmalloc.c: size should not be zero to avoid returning
+ NULL pointers.
+ * libmisc/hushed.c: Do not check *printf/*puts return value.
+ * libmisc/system.c: Avoid implicit conversion of integer to
+ boolean. safe_system last argument is a boolean.
+ * libmisc/system.c: Check return value of dup2.
+ * libmisc/system.c: Do not check *printf/*puts return value.
+ * libmisc/system.c: Do not check execve return value.
+ * libmisc/salt.c: Do not check *printf/*puts return value.
+ * libmisc/loginprompt.c: Do not check gethostname return value.
+ * libmisc/find_new_gid.c, libmisc/find_new_uid.c: Do not check
+ gr_rewind/pw_rewind return value.
+ * libmisc/ttytype.c: Limit the number of parsed characters in the
+ sscanf format.
+ * libmisc/ttytype.c: Test if a type was really read.
+ * libmisc/sub.c: Do not check *printf/*puts return value.
+ * libmisc/sub.c: Avoid implicit conversion of integer to boolean.
+ * src/userdel.c: Fix typo in comment.
+ * src/userdel.c: Avoid implicit conversion of boolean to integer.
+ * src/userdel.c: safe_system last argument is a boolean.
+ * src/newusers.c: Avoid implicit conversion of boolean to integer.
+ * src/newusers.c: Avoid implicit conversion of integer to boolean.
+ * src/usermod.c: Add brackets.
+ * src/usermod.c: Avoid implicit conversion of characters or
+ integers to booleans.
+ * src/vipw.c: Avoid implicit conversion of integer to boolean.
+ * src/su.c: Avoid implicit conversion of integer to boolean.
+ * src/su.c: Add brackets.
+ * src/useradd.c: Avoid implicit conversion of characters or
+ integers to booleans.
+
+2010-08-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/obscure.c, lib/prototypes.h (obscure): Return a bool
+ instead of an int.
+ * libmisc/obscure.c, libmisc/tz.c, src/passwd.c, lib/encrypt.c,
+ libmisc/copydir.c, lib/prototypes.h: Add splint annotations.
+ * libmisc/tz.c: Fix some const issues.
+ * libmisc/tz.c: Avoid multi-statements lines.
+ * libmisc/tz.c: Add brackets.
+ * libmisc/copydir.c: Do not check *printf/*puts return value.
+ * libmisc/copydir.c: Fail if we cannot set or reset the SELinux
+ fscreate context.
+ * libmisc/copydir.c: Use xmalloc instead of malloc.
+ * libmisc/copydir.c: Do not check lutimes return value
+ * src/vipw.c: Avoid implicit conversion of integer to boolean.
+ * src/su.c (iswheel): Return a bool instead of an int.
+ * src/passwd.c: Remove insert_crypt_passwd(). Use xstrdup instead.
+ * src/passwd.c: Return constant strings when sufficient.
+ * src/passwd.c: Do not check *printf/*puts return value.
+ * src/passwd.c: Avoid implicit conversion of character to boolean.
+ * src/passwd.c: Do not check sleep return value.
+ * src/sulogin.c: Do not check *printf/*puts return value.
+ * lib/encrypt.c: Do not check fprintf return value.
+
+2010-08-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/passwd.c: Fix a const issue.
+ * src/passwd.c: Avoid multi-statements lines.
+ * src/sulogin.c: Fix a const issue.
+
+2010-08-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/copydir.c, lib/prototypes.h: Caller can choose not to
+ copy the extended attributes (the SELinux context is hence reset)
+ * src/usermod.c: Copy the extended attributes.
+ * src/useradd.c: Only reset the SELinux context.
+
+2010-08-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * configure.in: Fixed typo.
+
+2010-08-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/console.c, libmisc/motd.c, libmisc/setupenv.c,
+ libmisc/sulog.c, libmisc/hushed.c, libmisc/failure.c,
+ libmisc/loginprompt.c, libmisc/ttytype.c, libmisc/obscure.c,
+ libmisc/pam_pass_non_interractive.c, src/userdel.c, src/login.c,
+ lib/commonio.c, lib/commonio.h, libmisc/setugid.c,
+ libmisc/setupenv.c: Fix some const issues.
+ * libmisc/motd.c: Avoid multi-statements lines.
+ * libmisc/motd.c: Support long MOTD_FILE.
+ * libmisc/list.c, lib/prototypes.h: Revert previous change.
+ dup_list and is_on_list are used with members as defined for the
+ group structure, and thus even if the list is not modified, the
+ list elements cannot be constant strings.
+ * libmisc/system.c: Avoid C++ comments.
+ * src/vipw.c: WITH_TCB cannot be tested inside a gettextized
+ string. Split the Usage string.
+ * lib/commonio.h: Re-indent.
+
+2010-08-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/audit_help.c (audit_logger):pgname is not used. We let
+ audit find out the name of the program.
+ * libmisc/audit_help.c: Re-indent.
+
+2010-08-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/groupio.c: Avoid implicit conversion from signed to unsigned.
+
+2010-08-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/commonio.c: Make sure there are no NULL pointer dereference.
+
+2010-08-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/remove_tree.c: Ignore snprintf return value.
+
+2010-08-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/prototypes.h, libmisc/list.c: dup_list() and is_on_list() do
+ not change the members of the list they receive. Added const
+ qualifiers.
+
+2010-08-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: Re-indent.
+
+2010-08-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/commonio.c: Avoid multi-statements lines.
+
+2010-08-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/po/fr.po: Fix a typo.
+
+2010-06-24 Baurzhan Muftakhidinov <baurthefirst@gmail.com>
+
+ * NEWS, po/kk.po: Updated Kazakh translation.
+
+2010-04-12 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/po/fr.po: Fix some typos. Minor updates: 886t70f187u.
+
+2010-04-12 Nicolas François <nicolas.francois@centraliens.net>
+
+ * po/shadow.pot, man/po/shadow-man-pages.pot: Regenerated.
+ * po/*.po, man/po/*.po: Updated PO files.
+
+2010-04-05 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/newusers.8.xml, man/useradd.8.xml, man/groupadd.8.xml,
+ man/login.defs.d/UMASK.xml, man/login.defs.d/CREATE_HOME.xml,
+ man/login.defs.d/LOGIN_RETRIES.xml: Fix typos: choosen, overriden,
+ bahavior.
+
+2010-04-04 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/usermod.8.xml: Document changes of ownerships.
+
+2010-04-04 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/vipw.8.xml: Fix formatting typo.
+ * man/vipw.8.xml: Document the login.defs parameters only when tcb
+ is enabled.
+
+2010-04-04 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: spool is a constant string.
+ * src/useradd.c: Set the new copy_tree's paramater 'copy_root' to false
+
+2010-04-04 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: move_home() is only called if mflg is set.
+ * src/usermod.c: Fail is -m is provided but the old home directory
+ is not a directory.
+ * src/usermod.c: Use the previous improvement of copy_tree to
+ provide better error diagnosis.
+ * src/usermod.c: When rename() is used, also change the ownership.
+ * src/usermod.c: Do not change the ownership of the root directory
+ twice.
+ * src/usermod.c: When -u is provided, only change the ownership of
+ the home directory if it is a directory.
+ * src/usermod.c: Also change ownerships when -g is used.
+
+2010-04-04 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/prototypes.h, libmisc/copydir.c: Add the old UID and GID to
+ copy_tree to detect when ownership shall be changed.
+ * libmisc/copydir.c: Document the behavior when the IDs are set to
+ -1.
+ * lib/prototypes.h, libmisc/copydir.c (copy_tree): Add parameter
+ copy_root.
+ * libmisc/copydir.c: error() and ctx can be static.
+ * libmisc/copydir.c (copy_hardlink): Remove parameter src.
+
+2010-04-04 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/chowndir.c: Dynamically allocate memory to support
+ path longer than 1024 characters.
+ * libmisc/chowndir.c: Fix typos in documentation.
+ * libmisc/chowndir.c: Support and document the behavior when a old
+ or new ID is set to -1.
+ * libmisc/chowndir.c: Improved error detection when chown fails.
+ * libmisc/chowndir.c: Harmonize error handling strategy when an
+ error occurs: stop changing ownership as soon as an error was
+ detected.
+
+2010-04-03 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/hu/passwd.5: Fix formatting typo.
+ * man/id/login.1: Likewise.
+
+2010-03-31 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/vipw.8.xml: When TCB is enabled, vipw uses login.defs.
+
+2010-03-31 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, libmisc/copydir.c: When a hardlink is detected, the
+ original hardlink should not be removed.
+
+2010-03-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * po/POTFILES.in, libmisc/Makefile.am, lib/prototypes.h,
+ libmisc/remove_tree.c, libmisc/copydir.c: Split remove_tree()
+ outside of copydir.c to avoid linking against libacl or libattr.
+
+2010-03-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/su.c: shell's name must be -su when a su fakes a login.
+
+2010-03-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, configure.in, libmisc/copydir.c, man/useradd.8.xml,
+ man/usermod.8.xml, src/Makefile.am: Added support for ACLs and
+ Extended Attributes.
+
+2010-03-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/copydir.c: Document the sections closed by #endif
+
+2010-03-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/vipw.8.xml: Add section ENVIRONMENT.
+
+2010-03-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * etc/login.defs: Updated description of UMASK to indicate its
+ usage by pam_umask.
+ * man/login.defs.d/UMASK.xml: Likewise.
+
+2010-03-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/login.1.xml: login does not check for new mails in PAM
+ enabled versions. This is done by pam_mail.
+
+2010-03-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/chpasswd.c, man/chpasswd.8.xml, man/login.defs.5.xml:
+ PAM enabled versions: restore the -e option to allow restoring
+ passwords without knowing those passwords. Restore together the -m
+ and -c options.
+
+2010-03-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/su.c, src/vipw.c, src/newgrp.c: When the child is
+ interrupted, stop ourself with a SIGSTOP signal.
+
+2010-03-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newgrp.c: Limit the scope of variable pid.
+ * src/login_nopam.c: Limit the scope of variables end, lineno, i,
+ str_len.
+ * src/logoutd.c: Limit the scope of variable c.
+ * src/vipw.c: Re-indent.
+ * src/vipw.c: Close the file after the creation of the backup.
+ * src/useradd.c (set_default): Close input file on failure.
+ * src/useradd.c: Limit the scope of variables spool, file, fd, gr,
+ gid, mode.
+ * src/passwd.c: Limit the scope of variables last and ok.
+ * src/chage.c: Fix typo (non breaking space).
+ * src/login.c: Limit the scope of variables erasechar killchar, c,
+ failed.
+ * src/groups.c: Limit the scope of variable ngroups, pri_grp, i.
+ * src/id.c: Limit the scope of variable i.
+
+2010-03-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/utent.c (getutline): Remove getutline(). This function is
+ no more used.
+ * lib/groupmem.c: Limit the scope of variable i.
+ * lib/shadow.c: Avoid implicit conversion of pointers and integers
+ to booleans.
+ * lib/shadow.c: Added brackets.
+ * libmisc/limits.c: Limit the scope of variable tmpmask.
+ * libmisc/copydir.c: Close opened file on failure.
+ * libmisc/loginprompt.c: Limit the scope of variable envc.
+ * libmisc/find_new_uid.c, libmisc/find_new_gid.c: Limit the scope
+ of variable id.
+
+2010-03-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/find_new_gid.c, libmisc/find_new_uid.c: Detect some
+ misconfigurations of UID_MIN, UID_MAX, SYS_UID_MIN, SYS_UID_MAX (and
+ the GID equivalents)
+
+2010-03-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, configure.in: Next version will be 4.1.5.
+ * po/shadow.pot, man/po/shadow-man-pages.pot: Regenerated.
+ * po/*.po, man/po/*.po: Updated PO files.
+
+2010-03-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/limits.c: Re-indent to make pmccabe happy.
+
+2010-03-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/generate_translations.mak, man/generate_mans.mak: Fix
+ distcheck. All manpages generation code shall be enclosed in
+ ENABLE_REGENERATE_MAN conditions.
+
+2010-03-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/useradd.8.xml: Do not document the features which are not
+ working.
+ * man/useradd.8.xml: Fix typo: -u was meant instead of -o.
+ * man/useradd.8.xml: Document that the default behavior depends on
+ CREATE_HOME.
+
+2010-03-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/groupio.c: Fix memory management insplit_groups().
+
+2010-03-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/strtoday.c: Empty dates indicate a disabled date, this is
+ not an error.
+
+2010-03-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c, lib/commonio.c, po/POTFILES.in: Fix typos.
+ * libmisc/limits.c: Removed unused variable.
+
+2010-03-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/commonio.c: Stop sorting entries when we reach the first
+ NIS line.
+
+2010-03-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chsh.c: Even for root, warn if an invalid shell is
+ specified. Alioth#311305
+
+2010-03-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/limits.5.xml: Document the selection of the limits when
+ multiple lines match the user.
+
+2010-03-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/limits.c: Re-indent.
+ * libmisc/limits.c: Reformat the documentation. Avoid personal
+ comments.
+ * man/limits.5.xml: Document the new features.
+
+2010-03-18 Thomas Orgis <thomas@orgis.org>
+
+ * NEWS, libmisc/limits.c: Fix parsing of limits.
+ * NEWS, libmisc/limits.c: Add support for infinite limits.
+ * NEWS, libmisc/limits.c: Add support for @group syntax.
+
+2010-03-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/tcbfuncs.h: Re-indent.
+ * lib/tcbfuncs.h: Explicitly indicate function taking a void
+ parameter.
+
+2010-03-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: When exiting because of a failure, warn if an
+ home directory created, but cannot be removed.
+
+2010-03-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/chowndir.c: Re-indent.
+ * libmisc/chowndir.c: Avoid assignment in comparisons.
+ * libmisc/chowndir.c: Added brackets and parenthesis.
+
+2010-03-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/strtoday.c: Add support for numerical dates, assuming
+ they are already specified in number of days since Epoch. Return
+ -2 in case of errors to support the specification of -1.
+ * src/usermod.c, src/useradd.c: Adapt to the new error value of
+ strtoday().
+ * src/chage.c: Remove isnum(). Adapt to the new error value of
+ strtoday(). Support for numerical dates is moved to strtoday().
+
+2010-03-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/po/fr.po: Harmonize name of parameters.
+
+2010-03-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS: Indicate which tools support TCB.
+
+2010-03-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwck.c: Unlock the password and shadow files when there is a
+ failure to prepare the update in memory.
+
+2010-03-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwck.c: Only log to SYSLOG when acting on system files.
+
+2010-03-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwck.c: Document the sections closed by #endif
+ * src/pwck.c, man/pwck.8.xml: No alternative shadow file can be
+ given when USE_TCB is enabled.
+ * src/pwck.c: Remove the -s option from the usage when USE_TCB is
+ enabled. The option is still supported, but has no effect, as
+ documented in the manpage.
+
+2010-03-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwck.c: Do not use pwd_file and spw_file. Always use the
+ dbname() functions.
+
+2010-03-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwck.c: Re-indent.
+
+2010-03-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/userdel.c, src/usermod.c, src/vipw.c, src/useradd.c,
+ src/pwck.c, src/chage.c, lib/shadowio.c: Explicitly use the
+ SHADOWTCB_FAILURE return code instead of 0 or implicit conversion
+ to booleans.
+
+2010-03-18 Paweł Hajdan, Jr. <phajdan.jr@gentoo.org>
+
+ * src/pwck.c: Add support for TCB.
+ * src/pwck.c: Use spw_dbname() instead of spw_file since TCB
+ changes from a file to another depending on the user. Also use
+ pw_dbname() for consistency.
+
+2010-03-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/faillog.c: Re-indent.
+
+2010-03-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/tcbfuncs.h: Added type shadowtcb_status.
+ * lib/tcbfuncs.h, lib/tcbfuncs.c: Return a shadowtcb_status
+ instead of an int.
+ * lib/tcbfuncs.c: Do not return in OUT_OF_MEMORY.
+ * lib/tcbfuncs.c: Only FreeBSD specify that the returned buffer is
+ NULL in case of failure. The return value of asprintf shall be
+ checked.
+ * lib/tcbfuncs.c: Avoid implicit conversion of pointers or
+ integers to booleans.
+ * lib/tcbfuncs.c: Avoid assignments in comparisons.
+ * lib/tcbfuncs.c: Do not free path before its last use.
+ * lib/tcbfuncs.c: Include shadowio.h, needed for the
+ spw_setdbname's prototype.
+ * lib/tcbfuncs.c: Ignore fflush() return value.
+ * lib/tcbfuncs.c: Avoid implicit signed to unsigned conversions.
+ * lib/tcbfuncs.c: Avoid integer to char conversions.
+ * lib/tcbfuncs.c: Include prototypes.h for the definition of Prog.
+ * lib/tcbfuncs.c: Removed dead return.
+ * lib/tcbfuncs.c: move_dir() and shadowtcb_move() need a non NULL
+ stored_tcb_user.
+ * lib/tcbfuncs.c: Avoid implicit int to mode_t conversion.
+ * lib/tcbfuncs.c: Added brackets and parenthesis.
+ * lib/tcbfuncs.c: Re-indent.
+
+2010-03-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/commonio.c: Avoid implicit conversion of pointers to
+ booleans.
+ * lib/commonio.c: Ignore the return value of close when a
+ failure is reported.
+
+2010-03-16 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/faillog.8.xml: Document the behavior in display mode of the
+ -a option.
+ * NEWS, man/faillog.8.xml, src/faillog.c: Extend the -a option to
+ the non-display mode. This changes the default behavior of the -l,
+ -m, -r, -t options when -a is not specified (restrict to existing
+ users).
+
+2010-03-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/chage.1.xml, man/login.defs.5.xml, man/pwck.8.xml,
+ man/pwconv.8.xml, man/useradd.8.xml, man/userdel.8.xml,
+ man/usermod.8.xml, man/vipw.8.xml: Document the usage of the
+ TCB_AUTH_GROUP, TCB_SYMLINKS, and USE_TCB configuration
+ parameters.
+ * man/pwconv.8.xml, man/pwck.8.xml: Document the behavior when
+ USE_TCB is enabled.
+
+2010-03-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * po/POTFILES.in, lib/tcbfuncs.c: Add more strings for
+ translation.
+ * lib/tcbfuncs.c: Indicate the name of the program in error
+ messages. Avoid perror.
+ * src/useradd.c: Re-indent.
+ * src/useradd.c: Add more strings for translation. Indicate the
+ name of the program in error messages.
+ * src/userdel.c: Re-indent.
+ * src/userdel.c: Add more strings for translation. Indicate the
+ name of the program in error messages.
+
+2010-03-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: user_newname and user_newid cannot be used to
+ test if the username or ID is changed. lflg and uflg should be
+ used instead.
+
+2010-03-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/userdel.c: Avoid perror. Give more verbose warnings.
+
+2010-03-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/Makefile.am: Indicate that man/generate_mans.deps is
+ generated.
+
+2010-03-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/commonio.c: Re-indent.
+ * lib/commonio.c: Document the sections closed by #endif
+ * lib/commonio.c: Added brackets.
+ * lib/commonio.c: Avoid implicit conversion of integer to
+ booleans.
+
+2010-03-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/userdel.c: Re-indent.
+ * src/userdel.c: Added brackets.
+ * src/userdel.c: Avoid implicit conversion of pointers to
+ booleans.
+
+2010-03-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/shadowio.c: Re-indent.
+ * lib/shadowio.c: Added brackets and parenthesis.
+ * lib/shadowio.c: Document the sections closed by #endif
+ * lib/shadowio.c: Avoid negation of comparisons.
+ * lib/shadowio.c: Avoid implicit conversion of integer to booleans
+ and booleans to integers.
+
+2010-03-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: Re-indent.
+ * src/useradd.c: Added brackets.
+ * src/useradd.c: Avoid implicit conversion of integers to
+ booleans.
+ * src/useradd.c: Harmonize error messages.
+
+2010-03-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/vipw.c: Document the sections closed by #endif
+ * src/vipw.c: Avoid implicit conversion of pointers or integers to
+ booleans.
+ * src/vipw.c: Added brackets and parenthesis.
+ * src/vipw.c: Limit the definition of some variables and macros to
+ the WITH_TCB scope.
+ * src/vipw.c: Avoid assignment in comparisons.
+ * src/vipw.c: Replace PASSWD_FILE (resp. GROUP_FILE and
+ SGROUP_FILE) by pw_dbname () (resp. gr_dbname () and sgr_dbname ()).
+ This is more consistent with the shadow file handling and may be
+ useful to allow edition of another partition's files.
+
+
+2010-03-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: Re-indent.
+ * src/usermod.c: Avoid implicit conversion of pointers to
+ booleans.
+ * src/usermod.c: Added parenthesis.
+
+2010-03-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwunconv.c: Only check USE_TCB if configured WITH_TCB.
+
+2010-03-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/userdel.c: Re-indent.
+ * src/userdel.c: Avoid implicit conversion of pointers to
+ booleans.
+ * src/userdel.c: Document the sections closed by #endif
+
+2010-03-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwconv.c: Only check USE_TCB if configured WITH_TCB.
+
+2010-03-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/copydir.c: Added parenthesis.
+
+2010-02-14 Michael Bunk <mb@computer-leipzig.com>
+
+ * NEWS, lib/gshadow.c: Fix parsing of gshadow entries.
+
+2010-01-30 Paweł Hajdan, Jr. <phajdan.jr@gentoo.org>
+
+ * NEWS: Add support for TCB.
+ * lib/tcbfuncs.h, lib/tcbfuncs.c, lib/Makefile.am: New library to
+ support TCB.
+ * lib/prototypes, libmisc/copydir.c (remove_tree): Add boolean
+ parameter remove_root.
+ * configure.in: Add conditional WITH_TCB.
+ * src/userdel.c, src/usermod.c: Add support for TCB. Update call to
+ remove_tree().
+ * src/pwconv.c, src/pwunconv.c: Should not be used with TCB enabled.
+ * src/vipw.c: Add support for TCB. Update call to remove_tree().
+ * src/useradd.c: Add support for TCB. Open the shadow file outside
+ of open_files().
+ * src/chage.c: Add support for TCB.
+ * src/Makefile.am: Install passwd sgid shadow when TCB is enabled.
+ * lib/getdefs.c, man/vipw.8.xml, man/login.defs.5.xml,
+ man/login.defs/TCB_AUTH_GROUP.xml, man/login.defs/USE_TCB.xml,
+ man/login.defs/TCB_SYMLINKS.xml, man/generate_mans.mak,
+ man/generate_mans.deps, man/Makefile.am: New configuration
+ parameters: TCB_AUTH_GROUP, TCB_SYMLINKS, USE_TCB.
+ * lib/shadowio.c, lib/commonio.c: Add support for TCB.
+
+2010-01-24 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/env.c: Fix sanitize_env() noslash support. This fixes
+ Alioth#311740.
+
+2010-01-24 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/su.c: Do not sanitize the environment. This breaks
+ --preserve-environment. This sanitation was disabled on Debian
+ since quite some time with no reported issues, and sanitize_env()
+ documentation agrees that it should be useless as all modern
+ Unixes will handle setuid executables properly. This fixes
+ Alioth#312287.
+
+2010-01-24 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/setupenv.c: Fix typo from 2009-11-01.
+
+2010-01-24 Paweł Hajdan, Jr. <phajdan.jr@gentoo.org>
+
+ * configure.in: Add support for TCB in configure.in. Actual TCB
+ support will follow.
+
+2009-11-05 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/groupmod.c: Fixed groupmod when configured with
+ --enable-account-tools-setuid.
+
+2009-11-01 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, man/login.defs.d/ENV_SUPATH.xml, libmisc/setupenv.c:
+ Harmonize other paths and documentation with previous
+ change.
+
+2009-11-01 Michel Hermier <michel.hermier@gmail.com>
+
+ * src/su.c: Set the default ENV_SUPATH to
+ /sbin:/bin:/usr/sbin:/usr/bin (i.e. PATH when no ENV_SUPATH is
+ specified).
+
+2009-10-15 Thorsten Kukuk <kukuk@suse.de>
+
+ * src/faillog.c, man/faillog.8.xml: Harmonize long option in code
+ and documentation. Use --lock-secs instead of --lock-time.
+
+2009-10-05 Miroslav Kure <kurem@upcase.inf.upol.cz>
+
+ * po/cs.po: updated to 412t
+
+2009-09-29 Clytie Siddall <clytie@riverland.net.au>
+
+ * po/vi.po: updated to 412t
+
+2009-09-27 Miroslav Kure <kurem@upcase.inf.upol.cz>
+
+ * po/cs.po: updated to 411t1f
+
+2009-09-24 Christian Perrier <bubulle@debian.org>
+
+ * man/po/fr.po: Updated French translation to 835t99f165
+
+2009-09-24 Clytie Siddall <clytie@riverland.net.au>
+
+ * po/vi.po: updated to 348t30f34u
+
+2009-09-08 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/commonio.c: Avoid pre-decrement operator (--n). Add some
+ comments.
+ * libmisc/cleanup.c: Fix off by one in an assertion.
+
+2009-09-08 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/su.c: Fix indentation.
+ * src/su.c: Add more messages for translation.
+ * src/su.c: Ignore kill() return value when sending the TERM
+ signal. If it fails, a KILL should be sent anyway.
+
+2009-09-08 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/su.c: When su receives a signal, wait for the child to
+ terminate (after sending a SIGTERM), and kill it only if it did
+ not terminate by itself. No delay will be enforced if the child
+ cooperates. See http://bugs.gentoo.org/282094
+ * NEWS, man/su.1.xml: Document su's exit values.
+
+2009-09-08 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: The default value for the CREATE_MAIL_SPOOL
+ variable (i.e. if CREATE_MAIL_SPOOL= is specified without any
+ values) is "no", not DCREATE_MAIL_SPOOL ("CREATE_MAIL_SPOOL=").
+
+2009-09-08 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: Avoid redefinition of SHELL. Use DSHELL instead.
+ For consistency, change HOME, INACT, EXPIRE, SKEL, and
+ CREATE_MAIL_SPOOL to DHOME, DINACT, DEXPIRE, DSKEL, and
+ DCREATE_MAIL_SPOOL.
+
+2009-09-08 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newusers.c: Prefer #ifdef over #if.
+
+2009-09-08 Nicolas François <nicolas.francois@centraliens.net>
+
+ * configure.in: We do not use SETPGRP_VOID, and already assume
+ that setpgrp has a void argument. Remove AC_FUNC_SETPGRP to ease
+ cross compiling.
+
+2009-09-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/generate_translations.mak, man/generate_mans.mak,
+ po/Makefile.in.in: Removing and restoring the config.xml file
+ broke parallel builds. Build the manpages based on *.xml-config
+ files instead of *.xml files. The *.xml do not include config.xml
+ anymore, which permits to run xml2po without needing to remove
+ config.xml. The config.xml is restored in the *.xml-config files.
+ * man/groupadd.8.xml: Implementation of the above.
+ * man/generate_mans.deps: Updated dependencies
+
+2009-09-07 Steve Grubb <sgrubb@redhat.com>
+
+ * libmisc/limits.c: Fix the format to match the unsigned long
+ variable in argument.
+ * libmisc/utmp.c: Fix tests. tmptty is a variable stack. ut_host
+ is an array of the ut structure. None of them can be NULL.
+
+2009-09-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/shadowmem.c: Only copy the required fields of the struct
+ spwd. (start with the primitive types)
+ * lib/shadowmem.c: Avoid memzero() on a possibly NULL pointer.
+ * lib/groupmem.c: Only copy the required fields of the struct
+ group. (start with the primitive types)
+ * lib/groupmem.c: Avoid memzero() on a possibly NULL pointer.
+ * lib/groupmem.c: Free gr_mem in addition to its elements.
+ * lib/sgroupio.c: The struct sgrp has no primitive types to be
+ copied initially.
+ * lib/sgroupio.c: Avoid memzero() on a possibly NULL pointer.
+ * lib/sgroupio.c: Free sg_mem and sg_add in addition to their
+ elements.
+ * lib/pwmem.c: Only copy the required fields of the struct
+ passwd. (start with the primitive types)
+
+2009-09-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/sgroupio.h: Harmonize splint annotations of sgr_locate()
+ prototype with the one used in its definition.
+
+2009-09-07 Steve Grubb <sgrubb@redhat.com>
+
+ * libmisc/copydir.c, lib/shadowmem.c, lib/groupmem.c, lib/pwmem.c:
+ Fix some memory leaks.
+
+2009-09-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/userdel.c, src/lastlog.c, src/gpasswd.c, src/newusers.c,
+ src/chpasswd.c, src/groupmems.c, src/usermod.c, src/chgpasswd.c,
+ src/vipw.c, src/su.c, src/useradd.c, src/groupmod.c, src/passwd.c,
+ src/groupadd.c, src/chage.c, src/faillog.c, src/chsh.c: Use
+ booleans for tests.
+ * src/userdel.c, src/gpasswd.c, src/groupmems.c, src/usermod.c,
+ src/groupmod.c, src/passwd.c: Use a break even after usage().
+
+2009-09-05 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/gpasswd.c, src/groupmems.c: Split the groupmems and gpasswd
+ Usage string. It was changed anyway to add the --help option.
+
+2009-09-05 Mike Frysinger <vapier@gentoo.org>
+
+ * NEWS, src/userdel.c, src/lastlog.c, src/gpasswd.c,
+ src/newusers.c, src/chpasswd.c, src/groupmems.c, src/usermod.c,
+ src/chgpasswd.c, src/vipw.c, src/su.c, src/useradd.c,
+ src/groupmod.c, src/passwd.c, src/groupadd.c, src/chage.c,
+ src/faillog.c, src/chsh.c: If someone uses the -h/--help options,
+ the usage should not go to stderr nor should the utility exit with
+ non-zero status. All of the shadow utils do just this
+ unfortunately, so convert them over to sanity.
+ * man/groupmems.8.xml, man/gpasswd.1.xml: Added option -h/--help.
+
+2009-09-05 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: Fixed wrong format string.
+ * lib/gshadow.c: Removed declaration of unused variable.
+
+2009-08-30 Mike Frysinger <vapier@gentoo.org>
+
+ * man/generate_mans.mak, man/generate_translations.mak: Provide an
+ useful error message when --enable-man is not enabled and the
+ translated manpages are not generated.
+
+2009-08-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/login.defs.d/ENCRYPT_METHOD.xml: Avoid using sub-lists. They
+ break the groff formatting.
+
+2009-07-24 Nicolas François <nicolas.francois@centraliens.net>
+
+ * po/fr.po: Fix typos, based on reviews by the Debian French
+ translation team.
+
+2009-07-24 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, configure.in: Prepare for the next release 4.1.4.2.
+ * po/shadow.pot, man/po/shadow-man-pages.pot: Regenerated.
+ * po/*.po, man/po/*.po: Updated PO files.
+
+2009-07-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * configure.in: Fixed definition of the SHELL configuration.
+
+2009-07-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * etc/login.defs: SYS_GID_MIN /SYS_UID_MIN changed from 100 to
+ 101. GID 100 seems to be used statically.
+
+2009-07-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/shell.c, src/su.c: Execute the scripts with "sh -"
+ rather than "sh".
+
+2009-07-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * configure.in, libmisc/shell.c, libmisc/setupenv.c, src/newgrp.c,
+ src/su.c: Let the system shell be configurable.
+
+2009-07-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/su.c, libmisc/shell.c: Added support for shells being a
+ shell script without a shebang.
+
+2009-07-19 Jean-Louis Dupond <info@dupondje.be>
+
+ * po/nl.po: Fix obvious mistake in Dutch translation.
+
+2009-07-18 Peter Vrabec <pvrabec@redhat.com>
+
+ * NEWS, libmisc/find_new_gid.c, libmisc/find_new_uid.c: Do not use
+ getpwent / getgrent for system accounts. Trying the low-IDs with
+ getpwuid / getgrgid should be more efficient on LDAP configured
+ systems with many accounts.
+ * NEWS, libmisc/find_new_gid.c, libmisc/find_new_uid.c: Since
+ system accounts are allocated from SYS_?ID_MIN to SYS_?ID_MAX in
+ reverse order, accounts are packed close to SYS_?ID_MAX if
+ SYS_?ID_MIN is already used but there are still dome gaps.
+
+2009-07-05 Piarres Beobide <pi+debian@beobide.net>
+
+ * po/eu.po: Updated Basque translation.
+
+2009-06-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/fi/Makefile.am: Stop distributing the Finnish translation of
+ passwd.1 (outdated).
+
+2009-06-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/pwck.8.xml: The shadow file is optional.
+ * man/pwck.8.xml: Updated description of the checks. Added
+ description of the shadow checks.
+ * man/pwck.8.xml: Updated description of the checks.
+
+2009-06-12 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/po/fr.po: Fixed typo (forunis)
+
+2009-06-12 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/fputsx.c: Compare the result of fgets() with the provided
+ buffer instead of NULL.
+
+2009-06-12 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/gshadow.c: Removed limitation on the length of the gshadow
+ lines.
+ * lib/gshadow.c: Compare the result of fgetsx() with the provided
+ buffer instead of NULL.
+
+2009-06-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/xgetXXbyYY.c, libmisc/xgetpwnam.c, libmisc/xgetgrnam.c,
+ libmisc/xgetpwuid.c, libmisc/xgetgrgid.c, libmisc/xgetspnam.c: Do
+ not limit the size of the buffer to hold the group or user
+ structure. It used to be limited to 16k, which caused issues with
+ groups having many users.
+
+2009-06-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/su.c, man/su.1.xml: The default behavior (without -p or
+ --login) is to copy most of the environment variables. Revert a
+ previous change and update the documentation.
+
+2009-06-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/passwd.5.xml, man/shadow.5.xml: Document the passwd- and
+ shadow- files.
+
+2009-06-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/su.c: Preserve the DISPLAY and XAUTHORITY environment
+ variables, even with --login. This was not the case before in the
+ PAM version.
+
+2009-06-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c, src/groupmod.c, src/groupadd.c, src/faillog.c:
+ Fix typos. Take this opportunity to split the usage messages into
+ smaller messages (one per option).
+ * src/pwck.c: Fix typo.
+
+2009-06-05 Petri Koistinen <petri.koistinen@iki.fi>
+
+ * man/passwd.1.xml: The short option for --mindays is -n, not -m.
+
+2009-06-04 Mike Frysinger <vapier@gentoo.org>
+
+ * .gitignore, man/.gitignore, src/.gitignore: Added .gitignore
+ files.
+
+2009-06-04 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/su.1.xml: Use <option> for the login.defs options.
+ * man/su.1.xml: Improve the documentation of the su behavior
+ regarding environment variables.
+ * man/su.1.xml: Document that the login.defs file is used.
+
+2009-06-04 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/login.1.xml: Document that the login.defs file is used.
+
+2009-06-04 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/login.defs.d/ENVIRON_FILE.xml: Document the format for
+ comments.
+
+2009-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/gpasswd.1.xml: Ease the translation of the refpurpose.
+ * man/gpasswd.1.xml: Fix typo, shorten sentences.
+
+2009-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/pwck.8.xml, man/grpck.8.xml: Move the SEE ALSO section at
+ the end.
+
+2009-05-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/vipw.c: Make sure opened files are closed.
+
+2009-05-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/chpasswd.8.xml, man/grpck.8.xml, man/newgrp.1.xml,
+ man/passwd.1.xml, man/sg.1.xml: Avoid a spurious comma.
+
+2009-05-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS: New placeholder for the next release.
+
+2009-05-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * po/fr.po: Updated French translation.
+
+2009-05-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS: Prepare the next release.
+ * po/shadow.pot, man/po/shadow-man-pages.pot: Regenerated.
+ * po/*.po, man/po/*.po: Updated PO files.
+
+2009-05-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/passwd.1.xml: passwd -u does not reset the expiry field.
+
+2009-05-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/po/fr.po: Updated some strings.
+
+2009-05-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/newgrp.c: Return the exit status of the child. Thanks
+ to Lionel Elie Mamane.
+
+2009-05-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: Added warnings for absolute symlinks which could
+ be broken by rename().
+
+2009-05-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/userdel.c: Report errors to remove the user's mailbox.
+ * NEWS, src/userdel.c: When USERGROUPS_ENAB is enabled, remove the
+ user's group when the user was the only member. This is still not
+ complete, as the user could have been specified twice in the
+ members.
+ * NEWS, src/userdel.c: Do not fail when -r is used and the home
+ directory does not exist.
+
+2009-05-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/copydir.c: Added warning for relative symlinks.
+ * libmisc/copydir.c (remove_tree): There is no need to check if
+ the root argument exist. opendir() will report this.
+
+2009-05-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/faillog.8.xml: Minor updates.
+
+2009-05-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/faillog.5.xml: Split a long paragraph. Typo fixes.
+
+2009-05-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/gpasswd.1.xml: Minor updates.
+
+2009-05-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/gshadow.5.xml: Updated documentation.
+
+2009-05-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/usermod.8.xml, man/userdel.8.xml, man/useradd.8.xml:
+ Harmonize formatting of login.defs and default/useradd variables.
+ Use an <option> tag.
+ * man/usermod.8.xml: Added reference to gshadow(5).
+ * man/login.defs.d/USERDEL_CMD.xml: Shorten the lines of the
+ USERDEL_CMD example.
+
+2009-05-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/su.c: Use a boolean instead of 0.
+
+2009-05-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/usermod.8.xml: Fixed typos.
+
+2009-05-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * configure.in: Next version will be 4.1.4.1.
+
+2009-05-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/newusers.8.xml: Added notes regarding the ownership of
+ files.
+
+2009-05-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/groupmod.8.xml: Split the -g option description into smaller
+ paragraphs.
+
+2009-05-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/usermod.8.xml: Ownership of the mailbox is also changed with
+ the -u option.
+
+2009-05-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/useradd.8.xml: When no passwords are provided, the password
+ is disabled, not the account.
+
+2009-05-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/newusers.8.xml, man/chpasswd.8.xml, man/useradd.8.xml,
+ man/groupadd.8.xml, man/usermod.8.xml, man/chgpasswd.8.xml,
+ man/groupmod.8.xml: Added warning: passwords set with these tools
+ may not respect the password policy.
+
+2009-05-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/groupadd.8.xml: Fixed formatting issue.
+
+2009-05-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/userdel.8.xml: Added warning for files that could remain
+ owner by the removed user.
+
+2009-05-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/useradd.8.xml: Fix formatting typo.
+
+2009-05-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/groupdel.8.xml: Move the warning on filesystems checks to
+ the CAVEAT section.
+
+2009-05-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/login.defs.d/GID_MAX.xml: Fixed typo. useradd was specified
+ twice.
+
+2009-05-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/groupadd.8.xml, man/useradd.8.xml: names may also contain
+ digits.
+
+2009-05-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/shadow.5.xml: What is important in shadow is not the
+ encryption, but that the file is not world readable.
+
+2009-05-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/po/fr.po: Updated French translation. Thanks to ABBAS
+ Belkacem for the login.defs update.
+
+2009-05-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/usermod.8.xml: Split the CAVEAT section in paragraphs.
+ Updated information on the user_busy check.
+
+2009-05-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/userdel.8.xml: Document that -f may force the deletion of a
+ busy user.
+
+2009-05-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/usermod.c: Check if the user is busy when the user's
+ UID, name or home directory is changed.
+
+2009-05-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/userdel.c, libmisc/user_busy.c, libmisc/Makefile.am,
+ lib/prototypes.h: Move user_busy() to libmisc/user_busy.c.
+ * NEWS, libmisc/user_busy.c: On Linux, do not check if an user is
+ logged in with utmp, but check if the user is running some
+ processes. If not on Linux, continue to search for an utmp record,
+ but make sure the process recorded in the utmp entry is still
+ running.
+
+2009-05-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/usermod.8.xml: Document the -m/--move-home option.
+
+2009-05-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/userdel.c (user_busy): Check if the process registered in
+ utmp is still running. This avoids rejecting the removal of an
+ user when UTMP was not updated and indicate that the user is still
+ logged in.
+
+2009-05-16 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, libmisc/console.c (console): Remove the leading /dev/ from
+ the tty before comparing with the lines specified by CONSOLE.
+ * src/su.c: Do not remove the /dev/ prefix since it is done by
+ console().
+
+2009-05-16 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/login.defs.d/CONSOLE.xml: Document the format of the CONSOLE
+ file.
+
+2009-05-16 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/login.c: Fix failure of non PAM enabled versions when
+ an empty username is entered after a first prompt.
+
+2009-05-16 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/passwd.c: Added missing end of line at the end of success
+ messages.
+
+2009-05-16 sacha <sachall@infonie.fr>
+
+ * po/fr.po: Fixed typo in the vipw usage string.
+
+2009-05-12 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/shell.c: Removed invalid code that executed the user's
+ shell as a shell script when the direct execution of the user's
+ shell failed with ENOEXEC and the user's shell has a shebang. The
+ interpreter might not be the right one. Executing the user's
+ shell with sh -c might be better, but I'm not sure we should try
+ harder when there is a failure. Note: the removed code was only
+ included #ifndef __linux__.
+
+2009-05-12 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/userdel.8.xml: The USERGROUPS_ENAB group may not be removed
+ when the group is used by other users, not the user.
+
+2009-05-12 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/userdel.c, man/login.defs.d/USERDEL_CMD.xml: Move the
+ USERDEL_CMD script example from the source code to the
+ documentation.
+
+2009-05-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/newusers.8.xml: PAM enabled version: describe how passwords
+ are updated and how newusers behave in case of error.
+
+2009-05-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, configure.in: New release will be 4.1.4.
+ * po/shadow.pot, man/po/shadow-man-pages.pot: Regenerated.
+ * po/*.po, man/po/*.po: Updated PO files.
+
+2009-05-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/copydir.c: Added prototype of readlink_malloc(), and
+ readlink_malloc() changed to static.
+
+2009-05-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/su.c: Avoid redeclaration of root_pw.
+
+2009-05-10 NAKANO Takeo <nakano@webmasters.gr.jp>
+
+ * po/ja.po: Updated Japanese translation.
+
+2009-05-10 Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>
+
+ * po/fr.po: Updated French translation.
+
+2009-05-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/commonio.c: Avoid PATH_MAX. On glibc, we can use realpath
+ with a NULL argument.
+ * src/useradd.c: Replace PATH_MAX by a fixed constant. The buffer
+ was not meant as a storage for a path.
+ * src/useradd.c, src/newusers.c, src/chpasswd.c: Better detection
+ of fgets errors. Lines shall end with a \n, unless we reached the
+ end of file.
+ * libmisc/copydir.c: Avoid PATH_MAX. Support file paths with any
+ length. Added readlink_malloc().
+
+2009-05-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwck.c: Warn if an user has an entry in passwd and shadow,
+ and the password field in passwd is not 'x'.
+ * src/grpck.c: Warn if a group has an entry in group and gshadow,
+ and the password field in group is not 'x'.
+
+2009-05-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/login.defs.d/ENCRYPT_METHOD.xml,
+ man/login.defs.d/MD5_CRYPT_ENAB.xml,
+ man/login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml: Updated note for PAM
+ enabled versions. These variables are only used for group
+ passwords in this case.
+
+2009-05-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/chpasswd.8.xml: Sorted options alphabetically.
+
+2009-05-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/newusers.c, src/Makefile.am: Added support for
+ changing the passwords with PAM.
+ * src/newusers.c: Split the usage string in smaller parts to
+ allow enabling single parts.
+ * man/newusers.8.xml: Indicate the options and configuration
+ variables valid for PAM and non-PAM versions.
+ * man/newusers.8.xml: Added pointer to /etc/pam.d/chpasswd.
+
+2009-05-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/userdel.c: Remove duplicate definitions of exit codes.
+
+2009-05-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/non_interactive_pam_conv.c,
+ libmisc/pam_pass_non_interractive.c, libmisc/Makefile.am: Renamed.
+ * libmisc/pam_pass_non_interractive.c, lib/prototypes.h:
+ non_interactive_password and non_interactive_pam_conv do not need
+ to be externally visible.
+ * libmisc/pam_pass_non_interractive.c: Added declaration of
+ ni_conv.
+ * libmisc/pam_pass_non_interractive.c: Only compile ifdef USE_PAM.
+ * libmisc/pam_pass_non_interractive.c, lib/prototypes.h:
+ Added do_pam_passwd_non_interractive().
+ * src/chpasswd.c: Use do_pam_passwd_non_interractive().
+
+2009-05-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/pam_pass.c: Removed comment regarding pam_misc. This is
+ checked by configure.in.
+
+2009-05-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/login.defs.5.xml: PAM enabled chpasswd do not use any
+ configuration variable from login.defs.
+
+2009-05-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/passwd.1.xml: Differentiate the files used for PAM and
+ non-PAM versions.
+
+2009-05-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/chpasswd.8.xml: Describe how chpasswd behaves in case of error.
+ * man/chpasswd.8.xml: Describe the PAM enabled chpasswd behavior.
+ * man/chpasswd.8.xml: Differentiate the files and configurations
+ used for PAM and non-PAM versions.
+
+2009-05-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: failcount does not need to be signed.
+
+2009-05-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/Makefile.am: PAM enabled chpasswd now needs to be linked to
+ the PAM library, even if --enable-account-tools-setuid is not
+ used.
+
+2009-05-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chpasswd.c: Added the line number when an error is reported
+ instead of only the username.
+ * src/chpasswd.c: PAM enabled chpasswd may change the password
+ database (for the user where the password update succeeded) even
+ if there were a failure for one user. Do not indicate that changes
+ were ignored.
+
+2009-05-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/passwd.c: Exit immediately when unlocking a password would
+ result in a passwordless account. This avoid printing a success
+ message after the warning.
+
+2009-05-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/nologin.c: Include <stdlib.h> to get EXIT_FAILURE.
+
+2009-05-04 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, configure.in: Fix build failure on non-PAM enabled system
+ when --without-pam is not specified.
+
+2009-04-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/commonio.c: Ignore the return values of fclose() and
+ unlink() in case of failure of fopen_set_perms() or
+ create_backup().
+ * lib/commonio.c: Should the backup file be unlink'ed in case of
+ failure of create_backup()?
+
+2009-04-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/getulong.c: Added splint annotations.
+
+2009-04-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newgrp.c, src/chfn.c, src/groupmems.c, src/usermod.c,
+ src/userdel.c, src/chpasswd.c, src/grpck.c, src/gpasswd.c,
+ src/groupdel.c, src/chgpasswd.c, src/vipw.c, src/useradd.c,
+ src/su.c, src/groupmod.c, src/passwd.c, src/pwck.c,
+ src/groupadd.c, src/chage.c, src/login.c, src/faillog.c,
+ src/sulogin.c, src/chsh.c, src/pwconv.c: Added splint annotations.
+ * src/userdel.c, src/pwconv.c, src/lastlog.c, src/grpck.c,
+ src/vipw.c, src/groupmod.c, src/passwd.c, src/pwck.c, src/login.c,
+ src/sulogin.c, src/usermod.c: Use return instead of exit at the
+ end of main().
+ * src/gpasswd.c, src/passwd.c, src/faillog.c: Use the exitcodes.h
+ exit codes.
+ * src/chpasswd.c: Added missing ||.
+ * src/nologin.c: Do not include exitcodes.h.
+ * src/nologin.c: Added brackets.
+ * src/nologin.c: Avoid assignments in comparisons.
+
+2009-04-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/getgr_nam_gid.c, lib/get_gid.c, lib/get_pid.c,
+ lib/get_uid.c: Added splint annotations.
+
+2009-04-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/exitcodes.h: Define E_SUCCESS as EXIT_SUCCESS. Added FIXMEs.
+ * libmisc/chowntty.c, libmisc/rlogin.c, libmisc/sub.c,
+ src/newusers.c, libmisc/sulog.c, libmisc/system.c, src/logoutd.c,
+ src/groups.c, src/id.c, lib/encrypt.c, libmisc/audit_help.c,
+ libmisc/limits.c: Return EXIT_FAILURE instead of 1, and
+ EXIT_SUCCESS instead of 0.
+ * libmisc/audit_help.c: Replace an fprintf() by fputs().
+ * libmisc/audit_help.c: Remove documentation of the audit_logger
+ returned values. The function returns void.
+ * libmisc/system.c: Only return status if waitpid succeeded.
+ Return -1 otherwise.
+
+2009-04-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/chpasswd.c: Added support for changing the passwords
+ with PAM.
+ * src/chpasswd.c: Split the usage string in smaller parts to
+ allow enabling single parts.
+ * src/chpasswd.c: Do not set a global lock on the password files.
+ This is done by PAM each time a password is updated.
+
+2009-04-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/defines.h: Include <utmpx.h> and <utmp.h> to define
+ USER_NAME_MAX_LENGTH.
+
+2009-04-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Change a snprintf() to strncpy(). There are no
+ format.
+
+2009-04-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/passwd.c: Harmonize status report at the end of passwd.
+ Prefix the messages with "passwd: ", only indicate a password
+ change if the password was actually changed, and password
+ properties changed otherwise.
+
+2009-04-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chgpasswd.c, src/newusers.c: There is no need to test for 0
+ after getopt_long. No options have flag != NULL.
+
+2009-04-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/prototypes.h: Replace #if by #ifdef
+ * libmisc/Makefile.am, lib/prototypes.h,
+ libmisc/non_interactive_pam_conv.c: Added
+ non_interactive_pam_conv() and non_interactive_password.
+
+2009-04-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/utmp.c, src/userdel.c, src/logoutd.c: Replace #if by #ifdef
+
+2009-04-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/vipw.c: Harmonize messages.
+
+2009-04-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/lastlog.c: Replace atoi() by getulong().
+
+2009-04-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/failure.h: Replace HAVE_UTMPX_H by USE_UTMPX.
+
+2009-04-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/rlogin.c: Replace atoi() by getulong().
+
+2009-04-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/failure.c: Replace HAVE_UTMPX_H by USE_UTMPX.
+
+2009-04-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/chkname.c: Do not include <utmp.h> and <utmpx.h>. There
+ are no more needed.
+
+2009-04-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/limits.c: Replace strtol() by getlong().
+ * libmisc/limits.c: Replace HAVE_UTMPX_H by USE_UTMPX.
+
+2009-04-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/groupmod.8.xml, man/usermod.8.xml, man/groupadd.8.xml,
+ man/useradd.8.xml: Added note to warn about insecurity in using
+ --password.
+ * man/groupmod.8.xml: Removed not regarding default if --password
+ is not used. This was a cut&paste from groupadd.8.xml.
+ * man/passwd.1.xml: Split some paragraphs.
+ * man/passwd.1.xml: Recommend other encryption methods than DES.
+
+2009-04-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Move update_utmp() after the PID or session ID
+ changed in order to get more accurate data in UTMP. This also
+ fixes "exec login" when login in installed setuid.
+
+2009-04-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Reuse a string and avoid an untranslated message
+ "Login incorrect".
+
+2009-04-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Replace HAVE_UTMPX_H by USE_UTMPX.
+ * src/login.c: Avoid name clash between global variables and the
+ update_utmp() arguments.
+
+2009-04-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupadd.c, lib/commonio.c, lib/groupio.c: Added missing
+ include of <assert.h>
+
+2009-04-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/prototypes.h: Replace HAVE_UTMPX_H by USE_UTMPX.
+ * lib/prototypes.h, libmisc/log.c: Added splint annotations.
+ * libmisc/log.c: Added SYSLOG warning when lseek fails (should not
+ happen).
+
+2009-04-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/mail.c, libmisc/copydir.c: Added missing include of
+ <assert.h>
+
+2009-04-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/env.c: Added assertions on the snprintf results.
+
+2009-04-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, configure.in: Added configure option --enable-utmpx,
+ disabled by default. This defines USE_UTMPX, which should be used
+ instead of HAVE_UTMPX_H.
+ * libmisc/utmp.c: Replace HAVE_UTMPX_H by USE_UTMPX.
+ * libmisc/utmp.c: Removed old comment on HAVE_STRUCT_UTMP_UT_ID
+ and UTMPX support.
+
+2009-04-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/po/fr.po: Fix typo.
+
+2009-04-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newgrp.c: Close the databases before changing the UDI and
+ GID.
+
+2009-04-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/myname.c: Updated splint annotations.
+
+2009-04-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/commonio.c: Added splint annotations.
+ * lib/commonio.c: old_context should be local to commonio_close(),
+ not global.
+
+2009-04-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/passwd.c: Do not freecon strings duplicated with strdup.
+ Also avoid allocation of memory.
+ * src/passwd.c: Use SYSLOG instead of syslog.
+
+2009-04-25 Miroslav Kure <kurem@upcase.inf.upol.cz>
+
+ * po/cs.po: Updated to 352T7f8u
+
+2009-04-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/commonio.h, lib/commonio.c: Added splint annotations.
+ * lib/commonio.c: Do not assumes eptr is always notnull.
+
+2009-04-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, po/pt.po: Updated Portuguese translation.
+
+2009-04-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/copydir.c: Added splint annotations.
+ * libmisc/copydir.c: Added assert to help splint.
+ * libmisc/copydir.c: Free allocated structures in cas of failure.
+ * libmisc/copydir.c: Avoid implicit conversion of pointers to
+ booleans.
+ * libmisc/copydir.c: Use buffers of size PATH_MAX instead of 1024
+ for filenames.
+ * libmisc/copydir.c: Use fchmod and fchown to change the mode of
+ the opened file.
+ * libmisc/copydir.c: Indicate the mode to open(), even if we chmod
+ later.
+
+2009-04-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/prototypes.h: Added prototypes of getulong() and get_pid().
+ * lib/prototypes.h: Added splint annotations.
+
+2009-04-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/commonio.c: Use get_pid() instead of strtol.
+ * lib/commonio.c: Replace an int by a size_t.
+
+2009-04-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/commonio.h: Added splint annotations.
+
+2009-04-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/sgroupio.c: Free allocated structures on failure.
+ * lib/sgroupio.c: Added splint annotations.
+
+2009-04-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/Makefile.am, lib/get_pid.c, lib/getulong.c: Added get_pid()
+ and getulong().
+
+2009-04-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/getlong.c: Do not check for NULL string but empty string.
+
+2009-04-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/groupio.c: Updated splint annotations.
+ * lib/groupio.c: Added assert to help splint.
+
+2009-04-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: Check assumptions on snprintf().
+ * src/useradd.c: Replace peror by an strerror and avoid an
+ intermediate buffer.
+ * src/useradd.c: Save errno between the failure and the report by
+ perror/strerror.
+ * src/useradd.c: Prefer xmalloc to malloc.
+
+2009-04-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/lastlog.c: Remove function calls from within assert().
+
+2009-04-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/obscure.c: Change some int to size_t.
+
+2009-04-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/console.c: Use a less disturbing construct for splint.
+
+2009-04-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/limits.c: Parse the limits, umask, nice, maxlogin, file
+ limit with getlog() / getulong(). This also means, in case of
+ non-PAM enabled systems, that the umask specified on the GECOS
+ fields should start with a 0 if specified in octal. (it used to be
+ force to octal). Do the appropriate cast and range checking.
+
+2009-04-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/salt.c: In case gettimeofday() fails, get some entropy
+ from the PID.
+
+2009-04-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/setupenv.c: Prefer snprintf to sprintf, even if a small
+ context indicates no issues.
+ * libmisc/setupenv.c: Avoid implicit conversion of pointers to
+ booleans.
+
+2009-04-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/loginprompt.c: Prefer snprintf to sprintf, even if a
+ small context indicates no issues.
+
+2009-04-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/faillog.c: Remove function calls from within assert().
+
+2009-04-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/mail.c: Ignore the return value of puts().
+ * libmisc/mail.c: Prefer snprintf to sprintf, even if a small
+ context indicates no issues.
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/commonio.c, lib/commonio.h, lib/groupio.c, lib/groupio.h,
+ lib/pwio.c, lib/pwio.h, lib/shadowio.c, lib/shadowio.h: Added
+ splint annotations. The *_locate() and *_next() functions
+ currently return an observer. As the structure are often modified
+ by the caller, it could maybe be changed to exposed later. (and
+ non-const)
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/pwauth.c: Use a boolean for wipe_clear_pass and use_skey.
+ * lib/pwauth.c: Added splint annotations.
+ * lib/pwauth.c: Added brackets and parenthesis.
+ * lib/pwauth.c: Avoid assignments in comparisons.
+ * lib/pwauth.c: Avoid implicit conversion of pointers or
+ characters to booleans.
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmod.c: Cast ID to ulongs and use ulong formats for IDs.
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newgrp.c: Added splint annotations.
+ * src/newgrp.c: audit_buf is only used in newgrp. Make it static.
+ * src/newgrp.c: Ignore the return value of fputs().
+ * src/newgrp.c: Use exit(EXIT_FAILURE) instead of exit(1).
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/pwdcheck.c (passwd_check): The progname is not used.
+ * libmisc/pwdcheck.c: Ignore the return value of sleep().
+ * libmisc/pwdcheck.c: Use exit(EXIT_FAILURE) instead of exit(1).
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/setupenv.c: Avoid assignments in comparisons.
+ * libmisc/setupenv.c: Added brackets and parenthesis.
+ * libmisc/setupenv.c: Ignore the return value of fclose (file
+ opened read-only)
+ * libmisc/setupenv.c: Ignore the return value of puts().
+ * libmisc/setupenv.c: Avoid implicit conversion of pointers to
+ booleans.
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/find_new_gid.c, libmisc/find_new_uid.c,
+ libmisc/isexpired.c, src/groupadd.c, lib/pwauth.h, lib/groupmem.c,
+ lib/shadowmem.c, lib/pwmem.c, lib/prototypes.h: Added splint
+ annotations.
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/loginprompt.c: Use exit(EXIT_FAILURE) instead of
+ exit(1).
+ * libmisc/loginprompt.c: Avoid implicit conversion of pointers to
+ booleans.
+ * libmisc/loginprompt.c: Ignore return value of putc().
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/env.c, libmisc/age.c: Added splint annotations.
+ * libmisc/age.c: Added brackets and parenthesis.
+ * libmisc/age.c: Ignore the return value of fclose (file opened
+ read-only)
+ * libmisc/age.c: Ignore puts() return value.
+ * libmisc/age.c: Use exit(EXIT_FAILURE) instead of exit(1).
+ * libmisc/age.c: Avoid assignments in comparisons.
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/fputsx.c, lib/gshadow.c, lib/commonio.h: Added splint
+ annotations.
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/get_gid.c: gidstr should not be NULL, but the check was
+ meant to make sure it is not empty.
+ * lib/get_uid.c: Likewise.
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/getdef.c: Added splint annotations.
+ * lib/getdef.c: Ignore fputs() return value.
+ * lib/getdef.c: Use EXIT_FAILURE / EXIT_SUCCESS for exit()
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/faillog.c: Added splint annotations.
+ * src/faillog.c: Cast ID to ulongs and use ulong formats for IDs.
+ * src/faillog.c: Ignore fflush() return value.
+ * src/faillog.c: Added parenthesis.
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/grpck.c: Ignore puts return value.
+ * src/grpck.c: Avoid variable format string.
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/lastlog.c: Use EXIT_FAILURE / EXIT_SUCCESS for exit()
+ * src/lastlog.c: Added splint annotations.
+ * src/lastlog.c: Avoid global pwent.
+ * src/lastlog.c: Cast ID to ulongs and use ulong formats for IDs.
+ * src/lastlog.c: Avoid assignment in comparisons.
+ * src/lastlog.c: Ignore fclose() return value since the file is
+ only opened for reading.
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newgrp.c: Added assertion to guide splint (and me).
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/find_new_gid.c: Use booleans instead of char fo
+ used_gids.
+ * libmisc/find_new_gid.c: Use getdef_ulong and cast to git_t to
+ get GID values.
+ * libmisc/find_new_gid.c: Use UL as a prefix for ulong values.
+ * libmisc/find_new_uid.c: Likewise.
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/yesno.c: Ignore the return value of puts.
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/age.c: Use exit(EXIT_FAILURE) instead of exit(1).
+ * libmisc/age.c: The return value of execl() is not used.
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/xgetXXbyYY.c, libmisc/myname.c, libmisc/getgr_nam_gid.c,
+ libmisc/salt.c, libmisc/list.c, libmisc/cleanup.c, src/login.c,
+ lib/getdef.h, lib/groupio.c, lib/getlong.c, lib/gshadow_.h,
+ lib/sgroupio.c, lib/shadowio.c, lib/pwio.c, lib/commonio.h,
+ lib/fputsx.c, lib/prototypes.h: Added splint annotations.
+ * lib/groupio.c: Avoid implicit conversion of pointers to
+ booleans.
+ * lib/groupio.c: Free allocated buffers in case of failure.
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/defines.h: Added splint definitions to replace <locale.h>
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/utmp.c, libmisc/age.c, libmisc/shell.c, lib/groupio.c,
+ lib/groupio.h, lib/sgroupio.c, lib/sgroupio.h, lib/shadowio.c,
+ lib/pwio.c, lib/commonio.c, lib/shadowio.h, lib/pwio.h,
+ lib/commonio.h, lib/prototypes.h: Added splint annotations.
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/utmp.c: Only set ut_time and ut_tv if gettimeofday()
+ succeeds.
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/utmp.c: Fix the check for empty host in prepare_utmp()
+ and prepare_utmpx().
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/utmp.c: The ut argument of prepare_utmp() and
+ prepare_utmpx () might be NULL. ut_id needs to be forged in that
+ case.
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/utmp.c: Removed old documentation of setutmp().
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/utmp.c: Use xmalloc() rather than malloc().
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/utmp.c: The name returned by ttyame() needs to be copied
+ locally.
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Added assert()s for NULL (or ! NULL) username, and
+ pwd. This helps splint.
+ * src/login.c: Added splint annotations.
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: After login_prompt(), do not check for unset
+ username, but for empty username.
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/defines.h: Define USER_NAME_MAX_LENGTH, based on utmp and
+ default to 32.
+ * libmisc/chkname.c: Use USER_NAME_MAX_LENGTH.
+ * src/login.c: Use USER_NAME_MAX_LENGTH instead of the default 32.
+ username also needs to be bigger than USER_NAME_MAX_LENGTH because
+ it has to be nul-terminated.
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Use xmalloc() instead of malloc().
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Ignore the return value of puts(), fputs(),
+ strftime().
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: timeout, delay, and retries should be unsigned.
+ * src/login.c: Ignore the return value of alarm() and sleep().
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: If we cannot get the terminal configuration, do not
+ change the terminal configuration. setup_tty() is just a best
+ effort configuration of the terminal.
+ * src/login.c: Ignore failures when setting the terminal
+ configuration.
+ * src/login.c: Fail if the ERASECHAR or KILLCHAR configurations
+ are not compatible with a cc_t type.
+
+2009-04-22 Paul Szabo <psz@maths.usyd.edu.au>
+
+ * src/login.c: utent might be NULL after get_current_utmp().
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Removed temp_shell. No more used.
+ * src/login.c: lastlog is only used #ifndef USE_PAM
+ * src/login.c: Rename lastlog to ll to avoid name clash with the
+ lastlog type.
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Added update_utmp() to group the prepare_utmp and
+ setutmp (and the utmpx versions).
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Do not include netdb.h. gethostbyname() is no more
+ called from within login.c. Also UT_ADDR does not exist anymore.
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Check if login is run with effective root
+ privileges. This should be more helpful to users than a failure to
+ find an utmp entry or failure to access a file.
+
+2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/utmp.c: Reworked. Get rid of Linux specific stuff. Get rid
+ of global utent/utxent variables. Only reuse the ut_id and maybe
+ the ut_host fields from utmp.
+ * lib/prototypes.h, libmisc/utmp.c: Removed checkutmp(),
+ setutmp(), setutmpx().
+ * lib/prototypes.h, libmisc/utmp.c: Added get_current_utmp(),
+ prepare_utmp(), prepare_utmpx(), setutmp(), setutmpx().
+ * libmisc/utmp.c (is_my_tty): Only compare the name of the utmp
+ line with ttyname(). (No stat of the two terminals to compare the
+ devices).
+ * libmisc/utmp.c: Use getaddrinfo() to get the address of the
+ host.
+ * configure.in: Check for getaddrinfo().
+ * configure.in: Use AC_CHECK_MEMBERS to check for the existence of
+ fields in the utmp/utmpx structures.
+ * configure.in: Reject systems with utmpx support but no ut_id
+ field in utmp. This could be fixed later if needed.
+ * src/login.c: Use the new utmp functions. This also simplifies
+ the failtmp() handling.
+ * src/login.c: passwd_free() renamed to pw_free() and
+ shadow_free() renamed to spw_free()
+
+2009-04-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, configure.in: Enable --enable-account-tools-setuid by
+ default for PAM builds, as it used to be before the introduction
+ of this option.
+
+2009-04-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * etc/pam.d/Makefile.am: Distribute all pam.d files, even if
+ ACCT_TOOLS_SETUID is not enabled.
+
+2009-04-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/shadowmem.c: Added spw_free().
+ * lib/shadowio.c: Use spw_free() for shadow_free().
+ * lib/groupmem.c: Added gr_free().
+ * lib/groupio.c: Use gr_free() for group_free().
+ * lib/pwmem.c: Include define.h before prototypes.h
+ * lib/pwmem.c: Added pw_free().
+ * lib/pwio.c: Use pw_free() for passwd_free().
+ * lib/sgroupio.c: Added sgr_free().
+ * lib/sgroupio.c: Use sgr_free() for gshadow_free().
+ * lib/prototypes.h: Added gr_free(), pw_free(), sgr_free(),
+ spw_free().
+
+2009-04-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/shell.c: Add brackets and parenthesis.
+ * libmisc/shell.c: Avoid assignments in comparisons.
+ * libmisc/shell.c: Re-indent.
+
+2009-04-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/defines.h: Added MIN and MAX macros.
+ * libmisc/salt.c: Removed MIN and MAX macros.
+
+2009-04-20 Sven Joachim <svenjoac@gmx.de>
+
+ * NEWS, src/lastlog.c: Fix regression causing empty reports.
+ Get the size of the file before printing the entries.
+
+2009-04-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Get rid of pwent. pwd is sufficient as long as it
+ is always coming from xgetpwnam. There is no need to copy pwd to
+ pwent, this was not a good idea anyway as the strings from pwd
+ were not duplicated.
+ * src/login.c: Always free the pwd and spwd structure when we
+ retrieve a new one. This will clear the password of the previous
+ user from the memory.
+ * src/login.c: user_passwd is used to keep point to the password
+ of the user being authenticated.
+ * src/login.c: (non PAM) Fail if the user's entry cannot be found
+ after the user updated her password (if expire() requested an
+ update).
+ * src/login.c: If the user does not exist on the system, there is
+ no need to build a pwd structure (with shell).
+
+2009-04-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: ttytype already checks for TTYTYPE_FILE and TERM.
+ Just call ttytype.
+
+2009-04-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Open the PAM session before pam_setcred and before
+ initgroups. This is more consistent with rfc86.0.
+
+2009-04-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Added helper functions get_pam_user() and
+ get_failent_user().
+
+2009-04-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Added parameter to check_nologin. This will help
+ getting rid of the global pwent variable.
+
+2009-04-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Added comments.
+ * src/login.c: Close the user and group files before dropping root
+ privileges.
+
+2009-04-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: We do not need to keep the old umask. Discard the
+ umask() return value.
+
+2009-04-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/hushed.c, lib/prototypes.h, src/login.c: Change the
+ hushed() prototype to take a username instead of a passwd
+ structure in argument. The passwd entry is retrieved withing
+ hushed().
+
+2009-04-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/setugid.c: Updated comments.
+
+2009-04-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/failure.h, libmisc/failure.c, src/login.c: Added
+ username as first parameter of failtmp to avoid issues with
+ non-null terminated ut_user, unavailability of ut_user, incomplete
+ username (that should not happen currently).
+
+2009-04-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/ttytype.c: Add brackets and parenthesis.
+ * libmisc/ttytype.c: Avoid assignments in comparisons.
+
+2009-04-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/pwio.c, lib/shadowio.c, lib/groupio.c, lib/sgroupio.c: Fill
+ the password fields with zeros before they are freed.
+
+2009-04-19 Changwoo Ryu <cwryu@debian.org>
+
+ * po/ko.po: Updated Korean translation.
+
+2009-04-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/login.c: Also check if the authentication token of the
+ user has to be updated in case the user was already authenticated.
+
+2009-04-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: fflg is already restricted to root. Move
+ pam_acct_mgmt(), in case of fflg, earlier. This is equivalent and
+ simplifies the code.
+
+2009-04-19 Paul Szabo <psz@maths.usyd.edu.au>
+
+ * libmisc/utmp.c: Always call endutent or endutxent when setutent
+ or setutxent were used.
+
+2009-04-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Added comment to make sure PAM_RHOST or PAM_TTY do
+ not get set to unsanitized values.
+
+2009-04-17 Paul Szabo <psz@maths.usyd.edu.au>
+
+ * NEWS, src/login.c: Do not trust the current utmp entry's ut_line
+ to set PAM_TTY.
+ * libmisc/utmp.c: Do not trust the current utmp entry's ut_line.
+ Always set ut_line based on ttyname(0).
+
+2009-04-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * po/shadow.pot, man/po/shadow-man-pages.pot: Regenerated.
+ * po/*.po, man/po/*.po: Updated PO files.
+ * configure.in: Updated version number.
+
+2009-04-15 Peter Vrabec <pvrabec@redhat.com>
+
+ * NEWS, src/userdel.c: Fixed SE Linux support. semanage should be
+ called at the end.
+ * src/useradd.c: Always call selinux_update_mapping() (i.e.
+ semanage), not only when -Z is used.
+
+2009-04-15 Peter Vrabec <pvrabec@redhat.com>
+
+ * NEWS, srclib/getlong.c: Fix parsing of octal numbers.
+
+2009-04-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/login.c: Fix segfault when no user is provided on the
+ command line.
+
+2009-04-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * README, libmisc/system.c: Was contributed by Dan Walsh.
+
+2009-04-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEW, src/vipw.c: SE Linux: Set the default context to the
+ context of the file being edited. This ensures that the backup
+ file inherit from the file's context.
+
+2009-04-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/usermod.8.xml: There are no default values for --inactive
+ and --gid. If the options are no provided, the original values are
+ not changed.
+
+2009-04-12 Nicolas François <nicolas.francois@centraliens.net>
+
+ * po/shadow.pot, man/po/shadow-man-pages.pot: Regenerated.
+ * po/*.po, man/po/*.po: Updated PO files.
+
+2009-04-12 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/su.c: If there are no root account, or if the root account
+ has an UID != 0, default to the first UID 0 account.
+
+2009-04-12 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Restore the echoctl, echoke, onclr flags to the
+ terminal termio flags. Reset echoprt, noflsh, tostop. This
+ behavior seems to have change by mistake in earlier releases
+ (4.0.8, for no obvious reason).
+
+2009-04-12 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Fix the count of failures before login exits in
+ case of PAM enabled configurations.
+
+2009-04-12 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/passwd.1.xml: Document that passwd uses PAM to authenticate
+ and change passwords on PAM-enabled builds.
+
+2009-04-12 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newusers.c: Add more information to the mkdir and chown
+ failure messages.
+
+2009-04-12 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/po/fr.po: Updated some login.defs entries. Thanks to
+ Belkacem Abbas.
+
+2009-04-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/login.defs.d/MAX_MEMBERS_PER_GROUP.xml,
+ man/login.defs.d/CONSOLE_GROUPS.xml: Fix typos.
+
+2009-04-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/es/Makefile.am: Disable the distribution of Spanish
+ manpages. They are outdated. Please contact
+ pkg-shadow-devel@lists.alioth.debian.org if you wish to provide
+ updates.
+
+2009-04-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c, src/useraddd.c: Fix the usage string so that it
+ does not change depending on the configure option. Use a format.
+
+2009-04-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/gpasswd.c: Fix the usage of the unused macro.
+
+2009-04-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/prototypes.h, libmisc/age.c, src/expiry.c, src/login.c: A
+ shadow entry is now sufficient for agecheck. Remove the first
+ passwd entry parameter.
+
+2009-04-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c, src/usermod.c: Only call selinux_update_mapping()
+ if Zflg is set.
+ * src/userdel.c: Rename argv to args to avoid nameclash with the
+ main() parameters.
+
+2009-04-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/getgr_nam_gid.c: Added support for NULL argument.
+ * libmisc/chowntty.c: Reuse getgr_nam_gid(), and get rid of atol().
+
+2009-04-11 Peter Vrabec <pvrabec@redhat.com>
+
+ * libmisc/find_new_gid.c, libmisc/find_new_uid.c: For system
+ accounts, return the first unused ID, starting from the max value.
+ This could be useful later to increase the static IDs range.
+
+2009-04-11 Peter Vrabec <pvrabec@redhat.com>
+
+ * NEWS, src/useradd.c, man/useradd.8.xml: add -Z option to map
+ SELinux user for user's login.
+ * NEWS, src/usermod.c, man/usermod.8.xml: Likewise.
+ * libmisc/system.c, libmisc/Makefile.am, lib/prototypes.h: Added
+ safe_system(). Used to run semanage.
+ * lib/prototypes.h, libmisc/copydir.c: Make a
+ selinux_file_context() an extern function.
+ * libmisc/copydir.c: Reset SELinux to create files with default
+ contexts at the end of copy_tree().
+ * NEWS, src/userdel.c: Delete the SELinux user mapping for user's
+ login.
+
+2009-04-11 Peter Vrabec <pvrabec@redhat.com>
+
+ * src/useradd.c (get_defaults): Close the default file after the
+ default values were read.
+
+2009-04-11 Christian Perrier <bubulle@debian.org>
+
+ * po/sk.po: Slovak translation updated. Thanks to Ivan Masár
+
+2009-04-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/Makefile.am, lib/prototypes.h: Added sgetspent.c.
+
+2009-04-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * po/POTFILES.in: Added missing files. Sorted.
+
+2009-04-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/getdef.c: Use getlong instead of strtol/strtoul.
+ * libmisc/getlong, lib/getlong.c, libmisc/Makefile.am,
+ lib/Makefile.am: getlong.c moved from libmisc/ to lib/.
+
+2009-04-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/shadow.c: Replace strtol() by getlong(). Also detect more
+ issues in a numerical shadow entry field.
+
+2009-04-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/sgetspent.c: Only compile ifndef HAVE_SGETSPENT
+
+2009-04-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/sgetspent.c: Replace strtol() by getlong(). Also detect more
+ issues in a numerical shadow entry field.
+
+2009-04-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chage.c: More strtol() replaced by getlong().
+ * src/chage.c: expdays renamed to expdate. It is a date, even if
+ expressed in a number of days since Jan 1, 1970.
+ * src/chage.c: Likewise: lastday renamed to lstchgdate. Also fix
+ the --lastday documentation.
+
+2009-04-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/prototypes.h: pwd_to_spwd() should be declared if USE_PAM is
+ NOT defined.
+
+2009-04-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/passwd.c: Replace getnumber() by getlong(). This permits to
+ get rid of another strtol().
+
+2009-04-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/getlong.c: Include both <stdlib.h> and <errno.h> needed
+ for strtol and errno, and do not include "defines.h" (not needed).
+
+2009-04-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c, src/usermod.c, libmisc/getgr_nam_gid.c,
+ libmisc/Makefile.am, lib/prototypes.h: Moved getgr_nam_gid() from
+ src/useradd.c and src/usermod.c to libmisc/getgr_nam_gid.c.
+
+2009-04-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: Re-indent.
+ * src/useradd.c: Use getlong instead of get_number.
+ * src/useradd.c: Get rid of strtol.
+ * src/useradd.c: Provide better warning in case a default GROUP or
+ INACTIVE value is not valid in /etc/default/useradd.
+
+2009-04-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: Re-indent.
+ * src/usermod.c: Specifying a inactivity value < -1 is not valid.
+
+2009-04-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * configure.in: Prepare the next 4.1.3 release.
+ * po/*.po, man/po/*.po: Updated PO files.
+
+2009-04-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/prototypes.h, libmisc/addgrps.c: restrict add_groups() to
+ ifndef USE_PAM.
+ * lib/prototypes.h: Remove the declaration of add_cons_grps(). The
+ function does not exist.
+ * libmisc/setugid.c libmisc/age.c (setup_uid_gid): is_console is
+ never set ifndef USE_PAM. Change the prototype of setup_uid_gid()
+ when USE_PAM is not defined. This permits to remove add_groups
+ from PAM builds. setup_uid_gid is already subject to
+ HAVE_INITGROUPS.
+ * libmisc/pwd2spwd.c (pwd_to_spwd): pwd_to_spwd() is not used in
+ PAM builds.
+
+2009-04-05 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/passwd.c: do_update_age is only used ifndef USE_PAM. Make it
+ more explicit.
+
+2009-04-05 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: Set errno to 0 before calling strtol.
+
+2009-04-05 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/isexpired.c: If there are no shadow entry, there is no
+ need to convert the password entry to a shadow entry. The password
+ is valid.
+
+2009-04-05 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/usermod.8.xml: Split some paragraphs into smaller units.
+
+2009-04-05 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/shadow.5.xml: Rewrote to mention the meaning of special
+ values.
+
+2009-04-04 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/pwd2spwd.c, src/chpasswd.c, src/newusers.c,
+ src/passwd.c, src/pwck.c, src/pwconv.c, src/useradd.c,
+ src/usermod.c: On Jan 01, 1970, do not set the sp_lstchg field to
+ 0 (which means that the password shall be changed during the next
+ login), but use -1 (password aging disabled).
+ * src/passwd.c: Do not check sp_min if sp_lstchg is null or -1.
+
+2009-04-04 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chage.c: When no shadow entry exist, the default sp_lstchg
+ value should be -1 (no aging) rather than 0 (password must be
+ changed).
+ * src/chage.c: For password expiration and inactivity, indicate
+ that the password must be changed when sp_lstchg is null rather
+ than indicating that expiration and inactivity are not enabled.
+
+2009-04-04 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/isexpired.c: Document the isexpired return value.
+
+2009-04-04 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/age.c: Return a specific message when sp_lstchg is null.
+
+2009-03-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/sgetpwent.c, lib/sgetgrent.c: Use get_uid and get_gid to
+ validate the UIDs or GIDs instead of atoi/strtol.
+
+2009-03-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/get_gid.c, libmisc/get_uid.c, libmisc/Makefile.am,
+ lib/get_gid.c, lib/get_uid.c, lib/Makefile.am: get_uid.c and
+ get_gid.c moved from libmisc/ to lib/.
+
+2009-03-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/grpck.c (check_members): When a member is removed, do not
+ increase the index.
+ * src/grpck.c: Fix typo in messages and comments.
+
+2009-03-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/commonio.c: Call fsync before closing the backup file. This
+ ensures that the backup file is flushed to the storage medium.
+ * src/useradd.c: Likewise for the default file, faillog, lastlog,
+ and mail spool.
+ * src/usermod.c: Likewise for the faillog and lastlog file.
+ * src/vipw.c: Likewise for the backup file.
+ * libmisc/sulog.c: Likewise for the su log.
+
+2009-03-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmod.c: Embed gshadow related cleanup in #ifdef
+ SHADOWGRP.
+
+2009-03-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: get_number() replaced by getlong().
+ * src/usermod.c: When the user is renamed, make sure we do not
+ override an user with the same name (in passwd or shadow).
+
+2009-03-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/gpasswd.c: log_gpasswd_success_gshadow is in the cleanup
+ stack only when the shadow group file is present.
+
+2009-03-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/userdel.c: Make sure the user exists in the shadow
+ database before calling spw_remove().
+ * NEWS, src/userdel.c: When the user's group is removed, make sure
+ the group is in the gshadow database before calling sgr_remove().
+ * src/userdel.c: Improve warning's wording.
+
+2009-03-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/cleanup.c: Fix del_cleanup. The arguments were not
+ desynchronized with the cleanup functions.
+ * libmisc/cleanup.c: cleanup_function_args is an array of void
+ pointer, not strings.
+
+2009-03-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/find_new_gid.c: Fix find_new_gid() the current group
+ database was not taken into account.
+
+2009-03-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/addgrps.c: Fix compilation warnings.
+
+2009-03-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/po/Makefile.in.in: xml2po cannot exclude one entity for
+ expansion. Make sure config.xml does not exist when the POT file
+ is created in order to keep the configurations in the POT file
+ * man/generate_translations.mak: make sure config.xml does not
+ exist neither when the translated XML is generated. Add the
+ missing %config; (strip out by xml2po). and make sure config.xml
+ is present when the translated manpage is generated.
+ * man/generate_mans.mak: config.xml is needed for the generation
+ of manpages (already in the .deps for the English manpages, but
+ needed for the translations).
+ * man/Makefile.am: Added missing CREATE_HOME.xml.
+
+2009-03-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * etc/login.defs: Added note for PAM enabled configurations.
+
+2009-03-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/Makefile.am: Compute the dependencies for building the
+ manpages.
+ * man/generate_mans.deps: Added Makefile dependency rules.
+
+2009-03-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/addgrps.c: Fix warnings.
+
+2009-03-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/po/fr.po: Added missing space.
+
+2009-03-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/lastlog.8.xml: Document that there might be entries, for
+ deleted users, that are not displayed.
+
+2009-03-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/chgpasswd.8.xml, man/chpasswd.8.xml: Fix the man page in
+ case SHA crypt is not supported.
+
+2009-03-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/vipw.8.xml: MAX_MEMBERS_PER_GROUP is not used by vipw and
+ vigr.
+
+2009-03-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/login.defs.5.xml: Indicate that sg uses the same variables
+ as newgrp.
+ * man/login.defs.5.xml: vipw does not use any variable.
+ * man/login.defs.5.xml: In PAM enabled configurations, login still
+ uses some login.defs variables.
+
+2009-03-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/usermod.8.xml: use a <replaceable> instead of a
+ <emphasis remap='I'>.
+
+2009-03-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/newusers.8.xml: Document the behavior of newusers for each
+ field.
+ * man/newusers.8.xml: Do not add the note on PAM on non-PAM
+ enabled configurations.
+
+2009-03-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newusers.c: Make sure the SHA related variables are not
+ compiled when disabled at configuration time.
+ * src/newusers.c: Added FIXME
+ * src/chpasswd.c: Make sure the SHA related variables is not
+ compiled when disabled at configuration time.
+ * src/chgpasswd.c: Make sure the SHA related variables is not
+ compiled when disabled at configuration time.
+ * src/chgpasswd.c: Fix the test for getlong() failure.
+ * src/useradd.c, man/useradd.8.xml: Added long name for the -l
+ option: --no-log-init.
+ * src/faillog.c: Added support for the specification of a range of
+ users with -u.
+ * src/faillog.c: Do not call print_one() for users which do not
+ exist.
+ * src/faillog.c: Make sure the user's entry is not outside the
+ faillog file and initialize the faillog structure in that case.
+ * src/faillog.c: Move print_one() closer to print().
+ * src/faillog.c: reset(), setmax(), set_locktime() can also change
+ entries of user which do not exist.
+ * src/faillog.c: reset(), setmax() and set_locktime() shall not
+ create entries for users which have no entries if the value has to
+ be set to 0.
+ * src/faillog.c: reset(), setmax() and set_locktime(): better
+ handling of users whose entry is outside the faillog file.
+ * src/faillog.c: Improved option handling. Options can now be
+ specified in any order.
+ * src/faillog.c: Improved warnings when options are not
+ compatible or when the faillog cannot be open with the right mode.
+ * src/faillog.c: Only fstat the faillog file once.
+ * man/faillog.8.xml: Improved documentation.
+
+2009-03-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/gpasswd.c: Remove the documentation of options from the
+ main() documentation. It will always be outdated here.
+
+2009-03-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/lastlog.c: lastlog variable renamed to ll to avoid name
+ clash with the structure.
+ * src/lastlog.c: check the offset in print_one() so that it is
+ used for the display of one entry or a set of entries.
+ * src/lastlog.c: Do not loop over the whole user database when -u
+ is used with a single user.
+ * src/lastlog.c: Check the size of the lastlog file so that we
+ can identify failures to read.
+
+2009-03-13 Mike Frysinger <vapier@gentoo.org>
+
+ * libmisc/salt.c: Removed l64a prototype. The libc declaration is
+ non static, but the internal definition is static.
+
+2009-03-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/gpasswd.c: log_gpasswd_success_gshadow only exists ifdef
+ SHADOWGRP.
+
+2009-03-08 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/getlong.c: Make sure the getlong argument is not empty.
+ * libmisc/get_gid.c, libmisc/get_uid.c, libmisc/Makefile.am,
+ lib/prototypes.h: Added get_uid() and get_gid() to parse user and
+ group IDs.
+ * NEWS, src/grpck.c, src/pwck.c: Issue a warning if an ID is set
+ to -1.
+ * NEWS, src/newusers.c, src/usermod.c, src/useradd.c,
+ src/groupmod.c, src/groupadd.c: Make sure no user or group are
+ created with an ID set to -1.
+
+2009-03-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * contrib/adduser-old.c, contrib/adduser.c: Do not use the target
+ of snprintf in one of the format's parameters.
+
+2009-03-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/groupmems.8.xml: groupmems does not create new user.
+
+2009-03-03 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, po/LINGUAS, po/kk.po: Added Kazakh translation. Thanks to
+ Timur Birsh <taem@linukz.org>.
+
+2009-02-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/find_new_gid.c, libmisc/find_new_uid.c: Avoid calling
+ getgrent()/getpwent() after they return NULL. This caused LDAP to
+ return at the beginning of the group/user entries.
+
+2009-01-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/nologin.8.xml: Fix typo (HYSTORY -> HISTORY).
+
+2009-01-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/gpasswd.c: Only report success to audit and syslog
+ when the changes are committed to the system. Do not log failure
+ for on-memory changes to audit or syslog. Make sure failures and
+ inconsistencies will be reported in case of unexpected failures
+ (e.g. malloc failures). Only specify an audit message if it is not
+ implicitly implied by the type argument. Removed fail_exit
+ (replaced by atexit(do_cleanups)). Log failures in case of
+ permission denied.
+
+2009-01-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/login.defs.d/UMASK.xml: Indicate how UMASK is used and
+ limitations.
+ * man/limits.5.xml: Remove space before an end of tag.
+ * man/useradd.8.xml, man/login.defs.d/CREATE_HOME.xml,
+ man/login.defs.5.xml: Document the CREATE_HOME variable.
+ * etc/login.defs: Improve the documentation of UMASK.
+
+2009-01-06 Sebastian Rick Rijkers <srrijkers@gmail.com>
+
+ * NEWS, src/su.c: Preserve COLORTERM in addition to TERM when su
+ is called with the -l option.
+
+2008-12-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/chkname.c: Use a bool when possible instead of integers.
+ * libmisc/chkname.c: Add brackets and parenthesis.
+
+2008-12-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/groupadd.8.xml, configure.in, man/config.xml.in: Use the
+ real group name length limit in the documentation.
+
+2008-12-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/Makefile.am: Only link with the needed library. When
+ compiled with PAM support, chfn, chsh, login, newgrp, passwd, and
+ su do not need the libcrypt library.
+
+2008-12-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/cleanup_group.c: Fix compilation when compiled without
+ shadow group support.
+
+2008-12-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupdel.c: Remove the fail_exit () declaration.
+
+2008-12-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/gpasswd.c: Fix the support for usernames with arbitrary
+ length.
+
+2008-12-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupadd.c, src/groupdel.c, src/groupmod.c: Re-indent.
+ * src/groupmod.c: Do not add the command synopsis to the main ()
+ documentation. This avoids outdated information.
+ * libmisc/chkname.c: Remove outdated comments.
+
+2008-12-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/audit_help.c: Added audit_logger_message() to log
+ messages not related to an account.
+ * lib/prototypes.h, libmisc/cleanup.c, libmisc/cleanup_group.c,
+ libmisc/cleanup_user.c, libmisc/Makefile.am: Added stack of
+ cleanup functions to be executed on exit.
+ * NEWS, src/groupadd.c, src/groupdel.c, src/groupmod.c: Only
+ report success to audit and syslog when the changes are committed
+ to the system. Do not log failure for on-memory changes to audit
+ or syslog. Make sure failures and inconsistencies will be reported
+ in case of unexpected failures (e.g. malloc failures). Only
+ specify an audit message if it is not implicitly implied by the
+ type argument. Removed fail_exit (replaced by atexit(do_cleanups)).
+
+2008-12-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/gpasswd.c: Added support usernames with arbitrary
+ length.
+
+2008-11-27 Mike Frysinger <vapier@gentoo.org>
+
+ * configure.in: Fix the "$enable_acct_tools_setuid" = "yes" test.
+
+2008-11-27 Mike Frysinger <vapier@gentoo.org>
+
+ * NEWS, configure.in, libmisc/chkname.c: make group max length a
+ configure option. The configure behavior encoded is:
+ <no option> -> default of 16 (like today);
+ --with-group-name-max-length -> default of 16;
+ --without-group-name-max-length -> no max length;
+ --with-group-name-max-length=n > max is set to n.
+
+2008-11-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/su.c: (!USE_PAM) Provide visible information indicating that
+ su was denied.
+
+2008-11-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/su.1.xml: Fix the su synopsis. username is referenced in the
+ manpage, not LOGIN.
+ * man/ja/login.1: Fix the path of the utmp and wtmp files.
+
+2008-11-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/chowntty.c: Improve the logs for fchown and fchmod
+ failures.
+ * libmisc/chowntty.c: Only closelog() when failure cause an exit.
+
+2008-11-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, libmisc/chowntty.c: Fix a race condition that could lead to
+ gaining ownership or changing mode of arbitrary files.
+ * NEWS, libmisc/chowntty.c, libmisc/utmp.c: is_my_tty() moved from
+ utmp.c to chowntty.c. checkutmp() now only uses an existing utmp
+ entry if the pid matches and ut_line matches with the current tty.
+ This fixes a possible DOS when entries can be forged in the utmp
+ file.
+ * libmisc/chowntty.c, src/login.c, lib/prototypes.h: Remove the
+ tty argument from chown_tty. chown_tty always changes stdin and
+ does not need this argument anymore.
+
+2008-10-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/gshadow.5.xml, man/shadow.5.xml, man/passwd.5.xml,
+ man/grpck.8.xml: Sorted SEE ALSO references.
+ * man/gshadow.5.xml: Added reference to grpck(8) and grpconv(8).
+ * man/pwck.8.xml: Added reference to grpck(8).
+ * man/shadow.5.xml: Added reference to pwck(8).
+ * man/passwd.5.xml: Added reference to pwck(8).
+ * man/grpck.8.xml: Added reference to pwck(8).
+
+2008-10-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/*.xml, man/login.defs.d/*.xml: Added copyright and licence
+ header.
+
+2008-09-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Always check the return value of the pam_* APIs.
+
+2008-09-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Use a dynamic buffer for usernames.
+ * src/login.c: Copy the name of the user authenticated by PAM to
+ username. This simplify later logging (avoid USE_PAM
+ conditional).
+ * src/login.c: Check that no username is specified with -r.
+ * src/login.c: Make sure a username is specified with -f.
+ * src/login.c: Explicitly tag the end of the #ifdef RLOGIN
+ sections.
+ * src/login.c: Erase the username later since it it used for the
+ fake password check (in case of empty password).
+ * src/login.c, man/login.1.xml: the username is not an optional
+ parameter of -f. Fix the getopt optstring, remove the parsing of
+ username in the -f processing block, and remove unnecessary checks
+ (username cannot be parsed twice anymore), better documentation of
+ the synopsis.
+
+2008-09-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Existence of pam_user was already checked. pwd was
+ already copied to pwent. Remove duplicated code.
+
+2008-09-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: check_flags() renamed process_flags(). All flag
+ processing blocs moved to process_flags().
+
+2008-09-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/logoutd.c, src/userdel.c: Re-indent. This helps pmccabe.
+
+2008-09-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Add missing closing }. This was probably never
+ noticed because UT_ADDR is never defined.
+ * src/login.c: Re-indent.
+
+2008-09-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Do not mix USE_PAM and !USE_PAM code.
+
+2008-09-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Use failent_user to log to audit. username is the
+ caller, not the user login tries to authenticate.
+ * src/login.c: Use pwd->pw_name instead of pwd->pw_uid. This might
+ be more precise (name must be unique, uid might not be).
+
+2008-09-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/passwd.1.xml: passwd cannot change the full name of the
+ user, the user's login shell; but it can change the account or
+ password validity period. Thanks to Reuben Thomas.
+
+2008-09-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: Added missing declaration of Mflg.
+ * src/pwck.c: Only unlock files if they were locked before (e.g.
+ not in read-only mode).
+ * src/pwck.c: Quote the username in error messages (harmonization
+ with other messages).
+ * libmisc/find_new_gid.c: Fixed typo (s/grp->gr_gid/group_id/).
+ * libmisc/find_new_gid.c: Likewise.
+
+2008-09-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/setugid.c, src/login_nopam.c, src/suauth.c,
+ lib/getdef.c: Replace the %m format string by strerror(). This
+ avoids errno to be reset between the system call error and the
+ report function.
+
+2008-09-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/commonio.c: Ignore the return value of umask() when the mask
+ is set to the old value.
+
+2008-09-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, etc/login.defs: New CREATE_HOME variable to tell useradd
+ to create a home directory for new users.
+ * src/useradd.c, man/useradd.8.xml: New -M/--no-create-home option
+ and CREATE_HOME usage. System accounts are not impacted by
+ CREATE_HOME.
+ * man/useradd.8.xml: Indicate that a new group is created by
+ default.
+ * src/useradd.c: Removed TODO item (moved to the TODO file).
+
+2008-09-11 Miroslav Kuře <kurem@debian.cz>
+
+ * po/cs.po: Updated Czech translation.
+
+2008-09-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/login.defs.d/USERGROUPS_ENAB.xml: Fix typo: new <para> tag
+ before the previous one is closed. This caused a missng
+ explanation for USERGROUPS_ENAB.
+
+2008-09-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/groupadd.8.xml: Remove the list of (short) options from the
+ SYNOPSIS. Replaced with [options] for consistency with other tools
+ and maintainability.
+
+2008-09-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ From RedHat's patch shadow-4.1.2-sysAccountDownhill.patch
+ Thanks to Peter Vrabec.
+ * NEWS, libmisc/find_new_gid.c, libmisc/find_new_uid.c: Build an
+ index of used IDs to avoid a database request for each id in the
+ allowed range (when the highest allowed ID is already used).
+ This speedups the addition of users or groups when the highest
+ allowed ID is already used. The additional memory usage of the
+ tools should be acceptable when UID_MAX/SYS_UID_MAX are set to a
+ reasonable number.
+
+2008-09-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * configure.in: Fix the dependency of ACCT_TOOLS_SETUID on
+ USE_PAM. Build failed with --without-libpam.
+
+2008-09-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/copydir.c, configure.in: Check for the presence of
+ st_mtim and st_mtimensec, as for st_atim and st_atimensec.
+ * libmisc/copydir.c: Call utimes() after closing the file.
+
+2008-09-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/gpasswd.c: Document the long options in the usage.
+
+2008-09-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS: Added configure --enable-account-tools-setuid (default) /
+ --disable-account-tools-setuid options. This permits to disable
+ the PAM authentication of the caller for chage, chgpasswd,
+ chpasswd, groupadd, groupdel, groupmod, newusers, useradd,
+ userdel, and usermod. This authentication is not necessary when
+ these tools are not installed setuid root.
+ * configure.in: Added option --enable-account-tools-setuid to
+ enable/disable the usage of PAM to authenticate the callers of
+ account management tools: chage, chgpasswd, chpasswd, groupadd,
+ groupdel, groupmod, useradd, userdel, usermod.
+ * src/Makefile.am: Do not link the above tools with libpam if
+ account-tools-setuid is disabled.
+ * src/userdel.c, src/newusers.c, src/chpasswd.c, src/usermod.c,
+ src/groupdel.c, src/chgpasswd.c, src/useradd.c, src/groupmod.c,
+ src/groupadd.c, src/chage.c: Implement ACCT_TOOLS_SETUID
+ (--enable-account-tools-setuid).
+ * etc/pam.d/Makefile.am: Install the pam service file for the
+ above tools only when needed.
+
+2008-09-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/tz.c: tz() is only used when USE_PAM is not defined.
+ * lib/prototypes.h: Indicate functions whose presence depends on
+ the USE_PAM flag.
+
+2008-09-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmems.c: Call open_files() and close_files().
+ * src/groupmems.c: Always call check_perms(), which takes care of
+ checking if --list is used.
+
+2008-09-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/obscure.c: Compare characters to '\0', not NULL.
+
+2008-09-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/defines.h: Do not include <config.h>. This complicate
+ undefining some configuration macros when the file is included
+ multiple times.
+ * libmisc/xgetXXbyYY.c, libmisc/xgetpwnam.c, libmisc/xgetpwuid.c,
+ libmisc/xgetgrgid.c, libmisc/xgetgrnam.c, libmisc/xgetspnam.c:
+ Include <config.h> from teh compiled C file, not the included
+ getXXbyYY.c.
+
+2008-09-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/userdel.c, src/newusers.c, src/chpasswd.c, src/chfn.c,
+ src/groupmems.c, src/usermod.c, src/groupdel.c, src/chgpasswd.c,
+ src/useradd.c, src/groupmod.c, src/groupadd.c, src/chage.c,
+ src/chsh.c: Simplify the PAM error handling. Do not keep the pamh
+ handle, but terminate the PAM transaction as soon as possible if
+ there are no PAM session opened. If the username cannot be
+ determined, report it as such (not a PAM authentication failure).
+ * src/useradd.c, src/userdel.c, src/usermod.c: It is no more
+ needed to initialize retval to PAM_SUCCESS.
+
+2008-09-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newgrp.c, src/userdel.c, src/grpck.c, src/gpasswd.c,
+ src/newusers.c, src/pwconv.c, src/chpasswd.c, src/logoutd.c,
+ src/chfn.c, src/groupmems.c, src/usermod.c, src/pwunconv.c,
+ src/expiry.c, src/groupdel.c, src/chgpasswd.c, src/useradd.c,
+ src/su.c, src/groupmod.c, src/passwd.c, src/pwck.c,
+ src/groupadd.c, src/chage.c, src/login.c, src/grpconv.c,
+ src/groups.c, src/grpunconv.c, src/chsh.c: Prog is now global (not
+ static to the file) so that it can be used by the helper functions
+ of libmisc.
+ * lib/prototypes.h: Added extern char *Prog.
+ * libmisc/find_new_gid.c, libmisc/find_new_uid.c: Indicate the
+ program name with the warning.
+
+2008-09-05 Nicolas François <nicolas.francois@centraliens.net>
+
+ * configure.in: Check if AUDIT_ADD_USER, AUDIT_DEL_USER,
+ AUDIT_ADD_GROUP, and AUDIT_DEL_GROUP are defined in <libaudit.h>.
+
+2008-09-04 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: Fix comment of lflg: it is also used for faillog.
+
+2008-09-04 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/groupmems.c, man/groupmems.8.xml: Document the long
+ options.
+
+2008-09-03 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/prototypes.h, libmisc/audit_help.c: Define new type
+ shadow_audit_result for the result argument of audit_logger().
+ This permits stronger type checking and a better readability of
+ the results (SHADOW_AUDIT_FAILURE/SHADOW_AUDIT_SUCCESS constants).
+ * src/groupadd.c, src/groupdel.c, src/useradd.c, src/userdel.c:
+ Use the SHADOW_AUDIT_FAILURE/SHADOW_AUDIT_SUCCESS results instead
+ of 0 or 1 in audit_logger().
+
+2008-09-03 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/userdel.c: Log failures to remove the mailbox to syslog and
+ audit.
+ * src/userdel.c: Log successful removal of home directory to audit
+ only in case of success.
+ * src/userdel.c: Move the audit log of failure to remove the home
+ directory before the call to function that may exit.
+ * src/userdel.c: Document that errors is only used to count errors
+ during the removal of the home directory.
+
+2008-09-03 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: Log errors to syslog in grp_update() since
+ changes have started to be reported to syslog.
+ * src/userdel.c: Fix some result parameters sent to
+ audit_logger().
+
+2008-09-02 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS: Following changes from a patch contributed by Steve Grubb
+ <sgrubb@redhat.com>
+ * src/groupadd.c: Log to audit with type AUDIT_ADD_GROUP instead
+ of AUDIT_USER_CHAUTHTOK.
+ * src/groupdel.c: Log to audit with type AUDIT_DEL_GROUP instead
+ of AUDIT_USER_CHAUTHTOK.
+ * src/useradd.c: Log to audit with type AUDIT_ADD_USER /
+ AUDIT_ADD_GROUP / AUDIT_USYS_CONFIG instead of
+ AUDIT_USER_CHAUTHTOK.
+ * src/useradd.c: Add missing logs to audit.
+ * src/userdel.c: Log to audit with type AUDIT_DEL_USER /
+ AUDIT_DEL_GROUP instead of AUDIT_USER_CHAUTHTOK.
+ * src/userdel.c: Add missing logs to audit.
+
+2008-08-31 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmems.c: Remove duplicated gr_open().
+
+2008-08-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/useradd.8.xml: Document the /etc/default/useradd variables.
+ * man/useradd.8.xml: Fix the documentation of the GROUP variable
+ (and -g/--gid option).
+ * man/useradd.8.xml: Document that -o is only valid with -u
+
+2008-08-29 Nicolas François <nicolas.francois@centraliens.net>
+
+ * shadow.spec.in: Fix the source (new FTP).
+
+2008-08-29 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/su.c: Add brackets and parenthesis.
+ * src/su.c: Avoid implicit conversion of pointers to booleans.
+
+2008-08-29 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/list.c: Remove historical comment.
+ * libmisc/list.c: Added assertions for non NULL parameters.
+
+2008-08-29 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwconv.c, src/pwunconv.c: Fail if unexpected parameters are
+ provided.
+
+2008-08-29 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/passwd.c: Add brackets and parenthesis.
+ * src/passwd.c: Avoid implicit conversion of pointers to booleans.
+ * src/passwd.c: Avoid assignments in comparisons.
+
+2008-08-29 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/groupmems.c, man/groupmems.8.xml: Added support for
+ shadow groups.
+ * src/groupmems.c: Use fail_exit() instead of exit().
+
+2008-08-29 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmems.c: The grp structure returned by gr_locate is a
+ const. Duplicate this structure before working on it.
+ * src/groupmems.c: Do not fail and do not display warnings if a
+ close failure happens with the --list option. (Files are opened
+ read-only).
+ * src/groupmems.c: Avoid mixed declarations and code.
+
+2008-08-29 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/gpasswd.c: Replace the 'valid' variable by is_valid to avoid
+ clashes with the valid() function.
+
+2008-08-29 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/obscure.c: Add brackets and parenthesis.
+ * libmisc/obscure.c: Avoid implicit conversion of pointers / chars to
+ booleans.
+ * libmisc/obscure.c: Simplify the list of if.
+
+2008-08-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/passwd.c: Fix a typo in the Usage string.
+
+2008-08-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/grpconv.c, src/groups.c: Name the parameters in the
+ prototypes of the static functions.
+ * src/grpconv.c, src/grpunconv.c, src/logoutd.c: Fail if
+ unexpected parameters are provided.
+ * src/grpconv.c, src/grpunconv.c: Indicate that argc is not used
+ in the no SHADOWGRP version.
+
+2008-08-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chgpasswd.c, src/chpasswd.c: Removed variable ok, which is
+ no more used.
+
+2008-08-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chage.c: Fix the format for long integers (from %ul to %lu).
+
+2008-08-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/utmp.c: Mark the line and host arguments of setutmp() as
+ not used in the __linux__ version.
+
+2008-08-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/nscd.c: Avoid redefinition of _GNU_SOURCE.
+
+2008-08-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * configure.in: Indentation fix.
+ * configure.in, src/login.c: Do not use HAVE_PAM_FAIL_DELAY, but
+ HAS_PAM_FAIL_DELAY, to avoid a redefinition with Linux PAM.
+
+2008-08-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmems.c: Added functions add_user(), remove_user(), and
+ purge_members() to ease the support of gshadow.
+
+2008-08-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/expiry.c: Use Basename for Prog.
+ * src/expiry.c: Added missing OPENLOG.
+
+2008-08-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/nscd.c: Make sure the file is not empty when configured
+ without nscd support.
+
+2008-08-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * configure.in: Remove the USE_NSCD AM_CONDITIONAL (USE_NSCD is
+ not used in any Makefile.am).
+ * configure.in: Make sure posix_spawn is present when configured
+ with nscd support.
+
+2008-08-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/groupmem.c, lib/pwmem.c, lib/shadowmem.c: Added brackets and
+ parenthesis.
+ * lib/groupmem.c, lib/pwmem.c, lib/shadowmem.c: Avoid assignments
+ in comparisons.
+
+2008-08-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/mail.c: Added brackets and parenthesis.
+ * libmisc/mail.c: Avoid assignments in comparisons.
+
+2008-08-26 Tobias Poschwatta <tp@fonz.de>
+
+ * NEWS: Added support for uclibc.
+ * configure.in, libmisc/copydir.c: futimes() and lutimes() are not
+ standard. Check if they are implemented before using them. Do not
+ set the time of links if lutimes() does not exist, and use
+ utimes() as a replacement for futimes().
+ * configure.in, lib/nscd.h, lib/nscd.c: Added --with-nscd and
+ --without-nscd flags to support systems without nscd.
+ * lib/groupio.h, lib/prototypes.h, lib/pwio.h, lib/sgetgrent.c:
+ Include <sys/types.h> before <pwd.h> and <grp.h>. It is necessary
+ for the definition of uid_t and gid_t.
+ * lib/pwmem.c: do not include <pwd.h>, "pwio.h" is sufficient
+ here.
+ * configure.in: Check if the stat structure has a st_atim or
+ st_atimensec field.
+ * libmisc/copydir.c: Conditionally use the stat's st_atim and
+ st_atimensec fields.
+
+2008-08-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmems.c: Handle the options alphabetically.
+
+2008-08-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmems.c: When removing an user, check if deluser is on
+ the list, not adduser. This fixes a segmentation fault for every
+ call of groupmems -d.
+ * libmisc/list.c: Add assertions to help identifying these issues.
+ * libmisc/list.c: Avoid implicit conversion of pointers to
+ booleans.
+
+2008-08-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/groupmems.c: Use the "groupmems" PAM service name
+ instead of "groupmod".
+
+2008-08-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chfn.c: Merge some translated messages.
+ * src/groupmems.c, src/groupadd.c, src/gpasswd.c, src/chsh.c,
+ src/chfn.c: Harmonize *_update() failure messages.
+ * src/groupmems.c: Harmonize gr_close() failure messages.
+ * src/newgrp.c: Harmonize "unknown GID" messages.
+ * src/newusers.c: Move the pwd declaration to a inner block scope.
+
+2008-08-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: Harmonize some error messages.
+ * src/userdel.c: Add log to syslog when the mail file could not be
+ removed.
+ * src/userdel.c: Give more context an error message (merge with
+ perror()).
+ * src/usermod.c: Harmonize some error messages.
+
+2008-08-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmems.c: Check the return value of gr_update().
+ * src/chage.c, src/chfn.c, src/chgpasswd.c, src/chpasswd.c,
+ src/chsh.c, src/gpasswd.c, src/groupadd.c, src/groupmems.c,
+ src/groupmod.c, src/grpck.c, src/grpconv.c, src/grpunconv.c,
+ src/passwd.c, src/pwck.c, src/pwconv.c, src/pwunconv.c,
+ src/useradd.c, src/userdel.c, src/usermod.c: Harmonize the error
+ message sent to stderr in case of *_update () failure.
+ * src/chage.c, src/chsh.c, src/groupadd.c, src/passwd.c: Do not
+ log to syslog when pw_update() or spw_update() fail.
+ * src/newusers.c: Do not log specific error message to stderr when
+ sgr_update() fails.
+ * src/pwconv.c: Remove duplicated definition of Prog.
+
+2008-08-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chfn.c, src/chsh.c, src/expiry.c, src/gpasswd.c,
+ src/newgrp.c, src/passwd.c, src/su.c: Use the same stderr and
+ syslog warnings when the username cannot be determined.
+ * src/newgrp.c: Reuse the same stderr message for groups which do
+ not exist in the system.
+
+2008-08-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: Log errors while *_close to syslog.
+
+2008-08-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/grpconv.c: Use Basename for the definition of Prog. Prog
+ needs a file visibility.
+ * src/grpunconv.c: Likewise.
+
+2008-08-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chfn.c: Do not exit on pw_unlock failures.
+ * src/grpconv.c, src/grpunconv.c, src/pwconv.c, src/pwunconv.c,
+ src/vipw.c: Open syslog with the right identification name.
+ * src/vipw.c: Log unlock errors to syslog.
+ * src/vipw.c: Log edits to syslog.
+ * src/chage.c, src/chfn.c, src/chsh.c, src/gpasswd.c,
+ src/groupadd.c, src/groupdel.c, src/groupmod.c, src/grpconv.c,
+ src/grpunconv.c, src/passwd.c, src/pwck.c, src/pwunconv.c,
+ src/useradd.c, src/usermod.c: Harmonize the syslog levels. Failure
+ to close or unlock are errors. Failure to open files are warnings.
+
+2008-08-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newusers.c: Open syslog with the right identification name.
+ * src/newusers.c: Mark the files as locked only if they are really
+ locked (i.e. if shadow is not enabled, the files are not locked).
+
+2008-08-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/gpasswd.c: Use getopt_long instead of getopt. Added
+ support for long options --add (-a), --delete (-d),
+ --remove-password (-r), --restrict (-R), --administrators (-A),
+ and --members (-M)
+ * man/gpasswd.1.xml: Document the new long options.
+ * src/gpasswd.c: The sgrp structure is only used if SHADOWGRP is
+ defined.
+
+2008-08-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/grpck.c: Added function fail_exit(). Check failure to unlock
+ files. Report errors to stderr and syslog, but continue.
+ * src/grpconv.c: Check failure to unlock files. Report errors to
+ stderr and syslog, but continue.
+
+2008-08-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/passwd.c: Check failure to unlock files. Report errors to
+ stderr and syslog, but continue.
+
+2008-08-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chfn.c, src/chgpasswd.c, src/chpasswd.c, src/gpasswd.c,
+ src/groupadd.c, src/groupdel.c, src/groupmems.c, src/groupmod.c,
+ src/grpconv.c, src/grpunconv.c, src/newusers.c, src/pwconv.c,
+ src/pwunconv.c, src/useradd.c, src/userdel.c: Harmonize the name
+ of the variables keeping the lock status, to match the shadow
+ library prefixes.
+
+2008-08-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chage.c, src/chgpasswd.c, src/chpasswd.c, src/chsh.c,
+ src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmems.c,
+ src/groupmod.c, src/grpck.c, src/grpconv.c, src/grpunconv.c,
+ src/newusers.c, src/passwd.c, src/pwck.c, src/pwconv.c,
+ src/pwunconv.c, src/useradd.c, src/userdel.c, src/usermod.c: In
+ case of a lock failure, indicate to the user that she can try
+ again later. Do not log to syslog.
+
+2008-08-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/passwd.c: For compatibility with other passwd version,
+ the --lock an --unlock options do not lock or unlock the user
+ account anymore. They only lock or unlock the user's password.
+ * man/passwd.1.xml: Document above change. Document how an account
+ can be locked and what a password lock means.
+
+2008-08-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/groupadd.8.xml: Fix the regular expression for group policy.
+ The final $ character is optional.
+ * man/groupadd.8.xml: Likewise.
+ * man/groupadd.8.xml: Indicate the maximum size of usernames.
+
+2008-08-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/po/pl.po: Fix typo in the Polish translation (see
+ http://bugs.debian.org/491460)
+
+2008-08-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/pl/Makefile.am: Do not build the Polish translation of
+ login.1 and su.1 (not enough translated). See
+ http://bugs.debian.org/491460
+
+2008-08-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/shadow.5.xml: Fix typo. The password must be changed before
+ the maximum number of days, not after.
+
+2008-08-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmems.c: Harmonize the unlock failure messages.
+
+2008-08-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwck.c: Added fail_exit().
+ * src/pwck.c: Report failure to unlock files to stderr and
+ syslog.
+ * src/pwck.c: Report failure to sort to stderr, and exit with
+ E_CANTSORT.
+ * man/pwck.8.xml: Document return code 6 (E_CANTSORT).
+
+2008-08-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/vipw.c: Report failures to remove files to stderr.
+ * src/vipw.c: Report failures to unlock files to stderr.
+
+2008-08-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/groupmems.c: Added syslog support.
+ * src/groupmems.c: members() renamed display_members() to
+ avoid name clash with its members argument.
+ * src/groupmems.c: Report failure to unlock to syslog.
+ * src/groupmems.c: Harmonize error messages.
+ * src/groupmems.c: Report failures to write the new group file to
+ syslog (gr_close() failure).
+ * src/groupmems.c: Don't use fail_exit for non-failure exit.
+
+2008-08-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chsh.c: Added fail_exit().
+ * src/chsh.c: Use fail_exit() instead of exit(), this avoid
+ calling closelog() every times.
+ * src/chsh.c: Ignore the return value or pam_end().
+ * src/chsh.c: Simplify the PAM error handling.
+ * src/chsh.c: Report failure to unlock files to stderr and
+ syslog.
+
+2008-08-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chpasswd.c: Added fail_exit().
+ * src/chpasswd.c: Added support for syslog.
+ * src/chpasswd.c: Report failure to unlock files to stderr and
+ syslog.
+ * src/chpasswd.c: Simplify the PAM error handling.
+ * src/chpasswd.c: Report failure during *_close() to syslog.
+ * src/chpasswd.c: Ignore the return value or pam_end().
+
+2008-08-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chgpasswd.c: Added fail_exit().
+ * src/chgpasswd.c: Added support for syslog.
+ * src/chgpasswd.c: Report failure to unlock files to stderr and
+ syslog.
+ * src/chgpasswd.c: Simplify the PAM error handling.
+ * src/chgpasswd.c: Report failure during *_close() to syslog.
+ * src/chgpasswd.c: Ignore the return value or pam_end().
+
+2008-08-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/userdel.c: Report failure to remove entries from group or
+ gshadow to stderr.
+ * src/userdel.c: Fail in case of failure during the write of a
+ user or group database. Report errors to syslog.
+ * src/userdel.c: Do not unlock non locked files.
+ * src/userdel.c: Report failure to unlock the passwd or shadow
+ file to stderr and syslog.
+
+2008-08-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwunconv.c: Report failure to unlock the passwd or shadow
+ file to stderr and syslog.
+
+2008-08-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: Report failure to unlock files to stderr and
+ syslog.
+
+2008-08-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newusers.c: Report failure to unlock files to stderr and
+ syslog.
+ * src/newusers.c: In case of error when files are open or closed,
+ indicate the failing file.
+ * src/newusers.c: Do not try to unlock the files manually since
+ this is done in fail_exit.
+
+2008-08-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chage.c: Report failure to unlock the passwd or shadow file
+ to stderr and syslog.
+
+2008-08-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwconv.c: Report failure to unlock the passwd or shadow file
+ to stderr and syslog.
+ * src/pwconv.c: Report failure to chmod the backup file.
+
+2008-08-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/grpunconv.c: Report failure to unlock the group or gshadow
+ files to stderr and syslog.
+
+2008-08-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chfn.c: Added fail_exit(). Check if the passwd file is
+ locked. Report failures to unlock to stderr and syslog.
+ * src/chfn.c: Is case of failure, use fail_exit() rather than
+ exit().
+ * src/chfn.c: Ignore the return value of pam_end().
+
+2008-08-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/groupio.c, lib/groupio.h, lib/pwio.c, lib/pwio.h,
+ lib/sgroupio.c, lib/sgroupio.h, lib/shadowio.c, lib/shadowio.h:
+ Added *_dbname() functions to retrieve the name of the databases.
+ * lib/groupio.c, lib/groupio.h, lib/pwio.c, lib/pwio.h,
+ lib/sgroupio.c, lib/sgroupio.h, lib/shadowio.c, lib/shadowio.h:
+ *_name() functions renamed *setname().
+ * src/grpck.c, src/pwck.c: Likewise.
+ * lib/groupio.h, lib/pwio.h, lib/sgroupio.h, lib/shadowio.h: Added
+ the name of the arguments to the prototypes.
+ * src/chage, src/chfn.c, src/chgpasswd.c, src/chpasswd.c,
+ src/chsh.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c,
+ src/groupmod.c, src/grpck.c, src/grpconv.c, src/grpunconv.c,
+ src/newusers.c, src/passwd.c, src/pwck.c, src/pwconv.c,
+ src/pwunconv.c, src/useradd.c, src/userdel.c, src/usermod.c:
+ Harmonize the error & syslog messages in case of failure of the
+ *_lock(), *_open(), *_close(), *_unlock(), *_remove() functions.
+ * src/chgpasswd.c, src/chpasswd.c, src/usermod.c: Avoid
+ capitalized messages.
+ * src/chpasswd.c, src/useradd.c, src/usermod.c: Harmonize messages
+ in case of inexistent entries.
+ * src/usermod.c: Harmonize messages in case of already existing
+ entries.
+ * src/newusers.c, src/useradd.c: Simplify PAM error handling.
+ * src/useradd.c: Report failures to unlock files (stderr, syslog,
+ and audit). But do not fail (continue).
+ * src/useradd.c (open_files): Do not report to syslog & audit
+ failures to lock or open the databases. This might be harmless,
+ and the logs were not already informed that a change was
+ requested.
+ * src/usermod.c: It's not the account which is unlocked, but its
+ password.
+
+2008-08-02 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupadd.c: Harmonize error & syslog messages.
+ * src/groupadd.c: Add logging to syslog & audit on lock/unlock
+ failures.
+ * src/groupadd.c: Only call gr_unlock() and sgr_unlock() in the
+ group or gshadow files were previously locked.
+ * src/groupadd.c: Make sure failures are reported to syslog/audit
+ after the change is mentioned.
+ * src/groupmod.c: Harmonize error & syslog messages.
+ * src/groupmod.c: Add logging to syslog & audit on lock/unlock
+ failures.
+ * src/groupmod.c: Make sure issues are reported to syslog or audit
+ after the change is mentioned.
+ * src/groupdel.c: Harmonize error & syslog messages.
+ * src/groupdel.c: Add logging to syslog & audit on lock/unlock
+ failures.
+ * src/groupdel.c: Only call gr_unlock() and sgr_unlock() in the
+ group or gshadow files were previously locked.
+ * src/groupdel.c: Simplify the handling of PAM errors.
+
+2008-08-01 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/gpasswd.c: Harmonize error & syslog messages.
+ * src/gpasswd.c: Warn and log to syslog and audit when group or
+ gshadow cannot be unlocked, but do not fail.
+
+2008-08-01 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chfn.c, src/chsh.c, src/groupdel.c, src/groupmems.c,
+ src/groupmod.c, src/grpck.c, src/login.c, src/logoutd.c,
+ src/newgrp.c, src/newusers.c, src/passwd.c, src/pwck.c,
+ src/suauth.c, src/useradd.c, src/userdel.c, src/usermod.c,
+ src/vipw.c: Complete the switch from the `' quotation style to ''.
+ Do it also in SYSLOG messages. Quote some parameters. All this
+ permits to merge some messages.
+
+2008-07-30 Lukáš Kuklínek <lkukline@redhat.com>
+
+ * src/groupmems.c: Only check if the adduser user exists when an
+ user is specified with -a.
+
+2008-07-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmems.c: Fix the groupmems' usage message. The -D option
+ is in fact -p.
+
+2008-07-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmems.c: Replace an if test by an else.
+
+2008-07-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmems.c: Ignore the return value of fputs().
+
+2008-07-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmems.c (whoami): Make sure usr and grp are not NULL
+ before dereferencing them.
+
+2008-07-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmems.c: Use xstrdup() rather than strdup().
+
+2008-07-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmems.c: Add parenthesis.
+ * src/groupmems.c: Avoid implicit conversion of pointers / chars to
+ booleans.
+
+2008-07-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/groupmems.c: Allow everybody to list the users of a group.
+ This information is publicly available in /etc/group.
+ * NEWS, src/groupmems.c: Open /etc/group read only for the -l option.
+
+2008-07-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/groupmems.8.xml: Sort options alphabetically.
+
+2008-07-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmems.c (check_perms): Simplify. Always call pam_end()
+ at the end of the authentication.
+
+2008-07-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmems.c: Add fail_exit() to remove the group lock file
+ in case of failure. Replace the calls to exit() by fail_exit().
+
+2008-07-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmems.c: Reduce the number of checks. Isolate the
+ parameters setting and permissions checking.
+
+2008-07-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmems.c: Add functions process_flags() and check_perms()
+ from code of main().
+ * src/groupmems.c: Harmonize the failure message in case of PAM
+ failure with the other programs.
+
+2008-07-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmems.c: Remove isgroup(), which always returns TRUE.
+
+2008-07-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmems.c: Reuse the functions from libmisc/list.c to deal
+ with user lists. addtogroup() was broken when realloc() move the
+ memory area.
+ * src/groupmems.c: Report failures with the name of the program.
+
+2008-07-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmems.c: EXIT_READ_GROUP changed to EXIT_INVALID_GROUP.
+ * src/groupmems.c: EXIT_INVALID_USERNAME changed to EXIT_INVALID_USER.
+
+2008-07-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmems.c: Really use booleans.
+ * src/groupmems.c: Change isroot() to a macro that returns a
+ boolean.
+
+2008-07-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/defines.h: Make sure the booleans are defined before using
+ them.
+
+2008-07-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmems.c: Added Prog global variable to indicate the name
+ of the program in error messages.
+
+2008-07-22 Lukáš Kuklínek <lkukline@redhat.com>
+
+ * NEWS, src/groupmems.c: Check if the user added to group actually
+ exist. RedHat bug #455603
+ * NEWS, src/groupmems.c: Check if the group exists in the group
+ local database (/etc/group). RedHat bug #456088
+
+2008-07-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/prototypes.h: Fix getrange prototype.
+
+2008-07-21 Seraphim Mellos <mellos@ceid.upatras.gr>
+
+ * README, NEWS, configure.in, lib/pam_defs.h, src/login.c: Add
+ support for OpenPAM.
+
+2008-07-12 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chage.c: Ignore the return value of pam_end() before exiting.
+ * src/chage.c: Ignore return values of strftime(), snprintf(),
+ puts(), printf(), and fputs().
+ * src/chage.c: Check the return value of asctime().
+
+2008-07-12 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/gshadow.c: Avoid assignments in comparison.
+
+2008-07-12 Nicolas François <nicolas.francois@centraliens.net>
+
+ * ChangeLog, NEWS, src/login.c: Re-inject the changes from 4.1.2.1.
+
+2008-07-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: Do not call usr_update() if it will have no
+ effects. This avoid checking if the user exists in the local passwd
+ file if not necessary, and thus allow to add LDAP users to local
+ groups. (The user is already checked against the system
+ configuration with getpwnam()). Thanks to Dan Kopecek.
+
+2008-07-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: Split update_files() into update_lastlog() and
+ update_faillog(). Report errors (but don't fail) if the file
+ exist, but open(), lseek(), read(), write(), or close() fails.
+ * src/usermod.c: Add brackets and parenthesis.
+ * src/usermod.c: Ignore the return value of pam_end() before
+ exiting.
+ * src/usermod.c: Ignore the return value of strftime(),
+ snprintf(), and puts().
+ * src/usermod.c: Check the return value of gmtime() and asctime(),
+ and output the raw time_t on failures.
+
+2008-07-11 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/setugid.c: Add brackets.
+
+2008-06-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/env.c: Avoid implicit conversion of pointers / chars to
+ booleans.
+ * libmisc/env.c: Add brackets and parenthesis.
+ * libmisc/env.c: Ignore the return value of puts() and fputs().
+ * libmisc/env.c: Avoid multi-statements lines.
+
+2008-06-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/utmp.c: Avoid implicit conversion of pointers / chars to
+ booleans.
+ * libmisc/utmp.c: Add brackets and parenthesis.
+ * libmisc/utmp.c: Exit with the EXIT_FAILURE status code in case
+ of failure.
+ * libmisc/utmp.c: Avoid assignments in comparisons.
+ * lib/prototypes.h, libmisc/utmp.c: Change setutmp()'s prototype
+ to return an int because pututline() and pututxline() may fail.
+
+2008-06-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/audit_help.c: Added one string for translation.
+ * po/POTFILES.in: Added libmisc/audit_help.c,
+ libmisc/find_new_gid.c, libmisc/find_new_uid.c, libmisc/getlong.c,
+ libmisc/getrange.c, libmisc/xgetXXbyYY.c, and libmisc/yesno.c.
+ Removed libmisc/find_new_ids.c
+
+2008-06-16 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: If the faillog file exist, warn in case of
+ failure when open(), lssek(), write() or close() fails when the
+ new user's faillog entry is reset.
+ * src/useradd.c: Ditto for the lastlog entry.
+
+2008-06-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/limits.c: Add brackets and parenthesis.
+ * libmisc/limits.c: Avoid implicit conversion of pointers /
+ integers to booleans.
+ * libmisc/limits.c: Ignore the return value of umask(). We will
+ never return to the original umask.
+ * libmisc/limits.c: Avoid multi-statements lines.
+ * libmisc/limits.c: Added default to a switch(). Report invalid
+ limit strings to syslog.
+ * libmisc/limits.c: Ignore the return value of fclose().
+ /etc/limits is open read-only.
+ * libmisc/limits.c: Ignore the return value of fputs() and
+ sleep().
+ * libmisc/limits.c: Check the return value of nice() and
+ set_filesize_limit(), and report errors to syslog.
+
+2008-06-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/ulimit.c, lib/prototypes.h: Return failures of
+ set_filesize_limit(). Change the prototype to return an int
+ instead of void.
+
+2008-06-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/failure.c: Try to close the open file if a failure
+ occured during lseek(), read() or write().
+
+2008-06-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/log.c: Check return values. If lseek() failed, avoid
+ reading or writing at an unspecified location. Log to syslog in
+ case of failure.
+ * libmisc/log.c: Use the right casts.
+
+2008-06-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/find_new_ids.c, libmisc/find_new_gid.c,
+ libmisc/find_new_uid.c, libmisc/Makefile.am, lib/prototypes.h:
+ Split find_new_ids.c into find_new_gid.c and find_new_uid.c to
+ ease the description of login.defs variables in the different
+ tools.
+
+2008-06-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/failure.c: Ignore the return value of strftime() and
+ printf().
+ * libmisc/failure.c: Fix syslog call. The UID is not available.
+ User the username specified in the utmp/utmpx entry.
+
+2008-06-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/defines.h: Avoid implicit conversion of pointers to
+ booleans.
+ * lib/defines.h: Ignore return values of setlocale() except the
+ first call.
+ * lib/defines.h: Fix a splint observer warning by using an
+ intermediate variable (old_locale).
+
+2008-06-15 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/failure.c: Check return values. If lseek() failed, avoid
+ reading or writing at an unspecified location. Log to syslog in
+ case of failure when reading a faillog entry or writing in
+ faillog or btmp.
+ * libmisc/failure.c: Check if the file exist before opening it.
+ * libmisc/failure.c: Log failures of open() and close() when
+ necessary.
+
+2008-06-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/prototypes.h: Add the getrange() prototype.
+ * lib/prototypes.h: Fix the valid_field() prototype (does not
+ return an bool).
+ * lib/prototypes.h: Fix the valid() prototype (it does return a
+ bool).
+
+2008-06-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/getdef.c: Fix the getdef_ulong() prototype.
+ * lib/getdef.h: Fix the getdef_ulong() prototype.
+
+2008-06-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/lastlog.c: Use getrange to parse the range of users.
+ * src/lastlog.c: umin and umax do not need to be signed long. Use
+ an unsigned long which might be needed to parse a GID or UID. Add
+ the has_umin and has_umax to replace the -1 values.
+ * src/lastlog.c: Cast dates to time_t.
+ * src/lastlog.c: Prefix lastlog errors with "lastlog: ".
+
+2008-06-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/getlong.c: Reset errno before calling strtol().
+ Otherwise, errno could be already set to ERANGE.
+
+2008-06-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/Makefile.am, libmisc/getrange.c: Added function to parse
+ a range (useful for lastlog).
+
+2008-06-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chsh.c: <signal.h> is not needed.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/prototypes.h: Define AUDIT_NO_ID to (unsigned int) -1. This
+ value should be used when the ID should not be considered.
+ * lib/prototypes.h: Fix the prototype of do_rlogin() according to
+ earlier changes.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/shadow.c: Use SHADOW_SP_FLAG_UNSET for the initial
+ value of spwd.sp_flag.
+ * lib/shadow.c: Add brackets.
+ * lib/shadow.c: Avoid implicit conversion of pointers to
+ booleans.
+ * lib/shadow.c: The size argument of fgets is an int, not a
+ size_t.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/commonio.c: len should be typed ssize_t as it is the return
+ of read(), and is compared to 0. Cast to size_t when necessary.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/find_new_ids.c: Use getdef_ulong to retrieve UIDs/GIDs
+ from login.defs. Type constants to long integers.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/gshadow.c: Use a bool when possible instead of int integers.
+ * lib/gshadow.c: Remove __setsgNIS() -never used).
+ * lib/gshadow.c: Avoid multi-statements lines.
+ * lib/gshadow.c: Avoid assignments in comparisons.
+ * lib/gshadow.c: ptr[nelem] is a string. Initialize it to NULL
+ instead of '\0'.
+ * lib/gshadow.c: Add brackets and parenthesis.
+ * lib/gshadow.c: The size argument of strncpy is a size_t and the
+ size argument of fgets is an int.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/groupio.c: Add brackets.
+ * lib/groupio.c: Make sure malloc receives a size_t.
+ * lib/groupio.c: Avoid multi-statements lines.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/sgetspent.c: Use SHADOW_SP_FLAG_UNSET for the initial
+ value of spwd.sp_flag.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/getdef.h, lib/getdef.c: Add getdef_ulong().
+ * lib/getdef.c: Added TODOs because of lack of error checking.
+ * lib/getdef.c: The size argument of fgets is an int, not a
+ size_t.
+ * lib/getdef.c: Avoid multi-statements lines.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/id.c: Make sure malloc receives a size_t.
+ * src/id.c: Use a %lu format and cast group and user IDs to
+ unsigned long integers.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/sulogin.c: Ignore the return value of signal().
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groups.c: sys_ngroups is only used when HAVE_GETGROUPS is
+ defined.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/faillog.c: Ignore return value of time() when use with a
+ non NULL argument.
+ * src/faillog.c: Use a %lu format and cast number of days to
+ unsigned long integers.
+ * src/faillog.c: Cast dates to time_t.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Ignore the return value of signal().
+ * src/login.c: Use a %lu format and cast group and user IDs to
+ unsigned long integers.
+ * src/login.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chage.c: Add the arguments' names in the functions
+ prototypes.
+ * src/chage.c: The ID argument of audit_logger is an unsigned
+ int. Use AUDIT_NO_ID instead of -1.
+ * src/chage.c: print_date() received a time_t.
+ * src/chage.c: Use SHADOW_SP_FLAG_UNSET for the initial
+ value of spwent.sp_flag.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupadd.c: The ID argument of audit_logger is an unsigned
+ int. Use AUDIT_NO_ID instead of -1.
+ * src/groupadd.c: Cast the parsed GID/UID to a gid_t/uid_t.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwck.c: Use a %lu format and cast group and user IDs to
+ unsigned long integers.
+ * src/pwck.c: Cast number of days to a long integer.
+ * src/pwck.c: Use the SCALE macro instead of (24L * 3600L)
+ for the values to be set in /etc/shadow.
+ * src/pwck.c: Use SHADOW_SP_FLAG_UNSET for the initial
+ value of spent.sp_flag.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/passwd.c: Ignore return value of time() when use with a
+ non NULL argument.
+ * src/passwd.c: Cast number of days to a long integer.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmod.c: The ID argument of audit_logger is an unsigned
+ int. Use AUDIT_NO_ID instead of -1.
+ * src/groupmod.c: Use a %lu format and cast group and user IDs to
+ unsigned long integers.
+ * src/groupmod.c: Cast the parsed GID/UID to a gid_t/uid_t.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: The ID argument of audit_logger is an unsigned
+ int. Use AUDIT_NO_ID instead of -1.
+ * src/useradd.c: Cast the parsed GID/UID to a gid_t/uid_t.
+ * src/useradd.c: The size argument of fgets is an int, not a
+ size_t.
+ * src/useradd.c: Cast number of days to a long integer.
+ * src/useradd.c: Use SHADOW_SP_FLAG_UNSET for the initial
+ value of spent.sp_flag.
+ * src/useradd.c: Use a %lu format and cast group and user IDs to
+ unsigned long integers.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/su.c: fork() and waitpid() return a pid_t, not an int.
+ * src/su.c: Add brackets and parenthesis.
+ * src/su.c: Ignore the return value of signal().
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupdel.c: The ID argument of audit_logger is an unsigned
+ int. Use AUDIT_NO_ID instead of -1.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/expiry.c: Ignore the return value of signal().
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newusers.c: Fix the check for GID/UID validity.
+ * src/newusers.c: Comment why we use both getgrgid() and
+ gr_locate_gid().
+ * src/newusers.c: Cast the parsed GID/UID to a gid_t/uid_t.
+ * src/newusers.c: Cast the number of days to a long integer.
+ * src/newusers.c: Use SHADOW_SP_FLAG_UNSET for the initial
+ value of spent.sp_flag.
+ * src/newusers.c: The size argument of fgets is an int, not a
+ size_t.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: Cast dates to time_t, and number of days to a
+ long integer.
+ * src/usermod.c: Cast UIDs and GIDs to uid_t and gid_t after
+ checking the ranges.
+ * src/usermod.c: The ID argument of audit_logger is an unsigned
+ int.
+ * src/usermod.c: read() returns a ssize_t.
+ * src/usermod.c: Cast the return value of malloc and make sure it
+ receives a size_t.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/logoutd.c: Ignore return value of time() when use with a
+ non NULL argument.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwconv.c: Use SHADOW_SP_FLAG_UNSET for the initial
+ value of sp.sp_flag.
+ * src/pwconv.c: Cast number of days to a long integer.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/gpasswd.c: The ID argument of audit_logger is an unsigned
+ int.
+ * src/gpasswd.c: Ignore the return value of signal(). The signal
+ handlers are only changed for the last steps of gpasswd, and there
+ is no need to restore them.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/userdel.c: The ID argument of audit_logger is an unsigned
+ int.
+ * src/userdel.c: fork() and wait() return a pid_t, not an int.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newgrp.c: Use a %lu format and cast group and user IDs to
+ unsigned long integers.
+ * src/newgrp.c: The ID argument of audit_logger is an unsigned
+ int.
+ * src/newgrp.c: Ignore the return value of signal() (the signal
+ handlers are assumed to be the default one and are restored
+ later).
+ * src/newgrp.c: Do not checl if a pid_t is < 0, check if equal
+ to (pid_t)-1.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/isexpired.c: Cast number of days to a long integer.
+ * libmisc/isexpired.c: Add brackets and parenthesis.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/copydir.c: Do not specify a size of arrays in the
+ prototypes.
+ * libmisc/copydir.c: Use a size_t for the length of strings.
+ * libmisc/copydir.c: Cast the return value of malloc().
+ * libmisc/copydir.c: The size argument of write() is a size_t.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/pwd2spwd.c: Cast number of days to a long integer.
+ * libmisc/pwd2spwd.c: Use SHADOW_SP_FLAG_UNSET for the initial
+ value of sp.sp_flag.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/defines.h: Include <config.h> since it uses the macro that
+ might be defined in this header file.
+ * lib/defines.h: Prefer checking if HAVE_LOCALE_H or ENABLE_NLS
+ are defined (rather than set to non 0).
+ * lib/defines.h: The dummy implementations of bindtextdomain() and
+ textdomain() should return a pointer. Return NULL instead of
+ /* empty */
+ * lib/defines.h: Define SHADOW_SP_FLAG_UNSET, to be used for the
+ initialization of sp_flag field of the shadow structures.
+ * lib/defines.h: Define LC_ALL, needed even if HAVE_LOCALE_H is
+ not defined.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/sulog.c: Ignore the return value of umask() when the
+ mask is restored.
+ * libmisc/sulog.c: Add brackets.
+ * libmisc/sulog.c: Ignore return value of time() when use with a
+ non NULL argument.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/log.c: Avoid assignments in comparisons.
+ * libmisc/log.c: Add brackets and parenthesis.
+ * libmisc/log.c: read() returns a ssize_t (note size_t).
+ * libmisc/log.c: Avoid implicit conversion of pointers to
+ booleans.
+ * libmisc/log.c: Ignore return value of time() when use with a
+ non NULL argument.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/strtoday.c: Avoid implicit conversion of pointers to
+ booleans.
+ * libmisc/strtoday.c: Add brackets and parenthesis.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/salt.c: Use a size_t for the size of strings instead of
+ unsigned int.
+ * libmisc/salt.c: Add brackets and parenthesis.
+ * libmisc/salt.c: Avoid assignments in comparisons.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/age.c: fork() and wait() return a pid_t, not an int.
+ * libmisc/age.c: Avoid implicit conversion of pointers to
+ booleans.
+ * libmisc/age.c: Avoid assignments in comparisons.
+ * libmisc/age.c: Ignore the return value of printf(), puts(),
+ fputs() and fflush().
+ * libmisc/age.c: Add brackets and parenthesis.
+ * libmisc/age.c: Cast the return value of time() to long and
+ converted to a date.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/rlogin.c: The size argument of read() is a size_t.
+ Propagate this time to the callers (the get_remote_string() and
+ do_rlogin() functions).
+ * libmisc/rlogin.c: Add brackets and parenthesis.
+ * libmisc/rlogin.c: Avoid multi-statements lines.
+ * libmisc/rlogin.c: Avoid assignments in comparisons.
+ * libmisc/rlogin.c: Avoid implicit conversion of pointers to
+ booleans.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/failure.c: Avoid assignments in comparisons.
+ * libmisc/failure.c: read() returns a ssize_t.
+ * libmisc/failure.c: Add brackets and parenthesis.
+ * libmisc/failure.c: Ignore return value of time() when use with a
+ non NULL argument.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/chowntty.c: Avoid assignments in comparisons.
+ * libmisc/chowntty.c: Avoid implicit conversion of pointers to
+ booleans.
+ * libmisc/chowntty.c: Add brackets and parenthesis.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/audit_help.c: Add brackets.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/addgrps.c: Avoid implicit conversion of pointers to
+ booleans.
+ * libmisc/addgrps.c: Add brackets.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/utmp.c: Avoid implicit conversion of pointers to
+ booleans.
+
+2008-06-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/console.c, libmisc/hushed.c, libmisc/yesno.c,
+ libmisc/loginprompt.c, libmisc/ttytype.c, libmisc/tz.c,
+ src/login_nopam.c, src/chpasswd.c, src/chgpasswd.c, lib/port.c:
+ The size argument of fgets is an int, not a size_t.
+ * libmisc/loginprompt.c: Ignore the return value from signal()
+ when the signal handlers are restored.
+ * src/chpasswd.c: Cast the return value of time() to a long
+ integer.
+ * src/chpasswd.c: Use the SCALE macro instead of (24L * 3600L)
+ for the values to be set in /etc/shadow.
+
+2008-06-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwck.c: Use a bool when possible instead of int integers.
+ * src/pwck.c: Avoid implicit conversion of integers to booleans.
+
+2008-06-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/su.c: Use a bool when possible instead of int integers.
+ * src/su.c: Add brackets and parenthesis.
+ * src/su.c: Avoid implicit conversion of pointers / integers
+ / chars to booleans.
+ * src/su.c: Ignore the return value of pam_end() before
+ exiting.
+ * src/su.c: Avoid assignments in comparisons.
+ * src/su.c: Avoid multi-statements lines.
+
+2008-06-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/prototypes.h, libmisc/valid.c: Change the prototype of
+ valid() to return a bool.
+ * libmisc/valid.c: Add parenthesis.
+
+2008-06-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/commonio.c: Add brackets and parenthesis.
+ * lib/commonio.c: Check the result of fgets().
+ * lib/commonio.c: Avoid implicit conversion of pointers to
+ booleans.
+
+2008-06-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/prototypes.h: Fix the prototypes to match earlier changes.
+
+2008-06-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/nscd.c: Include defines.h.
+ * lib/nscd.c: Always warn when the nscd cache cannot be flushed.
+ * lib/nscd.c: Avoid assignments in comparisons.
+ * lib/nscd.c: Ignore the return value of fputs() when printing
+ errors.
+
+2008-06-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/port.c: Add brackets and parenthesis.
+ * lib/port.c: Change isttytime() prototype to return a bool.
+ * lib/port.c: Ignore the return value of fclose () (file open
+ read-only).
+ * lib/port.c: Avoid multi-statements lines.
+
+2008-06-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/id.c: Ignore the return value of fputs(), puts(), putchar(),
+ and printf().
+ * src/id.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+ * src/id.c: Add brackets and parenthesis.
+ * src/id.c: Avoid implicit conversion of pointers / integers
+ to booleans.
+
+2008-06-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chsh.c: Use a bool when possible instead of int integers.
+ * src/chsh.c: restricted_shell() renamed is_restricted_shell().
+ check_shell() renamed shell_is_listed().
+ * src/chsh.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+ * src/chsh.c: Avoid implicit conversion of pointers / integers
+ to booleans.
+ * src/chsh.c: Ignore the return value of pam_end() before
+ exiting.
+
+2008-06-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/grpunconv.c: Use a bool when possible instead of int
+ integers.
+ * src/grpunconv.c: Add brackets and parenthesis.
+ * src/grpunconv.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+ * src/grpunconv.c: Avoid implicit conversion of pointers / integers
+ to booleans.
+
+2008-06-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/sulogin.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+ * src/sulogin.c: Avoid implicit conversion of pointers / integers
+ / chars to booleans.
+ * src/sulogin.c: Avoid assignments in comparisons.
+ * src/sulogin.c: Ignore the return value of alarm().
+
+2008-06-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groups.c: Use a bool when possible instead of int integers.
+ * src/groups.c: Add brackets and parenthesis.
+ * src/groups.c: Avoid implicit conversion of pointers / integers
+ to booleans.
+ * src/groups.c: Avoid assignments in comparisons.
+ * src/groups.c: Ignore the return value of putchar(), printf()
+ * src/groups.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+
+2008-06-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/grpconv.c: Use a bool when possible instead of int integers.
+ * src/grpconv.c: Add brackets and parenthesis.
+ * src/grpconv.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+ * src/grpconv.c: Avoid implicit conversion of pointers / integers
+ to booleans.
+
+2008-06-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/faillog.c: Use a bool when possible instead of int integers.
+ * src/faillog.c: Avoid implicit conversion of pointers / integers
+ / chars to booleans.
+ * src/faillog.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+ * src/faillog.c: Add brackets and parenthesis.
+
+2008-06-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Avoid multi-statements lines.
+ * src/login.c: Ignore the return value of pam_end() before
+ exiting.
+ * src/login.c: Use a bool when possible instead of int integers.
+ * src/login.c: Add brackets and parenthesis.
+ * src/login.c: Ignore the return values of fflush(), putchar(), puts().
+ * src/login.c: Ignore the return value of fclose() for read-only
+ files.
+ * src/login.c: Avoid assignments in comparisons.
+ * src/login.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+ * src/login.c: Avoid implicit conversion of pointers / integers
+ / chars to booleans.
+
+2008-06-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chage.c: Use a bool when possible instead of int integers.
+ * src/chage.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+
+2008-06-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupadd.c: Use a bool when possible instead of int
+ integers.
+ * src/groupadd.c: Add brackets and parenthesis.
+ * src/groupadd.c: Avoid implicit conversion of pointers / integers
+ / chars to booleans.
+ * src/groupadd.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+ * src/groupadd.c: Ignore the return value of pam_end() before
+ exiting.
+
+2008-06-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwck.c: Use a bool when possible instead of int integers.
+ * src/pwck.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+
+2008-06-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/passwd.c: Use a bool when possible instead of int integers.
+ * src/passwd.c: Avoid assignments in comparisons.
+ * src/passwd.c: Add brackets and parenthesis.
+ * src/passwd.c: Avoid implicit conversion of pointers / integers /
+ chars to booleans.
+ * src/passwd.c: Move the "context_t c" declaration at the
+ beginning check_selinux_access.
+ * src/passwd.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+
+2008-06-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmod.c: Use a bool when possible instead of int
+ integers.
+ * src/groupmod.c: Avoid assignments in comparisons.
+ * src/groupmod.c: Add brackets and parenthesis.
+ * src/groupmod.c: Avoid implicit conversion of pointers / integers
+ / chars to booleans.
+ * src/groupmod.c: Use a %lu format to print GIDs, and cast the GID
+ to (unsigned long int).
+ * src/groupmod.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+ * src/groupmod.c: Ignore the return value of pam_end() before
+ exiting.
+
+2008-06-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/su.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+
+2008-06-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: Use a bool when possible instead of int integers.
+ * src/useradd.c: Avoid implicit conversion of pointers / integers
+ / chars to booleans.
+ * src/useradd.c: Add brackets and parenthesis.
+ * src/useradd.c: Avoid assignments in comparisons.
+ * src/useradd.c: Ignore the return value of fclose() for read-only
+ files.
+ * src/useradd.c: Ignore the return value of fflush() before
+ closing the files.
+ * src/useradd.c: Avoid multi-statements lines.
+ * src/useradd.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+ * src/useradd.c: Ignore the return value of pam_end() before
+ exiting.
+
+2008-06-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/vipw.c: Use a bool when possible instead of int integers.
+ * src/vipw.c: Ignore the return value of umask(), when the mask is
+ set again to the old value.
+ * src/vipw.c: Avoid implicit conversion of pointers / integers to
+ booleans.
+ * src/vipw.c: Add brackets and parenthesis.
+ * src/vipw.c: Avoid assignments in comparisons.
+ * src/vipw.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+ * src/vipw.c: Add missing termination of the longopts parameter
+ for getopt_long().
+
+2008-06-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chgpasswd.c: Use a bool when possible instead of int
+ integers.
+ * src/chgpasswd.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+ * src/chgpasswd.c: Avoid implicit conversion of integers to
+ booleans.
+
+2008-06-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupdel.c: Use a bool when possible instead of int
+ integers.
+ * src/groupdel.c: Avoid implicit conversion of pointers / integers to
+ booleans.
+ * src/groupdel.c: Avoid assignments in comparisons.
+ * src/groupdel.c: Ignore the return value of pam_end() before
+ exiting.
+ * src/groupdel.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+
+2008-06-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/expiry.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+ * src/expiry.c: Add brackets and parenthesis.
+ * src/expiry.c: Avoid assignments in comparisons.
+ * src/expiry.c: Avoid implicit conversion of pointers to booleans.
+
+2008-06-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwunconv.c: Use a bool when possible instead of int
+ integers.
+ * src/pwunconv.c: Add brackets and parenthesis.
+ * src/pwunconv.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+ * src/pwunconv.c: Avoid implicit conversion of pointers / integers
+ / chars to booleans.
+ * src/pwunconv.c: Avoid assignments in comparisons.
+
+2008-06-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: Use a bool when possible instead of int integers.
+ * src/usermod.c: Add brackets and parenthesis.
+ * src/usermod.c: Avoid implicit conversion of pointers / integers
+ / chars to booleans.
+ * src/usermod.c: Avoid assignments in comparisons.
+ * src/usermod.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+ * src/usermod.c: Ignore the return value of pam_end() before
+ exiting.
+
+2008-06-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmems.c: Move the declaration of option_index and
+ long_options before the blocks of code.
+ * src/groupmems.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+ * src/groupmems.c: Ignore the return value of pam_end() before
+ exiting.
+
+2008-06-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chfn.c: Use a bool when possible instead of int integers.
+ * src/chfn.c: Avoid implicit conversion of integers / chars to
+ booleans.
+ * src/chfn.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+
+2008-06-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/logoutd.c: Use a bool when possible instead of int integers.
+ * src/logoutd.c: Avoid implicit conversion of pointers / integers
+ / chars to booleans.
+ * src/logoutd.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+ * src/logoutd.c: Add brackets and parenthesis.
+
+2008-06-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chpasswd.c: Use a bool when possible instead of int
+ integers.
+ * src/chpasswd.c: Avoid implicit conversion of pointers / integers
+ / chars to booleans.
+ * src/chpasswd.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+
+2008-06-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwconv.c: Use a bool when possible instead of int integers.
+ * src/pwconv.c: Add brackets and parenthesis.
+ * src/pwconv.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+ * src/pwconv.c: Avoid implicit conversion of pointers / integers /
+ chars to booleans.
+
+2008-06-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/newusers.c: Implement the -r, --system option.
+ * src/newusers.c: Use a bool when possible instead of int
+ integers.
+ * src/newusers.c: Avoid implicit conversion of pointers / integers
+ / chars to booleans.
+ * src/newusers.c: Ignore the return value of pam_end() before
+ exiting.
+ * src/newusers.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+ * src/newusers.c: Avoid multi-statements lines.
+ * src/newusers.c: Add brackets and parenthesis.
+
+2008-06-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/gpasswd.c: Use a bool when possible instead of int integers.
+ * src/gpasswd.c: Avoid implicit conversion of pointers / integers
+ / chars to booleans.
+ * src/gpasswd.c: Ignore the return value of putchar() and fflush()
+ before exiting.
+ * src/gpasswd.c: check_list() renamed is_valid_user_list(), and
+ return a bool.
+ * src/gpasswd.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+
+2008-06-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/grpck.c: Use a bool when possible instead of int integers.
+ * src/grpck.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+
+2008-06-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/lastlog.c: Use a bool when possible instead of int integers.
+ * src/lastlog.c: Avoid implicit conversion of pointers / integers
+ / chars to booleans.
+ * src/lastlog.c: Add brackets and parenthesis.
+ * src/lastlog.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+
+2008-06-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/userdel.c: Use a bool for the is_shadow_pwd, is_shadow_grp,
+ deleted_user_group, was_member, was_admin, and the
+ options' flags.
+ * src/userdel.c: Change path_prefix() prototype to return a bool.
+ * src/userdel.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+ * src/userdel.c: Ignore the return value from pam_end() since we
+ are exiting anyway just afterwards.
+ * src/userdel.c: Avoid implicit conversion of pointers /
+ integers / chars to booleans.
+ * src/userdel.c: Add brackets and parenthesis.
+ * src/userdel.c: Avoid assignments in comparisons.
+ * src/userdel.c: Do not ignore the return value of the *_unlock()
+ functions.
+
+2008-06-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login_nopam.c: Do not use the YES and NO macros. Use the
+ booleans true and false instead. Change the prototypes of
+ list_match(), user_match(), from_match(), and string_match()
+ accordingly. Also use booleans internally.
+ * src/login_nopam.c: Add brackets and parenthesis.
+ * src/login_nopam.c: Avoid implicit conversion of pointers /
+ integers / chars to booleans.
+ * src/login_nopam.c: Avoid assignments in comparisons.
+
+2008-06-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newgrp.c: Use a bool for is_newgrp, notfound, needspasswd,
+ initflag, and cflag.
+ * src/newgrp.c: Add brackets and parenthesis.
+ * src/newgrp.c: Avoid implicit conversion of pointers / integers /
+ chars to booleans.
+ * src/newgrp.c: Avoid multi-statements lines.
+ * src/newgrp.c: Ignore return value of setlocale(),
+ bindtextdomain(), and textdomain().
+ * src/newgrp.c: Avoid assignments in comparisons.
+
+2008-06-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/list.c: Change is_on_list() prototype to return a bool.
+
+2008-06-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/find_new_ids.c: Change find_new_uid() and find_new_gid()
+ prototypes to use a bool for their first argument (sys_user /
+ sys_group).
+
+2008-06-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/console.c: Change is_listed() prototype to return a bool.
+ The default parameter should also be a bool.
+ * libmisc/console.c: Add brackets and parenthesis.
+ * libmisc/console.c: Avoid assignments in comparisons.
+ * libmisc/console.c: Change console() prototype to return a bool.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/sgetspent.c: Add brackets and parenthesis.
+ * lib/sgetspent.c: Avoid assignments in comparisons.
+ * lib/sgetspent.c: Avoid implicit conversion of pointers / chars
+ to booleans.
+ * lib/sgetspent.c: Avoid multi-statements lines.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/sgetpwent.c: Avoid implicit conversion of pointers / chars to
+ booleans.
+ * lib/sgetpwent.c: Add brackets and parenthesis.
+ * lib/sgetpwent.c: Return NULL instead of 0.
+ * lib/sgetpwent.c: Do not check twice if fields[2] and fields[3]
+ are not empty.
+ * lib/sgetpwent.c: Avoid assignments in comparisons.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/getdate.y: abbrev is a bool.
+ * libmisc/getdate.y: Avoid implicit conversion of pointers / chars /
+ integers to booleans.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/prototypes.h: Fix prototypes according to earlier changes
+ (usage of the bool type).
+ * lib/prototypes.h: Add the arguments' name to the prototypes.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/groupio.h: Add protection against multiple inclusions.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/pwio.h: Add protection against multiple inclusions.
+ * lib/pwio.c: The changed, isopen, locked, and readonly fields
+ of the db are booleans.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/shadowio.h, lib/shadowio.c: spw_file_present returns a bool.
+ * lib/shadowio.h: Add protection against multiple inclusions.
+ * lib/shadowio.c: The changed, isopen, locked, and readonly fields
+ of the db are booleans.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/sgroupio.c: Avoid assignments in comparisons.
+ * lib/sgroupio.c: Add brackets.
+ * lib/sgroupio.c: Avoid implicit conversion of pointers / integers
+ to booleans.
+ * lib/sgroupio.c: The changed, isopen, locked, and readonly fields
+ of the db are booleans.
+ * lib/sgroupio.h, lib/sgroupio.c: sgr_file_present returns a bool.
+ * lib/sgroupio.h: Add protection against multiple inclusions.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/gshadow.c: nis_used and nis_bound are booleans.
+ * lib/gshadow.c: Avoid implicit conversion of pointers / integers
+ to booleans.
+ * lib/gshadow.c: Avoid assignments in comparisons.
+ * lib/gshadow.c: Add brackets.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/groupio.c: The changed, isopen, locked, and readonly fields
+ of the db are booleans.
+ * lib/groupio.h: Add protection against multiple inclusion.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/sgetgrent.c: Avoid implicit conversion of pointers / chars
+ to booleans.
+ * lib/sgetgrent.c: Avoid assignments in comparisons.
+ * lib/sgetgrent.c: Add brackets.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/encrypt.c: Avoid implicit conversion of pointers to
+ booleans.
+ * lib/encrypt.c: Add parenthesis.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/port.c: Avoid implicit conversion of pointers / integers /
+ chars to booleans.
+ * lib/port.c: Avoid multiple statement on the same line.
+ * lib/port.c: Add brackets and parenthesis.
+ * lib/port.c: Avoid assignments in comparisons.
+ * lib/port.c: Fix typo comparision -> comparison (in comment).
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/fputsx.c: Add brackets.
+ * lib/fputsx.c: Avoid assignments in comparisons.
+ * lib/fputsx.c: Avoid implicit conversion of pointers / integers /
+ chars to booleans.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/commonio.h: commonio_entry.changed, commonio_db.changed,
+ commonio_db.isopen, commonio_db.locked, and commonio_db.readonly
+ are no booleans.
+ * lib/commonio.h: Include defines.h to get the definition of bool.
+ * lib/commonio.h: commonio_present returns a bool
+ * lib/commonio.c: Implement above changes.
+ * lib/commonio.c: add argument names in prototypes.
+ * lib/commonio.c: name_is_nis returns a bool.
+ * lib/commonio.c: nscd_need_reload is a bool.
+ * lib/commonio.c: Improve types (use size_t / pid_t when needed
+ instead of int).
+ * lib/commonio.c: Avoid assignments in comparisons.
+ * lib/commonio.c: Add brackets and parenthesis.
+ * lib/commonio.c: Avoid implicit conversion of pointers / integers
+ to booleans
+ * lib/commonio.c: The return values of utime is not checked on
+ purpose.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/isexpired.c: ARGSUSED is no more needed (shadow is
+ always supported).
+ * libmisc/isexpired.c: Avoid implicit conversion of pointers to
+ booleans.
+ * libmisc/isexpired.c: Add brackets and parenthesis.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/sulog.c (sulog): The success argument is a bool.
+ * libmisc/sulog.c: The return values of fflush is not checked on
+ purpose.
+ * libmisc/sulog.c: Indicate that some return values should be
+ checked.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/ttytype.c: Avoid implicit conversion of pointers /
+ integers to booleans.
+ * libmisc/ttytype.c: Avoid assignments in comparisons.
+ * libmisc/ttytype.c: Add brackets and parenthesis.
+ * libmisc/ttytype.c: The return values of fclose is not checked on
+ purpose.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/mail.c: Avoid implicit conversion of pointers to
+ booleans.
+ * libmisc/mail.c: Avoid assignments in comparisons.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/loginprompt.c: Avoid implicit conversion of pointers /
+ chars to booleans.
+ * libmisc/loginprompt.c: Add brackets.
+ * libmisc/loginprompt.c: Avoid assignments in comparisons.
+ * libmisc/loginprompt.c: The return values of fclose and fflush
+ are not checked on purpose.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/setupenv.c: Avoid implicit conversion of chars to
+ booleans.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/copydir.c: selinux_checked, selinux_enabled, and set_orig
+ are now booleans.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/setugid.c (setup_uid_gid): The is_console argument is now
+ a bool.
+ * libmisc/setugid.c: Avoid implicit conversion of integers /
+ pointers to booleans.
+ * libmisc/setugid.c: Add brackets.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/pam_pass.c (do_pam_passwd): The silent and
+ change_expired are no booleans instead of int.
+ * libmisc/pam_pass.c: The return value of pam_end is not checked
+ on purpose.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/getlong.c: Avoid implicit conversion of pointers / chars
+ to booleans.
+ * libmisc/getlong.c: Add brackets.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/valid.c: Avoid implicit conversion of pointers / chars
+ to booleans.
+ * libmisc/valid.c: Add brackets.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/yesno.c: yes_or_no returns a bool instead of int.
+ * libmisc/yesno.c: Avoid implicit conversion of pointers to
+ booleans.
+ * libmisc/yesno.c: The return value of fflush is not checked
+ on purpose.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/age.c: Avoid implicit conversion of integers to
+ booleans.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/rlogin.c: Avoid assignments in comparisons.
+ * libmisc/rlogin.c: Avoid implicit conversion of integers to
+ booleans.
+ * libmisc/rlogin.c: Add brackets.
+
+2008-05-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/failure.c (failcheck): The failed argument is a bool.
+ * libmisc/failure.h: Likewise.
+ * libmisc/failure.c (too_many_failures): too_many_failures returns
+ a bool.
+ * libmisc/failure.c: Add notes about unchecked return values.
+ * libmisc/failure.c: Avoid assignments in comparisons.
+ * libmisc/failure.c: Add brackets.
+
+2008-05-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/myname.c: Avoid assignments in comparisons.
+ * libmisc/myname.c: Avoid implicit conversion of pointers / chars
+ to booleans.
+ * libmisc/myname.c: Add brackets.
+
+2008-05-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/utmp.c (checkutmp): Change picky argument's type to
+ bool.
+ * libmisc/utmp.c: Use bool when possible (found_utmpx,
+ found_utmp).
+ * libmisc/utmp.c: Add note about unchecked return values.
+
+2008-05-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/addgrps.c: Change type of added to bool.
+ * libmisc/addgrps.c: Avoid implicit conversion of pointers to
+ booleans.
+
+2008-05-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/hushed.c: hushed returns a bool instead of int.
+ * libmisc/hushed.c: Avoid assignments in comparisons.
+ * libmisc/hushed.c (hushed): Change type of found to bool.
+ * libmisc/hushed.c: Add brackets.
+ * libmisc/hushed.c: Always check if the user or the shell is in
+ the file. Do not check the first character of the line first. This
+ is simpler and match better with the HUSHLOGIN_FILE documentation.
+
+2008-05-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/getdef.h, lib/getdef.c: getdef_bool returns a bool instead
+ of int.
+ * lib/getdef.c: Change typo of def_loaded to bool.
+ * lib/getdef.c: Add brackets.
+ * lib/getdef.c: Avoid assignments in comparisons.
+
+2008-05-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/chowntty.c: is_my_tty returns a bool.
+ * libmisc/chowntty.c: Avoid implicit conversion of integers to
+ booleans.
+ * libmisc/chowntty.c: Add brackets.
+
+2008-05-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/chowndir.c: Avoid assignment in comparisons, implicit
+ comparison of integers to booleans.
+ * libmisc/chowndir.c: The return value of closedir is not checked
+ on purpose.
+ * libmisc/chowndir.c: Add brackets.
+
+2008-05-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/chkname.h, libmisc/chkname.c: check_group_name (resp.
+ check_user_name) renamed to is_valid_user_name (resp.
+ is_valid_group_name). is_valid_user_name and is_valid_group_name
+ return a bool.
+ * src/grpck.c, src/newusers.c, src/usermod.c, src/useradd.c,
+ src/groupmod.c, src/pwck.c, src/groupadd.c: Use is_valid_user_name
+ and is_valid_group_name, following above change.
+ * libmisc/chkname.c: Avoid implicit conversion of chars to
+ booleans. Add brackets and parenthesis.
+
+2008-05-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/xmalloc.c: Avoid implicit conversion of integers /
+ pointers to booleans.
+ * libmisc/xgetXXbyYY.c: Likewise.
+
+2008-05-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * configure.in, lib/defines.h: Allow usage of booleans in the
+ source.
+
+2008-05-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * configure.in: Allow --disable-man and --enable-man=no.
+
+2008-06-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ Prepare the 4.1.2.1 release
+ * NEWS: set the release date.
+ * man/po/*.po, po/*.po: Updated PO files.
+ * configure.in: Set the version to 4.1.2.1.
+
+2008-06-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/login.c: Fix an "audit log injection" vulnerability in
+ login. This is similar to CVE-2008-1926 (util-linux-ng's login).
+ This vulnerability makes it easier for attackers to hide
+ activities by modifying portions of log events, e.g. by appending
+ an addr= statement to the login name.
+ * lib/prototypes.h: Added definition of AUDIT_NO_ID.
+
+2008-05-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ Prepare the 4.1.2 release
+ * NEWS: set the release date.
+ * man/po/*.po, po/*.po: Updated PO files.
+ * configure.in: Set the version to 4.1.2.
+
+2008-05-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * po/Makevars, man/po/Makefile.in.in: Run msgmerge with
+ --previous. (This requires gettext >= 0.16)
+
+2008-05-24 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/copydir.c (remove_tree): As we always use remove_tree
+ followed by rmdir to remove the directory itself, delete also the
+ root directory in remove_tree.
+ * src/userdel.c, src/usermod.c: Do not call rmdir after
+ remove_tree.
+
+2008-05-24 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/copydir.c (remove_tree): Make sure unlink is successful
+ when removing files.
+
+2008-05-24 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/pwdcheck.c: Simply passwd_check since it's never used
+ when configured with PAM support.
+
+2008-05-24 Nicolas François <nicolas.francois@centraliens.net>
+
+ Fix compiler warnings:
+ * libmisc/audit_help.c: Include prototypes.h to get the prototype
+ of audit_help_open.
+ * libmisc/salt.c: Use booleans instead of negating integers.
+ * src/passwd.c: Declare the check_selinux_access prototype and
+ avoid name clashes (change_user -> changed_user; change_uid ->
+ changed_uid; access -> requested_access)
+ * libmisc/list.c: Avoid assignments in comparisons, assignments
+ with post increments (x++), use of integers as booleans, and
+ explicitly mark blocks with brackets.
+ * libmisc/fields.c: Likewise.
+ * libmisc/copydir.c: Likewise.
+ * libmisc/fields.c: Add comments.
+ * libmisc/copydir.c: Mark function whose return value is not
+ checked as such.
+
+2008-05-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/pam_pass.c: Use fputs rather than fprintf for constant
+ strings.
+
+2008-05-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/login.1.xml: Indicate that login should be executed with
+ "exec login" if called from a shell.
+
+2008-05-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/passwd.1.xml: Remove the advices for the choice of a good
+ password (they are debatable). Point to
+ http://en.wikipedia.org/wiki/Password_strength instead.
+
+2008-05-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, libmisc/salt.c (SHA_salt_size): Seed the RNG, and fix a
+ overflow. These caused the SHA salt size to always be 8 bytes,
+ instead of being in the 8-16 range. Thanks to Peter Vrabec
+ pvrabec@redhat.com for noticing.
+ * NEWS, libmisc/salt.c (SHA_salt_rounds): Seed the RNG with
+ seedRNG instead of srand, and fix the same overflow. This caused
+ the number of rounds to always be the smallest one.
+
+2008-05-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/newusers.8.xml man/groupmems.8.xml man/groupdel.8.xml
+ man/useradd.8.xml man/groupadd.8.xml man/newgrp.1.xml man/sg.1.xml
+ man/chgpasswd.8.xml man/groupmod.8.xml: Tag the section which
+ require --enable-shadowgrp accordingly.
+
+2008-05-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/login.defs.5.xml: SHA_CRYPT_MAX_ROUNDS and
+ SHA_CRYPT_MIN_ROUNDS can only exist if configured with
+ --with-sha-crypt.
+
+2008-05-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, man/useradd.8.xml: Document the -k, --skel option, and
+ update the -m, --create-home documentation.
+
+2008-05-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/useradd.8.xml: Sort options.
+
+2008-05-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/getdef.c: SHA_CRYPT_MAX_ROUNDS and SHA_CRYPT_MIN_ROUNDS can
+ only exist if configured with --with-sha-crypt.
+ * man/login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml: Likewise.
+
+2008-05-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/salt.c: Document the section closed by #endif
+
+2008-05-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: Fix formatting.
+
+2008-05-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, man/useradd.8.xml: Document the -r, --system option.
+ * NEWS, man/groupadd.8.xml: Document the -r, --system option.
+ * NEWS, man/newusers.8.xml: Document the -r, --system option.
+ * NEWS, man/newusers.8.xml: Document the -c, --crypt-method and
+ -s, --sha-rounds options.
+
+2008-05-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ Import Debian patch 487_passwd_chauthtok_failed_message
+ * libmisc/pam_pass.c: Be more verbose and indicate that the
+ password was not changed when pam_chauthtok fails (in addition to
+ the PAM error, which may not be comprehensible for the users).
+
+2008-05-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ Import Debian patch 434_login_stop_checking_args_after--
+ * NEWS, src/login.c (check_flags): Stop checking the arguments
+ after --. The later options will be sent to the shell, and do not
+ need to be checked.
+
+2008-05-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/vipw.c, src/su.c, src/newgrp.c: Harmonize the children's
+ SIGSTOP handling. Raise the signal which stopped the child instead
+ of always SIGSTOP.
+
+2008-05-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ Import Debian patch 406_vipw_resume_properly.
+ Thanks to Dean Gaudet.
+ * NEWS, src/vipw.c: Resume properly after ^Z.
+
+2008-04-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/getdef.c, lib/lockpw.c, lib/utent.c, lib/sgetgrent.c,
+ lib/getdef.h, lib/pwauth.c, lib/sgetspent.c, lib/pwauth.h,
+ lib/port.c, lib/encrypt.c, lib/groupio.c, lib/shadowmem.c,
+ lib/port.h, lib/groupio.h, lib/groupmem.c, lib/exitcodes.h,
+ lib/gshadow.c, lib/gshadow_.h, lib/sgroupio.c, lib/sgroupio.h,
+ lib/shadowio.c, lib/pwio.c, lib/sgetpwent.c, lib/commonio.c,
+ lib/faillog.h, lib/shadowio.h, lib/pwio.h, lib/pam_defs.h,
+ lib/pwmem.c, lib/commonio.h, lib/shadow.c, lib/fputsx.c,
+ lib/prototypes.h, libmisc/xmalloc.c, libmisc/limits.c,
+ libmisc/entry.c, libmisc/console.c, libmisc/ulimit.c,
+ libmisc/xgetXXbyYY.c, libmisc/chkname.c, libmisc/pwd2spwd.c,
+ libmisc/xgetpwnam.c, libmisc/basename.c, libmisc/chkname.h,
+ libmisc/chowndir.c, libmisc/audit_help.c, libmisc/chowntty.c,
+ libmisc/hushed.c, libmisc/xgetpwuid.c, libmisc/getdate.h,
+ libmisc/addgrps.c, libmisc/xgetgrgid.c, libmisc/utmp.c,
+ libmisc/myname.c, libmisc/failure.c, libmisc/find_new_ids.c,
+ libmisc/env.c, libmisc/rlogin.c, libmisc/age.c, libmisc/failure.h,
+ libmisc/xgetgrnam.c, libmisc/yesno.c, libmisc/valid.c,
+ libmisc/getlong.c, libmisc/obscure.c, libmisc/pam_pass.c,
+ libmisc/motd.c, libmisc/salt.c, libmisc/setugid.c,
+ libmisc/fields.c, libmisc/xgetspnam.c, libmisc/shell.c,
+ libmisc/copydir.c, libmisc/setupenv.c, libmisc/strtoday.c,
+ libmisc/loginprompt.c, libmisc/list.c, libmisc/pwd_init.c,
+ libmisc/log.c, libmisc/mail.c, libmisc/ttytype.c,
+ libmisc/pwdcheck.c, libmisc/sub.c, libmisc/sulog.c,
+ libmisc/isexpired.c, libmisc/tz.c, src/newgrp.c, src/userdel.c,
+ src/lastlog.c, src/grpck.c, src/gpasswd.c, src/newusers.c,
+ src/pwconv.c, src/chpasswd.c, src/logoutd.c, src/chfn.c,
+ src/groupmems.c, src/usermod.c, src/pwunconv.c, src/expiry.c,
+ src/groupdel.c, src/chgpasswd.c, src/vipw.c, src/useradd.c,
+ src/su.c, src/groupmod.c, src/passwd.c, src/pwck.c,
+ src/groupadd.c, src/nologin.c, src/chage.c, src/login.c,
+ src/suauth.c, src/faillog.c, src/grpconv.c, src/groups.c,
+ src/sulogin.c, src/grpunconv.c, src/chsh.c, src/id.c: Make sure
+ every source files are distributed with a copyright and license.
+ Files with no license use the default 3-clauses BSD license. The
+ copyright were mostly not recorded; they were updated according to
+ the Changelog. "Julianne Frances Haugh and contributors" changed
+ to "copyright holders and contributors".
+
+2008-04-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, libmisc/sulog.c: If the SULOG_FILE does not exist when an
+ su session is logged, make sure the file is created with group
+ root, instead of using the group of the caller.
+
+2008-04-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, libmisc/fields.c, src/chfn.c, man/chfn.1.xml: Allow
+ non-US-ASCII characters in the GECOS fields ("name", "room
+ number", and "other info" fields).
+
+2008-04-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/newgrp.c: Fix compilation failure when compiled with
+ audit support. Thanks to Mike Frysinger for reporting it.
+
+2008-04-16 Nicolas François <nicolas.francois@centraliens.net>
+
+ Ensure that getpwent() is used in setpwent(), getpwent(),
+ endpwend() sequences (ditto for getgrent(), getspent(), and
+ getsgent()). The only real (minor) issue was in login, which kept
+ the passwd file open.
+ * libmisc/entry.c: Remove unneeded setspent() and endspent() (only
+ getspnam is called in the middle).
+ * libmisc/find_new_ids.c: Make sure to close the password and
+ group files with endpwent() and endgrent().
+ * libmisc/pwdcheck.c: Remove unneeded endspent() (only getspnam()
+ is called before).
+ * src/lastlog.c, src/passwd.c, src/groupmod.c, src/faillog.c,
+ src/groups.c: Make sure to close
+ the password file with endpwent().
+ * src/login.c: Remove unneeded setpwent() (only xgetpwnam is
+ called before).
+ * src/login.c, src/newgrp.c: Fix typos in comments.
+
+2008-04-16 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, configure.in: Fix the detection of the audit, pam, and
+ selinux. Fail if the feature is requested but the library (or
+ header file) could not be found. If nothing is specified, enable
+ the feature only if we can find the library (or header file).
+ * configure.in: Document --with-selinux as "yes if found" rather
+ than "autodetected" for consistency with other options.
+
+2008-04-04 Mark Rosenstand <mark@borkware.net>
+
+ * NEWS, etc/pam.d/Makefile.am: Add chfn, chsh, and userdel to
+ $(pamd_files). Remove the duplicate useradd. And sort
+ alphabetically.
+
+2008-04-04 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS: Prepare next release, 4.1.2.
+
+2008-04-02 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, configure.in: Prepare release 4.1.1
+ * NEWS: Fix the release date of 4.1.0. Was in 2007, not 2008.
+
+2008-04-02 Nicolas François <nicolas.francois@centraliens.net>
+
+ * po/fr.po: Update according to the file under review.
+ Thanks to Jean-Luc Coulon.
+
+2008-04-01 Holger Wansing <linux@wansing-online.de>
+
+ * po/de.po: updated to 431t
+
+2008-03-31 Piarres Beobide <pi+debian@beobide.net>
+
+ * po/eu.po: updated to 431t
+
+2008-03-30 Leandro Azevedo <leorock182@gmail.com>
+
+ * po/pt_BR.po: updated to 360t71f
+
+2008-03-30 Mehmet Türker <mturker@innova.com.tr>
+
+ * po/tr.po: updated to 431t
+
+2008-03-30 Clytie Siddall <clytie@riverland.net.au>
+
+ * po/vi.po: updated to 431t
+
+2008-03-30 Daniel Nylander <yeager@ubuntu.com>
+
+ * po/sv.po: updated to 431t
+
+2008-03-29 helix84 <helix84@centrum.sk>
+
+ * po/sk.po: updated to 431t
+
+2008-03-27 Danilo Piazzalunga <danilopiazza@gmail.com>
+
+ * po/it.po: updated to 431t
+
+2008-03-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * TODO: Added entries regarding SE Linux.
+
+2008-03-26 Russell Coker <russell@coker.com.au>
+
+ * src/passwd.c, NEWS: Make SE Linux tests more strict, when the
+ real UID is 0 SE Linux checks will be performed.
+
+2008-03-24 Yuri Kozlov <kozlov.y@gmail.com>
+
+ * po/ru.po: updated to 431t
+
+2008-03-23 Miguel Figueiredo <elmig@debianpt.org>
+
+ * po/pt.po: updated to 431t
+
+2008-03-21 Changwoo Ryu <cwryu@debian.org>
+
+ * po/ko.po: updated to 431t
+
+2008-03-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/login.defs.5.xml: Fix manpages generation. The SYS_GID_MAX
+ and SYS_UID_MAX entities were not defined.
+
+2008-03-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/faillog.c: Fix minor compilation warning (assignment used as
+ a comparison).
+
+2008-03-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/prototypes.h, src/login.c: login_access() is used in
+ src/login.c, and defined in src/login_nopam.c (which lacks a
+ prototype). Move its prototype from src/login.c to
+ lib/prototypes.h.
+
+2008-03-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/gpasswd.c, src/groupmod.c: Compilation fix. gshadow_locked
+ should only be used if SHADOWGRP is defined.
+
+2008-03-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/grpck.c: Fix some warnings. compare_members_lists() is only
+ used if SHADOWGRP is defined.
+
+2008-03-08 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/groupmod.c: Make sure the passwd, group, and gshadow
+ files are unlocked on exit. Unlock locked files in fail_exit().
+ Prefer fail_exit() over exit().
+ * NEWS, src/groupmod.c: When the GID of a group is changed, update
+ also the GID of the passwd entries of the users whose primary
+ group is the group being modified.
+
+2008-03-08 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/commonio.c (commonio_remove): Fail when the name to be
+ removed is used by different entries (like commonio_update does).
+ * NEWS: This fix the behavior of groupdel when the system is not
+ configured to support split group but different group entries
+ have the name of the group to be deleted.
+
+2008-03-08 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/useradd.c: Make sure the passwd, group, shadow, and
+ gshadow files are unlocked on exit. Unlock locked files in
+ fail_exit(). Prefer fail_exit() over exit().
+
+2008-03-08 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/groupdel.c: Make sure the group, and gshadow files are
+ unlocked on exit. Add function fail_exit(). Use fail_exit()
+ instead of exit().
+ * src/groupdel.c: Fail immediately instead of increasing errors.
+ Better handling of error cases, like locked group or gshadow file.
+
+2008-03-08 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/newusers.c: Make sure the passwd, group, shadow, and
+ gshadow files are unlocked on exit. Add function fail_exit(). Use
+ fail_exit() instead of exit().
+
+2008-03-08 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/gpasswd.c: Make sure the group and gshadow files are
+ unlocked on exit. Add function fail_exit(). Use fail_exit()
+ instead of exit().
+
+2008-03-08 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/groupdel.c: Do not rewrite the group and gshadow file
+ in case of error.
+
+2008-03-08 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupdel.c: Do not log that the group was deleted if an
+ error occurred.
+
+2008-03-08 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/groupdel.c: Do not raise an error if the group does
+ not exist in the gshadow file.
+
+2008-03-08 Nicolas François <nicolas.francois@centraliens.net>
+
+ * etc/login.defs: Document MAX_MEMBERS_PER_GROUP.
+
+2008-03-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newgrp.c: Add missing end of line in message.
+ * src/newgrp.c: Add audit events for the authentication
+ (AUDIT_GRP_AUTH). Thansk to Peter Vrabec.
+
+2008-03-05 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/faillog.c: Only reset the entries of existing users
+ with faillog -r (not all numeric IDs starting from 0). Thanks to
+ Peter Vrabec.
+
+2008-03-05 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwunconv.c: Fix typo. One "can't open" message is a "can't
+ lock".
+
+2008-02-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/gpasswd.c: When a password is moved to the gshadow file, use
+ "x" instead of "!" to indicate that the password is shadowed
+ (consistency with grpconv).
+
+2008-02-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS: Fix failures when the gshadow file is not present. Thanks
+ to Christian Henz (http://bugs.debian.org/467488)
+ * src/gpasswd.c (get_group): Do not fail if gshadow is not present. Just use
+ the group file and set the grent structure
+ * src/gpasswd.c (check_perms): The permissions should be checked
+ using both the gshadow and group file. Add a <struct group *>
+ parameter, and check if the gshadow file exists (is_shadowgrp).
+ * src/gpasswd.c (main): Do not use sgent.sg_mem or sgent.sg_adm if
+ the gshadow file is not present (sgent is not initialized in that
+ case). The fields of sgent can be set, but not used.
+
+2008-02-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/gpasswd.c: Fix typo in comment.
+ * src/gpasswd.c: Move comment regarding FIRST_MEMBER_IS_ADMIN to
+ where it belongs.
+ * src/gpasswd.c: Indicate the end of the #ifdef FIRST_MEMBER_IS_ADMIN
+ section.
+
+2008-02-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/po/Makefile.in.in: Use --previous when merging PO files of
+ the manpages.
+
+2008-02-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/login.defs.d/SYS_UID_MAX.xml, man/login.defs.d/SYS_GID_MAX.xml:
+ Document new variables.
+ * man/newusers.8.xml, man/login.defs.5.xml,
+ man/login.defs.d/GID_MAX.xml, man/login.defs.d/UID_MAX.xml:
+ newusers uses now the GID_MAX, GID_MIN, UID_MAX, UID_MIN,
+ SYS_GID_MAX, SYS_GID_MIN, SYS_UID_MAX, and SYS_UID_MIN variables.
+ * man/groupadd.8.xml, man/login.defs.5.xml: groupadd uses now the
+ SYS_GID_MAX, and SYS_GID_MIN variables.
+ * man/login.defs.5.xml: useradd uses now the SYS_GID_MAX,
+ SYS_GID_MIN, SYS_UID_MAX, and SYS_UID_MIN variables.
+ * man/Makefile.am: Add the new XML documentation files to EXTRA_DIST.
+
+2008-02-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/getdef.c: Added missing SYS_GID_MAX, SYS_GID_MIN,
+ SYS_UID_MAX, and SYS_UID_MIN.
+
+2008-02-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/useradd.c, man/useradd.8.xml: Added options
+ --user-group (-U, Uflg) and --no-user-group (-N, Nflg) to replace
+ nflg.
+ * man/login.defs.d/USERGROUPS_ENAB.xml: useradd now also uses
+ USERGROUPS_ENAB.
+
+2008-02-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupmod.c: Add missing 'p' to the getopt_long's optstring.
+
+2008-02-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupadd.c: Add missing 'p' to the getopt_long's optstring.
+ * src/groupadd.c: Fix --non-unique's has_arg field to no_argument
+ instead of required_argument.
+ * src/groupadd.c: Add missing -p, --password description to the
+ Usage message.
+
+2008-02-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, etc/login.defs: Set GID_MIN to the same value as UID_MIN
+ by default (1000).
+ * NEWS, etc/login.defs: Added variables SYS_UID_MIN (100),
+ SYS_UID_MAX (999), SYS_GID_MIN (100), SYS_GID_MAX (999) for system
+ accounts.
+ * libmisc/find_new_ids.c: Added support for system accounts in
+ find_new_uid() and find_new_gid().
+ * NEWS, src/newusers.c, src/useradd.c, src/groupadd.c: Added new
+ option -r, --system for system accounts in useradd, groupadd, and
+ newusers.
+
+2008-02-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/groupmems.c: Fix buffer overflow when adding an user
+ to a group. Thanks to Peter Vrabec.
+
+2008-02-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, etc/useradd: Change the default HOME directory in
+ /etc/default/useradd according FHS (/home instead of /home/users).
+ This fixes Alioth's bug #310559. Thanks to Dale E. Edmons.
+
+2008-02-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/newgrp.c: Use the correct AUDIT_CHGRP_ID event instead of
+ AUDIT_USER_START, when changing the user space group ID with
+ newgrp or sg. Thanks to sgrubb@redhat.com for the patch.
+
+2008-02-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: Reset oflg with uflg if the new UID is equal to
+ the old one.
+ * src/usermod.c: Reset mflg with dflg if the new home directory is
+ the same as the old one.
+
+2008-02-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/usermod.c: Fix the handling of -a when a user is being
+ renamed (with -l). The new name of the user was used for the new
+ supplementary groups, but not in the existing ones.
+
+2008-02-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newusers.c: Set the shadow's password instead of the
+ passwd's password. Fix wrong cut&paste.
+
+2008-02-03 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: Use a function to convert the dates from
+ /etc/shadow to human readable dates.
+ * src/usermod.c: Really log the expiration date change as human
+ readable strings instead of integers.
+ * src/usermod.c: No need to check audit_fd, audit_logger() will
+ take care of this.
+
+2008-02-03 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Do not translate the fromhost variable. It is
+ always used for syslog messages.
+
+2008-02-03 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, lib/defines.h: Switch to the C locale before sending
+ messages to syslog. The messages sent by shadow were not
+ translated, but error messages from PAM returned by pam_strerror()
+ were translated in the users's locale.
+
+2008-02-03 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS: newusers will behave more like useradd.
+ * src/newusers.c: The user's ID must be found before the group ID
+ to mimic useradd's behavior choices of UID and GID.
+ * src/newusers.c: Reuse the generic find_new_uid() and
+ find_new_gid() functions. This permits to respect the
+ UID_MIN/UID_MAX and GID_MIN/GID_MAX variables, should
+ * src/newusers.c: Check if the user or group exist using the
+ external databases (with the libc getpwnam/getgrnam functions).
+ Refuse to update an user which exist in an external database but
+ does not exist in the local database.
+ * src/newusers.c: Check the usernames and groupnames with
+ check_user_name() and check_group_name()
+ * src/newusers.c: Use isdigit() for readability.
+ * src/newusers.c: Check if numerical IDs are valid (no remaining
+ chars).
+
+2008-02-03 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/newusers.c: Fix the support for the NONE crypt method.
+
+2008-02-03 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newusers.c: Fix shadow group support (the list of admins was
+ not defined; it is now set to an empty list).
+
+2008-02-03 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, libmisc/salt.c: Do not seed the random number generator
+ each time, and use the time in microseconds to avoid having the
+ same salt for different passwords generated in the same second.
+ This permits to avoid using the same salt for different passwords
+ in newusers.
+
+2008-02-03 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/pwio.c, lib/pwio.h: New function to find an user by
+ its UID on the local database.
+ * lib/groupio.c, lib/groupio.h: New function to find a group by
+ its GID on the local database.
+ * libmisc/find_new_ids.c, lib/prototypes.h: Add new generic
+ functions to find the next user or group ID available:
+ find_new_uid() and find_new_gid(). They work the same way as the
+ functions with the same name of useradd or groupadd, except that
+ they check in the local database to make sure an ID was not
+ reserved in an uncommitted change (this is needed to be used in
+ newusers), they report a status instead of calling exit(), and
+ they can receive a preferred ID. They should later support system
+ IDs. This should be a little bit slower, but not too much (if the
+ database is not open the checks against the local database will
+ exit immediately, and if it is already open, all the checks will be
+ done regarding the data in memory).
+ * po/POTFILES.in: The new libmisc/find_new_ids.c file contains
+ translatable strings.
+ * libmisc/Makefile.am: Add libmisc/find_new_ids.c to the sources
+ of the libmisc library.
+ * src/useradd.c, src/groupadd.c: Use the find_new_uid() and
+ find_new_gid() from the library instead of the local functions.
+
+2008-02-02 Nicolas François <nicolas.francois@centraliens.net>
+
+ * po/*.po: Updated PO files.
+ * libmisc/age.c, libmisc/yesno.c, src/lastlog.c, src/grpck.c,
+ src/chfn.c, src/passwd.c, src/chage.c, src/login.c, src/sulogin.c,
+ src/chsh.c: Fix call to puts (remove end of line, or use fputs).
+ * po/*.po: Unfuzzy PO files according to above change.
+
+2008-01-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ Fix build failures with --disable-shadowgrp. Thanks to Jürgen
+ Daubert for the patch.
+ * libmisc/salt.c: Include <stdio.h>, needed for stderr and printf
+ functions.
+ * lib/encrypt.c: Include <stdio.h>, needed for perror, stderr and
+ printf functions
+ * src/usermod.c: sgr_locked exists only if SHADOWGRP is defined.
+ * src/chgpasswd.c: Only check is the gshadow file exists if
+ SHADOWGRP is defined.
+
+2008-01-24 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/gpasswd.c, src/chfn.c, src/chage.c, src/chsh.c, src/grpck.c,
+ src/vipw.c, src/pwck.c, src/sulogin.c, src/newgrp.c,
+ src/userdel.c, src/lastlog.c, src/groupmems.c, src/usermod.c,
+ src/expiry.c, src/groupdel.c, src/useradd.c, src/su.c,
+ src/groupmod.c, src/passwd.c, src/groupadd.c, src/login.c,
+ src/suauth.c, src/faillog.c, src/id.c, libmisc/limits.c,
+ libmisc/addgrps.c, libmisc/env.c, libmisc/age.c, libmisc/yesno.c,
+ lib/getdef.c: Replace printf by puts for fixed strings. This would
+ avoid issues caused by formats introduced in translated strings.
+
+2008-01-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: Strings improvement s/can't get unique/no more
+ available/.
+
+2008-01-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/usermod.c: Check that the new fields set with -u, -s,
+ -l, -g, -f, -e, -d, and -c differ from the old ones. If a
+ requested new value is equal to the old one, no changes will
+ be performed for that field. If no fields are changed, usermod
+ will exist successfully with a warning. This avoids logging
+ changes to syslog when there are actually no changes.
+
+2008-01-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: Always define user_newcomment, user_newshell,
+ user_newexpire, and user_newinactive. It is more simple to always
+ have user_<x> as the old field, and user_new<x> as the new field
+ (even if the field did not change) instead of changing the
+ algorithm depending on WITH_AUDIT.
+
+2008-01-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: user_newname can only be used in WITH_AUDIT code
+ or when lflg is set. This issue was introduced in the code
+ refactoring of usermod.
+
+2008-01-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupadd.c: Fix typo in comment: s/find_new_uid/find_new_gid/
+
+2008-01-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: s/gid/GID/ in message string.
+ * src/useradd.c: Set this string for translation.
+
+2008-01-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/grpck.8.xml: Fix typo. Remove "the" from "All entries in the
+ <filename></filename> are checked [...]"
+ * man/grpck.8.xml: Conditionally include the parts mentioning the
+ gshadow file (based on SHADOWGRP).
+ * man/grpck.8.xml: Add reference to the gshadow(5) manpage
+ (conditionally included).
+
+2008-01-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/grpck.8.xml, man/pwck.8.xml: Indicate that the shadow
+ parameter is optional (i.e. a passwd file can be specified without
+ a shadow file, and the group file can be specified without the
+ gshadow file).
+
+2008-01-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/grpck.8.xml: Document the options with a list of options,
+ as in the pwck(8) manpage.
+
+2008-01-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/newgrp.c: Fix segfault when an user returns to an
+ unknown GID (either the user was deleted during the user's newgrp
+ session or the user's passwd entry referenced an invalid group).
+ Add a syslog warning in that case.
+ * src/newgrp.c: Add an end of line when reporting an invalid
+ password.
+
+2008-01-12 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/useradd.c: Fix the handling of the --defaults option
+ (it required an argument, but should behave as -D)
+ * NEWS, man/useradd.8.xml: Document the --defaults option, which
+ was already described in the useradd's Usage information.
+
+2008-01-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/passwd.c: Avoid setting the password to a const empty
+ string, but set the first char to \0. This avoids a warning.
+
+2008-01-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/salt.c: Add prototype for l64a(), gensalt(),
+ SHA_salt_size(), and SHA_salt_rounds().
+ * libmisc/salt.c: l64a() and gensalt() are static.
+ * libmisc/salt.c: The `meth' parameter of crypt_make_salt() is a
+ const. (ditto for the method variable).
+ * libmisc/salt.c: SHA_salt_rounds returns a const string.
+ * libmisc/salt.c: Avoid warnings with cast of random() to double.
+ * libmisc/salt.c: Replace rand() by random().
+
+2008-01-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/Makefile.am: Do not link libshadow.la with the intl, crypt,
+ skey and md libraries...
+ * src/Makefile.am: ...Specify for each binary which library is
+ required. skey and md are required for the binaries with
+ authentication of the user (chfn, chsh, login, passwd, su). intl
+ is required for all. mcrypt is required for user (chfn, chsh,
+ login, passwd, su, sulogin) and group (newgrp, gpasswd)
+ authentication and for the creation of passwords (chpasswd,
+ chgpasswd, gpasswd, newusers, passwd).
+
+2008-01-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/nscd.c, lib/nscd.h: Set the service parameter of
+ nscd_flush_cache() to const. This avoids a lot of warnings.
+ * lib/nscd.c: Include "nscd.h" to avoid inconsistent prototypes.
+
+2008-01-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/encrypt.c: Set the method string as a constant string.
+
+2008-01-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/port.c: Assume <errno.h> declares errno.
+
+2008-01-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/po/fr.po: Fix typo: s/rend compte indiqué/rend le compte
+ indiqué/
+
+2008-01-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/suauth.c: Remove prototype of check_su_auth(). It is
+ redundant with prototypes.h.
+ * src/suauth.c: isgrp() is static.
+
+2008-01-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/obscure.c: Tag the `old' parameter of palindrome(),
+ similar(), and simple() as unused.
+ * libmisc/loginprompt.c: Tag the `sig' parameter of login_exit()
+ as unused.
+ * src/expiry.c: Tag the `sig' parameter of catch_signals() as
+ unused.
+ * src/su.c: Tag the `sig' parameter of catch_signals() as unused.
+ * src/su.c: Add int parameter to the prototype of oldsig().
+ * src/login.c: Tag the `sig' parameter of alarm_handler() as
+ unused.
+ * src/sulogin.c: Tag the `sig' parameter of catch_signals() as
+ unused.
+ * libmisc/getdate.y: Tag the `string' parameter of yyerror() as
+ unused.
+ * libmisc/getdate.y: The string provided to yyerror() is const.
+ * libmisc/getdate.y: Fix the prototypes of yylex() and yyerror().
+
+2008-01-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/defines.h: Remove teh macro definition of SETXXENT_TYPE,
+ SETXXENT_RET, and SETXXENT_TEST. They were used by the now
+ removed pwent.c and grent.c.
+ * lib/defines.h: Remove the definition of PASSWD_PAG_FILE,
+ GROUP_PAG_FILE, SHADOW_PAG_FILE, and SGROUP_PAG_FILE. They are
+ never used.
+ * lib/defines.h: Don't include "snprintf.h". The file does not
+ exist in shadow.
+ * lib/defines.h: Add new macro unused to tag unused parameters.
+
+2008-01-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c, src/groupmems.c: Assume optarg and optind are
+ declared in <getopt.h>.
+
+2008-01-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: Remove the pw_name argument of new_pw_passwd. Use
+ the user_newname global variable instead. This avoid using a
+ parameter with the same name as a function.
+
+2008-01-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newgrp.c: Removed unused gid parameter of syslog_sg().
+ * src/newgrp.c: The loginname and tty buffers are never changed.
+ Add the const qualifier.
+
+2008-01-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chpasswd.c, src/chgpasswd.c: The crypt_method string always
+ points to a constant string. Add the const qualifier.
+
+2008-01-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwunconv.c: Remove prototype of l64a() (not used in
+ pwunconv).
+
+2008-01-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login_nopam.c: Use an ANSI prototype for resolve_hostname()
+ instead of K&R prototype.
+ * src/login_nopam.c: Fix the prototypes of list_match(),
+ user_match(), from_match(), string_match(). There were no
+ parameters in the prototypes.
+ * src/login_nopam.c: Fix the prototypes of the function parameter
+ match_fn of list_match().
+
+2008-01-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/copydir.c: Remove the src parameter of copy_special().
+ The entry's information are taken from the stat structure.
+
+2008-01-06 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/console.c, libmisc/ulimit.c, lib/sgetgrent.c,
+ lib/sgetpwent.c: Include "prototypes.h" to make
+ sure the exported prototypes are the ones used for the definition
+ of functions.
+ * lib/prototypes.h: Added prototypes for __gr_del_entry(),
+ __gr_get_db(), __gr_get_head(), __gr_set_changed(), __gr_dup(),
+ __pw_del_entry(), __pw_get_db(), __pw_get_head(), __pw_dup(),
+ sgetgrent(), sgetpwent(), __sgr_del_entry(), __sgr_dup(),
+ __sgr_get_head(), __sgr_set_changed(), __spw_get_head(),
+ __spw_del_entry(), __spw_dup().
+ * lib/prototypes.h: Removed prototype for is_listed().
+ * lib/prototypes.h: Added name of the check_su_auth()'s parameters.
+ * lib/groupio.h: Removed prototypes for __gr_dup() and
+ __gr_set_changed().
+ * lib/sgroupio.c: Removed prototypes for putsgent(), sgetsgent(),
+ and __gr_get_db().
+ * lib/sgroupio.h: Removed prototypes for __sgr_dup() and
+ __sgr_set_changed().
+ * lib/shadowio.c: Removed prototype for __pw_get_db().
+ * lib/pwio.c: Removed prototype for sgetpwent() and putpwent().
+ * lib/shadowio.h: Removed prototypes for __spw_dup() and
+ __spw_set_changed().
+ * lib/pwio.h: Removed prototypes for __pw_dup() and
+ __pw_set_changed().
+ * lib/commonio.h: Add protection against multiple inclusions.
+ * lib/prototypes.h: Include commonio.h (needed for the
+ __xx_del_entry() functions).
+ * src/grpck.c: Remove prototypes for __gr_del_entry(),
+ __gr_get_head(), __sgr_del_entry(), and __sgr_get_head().
+ * src/pwck.c: Remove prototypes for __pw_del_entry(),
+ __pw_get_head(), __spw_del_entry(), and __spw_get_head().
+ * lib/groupio.c: Remove prototype for sgetgrent().
+ * lib/groupio.c: Add the name of the parameters for
+ merge_group_entries() and split_groups().
+ * lib/groupio.h: Remove prototypes for __gr_dup() and
+ __gr_set_changed().
+
+2008-01-05 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/groupadd.8.xml, man/groupmod.8.xml: Add documentation for
+ the new --password options.
+
+2008-01-05 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: Fix find_new_gid() prototype. Add a void
+ parameter.
+
+2008-01-05 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/prototypes.h: Add the dolastlog() prototype.
+ * lib/prototypes.h: Typo: login.c -> loginprompt.c
+ * src/login.c: Remove declaration of dolastlog().
+ * lib/prototypes.h: Include <lastlog.h> for the declaration of
+ struct lastlog.
+ * lib/prototypes.h: Remove old comments in the header.
+
+2008-01-05 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/pwdcheck.c: Do not include <pwd.h>. Include <shadow.h>
+ and "pwauth.h" only when compiled without PAM support.
+ * src/chfn.c, src/chsh.c: Do not include <shadow.h>
+ * lib/commonio.c: Do not include <shadow.h>. Do not include
+ <pwd.h>. Include "nscd.h" instead of <nscd.h>.
+
+2008-01-05 Nicolas François <nicolas.francois@centraliens.net>
+
+ * configure.in: Do not check if shadow.h exist, but make sure it
+ exists.
+ * libmisc/pwdcheck.c, src/chfn.c, src/chsh.c, lib/defines.h,
+ lib/shadowmem.c, lib/shadowio.c, lib/commonio.c:
+ HAVE_SHADOW_H is no more needed (shadow.h should always exist).
+
+2008-01-05 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/groupio.c: Remove prototype of putgrent(), add parameter's
+ name of sgetgrent().
+ * lib/prototypes.h: Fix the do_pam_passwd() prototype (it returns
+ void).
+
+2008-01-05 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/groupmod.c, src/groupadd.c: Add option --password to
+ groupadd and groupmod (similar to useradd and usermod).
+
+2008-01-05 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/prototypes.h: grent.c does not exist anymore. Remove the
+ putgrent prototype.
+ * lib/prototypes.h: "shadowio.h" was included for the definition
+ of the spwd structure. Replace this include by <shadow.h>
+ * libmisc/xmalloc.c, libmisc/utmp.c, libmisc/strtoday.c,
+ libmisc/pwd_init.c, libmisc/tz.c, lib/port.c, lib/fputsx.c,
+ libmisc/pam_pass.c, libmisc/log.c: Include "prototypes.h" to make
+ sure the exported prototypes are the ones used for the definition
+ of functions.
+ * libmisc/console.c: Define is_listed() as static and add its
+ prototype.
+ * libmisc/xgetXXbyYY.c, libmisc/yesno.c: Include config.h as a
+ system include, as recommended by the autoconf documentation.
+ * src/chage.c: Define isnum() as static and add its prototype.
+ * libmisc/xgetspnam.c: Add missing include "shadowio.h". (This was
+ OK as long as prototypes.h included this file.)
+ * src/nologin.c: Make a proper prototype for the main() function
+ declaration. (add void)
+ * src/login.c: login_prompt is the name of a function, use
+ loginprompt for the internal variable.
+ * src/chsh.c: loginsh is a global variable, use newshell for the
+ update_shell()'s parameter.
+ * lib/gshadow.c: The prototypes of fgetsx() and fputsx() are
+ already defined in prototypes.h. Remove the declaration of these
+ functions.
+ * lib/gshdow.c: list() is an external function. DO not shadow it
+ with a static function. The internal list() was renamed
+ build_list().
+ * lib/commonio.c: stat shadows another stat variable. Remove this
+ variable, and directly check the result of getfscreatecon().
+ * libmisc/utmp.c: Remove the declaration of getutent(),
+ getutline(), setutent(), and endutent() which are declared in
+ <utmp.h>
+
+2008-01-01 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newgrp.c: Remove duplicate logging to syslog.
+
+2008-01-01 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newgrp.c: Avoid assignments in conditionals.
+ * src/newgrp.c: Split check_perms(), syslog_sg() out of main().
+
+2008-01-01 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/shadow.c: Avoid assignments in conditionals.
+
+2008-01-01 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/groupio.c (split_groups): Test the pointer returned by malloc.
+
+2008-01-01 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/commonio.c: Document add_one_entry_nis(), write_all(),
+ commonio_remove(), commonio_locate(), and commonio_rewind().
+
+2008-01-01 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwck.c: Avoid implicit brackets.
+ * src/pwck.c: Avoid implicit conversions to booleans.
+
+2008-01-01 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/grpck.c: Avoid implicit brackets.
+ * src/grpck.c: Avoid implicit conversions to booleans.
+
+2008-01-01 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS: No functional changes were introduced by the previous pwck
+ and grpck changes, except for the following bug fix: no syslog
+ logging if a passwd or group file was specified on the command
+ line without a shadowed database file, even if the system shadowed
+ database was changed).
+
+2008-01-01 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwck.c: Fix typos in comments (gshadow/shadow).
+
+2008-01-01 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/pwck.c: Split process_flags(), open_files(), close_files()
+ check_pw_file(), and check_spw_file() out of main(). New global
+ variables is_shadow, sort_mode, use_system_pw_file, and
+ use_system_spw_file.
+
+2008-01-01 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/xgetXXbyYY.c: De-comment code (duplicate the entry when
+ the _R function is not present on the system).
+
+2008-01-01 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/lastlog.c: Remove statbuf, not used.
+ * src/lastlog.c: Fix types, cast umin and umax to uid_t.
+ * src/lastlog.c: (option -u) user needs to be a signed long, not
+ uid_t (to accept rangees like -<uid>
+
+2008-01-01 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: Avoid ?: construct without the middle term.
+
+2008-01-01 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/copydir.c, src/usermod.c, lib/prototypes.h: The uid and
+ gid parameters can be set to -1 to indicate that the original
+ owners must be kept. Change the types from uid_t/gid_t to a
+ long int (signed).
+ * libmisc/copydir.c: Change the copy_entry(), copy_dir(),
+ copy_symlink(), copy_special(), and copy_file() prototypes
+ accordingly.
+ * lib/prototypes.h: Add the parameters' name for the
+ libmisc/copydir.c functions.
+
+2008-01-01 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/limits.c, libmisc/obscure.c, src/login_nopam.c,
+ lib/pwauth.c: Avoid empty file when USE_PAM is set.
+ * libmisc/audit_help.c: Avoid empty file when WITH_AUDIT is not set.
+ * src/login_nopam.c: Fix warnings: resolve_hostname takes and
+ returns a constant string.
+
+2008-01-01 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/grpck.c: Split process_flags(), open_files(), and
+ close_files() out of main(). New global variables is_shadow,
+ sort_mode, use_system_grp_file, and use_system_sgr_file.
+ * src/grpck.c: Split check_grp_file() and check_sgr_file() out of
+ main().
+ * src/grpck.c: Split check_members() and compare_members_lists()
+ out of check_grp_file() and check_sgr_file().
+
+2007-12-31 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/po/Makefile.in.in: If remove-potcdate.sin does not exist,
+ use the one from teh po directory (it is not installed
+ automatically by autopoint.
+
+2007-12-31 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/commonio.h: Fix the type of the bitfields in the commonio_entry
+ and commonio_db structures to unsigned int (instead of int).
+
+2007-12-31 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chsh.c: Split process_flags(), check_perms(), and update_shell()
+ out of main().
+ * src/chsh.c: Before pam_end(), the return value of the previous
+ pam API was already checked. No need to validate it again.
+ * src/chsh.c: Avoid implicit brackets.
+ * src/chsh.c: Avoid assignments in comparisons.
+
+2007-12-31 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chfn.c: New function: process_flags() split out of main().
+ The flags variables are now global.
+ * src/chfn.c: New functions: check_perms(), update_gecos(),
+ get_old_fields(), and check_fields() split out of main().
+ * src/chfn.c: Before pam_end(), the return value of the previous
+ pam API was already checked. No need to validate it again.
+ * src/chfn.c: Avoid implicit brackets.
+ * src/chfn.c: Document may_change_field().
+ * src/chfn.c: Avoid implicit conversions to booleans.
+ * src/chfn.c: Avoid assignments in comparisons.
+
+2007-12-31 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newusers.c: Compilation fix for PAM support (pamh needs to be
+ global since the function split).
+ * src/chpasswd.c: Likewise.
+ * src/chgpasswd.c: Likewise.
+ * src/chpasswd.c: Avoid implicit conversions to booleans.
+
+2007-12-31 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chage.c: Fix typo: s/maximim/maximum/
+ * src/chage.c: New function: fail_exit(). Change most of the exit()
+ to a fail_exit, which makes sure the files are unlocked (new global
+ variables: pw_locked, spw_locked), the PAM transaction is ended, and
+ the failure is logged to libaudit (use a global user_name and user_uid
+ for logging).
+ * src/chage.c: Compilation fix for PAM support (pamh needs to be
+ global since the function split).
+ * src/chage.c: Document process_flags(), check_flags(), check_perms(),
+ open_files(), and close_files().
+ * src/chage.c: Split update_age() and get_defaults() out of main()
+ * src/chage.c: Drop the privileges just after opening the files.
+ * src/chage.c: Do not log to audit only if the user has an entry in
+ the shadow file.
+ * NEWS, src/chage.c (open_files): Also open the password file for
+ writing. This fix chage when the user only has a password entry (and
+ no shadow entries).
+ * src/chage.c (get_defaults): Use default values that don't change the
+ behavior of the account for the fields that are not specified when the
+ user has no shadow entry.
+
+2007-12-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupadd.c: Compilation fix for PAM support (pamh needs to be
+ global since the function split).
+ * src/groupadd.c: End the PAM transaction in fail_exit().
+ * src/groupadd.c: Document check_flags().
+
+2007-12-30 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/vipw.c: Compilation fix for non-gshadow support.
+
+2007-12-29 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/newusers.c: Added support for gshadow.
+
+2007-12-29 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/newusers.c: Do not add the new user to the group's
+ members, because the group is already the primary group of the new
+ user.
+
+2007-12-29 Nicolas François <nicolas.francois@centraliens.net>
+
+ newusers cleanups
+ * src/newusers.c: main() split in new functions: process_flags(),
+ check_flags(), check_perms(), open_files(), and close_files().
+ * src/newusers.c: Before pam_end(), the return value of the previous
+ pam API was already checked. No need to validate it again.
+ * src/newusers.c: Avoid implicit brackets.
+ * src/newusers.c: Avoid assignments in comparisons.
+ * src/newusers.c: Avoid variables with the name of a type.
+
+2007-12-29 Nicolas François <nicolas.francois@centraliens.net>
+
+ chage cleanups
+ * src/chage.c: Before pam_end(), the return value of the previous
+ pam API was already checked. No need to validate it again.
+ * src/chage.c: main() split in new functions: process_flags(),
+ check_flags(), check_perms(), open_files(), and close_files().
+ * src/chage.c: Avoid using a variable with the same name as a type.
+ * src/chage.c: Remove dead code. It was probably put here to add more
+ information to the audit_logger.
+ * src/chage.c: Avoid implicit brackets.
+ * src/chage.c: Avoid implicit conversion to booleans.
+ * src/chage.c: Avoid assignments in comparisons.
+
+2007-12-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ Same changes for chgpasswd:
+ * src/chgpasswd.c: Before pam_end(), the return value of the previous
+ pam API was already checked. No need to validate it again.
+ * src/chgpasswd.c: main() split in process_flags(), check_flags(),
+ check_perms(), open_files(), and close_files().
+ * src/chgpasswd.c: Avoid assignments in comparisons.
+ * src/chgpasswd.c: Avoid implicit brackets.
+ * src/chgpasswd.c: Fix comments to match chgpasswd (group instead of
+ user's passwords are changed).
+
+2007-12-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chpasswd.c: Before pam_end(), the return value of the previous
+ pam API was already checked. No need to validate it again.
+ * src/chpasswd.c: New functions: process_flags(), check_flags(),
+ check_perms(). Split out of main().
+ * src/chpasswd.c: Other new functions: open_files(), close_files().
+ This force flushing the password database after the password file is
+ unlocked.
+ * src/chpasswd.c: Avoid assignments in comparisons.
+ * src/chpasswd.c: Avoid implicit brackets.
+
+2007-12-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/groupadd.c (find_new_gid): A group with the specified name
+ cannot exist at that time. Remove the check.
+ * src/groupadd.c (find_new_gid): If oflg is set, gflg is also set.
+ Use (!gflg), which is clearer than (!gflg || !oflg).
+ * src/groupadd.c (find_new_gid): find_new_gid is never called when an
+ GID is specified with -g. Simplify find_new_gid accordingly.
+ * src/groupadd.c (process_flags): prefer fail_exit to exit. This avoid
+ an explicit call to audit_logger().
+ * src/groupadd.c (main): Before pam_end(), the return value of the
+ previous pam API was already checked. No need to validate it again.
+ * src/groupadd.c (main, check_perms): New function check_perms().
+ Split the validation of the user's permissions out of main()
+
+2007-12-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ src/groupadd.c cleanup
+ * src/groupadd.c (fail_exit): When compiled without AUDIT support, if
+ the return code was E_SUCCESS, fail_exit() wouldn't have exited. Fix
+ the scope of #idef WITH_AUDIT.
+ * src/groupadd.c: Avoid implicit brackets.
+ * src/groupadd.c: Split the processing and checking of options out of
+ main() (process_flags).
+ * src/groupadd.c: New function check_flags(). Split the validation of
+ options and arguments out of process_flags.
+ * src/groupadd.c: Add the parameters' names in the prototypes.
+
+2007-12-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ libmisc/copydir.c cleanup
+ * libmisc/copydir.c: Split copy_tree() in more maintainable functions:
+ copy_entry(), copy_dir(), copy_symlink(), copy_hardlink(),
+ copy_special(), and copy_file().
+ * libmisc/copydir.c: -1 is used to indicate an error, directly set err
+ to -1, instead of incrementing it, and checking if not nul at the
+ end.
+ * libmisc/copydir.c: Avoid assignments in comparisons.
+ * libmisc/copydir.c: Document selinux_file_context.
+ * libmisc/copydir.c: Avoid implicit brackets.
+ * libmisc/copydir.c: Avoid implicit conversions to booleans.
+
+2007-12-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ gpasswd cleanup
+ * src/gpasswd.c: Add argument name to the internal function
+ prototypes.
+ * src/gpasswd.c: Document global variables.
+ * src/gpasswd.c: New function: process_flags(). Split the processing
+ of options out of main().
+ * src/gpasswd.c: New functions: open_files(), close_files(),
+ update_group(). Split out from main() to simplify this (too) big
+ function.
+ * src/gpasswd.c: New functions: check_perms(), get_group(),
+ change_passwd(), check_flags(). Split out of main() to simplify main().
+ * src/gpasswd.c: Avoid implicit brackets.
+ * src/gpasswd.c: Avoid assignments in comparisons.
+ * src/gpasswd.c: Avoid implicit conversions to booleans.
+
+2007-12-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ Merge Debian's patch 462_warn_to_edit_shadow
+ * NEW, src/vipw.c: Recommend editing the shadowed (resp. regular) file
+ if the regular (resp. shadowed) file was edited.
+
+2007-12-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ Merge Debian's patch 451_login_PATH
+ * NEWS, libmisc/setupenv.c: Export PATH according to ENV_PATH and
+ ENV_SUPATH, as for su. This impacts login.
+ * man/login.1.xml: PATH and SUPATH are now used both when PAM support
+ is disabled and enabled.
+
+2007-12-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ Merge Debian's patch 496_login_init_session
+ * src/login.c, src/sulogin.c: If started as init, start a new session.
+
+2007-12-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ Merge Debian's patch 408_passwd_check_arguments
+ * NEWS, src/passwd.c: Make sure that no more than one username
+ argument was provided.
+
+2007-12-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ Merge Debian's patch 412_lastlog_-u_numerical_range
+ * NEWS, src/lastlog.c, man/lastlog.8.xml: Accept numerical user, or
+ ranges with the -u option.
+
+2007-12-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ Merge Debian's patch 466_fflush-prompt
+ * libmisc/Makefile.am, lib/prototypes.h, libmisc/yesno.c, src/grpck.c,
+ src/pwck.c: move yes_or_no() from grpck/pwck to a separate
+ libmisc/yesno.c (with a read_only argument).
+ * libmisc/fields.c, libmisc/yesno.c: Make sure stdout is flushed before
+ reading the user's answer.
+
+2007-12-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ Merge Debian's patch 480_getopt_args_reorder
+ * NEWS, src/su.c: su's arguments are now reordered.
+
+2007-12-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ Merge RedHat's patch shadow-4.0.18.1-mtime.patch:
+ * NEWS: Document that usermod will now preserve user's file modification
+ and access time.
+ * libmisc/copydir.c: Preserve the access and modification time of copied
+ files. This is important for usermod. This will also impact useradd, for
+ the skeleton files, but this is not important.
+ * libmisc/copydir.c: Stop and return an error if a file could not be
+ closed after during a copy.
+
+2007-12-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ Cleanups:
+ * src/useradd.c (find_new_gid): Check that gflg is not set (assert).
+ * src/useradd.c (find_new_gid): Do not check the group name uniqueness
+ (already checked in main).
+ * src/useradd.c (find_new_gid): Avoid a "continue" in the loop.
+ * src/useradd.c (find_new_gid): Remove irrelevant comments.
+ * src/useradd.c (find_new_gid): Fix the function definition's comment.
+
+2007-12-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ Merge RedHat's patch shadow-4.0.18.1-findNewUidOnce.patch:
+ * src/useradd.c (usr_update): Do not call find_new_uid(). The UID was
+ already either specified or found by another call to find_new_uid().
+ * src/useradd.c (find_new_uid): Always start with uid_min (find_new_uid()
+ is never called when user_id was already specified).
+ * src/useradd.c (find_new_uid): Fix the comments (find_new_uid() is not
+ called when the UID is specified (uflg)).
+ * src/useradd.c (main): Only call find_new_uid() if (!oflg) and (!uflg).
+ If uflg is set (but not oflg), check the UID uniqueness.
+ * src/useradd.c (find_new_uid): Don't check the uid and user name
+ uniqueness in find_new_uid(). The user name uniqueness is already checked
+ during the parameter validation. UID uniqueness is also checked (see
+ above).
+ * src/useradd.c (find_new_uid): Don't check uflg in find_new_uid().
+ * src/useradd.c (find_new_uid): Make sure that find_new_uid() is not
+ called when uflg is set (assert).
+
+2007-12-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ Merge RedHat's patch shadow-4.1.0-lOption.patch
+ * NEWS, src/useradd.c, man/useradd.8.xml: Add option -l to avoid adding
+ the user to the lastlog and faillog databases.
+
+2007-12-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c, src/groupadd.c: NO_GETPWENT is no more supported. Remove
+ associated chunks of code.
+
+2007-12-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/groupadd.8.xml: Document the long options (--force, --gid, --key,
+ --non-unique).
+
+2007-12-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ Merge RedHat's patch shadow-4.0.3-noinst.patch
+ * NEWS, lib/Makefile.am: Do not install the shadow library per default.
+ lib_LTLIBRARIES changed to noinst_LTLIBRARIES.
+
+2007-12-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, configure.in: Prepare the 4.1.0 release.
+
+2007-12-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/chgpasswd.c: Use chgpasswd PAM policy file instead of
+ chpasswd's one.
+
+2007-12-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/pwconv.8.xml: Fix typos.
+ * man/chpasswd.8.xml, man/chgpasswd.8.xml: Document the NONE crypt
+ method.
+ * man/login.defs.d/MAIL_DIR.xml: Add comment regarding useradd not
+ using MAIL_FILE.
+ * man/login.defs.d/ERASECHAR.xml, man/login.defs.d/KILLCHAR.xml,
+ man/login.defs.d/CONSOLE_GROUPS.xml, man/login.defs.d/ENV_HZ.xml,
+ man/login.defs.d/ENV_PATH.xml, man/login.defs.d/ENV_SUPATH.xml:
+ These variables are also used by some tools when compiled with PAM
+ support.
+ * man/login.defs.d/ENV_HZ.xml: Add note that it is only used by
+ sulogin when compiled with PAM support.
+ * man/login.defs.d/ENV_SUPATH.xml: Typos: ENV_PATH -> ENV_SUPATH,
+ and mention sbin in the path.
+ * man/login.defs.d/LOGIN_STRING.xml: Fix typo: confition ->
+ condition.
+ * man/sg.1.xml: Add CONFIGURATION section (SYSLOG_SG_ENAB).
+ * man/su.1.xml: ENV_HZ, LOGIN_STRING, MAIL_DIR, USERGROUPS_ENAB
+ are only used when su is compiled without PAM support.
+ * man/login.defs.5.xml: Added variables: OBSCURE_CHECKS_ENAB
+ PASS_ALWAYS_WARN PASS_CHANGE_TRIES SULOG_FILE SU_NAME
+ SU_WHEEL_ONLY SYSLOG_SG_ENAB SYSLOG_SU_ENAB.
+ * man/login.defs.5.xml: ENVIRON_FILE is only used when compiled
+ without PAM support.
+ * man/login.defs.5.xml: sulogin uses variables even when compiled
+ with PAM support.
+ * man/login.1.xml: ENV_HZ ENV_PATH ENV_SUPATH MAIL_DIR UMASK are
+ only used when login is not compiled with PAM support.
+
+2007-12-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Make sure is_console is only defined when USE_PAM
+ is not defined.
+
+2007-12-09 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/pwd2spwd.c: Fix time() prototype.
+
+2007-12-08 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/login.defs.d/CONSOLE_GROUPS.xml,
+ man/login.defs.d/CONSOLE.xml, man/login.defs.d/DEFAULT_HOME.xml,
+ man/login.defs.d/ENV_HZ.xml, man/login.defs.d/ENVIRON_FILE.xml,
+ man/login.defs.d/ENV_PATH.xml, man/login.defs.d/ENV_SUPATH.xml,
+ man/login.defs.d/ENV_TZ.xml, man/login.defs.d/ERASECHAR.xml,
+ man/login.defs.d/FAIL_DELAY.xml,
+ man/login.defs.d/FAILLOG_ENAB.xml,
+ man/login.defs.d/FAKE_SHELL.xml, man/login.defs.d/FTMP_FILE.xml,
+ man/login.defs.d/HUSHLOGIN_FILE.xml,
+ man/login.defs.d/ISSUE_FILE.xml, man/login.defs.d/KILLCHAR.xml,
+ man/login.defs.d/LASTLOG_ENAB.xml, man/login.defs.d/LOGIN_RETRIES.xml,
+ man/login.defs.d/LOGIN_TIMEOUT.xml, man/login.defs.d/LOG_OK_LOGINS.xml,
+ man/login.defs.d/LOG_UNKFAIL_ENAB.xml,
+ man/login.defs.d/MAIL_CHECK_ENAB.xml, man/login.defs.d/MOTD_FILE.xml,
+ man/login.defs.d/NOLOGINS_FILE.xml,
+ man/login.defs.d/OBSCURE_CHECKS_ENAB.xml,
+ man/login.defs.d/PASS_ALWAYS_WARN.xml,
+ man/login.defs.d/PASS_CHANGE_TRIES.xml,
+ man/login.defs.d/PASS_MAX_LEN.xml,
+ man/login.defs.d/PORTTIME_CHECKS_ENAB.xml,
+ man/login.defs.d/QUOTAS_ENAB.xml, man/login.defs.d/SULOG_FILE.xml,
+ man/login.defs.d/SU_NAME.xml, man/login.defs.d/SU_WHEEL_ONLY.xml,
+ man/login.defs.d/SYSLOG_SG_ENAB.xml,
+ man/login.defs.d/SYSLOG_SU_ENAB.xml,
+ man/login.defs.d/TTYGROUP.xml, man/login.defs.d/TTYTYPE_FILE.xml,
+ man/login.defs.d/ULIMIT.xml, man/login.defs.d/USERGROUPS_ENAB.xml:
+ New documentation of login.defs variables.
+ * man/login.defs.d/MAIL_DIR.xml: Updated. It now contains the
+ MAIL_FILE documentation.
+ * man/login.defs.d/LOGIN_STRING.xml: Updated. Mentions %s.
+ * man/pwconv.8.xml, man/groupmems.8.xml, man/groupdel.8.xml,
+ man/useradd.8.xml, man/pwck.8.xml, man/groupadd.8.xml,
+ man/sulogin.8.xml, man/newgrp.1.xml, man/usermod.8.xml,
+ man/su.1.xml, man/vipw.8.xml, man/passwd.1.xml,
+ man/groupmod.8.xml, man/login.1.xml, man/userdel.8.xml,
+ man/grpck.8.xml: Added CONFIGURATION section.
+ * man/generate_mans.mak: The generations of manpages depends on
+ the variables from the Makefiles. Add the dependency on Makefile.
+ * man/login.defs.5.xml: New login.defs variable documented.
+ * man/Makefile.am: Added XML variable documentation to the
+ distributed files.
+
+2007-12-05 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/gshadow.5.xml: Fix the newgrp section in the gshadow.5
+ manpage. Thanks to Andre Majorel <aym-naibed@teaser.fr>.
+
+2007-11-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/Makefile.am: Added the login.defs variables description to
+ the man's EXTRA_DIST.
+
+2007-11-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/chfn.1.xml: Uses CHFN_AUTH, CHFN_RESTRICT, LOGIN_STRING.
+ * man/chgpasswd.8.xml: Uses ENCRYPT_METHOD, MAX_MEMBERS_PER_GROUP,
+ MD5_CRYPT_ENAB, SHA_CRYPT_MIN_ROUNDS (SHA_CRYPT_MAX_ROUNDS).
+ * man/chpasswd.8.xml: Switch to using entities for ENCRYPT_METHOD,
+ MD5_CRYPT_ENAB, SHA_CRYPT_MIN_ROUNDS (SHA_CRYPT_MAX_ROUNDS).
+ * man/chsh.1.xml: Uses CHSH_AUTH, LOGIN_STRING.
+ * man/expiry.1.xml: Does not use any login.defs parameter.
+ * man/gpasswd.1.xml: Uses ENCRYPT_METHOD, MAX_MEMBERS_PER_GROUP,
+ MD5_CRYPT_ENAB, SHA_CRYPT_MIN_ROUNDS.
+ * man/login.defs.5.xml: Added CHSH_AUTH.
+ * man/login.defs.5.xml: Cross reference -> cross references.
+ * man/login.defs.5.xml: chfn only uses CHFN_AUTH when no_pam.
+ * man/login.defs.5.xml: chsh uses CHSH_AUTH, not CHFN_AUTH.
+ * man/login.defs.d/CHSH_AUTH.xml: Added.
+ * man/login.defs.5.xml: chsh uses parameters only when no_pam.
+ * man/login.defs.5.xml: expiry does not use CONSOLE_GROUPS, even
+ if linked in the binary.
+ * man/newusers.8.xml: Uses ENCRYPT_METHOD, MAX_MEMBERS_PER_GROUP,
+ MD5_CRYPT_ENAB, PASS_MAX_DAYS, PASS_MIN_DAYS, PASS_WARN_AGE,
+ SHA_CRYPT_MIN_ROUNDS, UMASK.
+
+2007-11-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/generate_translations.mak, man/po/Makefile.in.in: Add
+ --expand-all-entities to the call to xml2po to avoid translating
+ the external entities separately.
+
+2007-11-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/login.defs.d/, man/login.defs.d/CHFN_RESTRICT.xml,
+ man/login.defs.d/MAIL_DIR.xml, man/login.defs.d/PASS_MAX_DAYS.xml,
+ man/login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml,
+ man/login.defs.d/CHFN_AUTH.xml, man/login.defs.d/MD5_CRYPT_ENAB.xml,
+ man/login.defs.d/PASS_WARN_AGE.xml, ·man/login.defs.d/UMASK.xml,
+ man/login.defs.d/PASS_MIN_DAYS.xml, man/login.defs.d/UID_MAX.xml,
+ man/login.defs.d/LOGIN_STRING.xml, man/login.defs.d/GID_MAX.xml,
+ man/login.defs.d/ENCRYPT_METHOD.xml, man/login.defs.d/USERDEL_CMD.xml,
+ man/login.defs.d/MAX_MEMBERS_PER_GROUP.xml, man/login.defs.5.xml:
+ Put each variable description in an external entities. This will permit
+ to reference them in the various utils manpages.
+ * man/login.defs.5.xml: Describe the usage of variables by each
+ tools when compiled without PAM support.
+
+2007-11-26 Nicolas François <nicolas.francois@centraliens.net>
+
+ * po/stats: Do not generate gmo files.
+
+2007-11-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/po/LINGUAS: Added missing LINGUAS.
+ * man/po/de.po, man/po/fr.po, man/po/it.po, man/po/pl.po,
+ man/po/ru.po, man/po/sv.po: Updated.
+
+2007-11-25 Nicolas François <nicolas.francois@centraliens.net>
+
+ * configure.in, man/po/Makefile.in.in, man/po/Makevars,
+ man/po/POTFILES.in, man/Makefile.am: Generate the PO files for the
+ manpages in the man/po directory (instead of man/<lang>). Use a
+ Makefile.in.in based on gettext's one. This ensure that the PO are
+ generated before being used in the <lang> directories.
+ * man/generate_mans.mak, man/generate_translations.mak,
+ man/Makefile.am: New makefile for the generation of manpages from
+ XML (generate_mans.mak). This avoid duplicate chunks in
+ generate_translations.mak and Makefile.am
+ * man/de/de.po, man/fr/fr.po, man/it/it.po, man/pl/pl.po,
+ man/ru/ru.po, man/sv/sv.po: Moved to...
+ * man/po/de.po, man/po/fr.po, man/po/it.po, man/po/pl.po,
+ man/po/ru.po, man/po/sv.po: ... here.
+
+2007-11-24 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/userdel.c, src/lastlog.c, src/newusers.c, src/chpasswd.c,
+ src/usermod.c, src/chgpasswd.c, src/vipw.c, src/useradd.c,
+ src/su.c, src/groupmod.c, src/passwd.c, src/groupadd.c,
+ src/chage.c, src/faillog.c, src/chsh.c: Do not use tabulations in
+ Usage strings.
+ * po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po,
+ po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/hu.po, po/id.po,
+ po/it.po, po/ja.po, po/nb.po, po/pl.po, po/pt_BR.po, po/pt.po,
+ po/ro.po, po/ru.po, po/sk.po, po/sv.po, po/tl.po, po/tr.po,
+ po/uk.po, po/vi.po: Unfuzzy previous changes.
+ * po/bs.po, po/he.po, po/nn.po, po/sq.po: No Usage string
+ translated. Just updated PO.
+ * po/dz.po, po/km.po, po/ko.po, po/ne.po, po/nl.po, po/zh_CN.po,
+ po/zh_TW.po: It would be too error prone for me to unfuzzy these
+ ones. Updated PO. (km and ne should be reviewed: options are
+ translated).
+
+2007-11-24 Nicolas François <nicolas.francois@centraliens.net>
+
+ * po/ne.po, po/bs.po, po/cs.po, po/pt_BR.po, po/km.po, po/es.po,
+ po/eu.po, po/ko.po, po/hu.po, po/sk.po, po/vi.po, po/uk.po,
+ po/ro.po, po/sq.po, po/ru.po, po/id.po, po/nb.po, po/el.po,
+ po/gl.po, po/fr.po, po/nl.po, po/pl.po, po/nn.po, po/it.po,
+ po/dz.po, po/tl.po, po/pt.po, po/ca.po, po/da.po, po/tr.po,
+ po/sv.po, po/de.po, po/ja.po, po/zh_TW.po, po/he.po, po/fi.po,
+ po/zh_CN.po: Run "make update-po" in the po directory.
+
+2007-11-24 Nicolas François <nicolas.francois@centraliens.net>
+
+ * configure.in: New configure option: --with-sha-crypt enabled by
+ default. Keeping the feature enabled is safe. Disabling it permits
+ to disable the references to the SHA256 and SHA512 password
+ encryption algorithms from the usage help and manuals (in addition
+ to the support for these algorithms in the code).
+ * libmisc/obscure.c, libmisc/salt.c, src/newusers.c,
+ src/chpasswd.c, src/chgpasswd.c, src/passwd.c: ENCRYPT_METHOD is
+ always supported in login.defs. Remove the ENCRYPTMETHOD_SELECT
+ preprocessor condition.
+ * libmisc/obscure.c, libmisc/salt.c, src/newusers.c,
+ src/chpasswd.c, src/chgpasswd.c, src/passwd.c: Disable SHA256 and
+ SHA512 if USE_SHA_CRYPT is not defined (this corresponds to a
+ subset of the ENCRYPTMETHOD_SELECT sections).
+
+2007-11-24 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/encrypt.c: If we requested a non DES encryption, make sure
+ crypt returned a encrypted password longer than 13 chars. This
+ protects against the GNU crypt() which does not return NULL if the
+ algorithm is not supported, and return a DES encrypted password.
+
+2007-11-24 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/groupio.c: Add missing #include "getdef.h"
+
+2007-11-24 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newusers.c: Provide the crypt method to all the
+ crypt_make_salt invocations.
+ * src/newusers.c: Tag the ENCRYPTMETHOD_SELECT dependent code
+ accordingly.
+
+2007-11-24 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/salt.c: Make sure method is not NULL, defaulting to DES.
+ Thanks to Dan Kopecek <dkopecek@redhat.com>.
+ * src/chpasswd.c, src/chgpasswd.c: Do not use DES by default, but
+ the system default define in /Etc/login.defs. Thanks to Dan
+ Kopecek <dkopecek@redhat.com>.
+ * NEWS, man/chpasswd.8.xml, man/chgpasswd.8.xml: Do not mention
+ DES as the default algorithm.
+ * src/chpasswd.c, src/chgpasswd.c: Tag the ENCRYPTMETHOD_SELECT
+ dependent code accordingly.
+
+2007-11-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/salt.c: Move the srandom call to gensalt.
+ * libmisc/salt.c (gensalt): Replace the test on salt_size by an
+ assert.
+
+2007-11-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ Patch contributed by Dan Kopecek <dkopecek@redhat.com>
+ * src/chpasswd.c, src/chgpasswd.c, src/newusers.c: Fix compilation
+ when ENCRYPTMETHOD_SELECT is not defined.
+ * libmisc/salt.c (MAGNUM): The nul char was put on (array)[2]
+ instead of (array)[3].
+ * libmisc/salt.c: MAGNUM should be defined even if
+ ENCRYPTMETHOD_SELECT is not defined.
+ * libmisc/salt.c: Use random instead of rand.
+ * libmisc/salt.c (gensalt): New function to generate a salt
+ (instead of using gettimeofday).
+
+2007-11-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/newusers.c: New options -c/--crypt-method
+ -s/--sha-rounds.
+
+2007-11-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chpasswd.c: Added crypt method: NONE.
+ * src/chpasswd.c: Added --sha-rounds to the usage().
+ * libmisc/Makefile.am, libmisc/getlong.c, src/chgpasswd.c,
+ src/chpasswd.c, lib/prototypes.h: New getlong function. Replace
+ chpasswd's and chgpasswd's getnumber.
+
+2007-11-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/groupio.c: Removed unused variable 'member'.
+
+2007-11-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/chpasswd.8.xml: Document the variables used by chpasswd.
+ The definitions are copied from login.defs. I should try to use a
+ less error prone process for this.
+
+2007-11-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/login.defs.5.xml: Use <replaceable> for the values set by
+ users. (was sometimes <emphasis remap='I'>)
+ * man/login.defs.5.xml: Use <option> vor the variable names. This
+ makes the manpage much more readable.
+ * man/login.defs.5.xml (ENCRYPT_METHOD, MD5_CRYPT_ENAB,
+ SHA_CRYPT_MIN_ROUNDS, SHA_CRYPT_MAX_ROUNDS): Mention that command
+ line option may supersede the system setting.
+ * man/login.defs.5.xml: Document the variables used by chpasswd
+ and chgpasswd.
+
+2007-11-23 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/shadowmem.c, lib/groupmem.c, lib/pwmem.c:
+ svn propset svn:keywords Id
+
+2007-11-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, lib/getdef.c, man/login.defs.5.xml: New login.defs
+ variable: MAX_MEMBERS_PER_GROUP. Used for the split groups support.
+ * lib/commonio.c, lib/commonio.h: Add an open_hook and close_hook
+ operation. They are called after the database is actually opened
+ and parse, or before it is closed.
+ * lib/groupio.c: Add an open_hook to merge split groups, and an
+ close group to split groups if MAX_MEMBERS_PER_GROUP is set.
+ This fixes gpasswd and chgpasswd when split groups are used.
+ * lib/sgroupio.c, lib/shadowio.c, lib/pwio.c: No open or close
+ hooks for these databases. (unsure about what should be the gshadow
+ behavior for split groups)
+
+2007-11-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/gpasswd.c: Read the group and shadow groups using
+ gr_locate and sgr_locate. gpasswd write in the file database. Thus
+ it should read information from the file database, not using
+ getgrnam. The change to sgr_locate is just for consistency. This
+ requires opening the group databases (read only) using
+ gr_open/sgr_open.
+
+2007-11-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * configure.in: SHADOWGRP added to AM_CONDITIONAL for the
+ generation of manpages.
+ * man/generate_translations.mak: Added pam/no_pam condition (like
+ in man/Makefile.am).
+ * man/Makefile.am, man/generate_translations.mak: Added
+ gshadow/no_gshadow condition.
+ * man/gpasswd.1.xml: Use the gshadow/no_gshadow condition to
+ change the manpage depending on the shadow group support.
+ * NEWS: Indicate that manpages should be re-generated if configure
+ option are changed, due to conditions.
+
+2007-11-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * po/ru.po: Updated to 399t. Thanks to Yuri Kozlov <kozlov.y@gmail.com>.
+ * man/po/ru.po: Updated to 757t. Thanks also to Yuri Kozlov
+ <kozlov.y@gmail.com>.
+
+2007-11-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/Makefile.am: Add support for conditionally including
+ paragraphs. (e.g. to support the documentation of PAM and !PAM
+ features).
+
+2007-11-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/newusers.8.xml: Added /etc/gshadow, /etc/group, /etc/shadow,
+ and /etc/passwd to section FILES.
+ * man/newusers.8.xml: Mentions that PAM is not used to set the
+ passwords.
+ * man/chpasswd.8.xml: Added section FILES (/etc/passwd,
+ /etc/shadow, /etc/login.defs).
+ * man/chpasswd.8.xml: Use the same paragraph as in newusers.8.xml
+ to indicate that PAM is not used.
+ * man/chgpasswd.8.xml: Added section FILES (/etc/group,
+ /etc/gshadow, /etc/login.defs).
+
+2007-11-21 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newusers.c: Try harder to get the GID equal to the UID.
+ This was not the case when the GID is not specified, and a GID
+ exist with an ID higher than the all the UIDs.
+ * src/newusers.c: Typo in comment: contrained -> constrained.
+
+2007-11-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chgpasswd.c: If the shadow group file is not present, do not
+ try to locate the group entry from /etc/gshadow, and set the
+ password in /etc/group.
+
+2007-11-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/obscure.c, libmisc/salt.c, src/passwd.c: Match DES, MD5,
+ SHA256, and SHA512 exactly (not only the first 3/6 chars).
+ * libmisc/salt.c (SHA_salt_rounds): Set rounds to the specified
+ prefered_rounds value, if specified.
+ * src/gpasswd.c, libmisc/salt.c: Fix compilation warnings (use
+ size_t for lengths).
+ * src/chpasswd.c, src/chgpasswd.c: Add missing parenthesis.
+
+2007-11-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/sv, man/de, man/fr, man/pl, man/ru, man/it: Ignore the
+ generated manpages. Add *.[1358] to the svn:ignore property.
+
+2007-11-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/chgpasswd.c, src/chpasswd.c: The -c, -e, and -m options are
+ exclusives.
+
+2007-11-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/chpasswd.8.xml, man/chgpasswd.8.xml: Document how the
+ encryption algorithm is chosen for the passwords. Document the new
+ -c and -s options. Add a reference to login.defs(5).
+ * man/login.defs.5.xml: Document the ENCRYPT_METHOD,
+ MD5_CRYPT_ENAB, SHA_CRYPT_MIN_ROUNDS, and SHA_CRYPT_MAX_ROUNDS
+ variables.
+ * etc/login.defs: Indicate that MD5_CRYPT_ENAB is deprecated.
+ Document the relationship with PAM for MD5_CRYPT_ENAB and
+ ENCRYPT_METHOD.
+
+2007-11-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/passwd.c: Increase the size of crypt_passwd from 128 to 256
+ to avoid overflow in case of SHA512 (161 should be sufficient).
+
+2007-11-20 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/prototypes.h, libmisc/salt.c: Add parameters to
+ crypt_make_salt to force the crypt method and number of rounds.
+ * libmisc/salt.c: Add parameter to SHA_salt_rounds to force the
+ number of rounds.
+ * libmisc/salt.c, lib/getdef.c: ENCRYPT_METHOD and MD5_CRYPT_ENAB
+ are needed also when USE_PAM (e.g. for chpasswd).
+ * src/passwd.c, src/newusers.c, src/gpasswd.c: Use the new
+ crypt_make_salt prototype
+ * src/chpasswd.c, src/chgpasswd.c: Add option -c, --crypt-method
+ and -s, --sha-rounds to specify the crypt method and number of
+ rounds in case of one of the SHA methods. The new prototype of
+ crypt_make_salt simplifies the handling of -m, --md5.
+
+2007-11-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/salt.c: The salt has a random size (between 8 and 16
+ bytes).
+ * lib/getdef.c, etc/login.defs: Add definitions for
+ SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS.
+ * libmisc/salt.c: Use SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS
+ to add a random number of rounds if needed.
+
+2007-11-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/salt.c (MAGNUM): Terminate the array with nul (the array
+ is then used with strcat).
+ * libmisc/salt.c (crypt_make_salt): Initialize result[0] to nul at
+ the beginning (was not initialized when USE_PAM).
+ * libmisc/salt.c (crypt_make_salt): Check that ENCRYPT_METHOD is a
+ valid crypt method.
+
+2007-11-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, libmisc/obscure.c, libmisc/salt.c, src/passwd.c,
+ lib/getdef.c, etc/login.defs: Add support for SHA256 and SHA512
+ encrypt methods. Apply RedHat's patch shadow-4.0.18.1-sha256.patch.
+ Thanks to Peter Vrabec. Hardly no changes except re-indent and
+ changes related to recent modifications (max_salt_len in
+ crypt_make_salt). Changes in lib/defines.h not applied (definition
+ of ENCRYPTMETHOD_SELECT). I will add a configure check or flag.
+
+2007-11-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/de/Makefile.am: Add su.1 to the generated manpages.
+ * man/fr/Makefile.am: Add id.1 to EXTRA_DIST. It will be
+ generated.
+ * man/pl/Makefile.am: Add groupmems.8 to the generated manpages.
+ * man/it/Makefile.am: Add logoutd.8 to EXTRA_DIST. It will be
+ generated.
+ * man/de/su.1, man/fr/id.1, man/pl/groupmems.8, man/it/logoutd.8:
+ Removed, since auto-generated.
+
+2007-11-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ Fix some compilation warnings:
+ * src/login.c: "dereferencing type-punned pointer will break
+ strict-aliasing rules", add a variable indirection: ptr_pam_user.
+ * lib/commonio.c: do not initialize the sb stat structure.
+ * lib/pwio.c, lib/shadowio.c, lib/sgroupio.c, lib/groupio.c:
+ initialize the security context if WITH_SELINUX.
+ * lib/nscd.c: The service argument is not const (used in the exec*
+ parameters). This matches with the prototype definition.
+ * src/groupmems.c: Avoid ++i when i is also used in the same line.
+ * src/newusers.c: i is positive every time it is compared. Add
+ cast to unsigned int.
+ * src/nologin.c: Use a main() prototype with no arguments.
+ * libmisc/getdate.y: Initialize the type and value fields of the
+ terminating entry for each TABLE.
+ * libmisc/tz.c: Use "TZ=CST6CDT" as the default timezone.
+
+2007-11-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/pl/Makefile.am: Add getspnam.3 to EXTRA_DIST since it is
+ generated with shadow.3.
+ * man/generate_translations.mak: Clean all the manpages, based on
+ $(EXTRA_DIST), not $(man_MANS).
+
+2007-11-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/sv/getspnam.3, man/sv/faillog.5, man/sv/faillog.8,
+ man/sv/grpconv.8, man/sv/chsh.1, man/sv/shadow.3,
+ man/sv/grpunconv.8, man/sv/shadow.5, man/sv/newgrp.1,
+ man/sv/limits.5, man/sv/gpasswd.1, man/sv/sg.1, man/sv/userdel.8,
+ man/sv/lastlog.8, man/sv/login.access.5, man/sv/grpck.8,
+ man/sv/chfn.1, man/sv/expiry.1, man/sv/newusers.8,
+ man/sv/chpasswd.8, man/sv/pwconv.8, man/sv/logoutd.8,
+ man/sv/groupmems.8, man/sv/usermod.8, man/sv/pwunconv.8,
+ man/sv/su.1, man/sv/groupdel.8, man/sv/chgpasswd.8,
+ man/sv/login.defs.5, man/sv/vipw.8, man/sv/useradd.8,
+ man/sv/gshadow.5, man/sv/passwd.1, man/sv/groupmod.8,
+ man/sv/passwd.5, man/sv/chage.1, man/sv/porttime.5,
+ man/sv/login.1, man/sv/pwck.8, man/sv/nologin.8,
+ man/sv/groupadd.8, man/sv/suauth.5, man/sv/vigr.8,
+ man/sv/groups.1, man/de/passwd.1, man/de/newgrp.1, man/de/chsh.1,
+ man/de/passwd.5, man/de/login.1, man/de/vipw.8, man/de/chfn.1,
+ man/de/vigr.8, man/de/groups.1, man/fr/getspnam.3,
+ man/fr/faillog.5, man/fr/faillog.8, man/fr/grpconv.8,
+ man/fr/chsh.1, man/fr/shadow.3, man/fr/grpunconv.8,
+ man/fr/shadow.5, man/fr/newgrp.1, man/fr/limits.5,
+ man/fr/gpasswd.1, man/fr/sg.1, man/fr/userdel.8,
+ man/fr/login.access.5, man/fr/lastlog.8, man/fr/grpck.8,
+ man/fr/chfn.1, man/fr/expiry.1, man/fr/newusers.8,
+ man/fr/chpasswd.8, man/fr/pwconv.8, man/fr/logoutd.8,
+ man/fr/usermod.8, man/fr/pwunconv.8, man/fr/su.1,
+ man/fr/groupdel.8, man/fr/login.defs.5, man/fr/vipw.8,
+ man/fr/useradd.8, man/fr/gshadow.5, man/fr/passwd.1,
+ man/fr/groupmod.8, man/fr/passwd.5, man/fr/porttime.5,
+ man/fr/chage.1, man/fr/login.1, man/fr/pwck.8, man/fr/groupadd.8,
+ man/fr/suauth.5, man/fr/vigr.8, man/fr/groups.1, man/pl/faillog.5,
+ man/pl/faillog.8, man/pl/chsh.1, man/pl/grpconv.8,
+ man/pl/grpunconv.8, man/pl/shadow.5, man/pl/newgrp.1,
+ man/pl/limits.5, man/pl/gpasswd.1, man/pl/sg.1, man/pl/userdel.8,
+ man/pl/login.access.5, man/pl/lastlog.8, man/pl/grpck.8,
+ man/pl/chfn.1, man/pl/expiry.1, man/pl/newusers.8,
+ man/pl/pwconv.8, man/pl/chpasswd.8, man/pl/logoutd.8,
+ man/pl/usermod.8, man/pl/pwunconv.8, man/pl/su.1,
+ man/pl/groupdel.8, man/pl/vipw.8, man/pl/login.defs.5,
+ man/pl/useradd.8, man/pl/passwd.1, man/pl/groupmod.8,
+ man/pl/passwd.5, man/pl/porttime.5, man/pl/chage.1,
+ man/pl/login.1, man/pl/pwck.8, man/pl/groupadd.8, man/pl/suauth.5,
+ man/pl/vigr.8, man/pl/groups.1, man/ru/getspnam.3,
+ man/ru/faillog.5, man/ru/faillog.8, man/ru/grpconv.8,
+ man/ru/chsh.1, man/ru/shadow.3, man/ru/grpunconv.8,
+ man/ru/shadow.5, man/ru/newgrp.1, man/ru/limits.5,
+ man/ru/gpasswd.1, man/ru/sg.1, man/ru/userdel.8,
+ man/ru/login.access.5, man/ru/lastlog.8, man/ru/grpck.8,
+ man/ru/chfn.1, man/ru/expiry.1, man/ru/newusers.8,
+ man/ru/chpasswd.8, man/ru/pwconv.8, man/ru/logoutd.8,
+ man/ru/groupmems.8, man/ru/usermod.8, man/ru/pwunconv.8,
+ man/ru/su.1, man/ru/groupdel.8, man/ru/chgpasswd.8,
+ man/ru/login.defs.5, man/ru/vipw.8, man/ru/useradd.8,
+ man/ru/gshadow.5, man/ru/passwd.1, man/ru/groupmod.8,
+ man/ru/passwd.5, man/ru/chage.1, man/ru/porttime.5,
+ man/ru/login.1, man/ru/pwck.8, man/ru/nologin.8,
+ man/ru/groupadd.8, man/ru/suauth.5, man/ru/vigr.8,
+ man/ru/groups.1, man/it/getspnam.3, man/it/faillog.5,
+ man/it/faillog.8, man/it/grpconv.8, man/it/chsh.1,
+ man/it/shadow.3, man/it/grpunconv.8, man/it/shadow.5,
+ man/it/newgrp.1, man/it/gpasswd.1, man/it/sg.1, man/it/userdel.8,
+ man/it/lastlog.8, man/it/grpck.8, man/it/chfn.1, man/it/expiry.1,
+ man/it/newusers.8, man/it/chpasswd.8, man/it/pwconv.8,
+ man/it/usermod.8, man/it/pwunconv.8, man/it/su.1,
+ man/it/groupdel.8, man/it/vipw.8, man/it/useradd.8,
+ man/it/passwd.1, man/it/groupmod.8, man/it/passwd.5,
+ man/it/porttime.5, man/it/chage.1, man/it/login.1, man/it/pwck.8,
+ man/it/groupadd.8, man/it/vigr.8, man/it/groups.1,
+ man/pl/shadow.3, man/pl/sulogin.8, man/pl/id.1, man/ru/sulogin.8,
+ man/ru/id.1, man/it/id.1: Remove generated translated manpages.
+ They are still distributed with the shadow tarballs.
+
+2007-11-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/pl/chgpassw.8: Remove chgpassw.8 since the real manpage
+ should be named chgpasswd.8.
+
+2007-11-19 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/vigr.8.xml: Remove file. The vigr man page is generated from
+ the vipw XML file.
+
+2007-11-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/prototypes.h, configure.in, libmisc/Makefile.am,
+ libmisc/xgetXXbyYY.c, libmisc/xgetpwnam.c, libmisc/xgetpwuid.c,
+ libmisc/xgetgrnam.c, libmisc/xgetgrgid.c, libmisc/xgetspnam.c:
+ Added functions xgetpwnam(), xgetpwuid(), xgetgrnam(),
+ xgetgrgid(), and xgetspnam(). They allocate memory for the
+ returned structure and are more robust to successive calls. They
+ are implemented with the libc's getxxyyy_r() functions if
+ available.
+ * NEWS, libmisc/limits.c, libmisc/entry.c, libmisc/chowntty.c,
+ libmisc/addgrps.c, libmisc/myname.c, libmisc/rlogin.c,
+ libmisc/pwdcheck.c, src/newgrp.c, src/login_nopam.c, src/login.c,
+ src/userdel.c, src/lastlog.c, src/grpck.c, src/gpasswd.c,
+ src/newusers.c, src/chpasswd.c, src/chfn.c, src/groupmems.c,
+ src/usermod.c, src/expiry.c, src/groupdel.c, src/chgpasswd.c,
+ src/su.c, src/useradd.c, src/groupmod.c, src/passwd.c, src/pwck.c,
+ src/groupadd.c, src/chage.c, src/login.c, src/suauth.c,
+ src/faillog.c, src/groups.c, src/chsh.c, src/id.c: Review all the
+ usage of one of the getpwnam(), getpwuid(), getgrnam(),
+ getgrgid(), and getspnam() functions. It was noticed on
+ http://bugs.debian.org/341230 that chfn and chsh use a passwd
+ structure after calling a pam function, which result in using
+ information from the passwd structure requested by pam, not the
+ original one. It is much easier to use the new xget... functions
+ to avoid these issues. I've checked which call to the original
+ get... functions could be left (reducing the scope of the
+ structure if possible), and I've left comments to ease future
+ reviews (e.g. /* local, no need for xgetpwnam */).
+ Note: the getpwent/getgrent calls should probably be checked also.
+ * src/groupdel.c, src/expiry.c: Fix typos in comments.
+ * src/groupmod.c: Re-indent.
+ * lib/Makefile.am, lib/groupmem.c, lib/groupio.c, lib/pwmem.c,
+ lib/pwio.c, lib/shadowmem.c, lib/shadowio.c: Move the __<xx>_dup
+ functions (used by the xget... functions) from the <xx>io.c files
+ to the new <xx>mem.c files. This avoid linking some utils against
+ the SELinux library.
+
+2007-11-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/pl/pl.po: Fix typo: chgpassw -> chgpasswd.
+ * man/pl/Makefile.am: Fix typo: chgpassw -> chgpasswd.
+ * man/de/de.po: groups shall not be translated (for command,
+ refname, or refentrytitle).
+
+2007-11-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Fix typo introduced while fixing
+ http://bugs.debian.org/451521 (compile fix).
+
+2007-11-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/Makefile.am: Fix typo: EXTRA_DOST -> EXTRA_DIST.
+
+2007-11-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login_nopam.c: Fix a typo in a comment.
+
+2007-11-18 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: Do not document the behavior compared to old
+ versions.
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/usermod.8.xml: Document the differences between locking an
+ account and locking a password.
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/usermod.c: Refuse to unlock an account when it would
+ result in a passwordless account. Based on Openwall's patch
+ shadow-4.0.4.1-owl-usermod-unlock.diff.
+ * NEWS, src/passwd.c: Likewise.
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/userdel.c (path_prefix): Make sure that the prefix is the
+ name of a directory (not only the beginning of a directory).
+ Openwall patch shadow-4.0.4.1-owl-userdel-path_prefix.diff.
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/newgrp.c: Do not give an indication that the group has no
+ password.
+ * src/newgrp.c: Do not only bail on syslog if the password is not
+ valid. Also give an indication to the user on stderr.
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ Fixes from Openwall patch shadow-4.0.4.1-owl-chage-drop-priv.diff:
+ * src/chage.c: Remove cleanup(). pw_lock is never called. Replace
+ cleanup(2) by spw_unlock and remove the calls to cleanup(1).
+ * src/chage.c: Remove variable pwrw. It is always set to 0. The
+ password database is always read only.
+ * src/chage.c: Make chage -l also drop the saved GID.
+ * src/chage.c: Prefer setregid/setreuid to setgid/setuid.
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ Fixes from Openwall patch shadow-4.0.4.1-alt-man.diff:
+ * man/useradd.8.xml: Indicate that the NIS caveats is also valid
+ for any external database as LDAP.
+ * man/groupadd.8.xml: Likewise.
+ * man/groupadd.8.xml: Reorder and reformat the caveats bullets.
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS: Applied Debian patch 409_man_generate_from_PO to
+ automatically generate the translated manpages from the POs.
+ * man/Makefile.am: Replace the individual rules for the generation
+ of the manpages (from XML) by a generic Makefile rule an
+ dependencies for the linked manpages.
+ * man/generate_translations.mak: Generic rules for all the
+ generated translated manpages (if ENABLE_REGENERATE_MAN).
+ * man/Makefile.am: Removed rules for all the generated translated
+ manpages.
+ * man/sv/Makefile.am, man/de/Makefile.am, man/fr/Makefile.am,
+ man/pl/Makefile.am, man/ru/Makefile.am, man/it/Makefile.am:
+ Include generate_translations.mak to handle the generated
+ translations (XML and roff files).
+ * man/Makefile.am: Translated XML files moved from the CLEANFILES
+ variable of man/Makefile.am to the various languages Makefiles.
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/chpasswd.8.xml: Document that chpasswd does not use PAM to
+ update the passwords. This fixes http://bugs.debian.org/396726.
+ Debian patch 411_chpasswd_document_no_pam.
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/su.c: Avoid terminating the PAM library in the forked
+ child. This is done later in the parent after closing the PAM
+ session. This fixes http://bugs.debian.org/412061.
+ Debian patch 405_su_no_pam_end_before_exec.
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/newgrp.1.xml: Mention sg in the newgrp manpage.
+ This fixes http://bugs.debian.org/396690.
+ Debian patch 410_newgrp_man_mention_sg.
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/passwd.c: Fix typo: the warndays option was called warning.
+ This is now warndays, as documented in the manpage and usage.
+ This fixes http://bugs.debian.org/445481.
+ Debian patch 417_passwd_warndays.
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/pwck.c: Remove the preprocessor check SHADOWPWD. The
+ variable is no more defined (and always assumed).
+ Debian patch 493_pwck_no_SHADOWPWD.
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/passwd.c, man/passwd.1.xml: -l/-u options: edit the
+ shadow account expiry field *in addition* to editing the password
+ field. This fixes http://bugs.debian.org/389183.
+ Debian patch 494_passwd_lock.
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/newgrp.c: Do not request a password when a user uses
+ newgrp to switch to her primary group.
+ This fixes http://bugs.debian.org/396691.
+ Debian patch 497_newgrp_primary_group.
+ * src/newgrp.c: Remove a comment which states otherwise.
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/login.c: Log an error if the password entry could not be
+ found (respect LOG_UNKFAIL_ENAB to avoid logging a password). This
+ fixes the Debian bug http://bugs.debian.org/451521
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/useradd.8.xml: -b documenation: Use the same notation for
+ the -d argument as in the -d documentation.
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: Allow the -b option even without the -D option.
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: Use the same error message for the below errors.
+ (option working ONLY if another is specified).
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: Make usermod -o and -u work independently of the
+ argument order.
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: Validate that two of the -L, -p, and -U options
+ are not used at the same time after the parsing of options. -U
+ used to be allowed after -p or -L, but not before.
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c: Make usermod -d and -m work independently of the
+ argument order. Thanks to Justin Pryzby <jpryzby+d@quoininc.com>
+ for the patch. This fixes http://bugs.debian.org/451518.
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, lib/nscd.c: Execute nscd -i instead of using the private
+ glibc socket to flush the nscd tables. This comes from the RedHat
+ patch shadow-4.0.16-nscd.c.
+ * lib/commonio.c: Forbid inheritance of the passwd and group files
+ to the spawed processes (like nscd). This comes from the RedHat
+ patch shadow-4.0.17-notInheritFd.patch.
+ * lib/nscd.h: Update header.
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/usermod.c (fail_exit): Add static variables pw_locked,
+ spw_locked, gr_locked, and sgr_locked to indicate which files must
+ be unlocked.
+ * src/usermod.c (open_files, close_files): Open and close the
+ group files as well as the passwd files. This permit to check if
+ the group files modification are allowed before writing the passwd
+ files.
+ * src/usermod.c (grp_update, update_gshadow, update_group): Do not
+ return a status code, but call fail_exit() in case of error. The
+ group files are no more opened and closed in update_gshadow() and
+ update_group().
+ * src/usermod.c (main): move the call to grp_update between
+ open_files and close_files.
+ * src/usermod.c: Differentiate failure to add a group entry and
+ failure to add a shadow group entry.
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/userdel.c: Differentiate failure to update a group entry and
+ failure to update a shadow group entry.
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/userdel.c, src/usermod.c, src/useradd.c: Inform the user if
+ out of memory while updating a group database.
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/usermod.c: Update the group database before flushing
+ the nscd caches.
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/userdel.c: Abort if an error is found while updating the
+ user or group database. No changes will be written in the
+ databases.
+
+2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: It is no more needed to check that the user's
+ groups are specified only once in the group file. This is checked
+ by gr_update().
+
+2007-11-16 Nicolas François <nicolas.francois@centraliens.net>
+
+ * lib/commonio.c (next_entry_by_name): New function.
+ * NEWS, lib/commonio.c (commonio_update): When an entry is updated, make
+ sure that there are no other entry with the same name. This fixes
+ an infinite loop in userdel and usermod when an (erroneous) group
+ file contains two entries with the same name.
+ (https://bugzilla.redhat.com/show_bug.cgi?id=240915)
+
+2007-11-16 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/salt.c: Make sure the salt string is terminated at the
+ right place (either 8th, or 11th position).
+ * NEWS, src/chgpasswd.c, src/chpasswd.c: The protocol + salt does
+ not need 15 chars. No need for a temporary buffer.
+ This change the fix committed on 2007-11-10. The salt provided to
+ pw_encrypt could have been too long.
+
+2007-11-16 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/fr/fr.po: Fix typo: missing / in <placeholder-1/>. This
+ caused the gpasswd title to be incomplete in the French manpage.
+
+2007-11-16 Nicolas François <nicolas.francois@centraliens.net>
+
+ * configure.in: Check if the l64a function exists instead of a64l
+ which we do not use.
+ * libmisc/salt.c: Add support for uClibc with no l64a().
+
+2007-11-16 Nicolas François <nicolas.francois@centraliens.net>
+
+ * configure.in: Check if the netdb.h header file and the innetgr
+ function exist.
+ * src/login_nopam.c, NEWS: Add support for systems with no
+ innetgr(). On those systems, username with an @ will be treated
+ like any other username (i.e. lookup in the local database for an
+ user with an @). Thanks to Mike Frysinger for the patch.
+
+2007-11-16 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/useradd.c: Indentation fix.
+
+2007-11-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/newgrp.c, NEWS: Declare the child and pid variable at the
+ beginning of a block. This fixes a compilation issue with gcc 2.95.
+ The intent is the same as Gentoo's patch shadow-4.0.12-gcc2.patch.
+
+2007-11-14 Nicolas François <nicolas.francois@centraliens.net>
+
+ * src/Makefile, NEWS: Add a suidperms variable. This should ease
+ the change of permission of suid binaries for distributors (not
+ recommended).
+
+2007-11-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * ./, libmisc/, src/, contrib/, doc/, lib/, man/, man/sv/,
+ man/de/, man/ja/, man/fi/, man/pt_BR/, man/fr/, man/pl/, man/hu/,
+ man/tr/, man/ru/, man/zh_TW/, man/id/, man/zh_CN/, man/cs/,
+ man/es/, man/ko/, man/it/, etc/, etc/pam.d/, po/: Restore the
+ ignore patterns from the previous repository.
+
+ * libmisc/*.c, libmisc/*.h, libmisc/getdate.y, shadow.spec.in,
+ src/*.c, contrib/groupmems.shar, contrib/pwdauth.c,
+ doc/README.platforms, doc/WISHLIST, doc/console.c.spec.txt,
+ lib/*.c, lib/*.h, COPYING, man/*.xml, man/sv/*.[1358],
+ man/de/*.[1358], man/ja/*.[1358], man/fi/*.[1358],
+ man/fr/*.[1358], man/pt_BR/*.[1358], man/pl/*.[1358],
+ man/hu/*.[1358], man/tr/*.[1358], man/ru/*.[1358],
+ man/zh_TW/*.[1358], man/id/*.[1358], man/zh_CN/*.[1358],
+ man/cs/*.[1358], man/es/*.[1358], man/ko/*.[1358],
+ man/it/*.[1358], etc/login.access, etc/login.defs, NEWS: Added the
+ subversion svn:keywords property (Id) for proper identification.
+
+2007-11-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/sv/sv.po, man/de/de.po, man/fr/fr.po, man/pl/pl.po,
+ man/ru/ru.po, man/it/it.po: Run "make update-po" in the man
+ directory.
+
+ * po/ne.po, po/bs.po, po/cs.po, po/pt_BR.po, po/km.po, po/es.po,
+ po/eu.po, po/ko.po, po/hu.po, po/sk.po, po/vi.po, po/uk.po,
+ po/ro.po, po/sq.po, po/ru.po, po/id.po, po/nb.po, po/el.po,
+ po/gl.po, po/fr.po, po/nl.po, po/pl.po, po/nn.po, po/it.po,
+ po/dz.po, po/tl.po, po/pt.po, po/ca.po, po/da.po, po/tr.po,
+ po/sv.po, po/de.po, po/ja.po, po/zh_TW.po, po/he.po, po/fi.po,
+ po/zh_CN.po: Run "make update-po" in the po directory.
+
+2007-11-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/newgrp.c: Don't ask for a password if there are no
+ group passwords. Just directly give up. This comes from the
+ Fedora's patch shadow-4.0.13-newgrpPwd.patch, and seems to be the
+ only part with an effect.
+
+2007-11-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/chgpasswd.c, src/chpasswd.c: Fix chpasswd and
+ chgpasswd stack overflow. Based on Fedora's
+ shadow-4.0.18.1-overflow.patch.
+
+2007-11-10 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/useradd.c: Allow non numerical group identifier to be
+ specified with useradd's -g option. Applied Debian patch
+ 397_non_numerical_identifier. Thanks also to Greg Schafer
+ <gschafer@zip.com.au>.
+
+2007-10-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * configure.in: Prepare the next release: 4.0.18.2. The gettext
+ version used for the configuration will be 0.16.
+
+2007-10-28 Nicolas François <nicolas.francois@centraliens.net>
+
+ * po/ja.po: Remove a plural form. nplurals=1 for japanese.
+ Moreover, msgstr[0] was identical to msgstr[1].
+
+2007-10-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/limits.c, man/limits.5.xml, etc/limits: Apply patch sent
+ by Justin Bronder <jsbronder@gmail.com>. See Debian bug #442334.
+ This adds support to 2 new resource limits: max nice value, and
+ max real time priority. This is only used when shadow is not
+ compiled with PAM support.
+
+2007-10-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * man/gpasswd.1.xml: Describe the options separately in the
+ OPTIONS section. Simplify the synopsis.
+
+2007-10-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * README, po/Makevars: Update contact information.
+
+2007-10-27 Christian Perrier <bubulle@debian.org
+
+ * src/newgrp.c, src/passwd.c, src/su.c:
+ No longer 'apologize' to users when they use incorrect passwords
+ Remove "Sorry" from programs display
+ Imported from Debian's patch 413_no-sorry-in-passwd and
+ 102_de-fix-sorry
+ * man/fr/fr.po: fix translation errors. Imported from Debian's
+ patch 201_fix_man_su_fr and 416_man-fr_newgrp
+ * man/it/it.po, man/Makefile.am, man/it/Makefile.am:
+ Use gettext for the Italian man pages translation. Imported from
+ Debian's patch 202_it_man_uses_gettext. Thanks to Giuseppe
+ Sacco who contributed the Italian translation.
+ * man/de/de.po: (nearly) complete German translation of man pages
+ Imported from Debian's patch 203_de-man-update. Thanks to
+ Simon Brandmair
+ * src/usermod.c: Clarify the online help of usermod for "-a"
+ Imported from Debian's patch 402-clarify_usermod_usage
+ * man/shadow.5.xml: fix spelling error. Imported from Debian's
+ patch 433_shadow.5-typo_312430
+ * src/su.c: Be up front on the origin of su and mention the GNU
+ origin. Imported from Debian's patch 438_su_GNU_origin
+
+2007-10-27 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, po/zh_CN.po: Updated Chinese translation. Imported from
+ Debian's patch 105_zh_CN. Thanks to Ming Hua for the update.
+
+2007-10-13 Tommi Vainikainen <thv+debian@iki.fi>
+
+ * NEWS, po/fi.po: Updated Finish translation (400t).
+
+2007-10-13 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/su.c: If compiled without PAM support, enforce the
+ limits from /etc/limits when one of the -, -l, or --login options
+ is set, even if called by root. Thanks to Justin Bronder.
+
+2007-10-07 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, Changelog: Convert the Changelog and NEWS files to UTF-8
+ (it was partially ISO-8859-2).
+
+2007-02-01 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, man/groupadd.8.xml, man/groupmod.8.xml, man/login.1.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml:
+ groupadd.8, groupmod.8, login.1, useradd.8, userdel.8, usermod.8: grammar
+ mistakes and other correctstions (by Schulenberg <bensberg@justemail.net>).
+
+2007-01-16 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, src/usermod.c:
+ fixed handle -a option in usermod (by Benno Schulenberg <bensberg@justemail.net>).
+
+2006-12-15 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/sv/sv.po:
+ more UTF8 fixe (by Mikael Magnusson <mikma@users.sourceforge.net>).
+
+ * man/sv/sv.po:
+ UTF8 fixes (by Mikael Magnusson <mikma@users.sourceforge.net>).
+
+2006-11-19 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/pl/Makefile.am, man/pl/chgpassw.8, man/pl/chpasswd.8, man/pl/pl.po:
+ translation chpasswd.8 and chgpassw.8 finished.
+
+2006-11-12 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/pl/pl.po: resolve fuzzy entries.
+
+ * contrib/adduser.c, contrib/groupmems.shar, po/it.po, src/groupmems.c, src/usermod.c, man/chfn.1.xml, man/chsh.1.xml, man/de/de.po, man/fr/fr.po, man/groupmems.8.xml, man/passwd.1.xml, man/pl/pl.po, man/ru/ru.po, man/shadow.3.xml, man/su.1.xml, man/sv/sv.po:
+ spelling fixes 's/super user/superuser/' (by Benno Schulenberg <bensberg@justemail.net>).
+
+ * man/sv/sv.po, man/de/de.po, man/fr/fr.po, man/pl/pl.po, man/ru/ru.po:
+ run "make update-po".
+
+ * man/newusers.8.xml, man/su.1.xml:
+ fixed wrong word, a few typos, some grammar mistakes, and puts in a comma here
+ and there for clarity (by Benno Schulenberg <bensberg@justemail.net>).
+
+ * man/pl/groupmod.8, man/pl/chage.1, man/pl/chsh.1, man/pl/lastlog.8, man/pl/vipw.8:
+ regenerated.
+
+ * man/de/de.po: run "make update-po".
+
+ * man/Makefile.am:
+ added de to LINGUAS but man/de/de.po still need many work.
+
+2006-11-04 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/useradd.c: indent code.
+
+ * NEWS, src/useradd.c:
+ improved auditing support (https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=211659).
+
+2006-11-03 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/dz.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/km.po, po/ko.po, po/nb.po, po/ne.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po:
+ run "make update-po".
+
+ * NEWS, po/nl.po:
+ updated (by cobaco (aka Bart Cornelis) <cobaco@skolelinux.no>).
+
+ * man/fr/fr.po, man/pl/pl.po, man/ru/ru.po, man/sv/sv.po:
+ "make update-po".
+
+2006-11-02 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/su.1.xml:
+ added sg(1) to the SEE ALSO section (Debian Bug#396690).
+
+2006-10-30 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/newusers.8.xml: clarify pw_gid fileld content description.
+
+ * man/it/Makefile.am, man/sv/Makefile.am:
+ s/man_nonpam/man_nopam/ (merged 498_man_nonpam_undefined Debian patch).
+
+ * po/nl.po:
+ fixed https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=212892
+
+2006-10-28 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/newusers.8.xml: there is no pw_age fileld in passwd.
+
+ * man/fr/fr.po:
+ Fix an error in the passwd.1 French translation (fixed Debian bug #395537).
+
+ * man/chfn.1.xml, man/chgpasswd.8.xml, man/chpasswd.8.xml, man/chsh.1.xml, man/expiry.1.xml, man/fr/fr.po, man/gpasswd.1.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/id.1.xml, man/login.1.xml, man/newgrp.1.xml, man/newusers.8.xml, man/nologin.8.xml, man/passwd.1.xml, man/pl/pl.po, man/pwck.8.xml, man/pwconv.8.xml, man/su.1.xml, man/sulogin.8.xml, man/sv/sv.po, man/vipw.8.xml:
+ cleanups on begin DESCRIPTION section.
+
+ * man/pl/pl.po: typos.
+
+2006-10-13 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/pl.po: cleanups.
+
+2006-10-07 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/pl/pl.po: more translations.
+
+ * NEWS:
+ UTF-8 corrections (by Benno Schulenberg <bensberg@justemail.net>).
+
+2006-10-05 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/groupdel.8.xml: added description for exit code 6.
+
+2006-08-16 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/de/de.po: copy & paste some msgid to msgstr.
+
+ * man/de/de.po:
+ kill some fuzzy (by Nicolas François <nicolas.francois@centraliens.net>).
+
+2006-08-15 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/fr/fr.po, man/pl/pl.po, man/ru/ru.po, man/sv/sv.po, man/passwd.1.xml:
+ s/change password/password change/ in passwd(1) (by Simon Brandmair <sbrandmair@gmx.net>).
+
+ * man/de/de.po:
+ initial version based on partial translations only for passwd(1) by
+ Simon Brandmair <sbrandmair@gmx.net>.
+
+ * NEWS, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/useradd.c, src/userdel.c, src/usermod.c:
+ flush nscd cashes after close /etc/{group,passwd} files.
+
+2006-08-14 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/tl.po: updated (by Eric Pareja <xenos@upm.edu.ph>).
+
+2006-08-07 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/ja.po: updated (by Takeo Nakano <nakano@webmasters.gr.jp>).
+
+2006-08-03 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/fr/Makefile.am:
+ removed whitespaces following trailing backslashes.
+
+ * NEWS, configure.in: release 4.0.18.1.
+
+ * man/Makefile.am, man/fr/Makefile.am, man/it/Makefile.am, man/ja/Makefile.am, man/pl/Makefile.am, man/ru/Makefile.am, man/sv/Makefile.am, NEWS:
+ fixed missing man pages in dist tar ball necessary on build when PAM is disabled.
+
+ * NEWS, src/groupmems.c:
+ fixed groupmems compilation when PAM is disabled (by Johannes Winkelmann <jw@smts.ch>).
+
+ * configure.in:
+ typo s/followig/following/ (by Johannes Winkelmann <jw@smts.ch>).
+
+2006-08-01 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: release date corrected.
+
+ * NEWS, src/su.c:
+ fixed set enviroment too early when using PAM, so move it to !USE_PAM
+ (patch submitted by Mike Frysinger <vapier@gentoo.org>).
+
+2006-07-30 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/fr/chage.1, man/fr/chfn.1, man/fr/chpasswd.8, man/fr/chsh.1, man/fr/expiry.1, man/fr/faillog.5, man/fr/faillog.8, man/fr/gpasswd.1, man/fr/groupadd.8, man/fr/groupdel.8, man/fr/groupmod.8, man/fr/groups.1, man/fr/grpck.8, man/fr/gshadow.5, man/fr/lastlog.8, man/fr/limits.5, man/fr/login.1, man/fr/login.access.5, man/fr/login.defs.5, man/fr/logoutd.8, man/fr/newgrp.1, man/fr/newusers.8, man/fr/passwd.1, man/fr/passwd.5, man/fr/porttime.5, man/fr/pwck.8, man/fr/pwconv.8, man/fr/sg.1, man/fr/shadow.3, man/fr/shadow.5, man/fr/su.1, man/fr/suauth.5, man/fr/useradd.8, man/fr/userdel.8, man/fr/usermod.8, man/fr/vipw.8, NEWS:
+ fr man pages are now up to date.
+
+ * man/fr/fr.po:
+ more updates for 4.0.18 (by Nicolas François <nicolas.francois@centraliens.net>).
+
+ * man/fr/fr.po:
+ updated for 4.0.18 (by Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>).
+
+2006-07-28 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, NEWS, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/dz.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/km.po, po/ko.po, po/nb.po, po/ne.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po:
+ updated.
+
+ * src/useradd.c, src/usermod.c:
+ fixed UID/GID overflow (fixed http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=198920).
+ Fixed expiredate/inactive/mindays/warndays/maxdays overflow (simillar to RH#198920).
+
+ * src/passwd.c:
+ fixed inactive/mindays/warndays/maxdays overflow (similar to RH#198920).
+
+ * src/groupadd.c, src/groupmod.c:
+ fixed GID overflow (fixed http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=198920).
+
+2006-07-27 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/.cvsignore: groupmems added.
+
+2006-07-24 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/fr.po:
+ updated for 4.0.18 (by ean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>).
+
+ * po/uk.po: break lines longer than 80 cols and add missing \n.
+
+ * po/uk.po:
+ updated for 4.0.18 (by Eugeniy Meshcheryakov <eugen@univ.kiev.ua>).
+
+ * man/pl/pl.po, man/ru/ru.po, man/sv/sv.po, man/chgpasswd.8.xml, man/chpasswd.8.xml, man/fr/fr.po:
+ s/instead DES/instead of DES/
+
+ * NEWS: sv man pages are partially translated.
+
+2006-07-23 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/groupmems.c: fix compilation warnings.
+
+ * po/ko.po: use \t.
+
+ * po/nl.po: break lines longer than 80 cols and add missing \n.
+
+2006-07-22 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/ru/faillog.5: regenerated.
+
+ * po/ko.po: updated for 4.0.18 (by Changwoo Ryu <cwryu@debian.org>).
+
+2006-07-20 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/faillog.5.xml, man/fr/fr.po, man/pl/pl.po, man/ru/ru.po, man/sv/sv.po:
+ added <refmiscinfo class="sectdesc"> tag for faillog.5.xml.
+
+ * man/sv/Attic/grupper.1: removed.
+
+ * man/sv/Makefile.am, man/sv/chage.1, man/sv/chfn.1, man/sv/chgpasswd.8, man/sv/chpasswd.8, man/sv/chsh.1, man/sv/expiry.1, man/sv/faillog.5, man/sv/faillog.8, man/sv/gpasswd.1, man/sv/groupadd.8, man/sv/groupdel.8, man/sv/groupmems.8, man/sv/groupmod.8, man/sv/groups.1, man/sv/grpck.8, man/sv/gshadow.5, man/sv/lastlog.8, man/sv/limits.5, man/sv/login.1, man/sv/login.access.5, man/sv/login.defs.5, man/sv/logoutd.8, man/sv/newgrp.1, man/sv/newusers.8, man/sv/nologin.8, man/sv/passwd.1, man/sv/passwd.5, man/sv/porttime.5, man/sv/pwck.8, man/sv/pwconv.8, man/sv/sg.1, man/sv/shadow.3, man/sv/shadow.5, man/sv/su.1, man/sv/suauth.5, man/sv/sv.po, man/sv/useradd.8, man/sv/userdel.8, man/sv/usermod.8, man/sv/vipw.8:
+ corrected text charset and other minor cleanups (by Daniel Nylander <info@danielnylander.se>).
+
+ * po/tr.po: break lines longer than 80 cols.
+
+ * po/tr.po:
+ updated for 4.0.18 (by Mehmet TURKER <mturker@innova.com.tr>).
+
+ * configure.in, man/Makefile.am, man/sv/Makefile.am:
+ fixes for "make {dist|distchec}" and sv man pages.
+
+ * man/sv/Attic/grupper.1, man/sv/groupmems.8, man/sv/groupmod.8, man/sv/grpck.8, man/sv/grpconv.8, man/sv/grpunconv.8, man/sv/gshadow.5, man/sv/lastlog.8, man/sv/limits.5, man/sv/login.1, man/sv/login.access.5, man/sv/login.defs.5, man/sv/logoutd.8, man/sv/newgrp.1, man/sv/newusers.8, man/sv/nologin.8, man/sv/passwd.1, man/sv/passwd.5, man/sv/porttime.5, man/sv/pwck.8, man/sv/pwconv.8, man/sv/pwunconv.8, man/sv/sg.1, man/sv/shadow.3, man/sv/shadow.5, man/sv/su.1, man/sv/suauth.5, man/sv/sv.po, man/sv/useradd.8, man/sv/userdel.8, man/sv/usermod.8, man/sv/vigr.8, man/sv/vipw.8, NEWS, man/Makefile.am, man/sv/Makefile.am, man/sv/chage.1, man/sv/chfn.1, man/sv/chgpasswd.8, man/sv/chpasswd.8, man/sv/chsh.1, man/sv/expiry.1, man/sv/faillog.5, man/sv/faillog.8, man/sv/getspnam.3, man/sv/gpasswd.1, man/sv/groupadd.8, man/sv/groupdel.8:
+ full sv man pages set added (by Daniel Nylander <info@danielnylander.se>).
+ This man pages are translated using new XML/xml2po/gettext infrastructure.
+
+ * po/pl.po: updated for 4.0.18.
+
+2006-07-19 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/pt.po:
+ updated for 4.0.18 (by Miguel Figueiredo <mfigueiredo@gmail.com>).
+
+ * po/gl.po, NEWS:
+ updated for 4.0.18 (by Jacobo Tarrio <jacobo@tarrio.org>).
+
+ * NEWS, po/eu.po:
+ updated for 4.0.18 (by Piarres Beobide <pi@beobide.net>).
+
+ * man/ru/chsh.1, man/ru/faillog.5, man/ru/groupmems.8, man/ru/groupmod.8, man/ru/ru.po, man/ru/su.1, man/ru/useradd.8, man/ru/usermod.8, man/ru/vipw.8, NEWS, po/ru.po:
+ updated for 4.0.18 (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+ * po/vi.po, NEWS:
+ updated for 4.0.18 (by Clytie Siddall <clytie@riverland.net.au>).
+
+ * NEWS, po/cs.po:
+ updated for 4.0.18 (by Miroslav Kure <kurem@upcase.inf.upol.cz>).
+
+ * NEWS, po/sv.po:
+ updated for 4.0.18 (by Daniel Nylander <info@danielnylander.se>).
+
+ * NEWS, po/ca.po:
+ updated for 4.0.18 (by Guillem Jover <guillem@debian.org>).
+
+2006-07-18 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/hu.po: cleanups.
+
+ * NEWS, po/da.po:
+ updated for 4.0.18 (by Claus Hindsgaul <claus.hindsgaul@gmail.com>).
+
+ * po/hu.po, NEWS: updated for 4.0.18 (by SZERVÁC Attila <sas@321.hu>).
+
+ * NEWS: typos.
+
+ * man/ru/ru.po, man/fr/fr.po, man/pl/pl.po: run "make update-po".
+
+ * man/su.1.xml: fixes in <refsynopsisdiv>.
+
+ * src/groupmems.c: indent soutrce code.
+
+ * src/groupmems.c: use shadow Copyright.
+
+ * po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/km.po, po/ko.po, po/nb.po, po/ne.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/POTFILES.in, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/dz.po, po/el.po:
+ added src/groupmems.c to POTFILES.in.
+
+ * NEWS, etc/pam.d/Makefile.am, etc/pam.d/groupmems, man/Makefile.am, man/groupmems.8.xml, src/Makefile.am, src/groupmems.c:
+ groupmems rewrited for use PAM and getopt_long() nad now it is enabled
+ for build and install (patch by George Kraft <gk4@swbell.net>).
+
+ * NEWS, configure.in: start prepare for 4.0.18.
+
+2006-07-17 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/dz.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/km.po, po/ko.po, po/nb.po, po/ne.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po:
+ run "make update-po" and some cleanups (added missing \n and use tabs instead spaces).
+
+ * src/su.c: s#[login]#[LOGIN]# in help message.
+
+ * man/useradd.8.xml:
+ added missing --<foo> long options names in "Changing the default values" section.
+
+ * po/tr.po: updated (by Murat Şenel <muratasenel@gmail.com>).
+
+2006-07-16 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/fr/fr.po, man/pl/pl.po, man/ru/ru.po: updated.
+
+ * man/useradd.8.xml: added newusers(8) to SEE ALSO section.
+
+ * etc/login.defs:
+ removed GETPASS_ASTERISKS (patch by Mike Frysinger <vapier@gentoo.org>).
+
+2006-07-15 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, man/pl/chsh.1, man/pl/pl.po: pl chage(1): translation finished.
+
+ * NEWS:
+ s#fix by Mike Frysinger <vapier@gentoo.org>)#(patch by Ulrich Mueller <ulm@kph.uni-mainz.de>; http://bugs.gentoo.org/139966#
+
+ * NEWS, configure.in:
+ S/Key: removed assign getpass() to libshadow_getpass() on autoconf level
+ (fix by Mike Frysinger <vapier@gentoo.org>).
+
+2006-07-14 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/vipw.8.xml: make options <replaceable> in SYNOPSIS.
+
+ * po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/dz.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/km.po, po/ko.po, po/nb.po, po/ne.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/groupadd.c:
+ s/group/GROUP/ in groupadd help message.
+
+ * src/su.c (main):
+ move **envcp declaration to #ifdef USE_PAM (fixed warning about unused
+ variable when shadow is builded with PAM didabled).
+
+ * man/pl/pl.po, NEWS, man/pl/chage.1: pl chage(1) translation finished.
+
+ * man/fr/fr.po, man/pl/pl.po, man/ru/ru.po: updated.
+
+ * man/chsh.1.xml: updated after rewrite chsh for use getopt_long().
+
+ * po/pl.po: kill fuzzy.
+
+2006-07-13 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/chsh.c, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/dz.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/km.po, po/ko.po, po/nb.po, po/ne.po:
+ one \t more in help message.
+
+ * po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/km.po, po/ko.po, po/nb.po, po/ne.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/dz.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po:
+ updated.
+
+ * NEWS, src/chsh.c: chsh rewrited for use getopt_long().
+
+2006-07-12 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/pl/groupmod.8, man/pl/pl.po: finish translation groupmod(8).
+
+ * man/fr/fr.po, man/groupmod.8.xml, man/pl/groupmod.8, man/pl/pl.po, man/ru/ru.po:
+ cleanups in groupmod(8).
+
+ * man/fr/fr.po, man/pl/pl.po, man/ru/ru.po, man/usermod.8.xml, src/usermod.c, NEWS:
+ back to previouse usermod -a option sematics and clarify -a behavior
+ on documentation level (by Greg Schafer <gschafer@zip.com.au>).
+
+ * man/fr/fr.po, man/groupmod.8.xml, man/pl/pl.po, man/ru/ru.po:
+ updated groupmod man page.
+
+2006-07-11 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/groupmod.c: too many \t in help message.
+
+ * man/ru/chage.1, man/ru/passwd.1, man/ru/ru.po, man/chage.1.xml, man/fr/fr.po, man/passwd.1.xml, man/pl/pl.po:
+ updated.
+
+ * po/nb.po, po/ne.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/dz.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/km.po, po/ko.po:
+ run "make update-po".
+
+ * src/groupmod.c: cleunps in help message.
+
+ * src/chage.c: s/user/\[LOGIN\]/ in help message.
+
+ * src/passwd.c: s/\[login\]/\[LOGIN\]/ in help message.
+
+ * NEWS, src/groupmod.c: groupmod rewrited for use getopt_log().
+
+2006-07-10 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/sv.po:
+ added missing \n in help messages and few other minor cleanups.
+
+ * NEWS, po/sv.po:
+ updated for 4.0.17 (by Daniel Nylander <info@danielnylander.se>).
+
+ * NEWS: 4.0.17 release date i 10-07-2006.
+
+ * NEWS, libmisc/copydir.c:
+ fixed segfault usermod/userdel on remove home directory when it can't
+ be removed; for example when it is /dev/null (fixed http://bugs.gentoo.org/139148).
+
+ * src/login.c, src/logoutd.c, src/userdel.c, libmisc/limits.c:
+ remove USER_PROCESS conditionsi (code simplifications).
+
+2006-07-07 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/km.po: kill all fuzzy (Sokhem <khoemsokhem@khmeros.info>).
+
+2006-07-06 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/de.po: kill fuzzy (by Holger Wansing <linux@wansing-online.de>).
+
+2006-07-05 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Makefile.am: removed duplicated all target.
+
+ * NEWS, po/LINGUAS, po/ne.po:
+ new Nepali translation (by Paras Pradhan <pradhanparas@gmail.com>).
+
+ * NEWS, po/LINGUAS, po/dz.po: new Dzongkha translation.
+
+ * NEWS, po/de.po:
+ updated for 4.0.17 (by Holger Wansing <linux@wansing-online.de>).
+
+ * NEWS, po/nl.po:
+ updated for 4.0.17 (by "cobaco (aka Bart Cornelis)" <cobaco@skolelinux.no>)
+
+2006-06-25 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/ko.po: cleanups (by darehanl <darehanl@gmail.com>).
+
+ * src/usermod.c: fixes in getopt_long() optstring: s/a/a:/ and added h.
+
+ * src/faillog.c:
+ fixed long_options[] entries: s/no_argument/required_argument/ for lock-secs,
+ maximum, time and user options.
+
+ * NEWS, configure.in:
+ improved SELinux detection on autoconf level (based on patch by
+ Dan Yefimov <dan@D00M.lightwave.net.ru>).
+
+ * po/ro.po, NEWS:
+ updated for 4.0.17 (by Sorin Batariuc <sorin@bonbon.net>).
+
+2006-06-24 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: cleanups.
+
+ * man/pl/pl.po: more translations for chage(1).
+
+ * TODO: remove done things.
+
+ * NEWS, lib/Attic/getpass.c, lib/Makefile.am, lib/getdef.c, lib/pwauth.c, po/POTFILES.in:
+ removed using private implementatuon getpass() libc function (now getpass() is
+ used also when S/KEY support is enabled).
+
+ * NEWS, src/Makefile.am: move nologin do $(sbindir).
+
+ * man/pl/pl.po: more work.
+
+ * man/pl/pl.po: more translations.
+
+ * po/pl.po: s/KEY=VALUE/KLUCZ=WARTOŚĆ/
+
+ * po/pl.po: s/SEC/SEK/
+
+ * src/chpasswd.c: added missing #include "exitcodes.h".
+
+ * src/chpasswd.c: s/exit (1)/exit (E_USAGE)/
+
+ * man/Makefile.am:
+ move all current i18n man pages automation inside "if ENABLE_REGENERATE_MAN .. endif".
+
+ * man/Makefile.am:
+ add an error message so people don't have to go digging through
+ source to find out what's up (by Mike Frysinger <vapier@gentoo.org>).
+
+ * NEWS, man/ru/chage.1, man/ru/chfn.1, man/ru/chgpasswd.8, man/ru/chpasswd.8, man/ru/chsh.1, man/ru/expiry.1, man/ru/faillog.5, man/ru/faillog.8, man/ru/gpasswd.1, man/ru/groupadd.8, man/ru/groupdel.8, man/ru/groupmems.8, man/ru/groupmod.8, man/ru/groups.1, man/ru/grpck.8, man/ru/gshadow.5, man/ru/lastlog.8, man/ru/limits.5, man/ru/login.1, man/ru/login.access.5, man/ru/login.defs.5, man/ru/logoutd.8, man/ru/newgrp.1, man/ru/newusers.8, man/ru/nologin.8, man/ru/passwd.1, man/ru/passwd.5, man/ru/porttime.5, man/ru/pwck.8, man/ru/pwconv.8, man/ru/ru.po, man/ru/sg.1, man/ru/shadow.3, man/ru/shadow.5, man/ru/su.1, man/ru/suauth.5, man/ru/useradd.8, man/ru/userdel.8, man/ru/usermod.8, man/ru/vipw.8:
+ updated ru man pages (regenerated from man/ru/ru.po -> man/ru/*xml -> roff).
+
+ * NEWS, po/ru.po:
+ updated for 4.0.17 (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+ * NEWS, po/LINGUAS, po/km.po:
+ new km translation (Sokhem <khoemsokhem@khmeros.info>).
+
+ * po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, src/groupadd.c:
+ cleanups in groupadd help message.
+
+ * NEWS, po/nb.po:
+ updated for 4.0.17 (by Bjørn Steensrud <bjornst@powertech.no>).
+
+ * NEWS, po/da.po:
+ updated for 4.0.17 (by Claus Hindsgaul <claus.hindsgaul@gmail.com>).
+
+ * po/pl.po:
+ s/twóş/twĂłrz/ (fix by Michał Łomnicki <michal.lomnicki@gmail.com>).
+
+ * NEWS, po/pt.po:
+ updated for 4.0.17 (by Miguel Figueiredo <mfigueiredo@gmail.com>).
+
+ * NEWS, po/vi.po:
+ updated for 4.0.17 (by Clytie Siddall <clytie@riverland.net.au>).
+
+ * NEWS, po/cs.po:
+ updated for 4.0.17 (by Miroslav Kure <kurem@upcase.inf.upol.cz>).
+
+ * po/eu.po, po/fr.po, po/gl.po, po/pl.po:
+ Project-Id-Version: shadow 4.0.17
+
+ * NEWS, po/sk.po:
+ updated for 4.0.17 (by Peter Mann <Peter.Mann@tuke.sk>).
+
+ * NEWS, po/ko.po:
+ updated for 4.0.17 (by Changwoo Ryu <cwryu@debian.org>).
+
+2006-06-22 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, configure.in: schedule release 40.17 on 26-06-2006.
+
+ * src/useradd.c:
+ adjust last fix for leave some fix mail spool creation after rewrite internal
+ configuration API.
+
+ * src/useradd.c, NEWS:
+ fixed mail spool file creation (bug cached by Frans Pop <elendil@planet.nl>,
+ fixed http://bugs.debian.org/374705).
+
+2006-06-20 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/chage.c, src/chgpasswd.c, src/chpasswd.c, src/faillog.c, src/groupadd.c, src/lastlog.c, src/passwd.c, src/su.c, src/useradd.c, src/userdel.c, src/usermod.c, src/vipw.c:
+ better looking help messages output. Added one empty line at end of help message.
+
+ * po/ru.po, po/sk.po, po/sv.po, po/tl.po, po/uk.po, po/ro.po, po/pt_BR.po:
+ break help messages lines before col 80.
+
+ * man/pl/pl.po: more work on usermod.
+
+ * po/pl.po: cleanups.
+
+2006-06-19 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/pl/vipw.8:
+ regenerated using fixed DocBook XSL Stylesheets v1.70.1 (I must submit my
+ fixes common/pl.xml do DocBook XSL Stylesheets mantainer).
+
+ * man/fr/fr.po, man/ru/ru.po: updated.
+
+ * man/pl/lastlog.8, man/pl/pl.po: finish translate lastlog(8).
+
+ * man/lastlog.8.xml: improved NOTE section content.
+
+ * po/pl.po: iprove lastlog help message.
+
+ * man/fr/fr.po, man/lastlog.8.xml, man/pl/pl.po, man/ru/ru.po:
+ Better lastlog short description. Now it is:
+ lastlog - reports the most recent login of all users or of a given user
+
+ * man/Makefile.am, man/fr/fr.po, man/lastlog.8.xml, man/pl/pl.po, man/ru/ru.po:
+ Fixed CAVEATS section (what the hell is mmdf ? :)
+
+ * man/ru/ru.po, NEWS, man/faillog.5.xml, man/fr/fr.po, man/pl/pl.po:
+ added missing information about fail_locktime element of faillog struct
+ in faillog(5) man page (by Thorsten Kukuk <kukuk@suse.de>).
+
+2006-06-16 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/ru/chage.1, man/ru/chfn.1, man/ru/chgpasswd.8, man/ru/chpasswd.8, man/ru/chsh.1, man/ru/expiry.1, man/ru/faillog.5, man/ru/faillog.8, man/ru/gpasswd.1, man/ru/groupadd.8, man/ru/groupdel.8, man/ru/groupmems.8, man/ru/groupmod.8, man/ru/groups.1, man/ru/grpck.8, man/ru/gshadow.5, man/ru/lastlog.8, man/ru/limits.5, man/ru/login.1, man/ru/login.access.5, man/ru/login.defs.5, man/ru/logoutd.8, man/ru/newgrp.1, man/ru/newusers.8, man/ru/nologin.8, man/ru/passwd.1, man/ru/passwd.5, man/ru/porttime.5, man/ru/pwck.8, man/ru/pwconv.8, man/ru/sg.1, man/ru/shadow.3, man/ru/shadow.5, man/ru/su.1, man/ru/suauth.5, man/ru/useradd.8, man/ru/userdel.8, man/ru/usermod.8, man/ru/vipw.8:
+ fully regenerated man pages.
+
+ * man/Makefile.am:
+ hack for generate translated xml files with lang="<lang> in <refentry> tag.
+ Now is possible testing correctnes of XSLT sheets languages definition.
+
+2006-06-13 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/eu.po: updated (by Piarres Beobide <pi@beobide.net>).
+
+2006-06-12 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/zh_TW.po, po/da.po, po/el.po, po/es.po, po/eu.po, po/id.po, po/ja.po, po/ko.po, po/nb.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/tr.po, po/uk.po, po/zh_CN.po:
+ s/ \\n"/\\n"/ in translated strings.
+
+ * man/pl/pl.po: more translations for usermod.
+
+ * man/fr/fr.po, man/pl/pl.po, man/ru/ru.po, man/usermod.8.xml:
+ added <command> tags for at and crontab.
+
+ * man/fr/fr.po, man/pl/pl.po, man/ru/ru.po, man/usermod.8.xml:
+ remove /etc/login.defs from FILES section.
+
+ * po/gl.po: updated (by Jacobo Tarrio <jtarrio@trasno.net>).
+
+ * po/fr.po: updated (by Christian Perrier <bubulle@kheops.frmug.org>).
+
+ * po/pl.po:
+ updated usermod help message and fixed few other things introduced during
+ copy&paset from useradd help message.
+
+ * po/vi.po, po/zh_CN.po, po/zh_TW.po, src/usermod.c, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/bs.po:
+ fixes in help message:
+ s/login/LOGIN/
+ s/new login directory/new home directory/
+ s/new initial login group/new primary group/
+ s/tlist of supplementary/new tlist of supplementary/
+ s/LOGIN/NEW_LOGIN/
+
+ * po/da.po, po/id.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ro.po, po/sk.po, po/sv.po:
+ cleanups in usermod help message.
+
+ * po/es.po, po/eu.po, po/fi.po, po/tl.po: cleanups.
+
+ * po/nb.po, po/nl.po, po/pt.po, po/uk.po, po/cs.po, po/el.po, po/eu.po, po/fi.po, po/hu.po:
+ s/\\\t /\\\t/
+
+2006-06-11 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, configure.in, man/Makefile.am:
+ reverte using docbook.sourceforge.net in XSLT url.
+
+ * po/pl.po: cleanups.
+
+2006-06-05 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Makefile.am:
+ improved gen-xmls target: now this target generates only missing xml files.
+
+2006-06-04 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/sk.po:
+ updated for 4.0.16 (by Peter Mann <Peter.Mann@tuke.sk>).
+
+ * NEWS, po/es.po:
+ updated for 4.0.16 (by Ruben Porras <nahoo82@gmail.com>).
+
+ * NEWS, po/fi.po:
+ updated for 4.0.16 (by Tommi Vainikainen <thv+debian@iki.fi>).
+
+ * NEWS, man/cs/Makefile.am, man/cs/groupmems.8, man/cs/groupmod.8, man/cs/grpck.8, man/cs/gshadow.5:
+ new cs man pages: groupmems(8), groupmod(8), grpck(8), gshadow(5)
+ (by Miroslav Kure <kurem@upcase.inf.upol.cz>).
+
+ * NEWS, po/cs.po:
+ updated for 4.0.16 (by Miroslav Kure <kurem@upcase.inf.upol.cz>).
+
+2006-06-01 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, configure.in, man/Makefile.am:
+ regenerate roff man pages using docbook-style-xsl-1.70.1.
+ This version uses new base URL: http://docbook.sf.net/release/xsl/current/
+
+ * man/.cvsignore: shadow-man-pages.pot added.
+
+ * man/Makefile.am:
+ added temporary gen-xmls targed and dependencies beetwen .pot and .po files.
+
+ * man/chgpasswd.8.xml: removed <!DOCTYPE> tag (isn't neccessary).
+
+2006-05-31 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/pl/pl.po: chage(1) translation.
+
+ * man/pl/Attic/chage.1.xml: removed.
+
+ * man/chage.1.xml, man/fr/fr.po, man/pl/pl.po, man/ru/ru.po:
+ chage requires shadow access and can't work without this.
+
+ * po/da.po:
+ updated for 4.0.16 (by Claus Hindsgaul <claus.hindsgaul@gmail.com>).
+
+ * po/pl.po: s/_DAYS/_DNI/
+
+2006-05-30 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: s/OWL/Owl/
+
+ * NEWS: new release date for 4.0.16 is 05-06-2006.
+
+ * NEWS: fixed last usermod changes comment. Current is:
+ 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
+ proceeding with the fchmod() (based on Owl patch prepared by
+ Rafal Wojtczuk <nergal@owl.openwall.com>)
+
+ * src/useradd.c (create_mail):
+ move checking create_mail_spool is "yes" on top function.
+
+ * man/pl/pl.po: cleanups.
+
+ * po/fr.po:
+ plugged fuzzy (by Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>).
+
+ * po/fr.po:
+ updated (by Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>).
+
+2006-05-29 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Makefile.am:
+ simplifications in update-po target and fixes in dist-po-files target.
+
+ * NEWS, po/eu.po:
+ updated for 4.0.16 (by Piarres Beobide <pi@beobide.net>).
+
+2006-05-28 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/ru/ru.po, NEWS, man/chfn.1.xml, man/faillog.8.xml, man/fr/fr.po, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupmems.8.xml, man/limits.5.xml, man/login.1.xml, man/login.defs.5.xml, man/newgrp.1.xml, man/passwd.1.xml, man/passwd.5.xml, man/pl/pl.po, man/su.1.xml:
+ bunch of cleanups in chfn(1), faillog(8), gpasswd(1), groupadd(8),
+ groupmems(8), limits(5), login(1), login.defs(5), newgrp(1), passwd(1),
+ passwd(5) and su(1) (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+ * man/Makefile.am, man/ru/ru.po: added ru to LINGUAS.
+
+ * po/ru.po: updated for 4.0.16 (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+2006-05-27 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/fr/fr.po, man/pl/pl.po, man/chage.1.xml, man/passwd.1.xml:
+ s/-n/-m/ in passwd(1). Improved -m, --mindays description in chage(1) and passwd(1).
+ More pl translations.
+
+ * po/vi.po: updated (by Clytie Siddall <clytie@riverland.net.au>).
+
+ * NEWS, po/hu.po:
+ updated for 4.0.16 (by Gabor Kelemen <kelemeng@gnome.hu>).
+
+2006-05-25 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/cs/Makefile.am, man/it/Makefile.am, man/ru/Makefile.am:
+ id and sulogin executables are not installed by "make install",
+ but a few translated man pages are still installed.
+ (patch by Lasse Collin <lasse.collin@tukaani.org>)
+
+2006-05-22 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/vi.po:
+ updates for 4.0.16 (by Clytie Siddall <clytie@riverland.net.au>).
+
+ * po/gl.po: updated for 4.0.16 (by Jacobo Tarrio <jtarrio@debian.org>).
+
+2006-05-20 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/pl.po: more cleanups.
+
+ * po/fr.po:
+ updated for 4.0.16 (by Christian Perrier <bubulle@kheops.frmug.org>).
+
+ * man/chage.1.xml, man/chfn.1.xml, man/chsh.1.xml, man/expiry.1.xml, man/faillog.5.xml, man/faillog.8.xml, man/fr/fr.po, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/gshadow.5.xml, man/id.1.xml, man/lastlog.8.xml, man/login.1.xml, man/login.access.5.xml, man/logoutd.8.xml, man/newgrp.1.xml, man/newusers.8.xml, man/passwd.1.xml, man/passwd.5.xml, man/pl/pl.po, man/pl/vipw.8, man/porttime.5.xml, man/pwck.8.xml, man/pwconv.8.xml, man/sg.1.xml, man/shadow.3.xml, man/shadow.5.xml, man/su.1.xml, man/sulogin.8.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml, man/vipw.8.xml:
+ use common style in FILES sections.
+
+ * man/fr/fr.po, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/id.1.xml, man/limits.5.xml, man/login.access.5.xml, man/pl/pl.po, man/suauth.5.xml, man/userdel.8.xml, man/usermod.8.xml, man/faillog.5.xml:
+ begin <refpurpose> text from lowercase.
+
+ * man/fr/fr.po, man/pl/pl.po, man/pwconv.8.xml, man/vipw.8.xml:
+ remove "." from <refpurpose>.
+
+ * po/pl.po: cleanups.
+
+ * po/pl.po: typo.
+
+ * man/pl/.cvsignore, man/pt_BR/.cvsignore, man/ru/.cvsignore, man/tr/.cvsignore, man/zh_CN/.cvsignore, man/zh_TW/.cvsignore, man/cs/.cvsignore, man/de/.cvsignore, man/es/.cvsignore, man/fi/.cvsignore, man/fr/.cvsignore, man/hu/.cvsignore, man/id/.cvsignore, man/it/.cvsignore, man/ja/.cvsignore, man/ko/.cvsignore:
+ *.xml added.
+
+ * man/cs/.cvsignore, man/de/.cvsignore, man/es/.cvsignore, man/fi/.cvsignore, man/fr/.cvsignore, man/hu/.cvsignore, man/id/.cvsignore, man/it/.cvsignore, man/ja/.cvsignore, man/ko/.cvsignore, man/pl/.cvsignore, man/pt_BR/.cvsignore, man/ru/.cvsignore, man/tr/.cvsignore, man/zh_CN/.cvsignore, man/zh_TW/.cvsignore, man/.cvsignore:
+ .xml2po.mo added.
+
+ * NEWS, man/pl/vipw.8: update pl vipw(8) man page.
+
+ * src/useradd.c: s/mailbox/mailbox file/
+
+ * man/pl/pl.po: seems vipw finished.
+
+ * man/fr/fr.po, man/vipw.8.xml: s/Quiet mode database./Quiet mode./
+
+ * man/pl/pl.po: more entries.
+
+ * po/vi.po, po/zh_CN.po, po/zh_TW.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po:
+ /mailbox/mailbox file/
+
+ * man/pl/pl.po: fill few entries.
+
+ * man/Makefile.am: fixes in dist-po-files target.
+
+ * man/Makefile.am: pl added to Linguas. Some mprovements.
+
+ * man/fr/fr.po:
+ initial version based on ond version submited by Christian Perrier <bubulle@debian.org>.
+
+ * man/pl/pl.po: initial version.
+
+ * man/Makefile.am:
+ implemet update-po target and dist, dist-check hooks for put .po and
+ .pot files in dist tar ball.
+
+ * src/chgpasswd.c:
+ reverte struct group newgr declaration but use them only conditionaly (#ifndef SHADOWGRP).
+
+2006-05-19 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, configure.in: schedule release 4.0.16 to 29.05.06.
+
+ * po/pl.po: updated.
+
+ * po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po:
+ run "make update-po".
+
+ * NEWS, src/useradd.c:
+ fixed userdel CERT VU#312962: fixed forgoten checking of the return
+ value from fchown() before proceeding with the fchmod() (prepared
+ based on OWL fix submited by Solar Designer <solar@openwall.com>),
+ Use in userdel login.defs::MAIL_DIR instead hardcoded /var/mail on created
+ mailbox path (based on OWL fixes submited by Solar Designer <solar@openwall.com>).
+
+2006-05-15 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/.cvsignore: added *.[1358]
+
+ * NEWS, man/ru/Makefile.am, man/ru/chgpasswd.8:
+ added chgpasswd(8) ru man page (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+ * po/gl.po: updated (by Jacobo Tarrio <jtarrio@debian.org>).
+
+ * NEWS, man/ru/login.defs.5, man/ru/passwd.1, man/ru/userdel.8, man/ru/usermod.8:
+ updated ru login.defs(5), passwd(1), userdel(8), usermod(8) man pages
+ (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+ * NEWS, po/ru.po: updated (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+ * NEWS, po/pt.po: updated (by Miguel Figueiredo <elmig@debianpt.org>).
+
+2006-05-13 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, man/Makefile.am, man/ja/Attic/pw_auth.3, man/ja/Makefile.am, man/pl/Attic/pw_auth.3, man/pl/Makefile.am, man/ru/Attic/pw_auth.3, man/ru/Makefile.am:
+ pw_auth(3) man page removed (outdated).
+
+ * man/Makefile.am, man/fr/Makefile.am, man/it/Makefile.am, man/ja/Makefile.am, man/pl/Makefile.am, man/ru/Makefile.am, NEWS, autogen.sh:
+ install limits(5), login.access(5) and porttime(5) man pages only when
+ shadow is builded with PAM support disabled.
+
+ * NEWS: cleanups.
+
+ * autogen.sh:
+ by default in development enviroment use CFLAGS="-O2 -Wall".
+
+ * src/chgpasswd.c (main): remove two unused variables (newgr and now).
+
+ * src/userdel.c (main): removed unused arg variable.
+
+ * libmisc/setupenv.c (setup_env):
+ move *cp varable to #ifndef PAM part (fixed compilation
+ warning about unused variable).
+
+ * lib/getdef.c: now GETPASS_ASTERISKS is SKEY #define dependent.
+
+ * configure.in, NEWS, lib/Attic/getpass.c, lib/pwauth.c:
+ by default do not use libshadow_getpass() as getpass() replacemement.
+ Use libshadow_getpass() only when S/KEY support is enabled.
+ Current glibc getpass() handles correctly longer than 8 characters
+ passwords and libshadow_getpass() is used only because libc getpass()
+ do not handles password prompting with echo enabled.
+
+ * src/sulogin.c: break long line.
+
+ * lib/pwauth.c:
+ added #include <unistd.h> and remove localy defined getpass() prototype.
+
+2006-05-12 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Makefile.am: removed dupplicated sulogin.8.xml from EXTRA_DIST.
+
+ * man/Attic/pw_auth.3.xml, man/Makefile.am: remove pw_auth(3) man page.
+
+ * NEWS, lib/getdef.c: move login.defs::MD5_CRYPT_ENAB to non-PAM part.
+
+ * po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/userdel.c, po/bs.po:
+ typo (s/removel/removal/)
+
+2006-05-11 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/userdel.8.xml:
+ updated (after add getopt_log() support for userdel).
+
+ * po/pl.po: updated.
+
+ * po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/userdel.c, NEWS, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po:
+ userdel rewrited for use getopt_log().
+
+ * po/pl.po: cleanups.
+
+ * etc/pam.d/Makefile.am, etc/pam.d/chgpasswd: new file.
+
+2006-05-09 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/da.po:
+ updated (by Claus Hindsgaul <claus.hindsgaul@gmail.com>).
+
+2006-05-08 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/sv.po: updated (by Daniel Nylander <yeager@lidkoping.net>).
+
+ * NEWS, configure.in, etc/Makefile.am, etc/pam.d/Makefile.am:
+ 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,
+ - install /etc/login.defs and /etc/default/useradd files.
+
+ COMMENT: it is possible to extend this for install above files for specified
+ distribution. For example: if exist /etc/fedora-release install Fedora specyfic
+ default configuration files and this files can be distributed in dist tar ball.
+
+ * NEWS, po/gl.po: updated (by Jacobo Tarrio <jtarrio@trasno.net>).
+
+2006-05-07 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/fr.po:
+ updated (by Christian Perrier <bubulle@kheops.frmug.org>).
+
+ * NEWS, lib/commonio.c:
+ fixed handle relative symlinks too in lib/commonio.c (merge patch from Fedora).
+
+ * NEWS, lib/nscd.c: properly notify nscd to flush its cache
+ (https://bugzilla.redhat.com/bugzilla/186803).
+
+ * NEWS, libmisc/copydir.c (copy_tree):
+ fixes for verify return values mkdir() and chown()
+ on copy files (merge 482_libmisc_copydir_check_return_values Debian patch).
+
+ * po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/chfn.c, src/chsh.c, src/grpck.c, src/login.c, src/pwck.c, src/useradd.c, src/usermod.c, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po:
+ use '%s' cytation instead `%s'.
+
+ * NEWS, src/su.c:
+ reverte http://bugs.debian.org/276419 (this is Debian specyfic).
+
+ * libmisc/setupenv.c, libmisc/sub.c, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/chfn.c:
+ use '%s' cytation instead \"%s\".
+
+ * po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, src/grpck.c:
+ typo.
+
+ * po/pl.po: updated.
+
+ * NEWS, libmisc/setupenv.c (setup_env):
+ export MAIL only when MAIL_CHECK_ENAB is enabled
+ (Mike Frysinger <vapier@gentoo.org>).
+
+ * po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, NEWS, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, src/grpck.c, src/pwck.c:
+ warn when the members of a group differ in /etc/groups and /etc/gshadow
+ (fixed http://bugs.debian.org/75181).
+
+ * NEWS, src/su.c:
+ concatenate the non-su arguments and provide them to the shell with
+ the -c option (fixes for http://bugs.debian.org/317264 and
+ http://bugs.debian.org/276419).
+
+2006-05-06 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, man/passwd.1.xml:
+ better document how password strength is checked (fixed http://bugs.debian.org/115380).
+
+2006-04-28 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, man/usermod.8.xml:
+ added missing -a option description (by Christian Perrier <bubulle@debian.org>).
+
+2006-04-24 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, man/hu/chsh.1, man/hu/login.1, man/hu/newgrp.1:
+ fixed typos (by Koblinger Egmont <egmont@uhulinux.hu>).
+
+2006-04-16 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/LINGUAS, po/hu.po:
+ new hu translation (by SZERVÁC Attila <sas@321.hu>).
+
+2006-04-08 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/userdel.8.xml:
+ minior fixes for the note under the -f option (Mike Frysinger <vapier@gentoo.org>).
+
+2006-04-07 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/id.po: updatd (by Parlin Imanuel <pimanuel@gmail.com>).
+
+2006-04-01 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/su.c: indent code.
+
+ * NEWS, src/su.c:
+ fixed exit with a status 0 when the invoked command is terminated
+ by a signal which was not catched
+ (fixed by Eero Häkkinen <eero17@bigfoot.com>)
+
+ * README:
+ simple patch to fixup grammar and Gentoo distfile URL (by Mike Frysinger <vapier@gentoo.org>).
+
+2006-03-31 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/pw_auth.3.xml, man/chage.1.xml, man/chfn.1.xml, man/chpasswd.8.xml, man/chsh.1.xml, man/expiry.1.xml, man/faillog.5.xml, man/faillog.8.xml, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/gshadow.5.xml, man/id.1.xml, man/lastlog.8.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/login.defs.5.xml, man/logoutd.8.xml, man/newgrp.1.xml, man/newusers.8.xml, man/nologin.8.xml, man/passwd.1.xml, man/passwd.5.xml, man/porttime.5.xml, man/pwck.8.xml, man/pwconv.8.xml, man/sg.1.xml, man/shadow.3.xml, man/shadow.5.xml, man/su.1.xml, man/suauth.5.xml, man/sulogin.8.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml, man/vipw.8.xml:
+ removed <!DOCTYPE> tag (require strict DocBook XML V4.3//EN DTD isn't neccessary).
+
+ * NEWS, src/login.c:
+ cancel login timeout after authentication so that patient people
+ timing out on network directory services can log in with local
+ accounts (http://bugs.debian.org/107148).
+
+ * man/fr/login.defs.5, man/ja/login.defs.5, man/pl/useradd.8, man/ru/login.defs.5:
+ remove CREATE_HOME.
+
+ * NEWS, man/login.defs.5.xml:
+ CREATE_HOME is not supported by useradd (patch by Mike Frysinger <vapier@gentoo.org>).
+
+2006-03-29 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/nl.po:
+ s/wachtwoord is mes succes aangepast/wachtwoord is met succes aangepast/
+ (typo reported by Wim De Smet <wdesmet@yucom.be>).
+
+2006-03-26 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/passwd.c:
+ removed GPASSWD_PROGRAM, CHFN_PROGRAM CHFN_PROGRAM #defines (not used now).
+
+ * NEWS, man/Makefile.am, man/chgpasswd.8.xml:
+ chgpasswd(8): new man page.
+
+2006-03-24 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/vigr.8, man/Attic/vipw.8, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/expiry.1, man/Attic/faillog.5, man/Attic/faillog.8, man/Attic/getspnam.3, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmems.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/grpconv.8, man/Attic/grpunconv.8, man/Attic/gshadow.5, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/limits.5, man/Attic/login.1, man/Attic/login.access.5, man/Attic/login.defs.5, man/Attic/logoutd.8, man/Attic/newgrp.1, man/Attic/newusers.8, man/Attic/nologin.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/pw_auth.3, man/Attic/pwck.8, man/Attic/pwconv.8, man/Attic/pwunconv.8, man/Attic/sg.1, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/su.1, man/Attic/suauth.5, man/Attic/sulogin.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8:
+ remove english roff man pages from repo.
+
+2006-03-23 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, src/chgpasswd.c:
+ fixes for build correctly with --disable-shadowgrp
+ (patch by Johannes Winkelmann <jw@tks6.net>)
+
+2006-03-22 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/pl/chage.1: fixed typo.
+
+2006-03-13 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/it.po:
+ updated for 4.0.15 (by Danilo Piazzalunga <danilopiazza@gmail.com>).
+
+2006-03-12 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/nb.po:
+ updated for 4.0.15 (by Bjørn Steensrud <bjornst@powertech.no>).
+
+ * po/pt.po:
+ updated for 4.0.15 (by Miguel Figueiredo <mfigueiredo@gmail.com>).
+
+ * man/Makefile.am, NEWS, configure.in:
+ do not install translated man pages if shadow is configured with --disable-nls
+ (based patch submited by Mike Frysinger <vapier@gentoo.org>).
+
+ * NEWS, po/pt_BR.po:
+ updated for 4.0.15 (by Andre Luis Lopes <andrelop@debian.org>).
+
+ * po/fr.po:
+ updated for 4.0.15 (by Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>).
+
+2006-03-11 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, configure.in, lib/pwauth.c:
+ added fixes for detect BSD's S/Key with updated the skeychallenge() function
+ for take a fourth argument in case BSD version
+ (patch submited by Mike Frysinger <vapier@gentoo.org>)
+
+ * README: added paragragraph about S/Key support.
+
+ * po/sk.po: updated for 4.0.15 (by Peter Mann <Peter.Mann@tuke.sk>).
+
+ * NEWS: newgrp: do not link with libselinux.
+
+ * NEWS, po/zh_CN.po:
+ updated for 4.0.15 (by Carlos Z.F. Liu <carlosliu@users.sourceforge.net>).
+
+ * po/ru.po: updated for 4.0.15 (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+ * src/Makefile.am:
+ removed $(LIBSELINUX) from newgrp_LDADD (newgrp does not need to be linked
+ with SELinux libraries).
+
+ * man/ru/Attic/pw_auth.3, man/ru/chsh.1, man/ru/expiry.1, man/ru/faillog.5, man/ru/faillog.8, man/ru/gpasswd.1, man/ru/groupadd.8, man/ru/groupdel.8, man/ru/groupmems.8, man/ru/groupmod.8, man/ru/groups.1, man/ru/grpck.8, man/ru/gshadow.5, man/ru/id.1, man/ru/lastlog.8, man/ru/limits.5, man/ru/login.1, man/ru/login.access.5, man/ru/login.defs.5, man/ru/logoutd.8, man/ru/newgrp.1, man/ru/newusers.8, man/ru/nologin.8, man/ru/passwd.1, man/ru/passwd.5, man/ru/porttime.5, man/ru/pwck.8, man/ru/pwconv.8, man/ru/sg.1, man/ru/shadow.3, man/ru/shadow.5, man/ru/su.1, man/ru/suauth.5, man/ru/sulogin.8, man/ru/useradd.8, man/ru/userdel.8, man/ru/usermod.8, man/ru/vipw.8, NEWS, man/ru/Makefile.am, man/ru/chage.1, man/ru/chfn.1, man/ru/chpasswd.8:
+ ru man pages: added new nologin(8) and updated all other man pages
+ (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+2006-03-09 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/nl.po:
+ updated for 4.0.15 (by cobaco (aka Bart Cornelis) <cobaco@linux.be>).
+
+ * po/vi.po:
+ updated for 4.0.15 (by Clytie Siddall <clytie@riverland.net.au>).
+
+ * po/sv.po:
+ updated for 4.0.15 (by Daniel Nylander <po@danielnylander.se>).
+
+2006-03-08 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/eu.po: updated for 4.0.15 (by pi <pi@beobide.net>).
+
+ * po/ro.po: cleanups.
+
+ * NEWS, po/tl.po:
+ updated for 4.0.15 (by Eric Pareja <xenos@upm.edu.ph>).
+
+ * po/ro.po: updated for 4.0.15 (by Sorin B. <sorin@bonbon.net>).
+
+ * NEWS, po/es.po:
+ updated for 4.0.15 (by Ruben Porras <nahoo82@gmail.com>).
+
+2006-03-07 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/da.po:
+ updated for 4.0.15 (by Claus Hindsgaul <claus.hindsgaul@gmail.com>).
+
+ * NEWS, man/fi/chsh.1, man/fi/su.1:
+ update fi chsh(1), su(1) man pages generated from XML files
+ (Tommi Vainikainen <thv+debian@iki.fi>).
+
+ * NEWS, po/fi.po:
+ updated for 4.0.15 (by Tommi Vainikainen <thv+debian@iki.fi>).
+
+ * NEWS, po/cs.po:
+ updated for 4.0.15 (by Miroslav Kure <kurem@upcase.inf.upol.cz>).
+
+ * NEWS, man/cs/Makefile.am, man/cs/expiry.1, man/cs/faillog.5, man/cs/faillog.8, man/cs/gpasswd.1, man/cs/groupadd.8, man/cs/groupdel.8, man/cs/logoutd.8, man/cs/nologin.8, man/cs/vipw.8:
+ added new cs man pages: expiry(1), faillog(5), faillog(8), gpasswd(1),
+ groupadd(8), groupdel(8), logoutd(8), nologin(8), vipw(8).
+
+ * NEWS: typo.
+
+ * src/useradd.c, NEWS, lib/getdef.h, man/Attic/login.defs.5, man/login.defs.5.xml, src/login.c, src/newusers.c:
+ default UMASK if not specified in login.defs is 022.
+
+2006-03-06 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/pl.po: updated for 4.0.15.
+
+ * NEWS, po/gl.po:
+ updated for 4.0.15 (by Jacobo Tarrio <jtarrio@trasno.net>).
+
+ * NEWS, configure.in: schedule release 4.0.15 to 13-03-2006.
+
+2006-03-05 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: typo (s/onas Meurer/Jonas Meurer/)
+
+ * src/.cvsignore: added chgpasswd.
+
+ * po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/Makefile.am, src/chgpasswd.c, NEWS, po/POTFILES.in, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po:
+ chgpasswd: new tool (by Jonas Meurer <mejo@debian.org>).
+
+ * src/lastlog.c, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po:
+ s/Unexpected/unexpected/
+
+ * po/fr.po, po/gl.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/lastlog.c, NEWS, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po:
+ print the usage and exit if an additional argument is profided to
+ lastlog (merge 488_laslog_verify_arguments Debian patch).
+
+2006-03-02 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/chpasswd.8, man/chpasswd.8.xml:
+ fixed CAVEATS section (by Justin Pryzby <justinpryzby@users.sourceforge.net>)
+
+2006-02-28 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/passwd.1, man/passwd.1.xml:
+ fixed SYNOPSIS section (http://bugs.debian.org/352136).
+
+2006-02-23 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/ro.po: updated (by Sorin Batariuc <sorin@bonbon.net>).
+
+2006-02-21 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, lib/Makefile.am, src/Makefile.am:
+ login, nologin, su: do not link with libselinux
+ (merge 490_link_selinux_only_when_needed Debian patch).
+
+ * NEWS, src/chage.c, src/chfn.c, src/chsh.c, src/passwd.c:
+ fixed confusing error message if /proc is not mounted
+ (http://bugs.debian.org/352494
+ patch Nicolas François <nicolas.francois@centraliens.net>)
+
+ * po/ro.po:
+ updated (commited http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=347755).
+
+ * NEWS, po/ca.po: updated (by Jordi Mallach <jordi@debian.org>).
+
+2006-02-20 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/gpasswd.1.xml, man/passwd.1.xml, man/passwd.5.xml, man/pwck.8.xml, man/sg.1.xml, man/useradd.8.xml:
+ cleanups.
+
+ * po/gl.po: updated (Jacobo Tarrio <jtarrio@trasno.net>).
+
+ * NEWS, po/pt.po:
+ updated (by Miguel Figueiredo <mfigueiredo@gmail.com>).
+
+2006-02-15 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/it.po:
+ update (by Danilo Piazzalunga <danilopiazza@gmail.com>).
+
+ * po/vi.po: update (by Clytie Siddall <clytie@riverland.net.au>).
+
+ * po/sv.po: updated (by Daniel Nylander <yeager@lidkoping.net>).
+
+2006-02-09 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/fr.po: updated (by Christian Perrier <bubulle@kheops.frmug.org>).
+
+ * po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po:
+ run "make update-po".
+
+ * po/pl.po: updated.
+
+ * po/sk.po: updated (by Peter Mann <Peter.Mann@tuke.sk>).
+
+ * po/eu.po: update (by ^pi^ <pi@beobide.net>).
+
+2006-02-08 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, src/login.c:
+ merge 433_login_more_LOG_UNKFAIL_ENAB Debian patch:
+ - TOO MANY LOGIN... logged if PAM_MAXTRIES or failcount >= retries
+ (was onl test PAM_MAXTRIES),
+ - print to stderr (in addition to syslog) in case of maximum number of
+ 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)
+ - 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 don't have to close it.
+ - a HAVE_PAM_FAIL_DELAY is missing
+
+ * po/ro.po: kill one fuzzy.
+
+ * po/ro.po, NEWS: updated (by Sorin B. <sorin@bonbon.net>).
+
+ * src/gpasswd.c: s/die/catch_signals/
+
+ * src/expiry.c, src/sulogin.c: s/catch/catch_signals/
+
+ * src/su.c: /su_catch_sig/chatch_signals/
+
+2006-02-07 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/id.c, src/groups.c, libmisc/getdate.y: lint code using CC=g++.
+
+ * NEWS, src/su.c:
+ fixed pam session support (patch from Topi Miettinen; fixed #57526, #55873,
+ #57532 Debian bugs).
+
+ * NEWS:
+ fixed pam session support (patch from Topi Miettinen; fixed #57526,
+ #55873, #57532 Debian bugs).
+
+ * NEWS, src/userdel.c:
+ 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>
+
+ * NEWS, src/useradd.c: allways remove group and gshadow databases lock,
+ Fixed by Nicolas François <nicolas.francois@centraliens.net>
+ (http://bugs.debian.org/348250)
+
+ * NEWS, src/userdel.c: fixed excess audit_logger() argument.
+
+ * NEWS, lib/prototypes.h:
+ corrected prototypes in lib/prototypes.h (thre is no audit_help_log(); added
+ audit_logger() prototype).
+
+ * src/login.c: fixed missing ";" in declaration.
+
+ * man/Attic/limits.5, man/limits.5.xml:
+ fixed example limits string (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+2006-02-06 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/chage.c, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po:
+ added missing \n on display password status if password must be chaged.
+
+2006-02-04 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/useradd.c, NEWS:
+ fixed allow non-unique UID (http://bugs.debian.org/351281).
+
+2006-02-01 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/cs.po: updated (by Miroslav Kure <kurem@upcase.inf.upol.cz>).
+
+2006-01-27 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/vi.po:
+ updated (by Clytie Siddall <clytie@riverland.net.au>).
+
+2006-01-26 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/fr.po:
+ typo (fixed by Christian Perrier <bubulle@kheops.frmug.org>).
+
+ * po/sk.po: updated (by Peter Mann <Peter.Mann@tuke.sk>).
+
+2006-01-25 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/pl/grpck.8, man/pl/login.defs.5, man/pl/passwd.1, man/pl/pwck.8, man/de/passwd.1, man/es/login.1, man/es/vipw.8, man/fi/passwd.1, man/hu/passwd.1, man/id/login.1, man/it/grpck.8, man/it/pwck.8, man/ja/grpck.8, man/ja/passwd.1, man/ja/pwck.8, man/ko/login.1, man/ko/su.1:
+ fixes some issues that cause warnings when the manpages are
+ displayed (by Nicolas François <nicolas.francois@centraliens.net>).
+
+2006-01-23 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/eu.po: updated (by pi <pi@beobide.net>).
+
+ * libmisc/addgrps.c, libmisc/xmalloc.c, src/groups.c:
+ fixes after linting code using CC=g++: cast {m,re}alloc() return value to
+ proper type.
+
+2006-01-22 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/chage.1, man/Attic/passwd.5, man/Attic/su.1, man/Attic/useradd.8, man/chage.1.xml, man/passwd.5.xml, man/su.1.xml, man/useradd.8.xml:
+ uniformity and grammar fixes (by Christine Spang <spangarang@twcny.rr.com>).
+
+ * NEWS, po/ru.po: updated (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+2006-01-20 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/fr.po, NEWS:
+ updated (by Christian Perrier <bubulle@kheops.frmug.org>).
+
+2006-01-18 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, libmisc/setupenv.c, src/chage.c, src/chsh.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/grpck.c, src/grpconv.c, src/grpunconv.c, src/login.c, src/newgrp.c, src/newusers.c, src/passwd.c, src/pwck.c, src/pwconv.c, src/usermod.c, src/vipw.c:
+ variouse code cleanups for make possible compilation of shadow with
+ -Wall -Werror (by Alexander Gattin <xrgtn@yandex.ru>).
+
+ * libmisc/age.c, libmisc/shell.c, src/login.c, src/newgrp.c, src/su.c, src/sulogin.c, src/userdel.c, NEWS, lib/prototypes.h:
+ 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 Alexander Gattin <xrgtn@yandex.ru>)
+
+ * NEWS, po/el.po:
+ updated (by Konstantinos Margaritis <markos@debian.org>).
+
+2006-01-17 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * lib/exitcodes.h: new #defines:
+ #define E_CMD_NOEXEC 126 /* can't run command/shell */
+ #define E_CMD_NOTFOUND 127 /* can't find command/shell to run */
+
+2006-01-16 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/passwd.1, man/passwd.1.xml:
+ fixes after reviewed for grammatical and other small errors that detract from the
+ polish of the content to native English speakers.
+ I also went ahead and changed all gender references to be a consistent
+ "his/her" (or equivalent) - the original had a mix of just "his", just
+ "her", and occasionally "his/her".
+ (by Christine Spang <spangarang@twcny.rr.com>).
+
+ * po/it.po: updated (by Danilo Piazzalunga <danilopiazza@gmail.com>).
+
+2006-01-14 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: updated.
+
+ * libmisc/shell.c: remove DEBUG code.
+
+ * po/LINGUAS, po/gl.po, NEWS:
+ added new gl translation (by Jacobo Tarrio <jtarrio@trasno.net>).
+
+2006-01-12 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/eu.po: small update (by pi <pi@beobide.net>).
+
+2006-01-10 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/su.c: fixed compilation error.
+
+2006-01-08 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/sv.po: updated (by Daniel Nylander <yeager@lidkoping.net>)
+ http://bugs.debian.org/346449
+
+2006-01-07 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, man/Attic/useradd.8, man/useradd.8.xml:
+ better document useradd -d option: will not add the user's home directory
+ if it does not already exist (http://bugs.debian.org/154996)
+
+ * man/Attic/su.1, man/su.1.xml, po/zh_CN.po, po/zh_TW.po, NEWS, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, src/su.c:
+ added handle -c,--command option for GNU su compliance (merge
+ 437_su_-c_option Debian Patch).
+
+ * man/Attic/login.1, man/Attic/passwd.1, man/Attic/su.1, man/login.1.xml, man/passwd.1.xml, man/su.1.xml:
+ man pages cleanups.
+ (http://bugs.debian.org/341489)
+
+ * NEWS, man/Attic/nologin.8, man/Makefile.am, man/nologin.8.xml:
+ nologin(8) man pages added (merge 478_nologin.8.xml Debian patch).
+
+ * po/sk.po: updated (by Peter Mann <Peter.Mann@tuke.sk>)
+ http://bugs.debian.org/346376
+
+2006-01-06 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/id.po: updated (by Parlin Imanuel <parlin_i@yahoo.com>)
+ http://bugs.debian.org/345514
+
+ * NEWS, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/login.c:
+ added translate login prompt string (suggested by Evgeniy Dushistov).
+
+2006-01-05 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, configure.in: start work on 4.1.0.
+
+ * po/sv.po: updated (by Daniel Nylander <yeager@lidkoping.net>).
+ http://bugs.debian.org/346017
+
+2006-01-03 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: correct 4.0.14 release date (03-01-2006).
+
+ * src/Makefile.am: reverte install nologin in sbindir and use usbindir.
+
+ * po/POTFILES.in: removed src/chsh_chkshell.c.
+
+ * lib/prototypes.h: remove grdbm.c prototypes.
+
+ * lib/prototypes.h, src/Attic/chsh_chkshell.c, src/Makefile.am, src/chsh.c:
+ move check_shell() from src/chsh_chkshell.c to src/chsh.c.
+
+ * configure.in:
+ s/libpam_misc is missing/libpam_misc is missing for enable PAM support/
+
+2006-01-02 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * etc/pam.d/.cvsignore: added.
+
+ * src/su.c: indent code.
+
+ * src/su.c:
+ without it, $(su - user -c "echo \$SHELL") wont return the good value, but
+ $(su user -c "echo \$SHELL") will.
+ I think LOGNAME can also be set (this is done in setup_env, in the
+ fakelogin case).
+ (by Nicolas François <nicolas.francois@centraliens.net>)
+
+ * src/su.c:
+ simplifies how -p is handled (at least for its documentation).
+ (by Nicolas François <nicolas.francois@centraliens.net>)
+
+ * src/su.c: fixes "su - -- root" or "su - root -- -c" (it is needed if
+ the second patch is applied).
+ (by Nicolas François <nicolas.francois@centraliens.net>)
+
+ * src/su.c:
+ This second patch changes the way options are handled by getopt. Once a
+ non-su option is found, the getopt processing is stopped.
+ Whithout this patch, "su root -c ls" won't work (getopt will complain that
+ -c is not an su option).
+ (by Nicolas François <nicolas.francois@centraliens.net>).
+
+ * etc/pam.d/chage, etc/pam.d/chfn, etc/pam.d/chpasswd, etc/pam.d/chsh, etc/pam.d/groupadd, etc/pam.d/groupdel, etc/pam.d/groupmod, etc/pam.d/login, etc/pam.d/newusers, etc/pam.d/passwd, etc/pam.d/su, etc/pam.d/useradd, etc/pam.d/userdel, etc/pam.d/usermod:
+ prepare for use on Fedora Core.
+
+ * po/cs.po, po/pl.po: run "make update-po".
+
+ * src/Makefile.am: move nologin to sbindir.
+
+ * man/Attic/groupadd.8, man/groupadd.8.xml: s/gid/GID/
+
+ * man/Attic/lastlog.8, man/Attic/useradd.8, man/lastlog.8.xml, man/useradd.8.xml:
+ s/uid/UID/
+
+2005-12-30 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/tl.po: updated for 4.0.14 (by Eric Pareja <xenos@upm.edu.ph>).
+
+2005-12-27 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/ca.po:
+ updated for 4.0.14 (by Guillem Jover <guillem@debian.org>).
+
+2005-12-24 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/el.po:
+ updated for 4.0.14 (by Konstantinos Margaritis <markos@debian.org>).
+
+2005-12-17 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * doc/.cvsignore, etc/.cvsignore, lib/.cvsignore, po/.cvsignore, src/.cvsignore, .cvsignore, contrib/.cvsignore:
+ added a lot of generated files they are not listed in .cvsignore files
+ (by Danilo Piazzalunga <danilopiazza@gmail.com>).
+
+ * src/su.c:
+ fixed some comments and replace getuid() by !amroot. This removes a system
+ call and may be more readable (Nicolas François <nicolas.francois@centraliens.net>).
+
+ * man/Attic/su.1, man/su.1.xml:
+ added forgoten the SHELL argument description (by Nicolas François <nicolas.francois@centraliens.net>).
+
+ * man/Attic/useradd.8, man/useradd.8.xml:
+ s/group/user/ (cached by Nicolas François).
+
+2005-12-16 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/ko/vigr.8: added.
+
+ * po/it.po:
+ updated for 4.0.14 (by Danilo Piazzalunga <danilopiazza@gmail.com>).
+
+2005-12-15 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/pt.po:
+ updated for 4.0.14 (by Miguel Figueiredo <mfigueiredo@gmail.com>).
+
+ * src/useradd.c:
+ s/grp_update/grp_add/ in comment (by Nicolas François <nicolas.francois@centraliens.net>).
+
+ * man/Attic/login.1, man/login.1.xml:
+ added use <envar></envar> tags instead <emphasis></emphasis>.
+
+ * man/Attic/su.1, man/su.1.xml: added use <envar></envar>.
+
+ * man/Attic/su.1, man/su.1.xml:
+ updated man page after change su for use getopt_long()
+ (by Nicolas François <nicolas.francois@centraliens.net>)
+
+2005-12-14 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/fi.po:
+ updated for 4.0.14 (by Tommi Vainikainen <thv+debian@iki.fi>).
+
+ * po/ru.po: updated for 4.0.14 (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+ * man/ru/login.1, man/ru/passwd.1, man/ru/pwck.8, man/ru/vipw.8:
+ updated (by Yuri Kozlov <kozlov.y@gmail.com>_.
+
+ * doc/Attic/README.linux, doc/Makefile.am: removed.
+
+ * README, doc/Attic/README.linux:
+ move contributors list from doc/README.linux to README.
+
+ * doc/Attic/LSM, doc/Attic/README, doc/Makefile.am:
+ removed (outdated content).
+
+ * NEWS, po/cs.po:
+ updated cs.po for 4.0.14 (by Miroslav Kure <kurem@upcase.inf.upol.cz>).
+
+ * po/pl.po: updated.
+
+ * po/fr.po:
+ kill one fuzzy (by Christian Perrier <bubulle@kheops.frmug.org>).
+
+ * NEWS, po/da.po:
+ updated da.po for 4.0.14 (by Claus Hindsgaul <claus_h@image.dk>).
+
+ * po/eu.po: updated for 4.0.14 (by pi <pi@beobide.net>).
+
+ * NEWS, po/vi.po:
+ updated vi.po fo 4.0.14 (by Clytie Siddall <clytie@riverland.net.au>).
+
+2005-12-13 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: set release day for 4.0.14 to 19-12-2005.
+
+ * src/login.c:
+ removed #include "libaudit.h" (it is conditionaly included in "defines.h").
+
+ * src/su.c:
+ replaced "shell" by "shellstr". "shell" is also the name of a function.
+ (Nicolas François <nicolas.francois@centraliens.net>).
+
+ * src/vipw.c: - added missing break in case 'q'.
+
+ * NEWS, man/es/Makefile.am, man/es/vigr.8, man/es/vipw.8, man/hu/Makefile.am, man/hu/lastlog.8, man/ko/Makefile.am, man/ko/vipw.8, man/zh_CN/Makefile.am, man/zh_CN/su.1, man/zh_TW/Makefile.am, man/zh_TW/chpasswd.8, man/zh_TW/su.1:
+ added es, ko vigr(8) and vipw(8), hu lastlog(8), ko vipw(8), zh_CN su(1),
+ zh_TW chpasswd(8) and su(1),
+
+2005-12-11 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * doc/Attic/LICENSE, doc/Makefile.am, COPYING:
+ move doc/LICENSE to COPYING.
+
+ * doc/WISHLIST: remove some outdated/finished things.
+
+ * doc/Attic/README.nls, doc/Attic/README.pam, doc/Makefile.am: removed.
+
+2005-12-10 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po:
+ run "make update-po" (merge changes in su messages).
+
+ * NEWS, src/su.c:
+ added handle -s/--shell, -m/-p/preserve-environment options like GNU su
+ (based on patches from Debian submited by
+ Nicolas François <nicolas.francois@centraliens.net>)
+
+ * NEWS: updated.
+
+ * src/su.c:
+ added handle -s/--shell option like in GNU su (based on Debian patch sublmited
+ by Nicolas François <nicolas.francois@centraliens.net>).
+
+ * src/su.c:
+ make -, -l , --login option as no_argument (based on fix by Nicolas François).
+
+ * po/it.po:
+ cosmetic fixes (by Danilo Piazzalunga <danilopiazza@gmail.com>).
+
+2005-12-09 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/es/Makefile.am: s/patches/passwd/
+
+2005-12-07 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, configure.in, man/Makefile.am, man/tr/.cvsignore, man/tr/Makefile.am, man/tr/chage.1, man/tr/chfn.1, man/tr/groupadd.8, man/tr/groupdel.8, man/tr/groupmod.8, man/tr/login.1, man/tr/passwd.1, man/tr/passwd.5, man/tr/shadow.5, man/tr/su.1, man/tr/useradd.8, man/tr/userdel.8, man/tr/usermod.8:
+ added tr man pages.
+
+ * man/pt_BR/Makefile.am, man/pt_BR/passwd.5, man/zh_CN/Makefile.am, man/zh_CN/passwd.5, man/zh_TW/Makefile.am, man/zh_TW/passwd.5, NEWS, man/es/Makefile.am, man/es/passwd.5, man/hu/Makefile.am, man/hu/passwd.5:
+ added es, hu, pt_BR, zh_CN zh_TW translations passwd(5).
+
+ * man/Attic/id.1, man/Attic/pw_auth.3, man/Attic/sulogin.8:
+ regenerated.
+
+ * man/ko/Makefile.am: added su.1 to man_MANS.
+
+ * man/Makefile.am: reverte incorrect commit.
+
+ * man/Attic/pwconv.8, man/Attic/shadow.3, man/Attic/vipw.8, man/Makefile.am, man/fr/Makefile.am, man/fr/chage.1, man/fr/chfn.1, man/fr/chpasswd.8, man/fr/chsh.1, man/fr/expiry.1, man/fr/faillog.5, man/fr/faillog.8, man/fr/getspnam.3, man/fr/gpasswd.1, man/fr/groupadd.8, man/fr/groupdel.8, man/fr/groupmod.8, man/fr/groups.1, man/fr/grpck.8, man/fr/grpconv.8, man/fr/grpunconv.8, man/fr/gshadow.5, man/fr/lastlog.8, man/fr/limits.5, man/fr/login.1, man/fr/login.access.5, man/fr/login.defs.5, man/fr/logoutd.8, man/fr/newgrp.1, man/fr/newusers.8, man/fr/passwd.1, man/fr/passwd.5, man/fr/porttime.5, man/fr/pwck.8, man/fr/pwconv.8, man/fr/pwunconv.8, man/fr/sg.1, man/fr/shadow.3, man/fr/shadow.5, man/fr/su.1, man/fr/suauth.5, man/fr/useradd.8, man/fr/userdel.8, man/fr/usermod.8, man/fr/vigr.8, man/fr/vipw.8, NEWS:
+ added full set (up to date) fr man pages (by Nicolas François <nicolas.francois@centraliens.net>).
+
+2005-12-06 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/ca.po, po/cs.po, po/da.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/it.po, po/nl.po, po/ro.po, po/sk.po, po/sv.po:
+ cleanups.
+
+ * src/groupadd.c, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po:
+ s/--force /--force/
+
+ * po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/useradd.c:
+ s/--skel SKEL_DIR /--skel SKEL_DIR/
+
+ * po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/passwd.c, po/bs.po, po/ca.po, po/cs.po, po/da.po:
+ s/--delete /--delete/
+
+ * NEWS, po/ru.po:
+ updated ru translatios for 4.0.14 (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+ * po/eu.po: finish update for 4.0.14 (by pi <pi@beobide.net>).
+
+ * po/it.po:
+ updated for 4.0.14 (by Danilo Piazzalunga <danilopiazza@gmail.com>).
+
+2005-12-05 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/fr.po: updated (by Christian Perrier <bubulle@kheops.frmug.org>).
+
+ * NEWS, po/eu.po: Basque translation updated (by pi <pi@beobide.net>).
+
+ * po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/su.c, src/usermod.c, po/bs.po:
+ s/LOGIN/login/ in usage() output.
+
+2005-12-03 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/vipw.c, NEWS, man/Attic/vipw.8, man/vipw.8.xml, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po:
+ rewrited vipw for use getopt_long().
+
+ * man/Attic/passwd.1, man/passwd.1.xml: cleanups.
+
+ * man/ko/Makefile.am: commented newgrp.1 (must be updated).
+
+2005-12-02 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Makefile.am: update-po target added.
+
+ * man/Attic/pwck.8, man/pwck.8.xml: document -q option.
+
+ * NEWS, lib/getdef.c:
+ $MAIL_FILE is used in userdel and usermod, $MD5_CRYPT_ENAB
+ is used by crypt_make_salt, which is used by chpasswd, gpasswd and newusers.
+ Both variables moved to PAM not dependent (447_missing_login.defs_variables
+ Debian patch).
+
+ * NEWS, src/su.c:
+ export $USER and $SHELL as well as $HOME (http://bugs.debian.org/11003 and
+ http://bugs.debian.org/11189).
+
+ * NEWS, man/Attic/login.1, man/login.1.xml:
+ document how to initiate a trusted path on linux
+ (http://bugs.debian.org/305600).
+
+ * NEWS, src/chage.c:
+ fix chage display when the last change field is set to 0.
+ This is consistent with PAM (merge 427_chage_expiry_0 Debian patch).
+
+2005-12-01 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * configure.in: added man/fi/Makefile to AC_CONFIG_FILES().
+
+ * man/zh_TW/chfn.1, man/zh_TW/chsh.1, man/zh_TW/groupadd.8, man/zh_TW/groupdel.8, man/zh_TW/groupmod.8, man/zh_TW/newgrp.1, man/zh_TW/useradd.8, man/zh_TW/userdel.8, man/zh_TW/usermod.8, man/pt_BR/gpasswd.1, man/pt_BR/groupadd.8, man/pt_BR/groupdel.8, man/pt_BR/groupmod.8, man/pt_BR/shadow.5, man/ru/Attic/pw_auth.3, man/ru/chage.1, man/ru/chfn.1, man/ru/chpasswd.8, man/ru/chsh.1, man/ru/expiry.1, man/ru/faillog.5, man/ru/faillog.8, man/ru/gpasswd.1, man/ru/groupadd.8, man/ru/groupdel.8, man/ru/groupmems.8, man/ru/groupmod.8, man/ru/groups.1, man/ru/grpck.8, man/ru/gshadow.5, man/ru/id.1, man/ru/lastlog.8, man/ru/limits.5, man/ru/login.1, man/ru/login.access.5, man/ru/login.defs.5, man/ru/logoutd.8, man/ru/newgrp.1, man/ru/newusers.8, man/ru/passwd.1, man/ru/passwd.5, man/ru/porttime.5, man/ru/pwck.8, man/ru/pwconv.8, man/ru/sg.1, man/ru/shadow.3, man/ru/shadow.5, man/ru/su.1, man/ru/suauth.5, man/ru/sulogin.8, man/ru/useradd.8, man/ru/userdel.8, man/ru/usermod.8, man/ru/vipw.8, man/zh_CN/chfn.1, man/zh_CN/chpasswd.8, man/zh_CN/chsh.1, man/zh_CN/groupadd.8, man/zh_CN/groupdel.8, man/zh_CN/groupmod.8, man/zh_CN/newgrp.1, man/zh_CN/useradd.8, man/zh_CN/userdel.8, man/zh_CN/usermod.8, man/ko/chfn.1, man/ko/chsh.1, man/ko/groups.1, man/ko/id.1, man/ko/login.1, man/ko/newgrp.1, man/ko/passwd.5, man/ko/su.1, man/pl/Attic/pw_auth.3, man/pl/chage.1, man/pl/chfn.1, man/pl/chpasswd.8, man/pl/chsh.1, man/pl/expiry.1, man/pl/faillog.5, man/pl/faillog.8, man/pl/gpasswd.1, man/pl/groupadd.8, man/pl/groupdel.8, man/pl/groupmems.8, man/pl/groupmod.8, man/pl/groups.1, man/pl/grpck.8, man/pl/id.1, man/pl/lastlog.8, man/pl/limits.5, man/pl/login.1, man/pl/login.access.5, man/pl/login.defs.5, man/pl/logoutd.8, man/pl/newgrp.1, man/pl/newusers.8, man/pl/passwd.1, man/pl/passwd.5, man/pl/porttime.5, man/pl/pwck.8, man/pl/pwconv.8, man/pl/shadow.3, man/pl/shadow.5, man/pl/su.1, man/pl/suauth.5, man/pl/sulogin.8, man/pl/useradd.8, man/pl/userdel.8, man/pl/usermod.8, man/pl/vipw.8, man/it/chage.1, man/it/chfn.1, man/it/chpasswd.8, man/it/chsh.1, man/it/expiry.1, man/it/faillog.5, man/it/faillog.8, man/it/gpasswd.1, man/it/groupadd.8, man/it/groupdel.8, man/it/groupmod.8, man/it/groups.1, man/it/grpck.8, man/it/id.1, man/it/lastlog.8, man/it/login.1, man/it/newgrp.1, man/it/newusers.8, man/it/passwd.1, man/it/passwd.5, man/it/porttime.5, man/it/pwck.8, man/it/pwconv.8, man/it/shadow.3, man/it/shadow.5, man/it/su.1, man/it/useradd.8, man/it/userdel.8, man/it/usermod.8, man/ja/Attic/pw_auth.3, man/ja/chage.1, man/ja/chfn.1, man/ja/chpasswd.8, man/ja/chsh.1, man/ja/expiry.1, man/ja/faillog.5, man/ja/faillog.8, man/ja/gpasswd.1, man/ja/groupadd.8, man/ja/groupdel.8, man/ja/groupmod.8, man/ja/groups.1, man/ja/grpck.8, man/ja/id.1, man/ja/lastlog.8, man/ja/limits.5, man/ja/login.1, man/ja/login.access.5, man/ja/login.defs.5, man/ja/logoutd.8, man/ja/newgrp.1, man/ja/newusers.8, man/ja/passwd.1, man/ja/passwd.5, man/ja/porttime.5, man/ja/pwck.8, man/ja/pwconv.8, man/ja/shadow.3, man/ja/shadow.5, man/ja/su.1, man/ja/suauth.5, man/ja/sulogin.8, man/ja/useradd.8, man/ja/userdel.8, man/ja/usermod.8, man/ja/vipw.8, man/de/chfn.1, man/de/chsh.1, man/de/groups.1, man/de/login.1, man/de/newgrp.1, man/de/passwd.1, man/de/passwd.5, man/de/su.1, man/de/vipw.8, man/es/login.1, man/es/newgrp.1, man/es/passwd.1, man/es/su.1, man/fi/chfn.1, man/fi/chsh.1, man/fi/passwd.1, man/fr/chage.1, man/fr/chpasswd.8, man/fr/chsh.1, man/fr/faillog.5, man/fr/gpasswd.1, man/fr/groups.1, man/fr/id.1, man/fr/newgrp.1, man/fr/passwd.1, man/fr/passwd.5, man/fr/shadow.5, man/fr/su.1, man/fr/useradd.8, man/fr/userdel.8, man/fr/usermod.8, man/hu/chfn.1, man/hu/chsh.1, man/hu/gpasswd.1, man/hu/groups.1, man/hu/id.1, man/hu/login.1, man/hu/newgrp.1, man/hu/passwd.1, man/hu/su.1, NEWS, man/cs/groups.1, man/cs/id.1, man/cs/lastlog.8, man/cs/passwd.5, man/cs/shadow.5, man/cs/su.1:
+ convert all translated man pages to UFT-8.
+
+ * NEWS, src/userdel.c:
+ fix incorrect audit record in userdel (https://bugzilla.redhat.com/bugzilla/174392).
+
+ * po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, src/passwd.c:
+ s/--all /--all/
+
+ * po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po:
+ update by some informations about translators (by Christian Perrier) and run "make update-po".
+
+2005-11-30 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, src/su.c:
+ if an password is expired, su should propose to change this password
+ (fixed http://bugs.debian.org/321384).
+
+ * src/Makefile.am, src/login.c, NEWS:
+ added auditing support (based on Fedora patch for login from util-linux).
+
+ * src/useradd.c: remove use rflg.
+
+ * man/ru/Makefile.am: typo.
+
+ * po/pl.po: partialy updated.
+
+ * po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po:
+ run "make update-po".
+
+ * NEWS, src/useradd.c: merge PUG fixes from RedHat patch.
+
+2005-11-29 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/it.po:
+ updated (by Danilo Piazzalunga <danilopiazza@gmail.com>).
+
+ * man/ru/pwconv.8, man/ru/pwunconv.8, man/ru/sg.1, man/ru/shadow.3, man/ru/shadow.5, man/ru/su.1, man/ru/suauth.5, man/ru/sulogin.8, man/ru/useradd.8, man/ru/userdel.8, man/ru/usermod.8, man/ru/vigr.8, man/ru/vipw.8, NEWS, man/ru/Attic/pw_auth.3, man/ru/Makefile.am, man/ru/chage.1, man/ru/chfn.1, man/ru/chpasswd.8, man/ru/chsh.1, man/ru/expiry.1, man/ru/faillog.5, man/ru/faillog.8, man/ru/getspnam.3, man/ru/gpasswd.1, man/ru/groupadd.8, man/ru/groupdel.8, man/ru/groupmems.8, man/ru/groupmod.8, man/ru/groups.1, man/ru/grpck.8, man/ru/grpconv.8, man/ru/grpunconv.8, man/ru/gshadow.5, man/ru/id.1, man/ru/lastlog.8, man/ru/limits.5, man/ru/login.1, man/ru/login.access.5, man/ru/login.defs.5, man/ru/logoutd.8, man/ru/newgrp.1, man/ru/newusers.8, man/ru/passwd.1, man/ru/passwd.5, man/ru/porttime.5, man/ru/pwck.8:
+ added full set of ru man pages (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+2005-11-25 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, src/Makefile.am, src/nologin.c: added nologin program.
+
+ * NEWS, src/su.c: rewrited for use getopt_long().
+
+2005-11-17 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/zh_CN.po: updated (by Ming Hua <minghua@rice.edu>).
+
+2005-11-12 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/usermod.8, man/usermod.8.xml:
+ rewrited for document long options.
+
+ * NEWS, src/vipw.c:
+ added a "quiet" mode (http://bugs.debian.org/190252.
+
+ * po/de.po:
+ fixed wrong translation in german po file (http://bugs.debian.org/338373
+ by Nico Golde <nico@ngolde.de>).
+
+ * NEWS, man/Makefile.am, man/fi/.cvsignore, man/fi/Makefile.am, man/fi/chfn.1, man/fi/chsh.1, man/fi/passwd.1, man/fi/su.1:
+ added fi chfn(1), chsh(1), passwd(1), su(1).
+
+ * NEWS, man/it/Makefile.am, man/it/newusers.8: added it newusers(8).
+
+ * NEWS, po/fr.po:
+ updated (by Christian Perrier <bubulle@kheops.frmug.org>).
+
+2005-11-10 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, src/Makefile.am, src/newgrp.c:
+ added auditing support for newgrp (by Steve Grubb <sgrubb@redhat.com>).
+
+ * NEWS, configure.in, libmisc/audit_help.c:
+ switch over to a new logging function (by Steve Grubb <sgrubb@redhat.com>).
+
+ * README: typo.
+
+2005-11-06 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/ru.po: updated (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+2005-11-05 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * configure.in:
+ s/logdir/shadow_cv_logdir/ fix wrong var name (by Mike Frysinger <vapier@gentoo.org>).
+
+ * man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/pw_auth.3.xml, man/Attic/pwck.8, man/Attic/sg.1, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/su.1, man/Attic/suauth.5, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/newusers.8.xml, man/passwd.1.xml, man/passwd.5.xml, man/porttime.5.xml, man/pwck.8.xml, man/sg.1.xml, man/shadow.3.xml, man/shadow.5.xml, man/su.1.xml, man/suauth.5.xml, man/sulogin.8.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml, README, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/expiry.1, man/Attic/faillog.5, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/gshadow.5, man/Attic/lastlog.8, man/Attic/limits.5, man/Attic/login.1, man/Attic/login.access.5, man/Attic/login.defs.5, man/Attic/logoutd.8, man/Attic/newgrp.1, man/chage.1.xml, man/chfn.1.xml, man/chpasswd.8.xml, man/chsh.1.xml, man/expiry.1.xml, man/faillog.5.xml, man/faillog.8.xml, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/gshadow.5.xml, man/id.1.xml, man/lastlog.8.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/login.defs.5.xml, man/logoutd.8.xml, man/newgrp.1.xml:
+ move information about all shadow man pages authors from man pages to README file.
+
+ * src/userdel.c: added two new error messages to translated phrases.
+
+ * NEWS, src/userdel.c:
+ remove the user's group unless it is not really a user-private group
+ (based on FC patch).
+
+2005-11-04 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/usermod.c: fix long name options name in long_options[].
+
+2005-11-02 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/userdel.c: indent source code.
+
+ * NEWS, src/userdel.c:
+ make the userdel -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),
+
+ * NEWS, man/Attic/login.1, man/login.1.xml:
+ better explain the respective roles of login, init and getty with regards
+ to the utmp file (merge 440_manpages-login.1 Debian patch).
+
+ * man/Attic/userdel.8, man/userdel.8.xml:
+ aphabetic order options description.
+
+ * NEWS, man/Attic/userdel.8, man/userdel.8.xml:
+ document the -f option; document the group removal behavior (merge
+ 455_userdel.8.xml Debian patch).
+
+ * NEWS, man/Attic/groupadd.8, man/Attic/useradd.8, man/groupadd.8.xml, man/useradd.8.xml:
+ document that useradd/groupadd refuse adding entries already in an
+ external database (http://bugs.debian.org/282184).
+
+ * NEWS, libmisc/sulog.c:
+ log in successful/failed su through syslog (http://bugs.debian.org/190215).
+
+ * NEWS, man/it/groupdel.8, man/it/passwd.1, man/it/pwconv.8, man/it/useradd.8, man/it/userdel.8, man/it/usermod.8:
+ updated it groupdel(8), passwd(1), pwconv(8), useradd(8), userdel(8), usermod(8) man pages
+ (merge 205_it-manpages Debian patch).
+
+ * man/pt_BR/gpasswd.1: merge 204_pt_BR-manpages Debian patch.
+
+2005-10-31 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/porttime.5, man/Attic/pwck.8, man/Attic/shadow.3, man/porttime.5.xml, man/pwck.8.xml:
+ improvements by Yuri Kozlov <kozlov.y@gmail.com>.
+
+ * NEWS, po/tl.po: updated (by Eric Pareja <xenos@upm.edu.ph>).
+
+ * po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/su.c, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po:
+ remove "." from su message.
+
+ * po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po:
+ "make update-po".
+
+ * src/usermod.c: cleanups in usage() output.
+
+ * src/usermod.c: indent code.
+
+ * NEWS, src/usermod.c:
+ rewrited for use getopt_long() (Christian Perrier <bubulle@kheops.frmug.org>).
+
+2005-10-24 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/uk.po: updated (by Eugeniy Meshcheryakov <eugen@univ.kiev.ua>).
+
+2005-10-20 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/faillog.5, man/Attic/groupmems.8, man/Attic/limits.5, man/Attic/login.1, man/Attic/login.access.5, man/chpasswd.8.xml, man/groupmems.8.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/Attic/chpasswd.8:
+ bunch of cleanups (Yuri Kozlov <kozlov.y@gmail.com>).
+
+2005-10-19 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/userdel.c, src/usermod.c, lib/pam_defs.h, libmisc/pam_pass.c, libmisc/pwdcheck.c, src/chage.c, src/chfn.c, src/chpasswd.c, src/chsh.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/login.c, src/newusers.c, src/su.c, src/useradd.c:
+ Simplifications: move all per shadow tool declared struct pam_conv conv
+ from src/*c to lib/pam_defs.h. #include "pam_defs.h" instead <security/pam_appl.h>
+ and <security/pam_misc.h>.
+ Patch partialy based on openpam fixes by Rob Holland <rob@inversepath.com>.
+
+ * NEWS, lib/commonio.c:
+ fixed grpck segmentation fault on using -s when /etc/gshadow is empty (fix by
+ Tomasz Lemiech <szpajder@staszic.waw.pl>).
+
+2005-10-17 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/faillog.5, man/faillog.5.xml:
+ typos (by A Costa <agcosta@gis.net>).
+
+2005-10-16 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/chage.1, man/Attic/chpasswd.8, man/chage.1.xml, man/chpasswd.8.xml:
+ typos (by A Costa <agcosta@gis.net>).
+
+ * NEWS, po/sv.po: updated (by Daniel Nylander <yeager@lidkoping.net>).
+
+2005-10-13 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/de/newgrp.1, man/es/Makefile.am, man/es/newgrp.1, man/zh_CN/Makefile.am, man/zh_CN/newgrp.1, man/zh_TW/Makefile.am, man/zh_TW/newgrp.1, NEWS, man/de/Makefile.am:
+ newgrp(1): added de, es, zh_CN, zh_TW translations.
+
+2005-10-12 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/gpasswd.1, man/gpasswd.1.xml:
+ move "Notes about group passwords" section from passwd man page.
+
+ * src/passwd.c, NEWS, man/Attic/passwd.1, man/passwd.1.xml:
+ remove handle -f, -g and -s options in passwd.
+
+ * man/userdel.8.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/logoutd.8.xml, man/newgrp.1.xml, man/newusers.8.xml, man/pwconv.8.xml, man/sg.1.xml:
+ use locase in <refentrytitle>.
+
+ * man/Attic/pw_auth.3, man/Attic/pw_auth.3.xml, man/Attic/shadow.3, man/shadow.3.xml:
+ added refmiscinfo class="sectdesc">Library Calls</refmiscinfo> in <refmeta>.
+
+ * man/Attic/pwconv.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/Attic/vipw.8, man/newusers.8.xml, man/pwconv.8.xml, man/sulogin.8.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml, man/vipw.8.xml, man/Attic/chpasswd.8, man/Attic/faillog.8, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmod.8, man/Attic/grpck.8, man/Attic/lastlog.8, man/Attic/logoutd.8, man/Attic/newusers.8, man/chpasswd.8.xml, man/faillog.8.xml, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/grpck.8.xml, man/lastlog.8.xml, man/logoutd.8.xml:
+ added <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+ in <refmeta>.
+
+ * man/Attic/login.defs.5, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/shadow.5, man/Attic/suauth.5, man/login.defs.5.xml, man/passwd.5.xml, man/porttime.5.xml, man/shadow.5.xml, man/suauth.5.xml, man/Attic/login.access.5, man/limits.5.xml, man/login.access.5.xml, man/Attic/faillog.5, man/Attic/gshadow.5, man/Attic/limits.5, man/faillog.5.xml, man/gshadow.5.xml:
+ added <refmiscinfo class="sectdesc">File Formats and Conversions</refmiscinfo>
+ in <refmeta>.
+
+ * man/Attic/pwconv.8, man/Attic/suauth.5, man/Attic/vipw.8, man/pwconv.8.xml, man/suauth.5.xml, man/vipw.8.xml:
+ remove <refentryinfo><date></date></refentryinfo> and <refmiscinfo class='date'> tags.
+
+ * man/Attic/newgrp.1, man/Attic/sg.1, man/newgrp.1.xml, man/sg.1.xml:
+ added <refmiscinfo class="sectdesc">User Commands</refmiscinfo> tag.
+
+2005-10-11 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, configure.in: start work on 4.0.14.
+
+2005-10-10 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: move release 4.0.13 date to 10-10-2005.
+
+ * NEWS: added infor about removed duplicated pam_start() in chage.
+
+ * NEWS: updated.
+
+ * man/Makefile.am: added sg.1.xml to man_XMANS.
+
+ * man/Attic/chage.1, man/chage.1.xml:
+ cleanups (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+ * man/Attic/newgrp.1, man/newgrp.1.xml:
+ use <filename> in few more places.
+
+ * man/Attic/newgrp.1, man/newgrp.1.xml:
+ better newgrp description (http://bugs.debian.org/325558).
+
+2005-10-04 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/chpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/newusers.c, src/useradd.c, src/userdel.c, src/usermod.c:
+ remove using pam_chauthtok().
+
+ * src/chsh.c: finish PAM support using pam_start() & co.
+
+ * src/chage.c: remove using pam_chauthtok() on finish chage.
+
+ * src/chfn.c:
+ use E_NOPERM in more places. remove using pam_chauthtok() on finish chfn.
+
+ * src/chfn.c: cleanups.
+
+ * src/chage.c:
+ removed duplicaded not moved PAM code) was introduced during merge
+ shadow-4.0.4.1-owl-pam-auth.diff patch).
+
+ * src/chfn.c: finish PAM support.
+
+2005-10-03 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/chfn.1, man/Attic/chsh.1, man/chfn.1.xml, man/chsh.1.xml:
+ cleanups (by Alexander Gattin <xrgtn@yandex.ru>).
+
+2005-10-02 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, src/userdel.c:
+ 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)
+
+2005-10-01 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/vipw.8.xml, man/Attic/chage.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/faillog.8, man/Attic/grpck.8, man/Attic/lastlog.8, man/Attic/limits.5, man/Attic/login.1, man/Attic/login.access.5, man/Attic/passwd.1, man/Attic/porttime.5, man/Attic/pw_auth.3.xml, man/Attic/shadow.3, man/Attic/su.1, man/Attic/suauth.5, man/chage.1.xml, man/chpasswd.8.xml, man/chsh.1.xml, man/faillog.8.xml, man/groupmems.8.xml, man/grpck.8.xml, man/lastlog.8.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/passwd.1.xml, man/porttime.5.xml, man/shadow.3.xml, man/su.1.xml, man/suauth.5.xml, man/sulogin.8.xml:
+ s/<emphasis remap='B'>/<emphasis>/
+
+ * man/Attic/sg.1, man/sg.1.xml: use <command> instead <emphasis>.
+
+ * man/newgrp.1.xml, man/sg.1.xml, man/chage.1.xml, man/chsh.1.xml, man/login.defs.5.xml:
+ s/\. /\. /
+
+ * man/Attic/shadow.5, man/shadow.5.xml:
+ better document "!" and "*" fields in /etc/shadow
+ (based on 441_manpages-shadow.5 patch from Debian).
+
+ * man/Attic/newgrp.1, man/newgrp.1.xml:
+ SHADOWPWD was removed (always enabled)
+ (based on 446_newgrp.1_no_SHADOWPWD patch from Debian).
+
+ * po/ru.po: updated for 4.0.13 (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+2005-09-30 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: cleanups.
+
+ * man/Attic/vipw.8, man/vipw.8.xml, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/expiry.1, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupmems.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/gshadow.5, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/limits.5, man/Attic/login.1, man/Attic/login.access.5, man/Attic/login.defs.5, man/Attic/logoutd.8, man/Attic/newgrp.1, man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/pw_auth.3, man/Attic/pw_auth.3.xml, man/Attic/pwck.8, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/su.1, man/Attic/suauth.5, man/Attic/sulogin.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/chage.1.xml, man/chpasswd.8.xml, man/chsh.1.xml, man/expiry.1.xml, man/faillog.8.xml, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/gshadow.5.xml, man/id.1.xml, man/lastlog.8.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/login.defs.5.xml, man/logoutd.8.xml, man/newgrp.1.xml, man/newusers.8.xml, man/passwd.1.xml, man/passwd.5.xml, man/porttime.5.xml, man/pwck.8.xml, man/pwconv.8.xml, man/shadow.3.xml, man/shadow.5.xml, man/su.1.xml, man/suauth.5.xml, man/sulogin.8.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml:
+ next round of cleanups.
+
+ * man/Makefile.am: added rules for id.1, pw_auth.3 and sulogin.8.
+
+ * libmisc/setupenv.c:
+ during the changes on libmisc/setupenv.c, a piece of code was moved
+ without its comment (merge 449_comment_missplaced Debian patch).
+
+2005-09-29 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/chfn.1, man/Attic/chsh.1, man/Attic/groupadd.8, man/Attic/newusers.8, man/Attic/pwconv.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/chfn.1.xml, man/chsh.1.xml, man/groupadd.8.xml, man/newusers.8.xml, man/pwconv.8.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml, NEWS:
+ added missing references to /etc/login.defs and login.defs(5)
+ (Christian Perrier <bubulle@kheops.frmug.org>).
+
+2005-09-28 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: s/XSL/XSLT/
+
+ * po/pl.po: few updates.
+
+ * man/Attic/passwd.1, man/passwd.1.xml:
+ -i option description is back (lost on rewrite and pointed by
+ Miroslav Kure <kurem@upcase.inf.upol.cz>).
+
+ * po/cs.po:
+ updated for 4.0.13 (by Miroslav Kure <kurem@upcase.inf.upol.cz>).
+
+2005-09-27 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: updated.
+
+ * configure.in: fixes for correct handle --with{,out}-<feature>.
+
+ * configure.in:
+ use @<:@ @:>@ instead ( ) inside AC_HELP_STRING() and s/feactures/features/
+ (based on fixes by Mike Frysinger <vapier@gentoo.org>).
+
+ * po/da.po: updated for 4.0.13 (by Claus Hindsgaul <claus_h@image.dk>).
+
+ * po/es.po: updated for 4.0.13 (by Ruben Porras <nahoo@inicia.es>).
+
+2005-09-26 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, libmisc/failure.c:
+ use "%c" in strftime() output (based on patch from
+ http://bugs.debian.org/89902 by Christian Perrier <bubulle@debian.org>)
+
+ * man/Attic/getspnam.3, man/Attic/shadow.3, man/shadow.3.xml:
+ added <refname>getspnam</refname> to <refnamediv>.
+
+ * man/Attic/sg.1, man/sg.1.xml: fixed <cmdsynopsis>.
+
+ * man/Attic/sg.1, man/Makefile.am, man/sg.1.xml:
+ added separated sg(1) man page.
+
+2005-09-24 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * lib/commonio.c, NEWS:
+ don't assume selinux is enabled if is_selinux_enabled() returns -1
+ (merge isSelinuxEnabled FC patch by Jeremy Katz <katzj@redhat.com>).
+
+ * po/ro.po: updated (by Sorin Batariuc <sorin@bonbon.net>).
+
+2005-09-21 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: schedule release 4.0.13 to 03-10-2005.
+
+2005-09-20 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/expiry.1, man/Attic/faillog.5, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/gshadow.5, man/Attic/lastlog.8, man/Attic/limits.5, man/Attic/login.1, man/Attic/login.defs.5, man/Attic/logoutd.8, man/Attic/newgrp.1, man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/pwck.8, man/Attic/pwconv.8, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/su.1, man/Attic/suauth.5, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/Attic/vipw.8:
+ regenerate all roff man pages using DocBook XSL Stylesheets 1.69.1.
+
+ * man/logoutd.8.xml: fixed id inside <refentry>.
+
+ * man/login.1.xml, man/logoutd.8.xml, man/newgrp.1.xml, man/passwd.1.xml, man/passwd.5.xml, man/porttime.5.xml, man/pwck.8.xml, man/shadow.3.xml, man/shadow.5.xml, man/su.1.xml, man/suauth.5.xml, man/sulogin.8.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml, man/chage.1.xml, man/chfn.1.xml, man/chsh.1.xml, man/expiry.1.xml, man/faillog.5.xml, man/faillog.8.xml, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/gshadow.5.xml, man/id.1.xml, man/lastlog.8.xml, man/limits.5.xml:
+ added missing <para></para> inside <listitem> tags for pass correctly xmllint.
+
+ * man/Attic/login.access.5, man/login.access.5.xml:
+ rewrited FILES section.
+
+ * man/login.access.5.xml: cleanups.
+
+2005-09-15 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, man/Attic/passwd.5, man/passwd.5.xml:
+ rewrited based on work by Greg Wooledge <greg@wooledge.org>
+ http://bugs.debian.org/328113
+
+2005-09-13 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/ro.po: updates (by Sorin Batariuc <sorin@bonbon.net>).
+
+2005-09-07 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/chage.c, src/chfn.c, src/chpasswd.c, src/chsh.c, src/expiry.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/groups.c, src/grpck.c, src/id.c, src/login.c, src/login_nopam.c, src/logoutd.c, src/newgrp.c, src/newusers.c, src/passwd.c, src/pwck.c, src/pwconv.c, src/pwunconv.c, src/su.c, src/suauth.c, src/sulogin.c, src/useradd.c, src/userdel.c, src/usermod.c, src/vipw.c:
+ remove empty lines after comment.
+
+ * src/useradd.c: group all #include.
+
+ * po/fr.po:
+ updated (by Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>).
+
+2005-09-06 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/gpasswd.c: remove exit(1) after failure().
+
+ * src/usermod.c: consolidate few #ifdef WITH_AUDIT .. #endif sections.
+
+2005-09-05 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/Makefile.am: added missing $(LDADD) in gpasswd_LDADD.
+
+ * NEWS, libmisc/limits.c:
+ fixed setup max address space limits (added missing break statement in case)
+ spoted by Lasse Collin <lasse.collin@tukaani.org>
+ (fix for non-PAM case)
+
+ * configure.in: try find and use by default feactures:
+ with_audit="yes"
+ with_libcrack="no"
+ with_libpam="yes"
+ with_libskey="no"
+ with_selinux="yes"
+ Report on finish also S/Key and CrackLib support.
+
+ * configure.in: cleanups.
+
+ * src/Makefile.am: sort *_LDADD.
+
+ * src/Makefile.am: added missing gpasswd_LDADD = $(LIBAUDIT).
+
+ * src/groupadd.c, src/groupdel.c, src/groupmod.c, src/useradd.c, src/userdel.c, src/usermod.c, lib/defines.h, lib/prototypes.h, src/chage.c, src/gpasswd.c:
+ indent code.
+
+ * libmisc/Makefile.am: sort libmisc_a_SOURCES elements.
+
+ * libmisc/audit_help.c: added shadow copyright text and indent file.
+
+ * libmisc/audit_help.c:
+ patr of auditing support not added on commiting audit changes.
+
+ * src/Makefile.am: s/AUDIT/LIBAUDIT/
+
+ * configure.in: added reporting on finish is auditing is enabled.
+ Change to use shared libaudit. Aded missing AC_SUBST(LIBAUDIT).
+ Break some to log lines.
+
+ * src/Makefile.am, src/chage.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/useradd.c, src/userdel.c, src/usermod.c, NEWS, configure.in, lib/defines.h, lib/prototypes.h, libmisc/Makefile.am:
+ 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,
+ useradd, userdel, usermod.
+
+ * po/pt.po: finish update (by Christian Perrier <bubulle@debian.org>).
+
+2005-09-04 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/pt.po, NEWS: updated (by Miguel Figueiredo <elmig@debianpt.org>).
+
+2005-09-03 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/passwd.c:
+ fix warning (initialization makes pointer from integer without a cast) in
+ long_options[] entry.
+
+ * po/fr.po, NEWS:
+ partialy updated (by Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>).
+
+2005-09-02 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/chage.c: indent source sode.
+
+ * src/chage.c, src/chfn.c, src/chsh.c, src/passwd.c, NEWS:
+ change to use new selinux API for selinux_check_passwd_access()
+ (patch from Fedora by Dan Walsh <dwalsh@redhat.com>).
+
+2005-09-01 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/newgrp.1, man/newgrp.1.xml: finished rewrite.
+
+ * etc/login.defs: moved from login.defs.linux.
+
+ * src/login_nopam.c: use #ident.
+
+ * etc/Attic/login.defs.hurd, etc/Attic/login.defs.linux, etc/Makefile.am:
+ remove login.defs.hurd and login.defs.linux.
+
+ * src/groupadd.c, src/useradd.c:
+ as same as in man pages to useradd and groupadd change to 1000 default
+ GID_MIN and UID_MIN (if not found in login.defs).
+
+ * etc/login.defs: s/chkpasswd/chpasswd/
+
+2005-08-31 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Makefile.am, man/chsh.1.xml, man/limits.5.xml, man/login.access.5.xml, man/newgrp.1.xml, man/newusers.8.xml:
+ fixed id= in <refentry>.
+
+ * man/Attic/gpasswd.1, man/gpasswd.1.xml:
+ fixed refentry id (must be 'gpasswd.1').
+
+ * man/Makefile.am, man/newgrp.1.xml:
+ raw version converted from roff using doclifter.
+
+ * lib/exitcodes.h: new exit codes:
+ #define E_PASSWD_NOTFOUND 14 /* not found password file */
+ #define E_GROUP_NOTFOUND 16 /* not found group file */
+ #define E_GSHADOW_NOTFOUND 17 /* not found shadow group file */
+
+ * man/Attic/chage.1, man/chage.1.xml, lib/exitcodes.h:
+ change to 15 (from 14) exit code in chage when shadow not found.
+
+ * src/Attic/chsh_chkshell.c, src/chage.c, src/chfn.c, src/chpasswd.c, src/chsh.c, src/expiry.c, src/faillog.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/groups.c, src/grpck.c, src/grpconv.c, src/grpunconv.c, src/id.c, src/lastlog.c, src/login.c, src/login_nopam.c, src/logoutd.c, src/newgrp.c, src/newusers.c, src/passwd.c, src/pwck.c, src/pwconv.c, src/pwunconv.c, src/su.c, src/sulogin.c, src/useradd.c, src/userdel.c, src/usermod.c, src/vipw.c, libmisc/pwd_init.c, libmisc/pwdcheck.c, libmisc/rlogin.c, libmisc/salt.c, libmisc/setugid.c, libmisc/setupenv.c, libmisc/shell.c, libmisc/strtoday.c, libmisc/sub.c, libmisc/sulog.c, libmisc/ttytype.c, libmisc/tz.c, libmisc/ulimit.c, libmisc/utmp.c, libmisc/valid.c, libmisc/xmalloc.c, libmisc/addgrps.c, libmisc/age.c, libmisc/basename.c, libmisc/chkname.c, libmisc/chowndir.c, libmisc/chowntty.c, libmisc/console.c, libmisc/copydir.c, libmisc/entry.c, libmisc/env.c, libmisc/failure.c, libmisc/fields.c, libmisc/hushed.c, libmisc/isexpired.c, libmisc/limits.c, libmisc/list.c, libmisc/log.c, libmisc/loginprompt.c, libmisc/mail.c, libmisc/motd.c, libmisc/myname.c, libmisc/obscure.c, libmisc/pam_pass.c, libmisc/pwd2spwd.c, NEWS, lib/Attic/getpass.c, lib/Attic/rcsid.h, lib/Makefile.am, lib/commonio.c, lib/encrypt.c, lib/fputsx.c, lib/getdef.c, lib/groupio.c, lib/gshadow.c, lib/lockpw.c, lib/port.c, lib/pwauth.c, lib/pwio.c, lib/sgetgrent.c, lib/sgetpwent.c, lib/sgetspent.c, lib/sgroupio.c, lib/shadow.c, lib/shadowio.c:
+ use #ident preprocesor directive istead RCID macro with content similar
+ to example described in ident(1) man page (modern compilers like latest GCC
+ removes not used functions by global optimization).
+ So "ident /usr/bin/passwd" will show again some useable informations.
+
+ * man/Makefile.am: added support for regenerate roff files from XML.
+ Added depeing shadow-man-pages.pot on $(man_XMANS).
+
+2005-08-30 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/login.1, man/login.1.xml, NEWS:
+ added securetty(5) to SEE ALSO section (fixed Debian bug http://bugs.debian.org/325773).
+
+ * po/pl.po: more updates.
+
+ * configure.in:
+ typo in handle --with-selinux. Fixes in xsltproc detection.
+
+ * autogen.sh:
+ added --enable-man and --enable-maintainer-mode to configure options.
+
+ * man/Attic/chage.1, man/chage.1.xml, NEWS:
+ added EXIT VALUES section (by Nicolas François <nicolas.francois@centraliens.net>).
+
+ * man/Attic/passwd.1, man/passwd.1.xml:
+ remove "Password expiry information" section (all options are described now
+ in OPTIONS section). Describe -a and -k options.
+
+ * NEWS, src/su.c:
+ fixed twice copy enviroment which causes auth problems (bug was introduced in 4.0.12;
+ fix by Nicolas François <nicolas.francois@centraliens.net>).
+
+ * src/passwd.c, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po:
+ s/Incorrect password for `%s'/Incorrect password for %s/ (one phrase for translate less).
+
+ * src/login.c, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po:
+ s/login: failure forking: %s/%s: failure forking: %s/ (one phrase for translate less).
+
+ * po/pl.po: partialy updated.
+
+2005-08-29 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * lib/exitcodes.h, src/chage.c:
+ s/E_NOT_SHADOWED/E_SHADOW_NOTFOUND/ and change value of this exit code to 14.
+
+ * NEWS, lib/exitcodes.h, src/chage.c:
+ differentiate the different failure causes by the exit value
+ 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)
+ Plain merge 443_chage_exit_values Debian patch.
+
+ * man/Attic/pw_auth.3.xml, man/chpasswd.8.xml, man/chsh.1.xml, man/expiry.1.xml, man/faillog.5.xml, man/faillog.8.xml, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/gshadow.5.xml, man/id.1.xml, man/lastlog.8.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/login.defs.5.xml, man/logoutd.8.xml, man/newusers.8.xml, man/passwd.1.xml, man/passwd.5.xml, man/porttime.5.xml, man/pwck.8.xml, man/pwconv.8.xml, man/shadow.3.xml, man/shadow.5.xml, man/su.1.xml, man/suauth.5.xml, man/sulogin.8.xml, man/userdel.8.xml, man/usermod.8.xml, man/vipw.8.xml, man/chage.1.xml, man/chfn.1.xml:
+ use tabs in indentation (~10KB less in all xml files).
+
+ * po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po:
+ run "make update-po" and remove obsoleted strings.
+
+ * src/expiry.c, src/login.c: remove #if 0 .. #endif code.
+
+ * src/login.c: remove #if 1 .. #endif.
+
+ * libmisc/obscure.c, libmisc/utmp.c, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, src/chage.c, src/login.c, src/logoutd.c, src/newgrp.c, src/su.c, src/useradd.c, NEWS:
+ 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>).
+
+ * man/id/chsh.1:
+ fix .SH (fix merged from 207_id-manpages debian patch).
+
+2005-08-28 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * acinclude.m4: add aclocal macros (based on acinclude.m4 from glib):
+ JH_PATH_XML_CATALOG: checks the location of the XML Catalog,
+ JH_CHECK_XML_CATALOG: checks if a particular URI appears in the XML catalog.
+
+ * man/Attic/useradd.8, man/useradd.8.xml:
+ cleanups in "Changing the default values" section.
+
+ * man/useradd.8.xml:
+ replace <emphasis remap='I'></emphasis> by <replaceable></replaceable>.
+ Other minor cleanups.
+
+ * configure.in:
+ fixed missing )] in AC_ARG_WITH(skey, ..) (thank for fix to Yuri Kozlov <kozlov.y@gmail.com>).
+
+ * man/Attic/chsh.1, man/Attic/faillog.5, man/Attic/gshadow.5, man/Attic/lastlog.8, man/Attic/limits.5, man/Attic/login.1, man/Attic/login.access.5, man/Attic/login.defs.5, man/Attic/porttime.5, man/Attic/pw_auth.3, man/Attic/pw_auth.3.xml, man/Attic/shadow.3, man/Attic/suauth.5, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/chsh.1.xml, man/faillog.8.xml, man/groupadd.8.xml, man/gshadow.5.xml, man/lastlog.8.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/login.defs.5.xml, man/porttime.5.xml, man/shadow.3.xml, man/suauth.5.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml:
+ typos, and change some arguments so they do not match the name of a
+ command (fixes by Nicolas François <nicolas.francois@centraliens.net>).
+
+ * NEWS, libmisc/chkname.c, man/Attic/groupadd.8, man/Attic/useradd.8, man/groupadd.8.xml, man/useradd.8.xml:
+ fix regular expression describing alloved login/group names (pointed
+ by Nicolas François <nicolas.francois@centraliens.net>)
+ (correct is [a-z_][a-z0-9_-]*[$]).
+
+ * man/Attic/useradd.8, man/useradd.8.xml:
+ remove "Creating New Users" section and merge this directly in DESCRIPTION.
+ Add <option></option> for -o in EXIT VALUES section.
+
+ * po/ru.po, NEWS:
+ update ru translations (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+2005-08-27 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/passwd.1, man/passwd.1.xml:
+ removed "Account maintenance" section.
+
+ * man/Attic/passwd.1, man/passwd.1.xml: partialy done rewrite.
+
+ * po/ro.po:
+ some fixes after review of the translation (by Sorin Batariuc <sorin@bonbon.net>).
+
+ * man/Attic/lastlog.8, man/lastlog.8.xml:
+ s/Print help message and exit./Display help message and exit./
+
+ * man/Attic/chage.1, man/chage.1.xml: document -h,--help option.
+
+ * man/Attic/groupadd.8, man/groupadd.8.xml:
+ document -h,--help option. added <option></option> for -o in EXIT VALUES.
+ Cleanups in SYNOPSIS section.
+
+ * man/Attic/chage.1, man/Attic/faillog.8, man/chage.1.xml, man/faillog.8.xml:
+ replace <emphasis remap='I'></emphasis> by <replaceable></replaceable>.
+
+ * man/Attic/lastlog.8, man/lastlog.8.xml:
+ document new -b,--before option.
+
+ * po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/it.po, po/ja.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/el.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, src/lastlog.c:
+ s/lastlog results/lastlog records/ in lastlog usage output.
+
+ * man/Attic/lastlog.8, man/lastlog.8.xml:
+ add "" aroud <command></command>.
+
+ * po/vi.po, po/zh_CN.po, po/zh_TW.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, src/lastlog.c:
+ alphabetic order options in lastlog usage output. Run "make -C po update-po".
+
+ * src/lastlog.c, NEWS:
+ added handle -b option which allow print only lastlog records older than
+ specified DAYS (fix by <miles@lubin.us>).
+
+ * libmisc/salt.c, NEWS:
+ fixed for use login.defs::MD5_CRYPT_ENAB only if PAM support
+ is disabled (fix by John Gatewood Ham <zappaman@buraphalinux.org>).
+
+2005-08-25 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * configure.in:
+ use AC_HELP_STRING() in AC_ARG_ENABLE() and AC_ARG_WITH().
+ Exit with error message if configure was runed --with-selinux
+ and libselinux not found.
+
+2005-08-24 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * libmisc/chkname.c, NEWS, man/Attic/groupadd.8, man/Attic/useradd.8, man/groupadd.8.xml, man/useradd.8.xml:
+ documents in CAVEATS section the limitations shadow places on user and
+ group names (fix by Mike Frysinger <vapier@gentoo.org>).
+
+ * src/passwd.c, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po:
+ added missing -i, --inactive in usage() output.
+
+2005-08-23 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, src/passwd.c, NEWS:
+ passwd rewrited for use getopt_long().
+
+ * man/Attic/chage.1, man/chage.1.xml: /warndays/--warndays/
+
+ * man/Attic/pw_auth.3.xml, man/expiry.1.xml, man/faillog.5.xml, man/faillog.8.xml, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/gshadow.5.xml, man/id.1.xml, man/lastlog.8.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/login.defs.5.xml, man/logoutd.8.xml, man/newusers.8.xml, man/passwd.1.xml, man/passwd.5.xml, man/porttime.5.xml, man/pwck.8.xml, man/pwconv.8.xml, man/shadow.3.xml, man/shadow.5.xml, man/su.1.xml, man/suauth.5.xml, man/sulogin.8.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml, man/vipw.8.xml, man/chage.1.xml, man/chfn.1.xml, man/chpasswd.8.xml, man/chsh.1.xml:
+ remove trailing spaces.
+
+ * src/lastlog.c, src/login.c, src/logoutd.c, src/newgrp.c, src/newusers.c, src/passwd.c, src/pwck.c, src/pwconv.c, src/pwunconv.c, src/suauth.c, src/sulogin.c, src/useradd.c, src/userdel.c, src/usermod.c, src/vipw.c, src/Attic/chsh_chkshell.c, src/chpasswd.c, src/chsh.c, src/expiry.c, src/faillog.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmems.c, src/groupmod.c, src/groups.c, src/grpck.c, src/grpconv.c, src/grpunconv.c, src/id.c:
+ reorder #includes, indentations and minor cleanups.
+
+ * src/newgrp.c: indent code.
+
+ * NEWS, src/newgrp.c:
+ 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.
+ Fixed Debian http://bugs.debian.org/314727
+
+2005-08-22 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * configure.in: typo.
+
+ * configure.in:
+ add display short summary information on finish autoconf script.
+
+ * NEWS, configure.in: start work on 4.0.13.
+
+2005-08-21 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/ru.po: updated for 4.0.12 (by Yuri Kozlov <yuray@id.ru>).
+
+ * NEWS, po/sk.po:
+ updated for 4.0.12 (by Peter Mann <Peter.Mann@tuke.sk>).
+
+2005-08-20 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/nl.po, NEWS:
+ updated for 4.0.12 (by cobaco (aka Bart Cornelis) <cobaco@linux.be>).
+
+2005-08-19 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/fi.po:
+ updated for 4.0.12 (by Tommi Vainikainen <thv+debian@iki.fi>).
+
+ * NEWS, po/de.po:
+ updated for 4.0.12 (by Frank Schmid <frank@cs-schmid.de>).
+
+ * po/pt.po, NEWS:
+ updated for 4.0.12 (by Miguel Figueiredo <elmig@debianpt.org>).
+
+2005-08-11 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/cs.po:
+ updated for 4.0.12 (by Miroslav Kure <kurem@upcase.inf.upol.cz>).
+
+ * src/chpasswd.c, src/groupdel.c, src/newusers.c, src/useradd.c, src/userdel.c, src/usermod.c:
+ remove duplicated #include <pwd.h>.
+
+ * po/pl.po: finished update for 4.0.12.
+
+ * src/useradd.c, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po:
+ s/Not copying any file into it./Not copying any file from skel directory into it./
+
+ * src/useradd.c, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po:
+ break warning message longer than 80 characters.
+
+ * po/pl.po: updated.
+
+ * src/groupadd.c, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po:
+ fixed missing \n in usage() output.
+
+ * lib/getdef.c, src/login.c, src/newgrp.c, NEWS:
+ remove using login.defs::CLOSE_SESSIONS variable and allways close PAM session.
+
+2005-08-10 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, configure.in:
+ realy enable shadow group support by default (pointed by
+ Greg Schafer <gschafer@zip.com.au> and Peter Vrabec <pvrabec@redhat.com>).
+ Indentations in --help output.
+
+ * man/Attic/chage.1, man/chage.1.xml:
+ s/occurrence/occurence/ (334_chage.1-typo Debian patch).
+
+ * man/Attic/chfn.1, man/chfn.1.xml:
+ s/may only change may only change/may only change/ (based on 336_chfn.1 Debian patch).
+
+ * man/it/Makefile.am: cleanups (443_man_it_Makefile.am Debian patch).
+
+ * man/Attic/userdel.8, man/userdel.8.xml: s/an NIS client/a NIS client/
+
+ * man/Attic/useradd.8, man/useradd.8.xml: s/an NIS group/a NIS group/
+
+ * man/Attic/lastlog.8, man/lastlog.8.xml:
+ s/you have an high UID/you have a high UID/
+
+ * man/Attic/lastlog.8, man/lastlog.8.xml:
+ added missing <para></para> in AUTHORS section (cached by Nicolas).
+
+ * po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po:
+ run "make update-po".
+
+ * po/POTFILES.in: added missing libmisc/pwdcheck.c. Sorted.
+
+2005-08-09 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: s/22-07-2005/22-08-2005/
+
+ * NEWS: schedule release 4.0.12 in 22-07-2005.
+
+ * libmisc/setupenv.c, man/pl/login.defs.5, NEWS, etc/Attic/login.defs.hurd, etc/Attic/login.defs.linux, lib/getdef.c:
+ removed handle login.defs::QMAIL_DIR variable.
+
+ * libmisc/chowntty.c, NEWS:
+ allow regular user to login on read-only root file system (not only for root).
+ Patch by Nicolas François <nicolas.francois@centraliens.net>
+ Fix for http://bugs.debian.org/52069
+
+ * NEWS, man/Attic/usermod.8, man/usermod.8.xml:
+ give the correct range for system users: 0-999 instead of 0-99
+ (http://bugs.debian.org/286258)
+
+ * man/Attic/chage.1, man/chage.1.xml: s/an password/a password/
+
+ * man/Attic/chage.1, man/chage.1.xml, src/chage.c, NEWS:
+ another maxdays fix based on 427_chage_expiry_0 Debian patch
+ (fix for http://bugs.debian.org/78961).
+ Better description -1 value passed in -E, -I and -M options.
+
+ * src/gpasswd.c, src/grpck.c, src/grpconv.c, src/grpunconv.c, NEWS:
+ added flushing group nscd cache on exit.
+
+ * src/pwck.c, src/pwconv.c, NEWS:
+ added flushing passwd nscd cache on exit.
+
+ * NEWS, src/usermod.c:
+ fixed handle -p option (patch by Peter Vrabec <pvrabec@redhat.com>).
+ Indented.
+
+ * man/Attic/chage.1, man/chage.1.xml, NEWS, src/chage.c:
+ use -1 as value for disable password inactivity.
+ Patch by Peter Vrabec <pvrabec@redhat.com> which fixes:
+ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=109499
+ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=137498
+
+2005-08-07 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/useradd.c, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, NEWS, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po:
+ do not copy files from skel directory if home directory exist and write
+ warning message about not copying skel files.
+ Patch by Peter Vrabec <pvrabec@redhat.com> which fixes:
+ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=143150
+ https://bugzilla.redhat.com/beta/show_bug.cgi?id=158574
+ https://bugzilla.redhat.com/beta/show_bug.cgi?id=80242
+
+ * po/pl.po: updated.
+
+2005-08-06 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/useradd.c:
+ s/spoll/spool/ (spoted by Nicolas François <nicolas.francois@centraliens.net>).
+
+2005-08-04 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, src/su.c:
+ ignore SIGINT while authenticating. A ^C could defeat the waiting
+ period and permit brute-force attacks (fixed http://bugs.debian.org/288827).
+
+2005-08-03 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * lib/defines.h, NEWS, configure.in:
+ added require ngettext (added [need-ngettext] to AM_GNU_GETTEXT() parameters)
+ and stub prototype for ngettext() in lib/prototypes.h (neccessary if shadow
+ compiled with disabled NLS support)
+ Based on fixes by Martin Schlemmer <azarah@nosferatu.za.org>.
+
+ * src/faillog.c: start using exitcodes.h.
+
+ * NEWS, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/expiry.1, man/Attic/faillog.5, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmems.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/gshadow.5, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/login.1, man/Attic/login.access.5, man/Attic/login.defs.5, man/Attic/logoutd.8, man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/pw_auth.3, man/Attic/pwck.8, man/Attic/pwconv.8, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/su.1, man/Attic/suauth.5, man/Attic/sulogin.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/Attic/vipw.8, man/logoutd.8.xml, man/shadow.3.xml, man/sulogin.8.xml:
+ regenerate all roff man pages using DocBook XSL Stylesheets 1.69.0.
+
+ * src/chage.c, src/chpasswd.c, src/newusers.c, src/passwd.c, src/pwunconv.c, src/useradd.c, src/userdel.c, src/usermod.c, src/vipw.c, NEWS:
+ remove flushing shadow nscd cache (nscd do not caches shadow map).
+
+2005-08-02 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/groupadd.c, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, NEWS:
+ rewrited groupadd for use getopt_long().
+
+ * src/chage.c: indent.
+
+ * NEWS, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/userdel.c:
+ do OPENLOG() before pam_start().
+
+ * NEWS, src/groupadd.c: fixed double OPENLOG().
+
+ * src/passwd.c, src/vipw.c, src/userdel.c: reorder nscd_flush_cache().
+
+ * src/chfn.c, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po:
+ cleanups in printf() translated messages for make translators work easier.
+
+ * NEWS, src/chage.c: added flushing NSS shadow map on exit.
+
+ * po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/useradd.c:
+ s/the the/the/
+
+ * po/POTFILES.in: removed lib/{grpack,gspack,pwpack,sppack}.c.
+
+ * NEWS, src/newusers.c:
+ added flushing NSS passwd, shadow and group maps.
+
+ * NEWS, src/chpasswd.c, src/useradd.c:
+ added flushing NSS shadow map on exit.
+
+ * lib/prototypes.h: removed outdated prototypes for lib/gsdbm.c.
+
+ * NEWS, lib/Attic/grpack.c, lib/Attic/gspack.c, lib/Attic/pwpack.c, lib/Attic/sppack.c, lib/Makefile.am, lib/prototypes.h:
+ remove lib/{grpack,gspack,pwpack,sppack}.c and prototypes from lib/prototypes.h (outdated).
+
+ * lib/prototypes.h: removed outdated prototypes from lib/pwdbm.c.
+
+2005-07-31 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, src/usermod.c: added flushing NSS shadow map.
+
+2005-07-29 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/chage.1, man/chage.1.xml:
+ typo (s/passwordchanges/password changes/).
+
+2005-07-27 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * lib/getdef.c, src/su.c:
+ ENV_SUPATH and ENV_PATH must be used independently to PAM.
+
+ * lib/exitcodes.h: added E_BAD_ARG.
+
+ * src/gpasswd.c: start use exitcodes.h.
+
+ * lib/getdef.c: remove ENV_ROOTPATH def_table[] (not used).
+
+2005-07-24 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/chsh.c: start use exitcodes.h.
+
+2005-07-23 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/Makevars, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po:
+ added --no-location to po/Makevars::XGETTEXT_OPTIONS: shorter .po files.
+
+ * NEWS, src/grpck.c, src/pwck.c:
+ pwck: now pwck OPENLOG with correct name ("pwck" instead "pwsk"),
+ pwck, grpck: replace all puts() with printf() - it fixes problems with extra blank
+ lines printed in some messages
+ (fixes by Alexander Gattin <arg@online.com.ua>)
+
+2005-07-22 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/Makevars: added:
+ MSGID_BUGS_ADDRESS = kloczek@pld.org.pl
+
+2005-07-21 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/chfn.c: start use #include "exitcodes.h",
+
+ * lib/exitcodes.h: cleanups.
+
+ * lib/Makefile.am, lib/exitcodes.h, src/chage.c:
+ start separate all E_* exit codes to lib/exitcodes.h.
+
+ * src/passwd.c, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, NEWS, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po:
+ use separated message "Password set to expire." instead "Password changed."
+ on "passwd -e" (fix by Christian Perrier <bubulle@debian.org>).
+
+ * NEWS, po/fr.po:
+ updated (by Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>).
+
+ * NEWS, configure.in: start work on 4.0.12.
+
+2005-07-20 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, NEWS, configure.in, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po:
+ 4.0.11.1 will be released tmorrow (21-07-2005).
+
+ * configure.in, NEWS:
+ fixed configure.in: now is possible build shadow with enabled/disabled shadow group
+ support (thanks for report symptoms of the bug to Greg Schafer <gschafer@zip.com.au>).
+
+ * po/sv.po, NEWS: update finished (by Per Olofsson <pelle@dsv.su.se>)
+
+ * po/sv.po: partialy updated (by Per Olofsson <pelle@dsv.su.se>).
+
+2005-07-19 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, configure.in: start work on 4.0.12.
+
+2005-07-18 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * libmisc/sub.c:
+ fixed compilation warning about incompatible implicit declaration of built-in
+ function printf: added "#include <stdio.h>".
+
+ * src/groupadd.c:
+ move #ifdef USE_PAM .. #endif #includes outside #ifdef SHADOWGRP .. #endif.
+
+ * libmisc/pwdcheck.c:
+ added missing "#include <stdio.h>" (fix compilation with PAM disabled).
+
+ * po/ro.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/pl.po, po/pt_BR.po, po/nl.po, po/nn.po, po/nb.po, po/ko.po, po/ja.po, po/it.po, po/he.po, po/id.po, po/fr.po, po/bs.po, po/ca.po, po/da.po, po/el.po, po/es.po, po/eu.po, po/fi.po:
+ run "make update-po".
+
+ * src/su.c:
+ move declaration of pamh nad caught variables to #ifdef USE_PAM .. #endif.
+
+ * po/pl.po, NEWS: updated pl translation.
+
+2005-07-17 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/sk.po:
+ updated for 4.0.11 (by Peter Mann <Peter.Mann@tuke.sk>).
+
+2005-07-16 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/cs.po:
+ updated for 4.0.11 (by Miroslav Kure <kurem@upcase.inf.upol.cz>).
+
+2005-07-15 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/de.po, NEWS:
+ updated for 4.0.11 (by Frank Schmid <frank@cs-schmid.de>).
+
+2005-07-14 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/pt.po:
+ updated for 4.0.11 (by Miguel Figueiredo <elmig@debianpt.org>).
+
+2005-07-13 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/stats: reorder gsub().
+
+ * po/ru.po: cleanups.
+
+ * po/ru.po, NEWS:
+ updated for 4.0.11 (by Yuri Kozlov <yucoz@yandex.ru>).
+
+2005-07-12 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * lib/getdef.c:
+ move MAIL_DIR variable from def_table[] to part independent to USE_PAM
+ (still used in userdel/usermod).
+
+ * NEWS, man/Attic/pwck.8, man/pwck.8.xml:
+ document -q option (based on Debian patch for fix http://bugs.debian.org/309408)
+ Rewrited OPTIONS section and better SYNOPSIS.
+
+ * NEWS, po/da.po:
+ - updated for 4.0.11 (by Claus Hindsgaul <claus_h@image.dk>).
+
+ * NEWS, src/su.c:
+ 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
+
+ * po/fi.po, NEWS:
+ - updated for 4.0.11 (by Tommi Vainikainen <thv+debian@iki.fi>).
+
+ * po/ro.po: - updated Project-Id-Version field.
+
+ * NEWS, po/ro.po:
+ - updated for 4.0.11 (by Sorin B. <sorin@bonbon.net>).
+
+2005-07-11 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, man/Attic/lastlog.8, man/lastlog.8.xml:
+ document that lastlog is a sparse file, and don't need to be rotated.
+ http://bugs.debian.org/219321
+
+ * src/chage.c: use E_USAGE=2 as usage() exit code.
+
+ * NEWS, po/es.po:
+ updated for 4.0.11 (by Ruben Porras <nahoo82@telefonica.net>).
+
+ * src/useradd.c: cleanups in usage() oyput.
+
+ * po/zh_TW.po, po/vi.po, po/zh_CN.po, po/uk.po, po/tl.po, po/tr.po, po/sv.po, po/sq.po, po/sk.po, po/ro.po, po/ru.po, po/pt.po, po/pt_BR.po, po/pl.po, po/nb.po, po/nl.po, po/nn.po, po/ko.po, po/it.po, po/ja.po, po/he.po, po/id.po, po/fr.po, po/eu.po, po/fi.po, po/es.po, po/da.po, po/de.po, po/el.po, po/bs.po, po/ca.po, po/cs.po:
+ cleanups in usage() output.
+
+ * NEWS: release 4.0.11 is sheduled to 18-06-2005.
+
+2005-07-10 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/login.1, man/login.1.xml, NEWS:
+ better explain the respective roles of login, init and getty with regards
+ to the utmp file (based on 441_manpages-shadow.5 Debian patch)
+
+ * man/Attic/su.1, man/groupdel.8.xml, man/su.1.xml, man/Attic/groupdel.8:
+ s/presense/presence/; s/filesystem/file system/
+ (sed on 440_manpages-login.1 Debian patch)
+
+ * man/pl/Attic/shadowconfig.8, man/pl/Makefile.am, man/ja/Attic/shadowconfig.8, man/ja/Makefile.am, man/it/Attic/shadowconfig.8, man/Attic/shadowconfig.8, man/Attic/shadowconfig.8.xml, man/Makefile.am, NEWS:
+ removed shadowconfig(8) man page (will be maintained in Debian shadow pkg repository).
+
+ * man/it/sg.1: added.
+
+ * man/it/Makefile.am: more files in man_MANS.
+
+ * man/it/Makefile.am: move pwunconv.8 to man_MANS.
+
+ * man/useradd.8.xml, man/Attic/useradd.8:
+ updated after rewrite for for getopt_long() in useradd (-D and -k options
+ idescription must be finished).
+
+ * src/useradd.c, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, NEWS:
+ rewrited for use getopt_long().
+
+ * po/stats: more gsub().
+
+2005-07-08 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/newgrp.c:
+ indent source code and use fix for handle splitted groups unconditionaly.
+
+ * lib/nscd.c: indent.
+
+ * NEWS, src/newgrp.c:
+ 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.
+ (fix by Christian Mudra <C.Mudra@science-computing.de>
+
+ * lib/nscd.c, NEWS:
+ for some reason doing the INVALIDATE call with two write()'s fails.
+ Do one writev() call instead. http://bugs.gentoo.org/show_bug.cgi?id=80413
+ (submited by Martin Schlemmer <azarah@gentoo.org>)
+
+ * NEWS, lib/nscd.c:
+ merge nscd-socket-path patch from Fedora: newer glibc's have a different nscd socket
+ location (/var/run/nscd/socket instead /var/run/.nscd_socket).
+
+2005-07-07 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/stats: improved.
+
+ * man/Attic/groupadd.8, man/groupadd.8.xml, NEWS:
+ document -o option in groupadd(8).
+
+ * configure.in: s/'"$<foo>" != "no"'/'"$<foo>" = "yes"'/
+
+ * NEWS, configure.in, lib/Makefile.am, lib/pwauth.c:
+ S/Key support is back.
+
+ * po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po:
+ run "make update-po".
+
+ * po/pl.po: updated.
+
+ * src/useradd.c: s,key=value,KEY=VALUE,
+
+ * src/groupadd.c, NEWS, man/Attic/groupadd.8, man/groupadd.8.xml:
+ change -O option to -K and document it in man page.
+
+ * man/Attic/useradd.8, man/useradd.8.xml, src/useradd.c:
+ s/NAME=VALUE/KEY=VALUE/; s/key=value/KEY=VALUE/
+
+ * src/chfn.c, src/groupadd.c, src/groupmems.c, src/login.c, src/passwd.c, src/vipw.c:
+ sort cases in switch (flag) {}.
+
+ * src/gpasswd.c, src/groupadd.c, src/groupmems.c, src/groupmod.c, src/passwd.c, src/useradd.c, src/usermod.c:
+ sort getopt() optstring.
+
+ * src/useradd.c:
+ remove A: from getopt() optstring (the same bug as in usermod).
+
+ * src/usermod.c:
+ remove A: from getopt() optstring (it was for handle AUTH_METHODS code but now
+ it is not used option). Catched by Thorsten Kukuk <kukuk@suse.de>.
+
+ * src/usermod.c, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po:
+ indent source code. Added usermod error message about -a option usage to translated messages.
+
+ * po/POTFILES.in: mistake s,chage_chkshell.c,chsh_chkshell.c,
+
+ * po/POTFILES.in: s,libmisc/chkshell.c,src/chage_chkshell.c,
+
+ * man/Attic/usermod.8, man/usermod.8.xml, src/usermod.c, NEWS:
+ added -a option. This flag can only be used in conjunction with the -G
+ option. It cause usermod to append user to the current supplementary group list.
+ (patch by Peter Vrabec <pvrabec@redhat.com>)
+
+ * libmisc/Attic/chkshell.c, libmisc/Makefile.am, src/Attic/chsh_chkshell.c, src/Makefile.am:
+ move libmisc/chkshell.c to src/chsh_chkshell.c. check_shell() is used only by chsh.
+
+2005-07-06 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * Attic/acconfig.h, NEWS, configure.in:
+ finish move all autoheader templates from acconfig.h to configure.in.
+
+ * src/chage.c, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, NEWS:
+ added missing \n in chage error messages.
+
+ * po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/bs.po:
+ run "make update-po".
+
+ * src/usermod.c: move all #include in one place.
+
+ * src/useradd.c: s/-O/-K/
+
+ * man/Attic/useradd.8, man/useradd.8.xml:
+ cleanups in Note: in -K description.
+
+ * NEWS, man/Attic/useradd.8, man/useradd.8.xml, src/useradd.c:
+ change -O option to -K and document it in man page.
+
+ * man/Attic/useradd.8, man/useradd.8.xml:
+ added separated <cmdsynopsis></cmdsynopsis> for -D description and remove using </srb> tags from
+ <refsynopsisdiv id='synopsis'>.
+
+ * src/login.c:
+ replace #ifdef USE_PAM .. #endif #ifndef USE_PAN .. #endif by
+ #ifdef USE_PAM .. #else .. #endif.
+
+ * src/su.c: conditiona code reorganization.
+
+ * src/login.c: remove one #ifndef USE_PAM .. #endif.
+
+ * libmisc/setupenv.c: move setup $MAIL to !USE_PAM.
+
+ * libmisc/setupenv.c, src/su.c:
+ consolidate two sections of code #ifndef USE_PAM to one.
+
+ * src/su.c, src/sulogin.c, libmisc/setupenv.c, libmisc/tz.c, src/login.c, NEWS:
+ fixed erroneous warning messages about some login.defs variables when used with PAM
+ (fix by DJ Lucas <dj@linuxfromscratch.org>)
+
+2005-07-05 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * configure.in, libmisc/getdate.y, libmisc/utmp.c, src/logoutd.c:
+ remove non-USG code.
+
+ * Attic/acconfig.h, configure.in:
+ start moving all autoheader templates from acconfig.h to configure.in.
+
+ * configure.in: remove not used AC_DEFINE(HAVE_LIBCRYPT).
+
+ * Attic/acconfig.h, NEWS, configure.in:
+ stop with error message if crypt() not found. Remove --with{,out}-libcrypt switch.
+
+ * src/login.c: fixed use SYSLOG macro.
+
+2005-07-02 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/login_nopam.c: fixed use SYSLOG macro.
+
+2005-07-01 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, src/login.c:
+ setup limits and umask (using login.defs ULIMITS and UMASK variables) only when
+ PAM support is disabled (it is task for pam_limits and pam_umask modules).
+
+2005-06-30 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/sulogin.c, src/login.c, src/login_nopam.c, NEWS:
+ use SYSLOG macro instead syslog() which saves the locale, sets the locale to C,
+ sends the message and restores the locale (fix by Nicolas François <nicolas.francois@centraliens.net>).
+
+ * NEWS, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmod.8, man/Attic/userdel.8, man/Attic/usermod.8, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmod.8.xml, man/userdel.8.xml, man/usermod.8.xml:
+ in SEE ALLSO section added refer to gpasswd(8)
+ (suggested by Mike Frysinger <vapier@gentoo.org>)
+
+ * NEWS, configure.in: start work on 4.0.11.
+
+2005-06-28 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: +1 day release 4.0.10 date.
+
+ * po/pl.po: kill fuzzy.
+
+ * po/de.po: partial update by Frank Schmid <frank@cs-schmid.de>.
+
+2005-06-25 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/ca.po: run "make update-po".
+
+ * po/sk.po: updated sk translation by Peter Mann <Peter.Mann@tuke.sk>.
+
+2005-06-22 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: typo.
+
+2005-06-21 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/pl.po: typo.
+
+ * po/pl.po: updated for 4.0.10.
+
+ * po/ru.po, NEWS: updated ru translation by maintainer.
+
+ * NEWS: added past releases dates. Cleanups.
+
+ * man/Attic/shadowconfig.8: merge version generated from XML file.
+
+ * po/ca.po, po/cs.po, po/da.po, po/fi.po, NEWS:
+ translations updated by maintainers.
+
+2005-06-20 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/chage.c, po/zh_TW.po, po/vi.po, po/zh_CN.po, po/tl.po, po/tr.po, po/uk.po, po/sk.po, po/sq.po, po/sv.po, po/ro.po, po/ru.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/eu.po, po/fi.po, po/fr.po, po/de.po, po/el.po, po/es.po, po/ca.po, po/cs.po, po/da.po, po/bs.po (usage):
+ s/EXPIRE/EXPIRE_DATE/.
+
+ * po/pl.po: start update for 4.0.10.
+
+ * src/usermod.c, src/useradd.c, src/userdel.c, src/id.c, src/newgrp.c, src/su.c, po/zh_TW.po, po/zh_CN.po, po/vi.po, po/uk.po, po/tr.po, po/tl.po, po/sv.po, po/sq.po, po/sk.po, po/ru.po, po/pt_BR.po, po/ro.po, po/pt.po, po/pl.po, po/nn.po, po/nl.po, po/nb.po, po/ko.po, po/ja.po, po/it.po, po/id.po, po/he.po, po/fr.po, po/eu.po, po/fi.po, po/es.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po:
+ s/uid/UID/ in all commnets and messages.
+
+ * libmisc/failure.c, libmisc/limits.c, lib/pwio.c:
+ s/uid/UID/ in comments.
+
+ * src/usermod.c, src/useradd.c, src/groupadd.c, src/groupmod.c, src/id.c, src/newgrp.c, po/zh_TW.po, po/zh_CN.po, po/vi.po, po/uk.po, po/tr.po, po/tl.po, po/sv.po, po/sq.po, po/sk.po, po/ru.po, po/ro.po, po/pt_BR.po, po/pt.po, po/pl.po, po/nn.po, po/nl.po, po/nb.po, po/ko.po, po/ja.po, po/it.po, po/he.po, po/id.po, po/fr.po, po/fi.po, po/eu.po, po/es.po, po/el.po, po/da.po, po/de.po, po/cs.po, po/bs.po, po/ca.po, libmisc/limits.c, lib/groupio.c:
+ s/gid/GID/ in all comments and messages.
+
+ * src/gpasswd.c, src/login.c, src/passwd.c, src/chage.c, src/chfn.c, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po:
+ one message in i18n messages less: use in all places "Permission denied" instead
+ "permission denied".
+
+ * libmisc/getdate.y:
+ remove extern for gmtime(), localtime() and mktime() and instead add #include <time.h>.
+
+ * libmisc/entry.c: removed extern for fgetpwent().
+
+ * NEWS, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/expiry.1, man/Attic/faillog.5, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/gshadow.5, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/login.1, man/Attic/login.defs.5, man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/pw_auth.3, man/Attic/pwck.8, man/Attic/pwconv.8, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/su.1, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/Attic/vipw.8:
+ now most of the man pages now are generated from XML files so in case any submiting
+ any chages to this resources please make diff fies to XML files.
+
+ * man/Attic/pw_auth.3.xml: cleanups.
+
+ * man/grpck.8.xml, man/passwd.1.xml:
+ correctly code EXIT VALUES section using <variablelist>. Cleanups.
+
+ * man/shadow.3.xml: cleanups.
+
+2005-06-17 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/ja/Attic/mkpasswd.8, man/ja/Makefile.am, man/pl/Attic/mkpasswd.8, man/pl/Makefile.am:
+ remove ja and pl mkpasswd.8 man pages.
+
+2005-06-16 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/pwck.8.xml, man/useradd.8.xml, man/userdel.8.xml:
+ correctly code EXIT VALUES section.
+
+ * Attic/acconfig.h: removed DES_RPC and OPIE templates.
+
+ * src/Attic/mkpasswd.c, src/Makefile.am, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, NEWS, man/Attic/mkpasswd.8, man/Attic/mkpasswd.8.xml, man/Makefile.am, po/POTFILES.in, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po:
+ removed mkpasswd.
+
+ * man/Makefile.am: do not install mkpasswd(8) man page.
+
+ * src/Makefile.am: move mkpasswd.c to EXTRA_DIST.
+
+ * man/passwd.5.xml:
+ use <itemizedlist mark='bullet'> for describe passwd fields. Remove outdated
+ information about additional fields in comment field. Cleanups.
+
+ * man/newusers.8.xml: cleanups.
+
+ * man/gshadow.5.xml:
+ use <itemizedlist mark='bullet'> for gshadow fields desscription.
+
+ * man/shadow.5.xml: cleanups.
+
+ * man/shadow.5.xml:
+ use <itemizedlist mark='bullet'> for describe shadow fields.
+
+ * man/Attic/pw_auth.3.xml: cleanups.
+
+ * man/Attic/pw_auth.3.xml: use correct <refname>.
+
+ * man/Attic/pw_auth.3.xml: cleanups.
+
+ * man/groupdel.8.xml, man/groupmod.8.xml:
+ correctly code EXIT VALUES section.
+
+ * man/groupadd.8.xml: cleanups.
+
+ * man/Attic/mkpasswd.8.xml: added missing <variablelist> tag.
+
+ * man/usermod.8.xml: cleanups.
+
+ * man/usermod.8.xml: remove <sbr/> tags from SYNOPSIS section.
+
+ * man/faillog.8.xml: cleanups.
+
+ * man/faillog.5.xml:
+ put struct faillog definition in <programlisting></programlisting>.
+
+ * man/chsh.1.xml, man/chpasswd.8.xml: cleanups.
+
+ * man/groupadd.8.xml:
+ seems I found good way for code EXIT VALUES section.
+
+ * man/shadow.3.xml:
+ put meanings of each field spwd struct in <itemizedlist mark='bullet'>.
+
+ * man/shadow.3.xml:
+ place definition of struct spwd in <programlisting></programlisting>.
+
+ * NEWS, src/userdel.c:
+ userdel now deletes user groups from /etc/gshdow as well as /etc/group.
+ Fix by Nicolas François <nicolas.francois@centraliens.net>.
+ http://bugs.debian.org/99442
+
+ * src/usermod.c, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, NEWS, po/bs.po, po/ca.po, po/cs.po:
+ fixed bug in usermod ad run "make -C po update-po".
+ 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
+ the rmdir() fails. Patch prepared by Timo Lindfors <lindi-spamtrap@newmail.com>.
+ http://bugs.debian.org/166369
+
+2005-06-15 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/login.c: indent.
+
+ * man/Attic/pw_auth.3.xml, man/Attic/shadowconfig.8.xml, man/chage.1.xml, man/faillog.8.xml, man/groupmems.8.xml, man/gshadow.5.xml, man/login.1.xml, man/login.defs.5.xml, man/logoutd.8.xml, man/newusers.8.xml, man/passwd.1.xml, man/passwd.5.xml, man/pwck.8.xml, man/pwconv.8.xml, man/shadow.3.xml, man/shadow.5.xml, man/su.1.xml, man/suauth.5.xml, man/sulogin.8.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml, man/vipw.8.xml:
+ cleanups.
+
+2005-06-14 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/chage.1.xml, man/chfn.1.xml, man/chpasswd.8.xml, man/chsh.1.xml, man/expiry.1.xml, man/faillog.8.xml, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/gshadow.5.xml, man/id.1.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/login.defs.5.xml, man/logoutd.8.xml, man/faillog.5.xml:
+ cleanups.
+
+ * man/login.1.xml: rewrited FILES section.
+
+ * man/id.1.xml, man/lastlog.8.xml, man/gshadow.5.xml: cleanups.
+
+ * man/groups.1.xml: typos.
+
+ * man/chfn.1.xml, man/expiry.1.xml, man/gpasswd.1.xml: cleanups.
+
+2005-06-10 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS:
+ last patch for UTMPX was submited by by Nicolas François <nicolas.francois@centraliens.net>
+
+ * libmisc/failure.c, libmisc/failure.h, NEWS:
+ use also UTMPX API instead UTMP on failure (login was by affected this when shadow
+ was builded without PAM support).
+
+ * NEWS, src/login.c:
+ 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
+
+ * man/Attic/passwd.1, man/passwd.1.xml:
+ s/compatiblity/compatibility/ (fix by Christian Perrier <bubulle@kheops.frmug.org>).
+
+2005-06-09 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, man/Attic/chfn.1, man/chfn.1.xml:
+ give more details about the influence of login.defs on what's allowed to
+ users (based on Debian patches).
+
+ * NEWS, src/su.c:
+ fix syslogs to be less ambiguous. Use old:new format instead of old-new
+ because '-' can appear in usernames.
+ http://bugs.debian.org/213592
+
+ * NEWS, src/login.c:
+ made login's -f option also able to use the username after -- if none
+ was passed as it's optarg
+ http://bugs.debian.org/53702
+
+ * po/POTFILES.in, NEWS, libmisc/Attic/setup.c, libmisc/Makefile.am:
+ not used now (removed).
+
+ * man/Attic/usermod.8, man/usermod.8.xml:
+ s/inactive_time/inactive_days/ in -f parameter in SYNOPSIS (fix by Christian
+ Perrier <bubulle@debian.org>).
+
+2005-06-08 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/grpck.8, man/grpck.8.xml:
+ typo: s/incorrectable/uncorrectable/ (by A Costa <agcosta@gis.net>).
+
+ * man/Attic/gshadow.5, man/gshadow.5.xml:
+ typos: s/folowing/following/; s/encryped/encrypted/; s/supercedes/supersedes/
+ (by A Costa <agcosta@gis.net>).
+
+ * man/Attic/shadow.5, man/shadow.5.xml:
+ typos: s/encryped/encrypted/; s/supercedes/supersedes/
+ (by A Costa <agcosta@gis.net>)
+
+2005-06-07 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/login.c, NEWS:
+ check for hushed login and pass PAM_SILENT if true.
+ http://bugs.debian.org/48002
+
+ * src/login.c, NEWS:
+ fixed loggin of username on succesful login (was using the normal username,
+ when it should have used pam_user) http://bugs.debian.org/47819
+
+2005-06-02 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/zh_TW.po: updated (by Tetralet <tetralet@pchome.com.tw>).
+
+ * NEWS, po/ca.po: updated (by Guillem Jover <guillem@debian.org>).
+
+ * man/de/passwd.1:
+ added small comment with marker usefull for translators.
+
+2005-05-25 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/Attic/mkpasswd.c, src/chpasswd.c, src/faillog.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/newgrp.c, src/newusers.c, src/passwd.c, src/su.c, src/useradd.c, src/userdel.c, src/usermod.c, lib/encrypt.c, lib/getdef.c, lib/gshadow.c, lib/pwauth.h, lib/shadow.c, libmisc/failure.c, libmisc/isexpired.c, libmisc/salt.c:
+ indent all.
+
+ * src/chage.c, src/chpasswd.c, src/expiry.c, src/login.c, src/newgrp.c, src/newusers.c, src/passwd.c, src/pwck.c, src/pwconv.c, src/pwunconv.c, src/su.c, src/useradd.c, src/userdel.c, src/usermod.c, src/vipw.c, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, lib/Attic/sppack.c, lib/defines.h, lib/lockpw.c, lib/prototypes.h, lib/sgetspent.c, lib/shadow.c, lib/shadowio.c, libmisc/age.c, libmisc/entry.c, libmisc/isexpired.c, libmisc/pwd2spwd.c, libmisc/pwdcheck.c, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, Attic/acconfig.h, NEWS, configure.in:
+ remove using SHADOWPWD #define so now shadow is allways builded with shadow
+ password support.
+
+2005-05-24 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/chage.c, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, NEWS, man/Attic/chage.1, man/chage.1.xml:
+ rewrite for use getopt_long().
+
+2005-05-23 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, configure.in: start working on 4.0.10.
+
+ * man/Makefile.am: remove shadow-man-pages.pot target from all.
+
+2005-05-19 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * lib/encrypt.c, NEWS:
+ fixed passwd segfault in non-PAM connfiguration (submited by Greg Schafer <gschafer@zip.com.au>).
+
+ * po/sv.po: upsdate (by Christian Perrier <bubulle@debian.org>).
+
+ * NEWS, src/newgrp.c:
+ fixed NULL pointer dereference - getlogin() and ttyname() can
+ return NULL which is not checked (http://bugs.debian.org/162303).
+
+ * man/Attic/su.1, man/pwconv.8.xml, man/su.1.xml, man/Attic/pwconv.8:
+ fixed typo (s,similiar,similar,).
+
+2005-05-14 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/ro.po: updated by Sorin B. <sorin@bonbon.net>.
+
+ * po/ru.po, NEWS: updated by yu-koz <yu-koz@yandex.ru>.
+
+2005-05-13 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/ro.po: few updates by Sorin Batariuc <sorin@bonbon.net>.
+
+2005-05-12 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/ru.po: updated (by Yuri Kozlov <yuray@id.ru>).
+
+2005-05-10 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/vi.po:
+ completed translations for HEAD (by Clytie Siddall <clytie@riverland.net.au>).
+
+2005-05-09 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/LINGUAS, po/vi.po: added new vi translation.
+
+ * NEWS, lib/getdef.c:
+ leaves the table as it is, and changes from the binary search to
+ a sequential one (fix by Lucas Correia Villa Real <lucasvr@gobolinux.org>).
+
+ * man/Attic/passwd.1, man/passwd.1.xml:
+ make bold passwd and chfn commands.
+
+2005-04-28 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/usermod.8.xml, man/vipw.8.xml: cleanups.
+
+2005-04-27 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/shadowconfig.8.xml, man/gpasswd.1.xml, man/groups.1.xml, man/grpck.8.xml, man/login.defs.5.xml, man/passwd.1.xml, man/pwck.8.xml, man/sulogin.8.xml, man/useradd.8.xml:
+ replace <emphasis remap='B'></emphasis> by <command></command>.
+
+ * po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, NEWS, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, src/lastlog.c:
+ fixed lastlog --help message (s,--login,--user,) http://bugs.debian.org/249611
+
+ * man/Attic/mkpasswd.8.xml, man/faillog.5.xml, man/faillog.8.xml, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/gshadow.5.xml, man/id.1.xml, man/lastlog.8.xml, man/limits.5.xml, man/passwd.1.xml, man/passwd.5.xml, man/porttime.5.xml, man/pwck.8.xml, man/shadow.3.xml, man/shadow.5.xml, man/su.1.xml, man/suauth.5.xml, man/sulogin.8.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml:
+ use <varlistentry></varlistentry> in FILES section. Cleanups.
+
+ * man/expiry.1.xml, man/chsh.1.xml, man/chpasswd.8.xml, man/chfn.1.xml, man/porttime.5.xml, man/Attic/pw_auth.3.xml:
+ cleanups.
+
+ * man/Attic/vipw.8, man/vipw.8.xml:
+ small fix: s,vi,vi(1), (reported by Helge Kreutzmann <kreutzm@itp.uni-hannover.de> in
+ http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=260636).
+ s,VISUAL,$VISUAL; s,EDITOR,$EDITOR,
+
+2005-04-26 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/login.1.xml: fixed bold (use <command></command>). Cleanups.
+
+ * man/Attic/login.1: fixed typo in bold.
+
+ * man/chage.1.xml: fixed italic. Cleanups.
+
+ * man/Attic/chage.1: fixed typo in italic.
+
+ * man/login.defs.5.xml:
+ fixed italic (use <filename></filename> istead italic). Cleanups.
+
+ * man/Attic/login.defs.5: fixed typo in italic.
+
+ * man/vipw.8.xml: fixed italic (use <filename></filename>).
+
+ * man/Attic/vipw.8: typo in italic.
+
+ * man/Makefile.am:
+ added target for generate shadow-man-pages.pot. List all now useable xml files
+ in man_XMANS variable.
+
+ * man/pwconv.8.xml:
+ fixed bold. Use in more places <command></command> istead bold.
+
+ * man/Attic/login.defs.5: typo in bold.
+
+ * man/su.1.xml:
+ removed comment. Use <variablelist></variablelist> in Files secstion.
+ Fixed bold.
+
+ * man/Attic/pwconv.8, man/Attic/su.1: typo in bold.
+
+2005-04-25 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, configure.in: start work on 4.0.9.
+
+ * po/nl.po: kill fuzzy.
+
+ * man/Attic/chage.1:
+ reverte last commit (by mistake commited experimental version generated from XML file).
+
+ * NEWS, po/nl.po:
+ updated for 4.0.8 (by "cobaco (aka Bart Cornelis)" <cobaco@linux.be>).
+
+ * po/tl.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po:
+ two typos (s,specyfied,specified,; s,maiximum,maximum,).
+
+ * NEWS, po/sk.po:
+ updated for 4.0.8 (by Peter Mann <Peter.Mann@tuke.sk>).
+
+ * src/lastlog.c: typo (s,specyfied,specified,)
+
+ * src/faillog.c: typo (s,maiximum,maximum,).
+
+2005-04-22 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/chage.1.xml, man/chfn.1.xml, man/chsh.1.xml, man/expiry.1.xml, man/gpasswd.1.xml, man/groups.1.xml, man/id.1.xml, man/login.1.xml, man/passwd.1.xml, man/su.1.xml:
+ added <refmiscinfo class="sectdesc">User Commands</refmiscinfo> in <refmeta></refmeta>.
+
+ * man/Attic/mkpasswd.8.xml, man/Attic/pw_auth.3.xml, man/Attic/shadowconfig.8.xml, man/chfn.1.xml, man/chpasswd.8.xml, man/chsh.1.xml, man/expiry.1.xml, man/faillog.5.xml, man/faillog.8.xml, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/gshadow.5.xml, man/id.1.xml, man/lastlog.8.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/login.defs.5.xml, man/logoutd.8.xml, man/newusers.8.xml, man/passwd.1.xml, man/passwd.5.xml, man/porttime.5.xml, man/pwck.8.xml, man/pwconv.8.xml, man/shadow.3.xml, man/shadow.5.xml, man/su.1.xml, man/suauth.5.xml, man/sulogin.8.xml, man/useradd.8.xml, man/userdel.8.xml, man/vigr.8.xml:
+ Use encoding="UTF-8" and DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN".
+
+ * man/userdel.8.xml, man/usermod.8.xml, man/vigr.8.xml, man/vipw.8.xml, man/Attic/mkpasswd.8.xml, man/Attic/pw_auth.3.xml, man/Attic/shadowconfig.8.xml, man/chage.1.xml, man/chfn.1.xml, man/chpasswd.8.xml, man/chsh.1.xml, man/expiry.1.xml, man/faillog.5.xml, man/faillog.8.xml, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/gshadow.5.xml, man/id.1.xml, man/lastlog.8.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/login.defs.5.xml, man/logoutd.8.xml, man/newusers.8.xml, man/passwd.1.xml, man/passwd.5.xml, man/porttime.5.xml, man/pwck.8.xml, man/pwconv.8.xml, man/shadow.3.xml, man/shadow.5.xml, man/su.1.xml, man/suauth.5.xml, man/sulogin.8.xml, man/useradd.8.xml:
+ better formation using "xmlindent -l 80 -d 2".
+
+2005-04-21 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/it/Attic/shadowconfig.8, man/it/chsh.1, man/it/expiry.1, man/it/faillog.5, man/it/faillog.8, man/it/getspnam.3, man/it/groups.1, man/it/grpck.8, man/it/grpconv.8, man/it/grpunconv.8, man/it/id.1, man/it/lastlog.8, man/it/login.1, man/it/logoutd.8, man/it/newgrp.1, man/it/porttime.5, man/it/pwck.8, man/it/shadow.3, man/it/shadow.5, man/it/su.1, man/it/vipw.8, NEWS, man/it/Makefile.am, man/it/chage.1, man/it/chfn.1, man/it/chpasswd.8:
+ updated it man pages: chfn.1, chsh.1, groups.1, grpck.8, grpconv.8, grpunconv.8,
+ id.1, lastlog.8, login.1, newgrp.1, pwunconv.8, shadow.5, vigr.8, vipw.8.
+ new it man pages: chage.1, chpasswd.8, expiry.1, faillog.5, faillog.8,
+ getspnam.3, logoutd.8, porttime.5, pwck.8, shadow.3, shadowconfig.8, su.1.
+ (by Danilo Piazzalunga <danilopiazza@libero.it>)
+
+ * po/uk.po:
+ cleanups in plural forms (by Roman Festchook <roma@polesye.net>).
+
+ * man/Attic/chage.1, man/Attic/mkpasswd.8.xml, man/Attic/pw_auth.3.xml, man/Attic/shadowconfig.8.xml, man/chfn.1.xml, man/chpasswd.8.xml, man/chsh.1.xml, man/expiry.1.xml, man/faillog.5.xml, man/faillog.8.xml, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/gshadow.5.xml, man/id.1.xml, man/lastlog.8.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/login.defs.5.xml, man/logoutd.8.xml, man/newusers.8.xml, man/passwd.1.xml, man/passwd.5.xml, man/porttime.5.xml, man/pwck.8.xml, man/pwconv.8.xml, man/shadow.3.xml, man/shadow.5.xml, man/su.1.xml, man/suauth.5.xml, man/sulogin.8.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml, man/vipw.8.xml:
+ reformated using xemacs.
+
+2005-04-20 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/fr.po, NEWS:
+ updated for 4.0.8 (by Christian Perrier <bubulle@kheops.frmug.org>).
+
+ * NEWS, po/eu.po: updated for 4.0.8 (by ^pi^ <piarres@gmail.com>).
+
+ * NEWS, po/uk.po:
+ updated for 4.0.8 (by Roman Festchook <roma@polesye.net>).
+
+ * po/cs.po:
+ updated for 4.0.8 (by Miroslav Kure <kurem@upcase.inf.upol.cz>).
+
+ * po/da.po, NEWS:
+ updated for 4.0.8 (by Claus Hindsgaul <claus_h@image.dk>).
+
+ * po/ko.po, NEWS:
+ updated for 4.0.8 (by Changwoo Ryu <cwryu@debian.org>).
+
+ * po/fi.po: kill one fuzzy (by Tommi Vainikainen <thv+debian@iki.fi>).
+
+2005-04-19 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/chpasswd.8.xml: Rewrited by hand & xemacs.
+
+ * man/chfn.1.xml: cleanups in <refentry> tag.
+
+ * man/chfn.1.xml: Rewrited by hand & xemacs.
+
+ * NEWS, po/pt.po:
+ updated for 4.0.8 (by Miguel Figueiredo <elmig@debianpt.org>).
+
+ * po/es.po, NEWS: updated (by Ruben Porras <nahoo@inicia.es>).
+
+2005-04-18 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/useradd.8:
+ fixed typos in useadd syntax (in SYNOPSIS section) catched using doclifter.
+
+ * man/Attic/mkpasswd.8.xml, man/Attic/pw_auth.3.xml, man/Attic/shadowconfig.8.xml, man/chfn.1.xml, man/chpasswd.8.xml, man/chsh.1.xml, man/expiry.1.xml, man/faillog.5.xml, man/faillog.8.xml, man/getspnam.3.xml, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/grpconv.8.xml, man/grpunconv.8.xml, man/gshadow.5.xml, man/id.1.xml, man/lastlog.8.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/login.defs.5.xml, man/logoutd.8.xml, man/newusers.8.xml, man/passwd.1.xml, man/passwd.5.xml, man/porttime.5.xml, man/pwck.8.xml, man/pwconv.8.xml, man/pwunconv.8.xml, man/sg.1.xml, man/shadow.3.xml, man/shadow.5.xml, man/su.1.xml, man/suauth.5.xml, man/sulogin.8.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml, man/vigr.8.xml, man/vipw.8.xml:
+ raw version converted using doclifter.
+
+ * configure.in: remove handle --with-lib{opie,skey}.
+
+ * man/de/chsh.1:
+ synced with english version (by Simon Brandmair <sbrandmair@gmx.net>).
+
+ * man/Attic/usermod.8: improved -o description.
+
+ * man/de/passwd.1:
+ added translation EXIT VALUES section (by Simon Brandmair <sbrandmair@gmx.net>).
+
+ * NEWS, po/it.po:
+ updated it translation (by Danilo Piazzalunga <danilopiazza@libero.it>).
+
+2005-04-17 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po:
+ cleanups.
+
+ * po/pl.po: updated.
+
+ * src/usermod.c:
+ use the same error message ("%s: PAM authentication failed\n") on fail
+ authentication as in other tools.
+
+ * po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po:
+ run "make update-po".
+
+ * src/login.c, src/login_nopam.c:
+ fixed build with disabled PAM support: move bad_time_notify() and check_nologin()
+ back to src/login.c but use this functions #ifndef USE_PAM.
+
+ * NEWS, lib/Makefile.am, lib/pwauth.c:
+ remove not working OPIE and SKEY support.
+
+ * configure.in: typo (s,SELinuux,SELinux,).
+
+ * NEWS: typos.
+
+ * NEWS: chage, useradd, usermod: reduce multiple OPENLOG() calls.
+
+ * src/useradd.c, src/usermod.c: fix multiple OPENLOG() calls.
+
+ * src/chage.c: cleanups.
+
+ * src/chage.c: fix multiple OPENLOG() calls.
+
+ * src/chage.c:
+ use E_SUCCESS/E_NOPERM #defines instead 0/1 in exit() arguments.
+
+2005-04-15 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/passwd.c:
+ adjust also syslog message on usage -S option without permission.
+ Consolidate SELinix and non-SELinux code.
+
+ * po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, NEWS, src/passwd.c:
+ fix #61313 Debian bug: "passwd -S root" (as a normal user) should not
+ display "You may not change the password for root.
+
+ * NEWS, man/Attic/passwd.1:
+ fix #160477 Debian bug: improve -S output description.
+
+ * man/de/passwd.1:
+ new translation by Simon Brandmair <sbrandmair@gmx.net> with merged all
+ changes between revision 1.2 a 1.5.
+
+2005-04-14 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/passwd.1, man/pl/passwd.1: bold passwd and chage commands.
+
+ * NEWS, src/vipw.c:
+ fixed race condition in vipw (Debian #242407 bug; fix by Alexander Gattin
+ <arg@online.com.ua>).
+
+ * man/pl/Attic/chage.1.xml, man/pl/chage.1:
+ synced with english version.
+
+ * man/Attic/chage.1, man/chage.1.xml:
+ add info about what mean -1 passed n expiredate parameter (based on #304542
+ Debian bug; submited by Federico Grau <grauf@rfa.org>).
+
+2005-04-13 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/fi.po, NEWS:
+ updated translation (by Tommi Vainikainen <tvainikan@cc.hut.fi>).
+
+ * man/hu/passwd.1, man/it/passwd.1, man/ja/passwd.1, man/pl/passwd.1, man/Attic/passwd.1, man/de/passwd.1, man/es/passwd.1:
+ cleanups and unifications in SEE ALSO section.
+
+2005-04-12 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * configure.in:
+ Info documentation says about AC_GNU_SOURCE: "should be called before any
+ macros that run the C compiler". So move this macro on top configure.in for
+ avoid autoconf warnings.
+
+ * configure.in:
+ AC_SYS_LARGEFILE() performs checking is fseeko() is avalaible so "fseeko" can
+ be removed from AC_CHECK_FUNCS() parameters.
+
+ * NEWS, configure.in: Remove using AC_PROG_GCC_TRADITIONAL macro.
+ Add using AC_GNU_SOURCE macro for kill compilation warnings about implicit
+ declaration of function `fseeko'.
+
+ * po/cs.po: killed fuzzy (by Miroslav Kure <kurem@debian.cz>).
+
+ * man/ja/newgrp.1, man/pl/newgrp.1, NEWS, man/Attic/newgrp.1, man/hu/newgrp.1:
+ newgrp uses /bin/sh (not bash).
+
+ * man/Attic/gpasswd.1, man/Attic/groupdel.8, man/Attic/groupmems.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/id.1, man/Attic/mkpasswd.8, man/Attic/newgrp.1, man/Attic/pwck.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8:
+ describe /etc/group in FILES section as "group account information".
+
+ * man/Attic/grpck.8:
+ describe /etc/passwd in FILES section as "user account information".
+
+ * po/stats: small script for generate translations statistics.
+
+ * NEWS, po/cs.po: Updated by Miroslav Kure <kurem@debian.cz>.
+
+ * man/chage.1.xml, man/Attic/chage.1, man/Attic/expiry.1, man/Attic/login.1, man/Attic/mkpasswd.8, man/Attic/newgrp.1, man/Attic/passwd.1, man/Attic/pwck.8, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/su.1, man/Attic/sulogin.8:
+ describe /etc/shadow in FILES section as "secure user account information".
+
+ * man/Attic/newgrp.1:
+ Reformated paragraph. s,Bourne shell,\fBbash\fR shell,
+
+ * NEWS, man/Attic/newgrp.1:
+ fix #251926, #166173, #113191 Debian bugs: explain why editing /etc/group
+ (without gshadow) doesn't permit to use newgrp.
+
+ * po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po:
+ added/fixed Plural-Forms: header entries. Run "make update-po".
+
+ * po/pl.po:
+ added Plural-Forms: header entry and updated for last change in
+ libmisc/failure.c.
+
+ * libmisc/failure.c:
+ break message text with failure login since last login.
+
+ * libmisc/failure.c:
+ Use ngettext instead of string concatenation and static number of cases.
+ Patch by Tommi Vainikainen <tvainika@cc.hut.fi>.
+
+2005-04-11 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/cs.po:
+ new translation maintainer: Miroslav Kure <kurem@debian.cz>.
+
+2005-04-10 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/pl.po: updated for 4.0.8.
+
+2005-04-09 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, NEWS, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, src/faillog.c:
+ changed faillog records display format for allow fit in 80 columns all
+ faillog atributies.
+
+ * po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po:
+ run "make update-po". Updated pl.po.
+
+ * src/faillog.c (usage): typo (s,IDAYS,DAYS,).
+
+ * man/Attic/faillog.8, NEWS:
+ updated after rewrite faillog command for use getopt_long().
+
+ * src/faillog.c:
+ Add handle -h,--help option. Show in usage output information about
+ -t,--time option. Remove handle -p option.
+
+ * po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po:
+ run "make update-po".
+
+ * po/POTFILES.in: updated.
+
+ * man/Attic/gpasswd.1: typo (s,fB,\fB,).
+
+2005-04-06 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, man/ja/login.1:
+ updated ja man page for Debian #95213 bug (by Kenshi Muto <kmuto@debian.org>).
+
+ * src/chage.c, src/chfn.c, src/chsh.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/grpck.c, src/passwd.c, src/pwck.c, src/useradd.c, src/userdel.c, src/usermod.c, NEWS, lib/Attic/grdbm.c, lib/Attic/gsdbm.c, lib/Attic/pwdbm.c, lib/Attic/spdbm.c, lib/Makefile.am, lib/gshadow.c, lib/shadow.c:
+ next round of cleanups: removed NDBM code (unused).
+
+ * src/login.c: consilidate some !USE_PAM lines.
+
+ * src/login.c, src/login_nopam.c:
+ move bad_time_notify() and check_nologin() to src/login_nopam.c.
+
+ * lib/prototypes.h: remove not used login_desrpc() prototype.
+
+ * lib/Attic/rad64.c, lib/encrypt.c, lib/prototypes.h, lib/Makefile.am:
+ remove lib/rad64 with not used c64i() and i64c() functions.
+
+ * lib/encrypt.c:
+ remove "#ifdef SW_CRYPT .. #endif" and "#ifdef DOUBLESIZE .. #endif" unused code.
+
+ * lib/encrypt.c: remove "#ifdef MD5_CRYPT .. #endif" unused code.
+
+ * libmisc/salt.c:
+ remove prototypes for *l64a() and add #include <stdlib.h>. Remove unused
+ now code (old style random salt generator).
+
+ * src/chage.c: cleanups.
+
+ * src/chpasswd.c:
+ remove prototypes for *l64a() and add #include <stdlib.h>.
+
+ * src/login.c: remove login_fbtab() prototype.
+
+ * src/chage.c:
+ remove prototypes for a64l() and *l64a() and add #include <stdlib.h>.
+
+2005-04-05 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/ru/passwd.5, man/zh_CN/chfn.1, man/zh_CN/chpasswd.8, man/zh_CN/chsh.1, man/zh_CN/groupadd.8, man/zh_CN/groupdel.8, man/zh_CN/groupmod.8, man/zh_CN/useradd.8, man/zh_CN/userdel.8, man/zh_CN/usermod.8, man/zh_TW/chfn.1, man/zh_TW/chsh.1, man/zh_TW/groupadd.8, man/zh_TW/groupdel.8, man/zh_TW/groupmod.8, man/zh_TW/useradd.8, man/zh_TW/userdel.8, man/zh_TW/usermod.8, man/ko/chfn.1, man/ko/chsh.1, man/ko/groups.1, man/ko/id.1, man/ko/login.1, man/ko/passwd.5, man/ko/su.1, man/pt_BR/gpasswd.1, man/pt_BR/groupadd.8, man/pt_BR/groupdel.8, man/pt_BR/groupmod.8, man/pt_BR/shadow.5, man/ja/Attic/mkpasswd.8, man/ja/Attic/pw_auth.3, man/ja/chage.1, man/ja/chfn.1, man/ja/chpasswd.8, man/ja/chsh.1, man/ja/expiry.1, man/ja/faillog.8, man/ja/gpasswd.1, man/ja/groupadd.8, man/ja/groupmod.8, man/ja/groups.1, man/ja/grpck.8, man/ja/id.1, man/ja/lastlog.8, man/ja/limits.5, man/ja/login.1, man/ja/login.access.5, man/ja/login.defs.5, man/ja/newgrp.1, man/ja/passwd.1, man/ja/porttime.5, man/ja/pwck.8, man/ja/shadow.3, man/ja/su.1, man/ja/suauth.5, man/ja/sulogin.8, man/ja/useradd.8, man/ja/userdel.8, man/ja/usermod.8, man/ja/vipw.8, man/hu/chfn.1, man/hu/chsh.1, man/hu/gpasswd.1, man/hu/groups.1, man/hu/id.1, man/hu/login.1, man/hu/newgrp.1, man/hu/passwd.1, man/hu/su.1, man/id/chsh.1, man/id/login.1, man/id/useradd.8, man/it/chfn.1, man/it/chsh.1, man/it/gpasswd.1, man/it/groupadd.8, man/it/groupdel.8, man/it/groupmod.8, man/it/groups.1, man/it/grpck.8, man/it/id.1, man/it/lastlog.8, man/it/login.1, man/it/passwd.5, man/it/shadow.5, man/it/useradd.8, man/it/userdel.8, man/it/usermod.8, man/it/vipw.8, man/de/chfn.1, man/de/chsh.1, man/de/login.1, man/de/passwd.1, man/de/passwd.5, man/de/su.1, man/de/vipw.8, man/es/login.1, man/es/passwd.1, man/es/su.1, man/fr/chage.1, man/fr/chpasswd.8, man/fr/chsh.1, man/fr/faillog.5, man/fr/gpasswd.1, man/fr/groups.1, man/fr/id.1, man/fr/passwd.1, man/fr/passwd.5, man/fr/shadow.5, man/fr/su.1, man/fr/useradd.8, man/fr/userdel.8, man/fr/usermod.8, man/cs/groups.1, man/cs/id.1, man/cs/lastlog.8, man/cs/passwd.5, man/cs/shadow.5, man/cs/su.1, man/pl/Attic/mkpasswd.8, man/pl/Attic/pw_auth.3, man/pl/Attic/shadowconfig.8, man/pl/chage.1, man/pl/chfn.1, man/pl/chpasswd.8, man/pl/chsh.1, man/pl/expiry.1, man/pl/faillog.5, man/pl/faillog.8, man/pl/gpasswd.1, man/pl/groupadd.8, man/pl/groupdel.8, man/pl/groupmems.8, man/pl/groupmod.8, man/pl/groups.1, man/pl/grpck.8, man/pl/id.1, man/pl/lastlog.8, man/pl/limits.5, man/pl/login.1, man/pl/login.access.5, man/pl/login.defs.5, man/pl/logoutd.8, man/pl/newgrp.1, man/pl/newusers.8, man/pl/passwd.1, man/pl/passwd.5, man/pl/porttime.5, man/pl/pwck.8, man/pl/pwconv.8, man/pl/shadow.3, man/pl/shadow.5, man/pl/su.1, man/pl/suauth.5, man/pl/sulogin.8, man/pl/useradd.8, man/pl/userdel.8, man/pl/vipw.8, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/expiry.1, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupmems.8, man/Attic/groupmod.8, man/Attic/grpck.8, man/Attic/lastlog.8, man/Attic/limits.5, man/Attic/login.1, man/Attic/login.defs.5, man/Attic/newgrp.1, man/Attic/passwd.1, man/Attic/porttime.5, man/Attic/pwck.8, man/Attic/shadow.3, man/Attic/su.1, man/Attic/suauth.5, man/Attic/sulogin.8, man/Attic/useradd.8, man/Attic/usermod.8, man/Attic/vipw.8:
+ more replaces "-" by "\-" (s,\\-,-,g; s,-,\\-,g).
+
+ * man/pl/usermod.8: finish sync with english version.
+
+ * man/hu/login.1, man/pl/login.1, NEWS, man/Attic/login.1, man/de/login.1:
+ removed fragment about abilities pass enviroment variables in login prompt.
+
+ * man/Attic/gpasswd.1, man/Attic/newgrp.1:
+ fixes by Nicolas Nicolas François <nicolas.francois@centraliens.net> (not all
+ commited).
+
+2005-04-02 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/login.1, man/Attic/login.access.5, man/Attic/login.defs.5, man/Attic/logoutd.8, man/Attic/mkpasswd.8, man/Attic/newgrp.1, man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/pw_auth.3, man/Attic/pwck.8, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/su.1, man/Attic/suauth.5, man/Attic/sulogin.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/Attic/vipw.8, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/expiry.1, man/Attic/faillog.5, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupmems.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/gshadow.5, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/limits.5:
+ replace all "-" by "\-" (s,\\-,-,; s,-,\\-,).
+
+ * man/cs/groups.1: cleanups.
+
+ * NEWS, src/su.c:
+ fixed use of SU_WHEEL_ONLY in su. Now su realy is avalaible for wheel group
+ members. Thanks to Mike Frysinger <vapier@gentoo.org> for report:
+ http://bugs.gentoo.org/show_bug.cgi?id=80345
+
+ * man/pl/Attic/chage.1.xml:
+ converted from roff using doclifter. Rewrited by hand. Probably will be
+ removed after prepare infrastructure for translate man pages using gettext
+ but temporary I need this for some experiments.
+
+ * src/login.c: remove unused #ifded LOGIN_FBTAB .. #endif code.
+
+ * configure.in, libmisc/Attic/login_access.c, libmisc/Makefile.am, src/Makefile.am, src/login.c, src/login_nopam.c:
+ move libmisc/login_access.c to src/login_mopam.c.
+ Remove using LOGIN_ACCESS #define. Now LOGIN_ACCESS is equal to !USE_PAM.
+ In src/login_nopam.c will be cumulated non-PAM specyfic login code.
+
+ * src/lastlog.c, src/login.c, src/useradd.c, src/usermod.c, libmisc/log.c:
+ cleanups: remove using #include "lastlog_.h".
+
+ * src/login.c: fixed build with PAM support disabled.
+
+ * src/login.c: remove "#ifdef HUP_MESG_FILE .. #endif" code.
+
+ * src/login.c: reindent using -l80.
+
+ * man/Attic/chage.1, man/chage.1.xml:
+ s/chage/chage command/ in DESCRIPTION.
+
+ * man/chage.1.xml:
+ converted from roff using doclifter. Rewrited by hand.
+
+ * man/Attic/chage.1, man/Attic/chfn.1, man/Attic/faillog.8, man/Attic/groupmod.8, man/Attic/pwconv.8, man/Attic/useradd.8, man/Attic/usermod.8:
+ cleanups.
+
+ * man/Attic/pwconv.8: fixed typo: s,fI,\fI,
+
+ * po/POTFILES.in: remove libmisc/login_{desrpc,krb}.c.
+
+ * lib/getdef.c, libmisc/Attic/login_desrpc.c, libmisc/Attic/login_krb.c, libmisc/Makefile.am, src/login.c, NEWS, autogen.sh, configure.in:
+ drop never finished kerberos and des_rpc support.
+
+ * man/it/chfn.1: cleanups.
+
+2005-04-01 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, configure.in:
+ fixed UTMP path detection (by Kelledin <kelledin@users.sf.net>).
+
+ * man/fr/chsh.1: typo.
+
+ * man/de/Makefile.am, man/de/passwd.5:
+ imported from Deutscher manpages.
+
+ * man/cs/Makefile.am, man/cs/groups.1, man/cs/lastlog.8, man/cs/su.1:
+ new files imported from Czech man-pages.
+
+ * man/pl/faillog.8, man/pl/groupmems.8, man/pl/id.1, man/pt_BR/groupadd.8, man/pt_BR/groupmod.8, man/zh_CN/groupadd.8, man/zh_CN/groupmod.8, man/zh_CN/useradd.8, man/zh_CN/usermod.8, man/zh_TW/groupadd.8, man/zh_TW/groupmod.8, man/zh_TW/useradd.8, man/zh_TW/usermod.8, man/fr/chage.1, man/fr/chpasswd.8, man/fr/passwd.1, man/hu/chsh.1, man/it/groupadd.8, man/it/groupmod.8, man/it/usermod.8, man/ja/chage.1, man/ja/chfn.1, man/ja/chsh.1, man/ja/gpasswd.1, man/ja/groupadd.8, man/ja/groupmod.8, man/ja/login.1, man/ja/passwd.1, man/ja/useradd.8, man/ja/usermod.8, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chsh.1, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/id.1, man/Attic/login.1, man/Attic/passwd.1, man/Attic/useradd.8, man/de/chfn.1, man/de/chsh.1, man/de/login.1, man/de/passwd.1:
+ cleanups: aded missing \fR.
+
+ * man/Attic/gpasswd.1, man/Attic/gshadow.5, man/Makefile.am, NEWS:
+ added new file (by Nicolas Nicolas François <nicolas.francois@centraliens.net>).
+
+2005-03-31 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/pl/chage.1, man/pl/chfn.1, man/pl/chsh.1, man/pl/gpasswd.1:
+ added missing \fR.
+
+ * man/pl/groupmod.8: typo: s,\fI,\fR,
+
+ * man/pl/login.1, man/pl/passwd.1: cleanups: aded missing \fR.
+
+ * man/pl/sulogin.8: cleanups.
+
+ * man/pl/useradd.8: cleanups: aded missing \fR.
+
+ * man/pl/usermod.8: partialy synced with english version.
+
+ * man/Attic/usermod.8: typo.
+
+ * NEWS, man/Attic/usermod.8:
+ fixed #302388 Debian bug: added separated -o option description.
+
+ * lib/getdef.c:
+ FAILLOG_ENAB, LOGIN_STRING moved to code "#ifndef USE_PAM" dependent.
+
+ * lib/pwauth.c, lib/pwauth.h: enable pw_auth() only #ifndef USE_PAM.
+
+ * src/userdel.c, src/usermod.c, src/vipw.c, src/Attic/mkpasswd.c, src/chage.c, src/chfn.c, src/chpasswd.c, src/chsh.c, src/expiry.c, src/faillog.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmems.c, src/groupmod.c, src/groups.c, src/grpck.c, src/grpconv.c, src/grpunconv.c, src/logoutd.c, src/newgrp.c, src/newusers.c, src/passwd.c, src/pwck.c, src/pwconv.c, src/pwunconv.c, src/su.c, src/suauth.c, src/sulogin.c, src/useradd.c, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, libmisc/Attic/login_access.c, libmisc/Attic/login_krb.c, libmisc/addgrps.c, libmisc/age.c, libmisc/chkname.h, libmisc/chowndir.c, libmisc/chowntty.c, libmisc/copydir.c, libmisc/env.c, libmisc/failure.c, libmisc/failure.h, libmisc/getdate.h, libmisc/hushed.c, libmisc/isexpired.c, libmisc/limits.c, libmisc/loginprompt.c, libmisc/motd.c, libmisc/pam_pass.c, libmisc/pwdcheck.c, libmisc/rlogin.c, libmisc/setugid.c, libmisc/setupenv.c, libmisc/shell.c, libmisc/strtoday.c, libmisc/sulog.c, libmisc/ttytype.c, libmisc/utmp.c, libmisc/xmalloc.c, NEWS, lib/Attic/getpass.c, lib/Attic/grdbm.c, lib/Attic/grpack.c, lib/Attic/gsdbm.c, lib/Attic/gspack.c, lib/Attic/pwdbm.c, lib/Attic/pwpack.c, lib/Attic/rad64.c, lib/Attic/rcsid.h, lib/Attic/spdbm.c, lib/Attic/sppack.c, lib/commonio.c, lib/commonio.h, lib/defines.h, lib/encrypt.c, lib/faillog.h, lib/fputsx.c, lib/getdef.c, lib/getdef.h, lib/groupio.c, lib/groupio.h, lib/gshadow.c, lib/gshadow_.h, lib/lockpw.c, lib/port.c, lib/port.h, lib/prototypes.h, lib/pwauth.c, lib/pwauth.h, lib/pwio.c, lib/pwio.h, lib/sgetgrent.c, lib/sgetpwent.c, lib/sgetspent.c, lib/sgroupio.c, lib/sgroupio.h, lib/shadow.c, lib/shadowio.c, lib/shadowio.h, lib/utent.c:
+ reindent all source code using -l80.
+
+ * libmisc/.indent.pro, src/.indent.pro, lib/.indent.pro: -l80 added.
+
+ * lib/gshadow.c, NEWS:
+ rewrited group count to dynamic (by John Newbigin <jnewbigin@ict.swin.edu.au >).
+
+ * po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po:
+ run "make update-po".
+
+ * src/login.c: use allways "\n%s login: " login prompt.
+
+ * src/login.c: removed radius support (even not compiles).
+
+ * doc/Attic/README.mirrors, doc/Makefile.am: removed.
+
+ * src/userdel.c (update_user): removed next redundant closing }.
+
+ * src/userdel.c: remove using unused NO_REMOVE_MAILBOX #define.
+
+ * src/userdel.c (update_user): removed redundant closing }.
+
+2005-03-30 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * lib/getdef.c:
+ move PASS_MAX_DAYS, PASS_MIN_DAYS and PASS_WARN_AGE to part PAM not dependent
+ (used in useradd, pwconv).
+
+ * configure.in, src/Makefile.am:
+ move define LOCALEDIR using AC_DEFINE_UNQUOTED() to src/Makefile.am::AM_CPPFLAGS.
+
+ * man/Attic/pwconv.8: typo in bold.
+
+ * doc/Attic/INSTALL: removed.
+
+ * doc/Attic/README.sun4, doc/Makefile.am: removed outdated README.sun4.
+
+2005-03-24 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/pl.po: put mine data in Last-Translator: field.
+
+ * src/newusers.c:
+ use the same as in useradd default UMASK (022 instead 077) if diffrent not
+ defined in login.defs.
+
+ * NEWS, libmisc/copydir.c:
+ added SELinux changes (based on Fedora patch).
+
+ * NEWS: typo.
+
+ * man/Attic/login.defs.5: typo in bold.
+
+ * src/chfn.c, src/chsh.c, lib/getdef.c:
+ move CHFN_AUTH, CHSH_AUTH variables from login.defs to part !USE_PAM dependent.
+ Use "auth required pam_unix.so" in /etc/pam.d/{chfn,chsh} for force enter password
+ on use chfn/chsh.
+
+ * lib/getdef.c: added CHSH_AUTH variable in def_table[] table.
+
+ * src/chsh.c: s/CHFN_AUTH/CHSH_AUTH/
+
+ * man/Attic/shadow.5, man/Attic/passwd.5:
+ add more accurate information about what contains field with encrypted password in
+ each passwd/shadow line (reported by Mike Brodbelt).
+
+ * autogen.sh: reorder.
+
+ * lib/getdef.c:
+ CRACKLIB_DICTPATH, ENV_HZ, ENV_PATH, ENV_ROOTPATH, ENV_SUPATH, ENV_TZ,
+ ENVIRON_FILE, FTMP_FILE, ISSUE_FILE, LASTLOG_ENAB, MAIL_CHECK_ENAB, MAIL_DIR,
+ MAIL_FILE, MD5_CRYPT_ENAB, MOTD_FILE, NOLOGINS_FILE, OBSCURE_CHECKS_ENAB,
+ PASS_ALWAYS_WARN, PASS_CHANGE_TRIES, PASS_MAX_DAYS, PASS_MAX_LEN, PASS_MIN_DAYS,
+ PASS_MIN_LEN, PASS_WARN_AGE, PORTTIME_CHECKS_ENAB, SU_WHEEL_ONLY, QMAIL_DIR,
+ QUOTAS_ENAB, ULIMIT variables moved to code "#ifndef USE_PAM" dependent.
+
+ * configure.in:
+ fix importand typo: added missing ",". Now LOGIN_ACCESS realy is defined only
+ when PAM is not enabled.
+
+ * libmisc/obscure.c, libmisc/limits.c:
+ all functions from this file are "#ifndef USE_PAM" dependent.
+
+ * libmisc/setugid.c (change_uid):
+ removed dead code depndent on "#ifdef BSD".
+
+ * libmisc/ttytype.c (ttytype):
+ removed dead code depend on "defined(SUN) || defined(BSD) || defined(SUN4)".
+
+ * src/login.c (setup_tty): remove dead code.
+
+ * libmisc/rlogin.c:
+ fix compilation warning: replace #include <unistd.h> by #include <netdb.h>
+ where ruserok() is declared.
+
+2005-03-23 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/pl.po: kill one fuzzy entry.
+
+2005-03-09 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, libmisc/log.c:
+ fixed create lastlog entry fo users never loged in on non-PAM
+ variant of login (fix by <oracular@ziplip.com>).
+
+2005-03-07 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, etc/Attic/login.defs.linux, etc/login.defs, lib/getdef.c, man/pl/login.defs.5:
+ remove handle login.defs::NOLOGIN_STR (never used).
+
+2005-02-25 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/shadow.5:
+ added missing '\&' in line starting with '\.', which causes groff to skip
+ it entirely (fix submited by Danilo Piazzalunga <danilopiazza@libero.it>).
+
+ * TODO: cleanups.
+
+2005-02-23 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/useradd.c, NEWS:
+ useradd: fixes a potential security problem when mailbox is created in
+ useradd.
+ Patch and comment by Koblinger Egmont <egmont@uhulinux.hu>:
+ Only two arguments are passed to the open() call though it expects three
+ because O_CREAT is present. Hence the permission of the file first becomes
+ some random garbage found on the stack, and an attacker can perhaps open
+ this file and hold it open for reading or writing before the proper
+ fchmod() is executed. (Actually, we could also pass the final "mode" to
+ the open() call and then save the consequent fchmod().)
+
+2005-02-17 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/LINGUAS, po/tl.po:
+ added tl translation (fron Debian resources).
+
+2005-02-14 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, src/chage.c, src/chfn.c, src/chsh.c, src/passwd.c:
+ SELinux changes: added changes in chage, chfn, chsh, passwd for allow
+ construct more grained user password/accuunt properties on SELinux
+ policies level. Patch originally based on RH changes (submited by Chris
+ PeBenito <pebenito@gentoo.org>)
+
+2005-02-09 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/fr.po, NEWS:
+ updated translation (by Jean-Luc Coulon <jean-luc.coulon@wanadoo.fr>) from
+ Debian resources.
+
+2005-01-26 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, configure.in: open work on 4.0.8.
+
+2005-01-24 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po:
+ "make update-po".
+
+2005-01-21 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, po/it.po:
+ updated it translations (by Danilo Piazzalunga <danilopiazza@libero.it>).
+
+2005-01-20 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * libmisc/rlogin.c: remove ruserok() prototyle and #include <unistd.h>.
+
+ * lib/getdef.c: remove strtol() prototype (it comes with <stdlib.h>).
+
+ * po/da.po, po/es.po, po/nl.po, po/pl.po, po/pt.po:
+ "Project-Id-Version: shadow 4.0.7".
+
+ * NEWS, po/fi.po:
+ updated fi translation (by Tommi Vainikainen <thv+debian@iki.fi>).
+
+2005-01-18 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/da.po, po/es.po, po/pl.po, po/pt.po: kill fuzzy entries.
+
+ * po/nl.po, NEWS:
+ updated nl translations (by cobaco (aka Bart Cornelis)" <cobaco@linux.be>).
+
+ * lib/Makefile.am (libshadow_la_LIBADD): removed snprintf.h.
+
+ * NEWS, po/LINGUAS, po/zh_TW.po:
+ added zh_TW translation (from Debian resources).
+
+ * po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po:
+ "make update-po".
+
+ * src/Attic/mkpasswd.c, src/passwd.c, src/userdel.c, src/chage.c, src/chfn.c, src/chsh.c, src/gpasswd.c, src/groups.c, src/login.c:
+ "less means better" added fixes which makes english texts more consistent
+ especially with capitalization issues. Based on fixes by Tommi Vainikainen
+ <thv+debian@iki.fi> (make all text begining from lower case .. not upper).
+ This patch cuts i18n entries in each po/*po file from 420 to 402.
+
+2005-01-17 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: added pt to updated translations.
+
+ * lib/defines.h: reverte last change (mistake).
+
+ * po/pt.po:
+ updated translation by Miguel Figueiredo <elmig@debianpt.org>.
+
+2005-01-16 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: typo.
+
+ * NEWS: update da, es and pl (100%) translations.
+
+ * po/pl.po: finish translations.
+
+ * po/da.po: updated translations by Claus Hindsgaul <claus_h@image.dk>.
+
+ * NEWS, TODO: Typos found by Claus Hindsgaul <claus_h@image.dk>.
+
+ * po/es.po: Updates from Ruben Porras <nahoo@inicia.es>.
+
+ * lib/defines.h: - remove usong shadow_.h.
+
+ * po/pl.po: kill fuzzy.
+
+ * NEWS, lib/Attic/grent.c, lib/Attic/lastlog_.h, lib/Attic/md5.c, lib/Attic/md5.h, lib/Attic/md5crypt.c, lib/Attic/mkdir.c, lib/Attic/putgrent.c, lib/Attic/putpwent.c, lib/Attic/putspent.c, lib/Attic/pwent.c, lib/Attic/rename.c, lib/Attic/rmdir.c, lib/Attic/shadow_.h, lib/Attic/snprintf.c, lib/Attic/snprintf.h, lib/Attic/strcasecmp.c, lib/Attic/strdup.c, lib/Attic/strerror.c, lib/Attic/strstr.c, lib/Makefile.am:
+ remove unused now files in lib/ directory.
+
+ * po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/POTFILES.in, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po:
+ Now correctly shadow passes "make distcheck".
+
+ * NEWS: typo.
+
+2005-01-02 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/faillog.c, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, NEWS:
+ switch faillog ro use getopt_long().
+
+ * etc/pam.d/su: aded line with "session required pam_env.so".
+
+2004-12-30 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/de/Makefile.am, man/de/vigr.8, man/de/vipw.8, NEWS:
+ added de vigr(8), vipw(8) man pages (from Debian resources).
+
+2004-12-29 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/LINGUAS, po/ro.po, po/sq.po, NEWS:
+ added ro, sq translations (from Debian resources).
+
+2004-12-20 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * configure.in:
+ added checing is fseeko() function is avalaibabe in system: added fseeko to
+ AC_CHECK_FUNCS parameters.
+
+ * lib/Makefile.am:
+ fixed warning message about incorrect try linking non-PIC code with shared
+ library: removed $(top_builddir)/libmisc/libmisc.a from libshadow_la_LIBADD.
+
+ * NEWS:
+ - final entry about fixed large file support in lastlog and faillog.
+
+ * src/vipw.c, lib/Attic/pwent.c, lib/Attic/grent.c:
+ use fseeko() instead fseek(). This not realuy neccessary because in this
+ cases fseek() was used for move to begin of file. This only for minimize
+ external functions count.
+
+ * src/faillog.c:
+ fixes for allow operate on large files by faillog: use fseeko() instead
+ fseek().
+
+ * src/lastlog.c:
+ fixes for allow operate lastlog on large files: use fseeko() instead fseek()
+ and do not casrt file offsets to unsigned long (based on large-file patch
+ from FC).
+
+ * src/faillog.c: fixed typo in usage().
+
+2004-12-17 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/pl/newgrp.1: fixed typo in bold macro.
+
+2004-12-13 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/pl/chpasswd.8: remove bold from NAZWA section.
+
+2004-12-12 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/faillog.c: remove using Prog variable.
+
+ * configure.in, NEWS:
+ fixed large file support: added AC_SYS_LARGEFILE macro to autoconf.
+
+ * man/Attic/groupmod.8, man/pl/groupmod.8: separate OPTIONS section.
+
+ * man/pl/chpasswd.8: sync with english version.
+
+ * man/Attic/chpasswd.8:
+ bold "chpasswd" command name in CAVEATS section.
+
+ * man/Attic/chpasswd.8: s/protect/protected/
+
+ * man/pl/lastlog.8: cleanups.
+
+ * man/Attic/chpasswd.8, man/Attic/lastlog.8, man/Attic/newusers.8:
+ remove bold from NAME section.
+
+ * man/it/groupadd.8, man/it/useradd.8: separate OPZIONI section.
+
+ * man/pl/groupmems.8: fixes in OPCJE section.
+
+ * man/Attic/chpasswd.8: more cleanups.
+
+2004-12-11 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/chage.1, man/Attic/chfn.1, man/Attic/grpck.8, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/login.1, man/Attic/newgrp.1, man/Attic/newusers.8, man/Attic/passwd.5, man/Attic/pw_auth.3, man/Attic/pwck.8, man/Attic/pwconv.8, man/Attic/shadowconfig.8, man/Attic/suauth.5, man/Attic/useradd.8:
+ Fixed varoiuse typos and misspeling based partialy on patch from Bug#141322
+ from Debian (submited by Christian Perrier <bubulle@debian.org>).
+
+ * man/Attic/chpasswd.8: more cleanups.
+
+ * man/pl/faillog.8, man/Attic/faillog.8, man/ja/faillog.8:
+ remove from OPTIONS section information about avalaibability on some systems
+ faillog database in other location thad listed in FILES section.
+
+ * man/Attic/chpasswd.8: updated.
+
+ * man/fr/faillog.5:
+ fixed FICHIERS secttion: corrected change to italic on /var/log/faillog.
+
+ * src/faillog.c:
+ move main() to the end of file and reorder rest functions. Now declararion
+ finction prototypes can be removed.
+
+2004-12-10 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: updated.
+
+ * man/pl/lastlog.8: synced with current english version.
+
+ * man/Attic/lastlog.8: use the same style as in chpasswd(8).
+
+ * po/uk.po, po/zh_CN.po, po/tr.po, po/sv.po, po/ru.po, po/sk.po, po/pt_BR.po, po/pt.po, po/pl.po, po/nn.po, po/nl.po, po/nb.po, po/ko.po, po/ja.po, po/he.po, po/id.po, po/it.po, po/fi.po, po/fr.po, po/es.po, po/eu.po, po/el.po, po/da.po, po/de.po, po/cs.po, po/ca.po, po/bs.po:
+ "make update-po" after rewrite lastlog.
+
+ * src/lastlog.c: Rewrite for use the same style as in chpasswd.c.
+ Move open lastlog file after commadline option parsing so now --help option
+ can be used by user without read access to lastlog file.
+
+ * src/chpasswd.c:
+ s/display this help and exit/display this help message and exit/ in ussage()
+ output.
+
+ * po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po:
+ "make update-po".
+
+ * src/chpasswd.c:
+ Added handle -h|--help option. Improved and updated ussage() output.
+
+2004-12-09 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/tr.po, po/uk.po, po/zh_CN.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/da.po, po/de.po, po/el.po, po/bs.po, po/ca.po, po/cs.po:
+ "make update-po" and resolve fuzzy with last change in src/chpasswd.c.
+
+ * src/chpasswd.c, NEWS:
+ switch chpasswd to use getopt_long() and adds a --md5 option
+ (by Ian Gulliver <ian@penguinhosting.net>).
+
+ * NEWS, configure.in: start work on 4.0.7.
+
+2004-11-09 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: cleanups.
+
+ * po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/bs.po, po/ca.po, po/cs.po, po/da.po:
+ removed not used translations.
+
+ * NEWS, src/su.c:
+ fix adding of pam_env env variables to enviroment (Martin Schlemmer <azarah@nosferatu.za.org>).
+
+ * NEWS, configure.in:
+ fixed filling MAIL_SPOOL_DIR and MAIL_SPOOL_FILE variables which was allways
+ empty (Gregorio Guidi <g.guidi@sns.it>)
+
+ * NEWS: updated.
+
+ * src/useradd.c, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, NEWS, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po:
+ do not translate variable names from /etc/default/useradd during "useradd -D".
+
+2004-11-04 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/zh_CN/groupadd.8, man/zh_CN/groupmod.8, man/zh_CN/useradd.8, man/zh_CN/usermod.8, man/zh_TW/groupadd.8, man/zh_TW/groupmod.8, man/zh_TW/useradd.8, man/zh_TW/usermod.8, man/it/groupadd.8, man/it/groupmod.8, man/it/useradd.8, man/it/usermod.8, man/ja/groupadd.8, man/ja/groupmod.8, man/ja/useradd.8, man/ja/usermod.8, man/pl/groupadd.8, man/pl/groupmod.8, man/pl/useradd.8, man/pl/usermod.8, man/pt_BR/groupadd.8, man/pt_BR/groupmod.8, man/Attic/groupadd.8, man/Attic/groupmod.8, man/Attic/useradd.8, man/fr/useradd.8, man/fr/usermod.8, man/id/useradd.8:
+ correction: groups/users with gid/uid 0 and 999 are reserved for system accounts.
+
+ * man/zh_CN/groupmod.8, man/zh_CN/useradd.8, man/zh_CN/usermod.8, man/zh_TW/groupmod.8, man/zh_TW/useradd.8, man/zh_TW/usermod.8, man/id/useradd.8, man/it/groupadd.8, man/it/groupmod.8, man/it/useradd.8, man/it/usermod.8, man/ja/groupadd.8, man/ja/groupmod.8, man/ja/useradd.8, man/ja/usermod.8, man/pl/groupadd.8, man/pl/groupmod.8, man/pl/useradd.8, man/pl/usermod.8, man/pt_BR/groupmod.8, man/Attic/groupadd.8, man/Attic/groupmod.8, man/Attic/useradd.8, man/fr/useradd.8, man/fr/usermod.8:
+ zgroups/users with gid/uid 0 and 499 are typically reserved for system accounts.
+
+2004-11-02 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/pl/Attic/mkpasswd.8, man/pl/chage.1, man/pl/chsh.1, man/pl/faillog.8, man/pl/groupadd.8, man/pl/groupmems.8, man/pl/groupmod.8, man/pl/lastlog.8, man/pl/useradd.8, man/pl/userdel.8, man/pl/usermod.8, man/Attic/chage.1, man/Attic/chsh.1, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupmems.8, man/Attic/lastlog.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8:
+ separated OPTIONS section.
+
+ * lib/commonio.c: reverte last change.
+
+ * libmisc/pwdcheck.c:
+ one word fix .. ommited "else" was removed. Now security bug which allow
+ unauthorized account properties modification is realy closed.
+
+2004-10-29 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * lib/commonio.c:
+ add matchpathcon to create the files correctly when they do not exist (based
+ on patch from FC).
+
+ * man/Attic/passwd.1: fixed two typos ("/" in incorrect place).
+
+2004-10-27 Andrzej Krzysztofowicz <ankry@pld.org.pl>
+
+ * etc/pam.d/useradd: - added header
+
+ * etc/pam.d/chfn, etc/pam.d/chsh, etc/pam.d/userdel: - fixed header
+
+2004-10-27 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * etc/pam.d/chfn, etc/pam.d/chsh, etc/pam.d/userdel:
+ added missing template/example PAM service config files for chfn, chsh, userdel.
+
+ * NEWS, configure.in: start 4.0.6.
+
+2004-10-26 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/pl/Attic/adduser.8, man/pl/Makefile.am, man/Attic/adduser.8, man/Makefile.am, man/fr/Attic/adduser.8, man/fr/Makefile.am, man/id/Attic/adduser.8, man/id/Makefile.am, man/it/Attic/adduser.8, man/it/Makefile.am, man/ja/Attic/adduser.8, man/ja/Makefile.am, NEWS:
+ remove adduser(8) roff include man page to useradd(8).
+
+ * lib/Makefile.am: more fixes for non-inst libmisc.
+
+ * libmisc/Makefile.am, src/Makefile.am, NEWS:
+ change libmisc to private static library.
+
+ * etc/pam.d/Makefile.am: typo.
+
+2004-10-24 Andrzej Krzysztofowicz <ankry@pld.org.pl>
+
+ * po/pl.po: - more translation/formatting fixes
+
+ * po/pl.po: - updated translation
+
+ * po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/bs.po:
+ - make update-po, updated usage() translation
+
+ * src/useradd.c: - syntax fix for useradd in usage()
+
+ * po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po:
+ - usage() formatting and other fixes
+
+ * po/fi.po: - proper UTF
+
+ * po/pl.po: - pl translation fixes/updates by Jakub Bogusz
+
+2004-10-24 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * etc/pam.d/chage, etc/pam.d/chpasswd, etc/pam.d/groupadd, etc/pam.d/groupdel, etc/pam.d/groupmod, etc/pam.d/newusers, etc/pam.d/useradd, etc/pam.d/usermod:
+ use default path to PAM modules.
+
+ * etc/pam.d/Attic/shadow, etc/pam.d/Makefile.am, etc/pam.d/chage, etc/pam.d/chpasswd, etc/pam.d/groupadd, etc/pam.d/groupdel, etc/pam.d/groupmod, etc/pam.d/login, etc/pam.d/newusers, etc/pam.d/usermod:
+ Remove shadow PAM config file. Added PAM config files for: chage, chpasswd,
+ groupadd, groupdel, groupmod, login, newusers.
+
+ * po/zh_CN.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po:
+ "make update-po".
+
+ * configure.in: reverte previous incorrect commit.
+
+ * NEWS, src/su.c:
+ add pam_open_session() support. If builded 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
+
+2004-10-23 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * configure.in: cleanups.
+
+ * lib/defines.h:
+ define syslog() depending on ENABLE_NLS (not on HAVE_SETLOCALE).
+
+2004-10-23 Andrzej Krzysztofowicz <ankry@pld.org.pl>
+
+ * man/fr/Makefile.am: - killed non-existent manpage
+
+2004-10-18 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * libmisc/copydir.c, NEWS:
+ when placing symlinks into /etc/skel copy_tree of libmisc/copydir.c will
+ properly create the symlink in the destination directory but not change the
+ ownership to the target user/group. This 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
+
+2004-10-11 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/Makefile.am:
+ seems I foud CorrectWay(tm) for add some symlinks on install target.
+
+ * po/pl.po: more fixes.
+
+ * po/pl.po: added missing \n.
+
+ * src/chage.c, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, NEWS, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po:
+ more verbose/human readable -l output. This output is much more beter for
+ send directly via email for each users as message with account status (for
+ example as message with warning about account/password expiration).
+
+ * configure.in: start prepare for 4.0.5.
+
+ * src/Makefile.am, libmisc/Makefile.am, lib/Makefile.am, configure.in:
+ move LOCALEDIR to autoheader variables. Remove redefining DEFS in
+ Makefile.am (not neccessary now).
+
+ * src/chage.c, src/chpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/grpck.c, src/logoutd.c, src/newusers.c, src/pwck.c, src/useradd.c, src/userdel.c, src/usermod.c, NEWS:
+ applied OWL shadow-4.0.4.1-owl-pam-auth.diff patch by Solar Designer
+ <solar@openwall.com>:
+ Moved the PAM authentication in user management commands after
+ command-line parsing, made it use separate service names for each command.
+ Use constant strings rather than argv[0] for syslog ident in the user
+ management commands.
+
+ * man/Attic/useradd.8:
+ reword the useradd manpage a little to make it more clear. Fix from:
+ http://www.gentoo.org/cgi-bin/viewcvs.cgi/sys-apps/shadow/files/shadow-4.0.4.1-useradd-manpage-update.patch?rev=1.1
+
+ * configure.in: added libselinux detection.
+
+ * lib/Makefile.am, lib/commonio.c, lib/commonio.h, NEWS, autogen.sh, configure.in:
+ added SELinux support (basing on patch from Gentoo).
+
+ * man/fr/Makefile.am (man_MANS): added getspnam.3.
+
+2004-10-10 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/pt.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, src/groupadd.c, src/groupmod.c:
+ English grammar fix: s/is a not a valid group name/is not a valid group name/
+ (pointed by Mike Frysinger <vapier@gentoo.org>).
+
+2004-10-08 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, src/userdel.c:
+ When removing a user with userdel, userdel always exits 1 (fixed).
+ Based on http://bugs.gentoo.org/show_bug.cgi?id=66687.
+
+2004-08-21 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * configure.in:
+ Use AC_SEARCH_LIBS() for inet_ntoa(), socket(), gethostbyname() probing (instead AC_CHECK_FUNC()).
+
+2004-08-18 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Makefile.am: shadow(3) man page moved to man_MANS.
+
+ * libmisc/ttytype.c: Removed getenv() prototype (it is in <stdlib.h>).
+
+ * src/Attic/mkpasswd.c:
+ Removed fgetsx() prototype (it is in lib/prototypes.h).
+
+ * man/it/vigr.8: Fixed typo (s/wipw/vipw/).
+
+2004-08-09 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: Typo.
+
+ * po/tr.po, po/uk.po, po/zh_CN.po, po/bs.po, po/cs.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nn.po, po/pl.po, po/pt.po, po/ru.po, po/sk.po, po/sv.po:
+ Run "make update-po".
+
+ * po/ca.po, po/da.po, po/nl.po, po/pt_BR.po: Converted to UTF-8.
+
+ * po/LINGUAS: Typo.
+
+ * po/nb.po, po/nl.po, po/nn.po, po/pt.po, po/pt_BR.po, po/tr.po, po/zh_CN.po, NEWS, po/LINGUAS, po/bs.po, po/ca.po, po/da.po, po/eu.po, po/he.po, po/id.po:
+ New translations: bs, ca, da, eu, he, id, nb, nl, nn, pt, pt_BR, tr,
+ zh_CN (stolen froM Debian)
+
+ * man/Attic/grpck.8, man/Attic/mkpasswd.8, man/Attic/pwck.8, man/pl/Attic/mkpasswd.8, man/pl/grpck.8, man/pl/pwck.8:
+ Corrected section number.
+
+2004-08-04 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/zh_TW/chfn.1, man/zh_TW/chsh.1, man/zh_TW/groupadd.8, man/id/chsh.1, man/id/login.1, man/it/chfn.1, man/pl/chage.1, man/pl/groupadd.8, man/pl/groupmems.8, man/pl/lastlog.8, man/pl/login.1, man/pt_BR/groupadd.8, man/zh_CN/chfn.1, man/zh_CN/chsh.1, man/de/login.1, man/de/su.1, man/fr/chsh.1, man/fr/passwd.1, man/fr/usermod.8, man/hu/chfn.1, man/Attic/chage.1, man/Attic/groupadd.8, man/Attic/groupmems.8, man/Attic/lastlog.8, man/Attic/login.1, man/Attic/usermod.8:
+ Options description in alphabetical order.
+
+ * NEWS, src/login.c:
+ Applied 036_pam_access_with_preauth.patch Debian patch submited by Bjorn
+ Torkelsson <Bjorn.Torkelsson@hpc2n.umu.se>: add support for PAM account
+ management to restrict access using pam_access when login is invoked with -f.
+
+2004-06-05 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/getspnam.3: added roff link to shadow(3).
+
+ * man/Makefile.am (man_MANS): added getspnam.3.
+
+2004-06-03 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, lib/commonio.c, lib/getdef.c, src/vipw.c:
+ Applied OWL shadow-4.0.4.1-owl-check-reads.diff patch by Solar Designer.
+ Add checking for read errors in commonio and vipw/vigr (not doing so could
+ result in data loss when the records are written back).
+
+ * NEWS: Add note about apply shadow-4.0.4.1-owl-tmp.diff OWL patch.
+
+ * src/useradd.c, configure.in:
+ Remove looking for mkstemp() prototype and allways use mkstemp() (removed
+ using mktemp if mkstemp() not found).
+ Partialy based on tmp OWL patch by Solar Designer <solar@openwall.com>.
+
+ * NEWS, libmisc/pwdcheck.c:
+ Fixed securirty bug which allow unauthorized account properties modification.
+ Affected tools: chfn and chsh.
+ Bug was discovered by Martin Schulze <joey@infodrom.org>.
+
+2004-05-28 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: typo.
+
+ * NEWS, po/LINGUAS, po/it.po:
+ added it translation (by Danilo Piazzalunga <danilopiazza@libero.it>).
+
+2004-05-18 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: typos.
+
+ * po/sk.po: updated (by Peter Mann <Peter.Mann@tuke.sk>).
+
+2004-05-17 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/sk.po: run "make update-po".
+
+ * NEWS, po/LINGUAS, po/sk.po:
+ added sk translation (by Mann <Peter.Mann@tuke.sk>, submited by Christian
+ Perrier <bubulle@kheops.frmug.org>).
+
+2004-05-07 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * configure.in:
+ Use autoconf cache variables for file and directory location tests (by
+ Maciej W. Rozycki <macro@ds2.pg.gda.pl>).
+
+2004-05-06 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/passwd.5:
+ Correct path directory delimiters (by Maciej W. Rozycki <macro@ds2.pg.gda.pl>).
+
+ * libmisc/xmalloc.c (malloc):
+ Remove the declaration (by Maciej W. Rozycki <macro@ds2.pg.gda.pl>).
+
+2004-04-28 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/login.c, NEWS:
+ Fixed handle -f option: now it works correctly without specify "-h
+ <host>" if open login session localy is required (thanks for help
+ investigate bug for Krzysztof Kotlenga).
+
+ * po/es.po: Updated (by Ruben Porras <nahoo82@telefonica.net>).
+
+2004-04-23 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/cs.po, po/de.po, po/el.po, po/fi.po, po/fr.po, po/ja.po, po/pl.po, po/ru.po, po/sv.po, po/uk.po:
+ Run "update-po".
+
+2004-04-22 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/es.po: Updated to current (by run "update-po").
+
+ * po/es.po: Converted to utf-8.
+
+ * po/LINGUAS: Added es.
+
+ * po/es.po, NEWS:
+ Added es translation (by Ruben Porras <nahoo82@telefonica.net>).
+
+2004-04-05 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/ko.po, NEWS:
+ Updated ko translations (by Changwoo Ryu <cwryu@debian.org>).
+
+2004-04-02 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/fi.po: iconv -f iso8859-9 -t utf8
+
+2004-03-29 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * libmisc/age.c:
+ Use endsgent() conditionaly depending on SHADOWGRP (fix submited by Gabor Z.
+ Papp <gzp@papp.hu>).
+
+ * po/LINGUAS, po/fi.po, NEWS:
+ Added fi translation (by Tommi Vainikainen <thv@iki.fi>).
+
+ * README: Fixed shadow and shadow-commit lists on-line archives URLs.
+
+2004-01-14 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, configure.in, man/fr/Makefile.am, man/hu/Makefile.am, man/it/Makefile.am:
+ New version 4.0.4.1
+ bug fixes in automake files for generate correct tar ball on "make dist":
+ added midsiing "EXTRA_DIST = $(man_MANS)" in man/*/Makefile.am.
+
+ * man/ko/Makefile.am: New version 4.0.4.1
+ bug fixes in automake files for generate correct tar ball on "make dist":
+ added missing "EXTRA_DIST = $(man_MANS)" in man/*/Makefile.am.
+
+ * man/de/Makefile.am, man/es/Makefile.am: New version 4.0.4.1
+ bug fixes in automake files for generate correct tar ball on "make dist":
+ added midsiing "EXTRA_DIST = $(man_MANS)" in man/*/Makefile.am.
+
+ * configure.in: Fixed checking is avalaible st_rdev in struct stat.
+
+2004-01-13 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/pl.po: Typo.
+
+ * man/pl/useradd.8: Cleanups in SYNOPSIS.
+
+2004-01-12 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/pl.po: Cleanups.
+
+2004-01-07 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * configure.in: Cleanups after autoupdate.
+
+2004-01-05 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/groupadd.c, po/sv.po, po/uk.po, po/ru.po, po/ko.po, po/pl.po, po/fr.po, po/ja.po, po/el.po, po/cs.po, po/de.po, man/zh_TW/groupadd.8, man/zh_CN/groupadd.8, man/pt_BR/groupadd.8, man/pl/groupadd.8, man/ja/groupadd.8, man/it/groupadd.8, man/Attic/groupadd.8, NEWS:
+ Added missing information about -f options in groupadd usage mesage (document
+ this also in man page).
+
+2003-12-17 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * lib/Attic/lastlog_.h, libmisc/log.c, libmisc/utmp.c, src/lastlog.c, src/login.c:
+ More time() or gettimeofday() prevention overwrite memory on 64bit arch
+ (partialy based on patch from MDK).
+
+ * po/sv.po, po/uk.po, po/cs.po, po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/ru.po:
+ Post remove TCFS support "make update-po".
+
+ * man/Makefile.am: Removed getspnam.3 from EXTRA_DIST.
+
+ * po/POTFILES.in: Removed lib/tcfsio.c.
+
+ * lib/Attic/tcfsio.c, lib/Attic/tcfsio.h, lib/Makefile.am, src/passwd.c, src/userdel.c, NEWS, configure.in, doc/Attic/README.pam:
+ Removed TCFS support (tcfs is dead).
+
+ * configure.in:
+ Added using AM_MAINTAINER_MODE. AC_INIT without parameters.
+
+ * Attic/acconfig.h, configure.in:
+ Cleanups on autoheadres level: use AC_DEFINE(VAR, VAL, [Comment]) for
+ USE_PAM, HAVE_TCFS and TCFS_GDBM_SUPPORT.
+
+ * src/newusers.c, src/useradd.c, Attic/acconfig.h, autogen.sh, lib/Attic/pwpack.c, NEWS:
+ Remove all old BSD_QUOTA dependent code.
+
+2003-12-16 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * lib/Makefile.am, libmisc/Makefile.am, src/Makefile.am:
+ Removed -I$(top_srcdir) from INCLUDES (isn't neccessary becaus this is in
+ DEFAULT_INCLUDES) - slightly shorter compile output.
+
+ * Makefile.am, configure.in:
+ Added using AM_GNU_GETTEXT([external]) - removed intl SUBDIRS.
+ Added locale.h to AC_CHECK_HEADERS() - lib/defines.h have part which depends
+ on HAVE_LOCALE_H.
+
+ * lib/nscd.h: Added missing newline at end of file.
+
+ * Attic/acconfig.h: Remove unused (#un)defines.
+
+ * autogen.sh: Typo.
+
+ * autogen.sh: Much more simpler script - use autoreconf.
+
+ * po/cs.po, po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/ru.po, po/sv.po, po/uk.po:
+ "make update-po".
+
+2003-12-07 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/LINGUAS: Languages list for gettext 1.12.x.
+
+2003-10-26 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/pl.po: Kill fuzzy entries.
+
+2003-10-21 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/usermod.8:
+ Typo: missing "." on end of sentence (submited by Stepan Kasal <kasal@ucw.cz>).
+
+2003-09-07 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/ru.po, po/sv.po, po/uk.po, po/cs.po, po/de.po, po/el.po, NEWS:
+ convert all po/*.po files to utf-8.
+
+2003-09-05 Andrzej Krzysztofowicz <ankry@pld.org.pl>
+
+ * po/ru.po: - fixed header
+
+2003-07-29 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/pl.po, po/ru.po, po/sv.po, po/uk.po, libmisc/pam_pass.c, po/cs.po, po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po:
+ Otput "passwd: password updated successfully\n" message on successfull
+ password change (based on Debian changes).
+
+ * src/newgrp.c: Remove work around for unsecure gettext.
+
+2003-06-30 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/useradd.c, src/usermod.c:
+ Added initializing memory in variables when get_groups() function is not called,
+ and memory allocated for user_groups is not initialized (in both useradd and
+ usermod when -G options is used and in usermod when -l option is used).
+ That causing segfaults sometimes.
+ This fix is importand but not critical because usermod and usermod aren't suid
+ root.
+ Problem reported and fixed by Alexey Voinov <voins@altlinux.ru>.
+
+2003-06-19 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/login.1: Fixed FILES section.
+
+ * src/chfn.c, src/chpasswd.c, src/chsh.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/grpconv.c, src/grpunconv.c, src/id.c, src/login.c, src/logoutd.c, src/newgrp.c, src/newusers.c, src/passwd.c, src/pwconv.c, src/pwunconv.c, src/su.c, src/suauth.c, src/useradd.c, src/userdel.c, src/usermod.c, src/vipw.c:
+ Indented.
+
+ * src/chage.c: Move *flg variables to global.
+
+ * Attic/acconfig.h: Comment for USG.
+
+2003-05-14 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/de/chfn.1, man/de/login.1:
+ Fixed section name (s/NAME/BEZEICHNUNG/).
+
+ * man/de/chfn.1, man/de/chsh.1: Sync FILES section with en version.
+
+ * man/Attic/login.1: Typo (s/avr/var/).
+
+ * man/de/login.1: Sync FILES section with en man version.
+
+ * man/de/chfn.1, man/de/chsh.1, man/de/login.1: Remove ^M from EOL.
+
+ * man/de/login.1, man/de/Makefile.am, man/de/chfn.1, man/de/chsh.1, NEWS:
+ Next round updates from Josef Spillner <josef@ggzgamingzone.org>: update
+ chsh(1), login(1) and added new chfn(1) german man pages.
+
+ * NEWS: Added info about remove d_passwd(5), dialups(5) man pags.
+
+2003-05-12 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, TODO, src/chfn.c, src/chpasswd.c, src/chsh.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/passwd.c, src/pwunconv.c, src/useradd.c, src/userdel.c, src/usermod.c, src/vipw.c:
+ One TODO entry gone: fix nscd flushing databases on change (use
+ per service flushing method instead HUPing nscd process).
+
+ * lib/Makefile.am, lib/commonio.c, lib/nscd.c, lib/nscd.h, libmisc/Attic/nscd.c, libmisc/Attic/nscd.h, libmisc/Makefile.am:
+ Move nscd.{c,h} from libmisc/ to lib/.
+ Fix warning about implicit declaration of function `nscd_flush_cache' in lib/commonio.c.
+
+ * lib/pwauth.h: Fix pw_auth() prototype.
+
+ * libmisc/Attic/nscd.c, libmisc/Attic/nscd.h, libmisc/Makefile.am:
+ Added header file for nscd communication functions.
+
+ * libmisc/chkname.c (good_name):
+ fixed warning about comparison between pointer and integer.
+
+ * po/cs.po, po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/ru.po, po/sv.po, po/uk.po:
+ "make update-po".
+
+ * src/useradd.c (main):
+ chain create_mail() and small fix in usage message.
+
+ * src/userdel.c: Removed AUTH_METHODS code.
+
+ * lib/pwauth.c: Fixed pw_auth() prototype.
+
+ * src/sulogin.c, src/usermod.c: Removed AUTH_METHODS code.
+
+ * po/cs.po, po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/ru.po, po/sv.po, po/uk.po:
+ "make update-po".
+
+ * src/useradd.c: Indent.
+
+ * man/ja/Attic/pwauth.8, man/ja/Makefile.am, man/pl/Attic/pwauth.8, man/pl/Makefile.am, src/passwd.c, src/useradd.c, NEWS, lib/pwauth.c, man/Attic/pwauth.8, man/Makefile.am:
+ Cleanups continuations: removed old AUTH_METHODS dependent code,
+ removed also pwauth(8) man page.
+
+ * man/pl/Makefile.am (man_MANS): remove d_passwd.5 man page.
+
+ * src/useradd.c, src/usermod.c, po/cs.po, po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/ru.po, po/sv.po, po/uk.po:
+ Cleanups in usage messages.
+
+ * src/newgrp.c: Cleanups in comments.
+
+ * po/uk.po, po/sv.po, po/ru.po, po/pl.po, po/ko.po, po/ja.po, po/fr.po, po/el.po, po/de.po, po/cs.po:
+ "make update-po".
+
+ * lib/getdef.c (main): remove gettextize error messages from test code.
+
+ * NEWS: Cleanups.
+
+2003-05-07 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/useradd.c, man/pl/useradd.8, po/cs.po, po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/ru.po, po/sv.po, po/uk.po, NEWS, TODO, etc/useradd, man/Attic/useradd.8:
+ Added handle by useradd /etc/defaults/useradd::CREATE_MAIL_SPOOL={yes|no}.
+ Now on adding user account can be added also created empty user mail
+ spool. Curent code handle only mailbox.
+ TODO: add handle create user mail spool in maildir format.
+
+ * TODO: Typo.
+
+ * src/chage.c (usage): fix missing ")".
+ (main): updated commented description.
+
+ * src/useradd.c: Indent.
+
+ * man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8:
+ Minor cleanups.
+
+ * man/Attic/chage.1, man/pl/chage.1:
+ Rewrite for use claissic list form options descriptions.
+
+ * man/pl/groupadd.8:
+ s/Polecenie groupadd posiada opcje:/Polecenie groupadd posiada następujące opcje:/
+
+ * TODO: ALL:
+ move base passwd/shadow/group/gshadow operation to module for allow write
+ diffrent backend modules for db, NIS, LDAP and others. Default backend it
+ will be choose depending on /etc/nsswitch.conf and allow overrride this by
+ -r <repository> options (where the <repository> can be file, db, nis
+ nisplus, ldap .. like on /etc/nsswitch.conf in service column).
+ passwd have old piece of code with handling -r option and it will be good
+ finish this and propagate on other shadow tools for allow operate on other
+ user databases by well known tools.
+
+ useradd:
+ add handle /etc/defaults/useradd::CREATE_MAIL_SPOOL={yes,no} for allow
+ create empty mail spool for added user.
+
+ * man/pl/Attic/d_passwd.5, man/pl/Attic/dialups.5: Removed.
+
+ * man/Attic/groupmems.8: Close few \fB by add \fR.
+
+ * man/Attic/groupadd.8, man/Attic/groupmems.8: Minor cleanups.
+
+2003-05-06 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/grpconv.c, src/grpunconv.c, src/pwconv.c, src/pwunconv.c:
+ Move non-SHADOWPWD stub code to end of file (like in chage.c) and do not use
+ gettextized message.
+
+ * po/cs.po, po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/ru.po, po/sv.po, po/uk.po:
+ "make update-po".
+
+ * src/chage.c, NEWS:
+ Now all code depend on SHADOWPWD. If shadow will not be configured on
+ autoconf level for using shadow possword chage is olny stub which informs
+ "chage not configured for shadow password support."
+
+ * man/it/Makefile.am: Removed EXTRA_DIST (not neccessary).
+
+ * man/es/Makefile.am: Removed groups.1 (doen't exist es groups(1)).
+
+ * man/de/Makefile.am (man_MANS): added login.1.
+
+ * man/de/Makefile.am: Removed EXTRA_DIST (isn't neccessary now).
+
+ * man/hu/Makefile.am, man/ja/Makefile.am, man/ko/Makefile.am, man/pl/Makefile.am, man/de/Makefile.am, man/fr/Makefile.am, NEWS, man/Makefile.am:
+ Install groups(1) man page (moved from EXTRA_DIST to man_MANS).
+
+ * po/.cvsignore:
+ Added files generated by gettextize from gettext 0.11.5.
+
+ * po/cs.po, po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/ru.po, po/sv.po, po/uk.po:
+ Updated after removing dialup tools.
+
+ * po/POTFILES.in: Removed lib/{dialchk,dialup}.c and src/dpasswd.c.
+
+2003-05-05 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * libmisc/shell.c (shell): do not gettexitize DEBUG message.
+
+ * src/chsh.c, src/grpconv.c, src/login.c, src/logoutd.c, src/sulogin.c, src/vipw.c, libmisc/Attic/login_access.c, libmisc/getdate.y, libmisc/limits.c, libmisc/obscure.c, libmisc/setupenv.c, lib/Attic/getpass.c, lib/pwauth.c:
+ Removed "#if 0 .. #endif" dead code.
+
+ * libmisc/utmp.c: Fixed unterminated #if.
+
+ * libmisc/Attic/login_access.c (resolve_hostname):
+ cleanup: removed #if 1 .. #endif.
+
+ * libmisc/.cvsignore: Added getdate.c.
+
+ * libmisc/Attic/getdate.c:
+ Removed - this file is generated by bison/yacc.
+
+ * configure.in:
+ Change file name passwd in AC_INIT argument from lib/dialchk.c to src/passwd.c.
+
+ * src/su.c:
+ Removed dead code (#if 0 .. #endif) with call motd() and mailcheck()
+ (was commnted because GNU su doesn't do this).
+
+2003-05-04 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/Attic/dpasswd.c, src/login.c, src/Makefile.am, man/pl/Attic/dpasswd.8, man/pl/Makefile.am, man/ja/Attic/dpasswd.8, man/ja/Makefile.am, man/Attic/dpasswd.8, man/Makefile.am, lib/Attic/dialchk.c, lib/Attic/dialchk.h, lib/Attic/dialup.c, lib/Attic/dialup.h, lib/Makefile.am, lib/getdef.c, etc/Attic/login.defs.linux, etc/login.defs, NEWS:
+ Removed old dpasswd and DIALUPS_CHECK_ENAB login.defs handling code from login.
+
+ * doc/Attic/ANNOUNCE, doc/Makefile.am, NEWS: Removed old doc/ANNOUNCE.
+
+ * src/login.c, lib/getdef.c, etc/Attic/login.defs.linux, NEWS:
+ Remove NO_PASSWORD_CONSOLE code.
+
+2003-05-03 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * libmisc/pwd2spwd.c, libmisc/utmp.c, libmisc/entry.c, libmisc/isexpired.c, lib/sgetspent.c, lib/shadow.c, lib/Attic/putpwent.c, lib/Attic/pwent.c, lib/Attic/pwpack.c, lib/defines.h, lib/pwio.c, lib/sgetpwent.c, Attic/acconfig.h, configure.in:
+ Remove old SVR4, ATT_AGE, ATT_COMMENT dependent code.
+
+ * src/chage.c:
+ Remove some ageing code which was not used if SHADOWPWD isn't defined.
+ Now handling mindays, maxdays and lastday also depends on SHADOWPWD.
+
+2003-05-01 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/dpasswd.8, man/Attic/expiry.1, man/Attic/faillog.5, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmems.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/limits.5, man/Attic/login.1, man/Attic/login.access.5, man/Attic/login.defs.5, man/Attic/logoutd.8, man/Attic/mkpasswd.8, man/Attic/newgrp.1, man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/pwauth.8, man/Attic/pwck.8, man/Attic/pwconv.8, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/shadowconfig.8, man/Attic/su.1, man/Attic/sulogin.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/Attic/vipw.8:
+ Reformated.
+
+ * etc/login.defs:
+ Use FHS 2.x compliant paths to lastlog, sulog, mail spool and also change
+ ENV_SUPATH to PATH=/sbin:/bin:/usr/sbin:/usr/bin and
+ ENV_PATH to PATH=/bin:/usr/bin
+
+ * old/Attic/Makefile.am, old/Attic/Makefile.linux, old/Attic/Makefile.sun4, old/Attic/Makefile.svr4, old/Attic/Makefile.xenix, old/Attic/config.h.linux, old/Attic/config.h.sun4, old/Attic/config.h.svr4, old/Attic/config.h.xenix, old/Attic/orig-config.h, old/Attic/pwconv-old.8, old/Attic/pwconv-old.c, old/Attic/pwconv.8, old/Attic/pwd.h.m4, old/Attic/pwunconv-old.8, old/Attic/pwunconv-old.c, old/Attic/pwunconv.8, old/Attic/scologin.c, old/Attic/vipw.8:
+ Removed old stuff.
+
+2003-04-30 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/pl.po, po/ru.po, po/sv.po, po/uk.po, po/cs.po, po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po:
+ make update-po
+
+ * src/su.c: Remove not mached #endif after removing ATT_AGE code.
+
+ * man/ko/passwd.5: Remove ^M from end of line.
+
+ * src/chage.c, src/chpasswd.c, src/login.c, src/newusers.c, src/passwd.c, src/pwunconv.c, src/su.c, src/useradd.c, Attic/acconfig.h, NEWS, configure.in:
+ Removed old ATT_AGE (account ageing in passwd file) dependent code.
+
+ * po/pl.po: Fix chage and lastlog messages.
+
+2003-04-29 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * libmisc/limits.c, src/logoutd.c:
+ More utmp/utmpx fixes: use endutend() or endutxend() depending on HAVE_UTMPX_H.
+
+ * po/cs.po, po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/ru.po, po/sv.po, po/uk.po:
+ Run "make update-po" after remove SVR4 code and fix duplicated entries in sv.po.
+
+ * NEWS, src/login.c, src/logoutd.c, src/useradd.c:
+ Remove old SVR4 and SVR4_SI86_EUA dependent code from login, useradd and
+ logoutd.
+
+2003-04-28 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/pl/usermod.8: Remove "OD TŁUMACZA" section.
+
+ * man/pl/groupadd.8, man/pl/groupdel.8, man/pl/groupmod.8, man/pl/grpck.8, man/pl/passwd.1, man/pl/pwck.8, man/pl/useradd.8, man/pl/userdel.8, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmod.8, man/Attic/grpck.8, man/Attic/passwd.1, man/Attic/pwck.8, man/Attic/useradd.8, man/Attic/userdel.8:
+ Added EXIT VALUES section with full description exit codes.
+
+ * src/groupadd.c: Typo (s/nut/not/).
+
+ * man/Attic/shadowconfig.8: Merge changes from Debian.
+
+ * NEWS, man/Attic/passwd.5:
+ Remove text about password aging from passwd(5) (based on Debian changes).
+
+ * po/cs.po, po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/ru.po, po/sv.po, po/uk.po, src/lastlog.c, man/Attic/lastlog.8, man/it/lastlog.8, man/ja/lastlog.8, man/pl/lastlog.8:
+ More unification in lastlog command syntax.
+
+ * man/Attic/lastlog.8, man/it/lastlog.8, man/ja/lastlog.8, man/pl/lastlog.8:
+ Unifications in SYNOPSIS.
+
+ * man/it/gpasswd.1, man/it/groupadd.8, man/it/groupdel.8, man/it/groupmod.8, man/it/grpck.8, man/it/lastlog.8, man/it/useradd.8, man/it/userdel.8, man/it/usermod.8:
+ Remove ^M from end of line.
+
+ * man/Attic/gpasswd.1, man/Attic/groupadd.8:
+ Indentation in FILES section.
+
+ * src/pwconv.c, src/useradd.c, src/userdel.c:
+ s/bad command syntax/invalid command syntax/
+
+ * src/userdel.c:
+ Indent by hand (seems indent have problems with complex conditions).
+
+ * man/ru/Makefile.am: man_MANS: s#passwd.1#passwd.5#
+
+ * po/pl.po: s/nie mogę/nie można/
+
+ * po/fr.po: Emoticon removed.
+
+ * NEWS, configure.in, man/Makefile.am, man/ru/.cvsignore, man/ru/Makefile.am, man/ru/passwd.5:
+ Added ru passwd(1) man page from KSI resources.
+
+ * man/zh_CN/Makefile.am, man/zh_CN/chfn.1, man/zh_CN/chsh.1, man/zh_TW/Makefile.am, man/zh_TW/chfn.1, man/zh_TW/chsh.1, man/ja/Attic/dpasswd.8, man/ja/Attic/mkpasswd.8, man/ja/Attic/pw_auth.3, man/ja/Attic/pwauth.8, man/ja/Attic/shadowconfig.8, man/ja/Makefile.am, man/ja/chage.1, man/ja/chfn.1, man/ja/chpasswd.8, man/ja/chsh.1, man/ja/expiry.1, man/ja/faillog.5, man/ja/faillog.8, man/ja/gpasswd.1, man/ja/groupadd.8, man/ja/groupdel.8, man/ja/groupmod.8, man/ja/groups.1, man/ja/grpck.8, man/ja/id.1, man/ja/lastlog.8, man/ja/limits.5, man/ja/login.1, man/ja/login.access.5, man/ja/login.defs.5, man/ja/logoutd.8, man/ja/newgrp.1, man/ja/newusers.8, man/ja/passwd.1, man/ja/passwd.5, man/ja/porttime.5, man/ja/pwck.8, man/ja/pwconv.8, man/ja/shadow.3, man/ja/shadow.5, man/ja/su.1, man/ja/suauth.5, man/ja/sulogin.8, man/ja/useradd.8, man/ja/userdel.8, man/ja/usermod.8, man/ja/vipw.8, NEWS, man/cs/Makefile.am, man/cs/id.1:
+ Added chch(1), chfn(1) man pages from chinese man pages translation
+ project.
+ Added id(1) man page czech man pages translation project.
+ Updated ja man pages and added expiry(1).
+
+ * man/hu/groups.1, man/hu/login.1:
+ Remove info about $HOME/.profile from FILES section (this does not depends
+ stricte on shadow).
+
+ * configure.in, man/Makefile.am, man/es/Makefile.am:
+ Added es man pages to ac/am suit.
+
+ * man/es/.cvsignore, man/hu/.cvsignore, man/pt_BR/.cvsignore, man/zh_CN/.cvsignore, man/zh_TW/.cvsignore:
+ Added .cvsignore files.
+
+ * man/hu/Makefile.am, man/hu/su.1:
+ Added su(1) man page from hungarian man pages translation project.
+
+2003-04-26 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: Ready for gettext 0.11.5, automake 1.7.4, autoconf 2.57.
+ Many cleanups and unifications in man pages.
+
+ * man/pt_BR/gpasswd.1, man/pt_BR/groupadd.8, man/pt_BR/groupdel.8, man/pt_BR/groupmod.8, man/pt_BR/shadow.5, man/zh_CN/chpasswd.8, man/zh_CN/groupadd.8, man/zh_CN/groupdel.8, man/zh_CN/groupmod.8, man/zh_CN/useradd.8, man/zh_CN/userdel.8, man/zh_CN/usermod.8, man/zh_TW/groupadd.8, man/zh_TW/groupdel.8, man/zh_TW/groupmod.8, man/zh_TW/useradd.8, man/zh_TW/userdel.8, man/zh_TW/usermod.8, man/ko/login.1, man/ko/su.1, man/pl/chage.1, man/pl/chfn.1, man/pl/chsh.1, man/pl/expiry.1, man/pl/gpasswd.1, man/pl/groupmems.8, man/pl/groups.1, man/pl/id.1, man/pl/lastlog.8, man/pl/login.1, man/pl/newgrp.1, man/pl/passwd.1, man/pl/su.1, man/pl/sulogin.8, man/pl/useradd.8, man/pl/usermod.8, man/ja/Attic/mkpasswd.8, man/ja/chage.1, man/ja/chfn.1, man/ja/chsh.1, man/ja/faillog.5, man/ja/faillog.8, man/ja/gpasswd.1, man/ja/groupadd.8, man/ja/groupdel.8, man/ja/groupmod.8, man/ja/groups.1, man/ja/grpck.8, man/ja/id.1, man/ja/lastlog.8, man/ja/limits.5, man/ja/login.1, man/ja/login.access.5, man/ja/logoutd.8, man/ja/newgrp.1, man/ja/passwd.1, man/ja/passwd.5, man/ja/porttime.5, man/ja/pwck.8, man/ja/shadow.3, man/ja/shadow.5, man/ja/su.1, man/ja/suauth.5, man/ja/sulogin.8, man/ja/useradd.8, man/ja/userdel.8, man/ja/usermod.8, man/hu/chsh.1, man/hu/gpasswd.1, man/hu/groups.1, man/hu/login.1, man/hu/newgrp.1, man/hu/passwd.1, man/it/gpasswd.1, man/it/groupadd.8, man/it/groupdel.8, man/it/groupmod.8, man/it/grpck.8, man/it/lastlog.8, man/it/shadow.5, man/it/useradd.8, man/it/userdel.8, man/it/usermod.8, man/cs/shadow.5, man/es/su.1, man/fr/chage.1, man/fr/faillog.5, man/fr/gpasswd.1, man/fr/shadow.5, man/fr/su.1, man/fr/userdel.8, man/fr/usermod.8, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chsh.1, man/Attic/dpasswd.8, man/Attic/expiry.1, man/Attic/faillog.5, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmems.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/limits.5, man/Attic/login.1, man/Attic/login.access.5, man/Attic/logoutd.8, man/Attic/mkpasswd.8, man/Attic/newgrp.1, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/pwck.8, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/su.1, man/Attic/suauth.5, man/Attic/sulogin.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8:
+ Fixes: correct utmp/wtmp paths.
+ Unifications: bold commnanda and italify other file names.
+ Other minor changes and cleanups and unifications.
+
+ * libmisc/limits.c: More utmpx/utmp fixes.
+
+ * src/chpasswd.c, src/faillog.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmems.c, src/groupmod.c, src/id.c, src/login.c, src/newgrp.c, src/passwd.c, src/useradd.c, src/userdel.c, src/usermod.c, po/cs.po, po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/ru.po, po/sv.po, po/uk.po:
+ Usage help message unification (s/usage:/Usage:/).
+
+ * TODO: Missing "are".
+
+ * src/logoutd.c, src/userdel.c, NEWS:
+ Handle also utmpx if avalaile in userdel and logoutd.
+
+2003-04-25 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/sulogin.c: Remove unused utent declaration.
+
+ * src/sulogin.c, src/login.c:
+ Remove #include <utmp.h> and <utmpx.h>. This comes with #include "prototypes.h".
+
+ * lib/prototypes.h:
+ "#include <utmp.h>" or "#include <utmpx.h>" depending on HAVE_UTMPX_H.
+
+ * libmisc/failure.c:
+ Remove "#include <utmp.h>" (this is included in failure.h).
+
+ * configure.in:
+ On detect mail spool directory location try first /var/mail.
+
+2003-04-22 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * libmisc/Attic/getdate.c, libmisc/Attic/login_access.c, libmisc/Attic/login_desrpc.c, libmisc/Attic/login_krb.c, libmisc/Attic/nscd.c, libmisc/Attic/setup.c, libmisc/entry.c, libmisc/env.c, libmisc/failure.c, libmisc/fields.c, libmisc/hushed.c, libmisc/isexpired.c, libmisc/limits.c, libmisc/list.c, libmisc/log.c, libmisc/loginprompt.c, libmisc/mail.c, libmisc/motd.c, libmisc/myname.c, libmisc/obscure.c, libmisc/pam_pass.c, libmisc/pwd2spwd.c, libmisc/pwd_init.c, libmisc/pwdcheck.c, libmisc/rlogin.c, libmisc/salt.c, libmisc/setugid.c, libmisc/setupenv.c, libmisc/shell.c, libmisc/strtoday.c, libmisc/sub.c, libmisc/sulog.c, libmisc/ttytype.c, libmisc/tz.c, libmisc/ulimit.c, libmisc/utmp.c, libmisc/valid.c, libmisc/xmalloc.c, libmisc/Attic/chkshell.c, libmisc/addgrps.c, libmisc/age.c, libmisc/basename.c, libmisc/chkname.c, libmisc/chowndir.c, libmisc/chowntty.c, libmisc/console.c, libmisc/copydir.c:
+ Indent all using current .indent.pro settings.
+
+ * po/Makevars: New file neccessary for gettext >=0.11.5.
+
+ * man/Makefile.am: Removed getspnam.3 from man_MANS (dos not exist).
+
+ * po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/ru.po:
+ Fixes after filtering gettext 0.11.5 (missing headers elements, inforrect
+ format strings).
+
+2003-04-21 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, man/de/passwd.1:
+ updated german passwd(1) man page (by Josef Spillner <josef@ggzgamingzone.org>)
+
+2003-03-12 Andrzej Krzysztofowicz <ankry@pld.org.pl>
+
+ * po/pl.po: - updated; terminology unification
+
+2003-02-28 Paweł Gołaszewski <blues@pld.org.pl>
+
+ * etc/login.defs: - missing "MD5_CRYPT_ENAB yes" added
+
+2003-01-20 Andrzej Krzysztofowicz <ankry@pld.org.pl>
+
+ * configure.in: - added Makefiles for man/zh_{CN,TW}
+
+ * man/Makefile.am, man/zh_CN/Makefile.am, man/zh_CN/chpasswd.8, man/zh_CN/groupadd.8, man/zh_CN/groupdel.8, man/zh_CN/groupmod.8, man/zh_CN/useradd.8, man/zh_CN/userdel.8, man/zh_CN/usermod.8, man/zh_TW/Makefile.am, man/zh_TW/groupadd.8, man/zh_TW/groupdel.8, man/zh_TW/groupmod.8, man/zh_TW/useradd.8, man/zh_TW/userdel.8, man/zh_TW/usermod.8:
+ - added zh man pages from MDK (2 x 6) and from cman (1)
+
+2003-01-07 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/ja/shadow.3, man/pl/shadow.3, man/Attic/shadow.3:
+ sync spwd structure declaration with current glibc declaration (tahnks for
+ point this bug to Michael Kerrisk <michael.kerrisk@gmx.net>).
+
+ * man/pl/faillog.5: s/konsolę/terminal/
+
+2002-12-29 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/Makefile.am: typo (s/EXTRA_DOST/EXTRA_DIST/).
+
+2002-10-14 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/Makefile.am:
+ fixed making vigr symlink to vipw (not vipw to vigr) in install-exec-hook (fix submited by
+ Dimitar Zhekov <jimmy@is-vn.bg>).
+
+ * debian/Attic/login.copyright, debian/Attic/login.postinst, debian/Attic/login.postrm, debian/Attic/login.preinst, debian/Attic/login.prerm, debian/Attic/logoutd.init, debian/Attic/passwd.conffiles, debian/Attic/passwd.copyright, debian/Attic/passwd.cron, debian/Attic/passwd.init, debian/Attic/passwd.postinst, debian/Attic/passwd.postrm, debian/Attic/porttime, debian/Attic/rules, debian/Attic/secure-su.README, debian/Attic/secure-su.conffiles, debian/Attic/secure-su.copyright, debian/Attic/secure-su.postrm, debian/Attic/secure-su.preinst, debian/Attic/securetty, debian/Attic/shadowconfig.sh, debian/Attic/Makefile.am, debian/Attic/changelog, debian/Attic/checksums, debian/Attic/control, debian/Attic/control.gnu, debian/Attic/control.linux, debian/Attic/login.conffiles, Makefile.am, configure.in:
+ removed debian directory.
+
+2002-10-12 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, src/newgrp.c:
+ Use CLOSE_SESSIONS depending code only when USE_PAM.
+ The problem was reported by Mattias Webjorn Eriksson using Slackware
+ 8.1 and reproduced it using slackware-current (9.0beta) (fix submited by
+ Simon Williams <simon@no-dns-yet.org.uk>).
+
+2002-10-07 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/ja/login.1, man/ja/logoutd.8, man/pl/login.1, man/pl/logoutd.8, man/Attic/login.1, man/Attic/logoutd.8, man/hu/login.1:
+ changed utmp and wtmp files paths (s#/etc/utmp/#/var/run/utmp#; s#/etc/wtmp#/var/log/wtmp#)
+
+ * po/ru.po, configure.in: added ru translation (from KSI resources).
+
+2002-09-07 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, libmisc/failure.c:
+ libbmisc/failure.c (too_many_failures): incorrect if() condition in non-PAM
+ dependent code in fail login handling (fixed by Krzysztof Oledzki <ole@ans.pl>).
+
+2002-08-05 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/pl/useradd.8, man/Attic/useradd.8, NEWS:
+ document useradd and groupadd -M option in en and pl man pages
+ (by Jakub Mikusek <mick3y@o.k.pl>).
+
+ * configure.in: start prepare 4.0.4.
+
+2002-03-18 Andrzej Krzysztofowicz <ankry@pld.org.pl>
+
+ * man/ja/Attic/dpasswd.8, man/ja/Attic/shadowconfig.8, man/ja/chpasswd.8, man/ja/faillog.8, man/ja/groupadd.8, man/ja/groupdel.8, man/ja/groupmod.8, man/ja/id.1, man/ja/lastlog.8, man/ja/login.defs.5, man/ja/newusers.8, man/ja/su.1, man/ja/useradd.8, man/ja/userdel.8, man/ja/usermod.8, man/ja/vipw.8:
+ - updated to man-pages-ja-20020315 (except cvs tags)
+
+2002-03-15 Andrzej Krzysztofowicz <ankry@pld.org.pl>
+
+ * TODO: - remove already done pl man updates from the list
+
+2002-03-13 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/ko/.cvsignore, man/ko/Makefile.am, man/ko/chfn.1, man/ko/chsh.1, man/ko/groups.1, man/ko/id.1, man/ko/login.1, man/ko/newgrp.1, man/ko/passwd.5, man/ko/su.1:
+ added ko man pages.
+
+ * man/de/.cvsignore, man/de/Makefile.am:
+ automake files for de man pages.
+
+ * TODO: updated.
+
+ * man/it/.cvsignore, man/it/Makefile.am, man/id/.cvsignore, man/id/Attic/adduser.8, man/id/Makefile.am, man/id/useradd.8, man/Makefile.am, man/cs/.cvsignore, man/cs/Makefile.am, man/fr/.cvsignore, man/fr/Makefile.am, configure.in, NEWS:
+ added cs, de, fr, id, it, ko man pages to ac/am.
+
+2002-03-12 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/sv.po, po/uk.po, po/cs.po, po/de.po, po/el.po:
+ "make update-po"
+
+ * po/de.po, NEWS, configure.in:
+ added de translation (by Frank Schmid <frank@cs-schmid.de>).
+
+ * NEWS: added info about Solar patch for man pages.
+
+2002-03-10 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/it/usermod.8, man/it/vigr.8, man/it/vipw.8, man/it/Attic/adduser.8, man/it/chfn.1, man/it/chsh.1, man/it/gpasswd.1, man/it/groupadd.8, man/it/groupdel.8, man/it/groupmod.8, man/it/groups.1, man/it/grpck.8, man/it/grpconv.8, man/it/grpunconv.8, man/it/id.1, man/it/lastlog.8, man/it/login.1, man/it/newgrp.1, man/it/passwd.1, man/it/passwd.5, man/it/pwconv.8, man/it/pwunconv.8, man/it/shadow.5, man/it/useradd.8, man/it/userdel.8, man/id/Attic/adduser.8, man/id/chsh.1, man/id/login.1, man/fr/Attic/adduser.8, man/fr/chage.1, man/fr/chpasswd.8, man/fr/chsh.1, man/fr/faillog.5, man/fr/gpasswd.1, man/fr/groups.1, man/fr/id.1, man/fr/newgrp.1, man/fr/passwd.1, man/fr/passwd.5, man/fr/shadow.5, man/fr/su.1, man/fr/useradd.8, man/fr/userdel.8, man/fr/usermod.8, man/es/login.1, man/es/passwd.1, man/es/su.1, man/de/chsh.1, man/de/groups.1, man/de/login.1, man/de/passwd.1, man/de/su.1, man/cs/passwd.5, man/cs/shadow.5:
+ added some raw cs, de, es, fr, id, it man pages from national
+ man pages translation projects (all man pages not yet added to Makefile.am
+ files because all need some work).
+
+ * man/hu/chfn.1, man/hu/id.1:
+ added id(1) chfn(1) from hu man pages translation project (it need some work
+ because this documents describes GNU version id and chfn from util-linux).
+
+ * man/hu/Makefile.am, man/hu/login.1:
+ added login(1) man page from hu man pages translation project.
+
+ * po/POTFILES.in: updated (suath.c moved to src/).
+
+ * src/Makefile.am: added su_SOURCES with "su.c suauth.c".
+
+ * libmisc/Makefile.am:
+ remove suauth.c from libmisc_la_SOURCES (varialbles and functions from
+ this file are usesd only in su).
+
+ * libmisc/Attic/suauth.c, src/suauth.c: move suauth.c o src/.
+
+ * libmisc/Attic/suauth.c:
+ move "struct passwd pwent" outside #ifdef SU_ACCESS.
+
+2002-03-09 Andrzej Krzysztofowicz <ankry@pld.org.pl>
+
+ * man/pl/chage.1, man/pl/chfn.1, man/pl/chsh.1, man/pl/expiry.1, man/pl/gpasswd.1, man/pl/groups.1, man/pl/id.1, man/pl/login.1, man/pl/newgrp.1, man/pl/passwd.1, man/pl/su.1:
+ - sync with en versions
+
+ * man/Attic/login.1, man/Attic/newgrp.1, man/Attic/passwd.1, man/Attic/su.1, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chsh.1, man/Attic/expiry.1, man/Attic/gpasswd.1, man/Attic/groups.1, man/Attic/id.1:
+ - update to chage.1; formatting/typo fixes
+
+2002-03-09 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/uk.po, po/ko.po, po/pl.po, po/sv.po, po/ja.po, po/cs.po, po/el.po, po/fr.po:
+ "make update-po"
+
+2002-03-09 Andrzej Krzysztofowicz <ankry@pld.org.pl>
+
+ * man/pt_BR/groupadd.8, man/pt_BR/groupdel.8, man/pt_BR/groupmod.8, man/pt_BR/shadow.5, man/pl/userdel.8, man/pl/usermod.8, man/pl/sulogin.8, man/pl/useradd.8, man/pl/pwconv.8, man/pl/su.1, man/pl/Attic/mkpasswd.8, man/pl/Attic/pwauth.8, man/pl/newgrp.1, man/pl/passwd.5, man/pl/login.defs.5, man/pl/chpasswd.8, man/pl/groupadd.8, man/pl/groupdel.8, man/pl/groupmems.8, man/pl/groupmod.8, man/pl/groups.1, man/pl/grpck.8, man/pl/id.1, man/pl/login.1, man/hu/groups.1, man/hu/newgrp.1, man/ja/Attic/mkpasswd.8, man/ja/Attic/pw_auth.3, man/ja/Attic/pwauth.8, man/ja/groupadd.8, man/ja/groupdel.8, man/ja/groupmod.8, man/ja/groups.1, man/ja/grpck.8, man/ja/id.1, man/ja/lastlog.8, man/ja/login.1, man/ja/login.defs.5, man/ja/newgrp.1, man/ja/passwd.5, man/ja/pwck.8, man/ja/shadow.5, man/ja/su.1, man/ja/sulogin.8, man/ja/useradd.8, man/ja/userdel.8, man/ja/usermod.8, man/ja/vipw.8, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmems.8, man/Attic/groupmod.8:
+ - further "SEE ALSO" references sorting
+
+2002-03-08 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Attic/pwck.8, man/Attic/pwconv.8, man/Attic/shadow.5, man/Attic/su.1, man/Attic/sulogin.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/Attic/vipw.8, man/Attic/chpasswd.8, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/id.1, man/Attic/login.1, man/Attic/login.defs.5, man/Attic/mkpasswd.8, man/Attic/newgrp.1, man/Attic/newusers.8, man/Attic/passwd.5, man/Attic/pw_auth.3, man/Attic/pwauth.8, man/Makefile.am:
+ merged shadow-4.0.0-owl-man.patch by Solar Designer <solar@openwall.com>.
+
+ * NEWS: updated for 4.0.3.
+
+ * libmisc/Attic/suauth.c, libmisc/utmp.c, src/login.c, src/su.c:
+ swapped utent dnd pwent efinition/extern and now shadow source can be configured
+ --with-shared (fix by Dimitar Zhekov <jimmy@is-vn.bg>).
+
+2002-03-07 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * configure.in: start prepare 4.0.3.
+
+ * src/Makefile.am:
+ use ln -sf instead ln -s in install-exec-hok (fix pointed by Dimitar Zhekov
+ <jimmy@is-vn.bg>).
+
+2002-03-02 Andrzej Krzysztofowicz <ankry@pld.org.pl>
+
+ * man/pl/passwd.1: sync with en version
+
+ * man/Attic/passwd.1: - they -> his/her, user's
+ - typos
+ - fix sentence about "writing down"
+
+ * man/Attic/passwd.1: relocation by NAKANO Takeo
+
+2002-02-28 Andrzej Krzysztofowicz <ankry@pld.org.pl>
+
+ * man/hu/passwd.1: missing "-"
+
+ * man/ja/Attic/shadowconfig.8, man/ja/passwd.5, man/ja/shadow.5:
+ - updated to man-pages-ja-20020215
+
+2002-02-23 Andrzej Krzysztofowicz <ankry@pld.org.pl>
+
+ * po/cs.po, po/fr.po, po/pl.po, po/sv.po, po/uk.po, man/pl/useradd.8:
+ - typos in pl/useradd.8; commented out unsupported -r option description
+ - useradd "usage" formatting fixes
+ - fix translation in uk.po
+
+2002-02-18 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * configure.in: release 4.0.2.
+
+2002-02-17 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * Attic/shadow-utils.spec.in, Makefile.am, configure.in, shadow.spec.in:
+ rename spec file s/shadow-utils.spec/shadow.spec/
+
+ * po/cs.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/sv.po, po/uk.po:
+ update-po before release.
+
+ * po/ko.po, po/pl.po: cleanups.
+
+2002-02-01 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/pl/Attic/adduser.8, man/pl/grpconv.8, man/pl/grpunconv.8, man/pl/pwunconv.8, man/pl/sg.1, man/pl/vigr.8, man/ja/Attic/adduser.8, man/ja/grpconv.8, man/ja/grpunconv.8, man/ja/pwunconv.8, man/ja/sg.1, man/ja/vigr.8, man/hu/sg.1, man/Attic/adduser.8, man/Attic/grpconv.8, man/Attic/grpunconv.8, man/Attic/pwunconv.8, man/Attic/sg.1, man/Attic/vigr.8:
+ placa ".so man<level>/<man_page>.<level>" in roff .so includes (seems some
+ man page viewers do not handles correctly man documents without subdirectory
+ name in roff .so incude).
+
+2002-01-31 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/sv.po, po/uk.po, po/cs.po, po/el.po, NEWS:
+ resolve many fuzzy translations also all this which may cause problems on
+ displaing long uid/gid.
+
+ * src/id.c, po/ko.po, po/pl.po, po/sv.po, po/uk.po, po/cs.po, po/el.po, po/fr.po, po/ja.po:
+ drop translate some messages in id output (about {,e}{u,g}id).
+
+2002-01-19 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * README: s#password: cvs#password: [empty password]#
+
+2002-01-10 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: two new entries.
+
+ * libmisc/chkname.c (good_name):
+ allow usernames ending with "$" for allow create machine
+ acounts for samba (thanks for point this problem in 4.0.1 by
+ Jerome Borsboom <borsboom@tch.fgg.eur.nl>).
+
+ * src/pwck.c, src/useradd.c, po/pl.po, po/sv.po, po/uk.po, po/cs.po, po/el.po, po/fr.po, po/ja.po, po/ko.po:
+ s/invalid user name `%s'/invalid user name '%s'/
+
+2002-01-07 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * configure.in:
+ fix in libpam_misc detection (removed one "," AC_CHECK_LIB()).
+ Thanks to Silvan Minghetti for report this.
+
+2002-01-06 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: start prepare to 4.0.2.
+
+ * po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/sv.po, po/uk.po, po/cs.po:
+ updated.
+
+ * configure.in: It is good time to release 4.0.1.
+
+ * libmisc/.indent.pro, lib/.indent.pro: added -pcs option.
+
+ * TODO: some things goes out other in.
+
+ * src/newgrp.c, NEWS:
+ added ability to log session closes in newgrp (look at long nice comments
+ inside source code :_) by Joseph Parmelee <jparmele@wildbear.com>.
+
+ * src/groupadd.c, src/useradd.c:
+ next part fixes for handle long UID/GID (by Thorsten Kukuk <kukuk@suse.de>).
+
+ * lib/getdef.c, lib/getdef.h:
+ adeded getdef_unum(): get unsigned numerical value from table of
+ definitions (Thorsten Kukuk <kukuk@suse.de>).
+
+ * NEWS: updated.
+
+ * libmisc/isexpired.c:
+ remove "#if defined(SHADOWPWD)" (not removed during remove AGING).
+
+ * etc/Makefile.am: useradd config file added to EXTRA_DIST.
+
+2002-01-05 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/sv.po, po/uk.po, po/cs.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po:
+ update.
+
+ * src/pwck.c, src/pwconv.c, src/pwunconv.c, src/su.c, src/sulogin.c, src/useradd.c, src/userdel.c, src/usermod.c, src/vipw.c, src/.indent.pro, src/Attic/dpasswd.c, src/Attic/mkpasswd.c, src/chage.c, src/chfn.c, src/chpasswd.c, src/chsh.c, src/expiry.c, src/faillog.c, src/gpasswd.c, src/groupadd.c, src/groupmems.c, src/groupmod.c, src/groups.c, src/grpck.c, src/grpconv.c, src/grpunconv.c, src/id.c, src/lastlog.c, src/login.c, src/logoutd.c, src/newgrp.c, src/newusers.c, src/passwd.c:
+ Add -pcs to .indent.pro file and reindent all code.
+ Remove "\n" from all SYSLOG() messages.
+
+ * NEWS: s/SuSe/SuSE/
+
+2001-12-22 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/pl/useradd.8, man/Attic/useradd.8: documment -o option.
+
+ * man/pl/usermod.8, man/pl/chfn.1, man/pl/chsh.1, man/pl/groupadd.8, man/pl/groupdel.8, man/pl/groupmod.8, man/pl/groups.1, man/pl/id.1, man/pl/login.1, man/pl/newgrp.1, man/pl/passwd.1, man/pl/su.1, man/pl/useradd.8, man/pl/userdel.8:
+ correct package name (s/shadow-password/shadow/).
+
+ * src/chage.c, src/expiry.c, src/login.c, src/passwd.c, src/su.c, libmisc/age.c, libmisc/isexpired.c, NEWS, configure.in:
+ Finish integrate AGING code into SHADOWPW.
+ Remove handle old HAVE_USERSEC_H code.
+
+ * po/uk.po: typo.
+
+ * man/pl/passwd.1, man/ja/passwd.1, man/Attic/chpasswd.8, man/Attic/dpasswd.8, man/Attic/newgrp.1, man/Attic/newusers.8, man/Attic/passwd.1:
+ cleanups.
+
+ * src/Attic/dpasswd.c, src/Attic/mkpasswd.c, src/expiry.c, src/grpck.c, src/id.c, src/newgrp.c, src/newusers.c, src/passwd.c, src/pwck.c, src/chfn.c, src/chsh.c, po/ja.po, po/ko.po, po/pl.po, po/sv.po, po/uk.po, po/cs.po, po/el.po, po/fr.po, man/Attic/useradd.8:
+ standarize usage messages syntax.
+
+ * man/pl/useradd.8, man/pl/usermod.8, man/pl/vipw.8, man/pl/userdel.8:
+ removed duplicated man page text.
+
+ * src/chage.c, po/ja.po, po/ko.po, po/pl.po, po/sv.po, po/uk.po, po/cs.po, po/el.po, po/fr.po:
+ standarize usage meissages syntax.
+
+ * src/chage.c, NEWS (main):
+ merge part Solar shadow-4.0.0-owl-pam-auth.diff patch with reorder
+ nitialize PAM and checkin is chage is runed by root or not - now chage can be
+ runed from non-root account for checking by user own accout information.
+
+ * src/pwck.c: indent source.
+
+ * src/pwck.c (main): remove old work around for Slackware bug.
+
+2001-12-20 Andrzej Krzysztofowicz <ankry@pld.org.pl>
+
+ * man/ja/Attic/adduser.8, man/ja/Makefile.am, man/ja/limits.5, man/ja/pwconv.8:
+ - updated to man-pages-ja-20011215
+
+2001-11-19 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/grpck.c:
+ remove check for a Slackware bug (make sure GID is not -1; it was special
+ meaning for some syscalls).
+
+ * src/newgrp.c, src/pwck.c, src/su.c, src/useradd.c, src/usermod.c, src/groupadd.c, src/groupmod.c, src/id.c, NEWS:
+ fixes for handle/print correctly 32bit uid/gid (Thorsten Kukuk <kukuk@suse.de>).
+
+ * src/chage.c: - break usage vomment line.
+
+ * lib/defines.h:
+ removed bunch spaces on end line in conditionale #include <errno.h>
+ which in some cases dissallow compile correctly shadow (thanks for
+ Silvan Minghetti <bullet@users.sourceforge.net>).
+
+2001-11-17 Michał Moskal <malekith@pld.org.pl>
+
+ * NEWS:
+ - mention fix for SEGV when using pwck -s on /etc/passwd file with
+ empty lines in it
+
+ * lib/commonio.c:
+ - installed fix for SEGV when using pwck -s on /etc/passwd file with
+ empty lines in it
+
+2001-11-17 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * libmisc/chkname.c, NEWS:
+ next merge from Solar patches (shadow-4.0.0-owl-check_names.diff) but only
+ part this patch with checking login name matching; checking is login
+ string isn't longer than possible probably it will be good prepare using
+ _POSIX_LOGIN_NAME_MAX from <bits/posix1_lim.h>
+
+2001-11-16 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: typos.
+
+ * NEWS: added info about new hu man pages.
+
+ * NEWS: updated.
+
+2001-11-16 Andrzej Krzysztofowicz <ankry@pld.org.pl>
+
+ * man/ja/Attic/pw_auth.3, man/ja/Attic/pwauth.8, man/ja/passwd.5, man/ja/porttime.5, man/ja/pwck.8, man/ja/shadow.3, man/ja/shadow.5, man/ja/su.1, man/ja/suauth.5, man/ja/sulogin.8, man/ja/userdel.8, man/ja/usermod.8, man/ja/Attic/dpasswd.8, man/ja/Attic/mkpasswd.8, man/ja/Makefile.am, man/ja/chage.1, man/ja/chfn.1, man/ja/chpasswd.8, man/ja/chsh.1, man/ja/faillog.5, man/ja/faillog.8, man/ja/gpasswd.1, man/ja/groupadd.8, man/ja/groupdel.8, man/ja/groupmod.8, man/ja/grpck.8, man/ja/lastlog.8, man/ja/login.1, man/ja/login.access.5, man/ja/login.defs.5, man/ja/logoutd.8, man/ja/newgrp.1, man/ja/passwd.1:
+ - updated to man-pages-ja-20011115.tar.gz
+
+ * man/ja/groups.1: 3c26de91cfd359c0b7c36ca3cd3e170d groups.1
+
+ * man/ja/grpconv.8: 402190c04b8df45e20afd01e3acd0da4 grpconv.8
+
+ * man/ja/grpunconv.8: 402190c04b8df45e20afd01e3acd0da4 grpunconv.8
+
+ * man/ja/id.1: 3edc687b1c09bbdd170553f326a71711 id.1
+
+ * man/ja/newusers.8: c2ecaa6ddffe07de2c39be3aefb5bcae newusers.8
+
+ * man/ja/pwunconv.8: 402190c04b8df45e20afd01e3acd0da4 pwunconv.8
+
+ * man/ja/Attic/shadowconfig.8:
+ f79300c0db64fd961443177c88605087 shadowconfig.8
+
+ * man/ja/useradd.8: 3333b9a2e5a388a472fb05106d65a596 useradd.8
+
+ * man/ja/vigr.8: 42825938683e54e391897ea100001af1 vigr.8
+
+ * man/ja/vipw.8: 0cb8db0f1f19de7690f0ef9baeceb919 vipw.8
+
+2001-11-16 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * lib/Attic/getpass.c:
+ one fix warning from Solar shadow-4.0.0-owl-warnings.diff.
+
+ * src/chage.c, lib/defines.h:
+ move "#include <errno.h>" to /lib/defines.h.
+
+ * configure.in: added AC_CHECK_HEADERS(errno.h)
+
+ * src/chage.c: apply shadow-4.0.0-owl-chage-drop-priv.diff and
+ shadow-4.0.0-owl-chage-ro-no-lock.diff by Solar Designer <solar@openwall.com>.
+ Added locks which are needed when doing r/w accesses, not when running as root.
+ If root does read-only, there's no lock needed. Added missing
+ "#include <errno.h>" for above.
+
+2001-11-14 Andrzej Krzysztofowicz <ankry@pld.org.pl>
+
+ * configure.in: - added hu directory antry
+
+ * man/Makefile.am: - groups.1 moved to EXTRA_DIST
+ - added hu directory entry
+
+ * man/ja/Makefile.am: - sorted
+ - shadow.3 moved to EXTRA_DIST
+
+ * man/pl/Makefile.am: - sorted
+ - added entries for new pages
+ - EXTRA_DIST synced with man/Makefile.am
+
+ * man/hu/Makefile.am, man/hu/chsh.1, man/hu/gpasswd.1, man/hu/groups.1, man/hu/newgrp.1, man/hu/passwd.1, man/hu/sg.1:
+ - man pages from Debian
+
+ * man/Attic/groupmems.8: - typo
+
+ * man/pl/expiry.1, man/pl/groupmems.8: - translated pages
+
+2001-11-07 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * libmisc/Makefile.am:
+ fix building with cracklib enabled: $(LIBCRACK) added to libmisc_la_LIBADD.
+
+ * src/useradd.c: typo.
+
+2001-11-06 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/Attic/dpasswd.c, src/gpasswd.c, src/groupadd.c, src/groupmod.c, src/grpck.c, src/lastlog.c, src/login.c, src/passwd.c, src/pwck.c, src/userdel.c, src/usermod.c, src/chage.c, src/chfn.c, src/chsh.c, libmisc/utmp.c:
+ removed prototypes which are defined in libc header files
+ (Thorsten Kukuk <kukuk@suse.de>).
+
+ * libmisc/Attic/nscd.c, libmisc/Makefile.am, lib/commonio.c:
+ implemetn better reloading the nscd cache (per NSS map)
+ by Thorsten Kukuk <kukuk@suse.de>
+
+ * src/login.c, libmisc/setupenv.c:
+ fixed warnings "not used but defined" on compile using gcc 3.0.x
+ by bulletpr00ph <bullet@users.sourceforge.net>.
+
+2001-10-24 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: New entries for 4.0.1.
+
+ * po/pl.po: few more pl translations.
+
+ * po/cs.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/sv.po, po/uk.po:
+ "make update-po".
+
+ * po/ja.po, po/ko.po, configure.in:
+ added ja, ko translations found in SuSe.
+
+2001-10-17 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/useradd.c: sort alphabetically *flg variables.
+
+ * debian/Attic/Makefile.am, debian/Attic/tar.c: removed.
+
+2001-10-10 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/ja/Makefile.am, man/ja/sg.1, man/pl/Makefile.am, man/pl/sg.1, man/pl/vigr.8, man/Attic/sg.1, man/Attic/vigr.8, man/Makefile.am:
+ added vigr(1) man page as roff .so link to vipw(1), - added sg(1) man page as roff .so link to newgrp(1).
+
+ * src/Makefile.am:
+ added install symlinks newgrp -> sg, vipw -> vigr in install-exec-hook target.
+
+2001-10-06 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * lib/Makefile.am (libshadow_la_SOURCES):
+ reverte last change and added rcsid.h,
+ (EXTRA_DIST): added missing "\".
+
+ * src/Makefile.am: (DEFS):
+ - fix -DLOCALEDIR in DEFS,
+ - added -DHAVE_CONFIG_H,
+ - removed @DEFS@.
+
+ * lib/Makefile.am:
+ added missing shadow_.h file to libshadow_la_SOURCES.
+
+2001-09-08 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * Makefile.am (AUTOMAKE_OPTIONS):
+ version changed to 1.5 and added dist-bzip2.
+
+ * lib/Makefile.am, libmisc/Makefile.am, src/Makefile.am:
+ add .indent.pro to EXTRA_DIST.
+
+ * etc/Makefile.am, etc/useradd: add example /etc/defaults/useradd.
+
+2001-09-07 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * TODO: last touch.
+
+ * TODO: more TODO.
+
+ * lib/commonio.c, NEWS:
+ Fix bug discovered and fixed by Marcel Ritter <Marcel.Ritter@rrze.uni-erlangen.de>
+ Due to a big buffer size in lib/commonio.c this error does only appear
+ if a line gets longer than 4096 bytes (there are probably very few people
+ stumbling across this).
+ Ths bug can be exposed by trashing /etc/groups file using useradd with script:
+ #!/bin/sh
+ typeset -i NUM
+ NUM=0
+ groupadd demogroup
+ while [ $NUM -le 1000 ]; do
+ useradd -g demogroup -G demogroup -p "NONE" user$NUM
+ NUM=$NUM+1
+ done
+
+2001-09-01 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/groups.c, src/id.c, src/newgrp.c, src/useradd.c, src/usermod.c, libmisc/addgrps.c, NEWS:
+ remove limit 32 to groups per user (the same user can belong to
+ more than 32 groups) by use sysconf(_SC_NGROUPS_MAX) instead constant
+ NGROUPS_MAX (patch by Radu Constantin Rendec <radu.rendec@ines.ro>)
+ NOTE: it probably need testing on other system for add some conditionals
+ for using sysconf(_SC_NGROUPS_MAX) or NGROUPS_MAX constant.
+
+2001-08-31 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * etc/pam.d/Makefile.am, etc/pam.d/useradd: added file for useradd.
+
+2001-08-24 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/useradd.c (set_defaults):
+ handle correctly error open/create useradd default config
+ filei (based on orginal post to bugtraq).
+
+ * TODO: documment in pt_BR, ja man pages -s {pw,grp}ck option.
+
+ * libmisc/sulog.c, NEWS:
+ remove limit to 6 chars logged tty name (apply 012_libmisc_sulog.c.diff Debian
+ patch).
+
+ * man/pl/Attic/shadowconfig.8, man/Attic/shadowconfig.8:
+ - aply 021_man_shadowconfig_usr_doc.diff debian patch.
+
+ * src/Makefile.am, lib/Makefile.am:
+ use $(top_builddir) in .la files paths (for allow correct compile if
+ $(top_builddir) isn't the same as $(top_srcdir)).
+
+ * po/.cvsignore, po/Attic/ChangeLog: removed ChangeLog.
+
+2001-08-18 Michał Moskal <malekith@pld.org.pl>
+
+ * src/grpck.c: - fixed getopt() call, thnx to arekm
+
+2001-08-15 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: - include last changes to list changes in version 4.0.0.
+
+2001-08-14 Michał Moskal <malekith@pld.org.pl>
+
+ * NEWS: - mention new -s options
+
+ * man/pl/grpck.8, man/pl/pwck.8, man/Attic/grpck.8, man/Attic/pwck.8:
+ - documented new -s options
+
+ * src/grpck.c, src/pwck.c: - added -s option to sort output files
+
+ * lib/groupio.c, lib/groupio.h, lib/pwio.c, lib/pwio.h, lib/sgroupio.c, lib/sgroupio.h, lib/shadowio.c, lib/shadowio.h:
+ - added pw_sort, gr_sort, sgr_sort and spw_sort functions
+
+ * lib/commonio.c, lib/commonio.h:
+ - added commonio_sort{,_wrt} functions
+
+2001-08-06 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/Attic/ChangeLog, po/uk.po, configure.in:
+ added uk translation (Roman Festchook <roma@polesye.net>).
+
+ * src/logoutd.c (mani):
+ s/ut->ut_libe/ut->ut_user/ on prepare strin with user name for syslog
+ line (reported by Roman Festchook <roma@polesye.net>).
+
+2001-07-27 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * Attic/acconfig.h: - added missing USG.
+
+2001-07-04 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * lib/commonio.c:
+ fix buffer overflow (not a security hole) in commonio_setname
+
+2001-06-28 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS: entry about dropping support one argument pam_strerror().
+
+ * libmisc/pam_pass.c, src/login.c, src/su.c, Attic/acconfig.h, configure.in, lib/defines.h, lib/pam_defs.h:
+ drop detecting is pam_strerror() need one or two arguments. Instead using
+ PAM_STRERROR() macro use directly pam_strerror() function with two arguments.
+ pam_strerror() with one argument is obsoleted.
+
+ * configure.in:
+ pass display error message if libpam_misc not found in correct argument
+ AC_CHECK_LIB().
+
+ * configure.in:
+ added checking for libpam_misc if libpam found and if libpam_misc is avalaible
+ add them to $LIBPAM. Othervise exit fron autoconf script with error message.
+ Now shadow compiles if pam support is enabled.
+
+2001-06-28 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * libmisc/copydir.c: fix overwriting existing file (add O_TRUNC)
+
+2001-06-23 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * configure.in: remove intl/po2tbl.sed from AC_OUTPUT().
+
+ * configure.in:
+ removed add md5.o md5crypt.o conditionaly to $LIBOBJS (this is obsoleted).
+ In current version ndling md5 functionality is included conditionaly
+ inside md5.c and md5crypt.c source files.
+
+ * lib/Attic/md5.c: added comments for #endif.
+
+ * configure.in: also do not use SU_ACCESS when PAM is used.
+
+ * configure.in:
+ - check pam directly by AC_CHECK_LIB() (PAM from PLD is now fixed an also other
+ PAM implementation must be fixed for this method checkin is libpam is avalaible;
+ sorry .. no way this is plain linking procedure bug),
+ - use AC_DEFINE(LOGIN_ACCES) only when PAM isn't used.
+
+2001-06-23 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * src/Makefile.am:
+ add LDADD for groupmod and usermod, as they use PAM too
+
+ * src/login.c, src/su.c: fix uninitialized variable failcount
+ skip '*' in pw_shell for subsystem root
+
+2001-06-23 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/login.c: use "extern int login_access()" only if !USE_PAM.
+
+ * src/Makefile.am:
+ added LDADD rules for programs which uses PAM and cracklib.
+
+2001-06-23 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * libmisc/chowntty.c:
+ allow root login even on read-only root filesystem
+
+ * libmisc/Makefile.am: add -DHAVE_CONFIG_H to DEFS
+
+2001-06-23 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * autogen.sh: run configure by default with --disable-desrpc,
+ fix: --with-libpam (not --with-pam).
+
+2001-06-23 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * libmisc/chowntty.c:
+ libmisc/chowntty.c (chown_tty): move perror() before syslog() call
+ which might change errno.
+
+ * man/pl/login.defs.5, man/Attic/login.defs.5:
+ (UMASK): Default value is 077, not 0 - see NEWS for shadow-3.3.2-951106.
+
+2001-06-23 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * NEWS, configure.in: prepare for release 4.0.0 version.
+
+ * configure.in: remove commented line.
+
+2001-06-16 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/pl.po: fixed charset (must be iso-8859-2).
+
+ * man/Makefile.am, man/ja/.cvsignore, man/ja/Attic/dpasswd.8, man/ja/Attic/mkpasswd.8, man/ja/Attic/pw_auth.3, man/ja/Attic/pwauth.8, man/ja/Makefile.am, man/ja/chage.1, man/ja/chfn.1, man/ja/chpasswd.8, man/ja/chsh.1, man/ja/faillog.5, man/ja/faillog.8, man/ja/gpasswd.1, man/ja/groupadd.8, man/ja/groupdel.8, man/ja/groupmod.8, man/ja/grpck.8, man/ja/lastlog.8, man/ja/login.1, man/ja/login.access.5, man/ja/login.defs.5, man/ja/logoutd.8, man/ja/newgrp.1, man/ja/passwd.1, man/ja/passwd.5, man/ja/porttime.5, man/ja/pwck.8, man/ja/pwconv.8, man/ja/shadow.3, man/ja/shadow.5, man/ja/su.1, man/ja/suauth.5, man/ja/sulogin.8, man/ja/userdel.8, man/ja/usermod.8, configure.in, NEWS:
+ added ja man pages.
+
+2001-05-30 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/Attic/shadowconfig.sh, src/Makefile.am, debian/Attic/Makefile.am, debian/Attic/shadowconfig.sh:
+ move shadowconfig.sh to debian/
+
+ * src/Makefile.am: added missing -I${top_srcdir} to INCLUDES.
+
+ * lib/Makefile.am: empty DEFS and INCLUDES="-I$(top_srcdir)".
+
+ * libmisc/Makefile.am:
+ empty DEFS and INCLUDES="-I$(top_srcdir) -I$(top_srcdir)/lib".
+
+2001-03-05 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/.indent.pro, lib/.indent.pro, libmisc/.indent.pro:
+ directory indent config file is -kr -i8 -bad (indent open this file and
+ read options if options not specyfied in commnad line).
+
+ * autogen.sh (conf_flags): added --with-pam.
+
+ * NEWS: start complette next release information.
+
+2001-02-04 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * shlib/Attic/Makefile.am, shlib/Attic/Makefile.in.saved: - removed.
+
+ * src/Makefile.am, libmisc/Makefile.am, lib/Makefile.am:
+ Rewrited automake suit for building lib, libmisc and src (now this look much
+ better). Also for all is now used libtool in proper way.
+
+ * configure.in:
+ - added useing AM_DISABLE_SHARED, AM_ENABLE_STATIC for disable compile shared
+ libraries and enable static,
+ - some cosmetics.
+
+ * Makefile.am (SUBDIRS): reorder libmisc must be before lib.
+
+2001-02-01 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/pt_BR/Makefile.am: - added man_MANS to EXTRA_DIST.
+
+2001-01-31 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/Makefile.am, man/pt_BR/Makefile.am, man/pt_BR/gpasswd.1, man/pt_BR/groupadd.8, man/pt_BR/groupdel.8, man/pt_BR/groupmod.8, man/pt_BR/shadow.5, configure.in:
+ include pt_BR man pages for gpasswd(1), groupadd(1), groupdel(8),
+ groupmod(8), shadow(5).
+
+2001-01-27 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * TODO: - updated.
+
+ * man/pl/Attic/dpasswd.8, man/pl/chage.1, man/pl/chfn.1, man/pl/chpasswd.8, man/pl/chsh.1, man/pl/faillog.5, man/pl/faillog.8, man/pl/gpasswd.1, man/pl/groupadd.8, man/pl/groupdel.8, man/pl/groupmod.8, man/pl/groups.1, man/pl/grpck.8, man/pl/id.1, man/pl/lastlog.8, man/pl/login.1, man/pl/newgrp.1, man/pl/newusers.8, man/pl/passwd.1, man/pl/su.1, man/pl/useradd.8, man/pl/userdel.8, man/pl/vipw.8, man/Attic/dpasswd.8, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmems.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/newgrp.1, man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/su.1, man/Attic/useradd.8, man/Attic/usermod.8, man/Attic/vipw.8:
+ many small cleanups, fixes also removed commented obsoleted texts.
+
+2001-01-25 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * autogen.sh: add to conf_flags --disable-shared.
+
+ * man/pl/Attic/d_passwd.5, man/pl/Attic/dialups.5, man/pl/Attic/dpasswd.8, man/pl/Attic/mkpasswd.8, man/pl/Attic/pw_auth.3, man/pl/Attic/pwauth.8, man/pl/Attic/shadowconfig.8, man/pl/chage.1, man/pl/chfn.1, man/pl/chpasswd.8, man/pl/chsh.1, man/pl/faillog.5, man/pl/faillog.8, man/pl/gpasswd.1, man/pl/groupadd.8, man/pl/groupdel.8, man/pl/groupmod.8, man/pl/groups.1, man/pl/grpck.8, man/pl/id.1, man/pl/lastlog.8, man/pl/limits.5, man/pl/login.1, man/pl/login.access.5, man/pl/login.defs.5, man/pl/logoutd.8, man/pl/newgrp.1, man/pl/newusers.8, man/pl/passwd.1, man/pl/passwd.5, man/pl/porttime.5, man/pl/pwck.8, man/pl/pwconv.8, man/pl/shadow.3, man/pl/shadow.5, man/pl/su.1, man/pl/suauth.5, man/pl/sulogin.8, man/pl/useradd.8, man/pl/userdel.8, man/pl/usermod.8, man/pl/vipw.8, man/Attic/mkpasswd.8, man/Attic/newgrp.1, man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/pw_auth.3, man/Attic/pwauth.8, man/Attic/pwck.8, man/Attic/pwconv.8, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/shadowconfig.8, man/Attic/su.1, man/Attic/suauth.5, man/Attic/sulogin.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/Attic/vipw.8, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/dpasswd.8, man/Attic/expiry.1, man/Attic/faillog.5, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmems.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/limits.5, man/Attic/login.1, man/Attic/login.access.5, man/Attic/login.defs.5, man/Attic/logoutd.8:
+ put or move to top cemmented Id cvs keyword,
+ (passwd.1): documment -e option (patch from Debian),
+ (userdel.1): remove commented obsoleted options.
+
+ * man/Makefile.am:
+ put all files in man_MANS and EXTRA_DIST in alphabethic order.
+
+ * src/chpasswd.c, src/pwunconv.c:
+ remove from comments program description and history logs.
+
+ * src/Makefile.am: move groups to bin_PROGRAMS.
+
+2000-12-19 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/su.c: Based on Debian modyfications:
+ (main): #endif /* USE_PAM */ #ifdef USE_PAM replaced by #else,
+ (main): removed some dead code (scoped by #if 0 .. #endif).
+ (main): call to re-establish SIGINT to right place.
+
+ * man/pl/passwd.1: Removed SEE ALSO to shadow(3) and passwd(3).
+
+ * man/pl/shadow.5, man/Attic/shadow.5: Removed SEE ALSO to shadow(3).
+
+ * man/Attic/passwd.1:
+ Removed SEE ALSO to passwd(3) and commented shadow(3).
+
+2000-12-06 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/useradd.c (main):
+ use "useradd" instead "shadow in pam_start() parameters - this
+ allow use separated pam config file for useradd (for example for allow
+ specified non-root user for add user).
+
+2000-11-29 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * TODO: remove write expiry(1) man page.
+
+ * man/Attic/expiry.1, man/Makefile.am:
+ added expiry(1) man page from Debian.
+
+ * man/pl/lastlog.8, man/Attic/lastlog.8:
+ updated man pages for whole dispaly syntax.
+
+ * src/lastlog.c (main): fixed command line syntax description.
+
+ * src/lastlog.c (main):
+ display correctly and full current commnad line lastlog syntax
+ and also output this string using gettext.
+
+ * src/lastlog.c (main):
+ merge src_lastlogin.c patch from debian with use getopt_long()
+ instead getopt() for add handling --help, --user, --time switches and
+ dipslay useage message on -h, --help and as default action.
+
+2000-11-17 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * src/groupmems.c, po/el.po, po/fr.po, po/pl.po, po/sv.po, po/POTFILES.in, po/cs.po:
+ added i18n support for src/groupmems.c.
+
+ * src/useradd.c:
+ * (set_defaults): use mkstemp() if avalaible. Othereise use mktemp().
+
+ * configure.in: * added checking for mkstemp().
+
+ * src/useradd.c: * (set_defaults): use mkstemp() instead mktemp(),
+ * (mani): fix compilation error in previouse RH patch (removed using nflg).
+
+2000-11-12 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * TODO: - groupmems need some work on add PAM and i18n support.
+
+ * src/groupmems.c, man/Attic/groupmems.8:
+ Added raw version groupmems program for administer members of a user's
+ primary group. groupmems was written by George Kraft IV <gk4@us.ibm.com>
+ and this tool have BSD license.
+
+ * src/Attic/patchlevel.h, src/Makefile.am:
+ patchlevel.h, Makefile.am: removed patchlevel.h file,
+ Makefile.am: removed bindir, sbindir (this comes with autoconf).
+
+2000-11-06 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * TODO: - write expire man page.
+
+2000-10-16 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * old/Attic/pwconv-old.8, old/Attic/pwconv.8, old/Attic/pwunconv-old.8, old/Attic/pwunconv.8, man/pl/Attic/mkpasswd.8, man/pl/Attic/pw_auth.3, man/pl/Attic/pwauth.8, man/pl/login.defs.5, man/pl/logoutd.8, man/pl/newgrp.1, man/pl/newusers.8, man/pl/passwd.1, man/pl/porttime.5, man/pl/pwck.8, man/pl/shadow.3, man/pl/su.1, man/pl/sulogin.8, man/pl/useradd.8, man/pl/userdel.8, man/pl/usermod.8, man/pl/Attic/dpasswd.8, man/pl/chage.1, man/pl/chfn.1, man/pl/chpasswd.8, man/pl/chsh.1, man/pl/faillog.5, man/pl/faillog.8, man/pl/groupadd.8, man/pl/groupdel.8, man/pl/groupmod.8, man/pl/groups.1, man/pl/grpck.8, man/pl/id.1, man/pl/lastlog.8, man/pl/login.1, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/dpasswd.8, man/Attic/faillog.5, man/Attic/faillog.8, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/login.1, man/Attic/login.defs.5, man/Attic/logoutd.8, man/Attic/mkpasswd.8, man/Attic/newgrp.1, man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/pw_auth.3, man/Attic/pwauth.8, man/Attic/pwck.8, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/su.1, man/Attic/sulogin.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, debian/Attic/login.copyright, debian/Attic/passwd.copyright, debian/Attic/secure-su.copyright, doc/Attic/ANNOUNCE, doc/Attic/LSM, doc/Attic/README, doc/Attic/README.linux:
+ Julianne F. Haugh new contact adress.
+
+ * NEWS: - summary chanfes for 20001016.
+
+ * doc/Attic/README.shadow-paper, doc/Makefile.am:
+ - removed outdated README.shadow-paper.
+
+ * configure.in: - release 20001016.
+
+2000-10-15 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/pl/Makefile.am, man/Makefile.am: fixes in man/{,po}/Makefile.am:
+ - $(man_MANS) added to EXTRA_DISTS,
+ - do not install by default groups.1, id.1, pw_auth.3, shadow.3, pwauth.8,
+ sulogin.8, dpasswd.8 (moved to EXTRA_DISTS),
+
+2000-10-15 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * lib/commonio.c (reload_nscd): Disable for now because not every
+ version of nscd can handle it, unless ENABLE_NSCD_SIGHUP defined.
+
+2000-10-15 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * libmisc/pwdcheck.c, libmisc/Makefile.am: - added missing pwdcheck.c.
+
+ * configure.in: - removed old/Makefile from AC_OUTPUT list.
+
+2000-10-12 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * README: - fixed information about RO cvs access.
+
+ * NEWS: - summary changes description for shadow-20001012.
+
+ * configure.in: - release changed to 20001012.
+
+ * etc/Makefile.am: - removed shells and suauth from EXTRA_DIST.
+
+ * doc/Makefile.am: - removed README.debian from EXTRA_DIST.
+
+ * libmisc/Makefile.am: - removed pwdcheck.c from libmisc_a_SOURCES.
+
+ * debian/Attic/Makefile.am: - removed FILES from EXTRA_DIST.
+
+ * contrib/Makefile.am: - s/udbachk.v012.tgz/udbachk.tgz/
+
+ * doc/Makefile.am: - removed CHANGES (this file was moved to ../NEWS).
+
+2000-10-10 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/Attic/ChangeLog: - add empty file (gettext requires this).
+
+2000-10-10 Arkadiusz Miśkiewicz <misiek@pld.org.pl>
+
+ * README: typos fixed
+
+2000-10-10 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * Makefile.am: - added shadow-utils.spec.in to EXTR_DIST.
+
+ * redhat/Attic/shadow-utils.spec.in: - obsoleted.
+
+ * Attic/stamp-h.in: - removed (this file is autogenerated by autoconf).
+
+ * po/pl.po, po/sv.po, po/cs.po, po/el.po, po/fr.po:
+ - update before release.
+
+ * doc/Attic/LSM: - new maintainer and new primary site.
+
+ * Makefile.am: - README added to EXTRA_DIST.
+
+ * README: - added README with all shadow sites and resources details.
+
+ * Attic/shadow-utils.spec.in: - partialy rewrited.
+
+ * configure.in: - change version to 20001010.
+
+ * Makefile.am: - added NEWS to EXTRA_DIST.
+
+ * Makefile.am, TODO: - added TODO.
+
+ * doc/Attic/CHANGES, NEWS: - rename doc/CHANGES -> NEWS.
+
+2000-10-09 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * redhat/Attic/Makefile.am, redhat/Attic/README, redhat/Attic/shadow-970616-fix.patch, redhat/Attic/shadow-970616-glibc.patch, redhat/Attic/shadow-970616-rh.patch, redhat/Attic/shadow-970616-utuser.patch, redhat/Attic/shadow-970616.login.defs, redhat/Attic/shadow-970616.useradd, redhat/Attic/shadow-utils-970616.spec, Attic/shadow-utils.spec.in, Makefile.am, configure.in:
+ - remove redhat/ directory with obsoleted files.
+
+ * po/.cvsignore, src/.cvsignore, man/.cvsignore, man/pl/.cvsignore, .cvsignore, libmisc/.cvsignore:
+ - shut up cvs.
+
+ * man/Makefile.am: - removed redundant ${man_MANS} from EXTRA_DIST.
+
+ * src/useradd.c:
+ - fix a security bug (adduser could overwrite previously existing
+ groups (shadow-19990827-group.patch from RH),
+
+ * po/cs.po, po/el.po, po/fr.po, po/pl.po, po/sv.po:
+ - "make updated-po".
+
+ * man/pl/Makefile.am, man/pl/grpconv.8, man/pl/grpunconv.8, man/pl/pwunconv.8, man/Attic/grpconv.8, man/Attic/grpunconv.8, man/Attic/pwunconv.8, man/Makefile.am:
+ - added man pages for grpconv(8), grpunconv(8), pwunconv(8) (.so link to
+ pwconv(8))
+
+ * man/pl/Attic/adduser.8, man/pl/Makefile.am, man/Attic/adduser.8, man/Makefile.am:
+ - added man page for adduser(8) (.so link to useradd(8)).
+
+ * po/Attic/doit:
+ - removed (in po/Makefile.in.in exist special update-po target).
+
+ * etc/pam.d/passwd, etc/pam.d/su: - cosmetics.
+
+ * etc/pam.d/Attic/shadow: - sample PAM config file for shadow utils.
+
+ * etc/pam.d/Makefile.am: - added shadow to EXTRA_DIST
+
+ * src/chpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/newusers.c, src/useradd.c, src/userdel.c, src/usermod.c:
+ - bind to shadow PAM file instead userdb (mainly PAMimication all shadow
+ utils is used for proper updating db files but in real this can be used
+ for perform many other tasks).
+
+ * src/Makefile.am: - added linking with @LIBPAM@ all PAMified tools.
+
+ * src/chpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/newusers.c, src/useradd.c, src/userdel.c, src/usermod.c:
+ - added PAM support (bind to common "userdb" PAM authentication description
+ file).
+
+ * src/chage.c: - added PAM support.
+
+2000-10-06 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * autogen.sh:
+ - added autogen.sh script which prepare raw source code from cvs to use.
+
+2000-10-04 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * man/pl/useradd.8, man/pl/userdel.8, man/pl/usermod.8, man/pl/vipw.8:
+ - merged changes from PTM.
+
+ * man/pl/Makefile.am:
+ - simplified: use only man_MANS and remaped $(mandir) variable.
+
+2000-09-27 Tomasz Kłoczko <kloczek@pld.org.pl>
+
+ * po/cs.po, configure.in:
+ - added cs translation (Jiri Pavlovsky <Jiri.Pavlovsky@ff.cuni.cz>).
+
+2000-09-05 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * man/pl/sulogin.8, man/pl/vipw.8, po/el.po, po/fr.po, po/pl.po, po/sv.po, man/pl/Attic/d_passwd.5, man/pl/Attic/dialups.5, man/pl/Attic/dpasswd.8, man/pl/Attic/mkpasswd.8, man/pl/Attic/pw_auth.3, man/pl/Attic/pwauth.8, man/pl/Attic/shadowconfig.8, man/pl/chage.1, man/pl/chfn.1, man/pl/chpasswd.8, man/pl/chsh.1, man/pl/faillog.5, man/pl/faillog.8, man/pl/gpasswd.1, man/pl/groups.1, man/pl/grpck.8, man/pl/id.1, man/pl/lastlog.8, man/pl/limits.5, man/pl/login.1, man/pl/login.access.5, man/pl/login.defs.5, man/pl/logoutd.8, man/pl/newgrp.1, man/pl/newusers.8, man/pl/passwd.1, man/pl/passwd.5, man/pl/porttime.5, man/pl/pwck.8, man/pl/pwconv.8, man/pl/shadow.3, man/pl/shadow.5, man/pl/su.1, man/pl/suauth.5:
+ *** empty log message ***
+
+2000-09-02 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * src/groupmod.c, src/grpck.c, src/login.c, src/logoutd.c, src/newgrp.c, src/passwd.c, src/pwck.c, src/su.c, src/sulogin.c, src/useradd.c, src/userdel.c, src/usermod.c, lib/commonio.h, lib/defines.h, lib/groupio.c, lib/pwio.c, lib/sgroupio.c, lib/shadowio.c, man/Attic/usermod.8, po/el.po, po/fr.po, po/pl.po, po/sv.po, redhat/Attic/shadow-utils.spec.in, src/Attic/dpasswd.c, src/chage.c, src/chfn.c, src/chsh.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, configure.in, debian/Attic/rules, doc/Attic/CHANGES, doc/Attic/LSM, lib/commonio.c:
+ *** empty log message ***
+
+2000-08-26 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * contrib/Makefile.am, contrib/groupmems.shar, doc/Attic/LSM, po/el.po, po/fr.po, po/pl.po, po/sv.po, doc/Attic/README.mirrors, src/vipw.c, src/Attic/dpasswd.c, src/Attic/mkpasswd.c, src/Makefile.am, src/chage.c, src/chfn.c, src/chpasswd.c, src/chsh.c, src/expiry.c, src/faillog.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/groups.c, src/grpck.c, src/grpconv.c, src/grpunconv.c, src/id.c, src/lastlog.c, src/login.c, src/logoutd.c, src/newgrp.c, src/newusers.c, src/passwd.c, src/pwck.c, src/pwconv.c, src/pwunconv.c, src/su.c, src/sulogin.c, src/useradd.c, src/userdel.c, src/usermod.c, lib/Attic/dialchk.h, lib/Attic/dialup.h, lib/Attic/rad64.c, lib/Attic/tcfsio.h, lib/Makefile.am, lib/commonio.c, lib/commonio.h, lib/defines.h, lib/encrypt.c, lib/getdef.c, lib/getdef.h, lib/groupio.c, lib/groupio.h, lib/prototypes.h, lib/pwauth.c, lib/pwio.c, lib/pwio.h, lib/sgroupio.c, lib/sgroupio.h, lib/shadowio.h, libmisc/Attic/suauth.c, libmisc/chkname.h, libmisc/chowndir.c, libmisc/copydir.c, libmisc/entry.c, libmisc/failure.h, libmisc/getdate.h, libmisc/hushed.c, libmisc/loginprompt.c, libmisc/setupenv.c, libmisc/sulog.c, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/dpasswd.8, man/Attic/faillog.5, man/Attic/faillog.8, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/login.1, man/Attic/login.defs.5, man/Attic/logoutd.8, man/Attic/mkpasswd.8, man/Attic/newgrp.1, man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/pw_auth.3, man/Attic/pwauth.8, man/Attic/pwck.8, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/su.1, man/Attic/sulogin.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/Makefile.am, man/pl/Makefile.am, man/pl/groupadd.8, man/pl/groupdel.8, man/pl/groupmod.8, man/pl/useradd.8, man/pl/userdel.8, man/pl/usermod.8, etc/Attic/login.defs.hurd, etc/Attic/login.defs.linux, doc/Attic/ANNOUNCE, doc/Attic/CHANGES, doc/Attic/README, doc/Attic/README.linux, doc/Attic/README.pam, doc/WISHLIST, debian/Attic/login.copyright, debian/Attic/passwd.copyright, debian/Attic/secure-su.copyright, Attic/mkinstalldirs, configure.in, Makefile.am:
+ *** empty log message ***
+
+1999-08-27 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * doc/Attic/LSM, po/el.po, po/fr.po, po/pl.po, po/sv.po, debian/Attic/passwd.postinst, lib/Attic/dialchk.c, lib/Attic/getpass.c, lib/getdef.c, lib/pwauth.c, libmisc/limits.c, libmisc/rlogin.c, man/Attic/limits.5, man/Attic/newgrp.1, src/Attic/dpasswd.c, src/chage.c, src/gpasswd.c, src/login.c, src/logoutd.c, src/newgrp.c, src/passwd.c, src/sulogin.c, Attic/acconfig.h, configure.in, debian/Attic/Makefile.am, debian/Attic/changelog, debian/Attic/control.gnu, debian/Attic/control.linux, debian/Attic/login.postrm, debian/Attic/logoutd, debian/Attic/logoutd.init, debian/Attic/passwd.conffiles, debian/Attic/passwd.cron, debian/Attic/passwd.init, debian/Attic/passwd.postrm, debian/Attic/rules, doc/Attic/CHANGES, doc/Attic/README.mirrors, doc/WISHLIST, etc/Attic/login.defs.hurd, etc/Attic/login.defs.linux, etc/Makefile.am, lib/defines.h:
+ *** empty log message ***
+
+1999-07-09 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * configure.in, contrib/Makefile.am, debian/Attic/changelog, doc/Attic/CHANGES, doc/Attic/LSM, doc/WISHLIST, lib/Attic/strcasecmp.c, lib/prototypes.h, libmisc/Makefile.am, man/Attic/faillog.8, po/el.po, po/pl.po, src/Makefile.am, src/chfn.c, src/chsh.c, src/faillog.c, src/groupmod.c, src/grpconv.c, src/grpunconv.c, src/newgrp.c, src/passwd.c, src/vipw.c:
+ *** empty log message ***
+
+1999-06-07 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * redhat/Attic/shadow-utils.spec.in, src/Attic/dpasswd.c, src/Attic/mkpasswd.c, src/Makefile.am, src/chage.c, src/chfn.c, src/chpasswd.c, src/chsh.c, src/expiry.c, src/faillog.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/groups.c, src/grpck.c, src/grpconv.c, src/grpunconv.c, src/id.c, src/lastlog.c, src/login.c, src/logoutd.c, src/newgrp.c, src/newusers.c, src/passwd.c, src/pwck.c, src/pwconv.c, src/pwunconv.c, src/su.c, src/sulogin.c, src/useradd.c, src/userdel.c, src/usermod.c, contrib/Makefile.am, contrib/README, contrib/udbachk.tgz, debian/Attic/changelog, debian/Attic/rules, doc/Attic/CHANGES, doc/Attic/LSM, doc/Attic/README.linux, doc/Attic/README.mirrors, doc/README.platforms, doc/WISHLIST, lib/Attic/getpass.c, lib/Attic/rcsid.h, lib/Makefile.am, lib/fputsx.c, lib/pam_defs.h, lib/prototypes.h, libmisc/Attic/login_desrpc.c, libmisc/pam_pass.c, libmisc/utmp.c, man/Attic/login.1, po/el.po, po/pl.po, Attic/acconfig.h, configure.in:
+ *** empty log message ***
+
+1999-03-07 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * po/pl.po, po/el.po, doc/Attic/LSM, src/useradd.c, src/su.c, src/pwconv.c, src/pwck.c, src/passwd.c, src/newusers.c, src/newgrp.c, src/logoutd.c, src/login.c, src/grpconv.c, src/grpck.c, src/groupadd.c, src/gpasswd.c, src/Attic/dpasswd.c, src/chfn.c, src/chage.c, man/Attic/usermod.8, man/Attic/useradd.8, man/Attic/limits.5, man/Attic/chage.1, libmisc/valid.c, libmisc/sub.c, libmisc/strtoday.c, libmisc/setupenv.c, libmisc/obscure.c, libmisc/limits.c, libmisc/env.c, lib/Attic/snprintf.h, lib/getdef.c, lib/encrypt.c, lib/defines.h, etc/Attic/login.defs.linux, doc/WISHLIST, doc/Attic/README.nls, doc/Attic/README.pam, doc/README.platforms, doc/Attic/README.mirrors, doc/Attic/README.linux, doc/Makefile.am, doc/Attic/CHANGES, debian/Attic/tar.c, debian/Attic/rules, debian/Attic/logoutd, debian/Attic/control, debian/Attic/changelog, configure.in:
+ *** empty log message ***
+
+1998-12-28 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * src/usermod.c, src/userdel.c, src/useradd.c, src/sulogin.c, src/su.c, src/pwunconv.c, src/pwconv.c, src/pwck.c, src/passwd.c, src/newusers.c, src/newgrp.c, src/Attic/mkpasswd.c, src/logoutd.c, src/login.c, src/lastlog.c, src/id.c, src/grpunconv.c, src/grpconv.c, src/grpck.c, src/groups.c, src/groupmod.c, src/groupdel.c, src/groupadd.c, src/gpasswd.c, src/faillog.c, src/expiry.c, src/Attic/dpasswd.c, src/chsh.c, src/chpasswd.c, src/chfn.c, src/chage.c, po/Attic/doit, po/POTFILES.in, po/el.po, src/Makefile.am, man/Attic/usermod.8, man/Attic/userdel.8, man/Attic/useradd.8, man/Attic/sulogin.8, man/Attic/su.1, man/Attic/shadow.5, man/Attic/shadow.3, man/Attic/pwck.8, man/Attic/pwauth.8, man/Attic/pw_auth.3, man/Attic/porttime.5, man/Attic/passwd.5, man/Attic/passwd.1, man/Attic/newusers.8, man/Attic/newgrp.1, man/Attic/mkpasswd.8, man/Attic/logoutd.8, man/Attic/login.defs.5, man/Attic/login.1, man/Attic/lastlog.8, man/Attic/id.1, man/Attic/grpck.8, man/Attic/groups.1, man/Attic/groupmod.8, man/Attic/groupdel.8, man/Attic/groupadd.8, man/Attic/faillog.8, man/Attic/faillog.5, man/Attic/dpasswd.8, man/Attic/chsh.1, man/Attic/chpasswd.8, man/Attic/chfn.1, man/Attic/chage.1, libmisc/xmalloc.c, libmisc/sub.c, libmisc/Attic/suauth.c, libmisc/shell.c, libmisc/setupenv.c, libmisc/pam_pass.c, libmisc/obscure.c, libmisc/mail.c, libmisc/Attic/login_desrpc.c, libmisc/limits.c, libmisc/failure.c, libmisc/env.c, libmisc/console.c, libmisc/chowntty.c, libmisc/age.c, libmisc/addgrps.c, libmisc/Makefile.am, lib/Attic/strerror.c, lib/pwauth.c, lib/prototypes.h, lib/Attic/getpass.c, lib/getdef.c, lib/Attic/dialchk.c, lib/defines.h, lib/Makefile.am, doc/WISHLIST, doc/README.platforms, doc/Attic/README.mirrors, doc/Attic/README.linux, doc/Attic/README, doc/Attic/LSM, doc/Attic/CHANGES, debian/Attic/secure-su.copyright, debian/Attic/passwd.copyright, debian/Attic/login.copyright, debian/Attic/control, debian/Attic/changelog, configure.in, Attic/acconfig.h, Makefile.am:
+ *** empty log message ***
+
+1998-07-24 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * src/passwd.c, src/su.c, src/userdel.c, src/Makefile.am, src/chage.c, src/faillog.c, src/login.c, lib/Attic/tcfsio.c, lib/Attic/tcfsio.h, lib/pwauth.c, libmisc/chowntty.c, libmisc/pam_pass.c, libmisc/setugid.c, etc/pam.d/passwd, etc/pam.d/su, lib/Makefile.am, lib/commonio.c, lib/defines.h, lib/prototypes.h, doc/Attic/README.linux, doc/Attic/README.mirrors, doc/Makefile.am, doc/README.platforms, doc/WISHLIST, etc/Makefile.am, etc/pam.d/Makefile.am, doc/Attic/CHANGES, debian/Attic/changelog, configure.in, Attic/acconfig.h:
+ *** empty log message ***
+
+1998-06-26 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * src/passwd.c, src/usermod.c, man/Attic/faillog.8, man/Attic/pwconv.8, src/logoutd.c, lib/Attic/getpass.c, libmisc/copydir.c, doc/Attic/README.linux, doc/Attic/README.mirrors, doc/WISHLIST, lib/commonio.c, debian/Attic/changelog, doc/Attic/CHANGES, configure.in:
+ *** empty log message ***
+
+1998-05-29 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * man/Attic/lastlog.8, man/Attic/login.1, src/usermod.c, doc/Attic/CHANGES, doc/Attic/README.linux, etc/Attic/login.defs.linux, lib/defines.h, debian/Attic/changelog, debian/Attic/login.copyright, debian/Attic/login.postinst, debian/Attic/passwd.copyright, debian/Attic/rules, debian/Attic/secure-su.copyright, configure.in, contrib/Makefile.am, contrib/shadow-anonftp.patch:
+ *** empty log message ***
+
+1998-04-16 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * src/useradd.c, src/userdel.c, src/usermod.c, src/passwd.c, src/sulogin.c, src/groupdel.c, src/login.c, src/logoutd.c, src/newgrp.c, src/Attic/dpasswd.c, src/chage.c, src/faillog.c, src/gpasswd.c, src/groupadd.c, redhat/Attic/shadow-970616-rh.patch, redhat/Attic/shadow-970616-utuser.patch, redhat/Attic/shadow-970616.login.defs, redhat/Attic/shadow-970616.useradd, redhat/Attic/shadow-utils-970616.spec, src/Makefile.am, libmisc/utmp.c, redhat/Attic/Makefile.am, redhat/Attic/README, redhat/Attic/shadow-970616-fix.patch, redhat/Attic/shadow-970616-glibc.patch, libmisc/Attic/login_desrpc.c, libmisc/limits.c, libmisc/log.c, libmisc/loginprompt.c, libmisc/obscure.c, libmisc/strtoday.c, libmisc/chkname.c, libmisc/chowndir.c, libmisc/copydir.c, libmisc/failure.c, lib/Attic/dialchk.c, lib/Attic/pwpack.c, lib/defines.h, lib/pwauth.c, doc/Attic/CHANGES, doc/Attic/README.linux, doc/WISHLIST, doc/cracklib26.diff, lib/commonio.c, Attic/acconfig.h, configure.in, debian/Attic/tar.c:
+ *** empty log message ***
+
+1998-04-02 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * src/groupmod.c, libmisc/sulog.c, lib/sgetspent.c, lib/sgetpwent.c, lib/sgetgrent.c, lib/Attic/putgrent.c, lib/gshadow.c, lib/getdef.c, lib/fputsx.c, lib/commonio.c, doc/Attic/README.linux, doc/Attic/README.mirrors, doc/Attic/CHANGES, configure.in:
+ *** empty log message ***
+
+1998-01-30 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * Attic/install-sh, src/userdel.c, src/usermod.c, src/pwconv.c, src/pwunconv.c, src/su.c, src/useradd.c, src/newgrp.c, src/newusers.c, src/passwd.c, src/pwck.c, src/groupmod.c, src/login.c, src/logoutd.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/chfn.c, src/chpasswd.c, src/chsh.c, src/expiry.c, redhat/Attic/README, redhat/Attic/shadow-utils.spec.in, src/Makefile.am, src/chage.c, man/Attic/login.defs.5, man/Attic/useradd.8, man/Attic/usermod.8, redhat/Attic/Makefile.am, libmisc/pam_pass.c, libmisc/strtoday.c, libmisc/tz.c, libmisc/Attic/login_access.c, libmisc/Attic/login_desrpc.c, libmisc/Attic/login_krb.c, libmisc/obscure.c, libmisc/age.c, libmisc/env.c, libmisc/limits.c, lib/Attic/strstr.c, lib/shadow.c, lib/shadowio.c, lib/shadowio.h, lib/utent.c, lib/Attic/rmdir.c, lib/pwio.c, lib/pwio.h, lib/sgetspent.c, lib/sgroupio.c, lib/Attic/mkdir.c, lib/Attic/putgrent.c, lib/prototypes.h, lib/pwauth.c, lib/Attic/md5crypt.c, lib/Attic/getpass.c, lib/groupio.c, lib/gshadow.c, lib/lockpw.c, lib/commonio.h, lib/defines.h, lib/encrypt.c, lib/getdef.c, lib/getdef.h, doc/Attic/README.mirrors, doc/Attic/automake-1.0.diff, doc/WISHLIST, lib/Makefile.am, lib/commonio.c, doc/Attic/ANNOUNCE, doc/Attic/CHANGES, doc/Attic/README.linux, doc/Makefile.am, doc/README.limits, debian/Attic/Makefile.am, debian/Attic/changelog, debian/Attic/login.copyright, debian/Attic/rules, Attic/mkinstalldirs, Attic/shadow-utils.spec, contrib/README, Attic/acconfig.h, Attic/aclocal.m4, configure.in, Makefile.am:
+ *** empty log message ***
+
+1998-01-25 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * Attic/acconfig.h: *** empty log message ***
+
+1997-12-14 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * doc/Attic/CHANGES, debian/Attic/checksums, debian/Attic/rules, debian/Attic/Makefile.am, src/Makefile.am, src/userdel.c, src/usermod.c, src/pwck.c, src/useradd.c, src/Attic/mkpasswd.c, src/gpasswd.c, src/grpck.c, src/login.c, src/chage.c, src/chfn.c, src/chsh.c, man/Attic/shadowconfig.8, man/Attic/vipw.8, old/Attic/Makefile.am, old/Attic/pwunconv.8, man/Attic/login.defs.5, man/Attic/pwconv.8, man/Attic/pwunconv.8, man/Makefile.am, libmisc/limits.c, libmisc/rlogin.c, lib/Attic/pwdbm.c, lib/Attic/pwent.c, lib/prototypes.h, lib/shadow.c, doc/Attic/LSM, doc/WISHLIST, etc/limits, lib/Attic/grent.c, Attic/shadow-utils.spec, debian/Attic/changelog, configure.in:
+ *** empty log message ***
+
+1997-12-08 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * src/userdel.c, src/usermod.c, src/Attic/shadowconfig.sh, src/su.c, src/sulogin.c, src/useradd.c, src/passwd.c, src/pwck.c, src/pwconv.c, src/pwunconv.c, src/newgrp.c, src/newusers.c, src/Attic/mkpasswd.c, src/logoutd.c, src/grpconv.c, src/grpunconv.c, src/id.c, src/lastlog.c, src/login.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/groups.c, src/grpck.c, src/Attic/dpasswd.c, src/chsh.c, src/expiry.c, src/faillog.c, src/gpasswd.c, src/Makefile.am, src/chage.c, src/chfn.c, src/chpasswd.c, old/Attic/Makefile.am, old/Attic/pwconv.8, old/Attic/vipw.8, man/Attic/limits.5, man/Attic/pwconv.8, man/Attic/shadowconfig.8, man/Attic/vipw.8, man/Makefile.am, libmisc/tz.c, libmisc/ulimit.c, libmisc/utmp.c, libmisc/valid.c, libmisc/xmalloc.c, libmisc/Attic/suauth.c, libmisc/strtoday.c, libmisc/sub.c, libmisc/sulog.c, libmisc/ttytype.c, libmisc/Attic/setup.c, libmisc/salt.c, libmisc/setugid.c, libmisc/setupenv.c, libmisc/shell.c, libmisc/rlogin.c, libmisc/motd.c, libmisc/myname.c, libmisc/obscure.c, libmisc/pam_pass.c, libmisc/pwd2spwd.c, libmisc/pwd_init.c, libmisc/Attic/login_access.c, libmisc/Attic/login_desrpc.c, libmisc/Attic/login_krb.c, libmisc/loginprompt.c, libmisc/mail.c, libmisc/hushed.c, libmisc/isexpired.c, libmisc/limits.c, libmisc/list.c, libmisc/log.c, libmisc/Attic/getdate.c, libmisc/failure.h, libmisc/fields.c, libmisc/getdate.h, libmisc/getdate.y, libmisc/entry.c, libmisc/env.c, libmisc/failure.c, libmisc/chowndir.c, libmisc/chowntty.c, libmisc/console.c, libmisc/copydir.c, libmisc/Attic/chkshell.c, libmisc/age.c, libmisc/basename.c, libmisc/chkname.c, libmisc/chkname.h, lib/Attic/strdup.c, lib/Attic/strerror.c, lib/Attic/strstr.c, lib/utent.c, libmisc/Makefile.am, libmisc/addgrps.c, lib/Attic/spdbm.c, lib/Attic/sppack.c, lib/sgroupio.c, lib/shadow.c, lib/shadowio.c, lib/Attic/rename.c, lib/Attic/rmdir.c, lib/sgetgrent.c, lib/sgetpwent.c, lib/sgetspent.c, lib/Attic/rad64.c, lib/Attic/pwdbm.c, lib/Attic/pwent.c, lib/Attic/pwpack.c, lib/pwauth.c, lib/pwio.c, lib/Attic/mkdir.c, lib/Attic/putgrent.c, lib/Attic/putpwent.c, lib/Attic/putspent.c, lib/port.c, lib/prototypes.h, lib/Attic/gsdbm.c, lib/Attic/gspack.c, lib/Attic/md5.c, lib/Attic/md5crypt.c, lib/gshadow.c, lib/lockpw.c, lib/Attic/grdbm.c, lib/Attic/grent.c, lib/Attic/grpack.c, lib/groupio.c, lib/Attic/getpass.c, lib/Attic/dialup.c, lib/encrypt.c, lib/fputsx.c, lib/getdef.c, lib/Attic/dialchk.c, lib/Attic/dialchk.h, lib/commonio.c, lib/commonio.h, lib/defines.h, doc/Attic/automake-1.0.diff, etc/Attic/login.defs.linux, etc/limits, lib/Makefile.am, doc/Attic/CHANGES, doc/Attic/README.linux, doc/Attic/README.mirrors, doc/WISHLIST, debian/Attic/login.conffiles, debian/Attic/login.postinst, debian/Attic/passwd.postinst, debian/Attic/porttime, debian/Attic/rules, debian/Attic/secure-su.README, debian/Attic/securetty, contrib/pwdauth.c, debian/Attic/changelog, debian/Attic/control, Attic/acconfig.h, Attic/aclocal.m4, Attic/shadow-utils.spec, configure.in, Makefile.am:
+ *** empty log message ***
+
+1997-10-01 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * debian/Attic/changelog, src/chpasswd.c, libmisc/Attic/login_access.c, lib/commonio.h, lib/sgroupio.c, lib/shadowio.c, etc/Attic/login.defs.linux, doc/Attic/CHANGES, doc/Attic/LSM, doc/Attic/README.mirrors, doc/WISHLIST, Attic/shadow-utils.spec:
+ *** empty log message ***
+
+1997-09-30 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * src/useradd.c, src/userdel.c, src/usermod.c, src/pwconv.c, src/pwunconv.c, src/su.c, src/newusers.c, src/passwd.c, src/pwck.c, src/grpck.c, src/grpconv.c, src/grpunconv.c, src/login.c, src/groupmod.c, src/Attic/dpasswd.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/chage.c, src/chfn.c, src/chpasswd.c, src/chsh.c, src/Makefile.am, old/Attic/install-sh, old/Attic/pwconv-old.8, old/Attic/pwunconv-old.8, old/Attic/Makefile.am, man/Attic/pwconv.8, man/Attic/pwunconv.8, libmisc/setugid.c, libmisc/shell.c, libmisc/utmp.c, libmisc/mail.c, libmisc/obscure.c, libmisc/pam_pass.c, libmisc/salt.c, libmisc/Attic/login_access.c, libmisc/isexpired.c, libmisc/env.c, libmisc/fields.c, libmisc/addgrps.c, libmisc/chowndir.c, libmisc/chowntty.c, libmisc/console.c, libmisc/copydir.c, lib/Attic/strerror.c, lib/Attic/snprintf.c, lib/Attic/snprintf.h, lib/sgroupio.c, lib/sgroupio.h, lib/shadowio.c, lib/shadowio.h, lib/Attic/putgrent.c, lib/Attic/pwent.c, lib/pwauth.c, lib/Attic/getpass.c, lib/Attic/grent.c, lib/prototypes.h, lib/commonio.c, lib/commonio.h, lib/defines.h, lib/encrypt.c, lib/getdef.c, lib/Makefile.am, etc/Attic/login.defs.linux, doc/Attic/README.linux, doc/Attic/README.mirrors, doc/WISHLIST, doc/Attic/CHANGES, doc/Attic/LSM, doc/Makefile.am, debian/Attic/rules, debian/Attic/changelog, contrib/adduser.c, configure.in, Attic/acconfig.h:
+ *** empty log message ***
+
+1997-09-29 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * man/Attic/chpasswd.8, man/Attic/pwconv.8, man/Attic/pwunconv.8, man/Attic/su.1, man/Makefile.am:
+ *** empty log message ***
+
+1997-06-16 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * doc/Attic/console.c.spec, doc/Makefile.am, doc/WISHLIST, doc/console.c.spec.txt, doc/Attic/CHANGES, debian/Attic/changelog, src/Attic/shadowconfig.sh, redhat/Attic/Makefile.am, redhat/Attic/README, redhat/Attic/shadow-970502-config.patch, redhat/Attic/shadow-utils.spec, doc/Attic/README.mirrors, doc/Attic/README.shadow-paper, doc/Attic/README.linux, debian/Attic/login.copyright, debian/Attic/passwd.copyright, debian/Attic/secure-su.copyright, Attic/shadow-utils.spec, Makefile.am, configure.in:
+ *** empty log message ***
+
+1997-06-01 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * debian/Attic/changelog, src/userdel.c, src/usermod.c, src/pwck.c, src/pwunconv.c, src/useradd.c, src/grpunconv.c, src/newusers.c, src/passwd.c, src/expiry.c, src/grpconv.c, src/chage.c, src/chfn.c, src/chpasswd.c, src/chsh.c, src/Makefile.am, redhat/Attic/Makefile.am, redhat/Attic/README, redhat/Attic/shadow-970502-config.patch, redhat/Attic/shadow-utils.spec, libmisc/mail.c, libmisc/Attic/login_desrpc.c, lib/pwio.h, lib/shadowio.c, lib/shadowio.h, lib/prototypes.h, lib/pwauth.c, lib/pwio.c, lib/commonio.c, lib/defines.h, doc/Attic/README.linux, doc/WISHLIST, doc/Attic/CHANGES, doc/Attic/INSTALL, Attic/install-sh, Attic/mkinstalldirs, Attic/acconfig.h, Makefile.am, configure.in:
+ *** empty log message ***
+
+1997-05-02 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * src/Attic/shadowconfig.sh, src/Makefile.am, man/Makefile.am, libmisc/mail.c, libmisc/salt.c, lib/sgroupio.c, lib/shadowio.c, lib/groupio.c, lib/pwio.c, etc/Makefile.am, doc/WISHLIST, doc/Attic/CHANGES, debian/Attic/shadowconfig, debian/Attic/Makefile.am, debian/Attic/changelog, debian/Attic/control, debian/Attic/rules, configure.in, Attic/configure, shlib/Attic/Makefile.in, man/Attic/Makefile.in, libmisc/Attic/Makefile.in, lib/Attic/Makefile.in, etc/Attic/Makefile.in, doc/Attic/Makefile.in, contrib/Attic/Makefile.in, Attic/Makefile.in, man/Attic/userdel.8, man/Attic/usermod.8, man/Attic/shadow.5, man/Attic/su.1, man/Attic/sulogin.8, man/Attic/useradd.8, man/Attic/pw_auth.3, man/Attic/pwauth.8, man/Attic/pwck.8, man/Attic/pwconv.8, man/Attic/pwunconv.8, man/Attic/shadow.3, man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/login.defs.5, man/Attic/logoutd.8, man/Attic/mkpasswd.8, man/Attic/newgrp.1, man/Attic/limits.5, man/Attic/login.1, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/faillog.5, man/Attic/faillog.8, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmod.8, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/dpasswd.8, libmisc/valid.c, libmisc/sulog.c, libmisc/ttytype.c, libmisc/tz.c, libmisc/utmp.c, libmisc/Attic/setup.c, libmisc/setupenv.c, libmisc/shell.c, libmisc/strtoday.c, libmisc/sub.c, libmisc/setugid.c, libmisc/obscure.c, libmisc/pwd2spwd.c, libmisc/rlogin.c, libmisc/Attic/login_access.c, libmisc/loginprompt.c, libmisc/motd.c, libmisc/hushed.c, libmisc/isexpired.c, libmisc/limits.c, libmisc/list.c, libmisc/log.c, libmisc/copydir.c, libmisc/entry.c, libmisc/env.c, libmisc/failure.c, libmisc/fields.c, libmisc/age.c, libmisc/chowndir.c, libmisc/chowntty.c, libmisc/console.c, lib/utent.c, lib/Attic/shadow_.h, lib/Attic/spdbm.c, lib/Attic/sppack.c, lib/Attic/strstr.c, lib/shadow.c, lib/sgetpwent.c, lib/sgetspent.c, lib/Attic/pwpack.c, lib/Attic/rad64.c, lib/Attic/rename.c, lib/Attic/rmdir.c, lib/sgetgrent.c, lib/Attic/pwdbm.c, lib/Attic/pwent.c, lib/pwauth.h, lib/Attic/putgrent.c, lib/Attic/putpwent.c, lib/Attic/putspent.c, lib/port.h, lib/pwauth.c, lib/Attic/lastlog_.h, lib/Attic/mkdir.c, lib/lockpw.c, lib/port.c, lib/Attic/grpack.c, lib/Attic/gsdbm.c, lib/Attic/gspack.c, lib/gshadow.c, lib/gshadow_.h, lib/Attic/getpass.c, lib/Attic/grdbm.c, lib/Attic/grent.c, lib/getdef.c, lib/Attic/dialup.h, lib/encrypt.c, lib/faillog.h, lib/fputsx.c, lib/Attic/dialchk.c, lib/Attic/dialup.c, lib/commonio.c, lib/defines.h, etc/Attic/login.defs.linux, etc/login.defs, doc/Attic/README.linux, doc/Attic/LICENSE, doc/Attic/README, doc/Makefile.am, doc/HOWTO, doc/Attic/ANNOUNCE, debian/Attic/secure-su.README, debian/Attic/secure-su.conffiles, debian/Attic/secure-su.copyright, debian/Attic/secure-su.postrm, debian/Attic/secure-su.preinst, debian/Attic/securetty, debian/Attic/passwd.conffiles, debian/Attic/passwd.copyright, debian/Attic/passwd.postinst, debian/Attic/porttime, debian/Attic/login.conffiles, debian/Attic/login.copyright, debian/Attic/login.postinst, debian/Attic/login.postrm, debian/Attic/login.preinst, debian/Attic/login.prerm, debian/Attic/logoutd, Attic/acconfig.h, Attic/config.h.in, Makefile.am, old/Attic/Makefile.in, old/Attic/scologin.c, old/Attic/orig-config.h, old/Attic/pwconv-old.c, old/Attic/pwd.h.m4, old/Attic/pwunconv-old.c, old/Attic/config.h.sun4, old/Attic/config.h.svr4, old/Attic/config.h.xenix, old/Attic/config.h.linux, old/Attic/Makefile.sun4, old/Attic/Makefile.svr4, old/Attic/Makefile.xenix, old/Attic/Makefile.am, old/Attic/Makefile.linux, src/Attic/Makefile.in, src/pwconv.c, src/userdel.c, src/usermod.c, src/useradd.c, src/su.c, src/sulogin.c, src/Attic/pwconv5.c, src/Attic/scologin.c, src/pwck.c, src/pwunconv.c, src/Attic/patchlevel.h, src/newusers.c, src/passwd.c, src/Attic/mkpasswd.c, src/logoutd.c, src/newgrp.c, src/grpunconv.c, src/id.c, src/lastlog.c, src/login.c, src/grpck.c, src/grpconv.c, src/groupdel.c, src/groupmod.c, src/groups.c, src/faillog.c, src/gpasswd.c, src/groupadd.c, src/Attic/dpasswd.c, src/chsh.c, src/expiry.c, src/chfn.c, src/chpasswd.c, src/chage.c:
+ *** empty log message ***
+
+1997-02-11 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * src/groupadd.c, src/useradd.c, libmisc/setupenv.c, lib/sgroupio.c, lib/shadowio.c, lib/groupio.c, lib/pwio.c, lib/Makefile.am, lib/commonio.c, doc/Attic/CHANGES, doc/HOWTO, README, configure.in:
+ *** empty log message ***
+
+1997-01-08 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * src/groupadd.c, lib/commonio.c, README, src/useradd.c, src/userdel.c, src/usermod.c, src/Attic/pwconv5.c, src/pwconv.c, src/su.c, src/passwd.c, src/pwck.c, src/grpunconv.c, src/login.c, src/logoutd.c, src/newgrp.c, src/grpck.c, src/grpconv.c, src/faillog.c, src/gpasswd.c, src/groupmod.c, src/chage.c, src/chfn.c, src/chsh.c, src/expiry.c, libmisc/ttytype.c, libmisc/utmp.c, libmisc/Attic/suauth.c, libmisc/strtoday.c, libmisc/shell.c, libmisc/failure.c, libmisc/log.c, libmisc/loginprompt.c, libmisc/myname.c, lib/shadowio.h, libmisc/Makefile.am, libmisc/chkname.c, lib/sgetpwent.c, lib/sgroupio.c, lib/sgroupio.h, lib/shadow.c, lib/shadowio.c, lib/Attic/pwent.c, lib/pwio.c, lib/pwio.h, lib/Attic/putgrent.c, lib/groupio.c, lib/groupio.h, lib/gshadow.c, lib/prototypes.h, lib/defines.h, lib/faillog.h, lib/getdef.c, doc/Attic/README.linux, doc/WISHLIST, etc/Attic/login.defs.linux, lib/Makefile.am, doc/Attic/CHANGES, doc/HOWTO, Attic/acconfig.h, configure.in:
+ *** empty log message ***
+
+1996-10-27 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * src/usermod.c, src/grpck.c, src/useradd.c, src/userdel.c, src/chsh.c, src/gpasswd.c, libmisc/isexpired.c, libmisc/limits.c, lib/sgroupio.c, lib/shadowio.c, lib/commonio.c, lib/groupio.c, lib/pwio.c, doc/Attic/CHANGES, doc/Attic/README.linux, doc/WISHLIST, Attic/configure, configure.in:
+ *** empty log message ***
+
+1996-09-25 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * src/usermod.c, src/sulogin.c, src/useradd.c, src/userdel.c, src/su.c, src/Attic/pwconv5.c, src/newgrp.c, src/passwd.c, src/pwck.c, src/grpck.c, src/login.c, src/logoutd.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/chfn.c, src/chsh.c, src/chage.c, libmisc/strtoday.c, libmisc/env.c, libmisc/fields.c, libmisc/isexpired.c, libmisc/setupenv.c, lib/Attic/rad64.c, lib/getdef.c, lib/prototypes.h, lib/defines.h, etc/Attic/login.defs.linux, doc/Attic/README.linux, doc/WISHLIST, doc/Attic/CHANGES, Attic/configure, configure.in, Attic/config.h.in:
+ *** empty log message ***
+
+1996-09-20 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * src/usermod.c, src/su.c, src/sulogin.c, src/useradd.c, src/userdel.c, src/newusers.c, src/passwd.c, src/pwck.c, src/grpck.c, src/login.c, src/logoutd.c, src/newgrp.c, src/groupdel.c, src/groupmod.c, src/Attic/dpasswd.c, src/chsh.c, src/gpasswd.c, src/groupadd.c, src/Attic/Makefile.in, src/chage.c, src/chfn.c, src/Makefile.am, libmisc/Attic/suauth.c, libmisc/shell.c, libmisc/sub.c, libmisc/ttytype.c, libmisc/env.c, libmisc/setugid.c, libmisc/setupenv.c, libmisc/chowntty.c, lib/prototypes.h, lib/getdef.c, doc/Attic/CHANGES, doc/WISHLIST:
+ *** empty log message ***
+
+1996-09-10 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * src/su.c, src/sulogin.c, src/usermod.c, src/logoutd.c, src/newgrp.c, src/passwd.c, src/pwconv.c, src/Attic/Makefile.in, src/chfn.c, src/chsh.c, src/grpunconv.c, src/login.c, src/Makefile.am, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/su.1, man/Attic/suauth.5, man/Attic/sulogin.8, man/Attic/pw_auth.3, man/Attic/pwauth.8, man/Attic/pwck.8, man/Attic/pwconv.8, man/Attic/pwunconv.8, man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/login.defs.5, man/Attic/logoutd.8, man/Attic/mkpasswd.8, man/Attic/newgrp.1, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/login.1, man/Attic/login.access.5, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmod.8, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/dpasswd.8, man/Attic/faillog.5, libmisc/isexpired.c, libmisc/obscure.c, libmisc/setupenv.c, libmisc/utmp.c, libmisc/age.c, lib/Attic/getpass.c, lib/defines.h, lib/getdef.c, etc/Attic/login.defs.linux, etc/limits, etc/login.access, doc/Attic/CHANGES, doc/Attic/README.linux, doc/WISHLIST, contrib/Attic/Makefile.in, contrib/Makefile.am, Attic/configure, configure.in:
+ *** empty log message ***
+
+1996-08-10 Marek Michałkiewicz <marekm@pld.org.pl>
+
+ * old/Attic/Makefile.am, old/Attic/Makefile.linux, old/Attic/Makefile.sun4, old/Attic/Makefile.svr4, old/Attic/Makefile.xenix, old/Attic/config.h.linux, old/Attic/config.h.sun4, old/Attic/config.h.svr4, old/Attic/config.h.xenix, old/Attic/install-sh, old/Attic/orig-config.h, old/Attic/pwd.h.m4, shlib/Attic/Makefile.am, shlib/Attic/Makefile.in, shlib/Attic/Makefile.in.saved:
+ New file.
+
+ * contrib/adduser-old.c, contrib/adduser.sh, contrib/adduser2.sh, contrib/atudel:
+ 960810 - first version under cvs
+
+ * contrib/Attic/Makefile.in, contrib/Makefile.am, contrib/README, contrib/adduser.c, contrib/pwdauth.c, doc/Attic/ANNOUNCE, doc/Attic/CHANGES, doc/Attic/LICENSE, doc/Attic/Makefile.in, doc/Attic/README, doc/Attic/README.linux, doc/Attic/README.sun4, doc/Attic/automake-1.0.diff, doc/Attic/console.c.spec, doc/HOWTO, doc/Makefile.am, doc/README.limits, doc/WISHLIST, etc/Attic/Makefile.in, etc/Attic/login.defs.linux, etc/Makefile.am, etc/login.access, etc/login.defs, old/Attic/Makefile.in, src/Attic/patchlevel.h, src/Attic/pwconv5.c, src/Attic/scologin.c, src/chage.c, src/chfn.c, src/chsh.c, src/expiry.c, src/gpasswd.c, src/groups.c, src/grpconv.c, src/id.c, src/login.c, src/newgrp.c, src/passwd.c, src/pwconv.c, src/pwunconv.c, src/su.c, src/sulogin.c, lib/Attic/dialup.h, lib/Attic/grdbm.c, lib/Attic/grent.c, lib/Attic/grpack.c, lib/Attic/gsdbm.c, lib/Attic/gspack.c, lib/Attic/lastlog_.h, lib/Attic/md5.c, lib/Attic/md5.h, lib/Attic/md5crypt.c, lib/Attic/mkdir.c, lib/Attic/putgrent.c, lib/Attic/putpwent.c, lib/Attic/putspent.c, lib/Attic/pwdbm.c, lib/Attic/pwent.c, lib/Attic/pwpack.c, lib/Attic/rcsid.h, lib/Attic/rename.c, lib/Attic/rmdir.c, lib/Attic/shadow_.h, lib/Attic/spdbm.c, lib/Attic/sppack.c, lib/Attic/strdup.c, lib/Attic/strstr.c, lib/defines.h, lib/faillog.h, lib/getdef.h, lib/groupio.h, lib/gshadow_.h, lib/port.h, lib/prototypes.h, lib/pwauth.h, lib/pwio.h, lib/sgetgrent.c, lib/sgetpwent.c, lib/sgetspent.c, lib/sgroupio.h, lib/shadow.c, lib/shadowio.c, lib/shadowio.h, lib/utent.c, src/Attic/Makefile.in, src/Attic/dpasswd.c, src/Attic/mkpasswd.c, src/Makefile.am, src/chpasswd.c, src/faillog.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/grpck.c, src/lastlog.c, src/logoutd.c, src/newusers.c, src/pwck.c, src/useradd.c, src/userdel.c, src/usermod.c, lib/Attic/Makefile.in, lib/Attic/dialchk.c, lib/Attic/dialup.c, lib/Attic/getpass.c, lib/Attic/rad64.c, lib/Makefile.am, lib/commonio.c, lib/encrypt.c, lib/fputsx.c, lib/getdef.c, lib/groupio.c, lib/gshadow.c, lib/lockpw.c, lib/port.c, lib/pwauth.c, lib/pwio.c, lib/sgroupio.c, libmisc/Attic/login_access.c, libmisc/Attic/login_desrpc.c, libmisc/Attic/login_krb.c, libmisc/Attic/setup.c, libmisc/Attic/suauth.c, libmisc/age.c, libmisc/basename.c, libmisc/chkname.c, libmisc/chowndir.c, libmisc/chowntty.c, libmisc/console.c, libmisc/copydir.c, libmisc/entry.c, libmisc/env.c, libmisc/failure.c, libmisc/fields.c, libmisc/hushed.c, libmisc/isexpired.c, libmisc/limits.c, libmisc/list.c, libmisc/log.c, libmisc/loginprompt.c, libmisc/mail.c, libmisc/motd.c, libmisc/obscure.c, libmisc/pwd2spwd.c, libmisc/rlogin.c, libmisc/salt.c, libmisc/setugid.c, libmisc/setupenv.c, libmisc/shell.c, libmisc/strtoday.c, libmisc/sub.c, libmisc/sulog.c, libmisc/ttytype.c, libmisc/tz.c, libmisc/ulimit.c, libmisc/utmp.c, libmisc/valid.c, libmisc/xmalloc.c, man/Attic/Makefile.in, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/dpasswd.8, man/Attic/faillog.5, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/login.1, man/Attic/login.access.5, man/Attic/login.defs.5, man/Attic/logoutd.8, man/Attic/mkpasswd.8, man/Attic/newgrp.1, man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/pw_auth.3, man/Attic/pwauth.8, man/Attic/pwck.8, man/Attic/pwconv.8, man/Attic/pwunconv.8, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/su.1, man/Attic/suauth.5, man/Attic/sulogin.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/Makefile.am, Attic/Makefile.in, Attic/acconfig.h, Attic/aclocal.m4, Attic/config.h.in, Attic/configure, Attic/install-sh, Attic/mkinstalldirs, Attic/stamp-h.in, Makefile.am, README, configure.in, libmisc/Attic/Makefile.in, libmisc/Makefile.am, libmisc/addgrps.c:
+ New file.
+
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..8851f5d
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,6 @@
+## Process this file with automake to produce Makefile.in
+
+EXTRA_DIST = NEWS README TODO shadow.spec.in
+
+SUBDIRS = po man libmisc lib src \
+ contrib doc etc
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..32edc35
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,858 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
+ $(am__configure_deps) $(am__DIST_COMMON)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = man/po/Makefile shadow.spec
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ cscope distdir distdir-am dist dist-all distcheck
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
+ $(LISP)config.h.in
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+CSCOPE = cscope
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \
+ $(srcdir)/shadow.spec.in $(top_srcdir)/man/po/Makefile.in \
+ ABOUT-NLS COPYING ChangeLog NEWS README TODO compile \
+ config.guess config.rpath config.sub install-sh ltmain.sh \
+ missing
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ if test -d "$(distdir)"; then \
+ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -rf "$(distdir)" \
+ || { sleep 5 && rm -rf "$(distdir)"; }; \
+ else :; fi
+am__post_remove_distdir = $(am__remove_distdir)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.xz
+GZIP_ENV = --best
+DIST_TARGETS = dist-xz dist-gzip
+distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = NEWS README TODO shadow.spec.in
+SUBDIRS = po man libmisc lib src \
+ contrib doc etc
+
+all: config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+am--refresh: Makefile
+ @:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
+ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+ @test -f $@ || rm -f stamp-h1
+ @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+ @rm -f stamp-h1
+ cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+ rm -f stamp-h1
+ touch $@
+
+distclean-hdr:
+ -rm -f config.h stamp-h1
+man/po/Makefile: $(top_builddir)/config.status $(top_srcdir)/man/po/Makefile.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+shadow.spec: $(top_builddir)/config.status $(srcdir)/shadow.spec.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool config.lt
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscope: cscope.files
+ test ! -s cscope.files \
+ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+clean-cscope:
+ -rm -f cscope.files
+cscope.files: clean-cscope cscopelist
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+ -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ $(am__remove_distdir)
+ test -d "$(distdir)" || mkdir "$(distdir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+ -test -n "$(am__skip_mode_fix)" \
+ || find "$(distdir)" -type d ! -perm -755 \
+ -exec chmod u+rwx,go+rx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
+ $(am__post_remove_distdir)
+
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+ $(am__post_remove_distdir)
+
+dist-lzip: distdir
+ tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+ $(am__post_remove_distdir)
+dist-xz: distdir
+ tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+ $(am__post_remove_distdir)
+
+dist-tarZ: distdir
+ @echo WARNING: "Support for distribution archives compressed with" \
+ "legacy program 'compress' is deprecated." >&2
+ @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__post_remove_distdir)
+
+dist-shar: distdir
+ @echo WARNING: "Support for shar distribution archives is" \
+ "deprecated." >&2
+ @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+ shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
+ $(am__post_remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__post_remove_distdir)
+
+dist dist-all:
+ $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+ $(am__post_remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.lz*) \
+ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
+ *.tar.xz*) \
+ xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ esac
+ chmod -R a-w $(distdir)
+ chmod u+w $(distdir)
+ mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
+ chmod a-w $(distdir)
+ test -d $(distdir)/_build || exit 0; \
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && am__cwd=`pwd` \
+ && $(am__cd) $(distdir)/_build/sub \
+ && ../../configure \
+ $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ --srcdir=../.. --prefix="$$dc_install_base" \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+ && cd "$$am__cwd" \
+ || exit 1
+ $(am__post_remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+ @test -n '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: trying to run $@ with an empty' \
+ '$$(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ $(am__cd) '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile config.h
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr \
+ distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) all install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+ am--refresh check check-am clean clean-cscope clean-generic \
+ clean-libtool cscope cscopelist-am ctags ctags-am dist \
+ dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \
+ dist-xz dist-zip distcheck distclean distclean-generic \
+ distclean-hdr distclean-libtool distclean-tags distcleancheck \
+ distdir distuninstallcheck dvi dvi-am html html-am info \
+ info-am install install-am install-data install-data-am \
+ install-dvi install-dvi-am install-exec install-exec-am \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+ uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..dbf0653
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,2166 @@
+$Id$
+
+shadow-4.1.5.1 -> shadow-4.2 UNRELEASED
+
+*** general
+ * Handle libc whose crypt() returns NULL when passed a salt that
+ violates specs or system requirements (e.g. FIPS140). This is needed
+ with glibc/eglibc 2.17 for tools checking passwords (passwd (non PAM
+ enabled) or newgrp), and for tools generating encrypted passwords
+ (chgpasswd, chpasswd, or gpasswd when non PAM enabled or when a fixed
+ crypt method is requested on the command line, and newusers, or passwd
+ in their non PAM enabled versions)
+ * Fix segfault when reading groups split on multiple lines. This impacts
+ most user/group management tools when MAX_MEMBERS_PER_GROUP is set.
+
+- su
+ * When su receives a signal (SIGTERM, or SIGINT/SIGQUIT in non
+ interactive mode), kill the child process group, rather than just the
+ immediate child.
+ * Fix segmentation faults for users without a proper home or shell in
+ their passwd entries.
+
+- login
+ * Fix segmentation faults for users without a proper home or shell in
+ their passwd entries.
+
+*** documentation
+ * Fixed useradd man page (--home-dir option, instead of --home).
+
+*** translation
+ * Updated Russian translation.
+ * Updated German man pages translation.
+ * Fixed gshadow Japanese man page translation.
+
+shadow-4.1.5 -> shadow-4.1.5.1 2012-05-25
+
+- login
+ * Log into utmp(x) when PAM is enabled, but do not log into wtmp.
+ This complete pam_lastlog which logs into wtmp and in into utmp(x).
+- su
+ * non PAM enabled versions: do not fail if su is called without a
+ controlling terminal.
+- userdel
+ * Fix segfault when userdel removes the user's group.
+
+*** documentation
+ * .so links now point to paths relative to the top-level manual hierarchy
+
+*** translation
+ * Updated French man pages translation.
+ * Updated German man pages translation.
+ * Updated Polish man pages translation. (logoutd.8)
+
+shadow-4.1.4.3 -> shadow-4.1.5 2012-02-12
+
+*** security
+ * su -c could be abused by the executed command to invoke commands with
+ the caller privileges. See below. (CVE-2005-4890)
+
+*** general
+ * report usage error to stderr, but report usage help to stdout (and return
+ zero) when explicitly requested (e.g. with --help).
+ * initial support for tcb (http://openwall.com/tcb/) for useradd,
+ userdel, usermod, chage, pwck, vipw.
+ * Added support for ACLs and Extended Attributes in useradd and usermod.
+ Support shall be enabled with the new --with-acl or --with-attr
+ configure options.
+ * Added diagnosis for lock failures.
+ * use libsemanage instead of the semanage tool.
+
+- chage
+ * Add --root option.
+- chfn
+ * Add --root option.
+- chgpasswd
+ * When the gshadow file exists but there are no gshadow entries, an entry
+ is created if the password is changed and group requires a
+ shadow entry.
+ * Add --root option.
+- chpasswd
+ * PAM enabled versions: restore the -e option to allow restoring
+ passwords without knowing those passwords. Restore together the -m
+ and -c options. (These options were removed in shadow-4.1.4 on PAM
+ enabled versions)
+ * When the shadow file exists but there are no shadow entries, an entry
+ is created if the password is changed and passwd requires a
+ shadow entry.
+ * Add --root option.
+- chsh
+ * Add --root option.
+- faillog
+ * The -l, -m, -r, -t options only act on the existing users, unless -a is
+ specified.
+ * Add --root option.
+- gpasswd
+ * Add --root option.
+- groupadd
+ * Add --root option.
+- groupdel
+ * Add --root option.
+- groupmems
+ * Fix parsing of gshadow entries.
+ * Add --root option.
+- groupmod
+ * Fixed groupmod when configured with --enable-account-tools-setuid.
+ * When the gshadow file exists but there are no gshadow entries, an entry
+ is created if the password is changed and group requires a
+ shadow entry.
+ * Add --root option.
+- grpck
+ * Add --root option.
+ * NIS entries were dropped by -s (sort).
+- grpconv
+ * Add --root option.
+- grpunconv
+ * Add --root option.
+- lastlog
+ * Add --root option.
+- login
+ * Fixed limits support (non PAM enabled versions only)
+ * Added support for infinite limits and group based limits (non PAM
+ enabled versions only)
+ * Fixed infinite loop when CONSOLE is configured with a colon-separated
+ list of TTYs.
+ * Fixed warning and support for CONSOLE_GROUPS for users member of more
+ than 16 groups.
+ * Do not log into utmp(x) or wtmp when PAM is enabled. This is done by
+ pam_lastlog.
+- newgrp, sg
+ * Fix parsing of gshadow entries.
+- newusers
+ * Add --root option.
+- passwd
+ * Add --root option.
+- pwpck
+ * NIS entries were dropped by -s (sort).
+ * Add --root option.
+- pwconv
+ * Add --root option.
+- pwunconv
+ * Add --root option.
+- useradd
+ * If the skeleton directory contained hardlinked files, copies of the
+ hardlink were removed from the skeleton directory.
+ * Add --root option.
+- userdel
+ * Check the existence of the user's mail spool before trying to remove
+ it. If it does not exist, a warning is issued, but no failure.
+ * Do not remove a group with the same name as the user (usergroup) if
+ this group isn't the user's primary group.
+ * Add --root option.
+ * Add --selinux-user option.
+- usermod
+ * Accept options in any order (username not necessarily at the end)
+ * When the shadow file exists but there are no shadow entries, an entry
+ is created if the password is changed and passwd requires a
+ shadow entry, or if aging features are used (-e or -f).
+ * Add --root option.
+- su
+ * Document the su exit values.
+ * When su receives a signal, wait for the child to terminate (after
+ sending a SIGTERM), and kill it only if it did not terminate by itself.
+ No delay will be enforced if the child cooperates.
+ * Default ENV_SUPATH is /sbin:/bin:/usr/sbin:/usr/bin
+ * Fixed infinite loop when CONSOLE is configured with a colon-separated
+ list of TTYs.
+ * Fixed warning and support for CONSOLE_GROUPS for users member of more
+ than 16 groups.
+ * Do not forward the controlling terminal to commands executed with -c.
+ This prevents tty hijacking which could lead to execution with the
+ caller's privileges.
+ * Close PAM sessions as root. This will be more friendly to PAM modules
+ like pam_mount or pam_systemd.
+ * Added support for PAM modules which change PAM_USER.
+
+*** translation
+ * Updated Brazilian Portuguese translation.
+ * Updated Catalan translation.
+ * Updated Czech translation.
+ * Updated Danish translation.
+ * New Danish man pages translation.
+ * Updated French translation.
+ * Updated French man pages translation.
+ * Updated German translation.
+ * Updated German man pages translation.
+ * Updated Greek translation.
+ * Updated Italian man pages translation.
+ * Updated Japanese translation.
+ * Updated Kazakh translation.
+ * Updated Norwegian Bokmål translation.
+ * Updated Portuguese translation.
+ * Updated Russian translation.
+ * Updated Simplified Chinese translation.
+ * Updated Simplified Chinese man pages translation.
+ * Updated Swedish translation.
+ * Updated Vietnamese translation.
+
+shadow-4.1.4.2 -> shadow-4.1.4.3 2011-02-15
+
+*** security
+- CVE-2011-0721: An insufficient input sanitation in chfn can be exploited
+ to create users or groups in a NIS environment.
+
+shadow-4.1.4.1 -> shadow-4.1.4.2 2009-07-24
+
+- general
+ * Improved support for large groups (impacts most user/group management
+ tools).
+
+- addition of system users or groups
+ * Speed improvement. This should be noticeable in case of LDAP configured
+ systems. This should impact useradd, groupadd, and newusers
+ * Since system accounts are allocated from SYS_?ID_MIN to SYS_?ID_MAX in
+ reverse order, accounts are packed close to SYS_?ID_MAX if SYS_?ID_MIN
+ is already used but there are still dome gaps.
+
+- login
+ * Add support for shells being a shell script without a shebang.
+- su
+ * Preserve the DISPLAY and XAUTHORITY environment variables. This was
+ only the case in the non PAM enabled versions.
+ * Add support for shells being a shell script without a shebang.
+
+*** translation
+ * The Finnish translation of passwd(1) was outdated and is no more
+ distributed.
+
+shadow-4.1.4 -> shadow-4.1.4.1 2009-05-22
+
+- login
+ * Fix failures with empty usernames on non PAM versions.
+ * Fix CONSOLE (securetty) support on non PAM versions.
+- newgrp
+ * Return the exit status of the child.
+- userdel
+ * On Linux, do not check if an user is logged in with utmp, but check if
+ the user is running some processes.
+ * If not on Linux, continue to search for an utmp record, but make sure
+ the process recorded in the utmp entry is still running.
+ * Report failures to remove the user's mailbox
+ * When USERGROUPS_ENAB is enabled, remove the user's group when the
+ user was the only member.
+ * Do not fail when -r is used and the home directory does not exist.
+- usermod
+ * Check if the user is busy when the user's UID, name or home directory
+ is changed.
+
+shadow-4.1.3.1 -> shadow-4.1.4 2009-05-10
+
+- packaging
+ * Enable --enable-account-tools-setuid by default for PAM builds.
+ * Add configure option --enable-utmpx, disabled by default to mimic
+ the previous behavior on Linux (where utmp and utmpx are identical).
+ * Fix build failure on non-PAM systems when --without-pam is not
+ specified.
+
+- chpasswd
+ * Change the passwords using PAM. This permits to define the password
+ policy in a central place. The -c/--crypt-method, -e/--encrypted,
+ -m/--md5 and -s/--sha-rounds options are no more supported on PAM
+ enabled systems.
+- grpck
+ * Warn if a group has an entry in group and gshadow, and the password
+ field in group is not 'x'.
+- login
+ * Do not trust the current utmp entry's ut_line to set PAM_TTY. This could
+ lead to DOS attacks.
+ * (PAM) Even if the user was already authenticated (-f flag), ask the
+ user to update his authentication token if needed.
+- lastlog
+ * Fix regression causing empty reports.
+- newusers
+ * Change the passwords using PAM. This permits to define the password
+ policy in a central place. The -c/--crypt-method and -s/--sha-rounds
+ options are no more supported on PAM enabled systems.
+- pwck
+ * Warn if an user has an entry in passwd and shadow, and the password
+ field in passwd is not 'x'.
+
+*** translation
+ - Updated Czech translation
+ - Updated French translation
+ - Updated German translation
+ - Updated Japanese translation
+ - Updated Korean translation
+ - Updated Portuguese translation
+ - Updated Russian translation
+
+shadow-4.1.3 -> shadow-4.1.3.1 2009-04-15
+
+*** security:
+- Due to bad parsing of octal permissions, the permissions on tty (login)
+ but also UMASK were set wrongly (and weirdly). Only shadow-4.1.3 was
+ affected.
+
+*** general
+- login
+ * Fix regression when no user is specified on the command line.
+- userdel
+ * Fixed SE Linux support
+- vipw
+ * SE Linux: Set the default context to the context of the file being
+ edited. This ensures that the backup file inherit from the file's
+ context.
+
+*** translation
+ - Updated Norwegian Bokmål translation
+
+shadow-4.1.2.2 -> shadow-4.1.3 2009-04-12
+
+*** general:
+- packaging
+ * Fixed support for OpenPAM.
+ * Fixed support for uclibc.
+ * Added configure --enable-account-tools-setuid (default) /
+ --disable-account-tools-setuid options. This permits to disable the
+ PAM authentication of the caller for chage, chgpasswd, chpasswd,
+ groupadd, groupdel, groupmod, newusers, useradd, userdel, and usermod.
+ This authentication is not necessary when these tools are not
+ installed setuid root.
+ * Added configure --with-group-name-max-length (default) /
+ --without-group-name-max-length options. This permits to configure the maximum length allowed for group names:
+ <no option> -> default of 16 (like today)
+ --with-group-name-max-length -> default of 16
+ --without-group-name-max-length -> no max length
+ --with-group-name-max-length=n > max is set to n
+ No sanity checking is performed on n so people could do
+ something neat like --with-group-name-max-length=MAX_INT
+- addition of users or groups
+ * Speed improvement in case UID_MAX/SYS_UID_MAX/GID_MAX/SYS_GID_MAX is
+ used for an user/group. This should be noticeable in case of LDAP
+ configured systems. This should impact useradd, groupadd, and newusers
+- error handling improvement
+ * Make sure errors and incomplete changes are reported to syslog and
+ audit in case of unexpected failures.
+ * Report system inconsistencies to syslog and audit.
+ * Only report success to syslog and audit if the changes are really
+ performed in the system databases.
+ This is still not complete.
+- /etc/login.defs
+ * New CREATE_HOME variable to tell useradd to create a home directory by
+ default.
+- Translations
+ * New Kazakh translation.
+ * Spanish manpages are no more distributed. They are outdated. Please
+ contact pkg-shadow-devel@lists.alioth.debian.org if you wish to
+ provide updates.
+
+- faillog
+ * Accept users specified as a numerical UID, or ranges of users (-user,
+ user-, user1-user2).
+ * -l, -m, and -r now apply not only to existing users, but to all the
+ specified UIDs.
+ * Options can be specified in any order.
+- gpasswd
+ * Added support for long options --add (-a), --delete (-d),
+ --remove-password (-r), --restrict (-R), --administrators (-A), and
+ --members (-M).
+ * Added support for usernames with arbitrary length.
+ * audit logging improvements.
+ * error handling improvement (see above).
+ * Log permission denied to syslog and audit.
+- groupadd
+ * audit logging improvements.
+ * error handling improvement (see above).
+ * Speedup (see "addition of users or groups" above).
+ * do not create groups with GID set to (gid_t)-1.
+ * Allocate system group GIDs in reverse order. This could be useful
+ later to increase the static IDs range.
+- groupdel
+ * audit logging improvements.
+ * error handling improvement (see above).
+- groupmems
+ * Check if user exist before they are added to groups.
+ * Avoid segfault in case the specified group does not exist in /etc/group.
+ * Everybody is allowed to list the users of a group.
+ * /etc/group is open readonly when one just wants to list the users of a
+ group.
+ * Added syslog support.
+ * Use the groupmems PAM service name instead of groupmod.
+ * Fix segmentation faults when adding or removing users from a group.
+ * Added support for shadow groups.
+ * Added support long options --add (-a), --delete (-d), --purge (-p),
+ --list (-l), --group (-g).
+- groupmod
+ * audit logging improvements.
+ * error handling improvement (see above).
+ * do not create groups with GID set to (gid_t)-1.
+- grpck
+ * warn for groups with GID set to (gid_t)-1.
+- login
+ * Restore the echoctl, echoke, onclr flags to the terminal termio flags.
+ Reset echoprt, noflsh, tostop. This behavior seems to have change by
+ mistake in earlier releases (4.0.8, for no obvious reason).
+- newusers
+ * Implement the -r, --system option.
+ * Speedup (see "addition of users or groups" above).
+ * do not create users with UID set to (gid_t)-1.
+ * do not create groups with GID set to (gid_t)-1.
+ * Allocate system account UIDs/GIDs in reverse order. This could be useful
+ later to increase the static IDs range.
+- passwd
+ * For compatibility with other passwd version, the --lock an --unlock
+ options do not lock or unlock the user account anymore. They only
+ lock or unlock the user's password.
+- pwck
+ * warn for users with UID set to (uid_t)-1.
+- su
+ * Preserve COLORTERM in addition to TERM when su is called with the -l
+ option.
+- useradd
+ * audit logging improvements.
+ * Speedup (see "addition of users or groups" above).
+ * See CREATE_HOME above.
+ * New -M/--no-create-home option to disable CREATE_HOME.
+ * do not create users with UID set to (gid_t)-1.
+ * Added -Z option to map SELinux user for user's login.
+ * Allocate system user UIDs in reverse order. This could be useful
+ later to increase the static IDs range.
+- userdel
+ * audit logging improvements.
+ * Do not fail if the removed user is not in the shadow database.
+ * When the user's group shall be removed, do not fail if this group is
+ not in the gshadow file.
+ * Delete the SELinux user mapping for user's login.
+- usermod
+ * Allow adding LDAP users (or any user not present in the local passwd
+ file) to local groups
+ * do not create users with UID set to (gid_t)-1.
+ * Added -Z option to map SELinux user for user's login.
+
+shadow-4.1.2.1 -> shadow-4.1.2.2 23-11-2008
+
+*** security
+- Fix a race condition in login that could lead to gaining ownership or
+ changing mode of arbitrary files.
+- Fix a possible login DOS, which could be caused by injecting forged
+ entries in utmp.
+
+shadow-4.1.2 -> shadow-4.1.2.1 26-06-2008
+
+*** security
+- Fix an "audit log injection" vulnerability in login.
+ This vulnerability makes it easier for attackers to hide activities by
+ modifying portions of log events, e.g. by appending an addr= statement
+ to the login name.
+
+shadow-4.1.1 -> shadow-4.1.2 25-05-2008
+
+*** security:
+- generation of SHA encrypted passwords (chpasswd, gpasswd, newusers,
+ chgpasswd; and also passwd if configured without PAM support).
+ The number of rounds and number of salt bytes was fixed to their lower
+ allowed values (resp. configurable and 8), hence voiding some of the
+ advantages of this encryption method. Dictionary attacks with
+ precomputed tables were easier than expected, but still harder than with
+ the MD5 (or DES) methods.
+
+*** general:
+- packaging
+ * Distribute the chfn, chsh, and userdel PAM configuration file.
+ * Fix the detection of the audit, pam, and selinux library and header
+ file; and fail if the feature is requested but not present on the
+ system.
+ * Fix build failure when configured with audit support.
+- chfn
+ * Allow non-US-ASCII characters in the GECOS fields ("name", "room
+ number", and "other info" fields).
+- login
+ * Do not fail if a shell option, specified after --, has more than 2
+ letters.
+- su
+ * If the SULOG_FILE does not exist when an su session is logged, make
+ sure the file is created with group root, instead of using the group
+ of the caller.
+- vipw
+ * Resume properly after ^Z.
+
+*** documentation:
+- Document the -r, --system option in the useradd, groupadd, and newusers
+ manpages.
+- Document the -c, --crypt-method and -s, --sha-rounds options in the
+ newusers manpage.
+- Document the -k, --skel option in the useradd manpage.
+- Tag the section which require --enable-shadowgrp or --with-sha-crypt
+ accordingly.
+
+shadow-4.1.0 -> shadow-4.1.1 02-04-2008
+
+*** general:
+- security
+ * Do not seed the random number generator each time, and use the time in
+ microseconds to avoid having the same salt for different passwords
+ generated in the same second.
+- packaging
+ * Do not install the shadow library per default.
+- general
+ * Do not translate the messages sent to syslog. This avoids logging
+ PAM error messages in the users's locale.
+- etc/login.defs
+ * Set GID_MIN to the same value as UID_MIN by default (1000).
+ * Added variables SYS_UID_MIN (100), SYS_UID_MAX (999), SYS_GID_MIN (100),
+ SYS_GID_MAX (999) for system accounts.
+- etc/useradd
+ * /etc/default/useradd now defines HOME as /home to match FHS.
+- chage
+ * Fix bug which forbid to set the aging information of an account with a
+ passwd entry, but no shadow entry.
+- faillog
+ * faillog -r now only reset the entries of existing users. This makes
+ faillog faster.
+- gpasswd
+ * Fix failures when the gshadow file is not present.
+ * When a password is moved to the gshadow file, use "x" instead of "!"
+ to indicate that the password is shadowed (consistency with grpconv).
+ * Make sure the group and gshadow files are unlocked on exit.
+- groupadd
+ * New option -p/--password to specify an encrypted password.
+ * New option -r, --system for system accounts.
+- groupdel
+ * Do not fail if the group does not exist in the gshadow file.
+ * Do not rewrite the group or gshadow file in case of error.
+ * Make sure the group and gshadow files are unlocked on exit.
+ * Fail if the system is not configured to support split groups and
+ different group entries have the name of the group to be deleted.
+- groupmems
+ * Fix buffer overflow when adding an user to a group. Thanks to Peter Vrabec.
+- groupmod
+ * New option -p/--password to specify an encrypted password.
+ * Make sure the group and gshadow files are unlocked on exit.
+ * When the GID of a group is changed, update also the GID of the passwd
+ entries of the users whose primary group is the group being modified.
+- grpck
+ * Fix logging of changes to syslog when a group file is provided,
+ without a gshadow file.
+- lastlog
+ * Accept users specified as a numerical UID, or ranges of users (-user,
+ user-, user1-user2).
+- login
+ * Use PATH and SUPATH to set the PATH environment variable, even when
+ support for PAM is enabled.
+ * If started as init, start a new session.
+- newgrp
+ * Fix segfault when an user returns to an unknown GID (either the user
+ was deleted during the user's newgrp session or the user's passwd
+ entry referenced an invalid group). Add a syslog warning in that case.
+ * Use the correct AUDIT_CHGRP_ID event instead of AUDIT_USER_START, when
+ changing the user space group ID with newgrp or sg.
+- newusers
+ * The new users are no more added to the list of members of their groups
+ because the membership is already set by their primary group.
+ * Added support for gshadow.
+ * Avoid using the same salt for different passwords.
+ * Fix support for the NONE crypt method.
+ * newusers will behave more like useradd regarding the choice of UID or
+ GID or regarding the validity of user and group names.
+ * New option -r, --system for system accounts.
+ * Make sure the passwd, group, shadow, and gshadow files are unlocked on
+ exit.
+- passwd
+ * Make sure that no more than one username argument was provided.
+ * Make SE Linux tests more strict, when the real UID is 0 SE Linux
+ checks will be performed.
+- pwck
+ * Fix logging of changes to syslog when a passwd file is provided,
+ without a shadow file.
+- su
+ * su's arguments are now reordered. If needed, use -- to separate su's
+ options from the shell's options.
+- sulogin
+ * If started as init, start a new session.
+- useradd
+ * New option -l to avoid adding the user to the lastlog and faillog databases.
+ * Fix the handling of the --defaults option (it required an argument,
+ but should behave as -D)
+ * Document the --defaults option, which was already described in the
+ useradd's Usage information.
+ * New option -r, --system for system accounts.
+ * New options -U, --user-group and -N, --no-user-group. These options
+ should replace nflg from the previous versions. Please set any -n
+ option to deprecated because its meaning differs from one distribution
+ to the other.
+ * Make sure the passwd, group, shadow, and gshadow files are unlocked on
+ exit.
+- usermod
+ * Keep the access and modification time of files when moving an user's home
+ directory.
+ * Check that the new fields set with -u, -s, -l, -g, -f, -e, -d, and -c
+ differ from the old ones. If a requested new value is equal to the old
+ one, no changes will be performed for that field. If no fields are
+ changed, usermod will exist successfully with a warning. This avoids
+ logging changes to syslog when there are actually no changes.
+ * Fix the handling of -a when a user is being renamed (with -l)
+- vipw/vigr
+ * Recommend editing the shadowed (resp. regular) file if the regular (resp.
+ shadowed) file was edited.
+
+shadow-4.0.18.2 -> shadow-4.1.0 09-12-2007
+
+*** security:
+- chgpasswd
+ When compiled with PAM support, it used the chpasswd policy file instead
+ of the chgpasswd policy file. If an administrator added some restriction
+ to the chgpasswd policy file, they were not taken into account.
+
+*** general:
+- Add support for SHA256 and SHA512 encrypt methods (supported by new
+ libc).
+- useradd: Allow non numerical group identifier to be specified with
+ useradd's -g option.
+- chgpasswd, chpasswd: Fix chpasswd and chgpasswd stack overflow.
+- newgrp: Do not give an indication that the group has no password. Ask
+ for the password, as if there were a password.
+- The permissions of the suid binaries is now configurable in
+ src/Makefile.am. Note that changing the permissions is not recommended.
+- newgrp.c: Declare the child and pid variable at the beginning of a block.
+ This fixes a compilation issue with gcc 2.95.
+- login_nopam: Add support for systems with no innetgr(). On those
+ systems, username with an @ will be treated like any other username
+ (i.e. lookup in the local database for an user with an @). Thanks to
+ Mike Frysinger for the patch.
+- Add support for uClibc with no l64a().
+- userdel, usermod: Fix infinite loop caused by erroneous group file
+ containing two entries with the same name. (The fix strategy differs
+ from
+ (https://bugzilla.redhat.com/show_bug.cgi?id=240915)
+- userdel: Abort if an error is detected while updating the passwd or group
+ databases. The passwd or group files will not be written.
+- usermod: Update the group database before flushing the nscd caches.
+- usermod: Make sure the group modifications will be allowed before
+ writing the passwd files.
+- Flush the nscd tables using nscd -i instead of the private glibc socket.
+- usermod: Make usermod options independent of the argument order.
+- newgrp: Do not request a password when a user uses newgrp to switch to
+ her primary group.
+- passwd: -l/-u options: edit the shadow account expiry field *in
+ addition* to editing the password field.
+- pwck: Remove the SHADOWPWD preprocessor check. Some check for /etc/shadow
+ were always missing.
+- su: Avoid terminating the PAM library in the forked child. This is done
+ later in the parent after closing the PAM session.
+- userdel: Fix the homedir prefix checking.
+- passwd, usermod: Refuse to unlock an account when it would result in a
+ passwordless account.
+- Full review of the usage of getpwnam(), getpwuid(), getgrnam(),
+ getgrgid(), and getspnam(). There should be no functional changes.
+- gpasswd: Only read information from the local file group database. It
+ writes the changes in /etc/group and/or /etc/gshadow, but used to read
+ information from getgrnam (hence possibly from another group database).
+- New login.defs variable: MAX_MEMBERS_PER_GROUP. It should provide a
+ better support for split groups. Be careful when using this variable:
+ not all tools support well split groups (in or out of the shadow
+ tool suite). It fixes gpasswd and chgpasswd when split groups are used.
+- Use MD5_CRYPT_ENAB, ENCRYPT_METHOD, SHA_CRYPT_MIN_ROUNDS, and
+ SHA_CRYPT_MAX_ROUNDS to define the default encryption algorithm for the
+ passwords.
+- chpasswd, chgpasswd, newusers: New options -c/--crypt-method and
+ -s/--sha-rounds to supersede the system default encryption algorithm.
+- chpasswd, chgpasswd, newusers: DES is no more the default algorithm. They
+ will respect the system default configured in /etc/login.defs
+
+*** documentation:
+- Generate the translated manpages from PO at build time.
+- The generated manpages will change depending on the configure options.
+ If you use different options than the one used for the distributed
+ archive, you should re-generate the manpages.
+- login.defs should now describe all the variables.
+- The tools' documentation details the login.defs variables they use.
+
+shadow-4.0.18.1 -> shadow-4.0.18.2 28-10-2007
+
+*** general:
+- usermod: fixed handle -a option (by Benno Schulenberg
+ <bensberg@justemail.net>),
+- useradd: improved auditing support
+ (https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=211659),
+- groupadd, groupdel, groupmod, useradd, userdel, usermod: flush nscd cashes
+ after close /etc/{group,passwd} files,
+- su: If compiled without PAM support, enforce the limits from /etc/limits
+ when one of the -, -l, or --login options is set, even if called by root.
+- limits: Support for 2 new resource limits: max nice value, and max real
+ time priority. The resource limits are not used when compiled with PAM.
+*** documentation:
+- updated translations: fi, ja, nl, tl, zh_CN.
+- groupadd.8, groupmod.8, login.1, useradd.8, userdel.8, usermod.8: grammar
+ mistakes and other corrections (by Schulenberg <bensberg@justemail.net>),
+
+shadow-4.0.18 -> shadow-4.0.18.1 03-08-2006
+
+*** general:
+- groupmems: fixed compilation when PAM is disabled
+ (by Johannes Winkelmann <jw@smts.ch>),
+- fixed missing man pages in dist tar ball necessary on build when
+ PAM is disabled.
+
+shadow-4.0.17 -> shadow-4.0.18 01-08-2006
+
+*** general:
+- su: fixed set enviroment too early when using PAM, so move it to !USE_PAM
+ (patch submitted by Mike Frysinger <vapier@gentoo.org>),
+- 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
+ (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: 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,
+- partially translated sv man pages set added
+ (by Daniel Nylander <info@danielnylander.se>),
+- pl chage(1), chsh(1), groupmod(8): translation finished.
+
+shadow-4.0.16 -> shadow-4.0.17 10-07-2006
+
+*** general:
+- userdel, usermod: fixed segfault on remove home directory when it can't
+ be removed; for example when it is /dev/null (fixed http://bugs.gentoo.org/139148),
+- improved SELinux detection on autoconf level (based on patch by
+ Dan Yefimov <dan@D00M.lightwave.net.ru>),
+- removed using private implementation getpass() libc function
+ (now getpass() is used also when S/KEY support is enabled),
+- move nologin do $(sbindir),
+- useradd: fixed mail spool file creation (bug cached by Frans Pop
+ <elendil@planet.nl>;
+ fixed http://bugs.debian.org/374705),
+- updated translations: cs, da, de, ko, nb, nl, pt, ro, ru, sk, sv, vi,
+- new translations: dz, km, ne.
+*** documentation:
+- ru man pages up to date,
+- lastlog(8): updated pl translation,
+- faillog(5): added missing information about fail_locktime element of
+ faillog struct (by Thorsten Kukuk <kukuk@suse.de>),
+- updated translations: eu, fr, pl.
+- reverted using docbook.sourceforge.net in XSL url.
+
+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 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
+ mailbox path (based on Owl fixes submited
+ by Solar Designer <solar@openwall.com>),
+- by default do not use libshadow_getpass() as getpass() replacemement.
+ Use libshadow_getpass() only when S/KEY support is enabled.
+ Current glibc getpass() handles correctly longer than 8 characters
+ 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: 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,
+-- install /etc/login.defs and /etc/default/useradd files,
+- fixed handle relative symlinks too in lib/commonio.c
+ (merge patch from Fedora),
+- properly notify nscd to flush its cache
+ (https://bugzilla.redhat.com/bugzilla/186803),
+- useradd, usermod: fixes for verify return values mkdir() and chown()
+ on copy files (merge 482_libmisc_copydir_check_return_values Debian
+ patch),
+- login, su (non-PAM variant): export MAIL only when MAIL_CHECK_ENAB
+ is enabled (Mike Frysinger <vapier@gentoo.org>),
+- pgck, grpck: warn when the members of a group differ in /etc/groups
+ and /etc/gshadow (fixed http://bugs.debian.org/75181),
+- su: fixed exit with a status 0 when the invoked command is terminated
+ by a signal which was not catched
+ (fixed by Eero Häkkinen <eero17@bigfoot.com>),
+- login: cancel login timeout after authentication so that patient people
+ timing out on network directory services can log in with local
+ accounts (http://bugs.debian.org/107148),
+- chgpasswd: fixes for build correctly with --disable-shadowgrp
+ (patch by Johannes Winkelmann <jw@tks6.net>).
+- updated translations: cs, da, es, eu, fi, fr, gl, hu, id, pt, ru, sk, sv, vi.
+- new translations: hu.
+*** documentation:
+- new cs man pages: groupmems(8), groupmod(8), grpck(8), gshadow(5)
+ (by Miroslav Kure <kurem@upcase.inf.upol.cz>),
+- regenerate roff man pages using docbook-style-xsl-1.70.1,
+- bunch of cleanups in chfn(1), faillog(8), gpasswd(1), groupadd(8),
+ groupmems(8), limits(5), login(1), login.defs(5), newgrp(1), passwd(1),
+ passwd(5) and su(1) (by Yuri Kozlov <kozlov.y@gmail.com>),
+- update pl vipw(8) man page,
+- added chgpasswd(8) ru man page,
+- 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 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
+ (by Christian Perrier <bubulle@debian.org>),
+- hu chsh(1), lugin(1), newgrp(1): fixed typos
+ (by Koblinger Egmont <egmont@uhulinux.hu>),
+- login.defs(5): remove information about CREATE_HOME (patch by
+ Mike Frysinger <vapier@gentoo.org>),
+- chgpasswd(8): new man page.
+
+shadow-4.0.14 -> shadow-4.0.15 13-03-2006
+
+*** general:
+- do not install translated man pages if shadow is configured with
+ --disable-nls
+ (based patch submited by Mike Frysinger <vapier@gentoo.org>),
+- added fixes for detect BSD's S/Key with updated the skeychallenge()
+ function for take a fourth argument in case BSD version (patch submited by
+ Mike Frysinger <vapier@gentoo.org>),
+- 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 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),
+- chage, chfn, chsh, passwd: fixed confusing error message if /proc is not
+ mounted (http://bugs.debian.org/352494 patch Nicolas François
+ <nicolas.francois@centraliens.net>),
+- login (merge 433_login_more_LOG_UNKFAIL_ENAB Debian patch):
+ - TOO MANY LOGIN... logged if PAM_MAXTRIES or failcount >= retries (was
+ onl test PAM_MAXTRIES),
+ - print to stderr (in addition to syslog) in case of maximum number of
+ tries exceeded,
+ - always prints the number of tries in the syslog entry.
+ - add special handling for PAM_ABORT
+ - 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_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,
+ #55873, 57532 Debian bugs),
+- 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: always remove group and gshadow databases lock, Fixed by Nicolas
+ François <nicolas.francois@centraliens.net>
+ (http://bugs.debian.org/348250)
+- auditing fixes:
+ - corrected prototypes in lib/prototypes.h (thre is no audit_help_log();
+ added audit_logger() prototype),
+ - useradd: fixed excess audit_logger() argument,
+- chage: added missing \n on display password status if password must be
+ changed,
+- useradd: fixed allow non-unique UID (http://bugs.debian.org/351281),
+- 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 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),
+- login: added translate login prompt string (suggested by Evgeniy
+ Dushistov),
+- updated translations: ca, cs, da, el, es, eu, gl, fi, fr, it, nb, nl, pt,
+ pt_BR, ro, ru, sk, sv, tl, vi, zh_CN,
+- new translations: gl.
+*** documentation:
+- ru man pages: added new nologin(8) and updated all other man pages (by
+ Yuri Kozlov <kozlov.y@gmail.com>),
+- chsh(1), su(1): update fi translations generated from XML files
+ (Tommi Vainikainen <thv+debian@iki.fi>),
+- expiry(1), faillog(5), faillog(8), gpasswd(1), groupadd(8), groupdel(8),
+ logoutd(8), nologin(8), vipw(8): added new cs man pages, (by Miroslav Kure
+ <kurem@upcase.inf.upol.cz>)
+- login.defs(5): default UMASK if not specified in login.defs is 022
+ (pointed by Peter Vrabec <pvrabec@redhat.com>),
+- useradd(8): better document that -d will not add the user's home directory
+ if it does not already exist (http://bugs.debian.org/154996),
+- nologin(8) man pages added (merge 478_nologin.8.xml Debian patch).
+
+shadow-4.0.13 -> shadow-4.0.14 03-01-2006
+
+*** general:
+- fixes in handling login.defs: $MAIL_FILE is used in userdel and usermod,
+ $MD5_CRYPT_ENAB is used by crypt_make_salt, which is used by chpasswd,
+ gpasswd and newusers.
+ Both variables moved to PAM not dependent (447_missing_login.defs_variables
+ Debian patch),
+- chage: fix chage display when the last change field is set to 0.
+ This is consistent with PAM (merge 427_chage_expiry_0 Debian patch),
+- su: if an password is expired, su should propose to change this password
+ (fixed http://bugs.debian.org/321384),
+- login: added auditing support (based on Fedora patch for login from util-linux),
+- useradd: merge PUG fixes from RedHat patch,
+- nologin: new program,
+- vipw: added a "quiet" mode (http://bugs.debian.org/190252),
+- newgrp: added auditing support (by Steve Grubb <sgrubb@redhat.com>),
+- switch over to a new logging function (by Steve Grubb <sgrubb@redhat.com>),
+- userdel: fix incorrect audit record in userdel
+ (https://bugzilla.redhat.com/bugzilla/174392),
+- userdel: remove the user's group unless it is not really a user-private group
+ for better PUG support (based on FC patch),
+- 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: 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.
+- added handle -s/--shell, -m/-p/preserve-environment options like GNU su
+ (based on patches from Debian submited by
+ 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: 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.
+*** documentation:
+- added es, ko vigr(8) and vipw(8), hu lastlog(8), ko vipw(8), zh_CN su(1),
+ zh_TW chpasswd(8) and su(1),
+- added tr man pages: chage(1), chfn(1), groupadd(8), groupdel(8), groupmod(8),
+ login(1), passwd(1), passwd(5), shadow(5), su(1) useradd(8), userdel(8),
+ usermod(8),
+- passwd5): added es, hu, pt_BR, zh_CN zh_TW translations,
+- added full set (up to date) fr man pages
+ (by Nicolas François <nicolas.francois@centraliens.net>),
+- pwck(1): document -q option,
+- WARNING: all translated man pages are now in UFT-8,
+- added full set of ru man pages (by Yuri Kozlov <kozlov.y@gmail.com>),
+- login(1): better explain the respective roles of login, init and getty with regards
+ to the utmp file (merge 440_manpages-login.1 Debian patch),
+- login(1): document how to initiate a trusted path on linux
+ (http://bugs.debian.org/305600),
+- userdel(8): document the -f option; document the group removal behavior (merge
+ 455_userdel.8.xml Debian patch),
+- groupadd(8), useradd(8): document that useradd/groupadd refuse adding entries already in an
+ external database (http://bugs.debian.org/282184),
+- updated it groupdel(8), passwd(1), pwconv(8), useradd(8), userdel(8), usermod(8) man pages
+ (merge 205_it-manpages Debian patch),
+- added fi chfn(1), chsh(1), passwd(1), su(1),
+- newusers(8): added it translation,
+- newgrp(1): added de, es, zh_CN, zh_TW translations.
+
+shadow-4.0.12 -> shadow-4.0.13 10-10-2005
+
+*** general:
+- chage: removed duplicated pam_start(),
+- 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),
+- login: use "%c" in strftime() output (based on patch from
+ http://bugs.debian.org/89902 by Christian Perrier <bubulle@debian.org>),
+- 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) 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,
+ useradd, userdel, usermod.
+- chage, chfn, chsh, passwd: change to use new selinux API for
+ selinux_check_passwd_access() (patch from Fedora by Dan Walsh <dwalsh@redhat.com>),
+- use #ident preprocesor directive istead RCID macro with content similar
+ to example described in ident(1) man page (modern compilers like latest GCC
+ removes not used functions by global optimization).
+ So "ident /usr/bin/passwd" will show again some useable informations
+- su: fixed twice copy enviroment which causes auth problems
+ (bug was introduced in 4.0.12; fix by Nicolas François <nicolas.francois@centraliens.net>),
+- chage: differentiate the different failure causes by the exit value
+ 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 (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: 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
+ Fixed Debian http://bugs.debian.org/314727
+- updated translations: da, es, fr, pt, ro, ru.
+*** documentation:
+- 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): 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 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
+ places on user and group names (fix by Mike Frysinger <vapier@gentoo.org>).
+- chage(1), groupadd(8): document -h,--help option.
+
+shadow-4.0.11.1 -> shadow-4.0.12 22-08-2005
+
+*** general:
+- newgrp, login: remove using login.defs::CLOSE_SESSIONS variable and always
+ close PAM session,
+- 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)
+ Patch by Nicolas François <nicolas.francois@centraliens.net>
+ Fix for http://bugs.debian.org/52069
+- gpasswd, grpck, grpconv, grpuconv: added flushing group nscd cache,
+- pwck, pwconv: added flushing passwd nscd cache,
+- usermod: fixed handle -p option (patch by Peter Vrabec <pvrabec@redhat.com>),
+- chage: use -1 as value for disable password inactivity, expiration date and
+ checking an password validation.
+ Based on patch by Peter Vrabec <pvrabec@redhat.com> which fixes:
+ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=109499
+ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=137498
+ and on 427_chage_expiry_0 Debian patch (fix for http://bugs.debian.org/78961)
+- useradd: do not copy files from skel directory if home directory exist and write
+ warning message about not copying skel files
+ Patch by Peter Vrabec <pvrabec@redhat.com> which fixes:
+ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=143150
+ https://bugzilla.redhat.com/beta/show_bug.cgi?id=158574
+ https://bugzilla.redhat.com/beta/show_bug.cgi?id=80242
+- su: ignore SIGINT while authenticating. A ^C could defeat the waiting
+ 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 (necessary if shadow
+ compiled with disabled NLS support)
+- 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
+ (outdated),
+- newusers: added flushing passwd and group nscd caches,
+- passwd, pwunconv, userdel, vipw: remove flushing shadow nscd cache (nscd do not caches
+ shadow map),
+- pwck: now pwck OPENLOG with correct name ("pwck" instead "pwsk")
+ (fix by Alexander Gattin <arg@online.com.ua>),
+- pwck, grpck: replace all puts() with printf() - it fixes problems with extra blank
+ lines printed in some messages
+ (fix by Alexander Gattin <arg@online.com.ua>),
+- passwd: use separated message "Password set to expire." instead "Password changed."
+ on "passwd -e" (fix by Christian Perrier <bubulle@debian.org),
+- updated translations: cs, de, fi, fr, nl, pl, pt, ru, sk.
+*** documentation:
+- regenerate all roff man pages using DocBook XSLT Stylesheets 1.69.1,
+- usermod(8): give the correct range for system users (0-999 instead of 0-99),
+ (http://bugs.debian.org/286258)
+- chage(8): better description -1 value passwd in -E, -I and -M options,
+- regenerate all roff man pages using DocBook XSLT Stylesheets 1.69.0.
+
+shadow-4.0.11 -> shadow-4.0.11.1 21-07-2005
+
+*** general:
+- fixed configure.in: now is possible build shadow with enabled/disabled shadow group
+ support (thanks for report symptoms of the bug to Greg Schafer <gschafer@zip.com.au>),
+- updated translations: sv.
+
+shadow-4.0.10 -> shadow-4.0.11 18-07-2005
+
+*** general:
+- 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: 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.
+ (fix by Christian Mudra <C.Mudra@science-computing.de>)
+- fix nscd_flush_cache(): for some reason doing the INVALIDATE call with two
+ write()'s fails. Do one writev() call instead.
+ http://bugs.gentoo.org/show_bug.cgi?id=80413
+ (submited by Martin Schlemmer <azarah@gentoo.org>)
+- merge nscd-socket-path patch from Fedora: newer glibc's have a different nscd socket
+ location (/var/run/nscd/socket instead /var/run/.nscd_socket),
+- S/Key support is back,
+- usermod: added -a option. This flag can only be used in conjunction with the -G
+ option. It cause usermod to append user to the current supplementary group list.
+ (patch by Peter Vrabec <pvrabec@redhat.com>)
+- chage: added missing \n in error messages,
+- useradd, groupadd: change -O option to -K and document it in man page,
+- su, sulogin, login: fixed erroneous warning messages when used with PAM about some
+ login.defs variables (fix by DJ Lucas <dj@linuxfromscratch.org>),
+- autoconf:
+-- stop with error message if crypt() not found,
+-- remove --with{,out}-libcrypt switch,
+-- move all autoheader templates from acconfig.h to configure.in,
+- login: setup limits and umask (using login.defs ULIMITS and UMASK variables) only when
+ PAM support is disabled (it is task for pam_limits and pam_umask modules),
+- sulogin, login: use SYSLOG macro instead syslog() which saves the locale, sets the
+ locale to C, sends the message and restores the locale
+ (fix by Nicolas François <nicolas.francois@centraliens.net>).
+- 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): 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
+ to the utmp file (based on 441_manpages-shadow.5 Debian patch),
+- shadowconfig(8): removed (will be maintained in Debian shadow pkg repository),
+- groupadd(8): document -o option,
+- in SEE ALLSO section in groupadd(8), groupdel(8), groupmod(8), userdel(8), usermod(8)
+ added refer to gpasswd(8) (suggested by Mike Frysinger <vapier@gentoo.org>).
+
+shadow-4.0.9 -> shadow-4.0.10 28-06-2005
+
+*** general:
+- mkpasswd: removed,
+- 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 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
+ because '-' can appear in usernames
+ 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 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
+- login: made login's -f option also able to use the username after -- if none
+ was passed as it's optarg
+ http://bugs.debian.org/53702
+- login: check for hushed login and pass PAM_SILENT if true,
+ 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 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 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.
+
+shadow-4.0.8 -> shadow-4.0.9 23-05-2005
+
+*** general:
+- 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),
+- updated translations: ro, ru,
+- added new translations: vi,
+- lib/getdef.c: leaves the table as it is, and changes from the binary search to
+ a sequential one (Lucas Correia Villa Real <lucasvr@gobolinux.org>),
+- lastlog: fixed --help message (s,--login,--user,) http://bugs.debian.org/249611.
+
+shadow-4.0.7 -> shadow-4.0.8 26-04-2005
+
+*** general:
+- remove not working OPIE and SKEY support,
+- chage, useradd, usermod: reduce multiple OPENLOG() calls,
+- passwd: fix #61313 Debian bug: "passwd -S root" (as a normal user) should not
+ display "You may not change the password for root.",
+- vipw: fixed race condition (Debian #242407 bug; fix by Alexander Gattin
+ <arg@online.com.ua>),
+- 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 attributes,
+- removed NDBM code (unused),
+- 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: 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>),
+- remove handle login.defs::NOLOGIN_STR (never used),
+- useradd: fixes a potential security problem when mailbox is created in
+ useradd.
+ Patch and comment by Koblinger Egmont <egmont@uhulinux.hu>:
+ Only two arguments are passed to the open() call though it expects three
+ because O_CREAT is present. Hence the permission of the file first becomes
+ some random garbage found on the stack, and an attacker can perhaps open
+ this file and hold it open for reading or writing before the proper
+ 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/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),
+- updated translations: cs, da, es, eu, fi, fr, it, ko, nl, pl, pt, sk, uk,
+- added new translations: tl,
+- reindent all source code using -l80,
+*** documentation:
+- it man pages (by Danilo Piazzalunga <danilopiazza@libero.it>):
+-- updated: chfn.1, chsh.1, groups.1, grpck.8, grpconv.8,
+ grpunconv.8, id.1, lastlog.8, login.1, newgrp.1, pwunconv.8, shadow.5,
+ vigr.8, vipw.8,
+-- new: chage.1, chpasswd.8, expiry.1, faillog.5, faillog.8, getspnam.3,
+ logoutd.8, porttime.5, pwck.8, shadow.3, shadowconfig.8, su.1,
+- passwd(1): fix #160477 Debian bug: improve -S output description,
+- 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 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,
+
+shadow-4.0.6 -> shadow-4.0.7 26-01-2005
+
+- updated translations: da, es, fi, it, nl, pl, pt,
+- added zh_TW translation (from Debian resources),
+- remove unused now files in lib/ directory,
+- switch faillog to use getopt_long(),
+- added de vigr(8), vipw(8) man pages (from Debian resources),
+- added ro, sq translations (from Debian resources),
+- fixed large file support in lastlog and faillog:
+-- added AC_SYS_LARGEFILE macro to autoconf,
+-- use fseeko() instead fseek() and remove casting file offsets to unsigned
+ long.
+- 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>),
+-- 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 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
+ "useradd -D".
+
+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
+ 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 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,
+- useradd: added handle /etc/defaults/useradd::CREATE_MAIL_SPOOL={yes|no}.
+ Now on adding user account can be also created empty user mail spool.
+ Curent code handle only mailbox.
+ TODO: add handle create user mail spool in maildir format.
+- useradd: when placing symlinks into /etc/skel copy_tree of
+ libmisc/copydir.c will properly create the symlink in the destination
+ directory but not change the ownership to the target user/group. This
+ 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 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
+ Torkelsson <Bjorn.Torkelsson@hpc2n.umu.se>: add support for PAM account
+ management to restrict access using pam_access when login is invoked with -f.
+- applied Owl patches by Solar Designer <solar@openwall.com>:
+ shadow-4.0.4.1-owl-pam-auth.diff:
+ Moved the PAM authentication in user management commands after
+ command-line parsing, made it use separate service names for each command.
+ 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 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 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>.
+- added it translation (by Danilo Piazzalunga <danilopiazza@libero.it>),
+- added sk translation (by Peter Mann <Peter.Mann@tuke.sk>, submited by Christian
+ Perrier <bubulle@kheops.frmug.org>),
+- added es translation (by Ruben Porras <nahoo82@telefonica.net>),
+- updated ko translation (by Changwoo Ryu <cwryu@debian.org>),
+- added fi translation (by Tommi Vainikainen <thv@iki.fi>),
+- new translations: bs, ca, da, eu, he, id, nb, nl, nn, pt, pt_BR, tr,
+ zh_CN (stolen from Debian),
+- remove adduser(8) roff include man page to useradd(8).
+
+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 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 message
+ (document this also in man page),
+- removed TCFS support (tcfs is dead),
+- convert all po/*.po files to utf-8,
+- one TODO entry gone: fix nscd flushing databases on change (use
+ 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 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,
+- login: remove handle login.defs::NO_PASSWORD_CONSOLE code,
+- 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 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
+ 8.1 and reproduced it using slackware-current (9.0beta) (fix submited by
+ Simon Williams <simon@no-dns-yet.org.uk>),
+- fix in too_many_failures() function: incorrect if() condition in non-PAM
+ dependent code in fail login handling (fixed by Krzysztof
+ Oledzki <ole@ans.pl>),
+*** documentation:
+- install groups(1) man page (moved from EXTRA_DIST to man_MANS),
+- removed pwauth(8), d_passwd(5), dialups(5) man pages,
+- remove text about password aging from passwd(5) (based on Debian changes),
+- document useradd and groupadd -M option in en and pl man pages
+ (by Jakub Mikusek <mick3y@o.k.pl>).
+- added ru passwd(1) man page from KSI resources,
+- added es man pages found in Conectiva distribution resources,
+- added chch(1), chfn(1) man pages from chinese man pages translation
+ project,
+- added id(1) man page czech man pages translation project,
+- updated ja man pages and added expiry(1),
+- removed old doc/ANNOUNCE,
+- updated german passwd(1), chsh(1) and login(1) man page and added chfn(1)
+ (by Josef Spillner <josef@ggzgamingzone.org>),
+- many other cleanups and unifications in man pages.
+
+shadow-4.0.2 => shadow-4.0.3 13-03-2002
+
+- 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
+ changes for syncing this are welcome and for anyone who will want maintain
+ this documents directly I can give cvs write access to project resources.
+- added new de translation (by Frank Schmid <frank@cs-schmid.de>).
+- fixed building --with-shared: swapped utent (in src/login.c and
+ libmisc/utmp.c) and pwent (in libmisc/suauth.c and src/su.c)
+ definition/extern (by Dimitar Zhekov <jimmy@is-vn.bg>).
+- minor changes and updates in man pages (also merged
+ shadow-4.0.0-owl-man.patch by Solar Designer <solar@openwall.com>).
+
+shadow-4.0.1 => shadow-4.0.2 17-02-2002
+
+- resolve many fuzzy translations also all this which may cause problems on
+ 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.
+
+shadow-4.0.0 => shadow-4.0.1
+
+- added ability to log session closes in newgrp
+ (Joseph Parmelee <jparmele@wildbear.com>),
+- add -pcs to .indent.pro file and reindent all code in src/,
+- remove "\n" from all SYSLOG() messages,
+- finish integrate AGING code into SHADOWPW,
+- remove handle old HAVE_USERSEC_H code,
+- updated ja and added hu man pages,
+- applied patches by Solar Designer <solar@openwall.com>:
+ shadow-4.0.0-owl-chage-drop-priv.diffd
+ shadow-4.0.0-owl-chage-ro-no-lock.diff:
+ Added locks which are needed when doing r/w accesses, not when running
+ 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 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
+ is login string isn't longer than possible it will be good prepare using
+ 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 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>),
+- implemented functions for better reloading the nscd cache (per NSS map)
+ (Thorsten Kukuk <kukuk@suse.de>),
+- fixed warnings "not used but defined" on compile using gcc 3.0.x
+ (bulletpr00ph <bullet@users.sourceforge.net>),
+- added ja, ko translations found in SuSE,
+- added symlinks: newgrp -> sg, vipw -> vigr,
+- added vigr(1) man page as roff .so link to vipw(1),
+- added sg(1) man page as roff .so link to newgrp(1),
+- installed fix for SEGV when using pwck -s on /etc/passwd file with
+ empty lines in it.
+
+shadow-20001016 => shadow-4.0.0 06-01-2002
+
+- fix bug discovered and fixed by Marcel Ritter
+ <Marcel.Ritter@rrze.uni-erlangen.de>
+ Due to a big buffer size in lib/commonio.c this error does only appear
+ if a line gets longer than 4096 bytes (there are probably very few people
+ stumbling across this).
+ Ths bug can be exposed by trashing /etc/groups file using useradd with script:
+ #!/bin/sh
+ typeset -i NUM
+ NUM=0
+ groupadd demogroup
+ while [ $NUM -le 1000 ]; do
+ useradd -g demogroup -G demogroup -p "NONE" user$NUM
+ NUM=$NUM+1
+ done
+- remove limit 32 to groups per user by (the same user can belong to
+ more than 32 groups) by use sysconf(_SC_NGROUPS_MAX) instead constant
+ NGROUPS_MAX (patch by Radu Constantin Rendec <radu.rendec@ines.ro>)
+ NOTE: it probably need testing on other system for add
+ some condition for using sysconf(_SC_NGROUPS_MAX) or NGROUPS_MAX constant,
+- added -s option to {pw,grp}ck to sort checked files by UID/GID,
+- drop detecting is pam_strerror() need one or two arguments. Instead using
+ PAM_STRERROR() macro use directly pam_strerror() function with two
+ arguments. pam_strerror() with one argument is obsoleted,
+- adde ja man pages (probably some man pages need update),
+- 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),
+- 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:
+- 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 address.
+
+shadow-20000902 => shadow-20001012
+
+- removed /redhat directory with obsoleted files (partially rewritten spec
+ file is now in root directory),
+- 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 modifications mainly based on
+ modifications prepared by Janek Rękojarski <baggins@pld.org.pl>,
+- many small fixes and improvements in automake (mow "make dist"
+ works correctly),
+- added cs translation (Jiri Pavlovsky <Jiri.Pavlovsky@ff.cuni.cz>).
+
+shadow-20000826 => shadow-20000902
+
+This is probably the last release from me.
+Tomasz Kloczko <kloczek@rudy.mif.pg.gda.pl> is the new maintainer.
+Good luck!
+
+(I'm still interested to know what is going on with this package,
+which is fairly important to many Linux distributions, so please
+Cc: marekm@linux.org.pl in any related discussions - just don't
+expect me to respond quickly...)
+
+Previous warning still applies - be careful!
+
+- applied some of the Red Hat patches (revised slightly), thanks to
+ Bernhard Rosenkraenzer <bero@redhat.de>: fix for truncated long
+ lines (>8K) in /etc/group, send SIGHUP to nscd (caching daemon
+ in glibc 2.1.x) after changing anything, add usermod -L and -U
+ options, remove LOG_CONS from openlog(), chage -d and -E handles
+ dates in yyyy-mm-dd format ('/' is not required)
+- various cleanups
+
+shadow-19990827 => shadow-20000826
+
+WARNING: this release is not tested (other than that it compiles for me),
+please be careful. Previous release was a year ago, so it is really time
+to release something and start looking for a new, better maintainer...
+(I've been extremely busy recently. Credit for most of the real work,
+such as complete PAM support, should go to Ben Collins <bcollins@debian.org>
+who maintains this package for Debian.)
+
+- merged most of the changes from Debian (not all of them yet, PAM support
+ should be complete but is not tested - need to upgrade to potato first)
+- added Polish translations of manual pages from PLD
+- change sulog() to not depend on global variables oldname, name
+- try to not follow symbolic links when deleting files recursively
+ in userdel (still not perfect, safest to do it in single user mode)
+- removed workarounds for ancient (pre-ANSI) C compilers - use gcc!
+ (a few ANSI C constructs were used already, and no one complained)
+- updated author's e-mail address (jfh@bga.com -> jfh@austin.ibm.com)
+
+shadow-19990709 => shadow-19990827
+
+- upgrade to autoconf-2.13, automake-1.4, libtool-1.3.3
+- i18n: added French translation by Vincent Renardias <vincent@ldsol.com>
+- i18n: added Swedish translation by Kristoffer Brånemyr <ztion@swipnet.se>
+- logoutd no longer reads /etc/logoutd.mesg at startup - instead, read
+ it when sending to luser's tty (no need to reload with SIGHUP)
+- added support for "usergroups" feature often found in Linux distributions
+ (if USERGROUPS_ENAB in login.defs set to "yes", uid != 0, uid == gid, and
+ username == groupname, then set umask to 002 instead of 022)
+- Debian: pwck and grpck are now run from a daily cron job (root will
+ receive an e-mail if something is wrong), and at system startup
+- added support for setting umask in /etc/limits
+- when using OPIE, re-prompt with echo on after empty password was entered
+- GETPASS_ASTERISKS now run time configurable (login.defs)
+- getpass() now uses stdin and stderr (not stdout) if it can't open /dev/tty
+- getpass() allows all input to be erased using Control-U, and beeps when
+ too many characters are entered
+- removed obsolete sgtty support, in 1999 everyone should have termios :)
+- Debian: tar wrapper no longer needed to build packages as non-root user
+ (install libtricks, and use "dpkg-buildpackage -rfakeroot" instead)
+- Debian: changes for GNU Hurd by Marcus Brinkmann <brinkmd@debian.org>:
+ dpkg-architecture, cross compilation, only build passwd, add
+ etc/login.defs.hurd conffile, conditionalize CBAUD
+- newgrp sets $HOME before running the new shell
+- both "sg group command" (usage message) and "sg group -c command"
+ (man page) work, updated both the usage message and the man page :)
+- i18n: added missing _() for some translatable strings
+
+shadow-19990607 => shadow-19990709
+
+- added PAM support to chfn and chsh (thanks to Thorsten Kukuk)
+- fixed a bug in newgrp if the user is in >= 17 groups
+- added @LIBSKEY@ to LDADD for all programs (for some reason,
+ almost all programs need it if skey/opie support is enabled)
+- changed grpconv/grpunconv to compile with --disable-shadowgrp
+- changed faillog to do something (assume -p) with no options specified
+- updated version of the udbachk passwd/shadow/group file integrity
+ checker (contrib/udbachk.v012.tgz)
+
+shadow-19990307 => shadow-19990607
+
+- upgraded to libtool-1.2, latest config.{guess,sub}
+- added missing #include "defines.h" in libmisc/login_desrpc.c - thanks
+ to almost everyone for reporting it :-)
+- moved PAM-related defines to pam_defs.h
+- added some braces to if/else to avoid egcs warnings
+- started adding PAM support to login (based on util-linux, not finished yet)
+- changed "!" to "x" for pw_passwd in src/newusers.c
+- a few more Y2K fixes
+- added contrib/udbachk.tgz (passwd/shadow/group file integrity checker),
+ thanks to Sami Kerola
+- Debian: made /etc/{limits,login.access,login.defs,porttime,securetty}
+ files all mode 0600 (Bug#38729 - login: /etc/limits is world readable)
+- updated mailing list information (moved again, now hosted by SuSE),
+ updated README.mirrors, other minor documentation updates
+- made getpass work with redirected stdin
+- new readpass echoing asterisks disabled by default by popular demand
+ (can be enabled at compile time: ./configure --enable-readpass)
+- the random number of asterisks in readpass is now more random
+ (random number generator initialization was missing)
+- commented out --enable-md5crypt (obsolete) in configure.in
+- when checking for libskey, link with -lcrypt if libcrypt is available
+ (otherwise the configure test for libskey fails - libskey needs libcrypt)
+- added Package/Version ident strings (so you can use the RCS "ident"
+ command to check any binary, which version of shadow it comes from)
+
+shadow-981228 => shadow-19990307
+
+- added support for setting process priority in /etc/limits
+- i18n: updated Greek translation
+- i18n: added Polish translation by Arkadiusz Miskiewicz
+- documented the -p option in useradd.8 and usermod.8 man pages
+- some "const" gcc warning fixes
+- attempt to fix lib/snprintf.c compilation problems
+- added restart/reload/force-reload to /etc/init.d/logoutd (found by lintian)
+- always require password for root logins (even with NO_PASSWORD_CONSOLE)
+- workaround for RedHat's CREATE_HOME feature in /etc/login.defs
+- changed to Y2K compatible version numbering
+- more Y2K fixes, use the ISO 8601 date format (yyyy-mm-dd) for default
+ values of user-entered dates (you can still enter dates in any format
+ supported by GNU date)
+- oops, added doc/README.nls to list of files to distribute
+- added missing sanitize_env() call to src/login.c
+- debian/rules installs /bin/login non-setuid by default, just in case...
+- build Debian packages with cracklib support (depends on cracklib-runtime)
+
+shadow-980724 => shadow-981228
+
+- login now clears the username in argv[] (in case someone types the
+ password instead of username, by mistake)
+- i18n support, Greek translation (Nikos Mavroyanopoulos), see README.nls
+- updated author's e-mail address (jfh@tab.com -> jfh@bga.com)
+- new getpass() replacement that displays *'s (Pavel Machek)
+- no password required when logging in from ttys listed under
+ NO_PASSWORD_CONSOLE in login.defs (Pavel Machek)
+- fixed limits code so RLIMIT_AS should work
+- upgraded to Debian 2.0
+- built a new machine (P2 350MHz, 64MB RAM) so the thing can be compiled
+ in reasonable time again
+- upgraded to automake-1.3, libtool-1.0h (also new config.guess and
+ config.sub that work on i686)
+- usermod fixed to handle group names starting with digits (not recommended)
+
+shadow-980626 => shadow-980724
+
+- security: login no longer gives you a root shell if setgid()
+ or initgroups() or setuid() fails for any reason, discovered
+ by Ted Hickman <thickman@sy.net>
+- remove libshadow.so -> libshadow.so.x.x symlink after install
+- a few int -> uid_t type cleanups
+- fail immediately (don't retry) in *_lock() if euid != 0
+- added sample PAM config files etc/pam.d/{passwd,su}
+- preliminary PAM support in su (untested - use at your own risk,
+ comments and patches welcome!)
+- cleanup and more comments in OPIE code (Algis Rudys)
+- added support for TCFS (Transparent Cryptographic File System)
+ (use ./configure --with-libtcfs, see http://tcfs.dia.unisa.it/
+ for more info), thanks to Aniello Del Sorbo
+
+shadow-980529 => shadow-980626
+
+- fixed bug in commonio_lock() (infinite recursion if lckpwdf() not
+ used and database cannot be locked), thanks to Jonathan Hankins
+- fixed bug in copy_tree() (NUL-terminate readlink() results),
+ thanks to Lutz Schwalowsky
+- no need to press Enter after Ctrl-C to interrupt password prompt
+- removed a few harmless gcc warnings
+- secure RPC login disabled if <rpc/key_prot.h> not found (glibc 2.0)
+- faillog.8: changed /usr/adm -> /var/log
+- pwconv.8: documented that it may fail on invalid password files
+
+shadow-980417 => shadow-980529
+
+- fixed "interesting" strzero() bug introduced by me in 980417:
+ strzero(cp) didn't work as intended (the macro used a local
+ variable called "cp" - oops...); Leonard N. Zubkoff was the
+ first person to report it - thanks!
+- fixed usermod -e to accept empty argument (like useradd),
+ thanks to Martin Bene
+- several changes from Debian 980403-0.2, see debian/changelog
+- added contrib/shadow-anonftp.patch (not yet merged, sorry...)
+ thanks to Calle Karlsson
+
+shadow-980403 => shadow-980417
+
+- fixed login session limits (again - broken since 980130)
+- more symbolic constants for exit status values
+- fixed logoutd to work with 8-character usernames in utmp
+ (no room for terminating NUL!)
+- various fixes to make the code more glibc2-friendly
+- updated doc/cracklib26.diff (fix for empty gecos, etc.)
+- updated the files in redhat/ from shadow-utils-970616-11.src.rpm
+ (RH 5.0 updates)
+
+shadow-980130 => shadow-980403
+
+- security: su now creates the sulog file (if enabled and doesn't
+ already exist) with umask 077
+- hopefully removed arbitrary group size limits (not yet for
+ shadow groups though - sgetsgent() still needs a rewrite,
+ but I don't want to delay this release any longer...)
+- fixed NULL dereference in groupmod -n
+
+shadow-971215 => shadow-980130
+
+- Debian binary packages can be built without root privileges
+ (tar wrapper - debian/tar.c)
+- new subdir "redhat" (needs more work, see redhat/README)
+- in several places, exit(127) if exec fails with ENOENT, and
+ exit(126) on other errors (as in ksh and bash)
+- renamed getpass() and md5_crypt() to libshadow_* to avoid name
+ conflicts with libc functions - md5_crypt() is also in libcrypt.a
+ on Linux/PPC, thanks to Anton Gluck <gluc@midway.uchicago.edu>
+- handle crypt() returning NULL (possible according to Single Unix
+ Spec) more gracefully (exit instead of SIGSEGV)
+- fixed bug in putgrent() that showed up when realloc() moved the
+ buffer while expanding it, thanks to Floody <flood@evcom.net>
+- fixed bug in login session limits (with a limit set to N logins,
+ only N-1 logins were allowed), thanks to Floody <flood@evcom.net>
+- upgraded to libtool-1.0h (now recognizes GNU ld on Debian 1.3.1)
+- newer config.guess and config.sub (should work on x86 for x > 5)
+- removed doc/automake-1.0.diff (obsoleted by automake-1.2)
+- added doc/cracklib26.diff (some patches for cracklib-2.6)
+- documented more (not all yet) login.defs(5) settings
+- replaced more exit status numeric values with #defines
+- shadow-utils.spec now generated from shadow-utils.spec.in
+ (so I don't have to edit version numbers for every new release)
+- groupadd -f option, based on RedHat's shadow-utils-970616-9 patch
+ ("force" - exit(0) if the group already exists); other RedHat-
+ specific options not added yet (best done in a perl script that
+ runs useradd/usermod/groupadd - see Debian's adduser-3.x)
+- added -O option (override login.defs values) to useradd and groupadd
+- if usermod can't update the group file(s), exit(10) but update the
+ password file(s) anyway (as documented by Solaris man page)
+- useradd should no longer set sp_expire to the current date (oops)
+- configure.in: added --enable-desrpc, check for gethostbyname in libc
+ before trying libnsl (necessary for Solaris; not for Linux or Irix,
+ even though libnsl may be present), fixed pw_age/pw_comment/pw_quota
+ detection, setpgrp vs. setpgid, other minor tweaks
+- various */Makefile.am tweaks
+- login.defs: added FAKE_SHELL - program to run instead of the login
+ shell, with the real shell in argv[0] (Frank Denis)
+- login.defs: ignore case in yes/no settings
+- more E_* defines instead of hardcoded numbers for exit()
+- added sanitize_env() for setuid programs
+- login_desrpc() checks for getnetname() errors
+- new password is not "too similar" if it is long enough
+- replacement strstr() was static, no one noticed :-)
+- {pw,spw}_lock() and {pw,spw}_unlock() track the lock count and call
+ lckpwdf() and ulckpwdf() as needed, *_lock_first() hack removed
+- login sets $REMOTEHOST for remote logins
+- added newgrp -l option (Single Unix Spec, same as "-")
+- EXPERIMENTAL shared lib support using libtool (libshadow.so saves about
+ 200K of disk space on Linux/x86), enabled by default if supported by
+ the system, use ./configure --disable-shared if it causes any problems.
+ Warning: libshadow.so is intended for internal use by this package
+ only - binary compatibility with future releases is not guaranteed.
+ There should be no need to link any other programs with libshadow.so -
+ the libshadow.so -> libshadow.so.x.x symlink is unnecessary.
+- pam_strerror() takes one or two arguments, depending on the Linux-PAM
+ version (!) - added check to configure; fixed do_pam_passwd prototype
+- libmisc/login_access.c should compile on Linux/PPC and Solaris
+- added information about the new ftp site to doc/README.mirrors
+
+shadow-971001 => shadow-971215
+
+- added workaround for NYS libc 5.3.12 (RedHat 4.2) bug to grpck
+- updated the RPM .spec file
+- renamed rlogin() to do_rlogin() to avoid Linux/PPC build problem
+ (glibc defines something else named "rlogin" in utmpbits.h ?)
+- added MD5 checksums in Debian packages
+- added -p and -g options to vipw (edit the password or group file
+ respectively, regardless of the command name in argv[0])
+- removed old DBM support (NDBM code is still there)
+- fixed a bug in gpasswd: current username was incorrectly identified as
+ "root" because of setuid(0) done too early. It may be a security hole
+ when using shadow groups - if "root" is listed as a group administrator,
+ any user can add/remove members in that group. Thanks to Jesse Thilo.
+- gpasswd now logs which user (root or group admin) made the changes
+- passwd now uses $PATH to search for the chfn, chsh, gpasswd commands
+- newgrp and add_groups() allocate supplementary group lists dynamically
+- moved check_shell() from src/chsh.c to libmisc/chkshell.c
+- CHFN_RESTRICT in login.defs can now specify exactly which fields may be
+ changed by regular users (any combination of letters "frwh")
+- fixed contrib/pwdauth.c segfault with non-existent usernames
+- minor change in lib/getdef.c to handle quotes better (Juergen Heinzl)
+- new date parsing code (from GNU date) used by useradd, usermod, chage
+- upgraded to automake-1.2, added libtool-0.7 (no libshadow.so yet)
+- converted code to ANSI C, added ansi2knr (untested - use gcc!)
+- fixed useradd -G segfault (one '*' that shouldn't be there)
+- allow 8-bit characters in chfn
+- added support for RLIMIT_AS (max address space) in libmisc/limits.c
+- changed the handling of NIS plus entries in password files
+- some more tweaking in various debian/* files
+- logoutd uses getutent() instead of reading utmp file directly
+- fixed lckpwdf() called twice (and failing) when changing password
+ if the user is not listed in /etc/shadow (Mike Pakovic)
+- erase and kill characters left unchanged if not defined in login.defs
+
+shadow-970616 => shadow-971001
+
+- Debian: mkpasswd no longer installed (dbm files not supported)
+- chpasswd checks for shadow/non-shadow at run time, too
+- added chpasswd -e (input file with encrypted passwords) - Jay Soffian
+- changed libmisc/login_access.c as suggested by Dave Hagewood
+- replaced sprintf() with snprintf() in several places
+- added lib/snprintf.[ch] (from XFree86) for systems without snprintf()
+- minor tweaks in contrib/adduser.c (/usr/local -> /usr)
+- non-root users can only run su with a terminal on stdin
+- temporarily disabled DES_RPC because getsecretkey() causes login to hang
+ for 5 minutes on at least one RH 4.0 system. Not sure if this is a bug
+ in libc, or system misconfiguration. Needs further investigation.
+- check for strerror() and -lrpcsvc (should compile on SunOS again)
+- fixed free() called twice in libmisc/mail.c
+- added information about mirror sites (doc/README.mirrors)
+- updated pwconv.8 and pwunconv.8 man pages
+- "make install" now installs pwconv, pwunconv, grpconv, grpunconv
+- pwauth.8 no longer installed (AUTH_METHODS not supported by default)
+- corrected su.1 man page ($SHELL not used)
+- no need for --with-md5crypt if the MD5-based crypt() is already in libc
+ (or another library specified in /etc/ld.so.preload - Linux ld.so 1.8.0+)
+- cleaned up PASS_MAX in getpass() (127 always assumed)
+- default editor for vipw changed from /bin/ae to a real editor :)
+
+shadow-970601 => shadow-970616
+
+- fixed execlp call (missing NULL) in src/vipw.c
+- vipw now preserves permissions on edited files
+- commented out the xdm-shadow hack in shadowconfig
+- improved RedHat spec file (Timo Karjalainen)
+- updated mailing list information
+- added information about the shadow paper (doc/README.shadow-paper)
+- renamed doc/console.c.spec (confused RPM)
+
+shadow-970502-2 => shadow-970601
+
+- fixed a typo in libmisc/mail.c causing login to segfault
+ if MAIL_CHECK_ENAB=yes (sorry!)
+- patches for OPIE support (Algis Rudys) (untested)
+- programs that modify /etc/passwd or /etc/shadow will use
+ lckpwdf() if available
+- now compiles with PAM support! (still untested)
+- cosmetic error message changes (prefixed by argv[0]:)
+
+shadow-970216 => shadow-970502-2
+
+- shadow group support fixes (grpconv didn't work - for some
+ reason, putsgent() returns 1 instead of 0 on success;
+ now -1 = failure, anything else = success)
+- upgraded to autoconf-2.12
+- pwconv and pwunconv now follow other UN*X systems and SVID3
+ (modify files in place), original versions moved to "old"
+- scologin.c moved to "old" (it was only for SCO Xenix) so
+ people stop sending patches for scologin.c gcc warnings :)
+- don't use the MD5* functions in libmisc/salt.c (glibc has
+ the new md5 crypt(), but no <md5.h> and MD5* functions!)
+- support for MkLinux, Solaris, JIS, Qmail (Frank Denis)
+- "passwd -S -a" now really works
+- support for Debian, vipw, a few fixes (Guy Maor)
+- src/login.c radius bug fix (Rafal Maszkowski)
+- ISSUE_FILE_ENAB -> ISSUE_FILE in the sample /etc/login.defs
+- fixes for glibc and DES_RPC (Thorsten Kukuk)
+- limits.5 man page (Luca Berra)
+- expiry will work setgid shadow too, removed euid 0 check
+- added check for a64l() to configure (glibc)
+
+shadow-961025 => shadow-970216
+
+- major rewrite of *io.c (no more 4 copies of almost identical code)
+- use fsync() (if available) instead of sync() when updating password files
+- use fchmod() and fchown() if available
+- keep the NIS "plus on a line by itself" entries at end of passwd/group
+- configure checks location of passwd/chfn/chsh programs (/usr/bin or /bin)
+- passwd -S -a: list information about all users (root only)
+- passwd -k: change only expired passwords
+- passwd -q: quiet mode
+- first attempt at PAM support in passwd
+- passwd updates the non-shadow password if /etc/shadow exists but the
+ user has no shadow password
+- passwd logs who changed the password, added hook to allow non-root
+ administrators who can change passwords (not implemented yet)
+- su sets $HOME even without the "-" option (suggested by Joey Hess)
+- added -p (set encrypted password) option to useradd and usermod
+ (idea from hpux10 - undocumented option used internally by SAM)
+- useradd -D -e does the right thing (set default expiration date)
+- USERDEL_CMD in login.defs instead of hardcoded {ATRM,CRONTAB}_COMMAND
+ because there are just too many systems that need different commands
+- removed #ifdef FAILLOG_LOCKTIME (now always enabled), warning: the
+ faillog file format has been changed (somewhere between 960129 and
+ 960810), please truncate the old file (if any) to zero length
+- ISSUE_FILE (may be different from /etc/issue) instead of ISSUE_FILE_ENAB
+- wtmp, lastlog, faillog file location guessed by configure
+- separate checks for invalid user and group names, max username length
+ based on struct utmp (it's not always 8 characters)
+- pwck and grpck now check for invalid user/group names
+- pwck -q (quiet, report only serious problems) option added
+- separate cleaner sgetpwent() without the NIS magic
+- NIS entries ignored (never changed) by *io.c, pwck, grpck
+- various code cleanups
+- new get_my_pwent() function for getting my own username, uid etc.
+- faillog opens the file read-write if possible (even if not root)
+- passwd -S allowed for normal users (for their own uid only)
+- handle the case of login denied to passwordless accounts better
+ ("Login incorrect" without "Password:" prompt looks strange)
+- corrected author information and removed a copyright restriction
+
+shadow-960925 => shadow-961025
+
+- fixed a few typos in shadow group code
+- don't check for names starting with 'r' to determine if the shell
+ is restricted, use /etc/shells instead (for the "rc" shell)
+- removed extra definition of LASTLOG_FILE in configure.in
+- expiry no longer segfaults if no /etc/shadow
+- userdel -r "can't remove mailbox" warning no longer printed on success
+- useradd exit codes changed to match hpux10 man page
+- fixed possible fd leak etc. in file locking code (lib/commonio.c)
+
+shadow-960920 => shadow-960925
+
+- bug fixes to the new environment code using malloc
+- use hardcoded names instead of basename(argv[0]) for openlog() in programs
+ that users can run (chage, chfn, chsh, gpasswd, login, newgrp, passwd, su)
+- small fix to isexpired(), and use it in passwd as well
+- use strftime() and strptime() if available
+- added chmod 600 /etc/passwd- at the end of pwconv5 (backup file may
+ contain encrypted passwords!)
+- pass size to change_field (chage, chfn, chsh) instead of assuming BUFSIZ
+ (nothing bad happened yet, just a cleanup)
+- gpasswd should work with both shadow and non-shadow group passwords
+- detect unsupported options if no shadow (gpasswd, useradd, usermod)
+- passwd -e for sunos4 (ATT_AGE), untested
+- read environment from file (ENVIRON_FILE in login.defs), idea from ssh
+- small fix to l64a()
+- passwd prints a message after password successfully changed (for things
+ like poppassd which run passwd and expect some output)
+- passwd logs if password was changed by root (as opposed to a luser)
+- passwd uses current uid if no username argument and getlogin() fails
+
+shadow-960910 => shadow-960920
+
+- use malloc for environment variables, no more MAXENV (Juergen Heinzl)
+- newusers should work with both shadow and non-shadow passwords
+ (still left to do: chpasswd, gpasswd)
+- login-static no longer compiled by default
+- more SYSLOG() macros
+
+shadow-960810 => shadow-960910
+
+- updated README.linux to point to the new ftp site
+- chfn and chsh optionally (CHFN_AUTH) prompt for password like util-linux
+- man pages now closer to LDP standards (Ivan Nejgebauer)
+- newgrp uses SYSLOG_SG_ENAB (not SU) as in the /etc/login.defs comments
+- obscure.c fixed to compile with HAVE_LIBCRACK
+- cosmetic message changes in age.c
+- utmp open error check fixed in utmp.c
+- grpunconv added (Michael Meskes)
+- login reports invalid login time, not "Login incorrect" (Ivan Nejgebauer)
+- logoutd sets OPOST before writing to the tty (Ivan Nejgebauer)
+- sulogin: don't use syslog(), other minor changes (Ivan Nejgebauer)
+- passwords can be changed if sp_max == -1 (now considered infinity)
+- usermod: don't use sizeof(struct lastlog) when writing to faillog (ugh)
+- started replacing lots of #ifdef USE_SYSLOG with cleaner macros
+- contrib/rpasswd.c added (Joshua Cowan)
+- PASS_MAX is 127 with MD5_CRYPT (not just for Linux - sunos4 too...)
+- workarounds for a RedHat NYS libc getspnam() bug (if /etc/shadow
+ doesn't exist, it succeeds and returns sp_lstchg==0 instead of -1).
+
+shadow-960129 => shadow-960810
+
+- automake, configure checks for libcrypt and libcrack (Janos Farkas)
+- added --enable-shadowgrp to configure (shadow groups disabled by default)
+- should compile on SunOS 4.1.x - but it does NOT mean that it works :-)
+- login sets HUSHLOGIN=TRUE or FALSE (for shell startup scripts etc.)
+- hopefully removed all the rcsid warnings
+- contrib/atudel perl script to remove at jobs (thanks to Brian Gaeke)
+- resource limits (Cristian Gafton)
+- workaround for buggy init/getty(?) leaving junk in ut_host on RedHat
+- more fixes in man pages
+- pwck and grpck no longer suggest to run mkpasswd if *DBM not compiled in
+- most programs (groupadd, groupdel, groupmod, grpck, login, passwd, pwck,
+ su, useradd, userdel, usermod) should now work with both shadow and
+ non-shadow passwords/groups (check for /etc/shadow and /etc/gshadow at
+ run time); a few programs still left to do
+- mailbox mv/chown/rm in usermod/userdel (suggested by Cristian Gafton)
+- new contrib/adduser.c from Chris Evans
+- lots of other minor changes
+- source tree reorganization, GNU autoconf, portability cleanups
+- basename() renamed to Basename() to avoid name space confusion
+- new programs to create /etc/shadow and /etc/gshadow: pwconv5, grpconv
+- newgrp cleanup and a few fixes
+- useradd uses PASS_MAX_DAYS, PASS_MIN_DAYS and PASS_WARN_AGE
+- don't make the first group member the group admin by default
+ (define FIRST_MEMBER_IS_ADMIN to get the old gpasswd behaviour)
+- password aging constants, NGROUPS_MAX and syslog stuff in only one
+ place (defines.h) instead of repeating it in all source files...
+- added userdel -r safety check (refuse to remove the home directory
+ if it would result in removing some other user's home directory)
+- usermod -u now correctly checks for non-unique uid (unless -o)
+- sync() after updating password files, just to be more safe
+- "make install" should install /etc/login.defs if it doesn't exist
+- new option to control what happens if we can't cd to the home directory
+ (DEFAULT_HOME in /etc/login.defs)
+- enter the home directory as the user, not as root (for NFS etc.)
+- added check for Slackware bugs (nobody UID -1) in pwck and grpck
+- new CONSOLE_GROUPS feature (thanks to pacman@tardis.mars.net), it is
+ possible to add specified groups (floppy etc.) for console logins
+- new faillog feature: lock account for specified (per-user) time since
+ the last failure after exceeding the failure limit
+- new man pages (gpasswd.1, login.access.5, suauth.5)
+- fixes in man pages, renamed *.4 to *.5
+- new "contrib" directory (two adduser programs)
+- changed some "system" to "feature" #ifdefs (autoconf someday...)
+- sulogin no longer requires to be run from init, should work from rc
+ scripts too
+- changes to prevent unshadowing with libc SHADOW_COMPAT (get info
+ using xx_locate(), modify it and call xx_update(), don't write back
+ anything returned by getpwnam() etc.)
+- stupid bug fixed in lastlog.c
+- don't move non-directories in "usermod -m"
+- don't log unknown usernames (passwords mistyped for usernames) (lmain.c)
+- macros to get around ancient compilers which don't like prototypes
+- make more use of "const" (not everywhere yet)
+- added #ifdef AUTH_METHODS - very few people use administrator defined
+ authentication methods because many programs are not aware of them;
+ not supporting them makes the code simpler
+- new "save" and "restore" Makefile targets, thanks to Rafal Maszkowski
+- sgetgrent() in libshadow.a is optional, some versions of libc have it,
+ see HAVE_SGETGRENT in config.h (grent.c)
+- don't use continued lines in /etc/group, the standard getgr*() functions
+ don't support that (grent.c)
+- removed the third main() argument (according to libc docs, not allowed by
+ POSIX.1 - use environ instead) (lmain.c, smain.c, newgrp.c, sulogin.c)
+- login access control (lmain.c, login_access.c)
+- added copyright notice to login_access.c (from logdaemon-5.0)
+- detailed su access control (smain.c, suauth.c) - thanks to Chris Evans
+- added closelog() in su before executing the shell (smain.c)
+- getting current user name changed (smain.c)
+- "x" instead of "*" in pw_passwd, consistent with pwconv (useradd.c)
+- getpass() shouldn't return NULL except on errors (getpass.c)
+- moved isexpired() to isexpired.c (now part of libshadow.a) from age.c
+- SunOS4-like passwd -e (force change on next login) (isexpired.c, passwd.c)
+- can use shadow support in new versions of Linux libc instead of libshadow.a,
+ see HAVE_SHADOWPWD, HAVE_SHADOWGRP in config.h.linux (shadow.c, gshadow.c)
+- "no shadow password" not logged, the same /bin/login should work with both
+ shadow and non-shadow passwords (lmain.c)
+- some cleanup in various places (lmain.c, passwd.c)
+- new program to verify username/password pairs, for xlock etc.; it is not
+ installed by default, read the comments first (pwdauth.c)
+- authentication programs run with empty environment for safety (pwauth.c)
+- added missing fstat error checks (faillog.c, lastlog.c, setup.c, *io.c)
+- common code separated from *io.c (commonio.c)
+- ownership and permissions on password files are now preserved (we may try
+ to make more use of setgid and setuid non-root programs in the future)
+- added (untested) MD5-based crypt() from FreeBSD (md5crypt.c), see
+ MD5_CRYPT in config.h.linux and MD5_CRYPT_ENAB in login.defs.linux
+- termios/termio/sgtty macros cleaned up a bit
+
+shadow-951218 => shadow-960129
+
+Emergency bug fix release - no new features since 951218. There are many
+new changes, but this bug really can't wait until they are tested.
+
+Probably all previous versions of the shadow suite have a serious bug which
+makes it possible to overwrite the stack by entering very long username at
+the login prompt. This can give root access to any remote user!
+
+Changed the maximum size in login.c from BUFSIZ (1024) to 32 (to match
+size of the array in lmain.c). Aaargh!!!
+
+shadow-951203 => shadow-951218
+
+Changes:
+- Linux utmp handling fixes (utmp.c)
+- last failure date printing fixes (failure.c)
+- minor fix to compile with USE_CRACKLIB (obscure.c)
+- eliminated the use of snprintf (env.c, lmain.c, login.c, shell.c, smain.c)
+- basename.c added, replacing duplicated code in various places
+- "su -" runs the shell with '-' in argv[0] again (smain.c)
+- removing at/cron jobs cleaned up (userdel.c)
+- /etc/gshadow should not be world-readable (sgroupio.c)
+- if fflush() failed, files were not closed (*io.c)
+- login prompt is now "hostname login: " on Linux (lmain.c, login.c)
+- "save" and "restore" targets commented out (don't work) (Makefile.linux)
+- some minor cleanups for gcc -Wall (unused variables etc.)
+- removed README.FIRST (copyrights are OK now)
+- updated ANNOUNCE, README.linux, WISHLIST
+- as suggested, converted to RCS
+
+shadow-3.3.2-951127 => shadow-951203-jfh
+
+Changes:
+- Added the BSD-style copyright to all of the files. Any files with the
+ old copyright have multiple copyright holders and need to be cleanroomed
+ to produce BSD-style copyrightable files, or I need to get the consent
+ of the others to change the copyright.
+- Changed the ANNOUNCE file to not refer to the README.FIRST file. Now
+ that all of the files should have the correct copyright there is no need
+ to refer to that e-mail message.
+- Changes SCCS strings to "%W% %U% %G%". Marek needs to either convert to
+ RCS or check into SCCS and then checkout. I'd suggest using RCS ;-)
+
+ jfh@rpp386.cactus.org
+
+shadow-3.3.2-951106 => shadow-951127
+
+Note: for now this code only supports Linux. All the #ifdef's are there
+(and will be; support for at least SunOS 4.1.x would be nice) but:
+- I had to fix some potential security problems resulting from sloppy
+ coding (no bounds checking), and it was easier for me to use snprintf()
+ (not available on many systems, unfortunately), I'll fix that later.
+ Old versions of Linux libc don't have snprintf() either, and the one
+ in libbsd.a ignores the max size - don't use it! (libc-4.6.27 is OK)
+- I am lazy and only updated Makefile.linux and config.h.linux this time
+- I don't have root access to non-Linux systems (this means no testing)
+- this code needs some major reorganization, which will (hopefully)
+ make porting easier
+
+Changes:
+- some code cleanup, prototypes.h, defines.h, Makefile and config.h changes
+- login can be statically linked (not that I think it's a good idea, better
+ fix the telnetd, but paranoid people will like it :-)
+- login is installed non-setuid by default
+- check for NULL from getpass()
+- wipe cleartext password from getpass() when no longer needed (pwauth.c)
+- use standard "Password: " prompt by default (pwauth.c)
+- hopefully fixed bogus sigaction() stuff (Linux only) (getpass.c)
+- oops, setrlimit wants bytes, ulimit wants 512-byte units (lmain.c)
+- Linux has <lastlog.h>
+- print ll_host on Linux too (lmain.c)
+- size checking in various places (setuid root programs, argh!)
+- preserve TERM from getty (lmain.c)
+- don't ignore SIGHUP (lmain.c)
+- :%s/setenv/set_env/g (setenv(3) conflict) (env.c, lmain.c, login.c)
+- remove LD_xxx (env.c)
+- use bzero() instead of memset() for BSD portability and less #ifdef's
+ (if the system has no bzero(), implement it as a macro using memset())
+- the above fixes wrong order of memset() parameters (log.c)
+- use getutent/pututline instead of doing it by hand (utmp.c)
+- added the new settings to login.defs.linux
+- added login_access.c to the distribution (not used yet)
+
+==========
+
+shadow-3.3.2 => shadow-3.3.2-951106
+
+- added dummy pad.c and #ifdef'ed out references to pad_auth (pwauth.c)
+- malloc/strdup error checking, hopefully no more core dumps...
+- define HAVE_RLIMIT instead of HAVE_ULIMIT for Linux (config.h.linux)
+- changed pathnames on Linux to conform to new FSSTND (/var/log etc.)
+- larger buffer for cipher, for md5 crypt() if and when (encrypt.c, passwd.c)
+- use POSIX termios whenever possible on Linux
+- list.c, removed add_list/del_list from gpmain.c, user{add,del,mod}.c
+- strtoday.c, removed duplicates from chage.c, useradd.c, usermod.c
+- login -h only for root (lmain.c)
+- login -r not needed for Linux (lmain.c)
+- sample login.defs modified for Linux (login.defs.linux)
+- swapped chfn USAGE and ADMUSAGE (chfn.c)
+- added -u to passwd usage (passwd.c)
+- no #! check necessary for Linux (shell.c)
+- define OLD_CRON for some old incompatible Linux distributions (userdel.c)
+- PASS_MAX is now 127 (not 8) for Linux (getpass.c)
+- LOGIN_RETRIES, LOGIN_TIMEOUT, PASS_CHANGE_TRIES are no longer compiled in,
+ can now be set in login.defs, old values are used as defaults (lmain.c)
+- unique uid/gid selection now more robust (useradd.c, groupadd.c)
+- UID_MIN, UID_MAX, GID_MIN, GID_MAX in login.defs (useradd.c, groupadd.c)
+- CRACKLIB_DICTPATH no longer compiled in, can be set in login.defs (passwd.c)
+- PASS_ALWAYS_WARN: warn about weak passwords even for root (passwd.c)
+- PASS_MAX_LEN, check truncated passwords again (obscure.c)
+- check for weak passwords too if previous password was empty (obscure.c)
+- CHFN_RESTRICT: don't let users change their full names (chfn.c)
+- Linux has getusershell(), use it (chsh.c)
+- check if the new shell is executable by the user (chsh.c)
+- sleep before printing "Login incorrect", not the other way around (lmain.c)
+- don't be picky about utmp only if any of -rfh flags given (lmain.c)
+- do "wheel group" more like BSD does (smain.c)
+- use getlogin() in su (smain.c)
+- UMASK from login.defs defaults to 077, not 0 (lmain.c, newusers.c)
+- #undef HAS_ATRM for Linux until atrm can do what we need (config.h.linux)
+- Linux has most commands in /usr/bin, not /bin (age.c, passwd.c, userdel.c)
+- ULIMIT from login.defs works on systems using setrlimit() too (lmain.c)
+- LOGIN_STRING should work now (pwauth.c, getdef.c)
+- kludge to avoid conflict with Linux <shadow.h> (gshadow.h)
+- mv Makefile Makefile.xenix ; mv config.h config.h.xenix - so that they are
+ not lost when you copy the right ones to Makefile and config.h
+
+==========
+
+shadow-3.3.2
+
+Original version, received directly from the author.
diff --git a/README b/README
new file mode 100644
index 0000000..c0c03f2
--- /dev/null
+++ b/README
@@ -0,0 +1,122 @@
+Shadow SITES
+============
+
+Homepage
+ http://github.com/shadow-maint/shadow
+
+Issue tracker
+ http://github.com/shadow-maint/shadow/issues
+
+Releases
+ https://github.com/shadow-maint/shadow/releases
+
+Mailing lists
+ for general discuss: pkg-shadow-devel@alioth-lists.debian.net
+ commit list: pkg-shadow-commits@alioth-lists.debian.net
+
+Mailing lists subscription
+ http://alioth-lists.debian.net/mailman/listinfo/pkg-shadow-devel
+ http://alioth-lists.debian.net/mailman/listinfo/pkg-shadow-commits
+
+Mailing lists archives:
+ 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:
+
+ http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libskey/
+ or
+ http://gentoo.osuosl.org/distfiles/skey-1.1.5.tar.bz2
+
+Authors and contributors
+========================
+
+Thanks to at least the following people for sending patches, bug
+reports and various comments. This list may be incomplete, I received
+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>
+Aniello Del Sorbo <anidel@edu-gw.dia.unisa.it>
+Anton Gluck <gluc@midway.uchicago.edu>
+Arkadiusz Miskiewicz <misiek@pld.org.pl>
+Ben Collins <bcollins@debian.org>
+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>
+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>
+Greg Mortensen <loki@world.std.com>
+Guido van Rooij
+Guy Maor <maor@debian.org>
+Hrvoje Dogan <hdogan@bjesomar.srce.hr>
+Jakub Hrozek <jhrozek@redhat.com>
+Janos Farkas <chexum@bankinf.banki.hu>
+Jay Soffian <jay@lw.net>
+Jesse Thilo <Jesse.Thilo@pobox.com>
+Joey Hess <joey@kite.ml.org>
+John Adelsberger <jja@umr.edu>
+Jonathan Hankins <jhankins@mailserv.homewood.k12.al.us>
+Jon Lewis <jlewis@lewis.org>
+Joshua Cowan <jcowan@hermit.reslife.okstate.edu>
+Judd Bourgeois <shagboy@bluesky.net>
+Juergen Heinzl <unicorn@noris.net>
+Juha Virtanen <jiivee@iki.fi>
+Julian Pidancet <julian.pidancet@gmail.com>
+Julianne Frances Haugh <jockgrrl@ix.netcom.com>
+Leonard N. Zubkoff <lnz@dandelion.com>
+Luca Berra <bluca@www.polimi.it>
+Lukáš Kuklínek <lkukline@redhat.com>
+Lutz Schwalowsky <schwalow@mineralogie.uni-hamburg.de>
+Marc Ewing <marc@redhat.com>
+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>
+Nikos Mavroyanopoulos <nmav@i-net.paiko.gr>
+Pavel Machek <pavel@bug.ucw.cz>
+Peter Vrabec <pvrabec@redhat.com>
+Phillip Street
+Rafał Maszkowski <rzm@icm.edu.pl>
+Rani Chouha <ranibey@smartec.com>
+Sami Kerola <kerolasa@rocketmail.com>
+Scott Garman <scott.a.garman@intel.com>
+Sebastian Rick Rijkers <srrijkers@gmail.com>
+Seraphim Mellos <mellos@ceid.upatras.gr>
+Shane Watts <shane@nexus.mlckew.edu.au>
+Steve M. Robbins <steve@nyongwa.montreal.qc.ca>
+Thorsten Kukuk <kukuk@suse.de>
+Tim Hockin <thockin@eagle.ais.net>
+Timo Karjalainen <timok@iki.fi>
+Ulisses Alonso Camaro <ulisses@pusa.eleinf.uv.es>
+Werner Fink <werner@suse.de>
+
+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)
+
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..5cfa252
--- /dev/null
+++ b/TODO
@@ -0,0 +1,127 @@
+ * Create a common usage function that'd take the array of
+ long options and an array of descriptions and output that so things would
+ be standardized across the utils.
+ Usage strings should be normalized and split first.
+ Investigate optparse.
+
+
+/etc/default/useradd
+ * GROUP=1000 should accept a group name.
+
+Check when RLOGIN is enabled if ruserok() exists
+
+Move selinux_file_context out of libmisc/copydir.c
+
+Review hardcoded root account?
+
+review all call to strto
+
+libmisc/cleanup_user.c
+ cleanup needed (cleanup_report_add_user* not used)
+
+
+libxcrypt support
+ * http://wiki.linuxfromscratch.org/patches/browser/trunk/shadow/shadow-4.0.18.1-owl_blowfish-1.patch
+
+implement getlong, getulong.
+ avoid atoi, atol, atoul, strtol, strtoul, ...
+
+manpages: comment the RLOGIN parts
+
+Replace build_list (in lib/gshadow.c) and list (in lib/sgetgrent.c) by
+comma_to_list()
+
+Revert the modified files if all files could not be changed.
+ * or warn and indicate which files were modified and which were not.
+ * check the order the files are modified.
+
+report nscd_flush_cache failures?
+call nscd from the programs or from lib (commonio?)
+
+PAM: check if a non-interactive conversation function could be used to set
+the password in chpasswd and newusers
+
+WITH_SELINUX
+ - review all tools to check that the strategies are consistent
+
+chage, chfn, chsh: same change needed as in passwd.
+ - probably need moving check_selinux_access to a separate file.
+
+testsuite
+ - newgrp
+ - test with unknown user's GID
+
+newusers
+ - add logging to SYSLOG & AUDIT
+ - use CREATE_HOME
+ - Add a -Z option (see useradd / usermod)
+
+Document when/where option appeared, document whether an option is standard
+or not.
+
+Check all the expiry semantics
+
+ALL:
+- move base passwd/shadow/group/gshadow operation to module for allow write
+ different backend modules for db, NIS, LDAP and others. Default backend it
+ will be goot if will be chosen depending on /etc/nsswitch.conf and allow
+ override this by -r <repository> options (where the <repository> can be
+ file, db, nis nisplus, ldap .. like on /etc/nsswitch.conf in service column).
+ passwd have old piece of code with handling -r option and it will be good
+ finish this and propagate on other shadow tools for allow operate on other
+ user databases by well known tools.
+- Protect against signals. Register do_cleanups in a signal handler.
+
+- login.defs
+ - generate depending on configuration
+
+- useradd:
+ - add handle create user mail spool in maildir format.
+ - Add support for -k in -D mode
+ - Add support for -K in -D mode
+ - Add option to create or not the mail spool (and set the default in -D
+ mode)
+ - Change -l to reset the entry if an entry was already there
+ - set the mask in mkdir?
+
+- userdel:
+ - add backup option for the removal of user resources,
+ - user_busy: check that the user is not running any processes.
+ - missing "deleting group" FAILED
+ - home dir removed, but userdel may fail and may leave the user
+ => warning needed
+
+- usermod
+ - add an option equivalent to useradd's -l (only when uid is changed)
+ - the mode of new home directories should be set according to the
+ original mode. Does copy_tree does this?
+ - user renamed, order is not kept in /etc/group (see
+ 47_usermod-l_no_shadow_file). This is a problem when the first user is
+ considered as the admin.
+ - see mail "user ID change" on April, 15
+ + fix call to chown (combination of -m and -u/-g)
+ + add tests
+
+- passwd:
+ - check combination of options (e.g. -u/-l)
+ - when -u refuse to unlock because it would create an empty password, it
+ should not display "Password changed."
+ exit instead?
+
+- newgrp: check the USE_PAM section.
+
+- pwck
+ - Add check to move passwd passwords to shadow if there is a shadow
+ entry (with a password).
+ - Add check to move passwd passwords to shadow if there is a shadow
+ file.
+ - Support an alternative /etc/tcb directory as second parameter.
+ - add options -g / -G to specify alternative group / gshadow files
+
+- su
+ - add a login.defs configuration parameter to add variables to keep in
+ the environment with "su -l" (TERM/TERMCOLOR/...)
+
+- vipw
+ - set ACLs and XATTRs on the temporary file (and backups?)
+ - vipw + selinux -> use lib/selinux.c
diff --git a/acinclude.m4 b/acinclude.m4
new file mode 100644
index 0000000..dd01f16
--- /dev/null
+++ b/acinclude.m4
@@ -0,0 +1,54 @@
+# Checks the location of the XML Catalog
+# Usage:
+# JH_PATH_XML_CATALOG([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# Defines XMLCATALOG and XML_CATALOG_FILE substitutions
+AC_DEFUN([JH_PATH_XML_CATALOG],
+[
+ # check for the presence of the XML catalog
+ AC_ARG_WITH([xml-catalog],
+ AC_HELP_STRING([--with-xml-catalog=CATALOG],
+ [path to xml catalog to use]),,
+ [with_xml_catalog=/etc/xml/catalog])
+ jh_found_xmlcatalog=true
+ XML_CATALOG_FILE="$with_xml_catalog"
+ AC_SUBST([XML_CATALOG_FILE])
+ AC_MSG_CHECKING([for XML catalog ($XML_CATALOG_FILE)])
+ if test -f "$XML_CATALOG_FILE"; then
+ AC_MSG_RESULT([found])
+ else
+ jh_found_xmlcatalog=false
+ AC_MSG_RESULT([not found])
+ fi
+
+ # check for the xmlcatalog program
+ AC_PATH_PROG(XMLCATALOG, xmlcatalog, no)
+ if test "x$XMLCATALOG" = xno; then
+ jh_found_xmlcatalog=false
+ fi
+
+ if $jh_found_xmlcatalog; then
+ ifelse([$1],,[:],[$1])
+ else
+ ifelse([$2],,[AC_MSG_ERROR([could not find XML catalog])],[$2])
+ fi
+])
+
+# Checks if a particular URI appears in the XML catalog
+# Usage:
+# JH_CHECK_XML_CATALOG(URI, [FRIENDLY-NAME], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+AC_DEFUN([JH_CHECK_XML_CATALOG],
+[
+ AC_REQUIRE([JH_PATH_XML_CATALOG],[JH_PATH_XML_CATALOG(,[:])])dnl
+ AC_MSG_CHECKING([for ifelse([$2],,[$1],[$2]) in XML catalog])
+ if $jh_found_xmlcatalog && \
+ AC_RUN_LOG([$XMLCATALOG --noout "$XML_CATALOG_FILE" "$1" >&2]); then
+ AC_MSG_RESULT([found])
+ ifelse([$3],,,[$3
+])dnl
+ else
+ AC_MSG_RESULT([not found])
+ ifelse([$4],,
+ [AC_MSG_ERROR([could not find ifelse([$2],,[$1],[$2]) in XML catalog])],
+ [$4])
+ fi
+])
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..659667d
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,12678 @@
+# generated automatically by aclocal 1.16.1 -*- Autoconf -*-
+
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
+[m4_warning([this file was generated for autoconf 2.69.
+You have another version of autoconf. It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically 'autoreconf'.])])
+
+# gettext.m4 serial 68 (gettext-0.19.8)
+dnl Copyright (C) 1995-2014, 2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2006, 2008-2010.
+
+dnl Macro to add for using GNU gettext.
+
+dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
+dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
+dnl default (if it is not specified or empty) is 'no-libtool'.
+dnl INTLSYMBOL should be 'external' for packages with no intl directory,
+dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory.
+dnl If INTLSYMBOL is 'use-libtool', then a libtool library
+dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static,
+dnl depending on --{enable,disable}-{shared,static} and on the presence of
+dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
+dnl $(top_builddir)/intl/libintl.a will be created.
+dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
+dnl implementations (in libc or libintl) without the ngettext() function
+dnl will be ignored. If NEEDSYMBOL is specified and is
+dnl 'need-formatstring-macros', then GNU gettext implementations that don't
+dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
+dnl INTLDIR is used to find the intl libraries. If empty,
+dnl the value '$(top_builddir)/intl/' is used.
+dnl
+dnl The result of the configuration is one of three cases:
+dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
+dnl and used.
+dnl Catalog format: GNU --> install in $(datadir)
+dnl Catalog extension: .mo after installation, .gmo in source tree
+dnl 2) GNU gettext has been found in the system's C library.
+dnl Catalog format: GNU --> install in $(datadir)
+dnl Catalog extension: .mo after installation, .gmo in source tree
+dnl 3) No internationalization, always use English msgid.
+dnl Catalog format: none
+dnl Catalog extension: none
+dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
+dnl The use of .gmo is historical (it was needed to avoid overwriting the
+dnl GNU format catalogs when building on a platform with an X/Open gettext),
+dnl but we keep it in order not to force irrelevant filename changes on the
+dnl maintainers.
+dnl
+AC_DEFUN([AM_GNU_GETTEXT],
+[
+ dnl Argument checking.
+ ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
+ [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
+])])])])])
+ ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old],
+ [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])])
+ ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
+ [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
+])])])])
+ define([gt_included_intl],
+ ifelse([$1], [external],
+ ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]),
+ [yes]))
+ define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], []))
+ gt_NEEDS_INIT
+ AM_GNU_GETTEXT_NEED([$2])
+
+ AC_REQUIRE([AM_PO_SUBDIRS])dnl
+ ifelse(gt_included_intl, yes, [
+ AC_REQUIRE([AM_INTL_SUBDIR])dnl
+ ])
+
+ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+
+ dnl Sometimes libintl requires libiconv, so first search for libiconv.
+ dnl Ideally we would do this search only after the
+ dnl if test "$USE_NLS" = "yes"; then
+ dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+ dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
+ dnl the configure script would need to contain the same shell code
+ dnl again, outside any 'if'. There are two solutions:
+ dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
+ dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
+ dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
+ dnl documented, we avoid it.
+ ifelse(gt_included_intl, yes, , [
+ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+ ])
+
+ dnl Sometimes, on Mac OS X, libintl requires linking with CoreFoundation.
+ gt_INTL_MACOSX
+
+ dnl Set USE_NLS.
+ AC_REQUIRE([AM_NLS])
+
+ ifelse(gt_included_intl, yes, [
+ BUILD_INCLUDED_LIBINTL=no
+ USE_INCLUDED_LIBINTL=no
+ ])
+ LIBINTL=
+ LTLIBINTL=
+ POSUB=
+
+ dnl Add a version number to the cache macros.
+ case " $gt_needs " in
+ *" need-formatstring-macros "*) gt_api_version=3 ;;
+ *" need-ngettext "*) gt_api_version=2 ;;
+ *) gt_api_version=1 ;;
+ esac
+ gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+ gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+ dnl If we use NLS figure out what method
+ if test "$USE_NLS" = "yes"; then
+ gt_use_preinstalled_gnugettext=no
+ ifelse(gt_included_intl, yes, [
+ AC_MSG_CHECKING([whether included gettext is requested])
+ AC_ARG_WITH([included-gettext],
+ [ --with-included-gettext use the GNU gettext library included here],
+ nls_cv_force_use_gnu_gettext=$withval,
+ nls_cv_force_use_gnu_gettext=no)
+ AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext])
+
+ nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+ if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+ ])
+ dnl User does not insist on using GNU NLS library. Figure out what
+ dnl to use. If GNU gettext is available we use this. Else we have
+ dnl to fall back to GNU NLS library.
+
+ if test $gt_api_version -ge 3; then
+ gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+changequote(,)dnl
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+changequote([,])dnl
+'
+ else
+ gt_revision_test_code=
+ fi
+ if test $gt_api_version -ge 2; then
+ gt_expression_test_code=' + * ngettext ("", "", 0)'
+ else
+ gt_expression_test_code=
+ fi
+
+ AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <libintl.h>
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings)
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
+ ]],
+ [[
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
+ ]])],
+ [eval "$gt_func_gnugettext_libc=yes"],
+ [eval "$gt_func_gnugettext_libc=no"])])
+
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+ dnl Sometimes libintl requires libiconv, so first search for libiconv.
+ ifelse(gt_included_intl, yes, , [
+ AM_ICONV_LINK
+ ])
+ dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
+ dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
+ dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
+ dnl even if libiconv doesn't exist.
+ AC_LIB_LINKFLAGS_BODY([intl])
+ AC_CACHE_CHECK([for GNU gettext in libintl],
+ [$gt_func_gnugettext_libintl],
+ [gt_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $INCINTL"
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBINTL"
+ dnl Now see whether libintl exists and does not depend on libiconv.
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <libintl.h>
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias (""))
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
+ ]],
+ [[
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
+ ]])],
+ [eval "$gt_func_gnugettext_libintl=yes"],
+ [eval "$gt_func_gnugettext_libintl=no"])
+ dnl Now see whether libintl exists and depends on libiconv.
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+ LIBS="$LIBS $LIBICONV"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <libintl.h>
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias (""))
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
+ ]],
+ [[
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
+ ]])],
+ [LIBINTL="$LIBINTL $LIBICONV"
+ LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+ eval "$gt_func_gnugettext_libintl=yes"
+ ])
+ fi
+ CPPFLAGS="$gt_save_CPPFLAGS"
+ LIBS="$gt_save_LIBS"])
+ fi
+
+ dnl If an already present or preinstalled GNU gettext() is found,
+ dnl use it. But if this macro is used in GNU gettext, and GNU
+ dnl gettext is already preinstalled in libintl, we update this
+ dnl libintl. (Cf. the install rule in intl/Makefile.in.)
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+ && test "$PACKAGE" != gettext-runtime \
+ && test "$PACKAGE" != gettext-tools; }; then
+ gt_use_preinstalled_gnugettext=yes
+ else
+ dnl Reset the values set by searching for libintl.
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ fi
+
+ ifelse(gt_included_intl, yes, [
+ if test "$gt_use_preinstalled_gnugettext" != "yes"; then
+ dnl GNU gettext is not found in the C library.
+ dnl Fall back on included GNU gettext library.
+ nls_cv_use_gnu_gettext=yes
+ fi
+ fi
+
+ if test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Mark actions used to generate GNU NLS library.
+ BUILD_INCLUDED_LIBINTL=yes
+ USE_INCLUDED_LIBINTL=yes
+ LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD"
+ LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD"
+ LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+ fi
+
+ CATOBJEXT=
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Mark actions to use GNU gettext tools.
+ CATOBJEXT=.gmo
+ fi
+ ])
+
+ if test -n "$INTL_MACOSX_LIBS"; then
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Some extra flags are needed during linking.
+ LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+ LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+ fi
+ fi
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ AC_DEFINE([ENABLE_NLS], [1],
+ [Define to 1 if translation of program messages to the user's native language
+ is requested.])
+ else
+ USE_NLS=no
+ fi
+ fi
+
+ AC_MSG_CHECKING([whether to use NLS])
+ AC_MSG_RESULT([$USE_NLS])
+ if test "$USE_NLS" = "yes"; then
+ AC_MSG_CHECKING([where the gettext function comes from])
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ gt_source="external libintl"
+ else
+ gt_source="libc"
+ fi
+ else
+ gt_source="included intl directory"
+ fi
+ AC_MSG_RESULT([$gt_source])
+ fi
+
+ if test "$USE_NLS" = "yes"; then
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ AC_MSG_CHECKING([how to link with libintl])
+ AC_MSG_RESULT([$LIBINTL])
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
+ fi
+
+ dnl For backward compatibility. Some packages may be using this.
+ AC_DEFINE([HAVE_GETTEXT], [1],
+ [Define if the GNU gettext() function is already present or preinstalled.])
+ AC_DEFINE([HAVE_DCGETTEXT], [1],
+ [Define if the GNU dcgettext() function is already present or preinstalled.])
+ fi
+
+ dnl We need to process the po/ directory.
+ POSUB=po
+ fi
+
+ ifelse(gt_included_intl, yes, [
+ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
+ dnl to 'yes' because some of the testsuite requires it.
+ if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
+ BUILD_INCLUDED_LIBINTL=yes
+ fi
+
+ dnl Make all variables we use known to autoconf.
+ AC_SUBST([BUILD_INCLUDED_LIBINTL])
+ AC_SUBST([USE_INCLUDED_LIBINTL])
+ AC_SUBST([CATOBJEXT])
+
+ dnl For backward compatibility. Some configure.ins may be using this.
+ nls_cv_header_intl=
+ nls_cv_header_libgt=
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ DATADIRNAME=share
+ AC_SUBST([DATADIRNAME])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INSTOBJEXT=.mo
+ AC_SUBST([INSTOBJEXT])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ GENCAT=gencat
+ AC_SUBST([GENCAT])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INTLOBJS=
+ if test "$USE_INCLUDED_LIBINTL" = yes; then
+ INTLOBJS="\$(GETTOBJS)"
+ fi
+ AC_SUBST([INTLOBJS])
+
+ dnl Enable libtool support if the surrounding package wishes it.
+ INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
+ AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX])
+ ])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INTLLIBS="$LIBINTL"
+ AC_SUBST([INTLLIBS])
+
+ dnl Make all documented variables known to autoconf.
+ AC_SUBST([LIBINTL])
+ AC_SUBST([LTLIBINTL])
+ AC_SUBST([POSUB])
+])
+
+
+dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized.
+m4_define([gt_NEEDS_INIT],
+[
+ m4_divert_text([DEFAULTS], [gt_needs=])
+ m4_define([gt_NEEDS_INIT], [])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL])
+AC_DEFUN([AM_GNU_GETTEXT_NEED],
+[
+ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
+
+
+dnl Usage: AM_GNU_GETTEXT_REQUIRE_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_REQUIRE_VERSION], [])
+
+# iconv.m4 serial 19 (gettext-0.18.2)
+dnl Copyright (C) 2000-2002, 2007-2014, 2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
+[
+ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+
+ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+ dnl accordingly.
+ AC_LIB_LINKFLAGS_BODY([iconv])
+])
+
+AC_DEFUN([AM_ICONV_LINK],
+[
+ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+ dnl those with the standalone portable GNU libiconv installed).
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+ dnl accordingly.
+ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+
+ dnl Add $INCICONV to CPPFLAGS before performing the following checks,
+ dnl because if the user has installed libiconv and not disabled its use
+ dnl via --without-libiconv-prefix, he wants to use it. The first
+ dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed.
+ am_save_CPPFLAGS="$CPPFLAGS"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
+
+ AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [
+ am_cv_func_iconv="no, consider installing GNU libiconv"
+ am_cv_lib_iconv=no
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <stdlib.h>
+#include <iconv.h>
+ ]],
+ [[iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);]])],
+ [am_cv_func_iconv=yes])
+ if test "$am_cv_func_iconv" != yes; then
+ am_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBICONV"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <stdlib.h>
+#include <iconv.h>
+ ]],
+ [[iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);]])],
+ [am_cv_lib_iconv=yes]
+ [am_cv_func_iconv=yes])
+ LIBS="$am_save_LIBS"
+ fi
+ ])
+ if test "$am_cv_func_iconv" = yes; then
+ AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [
+ dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11,
+ dnl Solaris 10.
+ am_save_LIBS="$LIBS"
+ if test $am_cv_lib_iconv = yes; then
+ LIBS="$LIBS $LIBICONV"
+ fi
+ am_cv_func_iconv_works=no
+ for ac_iconv_const in '' 'const'; do
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <iconv.h>
+#include <string.h>
+
+#ifndef ICONV_CONST
+# define ICONV_CONST $ac_iconv_const
+#endif
+ ]],
+ [[int result = 0;
+ /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+ returns. */
+ {
+ iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+ if (cd_utf8_to_88591 != (iconv_t)(-1))
+ {
+ static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */
+ char buf[10];
+ ICONV_CONST char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_utf8_to_88591,
+ &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ result |= 1;
+ iconv_close (cd_utf8_to_88591);
+ }
+ }
+ /* Test against Solaris 10 bug: Failures are not distinguishable from
+ successful returns. */
+ {
+ iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+ if (cd_ascii_to_88591 != (iconv_t)(-1))
+ {
+ static ICONV_CONST char input[] = "\263";
+ char buf[10];
+ ICONV_CONST char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_ascii_to_88591,
+ &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ result |= 2;
+ iconv_close (cd_ascii_to_88591);
+ }
+ }
+ /* Test against AIX 6.1..7.1 bug: Buffer overrun. */
+ {
+ iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1");
+ if (cd_88591_to_utf8 != (iconv_t)(-1))
+ {
+ static ICONV_CONST char input[] = "\304";
+ static char buf[2] = { (char)0xDE, (char)0xAD };
+ ICONV_CONST char *inptr = input;
+ size_t inbytesleft = 1;
+ char *outptr = buf;
+ size_t outbytesleft = 1;
+ size_t res = iconv (cd_88591_to_utf8,
+ &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD)
+ result |= 4;
+ iconv_close (cd_88591_to_utf8);
+ }
+ }
+#if 0 /* This bug could be worked around by the caller. */
+ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */
+ {
+ iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+ if (cd_88591_to_utf8 != (iconv_t)(-1))
+ {
+ static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+ char buf[50];
+ ICONV_CONST char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_88591_to_utf8,
+ &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if ((int)res > 0)
+ result |= 8;
+ iconv_close (cd_88591_to_utf8);
+ }
+ }
+#endif
+ /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+ provided. */
+ if (/* Try standardized names. */
+ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+ /* Try IRIX, OSF/1 names. */
+ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+ /* Try AIX names. */
+ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+ /* Try HP-UX names. */
+ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+ result |= 16;
+ return result;
+]])],
+ [am_cv_func_iconv_works=yes], ,
+ [case "$host_os" in
+ aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+ *) am_cv_func_iconv_works="guessing yes" ;;
+ esac])
+ test "$am_cv_func_iconv_works" = no || break
+ done
+ LIBS="$am_save_LIBS"
+ ])
+ case "$am_cv_func_iconv_works" in
+ *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+ *) am_func_iconv=yes ;;
+ esac
+ else
+ am_func_iconv=no am_cv_lib_iconv=no
+ fi
+ if test "$am_func_iconv" = yes; then
+ AC_DEFINE([HAVE_ICONV], [1],
+ [Define if you have the iconv() function and it works.])
+ fi
+ if test "$am_cv_lib_iconv" = yes; then
+ AC_MSG_CHECKING([how to link with libiconv])
+ AC_MSG_RESULT([$LIBICONV])
+ else
+ dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
+ dnl either.
+ CPPFLAGS="$am_save_CPPFLAGS"
+ LIBICONV=
+ LTLIBICONV=
+ fi
+ AC_SUBST([LIBICONV])
+ AC_SUBST([LTLIBICONV])
+])
+
+dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to
+dnl avoid warnings like
+dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required".
+dnl This is tricky because of the way 'aclocal' is implemented:
+dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN.
+dnl Otherwise aclocal's initial scan pass would miss the macro definition.
+dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions.
+dnl Otherwise aclocal would emit many "Use of uninitialized value $1"
+dnl warnings.
+m4_define([gl_iconv_AC_DEFUN],
+ m4_version_prereq([2.64],
+ [[AC_DEFUN_ONCE(
+ [$1], [$2])]],
+ [m4_ifdef([gl_00GNULIB],
+ [[AC_DEFUN_ONCE(
+ [$1], [$2])]],
+ [[AC_DEFUN(
+ [$1], [$2])]])]))
+gl_iconv_AC_DEFUN([AM_ICONV],
+[
+ AM_ICONV_LINK
+ if test "$am_cv_func_iconv" = yes; then
+ AC_MSG_CHECKING([for iconv declaration])
+ AC_CACHE_VAL([am_cv_proto_iconv], [
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+ ]],
+ [[]])],
+ [am_cv_proto_iconv_arg1=""],
+ [am_cv_proto_iconv_arg1="const"])
+ am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+ am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+ AC_MSG_RESULT([
+ $am_cv_proto_iconv])
+ AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1],
+ [Define as const if the declaration of iconv() needs const.])
+ dnl Also substitute ICONV_CONST in the gnulib generated <iconv.h>.
+ m4_ifdef([gl_ICONV_H_DEFAULTS],
+ [AC_REQUIRE([gl_ICONV_H_DEFAULTS])
+ if test -n "$am_cv_proto_iconv_arg1"; then
+ ICONV_CONST="const"
+ fi
+ ])
+ fi
+])
+
+# intlmacosx.m4 serial 5 (gettext-0.18.2)
+dnl Copyright (C) 2004-2014, 2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Checks for special options needed on Mac OS X.
+dnl Defines INTL_MACOSX_LIBS.
+AC_DEFUN([gt_INTL_MACOSX],
+[
+ dnl Check for API introduced in Mac OS X 10.2.
+ AC_CACHE_CHECK([for CFPreferencesCopyAppValue],
+ [gt_cv_func_CFPreferencesCopyAppValue],
+ [gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <CoreFoundation/CFPreferences.h>]],
+ [[CFPreferencesCopyAppValue(NULL, NULL)]])],
+ [gt_cv_func_CFPreferencesCopyAppValue=yes],
+ [gt_cv_func_CFPreferencesCopyAppValue=no])
+ LIBS="$gt_save_LIBS"])
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+ AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1],
+ [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
+ fi
+ dnl Check for API introduced in Mac OS X 10.3.
+ AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent],
+ [gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <CoreFoundation/CFLocale.h>]],
+ [[CFLocaleCopyCurrent();]])],
+ [gt_cv_func_CFLocaleCopyCurrent=yes],
+ [gt_cv_func_CFLocaleCopyCurrent=no])
+ LIBS="$gt_save_LIBS"])
+ if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+ AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1],
+ [Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework.])
+ fi
+ INTL_MACOSX_LIBS=
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+ INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+ fi
+ AC_SUBST([INTL_MACOSX_LIBS])
+])
+
+# lib-ld.m4 serial 6
+dnl Copyright (C) 1996-2003, 2009-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Subroutines of libtool.m4,
+dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid
+dnl collision with libtool.m4.
+
+dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no.
+AC_DEFUN([AC_LIB_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld],
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ acl_cv_prog_gnu_ld=yes
+ ;;
+*)
+ acl_cv_prog_gnu_ld=no
+ ;;
+esac])
+with_gnu_ld=$acl_cv_prog_gnu_ld
+])
+
+dnl From libtool-2.4. Sets the variable LD.
+AC_DEFUN([AC_LIB_PROG_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+
+AC_ARG_WITH([gnu-ld],
+ [AS_HELP_STRING([--with-gnu-ld],
+ [assume the C compiler uses GNU ld [default=no]])],
+ [test "$withval" = no || with_gnu_ld=yes],
+ [with_gnu_ld=no])dnl
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+ # contains only /bin. Note that ksh looks also at the FPATH variable,
+ # so we have to set that as well for the test.
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ || PATH_SEPARATOR=';'
+ }
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by $CC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]]* | ?:[[\\/]]*)
+ re_direlt='/[[^/]][[^/]]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'`
+ while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL([acl_cv_path_LD],
+[if test -z "$LD"; then
+ acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$acl_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ acl_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$acl_save_ifs"
+else
+ acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+ AC_MSG_RESULT([$LD])
+else
+ AC_MSG_RESULT([no])
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_LIB_PROG_LD_GNU
+])
+
+# lib-link.m4 serial 26 (gettext-0.18.2)
+dnl Copyright (C) 2001-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ([2.54])
+
+dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
+dnl augments the CPPFLAGS variable.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+ pushdef([Name],[m4_translit([$1],[./+-], [____])])
+ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+ AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
+ AC_LIB_LINKFLAGS_BODY([$1], [$2])
+ ac_cv_lib[]Name[]_libs="$LIB[]NAME"
+ ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
+ ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
+ ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX"
+ ])
+ LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+ LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+ INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+ LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+ AC_SUBST([LIB]NAME)
+ AC_SUBST([LTLIB]NAME)
+ AC_SUBST([LIB]NAME[_PREFIX])
+ dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
+ dnl results of this search when this library appears as a dependency.
+ HAVE_LIB[]NAME=yes
+ popdef([NAME])
+ popdef([Name])
+])
+
+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message])
+dnl searches for libname and the libraries corresponding to explicit and
+dnl implicit dependencies, together with the specified include files and
+dnl the ability to compile and link the specified testcode. The missing-message
+dnl defaults to 'no' and may contain additional hints for the user.
+dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME}
+dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
+dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+ pushdef([Name],[m4_translit([$1],[./+-], [____])])
+ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+
+ dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
+ dnl accordingly.
+ AC_LIB_LINKFLAGS_BODY([$1], [$2])
+
+ dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
+ dnl because if the user has installed lib[]Name and not disabled its use
+ dnl via --without-lib[]Name-prefix, he wants to use it.
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+
+ AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
+ ac_save_LIBS="$LIBS"
+ dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS,
+ dnl because these -l options might require -L options that are present in
+ dnl LIBS. -l options benefit only from the -L options listed before it.
+ dnl Otherwise, add it to the front of LIBS, because it may be a static
+ dnl library that depends on another static library that is present in LIBS.
+ dnl Static libraries benefit only from the static libraries listed after
+ dnl it.
+ case " $LIB[]NAME" in
+ *" -l"*) LIBS="$LIBS $LIB[]NAME" ;;
+ *) LIBS="$LIB[]NAME $LIBS" ;;
+ esac
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([[$3]], [[$4]])],
+ [ac_cv_lib[]Name=yes],
+ [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])'])
+ LIBS="$ac_save_LIBS"
+ ])
+ if test "$ac_cv_lib[]Name" = yes; then
+ HAVE_LIB[]NAME=yes
+ AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.])
+ AC_MSG_CHECKING([how to link with lib[]$1])
+ AC_MSG_RESULT([$LIB[]NAME])
+ else
+ HAVE_LIB[]NAME=no
+ dnl If $LIB[]NAME didn't lead to a usable library, we don't need
+ dnl $INC[]NAME either.
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ LIB[]NAME=
+ LTLIB[]NAME=
+ LIB[]NAME[]_PREFIX=
+ fi
+ AC_SUBST([HAVE_LIB]NAME)
+ AC_SUBST([LIB]NAME)
+ AC_SUBST([LTLIB]NAME)
+ AC_SUBST([LIB]NAME[_PREFIX])
+ popdef([NAME])
+ popdef([Name])
+])
+
+dnl Determine the platform dependent parameters needed to use rpath:
+dnl acl_libext,
+dnl acl_shlibext,
+dnl acl_libname_spec,
+dnl acl_library_names_spec,
+dnl acl_hardcode_libdir_flag_spec,
+dnl acl_hardcode_libdir_separator,
+dnl acl_hardcode_direct,
+dnl acl_hardcode_minus_L.
+AC_DEFUN([AC_LIB_RPATH],
+[
+ dnl Tell automake >= 1.10 to complain if config.rpath is missing.
+ m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
+ AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS
+ AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host
+ AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
+ AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [
+ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+ . ./conftest.sh
+ rm -f ./conftest.sh
+ acl_cv_rpath=done
+ ])
+ wl="$acl_cv_wl"
+ acl_libext="$acl_cv_libext"
+ acl_shlibext="$acl_cv_shlibext"
+ acl_libname_spec="$acl_cv_libname_spec"
+ acl_library_names_spec="$acl_cv_library_names_spec"
+ acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+ acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+ acl_hardcode_direct="$acl_cv_hardcode_direct"
+ acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
+ dnl Determine whether the user wants rpath handling at all.
+ AC_ARG_ENABLE([rpath],
+ [ --disable-rpath do not hardcode runtime library paths],
+ :, enable_rpath=yes)
+])
+
+dnl AC_LIB_FROMPACKAGE(name, package)
+dnl declares that libname comes from the given package. The configure file
+dnl will then not have a --with-libname-prefix option but a
+dnl --with-package-prefix option. Several libraries can come from the same
+dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar
+dnl macro call that searches for libname.
+AC_DEFUN([AC_LIB_FROMPACKAGE],
+[
+ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+ define([acl_frompackage_]NAME, [$2])
+ popdef([NAME])
+ pushdef([PACK],[$2])
+ pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+ define([acl_libsinpackage_]PACKUP,
+ m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1])
+ popdef([PACKUP])
+ popdef([PACK])
+])
+
+dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
+dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found
+dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+ pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])])
+ pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+ pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])])
+ dnl Autoconf >= 2.61 supports dots in --with options.
+ pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[m4_translit(PACK,[.],[_])],PACK)])
+ dnl By default, look in $includedir and $libdir.
+ use_additional=yes
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ AC_ARG_WITH(P_A_C_K[-prefix],
+[[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib
+ --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]],
+[
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ if test "$acl_libdirstem2" != "$acl_libdirstem" \
+ && ! test -d "$withval/$acl_libdirstem"; then
+ additional_libdir="$withval/$acl_libdirstem2"
+ fi
+ fi
+ fi
+])
+ dnl Search the library and its dependencies in $additional_libdir and
+ dnl $LDFLAGS. Using breadth-first-seach.
+ LIB[]NAME=
+ LTLIB[]NAME=
+ INC[]NAME=
+ LIB[]NAME[]_PREFIX=
+ dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been
+ dnl computed. So it has to be reset here.
+ HAVE_LIB[]NAME=
+ rpathdirs=
+ ltrpathdirs=
+ names_already_handled=
+ names_next_round='$1 $2'
+ while test -n "$names_next_round"; do
+ names_this_round="$names_next_round"
+ names_next_round=
+ for name in $names_this_round; do
+ already_handled=
+ for n in $names_already_handled; do
+ if test "$n" = "$name"; then
+ already_handled=yes
+ break
+ fi
+ done
+ if test -z "$already_handled"; then
+ names_already_handled="$names_already_handled $name"
+ dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
+ dnl or AC_LIB_HAVE_LINKFLAGS call.
+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'`
+ eval value=\"\$HAVE_LIB$uppername\"
+ if test -n "$value"; then
+ if test "$value" = yes; then
+ eval value=\"\$LIB$uppername\"
+ test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
+ eval value=\"\$LTLIB$uppername\"
+ test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
+ else
+ dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
+ dnl that this library doesn't exist. So just drop it.
+ :
+ fi
+ else
+ dnl Search the library lib$name in $additional_libdir and $LDFLAGS
+ dnl and the already constructed $LIBNAME/$LTLIBNAME.
+ found_dir=
+ found_la=
+ found_so=
+ found_a=
+ eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
+ if test -n "$acl_shlibext"; then
+ shrext=".$acl_shlibext" # typically: shrext=.so
+ else
+ shrext=
+ fi
+ if test $use_additional = yes; then
+ dir="$additional_libdir"
+ dnl The same code as in the loop below:
+ dnl First look for a shared library.
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ dnl Then look for a static library.
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ for x in $LDFLAGS $LTLIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ case "$x" in
+ -L*)
+ dir=`echo "X$x" | sed -e 's/^X-L//'`
+ dnl First look for a shared library.
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ dnl Then look for a static library.
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ ;;
+ esac
+ if test "X$found_dir" != "X"; then
+ break
+ fi
+ done
+ fi
+ if test "X$found_dir" != "X"; then
+ dnl Found the library.
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
+ if test "X$found_so" != "X"; then
+ dnl Linking with a shared library. We attempt to hardcode its
+ dnl directory into the executable's runpath, unless it's the
+ dnl standard /usr/lib.
+ if test "$enable_rpath" = no \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
+ dnl No hardcoding is needed.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ dnl Use an explicit option to hardcode DIR into the resulting
+ dnl binary.
+ dnl Potentially add DIR to ltrpathdirs.
+ dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $found_dir"
+ fi
+ dnl The hardcoding into $LIBNAME is system dependent.
+ if test "$acl_hardcode_direct" = yes; then
+ dnl Using DIR/libNAME.so during linking hardcodes DIR into the
+ dnl resulting binary.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ dnl Use an explicit option to hardcode DIR into the resulting
+ dnl binary.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ dnl Potentially add DIR to rpathdirs.
+ dnl The rpathdirs will be appended to $LIBNAME at the end.
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $found_dir"
+ fi
+ else
+ dnl Rely on "-L$found_dir".
+ dnl But don't add it if it's already contained in the LDFLAGS
+ dnl or the already constructed $LIBNAME
+ haveit=
+ for x in $LDFLAGS $LIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
+ fi
+ if test "$acl_hardcode_minus_L" != no; then
+ dnl FIXME: Not sure whether we should use
+ dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+ dnl here.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH
+ dnl here, because this doesn't fit in flags passed to the
+ dnl compiler. So give up. No hardcoding. This affects only
+ dnl very old systems.
+ dnl FIXME: Not sure whether we should use
+ dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+ dnl here.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+ fi
+ fi
+ fi
+ fi
+ else
+ if test "X$found_a" != "X"; then
+ dnl Linking with a static library.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
+ else
+ dnl We shouldn't come here, but anyway it's good to have a
+ dnl fallback.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
+ fi
+ fi
+ dnl Assume the include files are nearby.
+ additional_includedir=
+ case "$found_dir" in
+ */$acl_libdirstem | */$acl_libdirstem/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+ if test "$name" = '$1'; then
+ LIB[]NAME[]_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ */$acl_libdirstem2 | */$acl_libdirstem2/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+ if test "$name" = '$1'; then
+ LIB[]NAME[]_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ esac
+ if test "X$additional_includedir" != "X"; then
+ dnl Potentially add $additional_includedir to $INCNAME.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/include,
+ dnl 2. if it's /usr/local/include and we are using GCC on Linux,
+ dnl 3. if it's already present in $CPPFLAGS or the already
+ dnl constructed $INCNAME,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ for x in $CPPFLAGS $INC[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ dnl Really add $additional_includedir to $INCNAME.
+ INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ fi
+ dnl Look for dependencies.
+ if test -n "$found_la"; then
+ dnl Read the .la file. It defines the variables
+ dnl dlname, library_names, old_library, dependency_libs, current,
+ dnl age, revision, installed, dlopen, dlpreopen, libdir.
+ save_libdir="$libdir"
+ case "$found_la" in
+ */* | *\\*) . "$found_la" ;;
+ *) . "./$found_la" ;;
+ esac
+ libdir="$save_libdir"
+ dnl We use only dependency_libs.
+ for dep in $dependency_libs; do
+ case "$dep" in
+ -L*)
+ additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+ dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/lib,
+ dnl 2. if it's /usr/local/lib and we are using GCC on Linux,
+ dnl 3. if it's already present in $LDFLAGS or the already
+ dnl constructed $LIBNAME,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
+ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
+ haveit=
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
+ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ haveit=
+ for x in $LDFLAGS $LIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LIBNAME.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
+ fi
+ fi
+ haveit=
+ for x in $LDFLAGS $LTLIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LTLIBNAME.
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ ;;
+ -R*)
+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
+ if test "$enable_rpath" != no; then
+ dnl Potentially add DIR to rpathdirs.
+ dnl The rpathdirs will be appended to $LIBNAME at the end.
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ dnl Potentially add DIR to ltrpathdirs.
+ dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $dir"
+ fi
+ fi
+ ;;
+ -l*)
+ dnl Handle this in the next round.
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+ ;;
+ *.la)
+ dnl Handle this in the next round. Throw away the .la's
+ dnl directory; it is already contained in a preceding -L
+ dnl option.
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+ ;;
+ *)
+ dnl Most likely an immediate library name.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
+ ;;
+ esac
+ done
+ fi
+ else
+ dnl Didn't find the library; assume it is in the system directories
+ dnl known to the linker and runtime loader. (All the system
+ dnl directories known to the linker should also be known to the
+ dnl runtime loader, otherwise the system is severely misconfigured.)
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
+ fi
+ fi
+ fi
+ done
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n "$acl_hardcode_libdir_separator"; then
+ dnl Weird platform: only the last -rpath option counts, the user must
+ dnl pass all path elements in one option. We can arrange that for a
+ dnl single library, but not when more than one $LIBNAMEs are used.
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+ done
+ dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl.
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+ else
+ dnl The -rpath options are cumulative.
+ for found_dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$found_dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+ done
+ fi
+ fi
+ if test "X$ltrpathdirs" != "X"; then
+ dnl When using libtool, the option that works for both libraries and
+ dnl executables is -R. The -R options are cumulative.
+ for found_dir in $ltrpathdirs; do
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
+ done
+ fi
+ popdef([P_A_C_K])
+ popdef([PACKLIBS])
+ popdef([PACKUP])
+ popdef([PACK])
+ popdef([NAME])
+])
+
+dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
+dnl unless already present in VAR.
+dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
+dnl contains two or three consecutive elements that belong together.
+AC_DEFUN([AC_LIB_APPENDTOVAR],
+[
+ for element in [$2]; do
+ haveit=
+ for x in $[$1]; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ [$1]="${[$1]}${[$1]:+ }$element"
+ fi
+ done
+])
+
+dnl For those cases where a variable contains several -L and -l options
+dnl referring to unknown libraries and directories, this macro determines the
+dnl necessary additional linker options for the runtime path.
+dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL])
+dnl sets LDADDVAR to linker options needed together with LIBSVALUE.
+dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed,
+dnl otherwise linking without libtool is assumed.
+AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
+[
+ AC_REQUIRE([AC_LIB_RPATH])
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ $1=
+ if test "$enable_rpath" != no; then
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ dnl Use an explicit option to hardcode directories into the resulting
+ dnl binary.
+ rpathdirs=
+ next=
+ for opt in $2; do
+ if test -n "$next"; then
+ dir="$next"
+ dnl No need to hardcode the standard /usr/lib.
+ if test "X$dir" != "X/usr/$acl_libdirstem" \
+ && test "X$dir" != "X/usr/$acl_libdirstem2"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ next=
+ else
+ case $opt in
+ -L) next=yes ;;
+ -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'`
+ dnl No need to hardcode the standard /usr/lib.
+ if test "X$dir" != "X/usr/$acl_libdirstem" \
+ && test "X$dir" != "X/usr/$acl_libdirstem2"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ next= ;;
+ *) next= ;;
+ esac
+ fi
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n ""$3""; then
+ dnl libtool is used for linking. Use -R options.
+ for dir in $rpathdirs; do
+ $1="${$1}${$1:+ }-R$dir"
+ done
+ else
+ dnl The linker is used for linking directly.
+ if test -n "$acl_hardcode_libdir_separator"; then
+ dnl Weird platform: only the last -rpath option counts, the user
+ dnl must pass all path elements in one option.
+ alldirs=
+ for dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ $1="$flag"
+ else
+ dnl The -rpath options are cumulative.
+ for dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ $1="${$1}${$1:+ }$flag"
+ done
+ fi
+ fi
+ fi
+ fi
+ fi
+ AC_SUBST([$1])
+])
+
+# lib-prefix.m4 serial 7 (gettext-0.18)
+dnl Copyright (C) 2001-2005, 2008-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
+dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
+dnl require excessive bracketing.
+ifdef([AC_HELP_STRING],
+[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
+[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
+
+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
+dnl to access previously installed libraries. The basic assumption is that
+dnl a user will want packages to use other packages he previously installed
+dnl with the same --prefix option.
+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
+dnl libraries, but is otherwise very convenient.
+AC_DEFUN([AC_LIB_PREFIX],
+[
+ AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ dnl By default, look in $includedir and $libdir.
+ use_additional=yes
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ AC_LIB_ARG_WITH([lib-prefix],
+[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+ --without-lib-prefix don't search for libraries in includedir and libdir],
+[
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ fi
+ fi
+])
+ if test $use_additional = yes; then
+ dnl Potentially add $additional_includedir to $CPPFLAGS.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/include,
+ dnl 2. if it's already present in $CPPFLAGS,
+ dnl 3. if it's /usr/local/include and we are using GCC on Linux,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ for x in $CPPFLAGS; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ dnl Really add $additional_includedir to $CPPFLAGS.
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ dnl Potentially add $additional_libdir to $LDFLAGS.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/lib,
+ dnl 2. if it's already present in $LDFLAGS,
+ dnl 3. if it's /usr/local/lib and we are using GCC on Linux,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+ haveit=
+ for x in $LDFLAGS; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux*) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LDFLAGS.
+ LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ fi
+])
+
+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
+dnl acl_final_exec_prefix, containing the values to which $prefix and
+dnl $exec_prefix will expand at the end of the configure script.
+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+[
+ dnl Unfortunately, prefix and exec_prefix get only finally determined
+ dnl at the end of configure.
+ if test "X$prefix" = "XNONE"; then
+ acl_final_prefix="$ac_default_prefix"
+ else
+ acl_final_prefix="$prefix"
+ fi
+ if test "X$exec_prefix" = "XNONE"; then
+ acl_final_exec_prefix='${prefix}'
+ else
+ acl_final_exec_prefix="$exec_prefix"
+ fi
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+ prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
+dnl variables prefix and exec_prefix bound to the values they will have
+dnl at the end of the configure script.
+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+[
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ $1
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_PREPARE_MULTILIB creates
+dnl - a variable acl_libdirstem, containing the basename of the libdir, either
+dnl "lib" or "lib64" or "lib/64",
+dnl - a variable acl_libdirstem2, as a secondary possible value for
+dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or
+dnl "lib/amd64".
+AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
+[
+ dnl There is no formal standard regarding lib and lib64.
+ dnl On glibc systems, the current practice is that on a system supporting
+ dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
+ dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine
+ dnl the compiler's default mode by looking at the compiler's library search
+ dnl path. If at least one of its elements ends in /lib64 or points to a
+ dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI.
+ dnl Otherwise we use the default, namely "lib".
+ dnl On Solaris systems, the current practice is that on a system supporting
+ dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
+ dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or
+ dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib.
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ acl_libdirstem=lib
+ acl_libdirstem2=
+ case "$host_os" in
+ solaris*)
+ dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment
+ dnl <http://docs.sun.com/app/docs/doc/816-5138/dev-env?l=en&a=view>.
+ dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link."
+ dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the
+ dnl symlink is missing, so we set acl_libdirstem2 too.
+ AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit],
+ [AC_EGREP_CPP([sixtyfour bits], [
+#ifdef _LP64
+sixtyfour bits
+#endif
+ ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no])
+ ])
+ if test $gl_cv_solaris_64bit = yes; then
+ acl_libdirstem=lib/64
+ case "$host_cpu" in
+ sparc*) acl_libdirstem2=lib/sparcv9 ;;
+ i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
+ esac
+ fi
+ ;;
+ *)
+ searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+ if test -n "$searchpath"; then
+ acl_save_IFS="${IFS= }"; IFS=":"
+ for searchdir in $searchpath; do
+ if test -d "$searchdir"; then
+ case "$searchdir" in
+ */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+ */../ | */.. )
+ # Better ignore directories of this form. They are misleading.
+ ;;
+ *) searchdir=`cd "$searchdir" && pwd`
+ case "$searchdir" in
+ */lib64 ) acl_libdirstem=lib64 ;;
+ esac ;;
+ esac
+ fi
+ done
+ IFS="$acl_save_IFS"
+ fi
+ ;;
+ esac
+ test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
+])
+
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+# Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+m4_define([_LT_COPYING], [dnl
+# Copyright (C) 2014 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program or library that is built
+# using GNU Libtool, you may include this file under the same
+# distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+])
+
+# serial 58 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+ [m4_default([$3],
+ [m4_fatal([Libtool version $1 or higher is required],
+ 63)])],
+ [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+ *\ * | *\ *)
+ AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK
+AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS=$ltmain
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_PREPARE_CC_BASENAME
+# -----------------------
+m4_defun([_LT_PREPARE_CC_BASENAME], [
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+ for cc_temp in @S|@*""; do
+ case $cc_temp in
+ compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+ distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+ done
+ func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+])# _LT_PREPARE_CC_BASENAME
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME,
+# but that macro is also expanded into generated libtool script, which
+# arranges for $SED and $ECHO to be set by different means.
+m4_defun([_LT_CC_BASENAME],
+[m4_require([_LT_PREPARE_CC_BASENAME])dnl
+AC_REQUIRE([_LT_DECL_SED])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+func_cc_basename $1
+cc_basename=$func_cc_basename_result
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+
+_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl
+dnl
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_WITH_SYSROOT])dnl
+m4_require([_LT_CMD_TRUNCATE])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options that allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}"; then
+ setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}"; then
+ setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test set != "${COLLECT_NAMES+set}"; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a '.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+old_CC=$CC
+old_CFLAGS=$CFLAGS
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ _LT_PATH_MAGIC
+ fi
+ ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PREPARE_SED_QUOTE_VARS
+# --------------------------
+# Define a few sed substitution that help us do robust quoting.
+m4_defun([_LT_PREPARE_SED_QUOTE_VARS],
+[# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+])
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from 'configure', and 'config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably,
+# 'config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain=$ac_aux_dir/ltmain.sh
+])# _LT_PROG_LTMAIN
+
+
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the 'libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+ [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+ [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+ [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+ [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+ [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME. Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+ [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+ [m4_ifval([$1], [$1], [$2])])
+ lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+ m4_ifval([$4],
+ [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+ lt_dict_add_subkey([lt_decl_dict], [$2],
+ [tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+ [0], [m4_fatal([$0: too few arguments: $#])],
+ [1], [m4_fatal([$0: too few arguments: $#: $1])],
+ [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+ [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+ [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[m4_assert([$# <= 2])dnl
+_$0(m4_quote(m4_default([$1], [[, ]])),
+ m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
+ m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
+m4_define([_lt_decl_varnames_tagged],
+[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+ m4_if([$2], [],
+ m4_quote(lt_decl_varnames),
+ m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+ lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to 'config.status' so that its
+# declaration there will have the same value as in 'configure'. VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly. In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+# <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+ [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags='_LT_TAGS'dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+# # Some comment about what VAR is for.
+# visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+ [description])))[]dnl
+m4_pushdef([_libtool_name],
+ m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+ [0], [_libtool_name=[$]$1],
+ [1], [_libtool_name=$lt_[]$1],
+ [2], [_libtool_name=$lt_[]$1],
+ [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the 'libtool'
+# script. Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+ m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into 'config.status', and then the shell code to quote escape them in
+# for loops in 'config.status'. Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+ dnl If the libtool generation code has been placed in $CONFIG_LT,
+ dnl instead of duplicating it all over again into config.status,
+ dnl then we will have config.status run $CONFIG_LT later, so it
+ dnl needs to know what name is stored there:
+ [AC_CONFIG_COMMANDS([libtool],
+ [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+ dnl If the libtool generation code is destined for config.status,
+ dnl expand the accumulated commands and init code now:
+ [AC_CONFIG_COMMANDS([libtool],
+ [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+\$[]1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[[\\\\\\\`\\"\\\$]]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[[\\\\\\\`\\"\\\$]]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+# _LT_GENERATED_FILE_INIT(FILE, [COMMENT])
+# ------------------------------------
+# Generate a child script FILE with all initialization necessary to
+# reuse the environment learned by the parent script, and make the
+# file executable. If COMMENT is supplied, it is inserted after the
+# '#!' sequence but before initialization text begins. After this
+# macro, additional text can be appended to FILE to form the body of
+# the child script. The macro ends with non-zero status if the
+# file could not be fully written (such as if the disk is full).
+m4_ifdef([AS_INIT_GENERATED],
+[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])],
+[m4_defun([_LT_GENERATED_FILE_INIT],
+[m4_require([AS_PREPARE])]dnl
+[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl
+[lt_write_fail=0
+cat >$1 <<_ASEOF || lt_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+$2
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$1 <<\_ASEOF || lt_write_fail=1
+AS_SHELL_SANITIZE
+_AS_PREPARE
+exec AS_MESSAGE_FD>&1
+_ASEOF
+test 0 = "$lt_write_fail" && chmod +x $1[]dnl
+m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+_LT_GENERATED_FILE_INIT(["$CONFIG_LT"],
+[# Run this file to recreate a libtool stub with the current configuration.])
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+lt_cl_silent=false
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+ echo
+ AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+'$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -q, --quiet do not print progress messages
+ -d, --debug don't remove temporary files
+
+Report bugs to <bug-libtool@gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2011 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test 0 != $[#]
+do
+ case $[1] in
+ --version | --v* | -V )
+ echo "$lt_cl_version"; exit 0 ;;
+ --help | --h* | -h )
+ echo "$lt_cl_help"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --quiet | --q* | --silent | --s* | -q )
+ lt_cl_silent=: ;;
+
+ -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try '$[0] --help' for more information.]) ;;
+
+ *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try '$[0] --help' for more information.]) ;;
+ esac
+ shift
+done
+
+if $lt_cl_silent; then
+ exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure. Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+lt_cl_success=:
+test yes = "$silent" &&
+ lt_config_lt_args="$lt_config_lt_args --quiet"
+exec AS_MESSAGE_LOG_FD>/dev/null
+$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+exec AS_MESSAGE_LOG_FD>>config.log
+$lt_cl_success || AS_EXIT(1)
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars. Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+ m4_if(_LT_TAG, [C], [
+ # See if we are running on zsh, and set the options that allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}"; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile=${ofile}T
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+# Generated automatically by $as_me ($PACKAGE) $VERSION
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit, 1996
+
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# Configured defaults for sys_lib_dlsearch_path munging.
+: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ cat <<'_LT_EOF' >> "$cfgfile"
+
+# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_PREPARE_MUNGE_PATH_LIST
+_LT_PREPARE_CC_BASENAME
+
+# ### END FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test set != "${COLLECT_NAMES+set}"; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+ _LT_PROG_LTMAIN
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '$q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ RM='$RM'
+ ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+# autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+ [C], [_LT_LANG(C)],
+ [C++], [_LT_LANG(CXX)],
+ [Go], [_LT_LANG(GO)],
+ [Java], [_LT_LANG(GCJ)],
+ [Fortran 77], [_LT_LANG(F77)],
+ [Fortran], [_LT_LANG(FC)],
+ [Windows Resource], [_LT_LANG(RC)],
+ [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+ [_LT_LANG($1)],
+ [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+ [LT_SUPPORTED_TAG([$1])dnl
+ m4_append([_LT_TAGS], [$1 ])dnl
+ m4_define([_LT_LANG_]$1[_enabled], [])dnl
+ _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+m4_ifndef([AC_PROG_GO], [
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_GO. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+m4_defun([AC_PROG_GO],
+[AC_LANG_PUSH(Go)dnl
+AC_ARG_VAR([GOC], [Go compiler command])dnl
+AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+AC_CHECK_TOOL(GOC, gccgo)
+if test -z "$GOC"; then
+ if test -n "$ac_tool_prefix"; then
+ AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo])
+ fi
+fi
+if test -z "$GOC"; then
+ AC_CHECK_PROG(GOC, gccgo, gccgo, false)
+fi
+])#m4_defun
+])#m4_ifndef
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [LT_LANG(CXX)],
+ [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+ [LT_LANG(F77)],
+ [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+ [LT_LANG(FC)],
+ [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [m4_ifdef([AC_PROG_GCJ],
+ [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+ m4_ifdef([A][M_PROG_GCJ],
+ [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+ m4_ifdef([LT_PROG_GCJ],
+ [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([AC_PROG_GO],
+ [LT_LANG(GO)],
+ [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+ [LT_LANG(RC)],
+ [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+dnl AC_DEFUN([AC_LIBTOOL_RC], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+ case $host_os in
+ rhapsody* | darwin*)
+ AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+ AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+ AC_CHECK_TOOL([LIPO], [lipo], [:])
+ AC_CHECK_TOOL([OTOOL], [otool], [:])
+ AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+ _LT_DECL([], [DSYMUTIL], [1],
+ [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+ _LT_DECL([], [NMEDIT], [1],
+ [Tool to change global to local symbols on Mac OS X])
+ _LT_DECL([], [LIPO], [1],
+ [Tool to manipulate fat objects and archives on Mac OS X])
+ _LT_DECL([], [OTOOL], [1],
+ [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+ _LT_DECL([], [OTOOL64], [1],
+ [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+ AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+ [lt_cv_apple_cc_single_mod=no
+ if test -z "$LT_MULTI_MODULE"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi_module to the
+ # link flags.
+ rm -rf libconftest.dylib*
+ echo "int foo(void){return 1;}" > conftest.c
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+ _lt_result=$?
+ # If there is a non-empty error log, and "single_module"
+ # appears in it, assume the flag caused a linker warning
+ if test -s conftest.err && $GREP single_module conftest.err; then
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ # Otherwise, if the output was created with a 0 exit code from
+ # the compiler, it worked.
+ elif test -f libconftest.dylib && test 0 = "$_lt_result"; then
+ lt_cv_apple_cc_single_mod=yes
+ else
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ fi
+ rm -rf libconftest.dylib*
+ rm -f conftest.*
+ fi])
+
+ AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+ [lt_cv_ld_exported_symbols_list],
+ [lt_cv_ld_exported_symbols_list=no
+ save_LDFLAGS=$LDFLAGS
+ echo "_main" > conftest.sym
+ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+ [lt_cv_ld_exported_symbols_list=yes],
+ [lt_cv_ld_exported_symbols_list=no])
+ LDFLAGS=$save_LDFLAGS
+ ])
+
+ AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
+ [lt_cv_ld_force_load=no
+ cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
+ echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
+ $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
+ echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
+ $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
+ cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+ _lt_result=$?
+ if test -s conftest.err && $GREP force_load conftest.err; then
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then
+ lt_cv_ld_force_load=yes
+ else
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ fi
+ rm -f conftest.err libconftest.a conftest conftest.c
+ rm -rf conftest.dSYM
+ ])
+ case $host_os in
+ rhapsody* | darwin1.[[012]])
+ _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
+ darwin1.*)
+ _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+ darwin*) # darwin 5.x on
+ # if running on 10.5 or later, the deployment target defaults
+ # to the OS version, if on x86, and 10.4, the deployment
+ # target defaults to 10.4. Don't you love it?
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+ 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+ _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+ 10.[[012]][[,.]]*)
+ _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+ 10.*)
+ _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+ esac
+ ;;
+ esac
+ if test yes = "$lt_cv_apple_cc_single_mod"; then
+ _lt_dar_single_mod='$single_module'
+ fi
+ if test yes = "$lt_cv_ld_exported_symbols_list"; then
+ _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym'
+ else
+ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib'
+ fi
+ if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then
+ _lt_dsymutil='~$DSYMUTIL $lib || :'
+ else
+ _lt_dsymutil=
+ fi
+ ;;
+ esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES([TAG])
+# ---------------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+ m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ if test yes = "$lt_cv_ld_force_load"; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+ m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
+ [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes])
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+ fi
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined
+ case $cc_basename in
+ ifort*|nagfor*) _lt_dar_can_shared=yes ;;
+ *) _lt_dar_can_shared=$GCC ;;
+ esac
+ if test yes = "$_lt_dar_can_shared"; then
+ output_verbose_link_cmd=func_echo_all
+ _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+ _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+ _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+ m4_if([$1], [CXX],
+[ if test yes != "$lt_cv_apple_cc_single_mod"; then
+ _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
+ fi
+],[])
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX([TAGNAME])
+# ----------------------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+# Store the results from the different compilers for each TAGNAME.
+# Allow to override them for all tags through lt_cv_aix_libpath.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+if test set = "${lt_cv_aix_libpath+set}"; then
+ aix_libpath=$lt_cv_aix_libpath
+else
+ AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
+ [AC_LINK_IFELSE([AC_LANG_PROGRAM],[
+ lt_aix_libpath_sed='[
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\([^ ]*\) *$/\1/
+ p
+ }
+ }]'
+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ # Check for a 64-bit object if we didn't find anything.
+ if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ fi],[])
+ if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib
+ fi
+ ])
+ aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
+fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[m4_divert_text([M4SH-INIT], [$1
+])])# _LT_SHELL_INIT
+
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Find how we can fake an echo command that does not interpret backslash.
+# In particular, with Autoconf 2.60 or later we add some code to the start
+# of the generated configure script that will find a shell with a builtin
+# printf (that we can use as an echo command).
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+AC_MSG_CHECKING([how to print strings])
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='printf %s\n'
+else
+ # Use this function as a fallback that always works.
+ func_fallback_echo ()
+ {
+ eval 'cat <<_LTECHO_EOF
+$[]1
+_LTECHO_EOF'
+ }
+ ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+ $ECHO "$*"
+}
+
+case $ECHO in
+ printf*) AC_MSG_RESULT([printf]) ;;
+ print*) AC_MSG_RESULT([print -r]) ;;
+ *) AC_MSG_RESULT([cat]) ;;
+esac
+
+m4_ifdef([_AS_DETECT_SUGGESTED],
+[_AS_DETECT_SUGGESTED([
+ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || (
+ ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+ PATH=/empty FPATH=/empty; export PATH FPATH
+ test "X`printf %s $ECHO`" = "X$ECHO" \
+ || test "X`print -r -- $ECHO`" = "X$ECHO" )])])
+
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_WITH_SYSROOT
+# ----------------
+AC_DEFUN([_LT_WITH_SYSROOT],
+[AC_MSG_CHECKING([for sysroot])
+AC_ARG_WITH([sysroot],
+[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@],
+ [Search for dependent libraries within DIR (or the compiler's sysroot
+ if not specified).])],
+[], [with_sysroot=no])
+
+dnl lt_sysroot will always be passed unquoted. We quote it here
+dnl in case the user passed a directory name.
+lt_sysroot=
+case $with_sysroot in #(
+ yes)
+ if test yes = "$GCC"; then
+ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+ fi
+ ;; #(
+ /*)
+ lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+ ;; #(
+ no|'')
+ ;; #(
+ *)
+ AC_MSG_RESULT([$with_sysroot])
+ AC_MSG_ERROR([The sysroot must be an absolute path.])
+ ;;
+esac
+
+ AC_MSG_RESULT([${lt_sysroot:-no}])
+_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
+[dependent libraries, and where our libraries should be installed.])])
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+ [AS_HELP_STRING([--disable-libtool-lock],
+ [avoid locking (might break parallel builds)])])
+test no = "$enable_libtool_lock" || enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out what ABI is being produced by ac_compile, and set mode
+ # options accordingly.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE=32
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE=64
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly.
+ echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ if test yes = "$lt_cv_prog_gnu_ld"; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+mips64*-*linux*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly.
+ echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ emul=elf
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ emul="${emul}32"
+ ;;
+ *64-bit*)
+ emul="${emul}64"
+ ;;
+ esac
+ case `/usr/bin/file conftest.$ac_objext` in
+ *MSB*)
+ emul="${emul}btsmip"
+ ;;
+ *LSB*)
+ emul="${emul}ltsmip"
+ ;;
+ esac
+ case `/usr/bin/file conftest.$ac_objext` in
+ *N32*)
+ emul="${emul}n32"
+ ;;
+ esac
+ LD="${LD-ld} -m $emul"
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly. Note that the listed cases only cover the
+ # situations where additional linker options are needed (such as when
+ # doing 32-bit compilation for a host where ld defaults to 64-bit, or
+ # vice versa); the common cases where no linker options are needed do
+ # not appear in the list.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ case `/usr/bin/file conftest.o` in
+ *x86-64*)
+ LD="${LD-ld} -m elf32_x86_64"
+ ;;
+ *)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ esac
+ ;;
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS -belf"
+ AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+ [AC_LANG_PUSH(C)
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+ AC_LANG_POP])
+ if test yes != "$lt_cv_cc_needs_belf"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS=$SAVE_CFLAGS
+ fi
+ ;;
+*-*solaris*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*)
+ case $host in
+ i?86-*-solaris*|x86_64-*-solaris*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ sparc*-*-solaris*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ # GNU ld 2.21 introduced _sol2 emulations. Use them if available.
+ if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+ LD=${LD-ld}_sol2
+ fi
+ ;;
+ *)
+ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ LD="${LD-ld} -64"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+need_locks=$enable_libtool_lock
+])# _LT_ENABLE_LOCK
+
+
+# _LT_PROG_AR
+# -----------
+m4_defun([_LT_PROG_AR],
+[AC_CHECK_TOOLS(AR, [ar], false)
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
+
+AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
+ [lt_cv_ar_at_file=no
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
+ [echo conftest.$ac_objext > conftest.lst
+ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
+ AC_TRY_EVAL([lt_ar_try])
+ if test 0 -eq "$ac_status"; then
+ # Ensure the archiver fails upon bogus file names.
+ rm -f conftest.$ac_objext libconftest.a
+ AC_TRY_EVAL([lt_ar_try])
+ if test 0 -ne "$ac_status"; then
+ lt_cv_ar_at_file=@
+ fi
+ fi
+ rm -f conftest.* libconftest.a
+ ])
+ ])
+
+if test no = "$lt_cv_ar_at_file"; then
+ archiver_list_spec=
+else
+ archiver_list_spec=$lt_cv_ar_at_file
+fi
+_LT_DECL([], [archiver_list_spec], [1],
+ [How to feed a file listing to the archiver])
+])# _LT_PROG_AR
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[_LT_PROG_AR
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+ [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ bitrig* | openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
+fi
+
+case $host_os in
+ darwin*)
+ lock_old_archive_extraction=yes ;;
+ *)
+ lock_old_archive_extraction=no ;;
+esac
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+ [Commands used to build an old-style archive])
+_LT_DECL([], [lock_old_archive_extraction], [0],
+ [Whether to use a lock for old archive extraction])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ fi
+ $RM conftest*
+])
+
+if test yes = "[$]$2"; then
+ m4_if([$5], , :, [$5])
+else
+ m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ save_LDFLAGS=$LDFLAGS
+ LDFLAGS="$LDFLAGS $3"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&AS_MESSAGE_LOG_FD
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ else
+ $2=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS=$save_LDFLAGS
+])
+
+if test yes = "[$]$2"; then
+ m4_if([$4], , :, [$4])
+else
+ m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+ i=0
+ teststring=ABCD
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw* | cegcc*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ mint*)
+ # On MiNT this can take a long time and run out of memory.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ amigaos*)
+ # On AmigaOS with pdksh, this test takes hours, literally.
+ # So we just punt and use a minimum line length of 8192.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
+ # This has been around since 386BSD, at least. Likely further.
+ if test -x /sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+ elif test -x /usr/sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+ else
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ os2*)
+ # The test takes a long time on OS/2.
+ lt_cv_sys_max_cmd_len=8192
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+ if test -n "$lt_cv_sys_max_cmd_len" && \
+ test undefined != "$lt_cv_sys_max_cmd_len"; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test X`env echo "$teststring$teststring" 2>/dev/null` \
+ = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+ test 17 != "$i" # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+])
+if test -n "$lt_cv_sys_max_cmd_len"; then
+ AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+ AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+ [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test yes = "$cross_compiling"; then :
+ [$4]
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+[#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+/* When -fvisibility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}]
+_LT_EOF
+ if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then
+ (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) $1 ;;
+ x$lt_dlneed_uscore) $2 ;;
+ x$lt_dlunknown|x*) $3 ;;
+ esac
+ else :
+ # compilation failed
+ $3
+ fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test yes != "$enable_dlopen"; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen=load_add_on
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32* | cegcc*)
+ lt_cv_dlopen=LoadLibrary
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen=dlopen
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[
+ lt_cv_dlopen=dyld
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ])
+ ;;
+
+ tpf*)
+ # Don't try to run any link tests for TPF. We know it's impossible
+ # because TPF is a cross-compiler, and we know how we open DSOs.
+ lt_cv_dlopen=dlopen
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=no
+ ;;
+
+ *)
+ AC_CHECK_FUNC([shl_load],
+ [lt_cv_dlopen=shl_load],
+ [AC_CHECK_LIB([dld], [shl_load],
+ [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld],
+ [AC_CHECK_FUNC([dlopen],
+ [lt_cv_dlopen=dlopen],
+ [AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],
+ [AC_CHECK_LIB([svld], [dlopen],
+ [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld],
+ [AC_CHECK_LIB([dld], [dld_link],
+ [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld])
+ ])
+ ])
+ ])
+ ])
+ ])
+ ;;
+ esac
+
+ if test no = "$lt_cv_dlopen"; then
+ enable_dlopen=no
+ else
+ enable_dlopen=yes
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS=$CPPFLAGS
+ test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS=$LDFLAGS
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS=$LIBS
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ AC_CACHE_CHECK([whether a program can dlopen itself],
+ lt_cv_dlopen_self, [dnl
+ _LT_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+ lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+ ])
+
+ if test yes = "$lt_cv_dlopen_self"; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+ lt_cv_dlopen_self_static, [dnl
+ _LT_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+ lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
+ ])
+ fi
+
+ CPPFLAGS=$save_CPPFLAGS
+ LDFLAGS=$save_LDFLAGS
+ LIBS=$save_LIBS
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+ [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+ [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+ [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+ fi
+ fi
+ chmod u+w . 2>&AS_MESSAGE_LOG_FD
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+ [Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links=nottested
+if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then
+ # do not overwrite the value of need_locks provided by the user
+ AC_MSG_CHECKING([if we can lock with hard links])
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ AC_MSG_RESULT([$hard_links])
+ if test no = "$hard_links"; then
+ AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe])
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+ [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/",
+ [Define to the sub-directory where libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+ test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+ test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then
+
+ # We can hardcode non-existent directories.
+ if test no != "$_LT_TAGVAR(hardcode_direct, $1)" &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" &&
+ test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then
+ # Linking always hardcodes the temporary library directory.
+ _LT_TAGVAR(hardcode_action, $1)=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ _LT_TAGVAR(hardcode_action, $1)=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test relink = "$_LT_TAGVAR(hardcode_action, $1)" ||
+ test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test yes = "$shlibpath_overrides_runpath" ||
+ test no = "$enable_shared"; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+ [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP"; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ ;;
+ *)
+ AC_MSG_RESULT([no])
+ ;;
+ esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_PREPARE_MUNGE_PATH_LIST
+# ---------------------------
+# Make sure func_munge_path_list() is defined correctly.
+m4_defun([_LT_PREPARE_MUNGE_PATH_LIST],
+[[# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+# string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+# string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+# string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+# "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+# VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+ case x@S|@2 in
+ x)
+ ;;
+ *:)
+ eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\"
+ ;;
+ x:*)
+ eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\"
+ ;;
+ *::*)
+ eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+ eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\"
+ ;;
+ *)
+ eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\"
+ ;;
+ esac
+}
+]])# _LT_PREPARE_PATH_LIST
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_OBJDUMP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+ [], [
+if test yes = "$GCC"; then
+ case $host_os in
+ darwin*) lt_awk_arg='/^libraries:/,/LR/' ;;
+ *) lt_awk_arg='/^libraries:/' ;;
+ esac
+ case $host_os in
+ mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;;
+ *) lt_sed_strip_eq='s|=/|/|g' ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+ case $lt_search_path_spec in
+ *\;*)
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+ ;;
+ *)
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ esac
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary...
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ # ...but if some path component already ends with the multilib dir we assume
+ # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer).
+ case "$lt_multi_os_dir; $lt_search_path_spec " in
+ "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*)
+ lt_multi_os_dir=
+ ;;
+ esac
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir"
+ elif test -n "$lt_multi_os_dir"; then
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS = " "; FS = "/|\n";} {
+ lt_foo = "";
+ lt_count = 0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo = "/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+ if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+ # AWK program above erroneously prepends '/' to C:/dos/paths
+ # for these hosts.
+ case $host_os in
+ mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+ $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;;
+ esac
+ sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=.so
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+AC_ARG_VAR([LT_SYS_LIBRARY_PATH],
+[User-defined run-time library search path.])
+
+case $host_os in
+aix3*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='$libname$release$shared_ext$major'
+ ;;
+
+aix[[4-9]]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 supports IA64
+ library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line '#! .'. This would cause the generated library to
+ # depend on '.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[[01]] | aix4.[[01]].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # Using Import Files as archive members, it is possible to support
+ # filename-based versioning of shared library archives on AIX. While
+ # this would work for both with and without runtime linking, it will
+ # prevent static linking of such archives. So we do filename-based
+ # shared library versioning with .so extension only, which is used
+ # when both runtime linking and shared linking is enabled.
+ # Unfortunately, runtime linking may impact performance, so we do
+ # not want this to be the default eventually. Also, we use the
+ # versioned .so libs for executables only if there is the -brtl
+ # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+ # To allow for filename-based versioning support, we need to create
+ # libNAME.so.V as an archive file, containing:
+ # *) an Import File, referring to the versioned filename of the
+ # archive as well as the shared archive member, telling the
+ # bitwidth (32 or 64) of that shared object, and providing the
+ # list of exported symbols of that shared object, eventually
+ # decorated with the 'weak' keyword
+ # *) the shared object with the F_LOADONLY flag set, to really avoid
+ # it being seen by the linker.
+ # At run time we better use the real file rather than another symlink,
+ # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+ case $with_aix_soname,$aix_use_runtimelinking in
+ # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ aix,yes) # traditional libtool
+ dynamic_linker='AIX unversionable lib.so'
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ ;;
+ aix,no) # traditional AIX only
+ dynamic_linker='AIX lib.a[(]lib.so.V[)]'
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='$libname$release.a $libname.a'
+ soname_spec='$libname$release$shared_ext$major'
+ ;;
+ svr4,*) # full svr4 only
+ dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]"
+ library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+ # We do not specify a path in Import Files, so LIBPATH fires.
+ shlibpath_overrides_runpath=yes
+ ;;
+ *,yes) # both, prefer svr4
+ dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]"
+ library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+ # unpreferred sharedlib libNAME.a needs extra handling
+ postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+ postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+ # We do not specify a path in Import Files, so LIBPATH fires.
+ shlibpath_overrides_runpath=yes
+ ;;
+ *,no) # both, prefer aix
+ dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]"
+ library_names_spec='$libname$release.a $libname.a'
+ soname_spec='$libname$release$shared_ext$major'
+ # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+ postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+ postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+ ;;
+ esac
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='$libname$shared_ext'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[[45]]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+ version_type=windows
+ shrext_cmds=.dll
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$cc_basename in
+ yes,*)
+ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \$file`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+m4_if([$1], [],[
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
+ ;;
+ mingw* | cegcc*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ ;;
+
+ *,cl*)
+ # Native MSVC
+ libname_spec='$name'
+ soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+ library_names_spec='$libname.dll.lib'
+
+ case $build_os in
+ mingw*)
+ sys_lib_search_path_spec=
+ lt_save_ifs=$IFS
+ IFS=';'
+ for lt_path in $LIB
+ do
+ IFS=$lt_save_ifs
+ # Let DOS variable expansion print the short 8.3 style file name.
+ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+ done
+ IFS=$lt_save_ifs
+ # Convert to MSYS style.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
+ ;;
+ cygwin*)
+ # Convert to unix form, then to dos form, then back to unix form
+ # but this time dos style (no spaces!) so that the unix form looks
+ # like /cygdrive/c/PROGRA~1:/cygdr...
+ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ *)
+ sys_lib_search_path_spec=$LIB
+ if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+ # It is most probably a Windows format PATH.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # FIXME: find the short name or the path components, as spaces are
+ # common. (e.g. "Program Files" -> "PROGRA~1")
+ ;;
+ esac
+
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \$file`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
+ # Assume MSVC wrapper
+ library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib'
+ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+ soname_spec='$libname$release$major$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[[23]].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+haiku*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ dynamic_linker="$host_os runtime_loader"
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ if test 32 = "$HPUX_IA64_MODE"; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ sys_lib_dlsearch_path_spec=/usr/lib/hpux32
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ sys_lib_dlsearch_path_spec=/usr/lib/hpux64
+ fi
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+ postinstall_cmds='chmod 555 $lib'
+ # or fails outright, so override atomically:
+ install_override_mode=555
+ ;;
+
+interix[[3-9]]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test yes = "$lt_cv_prog_gnu_ld"; then
+ version_type=linux # correct to gnu/linux during the next big refactor
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='$libname$release$shared_ext$major'
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+ sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+linux*android*)
+ version_type=none # Android doesn't support versioned libraries.
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext'
+ soname_spec='$libname$release$shared_ext'
+ finish_cmds=
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ dynamic_linker='Android linker'
+ # Don't embed -rpath directories since the linker doesn't support them.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+
+ # Some binutils ld are patched to set DT_RUNPATH
+ AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath],
+ [lt_cv_shlibpath_overrides_runpath=no
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+ [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+ [lt_cv_shlibpath_overrides_runpath=yes])])
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+ ])
+ shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Ideally, we could use ldconfig to report *all* directores which are
+ # searched for libraries, however this is still not possible. Aside from not
+ # being certain /sbin/ldconfig is available, command
+ # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+ # even though it is searched at run-time. Try to do the best guess by
+ # appending ld.so.conf contents (and includes) to the search path.
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd* | bitrig*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec=/usr/lib
+ need_lib_prefix=no
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+ need_version=no
+ else
+ need_version=yes
+ fi
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+os2*)
+ libname_spec='$name'
+ version_type=windows
+ shrext_cmds=.dll
+ need_version=no
+ need_lib_prefix=no
+ # OS/2 can only load a DLL with a base name of 8 characters or less.
+ soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+ v=$($ECHO $release$versuffix | tr -d .-);
+ n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+ $ECHO $n$v`$shared_ext'
+ library_names_spec='${libname}_dll.$libext'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=BEGINLIBPATH
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ postinstall_cmds='base_file=`basename \$file`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='$libname$release$shared_ext$major'
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test yes = "$with_gnu_ld"; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec; then
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+ soname_spec='$libname$shared_ext.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=sco
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test yes = "$with_gnu_ld"; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test no = "$dynamic_linker" && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test yes = "$GCC"; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+ sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
+fi
+
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+ sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
+fi
+
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+ [Variables whose values should be saved in libtool wrapper scripts and
+ restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+ [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+ [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+ [[List of archive names. First name is the real one, the rest are links.
+ The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+ [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [install_override_mode], [1],
+ [Permission mode override for installation of shared libraries])
+_LT_DECL([], [postinstall_cmds], [2],
+ [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+ [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+ [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+ [[As "finish_cmds", except a single script fragment to be evaled but
+ not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+ [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+ [Compile-time system search path for libraries])
+_LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2],
+ [Detected run-time system search path for libraries])
+_LT_DECL([], [configure_time_lt_sys_library_path], [2],
+ [Explicit LT_SYS_LIBRARY_PATH set during ./configure time])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program that can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] | ?:[\\/]*])
+ lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD=$MAGIC_CMD
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word. This closes a longstanding sh security hole.
+ ac_dummy="m4_if([$2], , $PATH, [$2])"
+ for ac_dir in $ac_dummy; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$1"; then
+ lt_cv_path_MAGIC_CMD=$ac_dir/"$1"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS=$lt_save_ifs
+ MAGIC_CMD=$lt_save_MAGIC_CMD
+ ;;
+esac])
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+if test -n "$MAGIC_CMD"; then
+ AC_MSG_RESULT($MAGIC_CMD)
+else
+ AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+ [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program that can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+ else
+ MAGIC_CMD=:
+ fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PROG_ECHO_BACKSLASH])dnl
+
+AC_ARG_WITH([gnu-ld],
+ [AS_HELP_STRING([--with-gnu-ld],
+ [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+ [test no = "$withval" || with_gnu_ld=yes],
+ [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test yes = "$GCC"; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by $CC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return, which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]]* | ?:[[\\/]]*)
+ re_direlt='/[[^/]][[^/]]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD=$ac_prog
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test yes = "$with_gnu_ld"; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD=$ac_dir/$ac_prog
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test no != "$with_gnu_ld" && break
+ ;;
+ *)
+ test yes != "$with_gnu_ld" && break
+ ;;
+ esac
+ fi
+ done
+ IFS=$lt_save_ifs
+else
+ lt_cv_path_LD=$LD # Let the user override the test with a path.
+fi])
+LD=$lt_cv_path_LD
+if test -n "$LD"; then
+ AC_MSG_RESULT($LD)
+else
+ AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+# -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+ lt_cv_ld_reload_flag,
+ [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ if test yes != "$GCC"; then
+ reload_cmds=false
+ fi
+ ;;
+ darwin*)
+ if test yes = "$GCC"; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_TAGDECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_PATH_DD
+# -----------
+# find a working dd
+m4_defun([_LT_PATH_DD],
+[AC_CACHE_CHECK([for a working dd], [ac_cv_path_lt_DD],
+[printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+: ${lt_DD:=$DD}
+AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd],
+[if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+ cmp -s conftest.i conftest.out \
+ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=:
+fi])
+rm -f conftest.i conftest2.i conftest.out])
+])# _LT_PATH_DD
+
+
+# _LT_CMD_TRUNCATE
+# ----------------
+# find command to truncate a binary pipe
+m4_defun([_LT_CMD_TRUNCATE],
+[m4_require([_LT_PATH_DD])
+AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin],
+[printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+lt_cv_truncate_bin=
+if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+ cmp -s conftest.i conftest.out \
+ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1"
+fi
+rm -f conftest.i conftest2.i conftest.out
+test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"])
+_LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1],
+ [Command to truncate a binary pipe])
+])# _LT_CMD_TRUNCATE
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+# -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# 'unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# that responds to the $file_magic_cmd with a given extended regex.
+# If you have 'file' or equivalent on your system and you're not sure
+# whether 'pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi[[45]]*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ if ( file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ # Keep this pattern in sync with the one in func_win32_libid.
+ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+
+cegcc*)
+ # use the weaker test based on 'objdump'. See mingw*.
+ lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+haiku*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]']
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix[[3-9]]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd* | bitrig*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+os2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+])
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+ case $host_os in
+ mingw* | pw32*)
+ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+ want_nocaseglob=yes
+ else
+ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"`
+ fi
+ ;;
+ esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+ [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+ [Command to use when deplibs_check_method = "file_magic"])
+_LT_DECL([], [file_magic_glob], [1],
+ [How to find potential files when deplibs_check_method = "file_magic"])
+_LT_DECL([], [want_nocaseglob], [1],
+ [Find potential files using nocaseglob when deplibs_check_method = "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM=$NM
+else
+ lt_nm_to_check=${ac_tool_prefix}nm
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm=$ac_dir/$lt_tmp_nm
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the 'sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
+ case $build_os in
+ mingw*) lt_bad_file=conftest.nm/nofile ;;
+ *) lt_bad_file=/dev/null ;;
+ esac
+ case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
+ *$lt_bad_file* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break 2
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break 2
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS=$lt_save_ifs
+ done
+ : ${lt_cv_path_NM=no}
+fi])
+if test no != "$lt_cv_path_NM"; then
+ NM=$lt_cv_path_NM
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ if test -n "$DUMPBIN"; then :
+ # Let the user override the test.
+ else
+ AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
+ case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
+ *COFF*)
+ DUMPBIN="$DUMPBIN -symbols -headers"
+ ;;
+ *)
+ DUMPBIN=:
+ ;;
+ esac
+ fi
+ AC_SUBST([DUMPBIN])
+ if test : != "$DUMPBIN"; then
+ NM=$DUMPBIN
+ fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+ [lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD)
+ cat conftest.out >&AS_MESSAGE_LOG_FD
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+# --------------------------------
+# how to determine the name of the shared library
+# associated with a specific link library.
+# -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+m4_require([_LT_DECL_DLLTOOL])
+AC_CACHE_CHECK([how to associate runtime and link libraries],
+lt_cv_sharedlib_from_linklib_cmd,
+[lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+ # two different shell functions defined in ltmain.sh;
+ # decide which one to use based on capabilities of $DLLTOOL
+ case `$DLLTOOL --help 2>&1` in
+ *--identify-strict*)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+ ;;
+ *)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+ ;;
+ esac
+ ;;
+*)
+ # fallback: assume linklib IS sharedlib
+ lt_cv_sharedlib_from_linklib_cmd=$ECHO
+ ;;
+esac
+])
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+_LT_DECL([], [sharedlib_from_linklib_cmd], [1],
+ [Command to associate shared and link libraries])
+])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+
+
+# _LT_PATH_MANIFEST_TOOL
+# ----------------------
+# locate the manifest tool
+m4_defun([_LT_PATH_MANIFEST_TOOL],
+[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :)
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool],
+ [lt_cv_path_mainfest_tool=no
+ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD
+ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+ lt_cv_path_mainfest_tool=yes
+ fi
+ rm -f conftest*])
+if test yes != "$lt_cv_path_mainfest_tool"; then
+ MANIFEST_TOOL=:
+fi
+_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
+])# _LT_PATH_MANIFEST_TOOL
+
+
+# _LT_DLL_DEF_P([FILE])
+# ---------------------
+# True iff FILE is a Windows DLL '.def' file.
+# Keep in sync with func_dll_def_p in the libtool script
+AC_DEFUN([_LT_DLL_DEF_P],
+[dnl
+ test DEF = "`$SED -n dnl
+ -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace
+ -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments
+ -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl
+ -e q dnl Only consider the first "real" line
+ $1`" dnl
+])# _LT_DLL_DEF_P
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
+ # These system don't have libm, or don't need it
+ ;;
+*-ncr-sysv4.3*)
+ AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw)
+ AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+ ;;
+*)
+ AC_CHECK_LIB(m, cos, LIBM=-lm)
+ ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test yes = "$GCC"; then
+ case $cc_basename in
+ nvcc*)
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;;
+ esac
+
+ _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+ lt_cv_prog_compiler_rtti_exceptions,
+ [-fno-rtti -fno-exceptions], [],
+ [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+ [Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[[BCDT]]'
+ ;;
+cygwin* | mingw* | pw32* | cegcc*)
+ symcode='[[ABCDGISTW]]'
+ ;;
+hpux*)
+ if test ia64 = "$host_cpu"; then
+ symcode='[[ABCDEGRST]]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[[BCDEGRST]]'
+ ;;
+osf*)
+ symcode='[[BCDEGQRST]]'
+ ;;
+solaris*)
+ symcode='[[BDRT]]'
+ ;;
+sco3.2v5*)
+ symcode='[[DT]]'
+ ;;
+sysv4.2uw2*)
+ symcode='[[DT]]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[[ABDT]]'
+ ;;
+sysv4)
+ symcode='[[DFNSTU]]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Gets list of data symbols to import.
+ lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
+ # Adjust the below global symbol transforms to fixup imported variables.
+ lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
+ lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'"
+ lt_c_name_lib_hook="\
+ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\
+ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'"
+else
+ # Disable hooks by default.
+ lt_cv_sys_global_symbol_to_import=
+ lt_cdecl_hook=
+ lt_c_name_hook=
+ lt_c_name_lib_hook=
+fi
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n"\
+$lt_cdecl_hook\
+" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
+$lt_c_name_hook\
+" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'"
+
+# Transform an extracted symbol line into symbol name with lib prefix and
+# symbol address.
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
+$lt_c_name_lib_hook\
+" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function,
+ # D for any global variable and I for any imported variable.
+ # Also find C++ and __fastcall symbols from MSVC++,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK ['"\
+" {last_section=section; section=\$ 3};"\
+" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
+" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
+" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
+" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
+" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx]"
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if AC_TRY_EVAL(ac_compile); then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ $ECHO "$as_me:$LINENO: $NM conftest.$ac_objext | $lt_cv_sys_global_symbol_pipe > $nlist" >&AS_MESSAGE_LOG_FD
+ if eval "$NM" conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist 2>&AS_MESSAGE_LOG_FD && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
+ relocations are performed -- see ld's documentation on pseudo-relocs. */
+# define LT@&t@_DLSYM_CONST
+#elif defined __osf__
+/* This system does not cope well with relocations in const data. */
+# define LT@&t@_DLSYM_CONST
+#else
+# define LT@&t@_DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+LT@&t@_DLSYM_CONST struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_globsym_save_LIBS=$LIBS
+ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS=conftstm.$ac_objext
+ CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+ if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then
+ pipe_works=yes
+ fi
+ LIBS=$lt_globsym_save_LIBS
+ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+ cat conftest.$ac_ext >&5
+ fi
+ rm -rf conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test yes = "$pipe_works"; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ AC_MSG_RESULT(failed)
+else
+ AC_MSG_RESULT(ok)
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then
+ nm_file_list_spec='@'
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+ [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+ [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1],
+ [Transform the output of nm into a list of symbols to manually relocate])
+_LT_DECL([global_symbol_to_c_name_address],
+ [lt_cv_sys_global_symbol_to_c_name_address], [1],
+ [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+ [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+ [Transform the output of nm in a C name address pair when lib prefix is needed])
+_LT_DECL([nm_interface], [lt_cv_nm_interface], [1],
+ [The name lister interface])
+_LT_DECL([], [nm_file_list_spec], [1],
+ [Specify filename containing input files for $NM])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+m4_if([$1], [CXX], [
+ # C++ specific cases for pic, static, wl, etc.
+ if test yes = "$GXX"; then
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the '-m68020' flag to GCC prevents building anything better,
+ # like '-m68040'.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ mingw* | cygwin* | os2* | pw32* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ case $host_os in
+ os2*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+ ;;
+ esac
+ ;;
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+ *djgpp*)
+ # DJGPP does not support shared libraries at all
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)=
+ ;;
+ interix[[3-9]]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ case $host_os in
+ aix[[4-9]]*)
+ # All AIX code is PIC.
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ cxch68*)
+ # Green Hills C++ Compiler
+ # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+ ;;
+ esac
+ ;;
+ mingw* | cygwin* | os2* | pw32* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ freebsd* | dragonfly*)
+ # FreeBSD uses GNU C++
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive'
+ if test ia64 != "$host_cpu"; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ fi
+ ;;
+ aCC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive'
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ interix*)
+ # This is c89, which is MS Visual C++ (no shared libs)
+ # Anyone wants to do a port?
+ ;;
+ irix5* | irix6* | nonstopux*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ # CC pic flag -KPIC is the default.
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ case $cc_basename in
+ KCC*)
+ # KAI C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ ecpc* )
+ # old Intel C++ for x86_64, which still supported -KPIC.
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ icpc* )
+ # Intel C++, used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ cxx*)
+ # Compaq C++
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*)
+ # IBM XL 8.0, 9.0 on PPC and BlueGene
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ lynxos*)
+ ;;
+ m88k*)
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ netbsd* | netbsdelf*-gnu)
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ cxx*)
+ # Digital/Compaq C++
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ psos*)
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC* | sunCC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ lcc*)
+ # Lucid
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ vxworks*)
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+],
+[
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the '-m68020' flag to GCC prevents building anything better,
+ # like '-m68040'.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ case $host_os in
+ os2*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+ ;;
+ esac
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)=
+ ;;
+
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[[3-9]]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+
+ case $cc_basename in
+ nvcc*) # Cuda Compiler Driver 2.2
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '
+ if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)"
+ fi
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ case $cc_basename in
+ nagfor*)
+ # NAG Fortran compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ case $host_os in
+ os2*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+ ;;
+ esac
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC (with -KPIC) is the default.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ case $cc_basename in
+ # old Intel for x86_64, which still supported -KPIC.
+ ecc*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ # flang / f18. f95 an alias for gfortran or flang on Debian
+ flang* | f18* | f95*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ # icc used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ icc* | ifort*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ # Lahey Fortran 8.1.
+ lf95*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+ ;;
+ nagfor*)
+ # NAG Fortran compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ tcc*)
+ # Fabrice Bellard et al's Tiny C Compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ ccc*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All Alpha code is PIC.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ xl* | bgxl* | bgf* | mpixl*)
+ # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+ ;;
+ *Sun\ F* | *Sun*Fortran*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ *Sun\ C*)
+ # Sun C 5.9
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ ;;
+ *Intel*\ [[CF]]*Compiler*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ *Portland\ Group*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All OSF/1 code is PIC.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ rdos*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ solaris*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ unicos*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+
+ uts4*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *)
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+])
+case $host_os in
+ # For platforms that do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+ ;;
+esac
+
+AC_CACHE_CHECK([for $compiler option to produce PIC],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+ [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+ [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+ "" | " "*) ;;
+ *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+ esac],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+ [Additional compiler flags for building library objects])
+
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+ [How to pass a linker flag through the compiler])
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+ _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+ $lt_tmp_static_flag,
+ [],
+ [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+ [Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+ case $host_os in
+ aix[[4-9]]*)
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+ # Without the "-l" option, or with the "-B" option, AIX nm treats
+ # weak defined symbols like other global defined symbols, whereas
+ # GNU nm marks them as "W".
+ # While the 'weak' keyword is ignored in the Export File, we need
+ # it in the Import File for the 'aix-soname' feature, so we have
+ # to replace the "-B" option with "-P" for AIX nm.
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+ fi
+ ;;
+ pw32*)
+ _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds
+ ;;
+ cygwin* | mingw* | cegcc*)
+ case $cc_basename in
+ cl*)
+ _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+ ;;
+ *)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+ ;;
+ esac
+ ;;
+ linux* | k*bsd*-gnu | gnu*)
+ _LT_TAGVAR(link_all_deplibs, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ esac
+], [
+ runpath_var=
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(archive_cmds, $1)=
+ _LT_TAGVAR(archive_expsym_cmds, $1)=
+ _LT_TAGVAR(compiler_needs_object, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(hardcode_automatic, $1)=no
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ _LT_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_TAGVAR(inherit_rpath, $1)=no
+ _LT_TAGVAR(link_all_deplibs, $1)=unknown
+ _LT_TAGVAR(module_cmds, $1)=
+ _LT_TAGVAR(module_expsym_cmds, $1)=
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+ _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+ _LT_TAGVAR(thread_safe_flag_spec, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ _LT_TAGVAR(include_expsyms, $1)=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ' (' and ')$', so one must not match beginning or
+ # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc',
+ # as well as any symbol that contains 'd'.
+ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test yes != "$GCC"; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd* | bitrig*)
+ with_gnu_ld=no
+ ;;
+ linux* | k*bsd*-gnu | gnu*)
+ _LT_TAGVAR(link_all_deplibs, $1)=no
+ ;;
+ esac
+
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+
+ # On some targets, GNU ld is compatible enough with the native linker
+ # that we're better off using the native interface for both.
+ lt_use_gnu_ld_interface=no
+ if test yes = "$with_gnu_ld"; then
+ case $host_os in
+ aix*)
+ # The AIX port of GNU ld has always aspired to compatibility
+ # with the native linker. However, as the warning in the GNU ld
+ # block says, versions before 2.19.5* couldn't really create working
+ # shared libraries, regardless of the interface used.
+ case `$LD -v 2>&1` in
+ *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+ *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;;
+ *\ \(GNU\ Binutils\)\ [[3-9]]*) ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ fi
+
+ if test yes = "$lt_use_gnu_ld_interface"; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='$wl'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in
+ *GNU\ gold*) supports_anon_versioning=yes ;;
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix[[3-9]]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test ia64 != "$host_cpu"; then
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)=''
+ ;;
+ m68k)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols'
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file, use it as
+ # is; otherwise, prepend EXPORTS...
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ haiku*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ os2*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ shrext_cmds=.dll
+ _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ prefix_cmds="$SED"~
+ if test EXPORTS = "`$SED 1q $export_symbols`"; then
+ prefix_cmds="$prefix_cmds -e 1d";
+ fi~
+ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+
+ interix[[3-9]]*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+ tmp_diet=no
+ if test linux-dietlibc = "$host_os"; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test no = "$tmp_diet"
+ then
+ tmp_addflag=' $pic_flag'
+ tmp_sharedflag='-shared'
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group f77 and f90 compilers
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ lf95*) # Lahey Fortran 8.1
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ tmp_sharedflag='--shared' ;;
+ nagfor*) # NAGFOR 5.3
+ tmp_sharedflag='-Wl,-shared' ;;
+ xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+ nvcc*) # Cuda Compiler Driver 2.2
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+ ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ esac
+ _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+
+ if test yes = "$supports_anon_versioning"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+ fi
+
+ case $cc_basename in
+ tcc*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic'
+ ;;
+ xlf* | bgf* | bgxlf* | mpixlf*)
+ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test yes = "$supports_anon_versioning"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+
+ if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then
+ runpath_var=
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ fi
+ ;;
+
+ aix[[4-9]]*)
+ if test ia64 = "$host_cpu"; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+ # Without the "-l" option, or with the "-B" option, AIX nm treats
+ # weak defined symbols like other global defined symbols, whereas
+ # GNU nm marks them as "W".
+ # While the 'weak' keyword is ignored in the Export File, we need
+ # it in the Import File for the 'aix-soname' feature, so we have
+ # to replace the "-B" option with "-P" for AIX nm.
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # have runtime linking enabled, and use it for executables.
+ # For shared libraries, we enable/disable runtime linking
+ # depending on the kind of the shared library created -
+ # when "with_aix_soname,aix_use_runtimelinking" is:
+ # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables
+ # "aix,yes" lib.so shared, rtl:yes, for executables
+ # lib.a static archive
+ # "both,no" lib.so.V(shr.o) shared, rtl:yes
+ # lib.a(lib.so.V) shared, rtl:no, for executables
+ # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a(lib.so.V) shared, rtl:no
+ # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a static archive
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+ for ld_flag in $LDFLAGS; do
+ if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # With aix-soname=svr4, we create the lib.so.V shared archives only,
+ # so we don't have lib.a shared libs to link our executables.
+ # We have to force runtime linking in this case.
+ aix_use_runtimelinking=yes
+ LDFLAGS="$LDFLAGS -Wl,-brtl"
+ fi
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_TAGVAR(archive_cmds, $1)=''
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='$wl-f,'
+ case $with_aix_soname,$aix_use_runtimelinking in
+ aix,*) ;; # traditional, no import file
+ svr4,* | *,yes) # use import file
+ # The Import File defines what to hardcode.
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+ ;;
+ esac
+
+ if test yes = "$GCC"; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`$CC -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test yes = "$aix_use_runtimelinking"; then
+ shared_flag="$shared_flag "'$wl-G'
+ fi
+ # Need to ensure runtime linking is disabled for the traditional
+ # shared library, or the linker may eventually find shared libraries
+ # /with/ Import File - we do not want to mix them.
+ shared_flag_aix='-shared'
+ shared_flag_svr4='-shared $wl-G'
+ else
+ # not using gcc
+ if test ia64 = "$host_cpu"; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test yes = "$aix_use_runtimelinking"; then
+ shared_flag='$wl-G'
+ else
+ shared_flag='$wl-bM:SRE'
+ fi
+ shared_flag_aix='$wl-bM:SRE'
+ shared_flag_svr4='$wl-G'
+ fi
+ fi
+
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+ else
+ if test ia64 = "$host_cpu"; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib'
+ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok'
+ _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok'
+ if test yes = "$with_gnu_ld"; then
+ # We only use this code for GNU lds that support --whole-archive.
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+ # -brtl affects multiple linker settings, -berok does not and is overridden later
+ compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`'
+ if test svr4 != "$with_aix_soname"; then
+ # This is similar to how AIX traditionally builds its shared libraries.
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+ fi
+ if test aix != "$with_aix_soname"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+ else
+ # used by -dlpreopen to get the symbols
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir'
+ fi
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)=''
+ ;;
+ m68k)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ ;;
+
+ bsdi[[45]]*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ case $cc_basename in
+ cl*)
+ # Native MSVC
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='@'
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=.dll
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+ cp "$export_symbols" "$output_objdir/$soname.def";
+ echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+ else
+ $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+ fi~
+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+ linknames='
+ # The linker will not automatically build a static lib if we build a DLL.
+ # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+ # Don't use ranlib
+ _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+ _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+ lt_tool_outputfile="@TOOL_OUTPUT@"~
+ case $lt_outputfile in
+ *.exe|*.EXE) ;;
+ *)
+ lt_outputfile=$lt_outputfile.exe
+ lt_tool_outputfile=$lt_tool_outputfile.exe
+ ;;
+ esac~
+ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+ $RM "$lt_outputfile.manifest";
+ fi'
+ ;;
+ *)
+ # Assume MSVC wrapper
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=.dll
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ # FIXME: Should let the user specify the lib program.
+ _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+ esac
+ ;;
+
+ darwin* | rhapsody*)
+ _LT_DARWIN_LINKER_FEATURES($1)
+ ;;
+
+ dgux*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2.*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ hpux9*)
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ ;;
+
+ hpux10*)
+ if test yes,no = "$GCC,$with_gnu_ld"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test no = "$with_gnu_ld"; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test yes,no = "$GCC,$with_gnu_ld"; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ m4_if($1, [], [
+ # Older versions of the 11.00 compiler do not understand -b yet
+ # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+ _LT_LINKER_OPTION([if $CC understands -b],
+ _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],
+ [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],
+ [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],
+ [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])
+ ;;
+ esac
+ fi
+ if test no = "$with_gnu_ld"; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ # This should be the same for all languages, so no per-tag cache variable.
+ AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
+ [lt_cv_irix_exported_symbol],
+ [save_LDFLAGS=$LDFLAGS
+ LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
+ AC_LINK_IFELSE(
+ [AC_LANG_SOURCE(
+ [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
+ [C++], [[int foo (void) { return 0; }]],
+ [Fortran 77], [[
+ subroutine foo
+ end]],
+ [Fortran], [[
+ subroutine foo
+ end]])])],
+ [lt_cv_irix_exported_symbol=yes],
+ [lt_cv_irix_exported_symbol=no])
+ LDFLAGS=$save_LDFLAGS])
+ if test yes = "$lt_cv_irix_exported_symbol"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
+ fi
+ _LT_TAGVAR(link_all_deplibs, $1)=no
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(inherit_rpath, $1)=yes
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ linux*)
+ case $cc_basename in
+ tcc*)
+ # Fabrice Bellard et al's Tiny C Compiler
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ newsos6)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd* | bitrig*)
+ if test -f /usr/libexec/ld.so; then
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ fi
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ os2*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ shrext_cmds=.dll
+ _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ prefix_cmds="$SED"~
+ if test EXPORTS = "`$SED 1q $export_symbols`"; then
+ prefix_cmds="$prefix_cmds -e 1d";
+ fi~
+ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+
+ osf3*)
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ else
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ else
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ solaris*)
+ _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+ if test yes = "$GCC"; then
+ wlarc='$wl'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='$wl'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands '-z linker_flag'. GCC discards it without '$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ sunos4*)
+ if test sequent = "$host_vendor"; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ ;;
+ motorola)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4.3*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We CANNOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+ _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+
+ if test sni = "$host_vendor"; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+ [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+ # Assume -lc should be added
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+ if test yes,yes = "$GCC,$enable_shared"; then
+ case $_LT_TAGVAR(archive_cmds, $1) in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ AC_CACHE_CHECK([whether -lc should be explicitly linked in],
+ [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1),
+ [$RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+ pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+ then
+ lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ else
+ lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ fi
+ _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+ ])
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+ [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+ [enable_shared_with_static_runtimes], [0],
+ [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+ [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+ [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+ [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+ [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+ [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+ [Commands used to build a loadable module if different from building
+ a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+ [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+ [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+ [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+ [Flag to hardcode $libdir into a binary during linking.
+ This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+ [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+ [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes
+ DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+ [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes
+ DIR into the resulting binary and the resulting library dependency is
+ "absolute", i.e impossible to change by setting $shlibpath_var if the
+ library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+ [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+ into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+ [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+ into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+ [Set to "yes" if building a shared library automatically hardcodes DIR
+ into the library and all subsequent libraries and executables linked
+ against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+ [Set to yes if linker adds runtime paths of dependent libraries
+ to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+ [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [always_export_symbols], [0],
+ [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+ [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+ [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+ [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+ [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [postlink_cmds], [2],
+ [Commands necessary for finishing linking programs])
+_LT_TAGDECL([], [file_list_spec], [1],
+ [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined. These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC=$CC
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+ LT_SYS_DLOPEN_SELF
+ _LT_CMD_STRIPLIB
+
+ # Report what library types will actually be built
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test no = "$can_build_shared" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test yes = "$enable_shared" && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix[[4-9]]*)
+ if test ia64 != "$host_cpu"; then
+ case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+ yes,aix,yes) ;; # shared object as lib.so file only
+ yes,svr4,*) ;; # shared object as lib.so archive member only
+ yes,*) enable_static=no ;; # shared object in lib.a archive as well
+ esac
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test yes = "$enable_shared" || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC=$lt_save_CC
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined. These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+if test -n "$CXX" && ( test no != "$CXX" &&
+ ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) ||
+ (test g++ != "$CXX"))); then
+ AC_PROG_CXXCPP
+else
+ _lt_caught_CXX_error=yes
+fi
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test yes != "$_lt_caught_CXX_error"; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="int some_variable = 0;"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC=$CC
+ lt_save_CFLAGS=$CFLAGS
+ lt_save_LD=$LD
+ lt_save_GCC=$GCC
+ GCC=$GXX
+ lt_save_with_gnu_ld=$with_gnu_ld
+ lt_save_path_LD=$lt_cv_path_LD
+ if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+ lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+ else
+ $as_unset lt_cv_prog_gnu_ld
+ fi
+ if test -n "${lt_cv_path_LDCXX+set}"; then
+ lt_cv_path_LD=$lt_cv_path_LDCXX
+ else
+ $as_unset lt_cv_path_LD
+ fi
+ test -z "${LDCXX+set}" || LD=$LDCXX
+ CC=${CXX-"c++"}
+ CFLAGS=$CXXFLAGS
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+
+ if test -n "$compiler"; then
+ # We don't want -fno-exception when compiling C++ code, so set the
+ # no_builtin_flag separately
+ if test yes = "$GXX"; then
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+ else
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+ fi
+
+ if test yes = "$GXX"; then
+ # Set up default GNU C++ configuration
+
+ LT_PATH_LD
+
+ # Check if GNU C++ uses GNU ld as the underlying linker, since the
+ # archiving commands below assume that GNU ld is being used.
+ if test yes = "$with_gnu_ld"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+ # investigate it a little bit more. (MM)
+ wlarc='$wl'
+
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+ $GREP 'no-whole-archive' > /dev/null; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ with_gnu_ld=no
+ wlarc=
+
+ # A generic and very simple default shared library creation
+ # command for GNU C++ for the case where it uses the native
+ # linker, instead of GNU ld. If possible, this setting should
+ # overridden to take advantage of the native linker features on
+ # the platform it is being used on.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ fi
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"'
+
+ else
+ GXX=no
+ with_gnu_ld=no
+ wlarc=
+ fi
+
+ # PORTME: fill in a description of your system's C++ link characteristics
+ AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ case $host_os in
+ aix3*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aix[[4-9]]*)
+ if test ia64 = "$host_cpu"; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=
+ else
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # have runtime linking enabled, and use it for executables.
+ # For shared libraries, we enable/disable runtime linking
+ # depending on the kind of the shared library created -
+ # when "with_aix_soname,aix_use_runtimelinking" is:
+ # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables
+ # "aix,yes" lib.so shared, rtl:yes, for executables
+ # lib.a static archive
+ # "both,no" lib.so.V(shr.o) shared, rtl:yes
+ # lib.a(lib.so.V) shared, rtl:no, for executables
+ # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a(lib.so.V) shared, rtl:no
+ # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a static archive
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+ for ld_flag in $LDFLAGS; do
+ case $ld_flag in
+ *-brtl*)
+ aix_use_runtimelinking=yes
+ break
+ ;;
+ esac
+ done
+ if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # With aix-soname=svr4, we create the lib.so.V shared archives only,
+ # so we don't have lib.a shared libs to link our executables.
+ # We have to force runtime linking in this case.
+ aix_use_runtimelinking=yes
+ LDFLAGS="$LDFLAGS -Wl,-brtl"
+ fi
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_TAGVAR(archive_cmds, $1)=''
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='$wl-f,'
+ case $with_aix_soname,$aix_use_runtimelinking in
+ aix,*) ;; # no import file
+ svr4,* | *,yes) # use import file
+ # The Import File defines what to hardcode.
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+ ;;
+ esac
+
+ if test yes = "$GXX"; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`$CC -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ esac
+ shared_flag='-shared'
+ if test yes = "$aix_use_runtimelinking"; then
+ shared_flag=$shared_flag' $wl-G'
+ fi
+ # Need to ensure runtime linking is disabled for the traditional
+ # shared library, or the linker may eventually find shared libraries
+ # /with/ Import File - we do not want to mix them.
+ shared_flag_aix='-shared'
+ shared_flag_svr4='-shared $wl-G'
+ else
+ # not using gcc
+ if test ia64 = "$host_cpu"; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test yes = "$aix_use_runtimelinking"; then
+ shared_flag='$wl-G'
+ else
+ shared_flag='$wl-bM:SRE'
+ fi
+ shared_flag_aix='$wl-bM:SRE'
+ shared_flag_svr4='$wl-G'
+ fi
+ fi
+
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to
+ # export.
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ # The "-G" linker flag allows undefined symbols.
+ _LT_TAGVAR(no_undefined_flag, $1)='-bernotok'
+ # Determine the default libpath from the value encoded in an empty
+ # executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
+
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+ else
+ if test ia64 = "$host_cpu"; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib'
+ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok'
+ _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok'
+ if test yes = "$with_gnu_ld"; then
+ # We only use this code for GNU lds that support --whole-archive.
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+ # -brtl affects multiple linker settings, -berok does not and is overridden later
+ compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`'
+ if test svr4 != "$with_aix_soname"; then
+ # This is similar to how AIX traditionally builds its shared
+ # libraries. Need -bnortl late, we may have -brtl in LDFLAGS.
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+ fi
+ if test aix != "$with_aix_soname"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+ else
+ # used by -dlpreopen to get the symbols
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir'
+ fi
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d'
+ fi
+ fi
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ chorus*)
+ case $cc_basename in
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ case $GXX,$cc_basename in
+ ,cl* | no,cl*)
+ # Native MSVC
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='@'
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=.dll
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+ cp "$export_symbols" "$output_objdir/$soname.def";
+ echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+ else
+ $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+ fi~
+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+ linknames='
+ # The linker will not automatically build a static lib if we build a DLL.
+ # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ # Don't use ranlib
+ _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+ _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+ lt_tool_outputfile="@TOOL_OUTPUT@"~
+ case $lt_outputfile in
+ *.exe|*.EXE) ;;
+ *)
+ lt_outputfile=$lt_outputfile.exe
+ lt_tool_outputfile=$lt_tool_outputfile.exe
+ ;;
+ esac~
+ func_to_tool_file "$lt_outputfile"~
+ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+ $RM "$lt_outputfile.manifest";
+ fi'
+ ;;
+ *)
+ # g++
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols'
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file, use it as
+ # is; otherwise, prepend EXPORTS...
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ darwin* | rhapsody*)
+ _LT_DARWIN_LINKER_FEATURES($1)
+ ;;
+
+ os2*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ shrext_cmds=.dll
+ _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ prefix_cmds="$SED"~
+ if test EXPORTS = "`$SED 1q $export_symbols`"; then
+ prefix_cmds="$prefix_cmds -e 1d";
+ fi~
+ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ freebsd2.*)
+ # C++ shared libraries reported to be fairly broken before
+ # switch to ELF
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ freebsd-elf*)
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ ;;
+
+ freebsd* | dragonfly*)
+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+ # conventions
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+
+ haiku*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ hpux9*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test yes = "$GXX"; then
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ hpux10*|hpux11*)
+ if test no = "$with_gnu_ld"; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ ;;
+ *)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ ;;
+ esac
+ fi
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ esac
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test yes = "$GXX"; then
+ if test no = "$with_gnu_ld"; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ fi
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ interix[[3-9]]*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+ irix5* | irix6*)
+ case $cc_basename in
+ CC*)
+ # SGI C++
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+
+ # Archives containing C++ object files must be created using
+ # "CC -ar", where "CC" is the IRIX C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+ ;;
+ *)
+ if test yes = "$GXX"; then
+ if test no = "$with_gnu_ld"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib'
+ fi
+ fi
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+ esac
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(inherit_rpath, $1)=yes
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+ ;;
+ icpc* | ecpc* )
+ # Intel C++
+ with_gnu_ld=yes
+ # version 8.0 and above of icpc choke on multiply defined symbols
+ # if we add $predep_objects and $postdep_objects, however 7.1 and
+ # earlier do not add the objects themselves.
+ case `$CC -V 2>&1` in
+ *"Version 7."*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ *) # Version 8.0 or newer
+ tmp_idyn=
+ case $host_cpu in
+ ia64*) tmp_idyn=' -i_dynamic';;
+ esac
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ esac
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ case `$CC -V` in
+ *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*)
+ _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+ _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+ $RANLIB $oldlib'
+ _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ *) # Version 6 and above use weak symbols
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ ;;
+ cxx*)
+ # Compaq C++
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols'
+
+ runpath_var=LD_RUN_PATH
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+ ;;
+ xl* | mpixl* | bgxl*)
+ # IBM XL 8.0 on PPC, with GNU ld
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ if test yes = "$supports_anon_versioning"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+ # Not sure whether something based on
+ # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+ # would be better.
+ output_verbose_link_cmd='func_echo_all'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ lynxos*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ m88k*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+ wlarc=
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ fi
+ # Workaround some broken pre-1.5 toolchains
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+ ;;
+
+ *nto* | *qnx*)
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+
+ openbsd* | bitrig*)
+ if test -f /usr/libexec/ld.so; then
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+ fi
+ output_verbose_link_cmd=func_echo_all
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # the KAI C++ compiler.
+ case $host in
+ osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+ *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+ esac
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx*)
+ case $host in
+ osf3*)
+ _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ ;;
+ *)
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+ echo "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~
+ $RM $lib.exp'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test yes,no = "$GXX,$with_gnu_ld"; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+ case $host in
+ osf3*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ psos*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ lcc*)
+ # Lucid
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ solaris*)
+ case $cc_basename in
+ CC* | sunCC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands '-z linker_flag'.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ ;;
+ esac
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+ output_verbose_link_cmd='func_echo_all'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+
+ # The C++ compiler must be used to create the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+ ;;
+ *)
+ # GNU C++ compiler with Solaris linker
+ if test yes,no = "$GXX,$with_gnu_ld"; then
+ _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs'
+ if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"'
+ else
+ # g++ 2.7 appears to require '-G' NOT '-shared' on this
+ # platform.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"'
+ fi
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir'
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We CANNOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+ _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~
+ '"$_LT_TAGVAR(old_archive_cmds, $1)"
+ _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~
+ '"$_LT_TAGVAR(reload_cmds, $1)"
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ vxworks*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+
+ AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+ test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no
+
+ _LT_TAGVAR(GCC, $1)=$GXX
+ _LT_TAGVAR(LD, $1)=$LD
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_SYS_HIDDEN_LIBDEPS($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ CC=$lt_save_CC
+ CFLAGS=$lt_save_CFLAGS
+ LDCXX=$LD
+ LD=$lt_save_LD
+ GCC=$lt_save_GCC
+ with_gnu_ld=$lt_save_with_gnu_ld
+ lt_cv_path_LDCXX=$lt_cv_path_LD
+ lt_cv_path_LD=$lt_save_path_LD
+ lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+ lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test yes != "$_lt_caught_CXX_error"
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_FUNC_STRIPNAME_CNF
+# ----------------------
+# func_stripname_cnf prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+#
+# This function is identical to the (non-XSI) version of func_stripname,
+# except this one can be used by m4 code that may be executed by configure,
+# rather than the libtool script.
+m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl
+AC_REQUIRE([_LT_DECL_SED])
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
+func_stripname_cnf ()
+{
+ case @S|@2 in
+ .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;;
+ *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;;
+ esac
+} # func_stripname_cnf
+])# _LT_FUNC_STRIPNAME_CNF
+
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library. It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+ Foo (void) { a = 0; }
+private:
+ int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+ subroutine foo
+ implicit none
+ integer*4 a
+ a=0
+ return
+ end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+ subroutine foo
+ implicit none
+ integer a
+ a=0
+ return
+ end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+ private int a;
+ public void bar (void) {
+ a = 0;
+ }
+};
+_LT_EOF
+], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF
+package foo
+func foo() {
+}
+_LT_EOF
+])
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
+esac
+
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+ # Parse the compiler output and extract the necessary
+ # objects, libraries and library flags.
+
+ # Sentinel used to keep track of whether or not we are before
+ # the conftest object file.
+ pre_test_object_deps_done=no
+
+ for p in `eval "$output_verbose_link_cmd"`; do
+ case $prev$p in
+
+ -L* | -R* | -l*)
+ # Some compilers place space between "-{L,R}" and the path.
+ # Remove the space.
+ if test x-L = "$p" ||
+ test x-R = "$p"; then
+ prev=$p
+ continue
+ fi
+
+ # Expand the sysroot to ease extracting the directories later.
+ if test -z "$prev"; then
+ case $p in
+ -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+ -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+ -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+ esac
+ fi
+ case $p in
+ =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+ esac
+ if test no = "$pre_test_object_deps_done"; then
+ case $prev in
+ -L | -R)
+ # Internal compiler library paths should come after those
+ # provided the user. The postdeps already come after the
+ # user supplied libs so there is no need to process them.
+ if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+ _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p
+ else
+ _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p"
+ fi
+ ;;
+ # The "-l" case would never come before the object being
+ # linked, so don't bother handling this case.
+ esac
+ else
+ if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+ _LT_TAGVAR(postdeps, $1)=$prev$p
+ else
+ _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p"
+ fi
+ fi
+ prev=
+ ;;
+
+ *.lto.$objext) ;; # Ignore GCC LTO objects
+ *.$objext)
+ # This assumes that the test object file only shows up
+ # once in the compiler output.
+ if test "$p" = "conftest.$objext"; then
+ pre_test_object_deps_done=yes
+ continue
+ fi
+
+ if test no = "$pre_test_object_deps_done"; then
+ if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+ _LT_TAGVAR(predep_objects, $1)=$p
+ else
+ _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+ fi
+ else
+ if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+ _LT_TAGVAR(postdep_objects, $1)=$p
+ else
+ _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+ fi
+ fi
+ ;;
+
+ *) ;; # Ignore the rest.
+
+ esac
+ done
+
+ # Clean up.
+ rm -f a.out a.exe
+else
+ echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+ # Interix 3.5 installs completely hosed .la files for C++, so rather than
+ # hack all around it, let's just trust "g++" to DTRT.
+ _LT_TAGVAR(predep_objects,$1)=
+ _LT_TAGVAR(postdep_objects,$1)=
+ _LT_TAGVAR(postdeps,$1)=
+ ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+ [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+ [Dependencies to place before and after the objects being linked to
+ create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+ [The library search path used internally by the compiler when linking
+ a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_LANG_PUSH(Fortran 77)
+if test -z "$F77" || test no = "$F77"; then
+ _lt_disable_F77=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test yes != "$_lt_disable_F77"; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code="\
+ program t
+ end
+"
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC=$CC
+ lt_save_GCC=$GCC
+ lt_save_CFLAGS=$CFLAGS
+ CC=${F77-"f77"}
+ CFLAGS=$FFLAGS
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+ GCC=$G77
+ if test -n "$compiler"; then
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test no = "$can_build_shared" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test yes = "$enable_shared" && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+ aix[[4-9]]*)
+ if test ia64 != "$host_cpu"; then
+ case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+ yes,aix,yes) ;; # shared object as lib.so file only
+ yes,svr4,*) ;; # shared object as lib.so archive member only
+ yes,*) enable_static=no ;; # shared object in lib.a archive as well
+ esac
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test yes = "$enable_shared" || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_TAGVAR(GCC, $1)=$G77
+ _LT_TAGVAR(LD, $1)=$LD
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ GCC=$lt_save_GCC
+ CC=$lt_save_CC
+ CFLAGS=$lt_save_CFLAGS
+fi # test yes != "$_lt_disable_F77"
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_LANG_PUSH(Fortran)
+
+if test -z "$FC" || test no = "$FC"; then
+ _lt_disable_FC=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test yes != "$_lt_disable_FC"; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code="\
+ program t
+ end
+"
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC=$CC
+ lt_save_GCC=$GCC
+ lt_save_CFLAGS=$CFLAGS
+ CC=${FC-"f95"}
+ CFLAGS=$FCFLAGS
+ compiler=$CC
+ GCC=$ac_cv_fc_compiler_gnu
+
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+
+ if test -n "$compiler"; then
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test no = "$can_build_shared" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test yes = "$enable_shared" && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+ aix[[4-9]]*)
+ if test ia64 != "$host_cpu"; then
+ case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+ yes,aix,yes) ;; # shared object as lib.so file only
+ yes,svr4,*) ;; # shared object as lib.so archive member only
+ yes,*) enable_static=no ;; # shared object in lib.a archive as well
+ esac
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test yes = "$enable_shared" || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu
+ _LT_TAGVAR(LD, $1)=$LD
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_SYS_HIDDEN_LIBDEPS($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ GCC=$lt_save_GCC
+ CC=$lt_save_CC
+ CFLAGS=$lt_save_CFLAGS
+fi # test yes != "$_lt_disable_FC"
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+CFLAGS=$GCJFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)=$LD
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_GO_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Go compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_GO_CONFIG],
+[AC_REQUIRE([LT_PROG_GO])dnl
+AC_LANG_SAVE
+
+# Source file extension for Go test sources.
+ac_ext=go
+
+# Object file extension for compiled Go test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="package main; func main() { }"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='package main; func main() { }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GOC-"gccgo"}
+CFLAGS=$GOFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)=$LD
+_LT_CC_BASENAME([$compiler])
+
+# Go did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GO_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code=$lt_simple_compile_test_code
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+CFLAGS=
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+ :
+ _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+ [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+ [AC_CHECK_TOOL(GCJ, gcj,)
+ test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2"
+ AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_GO
+# ----------
+AC_DEFUN([LT_PROG_GO],
+[AC_CHECK_TOOL(GOC, gccgo,)
+])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_OBJDUMP
+# --------------
+# If we don't have a new enough Autoconf to choose the best objdump
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_OBJDUMP],
+[AC_CHECK_TOOL(OBJDUMP, objdump, false)
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+AC_SUBST([OBJDUMP])
+])
+
+# _LT_DECL_DLLTOOL
+# ----------------
+# Ensure DLLTOOL variable is set.
+m4_defun([_LT_DECL_DLLTOOL],
+[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])
+AC_SUBST([DLLTOOL])
+])
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible. Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+ [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_SED. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for lt_ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+ fi
+ done
+ done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+ test ! -f "$lt_ac_sed" && continue
+ cat /dev/null > conftest.in
+ lt_ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+ # Check for GNU sed and select it if it is found.
+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+ lt_cv_path_SED=$lt_ac_sed
+ break
+ fi
+ while true; do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >>conftest.nl
+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+ cmp -s conftest.out conftest.nl || break
+ # 10000 chars as input seems more than enough
+ test 10 -lt "$lt_ac_count" && break
+ lt_ac_count=`expr $lt_ac_count + 1`
+ if test "$lt_ac_count" -gt "$lt_ac_max"; then
+ lt_ac_max=$lt_ac_count
+ lt_cv_path_SED=$lt_ac_sed
+ fi
+ done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PATH_CONVERSION_FUNCTIONS
+# -----------------------------
+# Determine what file name conversion functions should be used by
+# func_to_host_file (and, implicitly, by func_to_host_path). These are needed
+# for certain cross-compile configurations and native mingw.
+m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_MSG_CHECKING([how to convert $build file names to $host format])
+AC_CACHE_VAL(lt_cv_to_host_file_cmd,
+[case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+ ;;
+ esac
+ ;;
+ *-*-cygwin* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+ ;;
+ esac
+ ;;
+ * ) # unhandled hosts (and "normal" native builds)
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+esac
+])
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+AC_MSG_RESULT([$lt_cv_to_host_file_cmd])
+_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd],
+ [0], [convert $build file names to $host format])dnl
+
+AC_MSG_CHECKING([how to convert $build file names to toolchain format])
+AC_CACHE_VAL(lt_cv_to_tool_file_cmd,
+[#assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ esac
+ ;;
+esac
+])
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+AC_MSG_RESULT([$lt_cv_to_tool_file_cmd])
+_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],
+ [0], [convert $build files to toolchain format])dnl
+])# _LT_PATH_CONVERSION_FUNCTIONS
+
+# Helper functions for option handling. -*- Autoconf -*-
+#
+# Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software
+# Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 8 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it. Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+ _LT_MANGLE_DEFUN([$1], [$2]),
+ [m4_warning([Unknown $1 option '$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+ [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+ [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME. If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+ [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+ dnl
+ dnl Simply set some default values (i.e off) if boolean options were not
+ dnl specified:
+ _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+ ])
+ _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+ ])
+ dnl
+ dnl If no reference was made to various pairs of opposing options, then
+ dnl we run the default mode handler for the pair. For example, if neither
+ dnl 'shared' nor 'disable-shared' was passed, we enable building of shared
+ dnl archives by default:
+ _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+ _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+ _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+ _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+ [_LT_ENABLE_FAST_INSTALL])
+ _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4],
+ [_LT_WITH_AIX_SONAME([aix])])
+ ])
+])# _LT_SET_OPTIONS
+
+
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
+ AC_CHECK_TOOL(AS, as, false)
+ AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+ AC_CHECK_TOOL(OBJDUMP, objdump, false)
+ ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS], [1], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the 'shared' and
+# 'disable-shared' LT_INIT options.
+# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+ [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+ [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for pkg in $enableval; do
+ IFS=$lt_save_ifs
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac],
+ [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+ _LT_DECL([build_libtool_libs], [enable_shared], [0],
+ [Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the 'static' and
+# 'disable-static' LT_INIT options.
+# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+ [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+ [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for pkg in $enableval; do
+ IFS=$lt_save_ifs
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac],
+ [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+ _LT_DECL([build_old_libs], [enable_static], [0],
+ [Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the 'fast-install'
+# and 'disable-fast-install' LT_INIT options.
+# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+ [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+ [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for pkg in $enableval; do
+ IFS=$lt_save_ifs
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac],
+ [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+ [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the 'fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the 'disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_AIX_SONAME([DEFAULT])
+# ----------------------------------
+# implement the --with-aix-soname flag, and support the `aix-soname=aix'
+# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT
+# is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'.
+m4_define([_LT_WITH_AIX_SONAME],
+[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl
+shared_archive_member_spec=
+case $host,$enable_shared in
+power*-*-aix[[5-9]]*,yes)
+ AC_MSG_CHECKING([which variant of shared library versioning to provide])
+ AC_ARG_WITH([aix-soname],
+ [AS_HELP_STRING([--with-aix-soname=aix|svr4|both],
+ [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])],
+ [case $withval in
+ aix|svr4|both)
+ ;;
+ *)
+ AC_MSG_ERROR([Unknown argument to --with-aix-soname])
+ ;;
+ esac
+ lt_cv_with_aix_soname=$with_aix_soname],
+ [AC_CACHE_VAL([lt_cv_with_aix_soname],
+ [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT)
+ with_aix_soname=$lt_cv_with_aix_soname])
+ AC_MSG_RESULT([$with_aix_soname])
+ if test aix != "$with_aix_soname"; then
+ # For the AIX way of multilib, we name the shared archive member
+ # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
+ # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
+ # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
+ # the AIX toolchain works better with OBJECT_MODE set (default 32).
+ if test 64 = "${OBJECT_MODE-32}"; then
+ shared_archive_member_spec=shr_64
+ else
+ shared_archive_member_spec=shr
+ fi
+ fi
+ ;;
+*)
+ with_aix_soname=aix
+ ;;
+esac
+
+_LT_DECL([], [shared_archive_member_spec], [0],
+ [Shared archive member basename, for filename based shared library versioning on AIX])dnl
+])# _LT_WITH_AIX_SONAME
+
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])])
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])])
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the 'pic-only' and 'no-pic'
+# LT_INIT options.
+# MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+ [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
+ [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+ [lt_p=${PACKAGE-default}
+ case $withval in
+ yes|no) pic_mode=$withval ;;
+ *)
+ pic_mode=default
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for lt_pkg in $withval; do
+ IFS=$lt_save_ifs
+ if test "X$lt_pkg" = "X$lt_p"; then
+ pic_mode=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac],
+ [pic_mode=m4_default([$1], [default])])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+ [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+ [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+ [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+ [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+ [m4_define([_LTDL_TYPE], [convenience])])
+
+# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
+#
+# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software
+# Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+ [$#], [2], [[$2]],
+ [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+ [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59, which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+ [$#], 1, [],
+ [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+ m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+ [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+ [m4_foreach([_Lt_suffix],
+ ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+ [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+ [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+ [lt_append([$1], [$2], [$3])$4],
+ [$5])],
+ [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+ m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+ m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+ [$5],
+ [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+ [lt_join(m4_quote(m4_default([$4], [[, ]])),
+ lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+ [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
+
+# ltversion.m4 -- version numbers -*- Autoconf -*-
+#
+# Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc.
+# Written by Scott James Remnant, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# @configure_input@
+
+# serial 4179 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.4.6])
+m4_define([LT_PACKAGE_REVISION], [2.4.6])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.4.6'
+macro_revision='2.4.6'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
+
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
+#
+# Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software
+# Foundation, Inc.
+# Written by Scott James Remnant, 2004.
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 5 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN),
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else. This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6.
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
+m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
+m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])])
+m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
+m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])])
+m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])])
+m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])])
+
+# nls.m4 serial 5 (gettext-0.18)
+dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014, 2016 Free Software
+dnl Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ([2.50])
+
+AC_DEFUN([AM_NLS],
+[
+ AC_MSG_CHECKING([whether NLS is requested])
+ dnl Default is enabled NLS
+ AC_ARG_ENABLE([nls],
+ [ --disable-nls do not use Native Language Support],
+ USE_NLS=$enableval, USE_NLS=yes)
+ AC_MSG_RESULT([$USE_NLS])
+ AC_SUBST([USE_NLS])
+])
+
+# po.m4 serial 24 (gettext-0.19)
+dnl Copyright (C) 1995-2014, 2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ([2.60])
+
+dnl Checks for all prerequisites of the po subdirectory.
+AC_DEFUN([AM_PO_SUBDIRS],
+[
+ AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+ AC_REQUIRE([AC_PROG_INSTALL])dnl
+ AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+ AC_REQUIRE([AC_PROG_SED])dnl
+ AC_REQUIRE([AM_NLS])dnl
+
+ dnl Release version of the gettext macros. This is used to ensure that
+ dnl the gettext macros and po/Makefile.in.in are in sync.
+ AC_SUBST([GETTEXT_MACRO_VERSION], [0.19])
+
+ dnl Perform the following tests also if --disable-nls has been given,
+ dnl because they are needed for "make dist" to work.
+
+ dnl Search for GNU msgfmt in the PATH.
+ dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
+ dnl The second test excludes FreeBSD msgfmt.
+ AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+ [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+ :)
+ AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT])
+
+ dnl Test whether it is GNU msgfmt >= 0.15.
+changequote(,)dnl
+ case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+ *) MSGFMT_015=$MSGFMT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([MSGFMT_015])
+changequote(,)dnl
+ case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+ *) GMSGFMT_015=$GMSGFMT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([GMSGFMT_015])
+
+ dnl Search for GNU xgettext 0.12 or newer in the PATH.
+ dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
+ dnl The second test excludes FreeBSD xgettext.
+ AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+ [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+ (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+ :)
+ dnl Remove leftover from FreeBSD xgettext call.
+ rm -f messages.po
+
+ dnl Test whether it is GNU xgettext >= 0.15.
+changequote(,)dnl
+ case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+ *) XGETTEXT_015=$XGETTEXT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([XGETTEXT_015])
+
+ dnl Search for GNU msgmerge 0.11 or newer in the PATH.
+ AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
+ [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :)
+
+ dnl Installation directories.
+ dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we
+ dnl have to define it here, so that it can be used in po/Makefile.
+ test -n "$localedir" || localedir='${datadir}/locale'
+ AC_SUBST([localedir])
+
+ dnl Support for AM_XGETTEXT_OPTION.
+ test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
+ AC_SUBST([XGETTEXT_EXTRA_OPTIONS])
+
+ AC_CONFIG_COMMANDS([po-directories], [[
+ for ac_file in $CONFIG_FILES; do
+ # Support "outfile[:infile[:infile...]]"
+ case "$ac_file" in
+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ esac
+ # PO directories have a Makefile.in generated from Makefile.in.in.
+ case "$ac_file" in */Makefile.in)
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'`
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+ # Treat a directory as a PO directory if and only if it has a
+ # POTFILES.in file. This allows packages to have multiple PO
+ # directories under different names or in different locations.
+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+ rm -f "$ac_dir/POTFILES"
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+ gt_tab=`printf '\t'`
+ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+ POMAKEFILEDEPS="POTFILES.in"
+ # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+ # on $ac_dir but don't depend on user-specified configuration
+ # parameters.
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assignment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ # Hide the ALL_LINGUAS assignment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+ fi
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ GMOFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ done
+ fi
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+ if test -f "$f"; then
+ case "$f" in
+ *.orig | *.bak | *~) ;;
+ *) cat "$f" >> "$ac_dir/Makefile" ;;
+ esac
+ fi
+ done
+ fi
+ ;;
+ esac
+ done]],
+ [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+ # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+ # from automake < 1.5.
+ eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+ # Capture the value of LINGUAS because we need it to compute CATALOGS.
+ LINGUAS="${LINGUAS-%UNSET%}"
+ ])
+])
+
+dnl Postprocesses a Makefile in a directory containing PO files.
+AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
+[
+ # When this code is run, in config.status, two variables have already been
+ # set:
+ # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,
+ # - LINGUAS is the value of the environment variable LINGUAS at configure
+ # time.
+
+changequote(,)dnl
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'`
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+ # Find a way to echo strings without interpreting backslash.
+ if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then
+ gt_echo='echo'
+ else
+ if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then
+ gt_echo='printf %s\n'
+ else
+ echo_func () {
+ cat <<EOT
+$*
+EOT
+ }
+ gt_echo='echo_func'
+ fi
+ fi
+
+ # A sed script that extracts the value of VARIABLE from a Makefile.
+ tab=`printf '\t'`
+ sed_x_variable='
+# Test if the hold space is empty.
+x
+s/P/P/
+x
+ta
+# Yes it was empty. Look if we have the expected variable definition.
+/^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=/{
+ # Seen the first line of the variable definition.
+ s/^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=//
+ ba
+}
+bd
+:a
+# Here we are processing a line from the variable definition.
+# Remove comment, more precisely replace it with a space.
+s/#.*$/ /
+# See if the line ends in a backslash.
+tb
+:b
+s/\\$//
+# Print the line, without the trailing backslash.
+p
+tc
+# There was no trailing backslash. The end of the variable definition is
+# reached. Clear the hold space.
+s/^.*$//
+x
+bd
+:c
+# A trailing backslash means that the variable definition continues in the
+# next line. Put a nonempty string into the hold space to indicate this.
+s/^.*$/P/
+x
+:d
+'
+changequote([,])dnl
+
+ # Set POTFILES to the value of the Makefile variable POTFILES.
+ sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`
+ POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
+ # Compute POTFILES_DEPS as
+ # $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
+ POTFILES_DEPS=
+ for file in $POTFILES; do
+ POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file"
+ done
+ POMAKEFILEDEPS=""
+
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
+ sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`
+ ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
+ fi
+ # Hide the ALL_LINGUAS assignment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+ # Compute PROPERTIESFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties)
+ # Compute CLASSFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class)
+ # Compute QMFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
+ # Compute MSGFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)
+ # Compute RESOURCESDLLFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll)
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ GMOFILES=
+ PROPERTIESFILES=
+ CLASSFILES=
+ QMFILES=
+ MSGFILES=
+ RESOURCESDLLFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties"
+ CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class"
+ QMFILES="$QMFILES $srcdirpre$lang.qm"
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ JAVACATALOGS=
+ QTCATALOGS=
+ TCLCATALOGS=
+ CSHARPCATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties"
+ QTCATALOGS="$QTCATALOGS $lang.qm"
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll"
+ done
+ fi
+
+ sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp"
+ tab=`printf '\t'`
+ if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
+ # Add dependencies that cannot be formulated as a simple suffix rule.
+ for lang in $ALL_LINGUAS; do
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ cat >> "$ac_file.tmp" <<EOF
+$frobbedlang.msg: $lang.po
+${tab}@echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
+${tab}\$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+ done
+ fi
+ if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then
+ # Add dependencies that cannot be formulated as a simple suffix rule.
+ for lang in $ALL_LINGUAS; do
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ cat >> "$ac_file.tmp" <<EOF
+$frobbedlang/\$(DOMAIN).resources.dll: $lang.po
+${tab}@echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
+${tab}\$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+ done
+ fi
+ if test -n "$POMAKEFILEDEPS"; then
+ cat >> "$ac_file.tmp" <<EOF
+Makefile: $POMAKEFILEDEPS
+EOF
+ fi
+ mv "$ac_file.tmp" "$ac_file"
+])
+
+dnl Initializes the accumulator used by AM_XGETTEXT_OPTION.
+AC_DEFUN([AM_XGETTEXT_OPTION_INIT],
+[
+ XGETTEXT_EXTRA_OPTIONS=
+])
+
+dnl Registers an option to be passed to xgettext in the po subdirectory.
+AC_DEFUN([AM_XGETTEXT_OPTION],
+[
+ AC_REQUIRE([AM_XGETTEXT_OPTION_INIT])
+ XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1"
+])
+
+# progtest.m4 serial 7 (gettext-0.18.2)
+dnl Copyright (C) 1996-2003, 2005, 2008-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+AC_PREREQ([2.50])
+
+# Search path for a program which passes the given test.
+
+dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
+dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+AC_DEFUN([AM_PATH_PROG_WITH_TEST],
+[
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+ # contains only /bin. Note that ksh looks also at the FPATH variable,
+ # so we have to set that as well for the test.
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ || PATH_SEPARATOR=';'
+ }
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL([ac_cv_path_$1],
+[case "[$]$1" in
+ [[\\/]]* | ?:[[\\/]]*)
+ ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in ifelse([$5], , $PATH, [$5]); do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD
+ if [$3]; then
+ ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+ ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
+ AC_MSG_RESULT([$][$1])
+else
+ AC_MSG_RESULT([no])
+fi
+AC_SUBST([$1])dnl
+])
+
+# Copyright (C) 2002-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.16'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version. Point them to the right macro.
+m4_if([$1], [1.16.1], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.16.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to
+# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is '.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ([2.52])dnl
+ m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+
+# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+m4_if([$1], [CC], [depcc="$CC" am_compiler_list=],
+ [$1], [CXX], [depcc="$CXX" am_compiler_list=],
+ [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
+ [$1], [UPC], [depcc="$UPC" am_compiler_list=],
+ [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ am__universal=false
+ m4_case([$1], [CC],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac],
+ [CXX],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac])
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE([dependency-tracking], [dnl
+AS_HELP_STRING(
+ [--enable-dependency-tracking],
+ [do not reject slow dependency extractors])
+AS_HELP_STRING(
+ [--disable-dependency-tracking],
+ [speeds up one-time build])])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+ # Older Autoconf quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ # TODO: see whether this extra hack can be removed once we start
+ # requiring Autoconf 2.70 or later.
+ AS_CASE([$CONFIG_FILES],
+ [*\'*], [eval set x "$CONFIG_FILES"],
+ [*], [set x $CONFIG_FILES])
+ shift
+ # Used to flag and report bootstrapping failures.
+ am_rc=0
+ for am_mf
+ do
+ # Strip MF so we end up with the name of the file.
+ am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile which includes
+ # dependency-tracking related rules and includes.
+ # Grep'ing the whole file directly is not great: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
+ || continue
+ am_dirpart=`AS_DIRNAME(["$am_mf"])`
+ am_filepart=`AS_BASENAME(["$am_mf"])`
+ AM_RUN_LOG([cd "$am_dirpart" \
+ && sed -e '/# am--include-marker/d' "$am_filepart" \
+ | $MAKE -f - am--depfiles]) || am_rc=$?
+ done
+ if test $am_rc -ne 0; then
+ AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments
+ for automatic dependency tracking. Try re-running configure with the
+ '--disable-dependency-tracking' option to at least be able to build
+ the package (albeit without support for automatic dependency tracking).])
+ fi
+ AS_UNSET([am_dirpart])
+ AS_UNSET([am_filepart])
+ AS_UNSET([am_mf])
+ AS_UNSET([am_rc])
+ rm -f conftest-deps.mk
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking is enabled.
+# This creates each '.Po' and '.Plo' makefile fragment that we'll need in
+# order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.
+m4_define([AC_PROG_CC],
+m4_defn([AC_PROG_CC])
+[_AM_PROG_CC_C_O
+])
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.65])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[AC_DIAGNOSE([obsolete],
+ [$0: two- and three-arguments forms are deprecated.])
+m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(
+ m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+ [ok:ok],,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+AM_MISSING_PROG([AUTOCONF], [autoconf])
+AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+AM_MISSING_PROG([AUTOHEADER], [autoheader])
+AM_MISSING_PROG([MAKEINFO], [makeinfo])
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
+# We need awk for the "check" target (and possibly the TAP driver). The
+# system "awk" is bad on some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES([CC])],
+ [m4_define([AC_PROG_CC],
+ m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES([CXX])],
+ [m4_define([AC_PROG_CXX],
+ m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES([OBJC])],
+ [m4_define([AC_PROG_OBJC],
+ m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+ [_AM_DEPENDENCIES([OBJCXX])],
+ [m4_define([AC_PROG_OBJCXX],
+ m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
+])
+AC_REQUIRE([AM_SILENT_RULES])dnl
+dnl The testsuite driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This
+dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes. So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+ cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present. This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message. This
+can help us improve future automake versions.
+
+END
+ if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+ echo 'Configuration will proceed anyway, since you have set the' >&2
+ echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+ echo >&2
+ else
+ cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <https://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+ AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
+ fi
+fi
+dnl The trailing newline in this macro's definition is deliberate, for
+dnl backward compatibility and to allow trailing 'dnl'-style comments
+dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
+])
+
+dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+AC_SUBST([install_sh])])
+
+# Copyright (C) 2003-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MAINTAINER_MODE([DEFAULT-MODE])
+# ----------------------------------
+# Control maintainer-specific portions of Makefiles.
+# Default is to disable them, unless 'enable' is passed literally.
+# For symmetry, 'disable' may be passed as well. Anyway, the user
+# can override the default with the --enable/--disable switch.
+AC_DEFUN([AM_MAINTAINER_MODE],
+[m4_case(m4_default([$1], [disable]),
+ [enable], [m4_define([am_maintainer_other], [disable])],
+ [disable], [m4_define([am_maintainer_other], [enable])],
+ [m4_define([am_maintainer_other], [enable])
+ m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])
+AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+ dnl maintainer-mode's default is 'disable' unless 'enable' is passed
+ AC_ARG_ENABLE([maintainer-mode],
+ [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode],
+ am_maintainer_other[ make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer])],
+ [USE_MAINTAINER_MODE=$enableval],
+ [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+ AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+ AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
+ MAINT=$MAINTAINER_MODE_TRUE
+ AC_SUBST([MAINT])dnl
+]
+)
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check whether make has an 'include' directive that can support all
+# the idioms we need for our automatic dependency tracking code.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive])
+cat > confinc.mk << 'END'
+am__doit:
+ @echo this is the am__doit target >confinc.out
+.PHONY: am__doit
+END
+am__include="#"
+am__quote=
+# BSD make does it like this.
+echo '.include "confinc.mk" # ignored' > confmf.BSD
+# Other make implementations (GNU, Solaris 10, AIX) do it like this.
+echo 'include confinc.mk # ignored' > confmf.GNU
+_am_result=no
+for s in GNU BSD; do
+ AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out])
+ AS_CASE([$?:`cat confinc.out 2>/dev/null`],
+ ['0:this is the am__doit target'],
+ [AS_CASE([$s],
+ [BSD], [am__include='.include' am__quote='"'],
+ [am__include='include' am__quote=''])])
+ if test "$am__include" != "#"; then
+ _am_result="yes ($s style)"
+ break
+ fi
+done
+rm -f confinc.* confmf.*
+AC_MSG_RESULT([${_am_result}])
+AC_SUBST([am__include])])
+AC_SUBST([am__quote])])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it is modern enough.
+# If it is, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+ am_missing_run="$MISSING "
+else
+ am_missing_run=
+ AC_MSG_WARN(['missing' script is too old or missing])
+fi
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# --------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_CC_C_O
+# ---------------
+# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC
+# to automatically call this.
+AC_DEFUN([_AM_PROG_CC_C_O],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+AC_LANG_PUSH([C])dnl
+AC_CACHE_CHECK(
+ [whether $CC understands -c and -o together],
+ [am_cv_prog_cc_c_o],
+ [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
+ # Make sure it works both with $CC and with simple cc.
+ # Following AC_PROG_CC_C_O, we do the test twice because some
+ # compilers refuse to overwrite an existing .o file with -o,
+ # though they will create one.
+ am_cv_prog_cc_c_o=yes
+ for am_i in 1 2; do
+ if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
+ && test -f conftest2.$ac_objext; then
+ : OK
+ else
+ am_cv_prog_cc_c_o=no
+ break
+ fi
+ done
+ rm -f core conftest*
+ unset am_i])
+if test "$am_cv_prog_cc_c_o" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+AC_LANG_POP([C])])
+
+# For backward compatibility.
+AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
+
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_RUN_LOG(COMMAND)
+# -------------------
+# Run COMMAND, save the exit status in ac_status, and log it.
+# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
+AC_DEFUN([AM_RUN_LOG],
+[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+ ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ (exit $ac_status); }])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[[\\\"\#\$\&\'\`$am_lf]]*)
+ AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
+ AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+ alias in your environment])
+ fi
+ if test "$[2]" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT([yes])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+ [AC_MSG_CHECKING([that generated files are newer than configure])
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
+
+# Copyright (C) 2009-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SILENT_RULES([DEFAULT])
+# --------------------------
+# Enable less verbose build rules; with the default set to DEFAULT
+# ("yes" being less verbose, "no" or empty being verbose).
+AC_DEFUN([AM_SILENT_RULES],
+[AC_ARG_ENABLE([silent-rules], [dnl
+AS_HELP_STRING(
+ [--enable-silent-rules],
+ [less verbose build output (undo: "make V=1")])
+AS_HELP_STRING(
+ [--disable-silent-rules],
+ [verbose build output (undo: "make V=0")])dnl
+])
+case $enable_silent_rules in @%:@ (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+esac
+dnl
+dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
+dnl do not support nested variable expansions.
+dnl See automake bug#9928 and bug#10237.
+am_make=${MAKE-make}
+AC_CACHE_CHECK([whether $am_make supports nested variables],
+ [am_cv_make_support_nested_variables],
+ [if AS_ECHO([['TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi])
+if test $am_cv_make_support_nested_variables = yes; then
+ dnl Using '$V' instead of '$(V)' breaks IRIX make.
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AC_SUBST([AM_V])dnl
+AM_SUBST_NOTMAKE([AM_V])dnl
+AC_SUBST([AM_DEFAULT_V])dnl
+AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
+AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
+AM_BACKSLASH='\'
+AC_SUBST([AM_BACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+])
+
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor 'install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in "make install-strip", and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# --------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of 'v7', 'ustar', or 'pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+#
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+
+m4_if([$1], [v7],
+ [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+
+ [m4_case([$1],
+ [ustar],
+ [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
+ # There is notably a 21 bits limit for the UID and the GID. In fact,
+ # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
+ # and bug#13588).
+ am_max_uid=2097151 # 2^21 - 1
+ am_max_gid=$am_max_uid
+ # The $UID and $GID variables are not portable, so we need to resort
+ # to the POSIX-mandated id(1) utility. Errors in the 'id' calls
+ # below are definitely unexpected, so allow the users to see them
+ # (that is, avoid stderr redirection).
+ am_uid=`id -u || echo unknown`
+ am_gid=`id -g || echo unknown`
+ AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
+ if test $am_uid -le $am_max_uid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi
+ AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
+ if test $am_gid -le $am_max_gid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi],
+
+ [pax],
+ [],
+
+ [m4_fatal([Unknown tar format])])
+
+ AC_MSG_CHECKING([how to create a $1 tar archive])
+
+ # Go ahead even if we have the value already cached. We do so because we
+ # need to set the values for the 'am__tar' and 'am__untar' variables.
+ _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+
+ for _am_tool in $_am_tools; do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar; do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works.
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ AM_RUN_LOG([cat conftest.dir/file])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+ done
+ rm -rf conftest.dir
+
+ AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+ AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([acinclude.m4])
diff --git a/compile b/compile
new file mode 100755
index 0000000..99e5052
--- /dev/null
+++ b/compile
@@ -0,0 +1,348 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand '-c -o'.
+
+scriptversion=2018-03-07.03; # UTC
+
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+nl='
+'
+
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent tools from complaining about whitespace usage.
+IFS=" "" $nl"
+
+file_conv=
+
+# func_file_conv build_file lazy
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts. If the determined conversion
+# type is listed in (the comma separated) LAZY, no conversion will
+# take place.
+func_file_conv ()
+{
+ file=$1
+ case $file in
+ / | /[!/]*) # absolute file, and not a UNC file
+ if test -z "$file_conv"; then
+ # lazily determine how to convert abs files
+ case `uname -s` in
+ MINGW*)
+ file_conv=mingw
+ ;;
+ CYGWIN*)
+ file_conv=cygwin
+ ;;
+ *)
+ file_conv=wine
+ ;;
+ esac
+ fi
+ case $file_conv/,$2, in
+ *,$file_conv,*)
+ ;;
+ mingw/*)
+ file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+ ;;
+ cygwin/*)
+ file=`cygpath -m "$file" || echo "$file"`
+ ;;
+ wine/*)
+ file=`winepath -w "$file" || echo "$file"`
+ ;;
+ esac
+ ;;
+ esac
+}
+
+# func_cl_dashL linkdir
+# Make cl look for libraries in LINKDIR
+func_cl_dashL ()
+{
+ func_file_conv "$1"
+ if test -z "$lib_path"; then
+ lib_path=$file
+ else
+ lib_path="$lib_path;$file"
+ fi
+ linker_opts="$linker_opts -LIBPATH:$file"
+}
+
+# func_cl_dashl library
+# Do a library search-path lookup for cl
+func_cl_dashl ()
+{
+ lib=$1
+ found=no
+ save_IFS=$IFS
+ IFS=';'
+ for dir in $lib_path $LIB
+ do
+ IFS=$save_IFS
+ if $shared && test -f "$dir/$lib.dll.lib"; then
+ found=yes
+ lib=$dir/$lib.dll.lib
+ break
+ fi
+ if test -f "$dir/$lib.lib"; then
+ found=yes
+ lib=$dir/$lib.lib
+ break
+ fi
+ if test -f "$dir/lib$lib.a"; then
+ found=yes
+ lib=$dir/lib$lib.a
+ break
+ fi
+ done
+ IFS=$save_IFS
+
+ if test "$found" != yes; then
+ lib=$lib.lib
+ fi
+}
+
+# func_cl_wrapper cl arg...
+# Adjust compile command to suit cl
+func_cl_wrapper ()
+{
+ # Assume a capable shell
+ lib_path=
+ shared=:
+ linker_opts=
+ for arg
+ do
+ if test -n "$eat"; then
+ eat=
+ else
+ case $1 in
+ -o)
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
+ eat=1
+ case $2 in
+ *.o | *.[oO][bB][jJ])
+ func_file_conv "$2"
+ set x "$@" -Fo"$file"
+ shift
+ ;;
+ *)
+ func_file_conv "$2"
+ set x "$@" -Fe"$file"
+ shift
+ ;;
+ esac
+ ;;
+ -I)
+ eat=1
+ func_file_conv "$2" mingw
+ set x "$@" -I"$file"
+ shift
+ ;;
+ -I*)
+ func_file_conv "${1#-I}" mingw
+ set x "$@" -I"$file"
+ shift
+ ;;
+ -l)
+ eat=1
+ func_cl_dashl "$2"
+ set x "$@" "$lib"
+ shift
+ ;;
+ -l*)
+ func_cl_dashl "${1#-l}"
+ set x "$@" "$lib"
+ shift
+ ;;
+ -L)
+ eat=1
+ func_cl_dashL "$2"
+ ;;
+ -L*)
+ func_cl_dashL "${1#-L}"
+ ;;
+ -static)
+ shared=false
+ ;;
+ -Wl,*)
+ arg=${1#-Wl,}
+ save_ifs="$IFS"; IFS=','
+ for flag in $arg; do
+ IFS="$save_ifs"
+ linker_opts="$linker_opts $flag"
+ done
+ IFS="$save_ifs"
+ ;;
+ -Xlinker)
+ eat=1
+ linker_opts="$linker_opts $2"
+ ;;
+ -*)
+ set x "$@" "$1"
+ shift
+ ;;
+ *.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
+ func_file_conv "$1"
+ set x "$@" -Tp"$file"
+ shift
+ ;;
+ *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
+ func_file_conv "$1" mingw
+ set x "$@" "$file"
+ shift
+ ;;
+ *)
+ set x "$@" "$1"
+ shift
+ ;;
+ esac
+ fi
+ shift
+ done
+ if test -n "$linker_opts"; then
+ linker_opts="-link$linker_opts"
+ fi
+ exec "$@" $linker_opts
+ exit 1
+}
+
+eat=
+
+case $1 in
+ '')
+ echo "$0: No command. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand '-c -o'.
+Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file 'INSTALL'.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "compile $scriptversion"
+ exit $?
+ ;;
+ cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
+ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
+ func_cl_wrapper "$@" # Doesn't return...
+ ;;
+esac
+
+ofile=
+cfile=
+
+for arg
+do
+ if test -n "$eat"; then
+ eat=
+ else
+ case $1 in
+ -o)
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
+ # So we strip '-o arg' only if arg is an object.
+ eat=1
+ case $2 in
+ *.o | *.obj)
+ ofile=$2
+ ;;
+ *)
+ set x "$@" -o "$2"
+ shift
+ ;;
+ esac
+ ;;
+ *.c)
+ cfile=$1
+ set x "$@" "$1"
+ shift
+ ;;
+ *)
+ set x "$@" "$1"
+ shift
+ ;;
+ esac
+ fi
+ shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+ # If no '-o' option was seen then we might have been invoked from a
+ # pattern rule where we don't need one. That is ok -- this is a
+ # normal compilation that the losing compiler can handle. If no
+ # '.c' file was seen then we are probably linking. That is also
+ # ok.
+ exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use '[/\\:.-]' here to ensure that we don't use the same name
+# that we are using for the .o file. Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
+while true; do
+ if mkdir "$lockdir" >/dev/null 2>&1; then
+ break
+ fi
+ sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+ test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+ test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/config.guess b/config.guess
new file mode 100755
index 0000000..f50dcdb
--- /dev/null
+++ b/config.guess
@@ -0,0 +1,1480 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright 1992-2018 Free Software Foundation, Inc.
+
+timestamp='2018-02-24'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <https://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that
+# program. This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+#
+# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
+#
+# You can get the latest version of this script from:
+# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+#
+# Please send patches to <config-patches@gnu.org>.
+
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Options:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright 1992-2018 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int x;" > "$dummy.c" ;
+ for c in cc gcc c89 c99 ; do
+ if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+case "$UNAME_SYSTEM" in
+Linux|GNU|GNU/*)
+ # If the system lacks a compiler, then just pick glibc.
+ # We could probably try harder.
+ LIBC=gnu
+
+ eval "$set_cc_for_build"
+ cat <<-EOF > "$dummy.c"
+ #include <features.h>
+ #if defined(__UCLIBC__)
+ LIBC=uclibc
+ #elif defined(__dietlibc__)
+ LIBC=dietlibc
+ #else
+ LIBC=gnu
+ #endif
+ EOF
+ eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`"
+
+ # If ldd exists, use it to detect musl libc.
+ if command -v ldd >/dev/null && \
+ ldd --version 2>&1 | grep -q ^musl
+ then
+ LIBC=musl
+ fi
+ ;;
+esac
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ sysctl="sysctl -n hw.machine_arch"
+ UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+ "/sbin/$sysctl" 2>/dev/null || \
+ "/usr/sbin/$sysctl" 2>/dev/null || \
+ echo unknown)`
+ case "$UNAME_MACHINE_ARCH" in
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ sh5el) machine=sh5le-unknown ;;
+ earmv*)
+ arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+ endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'`
+ machine="${arch}${endian}"-unknown
+ ;;
+ *) machine="$UNAME_MACHINE_ARCH"-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently (or will in the future) and ABI.
+ case "$UNAME_MACHINE_ARCH" in
+ earm*)
+ os=netbsdelf
+ ;;
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ eval "$set_cc_for_build"
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ELF__
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # Determine ABI tags.
+ case "$UNAME_MACHINE_ARCH" in
+ earm*)
+ expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+ abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"`
+ ;;
+ esac
+ # The OS release
+ # Debian GNU/NetBSD machines have a different userland, and
+ # thus, need a distinct triplet. However, they do not need
+ # kernel version information, so it can be replaced with a
+ # suitable tag, in the style of linux-gnu.
+ case "$UNAME_VERSION" in
+ Debian*)
+ release='-gnu'
+ ;;
+ *)
+ release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2`
+ ;;
+ esac
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "$machine-${os}${release}${abi}"
+ exit ;;
+ *:Bitrig:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+ echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE"
+ exit ;;
+ *:OpenBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE"
+ exit ;;
+ *:LibertyBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
+ echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE"
+ exit ;;
+ *:MidnightBSD:*:*)
+ echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE"
+ exit ;;
+ *:ekkoBSD:*:*)
+ echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE"
+ exit ;;
+ *:SolidBSD:*:*)
+ echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE"
+ exit ;;
+ macppc:MirBSD:*:*)
+ echo powerpc-unknown-mirbsd"$UNAME_RELEASE"
+ exit ;;
+ *:MirBSD:*:*)
+ echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE"
+ exit ;;
+ *:Sortix:*:*)
+ echo "$UNAME_MACHINE"-unknown-sortix
+ exit ;;
+ *:Redox:*:*)
+ echo "$UNAME_MACHINE"-unknown-redox
+ exit ;;
+ mips:OSF1:*.*)
+ echo mips-dec-osf1
+ exit ;;
+ alpha:OSF1:*:*)
+ case $UNAME_RELEASE in
+ *4.0)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ ;;
+ *5.*)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ ;;
+ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+ # types through head -n 1, so we only detect the type of CPU 0.
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ case "$ALPHA_CPU_TYPE" in
+ "EV4 (21064)")
+ UNAME_MACHINE=alpha ;;
+ "EV4.5 (21064)")
+ UNAME_MACHINE=alpha ;;
+ "LCA4 (21066/21068)")
+ UNAME_MACHINE=alpha ;;
+ "EV5 (21164)")
+ UNAME_MACHINE=alphaev5 ;;
+ "EV5.6 (21164A)")
+ UNAME_MACHINE=alphaev56 ;;
+ "EV5.6 (21164PC)")
+ UNAME_MACHINE=alphapca56 ;;
+ "EV5.7 (21164PC)")
+ UNAME_MACHINE=alphapca57 ;;
+ "EV6 (21264)")
+ UNAME_MACHINE=alphaev6 ;;
+ "EV6.7 (21264A)")
+ UNAME_MACHINE=alphaev67 ;;
+ "EV6.8CB (21264C)")
+ UNAME_MACHINE=alphaev68 ;;
+ "EV6.8AL (21264B)")
+ UNAME_MACHINE=alphaev68 ;;
+ "EV6.8CX (21264D)")
+ UNAME_MACHINE=alphaev68 ;;
+ "EV6.9A (21264/EV69A)")
+ UNAME_MACHINE=alphaev69 ;;
+ "EV7 (21364)")
+ UNAME_MACHINE=alphaev7 ;;
+ "EV7.9 (21364A)")
+ UNAME_MACHINE=alphaev79 ;;
+ esac
+ # A Pn.n version is a patched version.
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`"
+ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+ exitcode=$?
+ trap '' 0
+ exit $exitcode ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-unknown-sysv4
+ exit ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo "$UNAME_MACHINE"-unknown-amigaos
+ exit ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo "$UNAME_MACHINE"-unknown-morphos
+ exit ;;
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+ exit ;;
+ *:z/VM:*:*)
+ echo s390-ibm-zvmoe
+ exit ;;
+ *:OS400:*:*)
+ echo powerpc-ibm-os400
+ exit ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix"$UNAME_RELEASE"
+ exit ;;
+ arm*:riscos:*:*|arm*:RISCOS:*:*)
+ echo arm-unknown-riscos
+ exit ;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit ;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit ;;
+ DRS?6000:unix:4.0:6*)
+ echo sparc-icl-nx6
+ exit ;;
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+ case `/usr/bin/uname -p` in
+ sparc) echo sparc-icl-nx7; exit ;;
+ esac ;;
+ s390x:SunOS:*:*)
+ echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
+ exit ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
+ exit ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
+ exit ;;
+ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+ echo i386-pc-auroraux"$UNAME_RELEASE"
+ exit ;;
+ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+ eval "$set_cc_for_build"
+ SUN_ARCH=i386
+ # If there is a compiler, see if it is configured for 64-bit objects.
+ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+ # This test works for both compilers.
+ if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
+ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ SUN_ARCH=x86_64
+ fi
+ fi
+ echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
+ exit ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
+ exit ;;
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`"
+ exit ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos"$UNAME_RELEASE"
+ exit ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3
+ case "`/bin/arch`" in
+ sun3)
+ echo m68k-sun-sunos"$UNAME_RELEASE"
+ ;;
+ sun4)
+ echo sparc-sun-sunos"$UNAME_RELEASE"
+ ;;
+ esac
+ exit ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos"$UNAME_RELEASE"
+ exit ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint"$UNAME_RELEASE"
+ exit ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint"$UNAME_RELEASE"
+ exit ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint"$UNAME_RELEASE"
+ exit ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint"$UNAME_RELEASE"
+ exit ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint"$UNAME_RELEASE"
+ exit ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-unknown-mint"$UNAME_RELEASE"
+ exit ;;
+ m68k:machten:*:*)
+ echo m68k-apple-machten"$UNAME_RELEASE"
+ exit ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten"$UNAME_RELEASE"
+ exit ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+ exit ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix"$UNAME_RELEASE"
+ exit ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix"$UNAME_RELEASE"
+ exit ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix"$UNAME_RELEASE"
+ exit ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ eval "$set_cc_for_build"
+ sed 's/^ //' << EOF > "$dummy.c"
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ $CC_FOR_BUILD -o "$dummy" "$dummy.c" &&
+ dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+ SYSTEM_NAME=`"$dummy" "$dummyarg"` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo mips-mips-riscos"$UNAME_RELEASE"
+ exit ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+ exit ;;
+ Motorola:*:4.3:PL8-*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ]
+ then
+ if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \
+ [ "$TARGET_BINARY_INTERFACE"x = x ]
+ then
+ echo m88k-dg-dgux"$UNAME_RELEASE"
+ else
+ echo m88k-dg-dguxbcs"$UNAME_RELEASE"
+ fi
+ else
+ echo i586-dg-dgux"$UNAME_RELEASE"
+ fi
+ exit ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`"
+ exit ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ echo i386-ibm-aix
+ exit ;;
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
+ fi
+ echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV"
+ exit ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ eval "$set_cc_for_build"
+ sed 's/^ //' << EOF > "$dummy.c"
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"`
+ then
+ echo "$SYSTEM_NAME"
+ else
+ echo rs6000-ibm-aix3.2.5
+ fi
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+ exit ;;
+ *:AIX:*:[4567])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if [ -x /usr/bin/lslpp ] ; then
+ IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
+ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
+ else
+ IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
+ fi
+ echo "$IBM_ARCH"-ibm-aix"$IBM_REV"
+ exit ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit ;;
+ ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*)
+ echo romp-ibm-bsd4.4
+ exit ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to
+ exit ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
+ case "$UNAME_MACHINE" in
+ 9000/31?) HP_ARCH=m68000 ;;
+ 9000/[34]??) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "$sc_cpu_version" in
+ 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "$sc_kernel_bits" in
+ 32) HP_ARCH=hppa2.0n ;;
+ 64) HP_ARCH=hppa2.0w ;;
+ '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if [ "$HP_ARCH" = "" ]; then
+ eval "$set_cc_for_build"
+ sed 's/^ //' << EOF > "$dummy.c"
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"`
+ test -z "$HP_ARCH" && HP_ARCH=hppa
+ fi ;;
+ esac
+ if [ "$HP_ARCH" = hppa2.0w ]
+ then
+ eval "$set_cc_for_build"
+
+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
+ # generating 64-bit code. GNU and HP use different nomenclature:
+ #
+ # $ CC_FOR_BUILD=cc ./config.guess
+ # => hppa2.0w-hp-hpux11.23
+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+ # => hppa64-hp-hpux11.23
+
+ if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) |
+ grep -q __LP64__
+ then
+ HP_ARCH=hppa2.0w
+ else
+ HP_ARCH=hppa64
+ fi
+ fi
+ echo "$HP_ARCH"-hp-hpux"$HPUX_REV"
+ exit ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux"$HPUX_REV"
+ exit ;;
+ 3050*:HI-UX:*:*)
+ eval "$set_cc_for_build"
+ sed 's/^ //' << EOF > "$dummy.c"
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo unknown-hitachi-hiuxwe2
+ exit ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*)
+ echo hppa1.1-hp-bsd
+ exit ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*)
+ echo hppa1.1-hp-osf
+ exit ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit ;;
+ i*86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo "$UNAME_MACHINE"-unknown-osf1mk
+ else
+ echo "$UNAME_MACHINE"-unknown-osf1
+ fi
+ exit ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ *:UNICOS/mp:*:*)
+ echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+ FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+ FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ 5000:UNIX_System_V:4.*:*)
+ FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+ FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE"
+ exit ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi"$UNAME_RELEASE"
+ exit ;;
+ *:BSD/OS:*:*)
+ echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE"
+ exit ;;
+ *:FreeBSD:*:*)
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ case "$UNAME_PROCESSOR" in
+ amd64)
+ UNAME_PROCESSOR=x86_64 ;;
+ i386)
+ UNAME_PROCESSOR=i586 ;;
+ esac
+ echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
+ exit ;;
+ i*:CYGWIN*:*)
+ echo "$UNAME_MACHINE"-pc-cygwin
+ exit ;;
+ *:MINGW64*:*)
+ echo "$UNAME_MACHINE"-pc-mingw64
+ exit ;;
+ *:MINGW*:*)
+ echo "$UNAME_MACHINE"-pc-mingw32
+ exit ;;
+ *:MSYS*:*)
+ echo "$UNAME_MACHINE"-pc-msys
+ exit ;;
+ i*:PW*:*)
+ echo "$UNAME_MACHINE"-pc-pw32
+ exit ;;
+ *:Interix*:*)
+ case "$UNAME_MACHINE" in
+ x86)
+ echo i586-pc-interix"$UNAME_RELEASE"
+ exit ;;
+ authenticamd | genuineintel | EM64T)
+ echo x86_64-unknown-interix"$UNAME_RELEASE"
+ exit ;;
+ IA64)
+ echo ia64-unknown-interix"$UNAME_RELEASE"
+ exit ;;
+ esac ;;
+ i*:UWIN*:*)
+ echo "$UNAME_MACHINE"-pc-uwin
+ exit ;;
+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+ echo x86_64-unknown-cygwin
+ exit ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
+ exit ;;
+ *:GNU:*:*)
+ # the GNU system
+ echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`"
+ exit ;;
+ *:GNU/*:*:*)
+ # other systems with GNU libc and userland
+ echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC"
+ exit ;;
+ i*86:Minix:*:*)
+ echo "$UNAME_MACHINE"-pc-minix
+ exit ;;
+ aarch64:Linux:*:*)
+ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+ exit ;;
+ aarch64_be:Linux:*:*)
+ UNAME_MACHINE=aarch64_be
+ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+ exit ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep -q ld.so.1
+ if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
+ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+ exit ;;
+ arc:Linux:*:* | arceb:Linux:*:*)
+ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+ exit ;;
+ arm*:Linux:*:*)
+ eval "$set_cc_for_build"
+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_EABI__
+ then
+ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+ else
+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_PCS_VFP
+ then
+ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi
+ else
+ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf
+ fi
+ fi
+ exit ;;
+ avr32*:Linux:*:*)
+ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+ exit ;;
+ cris:Linux:*:*)
+ echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
+ exit ;;
+ crisv32:Linux:*:*)
+ echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
+ exit ;;
+ e2k:Linux:*:*)
+ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+ exit ;;
+ frv:Linux:*:*)
+ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+ exit ;;
+ hexagon:Linux:*:*)
+ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+ exit ;;
+ i*86:Linux:*:*)
+ echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
+ exit ;;
+ ia64:Linux:*:*)
+ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+ exit ;;
+ k1om:Linux:*:*)
+ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+ exit ;;
+ m32r*:Linux:*:*)
+ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+ exit ;;
+ m68*:Linux:*:*)
+ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+ exit ;;
+ mips:Linux:*:* | mips64:Linux:*:*)
+ eval "$set_cc_for_build"
+ sed 's/^ //' << EOF > "$dummy.c"
+ #undef CPU
+ #undef ${UNAME_MACHINE}
+ #undef ${UNAME_MACHINE}el
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=${UNAME_MACHINE}el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=${UNAME_MACHINE}
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`"
+ test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; }
+ ;;
+ mips64el:Linux:*:*)
+ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+ exit ;;
+ openrisc*:Linux:*:*)
+ echo or1k-unknown-linux-"$LIBC"
+ exit ;;
+ or32:Linux:*:* | or1k*:Linux:*:*)
+ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+ exit ;;
+ padre:Linux:*:*)
+ echo sparc-unknown-linux-"$LIBC"
+ exit ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-"$LIBC"
+ exit ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;;
+ PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;;
+ *) echo hppa-unknown-linux-"$LIBC" ;;
+ esac
+ exit ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-"$LIBC"
+ exit ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-"$LIBC"
+ exit ;;
+ ppc64le:Linux:*:*)
+ echo powerpc64le-unknown-linux-"$LIBC"
+ exit ;;
+ ppcle:Linux:*:*)
+ echo powerpcle-unknown-linux-"$LIBC"
+ exit ;;
+ riscv32:Linux:*:* | riscv64:Linux:*:*)
+ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+ exit ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo "$UNAME_MACHINE"-ibm-linux-"$LIBC"
+ exit ;;
+ sh64*:Linux:*:*)
+ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+ exit ;;
+ sh*:Linux:*:*)
+ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+ exit ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+ exit ;;
+ tile*:Linux:*:*)
+ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+ exit ;;
+ vax:Linux:*:*)
+ echo "$UNAME_MACHINE"-dec-linux-"$LIBC"
+ exit ;;
+ x86_64:Linux:*:*)
+ if objdump -f /bin/sh | grep -q elf32-x86-64; then
+ echo "$UNAME_MACHINE"-pc-linux-"$LIBC"x32
+ else
+ echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
+ fi
+ exit ;;
+ xtensa*:Linux:*:*)
+ echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+ exit ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ echo i386-sequent-sysv4
+ exit ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION"
+ exit ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo "$UNAME_MACHINE"-pc-os2-emx
+ exit ;;
+ i*86:XTS-300:*:STOP)
+ echo "$UNAME_MACHINE"-unknown-stop
+ exit ;;
+ i*86:atheos:*:*)
+ echo "$UNAME_MACHINE"-unknown-atheos
+ exit ;;
+ i*86:syllable:*:*)
+ echo "$UNAME_MACHINE"-pc-syllable
+ exit ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+ echo i386-unknown-lynxos"$UNAME_RELEASE"
+ exit ;;
+ i*86:*DOS:*:*)
+ echo "$UNAME_MACHINE"-pc-msdosdjgpp
+ exit ;;
+ i*86:*:4.*:*)
+ UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL"
+ else
+ echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL"
+ fi
+ exit ;;
+ i*86:*:5:[678]*)
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}"
+ exit ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ echo "$UNAME_MACHINE"-pc-isc"$UNAME_REL"
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL"
+ else
+ echo "$UNAME_MACHINE"-pc-sysv32
+ fi
+ exit ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i586.
+ # Note: whatever this is, it MUST be the same as what config.sub
+ # prints for the "djgpp" host, or else GDB configure will decide that
+ # this is a cross-build.
+ echo i586-pc-msdosdjgpp
+ exit ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4
+ fi
+ exit ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ echo m68k-convergent-sysv
+ exit ;;
+ M680?0:D-NIX:5.3:*)
+ echo m68k-diab-dnix
+ exit ;;
+ M68*:*:R3V[5678]*:*)
+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4; exit; } ;;
+ NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+ OS_REL='.3'
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ echo m68k-unknown-lynxos"$UNAME_RELEASE"
+ exit ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit ;;
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-unknown-lynxos"$UNAME_RELEASE"
+ exit ;;
+ rs6000:LynxOS:2.*:*)
+ echo rs6000-unknown-lynxos"$UNAME_RELEASE"
+ exit ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+ echo powerpc-unknown-lynxos"$UNAME_RELEASE"
+ exit ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv"$UNAME_RELEASE"
+ exit ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ echo "$UNAME_MACHINE"-sni-sysv4
+ else
+ echo ns32k-sni-sysv
+ fi
+ exit ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+ exit ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ echo i860-stratus-sysv4
+ exit ;;
+ i*86:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo "$UNAME_MACHINE"-stratus-vos
+ exit ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo hppa1.1-stratus-vos
+ exit ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux"$UNAME_RELEASE"
+ exit ;;
+ news*:NEWS-OS:6*:*)
+ echo mips-sony-newsos6
+ exit ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+ echo mips-nec-sysv"$UNAME_RELEASE"
+ else
+ echo mips-unknown-sysv"$UNAME_RELEASE"
+ fi
+ exit ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+ exit ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+ exit ;;
+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
+ echo i586-pc-haiku
+ exit ;;
+ x86_64:Haiku:*:*)
+ echo x86_64-unknown-haiku
+ exit ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux"$UNAME_RELEASE"
+ exit ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux"$UNAME_RELEASE"
+ exit ;;
+ SX-6:SUPER-UX:*:*)
+ echo sx6-nec-superux"$UNAME_RELEASE"
+ exit ;;
+ SX-7:SUPER-UX:*:*)
+ echo sx7-nec-superux"$UNAME_RELEASE"
+ exit ;;
+ SX-8:SUPER-UX:*:*)
+ echo sx8-nec-superux"$UNAME_RELEASE"
+ exit ;;
+ SX-8R:SUPER-UX:*:*)
+ echo sx8r-nec-superux"$UNAME_RELEASE"
+ exit ;;
+ SX-ACE:SUPER-UX:*:*)
+ echo sxace-nec-superux"$UNAME_RELEASE"
+ exit ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody"$UNAME_RELEASE"
+ exit ;;
+ *:Rhapsody:*:*)
+ echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE"
+ exit ;;
+ *:Darwin:*:*)
+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+ eval "$set_cc_for_build"
+ if test "$UNAME_PROCESSOR" = unknown ; then
+ UNAME_PROCESSOR=powerpc
+ fi
+ if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then
+ if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ case $UNAME_PROCESSOR in
+ i386) UNAME_PROCESSOR=x86_64 ;;
+ powerpc) UNAME_PROCESSOR=powerpc64 ;;
+ esac
+ fi
+ # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
+ if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_PPC >/dev/null
+ then
+ UNAME_PROCESSOR=powerpc
+ fi
+ fi
+ elif test "$UNAME_PROCESSOR" = i386 ; then
+ # Avoid executing cc on OS X 10.9, as it ships with a stub
+ # that puts up a graphical alert prompting to install
+ # developer tools. Any system running Mac OS X 10.7 or
+ # later (Darwin 11 and later) is required to have a 64-bit
+ # processor. This is not true of the ARM version of Darwin
+ # that Apple uses in portable devices.
+ UNAME_PROCESSOR=x86_64
+ fi
+ echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE"
+ exit ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = x86; then
+ UNAME_PROCESSOR=i386
+ UNAME_MACHINE=pc
+ fi
+ echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE"
+ exit ;;
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit ;;
+ NEO-*:NONSTOP_KERNEL:*:*)
+ echo neo-tandem-nsk"$UNAME_RELEASE"
+ exit ;;
+ NSE-*:NONSTOP_KERNEL:*:*)
+ echo nse-tandem-nsk"$UNAME_RELEASE"
+ exit ;;
+ NSR-*:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk"$UNAME_RELEASE"
+ exit ;;
+ NSV-*:NONSTOP_KERNEL:*:*)
+ echo nsv-tandem-nsk"$UNAME_RELEASE"
+ exit ;;
+ NSX-*:NONSTOP_KERNEL:*:*)
+ echo nsx-tandem-nsk"$UNAME_RELEASE"
+ exit ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit ;;
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+ exit ;;
+ DS/*:UNIX_System_V:*:*)
+ echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE"
+ exit ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "$cputype" = 386; then
+ UNAME_MACHINE=i386
+ else
+ UNAME_MACHINE="$cputype"
+ fi
+ echo "$UNAME_MACHINE"-unknown-plan9
+ exit ;;
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+ exit ;;
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+ exit ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit ;;
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+ exit ;;
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+ exit ;;
+ SEI:*:*:SEIUX)
+ echo mips-sei-seiux"$UNAME_RELEASE"
+ exit ;;
+ *:DragonFly:*:*)
+ echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
+ exit ;;
+ *:*VMS:*:*)
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case "$UNAME_MACHINE" in
+ A*) echo alpha-dec-vms ; exit ;;
+ I*) echo ia64-dec-vms ; exit ;;
+ V*) echo vax-dec-vms ; exit ;;
+ esac ;;
+ *:XENIX:*:SysV)
+ echo i386-pc-xenix
+ exit ;;
+ i*86:skyos:*:*)
+ echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`"
+ exit ;;
+ i*86:rdos:*:*)
+ echo "$UNAME_MACHINE"-pc-rdos
+ exit ;;
+ i*86:AROS:*:*)
+ echo "$UNAME_MACHINE"-pc-aros
+ exit ;;
+ x86_64:VMkernel:*:*)
+ echo "$UNAME_MACHINE"-unknown-esx
+ exit ;;
+ amd64:Isilon\ OneFS:*:*)
+ echo x86_64-unknown-onefs
+ exit ;;
+esac
+
+echo "$0: unable to guess system type" >&2
+
+case "$UNAME_MACHINE:$UNAME_SYSTEM" in
+ mips:Linux | mips64:Linux)
+ # If we got here on MIPS GNU/Linux, output extra information.
+ cat >&2 <<EOF
+
+NOTE: MIPS GNU/Linux systems require a C compiler to fully recognize
+the system type. Please install a C compiler and try again.
+EOF
+ ;;
+esac
+
+cat >&2 <<EOF
+
+This script (version $timestamp), has failed to recognize the
+operating system you are using. If your script is old, overwrite *all*
+copies of config.guess and config.sub with the latest versions from:
+
+ https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+and
+ https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+
+If $0 has already been updated, send the following data and any
+information you think might be pertinent to config-patches@gnu.org to
+provide the necessary information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = "$UNAME_MACHINE"
+UNAME_RELEASE = "$UNAME_RELEASE"
+UNAME_SYSTEM = "$UNAME_SYSTEM"
+UNAME_VERSION = "$UNAME_VERSION"
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-functions 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config.h.in b/config.h.in
new file mode 100644
index 0000000..2b7268e
--- /dev/null
+++ b/config.h.in
@@ -0,0 +1,630 @@
+/* config.h.in. Generated from configure.ac by autoheader. */
+
+/* Define if account management tools should be installed setuid and
+ authenticate the callers */
+#undef ACCT_TOOLS_SETUID
+
+/* Define to 1 if translation of program messages to the user's native
+ language is requested. */
+#undef ENABLE_NLS
+
+/* Define to support the subordinate IDs. */
+#undef ENABLE_SUBIDS
+
+/* Path for faillog file. */
+#undef FAILLOG_FILE
+
+/* Define to the type of elements in the array set by `getgroups'. Usually
+ this is either `int' or `gid_t'. */
+#undef GETGROUPS_T
+
+/* max group name length */
+#undef GROUP_NAME_MAX_LENGTH
+
+/* Define to 1 if you have the declaration of 'pam_fail_delay' */
+#undef HAS_PAM_FAIL_DELAY
+
+/* Defined to 1 if you have the declaration of 'secure_getenv' */
+#undef HAS_SECURE_GETENV
+
+/* Define to 1 if you have the <acl/libacl.h> header file. */
+#undef HAVE_ACL_LIBACL_H
+
+/* Define to 1 if you have the <attr/error_context.h> header file. */
+#undef HAVE_ATTR_ERROR_CONTEXT_H
+
+/* Define to 1 if you have the <attr/libattr.h> header file. */
+#undef HAVE_ATTR_LIBATTR_H
+
+/* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the
+ CoreFoundation framework. */
+#undef HAVE_CFLOCALECOPYCURRENT
+
+/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in
+ the CoreFoundation framework. */
+#undef HAVE_CFPREFERENCESCOPYAPPVALUE
+
+/* Define if the GNU dcgettext() function is already present or preinstalled.
+ */
+#undef HAVE_DCGETTEXT
+
+/* Define to 1 if you have the declaration of `PAM_DATA_SILENT', and to 0 if
+ you don't. */
+#undef HAVE_DECL_PAM_DATA_SILENT
+
+/* Define to 1 if you have the declaration of `PAM_DELETE_CRED', and to 0 if
+ you don't. */
+#undef HAVE_DECL_PAM_DELETE_CRED
+
+/* Define to 1 if you have the declaration of `PAM_ESTABLISH_CRED', and to 0
+ if you don't. */
+#undef HAVE_DECL_PAM_ESTABLISH_CRED
+
+/* Define to 1 if you have the declaration of `PAM_NEW_AUTHTOK_REQD', and to 0
+ if you don't. */
+#undef HAVE_DECL_PAM_NEW_AUTHTOK_REQD
+
+/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
+ */
+#undef HAVE_DIRENT_H
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the <errno.h> header file. */
+#undef HAVE_ERRNO_H
+
+/* Define to 1 if you have the `fchmod' function. */
+#undef HAVE_FCHMOD
+
+/* Define to 1 if you have the `fchown' function. */
+#undef HAVE_FCHOWN
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define to 1 if you have the `fsync' function. */
+#undef HAVE_FSYNC
+
+/* Define to 1 if you have the `futimes' function. */
+#undef HAVE_FUTIMES
+
+/* Define to 1 if you have the `getaddrinfo' function. */
+#undef HAVE_GETADDRINFO
+
+/* Define to 1 if you have the `getgrgid_r' function. */
+#undef HAVE_GETGRGID_R
+
+/* Define to 1 if you have the `getgrnam_r' function. */
+#undef HAVE_GETGRNAM_R
+
+/* Define to 1 if you have the `getgroups' function. */
+#undef HAVE_GETGROUPS
+
+/* Define to 1 if you have the `gethostname' function. */
+#undef HAVE_GETHOSTNAME
+
+/* Define to 1 if you have the `getpwnam_r' function. */
+#undef HAVE_GETPWNAM_R
+
+/* Define to 1 if you have the `getpwuid_r' function. */
+#undef HAVE_GETPWUID_R
+
+/* Define to 1 if you have the `getspnam' function. */
+#undef HAVE_GETSPNAM
+
+/* Define to 1 if you have the `getspnam_r' function. */
+#undef HAVE_GETSPNAM_R
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#undef HAVE_GETTEXT
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#undef HAVE_GETTIMEOFDAY
+
+/* Define to 1 if you have the `getusershell' function. */
+#undef HAVE_GETUSERSHELL
+
+/* Define to 1 if you have the `getutent' function. */
+#undef HAVE_GETUTENT
+
+/* Define to 1 if you have the <gshadow.h> header file. */
+#undef HAVE_GSHADOW_H
+
+/* Define if you have the iconv() function and it works. */
+#undef HAVE_ICONV
+
+/* Define to 1 if you have the `initgroups' function. */
+#undef HAVE_INITGROUPS
+
+/* Define to 1 if you have the `innetgr' function. */
+#undef HAVE_INNETGR
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the `l64a' function. */
+#undef HAVE_L64A
+
+/* Define to 1 if you have the <lastlog.h> header file. */
+#undef HAVE_LASTLOG_H
+
+/* Define to 1 if you have the `lchown' function. */
+#undef HAVE_LCHOWN
+
+/* Define to 1 if you have the `lckpwdf' function. */
+#undef HAVE_LCKPWDF
+
+/* Defined if you have libcrack. */
+#undef HAVE_LIBCRACK
+
+/* Defined if you have the ts&szs cracklib. */
+#undef HAVE_LIBCRACK_HIST
+
+/* Defined if it includes *Pw functions. */
+#undef HAVE_LIBCRACK_PW
+
+/* Define to 1 if you have the <limits.h> header file. */
+#undef HAVE_LIMITS_H
+
+/* Define to 1 if you have the <linux/btrfs_tree.h> header file. */
+#undef HAVE_LINUX_BTRFS_TREE_H
+
+/* Define to 1 if you have the <linux/magic.h> header file. */
+#undef HAVE_LINUX_MAGIC_H
+
+/* Define if struct lastlog has ll_host */
+#undef HAVE_LL_HOST
+
+/* Define to 1 if you have the <locale.h> header file. */
+#undef HAVE_LOCALE_H
+
+/* Define to 1 if you have the `lstat' function. */
+#undef HAVE_LSTAT
+
+/* Define to 1 if you have the `lutimes' function. */
+#undef HAVE_LUTIMES
+
+/* Define to 1 if you have the `memcpy' function. */
+#undef HAVE_MEMCPY
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `memset' function. */
+#undef HAVE_MEMSET
+
+/* Define to 1 if you have the `mkdir' function. */
+#undef HAVE_MKDIR
+
+/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
+#undef HAVE_NDIR_H
+
+/* Define to 1 if you have the <netdb.h> header file. */
+#undef HAVE_NETDB_H
+
+/* Define to 1 if you have the <paths.h> header file. */
+#undef HAVE_PATHS_H
+
+/* Define to 1 if you have the `putgrent' function. */
+#undef HAVE_PUTGRENT
+
+/* Define to 1 if you have the `putpwent' function. */
+#undef HAVE_PUTPWENT
+
+/* Define to 1 if you have the `putspent' function. */
+#undef HAVE_PUTSPENT
+
+/* Define to 1 if you have the `rename' function. */
+#undef HAVE_RENAME
+
+/* Define to 1 if you have the `rmdir' function. */
+#undef HAVE_RMDIR
+
+/* Define to 1 if you have the <rpc/key_prot.h> header file. */
+#undef HAVE_RPC_KEY_PROT_H
+
+/* Define to 1 if you have the `ruserok' function. */
+#undef HAVE_RUSEROK
+
+/* Define to 1 if you have the <security/openpam.h> header file. */
+#undef HAVE_SECURITY_OPENPAM_H
+
+/* Define to 1 if you have the <security/pam_misc.h> header file. */
+#undef HAVE_SECURITY_PAM_MISC_H
+
+/* Define to 1 if you have the <selinux/selinux.h> header file. */
+#undef HAVE_SELINUX_SELINUX_H
+
+/* Define to 1 if you have the <semanage/semanage.h> header file. */
+#undef HAVE_SEMANAGE_SEMANAGE_H
+
+/* Define to 1 if you have the `setgroups' function. */
+#undef HAVE_SETGROUPS
+
+/* Define to 1 if you have the `sgetgrent' function. */
+#undef HAVE_SGETGRENT
+
+/* Define to 1 if you have the `sgetpwent' function. */
+#undef HAVE_SGETPWENT
+
+/* Define to 1 if you have the `sgetspent' function. */
+#undef HAVE_SGETSPENT
+
+/* Define to 1 if you have the <sgtty.h> header file. */
+#undef HAVE_SGTTY_H
+
+/* Have working shadow group support in libc */
+#undef HAVE_SHADOWGRP
+
+/* Define to 1 if you have the `sigaction' function. */
+#undef HAVE_SIGACTION
+
+/* Define to 1 if you have the `snprintf' function. */
+#undef HAVE_SNPRINTF
+
+/* Define to 1 if stdbool.h conforms to C99. */
+#undef HAVE_STDBOOL_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#undef HAVE_STRCASECMP
+
+/* Define to 1 if you have the `strchr' function. */
+#undef HAVE_STRCHR
+
+/* Define to 1 if you have the `strdup' function. */
+#undef HAVE_STRDUP
+
+/* Define to 1 if you have the `strerror' function. */
+#undef HAVE_STRERROR
+
+/* Define to 1 if you have the `strftime' function. */
+#undef HAVE_STRFTIME
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strstr' function. */
+#undef HAVE_STRSTR
+
+/* Define to 1 if `st_atim' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_ATIM
+
+/* Define to 1 if `st_atimensec' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_ATIMENSEC
+
+/* Define to 1 if `st_mtim' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_MTIM
+
+/* Define to 1 if `st_mtimensec' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_MTIMENSEC
+
+/* Define to 1 if `st_rdev' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_RDEV
+
+/* Define to 1 if `ut_addr' is a member of `struct utmpx'. */
+#undef HAVE_STRUCT_UTMPX_UT_ADDR
+
+/* Define to 1 if `ut_addr_v6' is a member of `struct utmpx'. */
+#undef HAVE_STRUCT_UTMPX_UT_ADDR_V6
+
+/* Define to 1 if `ut_host' is a member of `struct utmpx'. */
+#undef HAVE_STRUCT_UTMPX_UT_HOST
+
+/* Define to 1 if `ut_name' is a member of `struct utmpx'. */
+#undef HAVE_STRUCT_UTMPX_UT_NAME
+
+/* Define to 1 if `ut_syslen' is a member of `struct utmpx'. */
+#undef HAVE_STRUCT_UTMPX_UT_SYSLEN
+
+/* Define to 1 if `ut_time' is a member of `struct utmpx'. */
+#undef HAVE_STRUCT_UTMPX_UT_TIME
+
+/* Define to 1 if `ut_xtime' is a member of `struct utmpx'. */
+#undef HAVE_STRUCT_UTMPX_UT_XTIME
+
+/* Define to 1 if `ut_addr' is a member of `struct utmp'. */
+#undef HAVE_STRUCT_UTMP_UT_ADDR
+
+/* Define to 1 if `ut_addr_v6' is a member of `struct utmp'. */
+#undef HAVE_STRUCT_UTMP_UT_ADDR_V6
+
+/* Define to 1 if `ut_host' is a member of `struct utmp'. */
+#undef HAVE_STRUCT_UTMP_UT_HOST
+
+/* Define to 1 if `ut_id' is a member of `struct utmp'. */
+#undef HAVE_STRUCT_UTMP_UT_ID
+
+/* Define to 1 if `ut_name' is a member of `struct utmp'. */
+#undef HAVE_STRUCT_UTMP_UT_NAME
+
+/* Define to 1 if `ut_syslen' is a member of `struct utmp'. */
+#undef HAVE_STRUCT_UTMP_UT_SYSLEN
+
+/* Define to 1 if `ut_time' is a member of `struct utmp'. */
+#undef HAVE_STRUCT_UTMP_UT_TIME
+
+/* Define to 1 if `ut_tv' is a member of `struct utmp'. */
+#undef HAVE_STRUCT_UTMP_UT_TV
+
+/* Define to 1 if `ut_type' is a member of `struct utmp'. */
+#undef HAVE_STRUCT_UTMP_UT_TYPE
+
+/* Define to 1 if `ut_user' is a member of `struct utmp'. */
+#undef HAVE_STRUCT_UTMP_UT_USER
+
+/* Define to 1 if `ut_xtime' is a member of `struct utmp'. */
+#undef HAVE_STRUCT_UTMP_UT_XTIME
+
+/* Define to 1 if you have the <syslog.h> header file. */
+#undef HAVE_SYSLOG_H
+
+/* Define to 1 if you have the <sys/capability.h> header file. */
+#undef HAVE_SYS_CAPABILITY_H
+
+/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
+ */
+#undef HAVE_SYS_DIR_H
+
+/* Define to 1 if you have the <sys/ioctl.h> header file. */
+#undef HAVE_SYS_IOCTL_H
+
+/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
+ */
+#undef HAVE_SYS_NDIR_H
+
+/* Define to 1 if you have the <sys/resource.h> header file. */
+#undef HAVE_SYS_RESOURCE_H
+
+/* Define to 1 if you have the <sys/statfs.h> header file. */
+#undef HAVE_SYS_STATFS_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */
+#undef HAVE_SYS_WAIT_H
+
+/* Define to 1 if you have the <tcb.h> header file. */
+#undef HAVE_TCB_H
+
+/* Define to 1 if you have the <termios.h> header file. */
+#undef HAVE_TERMIOS_H
+
+/* Define to 1 if you have the <termio.h> header file. */
+#undef HAVE_TERMIO_H
+
+/* Define to 1 if you have the <ulimit.h> header file. */
+#undef HAVE_ULIMIT_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `updwtmp' function. */
+#undef HAVE_UPDWTMP
+
+/* Define to 1 if you have the `updwtmpx' function. */
+#undef HAVE_UPDWTMPX
+
+/* Define to 1 if you have the <utime.h> header file. */
+#undef HAVE_UTIME_H
+
+/* Define to 1 if `utime(file, NULL)' sets file's timestamp to the present. */
+#undef HAVE_UTIME_NULL
+
+/* Define to 1 if you have the <utmpx.h> header file. */
+#undef HAVE_UTMPX_H
+
+/* Define to 1 if you have the <utmp.h> header file. */
+#undef HAVE_UTMP_H
+
+/* Define to 1 if the system has the type `_Bool'. */
+#undef HAVE__BOOL
+
+/* Path for lastlog file. */
+#undef LASTLOG_FILE
+
+/* Define to the sub-directory where libtool stores uninstalled libraries. */
+#undef LT_OBJDIR
+
+/* Location of system mail spool directory. */
+#undef MAIL_SPOOL_DIR
+
+/* Name of user's mail spool file if stored in user's home directory. */
+#undef MAIL_SPOOL_FILE
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Path to passwd program. */
+#undef PASSWD_PROGRAM
+
+/* Define as the return type of signal handlers (`int' or `void'). */
+#undef RETSIGTYPE
+
+/* Define if login should support the -r flag for rlogind. */
+#undef RLOGIN
+
+/* Define to the ruserok() "success" return value (0 or 1). */
+#undef RUSEROK
+
+/* Define to support the shadow group file. */
+#undef SHADOWGRP
+
+/* PAM conversation to use */
+#undef SHADOW_PAM_CONVERSATION
+
+/* The default shell. */
+#undef SHELL
+
+/* The size of `gid_t', as computed by sizeof. */
+#undef SIZEOF_GID_T
+
+/* The size of `uid_t', as computed by sizeof. */
+#undef SIZEOF_UID_T
+
+/* Define to support S/Key logins. */
+#undef SKEY
+
+/* Define to support newer BSD S/Key API */
+#undef SKEY_BSD_STYLE
+
+/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
+#undef STAT_MACROS_BROKEN
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to support /etc/suauth su access control. */
+#undef SU_ACCESS
+
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+#undef TIME_WITH_SYS_TIME
+
+/* Define to 1 if your <sys/time.h> declares `struct tm'. */
+#undef TM_IN_SYS_TIME
+
+/* Define to allow the bcrypt password encryption algorithm */
+#undef USE_BCRYPT
+
+/* Define to support flushing of nscd caches */
+#undef USE_NSCD
+
+/* Define to support Pluggable Authentication Modules */
+#undef USE_PAM
+
+/* Define to allow the SHA256 and SHA512 password encryption algorithms */
+#undef USE_SHA_CRYPT
+
+/* Define to support flushing of sssd caches */
+#undef USE_SSSD
+
+/* Define to use syslog(). */
+#undef USE_SYSLOG
+
+/* Enable extensions on AIX 3, Interix. */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them. */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris. */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop. */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris. */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
+/* Define if utmpx should be used */
+#undef USE_UTMPX
+
+/* Version number of package */
+#undef VERSION
+
+/* Build shadow with ACL support */
+#undef WITH_ACL
+
+/* Build shadow with Extended Attributes support */
+#undef WITH_ATTR
+
+/* Define if you want to enable Audit messages */
+#undef WITH_AUDIT
+
+/* Build shadow with BtrFS support */
+#undef WITH_BTRFS
+
+/* Build shadow with SELinux support */
+#undef WITH_SELINUX
+
+/* Build with su */
+#undef WITH_SU
+
+/* Build shadow with tcb support (incomplete) */
+#undef WITH_TCB
+
+/* Enable large inode numbers on Mac OS X 10.5. */
+#ifndef _DARWIN_USE_64_BIT_INODE
+# define _DARWIN_USE_64_BIT_INODE 1
+#endif
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#undef _FILE_OFFSET_BITS
+
+/* Define for large files, on AIX-style hosts. */
+#undef _LARGE_FILES
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+ this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
+
+/* Path for utmp file. */
+#undef _UTMP_FILE
+
+/* Path for wtmp file. */
+#undef _WTMP_FILE
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+#undef gid_t
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef mode_t
+
+/* Define to `long int' if <sys/types.h> does not define. */
+#undef off_t
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef pid_t
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+#undef uid_t
diff --git a/config.rpath b/config.rpath
new file mode 100755
index 0000000..c492a93
--- /dev/null
+++ b/config.rpath
@@ -0,0 +1,614 @@
+#! /bin/sh
+# Output a system dependent set of variables, describing how to set the
+# run time search path of shared libraries in an executable.
+#
+# Copyright 1996-2006 Free Software Foundation, Inc.
+# Taken from GNU libtool, 2001
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+#
+# The first argument passed to this file is the canonical host specification,
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
+# should be set by the caller.
+#
+# The set of defined variables is at the end of this script.
+
+# Known limitations:
+# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
+# than 256 bytes, otherwise the compiler driver will dump core. The only
+# known workaround is to choose shorter directory names for the build
+# directory and/or the installation directory.
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+shrext=.so
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+# Code taken from libtool.m4's _LT_CC_BASENAME.
+
+for cc_temp in $CC""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
+
+# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC.
+
+wl=
+if test "$GCC" = yes; then
+ wl='-Wl,'
+else
+ case "$host_os" in
+ aix*)
+ wl='-Wl,'
+ ;;
+ darwin*)
+ case $cc_basename in
+ xlc*)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ mingw* | pw32* | os2*)
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ wl='-Wl,'
+ ;;
+ irix5* | irix6* | nonstopux*)
+ wl='-Wl,'
+ ;;
+ newsos6)
+ ;;
+ linux*)
+ case $cc_basename in
+ icc* | ecc*)
+ wl='-Wl,'
+ ;;
+ pgcc | pgf77 | pgf90)
+ wl='-Wl,'
+ ;;
+ ccc*)
+ wl='-Wl,'
+ ;;
+ como)
+ wl='-lopt='
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ osf3* | osf4* | osf5*)
+ wl='-Wl,'
+ ;;
+ sco3.2v5*)
+ ;;
+ solaris*)
+ wl='-Wl,'
+ ;;
+ sunos4*)
+ wl='-Qoption ld '
+ ;;
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ wl='-Wl,'
+ ;;
+ sysv4*MP*)
+ ;;
+ unicos*)
+ wl='-Wl,'
+ ;;
+ uts4*)
+ ;;
+ esac
+fi
+
+# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS.
+
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+
+case "$host_os" in
+ cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ # Unlike libtool, we use -rpath here, not --rpath, since the documented
+ # option of GNU ld is called -rpath, not --rpath.
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ case "$host_os" in
+ aix3* | aix4* | aix5*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ fi
+ ;;
+ amigaos*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we cannot use
+ # them.
+ ld_shlibs=no
+ ;;
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ cygwin* | mingw* | pw32*)
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ interix3*)
+ hardcode_direct=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ linux*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ netbsd*)
+ ;;
+ solaris*)
+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+ sunos4*)
+ hardcode_direct=yes
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ if test "$ld_shlibs" = no; then
+ hardcode_libdir_flag_spec=
+ fi
+else
+ case "$host_os" in
+ aix3*)
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ else
+ aix_use_runtimelinking=no
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+ fi
+ hardcode_direct=yes
+ hardcode_libdir_separator=':'
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ hardcode_direct=yes
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ fi
+ # Begin _LT_AC_SYS_LIBPATH_AIX.
+ echo 'int main () { return 0; }' > conftest.c
+ ${CC} ${LDFLAGS} conftest.c -o conftest
+ aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ fi
+ if test -z "$aix_libpath"; then
+ aix_libpath="/usr/lib:/lib"
+ fi
+ rm -f conftest.c conftest
+ # End _LT_AC_SYS_LIBPATH_AIX.
+ if test "$aix_use_runtimelinking" = yes; then
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ else
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ fi
+ fi
+ ;;
+ amigaos*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # see comment about different semantics on the GNU ld section
+ ld_shlibs=no
+ ;;
+ bsdi[45]*)
+ ;;
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ libext=lib
+ ;;
+ darwin* | rhapsody*)
+ hardcode_direct=no
+ if test "$GCC" = yes ; then
+ :
+ else
+ case $cc_basename in
+ xlc*)
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+ fi
+ ;;
+ dgux*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ freebsd1*)
+ ld_shlibs=no
+ ;;
+ freebsd2.2*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ freebsd2*)
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ freebsd* | kfreebsd*-gnu | dragonfly*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ hpux9*)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ hpux10*)
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+ hpux11*)
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ ;;
+ *)
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+ irix5* | irix6* | nonstopux*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ netbsd*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ newsos6)
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ openbsd*)
+ hardcode_direct=yes
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ else
+ case "$host_os" in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ ;;
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ osf3*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ osf4* | osf5*)
+ if test "$GCC" = yes; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ # Both cc and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ hardcode_libdir_separator=:
+ ;;
+ solaris*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ sunos4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ sysv4)
+ case $host_vendor in
+ sni)
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ hardcode_direct=no
+ ;;
+ motorola)
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ ;;
+ sysv4.3*)
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ ld_shlibs=yes
+ fi
+ ;;
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*)
+ ;;
+ sysv5* | sco3.2v5* | sco5v6*)
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ hardcode_libdir_separator=':'
+ ;;
+ uts4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+fi
+
+# Check dynamic linker characteristics
+# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER.
+libname_spec='lib$name'
+case "$host_os" in
+ aix3*)
+ ;;
+ aix4* | aix5*)
+ ;;
+ amigaos*)
+ ;;
+ beos*)
+ ;;
+ bsdi[45]*)
+ ;;
+ cygwin* | mingw* | pw32*)
+ shrext=.dll
+ ;;
+ darwin* | rhapsody*)
+ shrext=.dylib
+ ;;
+ dgux*)
+ ;;
+ freebsd1*)
+ ;;
+ kfreebsd*-gnu)
+ ;;
+ freebsd* | dragonfly*)
+ ;;
+ gnu*)
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $host_cpu in
+ ia64*)
+ shrext=.so
+ ;;
+ hppa*64*)
+ shrext=.sl
+ ;;
+ *)
+ shrext=.sl
+ ;;
+ esac
+ ;;
+ interix3*)
+ ;;
+ irix5* | irix6* | nonstopux*)
+ case "$host_os" in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
+ *) libsuff= shlibsuff= ;;
+ esac
+ ;;
+ esac
+ ;;
+ linux*oldld* | linux*aout* | linux*coff*)
+ ;;
+ linux*)
+ ;;
+ knetbsd*-gnu)
+ ;;
+ netbsd*)
+ ;;
+ newsos6)
+ ;;
+ nto-qnx*)
+ ;;
+ openbsd*)
+ ;;
+ os2*)
+ libname_spec='$name'
+ shrext=.dll
+ ;;
+ osf3* | osf4* | osf5*)
+ ;;
+ solaris*)
+ ;;
+ sunos4*)
+ ;;
+ sysv4 | sysv4.3*)
+ ;;
+ sysv4*MP*)
+ ;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ ;;
+ uts4*)
+ ;;
+esac
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
+shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+
+LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
+
+# How to pass a linker flag through the compiler.
+wl="$escaped_wl"
+
+# Static library suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally "so").
+shlibext="$shlibext"
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator="$hardcode_libdir_separator"
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct="$hardcode_direct"
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L="$hardcode_minus_L"
+
+EOF
diff --git a/config.sub b/config.sub
new file mode 100755
index 0000000..1d8e98b
--- /dev/null
+++ b/config.sub
@@ -0,0 +1,1801 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright 1992-2018 Free Software Foundation, Inc.
+
+timestamp='2018-02-22'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <https://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that
+# program. This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+
+
+# Please send patches to <config-patches@gnu.org>.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# You can get the latest version of this script from:
+# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
+
+Canonicalize a configuration name.
+
+Options:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright 1992-2018 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help"
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo "$1"
+ exit ;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
+ kopensolaris*-gnu* | cloudabi*-eabi* | \
+ storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+ android-linux)
+ os=-linux-android
+ basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+ ;;
+ *)
+ basic_machine=`echo "$1" | sed 's/-[^-]*$//'`
+ if [ "$basic_machine" != "$1" ]
+ then os=`echo "$1" | sed 's/.*-/-/'`
+ else os=; fi
+ ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work. We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+ -sun*os*)
+ # Prevent following clause from handling this invalid input.
+ ;;
+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+ -apple | -axis | -knuth | -cray | -microblaze*)
+ os=
+ basic_machine=$1
+ ;;
+ -bluegene*)
+ os=-cnk
+ ;;
+ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+ basic_machine=$1
+ ;;
+ -scout)
+ ;;
+ -wrs)
+ os=-vxworks
+ basic_machine=$1
+ ;;
+ -chorusos*)
+ os=-chorusos
+ basic_machine=$1
+ ;;
+ -chorusrdb)
+ os=-chorusrdb
+ basic_machine=$1
+ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+ -sco6)
+ os=-sco5v6
+ basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5)
+ os=-sco3.2v5
+ basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco4)
+ os=-sco3.2v4
+ basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2.[4-9]*)
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+ basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2v[4-9]*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco*)
+ os=-sco3.2v2
+ basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -udk*)
+ basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -isc)
+ os=-isc2.2
+ basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -clix*)
+ basic_machine=clipper-intergraph
+ ;;
+ -isc*)
+ basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -lynx*178)
+ os=-lynxos178
+ ;;
+ -lynx*5)
+ os=-lynxos5
+ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+ -ptx*)
+ basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'`
+ ;;
+ -psos*)
+ os=-psos
+ ;;
+ -mint | -mint[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+ 1750a | 580 \
+ | a29k \
+ | aarch64 | aarch64_be \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+ | arc | arceb \
+ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
+ | avr | avr32 \
+ | ba \
+ | be32 | be64 \
+ | bfin \
+ | c4x | c8051 | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | e2k | epiphany \
+ | fido | fr30 | frv | ft32 \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | hexagon \
+ | i370 | i860 | i960 | ia16 | ia64 \
+ | ip2k | iq2000 \
+ | k1om \
+ | le32 | le64 \
+ | lm32 \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+ | mips64octeon | mips64octeonel \
+ | mips64orion | mips64orionel \
+ | mips64r5900 | mips64r5900el \
+ | mips64vr | mips64vrel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa32r6 | mipsisa32r6el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64r6 | mipsisa64r6el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipsr5900 | mipsr5900el \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | moxie \
+ | mt \
+ | msp430 \
+ | nds32 | nds32le | nds32be \
+ | nios | nios2 | nios2eb | nios2el \
+ | ns16k | ns32k \
+ | open8 | or1k | or1knd | or32 \
+ | pdp10 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle \
+ | pru \
+ | pyramid \
+ | riscv32 | riscv64 \
+ | rl78 | rx \
+ | score \
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+ | spu \
+ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+ | ubicom32 \
+ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+ | visium \
+ | wasm32 \
+ | x86 | xc16x | xstormy16 | xtensa \
+ | z8k | z80)
+ basic_machine=$basic_machine-unknown
+ ;;
+ c54x)
+ basic_machine=tic54x-unknown
+ ;;
+ c55x)
+ basic_machine=tic55x-unknown
+ ;;
+ c6x)
+ basic_machine=tic6x-unknown
+ ;;
+ leon|leon[3-9])
+ basic_machine=sparc-$basic_machine
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65)
+ ;;
+ ms1)
+ basic_machine=mt-unknown
+ ;;
+
+ strongarm | thumb | xscale)
+ basic_machine=arm-unknown
+ ;;
+ xgate)
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ xscaleeb)
+ basic_machine=armeb-unknown
+ ;;
+
+ xscaleel)
+ basic_machine=armel-unknown
+ ;;
+
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+ 580-* \
+ | a29k-* \
+ | aarch64-* | aarch64_be-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* | avr32-* \
+ | ba-* \
+ | be32-* | be64-* \
+ | bfin-* | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* \
+ | c8051-* | clipper-* | craynv-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+ | e2k-* | elxsi-* \
+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | hexagon-* \
+ | i*86-* | i860-* | i960-* | ia16-* | ia64-* \
+ | ip2k-* | iq2000-* \
+ | k1om-* \
+ | le32-* | le64-* \
+ | lm32-* \
+ | m32c-* | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+ | microblaze-* | microblazeel-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+ | mips64octeon-* | mips64octeonel-* \
+ | mips64orion-* | mips64orionel-* \
+ | mips64r5900-* | mips64r5900el-* \
+ | mips64vr-* | mips64vrel-* \
+ | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* \
+ | mips64vr5000-* | mips64vr5000el-* \
+ | mips64vr5900-* | mips64vr5900el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa32r6-* | mipsisa32r6el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64r6-* | mipsisa64r6el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipsr5900-* | mipsr5900el-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | mt-* \
+ | msp430-* \
+ | nds32-* | nds32le-* | nds32be-* \
+ | nios-* | nios2-* | nios2eb-* | nios2el-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | open8-* \
+ | or1k*-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
+ | pru-* \
+ | pyramid-* \
+ | riscv32-* | riscv64-* \
+ | rl78-* | romp-* | rs6000-* | rx-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+ | sparclite-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
+ | tahoe-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tile*-* \
+ | tron-* \
+ | ubicom32-* \
+ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+ | vax-* \
+ | visium-* \
+ | wasm32-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* \
+ | xstormy16-* | xtensa*-* \
+ | ymp-* \
+ | z8k-* | z80-*)
+ ;;
+ # Recognize the basic CPU types without company name, with glob match.
+ xtensa*)
+ basic_machine=$basic_machine-unknown
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 386bsd)
+ basic_machine=i386-pc
+ os=-bsd
+ ;;
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ basic_machine=m68000-att
+ ;;
+ 3b*)
+ basic_machine=we32k-att
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ abacus)
+ basic_machine=abacus-unknown
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+ ;;
+ alliant | fx80)
+ basic_machine=fx80-alliant
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ os=-bsd
+ ;;
+ amd64)
+ basic_machine=x86_64-pc
+ ;;
+ amd64-*)
+ basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+ ;;
+ amiga | amiga-*)
+ basic_machine=m68k-unknown
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ os=-amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ os=-sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
+ aros)
+ basic_machine=i386-pc
+ os=-aros
+ ;;
+ asmjs)
+ basic_machine=asmjs-unknown
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ blackfin)
+ basic_machine=bfin-unknown
+ os=-linux
+ ;;
+ blackfin-*)
+ basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ bluegene*)
+ basic_machine=powerpc-ibm
+ os=-cnk
+ ;;
+ c54x-*)
+ basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ ;;
+ c55x-*)
+ basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ ;;
+ c6x-*)
+ basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ ;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+ cegcc)
+ basic_machine=arm-unknown
+ os=-cegcc
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ os=-bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ os=-bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ os=-bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ os=-bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ os=-bsd
+ ;;
+ cray | j90)
+ basic_machine=j90-cray
+ os=-unicos
+ ;;
+ craynv)
+ basic_machine=craynv-cray
+ os=-unicosmp
+ ;;
+ cr16 | cr16-*)
+ basic_machine=cr16-unknown
+ os=-elf
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ crisv32 | crisv32-* | etraxfs*)
+ basic_machine=crisv32-axis
+ ;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
+ crx)
+ basic_machine=crx-unknown
+ os=-elf
+ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ ;;
+ decsystem10* | dec10*)
+ basic_machine=pdp10-dec
+ os=-tops10
+ ;;
+ decsystem20* | dec20*)
+ basic_machine=pdp10-dec
+ os=-tops20
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ basic_machine=m68k-motorola
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
+ dicos)
+ basic_machine=i686-pc
+ os=-dicos
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ os=-msdosdjgpp
+ ;;
+ dpx20 | dpx20-*)
+ basic_machine=rs6000-bull
+ os=-bosx
+ ;;
+ dpx2*)
+ basic_machine=m68k-bull
+ os=-sysv3
+ ;;
+ e500v[12])
+ basic_machine=powerpc-unknown
+ os=$os"spe"
+ ;;
+ e500v[12]-*)
+ basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ os=$os"spe"
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ os=-ebmon
+ ;;
+ elxsi)
+ basic_machine=elxsi-elxsi
+ os=-bsd
+ ;;
+ encore | umax | mmax)
+ basic_machine=ns32k-encore
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ os=-ose
+ ;;
+ fx2800)
+ basic_machine=i860-alliant
+ ;;
+ genix)
+ basic_machine=ns32k-ns
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ os=-sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ os=-go32
+ ;;
+ h3050r* | hiux*)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ os=-hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ os=-xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ os=-hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ os=-sysv3
+ ;;
+ hp300-*)
+ basic_machine=m68k-hp
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ os=-bsd
+ ;;
+ hp300hpux)
+ basic_machine=m68k-hp
+ os=-hpux
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ basic_machine=m68000-hp
+ ;;
+ hp9k3[2-9][0-9])
+ basic_machine=m68k-hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ os=-osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ os=-proelf
+ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ ;;
+ i*86v32)
+ basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+ i*86v4*)
+ basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+ i*86v)
+ basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+ i*86sol2)
+ basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+ vsta)
+ basic_machine=i386-unknown
+ os=-vsta
+ ;;
+ iris | iris4d)
+ basic_machine=mips-sgi
+ case $os in
+ -irix*)
+ ;;
+ *)
+ os=-irix4
+ ;;
+ esac
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
+ leon-*|leon[3-9]-*)
+ basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'`
+ ;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ os=-linux
+ ;;
+ m68knommu-*)
+ basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ microblaze*)
+ basic_machine=microblaze-xilinx
+ ;;
+ mingw64)
+ basic_machine=x86_64-pc
+ os=-mingw64
+ ;;
+ mingw32)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ os=-mingw32ce
+ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+ mips3*-*)
+ basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`
+ ;;
+ mips3*)
+ basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ os=-morphos
+ ;;
+ moxiebox)
+ basic_machine=moxie-unknown
+ os=-moxiebox
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ ms1-*)
+ basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'`
+ ;;
+ msys)
+ basic_machine=i686-pc
+ os=-msys
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ nacl)
+ basic_machine=le32-unknown
+ os=-nacl
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ os=-linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ os=-newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ os=-newsos
+ ;;
+ news-3600 | risc-news)
+ basic_machine=mips-sony
+ os=-newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
+ next | m*-next)
+ basic_machine=m68k-next
+ case $os in
+ -nextstep* )
+ ;;
+ -ns2*)
+ os=-nextstep2
+ ;;
+ *)
+ os=-nextstep3
+ ;;
+ esac
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ os=-cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ os=-cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ os=-nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
+ np1)
+ basic_machine=np1-gould
+ ;;
+ neo-tandem)
+ basic_machine=neo-tandem
+ ;;
+ nse-tandem)
+ basic_machine=nse-tandem
+ ;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
+ nsv-tandem)
+ basic_machine=nsv-tandem
+ ;;
+ nsx-tandem)
+ basic_machine=nsx-tandem
+ ;;
+ op50n-* | op60c-*)
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ openrisc | openrisc-*)
+ basic_machine=or32-unknown
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ os=-os400
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ os=-os68k
+ ;;
+ pa-hitachi)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ os=-osf
+ ;;
+ parisc)
+ basic_machine=hppa-unknown
+ os=-linux
+ ;;
+ parisc-*)
+ basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ pbd)
+ basic_machine=sparc-tti
+ ;;
+ pbb)
+ basic_machine=m68k-tti
+ ;;
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+ pc98)
+ basic_machine=i386-pc
+ ;;
+ pc98-*)
+ basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ ;;
+ pentium | p5 | k5 | k6 | nexgen | viac3)
+ basic_machine=i586-pc
+ ;;
+ pentiumpro | p6 | 6x86 | athlon | athlon_*)
+ basic_machine=i686-pc
+ ;;
+ pentiumii | pentium2 | pentiumiii | pentium3)
+ basic_machine=i686-pc
+ ;;
+ pentium4)
+ basic_machine=i786-pc
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
+ basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ ;;
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ ;;
+ pentium4-*)
+ basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ ;;
+ pn)
+ basic_machine=pn-gould
+ ;;
+ power) basic_machine=power-ibm
+ ;;
+ ppc | ppcbe) basic_machine=powerpc-unknown
+ ;;
+ ppc-* | ppcbe-*)
+ basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle)
+ basic_machine=powerpcle-unknown
+ ;;
+ ppcle-* | powerpclittle-*)
+ basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ ;;
+ ppc64) basic_machine=powerpc64-unknown
+ ;;
+ ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ ;;
+ ppc64le | powerpc64little)
+ basic_machine=powerpc64le-unknown
+ ;;
+ ppc64le-* | powerpc64little-*)
+ basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ ;;
+ ps2)
+ basic_machine=i386-ibm
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+ rdos | rdos64)
+ basic_machine=x86_64-pc
+ os=-rdos
+ ;;
+ rdos32)
+ basic_machine=i386-pc
+ os=-rdos
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ rm[46]00)
+ basic_machine=mips-siemens
+ ;;
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+ s390 | s390-*)
+ basic_machine=s390-ibm
+ ;;
+ s390x | s390x-*)
+ basic_machine=s390x-ibm
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ sb1)
+ basic_machine=mipsisa64sb1-unknown
+ ;;
+ sb1el)
+ basic_machine=mipsisa64sb1el-unknown
+ ;;
+ sde)
+ basic_machine=mipsisa32-sde
+ os=-elf
+ ;;
+ sei)
+ basic_machine=mips-sei
+ os=-seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh5el)
+ basic_machine=sh5le-unknown
+ ;;
+ simso-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ os=-sysv2
+ ;;
+ spur)
+ basic_machine=spur-unknown
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
+ strongarm-* | thumb-*)
+ basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ os=-sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ os=-sunos4
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ os=-sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ os=-sunos4
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ os=-sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ os=-sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ os=-solaris2
+ ;;
+ sun3 | sun3-*)
+ basic_machine=m68k-sun
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ os=-unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ os=-unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ os=-unicos
+ ;;
+ tile*)
+ basic_machine=$basic_machine-unknown
+ os=-linux-gnu
+ ;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ os=-tops20
+ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ os=-tpf
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ os=-sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ os=-sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ os=-vms
+ ;;
+ vpp*|vx|vx-*)
+ basic_machine=f301-fujitsu
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ os=-vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
+ ;;
+ w89k-*)
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+ x64)
+ basic_machine=x86_64-pc
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+ xscale-* | xscalee[bl]-*)
+ basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'`
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ none)
+ basic_machine=none-none
+ os=-none
+ ;;
+
+# Here we handle the default manufacturer of certain CPU types. It is in
+# some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ basic_machine=hppa1.1-winbond
+ ;;
+ op50n)
+ basic_machine=hppa1.1-oki
+ ;;
+ op60c)
+ basic_machine=hppa1.1-oki
+ ;;
+ romp)
+ basic_machine=romp-ibm
+ ;;
+ mmix)
+ basic_machine=mmix-knuth
+ ;;
+ rs6000)
+ basic_machine=rs6000-ibm
+ ;;
+ vax)
+ basic_machine=vax-dec
+ ;;
+ pdp11)
+ basic_machine=pdp11-dec
+ ;;
+ we32k)
+ basic_machine=we32k-att
+ ;;
+ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+ basic_machine=sh-unknown
+ ;;
+ cydra)
+ basic_machine=cydra-cydrome
+ ;;
+ orion)
+ basic_machine=orion-highlevel
+ ;;
+ orion105)
+ basic_machine=clipper-highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ basic_machine=m68k-apple
+ ;;
+ pmac | pmac-mpw)
+ basic_machine=powerpc-apple
+ ;;
+ *-unknown)
+ # Make sure to match an already-canonicalized machine name.
+ ;;
+ *)
+ echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+ *-digital*)
+ basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'`
+ ;;
+ *-commodore*)
+ basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'`
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+ # First match some system type aliases that might get confused
+ # with valid system types.
+ # -solaris* is a basic system type, with this one exception.
+ -auroraux)
+ os=-auroraux
+ ;;
+ -solaris1 | -solaris1.*)
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ ;;
+ -solaris)
+ os=-solaris2
+ ;;
+ -unixware*)
+ os=-sysv4.2uw
+ ;;
+ -gnu/linux*)
+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ ;;
+ # es1800 is here to avoid being matched by es* (a different OS)
+ -es1800*)
+ os=-ose
+ ;;
+ # Now accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST end in a * to match a version number.
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+ | -sym* | -kopensolaris* | -plan9* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* | -aros* | -cloudabi* | -sortix* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -knetbsd* | -mirbsd* | -netbsd* \
+ | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \
+ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+ | -linux-newlib* | -linux-musl* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -windiss* \
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
+ | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \
+ | -midnightbsd*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+ case $basic_machine in
+ x86-* | i*86-*)
+ ;;
+ *)
+ os=-nto$os
+ ;;
+ esac
+ ;;
+ -nto-qnx*)
+ ;;
+ -nto*)
+ os=`echo $os | sed -e 's|nto|nto-qnx|'`
+ ;;
+ -sim | -xray | -os68k* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -os9* \
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo "$os" | sed -e 's|mac|macos|'`
+ ;;
+ -linux-dietlibc)
+ os=-linux-dietlibc
+ ;;
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ ;;
+ -sunos5*)
+ os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
+ ;;
+ -sunos6*)
+ os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
+ ;;
+ -opened*)
+ os=-openedition
+ ;;
+ -os400*)
+ os=-os400
+ ;;
+ -wince*)
+ os=-wince
+ ;;
+ -utek*)
+ os=-bsd
+ ;;
+ -dynix*)
+ os=-bsd
+ ;;
+ -acis*)
+ os=-aos
+ ;;
+ -atheos*)
+ os=-atheos
+ ;;
+ -syllable*)
+ os=-syllable
+ ;;
+ -386bsd)
+ os=-bsd
+ ;;
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
+ -nova*)
+ os=-rtmk-nova
+ ;;
+ -ns2)
+ os=-nextstep2
+ ;;
+ -nsk*)
+ os=-nsk
+ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+ os=`echo $os | sed -e 's|sinix|sysv|'`
+ ;;
+ -sinix*)
+ os=-sysv4
+ ;;
+ -tpf*)
+ os=-tpf
+ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+ -oss*)
+ os=-sysv3
+ ;;
+ -svr4*)
+ os=-sysv4
+ ;;
+ -svr3)
+ os=-sysv3
+ ;;
+ -sysvr4)
+ os=-sysv4
+ ;;
+ # This must come after -sysvr4.
+ -sysv*)
+ ;;
+ -ose*)
+ os=-ose
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ os=-mint
+ ;;
+ -zvmoe)
+ os=-zvmoe
+ ;;
+ -dicos*)
+ os=-dicos
+ ;;
+ -pikeos*)
+ # Until real need of OS specific support for
+ # particular features comes up, bare metal
+ # configurations are quite functional.
+ case $basic_machine in
+ arm*)
+ os=-eabi
+ ;;
+ *)
+ os=-elf
+ ;;
+ esac
+ ;;
+ -nacl*)
+ ;;
+ -ios)
+ ;;
+ -none)
+ ;;
+ *)
+ # Get rid of the `-' at the beginning of $os.
+ os=`echo $os | sed 's/[^-]*-//'`
+ echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+ score-*)
+ os=-elf
+ ;;
+ spu-*)
+ os=-elf
+ ;;
+ *-acorn)
+ os=-riscix1.2
+ ;;
+ arm*-rebel)
+ os=-linux
+ ;;
+ arm*-semi)
+ os=-aout
+ ;;
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
+ c8051-*)
+ os=-elf
+ ;;
+ hexagon-*)
+ os=-elf
+ ;;
+ tic54x-*)
+ os=-coff
+ ;;
+ tic55x-*)
+ os=-coff
+ ;;
+ tic6x-*)
+ os=-coff
+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=-tops20
+ ;;
+ pdp11-*)
+ os=-none
+ ;;
+ *-dec | vax-*)
+ os=-ultrix4.2
+ ;;
+ m68*-apollo)
+ os=-domain
+ ;;
+ i386-sun)
+ os=-sunos4.0.2
+ ;;
+ m68000-sun)
+ os=-sunos3
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ mep-*)
+ os=-elf
+ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+ mips*-*)
+ os=-elf
+ ;;
+ or32-*)
+ os=-coff
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=-sysv3
+ ;;
+ sparc-* | *-sun)
+ os=-sunos4.1.1
+ ;;
+ pru-*)
+ os=-elf
+ ;;
+ *-be)
+ os=-beos
+ ;;
+ *-ibm)
+ os=-aix
+ ;;
+ *-knuth)
+ os=-mmixware
+ ;;
+ *-wec)
+ os=-proelf
+ ;;
+ *-winbond)
+ os=-proelf
+ ;;
+ *-oki)
+ os=-proelf
+ ;;
+ *-hp)
+ os=-hpux
+ ;;
+ *-hitachi)
+ os=-hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=-sysv
+ ;;
+ *-cbm)
+ os=-amigaos
+ ;;
+ *-dg)
+ os=-dgux
+ ;;
+ *-dolphin)
+ os=-sysv3
+ ;;
+ m68k-ccur)
+ os=-rtu
+ ;;
+ m88k-omron*)
+ os=-luna
+ ;;
+ *-next)
+ os=-nextstep
+ ;;
+ *-sequent)
+ os=-ptx
+ ;;
+ *-crds)
+ os=-unos
+ ;;
+ *-ns)
+ os=-genix
+ ;;
+ i370-*)
+ os=-mvs
+ ;;
+ *-gould)
+ os=-sysv
+ ;;
+ *-highlevel)
+ os=-bsd
+ ;;
+ *-encore)
+ os=-bsd
+ ;;
+ *-sgi)
+ os=-irix
+ ;;
+ *-siemens)
+ os=-sysv4
+ ;;
+ *-masscomp)
+ os=-rtu
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=-uxpv
+ ;;
+ *-rom68k)
+ os=-coff
+ ;;
+ *-*bug)
+ os=-coff
+ ;;
+ *-apple)
+ os=-macos
+ ;;
+ *-atari*)
+ os=-mint
+ ;;
+ *)
+ os=-none
+ ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+ *-unknown)
+ case $os in
+ -riscix*)
+ vendor=acorn
+ ;;
+ -sunos*)
+ vendor=sun
+ ;;
+ -cnk*|-aix*)
+ vendor=ibm
+ ;;
+ -beos*)
+ vendor=be
+ ;;
+ -hpux*)
+ vendor=hp
+ ;;
+ -mpeix*)
+ vendor=hp
+ ;;
+ -hiux*)
+ vendor=hitachi
+ ;;
+ -unos*)
+ vendor=crds
+ ;;
+ -dgux*)
+ vendor=dg
+ ;;
+ -luna*)
+ vendor=omron
+ ;;
+ -genix*)
+ vendor=ns
+ ;;
+ -mvs* | -opened*)
+ vendor=ibm
+ ;;
+ -os400*)
+ vendor=ibm
+ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
+ -tpf*)
+ vendor=ibm
+ ;;
+ -vxsim* | -vxworks* | -windiss*)
+ vendor=wrs
+ ;;
+ -aux*)
+ vendor=apple
+ ;;
+ -hms*)
+ vendor=hitachi
+ ;;
+ -mpw* | -macos*)
+ vendor=apple
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ vendor=atari
+ ;;
+ -vos*)
+ vendor=stratus
+ ;;
+ esac
+ basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"`
+ ;;
+esac
+
+echo "$basic_machine$os"
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-functions 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/configure b/configure
new file mode 100755
index 0000000..6a6abc0
--- /dev/null
+++ b/configure
@@ -0,0 +1,21837 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.69 for shadow 4.8.1.
+#
+# Report bugs to <pkg-shadow-devel@lists.alioth.debian.org>.
+#
+#
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# Use a proper internal environment variable to ensure we don't fall
+ # into an infinite loop, continuously re-executing ourselves.
+ if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+ _as_can_reexec=no; export _as_can_reexec;
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+ fi
+ # We don't want this to propagate to other subprocesses.
+ { _as_can_reexec=; unset _as_can_reexec;}
+if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1
+
+ test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
+ ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+ ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+ PATH=/empty FPATH=/empty; export PATH FPATH
+ test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
+ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1"
+ if (eval "$as_required") 2>/dev/null; then :
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir/$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+ if test "x$CONFIG_SHELL" != x; then :
+ export CONFIG_SHELL
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+fi
+
+ if test x$as_have_required = xno; then :
+ $as_echo "$0: This script requires a shell more modern than all"
+ $as_echo "$0: the shells that I found on your system."
+ if test x${ZSH_VERSION+set} = xset ; then
+ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ $as_echo "$0: Please tell bug-autoconf@gnu.org and
+$0: pkg-shadow-devel@lists.alioth.debian.org about your
+$0: system, including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+ # already done that, so ensure we don't try to do so again and fall
+ # in an infinite loop. This has already happened in practice.
+ _as_can_reexec=no; export _as_can_reexec
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='shadow'
+PACKAGE_TARNAME='shadow'
+PACKAGE_VERSION='4.8.1'
+PACKAGE_STRING='shadow 4.8.1'
+PACKAGE_BUGREPORT='pkg-shadow-devel@lists.alioth.debian.org'
+PACKAGE_URL='https://github.com/shadow-maint/shadow'
+
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_header_list=
+gt_needs=
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+USE_NLS_FALSE
+USE_NLS_TRUE
+POSUB
+LTLIBINTL
+LIBINTL
+INTLLIBS
+LTLIBICONV
+LIBICONV
+INTL_MACOSX_LIBS
+XGETTEXT_EXTRA_OPTIONS
+MSGMERGE
+XGETTEXT_015
+XGETTEXT
+GMSGFMT_015
+MSGFMT_015
+GMSGFMT
+MSGFMT
+GETTEXT_MACRO_VERSION
+USE_NLS
+LIBMD
+LIBSKEY
+capcmd
+FCAPS_FALSE
+FCAPS_TRUE
+ACCT_TOOLS_SETUID_FALSE
+ACCT_TOOLS_SETUID_TRUE
+USE_PAM_FALSE
+USE_PAM_TRUE
+LIBPAM
+WITH_TCB_FALSE
+WITH_TCB_TRUE
+LIBTCB
+LIBSEMANAGE
+LIBSELINUX
+WITH_BTRFS_FALSE
+WITH_BTRFS_TRUE
+LIBCRACK
+LIBAUDIT
+LIBATTR
+LIBACL
+LIBCRYPT
+ENABLE_SUBIDS_FALSE
+ENABLE_SUBIDS_TRUE
+ENABLE_REGENERATE_MAN_FALSE
+ENABLE_REGENERATE_MAN_TRUE
+XMLCATALOG
+XML_CATALOG_FILE
+XSLTPROC
+SHADOWGRP_FALSE
+SHADOWGRP_TRUE
+HAVE_VENDORDIR_FALSE
+HAVE_VENDORDIR_TRUE
+VENDORDIR
+LIBECONF
+ECONF_CPPFLAGS
+WITH_SU_FALSE
+WITH_SU_TRUE
+USE_BCRYPT_FALSE
+USE_BCRYPT_TRUE
+USE_SHA_CRYPT_FALSE
+USE_SHA_CRYPT_TRUE
+GROUP_NAME_MAX_LENGTH
+LIBOBJS
+LT_SYS_LIBRARY_PATH
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+MANIFEST_TOOL
+RANLIB
+ac_ct_AR
+AR
+DLLTOOL
+OBJDUMP
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+SED
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+LIBTOOL
+YFLAGS
+YACC
+LN_S
+MAINT
+MAINTAINER_MODE_FALSE
+MAINTAINER_MODE_TRUE
+EGREP
+GREP
+CPP
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+am__nodep
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+runstatedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL
+am__quote'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_silent_rules
+enable_dependency_tracking
+enable_shared
+enable_static
+enable_maintainer_mode
+with_pic
+enable_fast_install
+with_aix_soname
+with_gnu_ld
+with_sysroot
+enable_libtool_lock
+enable_largefile
+enable_shadowgrp
+enable_man
+enable_account_tools_setuid
+enable_utmpx
+enable_subordinate_ids
+with_audit
+with_libpam
+with_btrfs
+with_selinux
+with_acl
+with_attr
+with_skey
+with_tcb
+with_libcrack
+with_sha_crypt
+with_bcrypt
+with_nscd
+with_sssd
+with_group_name_max_length
+with_su
+enable_vendordir
+with_xml_catalog
+with_fcaps
+enable_nls
+enable_rpath
+with_libiconv_prefix
+with_libintl_prefix
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP
+YACC
+YFLAGS
+LT_SYS_LIBRARY_PATH'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *=) ac_optarg= ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
+ | --runstate | --runstat | --runsta | --runst | --runs \
+ | --run | --ru | --r)
+ ac_prev=runstatedir ;;
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+ | --run=* | --ru=* | --r=*)
+ runstatedir=$ac_optarg ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir runstatedir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures shadow 4.8.1 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking ...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/shadow]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of shadow 4.8.1:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-silent-rules less verbose build output (undo: "make V=1")
+ --disable-silent-rules verbose build output (undo: "make V=0")
+ --enable-dependency-tracking
+ do not reject slow dependency extractors
+ --disable-dependency-tracking
+ speeds up one-time build
+ --enable-shared[=PKGS] build shared libraries [default=no]
+ --enable-static[=PKGS] build static libraries [default=yes]
+ --enable-maintainer-mode
+ enable make rules and dependencies not useful (and
+ sometimes confusing) to the casual installer
+ --enable-fast-install[=PKGS]
+ optimize for fast installation [default=yes]
+ --disable-libtool-lock avoid locking (might break parallel builds)
+ --disable-largefile omit support for large files
+ --enable-shadowgrp enable shadow group support [default=yes]
+ --enable-man regenerate roff man pages from Docbook [default=no]
+ --enable-account-tools-setuid
+ Install the user and group management tools setuid
+ and authenticate the callers. This requires
+ --with-pam.
+ --enable-utmpx enable loggin in utmpx / wtmpx [default=no]
+ --enable-subordinate-ids
+ support subordinate ids [default=yes]
+ --enable-vendordir=DIR Directory for distribution provided configuration
+ files
+ --disable-nls do not use Native Language Support
+ --disable-rpath do not hardcode runtime library paths
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-aix-soname=aix|svr4|both
+ shared library versioning (aka "SONAME") variant to
+ provide on AIX, [default=aix].
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
+ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the
+ compiler's sysroot if not specified).
+ --with-audit use auditing support [default=yes if found]
+ --with-libpam use libpam for PAM support [default=yes if found]
+ --with-btrfs add BtrFS support [default=yes if found]
+ --with-selinux use SELinux support [default=yes if found]
+ --with-acl use ACL support [default=yes if found]
+ --with-attr use Extended Attribute support [default=yes if
+ found]
+ --with-skey use S/Key support [default=no]
+ --with-tcb use tcb support (incomplete) [default=yes if found]
+ --with-libcrack use libcrack [default=no]
+ --with-sha-crypt allow the SHA256 and SHA512 password encryption
+ algorithms [default=yes]
+ --with-bcrypt allow the bcrypt password encryption algorithm
+ [default=no]
+ --with-nscd enable support for nscd [default=yes]
+ --with-sssd enable support for flushing sssd caches
+ [default=yes]
+ --with-group-name-max-length
+ set max group name length [default=16]
+ --with-su build and install su program and man page
+ [default=yes]
+ --with-xml-catalog=CATALOG
+ path to xml catalog to use
+ --with-fcaps use file capabilities instead of suid binaries for
+ newuidmap/newgidmap [default=no]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
+ --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib
+ --without-libiconv-prefix don't search for libiconv in includedir and libdir
+ --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib
+ --without-libintl-prefix don't search for libintl in includedir and libdir
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ CPP C preprocessor
+ YACC The `Yet Another Compiler Compiler' implementation to use.
+ Defaults to the first program found out of: `bison -y', `byacc',
+ `yacc'.
+ YFLAGS The list of arguments that will be passed by default to $YACC.
+ This script will default YFLAGS to the empty string to avoid a
+ default value of `-d' given by some make applications.
+ LT_SYS_LIBRARY_PATH
+ User-defined run-time library search path.
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <pkg-shadow-devel@lists.alioth.debian.org>.
+shadow home page: <https://github.com/shadow-maint/shadow>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+shadow configure 4.8.1
+generated by GNU Autoconf 2.69
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } > conftest.i && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if eval \${$3+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_header_compiler=yes
+else
+ ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ ac_header_preproc=yes
+else
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+ yes:no: )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+( $as_echo "## ------------------------------------------------------- ##
+## Report this to pkg-shadow-devel@lists.alioth.debian.org ##
+## ------------------------------------------------------- ##"
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: program exited with status $ac_status" >&5
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=$ac_status
+fi
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ test -x conftest$ac_exeext
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $2 (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_func
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ eval "$3=no"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+if (sizeof ($2))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+if (sizeof (($2)))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_type
+
+# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
+# ----------------------------------------------------
+# Tries to find if the field MEMBER exists in type AGGR, after including
+# INCLUDES, setting cache variable VAR accordingly.
+ac_fn_c_check_member ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
+$as_echo_n "checking for $2.$3... " >&6; }
+if eval \${$4+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$5
+int
+main ()
+{
+static $2 ac_aggr;
+if (ac_aggr.$3)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$4=yes"
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$5
+int
+main ()
+{
+static $2 ac_aggr;
+if (sizeof ac_aggr.$3)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$4=yes"
+else
+ eval "$4=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$4
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_member
+
+# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
+# --------------------------------------------
+# Tries to find the compile-time value of EXPR in a program that includes
+# INCLUDES, setting VAR accordingly. Returns whether the value could be
+# computed
+ac_fn_c_compute_int ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= 0)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_hi=$ac_mid; break
+else
+ as_fn_arith $ac_mid + 1 && ac_lo=$as_val
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) < 0)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_lo=$ac_mid; break
+else
+ as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ ac_lo= ac_hi=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_hi=$ac_mid
+else
+ as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in #((
+?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
+'') ac_retval=1 ;;
+esac
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+static long int longval () { return $2; }
+static unsigned long int ulongval () { return $2; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ return 1;
+ if (($2) < 0)
+ {
+ long int i = longval ();
+ if (i != ($2))
+ return 1;
+ fprintf (f, "%ld", i);
+ }
+ else
+ {
+ unsigned long int i = ulongval ();
+ if (i != ($2))
+ return 1;
+ fprintf (f, "%lu", i);
+ }
+ /* Do not output a trailing newline, as this causes \r\n confusion
+ on some platforms. */
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ echo >>conftest.val; read $3 <conftest.val; ac_retval=0
+else
+ ac_retval=1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f conftest.val
+
+ fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_compute_int
+
+# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
+# ---------------------------------------------
+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+# accordingly.
+ac_fn_c_check_decl ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ as_decl_name=`echo $2|sed 's/ *(.*//'`
+ as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+#ifndef $as_decl_name
+#ifdef __cplusplus
+ (void) $as_decl_use;
+#else
+ (void) $as_decl_name;
+#endif
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_decl
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by shadow $as_me 4.8.1, which was
+generated by GNU Autoconf 2.69. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ $as_echo "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+ 2)
+ as_fn_append ac_configure_args1 " '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ as_fn_append ac_configure_args " '$ac_arg'"
+ ;;
+ esac
+ done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ $as_echo "$as_me: caught signal $ac_signal"
+ $as_echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+ # We do not want a PATH search for config.site.
+ case $CONFIG_SITE in #((
+ -*) ac_site_file1=./$CONFIG_SITE;;
+ */*) ac_site_file1=$CONFIG_SITE;;
+ *) ac_site_file1=./$CONFIG_SITE;;
+ esac
+elif test "x$prefix" != xNONE; then
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
+else
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+ test "x$ac_site_file" = xNONE && continue
+ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file" \
+ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special files
+ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+as_fn_append ac_header_list " utime.h"
+gt_needs="$gt_needs need-ngettext"
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+am__api_version='1.16'
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+ ./ | .// | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+
+ done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[\\\"\#\$\&\'\`$am_lf]*)
+ as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+ *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
+ as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
+ alias in your environment" "$LINENO" 5
+ fi
+ if test "$2" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
+test "$program_prefix" != NONE &&
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+ am_missing_run="$MISSING "
+else
+ am_missing_run=
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+ if ${ac_cv_path_mkdir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
+ case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 'mkdir (GNU coreutils) '* | \
+ 'mkdir (coreutils) '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done
+ done
+IFS=$as_save_IFS
+
+fi
+
+ test -d ./--version && rmdir ./--version
+ if test "${ac_cv_path_mkdir+set}" = set; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AWK="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ SET_MAKE=
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+ enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=1;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ am__isrc=' -I$(srcdir)'
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='shadow'
+ VERSION='4.8.1'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
+# We need awk for the "check" target (and possibly the TAP driver). The
+# system "awk" is bad on some platforms.
+# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
+
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar pax cpio none'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes. So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+ cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present. This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message. This
+can help us improve future automake versions.
+
+END
+ if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+ echo 'Configuration will proceed anyway, since you have set the' >&2
+ echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+ echo >&2
+ else
+ cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <https://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+ as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
+ fi
+fi
+
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+ enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=0;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+ac_config_headers="$ac_config_headers config.h"
+
+
+test "$prefix" = "NONE" && prefix="/usr"
+test "$prefix" = "/usr" && exec_prefix=""
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5
+$as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; }
+cat > confinc.mk << 'END'
+am__doit:
+ @echo this is the am__doit target >confinc.out
+.PHONY: am__doit
+END
+am__include="#"
+am__quote=
+# BSD make does it like this.
+echo '.include "confinc.mk" # ignored' > confmf.BSD
+# Other make implementations (GNU, Solaris 10, AIX) do it like this.
+echo 'include confinc.mk # ignored' > confmf.GNU
+_am_result=no
+for s in GNU BSD; do
+ { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5
+ (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ case $?:`cat confinc.out 2>/dev/null` in #(
+ '0:this is the am__doit target') :
+ case $s in #(
+ BSD) :
+ am__include='.include' am__quote='"' ;; #(
+ *) :
+ am__include='include' am__quote='' ;;
+esac ;; #(
+ *) :
+ ;;
+esac
+ if test "$am__include" != "#"; then
+ _am_result="yes ($s style)"
+ break
+ fi
+done
+rm -f confinc.* confmf.*
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5
+$as_echo "${_am_result}" >&6; }
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+ enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+ ac_file=''
+fi
+if test -z "$ac_file"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+ { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if { ac_try='./conftest$ac_cv_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+else
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
+if ${am_cv_prog_cc_c_o+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ # Make sure it works both with $CC and with simple cc.
+ # Following AC_PROG_CC_C_O, we do the test twice because some
+ # compilers refuse to overwrite an existing .o file with -o,
+ # though they will create one.
+ am_cv_prog_cc_c_o=yes
+ for am_i in 1 2; do
+ if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+ ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } \
+ && test -f conftest2.$ac_objext; then
+ : OK
+ else
+ am_cv_prog_cc_c_o=no
+ break
+ fi
+ done
+ rm -f core conftest*
+ unset am_i
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+$as_echo "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+depcc="$CC" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if ${ac_cv_prog_CPP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if ${ac_cv_path_GREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in grep ggrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_GREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if ${ac_cv_path_EGREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ if test -z "$EGREP"; then
+ ac_path_EGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in egrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_EGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP"; then
+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_stdc=yes
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then :
+ :
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ return 2;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = xyes; then :
+ MINIX=yes
+else
+ MINIX=
+fi
+
+
+ if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+ fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if ${ac_cv_safe_to_define___extensions__+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+# define __EXTENSIONS__ 1
+ $ac_includes_default
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_safe_to_define___extensions__=yes
+else
+ ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+ test $ac_cv_safe_to_define___extensions__ = yes &&
+ $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+ $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+ $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+ $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+ $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+
+
+# Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then :
+ enableval=$enable_shared; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for pkg in $enableval; do
+ IFS=$lt_save_ifs
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac
+else
+ enable_shared=no
+fi
+
+
+
+
+
+
+
+
+
+# Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+ enableval=$enable_static; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for pkg in $enableval; do
+ IFS=$lt_save_ifs
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac
+else
+ enable_static=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+ # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then :
+ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+ USE_MAINTAINER_MODE=no
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
+$as_echo "$USE_MAINTAINER_MODE" >&6; }
+ if test $USE_MAINTAINER_MODE = yes; then
+ MAINTAINER_MODE_TRUE=
+ MAINTAINER_MODE_FALSE='#'
+else
+ MAINTAINER_MODE_TRUE='#'
+ MAINTAINER_MODE_FALSE=
+fi
+
+ MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+else
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
+if ${am_cv_prog_cc_c_o+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ # Make sure it works both with $CC and with simple cc.
+ # Following AC_PROG_CC_C_O, we do the test twice because some
+ # compilers refuse to overwrite an existing .o file with -o,
+ # though they will create one.
+ am_cv_prog_cc_c_o=yes
+ for am_i in 1 2; do
+ if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+ ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } \
+ && test -f conftest2.$ac_objext; then
+ : OK
+ else
+ am_cv_prog_cc_c_o=no
+ break
+ fi
+ done
+ rm -f core conftest*
+ unset am_i
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+$as_echo "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+depcc="$CC" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5
+$as_echo_n "checking for library containing strerror... " >&6; }
+if ${ac_cv_search_strerror+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char strerror ();
+int
+main ()
+{
+return strerror ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' cposix; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_strerror=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_strerror+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search_strerror+:} false; then :
+
+else
+ ac_cv_search_strerror=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5
+$as_echo "$ac_cv_search_strerror" >&6; }
+ac_res=$ac_cv_search_strerror
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+for ac_prog in 'bison -y' byacc
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_YACC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$YACC"; then
+ ac_cv_prog_YACC="$YACC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_YACC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+YACC=$ac_cv_prog_YACC
+if test -n "$YACC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5
+$as_echo "$YACC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$YACC" && break
+done
+test -n "$YACC" || YACC="yacc"
+
+case `pwd` in
+ *\ * | *\ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.4.6'
+macro_revision='2.4.6'
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain=$ac_aux_dir/ltmain.sh
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+ as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+else
+ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+$as_echo_n "checking how to print strings... " >&6; }
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='printf %s\n'
+else
+ # Use this function as a fallback that always works.
+ func_fallback_echo ()
+ {
+ eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+ }
+ ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+ $ECHO ""
+}
+
+case $ECHO in
+ printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+$as_echo "printf" >&6; } ;;
+ print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+$as_echo "print -r" >&6; } ;;
+ *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+$as_echo "cat" >&6; } ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if ${ac_cv_path_SED+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+ for ac_i in 1 2 3 4 5 6 7; do
+ ac_script="$ac_script$as_nl$ac_script"
+ done
+ echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+ { ac_script=; unset ac_script;}
+ if test -z "$SED"; then
+ ac_path_SED_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_SED" || continue
+# Check for GNU ac_path_SED and select it if it is found.
+ # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+ ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo '' >> "conftest.nl"
+ "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_SED_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_SED="$ac_path_SED"
+ ac_path_SED_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_SED_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_SED"; then
+ as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+ fi
+else
+ ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+ rm -f conftest.sed
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if ${ac_cv_path_FGREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+ then ac_cv_path_FGREP="$GREP -F"
+ else
+ if test -z "$FGREP"; then
+ ac_path_FGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in fgrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_FGREP" || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+ # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'FGREP' >> "conftest.nl"
+ "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_FGREP="$ac_path_FGREP"
+ ac_path_FGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_FGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_FGREP"; then
+ as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_FGREP=$FGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+ withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
+else
+ with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test yes = "$GCC"; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return, which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [\\/]* | ?:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD=$ac_prog
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test yes = "$with_gnu_ld"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${lt_cv_path_LD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$LD"; then
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD=$ac_dir/$ac_prog
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test no != "$with_gnu_ld" && break
+ ;;
+ *)
+ test yes != "$with_gnu_ld" && break
+ ;;
+ esac
+ fi
+ done
+ IFS=$lt_save_ifs
+else
+ lt_cv_path_LD=$LD # Let the user override the test with a path.
+fi
+fi
+
+LD=$lt_cv_path_LD
+if test -n "$LD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if ${lt_cv_path_NM+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM=$NM
+else
+ lt_nm_to_check=${ac_tool_prefix}nm
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm=$ac_dir/$lt_tmp_nm
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the 'sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
+ case $build_os in
+ mingw*) lt_bad_file=conftest.nm/nofile ;;
+ *) lt_bad_file=/dev/null ;;
+ esac
+ case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
+ *$lt_bad_file* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break 2
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break 2
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS=$lt_save_ifs
+ done
+ : ${lt_cv_path_NM=no}
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test no != "$lt_cv_path_NM"; then
+ NM=$lt_cv_path_NM
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ if test -n "$DUMPBIN"; then :
+ # Let the user override the test.
+ else
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in dumpbin "link -dump"
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DUMPBIN+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$DUMPBIN"; then
+ ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$DUMPBIN" && break
+ done
+fi
+if test -z "$DUMPBIN"; then
+ ac_ct_DUMPBIN=$DUMPBIN
+ for ac_prog in dumpbin "link -dump"
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_DUMPBIN"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_DUMPBIN" && break
+done
+
+ if test "x$ac_ct_DUMPBIN" = x; then
+ DUMPBIN=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DUMPBIN=$ac_ct_DUMPBIN
+ fi
+fi
+
+ case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
+ *COFF*)
+ DUMPBIN="$DUMPBIN -symbols -headers"
+ ;;
+ *)
+ DUMPBIN=:
+ ;;
+ esac
+ fi
+
+ if test : != "$DUMPBIN"; then
+ NM=$DUMPBIN
+ fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if ${lt_cv_nm_interface+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:$LINENO: output\"" >&5)
+ cat conftest.out >&5
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
+
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if ${lt_cv_sys_max_cmd_len+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ i=0
+ teststring=ABCD
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw* | cegcc*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ mint*)
+ # On MiNT this can take a long time and run out of memory.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ amigaos*)
+ # On AmigaOS with pdksh, this test takes hours, literally.
+ # So we just punt and use a minimum line length of 8192.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
+ # This has been around since 386BSD, at least. Likely further.
+ if test -x /sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+ elif test -x /usr/sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+ else
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ os2*)
+ # The test takes a long time on OS/2.
+ lt_cv_sys_max_cmd_len=8192
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+ if test -n "$lt_cv_sys_max_cmd_len" && \
+ test undefined != "$lt_cv_sys_max_cmd_len"; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test X`env echo "$teststring$teststring" 2>/dev/null` \
+ = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+ test 17 != "$i" # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+
+fi
+
+if test -n "$lt_cv_sys_max_cmd_len"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
+$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
+if ${lt_cv_to_host_file_cmd+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+ ;;
+ esac
+ ;;
+ *-*-cygwin* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+ ;;
+ esac
+ ;;
+ * ) # unhandled hosts (and "normal" native builds)
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+esac
+
+fi
+
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
+$as_echo "$lt_cv_to_host_file_cmd" >&6; }
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
+$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
+if ${lt_cv_to_tool_file_cmd+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ #assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ esac
+ ;;
+esac
+
+fi
+
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
+$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if ${lt_cv_ld_reload_flag+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ld_reload_flag='-r'
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ if test yes != "$GCC"; then
+ reload_cmds=false
+ fi
+ ;;
+ darwin*)
+ if test yes = "$GCC"; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OBJDUMP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OBJDUMP"; then
+ ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+ ac_ct_OBJDUMP=$OBJDUMP
+ # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OBJDUMP"; then
+ ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OBJDUMP="objdump"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OBJDUMP" = x; then
+ OBJDUMP="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OBJDUMP=$ac_ct_OBJDUMP
+ fi
+else
+ OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if ${lt_cv_deplibs_check_method+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# 'unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# that responds to the $file_magic_cmd with a given extended regex.
+# If you have 'file' or equivalent on your system and you're not sure
+# whether 'pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi[45]*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ if ( file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ # Keep this pattern in sync with the one in func_win32_libid.
+ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+
+cegcc*)
+ # use the weaker test based on 'objdump'. See mingw*.
+ lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+haiku*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix[3-9]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd* | bitrig*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+os2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+ case $host_os in
+ mingw* | pw32*)
+ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+ want_nocaseglob=yes
+ else
+ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
+ fi
+ ;;
+ esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DLLTOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$DLLTOOL"; then
+ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+ ac_ct_DLLTOOL=$DLLTOOL
+ # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_DLLTOOL"; then
+ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_DLLTOOL" = x; then
+ DLLTOOL="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DLLTOOL=$ac_ct_DLLTOOL
+ fi
+else
+ DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
+$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
+if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+ # two different shell functions defined in ltmain.sh;
+ # decide which one to use based on capabilities of $DLLTOOL
+ case `$DLLTOOL --help 2>&1` in
+ *--identify-strict*)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+ ;;
+ *)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+ ;;
+ esac
+ ;;
+*)
+ # fallback: assume linklib IS sharedlib
+ lt_cv_sharedlib_from_linklib_cmd=$ECHO
+ ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
+$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in ar
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AR" && break
+ done
+fi
+if test -z "$AR"; then
+ ac_ct_AR=$AR
+ for ac_prog in ar
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_AR="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_AR" && break
+done
+
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ AR=$ac_ct_AR
+ fi
+fi
+
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
+$as_echo_n "checking for archiver @FILE support... " >&6; }
+if ${lt_cv_ar_at_file+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ar_at_file=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ echo conftest.$ac_objext > conftest.lst
+ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+ (eval $lt_ar_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if test 0 -eq "$ac_status"; then
+ # Ensure the archiver fails upon bogus file names.
+ rm -f conftest.$ac_objext libconftest.a
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+ (eval $lt_ar_try) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if test 0 -ne "$ac_status"; then
+ lt_cv_ar_at_file=@
+ fi
+ fi
+ rm -f conftest.* libconftest.a
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
+$as_echo "$lt_cv_ar_at_file" >&6; }
+
+if test no = "$lt_cv_ar_at_file"; then
+ archiver_list_spec=
+else
+ archiver_list_spec=$lt_cv_ar_at_file
+fi
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RANLIB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_RANLIB" = x; then
+ RANLIB=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ RANLIB=$ac_ct_RANLIB
+ fi
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ bitrig* | openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
+fi
+
+case $host_os in
+ darwin*)
+ lock_old_archive_extraction=yes ;;
+ *)
+ lock_old_archive_extraction=no ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if ${lt_cv_sys_global_symbol_pipe+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[BCDT]'
+ ;;
+cygwin* | mingw* | pw32* | cegcc*)
+ symcode='[ABCDGISTW]'
+ ;;
+hpux*)
+ if test ia64 = "$host_cpu"; then
+ symcode='[ABCDEGRST]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[BCDEGRST]'
+ ;;
+osf*)
+ symcode='[BCDEGQRST]'
+ ;;
+solaris*)
+ symcode='[BDRT]'
+ ;;
+sco3.2v5*)
+ symcode='[DT]'
+ ;;
+sysv4.2uw2*)
+ symcode='[DT]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[ABDT]'
+ ;;
+sysv4)
+ symcode='[DFNSTU]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[ABCDGIRSTW]' ;;
+esac
+
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Gets list of data symbols to import.
+ lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
+ # Adjust the below global symbol transforms to fixup imported variables.
+ lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
+ lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'"
+ lt_c_name_lib_hook="\
+ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\
+ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'"
+else
+ # Disable hooks by default.
+ lt_cv_sys_global_symbol_to_import=
+ lt_cdecl_hook=
+ lt_c_name_hook=
+ lt_c_name_lib_hook=
+fi
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n"\
+$lt_cdecl_hook\
+" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
+$lt_c_name_hook\
+" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'"
+
+# Transform an extracted symbol line into symbol name with lib prefix and
+# symbol address.
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
+$lt_c_name_lib_hook\
+" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function,
+ # D for any global variable and I for any imported variable.
+ # Also find C++ and __fastcall symbols from MSVC++,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK '"\
+" {last_section=section; section=\$ 3};"\
+" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
+" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
+" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
+" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
+" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx"
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ $ECHO "$as_me:$LINENO: $NM conftest.$ac_objext | $lt_cv_sys_global_symbol_pipe > $nlist" >&5
+ if eval "$NM" conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist 2>&5 && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
+ relocations are performed -- see ld's documentation on pseudo-relocs. */
+# define LT_DLSYM_CONST
+#elif defined __osf__
+/* This system does not cope well with relocations in const data. */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+LT_DLSYM_CONST struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_globsym_save_LIBS=$LIBS
+ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS=conftstm.$ac_objext
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ pipe_works=yes
+ fi
+ LIBS=$lt_globsym_save_LIBS
+ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&5
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+ fi
+ else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ fi
+ rm -rf conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test yes = "$pipe_works"; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
+ nm_file_list_spec='@'
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
+$as_echo_n "checking for sysroot... " >&6; }
+
+# Check whether --with-sysroot was given.
+if test "${with_sysroot+set}" = set; then :
+ withval=$with_sysroot;
+else
+ with_sysroot=no
+fi
+
+
+lt_sysroot=
+case $with_sysroot in #(
+ yes)
+ if test yes = "$GCC"; then
+ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+ fi
+ ;; #(
+ /*)
+ lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+ ;; #(
+ no|'')
+ ;; #(
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5
+$as_echo "$with_sysroot" >&6; }
+ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
+ ;;
+esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
+$as_echo "${lt_sysroot:-no}" >&6; }
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5
+$as_echo_n "checking for a working dd... " >&6; }
+if ${ac_cv_path_lt_DD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+: ${lt_DD:=$DD}
+if test -z "$lt_DD"; then
+ ac_path_lt_DD_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in dd; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_lt_DD" || continue
+if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+ cmp -s conftest.i conftest.out \
+ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=:
+fi
+ $ac_path_lt_DD_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_lt_DD"; then
+ :
+ fi
+else
+ ac_cv_path_lt_DD=$lt_DD
+fi
+
+rm -f conftest.i conftest2.i conftest.out
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5
+$as_echo "$ac_cv_path_lt_DD" >&6; }
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5
+$as_echo_n "checking how to truncate binary pipes... " >&6; }
+if ${lt_cv_truncate_bin+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+lt_cv_truncate_bin=
+if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+ cmp -s conftest.i conftest.out \
+ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1"
+fi
+rm -f conftest.i conftest2.i conftest.out
+test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5
+$as_echo "$lt_cv_truncate_bin" >&6; }
+
+
+
+
+
+
+
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+ for cc_temp in $*""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+ done
+ func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then :
+ enableval=$enable_libtool_lock;
+fi
+
+test no = "$enable_libtool_lock" || enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out what ABI is being produced by ac_compile, and set mode
+ # options accordingly.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE=32
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE=64
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly.
+ echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ if test yes = "$lt_cv_prog_gnu_ld"; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+mips64*-*linux*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly.
+ echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ emul=elf
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ emul="${emul}32"
+ ;;
+ *64-bit*)
+ emul="${emul}64"
+ ;;
+ esac
+ case `/usr/bin/file conftest.$ac_objext` in
+ *MSB*)
+ emul="${emul}btsmip"
+ ;;
+ *LSB*)
+ emul="${emul}ltsmip"
+ ;;
+ esac
+ case `/usr/bin/file conftest.$ac_objext` in
+ *N32*)
+ emul="${emul}n32"
+ ;;
+ esac
+ LD="${LD-ld} -m $emul"
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly. Note that the listed cases only cover the
+ # situations where additional linker options are needed (such as when
+ # doing 32-bit compilation for a host where ld defaults to 64-bit, or
+ # vice versa); the common cases where no linker options are needed do
+ # not appear in the list.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ case `/usr/bin/file conftest.o` in
+ *x86-64*)
+ LD="${LD-ld} -m elf32_x86_64"
+ ;;
+ *)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ esac
+ ;;
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS -belf"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if ${lt_cv_cc_needs_belf+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ lt_cv_cc_needs_belf=yes
+else
+ lt_cv_cc_needs_belf=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+ if test yes != "$lt_cv_cc_needs_belf"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS=$SAVE_CFLAGS
+ fi
+ ;;
+*-*solaris*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*)
+ case $host in
+ i?86-*-solaris*|x86_64-*-solaris*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ sparc*-*-solaris*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ # GNU ld 2.21 introduced _sol2 emulations. Use them if available.
+ if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+ LD=${LD-ld}_sol2
+ fi
+ ;;
+ *)
+ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ LD="${LD-ld} -64"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+need_locks=$enable_libtool_lock
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
+set dummy ${ac_tool_prefix}mt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$MANIFEST_TOOL"; then
+ ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
+if test -n "$MANIFEST_TOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
+$as_echo "$MANIFEST_TOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
+ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
+ # Extract the first word of "mt", so it can be a program name with args.
+set dummy mt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_MANIFEST_TOOL"; then
+ ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
+if test -n "$ac_ct_MANIFEST_TOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
+$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_MANIFEST_TOOL" = x; then
+ MANIFEST_TOOL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
+ fi
+else
+ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
+fi
+
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
+$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
+if ${lt_cv_path_mainfest_tool+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_path_mainfest_tool=no
+ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
+ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+ cat conftest.err >&5
+ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+ lt_cv_path_mainfest_tool=yes
+ fi
+ rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
+$as_echo "$lt_cv_path_mainfest_tool" >&6; }
+if test yes != "$lt_cv_path_mainfest_tool"; then
+ MANIFEST_TOOL=:
+fi
+
+
+
+
+
+
+ case $host_os in
+ rhapsody* | darwin*)
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DSYMUTIL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$DSYMUTIL"; then
+ ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+ ac_ct_DSYMUTIL=$DSYMUTIL
+ # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_DSYMUTIL"; then
+ ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_DSYMUTIL" = x; then
+ DSYMUTIL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DSYMUTIL=$ac_ct_DSYMUTIL
+ fi
+else
+ DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_NMEDIT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$NMEDIT"; then
+ ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+ ac_ct_NMEDIT=$NMEDIT
+ # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_NMEDIT"; then
+ ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_NMEDIT="nmedit"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_NMEDIT" = x; then
+ NMEDIT=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ NMEDIT=$ac_ct_NMEDIT
+ fi
+else
+ NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_LIPO+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$LIPO"; then
+ ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+ ac_ct_LIPO=$LIPO
+ # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_LIPO"; then
+ ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_LIPO="lipo"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_LIPO" = x; then
+ LIPO=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ LIPO=$ac_ct_LIPO
+ fi
+else
+ LIPO="$ac_cv_prog_LIPO"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OTOOL"; then
+ ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+ ac_ct_OTOOL=$OTOOL
+ # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OTOOL"; then
+ ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OTOOL="otool"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OTOOL" = x; then
+ OTOOL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OTOOL=$ac_ct_OTOOL
+ fi
+else
+ OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL64+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OTOOL64"; then
+ ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+ ac_ct_OTOOL64=$OTOOL64
+ # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OTOOL64"; then
+ ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OTOOL64="otool64"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OTOOL64" = x; then
+ OTOOL64=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OTOOL64=$ac_ct_OTOOL64
+ fi
+else
+ OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if ${lt_cv_apple_cc_single_mod+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_apple_cc_single_mod=no
+ if test -z "$LT_MULTI_MODULE"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi_module to the
+ # link flags.
+ rm -rf libconftest.dylib*
+ echo "int foo(void){return 1;}" > conftest.c
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+ _lt_result=$?
+ # If there is a non-empty error log, and "single_module"
+ # appears in it, assume the flag caused a linker warning
+ if test -s conftest.err && $GREP single_module conftest.err; then
+ cat conftest.err >&5
+ # Otherwise, if the output was created with a 0 exit code from
+ # the compiler, it worked.
+ elif test -f libconftest.dylib && test 0 = "$_lt_result"; then
+ lt_cv_apple_cc_single_mod=yes
+ else
+ cat conftest.err >&5
+ fi
+ rm -rf libconftest.dylib*
+ rm -f conftest.*
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if ${lt_cv_ld_exported_symbols_list+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ld_exported_symbols_list=no
+ save_LDFLAGS=$LDFLAGS
+ echo "_main" > conftest.sym
+ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ lt_cv_ld_exported_symbols_list=yes
+else
+ lt_cv_ld_exported_symbols_list=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$save_LDFLAGS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+$as_echo_n "checking for -force_load linker flag... " >&6; }
+if ${lt_cv_ld_force_load+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ld_force_load=no
+ cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+ echo "$AR cru libconftest.a conftest.o" >&5
+ $AR cru libconftest.a conftest.o 2>&5
+ echo "$RANLIB libconftest.a" >&5
+ $RANLIB libconftest.a 2>&5
+ cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
+ $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+ _lt_result=$?
+ if test -s conftest.err && $GREP force_load conftest.err; then
+ cat conftest.err >&5
+ elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then
+ lt_cv_ld_force_load=yes
+ else
+ cat conftest.err >&5
+ fi
+ rm -f conftest.err libconftest.a conftest conftest.c
+ rm -rf conftest.dSYM
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+$as_echo "$lt_cv_ld_force_load" >&6; }
+ case $host_os in
+ rhapsody* | darwin1.[012])
+ _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
+ darwin1.*)
+ _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+ darwin*) # darwin 5.x on
+ # if running on 10.5 or later, the deployment target defaults
+ # to the OS version, if on x86, and 10.4, the deployment
+ # target defaults to 10.4. Don't you love it?
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+ 10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+ _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+ 10.[012][,.]*)
+ _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+ 10.*)
+ _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+ esac
+ ;;
+ esac
+ if test yes = "$lt_cv_apple_cc_single_mod"; then
+ _lt_dar_single_mod='$single_module'
+ fi
+ if test yes = "$lt_cv_ld_exported_symbols_list"; then
+ _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym'
+ else
+ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib'
+ fi
+ if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then
+ _lt_dsymutil='~$DSYMUTIL $lib || :'
+ else
+ _lt_dsymutil=
+ fi
+ ;;
+ esac
+
+# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+# string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+# string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+# string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+# "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+# VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+ case x$2 in
+ x)
+ ;;
+ *:)
+ eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\"
+ ;;
+ x:*)
+ eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\"
+ ;;
+ *::*)
+ eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+ eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\"
+ ;;
+ *)
+ eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\"
+ ;;
+ esac
+}
+
+for ac_header in dlfcn.h
+do :
+ ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DLFCN_H 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+# Set options
+
+
+
+ enable_dlopen=no
+
+
+ enable_win32_dll=no
+
+
+
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then :
+ withval=$with_pic; lt_p=${PACKAGE-default}
+ case $withval in
+ yes|no) pic_mode=$withval ;;
+ *)
+ pic_mode=default
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for lt_pkg in $withval; do
+ IFS=$lt_save_ifs
+ if test "X$lt_pkg" = "X$lt_p"; then
+ pic_mode=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac
+else
+ pic_mode=default
+fi
+
+
+
+
+
+
+
+
+ # Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then :
+ enableval=$enable_fast_install; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for pkg in $enableval; do
+ IFS=$lt_save_ifs
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac
+else
+ enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+ shared_archive_member_spec=
+case $host,$enable_shared in
+power*-*-aix[5-9]*,yes)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5
+$as_echo_n "checking which variant of shared library versioning to provide... " >&6; }
+
+# Check whether --with-aix-soname was given.
+if test "${with_aix_soname+set}" = set; then :
+ withval=$with_aix_soname; case $withval in
+ aix|svr4|both)
+ ;;
+ *)
+ as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5
+ ;;
+ esac
+ lt_cv_with_aix_soname=$with_aix_soname
+else
+ if ${lt_cv_with_aix_soname+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_with_aix_soname=aix
+fi
+
+ with_aix_soname=$lt_cv_with_aix_soname
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5
+$as_echo "$with_aix_soname" >&6; }
+ if test aix != "$with_aix_soname"; then
+ # For the AIX way of multilib, we name the shared archive member
+ # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
+ # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
+ # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
+ # the AIX toolchain works better with OBJECT_MODE set (default 32).
+ if test 64 = "${OBJECT_MODE-32}"; then
+ shared_archive_member_spec=shr_64
+ else
+ shared_archive_member_spec=shr
+ fi
+ fi
+ ;;
+*)
+ with_aix_soname=aix
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS=$ltmain
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}"; then
+ setopt NO_GLOB_SUBST
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if ${lt_cv_objdir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test set != "${COLLECT_NAMES+set}"; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a '.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+old_CC=$CC
+old_CFLAGS=$CFLAGS
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+func_cc_basename $compiler
+cc_basename=$func_cc_basename_result
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD=$MAGIC_CMD
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/${ac_tool_prefix}file"; then
+ lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS=$lt_save_ifs
+ MAGIC_CMD=$lt_save_MAGIC_CMD
+ ;;
+esac
+fi
+
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+if test -n "$MAGIC_CMD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD=$MAGIC_CMD
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/file"; then
+ lt_cv_path_MAGIC_CMD=$ac_dir/"file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS=$lt_save_ifs
+ MAGIC_CMD=$lt_save_MAGIC_CMD
+ ;;
+esac
+fi
+
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+if test -n "$MAGIC_CMD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ else
+ MAGIC_CMD=:
+ fi
+fi
+
+ fi
+ ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC=$CC
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test yes = "$GCC"; then
+ case $cc_basename in
+ nvcc*)
+ lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
+ *)
+ lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
+ esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_rtti_exceptions=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_rtti_exceptions=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then
+ lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+ :
+fi
+
+fi
+
+
+
+
+
+
+ lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+
+ if test yes = "$GCC"; then
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_static='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the '-m68020' flag to GCC prevents building anything better,
+ # like '-m68040'.
+ lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ case $host_os in
+ os2*)
+ lt_prog_compiler_static='$wl-static'
+ ;;
+ esac
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic='-fno-common'
+ ;;
+
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ lt_prog_compiler_static=
+ ;;
+
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[3-9]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ lt_prog_compiler_can_build_shared=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+
+ case $cc_basename in
+ nvcc*) # Cuda Compiler Driver 2.2
+ lt_prog_compiler_wl='-Xlinker '
+ if test -n "$lt_prog_compiler_pic"; then
+ lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
+ fi
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ lt_prog_compiler_wl='-Wl,'
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ else
+ lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic='-fno-common'
+ case $cc_basename in
+ nagfor*)
+ # NAG Fortran compiler
+ lt_prog_compiler_wl='-Wl,-Wl,,'
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ esac
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ case $host_os in
+ os2*)
+ lt_prog_compiler_static='$wl-static'
+ ;;
+ esac
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ lt_prog_compiler_static='$wl-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC (with -KPIC) is the default.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ case $cc_basename in
+ # old Intel for x86_64, which still supported -KPIC.
+ ecc*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ # flang / f18. f95 an alias for gfortran or flang on Debian
+ flang* | f18* | f95*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ # icc used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ icc* | ifort*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ # Lahey Fortran 8.1.
+ lf95*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='--shared'
+ lt_prog_compiler_static='--static'
+ ;;
+ nagfor*)
+ # NAG Fortran compiler
+ lt_prog_compiler_wl='-Wl,-Wl,,'
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ tcc*)
+ # Fabrice Bellard et al's Tiny C Compiler
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fpic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ ccc*)
+ lt_prog_compiler_wl='-Wl,'
+ # All Alpha code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+ xl* | bgxl* | bgf* | mpixl*)
+ # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-qpic'
+ lt_prog_compiler_static='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl=''
+ ;;
+ *Sun\ F* | *Sun*Fortran*)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl='-Qoption ld '
+ ;;
+ *Sun\ C*)
+ # Sun C 5.9
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl='-Wl,'
+ ;;
+ *Intel*\ [CF]*Compiler*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ *Portland\ Group*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fpic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ lt_prog_compiler_wl='-Wl,'
+ # All OSF/1 code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ rdos*)
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ solaris*)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ lt_prog_compiler_wl='-Qoption ld '
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic='-Kconform_pic'
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ unicos*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_can_build_shared=no
+ ;;
+
+ uts4*)
+ lt_prog_compiler_pic='-pic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *)
+ lt_prog_compiler_can_build_shared=no
+ ;;
+ esac
+ fi
+
+case $host_os in
+ # For platforms that do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic=
+ ;;
+ *)
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
+$as_echo "$lt_cv_prog_compiler_pic" >&6; }
+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_pic_works=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_pic_works=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_pic_works"; then
+ case $lt_prog_compiler_pic in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+ esac
+else
+ lt_prog_compiler_pic=
+ lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_static_works=no
+ save_LDFLAGS=$LDFLAGS
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_static_works=yes
+ fi
+ else
+ lt_cv_prog_compiler_static_works=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS=$save_LDFLAGS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_static_works"; then
+ :
+else
+ lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links=nottested
+if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then
+ # do not overwrite the value of need_locks provided by the user
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+ if test no = "$hard_links"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+ runpath_var=
+ allow_undefined_flag=
+ always_export_symbols=no
+ archive_cmds=
+ archive_expsym_cmds=
+ compiler_needs_object=no
+ enable_shared_with_static_runtimes=no
+ export_dynamic_flag_spec=
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ hardcode_automatic=no
+ hardcode_direct=no
+ hardcode_direct_absolute=no
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_separator=
+ hardcode_minus_L=no
+ hardcode_shlibpath_var=unsupported
+ inherit_rpath=no
+ link_all_deplibs=unknown
+ module_cmds=
+ module_expsym_cmds=
+ old_archive_from_new_cmds=
+ old_archive_from_expsyms_cmds=
+ thread_safe_flag_spec=
+ whole_archive_flag_spec=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ include_expsyms=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ' (' and ')$', so one must not match beginning or
+ # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc',
+ # as well as any symbol that contains 'd'.
+ exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ # Exclude shared library initialization/finalization symbols.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test yes != "$GCC"; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd* | bitrig*)
+ with_gnu_ld=no
+ ;;
+ linux* | k*bsd*-gnu | gnu*)
+ link_all_deplibs=no
+ ;;
+ esac
+
+ ld_shlibs=yes
+
+ # On some targets, GNU ld is compatible enough with the native linker
+ # that we're better off using the native interface for both.
+ lt_use_gnu_ld_interface=no
+ if test yes = "$with_gnu_ld"; then
+ case $host_os in
+ aix*)
+ # The AIX port of GNU ld has always aspired to compatibility
+ # with the native linker. However, as the warning in the GNU ld
+ # block says, versions before 2.19.5* couldn't really create working
+ # shared libraries, regardless of the interface used.
+ case `$LD -v 2>&1` in
+ *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+ *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+ *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ fi
+
+ if test yes = "$lt_use_gnu_ld_interface"; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='$wl'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ export_dynamic_flag_spec='$wl--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+ else
+ whole_archive_flag_spec=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in
+ *GNU\ gold*) supports_anon_versioning=yes ;;
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix[3-9]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test ia64 != "$host_cpu"; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ archive_expsym_cmds=''
+ ;;
+ m68k)
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ export_dynamic_flag_spec='$wl--export-all-symbols'
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file, use it as
+ # is; otherwise, prepend EXPORTS...
+ archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ haiku*)
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ link_all_deplibs=yes
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ shrext_cmds=.dll
+ archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ prefix_cmds="$SED"~
+ if test EXPORTS = "`$SED 1q $export_symbols`"; then
+ prefix_cmds="$prefix_cmds -e 1d";
+ fi~
+ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+ enable_shared_with_static_runtimes=yes
+ ;;
+
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+ export_dynamic_flag_spec='$wl-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+ tmp_diet=no
+ if test linux-dietlibc = "$host_os"; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test no = "$tmp_diet"
+ then
+ tmp_addflag=' $pic_flag'
+ tmp_sharedflag='-shared'
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group f77 and f90 compilers
+ whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ lf95*) # Lahey Fortran 8.1
+ whole_archive_flag_spec=
+ tmp_sharedflag='--shared' ;;
+ nagfor*) # NAGFOR 5.3
+ tmp_sharedflag='-Wl,-shared' ;;
+ xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+ nvcc*) # Cuda Compiler Driver 2.2
+ whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ compiler_needs_object=yes
+ ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ compiler_needs_object=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ esac
+ archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+
+ if test yes = "$supports_anon_versioning"; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+ fi
+
+ case $cc_basename in
+ tcc*)
+ export_dynamic_flag_spec='-rdynamic'
+ ;;
+ xlf* | bgf* | bgxlf* | mpixlf*)
+ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test yes = "$supports_anon_versioning"; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+
+ if test no = "$ld_shlibs"; then
+ runpath_var=
+ hardcode_libdir_flag_spec=
+ export_dynamic_flag_spec=
+ whole_archive_flag_spec=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+
+ aix[4-9]*)
+ if test ia64 = "$host_cpu"; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+ # Without the "-l" option, or with the "-B" option, AIX nm treats
+ # weak defined symbols like other global defined symbols, whereas
+ # GNU nm marks them as "W".
+ # While the 'weak' keyword is ignored in the Export File, we need
+ # it in the Import File for the 'aix-soname' feature, so we have
+ # to replace the "-B" option with "-P" for AIX nm.
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # have runtime linking enabled, and use it for executables.
+ # For shared libraries, we enable/disable runtime linking
+ # depending on the kind of the shared library created -
+ # when "with_aix_soname,aix_use_runtimelinking" is:
+ # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables
+ # "aix,yes" lib.so shared, rtl:yes, for executables
+ # lib.a static archive
+ # "both,no" lib.so.V(shr.o) shared, rtl:yes
+ # lib.a(lib.so.V) shared, rtl:no, for executables
+ # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a(lib.so.V) shared, rtl:no
+ # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a static archive
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ for ld_flag in $LDFLAGS; do
+ if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # With aix-soname=svr4, we create the lib.so.V shared archives only,
+ # so we don't have lib.a shared libs to link our executables.
+ # We have to force runtime linking in this case.
+ aix_use_runtimelinking=yes
+ LDFLAGS="$LDFLAGS -Wl,-brtl"
+ fi
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds=''
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ file_list_spec='$wl-f,'
+ case $with_aix_soname,$aix_use_runtimelinking in
+ aix,*) ;; # traditional, no import file
+ svr4,* | *,yes) # use import file
+ # The Import File defines what to hardcode.
+ hardcode_direct=no
+ hardcode_direct_absolute=no
+ ;;
+ esac
+
+ if test yes = "$GCC"; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`$CC -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test yes = "$aix_use_runtimelinking"; then
+ shared_flag="$shared_flag "'$wl-G'
+ fi
+ # Need to ensure runtime linking is disabled for the traditional
+ # shared library, or the linker may eventually find shared libraries
+ # /with/ Import File - we do not want to mix them.
+ shared_flag_aix='-shared'
+ shared_flag_svr4='-shared $wl-G'
+ else
+ # not using gcc
+ if test ia64 = "$host_cpu"; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test yes = "$aix_use_runtimelinking"; then
+ shared_flag='$wl-G'
+ else
+ shared_flag='$wl-bM:SRE'
+ fi
+ shared_flag_aix='$wl-bM:SRE'
+ shared_flag_svr4='$wl-G'
+ fi
+ fi
+
+ export_dynamic_flag_spec='$wl-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols=yes
+ if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ if test set = "${lt_cv_aix_libpath+set}"; then
+ aix_libpath=$lt_cv_aix_libpath
+else
+ if ${lt_cv_aix_libpath_+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\([^ ]*\) *$/\1/
+ p
+ }
+ }'
+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ # Check for a 64-bit object if we didn't find anything.
+ if test -z "$lt_cv_aix_libpath_"; then
+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test -z "$lt_cv_aix_libpath_"; then
+ lt_cv_aix_libpath_=/usr/lib:/lib
+ fi
+
+fi
+
+ aix_libpath=$lt_cv_aix_libpath_
+fi
+
+ hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+ else
+ if test ia64 = "$host_cpu"; then
+ hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag="-z nodefs"
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ if test set = "${lt_cv_aix_libpath+set}"; then
+ aix_libpath=$lt_cv_aix_libpath
+else
+ if ${lt_cv_aix_libpath_+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+ lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\([^ ]*\) *$/\1/
+ p
+ }
+ }'
+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ # Check for a 64-bit object if we didn't find anything.
+ if test -z "$lt_cv_aix_libpath_"; then
+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test -z "$lt_cv_aix_libpath_"; then
+ lt_cv_aix_libpath_=/usr/lib:/lib
+ fi
+
+fi
+
+ aix_libpath=$lt_cv_aix_libpath_
+fi
+
+ hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag=' $wl-bernotok'
+ allow_undefined_flag=' $wl-berok'
+ if test yes = "$with_gnu_ld"; then
+ # We only use this code for GNU lds that support --whole-archive.
+ whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec='$convenience'
+ fi
+ archive_cmds_need_lc=yes
+ archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+ # -brtl affects multiple linker settings, -berok does not and is overridden later
+ compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`'
+ if test svr4 != "$with_aix_soname"; then
+ # This is similar to how AIX traditionally builds its shared libraries.
+ archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+ fi
+ if test aix != "$with_aix_soname"; then
+ archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+ else
+ # used by -dlpreopen to get the symbols
+ archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir'
+ fi
+ archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ archive_expsym_cmds=''
+ ;;
+ m68k)
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+
+ bsdi[45]*)
+ export_dynamic_flag_spec=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ case $cc_basename in
+ cl*)
+ # Native MSVC
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ file_list_spec='@'
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=.dll
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+ archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then
+ cp "$export_symbols" "$output_objdir/$soname.def";
+ echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+ else
+ $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+ fi~
+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+ linknames='
+ # The linker will not automatically build a static lib if we build a DLL.
+ # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
+ enable_shared_with_static_runtimes=yes
+ exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+ # Don't use ranlib
+ old_postinstall_cmds='chmod 644 $oldlib'
+ postlink_cmds='lt_outputfile="@OUTPUT@"~
+ lt_tool_outputfile="@TOOL_OUTPUT@"~
+ case $lt_outputfile in
+ *.exe|*.EXE) ;;
+ *)
+ lt_outputfile=$lt_outputfile.exe
+ lt_tool_outputfile=$lt_tool_outputfile.exe
+ ;;
+ esac~
+ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+ $RM "$lt_outputfile.manifest";
+ fi'
+ ;;
+ *)
+ # Assume MSVC wrapper
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=.dll
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_from_new_cmds='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ enable_shared_with_static_runtimes=yes
+ ;;
+ esac
+ ;;
+
+ darwin* | rhapsody*)
+
+
+ archive_cmds_need_lc=no
+ hardcode_direct=no
+ hardcode_automatic=yes
+ hardcode_shlibpath_var=unsupported
+ if test yes = "$lt_cv_ld_force_load"; then
+ whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+
+ else
+ whole_archive_flag_spec=''
+ fi
+ link_all_deplibs=yes
+ allow_undefined_flag=$_lt_dar_allow_undefined
+ case $cc_basename in
+ ifort*|nagfor*) _lt_dar_can_shared=yes ;;
+ *) _lt_dar_can_shared=$GCC ;;
+ esac
+ if test yes = "$_lt_dar_can_shared"; then
+ output_verbose_link_cmd=func_echo_all
+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+ module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+ archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+ module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+
+ else
+ ld_shlibs=no
+ fi
+
+ ;;
+
+ dgux*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ hpux9*)
+ if test yes = "$GCC"; then
+ archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+ fi
+ hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ export_dynamic_flag_spec='$wl-E'
+ ;;
+
+ hpux10*)
+ if test yes,no = "$GCC,$with_gnu_ld"; then
+ archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test no = "$with_gnu_ld"; then
+ hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='$wl-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test yes,no = "$GCC,$with_gnu_ld"; then
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+
+ # Older versions of the 11.00 compiler do not understand -b yet
+ # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+$as_echo_n "checking if $CC understands -b... " >&6; }
+if ${lt_cv_prog_compiler__b+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler__b=no
+ save_LDFLAGS=$LDFLAGS
+ LDFLAGS="$LDFLAGS -b"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler__b=yes
+ fi
+ else
+ lt_cv_prog_compiler__b=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS=$save_LDFLAGS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+$as_echo "$lt_cv_prog_compiler__b" >&6; }
+
+if test yes = "$lt_cv_prog_compiler__b"; then
+ archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+fi
+
+ ;;
+ esac
+ fi
+ if test no = "$with_gnu_ld"; then
+ hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+ hardcode_libdir_separator=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ ;;
+ *)
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='$wl-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test yes = "$GCC"; then
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ # This should be the same for all languages, so no per-tag cache variable.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
+if ${lt_cv_irix_exported_symbol+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ save_LDFLAGS=$LDFLAGS
+ LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int foo (void) { return 0; }
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ lt_cv_irix_exported_symbol=yes
+else
+ lt_cv_irix_exported_symbol=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$save_LDFLAGS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
+ if test yes = "$lt_cv_irix_exported_symbol"; then
+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
+ fi
+ link_all_deplibs=no
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ hardcode_libdir_separator=:
+ inherit_rpath=yes
+ link_all_deplibs=yes
+ ;;
+
+ linux*)
+ case $cc_basename in
+ tcc*)
+ # Fabrice Bellard et al's Tiny C Compiler
+ ld_shlibs=yes
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ newsos6)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ hardcode_libdir_separator=:
+ hardcode_shlibpath_var=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd* | bitrig*)
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ hardcode_direct_absolute=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols'
+ hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+ export_dynamic_flag_spec='$wl-E'
+ else
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ shrext_cmds=.dll
+ archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ prefix_cmds="$SED"~
+ if test EXPORTS = "`$SED 1q $export_symbols`"; then
+ prefix_cmds="$prefix_cmds -e 1d";
+ fi~
+ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+ enable_shared_with_static_runtimes=yes
+ ;;
+
+ osf3*)
+ if test yes = "$GCC"; then
+ allow_undefined_flag=' $wl-expect_unresolved $wl\*'
+ archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ hardcode_libdir_separator=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test yes = "$GCC"; then
+ allow_undefined_flag=' $wl-expect_unresolved $wl\*'
+ archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_separator=:
+ ;;
+
+ solaris*)
+ no_undefined_flag=' -z defs'
+ if test yes = "$GCC"; then
+ wlarc='$wl'
+ archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='$wl'
+ archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_shlibpath_var=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands '-z linker_flag'. GCC discards it without '$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test yes = "$GCC"; then
+ whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+ else
+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ link_all_deplibs=yes
+ ;;
+
+ sunos4*)
+ if test sequent = "$host_vendor"; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ reload_cmds='$CC -r -o $output$reload_objs'
+ hardcode_direct=no
+ ;;
+ motorola)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ no_undefined_flag='$wl-z,text'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ runpath_var='LD_RUN_PATH'
+
+ if test yes = "$GCC"; then
+ archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We CANNOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ no_undefined_flag='$wl-z,text'
+ allow_undefined_flag='$wl-z,nodefs'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='$wl-R,$libdir'
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ export_dynamic_flag_spec='$wl-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test yes = "$GCC"; then
+ archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+
+ if test sni = "$host_vendor"; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ export_dynamic_flag_spec='$wl-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test no = "$ld_shlibs" && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc=yes
+
+ if test yes,yes = "$GCC,$enable_shared"; then
+ case $archive_cmds in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl
+ pic_flag=$lt_prog_compiler_pic
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag
+ allow_undefined_flag=
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+ (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ then
+ lt_cv_archive_cmds_need_lc=no
+ else
+ lt_cv_archive_cmds_need_lc=yes
+ fi
+ allow_undefined_flag=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
+ archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+if test yes = "$GCC"; then
+ case $host_os in
+ darwin*) lt_awk_arg='/^libraries:/,/LR/' ;;
+ *) lt_awk_arg='/^libraries:/' ;;
+ esac
+ case $host_os in
+ mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;;
+ *) lt_sed_strip_eq='s|=/|/|g' ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+ case $lt_search_path_spec in
+ *\;*)
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+ ;;
+ *)
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ esac
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary...
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ # ...but if some path component already ends with the multilib dir we assume
+ # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer).
+ case "$lt_multi_os_dir; $lt_search_path_spec " in
+ "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*)
+ lt_multi_os_dir=
+ ;;
+ esac
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir"
+ elif test -n "$lt_multi_os_dir"; then
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS = " "; FS = "/|\n";} {
+ lt_foo = "";
+ lt_count = 0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo = "/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[lt_foo]++; }
+ if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+ # AWK program above erroneously prepends '/' to C:/dos/paths
+ # for these hosts.
+ case $host_os in
+ mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+ $SED 's|/\([A-Za-z]:\)|\1|g'` ;;
+ esac
+ sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=.so
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+
+
+case $host_os in
+aix3*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='$libname$release$shared_ext$major'
+ ;;
+
+aix[4-9]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 supports IA64
+ library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line '#! .'. This would cause the generated library to
+ # depend on '.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # Using Import Files as archive members, it is possible to support
+ # filename-based versioning of shared library archives on AIX. While
+ # this would work for both with and without runtime linking, it will
+ # prevent static linking of such archives. So we do filename-based
+ # shared library versioning with .so extension only, which is used
+ # when both runtime linking and shared linking is enabled.
+ # Unfortunately, runtime linking may impact performance, so we do
+ # not want this to be the default eventually. Also, we use the
+ # versioned .so libs for executables only if there is the -brtl
+ # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+ # To allow for filename-based versioning support, we need to create
+ # libNAME.so.V as an archive file, containing:
+ # *) an Import File, referring to the versioned filename of the
+ # archive as well as the shared archive member, telling the
+ # bitwidth (32 or 64) of that shared object, and providing the
+ # list of exported symbols of that shared object, eventually
+ # decorated with the 'weak' keyword
+ # *) the shared object with the F_LOADONLY flag set, to really avoid
+ # it being seen by the linker.
+ # At run time we better use the real file rather than another symlink,
+ # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+ case $with_aix_soname,$aix_use_runtimelinking in
+ # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ aix,yes) # traditional libtool
+ dynamic_linker='AIX unversionable lib.so'
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ ;;
+ aix,no) # traditional AIX only
+ dynamic_linker='AIX lib.a(lib.so.V)'
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='$libname$release.a $libname.a'
+ soname_spec='$libname$release$shared_ext$major'
+ ;;
+ svr4,*) # full svr4 only
+ dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)"
+ library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+ # We do not specify a path in Import Files, so LIBPATH fires.
+ shlibpath_overrides_runpath=yes
+ ;;
+ *,yes) # both, prefer svr4
+ dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)"
+ library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+ # unpreferred sharedlib libNAME.a needs extra handling
+ postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+ postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+ # We do not specify a path in Import Files, so LIBPATH fires.
+ shlibpath_overrides_runpath=yes
+ ;;
+ *,no) # both, prefer aix
+ dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)"
+ library_names_spec='$libname$release.a $libname.a'
+ soname_spec='$libname$release$shared_ext$major'
+ # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+ postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+ postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+ ;;
+ esac
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='$libname$shared_ext'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[45]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+ version_type=windows
+ shrext_cmds=.dll
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$cc_basename in
+ yes,*)
+ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \$file`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
+ ;;
+ mingw* | cegcc*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ ;;
+
+ *,cl*)
+ # Native MSVC
+ libname_spec='$name'
+ soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+ library_names_spec='$libname.dll.lib'
+
+ case $build_os in
+ mingw*)
+ sys_lib_search_path_spec=
+ lt_save_ifs=$IFS
+ IFS=';'
+ for lt_path in $LIB
+ do
+ IFS=$lt_save_ifs
+ # Let DOS variable expansion print the short 8.3 style file name.
+ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+ done
+ IFS=$lt_save_ifs
+ # Convert to MSYS style.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+ ;;
+ cygwin*)
+ # Convert to unix form, then to dos form, then back to unix form
+ # but this time dos style (no spaces!) so that the unix form looks
+ # like /cygdrive/c/PROGRA~1:/cygdr...
+ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ *)
+ sys_lib_search_path_spec=$LIB
+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+ # It is most probably a Windows format PATH.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # FIXME: find the short name or the path components, as spaces are
+ # common. (e.g. "Program Files" -> "PROGRA~1")
+ ;;
+ esac
+
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \$file`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
+ # Assume MSVC wrapper
+ library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
+ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+ soname_spec='$libname$release$major$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+haiku*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ dynamic_linker="$host_os runtime_loader"
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ if test 32 = "$HPUX_IA64_MODE"; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ sys_lib_dlsearch_path_spec=/usr/lib/hpux32
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ sys_lib_dlsearch_path_spec=/usr/lib/hpux64
+ fi
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+ postinstall_cmds='chmod 555 $lib'
+ # or fails outright, so override atomically:
+ install_override_mode=555
+ ;;
+
+interix[3-9]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test yes = "$lt_cv_prog_gnu_ld"; then
+ version_type=linux # correct to gnu/linux during the next big refactor
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='$libname$release$shared_ext$major'
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+ sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+linux*android*)
+ version_type=none # Android doesn't support versioned libraries.
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext'
+ soname_spec='$libname$release$shared_ext'
+ finish_cmds=
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ dynamic_linker='Android linker'
+ # Don't embed -rpath directories since the linker doesn't support them.
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+
+ # Some binutils ld are patched to set DT_RUNPATH
+ if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_shlibpath_overrides_runpath=no
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+ lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+fi
+
+ shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Ideally, we could use ldconfig to report *all* directores which are
+ # searched for libraries, however this is still not possible. Aside from not
+ # being certain /sbin/ldconfig is available, command
+ # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+ # even though it is searched at run-time. Try to do the best guess by
+ # appending ld.so.conf contents (and includes) to the search path.
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd* | bitrig*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec=/usr/lib
+ need_lib_prefix=no
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+ need_version=no
+ else
+ need_version=yes
+ fi
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+os2*)
+ libname_spec='$name'
+ version_type=windows
+ shrext_cmds=.dll
+ need_version=no
+ need_lib_prefix=no
+ # OS/2 can only load a DLL with a base name of 8 characters or less.
+ soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+ v=$($ECHO $release$versuffix | tr -d .-);
+ n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+ $ECHO $n$v`$shared_ext'
+ library_names_spec='${libname}_dll.$libext'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=BEGINLIBPATH
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ postinstall_cmds='base_file=`basename \$file`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='$libname$release$shared_ext$major'
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test yes = "$with_gnu_ld"; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec; then
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+ soname_spec='$libname$shared_ext.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=sco
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test yes = "$with_gnu_ld"; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test no = "$dynamic_linker" && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test yes = "$GCC"; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+ sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
+fi
+
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+ sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
+fi
+
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+ test -n "$runpath_var" ||
+ test yes = "$hardcode_automatic"; then
+
+ # We can hardcode non-existent directories.
+ if test no != "$hardcode_direct" &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" &&
+ test no != "$hardcode_minus_L"; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
+
+if test relink = "$hardcode_action" ||
+ test yes = "$inherit_rpath"; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test yes = "$shlibpath_overrides_runpath" ||
+ test no = "$enable_shared"; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+
+
+
+
+
+ if test yes != "$enable_dlopen"; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen=load_add_on
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32* | cegcc*)
+ lt_cv_dlopen=LoadLibrary
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen=dlopen
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dl_dlopen=yes
+else
+ ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+ lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
+else
+
+ lt_cv_dlopen=dyld
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+
+fi
+
+ ;;
+
+ tpf*)
+ # Don't try to run any link tests for TPF. We know it's impossible
+ # because TPF is a cross-compiler, and we know how we open DSOs.
+ lt_cv_dlopen=dlopen
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=no
+ ;;
+
+ *)
+ ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = xyes; then :
+ lt_cv_dlopen=shl_load
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if ${ac_cv_lib_dld_shl_load+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+int
+main ()
+{
+return shl_load ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dld_shl_load=yes
+else
+ ac_cv_lib_dld_shl_load=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
+ lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld
+else
+ ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = xyes; then :
+ lt_cv_dlopen=dlopen
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dl_dlopen=yes
+else
+ ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+ lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if ${ac_cv_lib_svld_dlopen+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_svld_dlopen=yes
+else
+ ac_cv_lib_svld_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
+ lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if ${ac_cv_lib_dld_dld_link+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link ();
+int
+main ()
+{
+return dld_link ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dld_dld_link=yes
+else
+ ac_cv_lib_dld_dld_link=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
+ lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+ ;;
+ esac
+
+ if test no = "$lt_cv_dlopen"; then
+ enable_dlopen=no
+ else
+ enable_dlopen=yes
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS=$CPPFLAGS
+ test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS=$LDFLAGS
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS=$LIBS
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test yes = "$cross_compiling"; then :
+ lt_cv_dlopen_self=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+/* When -fvisibility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}
+_LT_EOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+ if test yes = "$lt_cv_dlopen_self"; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self_static+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test yes = "$cross_compiling"; then :
+ lt_cv_dlopen_self_static=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+/* When -fvisibility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}
+_LT_EOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+ fi
+
+ CPPFLAGS=$save_CPPFLAGS
+ LDFLAGS=$save_LDFLAGS
+ LIBS=$save_LIBS
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP"; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+ # Report what library types will actually be built
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+ test no = "$can_build_shared" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test yes = "$enable_shared" && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix[4-9]*)
+ if test ia64 != "$host_cpu"; then
+ case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+ yes,aix,yes) ;; # shared object as lib.so file only
+ yes,svr4,*) ;; # shared object as lib.so archive member only
+ yes,*) enable_static=no ;; # shared object in lib.a archive as well
+ esac
+ fi
+ ;;
+ esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+ # Make sure either enable_shared or enable_static is yes.
+ test yes = "$enable_shared" || enable_static=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC=$lt_save_CC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+
+ac_header_dirent=no
+for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
+ as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5
+$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; }
+if eval \${$as_ac_Header+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <$ac_hdr>
+
+int
+main ()
+{
+if ((DIR *) 0)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$as_ac_Header=yes"
+else
+ eval "$as_ac_Header=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_ac_Header
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
+_ACEOF
+
+ac_header_dirent=$ac_hdr; break
+fi
+
+done
+# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
+if test $ac_header_dirent = dirent.h; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
+$as_echo_n "checking for library containing opendir... " >&6; }
+if ${ac_cv_search_opendir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char opendir ();
+int
+main ()
+{
+return opendir ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' dir; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_opendir=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_opendir+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search_opendir+:} false; then :
+
+else
+ ac_cv_search_opendir=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
+$as_echo "$ac_cv_search_opendir" >&6; }
+ac_res=$ac_cv_search_opendir
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
+$as_echo_n "checking for library containing opendir... " >&6; }
+if ${ac_cv_search_opendir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char opendir ();
+int
+main ()
+{
+return opendir ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' x; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_opendir=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_opendir+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search_opendir+:} false; then :
+
+else
+ ac_cv_search_opendir=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
+$as_echo "$ac_cv_search_opendir" >&6; }
+ac_res=$ac_cv_search_opendir
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_stdc=yes
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then :
+ :
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ return 2;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5
+$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; }
+if ${ac_cv_header_sys_wait_h+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <sys/wait.h>
+#ifndef WEXITSTATUS
+# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8)
+#endif
+#ifndef WIFEXITED
+# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
+#endif
+
+int
+main ()
+{
+ int s;
+ wait (&s);
+ s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_sys_wait_h=yes
+else
+ ac_cv_header_sys_wait_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5
+$as_echo "$ac_cv_header_sys_wait_h" >&6; }
+if test $ac_cv_header_sys_wait_h = yes; then
+
+$as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5
+$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; }
+if ${ac_cv_header_stdbool_h+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <stdbool.h>
+ #ifndef bool
+ "error: bool is not defined"
+ #endif
+ #ifndef false
+ "error: false is not defined"
+ #endif
+ #if false
+ "error: false is not 0"
+ #endif
+ #ifndef true
+ "error: true is not defined"
+ #endif
+ #if true != 1
+ "error: true is not 1"
+ #endif
+ #ifndef __bool_true_false_are_defined
+ "error: __bool_true_false_are_defined is not defined"
+ #endif
+
+ struct s { _Bool s: 1; _Bool t; } s;
+
+ char a[true == 1 ? 1 : -1];
+ char b[false == 0 ? 1 : -1];
+ char c[__bool_true_false_are_defined == 1 ? 1 : -1];
+ char d[(bool) 0.5 == true ? 1 : -1];
+ /* See body of main program for 'e'. */
+ char f[(_Bool) 0.0 == false ? 1 : -1];
+ char g[true];
+ char h[sizeof (_Bool)];
+ char i[sizeof s.t];
+ enum { j = false, k = true, l = false * true, m = true * 256 };
+ /* The following fails for
+ HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
+ _Bool n[m];
+ char o[sizeof n == m * sizeof n[0] ? 1 : -1];
+ char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
+ /* Catch a bug in an HP-UX C compiler. See
+ http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
+ http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
+ */
+ _Bool q = true;
+ _Bool *pq = &q;
+
+int
+main ()
+{
+
+ bool e = &s;
+ *pq |= q;
+ *pq |= ! q;
+ /* Refer to every declared value, to avoid compiler optimizations. */
+ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
+ + !m + !n + !o + !p + !q + !pq);
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_stdbool_h=yes
+else
+ ac_cv_header_stdbool_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5
+$as_echo "$ac_cv_header_stdbool_h" >&6; }
+ ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default"
+if test "x$ac_cv_type__Bool" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE__BOOL 1
+_ACEOF
+
+
+fi
+
+
+if test $ac_cv_header_stdbool_h = yes; then
+
+$as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h
+
+fi
+
+
+for ac_header in 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/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
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+ac_fn_c_check_header_mongrel "$LINENO" "shadow.h" "ac_cv_header_shadow_h" "$ac_includes_default"
+if test "x$ac_cv_header_shadow_h" = xyes; then :
+
+else
+ as_fn_error $? "You need a libc with shadow.h" "$LINENO" 5
+fi
+
+
+
+for ac_func in l64a fchmod fchown fsync futimes getgroups gethostname getspnam \
+ gettimeofday getusershell getutent initgroups lchown lckpwdf lstat \
+ lutimes memcpy memset setgroups sigaction strchr updwtmp updwtmpx innetgr \
+ getpwnam_r getpwuid_r getgrnam_r getgrgid_r getspnam_r getaddrinfo \
+ ruserok
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+# Check whether --enable-largefile was given.
+if test "${enable_largefile+set}" = set; then :
+ enableval=$enable_largefile;
+fi
+
+if test "$enable_largefile" != no; then
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
+$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
+if ${ac_cv_sys_largefile_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_sys_largefile_CC=no
+ if test "$GCC" != yes; then
+ ac_save_CC=$CC
+ while :; do
+ # IRIX 6.2 and later do not support large files by default,
+ # so use the C compiler's -n32 option if that helps.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ if ac_fn_c_try_compile "$LINENO"; then :
+ break
+fi
+rm -f core conftest.err conftest.$ac_objext
+ CC="$CC -n32"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_largefile_CC=' -n32'; break
+fi
+rm -f core conftest.err conftest.$ac_objext
+ break
+ done
+ CC=$ac_save_CC
+ rm -f conftest.$ac_ext
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
+$as_echo "$ac_cv_sys_largefile_CC" >&6; }
+ if test "$ac_cv_sys_largefile_CC" != no; then
+ CC=$CC$ac_cv_sys_largefile_CC
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
+if ${ac_cv_sys_file_offset_bits+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_file_offset_bits=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#define _FILE_OFFSET_BITS 64
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_file_offset_bits=64; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cv_sys_file_offset_bits=unknown
+ break
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
+$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
+case $ac_cv_sys_file_offset_bits in #(
+ no | unknown) ;;
+ *)
+cat >>confdefs.h <<_ACEOF
+#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
+_ACEOF
+;;
+esac
+rm -rf conftest*
+ if test $ac_cv_sys_file_offset_bits = unknown; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
+$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
+if ${ac_cv_sys_large_files+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_large_files=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#define _LARGE_FILES 1
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_large_files=1; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cv_sys_large_files=unknown
+ break
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
+$as_echo "$ac_cv_sys_large_files" >&6; }
+case $ac_cv_sys_large_files in #(
+ no | unknown) ;;
+ *)
+cat >>confdefs.h <<_ACEOF
+#define _LARGE_FILES $ac_cv_sys_large_files
+_ACEOF
+;;
+esac
+rm -rf conftest*
+ fi
+
+
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
+if ${ac_cv_c_const+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+#ifndef __cplusplus
+ /* Ultrix mips cc rejects this sort of thing. */
+ typedef int charset[2];
+ const charset cs = { 0, 0 };
+ /* SunOS 4.1.1 cc rejects this. */
+ char const *const *pcpcc;
+ char **ppc;
+ /* NEC SVR4.0.2 mips cc rejects this. */
+ struct point {int x, y;};
+ static struct point const zero = {0,0};
+ /* AIX XL C 1.02.0.0 rejects this.
+ It does not let you subtract one const X* pointer from another in
+ an arm of an if-expression whose if-part is not a constant
+ expression */
+ const char *g = "string";
+ pcpcc = &g + (g ? g-g : 0);
+ /* HPUX 7.0 cc rejects these. */
+ ++pcpcc;
+ ppc = (char**) pcpcc;
+ pcpcc = (char const *const *) ppc;
+ { /* SCO 3.2v4 cc rejects this sort of thing. */
+ char tx;
+ char *t = &tx;
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+ *t++ = 0;
+ if (s) return 0;
+ }
+ { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
+ int x[] = {25, 17};
+ const int *foo = &x[0];
+ ++foo;
+ }
+ { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+ typedef const int *iptr;
+ iptr p = 0;
+ ++p;
+ }
+ { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying
+ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+ struct s { int j; const int *ap[3]; } bx;
+ struct s *b = &bx; b->j = 5;
+ }
+ { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+ const int foo = 10;
+ if (!foo) return 0;
+ }
+ return !cs[0] && !zero.x;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_c_const=yes
+else
+ ac_cv_c_const=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
+$as_echo "$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+$as_echo "#define const /**/" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5
+$as_echo_n "checking for uid_t in sys/types.h... " >&6; }
+if ${ac_cv_type_uid_t+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "uid_t" >/dev/null 2>&1; then :
+ ac_cv_type_uid_t=yes
+else
+ ac_cv_type_uid_t=no
+fi
+rm -f conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5
+$as_echo "$ac_cv_type_uid_t" >&6; }
+if test $ac_cv_type_uid_t = no; then
+
+$as_echo "#define uid_t int" >>confdefs.h
+
+
+$as_echo "#define gid_t int" >>confdefs.h
+
+fi
+
+ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default"
+if test "x$ac_cv_type_off_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define off_t long int
+_ACEOF
+
+fi
+
+ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default"
+if test "x$ac_cv_type_pid_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define pid_t int
+_ACEOF
+
+fi
+
+ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default"
+if test "x$ac_cv_type_mode_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define mode_t int
+_ACEOF
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat file-mode macros are broken" >&5
+$as_echo_n "checking whether stat file-mode macros are broken... " >&6; }
+if ${ac_cv_header_stat_broken+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#if defined S_ISBLK && defined S_IFDIR
+extern char c1[S_ISBLK (S_IFDIR) ? -1 : 1];
+#endif
+
+#if defined S_ISBLK && defined S_IFCHR
+extern char c2[S_ISBLK (S_IFCHR) ? -1 : 1];
+#endif
+
+#if defined S_ISLNK && defined S_IFREG
+extern char c3[S_ISLNK (S_IFREG) ? -1 : 1];
+#endif
+
+#if defined S_ISSOCK && defined S_IFREG
+extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1];
+#endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_stat_broken=no
+else
+ ac_cv_header_stat_broken=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stat_broken" >&5
+$as_echo "$ac_cv_header_stat_broken" >&6; }
+if test $ac_cv_header_stat_broken = yes; then
+
+$as_echo "#define STAT_MACROS_BROKEN 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct stat" "st_rdev" "ac_cv_member_struct_stat_st_rdev" "$ac_includes_default"
+if test "x$ac_cv_member_struct_stat_st_rdev" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_RDEV 1
+_ACEOF
+
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct stat" "st_atim" "ac_cv_member_struct_stat_st_atim" "$ac_includes_default"
+if test "x$ac_cv_member_struct_stat_st_atim" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_ATIM 1
+_ACEOF
+
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct stat" "st_atimensec" "ac_cv_member_struct_stat_st_atimensec" "$ac_includes_default"
+if test "x$ac_cv_member_struct_stat_st_atimensec" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_ATIMENSEC 1
+_ACEOF
+
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct stat" "st_mtim" "ac_cv_member_struct_stat_st_mtim" "$ac_includes_default"
+if test "x$ac_cv_member_struct_stat_st_mtim" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_MTIM 1
+_ACEOF
+
+
+fi
+
+ac_fn_c_check_member "$LINENO" "struct stat" "st_mtimensec" "ac_cv_member_struct_stat_st_mtimensec" "$ac_includes_default"
+if test "x$ac_cv_member_struct_stat_st_mtimensec" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_MTIMENSEC 1
+_ACEOF
+
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
+$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
+if ${ac_cv_header_time+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+
+int
+main ()
+{
+if ((struct tm *) 0)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_time=yes
+else
+ ac_cv_header_time=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5
+$as_echo "$ac_cv_header_time" >&6; }
+if test $ac_cv_header_time = yes; then
+
+$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5
+$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; }
+if ${ac_cv_struct_tm+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <time.h>
+
+int
+main ()
+{
+struct tm tm;
+ int *p = &tm.tm_sec;
+ return !p;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_struct_tm=time.h
+else
+ ac_cv_struct_tm=sys/time.h
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5
+$as_echo "$ac_cv_struct_tm" >&6; }
+if test $ac_cv_struct_tm = sys/time.h; then
+
+$as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h
+
+fi
+
+
+ac_fn_c_check_member "$LINENO" "struct utmp" "ut_type" "ac_cv_member_struct_utmp_ut_type" "#include <utmp.h>
+"
+if test "x$ac_cv_member_struct_utmp_ut_type" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMP_UT_TYPE 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct utmp" "ut_id" "ac_cv_member_struct_utmp_ut_id" "#include <utmp.h>
+"
+if test "x$ac_cv_member_struct_utmp_ut_id" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMP_UT_ID 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct utmp" "ut_name" "ac_cv_member_struct_utmp_ut_name" "#include <utmp.h>
+"
+if test "x$ac_cv_member_struct_utmp_ut_name" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMP_UT_NAME 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct utmp" "ut_user" "ac_cv_member_struct_utmp_ut_user" "#include <utmp.h>
+"
+if test "x$ac_cv_member_struct_utmp_ut_user" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMP_UT_USER 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct utmp" "ut_host" "ac_cv_member_struct_utmp_ut_host" "#include <utmp.h>
+"
+if test "x$ac_cv_member_struct_utmp_ut_host" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMP_UT_HOST 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct utmp" "ut_syslen" "ac_cv_member_struct_utmp_ut_syslen" "#include <utmp.h>
+"
+if test "x$ac_cv_member_struct_utmp_ut_syslen" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMP_UT_SYSLEN 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct utmp" "ut_addr" "ac_cv_member_struct_utmp_ut_addr" "#include <utmp.h>
+"
+if test "x$ac_cv_member_struct_utmp_ut_addr" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMP_UT_ADDR 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct utmp" "ut_addr_v6" "ac_cv_member_struct_utmp_ut_addr_v6" "#include <utmp.h>
+"
+if test "x$ac_cv_member_struct_utmp_ut_addr_v6" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMP_UT_ADDR_V6 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct utmp" "ut_time" "ac_cv_member_struct_utmp_ut_time" "#include <utmp.h>
+"
+if test "x$ac_cv_member_struct_utmp_ut_time" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMP_UT_TIME 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct utmp" "ut_xtime" "ac_cv_member_struct_utmp_ut_xtime" "#include <utmp.h>
+"
+if test "x$ac_cv_member_struct_utmp_ut_xtime" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMP_UT_XTIME 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct utmp" "ut_tv" "ac_cv_member_struct_utmp_ut_tv" "#include <utmp.h>
+"
+if test "x$ac_cv_member_struct_utmp_ut_tv" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMP_UT_TV 1
+_ACEOF
+
+
+fi
+
+
+ac_fn_c_check_member "$LINENO" "struct utmpx" "ut_name" "ac_cv_member_struct_utmpx_ut_name" "#include <utmpx.h>
+"
+if test "x$ac_cv_member_struct_utmpx_ut_name" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMPX_UT_NAME 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct utmpx" "ut_host" "ac_cv_member_struct_utmpx_ut_host" "#include <utmpx.h>
+"
+if test "x$ac_cv_member_struct_utmpx_ut_host" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMPX_UT_HOST 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct utmpx" "ut_syslen" "ac_cv_member_struct_utmpx_ut_syslen" "#include <utmpx.h>
+"
+if test "x$ac_cv_member_struct_utmpx_ut_syslen" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMPX_UT_SYSLEN 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct utmpx" "ut_addr" "ac_cv_member_struct_utmpx_ut_addr" "#include <utmpx.h>
+"
+if test "x$ac_cv_member_struct_utmpx_ut_addr" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMPX_UT_ADDR 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct utmpx" "ut_addr_v6" "ac_cv_member_struct_utmpx_ut_addr_v6" "#include <utmpx.h>
+"
+if test "x$ac_cv_member_struct_utmpx_ut_addr_v6" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMPX_UT_ADDR_V6 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct utmpx" "ut_time" "ac_cv_member_struct_utmpx_ut_time" "#include <utmpx.h>
+"
+if test "x$ac_cv_member_struct_utmpx_ut_time" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMPX_UT_TIME 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct utmpx" "ut_xtime" "ac_cv_member_struct_utmpx_ut_xtime" "#include <utmpx.h>
+"
+if test "x$ac_cv_member_struct_utmpx_ut_xtime" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMPX_UT_XTIME 1
+_ACEOF
+
+
+fi
+
+
+if test "$ac_cv_header_lastlog_h" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ll_host in struct lastlog" >&5
+$as_echo_n "checking for ll_host in struct lastlog... " >&6; }
+if ${ac_cv_struct_lastlog_ll_host+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <lastlog.h>
+int
+main ()
+{
+struct lastlog ll; char *cp = ll.ll_host;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_struct_lastlog_ll_host=yes
+else
+ ac_cv_struct_lastlog_ll_host=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_lastlog_ll_host" >&5
+$as_echo "$ac_cv_struct_lastlog_ll_host" >&6; }
+
+ if test "$ac_cv_struct_lastlog_ll_host" = "yes"; then
+
+$as_echo "#define HAVE_LL_HOST 1" >>confdefs.h
+
+ fi
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking type of array argument to getgroups" >&5
+$as_echo_n "checking type of array argument to getgroups... " >&6; }
+if ${ac_cv_type_getgroups+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ ac_cv_type_getgroups=cross
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Thanks to Mike Rendell for this test. */
+$ac_includes_default
+#define NGID 256
+#undef MAX
+#define MAX(x, y) ((x) > (y) ? (x) : (y))
+
+int
+main ()
+{
+ gid_t gidset[NGID];
+ int i, n;
+ union { gid_t gval; long int lval; } val;
+
+ val.lval = -1;
+ for (i = 0; i < NGID; i++)
+ gidset[i] = val.gval;
+ n = getgroups (sizeof (gidset) / MAX (sizeof (int), sizeof (gid_t)) - 1,
+ gidset);
+ /* Exit non-zero if getgroups seems to require an array of ints. This
+ happens when gid_t is short int but getgroups modifies an array
+ of ints. */
+ return n > 0 && gidset[n] != val.gval;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ ac_cv_type_getgroups=gid_t
+else
+ ac_cv_type_getgroups=int
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+if test $ac_cv_type_getgroups = cross; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <unistd.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "getgroups.*int.*gid_t" >/dev/null 2>&1; then :
+ ac_cv_type_getgroups=gid_t
+else
+ ac_cv_type_getgroups=int
+fi
+rm -f conftest*
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_getgroups" >&5
+$as_echo "$ac_cv_type_getgroups" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define GETGROUPS_T $ac_cv_type_getgroups
+_ACEOF
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5
+$as_echo_n "checking return type of signal handlers... " >&6; }
+if ${ac_cv_type_signal+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <signal.h>
+
+int
+main ()
+{
+return *(signal (0, 0)) (0) == 1;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_type_signal=int
+else
+ ac_cv_type_signal=void
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5
+$as_echo "$ac_cv_type_signal" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define RETSIGTYPE $ac_cv_type_signal
+_ACEOF
+
+
+
+
+
+ for ac_header in $ac_header_list
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether utime accepts a null argument" >&5
+$as_echo_n "checking whether utime accepts a null argument... " >&6; }
+if ${ac_cv_func_utime_null+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ rm -f conftest.data; >conftest.data
+# Sequent interprets utime(file, 0) to mean use start of epoch. Wrong.
+if test "$cross_compiling" = yes; then :
+ ac_cv_func_utime_null='guessing yes'
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_includes_default
+ #ifdef HAVE_UTIME_H
+ # include <utime.h>
+ #endif
+int
+main ()
+{
+struct stat s, t;
+ return ! (stat ("conftest.data", &s) == 0
+ && utime ("conftest.data", 0) == 0
+ && stat ("conftest.data", &t) == 0
+ && t.st_mtime >= s.st_mtime
+ && t.st_mtime - s.st_mtime < 120);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ ac_cv_func_utime_null=yes
+else
+ ac_cv_func_utime_null=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_utime_null" >&5
+$as_echo "$ac_cv_func_utime_null" >&6; }
+if test "x$ac_cv_func_utime_null" != xno; then
+ ac_cv_func_utime_null=yes
+
+$as_echo "#define HAVE_UTIME_NULL 1" >>confdefs.h
+
+fi
+rm -f conftest.data
+
+for ac_func in strftime
+do :
+ ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime"
+if test "x$ac_cv_func_strftime" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_STRFTIME 1
+_ACEOF
+
+else
+ # strftime is in -lintl on SCO UNIX.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for strftime in -lintl" >&5
+$as_echo_n "checking for strftime in -lintl... " >&6; }
+if ${ac_cv_lib_intl_strftime+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lintl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char strftime ();
+int
+main ()
+{
+return strftime ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_intl_strftime=yes
+else
+ ac_cv_lib_intl_strftime=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_strftime" >&5
+$as_echo "$ac_cv_lib_intl_strftime" >&6; }
+if test "x$ac_cv_lib_intl_strftime" = xyes; then :
+ $as_echo "#define HAVE_STRFTIME 1" >>confdefs.h
+
+LIBS="-lintl $LIBS"
+fi
+
+fi
+done
+
+ac_fn_c_check_func "$LINENO" "mkdir" "ac_cv_func_mkdir"
+if test "x$ac_cv_func_mkdir" = xyes; then :
+ $as_echo "#define HAVE_MKDIR 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" mkdir.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS mkdir.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "putgrent" "ac_cv_func_putgrent"
+if test "x$ac_cv_func_putgrent" = xyes; then :
+ $as_echo "#define HAVE_PUTGRENT 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" putgrent.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS putgrent.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "putpwent" "ac_cv_func_putpwent"
+if test "x$ac_cv_func_putpwent" = xyes; then :
+ $as_echo "#define HAVE_PUTPWENT 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" putpwent.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS putpwent.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "putspent" "ac_cv_func_putspent"
+if test "x$ac_cv_func_putspent" = xyes; then :
+ $as_echo "#define HAVE_PUTSPENT 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" putspent.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS putspent.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "rename" "ac_cv_func_rename"
+if test "x$ac_cv_func_rename" = xyes; then :
+ $as_echo "#define HAVE_RENAME 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" rename.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS rename.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "rmdir" "ac_cv_func_rmdir"
+if test "x$ac_cv_func_rmdir" = xyes; then :
+ $as_echo "#define HAVE_RMDIR 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" rmdir.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS rmdir.$ac_objext"
+ ;;
+esac
+
+fi
+
+
+ac_fn_c_check_func "$LINENO" "sgetgrent" "ac_cv_func_sgetgrent"
+if test "x$ac_cv_func_sgetgrent" = xyes; then :
+ $as_echo "#define HAVE_SGETGRENT 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" sgetgrent.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS sgetgrent.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "sgetpwent" "ac_cv_func_sgetpwent"
+if test "x$ac_cv_func_sgetpwent" = xyes; then :
+ $as_echo "#define HAVE_SGETPWENT 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" sgetpwent.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS sgetpwent.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "sgetspent" "ac_cv_func_sgetspent"
+if test "x$ac_cv_func_sgetspent" = xyes; then :
+ $as_echo "#define HAVE_SGETSPENT 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" sgetspent.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS sgetspent.$ac_objext"
+ ;;
+esac
+
+fi
+
+
+ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
+if test "x$ac_cv_func_snprintf" = xyes; then :
+ $as_echo "#define HAVE_SNPRINTF 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" snprintf.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS snprintf.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "strcasecmp" "ac_cv_func_strcasecmp"
+if test "x$ac_cv_func_strcasecmp" = xyes; then :
+ $as_echo "#define HAVE_STRCASECMP 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" strcasecmp.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS strcasecmp.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup"
+if test "x$ac_cv_func_strdup" = xyes; then :
+ $as_echo "#define HAVE_STRDUP 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" strdup.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS strdup.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror"
+if test "x$ac_cv_func_strerror" = xyes; then :
+ $as_echo "#define HAVE_STRERROR 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" strerror.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS strerror.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "strstr" "ac_cv_func_strstr"
+if test "x$ac_cv_func_strstr" = xyes; then :
+ $as_echo "#define HAVE_STRSTR 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" strstr.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS strstr.$ac_objext"
+ ;;
+esac
+
+fi
+
+
+
+ac_fn_c_check_func "$LINENO" "setpgrp" "ac_cv_func_setpgrp"
+if test "x$ac_cv_func_setpgrp" = xyes; then :
+
+fi
+
+ac_fn_c_check_func "$LINENO" "secure_getenv" "ac_cv_func_secure_getenv"
+if test "x$ac_cv_func_secure_getenv" = xyes; then :
+
+$as_echo "#define HAS_SECURE_GETENV 1" >>confdefs.h
+
+fi
+
+
+if test "$ac_cv_header_shadow_h" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working shadow group support" >&5
+$as_echo_n "checking for working shadow group support... " >&6; }
+if ${ac_cv_libc_shadowgrp+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ ac_cv_libc_shadowgrp=no
+
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <shadow.h>
+ main()
+ {
+ struct sgrp *sg = sgetsgent("test:x::");
+ /* NYS libc on Red Hat 3.0.3 has broken shadow group support */
+ return !sg || !sg->sg_adm || !sg->sg_mem;
+ }
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ ac_cv_libc_shadowgrp=yes
+else
+ ac_cv_libc_shadowgrp=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libc_shadowgrp" >&5
+$as_echo "$ac_cv_libc_shadowgrp" >&6; }
+
+ if test "$ac_cv_libc_shadowgrp" = "yes"; then
+
+$as_echo "#define HAVE_SHADOWGRP 1" >>confdefs.h
+
+ fi
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking location of shared mail directory" >&5
+$as_echo_n "checking location of shared mail directory... " >&6; }
+if ${shadow_cv_maildir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ for shadow_cv_maildir in /var/mail /var/spool/mail /usr/spool/mail /usr/mail none; do
+ if test -d $shadow_cv_maildir; then
+ break
+ fi
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $shadow_cv_maildir" >&5
+$as_echo "$shadow_cv_maildir" >&6; }
+if test $shadow_cv_maildir != none; then
+
+cat >>confdefs.h <<_ACEOF
+#define MAIL_SPOOL_DIR "$shadow_cv_maildir"
+_ACEOF
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking location of user mail file" >&5
+$as_echo_n "checking location of user mail file... " >&6; }
+if ${shadow_cv_mailfile+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ for shadow_cv_mailfile in Mailbox mailbox Mail mail .mail none; do
+ if test -f $HOME/$shadow_cv_mailfile; then
+ break
+ fi
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $shadow_cv_mailfile" >&5
+$as_echo "$shadow_cv_mailfile" >&6; }
+if test $shadow_cv_mailfile != none; then
+
+cat >>confdefs.h <<_ACEOF
+#define MAIL_SPOOL_FILE "$shadow_cv_mailfile"
+_ACEOF
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking location of utmp" >&5
+$as_echo_n "checking location of utmp... " >&6; }
+if ${shadow_cv_utmpdir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ for shadow_cv_utmpdir in /var/run /var/adm /usr/adm /etc none; do
+ if test -f $shadow_cv_utmpdir/utmp; then
+ break
+ fi
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $shadow_cv_utmpdir" >&5
+$as_echo "$shadow_cv_utmpdir" >&6; }
+if test "$shadow_cv_utmpdir" = "none"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: utmp file not found" >&5
+$as_echo "$as_me: WARNING: utmp file not found" >&2;}
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define _UTMP_FILE "$shadow_cv_utmpdir/utmp"
+_ACEOF
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking location of faillog/lastlog/wtmp" >&5
+$as_echo_n "checking location of faillog/lastlog/wtmp... " >&6; }
+if ${shadow_cv_logdir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ for shadow_cv_logdir in /var/log /var/adm /usr/adm /etc; do
+ if test -d $shadow_cv_logdir; then
+ break
+ fi
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $shadow_cv_logdir" >&5
+$as_echo "$shadow_cv_logdir" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define _WTMP_FILE "$shadow_cv_logdir/wtmp"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define LASTLOG_FILE "$shadow_cv_logdir/lastlog"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define FAILLOG_FILE "$shadow_cv_logdir/faillog"
+_ACEOF
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking location of the passwd program" >&5
+$as_echo_n "checking location of the passwd program... " >&6; }
+if ${shadow_cv_passwd_dir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -f /usr/bin/passwd; then
+ shadow_cv_passwd_dir=/usr/bin
+else
+ shadow_cv_passwd_dir=/bin
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $shadow_cv_passwd_dir" >&5
+$as_echo "$shadow_cv_passwd_dir" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define PASSWD_PROGRAM "$shadow_cv_passwd_dir/passwd"
+_ACEOF
+
+
+
+$as_echo "#define USE_SYSLOG 1" >>confdefs.h
+
+if test "$ac_cv_func_ruserok" = "yes"; then
+
+$as_echo "#define RLOGIN 1" >>confdefs.h
+
+
+$as_echo "#define RUSEROK 0" >>confdefs.h
+
+fi
+
+# Check whether --enable-shadowgrp was given.
+if test "${enable_shadowgrp+set}" = set; then :
+ enableval=$enable_shadowgrp; case "${enableval}" in
+ yes) enable_shadowgrp="yes" ;;
+ no) enable_shadowgrp="no" ;;
+ *) as_fn_error $? "bad value ${enableval} for --enable-shadowgrp" "$LINENO" 5 ;;
+ esac
+else
+ enable_shadowgrp="yes"
+
+fi
+
+
+# Check whether --enable-man was given.
+if test "${enable_man+set}" = set; then :
+ enableval=$enable_man; enable_man="${enableval}"
+else
+ enable_man="no"
+
+fi
+
+
+# Check whether --enable-account-tools-setuid was given.
+if test "${enable_account_tools_setuid+set}" = set; then :
+ enableval=$enable_account_tools_setuid; case "${enableval}" in
+ yes) enable_acct_tools_setuid="yes" ;;
+ no) enable_acct_tools_setuid="no" ;;
+ *) as_fn_error $? "bad value ${enableval} for --enable-account-tools-setuid" "$LINENO" 5
+ ;;
+ esac
+else
+ enable_acct_tools_setuid="no"
+
+fi
+
+
+# Check whether --enable-utmpx was given.
+if test "${enable_utmpx+set}" = set; then :
+ enableval=$enable_utmpx; case "${enableval}" in
+ yes) enable_utmpx="yes" ;;
+ no) enable_utmpx="no" ;;
+ *) as_fn_error $? "bad value ${enableval} for --enable-utmpx" "$LINENO" 5 ;;
+ esac
+else
+ enable_utmpx="no"
+
+fi
+
+
+# Check whether --enable-subordinate-ids was given.
+if test "${enable_subordinate_ids+set}" = set; then :
+ enableval=$enable_subordinate_ids; enable_subids="${enableval}"
+else
+ enable_subids="maybe"
+
+fi
+
+
+
+# Check whether --with-audit was given.
+if test "${with_audit+set}" = set; then :
+ withval=$with_audit; with_audit=$withval
+else
+ with_audit=maybe
+fi
+
+
+# Check whether --with-libpam was given.
+if test "${with_libpam+set}" = set; then :
+ withval=$with_libpam; with_libpam=$withval
+else
+ with_libpam=maybe
+fi
+
+
+# Check whether --with-btrfs was given.
+if test "${with_btrfs+set}" = set; then :
+ withval=$with_btrfs; with_btrfs=$withval
+else
+ with_btrfs=maybe
+fi
+
+
+# Check whether --with-selinux was given.
+if test "${with_selinux+set}" = set; then :
+ withval=$with_selinux; with_selinux=$withval
+else
+ with_selinux=maybe
+fi
+
+
+# Check whether --with-acl was given.
+if test "${with_acl+set}" = set; then :
+ withval=$with_acl; with_acl=$withval
+else
+ with_acl=maybe
+fi
+
+
+# Check whether --with-attr was given.
+if test "${with_attr+set}" = set; then :
+ withval=$with_attr; with_attr=$withval
+else
+ with_attr=maybe
+fi
+
+
+# Check whether --with-skey was given.
+if test "${with_skey+set}" = set; then :
+ withval=$with_skey; with_skey=$withval
+else
+ with_skey=no
+fi
+
+
+# Check whether --with-tcb was given.
+if test "${with_tcb+set}" = set; then :
+ withval=$with_tcb; with_tcb=$withval
+else
+ with_tcb=maybe
+fi
+
+
+# Check whether --with-libcrack was given.
+if test "${with_libcrack+set}" = set; then :
+ withval=$with_libcrack; with_libcrack=$withval
+else
+ with_libcrack=no
+fi
+
+
+# Check whether --with-sha-crypt was given.
+if test "${with_sha_crypt+set}" = set; then :
+ withval=$with_sha_crypt; with_sha_crypt=$withval
+else
+ with_sha_crypt=yes
+fi
+
+
+# Check whether --with-bcrypt was given.
+if test "${with_bcrypt+set}" = set; then :
+ withval=$with_bcrypt; with_bcrypt=$withval
+else
+ with_bcrypt=no
+fi
+
+
+# Check whether --with-nscd was given.
+if test "${with_nscd+set}" = set; then :
+ withval=$with_nscd; with_nscd=$withval
+else
+ with_nscd=yes
+fi
+
+
+# Check whether --with-sssd was given.
+if test "${with_sssd+set}" = set; then :
+ withval=$with_sssd; with_sssd=$withval
+else
+ with_sssd=yes
+fi
+
+
+# Check whether --with-group-name-max-length was given.
+if test "${with_group_name_max_length+set}" = set; then :
+ withval=$with_group_name_max_length; with_group_name_max_length=$withval
+else
+ with_group_name_max_length=yes
+fi
+
+
+# Check whether --with-su was given.
+if test "${with_su+set}" = set; then :
+ withval=$with_su; with_su=$withval
+else
+ with_su=yes
+fi
+
+
+if test "$with_group_name_max_length" = "no" ; then
+ with_group_name_max_length=0
+elif test "$with_group_name_max_length" = "yes" ; then
+ with_group_name_max_length=16
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define GROUP_NAME_MAX_LENGTH $with_group_name_max_length
+_ACEOF
+
+
+GROUP_NAME_MAX_LENGTH="$with_group_name_max_length"
+
+ if test "x$with_sha_crypt" = "xyes"; then
+ USE_SHA_CRYPT_TRUE=
+ USE_SHA_CRYPT_FALSE='#'
+else
+ USE_SHA_CRYPT_TRUE='#'
+ USE_SHA_CRYPT_FALSE=
+fi
+
+if test "$with_sha_crypt" = "yes"; then
+
+$as_echo "#define USE_SHA_CRYPT 1" >>confdefs.h
+
+fi
+
+ if test "x$with_bcrypt" = "xyes"; then
+ USE_BCRYPT_TRUE=
+ USE_BCRYPT_FALSE='#'
+else
+ USE_BCRYPT_TRUE='#'
+ USE_BCRYPT_FALSE=
+fi
+
+if test "$with_bcrypt" = "yes"; then
+
+$as_echo "#define USE_BCRYPT 1" >>confdefs.h
+
+fi
+
+if test "$with_nscd" = "yes"; then
+ ac_fn_c_check_func "$LINENO" "posix_spawn" "ac_cv_func_posix_spawn"
+if test "x$ac_cv_func_posix_spawn" = xyes; then :
+
+$as_echo "#define USE_NSCD 1" >>confdefs.h
+
+else
+ as_fn_error $? "posix_spawn is needed for nscd support" "$LINENO" 5
+fi
+
+fi
+
+if test "$with_sssd" = "yes"; then
+ ac_fn_c_check_func "$LINENO" "posix_spawn" "ac_cv_func_posix_spawn"
+if test "x$ac_cv_func_posix_spawn" = xyes; then :
+
+$as_echo "#define USE_SSSD 1" >>confdefs.h
+
+else
+ as_fn_error $? "posix_spawn is needed for sssd support" "$LINENO" 5
+fi
+
+fi
+
+if test "$with_su" != "no"; then :
+
+$as_echo "#define WITH_SU 1" >>confdefs.h
+]
+fi
+ if test "x$with_su" != "xno"; then
+ WITH_SU_TRUE=
+ WITH_SU_FALSE='#'
+else
+ WITH_SU_TRUE='#'
+ WITH_SU_FALSE=
+fi
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing inet_ntoa" >&5
+$as_echo_n "checking for library containing inet_ntoa... " >&6; }
+if ${ac_cv_search_inet_ntoa+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char inet_ntoa ();
+int
+main ()
+{
+return inet_ntoa ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' inet; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_inet_ntoa=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_inet_ntoa+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search_inet_ntoa+:} false; then :
+
+else
+ ac_cv_search_inet_ntoa=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_inet_ntoa" >&5
+$as_echo "$ac_cv_search_inet_ntoa" >&6; }
+ac_res=$ac_cv_search_inet_ntoa
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5
+$as_echo_n "checking for library containing socket... " >&6; }
+if ${ac_cv_search_socket+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char socket ();
+int
+main ()
+{
+return socket ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' socket; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_socket=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_socket+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search_socket+:} false; then :
+
+else
+ ac_cv_search_socket=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5
+$as_echo "$ac_cv_search_socket" >&6; }
+ac_res=$ac_cv_search_socket
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostbyname" >&5
+$as_echo_n "checking for library containing gethostbyname... " >&6; }
+if ${ac_cv_search_gethostbyname+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' nsl; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_gethostbyname=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_gethostbyname+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search_gethostbyname+:} false; then :
+
+else
+ ac_cv_search_gethostbyname=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyname" >&5
+$as_echo "$ac_cv_search_gethostbyname" >&6; }
+ac_res=$ac_cv_search_gethostbyname
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for econf_readDirs in -leconf" >&5
+$as_echo_n "checking for econf_readDirs in -leconf... " >&6; }
+if ${ac_cv_lib_econf_econf_readDirs+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-leconf $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char econf_readDirs ();
+int
+main ()
+{
+return econf_readDirs ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_econf_econf_readDirs=yes
+else
+ ac_cv_lib_econf_econf_readDirs=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_econf_econf_readDirs" >&5
+$as_echo "$ac_cv_lib_econf_econf_readDirs" >&6; }
+if test "x$ac_cv_lib_econf_econf_readDirs" = xyes; then :
+ LIBECONF="-leconf"
+else
+ LIBECONF=""
+fi
+
+if test -n "$LIBECONF"; then
+ ECONF_CPPFLAGS="-DUSE_ECONF=1"
+ # Check whether --enable-vendordir was given.
+if test "${enable_vendordir+set}" = set; then :
+ enableval=$enable_vendordir;
+fi
+
+fi
+
+
+VENDORDIR=$enable_vendordir
+
+ if test "x$enable_vendordir" != x; then
+ HAVE_VENDORDIR_TRUE=
+ HAVE_VENDORDIR_FALSE='#'
+else
+ HAVE_VENDORDIR_TRUE='#'
+ HAVE_VENDORDIR_FALSE=
+fi
+
+
+if test "$enable_shadowgrp" = "yes"; then
+
+$as_echo "#define SHADOWGRP 1" >>confdefs.h
+
+fi
+ if test "x$enable_shadowgrp" = "xyes"; then
+ SHADOWGRP_TRUE=
+ SHADOWGRP_FALSE='#'
+else
+ SHADOWGRP_TRUE='#'
+ SHADOWGRP_FALSE=
+fi
+
+
+if test "$enable_man" = "yes"; then
+ # Extract the first word of "xsltproc", so it can be a program name with args.
+set dummy xsltproc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_XSLTPROC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $XSLTPROC in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_XSLTPROC="$XSLTPROC" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_XSLTPROC="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+XSLTPROC=$ac_cv_path_XSLTPROC
+if test -n "$XSLTPROC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XSLTPROC" >&5
+$as_echo "$XSLTPROC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test -z "$XSLTPROC"; then
+ enable_man=no
+ as_fn_error $? "xsltproc is missing." "$LINENO" 5
+ fi
+
+
+ # check for the presence of the XML catalog
+
+# Check whether --with-xml-catalog was given.
+if test "${with_xml_catalog+set}" = set; then :
+ withval=$with_xml_catalog;
+else
+ with_xml_catalog=/etc/xml/catalog
+fi
+
+ jh_found_xmlcatalog=true
+ XML_CATALOG_FILE="$with_xml_catalog"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XML catalog ($XML_CATALOG_FILE)" >&5
+$as_echo_n "checking for XML catalog ($XML_CATALOG_FILE)... " >&6; }
+ if test -f "$XML_CATALOG_FILE"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5
+$as_echo "found" >&6; }
+ else
+ jh_found_xmlcatalog=false
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
+$as_echo "not found" >&6; }
+ fi
+
+ # check for the xmlcatalog program
+ # Extract the first word of "xmlcatalog", so it can be a program name with args.
+set dummy xmlcatalog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_XMLCATALOG+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $XMLCATALOG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_XMLCATALOG="$XMLCATALOG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_XMLCATALOG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_XMLCATALOG" && ac_cv_path_XMLCATALOG="no"
+ ;;
+esac
+fi
+XMLCATALOG=$ac_cv_path_XMLCATALOG
+if test -n "$XMLCATALOG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XMLCATALOG" >&5
+$as_echo "$XMLCATALOG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test "x$XMLCATALOG" = xno; then
+ jh_found_xmlcatalog=false
+ fi
+
+ if $jh_found_xmlcatalog; then
+ :
+ else
+ :
+ fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DocBook XML DTD V4.5 in XML catalog" >&5
+$as_echo_n "checking for DocBook XML DTD V4.5 in XML catalog... " >&6; }
+ if $jh_found_xmlcatalog && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$XMLCATALOG --noout \"\$XML_CATALOG_FILE\" \"-//OASIS//DTD DocBook XML V4.5//EN\" >&2"; } >&5
+ ($XMLCATALOG --noout "$XML_CATALOG_FILE" "-//OASIS//DTD DocBook XML V4.5//EN" >&2) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5
+$as_echo "found" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
+$as_echo "not found" >&6; }
+ enable_man=no
+ fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DocBook XSL Stylesheets >= 1.70.1 in XML catalog" >&5
+$as_echo_n "checking for DocBook XSL Stylesheets >= 1.70.1 in XML catalog... " >&6; }
+ if $jh_found_xmlcatalog && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$XMLCATALOG --noout \"\$XML_CATALOG_FILE\" \"http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl\" >&2"; } >&5
+ ($XMLCATALOG --noout "$XML_CATALOG_FILE" "http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl" >&2) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5
+$as_echo "found" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
+$as_echo "not found" >&6; }
+ enable_man=no
+ fi
+
+fi
+ if test "x$enable_man" != "xno"; then
+ ENABLE_REGENERATE_MAN_TRUE=
+ ENABLE_REGENERATE_MAN_FALSE='#'
+else
+ ENABLE_REGENERATE_MAN_TRUE='#'
+ ENABLE_REGENERATE_MAN_FALSE=
+fi
+
+
+if test "$enable_subids" != "no"; then
+ # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of uid_t" >&5
+$as_echo_n "checking size of uid_t... " >&6; }
+if ${ac_cv_sizeof_uid_t+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (uid_t))" "ac_cv_sizeof_uid_t" "#include \"sys/types.h\"
+"; then :
+
+else
+ if test "$ac_cv_type_uid_t" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (uid_t)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_uid_t=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_uid_t" >&5
+$as_echo "$ac_cv_sizeof_uid_t" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UID_T $ac_cv_sizeof_uid_t
+_ACEOF
+
+
+ # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of gid_t" >&5
+$as_echo_n "checking size of gid_t... " >&6; }
+if ${ac_cv_sizeof_gid_t+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (gid_t))" "ac_cv_sizeof_gid_t" "#include \"sys/types.h\"
+"; then :
+
+else
+ if test "$ac_cv_type_gid_t" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (gid_t)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_gid_t=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_gid_t" >&5
+$as_echo "$ac_cv_sizeof_gid_t" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_GID_T $ac_cv_sizeof_gid_t
+_ACEOF
+
+
+
+ if test "$ac_cv_sizeof_uid_t" -ge 4 && test "$ac_cv_sizeof_gid_t" -ge 4; then
+
+$as_echo "#define ENABLE_SUBIDS 1" >>confdefs.h
+
+ enable_subids="yes"
+ else
+ if test "x$enable_subids" = "xyes"; then
+ as_fn_error $? "Cannot enable support the subordinate IDs on systems where gid_t or uid_t has less than 32 bits" "$LINENO" 5
+ fi
+ enable_subids="no"
+ fi
+fi
+ if test "x$enable_subids" != "xno"; then
+ ENABLE_SUBIDS_TRUE=
+ ENABLE_SUBIDS_FALSE='#'
+else
+ ENABLE_SUBIDS_TRUE='#'
+ ENABLE_SUBIDS_FALSE=
+fi
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for crypt in -lcrypt" >&5
+$as_echo_n "checking for crypt in -lcrypt... " >&6; }
+if ${ac_cv_lib_crypt_crypt+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcrypt $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char crypt ();
+int
+main ()
+{
+return crypt ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_crypt_crypt=yes
+else
+ ac_cv_lib_crypt_crypt=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypt_crypt" >&5
+$as_echo "$ac_cv_lib_crypt_crypt" >&6; }
+if test "x$ac_cv_lib_crypt_crypt" = xyes; then :
+ LIBCRYPT=-lcrypt
+else
+ as_fn_error $? "crypt() not found" "$LINENO" 5
+fi
+
+
+
+if test "$with_acl" != "no"; then
+ for ac_header in acl/libacl.h attr/error_context.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ acl_header="yes"
+else
+ acl_header="no"
+fi
+
+done
+
+ if test "$acl_header$with_acl" = "noyes" ; then
+ as_fn_error $? "acl/libacl.h or attr/error_context.h is missing" "$LINENO" 5
+ elif test "$acl_header" = "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for perm_copy_file in -lacl" >&5
+$as_echo_n "checking for perm_copy_file in -lacl... " >&6; }
+if ${ac_cv_lib_acl_perm_copy_file+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lacl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char perm_copy_file ();
+int
+main ()
+{
+return perm_copy_file ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_acl_perm_copy_file=yes
+else
+ ac_cv_lib_acl_perm_copy_file=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_acl_perm_copy_file" >&5
+$as_echo "$ac_cv_lib_acl_perm_copy_file" >&6; }
+if test "x$ac_cv_lib_acl_perm_copy_file" = xyes; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for perm_copy_fd in -lacl" >&5
+$as_echo_n "checking for perm_copy_fd in -lacl... " >&6; }
+if ${ac_cv_lib_acl_perm_copy_fd+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lacl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char perm_copy_fd ();
+int
+main ()
+{
+return perm_copy_fd ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_acl_perm_copy_fd=yes
+else
+ ac_cv_lib_acl_perm_copy_fd=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_acl_perm_copy_fd" >&5
+$as_echo "$ac_cv_lib_acl_perm_copy_fd" >&6; }
+if test "x$ac_cv_lib_acl_perm_copy_fd" = xyes; then :
+ acl_lib="yes"
+else
+ acl_lib="no"
+fi
+
+else
+ acl_lib="no"
+fi
+
+ if test "$acl_lib$with_acl" = "noyes" ; then
+ as_fn_error $? "libacl not found" "$LINENO" 5
+ elif test "$acl_lib" = "no" ; then
+ with_acl="no"
+ else
+
+$as_echo "#define WITH_ACL 1" >>confdefs.h
+
+ LIBACL="-lacl"
+ with_acl="yes"
+ fi
+ else
+ with_acl="no"
+ fi
+fi
+
+
+if test "$with_attr" != "no"; then
+ for ac_header in attr/libattr.h attr/error_context.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ attr_header="yes"
+else
+ attr_header="no"
+fi
+
+done
+
+ if test "$attr_header$with_attr" = "noyes" ; then
+ as_fn_error $? "attr/libattr.h or attr/error_context.h is missing" "$LINENO" 5
+ elif test "$attr_header" = "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for attr_copy_file in -lattr" >&5
+$as_echo_n "checking for attr_copy_file in -lattr... " >&6; }
+if ${ac_cv_lib_attr_attr_copy_file+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lattr $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char attr_copy_file ();
+int
+main ()
+{
+return attr_copy_file ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_attr_attr_copy_file=yes
+else
+ ac_cv_lib_attr_attr_copy_file=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_attr_attr_copy_file" >&5
+$as_echo "$ac_cv_lib_attr_attr_copy_file" >&6; }
+if test "x$ac_cv_lib_attr_attr_copy_file" = xyes; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for attr_copy_fd in -lattr" >&5
+$as_echo_n "checking for attr_copy_fd in -lattr... " >&6; }
+if ${ac_cv_lib_attr_attr_copy_fd+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lattr $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char attr_copy_fd ();
+int
+main ()
+{
+return attr_copy_fd ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_attr_attr_copy_fd=yes
+else
+ ac_cv_lib_attr_attr_copy_fd=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_attr_attr_copy_fd" >&5
+$as_echo "$ac_cv_lib_attr_attr_copy_fd" >&6; }
+if test "x$ac_cv_lib_attr_attr_copy_fd" = xyes; then :
+ attr_lib="yes"
+else
+ attr_lib="no"
+fi
+
+else
+ attr_lib="no"
+fi
+
+ if test "$attr_lib$with_attr" = "noyes" ; then
+ as_fn_error $? "libattr not found" "$LINENO" 5
+ elif test "$attr_lib" = "no" ; then
+ with_attr="no"
+ else
+
+$as_echo "#define WITH_ATTR 1" >>confdefs.h
+
+ LIBATTR="-lattr"
+ with_attr="yes"
+ fi
+ else
+ with_attr="no"
+ fi
+fi
+
+
+if test "$with_audit" != "no"; then
+ ac_fn_c_check_header_mongrel "$LINENO" "libaudit.h" "ac_cv_header_libaudit_h" "$ac_includes_default"
+if test "x$ac_cv_header_libaudit_h" = xyes; then :
+ audit_header="yes"
+else
+ audit_header="no"
+fi
+
+
+ if test "$audit_header$with_audit" = "noyes" ; then
+ as_fn_error $? "libaudit.h is missing" "$LINENO" 5
+ elif test "$audit_header" = "yes"; then
+ ac_fn_c_check_decl "$LINENO" "AUDIT_ADD_USER" "ac_cv_have_decl_AUDIT_ADD_USER" "#include <libaudit.h>
+"
+if test "x$ac_cv_have_decl_AUDIT_ADD_USER" = xyes; then :
+
+else
+ audit_header="no"
+fi
+
+ ac_fn_c_check_decl "$LINENO" "AUDIT_DEL_USER" "ac_cv_have_decl_AUDIT_DEL_USER" "#include <libaudit.h>
+"
+if test "x$ac_cv_have_decl_AUDIT_DEL_USER" = xyes; then :
+
+else
+ audit_header="no"
+fi
+
+ ac_fn_c_check_decl "$LINENO" "AUDIT_ADD_GROUP" "ac_cv_have_decl_AUDIT_ADD_GROUP" "#include <libaudit.h>
+"
+if test "x$ac_cv_have_decl_AUDIT_ADD_GROUP" = xyes; then :
+
+else
+ audit_header="no"
+fi
+
+ ac_fn_c_check_decl "$LINENO" "AUDIT_DEL_GROUP" "ac_cv_have_decl_AUDIT_DEL_GROUP" "#include <libaudit.h>
+"
+if test "x$ac_cv_have_decl_AUDIT_DEL_GROUP" = xyes; then :
+
+else
+ audit_header="no"
+fi
+
+ if test "$audit_header$with_audit" = "noyes" ; then
+ as_fn_error $? "AUDIT_ADD_USER AUDIT_DEL_USER AUDIT_ADD_GROUP or AUDIT_DEL_GROUP missing from libaudit.h" "$LINENO" 5
+ fi
+ fi
+ if test "$audit_header" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for audit_log_acct_message in -laudit" >&5
+$as_echo_n "checking for audit_log_acct_message in -laudit... " >&6; }
+if ${ac_cv_lib_audit_audit_log_acct_message+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-laudit $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char audit_log_acct_message ();
+int
+main ()
+{
+return audit_log_acct_message ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_audit_audit_log_acct_message=yes
+else
+ ac_cv_lib_audit_audit_log_acct_message=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_audit_audit_log_acct_message" >&5
+$as_echo "$ac_cv_lib_audit_audit_log_acct_message" >&6; }
+if test "x$ac_cv_lib_audit_audit_log_acct_message" = xyes; then :
+ audit_lib="yes"
+else
+ audit_lib="no"
+fi
+
+ if test "$audit_lib$with_audit" = "noyes" ; then
+ as_fn_error $? "libaudit not found" "$LINENO" 5
+ elif test "$audit_lib" = "no" ; then
+ with_audit="no"
+ else
+
+$as_echo "#define WITH_AUDIT 1" >>confdefs.h
+
+ LIBAUDIT="-laudit"
+ with_audit="yes"
+ fi
+ else
+ with_audit="no"
+ fi
+fi
+
+
+if test "$with_libcrack" = "yes"; then
+ echo "checking cracklib flavour, don't be surprised by the results"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FascistCheck in -lcrack" >&5
+$as_echo_n "checking for FascistCheck in -lcrack... " >&6; }
+if ${ac_cv_lib_crack_FascistCheck+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcrack $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char FascistCheck ();
+int
+main ()
+{
+return FascistCheck ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_crack_FascistCheck=yes
+else
+ ac_cv_lib_crack_FascistCheck=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crack_FascistCheck" >&5
+$as_echo "$ac_cv_lib_crack_FascistCheck" >&6; }
+if test "x$ac_cv_lib_crack_FascistCheck" = xyes; then :
+ LIBCRACK=-lcrack
+$as_echo "#define HAVE_LIBCRACK 1" >>confdefs.h
+
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FascistHistory in -lcrack" >&5
+$as_echo_n "checking for FascistHistory in -lcrack... " >&6; }
+if ${ac_cv_lib_crack_FascistHistory+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcrack $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char FascistHistory ();
+int
+main ()
+{
+return FascistHistory ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_crack_FascistHistory=yes
+else
+ ac_cv_lib_crack_FascistHistory=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crack_FascistHistory" >&5
+$as_echo "$ac_cv_lib_crack_FascistHistory" >&6; }
+if test "x$ac_cv_lib_crack_FascistHistory" = xyes; then :
+
+$as_echo "#define HAVE_LIBCRACK_HIST 1" >>confdefs.h
+
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FascistHistoryPw in -lcrack" >&5
+$as_echo_n "checking for FascistHistoryPw in -lcrack... " >&6; }
+if ${ac_cv_lib_crack_FascistHistoryPw+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcrack $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char FascistHistoryPw ();
+int
+main ()
+{
+return FascistHistoryPw ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_crack_FascistHistoryPw=yes
+else
+ ac_cv_lib_crack_FascistHistoryPw=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crack_FascistHistoryPw" >&5
+$as_echo "$ac_cv_lib_crack_FascistHistoryPw" >&6; }
+if test "x$ac_cv_lib_crack_FascistHistoryPw" = xyes; then :
+
+$as_echo "#define HAVE_LIBCRACK_PW 1" >>confdefs.h
+
+fi
+
+fi
+
+if test "$with_btrfs" != "no"; then
+ for ac_header in sys/statfs.h linux/magic.h linux/btrfs_tree.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ \
+ btrfs_headers="yes"
+else
+ btrfs_headers="no"
+fi
+
+done
+
+ if test "$btrfs_headers$with_btrfs" = "noyes" ; then
+ as_fn_error $? "One of sys/statfs.h linux/magic.h linux/btrfs_tree.h is missing" "$LINENO" 5
+ fi
+
+ if test "$btrfs_headers" = "yes" ; then
+
+$as_echo "#define WITH_BTRFS 1" >>confdefs.h
+
+ with_btrfs="yes"
+ fi
+fi
+ if test x$with_btrfs = xyes; then
+ WITH_BTRFS_TRUE=
+ WITH_BTRFS_FALSE='#'
+else
+ WITH_BTRFS_TRUE='#'
+ WITH_BTRFS_FALSE=
+fi
+
+
+
+
+if test "$with_selinux" != "no"; then
+ for ac_header in selinux/selinux.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "selinux/selinux.h" "ac_cv_header_selinux_selinux_h" "$ac_includes_default"
+if test "x$ac_cv_header_selinux_selinux_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_SELINUX_SELINUX_H 1
+_ACEOF
+ selinux_header="yes"
+else
+ selinux_header="no"
+fi
+
+done
+
+ if test "$selinux_header$with_selinux" = "noyes" ; then
+ as_fn_error $? "selinux/selinux.h is missing" "$LINENO" 5
+ fi
+
+ for ac_header in semanage/semanage.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "semanage/semanage.h" "ac_cv_header_semanage_semanage_h" "$ac_includes_default"
+if test "x$ac_cv_header_semanage_semanage_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_SEMANAGE_SEMANAGE_H 1
+_ACEOF
+ semanage_header="yes"
+else
+ semanage_header="no"
+fi
+
+done
+
+ if test "$semanage_header$with_selinux" = "noyes" ; then
+ as_fn_error $? "semanage/semanage.h is missing" "$LINENO" 5
+ fi
+
+ if test "$selinux_header$semanage_header" = "yesyes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for is_selinux_enabled in -lselinux" >&5
+$as_echo_n "checking for is_selinux_enabled in -lselinux... " >&6; }
+if ${ac_cv_lib_selinux_is_selinux_enabled+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lselinux $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char is_selinux_enabled ();
+int
+main ()
+{
+return is_selinux_enabled ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_selinux_is_selinux_enabled=yes
+else
+ ac_cv_lib_selinux_is_selinux_enabled=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_selinux_is_selinux_enabled" >&5
+$as_echo "$ac_cv_lib_selinux_is_selinux_enabled" >&6; }
+if test "x$ac_cv_lib_selinux_is_selinux_enabled" = xyes; then :
+ selinux_lib="yes"
+else
+ selinux_lib="no"
+fi
+
+ if test "$selinux_lib$with_selinux" = "noyes" ; then
+ as_fn_error $? "libselinux not found" "$LINENO" 5
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for semanage_connect in -lsemanage" >&5
+$as_echo_n "checking for semanage_connect in -lsemanage... " >&6; }
+if ${ac_cv_lib_semanage_semanage_connect+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsemanage $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char semanage_connect ();
+int
+main ()
+{
+return semanage_connect ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_semanage_semanage_connect=yes
+else
+ ac_cv_lib_semanage_semanage_connect=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_semanage_semanage_connect" >&5
+$as_echo "$ac_cv_lib_semanage_semanage_connect" >&6; }
+if test "x$ac_cv_lib_semanage_semanage_connect" = xyes; then :
+ semanage_lib="yes"
+else
+ semanage_lib="no"
+fi
+
+ if test "$semanage_lib$with_selinux" = "noyes" ; then
+ as_fn_error $? "libsemanage not found" "$LINENO" 5
+ fi
+
+ if test "$selinux_lib$semanage_lib" = "yesyes" ; then
+
+$as_echo "#define WITH_SELINUX 1" >>confdefs.h
+
+ LIBSELINUX="-lselinux"
+ LIBSEMANAGE="-lsemanage"
+ with_selinux="yes"
+ else
+ with_selinux="no"
+ fi
+ else
+ with_selinux="no"
+ fi
+fi
+
+
+if test "$with_tcb" != "no"; then
+ for ac_header in tcb.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "tcb.h" "ac_cv_header_tcb_h" "$ac_includes_default"
+if test "x$ac_cv_header_tcb_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_TCB_H 1
+_ACEOF
+ tcb_header="yes"
+else
+ tcb_header="no"
+fi
+
+done
+
+ if test "$tcb_header$with_tcb" = "noyes" ; then
+ as_fn_error $? "tcb.h is missing" "$LINENO" 5
+ elif test "$tcb_header" = "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tcb_is_suspect in -ltcb" >&5
+$as_echo_n "checking for tcb_is_suspect in -ltcb... " >&6; }
+if ${ac_cv_lib_tcb_tcb_is_suspect+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ltcb $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char tcb_is_suspect ();
+int
+main ()
+{
+return tcb_is_suspect ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_tcb_tcb_is_suspect=yes
+else
+ ac_cv_lib_tcb_tcb_is_suspect=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tcb_tcb_is_suspect" >&5
+$as_echo "$ac_cv_lib_tcb_tcb_is_suspect" >&6; }
+if test "x$ac_cv_lib_tcb_tcb_is_suspect" = xyes; then :
+ tcb_lib="yes"
+else
+ tcb_lib="no"
+fi
+
+ if test "$tcb_lib$with_tcb" = "noyes" ; then
+ as_fn_error $? "libtcb not found" "$LINENO" 5
+ elif test "$tcb_lib" = "no" ; then
+ with_tcb="no"
+ else
+
+$as_echo "#define WITH_TCB 1" >>confdefs.h
+
+ LIBTCB="-ltcb"
+ with_tcb="yes"
+ fi
+ else
+ with_tcb="no"
+ fi
+fi
+ if test x$with_tcb = xyes; then
+ WITH_TCB_TRUE=
+ WITH_TCB_FALSE='#'
+else
+ WITH_TCB_TRUE='#'
+ WITH_TCB_FALSE=
+fi
+
+
+
+if test "$with_libpam" != "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pam_start in -lpam" >&5
+$as_echo_n "checking for pam_start in -lpam... " >&6; }
+if ${ac_cv_lib_pam_pam_start+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpam $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pam_start ();
+int
+main ()
+{
+return pam_start ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_pam_pam_start=yes
+else
+ ac_cv_lib_pam_pam_start=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pam_pam_start" >&5
+$as_echo "$ac_cv_lib_pam_pam_start" >&6; }
+if test "x$ac_cv_lib_pam_pam_start" = xyes; then :
+ pam_lib="yes"
+else
+ pam_lib="no"
+fi
+
+ if test "$pam_lib$with_libpam" = "noyes" ; then
+ as_fn_error $? "libpam not found" "$LINENO" 5
+ fi
+
+ LIBPAM="-lpam"
+ pam_conv_function="no"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for openpam_ttyconv in -lpam" >&5
+$as_echo_n "checking for openpam_ttyconv in -lpam... " >&6; }
+if ${ac_cv_lib_pam_openpam_ttyconv+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpam $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char openpam_ttyconv ();
+int
+main ()
+{
+return openpam_ttyconv ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_pam_openpam_ttyconv=yes
+else
+ ac_cv_lib_pam_openpam_ttyconv=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pam_openpam_ttyconv" >&5
+$as_echo "$ac_cv_lib_pam_openpam_ttyconv" >&6; }
+if test "x$ac_cv_lib_pam_openpam_ttyconv" = xyes; then :
+ pam_conv_function="openpam_ttyconv"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for misc_conv in -lpam_misc" >&5
+$as_echo_n "checking for misc_conv in -lpam_misc... " >&6; }
+if ${ac_cv_lib_pam_misc_misc_conv+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpam_misc $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char misc_conv ();
+int
+main ()
+{
+return misc_conv ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_pam_misc_misc_conv=yes
+else
+ ac_cv_lib_pam_misc_misc_conv=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pam_misc_misc_conv" >&5
+$as_echo "$ac_cv_lib_pam_misc_misc_conv" >&6; }
+if test "x$ac_cv_lib_pam_misc_misc_conv" = xyes; then :
+ pam_conv_function="misc_conv"; LIBPAM="$LIBPAM -lpam_misc"
+fi
+
+
+fi
+
+
+ if test "$pam_conv_function$with_libpam" = "noyes" ; then
+ as_fn_error $? "PAM conversation function not found" "$LINENO" 5
+ fi
+
+ pam_headers_found=no
+ for ac_header in security/openpam.h security/pam_misc.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" " #include <security/pam_appl.h>
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ pam_headers_found=yes ; break
+fi
+
+done
+
+ if test "$pam_headers_found$with_libpam" = "noyes" ; then
+ as_fn_error $? "PAM headers not found" "$LINENO" 5
+ fi
+
+
+ if test "$pam_lib$pam_headers_found" = "yesyes" -a "$pam_conv_function" != "no" ; then
+ with_libpam="yes"
+ else
+ with_libpam="no"
+ unset LIBPAM
+ fi
+fi
+if test "$with_libpam" = "yes"; then
+ ac_fn_c_check_decl "$LINENO" "PAM_ESTABLISH_CRED" "ac_cv_have_decl_PAM_ESTABLISH_CRED" "#include <security/pam_appl.h>
+"
+if test "x$ac_cv_have_decl_PAM_ESTABLISH_CRED" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_PAM_ESTABLISH_CRED $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "PAM_DELETE_CRED" "ac_cv_have_decl_PAM_DELETE_CRED" "#include <security/pam_appl.h>
+"
+if test "x$ac_cv_have_decl_PAM_DELETE_CRED" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_PAM_DELETE_CRED $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "PAM_NEW_AUTHTOK_REQD" "ac_cv_have_decl_PAM_NEW_AUTHTOK_REQD" "#include <security/pam_appl.h>
+"
+if test "x$ac_cv_have_decl_PAM_NEW_AUTHTOK_REQD" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_PAM_NEW_AUTHTOK_REQD $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "PAM_DATA_SILENT" "ac_cv_have_decl_PAM_DATA_SILENT" "#include <security/pam_appl.h>
+"
+if test "x$ac_cv_have_decl_PAM_DATA_SILENT" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_PAM_DATA_SILENT $ac_have_decl
+_ACEOF
+
+
+
+ save_libs=$LIBS
+ LIBS="$LIBS $LIBPAM"
+ # We do not use AC_CHECK_FUNCS to avoid duplicated definition with
+ # Linux PAM.
+ ac_fn_c_check_func "$LINENO" "pam_fail_delay" "ac_cv_func_pam_fail_delay"
+if test "x$ac_cv_func_pam_fail_delay" = xyes; then :
+
+$as_echo "#define HAS_PAM_FAIL_DELAY 1" >>confdefs.h
+
+fi
+
+ LIBS=$save_libs
+
+
+$as_echo "#define USE_PAM 1" >>confdefs.h
+
+
+cat >>confdefs.h <<_ACEOF
+#define SHADOW_PAM_CONVERSATION $pam_conv_function
+_ACEOF
+
+ if true; then
+ USE_PAM_TRUE=
+ USE_PAM_FALSE='#'
+else
+ USE_PAM_TRUE='#'
+ USE_PAM_FALSE=
+fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking use login and su access checking if PAM not used" >&5
+$as_echo_n "checking use login and su access checking if PAM not used... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+else
+
+$as_echo "#define SU_ACCESS 1" >>confdefs.h
+
+ if false; then
+ USE_PAM_TRUE=
+ USE_PAM_FALSE='#'
+else
+ USE_PAM_TRUE='#'
+ USE_PAM_FALSE=
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking use login and su access checking if PAM not used" >&5
+$as_echo_n "checking use login and su access checking if PAM not used... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+
+if test "$enable_acct_tools_setuid" != "no"; then
+ if test "$with_libpam" != "yes"; then
+ if test "$enable_acct_tools_setuid" = "yes"; then
+ as_fn_error $? "PAM support is required for --enable-account-tools-setuid" "$LINENO" 5
+ else
+ enable_acct_tools_setuid="no"
+ fi
+ else
+ enable_acct_tools_setuid="yes"
+ fi
+ if test "$enable_acct_tools_setuid" = "yes"; then
+
+$as_echo "#define ACCT_TOOLS_SETUID 1" >>confdefs.h
+
+ fi
+fi
+ if test "x$enable_acct_tools_setuid" = "xyes"; then
+ ACCT_TOOLS_SETUID_TRUE=
+ ACCT_TOOLS_SETUID_FALSE='#'
+else
+ ACCT_TOOLS_SETUID_TRUE='#'
+ ACCT_TOOLS_SETUID_FALSE=
+fi
+
+
+
+
+# Check whether --with-fcaps was given.
+if test "${with_fcaps+set}" = set; then :
+ withval=$with_fcaps; with_fcaps=$withval
+else
+ with_fcaps=no
+fi
+
+ if test "x$with_fcaps" = "xyes"; then
+ FCAPS_TRUE=
+ FCAPS_FALSE='#'
+else
+ FCAPS_TRUE='#'
+ FCAPS_FALSE=
+fi
+
+
+if test "x$with_fcaps" = "xyes"; then
+ for ac_prog in "setcap"
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_capcmd+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$capcmd"; then
+ ac_cv_prog_capcmd="$capcmd" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_capcmd="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+capcmd=$ac_cv_prog_capcmd
+if test -n "$capcmd"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $capcmd" >&5
+$as_echo "$capcmd" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$capcmd" && break
+done
+
+ if test "x$capcmd" = "x" ; then
+ as_fn_error $? "setcap command not available" "$LINENO" 5
+ fi
+fi
+
+
+
+if test "$with_skey" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MD5Init in -lmd" >&5
+$as_echo_n "checking for MD5Init in -lmd... " >&6; }
+if ${ac_cv_lib_md_MD5Init+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmd $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char MD5Init ();
+int
+main ()
+{
+return MD5Init ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_md_MD5Init=yes
+else
+ ac_cv_lib_md_MD5Init=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_md_MD5Init" >&5
+$as_echo "$ac_cv_lib_md_MD5Init" >&6; }
+if test "x$ac_cv_lib_md_MD5Init" = xyes; then :
+ LIBMD=-lmd
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for skeychallenge in -lskey" >&5
+$as_echo_n "checking for skeychallenge in -lskey... " >&6; }
+if ${ac_cv_lib_skey_skeychallenge+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lskey $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char skeychallenge ();
+int
+main ()
+{
+return skeychallenge ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_skey_skeychallenge=yes
+else
+ ac_cv_lib_skey_skeychallenge=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_skey_skeychallenge" >&5
+$as_echo "$ac_cv_lib_skey_skeychallenge" >&6; }
+if test "x$ac_cv_lib_skey_skeychallenge" = xyes; then :
+ LIBSKEY=-lskey
+else
+ as_fn_error $? "liskey missing. You can download S/Key source code from http://rsync1.it.gentoo.org/gentoo/distfiles/skey-1.1.5.tar.bz2" "$LINENO" 5
+fi
+
+
+$as_echo "#define SKEY 1" >>confdefs.h
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <stdio.h>
+ #include <skey.h>
+
+int
+main ()
+{
+
+ skeychallenge((void*)0, (void*)0, (void*)0, 0);
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+$as_echo "#define SKEY_BSD_STYLE 1" >>confdefs.h
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+if test "$enable_utmpx" = "yes"; then
+ if test "$ac_cv_header_utmpx_h" != "yes"; then
+ as_fn_error $? "The utmpx.h header file is required for utmpx support." "$LINENO" 5
+ fi
+
+$as_echo "#define USE_UTMPX 1" >>confdefs.h
+
+fi
+
+
+cat >>confdefs.h <<_ACEOF
+#define SHELL "$SHELL"
+_ACEOF
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
+$as_echo_n "checking whether NLS is requested... " >&6; }
+ # Check whether --enable-nls was given.
+if test "${enable_nls+set}" = set; then :
+ enableval=$enable_nls; USE_NLS=$enableval
+else
+ USE_NLS=yes
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+$as_echo "$USE_NLS" >&6; }
+
+
+
+
+ GETTEXT_MACRO_VERSION=0.19
+
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+ # contains only /bin. Note that ksh looks also at the FPATH variable,
+ # so we have to set that as well for the test.
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ || PATH_SEPARATOR=';'
+ }
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_MSGFMT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case "$MSGFMT" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&5
+ if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 &&
+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
+ ;;
+esac
+fi
+MSGFMT="$ac_cv_path_MSGFMT"
+if test "$MSGFMT" != ":"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5
+$as_echo "$MSGFMT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ # Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_GMSGFMT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $GMSGFMT in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
+ ;;
+esac
+fi
+GMSGFMT=$ac_cv_path_GMSGFMT
+if test -n "$GMSGFMT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5
+$as_echo "$GMSGFMT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+ *) MSGFMT_015=$MSGFMT ;;
+ esac
+
+ case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+ *) GMSGFMT_015=$GMSGFMT ;;
+ esac
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+ # contains only /bin. Note that ksh looks also at the FPATH variable,
+ # so we have to set that as well for the test.
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ || PATH_SEPARATOR=';'
+ }
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_XGETTEXT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case "$XGETTEXT" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&5
+ if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 &&
+ (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
+ ;;
+esac
+fi
+XGETTEXT="$ac_cv_path_XGETTEXT"
+if test "$XGETTEXT" != ":"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5
+$as_echo "$XGETTEXT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ rm -f messages.po
+
+ case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+ *) XGETTEXT_015=$XGETTEXT ;;
+ esac
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+ # contains only /bin. Note that ksh looks also at the FPATH variable,
+ # so we have to set that as well for the test.
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ || PATH_SEPARATOR=';'
+ }
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgmerge", so it can be a program name with args.
+set dummy msgmerge; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_MSGMERGE+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case "$MSGMERGE" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&5
+ if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then
+ ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":"
+ ;;
+esac
+fi
+MSGMERGE="$ac_cv_path_MSGMERGE"
+if test "$MSGMERGE" != ":"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5
+$as_echo "$MSGMERGE" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$localedir" || localedir='${datadir}/locale'
+
+
+ test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
+
+
+ ac_config_commands="$ac_config_commands po-directories"
+
+
+
+ if test "X$prefix" = "XNONE"; then
+ acl_final_prefix="$ac_default_prefix"
+ else
+ acl_final_prefix="$prefix"
+ fi
+ if test "X$exec_prefix" = "XNONE"; then
+ acl_final_exec_prefix='${prefix}'
+ else
+ acl_final_exec_prefix="$exec_prefix"
+ fi
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+ prefix="$acl_save_prefix"
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+ with_gnu_ld=no
+fi
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+ # contains only /bin. Note that ksh looks also at the FPATH variable,
+ # so we have to set that as well for the test.
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ || PATH_SEPARATOR=';'
+ }
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [\\/]* | ?:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'`
+ while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${acl_cv_path_LD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$LD"; then
+ acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$acl_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ acl_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$acl_save_ifs"
+else
+ acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${acl_cv_prog_gnu_ld+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ acl_cv_prog_gnu_ld=yes
+ ;;
+*)
+ acl_cv_prog_gnu_ld=no
+ ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5
+$as_echo "$acl_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$acl_cv_prog_gnu_ld
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5
+$as_echo_n "checking for shared library run path origin... " >&6; }
+if ${acl_cv_rpath+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+ . ./conftest.sh
+ rm -f ./conftest.sh
+ acl_cv_rpath=done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5
+$as_echo "$acl_cv_rpath" >&6; }
+ wl="$acl_cv_wl"
+ acl_libext="$acl_cv_libext"
+ acl_shlibext="$acl_cv_shlibext"
+ acl_libname_spec="$acl_cv_libname_spec"
+ acl_library_names_spec="$acl_cv_library_names_spec"
+ acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+ acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+ acl_hardcode_direct="$acl_cv_hardcode_direct"
+ acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
+ # Check whether --enable-rpath was given.
+if test "${enable_rpath+set}" = set; then :
+ enableval=$enable_rpath; :
+else
+ enable_rpath=yes
+fi
+
+
+
+
+ acl_libdirstem=lib
+ acl_libdirstem2=
+ case "$host_os" in
+ solaris*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5
+$as_echo_n "checking for 64-bit host... " >&6; }
+if ${gl_cv_solaris_64bit+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef _LP64
+sixtyfour bits
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "sixtyfour bits" >/dev/null 2>&1; then :
+ gl_cv_solaris_64bit=yes
+else
+ gl_cv_solaris_64bit=no
+fi
+rm -f conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5
+$as_echo "$gl_cv_solaris_64bit" >&6; }
+ if test $gl_cv_solaris_64bit = yes; then
+ acl_libdirstem=lib/64
+ case "$host_cpu" in
+ sparc*) acl_libdirstem2=lib/sparcv9 ;;
+ i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
+ esac
+ fi
+ ;;
+ *)
+ searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+ if test -n "$searchpath"; then
+ acl_save_IFS="${IFS= }"; IFS=":"
+ for searchdir in $searchpath; do
+ if test -d "$searchdir"; then
+ case "$searchdir" in
+ */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+ */../ | */.. )
+ # Better ignore directories of this form. They are misleading.
+ ;;
+ *) searchdir=`cd "$searchdir" && pwd`
+ case "$searchdir" in
+ */lib64 ) acl_libdirstem=lib64 ;;
+ esac ;;
+ esac
+ fi
+ done
+ IFS="$acl_save_IFS"
+ fi
+ ;;
+ esac
+ test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
+
+
+
+
+
+
+
+
+
+
+
+
+ use_additional=yes
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+
+# Check whether --with-libiconv-prefix was given.
+if test "${with_libiconv_prefix+set}" = set; then :
+ withval=$with_libiconv_prefix;
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ if test "$acl_libdirstem2" != "$acl_libdirstem" \
+ && ! test -d "$withval/$acl_libdirstem"; then
+ additional_libdir="$withval/$acl_libdirstem2"
+ fi
+ fi
+ fi
+
+fi
+
+ LIBICONV=
+ LTLIBICONV=
+ INCICONV=
+ LIBICONV_PREFIX=
+ HAVE_LIBICONV=
+ rpathdirs=
+ ltrpathdirs=
+ names_already_handled=
+ names_next_round='iconv '
+ while test -n "$names_next_round"; do
+ names_this_round="$names_next_round"
+ names_next_round=
+ for name in $names_this_round; do
+ already_handled=
+ for n in $names_already_handled; do
+ if test "$n" = "$name"; then
+ already_handled=yes
+ break
+ fi
+ done
+ if test -z "$already_handled"; then
+ names_already_handled="$names_already_handled $name"
+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'`
+ eval value=\"\$HAVE_LIB$uppername\"
+ if test -n "$value"; then
+ if test "$value" = yes; then
+ eval value=\"\$LIB$uppername\"
+ test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value"
+ eval value=\"\$LTLIB$uppername\"
+ test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value"
+ else
+ :
+ fi
+ else
+ found_dir=
+ found_la=
+ found_so=
+ found_a=
+ eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
+ if test -n "$acl_shlibext"; then
+ shrext=".$acl_shlibext" # typically: shrext=.so
+ else
+ shrext=
+ fi
+ if test $use_additional = yes; then
+ dir="$additional_libdir"
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ for x in $LDFLAGS $LTLIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ case "$x" in
+ -L*)
+ dir=`echo "X$x" | sed -e 's/^X-L//'`
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ ;;
+ esac
+ if test "X$found_dir" != "X"; then
+ break
+ fi
+ done
+ fi
+ if test "X$found_dir" != "X"; then
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
+ if test "X$found_so" != "X"; then
+ if test "$enable_rpath" = no \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ else
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $found_dir"
+ fi
+ if test "$acl_hardcode_direct" = yes; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ else
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $found_dir"
+ fi
+ else
+ haveit=
+ for x in $LDFLAGS $LIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
+ fi
+ if test "$acl_hardcode_minus_L" != no; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ else
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+ fi
+ fi
+ fi
+ fi
+ else
+ if test "X$found_a" != "X"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a"
+ else
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name"
+ fi
+ fi
+ additional_includedir=
+ case "$found_dir" in
+ */$acl_libdirstem | */$acl_libdirstem/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+ if test "$name" = 'iconv'; then
+ LIBICONV_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ */$acl_libdirstem2 | */$acl_libdirstem2/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+ if test "$name" = 'iconv'; then
+ LIBICONV_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ esac
+ if test "X$additional_includedir" != "X"; then
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ for x in $CPPFLAGS $INCICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ fi
+ if test -n "$found_la"; then
+ save_libdir="$libdir"
+ case "$found_la" in
+ */* | *\\*) . "$found_la" ;;
+ *) . "./$found_la" ;;
+ esac
+ libdir="$save_libdir"
+ for dep in $dependency_libs; do
+ case "$dep" in
+ -L*)
+ additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
+ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
+ haveit=
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
+ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ haveit=
+ for x in $LDFLAGS $LIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir"
+ fi
+ fi
+ haveit=
+ for x in $LDFLAGS $LTLIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ ;;
+ -R*)
+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
+ if test "$enable_rpath" != no; then
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $dir"
+ fi
+ fi
+ ;;
+ -l*)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+ ;;
+ *.la)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+ ;;
+ *)
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$dep"
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep"
+ ;;
+ esac
+ done
+ fi
+ else
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name"
+ fi
+ fi
+ fi
+ done
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n "$acl_hardcode_libdir_separator"; then
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+ else
+ for found_dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$found_dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+ done
+ fi
+ fi
+ if test "X$ltrpathdirs" != "X"; then
+ for found_dir in $ltrpathdirs; do
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir"
+ done
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5
+$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; }
+if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <CoreFoundation/CFPreferences.h>
+int
+main ()
+{
+CFPreferencesCopyAppValue(NULL, NULL)
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gt_cv_func_CFPreferencesCopyAppValue=yes
+else
+ gt_cv_func_CFPreferencesCopyAppValue=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$gt_save_LIBS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
+$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+
+$as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5
+$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; }
+if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <CoreFoundation/CFLocale.h>
+int
+main ()
+{
+CFLocaleCopyCurrent();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gt_cv_func_CFLocaleCopyCurrent=yes
+else
+ gt_cv_func_CFLocaleCopyCurrent=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$gt_save_LIBS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5
+$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; }
+ if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+
+$as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h
+
+ fi
+ INTL_MACOSX_LIBS=
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+ INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+ fi
+
+
+
+
+
+
+ LIBINTL=
+ LTLIBINTL=
+ POSUB=
+
+ case " $gt_needs " in
+ *" need-formatstring-macros "*) gt_api_version=3 ;;
+ *" need-ngettext "*) gt_api_version=2 ;;
+ *) gt_api_version=1 ;;
+ esac
+ gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+ gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+ if test "$USE_NLS" = "yes"; then
+ gt_use_preinstalled_gnugettext=no
+
+
+ if test $gt_api_version -ge 3; then
+ gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+'
+ else
+ gt_revision_test_code=
+ fi
+ if test $gt_api_version -ge 2; then
+ gt_expression_test_code=' + * ngettext ("", "", 0)'
+ else
+ gt_expression_test_code=
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5
+$as_echo_n "checking for GNU gettext in libc... " >&6; }
+if eval \${$gt_func_gnugettext_libc+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <libintl.h>
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings)
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
+
+int
+main ()
+{
+
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ eval "$gt_func_gnugettext_libc=yes"
+else
+ eval "$gt_func_gnugettext_libc=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$gt_func_gnugettext_libc
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+
+
+
+
+
+ am_save_CPPFLAGS="$CPPFLAGS"
+
+ for element in $INCICONV; do
+ haveit=
+ for x in $CPPFLAGS; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+ fi
+ done
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
+$as_echo_n "checking for iconv... " >&6; }
+if ${am_cv_func_iconv+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ am_cv_func_iconv="no, consider installing GNU libiconv"
+ am_cv_lib_iconv=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <stdlib.h>
+#include <iconv.h>
+
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ am_cv_func_iconv=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test "$am_cv_func_iconv" != yes; then
+ am_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBICONV"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <stdlib.h>
+#include <iconv.h>
+
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ am_cv_lib_iconv=yes
+ am_cv_func_iconv=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$am_save_LIBS"
+ fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
+$as_echo "$am_cv_func_iconv" >&6; }
+ if test "$am_cv_func_iconv" = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5
+$as_echo_n "checking for working iconv... " >&6; }
+if ${am_cv_func_iconv_works+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ am_save_LIBS="$LIBS"
+ if test $am_cv_lib_iconv = yes; then
+ LIBS="$LIBS $LIBICONV"
+ fi
+ am_cv_func_iconv_works=no
+ for ac_iconv_const in '' 'const'; do
+ if test "$cross_compiling" = yes; then :
+ case "$host_os" in
+ aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+ *) am_cv_func_iconv_works="guessing yes" ;;
+ esac
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <iconv.h>
+#include <string.h>
+
+#ifndef ICONV_CONST
+# define ICONV_CONST $ac_iconv_const
+#endif
+
+int
+main ()
+{
+int result = 0;
+ /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+ returns. */
+ {
+ iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+ if (cd_utf8_to_88591 != (iconv_t)(-1))
+ {
+ static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */
+ char buf[10];
+ ICONV_CONST char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_utf8_to_88591,
+ &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ result |= 1;
+ iconv_close (cd_utf8_to_88591);
+ }
+ }
+ /* Test against Solaris 10 bug: Failures are not distinguishable from
+ successful returns. */
+ {
+ iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+ if (cd_ascii_to_88591 != (iconv_t)(-1))
+ {
+ static ICONV_CONST char input[] = "\263";
+ char buf[10];
+ ICONV_CONST char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_ascii_to_88591,
+ &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ result |= 2;
+ iconv_close (cd_ascii_to_88591);
+ }
+ }
+ /* Test against AIX 6.1..7.1 bug: Buffer overrun. */
+ {
+ iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1");
+ if (cd_88591_to_utf8 != (iconv_t)(-1))
+ {
+ static ICONV_CONST char input[] = "\304";
+ static char buf[2] = { (char)0xDE, (char)0xAD };
+ ICONV_CONST char *inptr = input;
+ size_t inbytesleft = 1;
+ char *outptr = buf;
+ size_t outbytesleft = 1;
+ size_t res = iconv (cd_88591_to_utf8,
+ &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD)
+ result |= 4;
+ iconv_close (cd_88591_to_utf8);
+ }
+ }
+#if 0 /* This bug could be worked around by the caller. */
+ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */
+ {
+ iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+ if (cd_88591_to_utf8 != (iconv_t)(-1))
+ {
+ static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+ char buf[50];
+ ICONV_CONST char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_88591_to_utf8,
+ &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if ((int)res > 0)
+ result |= 8;
+ iconv_close (cd_88591_to_utf8);
+ }
+ }
+#endif
+ /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+ provided. */
+ if (/* Try standardized names. */
+ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+ /* Try IRIX, OSF/1 names. */
+ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+ /* Try AIX names. */
+ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+ /* Try HP-UX names. */
+ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+ result |= 16;
+ return result;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ am_cv_func_iconv_works=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ test "$am_cv_func_iconv_works" = no || break
+ done
+ LIBS="$am_save_LIBS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5
+$as_echo "$am_cv_func_iconv_works" >&6; }
+ case "$am_cv_func_iconv_works" in
+ *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+ *) am_func_iconv=yes ;;
+ esac
+ else
+ am_func_iconv=no am_cv_lib_iconv=no
+ fi
+ if test "$am_func_iconv" = yes; then
+
+$as_echo "#define HAVE_ICONV 1" >>confdefs.h
+
+ fi
+ if test "$am_cv_lib_iconv" = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
+$as_echo_n "checking how to link with libiconv... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
+$as_echo "$LIBICONV" >&6; }
+ else
+ CPPFLAGS="$am_save_CPPFLAGS"
+ LIBICONV=
+ LTLIBICONV=
+ fi
+
+
+
+
+
+
+
+
+
+
+
+ use_additional=yes
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+
+# Check whether --with-libintl-prefix was given.
+if test "${with_libintl_prefix+set}" = set; then :
+ withval=$with_libintl_prefix;
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ if test "$acl_libdirstem2" != "$acl_libdirstem" \
+ && ! test -d "$withval/$acl_libdirstem"; then
+ additional_libdir="$withval/$acl_libdirstem2"
+ fi
+ fi
+ fi
+
+fi
+
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ LIBINTL_PREFIX=
+ HAVE_LIBINTL=
+ rpathdirs=
+ ltrpathdirs=
+ names_already_handled=
+ names_next_round='intl '
+ while test -n "$names_next_round"; do
+ names_this_round="$names_next_round"
+ names_next_round=
+ for name in $names_this_round; do
+ already_handled=
+ for n in $names_already_handled; do
+ if test "$n" = "$name"; then
+ already_handled=yes
+ break
+ fi
+ done
+ if test -z "$already_handled"; then
+ names_already_handled="$names_already_handled $name"
+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'`
+ eval value=\"\$HAVE_LIB$uppername\"
+ if test -n "$value"; then
+ if test "$value" = yes; then
+ eval value=\"\$LIB$uppername\"
+ test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value"
+ eval value=\"\$LTLIB$uppername\"
+ test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value"
+ else
+ :
+ fi
+ else
+ found_dir=
+ found_la=
+ found_so=
+ found_a=
+ eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
+ if test -n "$acl_shlibext"; then
+ shrext=".$acl_shlibext" # typically: shrext=.so
+ else
+ shrext=
+ fi
+ if test $use_additional = yes; then
+ dir="$additional_libdir"
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ for x in $LDFLAGS $LTLIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ case "$x" in
+ -L*)
+ dir=`echo "X$x" | sed -e 's/^X-L//'`
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ ;;
+ esac
+ if test "X$found_dir" != "X"; then
+ break
+ fi
+ done
+ fi
+ if test "X$found_dir" != "X"; then
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name"
+ if test "X$found_so" != "X"; then
+ if test "$enable_rpath" = no \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ else
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $found_dir"
+ fi
+ if test "$acl_hardcode_direct" = yes; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ else
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $found_dir"
+ fi
+ else
+ haveit=
+ for x in $LDFLAGS $LIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir"
+ fi
+ if test "$acl_hardcode_minus_L" != no; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ else
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
+ fi
+ fi
+ fi
+ fi
+ else
+ if test "X$found_a" != "X"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a"
+ else
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name"
+ fi
+ fi
+ additional_includedir=
+ case "$found_dir" in
+ */$acl_libdirstem | */$acl_libdirstem/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+ if test "$name" = 'intl'; then
+ LIBINTL_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ */$acl_libdirstem2 | */$acl_libdirstem2/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+ if test "$name" = 'intl'; then
+ LIBINTL_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ esac
+ if test "X$additional_includedir" != "X"; then
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ for x in $CPPFLAGS $INCINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ fi
+ if test -n "$found_la"; then
+ save_libdir="$libdir"
+ case "$found_la" in
+ */* | *\\*) . "$found_la" ;;
+ *) . "./$found_la" ;;
+ esac
+ libdir="$save_libdir"
+ for dep in $dependency_libs; do
+ case "$dep" in
+ -L*)
+ additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
+ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
+ haveit=
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
+ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ haveit=
+ for x in $LDFLAGS $LIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir"
+ fi
+ fi
+ haveit=
+ for x in $LDFLAGS $LTLIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ ;;
+ -R*)
+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
+ if test "$enable_rpath" != no; then
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $dir"
+ fi
+ fi
+ ;;
+ -l*)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+ ;;
+ *.la)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+ ;;
+ *)
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$dep"
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep"
+ ;;
+ esac
+ done
+ fi
+ else
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name"
+ fi
+ fi
+ fi
+ done
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n "$acl_hardcode_libdir_separator"; then
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
+ else
+ for found_dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$found_dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
+ done
+ fi
+ fi
+ if test "X$ltrpathdirs" != "X"; then
+ for found_dir in $ltrpathdirs; do
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir"
+ done
+ fi
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5
+$as_echo_n "checking for GNU gettext in libintl... " >&6; }
+if eval \${$gt_func_gnugettext_libintl+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ gt_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $INCINTL"
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBINTL"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <libintl.h>
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias (""))
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
+
+int
+main ()
+{
+
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ eval "$gt_func_gnugettext_libintl=yes"
+else
+ eval "$gt_func_gnugettext_libintl=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+ LIBS="$LIBS $LIBICONV"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <libintl.h>
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias (""))
+#else
+#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0
+#endif
+$gt_revision_test_code
+
+int
+main ()
+{
+
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ LIBINTL="$LIBINTL $LIBICONV"
+ LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+ eval "$gt_func_gnugettext_libintl=yes"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+ CPPFLAGS="$gt_save_CPPFLAGS"
+ LIBS="$gt_save_LIBS"
+fi
+eval ac_res=\$$gt_func_gnugettext_libintl
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ fi
+
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+ && test "$PACKAGE" != gettext-runtime \
+ && test "$PACKAGE" != gettext-tools; }; then
+ gt_use_preinstalled_gnugettext=yes
+ else
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ fi
+
+
+
+ if test -n "$INTL_MACOSX_LIBS"; then
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+ LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+ fi
+ fi
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+
+$as_echo "#define ENABLE_NLS 1" >>confdefs.h
+
+ else
+ USE_NLS=no
+ fi
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5
+$as_echo_n "checking whether to use NLS... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+$as_echo "$USE_NLS" >&6; }
+ if test "$USE_NLS" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5
+$as_echo_n "checking where the gettext function comes from... " >&6; }
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ gt_source="external libintl"
+ else
+ gt_source="libc"
+ fi
+ else
+ gt_source="included intl directory"
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5
+$as_echo "$gt_source" >&6; }
+ fi
+
+ if test "$USE_NLS" = "yes"; then
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5
+$as_echo_n "checking how to link with libintl... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5
+$as_echo "$LIBINTL" >&6; }
+
+ for element in $INCINTL; do
+ haveit=
+ for x in $CPPFLAGS; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+ fi
+ done
+
+ fi
+
+
+$as_echo "#define HAVE_GETTEXT 1" >>confdefs.h
+
+
+$as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h
+
+ fi
+
+ POSUB=po
+ fi
+
+
+
+ INTLLIBS="$LIBINTL"
+
+
+
+
+
+
+ if test "x$USE_NLS" = "xyes"; then
+ USE_NLS_TRUE=
+ USE_NLS_FALSE='#'
+else
+ USE_NLS_TRUE='#'
+ USE_NLS_FALSE=
+fi
+
+
+ac_config_files="$ac_config_files Makefile po/Makefile.in doc/Makefile man/Makefile man/config.xml man/po/Makefile man/cs/Makefile man/da/Makefile man/de/Makefile man/es/Makefile man/fi/Makefile man/fr/Makefile man/hu/Makefile man/id/Makefile man/it/Makefile man/ja/Makefile man/ko/Makefile man/pl/Makefile man/pt_BR/Makefile man/ru/Makefile man/sv/Makefile man/tr/Makefile man/zh_CN/Makefile man/zh_TW/Makefile libmisc/Makefile lib/Makefile src/Makefile contrib/Makefile etc/Makefile etc/pam.d/Makefile shadow.spec"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ if test "x$cache_file" != "x/dev/null"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+ if test ! -f "$cache_file" || test -h "$cache_file"; then
+ cat confcache >"$cache_file"
+ else
+ case $cache_file in #(
+ */* | ?:*)
+ mv -f confcache "$cache_file"$$ &&
+ mv -f "$cache_file"$$ "$cache_file" ;; #(
+ *)
+ mv -f confcache "$cache_file" ;;
+ esac
+ fi
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
+ if test -n "$EXEEXT"; then
+ am__EXEEXT_TRUE=
+ am__EXEEXT_FALSE='#'
+else
+ am__EXEEXT_TRUE='#'
+ am__EXEEXT_FALSE=
+fi
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+ as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_SHA_CRYPT_TRUE}" && test -z "${USE_SHA_CRYPT_FALSE}"; then
+ as_fn_error $? "conditional \"USE_SHA_CRYPT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_BCRYPT_TRUE}" && test -z "${USE_BCRYPT_FALSE}"; then
+ as_fn_error $? "conditional \"USE_BCRYPT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${WITH_SU_TRUE}" && test -z "${WITH_SU_FALSE}"; then
+ as_fn_error $? "conditional \"WITH_SU\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_VENDORDIR_TRUE}" && test -z "${HAVE_VENDORDIR_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_VENDORDIR\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${SHADOWGRP_TRUE}" && test -z "${SHADOWGRP_FALSE}"; then
+ as_fn_error $? "conditional \"SHADOWGRP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_REGENERATE_MAN_TRUE}" && test -z "${ENABLE_REGENERATE_MAN_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_REGENERATE_MAN\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_SUBIDS_TRUE}" && test -z "${ENABLE_SUBIDS_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_SUBIDS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${WITH_BTRFS_TRUE}" && test -z "${WITH_BTRFS_FALSE}"; then
+ as_fn_error $? "conditional \"WITH_BTRFS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${WITH_TCB_TRUE}" && test -z "${WITH_TCB_FALSE}"; then
+ as_fn_error $? "conditional \"WITH_TCB\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_PAM_TRUE}" && test -z "${USE_PAM_FALSE}"; then
+ as_fn_error $? "conditional \"USE_PAM\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_PAM_TRUE}" && test -z "${USE_PAM_FALSE}"; then
+ as_fn_error $? "conditional \"USE_PAM\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ACCT_TOOLS_SETUID_TRUE}" && test -z "${ACCT_TOOLS_SETUID_FALSE}"; then
+ as_fn_error $? "conditional \"ACCT_TOOLS_SETUID\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${FCAPS_TRUE}" && test -z "${FCAPS_FALSE}"; then
+ as_fn_error $? "conditional \"FCAPS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_NLS_TRUE}" && test -z "${USE_NLS_FALSE}"; then
+ as_fn_error $? "conditional \"USE_NLS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by shadow $as_me 4.8.1, which was
+generated by GNU Autoconf 2.69. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
+ -q, --quiet, --silent
+ do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <pkg-shadow-devel@lists.alioth.debian.org>.
+shadow home page: <https://github.com/shadow-maint/shadow>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+shadow config.status 4.8.1
+configured by $0, generated by GNU Autoconf 2.69,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=?*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ --*=)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ $as_echo "$ac_cs_version"; exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ $as_echo "$ac_cs_config"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ '') as_fn_error $? "missing file argument" ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+ as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+ --help | --hel | -h )
+ $as_echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+ set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`'
+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`'
+configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in SHELL \
+ECHO \
+PATH_SEPARATOR \
+SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+OBJDUMP \
+deplibs_check_method \
+file_magic_cmd \
+file_magic_glob \
+want_nocaseglob \
+DLLTOOL \
+sharedlib_from_linklib_cmd \
+AR \
+AR_FLAGS \
+archiver_list_spec \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_import \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+lt_cv_nm_interface \
+nm_file_list_spec \
+lt_cv_truncate_bin \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_pic \
+lt_prog_compiler_wl \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+MANIFEST_TOOL \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_separator \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+install_override_mode \
+finish_eval \
+old_striplib \
+striplib; do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postlink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+configure_time_dlsearch_path \
+configure_time_lt_sys_library_path; do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+ac_aux_dir='$ac_aux_dir'
+
+# See if we are running on zsh, and set the options that allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}"; then
+ setopt NO_GLOB_SUBST
+fi
+
+
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ RM='$RM'
+ ofile='$ofile'
+
+
+
+# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+ # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+ # from automake < 1.5.
+ eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+ # Capture the value of LINGUAS because we need it to compute CATALOGS.
+ LINGUAS="${LINGUAS-%UNSET%}"
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+ "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
+ "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+ "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;;
+ "man/config.xml") CONFIG_FILES="$CONFIG_FILES man/config.xml" ;;
+ "man/po/Makefile") CONFIG_FILES="$CONFIG_FILES man/po/Makefile" ;;
+ "man/cs/Makefile") CONFIG_FILES="$CONFIG_FILES man/cs/Makefile" ;;
+ "man/da/Makefile") CONFIG_FILES="$CONFIG_FILES man/da/Makefile" ;;
+ "man/de/Makefile") CONFIG_FILES="$CONFIG_FILES man/de/Makefile" ;;
+ "man/es/Makefile") CONFIG_FILES="$CONFIG_FILES man/es/Makefile" ;;
+ "man/fi/Makefile") CONFIG_FILES="$CONFIG_FILES man/fi/Makefile" ;;
+ "man/fr/Makefile") CONFIG_FILES="$CONFIG_FILES man/fr/Makefile" ;;
+ "man/hu/Makefile") CONFIG_FILES="$CONFIG_FILES man/hu/Makefile" ;;
+ "man/id/Makefile") CONFIG_FILES="$CONFIG_FILES man/id/Makefile" ;;
+ "man/it/Makefile") CONFIG_FILES="$CONFIG_FILES man/it/Makefile" ;;
+ "man/ja/Makefile") CONFIG_FILES="$CONFIG_FILES man/ja/Makefile" ;;
+ "man/ko/Makefile") CONFIG_FILES="$CONFIG_FILES man/ko/Makefile" ;;
+ "man/pl/Makefile") CONFIG_FILES="$CONFIG_FILES man/pl/Makefile" ;;
+ "man/pt_BR/Makefile") CONFIG_FILES="$CONFIG_FILES man/pt_BR/Makefile" ;;
+ "man/ru/Makefile") CONFIG_FILES="$CONFIG_FILES man/ru/Makefile" ;;
+ "man/sv/Makefile") CONFIG_FILES="$CONFIG_FILES man/sv/Makefile" ;;
+ "man/tr/Makefile") CONFIG_FILES="$CONFIG_FILES man/tr/Makefile" ;;
+ "man/zh_CN/Makefile") CONFIG_FILES="$CONFIG_FILES man/zh_CN/Makefile" ;;
+ "man/zh_TW/Makefile") CONFIG_FILES="$CONFIG_FILES man/zh_TW/Makefile" ;;
+ "libmisc/Makefile") CONFIG_FILES="$CONFIG_FILES libmisc/Makefile" ;;
+ "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
+ "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+ "contrib/Makefile") CONFIG_FILES="$CONFIG_FILES contrib/Makefile" ;;
+ "etc/Makefile") CONFIG_FILES="$CONFIG_FILES etc/Makefile" ;;
+ "etc/pam.d/Makefile") CONFIG_FILES="$CONFIG_FILES etc/pam.d/Makefile" ;;
+ "shadow.spec") CONFIG_FILES="$CONFIG_FILES shadow.spec" ;;
+
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp= ac_tmp=
+ trap 'exit_status=$?
+ : "${ac_tmp:=$tmp}"
+ { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+ trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+ ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+ if test -z "$ac_tt"; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any. Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[ ]*#[ ]*define[ ][ ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ for (key in D) D_is_set[key] = 1
+ FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+ line = \$ 0
+ split(line, arg, " ")
+ if (arg[1] == "#") {
+ defundef = arg[2]
+ mac1 = arg[3]
+ } else {
+ defundef = substr(arg[1], 2)
+ mac1 = arg[2]
+ }
+ split(mac1, mac2, "(") #)
+ macro = mac2[1]
+ prefix = substr(line, 1, index(line, defundef) - 1)
+ if (D_is_set[macro]) {
+ # Preserve the white space surrounding the "#".
+ print prefix "define", macro P[macro] D[macro]
+ next
+ } else {
+ # Replace #undef with comments. This is necessary, for example,
+ # in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+ if (defundef == "undef") {
+ print "/*", prefix defundef, macro, "*/"
+ next
+ }
+ }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$ac_tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`$as_echo "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$ac_tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [\\/$]* | ?:[\\/]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
+ "$ac_tmp/out"`; test -z "$ac_out"; } &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&2;}
+
+ rm -f "$ac_tmp/stdin"
+ case $ac_file in
+ -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+ *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+ :H)
+ #
+ # CONFIG_HEADER
+ #
+ if test x"$ac_file" != x-; then
+ {
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+ } >"$ac_tmp/config.h" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ rm -f "$ac_file"
+ mv "$ac_tmp/config.h" "$ac_file" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ fi
+ else
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+ || as_fn_error $? "could not create -" "$LINENO" 5
+ fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$_am_arg" : 'X\(//\)[^/]' \| \
+ X"$_am_arg" : 'X\(//\)$' \| \
+ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+ :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
+
+
+ case $ac_file$ac_mode in
+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+ # Older Autoconf quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ # TODO: see whether this extra hack can be removed once we start
+ # requiring Autoconf 2.70 or later.
+ case $CONFIG_FILES in #(
+ *\'*) :
+ eval set x "$CONFIG_FILES" ;; #(
+ *) :
+ set x $CONFIG_FILES ;; #(
+ *) :
+ ;;
+esac
+ shift
+ # Used to flag and report bootstrapping failures.
+ am_rc=0
+ for am_mf
+ do
+ # Strip MF so we end up with the name of the file.
+ am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile which includes
+ # dependency-tracking related rules and includes.
+ # Grep'ing the whole file directly is not great: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
+ || continue
+ am_dirpart=`$as_dirname -- "$am_mf" ||
+$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$am_mf" : 'X\(//\)[^/]' \| \
+ X"$am_mf" : 'X\(//\)$' \| \
+ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$am_mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ am_filepart=`$as_basename -- "$am_mf" ||
+$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$am_mf" : 'X\(//\)$' \| \
+ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$am_mf" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ { echo "$as_me:$LINENO: cd "$am_dirpart" \
+ && sed -e '/# am--include-marker/d' "$am_filepart" \
+ | $MAKE -f - am--depfiles" >&5
+ (cd "$am_dirpart" \
+ && sed -e '/# am--include-marker/d' "$am_filepart" \
+ | $MAKE -f - am--depfiles) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } || am_rc=$?
+ done
+ if test $am_rc -ne 0; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "Something went wrong bootstrapping makefile fragments
+ for automatic dependency tracking. Try re-running configure with the
+ '--disable-dependency-tracking' option to at least be able to build
+ the package (albeit without support for automatic dependency tracking).
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ { am_dirpart=; unset am_dirpart;}
+ { am_filepart=; unset am_filepart;}
+ { am_mf=; unset am_mf;}
+ { am_rc=; unset am_rc;}
+ rm -f conftest-deps.mk
+}
+ ;;
+ "libtool":C)
+
+ # See if we are running on zsh, and set the options that allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}"; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile=${ofile}T
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+# Generated automatically by $as_me ($PACKAGE) $VERSION
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit, 1996
+
+# Copyright (C) 2014 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program or library that is built
+# using GNU Libtool, you may include this file under the same
+# distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags=''
+
+# Configured defaults for sys_lib_dlsearch_path munging.
+: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# Shared archive member basename,for filename based shared library versioning on AIX.
+shared_archive_member_spec=$shared_archive_member_spec
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
+# The PATH separator for the build system.
+PATH_SEPARATOR=$lt_PATH_SEPARATOR
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# convert \$build file names to \$host format.
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+
+# convert \$build files to toolchain format.
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+
+# An object symbol dumper.
+OBJDUMP=$lt_OBJDUMP
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method = "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# How to find potential files when deplibs_check_method = "file_magic".
+file_magic_glob=$lt_file_magic_glob
+
+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
+want_nocaseglob=$lt_want_nocaseglob
+
+# DLL creation program.
+DLLTOOL=$lt_DLLTOOL
+
+# Command to associate shared and link libraries.
+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
+
+# The archiver.
+AR=$lt_AR
+
+# Flags to create an archive.
+AR_FLAGS=$lt_AR_FLAGS
+
+# How to feed a file listing to the archiver.
+archiver_list_spec=$lt_archiver_list_spec
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm into a list of symbols to manually relocate.
+global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name lister interface.
+nm_interface=$lt_lt_cv_nm_interface
+
+# Specify filename containing input files for \$NM.
+nm_file_list_spec=$lt_nm_file_list_spec
+
+# The root where to search for dependent libraries,and where our libraries should be installed.
+lt_sysroot=$lt_sysroot
+
+# Command to truncate a binary pipe.
+lt_truncate_bin=$lt_lt_cv_truncate_bin
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Manifest tool.
+MANIFEST_TOOL=$lt_MANIFEST_TOOL
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Detected run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path
+
+# Explicit LT_SYS_LIBRARY_PATH set during ./configure time.
+configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \$shlibpath_var if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ cat <<'_LT_EOF' >> "$cfgfile"
+
+# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
+
+# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+# string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+# string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+# string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+# "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+# VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+ case x$2 in
+ x)
+ ;;
+ *:)
+ eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\"
+ ;;
+ x:*)
+ eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\"
+ ;;
+ *::*)
+ eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+ eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\"
+ ;;
+ *)
+ eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\"
+ ;;
+ esac
+}
+
+
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+ for cc_temp in $*""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+ done
+ func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+
+
+# ### END FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test set != "${COLLECT_NAMES+set}"; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+
+ltmain=$ac_aux_dir/ltmain.sh
+
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '$q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+ ;;
+ "po-directories":C)
+ for ac_file in $CONFIG_FILES; do
+ # Support "outfile[:infile[:infile...]]"
+ case "$ac_file" in
+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ esac
+ # PO directories have a Makefile.in generated from Makefile.in.in.
+ case "$ac_file" in */Makefile.in)
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'`
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+ # Treat a directory as a PO directory if and only if it has a
+ # POTFILES.in file. This allows packages to have multiple PO
+ # directories under different names or in different locations.
+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+ rm -f "$ac_dir/POTFILES"
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+ gt_tab=`printf '\t'`
+ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+ POMAKEFILEDEPS="POTFILES.in"
+ # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+ # on $ac_dir but don't depend on user-specified configuration
+ # parameters.
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assignment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ # Hide the ALL_LINGUAS assignment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+ fi
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ GMOFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ done
+ fi
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+ if test -f "$f"; then
+ case "$f" in
+ *.orig | *.bak | *~) ;;
+ *) cat "$f" >> "$ac_dir/Makefile" ;;
+ esac
+ fi
+ done
+ fi
+ ;;
+ esac
+ done ;;
+
+ esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+
+echo
+echo "shadow will be compiled with the following features:"
+echo
+echo " auditing support: $with_audit"
+echo " CrackLib support: $with_libcrack"
+echo " PAM support: $with_libpam"
+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
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..e4c6aae
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,749 @@
+dnl Process this file with autoconf to produce a configure script.
+AC_PREREQ([2.64])
+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])
+AC_CONFIG_HEADERS([config.h])
+
+dnl Some hacks...
+test "$prefix" = "NONE" && prefix="/usr"
+test "$prefix" = "/usr" && exec_prefix=""
+
+AC_GNU_SOURCE
+
+AM_DISABLE_SHARED
+AM_ENABLE_STATIC
+
+AM_MAINTAINER_MODE
+
+dnl Checks for programs.
+AC_PROG_CC
+AC_ISC_POSIX
+AC_PROG_LN_S
+AC_PROG_YACC
+AM_PROG_LIBTOOL
+
+dnl Checks for libraries.
+
+dnl Checks for header files.
+AC_HEADER_DIRENT
+AC_HEADER_STDC
+AC_HEADER_SYS_WAIT
+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/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)
+
+dnl shadow now uses the libc's shadow implementation
+AC_CHECK_HEADER([shadow.h],,[AC_MSG_ERROR([You need a libc with shadow.h])])
+
+AC_CHECK_FUNCS(l64a fchmod fchown fsync futimes getgroups gethostname getspnam \
+ gettimeofday getusershell getutent initgroups lchown lckpwdf lstat \
+ lutimes memcpy memset setgroups sigaction strchr updwtmp updwtmpx innetgr \
+ getpwnam_r getpwuid_r getgrnam_r getgrgid_r getspnam_r getaddrinfo \
+ ruserok)
+AC_SYS_LARGEFILE
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+AC_TYPE_UID_T
+AC_TYPE_OFF_T
+AC_TYPE_PID_T
+AC_TYPE_MODE_T
+AC_HEADER_STAT
+AC_CHECK_MEMBERS([struct stat.st_rdev])
+AC_CHECK_MEMBERS([struct stat.st_atim])
+AC_CHECK_MEMBERS([struct stat.st_atimensec])
+AC_CHECK_MEMBERS([struct stat.st_mtim])
+AC_CHECK_MEMBERS([struct stat.st_mtimensec])
+AC_HEADER_TIME
+AC_STRUCT_TM
+
+AC_CHECK_MEMBERS([struct utmp.ut_type,
+ struct utmp.ut_id,
+ struct utmp.ut_name,
+ struct utmp.ut_user,
+ struct utmp.ut_host,
+ struct utmp.ut_syslen,
+ struct utmp.ut_addr,
+ struct utmp.ut_addr_v6,
+ struct utmp.ut_time,
+ struct utmp.ut_xtime,
+ struct utmp.ut_tv],,,[[#include <utmp.h>]])
+
+AC_CHECK_MEMBERS([struct utmpx.ut_name,
+ struct utmpx.ut_host,
+ struct utmpx.ut_syslen,
+ struct utmpx.ut_addr,
+ struct utmpx.ut_addr_v6,
+ struct utmpx.ut_time,
+ struct utmpx.ut_xtime],,,[[#include <utmpx.h>]])
+
+if test "$ac_cv_header_lastlog_h" = "yes"; then
+ AC_CACHE_CHECK(for ll_host in struct lastlog,
+ ac_cv_struct_lastlog_ll_host,
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <lastlog.h>],
+ [struct lastlog ll; char *cp = ll.ll_host;]
+ )],
+ [ac_cv_struct_lastlog_ll_host=yes],
+ [ac_cv_struct_lastlog_ll_host=no]
+ )
+ )
+
+ if test "$ac_cv_struct_lastlog_ll_host" = "yes"; then
+ AC_DEFINE(HAVE_LL_HOST, 1,
+ [Define if struct lastlog has ll_host])
+ fi
+fi
+
+dnl Checks for library functions.
+AC_TYPE_GETGROUPS
+AC_TYPE_SIGNAL
+AC_FUNC_UTIME_NULL
+AC_FUNC_STRFTIME
+AC_REPLACE_FUNCS(mkdir putgrent putpwent putspent rename rmdir)
+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,
+ ac_cv_libc_shadowgrp,
+ AC_RUN_IFELSE([AC_LANG_SOURCE([
+ #include <shadow.h>
+ main()
+ {
+ struct sgrp *sg = sgetsgent("test:x::");
+ /* NYS libc on Red Hat 3.0.3 has broken shadow group support */
+ return !sg || !sg->sg_adm || !sg->sg_mem;
+ }]
+ )],
+ [ac_cv_libc_shadowgrp=yes],
+ [ac_cv_libc_shadowgrp=no],
+ [ac_cv_libc_shadowgrp=no]
+ )
+ )
+
+ if test "$ac_cv_libc_shadowgrp" = "yes"; then
+ AC_DEFINE(HAVE_SHADOWGRP, 1, [Have working shadow group support in libc])
+ fi
+fi
+
+AC_CACHE_CHECK([location of shared mail directory], shadow_cv_maildir,
+[for shadow_cv_maildir in /var/mail /var/spool/mail /usr/spool/mail /usr/mail none; do
+ if test -d $shadow_cv_maildir; then
+ break
+ fi
+done])
+if test $shadow_cv_maildir != none; then
+ AC_DEFINE_UNQUOTED(MAIL_SPOOL_DIR, "$shadow_cv_maildir",
+ [Location of system mail spool directory.])
+fi
+
+AC_CACHE_CHECK([location of user mail file], shadow_cv_mailfile,
+[for shadow_cv_mailfile in Mailbox mailbox Mail mail .mail none; do
+ if test -f $HOME/$shadow_cv_mailfile; then
+ break
+ fi
+done])
+if test $shadow_cv_mailfile != none; then
+ AC_DEFINE_UNQUOTED(MAIL_SPOOL_FILE, "$shadow_cv_mailfile",
+ [Name of user's mail spool file if stored in user's home directory.])
+fi
+
+AC_CACHE_CHECK([location of utmp], shadow_cv_utmpdir,
+[for shadow_cv_utmpdir in /var/run /var/adm /usr/adm /etc none; do
+ if test -f $shadow_cv_utmpdir/utmp; then
+ break
+ fi
+done])
+if test "$shadow_cv_utmpdir" = "none"; then
+ AC_MSG_WARN(utmp file not found)
+fi
+AC_DEFINE_UNQUOTED(_UTMP_FILE, "$shadow_cv_utmpdir/utmp",
+ [Path for utmp file.])
+
+AC_CACHE_CHECK([location of faillog/lastlog/wtmp], shadow_cv_logdir,
+[for shadow_cv_logdir in /var/log /var/adm /usr/adm /etc; do
+ if test -d $shadow_cv_logdir; then
+ break
+ fi
+done])
+AC_DEFINE_UNQUOTED(_WTMP_FILE, "$shadow_cv_logdir/wtmp",
+ [Path for wtmp file.])
+AC_DEFINE_UNQUOTED(LASTLOG_FILE, "$shadow_cv_logdir/lastlog",
+ [Path for lastlog file.])
+AC_DEFINE_UNQUOTED(FAILLOG_FILE, "$shadow_cv_logdir/faillog",
+ [Path for faillog file.])
+
+AC_CACHE_CHECK([location of the passwd program], shadow_cv_passwd_dir,
+[if test -f /usr/bin/passwd; then
+ shadow_cv_passwd_dir=/usr/bin
+else
+ shadow_cv_passwd_dir=/bin
+fi])
+AC_DEFINE_UNQUOTED(PASSWD_PROGRAM, "$shadow_cv_passwd_dir/passwd",
+ [Path to passwd program.])
+
+dnl XXX - quick hack, should disappear before anyone notices :).
+AC_DEFINE(USE_SYSLOG, 1, [Define to use syslog().])
+if test "$ac_cv_func_ruserok" = "yes"; then
+ AC_DEFINE(RLOGIN, 1, [Define if login should support the -r flag for rlogind.])
+ AC_DEFINE(RUSEROK, 0, [Define to the ruserok() "success" return value (0 or 1).])
+fi
+
+AC_ARG_ENABLE(shadowgrp,
+ [AC_HELP_STRING([--enable-shadowgrp], [enable shadow group support @<:@default=yes@:>@])],
+ [case "${enableval}" in
+ yes) enable_shadowgrp="yes" ;;
+ no) enable_shadowgrp="no" ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for --enable-shadowgrp) ;;
+ esac],
+ [enable_shadowgrp="yes"]
+)
+
+AC_ARG_ENABLE(man,
+ [AC_HELP_STRING([--enable-man],
+ [regenerate roff man pages from Docbook @<:@default=no@:>@])],
+ [enable_man="${enableval}"],
+ [enable_man="no"]
+)
+
+AC_ARG_ENABLE(account-tools-setuid,
+ [AC_HELP_STRING([--enable-account-tools-setuid],
+ [Install the user and group management tools setuid and authenticate the callers. This requires --with-pam.])],
+ [case "${enableval}" in
+ yes) enable_acct_tools_setuid="yes" ;;
+ no) enable_acct_tools_setuid="no" ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for --enable-account-tools-setuid)
+ ;;
+ esac],
+ [enable_acct_tools_setuid="no"]
+)
+
+AC_ARG_ENABLE(utmpx,
+ [AC_HELP_STRING([--enable-utmpx],
+ [enable loggin in utmpx / wtmpx @<:@default=no@:>@])],
+ [case "${enableval}" in
+ yes) enable_utmpx="yes" ;;
+ no) enable_utmpx="no" ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for --enable-utmpx) ;;
+ esac],
+ [enable_utmpx="no"]
+)
+
+AC_ARG_ENABLE(subordinate-ids,
+ [AC_HELP_STRING([--enable-subordinate-ids],
+ [support subordinate ids @<:@default=yes@:>@])],
+ [enable_subids="${enableval}"],
+ [enable_subids="maybe"]
+)
+
+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])
+AC_ARG_WITH(acl,
+ [AC_HELP_STRING([--with-acl], [use ACL support @<:@default=yes if found@:>@])],
+ [with_acl=$withval], [with_acl=maybe])
+AC_ARG_WITH(attr,
+ [AC_HELP_STRING([--with-attr], [use Extended Attribute support @<:@default=yes if found@:>@])],
+ [with_attr=$withval], [with_attr=maybe])
+AC_ARG_WITH(skey,
+ [AC_HELP_STRING([--with-skey], [use S/Key support @<:@default=no@:>@])],
+ [with_skey=$withval], [with_skey=no])
+AC_ARG_WITH(tcb,
+ [AC_HELP_STRING([--with-tcb], [use tcb support (incomplete) @<:@default=yes if found@:>@])],
+ [with_tcb=$withval], [with_tcb=maybe])
+AC_ARG_WITH(libcrack,
+ [AC_HELP_STRING([--with-libcrack], [use libcrack @<:@default=no@:>@])],
+ [with_libcrack=$withval], [with_libcrack=no])
+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
+elif test "$with_group_name_max_length" = "yes" ; then
+ with_group_name_max_length=16
+fi
+AC_DEFINE_UNQUOTED(GROUP_NAME_MAX_LENGTH, $with_group_name_max_length, [max group name length])
+AC_SUBST(GROUP_NAME_MAX_LENGTH)
+GROUP_NAME_MAX_LENGTH="$with_group_name_max_length"
+
+AM_CONDITIONAL(USE_SHA_CRYPT, test "x$with_sha_crypt" = "xyes")
+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).
+
+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
+AM_CONDITIONAL(SHADOWGRP, test "x$enable_shadowgrp" = "xyes")
+
+if test "$enable_man" = "yes"; then
+ dnl
+ dnl Check for xsltproc
+ dnl
+ 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.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
+AM_CONDITIONAL(ENABLE_REGENERATE_MAN, test "x$enable_man" != "xno")
+
+if test "$enable_subids" != "no"; then
+ dnl
+ dnl FIXME: check if 32 bit UIDs/GIDs are supported by libc
+ dnl
+ AC_CHECK_SIZEOF([uid_t],, [#include "sys/types.h"])
+ AC_CHECK_SIZEOF([gid_t],, [#include "sys/types.h"])
+
+ if test "$ac_cv_sizeof_uid_t" -ge 4 && test "$ac_cv_sizeof_gid_t" -ge 4; then
+ AC_DEFINE(ENABLE_SUBIDS, 1, [Define to support the subordinate IDs.])
+ enable_subids="yes"
+ else
+ if test "x$enable_subids" = "xyes"; then
+ AC_MSG_ERROR([Cannot enable support the subordinate IDs on systems where gid_t or uid_t has less than 32 bits])
+ fi
+ enable_subids="no"
+ fi
+fi
+AM_CONDITIONAL(ENABLE_SUBIDS, test "x$enable_subids" != "xno")
+
+AC_SUBST(LIBCRYPT)
+AC_CHECK_LIB(crypt, crypt, [LIBCRYPT=-lcrypt],
+ [AC_MSG_ERROR([crypt() not found])])
+
+AC_SUBST(LIBACL)
+if test "$with_acl" != "no"; then
+ AC_CHECK_HEADERS(acl/libacl.h attr/error_context.h, [acl_header="yes"], [acl_header="no"])
+ if test "$acl_header$with_acl" = "noyes" ; then
+ AC_MSG_ERROR([acl/libacl.h or attr/error_context.h is missing])
+ elif test "$acl_header" = "yes" ; then
+ AC_CHECK_LIB(acl, perm_copy_file,
+ [AC_CHECK_LIB(acl, perm_copy_fd,
+ [acl_lib="yes"],
+ [acl_lib="no"])],
+ [acl_lib="no"])
+ if test "$acl_lib$with_acl" = "noyes" ; then
+ AC_MSG_ERROR([libacl not found])
+ elif test "$acl_lib" = "no" ; then
+ with_acl="no"
+ else
+ AC_DEFINE(WITH_ACL, 1,
+ [Build shadow with ACL support])
+ LIBACL="-lacl"
+ with_acl="yes"
+ fi
+ else
+ with_acl="no"
+ fi
+fi
+
+AC_SUBST(LIBATTR)
+if test "$with_attr" != "no"; then
+ AC_CHECK_HEADERS(attr/libattr.h attr/error_context.h, [attr_header="yes"], [attr_header="no"])
+ if test "$attr_header$with_attr" = "noyes" ; then
+ AC_MSG_ERROR([attr/libattr.h or attr/error_context.h is missing])
+ elif test "$attr_header" = "yes" ; then
+ AC_CHECK_LIB(attr, attr_copy_file,
+ [AC_CHECK_LIB(attr, attr_copy_fd,
+ [attr_lib="yes"],
+ [attr_lib="no"])],
+ [attr_lib="no"])
+ if test "$attr_lib$with_attr" = "noyes" ; then
+ AC_MSG_ERROR([libattr not found])
+ elif test "$attr_lib" = "no" ; then
+ with_attr="no"
+ else
+ AC_DEFINE(WITH_ATTR, 1,
+ [Build shadow with Extended Attributes support])
+ LIBATTR="-lattr"
+ with_attr="yes"
+ fi
+ else
+ with_attr="no"
+ fi
+fi
+
+AC_SUBST(LIBAUDIT)
+if test "$with_audit" != "no"; then
+ AC_CHECK_HEADER(libaudit.h, [audit_header="yes"], [audit_header="no"])
+ if test "$audit_header$with_audit" = "noyes" ; then
+ AC_MSG_ERROR([libaudit.h is missing])
+ elif test "$audit_header" = "yes"; then
+ AC_CHECK_DECL(AUDIT_ADD_USER,,[audit_header="no"],[#include <libaudit.h>])
+ AC_CHECK_DECL(AUDIT_DEL_USER,,[audit_header="no"],[#include <libaudit.h>])
+ AC_CHECK_DECL(AUDIT_ADD_GROUP,,[audit_header="no"],[#include <libaudit.h>])
+ AC_CHECK_DECL(AUDIT_DEL_GROUP,,[audit_header="no"],[#include <libaudit.h>])
+ if test "$audit_header$with_audit" = "noyes" ; then
+ AC_MSG_ERROR([AUDIT_ADD_USER AUDIT_DEL_USER AUDIT_ADD_GROUP or AUDIT_DEL_GROUP missing from libaudit.h])
+ fi
+ fi
+ if test "$audit_header" = "yes"; then
+ AC_CHECK_LIB(audit, audit_log_acct_message,
+ [audit_lib="yes"], [audit_lib="no"])
+ if test "$audit_lib$with_audit" = "noyes" ; then
+ AC_MSG_ERROR([libaudit not found])
+ elif test "$audit_lib" = "no" ; then
+ with_audit="no"
+ else
+ AC_DEFINE(WITH_AUDIT, 1,
+ [Define if you want to enable Audit messages])
+ LIBAUDIT="-laudit"
+ with_audit="yes"
+ fi
+ else
+ with_audit="no"
+ fi
+fi
+
+AC_SUBST(LIBCRACK)
+if test "$with_libcrack" = "yes"; then
+ echo "checking cracklib flavour, don't be surprised by the results"
+ AC_CHECK_LIB(crack, FascistCheck,
+ [LIBCRACK=-lcrack AC_DEFINE(HAVE_LIBCRACK, 1, [Defined if you have libcrack.])])
+ AC_CHECK_LIB(crack, FascistHistory,
+ AC_DEFINE(HAVE_LIBCRACK_HIST, 1, [Defined if you have the ts&szs cracklib.]))
+ AC_CHECK_LIB(crack, FascistHistoryPw,
+ 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
+ AC_CHECK_HEADERS(selinux/selinux.h, [selinux_header="yes"], [selinux_header="no"])
+ if test "$selinux_header$with_selinux" = "noyes" ; then
+ AC_MSG_ERROR([selinux/selinux.h is missing])
+ fi
+
+ AC_CHECK_HEADERS(semanage/semanage.h, [semanage_header="yes"], [semanage_header="no"])
+ if test "$semanage_header$with_selinux" = "noyes" ; then
+ AC_MSG_ERROR([semanage/semanage.h is missing])
+ fi
+
+ if test "$selinux_header$semanage_header" = "yesyes" ; then
+ AC_CHECK_LIB(selinux, is_selinux_enabled, [selinux_lib="yes"], [selinux_lib="no"])
+ if test "$selinux_lib$with_selinux" = "noyes" ; then
+ AC_MSG_ERROR([libselinux not found])
+ fi
+
+ AC_CHECK_LIB(semanage, semanage_connect, [semanage_lib="yes"], [semanage_lib="no"])
+ if test "$semanage_lib$with_selinux" = "noyes" ; then
+ AC_MSG_ERROR([libsemanage not found])
+ fi
+
+ if test "$selinux_lib$semanage_lib" = "yesyes" ; then
+ AC_DEFINE(WITH_SELINUX, 1,
+ [Build shadow with SELinux support])
+ LIBSELINUX="-lselinux"
+ LIBSEMANAGE="-lsemanage"
+ with_selinux="yes"
+ else
+ with_selinux="no"
+ fi
+ else
+ with_selinux="no"
+ fi
+fi
+
+AC_SUBST(LIBTCB)
+if test "$with_tcb" != "no"; then
+ AC_CHECK_HEADERS(tcb.h, [tcb_header="yes"], [tcb_header="no"])
+ if test "$tcb_header$with_tcb" = "noyes" ; then
+ AC_MSG_ERROR([tcb.h is missing])
+ elif test "$tcb_header" = "yes" ; then
+ AC_CHECK_LIB(tcb, tcb_is_suspect, [tcb_lib="yes"], [tcb_lib="no"])
+ if test "$tcb_lib$with_tcb" = "noyes" ; then
+ AC_MSG_ERROR([libtcb not found])
+ elif test "$tcb_lib" = "no" ; then
+ with_tcb="no"
+ else
+ AC_DEFINE(WITH_TCB, 1, [Build shadow with tcb support (incomplete)])
+ LIBTCB="-ltcb"
+ with_tcb="yes"
+ fi
+ else
+ with_tcb="no"
+ fi
+fi
+AM_CONDITIONAL(WITH_TCB, test x$with_tcb = xyes)
+
+AC_SUBST(LIBPAM)
+if test "$with_libpam" != "no"; then
+ AC_CHECK_LIB(pam, pam_start,
+ [pam_lib="yes"], [pam_lib="no"])
+ if test "$pam_lib$with_libpam" = "noyes" ; then
+ AC_MSG_ERROR(libpam not found)
+ fi
+
+ LIBPAM="-lpam"
+ pam_conv_function="no"
+
+ AC_CHECK_LIB(pam, openpam_ttyconv,
+ [pam_conv_function="openpam_ttyconv"],
+ AC_CHECK_LIB(pam_misc, misc_conv,
+ [pam_conv_function="misc_conv"; LIBPAM="$LIBPAM -lpam_misc"])
+ )
+
+ if test "$pam_conv_function$with_libpam" = "noyes" ; then
+ AC_MSG_ERROR(PAM conversation function not found)
+ fi
+
+ pam_headers_found=no
+ AC_CHECK_HEADERS( [security/openpam.h security/pam_misc.h],
+ [ pam_headers_found=yes ; break ], [],
+ [ #include <security/pam_appl.h> ] )
+ if test "$pam_headers_found$with_libpam" = "noyes" ; then
+ AC_MSG_ERROR(PAM headers not found)
+ fi
+
+
+ if test "$pam_lib$pam_headers_found" = "yesyes" -a "$pam_conv_function" != "no" ; then
+ with_libpam="yes"
+ else
+ with_libpam="no"
+ unset LIBPAM
+ fi
+fi
+dnl Now with_libpam is either yes or no
+if test "$with_libpam" = "yes"; then
+ AC_CHECK_DECLS([PAM_ESTABLISH_CRED,
+ PAM_DELETE_CRED,
+ PAM_NEW_AUTHTOK_REQD,
+ PAM_DATA_SILENT],
+ [], [], [#include <security/pam_appl.h>])
+
+
+ save_libs=$LIBS
+ LIBS="$LIBS $LIBPAM"
+ # We do not use AC_CHECK_FUNCS to avoid duplicated definition with
+ # Linux PAM.
+ AC_CHECK_FUNC(pam_fail_delay, [AC_DEFINE(HAS_PAM_FAIL_DELAY, 1, [Define to 1 if you have the declaration of 'pam_fail_delay'])])
+ LIBS=$save_libs
+
+ AC_DEFINE(USE_PAM, 1, [Define to support Pluggable Authentication Modules])
+ 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)
+ AC_MSG_RESULT(no)
+else
+ AC_DEFINE(SU_ACCESS, 1, [Define to support /etc/suauth su access control.])
+ AM_CONDITIONAL(USE_PAM, [false])
+ AC_MSG_CHECKING(use login and su access checking if PAM not used)
+ AC_MSG_RESULT(yes)
+fi
+
+if test "$enable_acct_tools_setuid" != "no"; then
+ if test "$with_libpam" != "yes"; then
+ if test "$enable_acct_tools_setuid" = "yes"; then
+ AC_MSG_ERROR(PAM support is required for --enable-account-tools-setuid)
+ else
+ enable_acct_tools_setuid="no"
+ fi
+ else
+ enable_acct_tools_setuid="yes"
+ fi
+ if test "$enable_acct_tools_setuid" = "yes"; then
+ AC_DEFINE(ACCT_TOOLS_SETUID,
+ 1,
+ [Define if account management tools should be installed setuid and authenticate the callers])
+ fi
+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
+ AC_CHECK_LIB(md, MD5Init, [LIBMD=-lmd])
+ AC_CHECK_LIB(skey, skeychallenge, [LIBSKEY=-lskey],
+ [AC_MSG_ERROR([liskey missing. You can download S/Key source code from http://rsync1.it.gentoo.org/gentoo/distfiles/skey-1.1.5.tar.bz2])])
+ AC_DEFINE(SKEY, 1, [Define to support S/Key logins.])
+ AC_TRY_COMPILE([
+ #include <stdio.h>
+ #include <skey.h>
+ ],[
+ skeychallenge((void*)0, (void*)0, (void*)0, 0);
+ ],[AC_DEFINE(SKEY_BSD_STYLE, 1, [Define to support newer BSD S/Key API])])
+fi
+
+if test "$enable_utmpx" = "yes"; then
+ if test "$ac_cv_header_utmpx_h" != "yes"; then
+ AC_MSG_ERROR([The utmpx.h header file is required for utmpx support.])
+ fi
+ AC_DEFINE(USE_UTMPX,
+ 1,
+ [Define if utmpx should be used])
+fi
+
+AC_DEFINE_UNQUOTED(SHELL, ["$SHELL"], [The default shell.])
+
+AM_GNU_GETTEXT_VERSION(0.16)
+AM_GNU_GETTEXT([external], [need-ngettext])
+AM_CONDITIONAL(USE_NLS, test "x$USE_NLS" = "xyes")
+
+AC_CONFIG_FILES([
+ Makefile
+ po/Makefile.in
+ doc/Makefile
+ man/Makefile
+ man/config.xml
+ man/po/Makefile
+ man/cs/Makefile
+ man/da/Makefile
+ man/de/Makefile
+ man/es/Makefile
+ man/fi/Makefile
+ man/fr/Makefile
+ man/hu/Makefile
+ man/id/Makefile
+ man/it/Makefile
+ man/ja/Makefile
+ man/ko/Makefile
+ man/pl/Makefile
+ man/pt_BR/Makefile
+ man/ru/Makefile
+ man/sv/Makefile
+ man/tr/Makefile
+ man/zh_CN/Makefile
+ man/zh_TW/Makefile
+ libmisc/Makefile
+ lib/Makefile
+ src/Makefile
+ contrib/Makefile
+ etc/Makefile
+ etc/pam.d/Makefile
+ shadow.spec
+])
+AC_OUTPUT
+
+echo
+echo "shadow will be compiled with the following features:"
+echo
+echo " auditing support: $with_audit"
+echo " CrackLib support: $with_libcrack"
+echo " PAM support: $with_libpam"
+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
diff --git a/contrib/Makefile.am b/contrib/Makefile.am
new file mode 100644
index 0000000..2c3160e
--- /dev/null
+++ b/contrib/Makefile.am
@@ -0,0 +1,6 @@
+# This is a dummy Makefile.am to get automake work flawlessly,
+# and also cooperate to make a distribution for `make dist'
+
+EXTRA_DIST = README adduser.c adduser-old.c adduser.sh adduser2.sh \
+ atudel groupmems.shar pwdauth.c shadow-anonftp.patch \
+ udbachk.tgz
diff --git a/contrib/Makefile.in b/contrib/Makefile.in
new file mode 100644
index 0000000..bd88236
--- /dev/null
+++ b/contrib/Makefile.in
@@ -0,0 +1,482 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# This is a dummy Makefile.am to get automake work flawlessly,
+# and also cooperate to make a distribution for `make dist'
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = contrib
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = README adduser.c adduser-old.c adduser.sh adduser2.sh \
+ atudel groupmems.shar pwdauth.c shadow-anonftp.patch \
+ udbachk.tgz
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign contrib/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign contrib/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/contrib/README b/contrib/README
new file mode 100644
index 0000000..c4d1bc0
--- /dev/null
+++ b/contrib/README
@@ -0,0 +1,10 @@
+People keep sending various adduser programs and scripts... They are
+all in this directory. I haven't tested them, use at your own risk.
+Anyway, the best one I've seen so far is adduser-3.x from Debian.
+
+atudel is a perl script to remove at jobs owned by the specified user
+(atrm in at-2.9 for Linux can't do that).
+
+udbachk.tgz is a passwd/group/shadow file integrity checker.
+
+--marekm
diff --git a/contrib/adduser-old.c b/contrib/adduser-old.c
new file mode 100644
index 0000000..1bf1f22
--- /dev/null
+++ b/contrib/adduser-old.c
@@ -0,0 +1,300 @@
+/****
+** 03/17/96
+** hacked a bit more, removed unused code, cleaned up for gcc -Wall.
+** --marekm
+**
+** 02/26/96
+** modified to call shadow utils (useradd,chage,passwd) on shadowed
+** systems - Cristian Gafton, gafton@sorosis.ro
+**
+** 6/27/95
+** shadow-adduser 1.4:
+**
+** now it copies the /etc/skel dir into the person's dir,
+** makes the mail folders, changed some defaults and made a 'make
+** install' just for the hell of it.
+**
+** Greg Gallagher
+** CIN.Net
+**
+** 1/28/95
+** shadow-adduser 1.3:
+**
+** 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.
+**
+** Brandon
+*****
+** 01/27/95
+**
+** shadow-adduser 1.2:
+** I took the C source from adduser-shadow (credits are below) and made
+** it a little more worthwhile. Many small changes... Here's
+** the ones I can remember:
+**
+** Removed support for non-shadowed systems (if you don't have shadow,
+** use the original adduser, don't get this shadow version!)
+** Added support for the correct /etc/shadow fields (Min days before
+** password change, max days before password change, Warning days,
+** and how many days from expiry date does the account go invalid)
+** The previous version just left all of those fields blank.
+** There is still one field left (expiry date for the account, period)
+** which I have left blank because I do not use it and didn't want to
+** spend any more time on this. I'm sure someone will put it in and
+** tack another plethora of credits on here. :)
+** Added in the password date field, which should always reflect the last
+** date the password was changed, for expiry purposes. "passwd" always
+** updates this field, so the adduser program should set it up right
+** initially (or a user could keep thier initial password forever ;)
+** The number is in days since Jan 1st, 1970.
+**
+** Have fun with it, and someone please make
+** a real version(this is still just a hack)
+** for us all to use (and Email it to me???)
+**
+** Brandon
+** photon@usis.com
+**
+*****
+** adduser 1.0: add a new user account (For systems not using shadow)
+** With a nice little interface and a will to do all the work for you.
+**
+** Craig Hagan
+** hagan@opine.cs.umass.edu
+**
+** Modified to really work, look clean, and find unused uid by Chris Cappuccio
+** chris@slinky.cs.umass.edu
+**
+*****
+**
+** 01/19/95
+**
+** FURTHER modifications to enable shadow passwd support (kludged, but
+** no more so than the original) by Dan Crowson - dcrowson@mo.net
+**
+** Search on DAN for all changes...
+**
+*****
+**
+** cc -O -o adduser adduser.c
+** Use gcc if you have it... (political reasons beyond my control) (chris)
+**
+** I've gotten this program to work with success under Linux (without
+** shadow) and SunOS 4.1.3. I would assume it should work pretty well
+** on any system that uses no shadow. (chris)
+**
+** If you have no crypt() then try
+** cc -DNO_CRYPT -O -o adduser adduser.c xfdes.c
+** I'm not sure how login operates with no crypt()... I guess
+** the same way we're doing it here.
+*/
+
+#include <pwd.h>
+#include <grp.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <time.h>
+#include <sys/types.h>
+#include <sys/timeb.h>
+#include <sys/time.h>
+#include <sys/stat.h>
+
+#define DEFAULT_SHELL "/bin/bash" /* because BASH is your friend */
+#define DEFAULT_HOME "/home"
+#define USERADD_PATH "/usr/sbin/useradd"
+#define CHAGE_PATH "/usr/sbin/chage"
+#define PASSWD_PATH "/usr/bin/passwd"
+#define DEFAULT_GROUP 100
+
+#define DEFAULT_MAX_PASS 60
+#define DEFAULT_WARN_PASS 10
+/* if you use this feature, you will get a lot of complaints from users
+ who rarely use their accounts :) (something like 3 months would be
+ more reasonable) --marekm */
+#define DEFAULT_USER_DIE /* 10 */ 0
+
+void main()
+{
+ char foo[32];
+ char uname[9],person[32],dir[32],shell[32];
+ unsigned int group,min_pass,max_pass,warn_pass,user_die;
+ /* the group and uid of the new user */
+ int bad=0,done=0,correct=0,gets_warning=0;
+ char cmd[255];
+ struct group *grp;
+
+ /* flags, in order:
+ * bad to see if the username is in /etc/passwd, or if strange stuff has
+ * been typed if the user might be put in group 0
+ * done allows the program to exit when a user has been added
+ * correct loops until a password is found that isn't in /etc/passwd
+ * gets_warning allows the fflush to be skipped for the first gets
+ * so that output is still legible
+ */
+
+ /* The real program starts HERE! */
+
+ if(geteuid()!=0)
+ {
+ printf("It seems you don't have access to add a new user. Try\n");
+ printf("logging in as root or su root to gain super-user access.\n");
+ exit(1);
+ }
+
+ /* Sanity checks
+ */
+
+ if (!(grp=getgrgid(DEFAULT_GROUP))){
+ printf("Error: the default group %d does not exist on this system!\n",
+ DEFAULT_GROUP);
+ printf("adduser must be recompiled.\n");
+ exit(1);
+ };
+
+ while(!correct) { /* loop until a "good" uname is chosen */
+ while(!done) {
+ printf("\nLogin to add (^C to quit): ");
+ if(gets_warning) /* if the warning was already shown */
+ fflush(stdout); /* fflush stdout, otherwise set the flag */
+ else
+ gets_warning=1;
+
+ gets(uname);
+ if(!strlen(uname)) {
+ printf("Empty input.\n");
+ done=0;
+ continue;
+ };
+
+ /* what I saw here before made me think maybe I was running DOS */
+ /* might this be a solution? (chris) */
+ if (getpwnam(uname) != NULL) {
+ printf("That name is in use, choose another.\n");
+ done=0;
+ } else
+ done=1;
+ }; /* done, we have a valid new user name */
+
+ /* all set, get the rest of the stuff */
+ printf("\nEditing information for new user [%s]\n",uname);
+
+ printf("\nFull Name [%s]: ",uname);
+ gets(person);
+ if (!strlen(person)) {
+ bzero(person,sizeof(person));
+ strcpy(person,uname);
+ };
+
+ do {
+ bad=0;
+ printf("GID [%d]: ",DEFAULT_GROUP);
+ gets(foo);
+ if (!strlen(foo))
+ group=DEFAULT_GROUP;
+ else
+ if (isdigit (*foo)) {
+ group = atoi(foo);
+ if (! (grp = getgrgid (group))) {
+ printf("unknown gid %s\n",foo);
+ group=DEFAULT_GROUP;
+ bad=1;
+ };
+ } else
+ if ((grp = getgrnam (foo)))
+ group = grp->gr_gid;
+ else {
+ printf("unknown group %s\n",foo);
+ group=DEFAULT_GROUP;
+ bad=1;
+ }
+ if (group==0){ /* You're not allowed to make root group users! */
+ printf("Creation of root group users not allowed (must be done by hand)\n");
+ group=DEFAULT_GROUP;
+ bad=1;
+ };
+ } while(bad);
+
+
+ fflush(stdin);
+
+ printf("\nIf home dir ends with a / then [%s] will be appended to it\n",uname);
+ printf("Home Directory [%s/%s]: ",DEFAULT_HOME,uname);
+ fflush(stdout);
+ gets(dir);
+ if (!strlen(dir)) { /* hit return */
+ sprintf(dir,"%s/%s",DEFAULT_HOME,uname);
+ fflush(stdin);
+ } else
+ if (dir[strlen(dir)-1]=='/')
+ sprintf(dir+strlen(dir),"%s",uname);
+
+ printf("\nShell [%s]: ",DEFAULT_SHELL);
+ fflush(stdout);
+ gets(shell);
+ if (!strlen(shell))
+ sprintf(shell,"%s",DEFAULT_SHELL);
+
+ printf("\nMin. Password Change Days [0]: ");
+ gets(foo);
+ min_pass=atoi(foo);
+
+ printf("Max. Password Change Days [%d]: ",DEFAULT_MAX_PASS);
+ gets(foo);
+ if (strlen(foo) > 1)
+ max_pass = atoi(foo);
+ else
+ max_pass = DEFAULT_MAX_PASS;
+
+ printf("Password Warning Days [%d]: ",DEFAULT_WARN_PASS);
+ gets(foo);
+ warn_pass = atoi(foo);
+ if (warn_pass==0)
+ warn_pass = DEFAULT_WARN_PASS;
+
+ printf("Days after Password Expiry for Account Locking [%d]: ",DEFAULT_USER_DIE);
+ gets(foo);
+ user_die = atoi(foo);
+ if (user_die == 0)
+ user_die = DEFAULT_USER_DIE;
+
+ printf("\nInformation for new user [%s] [%s]:\n",uname,person);
+ printf("Home directory: [%s] Shell: [%s]\n",dir,shell);
+ printf("GID: [%d]\n",group);
+ printf("MinPass: [%d] MaxPass: [%d] WarnPass: [%d] UserExpire: [%d]\n",
+ min_pass,max_pass,warn_pass,user_die);
+ printf("\nIs this correct? [y/N]: ");
+ fflush(stdout);
+ gets(foo);
+
+ done=bad=correct=(foo[0]=='y'||foo[0]=='Y');
+
+ if(bad!=1)
+ printf("\nUser [%s] not added\n",uname);
+ }
+
+ bzero(cmd,sizeof(cmd));
+ sprintf(cmd,"%s -g %d -d %s -s %s -c \"%s\" -m -k /etc/skel %s",
+ USERADD_PATH,group,dir,shell,person,uname);
+ printf("Calling useradd to add new user:\n%s\n",cmd);
+ if(system(cmd)){
+ printf("User add failed!\n");
+ exit(errno);
+ };
+ bzero(cmd,sizeof(cmd));
+ sprintf(cmd,"%s -m %d -M %d -W %d -I %d %s", CHAGE_PATH,
+ min_pass,max_pass,warn_pass,user_die,uname);
+ printf("%s\n",cmd);
+ if(system(cmd)){
+ printf("There was an error setting password expire values\n");
+ exit(errno);
+ };
+ bzero(cmd,sizeof(cmd));
+ sprintf(cmd,"%s %s",PASSWD_PATH,uname);
+ system(cmd);
+ printf("\nDone.\n");
+}
+
diff --git a/contrib/adduser.c b/contrib/adduser.c
new file mode 100644
index 0000000..deebd4c
--- /dev/null
+++ b/contrib/adduser.c
@@ -0,0 +1,502 @@
+/****
+** 04/21/96
+** hacked even more, replaced gets() with something slightly harder to buffer
+** overflow. Added support for setting a default quota on new account, with
+** edquota -p. Other cleanups for security, I let some users run adduser suid
+** root to add new accounts. (overflow checks, clobber environment, valid
+** shell checks, restrictions on gid + home dir settings).
+
+** Added max. username length. Used syslog() a bit for important events.
+** Support to immediately expire account with passwd -e.
+
+** Called it version 2.0! Because I felt like it!
+
+** -- Chris, chris@ferret.lmh.ox.ac.uk
+
+** 03/17/96
+** hacked a bit more, removed unused code, cleaned up for gcc -Wall.
+** --marekm
+**
+** 02/26/96
+** modified to call shadow utils (useradd,chage,passwd) on shadowed
+** systems - Cristian Gafton, gafton@sorosis.ro
+**
+** 6/27/95
+** shadow-adduser 1.4:
+**
+** now it copies the /etc/skel dir into the person's dir,
+** makes the mail folders, changed some defaults and made a 'make
+** install' just for the hell of it.
+**
+** Greg Gallagher
+** CIN.Net
+**
+** 1/28/95
+** shadow-adduser 1.3:
+**
+** 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.
+**
+** Brandon
+*****
+** 01/27/95
+**
+** shadow-adduser 1.2:
+** I took the C source from adduser-shadow (credits are below) and made
+** it a little more worthwhile. Many small changes... Here's
+** the ones I can remember:
+**
+** Removed support for non-shadowed systems (if you don't have shadow,
+** use the original adduser, don't get this shadow version!)
+** Added support for the correct /etc/shadow fields (Min days before
+** password change, max days before password change, Warning days,
+** and how many days from expiry date does the account go invalid)
+** The previous version just left all of those fields blank.
+** There is still one field left (expiry date for the account, period)
+** which I have left blank because I do not use it and didn't want to
+** spend any more time on this. I'm sure someone will put it in and
+** tack another plethora of credits on here. :)
+** Added in the password date field, which should always reflect the last
+** date the password was changed, for expiry purposes. "passwd" always
+** updates this field, so the adduser program should set it up right
+** initially (or a user could keep thier initial password forever ;)
+** The number is in days since Jan 1st, 1970.
+**
+** Have fun with it, and someone please make
+** a real version(this is still just a hack)
+** for us all to use (and Email it to me???)
+**
+** Brandon
+** photon@usis.com
+**
+*****
+** adduser 1.0: add a new user account (For systems not using shadow)
+** With a nice little interface and a will to do all the work for you.
+**
+** Craig Hagan
+** hagan@opine.cs.umass.edu
+**
+** Modified to really work, look clean, and find unused uid by Chris Cappuccio
+** chris@slinky.cs.umass.edu
+**
+*****
+**
+** 01/19/95
+**
+** FURTHER modifications to enable shadow passwd support (kludged, but
+** no more so than the original) by Dan Crowson - dcrowson@mo.net
+**
+** Search on DAN for all changes...
+**
+*****
+**
+** cc -O -o adduser adduser.c
+** Use gcc if you have it... (political reasons beyond my control) (chris)
+**
+** I've gotten this program to work with success under Linux (without
+** shadow) and SunOS 4.1.3. I would assume it should work pretty well
+** on any system that uses no shadow. (chris)
+**
+** If you have no crypt() then try
+** cc -DNO_CRYPT -O -o adduser adduser.c xfdes.c
+** I'm not sure how login operates with no crypt()... I guess
+** the same way we're doing it here.
+*/
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <pwd.h>
+#include <grp.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+#include <sys/types.h>
+#include <sys/timeb.h>
+#include <sys/time.h>
+#include <sys/stat.h>
+#include <syslog.h>
+
+#define IMMEDIATE_CHANGE /* Expire newly created password, must be changed
+ * immediately upon next login */
+#define HAVE_QUOTAS /* Obvious */
+#define EXPIRE_VALS_SET /* If defined, 'normal' users can't change
+ * password expiry values (if running suid root) */
+
+#define HAVE_GETUSERSHELL /* FIXME: Isn't this defined in config.h too? */
+#define LOGGING /* If we want to log various things to syslog */
+#define MAX_USRNAME 8 /* Longer usernames seem to work on my system....
+ * But they're probably a poor idea */
+
+
+#define DEFAULT_SHELL "/bin/bash" /* because BASH is your friend */
+#define DEFAULT_HOME "/home"
+#define USERADD_PATH "/usr/sbin/useradd"
+#define CHAGE_PATH "/usr/bin/chage"
+#define PASSWD_PATH "/usr/bin/passwd"
+#define EDQUOTA_PATH "/usr/sbin/edquota"
+#define QUOTA_DEFAULT "defuser"
+#define DEFAULT_GROUP 100
+
+#define DEFAULT_MIN_PASS 0
+#define DEFAULT_MAX_PASS 100
+#define DEFAULT_WARN_PASS 14
+#define DEFAULT_USER_DIE 366
+
+void safeget (char *, int);
+
+void
+main (void)
+{
+ char foo[32];
+ char usrname[32], person[32], dir[32], shell[32];
+ unsigned int group, min_pass, max_pass, warn_pass, user_die;
+ /* the group and uid of the new user */
+ int bad = 0, done = 0, correct = 0, olduid;
+ char cmd[255];
+ struct group *grp;
+
+ /* flags, in order:
+ * bad to see if the username is in /etc/passwd, or if strange stuff has
+ * been typed if the user might be put in group 0
+ * done allows the program to exit when a user has been added
+ * correct loops until a username is found that isn't in /etc/passwd
+ */
+
+ /* The real program starts HERE! */
+
+ if (geteuid () != 0)
+ {
+ printf ("It seems you don't have access to add a new user. Try\n");
+ printf ("logging in as root or su root to gain superuser access.\n");
+ exit (1);
+ }
+
+ /* Sanity checks
+ */
+
+#ifdef LOGGING
+ openlog ("adduser", LOG_PID | LOG_CONS | LOG_NOWAIT, LOG_AUTH);
+ syslog (LOG_INFO, "invoked by user %s\n", getpwuid (getuid ())->pw_name);
+#endif
+
+ if (!(grp = getgrgid (DEFAULT_GROUP)))
+ {
+ printf ("Error: the default group %d does not exist on this system!\n",
+ DEFAULT_GROUP);
+ printf ("adduser must be recompiled.\n");
+#ifdef LOGGING
+ syslog (LOG_ERR, "warning: failed. no such default group\n");
+ closelog ();
+#endif
+ exit (1);
+ };
+
+ while (!correct)
+ { /* loop until a "good" usrname is chosen */
+ while (!done)
+ {
+ printf ("\nLogin to add (^C to quit): ");
+ fflush (stdout);
+
+ safeget (usrname, sizeof (usrname));
+
+ if (!strlen (usrname))
+ {
+ printf ("Empty input.\n");
+ done = 0;
+ continue;
+ };
+
+ /* what I saw here before made me think maybe I was running DOS */
+ /* might this be a solution? (chris) */
+ if (strlen (usrname) > MAX_USRNAME)
+ {
+ printf ("That name is longer than the maximum of %d characters. Choose another.\n", MAX_USRNAME);
+ done = 0;
+ }
+ else if (getpwnam (usrname) != NULL)
+ {
+ printf ("That name is in use, choose another.\n");
+ done = 0;
+ }
+ else if (strchr (usrname, ' ') != NULL)
+ {
+ printf ("No spaces in username!!\n");
+ done = 0;
+ }
+ else
+ done = 1;
+ }; /* done, we have a valid new user name */
+
+ /* all set, get the rest of the stuff */
+ printf ("\nEditing information for new user [%s]\n", usrname);
+
+ printf ("\nFull Name [%s]: ", usrname);
+ fflush (stdout);
+ safeget (person, sizeof (person));
+ if (!strlen (person))
+ {
+ bzero (person, sizeof (person));
+ strcpy (person, usrname);
+ };
+
+ if (getuid () == 0)
+ {
+ do
+ {
+ bad = 0;
+ printf ("GID [%d]: ", DEFAULT_GROUP);
+ fflush (stdout);
+ safeget (foo, sizeof (foo));
+ if (!strlen (foo))
+ group = DEFAULT_GROUP;
+ else if (isdigit (*foo))
+ {
+ group = atoi (foo);
+ if (!(grp = getgrgid (group)))
+ {
+ printf ("unknown gid %s\n", foo);
+ group = DEFAULT_GROUP;
+ bad = 1;
+ };
+ }
+ else if ((grp = getgrnam (foo)))
+ group = grp->gr_gid;
+ else
+ {
+ printf ("unknown group %s\n", foo);
+ group = DEFAULT_GROUP;
+ bad = 1;
+ }
+ if (group == 0)
+ { /* You're not allowed to make root group users! */
+ printf ("Creation of root group users not allowed (must be done by hand)\n");
+ group = DEFAULT_GROUP;
+ bad = 1;
+ };
+ }
+ while (bad);
+ }
+ else
+ {
+ printf ("Group will be default of: %d\n", DEFAULT_GROUP);
+ group = DEFAULT_GROUP;
+ }
+
+ if (getuid () == 0)
+ {
+ printf ("\nIf home dir ends with a / then '%s' will be appended to it\n", usrname);
+ printf ("Home Directory [%s/%s]: ", DEFAULT_HOME, usrname);
+ fflush (stdout);
+ safeget (dir, sizeof (dir));
+ if (!strlen (dir))
+ { /* hit return */
+ sprintf (dir, "%s/%s", DEFAULT_HOME, usrname);
+ }
+ else if (dir[strlen (dir) - 1] == '/')
+ sprintf (dir+strlen(dir), "%s", usrname);
+ }
+ else
+ {
+ printf ("\nHome directory will be %s/%s\n", DEFAULT_HOME, usrname);
+ sprintf (dir, "%s/%s", DEFAULT_HOME, usrname);
+ }
+
+ printf ("\nShell [%s]: ", DEFAULT_SHELL);
+ fflush (stdout);
+ safeget (shell, sizeof (shell));
+ if (!strlen (shell))
+ sprintf (shell, "%s", DEFAULT_SHELL);
+ else
+ {
+ char *sh;
+ int ok = 0;
+#ifdef HAVE_GETUSERSHELL
+ setusershell ();
+ while ((sh = getusershell ()) != NULL)
+ if (!strcmp (shell, sh))
+ ok = 1;
+ endusershell ();
+#endif
+ if (!ok)
+ {
+ if (getuid () == 0)
+ printf ("Warning: root allowed non standard shell\n");
+ else
+ {
+ printf ("Shell NOT in /etc/shells, DEFAULT used\n");
+ sprintf (shell, "%s", DEFAULT_SHELL);
+ }
+ }
+ }
+
+#ifdef EXPIRE_VALS_SET
+ if (getuid () == 0)
+ {
+#endif
+ printf ("\nMin. Password Change Days [%d]: ", DEFAULT_MIN_PASS);
+ fflush (stdout);
+ safeget (foo, sizeof (foo));
+ if (strlen (foo) > 1)
+ min_pass = DEFAULT_MIN_PASS;
+ else
+ min_pass = atoi (foo);
+
+ printf ("Max. Password Change Days [%d]: ", DEFAULT_MAX_PASS);
+ fflush (stdout);
+ safeget (foo, sizeof (foo));
+ if (strlen (foo) > 1)
+ max_pass = atoi (foo);
+ else
+ max_pass = DEFAULT_MAX_PASS;
+
+ printf ("Password Warning Days [%d]: ", DEFAULT_WARN_PASS);
+ fflush (stdout);
+ safeget (foo, sizeof (foo));
+ warn_pass = atoi (foo);
+ if (warn_pass == 0)
+
+ warn_pass = DEFAULT_WARN_PASS;
+
+ printf ("Days after Password Expiry for Account Locking [%d]: ", DEFAULT_USER_DIE);
+ fflush (stdout);
+ safeget (foo, sizeof (foo));
+ user_die = atoi (foo);
+ if (user_die == 0)
+ user_die = DEFAULT_USER_DIE;
+
+#ifdef EXPIRE_VALS_SET
+ }
+ else
+ {
+ printf ("\nSorry, account expiry values are set.\n");
+ user_die = DEFAULT_USER_DIE;
+ warn_pass = DEFAULT_WARN_PASS;
+ max_pass = DEFAULT_MAX_PASS;
+ min_pass = DEFAULT_MIN_PASS;
+ }
+#endif
+
+ printf ("\nInformation for new user [%s] [%s]:\n", usrname, person);
+ printf ("Home directory: [%s] Shell: [%s]\n", dir, shell);
+ printf ("GID: [%d]\n", group);
+ printf ("MinPass: [%d] MaxPass: [%d] WarnPass: [%d] UserExpire: [%d]\n",
+ min_pass, max_pass, warn_pass, user_die);
+ printf ("\nIs this correct? [y/N]: ");
+ fflush (stdout);
+ safeget (foo, sizeof (foo));
+
+ done = bad = correct = (foo[0] == 'y' || foo[0] == 'Y');
+
+ if (bad != 1)
+ printf ("\nUser [%s] not added\n", usrname);
+ }
+
+ /* Clobber the environment, I run this suid root sometimes to let
+ * non root privileged accounts add users --chris */
+
+ *environ = NULL;
+
+ bzero (cmd, sizeof (cmd));
+ sprintf (cmd, "%s -g %d -d %s -s %s -c \"%s\" -m -k /etc/skel %s",
+ USERADD_PATH, group, dir, shell, person, usrname);
+ printf ("Calling useradd to add new user:\n%s\n", cmd);
+ if (system (cmd))
+ {
+ printf ("User add failed!\n");
+#ifdef LOGGING
+ syslog (LOG_ERR, "could not add new user\n");
+ closelog ();
+#endif
+ exit (errno);
+ };
+
+ olduid = getuid (); /* chage, passwd, edquota etc. require ruid = root
+ */
+ setuid (0);
+
+ bzero (cmd, sizeof (cmd));
+
+ /* Chage runs suid root. => we need ruid root to run it with
+ * anything other than chage -l
+ */
+
+ sprintf (cmd, "%s -m %d -M %d -W %d -I %d %s", CHAGE_PATH,
+ min_pass, max_pass, warn_pass, user_die, usrname);
+ printf ("%s\n", cmd);
+ if (system (cmd))
+ {
+ printf ("There was an error setting password expire values\n");
+#ifdef LOGGING
+ syslog (LOG_ERR, "password expire values could not be set\n");
+#endif
+ };
+
+ /* I want to add a user completely with one easy command --chris */
+
+#ifdef HAVE_QUOTAS
+ bzero (cmd, sizeof (cmd));
+ sprintf (cmd, "%s -p %s -u %s", EDQUOTA_PATH, QUOTA_DEFAULT, usrname);
+ printf ("%s\n", cmd);
+ if (system (cmd))
+ {
+ printf ("\nWarning: error setting quota\n");
+#ifdef LOGGING
+ syslog (LOG_ERR, "warning: account created but NO quotas set!\n");
+#endif /* LOGGING */
+ }
+ else
+ printf ("\nDefault quota set.\n");
+#endif /* HAVE_QUOTAS */
+
+ bzero (cmd, sizeof (cmd));
+ sprintf (cmd, "%s %s", PASSWD_PATH, usrname);
+ if (system (cmd))
+ {
+ printf ("\nWarning: error setting password\n");
+#ifdef LOGGING
+ syslog (LOG_ERR, "warning: password set failed!\n");
+#endif
+ }
+#ifdef IMMEDIATE_CHANGE
+ bzero (cmd, sizeof (cmd));
+ sprintf (cmd, "%s -e %s", PASSWD_PATH, usrname);
+ if (system (cmd))
+ {
+ printf ("\nWarning: error expiring password\n");
+#ifdef LOGGING
+ syslog (LOG_ERR, "warning: password expire failed!\n");
+#endif /* LOGGING */
+ }
+#endif /* IMMEDIATE_CHANGE */
+
+ setuid (olduid);
+
+#ifdef LOGGING
+ closelog ();
+#endif
+
+ printf ("\nDone.\n");
+}
+
+void
+safeget (char *buf, int maxlen)
+{
+ int c, i = 0, bad = 0;
+ char *bstart = buf;
+ while ((c = getc (stdin)) != EOF && (c != '\n') && (++i < maxlen))
+ {
+ bad = (!isalnum (c) && (c != '_') && (c != ' '));
+ *(buf++) = (char) c;
+ }
+ *buf = '\0';
+
+ if (bad)
+ {
+ printf ("\nString contained banned character. Please stick to alphanumerics.\n");
+ *bstart = '\0';
+ }
+}
+
diff --git a/contrib/adduser.sh b/contrib/adduser.sh
new file mode 100755
index 0000000..0efb27a
--- /dev/null
+++ b/contrib/adduser.sh
@@ -0,0 +1,90 @@
+#!/bin/sh
+# adduser script for use with shadow passwords and useradd command.
+# by Hrvoje Dogan <hdogan@student.math.hr>, Dec 1995.
+
+echo -n "Login name for new user []:"
+read LOGIN
+if [ -z $LOGIN ]
+then echo "Come on, man, you can't leave the login field empty...";exit
+fi
+echo
+echo -n "User id for $LOGIN [ defaults to next available]:"
+read ID
+GUID="-u $ID"
+if [ -z $ID ]
+then GUID=""
+fi
+
+echo
+echo -n "Initial group for $LOGIN [users]:"
+read GID
+GGID="-g $GID"
+if [ -z $GID ]
+then GGID=""
+fi
+
+echo
+echo -n "Additional groups for $LOGIN []:"
+read AGID
+GAGID="-G $AGID"
+if [ -z $AGID ]
+then GAGID=""
+fi
+
+echo
+echo -n "$LOGIN's home directory [/home/$LOGIN]:"
+read HME
+GHME="-d $HME"
+if [ -z $HME ]
+then GHME=""
+fi
+
+echo
+echo -n "$LOGIN's shell [/bin/bash]:"
+read SHL
+GSHL="-s $SHL"
+if [ -z $SHL ]
+then GSHL=""
+fi
+
+echo
+echo -n "$LOGIN's account expiry date (MM/DD/YY) []:"
+read EXP
+GEXP="-e $EXP"
+if [ -z $EXP ]
+then GEXP=""
+fi
+echo
+echo OK, I'm about to make a new account. Here's what you entered so far:
+echo New login name: $LOGIN
+if [ -z $GUID ]
+then echo New UID: [Next available]
+else echo New UID: $UID
+fi
+if [ -z $GGID ]
+then echo Initial group: users
+else echo Initial group: $GID
+fi
+if [ -z $GAGID ]
+then echo Additional groups: [none]
+else echo Additional groups: $AGID
+fi
+if [ -z $GHME ]
+then echo Home directory: /home/$LOGIN
+else echo Home directory: $HME
+fi
+if [ -z $GSHL ]
+then echo Shell: /bin/bash
+else echo Shell: $SHL
+fi
+if [ -z $GEXP ]
+then echo Expiry date: [no expiration]
+else echo Expiry date: $EXP
+fi
+echo "This is it... if you want to bail out, you'd better do it now."
+read FOO
+echo Making new account...
+/usr/sbin/useradd $GHME -m $GEXP $GGID $GAGID $GSHL $GUID $LOGIN
+/usr/bin/chfn $LOGIN
+/usr/bin/passwd $LOGIN
+echo "Done..."
diff --git a/contrib/adduser2.sh b/contrib/adduser2.sh
new file mode 100755
index 0000000..7656d02
--- /dev/null
+++ b/contrib/adduser2.sh
@@ -0,0 +1,743 @@
+#!/bin/bash
+#
+# adduser Interactive user adding program.
+#
+# Copyright (C) 1996 Petri Mattila, Prihateam Networks
+# petri@prihateam.fi
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# Changes:
+# 220496 v0.01 Initial version
+# 230496 v0.02 More checks, embolden summary
+# 240496 Even more checks
+# 250496 Help with ?
+# 040596 v0.03 Cleanups
+# 050596 v0.04 Bug fixes, expire date checks
+# 070596 v0.05 Iso-latin-1 names
+#
+
+## Defaults
+
+# default groups
+def_group="users"
+def_other_groups=""
+
+# default home directory
+def_home_dir=/home/users
+
+# default shell
+def_shell=/bin/tcsh
+
+# Default expiration date (mm/dd/yy)
+def_expire=""
+
+# default dates
+def_pwd_min=0
+def_pwd_max=90
+def_pwd_warn=14
+def_pwd_iact=14
+
+
+# possible UIDs
+uid_low=1000
+uid_high=64000
+
+# skel directory
+skel=/etc/skel
+
+# default mode for home directory
+def_mode=711
+
+# Regex, that the login name must meet, only ANSI characters
+login_regex='^[0-9a-zA-Z_-]*$'
+
+# Regex, that the user name must meet
+# ANSI version
+##name_regex='^[0-9a-zA-Z_-\ ]*$'
+# ISO-LATIN-1 version
+name_regex='^[0-9a-zA-Z_-\ ]*$'
+
+# set PATH
+export PATH="/bin:/sbin:/usr/bin:/usr/sbin"
+
+# Some special characters
+case "$TERM" in
+ vt*|ansi*|con*|xterm*|linux*)
+ S='' # start embolden
+ E='' # end embolden
+ ;;
+ *)
+ S=''
+ E=''
+ ;;
+esac
+
+
+## Functions
+
+check_root() {
+ if test "$EUID" -ne 0
+ then
+ echo "You must be root to run this program."
+ exit 1
+ fi
+}
+
+check_user() {
+ local usr pwd uid gid name home sh
+
+ cat /etc/passwd | (
+ while IFS=":" read usr pwd uid gid name home sh
+ do
+ if test "$1" = "${usr}"
+ then
+ return 1
+ fi
+ done
+ return 0
+ )
+}
+
+check_group() {
+ local read grp pwd gid members
+
+ cat /etc/group | (
+ while IFS=":" read grp pwd gid members
+ do
+ if test "$1" = "${grp}"
+ then
+ return 1
+ fi
+ done
+ return 0
+ )
+}
+
+check_other_groups() {
+ local grp check IFS
+
+ check="$1"
+ IFS=","
+
+ set ${check}
+ for grp
+ do
+ if check_group "${grp}"
+ then
+ echo "Group ${grp} does not exist."
+ return 1
+ fi
+ done
+ return 0
+}
+
+check_uid() {
+ local usr pwd uid gid name home sh
+
+ cat /etc/passwd | (
+ while IFS=":" read usr pwd uid gid name home sh
+ do
+ if test "$1" = "${uid}"
+ then
+ return 1
+ fi
+ done
+ return 0
+ )
+}
+
+read_yn() {
+ local ans ynd
+
+ ynd="$1"
+
+ while :
+ do
+ read ans
+ case "${ans}" in
+ "") return ${ynd} ;;
+ [nN]) return 1 ;;
+ [yY]) return 0 ;;
+ *) echo -n "Y or N, please ? " ;;
+ esac
+ done
+}
+
+read_login() {
+ echo
+ while :
+ do
+ echo -n "Login: ${def_login:+[${def_login}] }"
+ read login
+
+ if test "${login}" = '?'
+ then
+ less /etc/passwd
+ echo
+ continue
+ fi
+
+ if test -z "${login}" -a -n "${def_login}"
+ then
+ login="${def_login}"
+ echo "Using ${login}"
+ return
+ fi
+
+ if test "${#login}" -gt 8
+ then
+ echo "Login must be at most 8 characters long"
+ continue
+ fi
+
+ if test "${#login}" -lt 2
+ then
+ echo "Login must be at least 2 characters long"
+ continue
+ fi
+
+ if ! expr "${login}" : "${login_regex}" &> /dev/null
+ then
+ echo "Please use letters, numbers and special characters _-,."
+ continue
+ fi
+
+ if ! check_user "${login}"
+ then
+ echo "Username ${login} is already in use"
+ continue
+ fi
+
+ def_login="${login}"
+ return
+ done
+}
+
+read_name () {
+ echo
+ while :
+ do
+ echo -n "Real name: ${def_name:+[${def_name}] }"
+ read name
+
+ if test "${name}" = '?'
+ then
+ less /etc/passwd
+ echo
+ continue
+ fi
+
+ if test -z "${name}" -a -n "${def_name}"
+ then
+ name="${def_name}"
+ echo "Using ${name}"
+ fi
+
+ if test "${#name}" -gt 32
+ then
+ echo "Name should be at most 32 characters long"
+ continue
+ fi
+
+ if ! expr "${name}" : "${name_regex}" &> /dev/null
+ then
+ echo "Please use letters, numbers, spaces and special characters ,._-"
+ continue
+ fi
+
+ def_name="${name}"
+ return
+ done
+}
+
+read_home() {
+ local x
+
+ echo
+ while :
+ do
+ echo -n "Home Directory: [${def_home_dir}/${login}] "
+ read home
+
+ if test -z "${home}"
+ then
+ home="${def_home_dir}/${login}"
+ echo "Using ${home}"
+ fi
+
+ if ! expr "${home}" : '^[0-9a-zA-Z,._-\/]*$' &> /dev/null
+ then
+ echo "Please use letters, numbers, spaces and special characters ,._-/"
+ continue
+ fi
+
+ x="$(basename ${home})"
+ if test "${x}" != "${login}"
+ then
+ echo "Warning: you are about to use different login name and home directory."
+ fi
+
+ x="$(dirname ${home})"
+ if ! test -d "${x}"
+ then
+ echo "Directory ${x} does not exist."
+ echo "If you still want to use it, please make it manually."
+ continue
+ fi
+
+ def_home_dir="${x}"
+ return
+ done
+}
+
+read_shell () {
+ local x
+
+ echo
+ while :
+ do
+ echo -n "Shell: [${def_shell}] "
+ read shell
+
+ if test -z "${shell}"
+ then
+ shell="${def_shell}"
+ echo "Using ${shell}"
+ fi
+
+ for x in $(cat /etc/shells)
+ do
+ if test "${x}" = "${shell}"
+ then
+ def_shell="${shell}"
+ return
+ fi
+ done
+
+ echo "Possible shells are:"
+ cat /etc/shells
+ done
+}
+
+read_group () {
+ echo
+ while :
+ do
+ echo -n "Group: [${def_group}] "
+ read group
+
+ if test -z "${group}"
+ then
+ group="${def_group}"
+ echo "Using ${group}"
+ fi
+
+ if test "${group}" = '?'
+ then
+ less /etc/group
+ echo
+ continue
+ fi
+
+ if check_group "${group}"
+ then
+ echo "Group ${group} does not exist."
+ continue
+ fi
+
+ def_group="${group}"
+ return
+ done
+}
+
+read_other_groups () {
+ echo
+ while :
+ do
+ echo -n "Other groups: [${def_og:-none}] "
+ read other_groups
+
+ if test "${other_groups}" = '?'
+ then
+ less /etc/group
+ echo
+ continue
+ fi
+
+ if test -z "${other_groups}"
+ then
+ if test -n "${def_og}"
+ then
+ other_groups="${def_og}"
+ echo "Using ${other_groups}"
+ else
+ echo "No other groups"
+ return
+ fi
+ fi
+
+
+ if ! check_other_groups "${other_groups}"
+ then
+ continue
+ fi
+
+ def_og="${other_groups}"
+ return
+ done
+}
+
+read_uid () {
+ echo
+ while :
+ do
+ echo -n "uid: [first free] "
+ read uid
+
+ if test -z "${uid}"
+ then
+ echo "Using first free UID."
+ return
+ fi
+
+ if test "${uid}" = '?'
+ then
+ less /etc/passwd
+ echo
+ continue
+ fi
+
+ if ! expr "${uid}" : '^[0-9]+$' &> /dev/null
+ then
+ echo "Please use numbers only."
+ continue
+ fi
+ if test "${uid}" -lt "${uid_low}"
+ then
+ echo "UID must be greater than ${uid_low}"
+ continue
+ fi
+ if test "${uid}" -gt "${uid_high}"
+ then
+ echo "UID must be smaller than ${uid_high}"
+ continue
+ fi
+ if ! check_uid "${uid}"
+ then
+ echo "UID ${uid} is already in use"
+ continue
+ fi
+
+ return
+ done
+}
+
+read_max_valid_days() {
+ echo
+ while :
+ do
+ echo -en "Maximum days between password changes: [${def_pwd_max}] "
+ read max_days
+
+ if test -z "${max_days}"
+ then
+ max_days="${def_pwd_max}"
+ echo "Using ${max_days}"
+ return
+ fi
+
+ if ! expr "${max_days}" : '^[0-9]+$' &> /dev/null
+ then
+ echo "Please use numbers only."
+ continue
+ fi
+ if test "${max_days}" -lt 7
+ then
+ echo "Warning: you are using a value shorter than a week."
+ fi
+
+ def_pwd_max="${max_days}"
+ return
+ done
+}
+
+read_min_valid_days() {
+ echo
+ while :
+ do
+ echo -en "Minimum days between password changes: [${def_pwd_min}] "
+ read min_days
+
+ if test -z "${min_days}"
+ then
+ min_days="${def_pwd_min}"
+ echo "Using ${min_days}"
+ return
+ fi
+
+ if ! expr "${min_days}" : '^[0-9]+$' &> /dev/null
+ then
+ echo "Please use numbers only."
+ continue
+ fi
+ if test "${min_days}" -gt 7
+ then
+ echo "Warning: you are using a value longer than a week."
+ fi
+
+ def_pwd_min="${min_days}"
+ return
+ done
+}
+
+read_warning_days() {
+ echo
+ while :
+ do
+ echo -en "Number of warning days before password expires: [${def_pwd_warn}] "
+ read warn_days
+
+ if test -z "${warn_days}"
+ then
+ warn_days="${def_pwd_warn}"
+ echo "Using ${warn_days}"
+ fi
+
+ if ! expr "${warn_days}" : '^[0-9]+$' &> /dev/null
+ then
+ echo "Please use numbers only."
+ continue
+ fi
+ if test "${warn_days}" -gt 14
+ then
+ echo "Warning: you are using a value longer than two week."
+ fi
+
+ def_pwd_warn="${warn_days}"
+ return
+ done
+}
+
+
+read_inactive_days() {
+ echo
+ while :
+ do
+ echo -en "Number of usable days after expiration: [${def_pwd_iact}] "
+ read iact_days
+
+ if test -z "${iact_days}"
+ then
+ iact_days="${def_pwd_iact}"
+ echo "Using ${iact_days}"
+ return
+ fi
+ if ! expr "${iact_days}" : '^[0-9]+$' &> /dev/null
+ then
+ echo "Please use numbers only."
+ continue
+ fi
+ if test "${iact_days}" -gt 14
+ then
+ echo "Warning: you are using a value that is more than two weeks."
+ fi
+
+ def_pwd_iact="${iact_days}"
+ return
+ done
+}
+
+read_expire_date() {
+ local ans
+
+ echo
+ while :
+ do
+ echo -en "Expire date of this account (mm/dd/yy): [${def_expire:-never}] "
+ read ans
+
+ if test -z "${ans}"
+ then
+ if test -z "${def_expire}"
+ then
+ ans="never"
+ else
+ ans="${def_expire}"
+ echo "Using ${def_expire}"
+ fi
+ fi
+
+ if test "${ans}" = "never"
+ then
+ echo "Account will never expire."
+ def_expire=""
+ expire=""
+ return
+ fi
+
+ if ! expr "${ans}" : '^[0-9][0-9]/[0-9][0-9]/[0-9][0-9]$' &> /dev/null
+ then
+ echo "Please use format mm/dd/yy"
+ continue
+ fi
+
+ if ! expire_date="$(date -d ${ans} '+%A, %B %d %Y')"
+ then
+ continue
+ fi
+
+ def_expire="${expire}"
+ return
+ done
+}
+
+read_passwd_yn() {
+ echo -en "\nDo you want to set password [Y/n] ? "
+ if read_yn 0
+ then
+ set_pwd="YES"
+ else
+ set_pwd=""
+ fi
+}
+
+
+print_values() {
+
+clear
+cat << EOM
+
+Login: ${S}${login}${E}
+Group: ${S}${group}${E}
+Other groups: ${S}${other_groups:-[none]}${E}
+
+Real Name: ${S}${name}${E}
+
+uid: ${S}${uid:-[first free]}${E}
+home: ${S}${home}${E}
+shell: ${S}${shell}${E}
+
+Account expiration date: ${S}${expire_date:-never}${E}
+Minimum days between password changes: ${S}${min_days}${E}
+Maximum days between password changes: ${S}${max_days}${E}
+Number of usable days after expiration: ${S}${iact_days}${E}
+Number of warning days before expiration: ${S}${warn_days}${E}
+
+${S}${set_pwd:+Set password for this account.}${E}
+
+EOM
+}
+
+set_user() {
+ if ! useradd \
+ -c "${name}" \
+ -d "${home}" \
+ -g "${group}" \
+ -s "${shell}" \
+ ${expire:+-e ${expire}} \
+ ${uid:+-u ${uid}} \
+ ${other_groups:+-G ${other_groups}} \
+ ${login}
+ then
+ echo "Error ($?) in useradd...exiting..."
+ exit 1
+ fi
+}
+
+set_aging() {
+ if ! passwd \
+ -x ${max_days} \
+ -n ${min_days} \
+ -w ${warn_days} \
+ -i ${iact_days} \
+ ${login}
+ then
+ echo "Error ($?) in setting password aging...exiting..."
+ exit 1
+ fi
+}
+
+set_password() {
+ if test -n "${set_pwd}"
+ then
+ echo
+ passwd ${login}
+ echo
+ fi
+}
+
+set_system() {
+ if test -d "${home}"
+ then
+ echo "Directory ${home} already exists."
+ echo "Skeleton files not copied."
+ return
+ fi
+
+ echo -n "Copying skeleton files..."
+ (
+ mkdir ${home}
+ cd ${skel} && cp -af . ${home}
+ chmod ${def_mode} ${home}
+ chown -R ${login}:${group} ${home}
+ )
+ echo "done."
+
+ ## Add your own stuff here:
+ echo -n "Setting up other files..."
+ (
+ mailbox="/var/spool/mail/${login}"
+ touch ${mailbox}
+ chown "${login}:mail" ${mailbox}
+ chmod 600 ${mailbox}
+ )
+ echo "done."
+}
+
+
+read_values() {
+ clear
+ echo -e "\nPlease answer the following questions about the new user to be added."
+
+ while :
+ do
+ read_login
+ read_name
+ read_group
+ read_other_groups
+ read_home
+ read_shell
+ read_uid
+ read_expire_date
+ read_max_valid_days
+ read_min_valid_days
+ read_warning_days
+ read_inactive_days
+ read_passwd_yn
+
+ print_values
+
+ echo -n "Is this correct [N/y] ? "
+ read_yn 1 && return
+ done
+}
+
+
+main() {
+ check_root
+ read_values
+ set_user
+ set_aging
+ set_system
+ set_password
+}
+
+
+## Run it 8-)
+main
+
+# End.
diff --git a/contrib/atudel b/contrib/atudel
new file mode 100755
index 0000000..0ca8783
--- /dev/null
+++ b/contrib/atudel
@@ -0,0 +1,85 @@
+#!/usr/bin/perl
+#
+# Copyright (c) 1996 Brian R. Gaeke
+# 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. All advertising materials mentioning features or use of this software
+# must display the following acknowledgement:
+# This product includes software developed by Brian R. Gaeke.
+# 4. The name of the author, Brian R. Gaeke, may not be used to endorse
+# or promote products derived from this software without specific
+# prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY BRIAN R. GAEKE ``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 BRIAN R. GAEKE 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.
+#
+# Additionally:
+#
+# This software is provided without support and without any obligation
+# on the part of Brian R. Gaeke to assist in its use, correction,
+# modification or enhancement.
+#
+#######################################################################
+#
+# this is atudel, version 2, by Brian R. Gaeke <brg@dgate.org>
+#
+
+require "getopts.pl";
+&Getopts('v');
+$username = shift(@ARGV);
+&usage unless $username;
+
+sub usage
+{
+ print STDERR "atudel - remove all at jobs owned by a user\n";
+ print STDERR "usage: $0 [-v] username\n";
+ exit(1);
+}
+
+# odd. unless getpwnam($uname) doesn't seem to work for $uname eq "root" on
+# my linux system. but this does.
+die "user $username does not exist; stopping"
+ unless defined(getpwnam($username));
+
+print "searching for at jobs owned by user $username ..." if $opt_v;
+
+chdir "/var/spool/atjobs" ||
+ die "can't chdir to /var/spool/atjobs: $!\nstopping";
+opendir(DIR,".") || die "can't opendir(/var/spool/atjobs): $!\nstopping";
+@files = grep(!/^\./,grep(-f,readdir(DIR)));
+closedir DIR;
+
+foreach $x (@files)
+{
+ $owner = (getpwuid((stat($x))[4]))[0];
+ push(@nuke_bait,$x) if $owner eq $username;
+}
+
+if (@nuke_bait)
+{
+ print "removed jobIDs: @{nuke_bait}.\n" if $opt_v;
+ unlink @nuke_bait;
+}
+elsif ($opt_v)
+{
+ print "\n";
+}
+
+exit 0;
diff --git a/contrib/groupmems.shar b/contrib/groupmems.shar
new file mode 100644
index 0000000..8472d93
--- /dev/null
+++ b/contrib/groupmems.shar
@@ -0,0 +1,546 @@
+#!/bin/sh
+# This is a shell archive (produced by GNU sharutils 4.2.1).
+# To extract the files from this archive, save it to some FILE, remove
+# everything before the `!/bin/sh' line above, then type `sh FILE'.
+#
+# Made on 2000-05-25 14:41 CDT by <gk4@gnu.austin.ibm.com>.
+# Source directory was `/home/gk4/src/groupmem'.
+#
+# Existing files will *not* be overwritten unless `-c' is specified.
+#
+# This shar contains:
+# length mode name
+# ------ ---------- ------------------------------------------
+# 1960 -rw-r--r-- Makefile
+# 6348 -rw-r--r-- groupmems.c
+# 3372 -rw------- groupmems.8
+#
+save_IFS="${IFS}"
+IFS="${IFS}:"
+gettext_dir=FAILED
+locale_dir=FAILED
+first_param="$1"
+for dir in $PATH
+do
+ if test "$gettext_dir" = FAILED && test -f $dir/gettext \
+ && ($dir/gettext --version >/dev/null 2>&1)
+ then
+ set `$dir/gettext --version 2>&1`
+ if test "$3" = GNU
+ then
+ gettext_dir=$dir
+ fi
+ fi
+ if test "$locale_dir" = FAILED && test -f $dir/shar \
+ && ($dir/shar --print-text-domain-dir >/dev/null 2>&1)
+ then
+ locale_dir=`$dir/shar --print-text-domain-dir`
+ fi
+done
+IFS="$save_IFS"
+if test "$locale_dir" = FAILED || test "$gettext_dir" = FAILED
+then
+ echo=echo
+else
+ TEXTDOMAINDIR=$locale_dir
+ export TEXTDOMAINDIR
+ TEXTDOMAIN=sharutils
+ export TEXTDOMAIN
+ echo="$gettext_dir/gettext -s"
+fi
+if touch -am -t 200112312359.59 $$.touch >/dev/null 2>&1 && test ! -f 200112312359.59 -a -f $$.touch; then
+ shar_touch='touch -am -t $1$2$3$4$5$6.$7 "$8"'
+elif touch -am 123123592001.59 $$.touch >/dev/null 2>&1 && test ! -f 123123592001.59 -a ! -f 123123592001.5 -a -f $$.touch; then
+ shar_touch='touch -am $3$4$5$6$1$2.$7 "$8"'
+elif touch -am 1231235901 $$.touch >/dev/null 2>&1 && test ! -f 1231235901 -a -f $$.touch; then
+ shar_touch='touch -am $3$4$5$6$2 "$8"'
+else
+ shar_touch=:
+ echo
+ $echo 'WARNING: not restoring timestamps. Consider getting and'
+ $echo "installing GNU \`touch', distributed in GNU File Utilities..."
+ echo
+fi
+rm -f 200112312359.59 123123592001.59 123123592001.5 1231235901 $$.touch
+#
+if mkdir _sh10937; then
+ $echo 'x -' 'creating lock directory'
+else
+ $echo 'failed to create lock directory'
+ exit 1
+fi
+# ============= Makefile ==============
+if test -f 'Makefile' && test "$first_param" != -c; then
+ $echo 'x -' SKIPPING 'Makefile' '(file already exists)'
+else
+ $echo 'x -' extracting 'Makefile' '(text)'
+ sed 's/^X//' << 'SHAR_EOF' > 'Makefile' &&
+/*
+# Copyright 2000, International Business Machines, Inc.
+# All rights reserved.
+#
+# original author: George Kraft IV, gk4@us.ibm.com
+#
+# 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. Neither the name of International Business Machines, Inc., nor the
+# names of its contributors may be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY INTERNATIONAL BUSINESS MACHINES, INC. 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
+# INTERNATIONAL BUSINESS MACHINES, INC. 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.
+#
+X
+all: groupmems
+X
+groupmems: groupmems.c
+X cc -g -o groupmems groupmems.c -L. -lshadow
+X
+install: groupmems
+X -/usr/sbin/groupadd groups
+X install -o root -g groups -m 4770 groupmems /usr/bin
+X
+install.man: groupmems.8
+X install -o root -g root -m 644 groupmems.8 /usr/man/man8
+X
+SHAR_EOF
+ (set 20 00 05 25 14 40 28 'Makefile'; eval "$shar_touch") &&
+ chmod 0644 'Makefile' ||
+ $echo 'restore of' 'Makefile' 'failed'
+ if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
+ && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
+ md5sum -c << SHAR_EOF >/dev/null 2>&1 \
+ || $echo 'Makefile:' 'MD5 check failed'
+b46cf7ef8d59149093c011ced3f3103c Makefile
+SHAR_EOF
+ else
+ shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'Makefile'`"
+ test 1960 -eq "$shar_count" ||
+ $echo 'Makefile:' 'original size' '1960,' 'current size' "$shar_count!"
+ fi
+fi
+# ============= groupmems.c ==============
+if test -f 'groupmems.c' && test "$first_param" != -c; then
+ $echo 'x -' SKIPPING 'groupmems.c' '(file already exists)'
+else
+ $echo 'x -' extracting 'groupmems.c' '(text)'
+ sed 's/^X//' << 'SHAR_EOF' > 'groupmems.c' &&
+/*
+X * Copyright 2000, International Business Machines, Inc.
+X * All rights reserved.
+X *
+X * original author: George Kraft IV, gk4@us.ibm.com
+X *
+X * Redistribution and use in source and binary forms, with or without
+X * modification, are permitted provided that the following conditions
+X * are met:
+X *
+X * 1. Redistributions of source code must retain the above copyright
+X * notice, this list of conditions and the following disclaimer.
+X * 2. Redistributions in binary form must reproduce the above copyright
+X * notice, this list of conditions and the following disclaimer in the
+X * documentation and/or other materials provided with the distribution.
+X * 3. Neither the name of International Business Machines, Inc., nor the
+X * names of its contributors may be used to endorse or promote products
+X * derived from this software without specific prior written permission.
+X *
+X * THIS SOFTWARE IS PROVIDED BY INTERNATIONAL BUSINESS MACHINES, INC. AND
+X * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+X * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+X * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+X * INTERNATIONAL BUSINESS MACHINES, INC. OR CONTRIBUTORS BE LIABLE
+X * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+X * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+X * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+X * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+X * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+X * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+X * SUCH DAMAGE.
+X */
+/*
+**
+** Utility "groupmem" adds and deletes members from a user's group.
+**
+** Setup (as "root"):
+**
+** groupadd -r groups
+** chmod 2770 groupmems
+** chown root.groups groupmems
+** groupmems -g groups -a gk4
+**
+** Usage (as "gk4"):
+**
+** groupmems -a olive
+** groupmems -a jordan
+** groupmems -a meghan
+** groupmems -a morgan
+** groupmems -a jake
+** groupmems -l
+** groupmems -d jake
+** groupmems -l
+*/
+X
+#include <stdio.h>
+#include <pwd.h>
+#include <grp.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include "defines.h"
+#include "groupio.h"
+X
+/* Exit Status Values */
+X
+#define EXIT_SUCCESS 0 /* success */
+#define EXIT_USAGE 1 /* invalid command syntax */
+#define EXIT_GROUP_FILE 2 /* group file access problems */
+#define EXIT_NOT_ROOT 3 /* not superuser */
+#define EXIT_NOT_EROOT 4 /* not effective superuser */
+#define EXIT_NOT_PRIMARY 5 /* not primary owner of group */
+#define EXIT_NOT_MEMBER 6 /* member of group does not exist */
+#define EXIT_MEMBER_EXISTS 7 /* member of group already exists */
+X
+#define TRUE 1
+#define FALSE 0
+X
+/* Globals */
+X
+extern int optind;
+extern char *optarg;
+static char *adduser = NULL;
+static char *deluser = NULL;
+static char *thisgroup = NULL;
+static int purge = FALSE;
+static int list = FALSE;
+static int exclusive = 0;
+X
+static int isroot(void) {
+X return getuid() ? FALSE : TRUE;
+}
+X
+static int isgroup(void) {
+X gid_t g = getgid();
+X struct group *grp = getgrgid(g);
+X
+X return TRUE;
+}
+X
+static char *whoami(void) {
+X struct group *grp = getgrgid(getgid());
+X struct passwd *usr = getpwuid(getuid());
+X
+X if (0 == strcmp(usr->pw_name, grp->gr_name)) {
+X return (char *)strdup(usr->pw_name);
+X } else {
+X return NULL;
+X }
+}
+X
+static void
+addtogroup(char *user, char **members) {
+X int i;
+X char **pmembers;
+X
+X for (i = 0; NULL != members[i]; i++ ) {
+X if (0 == strcmp(user, members[i])) {
+X fprintf(stderr, "Member already exists\n");
+X exit(EXIT_MEMBER_EXISTS);
+X }
+X }
+X
+X if (0 == i) {
+X pmembers = (char **)calloc(2, sizeof(char *));
+X } else {
+X pmembers = (char **)realloc(members, sizeof(char *)*(i+1));
+X }
+X
+X *members = *pmembers;
+X members[i] = user;
+X members[i+1] = NULL;
+}
+X
+static void
+rmfromgroup(char *user, char **members) {
+X int i;
+X int found = FALSE;
+X
+X i = 0;
+X while (!found && NULL != members[i]) {
+X if (0 == strcmp(user, members[i])) {
+X found = TRUE;
+X } else {
+X i++;
+X }
+X }
+X
+X while (found && NULL != members[i]) {
+X members[i] = members[++i];
+X }
+X
+X if (!found) {
+X fprintf(stderr, "Member to remove could not be found\n");
+X exit(EXIT_NOT_MEMBER);
+X }
+}
+X
+static void
+nomembers(char **members) {
+X int i;
+X
+X for (i = 0; NULL != members[i]; i++ ) {
+X members[i] = NULL;
+X }
+}
+X
+static void
+members(char **members) {
+X int i;
+X
+X for (i = 0; NULL != members[i]; i++ ) {
+X printf("%s ", members[i]);
+X
+X if (NULL == members[i+1]) {
+X printf("\n");
+X } else {
+X printf(" ");
+X }
+X }
+}
+X
+static void usage(void) {
+X fprintf(stderr, "usage: groupmems -a username | -d username | -D | -l [-g groupname]\n");
+X exit(EXIT_USAGE);
+}
+X
+main(int argc, char **argv) {
+X int arg, i;
+X char *name;
+X struct group *grp;
+X
+X while ((arg = getopt(argc, argv, "a:d:g:Dl")) != EOF) {
+X switch (arg) {
+X case 'a':
+X adduser = strdup(optarg);
+X ++exclusive;
+X break;
+X case 'd':
+X deluser = strdup(optarg);
+X ++exclusive;
+X break;
+X case 'g':
+X thisgroup = strdup(optarg);
+X break;
+X case 'D':
+X purge = TRUE;
+X ++exclusive;
+X break;
+X case 'l':
+X list = TRUE;
+X ++exclusive;
+X break;
+X default:
+X usage();
+X }
+X }
+X
+X if (exclusive > 1 || optind < argc) {
+X usage();
+X }
+X
+X if (!isroot() && NULL != thisgroup) {
+X fprintf(stderr, "Only root can add members to different groups\n");
+X exit(EXIT_NOT_ROOT);
+X } else if (isroot() && NULL != thisgroup) {
+X name = thisgroup;
+X } else if (!isgroup()) {
+X fprintf(stderr, "Group access is required\n");
+X exit(EXIT_NOT_EROOT);
+X } else if (NULL == (name = whoami())) {
+X fprintf(stderr, "Not primary owner of current group\n");
+X exit(EXIT_NOT_PRIMARY);
+X }
+X
+X if (!gr_lock()) {
+X fprintf(stderr, "Unable to lock group file\n");
+X exit(EXIT_GROUP_FILE);
+X }
+X
+X if (!gr_open(O_RDWR)) {
+X fprintf(stderr, "Unable to open group file\n");
+X exit(EXIT_GROUP_FILE);
+X }
+X
+X grp = (struct group *)gr_locate(name);
+X
+X if (NULL != adduser) {
+X addtogroup(adduser, grp->gr_mem);
+X gr_update(grp);
+X } else if (NULL != deluser) {
+X rmfromgroup(deluser, grp->gr_mem);
+X gr_update(grp);
+X } else if (purge) {
+X nomembers(grp->gr_mem);
+X gr_update(grp);
+X } else if (list) {
+X members(grp->gr_mem);
+X }
+X
+X if (!gr_close()) {
+X fprintf(stderr, "Cannot close group file\n");
+X exit(EXIT_GROUP_FILE);
+X }
+X
+X gr_unlock();
+X
+X exit(EXIT_SUCCESS);
+}
+X
+/* EOF */
+SHAR_EOF
+ (set 20 00 05 25 14 36 38 'groupmems.c'; eval "$shar_touch") &&
+ chmod 0644 'groupmems.c' ||
+ $echo 'restore of' 'groupmems.c' 'failed'
+ if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
+ && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
+ md5sum -c << SHAR_EOF >/dev/null 2>&1 \
+ || $echo 'groupmems.c:' 'MD5 check failed'
+f0dd68f8d762d89d24d3ce1f4141f981 groupmems.c
+SHAR_EOF
+ else
+ shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'groupmems.c'`"
+ test 6348 -eq "$shar_count" ||
+ $echo 'groupmems.c:' 'original size' '6348,' 'current size' "$shar_count!"
+ fi
+fi
+# ============= groupmems.8 ==============
+if test -f 'groupmems.8' && test "$first_param" != -c; then
+ $echo 'x -' SKIPPING 'groupmems.8' '(file already exists)'
+else
+ $echo 'x -' extracting 'groupmems.8' '(text)'
+ sed 's/^X//' << 'SHAR_EOF' > 'groupmems.8' &&
+X.\"
+X.\" Copyright 2000, International Business Machines, Inc.
+X.\" All rights reserved.
+X.\"
+X.\" original author: George Kraft IV, gk4@us.ibm.com
+X.\"
+X.\" Redistribution and use in source and binary forms, with or without
+X.\" modification, are permitted provided that the following conditions
+X.\" are met:
+X.\"
+X.\" 1. Redistributions of source code must retain the above copyright
+X.\" notice, this list of conditions and the following disclaimer.
+X.\" 2. Redistributions in binary form must reproduce the above copyright
+X.\" notice, this list of conditions and the following disclaimer in the
+X.\" documentation and/or other materials provided with the distribution.
+X.\" 3. Neither the name of International Business Machines, Inc., nor the
+X.\" names of its contributors may be used to endorse or promote products
+X.\" derived from this software without specific prior written permission.
+X.\"
+X.\" THIS SOFTWARE IS PROVIDED BY INTERNATIONAL BUSINESS MACHINES, INC. AND
+X.\" CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+X.\" BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+X.\" FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+X.\" INTERNATIONAL BUSINESS MACHINES, INC. OR CONTRIBUTORS BE LIABLE
+X.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+X.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+X.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+X.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+X.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+X.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+X.\" SUCH DAMAGE.
+X.\"
+X.\" $Id$
+X.\"
+X.TH GROUPMEMS 8
+X.SH NAME
+groupmems \- Administer members of a user's primary group
+X.SH SYNOPSIS
+X.B groupmems
+\fB-a\fI user_name \fR |
+\fB-d\fI user_name \fR |
+\fB-l\fR |
+\fB-D\fR |
+[\fB-g\fI group_name \fR]
+X.SH DESCRIPTION
+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).
+X.P
+Only the superuser, as administrator, can use \fBgroupmems\fR to alter
+the memberships of other groups.
+X.IP "\fB-a \fIuser_name\fR"
+Add a new user to the group membership list.
+X.IP "\fB-d \fIuser_name\fR"
+Delete a user from the group membership list.
+X.IP "\fB-l\fR"
+List the group membership list.
+X.IP "\fB-D\fR"
+Delete all users from the group membership list.
+X.IP "\fB-g \fIgroup_name\fR"
+The superuser can specify which group membership list to modify.
+X.SH SETUP
+The \fBgroupmems\fR executable should be in mode \fB2770\fR as user \fBroot\fR
+and in group \fBgroups\fR. The system administrator can add users to
+group groups to allow or disallow them using the \fBgroupmems\fR utility
+to manager their own group membership list.
+X.P
+X $ groupadd -r groups
+X.br
+X $ chmod 2770 groupmems
+X.br
+X $ chown root.groups groupmems
+X.br
+X $ groupmems -g groups -a gk4
+X.SH FILES
+/etc/group
+X.br
+/etc/gshadow
+X.SH SEE ALSO
+X.BR chfn (1),
+X.BR chsh (1),
+X.BR useradd (8),
+X.BR userdel (8),
+X.BR usermod (8),
+X.BR passwd (1),
+X.BR groupadd (8),
+X.BR groupdel (8)
+X.SH AUTHOR
+George Kraft IV (gk4@us.ibm.com)
+X.\" EOF
+SHAR_EOF
+ (set 20 00 05 25 14 38 23 'groupmems.8'; eval "$shar_touch") &&
+ chmod 0600 'groupmems.8' ||
+ $echo 'restore of' 'groupmems.8' 'failed'
+ if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
+ && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
+ md5sum -c << SHAR_EOF >/dev/null 2>&1 \
+ || $echo 'groupmems.8:' 'MD5 check failed'
+181e6cd3a3c9d3df320197fa2cde2b4a groupmems.8
+SHAR_EOF
+ else
+ shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'groupmems.8'`"
+ test 3372 -eq "$shar_count" ||
+ $echo 'groupmems.8:' 'original size' '3372,' 'current size' "$shar_count!"
+ fi
+fi
+rm -fr _sh10937
+exit 0
diff --git a/contrib/pwdauth.c b/contrib/pwdauth.c
new file mode 100644
index 0000000..ca15495
--- /dev/null
+++ b/contrib/pwdauth.c
@@ -0,0 +1,308 @@
+/*
+ * pwdauth.c - program to verify a given username/password pair.
+ *
+ * Run it with username in argv[1] (may be omitted - default is the
+ * current user), and send it the password over a pipe on stdin.
+ * Exit status: 0 - correct password, 1 - wrong password, >1 - other
+ * errors. For use with shadow passwords, this program should be
+ * installed setuid root.
+ *
+ * This can be used, for example, by xlock - you don't have to install
+ * this large and complex (== possibly insecure) program setuid root,
+ * just modify it to run this simple program to do the authentication.
+ *
+ * Recent versions (xlockmore-3.9) are cleaner, and drop privileges as
+ * soon as possible after getting the user's encrypted password.
+ * Using this program probably doesn't make it more secure, and has one
+ * disadvantage: since we don't get the encrypted user's password at
+ * startup (but at the time the user is authenticated), it is not clear
+ * how we should handle errors (like getpwnam() returning NULL).
+ * - fail the authentication? Problem: no way to unlock (other than kill
+ * the process from somewhere else) if the NIS server stops responding.
+ * - succeed and unlock? Problem: it's too easy to unlock by unplugging
+ * the box from the network and waiting until NIS times out...
+ *
+ * This program is Copyright (C) 1996 Marek Michalkiewicz
+ * <marekm@i17linuxb.ists.pwr.wroc.pl>.
+ *
+ * It may be used and distributed freely for any purposes. There is no
+ * warranty - use at your own risk. I am not liable for any damages etc.
+ * If you improve it, please send me your changes.
+ */
+
+static char rcsid[] = "$Id$";
+
+/*
+ * Define USE_SYSLOG to use syslog() to log successful and failed
+ * authentication. This should be safe even if your system has
+ * the infamous syslog buffer overrun security problem...
+ */
+#define USE_SYSLOG
+
+/*
+ * Define HAVE_GETSPNAM to get shadow passwords using getspnam().
+ * Some systems don't have getspnam(), but getpwnam() returns
+ * encrypted passwords only if running as root.
+ *
+ * According to the xlock source (not tested, except Linux) -
+ * define: Linux, Solaris 2.x, SVR4, ...
+ * undef: HP-UX with Secured Passwords, FreeBSD, NetBSD, QNX.
+ * Known not supported (yet): Ultrix, OSF/1, SCO.
+ */
+#define HAVE_GETSPNAM
+
+/*
+ * Define HAVE_PW_ENCRYPT to use pw_encrypt() instead of crypt().
+ * pw_encrypt() is like the standard crypt(), except that it may
+ * support better password hashing algorithms.
+ *
+ * Define if linking with libshadow.a from the shadow password
+ * suite (Linux, SunOS 4.x?).
+ */
+#undef HAVE_PW_ENCRYPT
+
+/*
+ * Define HAVE_AUTH_METHODS to support the shadow suite specific
+ * extension: the encrypted password field contains a list of
+ * administrator defined authentication methods, separated by
+ * semicolons. This program only supports the standard password
+ * authentication method (a string that doesn't start with '@').
+ */
+#undef HAVE_AUTH_METHODS
+
+/*
+ * FAIL_DELAY - number of seconds to sleep before exiting if the
+ * password was wrong, to slow down password guessing attempts.
+ */
+#define FAIL_DELAY 2
+
+/* No user-serviceable parts below :-). */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+#include <pwd.h>
+
+#ifdef USE_SYSLOG
+#include <syslog.h>
+#ifndef LOG_AUTHPRIV
+#define LOG_AUTHPRIV LOG_AUTH
+#endif
+#endif
+
+#ifdef HAVE_GETSPNAM
+#include <shadow.h>
+#endif
+
+#ifdef HAVE_PW_ENCRYPT
+extern char *pw_encrypt();
+#define crypt pw_encrypt
+#endif
+
+/*
+ * Read the password (one line) from fp. We don't turn off echo
+ * because we expect input from a pipe.
+ */
+static char *
+get_line(fp)
+ FILE *fp;
+{
+ static char buf[128];
+ char *cp;
+ int ch;
+
+ cp = buf;
+ while ((ch = getc(fp)) != EOF && ch != '\0' && ch != '\n') {
+ if (cp >= buf + sizeof buf - 1)
+ break;
+ *cp++ = ch;
+ }
+ *cp = '\0';
+ return buf;
+}
+
+/*
+ * Get the password file entry for the current user. If the name
+ * returned by getlogin() is correct (matches the current real uid),
+ * return the entry for that user. Otherwise, return the entry (if
+ * any) matching the current real uid. Return NULL on failure.
+ */
+static struct passwd *
+get_my_pwent()
+{
+ uid_t uid = getuid();
+ char *name = getlogin();
+
+ if (name && *name) {
+ struct passwd *pw = getpwnam(name);
+
+ if (pw && pw->pw_uid == uid)
+ return pw;
+ }
+ return getpwuid(uid);
+}
+
+/*
+ * Verify the password. The system-dependent shadow support is here.
+ */
+static int
+password_auth_ok(pw, pass)
+ const struct passwd *pw;
+ const char *pass;
+{
+ int result;
+ char *cp;
+#ifdef HAVE_AUTH_METHODS
+ char *buf;
+#endif
+#ifdef HAVE_GETSPNAM
+ struct spwd *sp;
+#endif
+
+ if (pw) {
+#ifdef HAVE_GETSPNAM
+ sp = getspnam(pw->pw_name);
+ if (sp)
+ cp = sp->sp_pwdp;
+ else
+#endif
+ cp = pw->pw_passwd;
+ } else
+ cp = "xx";
+
+#ifdef HAVE_AUTH_METHODS
+ buf = strdup(cp); /* will be modified by strtok() */
+ if (!buf) {
+ fprintf(stderr, "Out of memory.\n");
+ exit(13);
+ }
+ cp = strtok(buf, ";");
+ while (cp && *cp == '@')
+ cp = strtok(NULL, ";");
+
+ /* fail if no password authentication for this user */
+ if (!cp)
+ cp = "xx";
+#endif
+
+ if (*pass || *cp)
+ result = (strcmp(crypt(pass, cp), cp) == 0);
+ else
+ result = 1; /* user with no password */
+
+#ifdef HAVE_AUTH_METHODS
+ free(buf);
+#endif
+ return result;
+}
+
+/*
+ * Main program.
+ */
+int
+main(argc, argv)
+ int argc;
+ char **argv;
+{
+ struct passwd *pw;
+ char *pass, *name;
+ char myname[32];
+
+#ifdef USE_SYSLOG
+ openlog("pwdauth", LOG_PID | LOG_CONS, LOG_AUTHPRIV);
+#endif
+ pw = get_my_pwent();
+ if (!pw) {
+#ifdef USE_SYSLOG
+ syslog(LOG_ERR, "can't get login name for uid %d.\n",
+ (int) getuid());
+#endif
+ fprintf(stderr, "Who are you?\n");
+ exit(2);
+ }
+ strncpy(myname, pw->pw_name, sizeof myname - 1);
+ myname[sizeof myname - 1] = '\0';
+ name = myname;
+
+ if (argc > 1) {
+ name = argv[1];
+ pw = getpwnam(name);
+ }
+
+ pass = get_line(stdin);
+ if (password_auth_ok(pw, pass)) {
+#ifdef USE_SYSLOG
+ syslog(pw->pw_uid ? LOG_INFO : LOG_NOTICE,
+ "user `%s' entered correct password for `%.32s'.\n",
+ myname, name);
+#endif
+ exit(0);
+ }
+#ifdef USE_SYSLOG
+ /* be careful not to overrun the syslog buffer */
+ syslog((!pw || pw->pw_uid) ? LOG_NOTICE : LOG_WARNING,
+ "user `%s' entered incorrect password for `%.32s'.\n",
+ myname, name);
+#endif
+#ifdef FAIL_DELAY
+ sleep(FAIL_DELAY);
+#endif
+ fprintf(stderr, "Wrong password.\n");
+ exit(1);
+}
+
+#if 0
+/*
+ * You can use code similar to the following to run this program.
+ * Return values: >=0 - program exit status (use the <sys/wait.h>
+ * macros to get the exit code, it is shifted left by 8 bits),
+ * -1 - check errno.
+ */
+int
+verify_password(const char *username, const char *password)
+{
+ int pipe_fd[2];
+ int pid, wpid, status;
+
+ if (pipe(pipe_fd))
+ return -1;
+
+ if ((pid = fork()) == 0) {
+ char *arg[3];
+ char *env[1];
+
+ /* child */
+ close(pipe_fd[1]);
+ if (pipe_fd[0] != 0) {
+ if (dup2(pipe_fd[0], 0) != 0)
+ _exit(127);
+ close(pipe_fd[0]);
+ }
+ arg[0] = "/usr/bin/pwdauth";
+ arg[1] = username;
+ arg[2] = NULL;
+ env[0] = NULL;
+ execve(arg[0], arg, env);
+ _exit(127);
+ } else if (pid == -1) {
+ /* error */
+ close(pipe_fd[0]);
+ close(pipe_fd[1]);
+ return -1;
+ }
+ /* parent */
+ close(pipe_fd[0]);
+ write(pipe_fd[1], password, strlen(password));
+ write(pipe_fd[1], "\n", 1);
+ close(pipe_fd[1]);
+
+ while ((wpid = wait(&status)) != pid) {
+ if (wpid == -1)
+ return -1;
+ }
+ return status;
+}
+#endif
diff --git a/contrib/shadow-anonftp.patch b/contrib/shadow-anonftp.patch
new file mode 100644
index 0000000..e09647d
--- /dev/null
+++ b/contrib/shadow-anonftp.patch
@@ -0,0 +1,147 @@
+Hello Marek,
+
+I have created a diffile against the 980403 release that adds
+functionality to newusers for automatic handling of users with only
+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
+directories used in the chrooted environment.
+
+I am using it to automatically create chunks of users with only ftp
+access for a webserver.
+
+I have tried to follow your coding standards and I believe it is bug
+free but.. well, who knows. :) It's not much code however.
+
+I hope you find it useful. Do what you like with it, feel free to ask if
+anything is unclear.
+
+Best rgds,
+ Calle Karlsson
+ ckn@kash.se
+
+diff -uNr shadow-980403.orig/src/newusers.c shadow-980403/src/newusers.c
+--- shadow-980403.orig/src/newusers.c Fri Jan 30 00:22:43 1998
++++ shadow-980403/src/newusers.c Fri Apr 17 16:55:33 1998
+@@ -76,11 +76,35 @@
+ static void
+ usage(void)
+ {
+- fprintf(stderr, "Usage: %s [ input ]\n", Prog);
++ fprintf (stderr, "Usage: %s [-p prototype tarfile] [ input ]\n", Prog);
++ fprintf (stderr, "The prototype tarfile is only used for users\n");
++ fprintf (stderr, "marked as anonymous ftp users. It must be a full pathname.\n");
+ exit(1);
+ }
+
+ /*
++ * createuserdir - create a directory and chmod it
++ */
++
++static int
++createuserdir (char * dir, int uid, int gid, int line)
++{
++ if (mkdir (dir, 0777 & ~getdef_num("UMASK", 077))) {
++ fprintf (stderr, "%s: line %d: mkdir %s failed\n",
++ Prog, line, dir);
++ return -1;
++ }
++
++ if (chown (dir, uid, gid)) {
++ fprintf (stderr, "%s: line %d: chown %s failed\n",
++ Prog, line, dir);
++ return -1;
++ }
++
++ return 0;
++}
++
++/*
+ * add_group - create a new group or add a user to an existing group
+ */
+
+@@ -328,6 +352,8 @@
+ main(int argc, char **argv)
+ {
+ char buf[BUFSIZ];
++ char anonproto[BUFSIZ];
++ int flag;
+ char *fields[8];
+ int nfields;
+ char *cp;
+@@ -340,12 +366,23 @@
+
+ Prog = Basename(argv[0]);
+
+- if (argc > 1 && argv[1][0] == '-')
+- usage ();
++ * anonproto = '\0';
++
++ while ((flag = getopt (argc, argv, "p:h")) != EOF) {
++ switch (flag) {
++ case 'p':
++ STRFCPY(anonproto, optarg);
++ break;
++ case 'h':
++ default:
++ usage ();
++ break;
++ }
++ }
+
+- if (argc == 2) {
+- if (! freopen (argv[1], "r", stdin)) {
+- snprintf(buf, sizeof buf, "%s: %s", Prog, argv[1]);
++ if (optind < argc) {
++ if (! freopen (argv[optind], "r", stdin)) {
++ snprintf(buf, sizeof buf, "%s: %s", Prog, argv[optind]);
+ perror (buf);
+ exit (1);
+ }
+@@ -499,15 +536,36 @@
+ if (fields[6][0])
+ newpw.pw_shell = fields[6];
+
+- if (newpw.pw_dir[0] && access(newpw.pw_dir, F_OK)) {
+- if (mkdir (newpw.pw_dir,
+- 0777 & ~getdef_num("UMASK", 077)))
+- fprintf (stderr, "%s: line %d: mkdir failed\n",
+- Prog, line);
+- else if (chown (newpw.pw_dir,
+- newpw.pw_uid, newpw.pw_gid))
+- fprintf (stderr, "%s: line %d: chown failed\n",
+- Prog, line);
++ if (newpw.pw_dir[0]) {
++ char * userdir = strdup (newpw.pw_dir);
++ char * anonpart;
++ int rc;
++
++ if ((anonpart = strstr (userdir, "/./"))) {
++ * anonpart = '\0';
++ anonpart += 2;
++ }
++
++ if (access(userdir, F_OK))
++ rc = createuserdir (userdir, newpw.pw_uid, newpw.pw_gid, line);
++ else
++ rc = 0;
++
++ if (rc == 0 && anonpart) {
++ if (* anonproto) {
++ char cmdbuf [BUFSIZ];
++ snprintf(cmdbuf, sizeof cmdbuf,
++ "cd %s; tar xf %s",
++ userdir, anonproto);
++ system (cmdbuf);
++ }
++ if (strlen (anonpart) > 1) {
++ strcat (userdir, anonpart);
++ if (access (userdir, F_OK))
++ createuserdir (userdir, newpw.pw_uid, newpw.pw_gid, line);
++ }
++ }
++ free (userdir);
+ }
+
+ /*
diff --git a/contrib/udbachk.tgz b/contrib/udbachk.tgz
new file mode 100644
index 0000000..605ad63
--- /dev/null
+++ b/contrib/udbachk.tgz
Binary files differ
diff --git a/depcomp b/depcomp
new file mode 100755
index 0000000..65cbf70
--- /dev/null
+++ b/depcomp
@@ -0,0 +1,791 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2018-03-07.03; # UTC
+
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+case $1 in
+ '')
+ echo "$0: No command. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+ depmode Dependency tracking mode.
+ source Source file read by 'PROGRAMS ARGS'.
+ object Object file output by 'PROGRAMS ARGS'.
+ DEPDIR directory where to store dependencies.
+ depfile Dependency file to output.
+ tmpdepfile Temporary file to use when outputting dependencies.
+ libtool Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "depcomp $scriptversion"
+ exit $?
+ ;;
+esac
+
+# Get the directory component of the given path, and save it in the
+# global variables '$dir'. Note that this directory component will
+# be either empty or ending with a '/' character. This is deliberate.
+set_dir_from ()
+{
+ case $1 in
+ */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
+ *) dir=;;
+ esac
+}
+
+# Get the suffix-stripped basename of the given path, and save it the
+# global variable '$base'.
+set_base_from ()
+{
+ base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
+}
+
+# If no dependency file was actually created by the compiler invocation,
+# we still have to create a dummy depfile, to avoid errors with the
+# Makefile "include basename.Plo" scheme.
+make_dummy_depfile ()
+{
+ echo "#dummy" > "$depfile"
+}
+
+# Factor out some common post-processing of the generated depfile.
+# Requires the auxiliary global variable '$tmpdepfile' to be set.
+aix_post_process_depfile ()
+{
+ # If the compiler actually managed to produce a dependency file,
+ # post-process it.
+ if test -f "$tmpdepfile"; then
+ # Each line is of the form 'foo.o: dependency.h'.
+ # Do two passes, one to just change these to
+ # $object: dependency.h
+ # and one to simply output
+ # dependency.h:
+ # which is needed to avoid the deleted-header problem.
+ { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
+ sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
+ } > "$depfile"
+ rm -f "$tmpdepfile"
+ else
+ make_dummy_depfile
+ fi
+}
+
+# A tabulation character.
+tab=' '
+# A newline character.
+nl='
+'
+# Character ranges might be problematic outside the C locale.
+# These definitions help.
+upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
+lower=abcdefghijklmnopqrstuvwxyz
+digits=0123456789
+alpha=${upper}${lower}
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+ echo "depcomp: Variables source, object and depmode must be set" 1>&2
+ exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+ sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Avoid interferences from the environment.
+gccflag= dashmflag=
+
+# Some modes work just like other modes, but use different flags. We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write. Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+ # HP compiler uses -M and no extra arg.
+ gccflag=-M
+ depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+ # This is just like dashmstdout with a different argument.
+ dashmflag=-xM
+ depmode=dashmstdout
+fi
+
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+ # This is just like msvisualcpp but w/o cygpath translation.
+ # Just convert the backslash-escaped backslashes to single forward
+ # slashes to satisfy depend.m4
+ cygpath_u='sed s,\\\\,/,g'
+ depmode=msvisualcpp
+fi
+
+if test "$depmode" = msvc7msys; then
+ # This is just like msvc7 but w/o cygpath translation.
+ # Just convert the backslash-escaped backslashes to single forward
+ # slashes to satisfy depend.m4
+ cygpath_u='sed s,\\\\,/,g'
+ depmode=msvc7
+fi
+
+if test "$depmode" = xlc; then
+ # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
+ gccflag=-qmakedep=gcc,-MF
+ depmode=gcc
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want. Yay! Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff. Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am. Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+ for arg
+ do
+ case $arg in
+ -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+ *) set fnord "$@" "$arg" ;;
+ esac
+ shift # fnord
+ shift # $arg
+ done
+ "$@"
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ mv "$tmpdepfile" "$depfile"
+ ;;
+
+gcc)
+## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
+## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
+## (see the conditional assignment to $gccflag above).
+## There are various ways to get dependency output from gcc. Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+## up in a subdir. Having to rename by hand is ugly.
+## (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+## -MM, not -M (despite what the docs say). Also, it might not be
+## supported by the other compilers which use the 'gcc' depmode.
+## - Using -M directly means running the compiler twice (even worse
+## than renaming).
+ if test -z "$gccflag"; then
+ gccflag=-MD,
+ fi
+ "$@" -Wp,"$gccflag$tmpdepfile"
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ # The second -e expression handles DOS-style file names with drive
+ # letters.
+ sed -e 's/^[^:]*: / /' \
+ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the "deleted header file" problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header). We avoid this by adding
+## dummy dependencies for each header file. Too bad gcc doesn't do
+## this for us directly.
+## Some versions of gcc put a space before the ':'. On the theory
+## that the space means something, we add a space to the output as
+## well. hp depmode also adds that space, but also prefixes the VPATH
+## to the object. Take care to not repeat it in the output.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+sgi)
+ if test "$libtool" = yes; then
+ "$@" "-Wp,-MDupdate,$tmpdepfile"
+ else
+ "$@" -MDupdate "$tmpdepfile"
+ fi
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+
+ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
+ echo "$object : \\" > "$depfile"
+ # Clip off the initial element (the dependent). Don't try to be
+ # clever and replace this with sed code, as IRIX sed won't handle
+ # lines with more than a fixed number of characters (4096 in
+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
+ # the IRIX cc adds comments like '#:fec' to the end of the
+ # dependency line.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
+ | tr "$nl" ' ' >> "$depfile"
+ echo >> "$depfile"
+ # The second pass generates a dummy entry for each header file.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+ >> "$depfile"
+ else
+ make_dummy_depfile
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+xlc)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+aix)
+ # The C for AIX Compiler uses -M and outputs the dependencies
+ # in a .u file. In older versions, this file always lives in the
+ # current directory. Also, the AIX compiler puts '$object:' at the
+ # start of each line; $object doesn't have directory information.
+ # Version 6 uses the directory in both cases.
+ set_dir_from "$object"
+ set_base_from "$object"
+ if test "$libtool" = yes; then
+ tmpdepfile1=$dir$base.u
+ tmpdepfile2=$base.u
+ tmpdepfile3=$dir.libs/$base.u
+ "$@" -Wc,-M
+ else
+ tmpdepfile1=$dir$base.u
+ tmpdepfile2=$dir$base.u
+ tmpdepfile3=$dir$base.u
+ "$@" -M
+ fi
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ aix_post_process_depfile
+ ;;
+
+tcc)
+ # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
+ # FIXME: That version still under development at the moment of writing.
+ # Make that this statement remains true also for stable, released
+ # versions.
+ # It will wrap lines (doesn't matter whether long or short) with a
+ # trailing '\', as in:
+ #
+ # foo.o : \
+ # foo.c \
+ # foo.h \
+ #
+ # It will put a trailing '\' even on the last line, and will use leading
+ # spaces rather than leading tabs (at least since its commit 0394caf7
+ # "Emit spaces for -MD").
+ "$@" -MD -MF "$tmpdepfile"
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
+ # We have to change lines of the first kind to '$object: \'.
+ sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
+ # And for each line of the second kind, we have to emit a 'dep.h:'
+ # dummy dependency, to avoid the deleted-header problem.
+ sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+## The order of this option in the case statement is important, since the
+## shell code in configure will try each of these formats in the order
+## listed in this file. A plain '-MD' option would be understood by many
+## compilers, so we must ensure this comes after the gcc and icc options.
+pgcc)
+ # Portland's C compiler understands '-MD'.
+ # Will always output deps to 'file.d' where file is the root name of the
+ # source file under compilation, even if file resides in a subdirectory.
+ # The object file name does not affect the name of the '.d' file.
+ # pgcc 10.2 will output
+ # foo.o: sub/foo.c sub/foo.h
+ # and will wrap long lines using '\' :
+ # foo.o: sub/foo.c ... \
+ # sub/foo.h ... \
+ # ...
+ set_dir_from "$object"
+ # Use the source, not the object, to determine the base name, since
+ # that's sadly what pgcc will do too.
+ set_base_from "$source"
+ tmpdepfile=$base.d
+
+ # For projects that build the same source file twice into different object
+ # files, the pgcc approach of using the *source* file root name can cause
+ # problems in parallel builds. Use a locking strategy to avoid stomping on
+ # the same $tmpdepfile.
+ lockdir=$base.d-lock
+ trap "
+ echo '$0: caught signal, cleaning up...' >&2
+ rmdir '$lockdir'
+ exit 1
+ " 1 2 13 15
+ numtries=100
+ i=$numtries
+ while test $i -gt 0; do
+ # mkdir is a portable test-and-set.
+ if mkdir "$lockdir" 2>/dev/null; then
+ # This process acquired the lock.
+ "$@" -MD
+ stat=$?
+ # Release the lock.
+ rmdir "$lockdir"
+ break
+ else
+ # If the lock is being held by a different process, wait
+ # until the winning process is done or we timeout.
+ while test -d "$lockdir" && test $i -gt 0; do
+ sleep 1
+ i=`expr $i - 1`
+ done
+ fi
+ i=`expr $i - 1`
+ done
+ trap - 1 2 13 15
+ if test $i -le 0; then
+ echo "$0: failed to acquire lock after $numtries attempts" >&2
+ echo "$0: check lockdir '$lockdir'" >&2
+ exit 1
+ fi
+
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ # Each line is of the form `foo.o: dependent.h',
+ # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+ sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process this invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp2)
+ # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+ # compilers, which have integrated preprocessors. The correct option
+ # to use with these is +Maked; it writes dependencies to a file named
+ # 'foo.d', which lands next to the object file, wherever that
+ # happens to be.
+ # Much of this is similar to the tru64 case; see comments there.
+ set_dir_from "$object"
+ set_base_from "$object"
+ if test "$libtool" = yes; then
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir.libs/$base.d
+ "$@" -Wc,+Maked
+ else
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir$base.d
+ "$@" +Maked
+ fi
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile1" "$tmpdepfile2"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
+ # Add 'dependent.h:' lines.
+ sed -ne '2,${
+ s/^ *//
+ s/ \\*$//
+ s/$/:/
+ p
+ }' "$tmpdepfile" >> "$depfile"
+ else
+ make_dummy_depfile
+ fi
+ rm -f "$tmpdepfile" "$tmpdepfile2"
+ ;;
+
+tru64)
+ # The Tru64 compiler uses -MD to generate dependencies as a side
+ # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
+ # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+ # dependencies in 'foo.d' instead, so we check for that too.
+ # Subdirectories are respected.
+ set_dir_from "$object"
+ set_base_from "$object"
+
+ if test "$libtool" = yes; then
+ # Libtool generates 2 separate objects for the 2 libraries. These
+ # two compilations output dependencies in $dir.libs/$base.o.d and
+ # in $dir$base.o.d. We have to check for both files, because
+ # one of the two compilations can be disabled. We should prefer
+ # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+ # automatically cleaned when .libs/ is deleted, while ignoring
+ # the former would cause a distcleancheck panic.
+ tmpdepfile1=$dir$base.o.d # libtool 1.5
+ tmpdepfile2=$dir.libs/$base.o.d # Likewise.
+ tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504
+ "$@" -Wc,-MD
+ else
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir$base.d
+ tmpdepfile3=$dir$base.d
+ "$@" -MD
+ fi
+
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ # Same post-processing that is required for AIX mode.
+ aix_post_process_depfile
+ ;;
+
+msvc7)
+ if test "$libtool" = yes; then
+ showIncludes=-Wc,-showIncludes
+ else
+ showIncludes=-showIncludes
+ fi
+ "$@" $showIncludes > "$tmpdepfile"
+ stat=$?
+ grep -v '^Note: including file: ' "$tmpdepfile"
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ # The first sed program below extracts the file names and escapes
+ # backslashes for cygpath. The second sed program outputs the file
+ # name when reading, but also accumulates all include files in the
+ # hold buffer in order to output them again at the end. This only
+ # works with sed implementations that can handle large buffers.
+ sed < "$tmpdepfile" -n '
+/^Note: including file: *\(.*\)/ {
+ s//\1/
+ s/\\/\\\\/g
+ p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/'"$tab"'\1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+ s/.*/'"$tab"'/
+ G
+ p
+}' >> "$depfile"
+ echo >> "$depfile" # make sure the fragment doesn't end with a backslash
+ rm -f "$tmpdepfile"
+ ;;
+
+msvc7msys)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+#nosideeffect)
+ # This comment above is used by automake to tell side-effect
+ # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout, regardless of -o.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove '-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ test -z "$dashmflag" && dashmflag=-M
+ # Require at least two characters before searching for ':'
+ # in the target name. This is to cope with DOS-style filenames:
+ # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
+ "$@" $dashmflag |
+ sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
+ rm -f "$depfile"
+ cat < "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process this sed invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+dashXmstdout)
+ # This case only exists to satisfy depend.m4. It is never actually
+ # run, as this mode is specially recognized in the preamble.
+ exit 1
+ ;;
+
+makedepend)
+ "$@" || exit $?
+ # Remove any Libtool call
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+ # X makedepend
+ shift
+ cleared=no eat=no
+ for arg
+ do
+ case $cleared in
+ no)
+ set ""; shift
+ cleared=yes ;;
+ esac
+ if test $eat = yes; then
+ eat=no
+ continue
+ fi
+ case "$arg" in
+ -D*|-I*)
+ set fnord "$@" "$arg"; shift ;;
+ # Strip any option that makedepend may not understand. Remove
+ # the object too, otherwise makedepend will parse it as a source file.
+ -arch)
+ eat=yes ;;
+ -*|$object)
+ ;;
+ *)
+ set fnord "$@" "$arg"; shift ;;
+ esac
+ done
+ obj_suffix=`echo "$object" | sed 's/^.*\././'`
+ touch "$tmpdepfile"
+ ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+ rm -f "$depfile"
+ # makedepend may prepend the VPATH from the source file name to the object.
+ # No need to regex-escape $object, excess matching of '.' is harmless.
+ sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process the last invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ sed '1,2d' "$tmpdepfile" \
+ | tr ' ' "$nl" \
+ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile" "$tmpdepfile".bak
+ ;;
+
+cpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove '-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ "$@" -E \
+ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+ | sed '$ s: \\$::' > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ cat < "$tmpdepfile" >> "$depfile"
+ sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvisualcpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ IFS=" "
+ for arg
+ do
+ case "$arg" in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+ set fnord "$@"
+ shift
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift
+ shift
+ ;;
+ esac
+ done
+ "$@" -E 2>/dev/null |
+ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
+ echo "$tab" >> "$depfile"
+ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvcmsys)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+none)
+ exec "$@"
+ ;;
+
+*)
+ echo "Unknown depmode $depmode" 1>&2
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/doc/HOWTO b/doc/HOWTO
new file mode 100644
index 0000000..01a90ed
--- /dev/null
+++ b/doc/HOWTO
@@ -0,0 +1,1918 @@
+[ Note: the installation instructions in this document are somewhat
+ out of date - the package now uses GNU autoconf and is configured
+ just like most GNU packages: run ./configure then make. --marekm ]
+
+ Linux Shadow Password HOWTO
+ Michael H. Jackson, mhjack@tscnet.com
+ v1.3, 3 April 1996
+
+ This document aims to describe how to obtain, install, and configure
+ the Linux password Shadow Suite. It also discusses obtaining, and
+ reinstalling other software and network daemons that require access to
+ user passwords. This other software is not actually part of the
+ Shadow Suite, but these programs will need to be recompiled to support
+ the Shadow Suite. This document also contains a programming example
+ for adding shadow support to a program. Answers to some of the more
+ frequently asked questions are included near the end of this document.
+
+ 1. Introduction.
+
+ This is the Linux Shadow-Password-HOWTO. This document describes why
+ and how to add shadow password support on a Linux system. Some
+ examples of how to use some of the Shadow Suite's features is also
+ included.
+
+ When installing the Shadow Suite and when using many of the utility
+ programs, you must be logged in as root. When installing the Shadow
+ Suite you will be making changes to system software, and it is highly
+ recommended that you make backup copies of programs as indicated. I
+ also recommend that you read and understand all the instructions
+ before you begin.
+
+ 1.1. Changes from the previous release.
+
+ Additions:
+ Added a sub-section on why you might not want to install shadow
+ Added a sub-section on updating the xdm program
+ Added a section on how to put Shadow Suite features to work
+ Added a section containing frequently asked questions
+
+ Corrections/Updates:
+ Corrected html references on Sunsite
+ Corrected section on wu-ftp to reflect adding -lshadow to the Makefile
+ Corrected minor spelling and verbiage errors
+ Changed section on wu-ftpd to support ELF
+ Updated to reflect security problems in various login programs
+ Updated to recommend the Linux Shadow Suite by Marek Michalkiewicz
+
+ 1.2. New versions of this document.
+
+ The latest released version of this document can always be retrieved
+ by anonymous FTP from:
+
+ sunsite.unc.edu
+
+ /pub/Linux/docs/HOWTO/Shadow-Password-HOWTO
+
+ or:
+
+ /pub/Linux/docs/HOWTO/other-formats/Shadow-Password-HOWTO{-html.tar,ps,dvi}.gz
+
+ or via the World Wide Web from the Linux Documentation Project Web
+ Server <http://sunsite.unc.edu/mdw/linux.html>, at page: Shadow-
+ Password-HOWTO <http://sunsite.unc.edu/linux/HOWTO/Shadow-Password-
+ HOWTO.html> or directly from me, <mhjack@tscnet.com>. It will also be
+ posted to the newsgroup: comp.os.linux.answers
+
+ This document is now packaged with the Shadow-YYDDMM packages.
+
+ 1.3. Feedback.
+
+ Please send any comments, updates, or suggestions to me: Michael H.
+ Jackson <mhjack@tscnet.com> The sooner I get feedback, the sooner I
+ can update and correct this document. If you find any problems with
+ it, please mail me directly as I very rarely stay up-to-date on the
+ newsgroups.
+
+ 2. Why shadow your passwd file?
+
+ By default, most current Linux distributions do not contain the Shadow
+ Suite installed. This includes Slackware 2.3, Slackware 3.0, and
+ other popular distributions. One of the reasons for this is that the
+ copyright notices in the original Shadow Suite were not clear on
+ redistribution if a fee was charged. Linux uses a GNU Copyright
+ (sometimes refereed to as a Copyleft) that allows people to package it
+ into a convenient package (like a CD-ROM distribution) and charge a
+ fee for it.
+
+ The current maintainer of the Shadow Suite, Marek Michalkiewicz
+ <marekm@i17linuxb.ists.pwr.wroc.pl> received the source code from the
+ original author under a BSD style copyright that allowed
+ redistribution. Now that the copyright issues are resolved, it is
+ expected that future distributions will contain password shadowing by
+ default. Until then, you will need to install it yourself.
+
+ If you installed your distribution from a CD-ROM, you may find that,
+ even though the distribution did not have the Shadow Suite installed,
+ some of the files you need to install the Shadow Suite may be on the
+ CD-ROM.
+
+ However, Shadow Suite versions 3.3.1, 3.3.1-2, and shadow-mk all have
+ security problems with their login program and several other suid root
+ programs that came with them, and should no longer be used.
+
+ All of the necessary files may be obtained via anonymous FTP or
+ through the World Wide Web.
+
+ On a Linux system without the Shadow Suite installed, user information
+ including passwords is stored in the /etc/passwd file. The password
+ is stored in an encrypted format. If you ask a cryptography expert,
+ however, he or she will tell you that the password is actually in an
+ encoded rather than encrypted format because when using crypt(3), the
+ text is set to null and the password is the key. Therefore, from here
+ on, I will use the term encoded in this document.
+
+ The algorithm used to encode the password field is technically
+ referred to as a one way hash function. This is an algorithm that is
+ easy to compute in one direction, but very difficult to calculate in
+ the reverse direction. More about the actual algorithm used can be
+ found in section 2.4 or your crypt(3) manual page.
+
+ When a user picks or is assigned a password, it is encoded with a
+ randomly generated value called the salt. This means that any
+ particular password could be stored in 4096 different ways. The salt
+ value is then stored with the encoded password.
+
+ When a user logs in and supplies a password, the salt is first
+ retrieved from the stored encoded password. Then the supplied
+ password is encoded with the salt value, and then compared with the
+ encoded password. If there is a match, then the user is
+ authenticated.
+
+ It is computationally difficult (but not impossible) to take a
+ randomly encoded password and recover the original password. However,
+ on any system with more than just a few users, at least some of the
+ passwords will be common words (or simple variations of common words).
+
+ System crackers know all this, and will simply encrypt a dictionary of
+ words and common passwords using all possible 4096 salt values. Then
+ they will compare the encoded passwords in your /etc/passwd file with
+ their database. Once they have found a match, they have the password
+ for another account. This is referred to as a dictionary attack, and
+ is one of the most common methods for gaining or expanding
+ unauthorized access to a system.
+
+ If you think about it, an 8 character password encodes to 4096 * 13
+ character strings. So a dictionary of say 400,000 common words,
+ names, passwords, and simple variations would easily fit on a 4GB hard
+ drive. The attacker need only sort them, and then check for matches.
+ Since a 4GB hard drive can be had for under $1000.00, this is well
+ within the means of most system crackers.
+
+ Also, if a cracker obtains your /etc/passwd file first, they only need
+ to encode the dictionary with the salt values actually contained in
+ your /etc/passwd file. This method is usable by your average teenager
+ with a couple of hundred spare Megabytes and a 486 class computer.
+
+ Even without lots of drive space, utilities like crack(1) can usually
+ break at least a couple of passwords on a system with enough users
+ (assuming the users of the system are allowed to pick their own
+ passwords).
+
+ The /etc/passwd file also contains information like user ID's and
+ group ID's that are used by many system programs. Therefore, the
+ /etc/passwd file must remain world readable. If you were to change
+ the /etc/passwd file so that nobody can read it, the first thing that
+ you would notice is that the ls -l command now displays user ID's
+ instead of names!
+
+ The Shadow Suite solves the problem by relocating the passwords to
+ another file (usually /etc/shadow). The /etc/shadow file is set so
+ that it cannot be read by just anyone. Only root will be able to read
+ and write to the /etc/shadow file. Some programs (like xlock) don't
+ need to be able to change passwords, they only need to be able to
+ verify them. These programs can either be run suid root or you can
+ set up a group shadow that is allowed read only access to the
+ /etc/shadow file. Then the program can be run sgid shadow.
+
+ By moving the passwords to the /etc/shadow file, we are effectively
+ keeping the attacker from having access to the encoded passwords with
+ which to perform a dictionary attack.
+
+ Additionally, the Shadow Suite adds lots of other nice features:
+
+ A configuration file to set login defaults (/etc/login.defs)
+
+ Utilities for adding, modifying, and deleting user accounts and
+ groups
+
+ Password aging and expiration
+
+ Account expiration and locking
+
+ Shadowed group passwords (optional)
+
+ Double length passwords (16 character passwords) NOT RECOMMENDED
+
+ Better control over user's password selection
+
+ Dial-up passwords
+
+ Secondary authentication programs NOT RECOMMENDED
+
+ Installing the Shadow Suite contributes toward a more secure system,
+ but there are many other things that can also be done to improve the
+ security of a Linux system, and there will eventually be a series of
+ Linux Security HOWTO's that will discuss other security measures and
+ related issues.
+
+ For current information on other Linux security issues, including
+ warnings on known vulnerabilities see the Linux Security home page.
+ <http://bach.cis.temple.edu/linux/linux-security/>
+
+ 2.1. Why you might NOT want to shadow your passwd file.
+
+ There are a few circumstances and configurations in which installing
+ the Shadow Suite would NOT be a good idea:
+
+ The machine does not contain user accounts.
+
+ Your machine is running on a LAN and is using NIS (Network
+ Information Services) to get or supply user names and passwords to
+ other machines on the network. (This can actually be done, but is
+ beyond the scope of this document, and really won't increase
+ security much anyway)
+
+ Your machine is being used by terminal servers to verify users via
+ NFS (Network File System), NIS, or some other method.
+
+ Your machine runs other software that validates users, and there is
+ no shadow version available, and you don't have the source code.
+
+ 2.2. Format of the /etc/passwd file
+
+ A non-shadowed /etc/passwd file has the following format:
+
+ username:passwd:UID:GID:full_name:directory:shell
+
+ Where:
+
+ username
+ The user (login) name
+
+ passwd
+ The encoded password
+
+ UID
+ Numerical user ID
+
+ GID
+ Numerical default group ID
+
+ full_name
+ The user's full name - Actually this field is called the GECOS
+ (General Electric Comprehensive Operating System) field and can
+ store information other than just the full name. The Shadow
+ commands and manual pages refer to this field as the comment
+ field.
+
+ directory
+ User's home directory (Full pathname)
+
+ shell
+ User's login shell (Full Pathname)
+
+ For example:
+
+ username:Npge08pfz4wuk:503:100:Full Name:/home/username:/bin/sh
+
+ Where Np is the salt and ge08pfz4wuk is the encoded password. The
+ encoded salt/password could just as easily have been kbeMVnZM0oL7I and
+ the two are exactly the same password. There are 4096 possible encod
+ ings for the same password. (The example password in this case is
+ 'password', a really bad password).
+
+ Once the shadow suite is installed, the /etc/passwd file would instead
+ contain:
+
+ username:x:503:100:Full Name:/home/username:/bin/sh
+
+ The x in the second field in this case is now just a place holder.
+ The format of the /etc/passwd file really didn't change, it just no
+ longer contains the encoded password. This means that any program
+ that reads the /etc/passwd file but does not actually need to verify
+ passwords will still operate correctly.
+
+ The passwords are now relocated to the shadow file (usually
+ /etc/shadow file).
+
+ 2.3. Format of the shadow file
+
+ The /etc/shadow file contains the following information:
+
+ username:passwd:last:may:must:warn:expire:disable:reserved
+
+ Where:
+
+ username
+ The User Name
+
+ passwd
+ The Encoded password
+ last
+ Days since Jan 1, 1970 that password was last changed
+
+ may
+ Days before password may be changed
+
+ must
+ Days after which password must be changed
+
+ warn
+ Days before password is to expire that user is warned
+
+ expire
+ Days after password expires that account is disabled
+
+ disable
+ Days since Jan 1, 1970 that account is disabled
+
+ reserved
+ A reserved field
+
+ The previous example might then be:
+
+ username:Npge08pfz4wuk:9479:0:10000::::
+
+ 2.4. Review of crypt(3).
+
+ From the crypt(3) manual page:
+
+ "crypt is the password encryption function. It is based on the Data
+ Encryption Standard algorithm with variations intended (among other
+ things) to discourage use of hardware implementations of a key search.
+
+ The key is a user's typed password. The encoded string is all NULLs
+
+ The salt is a two-character string chosen from the set a-zA-Z0-9./.
+ This string is used to perturb the algorithm in one of 4096 different
+ ways.
+
+ By taking the lowest 7 bits of each character of the key, a 56-bit key
+ is obtained. This 56-bit key is used to encrypt repeatedly a constant
+ string (usually a string consisting of all zeros). The returned value
+ points to the encrypted password, a series of 13 printable ASCII
+ characters (the first two characters represent the salt itself). The
+ return value points to static data whose content is overwritten by
+ each call.
+
+ Warning: The key space consists of 2**56 equal 7.2e16 possible values.
+ Exhaustive searches of this key space are possible using massively
+ parallel computers. Software, such as crack(1), is available which
+ will search the portion of this key space that is generally used by
+ humans for passwords. Hence, password selection should, at minimum,
+ avoid common words and names. The use of a passwd(1) program that
+ checks for crackable passwords during the selection process is
+ recommended.
+
+ The DES algorithm itself has a few quirks which make the use of the
+ crypt(3) interface a very poor choice for anything other than password
+ authentication. If you are planning on using the crypt(3) interface
+ for a cryptography project, don't do it: get a good book on encryption
+ and one of the widely available DES libraries."
+
+ Most Shadow Suites contain code for doubling the length of the
+ password to 16 characters. Experts in des recommend against this, as
+ the encoding is simply applied first to the left half and then to the
+ right half of the longer password. Because of the way crypt works,
+ this may make for a less secure encoded password then if double length
+ passwords were not used in the first place. Additionally, it is less
+ likely that a user will be able to remember a 16 character password.
+
+ There is development work under way that would allow the
+ authentication algorithm to be replaced with something more secure and
+ with support for longer passwords (specifically the MD5 algorithm) and
+ retain compatibility with the crypt method.
+
+ If you are looking for a good book on encryption, I recommend:
+
+ "Applied Cryptography: Protocols, Algorithms, and Source Code in C"
+ by Bruce Schneier <schneier@chinet.com>
+ ISBN: 0-471-59756-2
+
+ 3. Getting the Shadow Suite.
+
+ 3.1. History of the Shadow Suite for Linux
+
+ DO NOT USE THE PACKAGES IN THIS SECTION, THEY HAVE SECURITY PROBLEMS
+
+ The original Shadow Suite was written by Julianne F. Haugh
+
+ There are several versions that have been used on Linux systems:
+
+ shadow-3.3.1 is the original.
+
+ shadow-3.3.1-2 is Linux specific patch made by Florian La Roche
+ <flla@stud.uni-sb.de> and contains some further enhancements.
+
+ shadow-mk was specifically packaged for Linux.
+
+ The shadow-mk package contains the shadow-3.3.1 package distributed by
+ Julianne F. Haugh with the shadow-3.3.1-2 patch installed, a few fixes
+ made by Mohan Kokal <magnus@texas.net> that make installation a lot
+ easier, a patch by Joseph R.M. Zbiciak for login1.c (login.secure)
+ that eliminates the -f, -h security holes in /bin/login, and some
+ other miscellaneous patches.
+
+ The shadow.mk package was the previously recommended package, but
+ should be replaced due to a security problem with the login program.
+
+ There are security problems with Shadow versions 3.3.1, 3.3.1-2, and
+ shadow-mk involving the login program. This login bug involves not
+ checking the length of a login name. This causes the buffer to
+ overflow causing crashes or worse. It has been rumored that this
+ buffer overflow can allow someone with an account on the system to use
+ this bug and the shared libraries to gain root access. I won't
+ discuss exactly how this is possible because there are a lot of Linux
+ systems that are affected, but systems with these Shadow Suites
+ installed, and most pre-ELF distributions without the Shadow Suite are
+ vulnerable!
+
+ For more information on this and other Linux security issues, see the
+ Linux Security home page (Shared Libraries and login Program
+ Vulnerability) <http://bach.cis.temple.edu/linux/linux-security/Linux-
+ Security-FAQ/Linux-telnetd.html>
+
+ 3.2. Where to get the Shadow Suite.
+
+ The only recommended Shadow Suite is still in BETA testing, however
+ the latest versions are safe in a production environment and don't
+ contain a vulnerable login program.
+
+ The package uses the following naming convention:
+
+ shadow-YYMMDD.tar.gz
+
+ where YYMMDD is the issue date of the Suite.
+
+ This version will eventually be Version 3.3.3 when it is released from
+ Beta testing, and is maintained by Marek Michalkiewicz
+ <marekm@i17linuxb.ists.pwr.wroc.pl>. It's available as: shadow-
+ current.tar.gz
+ <ftp://i17linuxb.ists.pwr.wroc.pl/pub/linux/shadow/shadow-
+ current.tar.gz>.
+
+ The following mirror sites have also been established:
+
+ ftp://ftp.icm.edu.pl/pub/Linux/shadow/shadow-current.tar.gz
+
+ ftp://iguana.hut.fi/pub/linux/shadow/shadow-current.tar.gz
+
+ ftp://ftp.cin.net/usr/ggallag/shadow/shadow-current.tar.gz
+
+ ftp://ftp.netural.com/pub/linux/shadow/shadow-current.tar.gz
+
+ You should use the currently available version.
+
+ You should NOT use a version older than shadow-960129 as they also
+ have the login security problem discussed above.
+
+ When this document refers to the Shadow Suite I am referring to the
+ this package. It is assumed that this is the package that you are
+ using.
+
+ For reference, I used shadow-960129 to make these installation
+ instructions.
+
+ If you were previously using shadow-mk, you should upgrade to this
+ version and rebuild everything that you originally compiled.
+
+ 3.3. What is included with the Shadow Suite.
+
+ The Shadow Suite contains replacement programs for:
+
+ su, login, passwd, newgrp, chfn, chsh, and id
+
+ The package also contains the new programs:
+
+ chage, newusers, dpasswd, gpasswd, useradd, userdel, usermod,
+ groupadd, groupdel, groupmod, groups, pwck, grpck, lastlog, pwconv,
+ and pwunconv
+
+ Additionally, the library: libshadow.a is included for writing and/or
+ compiling programs that need to access user passwords.
+
+ Also, manual pages for the programs are also included.
+
+ There is also a configuration file for the login program which will be
+ installed as /etc/login.defs.
+
+ 4. Compiling the programs.
+
+ 4.1. Unpacking the archive.
+
+ The first step after retrieving the package is unpacking it. The
+ package is in the tar (tape archive) format and compressed using gzip,
+ so first move it to /usr/src, then type:
+
+ tar -xzvf shadow-current.tar.gz
+
+ This will unpack it into the directory: /usr/src/shadow-YYMMDD
+
+ 4.2. Configuring with the config.h file
+
+ The first thing that you need to do is to copy over the Makefile and
+ the config.h file:
+
+ cd /usr/src/shadow-YYMMDD
+ cp Makefile.linux Makefile
+ cp config.h.linux config.h
+
+ You should then take a look at the config.h file. This file contains
+ definitions for some of the configuration options. If you are using
+ the recommended package, I recommend that you disable group shadow
+ support for your first time around.
+
+ By default shadowed group passwords are enabled. To disable these
+ edit the config.h file, and change the #define SHADOWGRP to #undef
+ SHADOWGRP. I recommend that you disable them to start with, and then
+ if you really want group passwords and group administrators that you
+ enable it later and recompile. If you leave it enabled, you must
+ create the file /etc/gshadow.
+
+ Enabling the long passwords option is NOT recommended as discussed
+ above.
+
+ Do NOT change the setting: #undef AUTOSHADOW
+
+ The AUTOSHADOW option was originally designed so that programs that
+ were shadow ignorant would still function. This sounds good in
+ theory, but does not work correctly. If you enable this option, and
+ the program runs as root, it may call getpwnam() as root, and later
+ write the modified entry back to the /etc/passwd file (with the no-
+ longer-shadowed password). Such programs include chfn and chsh. (You
+ can't get around this by swapping real and effective uid before
+ calling getpwnam() because root may use chfn and chsh too.)
+
+ The same warning is also valid if you are building libc, it has a
+ SHADOW_COMPAT option which does the same thing. It should NOT be
+ used! If you start getting encoded passwords back in your /etc/passwd
+ file, this is the problem.
+
+ If you are using a libc version prior to 4.6.27, you will need to make
+ a couple more changes to config.h and the Makefile. To config.h edit
+ and change:
+
+ #define HAVE_BASENAME
+
+ to:
+
+ #undef HAVE_BASENAME
+
+ And then in the Makefile, change:
+
+ SOBJS = smain.o env.o entry.o susetup.o shell.o \
+ sub.o mail.o motd.o sulog.o age.o tz.o hushed.o
+
+ SSRCS = smain.c env.c entry.c setup.c shell.c \
+ pwent.c sub.c mail.c motd.c sulog.c shadow.c age.c pwpack.c rad64.c \
+ tz.c hushed.c
+
+ SOBJS = smain.o env.o entry.o susetup.o shell.o \
+ sub.o mail.o motd.o sulog.o age.o tz.o hushed.o basename.o
+
+ SSRCS = smain.c env.c entry.c setup.c shell.c \
+ pwent.c sub.c mail.c motd.c sulog.c shadow.c age.c pwpack.c rad64.c \
+ tz.c hushed.c basename.c
+
+ These changes add the code contained in basename.c which is contained
+ in libc 4.6.27 and later.
+
+ 4.3. Making backup copies of your original programs.
+
+ It would also be a good idea to track down and make backup copies of
+ the programs that the shadow suite will replace. On a Slackware 3.0
+ system these are:
+
+ /bin/su
+
+ /bin/login
+
+ /usr/bin/passwd
+
+ /usr/bin/newgrp
+
+ /usr/bin/chfn
+
+ /usr/bin/chsh
+
+ /usr/bin/id
+
+ The BETA package has a save target in the Makefile, but it's commented
+ out because different distributions place the programs in different
+ places.
+
+ You should also make a backup copy of your /etc/passwd file, but be
+ careful to name it something else if you place it in the same
+ directory so you don't overwrite the passwd command.
+
+ 4.4. Running make
+
+ You need to be logged as root to do most of the installation.
+
+ Run make to compile the executables in the package:
+
+ make all
+
+ You may see the warning: rcsid defined but not used. This is fine, it
+ just happens because the author is using a version control package.
+
+ 5. Installing
+
+ 5.1. Have a boot disk handy in case you break anything.
+
+ If something goes terribly wrong, it would be handy to have a boot
+ disk. If you have a boot/root combination from your installation,
+ that will work, otherwise see the Bootdisk-HOWTO
+ <http://sunsite.unc.edu/mdw/HOWTO/Bootdisk-HOWTO.html>, which
+ describes how to make a bootable disk.
+
+ 5.2. Removing duplicate man pages
+
+ You should also move the manual pages that are about to be replaced.
+ Even if you are brave enough install the Shadow Suite without making
+ backups, you will still want to remove the old manual pages. The new
+ manual pages won't normally overwrite the old ones because the old
+ ones are probably compressed.
+
+ You can use a combination of: man -aW command and locate command to
+ locate the manual pages that need to be (re)moved. It's generally
+ easier to figure out which are the older pages before you run make
+ install.
+
+ If you are using the Slackware 3.0 distribution, then the manual pages
+ you want to remove are:
+
+ /usr/man/man1/chfn.1.gz
+
+ /usr/man/man1/chsh.1.gz
+
+ /usr/man/man1/id.1.gz
+
+ /usr/man/man1/login.1.gz
+
+ /usr/man/man1/passwd.1.gz
+
+ /usr/man/man1/su.1.gz
+
+ /usr/man/man5/passwd.5.gz
+
+ There may also be man pages of the same name in the /var/man/cat[1-9]
+ subdirectories that should also be deleted.
+
+ 5.3. Running make install
+
+ You are now ready to type: (do this as root)
+
+ make install
+
+ This will install the new and replacement programs and fix-up the file
+ permissions. It will also install the man pages.
+
+ This also takes care of installing the Shadow Suite include files in
+ the correct places in /usr/include/shadow.
+
+ Using the BETA package you must manually copy the file login.defs to
+ the /etc subdirectory and make sure that only root can make changes to
+ it.
+
+ cp login.defs /etc
+ chmod 700 /etc/login.defs
+
+ This file is the configuration file for the login program. You should
+ review and make changes to this file for your particular system. This
+ is where you decide which tty's root can login from, and set other
+ security policy settings (like password expiration defaults).
+
+ 5.4. Running pwconv
+
+ The next step is to run pwconv. This must also be done as root, and
+ is best done from the /etc subdirectory:
+
+ cd /etc
+ /usr/sbin/pwconv
+
+ pwconv takes your /etc/passwd file and strips out the fields to create
+ two files: /etc/npasswd and /etc/nshadow.
+
+ A pwunconv program is also provided if you need to make a normal
+ /etc/passwd file out of an /etc/passwd and /etc/shadow combination.
+
+ 5.5. Renaming npasswd and nshadow
+
+ Now that you have run pwconv you have created the files /etc/npasswd
+ and /etc/nshadow. These need to be copied over to /etc/passwd and
+ /etc/shadow. We also want to make a backup copy of the original
+ /etc/passwd file, and make sure only root can read it. We'll put the
+ backup in root's home directory:
+
+ cd /etc
+ cp passwd ~passwd
+ chmod 600 ~passwd
+ mv npasswd passwd
+ mv nshadow shadow
+
+ You should also ensure that the file ownerships and permissions are
+ correct. If you are going to be using X-Windows, the xlock and xdm
+ programs need to be able to read the shadow file (but not write it).
+
+ There are two ways that this can be done. You can set xlock to suid
+ root (xdm is usually run as root anyway). Or you can make the shadow
+ file owned by root with a group of shadow, but before you do this,
+ make sure that you have a shadow group (look in /etc/group). None of
+ the users on the system should actually be in the shadow group.
+
+ chown root.root passwd
+ chown root.shadow shadow
+ chmod 0644 passwd
+ chmod 0640 shadow
+
+ Your system now has the password file shadowed. You should now pop
+ over to another virtual terminal and verify that you can login.
+
+ Really, do this now!
+
+ If you can't, then something is wrong! To get back to a non-shadowed
+ state, do the following the following:
+
+ cd /etc
+ cp ~passwd passwd
+ chmod 644 passwd
+
+ You would then restore the files that you saved earlier to their
+ proper locations.
+
+ 6. Other programs you may need to upgrade or patch
+
+ Even though the shadow suite contains replacement programs for most
+ programs that need to access passwords, there are a few additional
+ programs on most systems that require access to passwords.
+
+ If you are running a Debian Distribution (or even if you are not), you
+ can obtain Debian sources for the programs that need to be rebuild
+ from: ftp://ftp.debian.org/debian/stable/source/
+
+ The remainder of this section discusses how to upgrade adduser,
+ wu_ftpd, ftpd, pop3d, xlock, xdm and sudo so that they support the
+ shadow suite.
+
+ See the section ``Adding Shadow Support to a C program'' for a
+ discussion on how to put shadow support into any other program that
+ needs it (although the program must then be run SUID root or SGID
+ shadow to be able to actually access the shadow file).
+
+ 6.1. Slackware adduser program
+
+ Slackware distributions (and possibly some others) contain a
+ interactive program for adding users called /sbin/adduser. A shadow
+ version of this program can be obtained from
+ ftp://sunsite.unc.edu/pub/Linux/
+ system/Admin/accounts/adduser.shadow-1.4.tar.gz.
+
+ I would encourage you to use the programs that are supplied with the
+ Shadow Suite (useradd, usermod, and userdel) instead of the slackware
+ adduser program. They take a little time to learn how to use, but
+ it's well worth the effort because you have much more control and they
+ perform proper file locking on the /etc/passwd and /etc/shadow file
+ (adduser doesn't).
+
+ See the section on ``Putting the Shadow Suite to use'' for more
+ information.
+
+ But if you gotta have it, here is what you do:
+
+ tar -xzvf adduser.shadow-1.4.tar.gz
+ cd adduser
+ make clean
+ make adduser
+ chmod 700 adduser
+ cp adduser /sbin
+
+ 6.2. The wu_ftpd Server
+
+ Most Linux systems some with the wu_ftpd server. If your distribution
+ does not come with shadow installed, then your wu_ftpd will not be
+ compiled for shadow. wu_ftpd is launched from inetd/tcpd as a root
+ process. If you are running an old wu_ftpd daemon, you will want to
+ upgrade it anyway because older ones had a bug that would allow the
+ root account to be compromised (For more info see the Linux security
+ home page <http://bach.cis.temple.edu/linux/linux-security/Linux-
+ Security-FAQ/Linux-wu.ftpd-2.4-Update.html>).
+
+ Fortunately, you only need to get the source code and recompile it
+ with shadow enabled.
+
+ If you are not running an ELF system, The wu_ftp server can be found
+ on Sunsite as wu-ftp-2.4-fixed.tar.gz
+ <ftp://sunsite.unc.edu/pub/Linux/system/Network/file-transfer/wu-
+ ftpd-2.4-fixed.tar.gz>
+
+ Once you retrieve the server, put it in /usr/src, then type:
+
+ cd /usr/src
+ tar -xzvf wu-ftpd-2.4-fixed.tar.gz
+ cd wu-ftpd-2.4-fixed
+ cp ./src/config/config.lnx.shadow ./src/config/config.lnx
+
+ Then edit ./src/makefiles/Makefile.lnx, and change the line:
+
+ LIBES = -lbsd -support
+
+ to:
+
+ LIBES = -lbsd -support -lshadow
+
+ Now you are ready to run the build script and install:
+
+ cd /usr/src/wu-ftpd-2.4-fixed
+ /usr/src/wu-ftp-2.4.fixed/build lnx
+ cp /usr/sbin/wu.ftpd /usr/sbin/wu.ftpd.old
+ cp ./bin/ftpd /usr/sbin/wu.ftpd
+
+ This uses the Linux shadow configuration file, compiles and installs
+ the server.
+
+ On my Slackware 2.3 system I also had to do the following before
+ running build:
+
+ cd /usr/include/netinet
+ ln -s in_systm.h in_system.h
+ cd -
+
+ Problems have been reported compiling this package under ELF systems,
+ but the Beta version of the next release works fine. It can be found
+ as wu-ftp-2.4.2-beta-10.tar.gz
+ <ftp://tscnet.com/pub/linux/network/ftp/wu-ftpd-2.4.2-beta-10.tar.gz>
+
+ Once you retrieve the server, put it in /usr/src, then type:
+
+ cd /usr/src
+ tar -xzvf wu-ftpd-2.4.2-beta-9.tar.gz
+ cd wu-ftpd-beta-9
+ cd ./src/config
+
+ Then edit config.lnx, and change:
+
+ #undef SHADOW.PASSWORD
+
+ to:
+
+ #define SHADOW.PASSWORD
+
+ Then,
+
+ cd ../Makefiles
+
+ and edit the file Makefile.lnx and change:
+
+ LIBES = -lsupport -lbsd # -lshadow
+
+ to:
+
+ LIBES = -lsupport -lbsd -lshadow
+
+ Then build and install:
+
+ cd ..
+ build lnx
+ cp /usr/sbin/wu.ftpd /usr/sbin/wu.ftpd.old
+ cp ./bin/ftpd /usr/sbin/wu.ftpd
+
+ Note that you should check your /etc/inetd.conf file to make sure that
+ this is where your wu.ftpd server really lives. It has been reported
+ that some distributions place the server daemons in different places,
+ and then wu.ftpd in particular may be named something else.
+
+ 6.3. Standard ftpd
+
+ If you are running the standard ftpd server, I would recommend that
+ you upgrade to the wu_ftpd server. Aside from the known bug discussed
+ above, it's generally thought to be more secure.
+
+ If you insist on the standard one, or you need NIS support, Sunsite
+ has ftpd-shadow-nis.tgz
+ <ftp://sunsite.unc.edu/pub/Linux/system/Network/file-transfer/ftpd-
+ shadow-nis.tgz>
+
+ 6.4. pop3d (Post Office Protocol 3)
+
+ If you need to support the third Post Office Protocol (POP3), you will
+ need to recompile a pop3d program. pop3d is normally run by
+ inetd/tcpd as root.
+
+ There are two versions available from Sunsite:
+ pop3d-1.00.4.linux.shadow.tar.gz
+ <ftp://sunsite.unc.edu/pub/Linux/system/Mail/pop/pop3d-1.00.4.linux.shadow.tar.gz>
+ and pop3d+shadow+elf.tar.gz
+ <ftp://sunsite.unc.edu/pub/Linux/system/Mail/pop/pop3d+shadow+elf.tar.gz>
+
+ Both of these are fairly straight forward to install.
+
+ 6.5. xlock
+
+ If you install the shadow suite, and then run X Windows System and
+ lock the screen without upgrading your xlock, you will have to use
+ CNTL-ALT-Fx to switch to another tty, login, and kill the xlock
+ process (or use CNTL-ALT-BS to kill the X server). Fortunately it's
+ fairly easy to upgrade your xlock program.
+
+ If you are running XFree86 Versions 3.x.x, you are probably using
+ xlockmore (which is a great screen-saver in addition to a lock). This
+ package supports shadow with a recompile. If you have an older xlock,
+ I recommend that you upgrade to this one.
+
+ xlockmore-3.5.tgz is available at:
+ <ftp://sunsite.unc.edu/pub/Linux/X11/xutils/screensavers/xlockmore-3.7.tgz>
+
+ Basically, this is what you need to do:
+
+ Get the xlockmore-3.7.tgz file and put it in /usr/src unpack it:
+
+ tar -xzvf xlockmore-3.7.tgz
+
+ Edit the file: /usr/X11R6/lib/X11/config/linux.cf, and change the
+ line:
+
+ #define HasShadowPasswd NO
+
+ to
+
+ #define HasShadowPasswd YES
+
+ Then build the executables:
+
+ cd /usr/src/xlockmore
+ xmkmf
+ make depend
+ make
+
+ Then move everything into place and update file ownerships and
+ permissions:
+
+ cp xlock /usr/X11R6/bin/
+ cp XLock /var/X11R6/lib/app-defaults/
+ chown root.shadow /usr/X11R6/bin/xlock
+ chmod 2755 /usr/X11R6/bin/xlock
+ chown root.shadow /etc/shadow
+ chmod 640 /etc/shadow
+
+ Your xlock will now work correctly.
+
+ 6.6. xdm
+
+ xdm is a program that presents a login screen for X-Windows. Some
+ systems start xdm when the system is told to goto a specified run
+ level (see /etc/inittab.
+
+ With the Shadow Suite install, xdm will need to be updated.
+ Fortunately it's fairly easy to upgrade your xdm program.
+
+ xdm.tar.gz is available at:
+ <ftp://sunsite.unc.edu/pub/Linux/X11/xutils/xdm.tar.gz>
+
+ Get the xdm.tar.gz file and put it in /usr/src, then to unpack it:
+
+ tar -xzvf xdm.tar.gz
+
+ Edit the file: /usr/X11R6/lib/X11/config/linux.cf, and change the
+ line:
+
+ #define HasShadowPasswd NO
+
+ to
+
+ #define HasShadowPasswd YES
+
+ Then build the executables:
+
+ cd /usr/src/xdm
+ xmkmf
+ make depend
+ make
+
+ Then move everything into place:
+
+ cp xdm /usr/X11R6/bin/
+
+ xdm is run as root so you don't need to change it file permissions.
+
+ 6.7. sudo
+
+ The program sudo allows a system administrator to let users run
+ programs that would normally require root access. This is handy
+ because it lets the administrator limit access to the root account
+ itself while still allowing users to do things like mounting drives.
+
+ sudo needs to read passwords because it verifies the users password
+ when it's invoked. sudo already runs SUID root, so accessing the
+ /etc/shadow file is not a problem.
+
+ sudo for the shadow suite, is available as at:
+ <ftp://sunsite.unc.edu/pub/Linux/system/Admin/sudo-1.2-shadow.tgz>
+
+ Warning: When you install sudo your /etc/sudoers file will be replaced
+ with a default one, so you need to make a backup of it if you have
+ added anything to the default one. (you could also edit the Makefile
+ and remove the line that copies the default file to /etc).
+
+ The package is already setup for shadow, so all that's required is to
+ recompile the package (put it in /usr/src):
+
+ cd /usr/src
+ tar -xzvf sudo-1.2-shadow.tgz
+ cd sudo-1.2-shadow
+ make all
+ make install
+
+ 6.8. imapd (E-Mail pine package)
+
+ imapd is an e-mail server similar to pop3d. imapd comes with the Pine
+ E-mail package. The documentation that comes with the package states
+ that the default for Linux systems is to include support for shadow.
+ However, I have found that this is not true. Furthermore, the build
+ script / Makefile combination on this package is makes it very
+ difficult to add the libshadow.a library at compile time, so I was
+ unable to add shadow support for imapd.
+
+ If anyone has this figured out, please E-mail me, and I'll include the
+ solution here.
+
+ 6.9. pppd (Point-to-Point Protocol Server)
+
+ The pppd server can be setup to use several types of authentication:
+ Password Authentication Protocol (PAP) and Cryptographic Handshake
+ Authentication Protocol (CHAP). The pppd server usually reads the
+ password strings that it uses from /etc/ppp/chap-secrets and/or
+ /etc/ppp/pap-secrets. If you are using this default behavior of pppd,
+ it is not necessary to reinstall pppd.
+
+ pppd also allows you to use the login parameter (either on the command
+ line, or in the configuration or options file). If the login option
+ is given, then pppd will use the /etc/passwd file for the username and
+ passwords for the PAP. This, of course, will no longer work now that
+ our password file is shadowed. For pppd-1.2.1d this requires adding
+ code for shadow support.
+
+ The example given in the next section is adding shadow support to
+ pppd-1.2.1d (an older version of pppd).
+
+ pppd-2.2.0 already contains shadow support.
+
+ 7. Putting the Shadow Suite to use.
+
+ This section discusses some of the things that you will want to know
+ now that you have the Shadow Suite installed on your system. More
+ information is contained in the manual pages for each command.
+
+ 7.1. Adding, Modifying, and deleting users
+
+ The Shadow Suite added the following command line oriented commands
+ for adding, modifying, and deleting users. You may also have
+ installed the adduser program.
+
+ 7.1.1. useradd
+
+ The useradd command can be used to add users to the system. You also
+ invoke this command to change the default settings.
+
+ The first thing that you should do is to examine the default settings
+ and make changes specific to your system:
+
+ useradd -D
+
+ ______________________________________________________________________
+ GROUP=1
+ HOME=/home
+ INACTIVE=0
+ EXPIRE=0
+ SHELL=
+ SKEL=/etc/skel
+ ______________________________________________________________________
+
+ The defaults are probably not what you want, so if you started adding
+ users now you would have to specify all the information for each user.
+ However, we can and should change the default values.
+
+ On my system:
+
+ I want the default group to be 100
+
+ I want passwords to expire every 60 days
+
+ I don't want to lock an account because the password is expired
+
+ I want to default shell to be /bin/bash
+
+ To make these changes I would use:
+
+ useradd -D -g100 -e60 -f0 -s/bin/bash
+
+ Now running useradd -D will give:
+
+ ______________________________________________________________________
+ GROUP=100
+ HOME=/home
+ INACTIVE=0
+ EXPIRE=60
+ SHELL=/bin/bash
+ SKEL=/etc/skel
+ ______________________________________________________________________
+
+ Just in case you wanted to know, these defaults are stored in the file
+ /etc/default/useradd.
+
+ Now you can use useradd to add users to the system. For example, to
+ add the user fred, using the defaults, you would use the following:
+
+ useradd -m -c "Fred Flintstone" fred
+
+ This will create the following entry in the /etc/passwd file:
+
+ fred:*:505:100:Fred Flintstone:/home/fred:/bin/bash
+
+ And the following entry in the /etc/shadow file:
+
+ fred:!:0:0:60:0:0:0:0
+
+ fred's home directory will be created and the contents of /etc/skel
+ will be copied there because of the -m switch.
+
+ Also, since we did not specify a UID, the next available one was used.
+
+ fred's account is created, but fred still won't be able to login until
+ we unlock the account. We do this by changing the password.
+
+ passwd fred
+
+ ______________________________________________________________________
+ Changing password for fred
+ Enter the new password (minimum of 5 characters)
+ Please use a combination of upper and lower case letters and numbers.
+ New Password: *******
+ Re-enter new password: *******
+ ______________________________________________________________________
+
+ Now the /etc/shadow will contain:
+
+ fred:J0C.WDR1amIt6:9559:0:60:0:0:0:0
+
+ And fred will now be able to login and use the system. The nice thing
+ about useradd and the other programs that come with the Shadow Suite
+ is that they make changes to the /etc/passwd and /etc/shadow files
+ atomically. So if you are adding a user, and another user is changing
+ their password at the same time, both operations will be performed
+ correctly.
+
+ You should use the supplied commands rather than directly editing
+ /etc/passwd and /etc/shadow. If you were editing the /etc/shadow
+ file, and a user were to change his password while you are editing,
+ and then you were to save the file you were editing, the user's
+ password change would be lost.
+
+ Here is a small interactive script that adds users using useradd and
+ passwd:
+
+ ______________________________________________________________________
+ #!/bin/bash
+ #
+ # /sbin/newuser - A script to add users to the system using the Shadow
+ # Suite's useradd and passwd commands.
+ #
+ # Written my Mike Jackson <mhjack@tscnet.com> as an example for the Linux
+ # Shadow Password Howto. Permission to use and modify is expressly granted.
+ #
+ # This could be modified to show the defaults and allow modification similar
+ # to the Slackware Adduser program. It could also be modified to disallow
+ # stupid entries. (i.e. better error checking).
+ #
+ ##
+ # Defaults for the useradd command
+ ##
+ GROUP=100 # Default Group
+ HOME=/home # Home directory location (/home/username)
+ SKEL=/etc/skel # Skeleton Directory
+ INACTIVE=0 # Days after password expires to disable account (0=never)
+ EXPIRE=60 # Days that a passwords lasts
+ SHELL=/bin/bash # Default Shell (full path)
+ ##
+ # Defaults for the passwd command
+ ##
+ PASSMIN=0 # Days between password changes
+ PASSWARN=14 # Days before password expires that a warning is given
+ ##
+ # Ensure that root is running the script.
+ ##
+ WHOAMI=`/usr/bin/whoami`
+ if [ $WHOAMI != "root" ]; then
+ echo "You must be root to add news users!"
+ exit 1
+ fi
+ ##
+ # Ask for username and fullname.
+ ##
+ echo ""
+ echo -n "Username: "
+ read USERNAME
+ echo -n "Full name: "
+ read FULLNAME
+ #
+ echo "Adding user: $USERNAME."
+ #
+ # Note that the "" around $FULLNAME is required because this field is
+ # almost always going to contain at least on space, and without the "'s
+ # the useradd command would think that you we moving on to the next
+ # parameter when it reached the SPACE character.
+ #
+ /usr/sbin/useradd -c"$FULLNAME" -d$HOME/$USERNAME -e$EXPIRE \
+ -f$INACTIVE -g$GROUP -m -k$SKEL -s$SHELL $USERNAME
+ ##
+ # Set password defaults
+ ##
+ /bin/passwd -n $PASSMIN -w $PASSWARN $USERNAME >/dev/null 2>&1
+ ##
+ # Let the passwd command actually ask for password (twice)
+ ##
+ /bin/passwd $USERNAME
+ ##
+ # Show what was done.
+ ##
+ echo ""
+ echo "Entry from /etc/passwd:"
+ echo -n " "
+ grep "$USERNAME:" /etc/passwd
+ echo "Entry from /etc/shadow:"
+ echo -n " "
+ grep "$USERNAME:" /etc/shadow
+ echo "Summary output of the passwd command:"
+ echo -n " "
+ passwd -S $USERNAME
+ echo ""
+ ______________________________________________________________________
+
+ Using a script to add new users is really much more preferable than
+ editing the /etc/passwd or /etc/shadow files directly or using a
+ program like the Slackware adduser program. Feel free to use and
+ modify this script for your particular system.
+
+ For more information on the useradd see the online manual page.
+
+ 7.1.2. usermod
+
+ The usermod program is used to modify the information on a user. The
+ switches are similar to the useradd program.
+
+ Let's say that you want to change fred's shell, you would do the
+ following:
+
+ usermod -s /bin/tcsh fred
+
+ Now fred's /etc/passwd file entry would be change to this:
+
+ fred:*:505:100:Fred Flintstone:/home/fred:/bin/tcsh
+
+ Let's make fred's account expire on 09/15/97:
+
+ usermod -e 09/15/97 fred
+
+ Now fred's entry in /etc/shadow becomes:
+
+ fred:J0C.WDR1amIt6:9559:0:60:0:0:10119:0
+
+ For more information on the usermod command see the online manual
+ page.
+
+ 7.1.3. userdel
+
+ userdel does just what you would expect, it deletes the user's
+ account. You simply use:
+
+ userdel -r username
+
+ The -r causes all files in the user's home directory to be removed
+ along with the home directory itself. Files located in other file
+ system will have to be searched for and deleted manually.
+
+ If you want to simply lock the account rather than delete it, use the
+ passwd command instead.
+
+ 7.2. The passwd command and passwd aging.
+
+ The passwd command has the obvious use of changing passwords.
+ Additionally, it is used by the root user to:
+
+ Lock and unlock accounts (-l and -u)
+
+ Set the maximum number of days that a password remains valid (-x)
+
+ Set the minimum days between password changes (-n)
+
+ Sets the number of days of warning that a password is about to
+ expire (-w)
+
+ Sets the number of days after the password expires before the
+ account is locked (-i)
+
+ Allow viewing of account information in a clearer format (-S)
+
+ For example, let look again at fred
+
+ passwd -S fred
+ fred P 03/04/96 0 60 0 0
+
+ This means that fred's password is valid, it was last changed on
+ 03/04/96, it can be changed at any time, it expires after 60 days,
+ fred will not be warned, and and the account won't be disabled when
+ the password expires.
+
+ This simply means that if fred logs in after the password expires, he
+ will be prompted for a new password at login.
+
+ If we decide that we want to warn fred 14 days before his password
+ expires and make his account inactive 14 days after he lets it expire,
+ we would need to do the following:
+
+ passwd -w14 -i14 fred
+
+ Now fred is changed to:
+ fred P 03/04/96 0 60 14 14
+
+ For more information on the passwd command see the online manual page.
+
+ 7.3. The login.defs file.
+
+ The file /etc/login is the configuration file for the login program
+ and also for the Shadow Suite as a whole.
+
+ /etc/login contains settings from what the prompts will look like to
+ what the default expiration will be when a user changes his password.
+
+ The /etc/login.defs file is quite well documented just by the comments
+ that are contained within it. However, there are a few things to
+ note:
+
+ It contains flags that can be turned on or off that determine the
+ amount of logging that takes place.
+
+ It contains pointers to other configuration files.
+
+ It contains defaults assignments for things like password aging.
+
+ From the above list you can see that this is a rather important file,
+ and you should make sure that it is present, and that the settings are
+ what you desire for your system.
+
+ 7.4. Group passwords.
+
+ The /etc/groups file may contain passwords that permit a user to
+ become a member of a particular group. This function is enabled if
+ you define the constant SHADOWGRP in the /usr/src/shadow-
+ YYMMDD/config.h file.
+
+ If you define this constant and then compile, you must create an
+ /etc/gshadow file to hold the group passwords and the group
+ administrator information.
+
+ When you created the /etc/shadow, you used a program called pwconv,
+ there no equivalent program to create the /etc/gshadow file, but it
+ really doesn't matter, it takes care of itself.
+
+ To create the initial /etc/gshadow file do the following:
+
+ touch /etc/gshadow
+ chown root.root /etc/gshadow
+ chmod 700 /etc/gshadow
+
+ Once you create new groups, they will be added to the /etc/group and
+ the /etc/gshadow files. If you modify a group by adding or removing
+ users or changing the group password, the /etc/gshadow file will be
+ changed.
+
+ The programs groups, groupadd, groupmod, and groupdel are provided as
+ part of the Shadow Suite to modify groups.
+
+ The format of the /etc/group file is as follows:
+
+ groupname:!:GID:member,member,...
+
+ Where:
+
+ groupname
+ The name of the group
+
+ ! The field that normally holds the password, but that is now
+ relocated to the /etc/gshadow file.
+
+ GID
+ The numerical group ID number
+
+ member
+ List of group members
+
+ The format of the /etc/gshadow file is as follows:
+
+ groupname:password:admin,admin,...:member,member,...
+
+ Where:
+
+ groupname
+ The name of the group
+
+ password
+ The encoded group password.
+
+ admin
+ List of group administrators
+
+ member
+ List of group members
+
+ The command gpasswd is used only for adding or removing administrators
+ and members to or from a group. root or someone in the list of
+ administrators may add or remove group members.
+
+ The groups password can be changed using the passwd command by root or
+ anyone listed as an administrator for the group.
+
+ Despite the fact that there is not currently a manual page for
+ gpasswd, typing gpasswd without any parameters gives a listing of
+ options. It's fairly easy to grasp how it all works once you
+ understand the file formats and the concepts.
+
+ 7.5. Consistency checking programs
+
+ 7.5.1. pwck
+
+ The program pwck is provided to provide a consistency check on the
+ /etc/passwd and /etc/shadow files. It will check each username and
+ verify that it has the following:
+
+ the correct number of fields
+
+ unique user name
+
+ valid user and group identifier
+
+ valid primary group
+
+ valid home directory
+
+ valid login shell
+
+ It will also warn of any account that has no password.
+
+ It's a good idea to run pwck after installing the Shadow Suite. It's
+ also a good idea to run it periodically, perhaps weekly or monthly.
+ If you use the -r option, you can use cron to run it on a regular
+ basis and have the report mailed to you.
+
+ 7.5.2. grpck
+
+ grpck is the consistency checking program for the /etc/group and
+ /etc/gshadow files. It performs the following checks:
+
+ the correct number of fields
+
+ unique group name
+
+ valid list of members and administrators
+
+ It also has the -r option for automated reports.
+
+ 7.6. Dial-up passwords.
+
+ Dial-up passwords are another optional line of defense for systems
+ that allow dial-in access. If you have a system that allows many
+ people to connect locally or via a network, but you want to limit who
+ can dial in and connect, then dial-up passwords are for you. To
+ enable dial-up passwords, you must edit the file /etc/login.defs and
+ ensure that DIALUPS_CHECK_ENAB is set to yes.
+
+ Two files contain the dial-up information, /etc/dialups which contains
+ the ttys (one per line, with the leading "/dev/" removed). If a tty
+ is listed then dial-up checks are performed.
+
+ The second file is the /etc/d_passwd file. This file contains the
+ fully qualified path name of a shell, followed by an optional
+ password.
+
+ If a user logs into a line that is listed in /etc/dialups, and his
+ shell is listed in the file /etc/d_passwd he will be allowed access
+ only by suppling the correct password.
+
+ Another useful purpose for using dial-up passwords might be to setup a
+ line that only allows a certain type of connect (perhaps a PPP or UUCP
+ connection). If a user tries to get another type of connection (i.e.
+ a list of shells), he must know a password to use the line.
+
+ Before you can use the dial-up feature, you must create the files.
+
+ The command dpasswd is provided to assign passwords to the shells in
+ the /etc/d_passwd file. See the manual page for more information.
+ 8. Adding shadow support to a C program
+
+ Adding shadow support to a program is actually fairly straightforward.
+ The only problem is that the program must be run by root (or SUID
+ root) in order for the the program to be able to access the
+ /etc/shadow file.
+
+ This presents one big problem: very careful programming practices must
+ be followed when creating SUID programs. For instance, if a program
+ has a shell escape, this must not occur as root if the program is SUID
+ root.
+
+ For adding shadow support to a program so that it can check passwords,
+ but otherwise does need to run as root, it's a lot safer to run the
+ program SUID shadow instead. The xlock program is an example of this.
+
+ In the example given below, pppd-1.2.1d already runs SUID as root, so
+ adding shadow support should not make the program any more vulnerable.
+
+ 8.1. Header files
+
+ The header files should reside in /usr/include/shadow. There should
+ also be a /usr/include/shadow.h, but it will be a symbolic link to
+ /usr/include/shadow/shadow.h.
+
+ To add shadow support to a program, you need to include the header
+ files:
+
+ #include <shadow/shadow.h>
+ #include <shadow/pwauth.h>
+
+ It might be a good idea to use compiler directives to conditionally
+ compile the shadow code (I do in the example below).
+
+ 8.2. libshadow.a library
+
+ When you installed the Shadow Suite the libshadow.a file was created
+ and installed in /usr/lib.
+
+ When compiling shadow support into a program, the linker needs to be
+ told to include the libshadow.a library into the link.
+
+ This is done by:
+
+ gcc program.c -o program -lshadow
+
+ However, as we will see in the example below, most large programs use
+ a Makefile, and usually have a variable called LIBS=... that we will
+ modify.
+
+ 8.3. Shadow Structure
+
+ The libshadow.a library uses a structure called spwd for the
+ information it retrieves from the /etc/shadow file. This is the
+ definition of the spwd structure from the /usr/include/shadow/shadow.h
+ header file:
+
+ ______________________________________________________________________
+ struct spwd
+ {
+ char *sp_namp; /* login name */
+ char *sp_pwdp; /* encrypted password */
+ sptime sp_lstchg; /* date of last change */
+ sptime sp_min; /* minimum number of days between changes */
+ sptime sp_max; /* maximum number of days between changes */
+ sptime sp_warn; /* number of days of warning before password
+ expires */
+ sptime sp_inact; /* number of days after password expires
+ until the account becomes unusable. */
+ sptime sp_expire; /* days since 1/1/70 until account expires
+ */
+ unsigned long sp_flag; /* reserved for future use */
+ };
+ ______________________________________________________________________
+
+ The Shadow Suite can put things into the sp_pwdp field besides just
+ the encoded passwd. The password field could contain:
+
+ username:Npge08pfz4wuk;@/sbin/extra:9479:0:10000::::
+
+ This means that in addition to the password, the program /sbin/extra
+ should be called for further authentication. The program called will
+ get passed the username and a switch that indicates why it's being
+ called. See the file /usr/include/shadow/pwauth.h and the source code
+ for pwauth.c for more information.
+
+ What this means is that we should use the function pwauth to perform
+ the actual authentication, as it will take care of the secondary
+ authentication as well. The example below does this.
+
+ The author of the Shadow Suite indicates that since most programs in
+ existence don't do this, and that it may be removed or changed in
+ future versions of the Shadow Suite.
+
+ 8.4. Shadow Functions
+
+ The shadow.h file also contains the function prototypes for the
+ functions contained in the libshadow.a library:
+
+ ______________________________________________________________________
+ extern void setspent __P ((void));
+ extern void endspent __P ((void));
+ extern struct spwd *sgetspent __P ((__const char *__string));
+ extern struct spwd *fgetspent __P ((FILE *__fp));
+ extern struct spwd *getspent __P ((void));
+ extern struct spwd *getspnam __P ((__const char *__name));
+ extern int putspent __P ((__const struct spwd *__sp, FILE *__fp));
+ ______________________________________________________________________
+
+ The function that we are going to use in the example is: getspnam
+ which will retrieve for us a spwd structure for the supplied name.
+
+ 8.5. Example
+
+ This is an example of adding shadow support to a program that needs
+ it, but does not have it by default.
+
+ This example uses the Point-to-Point Protocol Server (pppd-1.2.1d),
+ which has a mode in which it performs PAP authentication using user
+ names and passwords from the /etc/passwd file instead of the PAP or
+ CHAP files. You would not need to add this code to pppd-2.2.0 because
+ it's already there.
+
+ This feature of pppd probably isn't used very much, but if you
+ installed the Shadow Suite, it won't work anymore because the
+ passwords are no longer stored in /etc/passwd.
+
+ The code for authenticating users under pppd-1.2.1d is located in the
+ /usr/src/pppd-1.2.1d/pppd/auth.c file.
+
+ The following code needs to be added to the top of the file where all
+ the other #include directives are. We have surrounded the #includes
+ with conditional directives (i.e. only include if we are compiling for
+ shadow support).
+
+ ______________________________________________________________________
+ #ifdef HAS_SHADOW
+ #include <shadow.h>
+ #include <shadow/pwauth.h>
+ #endif
+ ______________________________________________________________________
+
+ The next thing to do is to modify the actual code. We are still
+ making changes to the auth.c file.
+
+ Function auth.c before modifications:
+
+ ______________________________________________________________________
+ /*
+ * login - Check the user name and password against the system
+ * password database, and login the user if OK.
+ *
+ * returns:
+ * UPAP_AUTHNAK: Login failed.
+ * UPAP_AUTHACK: Login succeeded.
+ * In either case, msg points to an appropriate message.
+ */
+ static int
+ login(user, passwd, msg, msglen)
+ char *user;
+ char *passwd;
+ char **msg;
+ int *msglen;
+ {
+ struct passwd *pw;
+ char *epasswd;
+ char *tty;
+
+ if ((pw = getpwnam(user)) == NULL) {
+ return (UPAP_AUTHNAK);
+ }
+ /*
+ * XXX If no passwd, let them login without one.
+ */
+ if (pw->pw_passwd == '\0') {
+ return (UPAP_AUTHACK);
+ }
+
+ epasswd = crypt(passwd, pw->pw_passwd);
+ if (strcmp(epasswd, pw->pw_passwd)) {
+ return (UPAP_AUTHNAK);
+ }
+
+ syslog(LOG_INFO, "user %s logged in", user);
+
+ /*
+ * Write a wtmp entry for this user.
+ */
+ tty = strrchr(devname, '/');
+ if (tty == NULL)
+ tty = devname;
+ else
+ tty++;
+ logwtmp(tty, user, ""); /* Add wtmp login entry */
+ logged_in = TRUE;
+
+ return (UPAP_AUTHACK);
+ }
+ ______________________________________________________________________
+
+ The user's password is placed into pw->pw_passwd, so all we really
+ need to do is add the function getspnam. This will put the password
+ into spwd->sp_pwdp.
+
+ We will add the function pwauth to perform the actual authentication.
+ This will automatically perform secondary authentication if the shadow
+ file is setup for it.
+
+ Function auth.c after modifications to support shadow:
+
+ ______________________________________________________________________
+ /*
+ * login - Check the user name and password against the system
+ * password database, and login the user if OK.
+ *
+ * This function has been modified to support the Linux Shadow Password
+ * Suite if USE_SHADOW is defined.
+ *
+ * returns:
+ * UPAP_AUTHNAK: Login failed.
+ * UPAP_AUTHACK: Login succeeded.
+ * In either case, msg points to an appropriate message.
+ */
+ static int
+ login(user, passwd, msg, msglen)
+ char *user;
+ char *passwd;
+ char **msg;
+ int *msglen;
+ {
+ struct passwd *pw;
+ char *epasswd;
+ char *tty;
+
+ #ifdef USE_SHADOW
+ struct spwd *spwd;
+ struct spwd *getspnam();
+ #endif
+
+ if ((pw = getpwnam(user)) == NULL) {
+ return (UPAP_AUTHNAK);
+ }
+
+ #ifdef USE_SHADOW
+ spwd = getspnam(user);
+ if (spwd)
+ pw->pw_passwd = spwd->sp-pwdp;
+ #endif
+
+ /*
+ * XXX If no passwd, let NOT them login without one.
+ */
+ if (pw->pw_passwd == '\0') {
+ return (UPAP_AUTHNAK);
+ }
+ #ifdef HAS_SHADOW
+ if ((pw->pw_passwd && pw->pw_passwd[0] == '@'
+ && pw_auth (pw->pw_passwd+1, pw->pw_name, PW_LOGIN, NULL))
+ || !valid (passwd, pw)) {
+ return (UPAP_AUTHNAK);
+ }
+ #else
+ epasswd = crypt(passwd, pw->pw_passwd);
+ if (strcmp(epasswd, pw->pw_passwd)) {
+ return (UPAP_AUTHNAK);
+ }
+ #endif
+
+ syslog(LOG_INFO, "user %s logged in", user);
+
+ /*
+ * Write a wtmp entry for this user.
+ */
+ tty = strrchr(devname, '/');
+ if (tty == NULL)
+ tty = devname;
+ else
+ tty++;
+ logwtmp(tty, user, ""); /* Add wtmp login entry */
+ logged_in = TRUE;
+
+ return (UPAP_AUTHACK);
+ }
+ ______________________________________________________________________
+
+ Careful examination will reveal that we made another change as well.
+ The original version allowed access (returned UPAP_AUTHACK if there
+ was NO password in the /etc/passwd file. This is not good, because a
+ common use of this login feature is to use one account to allow access
+ to the PPP process and then check the username and password supplied
+ by PAP with the username in the /etc/passwd file and the password in
+ the /etc/shadow file.
+
+ So if we had set the original version up to run as the shell for a
+ user i.e. ppp, then anyone could get a ppp connection by setting
+ their PAP to user ppp and a password of null.
+
+ We fixed this also by returning UPAP_AUTHNAK instead of UPAP_AUTHACK
+ if the password field was empty.
+
+ Interestingly enough, pppd-2.2.0 has the same problem.
+
+ Next we need to modify the Makefile so that two things occur:
+ USE_SHADOW must be defined, and libshadow.a needs to be added to the
+ linking process.
+
+ Edit the Makefile, and add:
+
+ LIBS = -lshadow
+
+ Then we find the line:
+
+ COMPILE_FLAGS = -I.. -D_linux_=1 -DGIDSET_TYPE=gid_t
+
+ And change it to:
+
+ COMPILE_FLAGS = -I.. -D_linux_=1 -DGIDSET_TYPE=gid_t -DUSE_SHADOW
+
+ Now make and install.
+
+ 9. Frequently Asked Questions.
+
+ Q: I used to control which tty's root could log into using the file
+ /etc/securettys, but it doesn't seem to work anymore, what's going on?
+
+ A: The file /etc/securettys does absolutely nothing now that the
+ Shadow Suite is installed. The tty's that root can use are now
+ located in the login configuration file /etc/login.defs. The entry in
+ this file may point to another file.
+
+ Q: I installed the Shadow Suite, but now I can't login, what did I
+ miss?
+
+ A: You probably installed the Shadow programs, but didn't run pwconv
+ or you forgot to copy /etc/npasswd to /etc/passwd and /etc/nshadow to
+ /etc/shadow. Also, you may need to copy login.defs to /etc.
+
+ Q: In the section on xlock, it said to change the group ownership of
+ the /etc/shadow file to shadow. I don't have a shadow group, what do
+ I do?
+
+ A: You can add one. Simply edit the /etc/group file, and insert a
+ line for the shadow group. You need to ensure that the group number
+ is not used by another group, and you need to insert it before the
+ nogroup entry. Or you can simply suid xlock to root.
+
+ Q: Is there a mailing list for the Linux Shadow Password Suite?
+
+ A: Yes, but it's for the development and beta testing of the next
+ Shadow Suite for Linux. You can get added to the list by mailing to:
+ shadow-list-request@neptune.cin.net with a subject of: subscribe. The
+ list is actually for discussions of the Linux shadow-YYMMSS series of
+ releases. You should join if you want to get involved in further
+ development or if you install the Suite on your system and want to get
+ information on newer releases.
+
+ Q: I installed the Shadow Suite, but when I use the userdel command, I
+ get "userdel: cannot open shadow group file", what did I do wrong?
+
+ A: You compiled the Shadow Suite with the SHADOWGRP option enabled,
+ but you don't have an /etc/gshadow file. You need to either edit the
+ config.h file and recompile, or create an /etc/group file. See the
+ section on shadow groups.
+
+ Q: I installed the Shadow Suite but now I'm getting encoded passwords
+ back in my /etc/passwd file, what's wrong?
+
+ A: You either enabled the AUTOSHADOW option in the Shadow config.h
+ file, or your libc was compiled with the SAHDOW_COMPAT option. You
+ need to determine which is the problem, and recompile.
+
+ 10. Copyright Message.
+
+ The Linux Shadow Password HOWTO is Copyright (c) 1996 Michael H.
+ Jackson.
+
+ Permission is granted to make and distribute verbatim copies of this
+ document provided the copyright notice and this permission notice are
+ preserved on all copies.
+
+ Permission is granted to copy and distribute modified versions of this
+ document under the conditions for verbatim copies above, provided a
+ notice clearly stating that the document is a modified version is also
+ included in the modified document.
+
+ Permission is granted to copy and distribute translations of this
+ document into another language, under the conditions specified above
+ for modified versions.
+
+ Permission is granted to convert this document into another media
+ under the conditions specified above for modified versions provided
+ the requirement to acknowledge the source document is fulfilled by
+ inclusion of an obvious reference to the source document in the new
+ media. Where there is any doubt as to what defines 'obvious' the
+ copyright owner reserves the right to decide.
+
+ 11. Miscellaneous and Acknowledgments.
+
+ The code examples for auth.c are taken from pppd-1.2.1d and
+ ppp-2.1.0e, Copyright (c) 1993 and The Australian National University
+ and Copyright (c) 1989 Carnegie Mellon University.
+
+ Thanks to Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl> for
+ writing and maintaining the Shadow Suite for Linux, and for his review
+ and comments on this document.
+
+ Thanks to Ron Tidd <rtidd@tscnet.com> for his helpful review and
+ testing.
+
+ Thanks to everyone who has sent me feedback to help improve this
+ document.
+
+ Please, if you have any comments or suggestions then mail them to me.
+
+ regards
+
+ Michael H. Jackson <mhjack@tscnet.com>
+
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644
index 0000000..85f2248
--- /dev/null
+++ b/doc/Makefile.am
@@ -0,0 +1,5 @@
+# This is a dummy Makefile.am to get automake work flawlessly,
+# and also cooperate to make a distribution for `make dist'
+
+EXTRA_DIST = HOWTO README.limits \
+ README.platforms WISHLIST console.c.spec.txt cracklib26.diff
diff --git a/doc/Makefile.in b/doc/Makefile.in
new file mode 100644
index 0000000..0323749
--- /dev/null
+++ b/doc/Makefile.in
@@ -0,0 +1,481 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# This is a dummy Makefile.am to get automake work flawlessly,
+# and also cooperate to make a distribution for `make dist'
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = HOWTO README.limits \
+ README.platforms WISHLIST console.c.spec.txt cracklib26.diff
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign doc/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/README.limits b/doc/README.limits
new file mode 100644
index 0000000..80ed940
--- /dev/null
+++ b/doc/README.limits
@@ -0,0 +1,66 @@
+
+ABOUT shadow-login limits:
+
+This code is merged into shadow login program from the original LShell 2.01
+written by Joel Katz. The port and some additional features have been added
+by Cristian Gafton (gafton@sorosis.ro).
+
+
+Changes:
+ - 96/04/16
+ - {spaces,tabs} allowed within limits string
+ - Warn via syslog multiple default limits
+ - added few paragraphs to the login man page
+ - 96/04/14
+ - code merged into lmain.c --cristiang
+
+TODO: - support groups in the limits file
+ (only usernames are supported at this moment :-( )
+
+Setting user limits for shadow login program
+
+First, make a root-only-readable file (/etc/limits by default or LIMITS_FILE
+defined config.h) that describes the resource limits you wish to impose. By
+default no quotas are imposed on 'root'. In fact, there is no way to impose
+limits via this procedure to root-equiv accounts (accounts with UID 0).
+
+Each line describes a limit for a user in the form:
+
+ user LIMITS_STRING
+
+The LIMITS_STRING is a string of a concatenated list of resource limits.
+Each limit consists of a letter identifier followed by a numerical limit.
+The valid identifiers are:
+
+ A: max address space (KB)
+ C: max core file size (KB)
+ D: max data size (KB)
+ F: maximum filesize (KB)
+ M: max locked-in-memory address space (KB)
+ N: max number of open files
+ R: max resident set size (KB)
+ S: max stack size (KB)
+ T: max CPU time (MIN)
+ U: max number of processes
+ L: max number of logins for this user
+
+For example, L2D2048N5 is a valid LIMITS_STRING. For reading convenience,
+the following entries are equivalent:
+
+username L2D2048N5
+username L2 D2048 N5
+
+Be aware that after <username> the rest of the line is considered a limit
+string, thus comments are not allowed. A invalid limits string will be
+rejected (not considered) by the login program.
+
+The default entry is denoted by username '*'. If you have multiple 'default'
+entries in your LIMITS_FILE, then the last one will be used as the default
+entry.
+
+To completely disable limits for a user, a single dash (-) will do.
+
+Also, please note that all limit settings are set PER LOGIN. They are
+not global, nor are they permanent. Perhaps global limits will come, but
+for now this will have to do ;)
+
diff --git a/doc/README.platforms b/doc/README.platforms
new file mode 100644
index 0000000..295d125
--- /dev/null
+++ b/doc/README.platforms
@@ -0,0 +1,33 @@
+# $Id$
+#
+# This is the current (still incomplete) list of platforms this
+# package has been verified to work on. Additions (preferably
+# in the format as described below) are welcome. Thanks!
+#
+# V: last version reported to work
+# H: host type
+# L: Linux libc version
+# D: Linux distribution, or other OS name and version
+# C: changes (if any)
+# R: reported by
+
+V: 980529
+H: sparc-unknown-linux-gnu
+L: glibc-2.0.7
+D: Ultrapenguin-1.0.9
+C: had to explicitly disable desrpc.
+R: Bjorn Christianson <bjorn@cascade.psychology.mcmaster.ca>
+
+V: 980724
+H: i486-pc-linux-gnulibc1
+L: libc-5.4.33
+D: Debian-1.3.1.r6
+C: none (use dpkg-buildpackage)
+R: Marek Michalkiewicz <marekm@linux.org.pl>
+
+V: current
+H: i686-pc-linux-gnu
+L: glibc-2.0.7.19981211
+D: Debian-2.1
+C: none (use dpkg-buildpackage)
+R: Marek Michalkiewicz <marekm@linux.org.pl>
diff --git a/doc/WISHLIST b/doc/WISHLIST
new file mode 100644
index 0000000..61390bd
--- /dev/null
+++ b/doc/WISHLIST
@@ -0,0 +1,40 @@
+$Id$
+
+This is my wishlist for the shadow suite, in no particular order. Feel
+free to do anything from this list and mail me the diffs :-).
+
+Patches in diff -u format, against the latest version (sometimes in the
+"beta" directory) are preferred and make my job easier. Please, no
+MIME, base64, quoted-printable, or HTML. For very big patches, or if
+your mailer can corrupt them, please use gzip and uuencode. Thanks!
+
+New ideas to add to this list are welcome, too. --marekm
+
+- fix all the bugs, of course
+- implement "su only" accounts (no logins, only su from other account)
+- rewrite getdef.c to be more general? (no hardcoded names)
+- patch for rlogind/telnetd to create utmp entry and fill in ut_addr
+- option to specify encrypted password in passwd (for yppasswdd, so it
+ doesn't need to know about shadow/non-shadow); should probably use a pipe
+ (less insecure than command line arguments)
+- add support for changing NIS passwords
+- add option to check passwords by piping them to external programs
+- add functionality of the contrib/rpasswd.c wrapper to passwd
+- option to generate pronounceable passwords (like on SCO), external program?
+- poppassd (remote password change for eudora etc.)
+- add support for passwd/shadow db files (glibc)
+- vipw: check password files for errors after editing
+- add "maximum time users allowed to stay logged in" limit option to logoutd
+- handle quotes in /etc/environment like the shell does (but sshd doesn't...)
+- better utmpx support (logoutd, ...)
+- better OPIE support (report number of logins left, etc.)
+- new option for /etc/suauth: don't load user's environment (force "su -")
+ suggested by Ulisses Alonso Camaro
+- find out why recent releases won't compile on Solaris
+- newusers should be able to copy /etc/skel to the new home directory
+ (like useradd)
+- add directories where other packages can add hooks for package-specific
+ per-user configuration, to be executed with run-parts. Some hooks should
+ be executed at package install time for existing users, likewise for
+ package removal and possibly modification. (Debian Bug#36019)
+
diff --git a/doc/console.c.spec.txt b/doc/console.c.spec.txt
new file mode 100644
index 0000000..b7c0d0d
--- /dev/null
+++ b/doc/console.c.spec.txt
@@ -0,0 +1,36 @@
+$Id$
+
+Specification for console.c source file --
+
+input values --
+ tty -- character pointer to device name with leading "/dev/"
+ removed.
+
+return values --
+ 0 -- false
+ 1 -- true
+
+int console (char * tty)
+ if "CONSOLE" string value is not present in login.defs
+ return true
+
+ if the first character of "CONSOLE" string value is not "/"
+ treat the string as a ":" delimited list of device
+ names and search for the value of tty in that
+ tokenized list.
+
+ if a match is found
+ return true
+
+ return false
+
+ if the file named by "CONSOLE" cannot be opened
+ return true
+
+ scan the file looking for a match between the input line
+ and the value of tty
+
+ if a match is found
+ return true
+
+ return false
diff --git a/doc/cracklib26.diff b/doc/cracklib26.diff
new file mode 100644
index 0000000..09160b8
--- /dev/null
+++ b/doc/cracklib26.diff
@@ -0,0 +1,340 @@
+diff -ur orig/cracklib26_small/cracklib/fascist.c cracklib26_small/cracklib/fascist.c
+--- orig/cracklib26_small/cracklib/fascist.c Mon Dec 15 02:56:55 1997
++++ cracklib26_small/cracklib/fascist.c Sat Apr 4 22:14:45 1998
+@@ -12,6 +12,7 @@
+ #include <ctype.h>
+ #include <sys/types.h>
+ #include <pwd.h>
++#include <string.h>
+
+ #define ISSKIP(x) (isspace(x) || ispunct(x))
+
+@@ -460,28 +461,27 @@
+ }
+
+ char *
+-FascistGecos(password, uid)
++FascistGecosPw(password, pwd)
+ char *password;
+- int uid;
++ struct passwd *pwd;
+ {
+ int i;
+ int j;
+ int wc;
+ char *ptr;
+- struct passwd *pwp;
+ char gbuffer[STRINGSIZE];
+ char tbuffer[STRINGSIZE];
+ char *uwords[STRINGSIZE];
+ char longbuffer[STRINGSIZE * 2];
+
+- if (!(pwp = getpwuid(uid)))
++ if (!pwd)
+ {
+ return ("you are not registered in the password file");
+ }
+
+ /* lets get really paranoid and assume a dangerously long gecos entry */
+
+- strncpy(tbuffer, pwp->pw_name, STRINGSIZE);
++ strncpy(tbuffer, pwd->pw_name, STRINGSIZE);
+ tbuffer[STRINGSIZE-1] = '\0';
+ if (GTry(tbuffer, password))
+ {
+@@ -490,12 +490,13 @@
+
+ /* it never used to be that you got passwd strings > 1024 chars, but now... */
+
+- strncpy(tbuffer, pwp->pw_gecos, STRINGSIZE);
++ strncpy(tbuffer, pwd->pw_gecos, STRINGSIZE);
+ tbuffer[STRINGSIZE-1] = '\0';
+ strcpy(gbuffer, Lowercase(tbuffer));
+
+ wc = 0;
+ ptr = gbuffer;
++ uwords[0] = (char *) 0;
+
+ while (*ptr)
+ {
+@@ -530,6 +531,8 @@
+ *(ptr++) = '\0';
+ }
+ }
++ if (!uwords[0])
++ return ((char *) 0); /* empty gecos */
+ #ifdef DEBUG
+ for (i = 0; uwords[i]; i++)
+ {
+@@ -586,9 +589,10 @@
+ }
+
+ char *
+-FascistLook(pwp, instring)
++FascistLookPw(pwp, instring, pwd)
+ PWDICT *pwp;
+ char *instring;
++ struct passwd *pwd;
+ {
+ int i;
+ char *ptr;
+@@ -667,7 +671,7 @@
+ return ("it looks like a National Insurance number.");
+ }
+
+- if (ptr = FascistGecos(password, getuid()))
++ if (ptr = FascistGecosPw(password, pwd ? pwd : getpwuid(getuid())))
+ {
+ return (ptr);
+ }
+@@ -715,9 +719,10 @@
+ }
+
+ char *
+-FascistCheck(password, path)
++FascistCheckPw(password, path, pwd)
+ char *password;
+ char *path;
++ struct passwd *pwd;
+ {
+ static char lastpath[STRINGSIZE];
+ static PWDICT *pwp;
+@@ -750,5 +755,29 @@
+ strncpy(lastpath, path, STRINGSIZE);
+ }
+
+- return (FascistLook(pwp, pwtrunced));
++ return (FascistLookPw(pwp, pwtrunced, pwd));
++}
++
++char *
++FascistGecos(password, uid)
++ char *password;
++ int uid;
++{
++ return (FascistGecosPw(password, getpwuid(uid)));
++}
++
++char *
++FascistLook(pwp, instring)
++ PWDICT *pwp;
++ char *instring;
++{
++ return (FascistLookPw(pwp, instring, (char *) 0));
++}
++
++char *
++FascistCheck(password, path)
++ char *password;
++ char *path;
++{
++ return (FascistCheckPw(password, path, (char *) 0));
+ }
+diff -ur orig/cracklib26_small/cracklib/packer.h cracklib26_small/cracklib/packer.h
+--- orig/cracklib26_small/cracklib/packer.h Mon Dec 15 00:09:30 1997
++++ cracklib26_small/cracklib/packer.h Sat Jan 10 22:13:46 1998
+@@ -34,6 +34,7 @@
+ FILE *dfp;
+ FILE *wfp;
+
++ int canfree;
+ int32 flags;
+ #define PFOR_WRITE 0x0001
+ #define PFOR_FLUSH 0x0002
+diff -ur orig/cracklib26_small/cracklib/packlib.c cracklib26_small/cracklib/packlib.c
+--- orig/cracklib26_small/cracklib/packlib.c Fri Jul 9 22:22:58 1993
++++ cracklib26_small/cracklib/packlib.c Sat Jan 10 22:28:49 1998
+@@ -16,7 +16,7 @@
+ char *mode;
+ {
+ int32 i;
+- static PWDICT pdesc;
++ PWDICT *pdesc;
+ char iname[STRINGSIZE];
+ char dname[STRINGSIZE];
+ char wname[STRINGSIZE];
+@@ -25,92 +25,94 @@
+ FILE *ifp;
+ FILE *wfp;
+
+- if (pdesc.header.pih_magic == PIH_MAGIC)
+- {
+- fprintf(stderr, "%s: another dictionary already open\n", prefix);
++ if ((pdesc = (PWDICT *) malloc(sizeof(PWDICT))) == 0)
+ return ((PWDICT *) 0);
+- }
+
+- memset(&pdesc, '\0', sizeof(pdesc));
++ memset(pdesc, '\0', sizeof(*pdesc));
+
+ sprintf(iname, "%s.pwi", prefix);
+ sprintf(dname, "%s.pwd", prefix);
+ sprintf(wname, "%s.hwm", prefix);
+
+- if (!(pdesc.dfp = fopen(dname, mode)))
++ if (!(pdesc->dfp = fopen(dname, mode)))
+ {
+ perror(dname);
++ free(pdesc);
+ return ((PWDICT *) 0);
+ }
+
+- if (!(pdesc.ifp = fopen(iname, mode)))
++ if (!(pdesc->ifp = fopen(iname, mode)))
+ {
+- fclose(pdesc.dfp);
++ fclose(pdesc->dfp);
+ perror(iname);
++ free(pdesc);
+ return ((PWDICT *) 0);
+ }
+
+- if (pdesc.wfp = fopen(wname, mode))
++ if (pdesc->wfp = fopen(wname, mode))
+ {
+- pdesc.flags |= PFOR_USEHWMS;
++ pdesc->flags |= PFOR_USEHWMS;
+ }
+
+- ifp = pdesc.ifp;
+- dfp = pdesc.dfp;
+- wfp = pdesc.wfp;
++ ifp = pdesc->ifp;
++ dfp = pdesc->dfp;
++ wfp = pdesc->wfp;
+
+ if (mode[0] == 'w')
+ {
+- pdesc.flags |= PFOR_WRITE;
+- pdesc.header.pih_magic = PIH_MAGIC;
+- pdesc.header.pih_blocklen = NUMWORDS;
+- pdesc.header.pih_numwords = 0;
++ pdesc->flags |= PFOR_WRITE;
++ pdesc->header.pih_magic = PIH_MAGIC;
++ pdesc->header.pih_blocklen = NUMWORDS;
++ pdesc->header.pih_numwords = 0;
+
+- fwrite((char *) &pdesc.header, sizeof(pdesc.header), 1, ifp);
++ fwrite((char *) &pdesc->header, sizeof(pdesc->header), 1, ifp);
+ } else
+ {
+- pdesc.flags &= ~PFOR_WRITE;
++ pdesc->flags &= ~PFOR_WRITE;
+
+- if (!fread((char *) &pdesc.header, sizeof(pdesc.header), 1, ifp))
++ if (!fread((char *) &pdesc->header, sizeof(pdesc->header), 1, ifp))
+ {
+ fprintf(stderr, "%s: error reading header\n", prefix);
+
+- pdesc.header.pih_magic = 0;
++ pdesc->header.pih_magic = 0;
+ fclose(ifp);
+ fclose(dfp);
++ free(pdesc);
+ return ((PWDICT *) 0);
+ }
+
+- if (pdesc.header.pih_magic != PIH_MAGIC)
++ if (pdesc->header.pih_magic != PIH_MAGIC)
+ {
+ fprintf(stderr, "%s: magic mismatch\n", prefix);
+
+- pdesc.header.pih_magic = 0;
++ pdesc->header.pih_magic = 0;
+ fclose(ifp);
+ fclose(dfp);
++ free(pdesc);
+ return ((PWDICT *) 0);
+ }
+
+- if (pdesc.header.pih_blocklen != NUMWORDS)
++ if (pdesc->header.pih_blocklen != NUMWORDS)
+ {
+ fprintf(stderr, "%s: size mismatch\n", prefix);
+
+- pdesc.header.pih_magic = 0;
++ pdesc->header.pih_magic = 0;
+ fclose(ifp);
+ fclose(dfp);
++ free(pdesc);
+ return ((PWDICT *) 0);
+ }
+
+- if (pdesc.flags & PFOR_USEHWMS)
++ if (pdesc->flags & PFOR_USEHWMS)
+ {
+- if (fread(pdesc.hwms, 1, sizeof(pdesc.hwms), wfp) != sizeof(pdesc.hwms))
++ if (fread(pdesc->hwms, 1, sizeof(pdesc->hwms), wfp) != sizeof(pdesc->hwms))
+ {
+- pdesc.flags &= ~PFOR_USEHWMS;
++ pdesc->flags &= ~PFOR_USEHWMS;
+ }
+ }
+ }
+-
+- return (&pdesc);
++ pdesc->canfree = 1;
++ return (pdesc);
+ }
+
+ int
+@@ -159,8 +161,13 @@
+
+ fclose(pwp->ifp);
+ fclose(pwp->dfp);
++ if (pwp->wfp)
++ fclose(pwp->wfp);
+
+- pwp->header.pih_magic = 0;
++ if (pwp->canfree)
++ free(pwp);
++ else
++ pwp->header.pih_magic = 0;
+
+ return (0);
+ }
+@@ -307,6 +314,11 @@
+ register char *this;
+ int idx;
+
++/*
++ * comment in npasswd-2.0beta4 says this:
++ * This does not work under all circumstances, so don't bother
++ */
++#if 0
+ if (pwp->flags & PFOR_USEHWMS)
+ {
+ idx = string[0] & 0xff;
+@@ -317,6 +329,10 @@
+ lwm = 0;
+ hwm = PW_WORDS(pwp) - 1;
+ }
++#else
++ lwm = 0;
++ hwm = PW_WORDS(pwp);
++#endif
+
+ #ifdef DEBUG
+ printf("---- %lu, %lu ----\n", lwm, hwm);
+diff -ur orig/cracklib26_small/util/mkdict cracklib26_small/util/mkdict
+--- orig/cracklib26_small/util/mkdict Fri Jul 9 22:23:03 1993
++++ cracklib26_small/util/mkdict Sat Apr 4 22:31:45 1998
+@@ -14,9 +14,16 @@
+ SORT="sort"
+ ###SORT="sort -T /tmp"
+
+-cat $* |
++### Use zcat to read compressed (as well as uncompressed) dictionaries.
++### Compressed dictionaries can save quite a lot of disk space.
++
++CAT="gzip -cdf"
++###CAT="zcat"
++###CAT="cat"
++
++$CAT $* |
+ tr '[A-Z]' '[a-z]' |
+- tr -cd '[\012a-z0-9]' |
++ tr -cd '\012[a-z][0-9]' |
+ $SORT |
+ uniq |
+ grep -v '^#' |
diff --git a/etc/Makefile.am b/etc/Makefile.am
new file mode 100644
index 0000000..cc31c60
--- /dev/null
+++ b/etc/Makefile.am
@@ -0,0 +1,24 @@
+# This is a dummy Makefile.am to get automake work flawlessly,
+# and also cooperate to make a distribution for `make dist'
+
+sysconf_DATA = login.defs
+
+defaultdir = $(sysconfdir)/default
+default_DATA = \
+ useradd
+
+nonpam_files = \
+ limits \
+ login.access
+
+if !USE_PAM
+nonpamdir = $(sysconfdir)
+nonpam_DATA = $(nonpam_files)
+endif
+
+EXTRA_DIST = \
+ $(nonpam_files) \
+ $(sysconf_DATA) \
+ $(default_DATA)
+
+SUBDIRS = pam.d
diff --git a/etc/Makefile.in b/etc/Makefile.in
new file mode 100644
index 0000000..58ec0cc
--- /dev/null
+++ b/etc/Makefile.in
@@ -0,0 +1,776 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# This is a dummy Makefile.am to get automake work flawlessly,
+# and also cooperate to make a distribution for `make dist'
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = etc
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(defaultdir)" "$(DESTDIR)$(nonpamdir)" \
+ "$(DESTDIR)$(sysconfdir)"
+DATA = $(default_DATA) $(nonpam_DATA) $(sysconf_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir distdir-am
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+sysconf_DATA = login.defs
+defaultdir = $(sysconfdir)/default
+default_DATA = \
+ useradd
+
+nonpam_files = \
+ limits \
+ login.access
+
+@USE_PAM_FALSE@nonpamdir = $(sysconfdir)
+@USE_PAM_FALSE@nonpam_DATA = $(nonpam_files)
+EXTRA_DIST = \
+ $(nonpam_files) \
+ $(sysconf_DATA) \
+ $(default_DATA)
+
+SUBDIRS = pam.d
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign etc/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign etc/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-defaultDATA: $(default_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(default_DATA)'; test -n "$(defaultdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(defaultdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(defaultdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(defaultdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(defaultdir)" || exit $$?; \
+ done
+
+uninstall-defaultDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(default_DATA)'; test -n "$(defaultdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(defaultdir)'; $(am__uninstall_files_from_dir)
+install-nonpamDATA: $(nonpam_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(nonpam_DATA)'; test -n "$(nonpamdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(nonpamdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(nonpamdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(nonpamdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(nonpamdir)" || exit $$?; \
+ done
+
+uninstall-nonpamDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(nonpam_DATA)'; test -n "$(nonpamdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(nonpamdir)'; $(am__uninstall_files_from_dir)
+install-sysconfDATA: $(sysconf_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \
+ done
+
+uninstall-sysconfDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir)
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(defaultdir)" "$(DESTDIR)$(nonpamdir)" "$(DESTDIR)$(sysconfdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-defaultDATA install-nonpamDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-sysconfDATA
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-defaultDATA uninstall-nonpamDATA \
+ uninstall-sysconfDATA
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+ check-am clean clean-generic clean-libtool cscopelist-am ctags \
+ ctags-am distclean distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am \
+ install-defaultDATA install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-nonpamDATA install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ install-sysconfDATA installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags tags-am uninstall uninstall-am \
+ uninstall-defaultDATA uninstall-nonpamDATA \
+ uninstall-sysconfDATA
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/etc/limits b/etc/limits
new file mode 100644
index 0000000..d39f2d5
--- /dev/null
+++ b/etc/limits
@@ -0,0 +1,30 @@
+# /etc/limits contains user resource limits.
+# See limits(5).
+#
+# Format:
+# <username> <limits-string>
+#
+# default entry is '*' for username
+#
+# Valid flags are:
+# A: max address space (KB)
+# C: max core file size (KB)
+# D: max data size (KB)
+# F: maximum filesize (KB)
+# M: max locked-in-memory address space (KB) [only for root on Linux 2.0.x]
+# N: max number of open files
+# R: max resident set size (KB) [no effect on Linux 2.0.x]
+# S: max stack size (KB)
+# T: max CPU time (MIN)
+# U: max number of processes
+# L: max number of logins for this user
+# I: max nice value (0..39 translates to 20..-19)
+# O: max real time priority (0..MAX_RT_PRIO)
+#
+# Examples:
+# the default entry
+#* L2 D6144 R2048 S2048 U32 N32 F16384 T5 C0 I20 O0
+# another way of suspending a user login
+#guest L0
+# this account has no limits
+#sysadm -
diff --git a/etc/login.access b/etc/login.access
new file mode 100644
index 0000000..3ed3688
--- /dev/null
+++ b/etc/login.access
@@ -0,0 +1,54 @@
+# $Id$
+#
+# Login access control table.
+#
+# When someone logs in, the table is scanned for the first entry that
+# matches the (user, host) combination, or, in case of non-networked
+# logins, the first entry that matches the (user, tty) combination. The
+# permissions field of that table entry determines whether the login will
+# be accepted or refused.
+#
+# Format of the login access control table is three fields separated by a
+# ":" character:
+#
+# permission : users : origins
+#
+# The first field should be a "+" (access granted) or "-" (access denied)
+# character.
+#
+# The second field should be a list of one or more login names, group
+# names, or ALL (always matches). A pattern of the form user@host is
+# matched when the login name matches the "user" part, and when the
+# "host" part matches the local machine name.
+#
+# The third field should be a list of one or more tty names (for
+# non-networked logins), host names, domain names (begin with "."), host
+# addresses, internet network numbers (end with "."), ALL (always
+# matches) or LOCAL (matches any string that does not contain a "."
+# character).
+#
+# If you run NIS you can use @netgroupname in host or user patterns; this
+# even works for @usergroup@@hostgroup patterns. Weird.
+#
+# The EXCEPT operator makes it possible to write very compact rules.
+#
+# The group file is searched only when a name does not match that of the
+# logged-in user. Only groups are matched in which users are explicitly
+# listed: the program does not look at a user's primary group id value.
+#
+##############################################################################
+#
+# Disallow console logins to all but a few accounts.
+#
+#-:ALL EXCEPT wheel shutdown sync:console
+#
+# Disallow non-local logins to privileged accounts (group wheel).
+#
+#-:wheel:ALL EXCEPT LOCAL .win.tue.nl
+#
+# Some accounts are not allowed to login from anywhere:
+#
+#-:wsbscaro wsbsecr wsbspac wsbsym wscosor wstaiwde:ALL
+#
+# All other accounts are allowed to login from anywhere.
+#
diff --git a/etc/login.defs b/etc/login.defs
new file mode 100644
index 0000000..a2f8cd5
--- /dev/null
+++ b/etc/login.defs
@@ -0,0 +1,430 @@
+#
+# /etc/login.defs - Configuration control definitions for the shadow package.
+#
+# $Id$
+#
+
+#
+# Delay in seconds before being allowed another attempt after a login failure
+# Note: When PAM is used, some modules may enforce a minimum delay (e.g.
+# pam_unix(8) enforces a 2s delay)
+#
+FAIL_DELAY 3
+
+#
+# Enable logging and display of /var/log/faillog login(1) failure info.
+#
+FAILLOG_ENAB yes
+
+#
+# Enable display of unknown usernames when login(1) failures are recorded.
+#
+LOG_UNKFAIL_ENAB no
+
+#
+# Enable logging of successful logins
+#
+LOG_OK_LOGINS no
+
+#
+# Enable logging and display of /var/log/lastlog login(1) time info.
+#
+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.
+#
+# Disable if the shell startup files already check for mail
+# ("mailx -e" or equivalent).
+#
+MAIL_CHECK_ENAB yes
+
+#
+# Enable additional checks upon password changes.
+#
+OBSCURE_CHECKS_ENAB yes
+
+#
+# Enable checking of time restrictions specified in /etc/porttime.
+#
+PORTTIME_CHECKS_ENAB yes
+
+#
+# Enable setting of ulimit, umask, and niceness from passwd(5) gecos field.
+#
+QUOTAS_ENAB yes
+
+#
+# Enable "syslog" logging of su(1) activity - in addition to sulog file logging.
+# SYSLOG_SG_ENAB does the same for newgrp(1) and sg(1).
+#
+SYSLOG_SU_ENAB yes
+SYSLOG_SG_ENAB yes
+
+#
+# If defined, either full pathname of a file containing device names or
+# a ":" delimited list of device names. Root logins will be allowed only
+# from these devices.
+#
+CONSOLE /etc/securetty
+#CONSOLE console:tty01:tty02:tty03:tty04
+
+#
+# If defined, all su(1) activity is logged to this file.
+#
+#SULOG_FILE /var/log/sulog
+
+#
+# If defined, ":" delimited list of "message of the day" files to
+# be displayed upon login.
+#
+MOTD_FILE /etc/motd
+#MOTD_FILE /etc/motd:/usr/lib/news/news-motd
+
+#
+# If defined, this file will be output before each login(1) prompt.
+#
+#ISSUE_FILE /etc/issue
+
+#
+# If defined, file which maps tty line to TERM environment parameter.
+# Each line of the file is in a format similar to "vt100 tty01".
+#
+#TTYTYPE_FILE /etc/ttytype
+
+#
+# If defined, login(1) failures will be logged here in a utmp format.
+# last(1), when invoked as lastb(1), will read /var/log/btmp, so...
+#
+FTMP_FILE /var/log/btmp
+
+#
+# If defined, name of file whose presence will inhibit non-root
+# logins. The content of this file should be a message indicating
+# why logins are inhibited.
+#
+NOLOGINS_FILE /etc/nologin
+
+#
+# If defined, the command name to display when running "su -". For
+# example, if this is defined as "su" then ps(1) will display the
+# command as "-su". If not defined, then ps(1) will display the
+# name of the shell actually being run, e.g. something like "-sh".
+#
+SU_NAME su
+
+#
+# *REQUIRED*
+# Directory where mailboxes reside, _or_ name of file, relative to the
+# home directory. If you _do_ define both, MAIL_DIR takes precedence.
+#
+MAIL_DIR /var/spool/mail
+#MAIL_FILE .mail
+
+#
+# If defined, file which inhibits all the usual chatter during the login
+# sequence. If a full pathname, then hushed mode will be enabled if the
+# user's name or shell are found in the file. If not a full pathname, then
+# hushed mode will be enabled if the file exists in the user's home directory.
+#
+HUSHLOGIN_FILE .hushlogin
+#HUSHLOGIN_FILE /etc/hushlogins
+
+#
+# If defined, either a TZ environment parameter spec or the
+# fully-rooted pathname of a file containing such a spec.
+#
+#ENV_TZ TZ=CST6CDT
+#ENV_TZ /etc/tzname
+
+#
+# If defined, an HZ environment parameter spec.
+#
+# for Linux/x86
+ENV_HZ HZ=100
+# For Linux/Alpha...
+#ENV_HZ HZ=1024
+
+#
+# *REQUIRED* The default PATH settings, for superuser and normal users.
+#
+# (they are minimal, add the rest in the shell startup files)
+ENV_SUPATH PATH=/sbin:/bin:/usr/sbin:/usr/bin
+ENV_PATH PATH=/bin:/usr/bin
+
+#
+# Terminal permissions
+#
+# TTYGROUP Login tty will be assigned this group ownership.
+# TTYPERM Login tty will be set to this permission.
+#
+# If you have a write(1) program which is "setgid" to a special group
+# which owns the terminals, define TTYGROUP as the number of such group
+# and TTYPERM as 0620. Otherwise leave TTYGROUP commented out and
+# set TTYPERM to either 622 or 600.
+#
+TTYGROUP tty
+TTYPERM 0600
+
+#
+# Login configuration initializations:
+#
+# ERASECHAR Terminal ERASE character ('\010' = backspace).
+# KILLCHAR Terminal KILL character ('\025' = CTRL/U).
+# ULIMIT Default "ulimit" value.
+#
+# The ERASECHAR and KILLCHAR are used only on System V machines.
+# The ULIMIT is used only if the system supports it.
+# (now it works with setrlimit too; ulimit is in 512-byte units)
+#
+# Prefix these values with "0" to get octal, "0x" to get hexadecimal.
+#
+ERASECHAR 0177
+KILLCHAR 025
+#ULIMIT 2097152
+
+# 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 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 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:
+#
+# PASS_MAX_DAYS Maximum number of days a password may be used.
+# PASS_MIN_DAYS Minimum number of days allowed between password changes.
+# PASS_MIN_LEN Minimum acceptable password length.
+# PASS_WARN_AGE Number of days warning given before a password expires.
+#
+PASS_MAX_DAYS 99999
+PASS_MIN_DAYS 0
+PASS_MIN_LEN 5
+PASS_WARN_AGE 7
+
+#
+# If "yes", the user must be listed as a member of the first gid 0 group
+# in /etc/group (called "root" on most Linux systems) to be able to "su"
+# to uid 0 accounts. If the group doesn't exist or is empty, no one
+# will be able to "su" to uid 0.
+#
+SU_WHEEL_ONLY no
+
+#
+# If compiled with cracklib support, sets the path to the dictionaries
+#
+CRACKLIB_DICTPATH /var/cache/cracklib/cracklib_dict
+
+#
+# Min/max values for automatic uid selection in useradd(8)
+#
+UID_MIN 1000
+UID_MAX 60000
+# System accounts
+SYS_UID_MIN 101
+SYS_UID_MAX 999
+# Extra per user uids
+SUB_UID_MIN 100000
+SUB_UID_MAX 600100000
+SUB_UID_COUNT 65536
+
+#
+# Min/max values for automatic gid selection in groupadd(8)
+#
+GID_MIN 1000
+GID_MAX 60000
+# System accounts
+SYS_GID_MIN 101
+SYS_GID_MAX 999
+# Extra per user group ids
+SUB_GID_MIN 100000
+SUB_GID_MAX 600100000
+SUB_GID_COUNT 65536
+
+#
+# Max number of login(1) retries if password is bad
+#
+LOGIN_RETRIES 5
+
+#
+# Max time in seconds for login(1)
+#
+LOGIN_TIMEOUT 60
+
+#
+# Maximum number of attempts to change password if rejected (too easy)
+#
+PASS_CHANGE_TRIES 5
+
+#
+# Warn about weak passwords (but still allow them) if you are root.
+#
+PASS_ALWAYS_WARN yes
+
+#
+# Number of significant characters in the password for crypt().
+# Default is 8, don't change unless your crypt() is better.
+# Ignored if MD5_CRYPT_ENAB set to "yes".
+#
+#PASS_MAX_LEN 8
+
+#
+# Require password before chfn(1)/chsh(1) can make any changes.
+#
+CHFN_AUTH yes
+
+#
+# Which fields may be changed by regular users using chfn(1) - use
+# any combination of letters "frwh" (full name, room number, work
+# phone, home phone). If not defined, no changes are allowed.
+# For backward compatibility, "yes" = "rwh" and "no" = "frwh".
+#
+CHFN_RESTRICT rwh
+
+#
+# Password prompt (%s will be replaced by user name).
+#
+# XXX - it doesn't work correctly yet, for now leave it commented out
+# to use the default which is just "Password: ".
+#LOGIN_STRING "%s's Password: "
+
+#
+# Only works if compiled with MD5_CRYPT defined:
+# If set to "yes", new passwords will be encrypted using the MD5-based
+# algorithm compatible with the one used by recent releases of FreeBSD.
+# It supports passwords of unlimited length and longer salt strings.
+# Set to "no" if you need to copy encrypted passwords to other systems
+# which don't understand the new algorithm. Default is "no".
+#
+# Note: If you use PAM, it is recommended to use a value consistent with
+# the PAM modules configuration.
+#
+# This variable is deprecated. You should use ENCRYPT_METHOD instead.
+#
+#MD5_CRYPT_ENAB no
+
+#
+# Only works if compiled with ENCRYPTMETHOD_SELECT defined:
+# 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
+#
+# Note: If you use PAM, it is recommended to use a value consistent with
+# the PAM modules configuration.
+#
+#ENCRYPT_METHOD DES
+
+#
+# Only works if ENCRYPT_METHOD is set to SHA256 or SHA512.
+#
+# Define the number of SHA 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, the libc will choose the default number of rounds (5000).
+# The values must be within the 1000-999999999 range.
+# 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
+
+#
+# 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
+# when logging in from the console (as determined by the CONSOLE
+# setting). Default is none.
+#
+# Use with caution - it is possible for users to gain permanent
+# access to these groups, even when not logged in from the console.
+# How to do it is left as an exercise for the reader...
+#
+#CONSOLE_GROUPS floppy:audio:cdrom
+
+#
+# Should login be allowed if we can't cd to the home directory?
+# Default is no.
+#
+DEFAULT_HOME yes
+
+#
+# If this file exists and is readable, login environment will be
+# read from it. Every line should be in the form name=value.
+#
+ENVIRON_FILE /etc/environment
+
+#
+# If defined, this command is run when removing a user.
+# It should remove any at/cron/print jobs etc. owned by
+# the user to be removed (passed as the first argument).
+#
+#USERDEL_CMD /usr/sbin/userdel_local
+
+#
+# Enable setting of the umask group bits to be the same as owner bits
+# (examples: 022 -> 002, 077 -> 007) for non-root users, if the uid is
+# the same as gid, and username is the same as the primary group name.
+#
+# This also enables userdel(8) to remove user groups if no members exist.
+#
+USERGROUPS_ENAB yes
+
+#
+# If set to a non-zero number, the shadow utilities will make sure that
+# groups never have more than this number of users on one line.
+# This permits to support split groups (groups split into multiple lines,
+# with the same group ID, to avoid limitation of the line length in the
+# group file).
+#
+# 0 is the default value and disables this feature.
+#
+#MAX_MEMBERS_PER_GROUP 0
+
+#
+# If useradd(8) should create home directories for users by default (non
+# system users only).
+# This option is overridden with the -M or -m flags on the useradd(8)
+# command-line.
+#
+#CREATE_HOME yes
+
+#
+# Force use shadow, even if shadow passwd & shadow group files are
+# missing.
+#
+#FORCE_SHADOW yes
diff --git a/etc/pam.d/Makefile.am b/etc/pam.d/Makefile.am
new file mode 100644
index 0000000..38ff26a
--- /dev/null
+++ b/etc/pam.d/Makefile.am
@@ -0,0 +1,35 @@
+# This is a dummy Makefile.am to get automake work flawlessly,
+# and also cooperate to make a distribution for `make dist'
+
+pamd_files = \
+ chfn \
+ chsh \
+ groupmems \
+ login \
+ passwd
+
+pamd_acct_tools_files = \
+ chage \
+ chgpasswd \
+ chpasswd \
+ groupadd \
+ groupdel \
+ groupmod \
+ newusers \
+ useradd \
+ userdel \
+ usermod
+
+if USE_PAM
+pamddir = $(sysconfdir)/pam.d
+pamd_DATA = $(pamd_files)
+if ACCT_TOOLS_SETUID
+pamd_DATA += $(pamd_acct_tools_files)
+endif
+endif
+
+if WITH_SU
+pamd_files += su
+endif
+
+EXTRA_DIST = $(pamd_files) $(pamd_acct_tools_files)
diff --git a/etc/pam.d/Makefile.in b/etc/pam.d/Makefile.in
new file mode 100644
index 0000000..fcb4e86
--- /dev/null
+++ b/etc/pam.d/Makefile.in
@@ -0,0 +1,550 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# This is a dummy Makefile.am to get automake work flawlessly,
+# and also cooperate to make a distribution for `make dist'
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@ACCT_TOOLS_SETUID_TRUE@@USE_PAM_TRUE@am__append_1 = $(pamd_acct_tools_files)
+@WITH_SU_TRUE@am__append_2 = su
+subdir = etc/pam.d
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(pamddir)"
+DATA = $(pamd_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+pamd_files = chfn chsh groupmems login passwd $(am__append_2)
+pamd_acct_tools_files = \
+ chage \
+ chgpasswd \
+ chpasswd \
+ groupadd \
+ groupdel \
+ groupmod \
+ newusers \
+ useradd \
+ userdel \
+ usermod
+
+@USE_PAM_TRUE@pamddir = $(sysconfdir)/pam.d
+@USE_PAM_TRUE@pamd_DATA = $(pamd_files) $(am__append_1)
+EXTRA_DIST = $(pamd_files) $(pamd_acct_tools_files)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign etc/pam.d/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign etc/pam.d/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-pamdDATA: $(pamd_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(pamd_DATA)'; test -n "$(pamddir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pamddir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pamddir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pamddir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pamddir)" || exit $$?; \
+ done
+
+uninstall-pamdDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pamd_DATA)'; test -n "$(pamddir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(pamddir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(pamddir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pamdDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pamdDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pamdDATA install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags-am uninstall uninstall-am uninstall-pamdDATA
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/etc/pam.d/chage b/etc/pam.d/chage
new file mode 100644
index 0000000..8f49f5c
--- /dev/null
+++ b/etc/pam.d/chage
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+account required pam_permit.so
+password include system-auth
diff --git a/etc/pam.d/chfn b/etc/pam.d/chfn
new file mode 100644
index 0000000..8f49f5c
--- /dev/null
+++ b/etc/pam.d/chfn
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+account required pam_permit.so
+password include system-auth
diff --git a/etc/pam.d/chgpasswd b/etc/pam.d/chgpasswd
new file mode 100644
index 0000000..8f49f5c
--- /dev/null
+++ b/etc/pam.d/chgpasswd
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+account required pam_permit.so
+password include system-auth
diff --git a/etc/pam.d/chpasswd b/etc/pam.d/chpasswd
new file mode 100644
index 0000000..8f49f5c
--- /dev/null
+++ b/etc/pam.d/chpasswd
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+account required pam_permit.so
+password include system-auth
diff --git a/etc/pam.d/chsh b/etc/pam.d/chsh
new file mode 100644
index 0000000..8f49f5c
--- /dev/null
+++ b/etc/pam.d/chsh
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+account required pam_permit.so
+password include system-auth
diff --git a/etc/pam.d/groupadd b/etc/pam.d/groupadd
new file mode 100644
index 0000000..8f49f5c
--- /dev/null
+++ b/etc/pam.d/groupadd
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+account required pam_permit.so
+password include system-auth
diff --git a/etc/pam.d/groupdel b/etc/pam.d/groupdel
new file mode 100644
index 0000000..8f49f5c
--- /dev/null
+++ b/etc/pam.d/groupdel
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+account required pam_permit.so
+password include system-auth
diff --git a/etc/pam.d/groupmems b/etc/pam.d/groupmems
new file mode 100644
index 0000000..8f49f5c
--- /dev/null
+++ b/etc/pam.d/groupmems
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+account required pam_permit.so
+password include system-auth
diff --git a/etc/pam.d/groupmod b/etc/pam.d/groupmod
new file mode 100644
index 0000000..8f49f5c
--- /dev/null
+++ b/etc/pam.d/groupmod
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+account required pam_permit.so
+password include system-auth
diff --git a/etc/pam.d/login b/etc/pam.d/login
new file mode 100644
index 0000000..5a64806
--- /dev/null
+++ b/etc/pam.d/login
@@ -0,0 +1,11 @@
+#%PAM-1.0
+auth required pam_securetty.so
+auth include system-auth
+account required pam_nologin.so
+account include system-auth
+password include system-auth
+session required pam_selinux.so close
+session include system-auth
+session required pam_loginuid.so
+session optional pam_console.so
+session required pam_selinux.so open
diff --git a/etc/pam.d/newusers b/etc/pam.d/newusers
new file mode 100644
index 0000000..8f49f5c
--- /dev/null
+++ b/etc/pam.d/newusers
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+account required pam_permit.so
+password include system-auth
diff --git a/etc/pam.d/passwd b/etc/pam.d/passwd
new file mode 100644
index 0000000..731c0d3
--- /dev/null
+++ b/etc/pam.d/passwd
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth include system-auth
+account include system-auth
+password include system-auth
diff --git a/etc/pam.d/su b/etc/pam.d/su
new file mode 100644
index 0000000..7ef7134
--- /dev/null
+++ b/etc/pam.d/su
@@ -0,0 +1,13 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+# Uncomment the following line to implicitly trust users in the "wheel" group.
+#auth sufficient pam_wheel.so trust use_uid
+# Uncomment the following line to require a user to be in the "wheel" group.
+auth required pam_wheel.so use_uid
+auth include system-auth
+account include system-auth
+password include system-auth
+session required pam_selinux.so close
+session include system-auth
+session required pam_selinux.so open multiple
+session optional pam_xauth.so
diff --git a/etc/pam.d/useradd b/etc/pam.d/useradd
new file mode 100644
index 0000000..8f49f5c
--- /dev/null
+++ b/etc/pam.d/useradd
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+account required pam_permit.so
+password include system-auth
diff --git a/etc/pam.d/userdel b/etc/pam.d/userdel
new file mode 100644
index 0000000..8f49f5c
--- /dev/null
+++ b/etc/pam.d/userdel
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+account required pam_permit.so
+password include system-auth
diff --git a/etc/pam.d/usermod b/etc/pam.d/usermod
new file mode 100644
index 0000000..8f49f5c
--- /dev/null
+++ b/etc/pam.d/usermod
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+account required pam_permit.so
+password include system-auth
diff --git a/etc/useradd b/etc/useradd
new file mode 100644
index 0000000..b77dd85
--- /dev/null
+++ b/etc/useradd
@@ -0,0 +1,8 @@
+# useradd defaults file
+GROUP=1000
+HOME=/home
+INACTIVE=-1
+EXPIRE=
+SHELL=/bin/bash
+SKEL=/etc/skel
+CREATE_MAIL_SPOOL=yes
diff --git a/install-sh b/install-sh
new file mode 100755
index 0000000..8175c64
--- /dev/null
+++ b/install-sh
@@ -0,0 +1,518 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2018-03-11.20; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# 'make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+tab=' '
+nl='
+'
+IFS=" $tab$nl"
+
+# Set DOITPROG to "echo" to test this script.
+
+doit=${DOITPROG-}
+doit_exec=${doit:-exec}
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+is_target_a_directory=possibly
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+ or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+ --help display this help and exit.
+ --version display version info and exit.
+
+ -c (ignored)
+ -C install only if different (preserve the last data modification time)
+ -d create directories instead of installing files.
+ -g GROUP $chgrpprog installed files to GROUP.
+ -m MODE $chmodprog installed files to MODE.
+ -o USER $chownprog installed files to USER.
+ -s $stripprog installed files.
+ -t DIRECTORY install into DIRECTORY.
+ -T report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+ RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+ case $1 in
+ -c) ;;
+
+ -C) copy_on_change=true;;
+
+ -d) dir_arg=true;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift;;
+
+ --help) echo "$usage"; exit $?;;
+
+ -m) mode=$2
+ case $mode in
+ *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ shift;;
+
+ -o) chowncmd="$chownprog $2"
+ shift;;
+
+ -s) stripcmd=$stripprog;;
+
+ -t)
+ is_target_a_directory=always
+ dst_arg=$2
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ shift;;
+
+ -T) is_target_a_directory=never;;
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+ --) shift
+ break;;
+
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
+
+ *) break;;
+ esac
+ shift
+done
+
+# We allow the use of options -d and -T together, by making -d
+# take the precedence; this is for compatibility with GNU install.
+
+if test -n "$dir_arg"; then
+ if test -n "$dst_arg"; then
+ echo "$0: target directory not allowed when installing a directory." >&2
+ exit 1
+ fi
+fi
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+ # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ # Otherwise, the last argument is the destination. Remove it from $@.
+ for arg
+ do
+ if test -n "$dst_arg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dst_arg"
+ shift # fnord
+ fi
+ shift # arg
+ dst_arg=$arg
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ done
+fi
+
+if test $# -eq 0; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+ fi
+ # It's OK to call 'install-sh -d' without argument.
+ # This can happen when creating conditional directories.
+ exit 0
+fi
+
+if test -z "$dir_arg"; then
+ if test $# -gt 1 || test "$is_target_a_directory" = always; then
+ if test ! -d "$dst_arg"; then
+ echo "$0: $dst_arg: Is not a directory." >&2
+ exit 1
+ fi
+ fi
+fi
+
+if test -z "$dir_arg"; then
+ do_exit='(exit $ret); exit $ret'
+ trap "ret=129; $do_exit" 1
+ trap "ret=130; $do_exit" 2
+ trap "ret=141; $do_exit" 13
+ trap "ret=143; $do_exit" 15
+
+ # Set umask so as not to create temps with too-generous modes.
+ # However, 'strip' requires both read and write access to temps.
+ case $mode in
+ # Optimize common cases.
+ *644) cp_umask=133;;
+ *755) cp_umask=22;;
+
+ *[0-7])
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw='% 200'
+ fi
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+ *)
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw=,u+rw
+ fi
+ cp_umask=$mode$u_plus_rw;;
+ esac
+fi
+
+for src
+do
+ # Protect names problematic for 'test' and other utilities.
+ case $src in
+ -* | [=\(\)!]) src=./$src;;
+ esac
+
+ if test -n "$dir_arg"; then
+ dst=$src
+ dstdir=$dst
+ test -d "$dstdir"
+ dstdir_status=$?
+ else
+
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+ if test ! -f "$src" && test ! -d "$src"; then
+ echo "$0: $src does not exist." >&2
+ exit 1
+ fi
+
+ if test -z "$dst_arg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+ dst=$dst_arg
+
+ # If destination is a directory, append the input filename.
+ if test -d "$dst"; then
+ if test "$is_target_a_directory" = never; then
+ echo "$0: $dst_arg: Is a directory" >&2
+ exit 1
+ fi
+ dstdir=$dst
+ dstbase=`basename "$src"`
+ case $dst in
+ */) dst=$dst$dstbase;;
+ *) dst=$dst/$dstbase;;
+ esac
+ dstdir_status=0
+ else
+ dstdir=`dirname "$dst"`
+ test -d "$dstdir"
+ dstdir_status=$?
+ fi
+ fi
+
+ case $dstdir in
+ */) dstdirslash=$dstdir;;
+ *) dstdirslash=$dstdir/;;
+ esac
+
+ obsolete_mkdir_used=false
+
+ if test $dstdir_status != 0; then
+ case $posix_mkdir in
+ '')
+ # Create intermediate dirs using mode 755 as modified by the umask.
+ # This is like FreeBSD 'install' as of 1997-10-28.
+ umask=`umask`
+ case $stripcmd.$umask in
+ # Optimize common cases.
+ *[2367][2367]) mkdir_umask=$umask;;
+ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+ *[0-7])
+ mkdir_umask=`expr $umask + 22 \
+ - $umask % 100 % 40 + $umask % 20 \
+ - $umask % 10 % 4 + $umask % 2
+ `;;
+ *) mkdir_umask=$umask,go-w;;
+ esac
+
+ # With -d, create the new directory with the user-specified mode.
+ # Otherwise, rely on $mkdir_umask.
+ if test -n "$dir_arg"; then
+ mkdir_mode=-m$mode
+ else
+ mkdir_mode=
+ fi
+
+ posix_mkdir=false
+ case $umask in
+ *[123567][0-7][0-7])
+ # POSIX mkdir -p sets u+wx bits regardless of umask, which
+ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+ ;;
+ *)
+ # Note that $RANDOM variable is not portable (e.g. dash); Use it
+ # here however when possible just to lower collision chance.
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+
+ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+ # Because "mkdir -p" follows existing symlinks and we likely work
+ # directly in world-writeable /tmp, make sure that the '$tmpdir'
+ # directory is successfully created first before we actually test
+ # 'mkdir -p' feature.
+ if (umask $mkdir_umask &&
+ $mkdirprog $mkdir_mode "$tmpdir" &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
+ then
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+ # other-writable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ test_tmpdir="$tmpdir/a"
+ ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
+ case $ls_ld_tmpdir in
+ d????-?r-*) different_mode=700;;
+ d????-?--*) different_mode=755;;
+ *) false;;
+ esac &&
+ $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+ }
+ }
+ then posix_mkdir=:
+ fi
+ rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
+ fi
+ trap '' 0;;
+ esac;;
+ esac
+
+ if
+ $posix_mkdir && (
+ umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+ )
+ then :
+ else
+
+ # The umask is ridiculous, or mkdir does not conform to POSIX,
+ # or it failed possibly due to a race condition. Create the
+ # directory the slow way, step by step, checking for races as we go.
+
+ case $dstdir in
+ /*) prefix='/';;
+ [-=\(\)!]*) prefix='./';;
+ *) prefix='';;
+ esac
+
+ oIFS=$IFS
+ IFS=/
+ set -f
+ set fnord $dstdir
+ shift
+ set +f
+ IFS=$oIFS
+
+ prefixes=
+
+ for d
+ do
+ test X"$d" = X && continue
+
+ prefix=$prefix$d
+ if test -d "$prefix"; then
+ prefixes=
+ else
+ if $posix_mkdir; then
+ (umask=$mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+ # Don't fail if two instances are running concurrently.
+ test -d "$prefix" || exit 1
+ else
+ case $prefix in
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) qprefix=$prefix;;
+ esac
+ prefixes="$prefixes '$qprefix'"
+ fi
+ fi
+ prefix=$prefix/
+ done
+
+ if test -n "$prefixes"; then
+ # Don't fail if two instances are running concurrently.
+ (umask $mkdir_umask &&
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
+ test -d "$dstdir" || exit 1
+ obsolete_mkdir_used=true
+ fi
+ fi
+ fi
+
+ if test -n "$dir_arg"; then
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+ else
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=${dstdirslash}_inst.$$_
+ rmtmp=${dstdirslash}_rm.$$_
+
+ # Trap to clean up those temp files at exit.
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+ # Copy the file name to the temp name.
+ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+ # If any of these fail, we abort the whole thing. If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
+ #
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+ { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+ { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+ # If -C, don't bother to copy if it wouldn't change the file.
+ if $copy_on_change &&
+ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
+ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+ set -f &&
+ set X $old && old=:$2:$4:$5:$6 &&
+ set X $new && new=:$2:$4:$5:$6 &&
+ set +f &&
+ test "$old" = "$new" &&
+ $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+ then
+ rm -f "$dsttmp"
+ else
+ # Rename the file to the real destination.
+ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+ # support -f.
+ {
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ test ! -f "$dst" ||
+ $doit $rmcmd -f "$dst" 2>/dev/null ||
+ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+ { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+ } ||
+ { echo "$0: cannot unlink or rename $dst" >&2
+ (exit 1); exit 1
+ }
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dst"
+ }
+ fi || exit 1
+
+ trap '' 0
+ fi
+done
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/lib/.indent.pro b/lib/.indent.pro
new file mode 100644
index 0000000..fe572bb
--- /dev/null
+++ b/lib/.indent.pro
@@ -0,0 +1,5 @@
+-kr
+-i8
+-bad
+-pcs
+-l80
diff --git a/lib/Makefile.am b/lib/Makefile.am
new file mode 100644
index 0000000..a40c08a
--- /dev/null
+++ b/lib/Makefile.am
@@ -0,0 +1,75 @@
+
+AUTOMAKE_OPTIONS = 1.0 foreign
+
+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 \
+ commonio.h \
+ defines.h \
+ encrypt.c \
+ exitcodes.h \
+ faillog.h \
+ fields.c \
+ fputsx.c \
+ getdef.c \
+ getdef.h \
+ get_gid.c \
+ getlong.c \
+ get_pid.c \
+ get_uid.c \
+ getulong.c \
+ groupio.c \
+ groupmem.c \
+ groupio.h \
+ gshadow.c \
+ lockpw.c \
+ nscd.c \
+ nscd.h \
+ sssd.c \
+ sssd.h \
+ pam_defs.h \
+ port.c \
+ port.h \
+ prototypes.h \
+ pwauth.c \
+ pwauth.h \
+ pwio.c \
+ pwio.h \
+ pwmem.c \
+ subordinateio.h \
+ subordinateio.c \
+ selinux.c \
+ semanage.c \
+ sgetgrent.c \
+ sgetpwent.c \
+ sgetspent.c \
+ sgroupio.c \
+ sgroupio.h\
+ shadow.c \
+ shadowio.c \
+ shadowio.h \
+ shadowmem.c \
+ spawn.c \
+ utent.c
+
+if WITH_TCB
+libshadow_la_SOURCES += tcbfuncs.c tcbfuncs.h
+endif
+
+# These files are unneeded for some reason, listed in
+# order of appearance:
+#
+# sources for dbm support (not yet used)
+
+EXTRA_DIST = \
+ .indent.pro \
+ gshadow_.h
diff --git a/lib/Makefile.in b/lib/Makefile.in
new file mode 100644
index 0000000..abce42b
--- /dev/null
+++ b/lib/Makefile.in
@@ -0,0 +1,1040 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@HAVE_VENDORDIR_TRUE@am__append_1 = -DVENDORDIR=\"$(VENDORDIR)\"
+@WITH_TCB_TRUE@am__append_2 = tcbfuncs.c tcbfuncs.h
+subdir = lib
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libshadow_la_LIBADD =
+am__libshadow_la_SOURCES_DIST = commonio.c commonio.h defines.h \
+ encrypt.c exitcodes.h faillog.h fields.c fputsx.c getdef.c \
+ getdef.h get_gid.c getlong.c get_pid.c get_uid.c getulong.c \
+ groupio.c groupmem.c groupio.h gshadow.c lockpw.c nscd.c \
+ nscd.h sssd.c sssd.h pam_defs.h port.c port.h prototypes.h \
+ pwauth.c pwauth.h pwio.c pwio.h pwmem.c subordinateio.h \
+ subordinateio.c selinux.c semanage.c sgetgrent.c sgetpwent.c \
+ sgetspent.c sgroupio.c sgroupio.h shadow.c shadowio.c \
+ shadowio.h shadowmem.c spawn.c utent.c tcbfuncs.c tcbfuncs.h
+@WITH_TCB_TRUE@am__objects_1 = libshadow_la-tcbfuncs.lo
+am_libshadow_la_OBJECTS = libshadow_la-commonio.lo \
+ libshadow_la-encrypt.lo libshadow_la-fields.lo \
+ libshadow_la-fputsx.lo libshadow_la-getdef.lo \
+ libshadow_la-get_gid.lo libshadow_la-getlong.lo \
+ libshadow_la-get_pid.lo libshadow_la-get_uid.lo \
+ libshadow_la-getulong.lo libshadow_la-groupio.lo \
+ libshadow_la-groupmem.lo libshadow_la-gshadow.lo \
+ libshadow_la-lockpw.lo libshadow_la-nscd.lo \
+ libshadow_la-sssd.lo libshadow_la-port.lo \
+ libshadow_la-pwauth.lo libshadow_la-pwio.lo \
+ libshadow_la-pwmem.lo libshadow_la-subordinateio.lo \
+ libshadow_la-selinux.lo libshadow_la-semanage.lo \
+ libshadow_la-sgetgrent.lo libshadow_la-sgetpwent.lo \
+ libshadow_la-sgetspent.lo libshadow_la-sgroupio.lo \
+ libshadow_la-shadow.lo libshadow_la-shadowio.lo \
+ libshadow_la-shadowmem.lo libshadow_la-spawn.lo \
+ libshadow_la-utent.lo $(am__objects_1)
+libshadow_la_OBJECTS = $(am_libshadow_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+libshadow_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(libshadow_la_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/libshadow_la-commonio.Plo \
+ ./$(DEPDIR)/libshadow_la-encrypt.Plo \
+ ./$(DEPDIR)/libshadow_la-fields.Plo \
+ ./$(DEPDIR)/libshadow_la-fputsx.Plo \
+ ./$(DEPDIR)/libshadow_la-get_gid.Plo \
+ ./$(DEPDIR)/libshadow_la-get_pid.Plo \
+ ./$(DEPDIR)/libshadow_la-get_uid.Plo \
+ ./$(DEPDIR)/libshadow_la-getdef.Plo \
+ ./$(DEPDIR)/libshadow_la-getlong.Plo \
+ ./$(DEPDIR)/libshadow_la-getulong.Plo \
+ ./$(DEPDIR)/libshadow_la-groupio.Plo \
+ ./$(DEPDIR)/libshadow_la-groupmem.Plo \
+ ./$(DEPDIR)/libshadow_la-gshadow.Plo \
+ ./$(DEPDIR)/libshadow_la-lockpw.Plo \
+ ./$(DEPDIR)/libshadow_la-nscd.Plo \
+ ./$(DEPDIR)/libshadow_la-port.Plo \
+ ./$(DEPDIR)/libshadow_la-pwauth.Plo \
+ ./$(DEPDIR)/libshadow_la-pwio.Plo \
+ ./$(DEPDIR)/libshadow_la-pwmem.Plo \
+ ./$(DEPDIR)/libshadow_la-selinux.Plo \
+ ./$(DEPDIR)/libshadow_la-semanage.Plo \
+ ./$(DEPDIR)/libshadow_la-sgetgrent.Plo \
+ ./$(DEPDIR)/libshadow_la-sgetpwent.Plo \
+ ./$(DEPDIR)/libshadow_la-sgetspent.Plo \
+ ./$(DEPDIR)/libshadow_la-sgroupio.Plo \
+ ./$(DEPDIR)/libshadow_la-shadow.Plo \
+ ./$(DEPDIR)/libshadow_la-shadowio.Plo \
+ ./$(DEPDIR)/libshadow_la-shadowmem.Plo \
+ ./$(DEPDIR)/libshadow_la-spawn.Plo \
+ ./$(DEPDIR)/libshadow_la-sssd.Plo \
+ ./$(DEPDIR)/libshadow_la-subordinateio.Plo \
+ ./$(DEPDIR)/libshadow_la-tcbfuncs.Plo \
+ ./$(DEPDIR)/libshadow_la-utent.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libshadow_la_SOURCES)
+DIST_SOURCES = $(am__libshadow_la_SOURCES_DIST)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS =
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = 1.0 foreign
+noinst_LTLIBRARIES = libshadow.la
+libshadow_la_LDFLAGS = -version-info 0:0:0
+libshadow_la_CPPFLAGS = $(ECONF_CPPFLAGS) $(am__append_1)
+libshadow_la_SOURCES = commonio.c commonio.h defines.h encrypt.c \
+ exitcodes.h faillog.h fields.c fputsx.c getdef.c getdef.h \
+ get_gid.c getlong.c get_pid.c get_uid.c getulong.c groupio.c \
+ groupmem.c groupio.h gshadow.c lockpw.c nscd.c nscd.h sssd.c \
+ sssd.h pam_defs.h port.c port.h prototypes.h pwauth.c pwauth.h \
+ pwio.c pwio.h pwmem.c subordinateio.h subordinateio.c \
+ selinux.c semanage.c sgetgrent.c sgetpwent.c sgetspent.c \
+ sgroupio.c sgroupio.h shadow.c shadowio.c shadowio.h \
+ shadowmem.c spawn.c utent.c $(am__append_2)
+
+# These files are unneeded for some reason, listed in
+# order of appearance:
+#
+# sources for dbm support (not yet used)
+EXTRA_DIST = \
+ .indent.pro \
+ gshadow_.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign lib/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libshadow.la: $(libshadow_la_OBJECTS) $(libshadow_la_DEPENDENCIES) $(EXTRA_libshadow_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libshadow_la_LINK) $(libshadow_la_OBJECTS) $(libshadow_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-commonio.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-encrypt.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-fields.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-fputsx.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-get_gid.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-get_pid.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-get_uid.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-getdef.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-getlong.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-getulong.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-groupio.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-groupmem.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-gshadow.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-lockpw.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-nscd.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-port.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-pwauth.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-pwio.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-pwmem.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-selinux.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-semanage.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-sgetgrent.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-sgetpwent.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-sgetspent.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-sgroupio.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-shadow.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-shadowio.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-shadowmem.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-spawn.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-sssd.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-subordinateio.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-tcbfuncs.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadow_la-utent.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+libshadow_la-commonio.lo: commonio.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-commonio.lo -MD -MP -MF $(DEPDIR)/libshadow_la-commonio.Tpo -c -o libshadow_la-commonio.lo `test -f 'commonio.c' || echo '$(srcdir)/'`commonio.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-commonio.Tpo $(DEPDIR)/libshadow_la-commonio.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commonio.c' object='libshadow_la-commonio.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-commonio.lo `test -f 'commonio.c' || echo '$(srcdir)/'`commonio.c
+
+libshadow_la-encrypt.lo: encrypt.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-encrypt.lo -MD -MP -MF $(DEPDIR)/libshadow_la-encrypt.Tpo -c -o libshadow_la-encrypt.lo `test -f 'encrypt.c' || echo '$(srcdir)/'`encrypt.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-encrypt.Tpo $(DEPDIR)/libshadow_la-encrypt.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='encrypt.c' object='libshadow_la-encrypt.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-encrypt.lo `test -f 'encrypt.c' || echo '$(srcdir)/'`encrypt.c
+
+libshadow_la-fields.lo: fields.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-fields.lo -MD -MP -MF $(DEPDIR)/libshadow_la-fields.Tpo -c -o libshadow_la-fields.lo `test -f 'fields.c' || echo '$(srcdir)/'`fields.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-fields.Tpo $(DEPDIR)/libshadow_la-fields.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fields.c' object='libshadow_la-fields.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-fields.lo `test -f 'fields.c' || echo '$(srcdir)/'`fields.c
+
+libshadow_la-fputsx.lo: fputsx.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-fputsx.lo -MD -MP -MF $(DEPDIR)/libshadow_la-fputsx.Tpo -c -o libshadow_la-fputsx.lo `test -f 'fputsx.c' || echo '$(srcdir)/'`fputsx.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-fputsx.Tpo $(DEPDIR)/libshadow_la-fputsx.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fputsx.c' object='libshadow_la-fputsx.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-fputsx.lo `test -f 'fputsx.c' || echo '$(srcdir)/'`fputsx.c
+
+libshadow_la-getdef.lo: getdef.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-getdef.lo -MD -MP -MF $(DEPDIR)/libshadow_la-getdef.Tpo -c -o libshadow_la-getdef.lo `test -f 'getdef.c' || echo '$(srcdir)/'`getdef.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-getdef.Tpo $(DEPDIR)/libshadow_la-getdef.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getdef.c' object='libshadow_la-getdef.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-getdef.lo `test -f 'getdef.c' || echo '$(srcdir)/'`getdef.c
+
+libshadow_la-get_gid.lo: get_gid.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-get_gid.lo -MD -MP -MF $(DEPDIR)/libshadow_la-get_gid.Tpo -c -o libshadow_la-get_gid.lo `test -f 'get_gid.c' || echo '$(srcdir)/'`get_gid.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-get_gid.Tpo $(DEPDIR)/libshadow_la-get_gid.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='get_gid.c' object='libshadow_la-get_gid.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-get_gid.lo `test -f 'get_gid.c' || echo '$(srcdir)/'`get_gid.c
+
+libshadow_la-getlong.lo: getlong.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-getlong.lo -MD -MP -MF $(DEPDIR)/libshadow_la-getlong.Tpo -c -o libshadow_la-getlong.lo `test -f 'getlong.c' || echo '$(srcdir)/'`getlong.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-getlong.Tpo $(DEPDIR)/libshadow_la-getlong.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getlong.c' object='libshadow_la-getlong.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-getlong.lo `test -f 'getlong.c' || echo '$(srcdir)/'`getlong.c
+
+libshadow_la-get_pid.lo: get_pid.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-get_pid.lo -MD -MP -MF $(DEPDIR)/libshadow_la-get_pid.Tpo -c -o libshadow_la-get_pid.lo `test -f 'get_pid.c' || echo '$(srcdir)/'`get_pid.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-get_pid.Tpo $(DEPDIR)/libshadow_la-get_pid.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='get_pid.c' object='libshadow_la-get_pid.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-get_pid.lo `test -f 'get_pid.c' || echo '$(srcdir)/'`get_pid.c
+
+libshadow_la-get_uid.lo: get_uid.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-get_uid.lo -MD -MP -MF $(DEPDIR)/libshadow_la-get_uid.Tpo -c -o libshadow_la-get_uid.lo `test -f 'get_uid.c' || echo '$(srcdir)/'`get_uid.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-get_uid.Tpo $(DEPDIR)/libshadow_la-get_uid.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='get_uid.c' object='libshadow_la-get_uid.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-get_uid.lo `test -f 'get_uid.c' || echo '$(srcdir)/'`get_uid.c
+
+libshadow_la-getulong.lo: getulong.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-getulong.lo -MD -MP -MF $(DEPDIR)/libshadow_la-getulong.Tpo -c -o libshadow_la-getulong.lo `test -f 'getulong.c' || echo '$(srcdir)/'`getulong.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-getulong.Tpo $(DEPDIR)/libshadow_la-getulong.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getulong.c' object='libshadow_la-getulong.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-getulong.lo `test -f 'getulong.c' || echo '$(srcdir)/'`getulong.c
+
+libshadow_la-groupio.lo: groupio.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-groupio.lo -MD -MP -MF $(DEPDIR)/libshadow_la-groupio.Tpo -c -o libshadow_la-groupio.lo `test -f 'groupio.c' || echo '$(srcdir)/'`groupio.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-groupio.Tpo $(DEPDIR)/libshadow_la-groupio.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='groupio.c' object='libshadow_la-groupio.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-groupio.lo `test -f 'groupio.c' || echo '$(srcdir)/'`groupio.c
+
+libshadow_la-groupmem.lo: groupmem.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-groupmem.lo -MD -MP -MF $(DEPDIR)/libshadow_la-groupmem.Tpo -c -o libshadow_la-groupmem.lo `test -f 'groupmem.c' || echo '$(srcdir)/'`groupmem.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-groupmem.Tpo $(DEPDIR)/libshadow_la-groupmem.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='groupmem.c' object='libshadow_la-groupmem.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-groupmem.lo `test -f 'groupmem.c' || echo '$(srcdir)/'`groupmem.c
+
+libshadow_la-gshadow.lo: gshadow.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-gshadow.lo -MD -MP -MF $(DEPDIR)/libshadow_la-gshadow.Tpo -c -o libshadow_la-gshadow.lo `test -f 'gshadow.c' || echo '$(srcdir)/'`gshadow.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-gshadow.Tpo $(DEPDIR)/libshadow_la-gshadow.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gshadow.c' object='libshadow_la-gshadow.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-gshadow.lo `test -f 'gshadow.c' || echo '$(srcdir)/'`gshadow.c
+
+libshadow_la-lockpw.lo: lockpw.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-lockpw.lo -MD -MP -MF $(DEPDIR)/libshadow_la-lockpw.Tpo -c -o libshadow_la-lockpw.lo `test -f 'lockpw.c' || echo '$(srcdir)/'`lockpw.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-lockpw.Tpo $(DEPDIR)/libshadow_la-lockpw.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lockpw.c' object='libshadow_la-lockpw.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-lockpw.lo `test -f 'lockpw.c' || echo '$(srcdir)/'`lockpw.c
+
+libshadow_la-nscd.lo: nscd.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-nscd.lo -MD -MP -MF $(DEPDIR)/libshadow_la-nscd.Tpo -c -o libshadow_la-nscd.lo `test -f 'nscd.c' || echo '$(srcdir)/'`nscd.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-nscd.Tpo $(DEPDIR)/libshadow_la-nscd.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nscd.c' object='libshadow_la-nscd.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-nscd.lo `test -f 'nscd.c' || echo '$(srcdir)/'`nscd.c
+
+libshadow_la-sssd.lo: sssd.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-sssd.lo -MD -MP -MF $(DEPDIR)/libshadow_la-sssd.Tpo -c -o libshadow_la-sssd.lo `test -f 'sssd.c' || echo '$(srcdir)/'`sssd.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-sssd.Tpo $(DEPDIR)/libshadow_la-sssd.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sssd.c' object='libshadow_la-sssd.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-sssd.lo `test -f 'sssd.c' || echo '$(srcdir)/'`sssd.c
+
+libshadow_la-port.lo: port.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-port.lo -MD -MP -MF $(DEPDIR)/libshadow_la-port.Tpo -c -o libshadow_la-port.lo `test -f 'port.c' || echo '$(srcdir)/'`port.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-port.Tpo $(DEPDIR)/libshadow_la-port.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='port.c' object='libshadow_la-port.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-port.lo `test -f 'port.c' || echo '$(srcdir)/'`port.c
+
+libshadow_la-pwauth.lo: pwauth.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-pwauth.lo -MD -MP -MF $(DEPDIR)/libshadow_la-pwauth.Tpo -c -o libshadow_la-pwauth.lo `test -f 'pwauth.c' || echo '$(srcdir)/'`pwauth.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-pwauth.Tpo $(DEPDIR)/libshadow_la-pwauth.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pwauth.c' object='libshadow_la-pwauth.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-pwauth.lo `test -f 'pwauth.c' || echo '$(srcdir)/'`pwauth.c
+
+libshadow_la-pwio.lo: pwio.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-pwio.lo -MD -MP -MF $(DEPDIR)/libshadow_la-pwio.Tpo -c -o libshadow_la-pwio.lo `test -f 'pwio.c' || echo '$(srcdir)/'`pwio.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-pwio.Tpo $(DEPDIR)/libshadow_la-pwio.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pwio.c' object='libshadow_la-pwio.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-pwio.lo `test -f 'pwio.c' || echo '$(srcdir)/'`pwio.c
+
+libshadow_la-pwmem.lo: pwmem.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-pwmem.lo -MD -MP -MF $(DEPDIR)/libshadow_la-pwmem.Tpo -c -o libshadow_la-pwmem.lo `test -f 'pwmem.c' || echo '$(srcdir)/'`pwmem.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-pwmem.Tpo $(DEPDIR)/libshadow_la-pwmem.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pwmem.c' object='libshadow_la-pwmem.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-pwmem.lo `test -f 'pwmem.c' || echo '$(srcdir)/'`pwmem.c
+
+libshadow_la-subordinateio.lo: subordinateio.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-subordinateio.lo -MD -MP -MF $(DEPDIR)/libshadow_la-subordinateio.Tpo -c -o libshadow_la-subordinateio.lo `test -f 'subordinateio.c' || echo '$(srcdir)/'`subordinateio.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-subordinateio.Tpo $(DEPDIR)/libshadow_la-subordinateio.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='subordinateio.c' object='libshadow_la-subordinateio.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-subordinateio.lo `test -f 'subordinateio.c' || echo '$(srcdir)/'`subordinateio.c
+
+libshadow_la-selinux.lo: selinux.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-selinux.lo -MD -MP -MF $(DEPDIR)/libshadow_la-selinux.Tpo -c -o libshadow_la-selinux.lo `test -f 'selinux.c' || echo '$(srcdir)/'`selinux.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-selinux.Tpo $(DEPDIR)/libshadow_la-selinux.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='selinux.c' object='libshadow_la-selinux.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-selinux.lo `test -f 'selinux.c' || echo '$(srcdir)/'`selinux.c
+
+libshadow_la-semanage.lo: semanage.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-semanage.lo -MD -MP -MF $(DEPDIR)/libshadow_la-semanage.Tpo -c -o libshadow_la-semanage.lo `test -f 'semanage.c' || echo '$(srcdir)/'`semanage.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-semanage.Tpo $(DEPDIR)/libshadow_la-semanage.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='semanage.c' object='libshadow_la-semanage.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-semanage.lo `test -f 'semanage.c' || echo '$(srcdir)/'`semanage.c
+
+libshadow_la-sgetgrent.lo: sgetgrent.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-sgetgrent.lo -MD -MP -MF $(DEPDIR)/libshadow_la-sgetgrent.Tpo -c -o libshadow_la-sgetgrent.lo `test -f 'sgetgrent.c' || echo '$(srcdir)/'`sgetgrent.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-sgetgrent.Tpo $(DEPDIR)/libshadow_la-sgetgrent.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sgetgrent.c' object='libshadow_la-sgetgrent.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-sgetgrent.lo `test -f 'sgetgrent.c' || echo '$(srcdir)/'`sgetgrent.c
+
+libshadow_la-sgetpwent.lo: sgetpwent.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-sgetpwent.lo -MD -MP -MF $(DEPDIR)/libshadow_la-sgetpwent.Tpo -c -o libshadow_la-sgetpwent.lo `test -f 'sgetpwent.c' || echo '$(srcdir)/'`sgetpwent.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-sgetpwent.Tpo $(DEPDIR)/libshadow_la-sgetpwent.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sgetpwent.c' object='libshadow_la-sgetpwent.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-sgetpwent.lo `test -f 'sgetpwent.c' || echo '$(srcdir)/'`sgetpwent.c
+
+libshadow_la-sgetspent.lo: sgetspent.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-sgetspent.lo -MD -MP -MF $(DEPDIR)/libshadow_la-sgetspent.Tpo -c -o libshadow_la-sgetspent.lo `test -f 'sgetspent.c' || echo '$(srcdir)/'`sgetspent.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-sgetspent.Tpo $(DEPDIR)/libshadow_la-sgetspent.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sgetspent.c' object='libshadow_la-sgetspent.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-sgetspent.lo `test -f 'sgetspent.c' || echo '$(srcdir)/'`sgetspent.c
+
+libshadow_la-sgroupio.lo: sgroupio.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-sgroupio.lo -MD -MP -MF $(DEPDIR)/libshadow_la-sgroupio.Tpo -c -o libshadow_la-sgroupio.lo `test -f 'sgroupio.c' || echo '$(srcdir)/'`sgroupio.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-sgroupio.Tpo $(DEPDIR)/libshadow_la-sgroupio.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sgroupio.c' object='libshadow_la-sgroupio.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-sgroupio.lo `test -f 'sgroupio.c' || echo '$(srcdir)/'`sgroupio.c
+
+libshadow_la-shadow.lo: shadow.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-shadow.lo -MD -MP -MF $(DEPDIR)/libshadow_la-shadow.Tpo -c -o libshadow_la-shadow.lo `test -f 'shadow.c' || echo '$(srcdir)/'`shadow.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-shadow.Tpo $(DEPDIR)/libshadow_la-shadow.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='shadow.c' object='libshadow_la-shadow.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-shadow.lo `test -f 'shadow.c' || echo '$(srcdir)/'`shadow.c
+
+libshadow_la-shadowio.lo: shadowio.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-shadowio.lo -MD -MP -MF $(DEPDIR)/libshadow_la-shadowio.Tpo -c -o libshadow_la-shadowio.lo `test -f 'shadowio.c' || echo '$(srcdir)/'`shadowio.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-shadowio.Tpo $(DEPDIR)/libshadow_la-shadowio.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='shadowio.c' object='libshadow_la-shadowio.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-shadowio.lo `test -f 'shadowio.c' || echo '$(srcdir)/'`shadowio.c
+
+libshadow_la-shadowmem.lo: shadowmem.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-shadowmem.lo -MD -MP -MF $(DEPDIR)/libshadow_la-shadowmem.Tpo -c -o libshadow_la-shadowmem.lo `test -f 'shadowmem.c' || echo '$(srcdir)/'`shadowmem.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-shadowmem.Tpo $(DEPDIR)/libshadow_la-shadowmem.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='shadowmem.c' object='libshadow_la-shadowmem.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-shadowmem.lo `test -f 'shadowmem.c' || echo '$(srcdir)/'`shadowmem.c
+
+libshadow_la-spawn.lo: spawn.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-spawn.lo -MD -MP -MF $(DEPDIR)/libshadow_la-spawn.Tpo -c -o libshadow_la-spawn.lo `test -f 'spawn.c' || echo '$(srcdir)/'`spawn.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-spawn.Tpo $(DEPDIR)/libshadow_la-spawn.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='spawn.c' object='libshadow_la-spawn.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-spawn.lo `test -f 'spawn.c' || echo '$(srcdir)/'`spawn.c
+
+libshadow_la-utent.lo: utent.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-utent.lo -MD -MP -MF $(DEPDIR)/libshadow_la-utent.Tpo -c -o libshadow_la-utent.lo `test -f 'utent.c' || echo '$(srcdir)/'`utent.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-utent.Tpo $(DEPDIR)/libshadow_la-utent.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='utent.c' object='libshadow_la-utent.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-utent.lo `test -f 'utent.c' || echo '$(srcdir)/'`utent.c
+
+libshadow_la-tcbfuncs.lo: tcbfuncs.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libshadow_la-tcbfuncs.lo -MD -MP -MF $(DEPDIR)/libshadow_la-tcbfuncs.Tpo -c -o libshadow_la-tcbfuncs.lo `test -f 'tcbfuncs.c' || echo '$(srcdir)/'`tcbfuncs.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libshadow_la-tcbfuncs.Tpo $(DEPDIR)/libshadow_la-tcbfuncs.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tcbfuncs.c' object='libshadow_la-tcbfuncs.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libshadow_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libshadow_la-tcbfuncs.lo `test -f 'tcbfuncs.c' || echo '$(srcdir)/'`tcbfuncs.c
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/libshadow_la-commonio.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-encrypt.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-fields.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-fputsx.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-get_gid.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-get_pid.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-get_uid.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-getdef.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-getlong.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-getulong.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-groupio.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-groupmem.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-gshadow.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-lockpw.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-nscd.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-port.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-pwauth.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-pwio.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-pwmem.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-selinux.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-semanage.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-sgetgrent.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-sgetpwent.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-sgetspent.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-sgroupio.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-shadow.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-shadowio.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-shadowmem.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-spawn.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-sssd.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-subordinateio.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-tcbfuncs.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-utent.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/libshadow_la-commonio.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-encrypt.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-fields.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-fputsx.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-get_gid.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-get_pid.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-get_uid.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-getdef.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-getlong.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-getulong.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-groupio.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-groupmem.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-gshadow.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-lockpw.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-nscd.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-port.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-pwauth.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-pwio.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-pwmem.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-selinux.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-semanage.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-sgetgrent.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-sgetpwent.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-sgetspent.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-sgroupio.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-shadow.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-shadowio.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-shadowmem.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-spawn.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-sssd.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-subordinateio.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-tcbfuncs.Plo
+ -rm -f ./$(DEPDIR)/libshadow_la-utent.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/lib/commonio.c b/lib/commonio.c
new file mode 100644
index 0000000..16fa7e7
--- /dev/null
+++ b/lib/commonio.c
@@ -0,0 +1,1294 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2001, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 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 "defines.h"
+#include <assert.h>
+#include <sys/stat.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <utime.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <stdio.h>
+#include <signal.h>
+#include "nscd.h"
+#include "sssd.h"
+#ifdef WITH_TCB
+#include <tcb.h>
+#endif /* WITH_TCB */
+#include "prototypes.h"
+#include "commonio.h"
+
+/* local function prototypes */
+static int lrename (const char *, const char *);
+static int check_link_count (const char *file);
+static int do_lock_file (const char *file, const char *lock, bool log);
+static /*@null@*/ /*@dependent@*/FILE *fopen_set_perms (
+ const char *name,
+ const char *mode,
+ const struct stat *sb);
+static int create_backup (const char *, FILE *);
+static void free_linked_list (struct commonio_db *);
+static void add_one_entry (
+ struct commonio_db *db,
+ /*@owned@*/struct commonio_entry *p);
+static bool name_is_nis (const char *name);
+static int write_all (const struct commonio_db *);
+static /*@dependent@*/ /*@null@*/struct commonio_entry *find_entry_by_name (
+ struct commonio_db *,
+ const char *);
+static /*@dependent@*/ /*@null@*/struct commonio_entry *next_entry_by_name (
+ struct commonio_db *,
+ /*@null@*/struct commonio_entry *pos,
+ const char *);
+
+static int lock_count = 0;
+static bool nscd_need_reload = false;
+
+/*
+ * Simple rename(P) alternative that attempts to rename to symlink
+ * target.
+ */
+int lrename (const char *old, const char *new)
+{
+ int res;
+ char *r = NULL;
+
+#if defined(S_ISLNK)
+#ifndef __GLIBC__
+ char resolved_path[PATH_MAX];
+#endif /* !__GLIBC__ */
+ struct stat sb;
+ if (lstat (new, &sb) == 0 && S_ISLNK (sb.st_mode)) {
+#ifdef __GLIBC__ /* now a POSIX.1-2008 feature */
+ r = realpath (new, NULL);
+#else /* !__GLIBC__ */
+ r = realpath (new, resolved_path);
+#endif /* !__GLIBC__ */
+ if (NULL == r) {
+ perror ("realpath in lrename()");
+ } else {
+ new = r;
+ }
+ }
+#endif /* S_ISLNK */
+
+ res = rename (old, new);
+
+#ifdef __GLIBC__
+ if (NULL != r) {
+ free (r);
+ }
+#endif /* __GLIBC__ */
+
+ return res;
+}
+
+static int check_link_count (const char *file)
+{
+ struct stat sb;
+
+ if (stat (file, &sb) != 0) {
+ return 0;
+ }
+
+ if (sb.st_nlink != 2) {
+ return 0;
+ }
+
+ return 1;
+}
+
+
+static int do_lock_file (const char *file, const char *lock, bool log)
+{
+ int fd;
+ pid_t pid;
+ ssize_t len;
+ int retval;
+ char buf[32];
+
+ fd = open (file, O_CREAT | O_TRUNC | O_WRONLY, 0600);
+ if (-1 == fd) {
+ if (log) {
+ (void) fprintf (stderr,
+ "%s: %s: %s\n",
+ Prog, file, strerror (errno));
+ }
+ return 0;
+ }
+
+ pid = getpid ();
+ snprintf (buf, sizeof buf, "%lu", (unsigned long) pid);
+ len = (ssize_t) strlen (buf) + 1;
+ if (write (fd, buf, (size_t) len) != len) {
+ if (log) {
+ (void) fprintf (stderr,
+ "%s: %s: %s\n",
+ Prog, file, strerror (errno));
+ }
+ (void) close (fd);
+ unlink (file);
+ return 0;
+ }
+ close (fd);
+
+ if (link (file, lock) == 0) {
+ retval = check_link_count (file);
+ if ((0==retval) && log) {
+ (void) fprintf (stderr,
+ "%s: %s: lock file already used\n",
+ Prog, file);
+ }
+ unlink (file);
+ return retval;
+ }
+
+ fd = open (lock, O_RDWR);
+ if (-1 == fd) {
+ if (log) {
+ (void) fprintf (stderr,
+ "%s: %s: %s\n",
+ Prog, lock, strerror (errno));
+ }
+ unlink (file);
+ errno = EINVAL;
+ return 0;
+ }
+ len = read (fd, buf, sizeof (buf) - 1);
+ close (fd);
+ if (len <= 0) {
+ if (log) {
+ (void) fprintf (stderr,
+ "%s: existing lock file %s without a PID\n",
+ Prog, lock);
+ }
+ unlink (file);
+ errno = EINVAL;
+ return 0;
+ }
+ buf[len] = '\0';
+ if (get_pid (buf, &pid) == 0) {
+ if (log) {
+ (void) fprintf (stderr,
+ "%s: existing lock file %s with an invalid PID '%s'\n",
+ Prog, lock, buf);
+ }
+ unlink (file);
+ errno = EINVAL;
+ return 0;
+ }
+ if (kill (pid, 0) == 0) {
+ if (log) {
+ (void) fprintf (stderr,
+ "%s: lock %s already used by PID %lu\n",
+ Prog, lock, (unsigned long) pid);
+ }
+ unlink (file);
+ errno = EEXIST;
+ return 0;
+ }
+ if (unlink (lock) != 0) {
+ if (log) {
+ (void) fprintf (stderr,
+ "%s: cannot get lock %s: %s\n",
+ Prog, lock, strerror (errno));
+ }
+ unlink (file);
+ return 0;
+ }
+
+ retval = 0;
+ if (link (file, lock) == 0) {
+ retval = check_link_count (file);
+ if ((0==retval) && log) {
+ (void) fprintf (stderr,
+ "%s: %s: lock file already used\n",
+ Prog, file);
+ }
+ } else {
+ if (log) {
+ (void) fprintf (stderr,
+ "%s: cannot get lock %s: %s\n",
+ Prog, lock, strerror (errno));
+ }
+ }
+
+ unlink (file);
+ return retval;
+}
+
+
+static /*@null@*/ /*@dependent@*/FILE *fopen_set_perms (
+ const char *name,
+ const char *mode,
+ const struct stat *sb)
+{
+ FILE *fp;
+ mode_t mask;
+
+ mask = umask (0777);
+ fp = fopen (name, mode);
+ (void) umask (mask);
+ if (NULL == fp) {
+ return NULL;
+ }
+
+#ifdef HAVE_FCHOWN
+ if (fchown (fileno (fp), sb->st_uid, sb->st_gid) != 0) {
+ goto fail;
+ }
+#else /* !HAVE_FCHOWN */
+ if (chown (name, sb->st_mode) != 0) {
+ goto fail;
+ }
+#endif /* !HAVE_FCHOWN */
+
+#ifdef HAVE_FCHMOD
+ if (fchmod (fileno (fp), sb->st_mode & 0664) != 0) {
+ goto fail;
+ }
+#else /* !HAVE_FCHMOD */
+ if (chmod (name, sb->st_mode & 0664) != 0) {
+ goto fail;
+ }
+#endif /* !HAVE_FCHMOD */
+ return fp;
+
+ fail:
+ (void) fclose (fp);
+ /* fopen_set_perms is used for intermediate files */
+ (void) unlink (name);
+ return NULL;
+}
+
+
+static int create_backup (const char *backup, FILE * fp)
+{
+ struct stat sb;
+ struct utimbuf ub;
+ FILE *bkfp;
+ int c;
+
+ if (fstat (fileno (fp), &sb) != 0) {
+ return -1;
+ }
+
+ bkfp = fopen_set_perms (backup, "w", &sb);
+ if (NULL == bkfp) {
+ return -1;
+ }
+
+ /* TODO: faster copy, not one-char-at-a-time. --marekm */
+ c = 0;
+ if (fseek (fp, 0, SEEK_SET) == 0) {
+ while ((c = getc (fp)) != EOF) {
+ if (putc (c, bkfp) == EOF) {
+ break;
+ }
+ }
+ }
+ if ((c != EOF) || (ferror (fp) != 0) || (fflush (bkfp) != 0)) {
+ (void) fclose (bkfp);
+ /* FIXME: unlink the backup file? */
+ return -1;
+ }
+ if ( (fsync (fileno (bkfp)) != 0)
+ || (fclose (bkfp) != 0)) {
+ /* FIXME: unlink the backup file? */
+ return -1;
+ }
+
+ ub.actime = sb.st_atime;
+ ub.modtime = sb.st_mtime;
+ (void) utime (backup, &ub);
+ return 0;
+}
+
+
+static void free_linked_list (struct commonio_db *db)
+{
+ struct commonio_entry *p;
+
+ while (NULL != db->head) {
+ p = db->head;
+ db->head = p->next;
+
+ if (NULL != p->line) {
+ free (p->line);
+ }
+
+ if (NULL != p->eptr) {
+ db->ops->free (p->eptr);
+ }
+
+ free (p);
+ }
+ db->tail = NULL;
+}
+
+
+int commonio_setname (struct commonio_db *db, const char *name)
+{
+ snprintf (db->filename, sizeof (db->filename), "%s", name);
+ db->setname = true;
+ return 1;
+}
+
+
+bool commonio_present (const struct commonio_db *db)
+{
+ return (access (db->filename, F_OK) == 0);
+}
+
+
+int commonio_lock_nowait (struct commonio_db *db, bool log)
+{
+ char* file = NULL;
+ char* lock = NULL;
+ size_t lock_file_len;
+ size_t file_len;
+ int err = 0;
+
+ if (db->locked) {
+ return 1;
+ }
+ 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, lock_file_len, "%s.lock", db->filename);
+ if (do_lock_file (file, lock, log) != 0) {
+ db->locked = true;
+ lock_count++;
+ err = 1;
+ }
+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
+ * lockpw.c calls us and would cause infinite recursion!
+ * It is also not used with the prefix option.
+ */
+ 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 */
+ }
+ }
+
+ if (commonio_lock_nowait (db, true) != 0) {
+ return 1; /* success */
+ }
+
+ ulckpwdf ();
+ return 0; /* failure */
+ }
+#endif /* !HAVE_LCKPWDF */
+
+ /*
+ * lckpwdf() not used - do it the old way.
+ */
+#ifndef LOCK_TRIES
+#define LOCK_TRIES 15
+#endif
+
+#ifndef LOCK_SLEEP
+#define LOCK_SLEEP 1
+#endif
+ for (i = 0; i < LOCK_TRIES; i++) {
+ if (i > 0) {
+ sleep (LOCK_SLEEP); /* delay between retries */
+ }
+ if (commonio_lock_nowait (db, i==LOCK_TRIES-1) != 0) {
+ return 1; /* success */
+ }
+ /* no unnecessary retries on "permission denied" errors */
+ if (geteuid () != 0) {
+ (void) fprintf (stderr, "%s: Permission denied.\n",
+ Prog);
+ return 0;
+ }
+ }
+ return 0; /* failure */
+}
+
+static void dec_lock_count (void)
+{
+ if (lock_count > 0) {
+ lock_count--;
+ if (lock_count == 0) {
+ /* Tell nscd when lock count goes to zero,
+ if any of the files were changed. */
+ 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
+ ulckpwdf ();
+#endif /* HAVE_LCKPWDF */
+ }
+ }
+}
+
+
+int commonio_unlock (struct commonio_db *db)
+{
+ char lock[1024];
+
+ if (db->isopen) {
+ db->readonly = true;
+ if (commonio_close (db) == 0) {
+ if (db->locked) {
+ dec_lock_count ();
+ }
+ return 0;
+ }
+ }
+ if (db->locked) {
+ /*
+ * Unlock in reverse order: remove the lock file,
+ * then call ulckpwdf() (if used) on last unlock.
+ */
+ db->locked = false;
+ snprintf (lock, sizeof lock, "%s.lock", db->filename);
+ unlink (lock);
+ dec_lock_count ();
+ return 1;
+ }
+ return 0;
+}
+
+
+/*
+ * Add an entry at the end.
+ *
+ * defines p->next, p->prev
+ * (unfortunately, owned special are not supported)
+ */
+static void add_one_entry (struct commonio_db *db,
+ /*@owned@*/struct commonio_entry *p)
+{
+ /*@-mustfreeonly@*/
+ p->next = NULL;
+ p->prev = db->tail;
+ /*@=mustfreeonly@*/
+ if (NULL == db->head) {
+ db->head = p;
+ }
+ if (NULL != db->tail) {
+ db->tail->next = p;
+ }
+ db->tail = p;
+}
+
+
+static bool name_is_nis (const char *name)
+{
+ return (('+' == name[0]) || ('-' == name[0]));
+}
+
+
+/*
+ * New entries are inserted before the first NIS entry. Order is preserved
+ * when db is written out.
+ */
+#ifndef KEEP_NIS_AT_END
+#define KEEP_NIS_AT_END 1
+#endif
+
+#if KEEP_NIS_AT_END
+static void add_one_entry_nis (struct commonio_db *db,
+ /*@owned@*/struct commonio_entry *newp);
+
+/*
+ * Insert an entry between the regular entries, and the NIS entries.
+ *
+ * defines newp->next, newp->prev
+ * (unfortunately, owned special are not supported)
+ */
+static void add_one_entry_nis (struct commonio_db *db,
+ /*@owned@*/struct commonio_entry *newp)
+{
+ struct commonio_entry *p;
+
+ for (p = db->head; NULL != p; p = p->next) {
+ if (name_is_nis (p->eptr ? db->ops->getname (p->eptr)
+ : p->line)) {
+ /*@-mustfreeonly@*/
+ newp->next = p;
+ newp->prev = p->prev;
+ /*@=mustfreeonly@*/
+ if (NULL != p->prev) {
+ p->prev->next = newp;
+ } else {
+ db->head = newp;
+ }
+ p->prev = newp;
+ return;
+ }
+ }
+ add_one_entry (db, newp);
+}
+#endif /* KEEP_NIS_AT_END */
+
+/* Initial buffer size, as well as increment if not sufficient
+ (for reading very long lines in group files). */
+#define BUFLEN 4096
+
+int commonio_open (struct commonio_db *db, int mode)
+{
+ char *buf;
+ char *cp;
+ char *line;
+ struct commonio_entry *p;
+ void *eptr = NULL;
+ int flags = mode;
+ size_t buflen;
+ int fd;
+ int saved_errno;
+
+ mode &= ~O_CREAT;
+
+ if ( db->isopen
+ || ( (O_RDONLY != mode)
+ && (O_RDWR != mode))) {
+ errno = EINVAL;
+ return 0;
+ }
+ db->readonly = (mode == O_RDONLY);
+ if (!db->readonly && !db->locked) {
+ errno = EACCES;
+ return 0;
+ }
+
+ db->head = NULL;
+ db->tail = NULL;
+ db->cursor = NULL;
+ db->changed = false;
+
+ fd = open (db->filename,
+ (db->readonly ? O_RDONLY : O_RDWR)
+ | O_NOCTTY | O_NONBLOCK | O_NOFOLLOW);
+ saved_errno = errno;
+ db->fp = NULL;
+ if (fd >= 0) {
+#ifdef WITH_TCB
+ if (tcb_is_suspect (fd) != 0) {
+ (void) close (fd);
+ errno = EINVAL;
+ return 0;
+ }
+#endif /* WITH_TCB */
+ db->fp = fdopen (fd, db->readonly ? "r" : "r+");
+ saved_errno = errno;
+ if (NULL == db->fp) {
+ (void) close (fd);
+ }
+ }
+ errno = saved_errno;
+
+ /*
+ * If O_CREAT was specified and the file didn't exist, it will be
+ * created by commonio_close(). We have no entries to read yet. --marekm
+ */
+ if (NULL == db->fp) {
+ if (((flags & O_CREAT) != 0) && (ENOENT == errno)) {
+ db->isopen = true;
+ return 1;
+ }
+ return 0;
+ }
+
+ /* Do not inherit fd in spawned processes (e.g. nscd) */
+ fcntl (fileno (db->fp), F_SETFD, FD_CLOEXEC);
+
+ buflen = BUFLEN;
+ buf = (char *) malloc (buflen);
+ if (NULL == buf) {
+ goto cleanup_ENOMEM;
+ }
+
+ while (db->ops->fgets (buf, (int) buflen, db->fp) == buf) {
+ while ( ((cp = strrchr (buf, '\n')) == NULL)
+ && (feof (db->fp) == 0)) {
+ size_t len;
+
+ buflen += BUFLEN;
+ cp = (char *) realloc (buf, buflen);
+ if (NULL == cp) {
+ goto cleanup_buf;
+ }
+ buf = cp;
+ len = strlen (buf);
+ if (db->ops->fgets (buf + len,
+ (int) (buflen - len),
+ db->fp) == NULL) {
+ goto cleanup_buf;
+ }
+ }
+ cp = strrchr (buf, '\n');
+ if (NULL != cp) {
+ *cp = '\0';
+ }
+
+ line = strdup (buf);
+ if (NULL == line) {
+ goto cleanup_buf;
+ }
+
+ if (name_is_nis (line)) {
+ eptr = NULL;
+ } else {
+ eptr = db->ops->parse (line);
+ if (NULL != eptr) {
+ eptr = db->ops->dup (eptr);
+ if (NULL == eptr) {
+ goto cleanup_line;
+ }
+ }
+ }
+
+ p = (struct commonio_entry *) malloc (sizeof *p);
+ if (NULL == p) {
+ goto cleanup_entry;
+ }
+
+ p->eptr = eptr;
+ p->line = line;
+ p->changed = false;
+
+ add_one_entry (db, p);
+ }
+
+ free (buf);
+
+ if (ferror (db->fp) != 0) {
+ goto cleanup_errno;
+ }
+
+ if ((NULL != db->ops->open_hook) && (db->ops->open_hook () == 0)) {
+ goto cleanup_errno;
+ }
+
+ db->isopen = true;
+ return 1;
+
+ cleanup_entry:
+ if (NULL != eptr) {
+ db->ops->free (eptr);
+ }
+ cleanup_line:
+ free (line);
+ cleanup_buf:
+ free (buf);
+ cleanup_ENOMEM:
+ errno = ENOMEM;
+ cleanup_errno:
+ saved_errno = errno;
+ free_linked_list (db);
+ fclose (db->fp);
+ db->fp = NULL;
+ errno = saved_errno;
+ return 0;
+}
+
+/*
+ * Sort given db according to cmp function (usually compares uids)
+ */
+int
+commonio_sort (struct commonio_db *db, int (*cmp) (const void *, const void *))
+{
+ struct commonio_entry **entries, *ptr;
+ size_t n = 0, i;
+#if KEEP_NIS_AT_END
+ struct commonio_entry *nis = NULL;
+#endif
+
+ for (ptr = db->head;
+ (NULL != ptr)
+#if KEEP_NIS_AT_END
+ && ((NULL == ptr->line)
+ || (('+' != ptr->line[0])
+ && ('-' != ptr->line[0])))
+#endif
+ ;
+ ptr = ptr->next) {
+ n++;
+ }
+#if KEEP_NIS_AT_END
+ if (NULL != ptr) {
+ nis = ptr;
+ }
+#endif
+
+ if (n <= 1) {
+ return 0;
+ }
+
+ entries = malloc (n * sizeof (struct commonio_entry *));
+ if (entries == NULL) {
+ return -1;
+ }
+
+ n = 0;
+ for (ptr = db->head;
+#if KEEP_NIS_AT_END
+ nis != ptr;
+#else
+ NULL != ptr;
+#endif
+/*@ -nullderef @*/
+ ptr = ptr->next
+/*@ +nullderef @*/
+ ) {
+ entries[n] = ptr;
+ n++;
+ }
+ qsort (entries, n, sizeof (struct commonio_entry *), cmp);
+
+ /* Take care of the head and tail separately */
+ db->head = entries[0];
+ n--;
+#if KEEP_NIS_AT_END
+ if (NULL == nis)
+#endif
+ {
+ db->tail = entries[n];
+ }
+ db->head->prev = NULL;
+ db->head->next = entries[1];
+ entries[n]->prev = entries[n - 1];
+#if KEEP_NIS_AT_END
+ entries[n]->next = nis;
+#else
+ entries[n]->next = NULL;
+#endif
+
+ /* Now other elements have prev and next entries */
+ for (i = 1; i < n; i++) {
+ entries[i]->prev = entries[i - 1];
+ entries[i]->next = entries[i + 1];
+ }
+
+ free (entries);
+ db->changed = true;
+
+ return 0;
+}
+
+/*
+ * Sort entries in db according to order in another.
+ */
+int commonio_sort_wrt (struct commonio_db *shadow,
+ const struct commonio_db *passwd)
+{
+ struct commonio_entry *head = NULL, *pw_ptr, *spw_ptr;
+ const char *name;
+
+ if ((NULL == shadow) || (NULL == shadow->head)) {
+ return 0;
+ }
+
+ for (pw_ptr = passwd->head; NULL != pw_ptr; pw_ptr = pw_ptr->next) {
+ if (NULL == pw_ptr->eptr) {
+ continue;
+ }
+ name = passwd->ops->getname (pw_ptr->eptr);
+ for (spw_ptr = shadow->head;
+ NULL != spw_ptr;
+ spw_ptr = spw_ptr->next) {
+ if (NULL == spw_ptr->eptr) {
+ continue;
+ }
+ if (strcmp (name, shadow->ops->getname (spw_ptr->eptr))
+ == 0) {
+ break;
+ }
+ }
+ if (NULL == spw_ptr) {
+ continue;
+ }
+ commonio_del_entry (shadow, spw_ptr);
+ spw_ptr->next = head;
+ head = spw_ptr;
+ }
+
+ for (spw_ptr = head; NULL != spw_ptr; spw_ptr = head) {
+ head = head->next;
+
+ if (NULL != shadow->head) {
+ shadow->head->prev = spw_ptr;
+ }
+ spw_ptr->next = shadow->head;
+ shadow->head = spw_ptr;
+ }
+
+ shadow->head->prev = NULL;
+ shadow->changed = true;
+
+ return 0;
+}
+
+/*
+ * write_all - Write the database to its file.
+ *
+ * It returns 0 if all the entries could be written correctly.
+ */
+static int write_all (const struct commonio_db *db)
+ /*@requires notnull db->fp@*/
+{
+ const struct commonio_entry *p;
+ void *eptr;
+
+ for (p = db->head; NULL != p; p = p->next) {
+ if (p->changed) {
+ eptr = p->eptr;
+ assert (NULL != eptr);
+ if (db->ops->put (eptr, db->fp) != 0) {
+ return -1;
+ }
+ } else if (NULL != p->line) {
+ if (db->ops->fputs (p->line, db->fp) == EOF) {
+ return -1;
+ }
+ if (putc ('\n', db->fp) == EOF) {
+ return -1;
+ }
+ }
+ }
+ return 0;
+}
+
+
+int commonio_close (struct commonio_db *db)
+{
+ char buf[1024];
+ int errors = 0;
+ struct stat sb;
+
+ if (!db->isopen) {
+ errno = EINVAL;
+ return 0;
+ }
+ db->isopen = false;
+
+ if (!db->changed || db->readonly) {
+ if (NULL != db->fp) {
+ (void) fclose (db->fp);
+ db->fp = NULL;
+ }
+ goto success;
+ }
+
+ if ((NULL != db->ops->close_hook) && (db->ops->close_hook () == 0)) {
+ goto fail;
+ }
+
+ memzero (&sb, sizeof sb);
+ if (NULL != db->fp) {
+ if (fstat (fileno (db->fp), &sb) != 0) {
+ (void) fclose (db->fp);
+ db->fp = NULL;
+ goto fail;
+ }
+
+ /*
+ * Create backup file.
+ */
+ snprintf (buf, sizeof buf, "%s-", db->filename);
+
+#ifdef WITH_SELINUX
+ if (set_selinux_file_context (buf) != 0) {
+ errors++;
+ }
+#endif
+ if (create_backup (buf, db->fp) != 0) {
+ errors++;
+ }
+
+ if (fclose (db->fp) != 0) {
+ errors++;
+ }
+
+#ifdef WITH_SELINUX
+ if (reset_selinux_file_context () != 0) {
+ errors++;
+ }
+#endif
+ if (errors != 0) {
+ db->fp = NULL;
+ goto fail;
+ }
+ } else {
+ /*
+ * Default permissions for new [g]shadow files.
+ */
+ sb.st_mode = db->st_mode;
+ sb.st_uid = db->st_uid;
+ sb.st_gid = db->st_gid;
+ }
+
+ snprintf (buf, sizeof buf, "%s+", db->filename);
+
+#ifdef WITH_SELINUX
+ if (set_selinux_file_context (buf) != 0) {
+ errors++;
+ }
+#endif
+
+ db->fp = fopen_set_perms (buf, "w", &sb);
+ if (NULL == db->fp) {
+ goto fail;
+ }
+
+ if (write_all (db) != 0) {
+ errors++;
+ }
+
+ if (fflush (db->fp) != 0) {
+ errors++;
+ }
+#ifdef HAVE_FSYNC
+ if (fsync (fileno (db->fp)) != 0) {
+ errors++;
+ }
+#else /* !HAVE_FSYNC */
+ sync ();
+#endif /* !HAVE_FSYNC */
+ if (fclose (db->fp) != 0) {
+ errors++;
+ }
+
+ db->fp = NULL;
+
+ if (errors != 0) {
+ unlink (buf);
+ goto fail;
+ }
+
+ if (lrename (buf, db->filename) != 0) {
+ goto fail;
+ }
+
+#ifdef WITH_SELINUX
+ if (reset_selinux_file_context () != 0) {
+ goto fail;
+ }
+#endif
+
+ nscd_need_reload = true;
+ goto success;
+ fail:
+ errors++;
+ success:
+
+ free_linked_list (db);
+ return errors == 0;
+}
+
+static /*@dependent@*/ /*@null@*/struct commonio_entry *next_entry_by_name (
+ struct commonio_db *db,
+ /*@null@*/struct commonio_entry *pos,
+ const char *name)
+{
+ struct commonio_entry *p;
+ void *ep;
+
+ if (NULL == pos) {
+ return NULL;
+ }
+
+ for (p = pos; NULL != p; p = p->next) {
+ ep = p->eptr;
+ if ( (NULL != ep)
+ && (strcmp (db->ops->getname (ep), name) == 0)) {
+ break;
+ }
+ }
+ return p;
+}
+
+static /*@dependent@*/ /*@null@*/struct commonio_entry *find_entry_by_name (
+ struct commonio_db *db,
+ const char *name)
+{
+ return next_entry_by_name (db, db->head, name);
+}
+
+
+int commonio_update (struct commonio_db *db, const void *eptr)
+{
+ struct commonio_entry *p;
+ void *nentry;
+
+ if (!db->isopen || db->readonly) {
+ errno = EINVAL;
+ return 0;
+ }
+ nentry = db->ops->dup (eptr);
+ if (NULL == nentry) {
+ errno = ENOMEM;
+ return 0;
+ }
+ p = find_entry_by_name (db, db->ops->getname (eptr));
+ if (NULL != p) {
+ if (next_entry_by_name (db, p->next, db->ops->getname (eptr)) != NULL) {
+ fprintf (stderr, _("Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"), db->ops->getname (eptr), db->filename);
+ db->ops->free (nentry);
+ return 0;
+ }
+ db->ops->free (p->eptr);
+ p->eptr = nentry;
+ p->changed = true;
+ db->cursor = p;
+
+ db->changed = true;
+ return 1;
+ }
+ /* not found, new entry */
+ p = (struct commonio_entry *) malloc (sizeof *p);
+ if (NULL == p) {
+ db->ops->free (nentry);
+ errno = ENOMEM;
+ return 0;
+ }
+
+ p->eptr = nentry;
+ p->line = NULL;
+ p->changed = true;
+
+#if KEEP_NIS_AT_END
+ add_one_entry_nis (db, p);
+#else /* !KEEP_NIS_AT_END */
+ add_one_entry (db, p);
+#endif /* !KEEP_NIS_AT_END */
+
+ db->changed = true;
+ return 1;
+}
+
+#ifdef ENABLE_SUBIDS
+int commonio_append (struct commonio_db *db, const void *eptr)
+{
+ struct commonio_entry *p;
+ void *nentry;
+
+ if (!db->isopen || db->readonly) {
+ errno = EINVAL;
+ return 0;
+ }
+ nentry = db->ops->dup (eptr);
+ if (NULL == nentry) {
+ errno = ENOMEM;
+ return 0;
+ }
+ /* new entry */
+ p = (struct commonio_entry *) malloc (sizeof *p);
+ if (NULL == p) {
+ db->ops->free (nentry);
+ errno = ENOMEM;
+ return 0;
+ }
+
+ p->eptr = nentry;
+ p->line = NULL;
+ p->changed = true;
+ add_one_entry (db, p);
+
+ db->changed = true;
+ return 1;
+}
+#endif /* ENABLE_SUBIDS */
+
+void commonio_del_entry (struct commonio_db *db, const struct commonio_entry *p)
+{
+ if (p == db->cursor) {
+ db->cursor = p->next;
+ }
+
+ if (NULL != p->prev) {
+ p->prev->next = p->next;
+ } else {
+ db->head = p->next;
+ }
+
+ if (NULL != p->next) {
+ p->next->prev = p->prev;
+ } else {
+ db->tail = p->prev;
+ }
+
+ db->changed = true;
+}
+
+/*
+ * commonio_remove - Remove the entry of the given name from the database.
+ */
+int commonio_remove (struct commonio_db *db, const char *name)
+{
+ struct commonio_entry *p;
+
+ if (!db->isopen || db->readonly) {
+ errno = EINVAL;
+ return 0;
+ }
+ p = find_entry_by_name (db, name);
+ if (NULL == p) {
+ errno = ENOENT;
+ return 0;
+ }
+ if (next_entry_by_name (db, p->next, name) != NULL) {
+ fprintf (stderr, _("Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"), name, db->filename);
+ return 0;
+ }
+
+ commonio_del_entry (db, p);
+
+ if (NULL != p->line) {
+ free (p->line);
+ }
+
+ if (NULL != p->eptr) {
+ db->ops->free (p->eptr);
+ }
+
+ return 1;
+}
+
+/*
+ * commonio_locate - Find the first entry with the specified name in
+ * the database.
+ *
+ * If found, it returns the entry and set the cursor of the database to
+ * that entry.
+ *
+ * Otherwise, it returns NULL.
+ */
+/*@observer@*/ /*@null@*/const void *commonio_locate (struct commonio_db *db, const char *name)
+{
+ struct commonio_entry *p;
+
+ if (!db->isopen) {
+ errno = EINVAL;
+ return NULL;
+ }
+ p = find_entry_by_name (db, name);
+ if (NULL == p) {
+ errno = ENOENT;
+ return NULL;
+ }
+ db->cursor = p;
+ return p->eptr;
+}
+
+/*
+ * commonio_rewind - Restore the database cursor to the first entry.
+ *
+ * It returns 0 on error, 1 on success.
+ */
+int commonio_rewind (struct commonio_db *db)
+{
+ if (!db->isopen) {
+ errno = EINVAL;
+ return 0;
+ }
+ db->cursor = NULL;
+ return 1;
+}
+
+/*
+ * commonio_next - Return the next entry of the specified database
+ *
+ * It returns the next entry, or NULL if no other entries could be found.
+ */
+/*@observer@*/ /*@null@*/const void *commonio_next (struct commonio_db *db)
+{
+ void *eptr;
+
+ if (!db->isopen) {
+ errno = EINVAL;
+ return 0;
+ }
+ if (NULL == db->cursor) {
+ db->cursor = db->head;
+ } else {
+ db->cursor = db->cursor->next;
+ }
+
+ while (NULL != db->cursor) {
+ eptr = db->cursor->eptr;
+ if (NULL != eptr) {
+ return eptr;
+ }
+
+ db->cursor = db->cursor->next;
+ }
+ return NULL;
+}
+
diff --git a/lib/commonio.h b/lib/commonio.h
new file mode 100644
index 0000000..64e8307
--- /dev/null
+++ b/lib/commonio.h
@@ -0,0 +1,171 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2010, 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.
+ */
+
+/* $Id$ */
+#ifndef COMMONIO_H
+#define COMMONIO_H
+
+#ifdef WITH_SELINUX
+#include <selinux/selinux.h>
+#endif
+
+#include "defines.h" /* bool */
+
+/*
+ * Linked list entry.
+ */
+struct commonio_entry {
+ /*@null@*/char *line;
+ /*@null@*/void *eptr; /* struct passwd, struct spwd, ... */
+ /*@dependent@*/ /*@null@*/struct commonio_entry *prev;
+ /*@owned@*/ /*@null@*/struct commonio_entry *next;
+ bool changed:1;
+};
+
+/*
+ * Operations depending on database type: passwd, group, shadow etc.
+ */
+struct commonio_ops {
+ /*
+ * Make a copy of the object (for example, struct passwd)
+ * and all strings pointed by it, in malloced memory.
+ */
+ /*@null@*/ /*@only@*/void *(*dup) (const void *);
+
+ /*
+ * free() the object including any strings pointed by it.
+ */
+ void (*free) (/*@out@*/ /*@only@*/void *);
+
+ /*
+ * Return the name of the object (for example, pw_name
+ * for struct passwd).
+ */
+ const char *(*getname) (const void *);
+
+ /*
+ * Parse a string, return object (in static area -
+ * should be copied using the dup operation above).
+ */
+ void *(*parse) (const char *);
+
+ /*
+ * Write the object to the file (this calls putpwent()
+ * for struct passwd, for example).
+ */
+ int (*put) (const void *, FILE *);
+
+ /*
+ * fgets and fputs (can be replaced by versions that
+ * understand line continuation conventions).
+ */
+ /*@null@*/char *(*fgets) (/*@returned@*/ /*@out@*/char *s, int n, FILE *stream);
+ int (*fputs) (const char *, FILE *);
+
+ /*
+ * open_hook and close_hook.
+ * If non NULL, these functions will be called after the database
+ * is open or before it is closed.
+ * They return 0 on failure and 1 on success.
+ */
+ /*@null@*/int (*open_hook) (void);
+ /*@null@*/int (*close_hook) (void);
+};
+
+/*
+ * Database structure.
+ */
+struct commonio_db {
+ /*
+ * Name of the data file.
+ */
+ char filename[1024];
+
+ /*
+ * Operations from above.
+ */
+ /*@observer@*/const struct commonio_ops *ops;
+
+ /*
+ * Currently open file stream.
+ */
+ /*@dependent@*/ /*@null@*/FILE *fp;
+
+#ifdef WITH_SELINUX
+ /*@null@*/security_context_t scontext;
+#endif
+ /*
+ * Default permissions and owner for newly created data file.
+ */
+ mode_t st_mode;
+ uid_t st_uid;
+ gid_t st_gid;
+ /*
+ * Head, tail, current position in linked list.
+ */
+ /*@owned@*/ /*@null@*/struct commonio_entry *head;
+ /*@dependent@*/ /*@null@*/struct commonio_entry *tail;
+ /*@dependent@*/ /*@null@*/struct commonio_entry *cursor;
+
+ /*
+ * Various flags.
+ */
+ bool changed:1;
+ bool isopen:1;
+ bool locked:1;
+ bool readonly:1;
+ bool setname:1;
+};
+
+extern int commonio_setname (struct commonio_db *, const char *);
+extern bool commonio_present (const struct commonio_db *db);
+extern int commonio_lock (struct commonio_db *);
+extern int commonio_lock_nowait (struct commonio_db *, bool log);
+extern int commonio_open (struct commonio_db *, int);
+extern /*@observer@*/ /*@null@*/const void *commonio_locate (struct commonio_db *, const char *);
+extern int commonio_update (struct commonio_db *, const void *);
+#ifdef ENABLE_SUBIDS
+extern int commonio_append (struct commonio_db *, const void *);
+#endif /* ENABLE_SUBIDS */
+extern int commonio_remove (struct commonio_db *, const char *);
+extern int commonio_rewind (struct commonio_db *);
+extern /*@observer@*/ /*@null@*/const void *commonio_next (struct commonio_db *);
+extern int commonio_close (struct commonio_db *);
+extern int commonio_unlock (struct commonio_db *);
+extern void commonio_del_entry (struct commonio_db *,
+ const struct commonio_entry *);
+extern int commonio_sort_wrt (struct commonio_db *shadow,
+ const struct commonio_db *passwd);
+extern int commonio_sort (struct commonio_db *db,
+ int (*cmp) (const void *, const void *));
+
+#endif
diff --git a/lib/defines.h b/lib/defines.h
new file mode 100644
index 0000000..2fb1b56
--- /dev/null
+++ b/lib/defines.h
@@ -0,0 +1,391 @@
+/* $Id$ */
+/* some useful defines */
+
+#ifndef _DEFINES_H_
+#define _DEFINES_H_
+
+#if HAVE_STDBOOL_H
+# include <stdbool.h>
+#else
+# if ! HAVE__BOOL
+# ifdef __cplusplus
+typedef bool _Bool;
+# else
+typedef unsigned char _Bool;
+# endif
+# endif
+# define bool _Bool
+# define false (0)
+# define true (1)
+# define __bool_true_false_are_defined 1
+#endif
+
+#define ISDIGIT_LOCALE(c) (IN_CTYPE_DOMAIN (c) && isdigit (c))
+
+/* Take care of NLS matters. */
+#ifdef S_SPLINT_S
+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);
+# define _(Text) Text
+# define ngettext(Msgid1, Msgid2, N) \
+ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+#else
+#ifdef HAVE_LOCALE_H
+# include <locale.h>
+#else
+# undef setlocale
+# define setlocale(category, locale) (NULL)
+# ifndef LC_ALL
+# define LC_ALL 6
+# endif
+#endif
+
+#define gettext_noop(String) (String)
+/* #define gettext_def(String) "#define String" */
+
+#ifdef ENABLE_NLS
+# include <libintl.h>
+# define _(Text) gettext (Text)
+#else
+# undef bindtextdomain
+# define bindtextdomain(Domain, Directory) (NULL)
+# undef textdomain
+# define textdomain(Domain) (NULL)
+# define _(Text) Text
+# define ngettext(Msgid1, Msgid2, N) \
+ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+#endif
+#endif
+
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <string.h>
+#else /* not STDC_HEADERS */
+# ifndef HAVE_STRCHR
+# define strchr index
+# define strrchr rindex
+# endif
+char *strchr (), *strrchr (), *strtok ();
+
+# ifndef HAVE_MEMCPY
+# define memcpy(d, s, n) bcopy((s), (d), (n))
+# endif
+#endif /* not STDC_HEADERS */
+
+#if HAVE_ERRNO_H
+# include <errno.h>
+#endif
+
+#include <sys/stat.h>
+#include <sys/types.h>
+#if HAVE_SYS_WAIT_H
+# include <sys/wait.h>
+#endif
+#ifndef WEXITSTATUS
+# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
+#endif
+#ifndef WIFEXITED
+# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
+#endif
+
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else /* not TIME_WITH_SYS_TIME */
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif /* not TIME_WITH_SYS_TIME */
+
+#ifdef HAVE_MEMSET
+# define memzero(ptr, size) memset((void *)(ptr), 0, (size))
+#else
+# define memzero(ptr, size) bzero((char *)(ptr), (size))
+#endif
+#define strzero(s) memzero(s, strlen(s)) /* warning: evaluates twice */
+
+#ifdef HAVE_DIRENT_H /* DIR_SYSV */
+# include <dirent.h>
+# define DIRECT dirent
+#else
+# ifdef HAVE_SYS_NDIR_H /* DIR_XENIX */
+# include <sys/ndir.h>
+# endif
+# ifdef HAVE_SYS_DIR_H /* DIR_??? */
+# include <sys/dir.h>
+# endif
+# ifdef HAVE_NDIR_H /* DIR_BSD */
+# include <ndir.h>
+# endif
+# define DIRECT direct
+#endif
+
+/*
+ * Possible cases:
+ * - /usr/include/shadow.h exists and includes the shadow group stuff.
+ * - /usr/include/shadow.h exists, but we use our own gshadow.h.
+ */
+#include <shadow.h>
+#if defined(SHADOWGRP) && !defined(GSHADOW)
+#include "gshadow_.h"
+#endif
+
+#include <limits.h>
+
+#ifndef NGROUPS_MAX
+#ifdef NGROUPS
+#define NGROUPS_MAX NGROUPS
+#else
+#define NGROUPS_MAX 64
+#endif
+#endif
+
+#ifdef USE_SYSLOG
+#include <syslog.h>
+
+#ifndef LOG_WARN
+#define LOG_WARN LOG_WARNING
+#endif
+
+/* LOG_NOWAIT is deprecated */
+#ifndef LOG_NOWAIT
+#define LOG_NOWAIT 0
+#endif
+
+/* LOG_AUTH is deprecated, use LOG_AUTHPRIV instead */
+#ifndef LOG_AUTHPRIV
+#define LOG_AUTHPRIV LOG_AUTH
+#endif
+
+/* cleaner than lots of #ifdefs everywhere - use this as follows:
+ SYSLOG((LOG_CRIT, "user %s cracked root", user)); */
+#ifdef ENABLE_NLS
+/* Temporarily set LC_TIME to "C" to avoid strange dates in syslog.
+ This is a workaround for a more general syslog(d) design problem -
+ syslogd should log the current system time for each event, and not
+ trust the formatted time received from the unix domain (or worse,
+ UDP) socket. -MM */
+/* Avoid translated PAM error messages: Set LC_ALL to "C".
+ * --Nekral */
+#define SYSLOG(x) \
+ do { \
+ char *old_locale = setlocale (LC_ALL, NULL); \
+ char *saved_locale = NULL; \
+ if (NULL != old_locale) { \
+ saved_locale = strdup (old_locale); \
+ } \
+ if (NULL != saved_locale) { \
+ (void) setlocale (LC_ALL, "C"); \
+ } \
+ syslog x ; \
+ if (NULL != saved_locale) { \
+ (void) setlocale (LC_ALL, saved_locale); \
+ free (saved_locale); \
+ } \
+ } while (false)
+#else /* !ENABLE_NLS */
+#define SYSLOG(x) syslog x
+#endif /* !ENABLE_NLS */
+
+#else /* !USE_SYSLOG */
+
+#define SYSLOG(x) /* empty */
+#define openlog(a,b,c) /* empty */
+#define closelog() /* empty */
+
+#endif /* !USE_SYSLOG */
+
+/* The default syslog settings can now be changed here,
+ in just one place. */
+
+#ifndef SYSLOG_OPTIONS
+/* #define SYSLOG_OPTIONS (LOG_PID | LOG_CONS | LOG_NOWAIT) */
+#define SYSLOG_OPTIONS (LOG_PID)
+#endif
+
+#ifndef SYSLOG_FACILITY
+#define SYSLOG_FACILITY LOG_AUTHPRIV
+#endif
+
+#define OPENLOG(progname) openlog(progname, SYSLOG_OPTIONS, SYSLOG_FACILITY)
+
+#ifndef F_OK
+# define F_OK 0
+# define X_OK 1
+# define W_OK 2
+# define R_OK 4
+#endif
+
+#ifndef SEEK_SET
+# define SEEK_SET 0
+# define SEEK_CUR 1
+# define SEEK_END 2
+#endif
+
+#ifdef STAT_MACROS_BROKEN
+# define S_ISDIR(x) ((x) & S_IFMT) == S_IFDIR)
+# define S_ISREG(x) ((x) & S_IFMT) == S_IFREG)
+# ifdef S_IFLNK
+# define S_ISLNK(x) ((x) & S_IFMT) == S_IFLNK)
+# endif
+#endif
+
+#ifndef S_ISLNK
+#define S_ISLNK(x) (0)
+#endif
+
+#if HAVE_LCHOWN
+#define LCHOWN lchown
+#else
+#define LCHOWN chown
+#endif
+
+#if HAVE_LSTAT
+#define LSTAT lstat
+#else
+#define LSTAT stat
+#endif
+
+#if HAVE_TERMIOS_H
+# include <termios.h>
+# define STTY(fd, termio) tcsetattr(fd, TCSANOW, termio)
+# define GTTY(fd, termio) tcgetattr(fd, termio)
+# define TERMIO struct termios
+# define USE_TERMIOS
+#else /* assumed HAVE_TERMIO_H */
+# include <sys/ioctl.h>
+# include <termio.h>
+# define STTY(fd, termio) ioctl(fd, TCSETA, termio)
+# define GTTY(fd, termio) ioctl(fd, TCGETA, termio)
+# define TEMRIO struct termio
+# define USE_TERMIO
+#endif
+
+/*
+ * Password aging constants
+ *
+ * DAY - seconds / day
+ * WEEK - seconds / week
+ * SCALE - seconds / aging unit
+ */
+
+/* Solaris defines this in shadow.h */
+#ifndef DAY
+#define DAY (24L*3600L)
+#endif
+
+#define WEEK (7*DAY)
+
+#ifdef ITI_AGING
+#define SCALE 1
+#else
+#define SCALE DAY
+#endif
+
+/* Copy string pointed by B to array A with size checking. It was originally
+ in lmain.c but is _very_ useful elsewhere. Some setuid root programs with
+ very sloppy coding used to assume that BUFSIZ will always be enough... */
+
+ /* danger - side effects */
+#define STRFCPY(A,B) \
+ (strncpy((A), (B), sizeof(A) - 1), (A)[sizeof(A) - 1] = '\0')
+
+#ifndef PASSWD_FILE
+#define PASSWD_FILE "/etc/passwd"
+#endif
+
+#ifndef GROUP_FILE
+#define GROUP_FILE "/etc/group"
+#endif
+
+#ifndef SHADOW_FILE
+#define SHADOW_FILE "/etc/shadow"
+#endif
+
+#ifdef SHADOWGRP
+#ifndef SGROUP_FILE
+#define SGROUP_FILE "/etc/gshadow"
+#endif
+#endif
+
+#ifndef NULL
+#define NULL ((void *) 0)
+#endif
+
+#ifdef sun /* hacks for compiling on SunOS */
+# ifndef SOLARIS
+extern int fputs ();
+extern char *strdup ();
+extern char *strerror ();
+# endif
+#endif
+
+/*
+ * string to use for the pw_passwd field in /etc/passwd when using
+ * shadow passwords - most systems use "x" but there are a few
+ * exceptions, so it can be changed here if necessary. --marekm
+ */
+#ifndef SHADOW_PASSWD_STRING
+#define SHADOW_PASSWD_STRING "x"
+#endif
+
+#define SHADOW_SP_FLAG_UNSET ((unsigned long int)-1)
+
+#ifdef WITH_AUDIT
+#ifdef __u8 /* in case we use pam < 0.80 */
+#undef __u8
+#endif
+#ifdef __u32
+#undef __u32
+#endif
+
+#include <libaudit.h>
+#endif
+
+/* To be used for verified unused parameters */
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
+# define unused __attribute__((unused))
+#else
+# define unused
+#endif
+
+/* ! Arguments evaluated twice ! */
+#ifndef MIN
+#define MIN(a,b) (((a) < (b)) ? (a) : (b))
+#endif
+#ifndef MAX
+#define MAX(x,y) (((x) > (y)) ? (x) : (y))
+#endif
+
+/* Maximum length of usernames */
+#ifdef HAVE_UTMPX_H
+# include <utmpx.h>
+# define USER_NAME_MAX_LENGTH (sizeof (((struct utmpx *)NULL)->ut_user))
+#else
+# include <utmp.h>
+# ifdef HAVE_STRUCT_UTMP_UT_USER
+# define USER_NAME_MAX_LENGTH (sizeof (((struct utmp *)NULL)->ut_user))
+# else
+# ifdef HAVE_STRUCT_UTMP_UT_NAME
+# define USER_NAME_MAX_LENGTH (sizeof (((struct utmp *)NULL)->ut_name))
+# else
+# define USER_NAME_MAX_LENGTH 32
+# endif
+# endif
+#endif
+
+#ifdef HAVE_SECURE_GETENV
+# define shadow_getenv(name) secure_getenv(name)
+# else
+# define shadow_getenv(name) getenv(name)
+#endif
+
+#endif /* _DEFINES_H_ */
diff --git a/lib/encrypt.c b/lib/encrypt.c
new file mode 100644
index 0000000..4247f24
--- /dev/null
+++ b/lib/encrypt.c
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 1990 - 1993, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2005 , Tomasz Kłoczko
+ * Copyright (c) 2007 - 2010, 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 <unistd.h>
+#include <stdio.h>
+
+#include "prototypes.h"
+#include "defines.h"
+
+/*@exposed@*//*@null@*/char *pw_encrypt (const char *clear, const char *salt)
+{
+ static char cipher[128];
+ char *cp;
+
+ cp = crypt (clear, salt);
+ if (NULL == cp) {
+ /*
+ * Single Unix Spec: crypt() may return a null pointer,
+ * and set errno to indicate an error. In this case return
+ * the NULL so the caller can handle appropriately.
+ */
+ return NULL;
+ }
+
+ /* Some crypt() do not return NULL if the algorithm is not
+ * supported, and return a DES encrypted password. */
+ if ((NULL != salt) && (salt[0] == '$') && (strlen (cp) <= 13))
+ {
+ /*@observer@*/const char *method;
+ switch (salt[1])
+ {
+ case '1':
+ method = "MD5";
+ break;
+ case '2':
+ method = "BCRYPT";
+ break;
+ case '5':
+ method = "SHA256";
+ break;
+ case '6':
+ method = "SHA512";
+ break;
+ default:
+ {
+ static char nummethod[4] = "$x$";
+ nummethod[1] = salt[1];
+ method = &nummethod[0];
+ }
+ }
+ (void) fprintf (stderr,
+ _("crypt method not supported by libcrypt? (%s)\n"),
+ method);
+ exit (EXIT_FAILURE);
+ }
+
+ if (strlen (cp) != 13) {
+ return cp; /* nonstandard crypt() in libc, better bail out */
+ }
+
+ strcpy (cipher, cp);
+
+ return cipher;
+}
+
diff --git a/lib/exitcodes.h b/lib/exitcodes.h
new file mode 100644
index 0000000..96b2340
--- /dev/null
+++ b/lib/exitcodes.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2005 - 2006, Tomasz Kłoczko
+ * 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.
+ */
+
+/* $Id$ */
+
+/*
+ * Exit codes used by shadow programs
+ */
+#define E_SUCCESS EXIT_SUCCESS /* success */
+/*
+ * FIXME: other values should differ from EXIT_FAILURE (and EXIT_SUCCESS).
+ *
+ * FIXME: reserve EXIT_FAILURE for internal failures.
+ */
+#define E_NOPERM 1 /* permission denied */
+#define E_USAGE 2 /* invalid command syntax */
+#define E_BAD_ARG 3 /* invalid argument to option */
+#define E_PASSWD_NOTFOUND 14 /* not found password file */
+#define E_SHADOW_NOTFOUND 15 /* not found shadow password file */
+#define E_GROUP_NOTFOUND 16 /* not found group file */
+#define E_GSHADOW_NOTFOUND 17 /* not found shadow group file */
+#define E_CMD_NOEXEC 126 /* can't run command/shell */
+#define E_CMD_NOTFOUND 127 /* can't find command/shell to run */
diff --git a/lib/faillog.h b/lib/faillog.h
new file mode 100644
index 0000000..a0a95b3
--- /dev/null
+++ b/lib/faillog.h
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2005 , Tomasz Kłoczko
+ * 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.
+ */
+
+/*
+ * faillog.h - login failure logging file format
+ *
+ * $Id$
+ *
+ * The login failure file is maintained by login(1) and faillog(8)
+ * Each record in the file represents a separate UID and the file
+ * is indexed in that fashion.
+ */
+
+#ifndef _FAILLOG_H
+#define _FAILLOG_H
+
+struct faillog {
+ short fail_cnt; /* failures since last success */
+ short fail_max; /* failures before turning account off */
+ char fail_line[12]; /* last failure occured here */
+ time_t fail_time; /* last failure occured then */
+ /*
+ * If nonzero, the account will be re-enabled if there are no
+ * failures for fail_locktime seconds since last failure.
+ */
+ long fail_locktime;
+};
+
+#endif
diff --git a/lib/fields.c b/lib/fields.c
new file mode 100644
index 0000000..649fae1
--- /dev/null
+++ b/lib/fields.c
@@ -0,0 +1,130 @@
+/*
+ * Copyright (c) 1990 , Julianne Frances Haugh
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2007 , 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 <ctype.h>
+#include <string.h>
+#include <stdio.h>
+#include "prototypes.h"
+
+/*
+ * valid_field - insure that a field contains all legal characters
+ *
+ * The supplied field is scanned for non-printable and other illegal
+ * characters.
+ * + -1 is returned if an illegal character is present.
+ * + 1 is returned if no illegal characters are present, but the field
+ * contains a non-printable character.
+ * + 0 is returned otherwise.
+ */
+int valid_field (const char *field, const char *illegal)
+{
+ const char *cp;
+ int err = 0;
+
+ if (NULL == field) {
+ return -1;
+ }
+
+ /* For each character of field, search if it appears in the list
+ * of illegal characters. */
+ for (cp = field; '\0' != *cp; cp++) {
+ if (strchr (illegal, *cp) != NULL) {
+ err = -1;
+ break;
+ }
+ }
+
+ if (0 == err) {
+ /* Search if there are some non-printable characters */
+ for (cp = field; '\0' != *cp; cp++) {
+ if (!isprint (*cp)) {
+ err = 1;
+ break;
+ }
+ }
+ }
+
+ return err;
+}
+
+/*
+ * change_field - change a single field if a new value is given.
+ *
+ * prompt the user with the name of the field being changed and the
+ * current value.
+ */
+void change_field (char *buf, size_t maxsize, const char *prompt)
+{
+ char newf[200];
+ char *cp;
+
+ if (maxsize > sizeof (newf)) {
+ maxsize = sizeof (newf);
+ }
+
+ printf ("\t%s [%s]: ", prompt, buf);
+ (void) fflush (stdout);
+ if (fgets (newf, (int) maxsize, stdin) != newf) {
+ return;
+ }
+
+ cp = strchr (newf, '\n');
+ if (NULL == cp) {
+ return;
+ }
+ *cp = '\0';
+
+ if ('\0' != newf[0]) {
+ /*
+ * Remove leading and trailing whitespace. This also
+ * makes it possible to change the field to empty, by
+ * entering a space. --marekm
+ */
+
+ while (--cp >= newf && isspace (*cp));
+ cp++;
+ *cp = '\0';
+
+ cp = newf;
+ while (('\0' != *cp) && isspace (*cp)) {
+ cp++;
+ }
+
+ strncpy (buf, cp, maxsize - 1);
+ buf[maxsize - 1] = '\0';
+ }
+}
+
diff --git a/lib/fputsx.c b/lib/fputsx.c
new file mode 100644
index 0000000..c42b40b
--- /dev/null
+++ b/lib/fputsx.c
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1999, Marek Michałkiewicz
+ * Copyright (c) 2005 , Tomasz Kłoczko
+ * Copyright (c) 2008 , 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>
+
+#include <stdio.h>
+#include "defines.h"
+#include "prototypes.h"
+
+#ident "$Id$"
+
+
+/*@null@*/char *fgetsx (/*@returned@*/ /*@out@*/char *buf, int cnt, FILE * f)
+{
+ char *cp = buf;
+ char *ep;
+
+ while (cnt > 0) {
+ if (fgets (cp, cnt, f) != cp) {
+ if (cp == buf) {
+ return 0;
+ } else {
+ break;
+ }
+ }
+ ep = strrchr (cp, '\\');
+ if ((NULL != ep) && (*(ep + 1) == '\n')) {
+ cnt -= ep - cp;
+ if (cnt > 0) {
+ cp = ep;
+ *cp = '\0';
+ }
+ } else {
+ break;
+ }
+ }
+ return buf;
+}
+
+int fputsx (const char *s, FILE * stream)
+{
+ int i;
+
+ for (i = 0; '\0' != *s; i++, s++) {
+ if (putc (*s, stream) == EOF) {
+ return EOF;
+ }
+
+#if 0 /* The standard getgr*() can't handle that. --marekm */
+ if (i > (BUFSIZ / 2)) {
+ if (putc ('\\', stream) == EOF ||
+ putc ('\n', stream) == EOF)
+ return EOF;
+
+ i = 0;
+ }
+#endif
+ }
+ return 0;
+}
+
diff --git a/lib/get_gid.c b/lib/get_gid.c
new file mode 100644
index 0000000..6fb31ff
--- /dev/null
+++ b/lib/get_gid.c
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 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.
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include "prototypes.h"
+#include "defines.h"
+
+int get_gid (const char *gidstr, gid_t *gid)
+{
+ long long int val;
+ char *endptr;
+
+ errno = 0;
+ val = strtoll (gidstr, &endptr, 10);
+ if ( ('\0' == *gidstr)
+ || ('\0' != *endptr)
+ || (ERANGE == errno)
+ || (/*@+longintegral@*/val != (gid_t)val)/*@=longintegral@*/) {
+ return 0;
+ }
+
+ *gid = (gid_t)val;
+ return 1;
+}
+
diff --git a/lib/get_pid.c b/lib/get_pid.c
new file mode 100644
index 0000000..e2b47ce
--- /dev/null
+++ b/lib/get_pid.c
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 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.
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include "prototypes.h"
+#include "defines.h"
+
+int get_pid (const char *pidstr, pid_t *pid)
+{
+ long long int val;
+ char *endptr;
+
+ errno = 0;
+ val = strtoll (pidstr, &endptr, 10);
+ if ( ('\0' == *pidstr)
+ || ('\0' != *endptr)
+ || (ERANGE == errno)
+ || (/*@+longintegral@*/val != (pid_t)val)/*@=longintegral@*/) {
+ return 0;
+ }
+
+ *pid = (pid_t)val;
+ return 1;
+}
+
diff --git a/lib/get_uid.c b/lib/get_uid.c
new file mode 100644
index 0000000..ac0f2df
--- /dev/null
+++ b/lib/get_uid.c
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 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.
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include "prototypes.h"
+#include "defines.h"
+
+int get_uid (const char *uidstr, uid_t *uid)
+{
+ long long int val;
+ char *endptr;
+
+ errno = 0;
+ val = strtoll (uidstr, &endptr, 10);
+ if ( ('\0' == *uidstr)
+ || ('\0' != *endptr)
+ || (ERANGE == errno)
+ || (/*@+longintegral@*/val != (uid_t)val)/*@=longintegral@*/) {
+ return 0;
+ }
+
+ *uid = (uid_t)val;
+ return 1;
+}
+
diff --git a/lib/getdef.c b/lib/getdef.c
new file mode 100644
index 0000000..00f6abf
--- /dev/null
+++ b/lib/getdef.c
@@ -0,0 +1,632 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2002 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, 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 "prototypes.h"
+#include "defines.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <errno.h>
+#ifdef USE_ECONF
+#include <libeconf.h>
+#endif
+#include "getdef.h"
+/*
+ * A configuration item definition.
+ */
+struct itemdef {
+ /*@null@*/const char *name; /* name of the item */
+ /*@null@*/char *value; /* value given, or NULL if no value */
+};
+
+#define PAMDEFS \
+ {"CHFN_AUTH", NULL}, \
+ {"CHSH_AUTH", NULL}, \
+ {"CRACKLIB_DICTPATH", NULL}, \
+ {"ENV_HZ", NULL}, \
+ {"ENVIRON_FILE", NULL}, \
+ {"ENV_TZ", NULL}, \
+ {"FAILLOG_ENAB", NULL}, \
+ {"FTMP_FILE", NULL}, \
+ {"ISSUE_FILE", NULL}, \
+ {"LASTLOG_ENAB", NULL}, \
+ {"LOGIN_STRING", NULL}, \
+ {"MAIL_CHECK_ENAB", NULL}, \
+ {"MOTD_FILE", NULL}, \
+ {"NOLOGINS_FILE", NULL}, \
+ {"OBSCURE_CHECKS_ENAB", NULL}, \
+ {"PASS_ALWAYS_WARN", NULL}, \
+ {"PASS_CHANGE_TRIES", NULL}, \
+ {"PASS_MAX_LEN", NULL}, \
+ {"PASS_MIN_LEN", NULL}, \
+ {"PORTTIME_CHECKS_ENAB", NULL}, \
+ {"QUOTAS_ENAB", NULL}, \
+ {"SU_WHEEL_ONLY", NULL}, \
+ {"ULIMIT", NULL},
+
+
+#define NUMDEFS (sizeof(def_table)/sizeof(def_table[0]))
+static struct itemdef def_table[] = {
+ {"CHFN_RESTRICT", NULL},
+ {"CONSOLE_GROUPS", NULL},
+ {"CONSOLE", NULL},
+ {"CREATE_HOME", NULL},
+ {"DEFAULT_HOME", NULL},
+ {"ENCRYPT_METHOD", NULL},
+ {"ENV_PATH", NULL},
+ {"ENV_SUPATH", NULL},
+ {"ERASECHAR", NULL},
+ {"FAIL_DELAY", NULL},
+ {"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},
+ {"LOG_UNKFAIL_ENAB", NULL},
+ {"MAIL_DIR", NULL},
+ {"MAIL_FILE", NULL},
+ {"MAX_MEMBERS_PER_GROUP", NULL},
+ {"MD5_CRYPT_ENAB", NULL},
+ {"PASS_MAX_DAYS", NULL},
+ {"PASS_MIN_DAYS", NULL},
+ {"PASS_WARN_AGE", NULL},
+#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},
+ {"SUB_GID_MIN", NULL},
+ {"SUB_UID_COUNT", NULL},
+ {"SUB_UID_MAX", NULL},
+ {"SUB_UID_MIN", NULL},
+ {"SULOG_FILE", NULL},
+ {"SU_NAME", NULL},
+ {"SYS_GID_MAX", NULL},
+ {"SYS_GID_MIN", NULL},
+ {"SYS_UID_MAX", NULL},
+ {"SYS_UID_MIN", NULL},
+ {"TTYGROUP", NULL},
+ {"TTYPERM", NULL},
+ {"TTYTYPE_FILE", NULL},
+ {"UID_MAX", NULL},
+ {"UID_MIN", NULL},
+ {"UMASK", NULL},
+ {"USERDEL_CMD", NULL},
+ {"USERGROUPS_ENAB", NULL},
+#ifndef USE_PAM
+ PAMDEFS
+#endif
+#ifdef USE_SYSLOG
+ {"SYSLOG_SG_ENAB", NULL},
+ {"SYSLOG_SU_ENAB", NULL},
+#endif
+#ifdef WITH_TCB
+ {"TCB_AUTH_GROUP", NULL},
+ {"TCB_SYMLINKS", NULL},
+ {"USE_TCB", NULL},
+#endif
+ {"FORCE_SHADOW", NULL},
+ {NULL, NULL}
+};
+
+#define NUMKNOWNDEFS (sizeof(knowndef_table)/sizeof(knowndef_table[0]))
+static struct itemdef knowndef_table[] = {
+#ifdef USE_PAM
+ PAMDEFS
+#endif
+ {NULL, NULL}
+};
+
+#ifdef USE_ECONF
+#ifdef VENDORDIR
+static const char* vendordir = VENDORDIR;
+#else
+static const char* vendordir = NULL;
+#endif
+static const char* sysconfdir = "/etc";
+#else
+#ifndef LOGINDEFS
+#define LOGINDEFS "/etc/login.defs"
+#endif
+
+static const char* def_fname = LOGINDEFS; /* login config defs file */
+#endif
+static bool def_loaded = false; /* are defs already loaded? */
+
+/* local function prototypes */
+static /*@observer@*/ /*@null@*/struct itemdef *def_find (const char *);
+static void def_load (void);
+
+
+/*
+ * getdef_str - get string value from table of definitions.
+ *
+ * Return point to static data for specified item, or NULL if item is not
+ * defined. First time invoked, will load definitions from the file.
+ */
+
+/*@observer@*/ /*@null@*/const char *getdef_str (const char *item)
+{
+ struct itemdef *d;
+
+ if (!def_loaded) {
+ def_load ();
+ }
+
+ d = def_find (item);
+ return ((NULL == d)? (const char *) NULL : d->value);
+}
+
+
+/*
+ * getdef_bool - get boolean value from table of definitions.
+ *
+ * Return TRUE if specified item is defined as "yes", else FALSE.
+ */
+
+bool getdef_bool (const char *item)
+{
+ struct itemdef *d;
+
+ if (!def_loaded) {
+ def_load ();
+ }
+
+ d = def_find (item);
+ if ((NULL == d) || (NULL == d->value)) {
+ return false;
+ }
+
+ return (strcasecmp (d->value, "yes") == 0);
+}
+
+
+/*
+ * getdef_num - get numerical value from table of definitions
+ *
+ * Returns numeric value of specified item, else the "dflt" value if
+ * the item is not defined. Octal (leading "0") and hex (leading "0x")
+ * values are handled.
+ */
+
+int getdef_num (const char *item, int dflt)
+{
+ struct itemdef *d;
+ long val;
+
+ if (!def_loaded) {
+ def_load ();
+ }
+
+ d = def_find (item);
+ if ((NULL == d) || (NULL == d->value)) {
+ return dflt;
+ }
+
+ if ( (getlong (d->value, &val) == 0)
+ || (val > INT_MAX)
+ || (val < INT_MIN)) {
+ fprintf (stderr,
+ _("configuration error - cannot parse %s value: '%s'"),
+ item, d->value);
+ return dflt;
+ }
+
+ return (int) val;
+}
+
+
+/*
+ * getdef_unum - get unsigned numerical value from table of definitions
+ *
+ * Returns numeric value of specified item, else the "dflt" value if
+ * the item is not defined. Octal (leading "0") and hex (leading "0x")
+ * values are handled.
+ */
+
+unsigned int getdef_unum (const char *item, unsigned int dflt)
+{
+ struct itemdef *d;
+ long val;
+
+ if (!def_loaded) {
+ def_load ();
+ }
+
+ d = def_find (item);
+ if ((NULL == d) || (NULL == d->value)) {
+ return dflt;
+ }
+
+ if ( (getlong (d->value, &val) == 0)
+ || (val < 0)
+ || (val > INT_MAX)) {
+ fprintf (stderr,
+ _("configuration error - cannot parse %s value: '%s'"),
+ item, d->value);
+ return dflt;
+ }
+
+ return (unsigned int) val;
+}
+
+
+/*
+ * getdef_long - get long integer value from table of definitions
+ *
+ * Returns numeric value of specified item, else the "dflt" value if
+ * the item is not defined. Octal (leading "0") and hex (leading "0x")
+ * values are handled.
+ */
+
+long getdef_long (const char *item, long dflt)
+{
+ struct itemdef *d;
+ long val;
+
+ if (!def_loaded) {
+ def_load ();
+ }
+
+ d = def_find (item);
+ if ((NULL == d) || (NULL == d->value)) {
+ return dflt;
+ }
+
+ if (getlong (d->value, &val) == 0) {
+ fprintf (stderr,
+ _("configuration error - cannot parse %s value: '%s'"),
+ item, d->value);
+ return dflt;
+ }
+
+ return val;
+}
+
+/*
+ * getdef_ulong - get unsigned long numerical value from table of definitions
+ *
+ * Returns numeric value of specified item, else the "dflt" value if
+ * the item is not defined. Octal (leading "0") and hex (leading "0x")
+ * values are handled.
+ */
+
+unsigned long getdef_ulong (const char *item, unsigned long dflt)
+{
+ struct itemdef *d;
+ unsigned long val;
+
+ if (!def_loaded) {
+ def_load ();
+ }
+
+ d = def_find (item);
+ if ((NULL == d) || (NULL == d->value)) {
+ return dflt;
+ }
+
+ if (getulong (d->value, &val) == 0) {
+ /* FIXME: we should have a getulong */
+ fprintf (stderr,
+ _("configuration error - cannot parse %s value: '%s'"),
+ item, d->value);
+ return dflt;
+ }
+
+ return val;
+}
+
+/*
+ * putdef_str - override the value read from /etc/login.defs
+ * (also used when loading the initial defaults)
+ */
+
+int putdef_str (const char *name, const char *value)
+{
+ struct itemdef *d;
+ char *cp;
+
+ if (!def_loaded) {
+ def_load ();
+ }
+
+ /*
+ * Locate the slot to save the value. If this parameter
+ * is unknown then "def_find" will print an err message.
+ */
+ d = def_find (name);
+ if (NULL == d) {
+ return -1;
+ }
+
+ /*
+ * Save off the value.
+ */
+ cp = strdup (value);
+ if (NULL == cp) {
+ (void) fputs (_("Could not allocate space for config info.\n"),
+ stderr);
+ SYSLOG ((LOG_ERR, "could not allocate space for config info"));
+ return -1;
+ }
+
+ if (NULL != d->value) {
+ free (d->value);
+ }
+
+ d->value = cp;
+ return 0;
+}
+
+
+/*
+ * def_find - locate named item in table
+ *
+ * Search through a table of configurable items to locate the
+ * specified configuration option.
+ */
+
+static /*@observer@*/ /*@null@*/struct itemdef *def_find (const char *name)
+{
+ struct itemdef *ptr;
+
+
+ /*
+ * Search into the table.
+ */
+
+ for (ptr = def_table; NULL != ptr->name; ptr++) {
+ if (strcmp (ptr->name, name) == 0) {
+ return ptr;
+ }
+ }
+
+ /*
+ * Item was never found.
+ */
+
+ for (ptr = knowndef_table; NULL != ptr->name; ptr++) {
+ if (strcmp (ptr->name, name) == 0) {
+ goto out;
+ }
+ }
+ fprintf (stderr,
+ _("configuration error - unknown item '%s' (notify administrator)\n"),
+ name);
+ SYSLOG ((LOG_CRIT, "unknown configuration item `%s'", name));
+
+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
+ *
+ * Loads the user-configured options from the default configuration file
+ */
+
+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.
+ * (do it early to prevent recursion in putdef_str())
+ */
+ 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.
+ */
+ fp = fopen (def_fname, "r");
+ if (NULL == fp) {
+ if (errno == ENOENT)
+ return;
+
+ int err = errno;
+ SYSLOG ((LOG_CRIT, "cannot open login definitions %s [%s]",
+ def_fname, strerror (err)));
+ exit (EXIT_FAILURE);
+ }
+
+ /*
+ * Go through all of the lines in the file.
+ */
+ while (fgets (buf, (int) sizeof (buf), fp) != NULL) {
+
+ /*
+ * Trim trailing whitespace.
+ */
+ for (i = (int) strlen (buf) - 1; i >= 0; --i) {
+ if (!isspace (buf[i])) {
+ break;
+ }
+ }
+ i++;
+ buf[i] = '\0';
+
+ /*
+ * Break the line into two fields.
+ */
+ name = buf + strspn (buf, " \t"); /* first nonwhite */
+ if (*name == '\0' || *name == '#')
+ continue; /* comment or empty */
+
+ s = name + strcspn (name, " \t"); /* end of field */
+ if (*s == '\0')
+ continue; /* only 1 field?? */
+
+ *s++ = '\0';
+ value = s + strspn (s, " \"\t"); /* next nonwhite */
+ *(value + strcspn (value, "\"")) = '\0';
+
+ /*
+ * 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 (name, value);
+ }
+
+ if (ferror (fp) != 0) {
+ int err = errno;
+ SYSLOG ((LOG_CRIT, "cannot read login definitions %s [%s]",
+ def_fname, strerror (err)));
+ exit (EXIT_FAILURE);
+ }
+
+ (void) fclose (fp);
+#endif
+}
+
+
+#ifdef CKDEFS
+int main (int argc, char **argv)
+{
+ int i;
+ char *cp;
+ struct itemdef *d;
+
+ def_load ();
+
+ for (i = 0; i < NUMDEFS; ++i) {
+ d = def_find (def_table[i].name);
+ if (NULL == d) {
+ printf ("error - lookup '%s' failed\n",
+ def_table[i].name);
+ } else {
+ printf ("%4d %-24s %s\n", i + 1, d->name, d->value);
+ }
+ }
+ for (i = 1; i < argc; i++) {
+ cp = getdef_str (argv[1]);
+ if (NULL != cp) {
+ printf ("%s `%s'\n", argv[1], cp);
+ } else {
+ printf ("%s not found\n", argv[1]);
+ }
+ }
+ exit (EXIT_SUCCESS);
+}
+#endif
diff --git a/lib/getdef.h b/lib/getdef.h
new file mode 100644
index 0000000..46346d8
--- /dev/null
+++ b/lib/getdef.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2002 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2008 , 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.
+ */
+#ifndef _GETDEF_H
+#define _GETDEF_H
+
+/* getdef.c */
+extern bool getdef_bool (const char *);
+extern long getdef_long (const char *, long);
+extern int getdef_num (const char *, int);
+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
+
+#endif /* _GETDEF_H */
diff --git a/lib/getlong.c b/lib/getlong.c
new file mode 100644
index 0000000..47c3a60
--- /dev/null
+++ b/lib/getlong.c
@@ -0,0 +1,59 @@
+/*
+ * 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.
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include <stdlib.h>
+#include <errno.h>
+#include "prototypes.h"
+
+/*
+ * getlong - extract a long integer provided by the numstr string in *result
+ *
+ * It supports decimal, hexadecimal or octal representations.
+ *
+ * Returns 0 on failure, 1 on success.
+ */
+int getlong (const char *numstr, /*@out@*/long int *result)
+{
+ long val;
+ char *endptr;
+
+ errno = 0;
+ val = strtol (numstr, &endptr, 0);
+ if (('\0' == *numstr) || ('\0' != *endptr) || (ERANGE == errno)) {
+ return 0;
+ }
+
+ *result = val;
+ return 1;
+}
+
diff --git a/lib/getulong.c b/lib/getulong.c
new file mode 100644
index 0000000..08d2c1a
--- /dev/null
+++ b/lib/getulong.c
@@ -0,0 +1,62 @@
+/*
+ * 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.
+ */
+
+#include <config.h>
+
+#ident "$Id: getlong.c 2763 2009-04-23 09:57:03Z nekral-guest $"
+
+#include <stdlib.h>
+#include <errno.h>
+#include "prototypes.h"
+
+/*
+ * getulong - extract an unsigned long integer provided by the numstr string in *result
+ *
+ * It supports decimal, hexadecimal or octal representations.
+ *
+ * Returns 0 on failure, 1 on success.
+ */
+int getulong (const char *numstr, /*@out@*/unsigned long int *result)
+{
+ unsigned long int val;
+ char *endptr;
+
+ errno = 0;
+ val = strtoul (numstr, &endptr, 0);
+ if ( ('\0' == *numstr)
+ || ('\0' != *endptr)
+ || (ERANGE == errno)
+ ) {
+ return 0;
+ }
+
+ *result = val;
+ return 1;
+}
+
diff --git a/lib/groupio.c b/lib/groupio.c
new file mode 100644
index 0000000..bffb06e
--- /dev/null
+++ b/lib/groupio.c
@@ -0,0 +1,463 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 , Michał Moskal
+ * Copyright (c) 2005 , Tomasz Kłoczko
+ * Copyright (c) 2007 - 2010, 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 <assert.h>
+#include <stdio.h>
+
+#include "prototypes.h"
+#include "defines.h"
+#include "commonio.h"
+#include "getdef.h"
+#include "groupio.h"
+
+static /*@null@*/struct commonio_entry *merge_group_entries (
+ /*@null@*/ /*@returned@*/struct commonio_entry *gr1,
+ /*@null@*/struct commonio_entry *gr2);
+static int split_groups (unsigned int max_members);
+static int group_open_hook (void);
+
+static /*@null@*/ /*@only@*/void *group_dup (const void *ent)
+{
+ const struct group *gr = ent;
+
+ return __gr_dup (gr);
+}
+
+static void group_free (/*@out@*/ /*@only@*/void *ent)
+{
+ struct group *gr = ent;
+
+ gr_free (gr);
+}
+
+static const char *group_getname (const void *ent)
+{
+ const struct group *gr = ent;
+
+ return gr->gr_name;
+}
+
+static void *group_parse (const char *line)
+{
+ return (void *) sgetgrent (line);
+}
+
+static int group_put (const void *ent, FILE * file)
+{
+ const struct group *gr = ent;
+
+ if ( (NULL == gr)
+ || (valid_field (gr->gr_name, ":\n") == -1)
+ || (valid_field (gr->gr_passwd, ":\n") == -1)
+ || (gr->gr_gid == (gid_t)-1)) {
+ return -1;
+ }
+
+ /* FIXME: fail also if gr->gr_mem == NULL ?*/
+ if (NULL != gr->gr_mem) {
+ size_t i;
+ for (i = 0; NULL != gr->gr_mem[i]; i++) {
+ if (valid_field (gr->gr_mem[i], ",:\n") == -1) {
+ return -1;
+ }
+ }
+ }
+
+ return (putgrent (gr, file) == -1) ? -1 : 0;
+}
+
+static int group_close_hook (void)
+{
+ unsigned int max_members = getdef_unum("MAX_MEMBERS_PER_GROUP", 0);
+
+ if (0 == max_members) {
+ return 1;
+ }
+
+ return split_groups (max_members);
+}
+
+static struct commonio_ops group_ops = {
+ group_dup,
+ group_free,
+ group_getname,
+ group_parse,
+ group_put,
+ fgetsx,
+ fputsx,
+ group_open_hook,
+ group_close_hook
+};
+
+static /*@owned@*/struct commonio_db group_db = {
+ GROUP_FILE, /* filename */
+ &group_ops, /* ops */
+ NULL, /* fp */
+#ifdef WITH_SELINUX
+ NULL, /* scontext */
+#endif
+ 0644, /* st_mode */
+ 0, /* st_uid */
+ 0, /* st_gid */
+ NULL, /* head */
+ NULL, /* tail */
+ NULL, /* cursor */
+ false, /* changed */
+ false, /* isopen */
+ false, /* locked */
+ false, /* readonly */
+ false /* setname */
+};
+
+int gr_setdbname (const char *filename)
+{
+ return commonio_setname (&group_db, filename);
+}
+
+/*@observer@*/const char *gr_dbname (void)
+{
+ return group_db.filename;
+}
+
+int gr_lock (void)
+{
+ return commonio_lock (&group_db);
+}
+
+int gr_open (int mode)
+{
+ return commonio_open (&group_db, mode);
+}
+
+/*@observer@*/ /*@null@*/const struct group *gr_locate (const char *name)
+{
+ return commonio_locate (&group_db, name);
+}
+
+/*@observer@*/ /*@null@*/const struct group *gr_locate_gid (gid_t gid)
+{
+ const struct group *grp;
+
+ gr_rewind ();
+ while ( ((grp = gr_next ()) != NULL)
+ && (grp->gr_gid != gid)) {
+ }
+
+ return grp;
+}
+
+int gr_update (const struct group *gr)
+{
+ return commonio_update (&group_db, (const void *) gr);
+}
+
+int gr_remove (const char *name)
+{
+ return commonio_remove (&group_db, name);
+}
+
+int gr_rewind (void)
+{
+ return commonio_rewind (&group_db);
+}
+
+/*@observer@*/ /*@null@*/const struct group *gr_next (void)
+{
+ return commonio_next (&group_db);
+}
+
+int gr_close (void)
+{
+ return commonio_close (&group_db);
+}
+
+int gr_unlock (void)
+{
+ return commonio_unlock (&group_db);
+}
+
+void __gr_set_changed (void)
+{
+ group_db.changed = true;
+}
+
+/*@dependent@*/ /*@null@*/struct commonio_entry *__gr_get_head (void)
+{
+ return group_db.head;
+}
+
+/*@observer@*/const struct commonio_db *__gr_get_db (void)
+{
+ return &group_db;
+}
+
+void __gr_del_entry (const struct commonio_entry *ent)
+{
+ commonio_del_entry (&group_db, ent);
+}
+
+static int gr_cmp (const void *p1, const void *p2)
+{
+ gid_t u1, u2;
+
+ if ((*(struct commonio_entry **) p1)->eptr == NULL) {
+ return 1;
+ }
+ if ((*(struct commonio_entry **) p2)->eptr == NULL) {
+ return -1;
+ }
+
+ u1 = ((struct group *) (*(struct commonio_entry **) p1)->eptr)->gr_gid;
+ u2 = ((struct group *) (*(struct commonio_entry **) p2)->eptr)->gr_gid;
+
+ if (u1 < u2) {
+ return -1;
+ } else if (u1 > u2) {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+/* Sort entries by GID */
+int gr_sort ()
+{
+ return commonio_sort (&group_db, gr_cmp);
+}
+
+static int group_open_hook (void)
+{
+ unsigned int max_members = getdef_unum("MAX_MEMBERS_PER_GROUP", 0);
+ struct commonio_entry *gr1, *gr2;
+
+ if (0 == max_members) {
+ return 1;
+ }
+
+ for (gr1 = group_db.head; NULL != gr1; gr1 = gr1->next) {
+ for (gr2 = gr1->next; NULL != gr2; gr2 = gr2->next) {
+ struct group *g1 = (struct group *)gr1->eptr;
+ struct group *g2 = (struct group *)gr2->eptr;
+ if (NULL != g1 &&
+ NULL != g2 &&
+ 0 == strcmp (g1->gr_name, g2->gr_name) &&
+ 0 == strcmp (g1->gr_passwd, g2->gr_passwd) &&
+ g1->gr_gid == g2->gr_gid) {
+ /* Both group entries refer to the same
+ * group. It is a split group. Merge the
+ * members. */
+ gr1 = merge_group_entries (gr1, gr2);
+ if (NULL == gr1)
+ return 0;
+ /* Unlink gr2 */
+ if (NULL != gr2->next) {
+ gr2->next->prev = gr2->prev;
+ }
+ /* gr2 does not start with head */
+ assert (NULL != gr2->prev);
+ gr2->prev->next = gr2->next;
+ }
+ }
+ assert (NULL != gr1);
+ }
+
+ return 1;
+}
+
+/*
+ * Merge the list of members of the two group entries.
+ *
+ * The commonio_entry arguments shall be group entries.
+ *
+ * You should not merge the members of two groups if they don't have the
+ * same name, password and gid.
+ *
+ * It merge the members of the second entry in the first one, and return
+ * the modified first entry on success, or NULL on failure (with errno
+ * set).
+ */
+static /*@null@*/struct commonio_entry *merge_group_entries (
+ /*@null@*/ /*@returned@*/struct commonio_entry *gr1,
+ /*@null@*/struct commonio_entry *gr2)
+{
+ struct group *gptr1;
+ struct group *gptr2;
+ char **new_members;
+ size_t members = 0;
+ char *new_line;
+ size_t new_line_len, i;
+ if (NULL == gr2 || NULL == gr1) {
+ errno = EINVAL;
+ return NULL;
+ }
+
+ gptr1 = (struct group *)gr1->eptr;
+ gptr2 = (struct group *)gr2->eptr;
+ if (NULL == gptr2 || NULL == gptr1) {
+ errno = EINVAL;
+ return NULL;
+ }
+
+ /* Concatenate the 2 lines */
+ new_line_len = strlen (gr1->line) + strlen (gr2->line) +1;
+ new_line = (char *)malloc (new_line_len + 1);
+ if (NULL == new_line) {
+ errno = ENOMEM;
+ return NULL;
+ }
+ snprintf(new_line, new_line_len + 1, "%s\n%s", gr1->line, gr2->line);
+
+ /* Concatenate the 2 list of members */
+ for (i=0; NULL != gptr1->gr_mem[i]; i++);
+ members += i;
+ for (i=0; NULL != gptr2->gr_mem[i]; i++) {
+ char **pmember = gptr1->gr_mem;
+ while (NULL != *pmember) {
+ if (0 == strcmp(*pmember, gptr2->gr_mem[i])) {
+ break;
+ }
+ pmember++;
+ }
+ if (NULL == *pmember) {
+ members++;
+ }
+ }
+ new_members = (char **)calloc ( (members+1), sizeof(char*) );
+ if (NULL == new_members) {
+ free (new_line);
+ errno = ENOMEM;
+ return NULL;
+ }
+ for (i=0; NULL != gptr1->gr_mem[i]; i++) {
+ new_members[i] = gptr1->gr_mem[i];
+ }
+ /* NULL termination enforced by above calloc */
+
+ members = i;
+ for (i=0; NULL != gptr2->gr_mem[i]; i++) {
+ char **pmember = new_members;
+ while (NULL != *pmember) {
+ if (0 == strcmp(*pmember, gptr2->gr_mem[i])) {
+ break;
+ }
+ pmember++;
+ }
+ if (NULL == *pmember) {
+ new_members[members] = gptr2->gr_mem[i];
+ members++;
+ new_members[members] = NULL;
+ }
+ }
+
+ gr1->line = new_line;
+ gptr1->gr_mem = new_members;
+
+ return gr1;
+}
+
+/*
+ * Scan the group database and split the groups which have more members
+ * than specified, if this is the result from a current change.
+ *
+ * Return 0 on failure (errno set) and 1 on success.
+ */
+static int split_groups (unsigned int max_members)
+{
+ struct commonio_entry *gr;
+
+ for (gr = group_db.head; NULL != gr; gr = gr->next) {
+ struct group *gptr = (struct group *)gr->eptr;
+ struct commonio_entry *new;
+ struct group *new_gptr;
+ unsigned int members = 0;
+ unsigned int i;
+
+ /* Check if this group must be split */
+ if (!gr->changed) {
+ continue;
+ }
+ if (NULL == gptr) {
+ continue;
+ }
+ for (members = 0; NULL != gptr->gr_mem[members]; members++);
+ if (members <= max_members) {
+ continue;
+ }
+
+ new = (struct commonio_entry *) malloc (sizeof *new);
+ if (NULL == new) {
+ errno = ENOMEM;
+ return 0;
+ }
+ new->eptr = group_dup(gr->eptr);
+ if (NULL == new->eptr) {
+ free (new);
+ errno = ENOMEM;
+ return 0;
+ }
+ new_gptr = (struct group *)new->eptr;
+ new->line = NULL;
+ new->changed = true;
+
+ /* Enforce the maximum number of members on gptr */
+ for (i = max_members; NULL != gptr->gr_mem[i]; i++) {
+ free (gptr->gr_mem[i]);
+ gptr->gr_mem[i] = NULL;
+ }
+ /* Shift all the members */
+ /* The number of members in new_gptr will be check later */
+ for (i = 0; NULL != new_gptr->gr_mem[i + max_members]; i++) {
+ if (NULL != new_gptr->gr_mem[i]) {
+ free (new_gptr->gr_mem[i]);
+ }
+ new_gptr->gr_mem[i] = new_gptr->gr_mem[i + max_members];
+ new_gptr->gr_mem[i + max_members] = NULL;
+ }
+ for (; NULL != new_gptr->gr_mem[i]; i++) {
+ free (new_gptr->gr_mem[i]);
+ new_gptr->gr_mem[i] = NULL;
+ }
+
+ /* insert the new entry in the list */
+ new->prev = gr;
+ new->next = gr->next;
+ gr->next = new;
+ }
+
+ return 1;
+}
+
diff --git a/lib/groupio.h b/lib/groupio.h
new file mode 100644
index 0000000..e1f1b02
--- /dev/null
+++ b/lib/groupio.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 , Michał Moskal
+ * Copyright (c) 2005 , Tomasz Kłoczko
+ * Copyright (c) 2008 , 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.
+ */
+
+/* $Id$ */
+#ifndef _GROUPIO_H
+#define _GROUPIO_H
+
+#include <sys/types.h>
+#include <grp.h>
+
+extern int gr_close (void);
+extern /*@observer@*/ /*@null@*/const struct group *gr_locate (const char *name);
+extern /*@observer@*/ /*@null@*/const struct group *gr_locate_gid (gid_t gid);
+extern int gr_lock (void);
+extern int gr_setdbname (const char *filename);
+extern /*@observer@*/const char *gr_dbname (void);
+extern /*@observer@*/ /*@null@*/const struct group *gr_next (void);
+extern int gr_open (int mode);
+extern int gr_remove (const char *name);
+extern int gr_rewind (void);
+extern int gr_unlock (void);
+extern int gr_update (const struct group *gr);
+extern int gr_sort (void);
+
+#endif
diff --git a/lib/groupmem.c b/lib/groupmem.c
new file mode 100644
index 0000000..1fd1c13
--- /dev/null
+++ b/lib/groupmem.c
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 , Michał Moskal
+ * Copyright (c) 2005 , Tomasz Kłoczko
+ * Copyright (c) 2007 - 2013, 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 "prototypes.h"
+#include "defines.h"
+#include "groupio.h"
+
+/*@null@*/ /*@only@*/struct group *__gr_dup (const struct group *grent)
+{
+ struct group *gr;
+ int i;
+
+ gr = (struct group *) malloc (sizeof *gr);
+ if (NULL == gr) {
+ return NULL;
+ }
+ /* The libc might define other fields. They won't be copied. */
+ memset (gr, 0, sizeof *gr);
+ gr->gr_gid = grent->gr_gid;
+ /*@-mustfreeonly@*/
+ gr->gr_name = strdup (grent->gr_name);
+ /*@=mustfreeonly@*/
+ if (NULL == gr->gr_name) {
+ gr_free(gr);
+ return NULL;
+ }
+ /*@-mustfreeonly@*/
+ gr->gr_passwd = strdup (grent->gr_passwd);
+ /*@=mustfreeonly@*/
+ if (NULL == gr->gr_passwd) {
+ gr_free(gr);
+ return NULL;
+ }
+
+ for (i = 0; grent->gr_mem[i]; i++);
+
+ /*@-mustfreeonly@*/
+ gr->gr_mem = (char **) malloc ((i + 1) * sizeof (char *));
+ /*@=mustfreeonly@*/
+ if (NULL == gr->gr_mem) {
+ gr_free(gr);
+ return NULL;
+ }
+ for (i = 0; grent->gr_mem[i]; i++) {
+ gr->gr_mem[i] = strdup (grent->gr_mem[i]);
+ if (NULL == gr->gr_mem[i]) {
+ gr_free(gr);
+ return NULL;
+ }
+ }
+ gr->gr_mem[i] = NULL;
+
+ return gr;
+}
+
+void gr_free (/*@out@*/ /*@only@*/struct group *grent)
+{
+ free (grent->gr_name);
+ if (NULL != grent->gr_passwd) {
+ memzero (grent->gr_passwd, strlen (grent->gr_passwd));
+ free (grent->gr_passwd);
+ }
+ if (NULL != grent->gr_mem) {
+ size_t i;
+ for (i = 0; NULL != grent->gr_mem[i]; i++) {
+ free (grent->gr_mem[i]);
+ }
+ free (grent->gr_mem);
+ }
+ free (grent);
+}
+
diff --git a/lib/gshadow.c b/lib/gshadow.c
new file mode 100644
index 0000000..e5a0f61
--- /dev/null
+++ b/lib/gshadow.c
@@ -0,0 +1,529 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2005 , Tomasz Kłoczko
+ * Copyright (c) 2008 - 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.
+ */
+
+#include <config.h>
+
+/* Newer versions of Linux libc already have shadow support. */
+#if defined(SHADOWGRP) && !defined(HAVE_SHADOWGRP) /*{ */
+
+#ident "$Id$"
+
+#include <stdio.h>
+#include "prototypes.h"
+#include "defines.h"
+static /*@null@*/FILE *shadow;
+static /*@null@*//*@only@*/char **members = NULL;
+static size_t nmembers = 0;
+static /*@null@*//*@only@*/char **admins = NULL;
+static size_t nadmins = 0;
+static struct sgrp sgroup;
+
+#define FIELDS 4
+
+#ifdef USE_NIS
+static bool nis_used;
+static bool nis_ignore;
+static enum { native, start, middle, native2 } nis_state;
+static bool nis_bound;
+static char *nis_domain;
+static char *nis_key;
+static int nis_keylen;
+static char *nis_val;
+static int nis_vallen;
+
+#define IS_NISCHAR(c) ((c)=='+')
+#endif
+
+#ifdef USE_NIS
+/*
+ * bind_nis - bind to NIS server
+ */
+
+static int bind_nis (void)
+{
+ if (yp_get_default_domain (&nis_domain))
+ return -1;
+
+ nis_bound = true;
+ return 0;
+}
+#endif
+
+static /*@null@*/char **build_list (char *s, char **list[], size_t * nlist)
+{
+ char **ptr = *list;
+ size_t nelem = *nlist, size;
+
+ while (s != NULL && *s != '\0') {
+ size = (nelem + 1) * sizeof (ptr);
+ ptr = realloc (*list, size);
+ if (NULL != ptr) {
+ ptr[nelem] = s;
+ nelem++;
+ *list = ptr;
+ *nlist = nelem;
+ s = strchr (s, ',');
+ if (NULL != s) {
+ *s = '\0';
+ s++;
+ }
+ }
+ }
+ size = (nelem + 1) * sizeof (ptr);
+ ptr = realloc (*list, size);
+ if (NULL != ptr) {
+ ptr[nelem] = NULL;
+ *list = ptr;
+ }
+ return ptr;
+}
+
+void setsgent (void)
+{
+#ifdef USE_NIS
+ nis_state = native;
+#endif
+ if (NULL != shadow) {
+ rewind (shadow);
+ } else {
+ shadow = fopen (SGROUP_FILE, "r");
+ }
+}
+
+void endsgent (void)
+{
+ if (NULL != shadow) {
+ (void) fclose (shadow);
+ }
+
+ shadow = (FILE *) 0;
+}
+
+/*@observer@*//*@null@*/struct sgrp *sgetsgent (const char *string)
+{
+ static char *sgrbuf = NULL;
+ static size_t sgrbuflen = 0;
+
+ char *fields[FIELDS];
+ char *cp;
+ int i;
+ size_t len = strlen (string) + 1;
+
+ if (len > sgrbuflen) {
+ char *buf = (char *) realloc (sgrbuf, sizeof (char) * len);
+ if (NULL == buf) {
+ return NULL;
+ }
+ sgrbuf = buf;
+ sgrbuflen = len;
+ }
+
+ strncpy (sgrbuf, string, len);
+ sgrbuf[len-1] = '\0';
+
+ cp = strrchr (sgrbuf, '\n');
+ if (NULL != cp) {
+ *cp = '\0';
+ }
+
+ /*
+ * There should be exactly 4 colon separated fields. Find
+ * all 4 of them and save the starting addresses in fields[].
+ */
+
+ for (cp = sgrbuf, i = 0; (i < FIELDS) && (NULL != cp); i++) {
+ fields[i] = cp;
+ cp = strchr (cp, ':');
+ if (NULL != cp) {
+ *cp++ = '\0';
+ }
+ }
+
+ /*
+ * If there was an extra field somehow, or perhaps not enough,
+ * the line is invalid.
+ */
+
+ if ((NULL != cp) || (i != FIELDS)) {
+#ifdef USE_NIS
+ if (!IS_NISCHAR (fields[0][0])) {
+ return 0;
+ } else {
+ nis_used = true;
+ }
+#else
+ return 0;
+#endif
+ }
+
+ sgroup.sg_name = fields[0];
+ sgroup.sg_passwd = fields[1];
+ if (0 != nadmins) {
+ nadmins = 0;
+ free (admins);
+ admins = NULL;
+ }
+ if (0 != nmembers) {
+ nmembers = 0;
+ free (members);
+ members = NULL;
+ }
+ sgroup.sg_adm = build_list (fields[2], &admins, &nadmins);
+ sgroup.sg_mem = build_list (fields[3], &members, &nmembers);
+
+ return &sgroup;
+}
+
+/*
+ * fgetsgent - convert next line in stream to (struct sgrp)
+ *
+ * fgetsgent() reads the next line from the provided stream and
+ * converts it to a (struct sgrp). NULL is returned on EOF.
+ */
+
+/*@observer@*//*@null@*/struct sgrp *fgetsgent (/*@null@*/FILE * fp)
+{
+ static size_t buflen = 0;
+ static char *buf = NULL;
+
+ char *cp;
+
+ if (0 == buflen) {
+ buf = (char *) malloc (BUFSIZ);
+ if (NULL == buf) {
+ return NULL;
+ }
+ buflen = BUFSIZ;
+ }
+
+ if (NULL == fp) {
+ return NULL;
+ }
+
+#ifdef USE_NIS
+ while (fgetsx (buf, (int) buflen, fp) == buf)
+#else
+ if (fgetsx (buf, (int) buflen, fp) == buf)
+#endif
+ {
+ while ( ((cp = strrchr (buf, '\n')) == NULL)
+ && (feof (fp) == 0)) {
+ size_t len;
+
+ cp = (char *) realloc (buf, buflen*2);
+ if (NULL == cp) {
+ return NULL;
+ }
+ buf = cp;
+ buflen *= 2;
+
+ len = strlen (buf);
+ if (fgetsx (&buf[len],
+ (int) (buflen - len),
+ fp) != &buf[len]) {
+ return NULL;
+ }
+ }
+ cp = strrchr (buf, '\n');
+ if (NULL != cp) {
+ *cp = '\0';
+ }
+#ifdef USE_NIS
+ if (nis_ignore && IS_NISCHAR (buf[0])) {
+ continue;
+ }
+#endif
+ return (sgetsgent (buf));
+ }
+ return NULL;
+}
+
+/*
+ * getsgent - get a single shadow group entry
+ */
+
+/*@observer@*//*@null@*/struct sgrp *getsgent (void)
+{
+#ifdef USE_NIS
+ bool nis_1_group = false;
+ struct sgrp *val;
+#endif
+ if (NULL == shadow) {
+ setsgent ();
+ }
+
+#ifdef USE_NIS
+ again:
+ /*
+ * See if we are reading from the local file.
+ */
+
+ if (nis_state == native || nis_state == native2) {
+
+ /*
+ * Get the next entry from the shadow group file. Return
+ * NULL right away if there is none.
+ */
+
+ val = fgetsgent (shadow);
+ if (NULL == val) {
+ return 0;
+ }
+
+ /*
+ * If this entry began with a NIS escape character, we have
+ * to see if this is just a single group, or if the entire
+ * map is being asked for.
+ */
+
+ if (IS_NISCHAR (val->sg_name[0])) {
+ if ('\0' != val->sg_name[1]) {
+ nis_1_group = true;
+ } else {
+ nis_state = start;
+ }
+ }
+
+ /*
+ * If this isn't a NIS group and this isn't an escape to go
+ * use a NIS map, it must be a regular local group.
+ */
+
+ if (!nis_1_group && (nis_state != start)) {
+ return val;
+ }
+
+ /*
+ * If this is an escape to use an NIS map, switch over to
+ * that bunch of code.
+ */
+
+ if (nis_state == start) {
+ goto again;
+ }
+
+ /*
+ * NEEDSWORK. Here we substitute pieces-parts of this entry.
+ */
+
+ return 0;
+ } else {
+ if (!nis_bound) {
+ if (bind_nis ()) {
+ nis_state = native2;
+ goto again;
+ }
+ }
+ if (nis_state == start) {
+ if (yp_first (nis_domain, "gshadow.byname", &nis_key,
+ &nis_keylen, &nis_val, &nis_vallen)) {
+ nis_state = native2;
+ goto again;
+ }
+ nis_state = middle;
+ } else if (nis_state == middle) {
+ if (yp_next (nis_domain, "gshadow.byname", nis_key,
+ nis_keylen, &nis_key, &nis_keylen,
+ &nis_val, &nis_vallen)) {
+ nis_state = native2;
+ goto again;
+ }
+ }
+ return sgetsgent (nis_val);
+ }
+#else
+ return (fgetsgent (shadow));
+#endif
+}
+
+/*
+ * getsgnam - get a shadow group entry by name
+ */
+
+/*@observer@*//*@null@*/struct sgrp *getsgnam (const char *name)
+{
+ struct sgrp *sgrp;
+
+#ifdef USE_NIS
+ static char save_name[16];
+ int nis_disabled = 0;
+#endif
+
+ setsgent ();
+
+#ifdef USE_NIS
+ if (nis_used) {
+ again:
+
+ /*
+ * Search the gshadow.byname map for this group.
+ */
+
+ if (!nis_bound) {
+ bind_nis ();
+ }
+
+ if (nis_bound) {
+ char *cp;
+
+ if (yp_match (nis_domain, "gshadow.byname", name,
+ strlen (name), &nis_val,
+ &nis_vallen) == 0) {
+ cp = strchr (nis_val, '\n');
+ if (NULL != cp) {
+ *cp = '\0';
+ }
+
+ nis_state = middle;
+ sgrp = sgetsgent (nis_val);
+ if (NULL != sgrp) {
+ strcpy (save_name, sgrp->sg_name);
+ nis_key = save_name;
+ nis_keylen = strlen (save_name);
+ }
+ return sgrp;
+ }
+ }
+ nis_state = native2;
+ }
+#endif
+#ifdef USE_NIS
+ if (nis_used) {
+ nis_ignore = true;
+ nis_disabled = true;
+ }
+#endif
+ while ((sgrp = getsgent ()) != (struct sgrp *) 0) {
+ if (strcmp (name, sgrp->sg_name) == 0) {
+ break;
+ }
+ }
+#ifdef USE_NIS
+ nis_ignore = false;
+#endif
+ return sgrp;
+}
+
+/*
+ * putsgent - output shadow group entry in text form
+ *
+ * putsgent() converts the contents of a (struct sgrp) to text and
+ * writes the result to the given stream. This is the logical
+ * opposite of fgetsgent.
+ */
+
+int putsgent (const struct sgrp *sgrp, FILE * fp)
+{
+ char *buf, *cp;
+ int i;
+ size_t size;
+
+ if ((NULL == fp) || (NULL == sgrp)) {
+ return -1;
+ }
+
+ /* calculate the required buffer size */
+ size = strlen (sgrp->sg_name) + strlen (sgrp->sg_passwd) + 10;
+ for (i = 0; (NULL != sgrp->sg_adm) && (NULL != sgrp->sg_adm[i]); i++) {
+ size += strlen (sgrp->sg_adm[i]) + 1;
+ }
+ for (i = 0; (NULL != sgrp->sg_mem) && (NULL != sgrp->sg_mem[i]); i++) {
+ size += strlen (sgrp->sg_mem[i]) + 1;
+ }
+
+ buf = malloc (size);
+ if (NULL == buf) {
+ return -1;
+ }
+ cp = buf;
+
+ /*
+ * Copy the group name and passwd.
+ */
+
+ strcpy (cp, sgrp->sg_name);
+ cp += strlen (cp);
+ *cp++ = ':';
+
+ strcpy (cp, sgrp->sg_passwd);
+ cp += strlen (cp);
+ *cp++ = ':';
+
+ /*
+ * Copy the administrators, separating each from the other
+ * with a ",".
+ */
+
+ for (i = 0; NULL != sgrp->sg_adm[i]; i++) {
+ if (i > 0) {
+ *cp++ = ',';
+ }
+
+ strcpy (cp, sgrp->sg_adm[i]);
+ cp += strlen (cp);
+ }
+ *cp = ':';
+ cp++;
+
+ /*
+ * Now do likewise with the group members.
+ */
+
+ for (i = 0; NULL != sgrp->sg_mem[i]; i++) {
+ if (i > 0) {
+ *cp = ',';
+ cp++;
+ }
+
+ strcpy (cp, sgrp->sg_mem[i]);
+ cp += strlen (cp);
+ }
+ *cp = '\n';
+ cp++;
+ *cp = '\0';
+
+ /*
+ * Output using the function which understands the line
+ * continuation conventions.
+ */
+
+ if (fputsx (buf, fp) == EOF) {
+ free (buf);
+ return -1;
+ }
+
+ free (buf);
+ return 0;
+}
+#else
+extern int errno; /* warning: ANSI C forbids an empty source file */
+#endif /*} SHADOWGRP */
diff --git a/lib/gshadow_.h b/lib/gshadow_.h
new file mode 100644
index 0000000..7959c5a
--- /dev/null
+++ b/lib/gshadow_.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 1988 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * 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.
+ */
+
+/*
+ * $Id$
+ */
+
+#ifndef _H_GSHADOW
+#define _H_GSHADOW
+
+/*
+ * Shadow group security file structure
+ */
+
+struct sgrp {
+ char *sg_name; /* group name */
+ char *sg_passwd; /* group password */
+ char **sg_adm; /* group administrator list */
+ char **sg_mem; /* group membership list */
+};
+
+/*
+ * Shadow group security file functions.
+ */
+
+#include <stdio.h> /* for FILE */
+
+#if __STDC__
+/*@observer@*//*@null@*/struct sgrp *getsgent (void);
+/*@observer@*//*@null@*/struct sgrp *getsgnam (const char *);
+/*@observer@*//*@null@*/struct sgrp *sgetsgent (const char *);
+/*@observer@*//*@null@*/struct sgrp *fgetsgent (/*@null@*/FILE *);
+void setsgent (void);
+void endsgent (void);
+int putsgent (const struct sgrp *, FILE *);
+#else
+/*@observer@*//*@null@*/struct sgrp *getsgent ();
+/*@observer@*//*@null@*/struct sgrp *getsgnam ();
+/*@observer@*//*@null@*/struct sgrp *sgetsgent ();
+/*@observer@*//*@null@*/struct sgrp *fgetsgent ();
+void setsgent ();
+void endsgent ();
+int putsgent ();
+#endif
+
+#define GSHADOW "/etc/gshadow"
+#endif /* ifndef _H_GSHADOW */
diff --git a/lib/lockpw.c b/lib/lockpw.c
new file mode 100644
index 0000000..0bcf195
--- /dev/null
+++ b/lib/lockpw.c
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 1992 , Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2005 , Tomasz Kłoczko
+ * 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>
+
+#ifndef HAVE_LCKPWDF
+
+#ident "$Id$"
+
+#include "prototypes.h"
+#include "defines.h"
+#include "pwio.h"
+#include "shadowio.h"
+/*
+ * lckpwdf - lock the password files
+ */
+int lckpwdf (void)
+{
+ int i;
+
+ /*
+ * We have 15 seconds to lock the whole mess
+ */
+
+ for (i = 0; i < 15; i++)
+ if (pw_lock ())
+ break;
+ else
+ sleep (1);
+
+ /*
+ * Did we run out of time?
+ */
+
+ if (i == 15)
+ return -1;
+
+ /*
+ * Nope, use any remaining time to lock the shadow password
+ * file.
+ */
+
+ for (; i < 15; i++)
+ if (spw_lock ())
+ break;
+ else
+ sleep (1);
+
+ /*
+ * Out of time yet?
+ */
+
+ if (i == 15) {
+ pw_unlock ();
+ return -1;
+ }
+
+ /*
+ * Nope - and both files are now locked.
+ */
+
+ return 0;
+}
+
+/*
+ * ulckpwdf - unlock the password files
+ */
+
+int ulckpwdf (void)
+{
+
+ /*
+ * Unlock both files.
+ */
+
+ return (pw_unlock () && spw_unlock ())? 0 : -1;
+}
+#else
+extern int errno; /* warning: ANSI C forbids an empty source file */
+#endif
diff --git a/lib/nscd.c b/lib/nscd.c
new file mode 100644
index 0000000..7adb58f
--- /dev/null
+++ b/lib/nscd.c
@@ -0,0 +1,57 @@
+/* Author: Peter Vrabec <pvrabec@redhat.com> */
+
+#include <config.h>
+#ifdef USE_NSCD
+
+#include <stdio.h>
+#include <sys/wait.h>
+#include <sys/types.h>
+#include "exitcodes.h"
+#include "defines.h"
+#include "prototypes.h"
+#include "nscd.h"
+
+#define MSG_NSCD_FLUSH_CACHE_FAILED "%s: Failed to flush the nscd cache.\n"
+
+/*
+ * nscd_flush_cache - flush specified service buffer in nscd cache
+ */
+int nscd_flush_cache (const char *service)
+{
+ int status, code;
+ const char *cmd = "/usr/sbin/nscd";
+ const char *spawnedArgs[] = {"nscd", "-i", service, NULL};
+ const char *spawnedEnv[] = {NULL};
+
+ if (run_command (cmd, spawnedArgs, spawnedEnv, &status) != 0) {
+ /* run_command writes its own more detailed message. */
+ (void) fprintf (stderr, _(MSG_NSCD_FLUSH_CACHE_FAILED), Prog);
+ return -1;
+ }
+
+ code = WEXITSTATUS (status);
+ if (!WIFEXITED (status)) {
+ (void) fprintf (stderr,
+ _("%s: nscd did not terminate normally (signal %d)\n"),
+ Prog, WTERMSIG (status));
+ return -1;
+ } else if (code == E_CMD_NOTFOUND) {
+ /* nscd is not installed, or it is installed but uses an
+ interpreter that is missing. Probably the former. */
+ return 0;
+ } else if (code == 1) {
+ /* nscd is installed, but it isn't active. */
+ return 0;
+ } else if (code != 0) {
+ (void) fprintf (stderr, _("%s: nscd exited with status %d\n"),
+ Prog, code);
+ (void) fprintf (stderr, _(MSG_NSCD_FLUSH_CACHE_FAILED), Prog);
+ return -1;
+ }
+
+ return 0;
+}
+#else /* USE_NSCD */
+extern int errno; /* warning: ANSI C forbids an empty source file */
+#endif /* USE_NSCD */
+
diff --git a/lib/nscd.h b/lib/nscd.h
new file mode 100644
index 0000000..a430b00
--- /dev/null
+++ b/lib/nscd.h
@@ -0,0 +1,13 @@
+#ifndef _NSCD_H_
+#define _NSCD_H_
+
+/*
+ * nscd_flush_cache - flush specified service buffer in nscd cache
+ */
+#ifdef USE_NSCD
+extern int nscd_flush_cache (const char *service);
+#else
+#define nscd_flush_cache(service) (0)
+#endif
+
+#endif
diff --git a/lib/pam_defs.h b/lib/pam_defs.h
new file mode 100644
index 0000000..343fbb4
--- /dev/null
+++ b/lib/pam_defs.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 1999 , Marek Michałkiewicz
+ * Copyright (c) 2001 - 2005, Tomasz Kłoczko
+ * 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>
+#include <security/pam_appl.h>
+#ifdef HAVE_SECURITY_PAM_MISC_H
+# include <security/pam_misc.h>
+#endif
+#ifdef HAVE_SECURITY_OPENPAM_H
+# include <security/openpam.h>
+#endif
+
+
+static struct pam_conv conv = {
+ SHADOW_PAM_CONVERSATION,
+ NULL
+};
+
+/* compatibility with different versions of Linux-PAM */
+#if !HAVE_DECL_PAM_ESTABLISH_CRED
+#define PAM_ESTABLISH_CRED PAM_CRED_ESTABLISH
+#endif
+#if !HAVE_DECL_PAM_DELETE_CRED
+#define PAM_DELETE_CRED PAM_CRED_DELETE
+#endif
+#if !HAVE_DECL_PAM_NEW_AUTHTOK_REQD
+#define PAM_NEW_AUTHTOK_REQD PAM_AUTHTOKEN_REQD
+#endif
+#if !HAVE_DECL_PAM_DATA_SILENT
+#define PAM_DATA_SILENT 0
+#endif
diff --git a/lib/port.c b/lib/port.c
new file mode 100644
index 0000000..438879c
--- /dev/null
+++ b/lib/port.c
@@ -0,0 +1,477 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2005 , Tomasz Kłoczko
+ * Copyright (c) 2008 , 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 <ctype.h>
+#include <errno.h>
+#include "defines.h"
+#include "prototypes.h"
+#include "port.h"
+
+static FILE *ports;
+
+/*
+ * portcmp - compare the name of a port to a /etc/porttime entry
+ *
+ * portcmp works like strcmp, except that if the last character
+ * in a failing match is a '*', the match is considered to have
+ * passed. The "*" match is suppressed whenever the port is "SU",
+ * which is the token the "su" command uses to validate access.
+ * A match returns 0, failure returns non-zero.
+ */
+
+static int portcmp (const char *pattern, const char *port)
+{
+ const char *orig = port;
+
+ while (('\0' != *pattern) && (*pattern == *port)) {
+ pattern++;
+ port++;
+ }
+
+ if (('\0' == *pattern) && ('\0' == *port)) {
+ return 0;
+ }
+ if (('S' == orig[0]) && ('U' == orig[1]) && ('\0' == orig[2])) {
+ return 1;
+ }
+
+ return (*pattern == '*') ? 0 : 1;
+}
+
+/*
+ * setportent - open /etc/porttime file or rewind
+ *
+ * the /etc/porttime file is rewound if already open, or
+ * opened for reading.
+ */
+
+static void setportent (void)
+{
+ if (NULL != ports) {
+ rewind (ports);
+ } else {
+ ports = fopen (PORTS, "r");
+ }
+}
+
+/*
+ * endportent - close the /etc/porttime file
+ *
+ * the /etc/porttime file is closed and the ports variable set
+ * to NULL to indicate that the /etc/porttime file is no longer
+ * open.
+ */
+
+static void endportent (void)
+{
+ if (NULL != ports) {
+ (void) fclose (ports);
+ }
+
+ ports = (FILE *) 0;
+}
+
+/*
+ * getportent - read a single entry from /etc/porttime
+ *
+ * the next line in /etc/porttime is converted to a (struct port)
+ * and a pointer to a static (struct port) is returned to the
+ * invoker. NULL is returned on either EOF or error. errno is
+ * set to EINVAL on error to distinguish the two conditions.
+ */
+
+static struct port *getportent (void)
+{
+ static struct port port; /* static struct to point to */
+ static char buf[BUFSIZ]; /* some space for stuff */
+ static char *ttys[PORT_TTY + 1]; /* some pointers to tty names */
+ static char *users[PORT_IDS + 1]; /* some pointers to user ids */
+ static struct pt_time ptimes[PORT_TIMES + 1]; /* time ranges */
+ char *cp; /* pointer into line */
+ int dtime; /* scratch time of day */
+ int i, j;
+ int saveerr = errno; /* errno value on entry */
+
+ /*
+ * If the ports file is not open, open the file. Do not rewind
+ * since we want to search from the beginning each time.
+ */
+
+ if (NULL == ports) {
+ setportent ();
+ }
+
+ if (NULL == ports) {
+ errno = saveerr;
+ return 0;
+ }
+
+ /*
+ * Common point for beginning a new line -
+ *
+ * - read a line, and NUL terminate
+ * - skip lines which begin with '#'
+ * - parse off the tty names
+ * - parse off a list of user names
+ * - parse off a list of days and times
+ */
+
+ again:
+
+ /*
+ * Get the next line and remove the last character, which
+ * is a '\n'. Lines which begin with '#' are all ignored.
+ */
+
+ if (fgets (buf, (int) sizeof buf, ports) == 0) {
+ errno = saveerr;
+ return 0;
+ }
+ if ('#' == buf[0]) {
+ goto again;
+ }
+
+ /*
+ * Get the name of the TTY device. It is the first colon
+ * separated field, and is the name of the TTY with no
+ * leading "/dev". The entry '*' is used to specify all
+ * TTY devices.
+ */
+
+ buf[strlen (buf) - 1] = 0;
+
+ port.pt_names = ttys;
+ for (cp = buf, j = 0; j < PORT_TTY; j++) {
+ port.pt_names[j] = cp;
+ while (('\0' != *cp) && (':' != *cp) && (',' != *cp)) {
+ cp++;
+ }
+
+ if ('\0' == *cp) {
+ goto again; /* line format error */
+ }
+
+ if (':' == *cp) { /* end of tty name list */
+ break;
+ }
+
+ if (',' == *cp) { /* end of current tty name */
+ *cp++ = '\0';
+ }
+ }
+ *cp = '\0';
+ cp++;
+ port.pt_names[j + 1] = (char *) 0;
+
+ /*
+ * Get the list of user names. It is the second colon
+ * separated field, and is a comma separated list of user
+ * names. The entry '*' is used to specify all usernames.
+ * The last entry in the list is a (char *) 0 pointer.
+ */
+
+ if (':' != *cp) {
+ port.pt_users = users;
+ port.pt_users[0] = cp;
+
+ for (j = 1; ':' != *cp; cp++) {
+ if ((',' == *cp) && (j < PORT_IDS)) {
+ *cp = '\0';
+ cp++;
+ port.pt_users[j] = cp;
+ j++;
+ }
+ }
+ port.pt_users[j] = 0;
+ } else {
+ port.pt_users = 0;
+ }
+
+ if (':' != *cp) {
+ goto again;
+ }
+
+ *cp = '\0';
+ cp++;
+
+ /*
+ * Get the list of valid times. The times field is the third
+ * colon separated field and is a list of days of the week and
+ * times during which this port may be used by this user. The
+ * valid days are 'Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', and 'Sa'.
+ *
+ * In addition, the value 'Al' represents all 7 days, and 'Wk'
+ * represents the 5 weekdays.
+ *
+ * Times are given as HHMM-HHMM. The ending time may be before
+ * the starting time. Days are presumed to wrap at 0000.
+ */
+
+ if ('\0' == *cp) {
+ port.pt_times = 0;
+ return &port;
+ }
+
+ port.pt_times = ptimes;
+
+ /*
+ * Get the next comma separated entry
+ */
+
+ for (j = 0; ('\0' != *cp) && (j < PORT_TIMES); j++) {
+
+ /*
+ * Start off with no days of the week
+ */
+
+ port.pt_times[j].t_days = 0;
+
+ /*
+ * Check each two letter sequence to see if it is
+ * one of the abbreviations for the days of the
+ * week or the other two values.
+ */
+
+ for (i = 0;
+ ('\0' != cp[i]) && ('\0' != cp[i + 1]) && isalpha (cp[i]);
+ i += 2) {
+ switch ((cp[i] << 8) | (cp[i + 1])) {
+ case ('S' << 8) | 'u':
+ port.pt_times[j].t_days |= 01;
+ break;
+ case ('M' << 8) | 'o':
+ port.pt_times[j].t_days |= 02;
+ break;
+ case ('T' << 8) | 'u':
+ port.pt_times[j].t_days |= 04;
+ break;
+ case ('W' << 8) | 'e':
+ port.pt_times[j].t_days |= 010;
+ break;
+ case ('T' << 8) | 'h':
+ port.pt_times[j].t_days |= 020;
+ break;
+ case ('F' << 8) | 'r':
+ port.pt_times[j].t_days |= 040;
+ break;
+ case ('S' << 8) | 'a':
+ port.pt_times[j].t_days |= 0100;
+ break;
+ case ('W' << 8) | 'k':
+ port.pt_times[j].t_days |= 076;
+ break;
+ case ('A' << 8) | 'l':
+ port.pt_times[j].t_days |= 0177;
+ break;
+ default:
+ errno = EINVAL;
+ return 0;
+ }
+ }
+
+ /*
+ * The default is 'Al' if no days were seen.
+ */
+
+ if (0 == i) {
+ port.pt_times[j].t_days = 0177;
+ }
+
+ /*
+ * The start and end times are separated from each
+ * other by a '-'. The times are four digit numbers
+ * representing the times of day.
+ */
+
+ for (dtime = 0; ('\0' != cp[i]) && isdigit (cp[i]); i++) {
+ dtime = dtime * 10 + cp[i] - '0';
+ }
+
+ if (('-' != cp[i]) || (dtime > 2400) || ((dtime % 100) > 59)) {
+ goto again;
+ }
+ port.pt_times[j].t_start = dtime;
+ cp = cp + i + 1;
+
+ for (dtime = 0, i = 0;
+ ('\0' != cp[i]) && isdigit (cp[i]);
+ i++) {
+ dtime = dtime * 10 + cp[i] - '0';
+ }
+
+ if ( ((',' != cp[i]) && ('\0' != cp[i]))
+ || (dtime > 2400)
+ || ((dtime % 100) > 59)) {
+ goto again;
+ }
+
+ port.pt_times[j].t_end = dtime;
+ cp = cp + i + 1;
+ }
+
+ /*
+ * The end of the list is indicated by a pair of -1's for the
+ * start and end times.
+ */
+
+ port.pt_times[j].t_start = port.pt_times[j].t_end = -1;
+
+ return &port;
+}
+
+/*
+ * getttyuser - get ports information for user and tty
+ *
+ * getttyuser() searches the ports file for an entry with a TTY
+ * and user field both of which match the supplied TTY and
+ * user name. The file is searched from the beginning, so the
+ * entries are treated as an ordered list.
+ */
+
+static struct port *getttyuser (const char *tty, const char *user)
+{
+ int i, j;
+ struct port *port;
+
+ setportent ();
+
+ while ((port = getportent ()) != NULL) {
+ if ( (0 == port->pt_names)
+ || (0 == port->pt_users)) {
+ continue;
+ }
+
+ for (i = 0; NULL != port->pt_names[i]; i++) {
+ if (portcmp (port->pt_names[i], tty) == 0) {
+ break;
+ }
+ }
+
+ if (port->pt_names[i] == 0) {
+ continue;
+ }
+
+ for (j = 0; NULL != port->pt_users[j]; j++) {
+ if ( (strcmp (user, port->pt_users[j]) == 0)
+ || (strcmp (port->pt_users[j], "*") == 0)) {
+ break;
+ }
+ }
+
+ if (port->pt_users[j] != 0) {
+ break;
+ }
+ }
+ endportent ();
+ return port;
+}
+
+/*
+ * isttytime - tell if a given user may login at a particular time
+ *
+ * isttytime searches the ports file for an entry which matches
+ * the user name and TTY given.
+ */
+
+bool isttytime (const char *id, const char *port, time_t when)
+{
+ int i;
+ int dtime;
+ struct port *pp;
+ struct tm *tm;
+
+ /*
+ * Try to find a matching entry for this user. Default to
+ * letting the user in - there are plenty of ways to have an
+ * entry to match all users.
+ */
+
+ pp = getttyuser (port, id);
+ if (NULL == pp) {
+ return true;
+ }
+
+ /*
+ * The entry is there, but has no time entries - don't
+ * ever let them login.
+ */
+
+ if (0 == pp->pt_times) {
+ return false;
+ }
+
+ /*
+ * The current time is converted to HHMM format for
+ * comparison against the time values in the TTY entry.
+ */
+
+ tm = localtime (&when);
+ dtime = tm->tm_hour * 100 + tm->tm_min;
+
+ /*
+ * Each time entry is compared against the current
+ * time. For entries with the start after the end time,
+ * the comparison is made so that the time is between
+ * midnight and either the start or end time.
+ */
+
+ for (i = 0; pp->pt_times[i].t_start != -1; i++) {
+ if (!(pp->pt_times[i].t_days & PORT_DAY (tm->tm_wday))) {
+ continue;
+ }
+
+ if (pp->pt_times[i].t_start <= pp->pt_times[i].t_end) {
+ if ( (dtime >= pp->pt_times[i].t_start)
+ && (dtime <= pp->pt_times[i].t_end)) {
+ return true;
+ }
+ } else {
+ if ( (dtime >= pp->pt_times[i].t_start)
+ || (dtime <= pp->pt_times[i].t_end)) {
+ return true;
+ }
+ }
+ }
+
+ /*
+ * No matching time entry was found, user shouldn't
+ * be let in right now.
+ */
+
+ return false;
+}
+
diff --git a/lib/port.h b/lib/port.h
new file mode 100644
index 0000000..2da56b2
--- /dev/null
+++ b/lib/port.h
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 1989 - 1991, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2005 , Tomasz Kłoczko
+ * 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.
+ */
+
+/*
+ * port.h - structure of /etc/porttime
+ *
+ * $Id$
+ *
+ * Each entry in /etc/porttime consists of a TTY device
+ * name or "*" to indicate all TTY devices, followed by
+ * a list of 1 or more user IDs or "*" to indicate all
+ * user names, followed by a list of zero or more valid
+ * login times. Login time entries consist of zero or
+ * more day names (Su, Mo, Tu, We, Th, Fr, Sa, Wk, Al)
+ * followed by a pair of time values in HHMM format
+ * separated by a "-".
+ */
+
+/*
+ * PORTS - Name of system port access time file.
+ * PORT_IDS - Allowable number of IDs per entry.
+ * PORT_TTY - Allowable number of TTYs per entry.
+ * PORT_TIMES - Allowable number of time entries per entry.
+ * PORT_DAY - Day of the week to a bit value (0 = Sunday).
+ */
+
+#define PORTS "/etc/porttime"
+#define PORT_IDS 64
+#define PORT_TTY 64
+#define PORT_TIMES 24
+#define PORT_DAY(day) (1<<(day))
+
+/*
+ * pt_names - pointer to array of device names in /dev/
+ * pt_users - pointer to array of applicable user IDs.
+ * pt_times - pointer to list of allowable time periods.
+ */
+
+struct port {
+ char **pt_names;
+ char **pt_users;
+ struct pt_time *pt_times;
+};
+
+/*
+ * t_days - bit array for each day of the week (0 = Sunday)
+ * t_start - starting time for this entry
+ * t_end - ending time for this entry
+ */
+
+struct pt_time {
+ short t_days;
+ short t_start;
+ short t_end;
+};
diff --git a/lib/prototypes.h b/lib/prototypes.h
new file mode 100644
index 0000000..22603b9
--- /dev/null
+++ b/lib/prototypes.h
@@ -0,0 +1,466 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2010, 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.
+ */
+
+/*
+ * prototypes.h
+ *
+ * prototypes of libmisc functions, and private lib functions.
+ *
+ * $Id$
+ *
+ */
+
+#ifndef _PROTOTYPES_H
+#define _PROTOTYPES_H
+
+#include <config.h>
+
+#include <sys/stat.h>
+#ifdef USE_UTMPX
+#include <utmpx.h>
+#else
+#include <utmp.h>
+#endif
+#include <sys/types.h>
+#include <pwd.h>
+#include <grp.h>
+#include <shadow.h>
+#include <lastlog.h>
+
+#include "defines.h"
+#include "commonio.h"
+
+extern /*@observer@*/ const char *Prog;
+
+/* addgrps.c */
+#if defined (HAVE_SETGROUPS) && ! defined (USE_PAM)
+extern int add_groups (const char *);
+#endif
+
+/* age.c */
+extern void agecheck (/*@null@*/const struct spwd *);
+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);
+
+/* chowndir.c */
+extern int chown_tree (const char *root,
+ uid_t old_uid, uid_t new_uid,
+ gid_t old_gid, gid_t new_gid);
+
+/* chowntty.c */
+extern void chown_tty (const struct passwd *);
+
+/* cleanup.c */
+typedef /*@null@*/void (*cleanup_function) (/*@null@*/void *arg);
+void add_cleanup (/*@notnull@*/cleanup_function pcf, /*@null@*/void *arg);
+void del_cleanup (/*@notnull@*/cleanup_function pcf);
+void do_cleanups (void);
+
+/* cleanup_group.c */
+struct cleanup_info_mod {
+ char *audit_msg;
+ char *action;
+ /*@observer@*/const char *name;
+};
+void cleanup_report_add_group (void *group_name);
+void cleanup_report_add_group_group (void *group_name);
+#ifdef SHADOWGRP
+void cleanup_report_add_group_gshadow (void *group_name);
+#endif
+void cleanup_report_del_group (void *group_name);
+void cleanup_report_del_group_group (void *group_name);
+#ifdef SHADOWGRP
+void cleanup_report_del_group_gshadow (void *group_name);
+#endif
+void cleanup_report_mod_passwd (void *cleanup_info);
+void cleanup_report_mod_group (void *cleanup_info);
+void cleanup_report_mod_gshadow (void *cleanup_info);
+void cleanup_unlock_group (/*@null@*/void *unused);
+#ifdef SHADOWGRP
+void cleanup_unlock_gshadow (/*@null@*/void *unused);
+#endif
+void cleanup_unlock_passwd (/*@null@*/void *unused);
+
+/* console.c */
+extern bool console (const char *);
+
+/* copydir.c */
+extern int copy_tree (const char *src_root, const char *dst_root,
+ bool copy_root,
+ bool reset_selinux,
+ uid_t old_uid, uid_t new_uid,
+ gid_t old_gid, gid_t new_gid);
+
+/* encrypt.c */
+extern /*@exposed@*//*@null@*/char *pw_encrypt (const char *, const char *);
+
+/* entry.c */
+extern void pw_entry (const char *, struct passwd *);
+
+/* env.c */
+extern void addenv (const char *, /*@null@*/const char *);
+extern void initenv (void);
+extern void set_env (int, char *const *);
+extern void sanitize_env (void);
+
+/* fields.c */
+extern void change_field (char *, size_t, const char *);
+extern int valid_field (const char *, const char *);
+
+/* find_new_gid.c */
+extern int find_new_gid (bool sys_group,
+ gid_t *gid,
+ /*@null@*/gid_t const *preferred_gid);
+
+/* find_new_uid.c */
+extern int find_new_uid (bool sys_user,
+ uid_t *uid,
+ /*@null@*/uid_t const *preferred_uid);
+
+#ifdef ENABLE_SUBIDS
+/* find_new_sub_gids.c */
+extern int find_new_sub_gids (const char *owner,
+ gid_t *range_start, unsigned long *range_count);
+
+/* find_new_sub_uids.c */
+extern int find_new_sub_uids (const char *owner,
+ uid_t *range_start, unsigned long *range_count);
+#endif /* ENABLE_SUBIDS */
+
+
+/* get_gid.c */
+extern int get_gid (const char *gidstr, gid_t *gid);
+
+/* getgr_nam_gid.c */
+extern /*@only@*//*@null@*/struct group *getgr_nam_gid (/*@null@*/const char *grname);
+
+/* getlong.c */
+extern int getlong (const char *numstr, /*@out@*/long int *result);
+
+/* get_pid.c */
+extern int get_pid (const char *pidstr, pid_t *pid);
+
+/* getrange */
+extern int getrange (char *range,
+ unsigned long *min, bool *has_min,
+ unsigned long *max, bool *has_max);
+
+/* gettime.c */
+extern time_t gettime ();
+
+/* get_uid.c */
+extern int get_uid (const char *uidstr, uid_t *uid);
+
+/* getulong.c */
+extern int getulong (const char *numstr, /*@out@*/unsigned long int *result);
+
+/* fputsx.c */
+extern /*@null@*/char *fgetsx (/*@returned@*/ /*@out@*/char *, int, FILE *);
+extern int fputsx (const char *, FILE *);
+
+/* groupio.c */
+extern void __gr_del_entry (const struct commonio_entry *ent);
+extern /*@observer@*/const struct commonio_db *__gr_get_db (void);
+extern /*@dependent@*/ /*@null@*/struct commonio_entry *__gr_get_head (void);
+extern void __gr_set_changed (void);
+
+/* groupmem.c */
+extern /*@null@*/ /*@only@*/struct group *__gr_dup (const struct group *grent);
+extern void gr_free (/*@out@*/ /*@only@*/struct group *grent);
+
+/* hushed.c */
+extern bool hushed (const char *username);
+
+/* audit_help.c */
+#ifdef WITH_AUDIT
+extern int audit_fd;
+extern void audit_help_open (void);
+/* Use AUDIT_NO_ID when a name is provided to audit_logger instead of an ID */
+#define AUDIT_NO_ID ((unsigned int) -1)
+typedef enum {
+ SHADOW_AUDIT_FAILURE = 0,
+ SHADOW_AUDIT_SUCCESS = 1} shadow_audit_result;
+extern void audit_logger (int type, const char *pgname, const char *op,
+ const char *name, unsigned int id,
+ shadow_audit_result result);
+void audit_logger_message (const char *message, shadow_audit_result result);
+#endif
+
+/* limits.c */
+#ifndef USE_PAM
+extern void setup_limits (const struct passwd *);
+#endif
+
+/* list.c */
+extern /*@only@*/ /*@out@*/char **add_list (/*@returned@*/ /*@only@*/char **, const char *);
+extern /*@only@*/ /*@out@*/char **del_list (/*@returned@*/ /*@only@*/char **, const char *);
+extern /*@only@*/ /*@out@*/char **dup_list (char *const *);
+extern bool is_on_list (char *const *list, const char *member);
+extern /*@only@*/char **comma_to_list (const char *);
+
+/* log.c */
+extern void dolastlog (
+ struct lastlog *ll,
+ const struct passwd *pw,
+ /*@unique@*/const char *line,
+ /*@unique@*/const char *host);
+
+/* login_nopam.c */
+extern int login_access (const char *user, const char *from);
+
+/* loginprompt.c */
+extern void login_prompt (const char *, char *, int);
+
+/* mail.c */
+extern void mailcheck (void);
+
+/* motd.c */
+extern void motd (void);
+
+/* myname.c */
+extern /*@null@*//*@only@*/struct passwd *get_my_pwent (void);
+
+/* pam_pass_non_interactive.c */
+#ifdef USE_PAM
+extern int do_pam_passwd_non_interactive (const char *pam_service,
+ const char *username,
+ const char* password);
+#endif /* USE_PAM */
+
+/* obscure.c */
+#ifndef USE_PAM
+extern bool obscure (const char *, const char *, const struct passwd *);
+#endif
+
+/* pam_pass.c */
+#ifdef USE_PAM
+extern void do_pam_passwd (const char *user, bool silent, bool change_expired);
+#endif
+
+/* 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 *);
+#endif
+
+/* pwdcheck.c */
+#ifndef USE_PAM
+extern void passwd_check (const char *, const char *, const char *);
+#endif
+
+/* pwd_init.c */
+extern void pwd_init (void);
+
+/* pwio.c */
+extern void __pw_del_entry (const struct commonio_entry *ent);
+extern struct commonio_db *__pw_get_db (void);
+extern /*@dependent@*/ /*@null@*/struct commonio_entry *__pw_get_head (void);
+
+/* pwmem.c */
+extern /*@null@*/ /*@only@*/struct passwd *__pw_dup (const struct passwd *pwent);
+extern void pw_free (/*@out@*/ /*@only@*/struct passwd *pwent);
+
+/* remove_tree.c */
+extern int remove_tree (const char *root, bool remove_root);
+
+/* rlogin.c */
+extern int do_rlogin (const char *remote_host, char *name, size_t namelen,
+ char *term, size_t termlen);
+
+/* root_flag.c */
+extern void process_root_flag (const char* short_opt, int argc, char **argv);
+
+/* salt.c */
+extern /*@observer@*/const char *crypt_make_salt (/*@null@*//*@observer@*/const char *meth, /*@null@*/void *arg);
+
+/* selinux.c */
+#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 */
+#ifdef WITH_SELINUX
+extern int set_seuser(const char *login_name, const char *seuser_name);
+extern int del_seuser(const char *login_name);
+#endif
+
+/* setugid.c */
+extern int setup_groups (const struct passwd *info);
+extern int change_uid (const struct passwd *info);
+#if (defined HAVE_INITGROUPS) && (! defined USE_PAM)
+extern int setup_uid_gid (const struct passwd *info, bool is_console);
+#else
+extern int setup_uid_gid (const struct passwd *info);
+#endif
+
+/* setup.c */
+extern void setup (struct passwd *);
+
+/* setupenv.c */
+extern void setup_env (struct passwd *);
+
+/* sgetgrent.c */
+extern struct group *sgetgrent (const char *buf);
+
+/* sgetpwent.c */
+extern struct passwd *sgetpwent (const char *buf);
+
+/* sgetspent.c */
+#ifndef HAVE_SGETSPENT
+extern struct spwd *sgetspent (const char *string);
+#endif
+
+/* sgroupio.c */
+extern void __sgr_del_entry (const struct commonio_entry *ent);
+extern /*@null@*/ /*@only@*/struct sgrp *__sgr_dup (const struct sgrp *sgent);
+extern void sgr_free (/*@out@*/ /*@only@*/struct sgrp *sgent);
+extern /*@dependent@*/ /*@null@*/struct commonio_entry *__sgr_get_head (void);
+extern void __sgr_set_changed (void);
+
+/* shadowio.c */
+extern /*@dependent@*/ /*@null@*/struct commonio_entry *__spw_get_head (void);
+extern void __spw_del_entry (const struct commonio_entry *ent);
+
+/* shadowmem.c */
+extern /*@null@*/ /*@only@*/struct spwd *__spw_dup (const struct spwd *spent);
+extern void spw_free (/*@out@*/ /*@only@*/struct spwd *spent);
+
+/* shell.c */
+extern int shell (const char *file, /*@null@*/const char *arg, char *const envp[]);
+
+/* spawn.c */
+extern int run_command (const char *cmd, const char *argv[],
+ /*@null@*/const char *envp[], /*@out@*/int *status);
+
+/* strtoday.c */
+extern long strtoday (const char *);
+
+/* suauth.c */
+extern int check_su_auth (const char *actual_id,
+ const char *wanted_id,
+ bool su_to_root);
+
+/* sulog.c */
+extern void sulog (const char *tty,
+ bool success,
+ const char *oldname,
+ const char *name);
+
+/* sub.c */
+extern void subsystem (const struct passwd *);
+
+/* ttytype.c */
+extern void ttytype (const char *);
+
+/* tz.c */
+#ifndef USE_PAM
+extern /*@observer@*/const char *tz (const char *);
+#endif
+
+/* ulimit.c */
+extern int set_filesize_limit (int blocks);
+
+/* user_busy.c */
+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);
+#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 utmpx *ut);
+extern int setutmpx (struct utmpx *utx);
+#endif /* USE_UTMPX */
+
+/* valid.c */
+extern bool valid (const char *, const struct passwd *);
+
+/* xmalloc.c */
+extern /*@maynotreturn@*/ /*@only@*//*@out@*//*@notnull@*/char *xmalloc (size_t size)
+ /*@ensures MaxSet(result) == (size - 1); @*/;
+extern /*@maynotreturn@*/ /*@only@*//*@notnull@*/char *xstrdup (const char *);
+
+/* xgetpwnam.c */
+extern /*@null@*/ /*@only@*/struct passwd *xgetpwnam (const char *);
+/* xgetpwuid.c */
+extern /*@null@*/ /*@only@*/struct passwd *xgetpwuid (uid_t);
+/* xgetgrnam.c */
+extern /*@null@*/ /*@only@*/struct group *xgetgrnam (const char *);
+/* xgetgrgid.c */
+extern /*@null@*/ /*@only@*/struct group *xgetgrgid (gid_t);
+/* xgetspnam.c */
+extern /*@null@*/ /*@only@*/struct spwd *xgetspnam(const char *);
+
+/* yesno.c */
+extern bool yes_or_no (bool read_only);
+
+#endif /* _PROTOTYPES_H */
diff --git a/lib/pwauth.c b/lib/pwauth.c
new file mode 100644
index 0000000..9e24fbf
--- /dev/null
+++ b/lib/pwauth.c
@@ -0,0 +1,234 @@
+/*
+ * Copyright (c) 1992 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2008 - 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.
+ */
+
+#include <config.h>
+
+#ifndef USE_PAM
+#ident "$Id$"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include "prototypes.h"
+#include "defines.h"
+#include "pwauth.h"
+#include "getdef.h"
+#ifdef SKEY
+#include <skey.h>
+#endif
+#ifdef __linux__ /* standard password prompt by default */
+static const char *PROMPT = gettext_noop ("Password: ");
+#else
+static const char *PROMPT = gettext_noop ("%s's Password: ");
+#endif
+
+bool wipe_clear_pass = true;
+/*@null@*/char *clear_pass = NULL;
+
+/*
+ * pw_auth - perform getpass/crypt authentication
+ *
+ * pw_auth gets the user's cleartext password and encrypts it
+ * using the salt in the encrypted password. The results are
+ * compared.
+ */
+
+int pw_auth (const char *cipher,
+ const char *user,
+ int reason,
+ /*@null@*/const char *input)
+{
+ char prompt[1024];
+ char *clear = NULL;
+ const char *cp;
+ const char *encrypted;
+ int retval;
+
+#ifdef SKEY
+ bool use_skey = false;
+ char challenge_info[40];
+ struct skey skey;
+#endif
+
+ /*
+ * There are programs for adding and deleting authentication data.
+ */
+
+ if ((PW_ADD == reason) || (PW_DELETE == reason)) {
+ return 0;
+ }
+
+ /*
+ * There are even programs for changing the user name ...
+ */
+
+ if ((PW_CHANGE == reason) && (NULL != input)) {
+ return 0;
+ }
+
+ /*
+ * WARNING:
+ *
+ * When we change a password and we are root, we don't prompt.
+ * This is so root can change any password without having to
+ * know it. This is a policy decision that might have to be
+ * revisited.
+ */
+
+ if ((PW_CHANGE == reason) && (getuid () == 0)) {
+ return 0;
+ }
+
+ /*
+ * WARNING:
+ *
+ * When we are logging in a user with no ciphertext password,
+ * we don't prompt for the password or anything. In reality
+ * the user could just hit <ENTER>, so it doesn't really
+ * matter.
+ */
+
+ if ((NULL == cipher) || ('\0' == *cipher)) {
+ return 0;
+ }
+
+#ifdef SKEY
+ /*
+ * If the user has an S/KEY entry show them the pertinent info
+ * and then we can try validating the created cyphertext and the SKEY.
+ * If there is no SKEY information we default to not using SKEY.
+ */
+
+# ifdef SKEY_BSD_STYLE
+ /*
+ * Some BSD updates to the S/KEY API adds a fourth parameter; the
+ * sizeof of the challenge info buffer.
+ */
+# define skeychallenge(s,u,c) skeychallenge(s,u,c,sizeof(c))
+# endif
+
+ if (skeychallenge (&skey, user, challenge_info) == 0) {
+ use_skey = true;
+ }
+#endif
+
+ /*
+ * Prompt for the password as required. FTPD and REXECD both
+ * get the cleartext password for us.
+ */
+
+ if ((PW_FTP != reason) && (PW_REXEC != reason) && (NULL == input)) {
+ cp = getdef_str ("LOGIN_STRING");
+ if (NULL == cp) {
+ cp = _(PROMPT);
+ }
+#ifdef SKEY
+ if (use_skey) {
+ printf ("[%s]\n", challenge_info);
+ }
+#endif
+
+ snprintf (prompt, sizeof prompt, cp, user);
+ clear = getpass (prompt);
+ if (NULL == clear) {
+ static char c[1];
+
+ c[0] = '\0';
+ clear = c;
+ }
+ input = clear;
+ }
+
+ /*
+ * Convert the cleartext password into a ciphertext string.
+ * If the two match, the return value will be zero, which is
+ * SUCCESS. Otherwise we see if SKEY is being used and check
+ * the results there as well.
+ */
+
+ encrypted = pw_encrypt (input, cipher);
+ if (NULL != encrypted) {
+ retval = strcmp (encrypted, cipher);
+ } else {
+ retval = -1;
+ }
+
+#ifdef SKEY
+ /*
+ * If (1) The password fails to match, and
+ * (2) The password is empty and
+ * (3) We are using OPIE or S/Key, then
+ * ...Re-prompt, with echo on.
+ * -- AR 8/22/1999
+ */
+ if ((0 != retval) && ('\0' == input[0]) && use_skey) {
+ clear = getpass (prompt);
+ if (NULL == clear) {
+ static char c[1];
+
+ c[0] = '\0';
+ clear = c;
+ }
+ input = clear;
+ }
+
+ if ((0 != retval) && use_skey) {
+ int passcheck = -1;
+
+ if (skeyverify (&skey, input) == 0) {
+ passcheck = skey.n;
+ }
+ if (passcheck > 0) {
+ retval = 0;
+ }
+ }
+#endif
+
+ /*
+ * Things like RADIUS authentication may need the password -
+ * if the external variable wipe_clear_pass is zero, we will
+ * not wipe it (the caller should wipe clear_pass when it is
+ * no longer needed). --marekm
+ */
+
+ clear_pass = clear;
+ if (wipe_clear_pass && (NULL != clear) && ('\0' != *clear)) {
+ strzero (clear);
+ }
+ return retval;
+}
+#else /* !USE_PAM */
+extern int errno; /* warning: ANSI C forbids an empty source file */
+#endif /* !USE_PAM */
diff --git a/lib/pwauth.h b/lib/pwauth.h
new file mode 100644
index 0000000..d6c71dd
--- /dev/null
+++ b/lib/pwauth.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 1992 - 1993, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 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.
+ */
+
+/*
+ * $Id$
+ */
+
+#ifndef USE_PAM
+int pw_auth (const char *cipher,
+ const char *user,
+ int flag,
+ /*@null@*/const char *input);
+#endif /* !USE_PAM */
+
+/*
+ * Local access
+ */
+
+#define PW_SU 1
+#define PW_LOGIN 2
+
+/*
+ * Administrative functions
+ */
+
+#define PW_ADD 101
+#define PW_CHANGE 102
+#define PW_DELETE 103
+
+/*
+ * Network access
+ */
+
+#define PW_TELNET 201
+#define PW_RLOGIN 202
+#define PW_FTP 203
+#define PW_REXEC 204
diff --git a/lib/pwio.c b/lib/pwio.c
new file mode 100644
index 0000000..127719c
--- /dev/null
+++ b/lib/pwio.c
@@ -0,0 +1,227 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 , Michał Moskal
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * 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.
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include "prototypes.h"
+#include "defines.h"
+#include <pwd.h>
+#include <stdio.h>
+#include "commonio.h"
+#include "pwio.h"
+
+static /*@null@*/ /*@only@*/void *passwd_dup (const void *ent)
+{
+ const struct passwd *pw = ent;
+
+ return __pw_dup (pw);
+}
+
+static void passwd_free (/*@out@*/ /*@only@*/void *ent)
+{
+ struct passwd *pw = ent;
+
+ pw_free (pw);
+}
+
+static const char *passwd_getname (const void *ent)
+{
+ const struct passwd *pw = ent;
+
+ return pw->pw_name;
+}
+
+static void *passwd_parse (const char *line)
+{
+ return (void *) sgetpwent (line);
+}
+
+static int passwd_put (const void *ent, FILE * file)
+{
+ const struct passwd *pw = ent;
+
+ if ( (NULL == pw)
+ || (valid_field (pw->pw_name, ":\n") == -1)
+ || (valid_field (pw->pw_passwd, ":\n") == -1)
+ || (pw->pw_uid == (uid_t)-1)
+ || (pw->pw_gid == (gid_t)-1)
+ || (valid_field (pw->pw_gecos, ":\n") == -1)
+ || (valid_field (pw->pw_dir, ":\n") == -1)
+ || (valid_field (pw->pw_shell, ":\n") == -1)) {
+ return -1;
+ }
+
+ return (putpwent (pw, file) == -1) ? -1 : 0;
+}
+
+static struct commonio_ops passwd_ops = {
+ passwd_dup,
+ passwd_free,
+ passwd_getname,
+ passwd_parse,
+ passwd_put,
+ fgets,
+ fputs,
+ NULL, /* open_hook */
+ NULL /* close_hook */
+};
+
+static struct commonio_db passwd_db = {
+ PASSWD_FILE, /* filename */
+ &passwd_ops, /* ops */
+ NULL, /* fp */
+#ifdef WITH_SELINUX
+ NULL, /* scontext */
+#endif
+ 0644, /* st_mode */
+ 0, /* st_uid */
+ 0, /* st_gid */
+ NULL, /* head */
+ NULL, /* tail */
+ NULL, /* cursor */
+ false, /* changed */
+ false, /* isopen */
+ false, /* locked */
+ false, /* readonly */
+ false /* setname */
+};
+
+int pw_setdbname (const char *filename)
+{
+ return commonio_setname (&passwd_db, filename);
+}
+
+/*@observer@*/const char *pw_dbname (void)
+{
+ return passwd_db.filename;
+}
+
+int pw_lock (void)
+{
+ return commonio_lock (&passwd_db);
+}
+
+int pw_open (int mode)
+{
+ return commonio_open (&passwd_db, mode);
+}
+
+/*@observer@*/ /*@null@*/const struct passwd *pw_locate (const char *name)
+{
+ return commonio_locate (&passwd_db, name);
+}
+
+/*@observer@*/ /*@null@*/const struct passwd *pw_locate_uid (uid_t uid)
+{
+ const struct passwd *pwd;
+
+ pw_rewind ();
+ while ( ((pwd = pw_next ()) != NULL)
+ && (pwd->pw_uid != uid)) {
+ }
+
+ return pwd;
+}
+
+int pw_update (const struct passwd *pw)
+{
+ return commonio_update (&passwd_db, (const void *) pw);
+}
+
+int pw_remove (const char *name)
+{
+ return commonio_remove (&passwd_db, name);
+}
+
+int pw_rewind (void)
+{
+ return commonio_rewind (&passwd_db);
+}
+
+/*@observer@*/ /*@null@*/const struct passwd *pw_next (void)
+{
+ return commonio_next (&passwd_db);
+}
+
+int pw_close (void)
+{
+ return commonio_close (&passwd_db);
+}
+
+int pw_unlock (void)
+{
+ return commonio_unlock (&passwd_db);
+}
+
+/*@null@*/struct commonio_entry *__pw_get_head (void)
+{
+ return passwd_db.head;
+}
+
+void __pw_del_entry (const struct commonio_entry *ent)
+{
+ commonio_del_entry (&passwd_db, ent);
+}
+
+struct commonio_db *__pw_get_db (void)
+{
+ return &passwd_db;
+}
+
+static int pw_cmp (const void *p1, const void *p2)
+{
+ uid_t u1, u2;
+
+ if ((*(struct commonio_entry **) p1)->eptr == NULL)
+ return 1;
+ if ((*(struct commonio_entry **) p2)->eptr == NULL)
+ return -1;
+
+ u1 = ((struct passwd *) (*(struct commonio_entry **) p1)->eptr)->pw_uid;
+ u2 = ((struct passwd *) (*(struct commonio_entry **) p2)->eptr)->pw_uid;
+
+ if (u1 < u2)
+ return -1;
+ else if (u1 > u2)
+ return 1;
+ else
+ return 0;
+}
+
+/* Sort entries by UID */
+int pw_sort ()
+{
+ return commonio_sort (&passwd_db, pw_cmp);
+}
diff --git a/lib/pwio.h b/lib/pwio.h
new file mode 100644
index 0000000..2db85e0
--- /dev/null
+++ b/lib/pwio.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2005 , Michał Moskal
+ * Copyright (c) 2005 , Tomasz Kłoczko
+ * Copyright (c) 2008 , 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.
+ */
+
+/* $Id$ */
+#ifndef _PWIO_H
+#define _PWIO_H
+
+#include <sys/types.h>
+#include <pwd.h>
+
+extern int pw_close (void);
+extern /*@observer@*/ /*@null@*/const struct passwd *pw_locate (const char *name);
+extern /*@observer@*/ /*@null@*/const struct passwd *pw_locate_uid (uid_t uid);
+extern int pw_lock (void);
+extern int pw_setdbname (const char *filename);
+extern /*@observer@*/const char *pw_dbname (void);
+extern /*@observer@*/ /*@null@*/const struct passwd *pw_next (void);
+extern int pw_open (int mode);
+extern int pw_remove (const char *name);
+extern int pw_rewind (void);
+extern int pw_unlock (void);
+extern int pw_update (const struct passwd *pw);
+extern int pw_sort (void);
+
+#endif
diff --git a/lib/pwmem.c b/lib/pwmem.c
new file mode 100644
index 0000000..17d2eb2
--- /dev/null
+++ b/lib/pwmem.c
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 , Michał Moskal
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2013, 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 "defines.h"
+#include "prototypes.h"
+#include "pwio.h"
+
+/*@null@*/ /*@only@*/struct passwd *__pw_dup (const struct passwd *pwent)
+{
+ struct passwd *pw;
+
+ pw = (struct passwd *) malloc (sizeof *pw);
+ if (NULL == pw) {
+ return NULL;
+ }
+ /* The libc might define other fields. They won't be copied. */
+ memset (pw, 0, sizeof *pw);
+ pw->pw_uid = pwent->pw_uid;
+ pw->pw_gid = pwent->pw_gid;
+ /*@-mustfreeonly@*/
+ pw->pw_name = strdup (pwent->pw_name);
+ /*@=mustfreeonly@*/
+ if (NULL == pw->pw_name) {
+ pw_free(pw);
+ return NULL;
+ }
+ /*@-mustfreeonly@*/
+ pw->pw_passwd = strdup (pwent->pw_passwd);
+ /*@=mustfreeonly@*/
+ if (NULL == pw->pw_passwd) {
+ pw_free(pw);
+ return NULL;
+ }
+ /*@-mustfreeonly@*/
+ pw->pw_gecos = strdup (pwent->pw_gecos);
+ /*@=mustfreeonly@*/
+ if (NULL == pw->pw_gecos) {
+ pw_free(pw);
+ return NULL;
+ }
+ /*@-mustfreeonly@*/
+ pw->pw_dir = strdup (pwent->pw_dir);
+ /*@=mustfreeonly@*/
+ if (NULL == pw->pw_dir) {
+ pw_free(pw);
+ return NULL;
+ }
+ /*@-mustfreeonly@*/
+ pw->pw_shell = strdup (pwent->pw_shell);
+ /*@=mustfreeonly@*/
+ if (NULL == pw->pw_shell) {
+ pw_free(pw);
+ return NULL;
+ }
+
+ return pw;
+}
+
+void pw_free (/*@out@*/ /*@only@*/struct passwd *pwent)
+{
+ free (pwent->pw_name);
+ if (pwent->pw_passwd) {
+ memzero (pwent->pw_passwd, strlen (pwent->pw_passwd));
+ free (pwent->pw_passwd);
+ }
+ free (pwent->pw_gecos);
+ free (pwent->pw_dir);
+ free (pwent->pw_shell);
+ free (pwent);
+}
+
diff --git a/lib/selinux.c b/lib/selinux.c
new file mode 100644
index 0000000..8cc444f
--- /dev/null
+++ b/lib/selinux.c
@@ -0,0 +1,203 @@
+/*
+ * Copyright (c) 2011 , Peter Vrabec <pvrabec@redhat.com>
+ * 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>
+
+#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;
+
+/*
+ * set_selinux_file_context - Set the security context before any file or
+ * directory creation.
+ *
+ * set_selinux_file_context () should be called before any creation
+ * of file, symlink, directory, ...
+ *
+ * Callers may have to Reset SELinux to create files with default
+ * contexts with reset_selinux_file_context
+ */
+int set_selinux_file_context (const char *dst_name)
+{
+ /*@null@*/security_context_t scontext = NULL;
+
+ if (!selinux_checked) {
+ selinux_enabled = is_selinux_enabled () > 0;
+ selinux_checked = true;
+ }
+
+ if (selinux_enabled) {
+ /* Get the default security context for this file */
+ if (matchpathcon (dst_name, 0, &scontext) < 0) {
+ if (security_getenforce () != 0) {
+ return 1;
+ }
+ }
+ /* Set the security context for the next created file */
+ if (setfscreatecon (scontext) < 0) {
+ if (security_getenforce () != 0) {
+ return 1;
+ }
+ }
+ freecon (scontext);
+ }
+ return 0;
+}
+
+/*
+ * reset_selinux_file_context - Reset the security context to the default
+ * policy behavior
+ *
+ * reset_selinux_file_context () should be called after the context
+ * was changed with set_selinux_file_context ()
+ */
+int reset_selinux_file_context (void)
+{
+ if (!selinux_checked) {
+ selinux_enabled = is_selinux_enabled () > 0;
+ selinux_checked = true;
+ }
+ if (selinux_enabled) {
+ if (setfscreatecon (NULL) != 0) {
+ return 1;
+ }
+ }
+ 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 */
diff --git a/lib/semanage.c b/lib/semanage.c
new file mode 100644
index 0000000..e983f5f
--- /dev/null
+++ b/lib/semanage.c
@@ -0,0 +1,378 @@
+/*
+ * Copyright (c) 2010 , Jakub Hrozek <jhrozek@redhat.com>
+ * Copyright (c) 2011 , Peter Vrabec <pvrabec@redhat.com>
+ * 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>
+
+#ifdef WITH_SELINUX
+
+#include "defines.h"
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#include <stdio.h>
+#include <stdarg.h>
+#include <selinux/selinux.h>
+#include <semanage/semanage.h>
+#include "prototypes.h"
+
+
+#ifndef DEFAULT_SERANGE
+#define DEFAULT_SERANGE "s0"
+#endif
+
+
+static void semanage_error_callback (unused void *varg,
+ semanage_handle_t *handle,
+ const char *fmt, ...)
+{
+ int ret;
+ char * message = NULL;
+ va_list ap;
+
+
+ va_start (ap, fmt);
+ ret = vasprintf (&message, fmt, ap);
+ va_end (ap);
+ if (ret < 0) {
+ /* ENOMEM */
+ return;
+ }
+
+ switch (semanage_msg_get_level (handle)) {
+ case SEMANAGE_MSG_ERR:
+ case SEMANAGE_MSG_WARN:
+ fprintf (stderr, _("[libsemanage]: %s\n"), message);
+ break;
+ case SEMANAGE_MSG_INFO:
+ /* nop */
+ break;
+ }
+
+ free (message);
+}
+
+
+static semanage_handle_t *semanage_init (void)
+{
+ int ret;
+ semanage_handle_t *handle = NULL;
+
+ handle = semanage_handle_create ();
+ if (NULL == handle) {
+ fprintf (stderr,
+ _("Cannot create SELinux management handle\n"));
+ return NULL;
+ }
+
+ semanage_msg_set_callback (handle, semanage_error_callback, NULL);
+
+ ret = semanage_is_managed (handle);
+ if (ret != 1) {
+ fprintf (stderr, _("SELinux policy not managed\n"));
+ goto fail;
+ }
+
+ ret = semanage_access_check (handle);
+ if (ret < SEMANAGE_CAN_READ) {
+ fprintf (stderr, _("Cannot read SELinux policy store\n"));
+ goto fail;
+ }
+
+ ret = semanage_connect (handle);
+ if (ret != 0) {
+ fprintf (stderr,
+ _("Cannot establish SELinux management connection\n"));
+ goto fail;
+ }
+
+ ret = semanage_begin_transaction (handle);
+ if (ret != 0) {
+ fprintf (stderr, _("Cannot begin SELinux transaction\n"));
+ goto fail;
+ }
+
+ return handle;
+
+fail:
+ semanage_handle_destroy (handle);
+ return NULL;
+}
+
+
+static int semanage_user_mod (semanage_handle_t *handle,
+ semanage_seuser_key_t *key,
+ const char *login_name,
+ const char *seuser_name)
+{
+ int ret;
+ semanage_seuser_t *seuser = NULL;
+
+ semanage_seuser_query (handle, key, &seuser);
+ if (NULL == seuser) {
+ fprintf (stderr,
+ _("Could not query seuser for %s\n"), login_name);
+ ret = 1;
+ goto done;
+ }
+
+ ret = semanage_seuser_set_mlsrange (handle, seuser, DEFAULT_SERANGE);
+ if (ret != 0) {
+ fprintf (stderr,
+ _("Could not set serange for %s\n"), login_name);
+ ret = 1;
+ goto done;
+ }
+
+ ret = semanage_seuser_set_sename (handle, seuser, seuser_name);
+ if (ret != 0) {
+ fprintf (stderr,
+ _("Could not set sename for %s\n"),
+ login_name);
+ ret = 1;
+ goto done;
+ }
+
+ ret = semanage_seuser_modify_local (handle, key, seuser);
+ if (ret != 0) {
+ fprintf (stderr,
+ _("Could not modify login mapping for %s\n"),
+ login_name);
+ ret = 1;
+ goto done;
+ }
+
+ ret = 0;
+done:
+ semanage_seuser_free (seuser);
+ return ret;
+}
+
+
+static int semanage_user_add (semanage_handle_t *handle,
+ semanage_seuser_key_t *key,
+ const char *login_name,
+ const char *seuser_name)
+{
+ int ret;
+ semanage_seuser_t *seuser = NULL;
+
+ ret = semanage_seuser_create (handle, &seuser);
+ if (ret != 0) {
+ fprintf (stderr,
+ _("Cannot create SELinux login mapping for %s\n"),
+ login_name);
+ ret = 1;
+ goto done;
+ }
+
+ ret = semanage_seuser_set_name (handle, seuser, login_name);
+ if (ret != 0) {
+ fprintf (stderr, _("Could not set name for %s\n"), login_name);
+ ret = 1;
+ goto done;
+ }
+
+ ret = semanage_seuser_set_mlsrange (handle, seuser, DEFAULT_SERANGE);
+ if (ret != 0) {
+ fprintf (stderr,
+ _("Could not set serange for %s\n"),
+ login_name);
+ ret = 1;
+ goto done;
+ }
+
+ ret = semanage_seuser_set_sename (handle, seuser, seuser_name);
+ if (ret != 0) {
+ fprintf (stderr,
+ _("Could not set SELinux user for %s\n"),
+ login_name);
+ ret = 1;
+ goto done;
+ }
+
+ ret = semanage_seuser_modify_local (handle, key, seuser);
+ if (ret != 0) {
+ fprintf (stderr,
+ _("Could not add login mapping for %s\n"),
+ login_name);
+ ret = 1;
+ goto done;
+ }
+
+ ret = 0;
+done:
+ semanage_seuser_free (seuser);
+ return ret;
+}
+
+
+int set_seuser (const char *login_name, const char *seuser_name)
+{
+ semanage_handle_t *handle = NULL;
+ semanage_seuser_key_t *key = NULL;
+ int ret;
+ int seuser_exists = 0;
+
+ if (NULL == seuser_name) {
+ /* don't care, just let system pick the defaults */
+ return 0;
+ }
+
+ handle = semanage_init ();
+ if (NULL == handle) {
+ fprintf (stderr, _("Cannot init SELinux management\n"));
+ ret = 1;
+ goto done;
+ }
+
+ ret = semanage_seuser_key_create (handle, login_name, &key);
+ if (ret != 0) {
+ fprintf (stderr, _("Cannot create SELinux user key\n"));
+ ret = 1;
+ goto done;
+ }
+
+ ret = semanage_seuser_exists (handle, key, &seuser_exists);
+ if (ret < 0) {
+ fprintf (stderr, _("Cannot verify the SELinux user\n"));
+ ret = 1;
+ goto done;
+ }
+
+ if (0 != seuser_exists) {
+ ret = semanage_user_mod (handle, key, login_name, seuser_name);
+ if (ret != 0) {
+ fprintf (stderr,
+ _("Cannot modify SELinux user mapping\n"));
+ ret = 1;
+ goto done;
+ }
+ } else {
+ ret = semanage_user_add (handle, key, login_name, seuser_name);
+ if (ret != 0) {
+ fprintf (stderr,
+ _("Cannot add SELinux user mapping\n"));
+ ret = 1;
+ goto done;
+ }
+ }
+
+ ret = semanage_commit (handle);
+ if (ret < 0) {
+ fprintf (stderr, _("Cannot commit SELinux transaction\n"));
+ ret = 1;
+ goto done;
+ }
+
+ ret = 0;
+
+done:
+ semanage_seuser_key_free (key);
+ semanage_handle_destroy (handle);
+ return ret;
+}
+
+
+int del_seuser (const char *login_name)
+{
+ semanage_handle_t *handle = NULL;
+ semanage_seuser_key_t *key = NULL;
+ int ret;
+ int exists = 0;
+
+ handle = semanage_init ();
+ if (NULL == handle) {
+ fprintf (stderr, _("Cannot init SELinux management\n"));
+ ret = 1;
+ goto done;
+ }
+
+ ret = semanage_seuser_key_create (handle, login_name, &key);
+ if (ret != 0) {
+ fprintf (stderr, _("Cannot create SELinux user key\n"));
+ ret = 1;
+ goto done;
+ }
+
+ ret = semanage_seuser_exists (handle, key, &exists);
+ if (ret < 0) {
+ fprintf (stderr, _("Cannot verify the SELinux user\n"));
+ ret = 1;
+ goto done;
+ }
+
+ if (0 == exists) {
+ fprintf (stderr,
+ _("Login mapping for %s is not defined, OK if default mapping was used\n"),
+ login_name);
+ ret = 0; /* probably default mapping */
+ goto done;
+ }
+
+ ret = semanage_seuser_exists_local (handle, key, &exists);
+ if (ret < 0) {
+ fprintf (stderr, _("Cannot verify the SELinux user\n"));
+ ret = 1;
+ goto done;
+ }
+
+ if (0 == exists) {
+ fprintf (stderr,
+ _("Login mapping for %s is defined in policy, cannot be deleted\n"),
+ login_name);
+ ret = 0; /* Login mapping defined in policy can't be deleted */
+ goto done;
+ }
+
+ ret = semanage_seuser_del_local (handle, key);
+ if (ret != 0) {
+ fprintf (stderr,
+ _("Could not delete login mapping for %s"),
+ login_name);
+ ret = 1;
+ goto done;
+ }
+
+ ret = semanage_commit (handle);
+ if (ret < 0) {
+ fprintf (stderr, _("Cannot commit SELinux transaction\n"));
+ ret = 1;
+ goto done;
+ }
+
+ ret = 0;
+done:
+ semanage_handle_destroy (handle);
+ return ret;
+}
+#else /* !WITH_SELINUX */
+extern int errno; /* warning: ANSI C forbids an empty source file */
+#endif /* !WITH_SELINUX */
diff --git a/lib/sgetgrent.c b/lib/sgetgrent.c
new file mode 100644
index 0000000..a951be4
--- /dev/null
+++ b/lib/sgetgrent.c
@@ -0,0 +1,154 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2005 , Tomasz Kłoczko
+ * Copyright (c) 2008 , 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 <sys/types.h>
+#include <grp.h>
+#include "defines.h"
+#include "prototypes.h"
+
+#define NFIELDS 4
+
+/*
+ * list - turn a comma-separated string into an array of (char *)'s
+ *
+ * list() converts the comma-separated list of member names into
+ * an array of character pointers.
+ *
+ * WARNING: I profiled this once with and without strchr() calls
+ * and found that using a register variable and an explicit loop
+ * works best. For large /etc/group files, this is a major win.
+ *
+ * FINALLY added dynamic allocation. Still need to fix sgetsgent().
+ * --marekm
+ */
+static char **list (char *s)
+{
+ static char **members = 0;
+ static int size = 0; /* max members + 1 */
+ int i;
+ char **rbuf;
+
+ i = 0;
+ for (;;) {
+ /* check if there is room for another pointer (to a group
+ member name, or terminating NULL). */
+ if (i >= size) {
+ size = i + 100; /* at least: i + 1 */
+ if (members) {
+ rbuf =
+ realloc (members, size * sizeof (char *));
+ } else {
+ /* for old (before ANSI C) implementations of
+ realloc() that don't handle NULL properly */
+ rbuf = malloc (size * sizeof (char *));
+ }
+ if (!rbuf) {
+ if (members)
+ free (members);
+ members = 0;
+ size = 0;
+ return (char **) 0;
+ }
+ members = rbuf;
+ }
+ if (!s || s[0] == '\0')
+ break;
+ members[i++] = s;
+ while (('\0' != *s) && (',' != *s)) {
+ s++;
+ }
+ if ('\0' != *s) {
+ *s++ = '\0';
+ }
+ }
+ members[i] = (char *) 0;
+ return members;
+}
+
+
+struct group *sgetgrent (const char *buf)
+{
+ static char *grpbuf = 0;
+ static size_t size = 0;
+ static char *grpfields[NFIELDS];
+ static struct group grent;
+ int i;
+ char *cp;
+
+ if (strlen (buf) + 1 > size) {
+ /* no need to use realloc() here - just free it and
+ allocate a larger block */
+ if (grpbuf)
+ free (grpbuf);
+ size = strlen (buf) + 1000; /* at least: strlen(buf) + 1 */
+ grpbuf = malloc (size);
+ if (!grpbuf) {
+ size = 0;
+ return 0;
+ }
+ }
+ strcpy (grpbuf, buf);
+
+ cp = strrchr (grpbuf, '\n');
+ if (NULL != cp) {
+ *cp = '\0';
+ }
+
+ for (cp = grpbuf, i = 0; (i < NFIELDS) && (NULL != cp); i++) {
+ grpfields[i] = cp;
+ cp = strchr (cp, ':');
+ if (NULL != cp) {
+ *cp = '\0';
+ cp++;
+ }
+ }
+ if (i < (NFIELDS - 1) || *grpfields[2] == '\0' || cp != NULL) {
+ return (struct group *) 0;
+ }
+ grent.gr_name = grpfields[0];
+ grent.gr_passwd = grpfields[1];
+ if (get_gid (grpfields[2], &grent.gr_gid) == 0) {
+ return (struct group *) 0;
+ }
+ grent.gr_mem = list (grpfields[3]);
+ if (NULL == grent.gr_mem) {
+ return (struct group *) 0; /* out of memory */
+ }
+
+ return &grent;
+}
+
diff --git a/lib/sgetpwent.c b/lib/sgetpwent.c
new file mode 100644
index 0000000..befdd91
--- /dev/null
+++ b/lib/sgetpwent.c
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008 , 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 <sys/types.h>
+#include "defines.h"
+#include <stdio.h>
+#include <pwd.h>
+#include "prototypes.h"
+
+#define NFIELDS 7
+
+/*
+ * sgetpwent - convert a string to a (struct passwd)
+ *
+ * sgetpwent() parses a string into the parts required for a password
+ * structure. Strict checking is made for the UID and GID fields and
+ * presence of the correct number of colons. Any failing tests result
+ * in a NULL pointer being returned.
+ *
+ * NOTE: This function uses hard-coded string scanning functions for
+ * performance reasons. I am going to come up with some conditional
+ * compilation glarp to improve on this in the future.
+ */
+struct passwd *sgetpwent (const char *buf)
+{
+ static struct passwd pwent;
+ static char pwdbuf[1024];
+ register int i;
+ register char *cp;
+ char *fields[NFIELDS];
+
+ /*
+ * Copy the string to a static buffer so the pointers into
+ * the password structure remain valid.
+ */
+
+ if (strlen (buf) >= sizeof pwdbuf)
+ return 0; /* fail if too long */
+ strcpy (pwdbuf, buf);
+
+ /*
+ * Save a pointer to the start of each colon separated
+ * field. The fields are converted into NUL terminated strings.
+ */
+
+ for (cp = pwdbuf, i = 0; (i < NFIELDS) && (NULL != cp); i++) {
+ fields[i] = cp;
+ while (('\0' != *cp) && (':' != *cp)) {
+ cp++;
+ }
+
+ if ('\0' != *cp) {
+ *cp = '\0';
+ cp++;
+ } else {
+ cp = NULL;
+ }
+ }
+
+ /* 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.
+ */
+
+ if (i != NFIELDS || *fields[2] == '\0' || *fields[3] == '\0')
+ return NULL;
+
+ /*
+ * Each of the fields is converted the appropriate data type
+ * and the result assigned to the password structure. If the
+ * UID or GID does not convert to an integer value, a NULL
+ * pointer is returned.
+ */
+
+ pwent.pw_name = fields[0];
+ pwent.pw_passwd = fields[1];
+ if (get_uid (fields[2], &pwent.pw_uid) == 0) {
+ return NULL;
+ }
+ if (get_gid (fields[3], &pwent.pw_gid) == 0) {
+ return NULL;
+ }
+ pwent.pw_gecos = fields[4];
+ pwent.pw_dir = fields[5];
+ pwent.pw_shell = fields[6];
+
+ return &pwent;
+}
+
diff --git a/lib/sgetspent.c b/lib/sgetspent.c
new file mode 100644
index 0000000..20531eb
--- /dev/null
+++ b/lib/sgetspent.c
@@ -0,0 +1,208 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 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.
+ */
+
+#include <config.h>
+
+/* Newer versions of Linux libc already have shadow support. */
+#ifndef HAVE_SGETSPENT
+
+#ident "$Id$"
+
+#include <sys/types.h>
+#include "prototypes.h"
+#include "defines.h"
+#include <stdio.h>
+#define FIELDS 9
+#define OFIELDS 5
+/*
+ * sgetspent - convert string in shadow file format to (struct spwd *)
+ */
+struct spwd *sgetspent (const char *string)
+{
+ static char spwbuf[1024];
+ static struct spwd spwd;
+ char *fields[FIELDS];
+ char *cp;
+ char *cpp;
+ int i;
+
+ /*
+ * Copy string to local buffer. It has to be tokenized and we
+ * have to do that to our private copy.
+ */
+
+ if (strlen (string) >= sizeof spwbuf) {
+ return 0; /* fail if too long */
+ }
+ strcpy (spwbuf, string);
+
+ cp = strrchr (spwbuf, '\n');
+ if (NULL != cp) {
+ *cp = '\0';
+ }
+
+ /*
+ * Tokenize the string into colon separated fields. Allow up to
+ * FIELDS different fields.
+ */
+
+ for (cp = spwbuf, i = 0; ('\0' != *cp) && (i < FIELDS); i++) {
+ fields[i] = cp;
+ while (('\0' != *cp) && (':' != *cp)) {
+ cp++;
+ }
+
+ if ('\0' != *cp) {
+ *cp = '\0';
+ cp++;
+ }
+ }
+
+ if (i == (FIELDS - 1)) {
+ fields[i++] = cp;
+ }
+
+ if ( ((NULL != cp) && ('\0' != *cp)) ||
+ ((i != FIELDS) && (i != OFIELDS)) ) {
+ return 0;
+ }
+
+ /*
+ * Start populating the structure. The fields are all in
+ * static storage, as is the structure we pass back.
+ */
+
+ spwd.sp_namp = fields[0];
+ spwd.sp_pwdp = fields[1];
+
+ /*
+ * Get the last changed date. For all of the integer fields,
+ * we check for proper format. It is an error to have an
+ * incorrectly formatted number.
+ */
+
+ if (fields[2][0] == '\0') {
+ spwd.sp_lstchg = -1;
+ } else if ( (getlong (fields[2], &spwd.sp_lstchg) == 0)
+ || (spwd.sp_lstchg < 0)) {
+ return 0;
+ }
+
+ /*
+ * Get the minimum period between password changes.
+ */
+
+ if (fields[3][0] == '\0') {
+ spwd.sp_min = -1;
+ } else if ( (getlong (fields[3], &spwd.sp_min) == 0)
+ || (spwd.sp_min < 0)) {
+ return 0;
+ }
+
+ /*
+ * Get the maximum number of days a password is valid.
+ */
+
+ if (fields[4][0] == '\0') {
+ spwd.sp_max = -1;
+ } else if ( (getlong (fields[4], &spwd.sp_max) == 0)
+ || (spwd.sp_max < 0)) {
+ return 0;
+ }
+
+ /*
+ * If there are only OFIELDS fields (this is a SVR3.2 /etc/shadow
+ * formatted file), initialize the other field members to -1.
+ */
+
+ if (i == OFIELDS) {
+ spwd.sp_warn = -1;
+ spwd.sp_inact = -1;
+ spwd.sp_expire = -1;
+ spwd.sp_flag = SHADOW_SP_FLAG_UNSET;
+
+ return &spwd;
+ }
+
+ /*
+ * Get the number of days of password expiry warning.
+ */
+
+ if (fields[5][0] == '\0') {
+ spwd.sp_warn = -1;
+ } else if ( (getlong (fields[5], &spwd.sp_warn) == 0)
+ || (spwd.sp_warn < 0)) {
+ return 0;
+ }
+
+ /*
+ * Get the number of days of inactivity before an account is
+ * disabled.
+ */
+
+ if (fields[6][0] == '\0') {
+ spwd.sp_inact = -1;
+ } else if ( (getlong (fields[6], &spwd.sp_inact) == 0)
+ || (spwd.sp_inact < 0)) {
+ return 0;
+ }
+
+ /*
+ * Get the number of days after the epoch before the account is
+ * set to expire.
+ */
+
+ if (fields[7][0] == '\0') {
+ spwd.sp_expire = -1;
+ } else if ( (getlong (fields[7], &spwd.sp_expire) == 0)
+ || (spwd.sp_expire < 0)) {
+ return 0;
+ }
+
+ /*
+ * This field is reserved for future use. But it isn't supposed
+ * to have anything other than a valid integer in it.
+ */
+
+ if (fields[8][0] == '\0') {
+ spwd.sp_flag = SHADOW_SP_FLAG_UNSET;
+ } else if (getlong (fields[8], &spwd.sp_flag) == 0) {
+ /* FIXME: add a getulong function */
+ return 0;
+ }
+
+ return (&spwd);
+}
+#else
+extern int errno; /* warning: ANSI C forbids an empty source file */
+#endif
+
diff --git a/lib/sgroupio.c b/lib/sgroupio.c
new file mode 100644
index 0000000..ffbdb26
--- /dev/null
+++ b/lib/sgroupio.c
@@ -0,0 +1,329 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 , Michał Moskal
+ * Copyright (c) 2005 , Tomasz Kłoczko
+ * Copyright (c) 2007 - 2013, 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>
+
+#ifdef SHADOWGRP
+
+#ident "$Id$"
+
+#include "prototypes.h"
+#include "defines.h"
+#include "commonio.h"
+#include "getdef.h"
+#include "sgroupio.h"
+
+/*@null@*/ /*@only@*/struct sgrp *__sgr_dup (const struct sgrp *sgent)
+{
+ struct sgrp *sg;
+ int i;
+
+ sg = (struct sgrp *) malloc (sizeof *sg);
+ if (NULL == sg) {
+ return NULL;
+ }
+ /* Do the same as the other _dup function, even if we know the
+ * structure. */
+ memset (sg, 0, sizeof *sg);
+ /*@-mustfreeonly@*/
+ sg->sg_name = strdup (sgent->sg_name);
+ /*@=mustfreeonly@*/
+ if (NULL == sg->sg_name) {
+ free (sg);
+ return NULL;
+ }
+ /*@-mustfreeonly@*/
+ sg->sg_passwd = strdup (sgent->sg_passwd);
+ /*@=mustfreeonly@*/
+ if (NULL == sg->sg_passwd) {
+ free (sg->sg_name);
+ free (sg);
+ return NULL;
+ }
+
+ for (i = 0; NULL != sgent->sg_adm[i]; i++);
+ /*@-mustfreeonly@*/
+ sg->sg_adm = (char **) malloc ((i + 1) * sizeof (char *));
+ /*@=mustfreeonly@*/
+ if (NULL == sg->sg_adm) {
+ free (sg->sg_passwd);
+ free (sg->sg_name);
+ free (sg);
+ return NULL;
+ }
+ for (i = 0; NULL != sgent->sg_adm[i]; i++) {
+ sg->sg_adm[i] = strdup (sgent->sg_adm[i]);
+ if (NULL == sg->sg_adm[i]) {
+ for (i = 0; NULL != sg->sg_adm[i]; i++) {
+ free (sg->sg_adm[i]);
+ }
+ free (sg->sg_adm);
+ free (sg->sg_passwd);
+ free (sg->sg_name);
+ free (sg);
+ return NULL;
+ }
+ }
+ sg->sg_adm[i] = NULL;
+
+ for (i = 0; NULL != sgent->sg_mem[i]; i++);
+ /*@-mustfreeonly@*/
+ sg->sg_mem = (char **) malloc ((i + 1) * sizeof (char *));
+ /*@=mustfreeonly@*/
+ if (NULL == sg->sg_mem) {
+ for (i = 0; NULL != sg->sg_adm[i]; i++) {
+ free (sg->sg_adm[i]);
+ }
+ free (sg->sg_adm);
+ free (sg->sg_passwd);
+ free (sg->sg_name);
+ free (sg);
+ return NULL;
+ }
+ for (i = 0; NULL != sgent->sg_mem[i]; i++) {
+ sg->sg_mem[i] = strdup (sgent->sg_mem[i]);
+ if (NULL == sg->sg_mem[i]) {
+ for (i = 0; NULL != sg->sg_mem[i]; i++) {
+ free (sg->sg_mem[i]);
+ }
+ free (sg->sg_mem);
+ for (i = 0; NULL != sg->sg_adm[i]; i++) {
+ free (sg->sg_adm[i]);
+ }
+ free (sg->sg_adm);
+ free (sg->sg_passwd);
+ free (sg->sg_name);
+ free (sg);
+ return NULL;
+ }
+ }
+ sg->sg_mem[i] = NULL;
+
+ return sg;
+}
+
+static /*@null@*/ /*@only@*/void *gshadow_dup (const void *ent)
+{
+ const struct sgrp *sg = ent;
+
+ return __sgr_dup (sg);
+}
+
+static void gshadow_free (/*@out@*/ /*@only@*/void *ent)
+{
+ struct sgrp *sg = ent;
+
+ sgr_free (sg);
+}
+
+void sgr_free (/*@out@*/ /*@only@*/struct sgrp *sgent)
+{
+ size_t i;
+ free (sgent->sg_name);
+ if (NULL != sgent->sg_passwd) {
+ memzero (sgent->sg_passwd, strlen (sgent->sg_passwd));
+ free (sgent->sg_passwd);
+ }
+ for (i = 0; NULL != sgent->sg_adm[i]; i++) {
+ free (sgent->sg_adm[i]);
+ }
+ free (sgent->sg_adm);
+ for (i = 0; NULL != sgent->sg_mem[i]; i++) {
+ free (sgent->sg_mem[i]);
+ }
+ free (sgent->sg_mem);
+ free (sgent);
+}
+
+static const char *gshadow_getname (const void *ent)
+{
+ const struct sgrp *gr = ent;
+
+ return gr->sg_name;
+}
+
+static void *gshadow_parse (const char *line)
+{
+ return (void *) sgetsgent (line);
+}
+
+static int gshadow_put (const void *ent, FILE * file)
+{
+ const struct sgrp *sg = ent;
+
+ if ( (NULL == sg)
+ || (valid_field (sg->sg_name, ":\n") == -1)
+ || (valid_field (sg->sg_passwd, ":\n") == -1)) {
+ return -1;
+ }
+
+ /* FIXME: fail also if sg->sg_adm == NULL ?*/
+ if (NULL != sg->sg_adm) {
+ size_t i;
+ for (i = 0; NULL != sg->sg_adm[i]; i++) {
+ if (valid_field (sg->sg_adm[i], ",:\n") == -1) {
+ return -1;
+ }
+ }
+ }
+
+ /* FIXME: fail also if sg->sg_mem == NULL ?*/
+ if (NULL != sg->sg_mem) {
+ size_t i;
+ for (i = 0; NULL != sg->sg_mem[i]; i++) {
+ if (valid_field (sg->sg_mem[i], ",:\n") == -1) {
+ return -1;
+ }
+ }
+ }
+
+ return (putsgent (sg, file) == -1) ? -1 : 0;
+}
+
+static struct commonio_ops gshadow_ops = {
+ gshadow_dup,
+ gshadow_free,
+ gshadow_getname,
+ gshadow_parse,
+ gshadow_put,
+ fgetsx,
+ fputsx,
+ NULL, /* open_hook */
+ NULL /* close_hook */
+};
+
+static struct commonio_db gshadow_db = {
+ SGROUP_FILE, /* filename */
+ &gshadow_ops, /* ops */
+ NULL, /* fp */
+#ifdef WITH_SELINUX
+ NULL, /* scontext */
+#endif
+ 0400, /* st_mode */
+ 0, /* st_uid */
+ 0, /* st_gid */
+ NULL, /* head */
+ NULL, /* tail */
+ NULL, /* cursor */
+ false, /* changed */
+ false, /* isopen */
+ false, /* locked */
+ false, /* readonly */
+ false /* setname */
+};
+
+int sgr_setdbname (const char *filename)
+{
+ return commonio_setname (&gshadow_db, filename);
+}
+
+/*@observer@*/const char *sgr_dbname (void)
+{
+ return gshadow_db.filename;
+}
+
+bool sgr_file_present (void)
+{
+ if (getdef_bool ("FORCE_SHADOW"))
+ return true;
+ return commonio_present (&gshadow_db);
+}
+
+int sgr_lock (void)
+{
+ return commonio_lock (&gshadow_db);
+}
+
+int sgr_open (int mode)
+{
+ return commonio_open (&gshadow_db, mode);
+}
+
+/*@observer@*/ /*@null@*/const struct sgrp *sgr_locate (const char *name)
+{
+ return commonio_locate (&gshadow_db, name);
+}
+
+int sgr_update (const struct sgrp *sg)
+{
+ return commonio_update (&gshadow_db, (const void *) sg);
+}
+
+int sgr_remove (const char *name)
+{
+ return commonio_remove (&gshadow_db, name);
+}
+
+int sgr_rewind (void)
+{
+ return commonio_rewind (&gshadow_db);
+}
+
+/*@null@*/const struct sgrp *sgr_next (void)
+{
+ return commonio_next (&gshadow_db);
+}
+
+int sgr_close (void)
+{
+ return commonio_close (&gshadow_db);
+}
+
+int sgr_unlock (void)
+{
+ return commonio_unlock (&gshadow_db);
+}
+
+void __sgr_set_changed (void)
+{
+ gshadow_db.changed = true;
+}
+
+/*@dependent@*/ /*@null@*/struct commonio_entry *__sgr_get_head (void)
+{
+ return gshadow_db.head;
+}
+
+void __sgr_del_entry (const struct commonio_entry *ent)
+{
+ commonio_del_entry (&gshadow_db, ent);
+}
+
+/* Sort with respect to group ordering. */
+int sgr_sort ()
+{
+ return commonio_sort_wrt (&gshadow_db, __gr_get_db ());
+}
+#else
+extern int errno; /* warning: ANSI C forbids an empty source file */
+#endif
diff --git a/lib/sgroupio.h b/lib/sgroupio.h
new file mode 100644
index 0000000..163243a
--- /dev/null
+++ b/lib/sgroupio.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 , Michał Moskal
+ * Copyright (c) 2005 , Tomasz Kłoczko
+ * Copyright (c) 2008 , 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.
+ */
+
+/* $Id$ */
+#ifndef _SGROUPIO_H
+#define _SGROUPIO_H
+
+extern int sgr_close (void);
+extern bool sgr_file_present (void);
+extern /*@observer@*/ /*@null@*/const struct sgrp *sgr_locate (const char *name);
+extern int sgr_lock (void);
+extern int sgr_setdbname (const char *filename);
+extern /*@observer@*/const char *sgr_dbname (void);
+extern /*@null@*/const struct sgrp *sgr_next (void);
+extern int sgr_open (int mode);
+extern int sgr_remove (const char *name);
+extern int sgr_rewind (void);
+extern int sgr_unlock (void);
+extern int sgr_update (const struct sgrp *sg);
+extern int sgr_sort (void);
+
+#endif
diff --git a/lib/shadow.c b/lib/shadow.c
new file mode 100644
index 0000000..05cb0e4
--- /dev/null
+++ b/lib/shadow.c
@@ -0,0 +1,557 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 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.
+ */
+
+#include <config.h>
+
+/* Newer versions of Linux libc already have shadow support. */
+#ifndef HAVE_GETSPNAM
+
+#ident "$Id$"
+
+#include <sys/types.h>
+#include "prototypes.h"
+#include "defines.h"
+#include <stdio.h>
+#ifdef USE_NIS
+static bool nis_used;
+static bool nis_ignore;
+static enum { native, start, middle, native2 } nis_state;
+static bool nis_bound;
+static char *nis_domain;
+static char *nis_key;
+static int nis_keylen;
+static char *nis_val;
+static int nis_vallen;
+
+#define IS_NISCHAR(c) ((c)=='+')
+#endif
+
+static FILE *shadow;
+
+#define FIELDS 9
+#define OFIELDS 5
+
+#ifdef USE_NIS
+
+/*
+ * __setspNIS - turn on or off NIS searches
+ */
+
+void __setspNIS (bool flag)
+{
+ nis_ignore = !flag;
+
+ if (nis_ignore) {
+ nis_used = false;
+ }
+}
+
+/*
+ * bind_nis - bind to NIS server
+ */
+
+static int bind_nis (void)
+{
+ if (yp_get_default_domain (&nis_domain)) {
+ return -1;
+ }
+
+ nis_bound = true;
+ return 0;
+}
+#endif
+
+/*
+ * setspent - initialize access to shadow text and DBM files
+ */
+
+void setspent (void)
+{
+ if (NULL != shadow) {
+ rewind (shadow);
+ }else {
+ shadow = fopen (SHADOW_FILE, "r");
+ }
+
+#ifdef USE_NIS
+ nis_state = native;
+#endif
+}
+
+/*
+ * endspent - terminate access to shadow text and DBM files
+ */
+
+void endspent (void)
+{
+ if (NULL != shadow) {
+ (void) fclose (shadow);
+ }
+
+ shadow = (FILE *) 0;
+}
+
+/*
+ * my_sgetspent - convert string in shadow file format to (struct spwd *)
+ */
+
+static struct spwd *my_sgetspent (const char *string)
+{
+ static char spwbuf[BUFSIZ];
+ static struct spwd spwd;
+ char *fields[FIELDS];
+ char *cp;
+ char *cpp;
+ int i;
+
+ /*
+ * Copy string to local buffer. It has to be tokenized and we
+ * have to do that to our private copy.
+ */
+
+ if (strlen (string) >= sizeof spwbuf)
+ return 0;
+ strcpy (spwbuf, string);
+
+ cp = strrchr (spwbuf, '\n');
+ if (NULL != cp)
+ *cp = '\0';
+
+ /*
+ * Tokenize the string into colon separated fields. Allow up to
+ * FIELDS different fields.
+ */
+
+ for (cp = spwbuf, i = 0; *cp && i < FIELDS; i++) {
+ fields[i] = cp;
+ while (*cp && *cp != ':')
+ cp++;
+
+ if (*cp)
+ *cp++ = '\0';
+ }
+
+ if (i == (FIELDS - 1))
+ fields[i++] = cp;
+
+ if ((cp && *cp) || (i != FIELDS && i != OFIELDS))
+ return 0;
+
+ /*
+ * Start populating the structure. The fields are all in
+ * static storage, as is the structure we pass back. If we
+ * ever see a name with '+' as the first character, we try
+ * to turn on NIS processing.
+ */
+
+ spwd.sp_namp = fields[0];
+#ifdef USE_NIS
+ if (IS_NISCHAR (fields[0][0])) {
+ nis_used = true;
+ }
+#endif
+ spwd.sp_pwdp = fields[1];
+
+ /*
+ * Get the last changed date. For all of the integer fields,
+ * we check for proper format. It is an error to have an
+ * incorrectly formatted number, unless we are using NIS.
+ */
+
+ if (fields[2][0] == '\0') {
+ spwd.sp_lstchg = -1;
+ } else {
+ if (getlong (fields[2], &spwd.sp_lstchg) == 0) {
+#ifdef USE_NIS
+ if (nis_used) {
+ spwd.sp_lstchg = -1;
+ } else
+#endif
+ return 0;
+ } else if (spwd.sp_lstchg < 0) {
+ return 0;
+ }
+ }
+
+ /*
+ * Get the minimum period between password changes.
+ */
+
+ if (fields[3][0] == '\0') {
+ spwd.sp_min = -1;
+ } else {
+ if (getlong (fields[3], &spwd.sp_min) == 0) {
+#ifdef USE_NIS
+ if (nis_used) {
+ spwd.sp_min = -1;
+ } else
+#endif
+ {
+ return 0;
+ }
+ } else if (spwd.sp_min < 0) {
+ return 0;
+ }
+ }
+
+ /*
+ * Get the maximum number of days a password is valid.
+ */
+
+ if (fields[4][0] == '\0') {
+ spwd.sp_max = -1;
+ } else {
+ if (getlong (fields[4], &spwd.sp_max) == 0) {
+#ifdef USE_NIS
+ if (nis_used) {
+ spwd.sp_max = -1;
+ } else
+#endif
+ return 0;
+ } else if (spwd.sp_max < 0) {
+ return 0;
+ }
+ }
+
+ /*
+ * If there are only OFIELDS fields (this is a SVR3.2 /etc/shadow
+ * formatted file), initialize the other field members to -1.
+ */
+
+ if (i == OFIELDS) {
+ spwd.sp_warn = -1;
+ spwd.sp_inact = -1;
+ spwd.sp_expire = -1;
+ spwd.sp_flag = SHADOW_SP_FLAG_UNSET;
+
+ return &spwd;
+ }
+
+ /*
+ * Get the number of days of password expiry warning.
+ */
+
+ if (fields[5][0] == '\0') {
+ spwd.sp_warn = -1;
+ } else {
+ if (getlong (fields[5], &spwd.sp_warn) == 0) {
+#ifdef USE_NIS
+ if (nis_used) {
+ spwd.sp_warn = -1;
+ } else
+#endif
+ {
+ return 0;
+ }
+ } else if (spwd.sp_warn < 0) {
+ return 0;
+ }
+ }
+
+ /*
+ * Get the number of days of inactivity before an account is
+ * disabled.
+ */
+
+ if (fields[6][0] == '\0') {
+ spwd.sp_inact = -1;
+ } else {
+ if (getlong (fields[6], &spwd.sp_inact) == 0) {
+#ifdef USE_NIS
+ if (nis_used) {
+ spwd.sp_inact = -1;
+ } else
+#endif
+ {
+ return 0;
+ }
+ } else if (spwd.sp_inact < 0) {
+ return 0;
+ }
+ }
+
+ /*
+ * Get the number of days after the epoch before the account is
+ * set to expire.
+ */
+
+ if (fields[7][0] == '\0') {
+ spwd.sp_expire = -1;
+ } else {
+ if (getlong (fields[7], &spwd.sp_expire) == 0) {
+#ifdef USE_NIS
+ if (nis_used) {
+ spwd.sp_expire = -1;
+ } else
+#endif
+ {
+ return 0;
+ }
+ } else if (spwd.sp_expire < 0) {
+ return 0;
+ }
+ }
+
+ /*
+ * This field is reserved for future use. But it isn't supposed
+ * to have anything other than a valid integer in it.
+ */
+
+ if (fields[8][0] == '\0') {
+ spwd.sp_flag = SHADOW_SP_FLAG_UNSET;
+ } else {
+ if (getlong (fields[8], &spwd.sp_flag) == 0) {
+ /* FIXME: add a getulong function */
+#ifdef USE_NIS
+ if (nis_used) {
+ spwd.sp_flag = SHADOW_SP_FLAG_UNSET;
+ } else
+#endif
+ {
+ return 0;
+ }
+ } else if (spwd.sp_flag < 0) {
+ return 0;
+ }
+ }
+
+ return (&spwd);
+}
+
+/*
+ * fgetspent - get an entry from a /etc/shadow formatted stream
+ */
+
+struct spwd *fgetspent (FILE * fp)
+{
+ char buf[BUFSIZ];
+ char *cp;
+
+ if (NULL == fp) {
+ return (0);
+ }
+
+#ifdef USE_NIS
+ while (fgets (buf, (int) sizeof buf, fp) != (char *) 0)
+#else
+ if (fgets (buf, (int) sizeof buf, fp) != (char *) 0)
+#endif
+ {
+ cp = strchr (buf, '\n');
+ if (NULL != cp) {
+ *cp = '\0';
+ }
+#ifdef USE_NIS
+ if (nis_ignore && IS_NISCHAR (buf[0])) {
+ continue;
+ }
+#endif
+ return my_sgetspent (buf);
+ }
+ return 0;
+}
+
+/*
+ * getspent - get a (struct spwd *) from the current shadow file
+ */
+
+struct spwd *getspent (void)
+{
+#ifdef USE_NIS
+ int nis_1_user = 0;
+ struct spwd *val;
+ char buf[BUFSIZ];
+#endif
+ if (NULL == shadow) {
+ setspent ();
+ }
+
+#ifdef USE_NIS
+ again:
+ /*
+ * See if we are reading from the local file.
+ */
+
+ if (nis_state == native || nis_state == native2) {
+
+ /*
+ * Get the next entry from the shadow file. Return NULL
+ * right away if there is none.
+ */
+
+ val = fgetspent (shadow);
+ if (NULL == val)
+ return 0;
+
+ /*
+ * If this entry began with a NIS escape character, we have
+ * to see if this is just a single user, or if the entire
+ * map is being asked for.
+ */
+
+ if (IS_NISCHAR (val->sp_namp[0])) {
+ if (val->sp_namp[1])
+ nis_1_user = 1;
+ else
+ nis_state = start;
+ }
+
+ /*
+ * If this isn't a NIS user and this isn't an escape to go
+ * use a NIS map, it must be a regular local user.
+ */
+
+ if (nis_1_user == 0 && nis_state != start)
+ return val;
+
+ /*
+ * If this is an escape to use an NIS map, switch over to
+ * that bunch of code.
+ */
+
+ if (nis_state == start)
+ goto again;
+
+ /*
+ * NEEDSWORK. Here we substitute pieces-parts of this entry.
+ */
+
+ return 0;
+ } else {
+ if (!nis_bound) {
+ if (bind_nis ()) {
+ nis_state = native2;
+ goto again;
+ }
+ }
+ if (nis_state == start) {
+ if (yp_first (nis_domain, "shadow.bynam", &nis_key,
+ &nis_keylen, &nis_val, &nis_vallen)) {
+ nis_state = native2;
+ goto again;
+ }
+ nis_state = middle;
+ } else if (nis_state == middle) {
+ if (yp_next (nis_domain, "shadow.bynam", nis_key,
+ nis_keylen, &nis_key, &nis_keylen,
+ &nis_val, &nis_vallen)) {
+ nis_state = native2;
+ goto again;
+ }
+ }
+ return my_sgetspent (nis_val);
+ }
+#else
+ return (fgetspent (shadow));
+#endif
+}
+
+/*
+ * getspnam - get a shadow entry by name
+ */
+
+struct spwd *getspnam (const char *name)
+{
+ struct spwd *sp;
+
+#ifdef USE_NIS
+ char buf[BUFSIZ];
+ static char save_name[16];
+ bool nis_disabled = false;
+#endif
+
+ setspent ();
+
+#ifdef USE_NIS
+ /*
+ * Search the shadow.byname map for this user.
+ */
+
+ if (!nis_ignore && !nis_bound) {
+ bind_nis ();
+ }
+
+ if (!nis_ignore && nis_bound) {
+ char *cp;
+
+ if (yp_match (nis_domain, "shadow.byname", name,
+ strlen (name), &nis_val, &nis_vallen) == 0) {
+
+ cp = strchr (nis_val, '\n');
+ if (NULL != cp) {
+ *cp = '\0';
+ }
+
+ nis_state = middle;
+ sp = my_sgetspent (nis_val);
+ if (NULL != sp) {
+ strcpy (save_name, sp->sp_namp);
+ nis_key = save_name;
+ nis_keylen = strlen (save_name);
+ }
+ endspent ();
+ return sp;
+ } else {
+ nis_state = native2;
+ }
+ }
+#endif
+#ifdef USE_NIS
+ /*
+ * NEEDSWORK -- this is a mess, and it is the same mess in the
+ * other three files. I can't just blindly turn off NIS because
+ * this might be the first pass through the local files. In
+ * that case, I never discover that NIS is present.
+ */
+
+ if (nis_used) {
+ nis_ignore = true;
+ nis_disabled = true;
+ }
+#endif
+ while ((sp = getspent ()) != (struct spwd *) 0) {
+ if (strcmp (name, sp->sp_namp) == 0) {
+ break;
+ }
+ }
+#ifdef USE_NIS
+ if (nis_disabled) {
+ nis_ignore = false;
+ }
+#endif
+ endspent ();
+ return (sp);
+}
+#else
+extern int errno; /* warning: ANSI C forbids an empty source file */
+#endif
+
diff --git a/lib/shadowio.c b/lib/shadowio.c
new file mode 100644
index 0000000..676b1f1
--- /dev/null
+++ b/lib/shadowio.c
@@ -0,0 +1,268 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 , Michał Moskal
+ * Copyright (c) 2005 , Tomasz Kłoczko
+ * 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.
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include "prototypes.h"
+#include "defines.h"
+#include <shadow.h>
+#include <stdio.h>
+#include "commonio.h"
+#include "getdef.h"
+#include "shadowio.h"
+#ifdef WITH_TCB
+#include <tcb.h>
+#include "tcbfuncs.h"
+#endif /* WITH_TCB */
+
+static /*@null@*/ /*@only@*/void *shadow_dup (const void *ent)
+{
+ const struct spwd *sp = ent;
+
+ return __spw_dup (sp);
+}
+
+static void shadow_free (/*@out@*//*@only@*/void *ent)
+{
+ struct spwd *sp = ent;
+
+ spw_free (sp);
+}
+
+static const char *shadow_getname (const void *ent)
+{
+ const struct spwd *sp = ent;
+
+ return sp->sp_namp;
+}
+
+static void *shadow_parse (const char *line)
+{
+ return (void *) sgetspent (line);
+}
+
+static int shadow_put (const void *ent, FILE * file)
+{
+ const struct spwd *sp = ent;
+
+ if ( (NULL == sp)
+ || (valid_field (sp->sp_namp, ":\n") == -1)
+ || (valid_field (sp->sp_pwdp, ":\n") == -1)) {
+ return -1;
+ }
+
+ return (putspent (sp, file) == -1) ? -1 : 0;
+}
+
+static struct commonio_ops shadow_ops = {
+ shadow_dup,
+ shadow_free,
+ shadow_getname,
+ shadow_parse,
+ shadow_put,
+ fgets,
+ fputs,
+ NULL, /* open_hook */
+ NULL /* close_hook */
+};
+
+static struct commonio_db shadow_db = {
+ SHADOW_FILE, /* filename */
+ &shadow_ops, /* ops */
+ NULL, /* fp */
+#ifdef WITH_SELINUX
+ NULL, /* scontext */
+#endif /* WITH_SELINUX */
+ 0400, /* st_mode */
+ 0, /* st_uid */
+ 0, /* st_gid */
+ NULL, /* head */
+ NULL, /* tail */
+ NULL, /* cursor */
+ false, /* changed */
+ false, /* isopen */
+ false, /* locked */
+ false, /* readonly */
+ false /* setname */
+};
+
+int spw_setdbname (const char *filename)
+{
+ return commonio_setname (&shadow_db, filename);
+}
+
+/*@observer@*/const char *spw_dbname (void)
+{
+ return shadow_db.filename;
+}
+
+bool spw_file_present (void)
+{
+ if (getdef_bool ("FORCE_SHADOW"))
+ return true;
+ return commonio_present (&shadow_db);
+}
+
+int spw_lock (void)
+{
+#ifdef WITH_TCB
+ int retval = 0;
+
+ if (!getdef_bool ("USE_TCB")) {
+#endif /* WITH_TCB */
+ return commonio_lock (&shadow_db);
+#ifdef WITH_TCB
+ }
+ if (shadowtcb_drop_priv () == SHADOWTCB_FAILURE) {
+ return 0;
+ }
+ if (lckpwdf_tcb (shadow_db.filename) == 0) {
+ shadow_db.locked = 1;
+ retval = 1;
+ }
+ if (shadowtcb_gain_priv () == SHADOWTCB_FAILURE) {
+ return 0;
+ }
+ return retval;
+#endif /* WITH_TCB */
+}
+
+int spw_open (int mode)
+{
+ int retval = 0;
+#ifdef WITH_TCB
+ bool use_tcb = getdef_bool ("USE_TCB");
+
+ if (use_tcb && (shadowtcb_drop_priv () == SHADOWTCB_FAILURE)) {
+ return 0;
+ }
+#endif /* WITH_TCB */
+ retval = commonio_open (&shadow_db, mode);
+#ifdef WITH_TCB
+ if (use_tcb && (shadowtcb_gain_priv () == SHADOWTCB_FAILURE)) {
+ return 0;
+ }
+#endif /* WITH_TCB */
+ return retval;
+}
+
+/*@observer@*/ /*@null@*/const struct spwd *spw_locate (const char *name)
+{
+ return commonio_locate (&shadow_db, name);
+}
+
+int spw_update (const struct spwd *sp)
+{
+ return commonio_update (&shadow_db, (const void *) sp);
+}
+
+int spw_remove (const char *name)
+{
+ return commonio_remove (&shadow_db, name);
+}
+
+int spw_rewind (void)
+{
+ return commonio_rewind (&shadow_db);
+}
+
+/*@observer@*/ /*@null@*/const struct spwd *spw_next (void)
+{
+ return commonio_next (&shadow_db);
+}
+
+int spw_close (void)
+{
+ int retval = 0;
+#ifdef WITH_TCB
+ bool use_tcb = getdef_bool ("USE_TCB");
+
+ if (use_tcb && (shadowtcb_drop_priv () == SHADOWTCB_FAILURE)) {
+ return 0;
+ }
+#endif /* WITH_TCB */
+ retval = commonio_close (&shadow_db);
+#ifdef WITH_TCB
+ if (use_tcb && (shadowtcb_gain_priv () == SHADOWTCB_FAILURE)) {
+ return 0;
+ }
+#endif /* WITH_TCB */
+ return retval;
+}
+
+int spw_unlock (void)
+{
+#ifdef WITH_TCB
+ int retval = 0;
+
+ if (!getdef_bool ("USE_TCB")) {
+#endif /* WITH_TCB */
+ return commonio_unlock (&shadow_db);
+#ifdef WITH_TCB
+ }
+ if (shadowtcb_drop_priv () == SHADOWTCB_FAILURE) {
+ return 0;
+ }
+ if (ulckpwdf_tcb () == 0) {
+ shadow_db.locked = 0;
+ retval = 1;
+ }
+ if (shadowtcb_gain_priv () == SHADOWTCB_FAILURE) {
+ return 0;
+ }
+ return retval;
+#endif /* WITH_TCB */
+}
+
+struct commonio_entry *__spw_get_head (void)
+{
+ return shadow_db.head;
+}
+
+void __spw_del_entry (const struct commonio_entry *ent)
+{
+ commonio_del_entry (&shadow_db, ent);
+}
+
+/* Sort with respect to passwd ordering. */
+int spw_sort ()
+{
+#ifdef WITH_TCB
+ if (getdef_bool ("USE_TCB")) {
+ return 0;
+ }
+#endif /* WITH_TCB */
+ return commonio_sort_wrt (&shadow_db, __pw_get_db ());
+}
diff --git a/lib/shadowio.h b/lib/shadowio.h
new file mode 100644
index 0000000..5384b1d
--- /dev/null
+++ b/lib/shadowio.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008 , 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.
+ */
+
+/* $Id$ */
+#ifndef SHADOWIO_H
+#define SHADOWIO_H
+
+#include "defines.h"
+
+extern int spw_close (void);
+extern bool spw_file_present (void);
+extern /*@observer@*/ /*@null@*/const struct spwd *spw_locate (const char *name);
+extern int spw_lock (void);
+extern int spw_setdbname (const char *filename);
+extern /*@observer@*/const char *spw_dbname (void);
+extern /*@observer@*/ /*@null@*/const struct spwd *spw_next (void);
+extern int spw_open (int mode);
+extern int spw_remove (const char *name);
+extern int spw_rewind (void);
+extern int spw_unlock (void);
+extern int spw_update (const struct spwd *sp);
+extern int spw_sort (void);
+
+#endif
diff --git a/lib/shadowmem.c b/lib/shadowmem.c
new file mode 100644
index 0000000..8989598
--- /dev/null
+++ b/lib/shadowmem.c
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 , Michał Moskal
+ * Copyright (c) 2005 , Tomasz Kłoczko
+ * Copyright (c) 2007 - 2013, 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 "prototypes.h"
+#include "defines.h"
+#include <shadow.h>
+#include <stdio.h>
+#include "shadowio.h"
+
+/*@null@*/ /*@only@*/struct spwd *__spw_dup (const struct spwd *spent)
+{
+ struct spwd *sp;
+
+ sp = (struct spwd *) malloc (sizeof *sp);
+ if (NULL == sp) {
+ return NULL;
+ }
+ /* The libc might define other fields. They won't be copied. */
+ memset (sp, 0, sizeof *sp);
+ sp->sp_lstchg = spent->sp_lstchg;
+ sp->sp_min = spent->sp_min;
+ sp->sp_max = spent->sp_max;
+ sp->sp_warn = spent->sp_warn;
+ sp->sp_inact = spent->sp_inact;
+ sp->sp_expire = spent->sp_expire;
+ sp->sp_flag = spent->sp_flag;
+ /*@-mustfreeonly@*/
+ sp->sp_namp = strdup (spent->sp_namp);
+ /*@=mustfreeonly@*/
+ if (NULL == sp->sp_namp) {
+ free(sp);
+ return NULL;
+ }
+ /*@-mustfreeonly@*/
+ sp->sp_pwdp = strdup (spent->sp_pwdp);
+ /*@=mustfreeonly@*/
+ if (NULL == sp->sp_pwdp) {
+ free(sp->sp_namp);
+ free(sp);
+ return NULL;
+ }
+
+ return sp;
+}
+
+void spw_free (/*@out@*/ /*@only@*/struct spwd *spent)
+{
+ free (spent->sp_namp);
+ if (NULL != spent->sp_pwdp) {
+ memzero (spent->sp_pwdp, strlen (spent->sp_pwdp));
+ free (spent->sp_pwdp);
+ }
+ free (spent);
+}
+
diff --git a/lib/spawn.c b/lib/spawn.c
new file mode 100644
index 0000000..d0b5fb2
--- /dev/null
+++ b/lib/spawn.c
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2011 , Jonathan Nieder
+ * 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>
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+#include "exitcodes.h"
+#include "prototypes.h"
+
+int run_command (const char *cmd, const char *argv[],
+ /*@null@*/const char *envp[], /*@out@*/int *status)
+{
+ pid_t pid, wpid;
+
+ if (NULL == envp) {
+ envp = (const char **)environ;
+ }
+
+ (void) fflush (stdout);
+ (void) fflush (stderr);
+
+ pid = fork ();
+ if (0 == pid) {
+ (void) execve (cmd, (char * const *) argv,
+ (char * const *) envp);
+ if (ENOENT == errno) {
+ exit (E_CMD_NOTFOUND);
+ }
+ fprintf (stderr, "%s: cannot execute %s: %s\n",
+ Prog, cmd, strerror (errno));
+ exit (E_CMD_NOEXEC);
+ } else if ((pid_t)-1 == pid) {
+ fprintf (stderr, "%s: cannot execute %s: %s\n",
+ Prog, cmd, strerror (errno));
+ return -1;
+ }
+
+ do {
+ wpid = waitpid (pid, status, 0);
+ if ((pid_t)-1 == wpid && errno == ECHILD)
+ break;
+ } while ( ((pid_t)-1 == wpid && errno == EINTR)
+ || ((pid_t)-1 != wpid && wpid != pid));
+
+ if ((pid_t)-1 == wpid) {
+ fprintf (stderr, "%s: waitpid (status: %d): %s\n",
+ Prog, *status, strerror (errno));
+ return -1;
+ }
+
+ return 0;
+}
+
diff --git a/lib/sssd.c b/lib/sssd.c
new file mode 100644
index 0000000..80e49e5
--- /dev/null
+++ b/lib/sssd.c
@@ -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 */
+
diff --git a/lib/sssd.h b/lib/sssd.h
new file mode 100644
index 0000000..00ff2a8
--- /dev/null
+++ b/lib/sssd.h
@@ -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
+
diff --git a/lib/subordinateio.c b/lib/subordinateio.c
new file mode 100644
index 0000000..0d89a64
--- /dev/null
+++ b/lib/subordinateio.c
@@ -0,0 +1,698 @@
+/*
+ * Copyright (c) 2012 - Eric Biederman
+ */
+
+#include <config.h>
+
+#ifdef ENABLE_SUBIDS
+
+#include "prototypes.h"
+#include "defines.h"
+#include <stdio.h>
+#include "commonio.h"
+#include "subordinateio.h"
+#include <sys/types.h>
+#include <pwd.h>
+
+struct subordinate_range {
+ const char *owner;
+ unsigned long start;
+ unsigned long count;
+};
+
+#define NFIELDS 3
+
+/*
+ * subordinate_dup: create a duplicate range
+ *
+ * @ent: a pointer to a subordinate_range struct
+ *
+ * Returns a pointer to a newly allocated duplicate subordinate_range struct
+ * or NULL on failure
+ */
+static /*@null@*/ /*@only@*/void *subordinate_dup (const void *ent)
+{
+ const struct subordinate_range *rangeent = ent;
+ struct subordinate_range *range;
+
+ range = (struct subordinate_range *) malloc (sizeof *range);
+ if (NULL == range) {
+ return NULL;
+ }
+ range->owner = strdup (rangeent->owner);
+ if (NULL == range->owner) {
+ free(range);
+ return NULL;
+ }
+ range->start = rangeent->start;
+ range->count = rangeent->count;
+
+ return range;
+}
+
+/*
+ * subordinate_free: free a subordinate_range struct
+ *
+ * @ent: pointer to a subordinate_range struct to free.
+ */
+static void subordinate_free (/*@out@*/ /*@only@*/void *ent)
+{
+ struct subordinate_range *rangeent = ent;
+
+ free ((void *)(rangeent->owner));
+ free (rangeent);
+}
+
+/*
+ * subordinate_parse:
+ *
+ * @line: a line to parse
+ *
+ * Returns a pointer to a subordinate_range struct representing the values
+ * in @line, or NULL on failure. Note that the returned value should not
+ * be freed by the caller.
+ */
+static void *subordinate_parse (const char *line)
+{
+ static struct subordinate_range range;
+ static char rangebuf[1024];
+ int i;
+ char *cp;
+ char *fields[NFIELDS];
+
+ /*
+ * Copy the string to a temporary buffer so the substrings can
+ * be modified to be NULL terminated.
+ */
+ if (strlen (line) >= sizeof rangebuf)
+ return NULL; /* fail if too long */
+ strcpy (rangebuf, line);
+
+ /*
+ * Save a pointer to the start of each colon separated
+ * field. The fields are converted into NUL terminated strings.
+ */
+
+ for (cp = rangebuf, i = 0; (i < NFIELDS) && (NULL != cp); i++) {
+ fields[i] = cp;
+ while (('\0' != *cp) && (':' != *cp)) {
+ cp++;
+ }
+
+ if ('\0' != *cp) {
+ *cp = '\0';
+ cp++;
+ } else {
+ cp = NULL;
+ }
+ }
+
+ /*
+ * There must be exactly NFIELDS colon separated fields or
+ * the entry is invalid. Also, fields must be non-blank.
+ */
+ if (i != NFIELDS || *fields[0] == '\0' || *fields[1] == '\0' || *fields[2] == '\0')
+ return NULL;
+ range.owner = fields[0];
+ if (getulong (fields[1], &range.start) == 0)
+ return NULL;
+ if (getulong (fields[2], &range.count) == 0)
+ return NULL;
+
+ return &range;
+}
+
+/*
+ * subordinate_put: print a subordinate_range value to a file
+ *
+ * @ent: a pointer to a subordinate_range struct to print out.
+ * @file: file to which to print.
+ *
+ * Returns 0 on success, -1 on error.
+ */
+static int subordinate_put (const void *ent, FILE * file)
+{
+ const struct subordinate_range *range = ent;
+
+ return fprintf(file, "%s:%lu:%lu\n",
+ range->owner,
+ range->start,
+ range->count) < 0 ? -1 : 0;
+}
+
+static struct commonio_ops subordinate_ops = {
+ subordinate_dup, /* dup */
+ subordinate_free, /* free */
+ NULL, /* getname */
+ subordinate_parse, /* parse */
+ subordinate_put, /* put */
+ fgets, /* fgets */
+ fputs, /* fputs */
+ NULL, /* open_hook */
+ NULL, /* close_hook */
+};
+
+/*
+ * range_exists: Check whether @owner owns any ranges
+ *
+ * @db: database to query
+ * @owner: owner being queried
+ *
+ * Returns true if @owner owns any subuid ranges, false otherwise.
+ */
+static const bool range_exists(struct commonio_db *db, const char *owner)
+{
+ const struct subordinate_range *range;
+ commonio_rewind(db);
+ while ((range = commonio_next(db)) != NULL) {
+ if (0 == strcmp(range->owner, owner))
+ return true;
+ }
+ return false;
+}
+
+/*
+ * find_range: find a range which @owner is authorized to use which includes
+ * subuid @val.
+ *
+ * @db: database to query
+ * @owner: owning uid being queried
+ * @val: subuid being searched for.
+ *
+ * Returns a range of subuids belonging to @owner and including the subuid
+ * @val, or NULL if no such range exists.
+ */
+static const struct subordinate_range *find_range(struct commonio_db *db,
+ const char *owner, unsigned long val)
+{
+ const struct subordinate_range *range;
+
+ /*
+ * Search for exact username/group specification
+ *
+ * This is the original method - go fast through the db, doing only
+ * exact username/group string comparison. Therefore we leave it as-is
+ * for the time being, in order to keep it equally fast as it was
+ * before.
+ */
+ commonio_rewind(db);
+ while ((range = commonio_next(db)) != NULL) {
+ unsigned long first = range->start;
+ unsigned long last = first + range->count - 1;
+
+ if (0 != strcmp(range->owner, owner))
+ continue;
+
+ if ((val >= first) && (val <= last))
+ return range;
+ }
+
+
+ /*
+ * We only do special handling for these two files
+ */
+ if ((0 != strcmp(db->filename, "/etc/subuid")) && (0 != strcmp(db->filename, "/etc/subgid")))
+ return NULL;
+
+ /*
+ * Search loop above did not produce any result. Let's rerun it,
+ * 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.)
+ */
+ struct passwd *pwd;
+ uid_t owner_uid;
+ char owner_uid_string[33] = "";
+
+
+ /* Get UID of the username we are looking for */
+ pwd = getpwnam(owner);
+ if (NULL == pwd) {
+ /* Username not defined in /etc/passwd, or error occured during lookup */
+ return NULL;
+ }
+ owner_uid = pwd->pw_uid;
+ sprintf(owner_uid_string, "%lu", (unsigned long int)owner_uid);
+
+ commonio_rewind(db);
+ while ((range = commonio_next(db)) != NULL) {
+ unsigned long first = range->start;
+ unsigned long last = first + range->count - 1;
+
+ /* For performance reasons check range before using getpwnam() */
+ if ((val < first) || (val > last)) {
+ continue;
+ }
+
+ /*
+ * Range matches. Check if range owner is specified
+ * as numeric UID and if it matches.
+ */
+ if (0 == strcmp(range->owner, owner_uid_string)) {
+ return range;
+ }
+
+ /*
+ * Ok, this range owner is not specified as numeric UID
+ * we are looking for. It may be specified as another
+ * UID or as a literal username.
+ *
+ * If specified as another UID, the call to getpwnam()
+ * will return NULL.
+ *
+ * If specified as literal username, we will get its
+ * UID and compare that to UID we are looking for.
+ */
+ const struct passwd *range_owner_pwd;
+
+ range_owner_pwd = getpwnam(range->owner);
+ if (NULL == range_owner_pwd) {
+ continue;
+ }
+
+ if (owner_uid == range_owner_pwd->pw_uid) {
+ return range;
+ }
+ }
+
+ return NULL;
+}
+
+/*
+ * have_range: check whether @owner is authorized to use the range
+ * (@start .. @start+@count-1).
+ * @db: database to check
+ * @owner: owning uid being queried
+ * @start: start of range
+ * @count: number of uids in range
+ *
+ * Returns true if @owner is authorized to use the range, false otherwise.
+ */
+static bool have_range(struct commonio_db *db,
+ const char *owner, unsigned long start, unsigned long count)
+{
+ const struct subordinate_range *range;
+ unsigned long end;
+
+ if (count == 0)
+ return false;
+
+ end = start + count - 1;
+ range = find_range (db, owner, start);
+ while (range) {
+ unsigned long last;
+
+ last = range->start + range->count - 1;
+ if (last >= (start + count - 1))
+ return true;
+
+ count = end - last;
+ start = last + 1;
+ range = find_range(db, owner, start);
+ }
+ return false;
+}
+
+/*
+ * subordinate_range_cmp: compare uid ranges
+ *
+ * @p1: pointer to a commonio_entry struct to compare
+ * @p2: pointer to second commonio_entry struct to compare
+ *
+ * Returns 0 if the entries are the same. Otherwise return -1
+ * if the range in p1 is lower than that in p2, or (if the ranges are
+ * equal) if the owning uid in p1 is lower than p2's. Return 1 if p1's
+ * range or owning uid is great than p2's.
+ */
+static int subordinate_range_cmp (const void *p1, const void *p2)
+{
+ struct subordinate_range *range1, *range2;
+
+ if ((*(struct commonio_entry **) p1)->eptr == NULL)
+ return 1;
+ if ((*(struct commonio_entry **) p2)->eptr == NULL)
+ return -1;
+
+ range1 = ((struct subordinate_range *) (*(struct commonio_entry **) p1)->eptr);
+ range2 = ((struct subordinate_range *) (*(struct commonio_entry **) p2)->eptr);
+
+ if (range1->start < range2->start)
+ return -1;
+ else if (range1->start > range2->start)
+ return 1;
+ else if (range1->count < range2->count)
+ return -1;
+ else if (range1->count > range2->count)
+ return 1;
+ else
+ return strcmp(range1->owner, range2->owner);
+}
+
+/*
+ * find_free_range: find an unused consecutive sequence of ids to allocate
+ * to a user.
+ * @db: database to search
+ * @min: the first uid in the range to find
+ * @max: the highest uid to find
+ * @count: the number of uids needed
+ *
+ * Return the lowest new uid, or ULONG_MAX on failure.
+ */
+static unsigned long find_free_range(struct commonio_db *db,
+ unsigned long min, unsigned long max,
+ unsigned long count)
+{
+ const struct subordinate_range *range;
+ unsigned long low, high;
+
+ /* When given invalid parameters fail */
+ if ((count == 0) || (max < min))
+ goto fail;
+
+ /* Sort by range then by owner */
+ commonio_sort (db, subordinate_range_cmp);
+ commonio_rewind(db);
+
+ low = min;
+ while ((range = commonio_next(db)) != NULL) {
+ unsigned long first = range->start;
+ unsigned long last = first + range->count - 1;
+
+ /* Find the top end of the hole before this range */
+ high = first;
+
+ /* Don't allocate IDs after max (included) */
+ if (high > max + 1) {
+ high = max + 1;
+ }
+
+ /* Is the hole before this range large enough? */
+ if ((high > low) && ((high - low) >= count))
+ return low;
+
+ /* Compute the low end of the next hole */
+ if (low < (last + 1))
+ low = last + 1;
+ if (low > max)
+ goto fail;
+ }
+
+ /* Is the remaining unclaimed area large enough? */
+ if (((max - low) + 1) >= count)
+ return low;
+fail:
+ return ULONG_MAX;
+}
+
+/*
+ * add_range: add a subuid range to an owning uid's list of authorized
+ * subuids.
+ * @db: database to which to add
+ * @owner: uid which owns the subuid
+ * @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 success. On error
+ * return 0 and set errno appropriately.
+ */
+static int add_range(struct commonio_db *db,
+ const char *owner, unsigned long start, unsigned long count)
+{
+ struct subordinate_range range;
+ range.owner = owner;
+ range.start = start;
+ range.count = count;
+
+ /* See if the range is already present */
+ if (have_range(db, owner, start, count))
+ return 1;
+
+ /* Otherwise append the range */
+ return commonio_append(db, &range);
+}
+
+/*
+ * remove_range: remove a range of subuids from an owning uid's list
+ * of authorized subuids.
+ * @db: database to work on
+ * @owner: owning uid whose range is being removed
+ * @start: start of the range to be removed
+ * @count: number of uids in the range.
+ *
+ * Returns 0 on failure, 1 on success. Failure means that we needed to
+ * create a new range to represent the new limits, and failed doing so.
+ */
+static int remove_range (struct commonio_db *db,
+ const char *owner,
+ unsigned long start, unsigned long count)
+{
+ struct commonio_entry *ent;
+ unsigned long end;
+
+ if (count == 0) {
+ return 1;
+ }
+
+ end = start + count - 1;
+ for (ent = db->head; NULL != ent; ent = ent->next) {
+ struct subordinate_range *range = ent->eptr;
+ unsigned long first;
+ unsigned long last;
+
+ /* Skip unparsed entries */
+ if (NULL == range) {
+ continue;
+ }
+
+ first = range->start;
+ last = first + range->count - 1;
+
+ /* Skip entries with a different owner */
+ if (0 != strcmp (range->owner, owner)) {
+ continue;
+ }
+
+ /* Skip entries outside of the range to remove */
+ if ((end < first) || (start > last)) {
+ continue;
+ }
+
+ if (start <= first) {
+ if (end >= last) {
+ /* to be removed: [start, end]
+ * range: [first, last] */
+ /* entry completely contained in the
+ * range to remove */
+ commonio_del_entry (db, ent);
+ } else {
+ /* to be removed: [start, end]
+ * range: [first, last] */
+ /* Remove only the start of the entry */
+ range->start = end + 1;
+ range->count = (last - range->start) + 1;
+
+ ent->changed = true;
+ db->changed = true;
+ }
+ } else {
+ if (end >= last) {
+ /* to be removed: [start, end]
+ * range: [first, last] */
+ /* Remove only the end of the entry */
+ range->count = start - range->start;
+
+ ent->changed = true;
+ db->changed = true;
+ } else {
+ /* to be removed: [start, end]
+ * range: [first, last] */
+ /* Remove the middle of the range
+ * This requires to create a new range */
+ struct subordinate_range tail;
+ tail.owner = range->owner;
+ tail.start = end + 1;
+ tail.count = (last - tail.start) + 1;
+
+ if (commonio_append (db, &tail) == 0) {
+ return 0;
+ }
+
+ range->count = start - range->start;
+
+ ent->changed = true;
+ db->changed = true;
+ }
+ }
+ }
+
+ return 1;
+}
+
+static struct commonio_db subordinate_uid_db = {
+ "/etc/subuid", /* filename */
+ &subordinate_ops, /* ops */
+ NULL, /* fp */
+#ifdef WITH_SELINUX
+ NULL, /* scontext */
+#endif
+ 0644, /* st_mode */
+ 0, /* st_uid */
+ 0, /* st_gid */
+ NULL, /* head */
+ NULL, /* tail */
+ NULL, /* cursor */
+ false, /* changed */
+ false, /* isopen */
+ false, /* locked */
+ false, /* readonly */
+ false /* setname */
+};
+
+int sub_uid_setdbname (const char *filename)
+{
+ return commonio_setname (&subordinate_uid_db, filename);
+}
+
+/*@observer@*/const char *sub_uid_dbname (void)
+{
+ return subordinate_uid_db.filename;
+}
+
+bool sub_uid_file_present (void)
+{
+ return commonio_present (&subordinate_uid_db);
+}
+
+int sub_uid_lock (void)
+{
+ return commonio_lock (&subordinate_uid_db);
+}
+
+int sub_uid_open (int mode)
+{
+ return commonio_open (&subordinate_uid_db, mode);
+}
+
+bool sub_uid_assigned(const char *owner)
+{
+ return range_exists (&subordinate_uid_db, owner);
+}
+
+bool have_sub_uids(const char *owner, uid_t start, unsigned long count)
+{
+ return have_range (&subordinate_uid_db, owner, start, count);
+}
+
+int sub_uid_add (const char *owner, uid_t start, unsigned long count)
+{
+ return add_range (&subordinate_uid_db, owner, start, count);
+}
+
+int sub_uid_remove (const char *owner, uid_t start, unsigned long count)
+{
+ return remove_range (&subordinate_uid_db, owner, start, count);
+}
+
+int sub_uid_close (void)
+{
+ return commonio_close (&subordinate_uid_db);
+}
+
+int sub_uid_unlock (void)
+{
+ return commonio_unlock (&subordinate_uid_db);
+}
+
+uid_t sub_uid_find_free_range(uid_t min, uid_t max, unsigned long count)
+{
+ unsigned long start;
+ start = find_free_range (&subordinate_uid_db, min, max, count);
+ return start == ULONG_MAX ? (uid_t) -1 : start;
+}
+
+static struct commonio_db subordinate_gid_db = {
+ "/etc/subgid", /* filename */
+ &subordinate_ops, /* ops */
+ NULL, /* fp */
+#ifdef WITH_SELINUX
+ NULL, /* scontext */
+#endif
+ 0644, /* st_mode */
+ 0, /* st_uid */
+ 0, /* st_gid */
+ NULL, /* head */
+ NULL, /* tail */
+ NULL, /* cursor */
+ false, /* changed */
+ false, /* isopen */
+ false, /* locked */
+ false, /* readonly */
+ false /* setname */
+};
+
+int sub_gid_setdbname (const char *filename)
+{
+ return commonio_setname (&subordinate_gid_db, filename);
+}
+
+/*@observer@*/const char *sub_gid_dbname (void)
+{
+ return subordinate_gid_db.filename;
+}
+
+bool sub_gid_file_present (void)
+{
+ return commonio_present (&subordinate_gid_db);
+}
+
+int sub_gid_lock (void)
+{
+ return commonio_lock (&subordinate_gid_db);
+}
+
+int sub_gid_open (int mode)
+{
+ return commonio_open (&subordinate_gid_db, mode);
+}
+
+bool have_sub_gids(const char *owner, gid_t start, unsigned long count)
+{
+ return have_range(&subordinate_gid_db, owner, start, count);
+}
+
+bool sub_gid_assigned(const char *owner)
+{
+ return range_exists (&subordinate_gid_db, owner);
+}
+
+int sub_gid_add (const char *owner, gid_t start, unsigned long count)
+{
+ return add_range (&subordinate_gid_db, owner, start, count);
+}
+
+int sub_gid_remove (const char *owner, gid_t start, unsigned long count)
+{
+ return remove_range (&subordinate_gid_db, owner, start, count);
+}
+
+int sub_gid_close (void)
+{
+ return commonio_close (&subordinate_gid_db);
+}
+
+int sub_gid_unlock (void)
+{
+ return commonio_unlock (&subordinate_gid_db);
+}
+
+gid_t sub_gid_find_free_range(gid_t min, gid_t max, unsigned long count)
+{
+ unsigned long start;
+ start = find_free_range (&subordinate_gid_db, min, max, count);
+ return start == ULONG_MAX ? (gid_t) -1 : start;
+}
+#else /* !ENABLE_SUBIDS */
+extern int errno; /* warning: ANSI C forbids an empty source file */
+#endif /* !ENABLE_SUBIDS */
+
diff --git a/lib/subordinateio.h b/lib/subordinateio.h
new file mode 100644
index 0000000..a21d72b
--- /dev/null
+++ b/lib/subordinateio.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2012- Eric W. Biederman
+ */
+
+#ifndef _SUBORDINATEIO_H
+#define _SUBORDINATEIO_H
+
+#include <config.h>
+
+#ifdef ENABLE_SUBIDS
+
+#include <sys/types.h>
+
+extern int sub_uid_close(void);
+extern bool have_sub_uids(const char *owner, uid_t start, unsigned long count);
+extern bool sub_uid_file_present (void);
+extern bool sub_uid_assigned(const char *owner);
+extern int sub_uid_lock (void);
+extern int sub_uid_setdbname (const char *filename);
+extern /*@observer@*/const char *sub_uid_dbname (void);
+extern int sub_uid_open (int mode);
+extern int sub_uid_unlock (void);
+extern int sub_uid_add (const char *owner, uid_t start, unsigned long count);
+extern int sub_uid_remove (const char *owner, uid_t start, unsigned long count);
+extern uid_t sub_uid_find_free_range(uid_t min, uid_t max, unsigned long count);
+
+extern int sub_gid_close(void);
+extern bool have_sub_gids(const char *owner, gid_t start, unsigned long count);
+extern bool sub_gid_file_present (void);
+extern bool sub_gid_assigned(const char *owner);
+extern int sub_gid_lock (void);
+extern int sub_gid_setdbname (const char *filename);
+extern /*@observer@*/const char *sub_gid_dbname (void);
+extern int sub_gid_open (int mode);
+extern int sub_gid_unlock (void);
+extern int sub_gid_add (const char *owner, gid_t start, unsigned long count);
+extern int sub_gid_remove (const char *owner, gid_t start, unsigned long count);
+extern uid_t sub_gid_find_free_range(gid_t min, gid_t max, unsigned long count);
+#endif /* ENABLE_SUBIDS */
+
+#endif
diff --git a/lib/tcbfuncs.c b/lib/tcbfuncs.c
new file mode 100644
index 0000000..2f694bd
--- /dev/null
+++ b/lib/tcbfuncs.c
@@ -0,0 +1,613 @@
+/*
+ * Copyright (c) 2001 Rafal Wojtczuk, Solar Designer
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted.
+ *
+ * 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.
+ */
+
+#define _GNU_SOURCE
+
+#include <errno.h>
+#include <fcntl.h>
+#include <grp.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <tcb.h>
+#include <unistd.h>
+
+#include "config.h"
+
+#include "defines.h"
+#include "prototypes.h"
+#include "getdef.h"
+#include "shadowio.h"
+#include "tcbfuncs.h"
+
+#define SHADOWTCB_HASH_BY 1000
+#define SHADOWTCB_LOCK_SUFFIX ".lock"
+
+static /*@null@*//*@only@*/char *stored_tcb_user = NULL;
+
+shadowtcb_status shadowtcb_drop_priv (void)
+{
+ if (!getdef_bool ("USE_TCB")) {
+ return SHADOWTCB_SUCCESS;
+ }
+
+ if (NULL != stored_tcb_user) {
+ if (tcb_drop_priv (stored_tcb_user) == 0) {
+ return SHADOWTCB_SUCCESS;
+ }
+ }
+
+ return SHADOWTCB_FAILURE;
+}
+
+shadowtcb_status shadowtcb_gain_priv (void)
+{
+ if (!getdef_bool ("USE_TCB")) {
+ return SHADOWTCB_SUCCESS;
+ }
+
+ return (tcb_gain_priv () == 0) ? SHADOWTCB_SUCCESS : SHADOWTCB_FAILURE;
+}
+
+/* In case something goes wrong, we return immediately, not polluting the
+ * code with free(). All errors are fatal, so the application is expected
+ * to exit soon.
+ */
+#define OUT_OF_MEMORY do { \
+ fprintf (stderr, _("%s: out of memory\n"), Prog); \
+ (void) fflush (stderr); \
+} while (false)
+
+/* Returns user's tcb directory path relative to TCB_DIR. */
+static /*@null@*/ char *shadowtcb_path_rel (const char *name, uid_t uid)
+{
+ char *ret;
+
+ if (!getdef_bool ("TCB_SYMLINKS") || uid < SHADOWTCB_HASH_BY) {
+ if (asprintf (&ret, "%s", name) == -1) {
+ OUT_OF_MEMORY;
+ return NULL;
+ }
+ } else if (uid < SHADOWTCB_HASH_BY * SHADOWTCB_HASH_BY) {
+ if (asprintf (&ret, ":%dK/%s",
+ uid / SHADOWTCB_HASH_BY, name) == -1) {
+ OUT_OF_MEMORY;
+ return NULL;
+ }
+ } else {
+ if (asprintf (&ret, ":%dM/:%dK/%s",
+ uid / (SHADOWTCB_HASH_BY * SHADOWTCB_HASH_BY),
+ (uid % (SHADOWTCB_HASH_BY * SHADOWTCB_HASH_BY)) / SHADOWTCB_HASH_BY,
+ name) == -1) {
+ OUT_OF_MEMORY;
+ return NULL;
+ }
+ }
+ return ret;
+}
+
+static /*@null@*/ char *shadowtcb_path_rel_existing (const char *name)
+{
+ char *path, *rval;
+ struct stat st;
+ char link[8192];
+ ssize_t ret;
+
+ if (asprintf (&path, TCB_DIR "/%s", name) == -1) {
+ OUT_OF_MEMORY;
+ return NULL;
+ }
+ if (lstat (path, &st) != 0) {
+ fprintf (stderr,
+ _("%s: Cannot stat %s: %s\n"),
+ Prog, path, strerror (errno));
+ free (path);
+ return NULL;
+ }
+ if (S_ISDIR (st.st_mode)) {
+ free (path);
+ rval = strdup (name);
+ if (NULL == rval) {
+ OUT_OF_MEMORY;
+ return NULL;
+ }
+ return rval;
+ }
+ if (!S_ISLNK (st.st_mode)) {
+ fprintf (stderr,
+ _("%s: %s is neither a directory, nor a symlink.\n"),
+ Prog, path);
+ free (path);
+ return NULL;
+ }
+ ret = readlink (path, link, sizeof (link) - 1);
+ if (-1 == ret) {
+ fprintf (stderr,
+ _("%s: Cannot read symbolic link %s: %s\n"),
+ Prog, path, strerror (errno));
+ free (path);
+ return NULL;
+ }
+ free (path);
+ if ((size_t)ret >= sizeof(link) - 1) {
+ link[sizeof(link) - 1] = '\0';
+ fprintf (stderr,
+ _("%s: Suspiciously long symlink: %s\n"),
+ Prog, link);
+ return NULL;
+ }
+ link[(size_t)ret] = '\0';
+ rval = strdup (link);
+ if (NULL == rval) {
+ OUT_OF_MEMORY;
+ return NULL;
+ }
+ return rval;
+}
+
+static /*@null@*/ char *shadowtcb_path (const char *name, uid_t uid)
+{
+ char *ret, *rel;
+
+ rel = shadowtcb_path_rel (name, uid);
+ if (NULL == rel) {
+ return NULL;
+ }
+ if (asprintf (&ret, TCB_DIR "/%s", rel) == -1) {
+ OUT_OF_MEMORY;
+ free (rel);
+ return NULL;
+ }
+ free (rel);
+ return ret;
+}
+
+static /*@null@*/ char *shadowtcb_path_existing (const char *name)
+{
+ char *ret, *rel;
+
+ rel = shadowtcb_path_rel_existing (name);
+ if (NULL == rel) {
+ return NULL;
+ }
+ if (asprintf (&ret, TCB_DIR "/%s", rel) == -1) {
+ OUT_OF_MEMORY;
+ free (rel);
+ return NULL;
+ }
+ free (rel);
+ return ret;
+}
+
+static shadowtcb_status mkdir_leading (const char *name, uid_t uid)
+{
+ char *ind, *dir, *ptr, *path = shadowtcb_path_rel (name, uid);
+ struct stat st;
+
+ if (NULL == path) {
+ return SHADOWTCB_FAILURE;
+ }
+ ptr = path;
+ if (stat (TCB_DIR, &st) != 0) {
+ fprintf (stderr,
+ _("%s: Cannot stat %s: %s\n"),
+ Prog, TCB_DIR, strerror (errno));
+ goto out_free_path;
+ }
+ while ((ind = strchr (ptr, '/'))) {
+ *ind = '\0';
+ if (asprintf (&dir, TCB_DIR "/%s", path) == -1) {
+ OUT_OF_MEMORY;
+ return SHADOWTCB_FAILURE;
+ }
+ if ((mkdir (dir, 0700) != 0) && (errno != EEXIST)) {
+ fprintf (stderr,
+ _("%s: Cannot create directory %s: %s\n"),
+ Prog, dir, strerror (errno));
+ goto out_free_dir;
+ }
+ if (chown (dir, 0, st.st_gid) != 0) {
+ fprintf (stderr,
+ _("%s: Cannot change owner of %s: %s\n"),
+ Prog, dir, strerror (errno));
+ goto out_free_dir;
+ }
+ if (chmod (dir, 0711) != 0) {
+ fprintf (stderr,
+ _("%s: Cannot change mode of %s: %s\n"),
+ Prog, dir, strerror (errno));
+ goto out_free_dir;
+ }
+ free (dir);
+ *ind = '/';
+ ptr = ind + 1;
+ }
+ free (path);
+ return SHADOWTCB_SUCCESS;
+out_free_dir:
+ free (dir);
+out_free_path:
+ free (path);
+ return SHADOWTCB_FAILURE;
+}
+
+static shadowtcb_status unlink_suffs (const char *user)
+{
+ static char *suffs[] = { "+", "-", SHADOWTCB_LOCK_SUFFIX };
+ char *tmp;
+ int i;
+
+ for (i = 0; i < 3; i++) {
+ if (asprintf (&tmp, TCB_FMT "%s", user, suffs[i]) == -1) {
+ OUT_OF_MEMORY;
+ return SHADOWTCB_FAILURE;
+ }
+ if ((unlink (tmp) != 0) && (errno != ENOENT)) {
+ fprintf (stderr,
+ _("%s: unlink: %s: %s\n"),
+ Prog, tmp, strerror (errno));
+ free (tmp);
+ return SHADOWTCB_FAILURE;
+ }
+ free (tmp);
+ }
+
+ return SHADOWTCB_SUCCESS;
+}
+
+/* path should be a relative existing tcb directory */
+static shadowtcb_status rmdir_leading (char *path)
+{
+ char *ind, *dir;
+ shadowtcb_status ret = SHADOWTCB_SUCCESS;
+ while ((ind = strrchr (path, '/'))) {
+ *ind = '\0';
+ if (asprintf (&dir, TCB_DIR "/%s", path) == -1) {
+ OUT_OF_MEMORY;
+ return SHADOWTCB_FAILURE;
+ }
+ if (rmdir (dir) != 0) {
+ if (errno != ENOTEMPTY) {
+ fprintf (stderr,
+ _("%s: Cannot remove directory %s: %s\n"),
+ Prog, dir, strerror (errno));
+ ret = SHADOWTCB_FAILURE;
+ }
+ free (dir);
+ break;
+ }
+ free (dir);
+ }
+ return ret;
+}
+
+static shadowtcb_status move_dir (const char *user_newname, uid_t user_newid)
+{
+ char *olddir = NULL, *newdir = NULL;
+ char *real_old_dir = NULL, *real_new_dir = NULL;
+ char *real_old_dir_rel = NULL, *real_new_dir_rel = NULL;
+ uid_t old_uid, the_newid;
+ struct stat oldmode;
+ shadowtcb_status ret = SHADOWTCB_FAILURE;
+
+ if (NULL == stored_tcb_user) {
+ return SHADOWTCB_FAILURE;
+ }
+ if (asprintf (&olddir, TCB_DIR "/%s", stored_tcb_user) == -1) {
+ goto out_free_nomem;
+ }
+ if (stat (olddir, &oldmode) != 0) {
+ fprintf (stderr,
+ _("%s: Cannot stat %s: %s\n"),
+ Prog, olddir, strerror (errno));
+ goto out_free;
+ }
+ old_uid = oldmode.st_uid;
+ the_newid = (user_newid == -1) ? old_uid : user_newid;
+ real_old_dir = shadowtcb_path_existing (stored_tcb_user);
+ if (NULL == real_old_dir) {
+ goto out_free;
+ }
+ real_new_dir = shadowtcb_path (user_newname, the_newid);
+ if (NULL == real_new_dir) {
+ goto out_free;
+ }
+ if (strcmp (real_old_dir, real_new_dir) == 0) {
+ ret = SHADOWTCB_SUCCESS;
+ goto out_free;
+ }
+ real_old_dir_rel = shadowtcb_path_rel_existing (stored_tcb_user);
+ if (NULL == real_old_dir_rel) {
+ goto out_free;
+ }
+ if (mkdir_leading (user_newname, the_newid) == SHADOWTCB_FAILURE) {
+ goto out_free;
+ }
+ if (rename (real_old_dir, real_new_dir) != 0) {
+ fprintf (stderr,
+ _("%s: Cannot rename %s to %s: %s\n"),
+ Prog, real_old_dir, real_new_dir, strerror (errno));
+ goto out_free;
+ }
+ if (rmdir_leading (real_old_dir_rel) == SHADOWTCB_FAILURE) {
+ goto out_free;
+ }
+ if ((unlink (olddir) != 0) && (errno != ENOENT)) {
+ fprintf (stderr,
+ _("%s: Cannot remove %s: %s\n"),
+ Prog, olddir, strerror (errno));
+ goto out_free;
+ }
+ if (asprintf (&newdir, TCB_DIR "/%s", user_newname) == -1) {
+ goto out_free_nomem;
+ }
+ real_new_dir_rel = shadowtcb_path_rel (user_newname, the_newid);
+ if (NULL == real_new_dir_rel) {
+ goto out_free;
+ }
+ if ( (strcmp (real_new_dir, newdir) != 0)
+ && (symlink (real_new_dir_rel, newdir) != 0)) {
+ fprintf (stderr,
+ _("%s: Cannot create symbolic link %s: %s\n"),
+ Prog, real_new_dir_rel, strerror (errno));
+ goto out_free;
+ }
+ ret = SHADOWTCB_SUCCESS;
+ goto out_free;
+out_free_nomem:
+ OUT_OF_MEMORY;
+out_free:
+ free (olddir);
+ free (newdir);
+ free (real_old_dir);
+ free (real_new_dir);
+ free (real_old_dir_rel);
+ free (real_new_dir_rel);
+ return ret;
+}
+
+shadowtcb_status shadowtcb_set_user (const char* name)
+{
+ char *buf;
+ shadowtcb_status retval;
+
+ if (!getdef_bool ("USE_TCB")) {
+ return SHADOWTCB_SUCCESS;
+ }
+
+ if (NULL != stored_tcb_user) {
+ free (stored_tcb_user);
+ }
+
+ stored_tcb_user = strdup (name);
+ if (NULL == stored_tcb_user) {
+ OUT_OF_MEMORY;
+ return SHADOWTCB_FAILURE;
+ }
+ if (asprintf (&buf, TCB_FMT, name) == -1) {
+ OUT_OF_MEMORY;
+ return SHADOWTCB_FAILURE;
+ }
+
+ retval = (spw_setdbname (buf) != 0) ? SHADOWTCB_SUCCESS : SHADOWTCB_FAILURE;
+ free (buf);
+ return retval;
+}
+
+/* tcb directory must be empty before shadowtcb_remove is called. */
+shadowtcb_status shadowtcb_remove (const char *name)
+{
+ shadowtcb_status ret = SHADOWTCB_SUCCESS;
+ char *path = shadowtcb_path_existing (name);
+ char *rel = shadowtcb_path_rel_existing (name);
+ if ((NULL == path) || (NULL == rel) || (rmdir (path) != 0)) {
+ return SHADOWTCB_FAILURE;
+ }
+ if (rmdir_leading (rel) == SHADOWTCB_FAILURE) {
+ return SHADOWTCB_FAILURE;
+ }
+ free (path);
+ free (rel);
+ if (asprintf (&path, TCB_DIR "/%s", name) == -1) {
+ OUT_OF_MEMORY;
+ return SHADOWTCB_FAILURE;
+ }
+ if ((unlink (path) != 0) && (errno != ENOENT)) {
+ ret = SHADOWTCB_FAILURE;
+ }
+ free (path);
+ return ret;
+}
+
+shadowtcb_status shadowtcb_move (/*@NULL@*/const char *user_newname, uid_t user_newid)
+{
+ struct stat dirmode, filemode;
+ char *tcbdir, *shadow;
+ shadowtcb_status ret = SHADOWTCB_FAILURE;
+
+ if (!getdef_bool ("USE_TCB")) {
+ return SHADOWTCB_SUCCESS;
+ }
+ if (NULL == stored_tcb_user) {
+ return SHADOWTCB_FAILURE;
+ }
+ if (NULL == user_newname) {
+ user_newname = stored_tcb_user;
+ }
+ if (move_dir (user_newname, user_newid) == SHADOWTCB_FAILURE) {
+ return SHADOWTCB_FAILURE;
+ }
+ if (-1 == user_newid) {
+ return SHADOWTCB_SUCCESS;
+ }
+ if ( (asprintf (&tcbdir, TCB_DIR "/%s", user_newname) == -1)
+ || (asprintf (&shadow, TCB_FMT, user_newname) == -1)) {
+ OUT_OF_MEMORY;
+ return SHADOWTCB_FAILURE;
+ }
+ if (stat (tcbdir, &dirmode) != 0) {
+ fprintf (stderr,
+ _("%s: Cannot stat %s: %s\n"),
+ Prog, tcbdir, strerror (errno));
+ goto out_free;
+ }
+ if (chown (tcbdir, 0, 0) != 0) {
+ fprintf (stderr,
+ _("%s: Cannot change owners of %s: %s\n"),
+ Prog, tcbdir, strerror (errno));
+ goto out_free;
+ }
+ if (chmod (tcbdir, 0700) != 0) {
+ fprintf (stderr,
+ _("%s: Cannot change mode of %s: %s\n"),
+ Prog, tcbdir, strerror (errno));
+ goto out_free;
+ }
+ if (lstat (shadow, &filemode) != 0) {
+ if (errno != ENOENT) {
+ fprintf (stderr,
+ _("%s: Cannot lstat %s: %s\n"),
+ Prog, shadow, strerror (errno));
+ goto out_free;
+ }
+ fprintf (stderr,
+ _("%s: Warning, user %s has no tcb shadow file.\n"),
+ Prog, user_newname);
+ } else {
+ if (!S_ISREG (filemode.st_mode) ||
+ filemode.st_nlink != 1) {
+ fprintf (stderr,
+ _("%s: Emergency: %s's tcb shadow is not a "
+ "regular file with st_nlink=1.\n"
+ "The account is left locked.\n"),
+ Prog, user_newname);
+ goto out_free;
+ }
+ if (chown (shadow, user_newid, filemode.st_gid) != 0) {
+ fprintf (stderr,
+ _("%s: Cannot change owner of %s: %s\n"),
+ Prog, shadow, strerror (errno));
+ goto out_free;
+ }
+ if (chmod (shadow, filemode.st_mode & 07777) != 0) {
+ fprintf (stderr,
+ _("%s: Cannot change mode of %s: %s\n"),
+ Prog, shadow, strerror (errno));
+ goto out_free;
+ }
+ }
+ if (unlink_suffs (user_newname) == SHADOWTCB_FAILURE) {
+ goto out_free;
+ }
+ if (chown (tcbdir, user_newid, dirmode.st_gid) != 0) {
+ fprintf (stderr,
+ _("%s: Cannot change owner of %s: %s\n"),
+ Prog, tcbdir, strerror (errno));
+ goto out_free;
+ }
+ ret = SHADOWTCB_SUCCESS;
+out_free:
+ free (tcbdir);
+ free (shadow);
+ return ret;
+}
+
+shadowtcb_status shadowtcb_create (const char *name, uid_t uid)
+{
+ char *dir, *shadow;
+ struct stat tcbdir_stat;
+ gid_t shadowgid, authgid;
+ struct group *gr;
+ int fd;
+ shadowtcb_status ret = SHADOWTCB_FAILURE;
+
+ if (!getdef_bool ("USE_TCB")) {
+ return SHADOWTCB_SUCCESS;
+ }
+ if (stat (TCB_DIR, &tcbdir_stat) != 0) {
+ fprintf (stderr,
+ _("%s: Cannot stat %s: %s\n"),
+ Prog, TCB_DIR, strerror (errno));
+ return SHADOWTCB_FAILURE;
+ }
+ shadowgid = tcbdir_stat.st_gid;
+ authgid = shadowgid;
+ if (getdef_bool ("TCB_AUTH_GROUP")) {
+ gr = getgrnam ("auth");
+ if (NULL != gr) {
+ authgid = gr->gr_gid;
+ }
+ }
+
+ if ( (asprintf (&dir, TCB_DIR "/%s", name) == -1)
+ || (asprintf (&shadow, TCB_FMT, name) == -1)) {
+ OUT_OF_MEMORY;
+ return SHADOWTCB_FAILURE;
+ }
+ if (mkdir (dir, 0700) != 0) {
+ fprintf (stderr,
+ _("%s: mkdir: %s: %s\n"),
+ Prog, dir, strerror (errno));
+ goto out_free;
+ }
+ fd = open (shadow, O_RDWR | O_CREAT | O_TRUNC, 0600);
+ if (fd < 0) {
+ fprintf (stderr,
+ _("%s: Cannot open %s: %s\n"),
+ Prog, shadow, strerror (errno));
+ goto out_free;
+ }
+ close (fd);
+ if (chown (shadow, 0, authgid) != 0) {
+ fprintf (stderr,
+ _("%s: Cannot change owner of %s: %s\n"),
+ Prog, shadow, strerror (errno));
+ goto out_free;
+ }
+ if (chmod (shadow, (mode_t) ((authgid == shadowgid) ? 0600 : 0640)) != 0) {
+ fprintf (stderr,
+ _("%s: Cannot change mode of %s: %s\n"),
+ Prog, shadow, strerror (errno));
+ goto out_free;
+ }
+ if (chown (dir, 0, authgid) != 0) {
+ fprintf (stderr,
+ _("%s: Cannot change owner of %s: %s\n"),
+ Prog, dir, strerror (errno));
+ goto out_free;
+ }
+ if (chmod (dir, (mode_t) ((authgid == shadowgid) ? 02700 : 02710)) != 0) {
+ fprintf (stderr,
+ _("%s: Cannot change mode of %s: %s\n"),
+ Prog, dir, strerror (errno));
+ goto out_free;
+ }
+ if ( (shadowtcb_set_user (name) == SHADOWTCB_FAILURE)
+ || (shadowtcb_move (NULL, uid) == SHADOWTCB_FAILURE)) {
+ goto out_free;
+ }
+ ret = SHADOWTCB_SUCCESS;
+out_free:
+ free (dir);
+ free (shadow);
+ return ret;
+}
+
diff --git a/lib/tcbfuncs.h b/lib/tcbfuncs.h
new file mode 100644
index 0000000..6324bc1
--- /dev/null
+++ b/lib/tcbfuncs.h
@@ -0,0 +1,19 @@
+#ifndef _TCBFUNCS_H
+#define _TCBFUNCS_H
+
+#include <sys/types.h>
+
+typedef enum {
+ SHADOWTCB_FAILURE = 0,
+ SHADOWTCB_SUCCESS = 1
+} shadowtcb_status;
+
+extern shadowtcb_status shadowtcb_drop_priv (void);
+extern shadowtcb_status shadowtcb_gain_priv (void);
+extern shadowtcb_status shadowtcb_set_user (const char *name);
+extern shadowtcb_status shadowtcb_remove (const char *name);
+extern shadowtcb_status shadowtcb_move (/*@null@*/const char *user_newname,
+ uid_t user_newid);
+extern shadowtcb_status shadowtcb_create (const char *name, uid_t uid);
+
+#endif
diff --git a/lib/utent.c b/lib/utent.c
new file mode 100644
index 0000000..45af260
--- /dev/null
+++ b/lib/utent.c
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 1993 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2005 , Tomasz Kłoczko
+ * 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>
+
+#ifndef HAVE_GETUTENT
+
+#include "defines.h"
+#include <stdio.h>
+#include <fcntl.h>
+#include <utmp.h>
+
+#ifndef lint
+static char rcsid[] = "$Id$";
+#endif
+
+static int utmp_fd = -1;
+static struct utmp utmp_buf;
+
+/*
+ * setutent - open or rewind the utmp file
+ */
+
+void setutent (void)
+{
+ if (utmp_fd == -1)
+ if ((utmp_fd = open (_UTMP_FILE, O_RDWR)) == -1)
+ utmp_fd = open (_UTMP_FILE, O_RDONLY);
+
+ if (utmp_fd != -1)
+ lseek (utmp_fd, (off_t) 0L, SEEK_SET);
+}
+
+/*
+ * endutent - close the utmp file
+ */
+
+void endutent (void)
+{
+ if (utmp_fd != -1)
+ close (utmp_fd);
+
+ utmp_fd = -1;
+}
+
+/*
+ * getutent - get the next record from the utmp file
+ */
+
+struct utmp *getutent (void)
+{
+ if (utmp_fd == -1)
+ setutent ();
+
+ if (utmp_fd == -1)
+ return 0;
+
+ if (read (utmp_fd, &utmp_buf, sizeof utmp_buf) != sizeof utmp_buf)
+ return 0;
+
+ return &utmp_buf;
+}
+#else
+extern int errno; /* warning: ANSI C forbids an empty source file */
+#endif
diff --git a/libmisc/.indent.pro b/libmisc/.indent.pro
new file mode 100644
index 0000000..fe572bb
--- /dev/null
+++ b/libmisc/.indent.pro
@@ -0,0 +1,5 @@
+-kr
+-i8
+-bad
+-pcs
+-l80
diff --git a/libmisc/Makefile.am b/libmisc/Makefile.am
new file mode 100644
index 0000000..7f43161
--- /dev/null
+++ b/libmisc/Makefile.am
@@ -0,0 +1,79 @@
+
+EXTRA_DIST = .indent.pro xgetXXbyYY.c
+
+AM_CPPFLAGS = -I$(top_srcdir)/lib $(ECONF_CPPFLAGS)
+
+noinst_LIBRARIES = libmisc.a
+
+libmisc_a_SOURCES = \
+ addgrps.c \
+ age.c \
+ audit_help.c \
+ basename.c \
+ chkname.c \
+ chkname.h \
+ chowndir.c \
+ chowntty.c \
+ cleanup.c \
+ cleanup_group.c \
+ cleanup_user.c \
+ console.c \
+ copydir.c \
+ entry.c \
+ env.c \
+ failure.c \
+ failure.h \
+ find_new_gid.c \
+ find_new_uid.c \
+ find_new_sub_gids.c \
+ find_new_sub_uids.c \
+ getdate.h \
+ getdate.y \
+ getgr_nam_gid.c \
+ getrange.c \
+ gettime.c \
+ hushed.c \
+ idmapping.h \
+ idmapping.c \
+ isexpired.c \
+ limits.c \
+ list.c log.c \
+ loginprompt.c \
+ mail.c \
+ motd.c \
+ myname.c \
+ obscure.c \
+ pam_pass.c \
+ pam_pass_non_interactive.c \
+ prefix_flag.c \
+ pwd2spwd.c \
+ pwdcheck.c \
+ pwd_init.c \
+ remove_tree.c \
+ rlogin.c \
+ root_flag.c \
+ salt.c \
+ setugid.c \
+ setupenv.c \
+ shell.c \
+ strtoday.c \
+ sub.c \
+ sulog.c \
+ ttytype.c \
+ tz.c \
+ ulimit.c \
+ user_busy.c \
+ utmp.c \
+ valid.c \
+ xgetpwnam.c \
+ xgetpwuid.c \
+ xgetgrnam.c \
+ xgetgrgid.c \
+ xgetspnam.c \
+ xmalloc.c \
+ yesno.c
+
+if WITH_BTRFS
+libmisc_a_SOURCES += btrfs.c
+endif
+
diff --git a/libmisc/Makefile.in b/libmisc/Makefile.in
new file mode 100644
index 0000000..b591961
--- /dev/null
+++ b/libmisc/Makefile.in
@@ -0,0 +1,917 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@WITH_BTRFS_TRUE@am__append_1 = btrfs.c
+subdir = libmisc
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+ARFLAGS = cru
+AM_V_AR = $(am__v_AR_@AM_V@)
+am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
+am__v_AR_0 = @echo " AR " $@;
+am__v_AR_1 =
+libmisc_a_AR = $(AR) $(ARFLAGS)
+libmisc_a_LIBADD =
+am__libmisc_a_SOURCES_DIST = addgrps.c age.c audit_help.c basename.c \
+ chkname.c chkname.h chowndir.c chowntty.c cleanup.c \
+ cleanup_group.c cleanup_user.c console.c copydir.c entry.c \
+ env.c failure.c failure.h find_new_gid.c find_new_uid.c \
+ find_new_sub_gids.c find_new_sub_uids.c getdate.h getdate.y \
+ getgr_nam_gid.c getrange.c gettime.c hushed.c idmapping.h \
+ idmapping.c isexpired.c limits.c list.c log.c loginprompt.c \
+ mail.c motd.c myname.c obscure.c pam_pass.c \
+ pam_pass_non_interactive.c prefix_flag.c pwd2spwd.c pwdcheck.c \
+ pwd_init.c remove_tree.c rlogin.c root_flag.c salt.c setugid.c \
+ setupenv.c shell.c strtoday.c sub.c sulog.c ttytype.c tz.c \
+ ulimit.c user_busy.c utmp.c valid.c xgetpwnam.c xgetpwuid.c \
+ xgetgrnam.c xgetgrgid.c xgetspnam.c xmalloc.c yesno.c btrfs.c
+@WITH_BTRFS_TRUE@am__objects_1 = btrfs.$(OBJEXT)
+am_libmisc_a_OBJECTS = addgrps.$(OBJEXT) age.$(OBJEXT) \
+ audit_help.$(OBJEXT) basename.$(OBJEXT) chkname.$(OBJEXT) \
+ chowndir.$(OBJEXT) chowntty.$(OBJEXT) cleanup.$(OBJEXT) \
+ cleanup_group.$(OBJEXT) cleanup_user.$(OBJEXT) \
+ console.$(OBJEXT) copydir.$(OBJEXT) entry.$(OBJEXT) \
+ env.$(OBJEXT) failure.$(OBJEXT) find_new_gid.$(OBJEXT) \
+ find_new_uid.$(OBJEXT) find_new_sub_gids.$(OBJEXT) \
+ find_new_sub_uids.$(OBJEXT) getdate.$(OBJEXT) \
+ getgr_nam_gid.$(OBJEXT) getrange.$(OBJEXT) gettime.$(OBJEXT) \
+ hushed.$(OBJEXT) idmapping.$(OBJEXT) isexpired.$(OBJEXT) \
+ limits.$(OBJEXT) list.$(OBJEXT) log.$(OBJEXT) \
+ loginprompt.$(OBJEXT) mail.$(OBJEXT) motd.$(OBJEXT) \
+ myname.$(OBJEXT) obscure.$(OBJEXT) pam_pass.$(OBJEXT) \
+ pam_pass_non_interactive.$(OBJEXT) prefix_flag.$(OBJEXT) \
+ pwd2spwd.$(OBJEXT) pwdcheck.$(OBJEXT) pwd_init.$(OBJEXT) \
+ remove_tree.$(OBJEXT) rlogin.$(OBJEXT) root_flag.$(OBJEXT) \
+ salt.$(OBJEXT) setugid.$(OBJEXT) setupenv.$(OBJEXT) \
+ shell.$(OBJEXT) strtoday.$(OBJEXT) sub.$(OBJEXT) \
+ sulog.$(OBJEXT) ttytype.$(OBJEXT) tz.$(OBJEXT) \
+ ulimit.$(OBJEXT) user_busy.$(OBJEXT) utmp.$(OBJEXT) \
+ valid.$(OBJEXT) xgetpwnam.$(OBJEXT) xgetpwuid.$(OBJEXT) \
+ xgetgrnam.$(OBJEXT) xgetgrgid.$(OBJEXT) xgetspnam.$(OBJEXT) \
+ xmalloc.$(OBJEXT) yesno.$(OBJEXT) $(am__objects_1)
+libmisc_a_OBJECTS = $(am_libmisc_a_OBJECTS)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/addgrps.Po ./$(DEPDIR)/age.Po \
+ ./$(DEPDIR)/audit_help.Po ./$(DEPDIR)/basename.Po \
+ ./$(DEPDIR)/btrfs.Po ./$(DEPDIR)/chkname.Po \
+ ./$(DEPDIR)/chowndir.Po ./$(DEPDIR)/chowntty.Po \
+ ./$(DEPDIR)/cleanup.Po ./$(DEPDIR)/cleanup_group.Po \
+ ./$(DEPDIR)/cleanup_user.Po ./$(DEPDIR)/console.Po \
+ ./$(DEPDIR)/copydir.Po ./$(DEPDIR)/entry.Po ./$(DEPDIR)/env.Po \
+ ./$(DEPDIR)/failure.Po ./$(DEPDIR)/find_new_gid.Po \
+ ./$(DEPDIR)/find_new_sub_gids.Po \
+ ./$(DEPDIR)/find_new_sub_uids.Po ./$(DEPDIR)/find_new_uid.Po \
+ ./$(DEPDIR)/getdate.Po ./$(DEPDIR)/getgr_nam_gid.Po \
+ ./$(DEPDIR)/getrange.Po ./$(DEPDIR)/gettime.Po \
+ ./$(DEPDIR)/hushed.Po ./$(DEPDIR)/idmapping.Po \
+ ./$(DEPDIR)/isexpired.Po ./$(DEPDIR)/limits.Po \
+ ./$(DEPDIR)/list.Po ./$(DEPDIR)/log.Po \
+ ./$(DEPDIR)/loginprompt.Po ./$(DEPDIR)/mail.Po \
+ ./$(DEPDIR)/motd.Po ./$(DEPDIR)/myname.Po \
+ ./$(DEPDIR)/obscure.Po ./$(DEPDIR)/pam_pass.Po \
+ ./$(DEPDIR)/pam_pass_non_interactive.Po \
+ ./$(DEPDIR)/prefix_flag.Po ./$(DEPDIR)/pwd2spwd.Po \
+ ./$(DEPDIR)/pwd_init.Po ./$(DEPDIR)/pwdcheck.Po \
+ ./$(DEPDIR)/remove_tree.Po ./$(DEPDIR)/rlogin.Po \
+ ./$(DEPDIR)/root_flag.Po ./$(DEPDIR)/salt.Po \
+ ./$(DEPDIR)/setugid.Po ./$(DEPDIR)/setupenv.Po \
+ ./$(DEPDIR)/shell.Po ./$(DEPDIR)/strtoday.Po \
+ ./$(DEPDIR)/sub.Po ./$(DEPDIR)/sulog.Po ./$(DEPDIR)/ttytype.Po \
+ ./$(DEPDIR)/tz.Po ./$(DEPDIR)/ulimit.Po \
+ ./$(DEPDIR)/user_busy.Po ./$(DEPDIR)/utmp.Po \
+ ./$(DEPDIR)/valid.Po ./$(DEPDIR)/xgetgrgid.Po \
+ ./$(DEPDIR)/xgetgrnam.Po ./$(DEPDIR)/xgetpwnam.Po \
+ ./$(DEPDIR)/xgetpwuid.Po ./$(DEPDIR)/xgetspnam.Po \
+ ./$(DEPDIR)/xmalloc.Po ./$(DEPDIR)/yesno.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+@MAINTAINER_MODE_FALSE@am__skipyacc = test -f $@ ||
+am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \
+ -e s/c++$$/h++/ -e s/c$$/h/
+YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS)
+LTYACCCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(YACC) $(AM_YFLAGS) $(YFLAGS)
+AM_V_YACC = $(am__v_YACC_@AM_V@)
+am__v_YACC_ = $(am__v_YACC_@AM_DEFAULT_V@)
+am__v_YACC_0 = @echo " YACC " $@;
+am__v_YACC_1 =
+YLWRAP = $(top_srcdir)/ylwrap
+SOURCES = $(libmisc_a_SOURCES)
+DIST_SOURCES = $(am__libmisc_a_SOURCES_DIST)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \
+ $(top_srcdir)/ylwrap getdate.c
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = .indent.pro xgetXXbyYY.c
+AM_CPPFLAGS = -I$(top_srcdir)/lib $(ECONF_CPPFLAGS)
+noinst_LIBRARIES = libmisc.a
+libmisc_a_SOURCES = addgrps.c age.c audit_help.c basename.c chkname.c \
+ chkname.h chowndir.c chowntty.c cleanup.c cleanup_group.c \
+ cleanup_user.c console.c copydir.c entry.c env.c failure.c \
+ failure.h find_new_gid.c find_new_uid.c find_new_sub_gids.c \
+ find_new_sub_uids.c getdate.h getdate.y getgr_nam_gid.c \
+ getrange.c gettime.c hushed.c idmapping.h idmapping.c \
+ isexpired.c limits.c list.c log.c loginprompt.c mail.c motd.c \
+ myname.c obscure.c pam_pass.c pam_pass_non_interactive.c \
+ prefix_flag.c pwd2spwd.c pwdcheck.c pwd_init.c remove_tree.c \
+ rlogin.c root_flag.c salt.c setugid.c setupenv.c shell.c \
+ strtoday.c sub.c sulog.c ttytype.c tz.c ulimit.c user_busy.c \
+ utmp.c valid.c xgetpwnam.c xgetpwuid.c xgetgrnam.c xgetgrgid.c \
+ xgetspnam.c xmalloc.c yesno.c $(am__append_1)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj .y
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libmisc/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign libmisc/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+
+libmisc.a: $(libmisc_a_OBJECTS) $(libmisc_a_DEPENDENCIES) $(EXTRA_libmisc_a_DEPENDENCIES)
+ $(AM_V_at)-rm -f libmisc.a
+ $(AM_V_AR)$(libmisc_a_AR) libmisc.a $(libmisc_a_OBJECTS) $(libmisc_a_LIBADD)
+ $(AM_V_at)$(RANLIB) libmisc.a
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addgrps.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/age.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audit_help.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basename.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btrfs.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chkname.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chowndir.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chowntty.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cleanup.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cleanup_group.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cleanup_user.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/console.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/copydir.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/entry.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/env.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/failure.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/find_new_gid.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/find_new_sub_gids.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/find_new_sub_uids.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/find_new_uid.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdate.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getgr_nam_gid.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getrange.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gettime.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hushed.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/idmapping.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isexpired.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/limits.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/log.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/loginprompt.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mail.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/motd.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/myname.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obscure.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_pass.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_pass_non_interactive.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prefix_flag.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwd2spwd.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwd_init.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwdcheck.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/remove_tree.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rlogin.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/root_flag.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/salt.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setugid.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setupenv.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shell.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtoday.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sub.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sulog.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ttytype.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tz.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ulimit.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/user_busy.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utmp.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/valid.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xgetgrgid.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xgetgrnam.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xgetpwnam.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xgetpwuid.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xgetspnam.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmalloc.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yesno.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+.y.c:
+ $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE)
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -rm -f getdate.c
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/addgrps.Po
+ -rm -f ./$(DEPDIR)/age.Po
+ -rm -f ./$(DEPDIR)/audit_help.Po
+ -rm -f ./$(DEPDIR)/basename.Po
+ -rm -f ./$(DEPDIR)/btrfs.Po
+ -rm -f ./$(DEPDIR)/chkname.Po
+ -rm -f ./$(DEPDIR)/chowndir.Po
+ -rm -f ./$(DEPDIR)/chowntty.Po
+ -rm -f ./$(DEPDIR)/cleanup.Po
+ -rm -f ./$(DEPDIR)/cleanup_group.Po
+ -rm -f ./$(DEPDIR)/cleanup_user.Po
+ -rm -f ./$(DEPDIR)/console.Po
+ -rm -f ./$(DEPDIR)/copydir.Po
+ -rm -f ./$(DEPDIR)/entry.Po
+ -rm -f ./$(DEPDIR)/env.Po
+ -rm -f ./$(DEPDIR)/failure.Po
+ -rm -f ./$(DEPDIR)/find_new_gid.Po
+ -rm -f ./$(DEPDIR)/find_new_sub_gids.Po
+ -rm -f ./$(DEPDIR)/find_new_sub_uids.Po
+ -rm -f ./$(DEPDIR)/find_new_uid.Po
+ -rm -f ./$(DEPDIR)/getdate.Po
+ -rm -f ./$(DEPDIR)/getgr_nam_gid.Po
+ -rm -f ./$(DEPDIR)/getrange.Po
+ -rm -f ./$(DEPDIR)/gettime.Po
+ -rm -f ./$(DEPDIR)/hushed.Po
+ -rm -f ./$(DEPDIR)/idmapping.Po
+ -rm -f ./$(DEPDIR)/isexpired.Po
+ -rm -f ./$(DEPDIR)/limits.Po
+ -rm -f ./$(DEPDIR)/list.Po
+ -rm -f ./$(DEPDIR)/log.Po
+ -rm -f ./$(DEPDIR)/loginprompt.Po
+ -rm -f ./$(DEPDIR)/mail.Po
+ -rm -f ./$(DEPDIR)/motd.Po
+ -rm -f ./$(DEPDIR)/myname.Po
+ -rm -f ./$(DEPDIR)/obscure.Po
+ -rm -f ./$(DEPDIR)/pam_pass.Po
+ -rm -f ./$(DEPDIR)/pam_pass_non_interactive.Po
+ -rm -f ./$(DEPDIR)/prefix_flag.Po
+ -rm -f ./$(DEPDIR)/pwd2spwd.Po
+ -rm -f ./$(DEPDIR)/pwd_init.Po
+ -rm -f ./$(DEPDIR)/pwdcheck.Po
+ -rm -f ./$(DEPDIR)/remove_tree.Po
+ -rm -f ./$(DEPDIR)/rlogin.Po
+ -rm -f ./$(DEPDIR)/root_flag.Po
+ -rm -f ./$(DEPDIR)/salt.Po
+ -rm -f ./$(DEPDIR)/setugid.Po
+ -rm -f ./$(DEPDIR)/setupenv.Po
+ -rm -f ./$(DEPDIR)/shell.Po
+ -rm -f ./$(DEPDIR)/strtoday.Po
+ -rm -f ./$(DEPDIR)/sub.Po
+ -rm -f ./$(DEPDIR)/sulog.Po
+ -rm -f ./$(DEPDIR)/ttytype.Po
+ -rm -f ./$(DEPDIR)/tz.Po
+ -rm -f ./$(DEPDIR)/ulimit.Po
+ -rm -f ./$(DEPDIR)/user_busy.Po
+ -rm -f ./$(DEPDIR)/utmp.Po
+ -rm -f ./$(DEPDIR)/valid.Po
+ -rm -f ./$(DEPDIR)/xgetgrgid.Po
+ -rm -f ./$(DEPDIR)/xgetgrnam.Po
+ -rm -f ./$(DEPDIR)/xgetpwnam.Po
+ -rm -f ./$(DEPDIR)/xgetpwuid.Po
+ -rm -f ./$(DEPDIR)/xgetspnam.Po
+ -rm -f ./$(DEPDIR)/xmalloc.Po
+ -rm -f ./$(DEPDIR)/yesno.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/addgrps.Po
+ -rm -f ./$(DEPDIR)/age.Po
+ -rm -f ./$(DEPDIR)/audit_help.Po
+ -rm -f ./$(DEPDIR)/basename.Po
+ -rm -f ./$(DEPDIR)/btrfs.Po
+ -rm -f ./$(DEPDIR)/chkname.Po
+ -rm -f ./$(DEPDIR)/chowndir.Po
+ -rm -f ./$(DEPDIR)/chowntty.Po
+ -rm -f ./$(DEPDIR)/cleanup.Po
+ -rm -f ./$(DEPDIR)/cleanup_group.Po
+ -rm -f ./$(DEPDIR)/cleanup_user.Po
+ -rm -f ./$(DEPDIR)/console.Po
+ -rm -f ./$(DEPDIR)/copydir.Po
+ -rm -f ./$(DEPDIR)/entry.Po
+ -rm -f ./$(DEPDIR)/env.Po
+ -rm -f ./$(DEPDIR)/failure.Po
+ -rm -f ./$(DEPDIR)/find_new_gid.Po
+ -rm -f ./$(DEPDIR)/find_new_sub_gids.Po
+ -rm -f ./$(DEPDIR)/find_new_sub_uids.Po
+ -rm -f ./$(DEPDIR)/find_new_uid.Po
+ -rm -f ./$(DEPDIR)/getdate.Po
+ -rm -f ./$(DEPDIR)/getgr_nam_gid.Po
+ -rm -f ./$(DEPDIR)/getrange.Po
+ -rm -f ./$(DEPDIR)/gettime.Po
+ -rm -f ./$(DEPDIR)/hushed.Po
+ -rm -f ./$(DEPDIR)/idmapping.Po
+ -rm -f ./$(DEPDIR)/isexpired.Po
+ -rm -f ./$(DEPDIR)/limits.Po
+ -rm -f ./$(DEPDIR)/list.Po
+ -rm -f ./$(DEPDIR)/log.Po
+ -rm -f ./$(DEPDIR)/loginprompt.Po
+ -rm -f ./$(DEPDIR)/mail.Po
+ -rm -f ./$(DEPDIR)/motd.Po
+ -rm -f ./$(DEPDIR)/myname.Po
+ -rm -f ./$(DEPDIR)/obscure.Po
+ -rm -f ./$(DEPDIR)/pam_pass.Po
+ -rm -f ./$(DEPDIR)/pam_pass_non_interactive.Po
+ -rm -f ./$(DEPDIR)/prefix_flag.Po
+ -rm -f ./$(DEPDIR)/pwd2spwd.Po
+ -rm -f ./$(DEPDIR)/pwd_init.Po
+ -rm -f ./$(DEPDIR)/pwdcheck.Po
+ -rm -f ./$(DEPDIR)/remove_tree.Po
+ -rm -f ./$(DEPDIR)/rlogin.Po
+ -rm -f ./$(DEPDIR)/root_flag.Po
+ -rm -f ./$(DEPDIR)/salt.Po
+ -rm -f ./$(DEPDIR)/setugid.Po
+ -rm -f ./$(DEPDIR)/setupenv.Po
+ -rm -f ./$(DEPDIR)/shell.Po
+ -rm -f ./$(DEPDIR)/strtoday.Po
+ -rm -f ./$(DEPDIR)/sub.Po
+ -rm -f ./$(DEPDIR)/sulog.Po
+ -rm -f ./$(DEPDIR)/ttytype.Po
+ -rm -f ./$(DEPDIR)/tz.Po
+ -rm -f ./$(DEPDIR)/ulimit.Po
+ -rm -f ./$(DEPDIR)/user_busy.Po
+ -rm -f ./$(DEPDIR)/utmp.Po
+ -rm -f ./$(DEPDIR)/valid.Po
+ -rm -f ./$(DEPDIR)/xgetgrgid.Po
+ -rm -f ./$(DEPDIR)/xgetgrnam.Po
+ -rm -f ./$(DEPDIR)/xgetpwnam.Po
+ -rm -f ./$(DEPDIR)/xgetpwuid.Po
+ -rm -f ./$(DEPDIR)/xgetspnam.Po
+ -rm -f ./$(DEPDIR)/xmalloc.Po
+ -rm -f ./$(DEPDIR)/yesno.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libmisc/addgrps.c b/libmisc/addgrps.c
new file mode 100644
index 0000000..40fad99
--- /dev/null
+++ b/libmisc/addgrps.c
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * 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.
+ */
+
+#include <config.h>
+
+#if defined (HAVE_SETGROUPS) && ! defined (USE_PAM)
+
+#include "prototypes.h"
+#include "defines.h"
+
+#include <stdio.h>
+#include <grp.h>
+#include <errno.h>
+
+#ident "$Id$"
+
+#define SEP ",:"
+/*
+ * Add groups with names from LIST (separated by commas or colons)
+ * to the supplementary group set. Silently ignore groups which are
+ * already there. Warning: uses strtok().
+ */
+int add_groups (const char *list)
+{
+ GETGROUPS_T *grouplist, *tmp;
+ size_t i;
+ int ngroups;
+ bool added;
+ char *token;
+ char buf[1024];
+
+ if (strlen (list) >= sizeof (buf)) {
+ errno = EINVAL;
+ return -1;
+ }
+ strcpy (buf, list);
+
+ i = 16;
+ for (;;) {
+ grouplist = (gid_t *) malloc (i * sizeof (GETGROUPS_T));
+ if (NULL == grouplist) {
+ return -1;
+ }
+ ngroups = getgroups (i, grouplist);
+ if ( ( (-1 == ngroups)
+ && (EINVAL != errno))
+ || (i > (size_t)ngroups)) {
+ /* Unexpected failure of getgroups or successful
+ * reception of the groups */
+ break;
+ }
+ /* not enough room, so try allocating a larger buffer */
+ free (grouplist);
+ i *= 2;
+ }
+ if (ngroups < 0) {
+ free (grouplist);
+ return -1;
+ }
+
+ added = false;
+ for (token = strtok (buf, SEP); NULL != token; token = strtok (NULL, SEP)) {
+ struct group *grp;
+
+ grp = getgrnam (token); /* local, no need for xgetgrnam */
+ if (NULL == grp) {
+ fprintf (stderr, _("Warning: unknown group %s\n"),
+ token);
+ continue;
+ }
+
+ for (i = 0; i < (size_t)ngroups && grouplist[i] != grp->gr_gid; i++);
+
+ if (i < (size_t)ngroups) {
+ continue;
+ }
+
+ if (ngroups >= sysconf (_SC_NGROUPS_MAX)) {
+ fputs (_("Warning: too many groups\n"), stderr);
+ break;
+ }
+ tmp = (gid_t *) realloc (grouplist, (size_t)(ngroups + 1) * sizeof (GETGROUPS_T));
+ if (NULL == tmp) {
+ free (grouplist);
+ return -1;
+ }
+ tmp[ngroups] = grp->gr_gid;
+ ngroups++;
+ grouplist = tmp;
+ added = true;
+ }
+
+ if (added) {
+ return setgroups ((size_t)ngroups, grouplist);
+ }
+
+ return 0;
+}
+#else /* HAVE_SETGROUPS && !USE_PAM */
+extern int errno; /* warning: ANSI C forbids an empty source file */
+#endif /* HAVE_SETGROUPS && !USE_PAM */
+
diff --git a/libmisc/age.c b/libmisc/age.c
new file mode 100644
index 0000000..12e6036
--- /dev/null
+++ b/libmisc/age.c
@@ -0,0 +1,201 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2008 - 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.
+ */
+
+#include <config.h>
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <time.h>
+#include <errno.h>
+#include "prototypes.h"
+#include "defines.h"
+#include "exitcodes.h"
+#include <pwd.h>
+#include <grp.h>
+
+#ident "$Id$"
+
+#ifndef PASSWD_PROGRAM
+#define PASSWD_PROGRAM "/bin/passwd"
+#endif
+/*
+ * expire - force password change if password expired
+ *
+ * expire() calls /bin/passwd to change the user's password
+ * if it has expired.
+ */
+int expire (const struct passwd *pw, /*@null@*/const struct spwd *sp)
+{
+ int status;
+ pid_t child;
+ pid_t pid;
+
+ if (NULL == sp) {
+ return 0;
+ }
+
+ /*
+ * See if the user's password has expired, and if so
+ * force them to change their password.
+ */
+
+ status = isexpired (pw, sp);
+ switch (status) {
+ case 0:
+ return 0;
+ case 1:
+ (void) fputs (_("Your password has expired."), stdout);
+ break;
+ case 2:
+ (void) fputs (_("Your password is inactive."), stdout);
+ break;
+ case 3:
+ (void) fputs (_("Your login has expired."), stdout);
+ break;
+ }
+
+ /*
+ * Setting the maximum valid period to less than the minimum
+ * valid period means that the minimum period will never
+ * occur while the password is valid, so the user can never
+ * change that password.
+ */
+
+ if ((status > 1) || (sp->sp_max < sp->sp_min)) {
+ (void) puts (_(" Contact the system administrator."));
+ exit (EXIT_FAILURE);
+ }
+ (void) puts (_(" Choose a new password."));
+ (void) fflush (stdout);
+
+ /*
+ * Close all the files so that unauthorized access won't
+ * occur. This needs to be done anyway because those files
+ * might become stale after "passwd" is executed.
+ */
+
+ endspent ();
+ endpwent ();
+#ifdef SHADOWGRP
+ endsgent ();
+#endif
+ endgrent ();
+
+ /*
+ * Execute the /bin/passwd command. The exit status will be
+ * examined to see what the result is. If there are any
+ * errors the routine will exit. This forces the user to
+ * change their password before being able to use the account.
+ */
+
+ pid = fork ();
+ if (0 == pid) {
+ int err;
+
+ /*
+ * Set the UID to be that of the user. This causes
+ * passwd to work just like it would had they executed
+ * it from the command line while logged in.
+ */
+#if defined(HAVE_INITGROUPS) && ! defined(USE_PAM)
+ if (setup_uid_gid (pw, false) != 0)
+#else
+ if (setup_uid_gid (pw) != 0)
+#endif
+ {
+ _exit (126);
+ }
+
+ (void) execl (PASSWD_PROGRAM, PASSWD_PROGRAM, pw->pw_name, (char *) 0);
+ err = errno;
+ perror ("Can't execute " PASSWD_PROGRAM);
+ _exit ((ENOENT == err) ? E_CMD_NOTFOUND : E_CMD_NOEXEC);
+ } else if ((pid_t) -1 == pid) {
+ perror ("fork");
+ exit (EXIT_FAILURE);
+ }
+
+ while (((child = wait (&status)) != pid) && (child != (pid_t)-1));
+
+ if ((child == pid) && (0 == status)) {
+ return 1;
+ }
+
+ exit (EXIT_FAILURE);
+ /*@notreached@*/}
+
+/*
+ * agecheck - see if warning is needed for password expiration
+ *
+ * agecheck sees how many days until the user's password is going
+ * to expire and warns the user of the pending password expiration.
+ */
+
+void agecheck (/*@null@*/const struct spwd *sp)
+{
+ long now = (long) time ((time_t *) 0) / SCALE;
+ long remain;
+
+ if (NULL == sp) {
+ return;
+ }
+
+ /*
+ * The last, max, and warn fields must be supported or the
+ * warning period cannot be calculated.
+ */
+
+ if ( (-1 == sp->sp_lstchg)
+ || (-1 == sp->sp_max)
+ || (-1 == sp->sp_warn)) {
+ return;
+ }
+
+ if (0 == sp->sp_lstchg) {
+ (void) puts (_("You must change your password."));
+ return;
+ }
+
+ remain = sp->sp_lstchg + sp->sp_max - now;
+ if (remain <= sp->sp_warn) {
+ remain /= DAY / SCALE;
+ if (remain > 1) {
+ (void) printf (_("Your password will expire in %ld days.\n"),
+ remain);
+ } else if (1 == remain) {
+ (void) puts (_("Your password will expire tomorrow."));
+ } else if (remain == 0) {
+ (void) puts (_("Your password will expire today."));
+ }
+ }
+}
+
diff --git a/libmisc/audit_help.c b/libmisc/audit_help.c
new file mode 100644
index 0000000..1aadaa3
--- /dev/null
+++ b/libmisc/audit_help.c
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2005 , Red Hat, Inc.
+ * Copyright (c) 2005 , Tomasz Kłoczko
+ * Copyright (c) 2008 , 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.
+ */
+
+/*
+ * Audit helper functions used throughout shadow
+ *
+ */
+
+#include <config.h>
+
+#ifdef WITH_AUDIT
+
+#include <stdlib.h>
+#include <syslog.h>
+#include <stdarg.h>
+#include <libaudit.h>
+#include <errno.h>
+#include <stdio.h>
+#include "prototypes.h"
+int audit_fd;
+
+void audit_help_open (void)
+{
+ audit_fd = audit_open ();
+ if (audit_fd < 0) {
+ /* You get these only when the kernel doesn't have
+ * audit compiled in. */
+ if ( (errno == EINVAL)
+ || (errno == EPROTONOSUPPORT)
+ || (errno == EAFNOSUPPORT)) {
+ return;
+ }
+ (void) fputs (_("Cannot open audit interface - aborting.\n"),
+ stderr);
+ exit (EXIT_FAILURE);
+ }
+}
+
+/*
+ * This function will log a message to the audit system using a predefined
+ * message format. Parameter usage is as follows:
+ *
+ * type - type of message: AUDIT_USER_CHAUTHTOK for changing any account
+ * attributes.
+ * pgname - program's name
+ * op - operation. "adding user", "changing finger info", "deleting group"
+ * name - user's account or group name. If not available use NULL.
+ * id - uid or gid that the operation is being performed on. This is used
+ * only when user is NULL.
+ */
+void audit_logger (int type, unused const char *pgname, const char *op,
+ const char *name, unsigned int id,
+ shadow_audit_result result)
+{
+ if (audit_fd < 0) {
+ return;
+ } else {
+ audit_log_acct_message (audit_fd, type, NULL, op, name, id,
+ NULL, NULL, NULL, (int) result);
+ }
+}
+
+void audit_logger_message (const char *message, shadow_audit_result result)
+{
+ if (audit_fd < 0) {
+ return;
+ } else {
+ audit_log_user_message (audit_fd,
+ AUDIT_USYS_CONFIG,
+ message,
+ NULL, /* hostname */
+ NULL, /* addr */
+ NULL, /* tty */
+ (int) result);
+ }
+}
+
+#else /* WITH_AUDIT */
+extern int errno; /* warning: ANSI C forbids an empty source file */
+#endif /* WITH_AUDIT */
+
diff --git a/libmisc/basename.c b/libmisc/basename.c
new file mode 100644
index 0000000..1525169
--- /dev/null
+++ b/libmisc/basename.c
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * 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.
+ */
+
+/*
+ * basename.c - not worth copyrighting :-). Some versions of Linux libc
+ * already have basename(), other versions don't. To avoid confusion,
+ * we will not use the function from libc and use a different name here.
+ * --marekm
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include "defines.h"
+#include "prototypes.h"
+/*@observer@*/const char *Basename (const char *str)
+{
+ char *cp = strrchr (str, '/');
+
+ return (NULL != cp) ? cp + 1 : str;
+}
diff --git a/libmisc/btrfs.c b/libmisc/btrfs.c
new file mode 100644
index 0000000..d23da5e
--- /dev/null
+++ b/libmisc/btrfs.c
@@ -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;
+}
+
diff --git a/libmisc/chkname.c b/libmisc/chkname.c
new file mode 100644
index 0000000..bdd1e72
--- /dev/null
+++ b/libmisc/chkname.c
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2005 - 2008, 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.
+ */
+
+/*
+ * is_valid_user_name(), is_valid_group_name() - check the new user/group
+ * name for validity;
+ * return values:
+ * true - OK
+ * false - bad name
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include <ctype.h>
+#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;
+ }
+
+ while ('\0' != *++name) {
+ if (!(( ('a' <= *name) && ('z' >= *name) ) ||
+ ( ('0' <= *name) && ('9' >= *name) ) ||
+ ('_' == *name) ||
+ ('-' == *name) ||
+ ( ('$' == *name) && ('\0' == *(name + 1)) )
+ )) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+bool is_valid_user_name (const char *name)
+{
+ /*
+ * User names are limited by whatever utmp can
+ * handle.
+ */
+ if (strlen (name) > USER_NAME_MAX_LENGTH) {
+ return false;
+ }
+
+ return is_valid_name (name);
+}
+
+bool is_valid_group_name (const char *name)
+{
+ /*
+ * Arbitrary limit for group names.
+ * HP-UX 10 limits to 16 characters
+ */
+ if ( (GROUP_NAME_MAX_LENGTH > 0)
+ && (strlen (name) > GROUP_NAME_MAX_LENGTH)) {
+ return false;
+ }
+
+ return is_valid_name (name);
+}
+
diff --git a/libmisc/chkname.h b/libmisc/chkname.h
new file mode 100644
index 0000000..06e0dee
--- /dev/null
+++ b/libmisc/chkname.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1997 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2005 , Tomasz Kłoczko
+ * Copyright (c) 2008 , 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.
+ */
+
+/* $Id$ */
+#ifndef _CHKNAME_H_
+#define _CHKNAME_H_
+
+/*
+ * is_valid_user_name(), is_valid_group_name() - check the new user/group
+ * name for validity;
+ * return values:
+ * true - OK
+ * false - bad name
+ */
+
+#include "defines.h"
+
+extern bool is_valid_user_name (const char *name);
+extern bool is_valid_group_name (const char *name);
+
+#endif
diff --git a/libmisc/chowndir.c b/libmisc/chowndir.c
new file mode 100644
index 0000000..c4c504a
--- /dev/null
+++ b/libmisc/chowndir.c
@@ -0,0 +1,201 @@
+/*
+ * Copyright (c) 1992 - 1993, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2010 - , 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 <sys/types.h>
+#include <sys/stat.h>
+#include "prototypes.h"
+#include "defines.h"
+#include <fcntl.h>
+#include <stdio.h>
+/*
+ * chown_tree - change ownership of files in a directory tree
+ *
+ * chown_dir() walks a directory tree and changes the ownership
+ * of all files owned by the provided user ID.
+ *
+ * Only files owned (resp. group-owned) by old_uid (resp. by old_gid)
+ * will have their ownership (resp. group-ownership) modified, unless
+ * old_uid (resp. old_gid) is set to -1.
+ *
+ * new_uid and new_gid can be set to -1 to indicate that no owner or
+ * group-owner shall be changed.
+ */
+int chown_tree (const char *root,
+ uid_t old_uid,
+ uid_t new_uid,
+ gid_t old_gid,
+ gid_t new_gid)
+{
+ char *new_name;
+ size_t new_name_len;
+ int rc = 0;
+ struct DIRECT *ent;
+ struct stat sb;
+ DIR *dir;
+
+ new_name = malloc (1024);
+ if (NULL == new_name) {
+ return -1;
+ }
+ new_name_len = 1024;
+
+ /*
+ * Make certain the directory exists. This routine is called
+ * directly by the invoker, or recursively.
+ */
+
+ if (access (root, F_OK) != 0) {
+ free (new_name);
+ return -1;
+ }
+
+ /*
+ * Open the directory and read each entry. Every entry is tested
+ * to see if it is a directory, and if so this routine is called
+ * recursively. If not, it is checked to see if an ownership
+ * shall be changed.
+ */
+
+ dir = opendir (root);
+ if (NULL == dir) {
+ free (new_name);
+ return -1;
+ }
+
+ while ((ent = readdir (dir))) {
+ size_t ent_name_len;
+ uid_t tmpuid = (uid_t) -1;
+ gid_t tmpgid = (gid_t) -1;
+
+ /*
+ * Skip the "." and ".." entries
+ */
+
+ if ( (strcmp (ent->d_name, ".") == 0)
+ || (strcmp (ent->d_name, "..") == 0)) {
+ continue;
+ }
+
+ /*
+ * Make the filename for both the source and the
+ * destination files.
+ */
+
+ ent_name_len = strlen (root) + strlen (ent->d_name) + 2;
+ if (ent_name_len > new_name_len) {
+ /*@only@*/char *tmp = realloc (new_name, ent_name_len);
+ if (NULL == tmp) {
+ rc = -1;
+ break;
+ }
+ new_name = tmp;
+ new_name_len = ent_name_len;
+ }
+
+ (void) snprintf (new_name, new_name_len, "%s/%s", root, ent->d_name);
+
+ /* Don't follow symbolic links! */
+ if (LSTAT (new_name, &sb) == -1) {
+ continue;
+ }
+
+ if (S_ISDIR (sb.st_mode) && !S_ISLNK (sb.st_mode)) {
+
+ /*
+ * Do the entire subdirectory.
+ */
+
+ rc = chown_tree (new_name, old_uid, new_uid,
+ old_gid, new_gid);
+ if (0 != rc) {
+ break;
+ }
+ }
+#ifndef HAVE_LCHOWN
+ /* don't use chown (follows symbolic links!) */
+ if (S_ISLNK (sb.st_mode)) {
+ continue;
+ }
+#endif
+ /*
+ * By default, the IDs are not changed (-1).
+ *
+ * If the file is not owned by the user, the owner is not
+ * changed.
+ *
+ * If the file is not group-owned by the group, the
+ * group-owner is not changed.
+ */
+ if (((uid_t) -1 == old_uid) || (sb.st_uid == old_uid)) {
+ tmpuid = new_uid;
+ }
+ if (((gid_t) -1 == old_gid) || (sb.st_gid == old_gid)) {
+ tmpgid = new_gid;
+ }
+ if (((uid_t) -1 != tmpuid) || ((gid_t) -1 != tmpgid)) {
+ rc = LCHOWN (new_name, tmpuid, tmpgid);
+ if (0 != rc) {
+ break;
+ }
+ }
+ }
+
+ free (new_name);
+ (void) closedir (dir);
+
+ /*
+ * Now do the root of the tree
+ */
+
+ if ((0 == rc) && (stat (root, &sb) == 0)) {
+ uid_t tmpuid = (uid_t) -1;
+ gid_t tmpgid = (gid_t) -1;
+ if (((uid_t) -1 == old_uid) || (sb.st_uid == old_uid)) {
+ tmpuid = new_uid;
+ }
+ if (((gid_t) -1 == old_gid) || (sb.st_gid == old_gid)) {
+ tmpgid = new_gid;
+ }
+ if (((uid_t) -1 != tmpuid) || ((gid_t) -1 != tmpgid)) {
+ rc = LCHOWN (root, tmpuid, tmpgid);
+ }
+ } else {
+ rc = -1;
+ }
+
+ return rc;
+}
+
diff --git a/libmisc/chowntty.c b/libmisc/chowntty.c
new file mode 100644
index 0000000..f6f5dbc
--- /dev/null
+++ b/libmisc/chowntty.c
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2001, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * 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.
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <errno.h>
+#include <grp.h>
+#include "prototypes.h"
+#include "defines.h"
+#include <pwd.h>
+#include "getdef.h"
+
+/*
+ * chown_tty() sets the login tty to be owned by the new user ID
+ * with TTYPERM modes
+ */
+
+void chown_tty (const struct passwd *info)
+{
+ struct group *grent;
+ gid_t gid;
+
+ /*
+ * See if login.defs has some value configured for the port group
+ * ID. Otherwise, use the user's primary group ID.
+ */
+
+ grent = getgr_nam_gid (getdef_str ("TTYGROUP"));
+ if (NULL != grent) {
+ gid = grent->gr_gid;
+ } else {
+ gid = info->pw_gid;
+ }
+
+ /*
+ * Change the permissions on the TTY to be owned by the user with
+ * the group as determined above.
+ */
+
+ if ( (fchown (STDIN_FILENO, info->pw_uid, gid) != 0)
+ || (fchmod (STDIN_FILENO, (mode_t)getdef_num ("TTYPERM", 0600)) != 0)) {
+ int err = errno;
+
+ fprintf (stderr,
+ _("Unable to change owner or mode of tty stdin: %s"),
+ strerror (err));
+ SYSLOG ((LOG_WARN,
+ "unable to change owner or mode of tty stdin for user `%s': %s\n",
+ info->pw_name, strerror (err)));
+ if (EROFS != err) {
+ closelog ();
+ exit (EXIT_FAILURE);
+ }
+ }
+#ifdef __linux__
+ /*
+ * Please don't add code to chown /dev/vcs* to the user logging in -
+ * it's a potential security hole. I wouldn't like the previous user
+ * to hold the file descriptor open and watch my screen. We don't
+ * have the *BSD revoke() system call yet, and vhangup() only works
+ * for tty devices (which vcs* is not). --marekm
+ */
+#endif
+}
+
diff --git a/libmisc/cleanup.c b/libmisc/cleanup.c
new file mode 100644
index 0000000..bd83a23
--- /dev/null
+++ b/libmisc/cleanup.c
@@ -0,0 +1,144 @@
+/*
+ * Copyright (c) 2008 - 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>
+
+#include <assert.h>
+#include <stdio.h>
+
+#include "prototypes.h"
+
+/*
+ * The cleanup_functions stack.
+ */
+#define CLEANUP_FUNCTIONS 10
+
+typedef /*@null@*/void * parg_t;
+
+static cleanup_function cleanup_functions[CLEANUP_FUNCTIONS];
+static parg_t cleanup_function_args[CLEANUP_FUNCTIONS];
+static pid_t cleanup_pid = 0;
+
+/*
+ * - Cleanup functions shall not fail.
+ * - You should register do_cleanups with atexit.
+ * - You should add cleanup functions to the stack with add_cleanup when
+ * an operation is expected to be executed later, and remove it from the
+ * stack with del_cleanup when it has been executed.
+ *
+ **/
+
+/*
+ * do_cleanups - perform the actions stored in the cleanup_functions stack.
+ *
+ * Cleanup action are not executed on exit of the processes started by the
+ * parent (first caller of add_cleanup).
+ *
+ * It is intended to be used as:
+ * atexit (do_cleanups);
+ */
+void do_cleanups (void)
+{
+ unsigned int i;
+
+ /* Make sure there were no overflow */
+ assert (NULL == cleanup_functions[CLEANUP_FUNCTIONS-1]);
+
+ if (getpid () != cleanup_pid) {
+ return;
+ }
+
+ i = CLEANUP_FUNCTIONS;
+ do {
+ i--;
+ if (cleanup_functions[i] != NULL) {
+ cleanup_functions[i] (cleanup_function_args[i]);
+ }
+ } while (i>0);
+}
+
+/*
+ * add_cleanup - Add a cleanup_function to the cleanup_functions stack.
+ */
+void add_cleanup (/*@notnull@*/cleanup_function pcf, /*@null@*/void *arg)
+{
+ unsigned int i;
+ assert (NULL != pcf);
+
+ assert (NULL == cleanup_functions[CLEANUP_FUNCTIONS-2]);
+
+ if (0 == cleanup_pid) {
+ cleanup_pid = getpid ();
+ }
+
+ /* Add the cleanup_function at the end of the stack */
+ for (i=0; NULL != cleanup_functions[i]; i++);
+ cleanup_functions[i] = pcf;
+ cleanup_function_args[i] = arg;
+}
+
+/*
+ * del_cleanup - Remove a cleanup_function from the cleanup_functions stack.
+ */
+void del_cleanup (/*@notnull@*/cleanup_function pcf)
+{
+ unsigned int i;
+ assert (NULL != pcf);
+
+ /* Find the pcf cleanup function */
+ for (i=0; i<CLEANUP_FUNCTIONS; i++) {
+ if (cleanup_functions[i] == pcf) {
+ break;
+ }
+ }
+
+ /* Make sure the cleanup function was found */
+ assert (i<CLEANUP_FUNCTIONS);
+
+ /* Move the rest of the cleanup functions */
+ for (; i<CLEANUP_FUNCTIONS; i++) {
+ /* Make sure the cleanup function was specified only once */
+ assert ( (i == (CLEANUP_FUNCTIONS -1))
+ || (cleanup_functions[i+1] != pcf));
+
+ if (i == (CLEANUP_FUNCTIONS -1)) {
+ cleanup_functions[i] = NULL;
+ cleanup_function_args[i] = NULL;
+ } else {
+ cleanup_functions[i] = cleanup_functions[i+1];
+ cleanup_function_args[i] = cleanup_function_args[i+1];
+ }
+
+ /* A NULL indicates the end of the stack */
+ if (NULL == cleanup_functions[i]) {
+ break;
+ }
+ }
+}
+
diff --git a/libmisc/cleanup_group.c b/libmisc/cleanup_group.c
new file mode 100644
index 0000000..d07adc7
--- /dev/null
+++ b/libmisc/cleanup_group.c
@@ -0,0 +1,237 @@
+/*
+ * Copyright (c) 2008 , 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>
+
+#include <assert.h>
+#include <stdio.h>
+
+#include "defines.h"
+#include "groupio.h"
+#include "sgroupio.h"
+#include "prototypes.h"
+
+/*
+ * cleanup_report_add_group - Report failure to add a group to the system
+ *
+ * It should be registered when it is decided to add a group to the system.
+ */
+void cleanup_report_add_group (void *group_name)
+{
+ const char *name = (const char *)group_name;
+
+ SYSLOG ((LOG_ERR, "failed to add group %s", name));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_GROUP, Prog,
+ "",
+ name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+}
+
+/*
+ * cleanup_report_del_group - Report failure to remove a group from the system
+ *
+ * It should be registered when it is decided to remove a group from the system.
+ */
+void cleanup_report_del_group (void *group_name)
+{
+ const char *name = (const char *)group_name;
+
+ SYSLOG ((LOG_ERR, "failed to remove group %s", name));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_GROUP, Prog,
+ "",
+ name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+}
+
+void cleanup_report_mod_group (void *cleanup_info)
+{
+ const struct cleanup_info_mod *info;
+ info = (const struct cleanup_info_mod *)cleanup_info;
+
+ SYSLOG ((LOG_ERR,
+ "failed to change %s (%s)",
+ gr_dbname (),
+ info->action));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_ACCT, Prog,
+ info->audit_msg,
+ info->name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+}
+
+#ifdef SHADOWGRP
+void cleanup_report_mod_gshadow (void *cleanup_info)
+{
+ const struct cleanup_info_mod *info;
+ info = (const struct cleanup_info_mod *)cleanup_info;
+
+ SYSLOG ((LOG_ERR,
+ "failed to change %s (%s)",
+ sgr_dbname (),
+ info->action));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_ACCT, Prog,
+ info->audit_msg,
+ info->name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+}
+#endif
+
+/*
+ * cleanup_report_add_group_group - Report failure to add a group to group
+ *
+ * It should be registered when it is decided to add a group to the
+ * group database.
+ */
+void cleanup_report_add_group_group (void *group_name)
+{
+ const char *name = (const char *)group_name;
+
+ SYSLOG ((LOG_ERR, "failed to add group %s to %s", name, gr_dbname ()));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_GROUP, Prog,
+ "adding group to /etc/group",
+ name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+}
+
+#ifdef SHADOWGRP
+/*
+ * cleanup_report_add_group_gshadow - Report failure to add a group to gshadow
+ *
+ * It should be registered when it is decided to add a group to the
+ * gshadow database.
+ */
+void cleanup_report_add_group_gshadow (void *group_name)
+{
+ const char *name = (const char *)group_name;
+
+ SYSLOG ((LOG_ERR, "failed to add group %s to %s", name, sgr_dbname ()));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_GROUP, Prog,
+ "adding group to /etc/gshadow",
+ name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+}
+#endif
+
+/*
+ * cleanup_report_del_group_group - Report failure to remove a group from the
+ * regular group database
+ *
+ * It should be registered when it is decided to remove a group from the
+ * regular group database.
+ */
+void cleanup_report_del_group_group (void *group_name)
+{
+ const char *name = (const char *)group_name;
+
+ SYSLOG ((LOG_ERR,
+ "failed to remove group %s from %s",
+ name, gr_dbname ()));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_GROUP, Prog,
+ "removing group from /etc/group",
+ name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+}
+
+#ifdef SHADOWGRP
+/*
+ * cleanup_report_del_group_gshadow - Report failure to remove a group from
+ * gshadow
+ *
+ * It should be registered when it is decided to remove a group from the
+ * gshadow database.
+ */
+void cleanup_report_del_group_gshadow (void *group_name)
+{
+ const char *name = (const char *)group_name;
+
+ SYSLOG ((LOG_ERR,
+ "failed to remove group %s from %s",
+ name, sgr_dbname ()));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_GROUP, Prog,
+ "removing group from /etc/gshadow",
+ name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+}
+#endif
+
+/*
+ * cleanup_unlock_group - Unlock the group file
+ *
+ * It should be registered after the group file is successfully locked.
+ */
+void cleanup_unlock_group (unused void *arg)
+{
+ if (gr_unlock () == 0) {
+ fprintf (stderr,
+ _("%s: failed to unlock %s\n"),
+ Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+#ifdef WITH_AUDIT
+ audit_logger_message ("unlocking group file",
+ SHADOW_AUDIT_FAILURE);
+#endif
+ }
+}
+
+#ifdef SHADOWGRP
+/*
+ * cleanup_unlock_gshadow - Unlock the gshadow file
+ *
+ * It should be registered after the gshadow file is successfully locked.
+ */
+void cleanup_unlock_gshadow (unused void *arg)
+{
+ if (sgr_unlock () == 0) {
+ fprintf (stderr,
+ _("%s: failed to unlock %s\n"),
+ Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+#ifdef WITH_AUDIT
+ audit_logger_message ("unlocking gshadow file",
+ SHADOW_AUDIT_FAILURE);
+#endif
+ }
+}
+#endif
+
diff --git a/libmisc/cleanup_user.c b/libmisc/cleanup_user.c
new file mode 100644
index 0000000..6e49751
--- /dev/null
+++ b/libmisc/cleanup_user.c
@@ -0,0 +1,152 @@
+/*
+ * Copyright (c) 2008 , 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>
+
+#include <assert.h>
+#include <stdio.h>
+
+#include "defines.h"
+#include "pwio.h"
+#include "shadowio.h"
+#include "prototypes.h"
+
+/*
+ * cleanup_report_add_user - Report failure to add an user to the system
+ *
+ * It should be registered when it is decided to add an user to the system.
+ */
+void cleanup_report_add_user (void *user_name)
+{
+ const char *name = (const char *)user_name;
+
+ SYSLOG ((LOG_ERR, "failed to add user %s", name));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "",
+ name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+}
+
+void cleanup_report_mod_passwd (void *cleanup_info)
+{
+ const struct cleanup_info_mod *info;
+ info = (const struct cleanup_info_mod *)cleanup_info;
+
+ SYSLOG ((LOG_ERR,
+ "failed to change %s (%s)",
+ pw_dbname (),
+ info->action));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_ACCT, Prog,
+ info->audit_msg,
+ info->name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+}
+
+/*
+ * cleanup_report_add_user_passwd - Report failure to add an user to
+ * /etc/passwd
+ *
+ * It should be registered when it is decided to add an user to the
+ * /etc/passwd database.
+ */
+void cleanup_report_add_user_passwd (void *user_name)
+{
+ const char *name = (const char *)user_name;
+
+ SYSLOG ((LOG_ERR, "failed to add user %s to %s", name, pw_dbname ()));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "adding user to /etc/passwd",
+ name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+}
+
+/*
+ * cleanup_report_add_user_shadow - Report failure to add an user to
+ * /etc/shadow
+ *
+ * It should be registered when it is decided to add an user to the
+ * /etc/shadow database.
+ */
+void cleanup_report_add_user_shadow (void *user_name)
+{
+ const char *name = (const char *)user_name;
+
+ SYSLOG ((LOG_ERR, "failed to add user %s to %s", name, spw_dbname ()));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "adding user to /etc/shadow",
+ name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+}
+
+/*
+ * cleanup_unlock_passwd - Unlock the /etc/passwd database
+ *
+ * It should be registered after the passwd database is successfully locked.
+ */
+void cleanup_unlock_passwd (unused void *arg)
+{
+ if (pw_unlock () == 0) {
+ fprintf (stderr,
+ _("%s: failed to unlock %s\n"),
+ Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+#ifdef WITH_AUDIT
+ audit_logger_message ("unlocking passwd file",
+ SHADOW_AUDIT_FAILURE);
+#endif
+ }
+}
+
+/*
+ * cleanup_unlock_shadow - Unlock the /etc/shadow database
+ *
+ * It should be registered after the shadow database is successfully locked.
+ */
+void cleanup_unlock_shadow (unused void *arg)
+{
+ if (spw_unlock () == 0) {
+ fprintf (stderr,
+ _("%s: failed to unlock %s\n"),
+ Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+#ifdef WITH_AUDIT
+ audit_logger_message ("unlocking shadow file",
+ SHADOW_AUDIT_FAILURE);
+#endif
+ }
+}
+
diff --git a/libmisc/console.c b/libmisc/console.c
new file mode 100644
index 0000000..cb74c2f
--- /dev/null
+++ b/libmisc/console.c
@@ -0,0 +1,134 @@
+/*
+ * Copyright (c) 1991 , Julianne Frances Haugh
+ * Copyright (c) 1991 , Chip Rosenthal
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2010, 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>
+#include "defines.h"
+#include <stdio.h>
+#include "getdef.h"
+#include "prototypes.h"
+
+#ident "$Id$"
+
+/* local function prototypes */
+static bool is_listed (const char *cfgin, const char *tty, bool def);
+
+/*
+ * This is now rather generic function which decides if "tty" is listed
+ * under "cfgin" in config (directly or indirectly). Fallback to default if
+ * something is bad.
+ */
+static bool is_listed (const char *cfgin, const char *tty, bool def)
+{
+ FILE *fp;
+ char buf[1024], *s;
+ const char *cons;
+
+ /*
+ * If the CONSOLE configuration definition isn't given,
+ * fallback to default.
+ */
+
+ cons = getdef_str (cfgin);
+ if (NULL == cons) {
+ return def;
+ }
+
+ /*
+ * If this isn't a filename, then it is a ":" delimited list of
+ * console devices upon which root logins are allowed.
+ */
+
+ if (*cons != '/') {
+ char *pbuf;
+ strncpy (buf, cons, sizeof (buf));
+ buf[sizeof (buf) - 1] = '\0';
+ pbuf = &buf[0];
+ while ((s = strtok (pbuf, ":")) != NULL) {
+ if (strcmp (s, tty) == 0) {
+ return true;
+ }
+
+ pbuf = NULL;
+ }
+ return false;
+ }
+
+ /*
+ * If we can't open the console list, then call everything a
+ * console - otherwise root will never be allowed to login.
+ */
+
+ fp = fopen (cons, "r");
+ if (NULL == fp) {
+ return def;
+ }
+
+ /*
+ * See if this tty is listed in the console file.
+ */
+
+ while (fgets (buf, (int) sizeof (buf), fp) != NULL) {
+ buf[strlen (buf) - 1] = '\0';
+ if (strcmp (buf, tty) == 0) {
+ (void) fclose (fp);
+ return true;
+ }
+ }
+
+ /*
+ * This tty isn't a console.
+ */
+
+ (void) fclose (fp);
+ return false;
+}
+
+/*
+ * console - return 1 if the "tty" is a console device, else 0.
+ *
+ * Note - we need to take extreme care here to avoid locking out root logins
+ * if something goes awry. That's why we do things like call everything a
+ * console if the consoles file can't be opened. Because of this, we must
+ * warn the user to protect against the remove of the consoles file since
+ * that would allow an unauthorized root login.
+ */
+
+bool console (const char *tty)
+{
+ if (strncmp (tty, "/dev/", 5) == 0) {
+ tty += 5;
+ }
+
+ return is_listed ("CONSOLE", tty, true);
+}
+
diff --git a/libmisc/copydir.c b/libmisc/copydir.c
new file mode 100644
index 0000000..e6aac6e
--- /dev/null
+++ b/libmisc/copydir.c
@@ -0,0 +1,839 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2001, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2010, 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 <assert.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include "prototypes.h"
+#include "defines.h"
+#ifdef WITH_SELINUX
+#include <selinux/selinux.h>
+#endif /* WITH_SELINUX */
+#if defined(WITH_ACL) || defined(WITH_ATTR)
+#include <stdarg.h>
+#include <attr/error_context.h>
+#endif /* WITH_ACL || WITH_ATTR */
+#ifdef WITH_ACL
+#include <acl/libacl.h>
+#endif /* WITH_ACL */
+#ifdef WITH_ATTR
+#include <attr/libattr.h>
+#endif /* WITH_ATTR */
+
+
+static /*@null@*/const char *src_orig;
+static /*@null@*/const char *dst_orig;
+
+struct link_name {
+ dev_t ln_dev;
+ ino_t ln_ino;
+ nlink_t ln_count;
+ char *ln_name;
+ /*@dependent@*/struct link_name *ln_next;
+};
+static /*@exposed@*/struct link_name *links;
+
+static int copy_entry (const char *src, const char *dst,
+ bool reset_selinux,
+ uid_t old_uid, uid_t new_uid,
+ gid_t old_gid, gid_t new_gid);
+static int copy_dir (const char *src, const char *dst,
+ bool reset_selinux,
+ const struct stat *statp, const struct timeval mt[],
+ uid_t old_uid, uid_t new_uid,
+ gid_t old_gid, gid_t new_gid);
+#ifdef S_IFLNK
+static /*@null@*/char *readlink_malloc (const char *filename);
+static int copy_symlink (const char *src, const char *dst,
+ unused bool reset_selinux,
+ const struct stat *statp, const struct timeval mt[],
+ uid_t old_uid, uid_t new_uid,
+ gid_t old_gid, gid_t new_gid);
+#endif /* S_IFLNK */
+static int copy_hardlink (const char *dst,
+ unused bool reset_selinux,
+ struct link_name *lp);
+static int copy_special (const char *src, const char *dst,
+ bool reset_selinux,
+ const struct stat *statp, const struct timeval mt[],
+ uid_t old_uid, uid_t new_uid,
+ gid_t old_gid, gid_t new_gid);
+static int copy_file (const char *src, const char *dst,
+ bool reset_selinux,
+ const struct stat *statp, const struct timeval mt[],
+ uid_t old_uid, uid_t new_uid,
+ gid_t old_gid, gid_t new_gid);
+static int chown_if_needed (const char *dst, const struct stat *statp,
+ uid_t old_uid, uid_t new_uid,
+ gid_t old_gid, gid_t new_gid);
+static int lchown_if_needed (const char *dst, const struct stat *statp,
+ uid_t old_uid, uid_t new_uid,
+ gid_t old_gid, gid_t new_gid);
+static int fchown_if_needed (int fdst, const struct stat *statp,
+ uid_t old_uid, uid_t new_uid,
+ gid_t old_gid, gid_t new_gid);
+
+#if defined(WITH_ACL) || defined(WITH_ATTR)
+/*
+ * error_acl - format the error messages for the ACL and EQ libraries.
+ */
+static void error_acl (struct error_context *ctx, const char *fmt, ...)
+{
+ va_list ap;
+
+ /* ignore the case when destination does not support ACLs
+ * or extended attributes */
+ if (ENOTSUP == errno) {
+ errno = 0;
+ return;
+ }
+
+ va_start (ap, fmt);
+ (void) fprintf (stderr, _("%s: "), Prog);
+ if (vfprintf (stderr, fmt, ap) != 0) {
+ (void) fputs (_(": "), stderr);
+ }
+ (void) fprintf (stderr, "%s\n", strerror (errno));
+ va_end (ap);
+}
+
+static struct error_context ctx = {
+ error_acl
+};
+#endif /* WITH_ACL || WITH_ATTR */
+
+/*
+ * remove_link - delete a link from the linked list
+ */
+static void remove_link (/*@only@*/struct link_name *ln)
+{
+ struct link_name *lp;
+
+ if (links == ln) {
+ links = ln->ln_next;
+ free (ln->ln_name);
+ free (ln);
+ return;
+ }
+ for (lp = links; NULL !=lp; lp = lp->ln_next) {
+ if (lp->ln_next == ln) {
+ break;
+ }
+ }
+
+ if (NULL == lp) {
+ free (ln->ln_name);
+ free (ln);
+ return;
+ }
+
+ lp->ln_next = lp->ln_next->ln_next;
+ free (ln->ln_name);
+ free (ln);
+}
+
+/*
+ * check_link - see if a file is really a link
+ */
+
+static /*@exposed@*/ /*@null@*/struct link_name *check_link (const char *name, const struct stat *sb)
+{
+ struct link_name *lp;
+ size_t src_len;
+ size_t dst_len;
+ size_t name_len;
+ size_t len;
+
+ /* copy_tree () must be the entry point */
+ assert (NULL != src_orig);
+ assert (NULL != dst_orig);
+
+ for (lp = links; NULL != lp; lp = lp->ln_next) {
+ if ((lp->ln_dev == sb->st_dev) && (lp->ln_ino == sb->st_ino)) {
+ return lp;
+ }
+ }
+
+ if (sb->st_nlink == 1) {
+ return NULL;
+ }
+
+ lp = (struct link_name *) xmalloc (sizeof *lp);
+ src_len = strlen (src_orig);
+ dst_len = strlen (dst_orig);
+ name_len = strlen (name);
+ lp->ln_dev = sb->st_dev;
+ lp->ln_ino = sb->st_ino;
+ lp->ln_count = sb->st_nlink;
+ len = name_len - src_len + dst_len + 1;
+ lp->ln_name = (char *) xmalloc (len);
+ (void) snprintf (lp->ln_name, len, "%s%s", dst_orig, name + src_len);
+ lp->ln_next = links;
+ links = lp;
+
+ return NULL;
+}
+
+/*
+ * copy_tree - copy files in a directory tree
+ *
+ * copy_tree() walks a directory tree and copies ordinary files
+ * as it goes.
+ *
+ * When reset_selinux is enabled, extended attributes (and thus
+ * SELinux attributes) are not copied.
+ *
+ * old_uid and new_uid are used to set the ownership of the copied
+ * files. Unless old_uid is set to -1, only the files owned by
+ * old_uid have their ownership changed to new_uid. In addition, if
+ * new_uid is set to -1, no ownership will be changed.
+ *
+ * The same logic applies for the group-ownership and
+ * old_gid/new_gid.
+ */
+int copy_tree (const char *src_root, const char *dst_root,
+ bool copy_root, bool reset_selinux,
+ uid_t old_uid, uid_t new_uid,
+ gid_t old_gid, gid_t new_gid)
+{
+ int err = 0;
+ bool set_orig = false;
+ struct DIRECT *ent;
+ DIR *dir;
+
+ if (copy_root) {
+ struct stat sb;
+ if (access (dst_root, F_OK) == 0) {
+ return -1;
+ }
+
+ if (LSTAT (src_root, &sb) == -1) {
+ return -1;
+ }
+
+ if (!S_ISDIR (sb.st_mode)) {
+ fprintf (stderr,
+ "%s: %s is not a directory",
+ Prog, src_root);
+ return -1;
+ }
+
+ return copy_entry (src_root, dst_root, reset_selinux,
+ old_uid, new_uid, old_gid, new_gid);
+ }
+
+ /*
+ * Make certain both directories exist. This routine is called
+ * after the home directory is created, or recursively after the
+ * target is created. It assumes the target directory exists.
+ */
+
+ if ( (access (src_root, F_OK) != 0)
+ || (access (dst_root, F_OK) != 0)) {
+ return -1;
+ }
+
+ /*
+ * Open the source directory and read each entry. Every file
+ * entry in the directory is copied with the UID and GID set
+ * to the provided values. As an added security feature only
+ * regular files (and directories ...) are copied, and no file
+ * is made set-ID.
+ */
+ dir = opendir (src_root);
+ if (NULL == dir) {
+ return -1;
+ }
+
+ if (src_orig == NULL) {
+ src_orig = src_root;
+ dst_orig = dst_root;
+ set_orig = true;
+ }
+ while ((0 == err) && (ent = readdir (dir)) != NULL) {
+ /*
+ * Skip the "." and ".." entries
+ */
+ if ((strcmp (ent->d_name, ".") != 0) &&
+ (strcmp (ent->d_name, "..") != 0)) {
+ char *src_name;
+ char *dst_name;
+ size_t src_len = strlen (ent->d_name) + 2;
+ size_t dst_len = strlen (ent->d_name) + 2;
+ src_len += strlen (src_root);
+ dst_len += strlen (dst_root);
+
+ src_name = (char *) malloc (src_len);
+ dst_name = (char *) malloc (dst_len);
+
+ if ((NULL == src_name) || (NULL == dst_name)) {
+ err = -1;
+ } else {
+ /*
+ * Build the filename for both the source and
+ * the destination files.
+ */
+ (void) snprintf (src_name, src_len, "%s/%s",
+ src_root, ent->d_name);
+ (void) snprintf (dst_name, dst_len, "%s/%s",
+ dst_root, ent->d_name);
+
+ err = copy_entry (src_name, dst_name,
+ reset_selinux,
+ old_uid, new_uid,
+ old_gid, new_gid);
+ }
+ if (NULL != src_name) {
+ free (src_name);
+ }
+ if (NULL != dst_name) {
+ free (dst_name);
+ }
+ }
+ }
+ (void) closedir (dir);
+
+ if (set_orig) {
+ src_orig = NULL;
+ dst_orig = NULL;
+ /* FIXME: clean links
+ * Since there can be hardlinks elsewhere on the device,
+ * we cannot check that all the hardlinks were found:
+ assert (NULL == links);
+ */
+ }
+
+#ifdef WITH_SELINUX
+ /* Reset SELinux to create files with default contexts.
+ * Note that the context is only reset on exit of copy_tree (it is
+ * assumed that the program would quit without needing a restored
+ * context if copy_tree failed previously), and that copy_tree can
+ * be called recursively (hence the context is set on the
+ * sub-functions of copy_entry).
+ */
+ if (reset_selinux_file_context () != 0) {
+ err = -1;
+ }
+#endif /* WITH_SELINUX */
+
+ return err;
+}
+
+/*
+ * copy_entry - copy the entry of a directory
+ *
+ * Copy the entry src to dst.
+ * Depending on the type of entry, this function will forward the
+ * request to copy_dir(), copy_symlink(), copy_hardlink(),
+ * copy_special(), or copy_file().
+ *
+ * The access and modification time will not be modified.
+ *
+ * The permissions will be set to new_uid/new_gid.
+ *
+ * If new_uid (resp. new_gid) is equal to -1, the user (resp. group) will
+ * not be modified.
+ *
+ * Only the files owned (resp. group-owned) by old_uid (resp.
+ * old_gid) will be modified, unless old_uid (resp. old_gid) is set
+ * to -1.
+ */
+static int copy_entry (const char *src, const char *dst,
+ bool reset_selinux,
+ uid_t old_uid, uid_t new_uid,
+ gid_t old_gid, gid_t new_gid)
+{
+ int err = 0;
+ struct stat sb;
+ struct link_name *lp;
+ struct timeval mt[2];
+
+ if (LSTAT (src, &sb) == -1) {
+ /* If we cannot stat the file, do not care. */
+ } else {
+#ifdef HAVE_STRUCT_STAT_ST_ATIM
+ mt[0].tv_sec = sb.st_atim.tv_sec;
+ mt[0].tv_usec = sb.st_atim.tv_nsec / 1000;
+#else /* !HAVE_STRUCT_STAT_ST_ATIM */
+ mt[0].tv_sec = sb.st_atime;
+# ifdef HAVE_STRUCT_STAT_ST_ATIMENSEC
+ mt[0].tv_usec = sb.st_atimensec / 1000;
+# else /* !HAVE_STRUCT_STAT_ST_ATIMENSEC */
+ mt[0].tv_usec = 0;
+# endif /* !HAVE_STRUCT_STAT_ST_ATIMENSEC */
+#endif /* !HAVE_STRUCT_STAT_ST_ATIM */
+
+#ifdef HAVE_STRUCT_STAT_ST_MTIM
+ mt[1].tv_sec = sb.st_mtim.tv_sec;
+ mt[1].tv_usec = sb.st_mtim.tv_nsec / 1000;
+#else /* !HAVE_STRUCT_STAT_ST_MTIM */
+ mt[1].tv_sec = sb.st_mtime;
+# ifdef HAVE_STRUCT_STAT_ST_MTIMENSEC
+ mt[1].tv_usec = sb.st_mtimensec / 1000;
+# else /* !HAVE_STRUCT_STAT_ST_MTIMENSEC */
+ mt[1].tv_usec = 0;
+# endif /* !HAVE_STRUCT_STAT_ST_MTIMENSEC */
+#endif /* !HAVE_STRUCT_STAT_ST_MTIM */
+
+ if (S_ISDIR (sb.st_mode)) {
+ err = copy_dir (src, dst, reset_selinux, &sb, mt,
+ old_uid, new_uid, old_gid, new_gid);
+ }
+
+#ifdef S_IFLNK
+ /*
+ * Copy any symbolic links
+ */
+
+ else if (S_ISLNK (sb.st_mode)) {
+ err = copy_symlink (src, dst, reset_selinux, &sb, mt,
+ old_uid, new_uid, old_gid, new_gid);
+ }
+#endif /* S_IFLNK */
+
+ /*
+ * See if this is a previously copied link
+ */
+
+ else if ((lp = check_link (src, &sb)) != NULL) {
+ err = copy_hardlink (dst, reset_selinux, lp);
+ }
+
+ /*
+ * Deal with FIFOs and special files. The user really
+ * shouldn't have any of these, but it seems like it
+ * would be nice to copy everything ...
+ */
+
+ else if (!S_ISREG (sb.st_mode)) {
+ err = copy_special (src, dst, reset_selinux, &sb, mt,
+ old_uid, new_uid, old_gid, new_gid);
+ }
+
+ /*
+ * Create the new file and copy the contents. The new
+ * file will be owned by the provided UID and GID values.
+ */
+
+ else {
+ err = copy_file (src, dst, reset_selinux, &sb, mt,
+ old_uid, new_uid, old_gid, new_gid);
+ }
+ }
+
+ return err;
+}
+
+/*
+ * copy_dir - copy a directory
+ *
+ * Copy a directory (recursively) from src to dst.
+ *
+ * statp, mt, old_uid, new_uid, old_gid, and new_gid are used to set
+ * the access and modification and the access rights.
+ *
+ * Return 0 on success, -1 on error.
+ */
+static int copy_dir (const char *src, const char *dst,
+ bool reset_selinux,
+ const struct stat *statp, const struct timeval mt[],
+ uid_t old_uid, uid_t new_uid,
+ gid_t old_gid, gid_t new_gid)
+{
+ int err = 0;
+
+ /*
+ * Create a new target directory, make it owned by
+ * the user and then recursively copy that directory.
+ */
+
+#ifdef WITH_SELINUX
+ if (set_selinux_file_context (dst) != 0) {
+ return -1;
+ }
+#endif /* WITH_SELINUX */
+ if ( (mkdir (dst, statp->st_mode) != 0)
+ || (chown_if_needed (dst, statp,
+ old_uid, new_uid, old_gid, new_gid) != 0)
+#ifdef WITH_ACL
+ || ( (perm_copy_file (src, dst, &ctx) != 0)
+ && (errno != 0))
+#else /* !WITH_ACL */
+ || (chmod (dst, statp->st_mode) != 0)
+#endif /* !WITH_ACL */
+#ifdef WITH_ATTR
+ /*
+ * If the third parameter is NULL, all extended attributes
+ * except those that define Access Control Lists are copied.
+ * ACLs are excluded by default because copying them between
+ * file systems with and without ACL support needs some
+ * additional logic so that no unexpected permissions result.
+ */
+ || ( !reset_selinux
+ && (attr_copy_file (src, dst, NULL, &ctx) != 0)
+ && (errno != 0))
+#endif /* WITH_ATTR */
+ || (copy_tree (src, dst, false, reset_selinux,
+ old_uid, new_uid, old_gid, new_gid) != 0)
+ || (utimes (dst, mt) != 0)) {
+ err = -1;
+ }
+
+ return err;
+}
+
+#ifdef S_IFLNK
+/*
+ * readlink_malloc - wrapper for readlink
+ *
+ * return NULL on error.
+ * The return string shall be freed by the caller.
+ */
+static /*@null@*/char *readlink_malloc (const char *filename)
+{
+ size_t size = 1024;
+
+ while (true) {
+ ssize_t nchars;
+ char *buffer = (char *) malloc (size);
+ if (NULL == buffer) {
+ return NULL;
+ }
+
+ nchars = readlink (filename, buffer, size);
+
+ if (nchars < 0) {
+ free(buffer);
+ return NULL;
+ }
+
+ if ((size_t) nchars < size) { /* The buffer was large enough */
+ /* readlink does not nul-terminate */
+ buffer[nchars] = '\0';
+ return buffer;
+ }
+
+ /* Try again with a bigger buffer */
+ free (buffer);
+ size *= 2;
+ }
+}
+
+/*
+ * copy_symlink - copy a symlink
+ *
+ * Copy a symlink from src to dst.
+ *
+ * statp, mt, old_uid, new_uid, old_gid, and new_gid are used to set
+ * the access and modification and the access rights.
+ *
+ * Return 0 on success, -1 on error.
+ */
+static int copy_symlink (const char *src, const char *dst,
+ unused bool reset_selinux,
+ const struct stat *statp, const struct timeval mt[],
+ uid_t old_uid, uid_t new_uid,
+ gid_t old_gid, gid_t new_gid)
+{
+ char *oldlink;
+
+ /* copy_tree () must be the entry point */
+ assert (NULL != src_orig);
+ assert (NULL != dst_orig);
+
+ /*
+ * Get the name of the file which the link points
+ * to. If that name begins with the original
+ * source directory name, that part of the link
+ * name will be replaced with the original
+ * destination directory name.
+ */
+
+ oldlink = readlink_malloc (src);
+ if (NULL == oldlink) {
+ return -1;
+ }
+
+ /* If src was a link to an entry of the src_orig directory itself,
+ * create a link to the corresponding entry in the dst_orig
+ * directory.
+ */
+ if (strncmp (oldlink, src_orig, strlen (src_orig)) == 0) {
+ size_t len = strlen (dst_orig) + strlen (oldlink) - strlen (src_orig) + 1;
+ char *dummy = (char *) xmalloc (len);
+ (void) snprintf (dummy, len, "%s%s",
+ dst_orig,
+ oldlink + strlen (src_orig));
+ free (oldlink);
+ oldlink = dummy;
+ }
+
+#ifdef WITH_SELINUX
+ if (set_selinux_file_context (dst) != 0) {
+ free (oldlink);
+ return -1;
+ }
+#endif /* WITH_SELINUX */
+ if ( (symlink (oldlink, dst) != 0)
+ || (lchown_if_needed (dst, statp,
+ old_uid, new_uid, old_gid, new_gid) != 0)) {
+ /* FIXME: there are no modes on symlinks, right?
+ * ACL could be copied, but this would be much more
+ * complex than calling perm_copy_file.
+ * Ditto for Extended Attributes.
+ * We currently only document that ACL and Extended
+ * Attributes are not copied.
+ */
+ free (oldlink);
+ return -1;
+ }
+ free (oldlink);
+
+#ifdef HAVE_LUTIMES
+ /* 2007-10-18: We don't care about
+ * exit status of lutimes because
+ * it returns ENOSYS on many system
+ * - not implemented
+ */
+ (void) lutimes (dst, mt);
+#endif /* HAVE_LUTIMES */
+
+ return 0;
+}
+#endif /* S_IFLNK */
+
+/*
+ * copy_hardlink - copy a hardlink
+ *
+ * Copy a hardlink from src to dst.
+ *
+ * Return 0 on success, -1 on error.
+ */
+static int copy_hardlink (const char *dst,
+ unused bool reset_selinux,
+ struct link_name *lp)
+{
+ /* FIXME: selinux, ACL, Extended Attributes needed? */
+
+ if (link (lp->ln_name, dst) != 0) {
+ return -1;
+ }
+
+ /* If the file could be unlinked, decrement the links counter,
+ * and forget about this link if it was the last reference */
+ lp->ln_count--;
+ if (lp->ln_count <= 0) {
+ remove_link (lp);
+ }
+
+ return 0;
+}
+
+/*
+ * copy_special - copy a special file
+ *
+ * Copy a special file from src to dst.
+ *
+ * statp, mt, old_uid, new_uid, old_gid, and new_gid are used to set
+ * the access and modification and the access rights.
+ *
+ * Return 0 on success, -1 on error.
+ */
+static int copy_special (const char *src, const char *dst,
+ bool reset_selinux,
+ const struct stat *statp, const struct timeval mt[],
+ uid_t old_uid, uid_t new_uid,
+ gid_t old_gid, gid_t new_gid)
+{
+ int err = 0;
+
+#ifdef WITH_SELINUX
+ if (set_selinux_file_context (dst) != 0) {
+ return -1;
+ }
+#endif /* WITH_SELINUX */
+
+ if ( (mknod (dst, statp->st_mode & ~07777, statp->st_rdev) != 0)
+ || (chown_if_needed (dst, statp,
+ old_uid, new_uid, old_gid, new_gid) != 0)
+#ifdef WITH_ACL
+ || ( (perm_copy_file (src, dst, &ctx) != 0)
+ && (errno != 0))
+#else /* !WITH_ACL */
+ || (chmod (dst, statp->st_mode & 07777) != 0)
+#endif /* !WITH_ACL */
+#ifdef WITH_ATTR
+ /*
+ * If the third parameter is NULL, all extended attributes
+ * except those that define Access Control Lists are copied.
+ * ACLs are excluded by default because copying them between
+ * file systems with and without ACL support needs some
+ * additional logic so that no unexpected permissions result.
+ */
+ || ( !reset_selinux
+ && (attr_copy_file (src, dst, NULL, &ctx) != 0)
+ && (errno != 0))
+#endif /* WITH_ATTR */
+ || (utimes (dst, mt) != 0)) {
+ err = -1;
+ }
+
+ return err;
+}
+
+/*
+ * copy_file - copy a file
+ *
+ * Copy a file from src to dst.
+ *
+ * statp, mt, old_uid, new_uid, old_gid, and new_gid are used to set
+ * the access and modification and the access rights.
+ *
+ * Return 0 on success, -1 on error.
+ */
+static int copy_file (const char *src, const char *dst,
+ bool reset_selinux,
+ const struct stat *statp, const struct timeval mt[],
+ uid_t old_uid, uid_t new_uid,
+ gid_t old_gid, gid_t new_gid)
+{
+ int err = 0;
+ int ifd;
+ int ofd;
+ char buf[1024];
+ ssize_t cnt;
+
+ ifd = open (src, O_RDONLY);
+ if (ifd < 0) {
+ return -1;
+ }
+#ifdef WITH_SELINUX
+ if (set_selinux_file_context (dst) != 0) {
+ return -1;
+ }
+#endif /* WITH_SELINUX */
+ ofd = open (dst, O_WRONLY | O_CREAT | O_TRUNC, statp->st_mode & 07777);
+ if ( (ofd < 0)
+ || (fchown_if_needed (ofd, statp,
+ old_uid, new_uid, old_gid, new_gid) != 0)
+#ifdef WITH_ACL
+ || ( (perm_copy_fd (src, ifd, dst, ofd, &ctx) != 0)
+ && (errno != 0))
+#else /* !WITH_ACL */
+ || (fchmod (ofd, statp->st_mode & 07777) != 0)
+#endif /* !WITH_ACL */
+#ifdef WITH_ATTR
+ /*
+ * If the third parameter is NULL, all extended attributes
+ * except those that define Access Control Lists are copied.
+ * ACLs are excluded by default because copying them between
+ * file systems with and without ACL support needs some
+ * additional logic so that no unexpected permissions result.
+ */
+ || ( !reset_selinux
+ && (attr_copy_fd (src, ifd, dst, ofd, NULL, &ctx) != 0)
+ && (errno != 0))
+#endif /* WITH_ATTR */
+ ) {
+ (void) close (ifd);
+ return -1;
+ }
+
+ while ((cnt = read (ifd, buf, sizeof buf)) > 0) {
+ if (write (ofd, buf, (size_t)cnt) != cnt) {
+ (void) close (ifd);
+ return -1;
+ }
+ }
+
+ (void) close (ifd);
+
+#ifdef HAVE_FUTIMES
+ if (futimes (ofd, mt) != 0) {
+ return -1;
+ }
+#endif /* HAVE_FUTIMES */
+
+ if (close (ofd) != 0) {
+ return -1;
+ }
+
+#ifndef HAVE_FUTIMES
+ if (utimes(dst, mt) != 0) {
+ return -1;
+ }
+#endif /* !HAVE_FUTIMES */
+
+ return err;
+}
+
+#define def_chown_if_needed(chown_function, type_dst) \
+static int chown_function ## _if_needed (type_dst dst, \
+ const struct stat *statp, \
+ uid_t old_uid, uid_t new_uid, \
+ gid_t old_gid, gid_t new_gid) \
+{ \
+ uid_t tmpuid = (uid_t) -1; \
+ gid_t tmpgid = (gid_t) -1; \
+ \
+ /* Use new_uid if old_uid is set to -1 or if the file was \
+ * owned by the user. */ \
+ if (((uid_t) -1 == old_uid) || (statp->st_uid == old_uid)) { \
+ tmpuid = new_uid; \
+ } \
+ /* Otherwise, or if new_uid was set to -1, we keep the same \
+ * owner. */ \
+ if ((uid_t) -1 == tmpuid) { \
+ tmpuid = statp->st_uid; \
+ } \
+ \
+ if (((gid_t) -1 == old_gid) || (statp->st_gid == old_gid)) { \
+ tmpgid = new_gid; \
+ } \
+ if ((gid_t) -1 == tmpgid) { \
+ tmpgid = statp->st_gid; \
+ } \
+ \
+ return chown_function (dst, tmpuid, tmpgid); \
+}
+
+def_chown_if_needed (chown, const char *)
+def_chown_if_needed (lchown, const char *)
+def_chown_if_needed (fchown, int)
+
diff --git a/libmisc/entry.c b/libmisc/entry.c
new file mode 100644
index 0000000..f195fdf
--- /dev/null
+++ b/libmisc/entry.c
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, 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 <sys/types.h>
+#include <stdio.h>
+#include "prototypes.h"
+#include "defines.h"
+#include <pwd.h>
+
+void pw_entry (const char *name, struct passwd *pwent)
+{
+ struct passwd *passwd;
+
+ struct spwd *spwd;
+
+ if (!(passwd = getpwnam (name))) { /* local, no need for xgetpwnam */
+ pwent->pw_name = (char *) 0;
+ return;
+ } else {
+ pwent->pw_name = xstrdup (passwd->pw_name);
+ pwent->pw_uid = passwd->pw_uid;
+ pwent->pw_gid = passwd->pw_gid;
+ pwent->pw_gecos = xstrdup (passwd->pw_gecos);
+ pwent->pw_dir = xstrdup (passwd->pw_dir);
+ pwent->pw_shell = xstrdup (passwd->pw_shell);
+#if !defined(AUTOSHADOW)
+ /* local, no need for xgetspnam */
+ if ((spwd = getspnam (name))) {
+ pwent->pw_passwd = xstrdup (spwd->sp_pwdp);
+ return;
+ }
+#endif
+ pwent->pw_passwd = xstrdup (passwd->pw_passwd);
+ }
+}
diff --git a/libmisc/env.c b/libmisc/env.c
new file mode 100644
index 0000000..0b7c148
--- /dev/null
+++ b/libmisc/env.c
@@ -0,0 +1,275 @@
+/*
+ * Copyright (c) 1989 - 1992, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1999, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008 - 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.
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "prototypes.h"
+#include "defines.h"
+/*
+ * NEWENVP_STEP must be a power of two. This is the number
+ * of (char *) pointers to allocate at a time, to avoid using
+ * realloc() too often.
+ */
+#define NEWENVP_STEP 16
+size_t newenvc = 0;
+/*@null@*/char **newenvp = NULL;
+extern char **environ;
+
+static const char *forbid[] = {
+ "_RLD_=",
+ "BASH_ENV=", /* GNU creeping featurism strikes again... */
+ "ENV=",
+ "HOME=",
+ "IFS=",
+ "KRB_CONF=",
+ "LD_", /* anything with the LD_ prefix */
+ "LIBPATH=",
+ "MAIL=",
+ "NLSPATH=",
+ "PATH=",
+ "SHELL=",
+ "SHLIB_PATH=",
+ (char *) 0
+};
+
+/* these are allowed, but with no slashes inside
+ (to work around security problems in GNU gettext) */
+static const char *noslash[] = {
+ "LANG=",
+ "LANGUAGE=",
+ "LC_", /* anything with the LC_ prefix */
+ (char *) 0
+};
+
+/*
+ * initenv() must be called once before using addenv().
+ */
+void initenv (void)
+{
+ newenvp = (char **) xmalloc (NEWENVP_STEP * sizeof (char *));
+ *newenvp = NULL;
+}
+
+
+void addenv (const char *string, /*@null@*/const char *value)
+{
+ char *cp, *newstring;
+ size_t i;
+ size_t n;
+
+ if (NULL != value) {
+ size_t len = strlen (string) + strlen (value) + 2;
+ int wlen;
+ newstring = xmalloc (len);
+ wlen = snprintf (newstring, len, "%s=%s", string, value);
+ assert (wlen == (int) len -1);
+ } else {
+ newstring = xstrdup (string);
+ }
+
+ /*
+ * Search for a '=' character within the string and if none is found
+ * just ignore the whole string.
+ */
+
+ cp = strchr (newstring, '=');
+ if (NULL == cp) {
+ free (newstring);
+ return;
+ }
+
+ n = (size_t) (cp - newstring);
+
+ /*
+ * If this environment variable is already set, change its value.
+ */
+ for (i = 0; i < newenvc; i++) {
+ if ( (strncmp (newstring, newenvp[i], n) == 0)
+ && (('=' == newenvp[i][n]) || ('\0' == newenvp[i][n]))) {
+ break;
+ }
+ }
+
+ if (i < newenvc) {
+ free (newenvp[i]);
+ newenvp[i] = newstring;
+ return;
+ }
+
+ /*
+ * Otherwise, save the new environment variable
+ */
+ newenvp[newenvc++] = newstring;
+
+ /*
+ * And extend the environment if needed.
+ */
+
+ /*
+ * Check whether newenvc is a multiple of NEWENVP_STEP.
+ * If so we have to resize the vector.
+ * the expression (newenvc & (NEWENVP_STEP - 1)) == 0
+ * is equal to (newenvc % NEWENVP_STEP) == 0
+ * as long as NEWENVP_STEP is a power of 2.
+ */
+
+ if ((newenvc & (NEWENVP_STEP - 1)) == 0) {
+ char **__newenvp;
+ size_t newsize;
+
+ /*
+ * If the resize operation succeeds we can
+ * happily go on, else print a message.
+ */
+
+ newsize = (newenvc + NEWENVP_STEP) * sizeof (char *);
+ __newenvp = (char **) realloc (newenvp, newsize);
+
+ if (NULL != __newenvp) {
+ /*
+ * If this is our current environment, update
+ * environ so that it doesn't point to some
+ * free memory area (realloc() could move it).
+ */
+ if (environ == newenvp) {
+ environ = __newenvp;
+ }
+ newenvp = __newenvp;
+ } else {
+ (void) fputs (_("Environment overflow\n"), stderr);
+ newenvc--;
+ free (newenvp[newenvc]);
+ }
+ }
+
+ /*
+ * The last entry of newenvp must be NULL
+ */
+
+ newenvp[newenvc] = NULL;
+}
+
+
+/*
+ * set_env - copy command line arguments into the environment
+ */
+void set_env (int argc, char *const *argv)
+{
+ int noname = 1;
+ char variable[1024];
+ char *cp;
+
+ for (; argc > 0; argc--, argv++) {
+ if (strlen (*argv) >= sizeof variable) {
+ continue; /* ignore long entries */
+ }
+
+ cp = strchr (*argv, '=');
+ if (NULL == cp) {
+ int wlen;
+ wlen = snprintf (variable, sizeof variable, "L%d", noname);
+ assert (wlen < (int) sizeof(variable));
+ noname++;
+ addenv (variable, *argv);
+ } else {
+ const char **p;
+
+ for (p = forbid; NULL != *p; p++) {
+ if (strncmp (*argv, *p, strlen (*p)) == 0) {
+ break;
+ }
+ }
+
+ if (NULL != *p) {
+ strncpy (variable, *argv, (size_t)(cp - *argv));
+ variable[cp - *argv] = '\0';
+ printf (_("You may not change $%s\n"),
+ variable);
+ continue;
+ }
+
+ addenv (*argv, NULL);
+ }
+ }
+}
+
+/*
+ * sanitize_env - remove some nasty environment variables
+ * If you fall into a total paranoia, you should call this
+ * function for any root-setuid program or anything the user
+ * might change the environment with. 99% useless as almost
+ * all modern Unixes will handle setuid executables properly,
+ * but... I feel better with that silly precaution. -j.
+ */
+
+void sanitize_env (void)
+{
+ char **envp = environ;
+ const char **bad;
+ char **cur;
+ char **move;
+
+ for (cur = envp; NULL != *cur; cur++) {
+ for (bad = forbid; NULL != *bad; bad++) {
+ if (strncmp (*cur, *bad, strlen (*bad)) == 0) {
+ for (move = cur; NULL != *move; move++) {
+ *move = *(move + 1);
+ }
+ cur--;
+ break;
+ }
+ }
+ }
+
+ for (cur = envp; NULL != *cur; cur++) {
+ for (bad = noslash; NULL != *bad; bad++) {
+ if (strncmp (*cur, *bad, strlen (*bad)) != 0) {
+ continue;
+ }
+ if (strchr (*cur, '/') == NULL) {
+ continue; /* OK */
+ }
+ for (move = cur; NULL != *move; move++) {
+ *move = *(move + 1);
+ }
+ cur--;
+ break;
+ }
+ }
+}
+
diff --git a/libmisc/failure.c b/libmisc/failure.c
new file mode 100644
index 0000000..f6390a7
--- /dev/null
+++ b/libmisc/failure.c
@@ -0,0 +1,343 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2002 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008 - 2010, 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 <fcntl.h>
+#include <stdio.h>
+#include <unistd.h>
+#include "defines.h"
+#include "faillog.h"
+#include "getdef.h"
+#include "failure.h"
+#define YEAR (365L*DAY)
+/*
+ * failure - make failure entry
+ *
+ * failure() creates a new (struct faillog) entry or updates an
+ * existing one with the current failed login information.
+ */
+void failure (uid_t uid, const char *tty, struct faillog *fl)
+{
+ int fd;
+ off_t offset_uid = (off_t) (sizeof *fl) * uid;
+
+ /*
+ * Don't do anything if failure logging isn't set up.
+ */
+
+ if (access (FAILLOG_FILE, F_OK) != 0) {
+ return;
+ }
+
+ fd = open (FAILLOG_FILE, O_RDWR);
+ if (fd < 0) {
+ SYSLOG ((LOG_WARN,
+ "Can't write faillog entry for UID %lu in %s.",
+ (unsigned long) uid, FAILLOG_FILE));
+ return;
+ }
+
+ /*
+ * The file is indexed by UID value meaning that shared UID's
+ * share failure log records. That's OK since they really
+ * share just about everything else ...
+ */
+
+ if ( (lseek (fd, offset_uid, SEEK_SET) != offset_uid)
+ || (read (fd, (char *) fl, sizeof *fl) != (ssize_t) sizeof *fl)) {
+ /* This is not necessarily a failure. The file is
+ * initially zero length.
+ *
+ * If lseek() or read() failed for any other reason, this
+ * might reset the counter. But the new failure will be
+ * logged.
+ */
+ memzero (fl, sizeof *fl);
+ }
+
+ /*
+ * Update the record. We increment the failure count to log the
+ * latest failure. The only concern here is overflow, and we'll
+ * check for that. The line name and time of day are both
+ * updated as well.
+ */
+
+ if (fl->fail_cnt + 1 > 0) {
+ fl->fail_cnt++;
+ }
+
+ strncpy (fl->fail_line, tty, sizeof fl->fail_line);
+ (void) time (&fl->fail_time);
+
+ /*
+ * Seek back to the correct position in the file and write the
+ * record out. Ideally we should lock the file in case the same
+ * account is being logged simultaneously. But the risk doesn't
+ * seem that great.
+ */
+
+ if ( (lseek (fd, offset_uid, SEEK_SET) != offset_uid)
+ || (write (fd, (char *) fl, sizeof *fl) != (ssize_t) sizeof *fl)
+ || (close (fd) != 0)) {
+ SYSLOG ((LOG_WARN,
+ "Can't write faillog entry for UID %lu in %s.",
+ (unsigned long) uid, FAILLOG_FILE));
+ (void) close (fd);
+ }
+}
+
+static bool too_many_failures (const struct faillog *fl)
+{
+ time_t now;
+
+ if ((0 == fl->fail_max) || (fl->fail_cnt < fl->fail_max)) {
+ return false;
+ }
+
+ if (0 == fl->fail_locktime) {
+ return true; /* locked until reset manually */
+ }
+
+ (void) time (&now);
+ if ((fl->fail_time + fl->fail_locktime) < now) {
+ return false; /* enough time since last failure */
+ }
+
+ return true;
+}
+
+/*
+ * failcheck - check for failures > allowable
+ *
+ * failcheck() is called AFTER the password has been validated. If the
+ * account has been "attacked" with too many login failures, failcheck()
+ * returns 0 to indicate that the login should be denied even though
+ * the password is valid.
+ *
+ * failed indicates if the login failed AFTER the password has been
+ * validated.
+ */
+
+int failcheck (uid_t uid, struct faillog *fl, bool failed)
+{
+ int fd;
+ struct faillog fail;
+ off_t offset_uid = (off_t) (sizeof *fl) * uid;
+
+ /*
+ * Suppress the check if the log file isn't there.
+ */
+
+ if (access (FAILLOG_FILE, F_OK) != 0) {
+ return 1;
+ }
+
+ fd = open (FAILLOG_FILE, failed?O_RDONLY:O_RDWR);
+ if (fd < 0) {
+ SYSLOG ((LOG_WARN,
+ "Can't open the faillog file (%s) to check UID %lu. "
+ "User access authorized.",
+ FAILLOG_FILE, (unsigned long) uid));
+ return 1;
+ }
+
+ /*
+ * Get the record from the file and determine if the user has
+ * exceeded the failure limit. If "max" is zero, any number
+ * of failures are permitted. Only when "max" is non-zero and
+ * "cnt" is greater than or equal to "max" is the account
+ * considered to be locked.
+ *
+ * If read fails, there is no record for this user yet (the
+ * file is initially zero length and extended by writes), so
+ * no need to reset the count.
+ */
+
+ if ( (lseek (fd, offset_uid, SEEK_SET) != offset_uid)
+ || (read (fd, (char *) fl, sizeof *fl) != (ssize_t) sizeof *fl)) {
+ (void) close (fd);
+ return 1;
+ }
+
+ if (too_many_failures (fl)) {
+ (void) close (fd);
+ return 0;
+ }
+
+ /*
+ * The record is updated if this is not a failure. The count will
+ * be reset to zero, but the rest of the information will be left
+ * in the record in case someone wants to see where the failed
+ * login originated.
+ */
+
+ if (!failed) {
+ fail = *fl;
+ fail.fail_cnt = 0;
+
+ if ( (lseek (fd, offset_uid, SEEK_SET) != offset_uid)
+ || (write (fd, (const void *) &fail, sizeof fail) != (ssize_t) sizeof fail)
+ || (close (fd) != 0)) {
+ SYSLOG ((LOG_WARN,
+ "Can't reset faillog entry for UID %lu in %s.",
+ (unsigned long) uid, FAILLOG_FILE));
+ (void) close (fd);
+ }
+ } else {
+ (void) close (fd);
+ }
+
+ return 1;
+}
+
+/*
+ * failprint - print line of failure information
+ *
+ * failprint takes a (struct faillog) entry and formats it into a
+ * message which is displayed at login time.
+ */
+
+void failprint (const struct faillog *fail)
+{
+ struct tm *tp;
+
+#if HAVE_STRFTIME
+ char lasttimeb[256];
+ char *lasttime = lasttimeb;
+#else
+ char *lasttime;
+#endif
+ time_t NOW;
+
+ if (0 == fail->fail_cnt) {
+ return;
+ }
+
+ tp = localtime (&(fail->fail_time));
+ (void) time (&NOW);
+
+#if HAVE_STRFTIME
+ /*
+ * Print all information we have.
+ */
+ (void) strftime (lasttimeb, sizeof lasttimeb, "%c", tp);
+#else
+
+ /*
+ * Do the same thing, but don't use strftime since it
+ * probably doesn't exist on this system
+ */
+ lasttime = asctime (tp);
+ lasttime[24] = '\0';
+
+ if ((NOW - fail->fail_time) < YEAR) {
+ lasttime[19] = '\0';
+ }
+ if ((NOW - fail->fail_time) < DAY) {
+ lasttime = lasttime + 11;
+ }
+
+ if (' ' == *lasttime) {
+ lasttime++;
+ }
+#endif
+ /*@-formatconst@*/
+ (void) printf (ngettext ("%d failure since last login.\n"
+ "Last was %s on %s.\n",
+ "%d failures since last login.\n"
+ "Last was %s on %s.\n",
+ (unsigned long) fail->fail_cnt),
+ fail->fail_cnt, lasttime, fail->fail_line);
+ /*@=formatconst@*/
+}
+
+/*
+ * failtmp - update the cumulative failure log
+ *
+ * failtmp updates the (struct utmp) formatted failure log which
+ * maintains a record of all login failures.
+ */
+
+void failtmp (const char *username,
+#ifdef USE_UTMPX
+ const struct utmpx *failent
+#else /* !USE_UTMPX */
+ const struct utmp *failent
+#endif /* !USE_UTMPX */
+ )
+{
+ const char *ftmp;
+ int fd;
+
+ /*
+ * Get the name of the failure file. If no file has been defined
+ * in login.defs, don't do this.
+ */
+
+ ftmp = getdef_str ("FTMP_FILE");
+ if (NULL == ftmp) {
+ return;
+ }
+
+ /*
+ * Open the file for append. It must already exist for this
+ * feature to be used.
+ */
+
+ if (access (ftmp, F_OK) != 0) {
+ return;
+ }
+
+ fd = open (ftmp, O_WRONLY | O_APPEND);
+ if (-1 == fd) {
+ SYSLOG ((LOG_WARN,
+ "Can't append failure of user %s to %s.",
+ username, ftmp));
+ return;
+ }
+
+ /*
+ * Append the new failure record and close the log file.
+ */
+
+ if ( (write (fd, (const void *) failent, sizeof *failent) != (ssize_t) sizeof *failent)
+ || (close (fd) != 0)) {
+ SYSLOG ((LOG_WARN,
+ "Can't append failure of user %s to %s.",
+ username, ftmp));
+ (void) close (fd);
+ }
+}
+
diff --git a/libmisc/failure.h b/libmisc/failure.h
new file mode 100644
index 0000000..38a4d72
--- /dev/null
+++ b/libmisc/failure.h
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1997 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2005 , Tomasz Kłoczko
+ * Copyright (c) 2008 - 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.
+ */
+
+/* $Id$ */
+#ifndef _FAILURE_H_
+#define _FAILURE_H_
+
+#include "defines.h"
+#include "faillog.h"
+#ifdef USE_UTMPX
+#include <utmpx.h>
+#else /* !USE_UTMPX */
+#include <utmp.h>
+#endif /* !USE_UTMPX */
+
+/*
+ * failure - make failure entry
+ *
+ * failure() creates a new (struct faillog) entry or updates an
+ * existing one with the current failed login information.
+ */
+extern void failure (uid_t, const char *, struct faillog *);
+
+/*
+ * failcheck - check for failures > allowable
+ *
+ * failcheck() is called AFTER the password has been validated. If the
+ * account has been "attacked" with too many login failures, failcheck()
+ * returns FALSE to indicate that the login should be denied even though
+ * the password is valid.
+ */
+extern int failcheck (uid_t uid, struct faillog *fl, bool failed);
+
+/*
+ * failprint - print line of failure information
+ *
+ * failprint takes a (struct faillog) entry and formats it into a
+ * message which is displayed at login time.
+ */
+extern void failprint (const struct faillog *);
+
+/*
+ * failtmp - update the cumulative failure log
+ *
+ * failtmp updates the (struct utmp) formatted failure log which
+ * maintains a record of all login failures.
+ */
+#ifdef USE_UTMPX
+extern void failtmp (const char *username, const struct utmpx *);
+#else /* !USE_UTMPX */
+extern void failtmp (const char *username, const struct utmp *);
+#endif /* !USE_UTMPX */
+
+#endif
+
diff --git a/libmisc/find_new_gid.c b/libmisc/find_new_gid.c
new file mode 100644
index 0000000..f93b4a3
--- /dev/null
+++ b/libmisc/find_new_gid.c
@@ -0,0 +1,498 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 2008 - 2011, Nicolas François
+ * Copyright (c) 2014, Red Hat, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * 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>
+
+#include <assert.h>
+#include <stdio.h>
+#include <errno.h>
+
+#include "prototypes.h"
+#include "groupio.h"
+#include "getdef.h"
+
+/*
+ * get_ranges - Get the minimum and maximum ID ranges for the search
+ *
+ * This function will return the minimum and maximum ranges for IDs
+ *
+ * 0: The function completed successfully
+ * EINVAL: The provided ranges are impossible (such as maximum < minimum)
+ *
+ * preferred_min: The special-case minimum value for a specifically-
+ * requested ID, which may be lower than the standard min_id
+ */
+static int get_ranges (bool sys_group, gid_t *min_id, gid_t *max_id,
+ gid_t *preferred_min)
+{
+ gid_t gid_def_max = 0;
+
+ if (sys_group) {
+ /* System groups */
+
+ /* A requested ID is allowed to be below the autoselect range */
+ *preferred_min = (gid_t) 1;
+
+ /* Get the minimum ID range from login.defs or default to 101 */
+ *min_id = (gid_t) getdef_ulong ("SYS_GID_MIN", 101UL);
+
+ /*
+ * If SYS_GID_MAX is unspecified, we should assume it to be one
+ * less than the GID_MIN (which is reserved for non-system accounts)
+ */
+ gid_def_max = (gid_t) getdef_ulong ("GID_MIN", 1000UL) - 1;
+ *max_id = (gid_t) getdef_ulong ("SYS_GID_MAX",
+ (unsigned long) gid_def_max);
+
+ /* Check that the ranges make sense */
+ if (*max_id < *min_id) {
+ (void) fprintf (stderr,
+ _("%s: Invalid configuration: SYS_GID_MIN (%lu), "
+ "GID_MIN (%lu), SYS_GID_MAX (%lu)\n"),
+ Prog, (unsigned long) *min_id,
+ getdef_ulong ("GID_MIN", 1000UL),
+ (unsigned long) *max_id);
+ return EINVAL;
+ }
+ } else {
+ /* Non-system groups */
+
+ /* Get the values from login.defs or use reasonable defaults */
+ *min_id = (gid_t) getdef_ulong ("GID_MIN", 1000UL);
+ *max_id = (gid_t) getdef_ulong ("GID_MAX", 60000UL);
+
+ /*
+ * The preferred minimum should match the standard ID minimum
+ * for non-system groups.
+ */
+ *preferred_min = *min_id;
+
+ /* Check that the ranges make sense */
+ if (*max_id < *min_id) {
+ (void) fprintf (stderr,
+ _("%s: Invalid configuration: GID_MIN (%lu), "
+ "GID_MAX (%lu)\n"),
+ Prog, (unsigned long) *min_id,
+ (unsigned long) *max_id);
+ return EINVAL;
+ }
+ }
+
+ return 0;
+}
+
+/*
+ * check_gid - See if the requested GID is available
+ *
+ * On success, return 0
+ * If the ID is in use, return EEXIST
+ * If the ID is outside the range, return ERANGE
+ * In other cases, return errno from getgrgid()
+ */
+static int check_gid (const gid_t gid,
+ const gid_t gid_min,
+ const gid_t gid_max,
+ bool *used_gids)
+{
+ /* First test that the preferred ID is in the range */
+ if (gid < gid_min || gid > gid_max) {
+ return ERANGE;
+ }
+
+ /*
+ * Check whether we already detected this GID
+ * using the gr_next() loop
+ */
+ if (used_gids != NULL && used_gids[gid]) {
+ return EEXIST;
+ }
+ /* Check if the GID exists according to NSS */
+ errno = 0;
+ if (prefix_getgrgid (gid) != NULL) {
+ return EEXIST;
+ } else {
+ /* getgrgid() was NULL
+ * we have to ignore errors as temporary
+ * failures of remote user identity services
+ * would completely block user/group creation
+ */
+ }
+
+ /* If we've made it here, the GID must be available */
+ return 0;
+}
+
+/*
+ * find_new_gid - Find a new unused GID.
+ *
+ * If successful, find_new_gid provides an unused group ID in the
+ * [GID_MIN:GID_MAX] range.
+ * This ID should be higher than all the used GID, but if not possible,
+ * the lowest unused ID in the range will be returned.
+ *
+ * Return 0 on success, -1 if no unused GIDs are available.
+ */
+int find_new_gid (bool sys_group,
+ gid_t *gid,
+ /*@null@*/gid_t const *preferred_gid)
+{
+ bool *used_gids;
+ const struct group *grp;
+ gid_t gid_min, gid_max, preferred_min;
+ gid_t id;
+ gid_t lowest_found, highest_found;
+ int result;
+ int nospam = 0;
+
+ assert(gid != NULL);
+
+ /*
+ * First, figure out what ID range is appropriate for
+ * automatic assignment
+ */
+ result = get_ranges (sys_group, &gid_min, &gid_max, &preferred_min);
+ if (result == EINVAL) {
+ return -1;
+ }
+
+ /* Check if the preferred GID is available */
+ if (preferred_gid) {
+ result = check_gid (*preferred_gid, preferred_min, gid_max, NULL);
+ if (result == 0) {
+ /*
+ * Make sure the GID isn't queued for use already
+ */
+ if (gr_locate_gid (*preferred_gid) == NULL) {
+ *gid = *preferred_gid;
+ return 0;
+ }
+ /*
+ * gr_locate_gid() found the GID in an as-yet uncommitted
+ * entry. We'll proceed below and auto-set a GID.
+ */
+ } else if (result == EEXIST || result == ERANGE) {
+ /*
+ * Continue on below. At this time, we won't
+ * treat these two cases differently.
+ */
+ } else {
+ /*
+ * An unexpected error occurred. We should report
+ * this and fail the group creation.
+ * This differs from the automatic creation
+ * behavior below, since if a specific GID was
+ * requested and generated an error, the user is
+ * more likely to want to stop and address the
+ * issue.
+ */
+ fprintf (stderr,
+ _("%s: Encountered error attempting to use "
+ "preferred GID: %s\n"),
+ Prog, strerror (result));
+ return -1;
+ }
+ }
+
+ /*
+ * Search the entire group file,
+ * looking for the next unused value.
+ *
+ * We first check the local database with gr_rewind/gr_next to find
+ * all local values that are in use.
+ *
+ * We then compare the next free value to all databases (local and
+ * remote) and iterate until we find a free one. If there are free
+ * values beyond the lowest (system groups) or highest (non-system
+ * groups), we will prefer those and avoid potentially reclaiming a
+ * deleted group (which can be a security issue, since it may grant
+ * access to files belonging to that former group).
+ *
+ * If there are no GIDs available at the end of the search, we will
+ * have no choice but to iterate through the range looking for gaps.
+ *
+ */
+
+ /* Create an array to hold all of the discovered GIDs */
+ used_gids = malloc (sizeof (bool) * (gid_max +1));
+ if (NULL == used_gids) {
+ fprintf (stderr,
+ _("%s: failed to allocate memory: %s\n"),
+ Prog, strerror (errno));
+ return -1;
+ }
+ memset (used_gids, false, sizeof (bool) * (gid_max + 1));
+
+ /* First look for the lowest and highest value in the local database */
+ (void) gr_rewind ();
+ highest_found = gid_min;
+ lowest_found = gid_max;
+ while ((grp = gr_next ()) != NULL) {
+ /*
+ * Does this entry have a lower GID than the lowest we've found
+ * so far?
+ */
+ if ((grp->gr_gid <= lowest_found) && (grp->gr_gid >= gid_min)) {
+ lowest_found = grp->gr_gid - 1;
+ }
+
+ /*
+ * Does this entry have a higher GID than the highest we've found
+ * so far?
+ */
+ if ((grp->gr_gid >= highest_found) && (grp->gr_gid <= gid_max)) {
+ highest_found = grp->gr_gid + 1;
+ }
+
+ /* create index of used GIDs */
+ if (grp->gr_gid >= gid_min
+ && grp->gr_gid <= gid_max) {
+
+ used_gids[grp->gr_gid] = true;
+ }
+ }
+
+ if (sys_group) {
+ /*
+ * For system groups, we want to start from the
+ * top of the range and work downwards.
+ */
+
+ /*
+ * At the conclusion of the gr_next() search, we will either
+ * have a presumed-free GID or we will be at GID_MIN - 1.
+ */
+ if (lowest_found < gid_min) {
+ /*
+ * In this case, a GID is in use at GID_MIN.
+ *
+ * We will reset the search to GID_MAX and proceed down
+ * through all the GIDs (skipping those we detected with
+ * used_gids) for a free one. It is a known issue that
+ * this may result in reusing a previously-deleted GID,
+ * so administrators should be instructed to use this
+ * auto-detection with care (and prefer to assign GIDs
+ * explicitly).
+ */
+ lowest_found = gid_max;
+ }
+
+ /* Search through all of the IDs in the range */
+ for (id = lowest_found; id >= gid_min; id--) {
+ result = check_gid (id, gid_min, gid_max, used_gids);
+ if (result == 0) {
+ /* This GID is available. Return it. */
+ *gid = id;
+ free (used_gids);
+ return 0;
+ } else if (result == EEXIST) {
+ /* This GID is in use, we'll continue to the next */
+ } else {
+ /*
+ * An unexpected error occurred.
+ *
+ * Only report it the first time to avoid spamming
+ * the logs
+ *
+ */
+ if (!nospam) {
+ fprintf (stderr,
+ _("%s: Can't get unique system GID (%s). "
+ "Suppressing additional messages.\n"),
+ Prog, strerror (result));
+ SYSLOG ((LOG_ERR,
+ "Error checking available GIDs: %s",
+ strerror (result)));
+ nospam = 1;
+ }
+ /*
+ * We will continue anyway. Hopefully a later GID
+ * will work properly.
+ */
+ }
+ }
+
+ /*
+ * If we get all the way through the loop, try again from GID_MAX,
+ * unless that was where we previously started. (NOTE: the worst-case
+ * scenario here is that we will run through (GID_MAX - GID_MIN - 1)
+ * cycles *again* if we fall into this case with lowest_found as
+ * GID_MAX - 1, all groups in the range in use and maintained by
+ * network services such as LDAP.)
+ */
+ if (lowest_found != gid_max) {
+ for (id = gid_max; id >= gid_min; id--) {
+ result = check_gid (id, gid_min, gid_max, used_gids);
+ if (result == 0) {
+ /* This GID is available. Return it. */
+ *gid = id;
+ free (used_gids);
+ return 0;
+ } else if (result == EEXIST) {
+ /* This GID is in use, we'll continue to the next */
+ } else {
+ /*
+ * An unexpected error occurred.
+ *
+ * Only report it the first time to avoid spamming
+ * the logs
+ *
+ */
+ if (!nospam) {
+ fprintf (stderr,
+ _("%s: Can't get unique system GID (%s). "
+ "Suppressing additional messages.\n"),
+ Prog, strerror (result));
+ SYSLOG ((LOG_ERR,
+ "Error checking available GIDs: %s",
+ strerror (result)));
+ nospam = 1;
+ }
+ /*
+ * We will continue anyway. Hopefully a later GID
+ * will work properly.
+ */
+ }
+ }
+ }
+ } else { /* !sys_group */
+ /*
+ * For non-system groups, we want to start from the
+ * bottom of the range and work upwards.
+ */
+
+ /*
+ * At the conclusion of the gr_next() search, we will either
+ * have a presumed-free GID or we will be at GID_MAX + 1.
+ */
+ if (highest_found > gid_max) {
+ /*
+ * In this case, a GID is in use at GID_MAX.
+ *
+ * We will reset the search to GID_MIN and proceed up
+ * through all the GIDs (skipping those we detected with
+ * used_gids) for a free one. It is a known issue that
+ * this may result in reusing a previously-deleted GID,
+ * so administrators should be instructed to use this
+ * auto-detection with care (and prefer to assign GIDs
+ * explicitly).
+ */
+ highest_found = gid_min;
+ }
+
+ /* Search through all of the IDs in the range */
+ for (id = highest_found; id <= gid_max; id++) {
+ result = check_gid (id, gid_min, gid_max, used_gids);
+ if (result == 0) {
+ /* This GID is available. Return it. */
+ *gid = id;
+ free (used_gids);
+ return 0;
+ } else if (result == EEXIST) {
+ /* This GID is in use, we'll continue to the next */
+ } else {
+ /*
+ * An unexpected error occurred.
+ *
+ * Only report it the first time to avoid spamming
+ * the logs
+ *
+ */
+ if (!nospam) {
+ fprintf (stderr,
+ _("%s: Can't get unique GID (%s). "
+ "Suppressing additional messages.\n"),
+ Prog, strerror (result));
+ SYSLOG ((LOG_ERR,
+ "Error checking available GIDs: %s",
+ strerror (result)));
+ nospam = 1;
+ }
+ /*
+ * We will continue anyway. Hopefully a later GID
+ * will work properly.
+ */
+ }
+ }
+
+ /*
+ * If we get all the way through the loop, try again from GID_MIN,
+ * unless that was where we previously started. (NOTE: the worst-case
+ * scenario here is that we will run through (GID_MAX - GID_MIN - 1)
+ * cycles *again* if we fall into this case with highest_found as
+ * GID_MIN + 1, all groups in the range in use and maintained by
+ * network services such as LDAP.)
+ */
+ if (highest_found != gid_min) {
+ for (id = gid_min; id <= gid_max; id++) {
+ result = check_gid (id, gid_min, gid_max, used_gids);
+ if (result == 0) {
+ /* This GID is available. Return it. */
+ *gid = id;
+ free (used_gids);
+ return 0;
+ } else if (result == EEXIST) {
+ /* This GID is in use, we'll continue to the next */
+ } else {
+ /*
+ * An unexpected error occurred.
+ *
+ * Only report it the first time to avoid spamming
+ * the logs
+ *
+ */
+ if (!nospam) {
+ fprintf (stderr,
+ _("%s: Can't get unique GID (%s). "
+ "Suppressing additional messages.\n"),
+ Prog, strerror (result));
+ SYSLOG ((LOG_ERR,
+ "Error checking available GIDs: %s",
+ strerror (result)));
+ nospam = 1;
+ }
+ /*
+ * We will continue anyway. Hopefully a later GID
+ * will work properly.
+ */
+ }
+ }
+ }
+ }
+
+ /* The code reached here and found no available IDs in the range */
+ fprintf (stderr,
+ _("%s: Can't get unique GID (no more available GIDs)\n"),
+ Prog);
+ SYSLOG ((LOG_WARN, "no more available GIDs on the system"));
+ free (used_gids);
+ return -1;
+}
+
diff --git a/libmisc/find_new_sub_gids.c b/libmisc/find_new_sub_gids.c
new file mode 100644
index 0000000..ae8a937
--- /dev/null
+++ b/libmisc/find_new_sub_gids.c
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2012 Eric Biederman
+ *
+ * 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>
+
+#ifdef ENABLE_SUBIDS
+
+#include <assert.h>
+#include <stdio.h>
+#include <errno.h>
+
+#include "prototypes.h"
+#include "subordinateio.h"
+#include "getdef.h"
+
+/*
+ * find_new_sub_gids - Find a new unused range of GIDs.
+ *
+ * If successful, find_new_sub_gids provides a range of unused
+ * user IDs in the [SUB_GID_MIN:SUB_GID_MAX] range.
+ *
+ * Return 0 on success, -1 if no unused GIDs are available.
+ */
+int find_new_sub_gids (const char *owner,
+ gid_t *range_start, unsigned long *range_count)
+{
+ unsigned long min, max;
+ unsigned long count;
+ gid_t start;
+
+ assert (range_start != NULL);
+ assert (range_count != NULL);
+
+ min = getdef_ulong ("SUB_GID_MIN", 100000UL);
+ max = getdef_ulong ("SUB_GID_MAX", 600100000UL);
+ count = getdef_ulong ("SUB_GID_COUNT", 65536);
+
+ if (min > max || count >= max || (min + count - 1) > max) {
+ (void) fprintf (stderr,
+ _("%s: Invalid configuration: SUB_GID_MIN (%lu),"
+ " SUB_GID_MAX (%lu), SUB_GID_COUNT (%lu)\n"),
+ Prog, min, max, count);
+ return -1;
+ }
+
+ start = sub_gid_find_free_range(min, max, count);
+ if (start == (gid_t)-1) {
+ fprintf (stderr,
+ _("%s: Can't get unique subordinate GID range\n"),
+ Prog);
+ SYSLOG ((LOG_WARN, "no more available subordinate GIDs on the system"));
+ return -1;
+ }
+ *range_start = start;
+ *range_count = count;
+ return 0;
+}
+#else /* !ENABLE_SUBIDS */
+extern int errno; /* warning: ANSI C forbids an empty source file */
+#endif /* !ENABLE_SUBIDS */
+
diff --git a/libmisc/find_new_sub_uids.c b/libmisc/find_new_sub_uids.c
new file mode 100644
index 0000000..12cb2d2
--- /dev/null
+++ b/libmisc/find_new_sub_uids.c
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2012 Eric Biederman
+ *
+ * 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>
+
+#ifdef ENABLE_SUBIDS
+
+#include <assert.h>
+#include <stdio.h>
+#include <errno.h>
+
+#include "prototypes.h"
+#include "subordinateio.h"
+#include "getdef.h"
+
+/*
+ * find_new_sub_uids - Find a new unused range of UIDs.
+ *
+ * If successful, find_new_sub_uids provides a range of unused
+ * user IDs in the [SUB_UID_MIN:SUB_UID_MAX] range.
+ *
+ * Return 0 on success, -1 if no unused UIDs are available.
+ */
+int find_new_sub_uids (const char *owner,
+ uid_t *range_start, unsigned long *range_count)
+{
+ unsigned long min, max;
+ unsigned long count;
+ uid_t start;
+
+ assert (range_start != NULL);
+ assert (range_count != NULL);
+
+ min = getdef_ulong ("SUB_UID_MIN", 100000UL);
+ max = getdef_ulong ("SUB_UID_MAX", 600100000UL);
+ count = getdef_ulong ("SUB_UID_COUNT", 65536);
+
+ if (min > max || count >= max || (min + count - 1) > max) {
+ (void) fprintf (stderr,
+ _("%s: Invalid configuration: SUB_UID_MIN (%lu),"
+ " SUB_UID_MAX (%lu), SUB_UID_COUNT (%lu)\n"),
+ Prog, min, max, count);
+ return -1;
+ }
+
+ start = sub_uid_find_free_range(min, max, count);
+ if (start == (uid_t)-1) {
+ fprintf (stderr,
+ _("%s: Can't get unique subordinate UID range\n"),
+ Prog);
+ SYSLOG ((LOG_WARN, "no more available subordinate UIDs on the system"));
+ return -1;
+ }
+ *range_start = start;
+ *range_count = count;
+ return 0;
+}
+#else /* !ENABLE_SUBIDS */
+extern int errno; /* warning: ANSI C forbids an empty source file */
+#endif /* !ENABLE_SUBIDS */
+
diff --git a/libmisc/find_new_uid.c b/libmisc/find_new_uid.c
new file mode 100644
index 0000000..743cf0a
--- /dev/null
+++ b/libmisc/find_new_uid.c
@@ -0,0 +1,498 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 2008 - 2011, Nicolas François
+ * Copyright (c) 2014, Red Hat, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * 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>
+
+#include <assert.h>
+#include <stdio.h>
+#include <errno.h>
+
+#include "prototypes.h"
+#include "pwio.h"
+#include "getdef.h"
+
+/*
+ * get_ranges - Get the minimum and maximum ID ranges for the search
+ *
+ * This function will return the minimum and maximum ranges for IDs
+ *
+ * 0: The function completed successfully
+ * EINVAL: The provided ranges are impossible (such as maximum < minimum)
+ *
+ * preferred_min: The special-case minimum value for a specifically-
+ * requested ID, which may be lower than the standard min_id
+ */
+static int get_ranges (bool sys_user, uid_t *min_id, uid_t *max_id,
+ uid_t *preferred_min)
+{
+ uid_t uid_def_max = 0;
+
+ if (sys_user) {
+ /* System users */
+
+ /* A requested ID is allowed to be below the autoselect range */
+ *preferred_min = (uid_t) 1;
+
+ /* Get the minimum ID range from login.defs or default to 101 */
+ *min_id = (uid_t) getdef_ulong ("SYS_UID_MIN", 101UL);
+
+ /*
+ * If SYS_UID_MAX is unspecified, we should assume it to be one
+ * less than the UID_MIN (which is reserved for non-system accounts)
+ */
+ uid_def_max = (uid_t) getdef_ulong ("UID_MIN", 1000UL) - 1;
+ *max_id = (uid_t) getdef_ulong ("SYS_UID_MAX",
+ (unsigned long) uid_def_max);
+
+ /* Check that the ranges make sense */
+ if (*max_id < *min_id) {
+ (void) fprintf (stderr,
+ _("%s: Invalid configuration: SYS_UID_MIN (%lu), "
+ "UID_MIN (%lu), SYS_UID_MAX (%lu)\n"),
+ Prog, (unsigned long) *min_id,
+ getdef_ulong ("UID_MIN", 1000UL),
+ (unsigned long) *max_id);
+ return EINVAL;
+ }
+ } else {
+ /* Non-system users */
+
+ /* Get the values from login.defs or use reasonable defaults */
+ *min_id = (uid_t) getdef_ulong ("UID_MIN", 1000UL);
+ *max_id = (uid_t) getdef_ulong ("UID_MAX", 60000UL);
+
+ /*
+ * The preferred minimum should match the standard ID minimum
+ * for non-system users.
+ */
+ *preferred_min = *min_id;
+
+ /* Check that the ranges make sense */
+ if (*max_id < *min_id) {
+ (void) fprintf (stderr,
+ _("%s: Invalid configuration: UID_MIN (%lu), "
+ "UID_MAX (%lu)\n"),
+ Prog, (unsigned long) *min_id,
+ (unsigned long) *max_id);
+ return EINVAL;
+ }
+ }
+
+ return 0;
+}
+
+/*
+ * check_uid - See if the requested UID is available
+ *
+ * On success, return 0
+ * If the ID is in use, return EEXIST
+ * If the ID is outside the range, return ERANGE
+ * In other cases, return errno from getpwuid()
+ */
+static int check_uid(const uid_t uid,
+ const uid_t uid_min,
+ const uid_t uid_max,
+ bool *used_uids)
+{
+ /* First test that the preferred ID is in the range */
+ if (uid < uid_min || uid > uid_max) {
+ return ERANGE;
+ }
+
+ /*
+ * Check whether we already detected this UID
+ * using the pw_next() loop
+ */
+ if (used_uids != NULL && used_uids[uid]) {
+ return EEXIST;
+ }
+ /* Check if the UID exists according to NSS */
+ errno = 0;
+ if (prefix_getpwuid(uid) != NULL) {
+ return EEXIST;
+ } else {
+ /* getpwuid() was NULL
+ * we have to ignore errors as temporary
+ * failures of remote user identity services
+ * would completely block user/group creation
+ */
+ }
+
+ /* If we've made it here, the UID must be available */
+ return 0;
+}
+
+/*
+ * find_new_uid - Find a new unused UID.
+ *
+ * If successful, find_new_uid provides an unused user ID in the
+ * [UID_MIN:UID_MAX] range.
+ * This ID should be higher than all the used UID, but if not possible,
+ * the lowest unused ID in the range will be returned.
+ *
+ * Return 0 on success, -1 if no unused UIDs are available.
+ */
+int find_new_uid(bool sys_user,
+ uid_t *uid,
+ /*@null@*/uid_t const *preferred_uid)
+{
+ bool *used_uids;
+ const struct passwd *pwd;
+ uid_t uid_min, uid_max, preferred_min;
+ uid_t id;
+ uid_t lowest_found, highest_found;
+ int result;
+ int nospam = 0;
+
+ assert (uid != NULL);
+
+ /*
+ * First, figure out what ID range is appropriate for
+ * automatic assignment
+ */
+ result = get_ranges (sys_user, &uid_min, &uid_max, &preferred_min);
+ if (result == EINVAL) {
+ return -1;
+ }
+
+ /* Check if the preferred UID is available */
+ if (preferred_uid) {
+ result = check_uid (*preferred_uid, preferred_min, uid_max, NULL);
+ if (result == 0) {
+ /*
+ * Make sure the UID isn't queued for use already
+ */
+ if (pw_locate_uid (*preferred_uid) == NULL) {
+ *uid = *preferred_uid;
+ return 0;
+ }
+ /*
+ * pw_locate_uid() found the UID in an as-yet uncommitted
+ * entry. We'll proceed below and auto-set an UID.
+ */
+ } else if (result == EEXIST || result == ERANGE) {
+ /*
+ * Continue on below. At this time, we won't
+ * treat these two cases differently.
+ */
+ } else {
+ /*
+ * An unexpected error occurred. We should report
+ * this and fail the user creation.
+ * This differs from the automatic creation
+ * behavior below, since if a specific UID was
+ * requested and generated an error, the user is
+ * more likely to want to stop and address the
+ * issue.
+ */
+ fprintf (stderr,
+ _("%s: Encountered error attempting to use "
+ "preferred UID: %s\n"),
+ Prog, strerror (result));
+ return -1;
+ }
+ }
+
+ /*
+ * Search the entire passwd file,
+ * looking for the next unused value.
+ *
+ * We first check the local database with pw_rewind/pw_next to find
+ * all local values that are in use.
+ *
+ * We then compare the next free value to all databases (local and
+ * remote) and iterate until we find a free one. If there are free
+ * values beyond the lowest (system users) or highest (non-system
+ * users), we will prefer those and avoid potentially reclaiming a
+ * deleted user (which can be a security issue, since it may grant
+ * access to files belonging to that former user).
+ *
+ * If there are no UIDs available at the end of the search, we will
+ * have no choice but to iterate through the range looking for gaps.
+ *
+ */
+
+ /* Create an array to hold all of the discovered UIDs */
+ used_uids = malloc (sizeof (bool) * (uid_max +1));
+ if (NULL == used_uids) {
+ fprintf (stderr,
+ _("%s: failed to allocate memory: %s\n"),
+ Prog, strerror (errno));
+ return -1;
+ }
+ memset (used_uids, false, sizeof (bool) * (uid_max + 1));
+
+ /* First look for the lowest and highest value in the local database */
+ (void) pw_rewind ();
+ highest_found = uid_min;
+ lowest_found = uid_max;
+ while ((pwd = pw_next ()) != NULL) {
+ /*
+ * Does this entry have a lower UID than the lowest we've found
+ * so far?
+ */
+ if ((pwd->pw_uid <= lowest_found) && (pwd->pw_uid >= uid_min)) {
+ lowest_found = pwd->pw_uid - 1;
+ }
+
+ /*
+ * Does this entry have a higher UID than the highest we've found
+ * so far?
+ */
+ if ((pwd->pw_uid >= highest_found) && (pwd->pw_uid <= uid_max)) {
+ highest_found = pwd->pw_uid + 1;
+ }
+
+ /* create index of used UIDs */
+ if (pwd->pw_uid >= uid_min
+ && pwd->pw_uid <= uid_max) {
+
+ used_uids[pwd->pw_uid] = true;
+ }
+ }
+
+ if (sys_user) {
+ /*
+ * For system users, we want to start from the
+ * top of the range and work downwards.
+ */
+
+ /*
+ * At the conclusion of the pw_next() search, we will either
+ * have a presumed-free UID or we will be at UID_MIN - 1.
+ */
+ if (lowest_found < uid_min) {
+ /*
+ * In this case, an UID is in use at UID_MIN.
+ *
+ * We will reset the search to UID_MAX and proceed down
+ * through all the UIDs (skipping those we detected with
+ * used_uids) for a free one. It is a known issue that
+ * this may result in reusing a previously-deleted UID,
+ * so administrators should be instructed to use this
+ * auto-detection with care (and prefer to assign UIDs
+ * explicitly).
+ */
+ lowest_found = uid_max;
+ }
+
+ /* Search through all of the IDs in the range */
+ for (id = lowest_found; id >= uid_min; id--) {
+ result = check_uid (id, uid_min, uid_max, used_uids);
+ if (result == 0) {
+ /* This UID is available. Return it. */
+ *uid = id;
+ free (used_uids);
+ return 0;
+ } else if (result == EEXIST) {
+ /* This UID is in use, we'll continue to the next */
+ } else {
+ /*
+ * An unexpected error occurred.
+ *
+ * Only report it the first time to avoid spamming
+ * the logs
+ *
+ */
+ if (!nospam) {
+ fprintf (stderr,
+ _("%s: Can't get unique system UID (%s). "
+ "Suppressing additional messages.\n"),
+ Prog, strerror (result));
+ SYSLOG ((LOG_ERR,
+ "Error checking available UIDs: %s",
+ strerror (result)));
+ nospam = 1;
+ }
+ /*
+ * We will continue anyway. Hopefully a later UID
+ * will work properly.
+ */
+ }
+ }
+
+ /*
+ * If we get all the way through the loop, try again from UID_MAX,
+ * unless that was where we previously started. (NOTE: the worst-case
+ * scenario here is that we will run through (UID_MAX - UID_MIN - 1)
+ * cycles *again* if we fall into this case with lowest_found as
+ * UID_MAX - 1, all users in the range in use and maintained by
+ * network services such as LDAP.)
+ */
+ if (lowest_found != uid_max) {
+ for (id = uid_max; id >= uid_min; id--) {
+ result = check_uid (id, uid_min, uid_max, used_uids);
+ if (result == 0) {
+ /* This UID is available. Return it. */
+ *uid = id;
+ free (used_uids);
+ return 0;
+ } else if (result == EEXIST) {
+ /* This UID is in use, we'll continue to the next */
+ } else {
+ /*
+ * An unexpected error occurred.
+ *
+ * Only report it the first time to avoid spamming
+ * the logs
+ *
+ */
+ if (!nospam) {
+ fprintf (stderr,
+ _("%s: Can't get unique system UID (%s). "
+ "Suppressing additional messages.\n"),
+ Prog, strerror (result));
+ SYSLOG((LOG_ERR,
+ "Error checking available UIDs: %s",
+ strerror (result)));
+ nospam = 1;
+ }
+ /*
+ * We will continue anyway. Hopefully a later UID
+ * will work properly.
+ */
+ }
+ }
+ }
+ } else { /* !sys_user */
+ /*
+ * For non-system users, we want to start from the
+ * bottom of the range and work upwards.
+ */
+
+ /*
+ * At the conclusion of the pw_next() search, we will either
+ * have a presumed-free UID or we will be at UID_MAX + 1.
+ */
+ if (highest_found > uid_max) {
+ /*
+ * In this case, a UID is in use at UID_MAX.
+ *
+ * We will reset the search to UID_MIN and proceed up
+ * through all the UIDs (skipping those we detected with
+ * used_uids) for a free one. It is a known issue that
+ * this may result in reusing a previously-deleted UID,
+ * so administrators should be instructed to use this
+ * auto-detection with care (and prefer to assign UIDs
+ * explicitly).
+ */
+ highest_found = uid_min;
+ }
+
+ /* Search through all of the IDs in the range */
+ for (id = highest_found; id <= uid_max; id++) {
+ result = check_uid (id, uid_min, uid_max, used_uids);
+ if (result == 0) {
+ /* This UID is available. Return it. */
+ *uid = id;
+ free (used_uids);
+ return 0;
+ } else if (result == EEXIST) {
+ /* This UID is in use, we'll continue to the next */
+ } else {
+ /*
+ * An unexpected error occurred.
+ *
+ * Only report it the first time to avoid spamming
+ * the logs
+ *
+ */
+ if (!nospam) {
+ fprintf (stderr,
+ _("%s: Can't get unique UID (%s). "
+ "Suppressing additional messages.\n"),
+ Prog, strerror (result));
+ SYSLOG ((LOG_ERR,
+ "Error checking available UIDs: %s",
+ strerror (result)));
+ nospam = 1;
+ }
+ /*
+ * We will continue anyway. Hopefully a later UID
+ * will work properly.
+ */
+ }
+ }
+
+ /*
+ * If we get all the way through the loop, try again from UID_MIN,
+ * unless that was where we previously started. (NOTE: the worst-case
+ * scenario here is that we will run through (UID_MAX - UID_MIN - 1)
+ * cycles *again* if we fall into this case with highest_found as
+ * UID_MIN + 1, all users in the range in use and maintained by
+ * network services such as LDAP.)
+ */
+ if (highest_found != uid_min) {
+ for (id = uid_min; id <= uid_max; id++) {
+ result = check_uid (id, uid_min, uid_max, used_uids);
+ if (result == 0) {
+ /* This UID is available. Return it. */
+ *uid = id;
+ free (used_uids);
+ return 0;
+ } else if (result == EEXIST) {
+ /* This UID is in use, we'll continue to the next */
+ } else {
+ /*
+ * An unexpected error occurred.
+ *
+ * Only report it the first time to avoid spamming
+ * the logs
+ *
+ */
+ if (!nospam) {
+ fprintf (stderr,
+ _("%s: Can't get unique UID (%s). "
+ "Suppressing additional messages.\n"),
+ Prog, strerror (result));
+ SYSLOG ((LOG_ERR,
+ "Error checking available UIDs: %s",
+ strerror (result)));
+ nospam = 1;
+ }
+ /*
+ * We will continue anyway. Hopefully a later UID
+ * will work properly.
+ */
+ }
+ }
+ }
+ }
+
+ /* The code reached here and found no available IDs in the range */
+ fprintf (stderr,
+ _("%s: Can't get unique UID (no more available UIDs)\n"),
+ Prog);
+ SYSLOG ((LOG_WARN, "no more available UIDs on the system"));
+ free (used_uids);
+ return -1;
+}
+
diff --git a/libmisc/getdate.c b/libmisc/getdate.c
new file mode 100644
index 0000000..b36188f
--- /dev/null
+++ b/libmisc/getdate.c
@@ -0,0 +1,2676 @@
+/* A Bison parser, made by GNU Bison 3.4.1. */
+
+/* Bison implementation for Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation,
+ Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+ simplifying the original so-called "semantic" parser. */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+ infringing on user name space. This should be done even for local
+ variables, as they might otherwise be expanded by user macros.
+ There are some unavoidable exceptions within include files to
+ define necessary library symbols; they are noted "INFRINGES ON
+ USER NAME SPACE" below. */
+
+/* Undocumented macros, especially those whose name start with YY_,
+ are private implementation details. Do not rely on them. */
+
+/* Identify Bison output. */
+#define YYBISON 1
+
+/* Bison version. */
+#define YYBISON_VERSION "3.4.1"
+
+/* Skeleton name. */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers. */
+#define YYPURE 0
+
+/* Push parsers. */
+#define YYPUSH 0
+
+/* Pull parsers. */
+#define YYPULL 1
+
+
+
+
+/* First part of user prologue. */
+#line 1 "getdate.y"
+
+/*
+** Originally written by Steven M. Bellovin <smb@research.att.com> while
+** at the University of North Carolina at Chapel Hill. Later tweaked by
+** a couple of people on Usenet. Completely overhauled by Rich $alz
+** <rsalz@bbn.com> and Jim Berets <jberets@bbn.com> in August, 1990;
+**
+** This grammar has 13 shift/reduce conflicts.
+**
+** This code is in the public domain and has no copyright.
+*/
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+# ifdef FORCE_ALLOCA_H
+# include <alloca.h>
+# endif
+#endif
+
+/* Since the code of getdate.y is not included in the Emacs executable
+ itself, there is no need to #define static in this file. Even if
+ the code were included in the Emacs executable, it probably
+ wouldn't do any harm to #undef it here; this will only cause
+ problems if we try to write to a static variable, which I don't
+ think this code needs to do. */
+#ifdef emacs
+# undef static
+#endif
+
+#include <stdio.h>
+#include <ctype.h>
+#include <time.h>
+
+#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
+# define IN_CTYPE_DOMAIN(c) 1
+#else
+# define IN_CTYPE_DOMAIN(c) isascii(c)
+#endif
+
+#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c))
+#define ISALPHA(c) (IN_CTYPE_DOMAIN (c) && isalpha (c))
+#define ISUPPER(c) (IN_CTYPE_DOMAIN (c) && isupper (c))
+#define ISDIGIT_LOCALE(c) (IN_CTYPE_DOMAIN (c) && isdigit (c))
+
+/* ISDIGIT differs from ISDIGIT_LOCALE, as follows:
+ - Its arg may be any int or unsigned int; it need not be an unsigned char.
+ - It's guaranteed to evaluate its argument exactly once.
+ - It's typically faster.
+ Posix 1003.2-1992 section 2.5.2.1 page 50 lines 1556-1558 says that
+ only '0' through '9' are digits. Prefer ISDIGIT to ISDIGIT_LOCALE unless
+ it's important to use the locale's definition of `digit' even when the
+ host does not conform to Posix. */
+#define ISDIGIT(c) ((unsigned) (c) - '0' <= 9)
+
+#include "getdate.h"
+
+#if defined (STDC_HEADERS)
+# include <string.h>
+#endif
+
+/* Some old versions of bison generate parsers that use bcopy.
+ That loses on systems that don't provide the function, so we have
+ to redefine it here. */
+#if !defined (HAVE_BCOPY) && defined (HAVE_MEMCPY) && !defined (bcopy)
+# define bcopy(from, to, len) memcpy ((to), (from), (len))
+#endif
+
+/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
+ 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,
+ then those parser generators need to be fixed instead of adding those
+ names to this list. */
+
+#define yymaxdepth gd_maxdepth
+#define yyparse gd_parse
+#define yylex gd_lex
+#define yyerror gd_error
+#define yylval gd_lval
+#define yychar gd_char
+#define yydebug gd_debug
+#define yypact gd_pact
+#define yyr1 gd_r1
+#define yyr2 gd_r2
+#define yydef gd_def
+#define yychk gd_chk
+#define yypgo gd_pgo
+#define yyact gd_act
+#define yyexca gd_exca
+#define yyerrflag gd_errflag
+#define yynerrs gd_nerrs
+#define yyps gd_ps
+#define yypv gd_pv
+#define yys gd_s
+#define yy_yys gd_yys
+#define yystate gd_state
+#define yytmp gd_tmp
+#define yyv gd_v
+#define yy_yyv gd_yyv
+#define yyval gd_val
+#define yylloc gd_lloc
+#define yyreds gd_reds /* With YYDEBUG defined */
+#define yytoks gd_toks /* With YYDEBUG defined */
+#define yylhs gd_yylhs
+#define yylen gd_yylen
+#define yydefred gd_yydefred
+#define yydgoto gd_yydgoto
+#define yysindex gd_yysindex
+#define yyrindex gd_yyrindex
+#define yygindex gd_yygindex
+#define yytable gd_yytable
+#define yycheck gd_yycheck
+
+static int yylex (void);
+static int yyerror (const char *s);
+
+#define EPOCH 1970
+#define HOUR(x) ((x) * 60)
+
+#define MAX_BUFF_LEN 128 /* size of buffer to read the date into */
+
+/*
+** An entry in the lexical lookup table.
+*/
+typedef struct _TABLE {
+ const char *name;
+ int type;
+ int value;
+} TABLE;
+
+
+/*
+** Meridian: am, pm, or 24-hour style.
+*/
+typedef enum _MERIDIAN {
+ MERam, MERpm, MER24
+} MERIDIAN;
+
+
+/*
+** Global variables. We could get rid of most of these by using a good
+** union as the yacc stack. (This routine was originally written before
+** yacc had the %union construct.) Maybe someday; right now we only use
+** the %union very rarely.
+*/
+static const char *yyInput;
+static int yyDayOrdinal;
+static int yyDayNumber;
+static int yyHaveDate;
+static int yyHaveDay;
+static int yyHaveRel;
+static int yyHaveTime;
+static int yyHaveZone;
+static int yyTimezone;
+static int yyDay;
+static int yyHour;
+static int yyMinutes;
+static int yyMonth;
+static int yySeconds;
+static int yyYear;
+static MERIDIAN yyMeridian;
+static int yyRelDay;
+static int yyRelHour;
+static int yyRelMinutes;
+static int yyRelMonth;
+static int yyRelSeconds;
+static int yyRelYear;
+
+
+#line 241 "getdate.c"
+
+# ifndef YY_NULLPTR
+# if defined __cplusplus
+# if 201103L <= __cplusplus
+# define YY_NULLPTR nullptr
+# else
+# define YY_NULLPTR 0
+# endif
+# else
+# define YY_NULLPTR ((void*)0)
+# endif
+# endif
+
+/* Enabling verbose error messages. */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+
+/* Debug traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int yydebug;
+#endif
+
+/* Token type. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ enum yytokentype
+ {
+ tAGO = 258,
+ tDAY = 259,
+ tDAY_UNIT = 260,
+ tDAYZONE = 261,
+ tDST = 262,
+ tHOUR_UNIT = 263,
+ tID = 264,
+ tMERIDIAN = 265,
+ tMINUTE_UNIT = 266,
+ tMONTH = 267,
+ tMONTH_UNIT = 268,
+ tSEC_UNIT = 269,
+ tSNUMBER = 270,
+ tUNUMBER = 271,
+ tYEAR_UNIT = 272,
+ tZONE = 273
+ };
+#endif
+/* Tokens. */
+#define tAGO 258
+#define tDAY 259
+#define tDAY_UNIT 260
+#define tDAYZONE 261
+#define tDST 262
+#define tHOUR_UNIT 263
+#define tID 264
+#define tMERIDIAN 265
+#define tMINUTE_UNIT 266
+#define tMONTH 267
+#define tMONTH_UNIT 268
+#define tSEC_UNIT 269
+#define tSNUMBER 270
+#define tUNUMBER 271
+#define tYEAR_UNIT 272
+#define tZONE 273
+
+/* Value type. */
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+union YYSTYPE
+{
+#line 172 "getdate.y"
+
+ int Number;
+ enum _MERIDIAN Meridian;
+
+#line 322 "getdate.c"
+
+};
+typedef union YYSTYPE YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+extern YYSTYPE yylval;
+
+int yyparse (void);
+
+
+
+
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#else
+typedef signed char yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+# define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+# define YYSIZE_T size_t
+# elif ! defined YYSIZE_T
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# else
+# define YYSIZE_T unsigned
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+# if ENABLE_NLS
+# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+# define YY_(Msgid) dgettext ("bison-runtime", Msgid)
+# endif
+# endif
+# ifndef YY_
+# define YY_(Msgid) Msgid
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE
+# if (defined __GNUC__ \
+ && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \
+ || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
+# define YY_ATTRIBUTE(Spec) __attribute__(Spec)
+# else
+# define YY_ATTRIBUTE(Spec) /* empty */
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE_PURE
+# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__))
+#endif
+
+#ifndef YY_ATTRIBUTE_UNUSED
+# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
+#endif
+
+/* Suppress unused-variable warnings by "using" E. */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(E) ((void) (E))
+#else
+# define YYUSE(E) /* empty */
+#endif
+
+#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+/* Suppress an incorrect diagnostic about yylval being uninitialized. */
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
+ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+ _Pragma ("GCC diagnostic pop")
+#else
+# define YY_INITIAL_VALUE(Value) Value
+#endif
+#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END
+#endif
+#ifndef YY_INITIAL_VALUE
+# define YY_INITIAL_VALUE(Value) /* Nothing. */
+#endif
+
+
+#define YY_ASSERT(E) ((void) (0 && (E)))
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols. */
+
+# ifdef YYSTACK_USE_ALLOCA
+# if YYSTACK_USE_ALLOCA
+# ifdef __GNUC__
+# define YYSTACK_ALLOC __builtin_alloca
+# elif defined __BUILTIN_VA_ARG_INCR
+# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+# elif defined _AIX
+# define YYSTACK_ALLOC __alloca
+# elif defined _MSC_VER
+# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+# define alloca _alloca
+# else
+# define YYSTACK_ALLOC alloca
+# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+ /* Use EXIT_SUCCESS as a witness for stdlib.h. */
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+# endif
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's 'empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+# ifndef YYSTACK_ALLOC_MAXIMUM
+ /* The OS might guarantee only one guard page at the bottom of the stack,
+ and a page size can be as small as 4096 bytes. So we cannot safely
+ invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
+ to allow for a few compiler-allocated temporary stack slots. */
+# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+# endif
+# else
+# define YYSTACK_ALLOC YYMALLOC
+# define YYSTACK_FREE YYFREE
+# ifndef YYSTACK_ALLOC_MAXIMUM
+# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+# endif
+# if (defined __cplusplus && ! defined EXIT_SUCCESS \
+ && ! ((defined YYMALLOC || defined malloc) \
+ && (defined YYFREE || defined free)))
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+# endif
+# endif
+# ifndef YYMALLOC
+# define YYMALLOC malloc
+# if ! defined malloc && ! defined EXIT_SUCCESS
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# ifndef YYFREE
+# define YYFREE free
+# if ! defined free && ! defined EXIT_SUCCESS
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+ && (! defined __cplusplus \
+ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member. */
+union yyalloc
+{
+ yytype_int16 yyss_alloc;
+ YYSTYPE yyvs_alloc;
+};
+
+/* The size of the maximum gap between one aligned stack and the next. */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+# define YYSTACK_BYTES(N) \
+ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+ + YYSTACK_GAP_MAXIMUM)
+
+# define YYCOPY_NEEDED 1
+
+/* Relocate STACK from its old location to the new one. The
+ local variables YYSIZE and YYSTACKSIZE give the old and new number of
+ elements in the stack, and YYPTR gives the new location of the
+ stack. Advance YYPTR to a properly aligned location for the next
+ stack. */
+# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
+ Stack = &yyptr->Stack_alloc; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (0)
+
+#endif
+
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from SRC to DST. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if defined __GNUC__ && 1 < __GNUC__
+# define YYCOPY(Dst, Src, Count) \
+ __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
+# else
+# define YYCOPY(Dst, Src, Count) \
+ do \
+ { \
+ YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (Dst)[yyi] = (Src)[yyi]; \
+ } \
+ while (0)
+# endif
+# endif
+#endif /* !YYCOPY_NEEDED */
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL 2
+/* YYLAST -- Last index in YYTABLE. */
+#define YYLAST 50
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS 22
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS 11
+/* YYNRULES -- Number of rules. */
+#define YYNRULES 51
+/* YYNSTATES -- Number of states. */
+#define YYNSTATES 61
+
+#define YYUNDEFTOK 2
+#define YYMAXUTOK 273
+
+/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
+ as returned by yylex, with out-of-bounds checking. */
+#define YYTRANSLATE(YYX) \
+ ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
+ as returned by yylex. */
+static const yytype_uint8 yytranslate[] =
+{
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 20, 2, 2, 21, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 19, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18
+};
+
+#if YYDEBUG
+ /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
+static const yytype_uint16 yyrline[] =
+{
+ 0, 188, 188, 189, 192, 195, 198, 201, 204, 207,
+ 210, 216, 222, 231, 237, 249, 252, 256, 261, 265,
+ 269, 275, 279, 297, 303, 309, 313, 318, 322, 329,
+ 337, 340, 343, 346, 349, 352, 355, 358, 361, 364,
+ 367, 370, 373, 376, 379, 382, 385, 388, 391, 396,
+ 430, 433
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || 0
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+ First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+static const char *const yytname[] =
+{
+ "$end", "error", "$undefined", "tAGO", "tDAY", "tDAY_UNIT", "tDAYZONE",
+ "tDST", "tHOUR_UNIT", "tID", "tMERIDIAN", "tMINUTE_UNIT", "tMONTH",
+ "tMONTH_UNIT", "tSEC_UNIT", "tSNUMBER", "tUNUMBER", "tYEAR_UNIT",
+ "tZONE", "':'", "','", "'/'", "$accept", "spec", "item", "time", "zone",
+ "day", "date", "rel", "relunit", "number", "o_merid", YY_NULLPTR
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[NUM] -- (External) token number corresponding to the
+ (internal) symbol number NUM (which must be that of a token). */
+static const yytype_uint16 yytoknum[] =
+{
+ 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
+ 265, 266, 267, 268, 269, 270, 271, 272, 273, 58,
+ 44, 47
+};
+# endif
+
+#define YYPACT_NINF -20
+
+#define yypact_value_is_default(Yystate) \
+ (!!((Yystate) == (-20)))
+
+#define YYTABLE_NINF -1
+
+#define yytable_value_is_error(Yytable_value) \
+ 0
+
+ /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+static const yytype_int8 yypact[] =
+{
+ -20, 0, -20, -19, -20, -20, -20, -20, -13, -20,
+ -20, 30, 15, -20, 14, -20, -20, -20, -20, -20,
+ -20, 19, -20, -20, 4, -20, -20, -20, -20, -20,
+ -20, -20, -20, -20, -20, -20, -6, -20, -20, 16,
+ -20, 17, 23, -20, -20, 24, -20, -20, -20, 27,
+ 28, -20, -20, -20, 29, -20, 32, -8, -20, -20,
+ -20
+};
+
+ /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+ Performed when YYTABLE does not specify something else to do. Zero
+ means the default is an error. */
+static const yytype_uint8 yydefact[] =
+{
+ 2, 0, 1, 18, 39, 16, 42, 45, 0, 36,
+ 48, 0, 49, 33, 15, 3, 4, 5, 7, 6,
+ 8, 30, 9, 19, 25, 38, 41, 44, 35, 47,
+ 32, 20, 37, 40, 10, 43, 27, 34, 46, 0,
+ 31, 0, 0, 17, 29, 0, 24, 28, 23, 50,
+ 21, 26, 51, 12, 0, 11, 0, 50, 22, 14,
+ 13
+};
+
+ /* YYPGOTO[NTERM-NUM]. */
+static const yytype_int8 yypgoto[] =
+{
+ -20, -20, -20, -20, -20, -20, -20, -20, -20, -20,
+ -7
+};
+
+ /* YYDEFGOTO[NTERM-NUM]. */
+static const yytype_int8 yydefgoto[] =
+{
+ -1, 1, 15, 16, 17, 18, 19, 20, 21, 22,
+ 55
+};
+
+ /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule whose
+ number is the opposite. If YYTABLE_NINF, syntax error. */
+static const yytype_uint8 yytable[] =
+{
+ 2, 23, 52, 24, 3, 4, 5, 59, 6, 46,
+ 47, 7, 8, 9, 10, 11, 12, 13, 14, 31,
+ 32, 43, 44, 33, 45, 34, 35, 36, 37, 38,
+ 39, 48, 40, 49, 41, 25, 42, 52, 26, 50,
+ 51, 27, 53, 28, 29, 57, 54, 30, 58, 56,
+ 60
+};
+
+static const yytype_uint8 yycheck[] =
+{
+ 0, 20, 10, 16, 4, 5, 6, 15, 8, 15,
+ 16, 11, 12, 13, 14, 15, 16, 17, 18, 4,
+ 5, 7, 3, 8, 20, 10, 11, 12, 13, 14,
+ 15, 15, 17, 16, 19, 5, 21, 10, 8, 16,
+ 16, 11, 15, 13, 14, 16, 19, 17, 16, 21,
+ 57
+};
+
+ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ symbol of state STATE-NUM. */
+static const yytype_uint8 yystos[] =
+{
+ 0, 23, 0, 4, 5, 6, 8, 11, 12, 13,
+ 14, 15, 16, 17, 18, 24, 25, 26, 27, 28,
+ 29, 30, 31, 20, 16, 5, 8, 11, 13, 14,
+ 17, 4, 5, 8, 10, 11, 12, 13, 14, 15,
+ 17, 19, 21, 7, 3, 20, 15, 16, 15, 16,
+ 16, 16, 10, 15, 19, 32, 21, 16, 16, 15,
+ 32
+};
+
+ /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const yytype_uint8 yyr1[] =
+{
+ 0, 22, 23, 23, 24, 24, 24, 24, 24, 24,
+ 25, 25, 25, 25, 25, 26, 26, 26, 27, 27,
+ 27, 28, 28, 28, 28, 28, 28, 28, 28, 29,
+ 29, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 31,
+ 32, 32
+};
+
+ /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
+static const yytype_uint8 yyr2[] =
+{
+ 0, 2, 0, 2, 1, 1, 1, 1, 1, 1,
+ 2, 4, 4, 6, 6, 1, 1, 2, 1, 2,
+ 2, 3, 5, 3, 3, 2, 4, 2, 3, 2,
+ 1, 2, 2, 1, 2, 2, 1, 2, 2, 1,
+ 2, 2, 1, 2, 2, 1, 2, 2, 1, 1,
+ 0, 1
+};
+
+
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+#define YYEMPTY (-2)
+#define YYEOF 0
+
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrorlab
+
+
+#define YYRECOVERING() (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value) \
+ do \
+ if (yychar == YYEMPTY) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ YYPOPSTACK (yylen); \
+ yystate = *yyssp; \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror (YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+ while (0)
+
+/* Error token number */
+#define YYTERROR 1
+#define YYERRCODE 256
+
+
+
+/* Enable debugging if requested. */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+# define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (0)
+
+/* This macro is provided for backward compatibility. */
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif
+
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
+do { \
+ if (yydebug) \
+ { \
+ YYFPRINTF (stderr, "%s ", Title); \
+ yy_symbol_print (stderr, \
+ Type, Value); \
+ YYFPRINTF (stderr, "\n"); \
+ } \
+} while (0)
+
+
+/*-----------------------------------.
+| Print this symbol's value on YYO. |
+`-----------------------------------*/
+
+static void
+yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
+{
+ FILE *yyoutput = yyo;
+ YYUSE (yyoutput);
+ if (!yyvaluep)
+ return;
+# ifdef YYPRINT
+ if (yytype < YYNTOKENS)
+ YYPRINT (yyo, yytoknum[yytype], *yyvaluep);
+# endif
+ YYUSE (yytype);
+}
+
+
+/*---------------------------.
+| Print this symbol on YYO. |
+`---------------------------*/
+
+static void
+yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
+{
+ YYFPRINTF (yyo, "%s %s (",
+ yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
+
+ yy_symbol_value_print (yyo, yytype, yyvaluep);
+ YYFPRINTF (yyo, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included). |
+`------------------------------------------------------------------*/
+
+static void
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+{
+ YYFPRINTF (stderr, "Stack now");
+ for (; yybottom <= yytop; yybottom++)
+ {
+ int yybot = *yybottom;
+ YYFPRINTF (stderr, " %d", yybot);
+ }
+ YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top) \
+do { \
+ if (yydebug) \
+ yy_stack_print ((Bottom), (Top)); \
+} while (0)
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced. |
+`------------------------------------------------*/
+
+static void
+yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
+{
+ unsigned long yylno = yyrline[yyrule];
+ int yynrhs = yyr2[yyrule];
+ int yyi;
+ YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+ yyrule - 1, yylno);
+ /* The symbols being reduced. */
+ for (yyi = 0; yyi < yynrhs; yyi++)
+ {
+ YYFPRINTF (stderr, " $%d = ", yyi + 1);
+ yy_symbol_print (stderr,
+ yystos[yyssp[yyi + 1 - yynrhs]],
+ &yyvsp[(yyi + 1) - (yynrhs)]
+ );
+ YYFPRINTF (stderr, "\n");
+ }
+}
+
+# define YY_REDUCE_PRINT(Rule) \
+do { \
+ if (yydebug) \
+ yy_reduce_print (yyssp, yyvsp, Rule); \
+} while (0)
+
+/* Nonzero means print parse trace. It is left uninitialized so that
+ multiple parsers can coexist. */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks. */
+#ifndef YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+ if the built-in stack extension method is used).
+
+ Do not make this value too large; the results are undefined if
+ YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+ evaluated with infinite-precision integer arithmetic. */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+# if defined __GLIBC__ && defined _STRING_H
+# define yystrlen strlen
+# else
+/* Return the length of YYSTR. */
+static YYSIZE_T
+yystrlen (const char *yystr)
+{
+ YYSIZE_T yylen;
+ for (yylen = 0; yystr[yylen]; yylen++)
+ continue;
+ return yylen;
+}
+# endif
+# endif
+
+# ifndef yystpcpy
+# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+# define yystpcpy stpcpy
+# else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+ YYDEST. */
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+{
+ char *yyd = yydest;
+ const char *yys = yysrc;
+
+ while ((*yyd++ = *yys++) != '\0')
+ continue;
+
+ return yyd - 1;
+}
+# endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+ quotes and backslashes, so that it's suitable for yyerror. The
+ heuristic is that double-quoting is unnecessary unless the string
+ contains an apostrophe, a comma, or backslash (other than
+ backslash-backslash). YYSTR is taken from yytname. If YYRES is
+ null, do not copy; instead, return the length of what the result
+ would have been. */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+ if (*yystr == '"')
+ {
+ YYSIZE_T yyn = 0;
+ char const *yyp = yystr;
+
+ for (;;)
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ else
+ goto append;
+
+ append:
+ default:
+ if (yyres)
+ yyres[yyn] = *yyp;
+ yyn++;
+ break;
+
+ case '"':
+ if (yyres)
+ yyres[yyn] = '\0';
+ return yyn;
+ }
+ do_not_strip_quotes: ;
+ }
+
+ if (! yyres)
+ return yystrlen (yystr);
+
+ return (YYSIZE_T) (yystpcpy (yyres, yystr) - yyres);
+}
+# endif
+
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+ about the unexpected token YYTOKEN for the state stack whose top is
+ YYSSP.
+
+ Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is
+ not large enough to hold the message. In that case, also set
+ *YYMSG_ALLOC to the required number of bytes. Return 2 if the
+ required number of bytes is too large to store. */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+ yytype_int16 *yyssp, int yytoken)
+{
+ YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
+ YYSIZE_T yysize = yysize0;
+ enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+ /* Internationalized format string. */
+ const char *yyformat = YY_NULLPTR;
+ /* Arguments of yyformat. */
+ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ /* Number of reported tokens (one for the "unexpected", one per
+ "expected"). */
+ int yycount = 0;
+
+ /* There are many possibilities here to consider:
+ - If this state is a consistent state with a default action, then
+ the only way this function was invoked is if the default action
+ is an error action. In that case, don't check for expected
+ tokens because there are none.
+ - The only way there can be no lookahead present (in yychar) is if
+ this state is a consistent state with a default action. Thus,
+ detecting the absence of a lookahead is sufficient to determine
+ that there is no unexpected or expected token to report. In that
+ case, just report a simple "syntax error".
+ - Don't assume there isn't a lookahead just because this state is a
+ consistent state with a default action. There might have been a
+ previous inconsistent state, consistent state with a non-default
+ action, or user semantic action that manipulated yychar.
+ - Of course, the expected token list depends on states to have
+ correct lookahead information, and it depends on the parser not
+ to perform extra reductions after fetching a lookahead from the
+ scanner and before detecting a syntax error. Thus, state merging
+ (from LALR or IELR) and default reductions corrupt the expected
+ token list. However, the list is correct for canonical LR with
+ one exception: it will still contain any token that will not be
+ accepted due to an error action in a later state.
+ */
+ if (yytoken != YYEMPTY)
+ {
+ int yyn = yypact[*yyssp];
+ yyarg[yycount++] = yytname[yytoken];
+ if (!yypact_value_is_default (yyn))
+ {
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. In other words, skip the first -YYN actions for
+ this state because they are default actions. */
+ int yyxbegin = yyn < 0 ? -yyn : 0;
+ /* Stay within bounds of both yycheck and yytname. */
+ int yychecklim = YYLAST - yyn + 1;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ int yyx;
+
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+ && !yytable_value_is_error (yytable[yyx + yyn]))
+ {
+ if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+ {
+ yycount = 1;
+ yysize = yysize0;
+ break;
+ }
+ yyarg[yycount++] = yytname[yyx];
+ {
+ YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
+ if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
+ yysize = yysize1;
+ else
+ return 2;
+ }
+ }
+ }
+ }
+
+ switch (yycount)
+ {
+# define YYCASE_(N, S) \
+ case N: \
+ yyformat = S; \
+ break
+ default: /* Avoid compiler warnings. */
+ YYCASE_(0, YY_("syntax error"));
+ YYCASE_(1, YY_("syntax error, unexpected %s"));
+ YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+ YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+ YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+ YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
+ }
+
+ {
+ YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
+ if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
+ yysize = yysize1;
+ else
+ return 2;
+ }
+
+ if (*yymsg_alloc < yysize)
+ {
+ *yymsg_alloc = 2 * yysize;
+ if (! (yysize <= *yymsg_alloc
+ && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+ *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+ return 1;
+ }
+
+ /* Avoid sprintf, as that infringes on the user's name space.
+ Don't have undefined behavior even if the translation
+ produced a string with the wrong number of "%s"s. */
+ {
+ char *yyp = *yymsg;
+ int yyi = 0;
+ while ((*yyp = *yyformat) != '\0')
+ if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+ {
+ yyp += yytnamerr (yyp, yyarg[yyi++]);
+ yyformat += 2;
+ }
+ else
+ {
+ yyp++;
+ yyformat++;
+ }
+ }
+ return 0;
+}
+#endif /* YYERROR_VERBOSE */
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol. |
+`-----------------------------------------------*/
+
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+{
+ YYUSE (yyvaluep);
+ if (!yymsg)
+ yymsg = "Deleting";
+ YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ YYUSE (yytype);
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
+}
+
+
+
+
+/* The lookahead symbol. */
+int yychar;
+
+/* The semantic value of the lookahead symbol. */
+YYSTYPE yylval;
+/* Number of syntax errors so far. */
+int yynerrs;
+
+
+/*----------.
+| yyparse. |
+`----------*/
+
+int
+yyparse (void)
+{
+ int yystate;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+
+ /* The stacks and their tools:
+ 'yyss': related to states.
+ 'yyvs': related to semantic values.
+
+ Refer to the stacks through separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+ /* The state stack. */
+ yytype_int16 yyssa[YYINITDEPTH];
+ yytype_int16 *yyss;
+ yytype_int16 *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs;
+ YYSTYPE *yyvsp;
+
+ YYSIZE_T yystacksize;
+
+ int yyn;
+ int yyresult;
+ /* Lookahead token as an internal (translated) token number. */
+ int yytoken = 0;
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+
+#if YYERROR_VERBOSE
+ /* Buffer for error messages, and its allocated size. */
+ char yymsgbuf[128];
+ char *yymsg = yymsgbuf;
+ YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
+
+ /* The number of symbols on the RHS of the reduced rule.
+ Keep to zero when no symbol should be popped. */
+ int yylen = 0;
+
+ yyssp = yyss = yyssa;
+ yyvsp = yyvs = yyvsa;
+ yystacksize = YYINITDEPTH;
+
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yystate = 0;
+ yyerrstatus = 0;
+ yynerrs = 0;
+ yychar = YYEMPTY; /* Cause a token to be read. */
+ goto yysetstate;
+
+
+/*------------------------------------------------------------.
+| yynewstate -- push a new state, which is found in yystate. |
+`------------------------------------------------------------*/
+yynewstate:
+ /* In all cases, when you get here, the value and location stacks
+ have just been pushed. So pushing a state here evens the stacks. */
+ yyssp++;
+
+
+/*--------------------------------------------------------------------.
+| yynewstate -- set current state (the top of the stack) to yystate. |
+`--------------------------------------------------------------------*/
+yysetstate:
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+ YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
+ *yyssp = (yytype_int16) yystate;
+
+ if (yyss + yystacksize - 1 <= yyssp)
+#if !defined yyoverflow && !defined YYSTACK_RELOCATE
+ goto yyexhaustedlab;
+#else
+ {
+ /* Get the current used size of the three stacks, in elements. */
+ YYSIZE_T yysize = (YYSIZE_T) (yyssp - yyss + 1);
+
+# if defined yyoverflow
+ {
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+ yytype_int16 *yyss1 = yyss;
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+ be undefined if yyoverflow is a macro. */
+ yyoverflow (YY_("memory exhausted"),
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+ &yystacksize);
+ yyss = yyss1;
+ yyvs = yyvs1;
+ }
+# else /* defined YYSTACK_RELOCATE */
+ /* Extend the stack our own way. */
+ if (YYMAXDEPTH <= yystacksize)
+ goto yyexhaustedlab;
+ yystacksize *= 2;
+ if (YYMAXDEPTH < yystacksize)
+ yystacksize = YYMAXDEPTH;
+
+ {
+ yytype_int16 *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyexhaustedlab;
+ YYSTACK_RELOCATE (yyss_alloc, yyss);
+ YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+# undef YYSTACK_RELOCATE
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
+ }
+# endif
+
+ yyssp = yyss + yysize - 1;
+ yyvsp = yyvs + yysize - 1;
+
+ YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+ (unsigned long) yystacksize));
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ YYABORT;
+ }
+#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
+
+ if (yystate == YYFINAL)
+ YYACCEPT;
+
+ goto yybackup;
+
+
+/*-----------.
+| yybackup. |
+`-----------*/
+yybackup:
+ /* Do appropriate processing given the current state. Read a
+ lookahead token if we need one and don't already have one. */
+
+ /* First try to decide what to do without reference to lookahead token. */
+ yyn = yypact[yystate];
+ if (yypact_value_is_default (yyn))
+ goto yydefault;
+
+ /* Not known => get a lookahead token if don't already have one. */
+
+ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
+ if (yychar == YYEMPTY)
+ {
+ YYDPRINTF ((stderr, "Reading a token: "));
+ yychar = yylex ();
+ }
+
+ if (yychar <= YYEOF)
+ {
+ yychar = yytoken = YYEOF;
+ YYDPRINTF ((stderr, "Now at end of input.\n"));
+ }
+ else
+ {
+ yytoken = YYTRANSLATE (yychar);
+ YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+ }
+
+ /* If the proper action on seeing token YYTOKEN is to reduce or to
+ detect an error, take that action. */
+ yyn += yytoken;
+ if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+ goto yydefault;
+ yyn = yytable[yyn];
+ if (yyn <= 0)
+ {
+ if (yytable_value_is_error (yyn))
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+ /* Shift the lookahead token. */
+ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+ /* Discard the shifted token. */
+ yychar = YYEMPTY;
+
+ yystate = yyn;
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ *++yyvsp = yylval;
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
+ goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state. |
+`-----------------------------------------------------------*/
+yydefault:
+ yyn = yydefact[yystate];
+ if (yyn == 0)
+ goto yyerrlab;
+ goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- do a reduction. |
+`-----------------------------*/
+yyreduce:
+ /* yyn is the number of a rule to reduce with. */
+ yylen = yyr2[yyn];
+
+ /* If YYLEN is nonzero, implement the default value of the action:
+ '$$ = $1'.
+
+ Otherwise, the following line sets YYVAL to garbage.
+ This behavior is undocumented and Bison
+ users should not rely upon it. Assigning to YYVAL
+ unconditionally makes the parser a bit smaller, and it avoids a
+ GCC warning that YYVAL may be used uninitialized. */
+ yyval = yyvsp[1-yylen];
+
+
+ YY_REDUCE_PRINT (yyn);
+ switch (yyn)
+ {
+ case 4:
+#line 192 "getdate.y"
+ {
+ yyHaveTime++;
+ }
+#line 1457 "getdate.c"
+ break;
+
+ case 5:
+#line 195 "getdate.y"
+ {
+ yyHaveZone++;
+ }
+#line 1465 "getdate.c"
+ break;
+
+ case 6:
+#line 198 "getdate.y"
+ {
+ yyHaveDate++;
+ }
+#line 1473 "getdate.c"
+ break;
+
+ case 7:
+#line 201 "getdate.y"
+ {
+ yyHaveDay++;
+ }
+#line 1481 "getdate.c"
+ break;
+
+ case 8:
+#line 204 "getdate.y"
+ {
+ yyHaveRel++;
+ }
+#line 1489 "getdate.c"
+ break;
+
+ case 10:
+#line 210 "getdate.y"
+ {
+ yyHour = (yyvsp[-1].Number);
+ yyMinutes = 0;
+ yySeconds = 0;
+ yyMeridian = (yyvsp[0].Meridian);
+ }
+#line 1500 "getdate.c"
+ break;
+
+ case 11:
+#line 216 "getdate.y"
+ {
+ yyHour = (yyvsp[-3].Number);
+ yyMinutes = (yyvsp[-1].Number);
+ yySeconds = 0;
+ yyMeridian = (yyvsp[0].Meridian);
+ }
+#line 1511 "getdate.c"
+ break;
+
+ case 12:
+#line 222 "getdate.y"
+ {
+ yyHour = (yyvsp[-3].Number);
+ yyMinutes = (yyvsp[-1].Number);
+ yyMeridian = MER24;
+ yyHaveZone++;
+ yyTimezone = ((yyvsp[0].Number) < 0
+ ? -(yyvsp[0].Number) % 100 + (-(yyvsp[0].Number) / 100) * 60
+ : - ((yyvsp[0].Number) % 100 + ((yyvsp[0].Number) / 100) * 60));
+ }
+#line 1525 "getdate.c"
+ break;
+
+ case 13:
+#line 231 "getdate.y"
+ {
+ yyHour = (yyvsp[-5].Number);
+ yyMinutes = (yyvsp[-3].Number);
+ yySeconds = (yyvsp[-1].Number);
+ yyMeridian = (yyvsp[0].Meridian);
+ }
+#line 1536 "getdate.c"
+ break;
+
+ case 14:
+#line 237 "getdate.y"
+ {
+ yyHour = (yyvsp[-5].Number);
+ yyMinutes = (yyvsp[-3].Number);
+ yySeconds = (yyvsp[-1].Number);
+ yyMeridian = MER24;
+ yyHaveZone++;
+ yyTimezone = ((yyvsp[0].Number) < 0
+ ? -(yyvsp[0].Number) % 100 + (-(yyvsp[0].Number) / 100) * 60
+ : - ((yyvsp[0].Number) % 100 + ((yyvsp[0].Number) / 100) * 60));
+ }
+#line 1551 "getdate.c"
+ break;
+
+ case 15:
+#line 249 "getdate.y"
+ {
+ yyTimezone = (yyvsp[0].Number);
+ }
+#line 1559 "getdate.c"
+ break;
+
+ case 16:
+#line 252 "getdate.y"
+ {
+ yyTimezone = (yyvsp[0].Number) - 60;
+ }
+#line 1567 "getdate.c"
+ break;
+
+ case 17:
+#line 256 "getdate.y"
+ {
+ yyTimezone = (yyvsp[-1].Number) - 60;
+ }
+#line 1575 "getdate.c"
+ break;
+
+ case 18:
+#line 261 "getdate.y"
+ {
+ yyDayOrdinal = 1;
+ yyDayNumber = (yyvsp[0].Number);
+ }
+#line 1584 "getdate.c"
+ break;
+
+ case 19:
+#line 265 "getdate.y"
+ {
+ yyDayOrdinal = 1;
+ yyDayNumber = (yyvsp[-1].Number);
+ }
+#line 1593 "getdate.c"
+ break;
+
+ case 20:
+#line 269 "getdate.y"
+ {
+ yyDayOrdinal = (yyvsp[-1].Number);
+ yyDayNumber = (yyvsp[0].Number);
+ }
+#line 1602 "getdate.c"
+ break;
+
+ case 21:
+#line 275 "getdate.y"
+ {
+ yyMonth = (yyvsp[-2].Number);
+ yyDay = (yyvsp[0].Number);
+ }
+#line 1611 "getdate.c"
+ break;
+
+ case 22:
+#line 279 "getdate.y"
+ {
+ /* Interpret as YYYY/MM/DD if $1 >= 1000, otherwise as MM/DD/YY.
+ The goal in recognizing YYYY/MM/DD is solely to support legacy
+ machine-generated dates like those in an RCS log listing. If
+ you want portability, use the ISO 8601 format. */
+ if ((yyvsp[-4].Number) >= 1000)
+ {
+ yyYear = (yyvsp[-4].Number);
+ yyMonth = (yyvsp[-2].Number);
+ yyDay = (yyvsp[0].Number);
+ }
+ else
+ {
+ yyMonth = (yyvsp[-4].Number);
+ yyDay = (yyvsp[-2].Number);
+ yyYear = (yyvsp[0].Number);
+ }
+ }
+#line 1634 "getdate.c"
+ break;
+
+ case 23:
+#line 297 "getdate.y"
+ {
+ /* ISO 8601 format. yyyy-mm-dd. */
+ yyYear = (yyvsp[-2].Number);
+ yyMonth = -(yyvsp[-1].Number);
+ yyDay = -(yyvsp[0].Number);
+ }
+#line 1645 "getdate.c"
+ break;
+
+ case 24:
+#line 303 "getdate.y"
+ {
+ /* e.g. 17-JUN-1992. */
+ yyDay = (yyvsp[-2].Number);
+ yyMonth = (yyvsp[-1].Number);
+ yyYear = -(yyvsp[0].Number);
+ }
+#line 1656 "getdate.c"
+ break;
+
+ case 25:
+#line 309 "getdate.y"
+ {
+ yyMonth = (yyvsp[-1].Number);
+ yyDay = (yyvsp[0].Number);
+ }
+#line 1665 "getdate.c"
+ break;
+
+ case 26:
+#line 313 "getdate.y"
+ {
+ yyMonth = (yyvsp[-3].Number);
+ yyDay = (yyvsp[-2].Number);
+ yyYear = (yyvsp[0].Number);
+ }
+#line 1675 "getdate.c"
+ break;
+
+ case 27:
+#line 318 "getdate.y"
+ {
+ yyMonth = (yyvsp[0].Number);
+ yyDay = (yyvsp[-1].Number);
+ }
+#line 1684 "getdate.c"
+ break;
+
+ case 28:
+#line 322 "getdate.y"
+ {
+ yyMonth = (yyvsp[-1].Number);
+ yyDay = (yyvsp[-2].Number);
+ yyYear = (yyvsp[0].Number);
+ }
+#line 1694 "getdate.c"
+ break;
+
+ case 29:
+#line 329 "getdate.y"
+ {
+ yyRelSeconds = -yyRelSeconds;
+ yyRelMinutes = -yyRelMinutes;
+ yyRelHour = -yyRelHour;
+ yyRelDay = -yyRelDay;
+ yyRelMonth = -yyRelMonth;
+ yyRelYear = -yyRelYear;
+ }
+#line 1707 "getdate.c"
+ break;
+
+ case 31:
+#line 340 "getdate.y"
+ {
+ yyRelYear += (yyvsp[-1].Number) * (yyvsp[0].Number);
+ }
+#line 1715 "getdate.c"
+ break;
+
+ case 32:
+#line 343 "getdate.y"
+ {
+ yyRelYear += (yyvsp[-1].Number) * (yyvsp[0].Number);
+ }
+#line 1723 "getdate.c"
+ break;
+
+ case 33:
+#line 346 "getdate.y"
+ {
+ yyRelYear++;
+ }
+#line 1731 "getdate.c"
+ break;
+
+ case 34:
+#line 349 "getdate.y"
+ {
+ yyRelMonth += (yyvsp[-1].Number) * (yyvsp[0].Number);
+ }
+#line 1739 "getdate.c"
+ break;
+
+ case 35:
+#line 352 "getdate.y"
+ {
+ yyRelMonth += (yyvsp[-1].Number) * (yyvsp[0].Number);
+ }
+#line 1747 "getdate.c"
+ break;
+
+ case 36:
+#line 355 "getdate.y"
+ {
+ yyRelMonth++;
+ }
+#line 1755 "getdate.c"
+ break;
+
+ case 37:
+#line 358 "getdate.y"
+ {
+ yyRelDay += (yyvsp[-1].Number) * (yyvsp[0].Number);
+ }
+#line 1763 "getdate.c"
+ break;
+
+ case 38:
+#line 361 "getdate.y"
+ {
+ yyRelDay += (yyvsp[-1].Number) * (yyvsp[0].Number);
+ }
+#line 1771 "getdate.c"
+ break;
+
+ case 39:
+#line 364 "getdate.y"
+ {
+ yyRelDay++;
+ }
+#line 1779 "getdate.c"
+ break;
+
+ case 40:
+#line 367 "getdate.y"
+ {
+ yyRelHour += (yyvsp[-1].Number) * (yyvsp[0].Number);
+ }
+#line 1787 "getdate.c"
+ break;
+
+ case 41:
+#line 370 "getdate.y"
+ {
+ yyRelHour += (yyvsp[-1].Number) * (yyvsp[0].Number);
+ }
+#line 1795 "getdate.c"
+ break;
+
+ case 42:
+#line 373 "getdate.y"
+ {
+ yyRelHour++;
+ }
+#line 1803 "getdate.c"
+ break;
+
+ case 43:
+#line 376 "getdate.y"
+ {
+ yyRelMinutes += (yyvsp[-1].Number) * (yyvsp[0].Number);
+ }
+#line 1811 "getdate.c"
+ break;
+
+ case 44:
+#line 379 "getdate.y"
+ {
+ yyRelMinutes += (yyvsp[-1].Number) * (yyvsp[0].Number);
+ }
+#line 1819 "getdate.c"
+ break;
+
+ case 45:
+#line 382 "getdate.y"
+ {
+ yyRelMinutes++;
+ }
+#line 1827 "getdate.c"
+ break;
+
+ case 46:
+#line 385 "getdate.y"
+ {
+ yyRelSeconds += (yyvsp[-1].Number) * (yyvsp[0].Number);
+ }
+#line 1835 "getdate.c"
+ break;
+
+ case 47:
+#line 388 "getdate.y"
+ {
+ yyRelSeconds += (yyvsp[-1].Number) * (yyvsp[0].Number);
+ }
+#line 1843 "getdate.c"
+ break;
+
+ case 48:
+#line 391 "getdate.y"
+ {
+ yyRelSeconds++;
+ }
+#line 1851 "getdate.c"
+ break;
+
+ case 49:
+#line 397 "getdate.y"
+ {
+ if ((yyHaveTime != 0) && (yyHaveDate != 0) && (yyHaveRel == 0))
+ yyYear = (yyvsp[0].Number);
+ else
+ {
+ if ((yyvsp[0].Number)>10000)
+ {
+ yyHaveDate++;
+ yyDay= ((yyvsp[0].Number))%100;
+ yyMonth= ((yyvsp[0].Number)/100)%100;
+ yyYear = (yyvsp[0].Number)/10000;
+ }
+ else
+ {
+ yyHaveTime++;
+ if ((yyvsp[0].Number) < 100)
+ {
+ yyHour = (yyvsp[0].Number);
+ yyMinutes = 0;
+ }
+ else
+ {
+ yyHour = (yyvsp[0].Number) / 100;
+ yyMinutes = (yyvsp[0].Number) % 100;
+ }
+ yySeconds = 0;
+ yyMeridian = MER24;
+ }
+ }
+ }
+#line 1886 "getdate.c"
+ break;
+
+ case 50:
+#line 430 "getdate.y"
+ {
+ (yyval.Meridian) = MER24;
+ }
+#line 1894 "getdate.c"
+ break;
+
+ case 51:
+#line 434 "getdate.y"
+ {
+ (yyval.Meridian) = (yyvsp[0].Meridian);
+ }
+#line 1902 "getdate.c"
+ break;
+
+
+#line 1906 "getdate.c"
+
+ default: break;
+ }
+ /* User semantic actions sometimes alter yychar, and that requires
+ that yytoken be updated with the new translation. We take the
+ approach of translating immediately before every use of yytoken.
+ One alternative is translating here after every semantic action,
+ but that translation would be missed if the semantic action invokes
+ YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+ if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
+ incorrect destructor might then be invoked immediately. In the
+ case of YYERROR or YYBACKUP, subsequent parser actions might lead
+ to an incorrect destructor call or verbose syntax error message
+ before the lookahead is translated. */
+ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+
+ *++yyvsp = yyval;
+
+ /* Now 'shift' the result of the reduction. Determine what state
+ that goes to, based on the state we popped back to and the rule
+ number reduced by. */
+ {
+ const int yylhs = yyr1[yyn] - YYNTOKENS;
+ const int yyi = yypgoto[yylhs] + *yyssp;
+ yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
+ ? yytable[yyi]
+ : yydefgoto[yylhs]);
+ }
+
+ goto yynewstate;
+
+
+/*--------------------------------------.
+| yyerrlab -- here on detecting error. |
+`--------------------------------------*/
+yyerrlab:
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
+ /* If not already recovering from an error, report this error. */
+ if (!yyerrstatus)
+ {
+ ++yynerrs;
+#if ! YYERROR_VERBOSE
+ yyerror (YY_("syntax error"));
+#else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+ yyssp, yytoken)
+ {
+ char const *yymsgp = YY_("syntax error");
+ int yysyntax_error_status;
+ yysyntax_error_status = YYSYNTAX_ERROR;
+ if (yysyntax_error_status == 0)
+ yymsgp = yymsg;
+ else if (yysyntax_error_status == 1)
+ {
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+ yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+ if (!yymsg)
+ {
+ yymsg = yymsgbuf;
+ yymsg_alloc = sizeof yymsgbuf;
+ yysyntax_error_status = 2;
+ }
+ else
+ {
+ yysyntax_error_status = YYSYNTAX_ERROR;
+ yymsgp = yymsg;
+ }
+ }
+ yyerror (yymsgp);
+ if (yysyntax_error_status == 2)
+ goto yyexhaustedlab;
+ }
+# undef YYSYNTAX_ERROR
+#endif
+ }
+
+
+
+ if (yyerrstatus == 3)
+ {
+ /* If just tried and failed to reuse lookahead token after an
+ error, discard it. */
+
+ if (yychar <= YYEOF)
+ {
+ /* Return failure if at end of input. */
+ if (yychar == YYEOF)
+ YYABORT;
+ }
+ else
+ {
+ yydestruct ("Error: discarding",
+ yytoken, &yylval);
+ yychar = YYEMPTY;
+ }
+ }
+
+ /* Else will try to reuse lookahead token after shifting the error
+ token. */
+ goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR. |
+`---------------------------------------------------*/
+yyerrorlab:
+ /* Pacify compilers when the user code never invokes YYERROR and the
+ label yyerrorlab therefore never appears in user code. */
+ if (0)
+ YYERROR;
+
+ /* Do not reclaim the symbols of the rule whose action triggered
+ this YYERROR. */
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+ yystate = *yyssp;
+ goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR. |
+`-------------------------------------------------------------*/
+yyerrlab1:
+ yyerrstatus = 3; /* Each real token shifted decrements this. */
+
+ for (;;)
+ {
+ yyn = yypact[yystate];
+ if (!yypact_value_is_default (yyn))
+ {
+ yyn += YYTERROR;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+ {
+ yyn = yytable[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
+
+ /* Pop the current state because it cannot handle the error token. */
+ if (yyssp == yyss)
+ YYABORT;
+
+
+ yydestruct ("Error: popping",
+ yystos[yystate], yyvsp);
+ YYPOPSTACK (1);
+ yystate = *yyssp;
+ YY_STACK_PRINT (yyss, yyssp);
+ }
+
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ *++yyvsp = yylval;
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
+
+
+ /* Shift the error token. */
+ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here. |
+`-------------------------------------*/
+yyacceptlab:
+ yyresult = 0;
+ goto yyreturn;
+
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here. |
+`-----------------------------------*/
+yyabortlab:
+ yyresult = 1;
+ goto yyreturn;
+
+
+#if !defined yyoverflow || YYERROR_VERBOSE
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here. |
+`-------------------------------------------------*/
+yyexhaustedlab:
+ yyerror (YY_("memory exhausted"));
+ yyresult = 2;
+ /* Fall through. */
+#endif
+
+
+/*-----------------------------------------------------.
+| yyreturn -- parsing is finished, return the result. |
+`-----------------------------------------------------*/
+yyreturn:
+ if (yychar != YYEMPTY)
+ {
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = YYTRANSLATE (yychar);
+ yydestruct ("Cleanup: discarding lookahead",
+ yytoken, &yylval);
+ }
+ /* Do not reclaim the symbols of the rule whose action triggered
+ this YYABORT or YYACCEPT. */
+ YYPOPSTACK (yylen);
+ YY_STACK_PRINT (yyss, yyssp);
+ while (yyssp != yyss)
+ {
+ yydestruct ("Cleanup: popping",
+ yystos[*yyssp], yyvsp);
+ YYPOPSTACK (1);
+ }
+#ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+#endif
+ return yyresult;
+}
+#line 439 "getdate.y"
+
+
+/* Month and day table. */
+static TABLE const MonthDayTable[] = {
+ { "january", tMONTH, 1 },
+ { "february", tMONTH, 2 },
+ { "march", tMONTH, 3 },
+ { "april", tMONTH, 4 },
+ { "may", tMONTH, 5 },
+ { "june", tMONTH, 6 },
+ { "july", tMONTH, 7 },
+ { "august", tMONTH, 8 },
+ { "september", tMONTH, 9 },
+ { "sept", tMONTH, 9 },
+ { "october", tMONTH, 10 },
+ { "november", tMONTH, 11 },
+ { "december", tMONTH, 12 },
+ { "sunday", tDAY, 0 },
+ { "monday", tDAY, 1 },
+ { "tuesday", tDAY, 2 },
+ { "tues", tDAY, 2 },
+ { "wednesday", tDAY, 3 },
+ { "wednes", tDAY, 3 },
+ { "thursday", tDAY, 4 },
+ { "thur", tDAY, 4 },
+ { "thurs", tDAY, 4 },
+ { "friday", tDAY, 5 },
+ { "saturday", tDAY, 6 },
+ { NULL, 0, 0 }
+};
+
+/* Time units table. */
+static TABLE const UnitsTable[] = {
+ { "year", tYEAR_UNIT, 1 },
+ { "month", tMONTH_UNIT, 1 },
+ { "fortnight", tDAY_UNIT, 14 },
+ { "week", tDAY_UNIT, 7 },
+ { "day", tDAY_UNIT, 1 },
+ { "hour", tHOUR_UNIT, 1 },
+ { "minute", tMINUTE_UNIT, 1 },
+ { "min", tMINUTE_UNIT, 1 },
+ { "second", tSEC_UNIT, 1 },
+ { "sec", tSEC_UNIT, 1 },
+ { NULL, 0, 0 }
+};
+
+/* Assorted relative-time words. */
+static TABLE const OtherTable[] = {
+ { "tomorrow", tMINUTE_UNIT, 1 * 24 * 60 },
+ { "yesterday", tMINUTE_UNIT, -1 * 24 * 60 },
+ { "today", tMINUTE_UNIT, 0 },
+ { "now", tMINUTE_UNIT, 0 },
+ { "last", tUNUMBER, -1 },
+ { "this", tMINUTE_UNIT, 0 },
+ { "next", tUNUMBER, 2 },
+ { "first", tUNUMBER, 1 },
+/* { "second", tUNUMBER, 2 }, */
+ { "third", tUNUMBER, 3 },
+ { "fourth", tUNUMBER, 4 },
+ { "fifth", tUNUMBER, 5 },
+ { "sixth", tUNUMBER, 6 },
+ { "seventh", tUNUMBER, 7 },
+ { "eighth", tUNUMBER, 8 },
+ { "ninth", tUNUMBER, 9 },
+ { "tenth", tUNUMBER, 10 },
+ { "eleventh", tUNUMBER, 11 },
+ { "twelfth", tUNUMBER, 12 },
+ { "ago", tAGO, 1 },
+ { NULL, 0, 0 }
+};
+
+/* The timezone table. */
+static TABLE const TimezoneTable[] = {
+ { "gmt", tZONE, HOUR ( 0) }, /* Greenwich Mean */
+ { "ut", tZONE, HOUR ( 0) }, /* Universal (Coordinated) */
+ { "utc", tZONE, HOUR ( 0) },
+ { "wet", tZONE, HOUR ( 0) }, /* Western European */
+ { "bst", tDAYZONE, HOUR ( 0) }, /* British Summer */
+ { "wat", tZONE, HOUR ( 1) }, /* West Africa */
+ { "at", tZONE, HOUR ( 2) }, /* Azores */
+ { "ast", tZONE, HOUR ( 4) }, /* Atlantic Standard */
+ { "adt", tDAYZONE, HOUR ( 4) }, /* Atlantic Daylight */
+ { "est", tZONE, HOUR ( 5) }, /* Eastern Standard */
+ { "edt", tDAYZONE, HOUR ( 5) }, /* Eastern Daylight */
+ { "cst", tZONE, HOUR ( 6) }, /* Central Standard */
+ { "cdt", tDAYZONE, HOUR ( 6) }, /* Central Daylight */
+ { "mst", tZONE, HOUR ( 7) }, /* Mountain Standard */
+ { "mdt", tDAYZONE, HOUR ( 7) }, /* Mountain Daylight */
+ { "pst", tZONE, HOUR ( 8) }, /* Pacific Standard */
+ { "pdt", tDAYZONE, HOUR ( 8) }, /* Pacific Daylight */
+ { "yst", tZONE, HOUR ( 9) }, /* Yukon Standard */
+ { "ydt", tDAYZONE, HOUR ( 9) }, /* Yukon Daylight */
+ { "hst", tZONE, HOUR (10) }, /* Hawaii Standard */
+ { "hdt", tDAYZONE, HOUR (10) }, /* Hawaii Daylight */
+ { "cat", tZONE, HOUR (10) }, /* Central Alaska */
+ { "ahst", tZONE, HOUR (10) }, /* Alaska-Hawaii Standard */
+ { "nt", tZONE, HOUR (11) }, /* Nome */
+ { "idlw", tZONE, HOUR (12) }, /* International Date Line West */
+ { "cet", tZONE, -HOUR (1) }, /* Central European */
+ { "met", tZONE, -HOUR (1) }, /* Middle European */
+ { "mewt", tZONE, -HOUR (1) }, /* Middle European Winter */
+ { "mest", tDAYZONE, -HOUR (1) }, /* Middle European Summer */
+ { "mesz", tDAYZONE, -HOUR (1) }, /* Middle European Summer */
+ { "swt", tZONE, -HOUR (1) }, /* Swedish Winter */
+ { "sst", tDAYZONE, -HOUR (1) }, /* Swedish Summer */
+ { "fwt", tZONE, -HOUR (1) }, /* French Winter */
+ { "fst", tDAYZONE, -HOUR (1) }, /* French Summer */
+ { "eet", tZONE, -HOUR (2) }, /* Eastern Europe, USSR Zone 1 */
+ { "bt", tZONE, -HOUR (3) }, /* Baghdad, USSR Zone 2 */
+ { "zp4", tZONE, -HOUR (4) }, /* USSR Zone 3 */
+ { "zp5", tZONE, -HOUR (5) }, /* USSR Zone 4 */
+ { "zp6", tZONE, -HOUR (6) }, /* USSR Zone 5 */
+ { "wast", tZONE, -HOUR (7) }, /* West Australian Standard */
+ { "wadt", tDAYZONE, -HOUR (7) }, /* West Australian Daylight */
+ { "cct", tZONE, -HOUR (8) }, /* China Coast, USSR Zone 7 */
+ { "jst", tZONE, -HOUR (9) }, /* Japan Standard, USSR Zone 8 */
+ { "east", tZONE, -HOUR (10) }, /* Eastern Australian Standard */
+ { "eadt", tDAYZONE, -HOUR (10) }, /* Eastern Australian Daylight */
+ { "gst", tZONE, -HOUR (10) }, /* Guam Standard, USSR Zone 9 */
+ { "nzt", tZONE, -HOUR (12) }, /* New Zealand */
+ { "nzst", tZONE, -HOUR (12) }, /* New Zealand Standard */
+ { "nzdt", tDAYZONE, -HOUR (12) }, /* New Zealand Daylight */
+ { "idle", tZONE, -HOUR (12) }, /* International Date Line East */
+ { NULL, 0, 0 }
+};
+
+/* Military timezone table. */
+static TABLE const MilitaryTable[] = {
+ { "a", tZONE, HOUR ( 1) },
+ { "b", tZONE, HOUR ( 2) },
+ { "c", tZONE, HOUR ( 3) },
+ { "d", tZONE, HOUR ( 4) },
+ { "e", tZONE, HOUR ( 5) },
+ { "f", tZONE, HOUR ( 6) },
+ { "g", tZONE, HOUR ( 7) },
+ { "h", tZONE, HOUR ( 8) },
+ { "i", tZONE, HOUR ( 9) },
+ { "k", tZONE, HOUR ( 10) },
+ { "l", tZONE, HOUR ( 11) },
+ { "m", tZONE, HOUR ( 12) },
+ { "n", tZONE, HOUR (- 1) },
+ { "o", tZONE, HOUR (- 2) },
+ { "p", tZONE, HOUR (- 3) },
+ { "q", tZONE, HOUR (- 4) },
+ { "r", tZONE, HOUR (- 5) },
+ { "s", tZONE, HOUR (- 6) },
+ { "t", tZONE, HOUR (- 7) },
+ { "u", tZONE, HOUR (- 8) },
+ { "v", tZONE, HOUR (- 9) },
+ { "w", tZONE, HOUR (-10) },
+ { "x", tZONE, HOUR (-11) },
+ { "y", tZONE, HOUR (-12) },
+ { "z", tZONE, HOUR ( 0) },
+ { NULL, 0, 0 }
+};
+
+
+
+
+static int yyerror (unused const char *s)
+{
+ return 0;
+}
+
+static int ToHour (int Hours, MERIDIAN Meridian)
+{
+ switch (Meridian)
+ {
+ case MER24:
+ if (Hours < 0 || Hours > 23)
+ return -1;
+ return Hours;
+ case MERam:
+ if (Hours < 1 || Hours > 12)
+ return -1;
+ if (Hours == 12)
+ Hours = 0;
+ return Hours;
+ case MERpm:
+ if (Hours < 1 || Hours > 12)
+ return -1;
+ if (Hours == 12)
+ Hours = 0;
+ return Hours + 12;
+ default:
+ abort ();
+ }
+ /* NOTREACHED */
+}
+
+static int ToYear (int Year)
+{
+ if (Year < 0)
+ Year = -Year;
+
+ /* XPG4 suggests that years 00-68 map to 2000-2068, and
+ years 69-99 map to 1969-1999. */
+ if (Year < 69)
+ Year += 2000;
+ else if (Year < 100)
+ Year += 1900;
+
+ return Year;
+}
+
+static int LookupWord (char *buff)
+{
+ register char *p;
+ register char *q;
+ register const TABLE *tp;
+ int i;
+ bool abbrev;
+
+ /* Make it lowercase. */
+ for (p = buff; '\0' != *p; p++)
+ if (ISUPPER (*p))
+ *p = tolower (*p);
+
+ if (strcmp (buff, "am") == 0 || strcmp (buff, "a.m.") == 0)
+ {
+ yylval.Meridian = MERam;
+ return tMERIDIAN;
+ }
+ if (strcmp (buff, "pm") == 0 || strcmp (buff, "p.m.") == 0)
+ {
+ yylval.Meridian = MERpm;
+ return tMERIDIAN;
+ }
+
+ /* See if we have an abbreviation for a month. */
+ if (strlen (buff) == 3)
+ abbrev = true;
+ else if (strlen (buff) == 4 && buff[3] == '.')
+ {
+ abbrev = true;
+ buff[3] = '\0';
+ }
+ else
+ abbrev = false;
+
+ for (tp = MonthDayTable; tp->name; tp++)
+ {
+ if (abbrev)
+ {
+ if (strncmp (buff, tp->name, 3) == 0)
+ {
+ yylval.Number = tp->value;
+ return tp->type;
+ }
+ }
+ else if (strcmp (buff, tp->name) == 0)
+ {
+ yylval.Number = tp->value;
+ return tp->type;
+ }
+ }
+
+ for (tp = TimezoneTable; tp->name; tp++)
+ if (strcmp (buff, tp->name) == 0)
+ {
+ yylval.Number = tp->value;
+ return tp->type;
+ }
+
+ if (strcmp (buff, "dst") == 0)
+ return tDST;
+
+ for (tp = UnitsTable; tp->name; tp++)
+ if (strcmp (buff, tp->name) == 0)
+ {
+ yylval.Number = tp->value;
+ return tp->type;
+ }
+
+ /* Strip off any plural and try the units table again. */
+ i = strlen (buff) - 1;
+ if (buff[i] == 's')
+ {
+ buff[i] = '\0';
+ for (tp = UnitsTable; tp->name; tp++)
+ if (strcmp (buff, tp->name) == 0)
+ {
+ yylval.Number = tp->value;
+ return tp->type;
+ }
+ buff[i] = 's'; /* Put back for "this" in OtherTable. */
+ }
+
+ for (tp = OtherTable; tp->name; tp++)
+ if (strcmp (buff, tp->name) == 0)
+ {
+ yylval.Number = tp->value;
+ return tp->type;
+ }
+
+ /* Military timezones. */
+ if (buff[1] == '\0' && ISALPHA (*buff))
+ {
+ for (tp = MilitaryTable; tp->name; tp++)
+ if (strcmp (buff, tp->name) == 0)
+ {
+ yylval.Number = tp->value;
+ return tp->type;
+ }
+ }
+
+ /* Drop out any periods and try the timezone table again. */
+ for (i = 0, p = q = buff; '\0' != *q; q++)
+ if (*q != '.')
+ *p++ = *q;
+ else
+ i++;
+ *p = '\0';
+ if (0 != i)
+ for (tp = TimezoneTable; NULL != tp->name; tp++)
+ if (strcmp (buff, tp->name) == 0)
+ {
+ yylval.Number = tp->value;
+ return tp->type;
+ }
+
+ return tID;
+}
+
+static int
+yylex (void)
+{
+ register char c;
+ register char *p;
+ char buff[20];
+ int Count;
+ int sign;
+
+ for (;;)
+ {
+ while (ISSPACE (*yyInput))
+ yyInput++;
+
+ if (ISDIGIT (c = *yyInput) || c == '-' || c == '+')
+ {
+ if (c == '-' || c == '+')
+ {
+ sign = c == '-' ? -1 : 1;
+ if (!ISDIGIT (*++yyInput))
+ /* skip the '-' sign */
+ continue;
+ }
+ else
+ sign = 0;
+ for (yylval.Number = 0; ISDIGIT (c = *yyInput++);)
+ yylval.Number = 10 * yylval.Number + c - '0';
+ yyInput--;
+ if (sign < 0)
+ yylval.Number = -yylval.Number;
+ return (0 != sign) ? tSNUMBER : tUNUMBER;
+ }
+ if (ISALPHA (c))
+ {
+ for (p = buff; (c = *yyInput++, ISALPHA (c)) || c == '.';)
+ if (p < &buff[sizeof buff - 1])
+ *p++ = c;
+ *p = '\0';
+ yyInput--;
+ return LookupWord (buff);
+ }
+ if (c != '(')
+ return *yyInput++;
+ Count = 0;
+ do
+ {
+ c = *yyInput++;
+ if (c == '\0')
+ return c;
+ if (c == '(')
+ Count++;
+ else if (c == ')')
+ Count--;
+ }
+ while (Count > 0);
+ }
+}
+
+#define TM_YEAR_ORIGIN 1900
+
+/* Yield A - B, measured in seconds. */
+static long difftm (struct tm *a, struct tm *b)
+{
+ int ay = a->tm_year + (TM_YEAR_ORIGIN - 1);
+ int by = b->tm_year + (TM_YEAR_ORIGIN - 1);
+ long days = (
+ /* difference in day of year */
+ a->tm_yday - b->tm_yday
+ /* + intervening leap days */
+ + ((ay >> 2) - (by >> 2))
+ - (ay / 100 - by / 100)
+ + ((ay / 100 >> 2) - (by / 100 >> 2))
+ /* + difference in years * 365 */
+ + (long) (ay - by) * 365
+ );
+ return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour))
+ + (a->tm_min - b->tm_min))
+ + (a->tm_sec - b->tm_sec));
+}
+
+time_t get_date (const char *p, const time_t *now)
+{
+ struct tm tm, tm0, *tmp;
+ time_t Start;
+
+ yyInput = p;
+ Start = now ? *now : time ((time_t *) NULL);
+ tmp = localtime (&Start);
+ yyYear = tmp->tm_year + TM_YEAR_ORIGIN;
+ yyMonth = tmp->tm_mon + 1;
+ yyDay = tmp->tm_mday;
+ yyHour = tmp->tm_hour;
+ yyMinutes = tmp->tm_min;
+ yySeconds = tmp->tm_sec;
+ yyMeridian = MER24;
+ yyRelSeconds = 0;
+ yyRelMinutes = 0;
+ yyRelHour = 0;
+ yyRelDay = 0;
+ yyRelMonth = 0;
+ yyRelYear = 0;
+ yyHaveDate = 0;
+ yyHaveDay = 0;
+ yyHaveRel = 0;
+ yyHaveTime = 0;
+ yyHaveZone = 0;
+
+ if (yyparse ()
+ || yyHaveTime > 1 || yyHaveZone > 1 || yyHaveDate > 1 || yyHaveDay > 1)
+ return -1;
+
+ tm.tm_year = ToYear (yyYear) - TM_YEAR_ORIGIN + yyRelYear;
+ tm.tm_mon = yyMonth - 1 + yyRelMonth;
+ tm.tm_mday = yyDay + yyRelDay;
+ if ((yyHaveTime != 0) ||
+ ( (yyHaveRel != 0) && (yyHaveDate == 0) && (yyHaveDay == 0) ))
+ {
+ tm.tm_hour = ToHour (yyHour, yyMeridian);
+ if (tm.tm_hour < 0)
+ return -1;
+ tm.tm_min = yyMinutes;
+ tm.tm_sec = yySeconds;
+ }
+ else
+ {
+ tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
+ }
+ tm.tm_hour += yyRelHour;
+ tm.tm_min += yyRelMinutes;
+ tm.tm_sec += yyRelSeconds;
+ tm.tm_isdst = -1;
+ tm0 = tm;
+
+ Start = mktime (&tm);
+
+ if (Start == (time_t) -1)
+ {
+
+ /* Guard against falsely reporting errors near the time_t boundaries
+ when parsing times in other time zones. For example, if the min
+ time_t value is 1970-01-01 00:00:00 UTC and we are 8 hours ahead
+ of UTC, then the min localtime value is 1970-01-01 08:00:00; if
+ we apply mktime to 1970-01-01 00:00:00 we will get an error, so
+ we apply mktime to 1970-01-02 08:00:00 instead and adjust the time
+ zone by 24 hours to compensate. This algorithm assumes that
+ there is no DST transition within a day of the time_t boundaries. */
+ if (yyHaveZone)
+ {
+ tm = tm0;
+ if (tm.tm_year <= EPOCH - TM_YEAR_ORIGIN)
+ {
+ tm.tm_mday++;
+ yyTimezone -= 24 * 60;
+ }
+ else
+ {
+ tm.tm_mday--;
+ yyTimezone += 24 * 60;
+ }
+ Start = mktime (&tm);
+ }
+
+ if (Start == (time_t) -1)
+ return Start;
+ }
+
+ if (yyHaveDay && !yyHaveDate)
+ {
+ tm.tm_mday += ((yyDayNumber - tm.tm_wday + 7) % 7
+ + 7 * (yyDayOrdinal - (0 < yyDayOrdinal)));
+ Start = mktime (&tm);
+ if (Start == (time_t) -1)
+ return Start;
+ }
+
+ if (yyHaveZone)
+ {
+ long delta = yyTimezone * 60L + difftm (&tm, gmtime (&Start));
+ if ((Start + delta < Start) != (delta < 0))
+ return -1; /* time_t overflow */
+ Start += delta;
+ }
+
+ return Start;
+}
+
+#if defined (TEST)
+
+/* ARGSUSED */
+int
+main (ac, av)
+ int ac;
+ char *av[];
+{
+ char buff[MAX_BUFF_LEN + 1];
+ time_t d;
+
+ (void) printf ("Enter date, or blank line to exit.\n\t> ");
+ (void) fflush (stdout);
+
+ buff[MAX_BUFF_LEN] = 0;
+ while (fgets (buff, MAX_BUFF_LEN, stdin) && buff[0])
+ {
+ d = get_date (buff, (time_t *) NULL);
+ if (d == -1)
+ (void) printf ("Bad format - couldn't convert.\n");
+ else
+ (void) printf ("%s", ctime (&d));
+ (void) printf ("\t> ");
+ (void) fflush (stdout);
+ }
+ exit (0);
+ /* NOTREACHED */
+}
+#endif /* defined (TEST) */
diff --git a/libmisc/getdate.h b/libmisc/getdate.h
new file mode 100644
index 0000000..d1bb176
--- /dev/null
+++ b/libmisc/getdate.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1997 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2005 , Tomasz Kłoczko
+ * 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.
+ */
+
+#ifndef _GETDATE_H_
+#define _GETDATE_H_
+
+#include <config.h>
+#include "defines.h"
+
+time_t get_date (const char *p, /*@null@*/const time_t *now);
+#endif
diff --git a/libmisc/getdate.y b/libmisc/getdate.y
new file mode 100644
index 0000000..5a8bde2
--- /dev/null
+++ b/libmisc/getdate.y
@@ -0,0 +1,977 @@
+%{
+/*
+** Originally written by Steven M. Bellovin <smb@research.att.com> while
+** at the University of North Carolina at Chapel Hill. Later tweaked by
+** a couple of people on Usenet. Completely overhauled by Rich $alz
+** <rsalz@bbn.com> and Jim Berets <jberets@bbn.com> in August, 1990;
+**
+** This grammar has 13 shift/reduce conflicts.
+**
+** This code is in the public domain and has no copyright.
+*/
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+# ifdef FORCE_ALLOCA_H
+# include <alloca.h>
+# endif
+#endif
+
+/* Since the code of getdate.y is not included in the Emacs executable
+ itself, there is no need to #define static in this file. Even if
+ the code were included in the Emacs executable, it probably
+ wouldn't do any harm to #undef it here; this will only cause
+ problems if we try to write to a static variable, which I don't
+ think this code needs to do. */
+#ifdef emacs
+# undef static
+#endif
+
+#include <stdio.h>
+#include <ctype.h>
+#include <time.h>
+
+#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
+# define IN_CTYPE_DOMAIN(c) 1
+#else
+# define IN_CTYPE_DOMAIN(c) isascii(c)
+#endif
+
+#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c))
+#define ISALPHA(c) (IN_CTYPE_DOMAIN (c) && isalpha (c))
+#define ISUPPER(c) (IN_CTYPE_DOMAIN (c) && isupper (c))
+#define ISDIGIT_LOCALE(c) (IN_CTYPE_DOMAIN (c) && isdigit (c))
+
+/* ISDIGIT differs from ISDIGIT_LOCALE, as follows:
+ - Its arg may be any int or unsigned int; it need not be an unsigned char.
+ - It's guaranteed to evaluate its argument exactly once.
+ - It's typically faster.
+ Posix 1003.2-1992 section 2.5.2.1 page 50 lines 1556-1558 says that
+ only '0' through '9' are digits. Prefer ISDIGIT to ISDIGIT_LOCALE unless
+ it's important to use the locale's definition of `digit' even when the
+ host does not conform to Posix. */
+#define ISDIGIT(c) ((unsigned) (c) - '0' <= 9)
+
+#include "getdate.h"
+
+#if defined (STDC_HEADERS)
+# include <string.h>
+#endif
+
+/* Some old versions of bison generate parsers that use bcopy.
+ That loses on systems that don't provide the function, so we have
+ to redefine it here. */
+#if !defined (HAVE_BCOPY) && defined (HAVE_MEMCPY) && !defined (bcopy)
+# define bcopy(from, to, len) memcpy ((to), (from), (len))
+#endif
+
+/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
+ 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,
+ then those parser generators need to be fixed instead of adding those
+ names to this list. */
+
+#define yymaxdepth gd_maxdepth
+#define yyparse gd_parse
+#define yylex gd_lex
+#define yyerror gd_error
+#define yylval gd_lval
+#define yychar gd_char
+#define yydebug gd_debug
+#define yypact gd_pact
+#define yyr1 gd_r1
+#define yyr2 gd_r2
+#define yydef gd_def
+#define yychk gd_chk
+#define yypgo gd_pgo
+#define yyact gd_act
+#define yyexca gd_exca
+#define yyerrflag gd_errflag
+#define yynerrs gd_nerrs
+#define yyps gd_ps
+#define yypv gd_pv
+#define yys gd_s
+#define yy_yys gd_yys
+#define yystate gd_state
+#define yytmp gd_tmp
+#define yyv gd_v
+#define yy_yyv gd_yyv
+#define yyval gd_val
+#define yylloc gd_lloc
+#define yyreds gd_reds /* With YYDEBUG defined */
+#define yytoks gd_toks /* With YYDEBUG defined */
+#define yylhs gd_yylhs
+#define yylen gd_yylen
+#define yydefred gd_yydefred
+#define yydgoto gd_yydgoto
+#define yysindex gd_yysindex
+#define yyrindex gd_yyrindex
+#define yygindex gd_yygindex
+#define yytable gd_yytable
+#define yycheck gd_yycheck
+
+static int yylex (void);
+static int yyerror (const char *s);
+
+#define EPOCH 1970
+#define HOUR(x) ((x) * 60)
+
+#define MAX_BUFF_LEN 128 /* size of buffer to read the date into */
+
+/*
+** An entry in the lexical lookup table.
+*/
+typedef struct _TABLE {
+ const char *name;
+ int type;
+ int value;
+} TABLE;
+
+
+/*
+** Meridian: am, pm, or 24-hour style.
+*/
+typedef enum _MERIDIAN {
+ MERam, MERpm, MER24
+} MERIDIAN;
+
+
+/*
+** Global variables. We could get rid of most of these by using a good
+** union as the yacc stack. (This routine was originally written before
+** yacc had the %union construct.) Maybe someday; right now we only use
+** the %union very rarely.
+*/
+static const char *yyInput;
+static int yyDayOrdinal;
+static int yyDayNumber;
+static int yyHaveDate;
+static int yyHaveDay;
+static int yyHaveRel;
+static int yyHaveTime;
+static int yyHaveZone;
+static int yyTimezone;
+static int yyDay;
+static int yyHour;
+static int yyMinutes;
+static int yyMonth;
+static int yySeconds;
+static int yyYear;
+static MERIDIAN yyMeridian;
+static int yyRelDay;
+static int yyRelHour;
+static int yyRelMinutes;
+static int yyRelMonth;
+static int yyRelSeconds;
+static int yyRelYear;
+
+%}
+
+%union {
+ int Number;
+ enum _MERIDIAN Meridian;
+}
+
+%token tAGO tDAY tDAY_UNIT tDAYZONE tDST tHOUR_UNIT tID
+%token tMERIDIAN tMINUTE_UNIT tMONTH tMONTH_UNIT
+%token tSEC_UNIT tSNUMBER tUNUMBER tYEAR_UNIT tZONE
+
+%type <Number> tDAY tDAY_UNIT tDAYZONE tHOUR_UNIT tMINUTE_UNIT
+%type <Number> tMONTH tMONTH_UNIT
+%type <Number> tSEC_UNIT tSNUMBER tUNUMBER tYEAR_UNIT tZONE
+%type <Meridian> tMERIDIAN o_merid
+
+%%
+
+spec : /* NULL */
+ | spec item
+ ;
+
+item : time {
+ yyHaveTime++;
+ }
+ | zone {
+ yyHaveZone++;
+ }
+ | date {
+ yyHaveDate++;
+ }
+ | day {
+ yyHaveDay++;
+ }
+ | rel {
+ yyHaveRel++;
+ }
+ | number
+ ;
+
+time : tUNUMBER tMERIDIAN {
+ yyHour = $1;
+ yyMinutes = 0;
+ yySeconds = 0;
+ yyMeridian = $2;
+ }
+ | tUNUMBER ':' tUNUMBER o_merid {
+ yyHour = $1;
+ yyMinutes = $3;
+ yySeconds = 0;
+ yyMeridian = $4;
+ }
+ | tUNUMBER ':' tUNUMBER tSNUMBER {
+ yyHour = $1;
+ yyMinutes = $3;
+ yyMeridian = MER24;
+ yyHaveZone++;
+ yyTimezone = ($4 < 0
+ ? -$4 % 100 + (-$4 / 100) * 60
+ : - ($4 % 100 + ($4 / 100) * 60));
+ }
+ | tUNUMBER ':' tUNUMBER ':' tUNUMBER o_merid {
+ yyHour = $1;
+ yyMinutes = $3;
+ yySeconds = $5;
+ yyMeridian = $6;
+ }
+ | tUNUMBER ':' tUNUMBER ':' tUNUMBER tSNUMBER {
+ yyHour = $1;
+ yyMinutes = $3;
+ yySeconds = $5;
+ yyMeridian = MER24;
+ yyHaveZone++;
+ yyTimezone = ($6 < 0
+ ? -$6 % 100 + (-$6 / 100) * 60
+ : - ($6 % 100 + ($6 / 100) * 60));
+ }
+ ;
+
+zone : tZONE {
+ yyTimezone = $1;
+ }
+ | tDAYZONE {
+ yyTimezone = $1 - 60;
+ }
+ |
+ tZONE tDST {
+ yyTimezone = $1 - 60;
+ }
+ ;
+
+day : tDAY {
+ yyDayOrdinal = 1;
+ yyDayNumber = $1;
+ }
+ | tDAY ',' {
+ yyDayOrdinal = 1;
+ yyDayNumber = $1;
+ }
+ | tUNUMBER tDAY {
+ yyDayOrdinal = $1;
+ yyDayNumber = $2;
+ }
+ ;
+
+date : tUNUMBER '/' tUNUMBER {
+ yyMonth = $1;
+ yyDay = $3;
+ }
+ | tUNUMBER '/' tUNUMBER '/' tUNUMBER {
+ /* Interpret as YYYY/MM/DD if $1 >= 1000, otherwise as MM/DD/YY.
+ The goal in recognizing YYYY/MM/DD is solely to support legacy
+ machine-generated dates like those in an RCS log listing. If
+ you want portability, use the ISO 8601 format. */
+ if ($1 >= 1000)
+ {
+ yyYear = $1;
+ yyMonth = $3;
+ yyDay = $5;
+ }
+ else
+ {
+ yyMonth = $1;
+ yyDay = $3;
+ yyYear = $5;
+ }
+ }
+ | tUNUMBER tSNUMBER tSNUMBER {
+ /* ISO 8601 format. yyyy-mm-dd. */
+ yyYear = $1;
+ yyMonth = -$2;
+ yyDay = -$3;
+ }
+ | tUNUMBER tMONTH tSNUMBER {
+ /* e.g. 17-JUN-1992. */
+ yyDay = $1;
+ yyMonth = $2;
+ yyYear = -$3;
+ }
+ | tMONTH tUNUMBER {
+ yyMonth = $1;
+ yyDay = $2;
+ }
+ | tMONTH tUNUMBER ',' tUNUMBER {
+ yyMonth = $1;
+ yyDay = $2;
+ yyYear = $4;
+ }
+ | tUNUMBER tMONTH {
+ yyMonth = $2;
+ yyDay = $1;
+ }
+ | tUNUMBER tMONTH tUNUMBER {
+ yyMonth = $2;
+ yyDay = $1;
+ yyYear = $3;
+ }
+ ;
+
+rel : relunit tAGO {
+ yyRelSeconds = -yyRelSeconds;
+ yyRelMinutes = -yyRelMinutes;
+ yyRelHour = -yyRelHour;
+ yyRelDay = -yyRelDay;
+ yyRelMonth = -yyRelMonth;
+ yyRelYear = -yyRelYear;
+ }
+ | relunit
+ ;
+
+relunit : tUNUMBER tYEAR_UNIT {
+ yyRelYear += $1 * $2;
+ }
+ | tSNUMBER tYEAR_UNIT {
+ yyRelYear += $1 * $2;
+ }
+ | tYEAR_UNIT {
+ yyRelYear++;
+ }
+ | tUNUMBER tMONTH_UNIT {
+ yyRelMonth += $1 * $2;
+ }
+ | tSNUMBER tMONTH_UNIT {
+ yyRelMonth += $1 * $2;
+ }
+ | tMONTH_UNIT {
+ yyRelMonth++;
+ }
+ | tUNUMBER tDAY_UNIT {
+ yyRelDay += $1 * $2;
+ }
+ | tSNUMBER tDAY_UNIT {
+ yyRelDay += $1 * $2;
+ }
+ | tDAY_UNIT {
+ yyRelDay++;
+ }
+ | tUNUMBER tHOUR_UNIT {
+ yyRelHour += $1 * $2;
+ }
+ | tSNUMBER tHOUR_UNIT {
+ yyRelHour += $1 * $2;
+ }
+ | tHOUR_UNIT {
+ yyRelHour++;
+ }
+ | tUNUMBER tMINUTE_UNIT {
+ yyRelMinutes += $1 * $2;
+ }
+ | tSNUMBER tMINUTE_UNIT {
+ yyRelMinutes += $1 * $2;
+ }
+ | tMINUTE_UNIT {
+ yyRelMinutes++;
+ }
+ | tUNUMBER tSEC_UNIT {
+ yyRelSeconds += $1 * $2;
+ }
+ | tSNUMBER tSEC_UNIT {
+ yyRelSeconds += $1 * $2;
+ }
+ | tSEC_UNIT {
+ yyRelSeconds++;
+ }
+ ;
+
+number : tUNUMBER
+ {
+ if ((yyHaveTime != 0) && (yyHaveDate != 0) && (yyHaveRel == 0))
+ yyYear = $1;
+ else
+ {
+ if ($1>10000)
+ {
+ yyHaveDate++;
+ yyDay= ($1)%100;
+ yyMonth= ($1/100)%100;
+ yyYear = $1/10000;
+ }
+ else
+ {
+ yyHaveTime++;
+ if ($1 < 100)
+ {
+ yyHour = $1;
+ yyMinutes = 0;
+ }
+ else
+ {
+ yyHour = $1 / 100;
+ yyMinutes = $1 % 100;
+ }
+ yySeconds = 0;
+ yyMeridian = MER24;
+ }
+ }
+ }
+ ;
+
+o_merid : /* NULL */
+ {
+ $$ = MER24;
+ }
+ | tMERIDIAN
+ {
+ $$ = $1;
+ }
+ ;
+
+%%
+
+/* Month and day table. */
+static TABLE const MonthDayTable[] = {
+ { "january", tMONTH, 1 },
+ { "february", tMONTH, 2 },
+ { "march", tMONTH, 3 },
+ { "april", tMONTH, 4 },
+ { "may", tMONTH, 5 },
+ { "june", tMONTH, 6 },
+ { "july", tMONTH, 7 },
+ { "august", tMONTH, 8 },
+ { "september", tMONTH, 9 },
+ { "sept", tMONTH, 9 },
+ { "october", tMONTH, 10 },
+ { "november", tMONTH, 11 },
+ { "december", tMONTH, 12 },
+ { "sunday", tDAY, 0 },
+ { "monday", tDAY, 1 },
+ { "tuesday", tDAY, 2 },
+ { "tues", tDAY, 2 },
+ { "wednesday", tDAY, 3 },
+ { "wednes", tDAY, 3 },
+ { "thursday", tDAY, 4 },
+ { "thur", tDAY, 4 },
+ { "thurs", tDAY, 4 },
+ { "friday", tDAY, 5 },
+ { "saturday", tDAY, 6 },
+ { NULL, 0, 0 }
+};
+
+/* Time units table. */
+static TABLE const UnitsTable[] = {
+ { "year", tYEAR_UNIT, 1 },
+ { "month", tMONTH_UNIT, 1 },
+ { "fortnight", tDAY_UNIT, 14 },
+ { "week", tDAY_UNIT, 7 },
+ { "day", tDAY_UNIT, 1 },
+ { "hour", tHOUR_UNIT, 1 },
+ { "minute", tMINUTE_UNIT, 1 },
+ { "min", tMINUTE_UNIT, 1 },
+ { "second", tSEC_UNIT, 1 },
+ { "sec", tSEC_UNIT, 1 },
+ { NULL, 0, 0 }
+};
+
+/* Assorted relative-time words. */
+static TABLE const OtherTable[] = {
+ { "tomorrow", tMINUTE_UNIT, 1 * 24 * 60 },
+ { "yesterday", tMINUTE_UNIT, -1 * 24 * 60 },
+ { "today", tMINUTE_UNIT, 0 },
+ { "now", tMINUTE_UNIT, 0 },
+ { "last", tUNUMBER, -1 },
+ { "this", tMINUTE_UNIT, 0 },
+ { "next", tUNUMBER, 2 },
+ { "first", tUNUMBER, 1 },
+/* { "second", tUNUMBER, 2 }, */
+ { "third", tUNUMBER, 3 },
+ { "fourth", tUNUMBER, 4 },
+ { "fifth", tUNUMBER, 5 },
+ { "sixth", tUNUMBER, 6 },
+ { "seventh", tUNUMBER, 7 },
+ { "eighth", tUNUMBER, 8 },
+ { "ninth", tUNUMBER, 9 },
+ { "tenth", tUNUMBER, 10 },
+ { "eleventh", tUNUMBER, 11 },
+ { "twelfth", tUNUMBER, 12 },
+ { "ago", tAGO, 1 },
+ { NULL, 0, 0 }
+};
+
+/* The timezone table. */
+static TABLE const TimezoneTable[] = {
+ { "gmt", tZONE, HOUR ( 0) }, /* Greenwich Mean */
+ { "ut", tZONE, HOUR ( 0) }, /* Universal (Coordinated) */
+ { "utc", tZONE, HOUR ( 0) },
+ { "wet", tZONE, HOUR ( 0) }, /* Western European */
+ { "bst", tDAYZONE, HOUR ( 0) }, /* British Summer */
+ { "wat", tZONE, HOUR ( 1) }, /* West Africa */
+ { "at", tZONE, HOUR ( 2) }, /* Azores */
+ { "ast", tZONE, HOUR ( 4) }, /* Atlantic Standard */
+ { "adt", tDAYZONE, HOUR ( 4) }, /* Atlantic Daylight */
+ { "est", tZONE, HOUR ( 5) }, /* Eastern Standard */
+ { "edt", tDAYZONE, HOUR ( 5) }, /* Eastern Daylight */
+ { "cst", tZONE, HOUR ( 6) }, /* Central Standard */
+ { "cdt", tDAYZONE, HOUR ( 6) }, /* Central Daylight */
+ { "mst", tZONE, HOUR ( 7) }, /* Mountain Standard */
+ { "mdt", tDAYZONE, HOUR ( 7) }, /* Mountain Daylight */
+ { "pst", tZONE, HOUR ( 8) }, /* Pacific Standard */
+ { "pdt", tDAYZONE, HOUR ( 8) }, /* Pacific Daylight */
+ { "yst", tZONE, HOUR ( 9) }, /* Yukon Standard */
+ { "ydt", tDAYZONE, HOUR ( 9) }, /* Yukon Daylight */
+ { "hst", tZONE, HOUR (10) }, /* Hawaii Standard */
+ { "hdt", tDAYZONE, HOUR (10) }, /* Hawaii Daylight */
+ { "cat", tZONE, HOUR (10) }, /* Central Alaska */
+ { "ahst", tZONE, HOUR (10) }, /* Alaska-Hawaii Standard */
+ { "nt", tZONE, HOUR (11) }, /* Nome */
+ { "idlw", tZONE, HOUR (12) }, /* International Date Line West */
+ { "cet", tZONE, -HOUR (1) }, /* Central European */
+ { "met", tZONE, -HOUR (1) }, /* Middle European */
+ { "mewt", tZONE, -HOUR (1) }, /* Middle European Winter */
+ { "mest", tDAYZONE, -HOUR (1) }, /* Middle European Summer */
+ { "mesz", tDAYZONE, -HOUR (1) }, /* Middle European Summer */
+ { "swt", tZONE, -HOUR (1) }, /* Swedish Winter */
+ { "sst", tDAYZONE, -HOUR (1) }, /* Swedish Summer */
+ { "fwt", tZONE, -HOUR (1) }, /* French Winter */
+ { "fst", tDAYZONE, -HOUR (1) }, /* French Summer */
+ { "eet", tZONE, -HOUR (2) }, /* Eastern Europe, USSR Zone 1 */
+ { "bt", tZONE, -HOUR (3) }, /* Baghdad, USSR Zone 2 */
+ { "zp4", tZONE, -HOUR (4) }, /* USSR Zone 3 */
+ { "zp5", tZONE, -HOUR (5) }, /* USSR Zone 4 */
+ { "zp6", tZONE, -HOUR (6) }, /* USSR Zone 5 */
+ { "wast", tZONE, -HOUR (7) }, /* West Australian Standard */
+ { "wadt", tDAYZONE, -HOUR (7) }, /* West Australian Daylight */
+ { "cct", tZONE, -HOUR (8) }, /* China Coast, USSR Zone 7 */
+ { "jst", tZONE, -HOUR (9) }, /* Japan Standard, USSR Zone 8 */
+ { "east", tZONE, -HOUR (10) }, /* Eastern Australian Standard */
+ { "eadt", tDAYZONE, -HOUR (10) }, /* Eastern Australian Daylight */
+ { "gst", tZONE, -HOUR (10) }, /* Guam Standard, USSR Zone 9 */
+ { "nzt", tZONE, -HOUR (12) }, /* New Zealand */
+ { "nzst", tZONE, -HOUR (12) }, /* New Zealand Standard */
+ { "nzdt", tDAYZONE, -HOUR (12) }, /* New Zealand Daylight */
+ { "idle", tZONE, -HOUR (12) }, /* International Date Line East */
+ { NULL, 0, 0 }
+};
+
+/* Military timezone table. */
+static TABLE const MilitaryTable[] = {
+ { "a", tZONE, HOUR ( 1) },
+ { "b", tZONE, HOUR ( 2) },
+ { "c", tZONE, HOUR ( 3) },
+ { "d", tZONE, HOUR ( 4) },
+ { "e", tZONE, HOUR ( 5) },
+ { "f", tZONE, HOUR ( 6) },
+ { "g", tZONE, HOUR ( 7) },
+ { "h", tZONE, HOUR ( 8) },
+ { "i", tZONE, HOUR ( 9) },
+ { "k", tZONE, HOUR ( 10) },
+ { "l", tZONE, HOUR ( 11) },
+ { "m", tZONE, HOUR ( 12) },
+ { "n", tZONE, HOUR (- 1) },
+ { "o", tZONE, HOUR (- 2) },
+ { "p", tZONE, HOUR (- 3) },
+ { "q", tZONE, HOUR (- 4) },
+ { "r", tZONE, HOUR (- 5) },
+ { "s", tZONE, HOUR (- 6) },
+ { "t", tZONE, HOUR (- 7) },
+ { "u", tZONE, HOUR (- 8) },
+ { "v", tZONE, HOUR (- 9) },
+ { "w", tZONE, HOUR (-10) },
+ { "x", tZONE, HOUR (-11) },
+ { "y", tZONE, HOUR (-12) },
+ { "z", tZONE, HOUR ( 0) },
+ { NULL, 0, 0 }
+};
+
+
+
+
+static int yyerror (unused const char *s)
+{
+ return 0;
+}
+
+static int ToHour (int Hours, MERIDIAN Meridian)
+{
+ switch (Meridian)
+ {
+ case MER24:
+ if (Hours < 0 || Hours > 23)
+ return -1;
+ return Hours;
+ case MERam:
+ if (Hours < 1 || Hours > 12)
+ return -1;
+ if (Hours == 12)
+ Hours = 0;
+ return Hours;
+ case MERpm:
+ if (Hours < 1 || Hours > 12)
+ return -1;
+ if (Hours == 12)
+ Hours = 0;
+ return Hours + 12;
+ default:
+ abort ();
+ }
+ /* NOTREACHED */
+}
+
+static int ToYear (int Year)
+{
+ if (Year < 0)
+ Year = -Year;
+
+ /* XPG4 suggests that years 00-68 map to 2000-2068, and
+ years 69-99 map to 1969-1999. */
+ if (Year < 69)
+ Year += 2000;
+ else if (Year < 100)
+ Year += 1900;
+
+ return Year;
+}
+
+static int LookupWord (char *buff)
+{
+ register char *p;
+ register char *q;
+ register const TABLE *tp;
+ int i;
+ bool abbrev;
+
+ /* Make it lowercase. */
+ for (p = buff; '\0' != *p; p++)
+ if (ISUPPER (*p))
+ *p = tolower (*p);
+
+ if (strcmp (buff, "am") == 0 || strcmp (buff, "a.m.") == 0)
+ {
+ yylval.Meridian = MERam;
+ return tMERIDIAN;
+ }
+ if (strcmp (buff, "pm") == 0 || strcmp (buff, "p.m.") == 0)
+ {
+ yylval.Meridian = MERpm;
+ return tMERIDIAN;
+ }
+
+ /* See if we have an abbreviation for a month. */
+ if (strlen (buff) == 3)
+ abbrev = true;
+ else if (strlen (buff) == 4 && buff[3] == '.')
+ {
+ abbrev = true;
+ buff[3] = '\0';
+ }
+ else
+ abbrev = false;
+
+ for (tp = MonthDayTable; tp->name; tp++)
+ {
+ if (abbrev)
+ {
+ if (strncmp (buff, tp->name, 3) == 0)
+ {
+ yylval.Number = tp->value;
+ return tp->type;
+ }
+ }
+ else if (strcmp (buff, tp->name) == 0)
+ {
+ yylval.Number = tp->value;
+ return tp->type;
+ }
+ }
+
+ for (tp = TimezoneTable; tp->name; tp++)
+ if (strcmp (buff, tp->name) == 0)
+ {
+ yylval.Number = tp->value;
+ return tp->type;
+ }
+
+ if (strcmp (buff, "dst") == 0)
+ return tDST;
+
+ for (tp = UnitsTable; tp->name; tp++)
+ if (strcmp (buff, tp->name) == 0)
+ {
+ yylval.Number = tp->value;
+ return tp->type;
+ }
+
+ /* Strip off any plural and try the units table again. */
+ i = strlen (buff) - 1;
+ if (buff[i] == 's')
+ {
+ buff[i] = '\0';
+ for (tp = UnitsTable; tp->name; tp++)
+ if (strcmp (buff, tp->name) == 0)
+ {
+ yylval.Number = tp->value;
+ return tp->type;
+ }
+ buff[i] = 's'; /* Put back for "this" in OtherTable. */
+ }
+
+ for (tp = OtherTable; tp->name; tp++)
+ if (strcmp (buff, tp->name) == 0)
+ {
+ yylval.Number = tp->value;
+ return tp->type;
+ }
+
+ /* Military timezones. */
+ if (buff[1] == '\0' && ISALPHA (*buff))
+ {
+ for (tp = MilitaryTable; tp->name; tp++)
+ if (strcmp (buff, tp->name) == 0)
+ {
+ yylval.Number = tp->value;
+ return tp->type;
+ }
+ }
+
+ /* Drop out any periods and try the timezone table again. */
+ for (i = 0, p = q = buff; '\0' != *q; q++)
+ if (*q != '.')
+ *p++ = *q;
+ else
+ i++;
+ *p = '\0';
+ if (0 != i)
+ for (tp = TimezoneTable; NULL != tp->name; tp++)
+ if (strcmp (buff, tp->name) == 0)
+ {
+ yylval.Number = tp->value;
+ return tp->type;
+ }
+
+ return tID;
+}
+
+static int
+yylex (void)
+{
+ register char c;
+ register char *p;
+ char buff[20];
+ int Count;
+ int sign;
+
+ for (;;)
+ {
+ while (ISSPACE (*yyInput))
+ yyInput++;
+
+ if (ISDIGIT (c = *yyInput) || c == '-' || c == '+')
+ {
+ if (c == '-' || c == '+')
+ {
+ sign = c == '-' ? -1 : 1;
+ if (!ISDIGIT (*++yyInput))
+ /* skip the '-' sign */
+ continue;
+ }
+ else
+ sign = 0;
+ for (yylval.Number = 0; ISDIGIT (c = *yyInput++);)
+ yylval.Number = 10 * yylval.Number + c - '0';
+ yyInput--;
+ if (sign < 0)
+ yylval.Number = -yylval.Number;
+ return (0 != sign) ? tSNUMBER : tUNUMBER;
+ }
+ if (ISALPHA (c))
+ {
+ for (p = buff; (c = *yyInput++, ISALPHA (c)) || c == '.';)
+ if (p < &buff[sizeof buff - 1])
+ *p++ = c;
+ *p = '\0';
+ yyInput--;
+ return LookupWord (buff);
+ }
+ if (c != '(')
+ return *yyInput++;
+ Count = 0;
+ do
+ {
+ c = *yyInput++;
+ if (c == '\0')
+ return c;
+ if (c == '(')
+ Count++;
+ else if (c == ')')
+ Count--;
+ }
+ while (Count > 0);
+ }
+}
+
+#define TM_YEAR_ORIGIN 1900
+
+/* Yield A - B, measured in seconds. */
+static long difftm (struct tm *a, struct tm *b)
+{
+ int ay = a->tm_year + (TM_YEAR_ORIGIN - 1);
+ int by = b->tm_year + (TM_YEAR_ORIGIN - 1);
+ long days = (
+ /* difference in day of year */
+ a->tm_yday - b->tm_yday
+ /* + intervening leap days */
+ + ((ay >> 2) - (by >> 2))
+ - (ay / 100 - by / 100)
+ + ((ay / 100 >> 2) - (by / 100 >> 2))
+ /* + difference in years * 365 */
+ + (long) (ay - by) * 365
+ );
+ return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour))
+ + (a->tm_min - b->tm_min))
+ + (a->tm_sec - b->tm_sec));
+}
+
+time_t get_date (const char *p, const time_t *now)
+{
+ struct tm tm, tm0, *tmp;
+ time_t Start;
+
+ yyInput = p;
+ Start = now ? *now : time ((time_t *) NULL);
+ tmp = localtime (&Start);
+ yyYear = tmp->tm_year + TM_YEAR_ORIGIN;
+ yyMonth = tmp->tm_mon + 1;
+ yyDay = tmp->tm_mday;
+ yyHour = tmp->tm_hour;
+ yyMinutes = tmp->tm_min;
+ yySeconds = tmp->tm_sec;
+ yyMeridian = MER24;
+ yyRelSeconds = 0;
+ yyRelMinutes = 0;
+ yyRelHour = 0;
+ yyRelDay = 0;
+ yyRelMonth = 0;
+ yyRelYear = 0;
+ yyHaveDate = 0;
+ yyHaveDay = 0;
+ yyHaveRel = 0;
+ yyHaveTime = 0;
+ yyHaveZone = 0;
+
+ if (yyparse ()
+ || yyHaveTime > 1 || yyHaveZone > 1 || yyHaveDate > 1 || yyHaveDay > 1)
+ return -1;
+
+ tm.tm_year = ToYear (yyYear) - TM_YEAR_ORIGIN + yyRelYear;
+ tm.tm_mon = yyMonth - 1 + yyRelMonth;
+ tm.tm_mday = yyDay + yyRelDay;
+ if ((yyHaveTime != 0) ||
+ ( (yyHaveRel != 0) && (yyHaveDate == 0) && (yyHaveDay == 0) ))
+ {
+ tm.tm_hour = ToHour (yyHour, yyMeridian);
+ if (tm.tm_hour < 0)
+ return -1;
+ tm.tm_min = yyMinutes;
+ tm.tm_sec = yySeconds;
+ }
+ else
+ {
+ tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
+ }
+ tm.tm_hour += yyRelHour;
+ tm.tm_min += yyRelMinutes;
+ tm.tm_sec += yyRelSeconds;
+ tm.tm_isdst = -1;
+ tm0 = tm;
+
+ Start = mktime (&tm);
+
+ if (Start == (time_t) -1)
+ {
+
+ /* Guard against falsely reporting errors near the time_t boundaries
+ when parsing times in other time zones. For example, if the min
+ time_t value is 1970-01-01 00:00:00 UTC and we are 8 hours ahead
+ of UTC, then the min localtime value is 1970-01-01 08:00:00; if
+ we apply mktime to 1970-01-01 00:00:00 we will get an error, so
+ we apply mktime to 1970-01-02 08:00:00 instead and adjust the time
+ zone by 24 hours to compensate. This algorithm assumes that
+ there is no DST transition within a day of the time_t boundaries. */
+ if (yyHaveZone)
+ {
+ tm = tm0;
+ if (tm.tm_year <= EPOCH - TM_YEAR_ORIGIN)
+ {
+ tm.tm_mday++;
+ yyTimezone -= 24 * 60;
+ }
+ else
+ {
+ tm.tm_mday--;
+ yyTimezone += 24 * 60;
+ }
+ Start = mktime (&tm);
+ }
+
+ if (Start == (time_t) -1)
+ return Start;
+ }
+
+ if (yyHaveDay && !yyHaveDate)
+ {
+ tm.tm_mday += ((yyDayNumber - tm.tm_wday + 7) % 7
+ + 7 * (yyDayOrdinal - (0 < yyDayOrdinal)));
+ Start = mktime (&tm);
+ if (Start == (time_t) -1)
+ return Start;
+ }
+
+ if (yyHaveZone)
+ {
+ long delta = yyTimezone * 60L + difftm (&tm, gmtime (&Start));
+ if ((Start + delta < Start) != (delta < 0))
+ return -1; /* time_t overflow */
+ Start += delta;
+ }
+
+ return Start;
+}
+
+#if defined (TEST)
+
+/* ARGSUSED */
+int
+main (ac, av)
+ int ac;
+ char *av[];
+{
+ char buff[MAX_BUFF_LEN + 1];
+ time_t d;
+
+ (void) printf ("Enter date, or blank line to exit.\n\t> ");
+ (void) fflush (stdout);
+
+ buff[MAX_BUFF_LEN] = 0;
+ while (fgets (buff, MAX_BUFF_LEN, stdin) && buff[0])
+ {
+ d = get_date (buff, (time_t *) NULL);
+ if (d == -1)
+ (void) printf ("Bad format - couldn't convert.\n");
+ else
+ (void) printf ("%s", ctime (&d));
+ (void) printf ("\t> ");
+ (void) fflush (stdout);
+ }
+ exit (0);
+ /* NOTREACHED */
+}
+#endif /* defined (TEST) */
diff --git a/libmisc/getgr_nam_gid.c b/libmisc/getgr_nam_gid.c
new file mode 100644
index 0000000..027280a
--- /dev/null
+++ b/libmisc/getgr_nam_gid.c
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * 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.
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include <stdlib.h>
+#include <errno.h>
+#include <grp.h>
+#include "prototypes.h"
+
+/*
+ * getgr_nam_gid - Return a pointer to the group specified by a string.
+ * The string may be a valid GID or a valid groupname.
+ * If the group does not exist on the system, NULL is returned.
+ */
+extern /*@only@*//*@null@*/struct group *getgr_nam_gid (/*@null@*/const char *grname)
+{
+ long long int gid;
+ char *endptr;
+
+ if (NULL == grname) {
+ return NULL;
+ }
+
+ errno = 0;
+ gid = strtoll (grname, &endptr, 10);
+ if ( ('\0' != *grname)
+ && ('\0' == *endptr)
+ && (ERANGE != errno)
+ && (/*@+longintegral@*/gid == (gid_t)gid)/*@=longintegral@*/) {
+ return xgetgrgid ((gid_t) gid);
+ }
+ return xgetgrnam (grname);
+}
+
diff --git a/libmisc/getrange.c b/libmisc/getrange.c
new file mode 100644
index 0000000..9b5e611
--- /dev/null
+++ b/libmisc/getrange.c
@@ -0,0 +1,124 @@
+/*
+ * Copyright (c) 2008 , 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 <ctype.h>
+#include <stdlib.h>
+
+#include "defines.h"
+#include "prototypes.h"
+
+/*
+ * Parse a range and indicate if the range is valid.
+ * Valid ranges are in the form:
+ * <long> -> min=max=long has_min has_max
+ * -<long> -> max=long !has_min has_max
+ * <long>- -> min=long has_min !has_max
+ * <long1>-<long2> -> min=long1 max=long2 has_min has_max
+ *
+ * If the range is valid, getrange returns 1.
+ * If the range is not valid, getrange returns 0.
+ */
+int getrange (char *range,
+ unsigned long *min, bool *has_min,
+ unsigned long *max, bool *has_max)
+{
+ char *endptr;
+ unsigned long n;
+
+ if (NULL == range) {
+ return 0;
+ }
+
+ if ('-' == range[0]) {
+ if (!isdigit(range[1])) {
+ /* invalid */
+ return 0;
+ }
+ errno = 0;
+ n = strtoul (&range[1], &endptr, 10);
+ if (('\0' != *endptr) || (ERANGE == errno)) {
+ /* invalid */
+ return 0;
+ }
+ /* -<long> */
+ *has_min = false;
+ *has_max = true;
+ *max = n;
+ } else {
+ errno = 0;
+ n = strtoul (range, &endptr, 10);
+ if (ERANGE == errno) {
+ /* invalid */
+ return 0;
+ }
+ switch (*endptr) {
+ case '\0':
+ /* <long> */
+ *has_min = true;
+ *has_max = true;
+ *min = n;
+ *max = n;
+ break;
+ case '-':
+ endptr++;
+ if ('\0' == *endptr) {
+ /* <long>- */
+ *has_min = true;
+ *has_max = false;
+ *min = n;
+ } else if (!isdigit (*endptr)) {
+ /* invalid */
+ return 0;
+ } else {
+ *has_min = true;
+ *min = n;
+ errno = 0;
+ n = strtoul (endptr, &endptr, 10);
+ if ( ('\0' != *endptr)
+ || (ERANGE == errno)) {
+ /* invalid */
+ return 0;
+ }
+ /* <long>-<long> */
+ *has_max = true;
+ *max = n;
+ }
+ break;
+ default:
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
diff --git a/libmisc/gettime.c b/libmisc/gettime.c
new file mode 100644
index 0000000..0e25a4b
--- /dev/null
+++ b/libmisc/gettime.c
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2017, Chris Lamb
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ * endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include <errno.h>
+#include <limits.h>
+#include <stdio.h>
+#include "defines.h"
+#include "prototypes.h"
+
+/*
+ * gettime() returns the time as the number of seconds since the Epoch
+ *
+ * Like time(), gettime() returns the time as the number of seconds since the
+ * Epoch, 1970-01-01 00:00:00 +0000 (UTC), except that if the SOURCE_DATE_EPOCH
+ * environment variable is exported it will use that instead.
+ */
+/*@observer@*/time_t gettime ()
+{
+ char *endptr;
+ char *source_date_epoch;
+ time_t fallback;
+ unsigned long long epoch;
+
+ fallback = time (NULL);
+ source_date_epoch = shadow_getenv ("SOURCE_DATE_EPOCH");
+
+ if (!source_date_epoch)
+ return fallback;
+
+ errno = 0;
+ epoch = strtoull (source_date_epoch, &endptr, 10);
+ if ((errno == ERANGE && (epoch == ULLONG_MAX || epoch == 0))
+ || (errno != 0 && epoch == 0)) {
+ fprintf (stderr,
+ _("Environment variable $SOURCE_DATE_EPOCH: strtoull: %s\n"),
+ strerror(errno));
+ } else if (endptr == source_date_epoch) {
+ fprintf (stderr,
+ _("Environment variable $SOURCE_DATE_EPOCH: No digits were found: %s\n"),
+ endptr);
+ } else if (*endptr != '\0') {
+ fprintf (stderr,
+ _("Environment variable $SOURCE_DATE_EPOCH: Trailing garbage: %s\n"),
+ endptr);
+ } else if (epoch > ULONG_MAX) {
+ fprintf (stderr,
+ _("Environment variable $SOURCE_DATE_EPOCH: value must be smaller than or equal to %lu but was found to be: %llu\n"),
+ ULONG_MAX, epoch);
+ } else if (epoch > fallback) {
+ fprintf (stderr,
+ _("Environment variable $SOURCE_DATE_EPOCH: value must be smaller than or equal to the current time (%lu) but was found to be: %llu\n"),
+ fallback, epoch);
+ } else {
+ /* Valid */
+ return (time_t)epoch;
+ }
+
+ return fallback;
+}
diff --git a/libmisc/hushed.c b/libmisc/hushed.c
new file mode 100644
index 0000000..b71b99c
--- /dev/null
+++ b/libmisc/hushed.c
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ * Copyright (c) 1991 - 1993, Chip Rosenthal
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008 - 2010, 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 <sys/types.h>
+#include <stdio.h>
+#include <pwd.h>
+#include "defines.h"
+#include "prototypes.h"
+#include "getdef.h"
+/*
+ * hushed - determine if a user receives login messages
+ *
+ * Look in the hushed-logins file (or user's home directory) to see
+ * if the user is to receive the login-time messages.
+ */
+bool hushed (const char *username)
+{
+ struct passwd *pw;
+ const char *hushfile;
+ char buf[BUFSIZ];
+ bool found;
+ FILE *fp;
+
+ /*
+ * Get the name of the file to use. If this option is not
+ * defined, default to a noisy login.
+ */
+
+ hushfile = getdef_str ("HUSHLOGIN_FILE");
+ if (NULL == hushfile) {
+ return false;
+ }
+
+ pw = getpwnam (username);
+ if (NULL == pw) {
+ return false;
+ }
+
+ /*
+ * If this is not a fully rooted path then see if the
+ * file exists in the user's home directory.
+ */
+
+ if (hushfile[0] != '/') {
+ (void) snprintf (buf, sizeof (buf), "%s/%s", pw->pw_dir, hushfile);
+ return (access (buf, F_OK) == 0);
+ }
+
+ /*
+ * If this is a fully rooted path then go through the file
+ * and see if this user, or its shell is in there.
+ */
+
+ fp = fopen (hushfile, "r");
+ if (NULL == fp) {
+ return false;
+ }
+ for (found = false; !found && (fgets (buf, (int) sizeof buf, fp) == buf);) {
+ buf[strlen (buf) - 1] = '\0';
+ found = (strcmp (buf, pw->pw_shell) == 0) ||
+ (strcmp (buf, pw->pw_name) == 0);
+ }
+ (void) fclose (fp);
+ return found;
+}
+
diff --git a/libmisc/idmapping.c b/libmisc/idmapping.c
new file mode 100644
index 0000000..aea9493
--- /dev/null
+++ b/libmisc/idmapping.c
@@ -0,0 +1,219 @@
+/*
+ * Copyright (c) 2013 Eric Biederman
+ * 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>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <limits.h>
+#include <stdlib.h>
+#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)
+{
+ struct map_range *mappings, *mapping;
+ int idx, argidx;
+
+ if (ranges < 0 || argc < 0) {
+ fprintf(stderr, "%s: error calculating number of arguments\n", Prog);
+ return NULL;
+ }
+
+ if (ranges != ((argc + 2) / 3)) {
+ fprintf(stderr, "%s: ranges: %u is wrong for argc: %d\n", Prog, ranges, argc);
+ return NULL;
+ }
+
+ if ((ranges * 3) > argc) {
+ fprintf(stderr, "ranges: %u argc: %d\n",
+ ranges, argc);
+ fprintf(stderr,
+ _( "%s: Not enough arguments to form %u mappings\n"),
+ Prog, ranges);
+ return NULL;
+ }
+
+ mappings = calloc(ranges, sizeof(*mappings));
+ if (!mappings) {
+ fprintf(stderr, _( "%s: Memory allocation failure\n"),
+ Prog);
+ exit(EXIT_FAILURE);
+ }
+
+ /* Gather up the ranges from the command line */
+ mapping = mappings;
+ for (idx = 0, argidx = 0; idx < ranges; idx++, argidx += 3, mapping++) {
+ if (!getulong(argv[argidx + 0], &mapping->upper)) {
+ free(mappings);
+ return NULL;
+ }
+ if (!getulong(argv[argidx + 1], &mapping->lower)) {
+ free(mappings);
+ return NULL;
+ }
+ if (!getulong(argv[argidx + 2], &mapping->count)) {
+ free(mappings);
+ return NULL;
+ }
+ if (ULONG_MAX - mapping->upper <= mapping->count || ULONG_MAX - mapping->lower <= mapping->count) {
+ fprintf(stderr, _( "%s: subuid overflow detected.\n"), Prog);
+ exit(EXIT_FAILURE);
+ }
+ if (mapping->upper > UINT_MAX ||
+ mapping->lower > UINT_MAX ||
+ mapping->count > UINT_MAX) {
+ fprintf(stderr, _( "%s: subuid overflow detected.\n"), Prog);
+ exit(EXIT_FAILURE);
+ }
+ if (mapping->lower + mapping->count > UINT_MAX ||
+ mapping->upper + mapping->count > UINT_MAX) {
+ fprintf(stderr, _( "%s: subuid overflow detected.\n"), Prog);
+ exit(EXIT_FAILURE);
+ }
+ if (mapping->lower + mapping->count < mapping->lower ||
+ mapping->upper + mapping->count < mapping->upper) {
+ /* this one really shouldn't be possible given previous checks */
+ fprintf(stderr, _( "%s: subuid overflow detected.\n"), Prog);
+ exit(EXIT_FAILURE);
+ }
+ }
+ return mappings;
+}
+
+/* Number of ascii digits needed to print any unsigned long in decimal.
+ * There are approximately 10 bits for every 3 decimal digits.
+ * So from bits to digits the formula is roundup((Number of bits)/10) * 3.
+ * For common sizes of integers this works out to:
+ * 2bytes --> 6 ascii estimate -> 65536 (5 real)
+ * 4bytes --> 12 ascii estimated -> 4294967296 (10 real)
+ * 8bytes --> 21 ascii estimated -> 18446744073709551616 (20 real)
+ * 16bytes --> 39 ascii estimated -> 340282366920938463463374607431768211456 (39 real)
+ */
+#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, uid_t ruid)
+{
+ int idx;
+ struct map_range *mapping;
+ size_t bufsize;
+ 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);
+
+ /* Build the mapping command */
+ mapping = mappings;
+ for (idx = 0; idx < ranges; idx++, mapping++) {
+ /* Append this range to the string that will be written */
+ int written = snprintf(pos, bufsize - (pos - buf),
+ "%lu %lu %lu\n",
+ mapping->upper,
+ mapping->lower,
+ mapping->count);
+ if ((written <= 0) || (written >= (bufsize - (pos - buf)))) {
+ fprintf(stderr, _("%s: snprintf failed!\n"), Prog);
+ exit(EXIT_FAILURE);
+ }
+ pos += written;
+ }
+
+ /* 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"),
+ Prog, map_file, strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ if (write(fd, buf, pos - buf) != (pos - buf)) {
+ fprintf(stderr, _("%s: write to %s failed: %s\n"),
+ Prog, map_file, strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ close(fd);
+}
diff --git a/libmisc/idmapping.h b/libmisc/idmapping.h
new file mode 100644
index 0000000..3f32db6
--- /dev/null
+++ b/libmisc/idmapping.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2013 Eric Biederman
+ * 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.
+ */
+
+#ifndef _IDMAPPING_H_
+#define _IDMAPPING_H_
+
+struct map_range {
+ unsigned long upper; /* first ID inside the namespace */
+ unsigned long lower; /* first ID outside the namespace */
+ unsigned long count; /* Length of the inside and outside ranges */
+};
+
+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, uid_t ruid);
+
+#endif /* _ID_MAPPING_H_ */
+
diff --git a/libmisc/isexpired.c b/libmisc/isexpired.c
new file mode 100644
index 0000000..8e8a645
--- /dev/null
+++ b/libmisc/isexpired.c
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008 - 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.
+ */
+
+/*
+ * Extracted from age.c and made part of libshadow.a - may be useful
+ * in other shadow-aware programs. --marekm
+ */
+
+#include <config.h>
+
+#include <sys/types.h>
+#include "prototypes.h"
+#include "defines.h"
+#include <pwd.h>
+#include <time.h>
+
+#ident "$Id$"
+
+
+/*
+ * isexpired - determine if account is expired yet
+ *
+ * isexpired calculates the expiration date based on the
+ * password expiration criteria.
+ *
+ * Return value:
+ * 0: The password is still valid
+ * 1: The password has expired, it must be changed
+ * 2: The password has expired since a long time and the account is
+ * now disabled. (password cannot be changed)
+ * 3: The account has expired
+ */
+int isexpired (const struct passwd *pw, /*@null@*/const struct spwd *sp)
+{
+ long now;
+
+ now = (long) time ((time_t *) 0) / SCALE;
+
+ if (NULL == sp) {
+ return 0;
+ }
+
+ /*
+ * Quick and easy - there is an expired account field
+ * along with an inactive account field. Do the expired
+ * one first since it is worse.
+ */
+
+ if ((sp->sp_expire > 0) && (now >= sp->sp_expire)) {
+ return 3;
+ }
+
+ /*
+ * Last changed date 1970-01-01 (not very likely) means that
+ * the password must be changed on next login (passwd -e).
+ *
+ * The check for "x" is a workaround for RedHat NYS libc bug -
+ * if /etc/shadow doesn't exist, getspnam() still succeeds and
+ * returns sp_lstchg==0 (must change password) instead of -1!
+ */
+ if ( (0 == sp->sp_lstchg)
+ && (strcmp (pw->pw_passwd, SHADOW_PASSWD_STRING) == 0)) {
+ return 1;
+ }
+
+ if ( (sp->sp_lstchg > 0)
+ && (sp->sp_max >= 0)
+ && (sp->sp_inact >= 0)
+ && (now >= (sp->sp_lstchg + sp->sp_max + sp->sp_inact))) {
+ return 2;
+ }
+
+ /*
+ * The last and max fields must be present for an account
+ * to have an expired password. A maximum of >10000 days
+ * is considered to be infinite.
+ */
+
+ if ( (-1 == sp->sp_lstchg)
+ || (-1 == sp->sp_max)
+ || (sp->sp_max >= ((10000L * DAY) / SCALE))) {
+ return 0;
+ }
+
+ /*
+ * Calculate today's day and the day on which the password
+ * is going to expire. If that date has already passed,
+ * the password has expired.
+ */
+
+ if (now >= (sp->sp_lstchg + sp->sp_max)) {
+ return 1;
+ }
+ return 0;
+}
+
diff --git a/libmisc/limits.c b/libmisc/limits.c
new file mode 100644
index 0000000..f40e171
--- /dev/null
+++ b/libmisc/limits.c
@@ -0,0 +1,611 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1999, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2010, 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.
+ */
+
+/*
+ * Separated from setup.c. --marekm
+ * Resource limits thanks to Cristian Gafton.
+ * Enhancements of resource limit code by Thomas Orgis <thomas@orgis.org>
+ */
+
+#include <config.h>
+
+#ifndef USE_PAM
+
+#ident "$Id$"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <ctype.h>
+#include "prototypes.h"
+#include "defines.h"
+#include <pwd.h>
+#include "getdef.h"
+#ifdef HAVE_SYS_RESOURCE_H
+#include <sys/resource.h>
+#define LIMITS
+#endif
+#ifdef LIMITS
+#ifndef LIMITS_FILE
+#define LIMITS_FILE "/etc/limits"
+#endif
+#define LOGIN_ERROR_RLIMIT 1
+#define LOGIN_ERROR_LOGIN 2
+/* Set a limit on a resource */
+/*
+ * rlimit - RLIMIT_XXXX
+ * value - string value to be read
+ * multiplier - value*multiplier is the actual limit
+ */
+static int setrlimit_value (unsigned int resource,
+ const char *value,
+ unsigned int multiplier)
+{
+ struct rlimit rlim;
+ rlim_t limit;
+
+ /* The "-" is special, not belonging to a strange negative limit.
+ * It is infinity, in a controlled way.
+ */
+ if ('-' == value[0]) {
+ limit = RLIM_INFINITY;
+ }
+ else {
+ /* We cannot use getlong here because it fails when there
+ * is more to the value than just this number!
+ * Also, we are limited to base 10 here (hex numbers will not
+ * work with the limit string parser as is anyway)
+ */
+ char *endptr;
+ long longlimit = strtol (value, &endptr, 10);
+ if ((0 == longlimit) && (value == endptr)) {
+ /* No argument at all. No-op.
+ * FIXME: We could instead throw an error, though.
+ */
+ return 0;
+ }
+ longlimit *= multiplier;
+ limit = (rlim_t)longlimit;
+ if (longlimit != limit)
+ {
+ /* FIXME: Again, silent error handling...
+ * Wouldn't screaming make more sense?
+ */
+ return 0;
+ }
+ }
+
+ rlim.rlim_cur = limit;
+ rlim.rlim_max = limit;
+ if (setrlimit (resource, &rlim) != 0) {
+ return LOGIN_ERROR_RLIMIT;
+ }
+ return 0;
+}
+
+
+static int set_prio (const char *value)
+{
+ long prio;
+
+ if ( (getlong (value, &prio) == 0)
+ || (prio != (int) prio)) {
+ return 0;
+ }
+ if (setpriority (PRIO_PROCESS, 0, (int) prio) != 0) {
+ return LOGIN_ERROR_RLIMIT;
+ }
+ return 0;
+}
+
+
+static int set_umask (const char *value)
+{
+ unsigned long int mask;
+
+ if ( (getulong (value, &mask) == 0)
+ || (mask != (mode_t) mask)) {
+ return 0;
+ }
+
+ (void) umask ((mode_t) mask);
+ return 0;
+}
+
+
+/* Counts the number of user logins and check against the limit */
+static int check_logins (const char *name, const char *maxlogins)
+{
+#ifdef USE_UTMPX
+ struct utmpx *ut;
+#else /* !USE_UTMPX */
+ struct utmp *ut;
+#endif /* !USE_UTMPX */
+ unsigned long limit, count;
+
+ if (getulong (maxlogins, &limit) == 0) {
+ return 0;
+ }
+
+ if (0 == limit) { /* maximum 0 logins ? */
+ SYSLOG ((LOG_WARN, "No logins allowed for `%s'\n", name));
+ return LOGIN_ERROR_LOGIN;
+ }
+
+ count = 0;
+#ifdef USE_UTMPX
+ setutxent ();
+ while ((ut = getutxent ()))
+#else /* !USE_UTMPX */
+ setutent ();
+ while ((ut = getutent ()))
+#endif /* !USE_UTMPX */
+ {
+ if (USER_PROCESS != ut->ut_type) {
+ continue;
+ }
+ if ('\0' == ut->ut_user[0]) {
+ continue;
+ }
+ if (strncmp (name, ut->ut_user, sizeof (ut->ut_user)) != 0) {
+ continue;
+ }
+ count++;
+ if (count > limit) {
+ break;
+ }
+ }
+#ifdef USE_UTMPX
+ endutxent ();
+#else /* !USE_UTMPX */
+ endutent ();
+#endif /* !USE_UTMPX */
+ /*
+ * This is called after setutmp(), so the number of logins counted
+ * includes the user who is currently trying to log in.
+ */
+ if (count > limit) {
+ SYSLOG ((LOG_WARN,
+ "Too many logins (max %lu) for %s\n",
+ limit, name));
+ return LOGIN_ERROR_LOGIN;
+ }
+ return 0;
+}
+
+/* Function setup_user_limits - checks/set limits for the curent login
+ * Original idea from Joel Katz's lshell. Ported to shadow-login
+ * by Cristian Gafton - gafton@sorosis.ro
+ *
+ * We are passed a string of the form ('BASH' constants for ulimit)
+ * [Aa][Cc][Dd][Ff][Mm][Nn][Rr][Ss][Tt][Uu][Ll][Pp][Ii][Oo]
+ * (eg. 'C2F256D2048N5' or 'C2 F256 D2048 N5')
+ * where:
+ * [Aa]: a = RLIMIT_AS max address space (KB)
+ * [Cc]: c = RLIMIT_CORE max core file size (KB)
+ * [Dd]: d = RLIMIT_DATA max data size (KB)
+ * [Ff]: f = RLIMIT_FSIZE max file size (KB)
+ * [Ii]: i = RLIMIT_NICE max nice value (0..39 translates to 20..-19)
+ * [Kk]: k = file creation masK (umask)
+ * [Ll]: l = max number of logins for this user
+ * [Mm]: m = RLIMIT_MEMLOCK max locked-in-memory address space (KB)
+ * [Nn]: n = RLIMIT_NOFILE max number of open files
+ * [Oo]: o = RLIMIT_RTPRIO max real time priority (linux/sched.h 0..MAX_RT_PRIO)
+ * [Pp]: p = process priority -20..20 (negative = high, positive = low)
+ * [Rr]: r = RLIMIT_RSS max resident set size (KB)
+ * [Ss]: s = RLIMIT_STACK max stack size (KB)
+ * [Tt]: t = RLIMIT_CPU max CPU time (MIN)
+ * [Uu]: u = RLIMIT_NPROC max number of processes
+ *
+ * NOTE: Remember to extend the "no-limits" string below when adding a new
+ * limit...
+ *
+ * Return value:
+ * 0 = okay, of course
+ * LOGIN_ERROR_RLIMIT = error setting some RLIMIT
+ * LOGIN_ERROR_LOGIN = error - too many logins for this user
+ *
+ * buf - the limits string
+ * name - the username
+ */
+static int do_user_limits (const char *buf, const char *name)
+{
+ const char *pp;
+ int retval = 0;
+ bool reported = false;
+
+ pp = buf;
+ /* Skip leading whitespace. */
+ while ((' ' == *pp) || ('\t' == *pp)) {
+ pp++;
+ }
+
+ /* The special limit string "-" results in no limit for all known
+ * limits.
+ * We achieve that by parsing a full limit string, parts of it
+ * being ignored if a limit type is not known to the system.
+ * Though, there will be complaining for unknown limit types.
+ */
+ if (strcmp (pp, "-") == 0) {
+ /* Remember to extend this, too, when adding new limits!
+ * Oh... but "unlimited" does not make sense for umask,
+ * or does it? (K-)
+ */
+ pp = "A- C- D- F- I- L- M- N- O- P- R- S- T- U-";
+ }
+
+ while ('\0' != *pp) {
+ switch (*pp++) {
+#ifdef RLIMIT_AS
+ case 'a':
+ case 'A':
+ /* RLIMIT_AS - max address space (KB) */
+ retval |= setrlimit_value (RLIMIT_AS, pp, 1024);
+ break;
+#endif
+#ifdef RLIMIT_CORE
+ case 'c':
+ case 'C':
+ /* RLIMIT_CORE - max core file size (KB) */
+ retval |= setrlimit_value (RLIMIT_CORE, pp, 1024);
+ break;
+#endif
+#ifdef RLIMIT_DATA
+ case 'd':
+ case 'D':
+ /* RLIMIT_DATA - max data size (KB) */
+ retval |= setrlimit_value (RLIMIT_DATA, pp, 1024);
+ break;
+#endif
+#ifdef RLIMIT_FSIZE
+ case 'f':
+ case 'F':
+ /* RLIMIT_FSIZE - Maximum filesize (KB) */
+ retval |= setrlimit_value (RLIMIT_FSIZE, pp, 1024);
+ break;
+#endif
+#ifdef RLIMIT_NICE
+ case 'i':
+ case 'I':
+ /* RLIMIT_NICE - max scheduling priority (0..39) */
+ retval |= setrlimit_value (RLIMIT_NICE, pp, 1);
+ break;
+#endif
+ case 'k':
+ case 'K':
+ retval |= set_umask (pp);
+ break;
+ case 'l':
+ case 'L':
+ /* LIMIT the number of concurrent logins */
+ retval |= check_logins (name, pp);
+ break;
+#ifdef RLIMIT_MEMLOCK
+ case 'm':
+ case 'M':
+ /* RLIMIT_MEMLOCK - max locked-in-memory address space (KB) */
+ retval |= setrlimit_value (RLIMIT_MEMLOCK, pp, 1024);
+ break;
+#endif
+#ifdef RLIMIT_NOFILE
+ case 'n':
+ case 'N':
+ /* RLIMIT_NOFILE - max number of open files */
+ retval |= setrlimit_value (RLIMIT_NOFILE, pp, 1);
+ break;
+#endif
+#ifdef RLIMIT_RTPRIO
+ case 'o':
+ case 'O':
+ /* RLIMIT_RTPRIO - max real time priority (0..MAX_RT_PRIO) */
+ retval |= setrlimit_value (RLIMIT_RTPRIO, pp, 1);
+ break;
+#endif
+ case 'p':
+ case 'P':
+ retval |= set_prio (pp);
+ break;
+#ifdef RLIMIT_RSS
+ case 'r':
+ case 'R':
+ /* RLIMIT_RSS - max resident set size (KB) */
+ retval |= setrlimit_value (RLIMIT_RSS, pp, 1024);
+ break;
+#endif
+#ifdef RLIMIT_STACK
+ case 's':
+ case 'S':
+ /* RLIMIT_STACK - max stack size (KB) */
+ retval |= setrlimit_value (RLIMIT_STACK, pp, 1024);
+ break;
+#endif
+#ifdef RLIMIT_CPU
+ case 't':
+ case 'T':
+ /* RLIMIT_CPU - max CPU time (MIN) */
+ retval |= setrlimit_value (RLIMIT_CPU, pp, 60);
+ break;
+#endif
+#ifdef RLIMIT_NPROC
+ case 'u':
+ case 'U':
+ /* RLIMIT_NPROC - max number of processes */
+ retval |= setrlimit_value (RLIMIT_NPROC, pp, 1);
+ break;
+#endif
+ default:
+ /* Only report invalid strings once */
+ /* Note: A string can be invalid just because a
+ * specific (theoretically valid) setting is not
+ * supported by this build.
+ * It is just a warning in syslog anyway. The line
+ * is still processed
+ */
+ if (!reported) {
+ SYSLOG ((LOG_WARN,
+ "Invalid limit string: '%s'",
+ pp-1));
+ reported = true;
+ retval |= LOGIN_ERROR_RLIMIT;
+ }
+ }
+ /* After parsing one limit setting (or just complaining
+ * about it), one still needs to skip its argument to
+ * prevent a bogus warning on trying to parse that as
+ * limit specification.
+ * So, let's skip all digits, "-" and our limited set of
+ * whitespace.
+ */
+ while ( isdigit (*pp)
+ || ('-' == *pp)
+ || (' ' == *pp)
+ || ('\t' ==*pp)) {
+ pp++;
+ }
+ }
+ return retval;
+}
+
+/* Check if user uname is in the group gname.
+ * Can I be sure that gr_mem contains no UID as string?
+ * Returns true when user is in the group, false when not.
+ * Any error is treated as false.
+ */
+static bool user_in_group (const char *uname, const char *gname)
+{
+ struct group *groupdata;
+
+ if (uname == NULL || gname == NULL){
+ return false;
+ }
+
+ /* We are not claiming to be re-entrant!
+ * In case of paranoia or a multithreaded login program,
+ * one needs to add some mess for getgrnam_r. */
+ groupdata = getgrnam (gname);
+ if (NULL == groupdata) {
+ SYSLOG ((LOG_WARN, "Nonexisting group `%s' in limits file.",
+ gname));
+ return false;
+ }
+
+ return is_on_list (groupdata->gr_mem, uname);
+}
+
+static int setup_user_limits (const char *uname)
+{
+ FILE *fil;
+ char buf[1024];
+ char name[1024];
+ char limits[1024];
+ char deflimits[1024];
+ char tempbuf[1024];
+
+ /* init things */
+ memzero (buf, sizeof (buf));
+ memzero (name, sizeof (name));
+ memzero (limits, sizeof (limits));
+ memzero (deflimits, sizeof (deflimits));
+ memzero (tempbuf, sizeof (tempbuf));
+
+ /* start the checks */
+ fil = fopen (LIMITS_FILE, "r");
+ if (fil == NULL) {
+ return 0;
+ }
+ /* The limits file have the following format:
+ * - '#' (comment) chars only as first chars on a line;
+ * - username must start on first column (or *, or @group)
+ *
+ * FIXME: A better (smarter) checking should be done
+ */
+ while (fgets (buf, 1024, fil) != NULL) {
+ if (('#' == buf[0]) || ('\n' == buf[0])) {
+ continue;
+ }
+ memzero (tempbuf, sizeof (tempbuf));
+ /* a valid line should have a username, then spaces,
+ * then limits
+ * we allow the format:
+ * username L2 D2048 R4096
+ * where spaces={' ',\t}. Also, we reject invalid limits.
+ * Imposing a limit should be done with care, so a wrong
+ * entry means no care anyway :-).
+ *
+ * A '-' as a limits strings means no limits
+ *
+ * The username can also be:
+ * '*': the default limits (only the last is taken into
+ * account)
+ * @group: the limit applies to the members of the group
+ *
+ * To clarify: The first entry with matching user name rules,
+ * everything after it is ignored. If there is no user entry,
+ * the last encountered entry for a matching group rules.
+ * If there is no matching group entry, the default limits rule.
+ */
+ if (sscanf (buf, "%s%[ACDFIKLMNOPRSTUacdfiklmnoprstu0-9 \t-]",
+ name, tempbuf) == 2) {
+ if (strcmp (name, uname) == 0) {
+ strcpy (limits, tempbuf);
+ break;
+ } else if (strcmp (name, "*") == 0) {
+ strcpy (deflimits, tempbuf);
+ } else if (name[0] == '@') {
+ /* If the user is in the group, the group
+ * limits apply unless later a line for
+ * the specific user is found.
+ */
+ if (user_in_group (uname, name+1)) {
+ strcpy (limits, tempbuf);
+ }
+ }
+ }
+ }
+ (void) fclose (fil);
+ if (limits[0] == '\0') {
+ /* no user specific limits */
+ if (deflimits[0] == '\0') { /* no default limits */
+ return 0;
+ }
+ strcpy (limits, deflimits); /* use the default limits */
+ }
+ return do_user_limits (limits, uname);
+}
+#endif /* LIMITS */
+
+
+static void setup_usergroups (const struct passwd *info)
+{
+ const struct group *grp;
+
+/*
+ * if not root, and UID == GID, and username is the same as primary
+ * group name, set umask group bits to be the same as owner bits
+ * (examples: 022 -> 002, 077 -> 007).
+ */
+ if ((0 != info->pw_uid) && (info->pw_uid == info->pw_gid)) {
+ /* local, no need for xgetgrgid */
+ grp = getgrgid (info->pw_gid);
+ if ( (NULL != grp)
+ && (strcmp (info->pw_name, grp->gr_name) == 0)) {
+ mode_t tmpmask;
+ tmpmask = umask (0777);
+ tmpmask = (tmpmask & ~070) | ((tmpmask >> 3) & 070);
+ (void) umask (tmpmask);
+ }
+ }
+}
+
+/*
+ * set the process nice, ulimit, and umask from the password file entry
+ */
+
+void setup_limits (const struct passwd *info)
+{
+ char *cp;
+
+ if (getdef_bool ("USERGROUPS_ENAB")) {
+ setup_usergroups (info);
+ }
+
+ /*
+ * See if the GECOS field contains values for NICE, UMASK or ULIMIT.
+ * If this feature is enabled in /etc/login.defs, we make those
+ * values the defaults for this login session.
+ */
+
+ if (getdef_bool ("QUOTAS_ENAB")) {
+#ifdef LIMITS
+ if (info->pw_uid != 0) {
+ if ((setup_user_limits (info->pw_name) & LOGIN_ERROR_LOGIN) != 0) {
+ (void) fputs (_("Too many logins.\n"), stderr);
+ (void) sleep (2); /* XXX: Should be FAIL_DELAY */
+ exit (EXIT_FAILURE);
+ }
+ }
+#endif
+ for (cp = info->pw_gecos; cp != NULL; cp = strchr (cp, ',')) {
+ if (',' == *cp) {
+ cp++;
+ }
+
+ if (strncmp (cp, "pri=", 4) == 0) {
+ long int inc;
+ if ( (getlong (cp + 4, &inc) == 1)
+ && (inc >= -20) && (inc <= 20)) {
+ errno = 0;
+ if ( (nice ((int) inc) != -1)
+ || (0 != errno)) {
+ continue;
+ }
+ }
+
+ /* Failed to parse or failed to nice() */
+ SYSLOG ((LOG_WARN,
+ "Can't set the nice value for user %s",
+ info->pw_name));
+
+ continue;
+ }
+ if (strncmp (cp, "ulimit=", 7) == 0) {
+ long int blocks;
+ if ( (getlong (cp + 7, &blocks) == 0)
+ || (blocks != (int) blocks)
+ || (set_filesize_limit ((int) blocks) != 0)) {
+ SYSLOG ((LOG_WARN,
+ "Can't set the ulimit for user %s",
+ info->pw_name));
+ }
+ continue;
+ }
+ if (strncmp (cp, "umask=", 6) == 0) {
+ unsigned long int mask;
+ if ( (getulong (cp + 6, &mask) == 0)
+ || (mask != (mode_t) mask)) {
+ SYSLOG ((LOG_WARN,
+ "Can't set umask value for user %s",
+ info->pw_name));
+ } else {
+ (void) umask ((mode_t) mask);
+ }
+
+ continue;
+ }
+ }
+ }
+}
+
+#else /* !USE_PAM */
+extern int errno; /* warning: ANSI C forbids an empty source file */
+#endif /* !USE_PAM */
+
diff --git a/libmisc/list.c b/libmisc/list.c
new file mode 100644
index 0000000..2da734a
--- /dev/null
+++ b/libmisc/list.c
@@ -0,0 +1,271 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * 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 <assert.h>
+#include "prototypes.h"
+#include "defines.h"
+/*
+ * add_list - add a member to a list of group members
+ *
+ * the array of member names is searched for the new member
+ * name, and if not present it is added to a freshly allocated
+ * list of users.
+ */
+/*@only@*/ /*@out@*/char **add_list (/*@returned@*/ /*@only@*/char **list, const char *member)
+{
+ int i;
+ char **tmp;
+
+ assert (NULL != member);
+ assert (NULL != list);
+
+ /*
+ * Scan the list for the new name. Return the original list
+ * pointer if it is present.
+ */
+
+ for (i = 0; list[i] != (char *) 0; i++) {
+ if (strcmp (list[i], member) == 0) {
+ return list;
+ }
+ }
+
+ /*
+ * Allocate a new list pointer large enough to hold all the
+ * old entries, and the new entries as well.
+ */
+
+ tmp = (char **) xmalloc ((i + 2) * sizeof member);
+
+ /*
+ * Copy the original list to the new list, then append the
+ * new member and NULL terminate the result. This new list
+ * is returned to the invoker.
+ */
+
+ for (i = 0; list[i] != (char *) 0; i++) {
+ tmp[i] = list[i];
+ }
+
+ tmp[i] = xstrdup (member);
+ tmp[i+1] = (char *) 0;
+
+ return tmp;
+}
+
+/*
+ * del_list - delete a member from a list of group members
+ *
+ * the array of member names is searched for the old member
+ * name, and if present it is deleted from a freshly allocated
+ * list of users.
+ */
+
+/*@only@*/ /*@out@*/char **del_list (/*@returned@*/ /*@only@*/char **list, const char *member)
+{
+ int i, j;
+ char **tmp;
+
+ assert (NULL != member);
+ assert (NULL != list);
+
+ /*
+ * Scan the list for the old name. Return the original list
+ * pointer if it is not present.
+ */
+
+ for (i = j = 0; list[i] != (char *) 0; i++) {
+ if (strcmp (list[i], member) != 0) {
+ j++;
+ }
+ }
+
+ if (j == i) {
+ return list;
+ }
+
+ /*
+ * Allocate a new list pointer large enough to hold all the
+ * old entries.
+ */
+
+ tmp = (char **) xmalloc ((j + 1) * sizeof member);
+
+ /*
+ * Copy the original list except the deleted members to the
+ * new list, then NULL terminate the result. This new list
+ * is returned to the invoker.
+ */
+
+ for (i = j = 0; list[i] != (char *) 0; i++) {
+ if (strcmp (list[i], member) != 0) {
+ tmp[j] = list[i];
+ j++;
+ }
+ }
+
+ tmp[j] = (char *) 0;
+
+ return tmp;
+}
+
+/*
+ * Duplicate a list.
+ * The input list is not modified, but in order to allow the use of this
+ * function with list of members, the list elements are not enforced to be
+ * constant strings here.
+ */
+/*@only@*/ /*@out@*/char **dup_list (char *const *list)
+{
+ int i;
+ char **tmp;
+
+ assert (NULL != list);
+
+ for (i = 0; NULL != list[i]; i++);
+
+ tmp = (char **) xmalloc ((i + 1) * sizeof (char *));
+
+ i = 0;
+ while (NULL != *list) {
+ tmp[i] = xstrdup (*list);
+ i++;
+ list++;
+ }
+
+ tmp[i] = (char *) 0;
+ return tmp;
+}
+
+/*
+ * Check if member is part of the input list
+ * The input list is not modified, but in order to allow the use of this
+ * function with list of members, the list elements are not enforced to be
+ * constant strings here.
+ */
+bool is_on_list (char *const *list, const char *member)
+{
+ assert (NULL != member);
+ assert (NULL != list);
+
+ while (NULL != *list) {
+ if (strcmp (*list, member) == 0) {
+ return true;
+ }
+ list++;
+ }
+
+ return false;
+}
+
+/*
+ * comma_to_list - convert comma-separated list to (char *) array
+ */
+
+/*@only@*/char **comma_to_list (const char *comma)
+{
+ char *members;
+ char **array;
+ int i;
+ char *cp;
+ char *cp2;
+
+ assert (NULL != comma);
+
+ /*
+ * Make a copy since we are going to be modifying the list
+ */
+
+ members = xstrdup (comma);
+
+ /*
+ * Count the number of commas in the list
+ */
+
+ for (cp = members, i = 0;; i++) {
+ cp2 = strchr (cp, ',');
+ if (NULL != cp2) {
+ cp = cp2 + 1;
+ } else {
+ break;
+ }
+ }
+
+ /*
+ * Add 2 - one for the ending NULL, the other for the last item
+ */
+
+ i += 2;
+
+ /*
+ * Allocate the array we're going to store the pointers into.
+ */
+
+ array = (char **) xmalloc (sizeof (char *) * i);
+
+ /*
+ * Empty list is special - 0 members, not 1 empty member. --marekm
+ */
+
+ if ('\0' == *members) {
+ *array = (char *) 0;
+ return array;
+ }
+
+ /*
+ * Now go walk that list all over again, this time building the
+ * array of pointers.
+ */
+
+ for (cp = members, i = 0;; i++) {
+ array[i] = cp;
+ cp2 = strchr (cp, ',');
+ if (NULL != cp2) {
+ *cp2 = '\0';
+ cp2++;
+ cp = cp2;
+ } else {
+ array[i + 1] = (char *) 0;
+ break;
+ }
+ }
+
+ /*
+ * Return the new array of pointers
+ */
+
+ return array;
+}
+
diff --git a/libmisc/log.c b/libmisc/log.c
new file mode 100644
index 0000000..eb84859
--- /dev/null
+++ b/libmisc/log.c
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008 , 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 <sys/types.h>
+#include <pwd.h>
+#include <fcntl.h>
+#include <time.h>
+#include "defines.h"
+#include <lastlog.h>
+#include "prototypes.h"
+
+/*
+ * dolastlog - create lastlog entry
+ *
+ * A "last login" entry is created for the user being logged in. The
+ * UID is extracted from the global (struct passwd) entry and the
+ * TTY information is gotten from the (struct utmp).
+ */
+void dolastlog (
+ struct lastlog *ll,
+ const struct passwd *pw,
+ /*@unique@*/const char *line,
+ /*@unique@*/const char *host)
+{
+ int fd;
+ off_t offset;
+ struct lastlog newlog;
+ time_t ll_time;
+
+ /*
+ * If the file does not exist, don't create it.
+ */
+
+ fd = open (LASTLOG_FILE, O_RDWR);
+ if (-1 == fd) {
+ return;
+ }
+
+ /*
+ * The file is indexed by UID number. Seek to the record
+ * for this UID. Negative UID's will create problems, but ...
+ */
+
+ offset = (off_t) pw->pw_uid * sizeof newlog;
+
+ if (lseek (fd, offset, SEEK_SET) != offset) {
+ SYSLOG ((LOG_WARN,
+ "Can't read last lastlog entry for UID %lu in %s. Entry not updated.",
+ (unsigned long) pw->pw_uid, LASTLOG_FILE));
+ (void) close (fd);
+ return;
+ }
+
+ /*
+ * Read the old entry so we can tell the user when they last
+ * logged in. Then construct the new entry and write it out
+ * the way we read the old one in.
+ */
+
+ if (read (fd, (void *) &newlog, sizeof newlog) != (ssize_t) sizeof newlog) {
+ memzero (&newlog, sizeof newlog);
+ }
+ if (NULL != ll) {
+ *ll = newlog;
+ }
+
+ ll_time = newlog.ll_time;
+ (void) time (&ll_time);
+ newlog.ll_time = ll_time;
+ strncpy (newlog.ll_line, line, sizeof newlog.ll_line);
+#if HAVE_LL_HOST
+ strncpy (newlog.ll_host, host, sizeof newlog.ll_host);
+#endif
+ if ( (lseek (fd, offset, SEEK_SET) != offset)
+ || (write (fd, (const void *) &newlog, sizeof newlog) != (ssize_t) sizeof newlog)
+ || (close (fd) != 0)) {
+ SYSLOG ((LOG_WARN,
+ "Can't write lastlog entry for UID %lu in %s.",
+ (unsigned long) pw->pw_uid, LASTLOG_FILE));
+ (void) close (fd);
+ }
+}
+
diff --git a/libmisc/loginprompt.c b/libmisc/loginprompt.c
new file mode 100644
index 0000000..b008e2a
--- /dev/null
+++ b/libmisc/loginprompt.c
@@ -0,0 +1,178 @@
+/*
+ * Copyright (c) 1989 - 1993, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008 - 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 <assert.h>
+#include <stdio.h>
+#include <signal.h>
+#include <ctype.h>
+#include "prototypes.h"
+#include "defines.h"
+#include "getdef.h"
+
+static void login_exit (unused int sig)
+{
+ exit (EXIT_FAILURE);
+}
+
+/*
+ * login_prompt - prompt the user for their login name
+ *
+ * login_prompt() displays the standard login prompt. If ISSUE_FILE
+ * is set in login.defs, this file is displayed before the prompt.
+ */
+
+void login_prompt (const char *prompt, char *name, int namesize)
+{
+ char buf[1024];
+
+#define MAX_ENV 32
+ char *envp[MAX_ENV];
+ char *cp;
+ int i;
+ FILE *fp;
+
+ RETSIGTYPE (*sigquit) (int);
+#ifdef SIGTSTP
+ RETSIGTYPE (*sigtstp) (int);
+#endif
+
+ /*
+ * There is a small chance that a QUIT character will be part of
+ * some random noise during a prompt. Deal with this by exiting
+ * instead of core dumping. If SIGTSTP is defined, do the same
+ * thing for that signal.
+ */
+
+ sigquit = signal (SIGQUIT, login_exit);
+#ifdef SIGTSTP
+ sigtstp = signal (SIGTSTP, login_exit);
+#endif
+
+ /*
+ * See if the user has configured the issue file to
+ * be displayed and display it before the prompt.
+ */
+
+ if (NULL != prompt) {
+ const char *fname = getdef_str ("ISSUE_FILE");
+ if (NULL != fname) {
+ fp = fopen (fname, "r");
+ if (NULL != fp) {
+ while ((i = getc (fp)) != EOF) {
+ (void) putc (i, stdout);
+ }
+
+ (void) fclose (fp);
+ }
+ }
+ (void) gethostname (buf, sizeof buf);
+ printf (prompt, buf);
+ (void) fflush (stdout);
+ }
+
+ /*
+ * Read the user's response. The trailing newline will be
+ * removed.
+ */
+
+ memzero (buf, sizeof buf);
+ if (fgets (buf, (int) sizeof buf, stdin) != buf) {
+ exit (EXIT_FAILURE);
+ }
+
+ cp = strchr (buf, '\n');
+ if (NULL == cp) {
+ exit (EXIT_FAILURE);
+ }
+ *cp = '\0'; /* remove \n [ must be there ] */
+
+ /*
+ * Skip leading whitespace. This makes " username" work right.
+ * Then copy the rest (up to the end or the first "non-graphic"
+ * character into the username.
+ */
+
+ for (cp = buf; *cp == ' ' || *cp == '\t'; cp++);
+
+ for (i = 0; i < namesize - 1 && isgraph (*cp); name[i++] = *cp++);
+ while (isgraph (*cp)) {
+ cp++;
+ }
+
+ if ('\0' != *cp) {
+ cp++;
+ }
+
+ name[i] = '\0';
+
+ /*
+ * This is a disaster, at best. The user may have entered extra
+ * environmental variables at the prompt. There are several ways
+ * to do this, and I just take the easy way out.
+ */
+
+ if ('\0' != *cp) { /* process new variables */
+ char *nvar;
+ int count = 1;
+ int envc;
+
+ for (envc = 0; envc < MAX_ENV; envc++) {
+ nvar = strtok ((0 != envc) ? (char *) 0 : cp, " \t,");
+ if (NULL == nvar) {
+ break;
+ }
+ if (strchr (nvar, '=') != NULL) {
+ envp[envc] = nvar;
+ } else {
+ size_t len = strlen (nvar) + 32;
+ envp[envc] = xmalloc (len);
+ (void) snprintf (envp[envc], len,
+ "L%d=%s", count++, nvar);
+ }
+ }
+ set_env (envc, envp);
+ }
+
+ /*
+ * Set the SIGQUIT handler back to its original value
+ */
+
+ (void) signal (SIGQUIT, sigquit);
+#ifdef SIGTSTP
+ (void) signal (SIGTSTP, sigtstp);
+#endif
+}
+
diff --git a/libmisc/mail.c b/libmisc/mail.c
new file mode 100644
index 0000000..1c53c31
--- /dev/null
+++ b/libmisc/mail.c
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 1989 - 1991, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008 , 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>
+#include "prototypes.h"
+#include "defines.h"
+#include <assert.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "getdef.h"
+
+#ident "$Id$"
+
+
+void mailcheck (void)
+{
+ struct stat statbuf;
+ char *mailbox;
+
+ if (!getdef_bool ("MAIL_CHECK_ENAB")) {
+ return;
+ }
+
+ /*
+ * Check incoming mail in Maildir format - J.
+ */
+ mailbox = getenv ("MAILDIR");
+ if (NULL != mailbox) {
+ char *newmail;
+ size_t len = strlen (mailbox) + 5;
+ int wlen;
+
+ newmail = xmalloc (len);
+ wlen = snprintf (newmail, len, "%s/new", mailbox);
+ assert (wlen == (int) len - 1);
+
+ if (stat (newmail, &statbuf) != -1 && statbuf.st_size != 0) {
+ if (statbuf.st_mtime > statbuf.st_atime) {
+ free (newmail);
+ (void) puts (_("You have new mail."));
+ return;
+ }
+ }
+ free (newmail);
+ }
+
+ mailbox = getenv ("MAIL");
+ if (NULL == mailbox) {
+ return;
+ }
+
+ if ( (stat (mailbox, &statbuf) == -1)
+ || (statbuf.st_size == 0)) {
+ (void) puts (_("No mail."));
+ } else if (statbuf.st_atime > statbuf.st_mtime) {
+ (void) puts (_("You have mail."));
+ } else {
+ (void) puts (_("You have new mail."));
+ }
+}
+
diff --git a/libmisc/motd.c b/libmisc/motd.c
new file mode 100644
index 0000000..6ba7e12
--- /dev/null
+++ b/libmisc/motd.c
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 1989 - 1991, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2010 , 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 "prototypes.h"
+#include "defines.h"
+#include "getdef.h"
+/*
+ * motd -- output the /etc/motd file
+ *
+ * motd() determines the name of a login announcement file and outputs
+ * it to the user's terminal at login time. The MOTD_FILE configuration
+ * option is a colon-delimited list of filenames.
+ */
+void motd (void)
+{
+ FILE *fp;
+ char *motdlist;
+ const char *motdfile;
+ char *mb;
+ register int c;
+
+ motdfile = getdef_str ("MOTD_FILE");
+ if (NULL == motdfile) {
+ return;
+ }
+
+ motdlist = xstrdup (motdfile);
+
+ for (mb = motdlist; ;mb = NULL) {
+ motdfile = strtok (mb, ":");
+ if (NULL == motdfile) {
+ break;
+ }
+
+ fp = fopen (motdfile, "r");
+ if (NULL != fp) {
+ while ((c = getc (fp)) != EOF) {
+ putchar (c);
+ }
+ fclose (fp);
+ }
+ }
+ fflush (stdout);
+
+ free (motdlist);
+}
+
diff --git a/libmisc/myname.c b/libmisc/myname.c
new file mode 100644
index 0000000..05efdad
--- /dev/null
+++ b/libmisc/myname.c
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * 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.
+ */
+
+/*
+ * myname.c - determine the current username and get the passwd entry
+ *
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include "defines.h"
+#include <pwd.h>
+#include "prototypes.h"
+/*@null@*/ /*@only@*/struct passwd *get_my_pwent (void)
+{
+ struct passwd *pw;
+ const char *cp = getlogin ();
+ uid_t ruid = getuid ();
+
+ /*
+ * Try getlogin() first - if it fails or returns a non-existent
+ * username, or a username which doesn't match the real UID, fall
+ * back to getpwuid(getuid()). This should work reasonably with
+ * usernames longer than the utmp limit (8 characters), as well as
+ * shared UIDs - but not both at the same time...
+ *
+ * XXX - when running from su, will return the current user (not
+ * the original user, like getlogin() does). Does this matter?
+ */
+ if ((NULL != cp) && ('\0' != *cp)) {
+ pw = xgetpwnam (cp);
+ if ((NULL != pw) && (pw->pw_uid == ruid)) {
+ return pw;
+ }
+ }
+
+ return xgetpwuid (ruid);
+}
+
diff --git a/libmisc/obscure.c b/libmisc/obscure.c
new file mode 100644
index 0000000..15da760
--- /dev/null
+++ b/libmisc/obscure.c
@@ -0,0 +1,326 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1999, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2010, 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>
+
+#ifndef USE_PAM
+
+#ident "$Id$"
+
+
+/*
+ * This version of obscure.c contains modifications to support "cracklib"
+ * by Alec Muffet (alec.muffett@uk.sun.com). You must obtain the Cracklib
+ * library source code for this function to operate.
+ */
+#include <ctype.h>
+#include <stdio.h>
+#include "prototypes.h"
+#include "defines.h"
+#include "getdef.h"
+/*
+ * can't be a palindrome - like `R A D A R' or `M A D A M'
+ */
+static bool palindrome (unused const char *old, const char *new)
+{
+ size_t i, j;
+
+ i = strlen (new);
+
+ for (j = 0; j < i; j++) {
+ if (new[i - j - 1] != new[j]) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+/*
+ * more than half of the characters are different ones.
+ */
+
+static bool similar (/*@notnull@*/const char *old, /*@notnull@*/const char *new)
+{
+ int i, j;
+
+ /*
+ * XXX - sometimes this fails when changing from a simple password
+ * to a really long one (MD5). For now, I just return success if
+ * the new password is long enough. Please feel free to suggest
+ * something better... --marekm
+ */
+ if (strlen (new) >= 8) {
+ return false;
+ }
+
+ for (i = j = 0; ('\0' != new[i]) && ('\0' != old[i]); i++) {
+ if (strchr (new, old[i]) != NULL) {
+ j++;
+ }
+ }
+
+ if (i >= j * 2) {
+ return false;
+ }
+
+ return true;
+}
+
+/*
+ * a nice mix of characters.
+ */
+
+static bool simple (unused const char *old, const char *new)
+{
+ bool digits = false;
+ bool uppers = false;
+ bool lowers = false;
+ bool others = false;
+ int size;
+ int i;
+
+ for (i = 0; '\0' != new[i]; i++) {
+ if (isdigit (new[i])) {
+ digits = true;
+ } else if (isupper (new[i])) {
+ uppers = true;
+ } else if (islower (new[i])) {
+ lowers = true;
+ } else {
+ others = true;
+ }
+ }
+
+ /*
+ * The scam is this - a password of only one character type
+ * must be 8 letters long. Two types, 7, and so on.
+ */
+
+ size = 9;
+ if (digits) {
+ size--;
+ }
+ if (uppers) {
+ size--;
+ }
+ if (lowers) {
+ size--;
+ }
+ if (others) {
+ size--;
+ }
+
+ if (size <= i) {
+ return false;
+ }
+
+ return true;
+}
+
+static char *str_lower (/*@returned@*/char *string)
+{
+ char *cp;
+
+ for (cp = string; '\0' != *cp; cp++) {
+ *cp = tolower (*cp);
+ }
+ return string;
+}
+
+static /*@observer@*//*@null@*/const char *password_check (
+ /*@notnull@*/const char *old,
+ /*@notnull@*/const char *new,
+ /*@notnull@*/const struct passwd *pwdp)
+{
+ const char *msg = NULL;
+ char *oldmono, *newmono, *wrapped;
+
+#ifdef HAVE_LIBCRACK
+ char *dictpath;
+
+#ifdef HAVE_LIBCRACK_PW
+ char *FascistCheckPw ();
+#else
+ char *FascistCheck ();
+#endif
+#endif
+
+ if (strcmp (new, old) == 0) {
+ return _("no change");
+ }
+
+ newmono = str_lower (xstrdup (new));
+ oldmono = str_lower (xstrdup (old));
+ wrapped = xmalloc (strlen (oldmono) * 2 + 1);
+ strcpy (wrapped, oldmono);
+ strcat (wrapped, oldmono);
+
+ if (palindrome (oldmono, newmono)) {
+ msg = _("a palindrome");
+ } else if (strcmp (oldmono, newmono) == 0) {
+ msg = _("case changes only");
+ } else if (similar (oldmono, newmono)) {
+ msg = _("too similar");
+ } else if (simple (old, new)) {
+ msg = _("too simple");
+ } else if (strstr (wrapped, newmono) != NULL) {
+ msg = _("rotated");
+ } else {
+#ifdef HAVE_LIBCRACK
+ /*
+ * Invoke Alec Muffett's cracklib routines.
+ */
+
+ dictpath = getdef_str ("CRACKLIB_DICTPATH");
+ if (NULL != dictpath) {
+#ifdef HAVE_LIBCRACK_PW
+ msg = FascistCheckPw (new, dictpath, pwdp);
+#else
+ msg = FascistCheck (new, dictpath);
+#endif
+ }
+#endif
+ }
+ strzero (newmono);
+ strzero (oldmono);
+ strzero (wrapped);
+ free (newmono);
+ free (oldmono);
+ free (wrapped);
+
+ return msg;
+}
+
+static /*@observer@*//*@null@*/const char *obscure_msg (
+ /*@notnull@*/const char *old,
+ /*@notnull@*/const char *new,
+ /*@notnull@*/const struct passwd *pwdp)
+{
+ size_t maxlen, oldlen, newlen;
+ char *new1, *old1;
+ const char *msg;
+ const char *result;
+
+ oldlen = strlen (old);
+ newlen = strlen (new);
+
+ if (newlen < (size_t) getdef_num ("PASS_MIN_LEN", 0)) {
+ return _("too short");
+ }
+
+ /*
+ * Remaining checks are optional.
+ */
+ if (!getdef_bool ("OBSCURE_CHECKS_ENAB")) {
+ return NULL;
+ }
+
+ msg = password_check (old, new, pwdp);
+ if (NULL != msg) {
+ return msg;
+ }
+
+ result = getdef_str ("ENCRYPT_METHOD");
+ if (NULL == result) {
+ /* The traditional crypt() truncates passwords to 8 chars. It is
+ possible to circumvent the above checks by choosing an easy
+ 8-char password and adding some random characters to it...
+ Example: "password$%^&*123". So check it again, this time
+ truncated to the maximum length. Idea from npasswd. --marekm */
+
+ if (getdef_bool ("MD5_CRYPT_ENAB")) {
+ return NULL;
+ }
+
+ } else {
+
+ if ( (strcmp (result, "MD5") == 0)
+#ifdef USE_SHA_CRYPT
+ || (strcmp (result, "SHA256") == 0)
+ || (strcmp (result, "SHA512") == 0)
+#endif
+#ifdef USE_BCRYPT
+ || (strcmp (result, "BCRYPT") == 0)
+#endif
+ ) {
+ return NULL;
+ }
+
+ }
+ maxlen = (size_t) getdef_num ("PASS_MAX_LEN", 8);
+ if ( (oldlen <= maxlen)
+ && (newlen <= maxlen)) {
+ return NULL;
+ }
+
+ new1 = xstrdup (new);
+ old1 = xstrdup (old);
+ if (newlen > maxlen) {
+ new1[maxlen] = '\0';
+ }
+ if (oldlen > maxlen) {
+ old1[maxlen] = '\0';
+ }
+
+ msg = password_check (old1, new1, pwdp);
+
+ memzero (new1, newlen);
+ memzero (old1, oldlen);
+ free (new1);
+ free (old1);
+
+ return msg;
+}
+
+/*
+ * Obscure - see if password is obscure enough.
+ *
+ * The programmer is encouraged to add as much complexity to this
+ * routine as desired. Included are some of my favorite ways to
+ * check passwords.
+ */
+
+bool obscure (const char *old, const char *new, const struct passwd *pwdp)
+{
+ const char *msg = obscure_msg (old, new, pwdp);
+
+ if (NULL != msg) {
+ printf (_("Bad password: %s. "), msg);
+ return false;
+ }
+ return true;
+}
+
+#else /* !USE_PAM */
+extern int errno; /* warning: ANSI C forbids an empty source file */
+#endif /* !USE_PAM */
diff --git a/libmisc/pam_pass.c b/libmisc/pam_pass.c
new file mode 100644
index 0000000..a89bb2c
--- /dev/null
+++ b/libmisc/pam_pass.c
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 1997 - 1999, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008 , 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>
+
+#ifdef USE_PAM
+
+#ident "$Id$"
+
+
+/*
+ * Change the user's password using PAM.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include "defines.h"
+#include "pam_defs.h"
+#include "prototypes.h"
+
+void do_pam_passwd (const char *user, bool silent, bool change_expired)
+{
+ pam_handle_t *pamh = NULL;
+ int flags = 0, ret;
+
+ if (silent)
+ flags |= PAM_SILENT;
+ if (change_expired)
+ flags |= PAM_CHANGE_EXPIRED_AUTHTOK;
+
+ ret = pam_start ("passwd", user, &conv, &pamh);
+ if (ret != PAM_SUCCESS) {
+ fprintf (stderr,
+ _("passwd: pam_start() failed, error %d\n"), ret);
+ exit (10); /* XXX */
+ }
+
+ ret = pam_chauthtok (pamh, flags);
+ if (ret != PAM_SUCCESS) {
+ fprintf (stderr, _("passwd: %s\n"), pam_strerror (pamh, ret));
+ fputs (_("passwd: password unchanged\n"), stderr);
+ pam_end (pamh, ret);
+ exit (10); /* XXX */
+ }
+
+ fputs (_("passwd: password updated successfully\n"), stderr);
+ (void) pam_end (pamh, PAM_SUCCESS);
+}
+#else /* !USE_PAM */
+extern int errno; /* warning: ANSI C forbids an empty source file */
+#endif /* !USE_PAM */
diff --git a/libmisc/pam_pass_non_interactive.c b/libmisc/pam_pass_non_interactive.c
new file mode 100644
index 0000000..ded5c69
--- /dev/null
+++ b/libmisc/pam_pass_non_interactive.c
@@ -0,0 +1,167 @@
+/*
+ * Copyright (c) 2009 - 2010, 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:$"
+
+#ifdef USE_PAM
+#include <assert.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <security/pam_appl.h>
+#include "prototypes.h"
+
+/*@null@*/ /*@only@*/static const char *non_interactive_password = NULL;
+static int ni_conv (int num_msg,
+ const struct pam_message **msg,
+ struct pam_response **resp,
+ unused void *appdata_ptr);
+static struct pam_conv non_interactive_pam_conv = {
+ ni_conv,
+ NULL
+};
+
+
+
+static int ni_conv (int num_msg,
+ const struct pam_message **msg,
+ struct pam_response **resp,
+ unused void *appdata_ptr)
+{
+ struct pam_response *responses;
+ int count;
+
+ assert (NULL != non_interactive_password);
+
+ if (num_msg <= 0) {
+ return PAM_CONV_ERR;
+ }
+
+ responses = (struct pam_response *) calloc ((size_t) num_msg,
+ sizeof (*responses));
+ if (NULL == responses) {
+ return PAM_CONV_ERR;
+ }
+
+ for (count=0; count < num_msg; count++) {
+ responses[count].resp_retcode = 0;
+
+ switch (msg[count]->msg_style) {
+ case PAM_PROMPT_ECHO_ON:
+ fprintf (stderr,
+ _("%s: PAM modules requesting echoing are not supported.\n"),
+ Prog);
+ goto failed_conversation;
+ case PAM_PROMPT_ECHO_OFF:
+ responses[count].resp = strdup (non_interactive_password);
+ if (NULL == responses[count].resp) {
+ goto failed_conversation;
+ }
+ break;
+ case PAM_ERROR_MSG:
+ if ( (NULL == msg[count]->msg)
+ || (fprintf (stderr, "%s\n", msg[count]->msg) <0)) {
+ goto failed_conversation;
+ }
+ responses[count].resp = NULL;
+ break;
+ case PAM_TEXT_INFO:
+ if ( (NULL == msg[count]->msg)
+ || (fprintf (stdout, "%s\n", msg[count]->msg) <0)) {
+ goto failed_conversation;
+ }
+ responses[count].resp = NULL;
+ break;
+ default:
+ (void) fprintf (stderr,
+ _("%s: conversation type %d not supported.\n"),
+ Prog, msg[count]->msg_style);
+ goto failed_conversation;
+ }
+ }
+
+ *resp = responses;
+
+ return PAM_SUCCESS;
+
+failed_conversation:
+ for (count=0; count < num_msg; count++) {
+ if (NULL != responses[count].resp) {
+ memset (responses[count].resp, 0,
+ strlen (responses[count].resp));
+ free (responses[count].resp);
+ responses[count].resp = NULL;
+ }
+ }
+
+ free (responses);
+ *resp = NULL;
+
+ return PAM_CONV_ERR;
+}
+
+
+/*
+ * Change non interactively the user's password using PAM.
+ *
+ * Return 0 on success, 1 on failure.
+ */
+int do_pam_passwd_non_interactive (const char *pam_service,
+ const char *username,
+ const char* password)
+{
+ pam_handle_t *pamh = NULL;
+ int ret;
+
+ ret = pam_start (pam_service, username, &non_interactive_pam_conv, &pamh);
+ if (ret != PAM_SUCCESS) {
+ fprintf (stderr,
+ _("%s: (user %s) pam_start failure %d\n"),
+ Prog, username, ret);
+ return 1;
+ }
+
+ non_interactive_password = password;
+ ret = pam_chauthtok (pamh, 0);
+ if (ret != PAM_SUCCESS) {
+ fprintf (stderr,
+ _("%s: (user %s) pam_chauthtok() failed, error:\n"
+ "%s\n"),
+ Prog, username, pam_strerror (pamh, ret));
+ }
+
+ (void) pam_end (pamh, PAM_SUCCESS);
+
+ return ((PAM_SUCCESS == ret) ? 0 : 1);
+}
+#else /* !USE_PAM */
+extern int errno; /* warning: ANSI C forbids an empty source file */
+#endif /* !USE_PAM */
diff --git a/libmisc/prefix_flag.c b/libmisc/prefix_flag.c
new file mode 100644
index 0000000..d72f7e3
--- /dev/null
+++ b/libmisc/prefix_flag.c
@@ -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);
+}
diff --git a/libmisc/pwd2spwd.c b/libmisc/pwd2spwd.c
new file mode 100644
index 0000000..6799dd5
--- /dev/null
+++ b/libmisc/pwd2spwd.c
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * 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.
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#ifndef USE_PAM
+
+#include <sys/types.h>
+#include "prototypes.h"
+#include "defines.h"
+#include <pwd.h>
+
+/*
+ * pwd_to_spwd - create entries for new spwd structure
+ *
+ * pwd_to_spwd() creates a new (struct spwd) containing the
+ * information in the pointed-to (struct passwd).
+ */
+
+struct spwd *pwd_to_spwd (const struct passwd *pw)
+{
+ static struct spwd sp;
+
+ /*
+ * Nice, easy parts first. The name and passwd map directly
+ * from the old password structure to the new one.
+ */
+ sp.sp_namp = pw->pw_name;
+ sp.sp_pwdp = pw->pw_passwd;
+
+ {
+ /*
+ * Defaults used if there is no pw_age information.
+ */
+ sp.sp_min = 0;
+ sp.sp_max = (10000L * DAY) / SCALE;
+ sp.sp_lstchg = (long) gettime () / SCALE;
+ if (0 == sp.sp_lstchg) {
+ /* Better disable aging than requiring a password
+ * change */
+ sp.sp_lstchg = -1;
+ }
+ }
+
+ /*
+ * These fields have no corresponding information in the password
+ * file. They are set to uninitialized values.
+ */
+ sp.sp_warn = -1;
+ sp.sp_expire = -1;
+ sp.sp_inact = -1;
+ sp.sp_flag = SHADOW_SP_FLAG_UNSET;
+
+ return &sp;
+}
+#else /* USE_PAM */
+extern int errno; /* warning: ANSI C forbids an empty source file */
+#endif /* !USE_PAM */
+
diff --git a/libmisc/pwd_init.c b/libmisc/pwd_init.c
new file mode 100644
index 0000000..774ba9b
--- /dev/null
+++ b/libmisc/pwd_init.c
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1997 , Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008 , 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 "defines.h"
+#include <signal.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#ifdef HAVE_SYS_RESOURCE_H
+#include <sys/resource.h>
+#endif
+
+#include "prototypes.h"
+
+/*
+ * pwd_init - ignore signals, and set resource limits to safe
+ * values. Call this before modifying password files, so that
+ * it is less likely to fail in the middle of operation.
+ */
+void pwd_init (void)
+{
+#ifdef HAVE_SYS_RESOURCE_H
+ struct rlimit rlim;
+
+#ifdef RLIMIT_CORE
+ rlim.rlim_cur = rlim.rlim_max = 0;
+ setrlimit (RLIMIT_CORE, &rlim);
+#endif
+ rlim.rlim_cur = rlim.rlim_max = RLIM_INFINITY;
+#ifdef RLIMIT_AS
+ setrlimit (RLIMIT_AS, &rlim);
+#endif
+#ifdef RLIMIT_CPU
+ setrlimit (RLIMIT_CPU, &rlim);
+#endif
+#ifdef RLIMIT_DATA
+ setrlimit (RLIMIT_DATA, &rlim);
+#endif
+#ifdef RLIMIT_FSIZE
+ setrlimit (RLIMIT_FSIZE, &rlim);
+#endif
+#ifdef RLIMIT_NOFILE
+ setrlimit (RLIMIT_NOFILE, &rlim);
+#endif
+#ifdef RLIMIT_RSS
+ setrlimit (RLIMIT_RSS, &rlim);
+#endif
+#ifdef RLIMIT_STACK
+ setrlimit (RLIMIT_STACK, &rlim);
+#endif
+#else /* !HAVE_SYS_RESOURCE_H */
+ set_filesize_limit (30000);
+ /* don't know how to set the other limits... */
+#endif /* !HAVE_SYS_RESOURCE_H */
+
+ signal (SIGALRM, SIG_IGN);
+ signal (SIGHUP, SIG_IGN);
+ signal (SIGINT, SIG_IGN);
+ signal (SIGPIPE, SIG_IGN);
+ signal (SIGQUIT, SIG_IGN);
+ signal (SIGTERM, SIG_IGN);
+#ifdef SIGTSTP
+ signal (SIGTSTP, SIG_IGN);
+#endif
+#ifdef SIGTTOU
+ signal (SIGTTOU, SIG_IGN);
+#endif
+
+ umask (077);
+}
diff --git a/libmisc/pwdcheck.c b/libmisc/pwdcheck.c
new file mode 100644
index 0000000..ec1f474
--- /dev/null
+++ b/libmisc/pwdcheck.c
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2000 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, 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$"
+
+#ifndef USE_PAM
+
+#include <stdio.h>
+#include <shadow.h>
+#include "prototypes.h"
+#include "defines.h"
+#include "pwauth.h"
+
+void passwd_check (const char *user, const char *passwd, unused const char *progname)
+{
+ struct spwd *sp;
+
+ sp = getspnam (user); /* !USE_PAM, no need for xgetspnam */
+ if (NULL != sp) {
+ passwd = sp->sp_pwdp;
+ }
+ if (pw_auth (passwd, user, PW_LOGIN, (char *) 0) != 0) {
+ SYSLOG ((LOG_WARN, "incorrect password for `%s'", user));
+ (void) sleep (1);
+ fprintf (stderr, _("Incorrect password for %s.\n"), user);
+ exit (EXIT_FAILURE);
+ }
+}
+#else /* USE_PAM */
+extern int errno; /* warning: ANSI C forbids an empty source file */
+#endif /* USE_PAM */
diff --git a/libmisc/remove_tree.c b/libmisc/remove_tree.c
new file mode 100644
index 0000000..b2794ab
--- /dev/null
+++ b/libmisc/remove_tree.c
@@ -0,0 +1,133 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2001, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2010, 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 <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <unistd.h>
+#include "prototypes.h"
+#include "defines.h"
+
+/*
+ * remove_tree - delete a directory tree
+ *
+ * remove_tree() walks a directory tree and deletes all the files
+ * and directories.
+ * At the end, it deletes the root directory itself.
+ */
+
+int remove_tree (const char *root, bool remove_root)
+{
+ char *new_name = NULL;
+ int err = 0;
+ struct DIRECT *ent;
+ struct stat sb;
+ DIR *dir;
+
+ /*
+ * Open the source directory and read each entry. Every file
+ * entry in the directory is copied with the UID and GID set
+ * to the provided values. As an added security feature only
+ * regular files (and directories ...) are copied, and no file
+ * is made set-ID.
+ */
+ dir = opendir (root);
+ if (NULL == dir) {
+ return -1;
+ }
+
+ while ((ent = readdir (dir))) {
+ size_t new_len = strlen (root) + strlen (ent->d_name) + 2;
+
+ /*
+ * Skip the "." and ".." entries
+ */
+
+ if (strcmp (ent->d_name, ".") == 0 ||
+ strcmp (ent->d_name, "..") == 0) {
+ continue;
+ }
+
+ /*
+ * Make the filename for the current entry.
+ */
+
+ free (new_name);
+ new_name = (char *) malloc (new_len);
+ if (NULL == new_name) {
+ err = -1;
+ break;
+ }
+ (void) snprintf (new_name, new_len, "%s/%s", root, ent->d_name);
+ if (LSTAT (new_name, &sb) == -1) {
+ continue;
+ }
+
+ if (S_ISDIR (sb.st_mode)) {
+ /*
+ * Recursively delete this directory.
+ */
+ if (remove_tree (new_name, true) != 0) {
+ err = -1;
+ break;
+ }
+ } else {
+ /*
+ * Delete the file.
+ */
+ if (unlink (new_name) != 0) {
+ err = -1;
+ break;
+ }
+ }
+ }
+ if (NULL != new_name) {
+ free (new_name);
+ }
+ (void) closedir (dir);
+
+ if (remove_root && (0 == err)) {
+ if (rmdir (root) != 0) {
+ err = -1;
+ }
+ }
+
+ return err;
+}
+
diff --git a/libmisc/rlogin.c b/libmisc/rlogin.c
new file mode 100644
index 0000000..b19f5e8
--- /dev/null
+++ b/libmisc/rlogin.c
@@ -0,0 +1,198 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1999, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, 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>
+
+#ifdef RLOGIN
+
+#ident "$Id$"
+
+#include "prototypes.h"
+#include "defines.h"
+#include <stdio.h>
+#include <pwd.h>
+#include <netdb.h>
+static struct {
+ int spd_name;
+ int spd_baud;
+} speed_table[] =
+{
+#ifdef B50
+ {
+ B50, 50},
+#endif
+#ifdef B75
+ {
+ B75, 75},
+#endif
+#ifdef B110
+ {
+ B110, 110},
+#endif
+#ifdef B134
+ {
+ B134, 134},
+#endif
+#ifdef B150
+ {
+ B150, 150},
+#endif
+#ifdef B200
+ {
+ B200, 200},
+#endif
+#ifdef B300
+ {
+ B300, 300},
+#endif
+#ifdef B600
+ {
+ B600, 600},
+#endif
+#ifdef B1200
+ {
+ B1200, 1200},
+#endif
+#ifdef B1800
+ {
+ B1800, 1800},
+#endif
+#ifdef B2400
+ {
+ B2400, 2400},
+#endif
+#ifdef B4800
+ {
+ B4800, 4800},
+#endif
+#ifdef B9600
+ {
+ B9600, 9600},
+#endif
+#ifdef B19200
+ {
+ B19200, 19200},
+#endif
+#ifdef B38400
+ {
+ B38400, 38400},
+#endif
+ {
+ -1, -1}
+};
+
+static void get_remote_string (char *buf, size_t size)
+{
+ for (;;) {
+ if (read (0, buf, 1) != 1) {
+ exit (EXIT_FAILURE);
+ }
+ if ('\0' == *buf) {
+ return;
+ }
+ --size;
+ if (size > 0) {
+ ++buf;
+ }
+ }
+ /*NOTREACHED*/}
+
+int
+do_rlogin (const char *remote_host, char *name, size_t namelen, char *term,
+ size_t termlen)
+{
+ struct passwd *pwd;
+ char remote_name[32];
+ char *cp;
+ unsigned long remote_speed = 9600;
+ int speed_name = B9600;
+ int i;
+ TERMIO termio;
+
+ get_remote_string (remote_name, sizeof remote_name);
+ get_remote_string (name, namelen);
+ get_remote_string (term, termlen);
+
+ cp = strchr (term, '/');
+ if (NULL != cp) {
+ *cp = '\0';
+ cp++;
+
+ if (getulong (cp, &remote_speed) == 0) {
+ remote_speed = 9600;
+ }
+ }
+ for (i = 0;
+ ( (speed_table[i].spd_baud != remote_speed)
+ && (speed_table[i].spd_name != -1));
+ i++);
+
+ if (-1 != speed_table[i].spd_name) {
+ speed_name = speed_table[i].spd_name;
+ }
+
+ /*
+ * Put the terminal in cooked mode with echo turned on.
+ */
+
+ GTTY (0, &termio);
+ termio.c_iflag |= ICRNL | IXON;
+ termio.c_oflag |= OPOST | ONLCR;
+ termio.c_lflag |= ICANON | ECHO | ECHOE;
+#ifdef CBAUD
+ termio.c_cflag = (termio.c_cflag & ~CBAUD) | speed_name;
+#else
+ termio.c_cflag = (termio.c_cflag) | speed_name;
+#endif
+ STTY (0, &termio);
+
+ pwd = getpwnam (name); /* local, no need for xgetpwnam */
+ if (NULL == pwd) {
+ return 0;
+ }
+
+ /*
+ * ruserok() returns 0 for success on modern systems, and 1 on
+ * older ones. If you are having trouble with people logging
+ * in without giving a required password, THIS is the culprit -
+ * go fix the #define in config.h.
+ */
+
+#ifndef RUSEROK
+ return 0;
+#else
+ return ruserok (remote_host, pwd->pw_uid == 0,
+ remote_name, name) == RUSEROK;
+#endif
+}
+#endif /* RLOGIN */
+
diff --git a/libmisc/root_flag.c b/libmisc/root_flag.c
new file mode 100644
index 0000000..7f5e611
--- /dev/null
+++ b/libmisc/root_flag.c
@@ -0,0 +1,124 @@
+/*
+ * 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"
+
+static void change_root (const char* newroot);
+
+/*
+ * process_root_flag - chroot if given the --root 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 void process_root_flag (const char* short_opt, int argc, char **argv)
+{
+ /*
+ * Parse the command line options.
+ */
+ int i;
+ const char *newroot = NULL;
+
+ for (i = 0; i < argc; i++) {
+ if ( (strcmp (argv[i], "--root") == 0)
+ || (strcmp (argv[i], short_opt) == 0)) {
+ if (NULL != newroot) {
+ fprintf (stderr,
+ _("%s: multiple --root 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);
+ }
+ newroot = argv[i + 1];
+ }
+ }
+
+ if (NULL != newroot) {
+ change_root (newroot);
+ }
+}
+
+static void change_root (const char* newroot)
+{
+ /* Drop privileges */
+ if ( (setregid (getgid (), getgid ()) != 0)
+ || (setreuid (getuid (), getuid ()) != 0)) {
+ fprintf (stderr, _("%s: failed to drop privileges (%s)\n"),
+ Prog, strerror (errno));
+ exit (EXIT_FAILURE);
+ }
+
+ if ('/' != newroot[0]) {
+ fprintf (stderr,
+ _("%s: invalid chroot path '%s'\n"),
+ Prog, newroot);
+ exit (E_BAD_ARG);
+ }
+
+ if (access (newroot, F_OK) != 0) {
+ fprintf(stderr,
+ _("%s: cannot access chroot directory %s: %s\n"),
+ Prog, newroot, strerror (errno));
+ exit (E_BAD_ARG);
+ }
+
+ if (chdir (newroot) != 0) {
+ fprintf(stderr,
+ _("%s: cannot chdir to chroot directory %s: %s\n"),
+ Prog, newroot, strerror (errno));
+ exit (E_BAD_ARG);
+ }
+
+ if (chroot (newroot) != 0) {
+ fprintf(stderr,
+ _("%s: unable to chroot to directory %s: %s\n"),
+ Prog, newroot, strerror (errno));
+ exit (E_BAD_ARG);
+ }
+}
+
diff --git a/libmisc/salt.c b/libmisc/salt.c
new file mode 100644
index 0000000..e1a7ac8
--- /dev/null
+++ b/libmisc/salt.c
@@ -0,0 +1,373 @@
+/*
+ * salt.c - generate a random salt string for crypt()
+ *
+ * Written by Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl>,
+ * it is in the public domain.
+ *
+ * l64a was Written by J.T. Conklin <jtc@netbsd.org>. Public domain.
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include <sys/time.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+#include "prototypes.h"
+#include "defines.h"
+#include "getdef.h"
+
+/* local function prototypes */
+static void seedRNG (void);
+static /*@observer@*/const char *gensalt (size_t salt_size);
+#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)
+{
+ static char buf[8];
+ char *s = buf;
+ int digit;
+ int i;
+
+ if (value < 0) {
+ errno = EINVAL;
+ return(NULL);
+ }
+
+ for (i = 0; value != 0 && i < 6; i++) {
+ digit = value & 0x3f;
+
+ if (digit < 2) {
+ *s = digit + '.';
+ } else if (digit < 12) {
+ *s = digit + '0' - 2;
+ } else if (digit < 38) {
+ *s = digit + 'A' - 12;
+ } else {
+ *s = digit + 'a' - 38;
+ }
+
+ value >>= 6;
+ s++;
+ }
+
+ *s = '\0';
+
+ return(buf);
+}
+#endif /* !HAVE_L64A */
+
+static void seedRNG (void)
+{
+ struct timeval tv;
+ static int seeded = 0;
+
+ if (0 == seeded) {
+ (void) gettimeofday (&tv, NULL);
+ srandom (tv.tv_sec ^ tv.tv_usec ^ getpid ());
+ seeded = 1;
+ }
+}
+
+/*
+ * 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 */
+
+#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
+
+/*
+ * Return a random number between min and max (both included).
+ *
+ * It favors slightly the higher numbers.
+ */
+static long shadow_random (long min, long max)
+{
+ double drand;
+ long ret;
+ seedRNG ();
+ drand = (double) (max - min + 1) * random () / RANDOM_MAX;
+ /* On systems were this is not random() range is lower, we favor
+ * higher numbers of salt. */
+ ret = (long) (max + 1 - drand);
+ /* And we catch limits, and use the highest number */
+ if ((ret < min) || (ret > max)) {
+ ret = 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.
+ */
+static /*@observer@*/const char *SHA_salt_rounds (/*@null@*/int *prefered_rounds)
+{
+ static char rounds_prefix[18]; /* Max size: rounds=999999999$ */
+ long rounds;
+
+ if (NULL == prefered_rounds) {
+ long min_rounds = getdef_long ("SHA_CRYPT_MIN_ROUNDS", -1);
+ long max_rounds = getdef_long ("SHA_CRYPT_MAX_ROUNDS", -1);
+
+ if ((-1 == min_rounds) && (-1 == max_rounds)) {
+ return "";
+ }
+
+ 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 if (0 == *prefered_rounds) {
+ return "";
+ } else {
+ rounds = *prefered_rounds;
+ }
+
+ /* Sanity checks. The libc should also check this, but this
+ * protects against a rounds_prefix overflow. */
+ if (rounds < ROUNDS_MIN) {
+ rounds = ROUNDS_MIN;
+ }
+
+ if (rounds > ROUNDS_MAX) {
+ rounds = ROUNDS_MAX;
+ }
+
+ (void) snprintf (rounds_prefix, sizeof rounds_prefix,
+ "rounds=%ld$", rounds);
+
+ return rounds_prefix;
+}
+#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.
+ */
+#define MAX_SALT_SIZE 16
+#define MIN_SALT_SIZE 8
+
+static /*@observer@*/const char *gensalt (size_t salt_size)
+{
+ static char salt[32];
+
+ salt[0] = '\0';
+
+ assert (salt_size >= MIN_SALT_SIZE &&
+ salt_size <= MAX_SALT_SIZE);
+ seedRNG ();
+ strcat (salt, l64a (random()));
+ do {
+ strcat (salt, l64a (random()));
+ } while (strlen (salt) < salt_size);
+
+ salt[salt_size] = '\0';
+
+ return salt;
+}
+
+/*
+ * Generate 8 base64 ASCII characters of random salt. If MD5_CRYPT_ENAB
+ * in /etc/login.defs is "yes", the salt string will be prefixed by "$1$"
+ * (magic) and pw_encrypt() will execute the MD5-based FreeBSD-compatible
+ * version of crypt() instead of the standard one.
+ * Other methods can be set with ENCRYPT_METHOD
+ *
+ * The method can be forced with the meth parameter.
+ * If NULL, the method will be defined according to the MD5_CRYPT_ENAB and
+ * ENCRYPT_METHOD login.defs variables.
+ *
+ * If meth is specified, an additional parameter can be provided.
+ * * For the SHA256 and SHA512 method, this specifies the number of rounds
+ * (if not NULL).
+ */
+/*@observer@*/const char *crypt_make_salt (/*@null@*//*@observer@*/const char *meth, /*@null@*/void *arg)
+{
+ /* Max result size for the SHA methods:
+ * +3 $5$
+ * +17 rounds=999999999$
+ * +16 salt
+ * +1 \0
+ */
+ static char result[40];
+ size_t salt_len = 8;
+ const char *method;
+
+ result[0] = '\0';
+
+ if (NULL != meth)
+ method = meth;
+ else {
+ method = getdef_str ("ENCRYPT_METHOD");
+ if (NULL == method) {
+ method = getdef_bool ("MD5_CRYPT_ENAB") ? "MD5" : "DES";
+ }
+ }
+
+ 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');
+ strcat(result, SHA_salt_rounds((int *)arg));
+ salt_len = (size_t) shadow_random (8, 16);
+ } else if (0 == strcmp (method, "SHA512")) {
+ MAGNUM(result, '6');
+ strcat(result, SHA_salt_rounds((int *)arg));
+ salt_len = (size_t) shadow_random (8, 16);
+#endif /* USE_SHA_CRYPT */
+ } else if (0 != strcmp (method, "DES")) {
+ fprintf (stderr,
+ _("Invalid ENCRYPT_METHOD value: '%s'.\n"
+ "Defaulting to DES.\n"),
+ method);
+ result[0] = '\0';
+ }
+
+ /*
+ * Concatenate a pseudo random salt.
+ */
+ assert (sizeof (result) > strlen (result) + salt_len);
+#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;
+}
+
diff --git a/libmisc/setugid.c b/libmisc/setugid.c
new file mode 100644
index 0000000..9bb62af
--- /dev/null
+++ b/libmisc/setugid.c
@@ -0,0 +1,148 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008 - 2010, 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.
+ */
+
+/*
+ * Separated from setup.c. --marekm
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include <stdio.h>
+#include <grp.h>
+#include <errno.h>
+#include "prototypes.h"
+#include "defines.h"
+#include <pwd.h>
+#include "getdef.h"
+
+/*
+ * setup_groups - set the group credentials
+ * set the group ID to the value from the password file entry
+ * set the supplementary group IDs
+ *
+ * In case of PAM enabled configurations, this shall be called before
+ * pam_setcred.
+ *
+ * Returns 0 on success, or -1 on failure.
+ */
+int setup_groups (const struct passwd *info)
+{
+ /*
+ * Set the real group ID to the primary group ID in the password
+ * file.
+ */
+ if (setgid (info->pw_gid) == -1) {
+ int err = errno;
+ perror ("setgid");
+ SYSLOG ((LOG_ERR, "bad group ID `%d' for user `%s': %s\n",
+ info->pw_gid, info->pw_name, strerror (err)));
+ closelog ();
+ return -1;
+ }
+#ifdef HAVE_INITGROUPS
+ /*
+ * For systems which support multiple concurrent groups, go get
+ * the group set from the /etc/group file.
+ */
+ if (initgroups (info->pw_name, info->pw_gid) == -1) {
+ int err = errno;
+ perror ("initgroups");
+ SYSLOG ((LOG_ERR, "initgroups failed for user `%s': %s\n",
+ info->pw_name, strerror (err)));
+ closelog ();
+ return -1;
+ }
+#endif
+ return 0;
+}
+
+/*
+ * change_uid - Set the real UID
+ *
+ * Returns 0 on success, or -1 on failure.
+ */
+int change_uid (const struct passwd *info)
+{
+ /*
+ * Set the real UID to the UID value in the password file.
+ */
+ if (setuid (info->pw_uid) != 0) {
+ int err = errno;
+ perror ("setuid");
+ SYSLOG ((LOG_ERR, "bad user ID `%d' for user `%s': %s\n",
+ (int) info->pw_uid, info->pw_name, strerror (err)));
+ closelog ();
+ return -1;
+ }
+ return 0;
+}
+
+/*
+ * setup_uid_gid() performs the following steps -
+ *
+ * set the group ID to the value from the password file entry
+ * set the supplementary group IDs
+ * optionally call specified function which may add more groups
+ * set the user ID to the value from the password file entry
+ *
+ * Returns 0 on success, or -1 on failure.
+ */
+
+#if defined (HAVE_INITGROUPS) && ! (defined USE_PAM)
+int setup_uid_gid (const struct passwd *info, bool is_console)
+#else
+int setup_uid_gid (const struct passwd *info)
+#endif
+{
+ if (setup_groups (info) < 0) {
+ return -1;
+ }
+
+#if defined (HAVE_INITGROUPS) && ! defined (USE_PAM)
+ if (is_console) {
+ const char *cp = getdef_str ("CONSOLE_GROUPS");
+
+ if ((NULL != cp) && (add_groups (cp) != 0)) {
+ perror ("Warning: add_groups");
+ }
+ }
+#endif /* HAVE_INITGROUPS && !USE_PAM*/
+
+ if (change_uid (info) < 0) {
+ return -1;
+ }
+
+ return 0;
+}
+
diff --git a/libmisc/setupenv.c b/libmisc/setupenv.c
new file mode 100644
index 0000000..24c6e67
--- /dev/null
+++ b/libmisc/setupenv.c
@@ -0,0 +1,312 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2010, 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.
+ */
+
+/*
+ * Separated from setup.c. --marekm
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include <assert.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <ctype.h>
+#include "prototypes.h"
+#include "defines.h"
+#include <pwd.h>
+#include "getdef.h"
+
+#ifndef USE_PAM
+static void
+addenv_path (const char *varname, const char *dirname, const char *filename)
+{
+ char *buf;
+ size_t len = strlen (dirname) + strlen (filename) + 2;
+ int wlen;
+
+ buf = xmalloc (len);
+ wlen = snprintf (buf, len, "%s/%s", dirname, filename);
+ assert (wlen == (int) len - 1);
+
+ addenv (varname, buf);
+ free (buf);
+}
+
+static void read_env_file (const char *filename)
+{
+ FILE *fp;
+ char buf[1024];
+ char *cp, *name, *val;
+
+ fp = fopen (filename, "r");
+ if (NULL == fp) {
+ return;
+ }
+ while (fgets (buf, (int)(sizeof buf), fp) == buf) {
+ cp = strrchr (buf, '\n');
+ if (NULL == cp) {
+ break;
+ }
+ *cp = '\0';
+
+ cp = buf;
+ /* ignore whitespace and comments */
+ while (('\0' != *cp) && isspace (*cp)) {
+ cp++;
+ }
+ if (('\0' == *cp) || ('#' == *cp)) {
+ continue;
+ }
+ /*
+ * ignore lines which don't follow the name=value format
+ * (for example, the "export NAME" shell commands)
+ */
+ name = cp;
+ while (('\0' != *cp) && !isspace (*cp) && ('=' != *cp)) {
+ cp++;
+ }
+ if ('=' != *cp) {
+ continue;
+ }
+ /* NUL-terminate the name */
+ *cp = '\0';
+ cp++;
+ val = cp;
+#if 0 /* XXX untested, and needs rewrite with fewer goto's :-) */
+/*
+ (state, char_type) -> (state, action)
+
+ state: unquoted, single_quoted, double_quoted, escaped, double_quoted_escaped
+ char_type: normal, white, backslash, single, double
+ action: remove_curr, remove_curr_skip_next, remove_prev, finish XXX
+*/
+ no_quote:
+ if (*cp == '\\') {
+ /* remove the backslash */
+ remove_char (cp);
+ /* skip over the next character */
+ if (*cp)
+ cp++;
+ goto no_quote;
+ } else if (*cp == '\'') {
+ /* remove the quote */
+ remove_char (cp);
+ /* now within single quotes */
+ goto s_quote;
+ } else if (*cp == '"') {
+ /* remove the quote */
+ remove_char (cp);
+ /* now within double quotes */
+ goto d_quote;
+ } else if (*cp == '\0') {
+ /* end of string */
+ goto finished;
+ } else if (isspace (*cp)) {
+ /* unescaped whitespace - end of string */
+ *cp = '\0';
+ goto finished;
+ } else {
+ cp++;
+ goto no_quote;
+ }
+ s_quote:
+ if (*cp == '\'') {
+ /* remove the quote */
+ remove_char (cp);
+ /* unquoted again */
+ goto no_quote;
+ } else if (*cp == '\0') {
+ /* end of string */
+ goto finished;
+ } else {
+ /* preserve everything within single quotes */
+ cp++;
+ goto s_quote;
+ }
+ d_quote:
+ if (*cp == '\"') {
+ /* remove the quote */
+ remove_char (cp);
+ /* unquoted again */
+ goto no_quote;
+ } else if (*cp == '\\') {
+ cp++;
+ /* if backslash followed by double quote, remove backslash
+ else skip over the backslash and following char */
+ if (*cp == '"')
+ remove_char (cp - 1);
+ else if (*cp)
+ cp++;
+ goto d_quote;
+ }
+ else if (*cp == '\0') {
+ /* end of string */
+ goto finished;
+ } else {
+ /* preserve everything within double quotes */
+ goto d_quote;
+ }
+ finished:
+#endif /* 0 */
+ /*
+ * XXX - should handle quotes, backslash escapes, etc.
+ * like the shell does.
+ */
+ addenv (name, val);
+ }
+ (void) fclose (fp);
+}
+#endif /* USE_PAM */
+
+
+/*
+ * change to the user's home directory
+ * set the HOME, SHELL, MAIL, PATH, and LOGNAME or USER environmental
+ * variables.
+ */
+
+void setup_env (struct passwd *info)
+{
+#ifndef USE_PAM
+ const char *envf;
+#endif
+ const char *cp;
+
+ /*
+ * Change the current working directory to be the home directory
+ * of the user. It is a fatal error for this process to be unable
+ * to change to that directory. There is no "default" home
+ * directory.
+ *
+ * We no longer do it as root - should work better on NFS-mounted
+ * home directories. Some systems default to HOME=/, so we make
+ * this a configurable option. --marekm
+ */
+
+ if (chdir (info->pw_dir) == -1) {
+ static char temp_pw_dir[] = "/";
+
+ if (!getdef_bool ("DEFAULT_HOME") || chdir ("/") == -1) {
+ fprintf (stderr, _("Unable to cd to '%s'\n"),
+ info->pw_dir);
+ SYSLOG ((LOG_WARN,
+ "unable to cd to `%s' for user `%s'\n",
+ info->pw_dir, info->pw_name));
+ closelog ();
+ exit (EXIT_FAILURE);
+ }
+ (void) puts (_("No directory, logging in with HOME=/"));
+ free (info->pw_dir);
+ info->pw_dir = xstrdup (temp_pw_dir);
+ }
+
+ /*
+ * Create the HOME environmental variable and export it.
+ */
+
+ addenv ("HOME", info->pw_dir);
+
+ /*
+ * Create the SHELL environmental variable and export it.
+ */
+
+ if ((NULL == info->pw_shell) || ('\0' == *info->pw_shell)) {
+ static char temp_pw_shell[] = SHELL;
+
+ free (info->pw_shell);
+ info->pw_shell = xstrdup (temp_pw_shell);
+ }
+
+ addenv ("SHELL", info->pw_shell);
+
+ /*
+ * Export the user name. For BSD derived systems, it's "USER", for
+ * all others it's "LOGNAME". We set both of them.
+ */
+
+ addenv ("USER", info->pw_name);
+ addenv ("LOGNAME", info->pw_name);
+
+ /*
+ * Create the PATH environmental variable and export it.
+ */
+
+ cp = getdef_str ((info->pw_uid == 0) ? "ENV_SUPATH" : "ENV_PATH");
+
+ if (NULL == cp) {
+ /* not specified, use a minimal default */
+ addenv ((info->pw_uid == 0) ? "PATH=/sbin:/bin:/usr/sbin:/usr/bin" : "PATH=/bin:/usr/bin", NULL);
+ } else if (strchr (cp, '=')) {
+ /* specified as name=value (PATH=...) */
+ addenv (cp, NULL);
+ } else {
+ /* only value specified without "PATH=" */
+ addenv ("PATH", cp);
+ }
+
+#ifndef USE_PAM
+ /*
+ * Create the MAIL environmental variable and export it. login.defs
+ * knows the prefix.
+ */
+
+ if (getdef_bool ("MAIL_CHECK_ENAB")) {
+ cp = getdef_str ("MAIL_DIR");
+ if (NULL != cp) {
+ addenv_path ("MAIL", cp, info->pw_name);
+ } else {
+ cp = getdef_str ("MAIL_FILE");
+ if (NULL != cp) {
+ addenv_path ("MAIL", info->pw_dir, cp);
+ } else {
+#if defined(MAIL_SPOOL_FILE)
+ addenv_path ("MAIL", info->pw_dir, MAIL_SPOOL_FILE);
+#elif defined(MAIL_SPOOL_DIR)
+ addenv_path ("MAIL", MAIL_SPOOL_DIR, info->pw_name);
+#endif
+ }
+ }
+ }
+
+ /*
+ * Read environment from optional config file. --marekm
+ */
+ envf = getdef_str ("ENVIRON_FILE");
+ if (NULL != envf) {
+ read_env_file (envf);
+ }
+#endif /* !USE_PAM */
+}
+
diff --git a/libmisc/shell.c b/libmisc/shell.c
new file mode 100644
index 0000000..92bfc2b
--- /dev/null
+++ b/libmisc/shell.c
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 1989 - 1991, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2006, Tomasz Kłoczko
+ * Copyright (c) 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.
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include <stdio.h>
+#include <errno.h>
+#include "prototypes.h"
+#include "defines.h"
+extern char **newenvp;
+extern size_t newenvc;
+
+/*
+ * shell - execute the named program
+ *
+ * shell begins by trying to figure out what argv[0] is going to
+ * be for the named process. The user may pass in that argument,
+ * or it will be the last pathname component of the file with a
+ * '-' prepended.
+ * Then, it executes the named file.
+ */
+
+int shell (const char *file, /*@null@*/const char *arg, char *const envp[])
+{
+ char arg0[1024];
+ int err;
+
+ if (file == (char *) 0) {
+ errno = EINVAL;
+ return errno;
+ }
+
+ /*
+ * The argv[0]'th entry is usually the path name, but
+ * for various reasons the invoker may want to override
+ * that. So, we determine the 0'th entry only if they
+ * don't want to tell us what it is themselves.
+ */
+ if (arg == (char *) 0) {
+ (void) snprintf (arg0, sizeof arg0, "-%s", Basename ((char *) file));
+ arg0[sizeof arg0 - 1] = '\0';
+ arg = arg0;
+ }
+
+ /*
+ * First we try the direct approach. The system should be
+ * able to figure out what we are up to without too much
+ * grief.
+ */
+ (void) execle (file, arg, (char *) 0, envp);
+ err = errno;
+
+ if (access (file, R_OK|X_OK) == 0) {
+ /*
+ * Assume this is a shell script (with no shebang).
+ * Interpret it with /bin/sh
+ */
+ (void) execle (SHELL, "sh", "-", file, (char *)0, envp);
+ err = errno;
+ }
+
+ /*
+ * Obviously something is really wrong - I can't figure out
+ * how to execute this stupid shell, so I might as well give
+ * up in disgust ...
+ */
+ (void) snprintf (arg0, sizeof arg0, _("Cannot execute %s"), file);
+ errno = err;
+ perror (arg0);
+ return err;
+}
+
diff --git a/libmisc/strtoday.c b/libmisc/strtoday.c
new file mode 100644
index 0000000..860f06d
--- /dev/null
+++ b/libmisc/strtoday.c
@@ -0,0 +1,243 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1999, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008 , 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.
+ */
+
+#if !defined(__GLIBC__)
+#define _XOPEN_SOURCE 500
+#endif
+
+#include <config.h>
+
+#include <ctype.h>
+
+#ident "$Id$"
+
+#include "defines.h"
+#include "prototypes.h"
+
+#ifndef USE_GETDATE
+#define USE_GETDATE 1
+#endif
+
+#if USE_GETDATE
+#include "getdate.h"
+/*
+ * strtoday() now uses get_date() (borrowed from GNU shellutils)
+ * which can handle many date formats, for example:
+ * 1970-09-17 # ISO 8601.
+ * 70-9-17 # This century assumed by default.
+ * 70-09-17 # Leading zeros are ignored.
+ * 9/17/72 # Common U.S. writing.
+ * 24 September 1972
+ * 24 Sept 72 # September has a special abbreviation.
+ * 24 Sep 72 # Three-letter abbreviations always allowed.
+ * Sep 24, 1972
+ * 24-sep-72
+ * 24sep72
+ */
+long strtoday (const char *str)
+{
+ time_t t;
+ bool isnum = true;
+ const char *s = str;
+
+ /*
+ * get_date() interprets an empty string as the current date,
+ * which is not what we expect, unless you're a BOFH :-).
+ * (useradd sets sp_expire = current date for new lusers)
+ */
+ if ((NULL == str) || ('\0' == *str)) {
+ return -1;
+ }
+
+ /* If a numerical value is provided, this is already a number of
+ * days since EPOCH.
+ */
+ if ('-' == *s) {
+ s++;
+ }
+ while (' ' == *s) {
+ s++;
+ }
+ while (isnum && ('\0' != *s)) {
+ if (!isdigit (*s)) {
+ isnum = false;
+ }
+ s++;
+ }
+ if (isnum) {
+ long retdate;
+ if (getlong (str, &retdate) == 0) {
+ return -2;
+ }
+ return retdate;
+ }
+
+ t = get_date (str, NULL);
+ if ((time_t) - 1 == t) {
+ return -2;
+ }
+ /* convert seconds to days since 1970-01-01 */
+ return (long) (t + DAY / 2) / DAY;
+}
+
+#else /* !USE_GETDATE */
+/*
+ * Old code, just in case get_date() doesn't work as expected...
+ */
+#include <stdio.h>
+#ifdef HAVE_STRPTIME
+/*
+ * for now we allow just one format, but we can define more later
+ * (we try them all until one succeeds). --marekm
+ */
+static char *date_formats[] = {
+ "%Y-%m-%d",
+ (char *) 0
+};
+#else
+/*
+ * days and juldays are used to compute the number of days in the
+ * 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,
+ 31, 28, 31, 30, 31, 30, /* JAN - JUN */
+ 31, 31, 30, 31, 30, 31
+}; /* JUL - DEC */
+
+static short juldays[13] = { 0,
+ 0, 31, 59, 90, 120, 151, /* JAN - JUN */
+ 181, 212, 243, 273, 304, 334
+}; /* JUL - DEC */
+#endif
+
+/*
+ * strtoday - compute the number of days since 1970.
+ *
+ * the total number of days prior to the current date is
+ * computed. january 1, 1970 is used as the origin with
+ * it having a day number of 0.
+ */
+
+long strtoday (const char *str)
+{
+#ifdef HAVE_STRPTIME
+ struct tm tp;
+ char *const *fmt;
+ char *cp;
+ time_t result;
+
+ memzero (&tp, sizeof tp);
+ for (fmt = date_formats; *fmt; fmt++) {
+ cp = strptime ((char *) str, *fmt, &tp);
+ if ((NULL == cp) || ('\0' != *cp)) {
+ continue;
+ }
+
+ result = mktime (&tp);
+ if ((time_t) - 1 == result) {
+ continue;
+ }
+
+ return (long) (result / DAY); /* success */
+ }
+ return -1;
+#else
+ char slop[2];
+ int month;
+ int day;
+ int year;
+ long total;
+
+ /*
+ * start by separating the month, day and year. the order
+ * is compiled in ...
+ */
+
+ if (sscanf (str, "%d/%d/%d%c", &year, &month, &day, slop) != 3) {
+ return -1;
+ }
+
+ /*
+ * the month, day of the month, and year are checked for
+ * correctness and the year adjusted so it falls between
+ * 1970 and 2069.
+ */
+
+ if ((month < 1) || (month > 12)) {
+ return -1;
+ }
+
+ if (day < 1) {
+ return -1;
+ }
+
+ if ( ((2 != month) || ((year % 4) != 0))
+ && (day > days[month])) {
+ return -1;
+ } else if ((month == 2) && ((year % 4) == 0) && (day > 29)) {
+ return -1;
+ }
+
+ if (year < 0) {
+ return -1;
+ } else if (year <= 69) {
+ year += 2000;
+ } else if (year <= 99) {
+ year += 1900;
+ }
+
+ /*
+ * On systems with 32-bit signed time_t, time wraps around in 2038
+ * - for now we just limit the year to 2037 (instead of 2069).
+ * This limit can be removed once no one is using 32-bit systems
+ * anymore :-). --marekm
+ */
+ if ((year < 1970) || (year > 2037)) {
+ return -1;
+ }
+
+ /*
+ * the total number of days is the total number of days in all
+ * the whole years, plus the number of leap days, plus the
+ * number of days in the whole months preceding, plus the number
+ * of days so far in the month.
+ */
+
+ total = (long) ((year - 1970) * 365L) + (((year + 1) - 1970) / 4);
+ total += (long) juldays[month] + (month > 2 && (year % 4) == 0 ? 1 : 0);
+ total += (long) day - 1;
+
+ return total;
+#endif /* HAVE_STRPTIME */
+}
+#endif /* !USE_GETDATE */
diff --git a/libmisc/sub.c b/libmisc/sub.c
new file mode 100644
index 0000000..b0e32d1
--- /dev/null
+++ b/libmisc/sub.c
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 1989 - 1991, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1999, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2006, Tomasz Kłoczko
+ * 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 <pwd.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include "prototypes.h"
+#include "defines.h"
+#define BAD_SUBROOT2 "invalid root `%s' for user `%s'\n"
+#define NO_SUBROOT2 "no subsystem root `%s' for user `%s'\n"
+/*
+ * subsystem - change to subsystem root
+ *
+ * A subsystem login is indicated by the presence of a "*" as
+ * the first character of the login shell. The given home
+ * directory will be used as the root of a new filesystem which
+ * the user is actually logged into.
+ */
+void subsystem (const struct passwd *pw)
+{
+ /*
+ * The new root directory must begin with a "/" character.
+ */
+
+ if (pw->pw_dir[0] != '/') {
+ printf (_("Invalid root directory '%s'\n"), pw->pw_dir);
+ SYSLOG ((LOG_WARN, BAD_SUBROOT2, pw->pw_dir, pw->pw_name));
+ closelog ();
+ exit (EXIT_FAILURE);
+ }
+
+ /*
+ * The directory must be accessible and the current process
+ * must be able to change into it.
+ */
+
+ if ( (chdir (pw->pw_dir) != 0)
+ || (chroot (pw->pw_dir) != 0)) {
+ (void) printf (_("Can't change root directory to '%s'\n"),
+ pw->pw_dir);
+ SYSLOG ((LOG_WARN, NO_SUBROOT2, pw->pw_dir, pw->pw_name));
+ closelog ();
+ exit (EXIT_FAILURE);
+ }
+}
+
diff --git a/libmisc/sulog.c b/libmisc/sulog.c
new file mode 100644
index 0000000..4068acd
--- /dev/null
+++ b/libmisc/sulog.c
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 1989 - 1992, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008 - 2010, 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 <sys/types.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <time.h>
+#include "prototypes.h"
+#include "defines.h"
+#include "getdef.h"
+
+/*
+ * sulog - log a SU command execution result
+ */
+void sulog (const char *tty, bool success, const char *oldname, const char *name)
+{
+ const char *sulog_file;
+ time_t now;
+ struct tm *tm;
+ FILE *fp;
+ mode_t oldmask;
+ gid_t oldgid = 0;
+
+ if (success) {
+ SYSLOG ((LOG_INFO,
+ "Successful su for %s by %s",name,oldname));
+ } else {
+ SYSLOG ((LOG_NOTICE,
+ "FAILED su for %s by %s",name,oldname));
+ }
+
+ sulog_file = getdef_str ("SULOG_FILE");
+ if (NULL == sulog_file) {
+ return;
+ }
+
+ oldgid = getgid ();
+ oldmask = umask (077);
+ /* Switch to group root to avoid creating the sulog file with
+ * the wrong group ownership. */
+ if ((oldgid != 0) && (setgid (0) != 0)) {
+ SYSLOG ((LOG_INFO,
+ "su session not logged to %s", sulog_file));
+ /* Continue, but do not switch back to oldgid later */
+ oldgid = 0;
+ }
+ fp = fopen (sulog_file, "a+");
+ (void) umask (oldmask);
+ if ((oldgid != 0) && (setgid (oldgid) != 0)) {
+ perror ("setgid");
+ SYSLOG ((LOG_ERR,
+ "can't switch back to group `%d' in sulog",
+ oldgid));
+ /* Do not return if the group permission were raised. */
+ exit (EXIT_FAILURE);
+ }
+ if (fp == (FILE *) 0) {
+ return; /* can't open or create logfile */
+ }
+
+ (void) time (&now);
+ tm = localtime (&now);
+
+ fprintf (fp, "SU %.02d/%.02d %.02d:%.02d %c %s %s-%s\n",
+ tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min,
+ success ? '+' : '-', tty, oldname, name);
+
+ (void) fflush (fp);
+ fsync (fileno (fp));
+ fclose (fp);
+ /* TODO: log if failure */
+}
+
diff --git a/libmisc/ttytype.c b/libmisc/ttytype.c
new file mode 100644
index 0000000..06e7944
--- /dev/null
+++ b/libmisc/ttytype.c
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008 - 2010, 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 "prototypes.h"
+#include "defines.h"
+#include "getdef.h"
+/*
+ * ttytype - set ttytype from port to terminal type mapping database
+ */
+void ttytype (const char *line)
+{
+ FILE *fp;
+ char buf[BUFSIZ];
+ const char *typefile;
+ char *cp;
+ char type[1024] = "";
+ char port[1024];
+
+ if (getenv ("TERM") != NULL) {
+ return;
+ }
+ typefile = getdef_str ("TTYTYPE_FILE");
+ if (NULL == typefile) {
+ return;
+ }
+ if (access (typefile, F_OK) != 0) {
+ return;
+ }
+
+ fp = fopen (typefile, "r");
+ if (NULL == fp) {
+ perror (typefile);
+ return;
+ }
+ while (fgets (buf, (int) sizeof buf, fp) == buf) {
+ if (buf[0] == '#') {
+ continue;
+ }
+
+ cp = strchr (buf, '\n');
+ if (NULL != cp) {
+ *cp = '\0';
+ }
+
+ if ( (sscanf (buf, "%1023s %1023s", type, port) == 2)
+ && (strcmp (line, port) == 0)) {
+ break;
+ }
+ }
+ if ((feof (fp) == 0) && (ferror (fp) == 0) && (type[0] != '\0')) {
+ addenv ("TERM", type);
+ }
+
+ (void) fclose (fp);
+}
+
diff --git a/libmisc/tz.c b/libmisc/tz.c
new file mode 100644
index 0000000..bcf4f7f
--- /dev/null
+++ b/libmisc/tz.c
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1991 - 1994, Chip Rosenthal
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2010, 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>
+
+#ifndef USE_PAM
+
+#ident "$Id$"
+
+#include <stdio.h>
+#include <string.h>
+#include "defines.h"
+#include "prototypes.h"
+#include "getdef.h"
+
+/*
+ * tz - return local timezone name
+ *
+ * tz() determines the name of the local timezone by reading the
+ * contents of the file named by ``fname''.
+ */
+/*@observer@*/const char *tz (const char *fname)
+{
+ FILE *fp = NULL;
+ static char tzbuf[BUFSIZ];
+ const char *def_tz = "TZ=CST6CDT";
+
+ fp = fopen (fname, "r");
+ if ( (NULL == fp)
+ || (fgets (tzbuf, (int) sizeof (tzbuf), fp) == NULL)) {
+ def_tz = getdef_str ("ENV_TZ");
+ if ((NULL == def_tz) || ('/' == def_tz[0])) {
+ def_tz = "TZ=CST6CDT";
+ }
+
+ strcpy (tzbuf, def_tz);
+ } else {
+ tzbuf[strlen (tzbuf) - 1] = '\0';
+ }
+
+ if (NULL != fp) {
+ (void) fclose (fp);
+ }
+
+ return tzbuf;
+}
+#else /* !USE_PAM */
+extern int errno; /* warning: ANSI C forbids an empty source file */
+#endif /* !USE_PAM */
+
diff --git a/libmisc/ulimit.c b/libmisc/ulimit.c
new file mode 100644
index 0000000..30255a5
--- /dev/null
+++ b/libmisc/ulimit.c
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008 , 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$"
+
+#if HAVE_ULIMIT_H
+#include <ulimit.h>
+#ifndef UL_SETFSIZE
+#ifdef UL_SFILLIM
+#define UL_SETFSIZE UL_SFILLIM
+#else
+#define UL_SETFSIZE 2
+#endif
+#endif
+#elif HAVE_SYS_RESOURCE_H
+#include <sys/time.h> /* for struct timeval on sunos4 */
+/* XXX - is the above ok or should it be <time.h> on ultrix? */
+#include <sys/resource.h>
+#endif
+#include "prototypes.h"
+
+int set_filesize_limit (int blocks)
+{
+ int ret = -1;
+#if HAVE_ULIMIT_H
+ if (ulimit (UL_SETFSIZE, blocks) != -1) {
+ ret = 0;
+ }
+#elif defined(RLIMIT_FSIZE)
+ struct rlimit rlimit_fsize;
+
+ rlimit_fsize.rlim_cur = 512L * blocks;
+ rlimit_fsize.rlim_max = rlimit_fsize.rlim_cur;
+ ret = setrlimit (RLIMIT_FSIZE, &rlimit_fsize);
+#endif
+
+ return ret;
+}
+
diff --git a/libmisc/user_busy.c b/libmisc/user_busy.c
new file mode 100644
index 0000000..324bb94
--- /dev/null
+++ b/libmisc/user_busy.c
@@ -0,0 +1,294 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * 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.
+ */
+
+#include <config.h>
+
+#ident "$Id: $"
+
+#include <assert.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <dirent.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include "defines.h"
+#include "prototypes.h"
+#ifdef ENABLE_SUBIDS
+#include "subordinateio.h"
+#endif /* ENABLE_SUBIDS */
+
+#ifdef __linux__
+static int check_status (const char *name, const char *sname, uid_t uid);
+static int user_busy_processes (const char *name, uid_t uid);
+#else /* !__linux__ */
+static int user_busy_utmp (const char *name);
+#endif /* !__linux__ */
+
+/*
+ * user_busy - check if an user if currently running processes
+ */
+int user_busy (const char *name, uid_t uid)
+{
+ /* There are no standard ways to get the list of processes.
+ * An option could be to run an external tool (ps).
+ */
+#ifdef __linux__
+ /* On Linux, directly parse /proc */
+ return user_busy_processes (name, uid);
+#else /* !__linux__ */
+ /* If we cannot rely on /proc, check is there is a record in utmp
+ * indicating that the user is still logged in */
+ return user_busy_utmp (name);
+#endif /* !__linux__ */
+}
+
+#ifndef __linux__
+static int user_busy_utmp (const char *name)
+{
+#ifdef USE_UTMPX
+ struct utmpx *utent;
+
+ setutxent ();
+ while ((utent = getutxent ()) != NULL)
+#else /* !USE_UTMPX */
+ struct utmp *utent;
+
+ setutent ();
+ while ((utent = getutent ()) != NULL)
+#endif /* !USE_UTMPX */
+ {
+ if (utent->ut_type != USER_PROCESS) {
+ continue;
+ }
+ if (strncmp (utent->ut_user, name, sizeof utent->ut_user) != 0) {
+ continue;
+ }
+ if (kill (utent->ut_pid, 0) != 0) {
+ continue;
+ }
+
+ fprintf (stderr,
+ _("%s: user %s is currently logged in\n"),
+ Prog, name);
+ return 1;
+ }
+
+ return 0;
+}
+#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 */
+ char status[40];
+ char line[1024];
+ FILE *sfile;
+
+ snprintf (status, 40, "/proc/%s/status", sname);
+
+ sfile = fopen (status, "r");
+ if (NULL == sfile) {
+ return 0;
+ }
+ 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) ) {
+ 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. */
+ }
+ return 0;
+ }
+ }
+ (void) fclose (sfile);
+ return 0;
+}
+
+static int user_busy_processes (const char *name, uid_t uid)
+{
+ DIR *proc;
+ struct dirent *ent;
+ char *tmp_d_name;
+ pid_t pid;
+ DIR *task_dir;
+ /* 22: /proc/xxxxxxxxxx/task + \0 */
+ char task_path[22];
+ char root_path[22];
+ struct stat sbroot;
+ struct stat sbroot_process;
+
+#ifdef ENABLE_SUBIDS
+ sub_uid_open (O_RDONLY);
+#endif /* ENABLE_SUBIDS */
+
+ proc = opendir ("/proc");
+ if (proc == NULL) {
+ perror ("opendir /proc");
+#ifdef ENABLE_SUBIDS
+ sub_uid_close();
+#endif
+ return 0;
+ }
+ if (stat ("/", &sbroot) != 0) {
+ perror ("stat (\"/\")");
+ (void) closedir (proc);
+#ifdef ENABLE_SUBIDS
+ sub_uid_close();
+#endif
+ return 0;
+ }
+
+ while ((ent = readdir (proc)) != NULL) {
+ tmp_d_name = ent->d_name;
+ /*
+ * Ingo Molnar's patch introducing NPTL for 2.4 hides
+ * threads in the /proc directory by prepending a period.
+ * This patch is applied by default in some RedHat
+ * kernels.
+ */
+ if ( (strcmp (tmp_d_name, ".") == 0)
+ || (strcmp (tmp_d_name, "..") == 0)) {
+ continue;
+ }
+ if (*tmp_d_name == '.') {
+ tmp_d_name++;
+ }
+
+ /* Check if this is a valid PID */
+ if (get_pid (tmp_d_name, &pid) == 0) {
+ continue;
+ }
+
+ /* Check if the process is in our chroot */
+ snprintf (root_path, 22, "/proc/%lu/root", (unsigned long) pid);
+ root_path[21] = '\0';
+ if (stat (root_path, &sbroot_process) != 0) {
+ continue;
+ }
+ if ( (sbroot.st_dev != sbroot_process.st_dev)
+ || (sbroot.st_ino != sbroot_process.st_ino)) {
+ continue;
+ }
+
+ if (check_status (name, tmp_d_name, uid) != 0) {
+ (void) closedir (proc);
+#ifdef ENABLE_SUBIDS
+ sub_uid_close();
+#endif
+ fprintf (stderr,
+ _("%s: user %s is currently used by process %d\n"),
+ Prog, name, pid);
+ return 1;
+ }
+
+ snprintf (task_path, 22, "/proc/%lu/task", (unsigned long) pid);
+ task_path[21] = '\0';
+ task_dir = opendir (task_path);
+ if (task_dir != NULL) {
+ while ((ent = readdir (task_dir)) != NULL) {
+ pid_t tid;
+ if (get_pid (ent->d_name, &tid) == 0) {
+ continue;
+ }
+ if (tid == pid) {
+ continue;
+ }
+ if (check_status (name, task_path+6, uid) != 0) {
+ (void) closedir (proc);
+#ifdef ENABLE_SUBIDS
+ sub_uid_close();
+#endif
+ fprintf (stderr,
+ _("%s: user %s is currently used by process %d\n"),
+ Prog, name, pid);
+ return 1;
+ }
+ }
+ (void) closedir (task_dir);
+ } else {
+ /* Ignore errors. This is just a best effort */
+ }
+ }
+
+ (void) closedir (proc);
+#ifdef ENABLE_SUBIDS
+ sub_uid_close();
+#endif /* ENABLE_SUBIDS */
+ return 0;
+}
+#endif /* __linux__ */
+
diff --git a/libmisc/utmp.c b/libmisc/utmp.c
new file mode 100644
index 0000000..ba69cf6
--- /dev/null
+++ b/libmisc/utmp.c
@@ -0,0 +1,496 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1999, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008 - 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.
+ */
+
+#include <config.h>
+
+#include "defines.h"
+#include "prototypes.h"
+
+#ifdef USE_UTMPX
+#include <utmpx.h>
+#else
+#include <utmp.h>
+#endif
+
+#include <assert.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netdb.h>
+#include <stdio.h>
+
+#ident "$Id$"
+
+
+/*
+ * is_my_tty -- determine if "tty" is the same TTY stdin is using
+ */
+static bool is_my_tty (const char *tty)
+{
+ /* full_tty shall be at least sizeof utmp.ut_line + 5 */
+ char full_tty[200];
+ /* tmptty shall be bigger than full_tty */
+ static char tmptty[sizeof (full_tty)+1];
+
+ if ('/' != *tty) {
+ (void) snprintf (full_tty, sizeof full_tty, "/dev/%s", tty);
+ tty = &full_tty[0];
+ }
+
+ if ('\0' == tmptty[0]) {
+ const char *tname = ttyname (STDIN_FILENO);
+ if (NULL != tname) {
+ (void) strncpy (tmptty, tname, sizeof tmptty);
+ tmptty[sizeof (tmptty) - 1] = '\0';
+ }
+ }
+
+ if ('\0' == tmptty[0]) {
+ (void) puts (_("Unable to determine your tty name."));
+ exit (EXIT_FAILURE);
+ } else if (strncmp (tty, tmptty, sizeof (tmptty)) != 0) {
+ return false;
+ } else {
+ return true;
+ }
+}
+
+/*
+ * get_current_utmp - return the most probable utmp entry for the current
+ * session
+ *
+ * The utmp file is scanned for an entry with the same process ID.
+ * 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
+ * structure has a ut_id field, this field should be used to update
+ * the entry information.
+ *
+ * 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;
+ struct utmp *ret = NULL;
+
+ setutent ();
+
+ /* First, try to find a valid utmp entry for this process. */
+ while ((ut = getutent ()) != NULL) {
+ if ( (ut->ut_pid == getpid ())
+#ifdef HAVE_STRUCT_UTMP_UT_ID
+ && ('\0' != ut->ut_id[0])
+#endif
+#ifdef HAVE_STRUCT_UTMP_UT_TYPE
+ && ( (LOGIN_PROCESS == ut->ut_type)
+ || (USER_PROCESS == ut->ut_type))
+#endif
+ /* A process may have failed to close an entry
+ * Check if this entry refers to the current tty */
+ && is_my_tty (ut->ut_line)) {
+ break;
+ }
+ }
+
+ if (NULL != ut) {
+ ret = (struct utmp *) xmalloc (sizeof (*ret));
+ memcpy (ret, ut, sizeof (*ret));
+ }
+
+ endutent ();
+
+ 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
+/*
+ * Some systems already have updwtmp() and possibly updwtmpx(). Others
+ * don't, so we re-implement these functions if necessary.
+ */
+#ifndef HAVE_UPDWTMP
+static void updwtmp (const char *filename, const struct utmp *ut)
+{
+ int fd;
+
+ fd = open (filename, O_APPEND | O_WRONLY, 0);
+ if (fd >= 0) {
+ write (fd, (const char *) ut, sizeof (*ut));
+ close (fd);
+ }
+}
+#endif /* ! HAVE_UPDWTMP */
+
+#ifdef USE_UTMPX
+#ifndef HAVE_UPDWTMPX
+static void updwtmpx (const char *filename, const struct utmpx *utx)
+{
+ int fd;
+
+ fd = open (filename, O_APPEND | O_WRONLY, 0);
+ if (fd >= 0) {
+ write (fd, (const char *) utx, sizeof (*utx));
+ close (fd);
+ }
+}
+#endif /* ! HAVE_UPDWTMPX */
+#endif /* ! USE_UTMPX */
+#endif /* ! USE_PAM */
+
+
+#ifndef USE_UTMPX
+/*
+ * prepare_utmp - prepare an utmp entry so that it can be logged in a
+ * utmp/wtmp file.
+ *
+ * It accepts an utmp entry in input (ut) to return an entry with
+ * the right ut_id. This is typically an entry returned by
+ * get_current_utmp
+ * If ut is NULL, ut_id will be forged based on the line argument.
+ *
+ * The ut_host field of the input structure may also be kept, and is
+ * used to define the ut_addr/ut_addr_v6 fields. (if these fields
+ * exist)
+ *
+ * Other fields are discarded and filed with new values (if they
+ * exist).
+ *
+ * The returned structure shall be freed by the caller.
+ */
+/*@only@*/struct utmp *prepare_utmp (const char *name,
+ const char *line,
+ const char *host,
+ /*@null@*/const struct utmp *ut)
+{
+ struct timeval tv;
+ char *hostname = NULL;
+ struct utmp *utent;
+
+ assert (NULL != name);
+ assert (NULL != line);
+
+
+
+ if ( (NULL != host)
+ && ('\0' != host[0])) {
+ hostname = (char *) xmalloc (strlen (host) + 1);
+ strcpy (hostname, host);
+#ifdef HAVE_STRUCT_UTMP_UT_HOST
+ } else if ( (NULL != ut)
+ && ('\0' != ut->ut_host[0])) {
+ hostname = (char *) xmalloc (sizeof (ut->ut_host) + 1);
+ strncpy (hostname, ut->ut_host, sizeof (ut->ut_host));
+ hostname[sizeof (ut->ut_host)] = '\0';
+#endif /* HAVE_STRUCT_UTMP_UT_HOST */
+ }
+
+ if (strncmp(line, "/dev/", 5) == 0) {
+ line += 5;
+ }
+
+
+ utent = (struct utmp *) xmalloc (sizeof (*utent));
+ memzero (utent, sizeof (*utent));
+
+
+
+#ifdef HAVE_STRUCT_UTMP_UT_TYPE
+ utent->ut_type = USER_PROCESS;
+#endif /* HAVE_STRUCT_UTMP_UT_TYPE */
+ utent->ut_pid = getpid ();
+ strncpy (utent->ut_line, line, sizeof (utent->ut_line));
+#ifdef HAVE_STRUCT_UTMP_UT_ID
+ if (NULL != ut) {
+ strncpy (utent->ut_id, ut->ut_id, sizeof (utent->ut_id));
+ } else {
+ /* XXX - assumes /dev/tty?? */
+ strncpy (utent->ut_id, line + 3, sizeof (utent->ut_id));
+ }
+#endif /* HAVE_STRUCT_UTMP_UT_ID */
+#ifdef HAVE_STRUCT_UTMP_UT_NAME
+ strncpy (utent->ut_name, name, sizeof (utent->ut_name));
+#endif /* HAVE_STRUCT_UTMP_UT_NAME */
+#ifdef HAVE_STRUCT_UTMP_UT_USER
+ strncpy (utent->ut_user, name, sizeof (utent->ut_user));
+#endif /* HAVE_STRUCT_UTMP_UT_USER */
+ if (NULL != hostname) {
+ struct addrinfo *info = NULL;
+#ifdef HAVE_STRUCT_UTMP_UT_HOST
+ strncpy (utent->ut_host, hostname, sizeof (utent->ut_host));
+#endif /* HAVE_STRUCT_UTMP_UT_HOST */
+#ifdef HAVE_STRUCT_UTMP_UT_SYSLEN
+ utent->ut_syslen = MIN (strlen (hostname),
+ sizeof (utent->ut_host));
+#endif /* HAVE_STRUCT_UTMP_UT_SYSLEN */
+#if defined(HAVE_STRUCT_UTMP_UT_ADDR) || defined(HAVE_STRUCT_UTMP_UT_ADDR_V6)
+ if (getaddrinfo (hostname, NULL, NULL, &info) == 0) {
+ /* getaddrinfo might not be reliable.
+ * Just try to log what may be useful.
+ */
+ if (info->ai_family == AF_INET) {
+ struct sockaddr_in *sa =
+ (struct sockaddr_in *) info->ai_addr;
+#ifdef HAVE_STRUCT_UTMP_UT_ADDR
+ memcpy (&(utent->ut_addr),
+ &(sa->sin_addr),
+ MIN (sizeof (utent->ut_addr),
+ sizeof (sa->sin_addr)));
+#endif /* HAVE_STRUCT_UTMP_UT_ADDR */
+#ifdef HAVE_STRUCT_UTMP_UT_ADDR_V6
+ memcpy (utent->ut_addr_v6,
+ &(sa->sin_addr),
+ MIN (sizeof (utent->ut_addr_v6),
+ sizeof (sa->sin_addr)));
+ } else if (info->ai_family == AF_INET6) {
+ struct sockaddr_in6 *sa =
+ (struct sockaddr_in6 *) info->ai_addr;
+ memcpy (utent->ut_addr_v6,
+ &(sa->sin6_addr),
+ MIN (sizeof (utent->ut_addr_v6),
+ sizeof (sa->sin6_addr)));
+#endif /* HAVE_STRUCT_UTMP_UT_ADDR_V6 */
+ }
+ freeaddrinfo (info);
+ }
+#endif /* HAVE_STRUCT_UTMP_UT_ADDR || HAVE_STRUCT_UTMP_UT_ADDR_V6 */
+ free (hostname);
+ }
+ /* ut_exit is only for DEAD_PROCESS */
+ utent->ut_session = getsid (0);
+ if (gettimeofday (&tv, NULL) == 0) {
+#ifdef HAVE_STRUCT_UTMP_UT_TIME
+ utent->ut_time = tv.tv_sec;
+#endif /* HAVE_STRUCT_UTMP_UT_TIME */
+#ifdef HAVE_STRUCT_UTMP_UT_XTIME
+ utent->ut_xtime = tv.tv_usec;
+#endif /* HAVE_STRUCT_UTMP_UT_XTIME */
+#ifdef HAVE_STRUCT_UTMP_UT_TV
+ utent->ut_tv.tv_sec = tv.tv_sec;
+ utent->ut_tv.tv_usec = tv.tv_usec;
+#endif /* HAVE_STRUCT_UTMP_UT_TV */
+ }
+
+ return utent;
+}
+
+/*
+ * setutmp - Update an entry in utmp and log an entry in wtmp
+ *
+ * Return 1 on failure and 0 on success.
+ */
+int setutmp (struct utmp *ut)
+{
+ int err = 0;
+
+ assert (NULL != ut);
+
+ setutent ();
+ if (pututline (ut) == NULL) {
+ err = 1;
+ }
+ endutent ();
+
+#ifndef USE_PAM
+ /* This is done by pam_lastlog */
+ updwtmp (_WTMP_FILE, ut);
+#endif /* ! USE_PAM */
+
+ return err;
+}
+
+#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 utmpx *ut)
+{
+ struct timeval tv;
+ char *hostname = NULL;
+ struct utmpx *utxent;
+
+ assert (NULL != name);
+ assert (NULL != line);
+
+
+
+ if ( (NULL != host)
+ && ('\0' != host[0])) {
+ hostname = (char *) xmalloc (strlen (host) + 1);
+ strcpy (hostname, host);
+#ifdef HAVE_STRUCT_UTMP_UT_HOST
+ } else if ( (NULL != ut)
+ && (NULL != ut->ut_host)
+ && ('\0' != ut->ut_host[0])) {
+ hostname = (char *) xmalloc (sizeof (ut->ut_host) + 1);
+ strncpy (hostname, ut->ut_host, sizeof (ut->ut_host));
+ hostname[sizeof (ut->ut_host)] = '\0';
+#endif /* HAVE_STRUCT_UTMP_UT_TYPE */
+ }
+
+ if (strncmp(line, "/dev/", 5) == 0) {
+ line += 5;
+ }
+
+ utxent = (struct utmpx *) xmalloc (sizeof (*utxent));
+ memzero (utxent, sizeof (*utxent));
+
+
+
+ utxent->ut_type = USER_PROCESS;
+ utxent->ut_pid = getpid ();
+ strncpy (utxent->ut_line, line, sizeof (utxent->ut_line));
+ /* existence of ut->ut_id is enforced by configure */
+ if (NULL != ut) {
+ strncpy (utxent->ut_id, ut->ut_id, sizeof (utxent->ut_id));
+ } else {
+ /* XXX - assumes /dev/tty?? */
+ strncpy (utxent->ut_id, line + 3, sizeof (utxent->ut_id));
+ }
+#ifdef HAVE_STRUCT_UTMPX_UT_NAME
+ strncpy (utxent->ut_name, name, sizeof (utxent->ut_name));
+#endif /* HAVE_STRUCT_UTMPX_UT_NAME */
+ strncpy (utxent->ut_user, name, sizeof (utxent->ut_user));
+ if (NULL != hostname) {
+ struct addrinfo *info = NULL;
+#ifdef HAVE_STRUCT_UTMPX_UT_HOST
+ strncpy (utxent->ut_host, hostname, sizeof (utxent->ut_host));
+#endif /* HAVE_STRUCT_UTMPX_UT_HOST */
+#ifdef HAVE_STRUCT_UTMPX_UT_SYSLEN
+ utxent->ut_syslen = MIN (strlen (hostname),
+ sizeof (utxent->ut_host));
+#endif /* HAVE_STRUCT_UTMPX_UT_SYSLEN */
+#if defined(HAVE_STRUCT_UTMPX_UT_ADDR) || defined(HAVE_STRUCT_UTMPX_UT_ADDR_V6)
+ if (getaddrinfo (hostname, NULL, NULL, &info) == 0) {
+ /* getaddrinfo might not be reliable.
+ * Just try to log what may be useful.
+ */
+ if (info->ai_family == AF_INET) {
+ struct sockaddr_in *sa =
+ (struct sockaddr_in *) info->ai_addr;
+#ifdef HAVE_STRUCT_UTMPX_UT_ADDR
+ memcpy (&utxent->ut_addr,
+ &(sa->sin_addr),
+ MIN (sizeof (utxent->ut_addr),
+ sizeof (sa->sin_addr)));
+#endif /* HAVE_STRUCT_UTMPX_UT_ADDR */
+#ifdef HAVE_STRUCT_UTMPX_UT_ADDR_V6
+ memcpy (utxent->ut_addr_v6,
+ &(sa->sin_addr),
+ MIN (sizeof (utxent->ut_addr_v6),
+ sizeof (sa->sin_addr)));
+ } else if (info->ai_family == AF_INET6) {
+ struct sockaddr_in6 *sa =
+ (struct sockaddr_in6 *) info->ai_addr;
+ memcpy (utxent->ut_addr_v6,
+ &(sa->sin6_addr),
+ MIN (sizeof (utxent->ut_addr_v6),
+ sizeof (sa->sin6_addr)));
+#endif /* HAVE_STRUCT_UTMPX_UT_ADDR_V6 */
+ }
+ freeaddrinfo (info);
+ }
+#endif /* HAVE_STRUCT_UTMPX_UT_ADDR || HAVE_STRUCT_UTMPX_UT_ADDR_V6 */
+ free (hostname);
+ }
+ /* ut_exit is only for DEAD_PROCESS */
+ utxent->ut_session = getsid (0);
+ if (gettimeofday (&tv, NULL) == 0) {
+#ifdef HAVE_STRUCT_UTMPX_UT_TIME
+ utxent->ut_time = tv.tv_sec;
+#endif /* HAVE_STRUCT_UTMPX_UT_TIME */
+#ifdef HAVE_STRUCT_UTMPX_UT_XTIME
+ utxent->ut_xtime = tv.tv_usec;
+#endif /* HAVE_STRUCT_UTMPX_UT_XTIME */
+ utxent->ut_tv.tv_sec = tv.tv_sec;
+ utxent->ut_tv.tv_usec = tv.tv_usec;
+ }
+
+ return utxent;
+}
+
+/*
+ * setutmpx - the UTMPX version for setutmp
+ */
+int setutmpx (struct utmpx *utx)
+{
+ int err = 0;
+
+ assert (NULL != utx);
+
+ setutxent ();
+ if (pututxline (utx) == NULL) {
+ err = 1;
+ }
+ endutxent ();
+
+#ifndef USE_PAM
+ /* This is done by pam_lastlog */
+ updwtmpx (_WTMP_FILE "x", utx);
+#endif /* ! USE_PAM */
+
+ return err;
+}
+#endif /* USE_UTMPX */
+
diff --git a/libmisc/valid.c b/libmisc/valid.c
new file mode 100644
index 0000000..4b85d67
--- /dev/null
+++ b/libmisc/valid.c
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 1989 - 1993, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1999, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, 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 <sys/types.h>
+#include <stdio.h>
+#include "prototypes.h"
+#include "defines.h"
+#include <pwd.h>
+/*
+ * valid - compare encrypted passwords
+ *
+ * Valid() compares the DES encrypted password from the password file
+ * against the password which the user has entered after it has been
+ * encrypted using the same salt as the original. Entries which do
+ * not have a password file entry have a NULL pw_name field and this
+ * is used to indicate that a dummy salt must be used to encrypt the
+ * password anyway.
+ */
+bool valid (const char *password, const struct passwd *ent)
+{
+ const char *encrypted;
+ /*@observer@*/const char *salt;
+
+ /*
+ * Start with blank or empty password entries. Always encrypt
+ * a password if no such user exists. Only if the ID exists and
+ * the password is really empty do you return quickly. This
+ * routine is meant to waste CPU time.
+ */
+
+ if ((NULL != ent->pw_name) && ('\0' == ent->pw_passwd[0])) {
+ if ('\0' == password[0]) {
+ return true; /* user entered nothing */
+ } else {
+ return false; /* user entered something! */
+ }
+ }
+
+ /*
+ * If there is no entry then we need a salt to use.
+ */
+
+ if ((NULL == ent->pw_name) || ('\0' == ent->pw_passwd[0])) {
+ salt = "xx";
+ } else {
+ salt = ent->pw_passwd;
+ }
+
+ /*
+ * Now, perform the encryption using the salt from before on
+ * the users input. Since we always encrypt the string, it
+ * should be very difficult to determine if the user exists by
+ * looking at execution time.
+ */
+
+ encrypted = pw_encrypt (password, salt);
+
+ /*
+ * One last time we must deal with there being no password file
+ * entry for the user. We use the pw_name == NULL idiom to
+ * cause non-existent users to not be validated.
+ */
+
+ if ( (NULL != ent->pw_name)
+ && (NULL != encrypted)
+ && (strcmp (encrypted, ent->pw_passwd) == 0)) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
diff --git a/libmisc/xgetXXbyYY.c b/libmisc/xgetXXbyYY.c
new file mode 100644
index 0000000..1b0b001
--- /dev/null
+++ b/libmisc/xgetXXbyYY.c
@@ -0,0 +1,144 @@
+/*
+ * 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.
+ */
+
+/*
+ * According to the Linux-PAM documentation:
+ *
+ * 4.1. Care about standard library calls
+ *
+ * In general, writers of authorization-granting applications should
+ * assume that each module is likely to call any or all 'libc' functions.
+ * For 'libc' functions that return pointers to static/dynamically
+ * allocated structures (ie. the library allocates the memory and the
+ * user is not expected to 'free()' it) any module call to this function
+ * is likely to corrupt a pointer previously obtained by the application.
+ * The application programmer should either re-call such a 'libc'
+ * function after a call to the Linux-PAM library, or copy the structure
+ * contents to some safe area of memory before passing control to the
+ * Linux-PAM library.
+ *
+ * Two important function classes that fall into this category are
+ * getpwnam(3) and syslog(3).
+ *
+ * This file provide wrapper to the getpwnam or getpwnam_r functions.
+ */
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include "prototypes.h"
+
+#define XFUNCTION_NAME XPREFIX (FUNCTION_NAME)
+#define XPREFIX(name) XPREFIX1 (name)
+#define XPREFIX1(name) x##name
+#define REENTRANT_NAME APPEND_R (FUNCTION_NAME)
+#define APPEND_R(name) APPEND_R1 (name)
+#define APPEND_R1(name) name##_r
+#define STRINGIZE(name) STRINGIZE1 (name)
+#define STRINGIZE1(name) #name
+
+/*@null@*/ /*@only@*/LOOKUP_TYPE *XFUNCTION_NAME (ARG_TYPE ARG_NAME)
+{
+#if HAVE_FUNCTION_R
+ LOOKUP_TYPE *result=NULL;
+ char *buffer=NULL;
+ /* we have to start with something */
+ size_t length = 0x100;
+
+ result = malloc(sizeof(LOOKUP_TYPE));
+ if (NULL == result) {
+ fprintf (stderr, _("%s: out of memory\n"),
+ "x" STRINGIZE(FUNCTION_NAME));
+ exit (13);
+ }
+
+ while (true) {
+ int status;
+ LOOKUP_TYPE *resbuf = NULL;
+ buffer = (char *)realloc (buffer, length);
+ if (NULL == buffer) {
+ fprintf (stderr, _("%s: out of memory\n"),
+ "x" STRINGIZE(FUNCTION_NAME));
+ exit (13);
+ }
+ errno = 0;
+ status = REENTRANT_NAME(ARG_NAME, result, buffer,
+ length, &resbuf);
+ if ((0 == status) && (resbuf == result)) {
+ /* Build a result structure that can be freed by
+ * the shadow *_free functions. */
+ LOOKUP_TYPE *ret_result = DUP_FUNCTION(result);
+ free(buffer);
+ free(result);
+ return ret_result;
+ }
+
+ if (ERANGE != errno) {
+ free (buffer);
+ free (result);
+ return NULL;
+ }
+
+ if (length <= ((size_t)-1 / 4)) {
+ length *= 4;
+ } else if (length == (size_t) -1) {
+ break;
+ } else {
+ length = (size_t) -1;
+ }
+ }
+
+ free(buffer);
+ free(result);
+ return NULL;
+
+#else /* !HAVE_FUNCTION_R */
+
+ /* No reentrant function.
+ * Duplicate the structure to avoid other call to overwrite it.
+ *
+ * We should also restore the initial structure. But that would be
+ * overkill.
+ */
+ LOOKUP_TYPE *result = FUNCTION_NAME(ARG_NAME);
+
+ if (result) {
+ result = DUP_FUNCTION(result);
+ if (NULL == result) {
+ fprintf (stderr, _("%s: out of memory\n"),
+ "x" STRINGIZE(FUNCTION_NAME));
+ exit (13);
+ }
+ }
+
+ return result;
+#endif
+}
+
diff --git a/libmisc/xgetgrgid.c b/libmisc/xgetgrgid.c
new file mode 100644
index 0000000..2ef171d
--- /dev/null
+++ b/libmisc/xgetgrgid.c
@@ -0,0 +1,64 @@
+/*
+ * 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.
+ */
+
+/*
+ * According to the Linux-PAM documentation:
+ *
+ * 4.1. Care about standard library calls
+ *
+ * In general, writers of authorization-granting applications should
+ * assume that each module is likely to call any or all 'libc' functions.
+ * For 'libc' functions that return pointers to static/dynamically
+ * allocated structures (ie. the library allocates the memory and the
+ * user is not expected to 'free()' it) any module call to this function
+ * is likely to corrupt a pointer previously obtained by the application.
+ * The application programmer should either re-call such a 'libc'
+ * function after a call to the Linux-PAM library, or copy the structure
+ * contents to some safe area of memory before passing control to the
+ * Linux-PAM library.
+ *
+ * Two important function classes that fall into this category are
+ * getpwnam(3) and syslog(3).
+ *
+ * This file provide wrapper to the getpwnam or getpwnam_r functions.
+ */
+
+#include <config.h>
+
+#include "groupio.h"
+
+#define LOOKUP_TYPE struct group
+#define FUNCTION_NAME getgrgid
+#define ARG_TYPE gid_t
+#define ARG_NAME gid
+#define DUP_FUNCTION __gr_dup
+#define HAVE_FUNCTION_R (defined HAVE_GETGRGID_R)
+
+#include "xgetXXbyYY.c"
+
diff --git a/libmisc/xgetgrnam.c b/libmisc/xgetgrnam.c
new file mode 100644
index 0000000..a07d0c3
--- /dev/null
+++ b/libmisc/xgetgrnam.c
@@ -0,0 +1,64 @@
+/*
+ * 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.
+ */
+
+/*
+ * According to the Linux-PAM documentation:
+ *
+ * 4.1. Care about standard library calls
+ *
+ * In general, writers of authorization-granting applications should
+ * assume that each module is likely to call any or all 'libc' functions.
+ * For 'libc' functions that return pointers to static/dynamically
+ * allocated structures (ie. the library allocates the memory and the
+ * user is not expected to 'free()' it) any module call to this function
+ * is likely to corrupt a pointer previously obtained by the application.
+ * The application programmer should either re-call such a 'libc'
+ * function after a call to the Linux-PAM library, or copy the structure
+ * contents to some safe area of memory before passing control to the
+ * Linux-PAM library.
+ *
+ * Two important function classes that fall into this category are
+ * getpwnam(3) and syslog(3).
+ *
+ * This file provide wrapper to the getpwnam or getpwnam_r functions.
+ */
+
+#include <config.h>
+
+#include "groupio.h"
+
+#define LOOKUP_TYPE struct group
+#define FUNCTION_NAME getgrnam
+#define ARG_TYPE const char *
+#define ARG_NAME name
+#define DUP_FUNCTION __gr_dup
+#define HAVE_FUNCTION_R (defined HAVE_GETGRNAM_R)
+
+#include "xgetXXbyYY.c"
+
diff --git a/libmisc/xgetpwnam.c b/libmisc/xgetpwnam.c
new file mode 100644
index 0000000..db65abb
--- /dev/null
+++ b/libmisc/xgetpwnam.c
@@ -0,0 +1,64 @@
+/*
+ * 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.
+ */
+
+/*
+ * According to the Linux-PAM documentation:
+ *
+ * 4.1. Care about standard library calls
+ *
+ * In general, writers of authorization-granting applications should
+ * assume that each module is likely to call any or all 'libc' functions.
+ * For 'libc' functions that return pointers to static/dynamically
+ * allocated structures (ie. the library allocates the memory and the
+ * user is not expected to 'free()' it) any module call to this function
+ * is likely to corrupt a pointer previously obtained by the application.
+ * The application programmer should either re-call such a 'libc'
+ * function after a call to the Linux-PAM library, or copy the structure
+ * contents to some safe area of memory before passing control to the
+ * Linux-PAM library.
+ *
+ * Two important function classes that fall into this category are
+ * getpwnam(3) and syslog(3).
+ *
+ * This file provide wrapper to the getpwnam or getpwnam_r functions.
+ */
+
+#include <config.h>
+
+#include "pwio.h"
+
+#define LOOKUP_TYPE struct passwd
+#define FUNCTION_NAME getpwnam
+#define ARG_TYPE const char *
+#define ARG_NAME name
+#define DUP_FUNCTION __pw_dup
+#define HAVE_FUNCTION_R (defined HAVE_GETPWNAM_R)
+
+#include "xgetXXbyYY.c"
+
diff --git a/libmisc/xgetpwuid.c b/libmisc/xgetpwuid.c
new file mode 100644
index 0000000..8924134
--- /dev/null
+++ b/libmisc/xgetpwuid.c
@@ -0,0 +1,64 @@
+/*
+ * 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.
+ */
+
+/*
+ * According to the Linux-PAM documentation:
+ *
+ * 4.1. Care about standard library calls
+ *
+ * In general, writers of authorization-granting applications should
+ * assume that each module is likely to call any or all 'libc' functions.
+ * For 'libc' functions that return pointers to static/dynamically
+ * allocated structures (ie. the library allocates the memory and the
+ * user is not expected to 'free()' it) any module call to this function
+ * is likely to corrupt a pointer previously obtained by the application.
+ * The application programmer should either re-call such a 'libc'
+ * function after a call to the Linux-PAM library, or copy the structure
+ * contents to some safe area of memory before passing control to the
+ * Linux-PAM library.
+ *
+ * Two important function classes that fall into this category are
+ * getpwnam(3) and syslog(3).
+ *
+ * This file provide wrapper to the getpwnam or getpwnam_r functions.
+ */
+
+#include <config.h>
+
+#include "pwio.h"
+
+#define LOOKUP_TYPE struct passwd
+#define FUNCTION_NAME getpwuid
+#define ARG_TYPE uid_t
+#define ARG_NAME uid
+#define DUP_FUNCTION __pw_dup
+#define HAVE_FUNCTION_R (defined HAVE_GETPWUID_R)
+
+#include "xgetXXbyYY.c"
+
diff --git a/libmisc/xgetspnam.c b/libmisc/xgetspnam.c
new file mode 100644
index 0000000..287e97f
--- /dev/null
+++ b/libmisc/xgetspnam.c
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2008 - 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.
+ */
+
+/*
+ * According to the Linux-PAM documentation:
+ *
+ * 4.1. Care about standard library calls
+ *
+ * In general, writers of authorization-granting applications should
+ * assume that each module is likely to call any or all 'libc' functions.
+ * For 'libc' functions that return pointers to static/dynamically
+ * allocated structures (ie. the library allocates the memory and the
+ * user is not expected to 'free()' it) any module call to this function
+ * is likely to corrupt a pointer previously obtained by the application.
+ * The application programmer should either re-call such a 'libc'
+ * function after a call to the Linux-PAM library, or copy the structure
+ * contents to some safe area of memory before passing control to the
+ * Linux-PAM library.
+ *
+ * Two important function classes that fall into this category are
+ * getpwnam(3) and syslog(3).
+ *
+ * This file provide wrapper to the getpwnam or getpwnam_r functions.
+ */
+
+#include <config.h>
+
+#include "shadowio.h"
+
+#define LOOKUP_TYPE struct spwd
+#define FUNCTION_NAME getspnam
+#define ARG_TYPE const char *
+#define ARG_NAME name
+#define DUP_FUNCTION __spw_dup
+#define HAVE_FUNCTION_R (defined HAVE_GETSPNAM_R)
+
+#include "xgetXXbyYY.c"
+
diff --git a/libmisc/xmalloc.c b/libmisc/xmalloc.c
new file mode 100644
index 0000000..41a3343
--- /dev/null
+++ b/libmisc/xmalloc.c
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2008 , 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.
+ */
+
+/* Replacements for malloc and strdup with error checking. Too trivial
+ to be worth copyrighting :-). I did that because a lot of code used
+ malloc and strdup without checking for NULL pointer, and I like some
+ message better than a core dump... --marekm
+
+ Yeh, but. Remember that bailing out might leave the system in some
+ bizarre state. You really want to put in error checking, then add
+ some back-out failure recovery code. -- jfh */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include <stdio.h>
+#include <errno.h>
+#include "defines.h"
+#include "prototypes.h"
+
+/*@maynotreturn@*/ /*@only@*//*@out@*//*@notnull@*/char *xmalloc (size_t size)
+{
+ char *ptr;
+
+ ptr = (char *) malloc (size);
+ if (NULL == ptr) {
+ (void) fprintf (stderr,
+ _("%s: failed to allocate memory: %s\n"),
+ Prog, strerror (errno));
+ exit (13);
+ }
+ return ptr;
+}
+
+/*@maynotreturn@*/ /*@only@*//*@notnull@*/char *xstrdup (const char *str)
+{
+ return strcpy (xmalloc (strlen (str) + 1), str);
+}
diff --git a/libmisc/yesno.c b/libmisc/yesno.c
new file mode 100644
index 0000000..a2eb953
--- /dev/null
+++ b/libmisc/yesno.c
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 1992 - 1994, Julianne Frances Haugh
+ * Copyright (c) 2007 - 2008, 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.
+ */
+
+/*
+ * Common code for yes/no prompting
+ *
+ * Used by pwck.c and grpck.c
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include <stdio.h>
+#include "prototypes.h"
+
+/*
+ * yes_or_no - get answer to question from the user
+ *
+ * It returns false if no.
+ *
+ * If the read_only flag is set, it will print No, and will return
+ * false.
+ */
+bool yes_or_no (bool read_only)
+{
+ char buf[80];
+
+ /*
+ * In read-only mode all questions are answered "no".
+ */
+ if (read_only) {
+ (void) puts (_("No"));
+ return false;
+ }
+
+ /*
+ * Typically, there's a prompt on stdout, sometimes unflushed.
+ */
+ (void) fflush (stdout);
+
+ /*
+ * Get a line and see what the first character is.
+ */
+ /* TODO: use gettext */
+ if (fgets (buf, (int) sizeof buf, stdin) == buf) {
+ return buf[0] == 'y' || buf[0] == 'Y';
+ }
+
+ return false;
+}
+
diff --git a/ltmain.sh b/ltmain.sh
new file mode 100644
index 0000000..d11f1e0
--- /dev/null
+++ b/ltmain.sh
@@ -0,0 +1,11249 @@
+#! /bin/sh
+## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
+## by inline-source v2014-01-03.01
+
+# libtool (GNU libtool) 2.4.6
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996-2015 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+PROGRAM=libtool
+PACKAGE=libtool
+VERSION="2.4.6 Debian-2.4.6-11"
+package_revision=2.4.6
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# Run './libtool --help' for help with using this script from the
+# command line.
+
+
+## ------------------------------- ##
+## User overridable command paths. ##
+## ------------------------------- ##
+
+# After configure completes, it has a better idea of some of the
+# shell tools we need than the defaults used by the functions shared
+# with bootstrap, so set those here where they can still be over-
+# ridden by the user, but otherwise take precedence.
+
+: ${AUTOCONF="autoconf"}
+: ${AUTOMAKE="automake"}
+
+
+## -------------------------- ##
+## Source external libraries. ##
+## -------------------------- ##
+
+# Much of our low-level functionality needs to be sourced from external
+# libraries, which are installed to $pkgauxdir.
+
+# Set a version string for this script.
+scriptversion=2015-01-20.17; # UTC
+
+# General shell script boiler plate, and helper functions.
+# Written by Gary V. Vaughan, 2004
+
+# Copyright (C) 2004-2015 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# As a special exception to the GNU General Public License, if you distribute
+# this file as part of a program or library that is built using GNU Libtool,
+# you may include this file under the same distribution terms that you use
+# for the rest of that program.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Please report bugs or propose patches to gary@gnu.org.
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# Evaluate this file near the top of your script to gain access to
+# the functions and variables defined here:
+#
+# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
+#
+# If you need to override any of the default environment variable
+# settings, do that before evaluating this file.
+
+
+## -------------------- ##
+## Shell normalisation. ##
+## -------------------- ##
+
+# Some shells need a little help to be as Bourne compatible as possible.
+# Before doing anything else, make sure all that help has been provided!
+
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac
+fi
+
+# NLS nuisances: We save the old values in case they are required later.
+_G_user_locale=
+_G_safe_locale=
+for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+ eval "if test set = \"\${$_G_var+set}\"; then
+ save_$_G_var=\$$_G_var
+ $_G_var=C
+ export $_G_var
+ _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
+ _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
+ fi"
+done
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# Make sure IFS has a sensible default
+sp=' '
+nl='
+'
+IFS="$sp $nl"
+
+# There are apparently some retarded systems that use ';' as a PATH separator!
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+
+## ------------------------- ##
+## Locate command utilities. ##
+## ------------------------- ##
+
+
+# func_executable_p FILE
+# ----------------------
+# Check that FILE is an executable regular file.
+func_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+}
+
+
+# func_path_progs PROGS_LIST CHECK_FUNC [PATH]
+# --------------------------------------------
+# Search for either a program that responds to --version with output
+# containing "GNU", or else returned by CHECK_FUNC otherwise, by
+# trying all the directories in PATH with each of the elements of
+# PROGS_LIST.
+#
+# CHECK_FUNC should accept the path to a candidate program, and
+# set $func_check_prog_result if it truncates its output less than
+# $_G_path_prog_max characters.
+func_path_progs ()
+{
+ _G_progs_list=$1
+ _G_check_func=$2
+ _G_PATH=${3-"$PATH"}
+
+ _G_path_prog_max=0
+ _G_path_prog_found=false
+ _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
+ for _G_dir in $_G_PATH; do
+ IFS=$_G_save_IFS
+ test -z "$_G_dir" && _G_dir=.
+ for _G_prog_name in $_G_progs_list; do
+ for _exeext in '' .EXE; do
+ _G_path_prog=$_G_dir/$_G_prog_name$_exeext
+ func_executable_p "$_G_path_prog" || continue
+ case `"$_G_path_prog" --version 2>&1` in
+ *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;;
+ *) $_G_check_func $_G_path_prog
+ func_path_progs_result=$func_check_prog_result
+ ;;
+ esac
+ $_G_path_prog_found && break 3
+ done
+ done
+ done
+ IFS=$_G_save_IFS
+ test -z "$func_path_progs_result" && {
+ echo "no acceptable sed could be found in \$PATH" >&2
+ exit 1
+ }
+}
+
+
+# We want to be able to use the functions in this file before configure
+# has figured out where the best binaries are kept, which means we have
+# to search for them ourselves - except when the results are already set
+# where we skip the searches.
+
+# Unless the user overrides by setting SED, search the path for either GNU
+# sed, or the sed that truncates its output the least.
+test -z "$SED" && {
+ _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+ for _G_i in 1 2 3 4 5 6 7; do
+ _G_sed_script=$_G_sed_script$nl$_G_sed_script
+ done
+ echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed
+ _G_sed_script=
+
+ func_check_prog_sed ()
+ {
+ _G_path_prog=$1
+
+ _G_count=0
+ printf 0123456789 >conftest.in
+ while :
+ do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo '' >> conftest.nl
+ "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
+ diff conftest.out conftest.nl >/dev/null 2>&1 || break
+ _G_count=`expr $_G_count + 1`
+ if test "$_G_count" -gt "$_G_path_prog_max"; then
+ # Best one so far, save it but keep looking for a better one
+ func_check_prog_result=$_G_path_prog
+ _G_path_prog_max=$_G_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test 10 -lt "$_G_count" && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out
+ }
+
+ func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin
+ rm -f conftest.sed
+ SED=$func_path_progs_result
+}
+
+
+# Unless the user overrides by setting GREP, search the path for either GNU
+# grep, or the grep that truncates its output the least.
+test -z "$GREP" && {
+ func_check_prog_grep ()
+ {
+ _G_path_prog=$1
+
+ _G_count=0
+ _G_path_prog_max=0
+ printf 0123456789 >conftest.in
+ while :
+ do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo 'GREP' >> conftest.nl
+ "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break
+ diff conftest.out conftest.nl >/dev/null 2>&1 || break
+ _G_count=`expr $_G_count + 1`
+ if test "$_G_count" -gt "$_G_path_prog_max"; then
+ # Best one so far, save it but keep looking for a better one
+ func_check_prog_result=$_G_path_prog
+ _G_path_prog_max=$_G_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test 10 -lt "$_G_count" && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out
+ }
+
+ func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin
+ GREP=$func_path_progs_result
+}
+
+
+## ------------------------------- ##
+## User overridable command paths. ##
+## ------------------------------- ##
+
+# All uppercase variable names are used for environment variables. These
+# variables can be overridden by the user before calling a script that
+# uses them if a suitable command of that name is not already available
+# in the command search PATH.
+
+: ${CP="cp -f"}
+: ${ECHO="printf %s\n"}
+: ${EGREP="$GREP -E"}
+: ${FGREP="$GREP -F"}
+: ${LN_S="ln -s"}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+
+
+## -------------------- ##
+## Useful sed snippets. ##
+## -------------------- ##
+
+sed_dirname='s|/[^/]*$||'
+sed_basename='s|^.*/||'
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s|\([`"$\\]\)|\\\1|g'
+
+# Same as above, but do not quote variable references.
+sed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution that turns a string into a regex matching for the
+# string literally.
+sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
+
+# Sed substitution that converts a w32 file name or path
+# that contains forward slashes, into one that contains
+# (escaped) backslashes. A very naive implementation.
+sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+
+# Re-'\' parameter expansions in output of sed_double_quote_subst that
+# were '\'-ed in input to the same. If an odd number of '\' preceded a
+# '$' in input to sed_double_quote_subst, that '$' was protected from
+# expansion. Since each input '\' is now two '\'s, look for any number
+# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'.
+_G_bs='\\'
+_G_bs2='\\\\'
+_G_bs4='\\\\\\\\'
+_G_dollar='\$'
+sed_double_backslash="\
+ s/$_G_bs4/&\\
+/g
+ s/^$_G_bs2$_G_dollar/$_G_bs&/
+ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
+ s/\n//g"
+
+
+## ----------------- ##
+## Global variables. ##
+## ----------------- ##
+
+# Except for the global variables explicitly listed below, the following
+# functions in the '^func_' namespace, and the '^require_' namespace
+# variables initialised in the 'Resource management' section, sourcing
+# this file will not pollute your global namespace with anything
+# else. There's no portable way to scope variables in Bourne shell
+# though, so actually running these functions will sometimes place
+# results into a variable named after the function, and often use
+# temporary variables in the '^_G_' namespace. If you are careful to
+# avoid using those namespaces casually in your sourcing script, things
+# should continue to work as you expect. And, of course, you can freely
+# overwrite any of the functions or variables defined here before
+# calling anything to customize them.
+
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake.
+
+# Allow overriding, eg assuming that you follow the convention of
+# putting '$debug_cmd' at the start of all your functions, you can get
+# bash to show function call trace with:
+#
+# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
+debug_cmd=${debug_cmd-":"}
+exit_cmd=:
+
+# By convention, finish your script with:
+#
+# exit $exit_status
+#
+# so that you can set exit_status to non-zero if you want to indicate
+# something went wrong during execution without actually bailing out at
+# the point of failure.
+exit_status=$EXIT_SUCCESS
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath=$0
+
+# The name of this program.
+progname=`$ECHO "$progpath" |$SED "$sed_basename"`
+
+# Make sure we have an absolute progpath for reexecution:
+case $progpath in
+ [\\/]*|[A-Za-z]:\\*) ;;
+ *[\\/]*)
+ progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
+ progdir=`cd "$progdir" && pwd`
+ progpath=$progdir/$progname
+ ;;
+ *)
+ _G_IFS=$IFS
+ IFS=${PATH_SEPARATOR-:}
+ for progdir in $PATH; do
+ IFS=$_G_IFS
+ test -x "$progdir/$progname" && break
+ done
+ IFS=$_G_IFS
+ test -n "$progdir" || progdir=`pwd`
+ progpath=$progdir/$progname
+ ;;
+esac
+
+
+## ----------------- ##
+## Standard options. ##
+## ----------------- ##
+
+# The following options affect the operation of the functions defined
+# below, and should be set appropriately depending on run-time para-
+# meters passed on the command line.
+
+opt_dry_run=false
+opt_quiet=false
+opt_verbose=false
+
+# Categories 'all' and 'none' are always available. Append any others
+# you will pass as the first argument to func_warning from your own
+# code.
+warning_categories=
+
+# By default, display warnings according to 'opt_warning_types'. Set
+# 'warning_func' to ':' to elide all warnings, or func_fatal_error to
+# treat the next displayed warning as a fatal error.
+warning_func=func_warn_and_continue
+
+# Set to 'all' to display all warnings, 'none' to suppress all
+# warnings, or a space delimited list of some subset of
+# 'warning_categories' to display only the listed warnings.
+opt_warning_types=all
+
+
+## -------------------- ##
+## Resource management. ##
+## -------------------- ##
+
+# This section contains definitions for functions that each ensure a
+# particular resource (a file, or a non-empty configuration variable for
+# example) is available, and if appropriate to extract default values
+# from pertinent package files. Call them using their associated
+# 'require_*' variable to ensure that they are executed, at most, once.
+#
+# It's entirely deliberate that calling these functions can set
+# variables that don't obey the namespace limitations obeyed by the rest
+# of this file, in order that that they be as useful as possible to
+# callers.
+
+
+# require_term_colors
+# -------------------
+# Allow display of bold text on terminals that support it.
+require_term_colors=func_require_term_colors
+func_require_term_colors ()
+{
+ $debug_cmd
+
+ test -t 1 && {
+ # COLORTERM and USE_ANSI_COLORS environment variables take
+ # precedence, because most terminfo databases neglect to describe
+ # whether color sequences are supported.
+ test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
+
+ if test 1 = "$USE_ANSI_COLORS"; then
+ # Standard ANSI escape sequences
+ tc_reset=''
+ tc_bold=''; tc_standout=''
+ tc_red=''; tc_green=''
+ tc_blue=''; tc_cyan=''
+ else
+ # Otherwise trust the terminfo database after all.
+ test -n "`tput sgr0 2>/dev/null`" && {
+ tc_reset=`tput sgr0`
+ test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
+ tc_standout=$tc_bold
+ test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
+ test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
+ test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
+ test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
+ test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
+ }
+ fi
+ }
+
+ require_term_colors=:
+}
+
+
+## ----------------- ##
+## Function library. ##
+## ----------------- ##
+
+# This section contains a variety of useful functions to call in your
+# scripts. Take note of the portable wrappers for features provided by
+# some modern shells, which will fall back to slower equivalents on
+# less featureful shells.
+
+
+# func_append VAR VALUE
+# ---------------------
+# Append VALUE onto the existing contents of VAR.
+
+ # We should try to minimise forks, especially on Windows where they are
+ # unreasonably slow, so skip the feature probes when bash or zsh are
+ # being used:
+ if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
+ : ${_G_HAVE_ARITH_OP="yes"}
+ : ${_G_HAVE_XSI_OPS="yes"}
+ # The += operator was introduced in bash 3.1
+ case $BASH_VERSION in
+ [12].* | 3.0 | 3.0*) ;;
+ *)
+ : ${_G_HAVE_PLUSEQ_OP="yes"}
+ ;;
+ esac
+ fi
+
+ # _G_HAVE_PLUSEQ_OP
+ # Can be empty, in which case the shell is probed, "yes" if += is
+ # useable or anything else if it does not work.
+ test -z "$_G_HAVE_PLUSEQ_OP" \
+ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
+ && _G_HAVE_PLUSEQ_OP=yes
+
+if test yes = "$_G_HAVE_PLUSEQ_OP"
+then
+ # This is an XSI compatible shell, allowing a faster implementation...
+ eval 'func_append ()
+ {
+ $debug_cmd
+
+ eval "$1+=\$2"
+ }'
+else
+ # ...otherwise fall back to using expr, which is often a shell builtin.
+ func_append ()
+ {
+ $debug_cmd
+
+ eval "$1=\$$1\$2"
+ }
+fi
+
+
+# func_append_quoted VAR VALUE
+# ----------------------------
+# Quote VALUE and append to the end of shell variable VAR, separated
+# by a space.
+if test yes = "$_G_HAVE_PLUSEQ_OP"; then
+ eval 'func_append_quoted ()
+ {
+ $debug_cmd
+
+ func_quote_for_eval "$2"
+ eval "$1+=\\ \$func_quote_for_eval_result"
+ }'
+else
+ func_append_quoted ()
+ {
+ $debug_cmd
+
+ func_quote_for_eval "$2"
+ eval "$1=\$$1\\ \$func_quote_for_eval_result"
+ }
+fi
+
+
+# func_append_uniq VAR VALUE
+# --------------------------
+# Append unique VALUE onto the existing contents of VAR, assuming
+# entries are delimited by the first character of VALUE. For example:
+#
+# func_append_uniq options " --another-option option-argument"
+#
+# will only append to $options if " --another-option option-argument "
+# is not already present somewhere in $options already (note spaces at
+# each end implied by leading space in second argument).
+func_append_uniq ()
+{
+ $debug_cmd
+
+ eval _G_current_value='`$ECHO $'$1'`'
+ _G_delim=`expr "$2" : '\(.\)'`
+
+ case $_G_delim$_G_current_value$_G_delim in
+ *"$2$_G_delim"*) ;;
+ *) func_append "$@" ;;
+ esac
+}
+
+
+# func_arith TERM...
+# ------------------
+# Set func_arith_result to the result of evaluating TERMs.
+ test -z "$_G_HAVE_ARITH_OP" \
+ && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
+ && _G_HAVE_ARITH_OP=yes
+
+if test yes = "$_G_HAVE_ARITH_OP"; then
+ eval 'func_arith ()
+ {
+ $debug_cmd
+
+ func_arith_result=$(( $* ))
+ }'
+else
+ func_arith ()
+ {
+ $debug_cmd
+
+ func_arith_result=`expr "$@"`
+ }
+fi
+
+
+# func_basename FILE
+# ------------------
+# Set func_basename_result to FILE with everything up to and including
+# the last / stripped.
+if test yes = "$_G_HAVE_XSI_OPS"; then
+ # If this shell supports suffix pattern removal, then use it to avoid
+ # forking. Hide the definitions single quotes in case the shell chokes
+ # on unsupported syntax...
+ _b='func_basename_result=${1##*/}'
+ _d='case $1 in
+ */*) func_dirname_result=${1%/*}$2 ;;
+ * ) func_dirname_result=$3 ;;
+ esac'
+
+else
+ # ...otherwise fall back to using sed.
+ _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
+ _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"`
+ if test "X$func_dirname_result" = "X$1"; then
+ func_dirname_result=$3
+ else
+ func_append func_dirname_result "$2"
+ fi'
+fi
+
+eval 'func_basename ()
+{
+ $debug_cmd
+
+ '"$_b"'
+}'
+
+
+# func_dirname FILE APPEND NONDIR_REPLACEMENT
+# -------------------------------------------
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+eval 'func_dirname ()
+{
+ $debug_cmd
+
+ '"$_d"'
+}'
+
+
+# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
+# --------------------------------------------------------
+# Perform func_basename and func_dirname in a single function
+# call:
+# dirname: Compute the dirname of FILE. If nonempty,
+# add APPEND to the result, otherwise set result
+# to NONDIR_REPLACEMENT.
+# value returned in "$func_dirname_result"
+# basename: Compute filename of FILE.
+# value retuned in "$func_basename_result"
+# For efficiency, we do not delegate to the functions above but instead
+# duplicate the functionality here.
+eval 'func_dirname_and_basename ()
+{
+ $debug_cmd
+
+ '"$_b"'
+ '"$_d"'
+}'
+
+
+# func_echo ARG...
+# ----------------
+# Echo program name prefixed message.
+func_echo ()
+{
+ $debug_cmd
+
+ _G_message=$*
+
+ func_echo_IFS=$IFS
+ IFS=$nl
+ for _G_line in $_G_message; do
+ IFS=$func_echo_IFS
+ $ECHO "$progname: $_G_line"
+ done
+ IFS=$func_echo_IFS
+}
+
+
+# func_echo_all ARG...
+# --------------------
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+ $ECHO "$*"
+}
+
+
+# func_echo_infix_1 INFIX ARG...
+# ------------------------------
+# Echo program name, followed by INFIX on the first line, with any
+# additional lines not showing INFIX.
+func_echo_infix_1 ()
+{
+ $debug_cmd
+
+ $require_term_colors
+
+ _G_infix=$1; shift
+ _G_indent=$_G_infix
+ _G_prefix="$progname: $_G_infix: "
+ _G_message=$*
+
+ # Strip color escape sequences before counting printable length
+ for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
+ do
+ test -n "$_G_tc" && {
+ _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"`
+ _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"`
+ }
+ done
+ _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes
+
+ func_echo_infix_1_IFS=$IFS
+ IFS=$nl
+ for _G_line in $_G_message; do
+ IFS=$func_echo_infix_1_IFS
+ $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
+ _G_prefix=$_G_indent
+ done
+ IFS=$func_echo_infix_1_IFS
+}
+
+
+# func_error ARG...
+# -----------------
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+ $debug_cmd
+
+ $require_term_colors
+
+ func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2
+}
+
+
+# func_fatal_error ARG...
+# -----------------------
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+ $debug_cmd
+
+ func_error "$*"
+ exit $EXIT_FAILURE
+}
+
+
+# func_grep EXPRESSION FILENAME
+# -----------------------------
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+ $debug_cmd
+
+ $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_len STRING
+# ---------------
+# Set func_len_result to the length of STRING. STRING may not
+# start with a hyphen.
+ test -z "$_G_HAVE_XSI_OPS" \
+ && (eval 'x=a/b/c;
+ test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
+ && _G_HAVE_XSI_OPS=yes
+
+if test yes = "$_G_HAVE_XSI_OPS"; then
+ eval 'func_len ()
+ {
+ $debug_cmd
+
+ func_len_result=${#1}
+ }'
+else
+ func_len ()
+ {
+ $debug_cmd
+
+ func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+ }
+fi
+
+
+# func_mkdir_p DIRECTORY-PATH
+# ---------------------------
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+ $debug_cmd
+
+ _G_directory_path=$1
+ _G_dir_list=
+
+ if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
+
+ # Protect directory names starting with '-'
+ case $_G_directory_path in
+ -*) _G_directory_path=./$_G_directory_path ;;
+ esac
+
+ # While some portion of DIR does not yet exist...
+ while test ! -d "$_G_directory_path"; do
+ # ...make a list in topmost first order. Use a colon delimited
+ # list incase some portion of path contains whitespace.
+ _G_dir_list=$_G_directory_path:$_G_dir_list
+
+ # If the last portion added has no slash in it, the list is done
+ case $_G_directory_path in */*) ;; *) break ;; esac
+
+ # ...otherwise throw away the child directory and loop
+ _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
+ done
+ _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
+
+ func_mkdir_p_IFS=$IFS; IFS=:
+ for _G_dir in $_G_dir_list; do
+ IFS=$func_mkdir_p_IFS
+ # mkdir can fail with a 'File exist' error if two processes
+ # try to create one of the directories concurrently. Don't
+ # stop in that case!
+ $MKDIR "$_G_dir" 2>/dev/null || :
+ done
+ IFS=$func_mkdir_p_IFS
+
+ # Bail out if we (or some other process) failed to create a directory.
+ test -d "$_G_directory_path" || \
+ func_fatal_error "Failed to create '$1'"
+ fi
+}
+
+
+# func_mktempdir [BASENAME]
+# -------------------------
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible. If
+# given, BASENAME is the basename for that directory.
+func_mktempdir ()
+{
+ $debug_cmd
+
+ _G_template=${TMPDIR-/tmp}/${1-$progname}
+
+ if test : = "$opt_dry_run"; then
+ # Return a directory name, but don't create it in dry-run mode
+ _G_tmpdir=$_G_template-$$
+ else
+
+ # If mktemp works, use that first and foremost
+ _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
+
+ if test ! -d "$_G_tmpdir"; then
+ # Failing that, at least try and use $RANDOM to avoid a race
+ _G_tmpdir=$_G_template-${RANDOM-0}$$
+
+ func_mktempdir_umask=`umask`
+ umask 0077
+ $MKDIR "$_G_tmpdir"
+ umask $func_mktempdir_umask
+ fi
+
+ # If we're not in dry-run mode, bomb out on failure
+ test -d "$_G_tmpdir" || \
+ func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
+ fi
+
+ $ECHO "$_G_tmpdir"
+}
+
+
+# func_normal_abspath PATH
+# ------------------------
+# Remove doubled-up and trailing slashes, "." path components,
+# and cancel out any ".." path components in PATH after making
+# it an absolute path.
+func_normal_abspath ()
+{
+ $debug_cmd
+
+ # These SED scripts presuppose an absolute path with a trailing slash.
+ _G_pathcar='s|^/\([^/]*\).*$|\1|'
+ _G_pathcdr='s|^/[^/]*||'
+ _G_removedotparts=':dotsl
+ s|/\./|/|g
+ t dotsl
+ s|/\.$|/|'
+ _G_collapseslashes='s|/\{1,\}|/|g'
+ _G_finalslash='s|/*$|/|'
+
+ # Start from root dir and reassemble the path.
+ func_normal_abspath_result=
+ func_normal_abspath_tpath=$1
+ func_normal_abspath_altnamespace=
+ case $func_normal_abspath_tpath in
+ "")
+ # Empty path, that just means $cwd.
+ func_stripname '' '/' "`pwd`"
+ func_normal_abspath_result=$func_stripname_result
+ return
+ ;;
+ # The next three entries are used to spot a run of precisely
+ # two leading slashes without using negated character classes;
+ # we take advantage of case's first-match behaviour.
+ ///*)
+ # Unusual form of absolute path, do nothing.
+ ;;
+ //*)
+ # Not necessarily an ordinary path; POSIX reserves leading '//'
+ # and for example Cygwin uses it to access remote file shares
+ # over CIFS/SMB, so we conserve a leading double slash if found.
+ func_normal_abspath_altnamespace=/
+ ;;
+ /*)
+ # Absolute path, do nothing.
+ ;;
+ *)
+ # Relative path, prepend $cwd.
+ func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
+ ;;
+ esac
+
+ # Cancel out all the simple stuff to save iterations. We also want
+ # the path to end with a slash for ease of parsing, so make sure
+ # there is one (and only one) here.
+ func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+ -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
+ while :; do
+ # Processed it all yet?
+ if test / = "$func_normal_abspath_tpath"; then
+ # If we ascended to the root using ".." the result may be empty now.
+ if test -z "$func_normal_abspath_result"; then
+ func_normal_abspath_result=/
+ fi
+ break
+ fi
+ func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
+ -e "$_G_pathcar"`
+ func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+ -e "$_G_pathcdr"`
+ # Figure out what to do with it
+ case $func_normal_abspath_tcomponent in
+ "")
+ # Trailing empty path component, ignore it.
+ ;;
+ ..)
+ # Parent dir; strip last assembled component from result.
+ func_dirname "$func_normal_abspath_result"
+ func_normal_abspath_result=$func_dirname_result
+ ;;
+ *)
+ # Actual path component, append it.
+ func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
+ ;;
+ esac
+ done
+ # Restore leading double-slash if one was found on entry.
+ func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
+}
+
+
+# func_notquiet ARG...
+# --------------------
+# Echo program name prefixed message only when not in quiet mode.
+func_notquiet ()
+{
+ $debug_cmd
+
+ $opt_quiet || func_echo ${1+"$@"}
+
+ # A bug in bash halts the script if the last line of a function
+ # fails when set -e is in force, so we need another command to
+ # work around that:
+ :
+}
+
+
+# func_relative_path SRCDIR DSTDIR
+# --------------------------------
+# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
+func_relative_path ()
+{
+ $debug_cmd
+
+ func_relative_path_result=
+ func_normal_abspath "$1"
+ func_relative_path_tlibdir=$func_normal_abspath_result
+ func_normal_abspath "$2"
+ func_relative_path_tbindir=$func_normal_abspath_result
+
+ # Ascend the tree starting from libdir
+ while :; do
+ # check if we have found a prefix of bindir
+ case $func_relative_path_tbindir in
+ $func_relative_path_tlibdir)
+ # found an exact match
+ func_relative_path_tcancelled=
+ break
+ ;;
+ $func_relative_path_tlibdir*)
+ # found a matching prefix
+ func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
+ func_relative_path_tcancelled=$func_stripname_result
+ if test -z "$func_relative_path_result"; then
+ func_relative_path_result=.
+ fi
+ break
+ ;;
+ *)
+ func_dirname $func_relative_path_tlibdir
+ func_relative_path_tlibdir=$func_dirname_result
+ if test -z "$func_relative_path_tlibdir"; then
+ # Have to descend all the way to the root!
+ func_relative_path_result=../$func_relative_path_result
+ func_relative_path_tcancelled=$func_relative_path_tbindir
+ break
+ fi
+ func_relative_path_result=../$func_relative_path_result
+ ;;
+ esac
+ done
+
+ # Now calculate path; take care to avoid doubling-up slashes.
+ func_stripname '' '/' "$func_relative_path_result"
+ func_relative_path_result=$func_stripname_result
+ func_stripname '/' '/' "$func_relative_path_tcancelled"
+ if test -n "$func_stripname_result"; then
+ func_append func_relative_path_result "/$func_stripname_result"
+ fi
+
+ # Normalisation. If bindir is libdir, return '.' else relative path.
+ if test -n "$func_relative_path_result"; then
+ func_stripname './' '' "$func_relative_path_result"
+ func_relative_path_result=$func_stripname_result
+ fi
+
+ test -n "$func_relative_path_result" || func_relative_path_result=.
+
+ :
+}
+
+
+# func_quote_for_eval ARG...
+# --------------------------
+# Aesthetically quote ARGs to be evaled later.
+# This function returns two values:
+# i) func_quote_for_eval_result
+# double-quoted, suitable for a subsequent eval
+# ii) func_quote_for_eval_unquoted_result
+# has all characters that are still active within double
+# quotes backslashified.
+func_quote_for_eval ()
+{
+ $debug_cmd
+
+ func_quote_for_eval_unquoted_result=
+ func_quote_for_eval_result=
+ while test 0 -lt $#; do
+ case $1 in
+ *[\\\`\"\$]*)
+ _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;;
+ *)
+ _G_unquoted_arg=$1 ;;
+ esac
+ if test -n "$func_quote_for_eval_unquoted_result"; then
+ func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg"
+ else
+ func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg"
+ fi
+
+ case $_G_unquoted_arg in
+ # Double-quote args containing shell metacharacters to delay
+ # word splitting, command substitution and variable expansion
+ # for a subsequent eval.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ _G_quoted_arg=\"$_G_unquoted_arg\"
+ ;;
+ *)
+ _G_quoted_arg=$_G_unquoted_arg
+ ;;
+ esac
+
+ if test -n "$func_quote_for_eval_result"; then
+ func_append func_quote_for_eval_result " $_G_quoted_arg"
+ else
+ func_append func_quote_for_eval_result "$_G_quoted_arg"
+ fi
+ shift
+ done
+}
+
+
+# func_quote_for_expand ARG
+# -------------------------
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+ $debug_cmd
+
+ case $1 in
+ *[\\\`\"]*)
+ _G_arg=`$ECHO "$1" | $SED \
+ -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;;
+ *)
+ _G_arg=$1 ;;
+ esac
+
+ case $_G_arg in
+ # Double-quote args containing shell metacharacters to delay
+ # word splitting and command substitution for a subsequent eval.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ _G_arg=\"$_G_arg\"
+ ;;
+ esac
+
+ func_quote_for_expand_result=$_G_arg
+}
+
+
+# func_stripname PREFIX SUFFIX NAME
+# ---------------------------------
+# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+if test yes = "$_G_HAVE_XSI_OPS"; then
+ eval 'func_stripname ()
+ {
+ $debug_cmd
+
+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+ # positional parameters, so assign one to ordinary variable first.
+ func_stripname_result=$3
+ func_stripname_result=${func_stripname_result#"$1"}
+ func_stripname_result=${func_stripname_result%"$2"}
+ }'
+else
+ func_stripname ()
+ {
+ $debug_cmd
+
+ case $2 in
+ .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
+ *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
+ esac
+ }
+fi
+
+
+# func_show_eval CMD [FAIL_EXP]
+# -----------------------------
+# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is
+# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+ $debug_cmd
+
+ _G_cmd=$1
+ _G_fail_exp=${2-':'}
+
+ func_quote_for_expand "$_G_cmd"
+ eval "func_notquiet $func_quote_for_expand_result"
+
+ $opt_dry_run || {
+ eval "$_G_cmd"
+ _G_status=$?
+ if test 0 -ne "$_G_status"; then
+ eval "(exit $_G_status); $_G_fail_exp"
+ fi
+ }
+}
+
+
+# func_show_eval_locale CMD [FAIL_EXP]
+# ------------------------------------
+# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is
+# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it. Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+ $debug_cmd
+
+ _G_cmd=$1
+ _G_fail_exp=${2-':'}
+
+ $opt_quiet || {
+ func_quote_for_expand "$_G_cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+
+ $opt_dry_run || {
+ eval "$_G_user_locale
+ $_G_cmd"
+ _G_status=$?
+ eval "$_G_safe_locale"
+ if test 0 -ne "$_G_status"; then
+ eval "(exit $_G_status); $_G_fail_exp"
+ fi
+ }
+}
+
+
+# func_tr_sh
+# ----------
+# Turn $1 into a string suitable for a shell variable name.
+# Result is stored in $func_tr_sh_result. All characters
+# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
+# if $1 begins with a digit, a '_' is prepended as well.
+func_tr_sh ()
+{
+ $debug_cmd
+
+ case $1 in
+ [0-9]* | *[!a-zA-Z0-9_]*)
+ func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
+ ;;
+ * )
+ func_tr_sh_result=$1
+ ;;
+ esac
+}
+
+
+# func_verbose ARG...
+# -------------------
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+ $debug_cmd
+
+ $opt_verbose && func_echo "$*"
+
+ :
+}
+
+
+# func_warn_and_continue ARG...
+# -----------------------------
+# Echo program name prefixed warning message to standard error.
+func_warn_and_continue ()
+{
+ $debug_cmd
+
+ $require_term_colors
+
+ func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
+}
+
+
+# func_warning CATEGORY ARG...
+# ----------------------------
+# Echo program name prefixed warning message to standard error. Warning
+# messages can be filtered according to CATEGORY, where this function
+# elides messages where CATEGORY is not listed in the global variable
+# 'opt_warning_types'.
+func_warning ()
+{
+ $debug_cmd
+
+ # CATEGORY must be in the warning_categories list!
+ case " $warning_categories " in
+ *" $1 "*) ;;
+ *) func_internal_error "invalid warning category '$1'" ;;
+ esac
+
+ _G_category=$1
+ shift
+
+ case " $opt_warning_types " in
+ *" $_G_category "*) $warning_func ${1+"$@"} ;;
+ esac
+}
+
+
+# func_sort_ver VER1 VER2
+# -----------------------
+# 'sort -V' is not generally available.
+# Note this deviates from the version comparison in automake
+# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
+# but this should suffice as we won't be specifying old
+# version formats or redundant trailing .0 in bootstrap.conf.
+# If we did want full compatibility then we should probably
+# use m4_version_compare from autoconf.
+func_sort_ver ()
+{
+ $debug_cmd
+
+ printf '%s\n%s\n' "$1" "$2" \
+ | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n
+}
+
+# func_lt_ver PREV CURR
+# ---------------------
+# Return true if PREV and CURR are in the correct order according to
+# func_sort_ver, otherwise false. Use it like this:
+#
+# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..."
+func_lt_ver ()
+{
+ $debug_cmd
+
+ test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q`
+}
+
+
+# Local variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
+# time-stamp-time-zone: "UTC"
+# End:
+#! /bin/sh
+
+# Set a version string for this script.
+scriptversion=2015-10-07.11; # UTC
+
+# A portable, pluggable option parser for Bourne shell.
+# Written by Gary V. Vaughan, 2010
+
+# Copyright (C) 2010-2015 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Please report bugs or propose patches to gary@gnu.org.
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# This file is a library for parsing options in your shell scripts along
+# with assorted other useful supporting features that you can make use
+# of too.
+#
+# For the simplest scripts you might need only:
+#
+# #!/bin/sh
+# . relative/path/to/funclib.sh
+# . relative/path/to/options-parser
+# scriptversion=1.0
+# func_options ${1+"$@"}
+# eval set dummy "$func_options_result"; shift
+# ...rest of your script...
+#
+# In order for the '--version' option to work, you will need to have a
+# suitably formatted comment like the one at the top of this file
+# starting with '# Written by ' and ending with '# warranty; '.
+#
+# For '-h' and '--help' to work, you will also need a one line
+# description of your script's purpose in a comment directly above the
+# '# Written by ' line, like the one at the top of this file.
+#
+# The default options also support '--debug', which will turn on shell
+# execution tracing (see the comment above debug_cmd below for another
+# use), and '--verbose' and the func_verbose function to allow your script
+# to display verbose messages only when your user has specified
+# '--verbose'.
+#
+# After sourcing this file, you can plug processing for additional
+# options by amending the variables from the 'Configuration' section
+# below, and following the instructions in the 'Option parsing'
+# section further down.
+
+## -------------- ##
+## Configuration. ##
+## -------------- ##
+
+# You should override these variables in your script after sourcing this
+# file so that they reflect the customisations you have added to the
+# option parser.
+
+# The usage line for option parsing errors and the start of '-h' and
+# '--help' output messages. You can embed shell variables for delayed
+# expansion at the time the message is displayed, but you will need to
+# quote other shell meta-characters carefully to prevent them being
+# expanded when the contents are evaled.
+usage='$progpath [OPTION]...'
+
+# Short help message in response to '-h' and '--help'. Add to this or
+# override it after sourcing this library to reflect the full set of
+# options your script accepts.
+usage_message="\
+ --debug enable verbose shell tracing
+ -W, --warnings=CATEGORY
+ report the warnings falling in CATEGORY [all]
+ -v, --verbose verbosely report processing
+ --version print version information and exit
+ -h, --help print short or long help message and exit
+"
+
+# Additional text appended to 'usage_message' in response to '--help'.
+long_help_message="
+Warning categories include:
+ 'all' show all warnings
+ 'none' turn off all the warnings
+ 'error' warnings are treated as fatal errors"
+
+# Help message printed before fatal option parsing errors.
+fatal_help="Try '\$progname --help' for more information."
+
+
+
+## ------------------------- ##
+## Hook function management. ##
+## ------------------------- ##
+
+# This section contains functions for adding, removing, and running hooks
+# to the main code. A hook is just a named list of of function, that can
+# be run in order later on.
+
+# func_hookable FUNC_NAME
+# -----------------------
+# Declare that FUNC_NAME will run hooks added with
+# 'func_add_hook FUNC_NAME ...'.
+func_hookable ()
+{
+ $debug_cmd
+
+ func_append hookable_fns " $1"
+}
+
+
+# func_add_hook FUNC_NAME HOOK_FUNC
+# ---------------------------------
+# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must
+# first have been declared "hookable" by a call to 'func_hookable'.
+func_add_hook ()
+{
+ $debug_cmd
+
+ case " $hookable_fns " in
+ *" $1 "*) ;;
+ *) func_fatal_error "'$1' does not accept hook functions." ;;
+ esac
+
+ eval func_append ${1}_hooks '" $2"'
+}
+
+
+# func_remove_hook FUNC_NAME HOOK_FUNC
+# ------------------------------------
+# Remove HOOK_FUNC from the list of functions called by FUNC_NAME.
+func_remove_hook ()
+{
+ $debug_cmd
+
+ eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
+}
+
+
+# func_run_hooks FUNC_NAME [ARG]...
+# ---------------------------------
+# Run all hook functions registered to FUNC_NAME.
+# It is assumed that the list of hook functions contains nothing more
+# than a whitespace-delimited list of legal shell function names, and
+# no effort is wasted trying to catch shell meta-characters or preserve
+# whitespace.
+func_run_hooks ()
+{
+ $debug_cmd
+
+ _G_rc_run_hooks=false
+
+ case " $hookable_fns " in
+ *" $1 "*) ;;
+ *) func_fatal_error "'$1' does not support hook funcions.n" ;;
+ esac
+
+ eval _G_hook_fns=\$$1_hooks; shift
+
+ for _G_hook in $_G_hook_fns; do
+ if eval $_G_hook '"$@"'; then
+ # store returned options list back into positional
+ # parameters for next 'cmd' execution.
+ eval _G_hook_result=\$${_G_hook}_result
+ eval set dummy "$_G_hook_result"; shift
+ _G_rc_run_hooks=:
+ fi
+ done
+
+ $_G_rc_run_hooks && func_run_hooks_result=$_G_hook_result
+}
+
+
+
+## --------------- ##
+## Option parsing. ##
+## --------------- ##
+
+# In order to add your own option parsing hooks, you must accept the
+# full positional parameter list in your hook function, you may remove/edit
+# any options that you action, and then pass back the remaining unprocessed
+# options in '<hooked_function_name>_result', escaped suitably for
+# 'eval'. In this case you also must return $EXIT_SUCCESS to let the
+# hook's caller know that it should pay attention to
+# '<hooked_function_name>_result'. Returning $EXIT_FAILURE signalizes that
+# arguments are left untouched by the hook and therefore caller will ignore the
+# result variable.
+#
+# Like this:
+#
+# my_options_prep ()
+# {
+# $debug_cmd
+#
+# # Extend the existing usage message.
+# usage_message=$usage_message'
+# -s, --silent don'\''t print informational messages
+# '
+# # No change in '$@' (ignored completely by this hook). There is
+# # no need to do the equivalent (but slower) action:
+# # func_quote_for_eval ${1+"$@"}
+# # my_options_prep_result=$func_quote_for_eval_result
+# false
+# }
+# func_add_hook func_options_prep my_options_prep
+#
+#
+# my_silent_option ()
+# {
+# $debug_cmd
+#
+# args_changed=false
+#
+# # Note that for efficiency, we parse as many options as we can
+# # recognise in a loop before passing the remainder back to the
+# # caller on the first unrecognised argument we encounter.
+# while test $# -gt 0; do
+# opt=$1; shift
+# case $opt in
+# --silent|-s) opt_silent=:
+# args_changed=:
+# ;;
+# # Separate non-argument short options:
+# -s*) func_split_short_opt "$_G_opt"
+# set dummy "$func_split_short_opt_name" \
+# "-$func_split_short_opt_arg" ${1+"$@"}
+# shift
+# args_changed=:
+# ;;
+# *) # Make sure the first unrecognised option "$_G_opt"
+# # is added back to "$@", we could need that later
+# # if $args_changed is true.
+# set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
+# esac
+# done
+#
+# if $args_changed; then
+# func_quote_for_eval ${1+"$@"}
+# my_silent_option_result=$func_quote_for_eval_result
+# fi
+#
+# $args_changed
+# }
+# func_add_hook func_parse_options my_silent_option
+#
+#
+# my_option_validation ()
+# {
+# $debug_cmd
+#
+# $opt_silent && $opt_verbose && func_fatal_help "\
+# '--silent' and '--verbose' options are mutually exclusive."
+#
+# false
+# }
+# func_add_hook func_validate_options my_option_validation
+#
+# You'll also need to manually amend $usage_message to reflect the extra
+# options you parse. It's preferable to append if you can, so that
+# multiple option parsing hooks can be added safely.
+
+
+# func_options_finish [ARG]...
+# ----------------------------
+# Finishing the option parse loop (call 'func_options' hooks ATM).
+func_options_finish ()
+{
+ $debug_cmd
+
+ _G_func_options_finish_exit=false
+ if func_run_hooks func_options ${1+"$@"}; then
+ func_options_finish_result=$func_run_hooks_result
+ _G_func_options_finish_exit=:
+ fi
+
+ $_G_func_options_finish_exit
+}
+
+
+# func_options [ARG]...
+# ---------------------
+# All the functions called inside func_options are hookable. See the
+# individual implementations for details.
+func_hookable func_options
+func_options ()
+{
+ $debug_cmd
+
+ _G_rc_options=false
+
+ for my_func in options_prep parse_options validate_options options_finish
+ do
+ if eval func_$my_func '${1+"$@"}'; then
+ eval _G_res_var='$'"func_${my_func}_result"
+ eval set dummy "$_G_res_var" ; shift
+ _G_rc_options=:
+ fi
+ done
+
+ # Save modified positional parameters for caller. As a top-level
+ # options-parser function we always need to set the 'func_options_result'
+ # variable (regardless the $_G_rc_options value).
+ if $_G_rc_options; then
+ func_options_result=$_G_res_var
+ else
+ func_quote_for_eval ${1+"$@"}
+ func_options_result=$func_quote_for_eval_result
+ fi
+
+ $_G_rc_options
+}
+
+
+# func_options_prep [ARG]...
+# --------------------------
+# All initialisations required before starting the option parse loop.
+# Note that when calling hook functions, we pass through the list of
+# positional parameters. If a hook function modifies that list, and
+# needs to propagate that back to rest of this script, then the complete
+# modified list must be put in 'func_run_hooks_result' before
+# returning $EXIT_SUCCESS (otherwise $EXIT_FAILURE is returned).
+func_hookable func_options_prep
+func_options_prep ()
+{
+ $debug_cmd
+
+ # Option defaults:
+ opt_verbose=false
+ opt_warning_types=
+
+ _G_rc_options_prep=false
+ if func_run_hooks func_options_prep ${1+"$@"}; then
+ _G_rc_options_prep=:
+ # save modified positional parameters for caller
+ func_options_prep_result=$func_run_hooks_result
+ fi
+
+ $_G_rc_options_prep
+}
+
+
+# func_parse_options [ARG]...
+# ---------------------------
+# The main option parsing loop.
+func_hookable func_parse_options
+func_parse_options ()
+{
+ $debug_cmd
+
+ func_parse_options_result=
+
+ _G_rc_parse_options=false
+ # this just eases exit handling
+ while test $# -gt 0; do
+ # Defer to hook functions for initial option parsing, so they
+ # get priority in the event of reusing an option name.
+ if func_run_hooks func_parse_options ${1+"$@"}; then
+ eval set dummy "$func_run_hooks_result"; shift
+ _G_rc_parse_options=:
+ fi
+
+ # Break out of the loop if we already parsed every option.
+ test $# -gt 0 || break
+
+ _G_match_parse_options=:
+ _G_opt=$1
+ shift
+ case $_G_opt in
+ --debug|-x) debug_cmd='set -x'
+ func_echo "enabling shell trace mode"
+ $debug_cmd
+ ;;
+
+ --no-warnings|--no-warning|--no-warn)
+ set dummy --warnings none ${1+"$@"}
+ shift
+ ;;
+
+ --warnings|--warning|-W)
+ if test $# = 0 && func_missing_arg $_G_opt; then
+ _G_rc_parse_options=:
+ break
+ fi
+ case " $warning_categories $1" in
+ *" $1 "*)
+ # trailing space prevents matching last $1 above
+ func_append_uniq opt_warning_types " $1"
+ ;;
+ *all)
+ opt_warning_types=$warning_categories
+ ;;
+ *none)
+ opt_warning_types=none
+ warning_func=:
+ ;;
+ *error)
+ opt_warning_types=$warning_categories
+ warning_func=func_fatal_error
+ ;;
+ *)
+ func_fatal_error \
+ "unsupported warning category: '$1'"
+ ;;
+ esac
+ shift
+ ;;
+
+ --verbose|-v) opt_verbose=: ;;
+ --version) func_version ;;
+ -\?|-h) func_usage ;;
+ --help) func_help ;;
+
+ # Separate optargs to long options (plugins may need this):
+ --*=*) func_split_equals "$_G_opt"
+ set dummy "$func_split_equals_lhs" \
+ "$func_split_equals_rhs" ${1+"$@"}
+ shift
+ ;;
+
+ # Separate optargs to short options:
+ -W*)
+ func_split_short_opt "$_G_opt"
+ set dummy "$func_split_short_opt_name" \
+ "$func_split_short_opt_arg" ${1+"$@"}
+ shift
+ ;;
+
+ # Separate non-argument short options:
+ -\?*|-h*|-v*|-x*)
+ func_split_short_opt "$_G_opt"
+ set dummy "$func_split_short_opt_name" \
+ "-$func_split_short_opt_arg" ${1+"$@"}
+ shift
+ ;;
+
+ --) _G_rc_parse_options=: ; break ;;
+ -*) func_fatal_help "unrecognised option: '$_G_opt'" ;;
+ *) set dummy "$_G_opt" ${1+"$@"}; shift
+ _G_match_parse_options=false
+ break
+ ;;
+ esac
+
+ $_G_match_parse_options && _G_rc_parse_options=:
+ done
+
+
+ if $_G_rc_parse_options; then
+ # save modified positional parameters for caller
+ func_quote_for_eval ${1+"$@"}
+ func_parse_options_result=$func_quote_for_eval_result
+ fi
+
+ $_G_rc_parse_options
+}
+
+
+# func_validate_options [ARG]...
+# ------------------------------
+# Perform any sanity checks on option settings and/or unconsumed
+# arguments.
+func_hookable func_validate_options
+func_validate_options ()
+{
+ $debug_cmd
+
+ _G_rc_validate_options=false
+
+ # Display all warnings if -W was not given.
+ test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
+
+ if func_run_hooks func_validate_options ${1+"$@"}; then
+ # save modified positional parameters for caller
+ func_validate_options_result=$func_run_hooks_result
+ _G_rc_validate_options=:
+ fi
+
+ # Bail if the options were screwed!
+ $exit_cmd $EXIT_FAILURE
+
+ $_G_rc_validate_options
+}
+
+
+
+## ----------------- ##
+## Helper functions. ##
+## ----------------- ##
+
+# This section contains the helper functions used by the rest of the
+# hookable option parser framework in ascii-betical order.
+
+
+# func_fatal_help ARG...
+# ----------------------
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+ $debug_cmd
+
+ eval \$ECHO \""Usage: $usage"\"
+ eval \$ECHO \""$fatal_help"\"
+ func_error ${1+"$@"}
+ exit $EXIT_FAILURE
+}
+
+
+# func_help
+# ---------
+# Echo long help message to standard output and exit.
+func_help ()
+{
+ $debug_cmd
+
+ func_usage_message
+ $ECHO "$long_help_message"
+ exit 0
+}
+
+
+# func_missing_arg ARGNAME
+# ------------------------
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+ $debug_cmd
+
+ func_error "Missing argument for '$1'."
+ exit_cmd=exit
+}
+
+
+# func_split_equals STRING
+# ------------------------
+# Set func_split_equals_lhs and func_split_equals_rhs shell variables after
+# splitting STRING at the '=' sign.
+test -z "$_G_HAVE_XSI_OPS" \
+ && (eval 'x=a/b/c;
+ test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
+ && _G_HAVE_XSI_OPS=yes
+
+if test yes = "$_G_HAVE_XSI_OPS"
+then
+ # This is an XSI compatible shell, allowing a faster implementation...
+ eval 'func_split_equals ()
+ {
+ $debug_cmd
+
+ func_split_equals_lhs=${1%%=*}
+ func_split_equals_rhs=${1#*=}
+ test "x$func_split_equals_lhs" = "x$1" \
+ && func_split_equals_rhs=
+ }'
+else
+ # ...otherwise fall back to using expr, which is often a shell builtin.
+ func_split_equals ()
+ {
+ $debug_cmd
+
+ func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
+ func_split_equals_rhs=
+ test "x$func_split_equals_lhs" = "x$1" \
+ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
+ }
+fi #func_split_equals
+
+
+# func_split_short_opt SHORTOPT
+# -----------------------------
+# Set func_split_short_opt_name and func_split_short_opt_arg shell
+# variables after splitting SHORTOPT after the 2nd character.
+if test yes = "$_G_HAVE_XSI_OPS"
+then
+ # This is an XSI compatible shell, allowing a faster implementation...
+ eval 'func_split_short_opt ()
+ {
+ $debug_cmd
+
+ func_split_short_opt_arg=${1#??}
+ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
+ }'
+else
+ # ...otherwise fall back to using expr, which is often a shell builtin.
+ func_split_short_opt ()
+ {
+ $debug_cmd
+
+ func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'`
+ func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
+ }
+fi #func_split_short_opt
+
+
+# func_usage
+# ----------
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+ $debug_cmd
+
+ func_usage_message
+ $ECHO "Run '$progname --help |${PAGER-more}' for full usage"
+ exit 0
+}
+
+
+# func_usage_message
+# ------------------
+# Echo short help message to standard output.
+func_usage_message ()
+{
+ $debug_cmd
+
+ eval \$ECHO \""Usage: $usage"\"
+ echo
+ $SED -n 's|^# ||
+ /^Written by/{
+ x;p;x
+ }
+ h
+ /^Written by/q' < "$progpath"
+ echo
+ eval \$ECHO \""$usage_message"\"
+}
+
+
+# func_version
+# ------------
+# Echo version message to standard output and exit.
+func_version ()
+{
+ $debug_cmd
+
+ printf '%s\n' "$progname $scriptversion"
+ $SED -n '
+ /(C)/!b go
+ :more
+ /\./!{
+ N
+ s|\n# | |
+ b more
+ }
+ :go
+ /^# Written by /,/# warranty; / {
+ s|^# ||
+ s|^# *$||
+ s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
+ p
+ }
+ /^# Written by / {
+ s|^# ||
+ p
+ }
+ /^warranty; /q' < "$progpath"
+
+ exit $?
+}
+
+
+# Local variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
+# time-stamp-time-zone: "UTC"
+# End:
+
+# Set a version string.
+scriptversion='(GNU libtool) 2.4.6'
+
+
+# func_echo ARG...
+# ----------------
+# Libtool also displays the current mode in messages, so override
+# funclib.sh func_echo with this custom definition.
+func_echo ()
+{
+ $debug_cmd
+
+ _G_message=$*
+
+ func_echo_IFS=$IFS
+ IFS=$nl
+ for _G_line in $_G_message; do
+ IFS=$func_echo_IFS
+ $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
+ done
+ IFS=$func_echo_IFS
+}
+
+
+# func_warning ARG...
+# -------------------
+# Libtool warnings are not categorized, so override funclib.sh
+# func_warning with this simpler definition.
+func_warning ()
+{
+ $debug_cmd
+
+ $warning_func ${1+"$@"}
+}
+
+
+## ---------------- ##
+## Options parsing. ##
+## ---------------- ##
+
+# Hook in the functions to make sure our own options are parsed during
+# the option parsing loop.
+
+usage='$progpath [OPTION]... [MODE-ARG]...'
+
+# Short help message in response to '-h'.
+usage_message="Options:
+ --config show all configuration variables
+ --debug enable verbose shell tracing
+ -n, --dry-run display commands without modifying any files
+ --features display basic configuration information and exit
+ --mode=MODE use operation mode MODE
+ --no-warnings equivalent to '-Wnone'
+ --preserve-dup-deps don't remove duplicate dependency libraries
+ --quiet, --silent don't print informational messages
+ --tag=TAG use configuration variables from tag TAG
+ -v, --verbose print more informational messages than default
+ --version print version information
+ -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all]
+ -h, --help, --help-all print short, long, or detailed help message
+"
+
+# Additional text appended to 'usage_message' in response to '--help'.
+func_help ()
+{
+ $debug_cmd
+
+ func_usage_message
+ $ECHO "$long_help_message
+
+MODE must be one of the following:
+
+ clean remove files from the build directory
+ compile compile a source file into a libtool object
+ execute automatically set library path, then run a program
+ finish complete the installation of libtool libraries
+ install install libraries or executables
+ link create a library or an executable
+ uninstall remove libraries from an installed directory
+
+MODE-ARGS vary depending on the MODE. When passed as first option,
+'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
+Try '$progname --help --mode=MODE' for a more detailed description of MODE.
+
+When reporting a bug, please describe a test case to reproduce it and
+include the following information:
+
+ host-triplet: $host
+ shell: $SHELL
+ compiler: $LTCC
+ compiler flags: $LTCFLAGS
+ linker: $LD (gnu? $with_gnu_ld)
+ version: $progname $scriptversion Debian-2.4.6-11
+ automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
+ autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
+
+Report bugs to <bug-libtool@gnu.org>.
+GNU libtool home page: <http://www.gnu.org/s/libtool/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>."
+ exit 0
+}
+
+
+# func_lo2o OBJECT-NAME
+# ---------------------
+# Transform OBJECT-NAME from a '.lo' suffix to the platform specific
+# object suffix.
+
+lo2o=s/\\.lo\$/.$objext/
+o2lo=s/\\.$objext\$/.lo/
+
+if test yes = "$_G_HAVE_XSI_OPS"; then
+ eval 'func_lo2o ()
+ {
+ case $1 in
+ *.lo) func_lo2o_result=${1%.lo}.$objext ;;
+ * ) func_lo2o_result=$1 ;;
+ esac
+ }'
+
+ # func_xform LIBOBJ-OR-SOURCE
+ # ---------------------------
+ # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
+ # suffix to a '.lo' libtool-object suffix.
+ eval 'func_xform ()
+ {
+ func_xform_result=${1%.*}.lo
+ }'
+else
+ # ...otherwise fall back to using sed.
+ func_lo2o ()
+ {
+ func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
+ }
+
+ func_xform ()
+ {
+ func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
+ }
+fi
+
+
+# func_fatal_configuration ARG...
+# -------------------------------
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+ func__fatal_error ${1+"$@"} \
+ "See the $PACKAGE documentation for more information." \
+ "Fatal configuration error."
+}
+
+
+# func_config
+# -----------
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+ re_begincf='^# ### BEGIN LIBTOOL'
+ re_endcf='^# ### END LIBTOOL'
+
+ # Default configuration.
+ $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
+
+ # Now print the configurations for the tags.
+ for tagname in $taglist; do
+ $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+ done
+
+ exit $?
+}
+
+
+# func_features
+# -------------
+# Display the features supported by this script.
+func_features ()
+{
+ echo "host: $host"
+ if test yes = "$build_libtool_libs"; then
+ echo "enable shared libraries"
+ else
+ echo "disable shared libraries"
+ fi
+ if test yes = "$build_old_libs"; then
+ echo "enable static libraries"
+ else
+ echo "disable static libraries"
+ fi
+
+ exit $?
+}
+
+
+# func_enable_tag TAGNAME
+# -----------------------
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag. We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+ # Global variable:
+ tagname=$1
+
+ re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+ re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+ sed_extractcf=/$re_begincf/,/$re_endcf/p
+
+ # Validate tagname.
+ case $tagname in
+ *[!-_A-Za-z0-9,/]*)
+ func_fatal_error "invalid tag name: $tagname"
+ ;;
+ esac
+
+ # Don't test for the "default" C tag, as we know it's
+ # there but not specially marked.
+ case $tagname in
+ CC) ;;
+ *)
+ if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+ taglist="$taglist $tagname"
+
+ # Evaluate the configuration. Be careful to quote the path
+ # and the sed script, to avoid splitting on whitespace, but
+ # also don't use non-portable quotes within backquotes within
+ # quotes we have to do it in 2 steps:
+ extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+ eval "$extractedcf"
+ else
+ func_error "ignoring unknown tag $tagname"
+ fi
+ ;;
+ esac
+}
+
+
+# func_check_version_match
+# ------------------------
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+ if test "$package_revision" != "$macro_revision"; then
+ if test "$VERSION" != "$macro_version"; then
+ if test -z "$macro_version"; then
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+ else
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+ fi
+ else
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+ fi
+
+ exit $EXIT_MISMATCH
+ fi
+}
+
+
+# libtool_options_prep [ARG]...
+# -----------------------------
+# Preparation for options parsed by libtool.
+libtool_options_prep ()
+{
+ $debug_mode
+
+ # Option defaults:
+ opt_config=false
+ opt_dlopen=
+ opt_dry_run=false
+ opt_help=false
+ opt_mode=
+ opt_preserve_dup_deps=false
+ opt_quiet=false
+
+ nonopt=
+ preserve_args=
+
+ _G_rc_lt_options_prep=:
+
+ # Shorthand for --mode=foo, only valid as the first argument
+ case $1 in
+ clean|clea|cle|cl)
+ shift; set dummy --mode clean ${1+"$@"}; shift
+ ;;
+ compile|compil|compi|comp|com|co|c)
+ shift; set dummy --mode compile ${1+"$@"}; shift
+ ;;
+ execute|execut|execu|exec|exe|ex|e)
+ shift; set dummy --mode execute ${1+"$@"}; shift
+ ;;
+ finish|finis|fini|fin|fi|f)
+ shift; set dummy --mode finish ${1+"$@"}; shift
+ ;;
+ install|instal|insta|inst|ins|in|i)
+ shift; set dummy --mode install ${1+"$@"}; shift
+ ;;
+ link|lin|li|l)
+ shift; set dummy --mode link ${1+"$@"}; shift
+ ;;
+ uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+ shift; set dummy --mode uninstall ${1+"$@"}; shift
+ ;;
+ *)
+ _G_rc_lt_options_prep=false
+ ;;
+ esac
+
+ if $_G_rc_lt_options_prep; then
+ # Pass back the list of options.
+ func_quote_for_eval ${1+"$@"}
+ libtool_options_prep_result=$func_quote_for_eval_result
+ fi
+
+ $_G_rc_lt_options_prep
+}
+func_add_hook func_options_prep libtool_options_prep
+
+
+# libtool_parse_options [ARG]...
+# ---------------------------------
+# Provide handling for libtool specific options.
+libtool_parse_options ()
+{
+ $debug_cmd
+
+ _G_rc_lt_parse_options=false
+
+ # Perform our own loop to consume as many options as possible in
+ # each iteration.
+ while test $# -gt 0; do
+ _G_match_lt_parse_options=:
+ _G_opt=$1
+ shift
+ case $_G_opt in
+ --dry-run|--dryrun|-n)
+ opt_dry_run=:
+ ;;
+
+ --config) func_config ;;
+
+ --dlopen|-dlopen)
+ opt_dlopen="${opt_dlopen+$opt_dlopen
+}$1"
+ shift
+ ;;
+
+ --preserve-dup-deps)
+ opt_preserve_dup_deps=: ;;
+
+ --features) func_features ;;
+
+ --finish) set dummy --mode finish ${1+"$@"}; shift ;;
+
+ --help) opt_help=: ;;
+
+ --help-all) opt_help=': help-all' ;;
+
+ --mode) test $# = 0 && func_missing_arg $_G_opt && break
+ opt_mode=$1
+ case $1 in
+ # Valid mode arguments:
+ clean|compile|execute|finish|install|link|relink|uninstall) ;;
+
+ # Catch anything else as an error
+ *) func_error "invalid argument for $_G_opt"
+ exit_cmd=exit
+ break
+ ;;
+ esac
+ shift
+ ;;
+
+ --no-silent|--no-quiet)
+ opt_quiet=false
+ func_append preserve_args " $_G_opt"
+ ;;
+
+ --no-warnings|--no-warning|--no-warn)
+ opt_warning=false
+ func_append preserve_args " $_G_opt"
+ ;;
+
+ --no-verbose)
+ opt_verbose=false
+ func_append preserve_args " $_G_opt"
+ ;;
+
+ --silent|--quiet)
+ opt_quiet=:
+ opt_verbose=false
+ func_append preserve_args " $_G_opt"
+ ;;
+
+ --tag) test $# = 0 && func_missing_arg $_G_opt && break
+ opt_tag=$1
+ func_append preserve_args " $_G_opt $1"
+ func_enable_tag "$1"
+ shift
+ ;;
+
+ --verbose|-v) opt_quiet=false
+ opt_verbose=:
+ func_append preserve_args " $_G_opt"
+ ;;
+
+ # An option not handled by this hook function:
+ *) set dummy "$_G_opt" ${1+"$@"} ; shift
+ _G_match_lt_parse_options=false
+ break
+ ;;
+ esac
+ $_G_match_lt_parse_options && _G_rc_lt_parse_options=:
+ done
+
+ if $_G_rc_lt_parse_options; then
+ # save modified positional parameters for caller
+ func_quote_for_eval ${1+"$@"}
+ libtool_parse_options_result=$func_quote_for_eval_result
+ fi
+
+ $_G_rc_lt_parse_options
+}
+func_add_hook func_parse_options libtool_parse_options
+
+
+
+# libtool_validate_options [ARG]...
+# ---------------------------------
+# Perform any sanity checks on option settings and/or unconsumed
+# arguments.
+libtool_validate_options ()
+{
+ # save first non-option argument
+ if test 0 -lt $#; then
+ nonopt=$1
+ shift
+ fi
+
+ # preserve --debug
+ test : = "$debug_cmd" || func_append preserve_args " --debug"
+
+ case $host in
+ # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
+ # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
+ *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
+ # don't eliminate duplications in $postdeps and $predeps
+ opt_duplicate_compiler_generated_deps=:
+ ;;
+ *)
+ opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
+ ;;
+ esac
+
+ $opt_help || {
+ # Sanity checks first:
+ func_check_version_match
+
+ test yes != "$build_libtool_libs" \
+ && test yes != "$build_old_libs" \
+ && func_fatal_configuration "not configured to build any kind of library"
+
+ # Darwin sucks
+ eval std_shrext=\"$shrext_cmds\"
+
+ # Only execute mode is allowed to have -dlopen flags.
+ if test -n "$opt_dlopen" && test execute != "$opt_mode"; then
+ func_error "unrecognized option '-dlopen'"
+ $ECHO "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Change the help message to a mode-specific one.
+ generic_help=$help
+ help="Try '$progname --help --mode=$opt_mode' for more information."
+ }
+
+ # Pass back the unparsed argument list
+ func_quote_for_eval ${1+"$@"}
+ libtool_validate_options_result=$func_quote_for_eval_result
+}
+func_add_hook func_validate_options libtool_validate_options
+
+
+# Process options as early as possible so that --help and --version
+# can return quickly.
+func_options ${1+"$@"}
+eval set dummy "$func_options_result"; shift
+
+
+
+## ----------- ##
+## Main. ##
+## ----------- ##
+
+magic='%%%MAGIC variable%%%'
+magic_exe='%%%MAGIC EXE variable%%%'
+
+# Global variables.
+extracted_archives=
+extracted_serial=0
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end. This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+
+# func_generated_by_libtool
+# True iff stdin has been generated by Libtool. This function is only
+# a basic sanity check; it will hardly flush out determined imposters.
+func_generated_by_libtool_p ()
+{
+ $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
+# func_lalib_p file
+# True iff FILE is a libtool '.la' library or '.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+ test -f "$1" &&
+ $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
+}
+
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool '.la' library or '.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs. To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway. Works if 'file' does not exist.
+func_lalib_unsafe_p ()
+{
+ lalib_p=no
+ if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
+ for lalib_p_l in 1 2 3 4
+ do
+ read lalib_p_line
+ case $lalib_p_line in
+ \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+ esac
+ done
+ exec 0<&5 5<&-
+ fi
+ test yes = "$lalib_p"
+}
+
+# func_ltwrapper_script_p file
+# True iff FILE is a libtool wrapper script
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_script_p ()
+{
+ test -f "$1" &&
+ $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
+}
+
+# func_ltwrapper_executable_p file
+# True iff FILE is a libtool wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_executable_p ()
+{
+ func_ltwrapper_exec_suffix=
+ case $1 in
+ *.exe) ;;
+ *) func_ltwrapper_exec_suffix=.exe ;;
+ esac
+ $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
+}
+
+# func_ltwrapper_scriptname file
+# Assumes file is an ltwrapper_executable
+# uses $file to determine the appropriate filename for a
+# temporary ltwrapper_script.
+func_ltwrapper_scriptname ()
+{
+ func_dirname_and_basename "$1" "" "."
+ func_stripname '' '.exe' "$func_basename_result"
+ func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
+}
+
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script or wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+ func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+ $debug_cmd
+
+ save_ifs=$IFS; IFS='~'
+ for cmd in $1; do
+ IFS=$sp$nl
+ eval cmd=\"$cmd\"
+ IFS=$save_ifs
+ func_show_eval "$cmd" "${2-:}"
+ done
+ IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
+# behavior happens only for exec(3), not for open(2)! Also, sourcing
+# 'FILE.' does not work on cygwin managed mounts.
+func_source ()
+{
+ $debug_cmd
+
+ case $1 in
+ */* | *\\*) . "$1" ;;
+ *) . "./$1" ;;
+ esac
+}
+
+
+# func_resolve_sysroot PATH
+# Replace a leading = in PATH with a sysroot. Store the result into
+# func_resolve_sysroot_result
+func_resolve_sysroot ()
+{
+ func_resolve_sysroot_result=$1
+ case $func_resolve_sysroot_result in
+ =*)
+ func_stripname '=' '' "$func_resolve_sysroot_result"
+ func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
+ ;;
+ esac
+}
+
+# func_replace_sysroot PATH
+# If PATH begins with the sysroot, replace it with = and
+# store the result into func_replace_sysroot_result.
+func_replace_sysroot ()
+{
+ case $lt_sysroot:$1 in
+ ?*:"$lt_sysroot"*)
+ func_stripname "$lt_sysroot" '' "$1"
+ func_replace_sysroot_result='='$func_stripname_result
+ ;;
+ *)
+ # Including no sysroot.
+ func_replace_sysroot_result=$1
+ ;;
+ esac
+}
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+ $debug_cmd
+
+ if test -n "$available_tags" && test -z "$tagname"; then
+ CC_quoted=
+ for arg in $CC; do
+ func_append_quoted CC_quoted "$arg"
+ done
+ CC_expanded=`func_echo_all $CC`
+ CC_quoted_expanded=`func_echo_all $CC_quoted`
+ case $@ in
+ # Blanks in the command may have been stripped by the calling shell,
+ # but not from the CC environment variable when configure was run.
+ " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
+ # Blanks at the start of $base_compile will cause this to fail
+ # if we don't check for them as well.
+ *)
+ for z in $available_tags; do
+ if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+ # Evaluate the configuration.
+ eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+ CC_quoted=
+ for arg in $CC; do
+ # Double-quote args containing other shell metacharacters.
+ func_append_quoted CC_quoted "$arg"
+ done
+ CC_expanded=`func_echo_all $CC`
+ CC_quoted_expanded=`func_echo_all $CC_quoted`
+ case "$@ " in
+ " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
+ # The compiler in the base compile command matches
+ # the one in the tagged configuration.
+ # Assume this is the tagged configuration we want.
+ tagname=$z
+ break
+ ;;
+ esac
+ fi
+ done
+ # If $tagname still isn't set, then no tagged configuration
+ # was found and let the user know that the "--tag" command
+ # line option must be used.
+ if test -z "$tagname"; then
+ func_echo "unable to infer tagged configuration"
+ func_fatal_error "specify a tag with '--tag'"
+# else
+# func_verbose "using $tagname tagged configuration"
+ fi
+ ;;
+ esac
+ fi
+}
+
+
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
+{
+ write_libobj=$1
+ if test yes = "$build_libtool_libs"; then
+ write_lobj=\'$2\'
+ else
+ write_lobj=none
+ fi
+
+ if test yes = "$build_old_libs"; then
+ write_oldobj=\'$3\'
+ else
+ write_oldobj=none
+ fi
+
+ $opt_dry_run || {
+ cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+ $MV "${write_libobj}T" "$write_libobj"
+ }
+}
+
+
+##################################################
+# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
+##################################################
+
+# func_convert_core_file_wine_to_w32 ARG
+# Helper function used by file name conversion functions when $build is *nix,
+# and $host is mingw, cygwin, or some other w32 environment. Relies on a
+# correctly configured wine environment available, with the winepath program
+# in $build's $PATH.
+#
+# ARG is the $build file name to be converted to w32 format.
+# Result is available in $func_convert_core_file_wine_to_w32_result, and will
+# be empty on error (or when ARG is empty)
+func_convert_core_file_wine_to_w32 ()
+{
+ $debug_cmd
+
+ func_convert_core_file_wine_to_w32_result=$1
+ if test -n "$1"; then
+ # Unfortunately, winepath does not exit with a non-zero error code, so we
+ # are forced to check the contents of stdout. On the other hand, if the
+ # command is not found, the shell will set an exit code of 127 and print
+ # *an error message* to stdout. So we must check for both error code of
+ # zero AND non-empty stdout, which explains the odd construction:
+ func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
+ if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
+ func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
+ $SED -e "$sed_naive_backslashify"`
+ else
+ func_convert_core_file_wine_to_w32_result=
+ fi
+ fi
+}
+# end: func_convert_core_file_wine_to_w32
+
+
+# func_convert_core_path_wine_to_w32 ARG
+# Helper function used by path conversion functions when $build is *nix, and
+# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
+# configured wine environment available, with the winepath program in $build's
+# $PATH. Assumes ARG has no leading or trailing path separator characters.
+#
+# ARG is path to be converted from $build format to win32.
+# Result is available in $func_convert_core_path_wine_to_w32_result.
+# Unconvertible file (directory) names in ARG are skipped; if no directory names
+# are convertible, then the result may be empty.
+func_convert_core_path_wine_to_w32 ()
+{
+ $debug_cmd
+
+ # unfortunately, winepath doesn't convert paths, only file names
+ func_convert_core_path_wine_to_w32_result=
+ if test -n "$1"; then
+ oldIFS=$IFS
+ IFS=:
+ for func_convert_core_path_wine_to_w32_f in $1; do
+ IFS=$oldIFS
+ func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
+ if test -n "$func_convert_core_file_wine_to_w32_result"; then
+ if test -z "$func_convert_core_path_wine_to_w32_result"; then
+ func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
+ else
+ func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
+ fi
+ fi
+ done
+ IFS=$oldIFS
+ fi
+}
+# end: func_convert_core_path_wine_to_w32
+
+
+# func_cygpath ARGS...
+# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
+# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
+# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
+# (2), returns the Cygwin file name or path in func_cygpath_result (input
+# file name or path is assumed to be in w32 format, as previously converted
+# from $build's *nix or MSYS format). In case (3), returns the w32 file name
+# or path in func_cygpath_result (input file name or path is assumed to be in
+# Cygwin format). Returns an empty string on error.
+#
+# ARGS are passed to cygpath, with the last one being the file name or path to
+# be converted.
+#
+# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
+# environment variable; do not put it in $PATH.
+func_cygpath ()
+{
+ $debug_cmd
+
+ if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
+ func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
+ if test "$?" -ne 0; then
+ # on failure, ensure result is empty
+ func_cygpath_result=
+ fi
+ else
+ func_cygpath_result=
+ func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
+ fi
+}
+#end: func_cygpath
+
+
+# func_convert_core_msys_to_w32 ARG
+# Convert file name or path ARG from MSYS format to w32 format. Return
+# result in func_convert_core_msys_to_w32_result.
+func_convert_core_msys_to_w32 ()
+{
+ $debug_cmd
+
+ # awkward: cmd appends spaces to result
+ func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
+ $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
+}
+#end: func_convert_core_msys_to_w32
+
+
+# func_convert_file_check ARG1 ARG2
+# Verify that ARG1 (a file name in $build format) was converted to $host
+# format in ARG2. Otherwise, emit an error message, but continue (resetting
+# func_to_host_file_result to ARG1).
+func_convert_file_check ()
+{
+ $debug_cmd
+
+ if test -z "$2" && test -n "$1"; then
+ func_error "Could not determine host file name corresponding to"
+ func_error " '$1'"
+ func_error "Continuing, but uninstalled executables may not work."
+ # Fallback:
+ func_to_host_file_result=$1
+ fi
+}
+# end func_convert_file_check
+
+
+# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
+# Verify that FROM_PATH (a path in $build format) was converted to $host
+# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
+# func_to_host_file_result to a simplistic fallback value (see below).
+func_convert_path_check ()
+{
+ $debug_cmd
+
+ if test -z "$4" && test -n "$3"; then
+ func_error "Could not determine the host path corresponding to"
+ func_error " '$3'"
+ func_error "Continuing, but uninstalled executables may not work."
+ # Fallback. This is a deliberately simplistic "conversion" and
+ # should not be "improved". See libtool.info.
+ if test "x$1" != "x$2"; then
+ lt_replace_pathsep_chars="s|$1|$2|g"
+ func_to_host_path_result=`echo "$3" |
+ $SED -e "$lt_replace_pathsep_chars"`
+ else
+ func_to_host_path_result=$3
+ fi
+ fi
+}
+# end func_convert_path_check
+
+
+# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
+# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
+# and appending REPL if ORIG matches BACKPAT.
+func_convert_path_front_back_pathsep ()
+{
+ $debug_cmd
+
+ case $4 in
+ $1 ) func_to_host_path_result=$3$func_to_host_path_result
+ ;;
+ esac
+ case $4 in
+ $2 ) func_append func_to_host_path_result "$3"
+ ;;
+ esac
+}
+# end func_convert_path_front_back_pathsep
+
+
+##################################################
+# $build to $host FILE NAME CONVERSION FUNCTIONS #
+##################################################
+# invoked via '$to_host_file_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# Result will be available in $func_to_host_file_result.
+
+
+# func_to_host_file ARG
+# Converts the file name ARG from $build format to $host format. Return result
+# in func_to_host_file_result.
+func_to_host_file ()
+{
+ $debug_cmd
+
+ $to_host_file_cmd "$1"
+}
+# end func_to_host_file
+
+
+# func_to_tool_file ARG LAZY
+# converts the file name ARG from $build format to toolchain format. Return
+# result in func_to_tool_file_result. If the conversion in use is listed
+# in (the comma separated) LAZY, no conversion takes place.
+func_to_tool_file ()
+{
+ $debug_cmd
+
+ case ,$2, in
+ *,"$to_tool_file_cmd",*)
+ func_to_tool_file_result=$1
+ ;;
+ *)
+ $to_tool_file_cmd "$1"
+ func_to_tool_file_result=$func_to_host_file_result
+ ;;
+ esac
+}
+# end func_to_tool_file
+
+
+# func_convert_file_noop ARG
+# Copy ARG to func_to_host_file_result.
+func_convert_file_noop ()
+{
+ func_to_host_file_result=$1
+}
+# end func_convert_file_noop
+
+
+# func_convert_file_msys_to_w32 ARG
+# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper. Returns result in
+# func_to_host_file_result.
+func_convert_file_msys_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_file_result=$1
+ if test -n "$1"; then
+ func_convert_core_msys_to_w32 "$1"
+ func_to_host_file_result=$func_convert_core_msys_to_w32_result
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_w32
+
+
+# func_convert_file_cygwin_to_w32 ARG
+# Convert file name ARG from Cygwin to w32 format. Returns result in
+# func_to_host_file_result.
+func_convert_file_cygwin_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_file_result=$1
+ if test -n "$1"; then
+ # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
+ # LT_CYGPATH in this case.
+ func_to_host_file_result=`cygpath -m "$1"`
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_cygwin_to_w32
+
+
+# func_convert_file_nix_to_w32 ARG
+# Convert file name ARG from *nix to w32 format. Requires a wine environment
+# and a working winepath. Returns result in func_to_host_file_result.
+func_convert_file_nix_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_file_result=$1
+ if test -n "$1"; then
+ func_convert_core_file_wine_to_w32 "$1"
+ func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_w32
+
+
+# func_convert_file_msys_to_cygwin ARG
+# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_file_msys_to_cygwin ()
+{
+ $debug_cmd
+
+ func_to_host_file_result=$1
+ if test -n "$1"; then
+ func_convert_core_msys_to_w32 "$1"
+ func_cygpath -u "$func_convert_core_msys_to_w32_result"
+ func_to_host_file_result=$func_cygpath_result
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_cygwin
+
+
+# func_convert_file_nix_to_cygwin ARG
+# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed
+# in a wine environment, working winepath, and LT_CYGPATH set. Returns result
+# in func_to_host_file_result.
+func_convert_file_nix_to_cygwin ()
+{
+ $debug_cmd
+
+ func_to_host_file_result=$1
+ if test -n "$1"; then
+ # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
+ func_convert_core_file_wine_to_w32 "$1"
+ func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
+ func_to_host_file_result=$func_cygpath_result
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_cygwin
+
+
+#############################################
+# $build to $host PATH CONVERSION FUNCTIONS #
+#############################################
+# invoked via '$to_host_path_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# The result will be available in $func_to_host_path_result.
+#
+# Path separators are also converted from $build format to $host format. If
+# ARG begins or ends with a path separator character, it is preserved (but
+# converted to $host format) on output.
+#
+# All path conversion functions are named using the following convention:
+# file name conversion function : func_convert_file_X_to_Y ()
+# path conversion function : func_convert_path_X_to_Y ()
+# where, for any given $build/$host combination the 'X_to_Y' value is the
+# same. If conversion functions are added for new $build/$host combinations,
+# the two new functions must follow this pattern, or func_init_to_host_path_cmd
+# will break.
+
+
+# func_init_to_host_path_cmd
+# Ensures that function "pointer" variable $to_host_path_cmd is set to the
+# appropriate value, based on the value of $to_host_file_cmd.
+to_host_path_cmd=
+func_init_to_host_path_cmd ()
+{
+ $debug_cmd
+
+ if test -z "$to_host_path_cmd"; then
+ func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
+ to_host_path_cmd=func_convert_path_$func_stripname_result
+ fi
+}
+
+
+# func_to_host_path ARG
+# Converts the path ARG from $build format to $host format. Return result
+# in func_to_host_path_result.
+func_to_host_path ()
+{
+ $debug_cmd
+
+ func_init_to_host_path_cmd
+ $to_host_path_cmd "$1"
+}
+# end func_to_host_path
+
+
+# func_convert_path_noop ARG
+# Copy ARG to func_to_host_path_result.
+func_convert_path_noop ()
+{
+ func_to_host_path_result=$1
+}
+# end func_convert_path_noop
+
+
+# func_convert_path_msys_to_w32 ARG
+# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper. Returns result in
+# func_to_host_path_result.
+func_convert_path_msys_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_path_result=$1
+ if test -n "$1"; then
+ # Remove leading and trailing path separator characters from ARG. MSYS
+ # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
+ # and winepath ignores them completely.
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+ func_to_host_path_result=$func_convert_core_msys_to_w32_result
+ func_convert_path_check : ";" \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+ fi
+}
+# end func_convert_path_msys_to_w32
+
+
+# func_convert_path_cygwin_to_w32 ARG
+# Convert path ARG from Cygwin to w32 format. Returns result in
+# func_to_host_file_result.
+func_convert_path_cygwin_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_path_result=$1
+ if test -n "$1"; then
+ # See func_convert_path_msys_to_w32:
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
+ func_convert_path_check : ";" \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+ fi
+}
+# end func_convert_path_cygwin_to_w32
+
+
+# func_convert_path_nix_to_w32 ARG
+# Convert path ARG from *nix to w32 format. Requires a wine environment and
+# a working winepath. Returns result in func_to_host_file_result.
+func_convert_path_nix_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_path_result=$1
+ if test -n "$1"; then
+ # See func_convert_path_msys_to_w32:
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+ func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
+ func_convert_path_check : ";" \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+ fi
+}
+# end func_convert_path_nix_to_w32
+
+
+# func_convert_path_msys_to_cygwin ARG
+# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_path_msys_to_cygwin ()
+{
+ $debug_cmd
+
+ func_to_host_path_result=$1
+ if test -n "$1"; then
+ # See func_convert_path_msys_to_w32:
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+ func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
+ func_to_host_path_result=$func_cygpath_result
+ func_convert_path_check : : \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+ fi
+}
+# end func_convert_path_msys_to_cygwin
+
+
+# func_convert_path_nix_to_cygwin ARG
+# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a
+# a wine environment, working winepath, and LT_CYGPATH set. Returns result in
+# func_to_host_file_result.
+func_convert_path_nix_to_cygwin ()
+{
+ $debug_cmd
+
+ func_to_host_path_result=$1
+ if test -n "$1"; then
+ # Remove leading and trailing path separator characters from
+ # ARG. msys behavior is inconsistent here, cygpath turns them
+ # into '.;' and ';.', and winepath ignores them completely.
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+ func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
+ func_to_host_path_result=$func_cygpath_result
+ func_convert_path_check : : \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+ fi
+}
+# end func_convert_path_nix_to_cygwin
+
+
+# func_dll_def_p FILE
+# True iff FILE is a Windows DLL '.def' file.
+# Keep in sync with _LT_DLL_DEF_P in libtool.m4
+func_dll_def_p ()
+{
+ $debug_cmd
+
+ func_dll_def_p_tmp=`$SED -n \
+ -e 's/^[ ]*//' \
+ -e '/^\(;.*\)*$/d' \
+ -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \
+ -e q \
+ "$1"`
+ test DEF = "$func_dll_def_p_tmp"
+}
+
+
+# func_mode_compile arg...
+func_mode_compile ()
+{
+ $debug_cmd
+
+ # Get the compilation command and the source file.
+ base_compile=
+ srcfile=$nonopt # always keep a non-empty value in "srcfile"
+ suppress_opt=yes
+ suppress_output=
+ arg_mode=normal
+ libobj=
+ later=
+ pie_flag=
+
+ for arg
+ do
+ case $arg_mode in
+ arg )
+ # do not "continue". Instead, add this to base_compile
+ lastarg=$arg
+ arg_mode=normal
+ ;;
+
+ target )
+ libobj=$arg
+ arg_mode=normal
+ continue
+ ;;
+
+ normal )
+ # Accept any command-line options.
+ case $arg in
+ -o)
+ test -n "$libobj" && \
+ func_fatal_error "you cannot specify '-o' more than once"
+ arg_mode=target
+ continue
+ ;;
+
+ -pie | -fpie | -fPIE)
+ func_append pie_flag " $arg"
+ continue
+ ;;
+
+ -shared | -static | -prefer-pic | -prefer-non-pic)
+ func_append later " $arg"
+ continue
+ ;;
+
+ -no-suppress)
+ suppress_opt=no
+ continue
+ ;;
+
+ -Xcompiler)
+ arg_mode=arg # the next one goes into the "base_compile" arg list
+ continue # The current "srcfile" will either be retained or
+ ;; # replaced later. I would guess that would be a bug.
+
+ -Wc,*)
+ func_stripname '-Wc,' '' "$arg"
+ args=$func_stripname_result
+ lastarg=
+ save_ifs=$IFS; IFS=,
+ for arg in $args; do
+ IFS=$save_ifs
+ func_append_quoted lastarg "$arg"
+ done
+ IFS=$save_ifs
+ func_stripname ' ' '' "$lastarg"
+ lastarg=$func_stripname_result
+
+ # Add the arguments to base_compile.
+ func_append base_compile " $lastarg"
+ continue
+ ;;
+
+ *)
+ # Accept the current argument as the source file.
+ # The previous "srcfile" becomes the current argument.
+ #
+ lastarg=$srcfile
+ srcfile=$arg
+ ;;
+ esac # case $arg
+ ;;
+ esac # case $arg_mode
+
+ # Aesthetically quote the previous argument.
+ func_append_quoted base_compile "$lastarg"
+ done # for arg
+
+ case $arg_mode in
+ arg)
+ func_fatal_error "you must specify an argument for -Xcompile"
+ ;;
+ target)
+ func_fatal_error "you must specify a target with '-o'"
+ ;;
+ *)
+ # Get the name of the library object.
+ test -z "$libobj" && {
+ func_basename "$srcfile"
+ libobj=$func_basename_result
+ }
+ ;;
+ esac
+
+ # Recognize several different file suffixes.
+ # If the user specifies -o file.o, it is replaced with file.lo
+ case $libobj in
+ *.[cCFSifmso] | \
+ *.ada | *.adb | *.ads | *.asm | \
+ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
+ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
+ func_xform "$libobj"
+ libobj=$func_xform_result
+ ;;
+ esac
+
+ case $libobj in
+ *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+ *)
+ func_fatal_error "cannot determine name of library object from '$libobj'"
+ ;;
+ esac
+
+ func_infer_tag $base_compile
+
+ for arg in $later; do
+ case $arg in
+ -shared)
+ test yes = "$build_libtool_libs" \
+ || func_fatal_configuration "cannot build a shared library"
+ build_old_libs=no
+ continue
+ ;;
+
+ -static)
+ build_libtool_libs=no
+ build_old_libs=yes
+ continue
+ ;;
+
+ -prefer-pic)
+ pic_mode=yes
+ continue
+ ;;
+
+ -prefer-non-pic)
+ pic_mode=no
+ continue
+ ;;
+ esac
+ done
+
+ func_quote_for_eval "$libobj"
+ test "X$libobj" != "X$func_quote_for_eval_result" \
+ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \
+ && func_warning "libobj name '$libobj' may not contain shell special characters."
+ func_dirname_and_basename "$obj" "/" ""
+ objname=$func_basename_result
+ xdir=$func_dirname_result
+ lobj=$xdir$objdir/$objname
+
+ test -z "$base_compile" && \
+ func_fatal_help "you must specify a compilation command"
+
+ # Delete any leftover library objects.
+ if test yes = "$build_old_libs"; then
+ removelist="$obj $lobj $libobj ${libobj}T"
+ else
+ removelist="$lobj $libobj ${libobj}T"
+ fi
+
+ # On Cygwin there's no "real" PIC flag so we must build both object types
+ case $host_os in
+ cygwin* | mingw* | pw32* | os2* | cegcc*)
+ pic_mode=default
+ ;;
+ esac
+ if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
+ # non-PIC code in shared libraries is not supported
+ pic_mode=default
+ fi
+
+ # Calculate the filename of the output object if compiler does
+ # not support -o with -c
+ if test no = "$compiler_c_o"; then
+ output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
+ lockfile=$output_obj.lock
+ else
+ output_obj=
+ need_locks=no
+ lockfile=
+ fi
+
+ # Lock this critical section if it is needed
+ # We use this script file to make the link, it avoids creating a new file
+ if test yes = "$need_locks"; then
+ until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+ func_echo "Waiting for $lockfile to be removed"
+ sleep 2
+ done
+ elif test warn = "$need_locks"; then
+ if test -f "$lockfile"; then
+ $ECHO "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support '-c' and '-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+ func_append removelist " $output_obj"
+ $ECHO "$srcfile" > "$lockfile"
+ fi
+
+ $opt_dry_run || $RM $removelist
+ func_append removelist " $lockfile"
+ trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
+
+ func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
+ srcfile=$func_to_tool_file_result
+ func_quote_for_eval "$srcfile"
+ qsrcfile=$func_quote_for_eval_result
+
+ # Only build a PIC object if we are building libtool libraries.
+ if test yes = "$build_libtool_libs"; then
+ # Without this assignment, base_compile gets emptied.
+ fbsd_hideous_sh_bug=$base_compile
+
+ if test no != "$pic_mode"; then
+ command="$base_compile $qsrcfile $pic_flag"
+ else
+ # Don't build PIC code
+ command="$base_compile $qsrcfile"
+ fi
+
+ func_mkdir_p "$xdir$objdir"
+
+ if test -z "$output_obj"; then
+ # Place PIC objects in $objdir
+ func_append command " -o $lobj"
+ fi
+
+ func_show_eval_locale "$command" \
+ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
+
+ if test warn = "$need_locks" &&
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support '-c' and '-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+
+ # Just move the object if needed, then go on to compile the next one
+ if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+ func_show_eval '$MV "$output_obj" "$lobj"' \
+ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+ fi
+
+ # Allow error messages only from the first compilation.
+ if test yes = "$suppress_opt"; then
+ suppress_output=' >/dev/null 2>&1'
+ fi
+ fi
+
+ # Only build a position-dependent object if we build old libraries.
+ if test yes = "$build_old_libs"; then
+ if test yes != "$pic_mode"; then
+ # Don't build PIC code
+ command="$base_compile $qsrcfile$pie_flag"
+ else
+ command="$base_compile $qsrcfile $pic_flag"
+ fi
+ if test yes = "$compiler_c_o"; then
+ func_append command " -o $obj"
+ fi
+
+ # Suppress compiler output if we already did a PIC compilation.
+ func_append command "$suppress_output"
+ func_show_eval_locale "$command" \
+ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+
+ if test warn = "$need_locks" &&
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support '-c' and '-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+
+ # Just move the object if needed
+ if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+ func_show_eval '$MV "$output_obj" "$obj"' \
+ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+ fi
+ fi
+
+ $opt_dry_run || {
+ func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+ # Unlock the critical section if it was locked
+ if test no != "$need_locks"; then
+ removelist=$lockfile
+ $RM "$lockfile"
+ fi
+ }
+
+ exit $EXIT_SUCCESS
+}
+
+$opt_help || {
+ test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
+}
+
+func_mode_help ()
+{
+ # We need to display help for each of the modes.
+ case $opt_mode in
+ "")
+ # Generic help is extracted from the usage comments
+ # at the start of this file.
+ func_help
+ ;;
+
+ clean)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+ compile)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+ -o OUTPUT-FILE set the output file name to OUTPUT-FILE
+ -no-suppress do not suppress compiler output for multiple passes
+ -prefer-pic try to build PIC objects only
+ -prefer-non-pic try to build non-PIC objects only
+ -shared do not build a '.o' file suitable for static linking
+ -static only build a '.o' file suitable for static linking
+ -Wc,FLAG pass FLAG directly to the compiler
+
+COMPILE-COMMAND is a command to be used in creating a 'standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix '.c' with the
+library object suffix, '.lo'."
+ ;;
+
+ execute)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+ -dlopen FILE add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to '-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+ ;;
+
+ finish)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges. Use
+the '--dry-run' option if you just want to see what would be executed."
+ ;;
+
+ install)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command. The first component should be
+either the 'install' or 'cp' program.
+
+The following components of INSTALL-COMMAND are treated specially:
+
+ -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+ ;;
+
+ link)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+ -all-static do not do any dynamic linking at all
+ -avoid-version do not add a version suffix if possible
+ -bindir BINDIR specify path to binaries directory (for systems where
+ libraries must be found in the PATH setting at runtime)
+ -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime
+ -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
+ -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+ -export-symbols SYMFILE
+ try to export only the symbols listed in SYMFILE
+ -export-symbols-regex REGEX
+ try to export only the symbols matching REGEX
+ -LLIBDIR search LIBDIR for required installed libraries
+ -lNAME OUTPUT-FILE requires the installed library libNAME
+ -module build a library that can dlopened
+ -no-fast-install disable the fast-install mode
+ -no-install link a not-installable executable
+ -no-undefined declare that a library does not refer to external symbols
+ -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
+ -objectlist FILE use a list of object files found in FILE to specify objects
+ -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes)
+ -precious-files-regex REGEX
+ don't remove output files matching REGEX
+ -release RELEASE specify package release information
+ -rpath LIBDIR the created library will eventually be installed in LIBDIR
+ -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
+ -shared only do dynamic linking of libtool libraries
+ -shrext SUFFIX override the standard shared library file extension
+ -static do not do any dynamic linking of uninstalled libtool libraries
+ -static-libtool-libs
+ do not do any dynamic linking of libtool libraries
+ -version-info CURRENT[:REVISION[:AGE]]
+ specify library version info [each variable defaults to 0]
+ -weak LIBNAME declare that the target provides the LIBNAME interface
+ -Wc,FLAG
+ -Xcompiler FLAG pass linker-specific FLAG directly to the compiler
+ -Wl,FLAG
+ -Xlinker FLAG pass linker-specific FLAG directly to the linker
+ -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC)
+
+All other options (arguments beginning with '-') are ignored.
+
+Every other argument is treated as a filename. Files ending in '.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in '.la', then a libtool library is created,
+only library objects ('.lo' files) may be specified, and '-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created
+using 'ar' and 'ranlib', or on Windows using 'lib'.
+
+If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
+is created, otherwise an executable program is created."
+ ;;
+
+ uninstall)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+ *)
+ func_fatal_help "invalid operation mode '$opt_mode'"
+ ;;
+ esac
+
+ echo
+ $ECHO "Try '$progname --help' for more information about other modes."
+}
+
+# Now that we've collected a possible --mode arg, show help if necessary
+if $opt_help; then
+ if test : = "$opt_help"; then
+ func_mode_help
+ else
+ {
+ func_help noexit
+ for opt_mode in compile link execute install finish uninstall clean; do
+ func_mode_help
+ done
+ } | $SED -n '1p; 2,$s/^Usage:/ or: /p'
+ {
+ func_help noexit
+ for opt_mode in compile link execute install finish uninstall clean; do
+ echo
+ func_mode_help
+ done
+ } |
+ $SED '1d
+ /^When reporting/,/^Report/{
+ H
+ d
+ }
+ $x
+ /information about other modes/d
+ /more detailed .*MODE/d
+ s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
+ fi
+ exit $?
+fi
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+ $debug_cmd
+
+ # The first argument is the command name.
+ cmd=$nonopt
+ test -z "$cmd" && \
+ func_fatal_help "you must specify a COMMAND"
+
+ # Handle -dlopen flags immediately.
+ for file in $opt_dlopen; do
+ test -f "$file" \
+ || func_fatal_help "'$file' is not a file"
+
+ dir=
+ case $file in
+ *.la)
+ func_resolve_sysroot "$file"
+ file=$func_resolve_sysroot_result
+
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$file" \
+ || func_fatal_help "'$lib' is not a valid libtool archive"
+
+ # Read the libtool library.
+ dlname=
+ library_names=
+ func_source "$file"
+
+ # Skip this library if it cannot be dlopened.
+ if test -z "$dlname"; then
+ # Warn if it was a shared library.
+ test -n "$library_names" && \
+ func_warning "'$file' was not linked with '-export-dynamic'"
+ continue
+ fi
+
+ func_dirname "$file" "" "."
+ dir=$func_dirname_result
+
+ if test -f "$dir/$objdir/$dlname"; then
+ func_append dir "/$objdir"
+ else
+ if test ! -f "$dir/$dlname"; then
+ func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
+ fi
+ fi
+ ;;
+
+ *.lo)
+ # Just add the directory containing the .lo file.
+ func_dirname "$file" "" "."
+ dir=$func_dirname_result
+ ;;
+
+ *)
+ func_warning "'-dlopen' is ignored for non-libtool libraries and objects"
+ continue
+ ;;
+ esac
+
+ # Get the absolute pathname.
+ absdir=`cd "$dir" && pwd`
+ test -n "$absdir" && dir=$absdir
+
+ # Now add the directory to shlibpath_var.
+ if eval "test -z \"\$$shlibpath_var\""; then
+ eval "$shlibpath_var=\"\$dir\""
+ else
+ eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+ fi
+ done
+
+ # This variable tells wrapper scripts just to set shlibpath_var
+ # rather than running their programs.
+ libtool_execute_magic=$magic
+
+ # Check if any of the arguments is a wrapper script.
+ args=
+ for file
+ do
+ case $file in
+ -* | *.la | *.lo ) ;;
+ *)
+ # Do a test to see if this is really a libtool program.
+ if func_ltwrapper_script_p "$file"; then
+ func_source "$file"
+ # Transform arg to wrapped name.
+ file=$progdir/$program
+ elif func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ func_source "$func_ltwrapper_scriptname_result"
+ # Transform arg to wrapped name.
+ file=$progdir/$program
+ fi
+ ;;
+ esac
+ # Quote arguments (to preserve shell metacharacters).
+ func_append_quoted args "$file"
+ done
+
+ if $opt_dry_run; then
+ # Display what would be done.
+ if test -n "$shlibpath_var"; then
+ eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+ echo "export $shlibpath_var"
+ fi
+ $ECHO "$cmd$args"
+ exit $EXIT_SUCCESS
+ else
+ if test -n "$shlibpath_var"; then
+ # Export the shlibpath_var.
+ eval "export $shlibpath_var"
+ fi
+
+ # Restore saved environment variables
+ for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+ do
+ eval "if test \"\${save_$lt_var+set}\" = set; then
+ $lt_var=\$save_$lt_var; export $lt_var
+ else
+ $lt_unset $lt_var
+ fi"
+ done
+
+ # Now prepare to actually exec the command.
+ exec_cmd=\$cmd$args
+ fi
+}
+
+test execute = "$opt_mode" && func_mode_execute ${1+"$@"}
+
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+ $debug_cmd
+
+ libs=
+ libdirs=
+ admincmds=
+
+ for opt in "$nonopt" ${1+"$@"}
+ do
+ if test -d "$opt"; then
+ func_append libdirs " $opt"
+
+ elif test -f "$opt"; then
+ if func_lalib_unsafe_p "$opt"; then
+ func_append libs " $opt"
+ else
+ func_warning "'$opt' is not a valid libtool archive"
+ fi
+
+ else
+ func_fatal_error "invalid argument '$opt'"
+ fi
+ done
+
+ if test -n "$libs"; then
+ if test -n "$lt_sysroot"; then
+ sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
+ sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
+ else
+ sysroot_cmd=
+ fi
+
+ # Remove sysroot references
+ if $opt_dry_run; then
+ for lib in $libs; do
+ echo "removing references to $lt_sysroot and '=' prefixes from $lib"
+ done
+ else
+ tmpdir=`func_mktempdir`
+ for lib in $libs; do
+ $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
+ > $tmpdir/tmp-la
+ mv -f $tmpdir/tmp-la $lib
+ done
+ ${RM}r "$tmpdir"
+ fi
+ fi
+
+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+ for libdir in $libdirs; do
+ if test -n "$finish_cmds"; then
+ # Do each command in the finish commands.
+ func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+ fi
+ if test -n "$finish_eval"; then
+ # Do the single finish_eval.
+ eval cmds=\"$finish_eval\"
+ $opt_dry_run || eval "$cmds" || func_append admincmds "
+ $cmds"
+ fi
+ done
+ fi
+
+ # Exit here if they wanted silent mode.
+ $opt_quiet && exit $EXIT_SUCCESS
+
+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+ echo "----------------------------------------------------------------------"
+ echo "Libraries have been installed in:"
+ for libdir in $libdirs; do
+ $ECHO " $libdir"
+ done
+ echo
+ echo "If you ever happen to want to link against installed libraries"
+ echo "in a given directory, LIBDIR, you must either use libtool, and"
+ echo "specify the full pathname of the library, or use the '-LLIBDIR'"
+ echo "flag during linking and do at least one of the following:"
+ if test -n "$shlibpath_var"; then
+ echo " - add LIBDIR to the '$shlibpath_var' environment variable"
+ echo " during execution"
+ fi
+ if test -n "$runpath_var"; then
+ echo " - add LIBDIR to the '$runpath_var' environment variable"
+ echo " during linking"
+ fi
+ if test -n "$hardcode_libdir_flag_spec"; then
+ libdir=LIBDIR
+ eval flag=\"$hardcode_libdir_flag_spec\"
+
+ $ECHO " - use the '$flag' linker flag"
+ fi
+ if test -n "$admincmds"; then
+ $ECHO " - have your system administrator run these commands:$admincmds"
+ fi
+ if test -f /etc/ld.so.conf; then
+ echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
+ fi
+ echo
+
+ echo "See any operating system documentation about shared libraries for"
+ case $host in
+ solaris2.[6789]|solaris2.1[0-9])
+ echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+ echo "pages."
+ ;;
+ *)
+ echo "more information, such as the ld(1) and ld.so(8) manual pages."
+ ;;
+ esac
+ echo "----------------------------------------------------------------------"
+ fi
+ exit $EXIT_SUCCESS
+}
+
+test finish = "$opt_mode" && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+ $debug_cmd
+
+ # There may be an optional sh(1) argument at the beginning of
+ # install_prog (especially on Windows NT).
+ if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
+ # Allow the use of GNU shtool's install command.
+ case $nonopt in *shtool*) :;; *) false;; esac
+ then
+ # Aesthetically quote it.
+ func_quote_for_eval "$nonopt"
+ install_prog="$func_quote_for_eval_result "
+ arg=$1
+ shift
+ else
+ install_prog=
+ arg=$nonopt
+ fi
+
+ # The real first argument should be the name of the installation program.
+ # Aesthetically quote it.
+ func_quote_for_eval "$arg"
+ func_append install_prog "$func_quote_for_eval_result"
+ install_shared_prog=$install_prog
+ case " $install_prog " in
+ *[\\\ /]cp\ *) install_cp=: ;;
+ *) install_cp=false ;;
+ esac
+
+ # We need to accept at least all the BSD install flags.
+ dest=
+ files=
+ opts=
+ prev=
+ install_type=
+ isdir=false
+ stripme=
+ no_mode=:
+ for arg
+ do
+ arg2=
+ if test -n "$dest"; then
+ func_append files " $dest"
+ dest=$arg
+ continue
+ fi
+
+ case $arg in
+ -d) isdir=: ;;
+ -f)
+ if $install_cp; then :; else
+ prev=$arg
+ fi
+ ;;
+ -g | -m | -o)
+ prev=$arg
+ ;;
+ -s)
+ stripme=" -s"
+ continue
+ ;;
+ -*)
+ ;;
+ *)
+ # If the previous option needed an argument, then skip it.
+ if test -n "$prev"; then
+ if test X-m = "X$prev" && test -n "$install_override_mode"; then
+ arg2=$install_override_mode
+ no_mode=false
+ fi
+ prev=
+ else
+ dest=$arg
+ continue
+ fi
+ ;;
+ esac
+
+ # Aesthetically quote the argument.
+ func_quote_for_eval "$arg"
+ func_append install_prog " $func_quote_for_eval_result"
+ if test -n "$arg2"; then
+ func_quote_for_eval "$arg2"
+ fi
+ func_append install_shared_prog " $func_quote_for_eval_result"
+ done
+
+ test -z "$install_prog" && \
+ func_fatal_help "you must specify an install program"
+
+ test -n "$prev" && \
+ func_fatal_help "the '$prev' option requires an argument"
+
+ if test -n "$install_override_mode" && $no_mode; then
+ if $install_cp; then :; else
+ func_quote_for_eval "$install_override_mode"
+ func_append install_shared_prog " -m $func_quote_for_eval_result"
+ fi
+ fi
+
+ if test -z "$files"; then
+ if test -z "$dest"; then
+ func_fatal_help "no file or destination specified"
+ else
+ func_fatal_help "you must specify a destination"
+ fi
+ fi
+
+ # Strip any trailing slash from the destination.
+ func_stripname '' '/' "$dest"
+ dest=$func_stripname_result
+
+ # Check to see that the destination is a directory.
+ test -d "$dest" && isdir=:
+ if $isdir; then
+ destdir=$dest
+ destname=
+ else
+ func_dirname_and_basename "$dest" "" "."
+ destdir=$func_dirname_result
+ destname=$func_basename_result
+
+ # Not a directory, so check to see that there is only one file specified.
+ set dummy $files; shift
+ test "$#" -gt 1 && \
+ func_fatal_help "'$dest' is not a directory"
+ fi
+ case $destdir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ for file in $files; do
+ case $file in
+ *.lo) ;;
+ *)
+ func_fatal_help "'$destdir' must be an absolute directory name"
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic=$magic
+
+ staticlibs=
+ future_libdirs=
+ current_libdirs=
+ for file in $files; do
+
+ # Do each installation.
+ case $file in
+ *.$libext)
+ # Do the static libraries later.
+ func_append staticlibs " $file"
+ ;;
+
+ *.la)
+ func_resolve_sysroot "$file"
+ file=$func_resolve_sysroot_result
+
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$file" \
+ || func_fatal_help "'$file' is not a valid libtool archive"
+
+ library_names=
+ old_library=
+ relink_command=
+ func_source "$file"
+
+ # Add the libdir to current_libdirs if it is the destination.
+ if test "X$destdir" = "X$libdir"; then
+ case "$current_libdirs " in
+ *" $libdir "*) ;;
+ *) func_append current_libdirs " $libdir" ;;
+ esac
+ else
+ # Note the libdir as a future libdir.
+ case "$future_libdirs " in
+ *" $libdir "*) ;;
+ *) func_append future_libdirs " $libdir" ;;
+ esac
+ fi
+
+ func_dirname "$file" "/" ""
+ dir=$func_dirname_result
+ func_append dir "$objdir"
+
+ if test -n "$relink_command"; then
+ # Determine the prefix the user has applied to our future dir.
+ inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
+
+ # Don't allow the user to place us outside of our expected
+ # location b/c this prevents finding dependent libraries that
+ # are installed to the same prefix.
+ # At present, this check doesn't affect windows .dll's that
+ # are installed into $libdir/../bin (currently, that works fine)
+ # but it's something to keep an eye on.
+ test "$inst_prefix_dir" = "$destdir" && \
+ func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir"
+
+ if test -n "$inst_prefix_dir"; then
+ # Stick the inst_prefix_dir data into the link command.
+ relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+ else
+ relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+ fi
+
+ func_warning "relinking '$file'"
+ func_show_eval "$relink_command" \
+ 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
+ fi
+
+ # See the names of the shared library.
+ set dummy $library_names; shift
+ if test -n "$1"; then
+ realname=$1
+ shift
+
+ srcname=$realname
+ test -n "$relink_command" && srcname=${realname}T
+
+ # Install the shared library and build the symlinks.
+ func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
+ 'exit $?'
+ tstripme=$stripme
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ case $realname in
+ *.dll.a)
+ tstripme=
+ ;;
+ esac
+ ;;
+ os2*)
+ case $realname in
+ *_dll.a)
+ tstripme=
+ ;;
+ esac
+ ;;
+ esac
+ if test -n "$tstripme" && test -n "$striplib"; then
+ func_show_eval "$striplib $destdir/$realname" 'exit $?'
+ fi
+
+ if test "$#" -gt 0; then
+ # Delete the old symlinks, and create new ones.
+ # Try 'ln -sf' first, because the 'ln' binary might depend on
+ # the symlink we replace! Solaris /bin/ln does not understand -f,
+ # so we also need to try rm && ln -s.
+ for linkname
+ do
+ test "$linkname" != "$realname" \
+ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+ done
+ fi
+
+ # Do each command in the postinstall commands.
+ lib=$destdir/$realname
+ func_execute_cmds "$postinstall_cmds" 'exit $?'
+ fi
+
+ # Install the pseudo-library for information purposes.
+ func_basename "$file"
+ name=$func_basename_result
+ instname=$dir/${name}i
+ func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+
+ # Maybe install the static library, too.
+ test -n "$old_library" && func_append staticlibs " $dir/$old_library"
+ ;;
+
+ *.lo)
+ # Install (i.e. copy) a libtool object.
+
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile=$destdir/$destname
+ else
+ func_basename "$file"
+ destfile=$func_basename_result
+ destfile=$destdir/$destfile
+ fi
+
+ # Deduce the name of the destination old-style object file.
+ case $destfile in
+ *.lo)
+ func_lo2o "$destfile"
+ staticdest=$func_lo2o_result
+ ;;
+ *.$objext)
+ staticdest=$destfile
+ destfile=
+ ;;
+ *)
+ func_fatal_help "cannot copy a libtool object to '$destfile'"
+ ;;
+ esac
+
+ # Install the libtool object if requested.
+ test -n "$destfile" && \
+ func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+ # Install the old object if enabled.
+ if test yes = "$build_old_libs"; then
+ # Deduce the name of the old-style object file.
+ func_lo2o "$file"
+ staticobj=$func_lo2o_result
+ func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
+ fi
+ exit $EXIT_SUCCESS
+ ;;
+
+ *)
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile=$destdir/$destname
+ else
+ func_basename "$file"
+ destfile=$func_basename_result
+ destfile=$destdir/$destfile
+ fi
+
+ # If the file is missing, and there is a .exe on the end, strip it
+ # because it is most likely a libtool script we actually want to
+ # install
+ stripped_ext=
+ case $file in
+ *.exe)
+ if test ! -f "$file"; then
+ func_stripname '' '.exe' "$file"
+ file=$func_stripname_result
+ stripped_ext=.exe
+ fi
+ ;;
+ esac
+
+ # Do a test to see if this is really a libtool program.
+ case $host in
+ *cygwin* | *mingw*)
+ if func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ wrapper=$func_ltwrapper_scriptname_result
+ else
+ func_stripname '' '.exe' "$file"
+ wrapper=$func_stripname_result
+ fi
+ ;;
+ *)
+ wrapper=$file
+ ;;
+ esac
+ if func_ltwrapper_script_p "$wrapper"; then
+ notinst_deplibs=
+ relink_command=
+
+ func_source "$wrapper"
+
+ # Check the variables that should have been set.
+ test -z "$generated_by_libtool_version" && \
+ func_fatal_error "invalid libtool wrapper script '$wrapper'"
+
+ finalize=:
+ for lib in $notinst_deplibs; do
+ # Check to see that each library is installed.
+ libdir=
+ if test -f "$lib"; then
+ func_source "$lib"
+ fi
+ libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
+ if test -n "$libdir" && test ! -f "$libfile"; then
+ func_warning "'$lib' has not been installed in '$libdir'"
+ finalize=false
+ fi
+ done
+
+ relink_command=
+ func_source "$wrapper"
+
+ outputname=
+ if test no = "$fast_install" && test -n "$relink_command"; then
+ $opt_dry_run || {
+ if $finalize; then
+ tmpdir=`func_mktempdir`
+ func_basename "$file$stripped_ext"
+ file=$func_basename_result
+ outputname=$tmpdir/$file
+ # Replace the output file specification.
+ relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
+
+ $opt_quiet || {
+ func_quote_for_expand "$relink_command"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ if eval "$relink_command"; then :
+ else
+ func_error "error: relink '$file' with the above command before installing it"
+ $opt_dry_run || ${RM}r "$tmpdir"
+ continue
+ fi
+ file=$outputname
+ else
+ func_warning "cannot relink '$file'"
+ fi
+ }
+ else
+ # Install the binary that we compiled earlier.
+ file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
+ fi
+ fi
+
+ # remove .exe since cygwin /usr/bin/install will append another
+ # one anyway
+ case $install_prog,$host in
+ */usr/bin/install*,*cygwin*)
+ case $file:$destfile in
+ *.exe:*.exe)
+ # this is ok
+ ;;
+ *.exe:*)
+ destfile=$destfile.exe
+ ;;
+ *:*.exe)
+ func_stripname '' '.exe' "$destfile"
+ destfile=$func_stripname_result
+ ;;
+ esac
+ ;;
+ esac
+ func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+ $opt_dry_run || if test -n "$outputname"; then
+ ${RM}r "$tmpdir"
+ fi
+ ;;
+ esac
+ done
+
+ for file in $staticlibs; do
+ func_basename "$file"
+ name=$func_basename_result
+
+ # Set up the ranlib parameters.
+ oldlib=$destdir/$name
+ func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+ tool_oldlib=$func_to_tool_file_result
+
+ func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+ if test -n "$stripme" && test -n "$old_striplib"; then
+ func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
+ fi
+
+ # Do each command in the postinstall commands.
+ func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+ done
+
+ test -n "$future_libdirs" && \
+ func_warning "remember to run '$progname --finish$future_libdirs'"
+
+ if test -n "$current_libdirs"; then
+ # Maybe just do a dry run.
+ $opt_dry_run && current_libdirs=" -n$current_libdirs"
+ exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
+ else
+ exit $EXIT_SUCCESS
+ fi
+}
+
+test install = "$opt_mode" && func_mode_install ${1+"$@"}
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+ $debug_cmd
+
+ my_outputname=$1
+ my_originator=$2
+ my_pic_p=${3-false}
+ my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'`
+ my_dlsyms=
+
+ if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+ if test -n "$NM" && test -n "$global_symbol_pipe"; then
+ my_dlsyms=${my_outputname}S.c
+ else
+ func_error "not configured to extract global symbols from dlpreopened files"
+ fi
+ fi
+
+ if test -n "$my_dlsyms"; then
+ case $my_dlsyms in
+ "") ;;
+ *.c)
+ # Discover the nlist of each of the dlfiles.
+ nlist=$output_objdir/$my_outputname.nm
+
+ func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+ # Parse the name list into a source file.
+ func_verbose "creating $output_objdir/$my_dlsyms"
+
+ $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
+#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
+#endif
+
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
+ relocations are performed -- see ld's documentation on pseudo-relocs. */
+# define LT_DLSYM_CONST
+#elif defined __osf__
+/* This system does not cope well with relocations in const data. */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
+#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
+
+/* External symbol declarations for the compiler. */\
+"
+
+ if test yes = "$dlself"; then
+ func_verbose "generating symbol list for '$output'"
+
+ $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+ # Add our own program objects to the symbol list.
+ progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ for progfile in $progfiles; do
+ func_to_tool_file "$progfile" func_convert_file_msys_to_w32
+ func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
+ $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
+ done
+
+ if test -n "$exclude_expsyms"; then
+ $opt_dry_run || {
+ eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ }
+ fi
+
+ if test -n "$export_symbols_regex"; then
+ $opt_dry_run || {
+ eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ }
+ fi
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ export_symbols=$output_objdir/$outputname.exp
+ $opt_dry_run || {
+ $RM $export_symbols
+ eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
+ }
+ else
+ $opt_dry_run || {
+ eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+ eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
+ }
+ fi
+ fi
+
+ for dlprefile in $dlprefiles; do
+ func_verbose "extracting global C symbols from '$dlprefile'"
+ func_basename "$dlprefile"
+ name=$func_basename_result
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ # if an import library, we need to obtain dlname
+ if func_win32_import_lib_p "$dlprefile"; then
+ func_tr_sh "$dlprefile"
+ eval "curr_lafile=\$libfile_$func_tr_sh_result"
+ dlprefile_dlbasename=
+ if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
+ # Use subshell, to avoid clobbering current variable values
+ dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
+ if test -n "$dlprefile_dlname"; then
+ func_basename "$dlprefile_dlname"
+ dlprefile_dlbasename=$func_basename_result
+ else
+ # no lafile. user explicitly requested -dlpreopen <import library>.
+ $sharedlib_from_linklib_cmd "$dlprefile"
+ dlprefile_dlbasename=$sharedlib_from_linklib_result
+ fi
+ fi
+ $opt_dry_run || {
+ if test -n "$dlprefile_dlbasename"; then
+ eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
+ else
+ func_warning "Could not compute DLL name from $name"
+ eval '$ECHO ": $name " >> "$nlist"'
+ fi
+ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
+ $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
+ }
+ else # not an import lib
+ $opt_dry_run || {
+ eval '$ECHO ": $name " >> "$nlist"'
+ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+ }
+ fi
+ ;;
+ *)
+ $opt_dry_run || {
+ eval '$ECHO ": $name " >> "$nlist"'
+ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+ }
+ ;;
+ esac
+ done
+
+ $opt_dry_run || {
+ # Make sure we have at least an empty file.
+ test -f "$nlist" || : > "$nlist"
+
+ if test -n "$exclude_expsyms"; then
+ $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+ $MV "$nlist"T "$nlist"
+ fi
+
+ # Try sorting and uniquifying the output.
+ if $GREP -v "^: " < "$nlist" |
+ if sort -k 3 </dev/null >/dev/null 2>&1; then
+ sort -k 3
+ else
+ sort +2
+ fi |
+ uniq > "$nlist"S; then
+ :
+ else
+ $GREP -v "^: " < "$nlist" > "$nlist"S
+ fi
+
+ if test -f "$nlist"S; then
+ eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+ else
+ echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
+ fi
+
+ func_show_eval '$RM "${nlist}I"'
+ if test -n "$global_symbol_to_import"; then
+ eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
+ fi
+
+ echo >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols. */
+typedef struct {
+ const char *name;
+ void *address;
+} lt_dlsymlist;
+extern LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];\
+"
+
+ if test -s "$nlist"I; then
+ echo >> "$output_objdir/$my_dlsyms" "\
+static void lt_syminit(void)
+{
+ LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
+ for (; symbol->name; ++symbol)
+ {"
+ $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
+ echo >> "$output_objdir/$my_dlsyms" "\
+ }
+}"
+ fi
+ echo >> "$output_objdir/$my_dlsyms" "\
+LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{ {\"$my_originator\", (void *) 0},"
+
+ if test -s "$nlist"I; then
+ echo >> "$output_objdir/$my_dlsyms" "\
+ {\"@INIT@\", (void *) &lt_syminit},"
+ fi
+
+ case $need_lib_prefix in
+ no)
+ eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+ ;;
+ *)
+ eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+ ;;
+ esac
+ echo >> "$output_objdir/$my_dlsyms" "\
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+ } # !$opt_dry_run
+
+ pic_flag_for_symtable=
+ case "$compile_command " in
+ *" -static "*) ;;
+ *)
+ case $host in
+ # compiling the symbol table file with pic_flag works around
+ # a FreeBSD bug that causes programs to crash when -lm is
+ # linked before any other PIC object. But we must not use
+ # pic_flag when linking with -static. The problem exists in
+ # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+ *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+ pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+ *-*-hpux*)
+ pic_flag_for_symtable=" $pic_flag" ;;
+ *)
+ $my_pic_p && pic_flag_for_symtable=" $pic_flag"
+ ;;
+ esac
+ ;;
+ esac
+ symtab_cflags=
+ for arg in $LTCFLAGS; do
+ case $arg in
+ -pie | -fpie | -fPIE) ;;
+ *) func_append symtab_cflags " $arg" ;;
+ esac
+ done
+
+ # Now compile the dynamic symbol file.
+ func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+ # Clean up the generated files.
+ func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
+
+ # Transform the symbol file into the correct name.
+ symfileobj=$output_objdir/${my_outputname}S.$objext
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ if test -f "$output_objdir/$my_outputname.def"; then
+ compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ else
+ compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ fi
+ ;;
+ *)
+ compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ ;;
+ esac
+ ;;
+ *)
+ func_fatal_error "unknown suffix for '$my_dlsyms'"
+ ;;
+ esac
+ else
+ # We keep going just in case the user didn't refer to
+ # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
+ # really was required.
+
+ # Nullify the symbol file.
+ compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
+ fi
+}
+
+# func_cygming_gnu_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is a GNU/binutils-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_gnu_implib_p ()
+{
+ $debug_cmd
+
+ func_to_tool_file "$1" func_convert_file_msys_to_w32
+ func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
+ test -n "$func_cygming_gnu_implib_tmp"
+}
+
+# func_cygming_ms_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is an MS-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_ms_implib_p ()
+{
+ $debug_cmd
+
+ func_to_tool_file "$1" func_convert_file_msys_to_w32
+ func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
+ test -n "$func_cygming_ms_implib_tmp"
+}
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+# Despite the name, also deal with 64 bit binaries.
+func_win32_libid ()
+{
+ $debug_cmd
+
+ win32_libid_type=unknown
+ win32_fileres=`file -L $1 2>/dev/null`
+ case $win32_fileres in
+ *ar\ archive\ import\ library*) # definitely import
+ win32_libid_type="x86 archive import"
+ ;;
+ *ar\ archive*) # could be an import, or static
+ # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
+ if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+ $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
+ case $nm_interface in
+ "MS dumpbin")
+ if func_cygming_ms_implib_p "$1" ||
+ func_cygming_gnu_implib_p "$1"
+ then
+ win32_nmres=import
+ else
+ win32_nmres=
+ fi
+ ;;
+ *)
+ func_to_tool_file "$1" func_convert_file_msys_to_w32
+ win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
+ $SED -n -e '
+ 1,100{
+ / I /{
+ s|.*|import|
+ p
+ q
+ }
+ }'`
+ ;;
+ esac
+ case $win32_nmres in
+ import*) win32_libid_type="x86 archive import";;
+ *) win32_libid_type="x86 archive static";;
+ esac
+ fi
+ ;;
+ *DLL*)
+ win32_libid_type="x86 DLL"
+ ;;
+ *executable*) # but shell scripts are "executable" too...
+ case $win32_fileres in
+ *MS\ Windows\ PE\ Intel*)
+ win32_libid_type="x86 DLL"
+ ;;
+ esac
+ ;;
+ esac
+ $ECHO "$win32_libid_type"
+}
+
+# func_cygming_dll_for_implib ARG
+#
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+# Invoked by eval'ing the libtool variable
+# $sharedlib_from_linklib_cmd
+# Result is available in the variable
+# $sharedlib_from_linklib_result
+func_cygming_dll_for_implib ()
+{
+ $debug_cmd
+
+ sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
+}
+
+# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
+#
+# The is the core of a fallback implementation of a
+# platform-specific function to extract the name of the
+# DLL associated with the specified import library LIBNAME.
+#
+# SECTION_NAME is either .idata$6 or .idata$7, depending
+# on the platform and compiler that created the implib.
+#
+# Echos the name of the DLL associated with the
+# specified import library.
+func_cygming_dll_for_implib_fallback_core ()
+{
+ $debug_cmd
+
+ match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
+ $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
+ $SED '/^Contents of section '"$match_literal"':/{
+ # Place marker at beginning of archive member dllname section
+ s/.*/====MARK====/
+ p
+ d
+ }
+ # These lines can sometimes be longer than 43 characters, but
+ # are always uninteresting
+ /:[ ]*file format pe[i]\{,1\}-/d
+ /^In archive [^:]*:/d
+ # Ensure marker is printed
+ /^====MARK====/p
+ # Remove all lines with less than 43 characters
+ /^.\{43\}/!d
+ # From remaining lines, remove first 43 characters
+ s/^.\{43\}//' |
+ $SED -n '
+ # Join marker and all lines until next marker into a single line
+ /^====MARK====/ b para
+ H
+ $ b para
+ b
+ :para
+ x
+ s/\n//g
+ # Remove the marker
+ s/^====MARK====//
+ # Remove trailing dots and whitespace
+ s/[\. \t]*$//
+ # Print
+ /./p' |
+ # we now have a list, one entry per line, of the stringified
+ # contents of the appropriate section of all members of the
+ # archive that possess that section. Heuristic: eliminate
+ # all those that have a first or second character that is
+ # a '.' (that is, objdump's representation of an unprintable
+ # character.) This should work for all archives with less than
+ # 0x302f exports -- but will fail for DLLs whose name actually
+ # begins with a literal '.' or a single character followed by
+ # a '.'.
+ #
+ # Of those that remain, print the first one.
+ $SED -e '/^\./d;/^.\./d;q'
+}
+
+# func_cygming_dll_for_implib_fallback ARG
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+#
+# This fallback implementation is for use when $DLLTOOL
+# does not support the --identify-strict option.
+# Invoked by eval'ing the libtool variable
+# $sharedlib_from_linklib_cmd
+# Result is available in the variable
+# $sharedlib_from_linklib_result
+func_cygming_dll_for_implib_fallback ()
+{
+ $debug_cmd
+
+ if func_cygming_gnu_implib_p "$1"; then
+ # binutils import library
+ sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
+ elif func_cygming_ms_implib_p "$1"; then
+ # ms-generated import library
+ sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
+ else
+ # unknown
+ sharedlib_from_linklib_result=
+ fi
+}
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+ $debug_cmd
+
+ f_ex_an_ar_dir=$1; shift
+ f_ex_an_ar_oldlib=$1
+ if test yes = "$lock_old_archive_extraction"; then
+ lockfile=$f_ex_an_ar_oldlib.lock
+ until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+ func_echo "Waiting for $lockfile to be removed"
+ sleep 2
+ done
+ fi
+ func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
+ 'stat=$?; rm -f "$lockfile"; exit $stat'
+ if test yes = "$lock_old_archive_extraction"; then
+ $opt_dry_run || rm -f "$lockfile"
+ fi
+ if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+ fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+ $debug_cmd
+
+ my_gentop=$1; shift
+ my_oldlibs=${1+"$@"}
+ my_oldobjs=
+ my_xlib=
+ my_xabs=
+ my_xdir=
+
+ for my_xlib in $my_oldlibs; do
+ # Extract the objects.
+ case $my_xlib in
+ [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
+ *) my_xabs=`pwd`"/$my_xlib" ;;
+ esac
+ func_basename "$my_xlib"
+ my_xlib=$func_basename_result
+ my_xlib_u=$my_xlib
+ while :; do
+ case " $extracted_archives " in
+ *" $my_xlib_u "*)
+ func_arith $extracted_serial + 1
+ extracted_serial=$func_arith_result
+ my_xlib_u=lt$extracted_serial-$my_xlib ;;
+ *) break ;;
+ esac
+ done
+ extracted_archives="$extracted_archives $my_xlib_u"
+ my_xdir=$my_gentop/$my_xlib_u
+
+ func_mkdir_p "$my_xdir"
+
+ case $host in
+ *-darwin*)
+ func_verbose "Extracting $my_xabs"
+ # Do not bother doing anything if just a dry run
+ $opt_dry_run || {
+ darwin_orig_dir=`pwd`
+ cd $my_xdir || exit $?
+ darwin_archive=$my_xabs
+ darwin_curdir=`pwd`
+ func_basename "$darwin_archive"
+ darwin_base_archive=$func_basename_result
+ darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+ if test -n "$darwin_arches"; then
+ darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+ darwin_arch=
+ func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
+ for darwin_arch in $darwin_arches; do
+ func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch"
+ $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive"
+ cd "unfat-$$/$darwin_base_archive-$darwin_arch"
+ func_extract_an_archive "`pwd`" "$darwin_base_archive"
+ cd "$darwin_curdir"
+ $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
+ done # $darwin_arches
+ ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+ darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
+ darwin_file=
+ darwin_files=
+ for darwin_file in $darwin_filelist; do
+ darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
+ $LIPO -create -output "$darwin_file" $darwin_files
+ done # $darwin_filelist
+ $RM -rf unfat-$$
+ cd "$darwin_orig_dir"
+ else
+ cd $darwin_orig_dir
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ fi # $darwin_arches
+ } # !$opt_dry_run
+ ;;
+ *)
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ ;;
+ esac
+ my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
+ done
+
+ func_extract_archives_result=$my_oldobjs
+}
+
+
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable. Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
+#
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take. If 'yes', then the emitted script
+# will assume that the directory where it is stored is
+# the $objdir directory. This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+ func_emit_wrapper_arg1=${1-no}
+
+ $ECHO "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='$sed_quote_subst'
+
+# Be Bourne compatible
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+ # install mode needs the following variables:
+ generated_by_libtool_version='$macro_version'
+ notinst_deplibs='$notinst_deplibs'
+else
+ # When we are sourced in execute mode, \$file and \$ECHO are already set.
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ file=\"\$0\""
+
+ qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
+ $ECHO "\
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+ ECHO=\"$qECHO\"
+ fi
+
+# Very basic option parsing. These options are (a) specific to
+# the libtool wrapper, (b) are identical between the wrapper
+# /script/ and the wrapper /executable/ that is used only on
+# windows platforms, and (c) all begin with the string "--lt-"
+# (application programs are unlikely to have options that match
+# this pattern).
+#
+# There are only two supported options: --lt-debug and
+# --lt-dump-script. There is, deliberately, no --lt-help.
+#
+# The first argument to this parsing function should be the
+# script's $0 value, followed by "$@".
+lt_option_debug=
+func_parse_lt_options ()
+{
+ lt_script_arg0=\$0
+ shift
+ for lt_opt
+ do
+ case \"\$lt_opt\" in
+ --lt-debug) lt_option_debug=1 ;;
+ --lt-dump-script)
+ lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
+ test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
+ lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
+ cat \"\$lt_dump_D/\$lt_dump_F\"
+ exit 0
+ ;;
+ --lt-*)
+ \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
+ exit 1
+ ;;
+ esac
+ done
+
+ # Print the debug banner immediately:
+ if test -n \"\$lt_option_debug\"; then
+ echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
+ fi
+}
+
+# Used when --lt-debug. Prints its arguments to stdout
+# (redirection is the responsibility of the caller)
+func_lt_dump_args ()
+{
+ lt_dump_args_N=1;
+ for lt_arg
+ do
+ \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
+ lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
+ done
+}
+
+# Core function for launching the target application
+func_exec_program_core ()
+{
+"
+ case $host in
+ # Backslashes separate directories on plain windows
+ *-*-mingw | *-*-os2* | *-cegcc*)
+ $ECHO "\
+ if test -n \"\$lt_option_debug\"; then
+ \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
+ func_lt_dump_args \${1+\"\$@\"} 1>&2
+ fi
+ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+ ;;
+
+ *)
+ $ECHO "\
+ if test -n \"\$lt_option_debug\"; then
+ \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
+ func_lt_dump_args \${1+\"\$@\"} 1>&2
+ fi
+ exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+ ;;
+ esac
+ $ECHO "\
+ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+ exit 1
+}
+
+# A function to encapsulate launching the target application
+# Strips options in the --lt-* namespace from \$@ and
+# launches target application with the remaining arguments.
+func_exec_program ()
+{
+ case \" \$* \" in
+ *\\ --lt-*)
+ for lt_wr_arg
+ do
+ case \$lt_wr_arg in
+ --lt-*) ;;
+ *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
+ esac
+ shift
+ done ;;
+ esac
+ func_exec_program_core \${1+\"\$@\"}
+}
+
+ # Parse options
+ func_parse_lt_options \"\$0\" \${1+\"\$@\"}
+
+ # Find the directory that this script lives in.
+ thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
+ test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+ # Follow symbolic links until we get to the real thisdir.
+ file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
+ while test -n \"\$file\"; do
+ destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
+
+ # If there was a directory component, then change thisdir.
+ if test \"x\$destdir\" != \"x\$file\"; then
+ case \"\$destdir\" in
+ [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+ *) thisdir=\"\$thisdir/\$destdir\" ;;
+ esac
+ fi
+
+ file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
+ file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
+ done
+
+ # Usually 'no', except on cygwin/mingw when embedded into
+ # the cwrapper.
+ WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
+ if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+ # special case for '.'
+ if test \"\$thisdir\" = \".\"; then
+ thisdir=\`pwd\`
+ fi
+ # remove .libs from thisdir
+ case \"\$thisdir\" in
+ *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
+ $objdir ) thisdir=. ;;
+ esac
+ fi
+
+ # Try to get the absolute directory name.
+ absdir=\`cd \"\$thisdir\" && pwd\`
+ test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+ if test yes = "$fast_install"; then
+ $ECHO "\
+ program=lt-'$outputname'$exeext
+ progdir=\"\$thisdir/$objdir\"
+
+ if test ! -f \"\$progdir/\$program\" ||
+ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
+ test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+ file=\"\$\$-\$program\"
+
+ if test ! -d \"\$progdir\"; then
+ $MKDIR \"\$progdir\"
+ else
+ $RM \"\$progdir/\$file\"
+ fi"
+
+ $ECHO "\
+
+ # relink executable if necessary
+ if test -n \"\$relink_command\"; then
+ if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+ else
+ \$ECHO \"\$relink_command_output\" >&2
+ $RM \"\$progdir/\$file\"
+ exit 1
+ fi
+ fi
+
+ $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+ { $RM \"\$progdir/\$program\";
+ $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+ $RM \"\$progdir/\$file\"
+ fi"
+ else
+ $ECHO "\
+ program='$outputname'
+ progdir=\"\$thisdir/$objdir\"
+"
+ fi
+
+ $ECHO "\
+
+ if test -f \"\$progdir/\$program\"; then"
+
+ # fixup the dll searchpath if we need to.
+ #
+ # Fix the DLL searchpath if we need to. Do this before prepending
+ # to shlibpath, because on Windows, both are PATH and uninstalled
+ # libraries must come first.
+ if test -n "$dllsearchpath"; then
+ $ECHO "\
+ # Add the dll search path components to the executable PATH
+ PATH=$dllsearchpath:\$PATH
+"
+ fi
+
+ # Export our shlibpath_var if we have one.
+ if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ $ECHO "\
+ # Add our own library path to $shlibpath_var
+ $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+ # Some systems cannot cope with colon-terminated $shlibpath_var
+ # The second colon is a workaround for a bug in BeOS R4 sed
+ $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
+
+ export $shlibpath_var
+"
+ fi
+
+ $ECHO "\
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ # Run the actual program with our arguments.
+ func_exec_program \${1+\"\$@\"}
+ fi
+ else
+ # The program doesn't exist.
+ \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2
+ \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
+ \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+ exit 1
+ fi
+fi\
+"
+}
+
+
+# func_emit_cwrapperexe_src
+# emit the source code for a wrapper executable on stdout
+# Must ONLY be called from within func_mode_link because
+# it depends on a number of variable set therein.
+func_emit_cwrapperexe_src ()
+{
+ cat <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+ Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+
+ The $output program cannot be directly executed until all the libtool
+ libraries that it depends on are installed.
+
+ This wrapper executable should never be moved out of the build directory.
+ If it is, it will not operate correctly.
+*/
+EOF
+ cat <<"EOF"
+#ifdef _MSC_VER
+# define _CRT_SECURE_NO_DEPRECATE 1
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+#else
+# include <unistd.h>
+# include <stdint.h>
+# ifdef __CYGWIN__
+# include <io.h>
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
+
+/* declarations of non-ANSI functions */
+#if defined __MINGW32__
+# ifdef __STRICT_ANSI__
+int _putenv (const char *);
+# endif
+#elif defined __CYGWIN__
+# ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+int putenv (char *);
+int setenv (const char *, const char *, int);
+# endif
+/* #elif defined other_platform || defined ... */
+#endif
+
+/* portability defines, excluding path handling macros */
+#if defined _MSC_VER
+# define setmode _setmode
+# define stat _stat
+# define chmod _chmod
+# define getcwd _getcwd
+# define putenv _putenv
+# define S_IXUSR _S_IEXEC
+#elif defined __MINGW32__
+# define setmode _setmode
+# define stat _stat
+# define chmod _chmod
+# define getcwd _getcwd
+# define putenv _putenv
+#elif defined __CYGWIN__
+# define HAVE_SETENV
+# define FOPEN_WB "wb"
+/* #elif defined other platforms ... */
+#endif
+
+#if defined PATH_MAX
+# define LT_PATHMAX PATH_MAX
+#elif defined MAXPATHLEN
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+
+/* path handling portability macros */
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
+ defined __OS2__
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# define FOPEN_WB "wb"
+# ifndef DIR_SEPARATOR_2
+# define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+# define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#ifndef FOPEN_WB
+# define FOPEN_WB "w"
+#endif
+#ifndef _O_BINARY
+# define _O_BINARY 0
+#endif
+
+#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+ if (stale) { free (stale); stale = 0; } \
+} while (0)
+
+#if defined LT_DEBUGWRAPPER
+static int lt_debug = 1;
+#else
+static int lt_debug = 0;
+#endif
+
+const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
+
+void *xmalloc (size_t num);
+char *xstrdup (const char *string);
+const char *base_name (const char *name);
+char *find_executable (const char *wrapper);
+char *chase_symlinks (const char *pathspec);
+int make_executable (const char *path);
+int check_executable (const char *path);
+char *strendzap (char *str, const char *pat);
+void lt_debugprintf (const char *file, int line, const char *fmt, ...);
+void lt_fatal (const char *file, int line, const char *message, ...);
+static const char *nonnull (const char *s);
+static const char *nonempty (const char *s);
+void lt_setenv (const char *name, const char *value);
+char *lt_extend_str (const char *orig_value, const char *add, int to_end);
+void lt_update_exe_path (const char *name, const char *value);
+void lt_update_lib_path (const char *name, const char *value);
+char **prepare_spawn (char **argv);
+void lt_dump_script (FILE *f);
+EOF
+
+ cat <<EOF
+#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
+# define externally_visible volatile
+#else
+# define externally_visible __attribute__((externally_visible)) volatile
+#endif
+externally_visible const char * MAGIC_EXE = "$magic_exe";
+const char * LIB_PATH_VARNAME = "$shlibpath_var";
+EOF
+
+ if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ func_to_host_path "$temp_rpath"
+ cat <<EOF
+const char * LIB_PATH_VALUE = "$func_to_host_path_result";
+EOF
+ else
+ cat <<"EOF"
+const char * LIB_PATH_VALUE = "";
+EOF
+ fi
+
+ if test -n "$dllsearchpath"; then
+ func_to_host_path "$dllsearchpath:"
+ cat <<EOF
+const char * EXE_PATH_VARNAME = "PATH";
+const char * EXE_PATH_VALUE = "$func_to_host_path_result";
+EOF
+ else
+ cat <<"EOF"
+const char * EXE_PATH_VARNAME = "";
+const char * EXE_PATH_VALUE = "";
+EOF
+ fi
+
+ if test yes = "$fast_install"; then
+ cat <<EOF
+const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
+EOF
+ else
+ cat <<EOF
+const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
+EOF
+ fi
+
+
+ cat <<"EOF"
+
+#define LTWRAPPER_OPTION_PREFIX "--lt-"
+
+static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
+static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script";
+static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug";
+
+int
+main (int argc, char *argv[])
+{
+ char **newargz;
+ int newargc;
+ char *tmp_pathspec;
+ char *actual_cwrapper_path;
+ char *actual_cwrapper_name;
+ char *target_name;
+ char *lt_argv_zero;
+ int rval = 127;
+
+ int i;
+
+ program_name = (char *) xstrdup (base_name (argv[0]));
+ newargz = XMALLOC (char *, (size_t) argc + 1);
+
+ /* very simple arg parsing; don't want to rely on getopt
+ * also, copy all non cwrapper options to newargz, except
+ * argz[0], which is handled differently
+ */
+ newargc=0;
+ for (i = 1; i < argc; i++)
+ {
+ if (STREQ (argv[i], dumpscript_opt))
+ {
+EOF
+ case $host in
+ *mingw* | *cygwin* )
+ # make stdout use "unix" line endings
+ echo " setmode(1,_O_BINARY);"
+ ;;
+ esac
+
+ cat <<"EOF"
+ lt_dump_script (stdout);
+ return 0;
+ }
+ if (STREQ (argv[i], debug_opt))
+ {
+ lt_debug = 1;
+ continue;
+ }
+ if (STREQ (argv[i], ltwrapper_option_prefix))
+ {
+ /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+ namespace, but it is not one of the ones we know about and
+ have already dealt with, above (inluding dump-script), then
+ report an error. Otherwise, targets might begin to believe
+ they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+ namespace. The first time any user complains about this, we'll
+ need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+ or a configure.ac-settable value.
+ */
+ lt_fatal (__FILE__, __LINE__,
+ "unrecognized %s option: '%s'",
+ ltwrapper_option_prefix, argv[i]);
+ }
+ /* otherwise ... */
+ newargz[++newargc] = xstrdup (argv[i]);
+ }
+ newargz[++newargc] = NULL;
+
+EOF
+ cat <<EOF
+ /* The GNU banner must be the first non-error debug message */
+ lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n");
+EOF
+ cat <<"EOF"
+ lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
+ lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
+
+ tmp_pathspec = find_executable (argv[0]);
+ if (tmp_pathspec == NULL)
+ lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) found exe (before symlink chase) at: %s\n",
+ tmp_pathspec);
+
+ actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) found exe (after symlink chase) at: %s\n",
+ actual_cwrapper_path);
+ XFREE (tmp_pathspec);
+
+ actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
+ strendzap (actual_cwrapper_path, actual_cwrapper_name);
+
+ /* wrapper name transforms */
+ strendzap (actual_cwrapper_name, ".exe");
+ tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
+ XFREE (actual_cwrapper_name);
+ actual_cwrapper_name = tmp_pathspec;
+ tmp_pathspec = 0;
+
+ /* target_name transforms -- use actual target program name; might have lt- prefix */
+ target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
+ strendzap (target_name, ".exe");
+ tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
+ XFREE (target_name);
+ target_name = tmp_pathspec;
+ tmp_pathspec = 0;
+
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) libtool target name: %s\n",
+ target_name);
+EOF
+
+ cat <<EOF
+ newargz[0] =
+ XMALLOC (char, (strlen (actual_cwrapper_path) +
+ strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
+ strcpy (newargz[0], actual_cwrapper_path);
+ strcat (newargz[0], "$objdir");
+ strcat (newargz[0], "/");
+EOF
+
+ cat <<"EOF"
+ /* stop here, and copy so we don't have to do this twice */
+ tmp_pathspec = xstrdup (newargz[0]);
+
+ /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
+ strcat (newargz[0], actual_cwrapper_name);
+
+ /* DO want the lt- prefix here if it exists, so use target_name */
+ lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
+ XFREE (tmp_pathspec);
+ tmp_pathspec = NULL;
+EOF
+
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+ {
+ char* p;
+ while ((p = strchr (newargz[0], '\\')) != NULL)
+ {
+ *p = '/';
+ }
+ while ((p = strchr (lt_argv_zero, '\\')) != NULL)
+ {
+ *p = '/';
+ }
+ }
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+ XFREE (target_name);
+ XFREE (actual_cwrapper_path);
+ XFREE (actual_cwrapper_name);
+
+ lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
+ lt_setenv ("DUALCASE", "1"); /* for MSK sh */
+ /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must
+ be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
+ because on Windows, both *_VARNAMEs are PATH but uninstalled
+ libraries must come first. */
+ lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+ lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+
+ lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
+ nonnull (lt_argv_zero));
+ for (i = 0; i < newargc; i++)
+ {
+ lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
+ i, nonnull (newargz[i]));
+ }
+
+EOF
+
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+ /* execv doesn't actually work on mingw as expected on unix */
+ newargz = prepare_spawn (newargz);
+ rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+ if (rval == -1)
+ {
+ /* failed to start process */
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) failed to launch target \"%s\": %s\n",
+ lt_argv_zero, nonnull (strerror (errno)));
+ return 127;
+ }
+ return rval;
+EOF
+ ;;
+ *)
+ cat <<"EOF"
+ execv (lt_argv_zero, newargz);
+ return rval; /* =127, but avoids unused variable warning */
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+ void *p = (void *) malloc (num);
+ if (!p)
+ lt_fatal (__FILE__, __LINE__, "memory exhausted");
+
+ return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+ return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+ string) : NULL;
+}
+
+const char *
+base_name (const char *name)
+{
+ const char *base;
+
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
+ /* Skip over the disk name in MSDOS pathnames. */
+ if (isalpha ((unsigned char) name[0]) && name[1] == ':')
+ name += 2;
+#endif
+
+ for (base = name; *name; name++)
+ if (IS_DIR_SEPARATOR (*name))
+ base = name + 1;
+ return base;
+}
+
+int
+check_executable (const char *path)
+{
+ struct stat st;
+
+ lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
+ nonempty (path));
+ if ((!path) || (!*path))
+ return 0;
+
+ if ((stat (path, &st) >= 0)
+ && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+ return 1;
+ else
+ return 0;
+}
+
+int
+make_executable (const char *path)
+{
+ int rval = 0;
+ struct stat st;
+
+ lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
+ nonempty (path));
+ if ((!path) || (!*path))
+ return 0;
+
+ if (stat (path, &st) >= 0)
+ {
+ rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+ }
+ return rval;
+}
+
+/* Searches for the full path of the wrapper. Returns
+ newly allocated full path name if found, NULL otherwise
+ Does not chase symlinks, even on platforms that support them.
+*/
+char *
+find_executable (const char *wrapper)
+{
+ int has_slash = 0;
+ const char *p;
+ const char *p_next;
+ /* static buffer for getcwd */
+ char tmp[LT_PATHMAX + 1];
+ size_t tmp_len;
+ char *concat_name;
+
+ lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
+ nonempty (wrapper));
+
+ if ((wrapper == NULL) || (*wrapper == '\0'))
+ return NULL;
+
+ /* Absolute path? */
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
+ if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
+ {
+ concat_name = xstrdup (wrapper);
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+ else
+ {
+#endif
+ if (IS_DIR_SEPARATOR (wrapper[0]))
+ {
+ concat_name = xstrdup (wrapper);
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
+ }
+#endif
+
+ for (p = wrapper; *p; p++)
+ if (*p == '/')
+ {
+ has_slash = 1;
+ break;
+ }
+ if (!has_slash)
+ {
+ /* no slashes; search PATH */
+ const char *path = getenv ("PATH");
+ if (path != NULL)
+ {
+ for (p = path; *p; p = p_next)
+ {
+ const char *q;
+ size_t p_len;
+ for (q = p; *q; q++)
+ if (IS_PATH_SEPARATOR (*q))
+ break;
+ p_len = (size_t) (q - p);
+ p_next = (*q == '\0' ? q : q + 1);
+ if (p_len == 0)
+ {
+ /* empty path: current directory */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+ nonnull (strerror (errno)));
+ tmp_len = strlen (tmp);
+ concat_name =
+ XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, tmp, tmp_len);
+ concat_name[tmp_len] = '/';
+ strcpy (concat_name + tmp_len + 1, wrapper);
+ }
+ else
+ {
+ concat_name =
+ XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, p, p_len);
+ concat_name[p_len] = '/';
+ strcpy (concat_name + p_len + 1, wrapper);
+ }
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+ }
+ /* not found in PATH; assume curdir */
+ }
+ /* Relative path | not found in path: prepend cwd */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+ nonnull (strerror (errno)));
+ tmp_len = strlen (tmp);
+ concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, tmp, tmp_len);
+ concat_name[tmp_len] = '/';
+ strcpy (concat_name + tmp_len + 1, wrapper);
+
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ return NULL;
+}
+
+char *
+chase_symlinks (const char *pathspec)
+{
+#ifndef S_ISLNK
+ return xstrdup (pathspec);
+#else
+ char buf[LT_PATHMAX];
+ struct stat s;
+ char *tmp_pathspec = xstrdup (pathspec);
+ char *p;
+ int has_symlinks = 0;
+ while (strlen (tmp_pathspec) && !has_symlinks)
+ {
+ lt_debugprintf (__FILE__, __LINE__,
+ "checking path component for symlinks: %s\n",
+ tmp_pathspec);
+ if (lstat (tmp_pathspec, &s) == 0)
+ {
+ if (S_ISLNK (s.st_mode) != 0)
+ {
+ has_symlinks = 1;
+ break;
+ }
+
+ /* search backwards for last DIR_SEPARATOR */
+ p = tmp_pathspec + strlen (tmp_pathspec) - 1;
+ while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+ p--;
+ if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+ {
+ /* no more DIR_SEPARATORS left */
+ break;
+ }
+ *p = '\0';
+ }
+ else
+ {
+ lt_fatal (__FILE__, __LINE__,
+ "error accessing file \"%s\": %s",
+ tmp_pathspec, nonnull (strerror (errno)));
+ }
+ }
+ XFREE (tmp_pathspec);
+
+ if (!has_symlinks)
+ {
+ return xstrdup (pathspec);
+ }
+
+ tmp_pathspec = realpath (pathspec, buf);
+ if (tmp_pathspec == 0)
+ {
+ lt_fatal (__FILE__, __LINE__,
+ "could not follow symlinks for %s", pathspec);
+ }
+ return xstrdup (tmp_pathspec);
+#endif
+}
+
+char *
+strendzap (char *str, const char *pat)
+{
+ size_t len, patlen;
+
+ assert (str != NULL);
+ assert (pat != NULL);
+
+ len = strlen (str);
+ patlen = strlen (pat);
+
+ if (patlen <= len)
+ {
+ str += len - patlen;
+ if (STREQ (str, pat))
+ *str = '\0';
+ }
+ return str;
+}
+
+void
+lt_debugprintf (const char *file, int line, const char *fmt, ...)
+{
+ va_list args;
+ if (lt_debug)
+ {
+ (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
+ va_start (args, fmt);
+ (void) vfprintf (stderr, fmt, args);
+ va_end (args);
+ }
+}
+
+static void
+lt_error_core (int exit_status, const char *file,
+ int line, const char *mode,
+ const char *message, va_list ap)
+{
+ fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
+ vfprintf (stderr, message, ap);
+ fprintf (stderr, ".\n");
+
+ if (exit_status >= 0)
+ exit (exit_status);
+}
+
+void
+lt_fatal (const char *file, int line, const char *message, ...)
+{
+ va_list ap;
+ va_start (ap, message);
+ lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
+ va_end (ap);
+}
+
+static const char *
+nonnull (const char *s)
+{
+ return s ? s : "(null)";
+}
+
+static const char *
+nonempty (const char *s)
+{
+ return (s && !*s) ? "(empty)" : nonnull (s);
+}
+
+void
+lt_setenv (const char *name, const char *value)
+{
+ lt_debugprintf (__FILE__, __LINE__,
+ "(lt_setenv) setting '%s' to '%s'\n",
+ nonnull (name), nonnull (value));
+ {
+#ifdef HAVE_SETENV
+ /* always make a copy, for consistency with !HAVE_SETENV */
+ char *str = xstrdup (value);
+ setenv (name, str, 1);
+#else
+ size_t len = strlen (name) + 1 + strlen (value) + 1;
+ char *str = XMALLOC (char, len);
+ sprintf (str, "%s=%s", name, value);
+ if (putenv (str) != EXIT_SUCCESS)
+ {
+ XFREE (str);
+ }
+#endif
+ }
+}
+
+char *
+lt_extend_str (const char *orig_value, const char *add, int to_end)
+{
+ char *new_value;
+ if (orig_value && *orig_value)
+ {
+ size_t orig_value_len = strlen (orig_value);
+ size_t add_len = strlen (add);
+ new_value = XMALLOC (char, add_len + orig_value_len + 1);
+ if (to_end)
+ {
+ strcpy (new_value, orig_value);
+ strcpy (new_value + orig_value_len, add);
+ }
+ else
+ {
+ strcpy (new_value, add);
+ strcpy (new_value + add_len, orig_value);
+ }
+ }
+ else
+ {
+ new_value = xstrdup (add);
+ }
+ return new_value;
+}
+
+void
+lt_update_exe_path (const char *name, const char *value)
+{
+ lt_debugprintf (__FILE__, __LINE__,
+ "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+ nonnull (name), nonnull (value));
+
+ if (name && *name && value && *value)
+ {
+ char *new_value = lt_extend_str (getenv (name), value, 0);
+ /* some systems can't cope with a ':'-terminated path #' */
+ size_t len = strlen (new_value);
+ while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
+ {
+ new_value[--len] = '\0';
+ }
+ lt_setenv (name, new_value);
+ XFREE (new_value);
+ }
+}
+
+void
+lt_update_lib_path (const char *name, const char *value)
+{
+ lt_debugprintf (__FILE__, __LINE__,
+ "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+ nonnull (name), nonnull (value));
+
+ if (name && *name && value && *value)
+ {
+ char *new_value = lt_extend_str (getenv (name), value, 0);
+ lt_setenv (name, new_value);
+ XFREE (new_value);
+ }
+}
+
+EOF
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+
+/* Prepares an argument vector before calling spawn().
+ Note that spawn() does not by itself call the command interpreter
+ (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
+ ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+ GetVersionEx(&v);
+ v.dwPlatformId == VER_PLATFORM_WIN32_NT;
+ }) ? "cmd.exe" : "command.com").
+ Instead it simply concatenates the arguments, separated by ' ', and calls
+ CreateProcess(). We must quote the arguments since Win32 CreateProcess()
+ interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
+ special way:
+ - Space and tab are interpreted as delimiters. They are not treated as
+ delimiters if they are surrounded by double quotes: "...".
+ - Unescaped double quotes are removed from the input. Their only effect is
+ that within double quotes, space and tab are treated like normal
+ characters.
+ - Backslashes not followed by double quotes are not special.
+ - But 2*n+1 backslashes followed by a double quote become
+ n backslashes followed by a double quote (n >= 0):
+ \" -> "
+ \\\" -> \"
+ \\\\\" -> \\"
+ */
+#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+char **
+prepare_spawn (char **argv)
+{
+ size_t argc;
+ char **new_argv;
+ size_t i;
+
+ /* Count number of arguments. */
+ for (argc = 0; argv[argc] != NULL; argc++)
+ ;
+
+ /* Allocate new argument vector. */
+ new_argv = XMALLOC (char *, argc + 1);
+
+ /* Put quoted arguments into the new argument vector. */
+ for (i = 0; i < argc; i++)
+ {
+ const char *string = argv[i];
+
+ if (string[0] == '\0')
+ new_argv[i] = xstrdup ("\"\"");
+ else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
+ {
+ int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
+ size_t length;
+ unsigned int backslashes;
+ const char *s;
+ char *quoted_string;
+ char *p;
+
+ length = 0;
+ backslashes = 0;
+ if (quote_around)
+ length++;
+ for (s = string; *s != '\0'; s++)
+ {
+ char c = *s;
+ if (c == '"')
+ length += backslashes + 1;
+ length++;
+ if (c == '\\')
+ backslashes++;
+ else
+ backslashes = 0;
+ }
+ if (quote_around)
+ length += backslashes + 1;
+
+ quoted_string = XMALLOC (char, length + 1);
+
+ p = quoted_string;
+ backslashes = 0;
+ if (quote_around)
+ *p++ = '"';
+ for (s = string; *s != '\0'; s++)
+ {
+ char c = *s;
+ if (c == '"')
+ {
+ unsigned int j;
+ for (j = backslashes + 1; j > 0; j--)
+ *p++ = '\\';
+ }
+ *p++ = c;
+ if (c == '\\')
+ backslashes++;
+ else
+ backslashes = 0;
+ }
+ if (quote_around)
+ {
+ unsigned int j;
+ for (j = backslashes; j > 0; j--)
+ *p++ = '\\';
+ *p++ = '"';
+ }
+ *p = '\0';
+
+ new_argv[i] = quoted_string;
+ }
+ else
+ new_argv[i] = (char *) string;
+ }
+ new_argv[argc] = NULL;
+
+ return new_argv;
+}
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+void lt_dump_script (FILE* f)
+{
+EOF
+ func_emit_wrapper yes |
+ $SED -n -e '
+s/^\(.\{79\}\)\(..*\)/\1\
+\2/
+h
+s/\([\\"]\)/\\\1/g
+s/$/\\n/
+s/\([^\n]*\).*/ fputs ("\1", f);/p
+g
+D'
+ cat <<"EOF"
+}
+EOF
+}
+# end: func_emit_cwrapperexe_src
+
+# func_win32_import_lib_p ARG
+# True if ARG is an import lib, as indicated by $file_magic_cmd
+func_win32_import_lib_p ()
+{
+ $debug_cmd
+
+ case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
+ *import*) : ;;
+ *) false ;;
+ esac
+}
+
+# func_suncc_cstd_abi
+# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
+# Several compiler flags select an ABI that is incompatible with the
+# Cstd library. Avoid specifying it if any are in CXXFLAGS.
+func_suncc_cstd_abi ()
+{
+ $debug_cmd
+
+ case " $compile_command " in
+ *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
+ suncc_use_cstd_abi=no
+ ;;
+ *)
+ suncc_use_cstd_abi=yes
+ ;;
+ esac
+}
+
+# func_mode_link arg...
+func_mode_link ()
+{
+ $debug_cmd
+
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ # It is impossible to link a dll without this setting, and
+ # we shouldn't force the makefile maintainer to figure out
+ # what system we are compiling for in order to pass an extra
+ # flag for every libtool invocation.
+ # allow_undefined=no
+
+ # FIXME: Unfortunately, there are problems with the above when trying
+ # to make a dll that has undefined symbols, in which case not
+ # even a static library is built. For now, we need to specify
+ # -no-undefined on the libtool link line when we can be certain
+ # that all symbols are satisfied, otherwise we get a static library.
+ allow_undefined=yes
+ ;;
+ *)
+ allow_undefined=yes
+ ;;
+ esac
+ libtool_args=$nonopt
+ base_compile="$nonopt $@"
+ compile_command=$nonopt
+ finalize_command=$nonopt
+
+ compile_rpath=
+ finalize_rpath=
+ compile_shlibpath=
+ finalize_shlibpath=
+ convenience=
+ old_convenience=
+ deplibs=
+ old_deplibs=
+ compiler_flags=
+ linker_flags=
+ dllsearchpath=
+ lib_search_path=`pwd`
+ inst_prefix_dir=
+ new_inherited_linker_flags=
+
+ avoid_version=no
+ bindir=
+ dlfiles=
+ dlprefiles=
+ dlself=no
+ export_dynamic=no
+ export_symbols=
+ export_symbols_regex=
+ generated=
+ libobjs=
+ ltlibs=
+ module=no
+ no_install=no
+ objs=
+ os2dllname=
+ non_pic_objects=
+ precious_files_regex=
+ prefer_static_libs=no
+ preload=false
+ prev=
+ prevarg=
+ release=
+ rpath=
+ xrpath=
+ perm_rpath=
+ temp_rpath=
+ thread_safe=no
+ vinfo=
+ vinfo_number=no
+ weak_libs=
+ single_module=$wl-single_module
+ func_infer_tag $base_compile
+
+ # We need to know -static, to get the right output filenames.
+ for arg
+ do
+ case $arg in
+ -shared)
+ test yes != "$build_libtool_libs" \
+ && func_fatal_configuration "cannot build a shared library"
+ build_old_libs=no
+ break
+ ;;
+ -all-static | -static | -static-libtool-libs)
+ case $arg in
+ -all-static)
+ if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
+ func_warning "complete static linking is impossible in this configuration"
+ fi
+ if test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=yes
+ ;;
+ -static)
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=built
+ ;;
+ -static-libtool-libs)
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=yes
+ ;;
+ esac
+ build_libtool_libs=no
+ build_old_libs=yes
+ break
+ ;;
+ esac
+ done
+
+ # See if our shared archives depend on static archives.
+ test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+ # Go through the arguments, transforming them on the way.
+ while test "$#" -gt 0; do
+ arg=$1
+ shift
+ func_quote_for_eval "$arg"
+ qarg=$func_quote_for_eval_unquoted_result
+ func_append libtool_args " $func_quote_for_eval_result"
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$prev"; then
+ case $prev in
+ output)
+ func_append compile_command " @OUTPUT@"
+ func_append finalize_command " @OUTPUT@"
+ ;;
+ esac
+
+ case $prev in
+ bindir)
+ bindir=$arg
+ prev=
+ continue
+ ;;
+ dlfiles|dlprefiles)
+ $preload || {
+ # Add the symbol object into the linking commands.
+ func_append compile_command " @SYMFILE@"
+ func_append finalize_command " @SYMFILE@"
+ preload=:
+ }
+ case $arg in
+ *.la | *.lo) ;; # We handle these cases below.
+ force)
+ if test no = "$dlself"; then
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ self)
+ if test dlprefiles = "$prev"; then
+ dlself=yes
+ elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
+ dlself=yes
+ else
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ *)
+ if test dlfiles = "$prev"; then
+ func_append dlfiles " $arg"
+ else
+ func_append dlprefiles " $arg"
+ fi
+ prev=
+ continue
+ ;;
+ esac
+ ;;
+ expsyms)
+ export_symbols=$arg
+ test -f "$arg" \
+ || func_fatal_error "symbol file '$arg' does not exist"
+ prev=
+ continue
+ ;;
+ expsyms_regex)
+ export_symbols_regex=$arg
+ prev=
+ continue
+ ;;
+ framework)
+ case $host in
+ *-*-darwin*)
+ case "$deplibs " in
+ *" $qarg.ltframework "*) ;;
+ *) func_append deplibs " $qarg.ltframework" # this is fixed later
+ ;;
+ esac
+ ;;
+ esac
+ prev=
+ continue
+ ;;
+ inst_prefix)
+ inst_prefix_dir=$arg
+ prev=
+ continue
+ ;;
+ mllvm)
+ # Clang does not use LLVM to link, so we can simply discard any
+ # '-mllvm $arg' options when doing the link step.
+ prev=
+ continue
+ ;;
+ objectlist)
+ if test -f "$arg"; then
+ save_arg=$arg
+ moreargs=
+ for fil in `cat "$save_arg"`
+ do
+# func_append moreargs " $fil"
+ arg=$fil
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if func_lalib_unsafe_p "$arg"; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ func_source "$arg"
+
+ if test -z "$pic_object" ||
+ test -z "$non_pic_object" ||
+ test none = "$pic_object" &&
+ test none = "$non_pic_object"; then
+ func_fatal_error "cannot find name of object for '$arg'"
+ fi
+
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir=$func_dirname_result
+
+ if test none != "$pic_object"; then
+ # Prepend the subdirectory the object is found in.
+ pic_object=$xdir$pic_object
+
+ if test dlfiles = "$prev"; then
+ if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
+ func_append dlfiles " $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test dlprefiles = "$prev"; then
+ # Preload the old-style object.
+ func_append dlprefiles " $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ func_append libobjs " $pic_object"
+ arg=$pic_object
+ fi
+
+ # Non-PIC object.
+ if test none != "$non_pic_object"; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object=$xdir$non_pic_object
+
+ # A standard non-PIC object
+ func_append non_pic_objects " $non_pic_object"
+ if test -z "$pic_object" || test none = "$pic_object"; then
+ arg=$non_pic_object
+ fi
+ else
+ # If the PIC object exists, use it instead.
+ # $xdir was prepended to $pic_object above.
+ non_pic_object=$pic_object
+ func_append non_pic_objects " $non_pic_object"
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if $opt_dry_run; then
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir=$func_dirname_result
+
+ func_lo2o "$arg"
+ pic_object=$xdir$objdir/$func_lo2o_result
+ non_pic_object=$xdir$func_lo2o_result
+ func_append libobjs " $pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ else
+ func_fatal_error "'$arg' is not a valid libtool object"
+ fi
+ fi
+ done
+ else
+ func_fatal_error "link input file '$arg' does not exist"
+ fi
+ arg=$save_arg
+ prev=
+ continue
+ ;;
+ os2dllname)
+ os2dllname=$arg
+ prev=
+ continue
+ ;;
+ precious_regex)
+ precious_files_regex=$arg
+ prev=
+ continue
+ ;;
+ release)
+ release=-$arg
+ prev=
+ continue
+ ;;
+ rpath | xrpath)
+ # We need an absolute path.
+ case $arg in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ func_fatal_error "only absolute run-paths are allowed"
+ ;;
+ esac
+ if test rpath = "$prev"; then
+ case "$rpath " in
+ *" $arg "*) ;;
+ *) func_append rpath " $arg" ;;
+ esac
+ else
+ case "$xrpath " in
+ *" $arg "*) ;;
+ *) func_append xrpath " $arg" ;;
+ esac
+ fi
+ prev=
+ continue
+ ;;
+ shrext)
+ shrext_cmds=$arg
+ prev=
+ continue
+ ;;
+ weak)
+ func_append weak_libs " $arg"
+ prev=
+ continue
+ ;;
+ xcclinker)
+ func_append linker_flags " $qarg"
+ func_append compiler_flags " $qarg"
+ prev=
+ func_append compile_command " $qarg"
+ func_append finalize_command " $qarg"
+ continue
+ ;;
+ xcompiler)
+ func_append compiler_flags " $qarg"
+ prev=
+ func_append compile_command " $qarg"
+ func_append finalize_command " $qarg"
+ continue
+ ;;
+ xlinker)
+ func_append linker_flags " $qarg"
+ func_append compiler_flags " $wl$qarg"
+ prev=
+ func_append compile_command " $wl$qarg"
+ func_append finalize_command " $wl$qarg"
+ continue
+ ;;
+ *)
+ eval "$prev=\"\$arg\""
+ prev=
+ continue
+ ;;
+ esac
+ fi # test -n "$prev"
+
+ prevarg=$arg
+
+ case $arg in
+ -all-static)
+ if test -n "$link_static_flag"; then
+ # See comment for -static flag below, for more details.
+ func_append compile_command " $link_static_flag"
+ func_append finalize_command " $link_static_flag"
+ fi
+ continue
+ ;;
+
+ -allow-undefined)
+ # FIXME: remove this flag sometime in the future.
+ func_fatal_error "'-allow-undefined' must not be used because it is the default"
+ ;;
+
+ -avoid-version)
+ avoid_version=yes
+ continue
+ ;;
+
+ -bindir)
+ prev=bindir
+ continue
+ ;;
+
+ -dlopen)
+ prev=dlfiles
+ continue
+ ;;
+
+ -dlpreopen)
+ prev=dlprefiles
+ continue
+ ;;
+
+ -export-dynamic)
+ export_dynamic=yes
+ continue
+ ;;
+
+ -export-symbols | -export-symbols-regex)
+ if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+ func_fatal_error "more than one -exported-symbols argument is not allowed"
+ fi
+ if test X-export-symbols = "X$arg"; then
+ prev=expsyms
+ else
+ prev=expsyms_regex
+ fi
+ continue
+ ;;
+
+ -framework)
+ prev=framework
+ continue
+ ;;
+
+ -inst-prefix-dir)
+ prev=inst_prefix
+ continue
+ ;;
+
+ # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+ # so, if we see these flags be careful not to treat them like -L
+ -L[A-Z][A-Z]*:*)
+ case $with_gcc/$host in
+ no/*-*-irix* | /*-*-irix*)
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ ;;
+ esac
+ continue
+ ;;
+
+ -L*)
+ func_stripname "-L" '' "$arg"
+ if test -z "$func_stripname_result"; then
+ if test "$#" -gt 0; then
+ func_fatal_error "require no space between '-L' and '$1'"
+ else
+ func_fatal_error "need path for '-L' option"
+ fi
+ fi
+ func_resolve_sysroot "$func_stripname_result"
+ dir=$func_resolve_sysroot_result
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ test -z "$absdir" && \
+ func_fatal_error "cannot determine absolute directory name of '$dir'"
+ dir=$absdir
+ ;;
+ esac
+ case "$deplibs " in
+ *" -L$dir "* | *" $arg "*)
+ # Will only happen for absolute or sysroot arguments
+ ;;
+ *)
+ # Preserve sysroot, but never include relative directories
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
+ *) func_append deplibs " -L$dir" ;;
+ esac
+ func_append lib_search_path " $dir"
+ ;;
+ esac
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
+ case :$dllsearchpath: in
+ *":$dir:"*) ;;
+ ::) dllsearchpath=$dir;;
+ *) func_append dllsearchpath ":$dir";;
+ esac
+ case :$dllsearchpath: in
+ *":$testbindir:"*) ;;
+ ::) dllsearchpath=$testbindir;;
+ *) func_append dllsearchpath ":$testbindir";;
+ esac
+ ;;
+ esac
+ continue
+ ;;
+
+ -l*)
+ if test X-lc = "X$arg" || test X-lm = "X$arg"; then
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
+ # These systems don't actually have a C or math library (as such)
+ continue
+ ;;
+ *-*-os2*)
+ # These systems don't actually have a C library (as such)
+ test X-lc = "X$arg" && continue
+ ;;
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
+ # Do not include libc due to us having libc/libc_r.
+ test X-lc = "X$arg" && continue
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C and math libraries are in the System framework
+ func_append deplibs " System.ltframework"
+ continue
+ ;;
+ *-*-sco3.2v5* | *-*-sco5v6*)
+ # Causes problems with __ctype
+ test X-lc = "X$arg" && continue
+ ;;
+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+ # Compiler inserts libc in the correct place for threads to work
+ test X-lc = "X$arg" && continue
+ ;;
+ esac
+ elif test X-lc_r = "X$arg"; then
+ case $host in
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
+ # Do not include libc_r directly, use -pthread flag.
+ continue
+ ;;
+ esac
+ fi
+ func_append deplibs " $arg"
+ continue
+ ;;
+
+ -mllvm)
+ prev=mllvm
+ continue
+ ;;
+
+ -module)
+ module=yes
+ continue
+ ;;
+
+ # Tru64 UNIX uses -model [arg] to determine the layout of C++
+ # classes, name mangling, and exception handling.
+ # Darwin uses the -arch flag to determine output architecture.
+ -model|-arch|-isysroot|--sysroot)
+ func_append compiler_flags " $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ prev=xcompiler
+ continue
+ ;;
+
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+ func_append compiler_flags " $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ case "$new_inherited_linker_flags " in
+ *" $arg "*) ;;
+ * ) func_append new_inherited_linker_flags " $arg" ;;
+ esac
+ continue
+ ;;
+
+ -multi_module)
+ single_module=$wl-multi_module
+ continue
+ ;;
+
+ -no-fast-install)
+ fast_install=no
+ continue
+ ;;
+
+ -no-install)
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
+ # The PATH hackery in wrapper scripts is required on Windows
+ # and Darwin in order for the loader to find any dlls it needs.
+ func_warning "'-no-install' is ignored for $host"
+ func_warning "assuming '-no-fast-install' instead"
+ fast_install=no
+ ;;
+ *) no_install=yes ;;
+ esac
+ continue
+ ;;
+
+ -no-undefined)
+ allow_undefined=no
+ continue
+ ;;
+
+ -objectlist)
+ prev=objectlist
+ continue
+ ;;
+
+ -os2dllname)
+ prev=os2dllname
+ continue
+ ;;
+
+ -o) prev=output ;;
+
+ -precious-files-regex)
+ prev=precious_regex
+ continue
+ ;;
+
+ -release)
+ prev=release
+ continue
+ ;;
+
+ -rpath)
+ prev=rpath
+ continue
+ ;;
+
+ -R)
+ prev=xrpath
+ continue
+ ;;
+
+ -R*)
+ func_stripname '-R' '' "$arg"
+ dir=$func_stripname_result
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ =*)
+ func_stripname '=' '' "$dir"
+ dir=$lt_sysroot$func_stripname_result
+ ;;
+ *)
+ func_fatal_error "only absolute run-paths are allowed"
+ ;;
+ esac
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) func_append xrpath " $dir" ;;
+ esac
+ continue
+ ;;
+
+ -shared)
+ # The effects of -shared are defined in a previous loop.
+ continue
+ ;;
+
+ -shrext)
+ prev=shrext
+ continue
+ ;;
+
+ -static | -static-libtool-libs)
+ # The effects of -static are defined in a previous loop.
+ # We used to do the same as -all-static on platforms that
+ # didn't have a PIC flag, but the assumption that the effects
+ # would be equivalent was wrong. It would break on at least
+ # Digital Unix and AIX.
+ continue
+ ;;
+
+ -thread-safe)
+ thread_safe=yes
+ continue
+ ;;
+
+ -version-info)
+ prev=vinfo
+ continue
+ ;;
+
+ -version-number)
+ prev=vinfo
+ vinfo_number=yes
+ continue
+ ;;
+
+ -weak)
+ prev=weak
+ continue
+ ;;
+
+ -Wc,*)
+ func_stripname '-Wc,' '' "$arg"
+ args=$func_stripname_result
+ arg=
+ save_ifs=$IFS; IFS=,
+ for flag in $args; do
+ IFS=$save_ifs
+ func_quote_for_eval "$flag"
+ func_append arg " $func_quote_for_eval_result"
+ func_append compiler_flags " $func_quote_for_eval_result"
+ done
+ IFS=$save_ifs
+ func_stripname ' ' '' "$arg"
+ arg=$func_stripname_result
+ ;;
+
+ -Wl,*)
+ func_stripname '-Wl,' '' "$arg"
+ args=$func_stripname_result
+ arg=
+ save_ifs=$IFS; IFS=,
+ for flag in $args; do
+ IFS=$save_ifs
+ func_quote_for_eval "$flag"
+ func_append arg " $wl$func_quote_for_eval_result"
+ func_append compiler_flags " $wl$func_quote_for_eval_result"
+ func_append linker_flags " $func_quote_for_eval_result"
+ done
+ IFS=$save_ifs
+ func_stripname ' ' '' "$arg"
+ arg=$func_stripname_result
+ ;;
+
+ -Xcompiler)
+ prev=xcompiler
+ continue
+ ;;
+
+ -Xlinker)
+ prev=xlinker
+ continue
+ ;;
+
+ -XCClinker)
+ prev=xcclinker
+ continue
+ ;;
+
+ # -msg_* for osf cc
+ -msg_*)
+ func_quote_for_eval "$arg"
+ arg=$func_quote_for_eval_result
+ ;;
+
+ # Flags to be passed through unchanged, with rationale:
+ # -64, -mips[0-9] enable 64-bit mode for the SGI compiler
+ # -r[0-9][0-9]* specify processor for the SGI compiler
+ # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
+ # +DA*, +DD* enable 64-bit mode for the HP compiler
+ # -q* compiler args for the IBM compiler
+ # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
+ # -F/path path to uninstalled frameworks, gcc on darwin
+ # -p, -pg, --coverage, -fprofile-* profiling flags for GCC
+ # -fstack-protector* stack protector flags for GCC
+ # @file GCC response files
+ # -tp=* Portland pgcc target processor selection
+ # --sysroot=* for sysroot support
+ # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+ # -specs=* GCC specs files
+ # -stdlib=* select c++ std lib with clang
+ # -fsanitize=* Clang/GCC memory and address sanitizer
+ # -fuse-ld=* Linker select flags for GCC
+ -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
+ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
+ -specs=*|-fsanitize=*|-fuse-ld=*)
+ func_quote_for_eval "$arg"
+ arg=$func_quote_for_eval_result
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ func_append compiler_flags " $arg"
+ continue
+ ;;
+
+ -Z*)
+ if test os2 = "`expr $host : '.*\(os2\)'`"; then
+ # OS/2 uses -Zxxx to specify OS/2-specific options
+ compiler_flags="$compiler_flags $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ case $arg in
+ -Zlinker | -Zstack)
+ prev=xcompiler
+ ;;
+ esac
+ continue
+ else
+ # Otherwise treat like 'Some other compiler flag' below
+ func_quote_for_eval "$arg"
+ arg=$func_quote_for_eval_result
+ fi
+ ;;
+
+ # Some other compiler flag.
+ -* | +*)
+ func_quote_for_eval "$arg"
+ arg=$func_quote_for_eval_result
+ ;;
+
+ *.$objext)
+ # A standard object.
+ func_append objs " $arg"
+ ;;
+
+ *.lo)
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if func_lalib_unsafe_p "$arg"; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ func_source "$arg"
+
+ if test -z "$pic_object" ||
+ test -z "$non_pic_object" ||
+ test none = "$pic_object" &&
+ test none = "$non_pic_object"; then
+ func_fatal_error "cannot find name of object for '$arg'"
+ fi
+
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir=$func_dirname_result
+
+ test none = "$pic_object" || {
+ # Prepend the subdirectory the object is found in.
+ pic_object=$xdir$pic_object
+
+ if test dlfiles = "$prev"; then
+ if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
+ func_append dlfiles " $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test dlprefiles = "$prev"; then
+ # Preload the old-style object.
+ func_append dlprefiles " $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ func_append libobjs " $pic_object"
+ arg=$pic_object
+ }
+
+ # Non-PIC object.
+ if test none != "$non_pic_object"; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object=$xdir$non_pic_object
+
+ # A standard non-PIC object
+ func_append non_pic_objects " $non_pic_object"
+ if test -z "$pic_object" || test none = "$pic_object"; then
+ arg=$non_pic_object
+ fi
+ else
+ # If the PIC object exists, use it instead.
+ # $xdir was prepended to $pic_object above.
+ non_pic_object=$pic_object
+ func_append non_pic_objects " $non_pic_object"
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if $opt_dry_run; then
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir=$func_dirname_result
+
+ func_lo2o "$arg"
+ pic_object=$xdir$objdir/$func_lo2o_result
+ non_pic_object=$xdir$func_lo2o_result
+ func_append libobjs " $pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ else
+ func_fatal_error "'$arg' is not a valid libtool object"
+ fi
+ fi
+ ;;
+
+ *.$libext)
+ # An archive.
+ func_append deplibs " $arg"
+ func_append old_deplibs " $arg"
+ continue
+ ;;
+
+ *.la)
+ # A libtool-controlled library.
+
+ func_resolve_sysroot "$arg"
+ if test dlfiles = "$prev"; then
+ # This library was specified with -dlopen.
+ func_append dlfiles " $func_resolve_sysroot_result"
+ prev=
+ elif test dlprefiles = "$prev"; then
+ # The library was specified with -dlpreopen.
+ func_append dlprefiles " $func_resolve_sysroot_result"
+ prev=
+ else
+ func_append deplibs " $func_resolve_sysroot_result"
+ fi
+ continue
+ ;;
+
+ # Some other compiler argument.
+ *)
+ # Unknown arguments in both finalize_command and compile_command need
+ # to be aesthetically quoted because they are evaled later.
+ func_quote_for_eval "$arg"
+ arg=$func_quote_for_eval_result
+ ;;
+ esac # arg
+
+ # Now actually substitute the argument into the commands.
+ if test -n "$arg"; then
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ fi
+ done # argument parsing loop
+
+ test -n "$prev" && \
+ func_fatal_help "the '$prevarg' option requires an argument"
+
+ if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
+ eval arg=\"$export_dynamic_flag_spec\"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ fi
+
+ oldlibs=
+ # calculate the name of the file, without its directory
+ func_basename "$output"
+ outputname=$func_basename_result
+ libobjs_save=$libobjs
+
+ if test -n "$shlibpath_var"; then
+ # get the directories listed in $shlibpath_var
+ eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
+ else
+ shlib_search_path=
+ fi
+ eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+ eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+ # Definition is injected by LT_CONFIG during libtool generation.
+ func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
+
+ func_dirname "$output" "/" ""
+ output_objdir=$func_dirname_result$objdir
+ func_to_tool_file "$output_objdir/"
+ tool_output_objdir=$func_to_tool_file_result
+ # Create the object directory.
+ func_mkdir_p "$output_objdir"
+
+ # Determine the type of output
+ case $output in
+ "")
+ func_fatal_help "you must specify an output file"
+ ;;
+ *.$libext) linkmode=oldlib ;;
+ *.lo | *.$objext) linkmode=obj ;;
+ *.la) linkmode=lib ;;
+ *) linkmode=prog ;; # Anything else should be a program.
+ esac
+
+ specialdeplibs=
+
+ libs=
+ # Find all interdependent deplibs by searching for libraries
+ # that are linked more than once (e.g. -la -lb -la)
+ for deplib in $deplibs; do
+ if $opt_preserve_dup_deps; then
+ case "$libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append libs " $deplib"
+ done
+
+ if test lib = "$linkmode"; then
+ libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+ # Compute libraries that are listed more than once in $predeps
+ # $postdeps and mark them as special (i.e., whose duplicates are
+ # not to be eliminated).
+ pre_post_deps=
+ if $opt_duplicate_compiler_generated_deps; then
+ for pre_post_dep in $predeps $postdeps; do
+ case "$pre_post_deps " in
+ *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
+ esac
+ func_append pre_post_deps " $pre_post_dep"
+ done
+ fi
+ pre_post_deps=
+ fi
+
+ deplibs=
+ newdependency_libs=
+ newlib_search_path=
+ need_relink=no # whether we're linking any uninstalled libtool libraries
+ notinst_deplibs= # not-installed libtool libraries
+ notinst_path= # paths that contain not-installed libtool libraries
+
+ case $linkmode in
+ lib)
+ passes="conv dlpreopen link"
+ for file in $dlfiles $dlprefiles; do
+ case $file in
+ *.la) ;;
+ *)
+ func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
+ ;;
+ esac
+ done
+ ;;
+ prog)
+ compile_deplibs=
+ finalize_deplibs=
+ alldeplibs=false
+ newdlfiles=
+ newdlprefiles=
+ passes="conv scan dlopen dlpreopen link"
+ ;;
+ *) passes="conv"
+ ;;
+ esac
+
+ for pass in $passes; do
+ # The preopen pass in lib mode reverses $deplibs; put it back here
+ # so that -L comes before libs that need it for instance...
+ if test lib,link = "$linkmode,$pass"; then
+ ## FIXME: Find the place where the list is rebuilt in the wrong
+ ## order, and fix it there properly
+ tmp_deplibs=
+ for deplib in $deplibs; do
+ tmp_deplibs="$deplib $tmp_deplibs"
+ done
+ deplibs=$tmp_deplibs
+ fi
+
+ if test lib,link = "$linkmode,$pass" ||
+ test prog,scan = "$linkmode,$pass"; then
+ libs=$deplibs
+ deplibs=
+ fi
+ if test prog = "$linkmode"; then
+ case $pass in
+ dlopen) libs=$dlfiles ;;
+ dlpreopen) libs=$dlprefiles ;;
+ link)
+ libs="$deplibs %DEPLIBS%"
+ test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
+ ;;
+ esac
+ fi
+ if test lib,dlpreopen = "$linkmode,$pass"; then
+ # Collect and forward deplibs of preopened libtool libs
+ for lib in $dlprefiles; do
+ # Ignore non-libtool-libs
+ dependency_libs=
+ func_resolve_sysroot "$lib"
+ case $lib in
+ *.la) func_source "$func_resolve_sysroot_result" ;;
+ esac
+
+ # Collect preopened libtool deplibs, except any this library
+ # has declared as weak libs
+ for deplib in $dependency_libs; do
+ func_basename "$deplib"
+ deplib_base=$func_basename_result
+ case " $weak_libs " in
+ *" $deplib_base "*) ;;
+ *) func_append deplibs " $deplib" ;;
+ esac
+ done
+ done
+ libs=$dlprefiles
+ fi
+ if test dlopen = "$pass"; then
+ # Collect dlpreopened libraries
+ save_deplibs=$deplibs
+ deplibs=
+ fi
+
+ for deplib in $libs; do
+ lib=
+ found=false
+ case $deplib in
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+ if test prog,link = "$linkmode,$pass"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ func_append compiler_flags " $deplib"
+ if test lib = "$linkmode"; then
+ case "$new_inherited_linker_flags " in
+ *" $deplib "*) ;;
+ * ) func_append new_inherited_linker_flags " $deplib" ;;
+ esac
+ fi
+ fi
+ continue
+ ;;
+ -l*)
+ if test lib != "$linkmode" && test prog != "$linkmode"; then
+ func_warning "'-l' is ignored for archives/objects"
+ continue
+ fi
+ func_stripname '-l' '' "$deplib"
+ name=$func_stripname_result
+ if test lib = "$linkmode"; then
+ searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
+ else
+ searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+ fi
+ for searchdir in $searchdirs; do
+ for search_ext in .la $std_shrext .so .a; do
+ # Search the libtool library
+ lib=$searchdir/lib$name$search_ext
+ if test -f "$lib"; then
+ if test .la = "$search_ext"; then
+ found=:
+ else
+ found=false
+ fi
+ break 2
+ fi
+ done
+ done
+ if $found; then
+ # deplib is a libtool library
+ # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+ # We need to do some special things here, and not later.
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ case " $predeps $postdeps " in
+ *" $deplib "*)
+ if func_lalib_p "$lib"; then
+ library_names=
+ old_library=
+ func_source "$lib"
+ for l in $old_library $library_names; do
+ ll=$l
+ done
+ if test "X$ll" = "X$old_library"; then # only static version available
+ found=false
+ func_dirname "$lib" "" "."
+ ladir=$func_dirname_result
+ lib=$ladir/$old_library
+ if test prog,link = "$linkmode,$pass"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ fi
+ fi
+ ;;
+ *) ;;
+ esac
+ fi
+ else
+ # deplib doesn't seem to be a libtool library
+ if test prog,link = "$linkmode,$pass"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ fi
+ ;; # -l
+ *.ltframework)
+ if test prog,link = "$linkmode,$pass"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ if test lib = "$linkmode"; then
+ case "$new_inherited_linker_flags " in
+ *" $deplib "*) ;;
+ * ) func_append new_inherited_linker_flags " $deplib" ;;
+ esac
+ fi
+ fi
+ continue
+ ;;
+ -L*)
+ case $linkmode in
+ lib)
+ deplibs="$deplib $deplibs"
+ test conv = "$pass" && continue
+ newdependency_libs="$deplib $newdependency_libs"
+ func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ func_append newlib_search_path " $func_resolve_sysroot_result"
+ ;;
+ prog)
+ if test conv = "$pass"; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ if test scan = "$pass"; then
+ deplibs="$deplib $deplibs"
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ func_append newlib_search_path " $func_resolve_sysroot_result"
+ ;;
+ *)
+ func_warning "'-L' is ignored for archives/objects"
+ ;;
+ esac # linkmode
+ continue
+ ;; # -L
+ -R*)
+ if test link = "$pass"; then
+ func_stripname '-R' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ dir=$func_resolve_sysroot_result
+ # Make sure the xrpath contains only unique directories.
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) func_append xrpath " $dir" ;;
+ esac
+ fi
+ deplibs="$deplib $deplibs"
+ continue
+ ;;
+ *.la)
+ func_resolve_sysroot "$deplib"
+ lib=$func_resolve_sysroot_result
+ ;;
+ *.$libext)
+ if test conv = "$pass"; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ case $linkmode in
+ lib)
+ # Linking convenience modules into shared libraries is allowed,
+ # but linking other static libraries is non-portable.
+ case " $dlpreconveniencelibs " in
+ *" $deplib "*) ;;
+ *)
+ valid_a_lib=false
+ case $deplibs_check_method in
+ match_pattern*)
+ set dummy $deplibs_check_method; shift
+ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
+ | $EGREP "$match_pattern_regex" > /dev/null; then
+ valid_a_lib=:
+ fi
+ ;;
+ pass_all)
+ valid_a_lib=:
+ ;;
+ esac
+ if $valid_a_lib; then
+ echo
+ $ECHO "*** Warning: Linking the shared library $output against the"
+ $ECHO "*** static library $deplib is not portable!"
+ deplibs="$deplib $deplibs"
+ else
+ echo
+ $ECHO "*** Warning: Trying to link with static lib archive $deplib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because the file extensions .$libext of this argument makes me believe"
+ echo "*** that it is just a static archive that I should not use here."
+ fi
+ ;;
+ esac
+ continue
+ ;;
+ prog)
+ if test link != "$pass"; then
+ deplibs="$deplib $deplibs"
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ continue
+ ;;
+ esac # linkmode
+ ;; # *.$libext
+ *.lo | *.$objext)
+ if test conv = "$pass"; then
+ deplibs="$deplib $deplibs"
+ elif test prog = "$linkmode"; then
+ if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
+ # If there is no dlopen support or we're linking statically,
+ # we need to preload.
+ func_append newdlprefiles " $deplib"
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ func_append newdlfiles " $deplib"
+ fi
+ fi
+ continue
+ ;;
+ %DEPLIBS%)
+ alldeplibs=:
+ continue
+ ;;
+ esac # case $deplib
+
+ $found || test -f "$lib" \
+ || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
+
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$lib" \
+ || func_fatal_error "'$lib' is not a valid libtool archive"
+
+ func_dirname "$lib" "" "."
+ ladir=$func_dirname_result
+
+ dlname=
+ dlopen=
+ dlpreopen=
+ libdir=
+ library_names=
+ old_library=
+ inherited_linker_flags=
+ # If the library was installed with an old release of libtool,
+ # it will not redefine variables installed, or shouldnotlink
+ installed=yes
+ shouldnotlink=no
+ avoidtemprpath=
+
+
+ # Read the .la file
+ func_source "$lib"
+
+ # Convert "-framework foo" to "foo.ltframework"
+ if test -n "$inherited_linker_flags"; then
+ tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
+ for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+ case " $new_inherited_linker_flags " in
+ *" $tmp_inherited_linker_flag "*) ;;
+ *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
+ esac
+ done
+ fi
+ dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ if test lib,link = "$linkmode,$pass" ||
+ test prog,scan = "$linkmode,$pass" ||
+ { test prog != "$linkmode" && test lib != "$linkmode"; }; then
+ test -n "$dlopen" && func_append dlfiles " $dlopen"
+ test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
+ fi
+
+ if test conv = "$pass"; then
+ # Only check for convenience libraries
+ deplibs="$lib $deplibs"
+ if test -z "$libdir"; then
+ if test -z "$old_library"; then
+ func_fatal_error "cannot find name of link library for '$lib'"
+ fi
+ # It is a libtool convenience library, so add in its objects.
+ func_append convenience " $ladir/$objdir/$old_library"
+ func_append old_convenience " $ladir/$objdir/$old_library"
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ deplibs="$deplib $deplibs"
+ if $opt_preserve_dup_deps; then
+ case "$tmp_libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append tmp_libs " $deplib"
+ done
+ elif test prog != "$linkmode" && test lib != "$linkmode"; then
+ func_fatal_error "'$lib' is not a convenience library"
+ fi
+ continue
+ fi # $pass = conv
+
+
+ # Get the name of the library we link against.
+ linklib=
+ if test -n "$old_library" &&
+ { test yes = "$prefer_static_libs" ||
+ test built,no = "$prefer_static_libs,$installed"; }; then
+ linklib=$old_library
+ else
+ for l in $old_library $library_names; do
+ linklib=$l
+ done
+ fi
+ if test -z "$linklib"; then
+ func_fatal_error "cannot find name of link library for '$lib'"
+ fi
+
+ # This library was specified with -dlopen.
+ if test dlopen = "$pass"; then
+ test -z "$libdir" \
+ && func_fatal_error "cannot -dlopen a convenience library: '$lib'"
+ if test -z "$dlname" ||
+ test yes != "$dlopen_support" ||
+ test no = "$build_libtool_libs"
+ then
+ # If there is no dlname, no dlopen support or we're linking
+ # statically, we need to preload. We also need to preload any
+ # dependent libraries so libltdl's deplib preloader doesn't
+ # bomb out in the load deplibs phase.
+ func_append dlprefiles " $lib $dependency_libs"
+ else
+ func_append newdlfiles " $lib"
+ fi
+ continue
+ fi # $pass = dlopen
+
+ # We need an absolute path.
+ case $ladir in
+ [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;;
+ *)
+ abs_ladir=`cd "$ladir" && pwd`
+ if test -z "$abs_ladir"; then
+ func_warning "cannot determine absolute directory name of '$ladir'"
+ func_warning "passing it literally to the linker, although it might fail"
+ abs_ladir=$ladir
+ fi
+ ;;
+ esac
+ func_basename "$lib"
+ laname=$func_basename_result
+
+ # Find the relevant object directory and library name.
+ if test yes = "$installed"; then
+ if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ func_warning "library '$lib' was moved."
+ dir=$ladir
+ absdir=$abs_ladir
+ libdir=$abs_ladir
+ else
+ dir=$lt_sysroot$libdir
+ absdir=$lt_sysroot$libdir
+ fi
+ test yes = "$hardcode_automatic" && avoidtemprpath=yes
+ else
+ if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ dir=$ladir
+ absdir=$abs_ladir
+ # Remove this search path later
+ func_append notinst_path " $abs_ladir"
+ else
+ dir=$ladir/$objdir
+ absdir=$abs_ladir/$objdir
+ # Remove this search path later
+ func_append notinst_path " $abs_ladir"
+ fi
+ fi # $installed = yes
+ func_stripname 'lib' '.la' "$laname"
+ name=$func_stripname_result
+
+ # This library was specified with -dlpreopen.
+ if test dlpreopen = "$pass"; then
+ if test -z "$libdir" && test prog = "$linkmode"; then
+ func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
+ fi
+ case $host in
+ # special handling for platforms with PE-DLLs.
+ *cygwin* | *mingw* | *cegcc* )
+ # Linker will automatically link against shared library if both
+ # static and shared are present. Therefore, ensure we extract
+ # symbols from the import library if a shared library is present
+ # (otherwise, the dlopen module name will be incorrect). We do
+ # this by putting the import library name into $newdlprefiles.
+ # We recover the dlopen module name by 'saving' the la file
+ # name in a special purpose variable, and (later) extracting the
+ # dlname from the la file.
+ if test -n "$dlname"; then
+ func_tr_sh "$dir/$linklib"
+ eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
+ func_append newdlprefiles " $dir/$linklib"
+ else
+ func_append newdlprefiles " $dir/$old_library"
+ # Keep a list of preopened convenience libraries to check
+ # that they are being used correctly in the link pass.
+ test -z "$libdir" && \
+ func_append dlpreconveniencelibs " $dir/$old_library"
+ fi
+ ;;
+ * )
+ # Prefer using a static library (so that no silly _DYNAMIC symbols
+ # are required to link).
+ if test -n "$old_library"; then
+ func_append newdlprefiles " $dir/$old_library"
+ # Keep a list of preopened convenience libraries to check
+ # that they are being used correctly in the link pass.
+ test -z "$libdir" && \
+ func_append dlpreconveniencelibs " $dir/$old_library"
+ # Otherwise, use the dlname, so that lt_dlopen finds it.
+ elif test -n "$dlname"; then
+ func_append newdlprefiles " $dir/$dlname"
+ else
+ func_append newdlprefiles " $dir/$linklib"
+ fi
+ ;;
+ esac
+ fi # $pass = dlpreopen
+
+ if test -z "$libdir"; then
+ # Link the convenience library
+ if test lib = "$linkmode"; then
+ deplibs="$dir/$old_library $deplibs"
+ elif test prog,link = "$linkmode,$pass"; then
+ compile_deplibs="$dir/$old_library $compile_deplibs"
+ finalize_deplibs="$dir/$old_library $finalize_deplibs"
+ else
+ deplibs="$lib $deplibs" # used for prog,scan pass
+ fi
+ continue
+ fi
+
+
+ if test prog = "$linkmode" && test link != "$pass"; then
+ func_append newlib_search_path " $ladir"
+ deplibs="$lib $deplibs"
+
+ linkalldeplibs=false
+ if test no != "$link_all_deplibs" || test -z "$library_names" ||
+ test no = "$build_libtool_libs"; then
+ linkalldeplibs=:
+ fi
+
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ -L*) func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ func_append newlib_search_path " $func_resolve_sysroot_result"
+ ;;
+ esac
+ # Need to link against all dependency_libs?
+ if $linkalldeplibs; then
+ deplibs="$deplib $deplibs"
+ else
+ # Need to hardcode shared library paths
+ # or/and link against static libraries
+ newdependency_libs="$deplib $newdependency_libs"
+ fi
+ if $opt_preserve_dup_deps; then
+ case "$tmp_libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append tmp_libs " $deplib"
+ done # for deplib
+ continue
+ fi # $linkmode = prog...
+
+ if test prog,link = "$linkmode,$pass"; then
+ if test -n "$library_names" &&
+ { { test no = "$prefer_static_libs" ||
+ test built,yes = "$prefer_static_libs,$installed"; } ||
+ test -z "$old_library"; }; then
+ # We need to hardcode the library path
+ if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
+ # Make sure the rpath contains only unique directories.
+ case $temp_rpath: in
+ *"$absdir:"*) ;;
+ *) func_append temp_rpath "$absdir:" ;;
+ esac
+ fi
+
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) func_append compile_rpath " $absdir" ;;
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ ;;
+ esac
+ fi # $linkmode,$pass = prog,link...
+
+ if $alldeplibs &&
+ { test pass_all = "$deplibs_check_method" ||
+ { test yes = "$build_libtool_libs" &&
+ test -n "$library_names"; }; }; then
+ # We only need to search for static libraries
+ continue
+ fi
+ fi
+
+ link_static=no # Whether the deplib will be linked statically
+ use_static_libs=$prefer_static_libs
+ if test built = "$use_static_libs" && test yes = "$installed"; then
+ use_static_libs=no
+ fi
+ if test -n "$library_names" &&
+ { test no = "$use_static_libs" || test -z "$old_library"; }; then
+ case $host in
+ *cygwin* | *mingw* | *cegcc* | *os2*)
+ # No point in relinking DLLs because paths are not encoded
+ func_append notinst_deplibs " $lib"
+ need_relink=no
+ ;;
+ *)
+ if test no = "$installed"; then
+ func_append notinst_deplibs " $lib"
+ need_relink=yes
+ fi
+ ;;
+ esac
+ # This is a shared library
+
+ # Warn about portability, can't link against -module's on some
+ # systems (darwin). Don't bleat about dlopened modules though!
+ dlopenmodule=
+ for dlpremoduletest in $dlprefiles; do
+ if test "X$dlpremoduletest" = "X$lib"; then
+ dlopenmodule=$dlpremoduletest
+ break
+ fi
+ done
+ if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
+ echo
+ if test prog = "$linkmode"; then
+ $ECHO "*** Warning: Linking the executable $output against the loadable module"
+ else
+ $ECHO "*** Warning: Linking the shared library $output against the loadable module"
+ fi
+ $ECHO "*** $linklib is not portable!"
+ fi
+ if test lib = "$linkmode" &&
+ test yes = "$hardcode_into_libs"; then
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) func_append compile_rpath " $absdir" ;;
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ ;;
+ esac
+ fi
+
+ if test -n "$old_archive_from_expsyms_cmds"; then
+ # figure out the soname
+ set dummy $library_names
+ shift
+ realname=$1
+ shift
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ # use dlname if we got it. it's perfectly good, no?
+ if test -n "$dlname"; then
+ soname=$dlname
+ elif test -n "$soname_spec"; then
+ # bleh windows
+ case $host in
+ *cygwin* | mingw* | *cegcc* | *os2*)
+ func_arith $current - $age
+ major=$func_arith_result
+ versuffix=-$major
+ ;;
+ esac
+ eval soname=\"$soname_spec\"
+ else
+ soname=$realname
+ fi
+
+ # Make a new name for the extract_expsyms_cmds to use
+ soroot=$soname
+ func_basename "$soroot"
+ soname=$func_basename_result
+ func_stripname 'lib' '.dll' "$soname"
+ newlib=libimp-$func_stripname_result.a
+
+ # If the library has no export list, then create one now
+ if test -f "$output_objdir/$soname-def"; then :
+ else
+ func_verbose "extracting exported symbol list from '$soname'"
+ func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
+ fi
+
+ # Create $newlib
+ if test -f "$output_objdir/$newlib"; then :; else
+ func_verbose "generating import library for '$soname'"
+ func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+ fi
+ # make sure the library variables are pointing to the new library
+ dir=$output_objdir
+ linklib=$newlib
+ fi # test -n "$old_archive_from_expsyms_cmds"
+
+ if test prog = "$linkmode" || test relink != "$opt_mode"; then
+ add_shlibpath=
+ add_dir=
+ add=
+ lib_linked=yes
+ case $hardcode_action in
+ immediate | unsupported)
+ if test no = "$hardcode_direct"; then
+ add=$dir/$linklib
+ case $host in
+ *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
+ *-*-sysv4*uw2*) add_dir=-L$dir ;;
+ *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+ *-*-unixware7*) add_dir=-L$dir ;;
+ *-*-darwin* )
+ # if the lib is a (non-dlopened) module then we cannot
+ # link against it, someone is ignoring the earlier warnings
+ if /usr/bin/file -L $add 2> /dev/null |
+ $GREP ": [^:]* bundle" >/dev/null; then
+ if test "X$dlopenmodule" != "X$lib"; then
+ $ECHO "*** Warning: lib $linklib is a module, not a shared library"
+ if test -z "$old_library"; then
+ echo
+ echo "*** And there doesn't seem to be a static archive available"
+ echo "*** The link will probably fail, sorry"
+ else
+ add=$dir/$old_library
+ fi
+ elif test -n "$old_library"; then
+ add=$dir/$old_library
+ fi
+ fi
+ esac
+ elif test no = "$hardcode_minus_L"; then
+ case $host in
+ *-*-sunos*) add_shlibpath=$dir ;;
+ esac
+ add_dir=-L$dir
+ add=-l$name
+ elif test no = "$hardcode_shlibpath_var"; then
+ add_shlibpath=$dir
+ add=-l$name
+ else
+ lib_linked=no
+ fi
+ ;;
+ relink)
+ if test yes = "$hardcode_direct" &&
+ test no = "$hardcode_direct_absolute"; then
+ add=$dir/$linklib
+ elif test yes = "$hardcode_minus_L"; then
+ add_dir=-L$absdir
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case $libdir in
+ [\\/]*)
+ func_append add_dir " -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
+ add=-l$name
+ elif test yes = "$hardcode_shlibpath_var"; then
+ add_shlibpath=$dir
+ add=-l$name
+ else
+ lib_linked=no
+ fi
+ ;;
+ *) lib_linked=no ;;
+ esac
+
+ if test yes != "$lib_linked"; then
+ func_fatal_configuration "unsupported hardcode properties"
+ fi
+
+ if test -n "$add_shlibpath"; then
+ case :$compile_shlibpath: in
+ *":$add_shlibpath:"*) ;;
+ *) func_append compile_shlibpath "$add_shlibpath:" ;;
+ esac
+ fi
+ if test prog = "$linkmode"; then
+ test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+ test -n "$add" && compile_deplibs="$add $compile_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ if test yes != "$hardcode_direct" &&
+ test yes != "$hardcode_minus_L" &&
+ test yes = "$hardcode_shlibpath_var"; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) func_append finalize_shlibpath "$libdir:" ;;
+ esac
+ fi
+ fi
+ fi
+
+ if test prog = "$linkmode" || test relink = "$opt_mode"; then
+ add_shlibpath=
+ add_dir=
+ add=
+ # Finalize command for both is simple: just hardcode it.
+ if test yes = "$hardcode_direct" &&
+ test no = "$hardcode_direct_absolute"; then
+ add=$libdir/$linklib
+ elif test yes = "$hardcode_minus_L"; then
+ add_dir=-L$libdir
+ add=-l$name
+ elif test yes = "$hardcode_shlibpath_var"; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) func_append finalize_shlibpath "$libdir:" ;;
+ esac
+ add=-l$name
+ elif test yes = "$hardcode_automatic"; then
+ if test -n "$inst_prefix_dir" &&
+ test -f "$inst_prefix_dir$libdir/$linklib"; then
+ add=$inst_prefix_dir$libdir/$linklib
+ else
+ add=$libdir/$linklib
+ fi
+ else
+ # We cannot seem to hardcode it, guess we'll fake it.
+ add_dir=-L$libdir
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case $libdir in
+ [\\/]*)
+ func_append add_dir " -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
+ add=-l$name
+ fi
+
+ if test prog = "$linkmode"; then
+ test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+ test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ fi
+ fi
+ elif test prog = "$linkmode"; then
+ # Here we assume that one of hardcode_direct or hardcode_minus_L
+ # is not unsupported. This is valid on all known static and
+ # shared platforms.
+ if test unsupported != "$hardcode_direct"; then
+ test -n "$old_library" && linklib=$old_library
+ compile_deplibs="$dir/$linklib $compile_deplibs"
+ finalize_deplibs="$dir/$linklib $finalize_deplibs"
+ else
+ compile_deplibs="-l$name -L$dir $compile_deplibs"
+ finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+ fi
+ elif test yes = "$build_libtool_libs"; then
+ # Not a shared library
+ if test pass_all != "$deplibs_check_method"; then
+ # We're trying link a shared library against a static one
+ # but the system doesn't support it.
+
+ # Just print a warning and add the library to dependency_libs so
+ # that the program can be linked against the static library.
+ echo
+ $ECHO "*** Warning: This system cannot link to static lib archive $lib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have."
+ if test yes = "$module"; then
+ echo "*** But as you try to build a module library, libtool will still create "
+ echo "*** a static module, that should work as long as the dlopening application"
+ echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
+ if test -z "$global_symbol_pipe"; then
+ echo
+ echo "*** However, this would only work if libtool was able to extract symbol"
+ echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
+ echo "*** not find such a program. So, this module is probably useless."
+ echo "*** 'nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test no = "$build_old_libs"; then
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ else
+ deplibs="$dir/$old_library $deplibs"
+ link_static=yes
+ fi
+ fi # link shared/static library?
+
+ if test lib = "$linkmode"; then
+ if test -n "$dependency_libs" &&
+ { test yes != "$hardcode_into_libs" ||
+ test yes = "$build_old_libs" ||
+ test yes = "$link_static"; }; then
+ # Extract -R from dependency_libs
+ temp_deplibs=
+ for libdir in $dependency_libs; do
+ case $libdir in
+ -R*) func_stripname '-R' '' "$libdir"
+ temp_xrpath=$func_stripname_result
+ case " $xrpath " in
+ *" $temp_xrpath "*) ;;
+ *) func_append xrpath " $temp_xrpath";;
+ esac;;
+ *) func_append temp_deplibs " $libdir";;
+ esac
+ done
+ dependency_libs=$temp_deplibs
+ fi
+
+ func_append newlib_search_path " $absdir"
+ # Link against this library
+ test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+ # ... and its dependency_libs
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ newdependency_libs="$deplib $newdependency_libs"
+ case $deplib in
+ -L*) func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result";;
+ *) func_resolve_sysroot "$deplib" ;;
+ esac
+ if $opt_preserve_dup_deps; then
+ case "$tmp_libs " in
+ *" $func_resolve_sysroot_result "*)
+ func_append specialdeplibs " $func_resolve_sysroot_result" ;;
+ esac
+ fi
+ func_append tmp_libs " $func_resolve_sysroot_result"
+ done
+
+ if test no != "$link_all_deplibs"; then
+ # Add the search paths of all dependency libraries
+ for deplib in $dependency_libs; do
+ path=
+ case $deplib in
+ -L*) path=$deplib ;;
+ *.la)
+ func_resolve_sysroot "$deplib"
+ deplib=$func_resolve_sysroot_result
+ func_dirname "$deplib" "" "."
+ dir=$func_dirname_result
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ if test -z "$absdir"; then
+ func_warning "cannot determine absolute directory name of '$dir'"
+ absdir=$dir
+ fi
+ ;;
+ esac
+ if $GREP "^installed=no" $deplib > /dev/null; then
+ case $host in
+ *-*-darwin*)
+ depdepl=
+ eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+ if test -n "$deplibrary_names"; then
+ for tmp in $deplibrary_names; do
+ depdepl=$tmp
+ done
+ if test -f "$absdir/$objdir/$depdepl"; then
+ depdepl=$absdir/$objdir/$depdepl
+ darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+ if test -z "$darwin_install_name"; then
+ darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+ fi
+ func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
+ func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
+ path=
+ fi
+ fi
+ ;;
+ *)
+ path=-L$absdir/$objdir
+ ;;
+ esac
+ else
+ eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ test -z "$libdir" && \
+ func_fatal_error "'$deplib' is not a valid libtool archive"
+ test "$absdir" != "$libdir" && \
+ func_warning "'$deplib' seems to be moved"
+
+ path=-L$absdir
+ fi
+ ;;
+ esac
+ case " $deplibs " in
+ *" $path "*) ;;
+ *) deplibs="$path $deplibs" ;;
+ esac
+ done
+ fi # link_all_deplibs != no
+ fi # linkmode = lib
+ done # for deplib in $libs
+ if test link = "$pass"; then
+ if test prog = "$linkmode"; then
+ compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+ finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+ else
+ compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ fi
+ fi
+ dependency_libs=$newdependency_libs
+ if test dlpreopen = "$pass"; then
+ # Link the dlpreopened libraries before other libraries
+ for deplib in $save_deplibs; do
+ deplibs="$deplib $deplibs"
+ done
+ fi
+ if test dlopen != "$pass"; then
+ test conv = "$pass" || {
+ # Make sure lib_search_path contains only unique directories.
+ lib_search_path=
+ for dir in $newlib_search_path; do
+ case "$lib_search_path " in
+ *" $dir "*) ;;
+ *) func_append lib_search_path " $dir" ;;
+ esac
+ done
+ newlib_search_path=
+ }
+
+ if test prog,link = "$linkmode,$pass"; then
+ vars="compile_deplibs finalize_deplibs"
+ else
+ vars=deplibs
+ fi
+ for var in $vars dependency_libs; do
+ # Add libraries to $var in reverse order
+ eval tmp_libs=\"\$$var\"
+ new_libs=
+ for deplib in $tmp_libs; do
+ # FIXME: Pedantically, this is the right thing to do, so
+ # that some nasty dependency loop isn't accidentally
+ # broken:
+ #new_libs="$deplib $new_libs"
+ # Pragmatically, this seems to cause very few problems in
+ # practice:
+ case $deplib in
+ -L*) new_libs="$deplib $new_libs" ;;
+ -R*) ;;
+ *)
+ # And here is the reason: when a library appears more
+ # than once as an explicit dependence of a library, or
+ # is implicitly linked in more than once by the
+ # compiler, it is considered special, and multiple
+ # occurrences thereof are not removed. Compare this
+ # with having the same library being listed as a
+ # dependency of multiple other libraries: in this case,
+ # we know (pedantically, we assume) the library does not
+ # need to be listed more than once, so we keep only the
+ # last copy. This is not always right, but it is rare
+ # enough that we require users that really mean to play
+ # such unportable linking tricks to link the library
+ # using -Wl,-lname, so that libtool does not consider it
+ # for duplicate removal.
+ case " $specialdeplibs " in
+ *" $deplib "*) new_libs="$deplib $new_libs" ;;
+ *)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) new_libs="$deplib $new_libs" ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ done
+ tmp_libs=
+ for deplib in $new_libs; do
+ case $deplib in
+ -L*)
+ case " $tmp_libs " in
+ *" $deplib "*) ;;
+ *) func_append tmp_libs " $deplib" ;;
+ esac
+ ;;
+ *) func_append tmp_libs " $deplib" ;;
+ esac
+ done
+ eval $var=\"$tmp_libs\"
+ done # for var
+ fi
+
+ # Add Sun CC postdeps if required:
+ test CXX = "$tagname" && {
+ case $host_os in
+ linux*)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C++ 5.9
+ func_suncc_cstd_abi
+
+ if test no != "$suncc_use_cstd_abi"; then
+ func_append postdeps ' -library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+
+ solaris*)
+ func_cc_basename "$CC"
+ case $func_cc_basename_result in
+ CC* | sunCC*)
+ func_suncc_cstd_abi
+
+ if test no != "$suncc_use_cstd_abi"; then
+ func_append postdeps ' -library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ }
+
+ # Last step: remove runtime libs from dependency_libs
+ # (they stay in deplibs)
+ tmp_libs=
+ for i in $dependency_libs; do
+ case " $predeps $postdeps $compiler_lib_search_path " in
+ *" $i "*)
+ i=
+ ;;
+ esac
+ if test -n "$i"; then
+ func_append tmp_libs " $i"
+ fi
+ done
+ dependency_libs=$tmp_libs
+ done # for pass
+ if test prog = "$linkmode"; then
+ dlfiles=$newdlfiles
+ fi
+ if test prog = "$linkmode" || test lib = "$linkmode"; then
+ dlprefiles=$newdlprefiles
+ fi
+
+ case $linkmode in
+ oldlib)
+ if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+ func_warning "'-dlopen' is ignored for archives"
+ fi
+
+ case " $deplibs" in
+ *\ -l* | *\ -L*)
+ func_warning "'-l' and '-L' are ignored for archives" ;;
+ esac
+
+ test -n "$rpath" && \
+ func_warning "'-rpath' is ignored for archives"
+
+ test -n "$xrpath" && \
+ func_warning "'-R' is ignored for archives"
+
+ test -n "$vinfo" && \
+ func_warning "'-version-info/-version-number' is ignored for archives"
+
+ test -n "$release" && \
+ func_warning "'-release' is ignored for archives"
+
+ test -n "$export_symbols$export_symbols_regex" && \
+ func_warning "'-export-symbols' is ignored for archives"
+
+ # Now set the variables for building old libraries.
+ build_libtool_libs=no
+ oldlibs=$output
+ func_append objs "$old_deplibs"
+ ;;
+
+ lib)
+ # Make sure we only generate libraries of the form 'libNAME.la'.
+ case $outputname in
+ lib*)
+ func_stripname 'lib' '.la' "$outputname"
+ name=$func_stripname_result
+ eval shared_ext=\"$shrext_cmds\"
+ eval libname=\"$libname_spec\"
+ ;;
+ *)
+ test no = "$module" \
+ && func_fatal_help "libtool library '$output' must begin with 'lib'"
+
+ if test no != "$need_lib_prefix"; then
+ # Add the "lib" prefix for modules if required
+ func_stripname '' '.la' "$outputname"
+ name=$func_stripname_result
+ eval shared_ext=\"$shrext_cmds\"
+ eval libname=\"$libname_spec\"
+ else
+ func_stripname '' '.la' "$outputname"
+ libname=$func_stripname_result
+ fi
+ ;;
+ esac
+
+ if test -n "$objs"; then
+ if test pass_all != "$deplibs_check_method"; then
+ func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs"
+ else
+ echo
+ $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+ $ECHO "*** objects $objs is not portable!"
+ func_append libobjs " $objs"
+ fi
+ fi
+
+ test no = "$dlself" \
+ || func_warning "'-dlopen self' is ignored for libtool libraries"
+
+ set dummy $rpath
+ shift
+ test 1 -lt "$#" \
+ && func_warning "ignoring multiple '-rpath's for a libtool library"
+
+ install_libdir=$1
+
+ oldlibs=
+ if test -z "$rpath"; then
+ if test yes = "$build_libtool_libs"; then
+ # Building a libtool convenience library.
+ # Some compilers have problems with a '.al' extension so
+ # convenience libraries should have the same extension an
+ # archive normally would.
+ oldlibs="$output_objdir/$libname.$libext $oldlibs"
+ build_libtool_libs=convenience
+ build_old_libs=yes
+ fi
+
+ test -n "$vinfo" && \
+ func_warning "'-version-info/-version-number' is ignored for convenience libraries"
+
+ test -n "$release" && \
+ func_warning "'-release' is ignored for convenience libraries"
+ else
+
+ # Parse the version information argument.
+ save_ifs=$IFS; IFS=:
+ set dummy $vinfo 0 0 0
+ shift
+ IFS=$save_ifs
+
+ test -n "$7" && \
+ func_fatal_help "too many parameters to '-version-info'"
+
+ # convert absolute version numbers to libtool ages
+ # this retains compatibility with .la files and attempts
+ # to make the code below a bit more comprehensible
+
+ case $vinfo_number in
+ yes)
+ number_major=$1
+ number_minor=$2
+ number_revision=$3
+ #
+ # There are really only two kinds -- those that
+ # use the current revision as the major version
+ # and those that subtract age and use age as
+ # a minor version. But, then there is irix
+ # that has an extra 1 added just for fun
+ #
+ case $version_type in
+ # correct linux to gnu/linux during the next big refactor
+ darwin|freebsd-elf|linux|osf|windows|none)
+ func_arith $number_major + $number_minor
+ current=$func_arith_result
+ age=$number_minor
+ revision=$number_revision
+ ;;
+ freebsd-aout|qnx|sunos)
+ current=$number_major
+ revision=$number_minor
+ age=0
+ ;;
+ irix|nonstopux)
+ func_arith $number_major + $number_minor
+ current=$func_arith_result
+ age=$number_minor
+ revision=$number_minor
+ lt_irix_increment=no
+ ;;
+ *)
+ func_fatal_configuration "$modename: unknown library version type '$version_type'"
+ ;;
+ esac
+ ;;
+ no)
+ current=$1
+ revision=$2
+ age=$3
+ ;;
+ esac
+
+ # Check that each of the things are valid numbers.
+ case $current in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "CURRENT '$current' must be a nonnegative integer"
+ func_fatal_error "'$vinfo' is not valid version information"
+ ;;
+ esac
+
+ case $revision in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "REVISION '$revision' must be a nonnegative integer"
+ func_fatal_error "'$vinfo' is not valid version information"
+ ;;
+ esac
+
+ case $age in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "AGE '$age' must be a nonnegative integer"
+ func_fatal_error "'$vinfo' is not valid version information"
+ ;;
+ esac
+
+ if test "$age" -gt "$current"; then
+ func_error "AGE '$age' is greater than the current interface number '$current'"
+ func_fatal_error "'$vinfo' is not valid version information"
+ fi
+
+ # Calculate the version variables.
+ major=
+ versuffix=
+ verstring=
+ case $version_type in
+ none) ;;
+
+ darwin)
+ # Like Linux, but with the current version available in
+ # verstring for coding it into the library header
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix=$major.$age.$revision
+ # Darwin ld doesn't like 0 for these options...
+ func_arith $current + 1
+ minor_current=$func_arith_result
+ xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ # On Darwin other compilers
+ case $CC in
+ nagfor*)
+ verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+ ;;
+ *)
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ ;;
+ esac
+ ;;
+
+ freebsd-aout)
+ major=.$current
+ versuffix=.$current.$revision
+ ;;
+
+ freebsd-elf)
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix=$major.$age.$revision
+ ;;
+
+ irix | nonstopux)
+ if test no = "$lt_irix_increment"; then
+ func_arith $current - $age
+ else
+ func_arith $current - $age + 1
+ fi
+ major=$func_arith_result
+
+ case $version_type in
+ nonstopux) verstring_prefix=nonstopux ;;
+ *) verstring_prefix=sgi ;;
+ esac
+ verstring=$verstring_prefix$major.$revision
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$revision
+ while test 0 -ne "$loop"; do
+ func_arith $revision - $loop
+ iface=$func_arith_result
+ func_arith $loop - 1
+ loop=$func_arith_result
+ verstring=$verstring_prefix$major.$iface:$verstring
+ done
+
+ # Before this point, $major must not contain '.'.
+ major=.$major
+ versuffix=$major.$revision
+ ;;
+
+ linux) # correct to gnu/linux during the next big refactor
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix=$major.$age.$revision
+ ;;
+
+ osf)
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix=.$current.$age.$revision
+ verstring=$current.$age.$revision
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$age
+ while test 0 -ne "$loop"; do
+ func_arith $current - $loop
+ iface=$func_arith_result
+ func_arith $loop - 1
+ loop=$func_arith_result
+ verstring=$verstring:$iface.0
+ done
+
+ # Make executables depend on our current version.
+ func_append verstring ":$current.0"
+ ;;
+
+ qnx)
+ major=.$current
+ versuffix=.$current
+ ;;
+
+ sco)
+ major=.$current
+ versuffix=.$current
+ ;;
+
+ sunos)
+ major=.$current
+ versuffix=.$current.$revision
+ ;;
+
+ windows)
+ # Use '-' rather than '.', since we only want one
+ # extension on DOS 8.3 file systems.
+ func_arith $current - $age
+ major=$func_arith_result
+ versuffix=-$major
+ ;;
+
+ *)
+ func_fatal_configuration "unknown library version type '$version_type'"
+ ;;
+ esac
+
+ # Clear the version info if we defaulted, and they specified a release.
+ if test -z "$vinfo" && test -n "$release"; then
+ major=
+ case $version_type in
+ darwin)
+ # we can't check for "0.0" in archive_cmds due to quoting
+ # problems, so we reset it completely
+ verstring=
+ ;;
+ *)
+ verstring=0.0
+ ;;
+ esac
+ if test no = "$need_version"; then
+ versuffix=
+ else
+ versuffix=.0.0
+ fi
+ fi
+
+ # Remove version info from name if versioning should be avoided
+ if test yes,no = "$avoid_version,$need_version"; then
+ major=
+ versuffix=
+ verstring=
+ fi
+
+ # Check to see if the archive will have undefined symbols.
+ if test yes = "$allow_undefined"; then
+ if test unsupported = "$allow_undefined_flag"; then
+ if test yes = "$build_old_libs"; then
+ func_warning "undefined symbols not allowed in $host shared libraries; building static only"
+ build_libtool_libs=no
+ else
+ func_fatal_error "can't build $host shared library unless -no-undefined is specified"
+ fi
+ fi
+ else
+ # Don't allow undefined symbols.
+ allow_undefined_flag=$no_undefined_flag
+ fi
+
+ fi
+
+ func_generate_dlsyms "$libname" "$libname" :
+ func_append libobjs " $symfileobj"
+ test " " = "$libobjs" && libobjs=
+
+ if test relink != "$opt_mode"; then
+ # Remove our outputs, but don't remove object files since they
+ # may have been created when compiling PIC objects.
+ removelist=
+ tempremovelist=`$ECHO "$output_objdir/*"`
+ for p in $tempremovelist; do
+ case $p in
+ *.$objext | *.gcno)
+ ;;
+ $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
+ if test -n "$precious_files_regex"; then
+ if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+ then
+ continue
+ fi
+ fi
+ func_append removelist " $p"
+ ;;
+ *) ;;
+ esac
+ done
+ test -n "$removelist" && \
+ func_show_eval "${RM}r \$removelist"
+ fi
+
+ # Now set the variables for building old libraries.
+ if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
+ func_append oldlibs " $output_objdir/$libname.$libext"
+
+ # Transform .lo files to .o files.
+ oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
+ fi
+
+ # Eliminate all temporary directories.
+ #for path in $notinst_path; do
+ # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
+ # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
+ # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
+ #done
+
+ if test -n "$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ temp_xrpath=
+ for libdir in $xrpath; do
+ func_replace_sysroot "$libdir"
+ func_append temp_xrpath " -R$func_replace_sysroot_result"
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ done
+ if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
+ dependency_libs="$temp_xrpath $dependency_libs"
+ fi
+ fi
+
+ # Make sure dlfiles contains only unique files that won't be dlpreopened
+ old_dlfiles=$dlfiles
+ dlfiles=
+ for lib in $old_dlfiles; do
+ case " $dlprefiles $dlfiles " in
+ *" $lib "*) ;;
+ *) func_append dlfiles " $lib" ;;
+ esac
+ done
+
+ # Make sure dlprefiles contains only unique files
+ old_dlprefiles=$dlprefiles
+ dlprefiles=
+ for lib in $old_dlprefiles; do
+ case "$dlprefiles " in
+ *" $lib "*) ;;
+ *) func_append dlprefiles " $lib" ;;
+ esac
+ done
+
+ if test yes = "$build_libtool_libs"; then
+ if test -n "$rpath"; then
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
+ # these systems don't actually have a c library (as such)!
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C library is in the System framework
+ func_append deplibs " System.ltframework"
+ ;;
+ *-*-netbsd*)
+ # Don't link with libc until the a.out ld.so is fixed.
+ ;;
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ # Do not include libc due to us having libc/libc_r.
+ ;;
+ *-*-sco3.2v5* | *-*-sco5v6*)
+ # Causes problems with __ctype
+ ;;
+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+ # Compiler inserts libc in the correct place for threads to work
+ ;;
+ *)
+ # Add libc to deplibs on all other systems if necessary.
+ if test yes = "$build_libtool_need_lc"; then
+ func_append deplibs " -lc"
+ fi
+ ;;
+ esac
+ fi
+
+ # Transform deplibs into only deplibs that can be linked in shared.
+ name_save=$name
+ libname_save=$libname
+ release_save=$release
+ versuffix_save=$versuffix
+ major_save=$major
+ # I'm not sure if I'm treating the release correctly. I think
+ # release should show up in the -l (ie -lgmp5) so we don't want to
+ # add it in twice. Is that correct?
+ release=
+ versuffix=
+ major=
+ newdeplibs=
+ droppeddeps=no
+ case $deplibs_check_method in
+ pass_all)
+ # Don't check for shared/static. Everything works.
+ # This might be a little naive. We might want to check
+ # whether the library exists or not. But this is on
+ # osf3 & osf4 and I'm not really sure... Just
+ # implementing what was already the behavior.
+ newdeplibs=$deplibs
+ ;;
+ test_compile)
+ # This code stresses the "libraries are programs" paradigm to its
+ # limits. Maybe even breaks it. We compile a program, linking it
+ # against the deplibs as a proxy for the library. Then we can check
+ # whether they linked in statically or dynamically with ldd.
+ $opt_dry_run || $RM conftest.c
+ cat > conftest.c <<EOF
+ int main() { return 0; }
+EOF
+ $opt_dry_run || $RM conftest
+ if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+ ldd_output=`ldd conftest`
+ for i in $deplibs; do
+ case $i in
+ -l*)
+ func_stripname -l '' "$i"
+ name=$func_stripname_result
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ func_append newdeplibs " $i"
+ i=
+ ;;
+ esac
+ fi
+ if test -n "$i"; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ set dummy $deplib_matches; shift
+ deplib_match=$1
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
+ func_append newdeplibs " $i"
+ else
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which I believe you do not have"
+ echo "*** because a test_compile did reveal that the linker did not use it for"
+ echo "*** its dynamic dependency list that programs get resolved with at runtime."
+ fi
+ fi
+ ;;
+ *)
+ func_append newdeplibs " $i"
+ ;;
+ esac
+ done
+ else
+ # Error occurred in the first compile. Let's try to salvage
+ # the situation: Compile a separate program for each library.
+ for i in $deplibs; do
+ case $i in
+ -l*)
+ func_stripname -l '' "$i"
+ name=$func_stripname_result
+ $opt_dry_run || $RM conftest
+ if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+ ldd_output=`ldd conftest`
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ func_append newdeplibs " $i"
+ i=
+ ;;
+ esac
+ fi
+ if test -n "$i"; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ set dummy $deplib_matches; shift
+ deplib_match=$1
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
+ func_append newdeplibs " $i"
+ else
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because a test_compile did reveal that the linker did not use this one"
+ echo "*** as a dynamic dependency that programs can get resolved with at runtime."
+ fi
+ fi
+ else
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning! Library $i is needed by this library but I was not able to"
+ echo "*** make it link in! You will probably need to install it or some"
+ echo "*** library that it depends on before this library will be fully"
+ echo "*** functional. Installing it before continuing would be even better."
+ fi
+ ;;
+ *)
+ func_append newdeplibs " $i"
+ ;;
+ esac
+ done
+ fi
+ ;;
+ file_magic*)
+ set dummy $deplibs_check_method; shift
+ file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ for a_deplib in $deplibs; do
+ case $a_deplib in
+ -l*)
+ func_stripname -l '' "$a_deplib"
+ name=$func_stripname_result
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ func_append newdeplibs " $a_deplib"
+ a_deplib=
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib"; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ if test -n "$file_magic_glob"; then
+ libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
+ else
+ libnameglob=$libname
+ fi
+ test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ if test yes = "$want_nocaseglob"; then
+ shopt -s nocaseglob
+ potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+ $nocaseglob
+ else
+ potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+ fi
+ for potent_lib in $potential_libs; do
+ # Follow soft links.
+ if ls -lLd "$potent_lib" 2>/dev/null |
+ $GREP " -> " >/dev/null; then
+ continue
+ fi
+ # The statement above tries to avoid entering an
+ # endless loop below, in case of cyclic links.
+ # We might still enter an endless loop, since a link
+ # loop can be closed while we follow links,
+ # but so what?
+ potlib=$potent_lib
+ while test -h "$potlib" 2>/dev/null; do
+ potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
+ case $potliblink in
+ [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
+ *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
+ esac
+ done
+ if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+ $SED -e 10q |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ func_append newdeplibs " $a_deplib"
+ a_deplib=
+ break 2
+ fi
+ done
+ done
+ fi
+ if test -n "$a_deplib"; then
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib"; then
+ $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
+ else
+ $ECHO "*** with $libname and none of the candidates passed a file format test"
+ $ECHO "*** using a file magic. Last file checked: $potlib"
+ fi
+ fi
+ ;;
+ *)
+ # Add a -L argument.
+ func_append newdeplibs " $a_deplib"
+ ;;
+ esac
+ done # Gone through all deplibs.
+ ;;
+ match_pattern*)
+ set dummy $deplibs_check_method; shift
+ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ for a_deplib in $deplibs; do
+ case $a_deplib in
+ -l*)
+ func_stripname -l '' "$a_deplib"
+ name=$func_stripname_result
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ func_append newdeplibs " $a_deplib"
+ a_deplib=
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib"; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ for potent_lib in $potential_libs; do
+ potlib=$potent_lib # see symlink-check above in file_magic test
+ if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
+ $EGREP "$match_pattern_regex" > /dev/null; then
+ func_append newdeplibs " $a_deplib"
+ a_deplib=
+ break 2
+ fi
+ done
+ done
+ fi
+ if test -n "$a_deplib"; then
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib"; then
+ $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
+ else
+ $ECHO "*** with $libname and none of the candidates passed a file format test"
+ $ECHO "*** using a regex pattern. Last file checked: $potlib"
+ fi
+ fi
+ ;;
+ *)
+ # Add a -L argument.
+ func_append newdeplibs " $a_deplib"
+ ;;
+ esac
+ done # Gone through all deplibs.
+ ;;
+ none | unknown | *)
+ newdeplibs=
+ tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ for i in $predeps $postdeps; do
+ # can't use Xsed below, because $i might contain '/'
+ tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
+ done
+ fi
+ case $tmp_deplibs in
+ *[!\ \ ]*)
+ echo
+ if test none = "$deplibs_check_method"; then
+ echo "*** Warning: inter-library dependencies are not supported in this platform."
+ else
+ echo "*** Warning: inter-library dependencies are not known to be supported."
+ fi
+ echo "*** All declared inter-library dependencies are being dropped."
+ droppeddeps=yes
+ ;;
+ esac
+ ;;
+ esac
+ versuffix=$versuffix_save
+ major=$major_save
+ release=$release_save
+ libname=$libname_save
+ name=$name_save
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library with the System framework
+ newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
+ ;;
+ esac
+
+ if test yes = "$droppeddeps"; then
+ if test yes = "$module"; then
+ echo
+ echo "*** Warning: libtool could not satisfy all declared inter-library"
+ $ECHO "*** dependencies of module $libname. Therefore, libtool will create"
+ echo "*** a static module, that should work as long as the dlopening"
+ echo "*** application is linked with the -dlopen flag."
+ if test -z "$global_symbol_pipe"; then
+ echo
+ echo "*** However, this would only work if libtool was able to extract symbol"
+ echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
+ echo "*** not find such a program. So, this module is probably useless."
+ echo "*** 'nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test no = "$build_old_libs"; then
+ oldlibs=$output_objdir/$libname.$libext
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ else
+ echo "*** The inter-library dependencies that have been dropped here will be"
+ echo "*** automatically added whenever a program is linked with this library"
+ echo "*** or is declared to -dlopen it."
+
+ if test no = "$allow_undefined"; then
+ echo
+ echo "*** Since this library must not contain undefined symbols,"
+ echo "*** because either the platform does not support them or"
+ echo "*** it was explicitly requested with -no-undefined,"
+ echo "*** libtool will only create a static version of it."
+ if test no = "$build_old_libs"; then
+ oldlibs=$output_objdir/$libname.$libext
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ fi
+ fi
+ # Done checking deplibs!
+ deplibs=$newdeplibs
+ fi
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+ case $host in
+ *-*-darwin*)
+ newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ ;;
+ esac
+
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
+ for path in $notinst_path; do
+ case " $new_libs " in
+ *" -L$path/$objdir "*) ;;
+ *)
+ case " $deplibs " in
+ *" -L$path/$objdir "*)
+ func_append new_libs " -L$path/$objdir" ;;
+ esac
+ ;;
+ esac
+ done
+ for deplib in $deplibs; do
+ case $deplib in
+ -L*)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) func_append new_libs " $deplib" ;;
+ esac
+ ;;
+ *) func_append new_libs " $deplib" ;;
+ esac
+ done
+ deplibs=$new_libs
+
+ # All the library-specific variables (install_libdir is set above).
+ library_names=
+ old_library=
+ dlname=
+
+ # Test again, we may have decided not to build it any more
+ if test yes = "$build_libtool_libs"; then
+ # Remove $wl instances when linking with ld.
+ # FIXME: should test the right _cmds variable.
+ case $archive_cmds in
+ *\$LD\ *) wl= ;;
+ esac
+ if test yes = "$hardcode_into_libs"; then
+ # Hardcode the library paths
+ hardcode_libdirs=
+ dep_rpath=
+ rpath=$finalize_rpath
+ test relink = "$opt_mode" || rpath=$compile_rpath$rpath
+ for libdir in $rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ func_replace_sysroot "$libdir"
+ libdir=$func_replace_sysroot_result
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs=$libdir
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ func_append dep_rpath " $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) func_append perm_rpath " $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir=$hardcode_libdirs
+ eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
+ fi
+ if test -n "$runpath_var" && test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ func_append rpath "$dir:"
+ done
+ eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+ fi
+ test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+ fi
+
+ shlibpath=$finalize_shlibpath
+ test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
+ if test -n "$shlibpath"; then
+ eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+ fi
+
+ # Get the real and link names of the library.
+ eval shared_ext=\"$shrext_cmds\"
+ eval library_names=\"$library_names_spec\"
+ set dummy $library_names
+ shift
+ realname=$1
+ shift
+
+ if test -n "$soname_spec"; then
+ eval soname=\"$soname_spec\"
+ else
+ soname=$realname
+ fi
+ if test -z "$dlname"; then
+ dlname=$soname
+ fi
+
+ lib=$output_objdir/$realname
+ linknames=
+ for link
+ do
+ func_append linknames " $link"
+ done
+
+ # Use standard objects if they are pic
+ test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ test "X$libobjs" = "X " && libobjs=
+
+ delfiles=
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+ export_symbols=$output_objdir/$libname.uexp
+ func_append delfiles " $export_symbols"
+ fi
+
+ orig_export_symbols=
+ case $host_os in
+ cygwin* | mingw* | cegcc*)
+ if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+ # exporting using user supplied symfile
+ func_dll_def_p "$export_symbols" || {
+ # and it's NOT already a .def file. Must figure out
+ # which of the given symbols are data symbols and tag
+ # them as such. So, trigger use of export_symbols_cmds.
+ # export_symbols gets reassigned inside the "prepare
+ # the list of exported symbols" if statement, so the
+ # include_expsyms logic still works.
+ orig_export_symbols=$export_symbols
+ export_symbols=
+ always_export_symbols=yes
+ }
+ fi
+ ;;
+ esac
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then
+ func_verbose "generating symbol list for '$libname.la'"
+ export_symbols=$output_objdir/$libname.exp
+ $opt_dry_run || $RM $export_symbols
+ cmds=$export_symbols_cmds
+ save_ifs=$IFS; IFS='~'
+ for cmd1 in $cmds; do
+ IFS=$save_ifs
+ # Take the normal branch if the nm_file_list_spec branch
+ # doesn't work or if tool conversion is not needed.
+ case $nm_file_list_spec~$to_tool_file_cmd in
+ *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
+ try_normal_branch=yes
+ eval cmd=\"$cmd1\"
+ func_len " $cmd"
+ len=$func_len_result
+ ;;
+ *)
+ try_normal_branch=no
+ ;;
+ esac
+ if test yes = "$try_normal_branch" \
+ && { test "$len" -lt "$max_cmd_len" \
+ || test "$max_cmd_len" -le -1; }
+ then
+ func_show_eval "$cmd" 'exit $?'
+ skipped_export=false
+ elif test -n "$nm_file_list_spec"; then
+ func_basename "$output"
+ output_la=$func_basename_result
+ save_libobjs=$libobjs
+ save_output=$output
+ output=$output_objdir/$output_la.nm
+ func_to_tool_file "$output"
+ libobjs=$nm_file_list_spec$func_to_tool_file_result
+ func_append delfiles " $output"
+ func_verbose "creating $NM input file list: $output"
+ for obj in $save_libobjs; do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result"
+ done > "$output"
+ eval cmd=\"$cmd1\"
+ func_show_eval "$cmd" 'exit $?'
+ output=$save_output
+ libobjs=$save_libobjs
+ skipped_export=false
+ else
+ # The command line is too long to execute in one step.
+ func_verbose "using reloadable object file for export list..."
+ skipped_export=:
+ # Break out early, otherwise skipped_export may be
+ # set to false by a later but shorter cmd.
+ break
+ fi
+ done
+ IFS=$save_ifs
+ if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
+ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+ fi
+
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ tmp_export_symbols=$export_symbols
+ test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
+ $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+ fi
+
+ if test : != "$skipped_export" && test -n "$orig_export_symbols"; then
+ # The given exports_symbols file has to be filtered, so filter it.
+ func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
+ # FIXME: $output_objdir/$libname.filter potentially contains lots of
+ # 's' commands, which not all seds can handle. GNU sed should be fine
+ # though. Also, the filter scales superlinearly with the number of
+ # global variables. join(1) would be nice here, but unfortunately
+ # isn't a blessed tool.
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+ func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+ export_symbols=$output_objdir/$libname.def
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+ fi
+
+ tmp_deplibs=
+ for test_deplib in $deplibs; do
+ case " $convenience " in
+ *" $test_deplib "*) ;;
+ *)
+ func_append tmp_deplibs " $test_deplib"
+ ;;
+ esac
+ done
+ deplibs=$tmp_deplibs
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec" &&
+ test yes = "$compiler_needs_object" &&
+ test -z "$libobjs"; then
+ # extract the archives, so we have objects to list.
+ # TODO: could optimize this to just extract one archive.
+ whole_archive_flag_spec=
+ fi
+ if test -n "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ test "X$libobjs" = "X " && libobjs=
+ else
+ gentop=$output_objdir/${outputname}x
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $convenience
+ func_append libobjs " $func_extract_archives_result"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+ fi
+
+ if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
+ eval flag=\"$thread_safe_flag_spec\"
+ func_append linker_flags " $flag"
+ fi
+
+ # Make a backup of the uninstalled library when relinking
+ if test relink = "$opt_mode"; then
+ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+ fi
+
+ # Do each of the archive commands.
+ if test yes = "$module" && test -n "$module_cmds"; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ eval test_cmds=\"$module_expsym_cmds\"
+ cmds=$module_expsym_cmds
+ else
+ eval test_cmds=\"$module_cmds\"
+ cmds=$module_cmds
+ fi
+ else
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ eval test_cmds=\"$archive_expsym_cmds\"
+ cmds=$archive_expsym_cmds
+ else
+ eval test_cmds=\"$archive_cmds\"
+ cmds=$archive_cmds
+ fi
+ fi
+
+ if test : != "$skipped_export" &&
+ func_len " $test_cmds" &&
+ len=$func_len_result &&
+ test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ :
+ else
+ # The command line is too long to link in one step, link piecewise
+ # or, if using GNU ld and skipped_export is not :, use a linker
+ # script.
+
+ # Save the value of $output and $libobjs because we want to
+ # use them later. If we have whole_archive_flag_spec, we
+ # want to use save_libobjs as it was before
+ # whole_archive_flag_spec was expanded, because we can't
+ # assume the linker understands whole_archive_flag_spec.
+ # This may have to be revisited, in case too many
+ # convenience libraries get linked in and end up exceeding
+ # the spec.
+ if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ fi
+ save_output=$output
+ func_basename "$output"
+ output_la=$func_basename_result
+
+ # Clear the reloadable object creation command queue and
+ # initialize k to one.
+ test_cmds=
+ concat_cmds=
+ objlist=
+ last_robj=
+ k=1
+
+ if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
+ output=$output_objdir/$output_la.lnkscript
+ func_verbose "creating GNU ld script: $output"
+ echo 'INPUT (' > $output
+ for obj in $save_libobjs
+ do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result" >> $output
+ done
+ echo ')' >> $output
+ func_append delfiles " $output"
+ func_to_tool_file "$output"
+ output=$func_to_tool_file_result
+ elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
+ output=$output_objdir/$output_la.lnk
+ func_verbose "creating linker input file list: $output"
+ : > $output
+ set x $save_libobjs
+ shift
+ firstobj=
+ if test yes = "$compiler_needs_object"; then
+ firstobj="$1 "
+ shift
+ fi
+ for obj
+ do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result" >> $output
+ done
+ func_append delfiles " $output"
+ func_to_tool_file "$output"
+ output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
+ else
+ if test -n "$save_libobjs"; then
+ func_verbose "creating reloadable object files..."
+ output=$output_objdir/$output_la-$k.$objext
+ eval test_cmds=\"$reload_cmds\"
+ func_len " $test_cmds"
+ len0=$func_len_result
+ len=$len0
+
+ # Loop over the list of objects to be linked.
+ for obj in $save_libobjs
+ do
+ func_len " $obj"
+ func_arith $len + $func_len_result
+ len=$func_arith_result
+ if test -z "$objlist" ||
+ test "$len" -lt "$max_cmd_len"; then
+ func_append objlist " $obj"
+ else
+ # The command $test_cmds is almost too long, add a
+ # command to the queue.
+ if test 1 -eq "$k"; then
+ # The first file doesn't have a previous command to add.
+ reload_objs=$objlist
+ eval concat_cmds=\"$reload_cmds\"
+ else
+ # All subsequent reloadable object files will link in
+ # the last one created.
+ reload_objs="$objlist $last_robj"
+ eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
+ fi
+ last_robj=$output_objdir/$output_la-$k.$objext
+ func_arith $k + 1
+ k=$func_arith_result
+ output=$output_objdir/$output_la-$k.$objext
+ objlist=" $obj"
+ func_len " $last_robj"
+ func_arith $len0 + $func_len_result
+ len=$func_arith_result
+ fi
+ done
+ # Handle the remaining objects by creating one last
+ # reloadable object file. All subsequent reloadable object
+ # files will link in the last one created.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ reload_objs="$objlist $last_robj"
+ eval concat_cmds=\"\$concat_cmds$reload_cmds\"
+ if test -n "$last_robj"; then
+ eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+ fi
+ func_append delfiles " $output"
+
+ else
+ output=
+ fi
+
+ ${skipped_export-false} && {
+ func_verbose "generating symbol list for '$libname.la'"
+ export_symbols=$output_objdir/$libname.exp
+ $opt_dry_run || $RM $export_symbols
+ libobjs=$output
+ # Append the command to create the export file.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+ if test -n "$last_robj"; then
+ eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+ fi
+ }
+
+ test -n "$save_libobjs" &&
+ func_verbose "creating a temporary reloadable object file: $output"
+
+ # Loop through the commands generated above and execute them.
+ save_ifs=$IFS; IFS='~'
+ for cmd in $concat_cmds; do
+ IFS=$save_ifs
+ $opt_quiet || {
+ func_quote_for_expand "$cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ $opt_dry_run || eval "$cmd" || {
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+ if test relink = "$opt_mode"; then
+ ( cd "$output_objdir" && \
+ $RM "${realname}T" && \
+ $MV "${realname}U" "$realname" )
+ fi
+
+ exit $lt_exit
+ }
+ done
+ IFS=$save_ifs
+
+ if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+
+ ${skipped_export-false} && {
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ tmp_export_symbols=$export_symbols
+ test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
+ $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+ fi
+
+ if test -n "$orig_export_symbols"; then
+ # The given exports_symbols file has to be filtered, so filter it.
+ func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
+ # FIXME: $output_objdir/$libname.filter potentially contains lots of
+ # 's' commands, which not all seds can handle. GNU sed should be fine
+ # though. Also, the filter scales superlinearly with the number of
+ # global variables. join(1) would be nice here, but unfortunately
+ # isn't a blessed tool.
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+ func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+ export_symbols=$output_objdir/$libname.def
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+ fi
+ }
+
+ libobjs=$output
+ # Restore the value of output.
+ output=$save_output
+
+ if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+ # Expand the library linking commands again to reset the
+ # value of $libobjs for piecewise linking.
+
+ # Do each of the archive commands.
+ if test yes = "$module" && test -n "$module_cmds"; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ cmds=$module_expsym_cmds
+ else
+ cmds=$module_cmds
+ fi
+ else
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ cmds=$archive_expsym_cmds
+ else
+ cmds=$archive_cmds
+ fi
+ fi
+ fi
+
+ if test -n "$delfiles"; then
+ # Append the command to remove temporary files to $cmds.
+ eval cmds=\"\$cmds~\$RM $delfiles\"
+ fi
+
+ # Add any objects from preloaded convenience libraries
+ if test -n "$dlprefiles"; then
+ gentop=$output_objdir/${outputname}x
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $dlprefiles
+ func_append libobjs " $func_extract_archives_result"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+
+ save_ifs=$IFS; IFS='~'
+ for cmd in $cmds; do
+ IFS=$sp$nl
+ eval cmd=\"$cmd\"
+ IFS=$save_ifs
+ $opt_quiet || {
+ func_quote_for_expand "$cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ $opt_dry_run || eval "$cmd" || {
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+ if test relink = "$opt_mode"; then
+ ( cd "$output_objdir" && \
+ $RM "${realname}T" && \
+ $MV "${realname}U" "$realname" )
+ fi
+
+ exit $lt_exit
+ }
+ done
+ IFS=$save_ifs
+
+ # Restore the uninstalled library and exit
+ if test relink = "$opt_mode"; then
+ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+
+ if test -n "$convenience"; then
+ if test -z "$whole_archive_flag_spec"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ # Create links to the real library.
+ for linkname in $linknames; do
+ if test "$realname" != "$linkname"; then
+ func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
+ fi
+ done
+
+ # If -module or -export-dynamic was specified, set the dlname.
+ if test yes = "$module" || test yes = "$export_dynamic"; then
+ # On all known operating systems, these are identical.
+ dlname=$soname
+ fi
+ fi
+ ;;
+
+ obj)
+ if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+ func_warning "'-dlopen' is ignored for objects"
+ fi
+
+ case " $deplibs" in
+ *\ -l* | *\ -L*)
+ func_warning "'-l' and '-L' are ignored for objects" ;;
+ esac
+
+ test -n "$rpath" && \
+ func_warning "'-rpath' is ignored for objects"
+
+ test -n "$xrpath" && \
+ func_warning "'-R' is ignored for objects"
+
+ test -n "$vinfo" && \
+ func_warning "'-version-info' is ignored for objects"
+
+ test -n "$release" && \
+ func_warning "'-release' is ignored for objects"
+
+ case $output in
+ *.lo)
+ test -n "$objs$old_deplibs" && \
+ func_fatal_error "cannot build library object '$output' from non-libtool objects"
+
+ libobj=$output
+ func_lo2o "$libobj"
+ obj=$func_lo2o_result
+ ;;
+ *)
+ libobj=
+ obj=$output
+ ;;
+ esac
+
+ # Delete the old objects.
+ $opt_dry_run || $RM $obj $libobj
+
+ # Objects from convenience libraries. This assumes
+ # single-version convenience libraries. Whenever we create
+ # different ones for PIC/non-PIC, this we'll have to duplicate
+ # the extraction.
+ reload_conv_objs=
+ gentop=
+ # if reload_cmds runs $LD directly, get rid of -Wl from
+ # whole_archive_flag_spec and hope we can get by with turning comma
+ # into space.
+ case $reload_cmds in
+ *\$LD[\ \$]*) wl= ;;
+ esac
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec"; then
+ eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+ test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
+ reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags
+ else
+ gentop=$output_objdir/${obj}x
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $convenience
+ reload_conv_objs="$reload_objs $func_extract_archives_result"
+ fi
+ fi
+
+ # If we're not building shared, we need to use non_pic_objs
+ test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
+
+ # Create the old-style object.
+ reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
+
+ output=$obj
+ func_execute_cmds "$reload_cmds" 'exit $?'
+
+ # Exit if we aren't doing a library object file.
+ if test -z "$libobj"; then
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ test yes = "$build_libtool_libs" || {
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ # Create an invalid libtool object if no PIC, so that we don't
+ # accidentally link it into a program.
+ # $show "echo timestamp > $libobj"
+ # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
+ exit $EXIT_SUCCESS
+ }
+
+ if test -n "$pic_flag" || test default != "$pic_mode"; then
+ # Only do commands if we really have different PIC objects.
+ reload_objs="$libobjs $reload_conv_objs"
+ output=$libobj
+ func_execute_cmds "$reload_cmds" 'exit $?'
+ fi
+
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ exit $EXIT_SUCCESS
+ ;;
+
+ prog)
+ case $host in
+ *cygwin*) func_stripname '' '.exe' "$output"
+ output=$func_stripname_result.exe;;
+ esac
+ test -n "$vinfo" && \
+ func_warning "'-version-info' is ignored for programs"
+
+ test -n "$release" && \
+ func_warning "'-release' is ignored for programs"
+
+ $preload \
+ && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
+ && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library is the System framework
+ compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
+ finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
+ ;;
+ esac
+
+ case $host in
+ *-*-darwin*)
+ # Don't allow lazy linking, it breaks C++ global constructors
+ # But is supposedly fixed on 10.4 or later (yay!).
+ if test CXX = "$tagname"; then
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+ 10.[0123])
+ func_append compile_command " $wl-bind_at_load"
+ func_append finalize_command " $wl-bind_at_load"
+ ;;
+ esac
+ fi
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+ compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ ;;
+ esac
+
+
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
+ for path in $notinst_path; do
+ case " $new_libs " in
+ *" -L$path/$objdir "*) ;;
+ *)
+ case " $compile_deplibs " in
+ *" -L$path/$objdir "*)
+ func_append new_libs " -L$path/$objdir" ;;
+ esac
+ ;;
+ esac
+ done
+ for deplib in $compile_deplibs; do
+ case $deplib in
+ -L*)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) func_append new_libs " $deplib" ;;
+ esac
+ ;;
+ *) func_append new_libs " $deplib" ;;
+ esac
+ done
+ compile_deplibs=$new_libs
+
+
+ func_append compile_command " $compile_deplibs"
+ func_append finalize_command " $finalize_deplibs"
+
+ if test -n "$rpath$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ for libdir in $rpath $xrpath; do
+ # This is the magic to use -rpath.
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ done
+ fi
+
+ # Now hardcode the library paths
+ rpath=
+ hardcode_libdirs=
+ for libdir in $compile_rpath $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs=$libdir
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ func_append rpath " $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) func_append perm_rpath " $libdir" ;;
+ esac
+ fi
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
+ case :$dllsearchpath: in
+ *":$libdir:"*) ;;
+ ::) dllsearchpath=$libdir;;
+ *) func_append dllsearchpath ":$libdir";;
+ esac
+ case :$dllsearchpath: in
+ *":$testbindir:"*) ;;
+ ::) dllsearchpath=$testbindir;;
+ *) func_append dllsearchpath ":$testbindir";;
+ esac
+ ;;
+ esac
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir=$hardcode_libdirs
+ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ compile_rpath=$rpath
+
+ rpath=
+ hardcode_libdirs=
+ for libdir in $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs=$libdir
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ func_append rpath " $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$finalize_perm_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_perm_rpath " $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir=$hardcode_libdirs
+ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ finalize_rpath=$rpath
+
+ if test -n "$libobjs" && test yes = "$build_old_libs"; then
+ # Transform all the library objects into standard objects.
+ compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ fi
+
+ func_generate_dlsyms "$outputname" "@PROGRAM@" false
+
+ # template prelinking step
+ if test -n "$prelink_cmds"; then
+ func_execute_cmds "$prelink_cmds" 'exit $?'
+ fi
+
+ wrappers_required=:
+ case $host in
+ *cegcc* | *mingw32ce*)
+ # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
+ wrappers_required=false
+ ;;
+ *cygwin* | *mingw* )
+ test yes = "$build_libtool_libs" || wrappers_required=false
+ ;;
+ *)
+ if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
+ wrappers_required=false
+ fi
+ ;;
+ esac
+ $wrappers_required || {
+ # Replace the output file specification.
+ compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+ link_command=$compile_command$compile_rpath
+
+ # We have no uninstalled library dependencies, so finalize right now.
+ exit_status=0
+ func_show_eval "$link_command" 'exit_status=$?'
+
+ if test -n "$postlink_cmds"; then
+ func_to_tool_file "$output"
+ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+ func_execute_cmds "$postlink_cmds" 'exit $?'
+ fi
+
+ # Delete the generated files.
+ if test -f "$output_objdir/${outputname}S.$objext"; then
+ func_show_eval '$RM "$output_objdir/${outputname}S.$objext"'
+ fi
+
+ exit $exit_status
+ }
+
+ if test -n "$compile_shlibpath$finalize_shlibpath"; then
+ compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+ fi
+ if test -n "$finalize_shlibpath"; then
+ finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+ fi
+
+ compile_var=
+ finalize_var=
+ if test -n "$runpath_var"; then
+ if test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ func_append rpath "$dir:"
+ done
+ compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ if test -n "$finalize_perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $finalize_perm_rpath; do
+ func_append rpath "$dir:"
+ done
+ finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ fi
+
+ if test yes = "$no_install"; then
+ # We don't need to create a wrapper script.
+ link_command=$compile_var$compile_command$compile_rpath
+ # Replace the output file specification.
+ link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+ # Delete the old output file.
+ $opt_dry_run || $RM $output
+ # Link the executable and exit
+ func_show_eval "$link_command" 'exit $?'
+
+ if test -n "$postlink_cmds"; then
+ func_to_tool_file "$output"
+ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+ func_execute_cmds "$postlink_cmds" 'exit $?'
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ case $hardcode_action,$fast_install in
+ relink,*)
+ # Fast installation is not supported
+ link_command=$compile_var$compile_command$compile_rpath
+ relink_command=$finalize_var$finalize_command$finalize_rpath
+
+ func_warning "this platform does not like uninstalled shared libraries"
+ func_warning "'$output' will be relinked during installation"
+ ;;
+ *,yes)
+ link_command=$finalize_var$compile_command$finalize_rpath
+ relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
+ ;;
+ *,no)
+ link_command=$compile_var$compile_command$compile_rpath
+ relink_command=$finalize_var$finalize_command$finalize_rpath
+ ;;
+ *,needless)
+ link_command=$finalize_var$compile_command$finalize_rpath
+ relink_command=
+ ;;
+ esac
+
+ # Replace the output file specification.
+ link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+ # Delete the old output files.
+ $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+ func_show_eval "$link_command" 'exit $?'
+
+ if test -n "$postlink_cmds"; then
+ func_to_tool_file "$output_objdir/$outputname"
+ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+ func_execute_cmds "$postlink_cmds" 'exit $?'
+ fi
+
+ # Now create the wrapper script.
+ func_verbose "creating $output"
+
+ # Quote the relink command for shipping.
+ if test -n "$relink_command"; then
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ func_quote_for_eval "$var_value"
+ relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+ fi
+ done
+ relink_command="(cd `pwd`; $relink_command)"
+ relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+ fi
+
+ # Only actually do things if not in dry run mode.
+ $opt_dry_run || {
+ # win32 will think the script is a binary if it has
+ # a .exe suffix, so we strip it off here.
+ case $output in
+ *.exe) func_stripname '' '.exe' "$output"
+ output=$func_stripname_result ;;
+ esac
+ # test for cygwin because mv fails w/o .exe extensions
+ case $host in
+ *cygwin*)
+ exeext=.exe
+ func_stripname '' '.exe' "$outputname"
+ outputname=$func_stripname_result ;;
+ *) exeext= ;;
+ esac
+ case $host in
+ *cygwin* | *mingw* )
+ func_dirname_and_basename "$output" "" "."
+ output_name=$func_basename_result
+ output_path=$func_dirname_result
+ cwrappersource=$output_path/$objdir/lt-$output_name.c
+ cwrapper=$output_path/$output_name.exe
+ $RM $cwrappersource $cwrapper
+ trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+ func_emit_cwrapperexe_src > $cwrappersource
+
+ # The wrapper executable is built using the $host compiler,
+ # because it contains $host paths and files. If cross-
+ # compiling, it, like the target executable, must be
+ # executed on the $host or under an emulation environment.
+ $opt_dry_run || {
+ $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
+ $STRIP $cwrapper
+ }
+
+ # Now, create the wrapper script for func_source use:
+ func_ltwrapper_scriptname $cwrapper
+ $RM $func_ltwrapper_scriptname_result
+ trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
+ $opt_dry_run || {
+ # note: this script will not be executed, so do not chmod.
+ if test "x$build" = "x$host"; then
+ $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+ else
+ func_emit_wrapper no > $func_ltwrapper_scriptname_result
+ fi
+ }
+ ;;
+ * )
+ $RM $output
+ trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+
+ func_emit_wrapper no > $output
+ chmod +x $output
+ ;;
+ esac
+ }
+ exit $EXIT_SUCCESS
+ ;;
+ esac
+
+ # See if we need to build an old-fashioned archive.
+ for oldlib in $oldlibs; do
+
+ case $build_libtool_libs in
+ convenience)
+ oldobjs="$libobjs_save $symfileobj"
+ addlibs=$convenience
+ build_libtool_libs=no
+ ;;
+ module)
+ oldobjs=$libobjs_save
+ addlibs=$old_convenience
+ build_libtool_libs=no
+ ;;
+ *)
+ oldobjs="$old_deplibs $non_pic_objects"
+ $preload && test -f "$symfileobj" \
+ && func_append oldobjs " $symfileobj"
+ addlibs=$old_convenience
+ ;;
+ esac
+
+ if test -n "$addlibs"; then
+ gentop=$output_objdir/${outputname}x
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $addlibs
+ func_append oldobjs " $func_extract_archives_result"
+ fi
+
+ # Do each command in the archive commands.
+ if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then
+ cmds=$old_archive_from_new_cmds
+ else
+
+ # Add any objects from preloaded convenience libraries
+ if test -n "$dlprefiles"; then
+ gentop=$output_objdir/${outputname}x
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $dlprefiles
+ func_append oldobjs " $func_extract_archives_result"
+ fi
+
+ # POSIX demands no paths to be encoded in archives. We have
+ # to avoid creating archives with duplicate basenames if we
+ # might have to extract them afterwards, e.g., when creating a
+ # static archive out of a convenience library, or when linking
+ # the entirety of a libtool archive into another (currently
+ # not supported by libtool).
+ if (for obj in $oldobjs
+ do
+ func_basename "$obj"
+ $ECHO "$func_basename_result"
+ done | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ echo "copying selected object files to avoid basename conflicts..."
+ gentop=$output_objdir/${outputname}x
+ func_append generated " $gentop"
+ func_mkdir_p "$gentop"
+ save_oldobjs=$oldobjs
+ oldobjs=
+ counter=1
+ for obj in $save_oldobjs
+ do
+ func_basename "$obj"
+ objbase=$func_basename_result
+ case " $oldobjs " in
+ " ") oldobjs=$obj ;;
+ *[\ /]"$objbase "*)
+ while :; do
+ # Make sure we don't pick an alternate name that also
+ # overlaps.
+ newobj=lt$counter-$objbase
+ func_arith $counter + 1
+ counter=$func_arith_result
+ case " $oldobjs " in
+ *[\ /]"$newobj "*) ;;
+ *) if test ! -f "$gentop/$newobj"; then break; fi ;;
+ esac
+ done
+ func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+ func_append oldobjs " $gentop/$newobj"
+ ;;
+ *) func_append oldobjs " $obj" ;;
+ esac
+ done
+ fi
+ func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+ tool_oldlib=$func_to_tool_file_result
+ eval cmds=\"$old_archive_cmds\"
+
+ func_len " $cmds"
+ len=$func_len_result
+ if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ cmds=$old_archive_cmds
+ elif test -n "$archiver_list_spec"; then
+ func_verbose "using command file archive linking..."
+ for obj in $oldobjs
+ do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result"
+ done > $output_objdir/$libname.libcmd
+ func_to_tool_file "$output_objdir/$libname.libcmd"
+ oldobjs=" $archiver_list_spec$func_to_tool_file_result"
+ cmds=$old_archive_cmds
+ else
+ # the command line is too long to link in one step, link in parts
+ func_verbose "using piecewise archive linking..."
+ save_RANLIB=$RANLIB
+ RANLIB=:
+ objlist=
+ concat_cmds=
+ save_oldobjs=$oldobjs
+ oldobjs=
+ # Is there a better way of finding the last object in the list?
+ for obj in $save_oldobjs
+ do
+ last_oldobj=$obj
+ done
+ eval test_cmds=\"$old_archive_cmds\"
+ func_len " $test_cmds"
+ len0=$func_len_result
+ len=$len0
+ for obj in $save_oldobjs
+ do
+ func_len " $obj"
+ func_arith $len + $func_len_result
+ len=$func_arith_result
+ func_append objlist " $obj"
+ if test "$len" -lt "$max_cmd_len"; then
+ :
+ else
+ # the above command should be used before it gets too long
+ oldobjs=$objlist
+ if test "$obj" = "$last_oldobj"; then
+ RANLIB=$save_RANLIB
+ fi
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
+ objlist=
+ len=$len0
+ fi
+ done
+ RANLIB=$save_RANLIB
+ oldobjs=$objlist
+ if test -z "$oldobjs"; then
+ eval cmds=\"\$concat_cmds\"
+ else
+ eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+ fi
+ fi
+ fi
+ func_execute_cmds "$cmds" 'exit $?'
+ done
+
+ test -n "$generated" && \
+ func_show_eval "${RM}r$generated"
+
+ # Now create the libtool archive.
+ case $output in
+ *.la)
+ old_library=
+ test yes = "$build_old_libs" && old_library=$libname.$libext
+ func_verbose "creating $output"
+
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ func_quote_for_eval "$var_value"
+ relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+ fi
+ done
+ # Quote the link command for shipping.
+ relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+ relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+ if test yes = "$hardcode_automatic"; then
+ relink_command=
+ fi
+
+ # Only create the output if not a dry run.
+ $opt_dry_run || {
+ for installed in no yes; do
+ if test yes = "$installed"; then
+ if test -z "$install_libdir"; then
+ break
+ fi
+ output=$output_objdir/${outputname}i
+ # Replace all uninstalled libtool libraries with the installed ones
+ newdependency_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ *.la)
+ func_basename "$deplib"
+ name=$func_basename_result
+ func_resolve_sysroot "$deplib"
+ eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
+ test -z "$libdir" && \
+ func_fatal_error "'$deplib' is not a valid libtool archive"
+ func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
+ ;;
+ -L*)
+ func_stripname -L '' "$deplib"
+ func_replace_sysroot "$func_stripname_result"
+ func_append newdependency_libs " -L$func_replace_sysroot_result"
+ ;;
+ -R*)
+ func_stripname -R '' "$deplib"
+ func_replace_sysroot "$func_stripname_result"
+ func_append newdependency_libs " -R$func_replace_sysroot_result"
+ ;;
+ *) func_append newdependency_libs " $deplib" ;;
+ esac
+ done
+ dependency_libs=$newdependency_libs
+ newdlfiles=
+
+ for lib in $dlfiles; do
+ case $lib in
+ *.la)
+ func_basename "$lib"
+ name=$func_basename_result
+ eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ test -z "$libdir" && \
+ func_fatal_error "'$lib' is not a valid libtool archive"
+ func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
+ ;;
+ *) func_append newdlfiles " $lib" ;;
+ esac
+ done
+ dlfiles=$newdlfiles
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ case $lib in
+ *.la)
+ # Only pass preopened files to the pseudo-archive (for
+ # eventual linking with the app. that links it) if we
+ # didn't already link the preopened objects directly into
+ # the library:
+ func_basename "$lib"
+ name=$func_basename_result
+ eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ test -z "$libdir" && \
+ func_fatal_error "'$lib' is not a valid libtool archive"
+ func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
+ ;;
+ esac
+ done
+ dlprefiles=$newdlprefiles
+ else
+ newdlfiles=
+ for lib in $dlfiles; do
+ case $lib in
+ [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
+ *) abs=`pwd`"/$lib" ;;
+ esac
+ func_append newdlfiles " $abs"
+ done
+ dlfiles=$newdlfiles
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ case $lib in
+ [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
+ *) abs=`pwd`"/$lib" ;;
+ esac
+ func_append newdlprefiles " $abs"
+ done
+ dlprefiles=$newdlprefiles
+ fi
+ $RM $output
+ # place dlname in correct position for cygwin
+ # In fact, it would be nice if we could use this code for all target
+ # systems that can't hard-code library paths into their executables
+ # and that have no shared library path variable independent of PATH,
+ # but it turns out we can't easily determine that from inspecting
+ # libtool variables, so we have to hard-code the OSs to which it
+ # applies here; at the moment, that means platforms that use the PE
+ # object format with DLL files. See the long comment at the top of
+ # tests/bindir.at for full details.
+ tdlname=$dlname
+ case $host,$output,$installed,$module,$dlname in
+ *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
+ # If a -bindir argument was supplied, place the dll there.
+ if test -n "$bindir"; then
+ func_relative_path "$install_libdir" "$bindir"
+ tdlname=$func_relative_path_result/$dlname
+ else
+ # Otherwise fall back on heuristic.
+ tdlname=../bin/$dlname
+ fi
+ ;;
+ esac
+ $ECHO > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Linker flags that cannot go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+ if test no,yes = "$installed,$need_relink"; then
+ $ECHO >> $output "\
+relink_command=\"$relink_command\""
+ fi
+ done
+ }
+
+ # Do a symbolic link so that the libtool archive can be found in
+ # LD_LIBRARY_PATH before the program is installed.
+ func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+ ;;
+ esac
+ exit $EXIT_SUCCESS
+}
+
+if test link = "$opt_mode" || test relink = "$opt_mode"; then
+ func_mode_link ${1+"$@"}
+fi
+
+
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+ $debug_cmd
+
+ RM=$nonopt
+ files=
+ rmforce=false
+ exit_status=0
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic=$magic
+
+ for arg
+ do
+ case $arg in
+ -f) func_append RM " $arg"; rmforce=: ;;
+ -*) func_append RM " $arg" ;;
+ *) func_append files " $arg" ;;
+ esac
+ done
+
+ test -z "$RM" && \
+ func_fatal_help "you must specify an RM program"
+
+ rmdirs=
+
+ for file in $files; do
+ func_dirname "$file" "" "."
+ dir=$func_dirname_result
+ if test . = "$dir"; then
+ odir=$objdir
+ else
+ odir=$dir/$objdir
+ fi
+ func_basename "$file"
+ name=$func_basename_result
+ test uninstall = "$opt_mode" && odir=$dir
+
+ # Remember odir for removal later, being careful to avoid duplicates
+ if test clean = "$opt_mode"; then
+ case " $rmdirs " in
+ *" $odir "*) ;;
+ *) func_append rmdirs " $odir" ;;
+ esac
+ fi
+
+ # Don't error if the file doesn't exist and rm -f was used.
+ if { test -L "$file"; } >/dev/null 2>&1 ||
+ { test -h "$file"; } >/dev/null 2>&1 ||
+ test -f "$file"; then
+ :
+ elif test -d "$file"; then
+ exit_status=1
+ continue
+ elif $rmforce; then
+ continue
+ fi
+
+ rmfiles=$file
+
+ case $name in
+ *.la)
+ # Possibly a libtool archive, so verify it.
+ if func_lalib_p "$file"; then
+ func_source $dir/$name
+
+ # Delete the libtool libraries and symlinks.
+ for n in $library_names; do
+ func_append rmfiles " $odir/$n"
+ done
+ test -n "$old_library" && func_append rmfiles " $odir/$old_library"
+
+ case $opt_mode in
+ clean)
+ case " $library_names " in
+ *" $dlname "*) ;;
+ *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
+ esac
+ test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
+ ;;
+ uninstall)
+ if test -n "$library_names"; then
+ # Do each command in the postuninstall commands.
+ func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1'
+ fi
+
+ if test -n "$old_library"; then
+ # Do each command in the old_postuninstall commands.
+ func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
+ fi
+ # FIXME: should reinstall the best remaining shared library.
+ ;;
+ esac
+ fi
+ ;;
+
+ *.lo)
+ # Possibly a libtool object, so verify it.
+ if func_lalib_p "$file"; then
+
+ # Read the .lo file
+ func_source $dir/$name
+
+ # Add PIC object to the list of files to remove.
+ if test -n "$pic_object" && test none != "$pic_object"; then
+ func_append rmfiles " $dir/$pic_object"
+ fi
+
+ # Add non-PIC object to the list of files to remove.
+ if test -n "$non_pic_object" && test none != "$non_pic_object"; then
+ func_append rmfiles " $dir/$non_pic_object"
+ fi
+ fi
+ ;;
+
+ *)
+ if test clean = "$opt_mode"; then
+ noexename=$name
+ case $file in
+ *.exe)
+ func_stripname '' '.exe' "$file"
+ file=$func_stripname_result
+ func_stripname '' '.exe' "$name"
+ noexename=$func_stripname_result
+ # $file with .exe has already been added to rmfiles,
+ # add $file without .exe
+ func_append rmfiles " $file"
+ ;;
+ esac
+ # Do a test to see if this is a libtool program.
+ if func_ltwrapper_p "$file"; then
+ if func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ relink_command=
+ func_source $func_ltwrapper_scriptname_result
+ func_append rmfiles " $func_ltwrapper_scriptname_result"
+ else
+ relink_command=
+ func_source $dir/$noexename
+ fi
+
+ # note $name still contains .exe if it was in $file originally
+ # as does the version of $file that was added into $rmfiles
+ func_append rmfiles " $odir/$name $odir/${name}S.$objext"
+ if test yes = "$fast_install" && test -n "$relink_command"; then
+ func_append rmfiles " $odir/lt-$name"
+ fi
+ if test "X$noexename" != "X$name"; then
+ func_append rmfiles " $odir/lt-$noexename.c"
+ fi
+ fi
+ fi
+ ;;
+ esac
+ func_show_eval "$RM $rmfiles" 'exit_status=1'
+ done
+
+ # Try to remove the $objdir's in the directories where we deleted files
+ for dir in $rmdirs; do
+ if test -d "$dir"; then
+ func_show_eval "rmdir $dir >/dev/null 2>&1"
+ fi
+ done
+
+ exit $exit_status
+}
+
+if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
+ func_mode_uninstall ${1+"$@"}
+fi
+
+test -z "$opt_mode" && {
+ help=$generic_help
+ func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+ func_fatal_help "invalid operation mode '$opt_mode'"
+
+if test -n "$exec_cmd"; then
+ eval exec "$exec_cmd"
+ exit $EXIT_FAILURE
+fi
+
+exit $exit_status
+
+
+# The TAGs below are defined such that we never get into a situation
+# where we disable both kinds of libraries. Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them. This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration. But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
diff --git a/man/Makefile.am b/man/Makefile.am
new file mode 100644
index 0000000..8b64feb
--- /dev/null
+++ b/man/Makefile.am
@@ -0,0 +1,222 @@
+
+# subdirectories for translated manual pages
+if USE_NLS
+SUBDIRS = po cs da de es fi fr hu id it ja ko pl pt_BR ru sv tr zh_CN zh_TW
+else
+SUBDIRS =
+endif
+
+man_MANS = \
+ man1/chage.1 \
+ man1/chfn.1 \
+ man8/chgpasswd.8 \
+ man8/chpasswd.8 \
+ man1/chsh.1 \
+ man1/expiry.1 \
+ man5/faillog.5 \
+ man8/faillog.8 \
+ man3/getspnam.3 \
+ man1/gpasswd.1 \
+ man8/groupadd.8 \
+ man8/groupdel.8 \
+ man8/groupmems.8 \
+ man8/groupmod.8 \
+ man1/groups.1 \
+ man8/grpck.8 \
+ man8/grpconv.8 \
+ man8/grpunconv.8 \
+ man5/gshadow.5 \
+ man8/lastlog.8 \
+ man1/login.1 \
+ man5/login.defs.5 \
+ man8/logoutd.8 \
+ man1/newgrp.1 \
+ man8/newusers.8 \
+ man8/nologin.8 \
+ man1/passwd.1 \
+ man5/passwd.5 \
+ man8/pwck.8 \
+ man8/pwconv.8 \
+ man8/pwunconv.8 \
+ man1/sg.1 \
+ man3/shadow.3 \
+ man5/shadow.5 \
+ man5/suauth.5 \
+ man8/useradd.8 \
+ man8/userdel.8 \
+ man8/usermod.8 \
+ man8/vigr.8 \
+ man8/vipw.8
+
+man_nopam = \
+ man5/limits.5 \
+ man5/login.access.5 \
+ man5/porttime.5
+
+if WITH_SU
+man_MANS += man1/su.1
+endif
+
+if !USE_PAM
+man_MANS += $(man_nopam)
+endif
+
+man_subids = \
+ man1/newgidmap.1 \
+ man1/newuidmap.1 \
+ man5/subgid.5 \
+ man5/subuid.5
+
+if ENABLE_SUBIDS
+man_MANS += $(man_subids)
+endif
+
+man_XMANS = \
+ chage.1.xml \
+ chfn.1.xml \
+ chgpasswd.8.xml \
+ chpasswd.8.xml \
+ chsh.1.xml \
+ expiry.1.xml \
+ faillog.5.xml \
+ faillog.8.xml \
+ gpasswd.1.xml \
+ groupadd.8.xml \
+ groupdel.8.xml \
+ groupmems.8.xml \
+ groupmod.8.xml \
+ groups.1.xml \
+ grpck.8.xml \
+ gshadow.5.xml \
+ lastlog.8.xml \
+ limits.5.xml \
+ login.1.xml \
+ login.access.5.xml \
+ login.defs.5.xml \
+ logoutd.8.xml \
+ newgidmap.1.xml \
+ newgrp.1.xml \
+ newuidmap.1.xml \
+ newusers.8.xml \
+ nologin.8.xml \
+ passwd.1.xml \
+ passwd.5.xml \
+ porttime.5.xml \
+ pwck.8.xml \
+ pwconv.8.xml \
+ shadow.3.xml \
+ shadow.5.xml \
+ sg.1.xml \
+ su.1.xml \
+ suauth.5.xml \
+ subgid.5.xml \
+ subuid.5.xml \
+ useradd.8.xml \
+ userdel.8.xml \
+ usermod.8.xml \
+ vipw.8.xml
+
+login_defs_v = \
+ CHFN_AUTH.xml \
+ CHFN_RESTRICT.xml \
+ CHSH_AUTH.xml \
+ CONSOLE.xml \
+ CONSOLE_GROUPS.xml \
+ CREATE_HOME.xml \
+ DEFAULT_HOME.xml \
+ ENCRYPT_METHOD.xml \
+ ENV_HZ.xml \
+ ENVIRON_FILE.xml \
+ ENV_PATH.xml \
+ ENV_SUPATH.xml \
+ ENV_TZ.xml \
+ ERASECHAR.xml \
+ FAIL_DELAY.xml \
+ FAILLOG_ENAB.xml \
+ FAKE_SHELL.xml \
+ FTMP_FILE.xml \
+ GID_MAX.xml \
+ HUSHLOGIN_FILE.xml \
+ ISSUE_FILE.xml \
+ KILLCHAR.xml \
+ LASTLOG_ENAB.xml \
+ LASTLOG_UID_MAX.xml \
+ LOGIN_RETRIES.xml \
+ LOGIN_STRING.xml \
+ LOGIN_TIMEOUT.xml \
+ LOG_OK_LOGINS.xml \
+ LOG_UNKFAIL_ENAB.xml \
+ MAIL_CHECK_ENAB.xml \
+ MAIL_DIR.xml \
+ MAX_MEMBERS_PER_GROUP.xml \
+ MD5_CRYPT_ENAB.xml \
+ MOTD_FILE.xml \
+ NOLOGINS_FILE.xml \
+ OBSCURE_CHECKS_ENAB.xml \
+ PASS_ALWAYS_WARN.xml \
+ PASS_CHANGE_TRIES.xml \
+ PASS_MAX_DAYS.xml \
+ PASS_MAX_LEN.xml \
+ PASS_MIN_DAYS.xml \
+ PASS_WARN_AGE.xml \
+ PORTTIME_CHECKS_ENAB.xml \
+ QUOTAS_ENAB.xml \
+ SHA_CRYPT_MIN_ROUNDS.xml \
+ SULOG_FILE.xml \
+ SU_NAME.xml \
+ SU_WHEEL_ONLY.xml \
+ SYSLOG_SG_ENAB.xml \
+ SYSLOG_SU_ENAB.xml \
+ TCB_AUTH_GROUP.xml \
+ TCB_SYMLINKS.xml \
+ TTYGROUP.xml \
+ TTYTYPE_FILE.xml \
+ UID_MAX.xml \
+ ULIMIT.xml \
+ UMASK.xml \
+ USERDEL_CMD.xml \
+ USERGROUPS_ENAB.xml \
+ USE_TCB.xml \
+ SUB_GID_COUNT.xml \
+ SUB_UID_COUNT.xml \
+ SYS_GID_MAX.xml \
+ SYS_UID_MAX.xml
+
+EXTRA_DIST = \
+ $(man_MANS) \
+ $(man_XMANS) \
+ $(addprefix login.defs.d/,$(login_defs_v)) \
+ man1/id.1 \
+ id.1.xml \
+ man8/sulogin.8 \
+ sulogin.8.xml \
+ generate_mans.mak \
+ generate_translations.mak
+
+if USE_PAM
+EXTRA_DIST += $(man_nopam)
+endif
+
+if !ENABLE_SUBIDS
+EXTRA_DIST += $(man_subids)
+endif
+
+generate_mans.deps: *.xml
+ echo "# This file is generated" > $@
+ awk 'BEGIN{FS="\"";} /^<!ENTITY .* * SYSTEM ".*">$$/{ f=FILENAME; sub(/.xml/,"",f); print "man" substr(f, length (f)) "/" f ": " $$2 }' $(man_XMANS) >> $@
+
+if ENABLE_REGENERATE_MAN
+
+@ENABLE_REGENERATE_MAN_TRUE@include generate_mans.deps
+
+include generate_mans.mak
+
+CLEANFILES = $(man_MANS) man1/id.1 man8/sulogin.8
+
+else
+$(man_MANS):
+ @echo ""
+ @echo "Error: you need to run configure with '--enable-man'"
+ @echo " in order to regenerate man pages."
+ @echo ""
+endif
diff --git a/man/Makefile.in b/man/Makefile.in
new file mode 100644
index 0000000..dd886fb
--- /dev/null
+++ b/man/Makefile.in
@@ -0,0 +1,1073 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@WITH_SU_TRUE@am__append_1 = man1/su.1
+@USE_PAM_FALSE@am__append_2 = $(man_nopam)
+@ENABLE_SUBIDS_TRUE@am__append_3 = $(man_subids)
+@USE_PAM_TRUE@am__append_4 = $(man_nopam)
+@ENABLE_SUBIDS_FALSE@am__append_5 = $(man_subids)
+subdir = man
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = config.xml
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" \
+ "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"
+man3dir = $(mandir)/man3
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir distdir-am
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = po cs da de es fi fr hu id it ja ko pl pt_BR ru sv tr \
+ zh_CN zh_TW
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.xml.in \
+ $(srcdir)/generate_mans.mak
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+@USE_NLS_FALSE@SUBDIRS =
+
+# subdirectories for translated manual pages
+@USE_NLS_TRUE@SUBDIRS = po cs da de es fi fr hu id it ja ko pl pt_BR ru sv tr zh_CN zh_TW
+man_MANS = man1/chage.1 man1/chfn.1 man8/chgpasswd.8 man8/chpasswd.8 \
+ man1/chsh.1 man1/expiry.1 man5/faillog.5 man8/faillog.8 \
+ man3/getspnam.3 man1/gpasswd.1 man8/groupadd.8 man8/groupdel.8 \
+ man8/groupmems.8 man8/groupmod.8 man1/groups.1 man8/grpck.8 \
+ man8/grpconv.8 man8/grpunconv.8 man5/gshadow.5 man8/lastlog.8 \
+ man1/login.1 man5/login.defs.5 man8/logoutd.8 man1/newgrp.1 \
+ man8/newusers.8 man8/nologin.8 man1/passwd.1 man5/passwd.5 \
+ man8/pwck.8 man8/pwconv.8 man8/pwunconv.8 man1/sg.1 \
+ man3/shadow.3 man5/shadow.5 man5/suauth.5 man8/useradd.8 \
+ man8/userdel.8 man8/usermod.8 man8/vigr.8 man8/vipw.8 \
+ $(am__append_1) $(am__append_2) $(am__append_3)
+man_nopam = \
+ man5/limits.5 \
+ man5/login.access.5 \
+ man5/porttime.5
+
+man_subids = \
+ man1/newgidmap.1 \
+ man1/newuidmap.1 \
+ man5/subgid.5 \
+ man5/subuid.5
+
+man_XMANS = \
+ chage.1.xml \
+ chfn.1.xml \
+ chgpasswd.8.xml \
+ chpasswd.8.xml \
+ chsh.1.xml \
+ expiry.1.xml \
+ faillog.5.xml \
+ faillog.8.xml \
+ gpasswd.1.xml \
+ groupadd.8.xml \
+ groupdel.8.xml \
+ groupmems.8.xml \
+ groupmod.8.xml \
+ groups.1.xml \
+ grpck.8.xml \
+ gshadow.5.xml \
+ lastlog.8.xml \
+ limits.5.xml \
+ login.1.xml \
+ login.access.5.xml \
+ login.defs.5.xml \
+ logoutd.8.xml \
+ newgidmap.1.xml \
+ newgrp.1.xml \
+ newuidmap.1.xml \
+ newusers.8.xml \
+ nologin.8.xml \
+ passwd.1.xml \
+ passwd.5.xml \
+ porttime.5.xml \
+ pwck.8.xml \
+ pwconv.8.xml \
+ shadow.3.xml \
+ shadow.5.xml \
+ sg.1.xml \
+ su.1.xml \
+ suauth.5.xml \
+ subgid.5.xml \
+ subuid.5.xml \
+ useradd.8.xml \
+ userdel.8.xml \
+ usermod.8.xml \
+ vipw.8.xml
+
+login_defs_v = \
+ CHFN_AUTH.xml \
+ CHFN_RESTRICT.xml \
+ CHSH_AUTH.xml \
+ CONSOLE.xml \
+ CONSOLE_GROUPS.xml \
+ CREATE_HOME.xml \
+ DEFAULT_HOME.xml \
+ ENCRYPT_METHOD.xml \
+ ENV_HZ.xml \
+ ENVIRON_FILE.xml \
+ ENV_PATH.xml \
+ ENV_SUPATH.xml \
+ ENV_TZ.xml \
+ ERASECHAR.xml \
+ FAIL_DELAY.xml \
+ FAILLOG_ENAB.xml \
+ FAKE_SHELL.xml \
+ FTMP_FILE.xml \
+ GID_MAX.xml \
+ HUSHLOGIN_FILE.xml \
+ ISSUE_FILE.xml \
+ KILLCHAR.xml \
+ LASTLOG_ENAB.xml \
+ LASTLOG_UID_MAX.xml \
+ LOGIN_RETRIES.xml \
+ LOGIN_STRING.xml \
+ LOGIN_TIMEOUT.xml \
+ LOG_OK_LOGINS.xml \
+ LOG_UNKFAIL_ENAB.xml \
+ MAIL_CHECK_ENAB.xml \
+ MAIL_DIR.xml \
+ MAX_MEMBERS_PER_GROUP.xml \
+ MD5_CRYPT_ENAB.xml \
+ MOTD_FILE.xml \
+ NOLOGINS_FILE.xml \
+ OBSCURE_CHECKS_ENAB.xml \
+ PASS_ALWAYS_WARN.xml \
+ PASS_CHANGE_TRIES.xml \
+ PASS_MAX_DAYS.xml \
+ PASS_MAX_LEN.xml \
+ PASS_MIN_DAYS.xml \
+ PASS_WARN_AGE.xml \
+ PORTTIME_CHECKS_ENAB.xml \
+ QUOTAS_ENAB.xml \
+ SHA_CRYPT_MIN_ROUNDS.xml \
+ SULOG_FILE.xml \
+ SU_NAME.xml \
+ SU_WHEEL_ONLY.xml \
+ SYSLOG_SG_ENAB.xml \
+ SYSLOG_SU_ENAB.xml \
+ TCB_AUTH_GROUP.xml \
+ TCB_SYMLINKS.xml \
+ TTYGROUP.xml \
+ TTYTYPE_FILE.xml \
+ UID_MAX.xml \
+ ULIMIT.xml \
+ UMASK.xml \
+ USERDEL_CMD.xml \
+ USERGROUPS_ENAB.xml \
+ USE_TCB.xml \
+ SUB_GID_COUNT.xml \
+ SUB_UID_COUNT.xml \
+ SYS_GID_MAX.xml \
+ SYS_UID_MAX.xml
+
+EXTRA_DIST = $(man_MANS) $(man_XMANS) $(addprefix \
+ login.defs.d/,$(login_defs_v)) man1/id.1 id.1.xml \
+ man8/sulogin.8 sulogin.8.xml generate_mans.mak \
+ generate_translations.mak $(am__append_4) $(am__append_5)
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_FALSE@PAM_COND = no_pam
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_TRUE@PAM_COND = pam
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_FALSE@SHADOWGRP_COND = no_gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_TRUE@SHADOWGRP_COND = gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@WITH_TCB_FALSE@TCB_COND = no_tcb
+@ENABLE_REGENERATE_MAN_TRUE@@WITH_TCB_TRUE@TCB_COND = tcb
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_FALSE@SHA_CRYPT_COND = no_sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_TRUE@SHA_CRYPT_COND = sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@@ENABLE_SUBIDS_FALSE@SUBIDS_COND = no_subids
+@ENABLE_REGENERATE_MAN_TRUE@@ENABLE_SUBIDS_TRUE@SUBIDS_COND = subids
+@ENABLE_REGENERATE_MAN_TRUE@CLEANFILES = $(man_MANS) man1/id.1 man8/sulogin.8
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/generate_mans.mak $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign man/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(srcdir)/generate_mans.mak $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+config.xml: $(top_builddir)/config.status $(srcdir)/config.xml.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+install-man3: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man3dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.3[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man3:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man3dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.3[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir)
+install-man5: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man5dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.5[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man5:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man5dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.5[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir)
+install-man8: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man8dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.8[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man8:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man8dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.8[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(MANS)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+@ENABLE_REGENERATE_MAN_FALSE@clean-local:
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man: install-man1 install-man3 install-man5 install-man8
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man3 uninstall-man5 \
+ uninstall-man8
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+ check-am clean clean-generic clean-libtool clean-local \
+ cscopelist-am ctags ctags-am distclean distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-man1 install-man3 \
+ install-man5 install-man8 install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+ uninstall-am uninstall-man uninstall-man1 uninstall-man3 \
+ uninstall-man5 uninstall-man8
+
+.PRECIOUS: Makefile
+
+
+generate_mans.deps: *.xml
+ echo "# This file is generated" > $@
+ awk 'BEGIN{FS="\"";} /^<!ENTITY .* * SYSTEM ".*">$$/{ f=FILENAME; sub(/.xml/,"",f); print "man" substr(f, length (f)) "/" f ": " $$2 }' $(man_XMANS) >> $@
+
+@ENABLE_REGENERATE_MAN_TRUE@@ENABLE_REGENERATE_MAN_TRUE@include generate_mans.deps
+
+@ENABLE_REGENERATE_MAN_TRUE@%.xml-config: %.xml
+@ENABLE_REGENERATE_MAN_TRUE@ if grep -q SHADOW-CONFIG-HERE $<; then \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^<!-- SHADOW-CONFIG-HERE -->/<!ENTITY % config SYSTEM "config.xml">%config;/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ else \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^\(<!DOCTYPE .*docbookx.dtd"\)>/\1 [<!ENTITY % config SYSTEM "config.xml">%config;]>/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ fi
+
+@ENABLE_REGENERATE_MAN_TRUE@man1/% man3/% man5/% man8/%: %.xml-config Makefile config.xml
+@ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam profile.condition "$(PAM_COND);$(SHADOWGRP_COND);$(TCB_COND);$(SHA_CRYPT_COND);$(SUBIDS_COND)" \
+@ENABLE_REGENERATE_MAN_TRUE@ --param "man.authors.section.enabled" "0" \
+@ENABLE_REGENERATE_MAN_TRUE@ --stringparam "man.output.base.dir" "" \
+@ENABLE_REGENERATE_MAN_TRUE@ --param "man.output.in.separate.dir" "1" \
+@ENABLE_REGENERATE_MAN_TRUE@ -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/profile-docbook.xsl $<
+
+@ENABLE_REGENERATE_MAN_TRUE@clean-local:
+@ENABLE_REGENERATE_MAN_TRUE@ rm -rf man1 man3 man5 man8
+
+#$(man_MANS):
+# @echo you need to run configure with --enable-man to generate man pages
+
+@ENABLE_REGENERATE_MAN_TRUE@man8/grpconv.8 man8/grpunconv.8 man8/pwunconv.8: man8/pwconv.8
+
+@ENABLE_REGENERATE_MAN_TRUE@man3/getspnam.3: man3/shadow.3
+
+@ENABLE_REGENERATE_MAN_TRUE@man8/vigr.8: man8/vipw.8
+
+@ENABLE_REGENERATE_MAN_FALSE@$(man_MANS):
+@ENABLE_REGENERATE_MAN_FALSE@ @echo ""
+@ENABLE_REGENERATE_MAN_FALSE@ @echo "Error: you need to run configure with '--enable-man'"
+@ENABLE_REGENERATE_MAN_FALSE@ @echo " in order to regenerate man pages."
+@ENABLE_REGENERATE_MAN_FALSE@ @echo ""
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/chage.1.xml b/man/chage.1.xml
new file mode 100644
index 0000000..1e4cc53
--- /dev/null
+++ b/man/chage.1.xml
@@ -0,0 +1,327 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ Copyright (c) 2007 - 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY USE_TCB SYSTEM "login.defs.d/USE_TCB.xml">
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='chage.1'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1990</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>chage</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>chage</refname>
+ <refpurpose>change user password expiry information</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>chage</command>
+ <arg choice='opt'>
+ <replaceable>options</replaceable>
+ </arg>
+ <arg choice='plain'>
+ <replaceable>LOGIN</replaceable>
+ </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ 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.
+ </para>
+ </refsect1>
+
+ <refsect1 id='options'>
+ <title>OPTIONS</title>
+ <para>
+ The options which apply to the <command>chage</command> command are:
+ </para>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term>
+ <option>-d</option>, <option>--lastday</option>&nbsp;<replaceable>LAST_DAY</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Set the number of days since January 1st, 1970 when the password
+ was last changed. The date may also be expressed in the format
+ YYYY-MM-DD (or the format more commonly used in your area).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-E</option>, <option>--expiredate</option>&nbsp;<replaceable>EXPIRE_DATE</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Set the date or number of days since January 1, 1970 on which the
+ user's account will no longer be accessible. The date may also
+ be expressed in the format YYYY-MM-DD (or the format more
+ commonly used in your area). A user whose account is locked must
+ contact the system administrator before being able to use the
+ system again.
+ </para>
+ <para>
+ Passing the number <emphasis remap='I'>-1</emphasis> as the
+ <replaceable>EXPIRE_DATE</replaceable> will remove an account
+ expiration date.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-h</option>, <option>--help</option></term>
+ <listitem>
+ <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>
+ </term>
+ <listitem>
+ <para>
+ Set the number of days of inactivity after a password has
+ expired before the account is locked. The
+ <replaceable>INACTIVE</replaceable> option is the number of days
+ of inactivity. A user whose account is locked must contact the
+ system administrator before being able to use the system again.
+ </para>
+ <para>
+ Passing the number <emphasis remap='I'>-1</emphasis> as the
+ <replaceable>INACTIVE</replaceable> will remove an account's
+ inactivity.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-l</option>, <option>--list</option>
+ </term>
+ <listitem>
+ <para>
+ Show account aging information.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-m</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DAYS</replaceable>
+ </term>
+ <listitem>
+ <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 their password at any time.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-M</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DAYS</replaceable>
+ </term>
+ <listitem>
+ <para>
+ 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.
+ </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>
+ <varlistentry>
+ <term>
+ <option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Apply changes in the <replaceable>CHROOT_DIR</replaceable>
+ directory and use the configuration files from the
+ <replaceable>CHROOT_DIR</replaceable> directory.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-W</option>, <option>--warndays</option>&nbsp;<replaceable>WARN_DAYS</replaceable>
+ </term>
+ <listitem>
+ <para>
+ 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.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <para>
+ If none of the options are selected, <command>chage</command> operates
+ in an interactive fashion, prompting the user with the current values
+ for all of the fields. Enter the new value to change the field, or
+ leave the line blank to use the current value. The current value is
+ displayed between a pair of <emphasis>[ ]</emphasis> marks.
+ </para>
+ </refsect1>
+ <refsect1 id='note'>
+ <title>NOTE</title>
+ <para>
+ The <command>chage</command> program requires a shadow password file to
+ be available.
+ </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 their password or account is due
+ to expire.
+ </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>
+ &USE_TCB;
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <filename>/etc/passwd</filename>
+ </term>
+ <listitem>
+ <para>User account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <filename>/etc/shadow</filename>
+ </term>
+ <listitem>
+ <para>Secure user account information.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='exit_values'>
+ <title>EXIT VALUES</title>
+ <para>
+ The <command>chage</command> command exits with the following values:
+ <variablelist>
+ <varlistentry>
+ <term><replaceable>0</replaceable></term>
+ <listitem>
+ <para>success</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>1</replaceable></term>
+ <listitem>
+ <para>permission denied</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>2</replaceable></term>
+ <listitem>
+ <para>invalid command syntax</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>15</replaceable></term>
+ <listitem>
+ <para>can't find the shadow password file</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/chfn.1.xml b/man/chfn.1.xml
new file mode 100644
index 0000000..153d67e
--- /dev/null
+++ b/man/chfn.1.xml
@@ -0,0 +1,238 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ Copyright (c) 2007 - 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY CHFN_AUTH SYSTEM "login.defs.d/CHFN_AUTH.xml">
+<!ENTITY CHFN_RESTRICT SYSTEM "login.defs.d/CHFN_RESTRICT.xml">
+<!ENTITY LOGIN_STRING SYSTEM "login.defs.d/LOGIN_STRING.xml">
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='chfn.1'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1990</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>chfn</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>chfn</refname>
+ <refpurpose>change real user name and information</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>chfn</command>
+ <arg choice='opt'>
+ <replaceable>options</replaceable>
+ </arg>
+ <arg choice='opt'>
+ <replaceable>LOGIN</replaceable>
+ </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The <command>chfn</command> command changes user fullname,
+ office room number, office phone number, and home phone number information
+ for a user's account. This information is typically printed by
+ <citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry> and similar programs. A normal user may only change
+ the fields for her own account, subject to the restrictions in
+ <filename>/etc/login.defs</filename>. (The default configuration is to
+ prevent users from changing their fullname.) The superuser may change
+ any field for any account. Additionally, only the superuser may use
+ the <option>-o</option> option to change the undefined portions of the
+ GECOS field.
+ </para>
+
+ <para>
+ These fields must not contain any colons. Except for the
+ <emphasis remap='I'>other</emphasis> field, they should not contain
+ any comma or equal sign. It is also recommended to avoid
+ non-US-ASCII characters, but this is only enforced for the phone
+ numbers. The <emphasis remap='I'>other</emphasis> field is used to
+ store accounting information used by other applications.
+ </para>
+
+ </refsect1>
+
+ <refsect1 id='options'>
+ <title>OPTIONS</title>
+ <para>
+ The options which apply to the <command>chfn</command> command are:
+ </para>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term>
+ <option>-f</option>, <option>--full-name</option>&nbsp;<replaceable>FULL_NAME</replaceable>
+ </term>
+ <listitem>
+ <para>Change the user's full name.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-h</option>, <option>--home-phone</option>&nbsp;<replaceable>HOME_PHONE</replaceable>
+ </term>
+ <listitem>
+ <para>Change the user's home phone number.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-o</option>, <option>--other</option>&nbsp;<replaceable>OTHER</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Change the user's other GECOS information. This field is used to
+ store accounting information used by other applications, and can
+ be changed only by a superuser.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-r</option>, <option>--room</option>&nbsp;<replaceable>ROOM_NUMBER</replaceable>
+ </term>
+ <listitem>
+ <para>Change the user's room number.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Apply changes in the <replaceable>CHROOT_DIR</replaceable>
+ directory and use the configuration files from the
+ <replaceable>CHROOT_DIR</replaceable> directory.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-u</option>, <option>--help</option>
+ </term>
+ <listitem>
+ <para>Display help message and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-w</option>, <option>--work-phone</option>&nbsp;<replaceable>WORK_PHONE</replaceable>
+ </term>
+ <listitem>
+ <para>Change the user's office phone number.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <para>
+ If none of the options are selected, <command>chfn</command>
+ operates in an interactive fashion, prompting the user with the
+ current values for all of the fields. Enter the new value to change
+ the field, or leave the line blank to use the current value. The
+ current value is displayed between a pair of <emphasis remap='B'>[
+ ]</emphasis> marks. Without options, <command>chfn</command>
+ prompts for the current user account.
+ </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>
+ &CHFN_AUTH;
+ &CHFN_RESTRICT;
+ &LOGIN_STRING;
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/login.defs</filename></term>
+ <listitem>
+ <para>Shadow password suite configuration.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/passwd</filename></term>
+ <listitem>
+ <para>User account information.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/chgpasswd.8.xml b/man/chgpasswd.8.xml
new file mode 100644
index 0000000..cd61687
--- /dev/null
+++ b/man/chgpasswd.8.xml
@@ -0,0 +1,250 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2006 , Tomasz Kłoczko
+ Copyright (c) 2007 - 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY ENCRYPT_METHOD SYSTEM "login.defs.d/ENCRYPT_METHOD.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 SHA_CRYPT_MIN_ROUNDS SYSTEM "login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml">
+<!-- SHADOW-CONFIG-HERE -->
+]>
+
+<refentry id='chgpasswd.8'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>Creation, 2006</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>chgpasswd</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>chgpasswd</refname>
+ <refpurpose>update group passwords in batch mode</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>chgpasswd</command>
+ <arg choice='opt'>
+ <replaceable>options</replaceable>
+ </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The <command>chgpasswd</command> command reads a list of group name
+ and password pairs from standard input and uses this information to
+ update a set of existing groups. Each line is of the format:
+ </para>
+ <para>
+ <emphasis remap='I'>group_name</emphasis>:<emphasis
+ remap='I'>password</emphasis>
+ </para>
+ <para>
+ By default the supplied password must be in clear-text, and is
+ encrypted by <command>chgpasswd</command>.
+ </para>
+ <para>
+ The default encryption algorithm can be defined for the system with
+ the <option>ENCRYPT_METHOD</option> variable of <filename>/etc/login.defs</filename>,
+ and can be overwritten with the <option>-e</option>,
+ <option>-m</option>, or <option>-c</option> options.
+ </para>
+ <para>
+ This command is intended to be used in a large system environment
+ where many accounts are created at a single time.
+ </para>
+ </refsect1>
+
+ <refsect1 id='options'>
+ <title>OPTIONS</title>
+ <para>
+ The options which apply to the <command>chgpasswd</command> command
+ are:
+ </para>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term><option>-c</option>, <option>--crypt-method</option></term>
+ <listitem>
+ <para>Use the specified method to encrypt the passwords.</para>
+ <para condition="no_sha_crypt">
+ The available methods are DES, MD5, and NONE.
+ </para>
+ <para condition="sha_crypt">
+ The available methods are DES, MD5, NONE, and SHA256 or SHA512
+ if your libc support these methods.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-e</option>, <option>--encrypted</option></term>
+ <listitem>
+ <para>Supplied passwords are in encrypted form.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-h</option>, <option>--help</option></term>
+ <listitem>
+ <para>Display help message and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-m</option>, <option>--md5</option></term>
+ <listitem>
+ <para>
+ Use MD5 encryption instead of DES when the supplied passwords are
+ not encrypted.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Apply changes in the <replaceable>CHROOT_DIR</replaceable>
+ directory and use the configuration files from the
+ <replaceable>CHROOT_DIR</replaceable> directory.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="sha_crypt">
+ <term><option>-s</option>, <option>--sha-rounds</option></term>
+ <listitem>
+ <para>
+ Use the specified number of rounds to encrypt the passwords.
+ </para>
+ <para>
+ The value 0 means that the system will choose the default
+ number of rounds for the crypt method (5000).
+ </para>
+ <para>
+ A minimal value of 1000 and a maximal value of 999,999,999
+ will be enforced.
+ </para>
+ <para>
+ You can only use this option with the SHA256 or SHA512
+ crypt method.
+ </para>
+ <para>
+ By default, the number of rounds is defined by the
+ SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+ <filename>/etc/login.defs</filename>.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='caveats'>
+ <title>CAVEATS</title>
+ <para>
+ Remember to set permissions or umask to prevent readability of
+ unencrypted files by other users.
+ </para>
+ <para>
+ You should make sure the passwords and the encryption method respect
+ the system's password policy.
+ </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>
+ &ENCRYPT_METHOD;
+ &MAX_MEMBERS_PER_GROUP;
+ &MD5_CRYPT_ENAB;
+ &SHA_CRYPT_MIN_ROUNDS; <!--This also document SHA_CRYPT_MAX_ROUNDS-->
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/group</filename></term>
+ <listitem>
+ <para>Group account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="gshadow">
+ <term><filename>/etc/gshadow</filename></term>
+ <listitem>
+ <para>Secure group account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/login.defs</filename></term>
+ <listitem>
+ <para>Shadow password suite configuration.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>gpasswd</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/chpasswd.8.xml b/man/chpasswd.8.xml
new file mode 100644
index 0000000..19ef36e
--- /dev/null
+++ b/man/chpasswd.8.xml
@@ -0,0 +1,303 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1991 , Julianne Frances Haugh
+ Copyright (c) 2007 - 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY ENCRYPT_METHOD SYSTEM "login.defs.d/ENCRYPT_METHOD.xml">
+<!ENTITY MD5_CRYPT_ENAB SYSTEM "login.defs.d/MD5_CRYPT_ENAB.xml">
+<!ENTITY SHA_CRYPT_MIN_ROUNDS SYSTEM "login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml">
+<!-- SHADOW-CONFIG-HERE -->
+]>
+
+<refentry id='chpasswd.8'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1991</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>chpasswd</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>chpasswd</refname>
+ <refpurpose>update passwords in batch mode</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>chpasswd</command>
+ <arg choice='opt'>
+ <replaceable>options</replaceable>
+ </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The <command>chpasswd</command> command reads a list of user name and
+ password pairs from standard input and uses this information to update
+ a group of existing users. Each line is of the format:
+ </para>
+ <para>
+ <emphasis remap='I'>user_name</emphasis>:<emphasis
+ remap='I'>password</emphasis>
+ </para>
+ <para>
+ By default the passwords must be supplied in clear-text, and are
+ encrypted by <command>chpasswd</command>.
+ Also the password age will be updated, if present.
+ </para>
+ <para condition="no_pam">
+ The default encryption algorithm can be defined for the system with
+ the <option>ENCRYPT_METHOD</option> or
+ <option>MD5_CRYPT_ENAB</option> variables of
+ <filename>/etc/login.defs</filename>, and can be overwritten with the
+ <option>-e</option>, <option>-m</option>, or <option>-c</option>
+ options.
+ </para>
+ <para condition="pam">
+ By default, passwords are encrypted by PAM, but (even if not
+ recommended) you can select a different encryption method with the
+ <option>-e</option>, <option>-m</option>, or <option>-c</option>
+ options.
+ </para>
+ <para>
+ <phrase condition="pam">Except when PAM is used to encrypt the
+ passwords,</phrase> <command>chpasswd</command> first updates all the
+ passwords in memory, and then commits all the changes to disk if no
+ errors occurred for any user.
+ </para>
+ <para condition="pam">
+ When PAM is used to encrypt the passwords (and update the passwords in
+ the system database) then if a password cannot be updated
+ <command>chpasswd</command> continues updating the passwords of the
+ next users, and will return an error code on exit.
+ </para>
+ <para>
+ This command is intended to be used in a large system environment
+ where many accounts are created at a single time.
+ </para>
+ </refsect1>
+
+ <refsect1 id='options'>
+ <title>OPTIONS</title>
+ <para>
+ The options which apply to the <command>chpasswd</command> command
+ are:
+ </para>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term>
+ <option>-c</option>, <option>--crypt-method</option>&nbsp;<replaceable>METHOD</replaceable>
+ </term>
+ <listitem>
+ <para>Use the specified method to encrypt the passwords.</para>
+ <para condition="no_sha_crypt">
+ The available methods are DES, MD5, and NONE.
+ </para>
+ <para condition="sha_crypt">
+ The available methods are DES, MD5, NONE, and SHA256 or SHA512
+ if your libc support these methods.
+ </para>
+ <para condition="pam">
+ By default, PAM is used to encrypt the passwords.
+ </para>
+ <para condition="no_pam">
+ By default (if none of the <option>-c</option>,
+ <option>-m</option>, or <option>-e</option> options are
+ specified), the encryption method is defined by the
+ <option>ENCRYPT_METHOD</option> or
+ <option>MD5_CRYPT_ENAB</option> variables of
+ <filename>/etc/login.defs</filename>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-e</option>, <option>--encrypted</option></term>
+ <listitem>
+ <para>Supplied passwords are in encrypted form.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term><option>-h</option>, <option>--help</option></term>
+ <listitem>
+ <para>Display help message and exit.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term><option>-m</option>, <option>--md5</option></term>
+ <listitem>
+ <para>
+ Use MD5 encryption instead of DES when the supplied passwords are
+ not encrypted.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Apply changes in the <replaceable>CHROOT_DIR</replaceable>
+ directory and use the configuration files from the
+ <replaceable>CHROOT_DIR</replaceable> directory.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="sha_crypt">
+ <term>
+ <option>-s</option>, <option>--sha-rounds</option>&nbsp;<replaceable>ROUNDS</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Use the specified number of rounds to encrypt the passwords.
+ </para>
+ <para>
+ The value 0 means that the system will choose the default
+ number of rounds for the crypt method (5000).
+ </para>
+ <para>
+ A minimal value of 1000 and a maximal value of 999,999,999
+ will be enforced.
+ </para>
+ <para>
+ You can only use this option with the SHA256 or SHA512
+ crypt method.
+ </para>
+ <para>
+ By default, the number of rounds is defined by the
+ <option>SHA_CRYPT_MIN_ROUNDS</option> and
+ <option>SHA_CRYPT_MAX_ROUNDS</option> variables in
+ <filename>/etc/login.defs</filename>.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='caveats'>
+ <title>CAVEATS</title>
+ <para>
+ Remember to set permissions or umask to prevent readability of
+ unencrypted files by other users.
+ </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 condition="no_pam">
+ &ENCRYPT_METHOD;
+ &MD5_CRYPT_ENAB;
+ </variablelist>
+ <variablelist>
+ &SHA_CRYPT_MIN_ROUNDS; <!--documents also SHA_CRYPT_MAX_ROUNDS-->
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/passwd</filename></term>
+ <listitem>
+ <para>User account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/shadow</filename></term>
+ <listitem>
+ <para>Secure user account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/login.defs</filename></term>
+ <listitem>
+ <para>Shadow password suite configuration.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="pam">
+ <term><filename>/etc/pam.d/chpasswd</filename></term>
+ <listitem>
+ <para>PAM configuration for <command>chpasswd</command>.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>newusers</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <phrase>
+ <citerefentry>
+ <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ </phrase>
+ <citerefentry>
+ <refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/chsh.1.xml b/man/chsh.1.xml
new file mode 100644
index 0000000..2c853be
--- /dev/null
+++ b/man/chsh.1.xml
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1990 , Julianne Frances Haugh
+ Copyright (c) 2007 - 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY CHSH_AUTH SYSTEM "login.defs.d/CHSH_AUTH.xml">
+<!ENTITY LOGIN_STRING SYSTEM "login.defs.d/LOGIN_STRING.xml">
+<!-- SHADOW-CONFIG-HERE -->
+]>
+
+<refentry id='chsh.1'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1990</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>chsh</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>chsh</refname>
+ <refpurpose>change login shell</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>chsh</command>
+ <arg choice='opt'>
+ <replaceable>options</replaceable>
+ </arg>
+ <arg choice='opt'>
+ <replaceable>LOGIN</replaceable>
+ </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The <command>chsh</command> command changes the user login shell.
+ This determines the name of the user's initial login command. A normal
+ user may only change the login shell for her own account; the
+ superuser may change the login shell for any account.
+ </para>
+
+ </refsect1>
+
+ <refsect1 id='options'>
+ <title>OPTIONS</title>
+ <para>
+ The options which apply to the <command>chsh</command> command are:
+ </para>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term><option>-h</option>, <option>--help</option></term>
+ <listitem>
+ <para>Display help message and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Apply changes in the <replaceable>CHROOT_DIR</replaceable>
+ directory and use the configuration files from the
+ <replaceable>CHROOT_DIR</replaceable> directory.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SHELL</replaceable>
+ </term>
+ <listitem>
+ <para>
+ The name of the user's new login shell. Setting this field to
+ blank causes the system to select the default login shell.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <para>
+ If the <option>-s</option> option is not selected,
+ <command>chsh</command> operates in an interactive fashion, prompting
+ the user with the current login shell. Enter the new value to change
+ the shell, or leave the line blank to use the current one. The current
+ shell is displayed between a pair of <emphasis>[ ]</emphasis> marks.
+ </para>
+ </refsect1>
+
+ <refsect1 id='note'>
+ <title>NOTE</title>
+ <para>
+ The only restriction placed on the login shell is that the command
+ name must be listed in <filename>/etc/shells</filename>, unless the
+ invoker is the superuser, and then any value may be added. An
+ account with a restricted login shell may not change her login shell.
+ For this reason, placing <filename>/bin/rsh</filename> in
+ <filename>/etc/shells</filename> is discouraged since accidentally
+ changing to a restricted shell would prevent the user from ever
+ changing her login shell back to its original value.
+ </para>
+ </refsect1>
+
+ <refsect1 id='configuration' condition="no_pam">
+ <title>CONFIGURATION</title>
+ <para>
+ The following configuration variables in
+ <filename>/etc/login.defs</filename> change the behavior of this
+ tool:
+ </para>
+ <variablelist>
+ &CHSH_AUTH;
+ &LOGIN_STRING;
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/passwd</filename></term>
+ <listitem>
+ <para>User account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/shells</filename></term>
+ <listitem>
+ <para>List of valid login shells.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/login.defs</filename></term>
+ <listitem>
+ <para>Shadow password suite configuration.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/config.xml.in b/man/config.xml.in
new file mode 100644
index 0000000..2dbad9f
--- /dev/null
+++ b/man/config.xml.in
@@ -0,0 +1,2 @@
+<!ENTITY GROUP_NAME_MAX_LENGTH '@GROUP_NAME_MAX_LENGTH@'>
+<!ENTITY SHADOW_UTILS_VERSION '@VERSION@'>
diff --git a/man/cs/Makefile.am b/man/cs/Makefile.am
new file mode 100644
index 0000000..3b2be0c
--- /dev/null
+++ b/man/cs/Makefile.am
@@ -0,0 +1,26 @@
+
+mandir = @mandir@/cs
+
+man_MANS = \
+ man1/expiry.1 \
+ man5/faillog.5 \
+ man8/faillog.8 \
+ man1/gpasswd.1 \
+ man8/groupadd.8 \
+ man8/groupdel.8 \
+ man8/groupmod.8 \
+ man1/groups.1 \
+ man8/grpck.8 \
+ man5/gshadow.5 \
+ man8/lastlog.8 \
+ man8/nologin.8 \
+ man5/passwd.5 \
+ man5/shadow.5 \
+ man1/su.1 \
+ man8/vipw.8
+
+EXTRA_DIST = $(man_MANS) \
+ man1/id.1 \
+ man8/groupmems.8 \
+ man8/logoutd.8
+
diff --git a/man/cs/Makefile.in b/man/cs/Makefile.in
new file mode 100644
index 0000000..494c164
--- /dev/null
+++ b/man/cs/Makefile.in
@@ -0,0 +1,668 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = man/cs
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" \
+ "$(DESTDIR)$(man8dir)"
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@/cs
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = \
+ man1/expiry.1 \
+ man5/faillog.5 \
+ man8/faillog.8 \
+ man1/gpasswd.1 \
+ man8/groupadd.8 \
+ man8/groupdel.8 \
+ man8/groupmod.8 \
+ man1/groups.1 \
+ man8/grpck.8 \
+ man5/gshadow.5 \
+ man8/lastlog.8 \
+ man8/nologin.8 \
+ man5/passwd.5 \
+ man5/shadow.5 \
+ man1/su.1 \
+ man8/vipw.8
+
+EXTRA_DIST = $(man_MANS) \
+ man1/id.1 \
+ man8/groupmems.8 \
+ man8/logoutd.8
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/cs/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign man/cs/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+install-man5: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man5dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.5[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man5:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man5dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.5[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir)
+install-man8: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man8dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.8[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man8:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man8dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.8[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-man5 install-man8 install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+ uninstall-am uninstall-man uninstall-man1 uninstall-man5 \
+ uninstall-man8
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/cs/man1/expiry.1 b/man/cs/man1/expiry.1
new file mode 100644
index 0000000..99a0b4e
--- /dev/null
+++ b/man/cs/man1/expiry.1
@@ -0,0 +1,25 @@
+.TH "EXPIRY" "1" "11/05/2005" "User Commands" "User Commands"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "JMÉNO"
+expiry \- zkontroluje a vynutí politiku vypršení platnosti hesla
+.SH "POUŽITÍ"
+.HP 7
+\fBexpiry\fR [\-c] [\-f]
+.SH "POPIS"
+.PP
+\fBexpiry\fR
+zkontroluje (\fB\-c\fR) vypršení platnosti aktuálního hesla a případně vynutí (\fB\-f\fR) změnu. Příkaz lze spustit jako běžný uživatel.
+.SH "SOUBORY"
+.TP
+\fI/etc/passwd\fR
+informace o uživatelských účtech
+.TP
+\fI/etc/shadow\fR
+důvěrné informace o uživatelských účtech
+.SH "VIZ TAKÉ"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5).
diff --git a/man/cs/man1/gpasswd.1 b/man/cs/man1/gpasswd.1
new file mode 100644
index 0000000..32e4288
--- /dev/null
+++ b/man/cs/man1/gpasswd.1
@@ -0,0 +1,76 @@
+.TH "GPASSWD" "1" "11/05/2005" "User Commands" "User Commands"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "JMÉNO"
+gpasswd \- spravuje soubor /etc/group
+.SH "POUŽITÍ"
+.HP 8
+\fBgpasswd\fR \fIskupina\fR
+.HP 8
+\fBgpasswd\fR \-a\ \fIuživatel\fR \fIskupina\fR
+.HP 8
+\fBgpasswd\fR \-d\ \fIuživatel\fR \fIskupina\fR
+.HP 8
+\fBgpasswd\fR \-R\ \fIskupina\fR
+.HP 8
+\fBgpasswd\fR \-r\ \fIskupina\fR
+.HP 8
+\fBgpasswd\fR [\-A\ \fIuživatel,\fR...] [\-M\ \fIuživatel,\fR...] \fIskupina\fR
+.SH "POPIS"
+.PP
+\fBgpasswd\fR
+se používá pro správu souboru
+\fI/etc/group\fR
+(a pokud je zkompilován s podporou SHADOWGRP, tak i
+\fI/etc/gshadow\fR).
+Každá skupina může mít správce, členy a heslo. Systémový správce může
+volbou
+\fB\-A\fR
+definovat správce skupiny, volbou
+\fB\-M\fR
+členy skupiny a má všechna práva skupinových správců a členů.
+.SS "Poznámka o skupinových heslech"
+.PP
+Skupinová hesla jsou samozřejmě bezpečnostním problémem, jelikož je
+heslo sdíleno více uživateli. Skupiny jsou nicméně užitečným nástrojem
+pro spolupráci mezi různými uživateli.
+.SH "VOLBY"
+.PP
+Správce skupiny může přidávat resp. mazat uživatele pomocí
+\fB\-a\fR
+resp.
+\fB\-d\fR.
+Správcové mohou odstranit skupinové heslo pomocí přepínače
+\fB\-r\fR.
+Pokud není heslo nastaveno, mohou použít příkaz
+\fBnewgrp\fR
+pro zapojení do skupiny pouze členové skupiny. Volba
+\fB\-R\fR
+zakáže přístup do skupiny skrze příkaz
+\fBnewgrp\fR
+(členové skupiny se do ní budou moci stále přepnout).
+.PP
+Pokud je
+\fBgpasswd\fR
+spušten správcem skupiny a jediným parametrem je jméno skupiny, zeptá
+se na skupinové heslo. Pokud je heslo nastaveno, mohou členové používat
+\fBnewgrp\fR(1)
+stále bez hesla, nečlenové musí heslo zadat.
+.SH "SOUBORY"
+.TP
+\fI/etc/group\fR
+informace o skupinových účtech
+.TP
+\fI/etc/gshadow\fR
+citlivé informace o skupinových účtech
+.SH "VIZ TAKÉ"
+.PP
+\fBnewgrp\fR(1),
+\fBgshadow\fR(5),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBgrpck\fR(8),
+\fBgroup\fR(5).
diff --git a/man/cs/man1/groups.1 b/man/cs/man1/groups.1
new file mode 100644
index 0000000..6deab53
--- /dev/null
+++ b/man/cs/man1/groups.1
@@ -0,0 +1,29 @@
+.TH GROUPS 1 "GNU Shell Utilities" "FSF" \" \-*\- nroff \-*\-
+.do hla cs
+.do hpf hyphen.cs
+.SH JMÉNO
+groups \- vypíše skupiny, jichž je uživatel členem
+.SH POUŽITÍ
+\fBgroups\fR [\fIuživatel...\fR]
+.SH POPIS
+Tato dokumentace není dále udržována a může být nepřesná nebo neúplná.
+Autoritativním zdrojem je Texinfo dokumentace.
+.PP
+Tato manuálová stránka popisuje GNU verzi příkazu
+.BR groups .
+Příkaz
+.B groups
+vypíše jména všech skupin, v nichž je zadaný \fIuživatel\fR nebo aktuální proces,
+pokud uživatel není zadán, členem. Pokud jsou zadána jména uživatelů, potom bude
+jméno každého z uživatelů vypsáno před seznam skupin, jichž je členem.
+.PP
+Seznam skupin je ekvivalentní s výstupem příkazu `id \-Gn'.
+.SH VOLBY
+Když je GNU příkaz \fBgroups\fR vyvolán právě s jedním parametrem,
+jsou rozpoznávány následující volby:
+.TP
+.I "\-\-help"
+Vypíše návod k použití na standardní výstup a bezchybně skončí.
+.TP
+.I "\-\-version"
+Vypíše číslo verze na standardní výstup a bezchybně skončí.
diff --git a/man/cs/man1/id.1 b/man/cs/man1/id.1
new file mode 100644
index 0000000..9eafaf1
--- /dev/null
+++ b/man/cs/man1/id.1
@@ -0,0 +1,62 @@
+.TH ID 1 "GNU Shell Utilities" "FSF" \" \-*\- nroff \-*\-
+.do hla cs
+.do hpf hyphen.cs
+.SH JMÉNO
+id \- vypíše reálný a efektivní UID a GID
+.SH POUŽITÍ
+.B id
+[\-gnruG] [\-\-group] [\-\-name] [\-\-real] [\-\-user] [\-\-groups]
+[\-\-help] [\-\-version] [uživatel]
+.SH POPIS
+Tato dokumentace není dále udržována a může být nepřesná nebo neúplná.
+Autoritativním zdrojem je Texinfo dokumentace.
+.PP
+Tato manuálová stránka popisuje GNU verzi příkazu
+.BR id .
+Příkaz
+.B id
+vypíše informace o zadaném uživateli nebo (pokud není jméno uživatele
+zadáno) o uživateli, který program
+.B id
+spustil. Implicitně vypisuje reálné user ID, reálné group ID,
+efektivní user ID, pokud se liší od reálného user ID, efektivní
+group ID, pokud se liší od reálného group ID, a group ID skupin,
+v nichž je uživatel členem. Před každou z hodnot je vypsán řetězec
+určující o jakou hodnotu se jedná a za každou jsou odpovídající
+jména skupin a uživatelů v závorkách.
+.PP
+Volby způsobí, že program
+.B id
+vypisuje pouze některé z těchto informací.
+.SS VOLBY
+.TP
+.I "\-g, \-\-group"
+Vypíše pouze group ID.
+.TP
+.I "\-G, \-\-groups"
+Vypíše pouze skupiny, v nichž je uživatel členem.
+.TP
+.I "\-\-help"
+Vypíše návod k použití na standardní výstup a bezchybně skončí.
+.TP
+.I "\-n, \-\-name"
+Vypíše jméno uživatele nebo skupiny místo čísla ID.
+Vyžaduje
+.IR \-u ,
+.IR \-g ,
+nebo
+.IR \-G .
+.TP
+.I "\-r, \-\-real"
+Vypíše reálné místo efektivních user a group ID.
+Vyžaduje
+.IR \-u ,
+.IR \-g ,
+nebo
+.IR \-G .
+.TP
+.I "\-u, \-\-user"
+Vypíše pouze user ID.
+.TP
+.I "\-\-version"
+Vypíše číslo verze na standardní výstup a bezchybně skončí.
diff --git a/man/cs/man1/su.1 b/man/cs/man1/su.1
new file mode 100644
index 0000000..e8a6842
--- /dev/null
+++ b/man/cs/man1/su.1
@@ -0,0 +1,111 @@
+.TH SU 1 "GNU Shell Utilities" "FSF" \" \-*\- nroff \-*\-
+.do hla cs
+.do hpf hyphen.cs
+.SH JMÉNO
+su \- spustí shell pod jiným uživatelským a skupinovým ID
+.SH POUŽITÍ
+.B su
+[\-flmp] [\-c příkaz] [\-s shell] [\-\-login] [\-\-fast]
+[\-\-preserve\-environment] [\-\-command=příkaz] [\-\-shell=shell] [\-]
+[\-\-help] [\-\-version] [uživatel [arg...]]
+.SH POPIS
+Tato dokumentace není dále udržována a může být nepřesná nebo neúplná.
+Autoritativním zdrojem je Texinfo dokumentace.
+.PP
+Tato manuálová stránka popisuje GNU verzi příkazu
+.BR su .
+Příkaz
+.B su
+umožňuje, aby se uživatel dočasně stal jiným uživatelem. Spustí
+shell s reálným a efektivním user ID, group ID, i skupinami, jichž
+je zadaný
+.I uživatel
+členem. Pokud není zadán
+.IR uživatel ,
+dosadí se root, superuživatel. Jméno shellu je převzato ze souboru
+/etc/passwd. Pokud v /etc/passwd jméno shellu není, použije se
+/bin/sh. Pokud má uživatelský účet heslo, a příkaz
+.B su
+není spuštěn pod reálným user ID 0 (tj. superuživatelem), bude
+požadovat zadání hesla.
+.PP
+Příkaz
+.B su
+implicitně nemění aktuální adresář. Nastavuje proměnné prostředí
+`HOME' a `SHELL' podle údajů z /etc/passwd a pokud zadaný
+.I uživatel
+není superuživatelem, nastaví proměnné `USER' a `LOGNAME' na
+.IR uživatel .
+Implicitně není spuštěný shell login shellem.
+.PP
+Jsou\-li zadány další argumenty, budou předány jako argumenty shellu.
+.PP
+Příkaz
+.B su
+nezpracovává speciálně /bin/sh nebo ostatní shelly (nastavením
+argv[0] na "\-su", předáním volby `\-c' pouze jistým shellům, atd.).
+.PP
+Na systémech se syslog démonem může být příkaz
+.B su
+přeložen tak, aby zaznamenával pomocí syslogu neúspěšná
+a volitelně i úspěšná vyvolání příkazu
+.BR su .
+.SS VOLBY
+.TP
+.I "\-c příkaz, \-\-command=příkaz"
+Místo odstartování interaktivního shellu předá
+.I příkaz
+s volbou
+.I \-c
+jako jediný příkazový řádek shellu.
+.TP
+.I "\-f, \-\-fast"
+Předá shellu volbu
+.IR \-f .
+Tuto volbu je pravděpodobně vhodné používat pouze pro shelly
+.B csh
+a
+.BR tcsh ,
+u nichž zabrání provedení startovacího souboru (.cshrc).
+U shellů vycházejících z Bourne shellu volba
+.I \-f
+zakazuje expanzi žolíkových znaků, což obecně není žádoucí.
+.TP
+.I "\-\-help"
+Vypíše návod k použití na standardní výstup a bezchybně skončí.
+.TP
+.I "\-, \-l, \-\-login"
+Spustí shell jako login shell. To znamená, že nebude nastaven obsah
+žádných proměnných prostředí kromě `TERM', `HOME', a `SHELL' (které
+budou nastaveny, jak je popsáno výše), `USER' a `LOGNAME' (které
+budou nastaveny i pro superuživatele jak je popsáno výše). Proměnná
+prostředí `PATH' bude nastavena na hodnotu definovanou při překladu.
+Aktuální adresář bude nastaven na domovský adresář; před jméno
+shellu bude předřazen znak "\-", který způsobí, že bude zpracován
+startovací soubor nebo soubory.
+.TP
+.I "\-m, \-p, \-\-preserve\-environment"
+Nebude měnit proměnné prostředí `HOME', `USER', `LOGNAME' ani
+`SHELL'. Je chybou, pokud uživatel, který spustil příkaz
+.B su
+není superuživatel a přitom má nový uživatel omezený shell. Jinak
+se spustí místo uživatelova shellu z /etc/passwd shell zadaný
+v proměnné prostředí `SHELL'. Omezený shell je takový, který
+není uveden v souboru /etc/shells, nebo v zakompilován seznamu
+souborů, pokud /etc/shells neexistuje. Chování příkazu
+.B su
+s touto volbou lze změnit volbami
+.I \-\-login
+a
+.I \-\-shell
+(má přednost před hodnotou proměnné prostředí SHELL).
+.TP
+.I "\-s, \-\-shell shell"
+Spustí zadaný shell místo uživatelova shellu z /etc/passwd.
+Je chybou, pokud uživatel, který spustil
+.B su
+není superuživatel a přitom shell nového uživatele uvedený
+v /etc/passwd je omezený.
+.TP
+.I "\-\-version"
+Vypíše číslo verze na standardní výstup a bezchybně skončí.
diff --git a/man/cs/man5/faillog.5 b/man/cs/man5/faillog.5
new file mode 100644
index 0000000..99036ff
--- /dev/null
+++ b/man/cs/man5/faillog.5
@@ -0,0 +1,35 @@
+.TH "FAILLOG" "5" "11/05/2005" "" ""
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "JMÉNO"
+faillog \- Soubor pro zaznamenávání chybných pokusů o přihlášení
+.SH "POPIS"
+.PP
+\fI/var/log/faillog\fR
+uchovává pro každý účet počet chybných přihlášení a jejich
+limity. Záznamy v souboru mají pevnou délku a jsou indexovány
+číselným UID. Každý záznam obsahuje počet chybných pokusů o
+přihlášení od posledního úspěšného přihlášení, maximální počet
+chybných pokusů o přihlášení před zablokováním účtu, linku, na které
+byl zaznamenán poslední chybný pokus o přihlášení, a datum,
+kdy byl zaznamenán poslední chybný pokus o přihlášení.
+.PP
+Struktura souboru vypadá následovně:
+.sp
+.nf
+struct faillog {
+ short fail_cnt;
+ short fail_max;
+ char fail_line[12];
+ time_t fail_time;
+};
+.fi
+.SH "SOUBORY"
+.TP
+\fI/var/log/faillog\fR
+soubor pro záznam chybných pokusů o přihlášení
+.SH "VIZ TAKÉ"
+.PP
+\fBfaillog\fR(8)
diff --git a/man/cs/man5/gshadow.5 b/man/cs/man5/gshadow.5
new file mode 100644
index 0000000..ad8750d
--- /dev/null
+++ b/man/cs/man5/gshadow.5
@@ -0,0 +1,52 @@
+.TH "GSHADOW" "5" "11/05/2005" "File Formats and Conversions" "File Formats and Conversions"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "JMÉNO"
+gshadow \- stínový soubor se skupinami
+.SH "POPIS"
+.PP
+\fI/etc/gshadow\fR
+Obsahuje stínové informace ke skupinovým účtům. Obsahuje řádky
+s pevnou strukturou, kde jsou jednotlivá pole oddělená dvojtečkami:
+.TP 3
+\(bu
+název skupiny
+.TP
+\(bu
+zašifrované heslo
+.TP
+\(bu
+čárkami oddělený seznam administrátorů skupiny
+.TP
+\(bu
+čárkami oddělený seznam členů skupiny
+.PP
+Pole pro název skupiny a heslo musí být vyplněná. Zašifrované heslo se
+skládá ze znaků 64 znakové abecedy (a-z, A-Z, 0-9, \\ a /).
+Podrobnosti o hesle naleznete v
+\fBcrypt\fR(3).
+Pokud pole s heslem obsahuje znak, který není platným výsledkem
+funkce
+\fBcrypt\fR(3), např. ! nebo *, uživatel se nebude moci pomocí tohoto
+hesla přihlásit, ale záleží také na systému
+\fBpam\fR(7).
+.PP
+Heslo v tomto souboru má přednost před heslem ze souboru
+\fI/etc/group\fR.
+.PP
+Má-li být zachována bezpečnost hesel, nesmí být tento soubor čitelný
+pro běžné uživatele.
+.SH "SOUBORY"
+.TP
+\fI/etc/group\fR
+informace o skupinových účtech
+.TP
+\fI/etc/gshadow\fR
+citlivé informace o skupinových účtech
+.SH "VIZ TAKÉ"
+.PP
+\fBgroup\fR(5),
+\fBgpasswd\fR(5),
+\fBnewgrp\fR(5).
diff --git a/man/cs/man5/passwd.5 b/man/cs/man5/passwd.5
new file mode 100644
index 0000000..1b00228
--- /dev/null
+++ b/man/cs/man5/passwd.5
@@ -0,0 +1,57 @@
+.TH PASSWD 5 "19. března 1997" "Linux" "Linux \- příručka programátora"
+.do hla cs
+.do hpf hyphen.cs
+.SH JMÉNO
+passwd \- seznam hesel uživatelů
+.SH POPIS
+.B Passwd
+je čitelný textový soubor, který obsahuje seznam uživatelů systému a hesel,
+která musejí použít pro přístup. Seznam hesel uživatelů by měl být s právy
+pro čtení pro každého, což v pořádku, protože jsou hesla zašifrována, ale
+zápisová práva má jenom superuživatel. Jestliže vytvoříte nový login,
+nechejte pole pro heslo prázdné a použijte \fBpasswd\fP(1) pro doplnění.
+Hvězdička nebo něco podobného v poli hesel značí, že tento uživatel se nemůže
+přihlásit přes \fBlogin\fP(1). Jestliže je váš kořenový adresář v
+.IR /dev/ram,
+tak musíte uložit změněný soubor hesel do vašeho kořenového adresáře na
+disketě něž systém vypnete. Jestliže chcete
+vytvořit skupinu uživatelů, jejich GID musí být stejná a musí pro ni
+existovat záznam v souboru \fI/etc/group\fP, nebo skupina nebude existovat.
+.PP
+Každý řádek tvoří jeden záznam, který má následující formát:
+.sp
+.RS
+login_name:passwd:UID:GID:user_name:directory:shell
+.RE
+.sp
+Popis jednotlivých polí:
+.sp
+.RS
+.TP 1.0in
+.I login_name
+přihlašovací jméno uživatele systému
+.TP
+.I password
+zašifrované heslo uživatele
+.TP
+.I UID
+číselná identifikace uživatele (user ID)
+.TP
+.I GID
+číselná identifikace skupiny (group ID)
+.TP
+.I user_name
+(volitelné) poznámka (často celé jméno uživatele)
+.TP
+.I directory
+domovský adresář uživatele ($HOME)
+.TP
+.I shell
+program, který je spuštěn po úspěšném přihlášení (jestliže je prázdný,
+použije se
+.IR /bin/sh ).
+.RE
+.SH SOUBORY
+.I /etc/passwd
+.SH DALŠÍ INFORMACE
+.BR passwd "(1), " login "(1), " group (5)
diff --git a/man/cs/man5/shadow.5 b/man/cs/man5/shadow.5
new file mode 100644
index 0000000..fdbe0a1
--- /dev/null
+++ b/man/cs/man5/shadow.5
@@ -0,0 +1,64 @@
+.TH SHADOW 5
+.do hla cs
+.do hpf hyphen.cs
+.SH JMÉNO
+shadow \- soubor se zašifrovanými hesly
+.SH POPIS
+.I shadow
+obsahuje informace o zašifrovaných heslech uživatelských účtů a
+volitelně může obsahovat informace o stárnutí hesel. Soubor obsahuje
+
+.IP "" .5i
+Přihlašovací jméno
+.IP "" .5i
+Zašifrované heslo
+.IP "" .5i
+Počet dnů od 1. ledna 1970, kdy bylo heslo naposledy změněno
+.IP "" .5i
+Počet dnů, po jejichž uplynutí může být heslo změněno
+.IP "" .5i
+Počet dnů, po jejichž uplynutí musí být heslo změněno
+.IP "" .5i
+Počet dnů před lhůtou, kdy je uživatel varován, že heslo vyprší
+.IP "" .5i
+Počet dnů, po jejichž uplynutí po propadnutí hesla je zablokován účet.
+.IP "" .5i
+Počet dnů od 1. ledna 1970, kdy byl účet zablokován
+.IP "" .5i
+Rezervované pole
+.PP
+Pole hesla musí být vyplněno. Zašifrované heslo se skládá ze 13 až 24
+znaků z 64 prvkové množiny znaků (a až z, A až Z, 0 až 9, \. a
+/). \fIcrypt(3)\fR obsahuje detailní informace o tom, jak
+interpretovat tento řetězec.
+.PP
+Datum poslední změny hesla je dáno počtem dní od 1. ledna 1970. Heslo
+nesmí býti znovu změněno dokud řádně neuplyne specifikovaný počet dní,
+a musí být změněno po uplynutí maximálního počtu dní. Pokud je
+minimální počet dnů platnosti hesla vyšší než maximální počet
+povolených dní, heslo nemůže být změněno uživatelem.
+.PP
+Účet je považován za neaktivní a bude zablokován, jestliže heslo není
+změněno během určeného počtu dní po vypršení platnosti hesla. Účet
+bude také zablokován v určený den nezávisle na ostatních informacích o
+vypršení hesla.
+.PP
+Tyto informace o heslu a době jeho platnosti mají prioritu před
+informacemi uloženými v souboru \fB/etc/passwd\fR.
+.PP
+Tento soubor nesmí být čitelný řádnými uživateli, má\-li být
+ochrana hesel účinná.
+.SH SOUBORY
+\fI/etc/passwd\fR \- informace o uživatelských účtech
+.br
+\fI/etc/shadow\fR \- zašifrovaná hesla uživatelů
+.SH DALŠÍ INFORMACE
+chage(1),
+login(1),
+passwd(1),
+su(1),
+sulogin(1M),
+shadow(3),
+passwd(5),
+pwconv(8),
+pwunconv(8)
diff --git a/man/cs/man8/faillog.8 b/man/cs/man8/faillog.8
new file mode 100644
index 0000000..e4dcae0
--- /dev/null
+++ b/man/cs/man8/faillog.8
@@ -0,0 +1,86 @@
+.TH "FAILLOG" "8" "11/05/2005" "System Management Commands" "System Management Commands"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "JMÉNO"
+faillog \- zobrazí záznamy faillogu nebo nastaví limity na chybná přihlášení
+.SH "POUŽITÍ"
+.HP 8
+\fBfaillog\fR [\fIvolby\fR]
+.SH "POPIS"
+.PP
+\fBfaillog\fR
+formátuje obsah souboru
+\fI/var/log/faillog\fR,
+ve kterém se zaznamenávají neúspěšné pokusy o přihlášení. Také jej
+můžete použít pro správu počitadel neúspěšných přihlášení a pro
+nastavení limitů. Spuštení programu
+\fBfaillog\fR
+bez argumentů vypíše záznamy o neúspěšném přihlášení těch uživatelů,
+u kterých je zaznamenáno alespoň jedno chybné přihlášení.
+.SH "VOLBY"
+.PP
+Příkaz
+\fBfaillog\fR
+akceptuje následující volby:
+.TP
+\fB\-a\fR, \fB\-\-all\fR
+Zobrazí záznamy faillogu všech uživatelů.
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+Zobrazí nápovědu a skončí.
+.TP
+\fB\-l\fR, \fB\-\-lock\-time\fR \fISEK\fR
+Po neúspěšném přihlášení zamkne účet na
+\fISEK\fR
+sekund.
+.TP
+\fB\-m\fR, \fB\-\-maximum\fR \fIMAX\fR
+Nastaví maximální počet chybných přihlášení na MAX. Poté se účet
+zablokuje. Hodnotou 0 tento limit zrušíte. Pro uživatele
+\fIroot\fR
+by hodnota
+\fIMAX\fR
+měla být vždy 0, abyste předešli útokům typu odepření služby.
+.TP
+\fB\-r\fR, \fB\-\-reset\fR
+Vynuluje počitadla chybných přihlášení všech uživatelů. Při použití s
+parametrem \-u
+\fIÚČET\fR
+vynuluje počitadlo pouze pro daný účet. Tato operace vyžaduje práva
+zápisu k souboru
+\fI/var/log/faillog\fR.
+.TP
+\fB\-t\fR, \fB\-\-time\fR \fIDNŮ\fR
+Zobrazí záznamy faillogu novější než
+\fIDNŮ\fR. Volba
+\fB\-t\fR
+má vyšší prioritu než
+\fB\-u\fR.
+.TP
+\fB\-u\fR, \fB\-\-user\fR \fIÚČET\fR
+Zobrazí záznamy faillogu (resp. s volbami
+\fB\-l\fR,
+\fB\-m\fR
+nebo
+\fB\-r\fR
+upraví počitadla nebo limity chybných přihlášení) pouze pro uživatele
+\fIÚČET\fR.
+.SH "ZÁLUDNOSTI"
+.PP
+\fBfaillog\fR
+vypíše pouze uživatele, bez úspěšného přihlášení od poslední
+chyby. Chcete-li vypsat i uživatele, kteří se od poslední chyby
+úspěšně přihlásili, musíte si je explicitně vyžádat volbou
+\fB\-u\fR
+nebo
+\fB\-a\fR.
+.SH "SOUBORY"
+.TP
+\fI/var/log/faillog\fR
+soubor pro záznam chybných pokusů o přihlášení
+.SH "VIZ TAKÉ"
+.PP
+\fBlogin\fR(1),
+\fBfaillog\fR(5).
diff --git a/man/cs/man8/groupadd.8 b/man/cs/man8/groupadd.8
new file mode 100644
index 0000000..c8e3977
--- /dev/null
+++ b/man/cs/man8/groupadd.8
@@ -0,0 +1,113 @@
+.TH "GROUPADD" "8" "01/02/2006" "System Management Commands" "System Management Commands"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "JMÉNO"
+groupadd \- Vytvoří skupinu
+.SH "POUŽITÍ"
+.HP 9
+\fBgroupadd\fR [\-g\ \fIGID\fR\ [\-o]] [\-f] [\-K\ \fIKLÍČ\fR=\fIHODNOTA\fR] \fIskupina\fR
+.SH "POPIS"
+.PP
+Příkaz
+\fBgroupadd\fR
+vytváří nové skupinové účty na základě zadaných hodnot a výchozích
+hodnot nastavených v systému. Nová skupina bude podle pořeby zařazena
+do příslušných systémových souborů.
+.SH "VOLBY"
+.PP
+Příkaz
+\fBgroupadd\fR
+akceptuje následující volby:
+.TP
+\fB\-f\fR
+Tato volba způsobí, že v případě kolize se stávající skupinou se vrátí
+úspěšný návratový kód. Při použití s volbou
+\fB\-g\fR, pokud již dané GID existuje, vybere se unikární GID
+automaticky, (tj. jako kdybyste
+\fB\-g\fR
+nezadali).
+.TP
+\fB\-g\fR \fIGID\fR
+Číselná hodnota skupinového ID. Tato hodnota musí být unikátní (s
+výjimkou volby
+\fB\-o\fR).
+Hodnota musí být nezáporné celé číslo. Jako výchozí hodnota se použije
+nejmenší ID větší než 999 a zároveň větší než ID všech ostatních
+skupin. Hodnoty mezi 0 a 999 jsou obvykle rezervovány pro systémové účty.
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+Zobrazí nápovědu a skončí.
+.TP
+\fB\-K \fR\fB\fIKLÍČ\fR\fR\fB=\fR\fB\fIHODNOTA\fR\fR
+Přepíše výchozí nastavení /etc/login.defs (GID_MIN, GID_MAX
+apod.). Můžete zadat i více voleb najednou.
+.sp
+Příklad:
+\fB\-K \fR\fIGID_MIN\fR=\fI100\fR\fB \-K \fR\fIGID_MAX\fR=\fI499\fR
+.sp
+Poznámka:
+\fB\-K \fR\fIGID_MIN\fR=\fI10\fR,\fIGID_MAX\fR=\fI499\fR
+zatím nefunguje.
+.TP
+\fB\-o\fR
+Tato volba povolí přidání skupiny s neunikátním GID.
+.SH "SOUBORY"
+.TP
+\fI/etc/group\fR
+informace o skupinových účtech
+.TP
+\fI/etc/gshadow\fR
+citlivé informace o skupinových účtech
+.TP
+\fI/etc/login.defs\fR
+nastavení systému shadow
+.SH "ZÁLUDNOSTI"
+.PP
+Názvy skupin musí začínat malým písmenem nebo podtržítkem a mohou
+obsahovat pouze malá písmena, čísla, podtržítka, pomlčky a závěrečný
+dolar. Vyjádřeno regulárním výrazem: [a\-z_][a\-z0\-9_\-]*[$]
+.PP
+Délka názvu skupiny nesmí překročit 16 znaků.
+.PP
+Jestliže již název skupiny existuje v externí databázi typu NIS,
+příkaz
+\fBgroupadd\fR
+odmítne požadavek na vytvoření této skupiny.
+.SH "NÁVRATOVÉ HODNOTY"
+.PP
+Příkaz
+\fBgroupadd\fR
+může skončit s následujícími návratovými hodnotami:
+.TP
+\fI0\fR
+úspěch
+.TP
+\fI2\fR
+chybná syntaxe příkazu
+.TP
+\fI3\fR
+chybný argument parametru
+.TP
+\fI4\fR
+GID není unikátní (pokud nepoužijete
+\fB\-o\fR)
+.TP
+\fI9\fR
+název skupiny není unikátní
+.TP
+\fI10\fR
+nelze aktualizovat soubor group
+.SH "VIZ TAKÉ"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8).
diff --git a/man/cs/man8/groupdel.8 b/man/cs/man8/groupdel.8
new file mode 100644
index 0000000..7991d9d
--- /dev/null
+++ b/man/cs/man8/groupdel.8
@@ -0,0 +1,60 @@
+.TH "GROUPDEL" "8" "11/05/2005" "System Management Commands" "System Management Commands"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "JMÉNO"
+groupdel \- Smaže skupinu
+.SH "POUŽITÍ"
+.HP 9
+\fBgroupdel\fR \fIskupina\fR
+.SH "POPIS"
+.PP
+Příkaz
+\fBgroupdel\fR
+upraví soubory se systémovými účty tak, že smaže všechy záznamy, které
+se odkazují na
+\fIskupinu\fR. Daná skupina musí existovat.
+.PP
+Abyste zajistili, že na souborových systémech nezůstanou soubory
+vlastněné mazanou skupinou, musíte je sami vyhledat a příslušně
+opravit.
+.SH "ZÁLUDNOSTI"
+.PP
+Nelze odstranit primární skupinu uživatele. Nejprve musíte odstranit
+uživatele a pak teprve danou skupinu.
+.SH "SOUBORY"
+.TP
+\fI/etc/group\fR
+informace o skupinových účtech
+.TP
+\fI/etc/gshadow\fR
+citlivé informace o skupinových účtech
+.SH "NÁVRATOVÉ HODNOTY"
+.PP
+Příkaz
+\fBgroupdel\fR
+může skončit s následujícími návratovými hodnotami:
+.TP
+\fI0\fR
+úspěch
+.TP
+\fI2\fR
+chybná syntaxe příkazu
+.TP
+\fI8\fR
+nelze odstranit primární skupinu uživatele
+.TP
+\fI10\fR
+nelze aktualizovat soubor group
+.SH "VIZ TAKÉ"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)
diff --git a/man/cs/man8/groupmems.8 b/man/cs/man8/groupmems.8
new file mode 100644
index 0000000..daaae62
--- /dev/null
+++ b/man/cs/man8/groupmems.8
@@ -0,0 +1,85 @@
+.TH "GROUPMEMS" "8" "10/20/2005" "System Management Commands" "System Management Commands"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "JMÉNO"
+groupmems \- Spravuje členy uživatelovy primární skupiny
+.SH "POUŽITÍ"
+.HP 10
+\fBgroupmems\fR \-a\ \fIuživatel\fR \-d\ \fIuživatel\fR \-l \-D [\-g\ \fIskupina\fR]
+.SH "POPIS"
+.PP
+Nástroj
+\fBgroupmems\fR
+umožňuje uživatelům spravovat členství ve své primární skupině, aniž
+by museli mít superuživatelská práva. Nástroj
+\fBgroupmems\fR
+je zamýšlen pro systémy, které pro každého uživatele vytváří vlastní
+primární skupinu (tj. novak / novak).
+.PP
+Pouze superuživatel (root) může použít
+\fBgroupmems\fR
+ke změně členství v ostatních skupinách.
+.SH "VOLBY"
+.PP
+Příkaz
+\fBgroupmems\fR
+akceptuje následující volby:
+.TP
+\fB\-a\fR \fIuživatel\fR
+Přidá do seznamu členů skupiny nového uživatele.
+.TP
+\fB\-d\fR \fIuživatel\fR
+Ze seznamu členů skupiny odebere daného uživatele.
+.TP
+\fB\-D\fR
+Ze seznamu členů skupiny odebere všechny uživatele.
+.TP
+\fB\-g\fR \fIskupina\fR
+Superuživatel může zadat skupinu, které se mají změny týkat.
+.TP
+\fB\-l\fR
+Vypíše seznam členů skupiny.
+.SH "NASTAVENÍ"
+.PP
+Příkaz
+\fBgroupmems\fR
+by měl mít nastavena práva
+2710
+a měl by jej vlastnit uživatel
+\fIroot\fR
+a skupina
+\fIgroups\fR. Správce systému může uživatelům povolit
+používání nástroje
+\fBgroupmems\fR
+tím, že přidá uživatele do skupiny groups. Uživatelé si pak mohou sami
+spravovat členství ve skupinách.
+.sp
+.nf
+ $ groupadd \-r groups
+ $ chmod 2710 groupmems
+ $ chown root.groups groupmems
+ $ groupmems \-g groups \-a gk4
+
+.fi
+.SH "SOUBORY"
+.TP
+\fI/etc/group\fR
+informace o skupinových účtech
+.TP
+\fI/etc/gshadow\fR
+citlivé informace o skupinových účtech
+.SH "VIZ TAKÉ"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8).
+.SH "AUTOR"
+.PP
+George Kraft IV (gk4@us.ibm.com)
diff --git a/man/cs/man8/groupmod.8 b/man/cs/man8/groupmod.8
new file mode 100644
index 0000000..9338994
--- /dev/null
+++ b/man/cs/man8/groupmod.8
@@ -0,0 +1,79 @@
+.TH "GROUPMOD" "8" "11/05/2005" "System Management Commands" "System Management Commands"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "JMÉNO"
+groupmod \- upraví skupinu
+.SH "POUŽITÍ"
+.HP 9
+\fBgroupmod\fR [\-g\ \fIgid\fR\ [\-o\ ]] [\-n\ \fInové_jméno_skupiny\fR] \fIskupina\fR
+.SH "POPIS"
+.PP
+Příkaz
+\fBgroupmod\fR
+upravuje soubory se systémovými účty tak, aby odpovídaly změnám
+zadaným na příkazové řádce.
+.SH "VOLBY"
+.PP
+Příkaz
+\fBgroupmod\fR
+akceptuje následující volby:
+.TP
+\fB\-g\fR \fIgid\fR
+Číselná hodnota skupinového ID. Tato hodnota musí být unikátní (s
+výjimkou volby
+\fB\-o\fR.
+Hodnota musí být nezáporné celé číslo. Hodnoty mezi 0 a 999 jsou
+obvykle rezervovány pro systémové účty. U souborů, které měly skupinu
+nastavenu na staré GID, ji musíte přenastavit na nové GID ručně.
+.TP
+\fB\-n\fR \fInové_jméno_skupiny\fR
+Jméno skupiny se změní ze
+\fIskupina\fR
+na
+\fInové_jméno_skupiny\fR.
+.SH "SOUBORY"
+.TP
+\fI/etc/group\fR
+informace o skupinových účtech
+.TP
+\fI/etc/gshadow\fR
+citlivé informace o skupinových účtech
+.SH "NÁVRATOVÉ HODNOTY"
+.PP
+Příkaz
+\fBgroupmod\fR
+může skončit s následujícími návratovými hodnotami:
+.TP
+\fI0\fR
+úspěch
+.TP
+\fI2\fR
+chybná syntaxe příkazu
+.TP
+\fI3\fR
+chybný argument parametru
+.TP
+\fI4\fR
+zadaná skupina neexistuje
+.TP
+\fI6\fR
+zadaná skupina neexistuje
+.TP
+\fI9\fR
+skupina je již používána
+.TP
+\fI10\fR
+nelze aktualizovat soubor group
+.SH "VIZ TAKÉ"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8).
diff --git a/man/cs/man8/grpck.8 b/man/cs/man8/grpck.8
new file mode 100644
index 0000000..07e67d7
--- /dev/null
+++ b/man/cs/man8/grpck.8
@@ -0,0 +1,111 @@
+.TH "GRPCK" "8" "11/05/2005" "System Management Commands" "System Management Commands"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "JMÉNO"
+grpck \- ověří integritu skupinových souborů
+.SH "POUŽITÍ"
+.HP 6
+\fBgrpck\fR [\-r] [\fIgroup\fR\ \fIshadow\fR]
+.SH "POPIS"
+.PP
+\fBgrpck\fR
+ověří integritu informací používaných při autentizaci vůči
+systému. Kontrolují se všechny záznamy v souborech
+\fI/etc/group\fR
+a
+\fI/etc/gshadow\fR,
+zda mají správný formát a zda jsou ve všech polích jen povolená
+data. Při nalezení chybně formátovaných a jinak neopravitelných
+záznamů je uživatel vybídnut, aby tyto záznamy smazal.
+.PP
+U každého záznamu se kontroluje, zda:
+.TP 3
+\(bu
+má správný počet polí
+.TP
+\(bu
+má unikátní název skupiny
+.TP
+\(bu
+obsahuje platný seznam členů a administrátorů
+.PP
+Kontroly na správný počet polí a unikátnost názvu skupiny jsou
+kritické. Pokud má záznam chybný počet polí, je uživatel vybídnut, aby
+záznam smazal. Nebude-li uživatel souhlasit, jsou všechny další
+kontroly přeskočeny. U záznamu s duplicitním názvem skupiny je
+uživatel taktéž vybídnut ke smazání záznamu, ovšem následné kontroly
+nejsou přeskočeny. Všechny ostatní chyby jsou považovány pouze za
+varování a uživatel je vyzván k nápravě chyby pomocí příkazu
+\fBgroupmod\fR.
+.PP
+Příkazy pracující se souborem
+\fI/etc/group\fR
+nemohou měnit porušené nebo duplicitní záznamy. V takových případech
+byste měli použít
+\fBgrpck\fR
+a chybné záznamy odstranit.
+.SH "VOLBY"
+.PP
+\fBgrpck\fR
+implicitně pracuje nad soubory
+\fI/etc/group\fR
+a
+\fI/etc/gshadow\fR. Uživatel může zvolit jiné soubory pomocí parametrů
+\fIgroup\fR
+a
+\fIshadow\fR.
+Uživatel dále může parametrem
+\fB\-r\fR
+zapnout režim jen pro čtení. Prakticky to znamená, že na všechny
+otázky ohledně změn se automaticky odpoví
+\fIne\fR.
+\fBgrpck\fR
+také umí setřítit záznamy v souborech
+\fI/etc/group\fR
+a
+\fI/etc/gshadow\fR
+podle GID. Pro třídící režim zadejte parametr
+\fB\-s\fR.
+V takovém případě se neprovádí žádné kontroly, soubory se pouze
+setřídí.
+.SH "SOUBORY"
+.TP
+\fI/etc/group\fR
+informace o skupinových účtech
+.TP
+\fI/etc/gshadow\fR
+citlivé informace o skupinových účtech
+.TP
+\fI/etc/passwd\fR
+informace o uživatelských účtech
+.SH "NÁVRATOVÉ HODNOTY"
+.PP
+Příkaz
+\fBgrpck\fR
+může skončit s následujícími návratovými hodnotami:
+.TP
+\fI0\fR
+úspěch
+.TP
+\fI1\fR
+chybná syntaxe příkazu
+.TP
+\fI2\fR
+jeden či více chybných záznamů
+.TP
+\fI3\fR
+nelze otevřít soubory skupin
+.TP
+\fI4\fR
+nelze zamknout soubory skupin
+.TP
+\fI5\fR
+nelze aktualizovat soubory skupin
+.SH "VIZ TAKÉ"
+.PP
+\fBgroup\fR(5),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBgroupmod\fR(8).
diff --git a/man/cs/man8/lastlog.8 b/man/cs/man8/lastlog.8
new file mode 100644
index 0000000..67682ec
--- /dev/null
+++ b/man/cs/man8/lastlog.8
@@ -0,0 +1,40 @@
+.\" @(#)lastlog.8 3.3 08:24:58 29 Sep 1993 (National Guard Release)
+.\" $Id$
+.\"
+.TH LASTLOG 8
+.SH JMÉNO
+lastlog \- prozkoumá soubor lastlog
+.SH SYNTAXE
+.B lastlog
+.RB [ \-u
+.IR přihlašovací\-jméno ]
+.RB [ \-t
+.IR dny ]
+.SH POPIS
+\fBlastlog\fR setřídí a zobrazí obsah souboru
+\fI/var/log/lastlog\fR,
+který obsahuje záznamy o přihlašování a odhlašování uživatelů v systému.
+Zobrazí se \fBpřihlašovací jméno\fR, \fBjméno terminálu\fR a \fBčas posledního
+přihlašení\fR.
+Standardně (tj. bez dalších voleb) lastlog zobrazí záznamy setříděné
+podle čísla UID.
+Použití přepínače \fB\-u \fIpřihlašovací\-jméno\fR
+způsobí, že bude vytištěn pouze poslední záznam o přihlášení příslušného uživatele.
+Zadáním \fB\-t \fIdny\fR se zobrazí pouze
+ta přihlášení, které jsou dřívější než zadané \fIdny\fR.
+Parametr \fB\-t\fR překryje případný parametr \fB\-u\fR.
+.PP
+Pokud se uživatel ještě nikdy nepřihlásil, zobrazí se zpráva \fB"**Never logged in**"\fR (Nikdy nepřihlášen)
+místo jména terminálu a času.
+.SH SOUBORY
+/var/log/lastlog \- soubor se záznamy o přihlášení a odhlášení
+.SH NÁMITKY
+Velké rozdíly v UID číslech jsou způsobeny tím, že lastlog program běžel dlouho bez
+výstupu na obrazovku (např. mmdf=800 a poslední uid=170, program se bude
+jevit jako s uid 171\-799).
+.SH AUTOŘI
+Julianne Frances Haugh (jfh@austin.ibm.com)
+.br
+Phillip Street
+.SH PŘELOŽIL
+Ondřej Pavlíček (mox@post.cz).
diff --git a/man/cs/man8/logoutd.8 b/man/cs/man8/logoutd.8
new file mode 100644
index 0000000..ed264c4
--- /dev/null
+++ b/man/cs/man8/logoutd.8
@@ -0,0 +1,30 @@
+.TH "LOGOUTD" "8" "11/05/2005" "System Management Commands" "System Management Commands"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "JMÉNO"
+logoutd \- Omezuje čas přihlášení
+.SH "POUŽITÍ"
+.HP 8
+\fBlogoutd\fR
+.SH "POPIS"
+.PP
+\fBlogoutd\fR
+omezí čas přihlášení a seznam povolených portů podle pravidel zadaných v
+\fI/etc/porttime\fR.
+\fBlogoutd\fR
+by se měl spouštět z
+\fI/etc/rc\fR. Program pak pravidelně kontroluje soubor
+\fI/var/run/utmp\fR
+a zkoumá, zda má daný uživatel oprávnění být přihlášen na daném portu
+v daný čas. Všechna sezení, která porušují pravidla zadaná v
+\fI/etc/porttime\fR,
+jsou ukončena.
+.SH "SOUBORY"
+.TP
+\fI/etc/porttime\fR
+oprávnění k portům a přihlášení
+.TP
+\fI/var/run/utmp\fR
+seznam aktuálních sezení
diff --git a/man/cs/man8/nologin.8 b/man/cs/man8/nologin.8
new file mode 100644
index 0000000..92d6be8
--- /dev/null
+++ b/man/cs/man8/nologin.8
@@ -0,0 +1,28 @@
+.TH "NOLOGIN" "8" "01/07/2006" "System Management Commands" "System Management Commands"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "JMÉNO"
+nologin \- slušně odmítne přihlášení
+.SH "PŘEHLED"
+.HP 8
+\fBnologin\fR
+.SH "POPIS"
+.PP
+\fBnologin\fR
+zobrazí oznámení, že účet není dostupný a skončí s nenulovým
+návratovým kódem. Program je zamýšlen jako vhodná náhrada pole shell
+v souboru passwd pro zablokované účty.
+.PP
+Pro zakázání všech přihlášení prozkoumejte
+\fBnologin\fR(5).
+.SH "VIZ TAKÉ"
+.PP
+\fBlogin\fR(1),
+\fBnologin\fR(5).
+.SH "HISTORIE"
+.PP
+Příkaz
+\fBnologin\fR
+se objevil v BSD 4.4.
diff --git a/man/cs/man8/vipw.8 b/man/cs/man8/vipw.8
new file mode 100644
index 0000000..fbef380
--- /dev/null
+++ b/man/cs/man8/vipw.8
@@ -0,0 +1,71 @@
+.TH "VIPW" "8" "12/07/2005" "System Management Commands" "System Management Commands"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "JMÉNO"
+vipw, vigr \- slouží k úpravě souborů password, group, shadow-password a shadow-group.
+.SH "POUŽITÍ"
+.HP 5
+\fBvipw\fR [volby]
+.HP 5
+\fBvigr\fR [volby]
+.SH "POPIS"
+.PP
+\fBvipw\fR
+a
+\fBvigr\fR
+upravují soubory
+\fI/etc/passwd\fR
+a
+\fI/etc/group\fR. S přepínačem
+\fB\-s\fR
+budou upravovat stínové verze obou souborů, tj.
+\fI/etc/shadow\fR
+a
+\fI/etc/gshadow\fR. Programy používají zámky, aby předešly porušení
+souborů. Při hledání editoru nejprve zkusí proměnnou prostředí
+\fB$VISUAL\fR, poté proměnnou prostředí
+\fB$EDITOR\fR a na konec spustí standardní editor
+\fBvi\fR(1).
+.SH "VOLBY"
+.PP
+Příkazy
+\fBvipw\fR
+a
+\fBvigr\fR
+akceptují následující volby:
+.TP
+\fB\-g\fR, \fB\-\-group\fR
+Upraví databázi skupin.
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+Zobrazí nápovědu a skončí.
+.TP
+\fB\-p\fR, \fB\-\-passwd\fR
+Upraví databázi hesel.
+.TP
+\fB\-q\fR, \fB\-\-quiet\fR
+Tichý režim.
+.TP
+\fB\-s\fR, \fB\-\-shadow\fR
+Upraví databázi shadow nebo gshadow.
+.SH "SOUBORY"
+.TP
+\fI/etc/group\fR
+informace o skupinových účtech
+.TP
+\fI/etc/gshadow\fR
+stínový soubor pro skupiny
+.TP
+\fI/etc/passwd\fR
+informace o uživatelských účtech
+.TP
+\fI/etc/shadow\fR
+citlivé informace o uživatelských účtech
+.SH "VIZ TAKÉ"
+.PP
+\fBvi\fR(1),
+\fBgroup\fR(5),
+\fBgshadow\fR(5)\fBpasswd\fR(5),
+\fBshadow\fR(5).
diff --git a/man/da/Makefile.am b/man/da/Makefile.am
new file mode 100644
index 0000000..a3b0922
--- /dev/null
+++ b/man/da/Makefile.am
@@ -0,0 +1,32 @@
+
+mandir = @mandir@/da
+
+# 2012.01.28 - activate manpages with more than 50% translated messages
+man_MANS = \
+ man1/chfn.1 \
+ man8/groupdel.8 \
+ man1/groups.1 \
+ man5/gshadow.5 \
+ man8/logoutd.8 \
+ man1/newgrp.1 \
+ man8/nologin.8 \
+ man1/sg.1 \
+ man8/vigr.8 \
+ man8/vipw.8
+
+man_nopam =
+
+if !USE_PAM
+man_MANS += $(man_nopam)
+endif
+
+EXTRA_DIST = \
+ $(man_MANS) \
+ man1/id.1
+
+if USE_PAM
+EXTRA_DIST += $(man_nopam)
+endif
+
+include ../generate_translations.mak
+
diff --git a/man/da/Makefile.in b/man/da/Makefile.in
new file mode 100644
index 0000000..2e74ff1
--- /dev/null
+++ b/man/da/Makefile.in
@@ -0,0 +1,718 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@USE_PAM_FALSE@am__append_1 = $(man_nopam)
+@USE_PAM_TRUE@am__append_2 = $(man_nopam)
+subdir = man/da
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" \
+ "$(DESTDIR)$(man8dir)"
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/../generate_mans.mak \
+ $(srcdir)/../generate_translations.mak $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@/da
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# 2012.01.28 - activate manpages with more than 50% translated messages
+man_MANS = man1/chfn.1 man8/groupdel.8 man1/groups.1 man5/gshadow.5 \
+ man8/logoutd.8 man1/newgrp.1 man8/nologin.8 man1/sg.1 \
+ man8/vigr.8 man8/vipw.8 $(am__append_1)
+man_nopam =
+EXTRA_DIST = $(man_MANS) man1/id.1 $(am__append_2)
+LANG = $(notdir $(CURDIR))
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_FALSE@PAM_COND = no_pam
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_TRUE@PAM_COND = pam
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_FALSE@SHADOWGRP_COND = no_gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_TRUE@SHADOWGRP_COND = gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@WITH_TCB_FALSE@TCB_COND = no_tcb
+@ENABLE_REGENERATE_MAN_TRUE@@WITH_TCB_TRUE@TCB_COND = tcb
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_FALSE@SHA_CRYPT_COND = no_sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_TRUE@SHA_CRYPT_COND = sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@@ENABLE_SUBIDS_FALSE@SUBIDS_COND = no_subids
+@ENABLE_REGENERATE_MAN_TRUE@@ENABLE_SUBIDS_TRUE@SUBIDS_COND = subids
+CLEANFILES = messages.mo login.defs.d $(EXTRA_DIST) $(addsuffix .xml,$(EXTRA_DIST)) config.xml
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../generate_translations.mak $(srcdir)/../generate_mans.mak $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/da/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign man/da/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(srcdir)/../generate_translations.mak $(srcdir)/../generate_mans.mak $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+install-man5: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man5dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.5[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man5:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man5dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.5[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir)
+install-man8: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man8dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.8[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man8:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man8dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.8[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+@ENABLE_REGENERATE_MAN_FALSE@clean-local:
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ clean-local cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-man5 install-man8 install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+ uninstall-am uninstall-man uninstall-man1 uninstall-man5 \
+ uninstall-man8
+
+.PRECIOUS: Makefile
+
+
+@ENABLE_REGENERATE_MAN_TRUE@config.xml: ../config.xml.in
+@ENABLE_REGENERATE_MAN_TRUE@ $(MAKE) -C .. config.xml
+@ENABLE_REGENERATE_MAN_TRUE@ cp ../config.xml $@
+
+@ENABLE_REGENERATE_MAN_TRUE@messages.mo: ../po/$(LANG).po
+@ENABLE_REGENERATE_MAN_TRUE@ msgfmt ../po/$(LANG).po -o messages.mo
+
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.d:
+@ENABLE_REGENERATE_MAN_TRUE@ ln -sf ../login.defs.d login.defs.d
+
+@ENABLE_REGENERATE_MAN_TRUE@%.xml: ../%.xml messages.mo login.defs.d
+@ENABLE_REGENERATE_MAN_TRUE@ if grep -q SHADOW-CONFIG-HERE $< ; then \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^<!-- SHADOW-CONFIG-HERE -->/<!ENTITY % config SYSTEM "config.xml">%config;/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ else \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^\(<!DOCTYPE .*docbookx.dtd"\)>/\1 [<!ENTITY % config SYSTEM "config.xml">%config;]>/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ fi
+@ENABLE_REGENERATE_MAN_TRUE@ itstool -d -l $(LANG) -m messages.mo -o . $@
+@ENABLE_REGENERATE_MAN_TRUE@ sed -i 's:\(^<refentry .*\)>:\1 lang="$(LANG)">:' $@
+
+@ENABLE_REGENERATE_MAN_TRUE@%.xml-config: %.xml
+@ENABLE_REGENERATE_MAN_TRUE@ if grep -q SHADOW-CONFIG-HERE $<; then \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^<!-- SHADOW-CONFIG-HERE -->/<!ENTITY % config SYSTEM "config.xml">%config;/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ else \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^\(<!DOCTYPE .*docbookx.dtd"\)>/\1 [<!ENTITY % config SYSTEM "config.xml">%config;]>/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ fi
+
+@ENABLE_REGENERATE_MAN_TRUE@man1/% man3/% man5/% man8/%: %.xml-config Makefile config.xml
+@ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam profile.condition "$(PAM_COND);$(SHADOWGRP_COND);$(TCB_COND);$(SHA_CRYPT_COND);$(SUBIDS_COND)" \
+@ENABLE_REGENERATE_MAN_TRUE@ --param "man.authors.section.enabled" "0" \
+@ENABLE_REGENERATE_MAN_TRUE@ --stringparam "man.output.base.dir" "" \
+@ENABLE_REGENERATE_MAN_TRUE@ --param "man.output.in.separate.dir" "1" \
+@ENABLE_REGENERATE_MAN_TRUE@ -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/profile-docbook.xsl $<
+
+@ENABLE_REGENERATE_MAN_TRUE@clean-local:
+@ENABLE_REGENERATE_MAN_TRUE@ rm -rf man1 man3 man5 man8
+
+#$(man_MANS):
+# @echo you need to run configure with --enable-man to generate man pages
+
+@ENABLE_REGENERATE_MAN_TRUE@man8/grpconv.8 man8/grpunconv.8 man8/pwunconv.8: man8/pwconv.8
+
+@ENABLE_REGENERATE_MAN_TRUE@man3/getspnam.3: man3/shadow.3
+
+@ENABLE_REGENERATE_MAN_TRUE@man8/vigr.8: man8/vipw.8
+
+@ENABLE_REGENERATE_MAN_FALSE@$(man_MANS):
+@ENABLE_REGENERATE_MAN_FALSE@ @echo you need to run configure with --enable-man to generate man pages
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/da/man1/chfn.1 b/man/da/man1/chfn.1
new file mode 100644
index 0000000..d111584
--- /dev/null
+++ b/man/da/man1/chfn.1
@@ -0,0 +1,163 @@
+'\" t
+.\" Title: chfn
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: User Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: Danish
+.\"
+.TH "CHFN" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAVN"
+chfn \- change real user name and information
+.SH "SYNOPSIS"
+.HP \w'\fBchfn\fR\ 'u
+\fBchfn\fR [\fItilvalg\fR] [\fILOGIND\fR]
+.SH "BESKRIVELSE"
+.PP
+The
+\fBchfn\fR
+command changes user fullname, office room number, office phone number, and home phone number information for a user\*(Aqs account\&. This information is typically printed by
+\fBfinger\fR(1)
+and similar programs\&. A normal user may only change the fields for her own account, subject to the restrictions in
+/etc/login\&.defs\&. (The default configuration is to prevent users from changing their fullname\&.) The superuser may change any field for any account\&. Additionally, only the superuser may use the
+\fB\-o\fR
+option to change the undefined portions of the GECOS field\&.
+.PP
+These fields must not contain any colons\&. Except for the
+\fIother\fR
+field, they should not contain any comma or equal sign\&. It is also recommended to avoid non\-US\-ASCII characters, but this is only enforced for the phone numbers\&. The
+\fIother\fR
+field is used to store accounting information used by other applications\&.
+.SH "TILVALG"
+.PP
+The options which apply to the
+\fBchfn\fR
+command are:
+.PP
+\fB\-f\fR, \fB\-\-full\-name\fR\ \&\fIFULL_NAME\fR
+.RS 4
+\(AEndr brugerens navn\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-home\-phone\fR\ \&\fIHOME_PHONE\fR
+.RS 4
+\(AEndr brugerens telefonnummer\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-other\fR\ \&\fIOTHER\fR
+.RS 4
+\(AEndr brugerens anden GECOS\-information\&. Dette felt bruges til at gemme kontoinformation brugt af andre programmer, og kan kun \(aendres af en superbruger\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-room\fR\ \&\fIROOM_NUMBER\fR
+.RS 4
+\(AEndr brugerens v\(aerelsesnummer\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-help\fR
+.RS 4
+Vis hj\(aelpeteksten og afslut\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-work\-phone\fR\ \&\fIWORK_PHONE\fR
+.RS 4
+\(AEndr brugerens arbejdsnummer\&.
+.RE
+.PP
+If none of the options are selected,
+\fBchfn\fR
+operates in an interactive fashion, prompting the user with the current values for all of the fields\&. Enter the new value to change the field, or leave the line blank to use the current value\&. The current value is displayed between a pair of
+\fB[ ]\fR
+marks\&. Without options,
+\fBchfn\fR
+prompts for the current user account\&.
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHFN_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchfn\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCHFN_RESTRICT\fR (string)
+.RS 4
+This parameter specifies which values in the
+\fIgecos\fR
+field of the
+/etc/passwd
+file may be changed by regular users using the
+\fBchfn\fR
+program\&. It can be any combination of letters
+\fIf\fR,
+\fIr\fR,
+\fIw\fR,
+\fIh\fR, for Full name, Room number, Work phone, and Home phone, respectively\&. For backward compatibility,
+\fIyes\fR
+is equivalent to
+\fIrwh\fR
+and
+\fIno\fR
+is equivalent to
+\fIfrwh\fR\&. If not specified, only the superuser can make any changes\&. The most restrictive setting is better achieved by not installing
+\fBchfn\fR
+SUID\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will not be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.SH "FILER"
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Information om brugerkonto\&.
+.RE
+.SH "SE OGS\(oA"
+.PP
+\fBchsh\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/da/man1/groups.1 b/man/da/man1/groups.1
new file mode 100644
index 0000000..88d46b0
--- /dev/null
+++ b/man/da/man1/groups.1
@@ -0,0 +1,64 @@
+'\" t
+.\" Title: groups
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: User Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: Danish
+.\"
+.TH "GROUPS" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAVN"
+groups \- vis aktuelle gruppenavne
+.SH "SYNOPSIS"
+.HP \w'\fBgroups\fR\ 'u
+\fBgroups\fR [\fIbruger\fR]
+.SH "BESKRIVELSE"
+.PP
+The
+\fBgroups\fR
+command displays the current group names or ID values\&. If the value does not have a corresponding entry in
+/etc/group, the value will be displayed as the numerical group value\&. The optional
+\fIuser\fR
+parameter will display the groups for the named
+\fIuser\fR\&.
+.SH "NOTE"
+.PP
+Systems which do not support concurrent group sets will have the information from
+/etc/group
+reported\&. The user must use
+\fBnewgrp\fR
+or
+\fBsg\fR
+to change his current real and effective group ID\&.
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Information om gruppekonto\&.
+.RE
+.SH "SE OGS\(oA"
+.PP
+\fBnewgrp\fR(1),
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)\&.
diff --git a/man/da/man1/id.1 b/man/da/man1/id.1
new file mode 100644
index 0000000..507f181
--- /dev/null
+++ b/man/da/man1/id.1
@@ -0,0 +1,60 @@
+'\" t
+.\" Title: id
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: User Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: Danish
+.\"
+.TH "ID" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAVN"
+id \- display current user and group ID names
+.SH "SYNOPSIS"
+.HP \w'\fBid\fR\ 'u
+\fBid\fR [\-a]
+.SH "BESKRIVELSE"
+.PP
+The
+\fBid\fR
+command displays the current real and effective user and group ID names or values\&. If the value does not have a corresponding entry in
+/etc/passwd
+or
+/etc/group, the value will be displayed without the corresponding name\&. The optional
+\fB\-a\fR
+flag will display the group set on systems which support multiple concurrent group membership\&.
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Information om gruppekonto\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Information om brugerkonto\&.
+.RE
+.SH "SE OGS\(oA"
+.PP
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)
diff --git a/man/da/man1/newgrp.1 b/man/da/man1/newgrp.1
new file mode 100644
index 0000000..d9b5b62
--- /dev/null
+++ b/man/da/man1/newgrp.1
@@ -0,0 +1,98 @@
+'\" t
+.\" Title: newgrp
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: User Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: Danish
+.\"
+.TH "NEWGRP" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAVN"
+newgrp \- log ind p\(oa en ny gruppe
+.SH "SYNOPSIS"
+.HP \w'\fBnewgrp\fR\ 'u
+\fBnewgrp\fR [\-] [\fIgroup\fR]
+.SH "BESKRIVELSE"
+.PP
+The
+\fBnewgrp\fR
+command is used to change the current group ID during a login session\&. If the optional
+\fB\-\fR
+flag is given, the user\*(Aqs environment will be reinitialized as though the user had logged in, otherwise the current environment, including current working directory, remains unchanged\&.
+.PP
+\fBnewgrp\fR
+changes the current real group ID to the named group, or to the default group listed in
+/etc/passwd
+if no group name is given\&.
+\fBnewgrp\fR
+also tries to add the group to the user groupset\&. If not root, the user will be prompted for a password if she does not have a password (in
+/etc/shadow
+if this user has an entry in the shadowed password file, or in
+/etc/passwd
+otherwise) and the group does, or if the user is not listed as a member and the group has a password\&. The user will be denied access if the group password is empty and the user is not listed as a member\&.
+.PP
+If there is an entry for this group in
+/etc/gshadow, then the list of members and the password of this group will be taken from this file, otherwise, the entry in
+/etc/group
+is considered\&.
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "FILER"
+.PP
+/etc/passwd
+.RS 4
+Information om brugerkonto\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Information om sikret brugerkonto\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Information om gruppekonto\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Information om sikret gruppekonto\&.
+.RE
+.SH "SE OGS\(oA"
+.PP
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBsu\fR(1),
+\fBsg\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/da/man1/sg.1 b/man/da/man1/sg.1
new file mode 100644
index 0000000..417eb02
--- /dev/null
+++ b/man/da/man1/sg.1
@@ -0,0 +1,97 @@
+'\" t
+.\" Title: sg
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: User Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: Danish
+.\"
+.TH "SG" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAVN"
+sg \- execute command as different group ID
+.SH "SYNOPSIS"
+.HP \w'\fBsg\fR\ 'u
+\fBsg\fR [\-] [group\ [\-c\ ]\ command]
+.SH "BESKRIVELSE"
+.PP
+The
+\fBsg\fR
+command works similar to
+\fBnewgrp\fR
+but accepts a command\&. The command will be executed with the
+/bin/sh
+shell\&. With most shells you may run
+\fBsg\fR
+from, you need to enclose multi\-word commands in quotes\&. Another difference between
+\fBnewgrp\fR
+and
+\fBsg\fR
+is that some shells treat
+\fBnewgrp\fR
+specially, replacing themselves with a new instance of a shell that
+\fBnewgrp\fR
+creates\&. This doesn\*(Aqt happen with
+\fBsg\fR, so upon exit from a
+\fBsg\fR
+command you are returned to your previous group ID\&.
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "FILER"
+.PP
+/etc/passwd
+.RS 4
+Information om brugerkonto\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Information om sikret brugerkonto\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Information om gruppekonto\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Information om sikret gruppekonto\&.
+.RE
+.SH "SE OGS\(oA"
+.PP
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBnewgrp\fR(1),
+\fBsu\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/da/man5/gshadow.5 b/man/da/man5/gshadow.5
new file mode 100644
index 0000000..a5f7a43
--- /dev/null
+++ b/man/da/man5/gshadow.5
@@ -0,0 +1,101 @@
+'\" t
+.\" Title: gshadow
+.\" Author: Nicolas Fran\(,cois <nicolas.francois@centraliens.net>
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: File Formats and Conversions
+.\" Source: shadow-utils 4.8.1
+.\" Language: Danish
+.\"
+.TH "GSHADOW" "5" "23/01/2020" "shadow\-utils 4\&.8\&.1" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAVN"
+gshadow \- shadowed group file
+.SH "BESKRIVELSE"
+.PP
+/etc/gshadow
+contains the shadowed information for group accounts\&.
+.PP
+This file must not be readable by regular users if password security is to be maintained\&.
+.PP
+Each line of this file contains the following colon\-separated fields:
+.PP
+\fBgruppenavn\fR
+.RS 4
+Det skal v\(aere et gyldigt gruppenavn, som findes p\(oa systemet\&.
+.RE
+.PP
+\fBencrypted password\fR
+.RS 4
+Refer to
+\fBcrypt\fR(3)
+for details on how this string is interpreted\&.
+.sp
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), for instance ! or *, users will not be able to use a unix password to access the group (but group members do not need the password)\&.
+.sp
+The password is used when a user who is not a member of the group wants to gain the permissions of this group (see
+\fBnewgrp\fR(1))\&.
+.sp
+This field may be empty, in which case only the group members can gain the group permissions\&.
+.sp
+A password field which starts with an exclamation mark means that the password is locked\&. The remaining characters on the line represent the password field before the password was locked\&.
+.sp
+This password supersedes any password specified in
+/etc/group\&.
+.RE
+.PP
+\fBadministratorer\fR
+.RS 4
+Det skal v\(aere en kommaadskilt liste af brugernavne\&.
+.sp
+Administratorer kan \(aendre adgangskoden eller medlemmerne af gruppen\&.
+.sp
+Administratorer har ogs\(oa de samme rettigheder som medlemmerne (se nedenfor)\&.
+.RE
+.PP
+\fBmedlemmer\fR
+.RS 4
+Det skal v\(aere en kommaadskilt liste af brugernavne\&.
+.sp
+Medlemmer kan tilg\(oa gruppen uden at blive spurgt efter en adgangskode\&.
+.sp
+You should use the same list of users as in
+/etc/group\&.
+.RE
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Information om gruppekonto\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Information om sikret gruppekonto\&.
+.RE
+.SH "SE OGS\(oA"
+.PP
+\fBgpasswd\fR(5),
+\fBgroup\fR(5),
+\fBgrpck\fR(8),
+\fBgrpconv\fR(8),
+\fBnewgrp\fR(1)\&.
diff --git a/man/da/man8/groupdel.8 b/man/da/man8/groupdel.8
new file mode 100644
index 0000000..33012e0
--- /dev/null
+++ b/man/da/man8/groupdel.8
@@ -0,0 +1,145 @@
+'\" t
+.\" Title: groupdel
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Kommandoer for systemh\(oandtering
+.\" Source: shadow-utils 4.8.1
+.\" Language: Danish
+.\"
+.TH "GROUPDEL" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Kommandoer for systemh\(oandterin"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAVN"
+groupdel \- slet en gruppe
+.SH "SYNOPSIS"
+.HP \w'\fBgroupdel\fR\ 'u
+\fBgroupdel\fR [\fItilvalg\fR] \fIGRUPPE\fR
+.SH "BESKRIVELSE"
+.PP
+The
+\fBgroupdel\fR
+command modifies the system account files, deleting all entries that refer to
+\fIGROUP\fR\&. The named group must exist\&.
+.SH "TILVALG"
+.PP
+The options which apply to the
+\fBgroupdel\fR
+command are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Vis hj\(aelpeteksten og afslut\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.SH "CAVEATS"
+.PP
+De kan ikke fjerne den prim\(aere gruppe for en eksisterende bruger\&. Du skal fjerne brugeren f\(/or du fjerner gruppen\&.
+.PP
+Du skal manuelt kontrollere alle filsystemer for at sikre dig, at ingen filer fortsat er ejet af denne gruppe\&.
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Information om gruppekonto\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Information om sikret gruppekonto\&.
+.RE
+.SH "EXIT VALUES"
+.PP
+The
+\fBgroupdel\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI8\fR
+.RS 4
+can\*(Aqt remove user\*(Aqs primary group
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.SH "SE OGS\(oA"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/da/man8/logoutd.8 b/man/da/man8/logoutd.8
new file mode 100644
index 0000000..7876fc2
--- /dev/null
+++ b/man/da/man8/logoutd.8
@@ -0,0 +1,57 @@
+'\" t
+.\" Title: logoutd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Kommandoer for systemh\(oandtering
+.\" Source: shadow-utils 4.8.1
+.\" Language: Danish
+.\"
+.TH "LOGOUTD" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Kommandoer for systemh\(oandterin"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAVN"
+logoutd \- p\(oatving restriktioner for logindperiode
+.SH "SYNOPSIS"
+.HP \w'\fBlogoutd\fR\ 'u
+\fBlogoutd\fR
+.SH "BESKRIVELSE"
+.PP
+\fBlogoutd\fR
+enforces the login time and port restrictions specified in
+/etc/porttime\&.
+\fBlogoutd\fR
+should be started from
+/etc/rc\&. The
+/var/run/utmp
+file is scanned periodically and each user name is checked to see if the named user is permitted on the named port at the current time\&. Any login session which is violating the restrictions in
+/etc/porttime
+is terminated\&.
+.SH "FILER"
+.PP
+/etc/porttime
+.RS 4
+File containing port access\&.
+.RE
+.PP
+/var/run/utmp
+.RS 4
+Liste over aktuelle logindsessioner\&.
+.RE
diff --git a/man/da/man8/nologin.8 b/man/da/man8/nologin.8
new file mode 100644
index 0000000..5aeca9d
--- /dev/null
+++ b/man/da/man8/nologin.8
@@ -0,0 +1,55 @@
+'\" t
+.\" Title: nologin
+.\" Author: Nicolas Fran\(,cois <nicolas.francois@centraliens.net>
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Kommandoer for systemh\(oandtering
+.\" Source: shadow-utils 4.8.1
+.\" Language: Danish
+.\"
+.TH "NOLOGIN" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Kommandoer for systemh\(oandterin"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAVN"
+nologin \- n\(aegt venligt et logind
+.SH "SYNOPSIS"
+.HP \w'\fBnologin\fR\ 'u
+\fBnologin\fR
+.SH "BESKRIVELSE"
+.PP
+The
+\fBnologin\fR
+command displays a message that an account is not available and exits non\-zero\&. It is intended as a replacement shell field for accounts that have been disabled\&.
+.PP
+To disable all logins, investigate
+\fBnologin\fR(5)\&.
+.PP
+If
+\fBSSH_ORIGINAL_COMMAND\fR
+is populated it will be logged\&.
+.SH "SE OGS\(oA"
+.PP
+\fBlogin\fR(1),
+\fBnologin\fR(5)\&.
+.SH "HISTORIK"
+.PP
+The
+\fBnologin\fR
+command appeared in BSD 4\&.4\&.
diff --git a/man/da/man8/vigr.8 b/man/da/man8/vigr.8
new file mode 100644
index 0000000..ff72d7a
--- /dev/null
+++ b/man/da/man8/vigr.8
@@ -0,0 +1 @@
+.so man8/vipw.8
diff --git a/man/da/man8/vipw.8 b/man/da/man8/vipw.8
new file mode 100644
index 0000000..c075b10
--- /dev/null
+++ b/man/da/man8/vipw.8
@@ -0,0 +1,137 @@
+'\" t
+.\" Title: vipw
+.\" Author: Marek Micha\(/lkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Kommandoer for systemh\(oandtering
+.\" Source: shadow-utils 4.8.1
+.\" Language: Danish
+.\"
+.TH "VIPW" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Kommandoer for systemh\(oandterin"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAVN"
+vipw, vigr \- rediger adgangskoden, gruppe, shadow\-adgangskode\- eller shadow\-gruppe\-fil
+.SH "SYNOPSIS"
+.HP \w'\fBvipw\fR\ 'u
+\fBvipw\fR [\fItilvalg\fR]
+.HP \w'\fBvigr\fR\ 'u
+\fBvigr\fR [\fItilvalg\fR]
+.SH "BESKRIVELSE"
+.PP
+The
+\fBvipw\fR
+and
+\fBvigr\fR
+commands edits the files
+/etc/passwd
+and
+/etc/group, respectively\&. With the
+\fB\-s\fR
+flag, they will edit the shadow versions of those files,
+/etc/shadow
+and
+/etc/gshadow, respectively\&. The programs will set the appropriate locks to prevent file corruption\&. When looking for an editor, the programs will first try the environment variable
+\fB$VISUAL\fR, then the environment variable
+\fB$EDITOR\fR, and finally the default editor,
+\fBvi\fR(1)\&.
+.SH "TILVALG"
+.PP
+The options which apply to the
+\fBvipw\fR
+and
+\fBvigr\fR
+commands are:
+.PP
+\fB\-g\fR, \fB\-\-group\fR
+.RS 4
+Rediger gruppedatabase\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Vis hj\(aelpeteksten og afslut\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-passwd\fR
+.RS 4
+Rediger passwd\-database\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Stille tilstand\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shadow\fR
+.RS 4
+Rediger shadow\- eller gshadow\-database\&.
+.RE
+.SH "MILJ\(/O"
+.PP
+\fBVISUEL\fR
+.RS 4
+Redigeringsprogram der skal bruges\&.
+.RE
+.PP
+\fBREDIGERINGSPROGRAM\fR
+.RS 4
+Editor to be used if
+\fBVISUAL\fR
+is not set\&.
+.RE
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Information om gruppekonto\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Information om sikret gruppekonto\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Information om brugerkonto\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Information om sikret brugerkonto\&.
+.RE
+.SH "SE OGS\(oA"
+.PP
+\fBvi\fR(1),
+\fBgroup\fR(5),
+\fBgshadow\fR(5)
+,
+\fBpasswd\fR(5), ,
+\fBshadow\fR(5)\&.
diff --git a/man/de/Makefile.am b/man/de/Makefile.am
new file mode 100644
index 0000000..3cd302e
--- /dev/null
+++ b/man/de/Makefile.am
@@ -0,0 +1,66 @@
+
+mandir = @mandir@/de
+
+man_MANS = \
+ man1/chage.1 \
+ man1/chfn.1 \
+ man8/chgpasswd.8 \
+ man8/chpasswd.8 \
+ man1/chsh.1 \
+ man1/expiry.1 \
+ man5/faillog.5 \
+ man8/faillog.8 \
+ man3/getspnam.3 \
+ man1/gpasswd.1 \
+ man8/groupadd.8 \
+ man8/groupdel.8 \
+ man8/groupmems.8 \
+ man8/groupmod.8 \
+ man1/groups.1 \
+ man8/grpck.8 \
+ man8/grpconv.8 \
+ man8/grpunconv.8 \
+ man5/gshadow.5 \
+ man8/lastlog.8 \
+ man1/login.1 \
+ man5/login.defs.5 \
+ man8/logoutd.8 \
+ man1/newgrp.1 \
+ man8/newusers.8 \
+ man8/nologin.8 \
+ man1/passwd.1 \
+ man5/passwd.5 \
+ man8/pwck.8 \
+ man8/pwconv.8 \
+ man8/pwunconv.8 \
+ man1/sg.1 \
+ man3/shadow.3 \
+ man5/shadow.5 \
+ man1/su.1 \
+ man5/suauth.5 \
+ man8/useradd.8 \
+ man8/userdel.8 \
+ man8/usermod.8 \
+ man8/vigr.8 \
+ man8/vipw.8
+
+man_nopam = \
+ man5/limits.5 \
+ man5/login.access.5 \
+ man5/porttime.5
+
+if !USE_PAM
+man_MANS += $(man_nopam)
+endif
+
+EXTRA_DIST = \
+ $(man_MANS) \
+ man1/id.1 \
+ man8/sulogin.8
+
+if USE_PAM
+EXTRA_DIST += $(man_nopam)
+endif
+
+include ../generate_translations.mak
+
diff --git a/man/de/Makefile.in b/man/de/Makefile.in
new file mode 100644
index 0000000..46602dc
--- /dev/null
+++ b/man/de/Makefile.in
@@ -0,0 +1,773 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@USE_PAM_FALSE@am__append_1 = $(man_nopam)
+@USE_PAM_TRUE@am__append_2 = $(man_nopam)
+subdir = man/de
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" \
+ "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"
+man3dir = $(mandir)/man3
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/../generate_mans.mak \
+ $(srcdir)/../generate_translations.mak $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@/de
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = man1/chage.1 man1/chfn.1 man8/chgpasswd.8 man8/chpasswd.8 \
+ man1/chsh.1 man1/expiry.1 man5/faillog.5 man8/faillog.8 \
+ man3/getspnam.3 man1/gpasswd.1 man8/groupadd.8 man8/groupdel.8 \
+ man8/groupmems.8 man8/groupmod.8 man1/groups.1 man8/grpck.8 \
+ man8/grpconv.8 man8/grpunconv.8 man5/gshadow.5 man8/lastlog.8 \
+ man1/login.1 man5/login.defs.5 man8/logoutd.8 man1/newgrp.1 \
+ man8/newusers.8 man8/nologin.8 man1/passwd.1 man5/passwd.5 \
+ man8/pwck.8 man8/pwconv.8 man8/pwunconv.8 man1/sg.1 \
+ man3/shadow.3 man5/shadow.5 man1/su.1 man5/suauth.5 \
+ man8/useradd.8 man8/userdel.8 man8/usermod.8 man8/vigr.8 \
+ man8/vipw.8 $(am__append_1)
+man_nopam = \
+ man5/limits.5 \
+ man5/login.access.5 \
+ man5/porttime.5
+
+EXTRA_DIST = $(man_MANS) man1/id.1 man8/sulogin.8 $(am__append_2)
+LANG = $(notdir $(CURDIR))
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_FALSE@PAM_COND = no_pam
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_TRUE@PAM_COND = pam
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_FALSE@SHADOWGRP_COND = no_gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_TRUE@SHADOWGRP_COND = gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@WITH_TCB_FALSE@TCB_COND = no_tcb
+@ENABLE_REGENERATE_MAN_TRUE@@WITH_TCB_TRUE@TCB_COND = tcb
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_FALSE@SHA_CRYPT_COND = no_sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_TRUE@SHA_CRYPT_COND = sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@@ENABLE_SUBIDS_FALSE@SUBIDS_COND = no_subids
+@ENABLE_REGENERATE_MAN_TRUE@@ENABLE_SUBIDS_TRUE@SUBIDS_COND = subids
+CLEANFILES = messages.mo login.defs.d $(EXTRA_DIST) $(addsuffix .xml,$(EXTRA_DIST)) config.xml
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../generate_translations.mak $(srcdir)/../generate_mans.mak $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/de/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign man/de/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(srcdir)/../generate_translations.mak $(srcdir)/../generate_mans.mak $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+install-man3: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man3dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.3[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man3:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man3dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.3[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir)
+install-man5: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man5dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.5[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man5:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man5dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.5[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir)
+install-man8: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man8dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.8[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man8:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man8dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.8[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+@ENABLE_REGENERATE_MAN_FALSE@clean-local:
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1 install-man3 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man3 uninstall-man5 \
+ uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ clean-local cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-man3 install-man5 install-man8 \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags-am uninstall uninstall-am uninstall-man uninstall-man1 \
+ uninstall-man3 uninstall-man5 uninstall-man8
+
+.PRECIOUS: Makefile
+
+
+@ENABLE_REGENERATE_MAN_TRUE@config.xml: ../config.xml.in
+@ENABLE_REGENERATE_MAN_TRUE@ $(MAKE) -C .. config.xml
+@ENABLE_REGENERATE_MAN_TRUE@ cp ../config.xml $@
+
+@ENABLE_REGENERATE_MAN_TRUE@messages.mo: ../po/$(LANG).po
+@ENABLE_REGENERATE_MAN_TRUE@ msgfmt ../po/$(LANG).po -o messages.mo
+
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.d:
+@ENABLE_REGENERATE_MAN_TRUE@ ln -sf ../login.defs.d login.defs.d
+
+@ENABLE_REGENERATE_MAN_TRUE@%.xml: ../%.xml messages.mo login.defs.d
+@ENABLE_REGENERATE_MAN_TRUE@ if grep -q SHADOW-CONFIG-HERE $< ; then \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^<!-- SHADOW-CONFIG-HERE -->/<!ENTITY % config SYSTEM "config.xml">%config;/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ else \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^\(<!DOCTYPE .*docbookx.dtd"\)>/\1 [<!ENTITY % config SYSTEM "config.xml">%config;]>/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ fi
+@ENABLE_REGENERATE_MAN_TRUE@ itstool -d -l $(LANG) -m messages.mo -o . $@
+@ENABLE_REGENERATE_MAN_TRUE@ sed -i 's:\(^<refentry .*\)>:\1 lang="$(LANG)">:' $@
+
+@ENABLE_REGENERATE_MAN_TRUE@%.xml-config: %.xml
+@ENABLE_REGENERATE_MAN_TRUE@ if grep -q SHADOW-CONFIG-HERE $<; then \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^<!-- SHADOW-CONFIG-HERE -->/<!ENTITY % config SYSTEM "config.xml">%config;/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ else \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^\(<!DOCTYPE .*docbookx.dtd"\)>/\1 [<!ENTITY % config SYSTEM "config.xml">%config;]>/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ fi
+
+@ENABLE_REGENERATE_MAN_TRUE@man1/% man3/% man5/% man8/%: %.xml-config Makefile config.xml
+@ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam profile.condition "$(PAM_COND);$(SHADOWGRP_COND);$(TCB_COND);$(SHA_CRYPT_COND);$(SUBIDS_COND)" \
+@ENABLE_REGENERATE_MAN_TRUE@ --param "man.authors.section.enabled" "0" \
+@ENABLE_REGENERATE_MAN_TRUE@ --stringparam "man.output.base.dir" "" \
+@ENABLE_REGENERATE_MAN_TRUE@ --param "man.output.in.separate.dir" "1" \
+@ENABLE_REGENERATE_MAN_TRUE@ -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/profile-docbook.xsl $<
+
+@ENABLE_REGENERATE_MAN_TRUE@clean-local:
+@ENABLE_REGENERATE_MAN_TRUE@ rm -rf man1 man3 man5 man8
+
+#$(man_MANS):
+# @echo you need to run configure with --enable-man to generate man pages
+
+@ENABLE_REGENERATE_MAN_TRUE@man8/grpconv.8 man8/grpunconv.8 man8/pwunconv.8: man8/pwconv.8
+
+@ENABLE_REGENERATE_MAN_TRUE@man3/getspnam.3: man3/shadow.3
+
+@ENABLE_REGENERATE_MAN_TRUE@man8/vigr.8: man8/vipw.8
+
+@ENABLE_REGENERATE_MAN_FALSE@$(man_MANS):
+@ENABLE_REGENERATE_MAN_FALSE@ @echo you need to run configure with --enable-man to generate man pages
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/de/man1/chage.1 b/man/de/man1/chage.1
new file mode 100644
index 0000000..5c02f8b
--- /dev/null
+++ b/man/de/man1/chage.1
@@ -0,0 +1,189 @@
+'\" t
+.\" Title: chage
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Dienstprogramme f\(:ur Benutzer
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "CHAGE" "1" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Dienstprogramme f\(:ur Benutzer"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+chage \- \(:andert die Information zum Passwortverfall
+.SH "\(:UBERSICHT"
+.HP \w'\fBchage\fR\ 'u
+\fBchage\fR [\fIOptionen\fR] \fIANMELDENAME\fR
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBchage\fR
+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\&.
+.SH "OPTIONEN"
+.PP
+The options which apply to the
+\fBchage\fR
+command are:
+.PP
+\fB\-d\fR, \fB\-\-lastday\fR\ \&\fILAST_DAY\fR
+.RS 4
+Legt die Anzahl der Tage, gerechnet ab dem 1\&. Januar 1970, fest, seit denen das Passwort das letzte Mal gewechselt wurde\&. Das Datum kann auch im Format JJJJ\-MM\-TT (oder in dem Format, das in Ihrer Region verbreitet ist) angegeben werden\&.
+.RE
+.PP
+\fB\-E\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+Setzt das Datum oder die Anzahl der Tage seit dem 1\&. Januar 1970, ab dem auf das Benutzerkonto nicht mehr zugegriffen werden kann\&. Das Datum kann auch im Format JJJJ\-MM\-TT (oder in dem Format, das in Ihrer Region verbreitet ist) angegeben werden\&. Ein Benutzer, dessen Konto gesperrt ist, muss sich mit dem Systemadministrator in Verbindung setzen, ehe er sich wieder am System anmelden kann\&.
+.sp
+Passing the number
+\fI\-1\fR
+as the
+\fIEXPIRE_DATE\fR
+will remove an account expiration date\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+zeigt die Hilfe an und beendet das Programm
+.RE
+.PP
+\fB\-i\fR, \fB\-\-iso8601\fR
+.RS 4
+When printing dates, use YYYY\-MM\-DD format\&.
+.RE
+.PP
+\fB\-I\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+Set the number of days of inactivity after a password has expired before the account is locked\&. The
+\fIINACTIVE\fR
+option is the number of days of inactivity\&. A user whose account is locked must contact the system administrator before being able to use the system again\&.
+.sp
+Passing the number
+\fI\-1\fR
+as the
+\fIINACTIVE\fR
+will remove an account\*(Aqs inactivity\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-list\fR
+.RS 4
+zeigt Informationen zur Kontoalterung an
+.RE
+.PP
+\fB\-m\fR, \fB\-\-mindays\fR\ \&\fIMIN_DAYS\fR
+.RS 4
+Set the minimum number of days between password changes to
+\fIMIN_DAYS\fR\&. A value of zero for this field indicates that the user may change their password at any time\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-maxdays\fR\ \&\fIMAX_DAYS\fR
+.RS 4
+Set the maximum number of days during which a password is valid\&. When
+\fIMAX_DAYS\fR
+plus
+\fILAST_DAY\fR
+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
+\fB\-W\fR
+option, which provides the user with advance warning\&.
+.sp
+Passing the number
+\fI\-1\fR
+as
+\fIMAX_DAYS\fR
+will remove checking a password\*(Aqs validity\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-W\fR, \fB\-\-warndays\fR\ \&\fIWARN_DAYS\fR
+.RS 4
+Set the number of days of warning before a password change is required\&. The
+\fIWARN_DAYS\fR
+option is the number of days prior to the password expiring that a user will be warned their password is about to expire\&.
+.RE
+.PP
+If none of the options are selected,
+\fBchage\fR
+operates in an interactive fashion, prompting the user with the current values for all of the fields\&. Enter the new value to change the field, or leave the line blank to use the current value\&. The current value is displayed between a pair of
+\fI[ ]\fR
+marks\&.
+.SH "ANMERKUNGEN"
+.PP
+The
+\fBchage\fR
+program requires a shadow password file to be available\&.
+.PP
+The
+\fBchage\fR
+command is restricted to the root user, except for the
+\fB\-l\fR
+option, which may be used by an unprivileged user to determine when their password or account is due to expire\&.
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.SH "DATEIEN"
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/shadow
+.RS 4
+verschl\(:usselte Informationen zu den Benutzerkonten
+.RE
+.SH "R\(:UCKGABEWERTE"
+.PP
+The
+\fBchage\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+permission denied
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI15\fR
+.RS 4
+can\*(Aqt find the shadow password file
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/de/man1/chfn.1 b/man/de/man1/chfn.1
new file mode 100644
index 0000000..ce155d3
--- /dev/null
+++ b/man/de/man1/chfn.1
@@ -0,0 +1,163 @@
+'\" t
+.\" Title: chfn
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Dienstprogramme f\(:ur Benutzer
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "CHFN" "1" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Dienstprogramme f\(:ur Benutzer"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+chfn \- \(:andert den vollst\(:andigen Namen eines Benutzers und sonstige Informationen
+.SH "\(:UBERSICHT"
+.HP \w'\fBchfn\fR\ 'u
+\fBchfn\fR [\fIOptionen\fR] [\fIANMELDENAME\fR]
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBchfn\fR
+command changes user fullname, office room number, office phone number, and home phone number information for a user\*(Aqs account\&. This information is typically printed by
+\fBfinger\fR(1)
+and similar programs\&. A normal user may only change the fields for her own account, subject to the restrictions in
+/etc/login\&.defs\&. (The default configuration is to prevent users from changing their fullname\&.) The superuser may change any field for any account\&. Additionally, only the superuser may use the
+\fB\-o\fR
+option to change the undefined portions of the GECOS field\&.
+.PP
+These fields must not contain any colons\&. Except for the
+\fIother\fR
+field, they should not contain any comma or equal sign\&. It is also recommended to avoid non\-US\-ASCII characters, but this is only enforced for the phone numbers\&. The
+\fIother\fR
+field is used to store accounting information used by other applications\&.
+.SH "OPTIONEN"
+.PP
+The options which apply to the
+\fBchfn\fR
+command are:
+.PP
+\fB\-f\fR, \fB\-\-full\-name\fR\ \&\fIFULL_NAME\fR
+.RS 4
+ver\(:andert den vollst\(:andigen Namen des Benutzers
+.RE
+.PP
+\fB\-h\fR, \fB\-\-home\-phone\fR\ \&\fIHOME_PHONE\fR
+.RS 4
+\(:andert die private Telefonnummer des Benutzers
+.RE
+.PP
+\fB\-o\fR, \fB\-\-other\fR\ \&\fIOTHER\fR
+.RS 4
+Ver\(:andert die sonstigen Informationen \(:uber den Benutzer in der GECOS\-Zeile\&. In diesem Feld werden Kontoinformationen anderer Anwendungen gespeichert\&. Es kann nur vom Superuser ver\(:andert werden\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-room\fR\ \&\fIROOM_NUMBER\fR
+.RS 4
+\(:andert die Zimmernummer des Benutzers
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-help\fR
+.RS 4
+zeigt die Hilfe an und beendet das Programm
+.RE
+.PP
+\fB\-w\fR, \fB\-\-work\-phone\fR\ \&\fIWORK_PHONE\fR
+.RS 4
+ver\(:andert die berufliche Telefonnummer des Benutzers
+.RE
+.PP
+If none of the options are selected,
+\fBchfn\fR
+operates in an interactive fashion, prompting the user with the current values for all of the fields\&. Enter the new value to change the field, or leave the line blank to use the current value\&. The current value is displayed between a pair of
+\fB[ ]\fR
+marks\&. Without options,
+\fBchfn\fR
+prompts for the current user account\&.
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHFN_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchfn\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCHFN_RESTRICT\fR (string)
+.RS 4
+This parameter specifies which values in the
+\fIgecos\fR
+field of the
+/etc/passwd
+file may be changed by regular users using the
+\fBchfn\fR
+program\&. It can be any combination of letters
+\fIf\fR,
+\fIr\fR,
+\fIw\fR,
+\fIh\fR, for Full name, Room number, Work phone, and Home phone, respectively\&. For backward compatibility,
+\fIyes\fR
+is equivalent to
+\fIrwh\fR
+and
+\fIno\fR
+is equivalent to
+\fIfrwh\fR\&. If not specified, only the superuser can make any changes\&. The most restrictive setting is better achieved by not installing
+\fBchfn\fR
+SUID\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+Diese Zeichenkette wird bei der Eingabeaufforderung des Passworts (Prompt) verwendet\&. Standardm\(:a\(ssig wird \(FcPassword: \(Fo oder eine \(:Ubersetzung davon benutzt\&. Wenn Sie diese Variable definieren, wird die Eingabeaufforderung nicht \(:ubersetzt\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguration der Shadow\-Passwort\-Werkzeugsammlung
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBchsh\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/de/man1/chsh.1 b/man/de/man1/chsh.1
new file mode 100644
index 0000000..3d41053
--- /dev/null
+++ b/man/de/man1/chsh.1
@@ -0,0 +1,121 @@
+'\" t
+.\" Title: chsh
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Dienstprogramme f\(:ur Benutzer
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "CHSH" "1" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Dienstprogramme f\(:ur Benutzer"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+chsh \- \(:andert die Anmelde\-Shell
+.SH "\(:UBERSICHT"
+.HP \w'\fBchsh\fR\ 'u
+\fBchsh\fR [\fIOptionen\fR] [\fIANMELDENAME\fR]
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBchsh\fR
+command changes the user login shell\&. This determines the name of the user\*(Aqs initial login command\&. A normal user may only change the login shell for her own account; the superuser may change the login shell for any account\&.
+.SH "OPTIONEN"
+.PP
+The options which apply to the
+\fBchsh\fR
+command are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+zeigt die Hilfe an und beendet das Programm
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+Der Name der neuen Anmelde\-Shell des Benutzers\&. Falls dieses Feld leer gelassen wird, verwendet das System die Standard\-Anmelde\-Shell\&.
+.RE
+.PP
+If the
+\fB\-s\fR
+option is not selected,
+\fBchsh\fR
+operates in an interactive fashion, prompting the user with the current login shell\&. Enter the new value to change the shell, or leave the line blank to use the current one\&. The current shell is displayed between a pair of
+\fI[ ]\fR
+marks\&.
+.SH "ANMERKUNGEN"
+.PP
+The only restriction placed on the login shell is that the command name must be listed in
+/etc/shells, unless the invoker is the superuser, and then any value may be added\&. An account with a restricted login shell may not change her login shell\&. For this reason, placing
+/bin/rsh
+in
+/etc/shells
+is discouraged since accidentally changing to a restricted shell would prevent the user from ever changing her login shell back to its original value\&.
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHSH_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchsh\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+Diese Zeichenkette wird bei der Eingabeaufforderung des Passworts (Prompt) verwendet\&. Standardm\(:a\(ssig wird \(FcPassword: \(Fo oder eine \(:Ubersetzung davon benutzt\&. Wenn Sie diese Variable definieren, wird die Eingabeaufforderung nicht \(:ubersetzt\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/shells
+.RS 4
+Liste der m\(:oglichen Anmelde\-Shells
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguration der Shadow\-Passwort\-Werkzeugsammlung
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBchfn\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/de/man1/expiry.1 b/man/de/man1/expiry.1
new file mode 100644
index 0000000..e0161e5
--- /dev/null
+++ b/man/de/man1/expiry.1
@@ -0,0 +1,74 @@
+'\" t
+.\" Title: expiry
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Dienstprogramme f\(:ur Benutzer
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "EXPIRY" "1" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Dienstprogramme f\(:ur Benutzer"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+expiry \- \(:uberpr\(:uft die Regeln f\(:ur den Verfall des Passworts und setzt diese um
+.SH "\(:UBERSICHT"
+.HP \w'\fBexpiry\fR\ 'u
+\fBexpiry\fR \fIOption\fR
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBexpiry\fR
+command checks (\fB\-c\fR) the current password expiration and forces (\fB\-f\fR) changes when required\&. It is callable as a normal user command\&.
+.SH "OPTIONEN"
+.PP
+The options which apply to the
+\fBexpiry\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-check\fR
+.RS 4
+\(:uberpr\(:uft den Verfall des Passworts des aktuellen Benutzers
+.RE
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+erzwingt den Wechsel des Passworts des aktuellen Benutzers, falls dieses abgelaufen ist
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+zeigt die Hilfe an und beendet das Programm
+.RE
+.SH "DATEIEN"
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/shadow
+.RS 4
+verschl\(:usselte Informationen zu den Benutzerkonten
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/de/man1/gpasswd.1 b/man/de/man1/gpasswd.1
new file mode 100644
index 0000000..4b13b35
--- /dev/null
+++ b/man/de/man1/gpasswd.1
@@ -0,0 +1,232 @@
+'\" t
+.\" Title: gpasswd
+.\" Author: Rafal Maszkowski
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Dienstprogramme f\(:ur Benutzer
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "GPASSWD" "1" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Dienstprogramme f\(:ur Benutzer"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+gpasswd \- administer /etc/group and /etc/gshadow
+.SH "\(:UBERSICHT"
+.HP \w'\fBgpasswd\fR\ 'u
+\fBgpasswd\fR [\fIOption\fR] \fIGruppe\fR
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBgpasswd\fR
+command is used to administer
+/etc/group, and /etc/gshadow\&. Every group can have
+administrators,
+members and a password\&.
+.PP
+System administrators can use the
+\fB\-A\fR
+option to define group administrator(s) and the
+\fB\-M\fR
+option to define members\&. They have all rights of group administrators and members\&.
+.PP
+\fBgpasswd\fR
+called by
+a group administrator
+with a group name only prompts for the new password of the
+\fIgroup\fR\&.
+.PP
+If a password is set the members can still use
+\fBnewgrp\fR(1)
+without a password, and non\-members must supply the password\&.
+.SS "Hinweise zu Gruppenpassw\(:ortern"
+.PP
+Gruppenpassw\(:orter beinhalten ein Sicherheitsrisiko, da mehrere Personen das Passwort kennen\&. Dennoch k\(:onnen sie sinnvoll sein, um die Zusammenarbeit zwischen Benutzern zu erleichtern\&.
+.SH "OPTIONEN"
+.PP
+Except for the
+\fB\-A\fR
+and
+\fB\-M\fR
+options, the options cannot be combined\&.
+.PP
+The options which apply to the
+\fBgpasswd\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-add\fR\ \&\fIuser\fR
+.RS 4
+Add the
+\fIuser\fR
+to the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR\ \&\fIuser\fR
+.RS 4
+Remove the
+\fIuser\fR
+from the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+zeigt die Hilfe an und beendet das Programm
+.RE
+.PP
+\fB\-Q\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-remove\-password\fR
+.RS 4
+Remove the password from the named
+\fIgroup\fR\&. The group password will be empty\&. Only group members will be allowed to use
+\fBnewgrp\fR
+to join the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-restrict\fR
+.RS 4
+Restrict the access to the named
+\fIgroup\fR\&. The group password is set to "!"\&. Only group members with a password will be allowed to use
+\fBnewgrp\fR
+to join the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-A\fR, \fB\-\-administrators\fR\ \&\fIuser\fR,\&.\&.\&.
+.RS 4
+Liste der Gruppenverwalter bestimmen
+.RE
+.PP
+\fB\-M\fR, \fB\-\-members\fR\ \&\fIuser\fR,\&.\&.\&.
+.RS 4
+Liste der Mitglieder der Gruppe bestimmen
+.RE
+.SH "WARNUNGEN"
+.PP
+This tool only operates on the
+/etc/group
+and /etc/gshadow files\&.
+Thus you cannot change any NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+Damit wird der standardm\(:a\(ssige Verschl\(:usselungsalgorithmus, mit dem Passw\(:orter verschl\(:usselt werden, bestimmt (soweit nicht in der Befehlszeile ein Algorithmus angegeben wird)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Der Standardwert ist 0, was zur Folge hat, dass die Anzahl der Mitglieder einer Gruppe nicht begrenzt ist\&.
+.sp
+Diese F\(:ahigkeit (der aufgeteilten Gruppe) erm\(:oglicht es, die Zeilenl\(:ange in der Gruppendatei zu begrenzen\&. Damit kann sichergestellt werden, dass die Zeilen f\(:ur NIS\-Gruppen nicht l\(:anger als 1024 Zeichen sind\&.
+.sp
+Falls Sie eine solche Begrenzung ben\(:otigen, k\(:onnen Sie 25 verwenden\&.
+.sp
+Hinweis: Aufgeteilte Gruppen werden m\(:oglicherweise nicht von allen Werkzeugen unterst\(:utzt, selbst nicht aus der Shadow\-Werkzeugsammlung\&. Sie sollten diese Variable nur setzen, falls Sie zwingend darauf angewiesen sind\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+Je mehr Runden Sie definieren, umso schwieriger ist es, das Passwort mit sturem Durchprobieren (brute force) zu knacken; umso mehr Rechenleistung wird jedoch auch f\(:ur die Anmeldung eines Benutzers ben\(:otigt\&.
+.sp
+Falls Sie nichts angeben, wird libc die Standardanzahl der Runden festlegen (5000)\&.
+.sp
+Die Werte m\(:ussen zwischen 1000\-999\&.999\&.999 liegen\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/group
+.RS 4
+Informationen zu den Gruppenkonten
+.RE
+.PP
+/etc/gshadow
+.RS 4
+sichere Informationen zu den Gruppenkonten
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBnewgrp\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBgrpck\fR(8),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/de/man1/groups.1 b/man/de/man1/groups.1
new file mode 100644
index 0000000..583d782
--- /dev/null
+++ b/man/de/man1/groups.1
@@ -0,0 +1,64 @@
+'\" t
+.\" Title: groups
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Dienstprogramme f\(:ur Benutzer
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "GROUPS" "1" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Dienstprogramme f\(:ur Benutzer"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+groups \- zeigt die aktuell verwendeten Gruppennamen an
+.SH "\(:UBERSICHT"
+.HP \w'\fBgroups\fR\ 'u
+\fBgroups\fR [\fIBenutzer\fR]
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBgroups\fR
+command displays the current group names or ID values\&. If the value does not have a corresponding entry in
+/etc/group, the value will be displayed as the numerical group value\&. The optional
+\fIuser\fR
+parameter will display the groups for the named
+\fIuser\fR\&.
+.SH "ANMERKUNGEN"
+.PP
+Systems which do not support concurrent group sets will have the information from
+/etc/group
+reported\&. The user must use
+\fBnewgrp\fR
+or
+\fBsg\fR
+to change his current real and effective group ID\&.
+.SH "DATEIEN"
+.PP
+/etc/group
+.RS 4
+Informationen zu den Gruppenkonten
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBnewgrp\fR(1),
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)\&.
diff --git a/man/de/man1/id.1 b/man/de/man1/id.1
new file mode 100644
index 0000000..91b285d
--- /dev/null
+++ b/man/de/man1/id.1
@@ -0,0 +1,60 @@
+'\" t
+.\" Title: id
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Dienstprogramme f\(:ur Benutzer
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "ID" "1" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Dienstprogramme f\(:ur Benutzer"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+id \- display current user and group ID names
+.SH "\(:UBERSICHT"
+.HP \w'\fBid\fR\ 'u
+\fBid\fR [\-a]
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBid\fR
+command displays the current real and effective user and group ID names or values\&. If the value does not have a corresponding entry in
+/etc/passwd
+or
+/etc/group, the value will be displayed without the corresponding name\&. The optional
+\fB\-a\fR
+flag will display the group set on systems which support multiple concurrent group membership\&.
+.SH "DATEIEN"
+.PP
+/etc/group
+.RS 4
+Informationen zu den Gruppenkonten
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)
diff --git a/man/de/man1/login.1 b/man/de/man1/login.1
new file mode 100644
index 0000000..abc3b50
--- /dev/null
+++ b/man/de/man1/login.1
@@ -0,0 +1,488 @@
+'\" t
+.\" Title: login
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Dienstprogramme f\(:ur Benutzer
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "LOGIN" "1" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Dienstprogramme f\(:ur Benutzer"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+login \- startet eine Sitzung auf dem System
+.SH "\(:UBERSICHT"
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] [\-h\ \fIhost\fR] [\fIBenutzername\fR] [\fIENV=VAR\fR...]
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] [\-h\ \fIhost\fR] \-f \fIBenutzername\fR
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] \-r\ \fIhost\fR
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBlogin\fR
+program is used to establish a new session with the system\&. It is normally invoked automatically by responding to the
+\fIlogin:\fR
+prompt on the user\*(Aqs terminal\&.
+\fBlogin\fR
+may be special to the shell and may not be invoked as a sub\-process\&. When called from a shell,
+\fBlogin\fR
+should be executed as
+\fBexec login\fR
+which will cause the user to exit from the current shell (and thus will prevent the new logged in user to return to the session of the caller)\&. Attempting to execute
+\fBlogin\fR
+from any shell but the login shell will produce an error message\&.
+.PP
+The user is then prompted for a password, where appropriate\&. Echoing is disabled to prevent revealing the password\&. Only a small number of password failures are permitted before
+\fBlogin\fR
+exits and the communications link is severed\&.
+.PP
+If password aging has been enabled for your account, you may be prompted for a new password before proceeding\&. You will be forced to provide your old password and the new password before continuing\&. Please refer to
+\fBpasswd\fR(1)
+for more information\&.
+.PP
+After a successful login, you will be informed of any system messages and the presence of mail\&. You may turn off the printing of the system message file,
+/etc/motd, by creating a zero\-length file
+\&.hushlogin
+in your login directory\&. The mail message will be one of "\fIYou have new mail\&.\fR", "\fIYou have mail\&.\fR", or "\fINo Mail\&.\fR" according to the condition of your mailbox\&.
+.PP
+Your user and group ID will be set according to their values in the
+/etc/passwd
+file\&. The value for
+\fB$HOME\fR,
+\fB$SHELL\fR,
+\fB$PATH\fR,
+\fB$LOGNAME\fR, and
+\fB$MAIL\fR
+are set according to the appropriate fields in the password entry\&. Ulimit, umask and nice values may also be set according to entries in the GECOS field\&.
+.PP
+On some installations, the environmental variable
+\fB$TERM\fR
+will be initialized to the terminal type on your tty line, as specified in
+/etc/ttytype\&.
+.PP
+Ein Startskript f\(:ur Ihren Befehlsinterpreter kann auch ausgef\(:uhrt werden\&. Sehen Sie bitte in den entsprechenden Handbuchseiten f\(:ur weitere Informationen dar\(:uber nach\&.
+.PP
+Eine Subsystem\-Anmeldung wird durch einen \(Fc*\(Fo als erstes Zeichen der Anmelde\-Shell gekennzeichnet\&. Das angegebene Home\-Verzeichnis wird als Wurzel f\(:ur das Dateisystem verwendet, auf welchem der Benutzer tats\(:achlich angemeldet ist\&.
+.PP
+The
+\fBlogin\fR
+program is NOT responsible for removing users from the utmp file\&. It is the responsibility of
+\fBgetty\fR(8)
+and
+\fBinit\fR(8)
+to clean up apparent ownership of a terminal session\&. If you use
+\fBlogin\fR
+from the shell prompt without
+\fBexec\fR, the user you use will continue to appear to be logged in even after you log out of the "subsession"\&.
+.SH "OPTIONEN"
+.PP
+\fB\-f\fR
+.RS 4
+Keine Authentifizierung durchf\(:uhren, Benutzer ist bereits angemeldet\&.
+.sp
+Note: In that case,
+\fIusername\fR
+is mandatory\&.
+.RE
+.PP
+\fB\-h\fR
+.RS 4
+Name des entfernt stehenden Rechners f\(:ur die Anmeldung
+.RE
+.PP
+\fB\-p\fR
+.RS 4
+beh\(:alt die Umgebungseinstellungen bei
+.RE
+.PP
+\fB\-r\fR
+.RS 4
+f\(:uhrt das Autologin\-Protokoll f\(:ur rlogin aus
+.RE
+.PP
+The
+\fB\-r\fR,
+\fB\-h\fR
+and
+\fB\-f\fR
+options are only used when
+\fBlogin\fR
+is invoked by root\&.
+.SH "WARNUNGEN"
+.PP
+This version of
+\fBlogin\fR
+has many compilation options, only some of which may be in use at any particular site\&.
+.PP
+Der Ort der Konfigurationsdateien kann je nach Konfiguration des Systems unterschiedlich sein\&.
+.PP
+The
+\fBlogin\fR
+program is NOT responsible for removing users from the utmp file\&. It is the responsibility of
+\fBgetty\fR(8)
+and
+\fBinit\fR(8)
+to clean up apparent ownership of a terminal session\&. If you use
+\fBlogin\fR
+from the shell prompt without
+\fBexec\fR, the user you use will continue to appear to be logged in even after you log out of the "subsession"\&.
+.PP
+As with any program,
+\fBlogin\fR\*(Aqs appearance can be faked\&. If non\-trusted users have physical access to a machine, an attacker could use this to obtain the password of the next person coming to sit in front of the machine\&. Under Linux, the SAK mechanism can be used by users to initiate a trusted path and prevent this kind of attack\&.
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+Die Konfiguration erfolgt entweder \(:uber die Angabe des vollen Pfadnamens einer Datei, welche die Namen der Ger\(:ate enth\(:alt (eines pro Zeile), oder mit einer Liste der Ger\(:atenamen, die mit \(Fc:\(Fo getrennt sind\&. Root kann sich nur auf diesen Ger\(:aten anmelden\&.
+.sp
+Wenn es unkonfiguriert gelassen wird, kann sich Root auf jedem Ger\(:at anmelden\&.
+.sp
+Das Ger\(:at soll ohne vorangestelltes /dev/ angegeben werden\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\*(Aqs supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Legt fest, ob ein Login erlaubt wird, wenn mit cd nicht in das Home\-Verzeichnis gewechselt werden kann\&. Standardm\(:a\(ssig wird dies nicht zugelassen\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value is a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value is a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/sbin:/bin:/usr/sbin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+Wenn diese Datei vorhanden ist, wird die Anmeldeumgebung aus ihr gelesen\&. Jede Zeile sollte die Form Name=Wert haben\&.
+.sp
+Zeilen, die mit einem # beginnen, werden als Kommentare behandelt und daher ignoriert\&.
+.RE
+.PP
+\fBERASECHAR\fR (number)
+.RS 4
+Terminal ERASE character (\fI010\fR
+= backspace,
+\fI0177\fR
+= DEL)\&.
+.sp
+Wenn der Wert mit \(Fc0\(Fo beginnt, wird er als Oktalzahl gewertet, wenn er mit \(Fc0x\(Fo beginnt, als Hexadezimalzahl\&.
+.RE
+.PP
+\fBFAIL_DELAY\fR (number)
+.RS 4
+Wartezeit in Sekunden, ehe nach einem fehlgeschlagenen Anmeldeversuch ein neuer unternommen werden kann
+.RE
+.PP
+\fBFAILLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of
+/var/log/faillog
+login failure info\&.
+.RE
+.PP
+\fBFAKE_SHELL\fR (string)
+.RS 4
+If set,
+\fBlogin\fR
+will execute this shell instead of the users\*(Aq shell specified in
+/etc/passwd\&.
+.RE
+.PP
+\fBFTMP_FILE\fR (string)
+.RS 4
+Falls angegeben, werden fehlgeschlagene Anmeldeversuche in dieser Datei im Format utmp protokolliert\&.
+.RE
+.PP
+\fBHUSHLOGIN_FILE\fR (string)
+.RS 4
+Falls angegeben, kann diese Datei die \(:ubliche Informationsanzeige w\(:ahrend des Anmeldevorgangs unterbinden\&. Wenn ein vollst\(:andiger Pfad angegeben wird, wird der Modus ohne Anmeldeinformationen verwendet, wenn der Name oder die Shell des Benutzers in der Datei enthalten sind\&. Wenn kein vollst\(:andiger Pfad angegeben wird, wird der Modus ohne Anmeldeinformationen aktiviert, wenn die Datei im Home\-Verzeichnis des Benutzers existiert\&.
+.RE
+.PP
+\fBISSUE_FILE\fR (string)
+.RS 4
+Falls angegeben, wird diese Datei vor der Anmeldeaufforderung angezeigt\&.
+.RE
+.PP
+\fBKILLCHAR\fR (number)
+.RS 4
+Terminal KILL character (\fI025\fR
+= CTRL/U)\&.
+.sp
+Wenn der Wert mit \(Fc0\(Fo beginnt, wird er als Oktalzahl gewertet, wenn er mit \(Fc0x\(Fo beginnt, als Hexadezimalzahl\&.
+.RE
+.PP
+\fBLASTLOG_ENAB\fR (boolean)
+.RS 4
+aktiviert die Protokollierung und Anzeige der Informationen zu Anmeldezeiten in
+/var/log/lastlog
+.RE
+.PP
+\fBLOGIN_RETRIES\fR (number)
+.RS 4
+maximale Anzahl von Anmeldeversuchen, wenn ein falsches Passwort eingegeben wird
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+Diese Zeichenkette wird bei der Eingabeaufforderung des Passworts (Prompt) verwendet\&. Standardm\(:a\(ssig wird \(FcPassword: \(Fo oder eine \(:Ubersetzung davon benutzt\&. Wenn Sie diese Variable definieren, wird die Eingabeaufforderung nicht \(:ubersetzt\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.PP
+\fBLOGIN_TIMEOUT\fR (number)
+.RS 4
+H\(:ochstdauer f\(:ur einen Anmeldeversuch
+.RE
+.PP
+\fBLOG_OK_LOGINS\fR (boolean)
+.RS 4
+aktiviert die Protokollierung erfolgreicher Anmeldungen
+.RE
+.PP
+\fBLOG_UNKFAIL_ENAB\fR (boolean)
+.RS 4
+aktiviert die Anzeige unbekannter Benutzernamen, wenn fehlgeschlagene Anmeldeversuche aufgezeichnet werden
+.sp
+Hinweis: Das Protokollieren unbekannter Benutzernamen kann ein Sicherheitsproblem darstellen, wenn ein Benutzer sein Passwort anstelle seines Anmeldenamens eingibt\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+aktiviert die Pr\(:ufung und Anzeige des Status der Mailbox bei der Anmeldung
+.sp
+Sie sollten dies abschalten, wenn schon die Startdateien der Shell die Mails pr\(:ufen (\(Fcmailx \-e\(Fo oder \(:ahnliches)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+Das Verzeichnis des Mail\-Spools\&. Diese Angabe wird ben\(:otigt, um die Mailbox zu bearbeiten, nachdem das entsprechende Benutzerkonto ver\(:andert oder gel\(:oscht wurde\&. Falls nicht angegeben, wird ein Standard verwendet, der beim Kompilieren festgelegt wurde\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Legt den Ort der Mail\-Spool\-Dateien eines Benutzers relativ zu seinem Home\-Verzeichnis fest\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMOTD_FILE\fR (string)
+.RS 4
+Falls angegeben, eine Aufz\(:ahlung von Dateien, welche die bei der Anmeldung anzuzeigenden \(FcNachrichten des Tages\(Fo enth\(:alt\&. Die Dateien werden mit einem \(Fc:\(Fo getrennt\&.
+.RE
+.PP
+\fBNOLOGINS_FILE\fR (string)
+.RS 4
+Falls angegeben, der Name einer Datei, deren Existenz Anmeldungen au\(sser von Root verhindert\&. Der Inhalt der Datei sollte die Gr\(:unde enthalten, weshalb Anmeldungen untersagt sind\&.
+.RE
+.PP
+\fBPORTTIME_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable checking of time restrictions specified in
+/etc/porttime\&.
+.RE
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of resource limits from
+/etc/limits
+and ulimit, umask, and niceness from the user\*(Aqs passwd gecos field\&.
+.RE
+.PP
+\fBTTYGROUP\fR (string), \fBTTYPERM\fR (string)
+.RS 4
+The terminal permissions: the login tty will be owned by the
+\fBTTYGROUP\fR
+group, and the permissions will be set to
+\fBTTYPERM\fR\&.
+.sp
+By default, the ownership of the terminal is set to the user\*(Aqs primary group and the permissions are set to
+\fI0600\fR\&.
+.sp
+\fBTTYGROUP\fR
+can be either the name of a group or a numeric group identifier\&.
+.sp
+If you have a
+\fBwrite\fR
+program which is "setgid" to a special group which owns the terminals, define TTYGROUP to the group number and TTYPERM to 0620\&. Otherwise leave TTYGROUP commented out and assign TTYPERM to either 622 or 600\&.
+.RE
+.PP
+\fBTTYTYPE_FILE\fR (string)
+.RS 4
+Falls angegeben, eine Datei, welche einer tty\-Zeile den Umgebungsparameter TERM zuweist\&. Jede Zeile hat das Format wie etwa \(Fcvt100 tty01\(Fo\&.
+.RE
+.PP
+\fBULIMIT\fR (number)
+.RS 4
+Default
+\fBulimit\fR
+value\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+Die Bit\-Gruppe, welche die Rechte von erstellten Dateien bestimmt, wird anf\(:anglich auf diesen Wert gesetzt\&. Falls nicht angegeben, wird sie auf 022 gesetzt\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create if
+\fBHOME_MODE\fR
+is not set\&.
+.sp
+It is also used by
+\fBlogin\fR
+to define users\*(Aq initial umask\&. Note that this mask can be overridden by the user\*(Aqs GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Erlaubt Benutzern, die nicht Root sind, die Umask\-Gruppen\-Bits auf ihre Umask\-Bits zu setzen (Beispiel: 022 \-> 002, 077 \-> 007), falls die UID mit der GID identisch ist sowie der Benutzername mit dem Gruppennamen \(:ubereinstimmt\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "DATEIEN"
+.PP
+/var/run/utmp
+.RS 4
+Liste der aktuellen angemeldeten Sitzungen
+.RE
+.PP
+/var/log/wtmp
+.RS 4
+Liste der vorangegangenen angemeldeten Sitzungen
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/shadow
+.RS 4
+verschl\(:usselte Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/motd
+.RS 4
+Datei mit der Systemmeldung des Tages
+.RE
+.PP
+/etc/nologin
+.RS 4
+verhindert, dass sich Benutzer au\(sser Root anmelden
+.RE
+.PP
+/etc/ttytype
+.RS 4
+Liste der Terminaltypen
+.RE
+.PP
+$HOME/\&.hushlogin
+.RS 4
+unterdr\(:uckt die Ausgabe von Systemnachrichten
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguration der Shadow\-Passwort\-Werkzeugsammlung
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBmail\fR(1),
+\fBpasswd\fR(1),
+\fBsh\fR(1),
+\fBsu\fR(1),
+\fBlogin.defs\fR(5),
+\fBnologin\fR(5),
+\fBpasswd\fR(5),
+\fBsecuretty\fR(5),
+\fBgetty\fR(8)\&.
diff --git a/man/de/man1/newgrp.1 b/man/de/man1/newgrp.1
new file mode 100644
index 0000000..ffa6a27
--- /dev/null
+++ b/man/de/man1/newgrp.1
@@ -0,0 +1,98 @@
+'\" t
+.\" Title: newgrp
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Dienstprogramme f\(:ur Benutzer
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "NEWGRP" "1" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Dienstprogramme f\(:ur Benutzer"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+newgrp \- als neue Gruppe anmelden
+.SH "\(:UBERSICHT"
+.HP \w'\fBnewgrp\fR\ 'u
+\fBnewgrp\fR [\-] [\fIGruppe\fR]
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBnewgrp\fR
+command is used to change the current group ID during a login session\&. If the optional
+\fB\-\fR
+flag is given, the user\*(Aqs environment will be reinitialized as though the user had logged in, otherwise the current environment, including current working directory, remains unchanged\&.
+.PP
+\fBnewgrp\fR
+changes the current real group ID to the named group, or to the default group listed in
+/etc/passwd
+if no group name is given\&.
+\fBnewgrp\fR
+also tries to add the group to the user groupset\&. If not root, the user will be prompted for a password if she does not have a password (in
+/etc/shadow
+if this user has an entry in the shadowed password file, or in
+/etc/passwd
+otherwise) and the group does, or if the user is not listed as a member and the group has a password\&. The user will be denied access if the group password is empty and the user is not listed as a member\&.
+.PP
+If there is an entry for this group in
+/etc/gshadow, then the list of members and the password of this group will be taken from this file, otherwise, the entry in
+/etc/group
+is considered\&.
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/shadow
+.RS 4
+verschl\(:usselte Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/group
+.RS 4
+Informationen zu den Gruppenkonten
+.RE
+.PP
+/etc/gshadow
+.RS 4
+sichere Informationen zu den Gruppenkonten
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBsu\fR(1),
+\fBsg\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/de/man1/passwd.1 b/man/de/man1/passwd.1
new file mode 100644
index 0000000..aababb3
--- /dev/null
+++ b/man/de/man1/passwd.1
@@ -0,0 +1,365 @@
+'\" t
+.\" Title: passwd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Dienstprogramme f\(:ur Benutzer
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "PASSWD" "1" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Dienstprogramme f\(:ur Benutzer"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+passwd \- \(:andert das Passwort eines Benutzers
+.SH "\(:UBERSICHT"
+.HP \w'\fBpasswd\fR\ 'u
+\fBpasswd\fR [\fIOptionen\fR] [\fIANMELDENAME\fR]
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBpasswd\fR
+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\&.
+\fBpasswd\fR
+also changes the account or associated password validity period\&.
+.SS "Ver\(:andern des Passworts"
+.PP
+Der Benutzer wird zuerst nach seinem alten Passwort gefragt, falls eines vorhanden ist\&. Dieses Passwort wird dann verschl\(:usselt und mit dem gespeicherten Passwort verglichen\&. Der Benutzer hat nur eine Gelegenheit, das richtige Passwort einzugeben\&. Der Superuser kann diesen Schritt \(:uberspringen, um so vergessene Passw\(:orter zu \(:andern\&.
+.PP
+After the password has been entered, password aging information is checked to see if the user is permitted to change the password at this time\&. If not,
+\fBpasswd\fR
+refuses to change the password and exits\&.
+.PP
+Der Benutzer wird dann aufgefordert, zweimal ein neues Passwort einzugeben\&. Beide Eingaben werden miteinander verglichen\&. Sie m\(:ussen \(:ubereinstimmen, damit das Passwort ge\(:andert wird\&.
+.PP
+Anschlie\(ssend wird das Passwort auf seine Komplexit\(:at \(:uberpr\(:uft\&. Eine allgemeine Richtlinie besagt, dass Passw\(:orter aus sechs bis acht Zeichen bestehen sollten und ein oder mehrere Zeichen aus folgenden Mengen enthalten sollten:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Kleinbuchstaben
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Ziffern 0 bis 9
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Satzzeichen
+.RE
+.PP
+Care must be taken not to include the system default erase or kill characters\&.
+\fBpasswd\fR
+will reject any password which is not suitably complex\&.
+.SS "Hinweise zu Benutzerpassw\(:ortern"
+.PP
+The security of a password depends upon the strength of the encryption algorithm and the size of the key space\&. The legacy
+\fIUNIX\fR
+System encryption method is based on the NBS DES algorithm\&. More recent methods are now recommended (see
+\fBENCRYPT_METHOD\fR)\&. The size of the key space depends upon the randomness of the password which is selected\&.
+.PP
+Gefahren f\(:ur die Sicherheit von Passw\(:ortern kommen gew\(:ohnlich von sorgloser Wahl oder Handhabung des Passworts\&. Daher sollten Sie kein Passwort w\(:ahlen, das in einem W\(:orterbuch auftaucht oder das aufgeschrieben werden muss\&. Das Passwort sollte somit kein echter Name, Ihr Autokennzeichen, Geburtstag oder Ihre Adresse sein\&. All das kann dazu verwendet werden, das Passwort zu erraten, und stellt daher eine Gefahr f\(:ur die Sicherheit Ihres Systems dar\&.
+.PP
+You can find advice on how to choose a strong password on http://en\&.wikipedia\&.org/wiki/Password_strength
+.SH "OPTIONEN"
+.PP
+The options which apply to the
+\fBpasswd\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+This option can be used only with
+\fB\-S\fR
+and causes show status for all users\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR
+.RS 4
+L\(:oscht das Passwort eines Benutzers (macht es leer)\&. Dies ist ein schneller Weg, um das Passwort eines Kontos zu deaktivieren\&. Dem Konto ist dann kein Passwort zugeordnet\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expire\fR
+.RS 4
+L\(:asst das Passwort eines Kontos sofort verfallen\&. Im Ergebnis kann damit erreicht werden, dass ein Benutzer beim n\(:achsten Login das Passwort \(:andern muss\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+zeigt die Hilfe an und beendet das Programm
+.RE
+.PP
+\fB\-i\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+This option is used to disable an account after the password has been expired for a number of days\&. After a user account has had an expired password for
+\fIINACTIVE\fR
+days, the user may no longer sign on to the account\&.
+.RE
+.PP
+\fB\-k\fR, \fB\-\-keep\-tokens\fR
+.RS 4
+Zeigt an, dass nur abgelaufene Passw\(:orter ge\(:andert werden sollen\&. Der Benutzer m\(:ochte seine g\(:ultigen Passw\(:orter unver\(:andert lassen\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\fR
+.RS 4
+Sperrt das Passwort des bezeichneten Kontos\&. Die Option schaltet ein Passwort ab, indem es ihm einen Wert zuweist, der mit keinem m\(:oglichen verschl\(:usselten Wert \(:ubereinstimmen kann\&. Dies geschieht, indem ein \(Fc!\(Fo dem Passwort vorangestellt wird\&.
+.sp
+Note that this does not disable the account\&. The user may still be able to login using another authentication token (e\&.g\&. an SSH key)\&. To disable the account, administrators should use
+\fBusermod \-\-expiredate 1\fR
+(this set the account\*(Aqs expire date to Jan 2, 1970)\&.
+.sp
+Benutzer mit einem gesperrten Passwort k\(:onnen dieses nicht \(:andern\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-mindays\fR\ \&\fIMIN_DAYS\fR
+.RS 4
+Set the minimum number of days between password changes to
+\fIMIN_DAYS\fR\&. A value of zero for this field indicates that the user may change their password at any time\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+stiller Modus
+.RE
+.PP
+\fB\-r\fR, \fB\-\-repository\fR\ \&\fIREPOSITORY\fR
+.RS 4
+change password in
+\fIREPOSITORY\fR
+repository
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-S\fR, \fB\-\-status\fR
+.RS 4
+Zeigt Informationen \(:uber den Kontostatus an\&. Die Statusinformation besteht aus sieben Feldern\&. Das erste Feld ist der Anmeldename des Benutzers\&. Das zweite Feld zeigt an, ob das Benutzerkonto ein gesperrtes Passwort (L), kein Passwort (NP) oder ein verwendbares Passwort hat (P)\&. Das dritte Feld zeigt das Datum der letzten \(:Anderung des Passworts an\&. Die n\(:achsten vier Felder sind das Mindestalter, das H\(:ochstalter, die Dauer der Warnung und die Dauer der Unt\(:atigkeit f\(:ur das Passwort\&. Die Zeitr\(:aume werden in Tagen ausgedr\(:uckt\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-unlock\fR
+.RS 4
+Unlock the password of the named account\&. This option re\-enables a password by changing the password back to its previous value (to the value before using the
+\fB\-l\fR
+option)\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-warndays\fR\ \&\fIWARN_DAYS\fR
+.RS 4
+Set the number of days of warning before a password change is required\&. The
+\fIWARN_DAYS\fR
+option is the number of days prior to the password expiring that a user will be warned that their password is about to expire\&.
+.RE
+.PP
+\fB\-x\fR, \fB\-\-maxdays\fR\ \&\fIMAX_DAYS\fR
+.RS 4
+Set the maximum number of days a password remains valid\&. After
+\fIMAX_DAYS\fR, the password is required to be changed\&.
+.sp
+Passing the number
+\fI\-1\fR
+as
+\fIMAX_DAYS\fR
+will remove checking a password\*(Aqs validity\&.
+.RE
+.SH "WARNUNGEN"
+.PP
+Die Komplexit\(:at der Passwortpr\(:ufung kann sich auf verschiedenen Systemen unterscheiden\&. Der Benutzer wird angehalten, ein m\(:oglichst komplexes, von ihm aber gut zu verwendendes Passwort zu w\(:ahlen\&.
+.PP
+Benutzer k\(:onnen unter Umst\(:anden ihr Passwort nicht \(:andern, wenn auf dem System NIS aktiviert ist, sie aber nicht am NIS\-Server angemeldet sind\&.
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+Damit wird der standardm\(:a\(ssige Verschl\(:usselungsalgorithmus, mit dem Passw\(:orter verschl\(:usselt werden, bestimmt (soweit nicht in der Befehlszeile ein Algorithmus angegeben wird)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBOBSCURE_CHECKS_ENAB\fR (boolean)
+.RS 4
+Aktiviert zus\(:atzliche Tests bei der Ver\(:anderung eines Passworts\&.
+.RE
+.PP
+\fBPASS_ALWAYS_WARN\fR (boolean)
+.RS 4
+weist auf schwache Passw\(:orter hin (aber l\(:asst sie zu), falls Sie root sind
+.RE
+.PP
+\fBPASS_CHANGE_TRIES\fR (number)
+.RS 4
+maximale Anzahl von Versuchen, ein Passwort zu \(:andern, wenn dies wegen zu geringer St\(:arke des gew\(:ahlten Passworts abgelehnt wurde
+.RE
+.PP
+\fBPASS_MAX_LEN\fR (number), \fBPASS_MIN_LEN\fR (number)
+.RS 4
+Number of significant characters in the password for crypt()\&.
+\fBPASS_MAX_LEN\fR
+is 8 by default\&. Don\*(Aqt change unless your crypt() is better\&. This is ignored if
+\fBMD5_CRYPT_ENAB\fR
+set to
+\fIyes\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+Je mehr Runden Sie definieren, umso schwieriger ist es, das Passwort mit sturem Durchprobieren (brute force) zu knacken; umso mehr Rechenleistung wird jedoch auch f\(:ur die Anmeldung eines Benutzers ben\(:otigt\&.
+.sp
+Falls Sie nichts angeben, wird libc die Standardanzahl der Runden festlegen (5000)\&.
+.sp
+Die Werte m\(:ussen zwischen 1000\-999\&.999\&.999 liegen\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/shadow
+.RS 4
+verschl\(:usselte Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguration der Shadow\-Passwort\-Werkzeugsammlung
+.RE
+.SH "R\(:UCKGABEWERTE"
+.PP
+The
+\fBpasswd\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+permission denied
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid combination of options
+.RE
+.PP
+\fI3\fR
+.RS 4
+unexpected failure, nothing done
+.RE
+.PP
+\fI4\fR
+.RS 4
+unexpected failure,
+passwd
+file missing
+.RE
+.PP
+\fI5\fR
+.RS 4
+passwd
+file busy, try again
+.RE
+.PP
+\fI6\fR
+.RS 4
+invalid argument to option
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBchpasswd\fR(8),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBlogin.defs\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/de/man1/sg.1 b/man/de/man1/sg.1
new file mode 100644
index 0000000..be4db9b
--- /dev/null
+++ b/man/de/man1/sg.1
@@ -0,0 +1,97 @@
+'\" t
+.\" Title: sg
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Dienstprogramme f\(:ur Benutzer
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "SG" "1" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Dienstprogramme f\(:ur Benutzer"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sg \- f\(:uhrt einen Befehl unter einer anderen Gruppen\-ID aus
+.SH "\(:UBERSICHT"
+.HP \w'\fBsg\fR\ 'u
+\fBsg\fR [\-] [group\ [\-c\ ]\ command]
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBsg\fR
+command works similar to
+\fBnewgrp\fR
+but accepts a command\&. The command will be executed with the
+/bin/sh
+shell\&. With most shells you may run
+\fBsg\fR
+from, you need to enclose multi\-word commands in quotes\&. Another difference between
+\fBnewgrp\fR
+and
+\fBsg\fR
+is that some shells treat
+\fBnewgrp\fR
+specially, replacing themselves with a new instance of a shell that
+\fBnewgrp\fR
+creates\&. This doesn\*(Aqt happen with
+\fBsg\fR, so upon exit from a
+\fBsg\fR
+command you are returned to your previous group ID\&.
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/shadow
+.RS 4
+verschl\(:usselte Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/group
+.RS 4
+Informationen zu den Gruppenkonten
+.RE
+.PP
+/etc/gshadow
+.RS 4
+sichere Informationen zu den Gruppenkonten
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBnewgrp\fR(1),
+\fBsu\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/de/man1/su.1 b/man/de/man1/su.1
new file mode 100644
index 0000000..748b696
--- /dev/null
+++ b/man/de/man1/su.1
@@ -0,0 +1,448 @@
+'\" t
+.\" Title: su
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Dienstprogramme f\(:ur Benutzer
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "SU" "1" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Dienstprogramme f\(:ur Benutzer"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+su \- \(:andert die Benutzer\-ID oder wechselt zu Root
+.SH "\(:UBERSICHT"
+.HP \w'\fBsu\fR\ 'u
+\fBsu\fR [\fIOptionen\fR] [\fI\-\fR] [\fIBenutzername\fR\ [\ \fIargs\fR\ ]]
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBsu\fR
+command is used to become another user during a login session\&. Invoked without a
+\fBusername\fR,
+\fBsu\fR
+defaults to becoming the superuser\&. The
+\fB\-\fR
+option may be used to provide an environment similar to what the user would expect had the user logged in directly\&. The
+\fB\-c\fR
+option may be used to treat the next argument as a command by most shells\&.
+.PP
+Options are recognized everywhere in the argument list\&. You can use the
+\fB\-\-\fR
+argument to stop option parsing\&. The
+\fB\-\fR
+option is special: it is also recognized after
+\fB\-\-\fR, but has to be placed before
+\fBusername\fR\&.
+.PP
+Der Benutzer wird gegebenenfalls nach einem Passwort gefragt\&. Ung\(:ultige Passworteingaben werden eine Fehlermeldung erzeugen\&. Sowohl erfolgreiche als auch misslungene Versuche werden protokolliert, um Missbrauch des Systems zu entdecken\&.
+.PP
+The current environment is passed to the new shell\&. The value of
+\fB$PATH\fR
+is reset to
+/bin:/usr/bin
+for normal users, or
+/sbin:/bin:/usr/sbin:/usr/bin
+for the superuser\&. This may be changed with the
+\fBENV_PATH\fR
+and
+\fBENV_SUPATH\fR
+definitions in
+/etc/login\&.defs\&.
+.PP
+Eine Subsystem\-Anmeldung wird durch einen \(Fc*\(Fo als erstes Zeichen der Anmelde\-Shell gekennzeichnet\&. Das angegebene Home\-Verzeichnis wird als Wurzel f\(:ur das Dateisystem verwendet, auf welchem der Benutzer tats\(:achlich angemeldet ist\&.
+.SH "OPTIONEN"
+.PP
+The options which apply to the
+\fBsu\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-command\fR\ \&\fICOMMAND\fR
+.RS 4
+Specify a command that will be invoked by the shell using its
+\fB\-c\fR\&.
+.sp
+The executed command will have no controlling terminal\&. This option cannot be used to execute interactive programs which need a controlling TTY\&.
+.RE
+.PP
+\fB\-\fR, \fB\-l\fR, \fB\-\-login\fR
+.RS 4
+Eine Umgebung wird zur Verf\(:ugung gestellt, die der entspricht, die der Benutzer nach einer direkten Anmeldung erwartet\&.
+.sp
+When
+\fB\-\fR
+is used, it must be specified before any
+\fBusername\fR\&. For portability it is recommended to use it as last option, before any
+\fBusername\fR\&. The other forms (\fB\-l\fR
+and
+\fB\-\-login\fR) do not have this restriction\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+die Shell, die gestartet wird
+.sp
+The invoked shell is chosen from (highest priority first):
+.PP
+.RS 4
+The shell specified with \-\-shell\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-preserve\-environment\fR
+is used, the shell specified by the
+\fB$SHELL\fR
+environment variable\&.
+.RE
+.PP
+.RS 4
+The shell indicated in the
+/etc/passwd
+entry for the target user\&.
+.RE
+.PP
+.RS 4
+/bin/sh
+if a shell could not be found by any above method\&.
+.RE
+.sp
+If the target user has a restricted shell (i\&.e\&. the shell field of this user\*(Aqs entry in
+/etc/passwd
+is not listed in
+/etc/shells), then the
+\fB\-\-shell\fR
+option or the
+\fB$SHELL\fR
+environment variable won\*(Aqt be taken into account, unless
+\fBsu\fR
+is called by root\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-p\fR, \fB\-\-preserve\-environment\fR
+.RS 4
+Preserve the current environment, except for:
+.PP
+\fB$PATH\fR
+.RS 4
+reset according to the
+/etc/login\&.defs
+options
+\fBENV_PATH\fR
+or
+\fBENV_SUPATH\fR
+(see below);
+.RE
+.PP
+\fB$IFS\fR
+.RS 4
+reset to
+\(Bq<space><tab><newline>\(lq, if it was set\&.
+.RE
+.sp
+If the target user has a restricted shell, this option has no effect (unless
+\fBsu\fR
+is called by root)\&.
+.sp
+Note that the default behavior for the environment is the following:
+.PP
+.RS 4
+The
+\fB$HOME\fR,
+\fB$SHELL\fR,
+\fB$USER\fR,
+\fB$LOGNAME\fR,
+\fB$PATH\fR, and
+\fB$IFS\fR
+environment variables are reset\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is not used, the environment is copied, except for the variables above\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, the
+\fB$TERM\fR,
+\fB$COLORTERM\fR,
+\fB$DISPLAY\fR, and
+\fB$XAUTHORITY\fR
+environment variables are copied if they were set\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, the
+\fB$TZ\fR,
+\fB$HZ\fR, and
+\fB$MAIL\fR
+environment variables are set according to the
+/etc/login\&.defs
+options
+\fBENV_TZ\fR,
+\fBENV_HZ\fR,
+\fBMAIL_DIR\fR, and
+\fBMAIL_FILE\fR
+(see below)\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, other environment variables might be set by the
+\fBENVIRON_FILE\fR
+file (see below)\&.
+.RE
+.sp
+.RE
+.SH "WARNUNGEN"
+.PP
+This version of
+\fBsu\fR
+has many compilation options, only some of which may be in use at any particular site\&.
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+Die Konfiguration erfolgt entweder \(:uber die Angabe des vollen Pfadnamens einer Datei, welche die Namen der Ger\(:ate enth\(:alt (eines pro Zeile), oder mit einer Liste der Ger\(:atenamen, die mit \(Fc:\(Fo getrennt sind\&. Root kann sich nur auf diesen Ger\(:aten anmelden\&.
+.sp
+Wenn es unkonfiguriert gelassen wird, kann sich Root auf jedem Ger\(:at anmelden\&.
+.sp
+Das Ger\(:at soll ohne vorangestelltes /dev/ angegeben werden\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\*(Aqs supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Legt fest, ob ein Login erlaubt wird, wenn mit cd nicht in das Home\-Verzeichnis gewechselt werden kann\&. Standardm\(:a\(ssig wird dies nicht zugelassen\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+Wenn diese Datei vorhanden ist, wird die Anmeldeumgebung aus ihr gelesen\&. Jede Zeile sollte die Form Name=Wert haben\&.
+.sp
+Zeilen, die mit einem # beginnen, werden als Kommentare behandelt und daher ignoriert\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value is a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value is a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/sbin:/bin:/usr/sbin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+Diese Zeichenkette wird bei der Eingabeaufforderung des Passworts (Prompt) verwendet\&. Standardm\(:a\(ssig wird \(FcPassword: \(Fo oder eine \(:Ubersetzung davon benutzt\&. Wenn Sie diese Variable definieren, wird die Eingabeaufforderung nicht \(:ubersetzt\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+aktiviert die Pr\(:ufung und Anzeige des Status der Mailbox bei der Anmeldung
+.sp
+Sie sollten dies abschalten, wenn schon die Startdateien der Shell die Mails pr\(:ufen (\(Fcmailx \-e\(Fo oder \(:ahnliches)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+Das Verzeichnis des Mail\-Spools\&. Diese Angabe wird ben\(:otigt, um die Mailbox zu bearbeiten, nachdem das entsprechende Benutzerkonto ver\(:andert oder gel\(:oscht wurde\&. Falls nicht angegeben, wird ein Standard verwendet, der beim Kompilieren festgelegt wurde\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Legt den Ort der Mail\-Spool\-Dateien eines Benutzers relativ zu seinem Home\-Verzeichnis fest\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of resource limits from
+/etc/limits
+and ulimit, umask, and niceness from the user\*(Aqs passwd gecos field\&.
+.RE
+.PP
+\fBSULOG_FILE\fR (string)
+.RS 4
+Wenn angegeben, wird jeder Aufruf von su in dieser Datei protokolliert\&.
+.RE
+.PP
+\fBSU_NAME\fR (string)
+.RS 4
+Damit kann die Anzeige des Namens des Befehls festgelegt werden, wenn \(Fcsu \-\(Fo ausgef\(:uhrt wird\&. Wenn beispielsweise dies auf \(Fcsu\(Fo gesetzt wurde, zeigt \(Fcps\(Fo den Befehl als \(Fc\-su\(Fo an\&. Wenn es dagegen nicht vergeben wurde, wird \(Fcps\(Fo den Namen der Shell anzeigen, die ausgef\(:uhrt wird, also etwa \(Fc\-sh\(Fo\&.
+.RE
+.PP
+\fBSU_WHEEL_ONLY\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the user must be listed as a member of the first gid 0 group in
+/etc/group
+(called
+\fIroot\fR
+on most Linux systems) to be able to
+\fBsu\fR
+to uid 0 accounts\&. If the group doesn\*(Aqt exist or is empty, no one will be able to
+\fBsu\fR
+to uid 0\&.
+.RE
+.PP
+\fBSYSLOG_SU_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsu\fR
+activity \- in addition to sulog file logging\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Erlaubt Benutzern, die nicht Root sind, die Umask\-Gruppen\-Bits auf ihre Umask\-Bits zu setzen (Beispiel: 022 \-> 002, 077 \-> 007), falls die UID mit der GID identisch ist sowie der Benutzername mit dem Gruppennamen \(:ubereinstimmt\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/shadow
+.RS 4
+verschl\(:usselte Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguration der Shadow\-Passwort\-Werkzeugsammlung
+.RE
+.SH "R\(:UCKGABEWERTE"
+.PP
+On success,
+\fBsu\fR
+returns the exit value of the command it executed\&.
+.PP
+If this command was terminated by a signal,
+\fBsu\fR
+returns the number of this signal plus 128\&.
+.PP
+If su has to kill the command (because it was asked to terminate, and the command did not terminate in time),
+\fBsu\fR
+returns 255\&.
+.PP
+Some exit values from
+\fBsu\fR
+are independent from the executed command:
+.PP
+\fI0\fR
+.RS 4
+success (\fB\-\-help\fR
+only)
+.RE
+.PP
+\fI1\fR
+.RS 4
+System or authentication failure
+.RE
+.PP
+\fI126\fR
+.RS 4
+The requested command was not found
+.RE
+.PP
+\fI127\fR
+.RS 4
+The requested command could not be executed
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBlogin\fR(1),
+\fBlogin.defs\fR(5),
+\fBsg\fR(1),
+\fBsh\fR(1)\&.
diff --git a/man/de/man3/getspnam.3 b/man/de/man3/getspnam.3
new file mode 100644
index 0000000..cd473da
--- /dev/null
+++ b/man/de/man3/getspnam.3
@@ -0,0 +1 @@
+.so man3/shadow.3
diff --git a/man/de/man3/shadow.3 b/man/de/man3/shadow.3
new file mode 100644
index 0000000..e221491
--- /dev/null
+++ b/man/de/man3/shadow.3
@@ -0,0 +1,245 @@
+'\" t
+.\" Title: shadow
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Bibliotheksaufrufe
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "SHADOW" "3" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Bibliotheksaufrufe"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+shadow, getspnam \- Routinen f\(:ur die Datei, die die verschl\(:usselten Passw\(:orter enth\(:alt
+.SH "SYNTAX"
+.PP
+\fI#include <shadow\&.h>\fR
+.PP
+\fIstruct spwd *getspent();\fR
+.PP
+\fItruct spwd *getspnam(char\fR
+\fI*name\fR\fI);\fR
+.PP
+\fIvoid setspent();\fR
+.PP
+\fIvoid endspent();\fR
+.PP
+\fIstruct spwd *fgetspent(FILE\fR
+\fI*fp\fR\fI);\fR
+.PP
+\fIstruct spwd *sgetspent(char\fR
+\fI*cp\fR\fI);\fR
+.PP
+\fIint putspent(struct spwd\fR
+\fI*p,\fR
+\fIDATEIEN\fR
+\fI*fp\fR\fI);\fR
+.PP
+\fIint lckpwdf();\fR
+.PP
+\fIint ulckpwdf();\fR
+.SH "BESCHREIBUNG"
+.PP
+\fIshadow\fR
+manipulates the contents of the shadow password file,
+/etc/shadow\&. The structure in the
+\fI#include\fR
+file is:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct spwd {
+ char *sp_namp; /* user login name */
+ char *sp_pwdp; /* encrypted password */
+ long int sp_lstchg; /* last password change */
+ long int sp_min; /* days until change allowed\&. */
+ long int sp_max; /* days before change required */
+ long int sp_warn; /* days warning for expiration */
+ long int sp_inact; /* days before account inactive */
+ long int sp_expire; /* date when account expires */
+ unsigned long int sp_flag; /* reserved for future use */
+}
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Die Bedeutung dieser Felder ist:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_namp \- Verweis auf Benutzername, der mit einer Null endet
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_pwdp \- Verweis auf Passwort, das mit einer Null endet
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_lstchg \- Anzahl der Tage gerechnet ab dem 1\&. Januar 1970, seitdem das Passwort das letzte Mal ge\(:andert wurde
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_min \- Anzahl der Tage, ehe das Passwort nicht ge\(:andert werden darf
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_max \- Anzahl der Tage, nach denen das Passwort ge\(:andert werden muss
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_warn \- Anzahl der Tage ehe das Passwort verf\(:allt, an denen der Benutzer vor dem Verfall gewarnt wird
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_inact \- Anzahl der Tage nach dem Verfall des Passworts, nach denen das Konto als inaktiv angesehen und abgeschaltet wird
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_expire \- Anzahl Tage gerechnet ab dem 1\&. Januar 1970, f\(:ur die das Konto abgeschaltet ist
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_flag \- f\(:ur zuk\(:unftigen Gebrauch reserviert
+.RE
+.SH "BESCHREIBUNG"
+.PP
+\fIgetspent\fR,
+\fIgetspname\fR,
+\fIfgetspent\fR, and
+\fIsgetspent\fR
+each return a pointer to a
+\fIstruct spwd\fR\&.
+\fIgetspent\fR
+returns the next entry from the file, and
+\fIfgetspent\fR
+returns the next entry from the given stream, which is assumed to be a file of the proper format\&.
+\fIsgetspent\fR
+returns a pointer to a
+\fIstruct spwd\fR
+using the provided string as input\&.
+\fIgetspnam\fR
+searches from the current position in the file for an entry matching
+\fIname\fR\&.
+.PP
+\fIsetspent\fR
+and
+\fIendspent\fR
+may be used to begin and end, respectively, access to the shadow password file\&.
+.PP
+The
+\fIlckpwdf\fR
+and
+\fIulckpwdf\fR
+routines should be used to insure exclusive access to the
+/etc/shadow
+file\&.
+\fIlckpwdf\fR
+attempts to acquire a lock using
+\fIpw_lock\fR
+for up to 15 seconds\&. It continues by attempting to acquire a second lock using
+\fIspw_lock\fR
+for the remainder of the initial 15 seconds\&. Should either attempt fail after a total of 15 seconds,
+\fIlckpwdf\fR
+returns \-1\&. When both locks are acquired 0 is returned\&.
+.SH "DIAGNOSE"
+.PP
+Routines return NULL if no more entries are available or if an error occurs during processing\&. Routines which have
+\fIint\fR
+as the return value return 0 for success and \-1 for failure\&.
+.SH "WARNUNGEN"
+.PP
+Diese Routinen k\(:onnen nur von Root verwendet werden, da der Zugriff auf die Shadow\-Passwort\-Datei beschr\(:ankt ist\&.
+.SH "DATEIEN"
+.PP
+/etc/shadow
+.RS 4
+verschl\(:usselte Informationen zu den Benutzerkonten
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBgetpwent\fR(3),
+\fBshadow\fR(5)\&.
diff --git a/man/de/man5/faillog.5 b/man/de/man5/faillog.5
new file mode 100644
index 0000000..042ff70
--- /dev/null
+++ b/man/de/man5/faillog.5
@@ -0,0 +1,64 @@
+'\" t
+.\" Title: faillog
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Dateiformate und konvertierung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "FAILLOG" "5" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Dateiformate und konvertierung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+faillog \- Datei mit fehlgeschlagenen Anmeldungen
+.SH "BESCHREIBUNG"
+.PP
+/var/log/faillog
+maintains a count of login failures and the limits for each account\&.
+.PP
+Eintr\(:age in dieser Datei haben eine festgelegte L\(:ange und sind der zahlenm\(:a\(ssigen UID nach angeordnet\&. Jeder Eintrag besteht aus der Anzahl der fehlgeschlagenen Anmeldungen seit der letzten erfolgreichen Anmeldung, der maximalen Anzahl von Fehlschl\(:agen, ehe das Konto abgeschaltet wird, dem Ger\(:at, auf dem die letzte fehlgeschlagene Anmeldung erfolgte, das Datum der letzten fehlgeschlagenen Anmeldung und die Dauer in Sekunden, f\(:ur die das Konto nach einem Fehlschlag gesperrt ist\&.
+.PP
+Die Datei ist so aufgebaut:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct faillog {
+ short fail_cnt;
+ short fail_max;
+ char fail_line[12];
+ time_t fail_time;
+ long fail_locktime;
+};
+.fi
+.if n \{\
+.RE
+.\}
+.SH "DATEIEN"
+.PP
+/var/log/faillog
+.RS 4
+Datei mit fehlgeschlagenen Anmeldungen
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBfaillog\fR(8)
diff --git a/man/de/man5/gshadow.5 b/man/de/man5/gshadow.5
new file mode 100644
index 0000000..06e6476
--- /dev/null
+++ b/man/de/man5/gshadow.5
@@ -0,0 +1,101 @@
+'\" t
+.\" Title: gshadow
+.\" Author: Nicolas Fran\(,cois <nicolas.francois@centraliens.net>
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Dateiformate und konvertierung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "GSHADOW" "5" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Dateiformate und konvertierung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+gshadow \- Shadow\-Datei f\(:ur Gruppen
+.SH "BESCHREIBUNG"
+.PP
+/etc/gshadow
+contains the shadowed information for group accounts\&.
+.PP
+Um die Sicherheit der Passw\(:orter zu gew\(:ahrleisten, darf diese Datei nicht f\(:ur normale Benutzer lesbar sein\&.
+.PP
+Die darin enthaltenen Zeilen haben folgende Felder, die durch Doppelpunkt getrennt sind:
+.PP
+\fBGruppenname\fR
+.RS 4
+Es muss sich um einen g\(:ultigen, auf dem System vorhandenen Gruppennamen handeln\&.
+.RE
+.PP
+\fBverschl\(:usseltes Passwort\fR
+.RS 4
+Refer to
+\fBcrypt\fR(3)
+for details on how this string is interpreted\&.
+.sp
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), for instance ! or *, users will not be able to use a unix password to access the group (but group members do not need the password)\&.
+.sp
+The password is used when a user who is not a member of the group wants to gain the permissions of this group (see
+\fBnewgrp\fR(1))\&.
+.sp
+Dieses Feld kann leer bleiben\&. Dies hat zur Folge, dass nur Gruppenmitglieder von den Rechten der Gruppe Gebrauch machen k\(:onnen\&.
+.sp
+A password field which starts with an exclamation mark means that the password is locked\&. The remaining characters on the line represent the password field before the password was locked\&.
+.sp
+This password supersedes any password specified in
+/etc/group\&.
+.RE
+.PP
+\fBGruppenverwalter\fR
+.RS 4
+Es muss sich dabei um eine durch Kommas getrennte Liste von Benutzernamen handeln\&.
+.sp
+Gruppenverwalter k\(:onnen das Passwort und die Mitglieder der Gruppe \(:andern\&.
+.sp
+Gruppenverwalter haben die gleichen Recht wie die Gruppenmitglieder (siehe unten)\&.
+.RE
+.PP
+\fBMitglieder\fR
+.RS 4
+Es muss sich dabei um eine durch Kommas getrennte Liste von Benutzernamen handeln\&.
+.sp
+Mitglieder haben Zugang zu der Gruppe, ohne eine Passwort eingeben zu m\(:ussen\&.
+.sp
+You should use the same list of users as in
+/etc/group\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/group
+.RS 4
+Informationen zu den Gruppenkonten
+.RE
+.PP
+/etc/gshadow
+.RS 4
+sichere Informationen zu den Gruppenkonten
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBgpasswd\fR(5),
+\fBgroup\fR(5),
+\fBgrpck\fR(8),
+\fBgrpconv\fR(8),
+\fBnewgrp\fR(1)\&.
diff --git a/man/de/man5/limits.5 b/man/de/man5/limits.5
new file mode 100644
index 0000000..8fef705
--- /dev/null
+++ b/man/de/man5/limits.5
@@ -0,0 +1,274 @@
+'\" t
+.\" Title: limits
+.\" Author: Luca Berra
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Dateiformate und konvertierung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "LIMITS" "5" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Dateiformate und konvertierung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+limits \- Festlegung von Resourcenbeschr\(:ankungen
+.SH "BESCHREIBUNG"
+.PP
+The
+\fIlimits\fR
+file (/etc/limits
+by default or LIMITS_FILE defined
+config\&.h) describes the resource limits you wish to impose\&. It should be owned by root and readable by root account only\&.
+.PP
+Standardm\(:a\(ssig bestehen f\(:ur Root keine Einschr\(:ankungen\&. Tats\(:achlich gibt es keine M\(:oglichkeit, mit diesem Verfahren Root\-Konten (Konten mit der UID 0) Beschr\(:ankungen aufzuerlegen\&.
+.PP
+Jede Zeile beschreibt eine Beschr\(:ankung f\(:ur einen Benutzer in der Form:
+.PP
+\fIBenutzer BESCHR\(:ANKUNGSZEICHENKETTE\fR
+.PP
+oder in der Form:
+.PP
+\fI@Gruppe BESCHR\(:ANKUNGSZEICHENKETTE\fR
+.PP
+The
+\fILIMITS_STRING\fR
+is a string of a concatenated list of resource limits\&. Each limit consists of a letter identifier followed by a numerical limit\&.
+.PP
+G\(:ultige Kennungen sind:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+A: maximaler Adressraum (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+C: maximale Gr\(:o\(sse der Speicherabbild\-Datei
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+D: maximale Datengr\(:o\(sse (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+F: maximum file size (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+K: file creation mask, set by
+\fBumask\fR(2)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+I: Maximaler Wert von nice (0 bis 39, was in 20 bis \-19 \(:ubersetzt wird)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+L: maximale Anzahl von Logins f\(:ur diesen Benutzer
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+M: maximaler gesperrter Adressbereich im Speicher (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+N: maximale Anzahl offener Dateien
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+O: Maximale Echtzeit\-Priorit\(:at
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+P: process priority, set by
+\fBsetpriority\fR(2)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+R: maximale Resident Set Size (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+S: maximale Gr\(:o\(sse des Stapelverarbeitungsspeichers (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+T: maximale CPU\-Zeit (Min)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+U: maximale Anzahl von Prozessen
+.RE
+.PP
+For example,
+\fIL2D2048N5\fR
+is a valid
+\fILIMITS_STRING\fR\&. For reading convenience, the following entries are equivalent:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ username L2D2048N5
+ username L2 D2048 N5
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Be aware that after
+\fIusername\fR
+the rest of the line is considered a limit string, thus comments are not allowed\&. An invalid limits string will be rejected (not considered) by the
+\fBlogin\fR
+program\&.
+.PP
+The default entry is denoted by username "\fI*\fR"\&. If you have multiple
+\fIdefault\fR
+entries in your
+\fILIMITS_FILE\fR, then the last one will be used as the default entry\&.
+.PP
+The limits specified in the form "\fI@group\fR" apply to the members of the specified
+\fIgroup\fR\&.
+.PP
+If more than one line with limits for a user exist, only the first line for this user will be considered\&.
+.PP
+If no lines are specified for a user, the last
+\fI@group\fR
+line matching a group whose the user is a member of will be considered, or the last line with default limits if no groups contain the user\&.
+.PP
+To completely disable limits for a user, a single dash "\fI\-\fR" will do\&.
+.PP
+To disable a limit for a user, a single dash "\fI\-\fR" can be used instead of the numerical value for this limit\&.
+.PP
+Ber\(:ucksichtigen Sie auch, dass alle Beschr\(:ankungen nur JE ANMELDUNG gelten\&. Sie sind nicht global und auch nicht dauerhaft\&. Vielleicht wird es einmal globale Beschr\(:ankungen geben, f\(:ur jetzt muss dies aber reichen ;)
+.SH "DATEIEN"
+.PP
+/etc/limits
+.RS 4
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBlogin\fR(1),
+\fBsetpriority\fR(2),
+\fBsetrlimit\fR(2)\&.
diff --git a/man/de/man5/login.access.5 b/man/de/man5/login.access.5
new file mode 100644
index 0000000..9eedaf3
--- /dev/null
+++ b/man/de/man5/login.access.5
@@ -0,0 +1,67 @@
+'\" t
+.\" Title: login.access
+.\" Author: Marek Micha\(/lkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Dateiformate und konvertierung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "LOGIN\&.ACCESS" "5" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Dateiformate und konvertierung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+login.access \- Tabelle f\(:ur die Zugangskontrolle zur Anmeldung
+.SH "BESCHREIBUNG"
+.PP
+The
+\fIlogin\&.access\fR
+file specifies (user, host) combinations and/or (user, tty) combinations for which a login will be either accepted or refused\&.
+.PP
+When someone logs in, the
+\fIlogin\&.access\fR
+is scanned for the first entry that matches the (user, host) combination, or, in case of non\-networked logins, the first entry that matches the (user, tty) combination\&. The permissions field of that table entry determines whether the login will be accepted or refused\&.
+.PP
+Jede Zeile der Tabelle f\(:ur die Zugangskontrolle enth\(:alt drei Felder, die jeweils durch einen Doppelpunkt \(Fc:\(Fo getrennt sind:
+.PP
+\fIpermission\fR:\fIusers\fR:\fIorigins\fR
+.PP
+The first field should be a "\fI+\fR" (access granted) or "\fI\-\fR" (access denied) character\&. The second field should be a list of one or more login names, group names, or
+\fIALL\fR
+(always matches)\&. The third field should be a list of one or more tty names (for non\-networked logins), host names, domain names (begin with "\&."), host addresses, internet network numbers (end with "\&."),
+\fIALL\fR
+(always matches) or
+\fILOCAL\fR
+(matches any string that does not contain a "\&." character)\&. If you run NIS you can use @netgroupname in host or user patterns\&.
+.PP
+The
+\fIEXCEPT\fR
+operator makes it possible to write very compact rules\&.
+.PP
+Die Gruppendatei wird nur durchsucht, wenn ein Name nicht mit dem des angemeldeten Benutzers \(:ubereinstimmt\&. Eine \(:Ubereinstimmung mit Gruppen wird nur festgestellt, wenn darin der Benutzer ausdr\(:ucklich aufgef\(:uhrt ist\&. Das Programm beachtet also nicht den Wert der Hauptgruppe des Benutzers\&.
+.SH "DATEIEN"
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguration der Shadow\-Passwort\-Werkzeugsammlung
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBlogin\fR(1)\&.
diff --git a/man/de/man5/login.defs.5 b/man/de/man5/login.defs.5
new file mode 100644
index 0000000..fb6ee09
--- /dev/null
+++ b/man/de/man5/login.defs.5
@@ -0,0 +1,855 @@
+'\" t
+.\" Title: login.defs
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Dateiformate und konvertierung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "LOGIN\&.DEFS" "5" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Dateiformate und konvertierung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+login.defs \- Konfiguration der Werkzeugsammlung f\(:ur Shadow\-Passw\(:orter
+.SH "BESCHREIBUNG"
+.PP
+The
+/etc/login\&.defs
+file defines the site\-specific configuration for the shadow password suite\&. This file is required\&. Absence of this file will not prevent system operation, but will probably result in undesirable operation\&.
+.PP
+Diese Datei ist eine lesbare Textdatei\&. Jede Zeile der Datei beschreibt einen Konfigurationsparameter\&. Eine Zeile besteht aus einem Konfigurationsnamen und einem Wert, die durch ein Leerzeichen getrennt sind\&. Leer\- und Kommentarzeilen werden nicht beachtet\&. Kommentare werden mit dem Rautezeichen \(Fc#\(Fo eingeleitet\&. Die Raute muss das erste nicht leere Zeichen der Zeile sein\&.
+.PP
+Parameter values may be of four types: strings, booleans, numbers, and long numbers\&. A string is comprised of any printable characters\&. A boolean should be either the value
+\fIyes\fR
+or
+\fIno\fR\&. An undefined boolean parameter or one with a value other than these will be given a
+\fIno\fR
+value\&. Numbers (both regular and long) may be either decimal values, octal values (precede the value with
+\fI0\fR) or hexadecimal values (precede the value with
+\fI0x\fR)\&. The maximum value of the regular and long numeric parameters is machine\-dependent\&.
+.PP
+Die folgenden Konfigurationsm\(:oglichkeiten sind vorhanden:
+.PP
+\fBCHFN_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchfn\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCHFN_RESTRICT\fR (string)
+.RS 4
+This parameter specifies which values in the
+\fIgecos\fR
+field of the
+/etc/passwd
+file may be changed by regular users using the
+\fBchfn\fR
+program\&. It can be any combination of letters
+\fIf\fR,
+\fIr\fR,
+\fIw\fR,
+\fIh\fR, for Full name, Room number, Work phone, and Home phone, respectively\&. For backward compatibility,
+\fIyes\fR
+is equivalent to
+\fIrwh\fR
+and
+\fIno\fR
+is equivalent to
+\fIfrwh\fR\&. If not specified, only the superuser can make any changes\&. The most restrictive setting is better achieved by not installing
+\fBchfn\fR
+SUID\&.
+.RE
+.PP
+\fBCHSH_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchsh\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+Die Konfiguration erfolgt entweder \(:uber die Angabe des vollen Pfadnamens einer Datei, welche die Namen der Ger\(:ate enth\(:alt (eines pro Zeile), oder mit einer Liste der Ger\(:atenamen, die mit \(Fc:\(Fo getrennt sind\&. Root kann sich nur auf diesen Ger\(:aten anmelden\&.
+.sp
+Wenn es unkonfiguriert gelassen wird, kann sich Root auf jedem Ger\(:at anmelden\&.
+.sp
+Das Ger\(:at soll ohne vorangestelltes /dev/ angegeben werden\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\*(Aqs supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBCREATE_HOME\fR (boolean)
+.RS 4
+bestimmt, ob standardm\(:a\(ssig ein Home\-Verzeichnis f\(:ur neue Benutzer erstellt werden soll
+.sp
+Diese Einstellung trifft nicht auf Systembenutzer zu\&. Sie kann auf der Befehlszeile \(:uberschrieben werden\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Legt fest, ob ein Login erlaubt wird, wenn mit cd nicht in das Home\-Verzeichnis gewechselt werden kann\&. Standardm\(:a\(ssig wird dies nicht zugelassen\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+Damit wird der standardm\(:a\(ssige Verschl\(:usselungsalgorithmus, mit dem Passw\(:orter verschl\(:usselt werden, bestimmt (soweit nicht in der Befehlszeile ein Algorithmus angegeben wird)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value is a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value is a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/sbin:/bin:/usr/sbin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+Wenn diese Datei vorhanden ist, wird die Anmeldeumgebung aus ihr gelesen\&. Jede Zeile sollte die Form Name=Wert haben\&.
+.sp
+Zeilen, die mit einem # beginnen, werden als Kommentare behandelt und daher ignoriert\&.
+.RE
+.PP
+\fBERASECHAR\fR (number)
+.RS 4
+Terminal ERASE character (\fI010\fR
+= backspace,
+\fI0177\fR
+= DEL)\&.
+.sp
+Wenn der Wert mit \(Fc0\(Fo beginnt, wird er als Oktalzahl gewertet, wenn er mit \(Fc0x\(Fo beginnt, als Hexadezimalzahl\&.
+.RE
+.PP
+\fBFAIL_DELAY\fR (number)
+.RS 4
+Wartezeit in Sekunden, ehe nach einem fehlgeschlagenen Anmeldeversuch ein neuer unternommen werden kann
+.RE
+.PP
+\fBFAILLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of
+/var/log/faillog
+login failure info\&.
+.RE
+.PP
+\fBFAKE_SHELL\fR (string)
+.RS 4
+If set,
+\fBlogin\fR
+will execute this shell instead of the users\*(Aq shell specified in
+/etc/passwd\&.
+.RE
+.PP
+\fBFTMP_FILE\fR (string)
+.RS 4
+Falls angegeben, werden fehlgeschlagene Anmeldeversuche in dieser Datei im Format utmp protokolliert\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBGID_MIN\fR
+(resp\&.
+\fBGID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBHOME_MODE\fR (number)
+.RS 4
+The mode for new home directories\&. If not specified, the
+\fBUMASK\fR
+is used to create the mode\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this to set the mode of the home directory they create\&.
+.RE
+.PP
+\fBHUSHLOGIN_FILE\fR (string)
+.RS 4
+Falls angegeben, kann diese Datei die \(:ubliche Informationsanzeige w\(:ahrend des Anmeldevorgangs unterbinden\&. Wenn ein vollst\(:andiger Pfad angegeben wird, wird der Modus ohne Anmeldeinformationen verwendet, wenn der Name oder die Shell des Benutzers in der Datei enthalten sind\&. Wenn kein vollst\(:andiger Pfad angegeben wird, wird der Modus ohne Anmeldeinformationen aktiviert, wenn die Datei im Home\-Verzeichnis des Benutzers existiert\&.
+.RE
+.PP
+\fBISSUE_FILE\fR (string)
+.RS 4
+Falls angegeben, wird diese Datei vor der Anmeldeaufforderung angezeigt\&.
+.RE
+.PP
+\fBKILLCHAR\fR (number)
+.RS 4
+Terminal KILL character (\fI025\fR
+= CTRL/U)\&.
+.sp
+Wenn der Wert mit \(Fc0\(Fo beginnt, wird er als Oktalzahl gewertet, wenn er mit \(Fc0x\(Fo beginnt, als Hexadezimalzahl\&.
+.RE
+.PP
+\fBLASTLOG_ENAB\fR (boolean)
+.RS 4
+aktiviert die Protokollierung und Anzeige der Informationen zu Anmeldezeiten in
+/var/log/lastlog
+.RE
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.PP
+\fBLOG_OK_LOGINS\fR (boolean)
+.RS 4
+aktiviert die Protokollierung erfolgreicher Anmeldungen
+.RE
+.PP
+\fBLOG_UNKFAIL_ENAB\fR (boolean)
+.RS 4
+aktiviert die Anzeige unbekannter Benutzernamen, wenn fehlgeschlagene Anmeldeversuche aufgezeichnet werden
+.sp
+Hinweis: Das Protokollieren unbekannter Benutzernamen kann ein Sicherheitsproblem darstellen, wenn ein Benutzer sein Passwort anstelle seines Anmeldenamens eingibt\&.
+.RE
+.PP
+\fBLOGIN_RETRIES\fR (number)
+.RS 4
+maximale Anzahl von Anmeldeversuchen, wenn ein falsches Passwort eingegeben wird
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+Diese Zeichenkette wird bei der Eingabeaufforderung des Passworts (Prompt) verwendet\&. Standardm\(:a\(ssig wird \(FcPassword: \(Fo oder eine \(:Ubersetzung davon benutzt\&. Wenn Sie diese Variable definieren, wird die Eingabeaufforderung nicht \(:ubersetzt\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.PP
+\fBLOGIN_TIMEOUT\fR (number)
+.RS 4
+H\(:ochstdauer f\(:ur einen Anmeldeversuch
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+aktiviert die Pr\(:ufung und Anzeige des Status der Mailbox bei der Anmeldung
+.sp
+Sie sollten dies abschalten, wenn schon die Startdateien der Shell die Mails pr\(:ufen (\(Fcmailx \-e\(Fo oder \(:ahnliches)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+Das Verzeichnis des Mail\-Spools\&. Diese Angabe wird ben\(:otigt, um die Mailbox zu bearbeiten, nachdem das entsprechende Benutzerkonto ver\(:andert oder gel\(:oscht wurde\&. Falls nicht angegeben, wird ein Standard verwendet, der beim Kompilieren festgelegt wurde\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Legt den Ort der Mail\-Spool\-Dateien eines Benutzers relativ zu seinem Home\-Verzeichnis fest\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Der Standardwert ist 0, was zur Folge hat, dass die Anzahl der Mitglieder einer Gruppe nicht begrenzt ist\&.
+.sp
+Diese F\(:ahigkeit (der aufgeteilten Gruppe) erm\(:oglicht es, die Zeilenl\(:ange in der Gruppendatei zu begrenzen\&. Damit kann sichergestellt werden, dass die Zeilen f\(:ur NIS\-Gruppen nicht l\(:anger als 1024 Zeichen sind\&.
+.sp
+Falls Sie eine solche Begrenzung ben\(:otigen, k\(:onnen Sie 25 verwenden\&.
+.sp
+Hinweis: Aufgeteilte Gruppen werden m\(:oglicherweise nicht von allen Werkzeugen unterst\(:utzt, selbst nicht aus der Shadow\-Werkzeugsammlung\&. Sie sollten diese Variable nur setzen, falls Sie zwingend darauf angewiesen sind\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBMOTD_FILE\fR (string)
+.RS 4
+Falls angegeben, eine Aufz\(:ahlung von Dateien, welche die bei der Anmeldung anzuzeigenden \(FcNachrichten des Tages\(Fo enth\(:alt\&. Die Dateien werden mit einem \(Fc:\(Fo getrennt\&.
+.RE
+.PP
+\fBNOLOGINS_FILE\fR (string)
+.RS 4
+Falls angegeben, der Name einer Datei, deren Existenz Anmeldungen au\(sser von Root verhindert\&. Der Inhalt der Datei sollte die Gr\(:unde enthalten, weshalb Anmeldungen untersagt sind\&.
+.RE
+.PP
+\fBOBSCURE_CHECKS_ENAB\fR (boolean)
+.RS 4
+Aktiviert zus\(:atzliche Tests bei der Ver\(:anderung eines Passworts\&.
+.RE
+.PP
+\fBPASS_ALWAYS_WARN\fR (boolean)
+.RS 4
+weist auf schwache Passw\(:orter hin (aber l\(:asst sie zu), falls Sie root sind
+.RE
+.PP
+\fBPASS_CHANGE_TRIES\fR (number)
+.RS 4
+maximale Anzahl von Versuchen, ein Passwort zu \(:andern, wenn dies wegen zu geringer St\(:arke des gew\(:ahlten Passworts abgelehnt wurde
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+Die maximale Anzahl von Tagen, f\(:ur die ein Passwort verwendet werden darf\&. Wenn das Passwort \(:alter ist, wird ein Wechsel des Passworts erzwungen\&. Falls nicht angegeben, wird \-1 angenommen (was zur Folge hat, dass diese Beschr\(:ankung abgeschaltet ist)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+Die Mindestanzahl von Tagen, bevor ein Wechsel des Passworts zugelassen wird\&. Ein vorheriger Versuch, das Passwort zu \(:andern, wird abgelehnt\&. Falls nicht angegeben, wird \-1 angenommen (was zur Folge hat, dass diese Beschr\(:ankung abgeschaltet ist)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+Die Anzahl von Tagen, an denen der Benutzer vorgewarnt wird, bevor das Passwort verf\(:allt\&. Eine Null bedeutet, dass eine Warnung nur am Tag des Verfalls ausgegeben wird\&. Ein negativer Wert bedeutet, dass keine Vorwarnung erfolgt\&. Falls nicht angegeben, wird keine Vorwarnung ausgegeben\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR,
+\fBPASS_MIN_DAYS\fR
+and
+\fBPASS_WARN_AGE\fR
+are only used at the time of account creation\&. Any changes to these settings won\*(Aqt affect existing accounts\&.
+.PP
+\fBPASS_MAX_LEN\fR (number), \fBPASS_MIN_LEN\fR (number)
+.RS 4
+Number of significant characters in the password for crypt()\&.
+\fBPASS_MAX_LEN\fR
+is 8 by default\&. Don\*(Aqt change unless your crypt() is better\&. This is ignored if
+\fBMD5_CRYPT_ENAB\fR
+set to
+\fIyes\fR\&.
+.RE
+.PP
+\fBPORTTIME_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable checking of time restrictions specified in
+/etc/porttime\&.
+.RE
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of resource limits from
+/etc/limits
+and ulimit, umask, and niceness from the user\*(Aqs passwd gecos field\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+Je mehr Runden Sie definieren, umso schwieriger ist es, das Passwort mit sturem Durchprobieren (brute force) zu knacken; umso mehr Rechenleistung wird jedoch auch f\(:ur die Anmeldung eines Benutzers ben\(:otigt\&.
+.sp
+Falls Sie nichts angeben, wird libc die Standardanzahl der Runden festlegen (5000)\&.
+.sp
+Die Werte m\(:ussen zwischen 1000\-999\&.999\&.999 liegen\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.PP
+\fBSULOG_FILE\fR (string)
+.RS 4
+Wenn angegeben, wird jeder Aufruf von su in dieser Datei protokolliert\&.
+.RE
+.PP
+\fBSU_NAME\fR (string)
+.RS 4
+Damit kann die Anzeige des Namens des Befehls festgelegt werden, wenn \(Fcsu \-\(Fo ausgef\(:uhrt wird\&. Wenn beispielsweise dies auf \(Fcsu\(Fo gesetzt wurde, zeigt \(Fcps\(Fo den Befehl als \(Fc\-su\(Fo an\&. Wenn es dagegen nicht vergeben wurde, wird \(Fcps\(Fo den Namen der Shell anzeigen, die ausgef\(:uhrt wird, also etwa \(Fc\-sh\(Fo\&.
+.RE
+.PP
+\fBSU_WHEEL_ONLY\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the user must be listed as a member of the first gid 0 group in
+/etc/group
+(called
+\fIroot\fR
+on most Linux systems) to be able to
+\fBsu\fR
+to uid 0 accounts\&. If the group doesn\*(Aqt exist or is empty, no one will be able to
+\fBsu\fR
+to uid 0\&.
+.RE
+.PP
+\fBSUB_GID_MIN\fR (number), \fBSUB_GID_MAX\fR (number), \fBSUB_GID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate group IDs) allocate
+\fBSUB_GID_COUNT\fR
+unused group IDs from the range
+\fBSUB_GID_MIN\fR
+to
+\fBSUB_GID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR,
+\fBSUB_GID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSUB_UID_MIN\fR (number), \fBSUB_UID_MAX\fR (number), \fBSUB_UID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate user IDs) allocate
+\fBSUB_UID_COUNT\fR
+unused user IDs from the range
+\fBSUB_UID_MIN\fR
+to
+\fBSUB_UID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR,
+\fBSUB_UID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_GID_MIN\fR
+(resp\&.
+\fBSYS_GID_MAX\fR) is 101 (resp\&.
+\fBGID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_UID_MIN\fR
+(resp\&.
+\fBSYS_UID_MAX\fR) is 101 (resp\&.
+\fBUID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.PP
+\fBSYSLOG_SU_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsu\fR
+activity \- in addition to sulog file logging\&.
+.RE
+.PP
+\fBTTYGROUP\fR (string), \fBTTYPERM\fR (string)
+.RS 4
+The terminal permissions: the login tty will be owned by the
+\fBTTYGROUP\fR
+group, and the permissions will be set to
+\fBTTYPERM\fR\&.
+.sp
+By default, the ownership of the terminal is set to the user\*(Aqs primary group and the permissions are set to
+\fI0600\fR\&.
+.sp
+\fBTTYGROUP\fR
+can be either the name of a group or a numeric group identifier\&.
+.sp
+If you have a
+\fBwrite\fR
+program which is "setgid" to a special group which owns the terminals, define TTYGROUP to the group number and TTYPERM to 0620\&. Otherwise leave TTYGROUP commented out and assign TTYPERM to either 622 or 600\&.
+.RE
+.PP
+\fBTTYTYPE_FILE\fR (string)
+.RS 4
+Falls angegeben, eine Datei, welche einer tty\-Zeile den Umgebungsparameter TERM zuweist\&. Jede Zeile hat das Format wie etwa \(Fcvt100 tty01\(Fo\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBUID_MIN\fR
+(resp\&.
+\fBUID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBULIMIT\fR (number)
+.RS 4
+Default
+\fBulimit\fR
+value\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+Die Bit\-Gruppe, welche die Rechte von erstellten Dateien bestimmt, wird anf\(:anglich auf diesen Wert gesetzt\&. Falls nicht angegeben, wird sie auf 022 gesetzt\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create if
+\fBHOME_MODE\fR
+is not set\&.
+.sp
+It is also used by
+\fBlogin\fR
+to define users\*(Aq initial umask\&. Note that this mask can be overridden by the user\*(Aqs GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERDEL_CMD\fR (string)
+.RS 4
+Falls angegeben, wird dieser Befehl ausgef\(:uhrt, wenn ein Benutzer entfernt wird\&. Damit k\(:onnen At\-, Cron\- und Druckauftr\(:age etc\&. des entfernten Benutzers (wird als erstes Argument \(:ubergeben) gel\(:oscht werden\&.
+.sp
+Der R\(:uckgabewert des Skripts wird nicht ausgewertet\&.
+.sp
+Here is an example script, which removes the user\*(Aqs cron, at and print jobs:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#! /bin/sh
+
+# Check for the required argument\&.
+if [ $# != 1 ]; then
+ echo "Usage: $0 username"
+ exit 1
+fi
+
+# Remove cron jobs\&.
+crontab \-r \-u $1
+
+# Remove at jobs\&.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username\&.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR \-name "[^\&.]*" \-type f \-user $1 \-delete \e;
+
+# Remove print jobs\&.
+lprm $1
+
+# All done\&.
+exit 0
+
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Erlaubt Benutzern, die nicht Root sind, die Umask\-Gruppen\-Bits auf ihre Umask\-Bits zu setzen (Beispiel: 022 \-> 002, 077 \-> 007), falls die UID mit der GID identisch ist sowie der Benutzername mit dem Gruppennamen \(:ubereinstimmt\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "QUERVERWEISE"
+.PP
+Die folgenden Querverweise zeigen, welche Programme aus der Shadow\-Passwort\-Werkzeugsammlung welche Parameter verwenden\&.
+.PP
+chfn
+.RS 4
+CHFN_AUTH
+CHFN_RESTRICT
+LOGIN_STRING
+.RE
+.PP
+chgpasswd
+.RS 4
+ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+chpasswd
+.RS 4
+ENCRYPT_METHOD MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+chsh
+.RS 4
+CHSH_AUTH LOGIN_STRING
+.RE
+.PP
+gpasswd
+.RS 4
+ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+groupadd
+.RS 4
+GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN
+.RE
+.PP
+groupdel
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+groupmems
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+groupmod
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpck
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpconv
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpunconv
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+lastlog
+.RS 4
+LASTLOG_UID_MAX
+.RE
+.PP
+login
+.RS 4
+CONSOLE
+CONSOLE_GROUPS DEFAULT_HOME
+ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE
+ERASECHAR FAIL_DELAY
+FAILLOG_ENAB
+FAKE_SHELL
+FTMP_FILE
+HUSHLOGIN_FILE
+ISSUE_FILE
+KILLCHAR
+LASTLOG_ENAB LASTLOG_UID_MAX
+LOGIN_RETRIES
+LOGIN_STRING
+LOGIN_TIMEOUT LOG_OK_LOGINS LOG_UNKFAIL_ENAB
+MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB
+TTYGROUP TTYPERM TTYTYPE_FILE
+ULIMIT UMASK
+USERGROUPS_ENAB
+.RE
+.PP
+newgrp / sg
+.RS 4
+SYSLOG_SG_ENAB
+.RE
+.PP
+newusers
+.RS 4
+ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB HOME_MODE PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+SUB_GID_COUNT SUB_GID_MAX SUB_GID_MIN SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK
+.RE
+.PP
+passwd
+.RS 4
+ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+pwck
+.RS 4
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+.RE
+.PP
+pwconv
+.RS 4
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+.RE
+.PP
+su
+.RS 4
+CONSOLE
+CONSOLE_GROUPS DEFAULT_HOME
+ENV_HZ ENVIRON_FILE
+ENV_PATH ENV_SUPATH
+ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE QUOTAS_ENAB
+SULOG_FILE SU_NAME
+SU_WHEEL_ONLY
+SYSLOG_SU_ENAB
+USERGROUPS_ENAB
+.RE
+.PP
+sulogin
+.RS 4
+ENV_HZ
+ENV_TZ
+.RE
+.PP
+useradd
+.RS 4
+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 SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK
+.RE
+.PP
+userdel
+.RS 4
+MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB
+.RE
+.PP
+usermod
+.RS 4
+LASTLOG_UID_MAX MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBsu\fR(1),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBpam\fR(8)\&.
diff --git a/man/de/man5/passwd.5 b/man/de/man5/passwd.5
new file mode 100644
index 0000000..e1e0b22
--- /dev/null
+++ b/man/de/man5/passwd.5
@@ -0,0 +1,193 @@
+'\" t
+.\" Title: passwd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Dateiformate und konvertierung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "PASSWD" "5" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Dateiformate und konvertierung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+passwd \- die Passwortdatei
+.SH "BESCHREIBUNG"
+.PP
+/etc/passwd
+contains one line for each user account, with seven fields delimited by colons (\(Bq:\(lq)\&. These fields are:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Anmeldename
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+optional verschl\(:usseltes Passwort
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+numerische Benutzer\-ID
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+numerische Gruppen\-ID
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Benutzername oder Kommentarfeld
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Home\-Verzeichnis des Benutzers
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+optional Befehlsinterpreter des Benutzers
+.RE
+.PP
+If the
+\fIpassword\fR
+field is a lower\-case
+\(Bqx\(lq, then the encrypted password is actually stored in the
+\fBshadow\fR(5)
+file instead; there
+\fImust\fR
+be a corresponding line in the
+/etc/shadow
+file, or else the user account is invalid\&.
+.PP
+The encrypted
+\fIpassword\fR
+field may be empty, in which case no password is required to authenticate as the specified login name\&. However, some applications which read the
+/etc/passwd
+file may decide not to permit
+\fIany\fR
+access at all if the
+\fIpassword\fR
+field is blank\&.
+.PP
+A
+\fIpassword\fR
+field which starts with an exclamation mark means that the password is locked\&. The remaining characters on the line represent the
+\fIpassword\fR
+field before the password was locked\&.
+.PP
+Refer to
+\fBcrypt\fR(3)
+for details on how this string is interpreted\&.
+.PP
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), 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)\&.
+.PP
+The comment field is used by various system utilities, such as
+\fBfinger\fR(1)\&.
+.PP
+The home directory field provides the name of the initial working directory\&. The
+\fBlogin\fR
+program uses this information to set the value of the
+\fB$HOME\fR
+environmental variable\&.
+.PP
+The command interpreter field provides the name of the user\*(Aqs command language interpreter, or the name of the initial program to execute\&. The
+\fBlogin\fR
+program uses this information to set the value of the
+\fB$SHELL\fR
+environmental variable\&. If this field is empty, it defaults to the value
+/bin/sh\&.
+.SH "DATEIEN"
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/shadow
+.RS 4
+optionale Datei f\(:ur verschl\(:usseltes Passwort
+.RE
+.PP
+/etc/passwd\-
+.RS 4
+Sicherungskopie von /etc/passwd
+.sp
+Beachten Sie, dass diese Datei von Werkzeugen der Shadow\-Werkzeugsammlung verwendet wird, aber nicht von allen sonstigen Programmen zur Benutzer\- und Passwortverwaltung\&.
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBcrypt\fR(3),
+\fBgetent\fR(1),
+\fBgetpwnam\fR(3),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBpwck\fR(8),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBshadow\fR(5),
+\fBsu\fR(1),
+\fBsulogin\fR(8)\&.
diff --git a/man/de/man5/porttime.5 b/man/de/man5/porttime.5
new file mode 100644
index 0000000..88b0611
--- /dev/null
+++ b/man/de/man5/porttime.5
@@ -0,0 +1,96 @@
+'\" t
+.\" Title: porttime
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Dateiformate und konvertierung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "PORTTIME" "5" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Dateiformate und konvertierung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+porttime \- Datei f\(:ur zeitlich begrenzten Zugang zu Ports
+.SH "BESCHREIBUNG"
+.PP
+\fIporttime\fR
+contains a list of tty devices, user names, and permitted login times\&.
+.PP
+Jeder Eintrag besteht aus drei Feldern, die durch Doppelpunkte getrennt sind\&. Das erste Feld enth\(:alt eine Liste von tty\-Ger\(:aten, die durch Kommata getrennt sind, oder einen Stern, was bedeutet, dass dieser Eintrag auf alle tty\-Ger\(:ate zutrifft\&. Das zweite Feld enth\(:alt eine Liste von Benutzernamen, die durch Kommata getrennt sind, oder einen Stern, was bedeutet, dass dieser Eintrag auf alle Benutzernamen zutrifft\&. Das dritte Feld ist eine Liste von Anmeldezeiten, die durch Kommata getrennt sind\&.
+.PP
+Each access time entry consists of zero or more days of the week, abbreviated
+\fISu\fR,
+\fIMo\fR,
+\fITu\fR,
+\fIWe\fR,
+\fITh\fR,
+\fIFr\fR, and
+\fISa\fR, followed by a pair of times separated by a hyphen\&. The abbreviation
+\fIWk\fR
+may be used to represent Monday thru Friday, and
+\fIAl\fR
+may be used to indicate every day\&. If no days are given,
+\fIAl\fR
+is assumed\&.
+.SH "BEISPIELE"
+.PP
+The following entry allows access to user
+\fBjfh\fR
+on every port during weekdays from 9am to 5pm\&.
+.PP
+*:jfh:Wk0900\-1700
+.PP
+The following entries allow access only to the users
+\fIroot\fR
+and
+\fIoper\fR
+on
+/dev/console
+at any time\&. This illustrates how the
+/etc/porttime
+file is an ordered list of access times\&. Any other user would match the second entry which does not permit access at any time\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ console:root,oper:Al0000\-2400
+ console:*:
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+The following entry allows access for the user
+\fIgames\fR
+on any port during non\-working hours\&.
+.PP
+*:games:Wk1700\-0900,SaSu0000\-2400
+.SH "DATEIEN"
+.PP
+/etc/porttime
+.RS 4
+Datei, die den Port\-Zugriff enth\(:alt\&.
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBlogin\fR(1)\&.
diff --git a/man/de/man5/shadow.5 b/man/de/man5/shadow.5
new file mode 100644
index 0000000..45769af
--- /dev/null
+++ b/man/de/man5/shadow.5
@@ -0,0 +1,148 @@
+'\" t
+.\" Title: shadow
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Dateiformate und konvertierung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "SHADOW" "5" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Dateiformate und konvertierung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+shadow \- Shadow\-Passwortdatei
+.SH "BESCHREIBUNG"
+.PP
+shadow
+is a file which contains the password information for the system\*(Aqs accounts and optional aging information\&.
+.PP
+Um die Sicherheit der Passw\(:orter zu gew\(:ahrleisten, darf diese Datei nicht f\(:ur normale Benutzer lesbar sein\&.
+.PP
+Each line of this file contains 9 fields, separated by colons (\(Bq:\(lq), in the following order:
+.PP
+\fBAnmeldename\fR
+.RS 4
+Dabei muss es sich um eine g\(:ultigen Kontonamen handeln, der auf dem System existiert\&.
+.RE
+.PP
+\fBverschl\(:usseltes Passwort\fR
+.RS 4
+This field may be empty, in which case no passwords are required to authenticate as the specified login name\&. However, some applications which read the
+/etc/shadow
+file may decide not to permit any access at all if the password field is empty\&.
+.sp
+A password field which starts with an exclamation mark means that the password is locked\&. The remaining characters on the line represent the password field before the password was locked\&.
+.sp
+Refer to
+\fBcrypt\fR(3)
+for details on how this string is interpreted\&.
+.sp
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), 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)\&.
+.RE
+.PP
+\fBDatum, an dem das Passwort das letzte Mal ge\(:andert wurde\fR
+.RS 4
+Das Datum, als das Passwort das letzte Mal ge\(:andert wurde, wird als Anzahl der Tage seit dem 1\&. Januar 1970 ausgedr\(:uckt\&.
+.sp
+The value 0 has a special meaning, which is that the user should change her password the next time she will log in the system\&.
+.sp
+Ein leeres Feld bedeutet, dass das Altern des Passworts abgeschaltet ist\&.
+.RE
+.PP
+\fBMindestalter des Passworts\fR
+.RS 4
+Das Mindestalter des Passworts ist die Anzahl von Tagen, die ein Benutzer warten muss, bevor er sein Passwort wieder \(:andern darf\&.
+.sp
+Eine leeres Feld oder der Wert 0 bedeuten, dass es kein Mindestalter eines Passworts gibt\&.
+.RE
+.PP
+\fBH\(:ochstalter des Passworts\fR
+.RS 4
+Das H\(:ochstalter des Passworts ist die Anzahl von Tagen, nach welcher der Benutzer sein Passwort \(:andern muss\&.
+.sp
+Auch nach Ablauf dieser Anzahl von Tagen bleibt das Passwort g\(:ultig\&. Der Benutzer wird bei der n\(:achsten Anmeldung aufgefordert, sein Passwort zu \(:andern\&.
+.sp
+Ein leeres Feld bedeutet, dass es kein H\(:ochstalter f\(:ur das Passwort, keine Vorwarnung und keine Dauer der Unt\(:atigkeit (siehe unten) gibt\&.
+.sp
+Wenn das H\(:ochstalter niedriger als das Mindestalter eines Passworts ist, kann ein Benutzer sein Passwort nicht \(:andern\&.
+.RE
+.PP
+\fBPasswortvorwarndauer\fR
+.RS 4
+Die Anzahl von Tagen, w\(:ahrend welcher der Benutzer vorgewarnt wird, bevor sein Passwort abl\(:auft (siehe das H\(:ochstalter des Passworts)\&.
+.sp
+Ein leeres Feld oder der Wert 0 bedeutet, dass es keine Vorwarnung gibt\&.
+.RE
+.PP
+\fBDauer der fehlenden Verwendung des Passworts\fR
+.RS 4
+Die Anzahl von Tagen, f\(:ur die ein Benutzer sein Passwort, nachdem es abgelaufen ist (vergleiche oben das H\(:ochstalter des Passworts), noch verwenden kann (und w\(:ahrend des n\(:achsten Logins \(:andern muss)\&.
+.sp
+Nachdem das Passwort abgelaufen ist und auch die Dauer der Unt\(:atigkeit verstrichen ist, kann sich der Benutzer mit seinem Passwort nicht mehr anmelden\&. Er muss sich dann an den Administrator wenden\&.
+.sp
+Ein leeres Feld bedeutet, dass es keine H\(:ochstdauer zwischen Ablauf des Passworts und erneuter Anmeldung des Benutzers gibt\&.
+.RE
+.PP
+\fBDatum des Verfalls des Kontos\fR
+.RS 4
+Das Datum, an dem das Konto verf\(:allt, wird als Anzahl der Tage seit dem 1\&. Januar 1970 ausgedr\(:uckt\&.
+.sp
+Note that an account expiration differs from a password expiration\&. In case of an account expiration, the user shall not be allowed to login\&. In case of a password expiration, the user is not allowed to login using her password\&.
+.sp
+Ein leeres Feld bedeutet, dass das Konto nicht verfallen wird\&.
+.sp
+Der Wert 0 sollte nicht verwendet werden, weil er sowohl bedeuten kann, dass das Konto nicht verf\(:allt als auch, dass das Konto bereits am 1\&. Januar 1970 verfallen ist\&.
+.RE
+.PP
+\fBreserviertes Feld\fR
+.RS 4
+Dieses Feld ist f\(:ur zuk\(:unftigen Gebrauch reserviert\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/shadow
+.RS 4
+verschl\(:usselte Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/shadow\-
+.RS 4
+Sicherungskopie von /etc/shadow
+.sp
+Beachten Sie, dass diese Datei von Werkzeugen der Shadow\-Werkzeugsammlung verwendet wird, aber nicht von allen sonstigen Programmen zur Benutzer\- und Passwortverwaltung\&.
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBchage\fR(1),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBpasswd\fR(5),
+\fBpwck\fR(8),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBsu\fR(1),
+\fBsulogin\fR(8)\&.
diff --git a/man/de/man5/suauth.5 b/man/de/man5/suauth.5
new file mode 100644
index 0000000..073f942
--- /dev/null
+++ b/man/de/man5/suauth.5
@@ -0,0 +1,146 @@
+'\" t
+.\" Title: suauth
+.\" Author: Marek Micha\(/lkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Dateiformate und konvertierung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "SUAUTH" "5" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Dateiformate und konvertierung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+suauth \- ausf\(:uhrliche Kontrolldatei f\(:ur su
+.SH "\(:UBERSICHT"
+.HP \w'\fB/etc/suauth\fR\ 'u
+\fB/etc/suauth\fR
+.SH "BESCHREIBUNG"
+.PP
+The file
+/etc/suauth
+is referenced whenever the su command is called\&. It can change the behaviour of the su command, based upon:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ 1) the user su is targeting
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+2) dem Benutzer, der su ausf\(:uhrt (oder einer Gruppe, deren Mitglied er ist)
+.PP
+Die Datei ist folgenderma\(ssen aufgebaut, wobei Zeilen, die mit einem # beginnen, als Kommentare behandelt und daher ignoriert werden:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ to\-id:from\-id:ACTION
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Where to\-id is either the word
+\fIALL\fR, a list of usernames delimited by "," or the words
+\fIALL EXCEPT\fR
+followed by a list of usernames delimited by ","\&.
+.PP
+from\-id is formatted the same as to\-id except the extra word
+\fIGROUP\fR
+is recognized\&.
+\fIALL EXCEPT GROUP\fR
+is perfectly valid too\&. Following
+\fIGROUP\fR
+appears one or more group names, delimited by ","\&. It is not sufficient to have primary group id of the relevant group, an entry in
+\fB/etc/group\fR(5)
+is necessary\&.
+.PP
+Als Aktion k\(:onnen nur die folgenden Optionen angegeben werden\&.
+.PP
+\fIDENY\fR
+.RS 4
+Der Versuch, su auszuf\(:uhren, wird abgebrochen, ehe nach einem Passwort gefragt wird\&.
+.RE
+.PP
+\fINOPASS\fR
+.RS 4
+Der Versuch, su auszuf\(:uhren, hat automatisch Erfolg\&. Ein Passwort wird nicht abgefragt\&.
+.RE
+.PP
+\fIOWNPASS\fR
+.RS 4
+Damit der Befehl su Erfolg hat, muss der Benutzer sein eigenes Passwort eingeben\&. Darauf wird er hingewiesen\&.
+.RE
+.PP
+Beachten Sie, dass es sich um drei selbst\(:andige Felder handelt, die durch einen Doppelpunkt getrennt sind\&. Neben den Doppelpunkten darf sich kein Leerzeichen befinden\&. Beachten Sie zudem, dass die Datei von oben nach unten Zeile f\(:ur Zeile durchgegangen wird\&. Die erste Regel, die zutreffend ist, wird angewendet, ohne dass die Datei weiter ausgewertet wird\&. Damit kann ein Systemadministrator eine strenge Kontrolle aus\(:uben\&.
+.SH "BEISPIEL"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ # sample /etc/suauth file
+ #
+ # A couple of privileged usernames may
+ # su to root with their own password\&.
+ #
+ root:chris,birddog:OWNPASS
+ #
+ # Anyone else may not su to root unless in
+ # group wheel\&. This is how BSD does things\&.
+ #
+ root:ALL EXCEPT GROUP wheel:DENY
+ #
+ # Perhaps terry and birddog are accounts
+ # owned by the same person\&.
+ # Access can be arranged between them
+ # with no password\&.
+ #
+ terry:birddog:NOPASS
+ birddog:terry:NOPASS
+ #
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "DATEIEN"
+.PP
+/etc/suauth
+.RS 4
+.RE
+.SH "FEHLER"
+.PP
+Es gibt zahlreiche Fehlerquellen\&. Die Auswertung der Datei ist sehr empfindlich bei Syntaxfehlern, zus\(:atzlichen Leerzeichen (au\(sser am Anfang und Schluss einer Zeile) und dem besonderen Zeichen, das die verschiedenen Felder von einander trennt\&.
+.SH "DIAGNOSE"
+.PP
+An error parsing the file is reported using
+\fBsyslogd\fR(8)
+as level ERR on facility AUTH\&.
+.SH "SIEHE AUCH"
+.PP
+\fBsu\fR(1)\&.
diff --git a/man/de/man8/chgpasswd.8 b/man/de/man8/chgpasswd.8
new file mode 100644
index 0000000..6e56645
--- /dev/null
+++ b/man/de/man8/chgpasswd.8
@@ -0,0 +1,208 @@
+'\" t
+.\" Title: chgpasswd
+.\" Author: Thomas K\(/loczko <kloczek@pld.org.pl>
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Befehle zur Systemverwaltung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "CHGPASSWD" "8" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Befehle zur Systemverwaltung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+chgpasswd \- aktualisiert Gruppenpassw\(:orter im Batch\-Modus
+.SH "\(:UBERSICHT"
+.HP \w'\fBchgpasswd\fR\ 'u
+\fBchgpasswd\fR [\fIOptionen\fR]
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBchgpasswd\fR
+command reads a list of group name and password pairs from standard input and uses this information to update a set of existing groups\&. Each line is of the format:
+.PP
+\fIgroup_name\fR:\fIpassword\fR
+.PP
+By default the supplied password must be in clear\-text, and is encrypted by
+\fBchgpasswd\fR\&.
+.PP
+The default encryption algorithm can be defined for the system with the
+\fBENCRYPT_METHOD\fR
+variable of
+/etc/login\&.defs, and can be overwritten with the
+\fB\-e\fR,
+\fB\-m\fR, or
+\fB\-c\fR
+options\&.
+.PP
+Dieser Befehl ist f\(:ur den Einsatz in gro\(ssen Umgebungen vorgesehen, in der viele Konten gleichzeitig erstellt werden m\(:ussen\&.
+.SH "OPTIONEN"
+.PP
+The options which apply to the
+\fBchgpasswd\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+Definiert die Methode, mit der die Passw\(:orter verschl\(:usselt werden\&.
+.sp
+Die verf\(:ugbaren Methoden sind DES, MD5, NONE und SHA256 oder SHA512, soweit Ihre libc sie unterst\(:utzt\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-encrypted\fR
+.RS 4
+Passw\(:orter werden verschl\(:usselt angegeben\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+zeigt die Hilfe an und beendet das Programm
+.RE
+.PP
+\fB\-m\fR, \fB\-\-md5\fR
+.RS 4
+werwendet zur Verschl\(:usselung MD5 anstelle von DES, wenn die Passw\(:orter unverschl\(:usselt angegeben werden
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+Verwendet die angegebene Anzahl von Runden, um die Passw\(:orter zu verschl\(:usseln\&.
+.sp
+Ein Wert von 0 bedeutet, dass das System die Standardanzahl der Runden (5000) f\(:ur die Verschl\(:usselung verwenden wird\&.
+.sp
+Der Mindestwert ist 1000, der H\(:ochstwert 999\&.999\&.999\&.
+.sp
+Sie k\(:onnen diese Option nur mit den Verschl\(:usselungsmethoden SHA256 und SHA512 verwenden\&.
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "WARNUNGEN"
+.PP
+Achten Sie darauf, dass die Rechte und Umask korrekt vergeben sind, um zu verhindern, dass andere Benutzer unverschl\(:usselte Dateien lesen k\(:onnen\&.
+.PP
+Sie sollten darauf achten, dass Passw\(:orter und Verschl\(:usselungsmethode in Einklage mit der Passwortrichtlinie des Systems stehen\&.
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+Damit wird der standardm\(:a\(ssige Verschl\(:usselungsalgorithmus, mit dem Passw\(:orter verschl\(:usselt werden, bestimmt (soweit nicht in der Befehlszeile ein Algorithmus angegeben wird)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Der Standardwert ist 0, was zur Folge hat, dass die Anzahl der Mitglieder einer Gruppe nicht begrenzt ist\&.
+.sp
+Diese F\(:ahigkeit (der aufgeteilten Gruppe) erm\(:oglicht es, die Zeilenl\(:ange in der Gruppendatei zu begrenzen\&. Damit kann sichergestellt werden, dass die Zeilen f\(:ur NIS\-Gruppen nicht l\(:anger als 1024 Zeichen sind\&.
+.sp
+Falls Sie eine solche Begrenzung ben\(:otigen, k\(:onnen Sie 25 verwenden\&.
+.sp
+Hinweis: Aufgeteilte Gruppen werden m\(:oglicherweise nicht von allen Werkzeugen unterst\(:utzt, selbst nicht aus der Shadow\-Werkzeugsammlung\&. Sie sollten diese Variable nur setzen, falls Sie zwingend darauf angewiesen sind\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+Je mehr Runden Sie definieren, umso schwieriger ist es, das Passwort mit sturem Durchprobieren (brute force) zu knacken; umso mehr Rechenleistung wird jedoch auch f\(:ur die Anmeldung eines Benutzers ben\(:otigt\&.
+.sp
+Falls Sie nichts angeben, wird libc die Standardanzahl der Runden festlegen (5000)\&.
+.sp
+Die Werte m\(:ussen zwischen 1000\-999\&.999\&.999 liegen\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/group
+.RS 4
+Informationen zu den Gruppenkonten
+.RE
+.PP
+/etc/gshadow
+.RS 4
+sichere Informationen zu den Gruppenkonten
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguration der Shadow\-Passwort\-Werkzeugsammlung
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBgpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBlogin.defs\fR(5)\&.
diff --git a/man/de/man8/chpasswd.8 b/man/de/man8/chpasswd.8
new file mode 100644
index 0000000..d75c6d9
--- /dev/null
+++ b/man/de/man8/chpasswd.8
@@ -0,0 +1,212 @@
+'\" t
+.\" Title: chpasswd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Befehle zur Systemverwaltung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "CHPASSWD" "8" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Befehle zur Systemverwaltung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+chpasswd \- aktualisiert Passw\(:orter im Batch\-Modus
+.SH "\(:UBERSICHT"
+.HP \w'\fBchpasswd\fR\ 'u
+\fBchpasswd\fR [\fIOptionen\fR]
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBchpasswd\fR
+command reads a list of user name and password pairs from standard input and uses this information to update a group of existing users\&. Each line is of the format:
+.PP
+\fIuser_name\fR:\fIpassword\fR
+.PP
+By default the passwords must be supplied in clear\-text, and are encrypted by
+\fBchpasswd\fR\&. Also the password age will be updated, if present\&.
+.PP
+The default encryption algorithm can be defined for the system with the
+\fBENCRYPT_METHOD\fR
+or
+\fBMD5_CRYPT_ENAB\fR
+variables of
+/etc/login\&.defs, and can be overwritten with the
+\fB\-e\fR,
+\fB\-m\fR, or
+\fB\-c\fR
+options\&.
+.PP
+\fBchpasswd\fR
+first updates all the passwords in memory, and then commits all the changes to disk if no errors occurred for any user\&.
+.PP
+Dieser Befehl ist f\(:ur den Einsatz in gro\(ssen Umgebungen vorgesehen, in der viele Konten gleichzeitig erstellt werden m\(:ussen\&.
+.SH "OPTIONEN"
+.PP
+The options which apply to the
+\fBchpasswd\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR\ \&\fIMETHOD\fR
+.RS 4
+Definiert die Methode, mit der die Passw\(:orter verschl\(:usselt werden\&.
+.sp
+Die verf\(:ugbaren Methoden sind DES, MD5, NONE und SHA256 oder SHA512, soweit Ihre libc sie unterst\(:utzt\&.
+.sp
+By default (if none of the
+\fB\-c\fR,
+\fB\-m\fR, or
+\fB\-e\fR
+options are specified), the encryption method is defined by the
+\fBENCRYPT_METHOD\fR
+or
+\fBMD5_CRYPT_ENAB\fR
+variables of
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-encrypted\fR
+.RS 4
+Passw\(:orter werden verschl\(:usselt angegeben\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+zeigt die Hilfe an und beendet das Programm
+.RE
+.PP
+\fB\-m\fR, \fB\-\-md5\fR
+.RS 4
+werwendet zur Verschl\(:usselung MD5 anstelle von DES, wenn die Passw\(:orter unverschl\(:usselt angegeben werden
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR\ \&\fIROUNDS\fR
+.RS 4
+Verwendet die angegebene Anzahl von Runden, um die Passw\(:orter zu verschl\(:usseln\&.
+.sp
+Ein Wert von 0 bedeutet, dass das System die Standardanzahl der Runden (5000) f\(:ur die Verschl\(:usselung verwenden wird\&.
+.sp
+Der Mindestwert ist 1000, der H\(:ochstwert 999\&.999\&.999\&.
+.sp
+Sie k\(:onnen diese Option nur mit den Verschl\(:usselungsmethoden SHA256 und SHA512 verwenden\&.
+.sp
+By default, the number of rounds is defined by the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+and
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+variables in
+/etc/login\&.defs\&.
+.RE
+.SH "WARNUNGEN"
+.PP
+Achten Sie darauf, dass die Rechte und Umask korrekt vergeben sind, um zu verhindern, dass andere Benutzer unverschl\(:usselte Dateien lesen k\(:onnen\&.
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+Damit wird der standardm\(:a\(ssige Verschl\(:usselungsalgorithmus, mit dem Passw\(:orter verschl\(:usselt werden, bestimmt (soweit nicht in der Befehlszeile ein Algorithmus angegeben wird)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+Je mehr Runden Sie definieren, umso schwieriger ist es, das Passwort mit sturem Durchprobieren (brute force) zu knacken; umso mehr Rechenleistung wird jedoch auch f\(:ur die Anmeldung eines Benutzers ben\(:otigt\&.
+.sp
+Falls Sie nichts angeben, wird libc die Standardanzahl der Runden festlegen (5000)\&.
+.sp
+Die Werte m\(:ussen zwischen 1000\-999\&.999\&.999 liegen\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/shadow
+.RS 4
+verschl\(:usselte Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguration der Shadow\-Passwort\-Werkzeugsammlung
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBpasswd\fR(1),
+\fBnewusers\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8)\&.
diff --git a/man/de/man8/faillog.8 b/man/de/man8/faillog.8
new file mode 100644
index 0000000..af253aa
--- /dev/null
+++ b/man/de/man8/faillog.8
@@ -0,0 +1,165 @@
+'\" t
+.\" Title: faillog
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Befehle zur Systemverwaltung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "FAILLOG" "8" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Befehle zur Systemverwaltung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+faillog \- zeigt Aufzeichnungen der fehlgeschlagenen Anmeldungen an oder richtet Beschr\(:ankungen f\(:ur fehlgeschlagene Anmeldungen ein
+.SH "\(:UBERSICHT"
+.HP \w'\fBfaillog\fR\ 'u
+\fBfaillog\fR [\fIOptionen\fR]
+.SH "BESCHREIBUNG"
+.PP
+\fBfaillog\fR
+displays the contents of the failure log database (/var/log/faillog)\&. It can also set the failure counters and limits\&. When
+\fBfaillog\fR
+is run without arguments, it only displays the faillog records of the users who had a login failure\&.
+.SH "OPTIONEN"
+.PP
+The options which apply to the
+\fBfaillog\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+Display (or act on) faillog records for all users having an entry in the
+faillog
+database\&.
+.sp
+The range of users can be restricted with the
+\fB\-u\fR
+option\&.
+.sp
+Im Anzeigemodus ist dies auf vorhandene Benutzer beschr\(:ankt, erzwingt aber die Anzeige der Faillog\-Eintr\(:age, auch wenn diese leer sind\&.
+.sp
+With the
+\fB\-l\fR,
+\fB\-m\fR,
+\fB\-r\fR,
+\fB\-t\fR
+options, the users\*(Aq records are changed, even if the user does not exist on the system\&. This is useful to reset records of users that have been deleted or to set a policy in advance for a range of users\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+zeigt die Hilfe an und beendet das Programm
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\-secs\fR\ \&\fISEC\fR
+.RS 4
+Lock account for
+\fISEC\fR
+seconds after failed login\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-maximum\fR\ \&\fIMAX\fR
+.RS 4
+Set the maximum number of login failures after the account is disabled to
+\fIMAX\fR\&.
+.sp
+Selecting a
+\fIMAX\fR
+value of 0 has the effect of not placing a limit on the number of failed logins\&.
+.sp
+The maximum failure count should always be 0 for
+\fIroot\fR
+to prevent a denial of services attack against the system\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-reset\fR
+.RS 4
+setzt die Z\(:ahlerst\(:ande der fehlgeschlagenen Anmeldeversuche zur\(:uck
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR\ \&\fIDAYS\fR
+.RS 4
+Display faillog records more recent than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR\ \&\fILOGIN\fR|\fIRANGE\fR
+.RS 4
+Display faillog record or maintains failure counters and limits (if used with
+\fB\-l\fR,
+\fB\-m\fR
+or
+\fB\-r\fR
+options) only for the specified user(s)\&.
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+When none of the
+\fB\-l\fR,
+\fB\-m\fR, or
+\fB\-r\fR
+options are used,
+\fBfaillog\fR
+displays the faillog record of the specified user(s)\&.
+.SH "WARNUNGEN"
+.PP
+\fBfaillog\fR
+only prints out users with no successful login since the last failure\&. To print out a user who has had a successful login since their last failure, you must explicitly request the user with the
+\fB\-u\fR
+flag, or print out all users with the
+\fB\-a\fR
+flag\&.
+.SH "DATEIEN"
+.PP
+/var/log/faillog
+.RS 4
+Datei mit fehlgeschlagenen Anmeldungen
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBlogin\fR(1),
+\fBfaillog\fR(5)\&.
diff --git a/man/de/man8/groupadd.8 b/man/de/man8/groupadd.8
new file mode 100644
index 0000000..6743afa
--- /dev/null
+++ b/man/de/man8/groupadd.8
@@ -0,0 +1,257 @@
+'\" t
+.\" Title: groupadd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Befehle zur Systemverwaltung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "GROUPADD" "8" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Befehle zur Systemverwaltung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+groupadd \- erstellt eine neue Gruppe
+.SH "\(:UBERSICHT"
+.HP \w'\fBgroupadd\fR\ 'u
+\fBgroupadd\fR [\fIOptionen\fR] \fIGruppe\fR
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBgroupadd\fR
+command creates a new group account using the values specified on the command line plus the default values from the system\&. The new group will be entered into the system files as needed\&.
+.SH "OPTIONEN"
+.PP
+The options which apply to the
+\fBgroupadd\fR
+command are:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option causes the command to simply exit with success status if the specified group already exists\&. When used with
+\fB\-g\fR, and the specified GID already exists, another (unique) GID is chosen (i\&.e\&.
+\fB\-g\fR
+is turned off)\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGID\fR
+.RS 4
+The numerical value of the group\*(Aqs ID\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&. The default is to use the smallest ID value greater than or equal to
+\fBGID_MIN\fR
+and greater than every other group\&.
+.sp
+See also the
+\fB\-r\fR
+option and the
+\fBGID_MAX\fR
+description\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+zeigt die Hilfe an und beendet das Programm
+.RE
+.PP
+\fB\-K\fR, \fB\-\-key\fR\ \&\fIKEY\fR=\fIVALUE\fR
+.RS 4
+Overrides
+/etc/login\&.defs
+defaults (GID_MIN, GID_MAX and others)\&. Multiple
+\fB\-K\fR
+options can be specified\&.
+.sp
+Example:
+\fB\-K\fR\ \&\fIGID_MIN\fR=\fI100\fR\ \&
+\fB\-K\fR\ \&\fIGID_MAX\fR=\fI499\fR
+.sp
+Note:
+\fB\-K\fR\ \&\fIGID_MIN\fR=\fI10\fR,\fIGID_MAX\fR=\fI499\fR
+doesn\*(Aqt work yet\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+Diese Option erlaubt es, eine Gruppe mit einer nicht eindeutigen GID zu erstellen\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&. The default is to disable the password\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+Sie sollten sicherstellen, dass das Passwort den Passwortrichtlinien des Systems entspricht\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+erstellt eine neue Systemgruppe
+.sp
+The numeric identifiers of new system groups are chosen in the
+\fBSYS_GID_MIN\fR\-\fBSYS_GID_MAX\fR
+range, defined in
+login\&.defs, instead of
+\fBGID_MIN\fR\-\fBGID_MAX\fR\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBGID_MIN\fR
+(resp\&.
+\fBGID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Der Standardwert ist 0, was zur Folge hat, dass die Anzahl der Mitglieder einer Gruppe nicht begrenzt ist\&.
+.sp
+Diese F\(:ahigkeit (der aufgeteilten Gruppe) erm\(:oglicht es, die Zeilenl\(:ange in der Gruppendatei zu begrenzen\&. Damit kann sichergestellt werden, dass die Zeilen f\(:ur NIS\-Gruppen nicht l\(:anger als 1024 Zeichen sind\&.
+.sp
+Falls Sie eine solche Begrenzung ben\(:otigen, k\(:onnen Sie 25 verwenden\&.
+.sp
+Hinweis: Aufgeteilte Gruppen werden m\(:oglicherweise nicht von allen Werkzeugen unterst\(:utzt, selbst nicht aus der Shadow\-Werkzeugsammlung\&. Sie sollten diese Variable nur setzen, falls Sie zwingend darauf angewiesen sind\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_GID_MIN\fR
+(resp\&.
+\fBSYS_GID_MAX\fR) is 101 (resp\&.
+\fBGID_MIN\fR\-1)\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/group
+.RS 4
+Informationen zu den Gruppenkonten
+.RE
+.PP
+/etc/gshadow
+.RS 4
+sichere Informationen zu den Gruppenkonten
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguration der Shadow\-Passwort\-Werkzeugsammlung
+.RE
+.SH "WARNUNGEN"
+.PP
+Gruppennamen m\(:ussen mit einem Kleinbuchstaben oder einem Unterstrich beginnen\&. Nachfolgend d\(:urfen sie Kleinbuchstaben, Zahlen, Unterstriche und Gedankenstriche enthalten\&. Das letzte Zeichen darf auch ein Dollarzeichen sein\&. Als regul\(:arer Ausdruck: [a\-z_][a\-z0\-9_\-]*[$]?
+.PP
+Groupnames may only be up to 16 characters long\&.
+.PP
+Sie k\(:onnen einen Benutzer nicht einer NIS\- oder LDAP\-Gruppe hinzuf\(:ugen\&. Dies m\(:ussen Sie auf dem entsprechenden Server durchf\(:uhren\&.
+.PP
+If the groupname already exists in an external group database such as NIS or LDAP,
+\fBgroupadd\fR
+will deny the group creation request\&.
+.SH "R\(:UCKGABEWERTE"
+.PP
+The
+\fBgroupadd\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+GID not unique (when
+\fB\-o\fR
+not used)
+.RE
+.PP
+\fI9\fR
+.RS 4
+group name not unique
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/de/man8/groupdel.8 b/man/de/man8/groupdel.8
new file mode 100644
index 0000000..5b41412
--- /dev/null
+++ b/man/de/man8/groupdel.8
@@ -0,0 +1,145 @@
+'\" t
+.\" Title: groupdel
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Befehle zur Systemverwaltung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "GROUPDEL" "8" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Befehle zur Systemverwaltung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+groupdel \- l\(:oscht eine Gruppe
+.SH "\(:UBERSICHT"
+.HP \w'\fBgroupdel\fR\ 'u
+\fBgroupdel\fR [\fIOptionen\fR] \fIGRUPPE\fR
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBgroupdel\fR
+command modifies the system account files, deleting all entries that refer to
+\fIGROUP\fR\&. The named group must exist\&.
+.SH "OPTIONEN"
+.PP
+The options which apply to the
+\fBgroupdel\fR
+command are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+zeigt die Hilfe an und beendet das Programm
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.SH "WARNUNGEN"
+.PP
+Sie k\(:onnen nicht die Hauptgruppe eines Benutzers entfernen\&. Dazu m\(:ussten Sie zun\(:achst den betreffenden Benutzer l\(:oschen\&.
+.PP
+Sie sollten von Hand alle Systemdateien \(:uberpr\(:ufen, um sicherzustellen, dass keine Dateien, die der gel\(:oschten Gruppe angeh\(:oren, vorhanden sind\&.
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Der Standardwert ist 0, was zur Folge hat, dass die Anzahl der Mitglieder einer Gruppe nicht begrenzt ist\&.
+.sp
+Diese F\(:ahigkeit (der aufgeteilten Gruppe) erm\(:oglicht es, die Zeilenl\(:ange in der Gruppendatei zu begrenzen\&. Damit kann sichergestellt werden, dass die Zeilen f\(:ur NIS\-Gruppen nicht l\(:anger als 1024 Zeichen sind\&.
+.sp
+Falls Sie eine solche Begrenzung ben\(:otigen, k\(:onnen Sie 25 verwenden\&.
+.sp
+Hinweis: Aufgeteilte Gruppen werden m\(:oglicherweise nicht von allen Werkzeugen unterst\(:utzt, selbst nicht aus der Shadow\-Werkzeugsammlung\&. Sie sollten diese Variable nur setzen, falls Sie zwingend darauf angewiesen sind\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/group
+.RS 4
+Informationen zu den Gruppenkonten
+.RE
+.PP
+/etc/gshadow
+.RS 4
+sichere Informationen zu den Gruppenkonten
+.RE
+.SH "R\(:UCKGABEWERTE"
+.PP
+The
+\fBgroupdel\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI8\fR
+.RS 4
+can\*(Aqt remove user\*(Aqs primary group
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/de/man8/groupmems.8 b/man/de/man8/groupmems.8
new file mode 100644
index 0000000..13a3d96
--- /dev/null
+++ b/man/de/man8/groupmems.8
@@ -0,0 +1,180 @@
+'\" t
+.\" Title: groupmems
+.\" Author: George Kraft, IV
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Befehle zur Systemverwaltung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "GROUPMEMS" "8" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Befehle zur Systemverwaltung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+groupmems \- verwaltet die Mitglieder der Hauptgruppe eines Benutzers
+.SH "\(:UBERSICHT"
+.HP \w'\fBgroupmems\fR\ 'u
+\fBgroupmems\fR \-a\ \fIuser_name\fR | \-d\ \fIuser_name\fR | [\-g\ \fIgroup_name\fR] | \-l | \-p
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBgroupmems\fR
+command 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)\&.
+.PP
+Only the superuser, as administrator, can use
+\fBgroupmems\fR
+to alter the memberships of other groups\&.
+.SH "OPTIONEN"
+.PP
+The options which apply to the
+\fBgroupmems\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-add\fR\ \&\fIuser_name\fR
+.RS 4
+Add a user to the group membership list\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR\ \&\fIuser_name\fR
+.RS 4
+L\(:oscht einen Benutzer aus der Mitgliederliste der Gruppe\&.
+.sp
+If the
+/etc/gshadow
+file exist, the user will be removed from the list of members and administrators of the group\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-group\fR\ \&\fIgroup_name\fR
+.RS 4
+Root kann eine Gruppen bestimmen, deren Mitgliederliste er bearbeiten will\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+zeigt die Hilfe an und beendet das Programm
+.RE
+.PP
+\fB\-l\fR, \fB\-\-list\fR
+.RS 4
+gibt die Mitgliederliste aus
+.RE
+.PP
+\fB\-p\fR, \fB\-\-purge\fR
+.RS 4
+l\(:oscht alle Benutzer aus der Mitgliederliste der Gruppe
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.SH "EINRICHTUNG"
+.PP
+The
+\fBgroupmems\fR
+executable should be in mode
+2710
+as user
+\fIroot\fR
+and in group
+\fIgroups\fR\&. The system administrator can add users to group
+\fIgroups\fR
+to allow or disallow them using the
+\fBgroupmems\fR
+utility to manage their own group membership list\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ $ groupadd \-r groups
+ $ chmod 2710 groupmems
+ $ chown root\&.groups groupmems
+ $ groupmems \-g groups \-a gk4
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Der Standardwert ist 0, was zur Folge hat, dass die Anzahl der Mitglieder einer Gruppe nicht begrenzt ist\&.
+.sp
+Diese F\(:ahigkeit (der aufgeteilten Gruppe) erm\(:oglicht es, die Zeilenl\(:ange in der Gruppendatei zu begrenzen\&. Damit kann sichergestellt werden, dass die Zeilen f\(:ur NIS\-Gruppen nicht l\(:anger als 1024 Zeichen sind\&.
+.sp
+Falls Sie eine solche Begrenzung ben\(:otigen, k\(:onnen Sie 25 verwenden\&.
+.sp
+Hinweis: Aufgeteilte Gruppen werden m\(:oglicherweise nicht von allen Werkzeugen unterst\(:utzt, selbst nicht aus der Shadow\-Werkzeugsammlung\&. Sie sollten diese Variable nur setzen, falls Sie zwingend darauf angewiesen sind\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/group
+.RS 4
+Informationen zu den Gruppenkonten
+.RE
+.PP
+/etc/gshadow
+.RS 4
+verschl\(:usselte Informationen zu den Gruppenkonten
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/de/man8/groupmod.8 b/man/de/man8/groupmod.8
new file mode 100644
index 0000000..515d02a
--- /dev/null
+++ b/man/de/man8/groupmod.8
@@ -0,0 +1,233 @@
+'\" t
+.\" Title: groupmod
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Befehle zur Systemverwaltung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "GROUPMOD" "8" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Befehle zur Systemverwaltung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+groupmod \- \(:andert die Eigenschaften einer Gruppe auf dem System
+.SH "\(:UBERSICHT"
+.HP \w'\fBgroupmod\fR\ 'u
+\fBgroupmod\fR [\fIOptionen\fR] \fIGRUPPE\fR
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBgroupmod\fR
+command modifies the definition of the specified
+\fIGROUP\fR
+by modifying the appropriate entry in the group database\&.
+.SH "OPTIONEN"
+.PP
+The options which apply to the
+\fBgroupmod\fR
+command are:
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGID\fR
+.RS 4
+The group ID of the given
+\fIGROUP\fR
+will be changed to
+\fIGID\fR\&.
+.sp
+The value of
+\fIGID\fR
+must be a non\-negative decimal integer\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&.
+.sp
+Benutzer, welche die Gruppe als Hauptgruppe verwenden, werden aktualisiert, um die Gruppe als Hauptgruppe zu behalten\&.
+.sp
+Any files that have the old group ID and must continue to belong to
+\fIGROUP\fR, must have their group ID changed manually\&.
+.sp
+No checks will be performed with regard to the
+\fBGID_MIN\fR,
+\fBGID_MAX\fR,
+\fBSYS_GID_MIN\fR, or
+\fBSYS_GID_MAX\fR
+from
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+zeigt die Hilfe an und beendet das Programm
+.RE
+.PP
+\fB\-n\fR, \fB\-\-new\-name\fR\ \&\fINEW_GROUP\fR
+.RS 4
+The name of the group will be changed from
+\fIGROUP\fR
+to
+\fINEW_GROUP\fR
+name\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+When used with the
+\fB\-g\fR
+option, allow to change the group
+\fIGID\fR
+to a non\-unique value\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+Sie sollten sicherstellen, dass das Passwort den Passwortrichtlinien des Systems entspricht\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Der Standardwert ist 0, was zur Folge hat, dass die Anzahl der Mitglieder einer Gruppe nicht begrenzt ist\&.
+.sp
+Diese F\(:ahigkeit (der aufgeteilten Gruppe) erm\(:oglicht es, die Zeilenl\(:ange in der Gruppendatei zu begrenzen\&. Damit kann sichergestellt werden, dass die Zeilen f\(:ur NIS\-Gruppen nicht l\(:anger als 1024 Zeichen sind\&.
+.sp
+Falls Sie eine solche Begrenzung ben\(:otigen, k\(:onnen Sie 25 verwenden\&.
+.sp
+Hinweis: Aufgeteilte Gruppen werden m\(:oglicherweise nicht von allen Werkzeugen unterst\(:utzt, selbst nicht aus der Shadow\-Werkzeugsammlung\&. Sie sollten diese Variable nur setzen, falls Sie zwingend darauf angewiesen sind\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/group
+.RS 4
+Informationen zu den Gruppenkonten
+.RE
+.PP
+/etc/gshadow
+.RS 4
+sichere Informationen zu den Gruppenkonten
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguration der Shadow\-Passwort\-Werkzeugsammlung
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten
+.RE
+.SH "R\(:UCKGABEWERTE"
+.PP
+The
+\fBgroupmod\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+E_SUCCESS: success
+.RE
+.PP
+\fI2\fR
+.RS 4
+E_USAGE: invalid command syntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+E_BAD_ARG: invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+E_GID_IN_USE: specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI6\fR
+.RS 4
+E_NOTFOUND: specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI9\fR
+.RS 4
+E_NAME_IN_USE: group name already in use
+.RE
+.PP
+\fI10\fR
+.RS 4
+E_GRP_UPDATE: can\*(Aqt update group file
+.RE
+.PP
+\fI11\fR
+.RS 4
+E_CLEANUP_SERVICE: can\*(Aqt setup cleanup service
+.RE
+.PP
+\fI12\fR
+.RS 4
+E_PAM_USERNAME: can\*(Aqt determine your username for use with pam
+.RE
+.PP
+\fI13\fR
+.RS 4
+E_PAM_ERROR: pam returned an error, see syslog facility id groupmod for the PAM error message
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/de/man8/grpck.8 b/man/de/man8/grpck.8
new file mode 100644
index 0000000..295d84f
--- /dev/null
+++ b/man/de/man8/grpck.8
@@ -0,0 +1,247 @@
+'\" t
+.\" Title: grpck
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Befehle zur Systemverwaltung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "GRPCK" "8" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Befehle zur Systemverwaltung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+grpck \- \(:uberpr\(:uft die Stimmigkeit der Gruppendateien
+.SH "\(:UBERSICHT"
+.HP \w'\fBgrpck\fR\ 'u
+\fBgrpck\fR [Optionen] [\fIGruppe\fR\ [\ \fIshadow\fR\ ]]
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBgrpck\fR
+command verifies the integrity of the groups information\&. It checks that all entries in
+/etc/group
+and /etc/gshadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+Es wird \(:uberpr\(:uft, ob jeder Eintrag folgende Eigenschaften aufweist:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+die richtige Anzahl von Feldern
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+einen eindeutigen und g\(:ultigen Gruppennamen
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid group identifier
+(/etc/group only)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid list of members
+and administrators
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a corresponding entry in the
+/etc/gshadow
+file (respectively
+/etc/group
+for the
+gshadow
+checks)
+.RE
+.PP
+The checks for correct number of fields and unique group name are fatal\&. If an entry has the wrong number of fields, the user will be prompted to delete the entire line\&. If the user does not answer affirmatively, all further checks are bypassed\&. An entry with a duplicated group name is prompted for deletion, but the remaining checks will still be made\&. All other errors are warnings and the user is encouraged to run the
+\fBgroupmod\fR
+command to correct the error\&.
+.PP
+The commands which operate on the
+/etc/group
+and /etc/gshadow files
+are not able to alter corrupted or duplicated entries\&.
+\fBgrpck\fR
+should be used in those circumstances to remove the offending entries\&.
+.SH "OPTIONEN"
+.PP
+The
+\fB\-r\fR
+and
+\fB\-s\fR
+options cannot be combined\&.
+.PP
+The options which apply to the
+\fBgrpck\fR
+command are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+zeigt die Hilfe an und beendet das Programm
+.RE
+.PP
+\fB\-r\fR, \fB\-\-read\-only\fR
+.RS 4
+Execute the
+\fBgrpck\fR
+command in read\-only mode\&. This causes all questions regarding changes to be answered
+\fIno\fR
+without user intervention\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sort\fR
+.RS 4
+Sort entries in
+/etc/group
+and /etc/gshadow
+by GID\&.
+.RE
+.PP
+By default,
+\fBgrpck\fR
+operates on
+/etc/group
+and /etc/gshadow\&. The user may select alternate files with the
+\fIgroup\fR
+and \fIshadow\fR parameters\&.
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Der Standardwert ist 0, was zur Folge hat, dass die Anzahl der Mitglieder einer Gruppe nicht begrenzt ist\&.
+.sp
+Diese F\(:ahigkeit (der aufgeteilten Gruppe) erm\(:oglicht es, die Zeilenl\(:ange in der Gruppendatei zu begrenzen\&. Damit kann sichergestellt werden, dass die Zeilen f\(:ur NIS\-Gruppen nicht l\(:anger als 1024 Zeichen sind\&.
+.sp
+Falls Sie eine solche Begrenzung ben\(:otigen, k\(:onnen Sie 25 verwenden\&.
+.sp
+Hinweis: Aufgeteilte Gruppen werden m\(:oglicherweise nicht von allen Werkzeugen unterst\(:utzt, selbst nicht aus der Shadow\-Werkzeugsammlung\&. Sie sollten diese Variable nur setzen, falls Sie zwingend darauf angewiesen sind\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/group
+.RS 4
+Informationen zu den Gruppenkonten
+.RE
+.PP
+/etc/gshadow
+.RS 4
+sichere Informationen zu den Gruppenkonten
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten
+.RE
+.SH "R\(:UCKGABEWERTE"
+.PP
+The
+\fBgrpck\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI2\fR
+.RS 4
+one or more bad group entries
+.RE
+.PP
+\fI3\fR
+.RS 4
+can\*(Aqt open group files
+.RE
+.PP
+\fI4\fR
+.RS 4
+can\*(Aqt lock group files
+.RE
+.PP
+\fI5\fR
+.RS 4
+can\*(Aqt update group files
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBgroup\fR(5),
+\fBgroupmod\fR(8),
+\fBgshadow\fR(5),
+\fBpasswd\fR(5),
+\fBpwck\fR(8),
+\fBshadow\fR(5)\&.
diff --git a/man/de/man8/grpconv.8 b/man/de/man8/grpconv.8
new file mode 100644
index 0000000..6eed9e8
--- /dev/null
+++ b/man/de/man8/grpconv.8
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/de/man8/grpunconv.8 b/man/de/man8/grpunconv.8
new file mode 100644
index 0000000..6eed9e8
--- /dev/null
+++ b/man/de/man8/grpunconv.8
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/de/man8/lastlog.8 b/man/de/man8/lastlog.8
new file mode 100644
index 0000000..ce3821f
--- /dev/null
+++ b/man/de/man8/lastlog.8
@@ -0,0 +1,137 @@
+'\" t
+.\" Title: lastlog
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Befehle zur Systemverwaltung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "LASTLOG" "8" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Befehle zur Systemverwaltung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+lastlog \- berichtet die letzte Anmeldung f\(:ur alle oder einen bestimmten Benutzer
+.SH "\(:UBERSICHT"
+.HP \w'\fBlastlog\fR\ 'u
+\fBlastlog\fR [\fIOptionen\fR]
+.SH "BESCHREIBUNG"
+.PP
+\fBlastlog\fR
+formats and prints the contents of the last login log
+/var/log/lastlog
+file\&. The
+\fIlogin\-name\fR,
+\fIport\fR, and
+\fIlast login time\fR
+will be printed\&. The default (no flags) causes lastlog entries to be printed, sorted by their order in
+/etc/passwd\&.
+.SH "OPTIONEN"
+.PP
+The options which apply to the
+\fBlastlog\fR
+command are:
+.PP
+\fB\-b\fR, \fB\-\-before\fR\ \&\fIDAYS\fR
+.RS 4
+Print only lastlog records older than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-C\fR, \fB\-\-clear\fR
+.RS 4
+Clear lastlog record of a user\&. This option can be used only together with
+\fB\-u\fR
+(\fB\-\-user\fR))\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+zeigt die Hilfe an und beendet das Programm
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-S\fR, \fB\-\-set\fR
+.RS 4
+Set lastlog record of a user to the current time\&. This option can be used only together with
+\fB\-u\fR
+(\fB\-\-user\fR))\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR\ \&\fIDAYS\fR
+.RS 4
+Print the lastlog records more recent than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR\ \&\fILOGIN\fR|\fIRANGE\fR
+.RS 4
+gibt nur die Lastlog\-Eintr\(:age f\(:ur die angegebenen Benutzer aus
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+If the user has never logged in the message
+\fI** Never logged in**\fR
+will be displayed instead of the port and time\&.
+.PP
+Es werden nur Eintr\(:age f\(:ur auf dem System vorhandene Benutzer angezeigt, selbst wenn Eintr\(:age \(:uber gel\(:oschte Benutzer noch vorhanden sind\&.
+.SH "ANMERKUNGEN"
+.PP
+The
+lastlog
+file is a database which contains info on the last login of each user\&. You should not rotate it\&. It is a sparse file, so its size on the disk is usually much smaller than the one shown by "\fBls \-l\fR" (which can indicate a really big file if you have in
+passwd
+users with a high UID)\&. You can display its real size with "\fBls \-s\fR"\&.
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.SH "DATEIEN"
+.PP
+/var/log/lastlog
+.RS 4
+Datenbank mit Zeiten der letzten Anmeldung der Benutzer
+.RE
+.SH "WARNUNGEN"
+.PP
+Gro\(sse L\(:ucken in den UID\-Zahlen haben zur Folge, dass das Lastlog\-Programm l\(:angere Zeit ohne Bildschirmausgabe l\(:auft\&. Wenn sich z\&.B\&. in der Datenbank von Lastlog kein Eintrag f\(:ur Benutzer mit der UID zwischen 170 und 800 befindet, wird es scheinen, als ob lastlog stehen geblieben ist, w\(:ahrend es die Eintr\(:age mit der UID 171 bis 799 verarbeitet\&.
diff --git a/man/de/man8/logoutd.8 b/man/de/man8/logoutd.8
new file mode 100644
index 0000000..ea1d3da
--- /dev/null
+++ b/man/de/man8/logoutd.8
@@ -0,0 +1,57 @@
+'\" t
+.\" Title: logoutd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Befehle zur Systemverwaltung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "LOGOUTD" "8" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Befehle zur Systemverwaltung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+logoutd \- richtet Beschr\(:ankung von Anmeldezeiten ein
+.SH "\(:UBERSICHT"
+.HP \w'\fBlogoutd\fR\ 'u
+\fBlogoutd\fR
+.SH "BESCHREIBUNG"
+.PP
+\fBlogoutd\fR
+enforces the login time and port restrictions specified in
+/etc/porttime\&.
+\fBlogoutd\fR
+should be started from
+/etc/rc\&. The
+/var/run/utmp
+file is scanned periodically and each user name is checked to see if the named user is permitted on the named port at the current time\&. Any login session which is violating the restrictions in
+/etc/porttime
+is terminated\&.
+.SH "DATEIEN"
+.PP
+/etc/porttime
+.RS 4
+Datei, die den Port\-Zugriff enth\(:alt\&.
+.RE
+.PP
+/var/run/utmp
+.RS 4
+Liste der aktuellen angemeldeten Sitzungen
+.RE
diff --git a/man/de/man8/newusers.8 b/man/de/man8/newusers.8
new file mode 100644
index 0000000..c81017c
--- /dev/null
+++ b/man/de/man8/newusers.8
@@ -0,0 +1,449 @@
+'\" t
+.\" Title: newusers
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Befehle zur Systemverwaltung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "NEWUSERS" "8" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Befehle zur Systemverwaltung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+newusers \- erstellt oder aktualisiert mehrere neue Benutzer am St\(:uck
+.SH "\(:UBERSICHT"
+.HP \w'\fBnewusers\fR\ 'u
+\fBnewusers\fR [\fIOptionen\fR] [\fIDatei\fR]
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBnewusers\fR
+command reads a
+\fIfile\fR
+(or the standard input by default) and uses this information to update a set of existing users or to create new users\&. Each line is in the same format as the standard password file (see
+\fBpasswd\fR(5)) with the exceptions explained below:
+.PP
+pw_Name:pw_Passwort:pw_uid:pw_gid:pw_gecos:pw_Verz:pw_shell
+.PP
+\fIpw_Name\fR
+.RS 4
+Dies ist der Name des Benutzers\&.
+.sp
+It can be the name of a new user or the name of an existing user (or a user created before by
+\fBnewusers\fR)\&. In case of an existing user, the user\*(Aqs information will be changed, otherwise a new user will be created\&.
+.RE
+.PP
+\fIpw_Passwort\fR
+.RS 4
+Dieses Feld wird verschl\(:usselt und als neuer Wert f\(:ur das verschl\(:usselte Passwort verwendet\&.
+.RE
+.PP
+\fIpw_uid\fR
+.RS 4
+Mit diesem Feld wird die UID des Benutzers bestimmt\&.
+.sp
+If the field is empty, a new (unused) UID will be defined automatically by
+\fBnewusers\fR\&.
+.sp
+Wenn dieses Feld eine Zahl enth\(:alt, wird sie als UID verwendet\&.
+.sp
+If this field contains the name of an existing user (or the name of a user created before by
+\fBnewusers\fR), the UID of the specified user will be used\&.
+.sp
+Falls die UID eines bestehenden Benutzers ver\(:andert wird, muss der Eigent\(:umer der Dateien des Benutzers per Hand angepasst werden\&.
+.RE
+.PP
+\fIpw_gid\fR
+.RS 4
+Mit diesem Feld wird die ID der Hauptgruppe des Benutzers definiert\&.
+.sp
+If this field contains the name of an existing group (or a group created before by
+\fBnewusers\fR), the GID of this group will be used as the primary group ID for the user\&.
+.sp
+Wenn dieses Feld eine Zahl enth\(:alt, wird sie als ID der Hauptgruppe des Benutzers verwendet\&. Falls eine Gruppe mit dieser GID nicht existiert, wird eine neue Gruppe mit dieser GID unter dem Namen des Benutzers erstellt\&.
+.sp
+If this field is empty, a new group will be created with the name of the user and a GID will be automatically defined by
+\fBnewusers\fR
+to be used as the primary group ID for the user and as the GID for the new group\&.
+.sp
+If this field contains the name of a group which does not exist (and was not created before by
+\fBnewusers\fR), a new group will be created with the specified name and a GID will be automatically defined by
+\fBnewusers\fR
+to be used as the primary group ID for the user and GID for the new group\&.
+.RE
+.PP
+\fIpw_gecos\fR
+.RS 4
+Dieses Feld wird in das GECOS\-Feld des Benutzers kopiert\&.
+.RE
+.PP
+\fIpw_Verz\fR
+.RS 4
+Mit diesem Feld wird das Home\-Verzeichnis des Benutzers definiert\&.
+.sp
+Wenn in diesem Feld ein Verzeichnis angegeben wird, das nicht vorhanden ist, wird es erstellt\&. Dieses geh\(:ort dem Benutzer, der gerade erstellt und aktualisiert wird, und dessen Hauptgruppe\&.
+.sp
+If the home directory of an existing user is changed,
+\fBnewusers\fR
+does not move or copy the content of the old directory to the new location\&. This should be done manually\&.
+.RE
+.PP
+\fIpw_shell\fR
+.RS 4
+Mit diesem Feld wird die Shell des Benutzers definiert\&. Diese Eingabe wird nicht \(:uberpr\(:uft\&.
+.RE
+.PP
+\fBnewusers\fR
+first tries to create or change all the specified users, and then write these changes to the user or group databases\&. If an error occurs (except in the final writes to the databases), no changes are committed to the databases\&.
+.PP
+Dieser Befehl ist f\(:ur den Einsatz in einer Umgebung mit zahlreichen Systemen vorgesehen, in der viele Konten gleichzeitig aktualisiert werden m\(:ussen\&.
+.SH "OPTIONEN"
+.PP
+The options which apply to the
+\fBnewusers\fR
+command are:
+.PP
+\fB\-\-badname\fR\ \&
+.RS 4
+Allow names that do not conform to standards\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+Definiert die Methode, mit der die Passw\(:orter verschl\(:usselt werden\&.
+.sp
+Die verf\(:ugbaren Methoden sind DES, MD5, NONE und SHA256 oder SHA512, soweit Ihre libc sie unterst\(:utzt\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+zeigt die Hilfe an und beendet das Programm
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+erstellt ein Systemkonto
+.sp
+System users will be created with no aging information in
+/etc/shadow, and their numeric identifiers are chosen in the
+\fBSYS_UID_MIN\fR\-\fBSYS_UID_MAX\fR
+range, defined in
+login\&.defs, instead of
+\fBUID_MIN\fR\-\fBUID_MAX\fR
+(and their
+\fBGID\fR
+counterparts for the creation of groups)\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+Verwendet die angegebene Anzahl von Runden, um die Passw\(:orter zu verschl\(:usseln\&.
+.sp
+Ein Wert von 0 bedeutet, dass das System die Standardanzahl der Runden (5000) f\(:ur die Verschl\(:usselung verwenden wird\&.
+.sp
+Der Mindestwert ist 1000, der H\(:ochstwert 999\&.999\&.999\&.
+.sp
+Sie k\(:onnen diese Option nur mit den Verschl\(:usselungsmethoden SHA256 und SHA512 verwenden\&.
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "WARNUNGEN"
+.PP
+Die Eingabedatei muss gesch\(:utzt werden, da sie unverschl\(:usselte Passw\(:orter enth\(:alt\&.
+.PP
+Sie sollten darauf achten, dass Passw\(:orter und Verschl\(:usselungsmethode in Einklage mit der Passwortrichtlinie des Systems stehen\&.
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+Damit wird der standardm\(:a\(ssige Verschl\(:usselungsalgorithmus, mit dem Passw\(:orter verschl\(:usselt werden, bestimmt (soweit nicht in der Befehlszeile ein Algorithmus angegeben wird)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBGID_MIN\fR
+(resp\&.
+\fBGID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBHOME_MODE\fR (number)
+.RS 4
+The mode for new home directories\&. If not specified, the
+\fBUMASK\fR
+is used to create the mode\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this to set the mode of the home directory they create\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Der Standardwert ist 0, was zur Folge hat, dass die Anzahl der Mitglieder einer Gruppe nicht begrenzt ist\&.
+.sp
+Diese F\(:ahigkeit (der aufgeteilten Gruppe) erm\(:oglicht es, die Zeilenl\(:ange in der Gruppendatei zu begrenzen\&. Damit kann sichergestellt werden, dass die Zeilen f\(:ur NIS\-Gruppen nicht l\(:anger als 1024 Zeichen sind\&.
+.sp
+Falls Sie eine solche Begrenzung ben\(:otigen, k\(:onnen Sie 25 verwenden\&.
+.sp
+Hinweis: Aufgeteilte Gruppen werden m\(:oglicherweise nicht von allen Werkzeugen unterst\(:utzt, selbst nicht aus der Shadow\-Werkzeugsammlung\&. Sie sollten diese Variable nur setzen, falls Sie zwingend darauf angewiesen sind\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+Die maximale Anzahl von Tagen, f\(:ur die ein Passwort verwendet werden darf\&. Wenn das Passwort \(:alter ist, wird ein Wechsel des Passworts erzwungen\&. Falls nicht angegeben, wird \-1 angenommen (was zur Folge hat, dass diese Beschr\(:ankung abgeschaltet ist)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+Die Mindestanzahl von Tagen, bevor ein Wechsel des Passworts zugelassen wird\&. Ein vorheriger Versuch, das Passwort zu \(:andern, wird abgelehnt\&. Falls nicht angegeben, wird \-1 angenommen (was zur Folge hat, dass diese Beschr\(:ankung abgeschaltet ist)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+Die Anzahl von Tagen, an denen der Benutzer vorgewarnt wird, bevor das Passwort verf\(:allt\&. Eine Null bedeutet, dass eine Warnung nur am Tag des Verfalls ausgegeben wird\&. Ein negativer Wert bedeutet, dass keine Vorwarnung erfolgt\&. Falls nicht angegeben, wird keine Vorwarnung ausgegeben\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+Je mehr Runden Sie definieren, umso schwieriger ist es, das Passwort mit sturem Durchprobieren (brute force) zu knacken; umso mehr Rechenleistung wird jedoch auch f\(:ur die Anmeldung eines Benutzers ben\(:otigt\&.
+.sp
+Falls Sie nichts angeben, wird libc die Standardanzahl der Runden festlegen (5000)\&.
+.sp
+Die Werte m\(:ussen zwischen 1000\-999\&.999\&.999 liegen\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.PP
+\fBSUB_GID_MIN\fR (number), \fBSUB_GID_MAX\fR (number), \fBSUB_GID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate group IDs) allocate
+\fBSUB_GID_COUNT\fR
+unused group IDs from the range
+\fBSUB_GID_MIN\fR
+to
+\fBSUB_GID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR,
+\fBSUB_GID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSUB_UID_MIN\fR (number), \fBSUB_UID_MAX\fR (number), \fBSUB_UID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate user IDs) allocate
+\fBSUB_UID_COUNT\fR
+unused user IDs from the range
+\fBSUB_UID_MIN\fR
+to
+\fBSUB_UID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR,
+\fBSUB_UID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_GID_MIN\fR
+(resp\&.
+\fBSYS_GID_MAX\fR) is 101 (resp\&.
+\fBGID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_UID_MIN\fR
+(resp\&.
+\fBSYS_UID_MAX\fR) is 101 (resp\&.
+\fBUID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBUID_MIN\fR
+(resp\&.
+\fBUID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+Die Bit\-Gruppe, welche die Rechte von erstellten Dateien bestimmt, wird anf\(:anglich auf diesen Wert gesetzt\&. Falls nicht angegeben, wird sie auf 022 gesetzt\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create if
+\fBHOME_MODE\fR
+is not set\&.
+.sp
+It is also used by
+\fBlogin\fR
+to define users\*(Aq initial umask\&. Note that this mask can be overridden by the user\*(Aqs GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/shadow
+.RS 4
+verschl\(:usselte Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/group
+.RS 4
+Informationen zu den Gruppenkonten
+.RE
+.PP
+/etc/gshadow
+.RS 4
+sichere Informationen zu den Gruppenkonten
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguration der Shadow\-Passwort\-Werkzeugsammlung
+.RE
+.PP
+/etc/subgid
+.RS 4
+Per user subordinate group IDs\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+Per user subordinate user IDs\&.
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(1),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuseradd\fR(8)\&.
diff --git a/man/de/man8/nologin.8 b/man/de/man8/nologin.8
new file mode 100644
index 0000000..cb542ca
--- /dev/null
+++ b/man/de/man8/nologin.8
@@ -0,0 +1,55 @@
+'\" t
+.\" Title: nologin
+.\" Author: Nicolas Fran\(,cois <nicolas.francois@centraliens.net>
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Befehle zur Systemverwaltung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "NOLOGIN" "8" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Befehle zur Systemverwaltung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+nologin \- lehnt h\(:oflich eine Anmeldung ab
+.SH "\(:UBERSICHT"
+.HP \w'\fBnologin\fR\ 'u
+\fBnologin\fR
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBnologin\fR
+command displays a message that an account is not available and exits non\-zero\&. It is intended as a replacement shell field for accounts that have been disabled\&.
+.PP
+To disable all logins, investigate
+\fBnologin\fR(5)\&.
+.PP
+If
+\fBSSH_ORIGINAL_COMMAND\fR
+is populated it will be logged\&.
+.SH "SIEHE AUCH"
+.PP
+\fBlogin\fR(1),
+\fBnologin\fR(5)\&.
+.SH "GESCHICHTE"
+.PP
+The
+\fBnologin\fR
+command appeared in BSD 4\&.4\&.
diff --git a/man/de/man8/pwck.8 b/man/de/man8/pwck.8
new file mode 100644
index 0000000..92d37cc
--- /dev/null
+++ b/man/de/man8/pwck.8
@@ -0,0 +1,328 @@
+'\" t
+.\" Title: pwck
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Befehle zur Systemverwaltung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "PWCK" "8" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Befehle zur Systemverwaltung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+pwck \- \(:uberpr\(:uft die Stimmigkeit der Passwortdateien
+.SH "\(:UBERSICHT"
+.HP \w'\fBpwck\fR\ 'u
+\fBpwck\fR [Optionen] [\fIpasswd\fR\ [\ \fIshadow\fR\ ]]
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBpwck\fR
+command verifies the integrity of the users and authentication information\&. It checks that all entries in
+/etc/passwd
+and
+/etc/shadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+Es wird \(:uberpr\(:uft, ob jeder Eintrag folgende Eigenschaften aufweist:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+die richtige Anzahl von Feldern
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+einen eindeutigen und g\(:ultigen Benutzernamen
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+eine g\(:ultige Benutzer\- und Gruppenkennung
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+eine g\(:ultige Hauptgruppe
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+ein g\(:ultiges Home\-Verzeichnis
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+eine g\(:ultige Anmelde\-Shell
+.RE
+.PP
+shadow
+checks are enabled when a second file parameter is specified or when
+/etc/shadow
+exists on the system\&.
+.PP
+Diese Tests umfassen Folgendes:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+ob jedem Eintrag in passwd ein Eintrag in shadow entspricht und umgekehrt
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+ob die Passw\(:orter in der Shadow\-Datei niedergelegt sind
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+ob die shadow\-Eintr\(:age die richtige Anzahl von Feldern haben
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+ob die Shadow\-Eintr\(:age in shadow eindeutig sind
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+dass das Datum der letzten Passwort\(:anderung nicht in der Zukunft liegt
+.RE
+.PP
+The checks for correct number of fields and unique user name are fatal\&. If the entry has the wrong number of fields, the user will be prompted to delete the entire line\&. If the user does not answer affirmatively, all further checks are bypassed\&. An entry with a duplicated user name is prompted for deletion, but the remaining checks will still be made\&. All other errors are warning and the user is encouraged to run the
+\fBusermod\fR
+command to correct the error\&.
+.PP
+The commands which operate on the
+/etc/passwd
+file are not able to alter corrupted or duplicated entries\&.
+\fBpwck\fR
+should be used in those circumstances to remove the offending entry\&.
+.SH "OPTIONEN"
+.PP
+The
+\fB\-r\fR
+and
+\fB\-s\fR
+options cannot be combined\&.
+.PP
+The options which apply to the
+\fBpwck\fR
+command are:
+.PP
+\fB\-\-badname\fR\ \&
+.RS 4
+Allow names that do not conform to standards\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+zeigt die Hilfe an und beendet das Programm
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+meldet nur Fehler\&. Warnungen, die keine Handlung des Benutzers erfordern, werden nicht angezeigt
+.RE
+.PP
+\fB\-r\fR, \fB\-\-read\-only\fR
+.RS 4
+Execute the
+\fBpwck\fR
+command in read\-only mode\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sort\fR
+.RS 4
+Sort entries in
+/etc/passwd
+and
+/etc/shadow
+by UID\&.
+.RE
+.PP
+By default,
+\fBpwck\fR
+operates on the files
+/etc/passwd
+and
+/etc/shadow\&. The user may select alternate files with the
+\fIpasswd\fR
+and
+\fIshadow\fR
+parameters\&.
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+Die maximale Anzahl von Tagen, f\(:ur die ein Passwort verwendet werden darf\&. Wenn das Passwort \(:alter ist, wird ein Wechsel des Passworts erzwungen\&. Falls nicht angegeben, wird \-1 angenommen (was zur Folge hat, dass diese Beschr\(:ankung abgeschaltet ist)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+Die Mindestanzahl von Tagen, bevor ein Wechsel des Passworts zugelassen wird\&. Ein vorheriger Versuch, das Passwort zu \(:andern, wird abgelehnt\&. Falls nicht angegeben, wird \-1 angenommen (was zur Folge hat, dass diese Beschr\(:ankung abgeschaltet ist)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+Die Anzahl von Tagen, an denen der Benutzer vorgewarnt wird, bevor das Passwort verf\(:allt\&. Eine Null bedeutet, dass eine Warnung nur am Tag des Verfalls ausgegeben wird\&. Ein negativer Wert bedeutet, dass keine Vorwarnung erfolgt\&. Falls nicht angegeben, wird keine Vorwarnung ausgegeben\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/group
+.RS 4
+Informationen zu den Gruppenkonten
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/shadow
+.RS 4
+verschl\(:usselte Informationen zu den Benutzerkonten
+.RE
+.SH "R\(:UCKGABEWERTE"
+.PP
+The
+\fBpwck\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI2\fR
+.RS 4
+one or more bad password entries
+.RE
+.PP
+\fI3\fR
+.RS 4
+can\*(Aqt open password files
+.RE
+.PP
+\fI4\fR
+.RS 4
+can\*(Aqt lock password files
+.RE
+.PP
+\fI5\fR
+.RS 4
+can\*(Aqt update password files
+.RE
+.PP
+\fI6\fR
+.RS 4
+can\*(Aqt sort password files
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBgroup\fR(5),
+\fBgrpck\fR(8),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/de/man8/pwconv.8 b/man/de/man8/pwconv.8
new file mode 100644
index 0000000..33092ee
--- /dev/null
+++ b/man/de/man8/pwconv.8
@@ -0,0 +1,193 @@
+'\" t
+.\" Title: pwconv
+.\" Author: Marek Micha\(/lkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Befehle zur Systemverwaltung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "PWCONV" "8" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Befehle zur Systemverwaltung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+pwconv, pwunconv, grpconv, grpunconv \- konvertiert zu oder von Shadow\-Passw\(:ortern und \-gruppen
+.SH "\(:UBERSICHT"
+.HP \w'\fBpwconv\fR\ 'u
+\fBpwconv\fR [\fIOptionen\fR]
+.HP \w'\fBpwunconv\fR\ 'u
+\fBpwunconv\fR [\fIOptionen\fR]
+.HP \w'\fBgrpconv\fR\ 'u
+\fBgrpconv\fR [\fIOptionen\fR]
+.HP \w'\fBgrpunconv\fR\ 'u
+\fBgrpunconv\fR [\fIOptionen\fR]
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBpwconv\fR
+command creates
+\fIshadow\fR
+from
+\fIpasswd\fR
+and an optionally existing
+\fIshadow\fR\&.
+.PP
+The
+\fBpwunconv\fR
+command creates
+\fIpasswd\fR
+from
+\fIpasswd\fR
+and
+\fIshadow\fR
+and then removes
+\fIshadow\fR\&.
+.PP
+The
+\fBgrpconv\fR
+command creates
+\fIgshadow\fR
+from
+\fIgroup\fR
+and an optionally existing
+\fIgshadow\fR\&.
+.PP
+The
+\fBgrpunconv\fR
+command creates
+\fIgroup\fR
+from
+\fIgroup\fR
+and
+\fIgshadow\fR
+and then removes
+\fIgshadow\fR\&.
+.PP
+These four programs all operate on the normal and shadow password and group files:
+/etc/passwd,
+/etc/group,
+/etc/shadow, and
+/etc/gshadow\&.
+.PP
+Each program acquires the necessary locks before conversion\&.
+\fBpwconv\fR
+and
+\fBgrpconv\fR
+are similar\&. First, entries in the shadowed file which don\*(Aqt exist in the main file are removed\&. Then, shadowed entries which don\*(Aqt have `x\*(Aq as the password in the main file are updated\&. Any missing shadowed entries are added\&. Finally, passwords in the main file are replaced with `x\*(Aq\&. These programs can be used for initial conversion as well to update the shadowed file if the main file is edited by hand\&.
+.PP
+\fBpwconv\fR
+will use the values of
+\fIPASS_MIN_DAYS\fR,
+\fIPASS_MAX_DAYS\fR, and
+\fIPASS_WARN_AGE\fR
+from
+/etc/login\&.defs
+when adding new entries to
+/etc/shadow\&.
+.PP
+Likewise
+\fBpwunconv\fR
+and
+\fBgrpunconv\fR
+are similar\&. Passwords in the main file are updated from the shadowed file\&. Entries which exist in the main file but not in the shadowed file are left alone\&. Finally, the shadowed file is removed\&. Some password aging information is lost by
+\fBpwunconv\fR\&. It will convert what it can\&.
+.SH "OPTIONEN"
+.PP
+The options which apply to the
+\fBpwconv\fR,
+\fBpwunconv\fR,
+\fBgrpconv\fR, and
+\fBgrpunconv\fR
+commands are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+zeigt die Hilfe an und beendet das Programm
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.SH "FEHLER"
+.PP
+Errors in the password or group files (such as invalid or duplicate entries) may cause these programs to loop forever or fail in other strange ways\&. Please run
+\fBpwck\fR
+and
+\fBgrpck\fR
+to correct any such errors before converting to or from shadow passwords or groups\&.
+.SH "KONFIGURATION"
+.PP
+The following configuration variable in
+/etc/login\&.defs
+changes the behavior of
+\fBgrpconv\fR
+and
+\fBgrpunconv\fR:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Der Standardwert ist 0, was zur Folge hat, dass die Anzahl der Mitglieder einer Gruppe nicht begrenzt ist\&.
+.sp
+Diese F\(:ahigkeit (der aufgeteilten Gruppe) erm\(:oglicht es, die Zeilenl\(:ange in der Gruppendatei zu begrenzen\&. Damit kann sichergestellt werden, dass die Zeilen f\(:ur NIS\-Gruppen nicht l\(:anger als 1024 Zeichen sind\&.
+.sp
+Falls Sie eine solche Begrenzung ben\(:otigen, k\(:onnen Sie 25 verwenden\&.
+.sp
+Hinweis: Aufgeteilte Gruppen werden m\(:oglicherweise nicht von allen Werkzeugen unterst\(:utzt, selbst nicht aus der Shadow\-Werkzeugsammlung\&. Sie sollten diese Variable nur setzen, falls Sie zwingend darauf angewiesen sind\&.
+.RE
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of
+\fBpwconv\fR:
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+Die maximale Anzahl von Tagen, f\(:ur die ein Passwort verwendet werden darf\&. Wenn das Passwort \(:alter ist, wird ein Wechsel des Passworts erzwungen\&. Falls nicht angegeben, wird \-1 angenommen (was zur Folge hat, dass diese Beschr\(:ankung abgeschaltet ist)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+Die Mindestanzahl von Tagen, bevor ein Wechsel des Passworts zugelassen wird\&. Ein vorheriger Versuch, das Passwort zu \(:andern, wird abgelehnt\&. Falls nicht angegeben, wird \-1 angenommen (was zur Folge hat, dass diese Beschr\(:ankung abgeschaltet ist)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+Die Anzahl von Tagen, an denen der Benutzer vorgewarnt wird, bevor das Passwort verf\(:allt\&. Eine Null bedeutet, dass eine Warnung nur am Tag des Verfalls ausgegeben wird\&. Ein negativer Wert bedeutet, dass keine Vorwarnung erfolgt\&. Falls nicht angegeben, wird keine Vorwarnung ausgegeben\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguration der Shadow\-Passwort\-Werkzeugsammlung
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBgrpck\fR(8),
+\fBlogin.defs\fR(5),
+\fBpwck\fR(8)\&.
diff --git a/man/de/man8/pwunconv.8 b/man/de/man8/pwunconv.8
new file mode 100644
index 0000000..6eed9e8
--- /dev/null
+++ b/man/de/man8/pwunconv.8
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/de/man8/sulogin.8 b/man/de/man8/sulogin.8
new file mode 100644
index 0000000..4894f80
--- /dev/null
+++ b/man/de/man8/sulogin.8
@@ -0,0 +1,116 @@
+'\" t
+.\" Title: sulogin
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Befehle zur Systemverwaltung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "SULOGIN" "8" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Befehle zur Systemverwaltung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sulogin \- Single\-user login
+.SH "SYNTAX"
+.PP
+\fBsulogin\fR
+[\fItty\-device\fR]
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBsulogin\fR
+command is invoked by
+\fBinit\fR
+prior to allowing the user access to the system when in single user mode\&. This feature may only be available on certain systems where
+\fBinit\fR
+has been modified accordingly, or where the
+/etc/inittab
+has an entry for a single user login\&.
+.PP
+The user is prompted
+.PP
+Type control\-d to proceed with normal startup,
+(or give root password for system maintenance):
+.PP
+Input and output will be performed with the standard file descriptors unless the optional device name argument is provided\&.
+.PP
+If the user enters the correct root password, a login session is initiated\&. When
+\fIEOF\fR
+is pressed instead, the system enters multi\-user mode\&.
+.PP
+After the user exits the single\-user shell, or presses
+\fIEOF\fR, the system begins the initialization process required to enter multi\-user mode\&.
+.SH "WARNUNGEN"
+.PP
+This command can only be used if
+\fBinit\fR
+has been modified to call
+\fBsulogin\fR
+instead of
+/bin/sh, or if the user has set the
+\fIinittab\fR
+to support a single user login\&. For example, the line:
+.PP
+co:s:respawn:/etc/sulogin /dev/console
+.PP
+should execute the sulogin command in single user mode\&.
+.PP
+As complete an environment as possible is created\&. However, various devices may be unmounted or uninitialized and many of the user commands may be unavailable or nonfunctional as a result\&.
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/shadow
+.RS 4
+verschl\(:usselte Informationen zu den Benutzerkonten
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBlogin\fR(1),
+\fBsh\fR(1),
+\fBinit\fR(8)\&.
diff --git a/man/de/man8/useradd.8 b/man/de/man8/useradd.8
new file mode 100644
index 0000000..16c43c7
--- /dev/null
+++ b/man/de/man8/useradd.8
@@ -0,0 +1,784 @@
+'\" t
+.\" Title: useradd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Befehle zur Systemverwaltung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "USERADD" "8" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Befehle zur Systemverwaltung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+useradd \- erstellt einen neuen Benutzer oder aktualisiert die Standardwerte f\(:ur neue Benutzer
+.SH "\(:UBERSICHT"
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR [\fIOptionen\fR] \fIANMELDENAME\fR
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR \-D
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR \-D [\fIOptionen\fR]
+.SH "BESCHREIBUNG"
+.PP
+When invoked without the
+\fB\-D\fR
+option, the
+\fBuseradd\fR
+command creates a new user account using the values specified on the command line plus the default values from the system\&. Depending on command line options, the
+\fBuseradd\fR
+command will update system files and may also create the new user\*(Aqs home directory and copy initial files\&.
+.PP
+By default, a group will also be created for the new user (see
+\fB\-g\fR,
+\fB\-N\fR,
+\fB\-U\fR, and
+\fBUSERGROUPS_ENAB\fR)\&.
+.SH "OPTIONEN"
+.PP
+The options which apply to the
+\fBuseradd\fR
+command are:
+.PP
+\fB\-\-badname\fR\ \&
+.RS 4
+Allow names that do not conform to standards\&.
+.RE
+.PP
+\fB\-b\fR, \fB\-\-base\-dir\fR\ \&\fIBASE_DIR\fR
+.RS 4
+The default base directory for the system if
+\fB\-d\fR\ \&\fIHOME_DIR\fR
+is not specified\&.
+\fIBASE_DIR\fR
+is concatenated with the account name to define the home directory\&. If the
+\fB\-m\fR
+option is not used,
+\fIBASE_DIR\fR
+must exist\&.
+.sp
+If this option is not specified,
+\fBuseradd\fR
+will use the base directory specified by the
+\fBHOME\fR
+variable in
+/etc/default/useradd, or
+/home
+by default\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-comment\fR\ \&\fICOMMENT\fR
+.RS 4
+Eine beliebige Zeichenkette\&. Dies ist f\(:ur gew\(:ohnlich eine kurze Beschreibung des Logins und wird im Moment im Feld f\(:ur den vollst\(:andigen Namen des Benutzers gespeichert\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-home\-dir\fR\ \&\fIHOME_DIR\fR
+.RS 4
+The new user will be created using
+\fIHOME_DIR\fR
+as the value for the user\*(Aqs login directory\&. The default is to append the
+\fILOGIN\fR
+name to
+\fIBASE_DIR\fR
+and use that as the login directory name\&. The directory
+\fIHOME_DIR\fR
+does not have to exist but will not be created if it is missing\&.
+.RE
+.PP
+\fB\-D\fR, \fB\-\-defaults\fR
+.RS 4
+Lesen Sie dazu unten den Abschnitt \(FcDie Standardwerte ver\(:andern\(Fo\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+The date on which the user account will be disabled\&. The date is specified in the format
+\fIYYYY\-MM\-DD\fR\&.
+.sp
+If not specified,
+\fBuseradd\fR
+will use the default expiry date specified by the
+\fBEXPIRE\fR
+variable in
+/etc/default/useradd, or an empty string (no expiry) by default\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+Die Anzahl von Tagen nach Ablaufen des Passworts bis das Konto dauerhaft deaktiviert wird\&. Ein Wert von 0 deaktiviert das Konto, sobald das Passwort abl\(:auft\&. Ein Wert von \-1 schaltet diese Funktion ab\&.
+.sp
+If not specified,
+\fBuseradd\fR
+will use the default inactivity period specified by the
+\fBINACTIVE\fR
+variable in
+/etc/default/useradd, or \-1 by default\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGROUP\fR
+.RS 4
+Der Name oder die Nummer der anf\(:anglichen Anmeldegruppe des Benutzers\&. Der Gruppenname muss existieren\&. Die Gruppenzahl muss auf eine bereits vorhandene Gruppe verweisen\&.
+.sp
+If not specified, the behavior of
+\fBuseradd\fR
+will depend on the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&. If this variable is set to
+\fIyes\fR
+(or
+\fB\-U/\-\-user\-group\fR
+is specified on the command line), a group will be created for the user, with the same name as her loginname\&. If the variable is set to
+\fIno\fR
+(or
+\fB\-N/\-\-no\-user\-group\fR
+is specified on the command line), useradd will set the primary group of the new user to the value specified by the
+\fBGROUP\fR
+variable in
+/etc/default/useradd, or 100 by default\&.
+.RE
+.PP
+\fB\-G\fR, \fB\-\-groups\fR\ \&\fIGROUP1\fR[\fI,GROUP2,\&.\&.\&.\fR[\fI,GROUPN\fR]]]
+.RS 4
+A list of supplementary groups which the user is also a member of\&. Each group is separated from the next by a comma, with no intervening whitespace\&. The groups are subject to the same restrictions as the group given with the
+\fB\-g\fR
+option\&. The default is for the user to belong only to the initial group\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+zeigt die Hilfe an und beendet das Programm
+.RE
+.PP
+\fB\-k\fR, \fB\-\-skel\fR\ \&\fISKEL_DIR\fR
+.RS 4
+The skeleton directory, which contains files and directories to be copied in the user\*(Aqs home directory, when the home directory is created by
+\fBuseradd\fR\&.
+.sp
+This option is only valid if the
+\fB\-m\fR
+(or
+\fB\-\-create\-home\fR) option is specified\&.
+.sp
+If this option is not set, the skeleton directory is defined by the
+\fBSKEL\fR
+variable in
+/etc/default/useradd
+or, by default,
+/etc/skel\&.
+.sp
+Soweit m\(:oglich, werden die ACLs und erweiterten Attribute kopiert\&.
+.RE
+.PP
+\fB\-K\fR, \fB\-\-key\fR\ \&\fIKEY\fR=\fIVALUE\fR
+.RS 4
+Overrides
+/etc/login\&.defs
+defaults (\fBUID_MIN\fR,
+\fBUID_MAX\fR,
+\fBUMASK\fR,
+\fBPASS_MAX_DAYS\fR
+and others)\&.
+
+Example:
+\fB\-K\fR\ \&\fIPASS_MAX_DAYS\fR=\fI\-1\fR
+can be used when creating system account to turn off password aging, even though system account has no password at all\&. Multiple
+\fB\-K\fR
+options can be specified, e\&.g\&.:
+\fB\-K\fR\ \&\fIUID_MIN\fR=\fI100\fR\ \&
+\fB\-K\fR\ \&\fIUID_MAX\fR=\fI499\fR
+.RE
+.PP
+\fB\-l\fR, \fB\-\-no\-log\-init\fR
+.RS 4
+F\(:ugt den Benutzer nicht zu den Datenbanken lastlog und faillog hinzu\&.
+.sp
+By default, the user\*(Aqs entries in the lastlog and faillog databases are reset to avoid reusing the entry from a previously deleted user\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-create\-home\fR
+.RS 4
+Create the user\*(Aqs home directory if it does not exist\&. The files and directories contained in the skeleton directory (which can be defined with the
+\fB\-k\fR
+option) will be copied to the home directory\&.
+.sp
+By default, if this option is not specified and
+\fBCREATE_HOME\fR
+is not enabled, no home directories are created\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-no\-create\-home\fR
+.RS 4
+Do no create the user\*(Aqs home directory, even if the system wide setting from
+/etc/login\&.defs
+(\fBCREATE_HOME\fR) is set to
+\fIyes\fR\&.
+.RE
+.PP
+\fB\-N\fR, \fB\-\-no\-user\-group\fR
+.RS 4
+Do not create a group with the same name as the user, but add the user to the group specified by the
+\fB\-g\fR
+option or by the
+\fBGROUP\fR
+variable in
+/etc/default/useradd\&.
+.sp
+The default behavior (if the
+\fB\-g\fR,
+\fB\-N\fR, and
+\fB\-U\fR
+options are not specified) is defined by the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+Erlaubt das Erstellen eines Benutzerkontos mit einer schon vergebenen (nicht eindeutigen) UID\&.
+.sp
+This option is only valid in combination with the
+\fB\-u\fR
+option\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&. The default is to disable the password\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+Sie sollten sicherstellen, dass das Passwort den Passwortrichtlinien des Systems entspricht\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+erstellt ein Systemkonto
+.sp
+System users will be created with no aging information in
+/etc/shadow, and their numeric identifiers are chosen in the
+\fBSYS_UID_MIN\fR\-\fBSYS_UID_MAX\fR
+range, defined in
+/etc/login\&.defs, instead of
+\fBUID_MIN\fR\-\fBUID_MAX\fR
+(and their
+\fBGID\fR
+counterparts for the creation of groups)\&.
+.sp
+Note that
+\fBuseradd\fR
+will not create a home directory for such a user, regardless of the default setting in
+/etc/login\&.defs
+(\fBCREATE_HOME\fR)\&. You have to specify the
+\fB\-m\fR
+options if you want a home directory for a system account to be created\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+The name of the user\*(Aqs login shell\&. The default is to leave this field blank, which causes the system to select the default login shell specified by the
+\fBSHELL\fR
+variable in
+/etc/default/useradd, or an empty string by default\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-uid\fR\ \&\fIUID\fR
+.RS 4
+The numerical value of the user\*(Aqs ID\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&. The default is to use the smallest ID value greater than or equal to
+\fBUID_MIN\fR
+and greater than every other user\&.
+.sp
+See also the
+\fB\-r\fR
+option and the
+\fBUID_MAX\fR
+description\&.
+.RE
+.PP
+\fB\-U\fR, \fB\-\-user\-group\fR
+.RS 4
+erstellt eine Gruppe mit dem gleichen Name wie der Benutzer und f\(:ugt diesen der Gruppe hinzu
+.sp
+The default behavior (if the
+\fB\-g\fR,
+\fB\-N\fR, and
+\fB\-U\fR
+options are not specified) is defined by the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR\ \&\fISEUSER\fR
+.RS 4
+Der SELinux\-Benutzer f\(:ur den Benutzer nach seiner Anmeldung\&. Standardm\(:a\(ssig bleibt dieses Feld leer und es wird dem System \(:uberlassen, den SELinux\-Benutzer zu bestimmen\&.
+.RE
+.SS "Die Standardwerte ver\(:andern"
+.PP
+When invoked with only the
+\fB\-D\fR
+option,
+\fBuseradd\fR
+will display the current default values\&. When invoked with
+\fB\-D\fR
+plus other options,
+\fBuseradd\fR
+will update the default values for the specified options\&. Valid default\-changing options are:
+.PP
+\fB\-b\fR, \fB\-\-base\-dir\fR\ \&\fIBASE_DIR\fR
+.RS 4
+The path prefix for a new user\*(Aqs home directory\&. The user\*(Aqs name will be affixed to the end of
+\fIBASE_DIR\fR
+to form the new user\*(Aqs home directory name, if the
+\fB\-d\fR
+option is not used when creating a new account\&.
+.sp
+This option sets the
+\fBHOME\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+das Datum, an dem das Benutzerkonto abgeschaltet wird
+.sp
+This option sets the
+\fBEXPIRE\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+die Anzahl von Tagen nach dem Ablaufen des Passworts bis das Konto deaktiviert wird
+.sp
+This option sets the
+\fBINACTIVE\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGROUP\fR
+.RS 4
+The group name or ID for a new user\*(Aqs initial group (when the
+\fB\-N/\-\-no\-user\-group\fR
+is used or when the
+\fBUSERGROUPS_ENAB\fR
+variable is set to
+\fIno\fR
+in
+/etc/login\&.defs)\&. The named group must exist, and a numerical group ID must have an existing entry\&.
+.sp
+This option sets the
+\fBGROUP\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+der Name der Anmelde\-Shell des neuen Benutzers
+.sp
+This option sets the
+\fBSHELL\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.SH "ANMERKUNGEN"
+.PP
+The system administrator is responsible for placing the default user files in the
+/etc/skel/
+directory (or any other skeleton directory specified in
+/etc/default/useradd
+or on the command line)\&.
+.SH "WARNUNGEN"
+.PP
+Sie d\(:urfen einen Benutzer nicht einer NIS\- oder LDAP\-Gruppe hinzuf\(:ugen\&. Dies muss auf dem entsprechenden Server durchgef\(:uhrt werden\&.
+.PP
+Similarly, if the username already exists in an external user database such as NIS or LDAP,
+\fBuseradd\fR
+will deny the user account creation request\&.
+.PP
+Benutzernamen m\(:ussen mit einem Kleinbuchstaben oder einem Unterstrich beginnen\&. Sie d\(:urfen nur Kleinbuchstaben, Zahlen, Unterstriche oder Gedankenstriche enthalten\&. Sie k\(:onnen mit einem Dollarzeichen enden\&. Als regul\(:arer Ausdruck: [a\-z_][a\-z0\-9_\-]*[$]?
+.PP
+Benutzernamen d\(:urfen nur bis zu 32 Zeichen lang sein\&.
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCREATE_HOME\fR (boolean)
+.RS 4
+bestimmt, ob standardm\(:a\(ssig ein Home\-Verzeichnis f\(:ur neue Benutzer erstellt werden soll
+.sp
+Diese Einstellung trifft nicht auf Systembenutzer zu\&. Sie kann auf der Befehlszeile \(:uberschrieben werden\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBGID_MIN\fR
+(resp\&.
+\fBGID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBHOME_MODE\fR (number)
+.RS 4
+The mode for new home directories\&. If not specified, the
+\fBUMASK\fR
+is used to create the mode\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this to set the mode of the home directory they create\&.
+.RE
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+Das Verzeichnis des Mail\-Spools\&. Diese Angabe wird ben\(:otigt, um die Mailbox zu bearbeiten, nachdem das entsprechende Benutzerkonto ver\(:andert oder gel\(:oscht wurde\&. Falls nicht angegeben, wird ein Standard verwendet, der beim Kompilieren festgelegt wurde\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Legt den Ort der Mail\-Spool\-Dateien eines Benutzers relativ zu seinem Home\-Verzeichnis fest\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Der Standardwert ist 0, was zur Folge hat, dass die Anzahl der Mitglieder einer Gruppe nicht begrenzt ist\&.
+.sp
+Diese F\(:ahigkeit (der aufgeteilten Gruppe) erm\(:oglicht es, die Zeilenl\(:ange in der Gruppendatei zu begrenzen\&. Damit kann sichergestellt werden, dass die Zeilen f\(:ur NIS\-Gruppen nicht l\(:anger als 1024 Zeichen sind\&.
+.sp
+Falls Sie eine solche Begrenzung ben\(:otigen, k\(:onnen Sie 25 verwenden\&.
+.sp
+Hinweis: Aufgeteilte Gruppen werden m\(:oglicherweise nicht von allen Werkzeugen unterst\(:utzt, selbst nicht aus der Shadow\-Werkzeugsammlung\&. Sie sollten diese Variable nur setzen, falls Sie zwingend darauf angewiesen sind\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+Die maximale Anzahl von Tagen, f\(:ur die ein Passwort verwendet werden darf\&. Wenn das Passwort \(:alter ist, wird ein Wechsel des Passworts erzwungen\&. Falls nicht angegeben, wird \-1 angenommen (was zur Folge hat, dass diese Beschr\(:ankung abgeschaltet ist)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+Die Mindestanzahl von Tagen, bevor ein Wechsel des Passworts zugelassen wird\&. Ein vorheriger Versuch, das Passwort zu \(:andern, wird abgelehnt\&. Falls nicht angegeben, wird \-1 angenommen (was zur Folge hat, dass diese Beschr\(:ankung abgeschaltet ist)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+Die Anzahl von Tagen, an denen der Benutzer vorgewarnt wird, bevor das Passwort verf\(:allt\&. Eine Null bedeutet, dass eine Warnung nur am Tag des Verfalls ausgegeben wird\&. Ein negativer Wert bedeutet, dass keine Vorwarnung erfolgt\&. Falls nicht angegeben, wird keine Vorwarnung ausgegeben\&.
+.RE
+.PP
+\fBSUB_GID_MIN\fR (number), \fBSUB_GID_MAX\fR (number), \fBSUB_GID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate group IDs) allocate
+\fBSUB_GID_COUNT\fR
+unused group IDs from the range
+\fBSUB_GID_MIN\fR
+to
+\fBSUB_GID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR,
+\fBSUB_GID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSUB_UID_MIN\fR (number), \fBSUB_UID_MAX\fR (number), \fBSUB_UID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate user IDs) allocate
+\fBSUB_UID_COUNT\fR
+unused user IDs from the range
+\fBSUB_UID_MIN\fR
+to
+\fBSUB_UID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR,
+\fBSUB_UID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_GID_MIN\fR
+(resp\&.
+\fBSYS_GID_MAX\fR) is 101 (resp\&.
+\fBGID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_UID_MIN\fR
+(resp\&.
+\fBSYS_UID_MAX\fR) is 101 (resp\&.
+\fBUID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBUID_MIN\fR
+(resp\&.
+\fBUID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+Die Bit\-Gruppe, welche die Rechte von erstellten Dateien bestimmt, wird anf\(:anglich auf diesen Wert gesetzt\&. Falls nicht angegeben, wird sie auf 022 gesetzt\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create if
+\fBHOME_MODE\fR
+is not set\&.
+.sp
+It is also used by
+\fBlogin\fR
+to define users\*(Aq initial umask\&. Note that this mask can be overridden by the user\*(Aqs GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Erlaubt Benutzern, die nicht Root sind, die Umask\-Gruppen\-Bits auf ihre Umask\-Bits zu setzen (Beispiel: 022 \-> 002, 077 \-> 007), falls die UID mit der GID identisch ist sowie der Benutzername mit dem Gruppennamen \(:ubereinstimmt\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/shadow
+.RS 4
+verschl\(:usselte Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/group
+.RS 4
+Informationen zu den Gruppenkonten
+.RE
+.PP
+/etc/gshadow
+.RS 4
+sichere Informationen zu den Gruppenkonten
+.RE
+.PP
+/etc/default/useradd
+.RS 4
+Standardwerte f\(:ur die Erstellung eines Kontos
+.RE
+.PP
+/etc/skel/
+.RS 4
+Verzeichnis, das die Standarddateien enth\(:alt
+.RE
+.PP
+/etc/subgid
+.RS 4
+Per user subordinate group IDs\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+Per user subordinate user IDs\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguration der Shadow\-Passwort\-Werkzeugsammlung
+.RE
+.SH "R\(:UCKGABEWERTE"
+.PP
+The
+\fBuseradd\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+can\*(Aqt update password file
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+UID already in use (and no
+\fB\-o\fR)
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI9\fR
+.RS 4
+username already in use
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.PP
+\fI12\fR
+.RS 4
+can\*(Aqt create home directory
+.RE
+.PP
+\fI14\fR
+.RS 4
+can\*(Aqt update SELinux user mapping
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBnewusers\fR(8),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/de/man8/userdel.8 b/man/de/man8/userdel.8
new file mode 100644
index 0000000..8de9e4e
--- /dev/null
+++ b/man/de/man8/userdel.8
@@ -0,0 +1,308 @@
+'\" t
+.\" Title: userdel
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Befehle zur Systemverwaltung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "USERDEL" "8" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Befehle zur Systemverwaltung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+userdel \- l\(:oscht ein Benutzerkonto und die dazugeh\(:origen Dateien
+.SH "\(:UBERSICHT"
+.HP \w'\fBuserdel\fR\ 'u
+\fBuserdel\fR [Optionen] \fIANMELDENAME\fR
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBuserdel\fR
+command modifies the system account files, deleting all entries that refer to the user name
+\fILOGIN\fR\&. The named user must exist\&.
+.SH "OPTIONEN"
+.PP
+The options which apply to the
+\fBuserdel\fR
+command are:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option forces the removal of the user account, even if the user is still logged in\&. It also forces
+\fBuserdel\fR
+to remove the user\*(Aqs home directory and mail spool, even if another user uses the same home directory or if the mail spool is not owned by the specified user\&. If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs
+and if a group exists with the same name as the deleted user, then this group will be removed, even if it is still the primary group of another user\&.
+.sp
+\fINote:\fR
+This option is dangerous and may leave your system in an inconsistent state\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+zeigt die Hilfe an und beendet das Programm
+.RE
+.PP
+\fB\-r\fR, \fB\-\-remove\fR
+.RS 4
+Die Dateien im Home\-Verzeichnis des Benutzers werden zusammen mit dem Home\-Verzeichnis und dem Mailspool entfernt\&. Dateien, die sich nicht unterhalb des Home\-Verzeichnisses befinden, m\(:ussen per Hand gesucht und gel\(:oscht werden\&.
+.sp
+The mail spool is defined by the
+\fBMAIL_DIR\fR
+variable in the
+login\&.defs
+file\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR
+.RS 4
+entfernt die Zuordnung von SELinux\-Benutzern aus den Anmeldeinformationen des Benutzers
+.RE
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+Das Verzeichnis des Mail\-Spools\&. Diese Angabe wird ben\(:otigt, um die Mailbox zu bearbeiten, nachdem das entsprechende Benutzerkonto ver\(:andert oder gel\(:oscht wurde\&. Falls nicht angegeben, wird ein Standard verwendet, der beim Kompilieren festgelegt wurde\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Legt den Ort der Mail\-Spool\-Dateien eines Benutzers relativ zu seinem Home\-Verzeichnis fest\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Der Standardwert ist 0, was zur Folge hat, dass die Anzahl der Mitglieder einer Gruppe nicht begrenzt ist\&.
+.sp
+Diese F\(:ahigkeit (der aufgeteilten Gruppe) erm\(:oglicht es, die Zeilenl\(:ange in der Gruppendatei zu begrenzen\&. Damit kann sichergestellt werden, dass die Zeilen f\(:ur NIS\-Gruppen nicht l\(:anger als 1024 Zeichen sind\&.
+.sp
+Falls Sie eine solche Begrenzung ben\(:otigen, k\(:onnen Sie 25 verwenden\&.
+.sp
+Hinweis: Aufgeteilte Gruppen werden m\(:oglicherweise nicht von allen Werkzeugen unterst\(:utzt, selbst nicht aus der Shadow\-Werkzeugsammlung\&. Sie sollten diese Variable nur setzen, falls Sie zwingend darauf angewiesen sind\&.
+.RE
+.PP
+\fBUSERDEL_CMD\fR (string)
+.RS 4
+Falls angegeben, wird dieser Befehl ausgef\(:uhrt, wenn ein Benutzer entfernt wird\&. Damit k\(:onnen At\-, Cron\- und Druckauftr\(:age etc\&. des entfernten Benutzers (wird als erstes Argument \(:ubergeben) gel\(:oscht werden\&.
+.sp
+Der R\(:uckgabewert des Skripts wird nicht ausgewertet\&.
+.sp
+Here is an example script, which removes the user\*(Aqs cron, at and print jobs:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#! /bin/sh
+
+# Check for the required argument\&.
+if [ $# != 1 ]; then
+ echo "Usage: $0 username"
+ exit 1
+fi
+
+# Remove cron jobs\&.
+crontab \-r \-u $1
+
+# Remove at jobs\&.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username\&.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR \-name "[^\&.]*" \-type f \-user $1 \-delete \e;
+
+# Remove print jobs\&.
+lprm $1
+
+# All done\&.
+exit 0
+
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Erlaubt Benutzern, die nicht Root sind, die Umask\-Gruppen\-Bits auf ihre Umask\-Bits zu setzen (Beispiel: 022 \-> 002, 077 \-> 007), falls die UID mit der GID identisch ist sowie der Benutzername mit dem Gruppennamen \(:ubereinstimmt\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/group
+.RS 4
+Informationen zu den Gruppenkonten
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguration der Shadow\-Passwort\-Werkzeugsammlung
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/shadow
+.RS 4
+verschl\(:usselte Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/subgid
+.RS 4
+Per user subordinate group IDs\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+Per user subordinate user IDs\&.
+.RE
+.SH "R\(:UCKGABEWERTE"
+.PP
+The
+\fBuserdel\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+can\*(Aqt update password file
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified user doesn\*(Aqt exist
+.RE
+.PP
+\fI8\fR
+.RS 4
+user currently logged in
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.PP
+\fI12\fR
+.RS 4
+can\*(Aqt remove home directory
+.RE
+.SH "WARNUNGEN"
+.PP
+\fBuserdel\fR
+will not allow you to remove an account if there are running processes which belong to this account\&. In that case, you may have to kill those processes or lock the user\*(Aqs password or account and remove the account later\&. The
+\fB\-f\fR
+option can force the deletion of this account\&.
+.PP
+Sie sollten von Hand alle Systemdateien \(:uberpr\(:ufen, um sicherzustellen, dass keine Dateien vorhanden sind, die dem gel\(:oschten Benutzer geh\(:oren\&.
+.PP
+Sie sollten keine NIS\-Attribute auf einem NIS\-Client l\(:oschen\&. Dies muss auf dem NIS\-Server durchgef\(:uhrt werden\&.
+.PP
+If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs,
+\fBuserdel\fR
+will delete the group with the same name as the user\&. To avoid inconsistencies in the passwd and group databases,
+\fBuserdel\fR
+will check that this group is not used as a primary group for another user, and will just warn without deleting the group otherwise\&. The
+\fB\-f\fR
+option can force the deletion of this group\&.
+.SH "SIEHE AUCH"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBlogin.defs\fR(5),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuseradd\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/de/man8/usermod.8 b/man/de/man8/usermod.8
new file mode 100644
index 0000000..7183a39
--- /dev/null
+++ b/man/de/man8/usermod.8
@@ -0,0 +1,469 @@
+'\" t
+.\" Title: usermod
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Befehle zur Systemverwaltung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "USERMOD" "8" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Befehle zur Systemverwaltung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+usermod \- ver\(:andert ein Benutzerkonto
+.SH "\(:UBERSICHT"
+.HP \w'\fBusermod\fR\ 'u
+\fBusermod\fR [\fIOptionen\fR] \fIANMELDENAME\fR
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBusermod\fR
+command modifies the system account files to reflect the changes that are specified on the command line\&.
+.SH "OPTIONEN"
+.PP
+The options which apply to the
+\fBusermod\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-append\fR
+.RS 4
+Add the user to the supplementary group(s)\&. Use only with the
+\fB\-G\fR
+option\&.
+.RE
+.PP
+\fB\-b\fR, \fB\-\-badnames\fR
+.RS 4
+Allow names that do not conform to standards\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-comment\fR\ \&\fICOMMENT\fR
+.RS 4
+The new value of the user\*(Aqs password file comment field\&. It is normally modified using the
+\fBchfn\fR(1)
+utility\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-home\fR\ \&\fIHOME_DIR\fR
+.RS 4
+das neue Home\-Verzeichnis des Benutzers
+.sp
+If the
+\fB\-m\fR
+option is given, the contents of the current home directory will be moved to the new home directory, which is created if it does not already exist\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+The date on which the user account will be disabled\&. The date is specified in the format
+\fIYYYY\-MM\-DD\fR\&.
+.sp
+An empty
+\fIEXPIRE_DATE\fR
+argument will disable the expiration of the account\&.
+.sp
+This option requires a
+/etc/shadow
+file\&. A
+/etc/shadow
+entry will be created if there were none\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+Die Anzahl von Tagen, nach denen ein Passwort abgelaufen ist, bis das Konto deaktiviert wird\&.
+.sp
+Ein Wert von 0 deaktiviert das Konto, sobald das Passwort abl\(:auft\&. Ein Wert von \-1 schaltet diese Funktion ab\&.
+.sp
+This option requires a
+/etc/shadow
+file\&. A
+/etc/shadow
+entry will be created if there were none\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGROUP\fR
+.RS 4
+Der Name oder die Zahl der anf\(:anglichen Anmeldegruppe eines neuen Benutzers\&. Der Gruppenname muss existieren\&.
+.sp
+Jede Datei im Home\-Verzeichnis des Benutzers, die der alten Hauptgruppe des Benutzers geh\(:orte, wird dieser neuen Gruppe geh\(:oren\&.
+.sp
+Die Gruppenzugeh\(:origkeit von Dateien au\(sserhalb des Home\-Verzeichnisses des Benutzers muss per Hand angepasst werden\&.
+.RE
+.PP
+\fB\-G\fR, \fB\-\-groups\fR\ \&\fIGROUP1\fR[\fI,GROUP2,\&.\&.\&.\fR[\fI,GROUPN\fR]]]
+.RS 4
+A list of supplementary groups which the user is also a member of\&. Each group is separated from the next by a comma, with no intervening whitespace\&. The groups are subject to the same restrictions as the group given with the
+\fB\-g\fR
+option\&.
+.sp
+If the user is currently a member of a group which is not listed, the user will be removed from the group\&. This behaviour can be changed via the
+\fB\-a\fR
+option, which appends the user to the current supplementary group list\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-login\fR\ \&\fINEW_LOGIN\fR
+.RS 4
+The name of the user will be changed from
+\fILOGIN\fR
+to
+\fINEW_LOGIN\fR\&. Nothing else is changed\&. In particular, the user\*(Aqs home directory or mail spool should probably be renamed manually to reflect the new login name\&.
+.RE
+.PP
+\fB\-L\fR, \fB\-\-lock\fR
+.RS 4
+Lock a user\*(Aqs password\&. This puts a \*(Aq!\*(Aq in front of the encrypted password, effectively disabling the password\&. You can\*(Aqt use this option with
+\fB\-p\fR
+or
+\fB\-U\fR\&.
+.sp
+Note: if you wish to lock the account (not only access with a password), you should also set the
+\fIEXPIRE_DATE\fR
+to
+\fI1\fR\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-move\-home\fR
+.RS 4
+verschiebt den Inhalt des Home\-Verzeichnisses eines Benutzers zu dem neuen Ziel
+.sp
+This option is only valid in combination with the
+\fB\-d\fR
+(or
+\fB\-\-home\fR) option\&.
+.sp
+\fBusermod\fR
+will try to adapt the ownership of the files and to copy the modes, ACL and extended attributes, but manual changes might be needed afterwards\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+When used with the
+\fB\-u\fR
+option, this option allows to change the user ID to a non\-unique value\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+Sie sollten sicherstellen, dass das Passwort den Passwortrichtlinien des Systems entspricht\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+Der Name der neuen Anmelde\-Shell des Benutzers\&. Falls dieses Feld leer gelassen wird, verwendet das System die Standard\-Anmelde\-Shell\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-uid\fR\ \&\fIUID\fR
+.RS 4
+der neue numerische Wert der UID des Benutzers
+.sp
+This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&.
+.sp
+F\(:ur die Mailbox des Benutzers und alle Dateien, die ihm geh\(:oren und sich in seinem Home\-Verzeichnis befinden, wird die ID des Eigent\(:umers automatisch angepasst\&.
+.sp
+Der Eigent\(:umer von Dateien au\(sserhalb des Home\-Verzeichnisses des Benutzers muss per Hand angepasst werden\&.
+.sp
+No checks will be performed with regard to the
+\fBUID_MIN\fR,
+\fBUID_MAX\fR,
+\fBSYS_UID_MIN\fR, or
+\fBSYS_UID_MAX\fR
+from
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-U\fR, \fB\-\-unlock\fR
+.RS 4
+Unlock a user\*(Aqs password\&. This removes the \*(Aq!\*(Aq in front of the encrypted password\&. You can\*(Aqt use this option with
+\fB\-p\fR
+or
+\fB\-L\fR\&.
+.sp
+Note: if you wish to unlock the account (not only access with a password), you should also set the
+\fIEXPIRE_DATE\fR
+(for example to
+\fI99999\fR, or to the
+\fBEXPIRE\fR
+value from
+/etc/default/useradd)\&.
+.RE
+.PP
+\fB\-v\fR, \fB\-\-add\-subuids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Add a range of subordinate uids to the user\*(Aqs account\&.
+.sp
+This option may be specified multiple times to add multiple ranges to a users account\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR, or
+\fBSUB_UID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-V\fR, \fB\-\-del\-subuids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Remove a range of subordinate uids from the user\*(Aqs account\&.
+.sp
+This option may be specified multiple times to remove multiple ranges to a users account\&. When both
+\fB\-\-del\-subuids\fR
+and
+\fB\-\-add\-subuids\fR
+are specified, the removal of all subordinate uid ranges happens before any subordinate uid range is added\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR, or
+\fBSUB_UID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-add\-subgids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Add a range of subordinate gids to the user\*(Aqs account\&.
+.sp
+This option may be specified multiple times to add multiple ranges to a users account\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR, or
+\fBSUB_GID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-W\fR, \fB\-\-del\-subgids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Remove a range of subordinate gids from the user\*(Aqs account\&.
+.sp
+This option may be specified multiple times to remove multiple ranges to a users account\&. When both
+\fB\-\-del\-subgids\fR
+and
+\fB\-\-add\-subgids\fR
+are specified, the removal of all subordinate gid ranges happens before any subordinate gid range is added\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR, or
+\fBSUB_GID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR\ \&\fISEUSER\fR
+.RS 4
+der neue SELinux\-Benutzer f\(:ur den Anmeldenamen des Benutzers
+.sp
+A blank
+\fISEUSER\fR
+will remove the SELinux user mapping for user
+\fILOGIN\fR
+(if any)\&.
+.RE
+.SH "WARNUNGEN"
+.PP
+You must make certain that the named user is not executing any processes when this command is being executed if the user\*(Aqs numerical user ID, the user\*(Aqs name, or the user\*(Aqs home directory is being changed\&.
+\fBusermod\fR
+checks this on Linux\&. On other platforms it only uses utmp to check if the user is logged in\&.
+.PP
+You must change the owner of any
+\fBcrontab\fR
+files or
+\fBat\fR
+jobs manually\&.
+.PP
+Sie m\(:ussen alle \(:Anderung in Bezug auf NIS auf dem NIS\-Server vornehmen\&.
+.SH "KONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+Das Verzeichnis des Mail\-Spools\&. Diese Angabe wird ben\(:otigt, um die Mailbox zu bearbeiten, nachdem das entsprechende Benutzerkonto ver\(:andert oder gel\(:oscht wurde\&. Falls nicht angegeben, wird ein Standard verwendet, der beim Kompilieren festgelegt wurde\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Legt den Ort der Mail\-Spool\-Dateien eines Benutzers relativ zu seinem Home\-Verzeichnis fest\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Der Standardwert ist 0, was zur Folge hat, dass die Anzahl der Mitglieder einer Gruppe nicht begrenzt ist\&.
+.sp
+Diese F\(:ahigkeit (der aufgeteilten Gruppe) erm\(:oglicht es, die Zeilenl\(:ange in der Gruppendatei zu begrenzen\&. Damit kann sichergestellt werden, dass die Zeilen f\(:ur NIS\-Gruppen nicht l\(:anger als 1024 Zeichen sind\&.
+.sp
+Falls Sie eine solche Begrenzung ben\(:otigen, k\(:onnen Sie 25 verwenden\&.
+.sp
+Hinweis: Aufgeteilte Gruppen werden m\(:oglicherweise nicht von allen Werkzeugen unterst\(:utzt, selbst nicht aus der Shadow\-Werkzeugsammlung\&. Sie sollten diese Variable nur setzen, falls Sie zwingend darauf angewiesen sind\&.
+.RE
+.PP
+\fBSUB_GID_MIN\fR (number), \fBSUB_GID_MAX\fR (number), \fBSUB_GID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate group IDs) allocate
+\fBSUB_GID_COUNT\fR
+unused group IDs from the range
+\fBSUB_GID_MIN\fR
+to
+\fBSUB_GID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR,
+\fBSUB_GID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSUB_UID_MIN\fR (number), \fBSUB_UID_MAX\fR (number), \fBSUB_UID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate user IDs) allocate
+\fBSUB_UID_COUNT\fR
+unused user IDs from the range
+\fBSUB_UID_MIN\fR
+to
+\fBSUB_UID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR,
+\fBSUB_UID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/group
+.RS 4
+Informationen zu den Gruppenkonten
+.RE
+.PP
+/etc/gshadow
+.RS 4
+sichere Informationen zu den Gruppenkonten
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguration der Shadow\-Passwort\-Werkzeugsammlung
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/shadow
+.RS 4
+verschl\(:usselte Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/subgid
+.RS 4
+Per user subordinate group IDs\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+Per user subordinate user IDs\&.
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8)\&.
diff --git a/man/de/man8/vigr.8 b/man/de/man8/vigr.8
new file mode 100644
index 0000000..ff72d7a
--- /dev/null
+++ b/man/de/man8/vigr.8
@@ -0,0 +1 @@
+.so man8/vipw.8
diff --git a/man/de/man8/vipw.8 b/man/de/man8/vipw.8
new file mode 100644
index 0000000..c7c59e4
--- /dev/null
+++ b/man/de/man8/vipw.8
@@ -0,0 +1,137 @@
+'\" t
+.\" Title: vipw
+.\" Author: Marek Micha\(/lkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23.01.2020
+.\" Manual: Befehle zur Systemverwaltung
+.\" Source: shadow-utils 4.8.1
+.\" Language: German
+.\"
+.TH "VIPW" "8" "23.01.2020" "shadow\-utils 4\&.8\&.1" "Befehle zur Systemverwaltung"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+vipw, vigr \- bearbeitet die Passwort\-, Gruppen\-, Shadow\-Passwort\- oder Shadow\-Gruppen\-Datei
+.SH "\(:UBERSICHT"
+.HP \w'\fBvipw\fR\ 'u
+\fBvipw\fR [\fIOptionen\fR]
+.HP \w'\fBvigr\fR\ 'u
+\fBvigr\fR [\fIOptionen\fR]
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBvipw\fR
+and
+\fBvigr\fR
+commands edits the files
+/etc/passwd
+and
+/etc/group, respectively\&. With the
+\fB\-s\fR
+flag, they will edit the shadow versions of those files,
+/etc/shadow
+and
+/etc/gshadow, respectively\&. The programs will set the appropriate locks to prevent file corruption\&. When looking for an editor, the programs will first try the environment variable
+\fB$VISUAL\fR, then the environment variable
+\fB$EDITOR\fR, and finally the default editor,
+\fBvi\fR(1)\&.
+.SH "OPTIONEN"
+.PP
+The options which apply to the
+\fBvipw\fR
+and
+\fBvigr\fR
+commands are:
+.PP
+\fB\-g\fR, \fB\-\-group\fR
+.RS 4
+bearbeitet die Gruppendatenbank
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+zeigt die Hilfe an und beendet das Programm
+.RE
+.PP
+\fB\-p\fR, \fB\-\-passwd\fR
+.RS 4
+bearbeitet die Passwd\-Datenbank
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+stiller Modus
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shadow\fR
+.RS 4
+bearbeitet die Shadow\- oder Gshadow\-Datenbank
+.RE
+.SH "UMGEBUNGSVARIABLEN"
+.PP
+\fBVISUAL\fR
+.RS 4
+der verwendete Editor
+.RE
+.PP
+\fBEDITOR\fR
+.RS 4
+Editor to be used if
+\fBVISUAL\fR
+is not set\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/group
+.RS 4
+Informationen zu den Gruppenkonten
+.RE
+.PP
+/etc/gshadow
+.RS 4
+sichere Informationen zu den Gruppenkonten
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten
+.RE
+.PP
+/etc/shadow
+.RS 4
+verschl\(:usselte Informationen zu den Benutzerkonten
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBvi\fR(1),
+\fBgroup\fR(5),
+\fBgshadow\fR(5)
+,
+\fBpasswd\fR(5), ,
+\fBshadow\fR(5)\&.
diff --git a/man/es/Makefile.am b/man/es/Makefile.am
new file mode 100644
index 0000000..721dc0d
--- /dev/null
+++ b/man/es/Makefile.am
@@ -0,0 +1,17 @@
+
+mandir = @mandir@/es
+
+man_MANS =
+
+# These Spanish manpages are outdated.
+# Please contact pkg-shadow-devel@lists.alioth.debian.org if you wish to
+# provide updates.
+# man1/login.1 \
+# man1/newgrp.1 \
+# man1/passwd.1 \
+# man5/passwd.5 \
+# man1/su.1 \
+# man8/vigr.8 \
+# man8/vipw.8
+
+EXTRA_DIST = $(man_MANS)
diff --git a/man/es/Makefile.in b/man/es/Makefile.in
new file mode 100644
index 0000000..8e33044
--- /dev/null
+++ b/man/es/Makefile.in
@@ -0,0 +1,488 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = man/es
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@/es
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS =
+
+# These Spanish manpages are outdated.
+# Please contact pkg-shadow-devel@lists.alioth.debian.org if you wish to
+# provide updates.
+# man1/login.1 \
+# man1/newgrp.1 \
+# man1/passwd.1 \
+# man5/passwd.5 \
+# man1/su.1 \
+# man8/vigr.8 \
+# man8/vipw.8
+EXTRA_DIST = $(man_MANS)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/es/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign man/es/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/expiry.1.xml b/man/expiry.1.xml
new file mode 100644
index 0000000..63575b0
--- /dev/null
+++ b/man/expiry.1.xml
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ Copyright (c) 1999 , Ben Collins
+ Copyright (c) 2007 - 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!--ENTITY CONSOLE_GROUPS SYSTEM "login.defs.d/CONSOLE_GROUPS.xml"-->
+<!-- A call to CONSOLE_GROUPS is linked, but not used -->
+<!-- SHADOW-CONFIG-HERE -->
+]>
+
+<refentry id='expiry.1'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1990</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>expiry</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>expiry</refname>
+ <refpurpose>check and enforce password expiration policy</refpurpose>
+ </refnamediv>
+ <!-- body begins here -->
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>expiry</command>
+ <arg choice='plain'>
+ <replaceable>option</replaceable>
+ </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The <command>expiry</command> command checks (<option>-c</option>)
+ the current password expiration and forces (<option>-f</option>)
+ changes when required. It is callable as a normal user command.
+ </para>
+ </refsect1>
+
+ <refsect1 id='options'>
+ <title>OPTIONS</title>
+ <para>
+ The options which apply to the <command>expiry</command> command are:
+ </para>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term><option>-c</option>, <option>--check</option></term>
+ <listitem>
+ <para>Check the password expiration of the current user.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-f</option>, <option>--force</option></term>
+ <listitem>
+ <para>
+ Force a password change if the current user has an expired
+ password.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-h</option>, <option>--help</option></term>
+ <listitem>
+ <para>Display help message and exit.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/passwd</filename></term>
+ <listitem>
+ <para>User account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/shadow</filename></term>
+ <listitem>
+ <para>Secure user account information.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/faillog.5.xml b/man/faillog.5.xml
new file mode 100644
index 0000000..0e16752
--- /dev/null
+++ b/man/faillog.5.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ Copyright (c) 2007 - 2008, 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='faillog.5'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1989</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>faillog</refentrytitle>
+ <manvolnum>5</manvolnum>
+ <refmiscinfo class="sectdesc"> File Formats and Conversions</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>faillog</refname>
+ <refpurpose>login failure logging file</refpurpose>
+ </refnamediv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ <filename>/var/log/faillog</filename> maintains a count of login
+ failures and the limits for each account.
+ </para>
+ <para>
+ The file contains fixed length
+ records, indexed by numerical UID. Each record contains the count of
+ login failures since the last successful login; the maximum number of
+ failures before the account is disabled; the line on which the last login
+ failure occurred; the date of the last login failure;
+ and the duration (in seconds) during which the account will be locked after
+ a failure.
+ </para>
+
+ <para>The structure of the file is:</para>
+ <programlisting>
+struct faillog {
+ short fail_cnt;
+ short fail_max;
+ char fail_line[12];
+ time_t fail_time;
+ long fail_locktime;
+};</programlisting>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/var/log/faillog</filename></term>
+ <listitem>
+ <para>Failure logging file.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>faillog</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+</refentry>
+
diff --git a/man/faillog.8.xml b/man/faillog.8.xml
new file mode 100644
index 0000000..a9132a8
--- /dev/null
+++ b/man/faillog.8.xml
@@ -0,0 +1,265 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ Copyright (c) 2007 - 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='faillog.8'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1989</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>faillog</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>faillog</refname>
+ <refpurpose>display faillog records or set login failure limits</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>faillog</command>
+ <arg choice='opt'>
+ <replaceable>options</replaceable>
+ </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ <command>faillog</command> displays the contents of the failure log
+ database (<filename>/var/log/faillog</filename>). It can also
+ set the failure counters and limits. When
+ <command>faillog</command> is run without arguments, it only displays the
+ faillog records of the users who had a login failure.
+ </para>
+ </refsect1>
+
+ <refsect1 id='options'>
+ <title>OPTIONS</title>
+ <para>
+ The options which apply to the <command>faillog</command> command
+ are:
+ </para>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term><option>-a</option>, <option>--all</option></term>
+ <listitem>
+ <para>
+ Display (or act on) faillog records for all users having an
+ entry in the <filename>faillog</filename> database.
+ </para>
+ <para>
+ The range of users can be restricted with the
+ <option>-u</option> option.
+ </para>
+ <para>
+ In display mode, this is still restricted to existing users
+ but forces the display of the faillog entries even if they
+ are empty.
+ </para>
+ <para>
+ With the <option>-l</option>, <option>-m</option>,
+ <option>-r</option>, <option>-t</option> options, the users'
+ records are changed, even if the user does not exist on the
+ system. This is useful to reset records of users that have
+ been deleted or to set a policy in advance for a range of
+ users.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-h</option>, <option>--help</option></term>
+ <listitem>
+ <para>Display help message and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-l</option>, <option>--lock-secs</option>&nbsp;<replaceable>SEC</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Lock account for <replaceable>SEC</replaceable>
+ seconds after failed login.
+ </para>
+ <para>
+ Write access to <filename>/var/log/faillog</filename>
+ is required for this option.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-m</option>, <option>--maximum</option>&nbsp;<replaceable>MAX</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Set the maximum number of login failures after the account is
+ disabled to <replaceable>MAX</replaceable>.
+ </para>
+ <para>
+ Selecting a
+ <replaceable>MAX</replaceable> value of 0 has the effect of not
+ placing a limit on the number of failed logins.
+ </para>
+ <para>
+ The maximum
+ failure count should always be 0 for <emphasis>root</emphasis>
+ to prevent a denial of services attack against the system.
+ </para>
+ <para>
+ Write access to <filename>/var/log/faillog</filename>
+ is required for this option.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-r</option>, <option>--reset</option></term>
+ <listitem>
+ <para>
+ Reset the counters of login failures.
+ </para>
+ <para>
+ Write access to <filename>/var/log/faillog</filename>
+ is required for this option.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Apply changes in the <replaceable>CHROOT_DIR</replaceable>
+ directory and use the configuration files from the
+ <replaceable>CHROOT_DIR</replaceable> directory.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-t</option>, <option>--time</option>&nbsp;<replaceable>DAYS</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Display faillog records more recent than
+ <replaceable>DAYS</replaceable>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</replaceable>|<replaceable>RANGE</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Display faillog record or maintains failure counters and limits
+ (if used with <option>-l</option>, <option>-m</option> or
+ <option>-r</option> options) only for the specified user(s).
+ </para>
+ <para>
+ The users can be specified by a login name, a numerical user
+ ID, or a <replaceable>RANGE</replaceable> of users. This
+ <replaceable>RANGE</replaceable> of users can be specified
+ with a min and max values
+ (<replaceable>UID_MIN-UID_MAX</replaceable>), a max value
+ (<replaceable>-UID_MAX</replaceable>), or a min value
+ (<replaceable>UID_MIN-</replaceable>).
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>
+ When none of the <option>-l</option>, <option>-m</option>, or
+ <option>-r</option> options are used, <command>faillog</command>
+ displays the faillog record of the specified user(s).
+ </para>
+ </refsect1>
+
+ <refsect1 id='caveats'>
+ <title>CAVEATS</title>
+ <para>
+ <command>faillog</command> only prints out users with no successful
+ login since the last failure. To print out a user who has had a
+ successful login since their last failure, you must explicitly request
+ the user with the <option>-u</option> flag, or print out all users
+ with the <option>-a</option> flag.
+ </para>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/var/log/faillog</filename></term>
+ <listitem>
+ <para>Failure logging file.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>faillog</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/fi/Makefile.am b/man/fi/Makefile.am
new file mode 100644
index 0000000..26a1a84
--- /dev/null
+++ b/man/fi/Makefile.am
@@ -0,0 +1,12 @@
+
+mandir = @mandir@/fi
+
+man_MANS = \
+ man1/chfn.1 \
+ man1/chsh.1 \
+ man1/su.1
+
+# Outdated manpages
+# passwd.1 (https://bugs.launchpad.net/ubuntu/+bug/384024)
+
+EXTRA_DIST = $(man_MANS)
diff --git a/man/fi/Makefile.in b/man/fi/Makefile.in
new file mode 100644
index 0000000..2c197a2
--- /dev/null
+++ b/man/fi/Makefile.in
@@ -0,0 +1,564 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = man/fi
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)"
+NROFF = nroff
+MANS = $(man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@/fi
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = \
+ man1/chfn.1 \
+ man1/chsh.1 \
+ man1/su.1
+
+
+# Outdated manpages
+# passwd.1 (https://bugs.launchpad.net/ubuntu/+bug/384024)
+EXTRA_DIST = $(man_MANS)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/fi/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign man/fi/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags-am uninstall uninstall-am uninstall-man \
+ uninstall-man1
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/fi/man1/chfn.1 b/man/fi/man1/chfn.1
new file mode 100644
index 0000000..2a10395
--- /dev/null
+++ b/man/fi/man1/chfn.1
@@ -0,0 +1,68 @@
+.\"
+.\" chfn.1 -- change your finger information
+.\" (c) 1994 by salvatore valente <svalente@athena.mit.edu>
+.\"
+.\" this program is free software. you can redistribute it and
+.\" modify it under the terms of the gnu general public license.
+.\" there is no warranty.
+.\"
+.\" $Author: kloczek $
+.\" $Revision: 1.2 $
+.\" $Date: 2005/12/01 20:38:25 $
+.\" Proofread by Raimo Koski, Nov-Dec. 1999
+.\" Translated into Finnish by Lauri Nurmi (lanurmi@kauhajoki.fi)
+.\" Proofread by Juhana Siren (Juhana.Siren@oulu.fi)
+.\"
+.TH CHFN 1 "24. huhtikuuta 1998" "chfn" "Käyttäjän sovellusohjelmat"
+.SH NIMI
+chfn \- muuta finger-tietojasi
+.SH "YLEISKATSAUS"
+.B chfn
+[\ \-f\ koko nimi\ ] [\ \-o\ toimisto\ ] [\ \-p\ toimiston puhelin\ ]
+[\ \-h\ kotipuhelin\ ] [\ \-u\ ] [\ \-v\ ] [\ käyttäjänimi\ ]
+.SH KUVAUS
+.B chfn:ää
+käytetään finger-tietojen muuttamiseen. Nämä tiedot ovat
+.I /etc/passwd
+-tiedostossa, ja niitä voidaan katsoa
+.B finger\fR-ohjelmalla.
+Linuxin
+.B finger\fR-komento
+näyttää neljä tietoa, joita voidaan muuttaa
+.B chfn\fR:llä
+: todellinen nimesi, työhuoneesi ja puhelin, sekä kotipuhelimesi.
+.SS KOMENTORIVI
+Jokainen neljästä tiedosta voidaan määritellä komentorivillä. Jos
+komentorivillä ei anneta tietoja,
+.B chfn
+käynnistyy vuorovaikutteisessa tilassa.
+.SS VUOROVAIKUTTEINEN TILA
+Vuorovaikutteisessa tilassa
+.B chfn
+kysyy erikseen jokaista kenttää. Voit syöttää kenttään uuden tiedon, tai
+painaa Enteriä jättääksesi kentän ennalleen. Syötä sana "none" saadaksesi
+kentän tyhjäksi.
+.SH OPTIOT
+.TP
+.I "\-f, \-\-full-name"
+Määritä todellinen nimesi.
+.TP
+.I "\-o, \-\-office"
+Määritä toimistohuoneesi numero.
+.TP
+.I "\-p, \-\-office-phone"
+Määritä toimistohuoneesi puhelinnumero.
+.TP
+.I "\-h, \-\-home-phone"
+Määritä kotipuhelinnumerosi.
+.TP
+.I "\-u, \-\-help"
+Näytä lyhyt ohje komennoista.
+.TP
+.I "-v, \-\-version"
+Näytä versiotiedot.
+.SH TEKIJÄ
+Salvatore Valente <svalente@mit.edu>
+.SH "KATSO MYÖS"
+.BR finger (1),
+.BR passwd (5),
diff --git a/man/fi/man1/chsh.1 b/man/fi/man1/chsh.1
new file mode 100644
index 0000000..ed9cb95
--- /dev/null
+++ b/man/fi/man1/chsh.1
@@ -0,0 +1,49 @@
+.\" ** You probably do not want to edit this file directly **
+.\" It was generated using the DocBook XSL Stylesheets (version 1.69.1).
+.\" Instead of manually editing it, you probably should edit the DocBook XML
+.\" source for it and then use the DocBook XSL Stylesheets to regenerate it.
+.TH "CHSH" "1" "03/07/2006" "Käyttäjän sovellukset" "Käyttäjän sovellukset"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "NAME"
+chsh \- vaihda sisäänkirjautumiskuorta
+.SH "SYNOPSIS"
+.HP 5
+\fBchsh\fR [\-s\ \fIsisäänkirjautumiskuori\fR] [\fIkäyttäjä\fR]
+.SH "KUVAUS"
+.PP
+\fBchsh\fR
+vaihtaa käyttäjän sisäänkirjautumiskuorta. Tämä määrittää käyttäjän ensimmäisen kirjautumiskomennon. Tavallinen käyttäjä voi vaihtaa ainoastaan oman tunnuksensa kirjautumiskuorta, mutta pääkäyttäjä voi vaihtaa kenen tahansa kirjautumiskuoren.
+.PP
+Ainoa rajoitus kirjautumiskuorelle on, että komennon nimen täytyy olla lueteltuna tiedostossa
+\fI/etc/shells\fR
+ellei komentoa käynnistänyt pääkäyttäjä, jolloin mikä tahansa arvo voidaan lisätä. Tunnus, jolla on rajoitettu kirjautumiskuori, ei voi vaihtaa omaa kirjautumiskuortaan. Tästä syystä komennon
+\fI/bin/rsh\fR
+lisääminen tiedostoon
+\fI/etc/shells\fR
+ei ole suositeltavaa, koska käyttäjän vahingossa vaihtaessa rajoitettuun kuoreen, ei hän voi koskaan vaihtaa kirjautumiskuortaan takaisin alkuperäiseen arvoon.
+.SH "VALITSIMET"
+.PP
+Mikäli valitsinta
+\fB\-s\fR
+ei ole annettu,
+\fBchsh\fR
+toimii interaktiivisesti kysyen käyttäjältä kirjautumiskuorta. Syöttämällä uuden arvon vaihdetaan kuorta, ja antamalla tyhjän syötteen, vanha kuori jää voimaan. Nykyinen kuori tulostetaan
+\fI[ ]\fR\-merkkiparin välissä.
+.SH "TIEDOSTOT"
+.TP
+\fI/etc/passwd\fR
+käyttäjätunnuksien tiedot
+.TP
+\fI/etc/shells\fR
+luettelo sallituista kirjautumiskuorista
+.TP
+\fI/etc/login.defs\fR
+varjosalasanakaluston asetukset
+.SH "KATSO MYÖS"
+.PP
+\fBchfn\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)
diff --git a/man/fi/man1/su.1 b/man/fi/man1/su.1
new file mode 100644
index 0000000..4c29823
--- /dev/null
+++ b/man/fi/man1/su.1
@@ -0,0 +1,119 @@
+.\" ** You probably do not want to edit this file directly **
+.\" It was generated using the DocBook XSL Stylesheets (version 1.69.1).
+.\" Instead of manually editing it, you probably should edit the DocBook XML
+.\" source for it and then use the DocBook XSL Stylesheets to regenerate it.
+.TH "SU" "1" "03/07/2006" "Käyttäjän sovellukset" "Käyttäjän sovellukset"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "NAME"
+su \- vaihda käyttäjätunnusta tai tule pääkäyttäjäksi
+.SH "SYNOPSIS"
+.HP 3
+\fBsu\fR [\fIvalitsimet\fR] [\-] [\fIkäyttäjätunnus\fR\ [\ \fIparametrit\fR\ ]]
+.SH "KUVAUS"
+.PP
+\fBsu\fR\-komentoa käytetään vaihtamaan toiseksi käyttäjäksi kesken istunnon. Kun komento ajetaan ilman käyttäjänimeä,
+\fBsu\fR
+oletuksena vaihtaa pääkäyttäjäksi. Valinnainen parametri
+\fB\-\fR
+voidaan antaa kun halutaan samanlainen ympäristö kuin käyttäjä odottaa kirjautuessaan suoraan sisään.
+.PP
+Muita parametreja voidaan antaa käyttäjänimen jälkeen, jolloin ne välitetään käyttäjän sisäänkirjautumiskuorelle. Erityisesti parametri
+\fB\-c\fR
+tarkoittaa, että seuraava parametri on komento useimmissa komentotulkeissa. Komento suoritetaan kuorella, joka on määritetty
+\fI/etc/passwd\fR\-tiedostossa kohdekäyttäjälle.
+.PP
+Voit käyttää parametria
+\fB\-\-\fR
+erottamaan
+\fBsu\fR\-valitsimet kuorelle välitettävistä parametreista.
+.PP
+Käyttäjältä pyydetään salasanaa tarvittaessa. Väärä salasana tuottaa virheilmoituksen. Kaikki yritykset, niin kelvolliset kuin virheellisetkin, kirjataan lokiin järjestelmän väärinkäytösten tunnistamiseksi.
+.PP
+Nykyinen ympäristö välitetään kuorelle.
+\fB$PATH\fR\-muuttujan arvo tyhjätään arvoksi
+\fI/bin:/usr/bin\fR
+tavallisille käyttäjille taikka
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR
+pääkäyttäjälle. Tämän käyttäytymisen voi vaihtaa asetuksilla
+\fIENV_PATH\fR
+ja
+\fIENV_SUPATH\fR
+tiedostossa
+\fI/etc/login.defs\fR.
+.PP
+Sisäinen kirjautuminen ilmoitetaan lisäämällä "*" ensimmäiseksi merkiksi sisäänkirjautumiskuoreen. Annettua kotihakemistoa käytetään uuden tiedostojärjestelmän juurena, jonne käyttäjä tosiasiassa kirjautuu.
+.SH "VALITSIMET"
+.PP
+\fBsu\fR\-komennon valitsimet ovat:
+.TP
+\fB\-c\fR, \fB\-\-command\fR \fIKUORI\fR
+Määritä komento, jonka kuori käynnistää sen
+\fB\-c\fR\-valitsimella.
+.TP
+\fB\-\fR, \fB\-l\fR, \fB\-\-login\fR
+Tarjoa samankaltainen ympäristö kuin käyttäjä saisi kirjautuessaan suoraa sisään.
+.sp
+Kun
+\fB\-\fR
+on käytössä, se täytyy antaa viimeisenä valitsimena
+\fBsu\fR\-komennolle. Muilla valitsimilla (\fB\-l\fR
+sekä
+\fB\-\-login\fR) ei ole tätä rajoitusta.
+.TP
+\fB\-s\fR, \fB\-\-shell\fR \fIKUORI\fR
+Käynnistettävä kuori
+.sp
+Käynnistettävä kuori valitaan seuraavasti (tärkeimmästä alkaen):
+.RS
+.TP 3
+\(bu
+Kuori, joka määritetään valitsimella \-\-shell
+.TP
+\(bu
+Mikäli valitsinta
+\fB\-\-preserve\-environment\fR
+on käytetty, kuori onka määrittää ympäristömuuttuja
+\fB$SHELL\fR.
+.TP
+\(bu
+Kuori, joka on asetettu /etc/passwd\-tietueessa kohdekäyttäjälle.
+.TP
+\(bu
+/bin/sh mikäli kuorta ei löytynyt millään edellisistä tavoista.
+.RE
+.IP
+.sp
+Mikäli kohdekäyttäjällä on rajoitettu kuori (esim. kuorikenttä käyttäjän tietueessa
+\fI/etc/passwd\fR\-tiedostossa ei löydy tiedostosta
+\fI/etc/shell\fR), niin valitsin
+\fB\-\-shell\fR
+ja ympäristömuuttuja
+\fB$SHELL\fR
+jätetään huomiotta paitsi kun komennon
+\fBsu\fR
+käynnistää pääkäyttäjä.
+.TP
+\fB\-m\fR, \fB\-p\fR, \fB\-\-preserve\-environment\fR
+Säilytä nykyinen ympäristö.
+.sp
+Mikäli kohdekäyttäjällä on rajoitettu ympäristö, tällä valitsimella ei ole vaikutusta (ellei
+\fBsu\fR\-komentoa käynnistänyt pääkäyttäjä).
+.SH "VAROITUKSET"
+.PP
+Tällä versiolla
+\fBsu\fR\-sovelluksesta on useita käännösaikaisia valitsimia, ja niistä vain osa saattaa olla käytössä tietyissä paikoissa.
+.SH "TIEDOSTOT"
+.TP
+\fI/etc/passwd\fR
+käyttäjätunnuksien tiedot
+.TP
+\fI/etc/shadow\fR
+turvalliset käyttäjätunnuksien tiedot
+.SH "KATSO MYÖS"
+.PP
+\fBlogin\fR(1),
+\fBlogin.defs\fR(5),
+\fBsh\fR(1)
diff --git a/man/fr/Makefile.am b/man/fr/Makefile.am
new file mode 100644
index 0000000..230d212
--- /dev/null
+++ b/man/fr/Makefile.am
@@ -0,0 +1,80 @@
+
+mandir = @mandir@/fr
+
+man_MANS = \
+ man1/chage.1 \
+ man1/chfn.1 \
+ man8/chgpasswd.8 \
+ man8/chpasswd.8 \
+ man1/chsh.1 \
+ man1/expiry.1 \
+ man5/faillog.5 \
+ man8/faillog.8 \
+ man3/getspnam.3 \
+ man1/gpasswd.1 \
+ man8/groupadd.8 \
+ man8/groupdel.8 \
+ man8/groupmems.8 \
+ man8/groupmod.8 \
+ man1/groups.1 \
+ man8/grpck.8 \
+ man8/grpconv.8 \
+ man8/grpunconv.8 \
+ man5/gshadow.5 \
+ man8/lastlog.8 \
+ man1/login.1 \
+ man5/login.defs.5 \
+ man8/logoutd.8 \
+ man1/newgrp.1 \
+ man8/newusers.8 \
+ man8/nologin.8 \
+ man1/passwd.1 \
+ man5/passwd.5 \
+ man8/pwck.8 \
+ man8/pwconv.8 \
+ man8/pwunconv.8 \
+ man1/sg.1 \
+ man3/shadow.3 \
+ man5/shadow.5 \
+ man1/su.1 \
+ man5/suauth.5 \
+ man8/useradd.8 \
+ man8/userdel.8 \
+ man8/usermod.8 \
+ man8/vigr.8 \
+ man8/vipw.8
+
+man_nopam = \
+ man5/limits.5 \
+ man5/login.access.5 \
+ man5/porttime.5
+
+if !USE_PAM
+man_MANS += $(man_nopam)
+endif
+
+man_subids = \
+ man1/newgidmap.1 \
+ man1/newuidmap.1 \
+ man5/subgid.5 \
+ man5/subuid.5
+
+if ENABLE_SUBIDS
+man_MANS += $(man_subids)
+endif
+
+EXTRA_DIST = \
+ $(man_MANS) \
+ man1/id.1 \
+ man8/sulogin.8
+
+if USE_PAM
+EXTRA_DIST += $(man_nopam)
+endif
+
+if !ENABLE_SUBIDS
+EXTRA_DIST += $(man_subids)
+endif
+
+include ../generate_translations.mak
+
diff --git a/man/fr/Makefile.in b/man/fr/Makefile.in
new file mode 100644
index 0000000..6785060
--- /dev/null
+++ b/man/fr/Makefile.in
@@ -0,0 +1,782 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@USE_PAM_FALSE@am__append_1 = $(man_nopam)
+@ENABLE_SUBIDS_TRUE@am__append_2 = $(man_subids)
+@USE_PAM_TRUE@am__append_3 = $(man_nopam)
+@ENABLE_SUBIDS_FALSE@am__append_4 = $(man_subids)
+subdir = man/fr
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" \
+ "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"
+man3dir = $(mandir)/man3
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/../generate_mans.mak \
+ $(srcdir)/../generate_translations.mak $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@/fr
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = man1/chage.1 man1/chfn.1 man8/chgpasswd.8 man8/chpasswd.8 \
+ man1/chsh.1 man1/expiry.1 man5/faillog.5 man8/faillog.8 \
+ man3/getspnam.3 man1/gpasswd.1 man8/groupadd.8 man8/groupdel.8 \
+ man8/groupmems.8 man8/groupmod.8 man1/groups.1 man8/grpck.8 \
+ man8/grpconv.8 man8/grpunconv.8 man5/gshadow.5 man8/lastlog.8 \
+ man1/login.1 man5/login.defs.5 man8/logoutd.8 man1/newgrp.1 \
+ man8/newusers.8 man8/nologin.8 man1/passwd.1 man5/passwd.5 \
+ man8/pwck.8 man8/pwconv.8 man8/pwunconv.8 man1/sg.1 \
+ man3/shadow.3 man5/shadow.5 man1/su.1 man5/suauth.5 \
+ man8/useradd.8 man8/userdel.8 man8/usermod.8 man8/vigr.8 \
+ man8/vipw.8 $(am__append_1) $(am__append_2)
+man_nopam = \
+ man5/limits.5 \
+ man5/login.access.5 \
+ man5/porttime.5
+
+man_subids = \
+ man1/newgidmap.1 \
+ man1/newuidmap.1 \
+ man5/subgid.5 \
+ man5/subuid.5
+
+EXTRA_DIST = $(man_MANS) man1/id.1 man8/sulogin.8 $(am__append_3) \
+ $(am__append_4)
+LANG = $(notdir $(CURDIR))
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_FALSE@PAM_COND = no_pam
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_TRUE@PAM_COND = pam
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_FALSE@SHADOWGRP_COND = no_gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_TRUE@SHADOWGRP_COND = gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@WITH_TCB_FALSE@TCB_COND = no_tcb
+@ENABLE_REGENERATE_MAN_TRUE@@WITH_TCB_TRUE@TCB_COND = tcb
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_FALSE@SHA_CRYPT_COND = no_sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_TRUE@SHA_CRYPT_COND = sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@@ENABLE_SUBIDS_FALSE@SUBIDS_COND = no_subids
+@ENABLE_REGENERATE_MAN_TRUE@@ENABLE_SUBIDS_TRUE@SUBIDS_COND = subids
+CLEANFILES = messages.mo login.defs.d $(EXTRA_DIST) $(addsuffix .xml,$(EXTRA_DIST)) config.xml
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../generate_translations.mak $(srcdir)/../generate_mans.mak $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/fr/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign man/fr/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(srcdir)/../generate_translations.mak $(srcdir)/../generate_mans.mak $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+install-man3: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man3dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.3[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man3:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man3dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.3[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir)
+install-man5: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man5dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.5[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man5:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man5dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.5[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir)
+install-man8: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man8dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.8[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man8:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man8dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.8[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+@ENABLE_REGENERATE_MAN_FALSE@clean-local:
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1 install-man3 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man3 uninstall-man5 \
+ uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ clean-local cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-man3 install-man5 install-man8 \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags-am uninstall uninstall-am uninstall-man uninstall-man1 \
+ uninstall-man3 uninstall-man5 uninstall-man8
+
+.PRECIOUS: Makefile
+
+
+@ENABLE_REGENERATE_MAN_TRUE@config.xml: ../config.xml.in
+@ENABLE_REGENERATE_MAN_TRUE@ $(MAKE) -C .. config.xml
+@ENABLE_REGENERATE_MAN_TRUE@ cp ../config.xml $@
+
+@ENABLE_REGENERATE_MAN_TRUE@messages.mo: ../po/$(LANG).po
+@ENABLE_REGENERATE_MAN_TRUE@ msgfmt ../po/$(LANG).po -o messages.mo
+
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.d:
+@ENABLE_REGENERATE_MAN_TRUE@ ln -sf ../login.defs.d login.defs.d
+
+@ENABLE_REGENERATE_MAN_TRUE@%.xml: ../%.xml messages.mo login.defs.d
+@ENABLE_REGENERATE_MAN_TRUE@ if grep -q SHADOW-CONFIG-HERE $< ; then \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^<!-- SHADOW-CONFIG-HERE -->/<!ENTITY % config SYSTEM "config.xml">%config;/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ else \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^\(<!DOCTYPE .*docbookx.dtd"\)>/\1 [<!ENTITY % config SYSTEM "config.xml">%config;]>/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ fi
+@ENABLE_REGENERATE_MAN_TRUE@ itstool -d -l $(LANG) -m messages.mo -o . $@
+@ENABLE_REGENERATE_MAN_TRUE@ sed -i 's:\(^<refentry .*\)>:\1 lang="$(LANG)">:' $@
+
+@ENABLE_REGENERATE_MAN_TRUE@%.xml-config: %.xml
+@ENABLE_REGENERATE_MAN_TRUE@ if grep -q SHADOW-CONFIG-HERE $<; then \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^<!-- SHADOW-CONFIG-HERE -->/<!ENTITY % config SYSTEM "config.xml">%config;/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ else \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^\(<!DOCTYPE .*docbookx.dtd"\)>/\1 [<!ENTITY % config SYSTEM "config.xml">%config;]>/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ fi
+
+@ENABLE_REGENERATE_MAN_TRUE@man1/% man3/% man5/% man8/%: %.xml-config Makefile config.xml
+@ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam profile.condition "$(PAM_COND);$(SHADOWGRP_COND);$(TCB_COND);$(SHA_CRYPT_COND);$(SUBIDS_COND)" \
+@ENABLE_REGENERATE_MAN_TRUE@ --param "man.authors.section.enabled" "0" \
+@ENABLE_REGENERATE_MAN_TRUE@ --stringparam "man.output.base.dir" "" \
+@ENABLE_REGENERATE_MAN_TRUE@ --param "man.output.in.separate.dir" "1" \
+@ENABLE_REGENERATE_MAN_TRUE@ -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/profile-docbook.xsl $<
+
+@ENABLE_REGENERATE_MAN_TRUE@clean-local:
+@ENABLE_REGENERATE_MAN_TRUE@ rm -rf man1 man3 man5 man8
+
+#$(man_MANS):
+# @echo you need to run configure with --enable-man to generate man pages
+
+@ENABLE_REGENERATE_MAN_TRUE@man8/grpconv.8 man8/grpunconv.8 man8/pwunconv.8: man8/pwconv.8
+
+@ENABLE_REGENERATE_MAN_TRUE@man3/getspnam.3: man3/shadow.3
+
+@ENABLE_REGENERATE_MAN_TRUE@man8/vigr.8: man8/vipw.8
+
+@ENABLE_REGENERATE_MAN_FALSE@$(man_MANS):
+@ENABLE_REGENERATE_MAN_FALSE@ @echo you need to run configure with --enable-man to generate man pages
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/fr/man1/chage.1 b/man/fr/man1/chage.1
new file mode 100644
index 0000000..9c72778
--- /dev/null
+++ b/man/fr/man1/chage.1
@@ -0,0 +1,189 @@
+'\" t
+.\" Title: chage
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes utilisateur
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "CHAGE" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes utilisateur"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+chage \- Modifier les informations de validit\('e d\*(Aqun mot de passe
+.SH "SYNOPSIS"
+.HP \w'\fBchage\fR\ 'u
+\fBchage\fR [\fIoptions\fR] \fILOGIN\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBchage\fR
+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\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBchage\fR
+command are:
+.PP
+\fB\-d\fR, \fB\-\-lastday\fR\ \&\fILAST_DAY\fR
+.RS 4
+Configurer le nombre du jour, \(`a compter du 1er\ \&janvier\ \&1970, o\(`u le mot de passe a \('et\('e chang\('e la derni\(`ere fois\&. La date peut aussi \(^etre exprim\('ee dans le format AAAA\-MM\-JJ (ou le format utilis\('e plus commun\('ement dans votre r\('egion)\&.
+.RE
+.PP
+\fB\-E\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+Configurer la date, ou le nombre de jours \(`a compter du 1er\ \&janvier\ \&1970, \(`a partir de laquelle le compte de l\*(Aqutilisateur ne sera plus accessible\&. La date peut aussi \(^etre exprim\('ee dans le format AAAA\-MM\-JJ (ou le format plus commun\('ement utilis\('e dans votre r\('egion)\&. Un utilisateur dont le compte est bloqu\('e doit contacter l\*(Aqadministrateur syst\(`eme pour pouvoir utiliser \(`a nouveau le syst\(`eme\&.
+.sp
+Passing the number
+\fI\-1\fR
+as the
+\fIEXPIRE_DATE\fR
+will remove an account expiration date\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\*(Aqaide et quitter\&.
+.RE
+.PP
+\fB\-i\fR, \fB\-\-iso8601\fR
+.RS 4
+When printing dates, use YYYY\-MM\-DD format\&.
+.RE
+.PP
+\fB\-I\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+Set the number of days of inactivity after a password has expired before the account is locked\&. The
+\fIINACTIVE\fR
+option is the number of days of inactivity\&. A user whose account is locked must contact the system administrator before being able to use the system again\&.
+.sp
+Passing the number
+\fI\-1\fR
+as the
+\fIINACTIVE\fR
+will remove an account\*(Aqs inactivity\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-list\fR
+.RS 4
+Afficher les informations sur l\*(Aq\(^age des comptes\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-mindays\fR\ \&\fIMIN_DAYS\fR
+.RS 4
+Set the minimum number of days between password changes to
+\fIMIN_DAYS\fR\&. A value of zero for this field indicates that the user may change their password at any time\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-maxdays\fR\ \&\fIMAX_DAYS\fR
+.RS 4
+Set the maximum number of days during which a password is valid\&. When
+\fIMAX_DAYS\fR
+plus
+\fILAST_DAY\fR
+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
+\fB\-W\fR
+option, which provides the user with advance warning\&.
+.sp
+Passing the number
+\fI\-1\fR
+as
+\fIMAX_DAYS\fR
+will remove checking a password\*(Aqs validity\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-W\fR, \fB\-\-warndays\fR\ \&\fIWARN_DAYS\fR
+.RS 4
+Set the number of days of warning before a password change is required\&. The
+\fIWARN_DAYS\fR
+option is the number of days prior to the password expiring that a user will be warned their password is about to expire\&.
+.RE
+.PP
+If none of the options are selected,
+\fBchage\fR
+operates in an interactive fashion, prompting the user with the current values for all of the fields\&. Enter the new value to change the field, or leave the line blank to use the current value\&. The current value is displayed between a pair of
+\fI[ ]\fR
+marks\&.
+.SH "NOTE"
+.PP
+The
+\fBchage\fR
+program requires a shadow password file to be available\&.
+.PP
+The
+\fBchage\fR
+command is restricted to the root user, except for the
+\fB\-l\fR
+option, which may be used by an unprivileged user to determine when their password or account is due to expire\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.SH "FICHIERS"
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.SH "VALEURS DE RETOUR"
+.PP
+The
+\fBchage\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+permission denied
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI15\fR
+.RS 4
+can\*(Aqt find the shadow password file
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/fr/man1/chfn.1 b/man/fr/man1/chfn.1
new file mode 100644
index 0000000..ae2622d
--- /dev/null
+++ b/man/fr/man1/chfn.1
@@ -0,0 +1,163 @@
+'\" t
+.\" Title: chfn
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes utilisateur
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "CHFN" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes utilisateur"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+chfn \- Modifier le nom complet et les informations associ\('ees \(`a un utilisateur
+.SH "SYNOPSIS"
+.HP \w'\fBchfn\fR\ 'u
+\fBchfn\fR [\fIoptions\fR] [\fILOGIN\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBchfn\fR
+command changes user fullname, office room number, office phone number, and home phone number information for a user\*(Aqs account\&. This information is typically printed by
+\fBfinger\fR(1)
+and similar programs\&. A normal user may only change the fields for her own account, subject to the restrictions in
+/etc/login\&.defs\&. (The default configuration is to prevent users from changing their fullname\&.) The superuser may change any field for any account\&. Additionally, only the superuser may use the
+\fB\-o\fR
+option to change the undefined portions of the GECOS field\&.
+.PP
+These fields must not contain any colons\&. Except for the
+\fIother\fR
+field, they should not contain any comma or equal sign\&. It is also recommended to avoid non\-US\-ASCII characters, but this is only enforced for the phone numbers\&. The
+\fIother\fR
+field is used to store accounting information used by other applications\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBchfn\fR
+command are:
+.PP
+\fB\-f\fR, \fB\-\-full\-name\fR\ \&\fIFULL_NAME\fR
+.RS 4
+Modifier le nom complet de l\*(Aqutilisateur\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-home\-phone\fR\ \&\fIHOME_PHONE\fR
+.RS 4
+Modifier le num\('ero de t\('el\('ephone personnel de l\*(Aqutilisateur\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-other\fR\ \&\fIOTHER\fR
+.RS 4
+Modifier les informations GECO de l\*(Aqutilisateur\&. Ce champ est utilis\('e pour enregistrer les informations de l\*(Aqutilisateur utilis\('ees par d\*(Aqautres applications et peut \(^etre chang\('e seulement par un superutilisateur\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-room\fR\ \&\fIROOM_NUMBER\fR
+.RS 4
+Modifier le num\('ero de bureau de l\*(Aqutilisateur\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\*(Aqaide et quitter\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-work\-phone\fR\ \&\fIWORK_PHONE\fR
+.RS 4
+Modifier le num\('ero de t\('el\('ephone professionnel de l\*(Aqutilisateur\&.
+.RE
+.PP
+If none of the options are selected,
+\fBchfn\fR
+operates in an interactive fashion, prompting the user with the current values for all of the fields\&. Enter the new value to change the field, or leave the line blank to use the current value\&. The current value is displayed between a pair of
+\fB[ ]\fR
+marks\&. Without options,
+\fBchfn\fR
+prompts for the current user account\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHFN_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchfn\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCHFN_RESTRICT\fR (string)
+.RS 4
+This parameter specifies which values in the
+\fIgecos\fR
+field of the
+/etc/passwd
+file may be changed by regular users using the
+\fBchfn\fR
+program\&. It can be any combination of letters
+\fIf\fR,
+\fIr\fR,
+\fIw\fR,
+\fIh\fR, for Full name, Room number, Work phone, and Home phone, respectively\&. For backward compatibility,
+\fIyes\fR
+is equivalent to
+\fIrwh\fR
+and
+\fIno\fR
+is equivalent to
+\fIfrwh\fR\&. If not specified, only the superuser can make any changes\&. The most restrictive setting is better achieved by not installing
+\fBchfn\fR
+SUID\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+La cha\(^ine de caract\(`eres utilis\('ee pour l\*(Aqinvite de mot de passe\&. La valeur par d\('efaut est d\*(Aqutiliser "Password: " (\(Fo\ \&mot de passe\ \&:\ \&\(Fc), ou une traduction de cette cha\(^ine\&. Si vous d\('efinissez cette variable, l\*(Aqinvite ne sera pas traduite\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBchsh\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/fr/man1/chsh.1 b/man/fr/man1/chsh.1
new file mode 100644
index 0000000..a50d861
--- /dev/null
+++ b/man/fr/man1/chsh.1
@@ -0,0 +1,121 @@
+'\" t
+.\" Title: chsh
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes utilisateur
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "CHSH" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes utilisateur"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+chsh \- Changer l\*(Aqinterpr\('eteur de commandes initial
+.SH "SYNOPSIS"
+.HP \w'\fBchsh\fR\ 'u
+\fBchsh\fR [\fIoptions\fR] [\fILOGIN\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBchsh\fR
+command changes the user login shell\&. This determines the name of the user\*(Aqs initial login command\&. A normal user may only change the login shell for her own account; the superuser may change the login shell for any account\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBchsh\fR
+command are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\*(Aqaide et quitter\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+Nom du nouvel interpr\('eteur de commandes initial (\(Fo\ \&login shell\ \&\(Fc) de l\*(Aqutilisateur\&. Si ce champ est vide, le syst\(`eme s\('electionnera l\*(Aqinterpr\('eteur de commandes initial par d\('efaut\&.
+.RE
+.PP
+If the
+\fB\-s\fR
+option is not selected,
+\fBchsh\fR
+operates in an interactive fashion, prompting the user with the current login shell\&. Enter the new value to change the shell, or leave the line blank to use the current one\&. The current shell is displayed between a pair of
+\fI[ ]\fR
+marks\&.
+.SH "NOTE"
+.PP
+The only restriction placed on the login shell is that the command name must be listed in
+/etc/shells, unless the invoker is the superuser, and then any value may be added\&. An account with a restricted login shell may not change her login shell\&. For this reason, placing
+/bin/rsh
+in
+/etc/shells
+is discouraged since accidentally changing to a restricted shell would prevent the user from ever changing her login shell back to its original value\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHSH_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchsh\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+La cha\(^ine de caract\(`eres utilis\('ee pour l\*(Aqinvite de mot de passe\&. La valeur par d\('efaut est d\*(Aqutiliser "Password: " (\(Fo\ \&mot de passe\ \&:\ \&\(Fc), ou une traduction de cette cha\(^ine\&. Si vous d\('efinissez cette variable, l\*(Aqinvite ne sera pas traduite\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shells
+.RS 4
+Liste des interpr\('eteurs de commandes initiaux valables\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBchfn\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/fr/man1/expiry.1 b/man/fr/man1/expiry.1
new file mode 100644
index 0000000..9e95ce8
--- /dev/null
+++ b/man/fr/man1/expiry.1
@@ -0,0 +1,74 @@
+'\" t
+.\" Title: expiry
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes utilisateur
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "EXPIRY" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes utilisateur"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+expiry \- V\('erifier et s\('ecuriser la dur\('ee de validit\('e des mots de passe
+.SH "SYNOPSIS"
+.HP \w'\fBexpiry\fR\ 'u
+\fBexpiry\fR \fIoption\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBexpiry\fR
+command checks (\fB\-c\fR) the current password expiration and forces (\fB\-f\fR) changes when required\&. It is callable as a normal user command\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBexpiry\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-check\fR
+.RS 4
+V\('erifier la dur\('ee de validit\('e du mot de passe de l\*(Aqutilisateur courant\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+Forcer le changement du mot de passe si l\*(Aqutilisateur courant poss\(`ede un mot de passe qui a expir\('e\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\*(Aqaide et quitter\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/fr/man1/gpasswd.1 b/man/fr/man1/gpasswd.1
new file mode 100644
index 0000000..f7f6ccc
--- /dev/null
+++ b/man/fr/man1/gpasswd.1
@@ -0,0 +1,232 @@
+'\" t
+.\" Title: gpasswd
+.\" Author: rafal Maszkowski
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes utilisateur
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "GPASSWD" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes utilisateur"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+gpasswd \- administer /etc/group and /etc/gshadow
+.SH "SYNOPSIS"
+.HP \w'\fBgpasswd\fR\ 'u
+\fBgpasswd\fR [\fIoption\fR] \fIgroupe\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBgpasswd\fR
+command is used to administer
+/etc/group, and /etc/gshadow\&. Every group can have
+administrators,
+members and a password\&.
+.PP
+System administrators can use the
+\fB\-A\fR
+option to define group administrator(s) and the
+\fB\-M\fR
+option to define members\&. They have all rights of group administrators and members\&.
+.PP
+\fBgpasswd\fR
+called by
+a group administrator
+with a group name only prompts for the new password of the
+\fIgroup\fR\&.
+.PP
+If a password is set the members can still use
+\fBnewgrp\fR(1)
+without a password, and non\-members must supply the password\&.
+.SS "Notes sur les mots de passe de groupe"
+.PP
+Les mots de passe de groupe repr\('esentent naturellement un risque en mati\(`ere de s\('ecurit\('e, puisque plusieurs personnes ont connaissance du mot de passe\&. Cependant, les groupes sont utiles pour permettre la coop\('eration entre diff\('erents utilisateurs\&.
+.SH "OPTIONS"
+.PP
+Except for the
+\fB\-A\fR
+and
+\fB\-M\fR
+options, the options cannot be combined\&.
+.PP
+The options which apply to the
+\fBgpasswd\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-add\fR\ \&\fIuser\fR
+.RS 4
+Add the
+\fIuser\fR
+to the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR\ \&\fIuser\fR
+.RS 4
+Remove the
+\fIuser\fR
+from the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\*(Aqaide et quitter\&.
+.RE
+.PP
+\fB\-Q\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-remove\-password\fR
+.RS 4
+Remove the password from the named
+\fIgroup\fR\&. The group password will be empty\&. Only group members will be allowed to use
+\fBnewgrp\fR
+to join the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-restrict\fR
+.RS 4
+Restrict the access to the named
+\fIgroup\fR\&. The group password is set to "!"\&. Only group members with a password will be allowed to use
+\fBnewgrp\fR
+to join the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-A\fR, \fB\-\-administrators\fR\ \&\fIuser\fR,\&.\&.\&.
+.RS 4
+Configurer la liste des administrateurs\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-members\fR\ \&\fIuser\fR,\&.\&.\&.
+.RS 4
+Configurer la liste des membres du groupe\&.
+.RE
+.SH "AVERTISSEMENTS"
+.PP
+This tool only operates on the
+/etc/group
+and /etc/gshadow files\&.
+Thus you cannot change any NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+D\('efinir les algorithmes de chiffrement par d\('efaut du syst\(`eme pour coder les mots de passes (si aucun algorithme n\*(Aqa \('et\('e indiqu\('e sur la ligne de commandes)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+La valeur par d\('efaut est 0, ce qui signifie qu\*(Aqil n\*(Aqy a pas de limites pour le nombre de membres dans un groupe\&.
+.sp
+Cette fonctionnalit\('e (groupe d\('ecoup\('e) permet de limiter la longueur des lignes dans le fichier de groupes\&. Ceci est utile pour s\*(Aqassurer que les lignes pour les groupes NIS ne sont pas plus grandes que 1024 caract\(`eres\&.
+.sp
+Si vous avez besoin de configurer cette limite, vous pouvez utiliser 25\&.
+.sp
+Remarque\ \&: les groupes d\('ecoup\('es ne sont peut\-\(^etre pas pris en charge par tous les outils (m\(^eme dans la suite d\*(Aqoutils Shadow)\&. Vous ne devriez pas utiliser cette variable, sauf si vous en avez vraiment besoin\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+Avec beaucoup de rounds, il est plus difficile de trouver le mot de passe avec une attaque par force brute\&. Veuillez remarquer que plus de ressources processeur seront n\('ecessaires pour authentifier les utilisateurs\&.
+.sp
+Si non pr\('ecis\('ee, la libc utilisera le nombre de rounds par d\('efaut (5000)\&.
+.sp
+Les valeurs doivent \(^etre comprises dans l\*(Aqintervalle 1\ \&000\ \&\-\ \&999\ \&999\ \&999\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informations s\('ecuris\('ees sur les groupes\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBnewgrp\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBgrpck\fR(8),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/fr/man1/groups.1 b/man/fr/man1/groups.1
new file mode 100644
index 0000000..f84e107
--- /dev/null
+++ b/man/fr/man1/groups.1
@@ -0,0 +1,64 @@
+'\" t
+.\" Title: groups
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes utilisateur
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "GROUPS" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes utilisateur"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+groups \- Afficher la liste des groupes auxquels appartient l\*(Aqutilisateur
+.SH "SYNOPSIS"
+.HP \w'\fBgroups\fR\ 'u
+\fBgroups\fR [\fIutilisateur\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBgroups\fR
+command displays the current group names or ID values\&. If the value does not have a corresponding entry in
+/etc/group, the value will be displayed as the numerical group value\&. The optional
+\fIuser\fR
+parameter will display the groups for the named
+\fIuser\fR\&.
+.SH "NOTE"
+.PP
+Systems which do not support concurrent group sets will have the information from
+/etc/group
+reported\&. The user must use
+\fBnewgrp\fR
+or
+\fBsg\fR
+to change his current real and effective group ID\&.
+.SH "FICHIERS"
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBnewgrp\fR(1),
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)\&.
diff --git a/man/fr/man1/id.1 b/man/fr/man1/id.1
new file mode 100644
index 0000000..52d93b7
--- /dev/null
+++ b/man/fr/man1/id.1
@@ -0,0 +1,60 @@
+'\" t
+.\" Title: id
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes utilisateur
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "ID" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes utilisateur"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+id \- display current user and group ID names
+.SH "SYNOPSIS"
+.HP \w'\fBid\fR\ 'u
+\fBid\fR [\-a]
+.SH "DESCRIPTION"
+.PP
+The
+\fBid\fR
+command displays the current real and effective user and group ID names or values\&. If the value does not have a corresponding entry in
+/etc/passwd
+or
+/etc/group, the value will be displayed without the corresponding name\&. The optional
+\fB\-a\fR
+flag will display the group set on systems which support multiple concurrent group membership\&.
+.SH "FICHIERS"
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)
diff --git a/man/fr/man1/login.1 b/man/fr/man1/login.1
new file mode 100644
index 0000000..07b70f8
--- /dev/null
+++ b/man/fr/man1/login.1
@@ -0,0 +1,487 @@
+'\" t
+.\" Title: login
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes utilisateur
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "LOGIN" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes utilisateur"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+login \- D\('emarrer une session sur le syst\(`eme
+.SH "SYNOPSIS"
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] [\-h\ \fIhost\fR] [\fInom_utilisateur\fR] [\fIENV=VAR\fR...]
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] [\-h\ \fIhost\fR] \-f \fInom_utilisateur\fR
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] \-r\ \fIhost\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBlogin\fR
+program is used to establish a new session with the system\&. It is normally invoked automatically by responding to the
+\fIlogin:\fR
+prompt on the user\*(Aqs terminal\&.
+\fBlogin\fR
+may be special to the shell and may not be invoked as a sub\-process\&. When called from a shell,
+\fBlogin\fR
+should be executed as
+\fBexec login\fR
+which will cause the user to exit from the current shell (and thus will prevent the new logged in user to return to the session of the caller)\&. Attempting to execute
+\fBlogin\fR
+from any shell but the login shell will produce an error message\&.
+.PP
+The user is then prompted for a password, where appropriate\&. Echoing is disabled to prevent revealing the password\&. Only a small number of password failures are permitted before
+\fBlogin\fR
+exits and the communications link is severed\&.
+.PP
+If password aging has been enabled for your account, you may be prompted for a new password before proceeding\&. You will be forced to provide your old password and the new password before continuing\&. Please refer to
+\fBpasswd\fR(1)
+for more information\&.
+.PP
+After a successful login, you will be informed of any system messages and the presence of mail\&. You may turn off the printing of the system message file,
+/etc/motd, by creating a zero\-length file
+\&.hushlogin
+in your login directory\&. The mail message will be one of "\fIYou have new mail\&.\fR", "\fIYou have mail\&.\fR", or "\fINo Mail\&.\fR" according to the condition of your mailbox\&.
+.PP
+Your user and group ID will be set according to their values in the
+/etc/passwd
+file\&. The value for
+\fB$HOME\fR,
+\fB$SHELL\fR,
+\fB$PATH\fR,
+\fB$LOGNAME\fR, and
+\fB$MAIL\fR
+are set according to the appropriate fields in the password entry\&. Ulimit, umask and nice values may also be set according to entries in the GECOS field\&.
+.PP
+On some installations, the environmental variable
+\fB$TERM\fR
+will be initialized to the terminal type on your tty line, as specified in
+/etc/ttytype\&.
+.PP
+Un script d\*(Aqinitialisation pour votre interpr\('eteur de commandes pourra \('egalement \(^etre ex\('ecut\('e\&. Veuillez vous r\('ef\('erer \(`a la section de manuel appropri\('ee pour plus d\*(Aqinformations sur cette fonctionnalit\('e\&.
+.PP
+Une connexion \(`a un sous\-syst\(`eme est indiqu\('ee par la pr\('esence d\*(Aqun \(Fo\ \&*\ \&\(Fc comme premier caract\(`ere de l\*(Aqinterpr\('eteur de commandes initial\&. Le r\('epertoire personnel sera utilis\('e comme racine d\*(Aqun nouveau syst\(`eme de fichiers dans lequel l\*(Aqutilisateur sera connect\('e\&.
+.PP
+The
+\fBlogin\fR
+program is NOT responsible for removing users from the utmp file\&. It is the responsibility of
+\fBgetty\fR(8)
+and
+\fBinit\fR(8)
+to clean up apparent ownership of a terminal session\&. If you use
+\fBlogin\fR
+from the shell prompt without
+\fBexec\fR, the user you use will continue to appear to be logged in even after you log out of the "subsession"\&.
+.SH "OPTIONS"
+.PP
+\fB\-f\fR
+.RS 4
+Ne pas r\('ealiser d\*(Aqauthentification\&. L\*(Aqutilisateur est pr\('e\-authentifi\('e\&.
+.sp
+Note: In that case,
+\fIusername\fR
+is mandatory\&.
+.RE
+.PP
+\fB\-h\fR
+.RS 4
+Nom de l\*(Aqh\(^ote distant pour cette connexion\&.
+.RE
+.PP
+\fB\-p\fR
+.RS 4
+Pr\('eserver l\*(Aqenvironnement\&.
+.RE
+.PP
+\fB\-r\fR
+.RS 4
+Ex\('ecuter le protocole de connexion automatique (autologin) pour rlogin\&.
+.RE
+.PP
+The
+\fB\-r\fR,
+\fB\-h\fR
+and
+\fB\-f\fR
+options are only used when
+\fBlogin\fR
+is invoked by root\&.
+.SH "AVERTISSEMENTS"
+.PP
+This version of
+\fBlogin\fR
+has many compilation options, only some of which may be in use at any particular site\&.
+.PP
+L\*(Aqemplacement des fichiers peut varier suivant la configuration du syst\(`eme\&.
+.PP
+The
+\fBlogin\fR
+program is NOT responsible for removing users from the utmp file\&. It is the responsibility of
+\fBgetty\fR(8)
+and
+\fBinit\fR(8)
+to clean up apparent ownership of a terminal session\&. If you use
+\fBlogin\fR
+from the shell prompt without
+\fBexec\fR, the user you use will continue to appear to be logged in even after you log out of the "subsession"\&.
+.PP
+As with any program,
+\fBlogin\fR\*(Aqs appearance can be faked\&. If non\-trusted users have physical access to a machine, an attacker could use this to obtain the password of the next person coming to sit in front of the machine\&. Under Linux, the SAK mechanism can be used by users to initiate a trusted path and prevent this kind of attack\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+Si d\('efinie, soit un chemin complet du fichier contenant les noms de p\('eriph\('eriques (un par ligne), soit une liste de noms du p\('eriph\('erique d\('elimit\('ee par des \(Fo\ \&:\ \&\(Fc\&. Les connexions d\*(Aqun administrateur ne seront autoris\('ees que depuis ces p\('eriph\('eriques\&.
+.sp
+S\*(Aqil n\*(Aqest pas d\('efini, root pourra se connecter depuis n\*(Aqimporte quel p\('eriph\('erique\&.
+.sp
+Le p\('eriph\('erique doit \(^etre pr\('ecis\('e sans le pr\('efixe /dev/\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\*(Aqs supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Indiquer si la connexion est permise si on ne peut pas acc\('eder au r\('epertoire personnel\&. Le r\('eglage par d\('efaut est \(Fo\ \&no\ \&\(Fc\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value is a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value is a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/sbin:/bin:/usr/sbin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+Si ce fichier existe et est lisible, l\*(Aqenvironnement de connexion sera lu \(`a\ \& partir de lui\&. Chaque ligne doit \(^etre sous la forme nom=valeur\&.
+.sp
+Les lignes commen\(,cant par un \(Fo\ \&#\ \&\(Fc sont consid\('er\('ees comme des commentaires, et sont ignor\('ees\&.
+.RE
+.PP
+\fBERASECHAR\fR (number)
+.RS 4
+Terminal ERASE character (\fI010\fR
+= backspace,
+\fI0177\fR
+= DEL)\&.
+.sp
+La valeur peut \(^etre pr\('efix\('ee par \(Fo\ \&0\ \&\(Fc pour une valeur octale, ou \(Fo\ \&0x\ \&\(Fc pour une valeur hexad\('ecimale\&.
+.RE
+.PP
+\fBFAIL_DELAY\fR (number)
+.RS 4
+Le d\('elai en secondes avant qu\*(Aqun nouvel essai soit permis apr\(`es un \('echec de connexion\&.
+.RE
+.PP
+\fBFAILLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of
+/var/log/faillog
+login failure info\&.
+.RE
+.PP
+\fBFAKE_SHELL\fR (string)
+.RS 4
+If set,
+\fBlogin\fR
+will execute this shell instead of the users\*(Aq shell specified in
+/etc/passwd\&.
+.RE
+.PP
+\fBFTMP_FILE\fR (string)
+.RS 4
+Si d\('efinie, les \('echecs de connexion seront enregistr\('es dans le fichier sous le format utmp
+.RE
+.PP
+\fBHUSHLOGIN_FILE\fR (string)
+.RS 4
+Si d\('efinie, le fichier peut d\('esactiver tous les affichages habituels durant la s\('equence de connexion\&. Si un nom de chemin complet est sp\('ecifi\('e, alors le mode taiseux sera activ\('e si le nom ou l\*(Aqinterpr\('eteur de commandes de l\*(Aqutilisateur sont trouv\('es dans le fichier\&. Si ce n\*(Aqest pas un nom de chemin complet, alors le mode taiseux sera activ\('e si le fichier existe dans le r\('epertoire personnel de l\*(Aqutilisateur\&.
+.RE
+.PP
+\fBISSUE_FILE\fR (string)
+.RS 4
+Si d\('efinie, le fichier sera affich\('e avant chaque invite de connexion\&.
+.RE
+.PP
+\fBKILLCHAR\fR (number)
+.RS 4
+Terminal KILL character (\fI025\fR
+= CTRL/U)\&.
+.sp
+La valeur peut \(^etre pr\('efix\('ee par \(Fo\ \&0\ \&\(Fc pour une valeur octale, ou \(Fo\ \&0x\ \&\(Fc pour une valeur hexad\('ecimale\&.
+.RE
+.PP
+\fBLASTLOG_ENAB\fR (boolean)
+.RS 4
+Activer la journalisation et l\*(Aqaffichage des informations de derni\(`ere connexion de /var/log/lastlog\&.
+.RE
+.PP
+\fBLOGIN_RETRIES\fR (number)
+.RS 4
+Le nombre maximum de tentatives de connexion en cas de mauvais mot de passe\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+La cha\(^ine de caract\(`eres utilis\('ee pour l\*(Aqinvite de mot de passe\&. La valeur par d\('efaut est d\*(Aqutiliser "Password: " (\(Fo\ \&mot de passe\ \&:\ \&\(Fc), ou une traduction de cette cha\(^ine\&. Si vous d\('efinissez cette variable, l\*(Aqinvite ne sera pas traduite\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.PP
+\fBLOGIN_TIMEOUT\fR (number)
+.RS 4
+Le temps maximum en secondes pour la connexion\&.
+.RE
+.PP
+\fBLOG_OK_LOGINS\fR (boolean)
+.RS 4
+Activer la journalisation des connexions r\('eussies\&.
+.RE
+.PP
+\fBLOG_UNKFAIL_ENAB\fR (boolean)
+.RS 4
+Activer l\*(Aqaffichage des noms d\*(Aqutilisateurs inconnus quand les \('echecs de connexions sont enregistr\('es\&.
+.sp
+Remarque\ \&: la journalisation des noms d\*(Aqutilisateurs inconnus peut \(^etre un probl\(`eme de s\('ecurit\('e si un utilisateur entre son mot de passe au lieu de son nom d\*(Aqutilisateur\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+Activer le contr\(^ole et l\*(Aqaffichage du statut de la bo\(^ite aux lettres durant la connexion\&.
+.sp
+Vous devriez le d\('esactiver si les fichiers de d\('emarrage de l\*(Aqinterpr\('eteur de commandes v\('erifient d\('ej\(`a la pr\('esence de courriers (\(Fo\ \&mail \-e\ \&\(Fc ou \('equivalent)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+R\('epertoire d\*(Aqattente des courriels (\(Fo\ \&mail spool directory\ \&\(Fc)\&. Ce param\(`etre est n\('ecessaire pour manipuler les bo\(^ites \(`a lettres lorsque le compte d\*(Aqun utilisateur est modifi\('e ou supprim\('e\&. S\*(Aqil n\*(Aqest pas sp\('ecifi\('e, une valeur par d\('efaut d\('efinie \(`a la compilation est utilis\('ee\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+D\('efinir l\*(Aqemplacement des bo\(^ites aux lettres des utilisateurs relativement \(`a leur r\('epertoire personnel\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMOTD_FILE\fR (string)
+.RS 4
+Si d\('efinie, liste d\('elimit\('ee par des \(Fo\ \&:\ \&\(Fc de fichiers de \(Fo\ \&message du jour\ \&\(Fc \(`a afficher lors de la connexion\&.
+.RE
+.PP
+\fBNOLOGINS_FILE\fR (string)
+.RS 4
+Si d\('efinie, nom de fichier dont la pr\('esence emp\(^echera les connexions de quelqu\*(Aqun d\*(Aqautre que le superutilisateur\&. Le contenu de ces fichiers doit \(^etre un message indiquant pourquoi les connexions sont d\('esactiv\('ees\&.
+.RE
+.PP
+\fBPORTTIME_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable checking of time restrictions specified in
+/etc/porttime\&.
+.RE
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of resource limits from
+/etc/limits
+and ulimit, umask, and niceness from the user\*(Aqs passwd gecos field\&.
+.RE
+.PP
+\fBTTYGROUP\fR (string), \fBTTYPERM\fR (string)
+.RS 4
+The terminal permissions: the login tty will be owned by the
+\fBTTYGROUP\fR
+group, and the permissions will be set to
+\fBTTYPERM\fR\&.
+.sp
+By default, the ownership of the terminal is set to the user\*(Aqs primary group and the permissions are set to
+\fI0600\fR\&.
+.sp
+\fBTTYGROUP\fR
+can be either the name of a group or a numeric group identifier\&.
+.sp
+If you have a
+\fBwrite\fR
+program which is "setgid" to a special group which owns the terminals, define TTYGROUP to the group number and TTYPERM to 0620\&. Otherwise leave TTYGROUP commented out and assign TTYPERM to either 622 or 600\&.
+.RE
+.PP
+\fBTTYTYPE_FILE\fR (string)
+.RS 4
+Si d\('efinie, fichier qui lie les lignes de tty \(`a la variable d\*(Aqenvironnement TERM\&. Chaque ligne du fichier est dans un format ressemblant \(`a \(Fo\ \&vt100 tty01\ \&\(Fc\&.
+.RE
+.PP
+\fBULIMIT\fR (number)
+.RS 4
+Default
+\fBulimit\fR
+value\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+Valeur d\*(Aqinitialisation du masque de permissions\&. S\*(Aqil n\*(Aqest pas pr\('ecis\('e, le masque des permissions sera initialis\('e \(`a 022\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create if
+\fBHOME_MODE\fR
+is not set\&.
+.sp
+It is also used by
+\fBlogin\fR
+to define users\*(Aq initial umask\&. Note that this mask can be overridden by the user\*(Aqs GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Activer la mise en place de bits de masque de groupe (\(Fo\ \&umask group bits\ \&\(Fc) identiques \(`a ceux du propri\('etaire (exemple\ \&: 022 \-> 002, 077 \-> 007) pour les utilisateurs non privil\('egi\('es, si l\*(AqUID est identique au GID et que l\*(Aqidentifiant de connexion est identique au groupe principal\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FICHIERS"
+.PP
+/var/run/utmp
+.RS 4
+Liste des sessions de connexion en cours\&.
+.RE
+.PP
+/var/log/wtmp
+.RS 4
+Liste des sessions de connexion pr\('ec\('edentes\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.PP
+/etc/motd
+.RS 4
+Fichier contenant le message du syst\(`eme\&.
+.RE
+.PP
+/etc/nologin
+.RS 4
+Emp\(^echer les utilisateurs non\-root de se connecter\&.
+.RE
+.PP
+/etc/ttytype
+.RS 4
+Liste des types de terminaux\&.
+.RE
+.PP
+$HOME/\&.hushlogin
+.RS 4
+Supprimer l\*(Aqaffichage des messages du syst\(`eme\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBmail\fR(1),
+\fBpasswd\fR(1),
+\fBsh\fR(1),
+\fBsu\fR(1),
+\fBlogin.defs\fR(5),
+\fBnologin\fR(5),
+\fBpasswd\fR(5),
+\fBsecuretty\fR(5),
+\fBgetty\fR(8)\&.
diff --git a/man/fr/man1/newgidmap.1 b/man/fr/man1/newgidmap.1
new file mode 100644
index 0000000..4c1fee3
--- /dev/null
+++ b/man/fr/man1/newgidmap.1
@@ -0,0 +1,97 @@
+'\" t
+.\" Title: newgidmap
+.\" Author: Eric Biederman
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes utilisateur
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "NEWGIDMAP" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes utilisateur"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+newgidmap \- set the gid mapping of a user namespace
+.SH "SYNOPSIS"
+.HP \w'\fBnewgidmap\fR\ 'u
+\fBnewgidmap\fR \fIpid\fR \fIgid\fR \fIlowergid\fR \fIcount\fR [\fIgid\fR\ \fIlowergid\fR\ \fIcount\fR\ [\ \fI\&.\&.\&.\fR\ ]]
+.SH "DESCRIPTION"
+.PP
+The
+\fBnewgidmap\fR
+sets
+/proc/[pid]/gid_map
+based on its command line arguments and the gids allowed in
+/etc/subgid\&. Note that the root user is not exempted from the requirement for a valid
+/etc/subgid
+entry\&.
+.PP
+After the pid argument,
+\fBnewgidmap\fR
+expects sets of 3 integers:
+.PP
+gid
+.RS 4
+Beginning of the range of GIDs inside the user namespace\&.
+.RE
+.PP
+lowergid
+.RS 4
+Beginning of the range of GIDs outside the user namespace\&.
+.RE
+.PP
+count
+.RS 4
+Length of the ranges (both inside and outside the user namespace)\&.
+.RE
+.PP
+\fBnewgidmap\fR
+verifies that the caller is the owner of the process indicated by
+\fBpid\fR
+and that for each of the above sets, each of the GIDs in the range [lowergid, lowergid+count] is allowed to the caller according to
+/etc/subgid
+before setting
+/proc/[pid]/gid_map\&.
+.PP
+Note that newgidmap may be used only once for a given process\&.
+.SH "OPTIONS"
+.PP
+There currently are no options to the
+\fBnewgidmap\fR
+command\&.
+.SH "FICHIERS"
+.PP
+/etc/subgid
+.RS 4
+List of user\*(Aqs subordinate group IDs\&.
+.RE
+.PP
+/proc/[pid]/gid_map
+.RS 4
+Mapping of gids from one between user namespaces\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBlogin.defs\fR(5),
+\fBnewusers\fR(8),
+\fBsubgid\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/fr/man1/newgrp.1 b/man/fr/man1/newgrp.1
new file mode 100644
index 0000000..e60a24d
--- /dev/null
+++ b/man/fr/man1/newgrp.1
@@ -0,0 +1,98 @@
+'\" t
+.\" Title: newgrp
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes utilisateur
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "NEWGRP" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes utilisateur"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+newgrp \- se connecter avec un nouveau groupe
+.SH "SYNOPSIS"
+.HP \w'\fBnewgrp\fR\ 'u
+\fBnewgrp\fR [\-] [\fIgroupe\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBnewgrp\fR
+command is used to change the current group ID during a login session\&. If the optional
+\fB\-\fR
+flag is given, the user\*(Aqs environment will be reinitialized as though the user had logged in, otherwise the current environment, including current working directory, remains unchanged\&.
+.PP
+\fBnewgrp\fR
+changes the current real group ID to the named group, or to the default group listed in
+/etc/passwd
+if no group name is given\&.
+\fBnewgrp\fR
+also tries to add the group to the user groupset\&. If not root, the user will be prompted for a password if she does not have a password (in
+/etc/shadow
+if this user has an entry in the shadowed password file, or in
+/etc/passwd
+otherwise) and the group does, or if the user is not listed as a member and the group has a password\&. The user will be denied access if the group password is empty and the user is not listed as a member\&.
+.PP
+If there is an entry for this group in
+/etc/gshadow, then the list of members and the password of this group will be taken from this file, otherwise, the entry in
+/etc/group
+is considered\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informations s\('ecuris\('ees sur les groupes\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBsu\fR(1),
+\fBsg\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/fr/man1/newuidmap.1 b/man/fr/man1/newuidmap.1
new file mode 100644
index 0000000..21e55e6
--- /dev/null
+++ b/man/fr/man1/newuidmap.1
@@ -0,0 +1,97 @@
+'\" t
+.\" Title: newuidmap
+.\" Author: Eric Biederman
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes utilisateur
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "NEWUIDMAP" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes utilisateur"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+newuidmap \- set the uid mapping of a user namespace
+.SH "SYNOPSIS"
+.HP \w'\fBnewuidmap\fR\ 'u
+\fBnewuidmap\fR \fIpid\fR \fIuid\fR \fIloweruid\fR \fIcount\fR [\fIuid\fR\ \fIloweruid\fR\ \fIcount\fR\ [\ \fI\&.\&.\&.\fR\ ]]
+.SH "DESCRIPTION"
+.PP
+The
+\fBnewuidmap\fR
+sets
+/proc/[pid]/uid_map
+based on its command line arguments and the uids allowed in
+/etc/subuid\&. Note that the root user is not exempted from the requirement for a valid
+/etc/subuid
+entry\&.
+.PP
+After the pid argument,
+\fBnewuidmap\fR
+expects sets of 3 integers:
+.PP
+uid
+.RS 4
+Beginning of the range of UIDs inside the user namespace\&.
+.RE
+.PP
+loweruid
+.RS 4
+Beginning of the range of UIDs outside the user namespace\&.
+.RE
+.PP
+count
+.RS 4
+Length of the ranges (both inside and outside the user namespace)\&.
+.RE
+.PP
+\fBnewuidmap\fR
+verifies that the caller is the owner of the process indicated by
+\fBpid\fR
+and that for each of the above sets, each of the UIDs in the range [loweruid, loweruid+count] is allowed to the caller according to
+/etc/subuid
+before setting
+/proc/[pid]/uid_map\&.
+.PP
+Note that newuidmap may be used only once for a given process\&.
+.SH "OPTIONS"
+.PP
+There currently are no options to the
+\fBnewuidmap\fR
+command\&.
+.SH "FICHIERS"
+.PP
+/etc/subuid
+.RS 4
+List of user\*(Aqs subordinate user IDs\&.
+.RE
+.PP
+/proc/[pid]/uid_map
+.RS 4
+Mapping of uids from one between user namespaces\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBlogin.defs\fR(5),
+\fBnewusers\fR(8),
+\fBsubuid\fR(5),
+\fBuseradd\fR(8),
+\fBusermod\fR(8),
+\fBuserdel\fR(8)\&.
diff --git a/man/fr/man1/passwd.1 b/man/fr/man1/passwd.1
new file mode 100644
index 0000000..446e85b
--- /dev/null
+++ b/man/fr/man1/passwd.1
@@ -0,0 +1,365 @@
+'\" t
+.\" Title: passwd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes utilisateur
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "PASSWD" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes utilisateur"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+passwd \- Modifier le mot de passe d\*(Aqun utilisateur
+.SH "SYNOPSIS"
+.HP \w'\fBpasswd\fR\ 'u
+\fBpasswd\fR [\fIoptions\fR] [\fILOGIN\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBpasswd\fR
+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\&.
+\fBpasswd\fR
+also changes the account or associated password validity period\&.
+.SS "Modifications du mot de passe"
+.PP
+Dans un premier temps, l\*(Aqutilisateur doit fournir son ancien mot de passe, s\*(Aqil en avait un\&. Ce mot de passe est ensuite chiffr\('e puis compar\('e avec le mot de passe enregistr\('e\&. L\*(Aqutilisateur n\*(Aqa droit qu\*(Aq\(`a un seul essai pour entrer le mot de passe correct\&. Le superutilisateur peut contourner cette premi\(`ere \('etape de mani\(`ere \(`a changer les mots de passe ayant \('et\('e oubli\('es\&.
+.PP
+After the password has been entered, password aging information is checked to see if the user is permitted to change the password at this time\&. If not,
+\fBpasswd\fR
+refuses to change the password and exits\&.
+.PP
+Le nouveau mot de passe sera demand\('e deux fois \(`a l\*(Aqutilisateur\&. Le second mot de passe est compar\('e avec le premier\&. Ces deux mots de passe devront \(^etre identiques pour que le mot de passe soit chang\('e\&.
+.PP
+La complexit\('e de ce mot de passe est alors test\('ee\&. Comme ligne de conduite g\('en\('erale, un mot de passe doit toujours \(^etre constitu\('e de 6 \(`a 8 caract\(`eres en en choisissant un ou plus parmi chacun des ensembles suivants\ \&:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+caract\(`eres alphab\('etiques minuscules
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+chiffres de 0 \(`a 9
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+marques de ponctuation
+.RE
+.PP
+Care must be taken not to include the system default erase or kill characters\&.
+\fBpasswd\fR
+will reject any password which is not suitably complex\&.
+.SS "Astuces pour les mots de passe"
+.PP
+The security of a password depends upon the strength of the encryption algorithm and the size of the key space\&. The legacy
+\fIUNIX\fR
+System encryption method is based on the NBS DES algorithm\&. More recent methods are now recommended (see
+\fBENCRYPT_METHOD\fR)\&. The size of the key space depends upon the randomness of the password which is selected\&.
+.PP
+Les compromissions de la s\('ecurit\('e des mots de passe r\('esultent le plus souvent d\*(Aqune n\('egligence dans le choix du mot de passe, ou lors de son utilisation\&. Pour cette raison, vous ne devez pas s\('electionner de mot de passe apparaissant dans un dictionnaire ou devant \(^etre \('ecrit\&. Le mot de passe ne doit pas non plus \(^etre un nom propre, un num\('ero min\('eralogique, une date de naissance, ou une adresse\&. En effet ceux\-ci pourraient \(^etre devin\('es pour violer la s\('ecurit\('e du syst\(`eme\&.
+.PP
+Vous pouvez trouver des conseils sur la fa\(,con de choisir un mot de passe robuste sur http://en\&.wikipedia\&.org/wiki/Password_strength (en anglais)\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBpasswd\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+This option can be used only with
+\fB\-S\fR
+and causes show status for all users\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR
+.RS 4
+Supprimer le mot de passe (le rendre vide) d\*(Aqun utilisateur\&. C\*(Aqest une fa\(,con rapide de supprimer l\*(Aqauthentification par mot de passe pour un compte\&. Il rend le compte indiqu\('e sans mot de passe\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expire\fR
+.RS 4
+Annuler imm\('ediatement la validit\('e du mot de passe d\*(Aqun compte\&. Ceci permet d\*(Aqobliger un utilisateur \(`a changer son mot de passe lors de sa prochaine connexion\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\*(Aqaide et quitter\&.
+.RE
+.PP
+\fB\-i\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+This option is used to disable an account after the password has been expired for a number of days\&. After a user account has had an expired password for
+\fIINACTIVE\fR
+days, the user may no longer sign on to the account\&.
+.RE
+.PP
+\fB\-k\fR, \fB\-\-keep\-tokens\fR
+.RS 4
+Indiquer que la modification de mot de passe ne sera effectu\('ee que lors de l\*(Aqexpiration des jetons d\*(Aqauthentification (mots de passe)\&. C\*(Aqest utile dans le cas o\(`u l\*(Aqutilisateur voudrait conserver ses jetons d\*(Aqauthentification encore valables\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\fR
+.RS 4
+Verrouiller le mot de passe du compte indiqu\('e\&. Cette option d\('esactive un mot de passe en le modifiant par une valeur qui ne correspond pas \(`a un mot de passe chiffr\('e possible (cela ajoute un \(Fo\ \&!\ \&\(Fc au d\('ebut du mot de passe)\&.
+.sp
+Note that this does not disable the account\&. The user may still be able to login using another authentication token (e\&.g\&. an SSH key)\&. To disable the account, administrators should use
+\fBusermod \-\-expiredate 1\fR
+(this set the account\*(Aqs expire date to Jan 2, 1970)\&.
+.sp
+Les utilisateurs avec un mot de passe verrouill\('e ne sont pas autoris\('es \(`a le changer\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-mindays\fR\ \&\fIMIN_DAYS\fR
+.RS 4
+Set the minimum number of days between password changes to
+\fIMIN_DAYS\fR\&. A value of zero for this field indicates that the user may change their password at any time\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Mode silencieux\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-repository\fR\ \&\fIREPOSITORY\fR
+.RS 4
+change password in
+\fIREPOSITORY\fR
+repository
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-S\fR, \fB\-\-status\fR
+.RS 4
+Afficher l\*(Aq\('etat d\*(Aqun compte\&. Cet \('etat est constitu\('e de 7 champs\&. Le premier champ est le nom du compte\&. Le second champ indique si le mot de passe est bloqu\('e (L), n\*(Aqa pas de mot de passe (NP) ou a un mot de passe utilisable (P)\&. Le troisi\(`eme champ donne la date de derni\(`ere modification du mot de passe\&. Les quatre champs suivants sont\ \&: la dur\('ee minimum avant modification, la dur\('ee maximum de validit\('e, la dur\('ee d\*(Aqavertissement, et la dur\('ee d\*(Aqinactivit\('e autoris\('ee pour le mot de passe\&. Les dur\('ees sont exprim\('ees en jours\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-unlock\fR
+.RS 4
+Unlock the password of the named account\&. This option re\-enables a password by changing the password back to its previous value (to the value before using the
+\fB\-l\fR
+option)\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-warndays\fR\ \&\fIWARN_DAYS\fR
+.RS 4
+Set the number of days of warning before a password change is required\&. The
+\fIWARN_DAYS\fR
+option is the number of days prior to the password expiring that a user will be warned that their password is about to expire\&.
+.RE
+.PP
+\fB\-x\fR, \fB\-\-maxdays\fR\ \&\fIMAX_DAYS\fR
+.RS 4
+Set the maximum number of days a password remains valid\&. After
+\fIMAX_DAYS\fR, the password is required to be changed\&.
+.sp
+Passing the number
+\fI\-1\fR
+as
+\fIMAX_DAYS\fR
+will remove checking a password\*(Aqs validity\&.
+.RE
+.SH "AVERTISSEMENTS"
+.PP
+La v\('erification de la complexit\('e des mots de passe peut varier d\*(Aqun site \(`a l\*(Aqautre\&. Il est vivement conseill\('e aux utilisateurs de choisir un mot de passe aussi complexe que possible dans la limite de ce qu\*(Aqil est capable de m\('emoriser\&.
+.PP
+Il se peut que les utilisateurs ne puissent pas changer leur mot de passe sur un syst\(`eme si NIS est activ\('e et qu\*(Aqils ne sont pas connect\('es au serveur NIS\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+D\('efinir les algorithmes de chiffrement par d\('efaut du syst\(`eme pour coder les mots de passes (si aucun algorithme n\*(Aqa \('et\('e indiqu\('e sur la ligne de commandes)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBOBSCURE_CHECKS_ENAB\fR (boolean)
+.RS 4
+Activer des v\('erifications suppl\('ementaires lors des changements de mot de passe\&.
+.RE
+.PP
+\fBPASS_ALWAYS_WARN\fR (boolean)
+.RS 4
+Avertir en cas de mots de passe faibles (mais les accepte quand m\(^eme) si vous \(^etes superutilisateur\&.
+.RE
+.PP
+\fBPASS_CHANGE_TRIES\fR (number)
+.RS 4
+Nombre maximum d\*(Aqessais pour changer de mot de passe si refus\('e (trop facile)\&.
+.RE
+.PP
+\fBPASS_MAX_LEN\fR (number), \fBPASS_MIN_LEN\fR (number)
+.RS 4
+Number of significant characters in the password for crypt()\&.
+\fBPASS_MAX_LEN\fR
+is 8 by default\&. Don\*(Aqt change unless your crypt() is better\&. This is ignored if
+\fBMD5_CRYPT_ENAB\fR
+set to
+\fIyes\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+Avec beaucoup de rounds, il est plus difficile de trouver le mot de passe avec une attaque par force brute\&. Veuillez remarquer que plus de ressources processeur seront n\('ecessaires pour authentifier les utilisateurs\&.
+.sp
+Si non pr\('ecis\('ee, la libc utilisera le nombre de rounds par d\('efaut (5000)\&.
+.sp
+Les valeurs doivent \(^etre comprises dans l\*(Aqintervalle 1\ \&000\ \&\-\ \&999\ \&999\ \&999\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.SH "VALEURS DE RETOUR"
+.PP
+The
+\fBpasswd\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+permission denied
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid combination of options
+.RE
+.PP
+\fI3\fR
+.RS 4
+unexpected failure, nothing done
+.RE
+.PP
+\fI4\fR
+.RS 4
+unexpected failure,
+passwd
+file missing
+.RE
+.PP
+\fI5\fR
+.RS 4
+passwd
+file busy, try again
+.RE
+.PP
+\fI6\fR
+.RS 4
+invalid argument to option
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBchpasswd\fR(8),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBlogin.defs\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/fr/man1/sg.1 b/man/fr/man1/sg.1
new file mode 100644
index 0000000..7cb2716
--- /dev/null
+++ b/man/fr/man1/sg.1
@@ -0,0 +1,97 @@
+'\" t
+.\" Title: sg
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes utilisateur
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "SG" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes utilisateur"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+sg \- ex\('ecuter une commande avec un autre identifiant de groupe
+.SH "SYNOPSIS"
+.HP \w'\fBsg\fR\ 'u
+\fBsg\fR [\-] [group\ [\-c\ ]\ command]
+.SH "DESCRIPTION"
+.PP
+The
+\fBsg\fR
+command works similar to
+\fBnewgrp\fR
+but accepts a command\&. The command will be executed with the
+/bin/sh
+shell\&. With most shells you may run
+\fBsg\fR
+from, you need to enclose multi\-word commands in quotes\&. Another difference between
+\fBnewgrp\fR
+and
+\fBsg\fR
+is that some shells treat
+\fBnewgrp\fR
+specially, replacing themselves with a new instance of a shell that
+\fBnewgrp\fR
+creates\&. This doesn\*(Aqt happen with
+\fBsg\fR, so upon exit from a
+\fBsg\fR
+command you are returned to your previous group ID\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informations s\('ecuris\('ees sur les groupes\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBnewgrp\fR(1),
+\fBsu\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/fr/man1/su.1 b/man/fr/man1/su.1
new file mode 100644
index 0000000..72dcc40
--- /dev/null
+++ b/man/fr/man1/su.1
@@ -0,0 +1,448 @@
+'\" t
+.\" Title: su
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes utilisateur
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "SU" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes utilisateur"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+su \- Changer d\*(Aqidentifiant d\*(Aqutilisateur ou devenir superutilisateur
+.SH "SYNOPSIS"
+.HP \w'\fBsu\fR\ 'u
+\fBsu\fR [\fIoptions\fR] [\fI\-\fR] [\fInom_utilisateur\fR\ [\ \fIargs\fR\ ]]
+.SH "DESCRIPTION"
+.PP
+The
+\fBsu\fR
+command is used to become another user during a login session\&. Invoked without a
+\fBusername\fR,
+\fBsu\fR
+defaults to becoming the superuser\&. The
+\fB\-\fR
+option may be used to provide an environment similar to what the user would expect had the user logged in directly\&. The
+\fB\-c\fR
+option may be used to treat the next argument as a command by most shells\&.
+.PP
+Options are recognized everywhere in the argument list\&. You can use the
+\fB\-\-\fR
+argument to stop option parsing\&. The
+\fB\-\fR
+option is special: it is also recognized after
+\fB\-\-\fR, but has to be placed before
+\fBusername\fR\&.
+.PP
+Un mot de passe sera demand\('e \(`a l\*(Aqutilisateur, si n\('ecessaire\&. Les mots de passe incorrects produisent un message d\*(Aqerreur\&. Toutes les tentatives, r\('eussies ou non, sont enregistr\('ees afin de d\('etecter tout abus du syst\(`eme\&.
+.PP
+The current environment is passed to the new shell\&. The value of
+\fB$PATH\fR
+is reset to
+/bin:/usr/bin
+for normal users, or
+/sbin:/bin:/usr/sbin:/usr/bin
+for the superuser\&. This may be changed with the
+\fBENV_PATH\fR
+and
+\fBENV_SUPATH\fR
+definitions in
+/etc/login\&.defs\&.
+.PP
+Une connexion \(`a un sous\-syst\(`eme est indiqu\('ee par la pr\('esence d\*(Aqun \(Fo\ \&*\ \&\(Fc comme premier caract\(`ere de l\*(Aqinterpr\('eteur de commandes initial\&. Le r\('epertoire personnel sera utilis\('e comme racine d\*(Aqun nouveau syst\(`eme de fichiers dans lequel l\*(Aqutilisateur sera connect\('e\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBsu\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-command\fR\ \&\fICOMMAND\fR
+.RS 4
+Specify a command that will be invoked by the shell using its
+\fB\-c\fR\&.
+.sp
+La commande ex\('ecut\('ee n\*(Aqaura aucun terminal de contr\(^ole\&. Cette option ne peut pas \(^etre utilis\('ee pour ex\('ecuter des programmes interactifs qui ont besoin d\*(Aqun terminal de contr\(^ole\&.
+.RE
+.PP
+\fB\-\fR, \fB\-l\fR, \fB\-\-login\fR
+.RS 4
+Fournir \(`a l\*(Aqutilisateur un environnement similaire \(`a celui qu\*(Aqil aurait obtenu s\*(Aqil s\*(Aq\('etait connect\('e directement\&.
+.sp
+When
+\fB\-\fR
+is used, it must be specified before any
+\fBusername\fR\&. For portability it is recommended to use it as last option, before any
+\fBusername\fR\&. The other forms (\fB\-l\fR
+and
+\fB\-\-login\fR) do not have this restriction\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+Interpr\('eteur de commande devant \(^etre appel\('e\&.
+.sp
+The invoked shell is chosen from (highest priority first):
+.PP
+.RS 4
+The shell specified with \-\-shell\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-preserve\-environment\fR
+is used, the shell specified by the
+\fB$SHELL\fR
+environment variable\&.
+.RE
+.PP
+.RS 4
+The shell indicated in the
+/etc/passwd
+entry for the target user\&.
+.RE
+.PP
+.RS 4
+/bin/sh
+if a shell could not be found by any above method\&.
+.RE
+.sp
+If the target user has a restricted shell (i\&.e\&. the shell field of this user\*(Aqs entry in
+/etc/passwd
+is not listed in
+/etc/shells), then the
+\fB\-\-shell\fR
+option or the
+\fB$SHELL\fR
+environment variable won\*(Aqt be taken into account, unless
+\fBsu\fR
+is called by root\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-p\fR, \fB\-\-preserve\-environment\fR
+.RS 4
+Preserve the current environment, except for:
+.PP
+\fB$PATH\fR
+.RS 4
+reset according to the
+/etc/login\&.defs
+options
+\fBENV_PATH\fR
+or
+\fBENV_SUPATH\fR
+(see below);
+.RE
+.PP
+\fB$IFS\fR
+.RS 4
+reset to
+\(Fo\ \&<space><tab><newline>\ \&\(Fc, if it was set\&.
+.RE
+.sp
+If the target user has a restricted shell, this option has no effect (unless
+\fBsu\fR
+is called by root)\&.
+.sp
+Note that the default behavior for the environment is the following:
+.PP
+.RS 4
+The
+\fB$HOME\fR,
+\fB$SHELL\fR,
+\fB$USER\fR,
+\fB$LOGNAME\fR,
+\fB$PATH\fR, and
+\fB$IFS\fR
+environment variables are reset\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is not used, the environment is copied, except for the variables above\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, the
+\fB$TERM\fR,
+\fB$COLORTERM\fR,
+\fB$DISPLAY\fR, and
+\fB$XAUTHORITY\fR
+environment variables are copied if they were set\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, the
+\fB$TZ\fR,
+\fB$HZ\fR, and
+\fB$MAIL\fR
+environment variables are set according to the
+/etc/login\&.defs
+options
+\fBENV_TZ\fR,
+\fBENV_HZ\fR,
+\fBMAIL_DIR\fR, and
+\fBMAIL_FILE\fR
+(see below)\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, other environment variables might be set by the
+\fBENVIRON_FILE\fR
+file (see below)\&.
+.RE
+.sp
+.RE
+.SH "AVERTISSEMENTS"
+.PP
+This version of
+\fBsu\fR
+has many compilation options, only some of which may be in use at any particular site\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+Si d\('efinie, soit un chemin complet du fichier contenant les noms de p\('eriph\('eriques (un par ligne), soit une liste de noms du p\('eriph\('erique d\('elimit\('ee par des \(Fo\ \&:\ \&\(Fc\&. Les connexions d\*(Aqun administrateur ne seront autoris\('ees que depuis ces p\('eriph\('eriques\&.
+.sp
+S\*(Aqil n\*(Aqest pas d\('efini, root pourra se connecter depuis n\*(Aqimporte quel p\('eriph\('erique\&.
+.sp
+Le p\('eriph\('erique doit \(^etre pr\('ecis\('e sans le pr\('efixe /dev/\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\*(Aqs supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Indiquer si la connexion est permise si on ne peut pas acc\('eder au r\('epertoire personnel\&. Le r\('eglage par d\('efaut est \(Fo\ \&no\ \&\(Fc\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+Si ce fichier existe et est lisible, l\*(Aqenvironnement de connexion sera lu \(`a\ \& partir de lui\&. Chaque ligne doit \(^etre sous la forme nom=valeur\&.
+.sp
+Les lignes commen\(,cant par un \(Fo\ \&#\ \&\(Fc sont consid\('er\('ees comme des commentaires, et sont ignor\('ees\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value is a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value is a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/sbin:/bin:/usr/sbin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+La cha\(^ine de caract\(`eres utilis\('ee pour l\*(Aqinvite de mot de passe\&. La valeur par d\('efaut est d\*(Aqutiliser "Password: " (\(Fo\ \&mot de passe\ \&:\ \&\(Fc), ou une traduction de cette cha\(^ine\&. Si vous d\('efinissez cette variable, l\*(Aqinvite ne sera pas traduite\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+Activer le contr\(^ole et l\*(Aqaffichage du statut de la bo\(^ite aux lettres durant la connexion\&.
+.sp
+Vous devriez le d\('esactiver si les fichiers de d\('emarrage de l\*(Aqinterpr\('eteur de commandes v\('erifient d\('ej\(`a la pr\('esence de courriers (\(Fo\ \&mail \-e\ \&\(Fc ou \('equivalent)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+R\('epertoire d\*(Aqattente des courriels (\(Fo\ \&mail spool directory\ \&\(Fc)\&. Ce param\(`etre est n\('ecessaire pour manipuler les bo\(^ites \(`a lettres lorsque le compte d\*(Aqun utilisateur est modifi\('e ou supprim\('e\&. S\*(Aqil n\*(Aqest pas sp\('ecifi\('e, une valeur par d\('efaut d\('efinie \(`a la compilation est utilis\('ee\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+D\('efinir l\*(Aqemplacement des bo\(^ites aux lettres des utilisateurs relativement \(`a leur r\('epertoire personnel\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of resource limits from
+/etc/limits
+and ulimit, umask, and niceness from the user\*(Aqs passwd gecos field\&.
+.RE
+.PP
+\fBSULOG_FILE\fR (string)
+.RS 4
+Si d\('efinie, les activit\('es de su seront enregistr\('ees dans le fichier\&.
+.RE
+.PP
+\fBSU_NAME\fR (string)
+.RS 4
+Si d\('efinie, le nom de la commande \(`a afficher lorsque \(Fo\ \&su \-\ \&\(Fc est ex\('ecut\('ee\&. Par exemple, si elle est d\('efinie \(`a \(Fo\ \&su\ \&\(Fc alors un \(Fo\ \&ps\ \&\(Fc affichera la commande comme \(Fo\ \&\-su\ \&\(Fc\&. Si non d\('efinie, alors \(Fo\ \&ps\ \&\(Fc affichera le nom du shell qui sera en fait ex\('ecut\('e, par exemple quelque chose comme \(Fo\ \&\-sh\ \&\(Fc\&.
+.RE
+.PP
+\fBSU_WHEEL_ONLY\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the user must be listed as a member of the first gid 0 group in
+/etc/group
+(called
+\fIroot\fR
+on most Linux systems) to be able to
+\fBsu\fR
+to uid 0 accounts\&. If the group doesn\*(Aqt exist or is empty, no one will be able to
+\fBsu\fR
+to uid 0\&.
+.RE
+.PP
+\fBSYSLOG_SU_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsu\fR
+activity \- in addition to sulog file logging\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Activer la mise en place de bits de masque de groupe (\(Fo\ \&umask group bits\ \&\(Fc) identiques \(`a ceux du propri\('etaire (exemple\ \&: 022 \-> 002, 077 \-> 007) pour les utilisateurs non privil\('egi\('es, si l\*(AqUID est identique au GID et que l\*(Aqidentifiant de connexion est identique au groupe principal\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.SH "VALEURS DE RETOUR"
+.PP
+On success,
+\fBsu\fR
+returns the exit value of the command it executed\&.
+.PP
+If this command was terminated by a signal,
+\fBsu\fR
+returns the number of this signal plus 128\&.
+.PP
+If su has to kill the command (because it was asked to terminate, and the command did not terminate in time),
+\fBsu\fR
+returns 255\&.
+.PP
+Some exit values from
+\fBsu\fR
+are independent from the executed command:
+.PP
+\fI0\fR
+.RS 4
+success (\fB\-\-help\fR
+only)
+.RE
+.PP
+\fI1\fR
+.RS 4
+System or authentication failure
+.RE
+.PP
+\fI126\fR
+.RS 4
+The requested command was not found
+.RE
+.PP
+\fI127\fR
+.RS 4
+The requested command could not be executed
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBlogin\fR(1),
+\fBlogin.defs\fR(5),
+\fBsg\fR(1),
+\fBsh\fR(1)\&.
diff --git a/man/fr/man3/getspnam.3 b/man/fr/man3/getspnam.3
new file mode 100644
index 0000000..cd473da
--- /dev/null
+++ b/man/fr/man3/getspnam.3
@@ -0,0 +1 @@
+.so man3/shadow.3
diff --git a/man/fr/man3/shadow.3 b/man/fr/man3/shadow.3
new file mode 100644
index 0000000..6ce492b
--- /dev/null
+++ b/man/fr/man3/shadow.3
@@ -0,0 +1,245 @@
+'\" t
+.\" Title: shadow
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Appels de biblioth\(`eque
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "SHADOW" "3" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Appels de biblioth\(`eque"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+shadow, getspnam \- routines d\*(Aqutilisation des mots de passe cach\('es
+.SH "SYNTAX"
+.PP
+\fI#include <shadow\&.h>\fR
+.PP
+\fIstruct spwd *getspent();\fR
+.PP
+\fIstruct spwd *getspnam(char\fR
+\fI*nom\fR\fI);\fR
+.PP
+\fIvoid setspent();\fR
+.PP
+\fIvoid endspent();\fR
+.PP
+\fIstruct spwd *fgetspent(FILE\fR
+\fI*fp\fR\fI);\fR
+.PP
+\fIstruct spwd *sgetspent(char\fR
+\fI*cp\fR\fI);\fR
+.PP
+\fIint putspent(struct spwd\fR
+\fI*p,\fR
+\fIFICHIER\fR
+\fI*fp\fR\fI);\fR
+.PP
+\fIint lckpwdf();\fR
+.PP
+\fIint ulckpwdf();\fR
+.SH "DESCRIPTION"
+.PP
+\fIshadow\fR
+manipulates the contents of the shadow password file,
+/etc/shadow\&. The structure in the
+\fI#include\fR
+file is:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct spwd {
+ char *sp_namp; /* user login name */
+ char *sp_pwdp; /* encrypted password */
+ long int sp_lstchg; /* last password change */
+ long int sp_min; /* days until change allowed\&. */
+ long int sp_max; /* days before change required */
+ long int sp_warn; /* days warning for expiration */
+ long int sp_inact; /* days before account inactive */
+ long int sp_expire; /* date when account expires */
+ unsigned long int sp_flag; /* reserved for future use */
+}
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+La signification de chaque champ est la suivante\ \&:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_namp \- pointeur vers le nom d\*(Aqutilisateur termin\('e par un z\('ero binaire (\(Fo\ \&null\-terminated\ \&\(Fc)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_pwdp \- pointeur vers le mot de passe termin\('e par un z\('ero binaire (\(Fo\ \&null\-terminated\ \&\(Fc)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_lstchg \- nombre de jours, compt\('es \(`a partir du 1er\ \&janvier\ \&1970, depuis la derni\(`ere modification du mot de passe
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_min \- nombre de jours pendant lesquels le mot de passe ne peut pas \(^etre chang\('e
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_max \- nombre maximal de jours avant que le mot de passe doive \(^etre chang\('e
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_warn \- nombre de jours avant que le mot de passe n\*(Aqarrive en fin de validit\('e pendant lesquels l\*(Aqutilisateur est averti de la fin prochaine de la validit\('e de son mot de passe
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_inact \- nombre de jours apr\(`es la fin de validit\('e du mot de passe avant de consid\('erer que le compte est inactif et soit d\('esactiv\('e
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_expire \- nombre de jours, compt\('es \(`a partir du 1er\ \&janvier\ \&1970, apr\(`es lesquels le compte sera d\('esactiv\('e
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_flag \- r\('eserv\('e pour une utilisation future
+.RE
+.SH "DESCRIPTION"
+.PP
+\fIgetspent\fR,
+\fIgetspname\fR,
+\fIfgetspent\fR, and
+\fIsgetspent\fR
+each return a pointer to a
+\fIstruct spwd\fR\&.
+\fIgetspent\fR
+returns the next entry from the file, and
+\fIfgetspent\fR
+returns the next entry from the given stream, which is assumed to be a file of the proper format\&.
+\fIsgetspent\fR
+returns a pointer to a
+\fIstruct spwd\fR
+using the provided string as input\&.
+\fIgetspnam\fR
+searches from the current position in the file for an entry matching
+\fIname\fR\&.
+.PP
+\fIsetspent\fR
+and
+\fIendspent\fR
+may be used to begin and end, respectively, access to the shadow password file\&.
+.PP
+The
+\fIlckpwdf\fR
+and
+\fIulckpwdf\fR
+routines should be used to insure exclusive access to the
+/etc/shadow
+file\&.
+\fIlckpwdf\fR
+attempts to acquire a lock using
+\fIpw_lock\fR
+for up to 15 seconds\&. It continues by attempting to acquire a second lock using
+\fIspw_lock\fR
+for the remainder of the initial 15 seconds\&. Should either attempt fail after a total of 15 seconds,
+\fIlckpwdf\fR
+returns \-1\&. When both locks are acquired 0 is returned\&.
+.SH "DIAGNOSTICS"
+.PP
+Routines return NULL if no more entries are available or if an error occurs during processing\&. Routines which have
+\fIint\fR
+as the return value return 0 for success and \-1 for failure\&.
+.SH "AVERTISSEMENTS"
+.PP
+Ces fonctions peuvent n\*(Aq\(^etre utilis\('ees que par le superutilisateur car l\*(Aqacc\(`es au fichier de mots de passe cach\('es est restreint\&.
+.SH "FICHIERS"
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBgetpwent\fR(3),
+\fBshadow\fR(5)\&.
diff --git a/man/fr/man5/faillog.5 b/man/fr/man5/faillog.5
new file mode 100644
index 0000000..8901a5a
--- /dev/null
+++ b/man/fr/man5/faillog.5
@@ -0,0 +1,64 @@
+'\" t
+.\" Title: faillog
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Formats et conversions de fichiers
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "FAILLOG" "5" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Formats et conversions de fich"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+faillog \- journal des \('echecs de connexion
+.SH "DESCRIPTION"
+.PP
+/var/log/faillog
+maintains a count of login failures and the limits for each account\&.
+.PP
+Le fichier contient un nombre constant d\*(Aqenregistrements, tri\('es par identifiant d\*(Aqutilisateur num\('erique\&. Chaque enregistrement contient le nombre d\*(Aq\('echecs de connexion depuis la derni\(`ere connexion r\('eussie, le nombre maximum d\*(Aq\('echecs de connexion avant d\('esactivation du compte, la ligne sur laquelle a eu lieu le dernier \('echec de connexion, la date du dernier \('echec de connexion et la dur\('ee (en seconde) pendant laquelle le compte sera verrouill\('e apr\(`es un \('echec\&.
+.PP
+La structure du fichier est la suivante\ \&:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct faillog {
+ short fail_cnt;
+ short fail_max;
+ char fail_line[12];
+ time_t fail_time;
+ long fail_locktime;
+};
+.fi
+.if n \{\
+.RE
+.\}
+.SH "FICHIERS"
+.PP
+/var/log/faillog
+.RS 4
+Journal des \('echecs de connexion\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBfaillog\fR(8)
diff --git a/man/fr/man5/gshadow.5 b/man/fr/man5/gshadow.5
new file mode 100644
index 0000000..b8b40ae
--- /dev/null
+++ b/man/fr/man5/gshadow.5
@@ -0,0 +1,101 @@
+'\" t
+.\" Title: gshadow
+.\" Author: Nicolas Fran\(,cois <nicolas.francois@centraliens.net>
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Formats et conversions de fichiers
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "GSHADOW" "5" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Formats et conversions de fich"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+gshadow \- informations cach\('ees sur les groupes
+.SH "DESCRIPTION"
+.PP
+/etc/gshadow
+contains the shadowed information for group accounts\&.
+.PP
+Ce fichier ne doit pas \(^etre accessible en lecture par les utilisateurs normaux afin de maintenir la s\('ecurit\('e des mots de passe, en particuliers pour pr\('evenir les attaques par dictionnaires\&.
+.PP
+Chaque ligne de ce fichier contient les champs suivants, s\('epar\('es par des deux\-points (\(Fo\ \&:\ \&\(Fc)\ \&:
+.PP
+\fBnom du groupe\fR
+.RS 4
+Ce doit \(^etre un nom de groupe valable, qui existe sur le syst\(`eme\&.
+.RE
+.PP
+\fBmot de passe chiffr\('e\fR
+.RS 4
+Refer to
+\fBcrypt\fR(3)
+for details on how this string is interpreted\&.
+.sp
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), for instance ! or *, users will not be able to use a unix password to access the group (but group members do not need the password)\&.
+.sp
+The password is used when a user who is not a member of the group wants to gain the permissions of this group (see
+\fBnewgrp\fR(1))\&.
+.sp
+Ce champ peut \(^etre vide\&. Dans ce cas seuls les membres du groupe peuvent obtenir les permissions du groupe\&.
+.sp
+Un champ de mot de passe qui commence avec un point d\*(Aqexclamation indique que le mot de passe est bloqu\('e\&. Les caract\(`eres restants sur la ligne repr\('esentent le champ de mot de passe avant que le mot de passe n\*(Aqait \('et\('e bloqu\('e\&.
+.sp
+This password supersedes any password specified in
+/etc/group\&.
+.RE
+.PP
+\fBadministrateurs\fR
+.RS 4
+Ce champ doit \(^etre une liste d\*(Aqutilisateurs, s\('epar\('es par des virgules\&.
+.sp
+Les administrateurs peuvent modifier le mot de passe ou les membres du groupe\&.
+.sp
+Les administrateurs peuvent aussi avoir les m\(^emes permissions que les membres (voir ci\-dessous)\&.
+.RE
+.PP
+\fBmembres\fR
+.RS 4
+Ce champ doit \(^etre une liste d\*(Aqutilisateurs, s\('epar\('es par des virgules\&.
+.sp
+Les membres peuvent acc\('eder au groupe sans qu\*(Aqun mot de passe ne leur soit demand\('e\&.
+.sp
+You should use the same list of users as in
+/etc/group\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informations s\('ecuris\('ees sur les groupes\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBgpasswd\fR(5),
+\fBgroup\fR(5),
+\fBgrpck\fR(8),
+\fBgrpconv\fR(8),
+\fBnewgrp\fR(1)\&.
diff --git a/man/fr/man5/limits.5 b/man/fr/man5/limits.5
new file mode 100644
index 0000000..d59f36e
--- /dev/null
+++ b/man/fr/man5/limits.5
@@ -0,0 +1,274 @@
+'\" t
+.\" Title: limits
+.\" Author: Luca Berra
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Formats et conversions de fichiers
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "LIMITS" "5" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Formats et conversions de fich"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+limits \- d\('efinition des limites de ressources
+.SH "DESCRIPTION"
+.PP
+The
+\fIlimits\fR
+file (/etc/limits
+by default or LIMITS_FILE defined
+config\&.h) describes the resource limits you wish to impose\&. It should be owned by root and readable by root account only\&.
+.PP
+Par d\('efaut, aucun quota (aucune limite) n\*(Aqest impos\('e \(`a \(Fo\ \&root\ \&\(Fc\&. En fait, il n\*(Aqest pas possible d\*(Aqimposer de cette fa\(,con de limite aux comptes root ou \('equivalents (comptes ayant un UID de 0)\&.
+.PP
+Chaque ligne d\('ecrit une limite pour un utilisateur, elle est de la forme suivante\ \&:
+.PP
+\fIutilisateur LISTE_DE_LIMITES\fR
+.PP
+ou sous la forme\ \&:
+.PP
+\fI@groupe LISTE_DE_LIMITES\fR
+.PP
+The
+\fILIMITS_STRING\fR
+is a string of a concatenated list of resource limits\&. Each limit consists of a letter identifier followed by a numerical limit\&.
+.PP
+Les identifiants possibles sont\ \&:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+A\ \&: espace d\*(Aqadressage maximal (en kilo octets)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+C\ \&: taille maximale d\*(Aqun fichier image de la m\('emoire (\(Fo\ \&core\ \&\(Fc, en kilo octets)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+D\ \&: taille maximale du segment de donn\('ees d\*(Aqun programme (en kilo octets)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+F\ \&: taille maximale des fichiers (en kilo octets)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+K: file creation mask, set by
+\fBumask\fR(2)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+I\ \&: valeur nice maximum (0\&.\&.39 qui sera traduit en 20\&.\&.\-19)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+L\ \&: nombre maximal de connexions simultan\('ees pour cet utilisateur
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+M\ \&: taille maximale de m\('emoire verrouill\('ee (\(Fo\ \&locked\-in\-memory\ \&\(Fc, en kilo octets)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+N\ \&: nombre maximal de fichiers ouverts
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+O\ \&: priorit\('e temps r\('eel maximale
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+P: process priority, set by
+\fBsetpriority\fR(2)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+R\ \&: taille maximale de la m\('emoire r\('esidente (\(Fo\ \&resident set size\ \&\(Fc, en kilo octets)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+S\ \&: taille maximale de la pile (en kilo octets)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+T\ \&: temps processeur maximal consomm\('e (en minutes)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+U\ \&: nombre maximal de processus
+.RE
+.PP
+For example,
+\fIL2D2048N5\fR
+is a valid
+\fILIMITS_STRING\fR\&. For reading convenience, the following entries are equivalent:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ username L2D2048N5
+ username L2 D2048 N5
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Be aware that after
+\fIusername\fR
+the rest of the line is considered a limit string, thus comments are not allowed\&. An invalid limits string will be rejected (not considered) by the
+\fBlogin\fR
+program\&.
+.PP
+The default entry is denoted by username "\fI*\fR"\&. If you have multiple
+\fIdefault\fR
+entries in your
+\fILIMITS_FILE\fR, then the last one will be used as the default entry\&.
+.PP
+The limits specified in the form "\fI@group\fR" apply to the members of the specified
+\fIgroup\fR\&.
+.PP
+Si plusieurs lignes avec des limites pour un utilisateur existent, seule la premi\(`ere ligne pour cet utilisateur sera prise en compte\&.
+.PP
+If no lines are specified for a user, the last
+\fI@group\fR
+line matching a group whose the user is a member of will be considered, or the last line with default limits if no groups contain the user\&.
+.PP
+To completely disable limits for a user, a single dash "\fI\-\fR" will do\&.
+.PP
+To disable a limit for a user, a single dash "\fI\-\fR" can be used instead of the numerical value for this limit\&.
+.PP
+Notez \('egalement que les limites ne sont configur\('ees que PAR CONNEXION\&. Il n\*(Aqy a pas de limite globale ou permanente\&. Des limites globales pourraient voir le jour, mais pour l\*(Aqinstant, il faut faire sans\&.
+.SH "FICHIERS"
+.PP
+/etc/limits
+.RS 4
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBlogin\fR(1),
+\fBsetpriority\fR(2),
+\fBsetrlimit\fR(2)\&.
diff --git a/man/fr/man5/login.access.5 b/man/fr/man5/login.access.5
new file mode 100644
index 0000000..a13b46c
--- /dev/null
+++ b/man/fr/man5/login.access.5
@@ -0,0 +1,67 @@
+'\" t
+.\" Title: login.access
+.\" Author: Marek Micha\(/lkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Formats et conversions de fichiers
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "LOGIN\&.ACCESS" "5" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Formats et conversions de fich"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+login.access \- table de contr\(^ole des connexions
+.SH "DESCRIPTION"
+.PP
+The
+\fIlogin\&.access\fR
+file specifies (user, host) combinations and/or (user, tty) combinations for which a login will be either accepted or refused\&.
+.PP
+When someone logs in, the
+\fIlogin\&.access\fR
+is scanned for the first entry that matches the (user, host) combination, or, in case of non\-networked logins, the first entry that matches the (user, tty) combination\&. The permissions field of that table entry determines whether the login will be accepted or refused\&.
+.PP
+Chaque ligne de la table de contr\(^ole des connexions (\(Fo\ \&login access control table\ \&\(Fc) est compos\('ee de trois champs s\('epar\('es par le caract\(`ere \(Fo\ \&:\ \&\(Fc\ \&:
+.PP
+\fIpermission\fR:\fIusers\fR:\fIorigins\fR
+.PP
+The first field should be a "\fI+\fR" (access granted) or "\fI\-\fR" (access denied) character\&. The second field should be a list of one or more login names, group names, or
+\fIALL\fR
+(always matches)\&. The third field should be a list of one or more tty names (for non\-networked logins), host names, domain names (begin with "\&."), host addresses, internet network numbers (end with "\&."),
+\fIALL\fR
+(always matches) or
+\fILOCAL\fR
+(matches any string that does not contain a "\&." character)\&. If you run NIS you can use @netgroupname in host or user patterns\&.
+.PP
+The
+\fIEXCEPT\fR
+operator makes it possible to write very compact rules\&.
+.PP
+Le fichier d\*(Aqinformations sur les groupes (/etc/group) n\*(Aqest utilis\('e que lorsqu\*(Aqun nom ne correspond \(`a aucun des utilisateurs connect\('es\&. Seuls les groupes pour lesquels la liste des utilisateurs est sp\('ecifi\('ee sont utilis\('es\ \&: le programme ne recherche pas parmi les groupes primaires des utilisateurs\&.
+.SH "FICHIERS"
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBlogin\fR(1)\&.
diff --git a/man/fr/man5/login.defs.5 b/man/fr/man5/login.defs.5
new file mode 100644
index 0000000..d1f923b
--- /dev/null
+++ b/man/fr/man5/login.defs.5
@@ -0,0 +1,854 @@
+'\" t
+.\" Title: login.defs
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Formats et conversions de fichiers
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "LOGIN\&.DEFS" "5" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Formats et conversions de fich"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+login.defs \- configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc
+.SH "DESCRIPTION"
+.PP
+The
+/etc/login\&.defs
+file defines the site\-specific configuration for the shadow password suite\&. This file is required\&. Absence of this file will not prevent system operation, but will probably result in undesirable operation\&.
+.PP
+Ce fichier est un fichier texte, dont chaque ligne d\('ecrit un param\(`etre de configuration\&. Les lignes consistent en un nom et une valeur, s\('epar\('es par une espace\&. Les lignes blanches et les lignes de commentaires sont ignor\('ees\&. Les commentaires commencent par un caract\(`ere \(Fo\ \&#\ \&\(Fc, qui doit \(^etre le premier caract\(`ere non blanc de la ligne\&.
+.PP
+Parameter values may be of four types: strings, booleans, numbers, and long numbers\&. A string is comprised of any printable characters\&. A boolean should be either the value
+\fIyes\fR
+or
+\fIno\fR\&. An undefined boolean parameter or one with a value other than these will be given a
+\fIno\fR
+value\&. Numbers (both regular and long) may be either decimal values, octal values (precede the value with
+\fI0\fR) or hexadecimal values (precede the value with
+\fI0x\fR)\&. The maximum value of the regular and long numeric parameters is machine\-dependent\&.
+.PP
+Les param\(`etres de configuration suivants sont fournis\ \&:
+.PP
+\fBCHFN_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchfn\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCHFN_RESTRICT\fR (string)
+.RS 4
+This parameter specifies which values in the
+\fIgecos\fR
+field of the
+/etc/passwd
+file may be changed by regular users using the
+\fBchfn\fR
+program\&. It can be any combination of letters
+\fIf\fR,
+\fIr\fR,
+\fIw\fR,
+\fIh\fR, for Full name, Room number, Work phone, and Home phone, respectively\&. For backward compatibility,
+\fIyes\fR
+is equivalent to
+\fIrwh\fR
+and
+\fIno\fR
+is equivalent to
+\fIfrwh\fR\&. If not specified, only the superuser can make any changes\&. The most restrictive setting is better achieved by not installing
+\fBchfn\fR
+SUID\&.
+.RE
+.PP
+\fBCHSH_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchsh\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+Si d\('efinie, soit un chemin complet du fichier contenant les noms de p\('eriph\('eriques (un par ligne), soit une liste de noms du p\('eriph\('erique d\('elimit\('ee par des \(Fo\ \&:\ \&\(Fc\&. Les connexions d\*(Aqun administrateur ne seront autoris\('ees que depuis ces p\('eriph\('eriques\&.
+.sp
+S\*(Aqil n\*(Aqest pas d\('efini, root pourra se connecter depuis n\*(Aqimporte quel p\('eriph\('erique\&.
+.sp
+Le p\('eriph\('erique doit \(^etre pr\('ecis\('e sans le pr\('efixe /dev/\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\*(Aqs supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBCREATE_HOME\fR (boolean)
+.RS 4
+Indiquer si un r\('epertoire personnel doit \(^etre cr\('e\('e par d\('efaut pour les nouveaux utilisateurs\&.
+.sp
+Ce r\('eglage ne s\*(Aqapplique pas pour les utilisateurs syst\(`eme, et peut \(^etre annul\('e sur la ligne de commande\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Indiquer si la connexion est permise si on ne peut pas acc\('eder au r\('epertoire personnel\&. Le r\('eglage par d\('efaut est \(Fo\ \&no\ \&\(Fc\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+D\('efinir les algorithmes de chiffrement par d\('efaut du syst\(`eme pour coder les mots de passes (si aucun algorithme n\*(Aqa \('et\('e indiqu\('e sur la ligne de commandes)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value is a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value is a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/sbin:/bin:/usr/sbin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+Si ce fichier existe et est lisible, l\*(Aqenvironnement de connexion sera lu \(`a\ \& partir de lui\&. Chaque ligne doit \(^etre sous la forme nom=valeur\&.
+.sp
+Les lignes commen\(,cant par un \(Fo\ \&#\ \&\(Fc sont consid\('er\('ees comme des commentaires, et sont ignor\('ees\&.
+.RE
+.PP
+\fBERASECHAR\fR (number)
+.RS 4
+Terminal ERASE character (\fI010\fR
+= backspace,
+\fI0177\fR
+= DEL)\&.
+.sp
+La valeur peut \(^etre pr\('efix\('ee par \(Fo\ \&0\ \&\(Fc pour une valeur octale, ou \(Fo\ \&0x\ \&\(Fc pour une valeur hexad\('ecimale\&.
+.RE
+.PP
+\fBFAIL_DELAY\fR (number)
+.RS 4
+Le d\('elai en secondes avant qu\*(Aqun nouvel essai soit permis apr\(`es un \('echec de connexion\&.
+.RE
+.PP
+\fBFAILLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of
+/var/log/faillog
+login failure info\&.
+.RE
+.PP
+\fBFAKE_SHELL\fR (string)
+.RS 4
+If set,
+\fBlogin\fR
+will execute this shell instead of the users\*(Aq shell specified in
+/etc/passwd\&.
+.RE
+.PP
+\fBFTMP_FILE\fR (string)
+.RS 4
+Si d\('efinie, les \('echecs de connexion seront enregistr\('es dans le fichier sous le format utmp
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBGID_MIN\fR
+(resp\&.
+\fBGID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBHOME_MODE\fR (number)
+.RS 4
+The mode for new home directories\&. If not specified, the
+\fBUMASK\fR
+is used to create the mode\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this to set the mode of the home directory they create\&.
+.RE
+.PP
+\fBHUSHLOGIN_FILE\fR (string)
+.RS 4
+Si d\('efinie, le fichier peut d\('esactiver tous les affichages habituels durant la s\('equence de connexion\&. Si un nom de chemin complet est sp\('ecifi\('e, alors le mode taiseux sera activ\('e si le nom ou l\*(Aqinterpr\('eteur de commandes de l\*(Aqutilisateur sont trouv\('es dans le fichier\&. Si ce n\*(Aqest pas un nom de chemin complet, alors le mode taiseux sera activ\('e si le fichier existe dans le r\('epertoire personnel de l\*(Aqutilisateur\&.
+.RE
+.PP
+\fBISSUE_FILE\fR (string)
+.RS 4
+Si d\('efinie, le fichier sera affich\('e avant chaque invite de connexion\&.
+.RE
+.PP
+\fBKILLCHAR\fR (number)
+.RS 4
+Terminal KILL character (\fI025\fR
+= CTRL/U)\&.
+.sp
+La valeur peut \(^etre pr\('efix\('ee par \(Fo\ \&0\ \&\(Fc pour une valeur octale, ou \(Fo\ \&0x\ \&\(Fc pour une valeur hexad\('ecimale\&.
+.RE
+.PP
+\fBLASTLOG_ENAB\fR (boolean)
+.RS 4
+Activer la journalisation et l\*(Aqaffichage des informations de derni\(`ere connexion de /var/log/lastlog\&.
+.RE
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.PP
+\fBLOG_OK_LOGINS\fR (boolean)
+.RS 4
+Activer la journalisation des connexions r\('eussies\&.
+.RE
+.PP
+\fBLOG_UNKFAIL_ENAB\fR (boolean)
+.RS 4
+Activer l\*(Aqaffichage des noms d\*(Aqutilisateurs inconnus quand les \('echecs de connexions sont enregistr\('es\&.
+.sp
+Remarque\ \&: la journalisation des noms d\*(Aqutilisateurs inconnus peut \(^etre un probl\(`eme de s\('ecurit\('e si un utilisateur entre son mot de passe au lieu de son nom d\*(Aqutilisateur\&.
+.RE
+.PP
+\fBLOGIN_RETRIES\fR (number)
+.RS 4
+Le nombre maximum de tentatives de connexion en cas de mauvais mot de passe\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+La cha\(^ine de caract\(`eres utilis\('ee pour l\*(Aqinvite de mot de passe\&. La valeur par d\('efaut est d\*(Aqutiliser "Password: " (\(Fo\ \&mot de passe\ \&:\ \&\(Fc), ou une traduction de cette cha\(^ine\&. Si vous d\('efinissez cette variable, l\*(Aqinvite ne sera pas traduite\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.PP
+\fBLOGIN_TIMEOUT\fR (number)
+.RS 4
+Le temps maximum en secondes pour la connexion\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+Activer le contr\(^ole et l\*(Aqaffichage du statut de la bo\(^ite aux lettres durant la connexion\&.
+.sp
+Vous devriez le d\('esactiver si les fichiers de d\('emarrage de l\*(Aqinterpr\('eteur de commandes v\('erifient d\('ej\(`a la pr\('esence de courriers (\(Fo\ \&mail \-e\ \&\(Fc ou \('equivalent)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+R\('epertoire d\*(Aqattente des courriels (\(Fo\ \&mail spool directory\ \&\(Fc)\&. Ce param\(`etre est n\('ecessaire pour manipuler les bo\(^ites \(`a lettres lorsque le compte d\*(Aqun utilisateur est modifi\('e ou supprim\('e\&. S\*(Aqil n\*(Aqest pas sp\('ecifi\('e, une valeur par d\('efaut d\('efinie \(`a la compilation est utilis\('ee\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+D\('efinir l\*(Aqemplacement des bo\(^ites aux lettres des utilisateurs relativement \(`a leur r\('epertoire personnel\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+La valeur par d\('efaut est 0, ce qui signifie qu\*(Aqil n\*(Aqy a pas de limites pour le nombre de membres dans un groupe\&.
+.sp
+Cette fonctionnalit\('e (groupe d\('ecoup\('e) permet de limiter la longueur des lignes dans le fichier de groupes\&. Ceci est utile pour s\*(Aqassurer que les lignes pour les groupes NIS ne sont pas plus grandes que 1024 caract\(`eres\&.
+.sp
+Si vous avez besoin de configurer cette limite, vous pouvez utiliser 25\&.
+.sp
+Remarque\ \&: les groupes d\('ecoup\('es ne sont peut\-\(^etre pas pris en charge par tous les outils (m\(^eme dans la suite d\*(Aqoutils Shadow)\&. Vous ne devriez pas utiliser cette variable, sauf si vous en avez vraiment besoin\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBMOTD_FILE\fR (string)
+.RS 4
+Si d\('efinie, liste d\('elimit\('ee par des \(Fo\ \&:\ \&\(Fc de fichiers de \(Fo\ \&message du jour\ \&\(Fc \(`a afficher lors de la connexion\&.
+.RE
+.PP
+\fBNOLOGINS_FILE\fR (string)
+.RS 4
+Si d\('efinie, nom de fichier dont la pr\('esence emp\(^echera les connexions de quelqu\*(Aqun d\*(Aqautre que le superutilisateur\&. Le contenu de ces fichiers doit \(^etre un message indiquant pourquoi les connexions sont d\('esactiv\('ees\&.
+.RE
+.PP
+\fBOBSCURE_CHECKS_ENAB\fR (boolean)
+.RS 4
+Activer des v\('erifications suppl\('ementaires lors des changements de mot de passe\&.
+.RE
+.PP
+\fBPASS_ALWAYS_WARN\fR (boolean)
+.RS 4
+Avertir en cas de mots de passe faibles (mais les accepte quand m\(^eme) si vous \(^etes superutilisateur\&.
+.RE
+.PP
+\fBPASS_CHANGE_TRIES\fR (number)
+.RS 4
+Nombre maximum d\*(Aqessais pour changer de mot de passe si refus\('e (trop facile)\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+Nombre maximum de jours de validit\('e d\*(Aqun mot de passe\&. Apr\(`es cette dur\('ee, une modification du mot de passe est obligatoire\&. S\*(Aqil n\*(Aqest pas pr\('ecis\('e, la valeur de \-1 est utilis\('ee (ce qui enl\(`eve toute restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+Nombre minimum de jours autoris\('e avant la modification d\*(Aqun mot de passe\&. Toute tentative de modification du mot de passe avant cette dur\('ee est rejet\('ee\&. S\*(Aqil n\*(Aqest pas pr\('ecis\('e, la valeur de \-1 est utilis\('ee (ce qui enl\(`eve toute restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+Nombre de jours durant lesquels l\*(Aqutilisateur recevra un avertissement avant que son mot de passe n\*(Aqarrive en fin de validit\('e\&. Une valeur n\('egative signifie qu\*(Aqaucun avertissement n\*(Aqest donn\('e\&. S\*(Aqil n\*(Aqest pas pr\('ecis\('e, aucun avertissement n\*(Aqest donn\('e\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR,
+\fBPASS_MIN_DAYS\fR
+and
+\fBPASS_WARN_AGE\fR
+are only used at the time of account creation\&. Any changes to these settings won\*(Aqt affect existing accounts\&.
+.PP
+\fBPASS_MAX_LEN\fR (number), \fBPASS_MIN_LEN\fR (number)
+.RS 4
+Number of significant characters in the password for crypt()\&.
+\fBPASS_MAX_LEN\fR
+is 8 by default\&. Don\*(Aqt change unless your crypt() is better\&. This is ignored if
+\fBMD5_CRYPT_ENAB\fR
+set to
+\fIyes\fR\&.
+.RE
+.PP
+\fBPORTTIME_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable checking of time restrictions specified in
+/etc/porttime\&.
+.RE
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of resource limits from
+/etc/limits
+and ulimit, umask, and niceness from the user\*(Aqs passwd gecos field\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+Avec beaucoup de rounds, il est plus difficile de trouver le mot de passe avec une attaque par force brute\&. Veuillez remarquer que plus de ressources processeur seront n\('ecessaires pour authentifier les utilisateurs\&.
+.sp
+Si non pr\('ecis\('ee, la libc utilisera le nombre de rounds par d\('efaut (5000)\&.
+.sp
+Les valeurs doivent \(^etre comprises dans l\*(Aqintervalle 1\ \&000\ \&\-\ \&999\ \&999\ \&999\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.PP
+\fBSULOG_FILE\fR (string)
+.RS 4
+Si d\('efinie, les activit\('es de su seront enregistr\('ees dans le fichier\&.
+.RE
+.PP
+\fBSU_NAME\fR (string)
+.RS 4
+Si d\('efinie, le nom de la commande \(`a afficher lorsque \(Fo\ \&su \-\ \&\(Fc est ex\('ecut\('ee\&. Par exemple, si elle est d\('efinie \(`a \(Fo\ \&su\ \&\(Fc alors un \(Fo\ \&ps\ \&\(Fc affichera la commande comme \(Fo\ \&\-su\ \&\(Fc\&. Si non d\('efinie, alors \(Fo\ \&ps\ \&\(Fc affichera le nom du shell qui sera en fait ex\('ecut\('e, par exemple quelque chose comme \(Fo\ \&\-sh\ \&\(Fc\&.
+.RE
+.PP
+\fBSU_WHEEL_ONLY\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the user must be listed as a member of the first gid 0 group in
+/etc/group
+(called
+\fIroot\fR
+on most Linux systems) to be able to
+\fBsu\fR
+to uid 0 accounts\&. If the group doesn\*(Aqt exist or is empty, no one will be able to
+\fBsu\fR
+to uid 0\&.
+.RE
+.PP
+\fBSUB_GID_MIN\fR (number), \fBSUB_GID_MAX\fR (number), \fBSUB_GID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate group IDs) allocate
+\fBSUB_GID_COUNT\fR
+unused group IDs from the range
+\fBSUB_GID_MIN\fR
+to
+\fBSUB_GID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR,
+\fBSUB_GID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSUB_UID_MIN\fR (number), \fBSUB_UID_MAX\fR (number), \fBSUB_UID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate user IDs) allocate
+\fBSUB_UID_COUNT\fR
+unused user IDs from the range
+\fBSUB_UID_MIN\fR
+to
+\fBSUB_UID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR,
+\fBSUB_UID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_GID_MIN\fR
+(resp\&.
+\fBSYS_GID_MAX\fR) is 101 (resp\&.
+\fBGID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_UID_MIN\fR
+(resp\&.
+\fBSYS_UID_MAX\fR) is 101 (resp\&.
+\fBUID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.PP
+\fBSYSLOG_SU_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsu\fR
+activity \- in addition to sulog file logging\&.
+.RE
+.PP
+\fBTTYGROUP\fR (string), \fBTTYPERM\fR (string)
+.RS 4
+The terminal permissions: the login tty will be owned by the
+\fBTTYGROUP\fR
+group, and the permissions will be set to
+\fBTTYPERM\fR\&.
+.sp
+By default, the ownership of the terminal is set to the user\*(Aqs primary group and the permissions are set to
+\fI0600\fR\&.
+.sp
+\fBTTYGROUP\fR
+can be either the name of a group or a numeric group identifier\&.
+.sp
+If you have a
+\fBwrite\fR
+program which is "setgid" to a special group which owns the terminals, define TTYGROUP to the group number and TTYPERM to 0620\&. Otherwise leave TTYGROUP commented out and assign TTYPERM to either 622 or 600\&.
+.RE
+.PP
+\fBTTYTYPE_FILE\fR (string)
+.RS 4
+Si d\('efinie, fichier qui lie les lignes de tty \(`a la variable d\*(Aqenvironnement TERM\&. Chaque ligne du fichier est dans un format ressemblant \(`a \(Fo\ \&vt100 tty01\ \&\(Fc\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBUID_MIN\fR
+(resp\&.
+\fBUID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBULIMIT\fR (number)
+.RS 4
+Default
+\fBulimit\fR
+value\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+Valeur d\*(Aqinitialisation du masque de permissions\&. S\*(Aqil n\*(Aqest pas pr\('ecis\('e, le masque des permissions sera initialis\('e \(`a 022\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create if
+\fBHOME_MODE\fR
+is not set\&.
+.sp
+It is also used by
+\fBlogin\fR
+to define users\*(Aq initial umask\&. Note that this mask can be overridden by the user\*(Aqs GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERDEL_CMD\fR (string)
+.RS 4
+Si d\('efinie, la commande est ex\('ecut\('ee lors de la suppression d\*(Aqun utilisateur\&. Elle pourra supprimer toutes les t\(^aches p\('eriodiques cron ou at, tous les travaux d\*(Aqimpression, etc\&. de l\*(Aqutilisateur (qui sera fourni comme premier param\(`etre)\&.
+.sp
+Le code de retour du script n\*(Aqest pas pris en compte\&.
+.sp
+Here is an example script, which removes the user\*(Aqs cron, at and print jobs:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#! /bin/sh
+
+# Check for the required argument\&.
+if [ $# != 1 ]; then
+ echo "Usage: $0 username"
+ exit 1
+fi
+
+# Remove cron jobs\&.
+crontab \-r \-u $1
+
+# Remove at jobs\&.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username\&.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR \-name "[^\&.]*" \-type f \-user $1 \-delete \e;
+
+# Remove print jobs\&.
+lprm $1
+
+# All done\&.
+exit 0
+
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Activer la mise en place de bits de masque de groupe (\(Fo\ \&umask group bits\ \&\(Fc) identiques \(`a ceux du propri\('etaire (exemple\ \&: 022 \-> 002, 077 \-> 007) pour les utilisateurs non privil\('egi\('es, si l\*(AqUID est identique au GID et que l\*(Aqidentifiant de connexion est identique au groupe principal\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "R\('EF\('ERENCES CROIS\('EES"
+.PP
+Les r\('ef\('erences crois\('ees ci\-dessous montrent quels sont les param\(`etres utilis\('es par les diff\('erents programmes de la suite shadow password\&.
+.PP
+chfn
+.RS 4
+CHFN_AUTH
+CHFN_RESTRICT
+LOGIN_STRING
+.RE
+.PP
+chgpasswd
+.RS 4
+ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+chpasswd
+.RS 4
+ENCRYPT_METHOD MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+chsh
+.RS 4
+CHSH_AUTH LOGIN_STRING
+.RE
+.PP
+gpasswd
+.RS 4
+ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+groupadd
+.RS 4
+GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN
+.RE
+.PP
+groupdel
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+groupmems
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+groupmod
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpck
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpconv
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpunconv
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+lastlog
+.RS 4
+LASTLOG_UID_MAX
+.RE
+.PP
+login
+.RS 4
+CONSOLE
+CONSOLE_GROUPS DEFAULT_HOME
+ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE
+ERASECHAR FAIL_DELAY
+FAILLOG_ENAB
+FAKE_SHELL
+FTMP_FILE
+HUSHLOGIN_FILE
+ISSUE_FILE
+KILLCHAR
+LASTLOG_ENAB LASTLOG_UID_MAX
+LOGIN_RETRIES
+LOGIN_STRING
+LOGIN_TIMEOUT LOG_OK_LOGINS LOG_UNKFAIL_ENAB
+MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB
+TTYGROUP TTYPERM TTYTYPE_FILE
+ULIMIT UMASK
+USERGROUPS_ENAB
+.RE
+.PP
+newgrp / sg
+.RS 4
+SYSLOG_SG_ENAB
+.RE
+.PP
+newusers
+.RS 4
+ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB HOME_MODE PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+SUB_GID_COUNT SUB_GID_MAX SUB_GID_MIN SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK
+.RE
+.PP
+passwd
+.RS 4
+ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+pwck
+.RS 4
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+.RE
+.PP
+pwconv
+.RS 4
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+.RE
+.PP
+su
+.RS 4
+CONSOLE
+CONSOLE_GROUPS DEFAULT_HOME
+ENV_HZ ENVIRON_FILE
+ENV_PATH ENV_SUPATH
+ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE QUOTAS_ENAB
+SULOG_FILE SU_NAME
+SU_WHEEL_ONLY
+SYSLOG_SU_ENAB
+USERGROUPS_ENAB
+.RE
+.PP
+sulogin
+.RS 4
+ENV_HZ
+ENV_TZ
+.RE
+.PP
+useradd
+.RS 4
+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 SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK
+.RE
+.PP
+userdel
+.RS 4
+MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB
+.RE
+.PP
+usermod
+.RS 4
+LASTLOG_UID_MAX MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBsu\fR(1),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBpam\fR(8)\&.
diff --git a/man/fr/man5/passwd.5 b/man/fr/man5/passwd.5
new file mode 100644
index 0000000..99cc56e
--- /dev/null
+++ b/man/fr/man5/passwd.5
@@ -0,0 +1,193 @@
+'\" t
+.\" Title: passwd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Formats et conversions de fichiers
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "PASSWD" "5" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Formats et conversions de fich"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+passwd \- fichier des mots de passe
+.SH "DESCRIPTION"
+.PP
+/etc/passwd
+contains one line for each user account, with seven fields delimited by colons (\(Fo\ \&:\ \&\(Fc)\&. These fields are:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+nom de connexion de l\*(Aqutilisateur (\(Fo\ \&login\ \&\(Fc)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+un mot de passe chiffr\('e optionnel
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+l\*(Aqidentifiant num\('erique de l\*(Aqutilisateur
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+l\*(Aqidentifiant num\('erique du groupe de l\*(Aqutilisateur
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+le nom complet de l\*(Aqutilisateur ou un champ de commentaires
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+le r\('epertoire personnel de l\*(Aqutilisateur
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+l\*(Aqinterpr\('eteur de commandes de l\*(Aqutilisateur (optionnel)
+.RE
+.PP
+If the
+\fIpassword\fR
+field is a lower\-case
+\(Fo\ \&x\ \&\(Fc, then the encrypted password is actually stored in the
+\fBshadow\fR(5)
+file instead; there
+\fImust\fR
+be a corresponding line in the
+/etc/shadow
+file, or else the user account is invalid\&.
+.PP
+The encrypted
+\fIpassword\fR
+field may be empty, in which case no password is required to authenticate as the specified login name\&. However, some applications which read the
+/etc/passwd
+file may decide not to permit
+\fIany\fR
+access at all if the
+\fIpassword\fR
+field is blank\&.
+.PP
+A
+\fIpassword\fR
+field which starts with an exclamation mark means that the password is locked\&. The remaining characters on the line represent the
+\fIpassword\fR
+field before the password was locked\&.
+.PP
+Refer to
+\fBcrypt\fR(3)
+for details on how this string is interpreted\&.
+.PP
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), 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)\&.
+.PP
+The comment field is used by various system utilities, such as
+\fBfinger\fR(1)\&.
+.PP
+The home directory field provides the name of the initial working directory\&. The
+\fBlogin\fR
+program uses this information to set the value of the
+\fB$HOME\fR
+environmental variable\&.
+.PP
+The command interpreter field provides the name of the user\*(Aqs command language interpreter, or the name of the initial program to execute\&. The
+\fBlogin\fR
+program uses this information to set the value of the
+\fB$SHELL\fR
+environmental variable\&. If this field is empty, it defaults to the value
+/bin/sh\&.
+.SH "FICHIERS"
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+un mot de passe chiffr\('e optionnel
+.RE
+.PP
+/etc/passwd\-
+.RS 4
+Fichier de sauvegarde de /etc/passwd\&.
+.sp
+Notez que ce fichier est utilis\('e par les outils de la suite d\*(Aqoutils shadow, mais pas par tous les outils de gestion d\*(Aqutilisateurs et de mot de passes\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBcrypt\fR(3),
+\fBgetent\fR(1),
+\fBgetpwnam\fR(3),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBpwck\fR(8),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBshadow\fR(5),
+\fBsu\fR(1),
+\fBsulogin\fR(8)\&.
diff --git a/man/fr/man5/porttime.5 b/man/fr/man5/porttime.5
new file mode 100644
index 0000000..129af19
--- /dev/null
+++ b/man/fr/man5/porttime.5
@@ -0,0 +1,96 @@
+'\" t
+.\" Title: porttime
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Formats et conversions de fichiers
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "PORTTIME" "5" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Formats et conversions de fich"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+porttime \- Fichier de configuration des droits d\*(Aqacc\(`es en fonction de la date et de l\*(Aqheure
+.SH "DESCRIPTION"
+.PP
+\fIporttime\fR
+contains a list of tty devices, user names, and permitted login times\&.
+.PP
+Chaque entr\('ee consiste en trois champs s\('epar\('es par un caract\(`ere deux\-points \(Fo\ \&:\ \&\(Fc\&. Le premier champ est une liste de tty s\('epar\('es par des virgules, ou un ast\('erisque \(Fo\ \&*\ \&\(Fc pour indiquer que l\*(Aqentr\('ee correspond \(`a toutes les tty\&. Le second champ est une liste de noms d\*(Aqutilisateurs, ou un ast\('erisque pour indiquer que cette entr\('ee correspond \(`a n\*(Aqimporte quel utilisateur\&. Le troisi\(`eme champ est une liste d\*(Aqhoraires d\*(Aqacc\(`es autoris\('es\&.
+.PP
+Each access time entry consists of zero or more days of the week, abbreviated
+\fISu\fR,
+\fIMo\fR,
+\fITu\fR,
+\fIWe\fR,
+\fITh\fR,
+\fIFr\fR, and
+\fISa\fR, followed by a pair of times separated by a hyphen\&. The abbreviation
+\fIWk\fR
+may be used to represent Monday thru Friday, and
+\fIAl\fR
+may be used to indicate every day\&. If no days are given,
+\fIAl\fR
+is assumed\&.
+.SH "EXEMPLES"
+.PP
+The following entry allows access to user
+\fBjfh\fR
+on every port during weekdays from 9am to 5pm\&.
+.PP
+*:jfh:Wk0900\-1700
+.PP
+The following entries allow access only to the users
+\fIroot\fR
+and
+\fIoper\fR
+on
+/dev/console
+at any time\&. This illustrates how the
+/etc/porttime
+file is an ordered list of access times\&. Any other user would match the second entry which does not permit access at any time\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ console:root,oper:Al0000\-2400
+ console:*:
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+The following entry allows access for the user
+\fIgames\fR
+on any port during non\-working hours\&.
+.PP
+*:games:Wk1700\-0900,SaSu0000\-2400
+.SH "FICHIERS"
+.PP
+/etc/porttime
+.RS 4
+Fichier contenant le port d\*(Aqacc\(`es\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBlogin\fR(1)\&.
diff --git a/man/fr/man5/shadow.5 b/man/fr/man5/shadow.5
new file mode 100644
index 0000000..75d1da8
--- /dev/null
+++ b/man/fr/man5/shadow.5
@@ -0,0 +1,148 @@
+'\" t
+.\" Title: shadow
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Formats et conversions de fichiers
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "SHADOW" "5" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Formats et conversions de fich"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+shadow \- fichier des mots de passe cach\('es
+.SH "DESCRIPTION"
+.PP
+shadow
+is a file which contains the password information for the system\*(Aqs accounts and optional aging information\&.
+.PP
+Ce fichier ne doit pas \(^etre accessible en lecture par les utilisateurs normaux afin de maintenir la s\('ecurit\('e des mots de passe, en particuliers pour pr\('evenir les attaques par dictionnaires\&.
+.PP
+Each line of this file contains 9 fields, separated by colons (\(Fo\ \&:\ \&\(Fc), in the following order:
+.PP
+\fBnom de connexion de l\*(Aqutilisateur (\(Fo\ \&login\ \&\(Fc)\fR
+.RS 4
+Ce doit \(^etre un nom de compte valable, qui existe sur le syst\(`eme\&.
+.RE
+.PP
+\fBmot de passe chiffr\('e\fR
+.RS 4
+This field may be empty, in which case no passwords are required to authenticate as the specified login name\&. However, some applications which read the
+/etc/shadow
+file may decide not to permit any access at all if the password field is empty\&.
+.sp
+Un champ de mot de passe qui commence avec un point d\*(Aqexclamation indique que le mot de passe est bloqu\('e\&. Les caract\(`eres restants sur la ligne repr\('esentent le champ de mot de passe avant que le mot de passe n\*(Aqait \('et\('e bloqu\('e\&.
+.sp
+Refer to
+\fBcrypt\fR(3)
+for details on how this string is interpreted\&.
+.sp
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), 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)\&.
+.RE
+.PP
+\fBdate du dernier changement de mot de passe\fR
+.RS 4
+La date du dernier changement de mot de passe, exprim\('ee en nombre de jours depuis le 1er\ \&janvier\ \&1970\&.
+.sp
+La valeur 0 a une signification particuli\(`ere\ \&: l\*(Aqutilisateur devra changer son mot de passe la prochaine fois qu\*(Aqil se connectera au syst\(`eme\&.
+.sp
+Un champ vide indique que les fonctionnalit\('es de vieillissement de mot de passe sont d\('esactiv\('ees\&.
+.RE
+.PP
+\fB\(^age minimum du mot de passe\fR
+.RS 4
+L\*(Aq\(^age minimum du mot de passe est la dur\('ee (en jour) que l\*(Aqutilisateur devra attendre avant de pouvoir le changer de nouveau\&.
+.sp
+Un champ vide ou une valeur de 0 signifie qu\*(Aqil n\*(Aqy a pas d\*(Aq\(^age minimum pour le mot de passe\&.
+.RE
+.PP
+\fB\(^age maximum du mot de passe\fR
+.RS 4
+L\*(Aq\(^age maximum du mot de passe est la dur\('ee (en jour) apr\(`es laquelle l\*(Aqutilisateur devra changer son mot de passe\&.
+.sp
+Une fois cette dur\('ee \('ecoul\('ee, le mot de passe restera valable\&. Il sera demand\('e \(`a l\*(Aqutilisateur de le changer la prochaine fois qu\*(Aqil se connectera\&.
+.sp
+Un champ vide signifie qu\*(Aqil n\*(Aqy a pour le mot de passe aucune limite d\*(Aq\(^age, aucune p\('eriode d\*(Aqavertissement d\*(Aqexpiration et aucune p\('eriode d\*(Aqinactivit\('e (voir ci\-dessous)\&.
+.sp
+Si l\*(Aq\(^age maximum du mot de passe est plus petit que l\*(Aq\(^age minimum du mot de passe, l\*(Aqutilisateur ne pourra pas changer son mot de passe\&.
+.RE
+.PP
+\fBp\('eriode d\*(Aqavertissement d\*(Aqexpiration du mot de passe\fR
+.RS 4
+La dur\('ee (en jour) pendant laquelle l\*(Aqutilisateur sera averti avant que le mot de passe n\*(Aqexpire (voir l\*(Aq\(^age maximum du mot de passe ci\-dessus)\&.
+.sp
+Un champ vide ou une valeur de 0 signifie qu\*(Aqil n\*(Aqy aura pas de p\('eriode d\*(Aqavertissement d\*(Aqexpiration du mot de passe\&.
+.RE
+.PP
+\fBp\('eriode d\*(Aqinactivit\('e du mot de passe\fR
+.RS 4
+La dur\('ee (en jour) pendant laquelle le mot de passe sera quand m\(^eme accept\('e apr\(`es son expiration (voir l\*(Aq\(^age maximum du mot de passe ci\-dessus)\&. L\*(Aqutilisateur devra mettre \(`a jour son mot de passe \(`a la prochaine connexion\&.
+.sp
+Apr\(`es expiration du mot de passe suivie de la p\('eriode d\*(Aqexpiration, plus aucune connexion n\*(Aqest possible en utilisant le mot de passe de l\*(Aqutilisateur\&. L\*(Aqutilisateur doit contacter son administrateur\&.
+.sp
+Un champ vide signifie qu\*(Aqaucune p\('eriode d\*(Aqinactivit\('e n\*(Aqest impos\('ee\&.
+.RE
+.PP
+\fBdate de fin de validit\('e du compte\fR
+.RS 4
+La date d\*(Aqexpiration du compte, exprim\('e en nombre de jours depuis le 1er\ \&janvier\ \&1970\&.
+.sp
+Veuillez noter que l\*(Aqexpiration d\*(Aqun compte diff\(`ere de l\*(Aqexpiration d\*(Aqun mot de passe\&. En cas d\*(Aqexpiration d\*(Aqun compte, l\*(Aqutilisateur ne sera plus autoris\('e \(`a se connecter\&. En cas d\*(Aqexpiration d\*(Aqun mot de passe, l\*(Aqutilisateur n\*(Aqest pas autoris\('e \(`a se connecter en utilisant son mot de passe\&.
+.sp
+Un champ vide signifie que le compte n\*(Aqexpirera jamais\&.
+.sp
+La valeur 0 ne doit pas \(^etre utilis\('ee puisqu\*(Aqelle peut \(^etre interpr\('et\('ee soit comme un compte sans expiration, soit comme ayant expir\('e le 1er\ \&janvier\ \&1970\&.
+.RE
+.PP
+\fBchamp r\('eserv\('e\fR
+.RS 4
+Ce champ est r\('eserv\('e pour une utilisation future\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.PP
+/etc/shadow\-
+.RS 4
+Fichier de sauvegarde pour /etc/shadow\&.
+.sp
+Notez que ce fichier est utilis\('e par les outils de la suite d\*(Aqoutils shadow, mais pas par tous les outils de gestion d\*(Aqutilisateurs et de mot de passes\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBchage\fR(1),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBpasswd\fR(5),
+\fBpwck\fR(8),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBsu\fR(1),
+\fBsulogin\fR(8)\&.
diff --git a/man/fr/man5/suauth.5 b/man/fr/man5/suauth.5
new file mode 100644
index 0000000..960a33e
--- /dev/null
+++ b/man/fr/man5/suauth.5
@@ -0,0 +1,146 @@
+'\" t
+.\" Title: suauth
+.\" Author: Marek Micha\(/lkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Formats et conversions de fichiers
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "SUAUTH" "5" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Formats et conversions de fich"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+suauth \- Fichier de contr\(^ole d\('etaill\('e de su
+.SH "SYNOPSIS"
+.HP \w'\fB/etc/suauth\fR\ 'u
+\fB/etc/suauth\fR
+.SH "DESCRIPTION"
+.PP
+The file
+/etc/suauth
+is referenced whenever the su command is called\&. It can change the behaviour of the su command, based upon:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ 1) the user su is targeting
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+2) l\*(Aqutilisateur qui ex\('ecute la commande su (ou un groupe dont il est membre)
+.PP
+Le fichier est format\('e de la fa\(,con suivante (les lignes commen\(,cant par un \(Fo\ \&#\ \&\(Fc sont des commentaires, et sont ignor\('ees)\ \&:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ to\-id:from\-id:ACTION
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Where to\-id is either the word
+\fIALL\fR, a list of usernames delimited by "," or the words
+\fIALL EXCEPT\fR
+followed by a list of usernames delimited by ","\&.
+.PP
+from\-id is formatted the same as to\-id except the extra word
+\fIGROUP\fR
+is recognized\&.
+\fIALL EXCEPT GROUP\fR
+is perfectly valid too\&. Following
+\fIGROUP\fR
+appears one or more group names, delimited by ","\&. It is not sufficient to have primary group id of the relevant group, an entry in
+\fB/etc/group\fR(5)
+is necessary\&.
+.PP
+Les valeurs d\*(AqACTION valables sont\ \&:
+.PP
+\fIDENY\fR
+.RS 4
+La tentative de changement d\*(Aqutilisateur est arr\(^et\('ee avant que le mot de passe ne soit demand\('e\&.
+.RE
+.PP
+\fINOPASS\fR
+.RS 4
+La tentative est automatiquement r\('eussie\&. Aucun mot de passe n\*(Aqest demand\('e\&.
+.RE
+.PP
+\fIOWNPASS\fR
+.RS 4
+Pour que la commande su soit r\('eussie, l\*(Aqutilisateur doit entrer son propre mot de passe\&. Ceci lui est demand\('e\&.
+.RE
+.PP
+Notez qu\*(Aqil y a trois champs s\('epar\('es par un \(Fo\ \&deux\-points\ \&\(Fc\&. Ne pas accoler d\*(Aqespace \(`a ce \(Fo\ \&deux\-points\ \&\(Fc\&. Notez aussi que le fichier est examin\('e s\('equentiellement ligne par ligne, et que la premi\(`ere r\(`egle applicable est utilis\('ee sans que le reste du fichier ne soit examin\('e\&. Ceci permet \(`a l\*(Aqadministrateur syst\(`eme de d\('efinir un contr\(^ole aussi fin qu\*(Aqil le souhaite\&.
+.SH "EXEMPLE"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ # sample /etc/suauth file
+ #
+ # A couple of privileged usernames may
+ # su to root with their own password\&.
+ #
+ root:chris,birddog:OWNPASS
+ #
+ # Anyone else may not su to root unless in
+ # group wheel\&. This is how BSD does things\&.
+ #
+ root:ALL EXCEPT GROUP wheel:DENY
+ #
+ # Perhaps terry and birddog are accounts
+ # owned by the same person\&.
+ # Access can be arranged between them
+ # with no password\&.
+ #
+ terry:birddog:NOPASS
+ birddog:terry:NOPASS
+ #
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "FICHIERS"
+.PP
+/etc/suauth
+.RS 4
+.RE
+.SH "BOGUES"
+.PP
+Il en reste sans doute beaucoup\&. L\*(Aqanalyseur du fichier est particuli\(`erement impitoyable avec les erreurs de syntaxe\&. Il n\*(Aqautorise d\*(Aqespace qu\*(Aqen d\('ebut et fin de ligne, et seul le d\('elimiteur sp\('ecifique doit \(^etre utilis\('e\&.
+.SH "DIAGNOSTICS"
+.PP
+An error parsing the file is reported using
+\fBsyslogd\fR(8)
+as level ERR on facility AUTH\&.
+.SH "VOIR AUSSI"
+.PP
+\fBsu\fR(1)\&.
diff --git a/man/fr/man5/subgid.5 b/man/fr/man5/subgid.5
new file mode 100644
index 0000000..be6a05f
--- /dev/null
+++ b/man/fr/man5/subgid.5
@@ -0,0 +1,100 @@
+'\" t
+.\" Title: subgid
+.\" Author: Eric Biederman
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Formats et conversions de fichiers
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "SUBGID" "5" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Formats et conversions de fich"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+subgid \- the subordinate gid file
+.SH "DESCRIPTION"
+.PP
+Each line in
+/etc/subgid
+contains a user name and a range of subordinate group ids that user is allowed to use\&. This is specified with three fields delimited by colons (\(Fo\ \&:\ \&\(Fc)\&. These fields are:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+login name or UID
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+numerical subordinate group ID
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+numerical subordinate group ID count
+.RE
+.PP
+This file specifies the group IDs that ordinary users can use, with the
+\fBnewgidmap\fR
+command, to configure gid mapping in a user namespace\&.
+.PP
+Multiple ranges may be specified per user\&.
+.PP
+When large number of entries (10000\-100000 or more) are defined in
+/etc/subgid, parsing performance penalty will become noticeable\&. In this case it is recommended to use UIDs instead of login names\&. Benchmarks have shown speed\-ups up to 20x\&.
+.SH "FICHIERS"
+.PP
+/etc/subgid
+.RS 4
+IDs des groupes subalternes d\*(Aqun utilisateur\&.
+.RE
+.PP
+/etc/subgid\-
+.RS 4
+Backup file for /etc/subgid\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBlogin.defs\fR(5),
+\fBnewgidmap\fR(1),
+\fBnewuidmap\fR(1),
+\fBnewusers\fR(8),
+\fBsubuid\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8),
+\fBuser_namespaces\fR(7)\&.
diff --git a/man/fr/man5/subuid.5 b/man/fr/man5/subuid.5
new file mode 100644
index 0000000..6078bd6
--- /dev/null
+++ b/man/fr/man5/subuid.5
@@ -0,0 +1,100 @@
+'\" t
+.\" Title: subuid
+.\" Author: Eric Biederman
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Formats et conversions de fichiers
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "SUBUID" "5" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Formats et conversions de fich"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+subuid \- the subordinate uid file
+.SH "DESCRIPTION"
+.PP
+Each line in
+/etc/subuid
+contains a user name and a range of subordinate user ids that user is allowed to use\&. This is specified with three fields delimited by colons (\(Fo\ \&:\ \&\(Fc)\&. These fields are:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+login name or UID
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+numerical subordinate user ID
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+numerical subordinate user ID count
+.RE
+.PP
+This file specifies the user IDs that ordinary users can use, with the
+\fBnewuidmap\fR
+command, to configure uid mapping in a user namespace\&.
+.PP
+Multiple ranges may be specified per user\&.
+.PP
+When large number of entries (10000\-100000 or more) are defined in
+/etc/subuid, parsing performance penalty will become noticeable\&. In this case it is recommended to use UIDs instead of login names\&. Benchmarks have shown speed\-ups up to 20x\&.
+.SH "FICHIERS"
+.PP
+/etc/subuid
+.RS 4
+IDs de utilisateurs subalternes d\*(Aqun utilisateur\&.
+.RE
+.PP
+/etc/subuid\-
+.RS 4
+Backup file for /etc/subuid\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBlogin.defs\fR(5),
+\fBnewgidmap\fR(1),
+\fBnewuidmap\fR(1),
+\fBnewusers\fR(1),
+\fBsubgid\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8),
+\fBuser_namespaces\fR(7)\&.
diff --git a/man/fr/man8/chgpasswd.8 b/man/fr/man8/chgpasswd.8
new file mode 100644
index 0000000..91250af
--- /dev/null
+++ b/man/fr/man8/chgpasswd.8
@@ -0,0 +1,208 @@
+'\" t
+.\" Title: chgpasswd
+.\" Author: Thomas K\(/loczko <kloczek@pld.org.pl>
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes de gestion du syst\(`eme
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "CHGPASSWD" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+chgpasswd \- Mettre \(`a jour par lot des mots de passe des groupes
+.SH "SYNOPSIS"
+.HP \w'\fBchgpasswd\fR\ 'u
+\fBchgpasswd\fR [\fIoptions\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBchgpasswd\fR
+command reads a list of group name and password pairs from standard input and uses this information to update a set of existing groups\&. Each line is of the format:
+.PP
+\fIgroup_name\fR:\fIpassword\fR
+.PP
+By default the supplied password must be in clear\-text, and is encrypted by
+\fBchgpasswd\fR\&.
+.PP
+The default encryption algorithm can be defined for the system with the
+\fBENCRYPT_METHOD\fR
+variable of
+/etc/login\&.defs, and can be overwritten with the
+\fB\-e\fR,
+\fB\-m\fR, or
+\fB\-c\fR
+options\&.
+.PP
+Cette commande est destin\('ee aux gros syst\(`emes pour lesquels un nombre importants de comptes sont cr\('e\('es en une seule fois\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBchgpasswd\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+Utiliser la m\('ethode pr\('ecis\('ee pour chiffrer les mots de passe\&.
+.sp
+Les m\('ethodes disponibles sont DES, MD5, NONE et SHA256 ou SHA512 si votre libc prend en charge ces m\('ethodes\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-encrypted\fR
+.RS 4
+Indiquer que les mots de passe fournis sont chiffr\('es\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\*(Aqaide et quitter\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-md5\fR
+.RS 4
+Permettre d\*(Aqutiliser le chiffrement MD5, plut\(^ot que DES, lorsque les mots de passe fournis ne sont pas chiffr\('es\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+Utiliser le nombre de rounds pr\('ecis\('e pour chiffrer les mots de passe\&.
+.sp
+La valeur 0 signifie que le syst\(`eme choisira la valeur par d\('efaut du nombre de rounds pour la m\('ethode de chiffrement (5\ \&000)\&.
+.sp
+Une valeur minimale de 1\ \&000 et une valeur maximale de 999\ \&999\ \&999 seront impos\('ees\&.
+.sp
+Vous ne pouvez utiliser cette m\('ethode qu\*(Aqavec les m\('ethodes de chiffrement SHA256 ou SHA512\&.
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "AVERTISSEMENTS"
+.PP
+Pensez \(`a configurer les permissions ou umask afin d\*(Aqemp\(^echer la lecture des fichiers non chiffr\('es par les d\*(Aqautres utilisateurs\&.
+.PP
+Vous devez vous assurer que les mots de passe et la m\('ethode de chiffrement respectent la politique de mot de passe du syst\(`eme\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+D\('efinir les algorithmes de chiffrement par d\('efaut du syst\(`eme pour coder les mots de passes (si aucun algorithme n\*(Aqa \('et\('e indiqu\('e sur la ligne de commandes)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+La valeur par d\('efaut est 0, ce qui signifie qu\*(Aqil n\*(Aqy a pas de limites pour le nombre de membres dans un groupe\&.
+.sp
+Cette fonctionnalit\('e (groupe d\('ecoup\('e) permet de limiter la longueur des lignes dans le fichier de groupes\&. Ceci est utile pour s\*(Aqassurer que les lignes pour les groupes NIS ne sont pas plus grandes que 1024 caract\(`eres\&.
+.sp
+Si vous avez besoin de configurer cette limite, vous pouvez utiliser 25\&.
+.sp
+Remarque\ \&: les groupes d\('ecoup\('es ne sont peut\-\(^etre pas pris en charge par tous les outils (m\(^eme dans la suite d\*(Aqoutils Shadow)\&. Vous ne devriez pas utiliser cette variable, sauf si vous en avez vraiment besoin\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+Avec beaucoup de rounds, il est plus difficile de trouver le mot de passe avec une attaque par force brute\&. Veuillez remarquer que plus de ressources processeur seront n\('ecessaires pour authentifier les utilisateurs\&.
+.sp
+Si non pr\('ecis\('ee, la libc utilisera le nombre de rounds par d\('efaut (5000)\&.
+.sp
+Les valeurs doivent \(^etre comprises dans l\*(Aqintervalle 1\ \&000\ \&\-\ \&999\ \&999\ \&999\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informations s\('ecuris\('ees sur les groupes\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBgpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBlogin.defs\fR(5)\&.
diff --git a/man/fr/man8/chpasswd.8 b/man/fr/man8/chpasswd.8
new file mode 100644
index 0000000..e86a004
--- /dev/null
+++ b/man/fr/man8/chpasswd.8
@@ -0,0 +1,212 @@
+'\" t
+.\" Title: chpasswd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes de gestion du syst\(`eme
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "CHPASSWD" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+chpasswd \- Mettre \(`a jour des mots de passe par lot
+.SH "SYNOPSIS"
+.HP \w'\fBchpasswd\fR\ 'u
+\fBchpasswd\fR [\fIoptions\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBchpasswd\fR
+command reads a list of user name and password pairs from standard input and uses this information to update a group of existing users\&. Each line is of the format:
+.PP
+\fIuser_name\fR:\fIpassword\fR
+.PP
+By default the passwords must be supplied in clear\-text, and are encrypted by
+\fBchpasswd\fR\&. Also the password age will be updated, if present\&.
+.PP
+The default encryption algorithm can be defined for the system with the
+\fBENCRYPT_METHOD\fR
+or
+\fBMD5_CRYPT_ENAB\fR
+variables of
+/etc/login\&.defs, and can be overwritten with the
+\fB\-e\fR,
+\fB\-m\fR, or
+\fB\-c\fR
+options\&.
+.PP
+\fBchpasswd\fR
+first updates all the passwords in memory, and then commits all the changes to disk if no errors occurred for any user\&.
+.PP
+Cette commande est destin\('ee aux gros syst\(`emes pour lesquels un nombre importants de comptes sont cr\('e\('es en une seule fois\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBchpasswd\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR\ \&\fIMETHOD\fR
+.RS 4
+Utiliser la m\('ethode pr\('ecis\('ee pour chiffrer les mots de passe\&.
+.sp
+Les m\('ethodes disponibles sont DES, MD5, NONE et SHA256 ou SHA512 si votre libc prend en charge ces m\('ethodes\&.
+.sp
+By default (if none of the
+\fB\-c\fR,
+\fB\-m\fR, or
+\fB\-e\fR
+options are specified), the encryption method is defined by the
+\fBENCRYPT_METHOD\fR
+or
+\fBMD5_CRYPT_ENAB\fR
+variables of
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-encrypted\fR
+.RS 4
+Indiquer que les mots de passe fournis sont chiffr\('es\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\*(Aqaide et quitter\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-md5\fR
+.RS 4
+Permettre d\*(Aqutiliser le chiffrement MD5, plut\(^ot que DES, lorsque les mots de passe fournis ne sont pas chiffr\('es\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR\ \&\fIROUNDS\fR
+.RS 4
+Utiliser le nombre de rounds pr\('ecis\('e pour chiffrer les mots de passe\&.
+.sp
+La valeur 0 signifie que le syst\(`eme choisira la valeur par d\('efaut du nombre de rounds pour la m\('ethode de chiffrement (5\ \&000)\&.
+.sp
+Une valeur minimale de 1\ \&000 et une valeur maximale de 999\ \&999\ \&999 seront impos\('ees\&.
+.sp
+Vous ne pouvez utiliser cette m\('ethode qu\*(Aqavec les m\('ethodes de chiffrement SHA256 ou SHA512\&.
+.sp
+By default, the number of rounds is defined by the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+and
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+variables in
+/etc/login\&.defs\&.
+.RE
+.SH "AVERTISSEMENTS"
+.PP
+Pensez \(`a configurer les permissions ou umask afin d\*(Aqemp\(^echer la lecture des fichiers non chiffr\('es par les d\*(Aqautres utilisateurs\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+D\('efinir les algorithmes de chiffrement par d\('efaut du syst\(`eme pour coder les mots de passes (si aucun algorithme n\*(Aqa \('et\('e indiqu\('e sur la ligne de commandes)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+Avec beaucoup de rounds, il est plus difficile de trouver le mot de passe avec une attaque par force brute\&. Veuillez remarquer que plus de ressources processeur seront n\('ecessaires pour authentifier les utilisateurs\&.
+.sp
+Si non pr\('ecis\('ee, la libc utilisera le nombre de rounds par d\('efaut (5000)\&.
+.sp
+Les valeurs doivent \(^etre comprises dans l\*(Aqintervalle 1\ \&000\ \&\-\ \&999\ \&999\ \&999\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBpasswd\fR(1),
+\fBnewusers\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8)\&.
diff --git a/man/fr/man8/faillog.8 b/man/fr/man8/faillog.8
new file mode 100644
index 0000000..ce85c7c
--- /dev/null
+++ b/man/fr/man8/faillog.8
@@ -0,0 +1,165 @@
+'\" t
+.\" Title: faillog
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes de gestion du syst\(`eme
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "FAILLOG" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+faillog \- Examiner le fichier faillog, et configurer les limites d\*(Aq\('echecs de connexion
+.SH "SYNOPSIS"
+.HP \w'\fBfaillog\fR\ 'u
+\fBfaillog\fR [\fIoptions\fR]
+.SH "DESCRIPTION"
+.PP
+\fBfaillog\fR
+displays the contents of the failure log database (/var/log/faillog)\&. It can also set the failure counters and limits\&. When
+\fBfaillog\fR
+is run without arguments, it only displays the faillog records of the users who had a login failure\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBfaillog\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+Display (or act on) faillog records for all users having an entry in the
+faillog
+database\&.
+.sp
+The range of users can be restricted with the
+\fB\-u\fR
+option\&.
+.sp
+En mode affichage, toujours limit\('ee aux utilisateurs existants, mais l\*(Aqaffichage des entr\('ees d\*(Aqerreur de connexion est impos\('e m\(^eme si elles sont vides\&.
+.sp
+With the
+\fB\-l\fR,
+\fB\-m\fR,
+\fB\-r\fR,
+\fB\-t\fR
+options, the users\*(Aq records are changed, even if the user does not exist on the system\&. This is useful to reset records of users that have been deleted or to set a policy in advance for a range of users\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\*(Aqaide et quitter\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\-secs\fR\ \&\fISEC\fR
+.RS 4
+Lock account for
+\fISEC\fR
+seconds after failed login\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-maximum\fR\ \&\fIMAX\fR
+.RS 4
+Set the maximum number of login failures after the account is disabled to
+\fIMAX\fR\&.
+.sp
+Selecting a
+\fIMAX\fR
+value of 0 has the effect of not placing a limit on the number of failed logins\&.
+.sp
+The maximum failure count should always be 0 for
+\fIroot\fR
+to prevent a denial of services attack against the system\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-reset\fR
+.RS 4
+Remettre \(`a z\('ero le compteur d\*(Aq\('echecs de connexion\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR\ \&\fIDAYS\fR
+.RS 4
+Display faillog records more recent than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR\ \&\fILOGIN\fR|\fIRANGE\fR
+.RS 4
+Display faillog record or maintains failure counters and limits (if used with
+\fB\-l\fR,
+\fB\-m\fR
+or
+\fB\-r\fR
+options) only for the specified user(s)\&.
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+When none of the
+\fB\-l\fR,
+\fB\-m\fR, or
+\fB\-r\fR
+options are used,
+\fBfaillog\fR
+displays the faillog record of the specified user(s)\&.
+.SH "AVERTISSEMENTS"
+.PP
+\fBfaillog\fR
+only prints out users with no successful login since the last failure\&. To print out a user who has had a successful login since their last failure, you must explicitly request the user with the
+\fB\-u\fR
+flag, or print out all users with the
+\fB\-a\fR
+flag\&.
+.SH "FICHIERS"
+.PP
+/var/log/faillog
+.RS 4
+Journal des \('echecs de connexion\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBlogin\fR(1),
+\fBfaillog\fR(5)\&.
diff --git a/man/fr/man8/groupadd.8 b/man/fr/man8/groupadd.8
new file mode 100644
index 0000000..3ff9253
--- /dev/null
+++ b/man/fr/man8/groupadd.8
@@ -0,0 +1,257 @@
+'\" t
+.\" Title: groupadd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes de gestion du syst\(`eme
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "GROUPADD" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+groupadd \- Cr\('eer un nouveau groupe
+.SH "SYNOPSIS"
+.HP \w'\fBgroupadd\fR\ 'u
+\fBgroupadd\fR [\fIoptions\fR] \fIgroupe\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBgroupadd\fR
+command creates a new group account using the values specified on the command line plus the default values from the system\&. The new group will be entered into the system files as needed\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBgroupadd\fR
+command are:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option causes the command to simply exit with success status if the specified group already exists\&. When used with
+\fB\-g\fR, and the specified GID already exists, another (unique) GID is chosen (i\&.e\&.
+\fB\-g\fR
+is turned off)\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGID\fR
+.RS 4
+The numerical value of the group\*(Aqs ID\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&. The default is to use the smallest ID value greater than or equal to
+\fBGID_MIN\fR
+and greater than every other group\&.
+.sp
+See also the
+\fB\-r\fR
+option and the
+\fBGID_MAX\fR
+description\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\*(Aqaide et quitter\&.
+.RE
+.PP
+\fB\-K\fR, \fB\-\-key\fR\ \&\fIKEY\fR=\fIVALUE\fR
+.RS 4
+Overrides
+/etc/login\&.defs
+defaults (GID_MIN, GID_MAX and others)\&. Multiple
+\fB\-K\fR
+options can be specified\&.
+.sp
+Example:
+\fB\-K\fR\ \&\fIGID_MIN\fR=\fI100\fR\ \&
+\fB\-K\fR\ \&\fIGID_MAX\fR=\fI499\fR
+.sp
+Note:
+\fB\-K\fR\ \&\fIGID_MIN\fR=\fI10\fR,\fIGID_MAX\fR=\fI499\fR
+doesn\*(Aqt work yet\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+Cette option permet d\*(Aqajouter un groupe avec un identifiant (\(Fo\ \&GID\ \&\(Fc) d\('ej\(`a utilis\('e\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&. The default is to disable the password\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+Il est n\('ecessaire de v\('erifier si le mot de passe respecte la politique de mots de passe du syst\(`eme\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Cr\('eer un groupe syst\(`eme\&.
+.sp
+The numeric identifiers of new system groups are chosen in the
+\fBSYS_GID_MIN\fR\-\fBSYS_GID_MAX\fR
+range, defined in
+login\&.defs, instead of
+\fBGID_MIN\fR\-\fBGID_MAX\fR\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBGID_MIN\fR
+(resp\&.
+\fBGID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+La valeur par d\('efaut est 0, ce qui signifie qu\*(Aqil n\*(Aqy a pas de limites pour le nombre de membres dans un groupe\&.
+.sp
+Cette fonctionnalit\('e (groupe d\('ecoup\('e) permet de limiter la longueur des lignes dans le fichier de groupes\&. Ceci est utile pour s\*(Aqassurer que les lignes pour les groupes NIS ne sont pas plus grandes que 1024 caract\(`eres\&.
+.sp
+Si vous avez besoin de configurer cette limite, vous pouvez utiliser 25\&.
+.sp
+Remarque\ \&: les groupes d\('ecoup\('es ne sont peut\-\(^etre pas pris en charge par tous les outils (m\(^eme dans la suite d\*(Aqoutils Shadow)\&. Vous ne devriez pas utiliser cette variable, sauf si vous en avez vraiment besoin\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_GID_MIN\fR
+(resp\&.
+\fBSYS_GID_MAX\fR) is 101 (resp\&.
+\fBGID_MIN\fR\-1)\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informations s\('ecuris\('ees sur les groupes\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.SH "AVERTISSEMENTS"
+.PP
+Les noms de groupe doivent commencer par une lettre minuscule ou un tiret bas (\(Fo\ \&underscore\ \&\(Fc), et seuls des lettres minuscules, des chiffres, des \(Fo\ \&underscore\ \&\(Fc, ou des tirets peuvent suivre\&. Ils peuvent se terminer par un signe dollar\&. Soit, sous la forme d\*(Aqune expression rationnelle\ \&: [a\-z_][a\-z0\-9_\-]*[$]?
+.PP
+Groupnames may only be up to 16 characters long\&.
+.PP
+Vous ne pouvez pas ajouter d\*(Aqutilisateur \(`a un groupe NIS ou LDAP\&. Cela doit \(^etre effectu\('e sur le serveur correspondant\&.
+.PP
+If the groupname already exists in an external group database such as NIS or LDAP,
+\fBgroupadd\fR
+will deny the group creation request\&.
+.SH "VALEURS DE RETOUR"
+.PP
+The
+\fBgroupadd\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+GID not unique (when
+\fB\-o\fR
+not used)
+.RE
+.PP
+\fI9\fR
+.RS 4
+group name not unique
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/fr/man8/groupdel.8 b/man/fr/man8/groupdel.8
new file mode 100644
index 0000000..44788f7
--- /dev/null
+++ b/man/fr/man8/groupdel.8
@@ -0,0 +1,145 @@
+'\" t
+.\" Title: groupdel
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes de gestion du syst\(`eme
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "GROUPDEL" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+groupdel \- Supprimer un groupe
+.SH "SYNOPSIS"
+.HP \w'\fBgroupdel\fR\ 'u
+\fBgroupdel\fR [\fIoptions\fR] \fIGROUPE\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBgroupdel\fR
+command modifies the system account files, deleting all entries that refer to
+\fIGROUP\fR\&. The named group must exist\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBgroupdel\fR
+command are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\*(Aqaide et quitter\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.SH "AVERTISSEMENTS"
+.PP
+Vous ne pouvez pas supprimer le groupe primaire d\*(Aqun utilisateur existant\&. Vous devez supprimer l\*(Aqutilisateur auparavant\&.
+.PP
+Vous devriez v\('erifier vous\-m\(^eme qu\*(Aqaucun fichier poss\('ed\('e par le groupe ne subsiste sur tous les syst\(`emes de fichiers\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+La valeur par d\('efaut est 0, ce qui signifie qu\*(Aqil n\*(Aqy a pas de limites pour le nombre de membres dans un groupe\&.
+.sp
+Cette fonctionnalit\('e (groupe d\('ecoup\('e) permet de limiter la longueur des lignes dans le fichier de groupes\&. Ceci est utile pour s\*(Aqassurer que les lignes pour les groupes NIS ne sont pas plus grandes que 1024 caract\(`eres\&.
+.sp
+Si vous avez besoin de configurer cette limite, vous pouvez utiliser 25\&.
+.sp
+Remarque\ \&: les groupes d\('ecoup\('es ne sont peut\-\(^etre pas pris en charge par tous les outils (m\(^eme dans la suite d\*(Aqoutils Shadow)\&. Vous ne devriez pas utiliser cette variable, sauf si vous en avez vraiment besoin\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informations s\('ecuris\('ees sur les groupes\&.
+.RE
+.SH "VALEURS DE RETOUR"
+.PP
+The
+\fBgroupdel\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI8\fR
+.RS 4
+can\*(Aqt remove user\*(Aqs primary group
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/fr/man8/groupmems.8 b/man/fr/man8/groupmems.8
new file mode 100644
index 0000000..df549b3
--- /dev/null
+++ b/man/fr/man8/groupmems.8
@@ -0,0 +1,180 @@
+'\" t
+.\" Title: groupmems
+.\" Author: George Kraft, IV
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes de gestion du syst\(`eme
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "GROUPMEMS" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+groupmems \- Administrer les membres du groupe primaire d\*(Aqun utilisateur
+.SH "SYNOPSIS"
+.HP \w'\fBgroupmems\fR\ 'u
+\fBgroupmems\fR \-a\ \fIuser_name\fR | \-d\ \fIuser_name\fR | [\-g\ \fIgroup_name\fR] | \-l | \-p
+.SH "DESCRIPTION"
+.PP
+The
+\fBgroupmems\fR
+command 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)\&.
+.PP
+Only the superuser, as administrator, can use
+\fBgroupmems\fR
+to alter the memberships of other groups\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBgroupmems\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-add\fR\ \&\fIuser_name\fR
+.RS 4
+Ajouter un utilisateur \(`a la liste des membres du groupe\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR\ \&\fIuser_name\fR
+.RS 4
+Supprimer un utilisateur de la liste des membres du groupe\&.
+.sp
+If the
+/etc/gshadow
+file exist, the user will be removed from the list of members and administrators of the group\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-group\fR\ \&\fIgroup_name\fR
+.RS 4
+Le superutilisateur peut pr\('eciser la liste des membres du groupe \(`a modifier\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\*(Aqaide et quitter\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-list\fR
+.RS 4
+Afficher la liste des membres du groupe\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-purge\fR
+.RS 4
+Supprimer tous les utilisateurs de la liste des membres du groupe\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The
+\fBgroupmems\fR
+executable should be in mode
+2710
+as user
+\fIroot\fR
+and in group
+\fIgroups\fR\&. The system administrator can add users to group
+\fIgroups\fR
+to allow or disallow them using the
+\fBgroupmems\fR
+utility to manage their own group membership list\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ $ groupadd \-r groups
+ $ chmod 2710 groupmems
+ $ chown root\&.groups groupmems
+ $ groupmems \-g groups \-a gk4
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+La valeur par d\('efaut est 0, ce qui signifie qu\*(Aqil n\*(Aqy a pas de limites pour le nombre de membres dans un groupe\&.
+.sp
+Cette fonctionnalit\('e (groupe d\('ecoup\('e) permet de limiter la longueur des lignes dans le fichier de groupes\&. Ceci est utile pour s\*(Aqassurer que les lignes pour les groupes NIS ne sont pas plus grandes que 1024 caract\(`eres\&.
+.sp
+Si vous avez besoin de configurer cette limite, vous pouvez utiliser 25\&.
+.sp
+Remarque\ \&: les groupes d\('ecoup\('es ne sont peut\-\(^etre pas pris en charge par tous les outils (m\(^eme dans la suite d\*(Aqoutils Shadow)\&. Vous ne devriez pas utiliser cette variable, sauf si vous en avez vraiment besoin\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+informations cach\('ees sur les groupes
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/fr/man8/groupmod.8 b/man/fr/man8/groupmod.8
new file mode 100644
index 0000000..d44f511
--- /dev/null
+++ b/man/fr/man8/groupmod.8
@@ -0,0 +1,233 @@
+'\" t
+.\" Title: groupmod
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes de gestion du syst\(`eme
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "GROUPMOD" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+groupmod \- Modifier la d\('efinition d\*(Aqun groupe du syst\(`eme
+.SH "SYNOPSIS"
+.HP \w'\fBgroupmod\fR\ 'u
+\fBgroupmod\fR [\fIoptions\fR] \fIGROUPE\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBgroupmod\fR
+command modifies the definition of the specified
+\fIGROUP\fR
+by modifying the appropriate entry in the group database\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBgroupmod\fR
+command are:
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGID\fR
+.RS 4
+The group ID of the given
+\fIGROUP\fR
+will be changed to
+\fIGID\fR\&.
+.sp
+The value of
+\fIGID\fR
+must be a non\-negative decimal integer\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&.
+.sp
+Les utilisateurs qui utilisent ce groupe comme groupe primaire seront mis \(`a jour pour garder le groupe comme groupe primaire\&.
+.sp
+Any files that have the old group ID and must continue to belong to
+\fIGROUP\fR, must have their group ID changed manually\&.
+.sp
+No checks will be performed with regard to the
+\fBGID_MIN\fR,
+\fBGID_MAX\fR,
+\fBSYS_GID_MIN\fR, or
+\fBSYS_GID_MAX\fR
+from
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\*(Aqaide et quitter\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-new\-name\fR\ \&\fINEW_GROUP\fR
+.RS 4
+The name of the group will be changed from
+\fIGROUP\fR
+to
+\fINEW_GROUP\fR
+name\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+When used with the
+\fB\-g\fR
+option, allow to change the group
+\fIGID\fR
+to a non\-unique value\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+Il est n\('ecessaire de v\('erifier si le mot de passe respecte la politique de mots de passe du syst\(`eme\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+La valeur par d\('efaut est 0, ce qui signifie qu\*(Aqil n\*(Aqy a pas de limites pour le nombre de membres dans un groupe\&.
+.sp
+Cette fonctionnalit\('e (groupe d\('ecoup\('e) permet de limiter la longueur des lignes dans le fichier de groupes\&. Ceci est utile pour s\*(Aqassurer que les lignes pour les groupes NIS ne sont pas plus grandes que 1024 caract\(`eres\&.
+.sp
+Si vous avez besoin de configurer cette limite, vous pouvez utiliser 25\&.
+.sp
+Remarque\ \&: les groupes d\('ecoup\('es ne sont peut\-\(^etre pas pris en charge par tous les outils (m\(^eme dans la suite d\*(Aqoutils Shadow)\&. Vous ne devriez pas utiliser cette variable, sauf si vous en avez vraiment besoin\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informations s\('ecuris\('ees sur les groupes\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.SH "VALEURS DE RETOUR"
+.PP
+The
+\fBgroupmod\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+E_SUCCESS: success
+.RE
+.PP
+\fI2\fR
+.RS 4
+E_USAGE: invalid command syntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+E_BAD_ARG: invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+E_GID_IN_USE: specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI6\fR
+.RS 4
+E_NOTFOUND: specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI9\fR
+.RS 4
+E_NAME_IN_USE: group name already in use
+.RE
+.PP
+\fI10\fR
+.RS 4
+E_GRP_UPDATE: can\*(Aqt update group file
+.RE
+.PP
+\fI11\fR
+.RS 4
+E_CLEANUP_SERVICE: can\*(Aqt setup cleanup service
+.RE
+.PP
+\fI12\fR
+.RS 4
+E_PAM_USERNAME: can\*(Aqt determine your username for use with pam
+.RE
+.PP
+\fI13\fR
+.RS 4
+E_PAM_ERROR: pam returned an error, see syslog facility id groupmod for the PAM error message
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/fr/man8/grpck.8 b/man/fr/man8/grpck.8
new file mode 100644
index 0000000..04d27c4
--- /dev/null
+++ b/man/fr/man8/grpck.8
@@ -0,0 +1,247 @@
+'\" t
+.\" Title: grpck
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes de gestion du syst\(`eme
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "GRPCK" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+grpck \- V\('erifier l\*(Aqint\('egrit\('e des fichiers d\*(Aqadministration des groupes
+.SH "SYNOPSIS"
+.HP \w'\fBgrpck\fR\ 'u
+\fBgrpck\fR [options] [\fIgroupe\fR\ [\ \fIshadow\fR\ ]]
+.SH "DESCRIPTION"
+.PP
+The
+\fBgrpck\fR
+command verifies the integrity of the groups information\&. It checks that all entries in
+/etc/group
+and /etc/gshadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+Voici les v\('erifications effectu\('ees\ \&:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+nombre correct de champs\ \&;
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+unicit\('e et validit\('e des noms de groupe\ \&;
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid group identifier
+(/etc/group only)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid list of members
+and administrators
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a corresponding entry in the
+/etc/gshadow
+file (respectively
+/etc/group
+for the
+gshadow
+checks)
+.RE
+.PP
+The checks for correct number of fields and unique group name are fatal\&. If an entry has the wrong number of fields, the user will be prompted to delete the entire line\&. If the user does not answer affirmatively, all further checks are bypassed\&. An entry with a duplicated group name is prompted for deletion, but the remaining checks will still be made\&. All other errors are warnings and the user is encouraged to run the
+\fBgroupmod\fR
+command to correct the error\&.
+.PP
+The commands which operate on the
+/etc/group
+and /etc/gshadow files
+are not able to alter corrupted or duplicated entries\&.
+\fBgrpck\fR
+should be used in those circumstances to remove the offending entries\&.
+.SH "OPTIONS"
+.PP
+The
+\fB\-r\fR
+and
+\fB\-s\fR
+options cannot be combined\&.
+.PP
+The options which apply to the
+\fBgrpck\fR
+command are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\*(Aqaide et quitter\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-read\-only\fR
+.RS 4
+Execute the
+\fBgrpck\fR
+command in read\-only mode\&. This causes all questions regarding changes to be answered
+\fIno\fR
+without user intervention\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sort\fR
+.RS 4
+Sort entries in
+/etc/group
+and /etc/gshadow
+by GID\&.
+.RE
+.PP
+By default,
+\fBgrpck\fR
+operates on
+/etc/group
+and /etc/gshadow\&. The user may select alternate files with the
+\fIgroup\fR
+and \fIshadow\fR parameters\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+La valeur par d\('efaut est 0, ce qui signifie qu\*(Aqil n\*(Aqy a pas de limites pour le nombre de membres dans un groupe\&.
+.sp
+Cette fonctionnalit\('e (groupe d\('ecoup\('e) permet de limiter la longueur des lignes dans le fichier de groupes\&. Ceci est utile pour s\*(Aqassurer que les lignes pour les groupes NIS ne sont pas plus grandes que 1024 caract\(`eres\&.
+.sp
+Si vous avez besoin de configurer cette limite, vous pouvez utiliser 25\&.
+.sp
+Remarque\ \&: les groupes d\('ecoup\('es ne sont peut\-\(^etre pas pris en charge par tous les outils (m\(^eme dans la suite d\*(Aqoutils Shadow)\&. Vous ne devriez pas utiliser cette variable, sauf si vous en avez vraiment besoin\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informations s\('ecuris\('ees sur les groupes\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.SH "VALEURS DE RETOUR"
+.PP
+The
+\fBgrpck\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI2\fR
+.RS 4
+one or more bad group entries
+.RE
+.PP
+\fI3\fR
+.RS 4
+can\*(Aqt open group files
+.RE
+.PP
+\fI4\fR
+.RS 4
+can\*(Aqt lock group files
+.RE
+.PP
+\fI5\fR
+.RS 4
+can\*(Aqt update group files
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBgroup\fR(5),
+\fBgroupmod\fR(8),
+\fBgshadow\fR(5),
+\fBpasswd\fR(5),
+\fBpwck\fR(8),
+\fBshadow\fR(5)\&.
diff --git a/man/fr/man8/grpconv.8 b/man/fr/man8/grpconv.8
new file mode 100644
index 0000000..6eed9e8
--- /dev/null
+++ b/man/fr/man8/grpconv.8
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/fr/man8/grpunconv.8 b/man/fr/man8/grpunconv.8
new file mode 100644
index 0000000..6eed9e8
--- /dev/null
+++ b/man/fr/man8/grpunconv.8
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/fr/man8/lastlog.8 b/man/fr/man8/lastlog.8
new file mode 100644
index 0000000..e529cfa
--- /dev/null
+++ b/man/fr/man8/lastlog.8
@@ -0,0 +1,139 @@
+'\" t
+.\" Title: lastlog
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes de gestion du syst\(`eme
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "LASTLOG" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+lastlog \- signaler les connexions les plus r\('ecentes de tous les utilisateurs ou d\*(Aqun utilisateur donn\('e
+.SH "SYNOPSIS"
+.HP \w'\fBlastlog\fR\ 'u
+\fBlastlog\fR [\fIoptions\fR]
+.SH "DESCRIPTION"
+.PP
+\fBlastlog\fR
+formats and prints the contents of the last login log
+/var/log/lastlog
+file\&. The
+\fIlogin\-name\fR,
+\fIport\fR, and
+\fIlast login time\fR
+will be printed\&. The default (no flags) causes lastlog entries to be printed, sorted by their order in
+/etc/passwd\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBlastlog\fR
+command are:
+.PP
+\fB\-b\fR, \fB\-\-before\fR\ \&\fIDAYS\fR
+.RS 4
+Print only lastlog records older than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-C\fR, \fB\-\-clear\fR
+.RS 4
+Clear lastlog record of a user\&. This option can be used only together with
+\fB\-u\fR
+(\fB\-\-user\fR))\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\*(Aqaide et quitter\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-S\fR, \fB\-\-set\fR
+.RS 4
+Set lastlog record of a user to the current time\&. This option can be used only together with
+\fB\-u\fR
+(\fB\-\-user\fR))\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR\ \&\fIDAYS\fR
+.RS 4
+Print the lastlog records more recent than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR\ \&\fILOGIN\fR|\fIRANGE\fR
+.RS 4
+N\*(Aqafficher que les entr\('ees correspondant aux utilisateurs indiqu\('es\&.
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+If the user has never logged in the message
+\fI** Never logged in**\fR
+will be displayed instead of the port and time\&.
+.PP
+Seules les entr\('ees pour les utilisateurs actuels du syst\(`eme seront affich\('ees\&. D\*(Aqautres entr\('ees peuvent exister pour les utilisateurs supprim\('es pr\('ec\('edemment\&.
+.SH "NOTE"
+.PP
+The
+lastlog
+file is a database which contains info on the last login of each user\&. You should not rotate it\&. It is a sparse file, so its size on the disk is usually much smaller than the one shown by "\fBls \-l\fR" (which can indicate a really big file if you have in
+passwd
+users with a high UID)\&. You can display its real size with "\fBls \-s\fR"\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.SH "FICHIERS"
+.PP
+/var/log/lastlog
+.RS 4
+Base de donn\('ees de l\*(Aqheure des connexions pr\('ec\('edentes des utilisateurs\&.
+.RE
+.SH "AVERTISSEMENTS"
+.PP
+S\*(Aqil y a des trous importants dans les valeurs des UID,
+\fBlastlog\fR
+s\*(Aqex\('ecutera plus lentement, sans affichage \(`a l\*(Aq\('ecran (par exemple, s\*(Aqil n\*(Aqy a pas d\*(Aqentr\('ee pour les utilisateurs ayant un UID compris entre 170 et 800 dans base de donn\('ees lastlog, le programme lastlog semblera bloqu\('e comme s\*(Aqil traitait les entr\('ees correspondant aux UID 171 \(`a 799)\&.
diff --git a/man/fr/man8/logoutd.8 b/man/fr/man8/logoutd.8
new file mode 100644
index 0000000..80b7fdc
--- /dev/null
+++ b/man/fr/man8/logoutd.8
@@ -0,0 +1,57 @@
+'\" t
+.\" Title: logoutd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes de gestion du syst\(`eme
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "LOGOUTD" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+logoutd \- Imposer les restrictions de connexion dans le temps
+.SH "SYNOPSIS"
+.HP \w'\fBlogoutd\fR\ 'u
+\fBlogoutd\fR
+.SH "DESCRIPTION"
+.PP
+\fBlogoutd\fR
+enforces the login time and port restrictions specified in
+/etc/porttime\&.
+\fBlogoutd\fR
+should be started from
+/etc/rc\&. The
+/var/run/utmp
+file is scanned periodically and each user name is checked to see if the named user is permitted on the named port at the current time\&. Any login session which is violating the restrictions in
+/etc/porttime
+is terminated\&.
+.SH "FICHIERS"
+.PP
+/etc/porttime
+.RS 4
+Fichier contenant le port d\*(Aqacc\(`es\&.
+.RE
+.PP
+/var/run/utmp
+.RS 4
+Liste des sessions de connexion en cours\&.
+.RE
diff --git a/man/fr/man8/newusers.8 b/man/fr/man8/newusers.8
new file mode 100644
index 0000000..01ecc4c
--- /dev/null
+++ b/man/fr/man8/newusers.8
@@ -0,0 +1,449 @@
+'\" t
+.\" Title: newusers
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes de gestion du syst\(`eme
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "NEWUSERS" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+newusers \- Mettre \(`a jour, ou cr\('eer de nouveaux utilisateurs par lots
+.SH "SYNOPSIS"
+.HP \w'\fBnewusers\fR\ 'u
+\fBnewusers\fR [\fIoptions\fR] [\fIfichier\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBnewusers\fR
+command reads a
+\fIfile\fR
+(or the standard input by default) and uses this information to update a set of existing users or to create new users\&. Each line is in the same format as the standard password file (see
+\fBpasswd\fR(5)) with the exceptions explained below:
+.PP
+pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell
+.PP
+\fIpw_name\fR
+.RS 4
+C\*(Aqest le nom de l\*(Aqutilisateur\&.
+.sp
+It can be the name of a new user or the name of an existing user (or a user created before by
+\fBnewusers\fR)\&. In case of an existing user, the user\*(Aqs information will be changed, otherwise a new user will be created\&.
+.RE
+.PP
+\fIpw_passwd\fR
+.RS 4
+Ce champ sera chiffr\('e et utilis\('e comme nouvelle valeur du mot de passe chiffr\('e\&.
+.RE
+.PP
+\fIpw_uid\fR
+.RS 4
+Ce champ est utilis\('e pour d\('efinir l\*(AqUID de l\*(Aqutilisateur\&.
+.sp
+If the field is empty, a new (unused) UID will be defined automatically by
+\fBnewusers\fR\&.
+.sp
+Si ce champ contient un nombre, ce nombre sera utilis\('e comme UID\&.
+.sp
+If this field contains the name of an existing user (or the name of a user created before by
+\fBnewusers\fR), the UID of the specified user will be used\&.
+.sp
+Si l\*(AqUID d\*(Aqun utilisateur existant est modifi\('e, vous devrez configurer vous\-m\(^eme le propri\('etaire des fichiers de l\*(Aqutilisateur\&.
+.RE
+.PP
+\fIpw_gid\fR
+.RS 4
+Ce champ est utilis\('e pour d\('efinir l\*(Aqidentifiant du groupe primaire de l\*(Aqutilisateur\&.
+.sp
+If this field contains the name of an existing group (or a group created before by
+\fBnewusers\fR), the GID of this group will be used as the primary group ID for the user\&.
+.sp
+Si ce champ est un nombre, ce nombre sera utilis\('e comme identifiant de groupe primaire de cet utilisateur\&. Si aucun groupe n\*(Aqexiste avec ce GID, un nouveau groupe sera cr\('e\('e avec ce GID et le nom de l\*(Aqutilisateur\&.
+.sp
+If this field is empty, a new group will be created with the name of the user and a GID will be automatically defined by
+\fBnewusers\fR
+to be used as the primary group ID for the user and as the GID for the new group\&.
+.sp
+If this field contains the name of a group which does not exist (and was not created before by
+\fBnewusers\fR), a new group will be created with the specified name and a GID will be automatically defined by
+\fBnewusers\fR
+to be used as the primary group ID for the user and GID for the new group\&.
+.RE
+.PP
+\fIpw_gecos\fR
+.RS 4
+Ce champ est copi\('e dans le champ GECOS de l\*(Aqutilisateur\&.
+.RE
+.PP
+\fIpw_dir\fR
+.RS 4
+Ce champ est utilis\('e pour d\('efinir le r\('epertoire personnel de l\*(Aqutilisateur\&.
+.sp
+Si ce champ n\*(Aqindique pas de r\('epertoire existant, le r\('epertoire indiqu\('e est cr\('e\('e, avec comme propri\('etaire l\*(Aqutilisateur en cours de cr\('eation ou mis \(`a jour et son groupe primaire\&.
+.sp
+If the home directory of an existing user is changed,
+\fBnewusers\fR
+does not move or copy the content of the old directory to the new location\&. This should be done manually\&.
+.RE
+.PP
+\fIpw_shell\fR
+.RS 4
+Ce champ d\('efinit l\*(Aqinterpr\('eteur de commande de l\*(Aqutilisateur\&. Aucune v\('erification n\*(Aqest effectu\('ee sur ce champ\&.
+.RE
+.PP
+\fBnewusers\fR
+first tries to create or change all the specified users, and then write these changes to the user or group databases\&. If an error occurs (except in the final writes to the databases), no changes are committed to the databases\&.
+.PP
+Cette commande a \('et\('e con\(,cue pour les gros syst\(`emes pour lesquels un grand nombre de comptes sont mis \(`a jour en m\(^eme temps\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBnewusers\fR
+command are:
+.PP
+\fB\-\-badname\fR\ \&
+.RS 4
+Allow names that do not conform to standards\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+Utiliser la m\('ethode pr\('ecis\('ee pour chiffrer les mots de passe\&.
+.sp
+Les m\('ethodes disponibles sont DES, MD5, NONE et SHA256 ou SHA512 si votre libc prend en charge ces m\('ethodes\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\*(Aqaide et quitter\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Cr\('eer un compte syst\(`eme\&.
+.sp
+System users will be created with no aging information in
+/etc/shadow, and their numeric identifiers are chosen in the
+\fBSYS_UID_MIN\fR\-\fBSYS_UID_MAX\fR
+range, defined in
+login\&.defs, instead of
+\fBUID_MIN\fR\-\fBUID_MAX\fR
+(and their
+\fBGID\fR
+counterparts for the creation of groups)\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+Utiliser le nombre de rounds pr\('ecis\('e pour chiffrer les mots de passe\&.
+.sp
+La valeur 0 signifie que le syst\(`eme choisira la valeur par d\('efaut du nombre de rounds pour la m\('ethode de chiffrement (5\ \&000)\&.
+.sp
+Une valeur minimale de 1\ \&000 et une valeur maximale de 999\ \&999\ \&999 seront impos\('ees\&.
+.sp
+Vous ne pouvez utiliser cette m\('ethode qu\*(Aqavec les m\('ethodes de chiffrement SHA256 ou SHA512\&.
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "AVERTISSEMENTS"
+.PP
+Le fichier d\*(Aqentr\('ee doit \(^etre correctement prot\('eg\('e puisqu\*(Aqil contient des mots de passe en clair\&.
+.PP
+Vous devez vous assurer que les mots de passe et la m\('ethode de chiffrement respectent la politique de mot de passe du syst\(`eme\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+D\('efinir les algorithmes de chiffrement par d\('efaut du syst\(`eme pour coder les mots de passes (si aucun algorithme n\*(Aqa \('et\('e indiqu\('e sur la ligne de commandes)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBGID_MIN\fR
+(resp\&.
+\fBGID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBHOME_MODE\fR (number)
+.RS 4
+The mode for new home directories\&. If not specified, the
+\fBUMASK\fR
+is used to create the mode\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this to set the mode of the home directory they create\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+La valeur par d\('efaut est 0, ce qui signifie qu\*(Aqil n\*(Aqy a pas de limites pour le nombre de membres dans un groupe\&.
+.sp
+Cette fonctionnalit\('e (groupe d\('ecoup\('e) permet de limiter la longueur des lignes dans le fichier de groupes\&. Ceci est utile pour s\*(Aqassurer que les lignes pour les groupes NIS ne sont pas plus grandes que 1024 caract\(`eres\&.
+.sp
+Si vous avez besoin de configurer cette limite, vous pouvez utiliser 25\&.
+.sp
+Remarque\ \&: les groupes d\('ecoup\('es ne sont peut\-\(^etre pas pris en charge par tous les outils (m\(^eme dans la suite d\*(Aqoutils Shadow)\&. Vous ne devriez pas utiliser cette variable, sauf si vous en avez vraiment besoin\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+Nombre maximum de jours de validit\('e d\*(Aqun mot de passe\&. Apr\(`es cette dur\('ee, une modification du mot de passe est obligatoire\&. S\*(Aqil n\*(Aqest pas pr\('ecis\('e, la valeur de \-1 est utilis\('ee (ce qui enl\(`eve toute restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+Nombre minimum de jours autoris\('e avant la modification d\*(Aqun mot de passe\&. Toute tentative de modification du mot de passe avant cette dur\('ee est rejet\('ee\&. S\*(Aqil n\*(Aqest pas pr\('ecis\('e, la valeur de \-1 est utilis\('ee (ce qui enl\(`eve toute restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+Nombre de jours durant lesquels l\*(Aqutilisateur recevra un avertissement avant que son mot de passe n\*(Aqarrive en fin de validit\('e\&. Une valeur n\('egative signifie qu\*(Aqaucun avertissement n\*(Aqest donn\('e\&. S\*(Aqil n\*(Aqest pas pr\('ecis\('e, aucun avertissement n\*(Aqest donn\('e\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+Avec beaucoup de rounds, il est plus difficile de trouver le mot de passe avec une attaque par force brute\&. Veuillez remarquer que plus de ressources processeur seront n\('ecessaires pour authentifier les utilisateurs\&.
+.sp
+Si non pr\('ecis\('ee, la libc utilisera le nombre de rounds par d\('efaut (5000)\&.
+.sp
+Les valeurs doivent \(^etre comprises dans l\*(Aqintervalle 1\ \&000\ \&\-\ \&999\ \&999\ \&999\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.PP
+\fBSUB_GID_MIN\fR (number), \fBSUB_GID_MAX\fR (number), \fBSUB_GID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate group IDs) allocate
+\fBSUB_GID_COUNT\fR
+unused group IDs from the range
+\fBSUB_GID_MIN\fR
+to
+\fBSUB_GID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR,
+\fBSUB_GID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSUB_UID_MIN\fR (number), \fBSUB_UID_MAX\fR (number), \fBSUB_UID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate user IDs) allocate
+\fBSUB_UID_COUNT\fR
+unused user IDs from the range
+\fBSUB_UID_MIN\fR
+to
+\fBSUB_UID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR,
+\fBSUB_UID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_GID_MIN\fR
+(resp\&.
+\fBSYS_GID_MAX\fR) is 101 (resp\&.
+\fBGID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_UID_MIN\fR
+(resp\&.
+\fBSYS_UID_MAX\fR) is 101 (resp\&.
+\fBUID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBUID_MIN\fR
+(resp\&.
+\fBUID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+Valeur d\*(Aqinitialisation du masque de permissions\&. S\*(Aqil n\*(Aqest pas pr\('ecis\('e, le masque des permissions sera initialis\('e \(`a 022\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create if
+\fBHOME_MODE\fR
+is not set\&.
+.sp
+It is also used by
+\fBlogin\fR
+to define users\*(Aq initial umask\&. Note that this mask can be overridden by the user\*(Aqs GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informations s\('ecuris\('ees sur les groupes\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.PP
+/etc/subgid
+.RS 4
+IDs des groupes subalternes d\*(Aqun utilisateur\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+IDs de utilisateurs subalternes d\*(Aqun utilisateur\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(1),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuseradd\fR(8)\&.
diff --git a/man/fr/man8/nologin.8 b/man/fr/man8/nologin.8
new file mode 100644
index 0000000..a21be94
--- /dev/null
+++ b/man/fr/man8/nologin.8
@@ -0,0 +1,55 @@
+'\" t
+.\" Title: nologin
+.\" Author: Nicolas Fran\(,cois <nicolas.francois@centraliens.net>
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes de gestion du syst\(`eme
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "NOLOGIN" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+nologin \- refuser poliment une connexion
+.SH "SYNOPSIS"
+.HP \w'\fBnologin\fR\ 'u
+\fBnologin\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBnologin\fR
+command displays a message that an account is not available and exits non\-zero\&. It is intended as a replacement shell field for accounts that have been disabled\&.
+.PP
+To disable all logins, investigate
+\fBnologin\fR(5)\&.
+.PP
+If
+\fBSSH_ORIGINAL_COMMAND\fR
+is populated it will be logged\&.
+.SH "VOIR AUSSI"
+.PP
+\fBlogin\fR(1),
+\fBnologin\fR(5)\&.
+.SH "HISTORIQUE"
+.PP
+The
+\fBnologin\fR
+command appeared in BSD 4\&.4\&.
diff --git a/man/fr/man8/pwck.8 b/man/fr/man8/pwck.8
new file mode 100644
index 0000000..39f0a98
--- /dev/null
+++ b/man/fr/man8/pwck.8
@@ -0,0 +1,328 @@
+'\" t
+.\" Title: pwck
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes de gestion du syst\(`eme
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "PWCK" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+pwck \- V\('erifier l\*(Aqint\('egrit\('e des fichiers de mots de passe
+.SH "SYNOPSIS"
+.HP \w'\fBpwck\fR\ 'u
+\fBpwck\fR [options] [\fIpasswd\fR\ [\ \fIshadow\fR\ ]]
+.SH "DESCRIPTION"
+.PP
+The
+\fBpwck\fR
+command verifies the integrity of the users and authentication information\&. It checks that all entries in
+/etc/passwd
+and
+/etc/shadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+Voici les v\('erifications effectu\('ees\ \&:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+nombre correct de champs\ \&;
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+unicit\('e et validit\('e des noms d\*(Aqutilisateur\ \&;
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+validit\('e des identifiants d\*(Aqutilisateur et de groupe\ \&;
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+validit\('e du groupe primaire\ \&;
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+validit\('e du r\('epertoire personnel\ \&;
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+validit\('e de l\*(Aqinterpr\('eteur de commandes initial (\(Fo\ \&login shell\ \&\(Fc)\&.
+.RE
+.PP
+shadow
+checks are enabled when a second file parameter is specified or when
+/etc/shadow
+exists on the system\&.
+.PP
+Ces v\('erifications sont les suivantes\ \&:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+chaque entr\('ee de passwd a une entr\('ee correspondante dans shadow, et chaque entr\('ee shadow a une entr\('ee passwd correspondante\ \&;
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+les mots de passe sont indiqu\('es dans le fichier des mot de passe cach\('es\ \&;
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+les entr\('ees de shadow ont le bon nombre de champs\ \&;
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+les entr\('ees de shadow sont uniques dans shadow\ \&;
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+la date du dernier changement de mot de passe n\*(Aqest pas dans le futur\&.
+.RE
+.PP
+The checks for correct number of fields and unique user name are fatal\&. If the entry has the wrong number of fields, the user will be prompted to delete the entire line\&. If the user does not answer affirmatively, all further checks are bypassed\&. An entry with a duplicated user name is prompted for deletion, but the remaining checks will still be made\&. All other errors are warning and the user is encouraged to run the
+\fBusermod\fR
+command to correct the error\&.
+.PP
+The commands which operate on the
+/etc/passwd
+file are not able to alter corrupted or duplicated entries\&.
+\fBpwck\fR
+should be used in those circumstances to remove the offending entry\&.
+.SH "OPTIONS"
+.PP
+The
+\fB\-r\fR
+and
+\fB\-s\fR
+options cannot be combined\&.
+.PP
+The options which apply to the
+\fBpwck\fR
+command are:
+.PP
+\fB\-\-badname\fR\ \&
+.RS 4
+Allow names that do not conform to standards\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\*(Aqaide et quitter\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Ne signaler que les erreurs\&. Les avertissements qui ne n\('ecessitent pas une action de la part de l\*(Aqutilisateur ne seront pas affich\('es\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-read\-only\fR
+.RS 4
+Execute the
+\fBpwck\fR
+command in read\-only mode\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sort\fR
+.RS 4
+Sort entries in
+/etc/passwd
+and
+/etc/shadow
+by UID\&.
+.RE
+.PP
+By default,
+\fBpwck\fR
+operates on the files
+/etc/passwd
+and
+/etc/shadow\&. The user may select alternate files with the
+\fIpasswd\fR
+and
+\fIshadow\fR
+parameters\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+Nombre maximum de jours de validit\('e d\*(Aqun mot de passe\&. Apr\(`es cette dur\('ee, une modification du mot de passe est obligatoire\&. S\*(Aqil n\*(Aqest pas pr\('ecis\('e, la valeur de \-1 est utilis\('ee (ce qui enl\(`eve toute restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+Nombre minimum de jours autoris\('e avant la modification d\*(Aqun mot de passe\&. Toute tentative de modification du mot de passe avant cette dur\('ee est rejet\('ee\&. S\*(Aqil n\*(Aqest pas pr\('ecis\('e, la valeur de \-1 est utilis\('ee (ce qui enl\(`eve toute restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+Nombre de jours durant lesquels l\*(Aqutilisateur recevra un avertissement avant que son mot de passe n\*(Aqarrive en fin de validit\('e\&. Une valeur n\('egative signifie qu\*(Aqaucun avertissement n\*(Aqest donn\('e\&. S\*(Aqil n\*(Aqest pas pr\('ecis\('e, aucun avertissement n\*(Aqest donn\('e\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.SH "VALEURS DE RETOUR"
+.PP
+The
+\fBpwck\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI2\fR
+.RS 4
+one or more bad password entries
+.RE
+.PP
+\fI3\fR
+.RS 4
+can\*(Aqt open password files
+.RE
+.PP
+\fI4\fR
+.RS 4
+can\*(Aqt lock password files
+.RE
+.PP
+\fI5\fR
+.RS 4
+can\*(Aqt update password files
+.RE
+.PP
+\fI6\fR
+.RS 4
+can\*(Aqt sort password files
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBgroup\fR(5),
+\fBgrpck\fR(8),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/fr/man8/pwconv.8 b/man/fr/man8/pwconv.8
new file mode 100644
index 0000000..afd46da
--- /dev/null
+++ b/man/fr/man8/pwconv.8
@@ -0,0 +1,193 @@
+'\" t
+.\" Title: pwconv
+.\" Author: Marek Micha\(/lkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes de gestion du syst\(`eme
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "PWCONV" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+pwconv, pwunconv, grpconv, grpunconv \- Convertir vers ou depuis les fichiers de mots de passe ou de groupe cach\('es
+.SH "SYNOPSIS"
+.HP \w'\fBpwconv\fR\ 'u
+\fBpwconv\fR [\fIoptions\fR]
+.HP \w'\fBpwunconv\fR\ 'u
+\fBpwunconv\fR [\fIoptions\fR]
+.HP \w'\fBgrpconv\fR\ 'u
+\fBgrpconv\fR [\fIoptions\fR]
+.HP \w'\fBgrpunconv\fR\ 'u
+\fBgrpunconv\fR [\fIoptions\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBpwconv\fR
+command creates
+\fIshadow\fR
+from
+\fIpasswd\fR
+and an optionally existing
+\fIshadow\fR\&.
+.PP
+The
+\fBpwunconv\fR
+command creates
+\fIpasswd\fR
+from
+\fIpasswd\fR
+and
+\fIshadow\fR
+and then removes
+\fIshadow\fR\&.
+.PP
+The
+\fBgrpconv\fR
+command creates
+\fIgshadow\fR
+from
+\fIgroup\fR
+and an optionally existing
+\fIgshadow\fR\&.
+.PP
+The
+\fBgrpunconv\fR
+command creates
+\fIgroup\fR
+from
+\fIgroup\fR
+and
+\fIgshadow\fR
+and then removes
+\fIgshadow\fR\&.
+.PP
+These four programs all operate on the normal and shadow password and group files:
+/etc/passwd,
+/etc/group,
+/etc/shadow, and
+/etc/gshadow\&.
+.PP
+Each program acquires the necessary locks before conversion\&.
+\fBpwconv\fR
+and
+\fBgrpconv\fR
+are similar\&. First, entries in the shadowed file which don\*(Aqt exist in the main file are removed\&. Then, shadowed entries which don\*(Aqt have `x\*(Aq as the password in the main file are updated\&. Any missing shadowed entries are added\&. Finally, passwords in the main file are replaced with `x\*(Aq\&. These programs can be used for initial conversion as well to update the shadowed file if the main file is edited by hand\&.
+.PP
+\fBpwconv\fR
+will use the values of
+\fIPASS_MIN_DAYS\fR,
+\fIPASS_MAX_DAYS\fR, and
+\fIPASS_WARN_AGE\fR
+from
+/etc/login\&.defs
+when adding new entries to
+/etc/shadow\&.
+.PP
+Likewise
+\fBpwunconv\fR
+and
+\fBgrpunconv\fR
+are similar\&. Passwords in the main file are updated from the shadowed file\&. Entries which exist in the main file but not in the shadowed file are left alone\&. Finally, the shadowed file is removed\&. Some password aging information is lost by
+\fBpwunconv\fR\&. It will convert what it can\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBpwconv\fR,
+\fBpwunconv\fR,
+\fBgrpconv\fR, and
+\fBgrpunconv\fR
+commands are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\*(Aqaide et quitter\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.SH "BOGUES"
+.PP
+Errors in the password or group files (such as invalid or duplicate entries) may cause these programs to loop forever or fail in other strange ways\&. Please run
+\fBpwck\fR
+and
+\fBgrpck\fR
+to correct any such errors before converting to or from shadow passwords or groups\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variable in
+/etc/login\&.defs
+changes the behavior of
+\fBgrpconv\fR
+and
+\fBgrpunconv\fR:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+La valeur par d\('efaut est 0, ce qui signifie qu\*(Aqil n\*(Aqy a pas de limites pour le nombre de membres dans un groupe\&.
+.sp
+Cette fonctionnalit\('e (groupe d\('ecoup\('e) permet de limiter la longueur des lignes dans le fichier de groupes\&. Ceci est utile pour s\*(Aqassurer que les lignes pour les groupes NIS ne sont pas plus grandes que 1024 caract\(`eres\&.
+.sp
+Si vous avez besoin de configurer cette limite, vous pouvez utiliser 25\&.
+.sp
+Remarque\ \&: les groupes d\('ecoup\('es ne sont peut\-\(^etre pas pris en charge par tous les outils (m\(^eme dans la suite d\*(Aqoutils Shadow)\&. Vous ne devriez pas utiliser cette variable, sauf si vous en avez vraiment besoin\&.
+.RE
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of
+\fBpwconv\fR:
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+Nombre maximum de jours de validit\('e d\*(Aqun mot de passe\&. Apr\(`es cette dur\('ee, une modification du mot de passe est obligatoire\&. S\*(Aqil n\*(Aqest pas pr\('ecis\('e, la valeur de \-1 est utilis\('ee (ce qui enl\(`eve toute restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+Nombre minimum de jours autoris\('e avant la modification d\*(Aqun mot de passe\&. Toute tentative de modification du mot de passe avant cette dur\('ee est rejet\('ee\&. S\*(Aqil n\*(Aqest pas pr\('ecis\('e, la valeur de \-1 est utilis\('ee (ce qui enl\(`eve toute restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+Nombre de jours durant lesquels l\*(Aqutilisateur recevra un avertissement avant que son mot de passe n\*(Aqarrive en fin de validit\('e\&. Une valeur n\('egative signifie qu\*(Aqaucun avertissement n\*(Aqest donn\('e\&. S\*(Aqil n\*(Aqest pas pr\('ecis\('e, aucun avertissement n\*(Aqest donn\('e\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBgrpck\fR(8),
+\fBlogin.defs\fR(5),
+\fBpwck\fR(8)\&.
diff --git a/man/fr/man8/pwunconv.8 b/man/fr/man8/pwunconv.8
new file mode 100644
index 0000000..6eed9e8
--- /dev/null
+++ b/man/fr/man8/pwunconv.8
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/fr/man8/sulogin.8 b/man/fr/man8/sulogin.8
new file mode 100644
index 0000000..c1bb5b3
--- /dev/null
+++ b/man/fr/man8/sulogin.8
@@ -0,0 +1,116 @@
+'\" t
+.\" Title: sulogin
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes de gestion du syst\(`eme
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "SULOGIN" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+sulogin \- Single\-user login
+.SH "SYNTAX"
+.PP
+\fBsulogin\fR
+[\fItty\-device\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBsulogin\fR
+command is invoked by
+\fBinit\fR
+prior to allowing the user access to the system when in single user mode\&. This feature may only be available on certain systems where
+\fBinit\fR
+has been modified accordingly, or where the
+/etc/inittab
+has an entry for a single user login\&.
+.PP
+The user is prompted
+.PP
+Type control\-d to proceed with normal startup,
+(or give root password for system maintenance):
+.PP
+Input and output will be performed with the standard file descriptors unless the optional device name argument is provided\&.
+.PP
+If the user enters the correct root password, a login session is initiated\&. When
+\fIEOF\fR
+is pressed instead, the system enters multi\-user mode\&.
+.PP
+After the user exits the single\-user shell, or presses
+\fIEOF\fR, the system begins the initialization process required to enter multi\-user mode\&.
+.SH "AVERTISSEMENTS"
+.PP
+This command can only be used if
+\fBinit\fR
+has been modified to call
+\fBsulogin\fR
+instead of
+/bin/sh, or if the user has set the
+\fIinittab\fR
+to support a single user login\&. For example, the line:
+.PP
+co:s:respawn:/etc/sulogin /dev/console
+.PP
+should execute the sulogin command in single user mode\&.
+.PP
+As complete an environment as possible is created\&. However, various devices may be unmounted or uninitialized and many of the user commands may be unavailable or nonfunctional as a result\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBlogin\fR(1),
+\fBsh\fR(1),
+\fBinit\fR(8)\&.
diff --git a/man/fr/man8/useradd.8 b/man/fr/man8/useradd.8
new file mode 100644
index 0000000..68bda49
--- /dev/null
+++ b/man/fr/man8/useradd.8
@@ -0,0 +1,784 @@
+'\" t
+.\" Title: useradd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes de gestion du syst\(`eme
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "USERADD" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+useradd \- cr\('eer un nouvel utilisateur ou modifier les informations par d\('efaut appliqu\('ees aux nouveaux utilisateurs
+.SH "SYNOPSIS"
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR [\fIoptions\fR] \fILOGIN\fR
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR \-D
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR \-D [\fIoptions\fR]
+.SH "DESCRIPTION"
+.PP
+When invoked without the
+\fB\-D\fR
+option, the
+\fBuseradd\fR
+command creates a new user account using the values specified on the command line plus the default values from the system\&. Depending on command line options, the
+\fBuseradd\fR
+command will update system files and may also create the new user\*(Aqs home directory and copy initial files\&.
+.PP
+By default, a group will also be created for the new user (see
+\fB\-g\fR,
+\fB\-N\fR,
+\fB\-U\fR, and
+\fBUSERGROUPS_ENAB\fR)\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBuseradd\fR
+command are:
+.PP
+\fB\-\-badname\fR\ \&
+.RS 4
+Allow names that do not conform to standards\&.
+.RE
+.PP
+\fB\-b\fR, \fB\-\-base\-dir\fR\ \&\fIBASE_DIR\fR
+.RS 4
+The default base directory for the system if
+\fB\-d\fR\ \&\fIHOME_DIR\fR
+is not specified\&.
+\fIBASE_DIR\fR
+is concatenated with the account name to define the home directory\&. If the
+\fB\-m\fR
+option is not used,
+\fIBASE_DIR\fR
+must exist\&.
+.sp
+If this option is not specified,
+\fBuseradd\fR
+will use the base directory specified by the
+\fBHOME\fR
+variable in
+/etc/default/useradd, or
+/home
+by default\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-comment\fR\ \&\fICOMMENT\fR
+.RS 4
+Toute cha\(^ine de texte\&. C\*(Aqest g\('en\('eralement une description courte du compte, elle est actuellement utilis\('ee comme champ pour le nom complet de l\*(Aqutilisateur\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-home\-dir\fR\ \&\fIHOME_DIR\fR
+.RS 4
+The new user will be created using
+\fIHOME_DIR\fR
+as the value for the user\*(Aqs login directory\&. The default is to append the
+\fILOGIN\fR
+name to
+\fIBASE_DIR\fR
+and use that as the login directory name\&. The directory
+\fIHOME_DIR\fR
+does not have to exist but will not be created if it is missing\&.
+.RE
+.PP
+\fB\-D\fR, \fB\-\-defaults\fR
+.RS 4
+Consultez ci\-dessous la sous\-section \(Fo\ \&Modifier les valeurs par d\('efaut\ \&\(Fc\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+The date on which the user account will be disabled\&. The date is specified in the format
+\fIYYYY\-MM\-DD\fR\&.
+.sp
+If not specified,
+\fBuseradd\fR
+will use the default expiry date specified by the
+\fBEXPIRE\fR
+variable in
+/etc/default/useradd, or an empty string (no expiry) by default\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+Nombre de jours suivant la fin de validit\('e d\*(Aqun mot de passe apr\(`es lequel le compte est d\('efinitivement d\('esactiv\('e\&. Une valeur de 0 d\('esactive le compte d\(`es que le mot de passe a d\('epass\('e sa fin de validit\('e, et une valeur de \-1 d\('esactive cette fonctionnalit\('e\&.
+.sp
+If not specified,
+\fBuseradd\fR
+will use the default inactivity period specified by the
+\fBINACTIVE\fR
+variable in
+/etc/default/useradd, or \-1 by default\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGROUP\fR
+.RS 4
+Nom du groupe ou identifiant num\('erique du groupe de connexion initial de l\*(Aqutilisateur\&. Le nom du groupe doit exister\&. Un num\('ero de groupe doit se r\('ef\('erer \(`a un groupe d\('ej\(`a existant\&.
+.sp
+If not specified, the behavior of
+\fBuseradd\fR
+will depend on the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&. If this variable is set to
+\fIyes\fR
+(or
+\fB\-U/\-\-user\-group\fR
+is specified on the command line), a group will be created for the user, with the same name as her loginname\&. If the variable is set to
+\fIno\fR
+(or
+\fB\-N/\-\-no\-user\-group\fR
+is specified on the command line), useradd will set the primary group of the new user to the value specified by the
+\fBGROUP\fR
+variable in
+/etc/default/useradd, or 100 by default\&.
+.RE
+.PP
+\fB\-G\fR, \fB\-\-groups\fR\ \&\fIGROUP1\fR[\fI,GROUP2,\&.\&.\&.\fR[\fI,GROUPN\fR]]]
+.RS 4
+A list of supplementary groups which the user is also a member of\&. Each group is separated from the next by a comma, with no intervening whitespace\&. The groups are subject to the same restrictions as the group given with the
+\fB\-g\fR
+option\&. The default is for the user to belong only to the initial group\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\*(Aqaide et quitter\&.
+.RE
+.PP
+\fB\-k\fR, \fB\-\-skel\fR\ \&\fISKEL_DIR\fR
+.RS 4
+The skeleton directory, which contains files and directories to be copied in the user\*(Aqs home directory, when the home directory is created by
+\fBuseradd\fR\&.
+.sp
+This option is only valid if the
+\fB\-m\fR
+(or
+\fB\-\-create\-home\fR) option is specified\&.
+.sp
+If this option is not set, the skeleton directory is defined by the
+\fBSKEL\fR
+variable in
+/etc/default/useradd
+or, by default,
+/etc/skel\&.
+.sp
+Si possible, les ACL et les attributs \('etendus seront copi\('es\&.
+.RE
+.PP
+\fB\-K\fR, \fB\-\-key\fR\ \&\fIKEY\fR=\fIVALUE\fR
+.RS 4
+Overrides
+/etc/login\&.defs
+defaults (\fBUID_MIN\fR,
+\fBUID_MAX\fR,
+\fBUMASK\fR,
+\fBPASS_MAX_DAYS\fR
+and others)\&.
+
+Example:
+\fB\-K\fR\ \&\fIPASS_MAX_DAYS\fR=\fI\-1\fR
+can be used when creating system account to turn off password aging, even though system account has no password at all\&. Multiple
+\fB\-K\fR
+options can be specified, e\&.g\&.:
+\fB\-K\fR\ \&\fIUID_MIN\fR=\fI100\fR\ \&
+\fB\-K\fR\ \&\fIUID_MAX\fR=\fI499\fR
+.RE
+.PP
+\fB\-l\fR, \fB\-\-no\-log\-init\fR
+.RS 4
+N\*(Aqajoute pas l\*(Aqutilisateur aux bases de donn\('ees lastlog et faillog\&.
+.sp
+Par d\('efaut, les entr\('ees de l\*(Aqutilisateur dans les bases de donn\('ees lastlog et faillog sont remises \(`a z\('ero pour \('eviter de r\('eutiliser les entr\('ees d\*(Aqun utilisateur pr\('ec\('edemment supprim\('e\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-create\-home\fR
+.RS 4
+Create the user\*(Aqs home directory if it does not exist\&. The files and directories contained in the skeleton directory (which can be defined with the
+\fB\-k\fR
+option) will be copied to the home directory\&.
+.sp
+By default, if this option is not specified and
+\fBCREATE_HOME\fR
+is not enabled, no home directories are created\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-no\-create\-home\fR
+.RS 4
+Do no create the user\*(Aqs home directory, even if the system wide setting from
+/etc/login\&.defs
+(\fBCREATE_HOME\fR) is set to
+\fIyes\fR\&.
+.RE
+.PP
+\fB\-N\fR, \fB\-\-no\-user\-group\fR
+.RS 4
+Do not create a group with the same name as the user, but add the user to the group specified by the
+\fB\-g\fR
+option or by the
+\fBGROUP\fR
+variable in
+/etc/default/useradd\&.
+.sp
+The default behavior (if the
+\fB\-g\fR,
+\fB\-N\fR, and
+\fB\-U\fR
+options are not specified) is defined by the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+Permet de cr\('eer un compte d\*(Aqutilisateur avec un identifiant (\(Fo\ \&UID\ \&\(Fc) dupliqu\('e (non unique)\&.
+.sp
+This option is only valid in combination with the
+\fB\-u\fR
+option\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&. The default is to disable the password\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+Il est n\('ecessaire de v\('erifier si le mot de passe respecte la politique de mots de passe du syst\(`eme\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Cr\('eer un compte syst\(`eme\&.
+.sp
+System users will be created with no aging information in
+/etc/shadow, and their numeric identifiers are chosen in the
+\fBSYS_UID_MIN\fR\-\fBSYS_UID_MAX\fR
+range, defined in
+/etc/login\&.defs, instead of
+\fBUID_MIN\fR\-\fBUID_MAX\fR
+(and their
+\fBGID\fR
+counterparts for the creation of groups)\&.
+.sp
+Note that
+\fBuseradd\fR
+will not create a home directory for such a user, regardless of the default setting in
+/etc/login\&.defs
+(\fBCREATE_HOME\fR)\&. You have to specify the
+\fB\-m\fR
+options if you want a home directory for a system account to be created\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+The name of the user\*(Aqs login shell\&. The default is to leave this field blank, which causes the system to select the default login shell specified by the
+\fBSHELL\fR
+variable in
+/etc/default/useradd, or an empty string by default\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-uid\fR\ \&\fIUID\fR
+.RS 4
+The numerical value of the user\*(Aqs ID\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&. The default is to use the smallest ID value greater than or equal to
+\fBUID_MIN\fR
+and greater than every other user\&.
+.sp
+See also the
+\fB\-r\fR
+option and the
+\fBUID_MAX\fR
+description\&.
+.RE
+.PP
+\fB\-U\fR, \fB\-\-user\-group\fR
+.RS 4
+Cr\('ee un groupe avec le m\(^eme nom que celui de l\*(Aqutilisateur, et ajoute l\*(Aqutilisateur \(`a ce groupe\&.
+.sp
+The default behavior (if the
+\fB\-g\fR,
+\fB\-N\fR, and
+\fB\-U\fR
+options are not specified) is defined by the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR\ \&\fISEUSER\fR
+.RS 4
+L\*(Aqutilisateur SELinux utilis\('e pour la connexion de l\*(Aqutilisateur\&. Le comportement par d\('efaut est de laisser ce champ vide\&. Le syst\(`eme s\('electionnera alors l\*(Aqutilisateur SELinux par d\('efaut\&.
+.RE
+.SS "Modifier les valeurs par d\('efaut"
+.PP
+When invoked with only the
+\fB\-D\fR
+option,
+\fBuseradd\fR
+will display the current default values\&. When invoked with
+\fB\-D\fR
+plus other options,
+\fBuseradd\fR
+will update the default values for the specified options\&. Valid default\-changing options are:
+.PP
+\fB\-b\fR, \fB\-\-base\-dir\fR\ \&\fIBASE_DIR\fR
+.RS 4
+The path prefix for a new user\*(Aqs home directory\&. The user\*(Aqs name will be affixed to the end of
+\fIBASE_DIR\fR
+to form the new user\*(Aqs home directory name, if the
+\fB\-d\fR
+option is not used when creating a new account\&.
+.sp
+This option sets the
+\fBHOME\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+Date \(`a laquelle le compte utilisateur sera d\('esactiv\('e\&.
+.sp
+This option sets the
+\fBEXPIRE\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+Nombre de jours apr\(`es la fin de validit\('e d\*(Aqun mot de passe avant que le compte ne soit d\('esactiv\('e\&.
+.sp
+This option sets the
+\fBINACTIVE\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGROUP\fR
+.RS 4
+The group name or ID for a new user\*(Aqs initial group (when the
+\fB\-N/\-\-no\-user\-group\fR
+is used or when the
+\fBUSERGROUPS_ENAB\fR
+variable is set to
+\fIno\fR
+in
+/etc/login\&.defs)\&. The named group must exist, and a numerical group ID must have an existing entry\&.
+.sp
+This option sets the
+\fBGROUP\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+Le nom de l\*(Aqinterpr\('eteur de commandes du nouvel utilisateur\&.
+.sp
+This option sets the
+\fBSHELL\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.SH "NOTES"
+.PP
+The system administrator is responsible for placing the default user files in the
+/etc/skel/
+directory (or any other skeleton directory specified in
+/etc/default/useradd
+or on the command line)\&.
+.SH "AVERTISSEMENTS"
+.PP
+Vous ne pouvez pas ajouter d\*(Aqutilisateur \(`a un groupe NIS ou LDAP\&. Cela doit \(^etre effectu\('e sur le serveur correspondant\&.
+.PP
+Similarly, if the username already exists in an external user database such as NIS or LDAP,
+\fBuseradd\fR
+will deny the user account creation request\&.
+.PP
+Les noms d\*(Aqutilisateur doivent commencer par une lettre minuscule ou un tiret bas (\(Fo\ \&underscore\ \&\(Fc), et seuls des lettres minuscules, des chiffres, des \(Fo\ \&underscore\ \&\(Fc, ou des tirets peuvent suivre\&. Ils peuvent se terminer par un signe dollar\&. Soit, sous la forme d\*(Aqune expression rationnelle\ \&: [a\-z_][a\-z0\-9_\-]*[$]?
+.PP
+Les noms d\*(Aqutilisateur sont limit\('es \(`a 16 caract\(`eres\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCREATE_HOME\fR (boolean)
+.RS 4
+Indiquer si un r\('epertoire personnel doit \(^etre cr\('e\('e par d\('efaut pour les nouveaux utilisateurs\&.
+.sp
+Ce r\('eglage ne s\*(Aqapplique pas pour les utilisateurs syst\(`eme, et peut \(^etre annul\('e sur la ligne de commande\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBGID_MIN\fR
+(resp\&.
+\fBGID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBHOME_MODE\fR (number)
+.RS 4
+The mode for new home directories\&. If not specified, the
+\fBUMASK\fR
+is used to create the mode\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this to set the mode of the home directory they create\&.
+.RE
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+R\('epertoire d\*(Aqattente des courriels (\(Fo\ \&mail spool directory\ \&\(Fc)\&. Ce param\(`etre est n\('ecessaire pour manipuler les bo\(^ites \(`a lettres lorsque le compte d\*(Aqun utilisateur est modifi\('e ou supprim\('e\&. S\*(Aqil n\*(Aqest pas sp\('ecifi\('e, une valeur par d\('efaut d\('efinie \(`a la compilation est utilis\('ee\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+D\('efinir l\*(Aqemplacement des bo\(^ites aux lettres des utilisateurs relativement \(`a leur r\('epertoire personnel\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+La valeur par d\('efaut est 0, ce qui signifie qu\*(Aqil n\*(Aqy a pas de limites pour le nombre de membres dans un groupe\&.
+.sp
+Cette fonctionnalit\('e (groupe d\('ecoup\('e) permet de limiter la longueur des lignes dans le fichier de groupes\&. Ceci est utile pour s\*(Aqassurer que les lignes pour les groupes NIS ne sont pas plus grandes que 1024 caract\(`eres\&.
+.sp
+Si vous avez besoin de configurer cette limite, vous pouvez utiliser 25\&.
+.sp
+Remarque\ \&: les groupes d\('ecoup\('es ne sont peut\-\(^etre pas pris en charge par tous les outils (m\(^eme dans la suite d\*(Aqoutils Shadow)\&. Vous ne devriez pas utiliser cette variable, sauf si vous en avez vraiment besoin\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+Nombre maximum de jours de validit\('e d\*(Aqun mot de passe\&. Apr\(`es cette dur\('ee, une modification du mot de passe est obligatoire\&. S\*(Aqil n\*(Aqest pas pr\('ecis\('e, la valeur de \-1 est utilis\('ee (ce qui enl\(`eve toute restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+Nombre minimum de jours autoris\('e avant la modification d\*(Aqun mot de passe\&. Toute tentative de modification du mot de passe avant cette dur\('ee est rejet\('ee\&. S\*(Aqil n\*(Aqest pas pr\('ecis\('e, la valeur de \-1 est utilis\('ee (ce qui enl\(`eve toute restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+Nombre de jours durant lesquels l\*(Aqutilisateur recevra un avertissement avant que son mot de passe n\*(Aqarrive en fin de validit\('e\&. Une valeur n\('egative signifie qu\*(Aqaucun avertissement n\*(Aqest donn\('e\&. S\*(Aqil n\*(Aqest pas pr\('ecis\('e, aucun avertissement n\*(Aqest donn\('e\&.
+.RE
+.PP
+\fBSUB_GID_MIN\fR (number), \fBSUB_GID_MAX\fR (number), \fBSUB_GID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate group IDs) allocate
+\fBSUB_GID_COUNT\fR
+unused group IDs from the range
+\fBSUB_GID_MIN\fR
+to
+\fBSUB_GID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR,
+\fBSUB_GID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSUB_UID_MIN\fR (number), \fBSUB_UID_MAX\fR (number), \fBSUB_UID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate user IDs) allocate
+\fBSUB_UID_COUNT\fR
+unused user IDs from the range
+\fBSUB_UID_MIN\fR
+to
+\fBSUB_UID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR,
+\fBSUB_UID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_GID_MIN\fR
+(resp\&.
+\fBSYS_GID_MAX\fR) is 101 (resp\&.
+\fBGID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_UID_MIN\fR
+(resp\&.
+\fBSYS_UID_MAX\fR) is 101 (resp\&.
+\fBUID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBUID_MIN\fR
+(resp\&.
+\fBUID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+Valeur d\*(Aqinitialisation du masque de permissions\&. S\*(Aqil n\*(Aqest pas pr\('ecis\('e, le masque des permissions sera initialis\('e \(`a 022\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create if
+\fBHOME_MODE\fR
+is not set\&.
+.sp
+It is also used by
+\fBlogin\fR
+to define users\*(Aq initial umask\&. Note that this mask can be overridden by the user\*(Aqs GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Activer la mise en place de bits de masque de groupe (\(Fo\ \&umask group bits\ \&\(Fc) identiques \(`a ceux du propri\('etaire (exemple\ \&: 022 \-> 002, 077 \-> 007) pour les utilisateurs non privil\('egi\('es, si l\*(AqUID est identique au GID et que l\*(Aqidentifiant de connexion est identique au groupe principal\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informations s\('ecuris\('ees sur les groupes\&.
+.RE
+.PP
+/etc/default/useradd
+.RS 4
+Valeurs par d\('efaut pour la cr\('eation de comptes\&.
+.RE
+.PP
+/etc/skel/
+.RS 4
+R\('epertoire contenant les fichiers par d\('efaut\&.
+.RE
+.PP
+/etc/subgid
+.RS 4
+IDs des groupes subalternes d\*(Aqun utilisateur\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+IDs de utilisateurs subalternes d\*(Aqun utilisateur\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.SH "VALEURS DE RETOUR"
+.PP
+The
+\fBuseradd\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+can\*(Aqt update password file
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+UID already in use (and no
+\fB\-o\fR)
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI9\fR
+.RS 4
+username already in use
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.PP
+\fI12\fR
+.RS 4
+can\*(Aqt create home directory
+.RE
+.PP
+\fI14\fR
+.RS 4
+can\*(Aqt update SELinux user mapping
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBnewusers\fR(8),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/fr/man8/userdel.8 b/man/fr/man8/userdel.8
new file mode 100644
index 0000000..9f2933c
--- /dev/null
+++ b/man/fr/man8/userdel.8
@@ -0,0 +1,308 @@
+'\" t
+.\" Title: userdel
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes de gestion du syst\(`eme
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "USERDEL" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+userdel \- supprimer un compte utilisateur et les fichiers associ\('es
+.SH "SYNOPSIS"
+.HP \w'\fBuserdel\fR\ 'u
+\fBuserdel\fR [options] \fILOGIN\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBuserdel\fR
+command modifies the system account files, deleting all entries that refer to the user name
+\fILOGIN\fR\&. The named user must exist\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBuserdel\fR
+command are:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option forces the removal of the user account, even if the user is still logged in\&. It also forces
+\fBuserdel\fR
+to remove the user\*(Aqs home directory and mail spool, even if another user uses the same home directory or if the mail spool is not owned by the specified user\&. If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs
+and if a group exists with the same name as the deleted user, then this group will be removed, even if it is still the primary group of another user\&.
+.sp
+\fINote:\fR
+This option is dangerous and may leave your system in an inconsistent state\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\*(Aqaide et quitter\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-remove\fR
+.RS 4
+Les fichiers pr\('esents dans le r\('epertoire personnel de l\*(Aqutilisateur seront supprim\('es en m\(^eme temps que le r\('epertoire lui\-m\(^eme, ainsi que le r\('epertoire d\*(Aqattente des courriels\&. Vous devrez rechercher et \('eliminer vous\-m\(^eme les fichiers situ\('es dans d\*(Aqautres syst\(`emes de fichiers\&.
+.sp
+The mail spool is defined by the
+\fBMAIL_DIR\fR
+variable in the
+login\&.defs
+file\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR
+.RS 4
+\('Elimine toute association avec tout utilisateur SELinux pour la connexion de l\*(Aqutilisateur\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+R\('epertoire d\*(Aqattente des courriels (\(Fo\ \&mail spool directory\ \&\(Fc)\&. Ce param\(`etre est n\('ecessaire pour manipuler les bo\(^ites \(`a lettres lorsque le compte d\*(Aqun utilisateur est modifi\('e ou supprim\('e\&. S\*(Aqil n\*(Aqest pas sp\('ecifi\('e, une valeur par d\('efaut d\('efinie \(`a la compilation est utilis\('ee\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+D\('efinir l\*(Aqemplacement des bo\(^ites aux lettres des utilisateurs relativement \(`a leur r\('epertoire personnel\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+La valeur par d\('efaut est 0, ce qui signifie qu\*(Aqil n\*(Aqy a pas de limites pour le nombre de membres dans un groupe\&.
+.sp
+Cette fonctionnalit\('e (groupe d\('ecoup\('e) permet de limiter la longueur des lignes dans le fichier de groupes\&. Ceci est utile pour s\*(Aqassurer que les lignes pour les groupes NIS ne sont pas plus grandes que 1024 caract\(`eres\&.
+.sp
+Si vous avez besoin de configurer cette limite, vous pouvez utiliser 25\&.
+.sp
+Remarque\ \&: les groupes d\('ecoup\('es ne sont peut\-\(^etre pas pris en charge par tous les outils (m\(^eme dans la suite d\*(Aqoutils Shadow)\&. Vous ne devriez pas utiliser cette variable, sauf si vous en avez vraiment besoin\&.
+.RE
+.PP
+\fBUSERDEL_CMD\fR (string)
+.RS 4
+Si d\('efinie, la commande est ex\('ecut\('ee lors de la suppression d\*(Aqun utilisateur\&. Elle pourra supprimer toutes les t\(^aches p\('eriodiques cron ou at, tous les travaux d\*(Aqimpression, etc\&. de l\*(Aqutilisateur (qui sera fourni comme premier param\(`etre)\&.
+.sp
+Le code de retour du script n\*(Aqest pas pris en compte\&.
+.sp
+Here is an example script, which removes the user\*(Aqs cron, at and print jobs:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#! /bin/sh
+
+# Check for the required argument\&.
+if [ $# != 1 ]; then
+ echo "Usage: $0 username"
+ exit 1
+fi
+
+# Remove cron jobs\&.
+crontab \-r \-u $1
+
+# Remove at jobs\&.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username\&.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR \-name "[^\&.]*" \-type f \-user $1 \-delete \e;
+
+# Remove print jobs\&.
+lprm $1
+
+# All done\&.
+exit 0
+
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Activer la mise en place de bits de masque de groupe (\(Fo\ \&umask group bits\ \&\(Fc) identiques \(`a ceux du propri\('etaire (exemple\ \&: 022 \-> 002, 077 \-> 007) pour les utilisateurs non privil\('egi\('es, si l\*(AqUID est identique au GID et que l\*(Aqidentifiant de connexion est identique au groupe principal\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.PP
+/etc/subgid
+.RS 4
+IDs des groupes subalternes d\*(Aqun utilisateur\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+IDs de utilisateurs subalternes d\*(Aqun utilisateur\&.
+.RE
+.SH "VALEURS DE RETOUR"
+.PP
+The
+\fBuserdel\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+can\*(Aqt update password file
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified user doesn\*(Aqt exist
+.RE
+.PP
+\fI8\fR
+.RS 4
+user currently logged in
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.PP
+\fI12\fR
+.RS 4
+can\*(Aqt remove home directory
+.RE
+.SH "AVERTISSEMENTS"
+.PP
+\fBuserdel\fR
+will not allow you to remove an account if there are running processes which belong to this account\&. In that case, you may have to kill those processes or lock the user\*(Aqs password or account and remove the account later\&. The
+\fB\-f\fR
+option can force the deletion of this account\&.
+.PP
+Vous devez v\('erifier vous\-m\(^eme qu\*(Aqaucun fichier poss\('ed\('e par l\*(Aqutilisateur ne subsiste sur tous les syst\(`emes de fichiers\&.
+.PP
+Vous ne pouvez supprimer aucun attribut NIS d\*(Aqun client NIS\&. Cela doit \(^etre effectu\('e sur le serveur NIS\&.
+.PP
+If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs,
+\fBuserdel\fR
+will delete the group with the same name as the user\&. To avoid inconsistencies in the passwd and group databases,
+\fBuserdel\fR
+will check that this group is not used as a primary group for another user, and will just warn without deleting the group otherwise\&. The
+\fB\-f\fR
+option can force the deletion of this group\&.
+.SH "VOIR AUSSI"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBlogin.defs\fR(5),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuseradd\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/fr/man8/usermod.8 b/man/fr/man8/usermod.8
new file mode 100644
index 0000000..55dcd7c
--- /dev/null
+++ b/man/fr/man8/usermod.8
@@ -0,0 +1,469 @@
+'\" t
+.\" Title: usermod
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes de gestion du syst\(`eme
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "USERMOD" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+usermod \- Modifier un compte utilisateur
+.SH "SYNOPSIS"
+.HP \w'\fBusermod\fR\ 'u
+\fBusermod\fR [\fIoptions\fR] \fILOGIN\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBusermod\fR
+command modifies the system account files to reflect the changes that are specified on the command line\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBusermod\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-append\fR
+.RS 4
+Add the user to the supplementary group(s)\&. Use only with the
+\fB\-G\fR
+option\&.
+.RE
+.PP
+\fB\-b\fR, \fB\-\-badnames\fR
+.RS 4
+Allow names that do not conform to standards\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-comment\fR\ \&\fICOMMENT\fR
+.RS 4
+The new value of the user\*(Aqs password file comment field\&. It is normally modified using the
+\fBchfn\fR(1)
+utility\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-home\fR\ \&\fIHOME_DIR\fR
+.RS 4
+Le nouveau r\('epertoire personnel de l\*(Aqutilisateur\&.
+.sp
+If the
+\fB\-m\fR
+option is given, the contents of the current home directory will be moved to the new home directory, which is created if it does not already exist\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+The date on which the user account will be disabled\&. The date is specified in the format
+\fIYYYY\-MM\-DD\fR\&.
+.sp
+An empty
+\fIEXPIRE_DATE\fR
+argument will disable the expiration of the account\&.
+.sp
+This option requires a
+/etc/shadow
+file\&. A
+/etc/shadow
+entry will be created if there were none\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+Nombre de jours suivant la fin de validit\('e d\*(Aqun mot de passe apr\(`es lequel le compte est d\('efinitivement d\('esactiv\('e\&.
+.sp
+Une valeur de 0 d\('esactive le compte d\(`es que le mot de passe a d\('epass\('e sa fin de validit\('e, et une valeur de \-1 d\('esactive cette fonctionnalit\('e\&.
+.sp
+This option requires a
+/etc/shadow
+file\&. A
+/etc/shadow
+entry will be created if there were none\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGROUP\fR
+.RS 4
+Nom du groupe ou identifiant num\('erique du groupe de connexion initial de l\*(Aqutilisateur\&. Le groupe doit exister\&.
+.sp
+Tout fichier du r\('epertoire personnel de l\*(Aqutilisateur appartenant au groupe primaire pr\('ec\('edent de l\*(Aqutilisateur appartiendra \(`a ce nouveau groupe\&.
+.sp
+Le groupe propri\('etaire des fichiers en dehors du r\('epertoire personnel de l\*(Aqutilisateur doit \(^etre modifi\('e manuellement\&.
+.RE
+.PP
+\fB\-G\fR, \fB\-\-groups\fR\ \&\fIGROUP1\fR[\fI,GROUP2,\&.\&.\&.\fR[\fI,GROUPN\fR]]]
+.RS 4
+A list of supplementary groups which the user is also a member of\&. Each group is separated from the next by a comma, with no intervening whitespace\&. The groups are subject to the same restrictions as the group given with the
+\fB\-g\fR
+option\&.
+.sp
+If the user is currently a member of a group which is not listed, the user will be removed from the group\&. This behaviour can be changed via the
+\fB\-a\fR
+option, which appends the user to the current supplementary group list\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-login\fR\ \&\fINEW_LOGIN\fR
+.RS 4
+The name of the user will be changed from
+\fILOGIN\fR
+to
+\fINEW_LOGIN\fR\&. Nothing else is changed\&. In particular, the user\*(Aqs home directory or mail spool should probably be renamed manually to reflect the new login name\&.
+.RE
+.PP
+\fB\-L\fR, \fB\-\-lock\fR
+.RS 4
+Lock a user\*(Aqs password\&. This puts a \*(Aq!\*(Aq in front of the encrypted password, effectively disabling the password\&. You can\*(Aqt use this option with
+\fB\-p\fR
+or
+\fB\-U\fR\&.
+.sp
+Note: if you wish to lock the account (not only access with a password), you should also set the
+\fIEXPIRE_DATE\fR
+to
+\fI1\fR\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-move\-home\fR
+.RS 4
+D\('eplacer le contenu du r\('epertoire personnel de l\*(Aqutilisateur vers un nouvel emplacement\&.
+.sp
+This option is only valid in combination with the
+\fB\-d\fR
+(or
+\fB\-\-home\fR) option\&.
+.sp
+\fBusermod\fR
+will try to adapt the ownership of the files and to copy the modes, ACL and extended attributes, but manual changes might be needed afterwards\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+When used with the
+\fB\-u\fR
+option, this option allows to change the user ID to a non\-unique value\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+Il est n\('ecessaire de v\('erifier si le mot de passe respecte la politique de mots de passe du syst\(`eme\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+Nom du nouvel interpr\('eteur de commandes initial (\(Fo\ \&login shell\ \&\(Fc) de l\*(Aqutilisateur\&. Si ce champ est vide, le syst\(`eme s\('electionnera l\*(Aqinterpr\('eteur de commandes initial par d\('efaut\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-uid\fR\ \&\fIUID\fR
+.RS 4
+La valeur num\('erique de l\*(Aqidentifiant de l\*(Aqutilisateur\&.
+.sp
+This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&.
+.sp
+La bo\(^ite aux lettres et tous les fichiers poss\('ed\('es par l\*(Aqutilisateur et qui sont situ\('es dans son r\('epertoire personnel verront leur identifiant d\*(Aqutilisateur automatiquement modifi\('e\&.
+.sp
+Le propri\('etaire des fichiers en dehors du r\('epertoire personnel de l\*(Aqutilisateur doit \(^etre modifi\('e manuellement\&.
+.sp
+No checks will be performed with regard to the
+\fBUID_MIN\fR,
+\fBUID_MAX\fR,
+\fBSYS_UID_MIN\fR, or
+\fBSYS_UID_MAX\fR
+from
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-U\fR, \fB\-\-unlock\fR
+.RS 4
+Unlock a user\*(Aqs password\&. This removes the \*(Aq!\*(Aq in front of the encrypted password\&. You can\*(Aqt use this option with
+\fB\-p\fR
+or
+\fB\-L\fR\&.
+.sp
+Note: if you wish to unlock the account (not only access with a password), you should also set the
+\fIEXPIRE_DATE\fR
+(for example to
+\fI99999\fR, or to the
+\fBEXPIRE\fR
+value from
+/etc/default/useradd)\&.
+.RE
+.PP
+\fB\-v\fR, \fB\-\-add\-subuids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Ajoute une plage d\*(AqUIDs subalternes au compte de l\*(Aqutilisateur\&.
+.sp
+Vous pouvez indiquer plusieurs fois cette option, pour ajouter plusieurs plages de comptes utilisateurs\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR, or
+\fBSUB_UID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-V\fR, \fB\-\-del\-subuids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Supprime une plage d\*(AqUids subalternes du compte de l\*(Aqutilisateur\&.
+.sp
+This option may be specified multiple times to remove multiple ranges to a users account\&. When both
+\fB\-\-del\-subuids\fR
+and
+\fB\-\-add\-subuids\fR
+are specified, the removal of all subordinate uid ranges happens before any subordinate uid range is added\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR, or
+\fBSUB_UID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-add\-subgids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Ajoute une plage de gids subalternes au compte d\*(Aqun utilisateur\&.
+.sp
+Vous pouvez indiquer plusieurs fois cette option, pour ajouter plusieurs plages de comptes utilisateurs\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR, or
+\fBSUB_GID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-W\fR, \fB\-\-del\-subgids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Supprime une plage de gids subalternes du compte de l\*(Aqutilisateur\&.
+.sp
+This option may be specified multiple times to remove multiple ranges to a users account\&. When both
+\fB\-\-del\-subgids\fR
+and
+\fB\-\-add\-subgids\fR
+are specified, the removal of all subordinate gid ranges happens before any subordinate gid range is added\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR, or
+\fBSUB_GID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR\ \&\fISEUSER\fR
+.RS 4
+Le nouvel utilisateur SELinux utilis\('e pour la connexion de l\*(Aqutilisateur\&.
+.sp
+A blank
+\fISEUSER\fR
+will remove the SELinux user mapping for user
+\fILOGIN\fR
+(if any)\&.
+.RE
+.SH "AVERTISSEMENTS"
+.PP
+You must make certain that the named user is not executing any processes when this command is being executed if the user\*(Aqs numerical user ID, the user\*(Aqs name, or the user\*(Aqs home directory is being changed\&.
+\fBusermod\fR
+checks this on Linux\&. On other platforms it only uses utmp to check if the user is logged in\&.
+.PP
+You must change the owner of any
+\fBcrontab\fR
+files or
+\fBat\fR
+jobs manually\&.
+.PP
+Les modifications qui concernent NIS doivent \(^etre effectu\('ees sur le serveur NIS\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+R\('epertoire d\*(Aqattente des courriels (\(Fo\ \&mail spool directory\ \&\(Fc)\&. Ce param\(`etre est n\('ecessaire pour manipuler les bo\(^ites \(`a lettres lorsque le compte d\*(Aqun utilisateur est modifi\('e ou supprim\('e\&. S\*(Aqil n\*(Aqest pas sp\('ecifi\('e, une valeur par d\('efaut d\('efinie \(`a la compilation est utilis\('ee\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+D\('efinir l\*(Aqemplacement des bo\(^ites aux lettres des utilisateurs relativement \(`a leur r\('epertoire personnel\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+La valeur par d\('efaut est 0, ce qui signifie qu\*(Aqil n\*(Aqy a pas de limites pour le nombre de membres dans un groupe\&.
+.sp
+Cette fonctionnalit\('e (groupe d\('ecoup\('e) permet de limiter la longueur des lignes dans le fichier de groupes\&. Ceci est utile pour s\*(Aqassurer que les lignes pour les groupes NIS ne sont pas plus grandes que 1024 caract\(`eres\&.
+.sp
+Si vous avez besoin de configurer cette limite, vous pouvez utiliser 25\&.
+.sp
+Remarque\ \&: les groupes d\('ecoup\('es ne sont peut\-\(^etre pas pris en charge par tous les outils (m\(^eme dans la suite d\*(Aqoutils Shadow)\&. Vous ne devriez pas utiliser cette variable, sauf si vous en avez vraiment besoin\&.
+.RE
+.PP
+\fBSUB_GID_MIN\fR (number), \fBSUB_GID_MAX\fR (number), \fBSUB_GID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate group IDs) allocate
+\fBSUB_GID_COUNT\fR
+unused group IDs from the range
+\fBSUB_GID_MIN\fR
+to
+\fBSUB_GID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR,
+\fBSUB_GID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSUB_UID_MIN\fR (number), \fBSUB_UID_MAX\fR (number), \fBSUB_UID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate user IDs) allocate
+\fBSUB_UID_COUNT\fR
+unused user IDs from the range
+\fBSUB_UID_MIN\fR
+to
+\fBSUB_UID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR,
+\fBSUB_UID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informations s\('ecuris\('ees sur les groupes\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.PP
+/etc/subgid
+.RS 4
+IDs des groupes subalternes d\*(Aqun utilisateur\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+IDs de utilisateurs subalternes d\*(Aqun utilisateur\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8)\&.
diff --git a/man/fr/man8/vigr.8 b/man/fr/man8/vigr.8
new file mode 100644
index 0000000..ff72d7a
--- /dev/null
+++ b/man/fr/man8/vigr.8
@@ -0,0 +1 @@
+.so man8/vipw.8
diff --git a/man/fr/man8/vipw.8 b/man/fr/man8/vipw.8
new file mode 100644
index 0000000..e45bc22
--- /dev/null
+++ b/man/fr/man8/vipw.8
@@ -0,0 +1,137 @@
+'\" t
+.\" Title: vipw
+.\" Author: Marek Micha\(/lkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Commandes de gestion du syst\(`eme
+.\" Source: shadow-utils 4.8.1
+.\" Language: French
+.\"
+.TH "VIPW" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+vipw, vigr \- \('Editer les fichiers passwd, group, shadow ou gshadow
+.SH "SYNOPSIS"
+.HP \w'\fBvipw\fR\ 'u
+\fBvipw\fR [\fIoptions\fR]
+.HP \w'\fBvigr\fR\ 'u
+\fBvigr\fR [\fIoptions\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBvipw\fR
+and
+\fBvigr\fR
+commands edits the files
+/etc/passwd
+and
+/etc/group, respectively\&. With the
+\fB\-s\fR
+flag, they will edit the shadow versions of those files,
+/etc/shadow
+and
+/etc/gshadow, respectively\&. The programs will set the appropriate locks to prevent file corruption\&. When looking for an editor, the programs will first try the environment variable
+\fB$VISUAL\fR, then the environment variable
+\fB$EDITOR\fR, and finally the default editor,
+\fBvi\fR(1)\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBvipw\fR
+and
+\fBvigr\fR
+commands are:
+.PP
+\fB\-g\fR, \fB\-\-group\fR
+.RS 4
+\('Editer la base de donn\('ees de groupes\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\*(Aqaide et quitter\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-passwd\fR
+.RS 4
+\('Editer la base de donn\('ees passwd\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Mode silencieux\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shadow\fR
+.RS 4
+\('Editer les bases de donn\('ees shadow ou gshadow\&.
+.RE
+.SH "ENVIRONNEMENT"
+.PP
+\fBVISUAL\fR
+.RS 4
+L\*(Aq\('editeur \(`a utiliser
+.RE
+.PP
+\fBEDITOR\fR
+.RS 4
+Editor to be used if
+\fBVISUAL\fR
+is not set\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informations s\('ecuris\('ees sur les groupes\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBvi\fR(1),
+\fBgroup\fR(5),
+\fBgshadow\fR(5)
+,
+\fBpasswd\fR(5), ,
+\fBshadow\fR(5)\&.
diff --git a/man/generate_mans.mak b/man/generate_mans.mak
new file mode 100644
index 0000000..a0721b8
--- /dev/null
+++ b/man/generate_mans.mak
@@ -0,0 +1,56 @@
+if USE_PAM
+PAM_COND=pam
+else
+PAM_COND=no_pam
+endif
+if SHADOWGRP
+SHADOWGRP_COND=gshadow
+else
+SHADOWGRP_COND=no_gshadow
+endif
+if WITH_TCB
+TCB_COND=tcb
+else
+TCB_COND=no_tcb
+endif
+
+if USE_SHA_CRYPT
+SHA_CRYPT_COND=sha_crypt
+else
+SHA_CRYPT_COND=no_sha_crypt
+endif
+
+if ENABLE_SUBIDS
+SUBIDS_COND=subids
+else
+SUBIDS_COND=no_subids
+endif
+
+if ENABLE_REGENERATE_MAN
+%.xml-config: %.xml
+ 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
+
+man1/% man3/% man5/% man8/%: %.xml-config Makefile config.xml
+ $(XSLTPROC) --stringparam profile.condition "$(PAM_COND);$(SHADOWGRP_COND);$(TCB_COND);$(SHA_CRYPT_COND);$(SUBIDS_COND)" \
+ --param "man.authors.section.enabled" "0" \
+ --stringparam "man.output.base.dir" "" \
+ --param "man.output.in.separate.dir" "1" \
+ -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/profile-docbook.xsl $<
+
+clean-local:
+ rm -rf man1 man3 man5 man8
+
+else
+$(man_MANS):
+ @echo you need to run configure with --enable-man to generate man pages
+endif
+
+man8/grpconv.8 man8/grpunconv.8 man8/pwunconv.8: man8/pwconv.8
+
+man3/getspnam.3: man3/shadow.3
+
+man8/vigr.8: man8/vipw.8
diff --git a/man/generate_translations.mak b/man/generate_translations.mak
new file mode 100644
index 0000000..eb9ac41
--- /dev/null
+++ b/man/generate_translations.mak
@@ -0,0 +1,30 @@
+LANG=$(notdir $(CURDIR))
+
+if ENABLE_REGENERATE_MAN
+config.xml: ../config.xml.in
+ $(MAKE) -C .. config.xml
+ cp ../config.xml $@
+
+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
+
+else
+$(man_MANS):
+ @echo you need to run configure with --enable-man to generate man pages
+endif
+
+CLEANFILES = messages.mo login.defs.d $(EXTRA_DIST) $(addsuffix .xml,$(EXTRA_DIST)) config.xml
diff --git a/man/gpasswd.1.xml b/man/gpasswd.1.xml
new file mode 100644
index 0000000..ebd1b41
--- /dev/null
+++ b/man/gpasswd.1.xml
@@ -0,0 +1,322 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1996 , Rafal Maszkowski
+ Copyright (c) 2007 - 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY ENCRYPT_METHOD SYSTEM "login.defs.d/ENCRYPT_METHOD.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 SHA_CRYPT_MIN_ROUNDS SYSTEM "login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml">
+<!-- SHADOW-CONFIG-HERE -->
+]>
+
+<refentry id='gpasswd.1'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Rafal</firstname>
+ <surname>Maszkowski</surname>
+ <contrib>Creation, 1996</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>gpasswd</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>gpasswd</refname>
+ <refpurpose>
+ <phrase condition="no_gshadow">
+ administer <filename>/etc/group</filename>
+ </phrase>
+ <phrase condition="gshadow">
+ administer <filename>/etc/group</filename> and
+ <filename>/etc/gshadow</filename>
+ </phrase>
+ </refpurpose>
+ </refnamediv>
+ <!-- body begins here -->
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>gpasswd</command>
+ <arg choice='opt'>
+ <replaceable>option</replaceable>
+ </arg>
+ <arg choice='plain'>
+ <replaceable>group</replaceable>
+ </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The <command>gpasswd</command> command is used to administer
+ <filename>/etc/group</filename><phrase condition="gshadow">,
+ and <filename>/etc/gshadow</filename></phrase>.
+ Every group can have
+ <phrase condition="gshadow">administrators,</phrase>
+ members and a password.
+ </para>
+ <para condition="gshadow">
+ System administrators can use the <option>-A</option> option to define
+ group administrator(s) and the <option>-M</option> option to define
+ members. They have all rights of group administrators and members.
+ </para>
+ <para>
+ <command>gpasswd</command> called by
+ <phrase condition="gshadow">a group administrator</phrase>
+ <phrase condition="no_gshadow">a system administrator</phrase>
+ with a group name only prompts for the new password of the
+ <replaceable>group</replaceable>.
+ </para>
+ <para>
+ If a password is set the members can still use <citerefentry>
+ <refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry> without a password, and non-members must supply the
+ password.
+ </para>
+
+ <refsect2 id='notes_about_group_passwords'>
+ <title>Notes about group passwords</title>
+ <para>
+ Group passwords are an inherent security problem since more than one
+ person is permitted to know the password. However, groups are a
+ useful tool for permitting co-operation between different users.
+ </para>
+ </refsect2>
+
+ </refsect1>
+
+ <refsect1 id='options'>
+ <title>OPTIONS</title>
+ <para condition="gshadow">
+ Except for the <option>-A</option> and <option>-M</option> options,
+ the options cannot be combined.
+ </para>
+ <para condition="no_gshadow">
+ The options cannot be combined.
+ </para>
+ <para>
+ The options which apply to the <command>gpasswd</command> command are:
+ </para>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term>
+ <option>-a</option>, <option>--add</option>&nbsp;<replaceable>user</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Add the <replaceable>user</replaceable> to the named
+ <replaceable>group</replaceable>.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term>
+ <option>-d</option>, <option>--delete</option>&nbsp;<replaceable>user</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Remove the <replaceable>user</replaceable> from the named
+ <replaceable>group</replaceable>.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term><option>-h</option>, <option>--help</option></term>
+ <listitem>
+ <para>Display help message and exit.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term>
+ <option>-Q</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Apply changes in the <replaceable>CHROOT_DIR</replaceable>
+ directory and use the configuration files from the
+ <replaceable>CHROOT_DIR</replaceable> directory.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term>
+ <option>-r</option>, <option>--remove-password</option>
+ </term>
+ <listitem>
+ <para>
+ Remove the password from the named <replaceable>group</replaceable>.
+ The group password will be empty.
+ Only group members will be allowed to use
+ <command>newgrp</command> to join the named
+ <replaceable>group</replaceable>.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term>
+ <option>-R</option>, <option>--restrict</option>
+ </term>
+ <listitem>
+ <para>
+ Restrict the access to the named <replaceable>group</replaceable>.
+ The group password is set to "!".
+ Only group members with a password will be allowed to use
+ <command>newgrp</command> to join the named
+ <replaceable>group</replaceable>.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <variablelist remap='IP' condition="gshadow">
+ <varlistentry>
+ <term>
+ <option>-A</option>, <option>--administrators</option>&nbsp;<replaceable>user</replaceable>,...
+ </term>
+ <listitem>
+ <para>
+ Set the list of administrative users.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term>
+ <option>-M</option>, <option>--members</option>&nbsp;<replaceable>user</replaceable>,...
+ </term>
+ <listitem>
+ <para>
+ Set the list of group members.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='caveats'>
+ <title>CAVEATS</title>
+ <para>
+ This tool only operates on the <filename>/etc/group</filename>
+ <phrase condition="gshadow"> and <filename>/etc/gshadow</filename>
+ files.</phrase>
+ <phrase condition="no_gshadow">file.</phrase>
+ Thus you cannot change any NIS or LDAP group. This must be performed
+ on the corresponding server.
+ </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>
+ &ENCRYPT_METHOD;
+ &MAX_MEMBERS_PER_GROUP;
+ &MD5_CRYPT_ENAB;
+ &SHA_CRYPT_MIN_ROUNDS; <!--This also document SHA_CRYPT_MAX_ROUNDS-->
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/group</filename></term>
+ <listitem>
+ <para>Group account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="gshadow">
+ <term><filename>/etc/gshadow</filename></term>
+ <listitem>
+ <para>Secure group account information.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>group</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry><phrase condition="gshadow">,
+ <citerefentry>
+ <refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry></phrase>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/groupadd.8.xml b/man/groupadd.8.xml
new file mode 100644
index 0000000..1e58f09
--- /dev/null
+++ b/man/groupadd.8.xml
@@ -0,0 +1,374 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1991 , Julianne Frances Haugh
+ Copyright (c) 2007 - 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY GID_MAX SYSTEM "login.defs.d/GID_MAX.xml">
+<!ENTITY MAX_MEMBERS_PER_GROUP SYSTEM "login.defs.d/MAX_MEMBERS_PER_GROUP.xml">
+<!ENTITY SYS_GID_MAX SYSTEM "login.defs.d/SYS_GID_MAX.xml">
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='groupadd.8'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1991</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>groupadd</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>groupadd</refname>
+ <refpurpose>create a new group</refpurpose>
+ </refnamediv>
+ <!-- body begins here -->
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>groupadd</command>
+ <arg choice='opt'>
+ <replaceable>options</replaceable>
+ </arg>
+ <arg choice='plain'>
+ <replaceable>group</replaceable>
+ </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>The <command>groupadd</command> command creates a new group
+ account using the values specified on the command line plus the default
+ values from the system. The new group will be entered into the system
+ files as needed.
+ </para>
+ </refsect1>
+
+ <refsect1 id='options'>
+ <title>OPTIONS</title>
+ <para>
+ The options which apply to the <command>groupadd</command> command
+ are:
+ </para>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term>
+ <option>-f</option>, <option>--force</option>
+ </term>
+ <listitem>
+ <para>
+ This option causes the command to simply exit with success
+ status if the specified group already exists. When used with
+ <option>-g</option>, and the specified GID already exists,
+ another (unique) GID is chosen (i.e. <option>-g</option> is
+ turned off).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GID</replaceable>
+ </term>
+ <listitem>
+ <para>The numerical value of the group's ID. This value must be
+ unique, unless the <option>-o</option> option is used. The value
+ must be non-negative. The default is to use the smallest ID
+ value greater than or equal to <option>GID_MIN</option> and
+ greater than every other group.
+ </para>
+ <para>
+ See also the <option>-r</option> option and the
+ <option>GID_MAX</option> description.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-h</option>, <option>--help</option></term>
+ <listitem>
+ <para>Display help message and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</replaceable>=<replaceable>VALUE</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Overrides <filename>/etc/login.defs</filename> defaults
+ (GID_MIN, GID_MAX and others). Multiple
+ <option>-K</option> options can be specified.
+ </para>
+ <para>
+ Example: <option>-K</option>&nbsp;<replaceable>GID_MIN</replaceable>=<replaceable>100</replaceable>&nbsp;
+ <option>-K</option>&nbsp;<replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>
+ </para>
+ <para>
+ Note: <option>-K</option>&nbsp;<replaceable>GID_MIN</replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>
+ doesn't work yet.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-o</option>, <option>--non-unique</option>
+ </term>
+ <listitem>
+ <para>
+ This option permits to add a group with a non-unique GID.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-p</option>, <option>--password</option>&nbsp;<replaceable>PASSWORD</replaceable>
+ </term>
+ <listitem>
+ <para>
+ The encrypted password, as returned by <citerefentry>
+ <refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>. The default is to disable the password.
+ </para>
+ <para>
+ <emphasis role="bold">Note:</emphasis> This option is not
+ recommended because the password (or encrypted password) will
+ be visible by users listing the processes.
+ </para>
+ <para>
+ You should make sure the password respects the system's
+ password policy.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-r</option>, <option>--system</option>
+ </term>
+ <listitem>
+ <para>
+ Create a system group.
+ </para>
+ <para>
+ The numeric identifiers of new system groups are chosen in
+ the <option>SYS_GID_MIN</option>-<option>SYS_GID_MAX</option>
+ range, defined in <filename>login.defs</filename>, instead of
+ <option>GID_MIN</option>-<option>GID_MAX</option>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Apply changes in the <replaceable>CHROOT_DIR</replaceable>
+ directory and use the configuration files from the
+ <replaceable>CHROOT_DIR</replaceable> directory.
+ </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>
+
+ <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>
+ &GID_MAX; <!-- documents also GID_MIN -->
+ &MAX_MEMBERS_PER_GROUP;
+ &SYS_GID_MAX; <!-- documents also SYS_GID_MIN -->
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/group</filename></term>
+ <listitem>
+ <para>Group account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="gshadow">
+ <term><filename>/etc/gshadow</filename></term>
+ <listitem>
+ <para>Secure group account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/login.defs</filename></term>
+ <listitem>
+ <para>Shadow password suite configuration.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='caveats'>
+ <title>CAVEATS</title>
+ <para>
+ Groupnames must start with a lower case letter or an underscore,
+ followed by lower case letters, digits, underscores, or dashes.
+ They can end with a dollar sign.
+ In regular expression terms: [a-z_][a-z0-9_-]*[$]?
+ </para>
+ <para>
+ Groupnames may only be up to &GROUP_NAME_MAX_LENGTH; characters long.
+ </para>
+ <para>
+ You may not add a NIS or LDAP group. This must be performed on the
+ corresponding server.
+ </para>
+ <para>
+ If the groupname already exists in an external group database such
+ as NIS or LDAP, <command>groupadd</command> will deny the group
+ creation request.
+ </para>
+ </refsect1>
+
+ <refsect1 id='exit_values'>
+ <title>EXIT VALUES</title>
+ <para>
+ The <command>groupadd</command> command exits with the following values:
+ <variablelist>
+ <varlistentry>
+ <term><replaceable>0</replaceable></term>
+ <listitem>
+ <para>success</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>2</replaceable></term>
+ <listitem>
+ <para>invalid command syntax</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>3</replaceable></term>
+ <listitem>
+ <para>invalid argument to option</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>4</replaceable></term>
+ <listitem>
+ <para>GID not unique (when <option>-o</option> not used)</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>9</replaceable></term>
+ <listitem>
+ <para>group name not unique</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>10</replaceable></term>
+ <listitem>
+ <para>can't update group file</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para><citerefentry>
+ <refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>gpasswd</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/groupdel.8.xml b/man/groupdel.8.xml
new file mode 100644
index 0000000..4111661
--- /dev/null
+++ b/man/groupdel.8.xml
@@ -0,0 +1,245 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 2007 - 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY MAX_MEMBERS_PER_GROUP SYSTEM "login.defs.d/MAX_MEMBERS_PER_GROUP.xml">
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='groupdel.8'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1991</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>groupdel</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>groupdel</refname>
+ <refpurpose>delete a group</refpurpose>
+ </refnamediv>
+ <!-- body begins here -->
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>groupdel</command>
+ <arg choice='opt'>
+ <replaceable>options</replaceable>
+ </arg>
+ <arg choice='plain'><replaceable>GROUP</replaceable></arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para> The <command>groupdel</command> command modifies the system
+ account files, deleting all entries that refer to
+ <replaceable>GROUP</replaceable>. The named group must exist.
+ </para>
+ </refsect1>
+
+ <refsect1 id='options'>
+ <title>OPTIONS</title>
+ <para>
+ The options which apply to the <command>groupdel</command> command
+ are:
+ </para>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term><option>-h</option>, <option>--help</option></term>
+ <listitem>
+ <para>Display help message and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Apply changes in the <replaceable>CHROOT_DIR</replaceable>
+ directory and use the configuration files from the
+ <replaceable>CHROOT_DIR</replaceable> directory.
+ </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>
+
+ <refsect1 id='caveats'>
+ <title>CAVEATS</title>
+ <para>
+ You may not remove the primary group of any existing user. You
+ must remove the user before you remove the group.
+ </para>
+ <para>
+ You should manually check all file systems to ensure that no files
+ remain owned by this group.
+ </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>
+ &MAX_MEMBERS_PER_GROUP;
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/group</filename></term>
+ <listitem>
+ <para>Group account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="gshadow">
+ <term><filename>/etc/gshadow</filename></term>
+ <listitem>
+ <para>Secure group account information.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='exit_values'>
+ <title>EXIT VALUES</title>
+ <para>
+ The <command>groupdel</command> command exits with the following values:
+ <variablelist>
+ <varlistentry>
+ <term><replaceable>0</replaceable></term>
+ <listitem>
+ <para>success</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>2</replaceable></term>
+ <listitem>
+ <para>invalid command syntax</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>6</replaceable></term>
+ <listitem>
+ <para>specified group doesn't exist</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>8</replaceable></term>
+ <listitem>
+ <para>can't remove user's primary group</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>10</replaceable></term>
+ <listitem>
+ <para>can't update group file</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>gpasswd</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/groupmems.8.xml b/man/groupmems.8.xml
new file mode 100644
index 0000000..6077d55
--- /dev/null
+++ b/man/groupmems.8.xml
@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2000 , International Business Machines
+ George Kraft IV, gk4@us.ibm.com, 03/23/2000
+ Copyright (c) 2005 , Tomasz Kłoczko
+ Copyright (c) 2007 - 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY MAX_MEMBERS_PER_GROUP SYSTEM "login.defs.d/MAX_MEMBERS_PER_GROUP.xml">
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='groupmems.8'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>George</firstname>
+ <surname>Kraft</surname>
+ <lineage>IV</lineage>
+ <contrib>Creation, 2000</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>groupmems</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>groupmems</refname>
+ <refpurpose>administer members of a user's primary group</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>groupmems</command>
+ <group choice='plain'>
+ <arg choice='plain'>-a <replaceable>user_name</replaceable></arg>
+ <arg choice='plain'>-d <replaceable>user_name</replaceable></arg>
+ <arg choice='opt'>-g <replaceable>group_name</replaceable></arg>
+ <arg choice='plain'>-l </arg><arg choice='plain'>-p </arg>
+ </group>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ 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).
+ </para>
+
+ <para>Only the superuser, as administrator, can use
+ <command>groupmems</command> to alter the memberships of other groups.
+ </para>
+ </refsect1>
+
+ <refsect1 id='options'>
+ <title>OPTIONS</title>
+ <para>
+ The options which apply to the <command>groupmems</command> command
+ are:
+ </para>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term><option>-a</option>, <option>--add</option>&nbsp;<replaceable>user_name</replaceable></term>
+ <listitem>
+ <para>Add a user to the group membership list.</para>
+ <para condition="gshadow">
+ If the <filename>/etc/gshadow</filename> file exist, and the
+ group has no entry in the <filename>/etc/gshadow</filename>
+ file, a new entry will be created.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-d</option>, <option>--delete</option>&nbsp;<replaceable>user_name</replaceable></term>
+ <listitem>
+ <para>Delete a user from the group membership list.</para>
+ <para condition="gshadow">
+ If the <filename>/etc/gshadow</filename> file exist, the user
+ will be removed from the list of members and administrators of
+ the group.
+ </para>
+ <para condition="gshadow">
+ If the <filename>/etc/gshadow</filename> file exist, and the
+ group has no entry in the <filename>/etc/gshadow</filename>
+ file, a new entry will be created.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-g</option>, <option>--group</option>&nbsp;<replaceable>group_name</replaceable></term>
+ <listitem>
+ <para>The superuser can specify which group membership
+ list to modify.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-h</option>, <option>--help</option></term>
+ <listitem>
+ <para>Display help message and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-l</option>, <option>--list</option></term>
+ <listitem>
+ <para>List the group membership list.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-p</option>, <option>--purge</option></term>
+ <listitem>
+ <para>Purge all users from the group membership list.</para>
+ <para condition="gshadow">
+ If the <filename>/etc/gshadow</filename> file exist, and the
+ group has no entry in the <filename>/etc/gshadow</filename>
+ file, a new entry will be created.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Apply changes in the <replaceable>CHROOT_DIR</replaceable>
+ directory and use the configuration files from the
+ <replaceable>CHROOT_DIR</replaceable> directory.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='setup'>
+ <title>SETUP</title>
+ <para>
+ 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.
+ </para>
+
+ <programlisting>
+ $ groupadd -r groups
+ $ chmod 2710 groupmems
+ $ chown root.groups groupmems
+ $ groupmems -g groups -a gk4
+ </programlisting>
+ </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>
+ &MAX_MEMBERS_PER_GROUP;
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/group</filename></term>
+ <listitem>
+ <para>Group account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="gshadow">
+ <term><filename>/etc/gshadow</filename></term>
+ <listitem>
+ <para>secure group account information</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/groupmod.8.xml b/man/groupmod.8.xml
new file mode 100644
index 0000000..b381c33
--- /dev/null
+++ b/man/groupmod.8.xml
@@ -0,0 +1,355 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1991 , Julianne Frances Haugh
+ Copyright (c) 2007 - 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY MAX_MEMBERS_PER_GROUP SYSTEM "login.defs.d/MAX_MEMBERS_PER_GROUP.xml">
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='groupmod.8'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1991</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>groupmod</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>groupmod</refname>
+ <refpurpose>modify a group definition on the system</refpurpose>
+ </refnamediv>
+ <!-- body begins here -->
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>groupmod</command>
+ <arg choice='opt'>
+ <replaceable>options</replaceable>
+ </arg>
+ <arg choice='plain'><replaceable>GROUP</replaceable></arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The <command>groupmod</command> command modifies the definition of the
+ specified <replaceable>GROUP</replaceable> by modifying the appropriate
+ entry in the group database.
+ </para>
+ </refsect1>
+
+ <refsect1 id='options'>
+ <title>OPTIONS</title>
+ <para>
+ The options which apply to the <command>groupmod</command> command
+ are:
+ </para>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term>
+ <option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GID</replaceable>
+ </term>
+ <listitem>
+ <para>
+ The group ID of the given <replaceable>GROUP</replaceable> will
+ be changed to <replaceable>GID</replaceable>.
+ </para>
+ <para>
+ The value of
+ <replaceable>GID</replaceable> must be a non-negative decimal
+ integer. This value must be unique, unless the
+ <option>-o</option> option is used.
+ </para>
+ <para>
+ Users who use the group as primary group will be updated to
+ keep the group as their primary group.
+ </para>
+ <para>
+ Any files that have the
+ old group ID and must continue to belong to
+ <replaceable>GROUP</replaceable>, must have their group ID
+ changed manually.
+ </para>
+ <para>
+ No checks will be performed with regard to the
+ <option>GID_MIN</option>, <option>GID_MAX</option>,
+ <option>SYS_GID_MIN</option>, or <option>SYS_GID_MAX</option>
+ from <filename>/etc/login.defs</filename>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-h</option>, <option>--help</option></term>
+ <listitem>
+ <para>Display help message and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-n</option>, <option>--new-name</option>&nbsp;<replaceable>NEW_GROUP</replaceable>
+ </term>
+ <listitem>
+ <para>
+ The name of the group will be changed from <replaceable>GROUP</replaceable>
+ to <replaceable>NEW_GROUP</replaceable> name.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-o</option>, <option>--non-unique</option>
+ </term>
+ <listitem>
+ <para>
+ When used with the <option>-g</option> option, allow to change the
+ group <replaceable>GID</replaceable> to a non-unique value.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-p</option>, <option>--password</option>&nbsp;<replaceable>PASSWORD</replaceable>
+ </term>
+ <listitem>
+ <para>
+ The encrypted password, as returned by <citerefentry>
+ <refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>.
+ </para>
+ <para>
+ <emphasis role="bold">Note:</emphasis> This option is not
+ recommended because the password (or encrypted password) will
+ be visible by users listing the processes.
+ </para>
+ <para>
+ You should make sure the password respects the system's
+ password policy.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Apply changes in the <replaceable>CHROOT_DIR</replaceable>
+ directory and use the configuration files from the
+ <replaceable>CHROOT_DIR</replaceable> directory.
+ </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>
+
+ <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>
+ &MAX_MEMBERS_PER_GROUP;
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/group</filename></term>
+ <listitem>
+ <para>Group account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="gshadow">
+ <term><filename>/etc/gshadow</filename></term>
+ <listitem>
+ <para>Secure group account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/login.defs</filename></term>
+ <listitem>
+ <para>Shadow password suite configuration.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/passwd</filename></term>
+ <listitem>
+ <para>User account information.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='exit_values'>
+ <title>EXIT VALUES</title>
+ <para>
+ The <command>groupmod</command> command exits with the following values:
+ <variablelist>
+ <varlistentry>
+ <term><replaceable>0</replaceable></term>
+ <listitem>
+ <para>E_SUCCESS: success</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>2</replaceable></term>
+ <listitem>
+ <para>E_USAGE: invalid command syntax</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>3</replaceable></term>
+ <listitem>
+ <para>E_BAD_ARG: invalid argument to option</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>4</replaceable></term>
+ <listitem>
+ <para>E_GID_IN_USE: specified group doesn't exist</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>6</replaceable></term>
+ <listitem>
+ <para>E_NOTFOUND: specified group doesn't exist</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>9</replaceable></term>
+ <listitem>
+ <para>E_NAME_IN_USE: group name already in use</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>10</replaceable></term>
+ <listitem>
+ <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>
+ </para>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>gpasswd</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/groups.1.xml b/man/groups.1.xml
new file mode 100644
index 0000000..02e5432
--- /dev/null
+++ b/man/groups.1.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ Copyright (c) 2007 - 2008, 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='groups.1'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1991</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>groups</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>groups</refname>
+ <refpurpose>display current group names</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>groups</command>
+ <arg choice='opt'>
+ <replaceable>user</replaceable>
+ </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The <command>groups</command> command displays the current group names
+ or ID values. If the value does not have a corresponding entry in
+ <filename>/etc/group</filename>, the value will be displayed as the
+ numerical group value. The optional <emphasis
+ remap='I'>user</emphasis> parameter will display the groups for the
+ named <emphasis remap='I'>user</emphasis>.
+ </para>
+ </refsect1>
+
+ <refsect1 id='note'>
+ <title>NOTE</title>
+ <para>
+ Systems which do not support concurrent group sets will have the
+ information from <filename>/etc/group</filename> reported. The user
+ must use <command>newgrp</command> or <command>sg</command> to change
+ his current real and effective group ID.
+ </para>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/group</filename></term>
+ <listitem>
+ <para>Group account information.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>getgid</refentrytitle><manvolnum>2</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>getgroups</refentrytitle><manvolnum>2</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>getuid</refentrytitle><manvolnum>2</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/grpck.8.xml b/man/grpck.8.xml
new file mode 100644
index 0000000..77c4bd8
--- /dev/null
+++ b/man/grpck.8.xml
@@ -0,0 +1,314 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1992 - 1993, Julianne Frances Haugh
+ Copyright (c) 2007 - 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY MAX_MEMBERS_PER_GROUP SYSTEM "login.defs.d/MAX_MEMBERS_PER_GROUP.xml">
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='grpck.8'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1992</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>grpck</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>grpck</refname>
+ <refpurpose>verify integrity of group files</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>grpck</command>
+ <arg choice='opt'>options</arg>
+ <arg choice='opt'>
+ <arg choice='plain'><replaceable>group</replaceable></arg>
+ <arg choice='opt' condition="gshadow">
+ <arg choice='plain'><replaceable>shadow</replaceable></arg>
+ </arg>
+ </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The <command>grpck</command> command verifies the integrity of the
+ groups information. It checks that all entries in
+ <filename>/etc/group</filename> <phrase condition="gshadow">and
+ <filename>/etc/gshadow</filename></phrase>
+ have the proper format and contain valid data.
+ The user is prompted to delete entries that are
+ improperly formatted or which have other uncorrectable errors.
+ </para>
+
+ <para>Checks are made to verify that each entry has:</para>
+
+ <itemizedlist mark='bullet'>
+ <listitem>
+ <para>the correct number of fields</para>
+ </listitem>
+ <listitem>
+ <para>a unique and valid group name</para>
+ </listitem>
+ <listitem>
+ <para>
+ a valid group identifier
+ <phrase condition="gshadow"> (<filename>/etc/group</filename>
+ only)</phrase>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ a valid list of members
+ <phrase condition="gshadow"> and administrators</phrase>
+ </para>
+ </listitem>
+ <listitem condition="gshadow">
+ <para>
+ a corresponding entry in the <filename>/etc/gshadow</filename>
+ file (respectively <filename>/etc/group</filename> for the
+ <filename>gshadow</filename> checks)
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ The checks for correct number of fields and unique group name are
+ fatal. If an entry has the wrong number of fields, the user will be
+ prompted to delete the entire line. If the user does not answer
+ affirmatively, all further checks are bypassed. An entry with a
+ duplicated group name is prompted for deletion, but the remaining
+ checks will still be made. All other errors are warnings and the user
+ is encouraged to run the <command>groupmod</command> command to
+ correct the error.
+ </para>
+
+ <para>
+ The commands which operate on the <filename>/etc/group</filename>
+ <phrase condition="no_gshadow">file</phrase><phrase
+ condition="gshadow">and <filename>/etc/gshadow</filename> files</phrase>
+ are not able to alter corrupted or duplicated entries.
+ <command>grpck</command> should be used in those circumstances to
+ remove the offending entries.
+ </para>
+ </refsect1>
+
+ <refsect1 id='options'>
+ <title>OPTIONS</title>
+ <para>
+ The <option>-r</option> and <option>-s</option> options cannot be
+ combined.
+ </para>
+ <para>
+ The options which apply to the <command>grpck</command> command are:
+ </para>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term><option>-h</option>, <option>--help</option></term>
+ <listitem>
+ <para>Display help message and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-r</option>, <option>--read-only</option></term>
+ <listitem>
+ <para>
+ Execute the <command>grpck</command> command in read-only mode.
+ This causes all questions regarding changes to be answered
+ <emphasis>no</emphasis> without user intervention.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Apply changes in the <replaceable>CHROOT_DIR</replaceable>
+ directory and use the configuration files from the
+ <replaceable>CHROOT_DIR</replaceable> directory.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-s</option>, <option>--sort</option></term>
+ <listitem>
+ <para>
+ Sort entries in <filename>/etc/group</filename>
+ <phrase condition="gshadow">and
+ <filename>/etc/gshadow</filename></phrase>
+ by GID.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <para>
+ By default, <command>grpck</command> operates on
+ <filename>/etc/group</filename> <phrase condition="gshadow">and
+ <filename>/etc/gshadow</filename></phrase>.
+ The user may select alternate files with the <emphasis
+ remap='I'>group</emphasis>
+ <phrase condition="no_gshadow">parameter.</phrase>
+ <phrase condition="gshadow">and <emphasis remap='I'>shadow</emphasis>
+ parameters.</phrase>
+ </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>
+ &MAX_MEMBERS_PER_GROUP;
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/group</filename></term>
+ <listitem>
+ <para>Group account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="gshadow">
+ <term><filename>/etc/gshadow</filename></term>
+ <listitem>
+ <para>Secure group account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/passwd</filename></term>
+ <listitem>
+ <para>User account information.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='exit_values'>
+ <title>EXIT VALUES</title>
+ <para>
+ The <command>grpck</command> command exits with the following values:
+ <variablelist>
+ <varlistentry>
+ <term><replaceable>0</replaceable></term>
+ <listitem>
+ <para>success</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>1</replaceable></term>
+ <listitem>
+ <para>invalid command syntax</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>2</replaceable></term>
+ <listitem>
+ <para>one or more bad group entries</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>3</replaceable></term>
+ <listitem>
+ <para>can't open group files</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>4</replaceable></term>
+ <listitem>
+ <para>can't lock group files</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>5</replaceable></term>
+ <listitem>
+ <para>can't update group files</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>group</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <phrase condition="gshadow">
+ <citerefentry>
+ <refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum>,
+ </citerefentry>,
+ </phrase>
+ <citerefentry>
+ <refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/gshadow.5.xml b/man/gshadow.5.xml
new file mode 100644
index 0000000..6bc1ed9
--- /dev/null
+++ b/man/gshadow.5.xml
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2005 - 2008, 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='gshadow.5'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>Creation, 2005</contrib>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>gshadow</refentrytitle>
+ <manvolnum>5</manvolnum>
+ <refmiscinfo class="sectdesc">File Formats and Conversions</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>gshadow</refname>
+ <refpurpose>shadowed group file</refpurpose>
+ </refnamediv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ <filename>/etc/gshadow</filename> contains the shadowed information
+ for group accounts.
+ </para>
+
+ <para>
+ This file must not be readable by regular users if password security
+ is to be maintained.
+ </para>
+
+ <para>
+ Each line of this file contains the following colon-separated
+ fields:
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term><emphasis role="bold">group name</emphasis></term>
+ <listitem>
+ <para>
+ It must be a valid group name, which exist on the system.
+ </para>
+ </listitem>
+ </varlistentry>
+ <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 *,
+ users will not be able to use a unix password to access the
+ group (but group members do not need the password).
+ </para>
+ <para>
+ The password is used when a user who is not a member of the
+ group wants to gain the permissions of this group (see
+ <citerefentry><refentrytitle>newgrp</refentrytitle>
+ <manvolnum>1</manvolnum></citerefentry>).
+ </para>
+ <para>
+ This field may be empty, in which case only the group members
+ can gain the group permissions.
+ </para>
+ <para>
+ A password field which starts with an exclamation mark means
+ that the password is locked. The remaining characters on the
+ line represent the password field before the password was
+ locked.
+ </para>
+ <para>
+ This password supersedes any password specified in
+ <filename>/etc/group</filename>.
+ </para>
+
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><emphasis role="bold">administrators</emphasis></term>
+ <listitem>
+ <para>
+ It must be a comma-separated list of user names.
+ </para>
+ <para>
+ Administrators can change the password or the members of the
+ group.
+ </para>
+ <para>
+ Administrators also have the same permissions as the members
+ (see below).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><emphasis role="bold">members</emphasis></term>
+ <listitem>
+ <para>
+ It must be a comma-separated list of user names.
+ </para>
+ <para>
+ Members can access the group without being prompted for a
+ password.
+ </para>
+ <para>
+ You should use the same list of users as in
+ <filename>/etc/group</filename>.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/group</filename></term>
+ <listitem>
+ <para>Group account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/gshadow</filename></term>
+ <listitem>
+ <para>Secure group account information.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>gpasswd</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>group</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>grpconv</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/hu/Makefile.am b/man/hu/Makefile.am
new file mode 100644
index 0000000..e659aef
--- /dev/null
+++ b/man/hu/Makefile.am
@@ -0,0 +1,17 @@
+
+mandir = @mandir@/hu
+
+man_MANS = \
+ man1/chsh.1 \
+ man1/gpasswd.1 \
+ man1/groups.1 \
+ man8/lastlog.8 \
+ man1/login.1 \
+ man1/newgrp.1 \
+ man1/passwd.1 \
+ man5/passwd.5 \
+ man1/sg.1 \
+ man1/su.1
+
+EXTRA_DIST = $(man_MANS)
+
diff --git a/man/hu/Makefile.in b/man/hu/Makefile.in
new file mode 100644
index 0000000..f2ffb33
--- /dev/null
+++ b/man/hu/Makefile.in
@@ -0,0 +1,658 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = man/hu
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" \
+ "$(DESTDIR)$(man8dir)"
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@/hu
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = \
+ man1/chsh.1 \
+ man1/gpasswd.1 \
+ man1/groups.1 \
+ man8/lastlog.8 \
+ man1/login.1 \
+ man1/newgrp.1 \
+ man1/passwd.1 \
+ man5/passwd.5 \
+ man1/sg.1 \
+ man1/su.1
+
+EXTRA_DIST = $(man_MANS)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/hu/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign man/hu/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+install-man5: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man5dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.5[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man5:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man5dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.5[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir)
+install-man8: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man8dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.8[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man8:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man8dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.8[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-man5 install-man8 install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+ uninstall-am uninstall-man uninstall-man1 uninstall-man5 \
+ uninstall-man8
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/hu/man1/chsh.1 b/man/hu/man1/chsh.1
new file mode 100644
index 0000000..b4b1b4d
--- /dev/null
+++ b/man/hu/man1/chsh.1
@@ -0,0 +1,65 @@
+.\" Copyright 1990, John F. Haugh II
+.\" 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. All advertising materials mentioning features or use of this software
+.\" must display the following acknowledgement:
+.\" This product includes software developed by John F. Haugh, II
+.\" and other contributors.
+.\" 4. Neither the name of John F. Haugh, II nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JOHN HAUGH 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 JOHN HAUGH 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.
+.\"
+.\" $Id$
+.\"
+.TH CHSH 1
+.SH NÉV
+chsh \- bejelentkezési parancsértelmező (héj) állítása
+.SH ÁTTEKINTÉS
+.TP 5
+\fBchsh\fR
+[\fB\-s\fR \fIhéjprogram\fR] [\fIfelhasználó\fR]
+.SH LEÍRÁS
+A \fBchsh\fR parancs a felhasználó bejelentkezési parancsértelmezőjét változtatja meg.
+Normál felhasználó csak a saját parancsértelmezőjét állíthatja, a
+rendszergazda bárkiét.
+.PP
+A héjprogrammal (shell) szemben támasztott követelmény, hogy szerepeljen
+a \fI/etc/shells\fR fájlban, kivéve ha a rendszergazdáé mert
+neki minden beállítás elfogadott.
+Korlátozott parancsértelmezőt nem lehet másikra átállítani.
+Ezért nem tanácsos a \fB/bin/rsh\fR\-nak a \fI/etc/shells\fR\-ben
+való felsorolása, mert ha a felhasználó átvált erre a héj\-ra
+nem válthat másikra.
+.PP
+A \fB\-s\fR opció nélkül a \fBchsh\fR interaktív módon
+működik. Be kell írni az új értéket, vagy üresen hagyni a sort, hogy
+az éppen aktuális beállítás maradjon, ami \fB[ ]\fR jelek között látható.
+.SH FÁJLOK
+\fI/etc/passwd\fR \- felhaszálói nyilvántartás
+.br
+\fI/etc/shells\fR \- engedélyezett parancsértelmezők listája
+.SH LÁSD MÉG
+.BR chfn (1),
+.BR passwd (5)
+.SH MAGYAR FORDÍTÁS
+Székely Krisztián <szekelyk@edasz.hu>
diff --git a/man/hu/man1/gpasswd.1 b/man/hu/man1/gpasswd.1
new file mode 100644
index 0000000..b62cf1e
--- /dev/null
+++ b/man/hu/man1/gpasswd.1
@@ -0,0 +1,81 @@
+.\" Copyright 1996, Rafal Maszkowski, rzm@pdi.net
+.\" All rights reserved. You can redistribute this man page and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation; either version 2 of the
+.\" License, or (at your option) any later version.
+.\"
+.\" $Id$
+.\"
+.TH GPASSWD 1
+.SH NÉV
+gpasswd \- az /etc/group fájlt adminisztrálja
+.br
+.SH ÁTTEKINTÉS
+.B gpasswd \fIcsoport\fR
+.br
+.B gpasswd
+.B \-a
+\fIfelhasználó\fR \fIcsoport\fR
+.br
+.B gpasswd
+.B \-d
+\fIfelhasználó\fR \fIcsoport\fR
+.br
+.B gpasswd
+.B \-R
+\fIcsoport\fR
+.br
+.B gpasswd
+.B \-r
+\fIcsoport\fR
+.br
+.B gpasswd
+.RB [ \-A
+\fIfelhasználó\fR,...]
+.RB [ \-M
+\fIfelhasználó\fR,...]
+\fIcsoport\fR
+.br
+.SH LEÍRÁS
+A
+.B gpasswd
+program segítségével adminisztrálhatjuk az /etc/group fájlt
+illetve az /etc/gshadow fájlt amennyiben a SHADOWGPR definiálva
+volt a fordítás alatt. Minden csoportban lehetnek adminisztrátorok,
+tagok és egy jelszó. A rendszeradminisztrátor a \fB\-A\fR opció
+segítségével definiálhat csoportadminisztrátor(oka)t és a \fB\-M\fR
+opcióval tagokat. A rendszeradminisztátor minden joggal rendelkezik,
+amellyel a csoportadminisztrátor és a csoport tagjai.
+.PP
+A csoportadminisztrátor a \fB\-a\fR kapcsolóval hozhat létre
+felhasználókat, és a \fB\-d\fR opcióval törölheti őket. Az
+adminisztrátorok a \fB\-r\fR opcióval törölhetik a csoport
+jelszavát. Ha nincs jelszó beállítva, akkor csak a csoport
+tagjai használhatják a
+.BR newgrp (1)
+parancsot a csatlakozáshoz. A \fB\-R\fR opció
+meggátolja a csoport elérését a
+.BR newgrp (1)
+parancson keresztül.
+.PP
+Ha
+.B gpasswd
+parancsot a csoportadminisztrátor adja ki a csoport nevével,
+akkor csak a jelszót kell beírnia. Ha van jelszó, akkor a tagok
+be tudnak lépni a
+.BR newgrp (1)
+paranccsal jelszó nélkül is, csak a csoporton kívüli felhasználóknak
+kell megadniuk a jelszót.
+
+.SH FÁJLOK
+\fI/etc/group\fR \- információ a csoportról
+.br
+\fI/etc/gshadow\fR \- információ a shadow csoportról
+.SH LÁSD MÉG
+.BR newgrp (1),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR grpck (8)
+.SH MAGYAR FORDÍTÁS
+Tímár András <timar_a@freemail.hu>
diff --git a/man/hu/man1/groups.1 b/man/hu/man1/groups.1
new file mode 100644
index 0000000..9b87e51
--- /dev/null
+++ b/man/hu/man1/groups.1
@@ -0,0 +1,59 @@
+.\" Copyright 1991 \- 1994, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" $Id$
+.\"
+.TH GROUPS 1
+.SH NÉV
+groups \- kiírja a jelenlegi csoportazonosító neveket
+.SH ÁTTEKINTÉS
+.B groups
+.RI [ felhasználó ]
+.SH LEÍRÁS
+A
+.B groups
+parancs kiírja a jelenlegi csoportazonosító neveket vagy számértékeket. Ha
+nincs az értéknek megfelelő bejegyzés a \fI/etc/group\fR fájlban, akkor a
+csoport azonosító számát írja ki. Az opcionális \fIfelhasználó\fR paraméter
+esetén azokat a csoportokat írja ki, amelyekbe a megadott \fIfelhasználó\fR
+tartozik.
+.SH MEGJEGYZÉS
+Azok a rendszerek, amelyek nem támogatják a konkurrens csoportbeállításokat,
+a kiírt információkat a \fI/etc/group\fR fájlból gyűjtik. A felhasználónak
+muszáj a \fBnewgrp\fR vagy a \fBsg\fR parancsot használniuk, hogy
+megváltoztassák a jelenlegi valódi és effektív csoportazonosítójukat.
+.SH FÁJLOK
+\fI/etc/group\fR \- információ a csoportokról
+.SH LÁSD MÉG
+.BR newgrp (1),
+.BR getgid (2),
+.BR getgroups (2),
+.BR getuid (2)
+.SH AUTHOR
+Julianne Frances Haugh (jfh@tab.com)
+.SH MAGYAR FORDÍTÁS
+ifj. Dyekiss Emil <emil2@cds.hu>
diff --git a/man/hu/man1/login.1 b/man/hu/man1/login.1
new file mode 100644
index 0000000..f84ea82
--- /dev/null
+++ b/man/hu/man1/login.1
@@ -0,0 +1,123 @@
+.\" Copyright 1989 \- 1994, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" $Id$
+.\"
+.TH LOGIN 1
+.SH NÉV
+login \- Új kapcsolat felvétele a rendszerrel (bejelentkezés)
+.SH ÁTTEKINTÉS
+.B login
+.RI [ felhasználónév " [" környezeti változók ]]
+.SH LEÍRÁS
+A
+.B login
+programot a rendszerbe való belépésre használjuk. Általában nem
+közvetlenül használjuk, hanem automatikusan meghívásra kerül, amikor a
+.I login:
+promptra válaszként beírjuk a felhasználónevünket.
+A
+.B login
+a shell szempontjából különleges kezelésű lehet és előfordulhat, hogy
+nem hívható meg alfolyamatként. Tipikus példa erre, amikor a
+.B login
+parancsot a shell \fBexec login\fR \-ként értelmezi, tehát az új
+bejelentkezés előtt az aktuálisból való kilépésre készteti a
+felhasználót.
+Ha nem login shellből próbáljuk meg a \fBlogin\fR parancsot végrehajtani,
+hibaüzenetet kapunk.
+.PP
+Ezután a jelszavunkat kell megadnunk. A beírt karakterek nem jelennek meg
+a képernyőn, megelőzvén a 'leskelődést'. Ha többször hibás jelszót adunk
+meg, a \fBlogin\fR kilép, és a kapcsolat megszakad.
+.PP
+Ha a jelszavunk érvényességi ideje korlátozott, a rendszer továbblépés
+előtt felszólíthat a jelszó megváltoztatására. Ez azt jelenti, hogy a
+jelszavunk lejárt, nem érvényes, vagy hamarosan le fog járni. A régi
+jelszavunkat is esetleg meg kell adni ellenőrzésképpen, majd az általunk
+választott új jelszót. A témában lásd: \fBpasswd \fR(1)
+.PP
+Sikeres bejelentkezés után néhány rendszerüzenetet kapunk, és a postaládánk
+állapotáról némi visszajelszést. A rendszerüzenetfájl (\fI/etc/motd\fR)
+kiíratását letilthatjuk egy 0 byte hosszúságú \fI.hushlogin\fR file
+létrehozásával a login könyvtárunkban. A posta állapotától függően a
+következő üzenetek valamelyikét kapjuk: "\fBYou have new mail.\fR" (Új
+levél van), "\fBYou have mail.\fR" (Levél van), vagy "\fBNo Mail.\fR"
+(Nincs levél).
+.PP
+A felhasználói\- (UID) és a csoportazonosítónk (GID) beállításra kerül az
+\fI/etc/passwd\fR alapján. A \fB$HOME\fR, \fB$SHELL\fR,
+\fB$PATH\fR, \fB$LOGNAME\fR és a \fB$MAIL\fR környezeti változók
+beállításra kerülnek a passwd adatbázis megfelelő mezői alapján.
+Az ulimit, umask és a nice is értéket kaphat a GECOS mező tartalma
+alapján.
+.PP
+Néhány rendszeren a \fB$TERM\fR változó is értéket kap, miként az a
+\fI/etc/ttytype\fR\-ban meg van írva.
+.PP
+Végrehajtódhat a parancsértelmezőnk inicializációs scriptje is. Ez ügyben
+lásd a megfelelő kézikönyv\-oldalt.
+.SH FIGYELMEZTETÉSEK
+.PP
+A \fBlogin\fR ezen verziója sok fordítási opcióval rendelkezik, bár csak
+néhány közülük az, ami használatban lehet egyes speciális gépeken.
+
+.PP
+A fájlok elhelyezkedése a rendszerkonfigurációk különbözőségéből adódóan
+változhat.
+.SH FÁJLOK
+\fI/var/run/utmp\fR \- az aktuális bejelentkezések listája
+.br
+\fI/var/log/wtmp\fR \- az előző (eddigi) bejelentkezések listája
+.br
+\fI/etc/passwd\fR \- felhasználói account\-okra vonatkozó információk
+.br
+\fI/etc/shadow\fR \- titkosított jelszavak és érvényességi idő\-információk
+.br
+\fI/etc/motd\fR \- rendszerüzenet file
+.br
+\fI/etc/nologin\fR \- nem\-root felhasználók belépésének tiltása
+.br
+\fI/etc/ttytype\fR \- termináltípusok listája
+.br
+.br
+\fI$HOME/.hushlogin\fR \- korlátozza a rendszerüzenetek megjelenítését
+.br
+.SH LÁSD MÉG
+.PP
+.BR getty (8),
+.BR mail (1),
+.BR passwd (1),
+.BR sh (1),
+.BR su (1),
+.\" .BR d_passwd (5),
+.BR passwd (5),
+.BR nologin (5)
+.SH SZERZŐ
+Julianne Frances Haugh (jfh@bga.com)
+.SH MAGYAR FORDÍTÁS
+Niedermayer Miklós <mico@musician.org>
diff --git a/man/hu/man1/newgrp.1 b/man/hu/man1/newgrp.1
new file mode 100644
index 0000000..714f187
--- /dev/null
+++ b/man/hu/man1/newgrp.1
@@ -0,0 +1,89 @@
+.\" Copyright 1991, Julianne Frances Haugh
+.\" Hungarian translation by Peter Mamuzsics <zumu@mentha.hu>
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" $Id$
+.\"
+.TH NEWGRP 1
+.SH NÉV
+newgrp \- Csoportazonosító módosítása
+.br
+sg \- Parancs végrehajtása más csoportazonoító alatt
+.SH ÁTTEKINTÉS
+.BR newgrp " [" \- ]
+[\fIgroup\fR]
+.br
+.BR sg " [" \- ]
+[\fIgroup\fR [\fB\-c\fR \fIcommand\fR]]
+.SH LEÍRÁS
+A
+.B newgrp
+parancs a jelenlegi bejelentkezéshez tartozó csoportazonosító
+módosítására használható. Ha a parancsot az elhagyható \fB\-\fR
+kapcsolóval hívtuk meg, akkor a rendszer úgy inicializálja újra
+a felhasználói környezetet, ahogy az a bejelelentkezés során
+megtörténik, ellenkező esetben a jelenlegi környezet \- beleértve
+az aktuális munkakönyvtárat is \- változatlan marad.
+.PP
+A
+.B newgrp
+parancs lecseréli az aktuális csoportazonosítót a megnevezett
+vagy \- ha nincs megadva \- az \fI/etc/passwd\fR fájlban megadott
+alapértelmezett csoportra. Ha a felhasználó nem rendelkezik jelszóval,
+de a csoport igen, vagy a felhasználó nem tagja a csoportnak,
+de a csoport rendelkezik jelszóval, akkor a rendszer bekéri a csoport
+jelszavát.
+Amennyiben a csoportnak nincs jelszava, és a felhasználó nem tagja a
+csoportnak, akkor a hozzáférés nem lehetséges.
+.PP
+Az
+.B sg
+parancs működése hasonló a \fBnewgrp\fR parancs működéséhez,
+de ez nem cseréli le a felhasználó parancsértelmezőjét, így
+amikor kilépünk az \fBsg\fR parancsból, visszakapjuk az
+eredeti csoportazonosítót.
+Az
+.B sg
+parancsnak egy másik, aposztrófok közé zárt parancsot is meg lehet
+adni, amely a \fB/bin/sh\fR parancsértelmezővel kerül végrehajtásra.
+.SH HIBÁK
+A \fBnewgrp\fR többféle fordítási beállítással rendelkezik,
+amelyeknek egy adott felhasználási környezetben csak egy részére
+lehet szükség.
+.SH FÁJLOK
+\fI/etc/passwd\fR \- felhasználói információk
+.br
+\fI/etc/group\fR \- csoportinfomációk
+.SH LÁSD MÉG
+.BR id (1),
+.BR login (1),
+.BR su (1)
+.SH SZERZŐ
+Julianne Frances Haugh (jfh@bga.com)
+.br
+.SH MAGYAR FORDÍTÁS
+Mamuzsics Péter <zumu@mentha.hu>
diff --git a/man/hu/man1/passwd.1 b/man/hu/man1/passwd.1
new file mode 100644
index 0000000..dab98dd
--- /dev/null
+++ b/man/hu/man1/passwd.1
@@ -0,0 +1,164 @@
+.\" Copyright 1989 \- 1994, John F. Haugh II
+.\" All rights reserved.
+.\"
+.\" Redistribution is allowed, 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. All advertising materials mentioning features or use of this software
+.\" must display the following acknowledgement:
+.\" This product includes software developed by John F. Haugh, II
+.\" and other contributors.
+.\" 4. Neither the name of John F. Haugh, II nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JOHN HAUGH 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 JOHN HAUGH 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.
+.\"
+.\" $Id$
+.\"
+.TH PASSWD 1 "" \" \-*\- nroff \-*\-
+.SH NÉV
+passwd \- Felhasználói jelszó megváltoztatása
+.SH ÁTTEKINTÉS
+\fBpasswd\fR [\fB\-f\fR|\fB\-s\fR] [\fInév\fR]
+.br
+\fBpasswd\fR [\fB\-g\fR] [\fB\-r\fR|\fB\-R\fR] \fIcsoport\fR
+.br
+\fBpasswd\fR [\fB\-x\fR \fImax\fR] [\fB\-n\fR \fImin\fR]
+[\fB\-w\fR \fIfigy\fR] [\fB\-i\fR \fIinakt\fR] \fInév\fR
+.br
+\fBpasswd\fR {\fB\-l\fR|\fB\-u\fR|\fB\-d\fR|\fB\-S\fR} \fInév\fR
+.SH LEÍRÁS
+A \fBpasswd\fR a felhasználók és a csoportok megváltoztatását végzi.
+A felhasználók csak a saját jelszavukat változtathatják meg, a rendszergazda
+bárkiét. A csoportok jelszavát az adott csoport adminisztrátora
+változtathatja meg.
+A \fBpasswd\fR ezen kívül használható a felhasználói adatok, mint pl. az
+igazi név, a login shell, vagy a jelszavak "szavatossági idejének"
+megváltoztatására is.
+.SS Jelszóváltozások
+A felhasználónak először a régi jelszavát kell beírnia, ha már volt neki.
+Ezután ennek a jelszónak a kódolt változatát összehasonlítja a tárolt
+jelszóval. A megfelelő jelszó beírására a felhasználónak csak egy lehetősége
+van.
+A rendszergazda átugorhatja ezt a lépést, így az elfelejtett jelszavak is
+megváltoztathatóak.
+.PP
+Miután a felhasználó beírta a jelszavát, a \fBpasswd\fR megvizsgálja, hogyan
+rendelkezett a rendszergazda a jelszavak "szavatossági idejéről". Amennyiben
+az idő nem alkalmas a jelszó megváltoztatására, \fBpasswd\fR kilép minden
+változtatás nélkül.
+.PP
+Ezekután a program bekéri a felhasználótól az új jelszót, majd
+megvizsgálja hogy elég bonyolult\-e.
+Általános szabályként elmondható, hogy a jelszavak jók, ha 6\-8 karakterből
+állnak, és a következő jelkészletekből tartalmaz elemeket:
+.IP "" .5i
+Az ABC kis betűi
+.IP "" .5i
+Az ABC nagy betűi
+.IP "" .5i
+Számok 0 és 9 között
+.IP "" .5i
+Írásjelek
+.PP
+Fontos odafigyelni, hogy ne tartalmazzon az adott rendszeren használt
+"erase" és "kill" kódű karaktereket.
+A \fBpasswd\fR nem fogad el nem eléggé bonyolult jelszót.
+.PP
+Ha a jelszó elfogadható,
+a \fBpasswd\fR a biztonság kedvéért még egyszer bekéri az új jelszót, és
+csak akkor hajtja végre a változtatást, ha a két bevitt jelszó megegyezik.
+.SS Csoportok jelszavai
+A \fB\-g\fR kapcsoló használata esetén a megadott nevű csoport jelszava
+változik meg. Ezt csak a rendszergazda vagy a csoport adminisztrátora teheti
+meg.
+A jelenlegi csoportjelszavat nem kéri változtatás előtt.
+Az \fB\-r\fR kapcsolót a \fB\-g\fR kapcsolóval használva lehet a csoport jelszavát kikapcsolni, ezáltal minden tag használhatja a csoportot.
+Az \fB\-R\fR kapcsoló a \fB\-g\fR kapcsolóval használva a csoport minden felhasználó előtt lezárul.
+
+.SS A jelszavak "szavatossági ideje"
+A jelszavak elévülési idejét a rendszergazda a \fB\-x\fR, \fB\-n\fR, \fB\-w\fR, és \fB\-i\fR kapcsolókkal szabályozhatja.
+A \fB\-x\fR kapcsoló a jelszócserék közti maximális időt állítja be.
+A jelszót legkésőbb \fImax\fR naponként meg kell változtatni.
+Az \fB\-n\fR kapcsoló a két jelszócsere közötti minimális időt szabályozza: a felhasználó addig nem változtathatja meg jelszavát, amíg legalább
+\fImin\fR nap el nem telt az előző változtatás óta.
+A \fB\-w\fR kapcsolóval azt állíthatod be, hogy hány nappal a jelszó lejárta előtt kezdje el a rendszer a felhasználót figyelmeztetni. Az első figyelmeztetés \fIfigy\fR nappal a lejárat előtt jelenik meg, és utána naponta tájékoztatja a felhasználót a még hátralévő napok számáról.
+Az \fB\-i\fR kapcsoló \fIinakt\fR nappal a jelszó lejárta után lezárja a felhasználó belépési lehetőségét.
+
+.SS Jogosultság\-kezelés
+A felhasználók lezárhatóak és újra beengedhetőek a \fB\-l\fR és a \fB\-u\fR kapcsolókkal.
+Az \fB\-l\fR kapcsoló a jelszót kicseréli egy olyan értékre, ami semmilyen lehetséges jelszó kódolt értékével nem egyezik.
+Az \fB\-u\fR kapcsoló visszaállítja a jelszót a régire, és így újra engedélyezi a belépést.
+.PP
+A jogosultságok az \fB\-S\fR kapcsolóval állíthatóak be. Ez 6 részből áll:
+Az első azt jelzi, hogy a felhaszáló le van zárva (L), nincs jelszava (NP), vagy van érvényes jelszava (P).
+A második rész az utolsó jelszóváltoztatás dátuma.
+A következő négy rész a jelszavak minimális és maximális ideje, az első figyelmeztetés a jelszó lejárta előtt és hogy mennyi ideig él a jelszó lejárta után.
+
+.SS Tippek a felhasználói jelszavakhoz
+Egy jelszavas rendszer biztonsága a kódolási algoritmus erősségétől és a lehetséges kulcsok számától függ.
+A \fB\s-2UNIX\s+2\fR rendszerek kódolási módja az NBS DES algoritmuson alapul, és nagyon biztonságos. A lehetséges kulcsok száma a választott jelszó véletlenszerűségén múlik.
+.PP
+A jelszavas rendszerek feltörése legtöbbször a gondatlanul megválasztott jelszóválasztásnak vagy a jelszavak cserélgetésének eredménye.
+Ezen okok miatt célszerű olyan jelszót választanod, ami nem szerepel a szótárban és nem szükséges leírnod. Tipikusan rossz választás még, ha valamilyen nevet, valamilyen azonosítószámodat, születésnapodat, vagy címedet használod jelszóként.
+Ezeket legtöbbször minden más lehetőség vizsgálata előtt kipróbálja a potenciális cracker.
+.PP
+Igyekezz olyan jelszót választani, amit könnyen megjegyzel és így nem vagy
+arra szorulva, hogy le kelljen írnod.
+Ezt például úgy érheted el, hogy két rövidebb szót elválasztasz egy számmal
+vagy valamilyen karakterrel, például jel@szo
+.PP
+A másik módszer, hogy egy könnyen megjegyezhető mondat vagy idézet minden
+szavának első vagy utolsó betűjét írod egymás után.
+Így például a
+.IP "" .5i
+Morzsa kutyám hegyezd füled
+.PP
+\-ből
+.IP "" .5i
+Maqmhdfd
+.PP
+lesz.
+Feltehetőleg kevés cracker szótárában fog szerepelni ez a szó.
+Ennek ellenére a még nagyobb biztonság kedvéért érdemes valamilyen saját
+módszert kitalálnod jelszavak készítésére.
+
+.SS Megjegyzés a csoportok jelszavairól
+A csoportok jelszavai állandó biztonsági problémát jelenthetnek, mivel
+nemcsak egy ember ismerheti a jelszavat. A csoport\-kezelés azonban
+hasznos abban az esetben, ha több felhasználó együttműködését kell
+megoldani.
+
+.SH FIGYELMEZTETÉS
+Nem biztos, hogy minden kapcsoló felhasználható.
+Az, hogy hogyan vizsgálja a jelszavak bonyolultságát, rendszerről rendszerre
+változhat.
+Minden felhasználónak célszerű a lehető legbonyolultabb, de még használható
+jelszót használnia.
+Ha NIS\-t használ a felhasználók azonosítására a rendszer és a felhasználó nem
+lépett be a NIS kiszolgálóra, nem változtathatja meg jelszavát.
+.SH FÁJLOK
+\fI/etc/passwd\fR \- felhasználói információk
+.br
+\fI/etc/shadow\fR \- kódolt felhasználói jelszavak
+.SH LÁSD MÉG
+.BR group (5),
+.BR passwd (5),
+.BR shadow (5)
+.SH MAGYAR FORDÍTÁS
+Érdi "Cactus" Gergő <cactus@freemail.c3.hu>
diff --git a/man/hu/man1/sg.1 b/man/hu/man1/sg.1
new file mode 100644
index 0000000..d07c5e4
--- /dev/null
+++ b/man/hu/man1/sg.1
@@ -0,0 +1 @@
+.so man1/newgrp.1
diff --git a/man/hu/man1/su.1 b/man/hu/man1/su.1
new file mode 100644
index 0000000..3d6e9fc
--- /dev/null
+++ b/man/hu/man1/su.1
@@ -0,0 +1,185 @@
+.\" You may copy, distribute and modify under the terms of the LDP General
+.\" Public License as specified in the LICENSE file that comes with the
+.\" gnumaniak distribution
+.\"
+.\" The author kindly requests that no comments regarding the "better"
+.\" suitability or up\-to\-date notices of any info documentation alternative
+.\" is added without contacting him first.
+.\"
+.\" (C) 1999 Ragnar Hojland Espinosa <ragnar@macula.net>
+.\"
+.\" GNU su man page
+.\" man pages are NOT obsolete!
+.\" <ragnar@macula.net>
+.TH su 1 "18 August 1999" "GNU Shell Utilities 2.0"
+.SH NÉV
+su \- indít egy shellt más felhasználó\- és csoportazonosítóval
+.SH ÁTTEKINTÉS
+.B su
+.BI "[\-] [\-flmp] [\-c " parancs "] [\-s " shell "] [\-\-fast] [\-\-login]"
+.B [\-\-preserve\-environment]
+.BI "[\-\-command=" parancs "] [\-\-shell=" shell "]"
+.BI [ felhasználó " [" argumentum... ]]
+.sp
+.B su [\-\-help] [\-\-version]
+.SH LEÍRÁS
+Az
+.B su
+parancs lehetővé teszi, hogy ideiglenesen más felhasználóvá válhassunk
+úgy, hogy egy új shell\-t indít a kért
+.I felhasználó
+valós és effektív felhasználói azonosítójával, csoportazonosítójával és
+másodlagos csoportjaival. Ha nem adunk meg
+.IR felhasználó \-t,
+az alapértelmezett érték a root (super\-user). Az a shell indul el, ami a
+.I felhasználó
+passwd bejegyzésében szerepel, ha ott nincs
+semmi, akkor a /bin/sh. Ha a
+.IR felhasználó \-nak
+van jelszava, akkor az
+.B su
+meg fogja azt kérdezni, kivéve ha root\-ként (a felhasználói azonosító 0)
+futtatjuk.
+.PP
+Alapértelmezésben az
+.B su
+nem változtatja meg az aktuális könyvtárat. Átállítja a
+.B HOME
+és a
+.B SHELL
+környezeti változókat a
+.I felhasználó
+password bejegyzéséből kinézett értékekre, és ha a
+.I felhasználó
+nem a root (a super\-user) a
+.BR USER és LOGNAME
+változókat a
+.I felhasználó
+nevére állítja. Az alapértelmezés az, hogy az elinduló shell nem lesz
+bejelentkezési shell.
+.PP
+Ha megadunk
+.IR argumentum \-ként
+valamit, az is átadódik az induló shellnek.
+.PP
+Az
+.B su
+se a /bin/sh\-t, se más shell\-eket nem kezel speciálisan.
+(ilyen az argv[0] "\-su"\-ra állítása, vagy a \-c paraméter csak
+bizonyos shelleknek való átadása, stb.)
+.PP
+Azokon a rendszereken, ahol van
+.RB syslog (3) ,
+az
+.B su
+fordítható úgy is, hogy a sikertelen, vagy opcionálisan a
+sikeres próbálkozásokat is naplóztassa a sysloggal.
+.SH OPCIÓK
+.TP
+.BI "\-c " parancs ", \-\-command=" parancs
+Csak a
+.I parancs
+parancsot hajtatja végre a shell\-lel a
+.B \-c
+opció segítségével, így a shell nem interaktívan
+indul el.
+.TP
+.B "\-f, \-\-fast"
+Beállítja a
+.B \-f
+opciót az induló shellnél. Ennek talán csak a
+.BR csh (1)
+és a
+.BR tcsh (1),
+shelleknél van értelme ahol
+.B \-f
+opció megakadályozza, hogy a startup fájlt (.cshrc) a shell beolvassa.
+A Bourne\-hoz hasonló shelleknél a
+.B \-f
+opció letiltja a fájlnév minták kiterjesztését (filename pattern
+expansion), ami általában nem kívánatos dolog.
+.TP
+.B "\-, \-l, \-\-login"
+A shellt bejelentkezési shellként indítja. Ez a következőket jelenti:
+törli az összes környezeti változót, kivéve a
+.BR TERM "\-et, " HOME \-ot,
+és a
+.BR SHELL \-t
+(amiket a fent leírt módon állít át), és a
+.BR USER "\-t és " LOGNAME \-t
+(amiket szintén a fent leírt módon állít át
+a rootnak), továbbá a
+.BR PATH \-t,
+amit a fordításkor meghatározott
+alapértékre állít. Az aktuális könyvtárat a
+.I felhasználó
+home\-könyvtárára
+állítja. A shell neve elé egy
+.B \- \-t
+szúr be, így eléri azt, hogy
+az beolvassa a startup fájlját illetve fájljait.
+.TP
+.B "\-m, \-p, \-\-preserve\-environment"
+Nem állítja át a
+.BR HOME ", " USER ", " LOGNAME ", és " SHELL
+környezeti változókat. Azt a shellt indítja, ami a
+.B SHELL
+változóban van a passwd fájlban lévő helyett, de csak akkor, ha az
+.B su
+parancsot vagy a superuser futtatja, vagy nem egy korlátozott
+(restricted) shellt akar futtatni. Az a shell korlátozott, ami nem
+szerepel a /etc/shells fájlban, vagy
+az
+.B su
+belső listájában, ha ez a fájl nem létezik. Az opció hatásainak egy részét a
+.B \-\-login
+és a
+.B \-\-shell
+opciók hatástalanítják.
+.TP
+.BI "\-s, \-\-shell " shell
+A
+.IR shell "\-t indítja a " felhasználó
+/etc/passwd fájlban szereplő
+shellje helyett, ha parancsot vagy a superuser futtatja,
+vagy ha nem korlátozott shellt akar futtatni. (Korlátozott
+shell\-t lásd fentebb.)
+.TP
+.B "\-\-help"
+Használati útmutatót ír a standard kimenetre, majd sikeres visszatérési értékkel kilép.
+.TP
+.B "\-\-version"
+A program verziójáról ír ki információt a standard kimenetre, majd
+sikeres visszatérési értékkel kilép.
+.SH Miért nem támogatja a GNU su a wheel csoportot? (Richard Stallman)
+
+Néha a rendszer fölötti teljes ellenőrzést egy néhány emberből
+álló csoport akarja kézbe venni. Például 1984\-ben pár user a MIT AI
+laborban úgy döntött, hogy átveszik az irányítást a Twenex rendszer
+operátori jelszavának megváltoztatásával, és annak titokban tartásával.
+(A puccsot sikerült leverni, és a felhasználókat jogaikba visszahelyezni
+egy kernel patch segítségével, de Unix alatt ezt nem tudtam volna megcsinálni.)
+(A fordító megj.: a wheel csoportot ezzel a módszerrel könnyen
+önkényesen is leszűkíthetik a csoporttagok , így tulajdonképpen nincs sok értelme.)
+.PP
+Néha az uralmon levők elárulják a root jelszót. A szokásos su
+mechanizmus szerint, ha valaki megtudja a root jelszót, és
+szimpatizál a többi közönséges felhasználóval, elárulhatja nekik
+is. A wheel csoport ezt lehetetlenné tenné, és így bebetonozná az
+uralmon levő hatalmát.
+.PP
+Én a tömegek oldalán állok, nem az uralkodókén. Ha te mindig a
+főnökök és a rendszergazdák oldalán állsz, bármit is tesznek, akkor
+valószínűleg furcsálni fogod ezt a hozzáállást.
+.PP
+A fordító megjegyzése:
+Valami jó azért mégis lenne a wheel csoportban: az, hogy ha a root
+jelszó kitudódna azzal nem tudna bármelyik felhasználó közvetlenül
+visszaélni. A wheel csoporthoz hasonló dolgot lehet elérni a
+.B sudo
+csomaggal.
+.SH MEGJEGYZÉS
+A hibákat a bug\-sh\-utils@gnu.org címen lehet jelenteni.
+Az oldalt Ragnar Hojland Espinosa <ragnar@macula.net> frissítette.
+.SH MAGYAR FORDÍTÁS
+Havasi Ferenc <hafy@prins.externet.hu> és Tímár András <timar_a@freemail.hu>
diff --git a/man/hu/man5/passwd.5 b/man/hu/man5/passwd.5
new file mode 100644
index 0000000..0ef231a
--- /dev/null
+++ b/man/hu/man5/passwd.5
@@ -0,0 +1,99 @@
+.\" Copyright (c) 1993 Michael Haardt (u31b3hs@pool.informatik.rwth-aachen.de), Fri Apr 2 11:32:09 MET DST 1993
+.\"
+.\" This is free documentation; you can redistribute it and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation; either version 2 of
+.\" the License, or (at your option) any later version.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual is distributed in the hope that it will be useful,
+.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.\" GNU General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public
+.\" License along with this manual; if not, write to the Free
+.\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
+.\" USA.
+.\"
+.\" Modified Sun Jul 25 10:46:28 1993 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Aug 21 18:12:27 1994 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Jun 18 01:53:57 1995 by Andries Brouwer (aeb@cwi.nl)
+.TH PASSWD 5 "24 July 1993" "Linux" "Linux Programozói Kézikönyv"
+.SH NÉV
+passwd \- Jelszófájl
+.SH LEÍRÁS
+A
+.B Passwd
+egy, a felhasználók listáját és a belépésükhöz szükséges jelszavakat
+tartalmazó ASCII file. Mindenkinek tudnia kell olvasni (sok segédprogram,
+pl. a
+.BR ls (1)
+ezt használja hogy a felhasználói azonosítókhoz (UID-khez) neveket
+rendeljen), de írási jogot csak a rendszergazdának szabad kapnia.
+.PP
+A régi szép időkben nem is volt ezzel semmi baj: mindenki olvashatta a
+felhasználók kódolt jelszavait, de mivel az akkori hardware-körülmények nem
+tették lehetővé a jól megválasztott jelszavak törését, és a felasználók
+alapvetően jóindulatűak voltak, ez nem okozott problémát.
+Manapság mindenki igyekszik shadow-zott jelszavakat használni, amikor is a
+.I /etc/passwd
+file-ban a jelszavak helyett csak egy * karakter áll, és az igazi jelszavak
+a
+.I /etc/shadow
+file-ban találhatóak, amit csak a rendszergazda olvashat.
+.PP
+Amikor új felhasználót készítesz, célszerű a jelszó helyét
+üresen hagyni, és a \fBpasswd\fP(1) programmal kitölteni. Egy * karakter a
+jelszó helyén azt jelenti, hogy a \fBlogin\fP(1) szoltáltatáson keresztül
+a felhasználó nem tud belépni.
+.PP
+Soronként egy bejegyzés található, a következő formában:
+.sp
+.RS
+usernév:jelszó:UID:GID:valódi név:home mappa:shell
+.RE
+.sp
+, ahol a mezők jelentése:
+.sp
+.RS
+.TP 1.0in
+.I usernév
+a felhasználó belépési neve a rendszerben.
+.TP
+.I jelszó
+a felhasználó kódolt jelszava.
+.TP
+.I UID
+A felhasználó azonosítószáma.
+.TP
+.I GID
+A felhasználó csoportjának azonosítószáma.
+.TP
+.I valódi név
+egy opcionális mező megjegyzések tárolására (gyakran a felhasználó teljes neve)
+.TP
+.I home mappa
+a felhasználó $HOME mappája.
+.TP
+.I shell
+a belépéskor elindítandó program (ha nincs megadva, a
+.IR /bin/sh -t használja).
+.RE
+.SH MEGJEGYZÉS
+Ha a root fájlrendszered a
+.IR /dev/ram
+-on van, a rendszer leállítása előtt rögzítened kell a megváltozott jelszófile-t a root fájlrendszer floppylemezén. Ha csoportokat is kezelni akarsz, meg kell egyezniük a GID-jüknek és be kell jegyezni őket a \fI/etc/group\fP-ba.
+.SH FÁJLOK
+.I /etc/passwd
+.SH LÁSD MÉG
+.BR passwd (1),
+.BR login (1),
+.BR group (5),
+.BR shadow (5)
+.SH MAGYAR FORDÍTÁS
+Horváth András <horvatha@rs1.szif.hu>
diff --git a/man/hu/man8/lastlog.8 b/man/hu/man8/lastlog.8
new file mode 100644
index 0000000..a7058c5
--- /dev/null
+++ b/man/hu/man8/lastlog.8
@@ -0,0 +1,68 @@
+.\" Copyright 1992, Phillip Street and Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" @(#)lastlog.8 3.3 08:24:58 29 Sep 1993 (National Guard Release)
+.\" $Id$
+.\"
+.TH LASTLOG 8
+.SH NÉV
+lastlog \- a lastlog fájl vizsgálata
+.SH ÁTTEKINTÉS
+.B lastlog
+.RB [ -u
+.IR uid ]
+.RB [ -t
+.IR napok száma ]
+.SH LEÍRÁS
+
+A \fBlastlog\fR formázza és olvashatóan megjeleníti a
+\fB/var/log/lastlog\fR tartalmát. A listában szerepel a \fBlogin-név\fR, a
+\fBterminál (port) azonosítója\fR és a felhasználó \fBlegutolsó
+belépésének ideje\fR. Paraméterek nélkül meghívva a
+felhasználó-azonosítók (UID) alapján sorbarendezve jelennek meg az
+értékek. A \fB-u \fIlogin-név\fR opció megadása esetén csak a megadott
+felhasználó utolsó belépésének ideje jelenik meg. A \fB-t \fInapok
+száma\fR opció megadásával csak a megadott számú napon belüli belépési
+idők jelennek meg. A \fB-r\fR opció felülírja a \fB-u\fR opciót.
+.PP
+Ha a felhasználó még soha nem lépett be, akkor a terminál és az idő
+helyett a \fB**Never logged in**\fR felirat jelenik meg.
+.SH FÁJLOK
+/var/log/lastlog \- a felhasználók legutóbbi belépéseit tartalmazza
+.SH MEGJEGYZÉS
+Ha a felhasználói azonosító számok (UID-k) között nagyobb üres tartományok
+vannak, akkor a lastlog futásakor megtörténhet, hogy hosszabb ideig
+nem jelenik meg semmi a képernyőn (pl ha a 170-es és a 800-as azonosítójú
+felhasználók között nincs több azonosító, akkor a 171 és 799 közötti
+számok kiértékelése alatt a képernyőn nem változik semmi).
+.SH SZERZŐK
+Julianne Frances Haugh (jfh@tab.com)
+.br
+Phillip Street
+.SH MAGYAR FORDÍTÁS
+Hermann Benedek (bence@intercom.hu)
+
diff --git a/man/id.1.xml b/man/id.1.xml
new file mode 100644
index 0000000..e947e19
--- /dev/null
+++ b/man/id.1.xml
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1991 , Julianne Frances Haugh
+ Copyright (c) 2007 - 2008, 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='id.1'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1991</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>id</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>id</refname>
+ <refpurpose>display current user and group ID names</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>id</command> <arg choice='opt'>-a </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The <command>id</command> command displays the current real and
+ effective user and group ID names or values. If the value does not
+ have a corresponding entry in <filename>/etc/passwd</filename> or
+ <filename>/etc/group</filename>, the value will be displayed without
+ the corresponding name. The optional <option>-a</option> flag will
+ display the group set on systems which support multiple concurrent
+ group membership.
+ </para>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/group</filename></term>
+ <listitem>
+ <para>Group account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/passwd</filename></term>
+ <listitem>
+ <para>User account information.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>getgid</refentrytitle><manvolnum>2</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>getgroups</refentrytitle><manvolnum>2</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>getuid</refentrytitle><manvolnum>2</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/id/Makefile.am b/man/id/Makefile.am
new file mode 100644
index 0000000..21f3dbe
--- /dev/null
+++ b/man/id/Makefile.am
@@ -0,0 +1,9 @@
+
+mandir = @mandir@/id
+
+man_MANS = \
+ man1/chsh.1 \
+ man1/login.1 \
+ man8/useradd.8
+
+EXTRA_DIST = $(man_MANS)
diff --git a/man/id/Makefile.in b/man/id/Makefile.in
new file mode 100644
index 0000000..ebf4a79
--- /dev/null
+++ b/man/id/Makefile.in
@@ -0,0 +1,605 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = man/id
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man8dir)"
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@/id
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = \
+ man1/chsh.1 \
+ man1/login.1 \
+ man8/useradd.8
+
+EXTRA_DIST = $(man_MANS)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/id/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign man/id/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+install-man8: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man8dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.8[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man8:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man8dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.8[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man8dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1 install-man8
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-man8 install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+ uninstall-am uninstall-man uninstall-man1 uninstall-man8
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/id/man1/chsh.1 b/man/id/man1/chsh.1
new file mode 100644
index 0000000..e13a49d
--- /dev/null
+++ b/man/id/man1/chsh.1
@@ -0,0 +1,53 @@
+.\"
+.\" chsh.1 \-\- change your login shell
+.\" (c) 1994 by salvatore valente <svalente@athena.mit.edu>
+.\"
+.\" this program is free software. you can redistribute it and
+.\" modify it under the terms of the gnu general public license.
+.\" there is no warranty.
+.\"
+.\" $Author: kloczek $
+.\" $Revision: 1.4 $
+.\" $Date: 2005/08/29 13:59:29 $
+.\"
+.TH CHSH 1 "October 13 1994" "chsh" "Linux Reference Manual"
+.SH NAMA
+chsh \- merubah shell login
+.SH RINGKASAN
+.B chsh
+[\ \-s\ shell\ ] [\ \-l\ ] [\ \-u\ ] [\ \-v\ ] [\ username\ ]
+.SH PENJELASAN
+.B chsh
+digunakan untuk merubah shell login Anda.
+Bila shell tidak diberikan pada baris perintah maka
+.B chsh
+menampilkan prompt untuk memasukkan shell.
+.SS SHELL\-SHELL YANG BENAR
+.B chsh
+akan menerima pathname lengkap dari file executable pada sistem.
+Walau demikian, akan menampilkan peringatan bila shell tidak terdapat
+dalam file
+.I /etc/shells .
+.SH OPTION
+.TP
+.I "\-l, \-\-list\-shells"
+Menampilkan daftar shell yang ada dalam
+.I /etc/shells
+dan keluar atau exit.
+.TP
+.I "\-s, \-\-shell"
+Menentukan shell login Anda.
+.TP
+.I "\-u, \-\-help"
+Menampilkan cara penggunaan program.
+.TP
+.I "\-v, \-\-version"
+Menampilkan informasi versi program.
+.SH "LIHAT JUGA"
+.BR login (1),
+.BR passwd (5),
+.BR shells (5)
+.SH PEMBUAT
+Salvatore Valente <svalente@mit.edu>
+.SH PENTERJEMAH
+Rizqy Syarief <rizqy@rad.net.id>
diff --git a/man/id/man1/login.1 b/man/id/man1/login.1
new file mode 100644
index 0000000..970fc72
--- /dev/null
+++ b/man/id/man1/login.1
@@ -0,0 +1,311 @@
+.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
+.\" May be distributed under the GNU General Public License
+.TH LOGIN 1 "4 November 1996" "Util\-linux 1.6" "Linux Programmer's Manual"
+.SH NAME
+login \- masuk ke system
+.SH SYNOPSIS
+.BR "login [ " name " ]"
+.br
+.B "login \-p"
+.br
+.BR "login \-h " hostname
+.br
+.BR "login \-f " name
+.SH PENJELASAN
+.B login
+digunakan ketika hendak masuk ke sebuah system. Ia juga dapat digunakan
+untuk berpindah dari satu user ke user lainnya kapan saja (shell\-shell yang
+modern mendukung kemampuan ini).
+Jika tidak diikuti oleh sebuah argumen
+.B login
+system akan menanyakan nama user/username.
+
+Jika user tersebut
+.I bukan
+root, dan jika terdapat file
+.I /etc/nologin
+isi file tersebut akan tercetak di layar, kemudian login dihentikan.
+Biasanya ini dilakukan untuk mencegah login ketika system sedang dimatikan.
+
+Jika terdapat pembatasan akses tertentu pada user sebagaimana terdapat di
+.IR /etc/usertty ,
+hal tersebut harus dipenuhi, atau login akan ditolak dan pesan
+.B syslog
+akan dibuat. Lihat section pada "Special Access Restrictions".
+
+Jika user adalah root, maka login harus dijalankan pada tty yang terdapat
+di
+.IR /etc/securetty .
+Kegagalan akan dicatat pada log melalui fasilitas
+.B syslog .
+
+Setelah kondisi\-kondisi tersebut dicek, anda akan dimintai password untuk
+kemudian dicek (jika ada password untuk username tersebut). Anda dapat
+mencoba sepuluh kali sebelum
+.B login
+dimatikan, tapi setelah kegagalan yang ketiga, respon yang diberikan
+akan sangat lamban. Kegagalan login akan dilaporkan melalui fasilitas
+.B syslog .
+Fasilitas ini juga dapat digunakan untuk melaporkan login yang berhasil.
+
+Jika file
+.I .hushlogin
+ditemukan, maka login secara "quiet" dilaksanakan (hal ini menonaktifkan
+pengecekan mail dan tidak menampilkan waktu login terakhir dan pesan
+yang ada untuk hari itu). Namun, jika terdapat file
+.I /var/log/lastlog
+, waktu login terakhir akan ditampilkan (dan kegiatan login yang sekarang
+akan dicatat).
+
+Kegiatan administratif secara acak, seperti mengeset UID dan GID untuk tty
+akan dilakukan. Variabel environment TERM dibuatkan, jika ia sudah ada
+(variabel environment lain akan dibuatkan jika option
+.B \-p
+digunakan). Kemudian variable environment HOME, PATH, SHELL, TERM, MAIL
+dan LOGNAME ditetapkan. Default PATH merujuk ke
+.I /usr/local/bin:/bin:/usr/bin:.
+untuk user biasa, dan ke
+.I /sbin:/bin:/usr/sbin:/usr/bin
+untuk root. Terakhir, jika login yang sedang dilakukan bukan login "quiet",
+pesan hari ini akan ditampilkan dan file dengan nama yang sama dengan user
+pada
+.I /usr/spool/mail
+akan diperiksa, dan sebuah pesan ditampilkan jika besar file tersebut tidak
+nol.
+
+Kemudian, shell untuk user berjalan. Jika shell untuk user tidak ditentukan
+pada
+.BR /etc/passwd ,
+maka akan digunakan
+.BR /bin/sh .
+Jika directory tidak ditentukan pada
+.IR /etc/passwd ,
+maka
+.I /
+digunakan (home directiry diperiksa pada file
+.I .hushlogin
+seperti dijelaskan sebelumnya).
+.SH OPTION
+.TP
+.B \-f
+Used to skip a second login authentication. This specifically does
+Digunakan untuk melewatkan pengecekan tahap kedua ketika login. Biasanya
+.B tidak
+berjalan untuk, dan kelihatannya tidak dapat berjalan dengan baik pada Linux.
+.TP
+.B \-h
+Digunakan oleh server lain (misalnya
+.BR telnetd (8))
+to pass the name of the remote host to
+untuk melewatkan nama remote host ketika
+.B login
+sehingga dapat ditempatkan pada utmp dan wtmp. HAnya superuser yang dapat
+menggunakan option ini.
+.TP
+.B \-p
+digunakan oleh
+.BR getty (8)
+untuk memberi tahu bahwa
+.B login
+tidak mengubah environment
+
+.SH "PEMBATASAN AKSES TERTENTU/SPECIAL ACCESS RESTRICTIONS"
+File
+.I /etc/securetty
+mencatat nama\-nama tty dimana root boleh login. Nama device tty yang tidak
+berawalan /dev/ harus ditentukan pada setiap barisnya. Jika file tersebut
+tidak ditemukan, root boleh login di tty mana saja.
+
+.PP
+File
+.I /etc/usertty
+Menentukan tambahan batasan akses tertentu untuk user tertentu. Jika
+file ini tidak ditemukan, tak ada tambahan batasan akses yang diterapkan.
+File ini terdiri dari beberapa bagian. Ada tiga bagian yang mungkin
+ada : CLASSES, GROUPS dan USERS. Bagian CLASSES mendefinisikan kelas tty
+dan pola nama host, bagian GROUPS mendefinisikan tty dan nama host yang
+diperbolehkan berdasarkan per group, dan bagian USERS mendefinisikan tty
+dan host yang diperbolehkan berdasarkan per user.
+
+.PP
+Panjang setiap baris pada file ini tidak boleh lebih dari 255 karakter.
+Komentar diawali oleh karakter # yang berlaku hingga akhir baris.
+
+.PP
+.SS "Bagian CLASSES"
+Bagian CLASSES dimulai dengan kata CLASSES pada baris awal dalam
+huruf besar semua. Setiap baris berikutnya hingga permulaan bagian baru
+atau akhir file terdiri dari urutan kata\-kata yang dipisahkan oleh tab
+atau spasi. Tiap baris mendefinisikan kelas tty dan pola host.
+
+.PP
+Kata yang terdapat pada awal baris dijadikan sebuah definisi untuk
+sekumpulan nama untuk tty dan pola host yang ditentukan pada akhir baris.
+Kumpulan nama ini dapat digunakan untuk bagian GROUPS berikutnya atau
+bagian USERS. Nama kelas tidak boleh didefinisikan sebagai bagian
+dari sebuah kelas untuk menghindari masalah kelas rekursif.
+
+.PP
+Contoh bagian CLASSES:
+.PP
+.nf
+.in +.5
+CLASSES
+myclass1 tty1 tty2
+myclass2 tty3 @.foo.com
+.in -.5
+.fi
+.PP
+File di atas mendefinisikan
+.I myclass1
+dan
+.I myclass2
+sebagai sebelah kanan yang saling berhubungan.
+.PP
+
+.SS "Bagian GROUPS"
+Bagian GROUPS mendefinisikan tty dan host yang diperbolehkan berdasarkan
+per group UNIX. Jika seorang user adalah anggota sebuah group menurut
+.I /etc/passwd
+dan
+.I /etc/group
+dan jika sebuah group disebutkan pada bagian GROUPS di
+.I /etc/usertty
+maka user diberikan akses jika memang itu group\-nya.
+.PP
+Bagian GROUPS diawali oleh kata GROUPS dalam huruf besar semua pada permulaan
+baris dan tiap baris selanjutnya merupakan urutan kata\-kata yang dipisahkan
+oleh spasi atau tab. Kata pertama pada sebuah baris adalah nama group dan
+sisanya menentukan tty dan host dimana anggota group tersebut boleh
+mendapatkan akses. Ketentuan ini dapat mengikutsertakan kelas yang telah
+didefinisikan pada bagian CLASSES sebelumnya.
+
+.PP
+Contoh bagian GROUPS
+.PP
+.nf
+.in +0.5
+GROUPS
+sys tty1 @.bar.edu
+stud myclass1 tty4
+.in -0.5
+.fi
+.PP
+Contoh ini menentukan bahwa anggota group
+.I sys
+boleh log in pada tty1 dan dari host\-host yang terdapat pada domain
+bar.edu. User yang terdapat pada group
+.I stud
+boleh log in dari host\-host/tty\-tty yang ditentukan pada kelas myclass1
+atau dari tty4
+.PP
+
+.SS "Bagian USERS"
+Bagian USERS dimulai dengan kata USERS dalam huruf besar semua pada awal
+baris, dan tiap baris berikutnya adalah urutan kata\-kata yang dipisahkan
+oleh tab atau spasi. Kata pertama pada sebuah baris adalah username
+dan sisanya merupakan definisi tentang tty dan host tempat user boleh
+log in. Ketentuan ini dapat melibatkan kelas yang didefinisikan pada
+bagian CLASSES sebelumnya dan. Jika tak ada header bagian yang tercantum
+pada awal file, bagian pertama secara defaults adalah bagian USERS.
+
+.PP
+Contoh penggunaan bagian USERS:
+.PP
+.nf
+.in +0.5
+USERS
+zacho tty1 @130.225.16.0/255.255.255.0
+blue tty3 myclass2
+.in -0.5
+.fi
+.PP
+KEtentuan ini mengizinkan zacho hanya boleh login pada tty1 dan dari
+host\-host yang alamat IP\-nya terletak di kisaran 130.225.16.0 \-
+130.225.16.255, dan user bernama blue boleh log in dari tty3 dan apa
+saja yang disebutkan pada kelas myclass2.
+.PP
+Mungkin terdapat sebuah baris pada bagian USERS yang dimulai dengan
+sebuah username bernama *. Ini adalah aturan default dan ia akan
+diterapkan pada user yang tidak tercantum pada baris\-baris definisi.
+.PP
+Jika user ditemukan pada baris USERS dan GROUPS maka user tersebut boleh
+mengakses dari gabungan tty/host yang disebutkan pada ketentuan tersebut.
+
+.SS Origins
+Ketentuan mengenai tty dan pola host yang digunakan sebagai ketentuan
+pada kelas, group dan user disebut origin. Sebuah origin bisa memiliki
+format berikut:
+.IP o
+Nama sebuah device tty tanpa awalan /dev/, contohnya tty1 atau ttyS0.
+.PP
+.IP o
+String @localhost, artinya user boleh melakukan telnet/rlogin
+dari local host ke host yang sama. Ini juga membolehkan user untuk
+menjalankan perintah: xterm \-e /bin/login.
+.PP
+.IP o
+Sebuah akhiran nama domain seperti @.some.dom, artinya user boleh
+melakukan rlogin/telnet dari host mana saja yang nama domainnya berakhiran
+@.some.dom
+.PP
+.IP o
+Kisaran alamat IPv4, ditulis @x.x.x.x/y.y.y.y dimana x.x.x.x adalah
+alamat IP pada notasi desimal biasa dan y.y.y.y adalah bitmask dalam
+notasi yang sama yang menentukan bit mana pada alamat tersebut untuk
+dibandingkan dengan alamat IP dari remote host. Contohnya @130.225.16.0/
+255.255.254.0 berarti user boleh rlogin/telnet dari host mana saja yang
+alamat IP\-nya berada pada kisaran 130.225.16.0 \- 130.225.17.255.
+.PP
+Origin di atas boleh diawali oleh penentuan waktu menurut syntax:
+.PP
+.nf
+timespec ::= '[' <day\-or\-hour> [':' <day\-or\-hour>]* ']'
+day ::= 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat' | 'sun'
+hour ::= '0' | '1' | ... | '23'
+hourspec ::= <hour> | <hour> '\-' <hour>
+day\-or\-hour ::= <day> | <hourspec>
+.fi
+.PP
+Contohnya, origin [mon:tue:wed:thu:fri:8\-17]tty3 berarti log in
+diperbolehkan pada hari senin hingga jumat pukul 8:00 dan 17:59 (5:59
+pm) pada tty3. Ini juga menunjukkan bahwa kisaran jam (seperti 10)
+menandakan waktu berkisar antara 10:00 dan 10:59.
+.PP
+Jika tidak menentukan waktu untuk tty atau nama host berarti lo gin
+dari origin tersebut diperbolehkan untuk setiap waktu. Jika anda
+memberikan awalan waktu, yakinkan untuk menentukan baik kumpulan hari
+dan waktu yang agak dilebihkan. Penentuan waktu tidak boleh berisi
+spasi.
+.PP
+Jika tidak ada aturan diberikan maka user yang tidak ditemukan pada
+.I /etc/usertty
+boleh log in dari mana saja.
+.PP
+.SH FILES
+.nf
+.I /var/run/utmp
+.I /var/log/wtmp
+.I /var/log/lastlog
+.I /usr/spool/mail/*
+.I /etc/motd
+.I /etc/passwd
+.I /etc/nologin
+.I /etc/usertty
+.I .hushlogin
+.fi
+.SH "SEE ALSO"
+.BR init (8),
+.BR getty (8),
+.BR mail (1),
+.BR passwd (1),
+.BR passwd (5),
+.BR environ (7),
+.BR shutdown (8)
+.SH BUGS
+
+Linux, tidak seperti sistem operasi draconian, tidak mengecek quota.
+
+Option tidak resmi pada BSD
+.B \-r
+tidak dapat digunakan. Ini mungkin dibutuhkan oleh program
diff --git a/man/id/man8/useradd.8 b/man/id/man8/useradd.8
new file mode 100644
index 0000000..2d6730c
--- /dev/null
+++ b/man/id/man8/useradd.8
@@ -0,0 +1,214 @@
+.\" Copyright 1991 \- 1994, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Pendistribusian dan penggunaan dalam bentuk source dan binary, dengan
+.\" atau tanpa modifikasi, diperbolehkan asal syarat\-syarat ini dipenuhi :
+.\" 1. Pendistribusian source code harus mempertahankan tulisan copyright
+.\" di atas, persyaratan ini, dan disclaimer berikut.
+.\" 2. Pendistribusian dalam bentuk binary harus menampilkan copyright di atas,
+.\" persyaratan ini, dan disclaimer yang tercantum pada dokumentasi dan/
+.\" atau keterangan lainnya yang terdapat pada distribusi ini.
+.\" 3. Nama Julianne F. Haugh atau nama\-nama kontributor lainnya tidak boleh
+.\" digunakan sebagai jaminan atau untuk mempromosikan produk yang berasal
+.\" dari software ini tanpa izin khusus tertulis.
+.\"
+.\" SOFTWARE INI DISEDIAKAN OLEH JULIE HAUGH DAN PARA KONTRIBUTOR DALAM BENTUK
+.\" "APA ADANYA" DAN SEGALA PERNYATAAN ATAU JAMINAN, TERMASUK, TAPI TIDAK
+.\" TERBATAS PADA, JAMINAN DALAM PENJUALAN DAN PENYESUAIAN UNTUK MAKSUD
+.\" TERTENTU DILUAR TANGGUNG JAWABNYA. JULIE HAUGH DAN PARA KONTRIBUTOR TIDAK
+.\" BERTANGGUNG JAWAB PADA KERUSAKAN SECARA LANGSUNG, TIDAK LANGSUNG, KEBETULAN,
+.\" TERTENTU, SESUAI CONTOH ATAU KERUSAKAN BERUNTUN (TERMASUK, TAPI TIDAK
+.\" TERBATAS PADA MENDAPATKAN PRODUK DENGAN CARA PERTUKARAN ATAU JASA;
+.\" KEHILANGAN DATA, ATAU PROFIT; ATAU TERHENTINYA BISNIS) YANG MENGAKIBATKAN
+.\" DAN SECARA TEORI BERTANGGUNG JAWAB, MESKIPUN DALAM PERJANJIAN, BERTANGGUNG
+.\" JAWAB PENUH, ATAU TORT (TERMASUK KECEROBOHAN ATAU SEBALIKNYA) YANG TIMBUL
+.\" KARENA KESALAHAN DALAM MENGGUNAKAN SOFTWARE INI, BAHKAN JIKA TELAH
+.\" DIPERINGATKAN SEBELUMNYA TENTANG KEMUNGKINAN AKAN KERUSAKAN TERSEBUT.
+.\"
+.\" $Id$
+.\"
+.TH USERADD 8
+.SH NAME
+useradd \- Membuat user baru atau memperbarui informasi tentang user baru
+.SH SYNOPSIS
+.TP 8
+.B useradd
+.\" .RB [ \-A
+.\" .RI { method | \fBDEFAULT\fR "},... ]"
+.RB [ \-c
+.IR comment ]
+.RB [ \-d
+.IR home_dir ]
+.br
+.RB [ \-e
+.IR expire_date ]
+.RB [ \-f
+.IR inactive_time ]
+.br
+.RB [ \-g
+.IR initial_group ]
+.RB [ \-G
+.IR group [,...]]
+.br
+.RB [ \-m " [" \-k
+.IR skeleton_dir ] " |" " " \-M ]
+.RB [ \-s
+.IR shell ]
+.br
+.RB [ \-u
+.IR uid " ["
+.BR \-o ]]
+.RB [ \-n ]
+.RB [ \-r ]
+.I login
+.TP 8
+.B useradd
+\fB\-D\fR
+[\fB\-g\fI default_group\fR]
+[\fB\-b\fI default_home\fR]
+.br
+[\fB\-f\fI default_inactive\fR]
+[\fB\-e\fI default_expire_date\fR]
+.br
+[\fB\-s\fI default_shell\fR]
+.SH PENJELASAN
+.SS Membuat User Baru
+Jika digunakan tanpa option \fB\-D\fR, perintah \fBuseradd\fR menciptakan
+sebuah user account baru dengan menggunakan nilai yang terdapat pada
+baris perintah dan nilai default dari system.
+User account yang baru tersebut akan dimasukkan ke system files seperlunya,
+home directory akan dibuatkan, dan initial files di\-copy\-kan, tergantung
+option yang terdapat pada baris perintah.
+Versi yang terdapat pada Red Hat Linux akan membuat sebuah group untuk
+setiap user yang didaftarkan pada system, jika \fB\-b\fR tidak diberikan.
+Option yang dapat digunakan pada perintah \fBuseradd\fR adalah
+.\" .IP "\fB\-A {\fImethod\fR|\fBDEFAULT\fR},..."
+.\" Nilai milik user dalam metode autentikasi/pengecekan.
+.\" Metode autentikasi/pengecekan adalah nama sebuah program yang bertanggung
+.\" jawab untuk memeriksa identitas user.
+.\" String \fBDEFAULT\fR dapat digunakan untuk mengubah metode autentikasi
+.\" menjadi metode password system yang standar.
+.\" Daftar tersebut berisi nama\-nama program, yang dipisahkan oleh koma.
+.\" \fBDEFAULT\fR hanya dapat dicantumkan sekali saja.
+.\"
+.\"
+.\"
+.IP "\fB\-c \fIcomment\fR"
+Komentar pada file password milik user baru.
+.IP "\fB\-d \fIhome_dir\fR"
+User baru akan diciptakan dengan \fIhome_dir\fR sebagai lokasi directory
+login\-nya.
+Default\-nya adalah menambahkan nama \fIlogin\fR pada \fIdefault_home\fR
+dan menggunakannya sebagai nama directory login.
+.IP "\fB\-e \fIexpire_date\fR"
+Tanggal ketika user account dimatikan.
+Tanggal ditulis dalam format \fIMM/DD/YY\fR.
+.IP "\fB\-f \fIinactive_days\fR"
+Jumlah hari setelah sebuah password kadaluarsa hingga account
+tersebut dimatikan secara permanen.
+Nilai 0 mematikan account segera setelah password kadaluarsa,
+dan nilai \-1 mematikan fungsi ini.
+Nilai default\-nya adalah \-1.
+.IP "\fB\-g \fIinitial_group\fR"
+Nama group atau angka initial login group.
+Nama group harus sudah ada. Seorang anggota group harus merujuk
+pada group yang sudah ada.
+Nilai group default\-nya adalah 1.
+.IP "\fB\-G \fIgroup,[...]\fR"
+Daftar group tambahan yang juga merupakan group\-nya user.
+Setiap group dipisahkan oleh koma, tanpa diikuti spasi.
+Group juga mengikuti aturan yang diberikan dengan option \fB\-g\fR.
+Default\-nya hanyalah untuk user yang terdaftar pada group awal.
+.IP \fB\-m\fR
+Home directory milik user akan dibuatkan jika belum ada.
+File yang terdapat pada \fIskeleton_dir\fR atau \fI/etc/skel\fR
+akan dibuatkan pada home directory milik user.
+Option \fB\-k\fR hanya valid jika bertemu option \fB\-m\fR.
+Dafault\-nya adalah tidak membuat directory dan tidak meng\-copy
+segala file.
+.IP \fB\-M\fR
+Home directory milik user tidak akan dibuatkan, bahkan jika setting
+system pada \fI/etc/login.defs\fR ditujukan untuk membuat home
+directory.
+.IP \fB\-n\fR
+Sebuah group yang namanya sama dengan user akan ditambahkan ke dalam
+system secara default. Option ini akan mematikan kebiasaan tersebut
+yang terdapat pada Red Hat Linux.
+.IP \fB\-r\fR
+Flag ini digunakan untuk membuat sebuah system account. Yaitu, user
+dengan UID yang lebih kecil dari UID_MIN yang tercantum pada
+\fI/etc/login.defs\fR. Harap diingat bahwa \fBuseradd\fR tidak akan
+membuat home directory untuk user semacam ini, menghiraukan setting
+default yang terdapat di \fI/etc/login.defs\fR.
+Anda harus menyebutkan option \fB\-m\fR jika ingin membuat home directory
+untuk sebuah system account yang akan dibuat.
+Ini adalah option yang ditambahkan oleh Red Hat.
+.IP "\fB\-s \fIshell\fR"
+Nama login shell milik user.
+Default\-nya adalah membiarkan field ini kosong, yang menyebabkan
+system untuk memilih login shell yang default.
+.IP "\fB\-u \fIuid\fR"
+Nilai user ID secara numerik.
+Nilai ini harus unique, kecuali jika option \fI\-o\fR digunakan.
+Nilai tersebut tidak boleh negatif.
+Default\-nya adalah menggunakan nilai ID yang lebih besar dari 999
+dan lebih besar dari semua user lain.
+Nilai di antara 0 dan 999 biasanya disiapkan untuk system aacount.
+.SS Mengubah nilai\-nilai default.
+Ketika digunakan dengan option \fB\-D\fR, \fBuseradd\fR akan
+menampilkan nilai default, atau memperbarui nilai default baru
+yang terdapat pada baris perintah.
+Option yang dapat digunakan adalah
+.IP "\fB\-b \fIdefault_home\fR"
+Awalan path untuk home directory milik user baru.
+Nama user akan ditambahkan setelah akhir \fIdefault_home\fR
+ketika membuat nama directory baru jika option \fB\-d\fI tidak
+disebutkan dalam membuat account baru.
+.IP "\fB\-e \fIdefault_expire_date\fR"
+Tanggal ketika user account dimatikan.
+.IP "\fB\-f \fIdefault_inactive\fR"
+Jumlah hari setelah password kadaluarsa sebelum account
+dimatikan.
+.IP "\fB\-g \fIdefault_group\fR"
+Nama group atau ID sebagai group awal user baru.
+Nama group yang disebut harus sudah ada dan nomor group ID
+harus mempunyai entry.
+.IP "\fB\-s \fIdefault_shell\fR"
+Nama untuk login shell milik user baru.
+Nama program yang disebutkan akan digunakan untuk semua user
+account baru mendatang.
+.PP
+Jika tidak ada option yang disebutkan, \fBuseradd\fR menampilkan
+nilai default yang ada saat ini.
+.SH NOTES
+The system administrator is responsible for placing the default
+user files in the \fI/etc/skel\fR directory.
+.br
+Versi useradd ini dimodifikasi oleh Red Hat agar cocok dengan
+ketentuan mengenai user/group.
+.SH CAVEATS
+Anda tidak dapat menambahkan user pada grou NIS.
+Ini harus dilakukan pada server NIS.
+.SH FILES
+\fB/etc/passwd\fR \- informasi tentang user account
+.br
+\fB/etc/shadow\fR \- informasi user account yang terlindung
+.br
+\fB/etc/group\fR \- informasi tentang group
+.br
+\fB/etc/default/useradd\fR \- informasi tentang nilai default
+.br
+\fB/etc/login.defs\fR \- system\-wide settings
+.br
+\fB/etc/skel\fR \- directory yang mengandung default files
+.SH LIHAT JUGA
+.BR chfn (1),
+.BR chsh (1),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR passwd (1),
+.BR userdel (8),
+.BR usermod (8)
+.SH AUTHOR
+Julianne Frances Haugh (jfh@tab.com)
diff --git a/man/it/Makefile.am b/man/it/Makefile.am
new file mode 100644
index 0000000..94460aa
--- /dev/null
+++ b/man/it/Makefile.am
@@ -0,0 +1,66 @@
+
+mandir = @mandir@/it
+
+man_MANS = \
+ man1/chage.1 \
+ man1/chfn.1 \
+ man8/chgpasswd.8 \
+ man8/chpasswd.8 \
+ man1/chsh.1 \
+ man1/expiry.1 \
+ man5/faillog.5 \
+ man8/faillog.8 \
+ man3/getspnam.3 \
+ man1/gpasswd.1 \
+ man8/groupadd.8 \
+ man8/groupdel.8 \
+ man8/groupmems.8 \
+ man8/groupmod.8 \
+ man1/groups.1 \
+ man8/grpck.8 \
+ man8/grpconv.8 \
+ man8/grpunconv.8 \
+ man5/gshadow.5 \
+ man8/lastlog.8 \
+ man1/login.1 \
+ man5/login.defs.5 \
+ man8/logoutd.8 \
+ man1/newgrp.1 \
+ man8/newusers.8 \
+ man8/nologin.8 \
+ man1/passwd.1 \
+ man5/passwd.5 \
+ man8/pwck.8 \
+ man8/pwconv.8 \
+ man8/pwunconv.8 \
+ man1/sg.1 \
+ man3/shadow.3 \
+ man5/shadow.5 \
+ man1/su.1 \
+ man5/suauth.5 \
+ man8/useradd.8 \
+ man8/userdel.8 \
+ man8/usermod.8 \
+ man8/vigr.8 \
+ man8/vipw.8
+
+man_nopam = \
+ man5/limits.5 \
+ man5/login.access.5 \
+ man5/porttime.5
+
+if !USE_PAM
+man_MANS += $(man_nopam)
+endif
+
+EXTRA_DIST = \
+ $(man_MANS) \
+ man1/id.1 \
+ man8/sulogin.8
+
+if USE_PAM
+EXTRA_DIST += $(man_nopam)
+endif
+
+include ../generate_translations.mak
+
diff --git a/man/it/Makefile.in b/man/it/Makefile.in
new file mode 100644
index 0000000..5d3ec59
--- /dev/null
+++ b/man/it/Makefile.in
@@ -0,0 +1,773 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@USE_PAM_FALSE@am__append_1 = $(man_nopam)
+@USE_PAM_TRUE@am__append_2 = $(man_nopam)
+subdir = man/it
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" \
+ "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"
+man3dir = $(mandir)/man3
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/../generate_mans.mak \
+ $(srcdir)/../generate_translations.mak $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@/it
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = man1/chage.1 man1/chfn.1 man8/chgpasswd.8 man8/chpasswd.8 \
+ man1/chsh.1 man1/expiry.1 man5/faillog.5 man8/faillog.8 \
+ man3/getspnam.3 man1/gpasswd.1 man8/groupadd.8 man8/groupdel.8 \
+ man8/groupmems.8 man8/groupmod.8 man1/groups.1 man8/grpck.8 \
+ man8/grpconv.8 man8/grpunconv.8 man5/gshadow.5 man8/lastlog.8 \
+ man1/login.1 man5/login.defs.5 man8/logoutd.8 man1/newgrp.1 \
+ man8/newusers.8 man8/nologin.8 man1/passwd.1 man5/passwd.5 \
+ man8/pwck.8 man8/pwconv.8 man8/pwunconv.8 man1/sg.1 \
+ man3/shadow.3 man5/shadow.5 man1/su.1 man5/suauth.5 \
+ man8/useradd.8 man8/userdel.8 man8/usermod.8 man8/vigr.8 \
+ man8/vipw.8 $(am__append_1)
+man_nopam = \
+ man5/limits.5 \
+ man5/login.access.5 \
+ man5/porttime.5
+
+EXTRA_DIST = $(man_MANS) man1/id.1 man8/sulogin.8 $(am__append_2)
+LANG = $(notdir $(CURDIR))
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_FALSE@PAM_COND = no_pam
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_TRUE@PAM_COND = pam
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_FALSE@SHADOWGRP_COND = no_gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_TRUE@SHADOWGRP_COND = gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@WITH_TCB_FALSE@TCB_COND = no_tcb
+@ENABLE_REGENERATE_MAN_TRUE@@WITH_TCB_TRUE@TCB_COND = tcb
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_FALSE@SHA_CRYPT_COND = no_sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_TRUE@SHA_CRYPT_COND = sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@@ENABLE_SUBIDS_FALSE@SUBIDS_COND = no_subids
+@ENABLE_REGENERATE_MAN_TRUE@@ENABLE_SUBIDS_TRUE@SUBIDS_COND = subids
+CLEANFILES = messages.mo login.defs.d $(EXTRA_DIST) $(addsuffix .xml,$(EXTRA_DIST)) config.xml
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../generate_translations.mak $(srcdir)/../generate_mans.mak $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/it/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign man/it/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(srcdir)/../generate_translations.mak $(srcdir)/../generate_mans.mak $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+install-man3: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man3dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.3[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man3:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man3dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.3[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir)
+install-man5: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man5dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.5[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man5:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man5dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.5[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir)
+install-man8: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man8dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.8[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man8:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man8dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.8[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+@ENABLE_REGENERATE_MAN_FALSE@clean-local:
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1 install-man3 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man3 uninstall-man5 \
+ uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ clean-local cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-man3 install-man5 install-man8 \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags-am uninstall uninstall-am uninstall-man uninstall-man1 \
+ uninstall-man3 uninstall-man5 uninstall-man8
+
+.PRECIOUS: Makefile
+
+
+@ENABLE_REGENERATE_MAN_TRUE@config.xml: ../config.xml.in
+@ENABLE_REGENERATE_MAN_TRUE@ $(MAKE) -C .. config.xml
+@ENABLE_REGENERATE_MAN_TRUE@ cp ../config.xml $@
+
+@ENABLE_REGENERATE_MAN_TRUE@messages.mo: ../po/$(LANG).po
+@ENABLE_REGENERATE_MAN_TRUE@ msgfmt ../po/$(LANG).po -o messages.mo
+
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.d:
+@ENABLE_REGENERATE_MAN_TRUE@ ln -sf ../login.defs.d login.defs.d
+
+@ENABLE_REGENERATE_MAN_TRUE@%.xml: ../%.xml messages.mo login.defs.d
+@ENABLE_REGENERATE_MAN_TRUE@ if grep -q SHADOW-CONFIG-HERE $< ; then \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^<!-- SHADOW-CONFIG-HERE -->/<!ENTITY % config SYSTEM "config.xml">%config;/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ else \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^\(<!DOCTYPE .*docbookx.dtd"\)>/\1 [<!ENTITY % config SYSTEM "config.xml">%config;]>/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ fi
+@ENABLE_REGENERATE_MAN_TRUE@ itstool -d -l $(LANG) -m messages.mo -o . $@
+@ENABLE_REGENERATE_MAN_TRUE@ sed -i 's:\(^<refentry .*\)>:\1 lang="$(LANG)">:' $@
+
+@ENABLE_REGENERATE_MAN_TRUE@%.xml-config: %.xml
+@ENABLE_REGENERATE_MAN_TRUE@ if grep -q SHADOW-CONFIG-HERE $<; then \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^<!-- SHADOW-CONFIG-HERE -->/<!ENTITY % config SYSTEM "config.xml">%config;/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ else \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^\(<!DOCTYPE .*docbookx.dtd"\)>/\1 [<!ENTITY % config SYSTEM "config.xml">%config;]>/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ fi
+
+@ENABLE_REGENERATE_MAN_TRUE@man1/% man3/% man5/% man8/%: %.xml-config Makefile config.xml
+@ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam profile.condition "$(PAM_COND);$(SHADOWGRP_COND);$(TCB_COND);$(SHA_CRYPT_COND);$(SUBIDS_COND)" \
+@ENABLE_REGENERATE_MAN_TRUE@ --param "man.authors.section.enabled" "0" \
+@ENABLE_REGENERATE_MAN_TRUE@ --stringparam "man.output.base.dir" "" \
+@ENABLE_REGENERATE_MAN_TRUE@ --param "man.output.in.separate.dir" "1" \
+@ENABLE_REGENERATE_MAN_TRUE@ -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/profile-docbook.xsl $<
+
+@ENABLE_REGENERATE_MAN_TRUE@clean-local:
+@ENABLE_REGENERATE_MAN_TRUE@ rm -rf man1 man3 man5 man8
+
+#$(man_MANS):
+# @echo you need to run configure with --enable-man to generate man pages
+
+@ENABLE_REGENERATE_MAN_TRUE@man8/grpconv.8 man8/grpunconv.8 man8/pwunconv.8: man8/pwconv.8
+
+@ENABLE_REGENERATE_MAN_TRUE@man3/getspnam.3: man3/shadow.3
+
+@ENABLE_REGENERATE_MAN_TRUE@man8/vigr.8: man8/vipw.8
+
+@ENABLE_REGENERATE_MAN_FALSE@$(man_MANS):
+@ENABLE_REGENERATE_MAN_FALSE@ @echo you need to run configure with --enable-man to generate man pages
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/it/man1/chage.1 b/man/it/man1/chage.1
new file mode 100644
index 0000000..3f1f087
--- /dev/null
+++ b/man/it/man1/chage.1
@@ -0,0 +1,189 @@
+'\" t
+.\" Title: chage
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi utente
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "CHAGE" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi utente"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+chage \- cambia le informazioni sulla scadenza della password
+.SH "SINOSSI"
+.HP \w'\fBchage\fR\ 'u
+\fBchage\fR [\fIopzioni\fR] \fILOGIN\fR
+.SH "DESCRIZIONE"
+.PP
+The
+\fBchage\fR
+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\&.
+.SH "OPZIONI"
+.PP
+The options which apply to the
+\fBchage\fR
+command are:
+.PP
+\fB\-d\fR, \fB\-\-lastday\fR\ \&\fILAST_DAY\fR
+.RS 4
+Imposta la data dell\*(Aqultimo cambio della password, espressa come il numero di giorni trascorsi dal 1 gennaio 1970\&. La data pu\(`o anche essere specificata nel formato AAAA\-MM\-GG o nella notazione comunemente usata nel proprio paese\&.
+.RE
+.PP
+\fB\-E\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+Imposta la data o il numero di giorni dal 1 gennaio 1970 dal quale l\*(Aqaccount utente non sar\(`a pi\(`u accessibile\&. La data pu\(`o essere inserita nel formato AAAA\-MM\-GG (o il formato pi\(`u comunemente utilizzato nel proprio paese)\&. Un utente il cui account sia bloccato deve contattare l\*(Aqamministratore di sistema prima di poter accedere nuovamente al sistema\&.
+.sp
+Passing the number
+\fI\-1\fR
+as the
+\fIEXPIRE_DATE\fR
+will remove an account expiration date\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-i\fR, \fB\-\-iso8601\fR
+.RS 4
+When printing dates, use YYYY\-MM\-DD format\&.
+.RE
+.PP
+\fB\-I\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+Set the number of days of inactivity after a password has expired before the account is locked\&. The
+\fIINACTIVE\fR
+option is the number of days of inactivity\&. A user whose account is locked must contact the system administrator before being able to use the system again\&.
+.sp
+Passing the number
+\fI\-1\fR
+as the
+\fIINACTIVE\fR
+will remove an account\*(Aqs inactivity\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-list\fR
+.RS 4
+Visualizza le informazioni sulla scadenza dell\*(Aqaccount\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-mindays\fR\ \&\fIMIN_DAYS\fR
+.RS 4
+Set the minimum number of days between password changes to
+\fIMIN_DAYS\fR\&. A value of zero for this field indicates that the user may change their password at any time\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-maxdays\fR\ \&\fIMAX_DAYS\fR
+.RS 4
+Set the maximum number of days during which a password is valid\&. When
+\fIMAX_DAYS\fR
+plus
+\fILAST_DAY\fR
+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
+\fB\-W\fR
+option, which provides the user with advance warning\&.
+.sp
+Passing the number
+\fI\-1\fR
+as
+\fIMAX_DAYS\fR
+will remove checking a password\*(Aqs validity\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-W\fR, \fB\-\-warndays\fR\ \&\fIWARN_DAYS\fR
+.RS 4
+Set the number of days of warning before a password change is required\&. The
+\fIWARN_DAYS\fR
+option is the number of days prior to the password expiring that a user will be warned their password is about to expire\&.
+.RE
+.PP
+If none of the options are selected,
+\fBchage\fR
+operates in an interactive fashion, prompting the user with the current values for all of the fields\&. Enter the new value to change the field, or leave the line blank to use the current value\&. The current value is displayed between a pair of
+\fI[ ]\fR
+marks\&.
+.SH "NOTA"
+.PP
+The
+\fBchage\fR
+program requires a shadow password file to be available\&.
+.PP
+The
+\fBchage\fR
+command is restricted to the root user, except for the
+\fB\-l\fR
+option, which may be used by an unprivileged user to determine when their password or account is due to expire\&.
+.SH "CONFIGURAZIONE"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.SH "FILE"
+.PP
+/etc/passwd
+.RS 4
+Informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account utente\&.
+.RE
+.SH "VALORI RESTITUITI"
+.PP
+The
+\fBchage\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+permission denied
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI15\fR
+.RS 4
+can\*(Aqt find the shadow password file
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/it/man1/chfn.1 b/man/it/man1/chfn.1
new file mode 100644
index 0000000..a4b343e
--- /dev/null
+++ b/man/it/man1/chfn.1
@@ -0,0 +1,163 @@
+'\" t
+.\" Title: chfn
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi utente
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "CHFN" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi utente"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+chfn \- cambia il nome dell\*(Aqutente e altre informazioni
+.SH "SINOSSI"
+.HP \w'\fBchfn\fR\ 'u
+\fBchfn\fR [\fIopzioni\fR] [\fILOGIN\fR]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBchfn\fR
+command changes user fullname, office room number, office phone number, and home phone number information for a user\*(Aqs account\&. This information is typically printed by
+\fBfinger\fR(1)
+and similar programs\&. A normal user may only change the fields for her own account, subject to the restrictions in
+/etc/login\&.defs\&. (The default configuration is to prevent users from changing their fullname\&.) The superuser may change any field for any account\&. Additionally, only the superuser may use the
+\fB\-o\fR
+option to change the undefined portions of the GECOS field\&.
+.PP
+These fields must not contain any colons\&. Except for the
+\fIother\fR
+field, they should not contain any comma or equal sign\&. It is also recommended to avoid non\-US\-ASCII characters, but this is only enforced for the phone numbers\&. The
+\fIother\fR
+field is used to store accounting information used by other applications\&.
+.SH "OPZIONI"
+.PP
+The options which apply to the
+\fBchfn\fR
+command are:
+.PP
+\fB\-f\fR, \fB\-\-full\-name\fR\ \&\fIFULL_NAME\fR
+.RS 4
+Cambia il nome completo dell\*(Aqutente\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-home\-phone\fR\ \&\fIHOME_PHONE\fR
+.RS 4
+Cambia il numero di telefono di casa dell\*(Aqutente\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-other\fR\ \&\fIOTHER\fR
+.RS 4
+Cambia il campo GECOS per le altre informazioni\&. Questo campo viene utilizzato per memorizzare informazioni di \(Foaccounting\(Fc usate da altre applicazioni, e pu\(`o essere modificato solo dal super utente\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-room\fR\ \&\fIROOM_NUMBER\fR
+.RS 4
+Cambia il numero della stanza dell\*(Aqutente\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-work\-phone\fR\ \&\fIWORK_PHONE\fR
+.RS 4
+Cambia il numero di telefono di lavoro dell\*(Aqutente\&.
+.RE
+.PP
+If none of the options are selected,
+\fBchfn\fR
+operates in an interactive fashion, prompting the user with the current values for all of the fields\&. Enter the new value to change the field, or leave the line blank to use the current value\&. The current value is displayed between a pair of
+\fB[ ]\fR
+marks\&. Without options,
+\fBchfn\fR
+prompts for the current user account\&.
+.SH "CONFIGURAZIONE"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHFN_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchfn\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCHFN_RESTRICT\fR (string)
+.RS 4
+This parameter specifies which values in the
+\fIgecos\fR
+field of the
+/etc/passwd
+file may be changed by regular users using the
+\fBchfn\fR
+program\&. It can be any combination of letters
+\fIf\fR,
+\fIr\fR,
+\fIw\fR,
+\fIh\fR, for Full name, Room number, Work phone, and Home phone, respectively\&. For backward compatibility,
+\fIyes\fR
+is equivalent to
+\fIrwh\fR
+and
+\fIno\fR
+is equivalent to
+\fIfrwh\fR\&. If not specified, only the superuser can make any changes\&. The most restrictive setting is better achieved by not installing
+\fBchfn\fR
+SUID\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+Il testo da utilizzare per richiedere la password\&. Il valore predefinito \(`e \(FoPassword: \(Fc o una sua traduzione\&. Se si imposta questa variabile allora il testo non verr\(`a tradotto\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.SH "FILE"
+.PP
+/etc/login\&.defs
+.RS 4
+Configurazione del pacchetto password shadow
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informazioni sugli account utente\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBchsh\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/it/man1/chsh.1 b/man/it/man1/chsh.1
new file mode 100644
index 0000000..75c6263
--- /dev/null
+++ b/man/it/man1/chsh.1
@@ -0,0 +1,121 @@
+'\" t
+.\" Title: chsh
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi utente
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "CHSH" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi utente"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+chsh \- cambia la shell di login
+.SH "SINOSSI"
+.HP \w'\fBchsh\fR\ 'u
+\fBchsh\fR [\fIopzioni\fR] [\fILOGIN\fR]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBchsh\fR
+command changes the user login shell\&. This determines the name of the user\*(Aqs initial login command\&. A normal user may only change the login shell for her own account; the superuser may change the login shell for any account\&.
+.SH "OPZIONI"
+.PP
+The options which apply to the
+\fBchsh\fR
+command are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+Il nome della nuova shell di login dell\*(Aqutente\&. Lasciando questo campo vuoto si fa in modo che il sistema selezioni la shell di login predefinita\&.
+.RE
+.PP
+If the
+\fB\-s\fR
+option is not selected,
+\fBchsh\fR
+operates in an interactive fashion, prompting the user with the current login shell\&. Enter the new value to change the shell, or leave the line blank to use the current one\&. The current shell is displayed between a pair of
+\fI[ ]\fR
+marks\&.
+.SH "NOTA"
+.PP
+The only restriction placed on the login shell is that the command name must be listed in
+/etc/shells, unless the invoker is the superuser, and then any value may be added\&. An account with a restricted login shell may not change her login shell\&. For this reason, placing
+/bin/rsh
+in
+/etc/shells
+is discouraged since accidentally changing to a restricted shell would prevent the user from ever changing her login shell back to its original value\&.
+.SH "CONFIGURAZIONE"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHSH_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchsh\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+Il testo da utilizzare per richiedere la password\&. Il valore predefinito \(`e \(FoPassword: \(Fc o una sua traduzione\&. Se si imposta questa variabile allora il testo non verr\(`a tradotto\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.SH "FILE"
+.PP
+/etc/passwd
+.RS 4
+Informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shells
+.RS 4
+Elenco delle shell di login ammesse\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configurazione del pacchetto password shadow
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBchfn\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/it/man1/expiry.1 b/man/it/man1/expiry.1
new file mode 100644
index 0000000..dc6ba86
--- /dev/null
+++ b/man/it/man1/expiry.1
@@ -0,0 +1,74 @@
+'\" t
+.\" Title: expiry
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi utente
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "EXPIRY" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi utente"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+expiry \- controlla e fa rispettare la scadenza della password
+.SH "SINOSSI"
+.HP \w'\fBexpiry\fR\ 'u
+\fBexpiry\fR \fIopzione\fR
+.SH "DESCRIZIONE"
+.PP
+The
+\fBexpiry\fR
+command checks (\fB\-c\fR) the current password expiration and forces (\fB\-f\fR) changes when required\&. It is callable as a normal user command\&.
+.SH "OPZIONI"
+.PP
+The options which apply to the
+\fBexpiry\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-check\fR
+.RS 4
+Controlla la scadenza della password dell\*(Aqutente corrente\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+Forza un cambio di password se l\*(Aqutente corrente ha una password scaduta\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.SH "FILE"
+.PP
+/etc/passwd
+.RS 4
+Informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account utente\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/it/man1/gpasswd.1 b/man/it/man1/gpasswd.1
new file mode 100644
index 0000000..5e71fc5
--- /dev/null
+++ b/man/it/man1/gpasswd.1
@@ -0,0 +1,232 @@
+'\" t
+.\" Title: gpasswd
+.\" Author: Rafal Maszkowski
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi utente
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "GPASSWD" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi utente"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+gpasswd \- administer /etc/group and /etc/gshadow
+.SH "SINOSSI"
+.HP \w'\fBgpasswd\fR\ 'u
+\fBgpasswd\fR [\fIopzione\fR] \fIgruppo\fR
+.SH "DESCRIZIONE"
+.PP
+The
+\fBgpasswd\fR
+command is used to administer
+/etc/group, and /etc/gshadow\&. Every group can have
+administrators,
+members and a password\&.
+.PP
+System administrators can use the
+\fB\-A\fR
+option to define group administrator(s) and the
+\fB\-M\fR
+option to define members\&. They have all rights of group administrators and members\&.
+.PP
+\fBgpasswd\fR
+called by
+a group administrator
+with a group name only prompts for the new password of the
+\fIgroup\fR\&.
+.PP
+If a password is set the members can still use
+\fBnewgrp\fR(1)
+without a password, and non\-members must supply the password\&.
+.SS "Note sulle password di gruppo"
+.PP
+Le password di gruppo rappresentano un intrinseco problema di sicurezza perch\('e pi\(`u di una persona deve conoscerle\&. Ciononostante i gruppi sono uno strumento molto utile per la cooperazione tra vari utenti\&.
+.SH "OPZIONI"
+.PP
+Except for the
+\fB\-A\fR
+and
+\fB\-M\fR
+options, the options cannot be combined\&.
+.PP
+The options which apply to the
+\fBgpasswd\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-add\fR\ \&\fIuser\fR
+.RS 4
+Add the
+\fIuser\fR
+to the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR\ \&\fIuser\fR
+.RS 4
+Remove the
+\fIuser\fR
+from the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-Q\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-remove\-password\fR
+.RS 4
+Remove the password from the named
+\fIgroup\fR\&. The group password will be empty\&. Only group members will be allowed to use
+\fBnewgrp\fR
+to join the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-restrict\fR
+.RS 4
+Restrict the access to the named
+\fIgroup\fR\&. The group password is set to "!"\&. Only group members with a password will be allowed to use
+\fBnewgrp\fR
+to join the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-A\fR, \fB\-\-administrators\fR\ \&\fIuser\fR,\&.\&.\&.
+.RS 4
+Imposta l\*(Aqelenco degli utenti amministratori\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-members\fR\ \&\fIuser\fR,\&.\&.\&.
+.RS 4
+Definisce l\*(Aqelenco dei membri del gruppo\&.
+.RE
+.SH "AVVISI/CAVEAT"
+.PP
+This tool only operates on the
+/etc/group
+and /etc/gshadow files\&.
+Thus you cannot change any NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.SH "CONFIGURAZIONE"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+Definisce l\*(Aqalgoritmo di cifratura predefinito per le password (se non ne viene specificato uno a riga di comando)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Il valore predefinito \(`e 0, che non pone nessun limite al numero di membri per gruppo\&.
+.sp
+Questa opzione (dividi gruppo) permette di limitare la lunghezza delle righe nel file \(Fogroup\(Fc\&. Questo \(`e utile per essere certi che le righe per gruppi NIS non eccedano i 1024 caratteri\&.
+.sp
+Se si deve impostare questo limite, si pu\(`o usare 25\&.
+.sp
+Nota: la divisione dei gruppi potrebbe non essere supportata da ogni strumento (anche all\*(Aqinterno del pacchetto Shadow)\&. Non si dovrebbe utilizzare questa variabile a meno di esserci forzati\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+Con molti cicli \(`e pi\(`u difficile trovare una password usando la forza bruta\&. Ma va notato che \(`e richiesta maggiore potenza di calcolo per autenticare gli utenti\&.
+.sp
+Se non specificato sar\(`a la libc a scegliere il numero di cicli (5000)\&.
+.sp
+Il valore deve essere compreso tra 1\&.000 e 999\&.999\&.999\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FILE"
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informazioni sicure sugli account di gruppo\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBnewgrp\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBgrpck\fR(8),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/it/man1/groups.1 b/man/it/man1/groups.1
new file mode 100644
index 0000000..fbbc976
--- /dev/null
+++ b/man/it/man1/groups.1
@@ -0,0 +1,64 @@
+'\" t
+.\" Title: groups
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi utente
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "GROUPS" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi utente"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+groups \- mostra i nomi dei gruppi correnti
+.SH "SINOSSI"
+.HP \w'\fBgroups\fR\ 'u
+\fBgroups\fR [\fIutente\fR]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBgroups\fR
+command displays the current group names or ID values\&. If the value does not have a corresponding entry in
+/etc/group, the value will be displayed as the numerical group value\&. The optional
+\fIuser\fR
+parameter will display the groups for the named
+\fIuser\fR\&.
+.SH "NOTA"
+.PP
+Systems which do not support concurrent group sets will have the information from
+/etc/group
+reported\&. The user must use
+\fBnewgrp\fR
+or
+\fBsg\fR
+to change his current real and effective group ID\&.
+.SH "FILE"
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBnewgrp\fR(1),
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)\&.
diff --git a/man/it/man1/id.1 b/man/it/man1/id.1
new file mode 100644
index 0000000..84267bb
--- /dev/null
+++ b/man/it/man1/id.1
@@ -0,0 +1,60 @@
+'\" t
+.\" Title: id
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi utente
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "ID" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi utente"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+id \- display current user and group ID names
+.SH "SINOSSI"
+.HP \w'\fBid\fR\ 'u
+\fBid\fR [\-a]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBid\fR
+command displays the current real and effective user and group ID names or values\&. If the value does not have a corresponding entry in
+/etc/passwd
+or
+/etc/group, the value will be displayed without the corresponding name\&. The optional
+\fB\-a\fR
+flag will display the group set on systems which support multiple concurrent group membership\&.
+.SH "FILE"
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informazioni sugli account utente\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)
diff --git a/man/it/man1/login.1 b/man/it/man1/login.1
new file mode 100644
index 0000000..4e2af26
--- /dev/null
+++ b/man/it/man1/login.1
@@ -0,0 +1,487 @@
+'\" t
+.\" Title: login
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi utente
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "LOGIN" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi utente"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+login \- apre una sessione sul sistema
+.SH "SINOSSI"
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] [\-h\ \fIhost\fR] [\fInome\fR] [\fIENV=VAR\fR...]
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] [\-h\ \fIhost\fR] \-f \fInome\fR
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] \-r\ \fIhost\fR
+.SH "DESCRIZIONE"
+.PP
+The
+\fBlogin\fR
+program is used to establish a new session with the system\&. It is normally invoked automatically by responding to the
+\fIlogin:\fR
+prompt on the user\*(Aqs terminal\&.
+\fBlogin\fR
+may be special to the shell and may not be invoked as a sub\-process\&. When called from a shell,
+\fBlogin\fR
+should be executed as
+\fBexec login\fR
+which will cause the user to exit from the current shell (and thus will prevent the new logged in user to return to the session of the caller)\&. Attempting to execute
+\fBlogin\fR
+from any shell but the login shell will produce an error message\&.
+.PP
+The user is then prompted for a password, where appropriate\&. Echoing is disabled to prevent revealing the password\&. Only a small number of password failures are permitted before
+\fBlogin\fR
+exits and the communications link is severed\&.
+.PP
+If password aging has been enabled for your account, you may be prompted for a new password before proceeding\&. You will be forced to provide your old password and the new password before continuing\&. Please refer to
+\fBpasswd\fR(1)
+for more information\&.
+.PP
+After a successful login, you will be informed of any system messages and the presence of mail\&. You may turn off the printing of the system message file,
+/etc/motd, by creating a zero\-length file
+\&.hushlogin
+in your login directory\&. The mail message will be one of "\fIYou have new mail\&.\fR", "\fIYou have mail\&.\fR", or "\fINo Mail\&.\fR" according to the condition of your mailbox\&.
+.PP
+Your user and group ID will be set according to their values in the
+/etc/passwd
+file\&. The value for
+\fB$HOME\fR,
+\fB$SHELL\fR,
+\fB$PATH\fR,
+\fB$LOGNAME\fR, and
+\fB$MAIL\fR
+are set according to the appropriate fields in the password entry\&. Ulimit, umask and nice values may also be set according to entries in the GECOS field\&.
+.PP
+On some installations, the environmental variable
+\fB$TERM\fR
+will be initialized to the terminal type on your tty line, as specified in
+/etc/ttytype\&.
+.PP
+Pu\(`o anche essere eseguito uno script di inizializzazione per il proprio interprete dei comandi\&. Fare riferimento alla relativa sezione di manuale per maggiori informazioni su questa funzione\&.
+.PP
+Un sottosistema di login \(`e indicato dalla presenza del carattere \(Fo*\(Fc all\*(Aqinizio della shell di login\&. La directory home impostata sar\(`a utilizzata come root di un nuovo file system al quale l\*(Aqutente accede\&.
+.PP
+The
+\fBlogin\fR
+program is NOT responsible for removing users from the utmp file\&. It is the responsibility of
+\fBgetty\fR(8)
+and
+\fBinit\fR(8)
+to clean up apparent ownership of a terminal session\&. If you use
+\fBlogin\fR
+from the shell prompt without
+\fBexec\fR, the user you use will continue to appear to be logged in even after you log out of the "subsession"\&.
+.SH "OPZIONI"
+.PP
+\fB\-f\fR
+.RS 4
+Non effettua l\*(Aqautenticazione, l\*(Aqutente \(`e gi\(`a autenticato
+.sp
+Note: In that case,
+\fIusername\fR
+is mandatory\&.
+.RE
+.PP
+\fB\-h\fR
+.RS 4
+Nome dell\*(Aqhost remoto per questo login\&.
+.RE
+.PP
+\fB\-p\fR
+.RS 4
+Non modifica l\*(Aqambiente\&.
+.RE
+.PP
+\fB\-r\fR
+.RS 4
+Attiva il protocollo autologin di rlogin\&.
+.RE
+.PP
+The
+\fB\-r\fR,
+\fB\-h\fR
+and
+\fB\-f\fR
+options are only used when
+\fBlogin\fR
+is invoked by root\&.
+.SH "AVVISI/CAVEAT"
+.PP
+This version of
+\fBlogin\fR
+has many compilation options, only some of which may be in use at any particular site\&.
+.PP
+La posizione dei file \(`e soggetta a differenze in base alla configurazione del sistema\&.
+.PP
+The
+\fBlogin\fR
+program is NOT responsible for removing users from the utmp file\&. It is the responsibility of
+\fBgetty\fR(8)
+and
+\fBinit\fR(8)
+to clean up apparent ownership of a terminal session\&. If you use
+\fBlogin\fR
+from the shell prompt without
+\fBexec\fR, the user you use will continue to appear to be logged in even after you log out of the "subsession"\&.
+.PP
+As with any program,
+\fBlogin\fR\*(Aqs appearance can be faked\&. If non\-trusted users have physical access to a machine, an attacker could use this to obtain the password of the next person coming to sit in front of the machine\&. Under Linux, the SAK mechanism can be used by users to initiate a trusted path and prevent this kind of attack\&.
+.SH "CONFIGURAZIONE"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+Se definito, o il percorso completo di un file che contiene l\*(Aqelenco di nomi di device (uno per riga) oppure un elenco di nomi di device separati da \(Fo:\(Fc\&. L\*(Aqaccesso come root verr\(`a permesso solo attraverso questi device\&.
+.sp
+Se non definito, root potr\(`a accedere da qualsiasi device\&.
+.sp
+Il nome di device deve essere specificato senza il prefisso /dev\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\*(Aqs supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Indica se permettere l\*(Aqaccesso al sistema anche se non si pu\(`o accedere alla directory home\&. Il valore predefinito \(`e no\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value is a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value is a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/sbin:/bin:/usr/sbin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+Se questo file esiste ed \(`e leggibile, l\*(Aqambiente di login viene letto da l\(`i\&. Ogni riga deve essere nella forma nome=valore\&.
+.sp
+Le righe che iniziano con \(Fo#\(Fc sono trattate come commenti e ignorate\&.
+.RE
+.PP
+\fBERASECHAR\fR (number)
+.RS 4
+Terminal ERASE character (\fI010\fR
+= backspace,
+\fI0177\fR
+= DEL)\&.
+.sp
+Il valore deve avere il prefisso \(Fo0\(Fc se in ottale, o \(Fo0x\(Fc se esadecimale\&.
+.RE
+.PP
+\fBFAIL_DELAY\fR (number)
+.RS 4
+Numero di secondi prima che venga concesso un ulteriore tentativo dopo un accesso fallito\&.
+.RE
+.PP
+\fBFAILLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of
+/var/log/faillog
+login failure info\&.
+.RE
+.PP
+\fBFAKE_SHELL\fR (string)
+.RS 4
+If set,
+\fBlogin\fR
+will execute this shell instead of the users\*(Aq shell specified in
+/etc/passwd\&.
+.RE
+.PP
+\fBFTMP_FILE\fR (string)
+.RS 4
+Se impostato, gli accessi falliti verranno tracciati in questo file nel formato utmp\&.
+.RE
+.PP
+\fBHUSHLOGIN_FILE\fR (string)
+.RS 4
+Se definito, questo file inibisce quanto stampato durante l\*(Aqaccesso\&. Se viene specificato un percorso completo, la modalit\(`a silenziosa (hushed) viene attivata se in quel file \(`e presente il nome dell\*(Aqutente o della shell dell\*(Aqutente\&. Se il percorso non \(`e completo, allora la modalit\(`a silenziosa viene attivata se quel file \(`e presente nella directory home dell\*(Aqutente\&.
+.RE
+.PP
+\fBISSUE_FILE\fR (string)
+.RS 4
+Se definito, il file verr\(`a mostrato prima del prompt di login\&.
+.RE
+.PP
+\fBKILLCHAR\fR (number)
+.RS 4
+Terminal KILL character (\fI025\fR
+= CTRL/U)\&.
+.sp
+Il valore deve avere il prefisso \(Fo0\(Fc se in ottale, o \(Fo0x\(Fc se esadecimale\&.
+.RE
+.PP
+\fBLASTLOG_ENAB\fR (boolean)
+.RS 4
+Abilita la memorizzazione e la stampa delle informazioni sulle date degli ultimi accessi in /var/log/lastlog\&.
+.RE
+.PP
+\fBLOGIN_RETRIES\fR (number)
+.RS 4
+Massimo numero di tentativi di accesso per password errata\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+Il testo da utilizzare per richiedere la password\&. Il valore predefinito \(`e \(FoPassword: \(Fc o una sua traduzione\&. Se si imposta questa variabile allora il testo non verr\(`a tradotto\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.PP
+\fBLOGIN_TIMEOUT\fR (number)
+.RS 4
+Numero massimo di secondi per l\*(Aqaccesso\&.
+.RE
+.PP
+\fBLOG_OK_LOGINS\fR (boolean)
+.RS 4
+Abilita la tracciatura degli accessi avvenuti con successo\&.
+.RE
+.PP
+\fBLOG_UNKFAIL_ENAB\fR (boolean)
+.RS 4
+Abilita l\*(Aqinclusione dei nomi utente sconosciuti quando si registrano gli accessi falliti\&.
+.sp
+Nota: memorizzare i nomi sconosciuti potrebbe diventare un problema legato alla sicurezza se un utente inserisce la propria password al posto del nome utente\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+Abilita la verifica e stampa a video dello stato della casella di posta al momento dell\*(Aqaccesso al sistema\&.
+.sp
+Andrebbe disabilitato se i file di avvio della shell effettuano gi\(`a questo controllo (\(Fomailx \-e\(Fc o equivalente)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+La directory di spool per la posta\&. Questa \(`e necessaria per manipolare la casella di posta quando il corrispondente account utente viene modificato o cancellato\&. Se non \(`e specificata viene utilizzato un valore impostato al momento della compilazione\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Imposta la posizione delle caselle di posta degli utenti relative alla loro directory home\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMOTD_FILE\fR (string)
+.RS 4
+Se definito \(`e una lista di nomi di file con \(Fomessaggi del giorno\(Fc separati da \(Fo:\(Fc che vengono mostrati subito dopo l\*(Aqaccesso\&.
+.RE
+.PP
+\fBNOLOGINS_FILE\fR (string)
+.RS 4
+Se definito \(`e il nome di un file che impedisce l\*(Aqaccesso degli utenti non root\&. Il suo contenuto dovrebbe essere un messaggio che indica il motivo per il quale l\*(Aqaccesso \(`e impedito\&.
+.RE
+.PP
+\fBPORTTIME_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable checking of time restrictions specified in
+/etc/porttime\&.
+.RE
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of resource limits from
+/etc/limits
+and ulimit, umask, and niceness from the user\*(Aqs passwd gecos field\&.
+.RE
+.PP
+\fBTTYGROUP\fR (string), \fBTTYPERM\fR (string)
+.RS 4
+The terminal permissions: the login tty will be owned by the
+\fBTTYGROUP\fR
+group, and the permissions will be set to
+\fBTTYPERM\fR\&.
+.sp
+By default, the ownership of the terminal is set to the user\*(Aqs primary group and the permissions are set to
+\fI0600\fR\&.
+.sp
+\fBTTYGROUP\fR
+can be either the name of a group or a numeric group identifier\&.
+.sp
+If you have a
+\fBwrite\fR
+program which is "setgid" to a special group which owns the terminals, define TTYGROUP to the group number and TTYPERM to 0620\&. Otherwise leave TTYGROUP commented out and assign TTYPERM to either 622 or 600\&.
+.RE
+.PP
+\fBTTYTYPE_FILE\fR (string)
+.RS 4
+Se definito si tratta di un file che mappa le linee tty nella variabile d\*(Aqambiente TERM\&. Ogni riga del file \(`e in un formato tipo \(Fovt100 tty01\(Fc\&.
+.RE
+.PP
+\fBULIMIT\fR (number)
+.RS 4
+Default
+\fBulimit\fR
+value\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+La maschera di permessi alla creazione dei file \(`e inizializzata con questo valore\&. Se non specificato la maschera viene impostata a 022\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create if
+\fBHOME_MODE\fR
+is not set\&.
+.sp
+It is also used by
+\fBlogin\fR
+to define users\*(Aq initial umask\&. Note that this mask can be overridden by the user\*(Aqs GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Abilita l\*(Aqimpostazione dei bit di gruppo di umask in modo che siano gli stessi dei bit del proprietario (esempio: 022 \-> 002, 077 \-> 007) per utenti non root a condizione che uid e gid siano identici e che il nome utente sia lo stesso del gruppo primario\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FILE"
+.PP
+/var/run/utmp
+.RS 4
+Elenco delle sessioni attive\&.
+.RE
+.PP
+/var/log/wtmp
+.RS 4
+Elenco delle precedenti sessioni di login\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account utente\&.
+.RE
+.PP
+/etc/motd
+.RS 4
+File di sistema con il messaggio del giorno\&.
+.RE
+.PP
+/etc/nologin
+.RS 4
+Impedisce l\*(Aqaccesso al sistema per utenti diversi da root\&.
+.RE
+.PP
+/etc/ttytype
+.RS 4
+Elenco di tipi di terminale\&.
+.RE
+.PP
+$HOME/\&.hushlogin
+.RS 4
+Impedisce che vengano mostrati i messaggi di sistema\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configurazione del pacchetto password shadow
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBmail\fR(1),
+\fBpasswd\fR(1),
+\fBsh\fR(1),
+\fBsu\fR(1),
+\fBlogin.defs\fR(5),
+\fBnologin\fR(5),
+\fBpasswd\fR(5),
+\fBsecuretty\fR(5),
+\fBgetty\fR(8)\&.
diff --git a/man/it/man1/newgrp.1 b/man/it/man1/newgrp.1
new file mode 100644
index 0000000..e22b925
--- /dev/null
+++ b/man/it/man1/newgrp.1
@@ -0,0 +1,98 @@
+'\" t
+.\" Title: newgrp
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi utente
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "NEWGRP" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi utente"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+newgrp \- effettua l\*(Aqaccesso a un nuovo gruppo
+.SH "SINOSSI"
+.HP \w'\fBnewgrp\fR\ 'u
+\fBnewgrp\fR [\-] [\fIgruppo\fR]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBnewgrp\fR
+command is used to change the current group ID during a login session\&. If the optional
+\fB\-\fR
+flag is given, the user\*(Aqs environment will be reinitialized as though the user had logged in, otherwise the current environment, including current working directory, remains unchanged\&.
+.PP
+\fBnewgrp\fR
+changes the current real group ID to the named group, or to the default group listed in
+/etc/passwd
+if no group name is given\&.
+\fBnewgrp\fR
+also tries to add the group to the user groupset\&. If not root, the user will be prompted for a password if she does not have a password (in
+/etc/shadow
+if this user has an entry in the shadowed password file, or in
+/etc/passwd
+otherwise) and the group does, or if the user is not listed as a member and the group has a password\&. The user will be denied access if the group password is empty and the user is not listed as a member\&.
+.PP
+If there is an entry for this group in
+/etc/gshadow, then the list of members and the password of this group will be taken from this file, otherwise, the entry in
+/etc/group
+is considered\&.
+.SH "CONFIGURAZIONE"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "FILE"
+.PP
+/etc/passwd
+.RS 4
+Informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account utente\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informazioni sicure sugli account di gruppo\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBsu\fR(1),
+\fBsg\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/it/man1/passwd.1 b/man/it/man1/passwd.1
new file mode 100644
index 0000000..ee06357
--- /dev/null
+++ b/man/it/man1/passwd.1
@@ -0,0 +1,365 @@
+'\" t
+.\" Title: passwd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi utente
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "PASSWD" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi utente"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+passwd \- cambia la password utente
+.SH "SINOSSI"
+.HP \w'\fBpasswd\fR\ 'u
+\fBpasswd\fR [\fIopzioni\fR] [\fILOGIN\fR]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBpasswd\fR
+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\&.
+\fBpasswd\fR
+also changes the account or associated password validity period\&.
+.SS "Modifiche delle password"
+.PP
+All\*(Aqutente viene prima chiesta la propria password attuale, se presente\&. Questa password viene cifrata e confrontata con quella memorizzata\&. All\*(Aqutente viene data solo una possibilit\(`a di inserire la password corretta\&. Il super utente salta questo passo in modo da poter modificare password dimenticate\&.
+.PP
+After the password has been entered, password aging information is checked to see if the user is permitted to change the password at this time\&. If not,
+\fBpasswd\fR
+refuses to change the password and exits\&.
+.PP
+All\*(Aqutente viene quindi chiesto di inserire la nuova password due volte\&. Le due password sono confrontate e devono essere uguali affinch\('e la password venga accettata\&.
+.PP
+Quindi viene misurata la complessit\(`a della password\&. In linea di massima le password dovrebbero contenere dai 6 agli 8 caratteri, includendovi uno o pi\(`u caratteri da ciascuno dei seguenti insiemi:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+lettere minuscole
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+numeri da 0 a 9
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+segni di punteggiatura
+.RE
+.PP
+Care must be taken not to include the system default erase or kill characters\&.
+\fBpasswd\fR
+will reject any password which is not suitably complex\&.
+.SS "Suggerimenti per password utente"
+.PP
+The security of a password depends upon the strength of the encryption algorithm and the size of the key space\&. The legacy
+\fIUNIX\fR
+System encryption method is based on the NBS DES algorithm\&. More recent methods are now recommended (see
+\fBENCRYPT_METHOD\fR)\&. The size of the key space depends upon the randomness of the password which is selected\&.
+.PP
+La compromissione di una password avviene normalmente a seguito di incuria nella scelta o nella gestione della password\&. Per questo motivo non si devono utilizzare password che appaiono nei dizionari o che devono essere scritte\&. La password non deve essere uno nome proprio, il numero della patente, la data di nascita o l\*(Aqindirizzo\&. Uno qualunque di questi potrebbe essere indovinato per violare la sicurezza del sistema\&.
+.PP
+You can find advice on how to choose a strong password on http://en\&.wikipedia\&.org/wiki/Password_strength
+.SH "OPZIONI"
+.PP
+The options which apply to the
+\fBpasswd\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+This option can be used only with
+\fB\-S\fR
+and causes show status for all users\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR
+.RS 4
+Cancella la password utente (la rende vuota)\&. Questo \(`e un metodo veloce per disabilitare la password per l\*(Aqaccount\&. Imposta l\*(Aqaccount indicato come senza password\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expire\fR
+.RS 4
+Fa scadere subito la password dell\*(Aqutente\&. Il che ha l\*(Aqeffetto di forzare un cambio password al successivo accesso da parte dell\*(Aqutente\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-i\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+This option is used to disable an account after the password has been expired for a number of days\&. After a user account has had an expired password for
+\fIINACTIVE\fR
+days, the user may no longer sign on to the account\&.
+.RE
+.PP
+\fB\-k\fR, \fB\-\-keep\-tokens\fR
+.RS 4
+Indica che il cambio password va effettuato solo per i token (password) di autenticazione scaduti\&. L\*(Aqutente vuole mantenere inalterati i token non scaduti\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\fR
+.RS 4
+Blocca la password dell\*(Aqaccount indicato\&. Questa opzione disabilita una password modificandola in modo che non corrisponda a nessun valore cifrato (aggiunge un \(Fo!\(Fc all\*(Aqinizio della password)\&.
+.sp
+Note that this does not disable the account\&. The user may still be able to login using another authentication token (e\&.g\&. an SSH key)\&. To disable the account, administrators should use
+\fBusermod \-\-expiredate 1\fR
+(this set the account\*(Aqs expire date to Jan 2, 1970)\&.
+.sp
+Gli utenti con password bloccata non la possono cambiare\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-mindays\fR\ \&\fIMIN_DAYS\fR
+.RS 4
+Set the minimum number of days between password changes to
+\fIMIN_DAYS\fR\&. A value of zero for this field indicates that the user may change their password at any time\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Modalit\(`a silenziosa\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-repository\fR\ \&\fIREPOSITORY\fR
+.RS 4
+change password in
+\fIREPOSITORY\fR
+repository
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-S\fR, \fB\-\-status\fR
+.RS 4
+Visualizza le informazioni sullo stato di un account\&. Lo stato consiste di 7 campi\&. Il primo campo \(`e il nome dell\*(Aqutente\&. Il secondo campo indica se l\*(Aqaccount ha una password bloccata (L), non ha password (NP) o ha una password valida (P)\&. Il terzo campo contiene la data di ultima modifica della password\&. I successivi quattro campi sono l\*(Aqet\(`a minima, la massima, il periodo di avviso e quello di inattivit\(`a\&. Queste et\(`a sono espresse in giorni\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-unlock\fR
+.RS 4
+Unlock the password of the named account\&. This option re\-enables a password by changing the password back to its previous value (to the value before using the
+\fB\-l\fR
+option)\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-warndays\fR\ \&\fIWARN_DAYS\fR
+.RS 4
+Set the number of days of warning before a password change is required\&. The
+\fIWARN_DAYS\fR
+option is the number of days prior to the password expiring that a user will be warned that their password is about to expire\&.
+.RE
+.PP
+\fB\-x\fR, \fB\-\-maxdays\fR\ \&\fIMAX_DAYS\fR
+.RS 4
+Set the maximum number of days a password remains valid\&. After
+\fIMAX_DAYS\fR, the password is required to be changed\&.
+.sp
+Passing the number
+\fI\-1\fR
+as
+\fIMAX_DAYS\fR
+will remove checking a password\*(Aqs validity\&.
+.RE
+.SH "AVVISI/CAVEAT"
+.PP
+Il controllo della complessit\(`a delle password varia da sistema a sistema\&. All\*(Aqutente \(`e caldamente consigliato si utilizzare una password che ritenga sufficientemente complessa\&.
+.PP
+Gli utenti possono non essere in grado di cambiare la propria password se NIS \(`e abilitato ed essi non sono collegati al server NIS\&.
+.SH "CONFIGURAZIONE"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+Definisce l\*(Aqalgoritmo di cifratura predefinito per le password (se non ne viene specificato uno a riga di comando)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBOBSCURE_CHECKS_ENAB\fR (boolean)
+.RS 4
+Abilita controlli addizionali durante il cambio password\&.
+.RE
+.PP
+\fBPASS_ALWAYS_WARN\fR (boolean)
+.RS 4
+Avvisa riguardo password deboli (anche se le permette egualmente) se si \(`e root\&.
+.RE
+.PP
+\fBPASS_CHANGE_TRIES\fR (number)
+.RS 4
+Massimo numero di tentativi per cambiare una password (troppo facile)\&.
+.RE
+.PP
+\fBPASS_MAX_LEN\fR (number), \fBPASS_MIN_LEN\fR (number)
+.RS 4
+Number of significant characters in the password for crypt()\&.
+\fBPASS_MAX_LEN\fR
+is 8 by default\&. Don\*(Aqt change unless your crypt() is better\&. This is ignored if
+\fBMD5_CRYPT_ENAB\fR
+set to
+\fIyes\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+Con molti cicli \(`e pi\(`u difficile trovare una password usando la forza bruta\&. Ma va notato che \(`e richiesta maggiore potenza di calcolo per autenticare gli utenti\&.
+.sp
+Se non specificato sar\(`a la libc a scegliere il numero di cicli (5000)\&.
+.sp
+Il valore deve essere compreso tra 1\&.000 e 999\&.999\&.999\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FILE"
+.PP
+/etc/passwd
+.RS 4
+Informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account utente\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configurazione del pacchetto password shadow
+.RE
+.SH "VALORI RESTITUITI"
+.PP
+The
+\fBpasswd\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+permission denied
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid combination of options
+.RE
+.PP
+\fI3\fR
+.RS 4
+unexpected failure, nothing done
+.RE
+.PP
+\fI4\fR
+.RS 4
+unexpected failure,
+passwd
+file missing
+.RE
+.PP
+\fI5\fR
+.RS 4
+passwd
+file busy, try again
+.RE
+.PP
+\fI6\fR
+.RS 4
+invalid argument to option
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBchpasswd\fR(8),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBlogin.defs\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/it/man1/sg.1 b/man/it/man1/sg.1
new file mode 100644
index 0000000..5d6ad20
--- /dev/null
+++ b/man/it/man1/sg.1
@@ -0,0 +1,97 @@
+'\" t
+.\" Title: sg
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi utente
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "SG" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi utente"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+sg \- esegue un comando con un diverso ID di gruppo
+.SH "SINOSSI"
+.HP \w'\fBsg\fR\ 'u
+\fBsg\fR [\-] [group\ [\-c\ ]\ command]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBsg\fR
+command works similar to
+\fBnewgrp\fR
+but accepts a command\&. The command will be executed with the
+/bin/sh
+shell\&. With most shells you may run
+\fBsg\fR
+from, you need to enclose multi\-word commands in quotes\&. Another difference between
+\fBnewgrp\fR
+and
+\fBsg\fR
+is that some shells treat
+\fBnewgrp\fR
+specially, replacing themselves with a new instance of a shell that
+\fBnewgrp\fR
+creates\&. This doesn\*(Aqt happen with
+\fBsg\fR, so upon exit from a
+\fBsg\fR
+command you are returned to your previous group ID\&.
+.SH "CONFIGURAZIONE"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "FILE"
+.PP
+/etc/passwd
+.RS 4
+Informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account utente\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informazioni sicure sugli account di gruppo\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBnewgrp\fR(1),
+\fBsu\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/it/man1/su.1 b/man/it/man1/su.1
new file mode 100644
index 0000000..5b719a3
--- /dev/null
+++ b/man/it/man1/su.1
@@ -0,0 +1,448 @@
+'\" t
+.\" Title: su
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi utente
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "SU" "1" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi utente"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+su \- cambia ID utente o diventa amministratore
+.SH "SINOSSI"
+.HP \w'\fBsu\fR\ 'u
+\fBsu\fR [\fIopzioni\fR] [\fI\-\fR] [\fInome\fR\ [\ \fIargs\fR\ ]]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBsu\fR
+command is used to become another user during a login session\&. Invoked without a
+\fBusername\fR,
+\fBsu\fR
+defaults to becoming the superuser\&. The
+\fB\-\fR
+option may be used to provide an environment similar to what the user would expect had the user logged in directly\&. The
+\fB\-c\fR
+option may be used to treat the next argument as a command by most shells\&.
+.PP
+Options are recognized everywhere in the argument list\&. You can use the
+\fB\-\-\fR
+argument to stop option parsing\&. The
+\fB\-\fR
+option is special: it is also recognized after
+\fB\-\-\fR, but has to be placed before
+\fBusername\fR\&.
+.PP
+All\*(Aqutente viene quindi chiesta la password, se necessario\&. Una password errata viene segnalata da un messaggio d\*(Aqerrore\&. Viene effettuato il log di tutti i tentativi, siano essi riusciti o meno, al fine di rilevare ogni abuso del sistema\&.
+.PP
+The current environment is passed to the new shell\&. The value of
+\fB$PATH\fR
+is reset to
+/bin:/usr/bin
+for normal users, or
+/sbin:/bin:/usr/sbin:/usr/bin
+for the superuser\&. This may be changed with the
+\fBENV_PATH\fR
+and
+\fBENV_SUPATH\fR
+definitions in
+/etc/login\&.defs\&.
+.PP
+Un sottosistema di login \(`e indicato dalla presenza del carattere \(Fo*\(Fc all\*(Aqinizio della shell di login\&. La directory home impostata sar\(`a utilizzata come root di un nuovo file system al quale l\*(Aqutente accede\&.
+.SH "OPZIONI"
+.PP
+The options which apply to the
+\fBsu\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-command\fR\ \&\fICOMMAND\fR
+.RS 4
+Specify a command that will be invoked by the shell using its
+\fB\-c\fR\&.
+.sp
+The executed command will have no controlling terminal\&. This option cannot be used to execute interactive programs which need a controlling TTY\&.
+.RE
+.PP
+\fB\-\fR, \fB\-l\fR, \fB\-\-login\fR
+.RS 4
+Fornisce un ambiente simile a quello che un utente si attende quando effettua direttamente il login\&.
+.sp
+When
+\fB\-\fR
+is used, it must be specified before any
+\fBusername\fR\&. For portability it is recommended to use it as last option, before any
+\fBusername\fR\&. The other forms (\fB\-l\fR
+and
+\fB\-\-login\fR) do not have this restriction\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+La shell che verr\(`a invocata\&.
+.sp
+The invoked shell is chosen from (highest priority first):
+.PP
+.RS 4
+The shell specified with \-\-shell\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-preserve\-environment\fR
+is used, the shell specified by the
+\fB$SHELL\fR
+environment variable\&.
+.RE
+.PP
+.RS 4
+The shell indicated in the
+/etc/passwd
+entry for the target user\&.
+.RE
+.PP
+.RS 4
+/bin/sh
+if a shell could not be found by any above method\&.
+.RE
+.sp
+If the target user has a restricted shell (i\&.e\&. the shell field of this user\*(Aqs entry in
+/etc/passwd
+is not listed in
+/etc/shells), then the
+\fB\-\-shell\fR
+option or the
+\fB$SHELL\fR
+environment variable won\*(Aqt be taken into account, unless
+\fBsu\fR
+is called by root\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-p\fR, \fB\-\-preserve\-environment\fR
+.RS 4
+Preserve the current environment, except for:
+.PP
+\fB$PATH\fR
+.RS 4
+reset according to the
+/etc/login\&.defs
+options
+\fBENV_PATH\fR
+or
+\fBENV_SUPATH\fR
+(see below);
+.RE
+.PP
+\fB$IFS\fR
+.RS 4
+reset to
+\(Fo<space><tab><newline>\(Fc, if it was set\&.
+.RE
+.sp
+If the target user has a restricted shell, this option has no effect (unless
+\fBsu\fR
+is called by root)\&.
+.sp
+Note that the default behavior for the environment is the following:
+.PP
+.RS 4
+The
+\fB$HOME\fR,
+\fB$SHELL\fR,
+\fB$USER\fR,
+\fB$LOGNAME\fR,
+\fB$PATH\fR, and
+\fB$IFS\fR
+environment variables are reset\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is not used, the environment is copied, except for the variables above\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, the
+\fB$TERM\fR,
+\fB$COLORTERM\fR,
+\fB$DISPLAY\fR, and
+\fB$XAUTHORITY\fR
+environment variables are copied if they were set\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, the
+\fB$TZ\fR,
+\fB$HZ\fR, and
+\fB$MAIL\fR
+environment variables are set according to the
+/etc/login\&.defs
+options
+\fBENV_TZ\fR,
+\fBENV_HZ\fR,
+\fBMAIL_DIR\fR, and
+\fBMAIL_FILE\fR
+(see below)\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, other environment variables might be set by the
+\fBENVIRON_FILE\fR
+file (see below)\&.
+.RE
+.sp
+.RE
+.SH "AVVISI/CAVEAT"
+.PP
+This version of
+\fBsu\fR
+has many compilation options, only some of which may be in use at any particular site\&.
+.SH "CONFIGURAZIONE"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+Se definito, o il percorso completo di un file che contiene l\*(Aqelenco di nomi di device (uno per riga) oppure un elenco di nomi di device separati da \(Fo:\(Fc\&. L\*(Aqaccesso come root verr\(`a permesso solo attraverso questi device\&.
+.sp
+Se non definito, root potr\(`a accedere da qualsiasi device\&.
+.sp
+Il nome di device deve essere specificato senza il prefisso /dev\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\*(Aqs supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Indica se permettere l\*(Aqaccesso al sistema anche se non si pu\(`o accedere alla directory home\&. Il valore predefinito \(`e no\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+Se questo file esiste ed \(`e leggibile, l\*(Aqambiente di login viene letto da l\(`i\&. Ogni riga deve essere nella forma nome=valore\&.
+.sp
+Le righe che iniziano con \(Fo#\(Fc sono trattate come commenti e ignorate\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value is a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value is a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/sbin:/bin:/usr/sbin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+Il testo da utilizzare per richiedere la password\&. Il valore predefinito \(`e \(FoPassword: \(Fc o una sua traduzione\&. Se si imposta questa variabile allora il testo non verr\(`a tradotto\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+Abilita la verifica e stampa a video dello stato della casella di posta al momento dell\*(Aqaccesso al sistema\&.
+.sp
+Andrebbe disabilitato se i file di avvio della shell effettuano gi\(`a questo controllo (\(Fomailx \-e\(Fc o equivalente)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+La directory di spool per la posta\&. Questa \(`e necessaria per manipolare la casella di posta quando il corrispondente account utente viene modificato o cancellato\&. Se non \(`e specificata viene utilizzato un valore impostato al momento della compilazione\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Imposta la posizione delle caselle di posta degli utenti relative alla loro directory home\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of resource limits from
+/etc/limits
+and ulimit, umask, and niceness from the user\*(Aqs passwd gecos field\&.
+.RE
+.PP
+\fBSULOG_FILE\fR (string)
+.RS 4
+Se definito, tutta l\*(Aqattivit\(`a di \(Fosu\(Fc viene tracciata in questo file\&.
+.RE
+.PP
+\fBSU_NAME\fR (string)
+.RS 4
+Se definito \(`e il nome del comando da mostrare quando si esegue \(Fosu \-\(Fc\&. Ad esempio, se lo di definisce come \(Fosu\(Fc allora \(Fops\(Fc mostrer\(`a che il comando \(`e \(Fo\-su\(Fc\&. Se non definito, \(Fops\(Fc mostrer\(`a il nome della shell invocata, come \(Fo\-sh\(Fc\&.
+.RE
+.PP
+\fBSU_WHEEL_ONLY\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the user must be listed as a member of the first gid 0 group in
+/etc/group
+(called
+\fIroot\fR
+on most Linux systems) to be able to
+\fBsu\fR
+to uid 0 accounts\&. If the group doesn\*(Aqt exist or is empty, no one will be able to
+\fBsu\fR
+to uid 0\&.
+.RE
+.PP
+\fBSYSLOG_SU_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsu\fR
+activity \- in addition to sulog file logging\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Abilita l\*(Aqimpostazione dei bit di gruppo di umask in modo che siano gli stessi dei bit del proprietario (esempio: 022 \-> 002, 077 \-> 007) per utenti non root a condizione che uid e gid siano identici e che il nome utente sia lo stesso del gruppo primario\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FILE"
+.PP
+/etc/passwd
+.RS 4
+Informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account utente\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configurazione del pacchetto password shadow
+.RE
+.SH "VALORI RESTITUITI"
+.PP
+On success,
+\fBsu\fR
+returns the exit value of the command it executed\&.
+.PP
+If this command was terminated by a signal,
+\fBsu\fR
+returns the number of this signal plus 128\&.
+.PP
+If su has to kill the command (because it was asked to terminate, and the command did not terminate in time),
+\fBsu\fR
+returns 255\&.
+.PP
+Some exit values from
+\fBsu\fR
+are independent from the executed command:
+.PP
+\fI0\fR
+.RS 4
+success (\fB\-\-help\fR
+only)
+.RE
+.PP
+\fI1\fR
+.RS 4
+System or authentication failure
+.RE
+.PP
+\fI126\fR
+.RS 4
+The requested command was not found
+.RE
+.PP
+\fI127\fR
+.RS 4
+The requested command could not be executed
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBlogin\fR(1),
+\fBlogin.defs\fR(5),
+\fBsg\fR(1),
+\fBsh\fR(1)\&.
diff --git a/man/it/man3/getspnam.3 b/man/it/man3/getspnam.3
new file mode 100644
index 0000000..cd473da
--- /dev/null
+++ b/man/it/man3/getspnam.3
@@ -0,0 +1 @@
+.so man3/shadow.3
diff --git a/man/it/man3/shadow.3 b/man/it/man3/shadow.3
new file mode 100644
index 0000000..0b373f7
--- /dev/null
+++ b/man/it/man3/shadow.3
@@ -0,0 +1,245 @@
+'\" t
+.\" Title: shadow
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Chiamate di libreria
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "SHADOW" "3" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Chiamate di libreria"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+shadow, getspnam \- routine per file delle password cifrate
+.SH "SINTASSI"
+.PP
+\fI#include <shadow\&.h>\fR
+.PP
+\fIstruct spwd *getspent();\fR
+.PP
+\fIstruct spwd *getspnam(char\fR
+\fI*nome\fR\fI);\fR
+.PP
+\fIvoid setspent();\fR
+.PP
+\fIvoid endspent();\fR
+.PP
+\fIstruct spwd *fgetspent(FILE\fR
+\fI*fp\fR\fI);\fR
+.PP
+\fIstruct spwd *sgetspent(char\fR
+\fI*cp\fR\fI);\fR
+.PP
+\fIint putspent(struct spwd\fR
+\fI*p,\fR
+\fIFILE\fR
+\fI*fp\fR\fI);\fR
+.PP
+\fIint lckpwdf();\fR
+.PP
+\fIint ulckpwdf();\fR
+.SH "DESCRIZIONE"
+.PP
+\fIshadow\fR
+manipulates the contents of the shadow password file,
+/etc/shadow\&. The structure in the
+\fI#include\fR
+file is:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct spwd {
+ char *sp_namp; /* user login name */
+ char *sp_pwdp; /* encrypted password */
+ long int sp_lstchg; /* last password change */
+ long int sp_min; /* days until change allowed\&. */
+ long int sp_max; /* days before change required */
+ long int sp_warn; /* days warning for expiration */
+ long int sp_inact; /* days before account inactive */
+ long int sp_expire; /* date when account expires */
+ unsigned long int sp_flag; /* reserved for future use */
+}
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Ciascun campo significa:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_namp \- puntatore a una stringa null\-terminated che contiene il nome utente\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_pwdp \- puntatore a una stringa null\-terminated che contiene la password\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_lstchg \- giorni trascorsi dal 1 gennaio 1970 al momento in cui la password \(`e stata cambiata l\*(Aqultima volta\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_min \- giorni prima dei quali la password non pu\(`o essere cambiata\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_max \- giorni dopo i quali la password deve essere cambiata\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_warn \- giorni prima della scadenza della password in cui l\*(Aqutente viene avvertito\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_inact \- giorni dopo la scadenza della password dopo i quali l\*(Aqaccount viene considerato inattivo e disabilitato\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_expire \- giorni a partire dal 1 gennaio 1970 dopo i quali l\*(Aqaccount viene disabilitato\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_flag \- riservato per uso futuro\&.
+.RE
+.SH "DESCRIZIONE"
+.PP
+\fIgetspent\fR,
+\fIgetspname\fR,
+\fIfgetspent\fR, and
+\fIsgetspent\fR
+each return a pointer to a
+\fIstruct spwd\fR\&.
+\fIgetspent\fR
+returns the next entry from the file, and
+\fIfgetspent\fR
+returns the next entry from the given stream, which is assumed to be a file of the proper format\&.
+\fIsgetspent\fR
+returns a pointer to a
+\fIstruct spwd\fR
+using the provided string as input\&.
+\fIgetspnam\fR
+searches from the current position in the file for an entry matching
+\fIname\fR\&.
+.PP
+\fIsetspent\fR
+and
+\fIendspent\fR
+may be used to begin and end, respectively, access to the shadow password file\&.
+.PP
+The
+\fIlckpwdf\fR
+and
+\fIulckpwdf\fR
+routines should be used to insure exclusive access to the
+/etc/shadow
+file\&.
+\fIlckpwdf\fR
+attempts to acquire a lock using
+\fIpw_lock\fR
+for up to 15 seconds\&. It continues by attempting to acquire a second lock using
+\fIspw_lock\fR
+for the remainder of the initial 15 seconds\&. Should either attempt fail after a total of 15 seconds,
+\fIlckpwdf\fR
+returns \-1\&. When both locks are acquired 0 is returned\&.
+.SH "DIAGNOSTICA"
+.PP
+Routines return NULL if no more entries are available or if an error occurs during processing\&. Routines which have
+\fIint\fR
+as the return value return 0 for success and \-1 for failure\&.
+.SH "AVVISI/CAVEAT"
+.PP
+Queste funzioni possono essere usate solo dall\*(Aqamministratore, perch\('e l\*(Aqaccesso al file delle password shadow \(`e riservato\&.
+.SH "FILE"
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account utente\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBgetpwent\fR(3),
+\fBshadow\fR(5)\&.
diff --git a/man/it/man5/faillog.5 b/man/it/man5/faillog.5
new file mode 100644
index 0000000..157d85f
--- /dev/null
+++ b/man/it/man5/faillog.5
@@ -0,0 +1,64 @@
+'\" t
+.\" Title: faillog
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Formati di file e conversioni
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "FAILLOG" "5" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Formati di file e conversioni"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+faillog \- file di log degli accessi falliti
+.SH "DESCRIZIONE"
+.PP
+/var/log/faillog
+maintains a count of login failures and the limits for each account\&.
+.PP
+Questo file \(`e composto da record di lunghezza fissa, indicizzati dal valore numerico di UID\&. Ciascun record contiene il conteggio degli accessi falliti a partire dall\*(Aqultimo login corretto, il numero massimo di tentativi permessi prima che l\*(Aqaccount venga disabilitato, il terminale sul quale l\*(Aqultimo tentativo fallito \(`e avvenuto, la data in cui \(`e avvenuto, e infine il periodo (in secondi) durante il quale l\*(Aqaccount verr\(`a bloccato a seguito di un fallimento\&.
+.PP
+La struttura del file \(`e la seguente:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct faillog {
+ short fail_cnt;
+ short fail_max;
+ char fail_line[12];
+ time_t fail_time;
+ long fail_locktime;
+};
+.fi
+.if n \{\
+.RE
+.\}
+.SH "FILE"
+.PP
+/var/log/faillog
+.RS 4
+File per tracciare gli accessi falliti\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBfaillog\fR(8)
diff --git a/man/it/man5/gshadow.5 b/man/it/man5/gshadow.5
new file mode 100644
index 0000000..5417f08
--- /dev/null
+++ b/man/it/man5/gshadow.5
@@ -0,0 +1,101 @@
+'\" t
+.\" Title: gshadow
+.\" Author: Nicolas Fran\(,cois <nicolas.francois@centraliens.net>
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Formati di file e conversioni
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "GSHADOW" "5" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Formati di file e conversioni"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+gshadow \- file shadow per i gruppi
+.SH "DESCRIZIONE"
+.PP
+/etc/gshadow
+contains the shadowed information for group accounts\&.
+.PP
+Questo file non deve essere leggibile dagli utenti normali se si vuole mantenere la sicurezza sulle password\&.
+.PP
+Ogni riga di questo file contiene questi campi separati da due punti:
+.PP
+\fBnome del gruppo\fR
+.RS 4
+Deve essere un nome di gruppo valido, che esista nel sistema\&.
+.RE
+.PP
+\fBpassword cifrata\fR
+.RS 4
+Refer to
+\fBcrypt\fR(3)
+for details on how this string is interpreted\&.
+.sp
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), for instance ! or *, users will not be able to use a unix password to access the group (but group members do not need the password)\&.
+.sp
+The password is used when a user who is not a member of the group wants to gain the permissions of this group (see
+\fBnewgrp\fR(1))\&.
+.sp
+Questo campo pu\(`o essere vuoto, nel qual caso solo i membri del gruppo possono ottenere i permessi del gruppo\&.
+.sp
+A password field which starts with an exclamation mark means that the password is locked\&. The remaining characters on the line represent the password field before the password was locked\&.
+.sp
+This password supersedes any password specified in
+/etc/group\&.
+.RE
+.PP
+\fBamministratori\fR
+.RS 4
+Deve essere una lista di nomi utente separati da virgole\&.
+.sp
+Gli amministratori possono cambiare la password o i membri del gruppo\&.
+.sp
+Gli amministratori hanno anche gli stessi permessi dei membri (vedere sotto),
+.RE
+.PP
+\fBmembri\fR
+.RS 4
+Deve essere una lista di nomi utente separati da virgole\&.
+.sp
+I membri possono accedere al gruppo senza che ne sia richiesta la password\&.
+.sp
+You should use the same list of users as in
+/etc/group\&.
+.RE
+.SH "FILE"
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informazioni sicure sugli account di gruppo\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBgpasswd\fR(5),
+\fBgroup\fR(5),
+\fBgrpck\fR(8),
+\fBgrpconv\fR(8),
+\fBnewgrp\fR(1)\&.
diff --git a/man/it/man5/limits.5 b/man/it/man5/limits.5
new file mode 100644
index 0000000..491cf33
--- /dev/null
+++ b/man/it/man5/limits.5
@@ -0,0 +1,274 @@
+'\" t
+.\" Title: limits
+.\" Author: Luca Berra
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Formati di file e conversioni
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "LIMITS" "5" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Formati di file e conversioni"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+limits \- definizione dei limiti di risorsa
+.SH "DESCRIZIONE"
+.PP
+The
+\fIlimits\fR
+file (/etc/limits
+by default or LIMITS_FILE defined
+config\&.h) describes the resource limits you wish to impose\&. It should be owned by root and readable by root account only\&.
+.PP
+In maniera predefinita non c\*(Aq\(`e nessun limite alla quota di \(Foroot\(Fc\&. In effetti non c\*(Aq\(`e nessun modo per imporre una quota massima tramite questa procedura agli account equivalenti a root (cio\(`e tutti quelli con UID 0)\&.
+.PP
+Ogni riga descrive un limite per l\*(Aqutente in questo formato:
+.PP
+\fIutente TESTO_LIMITE\fR
+.PP
+oppure nel formato:
+.PP
+\fI@gruppo TESTO_LIMITE\fR
+.PP
+The
+\fILIMITS_STRING\fR
+is a string of a concatenated list of resource limits\&. Each limit consists of a letter identifier followed by a numerical limit\&.
+.PP
+Gli identificatori validi sono:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+A: spazio massimo di indirizzamento (kB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+C: dimensione massima dei file \(Focore\(Fc (kB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+D: spazio massimo per i dati (kB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+F: maximum file size (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+K: file creation mask, set by
+\fBumask\fR(2)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+I: massimo valore di \(Fonice\(Fc (0\&.\&.39 che viene tradotto in 20\&.\&.\-19)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+L: massimo numero di accessi per questo utente
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+M: massima quantit\(`a di memoria bloccata (della quale non si pu\(`o fare \(Foswap\(Fc) (kB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+N: numero massimo di file aperti
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+O: massima priorit\(`a \(Foreal time\(Fc
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+P: process priority, set by
+\fBsetpriority\fR(2)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+R: massimo \(Foresident set size\(Fc (kB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+S: dimensione massima della pila (kB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+T: quantit\(`a massima di tempo CPU (MIN)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+U: massimo numero di processi
+.RE
+.PP
+For example,
+\fIL2D2048N5\fR
+is a valid
+\fILIMITS_STRING\fR\&. For reading convenience, the following entries are equivalent:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ username L2D2048N5
+ username L2 D2048 N5
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Be aware that after
+\fIusername\fR
+the rest of the line is considered a limit string, thus comments are not allowed\&. An invalid limits string will be rejected (not considered) by the
+\fBlogin\fR
+program\&.
+.PP
+The default entry is denoted by username "\fI*\fR"\&. If you have multiple
+\fIdefault\fR
+entries in your
+\fILIMITS_FILE\fR, then the last one will be used as the default entry\&.
+.PP
+The limits specified in the form "\fI@group\fR" apply to the members of the specified
+\fIgroup\fR\&.
+.PP
+If more than one line with limits for a user exist, only the first line for this user will be considered\&.
+.PP
+If no lines are specified for a user, the last
+\fI@group\fR
+line matching a group whose the user is a member of will be considered, or the last line with default limits if no groups contain the user\&.
+.PP
+To completely disable limits for a user, a single dash "\fI\-\fR" will do\&.
+.PP
+To disable a limit for a user, a single dash "\fI\-\fR" can be used instead of the numerical value for this limit\&.
+.PP
+Notare inoltre che tutte queste impostazioni sono effettuate ad ogni accesso\&. Non si tratta di impostazioni globali n\('e permanenti\&. Forse limiti globali saranno possibili in futuro, ma per ora devono bastare questi ;)
+.SH "FILE"
+.PP
+/etc/limits
+.RS 4
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBlogin\fR(1),
+\fBsetpriority\fR(2),
+\fBsetrlimit\fR(2)\&.
diff --git a/man/it/man5/login.access.5 b/man/it/man5/login.access.5
new file mode 100644
index 0000000..2af15c1
--- /dev/null
+++ b/man/it/man5/login.access.5
@@ -0,0 +1,67 @@
+'\" t
+.\" Title: login.access
+.\" Author: Marek Micha\(/lkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Formati di file e conversioni
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "LOGIN\&.ACCESS" "5" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Formati di file e conversioni"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+login.access \- tabella di controllo accessi
+.SH "DESCRIZIONE"
+.PP
+The
+\fIlogin\&.access\fR
+file specifies (user, host) combinations and/or (user, tty) combinations for which a login will be either accepted or refused\&.
+.PP
+When someone logs in, the
+\fIlogin\&.access\fR
+is scanned for the first entry that matches the (user, host) combination, or, in case of non\-networked logins, the first entry that matches the (user, tty) combination\&. The permissions field of that table entry determines whether the login will be accepted or refused\&.
+.PP
+Ogni riga della tabella di controllo degli accessi ha tre campi separati dal carattere \(Fo:\(Fc:
+.PP
+\fIpermission\fR:\fIusers\fR:\fIorigins\fR
+.PP
+The first field should be a "\fI+\fR" (access granted) or "\fI\-\fR" (access denied) character\&. The second field should be a list of one or more login names, group names, or
+\fIALL\fR
+(always matches)\&. The third field should be a list of one or more tty names (for non\-networked logins), host names, domain names (begin with "\&."), host addresses, internet network numbers (end with "\&."),
+\fIALL\fR
+(always matches) or
+\fILOCAL\fR
+(matches any string that does not contain a "\&." character)\&. If you run NIS you can use @netgroupname in host or user patterns\&.
+.PP
+The
+\fIEXCEPT\fR
+operator makes it possible to write very compact rules\&.
+.PP
+La ricerca nel file dei gruppi avviene solo quando il nome non corrisponde a quello dell\*(Aqutente che accede\&. I gruppi che possono corrispondere sono solo quelli nei quali l\*(Aqutente \(`e esplicitamente elencato: il programma non controlla l\*(Aqid del gruppo primario dell\*(Aqutente\&.
+.SH "FILE"
+.PP
+/etc/login\&.defs
+.RS 4
+Configurazione del pacchetto password shadow
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBlogin\fR(1)\&.
diff --git a/man/it/man5/login.defs.5 b/man/it/man5/login.defs.5
new file mode 100644
index 0000000..970ed4a
--- /dev/null
+++ b/man/it/man5/login.defs.5
@@ -0,0 +1,854 @@
+'\" t
+.\" Title: login.defs
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Formati di file e conversioni
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "LOGIN\&.DEFS" "5" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Formati di file e conversioni"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+login.defs \- configurazione del pacchetto password shadow
+.SH "DESCRIZIONE"
+.PP
+The
+/etc/login\&.defs
+file defines the site\-specific configuration for the shadow password suite\&. This file is required\&. Absence of this file will not prevent system operation, but will probably result in undesirable operation\&.
+.PP
+Questo file \(`e un file di testo leggibile nel quale ogni riga descrive un parametro di configurazione\&. Le righe consistono di una coppia nome valore separati da spazi\&. Le righe vuote e di commento sono ignorate\&. I commenti iniziano con con il simbolo "#" che deve essere il primo carattere diverso da spazio della riga\&.
+.PP
+Parameter values may be of four types: strings, booleans, numbers, and long numbers\&. A string is comprised of any printable characters\&. A boolean should be either the value
+\fIyes\fR
+or
+\fIno\fR\&. An undefined boolean parameter or one with a value other than these will be given a
+\fIno\fR
+value\&. Numbers (both regular and long) may be either decimal values, octal values (precede the value with
+\fI0\fR) or hexadecimal values (precede the value with
+\fI0x\fR)\&. The maximum value of the regular and long numeric parameters is machine\-dependent\&.
+.PP
+Sono forniti i seguenti parametri di configurazione:
+.PP
+\fBCHFN_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchfn\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCHFN_RESTRICT\fR (string)
+.RS 4
+This parameter specifies which values in the
+\fIgecos\fR
+field of the
+/etc/passwd
+file may be changed by regular users using the
+\fBchfn\fR
+program\&. It can be any combination of letters
+\fIf\fR,
+\fIr\fR,
+\fIw\fR,
+\fIh\fR, for Full name, Room number, Work phone, and Home phone, respectively\&. For backward compatibility,
+\fIyes\fR
+is equivalent to
+\fIrwh\fR
+and
+\fIno\fR
+is equivalent to
+\fIfrwh\fR\&. If not specified, only the superuser can make any changes\&. The most restrictive setting is better achieved by not installing
+\fBchfn\fR
+SUID\&.
+.RE
+.PP
+\fBCHSH_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchsh\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+Se definito, o il percorso completo di un file che contiene l\*(Aqelenco di nomi di device (uno per riga) oppure un elenco di nomi di device separati da \(Fo:\(Fc\&. L\*(Aqaccesso come root verr\(`a permesso solo attraverso questi device\&.
+.sp
+Se non definito, root potr\(`a accedere da qualsiasi device\&.
+.sp
+Il nome di device deve essere specificato senza il prefisso /dev\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\*(Aqs supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBCREATE_HOME\fR (boolean)
+.RS 4
+Indica se per i nuovi utenti va creata la directory home\&.
+.sp
+Questa impostazione non viene applicata agli utenti di sistema e pu\(`o essere modificata sulla riga di comando\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Indica se permettere l\*(Aqaccesso al sistema anche se non si pu\(`o accedere alla directory home\&. Il valore predefinito \(`e no\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+Definisce l\*(Aqalgoritmo di cifratura predefinito per le password (se non ne viene specificato uno a riga di comando)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value is a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value is a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/sbin:/bin:/usr/sbin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+Se questo file esiste ed \(`e leggibile, l\*(Aqambiente di login viene letto da l\(`i\&. Ogni riga deve essere nella forma nome=valore\&.
+.sp
+Le righe che iniziano con \(Fo#\(Fc sono trattate come commenti e ignorate\&.
+.RE
+.PP
+\fBERASECHAR\fR (number)
+.RS 4
+Terminal ERASE character (\fI010\fR
+= backspace,
+\fI0177\fR
+= DEL)\&.
+.sp
+Il valore deve avere il prefisso \(Fo0\(Fc se in ottale, o \(Fo0x\(Fc se esadecimale\&.
+.RE
+.PP
+\fBFAIL_DELAY\fR (number)
+.RS 4
+Numero di secondi prima che venga concesso un ulteriore tentativo dopo un accesso fallito\&.
+.RE
+.PP
+\fBFAILLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of
+/var/log/faillog
+login failure info\&.
+.RE
+.PP
+\fBFAKE_SHELL\fR (string)
+.RS 4
+If set,
+\fBlogin\fR
+will execute this shell instead of the users\*(Aq shell specified in
+/etc/passwd\&.
+.RE
+.PP
+\fBFTMP_FILE\fR (string)
+.RS 4
+Se impostato, gli accessi falliti verranno tracciati in questo file nel formato utmp\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBGID_MIN\fR
+(resp\&.
+\fBGID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBHOME_MODE\fR (number)
+.RS 4
+The mode for new home directories\&. If not specified, the
+\fBUMASK\fR
+is used to create the mode\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this to set the mode of the home directory they create\&.
+.RE
+.PP
+\fBHUSHLOGIN_FILE\fR (string)
+.RS 4
+Se definito, questo file inibisce quanto stampato durante l\*(Aqaccesso\&. Se viene specificato un percorso completo, la modalit\(`a silenziosa (hushed) viene attivata se in quel file \(`e presente il nome dell\*(Aqutente o della shell dell\*(Aqutente\&. Se il percorso non \(`e completo, allora la modalit\(`a silenziosa viene attivata se quel file \(`e presente nella directory home dell\*(Aqutente\&.
+.RE
+.PP
+\fBISSUE_FILE\fR (string)
+.RS 4
+Se definito, il file verr\(`a mostrato prima del prompt di login\&.
+.RE
+.PP
+\fBKILLCHAR\fR (number)
+.RS 4
+Terminal KILL character (\fI025\fR
+= CTRL/U)\&.
+.sp
+Il valore deve avere il prefisso \(Fo0\(Fc se in ottale, o \(Fo0x\(Fc se esadecimale\&.
+.RE
+.PP
+\fBLASTLOG_ENAB\fR (boolean)
+.RS 4
+Abilita la memorizzazione e la stampa delle informazioni sulle date degli ultimi accessi in /var/log/lastlog\&.
+.RE
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.PP
+\fBLOG_OK_LOGINS\fR (boolean)
+.RS 4
+Abilita la tracciatura degli accessi avvenuti con successo\&.
+.RE
+.PP
+\fBLOG_UNKFAIL_ENAB\fR (boolean)
+.RS 4
+Abilita l\*(Aqinclusione dei nomi utente sconosciuti quando si registrano gli accessi falliti\&.
+.sp
+Nota: memorizzare i nomi sconosciuti potrebbe diventare un problema legato alla sicurezza se un utente inserisce la propria password al posto del nome utente\&.
+.RE
+.PP
+\fBLOGIN_RETRIES\fR (number)
+.RS 4
+Massimo numero di tentativi di accesso per password errata\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+Il testo da utilizzare per richiedere la password\&. Il valore predefinito \(`e \(FoPassword: \(Fc o una sua traduzione\&. Se si imposta questa variabile allora il testo non verr\(`a tradotto\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.PP
+\fBLOGIN_TIMEOUT\fR (number)
+.RS 4
+Numero massimo di secondi per l\*(Aqaccesso\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+Abilita la verifica e stampa a video dello stato della casella di posta al momento dell\*(Aqaccesso al sistema\&.
+.sp
+Andrebbe disabilitato se i file di avvio della shell effettuano gi\(`a questo controllo (\(Fomailx \-e\(Fc o equivalente)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+La directory di spool per la posta\&. Questa \(`e necessaria per manipolare la casella di posta quando il corrispondente account utente viene modificato o cancellato\&. Se non \(`e specificata viene utilizzato un valore impostato al momento della compilazione\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Imposta la posizione delle caselle di posta degli utenti relative alla loro directory home\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Il valore predefinito \(`e 0, che non pone nessun limite al numero di membri per gruppo\&.
+.sp
+Questa opzione (dividi gruppo) permette di limitare la lunghezza delle righe nel file \(Fogroup\(Fc\&. Questo \(`e utile per essere certi che le righe per gruppi NIS non eccedano i 1024 caratteri\&.
+.sp
+Se si deve impostare questo limite, si pu\(`o usare 25\&.
+.sp
+Nota: la divisione dei gruppi potrebbe non essere supportata da ogni strumento (anche all\*(Aqinterno del pacchetto Shadow)\&. Non si dovrebbe utilizzare questa variabile a meno di esserci forzati\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBMOTD_FILE\fR (string)
+.RS 4
+Se definito \(`e una lista di nomi di file con \(Fomessaggi del giorno\(Fc separati da \(Fo:\(Fc che vengono mostrati subito dopo l\*(Aqaccesso\&.
+.RE
+.PP
+\fBNOLOGINS_FILE\fR (string)
+.RS 4
+Se definito \(`e il nome di un file che impedisce l\*(Aqaccesso degli utenti non root\&. Il suo contenuto dovrebbe essere un messaggio che indica il motivo per il quale l\*(Aqaccesso \(`e impedito\&.
+.RE
+.PP
+\fBOBSCURE_CHECKS_ENAB\fR (boolean)
+.RS 4
+Abilita controlli addizionali durante il cambio password\&.
+.RE
+.PP
+\fBPASS_ALWAYS_WARN\fR (boolean)
+.RS 4
+Avvisa riguardo password deboli (anche se le permette egualmente) se si \(`e root\&.
+.RE
+.PP
+\fBPASS_CHANGE_TRIES\fR (number)
+.RS 4
+Massimo numero di tentativi per cambiare una password (troppo facile)\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+Il numero massimo di giorni che una password pu\(`o essere utilizzata\&. Se la password \(`e pi\(`u vecchia verr\(`a imposto il suo cambiamento\&. Se non specificato viene assunto \-1 (che disabilita questo controllo)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+Il numero minimo di giorni tra due cambiamenti di password\&. Ogni tentativo di cambiare la password prima di questo periodo verr\(`a rifiutato\&. Se non specificato viene assunto \-1 (che disabilita questo controllo)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+Il numero di giorni per i quali un utente va avvisato che la sua password sta per scadere\&. Se zero l\*(Aqutente viene avvisato solo alla scadenza\&. Un valore negativo indica che non si deve avvisare mai\&. Se non specificato allora non c\*(Aq\(`e nessun avviso\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR,
+\fBPASS_MIN_DAYS\fR
+and
+\fBPASS_WARN_AGE\fR
+are only used at the time of account creation\&. Any changes to these settings won\*(Aqt affect existing accounts\&.
+.PP
+\fBPASS_MAX_LEN\fR (number), \fBPASS_MIN_LEN\fR (number)
+.RS 4
+Number of significant characters in the password for crypt()\&.
+\fBPASS_MAX_LEN\fR
+is 8 by default\&. Don\*(Aqt change unless your crypt() is better\&. This is ignored if
+\fBMD5_CRYPT_ENAB\fR
+set to
+\fIyes\fR\&.
+.RE
+.PP
+\fBPORTTIME_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable checking of time restrictions specified in
+/etc/porttime\&.
+.RE
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of resource limits from
+/etc/limits
+and ulimit, umask, and niceness from the user\*(Aqs passwd gecos field\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+Con molti cicli \(`e pi\(`u difficile trovare una password usando la forza bruta\&. Ma va notato che \(`e richiesta maggiore potenza di calcolo per autenticare gli utenti\&.
+.sp
+Se non specificato sar\(`a la libc a scegliere il numero di cicli (5000)\&.
+.sp
+Il valore deve essere compreso tra 1\&.000 e 999\&.999\&.999\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.PP
+\fBSULOG_FILE\fR (string)
+.RS 4
+Se definito, tutta l\*(Aqattivit\(`a di \(Fosu\(Fc viene tracciata in questo file\&.
+.RE
+.PP
+\fBSU_NAME\fR (string)
+.RS 4
+Se definito \(`e il nome del comando da mostrare quando si esegue \(Fosu \-\(Fc\&. Ad esempio, se lo di definisce come \(Fosu\(Fc allora \(Fops\(Fc mostrer\(`a che il comando \(`e \(Fo\-su\(Fc\&. Se non definito, \(Fops\(Fc mostrer\(`a il nome della shell invocata, come \(Fo\-sh\(Fc\&.
+.RE
+.PP
+\fBSU_WHEEL_ONLY\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the user must be listed as a member of the first gid 0 group in
+/etc/group
+(called
+\fIroot\fR
+on most Linux systems) to be able to
+\fBsu\fR
+to uid 0 accounts\&. If the group doesn\*(Aqt exist or is empty, no one will be able to
+\fBsu\fR
+to uid 0\&.
+.RE
+.PP
+\fBSUB_GID_MIN\fR (number), \fBSUB_GID_MAX\fR (number), \fBSUB_GID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate group IDs) allocate
+\fBSUB_GID_COUNT\fR
+unused group IDs from the range
+\fBSUB_GID_MIN\fR
+to
+\fBSUB_GID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR,
+\fBSUB_GID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSUB_UID_MIN\fR (number), \fBSUB_UID_MAX\fR (number), \fBSUB_UID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate user IDs) allocate
+\fBSUB_UID_COUNT\fR
+unused user IDs from the range
+\fBSUB_UID_MIN\fR
+to
+\fBSUB_UID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR,
+\fBSUB_UID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_GID_MIN\fR
+(resp\&.
+\fBSYS_GID_MAX\fR) is 101 (resp\&.
+\fBGID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_UID_MIN\fR
+(resp\&.
+\fBSYS_UID_MAX\fR) is 101 (resp\&.
+\fBUID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.PP
+\fBSYSLOG_SU_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsu\fR
+activity \- in addition to sulog file logging\&.
+.RE
+.PP
+\fBTTYGROUP\fR (string), \fBTTYPERM\fR (string)
+.RS 4
+The terminal permissions: the login tty will be owned by the
+\fBTTYGROUP\fR
+group, and the permissions will be set to
+\fBTTYPERM\fR\&.
+.sp
+By default, the ownership of the terminal is set to the user\*(Aqs primary group and the permissions are set to
+\fI0600\fR\&.
+.sp
+\fBTTYGROUP\fR
+can be either the name of a group or a numeric group identifier\&.
+.sp
+If you have a
+\fBwrite\fR
+program which is "setgid" to a special group which owns the terminals, define TTYGROUP to the group number and TTYPERM to 0620\&. Otherwise leave TTYGROUP commented out and assign TTYPERM to either 622 or 600\&.
+.RE
+.PP
+\fBTTYTYPE_FILE\fR (string)
+.RS 4
+Se definito si tratta di un file che mappa le linee tty nella variabile d\*(Aqambiente TERM\&. Ogni riga del file \(`e in un formato tipo \(Fovt100 tty01\(Fc\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBUID_MIN\fR
+(resp\&.
+\fBUID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBULIMIT\fR (number)
+.RS 4
+Default
+\fBulimit\fR
+value\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+La maschera di permessi alla creazione dei file \(`e inizializzata con questo valore\&. Se non specificato la maschera viene impostata a 022\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create if
+\fBHOME_MODE\fR
+is not set\&.
+.sp
+It is also used by
+\fBlogin\fR
+to define users\*(Aq initial umask\&. Note that this mask can be overridden by the user\*(Aqs GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERDEL_CMD\fR (string)
+.RS 4
+Se definito, questo comando viene eseguito quando si cancella un utente\&. Dovrebbe rimuovere tutti i compiti di stampa/cron/at di propriet\(`a dell\*(Aqutente da cancellare (passato come primo argomento)\&.
+.sp
+Il codice d\*(Aquscita restituito dallo script non \(`e preso in considerazione\&.
+.sp
+Here is an example script, which removes the user\*(Aqs cron, at and print jobs:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#! /bin/sh
+
+# Check for the required argument\&.
+if [ $# != 1 ]; then
+ echo "Usage: $0 username"
+ exit 1
+fi
+
+# Remove cron jobs\&.
+crontab \-r \-u $1
+
+# Remove at jobs\&.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username\&.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR \-name "[^\&.]*" \-type f \-user $1 \-delete \e;
+
+# Remove print jobs\&.
+lprm $1
+
+# All done\&.
+exit 0
+
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Abilita l\*(Aqimpostazione dei bit di gruppo di umask in modo che siano gli stessi dei bit del proprietario (esempio: 022 \-> 002, 077 \-> 007) per utenti non root a condizione che uid e gid siano identici e che il nome utente sia lo stesso del gruppo primario\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "RIFERIMENTI INCROCIATI"
+.PP
+I seguenti riferimenti incrociati mostrano quali programmi del pacchetto shadow password utilizzano quali parametri\&.
+.PP
+chfn
+.RS 4
+CHFN_AUTH
+CHFN_RESTRICT
+LOGIN_STRING
+.RE
+.PP
+chgpasswd
+.RS 4
+ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+chpasswd
+.RS 4
+ENCRYPT_METHOD MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+chsh
+.RS 4
+CHSH_AUTH LOGIN_STRING
+.RE
+.PP
+gpasswd
+.RS 4
+ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+groupadd
+.RS 4
+GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN
+.RE
+.PP
+groupdel
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+groupmems
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+groupmod
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpck
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpconv
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpunconv
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+lastlog
+.RS 4
+LASTLOG_UID_MAX
+.RE
+.PP
+login
+.RS 4
+CONSOLE
+CONSOLE_GROUPS DEFAULT_HOME
+ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE
+ERASECHAR FAIL_DELAY
+FAILLOG_ENAB
+FAKE_SHELL
+FTMP_FILE
+HUSHLOGIN_FILE
+ISSUE_FILE
+KILLCHAR
+LASTLOG_ENAB LASTLOG_UID_MAX
+LOGIN_RETRIES
+LOGIN_STRING
+LOGIN_TIMEOUT LOG_OK_LOGINS LOG_UNKFAIL_ENAB
+MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB
+TTYGROUP TTYPERM TTYTYPE_FILE
+ULIMIT UMASK
+USERGROUPS_ENAB
+.RE
+.PP
+newgrp / sg
+.RS 4
+SYSLOG_SG_ENAB
+.RE
+.PP
+newusers
+.RS 4
+ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB HOME_MODE PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+SUB_GID_COUNT SUB_GID_MAX SUB_GID_MIN SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK
+.RE
+.PP
+passwd
+.RS 4
+ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+pwck
+.RS 4
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+.RE
+.PP
+pwconv
+.RS 4
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+.RE
+.PP
+su
+.RS 4
+CONSOLE
+CONSOLE_GROUPS DEFAULT_HOME
+ENV_HZ ENVIRON_FILE
+ENV_PATH ENV_SUPATH
+ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE QUOTAS_ENAB
+SULOG_FILE SU_NAME
+SU_WHEEL_ONLY
+SYSLOG_SU_ENAB
+USERGROUPS_ENAB
+.RE
+.PP
+sulogin
+.RS 4
+ENV_HZ
+ENV_TZ
+.RE
+.PP
+useradd
+.RS 4
+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 SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK
+.RE
+.PP
+userdel
+.RS 4
+MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB
+.RE
+.PP
+usermod
+.RS 4
+LASTLOG_UID_MAX MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBsu\fR(1),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBpam\fR(8)\&.
diff --git a/man/it/man5/passwd.5 b/man/it/man5/passwd.5
new file mode 100644
index 0000000..c2665bd
--- /dev/null
+++ b/man/it/man5/passwd.5
@@ -0,0 +1,193 @@
+'\" t
+.\" Title: passwd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Formati di file e conversioni
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "PASSWD" "5" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Formati di file e conversioni"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+passwd \- il file delle password
+.SH "DESCRIZIONE"
+.PP
+/etc/passwd
+contains one line for each user account, with seven fields delimited by colons (\(Fo:\(Fc)\&. These fields are:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+nome di login
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+password cifrata opzionale
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+ID utente numerico
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+ID gruppo numerico
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+nome utente o commento
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+directory home utente
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+interprete dei comandi utente opzionale
+.RE
+.PP
+If the
+\fIpassword\fR
+field is a lower\-case
+\(Fox\(Fc, then the encrypted password is actually stored in the
+\fBshadow\fR(5)
+file instead; there
+\fImust\fR
+be a corresponding line in the
+/etc/shadow
+file, or else the user account is invalid\&.
+.PP
+The encrypted
+\fIpassword\fR
+field may be empty, in which case no password is required to authenticate as the specified login name\&. However, some applications which read the
+/etc/passwd
+file may decide not to permit
+\fIany\fR
+access at all if the
+\fIpassword\fR
+field is blank\&.
+.PP
+A
+\fIpassword\fR
+field which starts with an exclamation mark means that the password is locked\&. The remaining characters on the line represent the
+\fIpassword\fR
+field before the password was locked\&.
+.PP
+Refer to
+\fBcrypt\fR(3)
+for details on how this string is interpreted\&.
+.PP
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), 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)\&.
+.PP
+The comment field is used by various system utilities, such as
+\fBfinger\fR(1)\&.
+.PP
+The home directory field provides the name of the initial working directory\&. The
+\fBlogin\fR
+program uses this information to set the value of the
+\fB$HOME\fR
+environmental variable\&.
+.PP
+The command interpreter field provides the name of the user\*(Aqs command language interpreter, or the name of the initial program to execute\&. The
+\fBlogin\fR
+program uses this information to set the value of the
+\fB$SHELL\fR
+environmental variable\&. If this field is empty, it defaults to the value
+/bin/sh\&.
+.SH "FILE"
+.PP
+/etc/passwd
+.RS 4
+Informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+file opzionale delle password cifrate
+.RE
+.PP
+/etc/passwd\-
+.RS 4
+Copia di backup di /etc/passwd\&.
+.sp
+Notare che questo file viene usato dagli strumenti del pacchetto shadow, ma non da tutti gli strumenti per la gestione di utenti e password\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBcrypt\fR(3),
+\fBgetent\fR(1),
+\fBgetpwnam\fR(3),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBpwck\fR(8),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBshadow\fR(5),
+\fBsu\fR(1),
+\fBsulogin\fR(8)\&.
diff --git a/man/it/man5/porttime.5 b/man/it/man5/porttime.5
new file mode 100644
index 0000000..0b169ad
--- /dev/null
+++ b/man/it/man5/porttime.5
@@ -0,0 +1,96 @@
+'\" t
+.\" Title: porttime
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Formati di file e conversioni
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "PORTTIME" "5" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Formati di file e conversioni"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+porttime \- file delle porte e degli orari d\*(Aqaccesso
+.SH "DESCRIZIONE"
+.PP
+\fIporttime\fR
+contains a list of tty devices, user names, and permitted login times\&.
+.PP
+Ciascuna voce \(`e composta da tre campi separati da due punti\&. Il primo \(`e un elenco di device tty, separati da virgole, oppure un asterisco per indicare che la voce corrisponde a qualsiasi device\&. Il secondo campo \(`e un elenco di nomi utente, separati da virgole, oppure un asterisco per indicare che la voce corrisponde ad ogni utente\&. Il terzo campo \(`e un elenco degli orari, separati da virgole, in cui \(`e consentito l\*(Aqaccesso\&.
+.PP
+Each access time entry consists of zero or more days of the week, abbreviated
+\fISu\fR,
+\fIMo\fR,
+\fITu\fR,
+\fIWe\fR,
+\fITh\fR,
+\fIFr\fR, and
+\fISa\fR, followed by a pair of times separated by a hyphen\&. The abbreviation
+\fIWk\fR
+may be used to represent Monday thru Friday, and
+\fIAl\fR
+may be used to indicate every day\&. If no days are given,
+\fIAl\fR
+is assumed\&.
+.SH "ESEMPI"
+.PP
+The following entry allows access to user
+\fBjfh\fR
+on every port during weekdays from 9am to 5pm\&.
+.PP
+*:jfh:Wk0900\-1700
+.PP
+The following entries allow access only to the users
+\fIroot\fR
+and
+\fIoper\fR
+on
+/dev/console
+at any time\&. This illustrates how the
+/etc/porttime
+file is an ordered list of access times\&. Any other user would match the second entry which does not permit access at any time\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ console:root,oper:Al0000\-2400
+ console:*:
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+The following entry allows access for the user
+\fIgames\fR
+on any port during non\-working hours\&.
+.PP
+*:games:Wk1700\-0900,SaSu0000\-2400
+.SH "FILE"
+.PP
+/etc/porttime
+.RS 4
+File contenente gli accessi alle porte\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBlogin\fR(1)\&.
diff --git a/man/it/man5/shadow.5 b/man/it/man5/shadow.5
new file mode 100644
index 0000000..3a66bc0
--- /dev/null
+++ b/man/it/man5/shadow.5
@@ -0,0 +1,148 @@
+'\" t
+.\" Title: shadow
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Formati di file e conversioni
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "SHADOW" "5" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Formati di file e conversioni"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+shadow \- file delle password shadow
+.SH "DESCRIZIONE"
+.PP
+shadow
+is a file which contains the password information for the system\*(Aqs accounts and optional aging information\&.
+.PP
+Questo file non deve essere leggibile dagli utenti normali se si vuole mantenere la sicurezza sulle password\&.
+.PP
+Each line of this file contains 9 fields, separated by colons (\(Fo:\(Fc), in the following order:
+.PP
+\fBnome di login\fR
+.RS 4
+Deve essere un nome valido di un account esistente nel sistema\&.
+.RE
+.PP
+\fBpassword cifrata\fR
+.RS 4
+This field may be empty, in which case no passwords are required to authenticate as the specified login name\&. However, some applications which read the
+/etc/shadow
+file may decide not to permit any access at all if the password field is empty\&.
+.sp
+A password field which starts with an exclamation mark means that the password is locked\&. The remaining characters on the line represent the password field before the password was locked\&.
+.sp
+Refer to
+\fBcrypt\fR(3)
+for details on how this string is interpreted\&.
+.sp
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), 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)\&.
+.RE
+.PP
+\fBdata dell\*(Aqultimo cambio di password\fR
+.RS 4
+Data dell\*(Aqultimo cambio di password espressa in numero di giorni a partire dal 1 gennaio 1970\&.
+.sp
+The value 0 has a special meaning, which is that the user should change her password the next time she will log in the system\&.
+.sp
+Un campo vuoto implica che la scadenza della password \(`e disabilitata\&.
+.RE
+.PP
+\fBet\(`a minima password\fR
+.RS 4
+L\*(Aqet\(`a minima password \(`e il numero di giorni che l\*(Aqutente dovr\(`a attendere prima di poter cambiare nuovamente la propria password\&.
+.sp
+Un campo vuoto o con valore 0 indica che non c\*(Aq\(`e una et\(`a minima della password\&.
+.RE
+.PP
+\fBet\(`a massima password\fR
+.RS 4
+L\*(Aqet\(`a massima password \(`e il numero di giorni dopo il quale l\*(Aqutente deve cambiare la propria password\&.
+.sp
+Quando questo numero di giorni \(`e passato, la password pu\(`o ancora essere valida\&. All\*(Aqutente verr\(`a chiesto di cambiare la password durante il successivo accesso\&.
+.sp
+Un campo vuoto indica che non ci sono una et\(`a massima password, un periodo di avviso e nessun periodo di inattivit\(`a (vedere oltre)\&.
+.sp
+Se l\*(Aqet\(`a massima password \(`e minore dell\*(Aqet\(`a minima password, l\*(Aqutente non pu\(`o cambiare la propria password\&.
+.RE
+.PP
+\fBperiodo avviso password\fR
+.RS 4
+Il numero di giorni prima della scadenza di una password (vedere et\(`a massima password, sopra) durante il quale l\*(Aqutente riceve un avviso\&.
+.sp
+Un campo vuoto e il valore 0 indicano che non c\*(Aq\(`e un periodo di avviso password\&.
+.RE
+.PP
+\fBperiodo inattivit\(`a password\fR
+.RS 4
+Il numero di giorni dopo la scadenza della password (vedere et\(`a massima password, sopra) durante il quale la password \(`e ancora accettata (e l\*(Aqutente dovrebbe aggiornare la propria password al primo accesso)\&.
+.sp
+Dopo la scadenza della password e di questo periodo, l\*(Aqutente non potr\(`a accedere usando questa password, ma dovr\(`a contattare l\*(Aqamministratore\&.
+.sp
+Un campo vuoto implica che non \(`e applicato il periodo di inattivit\(`a\&.
+.RE
+.PP
+\fBdata scadenza account\fR
+.RS 4
+La data di scadenza dell\*(Aqaccount, espressa in numero di giorni dal 1 gennaio 1970\&.
+.sp
+Note that an account expiration differs from a password expiration\&. In case of an account expiration, the user shall not be allowed to login\&. In case of a password expiration, the user is not allowed to login using her password\&.
+.sp
+Un campo vuoto implica che l\*(Aqaccount non scade mai\&.
+.sp
+Il valore 0 non andrebbe usato perch\('e potrebbe essere interpretato come account che non scade o come scaduto il 1 gennaio 1970\&.
+.RE
+.PP
+\fBcampo riservato\fR
+.RS 4
+Questo campo \(`e riservato per uso futuro\&.
+.RE
+.SH "FILE"
+.PP
+/etc/passwd
+.RS 4
+Informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account utente\&.
+.RE
+.PP
+/etc/shadow\-
+.RS 4
+Copia di backup per /etc/shadow\&.
+.sp
+Notare che questo file viene usato dagli strumenti del pacchetto shadow, ma non da tutti gli strumenti per la gestione di utenti e password\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBchage\fR(1),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBpasswd\fR(5),
+\fBpwck\fR(8),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBsu\fR(1),
+\fBsulogin\fR(8)\&.
diff --git a/man/it/man5/suauth.5 b/man/it/man5/suauth.5
new file mode 100644
index 0000000..7724654
--- /dev/null
+++ b/man/it/man5/suauth.5
@@ -0,0 +1,146 @@
+'\" t
+.\" Title: suauth
+.\" Author: Marek Micha\(/lkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Formati di file e conversioni
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "SUAUTH" "5" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Formati di file e conversioni"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+suauth \- file di controllo dettagliato per \(Fosu\(Fc
+.SH "SINOSSI"
+.HP \w'\fB/etc/suauth\fR\ 'u
+\fB/etc/suauth\fR
+.SH "DESCRIZIONE"
+.PP
+The file
+/etc/suauth
+is referenced whenever the su command is called\&. It can change the behaviour of the su command, based upon:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ 1) the user su is targeting
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+2) l\*(Aqutente che sta invocando \(Fosu\(Fc (o qualsiasi gruppo del quale questi faccia parte)
+.PP
+Il formato del file \(`e il seguente, con le righe che iniziano con \(Fo#\(Fc trattate come commenti e ignorate;
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ to\-id:from\-id:ACTION
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Where to\-id is either the word
+\fIALL\fR, a list of usernames delimited by "," or the words
+\fIALL EXCEPT\fR
+followed by a list of usernames delimited by ","\&.
+.PP
+from\-id is formatted the same as to\-id except the extra word
+\fIGROUP\fR
+is recognized\&.
+\fIALL EXCEPT GROUP\fR
+is perfectly valid too\&. Following
+\fIGROUP\fR
+appears one or more group names, delimited by ","\&. It is not sufficient to have primary group id of the relevant group, an entry in
+\fB/etc/group\fR(5)
+is necessary\&.
+.PP
+AZIONE pu\(`o essere una delle seguenti opzioni attualmente supportate\&.
+.PP
+\fIDENY\fR
+.RS 4
+Il tentativo di usare \(Fosu\(Fc viene bloccato prima ancora che la password sia chiesta\&.
+.RE
+.PP
+\fINOPASS\fR
+.RS 4
+Il tentativo di usare \(Fosu\(Fc ha successo senza neppure chiedere la password\&.
+.RE
+.PP
+\fIOWNPASS\fR
+.RS 4
+Perch\('e \(Fosu\(Fc abbia successo, l\*(Aqutente deve inserire la propria password che verr\(`a espressamente richiesta\&.
+.RE
+.PP
+Notare che ci sono tre campi diversi separati da \(Fo:\(Fc\&. Nessuno spazio deve affiancare i due punti\&. Notare anche che il file viene esaminato in maniera sequenziale una riga alla volta, e la prima regola applicabile viene utilizzata senza procede con la lettura delle successive\&. Questo permette all\*(Aqamministratore di sistema di impostare dei controlli allargati o puntuali, come preferisce\&.
+.SH "ESEMPIO"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ # sample /etc/suauth file
+ #
+ # A couple of privileged usernames may
+ # su to root with their own password\&.
+ #
+ root:chris,birddog:OWNPASS
+ #
+ # Anyone else may not su to root unless in
+ # group wheel\&. This is how BSD does things\&.
+ #
+ root:ALL EXCEPT GROUP wheel:DENY
+ #
+ # Perhaps terry and birddog are accounts
+ # owned by the same person\&.
+ # Access can be arranged between them
+ # with no password\&.
+ #
+ terry:birddog:NOPASS
+ birddog:terry:NOPASS
+ #
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "FILE"
+.PP
+/etc/suauth
+.RS 4
+.RE
+.SH "ERRORI"
+.PP
+Ce ne possono essere molti non visti\&. Il parser dei file \(`e particolarmente rigido sugli errori di sintassi, attendendo l\*(Aqassenza di spazi estranei (ad eccezione di inizio e fine riga) e specifici separatori per delimitare oggetti diversi\&.
+.SH "DIAGNOSTICA"
+.PP
+An error parsing the file is reported using
+\fBsyslogd\fR(8)
+as level ERR on facility AUTH\&.
+.SH "VEDERE ANCHE"
+.PP
+\fBsu\fR(1)\&.
diff --git a/man/it/man8/chgpasswd.8 b/man/it/man8/chgpasswd.8
new file mode 100644
index 0000000..abe2ae3
--- /dev/null
+++ b/man/it/man8/chgpasswd.8
@@ -0,0 +1,208 @@
+'\" t
+.\" Title: chgpasswd
+.\" Author: Thomas K\(/loczko <kloczek@pld.org.pl>
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi per la gestione del sistema
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "CHGPASSWD" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi per la gestione del si"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+chgpasswd \- aggiorna le password di gruppo in modalit\(`a non interattiva
+.SH "SINOSSI"
+.HP \w'\fBchgpasswd\fR\ 'u
+\fBchgpasswd\fR [\fIopzioni\fR]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBchgpasswd\fR
+command reads a list of group name and password pairs from standard input and uses this information to update a set of existing groups\&. Each line is of the format:
+.PP
+\fIgroup_name\fR:\fIpassword\fR
+.PP
+By default the supplied password must be in clear\-text, and is encrypted by
+\fBchgpasswd\fR\&.
+.PP
+The default encryption algorithm can be defined for the system with the
+\fBENCRYPT_METHOD\fR
+variable of
+/etc/login\&.defs, and can be overwritten with the
+\fB\-e\fR,
+\fB\-m\fR, or
+\fB\-c\fR
+options\&.
+.PP
+Questo comando \(`e appositamente pensato per grossi sistemi in cui si abbia la necessit\(`a di creare molti account nello stesso momento\&.
+.SH "OPZIONI"
+.PP
+The options which apply to the
+\fBchgpasswd\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+Utilizza il metodo specificato per cifrare le password\&.
+.sp
+I metodi disponibili sono DES, MD5, NONE e SHA256 o SHA512 se la propria libc lo consente\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-encrypted\fR
+.RS 4
+Le password fornite sono in forma cifrata\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-md5\fR
+.RS 4
+Usa la cifratura MD5 anzich\('e DES quando le password fornite non sono cifrate\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+Usa il numero specificato di cicli per cifrare la password\&.
+.sp
+Il valore 0 indica che il sistema utilizzer\(`a il numero predefinito di cicli per il metodo crypt (5000)\&.
+.sp
+I valori minimo di 1\&.000 e massimo di 999\&.999\&.999 sono forzati\&.
+.sp
+Si pu\(`o utilizzare questa opzione solo con i metodi di cifratura SHA256 o SHA512\&.
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "AVVISI/CAVEAT"
+.PP
+Ricordarsi di impostare i permessi o umask in modo da prevenire la lettura in chiaro da parte di altri utenti\&.
+.PP
+Ci si deve accertare che le password e il metodo di cifratura rispettino le norme delle password del sistema\&.
+.SH "CONFIGURAZIONE"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+Definisce l\*(Aqalgoritmo di cifratura predefinito per le password (se non ne viene specificato uno a riga di comando)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Il valore predefinito \(`e 0, che non pone nessun limite al numero di membri per gruppo\&.
+.sp
+Questa opzione (dividi gruppo) permette di limitare la lunghezza delle righe nel file \(Fogroup\(Fc\&. Questo \(`e utile per essere certi che le righe per gruppi NIS non eccedano i 1024 caratteri\&.
+.sp
+Se si deve impostare questo limite, si pu\(`o usare 25\&.
+.sp
+Nota: la divisione dei gruppi potrebbe non essere supportata da ogni strumento (anche all\*(Aqinterno del pacchetto Shadow)\&. Non si dovrebbe utilizzare questa variabile a meno di esserci forzati\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+Con molti cicli \(`e pi\(`u difficile trovare una password usando la forza bruta\&. Ma va notato che \(`e richiesta maggiore potenza di calcolo per autenticare gli utenti\&.
+.sp
+Se non specificato sar\(`a la libc a scegliere il numero di cicli (5000)\&.
+.sp
+Il valore deve essere compreso tra 1\&.000 e 999\&.999\&.999\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FILE"
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informazioni sicure sugli account di gruppo\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configurazione del pacchetto password shadow
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBgpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBlogin.defs\fR(5)\&.
diff --git a/man/it/man8/chpasswd.8 b/man/it/man8/chpasswd.8
new file mode 100644
index 0000000..e704d8c
--- /dev/null
+++ b/man/it/man8/chpasswd.8
@@ -0,0 +1,212 @@
+'\" t
+.\" Title: chpasswd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi per la gestione del sistema
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "CHPASSWD" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi per la gestione del si"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+chpasswd \- aggiorna le password in modo non interattivo
+.SH "SINOSSI"
+.HP \w'\fBchpasswd\fR\ 'u
+\fBchpasswd\fR [\fIopzioni\fR]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBchpasswd\fR
+command reads a list of user name and password pairs from standard input and uses this information to update a group of existing users\&. Each line is of the format:
+.PP
+\fIuser_name\fR:\fIpassword\fR
+.PP
+By default the passwords must be supplied in clear\-text, and are encrypted by
+\fBchpasswd\fR\&. Also the password age will be updated, if present\&.
+.PP
+The default encryption algorithm can be defined for the system with the
+\fBENCRYPT_METHOD\fR
+or
+\fBMD5_CRYPT_ENAB\fR
+variables of
+/etc/login\&.defs, and can be overwritten with the
+\fB\-e\fR,
+\fB\-m\fR, or
+\fB\-c\fR
+options\&.
+.PP
+\fBchpasswd\fR
+first updates all the passwords in memory, and then commits all the changes to disk if no errors occurred for any user\&.
+.PP
+Questo comando \(`e appositamente pensato per grossi sistemi in cui si abbia la necessit\(`a di creare molti account nello stesso momento\&.
+.SH "OPZIONI"
+.PP
+The options which apply to the
+\fBchpasswd\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR\ \&\fIMETHOD\fR
+.RS 4
+Utilizza il metodo specificato per cifrare le password\&.
+.sp
+I metodi disponibili sono DES, MD5, NONE e SHA256 o SHA512 se la propria libc lo consente\&.
+.sp
+By default (if none of the
+\fB\-c\fR,
+\fB\-m\fR, or
+\fB\-e\fR
+options are specified), the encryption method is defined by the
+\fBENCRYPT_METHOD\fR
+or
+\fBMD5_CRYPT_ENAB\fR
+variables of
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-encrypted\fR
+.RS 4
+Le password fornite sono in forma cifrata\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-md5\fR
+.RS 4
+Usa la cifratura MD5 anzich\('e DES quando le password fornite non sono cifrate\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR\ \&\fIROUNDS\fR
+.RS 4
+Usa il numero specificato di cicli per cifrare la password\&.
+.sp
+Il valore 0 indica che il sistema utilizzer\(`a il numero predefinito di cicli per il metodo crypt (5000)\&.
+.sp
+I valori minimo di 1\&.000 e massimo di 999\&.999\&.999 sono forzati\&.
+.sp
+Si pu\(`o utilizzare questa opzione solo con i metodi di cifratura SHA256 o SHA512\&.
+.sp
+By default, the number of rounds is defined by the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+and
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+variables in
+/etc/login\&.defs\&.
+.RE
+.SH "AVVISI/CAVEAT"
+.PP
+Ricordarsi di impostare i permessi o umask in modo da prevenire la lettura in chiaro da parte di altri utenti\&.
+.SH "CONFIGURAZIONE"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+Definisce l\*(Aqalgoritmo di cifratura predefinito per le password (se non ne viene specificato uno a riga di comando)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+Con molti cicli \(`e pi\(`u difficile trovare una password usando la forza bruta\&. Ma va notato che \(`e richiesta maggiore potenza di calcolo per autenticare gli utenti\&.
+.sp
+Se non specificato sar\(`a la libc a scegliere il numero di cicli (5000)\&.
+.sp
+Il valore deve essere compreso tra 1\&.000 e 999\&.999\&.999\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FILE"
+.PP
+/etc/passwd
+.RS 4
+Informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account utente\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configurazione del pacchetto password shadow
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBpasswd\fR(1),
+\fBnewusers\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8)\&.
diff --git a/man/it/man8/faillog.8 b/man/it/man8/faillog.8
new file mode 100644
index 0000000..11d0c12
--- /dev/null
+++ b/man/it/man8/faillog.8
@@ -0,0 +1,165 @@
+'\" t
+.\" Title: faillog
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi per la gestione del sistema
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "FAILLOG" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi per la gestione del si"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+faillog \- mostra le registrazioni e imposta i limiti degli accessi falliti
+.SH "SINOSSI"
+.HP \w'\fBfaillog\fR\ 'u
+\fBfaillog\fR [\fIopzioni\fR]
+.SH "DESCRIZIONE"
+.PP
+\fBfaillog\fR
+displays the contents of the failure log database (/var/log/faillog)\&. It can also set the failure counters and limits\&. When
+\fBfaillog\fR
+is run without arguments, it only displays the faillog records of the users who had a login failure\&.
+.SH "OPZIONI"
+.PP
+The options which apply to the
+\fBfaillog\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+Display (or act on) faillog records for all users having an entry in the
+faillog
+database\&.
+.sp
+The range of users can be restricted with the
+\fB\-u\fR
+option\&.
+.sp
+Nella modalit\(`a di visualizzazione, questo \(`e gi\(`a ristretto ai soli utenti esistenti, ma vengono mostrate anche eventuali registrazioni vuote\&.
+.sp
+With the
+\fB\-l\fR,
+\fB\-m\fR,
+\fB\-r\fR,
+\fB\-t\fR
+options, the users\*(Aq records are changed, even if the user does not exist on the system\&. This is useful to reset records of users that have been deleted or to set a policy in advance for a range of users\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\-secs\fR\ \&\fISEC\fR
+.RS 4
+Lock account for
+\fISEC\fR
+seconds after failed login\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-maximum\fR\ \&\fIMAX\fR
+.RS 4
+Set the maximum number of login failures after the account is disabled to
+\fIMAX\fR\&.
+.sp
+Selecting a
+\fIMAX\fR
+value of 0 has the effect of not placing a limit on the number of failed logins\&.
+.sp
+The maximum failure count should always be 0 for
+\fIroot\fR
+to prevent a denial of services attack against the system\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-reset\fR
+.RS 4
+Azzera i contatori degli accessi falliti\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR\ \&\fIDAYS\fR
+.RS 4
+Display faillog records more recent than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR\ \&\fILOGIN\fR|\fIRANGE\fR
+.RS 4
+Display faillog record or maintains failure counters and limits (if used with
+\fB\-l\fR,
+\fB\-m\fR
+or
+\fB\-r\fR
+options) only for the specified user(s)\&.
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+When none of the
+\fB\-l\fR,
+\fB\-m\fR, or
+\fB\-r\fR
+options are used,
+\fBfaillog\fR
+displays the faillog record of the specified user(s)\&.
+.SH "AVVISI/CAVEAT"
+.PP
+\fBfaillog\fR
+only prints out users with no successful login since the last failure\&. To print out a user who has had a successful login since their last failure, you must explicitly request the user with the
+\fB\-u\fR
+flag, or print out all users with the
+\fB\-a\fR
+flag\&.
+.SH "FILE"
+.PP
+/var/log/faillog
+.RS 4
+File per tracciare gli accessi falliti\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBlogin\fR(1),
+\fBfaillog\fR(5)\&.
diff --git a/man/it/man8/groupadd.8 b/man/it/man8/groupadd.8
new file mode 100644
index 0000000..7421e62
--- /dev/null
+++ b/man/it/man8/groupadd.8
@@ -0,0 +1,257 @@
+'\" t
+.\" Title: groupadd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi per la gestione del sistema
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "GROUPADD" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi per la gestione del si"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+groupadd \- crea un nuovo gruppo
+.SH "SINOSSI"
+.HP \w'\fBgroupadd\fR\ 'u
+\fBgroupadd\fR [\fIopzioni\fR] \fIgruppo\fR
+.SH "DESCRIZIONE"
+.PP
+The
+\fBgroupadd\fR
+command creates a new group account using the values specified on the command line plus the default values from the system\&. The new group will be entered into the system files as needed\&.
+.SH "OPZIONI"
+.PP
+The options which apply to the
+\fBgroupadd\fR
+command are:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option causes the command to simply exit with success status if the specified group already exists\&. When used with
+\fB\-g\fR, and the specified GID already exists, another (unique) GID is chosen (i\&.e\&.
+\fB\-g\fR
+is turned off)\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGID\fR
+.RS 4
+The numerical value of the group\*(Aqs ID\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&. The default is to use the smallest ID value greater than or equal to
+\fBGID_MIN\fR
+and greater than every other group\&.
+.sp
+See also the
+\fB\-r\fR
+option and the
+\fBGID_MAX\fR
+description\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-K\fR, \fB\-\-key\fR\ \&\fIKEY\fR=\fIVALUE\fR
+.RS 4
+Overrides
+/etc/login\&.defs
+defaults (GID_MIN, GID_MAX and others)\&. Multiple
+\fB\-K\fR
+options can be specified\&.
+.sp
+Example:
+\fB\-K\fR\ \&\fIGID_MIN\fR=\fI100\fR\ \&
+\fB\-K\fR\ \&\fIGID_MAX\fR=\fI499\fR
+.sp
+Note:
+\fB\-K\fR\ \&\fIGID_MIN\fR=\fI10\fR,\fIGID_MAX\fR=\fI499\fR
+doesn\*(Aqt work yet\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+Questa opzione permette di aggiungere un gruppo con un GID non univoco\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&. The default is to disable the password\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+Ci si deve accertare che la password rispetti le norme delle password del sistema\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Crea un gruppo di sistema\&.
+.sp
+The numeric identifiers of new system groups are chosen in the
+\fBSYS_GID_MIN\fR\-\fBSYS_GID_MAX\fR
+range, defined in
+login\&.defs, instead of
+\fBGID_MIN\fR\-\fBGID_MAX\fR\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.SH "CONFIGURAZIONE"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBGID_MIN\fR
+(resp\&.
+\fBGID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Il valore predefinito \(`e 0, che non pone nessun limite al numero di membri per gruppo\&.
+.sp
+Questa opzione (dividi gruppo) permette di limitare la lunghezza delle righe nel file \(Fogroup\(Fc\&. Questo \(`e utile per essere certi che le righe per gruppi NIS non eccedano i 1024 caratteri\&.
+.sp
+Se si deve impostare questo limite, si pu\(`o usare 25\&.
+.sp
+Nota: la divisione dei gruppi potrebbe non essere supportata da ogni strumento (anche all\*(Aqinterno del pacchetto Shadow)\&. Non si dovrebbe utilizzare questa variabile a meno di esserci forzati\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_GID_MIN\fR
+(resp\&.
+\fBSYS_GID_MAX\fR) is 101 (resp\&.
+\fBGID_MIN\fR\-1)\&.
+.RE
+.SH "FILE"
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informazioni sicure sugli account di gruppo\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configurazione del pacchetto password shadow
+.RE
+.SH "AVVISI/CAVEAT"
+.PP
+I nomi di gruppo devono iniziare con una lettera minuscola o l\*(Aqunderscore, seguiti da lettere minuscole, cifre numeriche, underscore o trattini\&. Possono terminare con il simbolo del dollaro\&. In termini di espressioni regolari: [a\-z_][a\-z0\-9_\-]*[$]?
+.PP
+Groupnames may only be up to 16 characters long\&.
+.PP
+Non \(`e possibile aggiungere un gruppo NIS o LDAP\&. Questo deve essere fatto sul server corrispondente\&.
+.PP
+If the groupname already exists in an external group database such as NIS or LDAP,
+\fBgroupadd\fR
+will deny the group creation request\&.
+.SH "VALORI RESTITUITI"
+.PP
+The
+\fBgroupadd\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+GID not unique (when
+\fB\-o\fR
+not used)
+.RE
+.PP
+\fI9\fR
+.RS 4
+group name not unique
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/it/man8/groupdel.8 b/man/it/man8/groupdel.8
new file mode 100644
index 0000000..1d515a4
--- /dev/null
+++ b/man/it/man8/groupdel.8
@@ -0,0 +1,145 @@
+'\" t
+.\" Title: groupdel
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi per la gestione del sistema
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "GROUPDEL" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi per la gestione del si"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+groupdel \- rimuove un gruppo
+.SH "SINOSSI"
+.HP \w'\fBgroupdel\fR\ 'u
+\fBgroupdel\fR [\fIopzioni\fR] \fIGRUPPO\fR
+.SH "DESCRIZIONE"
+.PP
+The
+\fBgroupdel\fR
+command modifies the system account files, deleting all entries that refer to
+\fIGROUP\fR\&. The named group must exist\&.
+.SH "OPZIONI"
+.PP
+The options which apply to the
+\fBgroupdel\fR
+command are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.SH "AVVISI/CAVEAT"
+.PP
+Non si pu\(`o rimuovere un gruppo che sia gruppo primario di un utente\&. Occorre rimuovere l\*(Aqutente prima di rimuovere il gruppo\&.
+.PP
+Occorre controllare manualmente tutti i file system per assicurarsi che non rimanga alcun file avente questo ID di gruppo\&.
+.SH "CONFIGURAZIONE"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Il valore predefinito \(`e 0, che non pone nessun limite al numero di membri per gruppo\&.
+.sp
+Questa opzione (dividi gruppo) permette di limitare la lunghezza delle righe nel file \(Fogroup\(Fc\&. Questo \(`e utile per essere certi che le righe per gruppi NIS non eccedano i 1024 caratteri\&.
+.sp
+Se si deve impostare questo limite, si pu\(`o usare 25\&.
+.sp
+Nota: la divisione dei gruppi potrebbe non essere supportata da ogni strumento (anche all\*(Aqinterno del pacchetto Shadow)\&. Non si dovrebbe utilizzare questa variabile a meno di esserci forzati\&.
+.RE
+.SH "FILE"
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informazioni sicure sugli account di gruppo\&.
+.RE
+.SH "VALORI RESTITUITI"
+.PP
+The
+\fBgroupdel\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI8\fR
+.RS 4
+can\*(Aqt remove user\*(Aqs primary group
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/it/man8/groupmems.8 b/man/it/man8/groupmems.8
new file mode 100644
index 0000000..94aeca5
--- /dev/null
+++ b/man/it/man8/groupmems.8
@@ -0,0 +1,180 @@
+'\" t
+.\" Title: groupmems
+.\" Author: George Kraft, IV
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi per la gestione del sistema
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "GROUPMEMS" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi per la gestione del si"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+groupmems \- membri amministratori del gruppo primario dell\*(Aqutente
+.SH "SINOSSI"
+.HP \w'\fBgroupmems\fR\ 'u
+\fBgroupmems\fR \-a\ \fIuser_name\fR | \-d\ \fIuser_name\fR | [\-g\ \fIgroup_name\fR] | \-l | \-p
+.SH "DESCRIZIONE"
+.PP
+The
+\fBgroupmems\fR
+command 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)\&.
+.PP
+Only the superuser, as administrator, can use
+\fBgroupmems\fR
+to alter the memberships of other groups\&.
+.SH "OPZIONI"
+.PP
+The options which apply to the
+\fBgroupmems\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-add\fR\ \&\fIuser_name\fR
+.RS 4
+Add a user to the group membership list\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR\ \&\fIuser_name\fR
+.RS 4
+Cancella un utente dall\*(Aqelenco degli utenti del gruppo\&.
+.sp
+If the
+/etc/gshadow
+file exist, the user will be removed from the list of members and administrators of the group\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-group\fR\ \&\fIgroup_name\fR
+.RS 4
+Il super utente pu\(`o specificare quale elenco di membri del gruppo modificare\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-list\fR
+.RS 4
+Elenca tutti i membri del gruppo\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-purge\fR
+.RS 4
+Elimina tutti gli utenti dalla lista dei membri del gruppo\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.SH "CONFIGURAZIONE"
+.PP
+The
+\fBgroupmems\fR
+executable should be in mode
+2710
+as user
+\fIroot\fR
+and in group
+\fIgroups\fR\&. The system administrator can add users to group
+\fIgroups\fR
+to allow or disallow them using the
+\fBgroupmems\fR
+utility to manage their own group membership list\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ $ groupadd \-r groups
+ $ chmod 2710 groupmems
+ $ chown root\&.groups groupmems
+ $ groupmems \-g groups \-a gk4
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "CONFIGURAZIONE"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Il valore predefinito \(`e 0, che non pone nessun limite al numero di membri per gruppo\&.
+.sp
+Questa opzione (dividi gruppo) permette di limitare la lunghezza delle righe nel file \(Fogroup\(Fc\&. Questo \(`e utile per essere certi che le righe per gruppi NIS non eccedano i 1024 caratteri\&.
+.sp
+Se si deve impostare questo limite, si pu\(`o usare 25\&.
+.sp
+Nota: la divisione dei gruppi potrebbe non essere supportata da ogni strumento (anche all\*(Aqinterno del pacchetto Shadow)\&. Non si dovrebbe utilizzare questa variabile a meno di esserci forzati\&.
+.RE
+.SH "FILE"
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+informazioni sicure sugli account di gruppo
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/it/man8/groupmod.8 b/man/it/man8/groupmod.8
new file mode 100644
index 0000000..fb99b61
--- /dev/null
+++ b/man/it/man8/groupmod.8
@@ -0,0 +1,233 @@
+'\" t
+.\" Title: groupmod
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi per la gestione del sistema
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "GROUPMOD" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi per la gestione del si"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+groupmod \- modifica la definizione di un gruppo del sistema
+.SH "SINOSSI"
+.HP \w'\fBgroupmod\fR\ 'u
+\fBgroupmod\fR [\fIopzioni\fR] \fIGRUPPO\fR
+.SH "DESCRIZIONE"
+.PP
+The
+\fBgroupmod\fR
+command modifies the definition of the specified
+\fIGROUP\fR
+by modifying the appropriate entry in the group database\&.
+.SH "OPZIONI"
+.PP
+The options which apply to the
+\fBgroupmod\fR
+command are:
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGID\fR
+.RS 4
+The group ID of the given
+\fIGROUP\fR
+will be changed to
+\fIGID\fR\&.
+.sp
+The value of
+\fIGID\fR
+must be a non\-negative decimal integer\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&.
+.sp
+Gli utenti che hanno il gruppo come gruppo primario verranno aggiornati per mantenere tale gruppo come loro gruppo primario\&.
+.sp
+Any files that have the old group ID and must continue to belong to
+\fIGROUP\fR, must have their group ID changed manually\&.
+.sp
+No checks will be performed with regard to the
+\fBGID_MIN\fR,
+\fBGID_MAX\fR,
+\fBSYS_GID_MIN\fR, or
+\fBSYS_GID_MAX\fR
+from
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-new\-name\fR\ \&\fINEW_GROUP\fR
+.RS 4
+The name of the group will be changed from
+\fIGROUP\fR
+to
+\fINEW_GROUP\fR
+name\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+When used with the
+\fB\-g\fR
+option, allow to change the group
+\fIGID\fR
+to a non\-unique value\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+Ci si deve accertare che la password rispetti le norme delle password del sistema\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.SH "CONFIGURAZIONE"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Il valore predefinito \(`e 0, che non pone nessun limite al numero di membri per gruppo\&.
+.sp
+Questa opzione (dividi gruppo) permette di limitare la lunghezza delle righe nel file \(Fogroup\(Fc\&. Questo \(`e utile per essere certi che le righe per gruppi NIS non eccedano i 1024 caratteri\&.
+.sp
+Se si deve impostare questo limite, si pu\(`o usare 25\&.
+.sp
+Nota: la divisione dei gruppi potrebbe non essere supportata da ogni strumento (anche all\*(Aqinterno del pacchetto Shadow)\&. Non si dovrebbe utilizzare questa variabile a meno di esserci forzati\&.
+.RE
+.SH "FILE"
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informazioni sicure sugli account di gruppo\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configurazione del pacchetto password shadow
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informazioni sugli account utente\&.
+.RE
+.SH "VALORI RESTITUITI"
+.PP
+The
+\fBgroupmod\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+E_SUCCESS: success
+.RE
+.PP
+\fI2\fR
+.RS 4
+E_USAGE: invalid command syntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+E_BAD_ARG: invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+E_GID_IN_USE: specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI6\fR
+.RS 4
+E_NOTFOUND: specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI9\fR
+.RS 4
+E_NAME_IN_USE: group name already in use
+.RE
+.PP
+\fI10\fR
+.RS 4
+E_GRP_UPDATE: can\*(Aqt update group file
+.RE
+.PP
+\fI11\fR
+.RS 4
+E_CLEANUP_SERVICE: can\*(Aqt setup cleanup service
+.RE
+.PP
+\fI12\fR
+.RS 4
+E_PAM_USERNAME: can\*(Aqt determine your username for use with pam
+.RE
+.PP
+\fI13\fR
+.RS 4
+E_PAM_ERROR: pam returned an error, see syslog facility id groupmod for the PAM error message
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/it/man8/grpck.8 b/man/it/man8/grpck.8
new file mode 100644
index 0000000..b3b479c
--- /dev/null
+++ b/man/it/man8/grpck.8
@@ -0,0 +1,247 @@
+'\" t
+.\" Title: grpck
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi per la gestione del sistema
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "GRPCK" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi per la gestione del si"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+grpck \- verifica l\*(Aqintegrit\(`a dei file dei gruppi
+.SH "SINOSSI"
+.HP \w'\fBgrpck\fR\ 'u
+\fBgrpck\fR [opzioni] [\fIgruppo\fR\ [\ \fIshadow\fR\ ]]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBgrpck\fR
+command verifies the integrity of the groups information\&. It checks that all entries in
+/etc/group
+and /etc/gshadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+Vengono fatti controlli per verificare che ogni voce abbia:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+il corretto numero di campi
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+un nome univoco e valido di gruppo
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid group identifier
+(/etc/group only)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid list of members
+and administrators
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a corresponding entry in the
+/etc/gshadow
+file (respectively
+/etc/group
+for the
+gshadow
+checks)
+.RE
+.PP
+The checks for correct number of fields and unique group name are fatal\&. If an entry has the wrong number of fields, the user will be prompted to delete the entire line\&. If the user does not answer affirmatively, all further checks are bypassed\&. An entry with a duplicated group name is prompted for deletion, but the remaining checks will still be made\&. All other errors are warnings and the user is encouraged to run the
+\fBgroupmod\fR
+command to correct the error\&.
+.PP
+The commands which operate on the
+/etc/group
+and /etc/gshadow files
+are not able to alter corrupted or duplicated entries\&.
+\fBgrpck\fR
+should be used in those circumstances to remove the offending entries\&.
+.SH "OPZIONI"
+.PP
+The
+\fB\-r\fR
+and
+\fB\-s\fR
+options cannot be combined\&.
+.PP
+The options which apply to the
+\fBgrpck\fR
+command are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-read\-only\fR
+.RS 4
+Execute the
+\fBgrpck\fR
+command in read\-only mode\&. This causes all questions regarding changes to be answered
+\fIno\fR
+without user intervention\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sort\fR
+.RS 4
+Sort entries in
+/etc/group
+and /etc/gshadow
+by GID\&.
+.RE
+.PP
+By default,
+\fBgrpck\fR
+operates on
+/etc/group
+and /etc/gshadow\&. The user may select alternate files with the
+\fIgroup\fR
+and \fIshadow\fR parameters\&.
+.SH "CONFIGURAZIONE"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Il valore predefinito \(`e 0, che non pone nessun limite al numero di membri per gruppo\&.
+.sp
+Questa opzione (dividi gruppo) permette di limitare la lunghezza delle righe nel file \(Fogroup\(Fc\&. Questo \(`e utile per essere certi che le righe per gruppi NIS non eccedano i 1024 caratteri\&.
+.sp
+Se si deve impostare questo limite, si pu\(`o usare 25\&.
+.sp
+Nota: la divisione dei gruppi potrebbe non essere supportata da ogni strumento (anche all\*(Aqinterno del pacchetto Shadow)\&. Non si dovrebbe utilizzare questa variabile a meno di esserci forzati\&.
+.RE
+.SH "FILE"
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informazioni sicure sugli account di gruppo\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informazioni sugli account utente\&.
+.RE
+.SH "VALORI RESTITUITI"
+.PP
+The
+\fBgrpck\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI2\fR
+.RS 4
+one or more bad group entries
+.RE
+.PP
+\fI3\fR
+.RS 4
+can\*(Aqt open group files
+.RE
+.PP
+\fI4\fR
+.RS 4
+can\*(Aqt lock group files
+.RE
+.PP
+\fI5\fR
+.RS 4
+can\*(Aqt update group files
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBgroup\fR(5),
+\fBgroupmod\fR(8),
+\fBgshadow\fR(5),
+\fBpasswd\fR(5),
+\fBpwck\fR(8),
+\fBshadow\fR(5)\&.
diff --git a/man/it/man8/grpconv.8 b/man/it/man8/grpconv.8
new file mode 100644
index 0000000..6eed9e8
--- /dev/null
+++ b/man/it/man8/grpconv.8
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/it/man8/grpunconv.8 b/man/it/man8/grpunconv.8
new file mode 100644
index 0000000..6eed9e8
--- /dev/null
+++ b/man/it/man8/grpunconv.8
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/it/man8/lastlog.8 b/man/it/man8/lastlog.8
new file mode 100644
index 0000000..32a8a16
--- /dev/null
+++ b/man/it/man8/lastlog.8
@@ -0,0 +1,138 @@
+'\" t
+.\" Title: lastlog
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi per la gestione del sistema
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "LASTLOG" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi per la gestione del si"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+lastlog \- riepiloga gli accessi pi\(`u recenti di tutti gli utenti o dell\*(Aqutente dato
+.SH "SINOSSI"
+.HP \w'\fBlastlog\fR\ 'u
+\fBlastlog\fR [\fIopzioni\fR]
+.SH "DESCRIZIONE"
+.PP
+\fBlastlog\fR
+formats and prints the contents of the last login log
+/var/log/lastlog
+file\&. The
+\fIlogin\-name\fR,
+\fIport\fR, and
+\fIlast login time\fR
+will be printed\&. The default (no flags) causes lastlog entries to be printed, sorted by their order in
+/etc/passwd\&.
+.SH "OPZIONI"
+.PP
+The options which apply to the
+\fBlastlog\fR
+command are:
+.PP
+\fB\-b\fR, \fB\-\-before\fR\ \&\fIDAYS\fR
+.RS 4
+Print only lastlog records older than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-C\fR, \fB\-\-clear\fR
+.RS 4
+Clear lastlog record of a user\&. This option can be used only together with
+\fB\-u\fR
+(\fB\-\-user\fR))\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-S\fR, \fB\-\-set\fR
+.RS 4
+Set lastlog record of a user to the current time\&. This option can be used only together with
+\fB\-u\fR
+(\fB\-\-user\fR))\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR\ \&\fIDAYS\fR
+.RS 4
+Print the lastlog records more recent than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR\ \&\fILOGIN\fR|\fIRANGE\fR
+.RS 4
+Mostra il record di ultimo accesso per l\*(Aqutente o gli utenti specificati da
+\fILOGIN\fR\&.
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+If the user has never logged in the message
+\fI** Never logged in**\fR
+will be displayed instead of the port and time\&.
+.PP
+Solo le registrazioni degli utenti correnti del sistema verranno mostrate\&. Ci potrebbero essere altre registrazioni per utenti cancellati in precedenza\&.
+.SH "NOTA"
+.PP
+The
+lastlog
+file is a database which contains info on the last login of each user\&. You should not rotate it\&. It is a sparse file, so its size on the disk is usually much smaller than the one shown by "\fBls \-l\fR" (which can indicate a really big file if you have in
+passwd
+users with a high UID)\&. You can display its real size with "\fBls \-s\fR"\&.
+.SH "CONFIGURAZIONE"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.SH "FILE"
+.PP
+/var/log/lastlog
+.RS 4
+Database degli orari dei precedenti accessi utente\&.
+.RE
+.SH "AVVISI/CAVEAT"
+.PP
+Se ci sono dei grossi scarti tra i valori di UID, il programma lastlog pu\(`o restare in esecuzione per un tempo prolungato senza produrre output sullo schermo (ad es\&. se nel database lastlog non ci sono registrazioni per UID tra 170 e 800, il programma sembrer\(`a bloccato mentre esamina gli UID tra 171 e 799)\&.
diff --git a/man/it/man8/logoutd.8 b/man/it/man8/logoutd.8
new file mode 100644
index 0000000..420a346
--- /dev/null
+++ b/man/it/man8/logoutd.8
@@ -0,0 +1,57 @@
+'\" t
+.\" Title: logoutd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi per la gestione del sistema
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "LOGOUTD" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi per la gestione del si"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+logoutd \- impone le limitazioni sugli orari d\*(Aqaccesso
+.SH "SINOSSI"
+.HP \w'\fBlogoutd\fR\ 'u
+\fBlogoutd\fR
+.SH "DESCRIZIONE"
+.PP
+\fBlogoutd\fR
+enforces the login time and port restrictions specified in
+/etc/porttime\&.
+\fBlogoutd\fR
+should be started from
+/etc/rc\&. The
+/var/run/utmp
+file is scanned periodically and each user name is checked to see if the named user is permitted on the named port at the current time\&. Any login session which is violating the restrictions in
+/etc/porttime
+is terminated\&.
+.SH "FILE"
+.PP
+/etc/porttime
+.RS 4
+File contenente gli accessi alle porte\&.
+.RE
+.PP
+/var/run/utmp
+.RS 4
+Elenco delle sessioni attive\&.
+.RE
diff --git a/man/it/man8/newusers.8 b/man/it/man8/newusers.8
new file mode 100644
index 0000000..20113e5
--- /dev/null
+++ b/man/it/man8/newusers.8
@@ -0,0 +1,449 @@
+'\" t
+.\" Title: newusers
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi per la gestione del sistema
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "NEWUSERS" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi per la gestione del si"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+newusers \- aggiorna e crea nuovi utenti in blocco
+.SH "SINOSSI"
+.HP \w'\fBnewusers\fR\ 'u
+\fBnewusers\fR [\fIopzioni\fR] [\fIfile\fR]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBnewusers\fR
+command reads a
+\fIfile\fR
+(or the standard input by default) and uses this information to update a set of existing users or to create new users\&. Each line is in the same format as the standard password file (see
+\fBpasswd\fR(5)) with the exceptions explained below:
+.PP
+pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell
+.PP
+\fIpw_name\fR
+.RS 4
+Il nome dell\*(Aqutente\&.
+.sp
+It can be the name of a new user or the name of an existing user (or a user created before by
+\fBnewusers\fR)\&. In case of an existing user, the user\*(Aqs information will be changed, otherwise a new user will be created\&.
+.RE
+.PP
+\fIpw_passwd\fR
+.RS 4
+Questo campo verr\(`a cifrato e utilizzato come nuovo valore per la password cifrata\&.
+.RE
+.PP
+\fIpw_uid\fR
+.RS 4
+Definisce l\*(AqUID dell\*(Aqutente\&.
+.sp
+If the field is empty, a new (unused) UID will be defined automatically by
+\fBnewusers\fR\&.
+.sp
+Se questo campo contiene un numero, verr\(`a utilizzato come UID\&.
+.sp
+If this field contains the name of an existing user (or the name of a user created before by
+\fBnewusers\fR), the UID of the specified user will be used\&.
+.sp
+Se viene cambiato l\*(AqUID di un utente esistente, la propriet\(`a dei file di propriet\(`a dell\*(Aqutente stesso andr\(`a cambiata manualmente\&.
+.RE
+.PP
+\fIpw_gid\fR
+.RS 4
+Definisce il l\*(AqID del gruppo primario dell\*(Aqutente\&.
+.sp
+If this field contains the name of an existing group (or a group created before by
+\fBnewusers\fR), the GID of this group will be used as the primary group ID for the user\&.
+.sp
+Se questo campo \(`e numerico, questo numero verr\(`a utilizzato come ID del gruppo primario dell\*(Aqutente\&. Se non esiste nessun gruppo con quel GID, ne viene creato uno con il nome dell\*(Aqutente e il GID specificato\&.
+.sp
+If this field is empty, a new group will be created with the name of the user and a GID will be automatically defined by
+\fBnewusers\fR
+to be used as the primary group ID for the user and as the GID for the new group\&.
+.sp
+If this field contains the name of a group which does not exist (and was not created before by
+\fBnewusers\fR), a new group will be created with the specified name and a GID will be automatically defined by
+\fBnewusers\fR
+to be used as the primary group ID for the user and GID for the new group\&.
+.RE
+.PP
+\fIpw_gecos\fR
+.RS 4
+Questo campo viene copiato nel campo GECOS dell\*(Aqutente\&.
+.RE
+.PP
+\fIpw_dir\fR
+.RS 4
+Questo campo \(`e utilizzato per impostare la directory home dell\*(Aqutente\&.
+.sp
+Se questo campo non contiene il nome di una directory esistente la directory viene creata, assegnandone la propriet\(`a all\*(Aqutente che si sta definendo o aggiornando e al suo gruppo primario\&.
+.sp
+If the home directory of an existing user is changed,
+\fBnewusers\fR
+does not move or copy the content of the old directory to the new location\&. This should be done manually\&.
+.RE
+.PP
+\fIpw_shell\fR
+.RS 4
+Questo campo definisce la shell dell\*(Aqutente\&. Su questo campo non viene fatto nessun controllo\&.
+.RE
+.PP
+\fBnewusers\fR
+first tries to create or change all the specified users, and then write these changes to the user or group databases\&. If an error occurs (except in the final writes to the databases), no changes are committed to the databases\&.
+.PP
+Questo comando \(`e appositamente pensato per grossi sistemi nei quali molti account sono aggiornati allo stesso tempo\&.
+.SH "OPZIONI"
+.PP
+The options which apply to the
+\fBnewusers\fR
+command are:
+.PP
+\fB\-\-badname\fR\ \&
+.RS 4
+Allow names that do not conform to standards\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+Utilizza il metodo specificato per cifrare le password\&.
+.sp
+I metodi disponibili sono DES, MD5, NONE e SHA256 o SHA512 se la propria libc lo consente\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Crea un account di sistema\&.
+.sp
+System users will be created with no aging information in
+/etc/shadow, and their numeric identifiers are chosen in the
+\fBSYS_UID_MIN\fR\-\fBSYS_UID_MAX\fR
+range, defined in
+login\&.defs, instead of
+\fBUID_MIN\fR\-\fBUID_MAX\fR
+(and their
+\fBGID\fR
+counterparts for the creation of groups)\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+Usa il numero specificato di cicli per cifrare la password\&.
+.sp
+Il valore 0 indica che il sistema utilizzer\(`a il numero predefinito di cicli per il metodo crypt (5000)\&.
+.sp
+I valori minimo di 1\&.000 e massimo di 999\&.999\&.999 sono forzati\&.
+.sp
+Si pu\(`o utilizzare questa opzione solo con i metodi di cifratura SHA256 o SHA512\&.
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "AVVISI/CAVEAT"
+.PP
+Il file di input deve essere protetto poich\('e contiene password non cifrate\&.
+.PP
+Ci si deve accertare che le password e il metodo di cifratura rispettino le norme delle password del sistema\&.
+.SH "CONFIGURAZIONE"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+Definisce l\*(Aqalgoritmo di cifratura predefinito per le password (se non ne viene specificato uno a riga di comando)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBGID_MIN\fR
+(resp\&.
+\fBGID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBHOME_MODE\fR (number)
+.RS 4
+The mode for new home directories\&. If not specified, the
+\fBUMASK\fR
+is used to create the mode\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this to set the mode of the home directory they create\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Il valore predefinito \(`e 0, che non pone nessun limite al numero di membri per gruppo\&.
+.sp
+Questa opzione (dividi gruppo) permette di limitare la lunghezza delle righe nel file \(Fogroup\(Fc\&. Questo \(`e utile per essere certi che le righe per gruppi NIS non eccedano i 1024 caratteri\&.
+.sp
+Se si deve impostare questo limite, si pu\(`o usare 25\&.
+.sp
+Nota: la divisione dei gruppi potrebbe non essere supportata da ogni strumento (anche all\*(Aqinterno del pacchetto Shadow)\&. Non si dovrebbe utilizzare questa variabile a meno di esserci forzati\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+Il numero massimo di giorni che una password pu\(`o essere utilizzata\&. Se la password \(`e pi\(`u vecchia verr\(`a imposto il suo cambiamento\&. Se non specificato viene assunto \-1 (che disabilita questo controllo)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+Il numero minimo di giorni tra due cambiamenti di password\&. Ogni tentativo di cambiare la password prima di questo periodo verr\(`a rifiutato\&. Se non specificato viene assunto \-1 (che disabilita questo controllo)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+Il numero di giorni per i quali un utente va avvisato che la sua password sta per scadere\&. Se zero l\*(Aqutente viene avvisato solo alla scadenza\&. Un valore negativo indica che non si deve avvisare mai\&. Se non specificato allora non c\*(Aq\(`e nessun avviso\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+Con molti cicli \(`e pi\(`u difficile trovare una password usando la forza bruta\&. Ma va notato che \(`e richiesta maggiore potenza di calcolo per autenticare gli utenti\&.
+.sp
+Se non specificato sar\(`a la libc a scegliere il numero di cicli (5000)\&.
+.sp
+Il valore deve essere compreso tra 1\&.000 e 999\&.999\&.999\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.PP
+\fBSUB_GID_MIN\fR (number), \fBSUB_GID_MAX\fR (number), \fBSUB_GID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate group IDs) allocate
+\fBSUB_GID_COUNT\fR
+unused group IDs from the range
+\fBSUB_GID_MIN\fR
+to
+\fBSUB_GID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR,
+\fBSUB_GID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSUB_UID_MIN\fR (number), \fBSUB_UID_MAX\fR (number), \fBSUB_UID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate user IDs) allocate
+\fBSUB_UID_COUNT\fR
+unused user IDs from the range
+\fBSUB_UID_MIN\fR
+to
+\fBSUB_UID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR,
+\fBSUB_UID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_GID_MIN\fR
+(resp\&.
+\fBSYS_GID_MAX\fR) is 101 (resp\&.
+\fBGID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_UID_MIN\fR
+(resp\&.
+\fBSYS_UID_MAX\fR) is 101 (resp\&.
+\fBUID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBUID_MIN\fR
+(resp\&.
+\fBUID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+La maschera di permessi alla creazione dei file \(`e inizializzata con questo valore\&. Se non specificato la maschera viene impostata a 022\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create if
+\fBHOME_MODE\fR
+is not set\&.
+.sp
+It is also used by
+\fBlogin\fR
+to define users\*(Aq initial umask\&. Note that this mask can be overridden by the user\*(Aqs GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.SH "FILE"
+.PP
+/etc/passwd
+.RS 4
+Informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account utente\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informazioni sicure sugli account di gruppo\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configurazione del pacchetto password shadow
+.RE
+.PP
+/etc/subgid
+.RS 4
+Per user subordinate group IDs\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+Per user subordinate user IDs\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(1),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuseradd\fR(8)\&.
diff --git a/man/it/man8/nologin.8 b/man/it/man8/nologin.8
new file mode 100644
index 0000000..c56b345
--- /dev/null
+++ b/man/it/man8/nologin.8
@@ -0,0 +1,55 @@
+'\" t
+.\" Title: nologin
+.\" Author: Nicolas Fran\(,cois <nicolas.francois@centraliens.net>
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi per la gestione del sistema
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "NOLOGIN" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi per la gestione del si"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+nologin \- rifiuta gentilmente l\*(Aqaccesso
+.SH "SINOSSI"
+.HP \w'\fBnologin\fR\ 'u
+\fBnologin\fR
+.SH "DESCRIZIONE"
+.PP
+The
+\fBnologin\fR
+command displays a message that an account is not available and exits non\-zero\&. It is intended as a replacement shell field for accounts that have been disabled\&.
+.PP
+To disable all logins, investigate
+\fBnologin\fR(5)\&.
+.PP
+If
+\fBSSH_ORIGINAL_COMMAND\fR
+is populated it will be logged\&.
+.SH "VEDERE ANCHE"
+.PP
+\fBlogin\fR(1),
+\fBnologin\fR(5)\&.
+.SH "CRONOLOGIA"
+.PP
+The
+\fBnologin\fR
+command appeared in BSD 4\&.4\&.
diff --git a/man/it/man8/pwck.8 b/man/it/man8/pwck.8
new file mode 100644
index 0000000..a3b12b6
--- /dev/null
+++ b/man/it/man8/pwck.8
@@ -0,0 +1,328 @@
+'\" t
+.\" Title: pwck
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi per la gestione del sistema
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "PWCK" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi per la gestione del si"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+pwck \- verifica l\*(Aqintegrit\(`a dei file delle password
+.SH "SINOSSI"
+.HP \w'\fBpwck\fR\ 'u
+\fBpwck\fR [opzioni] [\fIpasswd\fR\ [\ \fIshadow\fR\ ]]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBpwck\fR
+command verifies the integrity of the users and authentication information\&. It checks that all entries in
+/etc/passwd
+and
+/etc/shadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+Vengono fatti controlli per verificare che ogni voce abbia:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+il corretto numero di campi
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+un nome utente univoco e valido
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+identificatori validi dell\*(Aqutente e del gruppo
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+un gruppo primario valido
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+una home directory valida
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+una shell di login valida
+.RE
+.PP
+shadow
+checks are enabled when a second file parameter is specified or when
+/etc/shadow
+exists on the system\&.
+.PP
+Le verifiche sono le seguenti:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+ogni elemento del file passwd deve avere un corrispondente elemento in shadow, e viceversa
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+le password sono specificate nel file shadow
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+gli elementi di shadow hanno il corretto numero di campi
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+gli elementi di shadow sono unici
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+le date di ultima modifica non sono nel futuro
+.RE
+.PP
+The checks for correct number of fields and unique user name are fatal\&. If the entry has the wrong number of fields, the user will be prompted to delete the entire line\&. If the user does not answer affirmatively, all further checks are bypassed\&. An entry with a duplicated user name is prompted for deletion, but the remaining checks will still be made\&. All other errors are warning and the user is encouraged to run the
+\fBusermod\fR
+command to correct the error\&.
+.PP
+The commands which operate on the
+/etc/passwd
+file are not able to alter corrupted or duplicated entries\&.
+\fBpwck\fR
+should be used in those circumstances to remove the offending entry\&.
+.SH "OPZIONI"
+.PP
+The
+\fB\-r\fR
+and
+\fB\-s\fR
+options cannot be combined\&.
+.PP
+The options which apply to the
+\fBpwck\fR
+command are:
+.PP
+\fB\-\-badname\fR\ \&
+.RS 4
+Allow names that do not conform to standards\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Riporta solo gli errori\&. Gli avvisi che non richiedono azioni da parte dell\*(Aqutente non sono mostrati\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-read\-only\fR
+.RS 4
+Execute the
+\fBpwck\fR
+command in read\-only mode\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sort\fR
+.RS 4
+Sort entries in
+/etc/passwd
+and
+/etc/shadow
+by UID\&.
+.RE
+.PP
+By default,
+\fBpwck\fR
+operates on the files
+/etc/passwd
+and
+/etc/shadow\&. The user may select alternate files with the
+\fIpasswd\fR
+and
+\fIshadow\fR
+parameters\&.
+.SH "CONFIGURAZIONE"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+Il numero massimo di giorni che una password pu\(`o essere utilizzata\&. Se la password \(`e pi\(`u vecchia verr\(`a imposto il suo cambiamento\&. Se non specificato viene assunto \-1 (che disabilita questo controllo)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+Il numero minimo di giorni tra due cambiamenti di password\&. Ogni tentativo di cambiare la password prima di questo periodo verr\(`a rifiutato\&. Se non specificato viene assunto \-1 (che disabilita questo controllo)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+Il numero di giorni per i quali un utente va avvisato che la sua password sta per scadere\&. Se zero l\*(Aqutente viene avvisato solo alla scadenza\&. Un valore negativo indica che non si deve avvisare mai\&. Se non specificato allora non c\*(Aq\(`e nessun avviso\&.
+.RE
+.SH "FILE"
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account utente\&.
+.RE
+.SH "VALORI RESTITUITI"
+.PP
+The
+\fBpwck\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI2\fR
+.RS 4
+one or more bad password entries
+.RE
+.PP
+\fI3\fR
+.RS 4
+can\*(Aqt open password files
+.RE
+.PP
+\fI4\fR
+.RS 4
+can\*(Aqt lock password files
+.RE
+.PP
+\fI5\fR
+.RS 4
+can\*(Aqt update password files
+.RE
+.PP
+\fI6\fR
+.RS 4
+can\*(Aqt sort password files
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBgroup\fR(5),
+\fBgrpck\fR(8),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/it/man8/pwconv.8 b/man/it/man8/pwconv.8
new file mode 100644
index 0000000..176ee8a
--- /dev/null
+++ b/man/it/man8/pwconv.8
@@ -0,0 +1,193 @@
+'\" t
+.\" Title: pwconv
+.\" Author: Marek Micha\(/lkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi per la gestione del sistema
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "PWCONV" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi per la gestione del si"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+pwconv, pwunconv, grpconv, grpunconv \- convertono a e da password e gruppi shadow\&.
+.SH "SINOSSI"
+.HP \w'\fBpwconv\fR\ 'u
+\fBpwconv\fR [\fIopzioni\fR]
+.HP \w'\fBpwunconv\fR\ 'u
+\fBpwunconv\fR [\fIopzioni\fR]
+.HP \w'\fBgrpconv\fR\ 'u
+\fBgrpconv\fR [\fIopzioni\fR]
+.HP \w'\fBgrpunconv\fR\ 'u
+\fBgrpunconv\fR [\fIopzioni\fR]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBpwconv\fR
+command creates
+\fIshadow\fR
+from
+\fIpasswd\fR
+and an optionally existing
+\fIshadow\fR\&.
+.PP
+The
+\fBpwunconv\fR
+command creates
+\fIpasswd\fR
+from
+\fIpasswd\fR
+and
+\fIshadow\fR
+and then removes
+\fIshadow\fR\&.
+.PP
+The
+\fBgrpconv\fR
+command creates
+\fIgshadow\fR
+from
+\fIgroup\fR
+and an optionally existing
+\fIgshadow\fR\&.
+.PP
+The
+\fBgrpunconv\fR
+command creates
+\fIgroup\fR
+from
+\fIgroup\fR
+and
+\fIgshadow\fR
+and then removes
+\fIgshadow\fR\&.
+.PP
+These four programs all operate on the normal and shadow password and group files:
+/etc/passwd,
+/etc/group,
+/etc/shadow, and
+/etc/gshadow\&.
+.PP
+Each program acquires the necessary locks before conversion\&.
+\fBpwconv\fR
+and
+\fBgrpconv\fR
+are similar\&. First, entries in the shadowed file which don\*(Aqt exist in the main file are removed\&. Then, shadowed entries which don\*(Aqt have `x\*(Aq as the password in the main file are updated\&. Any missing shadowed entries are added\&. Finally, passwords in the main file are replaced with `x\*(Aq\&. These programs can be used for initial conversion as well to update the shadowed file if the main file is edited by hand\&.
+.PP
+\fBpwconv\fR
+will use the values of
+\fIPASS_MIN_DAYS\fR,
+\fIPASS_MAX_DAYS\fR, and
+\fIPASS_WARN_AGE\fR
+from
+/etc/login\&.defs
+when adding new entries to
+/etc/shadow\&.
+.PP
+Likewise
+\fBpwunconv\fR
+and
+\fBgrpunconv\fR
+are similar\&. Passwords in the main file are updated from the shadowed file\&. Entries which exist in the main file but not in the shadowed file are left alone\&. Finally, the shadowed file is removed\&. Some password aging information is lost by
+\fBpwunconv\fR\&. It will convert what it can\&.
+.SH "OPZIONI"
+.PP
+The options which apply to the
+\fBpwconv\fR,
+\fBpwunconv\fR,
+\fBgrpconv\fR, and
+\fBgrpunconv\fR
+commands are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.SH "ERRORI"
+.PP
+Errors in the password or group files (such as invalid or duplicate entries) may cause these programs to loop forever or fail in other strange ways\&. Please run
+\fBpwck\fR
+and
+\fBgrpck\fR
+to correct any such errors before converting to or from shadow passwords or groups\&.
+.SH "CONFIGURAZIONE"
+.PP
+The following configuration variable in
+/etc/login\&.defs
+changes the behavior of
+\fBgrpconv\fR
+and
+\fBgrpunconv\fR:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Il valore predefinito \(`e 0, che non pone nessun limite al numero di membri per gruppo\&.
+.sp
+Questa opzione (dividi gruppo) permette di limitare la lunghezza delle righe nel file \(Fogroup\(Fc\&. Questo \(`e utile per essere certi che le righe per gruppi NIS non eccedano i 1024 caratteri\&.
+.sp
+Se si deve impostare questo limite, si pu\(`o usare 25\&.
+.sp
+Nota: la divisione dei gruppi potrebbe non essere supportata da ogni strumento (anche all\*(Aqinterno del pacchetto Shadow)\&. Non si dovrebbe utilizzare questa variabile a meno di esserci forzati\&.
+.RE
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of
+\fBpwconv\fR:
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+Il numero massimo di giorni che una password pu\(`o essere utilizzata\&. Se la password \(`e pi\(`u vecchia verr\(`a imposto il suo cambiamento\&. Se non specificato viene assunto \-1 (che disabilita questo controllo)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+Il numero minimo di giorni tra due cambiamenti di password\&. Ogni tentativo di cambiare la password prima di questo periodo verr\(`a rifiutato\&. Se non specificato viene assunto \-1 (che disabilita questo controllo)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+Il numero di giorni per i quali un utente va avvisato che la sua password sta per scadere\&. Se zero l\*(Aqutente viene avvisato solo alla scadenza\&. Un valore negativo indica che non si deve avvisare mai\&. Se non specificato allora non c\*(Aq\(`e nessun avviso\&.
+.RE
+.SH "FILE"
+.PP
+/etc/login\&.defs
+.RS 4
+Configurazione del pacchetto password shadow
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBgrpck\fR(8),
+\fBlogin.defs\fR(5),
+\fBpwck\fR(8)\&.
diff --git a/man/it/man8/pwunconv.8 b/man/it/man8/pwunconv.8
new file mode 100644
index 0000000..6eed9e8
--- /dev/null
+++ b/man/it/man8/pwunconv.8
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/it/man8/sulogin.8 b/man/it/man8/sulogin.8
new file mode 100644
index 0000000..7ee9ab6
--- /dev/null
+++ b/man/it/man8/sulogin.8
@@ -0,0 +1,116 @@
+'\" t
+.\" Title: sulogin
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi per la gestione del sistema
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "SULOGIN" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi per la gestione del si"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+sulogin \- Single\-user login
+.SH "SINTASSI"
+.PP
+\fBsulogin\fR
+[\fItty\-device\fR]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBsulogin\fR
+command is invoked by
+\fBinit\fR
+prior to allowing the user access to the system when in single user mode\&. This feature may only be available on certain systems where
+\fBinit\fR
+has been modified accordingly, or where the
+/etc/inittab
+has an entry for a single user login\&.
+.PP
+The user is prompted
+.PP
+Type control\-d to proceed with normal startup,
+(or give root password for system maintenance):
+.PP
+Input and output will be performed with the standard file descriptors unless the optional device name argument is provided\&.
+.PP
+If the user enters the correct root password, a login session is initiated\&. When
+\fIEOF\fR
+is pressed instead, the system enters multi\-user mode\&.
+.PP
+After the user exits the single\-user shell, or presses
+\fIEOF\fR, the system begins the initialization process required to enter multi\-user mode\&.
+.SH "AVVISI/CAVEAT"
+.PP
+This command can only be used if
+\fBinit\fR
+has been modified to call
+\fBsulogin\fR
+instead of
+/bin/sh, or if the user has set the
+\fIinittab\fR
+to support a single user login\&. For example, the line:
+.PP
+co:s:respawn:/etc/sulogin /dev/console
+.PP
+should execute the sulogin command in single user mode\&.
+.PP
+As complete an environment as possible is created\&. However, various devices may be unmounted or uninitialized and many of the user commands may be unavailable or nonfunctional as a result\&.
+.SH "CONFIGURAZIONE"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.SH "FILE"
+.PP
+/etc/passwd
+.RS 4
+Informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account utente\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBlogin\fR(1),
+\fBsh\fR(1),
+\fBinit\fR(8)\&.
diff --git a/man/it/man8/useradd.8 b/man/it/man8/useradd.8
new file mode 100644
index 0000000..d87831d
--- /dev/null
+++ b/man/it/man8/useradd.8
@@ -0,0 +1,784 @@
+'\" t
+.\" Title: useradd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi per la gestione del sistema
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "USERADD" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi per la gestione del si"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+useradd \- crea un nuovo utente o aggiorna le informazioni predefinite per i nuovi utenti
+.SH "SINOSSI"
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR [\fIopzioni\fR] \fILOGIN\fR
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR \-D
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR \-D [\fIopzioni\fR]
+.SH "DESCRIZIONE"
+.PP
+When invoked without the
+\fB\-D\fR
+option, the
+\fBuseradd\fR
+command creates a new user account using the values specified on the command line plus the default values from the system\&. Depending on command line options, the
+\fBuseradd\fR
+command will update system files and may also create the new user\*(Aqs home directory and copy initial files\&.
+.PP
+By default, a group will also be created for the new user (see
+\fB\-g\fR,
+\fB\-N\fR,
+\fB\-U\fR, and
+\fBUSERGROUPS_ENAB\fR)\&.
+.SH "OPZIONI"
+.PP
+The options which apply to the
+\fBuseradd\fR
+command are:
+.PP
+\fB\-\-badname\fR\ \&
+.RS 4
+Allow names that do not conform to standards\&.
+.RE
+.PP
+\fB\-b\fR, \fB\-\-base\-dir\fR\ \&\fIBASE_DIR\fR
+.RS 4
+The default base directory for the system if
+\fB\-d\fR\ \&\fIHOME_DIR\fR
+is not specified\&.
+\fIBASE_DIR\fR
+is concatenated with the account name to define the home directory\&. If the
+\fB\-m\fR
+option is not used,
+\fIBASE_DIR\fR
+must exist\&.
+.sp
+If this option is not specified,
+\fBuseradd\fR
+will use the base directory specified by the
+\fBHOME\fR
+variable in
+/etc/default/useradd, or
+/home
+by default\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-comment\fR\ \&\fICOMMENT\fR
+.RS 4
+Un testo qualsiasi\&. Di norma \(`e una breve descrizione del login, ed \(`e attualmente usato come nome completo dell\*(Aqutente\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-home\-dir\fR\ \&\fIHOME_DIR\fR
+.RS 4
+The new user will be created using
+\fIHOME_DIR\fR
+as the value for the user\*(Aqs login directory\&. The default is to append the
+\fILOGIN\fR
+name to
+\fIBASE_DIR\fR
+and use that as the login directory name\&. The directory
+\fIHOME_DIR\fR
+does not have to exist but will not be created if it is missing\&.
+.RE
+.PP
+\fB\-D\fR, \fB\-\-defaults\fR
+.RS 4
+Vedere oltre, la sezione \(FoCambiare i valori predefiniti\(Fc\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+The date on which the user account will be disabled\&. The date is specified in the format
+\fIYYYY\-MM\-DD\fR\&.
+.sp
+If not specified,
+\fBuseradd\fR
+will use the default expiry date specified by the
+\fBEXPIRE\fR
+variable in
+/etc/default/useradd, or an empty string (no expiry) by default\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+Il numero di giorni dopo la scadenza della password prima che l\*(Aqaccount venga permanentemente disabilitato\&. Un valore pari a 0 disabilita l\*(Aqaccount non appena la password \(`e scaduta, ed un valore pari a \-1 disabilita questa funzionalit\(`a\&.
+.sp
+If not specified,
+\fBuseradd\fR
+will use the default inactivity period specified by the
+\fBINACTIVE\fR
+variable in
+/etc/default/useradd, or \-1 by default\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGROUP\fR
+.RS 4
+Il nome o numero del gruppo di connessione iniziale dell\*(Aqutente\&. Il nome del gruppo deve esistere\&. Un numero di gruppo deve riferirsi ad un gruppo gi\(`a esistente\&.
+.sp
+If not specified, the behavior of
+\fBuseradd\fR
+will depend on the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&. If this variable is set to
+\fIyes\fR
+(or
+\fB\-U/\-\-user\-group\fR
+is specified on the command line), a group will be created for the user, with the same name as her loginname\&. If the variable is set to
+\fIno\fR
+(or
+\fB\-N/\-\-no\-user\-group\fR
+is specified on the command line), useradd will set the primary group of the new user to the value specified by the
+\fBGROUP\fR
+variable in
+/etc/default/useradd, or 100 by default\&.
+.RE
+.PP
+\fB\-G\fR, \fB\-\-groups\fR\ \&\fIGROUP1\fR[\fI,GROUP2,\&.\&.\&.\fR[\fI,GROUPN\fR]]]
+.RS 4
+A list of supplementary groups which the user is also a member of\&. Each group is separated from the next by a comma, with no intervening whitespace\&. The groups are subject to the same restrictions as the group given with the
+\fB\-g\fR
+option\&. The default is for the user to belong only to the initial group\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-k\fR, \fB\-\-skel\fR\ \&\fISKEL_DIR\fR
+.RS 4
+The skeleton directory, which contains files and directories to be copied in the user\*(Aqs home directory, when the home directory is created by
+\fBuseradd\fR\&.
+.sp
+This option is only valid if the
+\fB\-m\fR
+(or
+\fB\-\-create\-home\fR) option is specified\&.
+.sp
+If this option is not set, the skeleton directory is defined by the
+\fBSKEL\fR
+variable in
+/etc/default/useradd
+or, by default,
+/etc/skel\&.
+.sp
+Se possibile vengono copiate le ACL e gli attributi estesi\&.
+.RE
+.PP
+\fB\-K\fR, \fB\-\-key\fR\ \&\fIKEY\fR=\fIVALUE\fR
+.RS 4
+Overrides
+/etc/login\&.defs
+defaults (\fBUID_MIN\fR,
+\fBUID_MAX\fR,
+\fBUMASK\fR,
+\fBPASS_MAX_DAYS\fR
+and others)\&.
+
+Example:
+\fB\-K\fR\ \&\fIPASS_MAX_DAYS\fR=\fI\-1\fR
+can be used when creating system account to turn off password aging, even though system account has no password at all\&. Multiple
+\fB\-K\fR
+options can be specified, e\&.g\&.:
+\fB\-K\fR\ \&\fIUID_MIN\fR=\fI100\fR\ \&
+\fB\-K\fR\ \&\fIUID_MAX\fR=\fI499\fR
+.RE
+.PP
+\fB\-l\fR, \fB\-\-no\-log\-init\fR
+.RS 4
+Non aggiunge l\*(Aqutente ai database \(Folastlog\(Fc e \(Fofaillog\(Fc\&.
+.sp
+By default, the user\*(Aqs entries in the lastlog and faillog databases are reset to avoid reusing the entry from a previously deleted user\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-create\-home\fR
+.RS 4
+Create the user\*(Aqs home directory if it does not exist\&. The files and directories contained in the skeleton directory (which can be defined with the
+\fB\-k\fR
+option) will be copied to the home directory\&.
+.sp
+By default, if this option is not specified and
+\fBCREATE_HOME\fR
+is not enabled, no home directories are created\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-no\-create\-home\fR
+.RS 4
+Do no create the user\*(Aqs home directory, even if the system wide setting from
+/etc/login\&.defs
+(\fBCREATE_HOME\fR) is set to
+\fIyes\fR\&.
+.RE
+.PP
+\fB\-N\fR, \fB\-\-no\-user\-group\fR
+.RS 4
+Do not create a group with the same name as the user, but add the user to the group specified by the
+\fB\-g\fR
+option or by the
+\fBGROUP\fR
+variable in
+/etc/default/useradd\&.
+.sp
+The default behavior (if the
+\fB\-g\fR,
+\fB\-N\fR, and
+\fB\-U\fR
+options are not specified) is defined by the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+Permette la creazione di un utente con un UID duplicato (non unico)\&.
+.sp
+This option is only valid in combination with the
+\fB\-u\fR
+option\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&. The default is to disable the password\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+Ci si deve accertare che la password rispetti le norme delle password del sistema\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Crea un account di sistema\&.
+.sp
+System users will be created with no aging information in
+/etc/shadow, and their numeric identifiers are chosen in the
+\fBSYS_UID_MIN\fR\-\fBSYS_UID_MAX\fR
+range, defined in
+/etc/login\&.defs, instead of
+\fBUID_MIN\fR\-\fBUID_MAX\fR
+(and their
+\fBGID\fR
+counterparts for the creation of groups)\&.
+.sp
+Note that
+\fBuseradd\fR
+will not create a home directory for such a user, regardless of the default setting in
+/etc/login\&.defs
+(\fBCREATE_HOME\fR)\&. You have to specify the
+\fB\-m\fR
+options if you want a home directory for a system account to be created\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+The name of the user\*(Aqs login shell\&. The default is to leave this field blank, which causes the system to select the default login shell specified by the
+\fBSHELL\fR
+variable in
+/etc/default/useradd, or an empty string by default\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-uid\fR\ \&\fIUID\fR
+.RS 4
+The numerical value of the user\*(Aqs ID\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&. The default is to use the smallest ID value greater than or equal to
+\fBUID_MIN\fR
+and greater than every other user\&.
+.sp
+See also the
+\fB\-r\fR
+option and the
+\fBUID_MAX\fR
+description\&.
+.RE
+.PP
+\fB\-U\fR, \fB\-\-user\-group\fR
+.RS 4
+Crea un gruppo con lo stesso nome dell\*(Aqutente e aggiunge l\*(Aqutente al gruppo stesso\&.
+.sp
+The default behavior (if the
+\fB\-g\fR,
+\fB\-N\fR, and
+\fB\-U\fR
+options are not specified) is defined by the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR\ \&\fISEUSER\fR
+.RS 4
+L\*(Aqutente SELinux per questo login utente\&. Lasciando questo campo vuoto si fa in modo che il sistema selezioni automaticamente l\*(Aqutente SELinux\&.
+.RE
+.SS "Cambiare i valori predefiniti"
+.PP
+When invoked with only the
+\fB\-D\fR
+option,
+\fBuseradd\fR
+will display the current default values\&. When invoked with
+\fB\-D\fR
+plus other options,
+\fBuseradd\fR
+will update the default values for the specified options\&. Valid default\-changing options are:
+.PP
+\fB\-b\fR, \fB\-\-base\-dir\fR\ \&\fIBASE_DIR\fR
+.RS 4
+The path prefix for a new user\*(Aqs home directory\&. The user\*(Aqs name will be affixed to the end of
+\fIBASE_DIR\fR
+to form the new user\*(Aqs home directory name, if the
+\fB\-d\fR
+option is not used when creating a new account\&.
+.sp
+This option sets the
+\fBHOME\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+La data in cui l\*(Aqaccount dell\*(Aqutente verr\(`a disabilitato\&.
+.sp
+This option sets the
+\fBEXPIRE\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+Il numero di giorni dopo la scadenza di una password prima che l\*(Aqaccount venga disabilitato\&.
+.sp
+This option sets the
+\fBINACTIVE\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGROUP\fR
+.RS 4
+The group name or ID for a new user\*(Aqs initial group (when the
+\fB\-N/\-\-no\-user\-group\fR
+is used or when the
+\fBUSERGROUPS_ENAB\fR
+variable is set to
+\fIno\fR
+in
+/etc/login\&.defs)\&. The named group must exist, and a numerical group ID must have an existing entry\&.
+.sp
+This option sets the
+\fBGROUP\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+Il nome della shell di login per il nuovo utente\&.
+.sp
+This option sets the
+\fBSHELL\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.SH "NOTE"
+.PP
+The system administrator is responsible for placing the default user files in the
+/etc/skel/
+directory (or any other skeleton directory specified in
+/etc/default/useradd
+or on the command line)\&.
+.SH "AVVISI/CAVEAT"
+.PP
+Non \(`e possibile aggiungere un utente ad un gruppo NIS o LDAP\&. Questo deve essere fatto sul server corrispondente\&.
+.PP
+Similarly, if the username already exists in an external user database such as NIS or LDAP,
+\fBuseradd\fR
+will deny the user account creation request\&.
+.PP
+I nomi utente devono iniziare con una lettera minuscola o un underscore, seguiti da lettere minuscole, cifre numeriche, underscore o trattini\&. Possono terminare con il simbolo del dollaro\&. In termini di espressioni regolari: [a\-z_][a\-z0\-9_\-]*[$]?
+.PP
+I nomi utente non possono eccedere i 32 caratteri di lunghezza\&.
+.SH "CONFIGURAZIONE"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCREATE_HOME\fR (boolean)
+.RS 4
+Indica se per i nuovi utenti va creata la directory home\&.
+.sp
+Questa impostazione non viene applicata agli utenti di sistema e pu\(`o essere modificata sulla riga di comando\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBGID_MIN\fR
+(resp\&.
+\fBGID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBHOME_MODE\fR (number)
+.RS 4
+The mode for new home directories\&. If not specified, the
+\fBUMASK\fR
+is used to create the mode\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this to set the mode of the home directory they create\&.
+.RE
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+La directory di spool per la posta\&. Questa \(`e necessaria per manipolare la casella di posta quando il corrispondente account utente viene modificato o cancellato\&. Se non \(`e specificata viene utilizzato un valore impostato al momento della compilazione\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Imposta la posizione delle caselle di posta degli utenti relative alla loro directory home\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Il valore predefinito \(`e 0, che non pone nessun limite al numero di membri per gruppo\&.
+.sp
+Questa opzione (dividi gruppo) permette di limitare la lunghezza delle righe nel file \(Fogroup\(Fc\&. Questo \(`e utile per essere certi che le righe per gruppi NIS non eccedano i 1024 caratteri\&.
+.sp
+Se si deve impostare questo limite, si pu\(`o usare 25\&.
+.sp
+Nota: la divisione dei gruppi potrebbe non essere supportata da ogni strumento (anche all\*(Aqinterno del pacchetto Shadow)\&. Non si dovrebbe utilizzare questa variabile a meno di esserci forzati\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+Il numero massimo di giorni che una password pu\(`o essere utilizzata\&. Se la password \(`e pi\(`u vecchia verr\(`a imposto il suo cambiamento\&. Se non specificato viene assunto \-1 (che disabilita questo controllo)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+Il numero minimo di giorni tra due cambiamenti di password\&. Ogni tentativo di cambiare la password prima di questo periodo verr\(`a rifiutato\&. Se non specificato viene assunto \-1 (che disabilita questo controllo)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+Il numero di giorni per i quali un utente va avvisato che la sua password sta per scadere\&. Se zero l\*(Aqutente viene avvisato solo alla scadenza\&. Un valore negativo indica che non si deve avvisare mai\&. Se non specificato allora non c\*(Aq\(`e nessun avviso\&.
+.RE
+.PP
+\fBSUB_GID_MIN\fR (number), \fBSUB_GID_MAX\fR (number), \fBSUB_GID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate group IDs) allocate
+\fBSUB_GID_COUNT\fR
+unused group IDs from the range
+\fBSUB_GID_MIN\fR
+to
+\fBSUB_GID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR,
+\fBSUB_GID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSUB_UID_MIN\fR (number), \fBSUB_UID_MAX\fR (number), \fBSUB_UID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate user IDs) allocate
+\fBSUB_UID_COUNT\fR
+unused user IDs from the range
+\fBSUB_UID_MIN\fR
+to
+\fBSUB_UID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR,
+\fBSUB_UID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_GID_MIN\fR
+(resp\&.
+\fBSYS_GID_MAX\fR) is 101 (resp\&.
+\fBGID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_UID_MIN\fR
+(resp\&.
+\fBSYS_UID_MAX\fR) is 101 (resp\&.
+\fBUID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBUID_MIN\fR
+(resp\&.
+\fBUID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+La maschera di permessi alla creazione dei file \(`e inizializzata con questo valore\&. Se non specificato la maschera viene impostata a 022\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create if
+\fBHOME_MODE\fR
+is not set\&.
+.sp
+It is also used by
+\fBlogin\fR
+to define users\*(Aq initial umask\&. Note that this mask can be overridden by the user\*(Aqs GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Abilita l\*(Aqimpostazione dei bit di gruppo di umask in modo che siano gli stessi dei bit del proprietario (esempio: 022 \-> 002, 077 \-> 007) per utenti non root a condizione che uid e gid siano identici e che il nome utente sia lo stesso del gruppo primario\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FILE"
+.PP
+/etc/passwd
+.RS 4
+Informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account utente\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informazioni sicure sugli account di gruppo\&.
+.RE
+.PP
+/etc/default/useradd
+.RS 4
+Valori predefiniti per la creazione dell\*(Aqaccount\&.
+.RE
+.PP
+/etc/skel/
+.RS 4
+Directory contenente i file predefiniti\&.
+.RE
+.PP
+/etc/subgid
+.RS 4
+Per user subordinate group IDs\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+Per user subordinate user IDs\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configurazione del pacchetto password shadow
+.RE
+.SH "VALORI RESTITUITI"
+.PP
+The
+\fBuseradd\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+can\*(Aqt update password file
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+UID already in use (and no
+\fB\-o\fR)
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI9\fR
+.RS 4
+username already in use
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.PP
+\fI12\fR
+.RS 4
+can\*(Aqt create home directory
+.RE
+.PP
+\fI14\fR
+.RS 4
+can\*(Aqt update SELinux user mapping
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBnewusers\fR(8),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/it/man8/userdel.8 b/man/it/man8/userdel.8
new file mode 100644
index 0000000..aa09920
--- /dev/null
+++ b/man/it/man8/userdel.8
@@ -0,0 +1,308 @@
+'\" t
+.\" Title: userdel
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi per la gestione del sistema
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "USERDEL" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi per la gestione del si"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+userdel \- rimuove l\*(Aqaccount di un utente ed i file relativi
+.SH "SINOSSI"
+.HP \w'\fBuserdel\fR\ 'u
+\fBuserdel\fR [opzioni] \fILOGIN\fR
+.SH "DESCRIZIONE"
+.PP
+The
+\fBuserdel\fR
+command modifies the system account files, deleting all entries that refer to the user name
+\fILOGIN\fR\&. The named user must exist\&.
+.SH "OPZIONI"
+.PP
+The options which apply to the
+\fBuserdel\fR
+command are:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option forces the removal of the user account, even if the user is still logged in\&. It also forces
+\fBuserdel\fR
+to remove the user\*(Aqs home directory and mail spool, even if another user uses the same home directory or if the mail spool is not owned by the specified user\&. If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs
+and if a group exists with the same name as the deleted user, then this group will be removed, even if it is still the primary group of another user\&.
+.sp
+\fINote:\fR
+This option is dangerous and may leave your system in an inconsistent state\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-remove\fR
+.RS 4
+I file nella home directory dell\*(Aqutente verranno rimossi insieme alla home directory stessa e alla casella di posta dell\*(Aqutente\&. I file collocati in altri file system dovranno essere cercati e rimossi manualmente\&.
+.sp
+The mail spool is defined by the
+\fBMAIL_DIR\fR
+variable in the
+login\&.defs
+file\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR
+.RS 4
+Rimuove tutti gli utenti SELinux assegnati al login utente\&.
+.RE
+.SH "CONFIGURAZIONE"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+La directory di spool per la posta\&. Questa \(`e necessaria per manipolare la casella di posta quando il corrispondente account utente viene modificato o cancellato\&. Se non \(`e specificata viene utilizzato un valore impostato al momento della compilazione\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Imposta la posizione delle caselle di posta degli utenti relative alla loro directory home\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Il valore predefinito \(`e 0, che non pone nessun limite al numero di membri per gruppo\&.
+.sp
+Questa opzione (dividi gruppo) permette di limitare la lunghezza delle righe nel file \(Fogroup\(Fc\&. Questo \(`e utile per essere certi che le righe per gruppi NIS non eccedano i 1024 caratteri\&.
+.sp
+Se si deve impostare questo limite, si pu\(`o usare 25\&.
+.sp
+Nota: la divisione dei gruppi potrebbe non essere supportata da ogni strumento (anche all\*(Aqinterno del pacchetto Shadow)\&. Non si dovrebbe utilizzare questa variabile a meno di esserci forzati\&.
+.RE
+.PP
+\fBUSERDEL_CMD\fR (string)
+.RS 4
+Se definito, questo comando viene eseguito quando si cancella un utente\&. Dovrebbe rimuovere tutti i compiti di stampa/cron/at di propriet\(`a dell\*(Aqutente da cancellare (passato come primo argomento)\&.
+.sp
+Il codice d\*(Aquscita restituito dallo script non \(`e preso in considerazione\&.
+.sp
+Here is an example script, which removes the user\*(Aqs cron, at and print jobs:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#! /bin/sh
+
+# Check for the required argument\&.
+if [ $# != 1 ]; then
+ echo "Usage: $0 username"
+ exit 1
+fi
+
+# Remove cron jobs\&.
+crontab \-r \-u $1
+
+# Remove at jobs\&.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username\&.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR \-name "[^\&.]*" \-type f \-user $1 \-delete \e;
+
+# Remove print jobs\&.
+lprm $1
+
+# All done\&.
+exit 0
+
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Abilita l\*(Aqimpostazione dei bit di gruppo di umask in modo che siano gli stessi dei bit del proprietario (esempio: 022 \-> 002, 077 \-> 007) per utenti non root a condizione che uid e gid siano identici e che il nome utente sia lo stesso del gruppo primario\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FILE"
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configurazione del pacchetto password shadow
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account utente\&.
+.RE
+.PP
+/etc/subgid
+.RS 4
+Per user subordinate group IDs\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+Per user subordinate user IDs\&.
+.RE
+.SH "VALORI RESTITUITI"
+.PP
+The
+\fBuserdel\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+can\*(Aqt update password file
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified user doesn\*(Aqt exist
+.RE
+.PP
+\fI8\fR
+.RS 4
+user currently logged in
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.PP
+\fI12\fR
+.RS 4
+can\*(Aqt remove home directory
+.RE
+.SH "AVVISI/CAVEAT"
+.PP
+\fBuserdel\fR
+will not allow you to remove an account if there are running processes which belong to this account\&. In that case, you may have to kill those processes or lock the user\*(Aqs password or account and remove the account later\&. The
+\fB\-f\fR
+option can force the deletion of this account\&.
+.PP
+Occorre controllare manualmente tutti i file system per assicurarsi che non rimanga nessun file di propriet\(`a di questo utente\&.
+.PP
+Non \(`e possibile rimuovere nessun attributo NIS su un client NIS\&. Questo deve essere fatto sul server NIS\&.
+.PP
+If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs,
+\fBuserdel\fR
+will delete the group with the same name as the user\&. To avoid inconsistencies in the passwd and group databases,
+\fBuserdel\fR
+will check that this group is not used as a primary group for another user, and will just warn without deleting the group otherwise\&. The
+\fB\-f\fR
+option can force the deletion of this group\&.
+.SH "VEDERE ANCHE"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBlogin.defs\fR(5),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuseradd\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/it/man8/usermod.8 b/man/it/man8/usermod.8
new file mode 100644
index 0000000..d0f2409
--- /dev/null
+++ b/man/it/man8/usermod.8
@@ -0,0 +1,469 @@
+'\" t
+.\" Title: usermod
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi per la gestione del sistema
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "USERMOD" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi per la gestione del si"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+usermod \- modifica l\*(Aqaccount di un utente
+.SH "SINOSSI"
+.HP \w'\fBusermod\fR\ 'u
+\fBusermod\fR [\fIopzioni\fR] \fILOGIN\fR
+.SH "DESCRIZIONE"
+.PP
+The
+\fBusermod\fR
+command modifies the system account files to reflect the changes that are specified on the command line\&.
+.SH "OPZIONI"
+.PP
+The options which apply to the
+\fBusermod\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-append\fR
+.RS 4
+Add the user to the supplementary group(s)\&. Use only with the
+\fB\-G\fR
+option\&.
+.RE
+.PP
+\fB\-b\fR, \fB\-\-badnames\fR
+.RS 4
+Allow names that do not conform to standards\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-comment\fR\ \&\fICOMMENT\fR
+.RS 4
+The new value of the user\*(Aqs password file comment field\&. It is normally modified using the
+\fBchfn\fR(1)
+utility\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-home\fR\ \&\fIHOME_DIR\fR
+.RS 4
+La nuova directory home dell\*(Aqutente\&.
+.sp
+If the
+\fB\-m\fR
+option is given, the contents of the current home directory will be moved to the new home directory, which is created if it does not already exist\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+The date on which the user account will be disabled\&. The date is specified in the format
+\fIYYYY\-MM\-DD\fR\&.
+.sp
+An empty
+\fIEXPIRE_DATE\fR
+argument will disable the expiration of the account\&.
+.sp
+This option requires a
+/etc/shadow
+file\&. A
+/etc/shadow
+entry will be created if there were none\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+Il numero di giorni dopo la scadenza di una password prima che l\*(Aqaccount venga disabilitato permanentemente\&.
+.sp
+Il valore 0 disabilita l\*(Aqaccount non appena la password \(`e scaduta, e il valore \-1 disabilita questa funzionalit\(`a\&.
+.sp
+This option requires a
+/etc/shadow
+file\&. A
+/etc/shadow
+entry will be created if there were none\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGROUP\fR
+.RS 4
+Il nome o numero del gruppo da assegnare alla connessione dell\*(Aqutente\&. Il gruppo deve esistere\&.
+.sp
+Tutti i file nella directory home dell\*(Aqutente che hanno come gruppo il precedente gruppo primario dell\*(Aqutente stesso verranno modificati perch\('e abbiano questo nuovo gruppo\&.
+.sp
+Il gruppo dei file che si trovano all\*(Aqesterno della directory home dell\*(Aqutente andr\(`a modificato manualmente\&.
+.RE
+.PP
+\fB\-G\fR, \fB\-\-groups\fR\ \&\fIGROUP1\fR[\fI,GROUP2,\&.\&.\&.\fR[\fI,GROUPN\fR]]]
+.RS 4
+A list of supplementary groups which the user is also a member of\&. Each group is separated from the next by a comma, with no intervening whitespace\&. The groups are subject to the same restrictions as the group given with the
+\fB\-g\fR
+option\&.
+.sp
+If the user is currently a member of a group which is not listed, the user will be removed from the group\&. This behaviour can be changed via the
+\fB\-a\fR
+option, which appends the user to the current supplementary group list\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-login\fR\ \&\fINEW_LOGIN\fR
+.RS 4
+The name of the user will be changed from
+\fILOGIN\fR
+to
+\fINEW_LOGIN\fR\&. Nothing else is changed\&. In particular, the user\*(Aqs home directory or mail spool should probably be renamed manually to reflect the new login name\&.
+.RE
+.PP
+\fB\-L\fR, \fB\-\-lock\fR
+.RS 4
+Lock a user\*(Aqs password\&. This puts a \*(Aq!\*(Aq in front of the encrypted password, effectively disabling the password\&. You can\*(Aqt use this option with
+\fB\-p\fR
+or
+\fB\-U\fR\&.
+.sp
+Note: if you wish to lock the account (not only access with a password), you should also set the
+\fIEXPIRE_DATE\fR
+to
+\fI1\fR\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-move\-home\fR
+.RS 4
+Sposta il contenuto della directory home di un utente nella nuova posizione\&.
+.sp
+This option is only valid in combination with the
+\fB\-d\fR
+(or
+\fB\-\-home\fR) option\&.
+.sp
+\fBusermod\fR
+will try to adapt the ownership of the files and to copy the modes, ACL and extended attributes, but manual changes might be needed afterwards\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+When used with the
+\fB\-u\fR
+option, this option allows to change the user ID to a non\-unique value\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+Ci si deve accertare che la password rispetti le norme delle password del sistema\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+Il nome della nuova shell di login dell\*(Aqutente\&. Lasciando questo campo vuoto si fa in modo che il sistema selezioni la shell di login predefinita\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-uid\fR\ \&\fIUID\fR
+.RS 4
+Il nuovo valore numerico dell\*(AqID utente\&.
+.sp
+This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&.
+.sp
+La casella di posta dell\*(Aqutente e ogni altro file di propriet\(`a dell\*(Aqutente che si trovi all\*(Aqinterno della directory home avr\(`a l\*(AqID utente cambiato automaticamente\&.
+.sp
+La propriet\(`a dei file esterni alla directory home dell\*(Aqutente va corretta manualmente\&.
+.sp
+No checks will be performed with regard to the
+\fBUID_MIN\fR,
+\fBUID_MAX\fR,
+\fBSYS_UID_MIN\fR, or
+\fBSYS_UID_MAX\fR
+from
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-U\fR, \fB\-\-unlock\fR
+.RS 4
+Unlock a user\*(Aqs password\&. This removes the \*(Aq!\*(Aq in front of the encrypted password\&. You can\*(Aqt use this option with
+\fB\-p\fR
+or
+\fB\-L\fR\&.
+.sp
+Note: if you wish to unlock the account (not only access with a password), you should also set the
+\fIEXPIRE_DATE\fR
+(for example to
+\fI99999\fR, or to the
+\fBEXPIRE\fR
+value from
+/etc/default/useradd)\&.
+.RE
+.PP
+\fB\-v\fR, \fB\-\-add\-subuids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Add a range of subordinate uids to the user\*(Aqs account\&.
+.sp
+This option may be specified multiple times to add multiple ranges to a users account\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR, or
+\fBSUB_UID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-V\fR, \fB\-\-del\-subuids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Remove a range of subordinate uids from the user\*(Aqs account\&.
+.sp
+This option may be specified multiple times to remove multiple ranges to a users account\&. When both
+\fB\-\-del\-subuids\fR
+and
+\fB\-\-add\-subuids\fR
+are specified, the removal of all subordinate uid ranges happens before any subordinate uid range is added\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR, or
+\fBSUB_UID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-add\-subgids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Add a range of subordinate gids to the user\*(Aqs account\&.
+.sp
+This option may be specified multiple times to add multiple ranges to a users account\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR, or
+\fBSUB_GID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-W\fR, \fB\-\-del\-subgids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Remove a range of subordinate gids from the user\*(Aqs account\&.
+.sp
+This option may be specified multiple times to remove multiple ranges to a users account\&. When both
+\fB\-\-del\-subgids\fR
+and
+\fB\-\-add\-subgids\fR
+are specified, the removal of all subordinate gid ranges happens before any subordinate gid range is added\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR, or
+\fBSUB_GID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR\ \&\fISEUSER\fR
+.RS 4
+Il nuovo utente SELinux per il login dell\*(Aqutente\&.
+.sp
+A blank
+\fISEUSER\fR
+will remove the SELinux user mapping for user
+\fILOGIN\fR
+(if any)\&.
+.RE
+.SH "AVVISI/CAVEAT"
+.PP
+You must make certain that the named user is not executing any processes when this command is being executed if the user\*(Aqs numerical user ID, the user\*(Aqs name, or the user\*(Aqs home directory is being changed\&.
+\fBusermod\fR
+checks this on Linux\&. On other platforms it only uses utmp to check if the user is logged in\&.
+.PP
+You must change the owner of any
+\fBcrontab\fR
+files or
+\fBat\fR
+jobs manually\&.
+.PP
+Si devono apportare tutte le modifiche che riguardano NIS sul server NIS\&.
+.SH "CONFIGURAZIONE"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+La directory di spool per la posta\&. Questa \(`e necessaria per manipolare la casella di posta quando il corrispondente account utente viene modificato o cancellato\&. Se non \(`e specificata viene utilizzato un valore impostato al momento della compilazione\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Imposta la posizione delle caselle di posta degli utenti relative alla loro directory home\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Il valore predefinito \(`e 0, che non pone nessun limite al numero di membri per gruppo\&.
+.sp
+Questa opzione (dividi gruppo) permette di limitare la lunghezza delle righe nel file \(Fogroup\(Fc\&. Questo \(`e utile per essere certi che le righe per gruppi NIS non eccedano i 1024 caratteri\&.
+.sp
+Se si deve impostare questo limite, si pu\(`o usare 25\&.
+.sp
+Nota: la divisione dei gruppi potrebbe non essere supportata da ogni strumento (anche all\*(Aqinterno del pacchetto Shadow)\&. Non si dovrebbe utilizzare questa variabile a meno di esserci forzati\&.
+.RE
+.PP
+\fBSUB_GID_MIN\fR (number), \fBSUB_GID_MAX\fR (number), \fBSUB_GID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate group IDs) allocate
+\fBSUB_GID_COUNT\fR
+unused group IDs from the range
+\fBSUB_GID_MIN\fR
+to
+\fBSUB_GID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR,
+\fBSUB_GID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSUB_UID_MIN\fR (number), \fBSUB_UID_MAX\fR (number), \fBSUB_UID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate user IDs) allocate
+\fBSUB_UID_COUNT\fR
+unused user IDs from the range
+\fBSUB_UID_MIN\fR
+to
+\fBSUB_UID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR,
+\fBSUB_UID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.SH "FILE"
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informazioni sicure sugli account di gruppo\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configurazione del pacchetto password shadow
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account utente\&.
+.RE
+.PP
+/etc/subgid
+.RS 4
+Per user subordinate group IDs\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+Per user subordinate user IDs\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8)\&.
diff --git a/man/it/man8/vigr.8 b/man/it/man8/vigr.8
new file mode 100644
index 0000000..ff72d7a
--- /dev/null
+++ b/man/it/man8/vigr.8
@@ -0,0 +1 @@
+.so man8/vipw.8
diff --git a/man/it/man8/vipw.8 b/man/it/man8/vipw.8
new file mode 100644
index 0000000..8d3feb4
--- /dev/null
+++ b/man/it/man8/vipw.8
@@ -0,0 +1,137 @@
+'\" t
+.\" Title: vipw
+.\" Author: Marek Micha\(/lkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23/01/2020
+.\" Manual: Comandi per la gestione del sistema
+.\" Source: shadow-utils 4.8.1
+.\" Language: Italian
+.\"
+.TH "VIPW" "8" "23/01/2020" "shadow\-utils 4\&.8\&.1" "Comandi per la gestione del si"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+vipw, vigr \- modifica i file delle password, dei gruppi, delle password shadow o dei gruppi shadow
+.SH "SINOSSI"
+.HP \w'\fBvipw\fR\ 'u
+\fBvipw\fR [\fIopzioni\fR]
+.HP \w'\fBvigr\fR\ 'u
+\fBvigr\fR [\fIopzioni\fR]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBvipw\fR
+and
+\fBvigr\fR
+commands edits the files
+/etc/passwd
+and
+/etc/group, respectively\&. With the
+\fB\-s\fR
+flag, they will edit the shadow versions of those files,
+/etc/shadow
+and
+/etc/gshadow, respectively\&. The programs will set the appropriate locks to prevent file corruption\&. When looking for an editor, the programs will first try the environment variable
+\fB$VISUAL\fR, then the environment variable
+\fB$EDITOR\fR, and finally the default editor,
+\fBvi\fR(1)\&.
+.SH "OPZIONI"
+.PP
+The options which apply to the
+\fBvipw\fR
+and
+\fBvigr\fR
+commands are:
+.PP
+\fB\-g\fR, \fB\-\-group\fR
+.RS 4
+Modifica del database \(Fogroup\(Fc\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-passwd\fR
+.RS 4
+Modifica del database \(Fopasswd\(Fc\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Modalit\(`a silenziosa\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shadow\fR
+.RS 4
+Modifica del database \(Foshadow\(Fc o \(Fogshadow\(Fc
+.RE
+.SH "VARIABILI D\*(AQAMBIENTE"
+.PP
+\fBVISUAL\fR
+.RS 4
+Editor da utilizzare\&.
+.RE
+.PP
+\fBEDITOR\fR
+.RS 4
+Editor to be used if
+\fBVISUAL\fR
+is not set\&.
+.RE
+.SH "FILE"
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informazioni sicure sugli account di gruppo\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account utente\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBvi\fR(1),
+\fBgroup\fR(5),
+\fBgshadow\fR(5)
+,
+\fBpasswd\fR(5), ,
+\fBshadow\fR(5)\&.
diff --git a/man/ja/Makefile.am b/man/ja/Makefile.am
new file mode 100644
index 0000000..ffb75a9
--- /dev/null
+++ b/man/ja/Makefile.am
@@ -0,0 +1,58 @@
+
+mandir = @mandir@/ja
+
+man_MANS = \
+ man1/chage.1 \
+ man1/chfn.1 \
+ man8/chpasswd.8 \
+ man1/chsh.1 \
+ man1/expiry.1 \
+ man5/faillog.5 \
+ man8/faillog.8 \
+ man1/gpasswd.1 \
+ man8/groupadd.8 \
+ man8/groupdel.8 \
+ man8/groupmod.8 \
+ man1/groups.1 \
+ man8/grpck.8 \
+ man8/grpconv.8 \
+ man8/grpunconv.8 \
+ man8/lastlog.8 \
+ man1/login.1 \
+ man5/login.defs.5 \
+ man8/logoutd.8 \
+ man1/newgrp.1 \
+ man8/newusers.8 \
+ man1/passwd.1 \
+ man5/passwd.5 \
+ man8/pwck.8 \
+ man8/pwconv.8 \
+ man8/pwunconv.8 \
+ man1/sg.1 \
+ man5/shadow.5 \
+ man1/su.1 \
+ man5/suauth.5 \
+ man8/useradd.8 \
+ man8/userdel.8 \
+ man8/usermod.8 \
+ man8/vigr.8 \
+ man8/vipw.8
+
+man_nopam = \
+ man5/limits.5 \
+ man5/login.access.5 \
+ man5/porttime.5
+
+if !USE_PAM
+man_MANS += $(man_nopam)
+endif
+
+EXTRA_DIST = \
+ $(man_MANS) \
+ man1/id.1 \
+ man3/shadow.3 \
+ man8/sulogin.8
+
+if USE_PAM
+EXTRA_DIST += $(man_nopam)
+endif
diff --git a/man/ja/Makefile.in b/man/ja/Makefile.in
new file mode 100644
index 0000000..2d2ae85
--- /dev/null
+++ b/man/ja/Makefile.in
@@ -0,0 +1,663 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@USE_PAM_FALSE@am__append_1 = $(man_nopam)
+@USE_PAM_TRUE@am__append_2 = $(man_nopam)
+subdir = man/ja
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" \
+ "$(DESTDIR)$(man8dir)"
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@/ja
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = man1/chage.1 man1/chfn.1 man8/chpasswd.8 man1/chsh.1 \
+ man1/expiry.1 man5/faillog.5 man8/faillog.8 man1/gpasswd.1 \
+ man8/groupadd.8 man8/groupdel.8 man8/groupmod.8 man1/groups.1 \
+ man8/grpck.8 man8/grpconv.8 man8/grpunconv.8 man8/lastlog.8 \
+ man1/login.1 man5/login.defs.5 man8/logoutd.8 man1/newgrp.1 \
+ man8/newusers.8 man1/passwd.1 man5/passwd.5 man8/pwck.8 \
+ man8/pwconv.8 man8/pwunconv.8 man1/sg.1 man5/shadow.5 \
+ man1/su.1 man5/suauth.5 man8/useradd.8 man8/userdel.8 \
+ man8/usermod.8 man8/vigr.8 man8/vipw.8 $(am__append_1)
+man_nopam = \
+ man5/limits.5 \
+ man5/login.access.5 \
+ man5/porttime.5
+
+EXTRA_DIST = $(man_MANS) man1/id.1 man3/shadow.3 man8/sulogin.8 \
+ $(am__append_2)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/ja/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign man/ja/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+install-man5: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man5dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.5[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man5:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man5dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.5[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir)
+install-man8: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man8dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.8[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man8:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man8dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.8[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-man5 install-man8 install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+ uninstall-am uninstall-man uninstall-man1 uninstall-man5 \
+ uninstall-man8
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/ja/man1/chage.1 b/man/ja/man1/chage.1
new file mode 100644
index 0000000..cad8bfe
--- /dev/null
+++ b/man/ja/man1/chage.1
@@ -0,0 +1,120 @@
+.\" $Id$
+.\" Copyright 1990 - 1994 Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\" all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Modified Tue 16 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH CHAGE 1
+.SH 名前
+chage \- ユーザパスワードの有効期限情報を変更する。
+.SH 書式
+.TP 6
+\fBchage\fR
+[\fB\-m\fR \fImindays\fR] [\fB\-M\fR \fImaxdays\fR]
+[\fB\-d\fR \fIlastday\fR] [\fB\-I\fR \fIinactive\fR]
+.br
+[\fB\-E\fR \fIexpiredate\fR] [\fB\-W\fR \fIwarndays\fR] \fIuser\fR
+.TP 6
+\fBchage\fR
+\fB\-l\fR \fIuser\fR
+.SH 説明
+\fBchage\fR は、
+パスワードを最後に更新してから、
+次に変更しなければならない期日までの日数を変更する。
+システムはこの情報を用いて、
+ユーザがいつパスワードを変更しなければならないかを決定する。
+\fBchage\fR コマンドを使えるのは root ユーザのみに限られている。
+ただし一般ユーザも \fB\-l\fR オプションを指定すればこのコマンドを利用でき、
+自分のパスワードまたはアカウントがいつ切れるかを知ることができる。
+.PP
+\fB\-m\fR オプションを指定した場合、
+\fImindays\fR の値はパスワード変更の間隔の最短日数になる。
+このフィールドをゼロとした時は、ユーザはいつでもパスワードを変更できる。
+.PP
+\fB\-M\fR オプションを指定すると、
+\fImaxdays\fR の値はパスワードが有効な最長日数となる。
+\fImaxdays\fR と \fIlastday\fR を足した値が現在の日付より小さい場合、
+ユーザはアカウントを使用する前にパスワードを変更しなければならない。
+\fB\-W\fR オプションを使えばこの期日がいつ来るかが分かるようにできる。
+この場合はユーザに事前に警告が与えられる。
+.PP
+\fB\-d\fR オプションを用いると、
+パスワードの最終更新日を設定できる。
+\fIlastday\fR の値は
+1970 年 1 月 1 日からパスワード最終更新日までの日数である。
+日付は YYYY\-MM\-DD という書式
+(もしくはあなたの地域でもっとよく用いられている書式)
+で指定する事もできる。
+.PP
+\fB\-E\fR オプションは、
+それ以降ユーザがアカウントにアクセスできなくなる日付を設定するのに用いられる。
+\fIexpiredate\fR は 1970 年 1 月 1 日から
+アカウントがロックされる日までの日数である。
+日付は YYYY\-MM\-DD という書式
+(もしくはあなたの地域でもっとよく用いられているもの)
+で指定することもできる。
+アカウントをロックされたユーザが再びそのシステムを使うには、
+システム管理者と連絡を取る必要がある。
+.PP
+\fB\-I\fR オプションは、
+パスワードの期限が切れてからアカウントがロックされるまでの
+放置日数を設定するために用いる。
+アカウントをロックされたユーザが再びそのシステムを使うためには、
+システム管理者に連絡しなければならない。
+\fIinactive\fR は使用不能期間の日数である。
+0 にすればこの機能を無効にできる。
+.PP
+\fB\-W\fR オプションは、
+パスワードの変更が必要となる前に警告を行う期間の日数を設定するために用いる。
+\fIwarndays\fR は、
+パスワードの期限切れに先だって、
+ユーザに期限が切れかかっていることを警告する日数である。
+.PP
+いずれのオプションも指定されないと
+\fBchage\fR は対話的に動作する。
+全てのフィールドに対して各々現在の設定値を表示し、
+新しい値の入力を促す。
+新しい値を設定する場合はそれを入力し、
+現在の値を使うなら空行のままリターンキーを押せばよい。
+現在の値は \fB[ ]\fR の間に表示される。
+.SH 注意
+\fBchage\fR プログラムを用いるには shadow パスワードファイルが必要である。
+この機能は、passwd ファイルにパスワードが保存されているときには
+利用できない。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザアカウント情報
+.br
+\fI/etc/shadow\fR \- shadow 化されたユーザアカウント情報
+.SH 関連項目
+.BR passwd (5),
+.BR shadow (5)
+.SH 著者
+Julianne Frances Haugh <jockgrrl@ix.netcom.com>
diff --git a/man/ja/man1/chfn.1 b/man/ja/man1/chfn.1
new file mode 100644
index 0000000..38971ea
--- /dev/null
+++ b/man/ja/man1/chfn.1
@@ -0,0 +1,72 @@
+.\" $Id$
+.\" Copyright 1990 - 1994 Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\" all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Modified Tue 16 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH CHFN 1
+.SH 名前
+chfn \- ユーザの氏名や情報を変更する。
+.SH 書式
+.TP 5
+\fBchfn\fR [\fB\-f\fR \fIfull_name\fR] [\fB\-r\fR \fIroom_no\fR]
+.br
+[\fB\-w\fR \fIwork_ph\fR] [\fB\-h\fR \fIhome_ph\fR] [\fB\-o\fR \fIother\fR]
+[\fIuser\fR]
+.SH 説明
+\fBchfn\fR は、ユーザのフルネーム・オフィスの部屋番号・内線番号・
+自宅の電話番号といったアカウント情報を変更する。
+この情報は \fBfinger\fR(1) のようなプログラムによって表示される。
+一般ユーザは自分自身のアカウント情報のみを変更できる。
+スーパーユーザは全てのアカウントに対して情報を変更できる。
+また \fB\-o\fR オプションを用いて
+GECOS 欄の未定義部分を変更できるのもスーパーユーザだけである。
+.PP
+各フィールドに書く内容に関する制限は、
+コントロール文字・コンマ・コロン・等号を含んでいてはならない、
+ということのみである。
+\fIother\fR 欄に対してはこの制限はないので、
+他のアプリケーションが用いるアカウンティング情報の記録に利用される。
+.PP
+いずれのオプションも指定されないと
+\fBchfn\fR は対話的に動作する。
+全ての欄に対して各々現在の設定値を表示し、新しい値の入力を促す。
+新しい値を設定する場合はそれを入力し、
+現在の値を使うなら空行のままリターンキーを押せばよい。
+現在の値は \fB[ ]\fR 記号の間に表示される。
+オプションを指定しなかった場合、
+chfn は現在のユーザアカウントに対して動作する。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザアカウント情報
+.SH 関連項目
+.BR passwd (5)
+.SH 著者
+Julianne Frances Haugh <jockgrrl@ix.netcom.com>
diff --git a/man/ja/man1/chsh.1 b/man/ja/man1/chsh.1
new file mode 100644
index 0000000..d56be97
--- /dev/null
+++ b/man/ja/man1/chsh.1
@@ -0,0 +1,72 @@
+.\"$Id$
+.\" Copyright 1990, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\" all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Modified Tue 16 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH CHSH 1
+.SH 名前
+chsh \- ログインシェルを変更する
+.SH 書式
+.TP 5
+\fBchsh\fR
+[\fB\-s\fR \fIlogin_shell\fR] [\fIuser\fR]
+.SH 説明
+\fBchsh\fR はユーザのログインシェルを変更する。
+これによって、ユーザがログインして最初に実行されるコマンドが決まる。
+一般ユーザは自分のアカウントのログインシェルのみを変更できる。
+スーパーユーザは全てのアカウントのログインシェルを変更できる。
+.PP
+ログインシェルは、
+コマンド名が \fI/etc/shells\fR に記載されていればなんでも良い。
+スーパーユーザの場合はこの制限はなく、いかなる値でも指定できる。
+機能を制限されたログインシェルを用いているアカウントからは、
+ログインシェルを変更できないかもしれない。
+この理由から、
+\fB/bin/rsh\fR は \fI/etc/shells\fR には書かないほうが良い。
+誤って機能が制限されたシェルに変更してしまうと、
+ログインシェルを元のものに戻せなくなってしまうからである。
+.PP
+\fB\-s\fR オプションを指定しなかった場合は、
+\fBchsh\fR は対話的に動作する。
+ユーザの現在のログインシェルを表示し、新しい値の入力を促す。
+設定値を変更するなら新しい値を入力し、
+現在の値を使うなら空行のままリターンキーを押せばよい。
+現在のシェルは \fB[ ]\fR 記号の間に表示される。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザアカウント情報
+.br
+\fI/etc/shells\fR \- 指定できるログインシェルのリスト
+.SH 関連項目
+.BR chfn (1),
+.BR passwd (5)
+.SH 著者
+Julianne Frances Haugh <jockgrrl@ix.netcom.com>
diff --git a/man/ja/man1/expiry.1 b/man/ja/man1/expiry.1
new file mode 100644
index 0000000..d671507
--- /dev/null
+++ b/man/ja/man1/expiry.1
@@ -0,0 +1,53 @@
+.\" $Id$
+.\" Copyright 1990 - 1994 Julianne Frances Haugh
+.\" All rights reserved.
+.\" Modified for expiry by Ben Collins <bcollins@debian.org>, 1999
+.\"
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" Japanese Version Copyright (c) 2002 NAKANO Takeo all rights reserved.
+.\" Translated Sun 3 Mar 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\" Modified Tue 16 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH EXPIRY 1
+.SH 名前
+expiry \- パスワードの期限切れポリシーのチェックと執行
+.SH 書式
+.TP 6
+\fBexpiry\fR [\fB\-c\fR] [\fB\-f\fR]
+.SH 説明
+.B expiry
+は現在のパスワード期限切れ情報をチェック (\fB\-c\fR) し、
+必要な場合は変更を強制する (\fB\-f\fR)。
+このコマンドは通常のユーザコマンドとして呼び出し可能である。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザアカウント情報
+.br
+\fI/etc/shadow\fR \- shadow 化されたユーザアカウント情報
+.SH 関連項目
+.BR passwd (5),
+.BR shadow (5)
+.SH 著者
+Ben Collins <bcollins@debian.org>
diff --git a/man/ja/man1/gpasswd.1 b/man/ja/man1/gpasswd.1
new file mode 100644
index 0000000..1b34157
--- /dev/null
+++ b/man/ja/man1/gpasswd.1
@@ -0,0 +1,70 @@
+.\"$Id$
+.\" Copyright 1996, Rafal Maszkowski <rzm@pdi.net>
+.\" All rights reserved. You can redistribute this man page and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation; either version 2 of the
+.\" License, or (at your option) any later version.
+.\"
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated & Modified 3 Mar 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\" Modified Tue 16 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH GPASSWD 1
+.SH 名前
+gpasswd \- /etc/groupファイルを管理する
+.SH 書式
+\fBgpasswd\fR \fIgroup\fR
+.br
+\fBgpasswd \-a\fR \fIuser\fR \fIgroup\fR
+.br
+\fBgpasswd \-d\fR \fIuser\fR \fIgroup\fR
+.br
+\fBgpasswd \-R\fR \fIgroup\fR
+.br
+\fBgpasswd \-r\fR \fIgroup\fR
+.br
+\fBgpasswd\fR [\fB\-A\fR \fIuser\fR,...] [\fB\-M\fR \fIuser\fR,...] \fIgroup\fR
+.SH 説明
+.B gpasswd
+は /etc/group ファイル
+(および SHADOWGRP を定義してコンパイルした時は /etc/gshadow ファイル)
+の管理に用いられる。
+各グループには、管理者・メンバー・パスワードを設定できる。
+システム管理者は、
+\fB\-A\fR オプションを使ってグループ管理者 (複数でも可) を定義したり、
+\fB\-M\fR オプションを使ってメンバーを定義したりでき、
+各グループの管理者・メンバーと同等の特権を持つ。
+.PP
+グループ管理者は、\fB\-a\fR オプションを用いてユーザを追加したり、
+\fB\-d\fR オプションを用いてユーザを削除したりできる。
+管理者は \fB\-r\fR オプションを用いてグループパスワードを削除できる。
+パスワードが設定されていない時は、
+グループのメンバーのみが
+.BR newgrp (1)
+を用いてグループの一員になれる。
+オプション \fB\-R\fR を指定すると、
+.BR newgrp (1)
+コマンドを用いたグループへのアクセスはできなくなる。
+.PP
+グループの管理者がグループ名のみを指定して
+.B gpasswd
+コマンドを実行した場合は、
+パスワードの入力を求められる。
+パスワードが設定されている場合でも、
+メンバーはパスワードなしで
+.BR newgrp (1)
+コマンドを使えるが、
+メンバーでない人はパスワードを入力しなくてはならない。
+.SH ファイル
+\fI/etc/group\fR \- グループ情報
+.br
+\fI/etc/gshadow\fR \- shadow されたグループ情報
+.SH 関連項目
+.BR newgrp (1),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR grpck (8)
+.SH 著者
+Rafal Maszkowski <rzm@pdi.net>
diff --git a/man/ja/man1/groups.1 b/man/ja/man1/groups.1
new file mode 100644
index 0000000..f0a2bbf
--- /dev/null
+++ b/man/ja/man1/groups.1
@@ -0,0 +1,65 @@
+.\"$Id$
+.\" Copyright 1991 - 1994, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" Japanese Version Copyright (c) 2001 Maki KURODA
+.\" all right reserved,
+.\" Translated Tue Oct 30 11:58:18 JST 2001
+.\" by Maki KURODA <mkuroda@aisys\-jp.com>
+.\" Modified Tue 16 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.\"WORD: concurrent group set 同時所属グループ集合
+.\"WORD: real group ID 実グループ ID
+.\"WORD: effective group ID 実効グループ ID
+.\"
+.TH GROUPS 1
+.SH 名前
+groups \- 現在のグループ名の表示
+.SH 書式
+\fBgroups\fR [\fIuser\fR]
+.SH 説明
+.B groups
+は現在のグループの名前または ID 値を表示する。
+ID 値に対応する名前が \fI/etc/group\fR に登録されていなければ、
+数値のグループ ID で表示される。
+パラメータとして \fIuser\fR を与えると、
+指定した \fIuser\fR が所属するグループ名を表示する。
+.SH 注意
+同時所属グループ集合 (concurrent group set)
+をサポートしていないシステムでは、
+\fI/etc/group\fR の情報が報告される。
+ユーザが現在の実グループ ID や実効グループ ID を変更するには、
+\fBnewgrp\fR や \fBsg\fR を使用しなければならない。
+.SH ファイル
+/etc/group \- グループ情報
+.SH 関連項目
+.BR newgrp (1),
+.BR getuid (2),
+.BR getgid (2),
+.BR getgroups (2)
+.SH 著者
+Julianne Frances Haugh <jockgrrl@ix.netcom.com>
diff --git a/man/ja/man1/id.1 b/man/ja/man1/id.1
new file mode 100644
index 0000000..197cbe7
--- /dev/null
+++ b/man/ja/man1/id.1
@@ -0,0 +1,57 @@
+.\"$Id$
+.\" Copyright 1991, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" Japanese Version Copyright (c) 2000 ISHIKAWA Keisuke
+.\" all rights reserved.
+.\" Translated Thu Nov 9 23:17:10 JST 2000
+.\" by ISHIKAWA Keisuke
+.\" Modified Tue 16 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH ID 1
+.SH 名前
+id \- 現在のユーザ ID 名とグループ ID 名を表示する
+.SH 書式
+\fBid\fR [\fB\-a\fR]
+.SH 説明
+\fBid\fRは、現在の実ユーザ ID、実効ユーザ ID、実グループ ID、
+実効グループ ID の名前または値を表示する。
+値に対応するエントリが \fI/etc/passwd\fR や
+\fI/etc/group\fR に存在しない場合は、
+対応する名前は表示されずに値だけが表示される。
+ユーザが同時に複数のグループのメンバーになれるシステムでは、
+\fB\-a\fR オプションを指定するとグループの集合が表示される。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザーアカウント情報
+.br
+\fI/etc/group\fR \ \- グループ情報
+.SH 関連項目
+.BR getgid (2),
+.BR getgroups (2),
+.BR getuid (2)
+.SH 著者
+Julianne Frances Haugh <jockgrrl@ix.netcom.com>
diff --git a/man/ja/man1/login.1 b/man/ja/man1/login.1
new file mode 100644
index 0000000..44d305e
--- /dev/null
+++ b/man/ja/man1/login.1
@@ -0,0 +1,141 @@
+.\" $Id$
+.\" Copyright 1989 - 1994, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.TH LOGIN 1
+.SH 名前
+login \- システム上でセッションを開く
+.SH 書式
+\fBlogin\fR [\fB\-p\fR] [\fIusername\fR] [\fIENV=VAR\fR ...]
+.br
+\fBlogin\fR [\fB\-p\fR] [\fB\-h\fR \fIhost\fR] [\fB\-f\fR \fIusername\fR]
+.br
+\fBlogin\fR [\fB\-p\fR] \fB\-r\fR \fIhost\fR
+.SH 説明
+.B login
+はシステムに新たにセッションを開くために用いられる。
+通常は、ユーザの端末に表示される
+.I login:
+というプロンプトに応じる事によって自動的に起動される。
+.B login
+はシェル専用のものであり、
+サブプロセスとして起動することはできない。
+通常シェルは
+.B login
+を
+\fBexec login\fR とみなすので、ユーザは現在のシェルから抜けることになる。
+ログインシェル以外から \fBlogin\fR を起動しようとすると、
+エラーメッセージが表示される。
+.PP
+次いで、必要な場合には、ユーザはパスワードを入力するよう促される。
+パスワードを表示してしまわないよう、エコーは行われない。
+数回以上パスワード入力に失敗すると
+\fBlogin\fR は終了し、通信の接続は切断されてしまう。
+.PP
+アカウントに対してパスワードの有効期限が設定されている場合は、
+先に進む前に新しいパスワードの設定を促されることもある。
+セッションを続けるためには古いパスワードと
+新しいパスワードを入力しなくてはならない。
+詳しい情報は \fBpasswd\fR(1) を参照すること。
+.PP
+ログインに成功すると、システムメッセージやメールの有無が表示される。
+ログインディレクトリに長さ 0 のファイル \fI.hushlogin\fR を作っておけば、
+システムメッセージファイルである
+\fI/etc/motd\fR の表示を無効にできる。
+メールに関するメッセージは、メールボックスの状態によって
+"\fBYou have new mail.\fR",
+"\fBYou have mail.\fR",
+"\fBNo Mail.\fR"
+のいずれかになる。
+.PP
+ユーザ ID とグループの ID は
+\fI/etc/passwd\fR ファイル中に記載されている値に従って設定される。
+\fB$HOME\fR, \fB$SHELL\fR, \fB$PATH\fR, \fB$LOGNAME\fR, \fB$MAIL\fR
+の値は、パスワードエントリのそれぞれのフィールドに従って設定される。
+ulimit, umask, nice 値が、
+GECOS フィールドのエントリーによって設定されることもある。
+.PP
+インストール時の設定によっては、
+\fI/etc/ttytype\fR の指定に従って、
+環境変数\fB$TERM\fRが tty 接続の端末の型 (terminal type)
+に初期化されることもある。
+.PP
+コマンドインタプリタの初期化スクリプトが実行されることもある。
+この機能についての詳しい情報は適当なマニュアルセクションを参照のこと。
+.PP
+サブシステムログインでは、
+ログインシェルの最初の文字に "*" を置く。
+渡されたホームディレクトリは、
+ユーザが実際にログインする新しいファイルシステムのルートとして扱われる。
+.SH オプション
+.TP
+.B \-p
+環境を保存する。
+.TP
+.B \-f
+ユーザはすでに認証されているものとして、認証動作を行なわない。
+.TP
+.B \-h
+このログインのリモートホストの名前。
+.TP
+.B \-r
+rlogin の自動ログインプロトコルを実行する。
+.PP
+\fB\-r\fP, \fB\-h\fP, \fB\-f\fP オプションは、
+root が \fBlogin\fP を起動した場合にのみ用いる。
+.SH 警告
+この版の \fBlogin\fR には多くのコンパイル時オプションがあるが、
+サイトによってはこのうちの一部しか使われていないかもしれない。
+.PP
+システム設定の違いによって上記ファイルの置き場所は変わる。
+.SH ファイル
+\fI/var/run/utmp\fR \- 現在のログインセッションのリスト
+.br
+\fI/var/log/wtmp\fR \- 過去のログインセッションのリスト
+.br
+\fI/etc/passwd\fR \- ユーザアカウント情報
+.br
+\fI/etc/shadow\fR \- 暗号化パスワードと有効期限情報
+.br
+\fI/etc/motd\fR \- システムメッセージファイル
+.br
+\fI/etc/nologin\fR \- root 以外のユーザのログインを禁止する
+.br
+\fI/etc/ttytype\fR \- 端末の型のリスト
+.br
+\fI$HOME/.hushlogin\fR \- システムメッセージの表示を抑制する
+.SH 関連項目
+.BR mail (1),
+.BR passwd (1),
+.BR sh (1),
+.BR su (1),
+.\" .BR d_passwd (5),
+.BR login.defs (5),
+.BR nologin (5),
+.BR passwd (5),
+.BR getty (8)
+.SH 著者
+Julianne Frances Haugh <jockgrrl@ix.netcom.com>
diff --git a/man/ja/man1/newgrp.1 b/man/ja/man1/newgrp.1
new file mode 100644
index 0000000..a60af04
--- /dev/null
+++ b/man/ja/man1/newgrp.1
@@ -0,0 +1,92 @@
+.\"$Id$
+.\" Copyright 1991, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\" all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated & Modified Sun 3 Mar 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\" Modified Tue 16 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH NEWGRP 1
+.SH 名前
+newgrp \- 新しいグループにログインする
+.br
+sg \- 別のグループ ID でコマンドを実行する
+.SH 書式
+\fBnewgrp\fR [\fB\-\fR] [\fIgroup\fR]
+.br
+\fBsg\fR [\fB\-\fR] [\fIgroup\fR [[\fB\-c\fR] \fIcommand\fR]]
+.SH 説明
+.B newgrp
+はログインセッション中に現在のグループ ID を変更するために用いられる。
+オプションとして \fB\-\fR フラグを与えた場合は、
+新たにログインしたのと同じ様に環境が再初期化される。
+そうでない場合は、現在の作業ディレクトリを含めて、
+現在の環境は変化しない。
+.PP
+.B newgrp
+は現在の実グループ ID を、指定したグループに
+(グループ名を指定しなかった場合は \fI/etc/passwd\fR
+に記載されたデフォルトのグループに) 変更する。
+ユーザにはパスワードがなくグループにはある場合、
+あるいはユーザがグループのメンバーではなく
+グループにパスワードがある場合には、
+そのユーザはパスワードの入力を求められる。
+グループのパスワードが設定されておらず、
+かつユーザがグループのメンバーでない場合は、
+アクセスは拒否される。
+.PP
+.B sg
+コマンドは
+.B newgrp
+と同様に動作するが、コマンドを受け付ける。
+このコマンドは \fB/bin/sh\fR シェルで実行される。
+コマンドが複数の単語からなる場合は、
+sg の実行元となるであろうシェルのほとんどにおいて、
+これらをクォートする必要があるだろう。
+.BR newgrp " と " sg
+のもう一つの違いは、
+特定のシェルが \fBnewgrp\fR を特別に扱う点にある。
+このようなシェルは、自分自身を
+.B newgrp
+が生成した新しい実体と置き換える。このようなことは
+.B sg
+では起きないので、
+.B sg
+コマンドから戻った際には以前のグループ ID に戻る。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザアカウント情報
+.br
+\fI/etc/group\fR \- グループ情報
+.SH 関連項目
+.BR id (1),
+.BR login (1),
+.BR su (1)
+.SH 著者
+Julianne Frances Haugh <jockgrrl@ix.netcom.com>
diff --git a/man/ja/man1/passwd.1 b/man/ja/man1/passwd.1
new file mode 100644
index 0000000..15f55d4
--- /dev/null
+++ b/man/ja/man1/passwd.1
@@ -0,0 +1,217 @@
+.\" $Id$
+.\" Copyright 1989 - 1994, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\" all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated 2 Mar 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\" Modified Tue 16 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH PASSWD 1
+.SH 名前
+passwd \- ユーザパスワードを変更する
+.SH 書式
+\fBpasswd\fR [\fB\-f\fR|\fB\-s\fR] [\fIname\fR]
+.br
+\fBpasswd\fR [\fB\-g\fR] [\fB\-r\fR|\fB\-R\fR] \fIgroup\fR
+.br
+\fBpasswd\fR [\fB\-x\fR \fImax\fR] [\fB\-n\fR \fImin\fR]
+[\fB\-w\fR \fIwarn\fR] [\fB\-i\fR \fIinact\fR] \fIlogin\fR
+.br
+\fBpasswd\fR {\fB\-l\fR|\fB\-u\fR|\fB\-d\fR|\fB\-S\fR|\fB\-e\fR} \fIlogin\fR
+.SH 説明
+\fBpasswd\fR はユーザアカウント・グループアカウントのパスワードを変更する。
+一般ユーザは自分のアカウントのパスワードしか変更できない。
+スーパーユーザはいかなるアカウントのパスワードも変更できる。
+グループの管理者はグループのパスワードを変更できる。
+\fBpasswd\fR によって、ユーザのフルネーム・ログインシェル・
+パスワードの期限切れの日付・
+有効期間といったアカウント情報を変更することもできる。
+.PP
+.B \-s
+オプションを指定すると
+.BR passwd " は " chsh
+を呼び出してユーザのシェルを変更する。
+.B \-f
+オプションを指定すると
+.BR passwd " は " chfn
+を呼び出してユーザの GECOS 情報を変更する。
+これらの 2 つのオプションは互換性のためだけにある。
+chsh や chfn を直接呼び出しても構わない。
+.SS パスワードの変更
+パスワードが既にある場合は、まず古いパスワードを入力するよう促される。
+入力されたパスワードは暗号化され、記録されているものと照合される。
+正しいパスワードを 1 回で入力しなくてはならない。
+スーパーユーザは、パスワードを忘れてしまった際の変更も行なえる様に、
+このステップを省略できる。
+.PP
+パスワードが入力された後、パスワード有効期限の情報を調べ、
+現在パスワードの変更が許されているか検査する。
+もし許可されていない場合は、
+\fBpasswd\fR は変更を拒否して終了する。
+.PP
+次にユーザは、置き換えるパスワードを入力するよう促される。
+入力されたパスワードは、充分複雑かどうか検査される。
+一般的な指針としては、
+パスワードは以下の集合それぞれから一つ以上の文字を使った
+6 から 8 文字のものにすべきである。
+.IP "" .5i
+小文字のアルファベット
+.IP "" .5i
+大文字のアルファベット
+.IP "" .5i
+0 から 9 までの数字
+.IP "" .5i
+句読点
+.PP
+システムのデフォルトの消去文字や
+kill 文字を含めないように注意すること。
+\fBpasswd\fR はあまりに単純なパスワードへの変更は拒否する。
+.PP
+入力したパスワードが受け入れられた場合、
+\fBpasswd\fR はもう一度入力を促し、
+二番目に入力したものを最初のものと比較する。
+パスワード変更が受け入れられるためには、
+この両者が合致しなくてはならない。
+.SS グループパスワード
+\fB\-g\fR オプションを用いた場合、
+指定したグループのパスワードが変更される。
+このオプションはスーパーユーザか指定したグループの管理者しか使えない。
+現在のグループパスワードは尋ねてこない。
+\fB\-g\fR オプションを \fB\-r\fR オプションとともに用いると、
+指定したグループのパスワードが削除される。
+こうすると全てのメンバーがこのグループにアクセスできるようになる。
+\fB\-R\fR オプションを \fB\-g\fR オプションとともに用いると、
+全てのユーザに対して指定したグループへのアクセスを禁止できる。
+.SS パスワードの有効期限情報
+スーパーユーザは、パスワードの有効期限に関する情報を変更できる。
+これには \fB\-x\fR, \fB\-n\fR, \fB\-w\fR, \fB\-i\fR などのオプションを用いる。
+\fB\-x\fR オプションはパスワードが有効な最長日数を設定するのに用いられる。
+\fImax\fR 日が過ぎるとパスワードを変更するように求められる。
+\fB\-n\fR オプションはパスワードが変更可能となるまでの
+最短日数を設定するのに用いられる。
+ユーザは \fImin\fR 日が経過した後でないとパスワードを変更できない。
+\fB\-w\fR オプションはパスワードの使用期限が来る前に
+何日間警告を与えるかを設定するために用いられる。
+期限切れの \fIwarn\fR 日前から注意が開始され、
+パスワードが期限切れになるまであと何日残っているかが示される。
+\fB\-i\fR オプションは、
+パスワードの期限が切れてから何日間経過したら、
+そのアカウントを使用不能の状態にするかを設定するのに用いる。
+\fIinact\fR 日間アカウントをパスワード期限切れ状態のままにすると、
+ユーザはそのアカウントに入れなくなる。
+.PP
+あるアカウントのパスワードを直ちに期限切れにしたい場合は、
+\fB\-e\fR オプションを用いればよい。
+するとそのユーザは次にログインする際にパスワードを変更するよう強制される。
+\fB\-d\fR オプションを使って、ユーザのパスワードを削除することもできる
+(パスワードが空になる)。このオプションは注意して使うこと。
+これを使うと、そのアカウントはログインにパスワードを全く必要としなくなり、
+システムが侵入者に対してオープンになってしまう。
+.SS アカウントの保守
+\fB\-l\fR フラグと \fB\-u\fR フラグを用いると、
+ユーザアカウントをロックしたり、そのロックを外したりできる。
+\fB\-l\fR オプションを用いると、
+パスワードフィールドの値は暗号化された如何なる値ともマッチしなくなり、
+アカウントは使用不能になる。
+\fB\-u\fR オプションを用いると、パスワードは以前の値に戻り、
+アカウントが再び使用可能となる。
+.PP
+\fB\-S\fR オプションを用いるとアカウントの状態が表示される。
+アカウントの状態の情報は 6 つの部分からなる。
+最初の部分は、アカウントにロックがかけられている (L)、
+パスワードが存在しない (NP)、
+もしくは使用可能なパスワードがある (P) といった情報を示す。
+2 番目は最後にパスワードが変更された日付を示す。
+残りの4つの部分はそれぞれパスワードの最短期限、最長期限、警告期間、
+使用不能期間である。
+.SS ユーザパスワードに対するヒント
+パスワードの安全性は暗号化アルゴリズムの強力さとキー空間の大きさに依存する。
+\fB\s-2UNIX\s+2\fR のシステム暗号化の方法は
+NBS DES アルゴリズムに基づいており、非常に安全性が高い。
+キー空間の大きさは選ばれたパスワードのランダムさに依存する。
+.PP
+パスワードの安全性が脅かされるのは、
+大抵の場合パスワードの選択や扱いが不注意なためである。
+従ってパスワードとしては、
+辞書に載っているものや書き留めなければならないものは
+避けるべきである。
+また、固有名詞・免許証番号・誕生日・自宅の住所などを
+パスワードにするのも避けるべきである。
+これらはいずれもシステムセキュリティを破る際に、
+推量情報に用いられる可能性があるからである。
+.PP
+パスワードは紙片に書き留めておく必要が無いよう、
+簡単に思い出せるものにしなくてはならない。
+これは例えば、
+短い二つの単語をくっつけて、
+その間に特殊記号や数字を挟み込むことによって作れる。
+例えば Pass%word など。
+.PP
+他の作り方としては、文学作品などから思い出しやすい句を選び出し、
+それぞれの単語から最初もしくは最後の文字を抜き出す方法がある。
+この方法の例としては、
+.IP "" .5i
+Ask not for whom the bell tolls.
+.PP
+という句から
+.IP "" .5i
+An4wtbt.
+というパスワードが作り出せる。
+.PP
+クラッカーの辞書には、
+こんな語句は載っていなさそうだ、とみなしても良いだろう。
+しかし、ここに示した方法だけに頼るのではなく、
+自分独自のパスワードの作り方を考え出すべきである。
+.SS グループのパスワードに関する注意
+グループパスワードは、一人以上の人間が知ることが許されるものであるから、
+本質的にセキュリティ上の問題を抱えている。
+しかしグループを使えば別々の人間が共同で作業する事ができるので、
+これは便利なツールではある。
+.SH 警告
+全てのオプションが使えるようには設定されていないかもしれない。
+パスワードの複雑さの検証はサイトによって異なるだろう。
+ユーザはシステムが満足するような、
+充分複雑なパスワードを選ぶよう強制される。
+NIS が動作していて、
+かつ NIS サーバ以外にログインしているユーザは、
+パスワードを変更できない。
+(訳注: この場合
+.BR yppasswd (8)
+を用いる。)
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザアカウント情報
+.br
+\fI/etc/shadow\fR \- 暗号化されたユーザパスワード
+.SH 関連項目
+.BR group (5),
+.BR passwd (5),
+.BR shadow (5)
+.SH 著者
+Julianne Frances Haugh <jockgrrl@ix.netcom.com>
diff --git a/man/ja/man1/sg.1 b/man/ja/man1/sg.1
new file mode 100644
index 0000000..d07c5e4
--- /dev/null
+++ b/man/ja/man1/sg.1
@@ -0,0 +1 @@
+.so man1/newgrp.1
diff --git a/man/ja/man1/su.1 b/man/ja/man1/su.1
new file mode 100644
index 0000000..9406f0d
--- /dev/null
+++ b/man/ja/man1/su.1
@@ -0,0 +1,88 @@
+.\" $Id$
+.\" Copyright 1989 - 1990, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\" all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated Wed Apr 26 JST 2000 by Kentaro Shirakata <argrath@ub32.org>
+.\" Updated Fri Jan 12 JST 2001 by Kentaro Shirakata <argrath@ub32.org>
+.\" Updated Mon Mar 4 JST 2002 by Kentaro Shirakata <argrath@ub32.org>
+.\" Modified Tue 16 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH SU 1
+.SH 名前
+su \- ユーザIDを変更する。またはスーパーユーザになる
+.SH 書式
+\fBsu\fR [\fB\-\fR] [\fIusername\fR [\fIargs\fR]]
+.SH 説明
+\fBsu\fR はログインセッション中に別のユーザになるために用いる。
+ユーザ名を指定せずに起動した場合、
+デフォルトではスーパーユーザの ID に変更する。
+オプション引数 \fB\-\fR を用いると、
+直接ログインした場合と同じ環境に初期化される。
+.PP
+ユーザ名の後ろに追加の引数を与えることもでき、
+その場合引数はユーザのログインシェルに渡される。
+特に、その引数の一つとして \fB\-c\fR を渡した場合、
+それに続く引数は大部分のコマンドインタプリタにコマンドとして解釈される。
+コマンドはそのユーザに (\fI/etc/passwd\fR で)
+指定されているシェルで実行される。
+.PP
+必要な場合には、ユーザにはパスワードの入力が促される。
+間違ったパスワードが入力された場合にはエラーメッセージが出力される。
+\fIsu\fRしようとした場合は、システムの濫用を検知するために、
+それが正しい場合も不正な場合も常に記録が残される。
+.PP
+現在の環境は新しいシェルに引き継がれる。
+ただし
+\fB$PATH\fR の値は、
+通常のユーザでは \fB/bin:/usr/bin\fR に、
+スーパーユーザでは \fB/sbin:/bin:/usr/sbin:/usr/bin\fR
+に再設定される。
+これは \fI/etc/login.defs\fR の
+\fBENV_PATH\fR と \fBENV_SUPATH\fR で変更できる。
+.PP
+サブシステムログインでは、
+ログインシェルの最初の文字に "*" を置く。
+渡されたホームディレクトリは、
+ユーザが実際にログインする新しいファイルシステムのルートとして扱われる。
+.SH 警告
+この版の \fBsu\fR には多くのコンパイル時オプションがあるが、
+サイトによってはこの一部しか設定されていないこともある。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザアカウント情報
+.br
+\fI/etc/shadow\fR \- 暗号化パスワードと有効期限情報
+.SH 関連項目
+.BR login (1),
+.BR sh (1),
+.BR login.defs (5),
+.BR suauth (5)
+.SH 著者
+Julianne Frances Haugh <jockgrrl@ix.netcom.com>
diff --git a/man/ja/man3/shadow.3 b/man/ja/man3/shadow.3
new file mode 100644
index 0000000..b76a74f
--- /dev/null
+++ b/man/ja/man3/shadow.3
@@ -0,0 +1,153 @@
+.\" $Id$
+.\" Copyright 1989 - 1993, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\" all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" updated Tue 17 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH SHADOW 3
+.SH 名前
+shadow \- 暗号化されたパスワードファイル用ルーチン
+.SH 書式
+.B #include <shadow.h>
+.PP
+.B struct spwd *getspent();
+.PP
+.B struct spwd *getspnam(char
+.IB *name );
+.PP
+.B void setspent();
+.PP
+.B void endspent();
+.PP
+.B struct spwd *fgetspent(FILE
+.IB *fp );
+.PP
+.B struct spwd *sgetspent(char
+.IB *cp );
+.PP
+.B int putspent(struct spwd
+.I *p,
+.B FILE
+.IB *fp );
+.PP
+.B int lckpwdf();
+.PP
+.B int ulckpwdf();
+.SH 説明
+.I shadow
+は shadow パスワードファイル
+\fI/etc/shadow\fR の内容を操作するルーチンである。
+\fI#include\fR ファイルに与えられている構造体は以下の通り。
+.sp
+struct spwd {
+.in +.5i
+.br
+ char *sp_namp; /* user login name */
+.br
+ char *sp_pwdp; /* encrypted password */
+.br
+ long sp_lstchg; /* last password change */
+.br
+ int sp_min; /* days until change allowed. */
+.br
+ int sp_max; /* days before change required */
+.br
+ int sp_warn; /* days warning for expiration */
+.br
+ int sp_inact; /* days before account inactive */
+.br
+ int sp_expire; /* date when account expires */
+.br
+ int sp_flag; /* reserved for future use */
+.br
+.in \-.5i
+}
+.PP
+各フィールドの意味は:
+.sp
+sp_namp \- ヌル終端されたユーザ名文字列へのポインタ
+.br
+sp_pwdp \- ヌル終端されたパスワード文字列へのポインタ
+.br
+sp_lstchg \- 1970年1月1日からパスワード最終変更日時迄の日数
+.br
+sp_min \- パスワード変更が出来るようになるまでの日数
+.br
+sp_max \- パスワードを変更しなくても良い日数
+.br
+sp_warn \- パスワードが期限切れになる前に、
+期限切れが近づいている旨の警告をユーザに出す期間の日数
+.br
+sp_inact \- パスワードが期限切れになってから、
+アカウントが不能となり使用できなくなるまでの日数
+.br
+sp_expire \- 1970年1月1からアカウントが使用不能となる日迄の日数
+.br
+sp_flag \- 将来使うときに向けて予約
+.SH 説明
+\fBgetspent\fR, \fBgetspname\fR, \fBfgetspent\fR, \fBsgetspent\fR
+は、それぞれ \fBstruct spwd\fR へのポインタを返す。
+\fBgetspent\fR はファイルから次のエントリを、
+\fBfgetspent\fR は指定されたストリーム
+(正しい書式のファイルとみなされる)
+から次のエントリを返す。
+\fBsgetspent\fR は入力として与えられた文字列を用いて
+\fBstruct spwd\fR へのポインタを返す。
+\fBgetspnam\fR はファイル中の現在の位置から
+\fBname\fR にマッチするエントリを探す。
+.PP
+\fBsetspent\fR は
+shadow パスワードファイルへのアクセスを開始するために、
+\fBendspent\fR は終了するために用いられる。
+.PP
+\fI/etc/shadow\fR ファイルに対する排他的なアクセスを保証したい場合には、
+\fBlckpwdf\fR ルーチンと \fBulckpwdf\fR ルーチンを用いる。
+\fBlckpwdf\fR は \fBpw_lock\fR を用いて最大 15 秒間ロックを取得しようとする。
+そして最初の 15 秒の残りの間、
+\fBspw_lock\fR によって二度目のロックをしようと試み続ける。
+計 15 秒間の間にいずれかの試みが失敗した場合は、
+\fBlckpwdf\fR は \-1 を返す。
+いずれのロックも成功した場合は 0 が返される。
+.SH 返り値
+これらのルーチンは、エントリが残っていない場合や、
+処理の過程でエラーが発生した場合には NULL を返す。
+返り値が \fBint\fR であるルーチンは、
+成功したら 0 を、失敗したら \-1 を返す。
+.SH 警告
+shadowされたパスワードファイルへのアクセスは制限されているので、
+これらのルーチンはスーパーユーザだけが利用できる。
+.SH ファイル
+\fI/etc/shadow\fR \- 暗号化されたユーザパスワード
+.SH 関連項目
+.BR getpwent (3),
+.BR shadow (5)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/man5/faillog.5 b/man/ja/man5/faillog.5
new file mode 100644
index 0000000..4fdcf73
--- /dev/null
+++ b/man/ja/man5/faillog.5
@@ -0,0 +1,64 @@
+.\"$Id$
+.\" Copyright 1989 - 1994, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\" all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Modified Tue 18 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH FAILLOG 5
+.SH 名前
+faillog \- ログイン失敗を記録するファイル
+.SH 説明
+.I faillog
+は個々のアカウントに対するログイン失敗回数とその限度を記録する。
+ファイルは固定長レコードであり、UID 番号でインデックス付けされている。
+各レコードには、最後にログインに成功して以降のログイン失敗回数、
+アカウントが使用不能となるまでに許されるログイン失敗回数、
+最後にログインに失敗したときの接続デバイス、
+最後にログインに失敗した日付、
+が記録されている。
+.PP
+このファイルの構造は以下の通り。
+.DS
+
+ struct faillog {
+ short fail_cnt;
+ short fail_max;
+ char fail_line[12];
+ time_t fail_time;
+ };
+
+.DE
+.SH ファイル
+\fI/var/log/faillog\fR \- ログイン失敗の記録
+.SH 関連項目
+.BR faillog (8)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/man5/limits.5 b/man/ja/man5/limits.5
new file mode 100644
index 0000000..a8c8329
--- /dev/null
+++ b/man/ja/man5/limits.5
@@ -0,0 +1,89 @@
+.\"$Id$
+.\"
+.\" Japanese Version Copyright (c) 2001 Maki KURODA
+.\" all right reserved,
+.\" Translated Mon Nov 5 18:12:16 JST 2001
+.\" by Maki KURODA <mkuroda@aisys-jp.com>
+.\" Modified Tue 18 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH LIMITS 5
+.SH 名前
+limits \- リソース制限の定義
+.SH 説明
+.I limits
+ファイル (デフォルトでは /etc/limits。
+あるいは config.h で定義した LIMITS_FILE)
+には、設定したいリソース制限を記述する。
+このファイルは root が所有し、
+root アカウントのみが読み込み可能とするべきである.
+.PP
+デフォルトでは root に対する制限は設定できない。
+実は、root と同等のアカウント (UID 0 のアカウント)
+をこの手段によって制限することはできない。
+.PP
+各行には以下の形式でユーザに対する制限を記述する。
+.sp
+.I user LIMITS_STRING
+.PP
+\fBLIMITS_STRING\fP はリソース制限の定義を連結させた文字列である。
+各制限の定義は、1 文字の識別子と、それに続く制限数値からなる。
+.PP
+有効な識別子は以下の通り。
+.sp
+A: アドレス空間の最大値 (KB)
+.br
+C: コアファイルサイズの最大値 (KB)
+.br
+D: データサイズの最大値 (KB)
+.br
+F: ファイルサイズの最大値 (KB)
+.br
+M: メモリ上にロックできるアドレス空間の最大値 (KB)
+.br
+N: ファイルオープン数の最大値
+.br
+R: レジデントセットサイズの最大値 (KB)
+.br
+S: スタックサイズの最大値 (KB)
+.br
+T: CPU 時間の最大値 (分)
+.br
+U: プロセス数の最大値
+.br
+K: \fBumask\fR(2) により設定される、ファイル作成時の mask
+.br
+L: このユーザの同時ログイン数の最大値
+.br
+P: \fBsetpriority\fR(2) によって設定されるプロセス優先度
+.PP
+例えば、\fIL2D2048N5\fP は正しい \fBLIMITS_STRING\fP である。
+以下の 2 つの例は等価である。2 番目のように読み易く書くこともできる。
+.sp
+username L2D2048N5
+.br
+username L2 D2048 N5
+.PP
+\fIusername\fP 以降の行の残りが制限用の文字列として扱われるので、
+コメントは書くことができない。
+login プログラムは、正しくない制限文字列は拒絶する (無視する)。
+.PP
+デフォルトのエントリは、ユーザ名が "\fB*\fP" となっているものである。
+\fBLIMITS_FILE\fP に複数の\fIデフォルト\fPを登録すると、
+最後のものがデフォルト指定として使用される。
+.PP
+あるユーザへの制限を完全に無効にするには、
+シングルダッシュ "\fB\-\fP" を使用する。
+.PP
+さらに、全ての制限の設定は「ログイン単位」で設定されていることに注意すること。
+制限はグローバルではなく、永続的でもない。
+グローバルな制限はいずれ可能になるだろうが、
+今のところは「TO DO」である。;)
+.\"nakano 二番目の文これでいいのかなあ。
+.SH ファイル
+\fI/etc/limits\fR
+.SH 関連項目
+.BR login (1),
+.BR setpriority (2),
+.BR setrlimit (2)
+.SH 著者
+Cristian Gafton (gafton@sorosis.ro)
diff --git a/man/ja/man5/login.access.5 b/man/ja/man5/login.access.5
new file mode 100644
index 0000000..c6ec97b
--- /dev/null
+++ b/man/ja/man5/login.access.5
@@ -0,0 +1,69 @@
+.\"$Id$
+.\" this is comment
+.\"
+.\" This page is originally in the shadow package.
+.\" Translated Fri 14 Feb 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Modified Tue 18 Sep 2002 by NAKNAO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH LOGIN.ACCESS 5
+.\" .Dt SKEY.ACCESS 5
+.\" .Os FreeBSD 1.2
+.SH 名前
+login.access \- ログインアクセスの制御表
+.SH 説明
+.I login.access
+ファイルには、ログインを許可または拒絶する、
+(ユーザ, ホスト) や (ユーザ, tty) の組み合わせを指定する。
+.PP
+誰かがログインすると、
+.I login.access
+ファイルがスキャンされ、最初にマッチする
+(ユーザ,ホスト) の組、
+あるいはネットワーク経由のログインでない場合は最初にマッチする
+(ユーザ, tty) の組を探す。
+このテーブルの許可フィールドによって、
+ログインが許可されるか拒絶されるかが決まる。
+.PP
+ログインアクセス制御表の各行は 3 つのフィールドからなり、
+文字 ":" で分割される。
+.sp 1
+.IR permission : users : origins
+.sp 1
+最初のフィールドは "\fB+\fR" (アクセスを許可する) か
+"\fB\-\fR" (アクセスを拒否する) でなければならない。
+二番目のフィールドは、一つ以上のログイン名やグループ名、
+もしくは
+.B ALL
+(必ずマッチする)
+でなければならない。
+三番目のフィールドは、
+tty 名 (ネットワーク経由でないログインの場合)、
+ホスト名、
+ドメイン名 ("\fB.\fR"で始まる)、
+ホストアドレス、
+インターネットのネットワーク番号 ("\fB.\fR"で終わる)、
+のひとつ以上の構成要素からなるリストであるか、
+.B ALL
+(必ずマッチする) または
+.B LOCAL
+("\fB.\fR"を全く含まない文字列全てにマッチする)
+のいずれかでなくてはならない。
+NIS を運用している場合は、ホストやユーザのパターンで
+@netgroupname が使える。
+.PP
+.B EXCEPT
+オペレータを用いると、
+非常に簡略にルールを指定できる。
+.PP
+group ファイルが検索されるのは、
+ログインするユーザ名が名前にマッチしなかった場合に限られる。
+マッチするグループは、
+group ファイル中でユーザ名が明示的にリストされているものに限られる。
+このプログラムはユーザの主グループの ID 番号までは見ない。
+.SH ファイル
+\fI/etc/login.access\fR
+.SH 関連項目
+.BR login (1)
+.SH 著者
+Guido van Rooij
diff --git a/man/ja/man5/login.defs.5 b/man/ja/man5/login.defs.5
new file mode 100644
index 0000000..cb9566e
--- /dev/null
+++ b/man/ja/man5/login.defs.5
@@ -0,0 +1,193 @@
+.\" Copyright 1991 - 1993, Julianne Frances Haugh and Chip Rosenthal
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" $Id$
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\" all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated Wed Apr 26 17:22:36 JST 2000
+.\" by Kentaro Shirakata <argrath@ub32.org>
+.\" Updated Sat Jan 13 09:24:04 JST 2001
+.\" by Kentaro Shirakata <argrath@ub32.org>
+.\" Updated Tue 18 Sep 2002 by NAKNAO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.\" WORD: shadow login suite shadow ログイン機能
+.TH LOGIN.DEFS 5
+.SH 名前
+/etc/login.defs \- shadow パスワード機能の設定
+.SH 説明
+.I /etc/login.defs
+ファイルは shadow ログイン機能に対するサイト固有の設定を定義する。
+このファイルは必ず存在しなければならない。
+このファイルが無くてもシステム運用は可能であるが、
+おそらく望まない結果となるだろう。
+.PP
+このファイルは読み取り可能なテキストファイルで、
+ファイル中の一行につき一つの設定パラメータを設定している。
+各行では、設定パラメータの名前とその値が空白で区切られて示される。
+空行とコメント行は無視される。
+コメント行は `#' 記号で始まる。
+記号`#'はその行での空白以外の最初の文字でなければならない。
+.PP
+パラメータ値は四つの型を取ることができる。
+文字列・ブール型・数値・倍精度数値、である。
+文字列には全ての印字可能文字を使える。
+ブール型パラメータの値は ``yes'' か ``no'' のいずれかでなければならない。
+値の指定されていないブール型パラメータや、
+``yes'', ``no'' 以外が指定されたブール型パラメータの値は ``no''とされる。
+(単精度および倍精度) 数値は、
+10 進数、
+(数値の前に ``0'' を付けた) 8 進数、
+(数値の前に ``0x'' を付けた) 16 進数のいずれかで指定する。
+単精度・倍精度数値パラメータの最大値は計算機に依存する。
+.PP
+以下に示すような設定項目がある:
+.\"
+.IP "CHFN_AUTH (ブール値)"
+もし
+.I yes
+なら、
+.BR chfn ", " chsh
+両プログラムは、スーパーユーザが起動したのでない限り
+何らかの変更を行なう前にパスワードを尋ねる。
+.\"
+.IP "CHFN_RESTRICT (文字列)"
+このパラメータは
+.I passwd
+ファイルの
+.I gecos
+フィールドのうち、
+一般ユーザが
+.B chfn
+を使って変更できるフィールドを指定する。
+指定する文字列は
+.IR f ,
+.IR r ,
+.IR w ,
+.I h
+各文字の任意の組み合わせで、それぞれフルネーム、部屋番号、
+職場電話番号、自宅電話番号を意味する。
+指定されなかった場合は、スーパーユーザだけが全ての項目を変更できる。
+最も制限をきつくしたい場合は、
+chfn を SUID ではインストールしなければよい。
+.\"
+.IP "GID_MAX (数値)"
+.IP "GID_MIN (数値)"
+.B useradd
+プログラムおよび
+.B groupadd
+プログラムがグループ ID を選択する時の範囲。
+.\"
+.IP "MAIL_DIR (文字列)"
+メールスプールディレクトリ。
+あるユーザアカウントが修正・削除された際に、
+そのユーザのメールボックスに対する作業のために必要となる。
+指定されないと、コンパイル時のデフォルト値が用いられる。
+.\"
+.IP "PASS_MAX_DAYS (数値)"
+一つのパスワードを使える最長日数。
+パスワードがこの日数よりも古い場合は、変更するよう強制される。
+指定されていない場合は \-1 となる (この制限機能を無効にする)。
+.IP "PASS_MIN_DAYS (数値)"
+パスワードを変更してから次に変更できるようになるまでの最短日数。
+この日数が経たないうちにパスワードを変更しようとしても拒否される。
+指定されていない場合は \-1 となる (この制限機能を無効にする)。
+.IP "PASS_WARN_AGE (数値)"
+パスワードの有効期限が来る前に警告を発する期間の日数。
+ゼロにしておくと、期限切れの当日にのみ警告を行い、
+負の数を指定した場合は一切警告を行わない。
+指定されていない場合は警告を行わない。
+.PP
+PASS_MAX_DAYS, PASS_MIN_DAYS, PASS_WARN_AGE
+はアカウントを作るときにだけ利用される。
+これらの設定を変更しても、既存のアカウントには影響しない。
+.\"
+.IP "UID_MAX (数値)"
+.IP "UID_MIN (数値)"
+.B useradd
+プログラムがユーザ ID を選択する時の範囲。
+.\"
+.IP "UMASK (数値)"
+許可属性マスクをこの値に初期化する。
+指定されていない場合は、許可属性マスクは 077 に初期化される。
+.\"
+.IP "USERDEL_CMD (文字列)"
+定義されていると、ユーザを削除するときにこのコマンドが実行される。
+削除されるユーザ (最初の引き数に渡される) の at/cron/print
+ジョブなどを削除するコマンドにしておくとよい。
+.\"
+.SH 参照表
+以下の参照表は、
+shadow パスワード機能のどのプログラムが
+どのパラメータを使用するかを示したものである。
+.na
+.IP chfn 12
+CHFN_AUTH CHFN_RESTRICT
+.IP chsh 12
+CHFN_AUTH
+.IP groupadd 12
+GID_MAX GID_MIN
+.IP newusers 12
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+UMASK
+.IP pwconv 12
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+.IP useradd 12
+GID_MAX GID_MIN
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+UID_MAX UID_MIN
+UMASK
+.IP userdel 12
+MAIL_DIR
+USERDEL_CMD
+.IP usermod 12
+MAIL_DIR
+.ad
+.SH バグ
+shadow パスワード機能によって提供されてきた機能の大部分は、
+現在は PAM によって処理されている。
+したがって、
+.BR login (1),
+.BR passwd (1),
+.BR su (1)
+などのプログラムは、もはや
+\fI/etc/login.defs\fR
+を用いない。
+対応する PAM の設定ファイルを調べるようにしてほしい。
+.SH 関連項目
+.BR login (1),
+.BR passwd (1),
+.BR su (1),
+.BR passwd (5),
+.BR shadow (5),
+.BR pam (8)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
+.br
+Chip Rosenthal (chip@unicom.com)
diff --git a/man/ja/man5/passwd.5 b/man/ja/man5/passwd.5
new file mode 100644
index 0000000..438f499
--- /dev/null
+++ b/man/ja/man5/passwd.5
@@ -0,0 +1,113 @@
+.\"$Id$
+.\" Copyright 1989 - 1990, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\" all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Modified Tue 18 Sep 2002 by NAKNAO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH PASSWD 5
+.SH 名前
+passwd \- パスワードファイル
+.SH 説明
+.I passwd
+ファイルには各ユーザアカウントの様々な情報が記録されている。
+書かれているのは次の通り。
+.IP "" .5i
+ログイン名
+.IP "" .5i
+暗号化されたパスワード (無いこともある)
+.IP "" .5i
+ユーザ ID 番号
+.IP "" .5i
+グループ ID 番号
+.IP "" .5i
+ユーザ名またはコメントのフィールド
+.IP "" .5i
+ユーザのホームディレクトリ
+.IP "" .5i
+ユーザのコマンドインタプリタ
+.PP
+パスワードが shadow 化されている場合は、
+パスワードフィールドを埋めてはならない。
+shadow パスワードを用いている場合、暗号化されたパスワードは
+\fI/etc/shadow\fR に書かれている。
+暗号化されたパスワードは、
+アルファベット a から z、A から Z、0 から 9、\. と / の
+64 文字から作られた 13 文字からなる。
+この文字列がどのように解釈されるかの詳細は
+\fBcrypt\fR(3) を参照のこと。
+.PP
+オプションとして、パスワードの後に、
+コンマに続いてパスワードの有効期限文字列が記されていることもある。
+この文字列はパスワードと同じ文字セットからなる。
+最初の文字は、パスワードが何週間有効かを示す。
+二番目の文字は、何週間経てばユーザがパスワードを変更できるかを示す。
+最後の二文字は、
+最後にパスワードを変更したのが
+1970 年 1 月から何週間経過した時点であるかを表す。
+パスワードの有効期限が過ぎた時は、
+ユーザは新しいパスワードを設定しなければならない。
+.PP
+コメントフィールドは
+\fBfinger\fR(1) のような様々なシステムユーティリティから利用される。
+コメントフィールドには、追加情報として、
+次のような 3 つの数値が記入されていることもある。
+.IP "" .5i
+pri= \- nice の初期設定値
+.IP "" .5i
+umask= \- umask の初期設定値
+.IP "" .5i
+ulimit= \- ulimit の初期設定値
+.PP
+これらのフィールドは互いに、また他のコメントフィールドと、
+コンマを用いて分離される。
+.PP
+ホームディレクトリフィールドは、
+初期作業ディレクトリの名前を与える。
+\fBlogin\fR はこの情報を用いて環境変数 \fBHOME\fR の内容を設定する。
+.PP
+コマンドインタプリタのフィールドには、
+ユーザのコマンド言語インタプリタか、
+最初に実行するプログラムの名前を記す。
+\fBlogin\fR はこの情報を用いて環境変数 \fBSHELL\fR の内容を設定する。
+このフィールドに何も記されていない場合は、
+デフォルト値として \fB/bin/sh\fR を使用する。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザアカウント情報
+.SH 関連項目
+.BR login (1),
+.BR passwd (1),
+.BR su (1),
+.BR shadow (5),
+.BR pwconv (8),
+.BR pwunconv (8),
+.BR sulogin (8)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/man5/porttime.5 b/man/ja/man5/porttime.5
new file mode 100644
index 0000000..5b6b035
--- /dev/null
+++ b/man/ja/man5/porttime.5
@@ -0,0 +1,93 @@
+.\" $Id$
+.\" Copyright 1989 - 1990, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\" all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Modified Tue 18 Sep 2002 by NAKNAO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH PORTTIME 5
+.SH 名前
+porttime \- ポートアクセス時間設定ファイル
+.SH 説明
+.I porttime
+は tty デバイス・ユーザ名・ログイン可能時間、のリストからなる。
+.PP
+それぞれのエントリは、コロンで区切られた三つのフィールドからなる。
+最初のフィールドはコンマで区切られた tty デバイスのリストで、
+アスタリスクを指定した場合はあらゆる tty デバイスにマッチする。
+二番目のフィールドはコンマで区切られたユーザ名のリストで、
+アスタリスクを指定した場合はあらゆるユーザにマッチする。
+三番目のフィールドは、
+コンマで区切られたログインを許可時間のリストである。
+.PP
+アクセス時間の各エントリは、
+\fBSu\fR, \fBMo\fR, \fBTu\fR, \fBWe\fR, \fBTh\fR, \fBFr\fR, \fBSa\fR
+で略記されたゼロ個以上の曜日と、
+ハイフンで区切られた 2 つの時刻とからなる。
+月曜日から金曜日までを指定する \fBWk\fR や、
+全ての日を指定する \fBAl\fR という略記法を用いることもできる。
+曜日の指定が無い場合は \fBAl\fR だとみなされる。
+.SH 例
+次のエントリは、ユーザ \fBjfh\fR が平日の午前9時から午後5時まで、
+全てのポートからアクセス可能であることを示す。
+.br
+.sp 1
+ *:jfh:Wk0900\-1700
+.br
+.sp 1
+次のエントリは、
+\fBroot\fR と \fBoper\fR 以外のユーザには、どの時間帯にも
+/dev/console からのアクセスを許可しない。
+この例は、\fI/etc/porttime\fR
+ファイルがアクセス可能時間のリストを
+どういう順序で扱うかも示している。
+他の全てのユーザは二番目のエントリにマッチし、
+したがって console からのアクセスは許可されない。
+.br
+.sp 1
+ console:root,oper:Al0000\-2400
+.br
+ console:*:
+.br
+.sp 1
+次のエントリは、
+ユーザ \fBgames\fR が、就業時間外なら
+あらゆるポートからアクセスできるように指定している。
+.br
+.sp 1
+ *:games:Wk1700\-0900,SaSu0000\-2400
+.br
+.sp 1
+.SH ファイル
+\fI/etc/porttime\fR \- ポートへのアクセス可能時間を記したファイル
+.SH 関連項目
+.BR login (1)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/man5/shadow.5 b/man/ja/man5/shadow.5
new file mode 100644
index 0000000..8885990
--- /dev/null
+++ b/man/ja/man5/shadow.5
@@ -0,0 +1,102 @@
+.\"$Id$
+.\" Copyright 1989 - 1990, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\" all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Modified Tue 18 Sep 2002 by NAKNAO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH SHADOW 5
+.SH 名前
+shadow \- 暗号化されたパスワードファイル
+.SH 説明
+.I shadow
+にはユーザのアカウントに対する暗号化されたパスワード情報、
+およびオプションとしてパスワードの有効期限の情報が記されている。
+含まれている内容は
+.IP "" .5i
+ログイン名
+.IP "" .5i
+暗号化されたパスワード
+.IP "" .5i
+1970 年 1 月 1 日から、最後にパスワードが変更された日までの日数
+.IP "" .5i
+パスワードが変更可能となるまでの日数
+.IP "" .5i
+パスワードを変更しなくてはならなくなる日までの日数
+.IP "" .5i
+パスワード有効期限が来る前に、ユーザが警告を受ける日数
+.IP "" .5i
+パスワード有効期限が過ぎてからアカウントが使用不能になるまでの日数
+.IP "" .5i
+1970 年 1 月 1 日からアカウントが使用不能になる日までの日数
+.IP "" .5i
+予約フィールド
+.PP
+パスワードフィールドは必ず記入されていなくてはならない。
+暗号化されたパスワードは、
+a から z、A から Z のアルファベット、
+0 から 9 までの数字、 \. と / の 64 文字のうちの、
+13 文字以上 24 文字以下である。
+この文字列がどのように解釈されるかの詳細は \fBcrypt\fR(3) を参照せよ。
+.PP
+最後にパスワードを変更した日時は
+1970 年 1 月 1 日からの日数として記述される。
+パスワードは十分な日数が経過してからでないと変更できず、
+また最大日数が経過した後は必ず変更しなければならない。
+変更可能となるまでに要する日数が有効期限よりも大きい場合は、
+ユーザがパスワードを変更することは出来ない。
+.PP
+パスワードの有効期限が過ぎてから、
+指定日数のうちにパスワードを変更しなかった場合は、
+そのアカウントは無効になり、使えなくなる。
+また、アカウントを指定した期日に、
+(その他のパスワード有効期限情報にはよらず)
+使用不能とすることもできる。
+.PP
+この情報は、\fI/etc/passwd\fR 中の
+あらゆるパスワード情報・有効期限情報よりも優先される。
+.PP
+パスワードの安全性を保つためには、
+このファイルを一般ユーザが読めるようにしてはならない。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザアカウント情報
+.br
+\fI/etc/shadow\fR \- 暗号化されたユーザパスワード
+.SH 関連項目
+.BR chage (1),
+.BR login (1),
+.BR passwd (1),
+.BR su (1),
+.BR passwd (5),
+.BR pwconv (8),
+.BR pwunconv (8),
+.BR sulogin (8)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/man5/suauth.5 b/man/ja/man5/suauth.5
new file mode 100644
index 0000000..b379d03
--- /dev/null
+++ b/man/ja/man5/suauth.5
@@ -0,0 +1,116 @@
+.\"$Id$
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\" all rights reserved.
+.\" Translated Fri 14 Feb 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Modified Tue 18 Sep 2002 by NAKNAO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH SUAUTH 5 "Feb 14, 1996"
+.UC 5
+.SH 名前
+suauth \- su を詳細に制御するためのファイル
+.SH 書式
+.B /etc/suauth
+.SH 説明
+.I /etc/suauth
+ファイルは、
+su コマンドが実行されるたびに参照される。
+このファイルを用いると、
+以下の情報に基づいて su コマンドの動作を変更できる。
+.PP
+.RS
+.nf
+1) su で成り代わろうとしているユーザ
+.fi
+2) su コマンドを実行しているユーザ
+(もしくはそのユーザが属するグループのいずれか)
+.RE
+.PP
+このファイルは次の様な書式をしている。
+# で始まる行はコメントとして扱われ、無視される。
+.PP
+.RS
+to\-id:from\-id:ACTION
+.RE
+.PP
+ここで to\-id は、
+.B ALL
+という単語、
+コンマで区切られたユーザ名のリスト、
+.B ALL EXCEPT
+という単語以降に置かれた "," 区切りのユーザ名リスト、
+のいずれかである。
+.PP
+from\-id は to\-id と同じ書式であり、更に
+.B GROUP
+という単語も使用できる。
+.B ALL EXCEPT GROUP
+という使い方も同様に利用できる。
+.B GROUP
+の後には一つ以上のグループ名を "," で区切って記す。
+そのグループを主グループ id として持つだけではだめで、
+\fI/etc/group\fR のエントリにユーザ名が記されていなければならない。
+.PP
+ACTION には、以下のオプションのいずれか一つを指定できる。
+.TP 10
+.B DENY
+パスワードを聞く前に su 動作を中止する。
+.TP
+.B NOPASS
+自動的に su は成功し、パスワードは尋ねない。
+.TP
+.B OWNPASS
+su が成功するためには、
+ユーザが自分のパスワードを入力しなくてはならない。
+パスワードを入力するように要求される。
+.PP
+コロンによって区切られた別々のフィールドが三つある点に注意すること。
+コロンの前後に空白があってはならない。
+ファイルは一行毎に順番に吟味され、
+最初にマッチした規則が用いられ、
+ファイルの残りはそれ以上捜査されない。
+これによって、
+システム管理者は望む限りの微調整を行うことが可能となる。
+.SH 例
+.PP
+.nf
+# /etc/suauthファイルの例
+#
+# 二人の特権ユーザが、自分のパスワードを
+# 用いて root に su できる。
+#
+root:chris,birddog:OWNPASS
+#
+# 他のユーザは wheel グループに属していない限り
+# root に su できない。これは BSD と同じ動作である。
+#
+root:ALL EXCEPT GROUP wheel:DENY
+#
+# おそらく terry と birddog は同じ人間が
+# 所有するアカウントである。
+# パスワード無しで互いに他方に su できる。
+#
+terry:birddog:NOPASS
+birddog:terry:NOPASS
+#
+.fi
+.SH ファイル
+\fI/etc/suauth\fR
+.SH バグ
+多くのバグが潜んでいる可能性がある。
+とりわけ、ファイルパーザは書式エラーに寛大ではなく、
+(行の始め及び終わり以外に) 無駄な空白があってはならないし、
+特定のトークンが別々のものを区切るようになっている。
+.SH 返り値
+ファイルをパースする際のエラーは
+.BR syslogd (8)
+を通して、AUTH ファシリティの ERR レベルで通知される。
+.SH 関連項目
+.BR su (1)
+.SH 著者
+.nf
+Chris Evans (lady0110@sable.ox.ac.uk)
+Lady Margaret Hall
+Oxford University
+England
diff --git a/man/ja/man8/chpasswd.8 b/man/ja/man8/chpasswd.8
new file mode 100644
index 0000000..e5dc43e
--- /dev/null
+++ b/man/ja/man8/chpasswd.8
@@ -0,0 +1,70 @@
+.\"$Id$
+.\" Copyright 1991, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\" all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated Wed Apr 26 18:06:10 JST 2000
+.\" by Kentaro Shirakata <argrath@ub32.org>
+.\" Updated & Modified Sat 21 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH CHPASSWD 8
+.SH 名前
+\fBchpasswd\fR \- パスワードファイルをバッチ処理で更新する
+.SH 書式
+\fBchpasswd\fR [\fB\-e\fR]
+.SH 説明
+\fBchpasswd\fR コマンドは
+標準入力からユーザ名とパスワードの組が記されているファイルを読み込み、
+その情報を用いて既存のユーザ群のパスワード情報を更新する。
+\-e オプションがない場合は、パスワードは平文とみなされる。
+\-e オプションがある場合は、パスワードは暗号化されているとみなされる。
+各行の書式は次の通り。
+.sp 1
+ \fIuser_name\fR:\fIpassword\fR
+.sp 1
+指定したユーザは既に存在していなければならない。
+与えられたパスワードは必要に応じて暗号化され、
+パスワードの有効期限がある場合はそれも更新される。
+.PP
+このコマンドは、同時に大量のアカウントを作成するような、
+大規模なシステム環境で用いるために作られた。
+.SH 警告
+.\" The \fBmkpasswd\fR command must be executed afterwards to update the
+.\" DBM password files.
+入力ファイルに暗号化されていないパスワードが記されている場合は、
+適切に保護しておかなければならない。
+.\" This command may be discarded in favor of the newusers(8) command.
+.SH 関連項目
+.\" mkpasswd(8), passwd(1), useradd(1)
+.BR passwd (1),
+.BR newusers (8),
+.BR useradd (8)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/man8/faillog.8 b/man/ja/man8/faillog.8
new file mode 100644
index 0000000..222043a
--- /dev/null
+++ b/man/ja/man8/faillog.8
@@ -0,0 +1,97 @@
+.\"$Id$
+.\" Copyright 1989 \- 1994, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\" all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Modified Sat 21 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH FAILLOG 8
+.SH 名前
+faillog \- faillog を調べ、login 失敗の制限を設定する
+.SH 書式
+\fBfaillog\fR [\fB\-u\fR \fIlogin\-name\fR] [\fB\-a\fR] [\fB\-t\fR \fIdays\fR]
+[\fB\-m\fR \fImax\fR] [\fB\-pr\fR]
+.SH 説明
+\fBfaillog\fR はログインの失敗を記録するログファイル
+\fI/var/log/faillog\fR の内容を整形し、
+失敗の回数と制限値を記録・管理する。
+\fBfaillog\fR に与える引数の順序は重要であり、
+各引数は与えられた順に直ちに処理される。
+.PP
+\fB\-p\fR フラグを指定するとログイン失敗のエントリを UID 順に表示する。
+\fB\-u \fIlogin\-name\fR と入力すると、
+\fIlogin\-name\fR のログイン失敗記録のみを表示する。
+\fB\-t \fIdays\fR と入力すると、
+最近 \fIdays\fR 日以内のログイン失敗の記録を表示する。
+\fB\-u\fR フラグを指定すると \fB\-t\fR フラグは無視される。
+.\"nakano というのが実際の動作のような気がするのだけど...
+\fB\-a\fR フラグを用いると全ユーザに対する記録が表示される。
+このフラグを \fB\-p\fR フラグとともに用いると、
+これまでにログインに失敗した全てのユーザが表示される。
+\fB\-a\fR は \fB\-r\fR フラグと用いても意味が無い。
+.PP
+\fB\-r\fR フラグはログイン失敗回数の記録をリセットする。
+このオプションを用いるには
+\fI/var/log/faillog\fR への書き込み権限が必要である。
+\fB\-u \fIlogin\-name\fR と入力すると、
+\fIlogin\-name\fR のログイン失敗回数のみをリセットする。
+.PP
+\fB\-m\fR フラグは、
+アカウントが使用不能になるまでの最大のログイン失敗回数を設定する。
+このオプションを用いるには
+\fI/var/log/faillog\fR への書き込み権限が必要である。
+\fB\-m \fImax\fR と入力すると、
+全てのアカウントはログイン失敗回数が \fImax\fR になると使用不能になる。
+.\"nakano double meaning...
+\fB\-u \fIlogin\-name\fR を同時に用いると、
+この機能を \fIlogin\-name\fR だけに作用させることができる。
+\fImax\fR の値を 0 にするとログインの失敗回数には制限が無くなる。
+システムに対するサービス不能攻撃を防ぐため、
+\fBroot\fR の最大ログイン失敗回数は常に 0 にしておくべきである。
+.PP
+オプションはほぼどのように組み合わせても良い。
+\fB\-p\fR, \fB\-r\fR, \fB\-m\fR
+の各オプションは、
+\fB\-u\fR, \fB\-t\fR の指定による修正を受け、
+指定した順に実行される。
+.SH 警告
+\fBfaillog\fR は、
+最後に失敗して以降ログインに成功していないユーザのみを表示する。
+ログインに失敗した後に正しくログインできたユーザも表示させるには、
+\fB\-u\fR フラグを用いてそのユーザを明示的に指定するか、
+\fB\-a\fR フラグを用いて全ユーザを表示させなければならない。
+.SH ファイル
+\fI/var/log/faillog\fR \- 失敗を記録したファイル
+.SH 関連項目
+.BR login (1),
+.BR faillog (5)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/man8/groupadd.8 b/man/ja/man8/groupadd.8
new file mode 100644
index 0000000..4bdf73d
--- /dev/null
+++ b/man/ja/man8/groupadd.8
@@ -0,0 +1,68 @@
+.\"$Id$
+.\" Copyright 1991, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\" all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated & Modified Sat 21 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH GROUPADD 8
+.SH 名前
+groupadd \- 新しいグループを作成する
+.SH 書式
+\fBgroupadd\fR [\fB\-g\fR \fIgid \fR[\fB\-o\fR]] [\fB\-f\fR] \fIgroup\fR
+.SH 説明
+\fBgroupadd\fR コマンドは、
+コマンドライン上で指定された値と
+システムのデフォルト値とを用いて新しいグループを作成する。
+新しいグループが必要に応じてシステムファイルに記入される。
+\fBgroupadd\fR コマンドに指定できるオプションは次の通り。
+.IP "\fB\-g \fIgid\fR"
+新規グループの ID 番号。
+この値は、\fB\-o\fR オプションを用いる場合を除き、他と重複してはならない。
+また非負値でなければならない。
+デフォルトでは、99 および他のあらゆる既存グループの ID よりも大きい、
+最小の数値となる。
+0 から 999 までの値は、
+通常システム用のアカウントに予約されている。
+.SH ファイル
+\fI/etc/group\fR \- グループアカウント情報
+.br
+\fI/etc/gshadow\fR \- 安全なグループアカウント情報
+.SH 関連項目
+.BR chfn (1),
+.BR chsh (1),
+.BR passwd (1),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR useradd (8),
+.BR userdel (8),
+.BR usermod (8)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/man8/groupdel.8 b/man/ja/man8/groupdel.8
new file mode 100644
index 0000000..0f24453
--- /dev/null
+++ b/man/ja/man8/groupdel.8
@@ -0,0 +1,65 @@
+.\"$Id$
+.\" Copyright 1991 - 1993, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\" all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated & Modified Sat 21 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH GROUPDEL 8
+.SH 名前
+groupdel \- グループを削除する
+.SH 書式
+\fBgroupdel\fR \fIgroup\fR
+.SH 説明
+\fBgroupdel\fR コマンドは、システムアカウントファイルを修正し、
+グループ \fIgroup\fR に対応するすべてのエントリを削除する。
+指定されたグループは存在していなければならない。
+.PP
+全てのファイルシステムに、
+指定したグループの ID を持つファイルが残っていないことを、
+手作業で確認しなくてはならない。
+.SH 警告
+存在するユーザの主グループを削除してはならない。
+グループを削除する前にそのユーザを削除しなければならない。
+.SH ファイル
+\fI/etc/group\fR \- グループ情報
+.br
+\fI/etc/gshadow\fR \- 安全なグループ情報
+.SH 関連項目
+.BR chfn (1),
+.BR chsh (1),
+.BR passwd (1),
+.BR groupadd (8),
+.BR groupmod (8),
+.BR useradd (8),
+.BR userdel (8),
+.BR usermod (8)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/man8/groupmod.8 b/man/ja/man8/groupmod.8
new file mode 100644
index 0000000..eb0f7cf
--- /dev/null
+++ b/man/ja/man8/groupmod.8
@@ -0,0 +1,70 @@
+.\"$Id$
+.\" Copyright 1991, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\" all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated & Modified Sat 21 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH GROUPMOD 8
+.SH 名前
+groupmod \- グループを修正する
+.SH 書式
+\fBgroupmod\fR [\fB\-g\fR \fIgid\fR [\fB\-o\fR]] [\fB\-n\fR \fIgroup_name\fR]
+\fIgroup\fR
+.SH 説明
+\fBgroupmod\fR コマンドは、
+コマンドラインからの指定によって、
+システムアカウントファイルを修正する。
+\fIgroupmod\fR コマンドに指定できるオプションは次の通り。
+.IP "\fB\-g \fIgid\fR"
+変更を受けるグループの ID 番号。
+この値は、\fB\-o\fR オプションを用いる場合を除き、他と重複してはならない。
+また非負値でなくてはならない。
+デフォルトは、999 および他のあらゆる既存グループの ID よりも大きい、
+最小の数値となる。
+変更前のグループ ID を持つ全てのファイルは、
+手作業で新しいグループ ID へと変更しなければならない。
+.IP "\fB\-n \fIgroup_name\fR"
+グループの名前が \fIgroup\fR から \fIgroup_name\fR に変更される。
+.SH ファイル
+\fI/etc/group\fR \- グループ情報
+.br
+\fI/etc/gshadow\fR \- 安全なグループ情報
+.SH 関連項目
+.BR chfn (1),
+.BR chsh (1),
+.BR passwd (1),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR useradd (8),
+.BR userdel (8),
+.BR usermod (8)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/man8/grpck.8 b/man/ja/man8/grpck.8
new file mode 100644
index 0000000..c570c28
--- /dev/null
+++ b/man/ja/man8/grpck.8
@@ -0,0 +1,116 @@
+.\"$Id$
+.\" Copyright 1992 - 1993, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\" all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated & Modified Sat 21 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH GRPCK 8
+.SH 名前
+grpck \- グループファイルが正しいかどうか検査する
+.SH 書式
+\fBgrpck\fR [\fB\-r\fR] [\fIgroup\fR \fIshadow\fR]
+.SH 説明
+\fBgrpck\fR コマンドはシステムの認証情報が正しいかどうか検査する。
+\fI/etc/group\fR と \fI/etc/gshadow\fR
+各ファイルの全てのエントリに対し、
+各フィールドの書式が正しいか、
+そのデータが有効なものかどうかを検証する。
+書式が正しくないエントリや、
+修正不能な誤りを含むエントリは削除するようプロンプトを出す。
+.P
+各々のエントリに対して
+.sp
+.in +.5i
+\- フィールドの数が正しいか
+.br
+\- グループ名に重複がないか
+.br
+\- メンバーのリストと管理者のリストが正しいか
+.in -.5i
+.sp
+がチェックされる。
+.P
+フィールドの数が間違っていたり、
+グループ名が重複しているのは致命的なエラーである。
+フィールドの数が正しくない場合、
+ユーザーはそのエントリ行を削除するよう促される。
+削除に同意しなかった場合は、それ以降のチェックは行われない。
+重複したグループ名があった場合も削除を促されるが、
+この場合は削除しなくてもそれ以降のチェックは続行される。
+他の全てのエラーに対しては警告がなされる。
+\fBgroupmod\fR コマンドを実行してそのエラーを修正すると良いだろう。
+.P
+\fI/etc/group\fR ファイルを操作するコマンドは、
+壊れたエントリや重複したエントリを変更できない。
+そのような際に誤りのあるエントリを削除するには
+\fBgrpck\fR を用いるとよい。
+.SH オプション
+デフォルトでは \fBgrpck\fR は \fI/etc/group\fR ファイルと
+\fI/etc/gshadow\fR に対して動作する。
+\fIgroup\fR パラメータと \fIshadow\fR パラメータを用いて、
+別のファイルを選択することもできる。
+さらに \fB\-r\fR フラグを指定すれば、
+リードオンリーモードでコマンドを実行することもできる。
+この場合、変更を行うかどうかはユーザへ問い合わされず、
+自動的に \fBno\fR と回答される。
+.B grpck
+は
+\fI/etc/group\fR と \fI/etc/gshadow\fR
+のエントリを GID でソートすることもできる。
+ソートモードで動作させるには \fB\-s\fR フラグを与える。
+この場合チェックは行われず、単にソートするだけである。
+.SH ファイル
+\fI/etc/group\fR \ \- グループアカウント情報
+.br
+\fI/etc/gshadow\fR \- 暗号化されたパスワードとグループ管理者情報
+.br
+\fI/etc/passwd\fR \ \- ユーザー情報
+.SH 関連項目
+.BR group (5),
+.BR passwd (5),
+.BR shadow (5),
+.BR groupmod (8)
+.SH 返り値
+\fBgrpck\fR コマンドは終了時に以下の値を返す:
+.IP 0 5
+成功
+.IP 1 5
+構文エラー
+.IP 2 5
+誤ったグループエントリが存在する
+.IP 3 5
+グループファイルをオープンできない
+.IP 4 5
+グループファイルをロックできない
+.IP 5 5
+グループファイルを更新できない
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/man8/grpconv.8 b/man/ja/man8/grpconv.8
new file mode 100644
index 0000000..6eed9e8
--- /dev/null
+++ b/man/ja/man8/grpconv.8
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/ja/man8/grpunconv.8 b/man/ja/man8/grpunconv.8
new file mode 100644
index 0000000..6eed9e8
--- /dev/null
+++ b/man/ja/man8/grpunconv.8
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/ja/man8/lastlog.8 b/man/ja/man8/lastlog.8
new file mode 100644
index 0000000..171d6a9
--- /dev/null
+++ b/man/ja/man8/lastlog.8
@@ -0,0 +1,80 @@
+.\"$Id$
+.\" Copyright 1992, Phillip Street and Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\" @(#)lastlog.8 3.3 08:24:58 29 Sep 1993 (National Guard Release)
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\" all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated & Modified Thu Oct 14 1997 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\" Updated Fri Jan 12 2001 by Kentaro Shirakata <argrath@ub32.org>
+.\" Updated Mon Mar 4 2002 by kentaro Shirakata <argrath@ub32.org>
+.\" Modified Sat 21 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH LASTLOG 8
+.SH 名前
+lastlog \- lastlog ファイルを調べる
+.SH 書式
+.TP 8
+\fBlastlog\fR [(\fB\-u\fR|\fB\-\-user\fR) \fIlogin\fR]
+[(\fB\-t\fR|\fB\-\-time\fR) \fIdays\fR] [(\fB\-h\fR|\fB\-\-help\fR)]
+.SH 説明
+\fBlastlog\fR は最終ログインの記録ファイル
+\fI/var/log/lastlog\fR の内容を整形して表示する。
+\fBログイン名\fR・\fBポート\fR・\fB最終ログイン時刻\fR、が表示される。
+オプションを指定しなかった場合、デフォルトでは
+lastlog エントリを UID の数値でソートして表示する。
+.TP
+\fB\-u\fR, \fB\-\-user\fR \fIlogin\-name\fR
+\fIlogin\-name\fR の記録だけを表示する。
+.TP
+\fB\-t\fR, \fB\-\-time\fR \fIdays\fR
+最近 \fIdays\fR 日以内の最終ログインを表示する。
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+オンラインヘルプを表示して終了する。
+.PP
+\fB\-u\fR フラグを用いると \fB\-t\fR は無視される。
+.\"nakano というのが実際の動作のように見えるのだが。
+.PP
+一度もログインしていないユーザに対しては、
+ポートと時刻の代わりに
+\fB"**Never logged in**"\fR
+というメッセージが表示される。
+.SH ファイル
+\fI/var/log/lastlog\fR \- lastlog 記録ファイル
+.SH 警告
+UID 番号に大きな飛びがあると、
+lastlog プログラムは長時間画面に何も出力しないまま
+実行を続ける (例えば mmdf が 800 で最後の UID が 170 の場合、
+UID が 171\-799 の間プログラムは何も出力しないので、
+ハングしたように見える)。
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
+.BR
+Phillip Street
diff --git a/man/ja/man8/logoutd.8 b/man/ja/man8/logoutd.8
new file mode 100644
index 0000000..c8215a5
--- /dev/null
+++ b/man/ja/man8/logoutd.8
@@ -0,0 +1,55 @@
+.\"$Id$
+.\" Copyright 1991, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\" all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Modified Sat 21 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH LOGOUTD 8
+.SH 名前
+logoutd \- ログイン時間の制限を実施する
+.SH 書式
+\fBlogoutd\fR
+.SH 説明
+\fBlogoutd\fR は \fI/etc/porttime\fR
+に記されているログイン時間・ポートに対する制限を実施する。
+.B logoutd
+は \fI/etc/rc\fR によって起動されるようにする。
+\fI/etc/utmp\fR ファイルが定期的にスキャンされ、
+ログインしている各ユーザが
+\fI/etc/porttime\fR 中でのそのユーザの許可
+(ポートと時刻) に反していないか調べる。
+\fI/etc/porttime\fR の制限に反するログインセッションは終了させられる。
+.SH ファイル
+/etc/porttime \- ログインとポートの許可
+.br
+/etc/utmp \- 現在のログインセッション
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/man8/newusers.8 b/man/ja/man8/newusers.8
new file mode 100644
index 0000000..630660d
--- /dev/null
+++ b/man/ja/man8/newusers.8
@@ -0,0 +1,71 @@
+.\"$Id$
+.\" Copyright 1991 - 1994, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" Japanese Version Copyright (c) 1996 HANATAKA Shinya
+.\" all rights reserved.
+.\" Translated Wed Nov 20 17:42:39 JST 1996
+.\" by HANATAKA Shinya
+.\" Modified Sun 22 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH NEWUSERS 8
+.SH 名前
+newusers \- ユーザの新規作成や情報更新をバッチ処理で行う
+.SH 書式
+\fBnewusers\fR [\fInew_users\fR]
+.SH 説明
+\fBnewusers\fR はユーザ名と平文パスワードとの組を記したファイルを読み、
+その情報をもとに既存のユーザ情報の変更や新規ユーザの作成を行う。
+このファイルの書式は、
+下記の点を除き標準的なパスワードファイル
+(\fBpasswd\fR(5) 参照) と同じである。
+.IP "\fIpw_passwd\fR" 10
+このフィールドが暗号化され、新しい暗号化パスワードとなる。
+.IP "\fIpw_age\fR"
+このフィールドは shadow ファイル向けの情報であるが、
+ユーザがすでに存在する場合は無視される。
+.IP "\fIpw_gid\fR"
+このフィールドに既存のグループを指定した場合は、
+ユーザはそのグループに加えられる。
+存在しないグループ ID を指定した場合は、
+そのグループ ID で新たなグループが作成される。
+.IP "\fIpw_dir\fR"
+このフィールドで指定したディレクトリがすでに存在するかチェックし、
+もし存在しなければ新たにディレクトリが作られる。
+このディレクトリの所有者は、
+新規作成されたユーザ、あるいは情報が変更されたユーザとなる。
+.PP
+このコマンドは、同時に大量のアカウントを作成するような、
+大規模なシステム環境で用いるために作られた。
+.SH 警告
+入力ファイルには暗号化されていないパスワードが含まれるため、
+適切に保護しておかなければならない。
+.SH 関連項目
+.BR passwd (1),
+.BR useradd (8)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/man8/pwck.8 b/man/ja/man8/pwck.8
new file mode 100644
index 0000000..e59972f
--- /dev/null
+++ b/man/ja/man8/pwck.8
@@ -0,0 +1,121 @@
+.\"$Id$
+.\" Copyright 1992, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\" all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated Sun 3 Mar 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\" Modified Sun 22 Sep 2002 by NAKANO Takeo
+.\"
+.TH PWCK 8
+.SH 名前
+pwck \- パスワードファイルが正しいかどうか検査する
+.SH 書式
+\fBpwck\fR [\fB\-sr\fR] [\fIpasswd\fR \fIshadow\fR]
+.SH 説明
+\fBpwck\fR コマンドはシステムの認証情報が正しいかどうか検査する。
+\fI/etc/passwd\fR と \fI/etc/shadow\fR
+各ファイルのすべてのエントリに対し、
+各フィールドの書式が正しいか、
+そのデータが有効なものかどうかを検証する。
+書式が正しくないエントリや、
+修正不能な誤りを含むエントリは削除するようプロンプトを出す。
+.P
+各々のエントリに対して
+.sp
+.in +.5i
+\- フィールドの数が正しいか
+.br
+\- ユーザ名に重複がないか
+.br
+\- ユーザやグループの ID が正しいか
+.br
+\- プライマリグループが正しいか
+.br
+\- ホームディレクトリが正しいか
+.br
+\- ログインシェルが正しいか
+.in -.5i
+.sp
+がチェックされる。
+.P
+フィールドの数が間違っていたり、
+グループ名が重複しているのは致命的なエラーである。
+フィールドの数が正しくない場合、
+ユーザーはそのエントリ行を削除するよう促される。
+削除に同意しなかった場合は、それ以降のチェックは行われない。
+重複したグループ名があった場合も削除を促されるが、
+この場合は削除しなくてもそれ以降のチェックは続行される。
+他のすべてのエラーに対しては警告がなされる。
+\fBusermod\fR コマンドを実行してそのエラーを修正すると良いだろう。
+.P
+\fI/etc/passwd\fR ファイルを操作するコマンドは、
+壊れたエントリや重複したエントリを変更できない。
+そのような際に誤りのあるエントリを削除するには
+\fBpwck\fR を用いるとよい。
+.SH オプション
+デフォルトでは \fBpwck\fR は \fI/etc/passwd\fR ファイルと
+\fI/etc/shadow\fR に対して動作する。
+\fIpasswd\fR パラメータと \fIshadow\fR パラメータを用いて、
+別のファイルを選択することもできる。
+さらに \fB\-r\fR フラグを指定すれば、
+リードオンリーモードでコマンドを実行することもできる。
+この場合、変更を行うかどうかはユーザへ問い合わされず、
+自動的に \fBno\fR と回答される。
+\fBpwck\fR は \fI/etc/passwd\fR と \fI/etc/shadow\fR
+のエントリを UID でソートすることもできる。
+ソートモードで動作させるには \fB\-s\fR フラグを与える。
+この場合チェックは行われず、単にソートするだけである。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザーアカウント情報
+.br
+\fI/etc/shadow\fR \- 暗号化されたパスワード情報
+.br
+\fI/etc/group\fR \ \- グループ情報
+.SH 関連項目
+.BR group (5),
+.BR passwd (5),
+.BR shadow (5),
+.BR usermod (8)
+.SH 返り値
+\fBpwck\fR コマンドは以下の値を返して終了する:
+.IP 0 5
+成功
+.IP 1 5
+構文エラー
+.IP 2 5
+誤ったパスワードエントリーが存在する
+.IP 3 5
+パスワードファイルをオープンできない
+.IP 4 5
+パスワードファイルをロックできない
+.IP 5 5
+パスワードファイルを更新出来ない
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/man8/pwconv.8 b/man/ja/man8/pwconv.8
new file mode 100644
index 0000000..e48a926
--- /dev/null
+++ b/man/ja/man8/pwconv.8
@@ -0,0 +1,80 @@
+.\"$Id$
+.\"
+.\" Japanese Version Copyright (c) 2001 Yuichi SATO
+.\" all rights reserved.
+.\" Translated Sat Dec 1 20:09:17 JST 2001
+.\" by Yuichi SATO <ysato@h4.dion.ne.jp>
+.\" Modified Sun 22 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH PWCONV 8 "26 Sep 1997"
+.SH 名前
+pwconv, pwunconv, grpconv, grpunconv \- パスワード・グループの shadow 化と、通常ファイルへの逆変換
+.SH 書式
+.B pwconv
+.br
+.B pwunconv
+.br
+.B grpconv
+.br
+.B grpunconv
+.SH 説明
+これら 4 つのプログラムは、
+通常のパスワードファイル・グループファイルと、
+shadow 化されたパスワードファイル・グループファイルである
+\fI/etc/passwd\fR ", " \fI/etc/group\fR ", " \fI/etc/shadow\fR ", " \fI/etc/gshadow\fR
+を操作する。
+
+\fBpwconv\fR は \fIpasswd\fR から \fIshadow\fR を作成する
+(すでに存在する場合は \fIshadow\fR の情報も用いる)。
+\fBpwunconv\fR は \fIpasswd\fR と \fIshadow\fR から
+\fIpasswd\fR を作成し、\fIshadow\fR を削除する。
+\fBgrpconv\fR は \fIgroup\fR から \fIgshadow\fR を作成する
+(すでに存在する場合は \fIgshadow\fR の情報も用いる)。
+\fBgrpunconv\fR は \fIgroup\fR と \fIgshadow\fR から
+\fIgroup\fR を作成し、\fIgshadow\fR を削除する。
+
+各プログラムは変換前に、必要なロックを要求する。
+
+.B pwconv
+と
+.B grpconv
+とは以下の点で類似している。
+まず、shadow 化ファイルにあるエントリのうち、
+通常ファイルにないものは、削除される。
+また、shadow 化ファイルにあるエントリのうち、
+通常ファイルでパスワードが `x' になっていないものは、更新される。
+最後に、通常ファイルに書かれたパスワードは `x' に置き換えられる。
+これらのプログラムは、初めて変換を行うときにも、
+また通常のファイルを手動で編集した際に、
+shadow 化ファイルを更新するときにも利用できる。
+
+\fI/etc/shadow\fR に新しいエントリを追加するとき、
+\fBpwconv\fR は \fI/etc/login.defs\fR
+の
+.BR PASS_MIN_DAYS ", " PASS_MAX_DAYS ", " PASS_WARN_AGE
+の値を使う。
+
+同じように、
+\fBpwunconv\fR と \fBgrpunconv\fR
+とは以下の点で類似している。
+通常ファイルのパスワードは、
+shadow 化ファイルのもので更新される。
+通常ファイルにあるエントリは、
+shadow 化ファイルにはそのエントリがなくても、
+そのまま置かれ続ける。
+最後に、 shadow 化ファイルは削除される。
+
+パスワードの有効期限情報の一部は、
+.B pwunconv
+によって失われる。変換できるものは変換される。
+.SH バグ
+(不正なエントリや重複したエントリといった)
+エラーがパスワードファイルやグループファイルにあると、
+プログラムは永遠にループしたり、おかしな形で失敗するかもしれない。
+shadow パスワード・グループへの変換や
+shadow 化ファイルからの逆変換を行う前に、
+\fBpwck\fR と \fBgrpck\fR を実行してエラーを修正すること。
+.SH 関連項目
+.BR login.defs (5),
+.BR grpck (8),
+.BR pwck (8)
diff --git a/man/ja/man8/pwunconv.8 b/man/ja/man8/pwunconv.8
new file mode 100644
index 0000000..6eed9e8
--- /dev/null
+++ b/man/ja/man8/pwunconv.8
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/ja/man8/sulogin.8 b/man/ja/man8/sulogin.8
new file mode 100644
index 0000000..b4b0fd7
--- /dev/null
+++ b/man/ja/man8/sulogin.8
@@ -0,0 +1,95 @@
+.\" $Id$
+.\" Copyright 1989 - 1992, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\" all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Modified Sun 22 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH SULOGIN 8
+.SH 名前
+sulogin \- シングルユーザ login
+.SH 書式
+\fBsulogin\fR [\fItty\-device\fR]
+.SH 説明
+.B sulogin
+は、シングルユーザモードの時、
+ユーザがシステムにアクセス可能となる前に、
+\fI/etc/init\fR によって起動される。
+この機能は、\fBinit\fR が適切に変更されているシステムか、
+あるいは \fI/etc/inittab\fR にシングルユーザ login
+のエントリがあるシステムでのみ利用できる。
+.PP
+次のようなプロンプトが出る。
+.IP "" .5i
+Type control\-d to proceed with normal startup,
+.br
+(or give root password for system maintenance):
+.PP
+オプションのデバイス名引数が指定された場合を除き、
+標準のファイルディスクリプタを用いて入出力を行なう。
+.PP
+ユーザが正しい root のパスワードを入力した場合は、
+ログインセッションが開始される。
+\fBEOF\fR が押された場合は、
+システムはマルチユーザモードに入る。
+.PP
+ユーザがシングルユーザシェルを抜けた、
+あるいは (シェルに入る前に) \fBEOF\fR を押した後には、
+システムはマルチユーザモードに入るために必要な初期化処理を開始する。
+.SH 警告
+このコマンドが利用できるようにするには、
+\fBinit\fR が \fB/bin/sh\fR ではなく
+\fBsulogin\fR を呼ぶようになっているか、
+または
+\fIinittab\fR
+中にシングルユーザログインに対する設定がされている必要がある。
+例えば、
+.br
+.sp 1
+co:s:respawn:/etc/sulogin /dev/console
+.br
+.sp 1
+という行を書いておけば、
+シングルユーザモードでは sulogin コマンドが実行される。
+.PP
+可能な限り完全な環境が提供される。
+しかし、
+様々なデバイスがマウントされていなかったり初期化されていなかったりするため、
+多くのユーザコマンドが使えなかったり機能しないかもしれない。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザアカウント情報
+.br
+\fI/etc/shadow\fR \- 暗号化されたパスワードと有効期限の情報
+.SH 関連項目
+.BR login (1),
+.BR sh (1),
+.BR init (8)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/man8/useradd.8 b/man/ja/man8/useradd.8
new file mode 100644
index 0000000..40ae9f3
--- /dev/null
+++ b/man/ja/man8/useradd.8
@@ -0,0 +1,176 @@
+.\" $Id$
+.\" Copyright 1991 - 1994, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" Japanese Version Copyright (c) 1996 HANATAKA Shinya
+.\" all rights reserved.
+.\" Translated Wed Nov 20 17:42:39 JST 1996
+.\" by HANATAKA Shinya
+.\" Updated Mon Mar 5 JST 2002 by Kentaro Shirakata <argrath@ub32.org>
+.\" Modified Sun 22 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.\"WORD: initial group 主グループ
+.\"WORD: supplementary group 補助グループ
+.\"
+.TH USERADD 8
+.SH 名前
+useradd \- 新規ユーザの作成・新規ユーザのデフォルト情報の更新
+.SH 書式
+.TP 8
+\fBuseradd\fR [\fB\-c\fR \fIcomment\fR] [\fB\-d\fR \fIhome_dir\fR]
+.br
+[\fB\-e\fR \fIexpire_date\fR] [\fB\-f\fR \fIinactive_time\fR]
+.br
+[\fB\-g\fR \fIinitial_group\fR] [\fB\-G\fR \fIgroup\fR[,...]]
+.br
+[\fB\-m\fR [\fB\-k\fR \fIskeleton_dir\fR]] [\fB\-o\fR] [\fB\-p\fR \fIpasswd\fR]
+.br
+[\fB\-s\fR \fIshell\fR] [\fB\-u\fR \fIuid\fR] \fIlogin\fR
+.TP 8
+\fBuseradd\fR \fB\-D\fR [\fB\-g\fR \fIdefault_group\fR] [\fB\-b\fR \fIdefault_home\fR]
+.br
+[\fB\-e\fR \fIdefault_expire_date\fR] [\fB\-f\fR \fIdefault_inactive\fR]
+.br
+[\fB\-s\fR \fIdefault_shell\fR]
+.SH 説明
+.SS 新規ユーザの作成
+\fB\-D\fR オプションなしで実行された場合、
+\fBuseradd\fR コマンドは
+コマンドラインの値とデフォルトの設定値をもとに
+新規ユーザのアカウントを作成する。
+コマンドラインオプションに応じて、
+新規ユーザのアカウントが必要なシステムファイルに追加され、
+ホームディレクトリが作成され、
+設定ファイルがコピーされる。
+\fBuseradd\fR コマンドのオプションは次の通り。
+.IP "\fB\-c\fR \fIcomment\fR"
+パスワードファイルに追加する新規ユーザのコメントフィールド。
+.IP "\fB\-d\fR \fIhome_dir\fR"
+新規ユーザのログインディレクトリを \fIhome_dir\fR にする。
+デフォルトでは \fIlogin\fR を
+\fIdefault_home\fR に付け加えたものがログインディレクトリとなる。
+.IP "\fB\-e\fR \fIexpire_date\fR"
+ユーザアカウントが使用不能になる日付。
+日付は \fIYYYY\-MM\-DD\fR という書式で指定する。
+.IP "\fB\-f\fR \fIinactive_days\fR"
+パスワードの使用期限が切れてからアカウントが永久に使用不能になるまでの日数。
+0 にすると、
+パスワードの期限が切れると同時にこのアカウントは使用不能になる。
+\-1 にするとこの機能が無効になる。デフォルト値は \-1。
+.IP "\fB\-g\fR \fIinitial_group\fR"
+ユーザの属する主グループのグループ名または ID。
+グループ名はすでに存在していなければならない。
+グループ ID は既存のグループに対応するものでなければならない。
+デフォルトのグループ ID は 1 か、
+または \fI/etc/default/useradd\fR
+で指定されているものがあればそれに従う。
+.IP "\fB\-G\fR \fIgroup,[...]\fR"
+ユーザの属する補助グループ (supplementary groups) のリスト。
+グループはコンマで区切り、間に空白を入れてはならない。
+指定できるグループには \fB\-g\fR オプションと同様の制限がある。
+デフォルトでは、ユーザは主グループのみに属する。
+.IP \fB\-m\fR
+ホームディレクトリが存在しない場合には、ホームディレクトリを作成する。
+\fB\-k\fR オプションを同時に指定すると \fIskeleton_dir\fR 以下のファイルが、
+指定しないと \fI/etc/skel\fR 以下のファイルが、
+ホームディレクトリにコピーされる。
+ホームディレクトリには、
+\fIskeleton_dir\fR または \fI/etc/skel\fR
+に含まれるすべてのディレクトリも作成される。
+\fB\-k\fR オプションは、
+\fB\-m\fR オプションとともに使われる場合のみ有効である。
+デフォルトでは、ホームディレクトリを作らず、ファイルのコピーもしない。
+.IP "\fB\-o\fR"
+重複した (固有でない) UID でユーザを作成できるようにする。
+.IP "\fB\-p\fR \fIpasswd\fR"
+\fBcrypt\fR(3) の返り値である暗号化パスワード。
+デフォルトでは、アカウントは使えない状態となる。
+.IP "\fB\-s\fR \fIshell\fR"
+ユーザのログインシェルの名前。
+デフォルトではこのフィールドは空白となり、
+システムがデフォルトのログインシェルを選ぶ。
+.IP "\fB\-u\fR \fIuid\fR"
+ユーザの ID 番号。
+この値は、\fB\-o\fR オプションを用いる場合を除き、他と重複してはならない。
+また非負値でなくてはならない。
+デフォルトでは、 999 および他のあらゆる既存ユーザの ID よりも大きい、
+最小の数値となる。
+0 から 999 までの値は、
+通常システム用のアカウントに予約されている。
+.SS デフォルト値の変更
+\fB\-D\fR オプションを指定すると、
+\fBuseradd\fR は現在のデフォルト値を表示するか、
+またはオプションで与えられた値に応じてデフォルト値を変更する。
+使用可能なオプションは次の通り。
+.IP "\fB\-b\fR \fIdefault_home\fR"
+新規ユーザのホームディレクトリのパスのプレフィックス。
+新規ユーザアカウントの作成時に \fB\-d\fI オプションが指定されないと、
+\fIdefault_home\fR の後にユーザ名を付け加えたものが
+新規ディレクトリ名として使われる。
+.IP "\fB\-e\fR \fIdefault_expire_date\fR"
+ユーザアカウントが使用不能となる日付。
+.IP "\fB\-f\fR \fIdefault_inactive\fR"
+パスワードの使用期限が切れてからアカウントが使用不能となるまでの日数。
+.IP "\fB\-g\fR \fIdefault_group\fR"
+新規ユーザの属する主グループのグループ名またはグループ ID。
+グループ名はすでに存在するものでなければならない。
+グループ ID は既存のグループに対応するものでなければならない。
+.IP "\fB\-s\fR \fIdefault_shell\fR"
+新規ユーザのログインシェル。
+指定されたプログラムは、
+今後作られるすべての新規ユーザアカウントに適用される。
+.PP
+オプションを指定しないと、
+\fBuseradd\fR は現在のデフォルト値を表示する。
+.SH 注意
+\fI/etc/skel\fR ディレクトリにデフォルトのユーザファイルを置くのは
+システム管理者の行うべき作業である。
+.SH 警告
+NIS のグループにユーザを加えてはならない。
+これは必ず NIS サーバ上で行うこと。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザアカウント情報
+.br
+\fI/etc/shadow\fR \- 安全なユーザアカウント情報
+.br
+\fI/etc/group\fR \ \- グループ情報
+.br
+\fI/etc/default/useradd\fR \- デフォルト情報
+.br
+\fI/etc/skel/\fR \ \- ファイルの雛形が置かれるディレクトリ
+.SH 関連項目
+.BR chfn (1),
+.BR chsh (1),
+.BR passwd (1),
+.BR crypt (3),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR userdel (8),
+.BR usermod (8)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/man8/userdel.8 b/man/ja/man8/userdel.8
new file mode 100644
index 0000000..8cbb218
--- /dev/null
+++ b/man/ja/man8/userdel.8
@@ -0,0 +1,77 @@
+.\" $Id$
+.\" Copyright 1991 - 1994, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\" all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated Fri Jan 12 JST 2000 by Kentaro Shirakata <argrath@ub32.org>
+.\" Updated Fri Mar 1 JST 2002 by Kentaro Shirakata <argrath@ub32.org>
+.\" Modified Sun 22 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH USERDEL 8
+.SH 名前
+userdel \- ユーザのアカウントと関連ファイルを削除する
+.SH 書式
+.B userdel
+[\fB\-r\fR]
+.I login
+.SH 説明
+\fBuserdel\fR コマンドは、システムアカウントファイルを修正し、
+ユーザ \fIlogin\fR に対応するすべてのエントリを削除する。
+削除されるユーザは存在していなければならない。
+\fBuserdel\fR コマンドに適用できるオプションは以下の通り。
+.IP \fB\-r\fR
+ユーザのホームディレクトリ中のファイルを削除する。
+ホームディレクトリ自体とユーザのメールスプールも消去する。
+ファイルシステム中のほかの場所にあるそのユーザのファイルは、
+手作業で探し出して削除しなければならない。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザアカウント情報
+.br
+\fI/etc/shadow\fR \- 安全なユーザアカウント情報
+.br
+\fI/etc/group\fR \ \- グループ情報
+.SH 警告
+\fBuserdel\fR は、削除されるユーザが現在ログインしている場合は、
+そのアカウントの削除を許可しない。
+削除しようとしているアカウントに属する実行中のプロセスは、
+すべて kill しなければならない。
+NIS のクライアントからは、NIS の属性値は削除できない。
+削除は NIS のサーバで行わなければならない。
+.SH 関連項目
+.BR chfn (1),
+.BR chsh (1),
+.BR passwd (1),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR useradd (8),
+.BR usermod (8)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/man8/usermod.8 b/man/ja/man8/usermod.8
new file mode 100644
index 0000000..bd2f604
--- /dev/null
+++ b/man/ja/man8/usermod.8
@@ -0,0 +1,145 @@
+.\" $Id$
+.\" Copyright 1991 - 1994, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\" all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\" by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated Tue Jan 23 17:21:08 JST 2001
+.\" by Kentaro Shirakata <argrath@ub32.org>
+.\" Modified Sun 22 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.\"WORD: initial group 主グループ
+.\"WORD: supplementary group 補助グループ
+.\"
+.TH USERMOD 8
+.SH 名前
+usermod \- ユーザアカウントを修正する
+.SH 書式
+\fBusermod\fR [\fB\-c\fR \fIcomment\fR] [\fB\-d\fR \fIhome_dir\fR [\fB\-m\fR]]
+.br
+[\fB\-e\fR \fIexpire_date\fR] [\fB\-f\fR \fIinactive_time\fR]
+.br
+[\fB\-g\fR \fIinitial_group\fR] [\fB\-G\fR \fIgroup\fR [,...]]
+.br
+[\fB\-l\fR \fIlogin_name\fR] [\fB\-p\fR \fIpasswd\fR]
+.br
+[\fB\-s\fR \fIshell\fR] [\fB\-u\fR \fIuid\fR [\fB\-o\fR]] [\fB\-L\fR|\fB\-U\fR]
+\fIlogin\fR
+.SH 説明
+\fBusermod\fR コマンドは、
+コマンドライン上での指定によって、
+システムアカウントファイルを修正する。
+\fBusermod\fR コマンドに指定できるオプションは次の通り。
+.IP "\fB\-c\fR \fIcomment\fR"
+パスワードファイルのコメントフィールドに与える新しい値。
+通常は
+.BR chfn (1)
+ユーティリティによって変更される。
+.IP "\fB\-d\fR \fIhome_dir\fR"
+新しいログインディレクトリ。
+\fB\-m\fR オプションを用いると、
+現在のホームディレクトリの中身が新しいホームディレクトリに移動される
+(後者が存在しない場合は新たに作成される)。
+.IP "\fB\-e\fR \fIexpire_date\fR"
+そのユーザアカウントが使用不能になる日付。
+日付は \fIYYYY\-MM\-DD\fR という書式で指定する。
+.IP "\fB\-f\fR \fIinactive_days\fR"
+パスワードの使用期限が切れてからアカウントが永久に使用不能になるまでの日数。
+0 にすると、
+パスワードの期限が切れると同時にこのアカウントは使用不能になる。
+\-1 にするとこの機能が無効になる。デフォルト値は \-1。
+.IP "\fB\-g\fR \fIinitial_group\fR"
+
+新たにそのユーザのログイン時初期グループとするグループ名または ID。
+グループ名は既に存在していなければならない。
+グループ番号は既存のグループを参照していなければならない。
+デフォルトのグループ番号は 1。
+.IP "\fB\-G\fR \fIgroup,[...]\fR"
+ユーザが属する補助グループ (supplementary groups) のリスト。
+グループはコンマで区切り、間に空白文字を入れてはならない。
+指定できるグループには \fB\-g\fR オプションと同様の制限がある。
+現在そのユーザが、
+新しいリストにないグループのメンバーになっている場合は、
+そのグループから削除される。
+.IP "\fB\-l\fR \fIlogin_name\fR"
+ユーザのログイン名を \fIlogin\fR から \fIlogin_name\fR に変更する。
+他は何も変更しないので、
+おそらく新しいログイン名に合わせて
+ホームディレクトリの名前を変更する必要があるだろう。
+.IP "\fB\-p\fR \fIpasswd\fR"
+\fBcrypt\fR(3) の返り値である暗号化パスワード。
+.IP "\fB\-s\fR \fIshell\fR"
+ユーザの新しいログインシェルの名前。
+このフィールドを空白にした場合は、
+システムがデフォルトのログインシェルを選択する。
+.IP "\fB\-u\fR \fIuid\fR"
+ユーザの ID 番号。
+この値は、\fB\-o\fR オプションを用いる場合を除き、他と重複してはならない。
+また非負値でなくてはならない。
+0 から 999 までの値は、通常システムアカウント用に予約されている。
+ホームディレクトリ以下の、
+そのユーザ所有のすべてのファイルのユーザ ID は、
+自動的に新しい値に変更される。
+ホームディレクトリ以下にないファイルは手作業で変更しなければならない。
+.IP "\fB\-L\fR"
+ユーザのパスワードをロックする。
+これは暗号化されたパスワードの前に '!' を追加し、
+実質的にパスワードを無効にする。
+このオプションを \fI\-p\fR や \fI\-U\fR と同時に用いることはできない。
+.IP "\fB\-U\fR"
+ユーザのパスワードをアンロックする。
+これは暗号化されたパスワードの先頭の '!' を取り除く。
+このオプションを \fI\-p\fR や \fI\-L\fR と同時に用いることはできない。
+.SH 警告
+\fBusermod\fR
+は現在ログインしているユーザの名前を変更できない。
+このコマンドを使用してユーザの ID 番号を変更する際には、
+指定したユーザのプロセスが一つも実行されていないことを
+事前に確認しなければならない。
+crontab ファイルの所有者は手作業で変更しなければならない。
+at ジョブの所有者は手作業で変更しなければならない。
+NIS に関する作業は NIS サーバ上で行なわなければならない。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザアカウント情報
+.br
+\fI/etc/shadow\fR \- 安全なユーザアカウント情報
+.br
+\fI/etc/group\fR \ \- グループ情報
+.SH 関連項目
+.BR chfn (1),
+.BR chsh (1),
+.BR passwd (1),
+.BR crypt (3),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR useradd (8),
+.BR userdel (8)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/man8/vigr.8 b/man/ja/man8/vigr.8
new file mode 100644
index 0000000..ff72d7a
--- /dev/null
+++ b/man/ja/man8/vigr.8
@@ -0,0 +1 @@
+.so man8/vipw.8
diff --git a/man/ja/man8/vipw.8 b/man/ja/man8/vipw.8
new file mode 100644
index 0000000..205d121
--- /dev/null
+++ b/man/ja/man8/vipw.8
@@ -0,0 +1,38 @@
+.\" $Id$
+.\"
+.\" Japanese Version Copyright (c) 2001 Maki KURODA
+.\" all right reserved,
+.\" Translated Tue Oct 30 11:55:56 JST 2001
+.\" by Maki KURODA <mkuroda@aisys-jp.com>
+.\" Modified Sun 22 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH VIPW 8 "26 Sep 1997"
+.SH 名前
+vipw, vigr \- password, group とそれぞれの shadow ファイルを編集する
+.SH 書式
+\fBvipw\fR [\fB\-s\fR]
+.br
+\fBvigr\fR [\fB\-s\fR]
+.SH 説明
+.BR vipw " と " vigr
+は、それぞれ
+\fI/etc/passwd\fR " と " \fI/etc/group\fR
+を編集する。
+.B \-s
+フラグが指定されると、これらのファイルの shadow 化版である
+\fI/etc/shadow\fR と \fI/etc/gshadow\fR
+をそれぞれ編集する。
+これらのプログラムはファイルが壊れないよう適切なロックを設定する。
+
+これらのプログラムは、利用するエディタとしてまず
+環境変数
+.BR VISUAL ,
+環境変数
+.BR EDITOR ,
+を順に試し、最後にデフォルトのエディタである
+.BR vi
+を用いようとする。
+.SH 関連項目
+.BR group (5),
+.BR passwd (5),
+.BR shadow (5)
diff --git a/man/ko/Makefile.am b/man/ko/Makefile.am
new file mode 100644
index 0000000..c269f0b
--- /dev/null
+++ b/man/ko/Makefile.am
@@ -0,0 +1,16 @@
+
+mandir = @mandir@/ko
+
+man_MANS = \
+ man1/chfn.1 \
+ man1/chsh.1 \
+ man1/groups.1 \
+ man1/login.1 \
+ man5/passwd.5 \
+ man1/su.1 \
+ man8/vigr.8 \
+ man8/vipw.8
+# newgrp.1 must be updated
+# newgrp.1
+
+EXTRA_DIST = $(man_MANS)
diff --git a/man/ko/Makefile.in b/man/ko/Makefile.in
new file mode 100644
index 0000000..7dba217
--- /dev/null
+++ b/man/ko/Makefile.in
@@ -0,0 +1,658 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = man/ko
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" \
+ "$(DESTDIR)$(man8dir)"
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@/ko
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = \
+ man1/chfn.1 \
+ man1/chsh.1 \
+ man1/groups.1 \
+ man1/login.1 \
+ man5/passwd.5 \
+ man1/su.1 \
+ man8/vigr.8 \
+ man8/vipw.8
+
+# newgrp.1 must be updated
+# newgrp.1
+EXTRA_DIST = $(man_MANS)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/ko/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign man/ko/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+install-man5: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man5dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.5[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man5:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man5dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.5[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir)
+install-man8: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man8dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.8[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man8:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man8dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.8[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-man5 install-man8 install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+ uninstall-am uninstall-man uninstall-man1 uninstall-man5 \
+ uninstall-man8
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/ko/man1/chfn.1 b/man/ko/man1/chfn.1
new file mode 100644
index 0000000..e6d3fae
--- /dev/null
+++ b/man/ko/man1/chfn.1
@@ -0,0 +1,54 @@
+.\" $Id$
+.\" (c) 1994 by salvatore valente <svalente@athena.mit.edu>
+.\"
+.\" this program is free software. you can redistribute it and
+.\" modify it under the terms of the gnu general public license.
+.\" there is no warranty.
+.TH CHFN 1 "October 13 1994" "chfn" "Linux Reference Manual"
+.SH NAME
+chfn \- 사용자 finger 정보를 바꾼다.
+.SH SYNOPSIS
+\fBchfn\fR [\fB\-f\fR \fIfull\-name\fR] [\fB\-o\fR \fIoffice\fR] [\fB\-p\fR \fIoffice\-phone\fR]
+[\ \-h\ home\-phone\ ] [\ \-u\ ] [\ \-v\ ] [\ username\ ]
+.SH DESCRIPTION
+.B chfn
+명령은 사용자의 finger 정보를 바꾼다. 이것은
+.I /etc/passwd
+파일의 정보를 바꾼다.
+.B finger
+명령이 사용될 때 바로 이 파일을 참조하기 때문이다.
+.B finger
+명령은
+.B chfn
+명령에서 바뀐 실재이름, 직장, 직장전화, 집전화번호를 보여준다.
+.SS COMMAND LINE
+아무 옵션 없이 이 명령을 사용하면, 직접 사용자에게 각각의 바꿀 정보를
+물어보지만, 이 정보들을 명령행에서 직접 입력할 수도 있다.
+.SS INTERACTIVE MODE
+아무 옵션 없이 이 명령을 사용하면, 직접 사용자에게 각각의 바꿀 정보를
+물어본다. 이때 정당한 값을 지정해 주고, 원래의 값을 바꾸지 않으려면,
+그냥 Enter 글쇠를 누르면 된다.
+.SH OPTIONS
+.TP
+.I "\-f, \-\-full\-name"
+사용자 실재 이름
+.TP
+.I "\-o, \-\-office"
+사용자 직장
+.TP
+.I "\-p, \-\-office\-phone"
+사용자 직장 전화번호
+.TP
+.I "\-h, \-\-home\-phone"
+사용자 집 전화 번호
+.TP
+.I "\-u, \-\-help"
+도움말을 보여주고 마친다.
+.TP
+.I "\-v, \-\-version"
+버전 정보를 보여주고 마친다.
+.SH "SEE ALSO"
+.BR finger (1),
+.BR passwd (5)
+.SH AUTHOR
+Salvatore Valente <svalente@mit.edu>
diff --git a/man/ko/man1/chsh.1 b/man/ko/man1/chsh.1
new file mode 100644
index 0000000..6fd5d3f
--- /dev/null
+++ b/man/ko/man1/chsh.1
@@ -0,0 +1,43 @@
+.\" $Id$
+.\" (c) 1994 by salvatore valente <svalente@athena.mit.edu>
+.\"
+.\" this program is free software. you can redistribute it and
+.\" modify it under the terms of the gnu general public license.
+.\" there is no warranty.
+.TH CHSH 1 "October 13 1994" "chsh" "Linux Reference Manual"
+.SH NAME
+chsh \- 사용자 로그인 쉘을 바꾼다.
+.SH SYNOPSIS
+.B chsh
+[\ \-s\ shell\ ] [\ \-l\ ] [\ \-u\ ] [\ \-v\ ] [\ username\ ]
+.SH DESCRIPTION
+.B chsh
+명령은 사용자가 사용하고 있는 로그인 쉘을 바꾸는데, 사용된다.
+(이말은 exit 명령을 사용했을 때 로그아웃되는 쉘을 말한다.)
+명령행에서 쉘을 지정하지 않으면, 사용자에게 물어본다.
+.SS VALID SHELLS
+.B chsh
+명령에서는 절대 경로를 지정하는 어떠한 실행파일도 지정이 가능하다.
+하지만,
+.I /etc/shells
+파일에서 지정되어 있지 않는 풀그림을 사용할 경우에는 경고 메시지를 보여준다.
+.SH OPTIONS
+.TP
+.I "\-s, \-\-shell"
+지정하는 쉘을 앞으로 사용할 로그인 쉘로 바꾼다.
+.TP
+.I "\-l, \-\-list\-shells"
+.I /etc/shells
+파일 안에 지정된 쉘을 나열하고 마친다.
+.TP
+.I "\-u, \-\-help"
+도움말을 보여주고 마친다.
+.TP
+.I "\-v, \-\-version"
+버전 정보를 보여주고 마친다.
+.SH "SEE ALSO"
+.BR login (1),
+.BR passwd (5),
+.BR shells (5)
+.SH AUTHOR
+Salvatore Valente <svalente@mit.edu>
diff --git a/man/ko/man1/groups.1 b/man/ko/man1/groups.1
new file mode 100644
index 0000000..d407d3d
--- /dev/null
+++ b/man/ko/man1/groups.1
@@ -0,0 +1,32 @@
+.\"$Id$
+.TH GROUPS 1L "GNU 쉘 유틸리티" "FSF" \" \-*\- nroff \-*\-
+.SH 이름
+groups \- 사용자가 속한 그룹들을 출력한다
+.SH 개요
+.B groups
+[사용자명...]
+.br
+.B groups
+{\-\-help,\-\-version}
+.SH 설명
+이 맨페이지는 GNU 버전의
+.BR groups
+를 다룬다.
+.B groups
+는 주어진 각
+.IR username
+또는 프로세스
+가 속한 추가 그룹의 이름을 출력해준다.
+만약 사용자명이 주어졌다면 각 사용자명이 소속된 그룹 목록 앞에 표시된다.
+.PP
+그룹 목록은 `id \-Gn'의 결과와 같다.
+.SS 옵션
+GNU
+.B groups
+가 단 한 개의 인수를 가지고 실행되면 다음 옵션들을 인식한다:
+.TP
+.I "\-\-help"
+표준출력으로 사용법을 출력하고 정상적으로 종료한다.
+.TP
+.I "\-\-version"
+표준출력으로 버전정보를 출력하고 정상적으로 종료한다.
diff --git a/man/ko/man1/login.1 b/man/ko/man1/login.1
new file mode 100644
index 0000000..4533beb
--- /dev/null
+++ b/man/ko/man1/login.1
@@ -0,0 +1,300 @@
+.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
+.\" May be distributed under the GNU General Public License
+.TH LOGIN 1 "1 February 1993" "Linux 0.99" "Linux Programmer's Manual"
+.SH 이름
+login \- 시스템 접속
+.SH 사용법
+.BR "login [ " 이름 " ]"
+.br
+.B "login \-p"
+.br
+.BR "login \-h " 호스트이름
+.br
+.BR "login \-f " 이름
+.SH 설명
+.B login
+풀그림은 한 시스템에 접속처리를 하는 풀그림이다.
+또한 현재 접속 중에서도 한 사용자에서 다른 사용자로 바꾸고자 할 때도
+사용될 수 있다. (한편, 대부분의 요즘 만들어진 쉘은 그 쉘 내부적으로
+이러한 기능을 제공하고 있기도 하다.)
+
+아무 옵션 없이 사용하면,
+사용자 계정을 물어보는 프롬프트가 나타난다.
+
+이때 입력되는 계정이 root가 아니고,
+.I /etc/nologin
+파일이 있으면 그 파일안에 내용이 보여지고
+이 풀그림은 종료된다. 이것은 시스템 검사나 기타 사정상 일반 사용자
+접속을 하지 못하도록 할때 사용된다.
+
+.IR /etc/usertty
+파일에서 특정 사용자의 로그인 허용과 거부가 지정되어 있을 때,
+만일 그 사용자가 접속하고자 할 때는 그에 따른 접속처리를 한다.
+이때, 접속거부되면 로그인은 끝나고
+.B syslog
+명령이 작동되어 그 상황을 기록한다.
+자세한 이야기는 아래 "특별 접근 거부" 부분에서 다룬다.
+
+
+.IR /etc/securetty
+파일에서는 root로 접속할 수 있는 터미날들이 나열되어 있다.
+이때 접속 실패가 일어나면
+.B syslog
+명령이 작동되어 그 상황을 기록한다.
+
+사용자 계정의 확인 절차가 끝나면, 비밀번호를 물어보는 프롬프트가
+나타난다. (그 사용자의 계정에서 비밀번호가 필요하면 나타난다.)
+이때, 10번동안 비밀번호를 틀리게 입력하면 login은 종료된다.
+그런데, 처음 세번은 바로 다시 물어보지만, 다음부터는 매우 느리게
+반복된다. (로그인 과정이)
+물론 이 과정들도
+.B syslog
+명령에 의해 그 상황이 기록된다.
+
+.I .hushlogin
+파일 $HOME 경로안에 있으면, 새로 도착한 편지가 있을 때 보여주는
+메시지와 마지막 로그인한 시간을 알리는 메시지를 보여주지 않는다.
+이 파일이 없고,
+.I /var/log/lastlog
+파일이 있으면, 그 파일에서 마지막 로그인 시간을 읽어 보여주고,
+그 파일에, 현재 로그인을 기록한다.
+
+로그인 계정, 비밀번호 확인철자가 끝나면,
+다음은 터미날의 UID, GID 설정같은 관리작업들을 무작위로
+수행한다. TERM 환경변수가 사용되고 있으면, 이 환경변수를 지정하고,
+(
+.B \-p
+옵션이 사용되면 다른 환경변수가 지정된다)
+HOME, PATH, SHELL, TERM, MAIL, LOGNAME 환경변수들을 지정한다.
+일반 사용자라면 경로를 초기값으로 아래와 같이 지정하고,
+.br
+.I /usr/local/bin:/bin:/usr/bin:.
+root라면 초기값으로 아래와 같이 지정한다.
+.br
+.I /sbin:/bin:/usr/sbin:/usr/bin
+.br
+마지막으로 "조용한" 로그인이 아니라면, 그날의 메시지를 출력하고,
+.I /usr/spool/mail
+경로안에 그 사용자 이름으로 된 파일의 크기가 0이 아닌지 확인해서
+0이 아니면, 편지가 있다고 알려준다.
+
+다음 사용자 쉘을 지정하는데,
+.BR /etc/passwd
+파일에서 그 사용자의 쉘이 지정되어 있지 않으면,
+.B /bin/sh
+쉘을 사용한다.
+또한,
+.IR /etc/passwd
+파일에서 홈 경로가 지정되어 있지 않으며,
+.I /
+경로로 로그인된다.(홈 경로는 위에서 설명한
+.I .hushlogin
+파일이 있는지 확인할 때 검사된다.)
+.SH 옵션
+.TP
+.B \-p
+.B login
+실행할 때 이전 환경들을 그대로 사용하도록
+.BR getty (8)
+명령에 의해 사용된다.
+.TP
+.B \-f
+두번째 로그인일 경우에는 그 인증(계정확인절차)을 통과한다.
+root 계정일 경우에는 작동되지 않으며, 리눅스에서는 바르게
+작동되지 않을 수도 있다.
+.TP
+.B \-h
+리모트 호스트 로그인시(가령, telnetd(8) 사용) 계정 입력을 통과한다.
+물론 utmp, wtmp 기록은 있다. 이 옵션은 단지 root만이 사용할 수 있다.
+
+.SH "특별 접근 거부"
+.I /etc/securetty
+파일에는 root가 접속 할 수 터미날이 나열되어 있다.
+이 터미날 이름은 /dev/ 글자를 생략한 터미날 이름만이다.
+이 파일이 없다면 root는 모든 터미날에서 접속이 가능하다.
+.PP
+.I /etc/usertty
+파일에는 특정 사용자의 접속에 대한 특별한 설정 내용이 있다.
+이 파일이 없다면, 어떠한 특정 사용자의 접속 거부같은 없다.
+이 파일의 세부분으로 구성되어 있는데, 각각 그 부분들의 이름은
+CLASSES, GROUPS, USERS 이다. CLASSES 부분에서는 터미날의 클래스와
+호스트이름 패턴이 정의되고, GROUPS 부분에서는 그룹 단위의 허락되는
+터미날과 호스트가 정의되고, USERS 부분에서는 사용자 단위의 허락되는
+터미날과 호스트가 정의된다.
+.PP
+이 파일의 각 줄은 255 문자를 넘을 수 없으며,
+# 문자로 시작하는 그 줄 전체는 주석으로 처리된다.
+.PP
+.SS "CLASSES 섹션"
+CLASSES 섹션은 대문자로 첫칸부터 CLASSES라고 씀으로 정의된다.
+이 부분은 다음 섹션이 정의되기 전까지 모든 부분이 포함된다.
+각 단어의 구분은 공백문자나 탭문자로 한다.
+각 줄에는 터미날과 호스트 패턴의 클래스가 정의된다.
+.PP
+각 줄의 처음은 관리자가 정의하는 클래스 이름이 오고,
+그 다음에는 그 클래스에서 사용하는 터미날과 호스트 패턴이 온다.
+이 클래스 이름은 다음에 오는 GROUPS, USERS 섹션에서 사용될 수 있다.
+.PP
+CLASSES 섹션 예제:
+.PP
+.nf
+.in +.5
+CLASSES
+myclass1 tty1 tty2
+myclass2 tty3 @.foo.com
+.in -.5
+.fi
+.PP
+윗 예제는
+.I myclass1
+과
+.I myclass2
+클래스를 오른쪽 부분과 같이 정의한 것이다.
+.PP
+.SS "GROUPS 섹션"
+GROUPS 섹션에서는 유닉스 그룹 단위의 허락되는 터미날과 호스트가 정의된다.
+접속하는 사용자의 그룹이(이것은
+.I /etc/passwd
+파일과
+.I /etc/group
+파일에서 확인됨)이
+.I /etc/usertty
+파일의 GROUPS 섹션 부분에서 정의된 그룹이라면, 그에 해당되는
+터미날과 호스트에만 접속이 가능해 진다.
+.PP
+GROUPS 섹션은 첫칸에 대문자로 GROUPS 이라고 씀으로 정의가 시작되고,
+다음섹션의 정의가 나타나기 전까지 이 섹션으로 가정한다.
+각 단어의 구분은 공백문자나 탭문자로 하며,
+각 줄의 처음에는 그룹이 오고 다음에는 그 그룹에서 접근할 수 있는
+터미날과 호스트가 온다. 또한 허락되는 터미날과 호스트 부분에서
+앞 CLASSES 섹션에서 정의한 클래스 이름이 사용될 수도 있다.
+.PP
+GROUPS 섹션의 예제:
+.PP
+.nf
+.in +0.5
+GROUPS
+sys tty1 @.bar.edu
+stud myclass1 tty4
+.in -0.5
+.fi
+.PP
+윗 예제는
+.I sys
+그룹의 사용자는 bar.edu 도메인을 가진 호스트에서, tty1로만
+접속이 가능하다.
+.I stud
+그룹의 사용자는 myclass1 클래스 또는 tty4로만 접속이 가능하다.
+.PP
+
+.SS "USERS 섹션"
+USERS 섹션은 첫칸에 USERS 라고 대문자로 씀으로 정의된다.
+각 단어의 구분은 공백문자와 탭문자로 하며,
+첫칸에는 사용자 계정, 다음에는 그 계정 사용자가 접속 할 수 있는
+터미날과 그 사용자가 접속 시도하는 호스트가 정의된다.
+물론 터미날과 호스트 정의부분에서 앞 CLASSES 섹션에서 정의한 클래스가
+사용될 수도 있다.
+.PP
+USERS 섹션 예제:
+.PP
+.nf
+.in +0.5
+USERS
+zacho tty1 @130.225.16.0/255.255.255.0
+blue tty3 myclass2
+.in -0.5
+.fi
+.PP
+윗 예제는 zacho 계정 사용자는 IP 주소가 130.225.16.0 부터 130.225.16.255
+범위 안의 호스트에서 이 컴의 tty1로 접속 하고자 할 때만 접속을 할 수 있다.
+blue 계정 사용자는 myclass2에서 정의된 환경과 tty3으로만 접속할 수 있다.
+.PP
+USERS 섹션안에서 사용자 계정 부분에 * 문자가 올 수도 있다.
+이것은 초기값 지정이며, 모든 사용자에게 적용된다.
+.PP
+접속하고자 하는 사용자의 계정과 그룹이 USERS, GROUPS 섹션 두 부분에서 모두
+적용되면 각 섹션에서 정의된 모든 터미날/호스트가 적용된다.
+
+.SS Origins
+터미날과 호스트 정의 부분에는 클래스, origin이라고 부르는
+일군의 문자열이 사용된다. 이 origin 문자열은 다음과 같은 형식을 취한다.
+.IP o
+터미날의 이름에는 /dev/ 부분이 빠진다. 즉, tty1, ttyS0 형식으로 사용된다.
+.PP
+.IP o
+@localhost 문자열은 로칼 호스트에서 telnet/rlogin으로 접속하는 사용자를
+의미한다. 즉 `xterm \-e /bin/login' 명령같은 것이 실행된다는 것을 의미한다.
+.PP
+.IP o
+@.some.dom 문자열은 리모트 호스트 접속시 그 사용자가 rlogin/telnet으로
+도메인이 .some.dom로 끝나는 호스트에서만 접속할 수 있다는 것을 의미한다.
+.PP
+.IP o
+IP 주소의 영역은 @x.x.x.x/y.y.y.y 이런 식으로 정의하는데,
+이것은 x.x.x.x 에서 y.y.y.y 범위의 IP 주소를 가진 호스트에서만
+접속이 가능하다. 예를 들어, @130.225.16.0/255.255.254.0
+으로 정의하면, IP의 범위가 130.225.16.0 \- 130.225.17.255인
+호스트에서만 접속이 가능하다.
+.PP
+기타 origin 에서 사용되는 문자열로 시간을 정할수 있는데,
+그 형식은 다음과 같다.
+.PP
+.nf
+timespec ::= '[' <day\-or\-hour> [':' <day\-or\-hour>]* ']'
+day ::= 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat' | 'sun'
+hour ::= '0' | '1' | ... | '23'
+hourspec ::= <hour> | <hour> '\-' <hour>
+day\-or\-hour ::= <day> | <hourspec>
+.fi
+.PP
+예를 들어, [mon:tue:wed:thu:fri:8\-17]tty3 문자열은
+월요일부터 금요일까지, 오전 8시 00분부터 오후 5시 59분까지만
+tty3으로 접속할 수 있음을 의미한다. 시간 지정에서는 단지,
+a\-b 식으로 정의되면 a시 00분 부터 b시 59분까지를 의미하며,
+단지 단일 숫자만 있으면(가령 10) 그 시간만(10시 00분부터 10시 59분까지)을
+의미한다.
+.PP
+시간부분의 설정이 지정되지 않으면 어떠한 시간에도 접속이 가능하다.
+각 요일별로 그 시간을 따로 정하고 싶으면 각 요일 정의다음에 시간을
+각각 따로 정의 할 수도 있다.
+시간지정에서는 공백문자를 사용할 수 없다.
+.PP
+만약
+.I /etc/usertty
+파일에서 각 정의들이 바르지 못하게 정의된다면,
+모든 사용자의 특별 접속 거부 같은 것은 없다.
+.PP
+.SH "관련 파일"
+.nf
+\fI/var/run/utmp\fR
+\fI/var/log/wtmp\fR
+\fI/var/log/lastlog\fR
+\fI/etc/motd\fR
+\fI/etc/passwd\fR
+\fI/etc/nologin\fR
+\fI/etc/usertty\fR
+\fI$HOME/.hushlogin\fR
+.fi
+.SH "관련 항목"
+.BR init (8),
+.BR getty (8),
+.BR mail (1),
+.BR passwd (1),
+.BR passwd (5),
+.BR environ (7),
+.BR shutdown (8)
+.SH 벌레
+리눅스에서는 다른 옛날 운영체제와 달리 한 사용자의 중복 로그인을
+제한하지 않는다.
+
+설명되지 않은 BSD의
+.B \-r
+옵션은 지원되지 않는다.
+이 옵션은
+어떠한
+.BR rlogind (8)
+풀그림에서 필요할 지도 모른다.
+.SH 만든이
+Derived from BSD login 5.40 (5/9/89) by Michael Glad (glad@daimi.dk) for HP\-UX
+.br
+Ported to Linux 0.12: Peter Orbaek (poe@daimi.aau.dk)
diff --git a/man/ko/man1/su.1 b/man/ko/man1/su.1
new file mode 100644
index 0000000..e509c70
--- /dev/null
+++ b/man/ko/man1/su.1
@@ -0,0 +1,92 @@
+.TH SU 1 "GNU 쉘 유틸리티" "FSF" \" \-*\- nroff \-*\-
+.SH 이름
+su \- 사용자와 그룹 ID 를 교체하여 쉘을 실행한다
+.SH 개요
+.B su
+[\-flmp] [\-c 명령] [\-s 쉘] [\-\-login] [\-\-fast]
+[\-\-preserve\-environment] [\-\-command=명령] [\-\-shell=쉘] [\-]
+[\-\-help] [\-\-version] [사용자 [인수...]]
+.SH 설명
+이 맨페이지는 GNU 버전의
+.BR su
+를 설명한다.
+.B su
+는 한 사용자가 잠시 다른 사용자가 될 수 있도록 해준다.
+실제 사용자 ID, 그룹 ID, USER의 보충적인 그룹으로 쉘을 실행한다.
+USER가 주어지지 않으면 기본적으로 수퍼유저인 root 로 설정된다.
+실행되는 쉘은 USER의 패스워드 목록에서 찾아오거나 없으면 /bin/sh 를 수행한다.
+만약 USER에 패스워드가 있다면
+.B su
+는 실제 사용자 ID 0 (수퍼유저)가 아닌 한 패스워드를 물어온다.
+.PP
+기본적으로,
+.B su
+는 현재 디렉토리를 변경하지 않는다. USER 의 패스워드 항목으로부터 `HOME',
+`SHELL' 등의 변수를 설정하고 만약 수퍼유저가 아니라면 `USER'와 `LOGNAME'을
+USER로 설정한다. 기본적으로 이 쉘은 로그인 쉘이 아니다.
+.PP
+만약 한 개 이상의 인수가 주어지면 쉘에 대한 인수로 전달된다.
+.PP
+.B su
+는 /bin/sh나 다른 쉘을 특별히 다루지는 않는다.
+(argv[0]를 "\-su"로 하고 \-c 를 특정 쉘로 지정하지 않는 한... )
+.PP
+syslog를 가지고 있는 시스템에서는,
+.B su
+가 실패하는 경우 보고를 하도록, 그리고 성공의 경우에는 선택적으로 보고하도록
+컴파일하면
+.B su
+가 syslog를 사용한다.
+.SS 옵션
+.TP
+.I "\-c COMMAND, \-\-command=COMMAND"
+대화형 쉘을 시작하지 않고
+.I \-c
+옵션을 쉘에 주어서 한 개의 명령만을 수행하도록 한다.
+.TP
+.I "\-f, \-\-fast"
+쉘에
+.I \-f
+옵션을 전달한다.
+.B csh
+와
+.BR tcsh
+에만 해당되는 것으로서,
+.I \-f
+옵션은 시작 화일(.cshrc)를 읽지 않도록 한다. 본쉘의 경우,
+.I \-f
+옵션은 화일 패턴 확장을 불능으로 설정하는 것으로서 일반적으로 그렇게 하지
+않는다.
+.TP
+.I "\-\-help"
+표준출력으로 사용법을 출력하고 정상적으로 종료한다.
+.TP
+.I "\-, \-l, \-\-login"
+쉘을 로그인 쉘로 만든다. 그 의미는 다음과 같다. `TERM', `HOME', `SHELL'
+(위에서 설명) 그리고 `USER', `LOGNAME'(위에서 설명하였듯 수퍼유저라 할 지라도
+설정된다)을 제외하고 나머지 환경 변수를 제거한다. 그리고 `PATH'를 컴파일 기본
+설정값으로 설정한다. USER의 홈 디렉토리로 이동한다. 쉘 이름에 "\-" 를 추가하여
+로그인 스크립트 화일들을 읽을 수 있게 할 수 있다.
+.TP
+.I "\-m, \-p, \-\-preserve\-environment"
+`HOME', `USER', `LOGNAME', `SHELL' 등의 환경변수값을 변경하지 않는다.
+만약
+.B su
+를 실행하는 사용자가 수퍼유저이거나 사용자의 쉘이 제한된 쉘일 때는
+\fI/etc/passwd\fR에 기재된 USER의 쉘이 아니라 `SHELL' 환경변수에 설정된 쉘을
+실행한다.
+제한된 쉘이란 /etc/shells에 등록되어 있지 않거나 /etc/shells 화일이 존재하지
+않을 때 내장 컴파일된 목록에 들어있지 않는 경우를 말한다.
+이 옵션의 일부는 다음
+.I \-\-login
+과
+.IR \-\-shell
+옵션에 의해 무시될 수 있다.
+.TP
+.I "\-s, \-\-shell shell"
+.B su
+를 실행하는 사용자가 수퍼유저가 아니거나 사용자의 쉘이 제한된 쉘일 때는
+\fI/etc/passwd\fR에 등록된 USER의 쉘을 수행하지 않고 지정한 쉘을 수행한다.
+.TP
+.I "\-\-version"
+표준출력으로 버전정보를 출력하고 정상적으로 종료한다.
diff --git a/man/ko/man5/passwd.5 b/man/ko/man5/passwd.5
new file mode 100644
index 0000000..52d7f0a
--- /dev/null
+++ b/man/ko/man5/passwd.5
@@ -0,0 +1,119 @@
+.\"$Id$
+.\" This is free documentation; you can redistribute it and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation; either version 2 of
+.\" the License, or (at your option) any later version.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual is distributed in the hope that it will be useful,
+.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.\" GNU General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public
+.\" License along with this manual; if not, write to the Free
+.\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
+.\" USA.
+.\"
+.\" Modified Sun Jul 25 10:46:28 1993 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Aug 21 18:12:27 1994 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Jun 18 01:53:57 1995 by Andries Brouwer (aeb@cwi.nl)
+.\" Modified Mon Jan 5 20:24:40 MET 1998 by Michael Haardt
+.\" (michael@cantor.informatik.rwth-aachen.de)
+.\"
+.\" 한국어 번역 : ASPLINUX<man@asp-linux.co.kr> 2000년 7월 29일
+.\"
+.TH PASSWD 5 "January 5, 1998" "" "File formats"
+.SH 이름
+passwd \- 패스워드 파일
+.SH 설명
+.B Passwd
+는 텍스트 파일로서, 시스템 계정의 목록을 포함하고 있고, 사용자 ID, 그룹
+ID, 홈 디렉토리, 쉘 등의 각 계정에 대한 매우 유용한 정보를 제공한다.
+종종, 각 계정에 대한 암호화된 패스워드를 포함한다.
+Passwd는 일반적인 읽기 권한을 가져야 하지만, 수퍼 유저에게만 쓰기 접근이
+가능하다.
+.PP
+예전에는 일반적인 읽기 권한으로인한 문제들이 없었다. 모든 사람들이
+암호화된 패스워드를 읽을 수 있었지만, 패스워드를 크랙하기에는 하드웨어가
+너무나 느렸고, 더우기, 기본적인 가정은 그들은 아주 친숙한 사용자
+공동체의 패스워드들이었다.
+
+오늘날 많은 사람들이 쉐도우 패스워드의 일부 버전을 실행한다.
+ .I /etc/passwd는 암호화된 패스워드 대신 *로 된
+패스워드를 지니고, 암호화된 패스워드들은 수퍼유저만이 읽을 수 있는
+.I /etc/shadow에 저장된다.
+.PP
+쉐도우 패스우드가 사용되는지에 상관없이, 많은 시스템 관리자들은 사용자가
+자기 자신을 패스워드를 사용하여 인증할 수 없도록 패스워드 필드내에
+별표를 사용한다.
+
+.PP
+만일 새로운 로그인을 만들면, 우선 패스워드 필드에 별표를 놓고, 이를
+설정하기 위해 .BR passwd (1)을 사용한다.
+PP
+각 행마다 하나의 항목이 있고, 각 행은 다음의 형식을 지닌다.
+.sp
+.RS
+계정:패스워드:UID:GID:GECOS:디렉토리:쉘
+.RE
+.sp
+각 필드에 대한 설명은 다음과 같다.
+.sp
+.RS
+.TP 1.0in
+.I 계정
+시스템에서의 사용자 이름. 대문자를 사용해서는 안된다.
+.TP
+.I 패스워드
+암호화된 사용자의 패스워드 혹은 별표
+.TP
+.I UID
+숫자로 표현되는 사용자 id
+.TP
+.I GID
+이 사용자에 대한 주 그룹 ID, 숫자로 표현됨
+.TP
+.I GECOS
+이 필드는 선택적이고, 오직 정보적인 목적으로만 사용된다. 보통, 이는
+사용자의 전체 이름을 포함한다. GECOS는 일반 전자 통합 운영체제로서,
+GE의 거대 시스템이 Honeywell에 판매된 GCOS,로 다시 명명되었다. Dennis
+Ritchie는 말하기를, 때때로 우리는 프린터 출력 혹은 일괄 처리 작업들을
+GCOS 머신으로 전송하였다. 패스워드 파일에서 GCOS 필드는 $IDENTcard에 대한
+정보를 숨겨두는 장소이다.
+.TP
+.I directory
+사용자의 $HOME 디렉토리
+.TP
+.I shell(쉘)
+로그인시 실행하는 프로그램(만일 비었다면, .BR /bin/sh을 사용한다.)
+만일 존재하지 않는 실행파일로 설정되었다면, 사용자는 .BR login (1)을 통해
+로그인 할 수 없을 것이다.
+
+.RE
+.SH 주의
+여러분이 사용자 그룹을 만들고 싶다면, GID는 이와 동일하여야 하며,
+\fI/etc/group\fP내에 항목들이 있거나, 그룹이 존재하지 않아야 한다.
+.PP
+암호화된 패스워드가 별표로 설정된 경우, 사용자는 .BR login (1)로 로그일 할 수 없지만,
+.BR rlogin (1)을 사용하여 로그인할 수 있을 수도 있다. 존재하는 프로세스들을 실행하고,
+.BR rsh (1)
+혹은
+.BR cron (1)
+혹은
+.BR at (1)
+을 초기화시키거나, 메일 필터를 시작한다.
+단순히 쉘 필드를 변경시켜서 계정을 잠그는 것은 똑같은 결과를 가져오고,
+.BR su (1)의 사용을 허용한다..
+.SH 파일
+.I /etc/passwd
+.SH 관련 항목
+.BR passwd (1),
+.BR login (1),
+.BR su (1),
+.BR group (5),
+.BR shadow (5)
diff --git a/man/ko/man8/vigr.8 b/man/ko/man8/vigr.8
new file mode 100644
index 0000000..ff72d7a
--- /dev/null
+++ b/man/ko/man8/vigr.8
@@ -0,0 +1 @@
+.so man8/vipw.8
diff --git a/man/ko/man8/vipw.8 b/man/ko/man8/vipw.8
new file mode 100644
index 0000000..c36f908
--- /dev/null
+++ b/man/ko/man8/vipw.8
@@ -0,0 +1,64 @@
+.\" Copyright (c) 1983, 1991 The Regents of the University of California.
+.\" 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. All advertising materials mentioning features or use of this software
+.\" must display the following acknowledgement:
+.\" This product includes software developed by the University of
+.\" California, Berkeley and its contributors.
+.\" 4. Neither the name of the University nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
+.\"
+.\" from: @(#)vipw.8 6.7 (Berkeley) 3/16/91
+.\" $Id$
+.\"
+.Dd March 16, 1991
+.Dt VIPW 8
+.Os BSD 4
+.Sh NAME
+.Nm vipw
+.Nd 패스워드 파일 편집
+.Sh 사용법
+.Nm vipw
+.Sh 설명
+.Nm Vipw
+명령은 /etc/passwd 파일을 잠그고(lock) 편집하고,
+편집이 끝나면, /etc/passwd 파일을 잠금해제(unlock)한다.
+이미 /etc/passwd 파일이 잠겨 있으면, 다음에 사용하라고
+메시지를 보여준다.
+\fBvipw\fR에서 사용하는 기본 편집기는 \fBvi(1)\fR이다.
+.Sh 환경변수
+\fBvipw\fR는 다음 환경 변수를 사용한다.
+.Bl -tag -width EDITOR
+.It Ev EDITOR
+사용할 편집기 지정. 초기값은 vi
+.El
+.Sh 관련 항목
+.Xr passwd 1 ,
+.Xr vi 1 ,
+.Xr passwd 5
+.Sh 발자취
+.Nm
+명령은
+.Bx 4.0
+에서 처음 나타났다.
diff --git a/man/lastlog.8.xml b/man/lastlog.8.xml
new file mode 100644
index 0000000..fc096c8
--- /dev/null
+++ b/man/lastlog.8.xml
@@ -0,0 +1,237 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1992 , Julianne Frances Haugh
+ Copyright (c) 1992 , Phillip Street
+ Copyright (c) 2007 - 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.
+-->
+<!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'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1992</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>lastlog</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>lastlog</refname>
+ <refpurpose>reports the most recent login of all users or of a given user</refpurpose>
+ </refnamediv>
+ <!-- body begins here -->
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>lastlog</command>
+ <arg choice='opt'>
+ <replaceable>options</replaceable>
+ </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ <command>lastlog</command> formats and prints the contents of the last
+ login log <filename>/var/log/lastlog</filename> file. The
+ <emphasis>login-name</emphasis>, <emphasis>port</emphasis>, and
+ <emphasis>last login time</emphasis> will be printed. The default (no
+ flags) causes lastlog entries to be printed, sorted by their order in
+ <filename>/etc/passwd</filename>.
+ </para>
+ </refsect1>
+
+ <refsect1 id='options'>
+ <title>OPTIONS</title>
+ <para>
+ The options which apply to the <command>lastlog</command> command are:
+ </para>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term>
+ <option>-b</option>, <option>--before</option>&nbsp;<replaceable>DAYS</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Print only lastlog records older than <emphasis remap='I'>DAYS</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-C</option>, <option>--clear</option>
+ </term>
+ <listitem>
+ <para>
+ Clear lastlog record of a user. This option can be used only together
+ with <option>-u</option> (<option>--user</option>)).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-h</option>, <option>--help</option>
+ </term>
+ <listitem>
+ <para>Display help message and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Apply changes in the <replaceable>CHROOT_DIR</replaceable>
+ directory and use the configuration files from the
+ <replaceable>CHROOT_DIR</replaceable> directory.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-S</option>, <option>--set</option>
+ </term>
+ <listitem>
+ <para>
+ Set lastlog record of a user to the current time. This option can be
+ used only together with <option>-u</option> (<option>--user</option>)).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-t</option>, <option>--time</option>&nbsp;<replaceable>DAYS</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Print the lastlog records more recent than
+ <emphasis remap='I'>DAYS</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</replaceable>|<replaceable>RANGE</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Print the lastlog record of the specified user(s).
+ </para>
+ <para>
+ The users can be specified by a login name, a numerical user ID,
+ or a <replaceable>RANGE</replaceable> of users. This
+ <replaceable>RANGE</replaceable> of users can be specified with a
+ min and max values (<replaceable>UID_MIN-UID_MAX</replaceable>), a
+ max value (<replaceable>-UID_MAX</replaceable>), or a min value
+ (<replaceable>UID_MIN-</replaceable>).
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>
+ If the user has never logged in the message <emphasis>** Never logged
+ in**</emphasis> will be displayed instead of the port and time.
+ </para>
+
+ <para>
+ Only the entries for the current users of the system will be
+ displayed. Other entries may exist for users that were deleted
+ previously.
+ </para>
+ </refsect1>
+
+ <refsect1 id='note'>
+ <title>NOTE</title>
+ <para>
+ The <filename>lastlog</filename> file is a database which contains info
+ on the last login of each user. You should not rotate it. It is a sparse
+ file, so its size on the disk is usually much smaller than the one shown
+ by "<command>ls -l</command>" (which can indicate a really big file if
+ you have in <filename>passwd</filename> users with a high UID). You can
+ display its real size with "<command>ls -s</command>".
+ </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>
+ <varlistentry>
+ <term><filename>/var/log/lastlog</filename></term>
+ <listitem>
+ <para>Database times of previous user logins.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='caveats'>
+ <title>CAVEATS</title>
+ <para>
+ Large gaps in UID numbers will cause the lastlog program to run
+ longer with no output to the screen (i.e. if in lastlog database there
+ is no entries for users with UID between 170 and 800 lastlog will appear
+ to hang as it processes entries with UIDs 171-799).
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/limits.5.xml b/man/limits.5.xml
new file mode 100644
index 0000000..1215f13
--- /dev/null
+++ b/man/limits.5.xml
@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1997 , Luca Berra
+ Copyright (c) 2001 - 2007, Tomasz Kłoczko
+ Copyright (c) 2005 - 2006, Yuri Kozlov
+ Copyright (c) 2005 - 2008, 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='limits.5'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Luca</firstname>
+ <surname>Berra</surname>
+ <contrib>Creation, 1997</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>limits</refentrytitle>
+ <manvolnum>5</manvolnum>
+ <refmiscinfo class="sectdesc">File Formats and Conversions</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>limits</refname>
+ <refpurpose>resource limits definition</refpurpose>
+ </refnamediv>
+ <!-- body begins here -->
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The <emphasis remap='I'>limits</emphasis> file
+ (<filename>/etc/limits</filename> by default
+ or LIMITS_FILE defined <filename>config.h</filename>) describes
+ the resource limits you wish to impose. It should be owned by
+ root and readable by root account only.
+ </para>
+
+ <para>
+ By default no quota is imposed on 'root'. In fact, there is no way to
+ impose limits via this procedure to root-equiv accounts (accounts with
+ UID 0).
+ </para>
+
+ <para>Each line describes a limit for a user in the form:</para>
+
+ <para>
+ <emphasis remap='I'>user LIMITS_STRING</emphasis>
+ </para>
+
+ <para>or in the form:</para>
+
+ <para>
+ <emphasis remap='I'>@group LIMITS_STRING</emphasis>
+ </para>
+
+ <para>
+ The <emphasis>LIMITS_STRING</emphasis> is a string of a concatenated
+ list of resource limits. Each limit consists of a letter identifier
+ followed by a numerical limit.
+ </para>
+
+ <para>The valid identifiers are:</para>
+
+ <itemizedlist>
+ <listitem><para>A: max address space (KB)</para></listitem>
+ <listitem><para>C: max core file size (KB)</para></listitem>
+ <listitem><para>D: max data size (KB)</para></listitem>
+ <listitem><para>F: maximum file size (KB)</para></listitem>
+ <listitem><para>K: file creation mask, set by
+ <citerefentry>
+ <refentrytitle>umask</refentrytitle><manvolnum>2</manvolnum>
+ </citerefentry>.</para>
+ </listitem>
+ <listitem><para>I: max nice value (0..39 which translates to
+ 20..-19)</para></listitem>
+ <listitem><para>L: max number of logins for this user</para></listitem>
+ <listitem><para>M: max locked-in-memory address space (KB)</para></listitem>
+ <listitem><para>N: max number of open files</para></listitem>
+ <listitem><para>O: max real time priority</para></listitem>
+ <listitem><para>P: process priority, set by
+ <citerefentry>
+ <refentrytitle>setpriority</refentrytitle><manvolnum>2</manvolnum>
+ </citerefentry>.</para>
+ </listitem>
+ <listitem><para>R: max resident set size (KB)</para></listitem>
+ <listitem><para>S: max stack size (KB)</para></listitem>
+ <listitem><para>T: max CPU time (MIN)</para></listitem>
+ <listitem><para>U: max number of processes</para></listitem>
+ </itemizedlist>
+
+ <para>
+ For example, <emphasis remap='I'>L2D2048N5</emphasis> is a valid
+ <emphasis>LIMITS_STRING</emphasis>. For reading convenience, the
+ following entries are equivalent:
+ </para>
+
+ <programlisting>
+ username L2D2048N5
+ username L2 D2048 N5
+ </programlisting>
+
+ <para>
+ Be aware that after <emphasis remap='I'>username</emphasis> the rest
+ of the line is considered a limit string, thus comments are not
+ allowed. An invalid limits string will be rejected (not considered) by
+ the <command>login</command> program.
+ </para>
+
+ <para>
+ The default entry is denoted by username "<emphasis>*</emphasis>". If
+ you have multiple <emphasis remap='I'>default</emphasis> entries in
+ your <emphasis>LIMITS_FILE</emphasis>, then the last one will be used
+ as the default entry.
+ </para>
+
+ <para>
+ The limits specified in the form "<replaceable>@group</replaceable>"
+ apply to the members of the specified
+ <replaceable>group</replaceable>.
+ </para>
+
+ <para>
+ If more than one line with limits for a user exist, only the first line for
+ this user will be considered.
+ </para>
+
+ <para>
+ If no lines are specified for a user, the last
+ <replaceable>@group</replaceable> line matching a group whose the
+ user is a member of will be considered, or the last line with
+ default limits if no groups contain the user.
+ </para>
+
+ <para>
+ To completely disable limits for a user, a single dash
+ "<emphasis>-</emphasis>" will do.
+ </para>
+
+ <para>
+ To disable a limit for a user, a single dash
+ "<replaceable>-</replaceable>" can be used instead of the numerical
+ value for this limit.
+ </para>
+
+ <para>
+ Also, please note that all limit settings are set PER LOGIN. They are
+ not global, nor are they permanent. Perhaps global limits will come,
+ but for now this will have to do ;)
+ </para>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/limits</filename></term>
+ <listitem><para></para></listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>setpriority</refentrytitle><manvolnum>2</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>setrlimit</refentrytitle><manvolnum>2</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/login.1.xml b/man/login.1.xml
new file mode 100644
index 0000000..1bca536
--- /dev/null
+++ b/man/login.1.xml
@@ -0,0 +1,429 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY CONSOLE SYSTEM "login.defs.d/CONSOLE.xml">
+<!ENTITY CONSOLE_GROUPS SYSTEM "login.defs.d/CONSOLE_GROUPS.xml">
+<!ENTITY DEFAULT_HOME SYSTEM "login.defs.d/DEFAULT_HOME.xml">
+<!ENTITY ENV_HZ SYSTEM "login.defs.d/ENV_HZ.xml">
+<!ENTITY ENV_PATH SYSTEM "login.defs.d/ENV_PATH.xml">
+<!ENTITY ENV_SUPATH SYSTEM "login.defs.d/ENV_SUPATH.xml">
+<!ENTITY ENV_TZ SYSTEM "login.defs.d/ENV_TZ.xml">
+<!ENTITY ENVIRON_FILE SYSTEM "login.defs.d/ENVIRON_FILE.xml">
+<!ENTITY ERASECHAR SYSTEM "login.defs.d/ERASECHAR.xml">
+<!ENTITY FAIL_DELAY SYSTEM "login.defs.d/FAIL_DELAY.xml">
+<!ENTITY FAILLOG_ENAB SYSTEM "login.defs.d/FAILLOG_ENAB.xml">
+<!ENTITY FAKE_SHELL SYSTEM "login.defs.d/FAKE_SHELL.xml">
+<!ENTITY FTMP_FILE SYSTEM "login.defs.d/FTMP_FILE.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 LOGIN_RETRIES SYSTEM "login.defs.d/LOGIN_RETRIES.xml">
+<!ENTITY LOGIN_STRING SYSTEM "login.defs.d/LOGIN_STRING.xml">
+<!ENTITY LOGIN_TIMEOUT SYSTEM "login.defs.d/LOGIN_TIMEOUT.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 MAIL_CHECK_ENAB SYSTEM "login.defs.d/MAIL_CHECK_ENAB.xml">
+<!ENTITY MAIL_DIR SYSTEM "login.defs.d/MAIL_DIR.xml">
+<!ENTITY MOTD_FILE SYSTEM "login.defs.d/MOTD_FILE.xml">
+<!ENTITY NOLOGINS_FILE SYSTEM "login.defs.d/NOLOGINS_FILE.xml">
+<!ENTITY PORTTIME_CHECKS_ENAB SYSTEM "login.defs.d/PORTTIME_CHECKS_ENAB.xml">
+<!ENTITY QUOTAS_ENAB SYSTEM "login.defs.d/QUOTAS_ENAB.xml">
+<!ENTITY TTYGROUP SYSTEM "login.defs.d/TTYGROUP.xml">
+<!ENTITY TTYTYPE_FILE SYSTEM "login.defs.d/TTYTYPE_FILE.xml">
+<!ENTITY ULIMIT SYSTEM "login.defs.d/ULIMIT.xml">
+<!ENTITY UMASK SYSTEM "login.defs.d/UMASK.xml">
+<!ENTITY USERGROUPS_ENAB SYSTEM "login.defs.d/USERGROUPS_ENAB.xml">
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='login.1'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1989</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>login</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>login</refname>
+ <refpurpose>begin session on the system</refpurpose>
+ </refnamediv>
+ <!-- body begins here -->
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>login</command>
+ <arg choice='opt'>-p</arg>
+ <arg choice='opt'>-h <replaceable>host</replaceable></arg>
+ <arg choice='opt'>
+ <replaceable>username</replaceable></arg>
+ <arg choice='opt' rep='repeat'> <replaceable>ENV=VAR</replaceable></arg>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>login</command>
+ <arg choice='opt'>-p</arg>
+ <arg choice='opt'>-h <replaceable>host</replaceable></arg>
+ <arg choice='plain'>-f</arg>
+ <arg choice='plain'><replaceable>username</replaceable></arg>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>login</command>
+ <arg choice='opt'>-p</arg>
+ <arg choice='plain'>-r <replaceable>host</replaceable></arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The <command>login</command> program is used to establish a new session
+ with the system. It is normally invoked automatically by responding to
+ the <emphasis remap='I'>login:</emphasis> prompt on the user's
+ terminal. <command>login</command> may be special to the shell and may
+ not be invoked as a sub-process. When called from a shell,
+ <command>login</command> should be executed as
+ <emphasis remap='B'>exec login</emphasis> which will cause the user
+ to exit from the current shell (and thus will prevent the new logged
+ in user to return to the session of the caller). Attempting to
+ execute <command>login</command> from any shell but the login shell
+ will produce an error message.
+ </para>
+
+ <para>
+ The user is then prompted for a password, where appropriate. Echoing
+ is disabled to prevent revealing the password. Only a small number of
+ password failures are permitted before <command>login</command> exits
+ and the communications link is severed.
+ </para>
+
+ <para>
+ If password aging has been enabled for your account, you may be
+ prompted for a new password before proceeding. You will be forced to
+ provide your old password and the new password before continuing.
+ Please refer to <citerefentry>
+ <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry> for more information.
+ </para>
+
+ <para condition="no_pam">
+ After a successful login, you will be informed of any system messages
+ and the presence of mail. You may turn off the printing of the system
+ message file, <filename>/etc/motd</filename>, by creating a
+ zero-length file <filename>.hushlogin</filename> in your login directory.
+ The mail message will be one of "<emphasis>You have new
+ mail.</emphasis>", "<emphasis>You have mail.</emphasis>", or
+ "<emphasis>No Mail.</emphasis>" according to the condition of your
+ mailbox.
+ </para>
+
+ <para>
+ Your user and group ID will be set according to their values in the
+ <filename>/etc/passwd</filename> file. The value for
+ <envar>$HOME</envar>, <envar>$SHELL</envar>, <envar>$PATH</envar>,
+ <envar>$LOGNAME</envar>, and <envar>$MAIL</envar> are set according
+ to the appropriate fields in the password entry. Ulimit, umask and nice
+ values may also be set according to entries in the GECOS field.
+ </para>
+
+ <para>
+ On some installations, the environmental variable
+ <envar>$TERM</envar> will be initialized to the terminal type on
+ your tty line, as specified in <filename>/etc/ttytype</filename>.
+ </para>
+
+ <para>
+ An initialization script for your command interpreter may also be
+ executed. Please see the appropriate manual section for more
+ information on this function.
+ </para>
+
+ <para>
+ A subsystem login is indicated by the presence of a "*" as the first
+ character of the login shell. The given home directory will be used as
+ the root of a new file system which the user is actually logged into.
+ </para>
+
+ <para>
+ The <command>login</command> program is NOT responsible for removing
+ users from the utmp file. It is the responsibility of
+ <citerefentry><refentrytitle>getty</refentrytitle>
+ <manvolnum>8</manvolnum></citerefentry> and
+ <citerefentry><refentrytitle>init</refentrytitle>
+ <manvolnum>8</manvolnum></citerefentry> to clean up apparent ownership
+ of a terminal session. If you use <command>login</command> from the
+ shell prompt without <command>exec</command>, the user you use will
+ continue to appear to be logged in even after you log out of the
+ "subsession".
+ </para>
+
+ </refsect1>
+
+ <refsect1 id='options'>
+ <title>OPTIONS</title>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term>
+ <option>-f</option>
+ </term>
+ <listitem>
+ <para>
+ Do not perform authentication, user is preauthenticated.
+ </para>
+ <para>
+ Note: In that case, <replaceable>username</replaceable> is
+ mandatory.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-h</option>
+ </term>
+ <listitem>
+ <para>Name of the remote host for this login.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-p</option>
+ </term>
+ <listitem>
+ <para>Preserve environment.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-r</option>
+ </term>
+ <listitem>
+ <para>Perform autologin protocol for rlogin.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>
+ The <option>-r</option>, <option>-h</option> and <option>-f</option>
+ options are only used when <command>login</command> is invoked by
+ root.
+ </para>
+ </refsect1>
+
+ <refsect1 id='caveats'>
+ <title>CAVEATS</title>
+ <para>
+ This version of <command>login</command> has many compilation options,
+ only some of which may be in use at any particular site.
+ </para>
+
+ <para>The location of files is subject to differences in system
+ configuration.
+ </para>
+
+ <para>
+ The <command>login</command> program is NOT responsible for removing
+ users from the utmp file. It is the responsibility of <citerefentry>
+ <refentrytitle>getty</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry> and <citerefentry>
+ <refentrytitle>init</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry> to clean up apparent ownership of a terminal session.
+ If you use <command>login</command> from the shell prompt without
+ <command>exec</command>, the user you use will continue to appear to
+ be logged in even after you log out of the "subsession".
+ </para>
+
+ <para>
+ As with any program, <command>login</command>'s appearance can be faked.
+ If non-trusted users have physical access to a machine, an
+ attacker could use this to obtain the password of the next person
+ coming to sit in front of the machine. Under Linux, the SAK mechanism can be
+ used by users to initiate a trusted path and prevent this kind of
+ attack.
+ </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>
+ &CONSOLE;
+ &CONSOLE_GROUPS;
+ &DEFAULT_HOME;
+ <phrase condition="no_pam">&ENV_HZ;</phrase>
+ <phrase>&ENV_PATH;</phrase>
+ <phrase>&ENV_SUPATH;</phrase>
+ &ENV_TZ;
+ &ENVIRON_FILE;
+ &ERASECHAR;
+ &FAIL_DELAY;
+ &FAILLOG_ENAB;
+ &FAKE_SHELL;
+ &FTMP_FILE;
+ &HUSHLOGIN_FILE;
+ &ISSUE_FILE;
+ &KILLCHAR;
+ &LASTLOG_ENAB;
+ &LOGIN_RETRIES;
+ &LOGIN_STRING;
+ &LOGIN_TIMEOUT;
+ &LOG_OK_LOGINS;
+ &LOG_UNKFAIL_ENAB;
+ &MAIL_CHECK_ENAB;
+ <phrase condition="no_pam">&MAIL_DIR;</phrase>
+ &MOTD_FILE;
+ &NOLOGINS_FILE;
+ &PORTTIME_CHECKS_ENAB;
+ &QUOTAS_ENAB;
+ &TTYGROUP; <!-- documents also TTYPERM -->
+ &TTYTYPE_FILE;
+ &ULIMIT;
+ <phrase condition="no_pam">&UMASK;</phrase>
+ &USERGROUPS_ENAB;
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/var/run/utmp</filename></term>
+ <listitem>
+ <para>List of current login sessions.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/var/log/wtmp</filename></term>
+ <listitem>
+ <para>List of previous login sessions.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/passwd</filename></term>
+ <listitem>
+ <para>User account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/shadow</filename></term>
+ <listitem>
+ <para>Secure user account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/motd</filename></term>
+ <listitem>
+ <para>System message of the day file.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/nologin</filename></term>
+ <listitem>
+ <para>Prevent non-root users from logging in.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/ttytype</filename></term>
+ <listitem>
+ <para>List of terminal types.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>$HOME/.hushlogin</filename></term>
+ <listitem>
+ <para>Suppress printing of system messages.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/login.defs</filename></term>
+ <listitem>
+ <para>Shadow password suite configuration.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>su</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>nologin</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>securetty</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>getty</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/login.access.5.xml b/man/login.access.5.xml
new file mode 100644
index 0000000..bb3e77c
--- /dev/null
+++ b/man/login.access.5.xml
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ Copyright (c) 2007 - 2008, 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='login.access.5'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Marek</firstname>
+ <surname>Michałkiewicz</surname>
+ <contrib>Creation, 1996</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>login.access</refentrytitle>
+ <manvolnum>5</manvolnum>
+ <refmiscinfo class="sectdesc">File Formats and Conversions</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>login.access</refname>
+ <refpurpose>login access control table</refpurpose>
+ </refnamediv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The <emphasis remap='I'>login.access</emphasis> file specifies (user,
+ host) combinations and/or (user, tty) combinations for which a login
+ will be either accepted or refused.
+ </para>
+
+ <para>
+ When someone logs in, the <emphasis remap='I'>login.access</emphasis>
+ is scanned for the first entry that matches the (user, host)
+ combination, or, in case of non-networked logins, the first entry that
+ matches the (user, tty) combination. The permissions field of that
+ table entry determines whether the login will be accepted or refused.
+ </para>
+
+ <para>
+ Each line of the login access control table has three fields separated
+ by a ":" character:
+ </para>
+
+ <para>
+ <emphasis remap='I'>permission</emphasis>:<emphasis remap='I'>users</emphasis>:<emphasis remap='I'>origins</emphasis>
+ </para>
+
+ <para>
+ The first field should be a "<emphasis>+</emphasis>" (access granted)
+ or "<emphasis>-</emphasis>" (access denied) character. The second
+ field should be a list of one or more login names, group names, or
+ <emphasis>ALL</emphasis> (always matches). The third field should be a
+ list of one or more tty names (for non-networked logins), host names,
+ domain names (begin with "<literal>.</literal>"), host addresses,
+ internet network numbers (end with "<literal>.</literal>"),
+ <emphasis>ALL</emphasis> (always matches) or
+ <emphasis>LOCAL</emphasis> (matches any string that does not contain a
+ "<literal>.</literal>" character). If you run NIS you can use
+ @netgroupname in host or user patterns.
+ </para>
+
+ <para>
+ The <emphasis>EXCEPT</emphasis> operator makes it possible to write
+ very compact rules.
+ </para>
+
+ <para>
+ The group file is searched only when a name does not match that of the
+ logged-in user. Only groups are matched in which users are explicitly
+ listed: the program does not look at a user's primary group id value.
+ </para>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/login.defs</filename></term>
+ <listitem>
+ <para>Shadow password suite configuration.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/login.defs.5.xml b/man/login.defs.5.xml
new file mode 100644
index 0000000..9e95da2
--- /dev/null
+++ b/man/login.defs.5.xml
@@ -0,0 +1,569 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY CHFN_AUTH SYSTEM "login.defs.d/CHFN_AUTH.xml">
+<!ENTITY CHFN_RESTRICT SYSTEM "login.defs.d/CHFN_RESTRICT.xml">
+<!ENTITY CHSH_AUTH SYSTEM "login.defs.d/CHSH_AUTH.xml">
+<!ENTITY CONSOLE SYSTEM "login.defs.d/CONSOLE.xml">
+<!ENTITY CONSOLE_GROUPS SYSTEM "login.defs.d/CONSOLE_GROUPS.xml">
+<!ENTITY CREATE_HOME SYSTEM "login.defs.d/CREATE_HOME.xml">
+<!ENTITY DEFAULT_HOME SYSTEM "login.defs.d/DEFAULT_HOME.xml">
+<!ENTITY ENCRYPT_METHOD SYSTEM "login.defs.d/ENCRYPT_METHOD.xml">
+<!ENTITY ENV_HZ SYSTEM "login.defs.d/ENV_HZ.xml">
+<!ENTITY ENV_PATH SYSTEM "login.defs.d/ENV_PATH.xml">
+<!ENTITY ENV_SUPATH SYSTEM "login.defs.d/ENV_SUPATH.xml">
+<!ENTITY ENV_TZ SYSTEM "login.defs.d/ENV_TZ.xml">
+<!ENTITY ENVIRON_FILE SYSTEM "login.defs.d/ENVIRON_FILE.xml">
+<!ENTITY ERASECHAR SYSTEM "login.defs.d/ERASECHAR.xml">
+<!ENTITY FAIL_DELAY SYSTEM "login.defs.d/FAIL_DELAY.xml">
+<!ENTITY FAILLOG_ENAB SYSTEM "login.defs.d/FAILLOG_ENAB.xml">
+<!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">
+<!ENTITY LOGIN_STRING SYSTEM "login.defs.d/LOGIN_STRING.xml">
+<!ENTITY LOGIN_TIMEOUT SYSTEM "login.defs.d/LOGIN_TIMEOUT.xml">
+<!ENTITY MAIL_CHECK_ENAB SYSTEM "login.defs.d/MAIL_CHECK_ENAB.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 MD5_CRYPT_ENAB SYSTEM "login.defs.d/MD5_CRYPT_ENAB.xml">
+<!ENTITY MOTD_FILE SYSTEM "login.defs.d/MOTD_FILE.xml">
+<!ENTITY NOLOGINS_FILE SYSTEM "login.defs.d/NOLOGINS_FILE.xml">
+<!ENTITY OBSCURE_CHECKS_ENAB SYSTEM "login.defs.d/OBSCURE_CHECKS_ENAB.xml">
+<!ENTITY PASS_ALWAYS_WARN SYSTEM "login.defs.d/PASS_ALWAYS_WARN.xml">
+<!ENTITY PASS_CHANGE_TRIES SYSTEM "login.defs.d/PASS_CHANGE_TRIES.xml">
+<!ENTITY PASS_MAX_LEN SYSTEM "login.defs.d/PASS_MAX_LEN.xml">
+<!ENTITY PASS_MAX_DAYS SYSTEM "login.defs.d/PASS_MAX_DAYS.xml">
+<!ENTITY PASS_MIN_DAYS SYSTEM "login.defs.d/PASS_MIN_DAYS.xml">
+<!ENTITY PASS_WARN_AGE SYSTEM "login.defs.d/PASS_WARN_AGE.xml">
+<!ENTITY PORTTIME_CHECKS_ENAB SYSTEM "login.defs.d/PORTTIME_CHECKS_ENAB.xml">
+<!ENTITY QUOTAS_ENAB SYSTEM "login.defs.d/QUOTAS_ENAB.xml">
+<!ENTITY SHA_CRYPT_MIN_ROUNDS SYSTEM "login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml">
+<!ENTITY SULOG_FILE SYSTEM "login.defs.d/SULOG_FILE.xml">
+<!ENTITY SU_NAME SYSTEM "login.defs.d/SU_NAME.xml">
+<!ENTITY SU_WHEEL_ONLY SYSTEM "login.defs.d/SU_WHEEL_ONLY.xml">
+<!ENTITY SUB_GID_COUNT SYSTEM "login.defs.d/SUB_GID_COUNT.xml">
+<!ENTITY SUB_UID_COUNT SYSTEM "login.defs.d/SUB_UID_COUNT.xml">
+<!ENTITY SYS_GID_MAX SYSTEM "login.defs.d/SYS_GID_MAX.xml">
+<!ENTITY SYSLOG_SG_ENAB SYSTEM "login.defs.d/SYSLOG_SG_ENAB.xml">
+<!ENTITY SYSLOG_SU_ENAB SYSTEM "login.defs.d/SYSLOG_SU_ENAB.xml">
+<!ENTITY SYS_UID_MAX SYSTEM "login.defs.d/SYS_UID_MAX.xml">
+<!ENTITY TCB_AUTH_GROUP SYSTEM "login.defs.d/TCB_AUTH_GROUP.xml">
+<!ENTITY TCB_SYMLINKS SYSTEM "login.defs.d/TCB_SYMLINKS.xml">
+<!ENTITY TTYGROUP SYSTEM "login.defs.d/TTYGROUP.xml">
+<!ENTITY TTYTYPE_FILE SYSTEM "login.defs.d/TTYTYPE_FILE.xml">
+<!ENTITY UID_MAX SYSTEM "login.defs.d/UID_MAX.xml">
+<!ENTITY ULIMIT SYSTEM "login.defs.d/ULIMIT.xml">
+<!ENTITY UMASK SYSTEM "login.defs.d/UMASK.xml">
+<!ENTITY USERDEL_CMD SYSTEM "login.defs.d/USERDEL_CMD.xml">
+<!ENTITY USERGROUPS_ENAB SYSTEM "login.defs.d/USERGROUPS_ENAB.xml">
+<!ENTITY USE_TCB SYSTEM "login.defs.d/USE_TCB.xml">
+<!-- SHADOW-CONFIG-HERE -->
+]>
+
+<refentry id='login.defs.5'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1991</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>login.defs</refentrytitle>
+ <manvolnum>5</manvolnum>
+ <refmiscinfo class="sectdesc">File Formats and Conversions</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>login.defs</refname>
+ <refpurpose>shadow password suite configuration</refpurpose>
+ </refnamediv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The <filename>/etc/login.defs</filename> file defines the
+ site-specific configuration for the shadow password suite. This file
+ is required. Absence of this file will not prevent system operation,
+ but will probably result in undesirable operation.
+ </para>
+
+ <para>
+ This file is a readable text file, each line of the file describing
+ one configuration parameter. The lines consist of a configuration name
+ and value, separated by whitespace. Blank lines and comment lines are
+ ignored. Comments are introduced with a "#" pound sign and the pound
+ sign must be the first non-white character of the line.
+ </para>
+
+ <para>
+ Parameter values may be of four types: strings, booleans, numbers, and
+ long numbers. A string is comprised of any printable characters. A
+ boolean should be either the value <replaceable>yes</replaceable> or
+ <replaceable>no</replaceable>. An undefined boolean
+ parameter or one with a value other than these will be given a
+ <replaceable>no</replaceable>
+ value. Numbers (both regular and long) may be either decimal values,
+ octal values (precede the value with <replaceable>0</replaceable>) or
+ hexadecimal values
+ (precede the value with <replaceable>0x</replaceable>).
+ The maximum value of the regular and
+ long numeric parameters is machine-dependent.
+ </para>
+
+ <para>The following configuration items are provided:</para>
+
+ <variablelist remap='IP'>
+ &CHFN_AUTH;
+ &CHFN_RESTRICT;
+ &CHSH_AUTH;
+ &CONSOLE;
+ &CONSOLE_GROUPS;
+ &CREATE_HOME;
+ &DEFAULT_HOME;
+ &ENCRYPT_METHOD;
+ &ENV_HZ;
+ &ENV_PATH;
+ &ENV_SUPATH;
+ &ENV_TZ;
+ &ENVIRON_FILE;
+ &ERASECHAR;
+ &FAIL_DELAY;
+ &FAILLOG_ENAB;
+ &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;
+ &LOGIN_STRING;
+ &LOGIN_TIMEOUT;
+ &MAIL_CHECK_ENAB;
+ &MAIL_DIR;
+ &MAX_MEMBERS_PER_GROUP;
+ &MD5_CRYPT_ENAB;
+ &MOTD_FILE;
+ &NOLOGINS_FILE;
+ &OBSCURE_CHECKS_ENAB;
+ &PASS_ALWAYS_WARN;
+ &PASS_CHANGE_TRIES;
+ &PASS_MAX_DAYS;
+ &PASS_MIN_DAYS;
+ &PASS_WARN_AGE;
+ <para>
+ <option>PASS_MAX_DAYS</option>, <option>PASS_MIN_DAYS</option> and
+ <option>PASS_WARN_AGE</option> are only used at the
+ time of account creation. Any changes to these settings won't affect
+ existing accounts.
+ </para>
+ &PASS_MAX_LEN; <!-- documents also PASS_MIN_LEN -->
+ &PORTTIME_CHECKS_ENAB;
+ &QUOTAS_ENAB;
+ &SHA_CRYPT_MIN_ROUNDS; <!-- documents also SHA_CRYPT_MAX_ROUNDS -->
+ &SULOG_FILE;
+ &SU_NAME;
+ &SU_WHEEL_ONLY;
+ &SUB_GID_COUNT; <!-- documents also SUB_GID_MIN SUB_GID_MAX -->
+ &SUB_UID_COUNT; <!-- documents also SUB_UID_MIN SUB_UID_MAX -->
+ &SYS_GID_MAX; <!-- documents also SYS_GID_MIN -->
+ &SYS_UID_MAX; <!-- documents also SYS_UID_MIN -->
+ &SYSLOG_SG_ENAB;
+ &SYSLOG_SU_ENAB;
+ &TCB_AUTH_GROUP;
+ &TCB_SYMLINKS;
+ &TTYGROUP;
+ &TTYTYPE_FILE;
+ &UID_MAX; <!-- documents also UID_MIN -->
+ &ULIMIT;
+ &UMASK;
+ &USERDEL_CMD;
+ &USERGROUPS_ENAB;
+ &USE_TCB;
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='cross_references'>
+ <title>CROSS REFERENCES</title>
+ <para>
+ The following cross references show which programs in the shadow
+ password suite use which parameters.
+ </para>
+ <!-- .na -->
+ <variablelist remap='IP'>
+ <varlistentry condition="tcb">
+ <term>chage</term>
+ <listitem>
+ <para>USE_TCB</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>chfn</term>
+ <listitem>
+ <para>
+ <phrase condition="no_pam">CHFN_AUTH</phrase>
+ CHFN_RESTRICT
+ <phrase condition="no_pam">LOGIN_STRING</phrase>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>chgpasswd</term>
+ <listitem>
+ <para>
+ ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+ <phrase condition="sha_crypt">SHA_CRYPT_MAX_ROUNDS
+ SHA_CRYPT_MIN_ROUNDS</phrase>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>chpasswd</term>
+ <listitem>
+ <para>
+ <phrase condition="no_pam">ENCRYPT_METHOD
+ MD5_CRYPT_ENAB </phrase>
+ <phrase condition="sha_crypt">SHA_CRYPT_MAX_ROUNDS
+ SHA_CRYPT_MIN_ROUNDS</phrase>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="no_pam">
+ <term>chsh</term>
+ <listitem>
+ <para>
+ CHSH_AUTH LOGIN_STRING
+ </para>
+ </listitem>
+ </varlistentry>
+ <!-- expiry: no variables (CONSOLE_GROUPS linked, but not used) -->
+ <!-- faillog: no variables -->
+ <varlistentry>
+ <term>gpasswd</term>
+ <listitem>
+ <para>
+ ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+ <phrase condition="sha_crypt">SHA_CRYPT_MAX_ROUNDS
+ SHA_CRYPT_MIN_ROUNDS</phrase>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>groupadd</term>
+ <listitem>
+ <para>
+ GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP
+ SYS_GID_MAX SYS_GID_MIN
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>groupdel</term>
+ <listitem>
+ <para>MAX_MEMBERS_PER_GROUP</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>groupmems</term>
+ <listitem>
+ <para>MAX_MEMBERS_PER_GROUP</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>groupmod</term>
+ <listitem>
+ <para>MAX_MEMBERS_PER_GROUP</para>
+ </listitem>
+ </varlistentry>
+ <!-- groups: no variables -->
+ <varlistentry>
+ <term>grpck</term>
+ <listitem>
+ <para>MAX_MEMBERS_PER_GROUP</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>grpconv</term>
+ <listitem>
+ <para>MAX_MEMBERS_PER_GROUP</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>grpunconv</term>
+ <listitem>
+ <para>MAX_MEMBERS_PER_GROUP</para>
+ </listitem>
+ </varlistentry>
+ <!-- id: no variables -->
+ <varlistentry>
+ <term>lastlog</term>
+ <listitem>
+ <para>LASTLOG_UID_MAX</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>login</term>
+ <listitem>
+ <para>
+ <phrase condition="no_pam">CONSOLE</phrase>
+ CONSOLE_GROUPS DEFAULT_HOME
+ <phrase condition="no_pam">ENV_HZ ENV_PATH ENV_SUPATH
+ ENV_TZ ENVIRON_FILE</phrase>
+ ERASECHAR FAIL_DELAY
+ <phrase condition="no_pam">FAILLOG_ENAB</phrase>
+ FAKE_SHELL
+ <phrase condition="no_pam">FTMP_FILE</phrase>
+ HUSHLOGIN_FILE
+ <phrase condition="no_pam">ISSUE_FILE</phrase>
+ KILLCHAR
+ <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
+ <phrase condition="no_pam">MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE
+ MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB
+ QUOTAS_ENAB</phrase>
+ TTYGROUP TTYPERM TTYTYPE_FILE
+ <phrase condition="no_pam">ULIMIT UMASK</phrase>
+ USERGROUPS_ENAB
+ </para>
+ </listitem>
+ </varlistentry>
+ <!-- logoutd: no variables -->
+ <varlistentry>
+ <term>newgrp / sg</term>
+ <listitem>
+ <para>
+ SYSLOG_SG_ENAB
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>newusers</term>
+ <listitem>
+ <para>
+ 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>
+ SUB_GID_COUNT SUB_GID_MAX SUB_GID_MIN
+ SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN
+ SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN
+ UMASK
+ </para>
+ </listitem>
+ </varlistentry>
+ <!-- nologin: no variables -->
+ <varlistentry condition="no_pam">
+ <term>passwd</term>
+ <listitem>
+ <para>
+ ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB
+ PASS_ALWAYS_WARN PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN
+ <phrase condition="sha_crypt">SHA_CRYPT_MAX_ROUNDS
+ SHA_CRYPT_MIN_ROUNDS</phrase>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>pwck</term>
+ <listitem>
+ <para>
+ PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+ <phrase condition="tcb">TCB_AUTH_GROUP TCB_SYMLINKS USE_TCB</phrase>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>pwconv</term>
+ <listitem>
+ <para>
+ PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+ <phrase condition="tcb">USE_TCB</phrase>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="tcb">
+ <term>pwunconv</term>
+ <listitem>
+ <para>
+ <phrase condition="tcb">USE_TCB</phrase>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>su</term>
+ <listitem>
+ <para>
+ <phrase condition="no_pam">CONSOLE</phrase>
+ CONSOLE_GROUPS DEFAULT_HOME
+ <phrase condition="no_pam">ENV_HZ ENVIRON_FILE</phrase>
+ ENV_PATH ENV_SUPATH
+ <phrase condition="no_pam">ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB
+ MAIL_DIR MAIL_FILE QUOTAS_ENAB</phrase>
+ SULOG_FILE SU_NAME
+ <phrase condition="no_pam">SU_WHEEL_ONLY</phrase>
+ SYSLOG_SU_ENAB
+ <phrase condition="no_pam">USERGROUPS_ENAB</phrase>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>sulogin</term>
+ <listitem>
+ <para>
+ ENV_HZ
+ <phrase condition="no_pam">ENV_TZ</phrase>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>useradd</term>
+ <listitem>
+ <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
+ SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN
+ SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN
+ UMASK
+ <phrase condition="tcb">TCB_AUTH_GROUP TCB_SYMLINK USE_TCB</phrase>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>userdel</term>
+ <listitem>
+ <para>
+ MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD
+ USERGROUPS_ENAB
+ <phrase condition="tcb">TCB_SYMLINKS USE_TCB</phrase>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <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>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="tcb">
+ <term>vipw</term>
+ <listitem>
+ <para>
+ <phrase condition="tcb">USE_TCB</phrase>
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='bugs' condition="pam">
+ <title>BUGS</title>
+ <para>
+ Much of the functionality that used to be provided by the shadow
+ password suite is now handled by PAM. Thus,
+ <filename>/etc/login.defs</filename> is no longer used by <citerefentry>
+ <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>, or less used by <citerefentry>
+ <refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>, and <citerefentry>
+ <refentrytitle>su</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>. Please refer to the corresponding PAM configuration
+ files instead.
+ </para>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>su</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/login.defs.d/CHFN_AUTH.xml b/man/login.defs.d/CHFN_AUTH.xml
new file mode 100644
index 0000000..941e5f9
--- /dev/null
+++ b/man/login.defs.d/CHFN_AUTH.xml
@@ -0,0 +1,40 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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 condition="no_pam">
+ <term><option>CHFN_AUTH</option> (boolean)</term>
+ <listitem>
+ <para>
+ If <replaceable>yes</replaceable>, the <command>chfn</command>
+ program will require authentication before making any changes,
+ unless run by the superuser.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/CHFN_RESTRICT.xml b/man/login.defs.d/CHFN_RESTRICT.xml
new file mode 100644
index 0000000..ecc21b7
--- /dev/null
+++ b/man/login.defs.d/CHFN_RESTRICT.xml
@@ -0,0 +1,51 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>CHFN_RESTRICT</option> (string)</term>
+ <listitem>
+ <para>
+ This parameter specifies which values in the <emphasis
+ remap='I'>gecos</emphasis> field of the
+ <filename>/etc/passwd</filename> file may be changed by regular
+ users using the <command>chfn</command> program. It can be any
+ combination of letters <replaceable>f</replaceable>,
+ <replaceable>r</replaceable>, <replaceable>w</replaceable>,
+ <replaceable>h</replaceable>, for Full name, Room number, Work
+ phone, and Home phone, respectively. For backward compatibility,
+ <replaceable>yes</replaceable> is equivalent to
+ <replaceable>rwh</replaceable> and <replaceable>no</replaceable> is
+ equivalent to <replaceable>frwh</replaceable>. If not specified,
+ only the superuser can make any changes. The most restrictive
+ setting is better achieved by not installing <command>chfn</command>
+ SUID.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/CHSH_AUTH.xml b/man/login.defs.d/CHSH_AUTH.xml
new file mode 100644
index 0000000..0d7139f
--- /dev/null
+++ b/man/login.defs.d/CHSH_AUTH.xml
@@ -0,0 +1,40 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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 condition="no_pam">
+ <term><option>CHSH_AUTH</option> (boolean)</term>
+ <listitem>
+ <para>
+ If <replaceable>yes</replaceable>, the <command>chsh</command>
+ program will require authentication before making any changes,
+ unless run by the superuser.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/CONSOLE.xml b/man/login.defs.d/CONSOLE.xml
new file mode 100644
index 0000000..a5f6932
--- /dev/null
+++ b/man/login.defs.d/CONSOLE.xml
@@ -0,0 +1,46 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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 condition="no_pam">
+ <term><option>CONSOLE</option> (string)</term>
+ <listitem>
+ <para>
+ If defined, either full pathname of a file containing device names
+ (one per line) or a ":" delimited list of device names. Root logins will be
+ allowed only upon these devices.
+ </para>
+ <para>
+ If not defined, root will be allowed on any device.
+ </para>
+ <para>
+ The device should be specified without the /dev/ prefix.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/CONSOLE_GROUPS.xml b/man/login.defs.d/CONSOLE_GROUPS.xml
new file mode 100644
index 0000000..f464153
--- /dev/null
+++ b/man/login.defs.d/CONSOLE_GROUPS.xml
@@ -0,0 +1,44 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>CONSOLE_GROUPS</option> (string)</term>
+ <listitem>
+ <para>
+ List of groups to add to the user's supplementary groups set when
+ logging in on the console (as determined by the CONSOLE setting).
+ Default is none.
+ <para>
+ </para>
+ Use with caution - it is possible for users to gain permanent access
+ to these groups, even when not logged in on the console.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/CREATE_HOME.xml b/man/login.defs.d/CREATE_HOME.xml
new file mode 100644
index 0000000..fe40477
--- /dev/null
+++ b/man/login.defs.d/CREATE_HOME.xml
@@ -0,0 +1,41 @@
+<!--
+ Copyright (c) 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>CREATE_HOME</option> (boolean)</term>
+ <listitem>
+ <para>
+ Indicate if a home directory should be created by default for new
+ users.
+ </para>
+ <para>
+ This setting does not apply to system users, and can be overridden on
+ the command line.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/DEFAULT_HOME.xml b/man/login.defs.d/DEFAULT_HOME.xml
new file mode 100644
index 0000000..bb9982b
--- /dev/null
+++ b/man/login.defs.d/DEFAULT_HOME.xml
@@ -0,0 +1,44 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>DEFAULT_HOME</option> (boolean)</term>
+ <listitem>
+ <para>
+ Indicate if login is allowed if we can't cd to the home directory.
+ Default is no.
+ </para>
+ <para>
+ If set to <replaceable>yes</replaceable>, the user will login in
+ the root (<filename>/</filename>) directory if it is not possible to
+ cd to her home directory.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/ENCRYPT_METHOD.xml b/man/login.defs.d/ENCRYPT_METHOD.xml
new file mode 100644
index 0000000..325d025
--- /dev/null
+++ b/man/login.defs.d/ENCRYPT_METHOD.xml
@@ -0,0 +1,54 @@
+<!--
+ Copyright (c) 2007 - 2008, 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>ENCRYPT_METHOD</option> (string)</term>
+ <listitem>
+ <para>
+ This defines the system default encryption algorithm for encrypting
+ passwords (if no algorithm are specified on the command line).
+ </para>
+ <para>
+ It can take one of these values:
+ <replaceable>DES</replaceable> (default),
+ <replaceable>MD5</replaceable><phrase condition="sha_crypt">,
+ <replaceable>SHA256</replaceable>,
+ <replaceable>SHA512</replaceable></phrase>.
+ </para>
+ <para>
+ Note: this parameter overrides the <option>MD5_CRYPT_ENAB</option>
+ variable.
+ </para>
+ <para condition="pam">
+ Note: This only affect the generation of group passwords.
+ The generation of user passwords is done by PAM and subject to the
+ PAM configuration. It is recommended to set this variable
+ consistently with the PAM configuration.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/ENVIRON_FILE.xml b/man/login.defs.d/ENVIRON_FILE.xml
new file mode 100644
index 0000000..ee85d8c
--- /dev/null
+++ b/man/login.defs.d/ENVIRON_FILE.xml
@@ -0,0 +1,42 @@
+<!--
+ 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 condition="no_pam">
+ <term><option>ENVIRON_FILE</option> (string)</term>
+ <listitem>
+ <para>
+ If this file exists and is readable, login environment will be
+ read from it. Every line should be in the form name=value.
+ </para>
+ <para>
+ Lines starting with a # are treated as comment lines and ignored.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/ENV_HZ.xml b/man/login.defs.d/ENV_HZ.xml
new file mode 100644
index 0000000..9bbc255
--- /dev/null
+++ b/man/login.defs.d/ENV_HZ.xml
@@ -0,0 +1,47 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>
+ <!-- XXX: When compiled with PAM support, only sulogin uses ENV_HZ -->
+ <term><option>ENV_HZ</option> (string)</term>
+ <listitem>
+ <para>
+ If set, it will be used to define the HZ environment variable when
+ a user login. The value must be preceded by
+ <replaceable>HZ=</replaceable>. A common value on Linux is
+ <replaceable>HZ=100</replaceable>.
+ </para>
+ <para condition="pam">
+ The <envar>HZ</envar> environment variable is only set when the user
+ (the superuser) logs in with <command>sulogin</command>.
+ </para>
+ <!-- TODO: it can in fact be used to set any other variable-->
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/ENV_PATH.xml b/man/login.defs.d/ENV_PATH.xml
new file mode 100644
index 0000000..a3852fa
--- /dev/null
+++ b/man/login.defs.d/ENV_PATH.xml
@@ -0,0 +1,43 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>ENV_PATH</option> (string)</term>
+ <listitem>
+ <para>
+ If set, it will be used to define the PATH environment variable when
+ a regular user login. The value is a colon separated list of paths
+ (for example <replaceable>/bin:/usr/bin</replaceable>) and can be
+ preceded by <replaceable>PATH=</replaceable>. The default value is
+ <replaceable>PATH=/bin:/usr/bin</replaceable>.
+ </para>
+ <!-- TODO: it can in fact be used to set any other variable-->
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/ENV_SUPATH.xml b/man/login.defs.d/ENV_SUPATH.xml
new file mode 100644
index 0000000..bbd07f8
--- /dev/null
+++ b/man/login.defs.d/ENV_SUPATH.xml
@@ -0,0 +1,44 @@
+<!--
+ 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>ENV_SUPATH</option> (string)</term>
+ <listitem>
+ <para>
+ If set, it will be used to define the PATH environment variable when
+ the superuser login. The value is a colon separated list of paths
+ (for example
+ <replaceable>/sbin:/bin:/usr/sbin:/usr/bin</replaceable>) and can be
+ preceded by <replaceable>PATH=</replaceable>. The default value is
+ <replaceable>PATH=/sbin:/bin:/usr/sbin:/usr/bin</replaceable>.
+ </para>
+ <!-- TODO: it can in fact be used to set any other variable-->
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/ENV_TZ.xml b/man/login.defs.d/ENV_TZ.xml
new file mode 100644
index 0000000..90c8bca
--- /dev/null
+++ b/man/login.defs.d/ENV_TZ.xml
@@ -0,0 +1,48 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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 condition="no_pam">
+ <term><option>ENV_TZ</option> (string)</term>
+ <listitem>
+ <para>
+ If set, it will be used to define the TZ environment variable when
+ a user login. The value can be the name of a timezone preceded by
+ <replaceable>TZ=</replaceable> (for example
+ <replaceable>TZ=CST6CDT</replaceable>), or the full path to the file
+ containing the timezone specification (for example
+ <filename>/etc/tzname</filename>).
+ </para>
+ <!-- TODO: it can in fact be used to set any other variable-->
+ <para>
+ If a full path is specified but the file does not exist or cannot be
+ read, the default is to use <replaceable>TZ=CST6CDT</replaceable>.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/ERASECHAR.xml b/man/login.defs.d/ERASECHAR.xml
new file mode 100644
index 0000000..fad4d72
--- /dev/null
+++ b/man/login.defs.d/ERASECHAR.xml
@@ -0,0 +1,43 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>ERASECHAR</option> (number)</term>
+ <listitem>
+ <para>
+ Terminal ERASE character (<replaceable>010</replaceable> =
+ backspace, <replaceable>0177</replaceable> = DEL).
+ </para>
+ <para>
+ The value can be prefixed "0" for an octal value, or "0x" for an
+ hexadecimal value.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/FAILLOG_ENAB.xml b/man/login.defs.d/FAILLOG_ENAB.xml
new file mode 100644
index 0000000..5a52557
--- /dev/null
+++ b/man/login.defs.d/FAILLOG_ENAB.xml
@@ -0,0 +1,39 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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 condition="no_pam">
+ <term><option>FAILLOG_ENAB</option> (boolean)</term>
+ <listitem>
+ <para>
+ Enable logging and display of <filename>/var/log/faillog</filename>
+ login failure info.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/FAIL_DELAY.xml b/man/login.defs.d/FAIL_DELAY.xml
new file mode 100644
index 0000000..060ca0a
--- /dev/null
+++ b/man/login.defs.d/FAIL_DELAY.xml
@@ -0,0 +1,39 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>FAIL_DELAY</option> (number)</term>
+ <listitem>
+ <para>
+ Delay in seconds before being allowed another attempt after a login
+ failure.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/FAKE_SHELL.xml b/man/login.defs.d/FAKE_SHELL.xml
new file mode 100644
index 0000000..967acaa
--- /dev/null
+++ b/man/login.defs.d/FAKE_SHELL.xml
@@ -0,0 +1,39 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>FAKE_SHELL</option> (string)</term>
+ <listitem>
+ <para>
+ If set, <command>login</command> will execute this shell instead of
+ the users' shell specified in <filename>/etc/passwd</filename>.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/FTMP_FILE.xml b/man/login.defs.d/FTMP_FILE.xml
new file mode 100644
index 0000000..255569a
--- /dev/null
+++ b/man/login.defs.d/FTMP_FILE.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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 condition="no_pam">
+ <term><option>FTMP_FILE</option> (string)</term>
+ <listitem>
+ <para>
+ If defined, login failures will be logged in this file in a utmp format.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/GID_MAX.xml b/man/login.defs.d/GID_MAX.xml
new file mode 100644
index 0000000..639eafb
--- /dev/null
+++ b/man/login.defs.d/GID_MAX.xml
@@ -0,0 +1,45 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>GID_MAX</option> (number)</term>
+ <term><option>GID_MIN</option> (number)</term>
+ <listitem>
+ <para>
+ Range of group IDs used for the creation of regular groups by
+ <command>useradd</command>, <command>groupadd</command>, or
+ <command>newusers</command>.
+ </para>
+ <para>
+ The default value for <option>GID_MIN</option> (resp.
+ <option>GID_MAX</option>) is 1000 (resp. 60000).
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/HUSHLOGIN_FILE.xml b/man/login.defs.d/HUSHLOGIN_FILE.xml
new file mode 100644
index 0000000..edb0262
--- /dev/null
+++ b/man/login.defs.d/HUSHLOGIN_FILE.xml
@@ -0,0 +1,42 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>HUSHLOGIN_FILE</option> (string)</term>
+ <listitem>
+ <para>
+ If defined, this file can inhibit all the usual chatter during the
+ login sequence. If a full pathname is specified, then hushed mode
+ will be enabled if the user's name or shell are found in the file.
+ If not a full pathname, then hushed mode will be enabled if the file
+ exists in the user's home directory.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/ISSUE_FILE.xml b/man/login.defs.d/ISSUE_FILE.xml
new file mode 100644
index 0000000..12c22a7
--- /dev/null
+++ b/man/login.defs.d/ISSUE_FILE.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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 condition="no_pam">
+ <term><option>ISSUE_FILE</option> (string)</term>
+ <listitem>
+ <para>
+ If defined, this file will be displayed before each login prompt.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/KILLCHAR.xml b/man/login.defs.d/KILLCHAR.xml
new file mode 100644
index 0000000..fea9f87
--- /dev/null
+++ b/man/login.defs.d/KILLCHAR.xml
@@ -0,0 +1,42 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>KILLCHAR</option> (number)</term>
+ <listitem>
+ <para>
+ Terminal KILL character (<replaceable>025</replaceable> = CTRL/U).
+ </para>
+ <para>
+ The value can be prefixed "0" for an octal value, or "0x" for an
+ hexadecimal value.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/LASTLOG_ENAB.xml b/man/login.defs.d/LASTLOG_ENAB.xml
new file mode 100644
index 0000000..c264a89
--- /dev/null
+++ b/man/login.defs.d/LASTLOG_ENAB.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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 condition="no_pam">
+ <term><option>LASTLOG_ENAB</option> (boolean)</term>
+ <listitem>
+ <para>
+ Enable logging and display of /var/log/lastlog login time info.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/LASTLOG_UID_MAX.xml b/man/login.defs.d/LASTLOG_UID_MAX.xml
new file mode 100644
index 0000000..ba3025a
--- /dev/null
+++ b/man/login.defs.d/LASTLOG_UID_MAX.xml
@@ -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>
diff --git a/man/login.defs.d/LOGIN_RETRIES.xml b/man/login.defs.d/LOGIN_RETRIES.xml
new file mode 100644
index 0000000..3de450d
--- /dev/null
+++ b/man/login.defs.d/LOGIN_RETRIES.xml
@@ -0,0 +1,44 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>LOGIN_RETRIES</option> (number)</term>
+ <listitem>
+ <para>
+ Maximum number of login retries in case of bad password.
+ </para>
+ <para condition="pam">
+ This will most likely be overridden by PAM, since the default
+ pam_unix module has its own built in of 3 retries. However, this is
+ a safe fallback in case you are using an authentication module that
+ does not enforce PAM_MAXTRIES.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/LOGIN_STRING.xml b/man/login.defs.d/LOGIN_STRING.xml
new file mode 100644
index 0000000..3743afe
--- /dev/null
+++ b/man/login.defs.d/LOGIN_STRING.xml
@@ -0,0 +1,44 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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 condition="no_pam">
+ <term><option>LOGIN_STRING</option> (string)</term>
+ <listitem>
+ <para>
+ The string used for prompting a password. The default is to use
+ "Password: ", or a translation of that string. If you set this
+ variable, the prompt will not be translated.
+ </para>
+ <para>
+ If the string contains <replaceable>%s</replaceable>, this will be
+ replaced by the user's name.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/LOGIN_TIMEOUT.xml b/man/login.defs.d/LOGIN_TIMEOUT.xml
new file mode 100644
index 0000000..05b7cff
--- /dev/null
+++ b/man/login.defs.d/LOGIN_TIMEOUT.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>LOGIN_TIMEOUT</option> (number)</term>
+ <listitem>
+ <para>
+ Max time in seconds for login.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/LOG_OK_LOGINS.xml b/man/login.defs.d/LOG_OK_LOGINS.xml
new file mode 100644
index 0000000..ec11580
--- /dev/null
+++ b/man/login.defs.d/LOG_OK_LOGINS.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>LOG_OK_LOGINS</option> (boolean)</term>
+ <listitem>
+ <para>
+ Enable logging of successful logins.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/LOG_UNKFAIL_ENAB.xml b/man/login.defs.d/LOG_UNKFAIL_ENAB.xml
new file mode 100644
index 0000000..2bc0ca2
--- /dev/null
+++ b/man/login.defs.d/LOG_UNKFAIL_ENAB.xml
@@ -0,0 +1,43 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>LOG_UNKFAIL_ENAB</option> (boolean)</term>
+ <listitem>
+ <para>
+ Enable display of unknown usernames when login failures are
+ recorded.
+ </para>
+ <para>
+ Note: logging unknown usernames may be a security issue if an user
+ enter her password instead of her login name.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/MAIL_CHECK_ENAB.xml b/man/login.defs.d/MAIL_CHECK_ENAB.xml
new file mode 100644
index 0000000..62dece0
--- /dev/null
+++ b/man/login.defs.d/MAIL_CHECK_ENAB.xml
@@ -0,0 +1,42 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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 condition="no_pam">
+ <term><option>MAIL_CHECK_ENAB</option> (boolean)</term>
+ <listitem>
+ <para>
+ Enable checking and display of mailbox status upon login.
+ </para>
+ <para>
+ You should disable it if the shell startup files already check for
+ mail ("mailx -e" or equivalent).
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/MAIL_DIR.xml b/man/login.defs.d/MAIL_DIR.xml
new file mode 100644
index 0000000..60b82d6
--- /dev/null
+++ b/man/login.defs.d/MAIL_DIR.xml
@@ -0,0 +1,60 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>MAIL_DIR</option> (string)</term>
+ <listitem>
+ <para>
+ The mail spool directory. This is needed to manipulate the mailbox
+ when its corresponding user account is modified or deleted. If not
+ specified, a compile-time default is used.
+ </para>
+ </listitem>
+</varlistentry><varlistentry>
+ <term><option>MAIL_FILE</option> (string)</term>
+ <listitem>
+ <para>
+ Defines the location of the users mail spool files relatively to
+ their home directory.
+ </para>
+ </listitem>
+</varlistentry>
+<!-- FIXME: MAIL_FILE not used in useradd -->
+<para>
+ The <option>MAIL_DIR</option> and <option>MAIL_FILE</option> variables
+ are used by <command>useradd</command>, <command>usermod</command>, and
+ <command>userdel</command> to create, move, or delete the user's mail
+ spool.
+</para>
+<para condition="no_pam">
+ If <option>MAIL_CHECK_ENAB</option> is set to
+ <replaceable>yes</replaceable>, they are also used to define the
+ <envar>MAIL</envar> environment variable.
+</para>
diff --git a/man/login.defs.d/MAX_MEMBERS_PER_GROUP.xml b/man/login.defs.d/MAX_MEMBERS_PER_GROUP.xml
new file mode 100644
index 0000000..45975d9
--- /dev/null
+++ b/man/login.defs.d/MAX_MEMBERS_PER_GROUP.xml
@@ -0,0 +1,57 @@
+<!--
+ Copyright (c) 2007 - 2008, 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>MAX_MEMBERS_PER_GROUP</option> (number)</term>
+ <listitem>
+ <para>
+ Maximum members per group entry. When the maximum is reached, a new
+ group entry (line) is started in <filename>/etc/group</filename>
+ (with the same name, same password, and same GID).
+ </para>
+ <para>
+ The default value is 0, meaning that there are no limits in the
+ number of members in a group.
+ </para>
+ <!-- Note: on HP, split groups have the same ID, but different
+ names. -->
+ <para>
+ This feature (split group) permits to limit the length of lines in
+ the group file. This is useful to make sure that lines for NIS
+ groups are not larger than 1024 characters.
+ </para>
+ <para>
+ If you need to enforce such limit, you can use 25.
+ </para>
+ <para>
+ Note: split groups may not be supported by all tools (even in the
+ Shadow toolsuite). You should not use this variable unless you really
+ need it.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/MD5_CRYPT_ENAB.xml b/man/login.defs.d/MD5_CRYPT_ENAB.xml
new file mode 100644
index 0000000..be9426e
--- /dev/null
+++ b/man/login.defs.d/MD5_CRYPT_ENAB.xml
@@ -0,0 +1,60 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>MD5_CRYPT_ENAB</option> (boolean)</term>
+ <listitem>
+ <para>
+ Indicate if passwords must be encrypted using the MD5-based
+ algorithm. If set to <replaceable>yes</replaceable>, new passwords
+ will be encrypted using the MD5-based algorithm compatible with the
+ one used by recent releases of FreeBSD. It supports passwords of
+ unlimited length and longer salt strings. Set to
+ <replaceable>no</replaceable> if you need to copy encrypted
+ passwords to other systems which don't understand the new algorithm.
+ Default is <replaceable>no</replaceable>.
+ </para>
+ <para>
+ This variable is superseded by the <option>ENCRYPT_METHOD</option>
+ variable or by any command line option used to configure the
+ encryption algorithm.
+ </para>
+ <para>
+ This variable is deprecated. You should use
+ <option>ENCRYPT_METHOD</option>.
+ </para>
+ <para condition="pam">
+ Note: This only affect the generation of group passwords.
+ The generation of user passwords is done by PAM and subject to the
+ PAM configuration. It is recommended to set this variable
+ consistently with the PAM configuration.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/MOTD_FILE.xml b/man/login.defs.d/MOTD_FILE.xml
new file mode 100644
index 0000000..b472e71
--- /dev/null
+++ b/man/login.defs.d/MOTD_FILE.xml
@@ -0,0 +1,39 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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 condition="no_pam">
+ <term><option>MOTD_FILE</option> (string)</term>
+ <listitem>
+ <para>
+ If defined, ":" delimited list of "message of the day" files to be
+ displayed upon login.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/NOLOGINS_FILE.xml b/man/login.defs.d/NOLOGINS_FILE.xml
new file mode 100644
index 0000000..fde79f5
--- /dev/null
+++ b/man/login.defs.d/NOLOGINS_FILE.xml
@@ -0,0 +1,40 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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 condition="no_pam">
+ <term><option>NOLOGINS_FILE</option> (string)</term>
+ <listitem>
+ <para>
+ If defined, name of file whose presence will inhibit non-root
+ logins. The contents of this file should be a message indicating
+ why logins are inhibited.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/OBSCURE_CHECKS_ENAB.xml b/man/login.defs.d/OBSCURE_CHECKS_ENAB.xml
new file mode 100644
index 0000000..5eb1d65
--- /dev/null
+++ b/man/login.defs.d/OBSCURE_CHECKS_ENAB.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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 condition="no_pam">
+ <term><option>OBSCURE_CHECKS_ENAB</option> (boolean)</term>
+ <listitem>
+ <para>
+ Enable additional checks upon password changes.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/PASS_ALWAYS_WARN.xml b/man/login.defs.d/PASS_ALWAYS_WARN.xml
new file mode 100644
index 0000000..8687488
--- /dev/null
+++ b/man/login.defs.d/PASS_ALWAYS_WARN.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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 condition="no_pam">
+ <term><option>PASS_ALWAYS_WARN</option> (boolean)</term>
+ <listitem>
+ <para>
+ Warn about weak passwords (but still allow them) if you are root.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/PASS_CHANGE_TRIES.xml b/man/login.defs.d/PASS_CHANGE_TRIES.xml
new file mode 100644
index 0000000..f6f6d1d
--- /dev/null
+++ b/man/login.defs.d/PASS_CHANGE_TRIES.xml
@@ -0,0 +1,39 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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 condition="no_pam">
+ <term><option>PASS_CHANGE_TRIES</option> (number)</term>
+ <listitem>
+ <para>
+ Maximum number of attempts to change password if rejected (too
+ easy).
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/PASS_MAX_DAYS.xml b/man/login.defs.d/PASS_MAX_DAYS.xml
new file mode 100644
index 0000000..7df51a2
--- /dev/null
+++ b/man/login.defs.d/PASS_MAX_DAYS.xml
@@ -0,0 +1,40 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>PASS_MAX_DAYS</option> (number)</term>
+ <listitem>
+ <para>
+ The maximum number of days a password may be used. If the password
+ is older than this, a password change will be forced. If not
+ specified, -1 will be assumed (which disables the restriction).
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/PASS_MAX_LEN.xml b/man/login.defs.d/PASS_MAX_LEN.xml
new file mode 100644
index 0000000..2b9e024
--- /dev/null
+++ b/man/login.defs.d/PASS_MAX_LEN.xml
@@ -0,0 +1,43 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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 condition="no_pam">
+ <term><option>PASS_MAX_LEN</option> (number)</term>
+ <term><option>PASS_MIN_LEN</option> (number)</term>
+ <listitem>
+ <para>
+ Number of significant characters in the password for crypt().
+ <option>PASS_MAX_LEN</option> is 8 by default. Don't change unless
+ your crypt() is better. This is ignored if
+ <option>MD5_CRYPT_ENAB</option> set to
+ <replaceable>yes</replaceable>.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/PASS_MIN_DAYS.xml b/man/login.defs.d/PASS_MIN_DAYS.xml
new file mode 100644
index 0000000..14f68eb
--- /dev/null
+++ b/man/login.defs.d/PASS_MIN_DAYS.xml
@@ -0,0 +1,40 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>PASS_MIN_DAYS</option> (number)</term>
+ <listitem>
+ <para>
+ The minimum number of days allowed between password changes. Any
+ password changes attempted sooner than this will be rejected. If not
+ specified, -1 will be assumed (which disables the restriction).
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/PASS_WARN_AGE.xml b/man/login.defs.d/PASS_WARN_AGE.xml
new file mode 100644
index 0000000..fc03f1d
--- /dev/null
+++ b/man/login.defs.d/PASS_WARN_AGE.xml
@@ -0,0 +1,41 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>PASS_WARN_AGE</option> (number)</term>
+ <listitem>
+ <para>
+ The number of days warning given before a password expires. A zero
+ means warning is given only upon the day of expiration, a negative
+ value means no warning is given. If not specified, no warning will
+ be provided.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/PORTTIME_CHECKS_ENAB.xml b/man/login.defs.d/PORTTIME_CHECKS_ENAB.xml
new file mode 100644
index 0000000..0ba7c3a
--- /dev/null
+++ b/man/login.defs.d/PORTTIME_CHECKS_ENAB.xml
@@ -0,0 +1,39 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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 condition="no_pam">
+ <term><option>PORTTIME_CHECKS_ENAB</option> (boolean)</term>
+ <listitem>
+ <para>
+ Enable checking of time restrictions specified in
+ <filename>/etc/porttime</filename>.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/QUOTAS_ENAB.xml b/man/login.defs.d/QUOTAS_ENAB.xml
new file mode 100644
index 0000000..2a68b21
--- /dev/null
+++ b/man/login.defs.d/QUOTAS_ENAB.xml
@@ -0,0 +1,40 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 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.
+-->
+<varlistentry condition="no_pam">
+ <term><option>QUOTAS_ENAB</option> (boolean)</term>
+ <listitem>
+ <para>
+ Enable setting of resource limits from
+ <filename>/etc/limits</filename> and ulimit, umask, and niceness
+ from the user's passwd gecos field.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml b/man/login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml
new file mode 100644
index 0000000..0755e69
--- /dev/null
+++ b/man/login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml
@@ -0,0 +1,69 @@
+<!--
+ Copyright (c) 2007 - 2008, 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 condition="sha_crypt">
+ <term><option>SHA_CRYPT_MIN_ROUNDS</option> (number)</term>
+ <term><option>SHA_CRYPT_MAX_ROUNDS</option> (number)</term>
+ <listitem>
+ <para>
+ When <option>ENCRYPT_METHOD</option> is set to
+ <replaceable>SHA256</replaceable> or
+ <replaceable>SHA512</replaceable>, this defines the number of SHA
+ rounds used by the encryption algorithm by default (when the number
+ of rounds is not specified on the command line).
+ </para>
+ <para>
+ With a lot of rounds, it is more difficult to brute forcing the
+ password. But note also that more CPU resources will be needed to
+ authenticate users.
+ </para>
+ <para>
+ If not specified, the libc will choose the default number of rounds
+ (5000).
+ </para>
+ <para>
+ The values must be inside the 1000-999,999,999 range.
+ </para>
+ <para>
+ If only one of the <option>SHA_CRYPT_MIN_ROUNDS</option> or
+ <option>SHA_CRYPT_MAX_ROUNDS</option> values is set, then this value
+ will be used.
+ </para>
+ <para>
+ If <option>SHA_CRYPT_MIN_ROUNDS</option> &gt;
+ <option>SHA_CRYPT_MAX_ROUNDS</option>, the highest value will be
+ used.
+ </para>
+ <para condition="pam">
+ Note: This only affect the generation of group passwords.
+ The generation of user passwords is done by PAM and subject to the
+ PAM configuration. It is recommended to set this variable
+ consistently with the PAM configuration.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/SUB_GID_COUNT.xml b/man/login.defs.d/SUB_GID_COUNT.xml
new file mode 100644
index 0000000..93fe742
--- /dev/null
+++ b/man/login.defs.d/SUB_GID_COUNT.xml
@@ -0,0 +1,48 @@
+<!--
+ Copyright (c) 2013, Eric W. Biederman
+ 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 condition="subids">
+ <term><option>SUB_GID_MIN</option> (number)</term>
+ <term><option>SUB_GID_MAX</option> (number)</term>
+ <term><option>SUB_GID_COUNT</option> (number)</term>
+ <listitem>
+ <para>
+ If <filename>/etc/subuid</filename> exists, the commands
+ <command>useradd</command> and <command>newusers</command> (unless
+ the user already have subordinate group IDs) allocate
+ <option>SUB_GID_COUNT</option> unused group IDs from the range
+ <option>SUB_GID_MIN</option> to <option>SUB_GID_MAX</option> for each
+ new user.
+ </para>
+ <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 65536.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/SUB_UID_COUNT.xml b/man/login.defs.d/SUB_UID_COUNT.xml
new file mode 100644
index 0000000..516417b
--- /dev/null
+++ b/man/login.defs.d/SUB_UID_COUNT.xml
@@ -0,0 +1,48 @@
+<!--
+ Copyright (c) 2013, Eric W. Biederman
+ 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 condition="subids">
+ <term><option>SUB_UID_MIN</option> (number)</term>
+ <term><option>SUB_UID_MAX</option> (number)</term>
+ <term><option>SUB_UID_COUNT</option> (number)</term>
+ <listitem>
+ <para>
+ If <filename>/etc/subuid</filename> exists, the commands
+ <command>useradd</command> and <command>newusers</command> (unless
+ the user already have subordinate user IDs) allocate
+ <option>SUB_UID_COUNT</option> unused user IDs from the range
+ <option>SUB_UID_MIN</option> to <option>SUB_UID_MAX</option> for each
+ new user.
+ </para>
+ <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 65536.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/SULOG_FILE.xml b/man/login.defs.d/SULOG_FILE.xml
new file mode 100644
index 0000000..d5d07c8
--- /dev/null
+++ b/man/login.defs.d/SULOG_FILE.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>SULOG_FILE</option> (string)</term>
+ <listitem>
+ <para>
+ If defined, all su activity is logged to this file.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/SU_NAME.xml b/man/login.defs.d/SU_NAME.xml
new file mode 100644
index 0000000..0a9dfdb
--- /dev/null
+++ b/man/login.defs.d/SU_NAME.xml
@@ -0,0 +1,41 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>SU_NAME</option> (string)</term>
+ <listitem>
+ <para>
+ If defined, the command name to display when running "su -". For
+ example, if this is defined as "su" then a "ps" will display the
+ command is "-su". If not defined, then "ps" would display the name
+ of the shell actually being run, e.g. something like "-sh".
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/SU_WHEEL_ONLY.xml b/man/login.defs.d/SU_WHEEL_ONLY.xml
new file mode 100644
index 0000000..7b8e0bc
--- /dev/null
+++ b/man/login.defs.d/SU_WHEEL_ONLY.xml
@@ -0,0 +1,44 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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.
+-->
+<!-- TODO: TBC -->
+<varlistentry condition="no_pam">
+ <term><option>SU_WHEEL_ONLY</option> (boolean)</term>
+ <listitem>
+ <para>
+ If <replaceable>yes</replaceable>, the user must be listed as a
+ member of the first gid 0 group in <filename>/etc/group</filename>
+ (called <replaceable>root</replaceable> on most Linux systems) to be
+ able to <command>su</command> to uid 0 accounts. If the group
+ doesn't exist or is empty, no one will be able to
+ <command>su</command> to uid 0.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/SYSLOG_SG_ENAB.xml b/man/login.defs.d/SYSLOG_SG_ENAB.xml
new file mode 100644
index 0000000..0705537
--- /dev/null
+++ b/man/login.defs.d/SYSLOG_SG_ENAB.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>SYSLOG_SG_ENAB</option> (boolean)</term>
+ <listitem>
+ <para>
+ Enable "syslog" logging of <command>sg</command> activity.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/SYSLOG_SU_ENAB.xml b/man/login.defs.d/SYSLOG_SU_ENAB.xml
new file mode 100644
index 0000000..af94a23
--- /dev/null
+++ b/man/login.defs.d/SYSLOG_SU_ENAB.xml
@@ -0,0 +1,39 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>SYSLOG_SU_ENAB</option> (boolean)</term>
+ <listitem>
+ <para>
+ Enable "syslog" logging of <command>su</command> activity - in
+ addition to sulog file logging.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/SYS_GID_MAX.xml b/man/login.defs.d/SYS_GID_MAX.xml
new file mode 100644
index 0000000..4a9ed28
--- /dev/null
+++ b/man/login.defs.d/SYS_GID_MAX.xml
@@ -0,0 +1,43 @@
+<!--
+ Copyright (c) 2007 - 2008, 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>SYS_GID_MAX</option> (number)</term>
+ <term><option>SYS_GID_MIN</option> (number)</term>
+ <listitem>
+ <para>
+ Range of group IDs used for the creation of system groups by
+ <command>useradd</command>, <command>groupadd</command>, or
+ <command>newusers</command>.
+ </para>
+ <para>
+ The default value for <option>SYS_GID_MIN</option> (resp.
+ <option>SYS_GID_MAX</option>) is 101 (resp. <option>GID_MIN</option>-1).
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/SYS_UID_MAX.xml b/man/login.defs.d/SYS_UID_MAX.xml
new file mode 100644
index 0000000..3ca6cee
--- /dev/null
+++ b/man/login.defs.d/SYS_UID_MAX.xml
@@ -0,0 +1,42 @@
+<!--
+ Copyright (c) 2007 - 2008, 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>SYS_UID_MAX</option> (number)</term>
+ <term><option>SYS_UID_MIN</option> (number)</term>
+ <listitem>
+ <para>
+ Range of user IDs used for the creation of system users by
+ <command>useradd</command> or <command>newusers</command>.
+ </para>
+ <para>
+ The default value for <option>SYS_UID_MIN</option> (resp.
+ <option>SYS_UID_MAX</option>) is 101 (resp. <option>UID_MIN</option>-1).
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/TCB_AUTH_GROUP.xml b/man/login.defs.d/TCB_AUTH_GROUP.xml
new file mode 100644
index 0000000..f9c9f72
--- /dev/null
+++ b/man/login.defs.d/TCB_AUTH_GROUP.xml
@@ -0,0 +1,37 @@
+<!--
+ Copyright (c) 2010, Pawel Hajdan
+ 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 condition="tcb">
+ <term><option>TCB_AUTH_GROUP</option> (boolean)</term>
+ <listitem>
+ <para>
+ If <replaceable>yes</replaceable>, newly created tcb shadow files
+ will be group owned by the <replaceable>auth</replaceable> group.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/TCB_SYMLINKS.xml b/man/login.defs.d/TCB_SYMLINKS.xml
new file mode 100644
index 0000000..76b34fb
--- /dev/null
+++ b/man/login.defs.d/TCB_SYMLINKS.xml
@@ -0,0 +1,53 @@
+<!--
+ Copyright (c) 2010, Pawel Hajdan
+ 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 condition="tcb">
+ <term><option>TCB_SYMLINKS</option> (boolean)</term>
+ <listitem>
+ <para>
+ If <replaceable>yes</replaceable>, the location of the user tcb
+ directory to be created will not be automatically set to /etc/tcb/user,
+ but will be computed depending on the UID of the user, according to
+ the following algorithm:
+ <programlisting>
+if ( UID is less than 1000) {
+ use /etc/tcb/user
+} else if ( UID is less than 1000000) {
+ kilos = UID / 1000
+ use /etc/tcb/:kilos/user
+ make symlink /etc/tcb/user to the above directory
+} else {
+ megas = UID / 1000000
+ kilos = ( UID / megas * 1000000 ) / 1000
+ use /etc/tcb/:megas/:kilos/user
+ make symlink /etc/tcb/user to the above directory
+}
+ </programlisting>
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/TTYGROUP.xml b/man/login.defs.d/TTYGROUP.xml
new file mode 100644
index 0000000..474f31b
--- /dev/null
+++ b/man/login.defs.d/TTYGROUP.xml
@@ -0,0 +1,56 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>TTYGROUP</option> (string)</term>
+ <term><option>TTYPERM</option> (string)</term>
+ <listitem>
+ <para>
+ The terminal permissions: the login tty will be owned by the
+ <option>TTYGROUP</option> group, and the permissions will be set to
+ <option>TTYPERM</option>.
+ </para>
+ <para>
+ By default, the ownership of the terminal is set to the user's
+ primary group and the permissions are set to
+ <replaceable>0600</replaceable>.
+ </para>
+ <para>
+ <option>TTYGROUP</option> can be either the name of a group or a
+ numeric group identifier.
+ </para>
+ <para>
+ If you have a <command>write</command> program which is "setgid" to
+ a special group which owns the terminals, define TTYGROUP to the
+ group number and TTYPERM to 0620. Otherwise leave TTYGROUP
+ commented out and assign TTYPERM to either 622 or 600.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/TTYTYPE_FILE.xml b/man/login.defs.d/TTYTYPE_FILE.xml
new file mode 100644
index 0000000..f3e8509
--- /dev/null
+++ b/man/login.defs.d/TTYTYPE_FILE.xml
@@ -0,0 +1,39 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>TTYTYPE_FILE</option> (string)</term>
+ <listitem>
+ <para>
+ If defined, file which maps tty line to TERM environment parameter.
+ Each line of the file is in a format something like "vt100 tty01".
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/UID_MAX.xml b/man/login.defs.d/UID_MAX.xml
new file mode 100644
index 0000000..77cf41f
--- /dev/null
+++ b/man/login.defs.d/UID_MAX.xml
@@ -0,0 +1,44 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>UID_MAX</option> (number)</term>
+ <term><option>UID_MIN</option> (number)</term>
+ <listitem>
+ <para>
+ Range of user IDs used for the creation of regular users by
+ <command>useradd</command> or <command>newusers</command>.
+ </para>
+ <para>
+ The default value for <option>UID_MIN</option> (resp.
+ <option>UID_MAX</option>) is 1000 (resp. 60000).
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/ULIMIT.xml b/man/login.defs.d/ULIMIT.xml
new file mode 100644
index 0000000..3cf4267
--- /dev/null
+++ b/man/login.defs.d/ULIMIT.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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 condition="no_pam">
+ <term><option>ULIMIT</option> (number)</term>
+ <listitem>
+ <para>
+ Default <command>ulimit</command> value.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/UMASK.xml b/man/login.defs.d/UMASK.xml
new file mode 100644
index 0000000..0f061db
--- /dev/null
+++ b/man/login.defs.d/UMASK.xml
@@ -0,0 +1,56 @@
+<!--
+ 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>UMASK</option> (number)</term>
+ <listitem>
+ <para>
+ The file mode creation mask is initialized to this value. If not
+ specified, the mask will be initialized to 022.
+ </para>
+ <para>
+ <command>useradd</command> and <command>newusers</command> use this
+ 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
+ umask. Note that this mask can be overridden by the user's GECOS
+ line (if <option>QUOTAS_ENAB</option> is set) or by the
+ specification of a limit with the <emphasis>K</emphasis> identifier
+ in <citerefentry><refentrytitle>limits</refentrytitle>
+ <manvolnum>5</manvolnum></citerefentry>.
+ </para>
+ <para condition="pam">
+ It is also used by <command>pam_umask</command> as the default umask
+ value.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/USERDEL_CMD.xml b/man/login.defs.d/USERDEL_CMD.xml
new file mode 100644
index 0000000..40800b2
--- /dev/null
+++ b/man/login.defs.d/USERDEL_CMD.xml
@@ -0,0 +1,72 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ 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>USERDEL_CMD</option> (string)</term>
+ <listitem>
+ <para>
+ If defined, this command is run when removing a user. It should
+ remove any at/cron/print jobs etc. owned by the user to be removed
+ (passed as the first argument).
+ </para>
+ <para>
+ The return code of the script is not taken into account.
+ </para>
+ <para>
+ Here is an example script, which removes the user's
+ cron, at and print jobs:
+ <programlisting>
+#! /bin/sh
+
+# Check for the required argument.
+if [ $# != 1 ]; then
+ echo "Usage: $0 username"
+ exit 1
+fi
+
+# Remove cron jobs.
+crontab -r -u $1
+
+# Remove at jobs.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR -name "[^.]*" -type f -user $1 -delete \;
+
+# Remove print jobs.
+lprm $1
+
+# All done.
+exit 0
+ </programlisting>
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/USERGROUPS_ENAB.xml b/man/login.defs.d/USERGROUPS_ENAB.xml
new file mode 100644
index 0000000..daa8892
--- /dev/null
+++ b/man/login.defs.d/USERGROUPS_ENAB.xml
@@ -0,0 +1,46 @@
+<!--
+ Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ Copyright (c) 1991 - 1993, Chip Rosenthal
+ Copyright (c) 2007 - 2008, 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>USERGROUPS_ENAB</option> (boolean)</term>
+ <listitem>
+ <para condition="no_pam">
+ Enable setting of the umask group bits to be the same as owner bits
+ (examples: 022 -> 002, 077 -> 007) for non-root users, if the uid is
+ the same as gid, and username is the same as the primary group name.
+ </para>
+ <para>
+ If set to <replaceable>yes</replaceable>, <command>userdel</command>
+ will remove the user's group if it contains no more members, and
+ <command>useradd</command> will create by default a group with the
+ name of the user.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/USE_TCB.xml b/man/login.defs.d/USE_TCB.xml
new file mode 100644
index 0000000..6fbe4d9
--- /dev/null
+++ b/man/login.defs.d/USE_TCB.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (c) 2010, Pawel Hajdan
+ 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 condition="tcb">
+ <term><option>USE_TCB</option> (boolean)</term>
+ <listitem>
+ <para>
+ If <replaceable>yes</replaceable>, the <citerefentry>
+ <refentrytitle>tcb</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+ password shadowing scheme will be used.
+ </para>
+ </listitem>
+</varlistentry>
diff --git a/man/logoutd.8.xml b/man/logoutd.8.xml
new file mode 100644
index 0000000..13b1337
--- /dev/null
+++ b/man/logoutd.8.xml
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1991 , Julianne Frances Haugh
+ Copyright (c) 2007 - 2008, 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='logoutd.8'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1991</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>logoutd</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>logoutd</refname>
+ <refpurpose>enforce login time restrictions</refpurpose>
+ </refnamediv>
+ <!-- body begins here -->
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>logoutd</command>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ <command>logoutd</command> enforces the login time and port
+ restrictions specified in <filename>/etc/porttime</filename>.
+ <command>logoutd</command> should be started from
+ <filename>/etc/rc</filename>. The <filename>/var/run/utmp</filename>
+ file is scanned periodically and each user name is checked to see if
+ the named user is permitted on the named port at the current time.
+ Any login session which is violating the restrictions in
+ <filename>/etc/porttime</filename> is terminated.
+ </para>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/porttime</filename></term>
+ <listitem>
+ <para>File containing port access.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/var/run/utmp</filename></term>
+ <listitem>
+ <para>List of current login sessions.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+</refentry>
diff --git a/man/man1/chage.1 b/man/man1/chage.1
new file mode 100644
index 0000000..b4dc105
--- /dev/null
+++ b/man/man1/chage.1
@@ -0,0 +1,189 @@
+'\" t
+.\" Title: chage
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: User Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "CHAGE" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+chage \- change user password expiry information
+.SH "SYNOPSIS"
+.HP \w'\fBchage\fR\ 'u
+\fBchage\fR [\fIoptions\fR] \fILOGIN\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBchage\fR
+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\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBchage\fR
+command are:
+.PP
+\fB\-d\fR, \fB\-\-lastday\fR\ \&\fILAST_DAY\fR
+.RS 4
+Set the number of days since January 1st, 1970 when the password was last changed\&. The date may also be expressed in the format YYYY\-MM\-DD (or the format more commonly used in your area)\&.
+.RE
+.PP
+\fB\-E\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+Set the date or number of days since January 1, 1970 on which the user\*(Aqs account will no longer be accessible\&. The date may also be expressed in the format YYYY\-MM\-DD (or the format more commonly used in your area)\&. A user whose account is locked must contact the system administrator before being able to use the system again\&.
+.sp
+Passing the number
+\fI\-1\fR
+as the
+\fIEXPIRE_DATE\fR
+will remove an account expiration date\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-i\fR, \fB\-\-iso8601\fR
+.RS 4
+When printing dates, use YYYY\-MM\-DD format\&.
+.RE
+.PP
+\fB\-I\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+Set the number of days of inactivity after a password has expired before the account is locked\&. The
+\fIINACTIVE\fR
+option is the number of days of inactivity\&. A user whose account is locked must contact the system administrator before being able to use the system again\&.
+.sp
+Passing the number
+\fI\-1\fR
+as the
+\fIINACTIVE\fR
+will remove an account\*(Aqs inactivity\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-list\fR
+.RS 4
+Show account aging information\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-mindays\fR\ \&\fIMIN_DAYS\fR
+.RS 4
+Set the minimum number of days between password changes to
+\fIMIN_DAYS\fR\&. A value of zero for this field indicates that the user may change their password at any time\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-maxdays\fR\ \&\fIMAX_DAYS\fR
+.RS 4
+Set the maximum number of days during which a password is valid\&. When
+\fIMAX_DAYS\fR
+plus
+\fILAST_DAY\fR
+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
+\fB\-W\fR
+option, which provides the user with advance warning\&.
+.sp
+Passing the number
+\fI\-1\fR
+as
+\fIMAX_DAYS\fR
+will remove checking a password\*(Aqs validity\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-W\fR, \fB\-\-warndays\fR\ \&\fIWARN_DAYS\fR
+.RS 4
+Set the number of days of warning before a password change is required\&. The
+\fIWARN_DAYS\fR
+option is the number of days prior to the password expiring that a user will be warned their password is about to expire\&.
+.RE
+.PP
+If none of the options are selected,
+\fBchage\fR
+operates in an interactive fashion, prompting the user with the current values for all of the fields\&. Enter the new value to change the field, or leave the line blank to use the current value\&. The current value is displayed between a pair of
+\fI[ ]\fR
+marks\&.
+.SH "NOTE"
+.PP
+The
+\fBchage\fR
+program requires a shadow password file to be available\&.
+.PP
+The
+\fBchage\fR
+command is restricted to the root user, except for the
+\fB\-l\fR
+option, which may be used by an unprivileged user to determine when their password or account is due to expire\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.SH "FILES"
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.SH "EXIT VALUES"
+.PP
+The
+\fBchage\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+permission denied
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI15\fR
+.RS 4
+can\*(Aqt find the shadow password file
+.RE
+.SH "SEE ALSO"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/man1/chfn.1 b/man/man1/chfn.1
new file mode 100644
index 0000000..95d88be
--- /dev/null
+++ b/man/man1/chfn.1
@@ -0,0 +1,163 @@
+'\" t
+.\" Title: chfn
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: User Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "CHFN" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+chfn \- change real user name and information
+.SH "SYNOPSIS"
+.HP \w'\fBchfn\fR\ 'u
+\fBchfn\fR [\fIoptions\fR] [\fILOGIN\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBchfn\fR
+command changes user fullname, office room number, office phone number, and home phone number information for a user\*(Aqs account\&. This information is typically printed by
+\fBfinger\fR(1)
+and similar programs\&. A normal user may only change the fields for her own account, subject to the restrictions in
+/etc/login\&.defs\&. (The default configuration is to prevent users from changing their fullname\&.) The superuser may change any field for any account\&. Additionally, only the superuser may use the
+\fB\-o\fR
+option to change the undefined portions of the GECOS field\&.
+.PP
+These fields must not contain any colons\&. Except for the
+\fIother\fR
+field, they should not contain any comma or equal sign\&. It is also recommended to avoid non\-US\-ASCII characters, but this is only enforced for the phone numbers\&. The
+\fIother\fR
+field is used to store accounting information used by other applications\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBchfn\fR
+command are:
+.PP
+\fB\-f\fR, \fB\-\-full\-name\fR\ \&\fIFULL_NAME\fR
+.RS 4
+Change the user\*(Aqs full name\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-home\-phone\fR\ \&\fIHOME_PHONE\fR
+.RS 4
+Change the user\*(Aqs home phone number\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-other\fR\ \&\fIOTHER\fR
+.RS 4
+Change the user\*(Aqs other GECOS information\&. This field is used to store accounting information used by other applications, and can be changed only by a superuser\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-room\fR\ \&\fIROOM_NUMBER\fR
+.RS 4
+Change the user\*(Aqs room number\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-work\-phone\fR\ \&\fIWORK_PHONE\fR
+.RS 4
+Change the user\*(Aqs office phone number\&.
+.RE
+.PP
+If none of the options are selected,
+\fBchfn\fR
+operates in an interactive fashion, prompting the user with the current values for all of the fields\&. Enter the new value to change the field, or leave the line blank to use the current value\&. The current value is displayed between a pair of
+\fB[ ]\fR
+marks\&. Without options,
+\fBchfn\fR
+prompts for the current user account\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHFN_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchfn\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCHFN_RESTRICT\fR (string)
+.RS 4
+This parameter specifies which values in the
+\fIgecos\fR
+field of the
+/etc/passwd
+file may be changed by regular users using the
+\fBchfn\fR
+program\&. It can be any combination of letters
+\fIf\fR,
+\fIr\fR,
+\fIw\fR,
+\fIh\fR, for Full name, Room number, Work phone, and Home phone, respectively\&. For backward compatibility,
+\fIyes\fR
+is equivalent to
+\fIrwh\fR
+and
+\fIno\fR
+is equivalent to
+\fIfrwh\fR\&. If not specified, only the superuser can make any changes\&. The most restrictive setting is better achieved by not installing
+\fBchfn\fR
+SUID\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will not be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.SH "FILES"
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBchsh\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/man1/chsh.1 b/man/man1/chsh.1
new file mode 100644
index 0000000..efa216f
--- /dev/null
+++ b/man/man1/chsh.1
@@ -0,0 +1,121 @@
+'\" t
+.\" Title: chsh
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: User Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "CHSH" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+chsh \- change login shell
+.SH "SYNOPSIS"
+.HP \w'\fBchsh\fR\ 'u
+\fBchsh\fR [\fIoptions\fR] [\fILOGIN\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBchsh\fR
+command changes the user login shell\&. This determines the name of the user\*(Aqs initial login command\&. A normal user may only change the login shell for her own account; the superuser may change the login shell for any account\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBchsh\fR
+command are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+The name of the user\*(Aqs new login shell\&. Setting this field to blank causes the system to select the default login shell\&.
+.RE
+.PP
+If the
+\fB\-s\fR
+option is not selected,
+\fBchsh\fR
+operates in an interactive fashion, prompting the user with the current login shell\&. Enter the new value to change the shell, or leave the line blank to use the current one\&. The current shell is displayed between a pair of
+\fI[ ]\fR
+marks\&.
+.SH "NOTE"
+.PP
+The only restriction placed on the login shell is that the command name must be listed in
+/etc/shells, unless the invoker is the superuser, and then any value may be added\&. An account with a restricted login shell may not change her login shell\&. For this reason, placing
+/bin/rsh
+in
+/etc/shells
+is discouraged since accidentally changing to a restricted shell would prevent the user from ever changing her login shell back to its original value\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHSH_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchsh\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will not be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.SH "FILES"
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shells
+.RS 4
+List of valid login shells\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBchfn\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/man1/expiry.1 b/man/man1/expiry.1
new file mode 100644
index 0000000..a1fc96b
--- /dev/null
+++ b/man/man1/expiry.1
@@ -0,0 +1,74 @@
+'\" t
+.\" Title: expiry
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: User Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "EXPIRY" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+expiry \- check and enforce password expiration policy
+.SH "SYNOPSIS"
+.HP \w'\fBexpiry\fR\ 'u
+\fBexpiry\fR \fIoption\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBexpiry\fR
+command checks (\fB\-c\fR) the current password expiration and forces (\fB\-f\fR) changes when required\&. It is callable as a normal user command\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBexpiry\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-check\fR
+.RS 4
+Check the password expiration of the current user\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+Force a password change if the current user has an expired password\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.SH "FILES"
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/man1/gpasswd.1 b/man/man1/gpasswd.1
new file mode 100644
index 0000000..c80cfb1
--- /dev/null
+++ b/man/man1/gpasswd.1
@@ -0,0 +1,232 @@
+'\" t
+.\" Title: gpasswd
+.\" Author: Rafal Maszkowski
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: User Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "GPASSWD" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+gpasswd \- administer /etc/group and /etc/gshadow
+.SH "SYNOPSIS"
+.HP \w'\fBgpasswd\fR\ 'u
+\fBgpasswd\fR [\fIoption\fR] \fIgroup\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBgpasswd\fR
+command is used to administer
+/etc/group, and /etc/gshadow\&. Every group can have
+administrators,
+members and a password\&.
+.PP
+System administrators can use the
+\fB\-A\fR
+option to define group administrator(s) and the
+\fB\-M\fR
+option to define members\&. They have all rights of group administrators and members\&.
+.PP
+\fBgpasswd\fR
+called by
+a group administrator
+with a group name only prompts for the new password of the
+\fIgroup\fR\&.
+.PP
+If a password is set the members can still use
+\fBnewgrp\fR(1)
+without a password, and non\-members must supply the password\&.
+.SS "Notes about group passwords"
+.PP
+Group passwords are an inherent security problem since more than one person is permitted to know the password\&. However, groups are a useful tool for permitting co\-operation between different users\&.
+.SH "OPTIONS"
+.PP
+Except for the
+\fB\-A\fR
+and
+\fB\-M\fR
+options, the options cannot be combined\&.
+.PP
+The options which apply to the
+\fBgpasswd\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-add\fR\ \&\fIuser\fR
+.RS 4
+Add the
+\fIuser\fR
+to the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR\ \&\fIuser\fR
+.RS 4
+Remove the
+\fIuser\fR
+from the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-Q\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-remove\-password\fR
+.RS 4
+Remove the password from the named
+\fIgroup\fR\&. The group password will be empty\&. Only group members will be allowed to use
+\fBnewgrp\fR
+to join the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-restrict\fR
+.RS 4
+Restrict the access to the named
+\fIgroup\fR\&. The group password is set to "!"\&. Only group members with a password will be allowed to use
+\fBnewgrp\fR
+to join the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-A\fR, \fB\-\-administrators\fR\ \&\fIuser\fR,\&.\&.\&.
+.RS 4
+Set the list of administrative users\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-members\fR\ \&\fIuser\fR,\&.\&.\&.
+.RS 4
+Set the list of group members\&.
+.RE
+.SH "CAVEATS"
+.PP
+This tool only operates on the
+/etc/group
+and /etc/gshadow files\&.
+Thus you cannot change any NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999,999,999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Secure group account information\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBnewgrp\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBgrpck\fR(8),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/man1/groups.1 b/man/man1/groups.1
new file mode 100644
index 0000000..99312b8
--- /dev/null
+++ b/man/man1/groups.1
@@ -0,0 +1,64 @@
+'\" t
+.\" Title: groups
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: User Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "GROUPS" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+groups \- display current group names
+.SH "SYNOPSIS"
+.HP \w'\fBgroups\fR\ 'u
+\fBgroups\fR [\fIuser\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBgroups\fR
+command displays the current group names or ID values\&. If the value does not have a corresponding entry in
+/etc/group, the value will be displayed as the numerical group value\&. The optional
+\fIuser\fR
+parameter will display the groups for the named
+\fIuser\fR\&.
+.SH "NOTE"
+.PP
+Systems which do not support concurrent group sets will have the information from
+/etc/group
+reported\&. The user must use
+\fBnewgrp\fR
+or
+\fBsg\fR
+to change his current real and effective group ID\&.
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBnewgrp\fR(1),
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)\&.
diff --git a/man/man1/id.1 b/man/man1/id.1
new file mode 100644
index 0000000..6843c09
--- /dev/null
+++ b/man/man1/id.1
@@ -0,0 +1,60 @@
+'\" t
+.\" Title: id
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: User Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "ID" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+id \- display current user and group ID names
+.SH "SYNOPSIS"
+.HP \w'\fBid\fR\ 'u
+\fBid\fR [\-a]
+.SH "DESCRIPTION"
+.PP
+The
+\fBid\fR
+command displays the current real and effective user and group ID names or values\&. If the value does not have a corresponding entry in
+/etc/passwd
+or
+/etc/group, the value will be displayed without the corresponding name\&. The optional
+\fB\-a\fR
+flag will display the group set on systems which support multiple concurrent group membership\&.
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)
diff --git a/man/man1/login.1 b/man/man1/login.1
new file mode 100644
index 0000000..ccfacc5
--- /dev/null
+++ b/man/man1/login.1
@@ -0,0 +1,487 @@
+'\" t
+.\" Title: login
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: User Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "LOGIN" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+login \- begin session on the system
+.SH "SYNOPSIS"
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] [\-h\ \fIhost\fR] [\fIusername\fR] [\fIENV=VAR\fR...]
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] [\-h\ \fIhost\fR] \-f \fIusername\fR
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] \-r\ \fIhost\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBlogin\fR
+program is used to establish a new session with the system\&. It is normally invoked automatically by responding to the
+\fIlogin:\fR
+prompt on the user\*(Aqs terminal\&.
+\fBlogin\fR
+may be special to the shell and may not be invoked as a sub\-process\&. When called from a shell,
+\fBlogin\fR
+should be executed as
+\fBexec login\fR
+which will cause the user to exit from the current shell (and thus will prevent the new logged in user to return to the session of the caller)\&. Attempting to execute
+\fBlogin\fR
+from any shell but the login shell will produce an error message\&.
+.PP
+The user is then prompted for a password, where appropriate\&. Echoing is disabled to prevent revealing the password\&. Only a small number of password failures are permitted before
+\fBlogin\fR
+exits and the communications link is severed\&.
+.PP
+If password aging has been enabled for your account, you may be prompted for a new password before proceeding\&. You will be forced to provide your old password and the new password before continuing\&. Please refer to
+\fBpasswd\fR(1)
+for more information\&.
+.PP
+After a successful login, you will be informed of any system messages and the presence of mail\&. You may turn off the printing of the system message file,
+/etc/motd, by creating a zero\-length file
+\&.hushlogin
+in your login directory\&. The mail message will be one of "\fIYou have new mail\&.\fR", "\fIYou have mail\&.\fR", or "\fINo Mail\&.\fR" according to the condition of your mailbox\&.
+.PP
+Your user and group ID will be set according to their values in the
+/etc/passwd
+file\&. The value for
+\fB$HOME\fR,
+\fB$SHELL\fR,
+\fB$PATH\fR,
+\fB$LOGNAME\fR, and
+\fB$MAIL\fR
+are set according to the appropriate fields in the password entry\&. Ulimit, umask and nice values may also be set according to entries in the GECOS field\&.
+.PP
+On some installations, the environmental variable
+\fB$TERM\fR
+will be initialized to the terminal type on your tty line, as specified in
+/etc/ttytype\&.
+.PP
+An initialization script for your command interpreter may also be executed\&. Please see the appropriate manual section for more information on this function\&.
+.PP
+A subsystem login is indicated by the presence of a "*" as the first character of the login shell\&. The given home directory will be used as the root of a new file system which the user is actually logged into\&.
+.PP
+The
+\fBlogin\fR
+program is NOT responsible for removing users from the utmp file\&. It is the responsibility of
+\fBgetty\fR(8)
+and
+\fBinit\fR(8)
+to clean up apparent ownership of a terminal session\&. If you use
+\fBlogin\fR
+from the shell prompt without
+\fBexec\fR, the user you use will continue to appear to be logged in even after you log out of the "subsession"\&.
+.SH "OPTIONS"
+.PP
+\fB\-f\fR
+.RS 4
+Do not perform authentication, user is preauthenticated\&.
+.sp
+Note: In that case,
+\fIusername\fR
+is mandatory\&.
+.RE
+.PP
+\fB\-h\fR
+.RS 4
+Name of the remote host for this login\&.
+.RE
+.PP
+\fB\-p\fR
+.RS 4
+Preserve environment\&.
+.RE
+.PP
+\fB\-r\fR
+.RS 4
+Perform autologin protocol for rlogin\&.
+.RE
+.PP
+The
+\fB\-r\fR,
+\fB\-h\fR
+and
+\fB\-f\fR
+options are only used when
+\fBlogin\fR
+is invoked by root\&.
+.SH "CAVEATS"
+.PP
+This version of
+\fBlogin\fR
+has many compilation options, only some of which may be in use at any particular site\&.
+.PP
+The location of files is subject to differences in system configuration\&.
+.PP
+The
+\fBlogin\fR
+program is NOT responsible for removing users from the utmp file\&. It is the responsibility of
+\fBgetty\fR(8)
+and
+\fBinit\fR(8)
+to clean up apparent ownership of a terminal session\&. If you use
+\fBlogin\fR
+from the shell prompt without
+\fBexec\fR, the user you use will continue to appear to be logged in even after you log out of the "subsession"\&.
+.PP
+As with any program,
+\fBlogin\fR\*(Aqs appearance can be faked\&. If non\-trusted users have physical access to a machine, an attacker could use this to obtain the password of the next person coming to sit in front of the machine\&. Under Linux, the SAK mechanism can be used by users to initiate a trusted path and prevent this kind of attack\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+If defined, either full pathname of a file containing device names (one per line) or a ":" delimited list of device names\&. Root logins will be allowed only upon these devices\&.
+.sp
+If not defined, root will be allowed on any device\&.
+.sp
+The device should be specified without the /dev/ prefix\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\*(Aqs supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Indicate if login is allowed if we can\*(Aqt cd to the home directory\&. Default is no\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value is a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value is a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/sbin:/bin:/usr/sbin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+If this file exists and is readable, login environment will be read from it\&. Every line should be in the form name=value\&.
+.sp
+Lines starting with a # are treated as comment lines and ignored\&.
+.RE
+.PP
+\fBERASECHAR\fR (number)
+.RS 4
+Terminal ERASE character (\fI010\fR
+= backspace,
+\fI0177\fR
+= DEL)\&.
+.sp
+The value can be prefixed "0" for an octal value, or "0x" for an hexadecimal value\&.
+.RE
+.PP
+\fBFAIL_DELAY\fR (number)
+.RS 4
+Delay in seconds before being allowed another attempt after a login failure\&.
+.RE
+.PP
+\fBFAILLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of
+/var/log/faillog
+login failure info\&.
+.RE
+.PP
+\fBFAKE_SHELL\fR (string)
+.RS 4
+If set,
+\fBlogin\fR
+will execute this shell instead of the users\*(Aq shell specified in
+/etc/passwd\&.
+.RE
+.PP
+\fBFTMP_FILE\fR (string)
+.RS 4
+If defined, login failures will be logged in this file in a utmp format\&.
+.RE
+.PP
+\fBHUSHLOGIN_FILE\fR (string)
+.RS 4
+If defined, this file can inhibit all the usual chatter during the login sequence\&. If a full pathname is specified, then hushed mode will be enabled if the user\*(Aqs name or shell are found in the file\&. If not a full pathname, then hushed mode will be enabled if the file exists in the user\*(Aqs home directory\&.
+.RE
+.PP
+\fBISSUE_FILE\fR (string)
+.RS 4
+If defined, this file will be displayed before each login prompt\&.
+.RE
+.PP
+\fBKILLCHAR\fR (number)
+.RS 4
+Terminal KILL character (\fI025\fR
+= CTRL/U)\&.
+.sp
+The value can be prefixed "0" for an octal value, or "0x" for an hexadecimal value\&.
+.RE
+.PP
+\fBLASTLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of /var/log/lastlog login time info\&.
+.RE
+.PP
+\fBLOGIN_RETRIES\fR (number)
+.RS 4
+Maximum number of login retries in case of bad password\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will not be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.PP
+\fBLOGIN_TIMEOUT\fR (number)
+.RS 4
+Max time in seconds for login\&.
+.RE
+.PP
+\fBLOG_OK_LOGINS\fR (boolean)
+.RS 4
+Enable logging of successful logins\&.
+.RE
+.PP
+\fBLOG_UNKFAIL_ENAB\fR (boolean)
+.RS 4
+Enable display of unknown usernames when login failures are recorded\&.
+.sp
+Note: logging unknown usernames may be a security issue if an user enter her password instead of her login name\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+Enable checking and display of mailbox status upon login\&.
+.sp
+You should disable it if the shell startup files already check for mail ("mailx \-e" or equivalent)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMOTD_FILE\fR (string)
+.RS 4
+If defined, ":" delimited list of "message of the day" files to be displayed upon login\&.
+.RE
+.PP
+\fBNOLOGINS_FILE\fR (string)
+.RS 4
+If defined, name of file whose presence will inhibit non\-root logins\&. The contents of this file should be a message indicating why logins are inhibited\&.
+.RE
+.PP
+\fBPORTTIME_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable checking of time restrictions specified in
+/etc/porttime\&.
+.RE
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of resource limits from
+/etc/limits
+and ulimit, umask, and niceness from the user\*(Aqs passwd gecos field\&.
+.RE
+.PP
+\fBTTYGROUP\fR (string), \fBTTYPERM\fR (string)
+.RS 4
+The terminal permissions: the login tty will be owned by the
+\fBTTYGROUP\fR
+group, and the permissions will be set to
+\fBTTYPERM\fR\&.
+.sp
+By default, the ownership of the terminal is set to the user\*(Aqs primary group and the permissions are set to
+\fI0600\fR\&.
+.sp
+\fBTTYGROUP\fR
+can be either the name of a group or a numeric group identifier\&.
+.sp
+If you have a
+\fBwrite\fR
+program which is "setgid" to a special group which owns the terminals, define TTYGROUP to the group number and TTYPERM to 0620\&. Otherwise leave TTYGROUP commented out and assign TTYPERM to either 622 or 600\&.
+.RE
+.PP
+\fBTTYTYPE_FILE\fR (string)
+.RS 4
+If defined, file which maps tty line to TERM environment parameter\&. Each line of the file is in a format something like "vt100 tty01"\&.
+.RE
+.PP
+\fBULIMIT\fR (number)
+.RS 4
+Default
+\fBulimit\fR
+value\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create if
+\fBHOME_MODE\fR
+is not set\&.
+.sp
+It is also used by
+\fBlogin\fR
+to define users\*(Aq initial umask\&. Note that this mask can be overridden by the user\*(Aqs GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FILES"
+.PP
+/var/run/utmp
+.RS 4
+List of current login sessions\&.
+.RE
+.PP
+/var/log/wtmp
+.RS 4
+List of previous login sessions\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.PP
+/etc/motd
+.RS 4
+System message of the day file\&.
+.RE
+.PP
+/etc/nologin
+.RS 4
+Prevent non\-root users from logging in\&.
+.RE
+.PP
+/etc/ttytype
+.RS 4
+List of terminal types\&.
+.RE
+.PP
+$HOME/\&.hushlogin
+.RS 4
+Suppress printing of system messages\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBmail\fR(1),
+\fBpasswd\fR(1),
+\fBsh\fR(1),
+\fBsu\fR(1),
+\fBlogin.defs\fR(5),
+\fBnologin\fR(5),
+\fBpasswd\fR(5),
+\fBsecuretty\fR(5),
+\fBgetty\fR(8)\&.
diff --git a/man/man1/newgidmap.1 b/man/man1/newgidmap.1
new file mode 100644
index 0000000..30384f9
--- /dev/null
+++ b/man/man1/newgidmap.1
@@ -0,0 +1,97 @@
+'\" t
+.\" Title: newgidmap
+.\" Author: Eric Biederman
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: User Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "NEWGIDMAP" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+newgidmap \- set the gid mapping of a user namespace
+.SH "SYNOPSIS"
+.HP \w'\fBnewgidmap\fR\ 'u
+\fBnewgidmap\fR \fIpid\fR \fIgid\fR \fIlowergid\fR \fIcount\fR [\fIgid\fR\ \fIlowergid\fR\ \fIcount\fR\ [\ \fI\&.\&.\&.\fR\ ]]
+.SH "DESCRIPTION"
+.PP
+The
+\fBnewgidmap\fR
+sets
+/proc/[pid]/gid_map
+based on its command line arguments and the gids allowed in
+/etc/subgid\&. Note that the root user is not exempted from the requirement for a valid
+/etc/subgid
+entry\&.
+.PP
+After the pid argument,
+\fBnewgidmap\fR
+expects sets of 3 integers:
+.PP
+gid
+.RS 4
+Beginning of the range of GIDs inside the user namespace\&.
+.RE
+.PP
+lowergid
+.RS 4
+Beginning of the range of GIDs outside the user namespace\&.
+.RE
+.PP
+count
+.RS 4
+Length of the ranges (both inside and outside the user namespace)\&.
+.RE
+.PP
+\fBnewgidmap\fR
+verifies that the caller is the owner of the process indicated by
+\fBpid\fR
+and that for each of the above sets, each of the GIDs in the range [lowergid, lowergid+count] is allowed to the caller according to
+/etc/subgid
+before setting
+/proc/[pid]/gid_map\&.
+.PP
+Note that newgidmap may be used only once for a given process\&.
+.SH "OPTIONS"
+.PP
+There currently are no options to the
+\fBnewgidmap\fR
+command\&.
+.SH "FILES"
+.PP
+/etc/subgid
+.RS 4
+List of user\*(Aqs subordinate group IDs\&.
+.RE
+.PP
+/proc/[pid]/gid_map
+.RS 4
+Mapping of gids from one between user namespaces\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBlogin.defs\fR(5),
+\fBnewusers\fR(8),
+\fBsubgid\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/man1/newgrp.1 b/man/man1/newgrp.1
new file mode 100644
index 0000000..48414af
--- /dev/null
+++ b/man/man1/newgrp.1
@@ -0,0 +1,98 @@
+'\" t
+.\" Title: newgrp
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: User Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "NEWGRP" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+newgrp \- log in to a new group
+.SH "SYNOPSIS"
+.HP \w'\fBnewgrp\fR\ 'u
+\fBnewgrp\fR [\-] [\fIgroup\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBnewgrp\fR
+command is used to change the current group ID during a login session\&. If the optional
+\fB\-\fR
+flag is given, the user\*(Aqs environment will be reinitialized as though the user had logged in, otherwise the current environment, including current working directory, remains unchanged\&.
+.PP
+\fBnewgrp\fR
+changes the current real group ID to the named group, or to the default group listed in
+/etc/passwd
+if no group name is given\&.
+\fBnewgrp\fR
+also tries to add the group to the user groupset\&. If not root, the user will be prompted for a password if she does not have a password (in
+/etc/shadow
+if this user has an entry in the shadowed password file, or in
+/etc/passwd
+otherwise) and the group does, or if the user is not listed as a member and the group has a password\&. The user will be denied access if the group password is empty and the user is not listed as a member\&.
+.PP
+If there is an entry for this group in
+/etc/gshadow, then the list of members and the password of this group will be taken from this file, otherwise, the entry in
+/etc/group
+is considered\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "FILES"
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Secure group account information\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBsu\fR(1),
+\fBsg\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/man1/newuidmap.1 b/man/man1/newuidmap.1
new file mode 100644
index 0000000..75363d0
--- /dev/null
+++ b/man/man1/newuidmap.1
@@ -0,0 +1,97 @@
+'\" t
+.\" Title: newuidmap
+.\" Author: Eric Biederman
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: User Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "NEWUIDMAP" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+newuidmap \- set the uid mapping of a user namespace
+.SH "SYNOPSIS"
+.HP \w'\fBnewuidmap\fR\ 'u
+\fBnewuidmap\fR \fIpid\fR \fIuid\fR \fIloweruid\fR \fIcount\fR [\fIuid\fR\ \fIloweruid\fR\ \fIcount\fR\ [\ \fI\&.\&.\&.\fR\ ]]
+.SH "DESCRIPTION"
+.PP
+The
+\fBnewuidmap\fR
+sets
+/proc/[pid]/uid_map
+based on its command line arguments and the uids allowed in
+/etc/subuid\&. Note that the root user is not exempted from the requirement for a valid
+/etc/subuid
+entry\&.
+.PP
+After the pid argument,
+\fBnewuidmap\fR
+expects sets of 3 integers:
+.PP
+uid
+.RS 4
+Beginning of the range of UIDs inside the user namespace\&.
+.RE
+.PP
+loweruid
+.RS 4
+Beginning of the range of UIDs outside the user namespace\&.
+.RE
+.PP
+count
+.RS 4
+Length of the ranges (both inside and outside the user namespace)\&.
+.RE
+.PP
+\fBnewuidmap\fR
+verifies that the caller is the owner of the process indicated by
+\fBpid\fR
+and that for each of the above sets, each of the UIDs in the range [loweruid, loweruid+count] is allowed to the caller according to
+/etc/subuid
+before setting
+/proc/[pid]/uid_map\&.
+.PP
+Note that newuidmap may be used only once for a given process\&.
+.SH "OPTIONS"
+.PP
+There currently are no options to the
+\fBnewuidmap\fR
+command\&.
+.SH "FILES"
+.PP
+/etc/subuid
+.RS 4
+List of user\*(Aqs subordinate user IDs\&.
+.RE
+.PP
+/proc/[pid]/uid_map
+.RS 4
+Mapping of uids from one between user namespaces\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBlogin.defs\fR(5),
+\fBnewusers\fR(8),
+\fBsubuid\fR(5),
+\fBuseradd\fR(8),
+\fBusermod\fR(8),
+\fBuserdel\fR(8)\&.
diff --git a/man/man1/passwd.1 b/man/man1/passwd.1
new file mode 100644
index 0000000..aaef7e4
--- /dev/null
+++ b/man/man1/passwd.1
@@ -0,0 +1,365 @@
+'\" t
+.\" Title: passwd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: User Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "PASSWD" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+passwd \- change user password
+.SH "SYNOPSIS"
+.HP \w'\fBpasswd\fR\ 'u
+\fBpasswd\fR [\fIoptions\fR] [\fILOGIN\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBpasswd\fR
+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\&.
+\fBpasswd\fR
+also changes the account or associated password validity period\&.
+.SS "Password Changes"
+.PP
+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\&.
+.PP
+After the password has been entered, password aging information is checked to see if the user is permitted to change the password at this time\&. If not,
+\fBpasswd\fR
+refuses to change the password and exits\&.
+.PP
+The user is then prompted twice for a replacement password\&. The second entry is compared against the first and both are required to match in order for the password to be changed\&.
+.PP
+Then, the password is tested for complexity\&. As a general guideline, passwords should consist of 6 to 8 characters including one or more characters from each of the following sets:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+lower case alphabetics
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+digits 0 thru 9
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+punctuation marks
+.RE
+.PP
+Care must be taken not to include the system default erase or kill characters\&.
+\fBpasswd\fR
+will reject any password which is not suitably complex\&.
+.SS "Hints for user passwords"
+.PP
+The security of a password depends upon the strength of the encryption algorithm and the size of the key space\&. The legacy
+\fIUNIX\fR
+System encryption method is based on the NBS DES algorithm\&. More recent methods are now recommended (see
+\fBENCRYPT_METHOD\fR)\&. The size of the key space depends upon the randomness of the password which is selected\&.
+.PP
+Compromises in password security normally result from careless password selection or handling\&. For this reason, you should not select a password which appears in a dictionary or which must be written down\&. The password should also not be a proper name, your license number, birth date, or street address\&. Any of these may be used as guesses to violate system security\&.
+.PP
+You can find advice on how to choose a strong password on http://en\&.wikipedia\&.org/wiki/Password_strength
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBpasswd\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+This option can be used only with
+\fB\-S\fR
+and causes show status for all users\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR
+.RS 4
+Delete a user\*(Aqs password (make it empty)\&. This is a quick way to disable a password for an account\&. It will set the named account passwordless\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expire\fR
+.RS 4
+Immediately expire an account\*(Aqs password\&. This in effect can force a user to change their password at the user\*(Aqs next login\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-i\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+This option is used to disable an account after the password has been expired for a number of days\&. After a user account has had an expired password for
+\fIINACTIVE\fR
+days, the user may no longer sign on to the account\&.
+.RE
+.PP
+\fB\-k\fR, \fB\-\-keep\-tokens\fR
+.RS 4
+Indicate password change should be performed only for expired authentication tokens (passwords)\&. The user wishes to keep their non\-expired tokens as before\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\fR
+.RS 4
+Lock the password of the named account\&. This option disables a password by changing it to a value which matches no possible encrypted value (it adds a \(aa!\(aa at the beginning of the password)\&.
+.sp
+Note that this does not disable the account\&. The user may still be able to login using another authentication token (e\&.g\&. an SSH key)\&. To disable the account, administrators should use
+\fBusermod \-\-expiredate 1\fR
+(this set the account\*(Aqs expire date to Jan 2, 1970)\&.
+.sp
+Users with a locked password are not allowed to change their password\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-mindays\fR\ \&\fIMIN_DAYS\fR
+.RS 4
+Set the minimum number of days between password changes to
+\fIMIN_DAYS\fR\&. A value of zero for this field indicates that the user may change their password at any time\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Quiet mode\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-repository\fR\ \&\fIREPOSITORY\fR
+.RS 4
+change password in
+\fIREPOSITORY\fR
+repository
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-S\fR, \fB\-\-status\fR
+.RS 4
+Display account status information\&. The status information consists of 7 fields\&. The first field is the user\*(Aqs login name\&. The second field indicates if the user account has a locked password (L), has no password (NP), or has a usable password (P)\&. The third field gives the date of the last password change\&. The next four fields are the minimum age, maximum age, warning period, and inactivity period for the password\&. These ages are expressed in days\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-unlock\fR
+.RS 4
+Unlock the password of the named account\&. This option re\-enables a password by changing the password back to its previous value (to the value before using the
+\fB\-l\fR
+option)\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-warndays\fR\ \&\fIWARN_DAYS\fR
+.RS 4
+Set the number of days of warning before a password change is required\&. The
+\fIWARN_DAYS\fR
+option is the number of days prior to the password expiring that a user will be warned that their password is about to expire\&.
+.RE
+.PP
+\fB\-x\fR, \fB\-\-maxdays\fR\ \&\fIMAX_DAYS\fR
+.RS 4
+Set the maximum number of days a password remains valid\&. After
+\fIMAX_DAYS\fR, the password is required to be changed\&.
+.sp
+Passing the number
+\fI\-1\fR
+as
+\fIMAX_DAYS\fR
+will remove checking a password\*(Aqs validity\&.
+.RE
+.SH "CAVEATS"
+.PP
+Password complexity checking may vary from site to site\&. The user is urged to select a password as complex as he or she feels comfortable with\&.
+.PP
+Users may not be able to change their password on a system if NIS is enabled and they are not logged into the NIS server\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBOBSCURE_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable additional checks upon password changes\&.
+.RE
+.PP
+\fBPASS_ALWAYS_WARN\fR (boolean)
+.RS 4
+Warn about weak passwords (but still allow them) if you are root\&.
+.RE
+.PP
+\fBPASS_CHANGE_TRIES\fR (number)
+.RS 4
+Maximum number of attempts to change password if rejected (too easy)\&.
+.RE
+.PP
+\fBPASS_MAX_LEN\fR (number), \fBPASS_MIN_LEN\fR (number)
+.RS 4
+Number of significant characters in the password for crypt()\&.
+\fBPASS_MAX_LEN\fR
+is 8 by default\&. Don\*(Aqt change unless your crypt() is better\&. This is ignored if
+\fBMD5_CRYPT_ENAB\fR
+set to
+\fIyes\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999,999,999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FILES"
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "EXIT VALUES"
+.PP
+The
+\fBpasswd\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+permission denied
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid combination of options
+.RE
+.PP
+\fI3\fR
+.RS 4
+unexpected failure, nothing done
+.RE
+.PP
+\fI4\fR
+.RS 4
+unexpected failure,
+passwd
+file missing
+.RE
+.PP
+\fI5\fR
+.RS 4
+passwd
+file busy, try again
+.RE
+.PP
+\fI6\fR
+.RS 4
+invalid argument to option
+.RE
+.SH "SEE ALSO"
+.PP
+\fBchpasswd\fR(8),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBlogin.defs\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/man1/sg.1 b/man/man1/sg.1
new file mode 100644
index 0000000..e7d4ac4
--- /dev/null
+++ b/man/man1/sg.1
@@ -0,0 +1,97 @@
+'\" t
+.\" Title: sg
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: User Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "SG" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sg \- execute command as different group ID
+.SH "SYNOPSIS"
+.HP \w'\fBsg\fR\ 'u
+\fBsg\fR [\-] [group\ [\-c\ ]\ command]
+.SH "DESCRIPTION"
+.PP
+The
+\fBsg\fR
+command works similar to
+\fBnewgrp\fR
+but accepts a command\&. The command will be executed with the
+/bin/sh
+shell\&. With most shells you may run
+\fBsg\fR
+from, you need to enclose multi\-word commands in quotes\&. Another difference between
+\fBnewgrp\fR
+and
+\fBsg\fR
+is that some shells treat
+\fBnewgrp\fR
+specially, replacing themselves with a new instance of a shell that
+\fBnewgrp\fR
+creates\&. This doesn\*(Aqt happen with
+\fBsg\fR, so upon exit from a
+\fBsg\fR
+command you are returned to your previous group ID\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "FILES"
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Secure group account information\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBnewgrp\fR(1),
+\fBsu\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/man1/su.1 b/man/man1/su.1
new file mode 100644
index 0000000..7639e76
--- /dev/null
+++ b/man/man1/su.1
@@ -0,0 +1,448 @@
+'\" t
+.\" Title: su
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: User Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "SU" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+su \- change user ID or become superuser
+.SH "SYNOPSIS"
+.HP \w'\fBsu\fR\ 'u
+\fBsu\fR [\fIoptions\fR] [\fI\-\fR] [\fIusername\fR\ [\ \fIargs\fR\ ]]
+.SH "DESCRIPTION"
+.PP
+The
+\fBsu\fR
+command is used to become another user during a login session\&. Invoked without a
+\fBusername\fR,
+\fBsu\fR
+defaults to becoming the superuser\&. The
+\fB\-\fR
+option may be used to provide an environment similar to what the user would expect had the user logged in directly\&. The
+\fB\-c\fR
+option may be used to treat the next argument as a command by most shells\&.
+.PP
+Options are recognized everywhere in the argument list\&. You can use the
+\fB\-\-\fR
+argument to stop option parsing\&. The
+\fB\-\fR
+option is special: it is also recognized after
+\fB\-\-\fR, but has to be placed before
+\fBusername\fR\&.
+.PP
+The user will be prompted for a password, if appropriate\&. Invalid passwords will produce an error message\&. All attempts, both valid and invalid, are logged to detect abuse of the system\&.
+.PP
+The current environment is passed to the new shell\&. The value of
+\fB$PATH\fR
+is reset to
+/bin:/usr/bin
+for normal users, or
+/sbin:/bin:/usr/sbin:/usr/bin
+for the superuser\&. This may be changed with the
+\fBENV_PATH\fR
+and
+\fBENV_SUPATH\fR
+definitions in
+/etc/login\&.defs\&.
+.PP
+A subsystem login is indicated by the presence of a "*" as the first character of the login shell\&. The given home directory will be used as the root of a new file system which the user is actually logged into\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBsu\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-command\fR\ \&\fICOMMAND\fR
+.RS 4
+Specify a command that will be invoked by the shell using its
+\fB\-c\fR\&.
+.sp
+The executed command will have no controlling terminal\&. This option cannot be used to execute interactive programs which need a controlling TTY\&.
+.RE
+.PP
+\fB\-\fR, \fB\-l\fR, \fB\-\-login\fR
+.RS 4
+Provide an environment similar to what the user would expect had the user logged in directly\&.
+.sp
+When
+\fB\-\fR
+is used, it must be specified before any
+\fBusername\fR\&. For portability it is recommended to use it as last option, before any
+\fBusername\fR\&. The other forms (\fB\-l\fR
+and
+\fB\-\-login\fR) do not have this restriction\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+The shell that will be invoked\&.
+.sp
+The invoked shell is chosen from (highest priority first):
+.PP
+.RS 4
+The shell specified with \-\-shell\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-preserve\-environment\fR
+is used, the shell specified by the
+\fB$SHELL\fR
+environment variable\&.
+.RE
+.PP
+.RS 4
+The shell indicated in the
+/etc/passwd
+entry for the target user\&.
+.RE
+.PP
+.RS 4
+/bin/sh
+if a shell could not be found by any above method\&.
+.RE
+.sp
+If the target user has a restricted shell (i\&.e\&. the shell field of this user\*(Aqs entry in
+/etc/passwd
+is not listed in
+/etc/shells), then the
+\fB\-\-shell\fR
+option or the
+\fB$SHELL\fR
+environment variable won\*(Aqt be taken into account, unless
+\fBsu\fR
+is called by root\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-p\fR, \fB\-\-preserve\-environment\fR
+.RS 4
+Preserve the current environment, except for:
+.PP
+\fB$PATH\fR
+.RS 4
+reset according to the
+/etc/login\&.defs
+options
+\fBENV_PATH\fR
+or
+\fBENV_SUPATH\fR
+(see below);
+.RE
+.PP
+\fB$IFS\fR
+.RS 4
+reset to
+\(lq<space><tab><newline>\(rq, if it was set\&.
+.RE
+.sp
+If the target user has a restricted shell, this option has no effect (unless
+\fBsu\fR
+is called by root)\&.
+.sp
+Note that the default behavior for the environment is the following:
+.PP
+.RS 4
+The
+\fB$HOME\fR,
+\fB$SHELL\fR,
+\fB$USER\fR,
+\fB$LOGNAME\fR,
+\fB$PATH\fR, and
+\fB$IFS\fR
+environment variables are reset\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is not used, the environment is copied, except for the variables above\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, the
+\fB$TERM\fR,
+\fB$COLORTERM\fR,
+\fB$DISPLAY\fR, and
+\fB$XAUTHORITY\fR
+environment variables are copied if they were set\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, the
+\fB$TZ\fR,
+\fB$HZ\fR, and
+\fB$MAIL\fR
+environment variables are set according to the
+/etc/login\&.defs
+options
+\fBENV_TZ\fR,
+\fBENV_HZ\fR,
+\fBMAIL_DIR\fR, and
+\fBMAIL_FILE\fR
+(see below)\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, other environment variables might be set by the
+\fBENVIRON_FILE\fR
+file (see below)\&.
+.RE
+.sp
+.RE
+.SH "CAVEATS"
+.PP
+This version of
+\fBsu\fR
+has many compilation options, only some of which may be in use at any particular site\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+If defined, either full pathname of a file containing device names (one per line) or a ":" delimited list of device names\&. Root logins will be allowed only upon these devices\&.
+.sp
+If not defined, root will be allowed on any device\&.
+.sp
+The device should be specified without the /dev/ prefix\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\*(Aqs supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Indicate if login is allowed if we can\*(Aqt cd to the home directory\&. Default is no\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+If this file exists and is readable, login environment will be read from it\&. Every line should be in the form name=value\&.
+.sp
+Lines starting with a # are treated as comment lines and ignored\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value is a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value is a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/sbin:/bin:/usr/sbin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will not be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+Enable checking and display of mailbox status upon login\&.
+.sp
+You should disable it if the shell startup files already check for mail ("mailx \-e" or equivalent)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of resource limits from
+/etc/limits
+and ulimit, umask, and niceness from the user\*(Aqs passwd gecos field\&.
+.RE
+.PP
+\fBSULOG_FILE\fR (string)
+.RS 4
+If defined, all su activity is logged to this file\&.
+.RE
+.PP
+\fBSU_NAME\fR (string)
+.RS 4
+If defined, the command name to display when running "su \-"\&. For example, if this is defined as "su" then a "ps" will display the command is "\-su"\&. If not defined, then "ps" would display the name of the shell actually being run, e\&.g\&. something like "\-sh"\&.
+.RE
+.PP
+\fBSU_WHEEL_ONLY\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the user must be listed as a member of the first gid 0 group in
+/etc/group
+(called
+\fIroot\fR
+on most Linux systems) to be able to
+\fBsu\fR
+to uid 0 accounts\&. If the group doesn\*(Aqt exist or is empty, no one will be able to
+\fBsu\fR
+to uid 0\&.
+.RE
+.PP
+\fBSYSLOG_SU_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsu\fR
+activity \- in addition to sulog file logging\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FILES"
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "EXIT VALUES"
+.PP
+On success,
+\fBsu\fR
+returns the exit value of the command it executed\&.
+.PP
+If this command was terminated by a signal,
+\fBsu\fR
+returns the number of this signal plus 128\&.
+.PP
+If su has to kill the command (because it was asked to terminate, and the command did not terminate in time),
+\fBsu\fR
+returns 255\&.
+.PP
+Some exit values from
+\fBsu\fR
+are independent from the executed command:
+.PP
+\fI0\fR
+.RS 4
+success (\fB\-\-help\fR
+only)
+.RE
+.PP
+\fI1\fR
+.RS 4
+System or authentication failure
+.RE
+.PP
+\fI126\fR
+.RS 4
+The requested command was not found
+.RE
+.PP
+\fI127\fR
+.RS 4
+The requested command could not be executed
+.RE
+.SH "SEE ALSO"
+.PP
+\fBlogin\fR(1),
+\fBlogin.defs\fR(5),
+\fBsg\fR(1),
+\fBsh\fR(1)\&.
diff --git a/man/man3/getspnam.3 b/man/man3/getspnam.3
new file mode 100644
index 0000000..cd473da
--- /dev/null
+++ b/man/man3/getspnam.3
@@ -0,0 +1 @@
+.so man3/shadow.3
diff --git a/man/man3/shadow.3 b/man/man3/shadow.3
new file mode 100644
index 0000000..a9ee6f5
--- /dev/null
+++ b/man/man3/shadow.3
@@ -0,0 +1,245 @@
+'\" t
+.\" Title: shadow
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Library Calls
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "SHADOW" "3" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Library Calls"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+shadow, getspnam \- encrypted password file routines
+.SH "SYNTAX"
+.PP
+\fI#include <shadow\&.h>\fR
+.PP
+\fIstruct spwd *getspent();\fR
+.PP
+\fIstruct spwd *getspnam(char\fR
+\fI*name\fR\fI);\fR
+.PP
+\fIvoid setspent();\fR
+.PP
+\fIvoid endspent();\fR
+.PP
+\fIstruct spwd *fgetspent(FILE\fR
+\fI*fp\fR\fI);\fR
+.PP
+\fIstruct spwd *sgetspent(char\fR
+\fI*cp\fR\fI);\fR
+.PP
+\fIint putspent(struct spwd\fR
+\fI*p,\fR
+\fIFILE\fR
+\fI*fp\fR\fI);\fR
+.PP
+\fIint lckpwdf();\fR
+.PP
+\fIint ulckpwdf();\fR
+.SH "DESCRIPTION"
+.PP
+\fIshadow\fR
+manipulates the contents of the shadow password file,
+/etc/shadow\&. The structure in the
+\fI#include\fR
+file is:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct spwd {
+ char *sp_namp; /* user login name */
+ char *sp_pwdp; /* encrypted password */
+ long int sp_lstchg; /* last password change */
+ long int sp_min; /* days until change allowed\&. */
+ long int sp_max; /* days before change required */
+ long int sp_warn; /* days warning for expiration */
+ long int sp_inact; /* days before account inactive */
+ long int sp_expire; /* date when account expires */
+ unsigned long int sp_flag; /* reserved for future use */
+}
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+The meanings of each field are:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_namp \- pointer to null\-terminated user name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_pwdp \- pointer to null\-terminated password
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_lstchg \- days since Jan 1, 1970 password was last changed
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_min \- days before which password may not be changed
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_max \- days after which password must be changed
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_warn \- days before password is to expire that user is warned of pending password expiration
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_inact \- days after password expires that account is considered inactive and disabled
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_expire \- days since Jan 1, 1970 when account will be disabled
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_flag \- reserved for future use
+.RE
+.SH "DESCRIPTION"
+.PP
+\fIgetspent\fR,
+\fIgetspname\fR,
+\fIfgetspent\fR, and
+\fIsgetspent\fR
+each return a pointer to a
+\fIstruct spwd\fR\&.
+\fIgetspent\fR
+returns the next entry from the file, and
+\fIfgetspent\fR
+returns the next entry from the given stream, which is assumed to be a file of the proper format\&.
+\fIsgetspent\fR
+returns a pointer to a
+\fIstruct spwd\fR
+using the provided string as input\&.
+\fIgetspnam\fR
+searches from the current position in the file for an entry matching
+\fIname\fR\&.
+.PP
+\fIsetspent\fR
+and
+\fIendspent\fR
+may be used to begin and end, respectively, access to the shadow password file\&.
+.PP
+The
+\fIlckpwdf\fR
+and
+\fIulckpwdf\fR
+routines should be used to insure exclusive access to the
+/etc/shadow
+file\&.
+\fIlckpwdf\fR
+attempts to acquire a lock using
+\fIpw_lock\fR
+for up to 15 seconds\&. It continues by attempting to acquire a second lock using
+\fIspw_lock\fR
+for the remainder of the initial 15 seconds\&. Should either attempt fail after a total of 15 seconds,
+\fIlckpwdf\fR
+returns \-1\&. When both locks are acquired 0 is returned\&.
+.SH "DIAGNOSTICS"
+.PP
+Routines return NULL if no more entries are available or if an error occurs during processing\&. Routines which have
+\fIint\fR
+as the return value return 0 for success and \-1 for failure\&.
+.SH "CAVEATS"
+.PP
+These routines may only be used by the superuser as access to the shadow password file is restricted\&.
+.SH "FILES"
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBgetpwent\fR(3),
+\fBshadow\fR(5)\&.
diff --git a/man/man5/faillog.5 b/man/man5/faillog.5
new file mode 100644
index 0000000..1264619
--- /dev/null
+++ b/man/man5/faillog.5
@@ -0,0 +1,64 @@
+'\" t
+.\" Title: faillog
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: File Formats and Conversions
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "FAILLOG" "5" "01/23/2020" "shadow\-utils 4\&.8\&.1" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+faillog \- login failure logging file
+.SH "DESCRIPTION"
+.PP
+/var/log/faillog
+maintains a count of login failures and the limits for each account\&.
+.PP
+The file contains fixed length records, indexed by numerical UID\&. Each record contains the count of login failures since the last successful login; the maximum number of failures before the account is disabled; the line on which the last login failure occurred; the date of the last login failure; and the duration (in seconds) during which the account will be locked after a failure\&.
+.PP
+The structure of the file is:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct faillog {
+ short fail_cnt;
+ short fail_max;
+ char fail_line[12];
+ time_t fail_time;
+ long fail_locktime;
+};
+.fi
+.if n \{\
+.RE
+.\}
+.SH "FILES"
+.PP
+/var/log/faillog
+.RS 4
+Failure logging file\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBfaillog\fR(8)
diff --git a/man/man5/gshadow.5 b/man/man5/gshadow.5
new file mode 100644
index 0000000..d657c58
--- /dev/null
+++ b/man/man5/gshadow.5
@@ -0,0 +1,101 @@
+'\" t
+.\" Title: gshadow
+.\" Author: Nicolas François <nicolas.francois@centraliens.net>
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: File Formats and Conversions
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "GSHADOW" "5" "01/23/2020" "shadow\-utils 4\&.8\&.1" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+gshadow \- shadowed group file
+.SH "DESCRIPTION"
+.PP
+/etc/gshadow
+contains the shadowed information for group accounts\&.
+.PP
+This file must not be readable by regular users if password security is to be maintained\&.
+.PP
+Each line of this file contains the following colon\-separated fields:
+.PP
+\fBgroup name\fR
+.RS 4
+It must be a valid group name, which exist on the system\&.
+.RE
+.PP
+\fBencrypted password\fR
+.RS 4
+Refer to
+\fBcrypt\fR(3)
+for details on how this string is interpreted\&.
+.sp
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), for instance ! or *, users will not be able to use a unix password to access the group (but group members do not need the password)\&.
+.sp
+The password is used when a user who is not a member of the group wants to gain the permissions of this group (see
+\fBnewgrp\fR(1))\&.
+.sp
+This field may be empty, in which case only the group members can gain the group permissions\&.
+.sp
+A password field which starts with an exclamation mark means that the password is locked\&. The remaining characters on the line represent the password field before the password was locked\&.
+.sp
+This password supersedes any password specified in
+/etc/group\&.
+.RE
+.PP
+\fBadministrators\fR
+.RS 4
+It must be a comma\-separated list of user names\&.
+.sp
+Administrators can change the password or the members of the group\&.
+.sp
+Administrators also have the same permissions as the members (see below)\&.
+.RE
+.PP
+\fBmembers\fR
+.RS 4
+It must be a comma\-separated list of user names\&.
+.sp
+Members can access the group without being prompted for a password\&.
+.sp
+You should use the same list of users as in
+/etc/group\&.
+.RE
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Secure group account information\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBgpasswd\fR(5),
+\fBgroup\fR(5),
+\fBgrpck\fR(8),
+\fBgrpconv\fR(8),
+\fBnewgrp\fR(1)\&.
diff --git a/man/man5/limits.5 b/man/man5/limits.5
new file mode 100644
index 0000000..ad3f734
--- /dev/null
+++ b/man/man5/limits.5
@@ -0,0 +1,274 @@
+'\" t
+.\" Title: limits
+.\" Author: Luca Berra
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: File Formats and Conversions
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "LIMITS" "5" "01/23/2020" "shadow\-utils 4\&.8\&.1" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+limits \- resource limits definition
+.SH "DESCRIPTION"
+.PP
+The
+\fIlimits\fR
+file (/etc/limits
+by default or LIMITS_FILE defined
+config\&.h) describes the resource limits you wish to impose\&. It should be owned by root and readable by root account only\&.
+.PP
+By default no quota is imposed on \*(Aqroot\*(Aq\&. In fact, there is no way to impose limits via this procedure to root\-equiv accounts (accounts with UID 0)\&.
+.PP
+Each line describes a limit for a user in the form:
+.PP
+\fIuser LIMITS_STRING\fR
+.PP
+or in the form:
+.PP
+\fI@group LIMITS_STRING\fR
+.PP
+The
+\fILIMITS_STRING\fR
+is a string of a concatenated list of resource limits\&. Each limit consists of a letter identifier followed by a numerical limit\&.
+.PP
+The valid identifiers are:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+A: max address space (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+C: max core file size (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+D: max data size (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+F: maximum file size (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+K: file creation mask, set by
+\fBumask\fR(2)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+I: max nice value (0\&.\&.39 which translates to 20\&.\&.\-19)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+L: max number of logins for this user
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+M: max locked\-in\-memory address space (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+N: max number of open files
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+O: max real time priority
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+P: process priority, set by
+\fBsetpriority\fR(2)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+R: max resident set size (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+S: max stack size (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+T: max CPU time (MIN)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+U: max number of processes
+.RE
+.PP
+For example,
+\fIL2D2048N5\fR
+is a valid
+\fILIMITS_STRING\fR\&. For reading convenience, the following entries are equivalent:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ username L2D2048N5
+ username L2 D2048 N5
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Be aware that after
+\fIusername\fR
+the rest of the line is considered a limit string, thus comments are not allowed\&. An invalid limits string will be rejected (not considered) by the
+\fBlogin\fR
+program\&.
+.PP
+The default entry is denoted by username "\fI*\fR"\&. If you have multiple
+\fIdefault\fR
+entries in your
+\fILIMITS_FILE\fR, then the last one will be used as the default entry\&.
+.PP
+The limits specified in the form "\fI@group\fR" apply to the members of the specified
+\fIgroup\fR\&.
+.PP
+If more than one line with limits for a user exist, only the first line for this user will be considered\&.
+.PP
+If no lines are specified for a user, the last
+\fI@group\fR
+line matching a group whose the user is a member of will be considered, or the last line with default limits if no groups contain the user\&.
+.PP
+To completely disable limits for a user, a single dash "\fI\-\fR" will do\&.
+.PP
+To disable a limit for a user, a single dash "\fI\-\fR" can be used instead of the numerical value for this limit\&.
+.PP
+Also, please note that all limit settings are set PER LOGIN\&. They are not global, nor are they permanent\&. Perhaps global limits will come, but for now this will have to do ;)
+.SH "FILES"
+.PP
+/etc/limits
+.RS 4
+.RE
+.SH "SEE ALSO"
+.PP
+\fBlogin\fR(1),
+\fBsetpriority\fR(2),
+\fBsetrlimit\fR(2)\&.
diff --git a/man/man5/login.access.5 b/man/man5/login.access.5
new file mode 100644
index 0000000..81e79ba
--- /dev/null
+++ b/man/man5/login.access.5
@@ -0,0 +1,67 @@
+'\" t
+.\" Title: login.access
+.\" Author: Marek Michałkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: File Formats and Conversions
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "LOGIN\&.ACCESS" "5" "01/23/2020" "shadow\-utils 4\&.8\&.1" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+login.access \- login access control table
+.SH "DESCRIPTION"
+.PP
+The
+\fIlogin\&.access\fR
+file specifies (user, host) combinations and/or (user, tty) combinations for which a login will be either accepted or refused\&.
+.PP
+When someone logs in, the
+\fIlogin\&.access\fR
+is scanned for the first entry that matches the (user, host) combination, or, in case of non\-networked logins, the first entry that matches the (user, tty) combination\&. The permissions field of that table entry determines whether the login will be accepted or refused\&.
+.PP
+Each line of the login access control table has three fields separated by a ":" character:
+.PP
+\fIpermission\fR:\fIusers\fR:\fIorigins\fR
+.PP
+The first field should be a "\fI+\fR" (access granted) or "\fI\-\fR" (access denied) character\&. The second field should be a list of one or more login names, group names, or
+\fIALL\fR
+(always matches)\&. The third field should be a list of one or more tty names (for non\-networked logins), host names, domain names (begin with "\&."), host addresses, internet network numbers (end with "\&."),
+\fIALL\fR
+(always matches) or
+\fILOCAL\fR
+(matches any string that does not contain a "\&." character)\&. If you run NIS you can use @netgroupname in host or user patterns\&.
+.PP
+The
+\fIEXCEPT\fR
+operator makes it possible to write very compact rules\&.
+.PP
+The group file is searched only when a name does not match that of the logged\-in user\&. Only groups are matched in which users are explicitly listed: the program does not look at a user\*(Aqs primary group id value\&.
+.SH "FILES"
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBlogin\fR(1)\&.
diff --git a/man/man5/login.defs.5 b/man/man5/login.defs.5
new file mode 100644
index 0000000..3ac322f
--- /dev/null
+++ b/man/man5/login.defs.5
@@ -0,0 +1,854 @@
+'\" t
+.\" Title: login.defs
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: File Formats and Conversions
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "LOGIN\&.DEFS" "5" "01/23/2020" "shadow\-utils 4\&.8\&.1" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+login.defs \- shadow password suite configuration
+.SH "DESCRIPTION"
+.PP
+The
+/etc/login\&.defs
+file defines the site\-specific configuration for the shadow password suite\&. This file is required\&. Absence of this file will not prevent system operation, but will probably result in undesirable operation\&.
+.PP
+This file is a readable text file, each line of the file describing one configuration parameter\&. The lines consist of a configuration name and value, separated by whitespace\&. Blank lines and comment lines are ignored\&. Comments are introduced with a "#" pound sign and the pound sign must be the first non\-white character of the line\&.
+.PP
+Parameter values may be of four types: strings, booleans, numbers, and long numbers\&. A string is comprised of any printable characters\&. A boolean should be either the value
+\fIyes\fR
+or
+\fIno\fR\&. An undefined boolean parameter or one with a value other than these will be given a
+\fIno\fR
+value\&. Numbers (both regular and long) may be either decimal values, octal values (precede the value with
+\fI0\fR) or hexadecimal values (precede the value with
+\fI0x\fR)\&. The maximum value of the regular and long numeric parameters is machine\-dependent\&.
+.PP
+The following configuration items are provided:
+.PP
+\fBCHFN_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchfn\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCHFN_RESTRICT\fR (string)
+.RS 4
+This parameter specifies which values in the
+\fIgecos\fR
+field of the
+/etc/passwd
+file may be changed by regular users using the
+\fBchfn\fR
+program\&. It can be any combination of letters
+\fIf\fR,
+\fIr\fR,
+\fIw\fR,
+\fIh\fR, for Full name, Room number, Work phone, and Home phone, respectively\&. For backward compatibility,
+\fIyes\fR
+is equivalent to
+\fIrwh\fR
+and
+\fIno\fR
+is equivalent to
+\fIfrwh\fR\&. If not specified, only the superuser can make any changes\&. The most restrictive setting is better achieved by not installing
+\fBchfn\fR
+SUID\&.
+.RE
+.PP
+\fBCHSH_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchsh\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+If defined, either full pathname of a file containing device names (one per line) or a ":" delimited list of device names\&. Root logins will be allowed only upon these devices\&.
+.sp
+If not defined, root will be allowed on any device\&.
+.sp
+The device should be specified without the /dev/ prefix\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\*(Aqs supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBCREATE_HOME\fR (boolean)
+.RS 4
+Indicate if a home directory should be created by default for new users\&.
+.sp
+This setting does not apply to system users, and can be overridden on the command line\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Indicate if login is allowed if we can\*(Aqt cd to the home directory\&. Default is no\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value is a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value is a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/sbin:/bin:/usr/sbin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+If this file exists and is readable, login environment will be read from it\&. Every line should be in the form name=value\&.
+.sp
+Lines starting with a # are treated as comment lines and ignored\&.
+.RE
+.PP
+\fBERASECHAR\fR (number)
+.RS 4
+Terminal ERASE character (\fI010\fR
+= backspace,
+\fI0177\fR
+= DEL)\&.
+.sp
+The value can be prefixed "0" for an octal value, or "0x" for an hexadecimal value\&.
+.RE
+.PP
+\fBFAIL_DELAY\fR (number)
+.RS 4
+Delay in seconds before being allowed another attempt after a login failure\&.
+.RE
+.PP
+\fBFAILLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of
+/var/log/faillog
+login failure info\&.
+.RE
+.PP
+\fBFAKE_SHELL\fR (string)
+.RS 4
+If set,
+\fBlogin\fR
+will execute this shell instead of the users\*(Aq shell specified in
+/etc/passwd\&.
+.RE
+.PP
+\fBFTMP_FILE\fR (string)
+.RS 4
+If defined, login failures will be logged in this file in a utmp format\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBGID_MIN\fR
+(resp\&.
+\fBGID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBHOME_MODE\fR (number)
+.RS 4
+The mode for new home directories\&. If not specified, the
+\fBUMASK\fR
+is used to create the mode\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this to set the mode of the home directory they create\&.
+.RE
+.PP
+\fBHUSHLOGIN_FILE\fR (string)
+.RS 4
+If defined, this file can inhibit all the usual chatter during the login sequence\&. If a full pathname is specified, then hushed mode will be enabled if the user\*(Aqs name or shell are found in the file\&. If not a full pathname, then hushed mode will be enabled if the file exists in the user\*(Aqs home directory\&.
+.RE
+.PP
+\fBISSUE_FILE\fR (string)
+.RS 4
+If defined, this file will be displayed before each login prompt\&.
+.RE
+.PP
+\fBKILLCHAR\fR (number)
+.RS 4
+Terminal KILL character (\fI025\fR
+= CTRL/U)\&.
+.sp
+The value can be prefixed "0" for an octal value, or "0x" for an hexadecimal value\&.
+.RE
+.PP
+\fBLASTLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of /var/log/lastlog login time info\&.
+.RE
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.PP
+\fBLOG_OK_LOGINS\fR (boolean)
+.RS 4
+Enable logging of successful logins\&.
+.RE
+.PP
+\fBLOG_UNKFAIL_ENAB\fR (boolean)
+.RS 4
+Enable display of unknown usernames when login failures are recorded\&.
+.sp
+Note: logging unknown usernames may be a security issue if an user enter her password instead of her login name\&.
+.RE
+.PP
+\fBLOGIN_RETRIES\fR (number)
+.RS 4
+Maximum number of login retries in case of bad password\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will not be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.PP
+\fBLOGIN_TIMEOUT\fR (number)
+.RS 4
+Max time in seconds for login\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+Enable checking and display of mailbox status upon login\&.
+.sp
+You should disable it if the shell startup files already check for mail ("mailx \-e" or equivalent)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBMOTD_FILE\fR (string)
+.RS 4
+If defined, ":" delimited list of "message of the day" files to be displayed upon login\&.
+.RE
+.PP
+\fBNOLOGINS_FILE\fR (string)
+.RS 4
+If defined, name of file whose presence will inhibit non\-root logins\&. The contents of this file should be a message indicating why logins are inhibited\&.
+.RE
+.PP
+\fBOBSCURE_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable additional checks upon password changes\&.
+.RE
+.PP
+\fBPASS_ALWAYS_WARN\fR (boolean)
+.RS 4
+Warn about weak passwords (but still allow them) if you are root\&.
+.RE
+.PP
+\fBPASS_CHANGE_TRIES\fR (number)
+.RS 4
+Maximum number of attempts to change password if rejected (too easy)\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+The maximum number of days a password may be used\&. If the password is older than this, a password change will be forced\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+The minimum number of days allowed between password changes\&. Any password changes attempted sooner than this will be rejected\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+The number of days warning given before a password expires\&. A zero means warning is given only upon the day of expiration, a negative value means no warning is given\&. If not specified, no warning will be provided\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR,
+\fBPASS_MIN_DAYS\fR
+and
+\fBPASS_WARN_AGE\fR
+are only used at the time of account creation\&. Any changes to these settings won\*(Aqt affect existing accounts\&.
+.PP
+\fBPASS_MAX_LEN\fR (number), \fBPASS_MIN_LEN\fR (number)
+.RS 4
+Number of significant characters in the password for crypt()\&.
+\fBPASS_MAX_LEN\fR
+is 8 by default\&. Don\*(Aqt change unless your crypt() is better\&. This is ignored if
+\fBMD5_CRYPT_ENAB\fR
+set to
+\fIyes\fR\&.
+.RE
+.PP
+\fBPORTTIME_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable checking of time restrictions specified in
+/etc/porttime\&.
+.RE
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of resource limits from
+/etc/limits
+and ulimit, umask, and niceness from the user\*(Aqs passwd gecos field\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999,999,999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.PP
+\fBSULOG_FILE\fR (string)
+.RS 4
+If defined, all su activity is logged to this file\&.
+.RE
+.PP
+\fBSU_NAME\fR (string)
+.RS 4
+If defined, the command name to display when running "su \-"\&. For example, if this is defined as "su" then a "ps" will display the command is "\-su"\&. If not defined, then "ps" would display the name of the shell actually being run, e\&.g\&. something like "\-sh"\&.
+.RE
+.PP
+\fBSU_WHEEL_ONLY\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the user must be listed as a member of the first gid 0 group in
+/etc/group
+(called
+\fIroot\fR
+on most Linux systems) to be able to
+\fBsu\fR
+to uid 0 accounts\&. If the group doesn\*(Aqt exist or is empty, no one will be able to
+\fBsu\fR
+to uid 0\&.
+.RE
+.PP
+\fBSUB_GID_MIN\fR (number), \fBSUB_GID_MAX\fR (number), \fBSUB_GID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate group IDs) allocate
+\fBSUB_GID_COUNT\fR
+unused group IDs from the range
+\fBSUB_GID_MIN\fR
+to
+\fBSUB_GID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR,
+\fBSUB_GID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSUB_UID_MIN\fR (number), \fBSUB_UID_MAX\fR (number), \fBSUB_UID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate user IDs) allocate
+\fBSUB_UID_COUNT\fR
+unused user IDs from the range
+\fBSUB_UID_MIN\fR
+to
+\fBSUB_UID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR,
+\fBSUB_UID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_GID_MIN\fR
+(resp\&.
+\fBSYS_GID_MAX\fR) is 101 (resp\&.
+\fBGID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_UID_MIN\fR
+(resp\&.
+\fBSYS_UID_MAX\fR) is 101 (resp\&.
+\fBUID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.PP
+\fBSYSLOG_SU_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsu\fR
+activity \- in addition to sulog file logging\&.
+.RE
+.PP
+\fBTTYGROUP\fR (string), \fBTTYPERM\fR (string)
+.RS 4
+The terminal permissions: the login tty will be owned by the
+\fBTTYGROUP\fR
+group, and the permissions will be set to
+\fBTTYPERM\fR\&.
+.sp
+By default, the ownership of the terminal is set to the user\*(Aqs primary group and the permissions are set to
+\fI0600\fR\&.
+.sp
+\fBTTYGROUP\fR
+can be either the name of a group or a numeric group identifier\&.
+.sp
+If you have a
+\fBwrite\fR
+program which is "setgid" to a special group which owns the terminals, define TTYGROUP to the group number and TTYPERM to 0620\&. Otherwise leave TTYGROUP commented out and assign TTYPERM to either 622 or 600\&.
+.RE
+.PP
+\fBTTYTYPE_FILE\fR (string)
+.RS 4
+If defined, file which maps tty line to TERM environment parameter\&. Each line of the file is in a format something like "vt100 tty01"\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBUID_MIN\fR
+(resp\&.
+\fBUID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBULIMIT\fR (number)
+.RS 4
+Default
+\fBulimit\fR
+value\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create if
+\fBHOME_MODE\fR
+is not set\&.
+.sp
+It is also used by
+\fBlogin\fR
+to define users\*(Aq initial umask\&. Note that this mask can be overridden by the user\*(Aqs GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERDEL_CMD\fR (string)
+.RS 4
+If defined, this command is run when removing a user\&. It should remove any at/cron/print jobs etc\&. owned by the user to be removed (passed as the first argument)\&.
+.sp
+The return code of the script is not taken into account\&.
+.sp
+Here is an example script, which removes the user\*(Aqs cron, at and print jobs:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#! /bin/sh
+
+# Check for the required argument\&.
+if [ $# != 1 ]; then
+ echo "Usage: $0 username"
+ exit 1
+fi
+
+# Remove cron jobs\&.
+crontab \-r \-u $1
+
+# Remove at jobs\&.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username\&.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR \-name "[^\&.]*" \-type f \-user $1 \-delete \e;
+
+# Remove print jobs\&.
+lprm $1
+
+# All done\&.
+exit 0
+
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "CROSS REFERENCES"
+.PP
+The following cross references show which programs in the shadow password suite use which parameters\&.
+.PP
+chfn
+.RS 4
+CHFN_AUTH
+CHFN_RESTRICT
+LOGIN_STRING
+.RE
+.PP
+chgpasswd
+.RS 4
+ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+chpasswd
+.RS 4
+ENCRYPT_METHOD MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+chsh
+.RS 4
+CHSH_AUTH LOGIN_STRING
+.RE
+.PP
+gpasswd
+.RS 4
+ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+groupadd
+.RS 4
+GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN
+.RE
+.PP
+groupdel
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+groupmems
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+groupmod
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpck
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpconv
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpunconv
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+lastlog
+.RS 4
+LASTLOG_UID_MAX
+.RE
+.PP
+login
+.RS 4
+CONSOLE
+CONSOLE_GROUPS DEFAULT_HOME
+ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE
+ERASECHAR FAIL_DELAY
+FAILLOG_ENAB
+FAKE_SHELL
+FTMP_FILE
+HUSHLOGIN_FILE
+ISSUE_FILE
+KILLCHAR
+LASTLOG_ENAB LASTLOG_UID_MAX
+LOGIN_RETRIES
+LOGIN_STRING
+LOGIN_TIMEOUT LOG_OK_LOGINS LOG_UNKFAIL_ENAB
+MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB
+TTYGROUP TTYPERM TTYTYPE_FILE
+ULIMIT UMASK
+USERGROUPS_ENAB
+.RE
+.PP
+newgrp / sg
+.RS 4
+SYSLOG_SG_ENAB
+.RE
+.PP
+newusers
+.RS 4
+ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB HOME_MODE PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+SUB_GID_COUNT SUB_GID_MAX SUB_GID_MIN SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK
+.RE
+.PP
+passwd
+.RS 4
+ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+pwck
+.RS 4
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+.RE
+.PP
+pwconv
+.RS 4
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+.RE
+.PP
+su
+.RS 4
+CONSOLE
+CONSOLE_GROUPS DEFAULT_HOME
+ENV_HZ ENVIRON_FILE
+ENV_PATH ENV_SUPATH
+ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE QUOTAS_ENAB
+SULOG_FILE SU_NAME
+SU_WHEEL_ONLY
+SYSLOG_SU_ENAB
+USERGROUPS_ENAB
+.RE
+.PP
+sulogin
+.RS 4
+ENV_HZ
+ENV_TZ
+.RE
+.PP
+useradd
+.RS 4
+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 SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK
+.RE
+.PP
+userdel
+.RS 4
+MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB
+.RE
+.PP
+usermod
+.RS 4
+LASTLOG_UID_MAX MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP
+.RE
+.SH "SEE ALSO"
+.PP
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBsu\fR(1),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBpam\fR(8)\&.
diff --git a/man/man5/passwd.5 b/man/man5/passwd.5
new file mode 100644
index 0000000..c66e932
--- /dev/null
+++ b/man/man5/passwd.5
@@ -0,0 +1,193 @@
+'\" t
+.\" Title: passwd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: File Formats and Conversions
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "PASSWD" "5" "01/23/2020" "shadow\-utils 4\&.8\&.1" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+passwd \- the password file
+.SH "DESCRIPTION"
+.PP
+/etc/passwd
+contains one line for each user account, with seven fields delimited by colons (\(lq:\(rq)\&. These fields are:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+login name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+optional encrypted password
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+numerical user ID
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+numerical group ID
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+user name or comment field
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+user home directory
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+optional user command interpreter
+.RE
+.PP
+If the
+\fIpassword\fR
+field is a lower\-case
+\(lqx\(rq, then the encrypted password is actually stored in the
+\fBshadow\fR(5)
+file instead; there
+\fImust\fR
+be a corresponding line in the
+/etc/shadow
+file, or else the user account is invalid\&.
+.PP
+The encrypted
+\fIpassword\fR
+field may be empty, in which case no password is required to authenticate as the specified login name\&. However, some applications which read the
+/etc/passwd
+file may decide not to permit
+\fIany\fR
+access at all if the
+\fIpassword\fR
+field is blank\&.
+.PP
+A
+\fIpassword\fR
+field which starts with an exclamation mark means that the password is locked\&. The remaining characters on the line represent the
+\fIpassword\fR
+field before the password was locked\&.
+.PP
+Refer to
+\fBcrypt\fR(3)
+for details on how this string is interpreted\&.
+.PP
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), 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)\&.
+.PP
+The comment field is used by various system utilities, such as
+\fBfinger\fR(1)\&.
+.PP
+The home directory field provides the name of the initial working directory\&. The
+\fBlogin\fR
+program uses this information to set the value of the
+\fB$HOME\fR
+environmental variable\&.
+.PP
+The command interpreter field provides the name of the user\*(Aqs command language interpreter, or the name of the initial program to execute\&. The
+\fBlogin\fR
+program uses this information to set the value of the
+\fB$SHELL\fR
+environmental variable\&. If this field is empty, it defaults to the value
+/bin/sh\&.
+.SH "FILES"
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+optional encrypted password file
+.RE
+.PP
+/etc/passwd\-
+.RS 4
+Backup file for /etc/passwd\&.
+.sp
+Note that this file is used by the tools of the shadow toolsuite, but not by all user and password management tools\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBcrypt\fR(3),
+\fBgetent\fR(1),
+\fBgetpwnam\fR(3),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBpwck\fR(8),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBshadow\fR(5),
+\fBsu\fR(1),
+\fBsulogin\fR(8)\&.
diff --git a/man/man5/porttime.5 b/man/man5/porttime.5
new file mode 100644
index 0000000..38105cf
--- /dev/null
+++ b/man/man5/porttime.5
@@ -0,0 +1,96 @@
+'\" t
+.\" Title: porttime
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: File Formats and Conversions
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "PORTTIME" "5" "01/23/2020" "shadow\-utils 4\&.8\&.1" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+porttime \- port access time file
+.SH "DESCRIPTION"
+.PP
+\fIporttime\fR
+contains a list of tty devices, user names, and permitted login times\&.
+.PP
+Each entry consists of three colon separated fields\&. The first field is a comma separated list of tty devices, or an asterisk to indicate that all tty devices are matched by this entry\&. The second field is a comma separated list of user names, or an asterisk to indicated that all user names are matched by this entry\&. The third field is a comma separated list of permitted access times\&.
+.PP
+Each access time entry consists of zero or more days of the week, abbreviated
+\fISu\fR,
+\fIMo\fR,
+\fITu\fR,
+\fIWe\fR,
+\fITh\fR,
+\fIFr\fR, and
+\fISa\fR, followed by a pair of times separated by a hyphen\&. The abbreviation
+\fIWk\fR
+may be used to represent Monday thru Friday, and
+\fIAl\fR
+may be used to indicate every day\&. If no days are given,
+\fIAl\fR
+is assumed\&.
+.SH "EXAMPLES"
+.PP
+The following entry allows access to user
+\fBjfh\fR
+on every port during weekdays from 9am to 5pm\&.
+.PP
+*:jfh:Wk0900\-1700
+.PP
+The following entries allow access only to the users
+\fIroot\fR
+and
+\fIoper\fR
+on
+/dev/console
+at any time\&. This illustrates how the
+/etc/porttime
+file is an ordered list of access times\&. Any other user would match the second entry which does not permit access at any time\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ console:root,oper:Al0000\-2400
+ console:*:
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+The following entry allows access for the user
+\fIgames\fR
+on any port during non\-working hours\&.
+.PP
+*:games:Wk1700\-0900,SaSu0000\-2400
+.SH "FILES"
+.PP
+/etc/porttime
+.RS 4
+File containing port access\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBlogin\fR(1)\&.
diff --git a/man/man5/shadow.5 b/man/man5/shadow.5
new file mode 100644
index 0000000..2b4a707
--- /dev/null
+++ b/man/man5/shadow.5
@@ -0,0 +1,148 @@
+'\" t
+.\" Title: shadow
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: File Formats and Conversions
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "SHADOW" "5" "01/23/2020" "shadow\-utils 4\&.8\&.1" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+shadow \- shadowed password file
+.SH "DESCRIPTION"
+.PP
+shadow
+is a file which contains the password information for the system\*(Aqs accounts and optional aging information\&.
+.PP
+This file must not be readable by regular users if password security is to be maintained\&.
+.PP
+Each line of this file contains 9 fields, separated by colons (\(lq:\(rq), in the following order:
+.PP
+\fBlogin name\fR
+.RS 4
+It must be a valid account name, which exist on the system\&.
+.RE
+.PP
+\fBencrypted password\fR
+.RS 4
+This field may be empty, in which case no passwords are required to authenticate as the specified login name\&. However, some applications which read the
+/etc/shadow
+file may decide not to permit any access at all if the password field is empty\&.
+.sp
+A password field which starts with an exclamation mark means that the password is locked\&. The remaining characters on the line represent the password field before the password was locked\&.
+.sp
+Refer to
+\fBcrypt\fR(3)
+for details on how this string is interpreted\&.
+.sp
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), 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)\&.
+.RE
+.PP
+\fBdate of last password change\fR
+.RS 4
+The date of the last password change, expressed as the number of days since Jan 1, 1970\&.
+.sp
+The value 0 has a special meaning, which is that the user should change her password the next time she will log in the system\&.
+.sp
+An empty field means that password aging features are disabled\&.
+.RE
+.PP
+\fBminimum password age\fR
+.RS 4
+The minimum password age is the number of days the user will have to wait before she will be allowed to change her password again\&.
+.sp
+An empty field and value 0 mean that there are no minimum password age\&.
+.RE
+.PP
+\fBmaximum password age\fR
+.RS 4
+The maximum password age is the number of days after which the user will have to change her password\&.
+.sp
+After this number of days is elapsed, the password may still be valid\&. The user should be asked to change her password the next time she will log in\&.
+.sp
+An empty field means that there are no maximum password age, no password warning period, and no password inactivity period (see below)\&.
+.sp
+If the maximum password age is lower than the minimum password age, the user cannot change her password\&.
+.RE
+.PP
+\fBpassword warning period\fR
+.RS 4
+The number of days before a password is going to expire (see the maximum password age above) during which the user should be warned\&.
+.sp
+An empty field and value 0 mean that there are no password warning period\&.
+.RE
+.PP
+\fBpassword inactivity period\fR
+.RS 4
+The number of days after a password has expired (see the maximum password age above) during which the password should still be accepted (and the user should update her password during the next login)\&.
+.sp
+After expiration of the password and this expiration period is elapsed, no login is possible using the current user\*(Aqs password\&. The user should contact her administrator\&.
+.sp
+An empty field means that there are no enforcement of an inactivity period\&.
+.RE
+.PP
+\fBaccount expiration date\fR
+.RS 4
+The date of expiration of the account, expressed as the number of days since Jan 1, 1970\&.
+.sp
+Note that an account expiration differs from a password expiration\&. In case of an account expiration, the user shall not be allowed to login\&. In case of a password expiration, the user is not allowed to login using her password\&.
+.sp
+An empty field means that the account will never expire\&.
+.sp
+The value 0 should not be used as it is interpreted as either an account with no expiration, or as an expiration on Jan 1, 1970\&.
+.RE
+.PP
+\fBreserved field\fR
+.RS 4
+This field is reserved for future use\&.
+.RE
+.SH "FILES"
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.PP
+/etc/shadow\-
+.RS 4
+Backup file for /etc/shadow\&.
+.sp
+Note that this file is used by the tools of the shadow toolsuite, but not by all user and password management tools\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBchage\fR(1),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBpasswd\fR(5),
+\fBpwck\fR(8),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBsu\fR(1),
+\fBsulogin\fR(8)\&.
diff --git a/man/man5/suauth.5 b/man/man5/suauth.5
new file mode 100644
index 0000000..9b5ad03
--- /dev/null
+++ b/man/man5/suauth.5
@@ -0,0 +1,146 @@
+'\" t
+.\" Title: suauth
+.\" Author: Marek Michałkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: File Formats and Conversions
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "SUAUTH" "5" "01/23/2020" "shadow\-utils 4\&.8\&.1" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+suauth \- detailed su control file
+.SH "SYNOPSIS"
+.HP \w'\fB/etc/suauth\fR\ 'u
+\fB/etc/suauth\fR
+.SH "DESCRIPTION"
+.PP
+The file
+/etc/suauth
+is referenced whenever the su command is called\&. It can change the behaviour of the su command, based upon:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ 1) the user su is targeting
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+2) the user executing the su command (or any groups he might be a member of)
+.PP
+The file is formatted like this, with lines starting with a # being treated as comment lines and ignored;
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ to\-id:from\-id:ACTION
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Where to\-id is either the word
+\fIALL\fR, a list of usernames delimited by "," or the words
+\fIALL EXCEPT\fR
+followed by a list of usernames delimited by ","\&.
+.PP
+from\-id is formatted the same as to\-id except the extra word
+\fIGROUP\fR
+is recognized\&.
+\fIALL EXCEPT GROUP\fR
+is perfectly valid too\&. Following
+\fIGROUP\fR
+appears one or more group names, delimited by ","\&. It is not sufficient to have primary group id of the relevant group, an entry in
+\fB/etc/group\fR(5)
+is necessary\&.
+.PP
+Action can be one only of the following currently supported options\&.
+.PP
+\fIDENY\fR
+.RS 4
+The attempt to su is stopped before a password is even asked for\&.
+.RE
+.PP
+\fINOPASS\fR
+.RS 4
+The attempt to su is automatically successful; no password is asked for\&.
+.RE
+.PP
+\fIOWNPASS\fR
+.RS 4
+For the su command to be successful, the user must enter his or her own password\&. They are told this\&.
+.RE
+.PP
+Note there are three separate fields delimited by a colon\&. No whitespace must surround this colon\&. Also note that the file is examined sequentially line by line, and the first applicable rule is used without examining the file further\&. This makes it possible for a system administrator to exercise as fine control as he or she wishes\&.
+.SH "EXAMPLE"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ # sample /etc/suauth file
+ #
+ # A couple of privileged usernames may
+ # su to root with their own password\&.
+ #
+ root:chris,birddog:OWNPASS
+ #
+ # Anyone else may not su to root unless in
+ # group wheel\&. This is how BSD does things\&.
+ #
+ root:ALL EXCEPT GROUP wheel:DENY
+ #
+ # Perhaps terry and birddog are accounts
+ # owned by the same person\&.
+ # Access can be arranged between them
+ # with no password\&.
+ #
+ terry:birddog:NOPASS
+ birddog:terry:NOPASS
+ #
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "FILES"
+.PP
+/etc/suauth
+.RS 4
+.RE
+.SH "BUGS"
+.PP
+There could be plenty lurking\&. The file parser is particularly unforgiving about syntax errors, expecting no spurious whitespace (apart from beginning and end of lines), and a specific token delimiting different things\&.
+.SH "DIAGNOSTICS"
+.PP
+An error parsing the file is reported using
+\fBsyslogd\fR(8)
+as level ERR on facility AUTH\&.
+.SH "SEE ALSO"
+.PP
+\fBsu\fR(1)\&.
diff --git a/man/man5/subgid.5 b/man/man5/subgid.5
new file mode 100644
index 0000000..8db1f45
--- /dev/null
+++ b/man/man5/subgid.5
@@ -0,0 +1,100 @@
+'\" t
+.\" Title: subgid
+.\" Author: Eric Biederman
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: File Formats and Conversions
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "SUBGID" "5" "01/23/2020" "shadow\-utils 4\&.8\&.1" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+subgid \- the subordinate gid file
+.SH "DESCRIPTION"
+.PP
+Each line in
+/etc/subgid
+contains a user name and a range of subordinate group ids that user is allowed to use\&. This is specified with three fields delimited by colons (\(lq:\(rq)\&. These fields are:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+login name or UID
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+numerical subordinate group ID
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+numerical subordinate group ID count
+.RE
+.PP
+This file specifies the group IDs that ordinary users can use, with the
+\fBnewgidmap\fR
+command, to configure gid mapping in a user namespace\&.
+.PP
+Multiple ranges may be specified per user\&.
+.PP
+When large number of entries (10000\-100000 or more) are defined in
+/etc/subgid, parsing performance penalty will become noticeable\&. In this case it is recommended to use UIDs instead of login names\&. Benchmarks have shown speed\-ups up to 20x\&.
+.SH "FILES"
+.PP
+/etc/subgid
+.RS 4
+Per user subordinate group IDs\&.
+.RE
+.PP
+/etc/subgid\-
+.RS 4
+Backup file for /etc/subgid\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBlogin.defs\fR(5),
+\fBnewgidmap\fR(1),
+\fBnewuidmap\fR(1),
+\fBnewusers\fR(8),
+\fBsubuid\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8),
+\fBuser_namespaces\fR(7)\&.
diff --git a/man/man5/subuid.5 b/man/man5/subuid.5
new file mode 100644
index 0000000..0876ecb
--- /dev/null
+++ b/man/man5/subuid.5
@@ -0,0 +1,100 @@
+'\" t
+.\" Title: subuid
+.\" Author: Eric Biederman
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: File Formats and Conversions
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "SUBUID" "5" "01/23/2020" "shadow\-utils 4\&.8\&.1" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+subuid \- the subordinate uid file
+.SH "DESCRIPTION"
+.PP
+Each line in
+/etc/subuid
+contains a user name and a range of subordinate user ids that user is allowed to use\&. This is specified with three fields delimited by colons (\(lq:\(rq)\&. These fields are:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+login name or UID
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+numerical subordinate user ID
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+numerical subordinate user ID count
+.RE
+.PP
+This file specifies the user IDs that ordinary users can use, with the
+\fBnewuidmap\fR
+command, to configure uid mapping in a user namespace\&.
+.PP
+Multiple ranges may be specified per user\&.
+.PP
+When large number of entries (10000\-100000 or more) are defined in
+/etc/subuid, parsing performance penalty will become noticeable\&. In this case it is recommended to use UIDs instead of login names\&. Benchmarks have shown speed\-ups up to 20x\&.
+.SH "FILES"
+.PP
+/etc/subuid
+.RS 4
+Per user subordinate user IDs\&.
+.RE
+.PP
+/etc/subuid\-
+.RS 4
+Backup file for /etc/subuid\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBlogin.defs\fR(5),
+\fBnewgidmap\fR(1),
+\fBnewuidmap\fR(1),
+\fBnewusers\fR(1),
+\fBsubgid\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8),
+\fBuser_namespaces\fR(7)\&.
diff --git a/man/man8/chgpasswd.8 b/man/man8/chgpasswd.8
new file mode 100644
index 0000000..1bc9dff
--- /dev/null
+++ b/man/man8/chgpasswd.8
@@ -0,0 +1,208 @@
+'\" t
+.\" Title: chgpasswd
+.\" Author: Thomas Kłoczko <kloczek@pld.org.pl>
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: System Management Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "CHGPASSWD" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+chgpasswd \- update group passwords in batch mode
+.SH "SYNOPSIS"
+.HP \w'\fBchgpasswd\fR\ 'u
+\fBchgpasswd\fR [\fIoptions\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBchgpasswd\fR
+command reads a list of group name and password pairs from standard input and uses this information to update a set of existing groups\&. Each line is of the format:
+.PP
+\fIgroup_name\fR:\fIpassword\fR
+.PP
+By default the supplied password must be in clear\-text, and is encrypted by
+\fBchgpasswd\fR\&.
+.PP
+The default encryption algorithm can be defined for the system with the
+\fBENCRYPT_METHOD\fR
+variable of
+/etc/login\&.defs, and can be overwritten with the
+\fB\-e\fR,
+\fB\-m\fR, or
+\fB\-c\fR
+options\&.
+.PP
+This command is intended to be used in a large system environment where many accounts are created at a single time\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBchgpasswd\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+Use the specified method to encrypt the passwords\&.
+.sp
+The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc support these methods\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-encrypted\fR
+.RS 4
+Supplied passwords are in encrypted form\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-md5\fR
+.RS 4
+Use MD5 encryption instead of DES when the supplied passwords are not encrypted\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+Use the specified number of rounds to encrypt the passwords\&.
+.sp
+The value 0 means that the system will choose the default number of rounds for the crypt method (5000)\&.
+.sp
+A minimal value of 1000 and a maximal value of 999,999,999 will be enforced\&.
+.sp
+You can only use this option with the SHA256 or SHA512 crypt method\&.
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "CAVEATS"
+.PP
+Remember to set permissions or umask to prevent readability of unencrypted files by other users\&.
+.PP
+You should make sure the passwords and the encryption method respect the system\*(Aqs password policy\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999,999,999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Secure group account information\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBgpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBlogin.defs\fR(5)\&.
diff --git a/man/man8/chpasswd.8 b/man/man8/chpasswd.8
new file mode 100644
index 0000000..c15630a
--- /dev/null
+++ b/man/man8/chpasswd.8
@@ -0,0 +1,212 @@
+'\" t
+.\" Title: chpasswd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: System Management Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "CHPASSWD" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+chpasswd \- update passwords in batch mode
+.SH "SYNOPSIS"
+.HP \w'\fBchpasswd\fR\ 'u
+\fBchpasswd\fR [\fIoptions\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBchpasswd\fR
+command reads a list of user name and password pairs from standard input and uses this information to update a group of existing users\&. Each line is of the format:
+.PP
+\fIuser_name\fR:\fIpassword\fR
+.PP
+By default the passwords must be supplied in clear\-text, and are encrypted by
+\fBchpasswd\fR\&. Also the password age will be updated, if present\&.
+.PP
+The default encryption algorithm can be defined for the system with the
+\fBENCRYPT_METHOD\fR
+or
+\fBMD5_CRYPT_ENAB\fR
+variables of
+/etc/login\&.defs, and can be overwritten with the
+\fB\-e\fR,
+\fB\-m\fR, or
+\fB\-c\fR
+options\&.
+.PP
+\fBchpasswd\fR
+first updates all the passwords in memory, and then commits all the changes to disk if no errors occurred for any user\&.
+.PP
+This command is intended to be used in a large system environment where many accounts are created at a single time\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBchpasswd\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR\ \&\fIMETHOD\fR
+.RS 4
+Use the specified method to encrypt the passwords\&.
+.sp
+The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc support these methods\&.
+.sp
+By default (if none of the
+\fB\-c\fR,
+\fB\-m\fR, or
+\fB\-e\fR
+options are specified), the encryption method is defined by the
+\fBENCRYPT_METHOD\fR
+or
+\fBMD5_CRYPT_ENAB\fR
+variables of
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-encrypted\fR
+.RS 4
+Supplied passwords are in encrypted form\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-md5\fR
+.RS 4
+Use MD5 encryption instead of DES when the supplied passwords are not encrypted\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR\ \&\fIROUNDS\fR
+.RS 4
+Use the specified number of rounds to encrypt the passwords\&.
+.sp
+The value 0 means that the system will choose the default number of rounds for the crypt method (5000)\&.
+.sp
+A minimal value of 1000 and a maximal value of 999,999,999 will be enforced\&.
+.sp
+You can only use this option with the SHA256 or SHA512 crypt method\&.
+.sp
+By default, the number of rounds is defined by the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+and
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+variables in
+/etc/login\&.defs\&.
+.RE
+.SH "CAVEATS"
+.PP
+Remember to set permissions or umask to prevent readability of unencrypted files by other users\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999,999,999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FILES"
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBpasswd\fR(1),
+\fBnewusers\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8)\&.
diff --git a/man/man8/faillog.8 b/man/man8/faillog.8
new file mode 100644
index 0000000..b220088
--- /dev/null
+++ b/man/man8/faillog.8
@@ -0,0 +1,165 @@
+'\" t
+.\" Title: faillog
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: System Management Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "FAILLOG" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+faillog \- display faillog records or set login failure limits
+.SH "SYNOPSIS"
+.HP \w'\fBfaillog\fR\ 'u
+\fBfaillog\fR [\fIoptions\fR]
+.SH "DESCRIPTION"
+.PP
+\fBfaillog\fR
+displays the contents of the failure log database (/var/log/faillog)\&. It can also set the failure counters and limits\&. When
+\fBfaillog\fR
+is run without arguments, it only displays the faillog records of the users who had a login failure\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBfaillog\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+Display (or act on) faillog records for all users having an entry in the
+faillog
+database\&.
+.sp
+The range of users can be restricted with the
+\fB\-u\fR
+option\&.
+.sp
+In display mode, this is still restricted to existing users but forces the display of the faillog entries even if they are empty\&.
+.sp
+With the
+\fB\-l\fR,
+\fB\-m\fR,
+\fB\-r\fR,
+\fB\-t\fR
+options, the users\*(Aq records are changed, even if the user does not exist on the system\&. This is useful to reset records of users that have been deleted or to set a policy in advance for a range of users\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\-secs\fR\ \&\fISEC\fR
+.RS 4
+Lock account for
+\fISEC\fR
+seconds after failed login\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-maximum\fR\ \&\fIMAX\fR
+.RS 4
+Set the maximum number of login failures after the account is disabled to
+\fIMAX\fR\&.
+.sp
+Selecting a
+\fIMAX\fR
+value of 0 has the effect of not placing a limit on the number of failed logins\&.
+.sp
+The maximum failure count should always be 0 for
+\fIroot\fR
+to prevent a denial of services attack against the system\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-reset\fR
+.RS 4
+Reset the counters of login failures\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR\ \&\fIDAYS\fR
+.RS 4
+Display faillog records more recent than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR\ \&\fILOGIN\fR|\fIRANGE\fR
+.RS 4
+Display faillog record or maintains failure counters and limits (if used with
+\fB\-l\fR,
+\fB\-m\fR
+or
+\fB\-r\fR
+options) only for the specified user(s)\&.
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+When none of the
+\fB\-l\fR,
+\fB\-m\fR, or
+\fB\-r\fR
+options are used,
+\fBfaillog\fR
+displays the faillog record of the specified user(s)\&.
+.SH "CAVEATS"
+.PP
+\fBfaillog\fR
+only prints out users with no successful login since the last failure\&. To print out a user who has had a successful login since their last failure, you must explicitly request the user with the
+\fB\-u\fR
+flag, or print out all users with the
+\fB\-a\fR
+flag\&.
+.SH "FILES"
+.PP
+/var/log/faillog
+.RS 4
+Failure logging file\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBlogin\fR(1),
+\fBfaillog\fR(5)\&.
diff --git a/man/man8/groupadd.8 b/man/man8/groupadd.8
new file mode 100644
index 0000000..af5778f
--- /dev/null
+++ b/man/man8/groupadd.8
@@ -0,0 +1,257 @@
+'\" t
+.\" Title: groupadd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: System Management Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "GROUPADD" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+groupadd \- create a new group
+.SH "SYNOPSIS"
+.HP \w'\fBgroupadd\fR\ 'u
+\fBgroupadd\fR [\fIoptions\fR] \fIgroup\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBgroupadd\fR
+command creates a new group account using the values specified on the command line plus the default values from the system\&. The new group will be entered into the system files as needed\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBgroupadd\fR
+command are:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option causes the command to simply exit with success status if the specified group already exists\&. When used with
+\fB\-g\fR, and the specified GID already exists, another (unique) GID is chosen (i\&.e\&.
+\fB\-g\fR
+is turned off)\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGID\fR
+.RS 4
+The numerical value of the group\*(Aqs ID\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&. The default is to use the smallest ID value greater than or equal to
+\fBGID_MIN\fR
+and greater than every other group\&.
+.sp
+See also the
+\fB\-r\fR
+option and the
+\fBGID_MAX\fR
+description\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-K\fR, \fB\-\-key\fR\ \&\fIKEY\fR=\fIVALUE\fR
+.RS 4
+Overrides
+/etc/login\&.defs
+defaults (GID_MIN, GID_MAX and others)\&. Multiple
+\fB\-K\fR
+options can be specified\&.
+.sp
+Example:
+\fB\-K\fR\ \&\fIGID_MIN\fR=\fI100\fR\ \&
+\fB\-K\fR\ \&\fIGID_MAX\fR=\fI499\fR
+.sp
+Note:
+\fB\-K\fR\ \&\fIGID_MIN\fR=\fI10\fR,\fIGID_MAX\fR=\fI499\fR
+doesn\*(Aqt work yet\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+This option permits to add a group with a non\-unique GID\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&. The default is to disable the password\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\*(Aqs password policy\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Create a system group\&.
+.sp
+The numeric identifiers of new system groups are chosen in the
+\fBSYS_GID_MIN\fR\-\fBSYS_GID_MAX\fR
+range, defined in
+login\&.defs, instead of
+\fBGID_MIN\fR\-\fBGID_MAX\fR\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBGID_MIN\fR
+(resp\&.
+\fBGID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_GID_MIN\fR
+(resp\&.
+\fBSYS_GID_MAX\fR) is 101 (resp\&.
+\fBGID_MIN\fR\-1)\&.
+.RE
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Secure group account information\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "CAVEATS"
+.PP
+Groupnames must start with a lower case letter or an underscore, followed by lower case letters, digits, underscores, or dashes\&. They can end with a dollar sign\&. In regular expression terms: [a\-z_][a\-z0\-9_\-]*[$]?
+.PP
+Groupnames may only be up to 16 characters long\&.
+.PP
+You may not add a NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.PP
+If the groupname already exists in an external group database such as NIS or LDAP,
+\fBgroupadd\fR
+will deny the group creation request\&.
+.SH "EXIT VALUES"
+.PP
+The
+\fBgroupadd\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+GID not unique (when
+\fB\-o\fR
+not used)
+.RE
+.PP
+\fI9\fR
+.RS 4
+group name not unique
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.SH "SEE ALSO"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/man8/groupdel.8 b/man/man8/groupdel.8
new file mode 100644
index 0000000..50addae
--- /dev/null
+++ b/man/man8/groupdel.8
@@ -0,0 +1,145 @@
+'\" t
+.\" Title: groupdel
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: System Management Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "GROUPDEL" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+groupdel \- delete a group
+.SH "SYNOPSIS"
+.HP \w'\fBgroupdel\fR\ 'u
+\fBgroupdel\fR [\fIoptions\fR] \fIGROUP\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBgroupdel\fR
+command modifies the system account files, deleting all entries that refer to
+\fIGROUP\fR\&. The named group must exist\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBgroupdel\fR
+command are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.SH "CAVEATS"
+.PP
+You may not remove the primary group of any existing user\&. You must remove the user before you remove the group\&.
+.PP
+You should manually check all file systems to ensure that no files remain owned by this group\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Secure group account information\&.
+.RE
+.SH "EXIT VALUES"
+.PP
+The
+\fBgroupdel\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI8\fR
+.RS 4
+can\*(Aqt remove user\*(Aqs primary group
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.SH "SEE ALSO"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/man8/groupmems.8 b/man/man8/groupmems.8
new file mode 100644
index 0000000..1d01d31
--- /dev/null
+++ b/man/man8/groupmems.8
@@ -0,0 +1,180 @@
+'\" t
+.\" Title: groupmems
+.\" Author: George Kraft, IV
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: System Management Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "GROUPMEMS" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+groupmems \- administer members of a user\*(Aqs primary group
+.SH "SYNOPSIS"
+.HP \w'\fBgroupmems\fR\ 'u
+\fBgroupmems\fR \-a\ \fIuser_name\fR | \-d\ \fIuser_name\fR | [\-g\ \fIgroup_name\fR] | \-l | \-p
+.SH "DESCRIPTION"
+.PP
+The
+\fBgroupmems\fR
+command 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)\&.
+.PP
+Only the superuser, as administrator, can use
+\fBgroupmems\fR
+to alter the memberships of other groups\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBgroupmems\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-add\fR\ \&\fIuser_name\fR
+.RS 4
+Add a user to the group membership list\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR\ \&\fIuser_name\fR
+.RS 4
+Delete a user from the group membership list\&.
+.sp
+If the
+/etc/gshadow
+file exist, the user will be removed from the list of members and administrators of the group\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-group\fR\ \&\fIgroup_name\fR
+.RS 4
+The superuser can specify which group membership list to modify\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-list\fR
+.RS 4
+List the group membership list\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-purge\fR
+.RS 4
+Purge all users from the group membership list\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.SH "SETUP"
+.PP
+The
+\fBgroupmems\fR
+executable should be in mode
+2710
+as user
+\fIroot\fR
+and in group
+\fIgroups\fR\&. The system administrator can add users to group
+\fIgroups\fR
+to allow or disallow them using the
+\fBgroupmems\fR
+utility to manage their own group membership list\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ $ groupadd \-r groups
+ $ chmod 2710 groupmems
+ $ chown root\&.groups groupmems
+ $ groupmems \-g groups \-a gk4
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+secure group account information
+.RE
+.SH "SEE ALSO"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/man8/groupmod.8 b/man/man8/groupmod.8
new file mode 100644
index 0000000..b76f6a9
--- /dev/null
+++ b/man/man8/groupmod.8
@@ -0,0 +1,233 @@
+'\" t
+.\" Title: groupmod
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: System Management Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "GROUPMOD" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+groupmod \- modify a group definition on the system
+.SH "SYNOPSIS"
+.HP \w'\fBgroupmod\fR\ 'u
+\fBgroupmod\fR [\fIoptions\fR] \fIGROUP\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBgroupmod\fR
+command modifies the definition of the specified
+\fIGROUP\fR
+by modifying the appropriate entry in the group database\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBgroupmod\fR
+command are:
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGID\fR
+.RS 4
+The group ID of the given
+\fIGROUP\fR
+will be changed to
+\fIGID\fR\&.
+.sp
+The value of
+\fIGID\fR
+must be a non\-negative decimal integer\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&.
+.sp
+Users who use the group as primary group will be updated to keep the group as their primary group\&.
+.sp
+Any files that have the old group ID and must continue to belong to
+\fIGROUP\fR, must have their group ID changed manually\&.
+.sp
+No checks will be performed with regard to the
+\fBGID_MIN\fR,
+\fBGID_MAX\fR,
+\fBSYS_GID_MIN\fR, or
+\fBSYS_GID_MAX\fR
+from
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-new\-name\fR\ \&\fINEW_GROUP\fR
+.RS 4
+The name of the group will be changed from
+\fIGROUP\fR
+to
+\fINEW_GROUP\fR
+name\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+When used with the
+\fB\-g\fR
+option, allow to change the group
+\fIGID\fR
+to a non\-unique value\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\*(Aqs password policy\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Secure group account information\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.SH "EXIT VALUES"
+.PP
+The
+\fBgroupmod\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+E_SUCCESS: success
+.RE
+.PP
+\fI2\fR
+.RS 4
+E_USAGE: invalid command syntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+E_BAD_ARG: invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+E_GID_IN_USE: specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI6\fR
+.RS 4
+E_NOTFOUND: specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI9\fR
+.RS 4
+E_NAME_IN_USE: group name already in use
+.RE
+.PP
+\fI10\fR
+.RS 4
+E_GRP_UPDATE: can\*(Aqt update group file
+.RE
+.PP
+\fI11\fR
+.RS 4
+E_CLEANUP_SERVICE: can\*(Aqt setup cleanup service
+.RE
+.PP
+\fI12\fR
+.RS 4
+E_PAM_USERNAME: can\*(Aqt determine your username for use with pam
+.RE
+.PP
+\fI13\fR
+.RS 4
+E_PAM_ERROR: pam returned an error, see syslog facility id groupmod for the PAM error message
+.RE
+.SH "SEE ALSO"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/man8/grpck.8 b/man/man8/grpck.8
new file mode 100644
index 0000000..a9094e4
--- /dev/null
+++ b/man/man8/grpck.8
@@ -0,0 +1,247 @@
+'\" t
+.\" Title: grpck
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: System Management Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "GRPCK" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+grpck \- verify integrity of group files
+.SH "SYNOPSIS"
+.HP \w'\fBgrpck\fR\ 'u
+\fBgrpck\fR [options] [\fIgroup\fR\ [\ \fIshadow\fR\ ]]
+.SH "DESCRIPTION"
+.PP
+The
+\fBgrpck\fR
+command verifies the integrity of the groups information\&. It checks that all entries in
+/etc/group
+and /etc/gshadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+Checks are made to verify that each entry has:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+the correct number of fields
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a unique and valid group name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid group identifier
+(/etc/group only)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid list of members
+and administrators
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a corresponding entry in the
+/etc/gshadow
+file (respectively
+/etc/group
+for the
+gshadow
+checks)
+.RE
+.PP
+The checks for correct number of fields and unique group name are fatal\&. If an entry has the wrong number of fields, the user will be prompted to delete the entire line\&. If the user does not answer affirmatively, all further checks are bypassed\&. An entry with a duplicated group name is prompted for deletion, but the remaining checks will still be made\&. All other errors are warnings and the user is encouraged to run the
+\fBgroupmod\fR
+command to correct the error\&.
+.PP
+The commands which operate on the
+/etc/group
+and /etc/gshadow files
+are not able to alter corrupted or duplicated entries\&.
+\fBgrpck\fR
+should be used in those circumstances to remove the offending entries\&.
+.SH "OPTIONS"
+.PP
+The
+\fB\-r\fR
+and
+\fB\-s\fR
+options cannot be combined\&.
+.PP
+The options which apply to the
+\fBgrpck\fR
+command are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-read\-only\fR
+.RS 4
+Execute the
+\fBgrpck\fR
+command in read\-only mode\&. This causes all questions regarding changes to be answered
+\fIno\fR
+without user intervention\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sort\fR
+.RS 4
+Sort entries in
+/etc/group
+and /etc/gshadow
+by GID\&.
+.RE
+.PP
+By default,
+\fBgrpck\fR
+operates on
+/etc/group
+and /etc/gshadow\&. The user may select alternate files with the
+\fIgroup\fR
+and \fIshadow\fR parameters\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Secure group account information\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.SH "EXIT VALUES"
+.PP
+The
+\fBgrpck\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI2\fR
+.RS 4
+one or more bad group entries
+.RE
+.PP
+\fI3\fR
+.RS 4
+can\*(Aqt open group files
+.RE
+.PP
+\fI4\fR
+.RS 4
+can\*(Aqt lock group files
+.RE
+.PP
+\fI5\fR
+.RS 4
+can\*(Aqt update group files
+.RE
+.SH "SEE ALSO"
+.PP
+\fBgroup\fR(5),
+\fBgroupmod\fR(8),
+\fBgshadow\fR(5),
+\fBpasswd\fR(5),
+\fBpwck\fR(8),
+\fBshadow\fR(5)\&.
diff --git a/man/man8/grpconv.8 b/man/man8/grpconv.8
new file mode 100644
index 0000000..6eed9e8
--- /dev/null
+++ b/man/man8/grpconv.8
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/man8/grpunconv.8 b/man/man8/grpunconv.8
new file mode 100644
index 0000000..6eed9e8
--- /dev/null
+++ b/man/man8/grpunconv.8
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/man8/lastlog.8 b/man/man8/lastlog.8
new file mode 100644
index 0000000..3ca8650
--- /dev/null
+++ b/man/man8/lastlog.8
@@ -0,0 +1,137 @@
+'\" t
+.\" Title: lastlog
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: System Management Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "LASTLOG" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+lastlog \- reports the most recent login of all users or of a given user
+.SH "SYNOPSIS"
+.HP \w'\fBlastlog\fR\ 'u
+\fBlastlog\fR [\fIoptions\fR]
+.SH "DESCRIPTION"
+.PP
+\fBlastlog\fR
+formats and prints the contents of the last login log
+/var/log/lastlog
+file\&. The
+\fIlogin\-name\fR,
+\fIport\fR, and
+\fIlast login time\fR
+will be printed\&. The default (no flags) causes lastlog entries to be printed, sorted by their order in
+/etc/passwd\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBlastlog\fR
+command are:
+.PP
+\fB\-b\fR, \fB\-\-before\fR\ \&\fIDAYS\fR
+.RS 4
+Print only lastlog records older than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-C\fR, \fB\-\-clear\fR
+.RS 4
+Clear lastlog record of a user\&. This option can be used only together with
+\fB\-u\fR
+(\fB\-\-user\fR))\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-S\fR, \fB\-\-set\fR
+.RS 4
+Set lastlog record of a user to the current time\&. This option can be used only together with
+\fB\-u\fR
+(\fB\-\-user\fR))\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR\ \&\fIDAYS\fR
+.RS 4
+Print the lastlog records more recent than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR\ \&\fILOGIN\fR|\fIRANGE\fR
+.RS 4
+Print the lastlog record of the specified user(s)\&.
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+If the user has never logged in the message
+\fI** Never logged in**\fR
+will be displayed instead of the port and time\&.
+.PP
+Only the entries for the current users of the system will be displayed\&. Other entries may exist for users that were deleted previously\&.
+.SH "NOTE"
+.PP
+The
+lastlog
+file is a database which contains info on the last login of each user\&. You should not rotate it\&. It is a sparse file, so its size on the disk is usually much smaller than the one shown by "\fBls \-l\fR" (which can indicate a really big file if you have in
+passwd
+users with a high UID)\&. You can display its real size with "\fBls \-s\fR"\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.SH "FILES"
+.PP
+/var/log/lastlog
+.RS 4
+Database times of previous user logins\&.
+.RE
+.SH "CAVEATS"
+.PP
+Large gaps in UID numbers will cause the lastlog program to run longer with no output to the screen (i\&.e\&. if in lastlog database there is no entries for users with UID between 170 and 800 lastlog will appear to hang as it processes entries with UIDs 171\-799)\&.
diff --git a/man/man8/logoutd.8 b/man/man8/logoutd.8
new file mode 100644
index 0000000..88fbc04
--- /dev/null
+++ b/man/man8/logoutd.8
@@ -0,0 +1,57 @@
+'\" t
+.\" Title: logoutd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: System Management Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "LOGOUTD" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+logoutd \- enforce login time restrictions
+.SH "SYNOPSIS"
+.HP \w'\fBlogoutd\fR\ 'u
+\fBlogoutd\fR
+.SH "DESCRIPTION"
+.PP
+\fBlogoutd\fR
+enforces the login time and port restrictions specified in
+/etc/porttime\&.
+\fBlogoutd\fR
+should be started from
+/etc/rc\&. The
+/var/run/utmp
+file is scanned periodically and each user name is checked to see if the named user is permitted on the named port at the current time\&. Any login session which is violating the restrictions in
+/etc/porttime
+is terminated\&.
+.SH "FILES"
+.PP
+/etc/porttime
+.RS 4
+File containing port access\&.
+.RE
+.PP
+/var/run/utmp
+.RS 4
+List of current login sessions\&.
+.RE
diff --git a/man/man8/newusers.8 b/man/man8/newusers.8
new file mode 100644
index 0000000..df37f7b
--- /dev/null
+++ b/man/man8/newusers.8
@@ -0,0 +1,449 @@
+'\" t
+.\" Title: newusers
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: System Management Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "NEWUSERS" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+newusers \- update and create new users in batch
+.SH "SYNOPSIS"
+.HP \w'\fBnewusers\fR\ 'u
+\fBnewusers\fR [\fIoptions\fR] [\fIfile\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBnewusers\fR
+command reads a
+\fIfile\fR
+(or the standard input by default) and uses this information to update a set of existing users or to create new users\&. Each line is in the same format as the standard password file (see
+\fBpasswd\fR(5)) with the exceptions explained below:
+.PP
+pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell
+.PP
+\fIpw_name\fR
+.RS 4
+This is the name of the user\&.
+.sp
+It can be the name of a new user or the name of an existing user (or a user created before by
+\fBnewusers\fR)\&. In case of an existing user, the user\*(Aqs information will be changed, otherwise a new user will be created\&.
+.RE
+.PP
+\fIpw_passwd\fR
+.RS 4
+This field will be encrypted and used as the new value of the encrypted password\&.
+.RE
+.PP
+\fIpw_uid\fR
+.RS 4
+This field is used to define the UID of the user\&.
+.sp
+If the field is empty, a new (unused) UID will be defined automatically by
+\fBnewusers\fR\&.
+.sp
+If this field contains a number, this number will be used as the UID\&.
+.sp
+If this field contains the name of an existing user (or the name of a user created before by
+\fBnewusers\fR), the UID of the specified user will be used\&.
+.sp
+If the UID of an existing user is changed, the files ownership of the user\*(Aqs file should be fixed manually\&.
+.RE
+.PP
+\fIpw_gid\fR
+.RS 4
+This field is used to define the primary group ID for the user\&.
+.sp
+If this field contains the name of an existing group (or a group created before by
+\fBnewusers\fR), the GID of this group will be used as the primary group ID for the user\&.
+.sp
+If this field is a number, this number will be used as the primary group ID of the user\&. If no groups exist with this GID, a new group will be created with this GID, and the name of the user\&.
+.sp
+If this field is empty, a new group will be created with the name of the user and a GID will be automatically defined by
+\fBnewusers\fR
+to be used as the primary group ID for the user and as the GID for the new group\&.
+.sp
+If this field contains the name of a group which does not exist (and was not created before by
+\fBnewusers\fR), a new group will be created with the specified name and a GID will be automatically defined by
+\fBnewusers\fR
+to be used as the primary group ID for the user and GID for the new group\&.
+.RE
+.PP
+\fIpw_gecos\fR
+.RS 4
+This field is copied in the GECOS field of the user\&.
+.RE
+.PP
+\fIpw_dir\fR
+.RS 4
+This field is used to define the home directory of the user\&.
+.sp
+If this field does not specify an existing directory, the specified directory is created, with ownership set to the user being created or updated and its primary group\&.
+.sp
+If the home directory of an existing user is changed,
+\fBnewusers\fR
+does not move or copy the content of the old directory to the new location\&. This should be done manually\&.
+.RE
+.PP
+\fIpw_shell\fR
+.RS 4
+This field defines the shell of the user\&. No checks are performed on this field\&.
+.RE
+.PP
+\fBnewusers\fR
+first tries to create or change all the specified users, and then write these changes to the user or group databases\&. If an error occurs (except in the final writes to the databases), no changes are committed to the databases\&.
+.PP
+This command is intended to be used in a large system environment where many accounts are updated at a single time\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBnewusers\fR
+command are:
+.PP
+\fB\-\-badname\fR\ \&
+.RS 4
+Allow names that do not conform to standards\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+Use the specified method to encrypt the passwords\&.
+.sp
+The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc support these methods\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Create a system account\&.
+.sp
+System users will be created with no aging information in
+/etc/shadow, and their numeric identifiers are chosen in the
+\fBSYS_UID_MIN\fR\-\fBSYS_UID_MAX\fR
+range, defined in
+login\&.defs, instead of
+\fBUID_MIN\fR\-\fBUID_MAX\fR
+(and their
+\fBGID\fR
+counterparts for the creation of groups)\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+Use the specified number of rounds to encrypt the passwords\&.
+.sp
+The value 0 means that the system will choose the default number of rounds for the crypt method (5000)\&.
+.sp
+A minimal value of 1000 and a maximal value of 999,999,999 will be enforced\&.
+.sp
+You can only use this option with the SHA256 or SHA512 crypt method\&.
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "CAVEATS"
+.PP
+The input file must be protected since it contains unencrypted passwords\&.
+.PP
+You should make sure the passwords and the encryption method respect the system\*(Aqs password policy\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBGID_MIN\fR
+(resp\&.
+\fBGID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBHOME_MODE\fR (number)
+.RS 4
+The mode for new home directories\&. If not specified, the
+\fBUMASK\fR
+is used to create the mode\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this to set the mode of the home directory they create\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+The maximum number of days a password may be used\&. If the password is older than this, a password change will be forced\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+The minimum number of days allowed between password changes\&. Any password changes attempted sooner than this will be rejected\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+The number of days warning given before a password expires\&. A zero means warning is given only upon the day of expiration, a negative value means no warning is given\&. If not specified, no warning will be provided\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999,999,999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.PP
+\fBSUB_GID_MIN\fR (number), \fBSUB_GID_MAX\fR (number), \fBSUB_GID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate group IDs) allocate
+\fBSUB_GID_COUNT\fR
+unused group IDs from the range
+\fBSUB_GID_MIN\fR
+to
+\fBSUB_GID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR,
+\fBSUB_GID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSUB_UID_MIN\fR (number), \fBSUB_UID_MAX\fR (number), \fBSUB_UID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate user IDs) allocate
+\fBSUB_UID_COUNT\fR
+unused user IDs from the range
+\fBSUB_UID_MIN\fR
+to
+\fBSUB_UID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR,
+\fBSUB_UID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_GID_MIN\fR
+(resp\&.
+\fBSYS_GID_MAX\fR) is 101 (resp\&.
+\fBGID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_UID_MIN\fR
+(resp\&.
+\fBSYS_UID_MAX\fR) is 101 (resp\&.
+\fBUID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBUID_MIN\fR
+(resp\&.
+\fBUID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create if
+\fBHOME_MODE\fR
+is not set\&.
+.sp
+It is also used by
+\fBlogin\fR
+to define users\*(Aq initial umask\&. Note that this mask can be overridden by the user\*(Aqs GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.SH "FILES"
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Secure group account information\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.PP
+/etc/subgid
+.RS 4
+Per user subordinate group IDs\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+Per user subordinate user IDs\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(1),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuseradd\fR(8)\&.
diff --git a/man/man8/nologin.8 b/man/man8/nologin.8
new file mode 100644
index 0000000..e02954a
--- /dev/null
+++ b/man/man8/nologin.8
@@ -0,0 +1,55 @@
+'\" t
+.\" Title: nologin
+.\" Author: Nicolas François <nicolas.francois@centraliens.net>
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: System Management Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "NOLOGIN" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+nologin \- politely refuse a login
+.SH "SYNOPSIS"
+.HP \w'\fBnologin\fR\ 'u
+\fBnologin\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBnologin\fR
+command displays a message that an account is not available and exits non\-zero\&. It is intended as a replacement shell field for accounts that have been disabled\&.
+.PP
+To disable all logins, investigate
+\fBnologin\fR(5)\&.
+.PP
+If
+\fBSSH_ORIGINAL_COMMAND\fR
+is populated it will be logged\&.
+.SH "SEE ALSO"
+.PP
+\fBlogin\fR(1),
+\fBnologin\fR(5)\&.
+.SH "HISTORY"
+.PP
+The
+\fBnologin\fR
+command appeared in BSD 4\&.4\&.
diff --git a/man/man8/pwck.8 b/man/man8/pwck.8
new file mode 100644
index 0000000..aacc2e4
--- /dev/null
+++ b/man/man8/pwck.8
@@ -0,0 +1,328 @@
+'\" t
+.\" Title: pwck
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: System Management Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "PWCK" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+pwck \- verify integrity of password files
+.SH "SYNOPSIS"
+.HP \w'\fBpwck\fR\ 'u
+\fBpwck\fR [options] [\fIpasswd\fR\ [\ \fIshadow\fR\ ]]
+.SH "DESCRIPTION"
+.PP
+The
+\fBpwck\fR
+command verifies the integrity of the users and authentication information\&. It checks that all entries in
+/etc/passwd
+and
+/etc/shadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+Checks are made to verify that each entry has:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+the correct number of fields
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a unique and valid user name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid user and group identifier
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid primary group
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid home directory
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid login shell
+.RE
+.PP
+shadow
+checks are enabled when a second file parameter is specified or when
+/etc/shadow
+exists on the system\&.
+.PP
+These checks are the following:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+every passwd entry has a matching shadow entry, and every shadow entry has a matching passwd entry
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+passwords are specified in the shadowed file
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+shadow entries have the correct number of fields
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+shadow entries are unique in shadow
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+the last password changes are not in the future
+.RE
+.PP
+The checks for correct number of fields and unique user name are fatal\&. If the entry has the wrong number of fields, the user will be prompted to delete the entire line\&. If the user does not answer affirmatively, all further checks are bypassed\&. An entry with a duplicated user name is prompted for deletion, but the remaining checks will still be made\&. All other errors are warning and the user is encouraged to run the
+\fBusermod\fR
+command to correct the error\&.
+.PP
+The commands which operate on the
+/etc/passwd
+file are not able to alter corrupted or duplicated entries\&.
+\fBpwck\fR
+should be used in those circumstances to remove the offending entry\&.
+.SH "OPTIONS"
+.PP
+The
+\fB\-r\fR
+and
+\fB\-s\fR
+options cannot be combined\&.
+.PP
+The options which apply to the
+\fBpwck\fR
+command are:
+.PP
+\fB\-\-badname\fR\ \&
+.RS 4
+Allow names that do not conform to standards\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Report errors only\&. The warnings which do not require any action from the user won\*(Aqt be displayed\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-read\-only\fR
+.RS 4
+Execute the
+\fBpwck\fR
+command in read\-only mode\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sort\fR
+.RS 4
+Sort entries in
+/etc/passwd
+and
+/etc/shadow
+by UID\&.
+.RE
+.PP
+By default,
+\fBpwck\fR
+operates on the files
+/etc/passwd
+and
+/etc/shadow\&. The user may select alternate files with the
+\fIpasswd\fR
+and
+\fIshadow\fR
+parameters\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+The maximum number of days a password may be used\&. If the password is older than this, a password change will be forced\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+The minimum number of days allowed between password changes\&. Any password changes attempted sooner than this will be rejected\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+The number of days warning given before a password expires\&. A zero means warning is given only upon the day of expiration, a negative value means no warning is given\&. If not specified, no warning will be provided\&.
+.RE
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.SH "EXIT VALUES"
+.PP
+The
+\fBpwck\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI2\fR
+.RS 4
+one or more bad password entries
+.RE
+.PP
+\fI3\fR
+.RS 4
+can\*(Aqt open password files
+.RE
+.PP
+\fI4\fR
+.RS 4
+can\*(Aqt lock password files
+.RE
+.PP
+\fI5\fR
+.RS 4
+can\*(Aqt update password files
+.RE
+.PP
+\fI6\fR
+.RS 4
+can\*(Aqt sort password files
+.RE
+.SH "SEE ALSO"
+.PP
+\fBgroup\fR(5),
+\fBgrpck\fR(8),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/man8/pwconv.8 b/man/man8/pwconv.8
new file mode 100644
index 0000000..a63a95d
--- /dev/null
+++ b/man/man8/pwconv.8
@@ -0,0 +1,193 @@
+'\" t
+.\" Title: pwconv
+.\" Author: Marek Michałkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: System Management Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "PWCONV" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+pwconv, pwunconv, grpconv, grpunconv \- convert to and from shadow passwords and groups
+.SH "SYNOPSIS"
+.HP \w'\fBpwconv\fR\ 'u
+\fBpwconv\fR [\fIoptions\fR]
+.HP \w'\fBpwunconv\fR\ 'u
+\fBpwunconv\fR [\fIoptions\fR]
+.HP \w'\fBgrpconv\fR\ 'u
+\fBgrpconv\fR [\fIoptions\fR]
+.HP \w'\fBgrpunconv\fR\ 'u
+\fBgrpunconv\fR [\fIoptions\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBpwconv\fR
+command creates
+\fIshadow\fR
+from
+\fIpasswd\fR
+and an optionally existing
+\fIshadow\fR\&.
+.PP
+The
+\fBpwunconv\fR
+command creates
+\fIpasswd\fR
+from
+\fIpasswd\fR
+and
+\fIshadow\fR
+and then removes
+\fIshadow\fR\&.
+.PP
+The
+\fBgrpconv\fR
+command creates
+\fIgshadow\fR
+from
+\fIgroup\fR
+and an optionally existing
+\fIgshadow\fR\&.
+.PP
+The
+\fBgrpunconv\fR
+command creates
+\fIgroup\fR
+from
+\fIgroup\fR
+and
+\fIgshadow\fR
+and then removes
+\fIgshadow\fR\&.
+.PP
+These four programs all operate on the normal and shadow password and group files:
+/etc/passwd,
+/etc/group,
+/etc/shadow, and
+/etc/gshadow\&.
+.PP
+Each program acquires the necessary locks before conversion\&.
+\fBpwconv\fR
+and
+\fBgrpconv\fR
+are similar\&. First, entries in the shadowed file which don\*(Aqt exist in the main file are removed\&. Then, shadowed entries which don\*(Aqt have `x\*(Aq as the password in the main file are updated\&. Any missing shadowed entries are added\&. Finally, passwords in the main file are replaced with `x\*(Aq\&. These programs can be used for initial conversion as well to update the shadowed file if the main file is edited by hand\&.
+.PP
+\fBpwconv\fR
+will use the values of
+\fIPASS_MIN_DAYS\fR,
+\fIPASS_MAX_DAYS\fR, and
+\fIPASS_WARN_AGE\fR
+from
+/etc/login\&.defs
+when adding new entries to
+/etc/shadow\&.
+.PP
+Likewise
+\fBpwunconv\fR
+and
+\fBgrpunconv\fR
+are similar\&. Passwords in the main file are updated from the shadowed file\&. Entries which exist in the main file but not in the shadowed file are left alone\&. Finally, the shadowed file is removed\&. Some password aging information is lost by
+\fBpwunconv\fR\&. It will convert what it can\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBpwconv\fR,
+\fBpwunconv\fR,
+\fBgrpconv\fR, and
+\fBgrpunconv\fR
+commands are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.SH "BUGS"
+.PP
+Errors in the password or group files (such as invalid or duplicate entries) may cause these programs to loop forever or fail in other strange ways\&. Please run
+\fBpwck\fR
+and
+\fBgrpck\fR
+to correct any such errors before converting to or from shadow passwords or groups\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variable in
+/etc/login\&.defs
+changes the behavior of
+\fBgrpconv\fR
+and
+\fBgrpunconv\fR:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of
+\fBpwconv\fR:
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+The maximum number of days a password may be used\&. If the password is older than this, a password change will be forced\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+The minimum number of days allowed between password changes\&. Any password changes attempted sooner than this will be rejected\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+The number of days warning given before a password expires\&. A zero means warning is given only upon the day of expiration, a negative value means no warning is given\&. If not specified, no warning will be provided\&.
+.RE
+.SH "FILES"
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBgrpck\fR(8),
+\fBlogin.defs\fR(5),
+\fBpwck\fR(8)\&.
diff --git a/man/man8/pwunconv.8 b/man/man8/pwunconv.8
new file mode 100644
index 0000000..6eed9e8
--- /dev/null
+++ b/man/man8/pwunconv.8
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/man8/sulogin.8 b/man/man8/sulogin.8
new file mode 100644
index 0000000..37f25bc
--- /dev/null
+++ b/man/man8/sulogin.8
@@ -0,0 +1,116 @@
+'\" t
+.\" Title: sulogin
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: System Management Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "SULOGIN" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sulogin \- Single\-user login
+.SH "SYNTAX"
+.PP
+\fBsulogin\fR
+[\fItty\-device\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBsulogin\fR
+command is invoked by
+\fBinit\fR
+prior to allowing the user access to the system when in single user mode\&. This feature may only be available on certain systems where
+\fBinit\fR
+has been modified accordingly, or where the
+/etc/inittab
+has an entry for a single user login\&.
+.PP
+The user is prompted
+.PP
+Type control\-d to proceed with normal startup,
+(or give root password for system maintenance):
+.PP
+Input and output will be performed with the standard file descriptors unless the optional device name argument is provided\&.
+.PP
+If the user enters the correct root password, a login session is initiated\&. When
+\fIEOF\fR
+is pressed instead, the system enters multi\-user mode\&.
+.PP
+After the user exits the single\-user shell, or presses
+\fIEOF\fR, the system begins the initialization process required to enter multi\-user mode\&.
+.SH "CAVEATS"
+.PP
+This command can only be used if
+\fBinit\fR
+has been modified to call
+\fBsulogin\fR
+instead of
+/bin/sh, or if the user has set the
+\fIinittab\fR
+to support a single user login\&. For example, the line:
+.PP
+co:s:respawn:/etc/sulogin /dev/console
+.PP
+should execute the sulogin command in single user mode\&.
+.PP
+As complete an environment as possible is created\&. However, various devices may be unmounted or uninitialized and many of the user commands may be unavailable or nonfunctional as a result\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.SH "FILES"
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBlogin\fR(1),
+\fBsh\fR(1),
+\fBinit\fR(8)\&.
diff --git a/man/man8/useradd.8 b/man/man8/useradd.8
new file mode 100644
index 0000000..21426cb
--- /dev/null
+++ b/man/man8/useradd.8
@@ -0,0 +1,784 @@
+'\" t
+.\" Title: useradd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: System Management Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "USERADD" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+useradd \- create a new user or update default new user information
+.SH "SYNOPSIS"
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR [\fIoptions\fR] \fILOGIN\fR
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR \-D
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR \-D [\fIoptions\fR]
+.SH "DESCRIPTION"
+.PP
+When invoked without the
+\fB\-D\fR
+option, the
+\fBuseradd\fR
+command creates a new user account using the values specified on the command line plus the default values from the system\&. Depending on command line options, the
+\fBuseradd\fR
+command will update system files and may also create the new user\*(Aqs home directory and copy initial files\&.
+.PP
+By default, a group will also be created for the new user (see
+\fB\-g\fR,
+\fB\-N\fR,
+\fB\-U\fR, and
+\fBUSERGROUPS_ENAB\fR)\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBuseradd\fR
+command are:
+.PP
+\fB\-\-badname\fR\ \&
+.RS 4
+Allow names that do not conform to standards\&.
+.RE
+.PP
+\fB\-b\fR, \fB\-\-base\-dir\fR\ \&\fIBASE_DIR\fR
+.RS 4
+The default base directory for the system if
+\fB\-d\fR\ \&\fIHOME_DIR\fR
+is not specified\&.
+\fIBASE_DIR\fR
+is concatenated with the account name to define the home directory\&. If the
+\fB\-m\fR
+option is not used,
+\fIBASE_DIR\fR
+must exist\&.
+.sp
+If this option is not specified,
+\fBuseradd\fR
+will use the base directory specified by the
+\fBHOME\fR
+variable in
+/etc/default/useradd, or
+/home
+by default\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-comment\fR\ \&\fICOMMENT\fR
+.RS 4
+Any text string\&. It is generally a short description of the login, and is currently used as the field for the user\*(Aqs full name\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-home\-dir\fR\ \&\fIHOME_DIR\fR
+.RS 4
+The new user will be created using
+\fIHOME_DIR\fR
+as the value for the user\*(Aqs login directory\&. The default is to append the
+\fILOGIN\fR
+name to
+\fIBASE_DIR\fR
+and use that as the login directory name\&. The directory
+\fIHOME_DIR\fR
+does not have to exist but will not be created if it is missing\&.
+.RE
+.PP
+\fB\-D\fR, \fB\-\-defaults\fR
+.RS 4
+See below, the subsection "Changing the default values"\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+The date on which the user account will be disabled\&. The date is specified in the format
+\fIYYYY\-MM\-DD\fR\&.
+.sp
+If not specified,
+\fBuseradd\fR
+will use the default expiry date specified by the
+\fBEXPIRE\fR
+variable in
+/etc/default/useradd, or an empty string (no expiry) by default\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+The number of days after a password expires until the account is permanently disabled\&. A value of 0 disables the account as soon as the password has expired, and a value of \-1 disables the feature\&.
+.sp
+If not specified,
+\fBuseradd\fR
+will use the default inactivity period specified by the
+\fBINACTIVE\fR
+variable in
+/etc/default/useradd, or \-1 by default\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGROUP\fR
+.RS 4
+The group name or number of the user\*(Aqs initial login group\&. The group name must exist\&. A group number must refer to an already existing group\&.
+.sp
+If not specified, the behavior of
+\fBuseradd\fR
+will depend on the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&. If this variable is set to
+\fIyes\fR
+(or
+\fB\-U/\-\-user\-group\fR
+is specified on the command line), a group will be created for the user, with the same name as her loginname\&. If the variable is set to
+\fIno\fR
+(or
+\fB\-N/\-\-no\-user\-group\fR
+is specified on the command line), useradd will set the primary group of the new user to the value specified by the
+\fBGROUP\fR
+variable in
+/etc/default/useradd, or 100 by default\&.
+.RE
+.PP
+\fB\-G\fR, \fB\-\-groups\fR\ \&\fIGROUP1\fR[\fI,GROUP2,\&.\&.\&.\fR[\fI,GROUPN\fR]]]
+.RS 4
+A list of supplementary groups which the user is also a member of\&. Each group is separated from the next by a comma, with no intervening whitespace\&. The groups are subject to the same restrictions as the group given with the
+\fB\-g\fR
+option\&. The default is for the user to belong only to the initial group\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-k\fR, \fB\-\-skel\fR\ \&\fISKEL_DIR\fR
+.RS 4
+The skeleton directory, which contains files and directories to be copied in the user\*(Aqs home directory, when the home directory is created by
+\fBuseradd\fR\&.
+.sp
+This option is only valid if the
+\fB\-m\fR
+(or
+\fB\-\-create\-home\fR) option is specified\&.
+.sp
+If this option is not set, the skeleton directory is defined by the
+\fBSKEL\fR
+variable in
+/etc/default/useradd
+or, by default,
+/etc/skel\&.
+.sp
+If possible, the ACLs and extended attributes are copied\&.
+.RE
+.PP
+\fB\-K\fR, \fB\-\-key\fR\ \&\fIKEY\fR=\fIVALUE\fR
+.RS 4
+Overrides
+/etc/login\&.defs
+defaults (\fBUID_MIN\fR,
+\fBUID_MAX\fR,
+\fBUMASK\fR,
+\fBPASS_MAX_DAYS\fR
+and others)\&.
+
+Example:
+\fB\-K\fR\ \&\fIPASS_MAX_DAYS\fR=\fI\-1\fR
+can be used when creating system account to turn off password aging, even though system account has no password at all\&. Multiple
+\fB\-K\fR
+options can be specified, e\&.g\&.:
+\fB\-K\fR\ \&\fIUID_MIN\fR=\fI100\fR\ \&
+\fB\-K\fR\ \&\fIUID_MAX\fR=\fI499\fR
+.RE
+.PP
+\fB\-l\fR, \fB\-\-no\-log\-init\fR
+.RS 4
+Do not add the user to the lastlog and faillog databases\&.
+.sp
+By default, the user\*(Aqs entries in the lastlog and faillog databases are reset to avoid reusing the entry from a previously deleted user\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-create\-home\fR
+.RS 4
+Create the user\*(Aqs home directory if it does not exist\&. The files and directories contained in the skeleton directory (which can be defined with the
+\fB\-k\fR
+option) will be copied to the home directory\&.
+.sp
+By default, if this option is not specified and
+\fBCREATE_HOME\fR
+is not enabled, no home directories are created\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-no\-create\-home\fR
+.RS 4
+Do no create the user\*(Aqs home directory, even if the system wide setting from
+/etc/login\&.defs
+(\fBCREATE_HOME\fR) is set to
+\fIyes\fR\&.
+.RE
+.PP
+\fB\-N\fR, \fB\-\-no\-user\-group\fR
+.RS 4
+Do not create a group with the same name as the user, but add the user to the group specified by the
+\fB\-g\fR
+option or by the
+\fBGROUP\fR
+variable in
+/etc/default/useradd\&.
+.sp
+The default behavior (if the
+\fB\-g\fR,
+\fB\-N\fR, and
+\fB\-U\fR
+options are not specified) is defined by the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+Allow the creation of a user account with a duplicate (non\-unique) UID\&.
+.sp
+This option is only valid in combination with the
+\fB\-u\fR
+option\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&. The default is to disable the password\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\*(Aqs password policy\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Create a system account\&.
+.sp
+System users will be created with no aging information in
+/etc/shadow, and their numeric identifiers are chosen in the
+\fBSYS_UID_MIN\fR\-\fBSYS_UID_MAX\fR
+range, defined in
+/etc/login\&.defs, instead of
+\fBUID_MIN\fR\-\fBUID_MAX\fR
+(and their
+\fBGID\fR
+counterparts for the creation of groups)\&.
+.sp
+Note that
+\fBuseradd\fR
+will not create a home directory for such a user, regardless of the default setting in
+/etc/login\&.defs
+(\fBCREATE_HOME\fR)\&. You have to specify the
+\fB\-m\fR
+options if you want a home directory for a system account to be created\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+The name of the user\*(Aqs login shell\&. The default is to leave this field blank, which causes the system to select the default login shell specified by the
+\fBSHELL\fR
+variable in
+/etc/default/useradd, or an empty string by default\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-uid\fR\ \&\fIUID\fR
+.RS 4
+The numerical value of the user\*(Aqs ID\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&. The default is to use the smallest ID value greater than or equal to
+\fBUID_MIN\fR
+and greater than every other user\&.
+.sp
+See also the
+\fB\-r\fR
+option and the
+\fBUID_MAX\fR
+description\&.
+.RE
+.PP
+\fB\-U\fR, \fB\-\-user\-group\fR
+.RS 4
+Create a group with the same name as the user, and add the user to this group\&.
+.sp
+The default behavior (if the
+\fB\-g\fR,
+\fB\-N\fR, and
+\fB\-U\fR
+options are not specified) is defined by the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR\ \&\fISEUSER\fR
+.RS 4
+The SELinux user for the user\*(Aqs login\&. The default is to leave this field blank, which causes the system to select the default SELinux user\&.
+.RE
+.SS "Changing the default values"
+.PP
+When invoked with only the
+\fB\-D\fR
+option,
+\fBuseradd\fR
+will display the current default values\&. When invoked with
+\fB\-D\fR
+plus other options,
+\fBuseradd\fR
+will update the default values for the specified options\&. Valid default\-changing options are:
+.PP
+\fB\-b\fR, \fB\-\-base\-dir\fR\ \&\fIBASE_DIR\fR
+.RS 4
+The path prefix for a new user\*(Aqs home directory\&. The user\*(Aqs name will be affixed to the end of
+\fIBASE_DIR\fR
+to form the new user\*(Aqs home directory name, if the
+\fB\-d\fR
+option is not used when creating a new account\&.
+.sp
+This option sets the
+\fBHOME\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+The date on which the user account is disabled\&.
+.sp
+This option sets the
+\fBEXPIRE\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+The number of days after a password has expired before the account will be disabled\&.
+.sp
+This option sets the
+\fBINACTIVE\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGROUP\fR
+.RS 4
+The group name or ID for a new user\*(Aqs initial group (when the
+\fB\-N/\-\-no\-user\-group\fR
+is used or when the
+\fBUSERGROUPS_ENAB\fR
+variable is set to
+\fIno\fR
+in
+/etc/login\&.defs)\&. The named group must exist, and a numerical group ID must have an existing entry\&.
+.sp
+This option sets the
+\fBGROUP\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+The name of a new user\*(Aqs login shell\&.
+.sp
+This option sets the
+\fBSHELL\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.SH "NOTES"
+.PP
+The system administrator is responsible for placing the default user files in the
+/etc/skel/
+directory (or any other skeleton directory specified in
+/etc/default/useradd
+or on the command line)\&.
+.SH "CAVEATS"
+.PP
+You may not add a user to a NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.PP
+Similarly, if the username already exists in an external user database such as NIS or LDAP,
+\fBuseradd\fR
+will deny the user account creation request\&.
+.PP
+Usernames must start with a lower case letter or an underscore, followed by lower case letters, digits, underscores, or dashes\&. They can end with a dollar sign\&. In regular expression terms: [a\-z_][a\-z0\-9_\-]*[$]?
+.PP
+Usernames may only be up to 32 characters long\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCREATE_HOME\fR (boolean)
+.RS 4
+Indicate if a home directory should be created by default for new users\&.
+.sp
+This setting does not apply to system users, and can be overridden on the command line\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBGID_MIN\fR
+(resp\&.
+\fBGID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBHOME_MODE\fR (number)
+.RS 4
+The mode for new home directories\&. If not specified, the
+\fBUMASK\fR
+is used to create the mode\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this to set the mode of the home directory they create\&.
+.RE
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+The maximum number of days a password may be used\&. If the password is older than this, a password change will be forced\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+The minimum number of days allowed between password changes\&. Any password changes attempted sooner than this will be rejected\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+The number of days warning given before a password expires\&. A zero means warning is given only upon the day of expiration, a negative value means no warning is given\&. If not specified, no warning will be provided\&.
+.RE
+.PP
+\fBSUB_GID_MIN\fR (number), \fBSUB_GID_MAX\fR (number), \fBSUB_GID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate group IDs) allocate
+\fBSUB_GID_COUNT\fR
+unused group IDs from the range
+\fBSUB_GID_MIN\fR
+to
+\fBSUB_GID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR,
+\fBSUB_GID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSUB_UID_MIN\fR (number), \fBSUB_UID_MAX\fR (number), \fBSUB_UID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate user IDs) allocate
+\fBSUB_UID_COUNT\fR
+unused user IDs from the range
+\fBSUB_UID_MIN\fR
+to
+\fBSUB_UID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR,
+\fBSUB_UID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_GID_MIN\fR
+(resp\&.
+\fBSYS_GID_MAX\fR) is 101 (resp\&.
+\fBGID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_UID_MIN\fR
+(resp\&.
+\fBSYS_UID_MAX\fR) is 101 (resp\&.
+\fBUID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBUID_MIN\fR
+(resp\&.
+\fBUID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create if
+\fBHOME_MODE\fR
+is not set\&.
+.sp
+It is also used by
+\fBlogin\fR
+to define users\*(Aq initial umask\&. Note that this mask can be overridden by the user\*(Aqs GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FILES"
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Secure group account information\&.
+.RE
+.PP
+/etc/default/useradd
+.RS 4
+Default values for account creation\&.
+.RE
+.PP
+/etc/skel/
+.RS 4
+Directory containing default files\&.
+.RE
+.PP
+/etc/subgid
+.RS 4
+Per user subordinate group IDs\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+Per user subordinate user IDs\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "EXIT VALUES"
+.PP
+The
+\fBuseradd\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+can\*(Aqt update password file
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+UID already in use (and no
+\fB\-o\fR)
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI9\fR
+.RS 4
+username already in use
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.PP
+\fI12\fR
+.RS 4
+can\*(Aqt create home directory
+.RE
+.PP
+\fI14\fR
+.RS 4
+can\*(Aqt update SELinux user mapping
+.RE
+.SH "SEE ALSO"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBnewusers\fR(8),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/man8/userdel.8 b/man/man8/userdel.8
new file mode 100644
index 0000000..0ada52f
--- /dev/null
+++ b/man/man8/userdel.8
@@ -0,0 +1,308 @@
+'\" t
+.\" Title: userdel
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: System Management Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "USERDEL" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+userdel \- delete a user account and related files
+.SH "SYNOPSIS"
+.HP \w'\fBuserdel\fR\ 'u
+\fBuserdel\fR [options] \fILOGIN\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBuserdel\fR
+command modifies the system account files, deleting all entries that refer to the user name
+\fILOGIN\fR\&. The named user must exist\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBuserdel\fR
+command are:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option forces the removal of the user account, even if the user is still logged in\&. It also forces
+\fBuserdel\fR
+to remove the user\*(Aqs home directory and mail spool, even if another user uses the same home directory or if the mail spool is not owned by the specified user\&. If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs
+and if a group exists with the same name as the deleted user, then this group will be removed, even if it is still the primary group of another user\&.
+.sp
+\fINote:\fR
+This option is dangerous and may leave your system in an inconsistent state\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-remove\fR
+.RS 4
+Files in the user\*(Aqs home directory will be removed along with the home directory itself and the user\*(Aqs mail spool\&. Files located in other file systems will have to be searched for and deleted manually\&.
+.sp
+The mail spool is defined by the
+\fBMAIL_DIR\fR
+variable in the
+login\&.defs
+file\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR
+.RS 4
+Remove any SELinux user mapping for the user\*(Aqs login\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBUSERDEL_CMD\fR (string)
+.RS 4
+If defined, this command is run when removing a user\&. It should remove any at/cron/print jobs etc\&. owned by the user to be removed (passed as the first argument)\&.
+.sp
+The return code of the script is not taken into account\&.
+.sp
+Here is an example script, which removes the user\*(Aqs cron, at and print jobs:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#! /bin/sh
+
+# Check for the required argument\&.
+if [ $# != 1 ]; then
+ echo "Usage: $0 username"
+ exit 1
+fi
+
+# Remove cron jobs\&.
+crontab \-r \-u $1
+
+# Remove at jobs\&.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username\&.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR \-name "[^\&.]*" \-type f \-user $1 \-delete \e;
+
+# Remove print jobs\&.
+lprm $1
+
+# All done\&.
+exit 0
+
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.PP
+/etc/subgid
+.RS 4
+Per user subordinate group IDs\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+Per user subordinate user IDs\&.
+.RE
+.SH "EXIT VALUES"
+.PP
+The
+\fBuserdel\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+can\*(Aqt update password file
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified user doesn\*(Aqt exist
+.RE
+.PP
+\fI8\fR
+.RS 4
+user currently logged in
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.PP
+\fI12\fR
+.RS 4
+can\*(Aqt remove home directory
+.RE
+.SH "CAVEATS"
+.PP
+\fBuserdel\fR
+will not allow you to remove an account if there are running processes which belong to this account\&. In that case, you may have to kill those processes or lock the user\*(Aqs password or account and remove the account later\&. The
+\fB\-f\fR
+option can force the deletion of this account\&.
+.PP
+You should manually check all file systems to ensure that no files remain owned by this user\&.
+.PP
+You may not remove any NIS attributes on a NIS client\&. This must be performed on the NIS server\&.
+.PP
+If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs,
+\fBuserdel\fR
+will delete the group with the same name as the user\&. To avoid inconsistencies in the passwd and group databases,
+\fBuserdel\fR
+will check that this group is not used as a primary group for another user, and will just warn without deleting the group otherwise\&. The
+\fB\-f\fR
+option can force the deletion of this group\&.
+.SH "SEE ALSO"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBlogin.defs\fR(5),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuseradd\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/man8/usermod.8 b/man/man8/usermod.8
new file mode 100644
index 0000000..ea9adce
--- /dev/null
+++ b/man/man8/usermod.8
@@ -0,0 +1,469 @@
+'\" t
+.\" Title: usermod
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: System Management Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "USERMOD" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+usermod \- modify a user account
+.SH "SYNOPSIS"
+.HP \w'\fBusermod\fR\ 'u
+\fBusermod\fR [\fIoptions\fR] \fILOGIN\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBusermod\fR
+command modifies the system account files to reflect the changes that are specified on the command line\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBusermod\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-append\fR
+.RS 4
+Add the user to the supplementary group(s)\&. Use only with the
+\fB\-G\fR
+option\&.
+.RE
+.PP
+\fB\-b\fR, \fB\-\-badnames\fR
+.RS 4
+Allow names that do not conform to standards\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-comment\fR\ \&\fICOMMENT\fR
+.RS 4
+The new value of the user\*(Aqs password file comment field\&. It is normally modified using the
+\fBchfn\fR(1)
+utility\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-home\fR\ \&\fIHOME_DIR\fR
+.RS 4
+The user\*(Aqs new login directory\&.
+.sp
+If the
+\fB\-m\fR
+option is given, the contents of the current home directory will be moved to the new home directory, which is created if it does not already exist\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+The date on which the user account will be disabled\&. The date is specified in the format
+\fIYYYY\-MM\-DD\fR\&.
+.sp
+An empty
+\fIEXPIRE_DATE\fR
+argument will disable the expiration of the account\&.
+.sp
+This option requires a
+/etc/shadow
+file\&. A
+/etc/shadow
+entry will be created if there were none\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+The number of days after a password expires until the account is permanently disabled\&.
+.sp
+A value of 0 disables the account as soon as the password has expired, and a value of \-1 disables the feature\&.
+.sp
+This option requires a
+/etc/shadow
+file\&. A
+/etc/shadow
+entry will be created if there were none\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGROUP\fR
+.RS 4
+The group name or number of the user\*(Aqs new initial login group\&. The group must exist\&.
+.sp
+Any file from the user\*(Aqs home directory owned by the previous primary group of the user will be owned by this new group\&.
+.sp
+The group ownership of files outside of the user\*(Aqs home directory must be fixed manually\&.
+.RE
+.PP
+\fB\-G\fR, \fB\-\-groups\fR\ \&\fIGROUP1\fR[\fI,GROUP2,\&.\&.\&.\fR[\fI,GROUPN\fR]]]
+.RS 4
+A list of supplementary groups which the user is also a member of\&. Each group is separated from the next by a comma, with no intervening whitespace\&. The groups are subject to the same restrictions as the group given with the
+\fB\-g\fR
+option\&.
+.sp
+If the user is currently a member of a group which is not listed, the user will be removed from the group\&. This behaviour can be changed via the
+\fB\-a\fR
+option, which appends the user to the current supplementary group list\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-login\fR\ \&\fINEW_LOGIN\fR
+.RS 4
+The name of the user will be changed from
+\fILOGIN\fR
+to
+\fINEW_LOGIN\fR\&. Nothing else is changed\&. In particular, the user\*(Aqs home directory or mail spool should probably be renamed manually to reflect the new login name\&.
+.RE
+.PP
+\fB\-L\fR, \fB\-\-lock\fR
+.RS 4
+Lock a user\*(Aqs password\&. This puts a \*(Aq!\*(Aq in front of the encrypted password, effectively disabling the password\&. You can\*(Aqt use this option with
+\fB\-p\fR
+or
+\fB\-U\fR\&.
+.sp
+Note: if you wish to lock the account (not only access with a password), you should also set the
+\fIEXPIRE_DATE\fR
+to
+\fI1\fR\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-move\-home\fR
+.RS 4
+Move the content of the user\*(Aqs home directory to the new location\&.
+.sp
+This option is only valid in combination with the
+\fB\-d\fR
+(or
+\fB\-\-home\fR) option\&.
+.sp
+\fBusermod\fR
+will try to adapt the ownership of the files and to copy the modes, ACL and extended attributes, but manual changes might be needed afterwards\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+When used with the
+\fB\-u\fR
+option, this option allows to change the user ID to a non\-unique value\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\*(Aqs password policy\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+The name of the user\*(Aqs new login shell\&. Setting this field to blank causes the system to select the default login shell\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-uid\fR\ \&\fIUID\fR
+.RS 4
+The new numerical value of the user\*(Aqs ID\&.
+.sp
+This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&.
+.sp
+The user\*(Aqs mailbox, and any files which the user owns and which are located in the user\*(Aqs home directory will have the file user ID changed automatically\&.
+.sp
+The ownership of files outside of the user\*(Aqs home directory must be fixed manually\&.
+.sp
+No checks will be performed with regard to the
+\fBUID_MIN\fR,
+\fBUID_MAX\fR,
+\fBSYS_UID_MIN\fR, or
+\fBSYS_UID_MAX\fR
+from
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-U\fR, \fB\-\-unlock\fR
+.RS 4
+Unlock a user\*(Aqs password\&. This removes the \*(Aq!\*(Aq in front of the encrypted password\&. You can\*(Aqt use this option with
+\fB\-p\fR
+or
+\fB\-L\fR\&.
+.sp
+Note: if you wish to unlock the account (not only access with a password), you should also set the
+\fIEXPIRE_DATE\fR
+(for example to
+\fI99999\fR, or to the
+\fBEXPIRE\fR
+value from
+/etc/default/useradd)\&.
+.RE
+.PP
+\fB\-v\fR, \fB\-\-add\-subuids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Add a range of subordinate uids to the user\*(Aqs account\&.
+.sp
+This option may be specified multiple times to add multiple ranges to a users account\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR, or
+\fBSUB_UID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-V\fR, \fB\-\-del\-subuids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Remove a range of subordinate uids from the user\*(Aqs account\&.
+.sp
+This option may be specified multiple times to remove multiple ranges to a users account\&. When both
+\fB\-\-del\-subuids\fR
+and
+\fB\-\-add\-subuids\fR
+are specified, the removal of all subordinate uid ranges happens before any subordinate uid range is added\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR, or
+\fBSUB_UID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-add\-subgids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Add a range of subordinate gids to the user\*(Aqs account\&.
+.sp
+This option may be specified multiple times to add multiple ranges to a users account\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR, or
+\fBSUB_GID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-W\fR, \fB\-\-del\-subgids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Remove a range of subordinate gids from the user\*(Aqs account\&.
+.sp
+This option may be specified multiple times to remove multiple ranges to a users account\&. When both
+\fB\-\-del\-subgids\fR
+and
+\fB\-\-add\-subgids\fR
+are specified, the removal of all subordinate gid ranges happens before any subordinate gid range is added\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR, or
+\fBSUB_GID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR\ \&\fISEUSER\fR
+.RS 4
+The new SELinux user for the user\*(Aqs login\&.
+.sp
+A blank
+\fISEUSER\fR
+will remove the SELinux user mapping for user
+\fILOGIN\fR
+(if any)\&.
+.RE
+.SH "CAVEATS"
+.PP
+You must make certain that the named user is not executing any processes when this command is being executed if the user\*(Aqs numerical user ID, the user\*(Aqs name, or the user\*(Aqs home directory is being changed\&.
+\fBusermod\fR
+checks this on Linux\&. On other platforms it only uses utmp to check if the user is logged in\&.
+.PP
+You must change the owner of any
+\fBcrontab\fR
+files or
+\fBat\fR
+jobs manually\&.
+.PP
+You must make any changes involving NIS on the NIS server\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBSUB_GID_MIN\fR (number), \fBSUB_GID_MAX\fR (number), \fBSUB_GID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate group IDs) allocate
+\fBSUB_GID_COUNT\fR
+unused group IDs from the range
+\fBSUB_GID_MIN\fR
+to
+\fBSUB_GID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR,
+\fBSUB_GID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSUB_UID_MIN\fR (number), \fBSUB_UID_MAX\fR (number), \fBSUB_UID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate user IDs) allocate
+\fBSUB_UID_COUNT\fR
+unused user IDs from the range
+\fBSUB_UID_MIN\fR
+to
+\fBSUB_UID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR,
+\fBSUB_UID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Secure group account information\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.PP
+/etc/subgid
+.RS 4
+Per user subordinate group IDs\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+Per user subordinate user IDs\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8)\&.
diff --git a/man/man8/vigr.8 b/man/man8/vigr.8
new file mode 100644
index 0000000..ff72d7a
--- /dev/null
+++ b/man/man8/vigr.8
@@ -0,0 +1 @@
+.so man8/vipw.8
diff --git a/man/man8/vipw.8 b/man/man8/vipw.8
new file mode 100644
index 0000000..f8f175e
--- /dev/null
+++ b/man/man8/vipw.8
@@ -0,0 +1,137 @@
+'\" t
+.\" Title: vipw
+.\" Author: Marek Michałkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: System Management Commands
+.\" Source: shadow-utils 4.8.1
+.\" Language: English
+.\"
+.TH "VIPW" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+vipw, vigr \- edit the password, group, shadow\-password or shadow\-group file
+.SH "SYNOPSIS"
+.HP \w'\fBvipw\fR\ 'u
+\fBvipw\fR [\fIoptions\fR]
+.HP \w'\fBvigr\fR\ 'u
+\fBvigr\fR [\fIoptions\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBvipw\fR
+and
+\fBvigr\fR
+commands edits the files
+/etc/passwd
+and
+/etc/group, respectively\&. With the
+\fB\-s\fR
+flag, they will edit the shadow versions of those files,
+/etc/shadow
+and
+/etc/gshadow, respectively\&. The programs will set the appropriate locks to prevent file corruption\&. When looking for an editor, the programs will first try the environment variable
+\fB$VISUAL\fR, then the environment variable
+\fB$EDITOR\fR, and finally the default editor,
+\fBvi\fR(1)\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBvipw\fR
+and
+\fBvigr\fR
+commands are:
+.PP
+\fB\-g\fR, \fB\-\-group\fR
+.RS 4
+Edit group database\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-passwd\fR
+.RS 4
+Edit passwd database\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Quiet mode\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shadow\fR
+.RS 4
+Edit shadow or gshadow database\&.
+.RE
+.SH "ENVIRONMENT"
+.PP
+\fBVISUAL\fR
+.RS 4
+Editor to be used\&.
+.RE
+.PP
+\fBEDITOR\fR
+.RS 4
+Editor to be used if
+\fBVISUAL\fR
+is not set\&.
+.RE
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Secure group account information\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBvi\fR(1),
+\fBgroup\fR(5),
+\fBgshadow\fR(5)
+,
+\fBpasswd\fR(5), ,
+\fBshadow\fR(5)\&.
diff --git a/man/newgidmap.1.xml b/man/newgidmap.1.xml
new file mode 100644
index 0000000..5fff36f
--- /dev/null
+++ b/man/newgidmap.1.xml
@@ -0,0 +1,190 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2013 Eric W. Biederman
+ 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!-- SHADOW-CONFIG-HERE -->
+]>
+
+<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>
+ <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>newgidmap</refname>
+ <refpurpose>set the gid mapping of a user namespace</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>newgidmap</command>
+ <arg choice='plain'>
+ <replaceable>pid</replaceable>
+ </arg>
+ <arg choice='plain'>
+ <replaceable>gid</replaceable>
+ </arg>
+ <arg choice='plain'>
+ <replaceable>lowergid</replaceable>
+ </arg>
+ <arg choice='plain'>
+ <replaceable>count</replaceable>
+ </arg>
+ <arg choice='opt'>
+ <arg choice='plain'>
+ <replaceable>gid</replaceable>
+ </arg>
+ <arg choice='plain'>
+ <replaceable>lowergid</replaceable>
+ </arg>
+ <arg choice='plain'>
+ <replaceable>count</replaceable>
+ </arg>
+ <arg choice='opt'>
+ <replaceable>...</replaceable>
+ </arg>
+ </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The <command>newgidmap</command> sets <filename>/proc/[pid]/gid_map</filename> based on its
+ command line arguments and the gids allowed in <filename>/etc/subgid</filename>.
+ Note that the root user is not exempted from the requirement for a valid
+ <filename>/etc/subgid</filename> entry.
+ </para>
+
+ <para>
+ After the pid argument, <command>newgidmap</command> expects sets of 3 integers:
+ <variablelist>
+ <varlistentry>
+ <term>gid</term>
+ <listitem>
+ <para>
+ Beginning of the range of GIDs inside the user namespace.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>lowergid</term>
+ <listitem>
+ <para>
+ Beginning of the range of GIDs outside the user namespace.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>count</term>
+ <listitem>
+ <para>
+ Length of the ranges (both inside and outside the user namespace).
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+
+ <para>
+ <command>newgidmap</command> verifies that the caller is the owner
+ of the process indicated by <option>pid</option> and that for each
+ of the above sets, each of the GIDs in the range [lowergid,
+ lowergid+count] is allowed to the caller according to
+ <filename>/etc/subgid</filename> before setting
+ <filename>/proc/[pid]/gid_map</filename>.
+ </para>
+ <para>
+ Note that newgidmap may be used only once for a given process.
+ </para>
+
+ </refsect1>
+
+ <refsect1 id='options'>
+ <title>OPTIONS</title>
+ <para>
+ There currently are no options to the <command>newgidmap</command> command.
+ </para>
+ <variablelist remap='IP'>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/subgid</filename></term>
+ <listitem>
+ <para>List of user's subordinate group IDs.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/proc/[pid]/gid_map</filename></term>
+ <listitem>
+ <para>Mapping of gids from one between user namespaces.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>newusers</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>subgid</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/newgrp.1.xml b/man/newgrp.1.xml
new file mode 100644
index 0000000..62f0625
--- /dev/null
+++ b/man/newgrp.1.xml
@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1991 , Julianne Frances Haugh
+ Copyright (c) 2007 - 2008, 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY SYSLOG_SG_ENAB SYSTEM "login.defs.d/SYSLOG_SG_ENAB.xml">
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='newgrp.1'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1991</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>newgrp</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>newgrp</refname>
+ <refpurpose>log in to a new group</refpurpose>
+ </refnamediv>
+ <!-- body begins here -->
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>newgrp</command> <arg choice='opt'>- </arg>
+ <arg choice='opt'><replaceable>group</replaceable></arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The <command>newgrp</command> command is used to change the current
+ group ID during a login session. If the optional <option>-</option>
+ flag is given, the user's environment will be reinitialized as though
+ the user had logged in, otherwise the current environment, including
+ current working directory, remains unchanged.
+ </para>
+
+ <para>
+ <command>newgrp</command> changes the current real group ID to the
+ named group, or to the default group listed in
+ <filename>/etc/passwd</filename> if no group name is given.
+ <command>newgrp</command> also tries to add the group to the user
+ groupset. If not root, the user will be prompted for a password if she
+ does not have a password (in <filename>/etc/shadow</filename> if this
+ user has an entry in the shadowed password file, or in
+ <filename>/etc/passwd</filename> otherwise) and the group does, or if
+ the user is not listed as a member and the group has a password. The
+ user will be denied access if the group password is empty and the user
+ is not listed as a member.
+ </para>
+
+ <para condition="gshadow">
+ If there is an entry for this group in
+ <filename>/etc/gshadow</filename>, then the list of members and the
+ password of this group will be taken from this file, otherwise, the
+ entry in <filename>/etc/group</filename> is considered.
+ </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>
+ &SYSLOG_SG_ENAB;
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/passwd</filename></term>
+ <listitem>
+ <para>User account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/shadow</filename></term>
+ <listitem>
+ <para>Secure user account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/group</filename></term>
+ <listitem>
+ <para>Group account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="gshadow">
+ <term><filename>/etc/gshadow</filename></term>
+ <listitem>
+ <para>Secure group account information.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>id</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>su</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>gpasswd</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>group</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry><phrase condition="gshadow">,
+ <citerefentry condition="gshadow">
+ <refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>
+ </phrase>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/newuidmap.1.xml b/man/newuidmap.1.xml
new file mode 100644
index 0000000..faa2373
--- /dev/null
+++ b/man/newuidmap.1.xml
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2013 Eric W. Biederman
+ 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!-- SHADOW-CONFIG-HERE -->
+]>
+
+<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>
+ <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>newuidmap</refname>
+ <refpurpose>set the uid mapping of a user namespace</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>newuidmap</command>
+ <arg choice='plain'>
+ <replaceable>pid</replaceable>
+ </arg>
+ <arg choice='plain'>
+ <replaceable>uid</replaceable>
+ </arg>
+ <arg choice='plain'>
+ <replaceable>loweruid</replaceable>
+ </arg>
+ <arg choice='plain'>
+ <replaceable>count</replaceable>
+ </arg>
+ <arg choice='opt'>
+ <arg choice='plain'>
+ <replaceable>uid</replaceable>
+ </arg>
+ <arg choice='plain'>
+ <replaceable>loweruid</replaceable>
+ </arg>
+ <arg choice='plain'>
+ <replaceable>count</replaceable>
+ </arg>
+ <arg choice='opt'>
+ <replaceable>...</replaceable>
+ </arg>
+ </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The <command>newuidmap</command> sets <filename>/proc/[pid]/uid_map</filename> based on its
+ command line arguments and the uids allowed in <filename>/etc/subuid</filename>.
+ Note that the root user is not exempted from the requirement for a valid
+ <filename>/etc/subuid</filename> entry.
+ </para>
+
+ <para>
+ After the pid argument, <command>newuidmap</command> expects sets of 3 integers:
+ <variablelist>
+ <varlistentry>
+ <term>uid</term>
+ <listitem>
+ <para>
+ Beginning of the range of UIDs inside the user namespace.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>loweruid</term>
+ <listitem>
+ <para>
+ Beginning of the range of UIDs outside the user namespace.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>count</term>
+ <listitem>
+ <para>
+ Length of the ranges (both inside and outside the user namespace).
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+
+ <para>
+ <command>newuidmap</command> verifies that the caller is the owner
+ of the process indicated by <option>pid</option> and that for each
+ of the above sets, each of the UIDs in the range [loweruid,
+ loweruid+count] is allowed to the caller according to
+ <filename>/etc/subuid</filename> before setting
+ <filename>/proc/[pid]/uid_map</filename>.
+ </para>
+ <para>
+ Note that newuidmap may be used only once for a given process.
+ </para>
+ </refsect1>
+
+ <refsect1 id='options'>
+ <title>OPTIONS</title>
+ <para>
+ There currently are no options to the <command>newuidmap</command> command.
+ </para>
+ <variablelist remap='IP'>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/subuid</filename></term>
+ <listitem>
+ <para>List of user's subordinate user IDs.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/proc/[pid]/uid_map</filename></term>
+ <listitem>
+ <para>Mapping of uids from one between user namespaces.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>newusers</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>subuid</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/newusers.8.xml b/man/newusers.8.xml
new file mode 100644
index 0000000..13307cc
--- /dev/null
+++ b/man/newusers.8.xml
@@ -0,0 +1,486 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ Copyright (c) 2007 - 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "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">
+<!ENTITY PASS_MIN_DAYS SYSTEM "login.defs.d/PASS_MIN_DAYS.xml">
+<!ENTITY PASS_WARN_AGE SYSTEM "login.defs.d/PASS_WARN_AGE.xml">
+<!ENTITY SHA_CRYPT_MIN_ROUNDS SYSTEM "login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml">
+<!ENTITY SUB_GID_COUNT SYSTEM "login.defs.d/SUB_GID_COUNT.xml">
+<!ENTITY SUB_UID_COUNT SYSTEM "login.defs.d/SUB_UID_COUNT.xml">
+<!ENTITY SYS_GID_MAX SYSTEM "login.defs.d/SYS_GID_MAX.xml">
+<!ENTITY SYS_UID_MAX SYSTEM "login.defs.d/SYS_UID_MAX.xml">
+<!ENTITY UID_MAX SYSTEM "login.defs.d/UID_MAX.xml">
+<!ENTITY UMASK SYSTEM "login.defs.d/UMASK.xml">
+<!-- SHADOW-CONFIG-HERE -->
+]>
+
+<refentry id='newusers.8'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1991</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>newusers</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>newusers</refname>
+ <refpurpose>update and create new users in batch</refpurpose>
+ </refnamediv>
+ <!-- body begins here -->
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>newusers</command>
+ <arg choice='opt'>
+ <replaceable>options</replaceable>
+ </arg>
+ <arg choice='opt'>
+ <replaceable>file</replaceable>
+ </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The <command>newusers</command> command reads a <replaceable>file</replaceable> (or the standard input by default)
+ and uses this information to update a set
+ of existing users or to create new users. Each line is in the same format
+ as the standard password file (see
+ <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>) with the exceptions explained below:
+ </para>
+ <para>pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell</para>
+
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>pw_name</emphasis>
+ </term>
+ <listitem>
+ <para>
+ This is the name of the user.
+ </para>
+ <para>
+ It can be the name of a new user or the name of an existing
+ user (or a user created before by
+ <command>newusers</command>). In case of an existing user,
+ the user's information will be changed, otherwise a new user
+ will be created.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>pw_passwd</emphasis>
+ </term>
+ <listitem>
+ <para>
+ This field will be encrypted and used as the new value of the
+ encrypted password.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>pw_uid</emphasis>
+ </term>
+ <listitem>
+ <para>
+ This field is used to define the UID of the user.
+ </para>
+ <para>
+ If the field is empty, a new (unused) UID will be defined
+ automatically by <command>newusers</command>.
+ </para>
+ <para>
+ If this field contains a number, this number will be used as
+ the UID.
+ </para>
+ <para>
+ If this field contains the name of an existing user (or the
+ name of a user created before by
+ <command>newusers</command>), the UID of the specified user
+ will be used.
+ </para>
+ <para>
+ If the UID of an existing user is changed, the files ownership
+ of the user's file should be fixed manually.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>pw_gid</emphasis>
+ </term>
+ <listitem>
+ <para>
+ This field is used to define the primary group ID for the user.
+ </para>
+ <para>
+ If this field contains the name of an existing group (or a
+ group created before by <command>newusers</command>), the GID
+ of this group will be used as the primary group ID for the
+ user.
+ </para>
+ <para>
+ If this field is a number, this number will be used as the
+ primary group ID of the user. If no groups exist with this
+ GID, a new group will be created with this GID, and the name
+ of the user.
+ </para>
+ <para>
+ If this field is empty, a new group will be created with the
+ name of the user and a GID will be automatically defined by
+ <command>newusers</command> to be used as the primary group ID
+ for the user and as the GID for the new group.
+ </para>
+ <para>
+ If this field contains the name of a group which does not
+ exist (and was not created before by
+ <command>newusers</command>), a new group will be created with
+ the specified name and a GID will be automatically defined by
+ <command>newusers</command> to be used as the primary group ID
+ for the user and GID for the new group.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>pw_gecos</emphasis>
+ </term>
+ <listitem>
+ <para>
+ This field is copied in the GECOS field of the user.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>pw_dir</emphasis>
+ </term>
+ <listitem>
+ <para>
+ This field is used to define the home directory of the user.
+ </para>
+ <para>
+ If this field does not specify an existing directory, the
+ specified directory is created, with ownership set to the
+ user being created or updated and its primary group.
+ </para>
+ <para>
+ If the home directory of an existing user is changed,
+ <command>newusers</command> does not move or copy the content
+ of the old directory to the new location. This should be done
+ manually.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>pw_shell</emphasis>
+ </term>
+ <listitem>
+ <para>
+ This field defines the shell of the user.
+ No checks are performed on this field.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>
+ <command>newusers</command> first tries to create or change all the
+ specified users, and then write these changes to the user or group
+ databases. If an error occurs (except in the final writes to the
+ databases), no changes are committed to the databases.
+ </para>
+ <para condition="pam">
+ During this first pass, users are created with a locked password
+ (and passwords are not changed for the users which are not created).
+ A second pass is used to update the passwords using PAM. Failures
+ to update a password are reported, but will not stop the other
+ password updates.
+ </para>
+
+ <para>
+ This command is intended to be used in a large system environment
+ where many accounts are updated at a single time.
+ </para>
+ </refsect1>
+
+ <refsect1 id='options'>
+ <title>OPTIONS</title>
+ <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>
+ <listitem>
+ <para>Use the specified method to encrypt the passwords.</para>
+ <para>
+ The available methods are DES, MD5, NONE, and SHA256 or SHA512
+ if your libc support these methods.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term><option>-h</option>, <option>--help</option></term>
+ <listitem>
+ <para>Display help message and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-r</option>, <option>--system</option>
+ </term>
+ <listitem>
+ <para>
+ Create a system account.
+ </para>
+ <para>
+ System users will be created with no aging information in
+ <filename>/etc/shadow</filename>, and their numeric
+ identifiers are chosen in the
+ <option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option>
+ range, defined in <filename>login.defs</filename>, instead of
+ <option>UID_MIN</option>-<option>UID_MAX</option> (and their
+ <option>GID</option> counterparts for the creation of groups).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Apply changes in the <replaceable>CHROOT_DIR</replaceable>
+ directory and use the configuration files from the
+ <replaceable>CHROOT_DIR</replaceable> directory.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <variablelist remap='IP' condition="no_pam">
+ <varlistentry condition="sha_crypt">
+ <term><option>-s</option>, <option>--sha-rounds</option></term>
+ <listitem>
+ <para>
+ Use the specified number of rounds to encrypt the passwords.
+ </para>
+ <para>
+ The value 0 means that the system will choose the default
+ number of rounds for the crypt method (5000).
+ </para>
+ <para>
+ A minimal value of 1000 and a maximal value of 999,999,999
+ will be enforced.
+ </para>
+ <para>
+ You can only use this option with the SHA256 or SHA512
+ crypt method.
+ </para>
+ <para>
+ By default, the number of rounds is defined by the
+ SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+ <filename>/etc/login.defs</filename>.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='caveats'>
+ <title>CAVEATS</title>
+ <para>
+ The input file must be protected since it contains unencrypted
+ passwords.
+ </para>
+ <para condition="no_pam">
+ You should make sure the passwords and the encryption method respect
+ the system's password policy.
+ </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 condition="no_pam">
+ &ENCRYPT_METHOD;
+ </variablelist>
+ <variablelist>
+ &GID_MAX; <!-- documents also GID_MIN -->
+ &HOME_MODE;
+ &MAX_MEMBERS_PER_GROUP;
+ </variablelist>
+ <variablelist condition="no_pam">
+ &MD5_CRYPT_ENAB;
+ </variablelist>
+ <variablelist>
+ &PASS_MAX_DAYS;
+ &PASS_MIN_DAYS;
+ &PASS_WARN_AGE;
+ </variablelist>
+ <variablelist condition="no_pam">
+ &SHA_CRYPT_MIN_ROUNDS; <!-- documents also SHA_CRYPT_MAX_ROUNDS-->
+ </variablelist>
+ <variablelist>
+ &SUB_GID_COUNT; <!-- documents also SUB_GID_MAX and SUB_GID_MIN -->
+ &SUB_UID_COUNT; <!-- documents also SUB_UID_MAX and SUB_UID_MIN -->
+ &SYS_GID_MAX; <!-- documents also SYS_GID_MIN -->
+ &SYS_UID_MAX; <!-- documents also SYS_UID_MIN -->
+ &UID_MAX; <!-- documents also UID_MIN -->
+ &UMASK;
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/passwd</filename></term>
+ <listitem>
+ <para>User account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/shadow</filename></term>
+ <listitem>
+ <para>Secure user account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/group</filename></term>
+ <listitem>
+ <para>Group account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="gshadow">
+ <term><filename>/etc/gshadow</filename></term>
+ <listitem>
+ <para>Secure group account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/login.defs</filename></term>
+ <listitem>
+ <para>Shadow password suite configuration.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="pam">
+ <term><filename>/etc/pam.d/newusers</filename></term>
+ <listitem>
+ <para>PAM configuration for <command>newusers</command>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="subids">
+ <term><filename>/etc/subgid</filename></term>
+ <listitem>
+ <para>Per user subordinate group IDs.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="subids">
+ <term><filename>/etc/subuid</filename></term>
+ <listitem>
+ <para>Per user subordinate user IDs.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <phrase condition="subids">
+ <citerefentry>
+ <refentrytitle>subgid</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>subuid</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ </phrase>
+ <citerefentry>
+ <refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/nologin.8.xml b/man/nologin.8.xml
new file mode 100644
index 0000000..30d4f1b
--- /dev/null
+++ b/man/nologin.8.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1993 , The Regents of the University of California
+ Copyright (c) 2006 - 2008, 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='nologin.8'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>nologin</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>nologin</refname>
+ <refpurpose>politely refuse a login</refpurpose>
+ </refnamediv>
+ <!-- body begins here -->
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>nologin</command>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The <command>nologin</command> command displays a message that an account
+ is not available and exits non-zero. It is intended as a replacement shell
+ field for accounts that have been disabled.
+ </para>
+ <para>
+ To disable all logins, investigate
+ <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'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>nologin</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+
+ <refsect1 id='history'>
+ <title>HISTORY</title>
+ <para>
+ The <command>nologin</command> command appeared in BSD 4.4.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/passwd.1.xml b/man/passwd.1.xml
new file mode 100644
index 0000000..0e8ba32
--- /dev/null
+++ b/man/passwd.1.xml
@@ -0,0 +1,515 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ Copyright (c) 2007 - 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY ENCRYPT_METHOD SYSTEM "login.defs.d/ENCRYPT_METHOD.xml">
+<!ENTITY MD5_CRYPT_ENAB SYSTEM "login.defs.d/MD5_CRYPT_ENAB.xml">
+<!ENTITY OBSCURE_CHECKS_ENAB SYSTEM "login.defs.d/OBSCURE_CHECKS_ENAB.xml">
+<!ENTITY PASS_ALWAYS_WARN SYSTEM "login.defs.d/PASS_ALWAYS_WARN.xml">
+<!ENTITY PASS_CHANGE_TRIES SYSTEM "login.defs.d/PASS_CHANGE_TRIES.xml">
+<!ENTITY PASS_MAX_LEN SYSTEM "login.defs.d/PASS_MAX_LEN.xml">
+<!ENTITY SHA_CRYPT_MIN_ROUNDS SYSTEM "login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml">
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='passwd.1'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1989</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>passwd</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>passwd</refname>
+ <refpurpose>change user password</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>passwd</command>
+ <arg choice='opt'>
+ <replaceable>options</replaceable>
+ </arg>
+ <arg choice='opt'>
+ <replaceable>LOGIN</replaceable>
+ </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ 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.
+ </para>
+
+ <refsect2 id='password_changes'>
+ <title>Password Changes</title>
+ <para>
+ 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.
+ </para>
+
+ <para>
+ After the password has been entered, password aging information is
+ checked to see if the user is permitted to change the password at
+ this time. If not, <command>passwd</command> refuses to change the
+ password and exits.
+ </para>
+
+ <para>
+ The user is then prompted twice for a replacement password. The
+ second entry is compared against the first and both are required to
+ match in order for the password to be changed.
+ </para>
+
+ <para>
+ Then, the password is tested for complexity. As a general guideline,
+ passwords should consist of 6 to 8 characters including one or more
+ characters from each of the following sets:
+ </para>
+
+ <itemizedlist mark='bullet'>
+ <listitem>
+ <para>lower case alphabetics</para>
+ </listitem>
+ <listitem>
+ <para>digits 0 thru 9</para>
+ </listitem>
+ <listitem>
+ <para>punctuation marks</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ Care must be taken not to include the system default erase or kill
+ characters. <command>passwd</command> will reject any password which
+ is not suitably complex.
+ </para>
+
+ </refsect2>
+
+ <refsect2 id='hints_for_user_passwords'>
+ <title>Hints for user passwords</title>
+ <para>
+ The security of a password depends upon the strength of the
+ encryption algorithm and the size of the key space. The legacy
+ <emphasis>UNIX</emphasis> System encryption method is based on the
+ NBS DES algorithm. More recent methods are now recommended (see
+ <option>ENCRYPT_METHOD</option>). The size of the key space
+ depends upon the randomness of the password which is selected.
+ </para>
+
+ <para>
+ Compromises in password security normally result from careless
+ password selection or handling. For this reason, you should not
+ select a password which appears in a dictionary or which must be
+ written down. The password should also not be a proper name, your
+ license number, birth date, or street address. Any of these may be
+ used as guesses to violate system security.
+ </para>
+
+ <para>
+ You can find advice on how to choose a strong password on
+ http://en.wikipedia.org/wiki/Password_strength
+ </para>
+ </refsect2>
+ </refsect1>
+
+ <refsect1 id='options'>
+ <title>OPTIONS</title>
+ <para>
+ The options which apply to the <command>passwd</command> command are:
+ </para>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term>
+ <option>-a</option>, <option>--all</option>
+ </term>
+ <listitem>
+ <para>
+ This option can be used only with <option>-S</option> and causes show
+ status for all users.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-d</option>, <option>--delete</option>
+ </term>
+ <listitem>
+ <para>
+ Delete a user's password (make it empty). This is a quick way
+ to disable a password for an account. It will set the named
+ account passwordless.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-e</option>, <option>--expire</option>
+ </term>
+ <listitem>
+ <para>
+ Immediately expire an account's password. This in effect can
+ force a user to change their password at the user's next login.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-h</option>, <option>--help</option></term>
+ <listitem>
+ <para>Display help message and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-i</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</replaceable>
+ </term>
+ <listitem>
+ <para>
+ This option is used to disable an account after the password has
+ been expired for a number of days. After a user account has had
+ an expired password for <replaceable>INACTIVE</replaceable>
+ days, the user may no longer sign on to the account.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-k</option>, <option>--keep-tokens</option>
+ </term>
+ <listitem>
+ <para>
+ Indicate password change should be performed only for expired
+ authentication tokens (passwords). The user wishes to keep their
+ non-expired tokens as before.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-l</option>, <option>--lock</option>
+ </term>
+ <listitem>
+ <para>
+ Lock the password of the named account. This option disables a
+ password by changing it to a value which matches no possible
+ encrypted value (it adds a ´!´ at the beginning of the
+ password).
+ </para>
+ <para>
+ Note that this does not disable the account. The user may
+ still be able to login using another authentication token
+ (e.g. an SSH key). To disable the account, administrators
+ should use <command>usermod --expiredate 1</command> (this set
+ the account's expire date to Jan 2, 1970).
+ </para>
+ <para>
+ Users with a locked password are not allowed to change their
+ password.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-n</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DAYS</replaceable>
+ </term>
+ <listitem>
+ <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 their password at any time.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-q</option>, <option>--quiet</option>
+ </term>
+ <listitem>
+ <para>
+ Quiet mode.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-r</option>, <option>--repository</option>&nbsp;<replaceable>REPOSITORY</replaceable>
+ </term>
+ <listitem>
+ <para>
+ change password in <replaceable>REPOSITORY</replaceable> repository
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Apply changes in the <replaceable>CHROOT_DIR</replaceable>
+ directory and use the configuration files from the
+ <replaceable>CHROOT_DIR</replaceable> directory.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-S</option>, <option>--status</option>
+ </term>
+ <listitem>
+ <para>
+ Display account status information. The status information
+ consists of 7 fields. The first field is the user's login name.
+ The second field indicates if the user account has a locked
+ password (L),
+ has no password (NP), or has a usable password (P). The third
+ field gives the date of the last password change. The next four
+ fields are the minimum age, maximum age, warning period, and
+ inactivity period for the password. These ages are expressed in
+ days.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-u</option>, <option>--unlock</option>
+ </term>
+ <listitem>
+ <para>
+ Unlock the password of the named account. This option
+ re-enables a password by changing the password back to its
+ previous value (to the value before using the
+ <option>-l</option> option).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-w</option>, <option>--warndays</option>&nbsp;<replaceable>WARN_DAYS</replaceable>
+ </term>
+ <listitem>
+ <para>
+ 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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-x</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DAYS</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Set the maximum number of days a password remains valid. After
+ <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>
+ </refsect1>
+
+ <refsect1 id='caveats'>
+ <title>CAVEATS</title>
+ <para>
+ Password complexity checking may
+ vary from site to site. The user is urged to select a password as
+ complex as he or she feels comfortable with.
+ </para>
+ <para>
+ Users may not be able to
+ change their password on a system if NIS is enabled and they are not
+ logged into the NIS server.
+ </para>
+ <para condition="pam">
+ <command>passwd</command> uses PAM to authenticate users and to
+ change their passwords.
+ </para>
+ </refsect1>
+
+ <refsect1 id='configuration' condition="no_pam">
+ <title>CONFIGURATION</title>
+ <para>
+ The following configuration variables in
+ <filename>/etc/login.defs</filename> change the behavior of this
+ tool:
+ </para>
+ <variablelist>
+ &ENCRYPT_METHOD;
+ &MD5_CRYPT_ENAB;
+ &OBSCURE_CHECKS_ENAB;
+ &PASS_ALWAYS_WARN;
+ &PASS_CHANGE_TRIES;
+ &PASS_MAX_LEN; <!-- documents also PASS_MIN_LEN -->
+ &SHA_CRYPT_MIN_ROUNDS;
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/passwd</filename></term>
+ <listitem>
+ <para>User account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/shadow</filename></term>
+ <listitem>
+ <para>Secure user account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="no_pam">
+ <term><filename>/etc/login.defs</filename></term>
+ <listitem>
+ <para>Shadow password suite configuration.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="pam">
+ <term><filename>/etc/pam.d/passwd</filename></term>
+ <listitem>
+ <para>PAM configuration for <command>passwd</command>.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='exit_values'>
+ <title>EXIT VALUES</title>
+ <para>
+ The <command>passwd</command> command exits with the following values:
+ <variablelist>
+ <varlistentry>
+ <term><replaceable>0</replaceable></term>
+ <listitem>
+ <para>success</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>1</replaceable></term>
+ <listitem>
+ <para>permission denied</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>2</replaceable></term>
+ <listitem>
+ <para>invalid combination of options</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>3</replaceable></term>
+ <listitem>
+ <para>unexpected failure, nothing done</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>4</replaceable></term>
+ <listitem>
+ <para>unexpected failure, <filename>passwd</filename> file missing</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>5</replaceable></term>
+ <listitem>
+ <para><filename>passwd</filename> file busy, try again</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>6</replaceable></term>
+ <listitem>
+ <para>invalid argument to option</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>chpasswd</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <phrase condition="no_pam">
+ <citerefentry>
+ <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ </phrase>
+ <citerefentry>
+ <refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/passwd.5.xml b/man/passwd.5.xml
new file mode 100644
index 0000000..7738d09
--- /dev/null
+++ b/man/passwd.5.xml
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1989 - 1990, Julianne Frances Haugh
+ Copyright (c) 2007 - 2008, 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='passwd.5'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1989</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>passwd</refentrytitle>
+ <manvolnum>5</manvolnum>
+ <refmiscinfo class="sectdesc">File Formats and Conversions</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>passwd</refname>
+ <refpurpose>the password file</refpurpose>
+ </refnamediv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ <filename>/etc/passwd</filename> contains one line for each
+ user account, with seven fields delimited by colons
+ (<quote>:</quote>).
+ These fields are:
+ </para>
+ <itemizedlist mark='bullet'>
+ <listitem>
+ <para>login name</para>
+ </listitem>
+ <listitem>
+ <para>optional encrypted password</para>
+ </listitem>
+ <listitem>
+ <para>numerical user ID</para>
+ </listitem>
+ <listitem>
+ <para>numerical group ID</para>
+ </listitem>
+ <listitem>
+ <para>user name or comment field</para>
+ </listitem>
+ <listitem>
+ <para>user home directory</para>
+ </listitem>
+ <listitem>
+ <para>optional user command interpreter</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ 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.
+ </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>
+ <manvolnum>1</manvolnum></citerefentry>.
+ </para>
+
+ <para>
+ The home directory field provides the name of the initial working
+ directory. The <command>login</command> program uses this information
+ to set the value of the <envar>$HOME</envar> environmental variable.
+ </para>
+
+ <para>
+ The command interpreter field provides the name of the user's command
+ language interpreter, or the name of the initial program to execute.
+ The <command>login</command> program uses this information to set the
+ value of the <envar>$SHELL</envar> environmental variable. If this
+ field is empty, it defaults to the value <filename>/bin/sh</filename>.
+ </para>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/passwd</filename></term>
+ <listitem>
+ <para>User account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/shadow</filename></term>
+ <listitem>
+ <para>optional encrypted password file</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/passwd-</filename></term>
+ <listitem>
+ <para>Backup file for /etc/passwd.</para>
+ <para>
+ Note that this file is used by the tools of the shadow
+ toolsuite, but not by all user and password management tools.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>getent</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>getpwnam</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>pwunconv</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>su</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>sulogin</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/pl/Makefile.am b/man/pl/Makefile.am
new file mode 100644
index 0000000..724d25f
--- /dev/null
+++ b/man/pl/Makefile.am
@@ -0,0 +1,44 @@
+
+mandir = @mandir@/pl
+
+# 2012.01.28 - activate manpages with more than 50% translated messages
+man_MANS = \
+ man1/chage.1 \
+ man1/chsh.1 \
+ man1/expiry.1 \
+ man5/faillog.5 \
+ man8/faillog.8 \
+ man3/getspnam.3 \
+ man8/groupadd.8 \
+ man8/groupdel.8 \
+ man8/groupmems.8 \
+ man8/groupmod.8 \
+ man1/groups.1 \
+ man8/grpck.8 \
+ man8/lastlog.8 \
+ man8/logoutd.8 \
+ man1/newgrp.1 \
+ man1/sg.1 \
+ man3/shadow.3 \
+ man8/userdel.8 \
+ man8/usermod.8 \
+ man8/vigr.8 \
+ man8/vipw.8
+
+man_nopam = \
+ man5/porttime.5
+
+if !USE_PAM
+man_MANS += $(man_nopam)
+endif
+
+EXTRA_DIST = \
+ $(man_MANS) \
+ man1/id.1
+
+if USE_PAM
+EXTRA_DIST += $(man_nopam)
+endif
+
+include ../generate_translations.mak
+
diff --git a/man/pl/Makefile.in b/man/pl/Makefile.in
new file mode 100644
index 0000000..c9d408f
--- /dev/null
+++ b/man/pl/Makefile.in
@@ -0,0 +1,768 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@USE_PAM_FALSE@am__append_1 = $(man_nopam)
+@USE_PAM_TRUE@am__append_2 = $(man_nopam)
+subdir = man/pl
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" \
+ "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"
+man3dir = $(mandir)/man3
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/../generate_mans.mak \
+ $(srcdir)/../generate_translations.mak $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@/pl
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# 2012.01.28 - activate manpages with more than 50% translated messages
+man_MANS = man1/chage.1 man1/chsh.1 man1/expiry.1 man5/faillog.5 \
+ man8/faillog.8 man3/getspnam.3 man8/groupadd.8 man8/groupdel.8 \
+ man8/groupmems.8 man8/groupmod.8 man1/groups.1 man8/grpck.8 \
+ man8/lastlog.8 man8/logoutd.8 man1/newgrp.1 man1/sg.1 \
+ man3/shadow.3 man8/userdel.8 man8/usermod.8 man8/vigr.8 \
+ man8/vipw.8 $(am__append_1)
+man_nopam = \
+ man5/porttime.5
+
+EXTRA_DIST = $(man_MANS) man1/id.1 $(am__append_2)
+LANG = $(notdir $(CURDIR))
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_FALSE@PAM_COND = no_pam
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_TRUE@PAM_COND = pam
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_FALSE@SHADOWGRP_COND = no_gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_TRUE@SHADOWGRP_COND = gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@WITH_TCB_FALSE@TCB_COND = no_tcb
+@ENABLE_REGENERATE_MAN_TRUE@@WITH_TCB_TRUE@TCB_COND = tcb
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_FALSE@SHA_CRYPT_COND = no_sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_TRUE@SHA_CRYPT_COND = sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@@ENABLE_SUBIDS_FALSE@SUBIDS_COND = no_subids
+@ENABLE_REGENERATE_MAN_TRUE@@ENABLE_SUBIDS_TRUE@SUBIDS_COND = subids
+CLEANFILES = messages.mo login.defs.d $(EXTRA_DIST) $(addsuffix .xml,$(EXTRA_DIST)) config.xml
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../generate_translations.mak $(srcdir)/../generate_mans.mak $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/pl/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign man/pl/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(srcdir)/../generate_translations.mak $(srcdir)/../generate_mans.mak $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+install-man3: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man3dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.3[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man3:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man3dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.3[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir)
+install-man5: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man5dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.5[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man5:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man5dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.5[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir)
+install-man8: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man8dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.8[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man8:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man8dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.8[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+@ENABLE_REGENERATE_MAN_FALSE@clean-local:
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1 install-man3 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man3 uninstall-man5 \
+ uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ clean-local cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-man3 install-man5 install-man8 \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags-am uninstall uninstall-am uninstall-man uninstall-man1 \
+ uninstall-man3 uninstall-man5 uninstall-man8
+
+.PRECIOUS: Makefile
+
+
+@ENABLE_REGENERATE_MAN_TRUE@config.xml: ../config.xml.in
+@ENABLE_REGENERATE_MAN_TRUE@ $(MAKE) -C .. config.xml
+@ENABLE_REGENERATE_MAN_TRUE@ cp ../config.xml $@
+
+@ENABLE_REGENERATE_MAN_TRUE@messages.mo: ../po/$(LANG).po
+@ENABLE_REGENERATE_MAN_TRUE@ msgfmt ../po/$(LANG).po -o messages.mo
+
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.d:
+@ENABLE_REGENERATE_MAN_TRUE@ ln -sf ../login.defs.d login.defs.d
+
+@ENABLE_REGENERATE_MAN_TRUE@%.xml: ../%.xml messages.mo login.defs.d
+@ENABLE_REGENERATE_MAN_TRUE@ if grep -q SHADOW-CONFIG-HERE $< ; then \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^<!-- SHADOW-CONFIG-HERE -->/<!ENTITY % config SYSTEM "config.xml">%config;/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ else \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^\(<!DOCTYPE .*docbookx.dtd"\)>/\1 [<!ENTITY % config SYSTEM "config.xml">%config;]>/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ fi
+@ENABLE_REGENERATE_MAN_TRUE@ itstool -d -l $(LANG) -m messages.mo -o . $@
+@ENABLE_REGENERATE_MAN_TRUE@ sed -i 's:\(^<refentry .*\)>:\1 lang="$(LANG)">:' $@
+
+@ENABLE_REGENERATE_MAN_TRUE@%.xml-config: %.xml
+@ENABLE_REGENERATE_MAN_TRUE@ if grep -q SHADOW-CONFIG-HERE $<; then \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^<!-- SHADOW-CONFIG-HERE -->/<!ENTITY % config SYSTEM "config.xml">%config;/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ else \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^\(<!DOCTYPE .*docbookx.dtd"\)>/\1 [<!ENTITY % config SYSTEM "config.xml">%config;]>/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ fi
+
+@ENABLE_REGENERATE_MAN_TRUE@man1/% man3/% man5/% man8/%: %.xml-config Makefile config.xml
+@ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam profile.condition "$(PAM_COND);$(SHADOWGRP_COND);$(TCB_COND);$(SHA_CRYPT_COND);$(SUBIDS_COND)" \
+@ENABLE_REGENERATE_MAN_TRUE@ --param "man.authors.section.enabled" "0" \
+@ENABLE_REGENERATE_MAN_TRUE@ --stringparam "man.output.base.dir" "" \
+@ENABLE_REGENERATE_MAN_TRUE@ --param "man.output.in.separate.dir" "1" \
+@ENABLE_REGENERATE_MAN_TRUE@ -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/profile-docbook.xsl $<
+
+@ENABLE_REGENERATE_MAN_TRUE@clean-local:
+@ENABLE_REGENERATE_MAN_TRUE@ rm -rf man1 man3 man5 man8
+
+#$(man_MANS):
+# @echo you need to run configure with --enable-man to generate man pages
+
+@ENABLE_REGENERATE_MAN_TRUE@man8/grpconv.8 man8/grpunconv.8 man8/pwunconv.8: man8/pwconv.8
+
+@ENABLE_REGENERATE_MAN_TRUE@man3/getspnam.3: man3/shadow.3
+
+@ENABLE_REGENERATE_MAN_TRUE@man8/vigr.8: man8/vipw.8
+
+@ENABLE_REGENERATE_MAN_FALSE@$(man_MANS):
+@ENABLE_REGENERATE_MAN_FALSE@ @echo you need to run configure with --enable-man to generate man pages
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/pl/man1/chage.1 b/man/pl/man1/chage.1
new file mode 100644
index 0000000..135c808
--- /dev/null
+++ b/man/pl/man1/chage.1
@@ -0,0 +1,191 @@
+'\" t
+.\" Title: chage
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Polecenia użytkownik\('ow
+.\" Source: shadow-utils 4.8.1
+.\" Language: Polish
+.\"
+.TH "CHAGE" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Polecenia użytkownik\('ow"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+chage \- zmiana informacji o terminie ważności has\(/la użytkownika
+.SH "STRESZCZENIE"
+.HP \w'\fBchage\fR\ 'u
+\fBchage\fR [\fIopcje\fR] \fILOGIN\fR
+.SH "OPIS"
+.PP
+The
+\fBchage\fR
+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\&.
+.SH "OPCJE"
+.PP
+The options which apply to the
+\fBchage\fR
+command are:
+.PP
+\fB\-d\fR, \fB\-\-lastday\fR\ \&\fILAST_DAY\fR
+.RS 4
+Ustawia ilość dni od 1 stycznia 1970 kiedy ha\(/lo by\(/lo ostani raz zmieniane\&. Data ważności może być takze prezekazana w formacie RRRR\-MM\-DD (lub formacie używanym lokalnie)\&.
+.RE
+.PP
+\fB\-E\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+Ustawia datę, począwszy od kt\('orej konto użytkownika nie będzie już dostępne\&.
+\fIDATA_WAŻN\fR
+jest liczbą dni od 1 stycznia 1970, od kt\('orej konto jest blokowane\&. Data może być też wyrażona w formacie RRRR\-MM\-DD (lub innej, powszechniej używanej w danym regionie)\&. Użytkownik, kt\('orego konto jest zablokowane musi skontaktować się z administratorem systemu zanim będzie m\('og\(/l z niego ponownie skorzystać\&.
+.sp
+Passing the number
+\fI\-1\fR
+as the
+\fIEXPIRE_DATE\fR
+will remove an account expiration date\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Wyświetlenie komunikatu pomocy i zakończenie dzia\(/lania\&.
+.RE
+.PP
+\fB\-i\fR, \fB\-\-iso8601\fR
+.RS 4
+When printing dates, use YYYY\-MM\-DD format\&.
+.RE
+.PP
+\fB\-I\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+Set the number of days of inactivity after a password has expired before the account is locked\&. The
+\fIINACTIVE\fR
+option is the number of days of inactivity\&. A user whose account is locked must contact the system administrator before being able to use the system again\&.
+.sp
+Passing the number
+\fI\-1\fR
+as the
+\fIINACTIVE\fR
+will remove an account\*(Aqs inactivity\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-list\fR
+.RS 4
+Wyświetlenie informacji o terminach ważności konta i has\(/la\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-mindays\fR\ \&\fIMIN_DAYS\fR
+.RS 4
+Set the minimum number of days between password changes to
+\fIMIN_DAYS\fR\&. A value of zero for this field indicates that the user may change their password at any time\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-maxdays\fR\ \&\fIMAX_DAYS\fR
+.RS 4
+Set the maximum number of days during which a password is valid\&. When
+\fIMAX_DAYS\fR
+plus
+\fILAST_DAY\fR
+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
+\fB\-W\fR
+option, which provides the user with advance warning\&.
+.sp
+Passing the number
+\fI\-1\fR
+as
+\fIMAX_DAYS\fR
+will remove checking a password\*(Aqs validity\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-W\fR, \fB\-\-warndays\fR\ \&\fIWARN_DAYS\fR
+.RS 4
+Set the number of days of warning before a password change is required\&. The
+\fIWARN_DAYS\fR
+option is the number of days prior to the password expiring that a user will be warned their password is about to expire\&.
+.RE
+.PP
+If none of the options are selected,
+\fBchage\fR
+operates in an interactive fashion, prompting the user with the current values for all of the fields\&. Enter the new value to change the field, or leave the line blank to use the current value\&. The current value is displayed between a pair of
+\fI[ ]\fR
+marks\&.
+.SH "UWAGI"
+.PP
+The
+\fBchage\fR
+program requires a shadow password file to be available\&.
+.PP
+The
+\fBchage\fR
+command is restricted to the root user, except for the
+\fB\-l\fR
+option, which may be used by an unprivileged user to determine when their password or account is due to expire\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.SH "PLIKI"
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informacje chronione o użytkownikach\&.
+.RE
+.SH "KOD ZAKOŃCZENIA"
+.PP
+The
+\fBchage\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+permission denied
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI15\fR
+.RS 4
+can\*(Aqt find the shadow password file
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/pl/man1/chsh.1 b/man/pl/man1/chsh.1
new file mode 100644
index 0000000..cc33e46
--- /dev/null
+++ b/man/pl/man1/chsh.1
@@ -0,0 +1,121 @@
+'\" t
+.\" Title: chsh
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Polecenia użytkownik\('ow
+.\" Source: shadow-utils 4.8.1
+.\" Language: Polish
+.\"
+.TH "CHSH" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Polecenia użytkownik\('ow"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+chsh \- zmiana pow\(/loki zg\(/loszeniowej
+.SH "STRESZCZENIE"
+.HP \w'\fBchsh\fR\ 'u
+\fBchsh\fR [\fIopcje\fR] [\fILOGIN\fR]
+.SH "OPIS"
+.PP
+The
+\fBchsh\fR
+command changes the user login shell\&. This determines the name of the user\*(Aqs initial login command\&. A normal user may only change the login shell for her own account; the superuser may change the login shell for any account\&.
+.SH "OPCJE"
+.PP
+The options which apply to the
+\fBchsh\fR
+command are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Wyświetlenie komunikatu pomocy i zakończenie dzia\(/lania\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+Nazwa nowej pow\(/loki (shell) użytkownika\&. Ustawienie tego pola na puste powoduje, że system wybierze domyślną pow\(/lokę logowania\&.
+.RE
+.PP
+If the
+\fB\-s\fR
+option is not selected,
+\fBchsh\fR
+operates in an interactive fashion, prompting the user with the current login shell\&. Enter the new value to change the shell, or leave the line blank to use the current one\&. The current shell is displayed between a pair of
+\fI[ ]\fR
+marks\&.
+.SH "UWAGI"
+.PP
+The only restriction placed on the login shell is that the command name must be listed in
+/etc/shells, unless the invoker is the superuser, and then any value may be added\&. An account with a restricted login shell may not change her login shell\&. For this reason, placing
+/bin/rsh
+in
+/etc/shells
+is discouraged since accidentally changing to a restricted shell would prevent the user from ever changing her login shell back to its original value\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHSH_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchsh\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will not be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.PP
+/etc/shells
+.RS 4
+Lista dozwolonych pow\(/lok zg\(/loszeniowych\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguracja pakietu shadow\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBchfn\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/pl/man1/expiry.1 b/man/pl/man1/expiry.1
new file mode 100644
index 0000000..8bb203b
--- /dev/null
+++ b/man/pl/man1/expiry.1
@@ -0,0 +1,74 @@
+'\" t
+.\" Title: expiry
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Polecenia użytkownik\('ow
+.\" Source: shadow-utils 4.8.1
+.\" Language: Polish
+.\"
+.TH "EXPIRY" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Polecenia użytkownik\('ow"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+expiry \- sprawdzenie ważności i wymuszenie zmiany has\(/la
+.SH "STRESZCZENIE"
+.HP \w'\fBexpiry\fR\ 'u
+\fBexpiry\fR \fIoption\fR
+.SH "OPIS"
+.PP
+The
+\fBexpiry\fR
+command checks (\fB\-c\fR) the current password expiration and forces (\fB\-f\fR) changes when required\&. It is callable as a normal user command\&.
+.SH "OPCJE"
+.PP
+The options which apply to the
+\fBexpiry\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-check\fR
+.RS 4
+Check the password expiration of the current user\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+Force a password change if the current user has an expired password\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Wyświetlenie komunikatu pomocy i zakończenie dzia\(/lania\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informacje chronione o użytkownikach\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/pl/man1/groups.1 b/man/pl/man1/groups.1
new file mode 100644
index 0000000..05f7a8e
--- /dev/null
+++ b/man/pl/man1/groups.1
@@ -0,0 +1,64 @@
+'\" t
+.\" Title: groups
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Polecenia użytkownik\('ow
+.\" Source: shadow-utils 4.8.1
+.\" Language: Polish
+.\"
+.TH "GROUPS" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Polecenia użytkownik\('ow"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+groups \- display current group names
+.SH "STRESZCZENIE"
+.HP \w'\fBgroups\fR\ 'u
+\fBgroups\fR [\fIuser\fR]
+.SH "OPIS"
+.PP
+The
+\fBgroups\fR
+command displays the current group names or ID values\&. If the value does not have a corresponding entry in
+/etc/group, the value will be displayed as the numerical group value\&. The optional
+\fIuser\fR
+parameter will display the groups for the named
+\fIuser\fR\&.
+.SH "UWAGI"
+.PP
+Systems which do not support concurrent group sets will have the information from
+/etc/group
+reported\&. The user must use
+\fBnewgrp\fR
+or
+\fBsg\fR
+to change his current real and effective group ID\&.
+.SH "PLIKI"
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBnewgrp\fR(1),
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)\&.
diff --git a/man/pl/man1/id.1 b/man/pl/man1/id.1
new file mode 100644
index 0000000..4afbfc9
--- /dev/null
+++ b/man/pl/man1/id.1
@@ -0,0 +1,60 @@
+'\" t
+.\" Title: id
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Polecenia użytkownik\('ow
+.\" Source: shadow-utils 4.8.1
+.\" Language: Polish
+.\"
+.TH "ID" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Polecenia użytkownik\('ow"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+id \- display current user and group ID names
+.SH "STRESZCZENIE"
+.HP \w'\fBid\fR\ 'u
+\fBid\fR [\-a]
+.SH "OPIS"
+.PP
+The
+\fBid\fR
+command displays the current real and effective user and group ID names or values\&. If the value does not have a corresponding entry in
+/etc/passwd
+or
+/etc/group, the value will be displayed without the corresponding name\&. The optional
+\fB\-a\fR
+flag will display the group set on systems which support multiple concurrent group membership\&.
+.SH "PLIKI"
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)
diff --git a/man/pl/man1/newgrp.1 b/man/pl/man1/newgrp.1
new file mode 100644
index 0000000..6fdb3b2
--- /dev/null
+++ b/man/pl/man1/newgrp.1
@@ -0,0 +1,98 @@
+'\" t
+.\" Title: newgrp
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Polecenia użytkownik\('ow
+.\" Source: shadow-utils 4.8.1
+.\" Language: Polish
+.\"
+.TH "NEWGRP" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Polecenia użytkownik\('ow"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+newgrp \- log in to a new group
+.SH "STRESZCZENIE"
+.HP \w'\fBnewgrp\fR\ 'u
+\fBnewgrp\fR [\-] [\fIgroup\fR]
+.SH "OPIS"
+.PP
+The
+\fBnewgrp\fR
+command is used to change the current group ID during a login session\&. If the optional
+\fB\-\fR
+flag is given, the user\*(Aqs environment will be reinitialized as though the user had logged in, otherwise the current environment, including current working directory, remains unchanged\&.
+.PP
+\fBnewgrp\fR
+changes the current real group ID to the named group, or to the default group listed in
+/etc/passwd
+if no group name is given\&.
+\fBnewgrp\fR
+also tries to add the group to the user groupset\&. If not root, the user will be prompted for a password if she does not have a password (in
+/etc/shadow
+if this user has an entry in the shadowed password file, or in
+/etc/passwd
+otherwise) and the group does, or if the user is not listed as a member and the group has a password\&. The user will be denied access if the group password is empty and the user is not listed as a member\&.
+.PP
+If there is an entry for this group in
+/etc/gshadow, then the list of members and the password of this group will be taken from this file, otherwise, the entry in
+/etc/group
+is considered\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informacje chronione o użytkownikach\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informacje chronione o grupach użytkownik\('ow\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBsu\fR(1),
+\fBsg\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/pl/man1/sg.1 b/man/pl/man1/sg.1
new file mode 100644
index 0000000..82c1ee9
--- /dev/null
+++ b/man/pl/man1/sg.1
@@ -0,0 +1,97 @@
+'\" t
+.\" Title: sg
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Polecenia użytkownik\('ow
+.\" Source: shadow-utils 4.8.1
+.\" Language: Polish
+.\"
+.TH "SG" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Polecenia użytkownik\('ow"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+sg \- execute command as different group ID
+.SH "STRESZCZENIE"
+.HP \w'\fBsg\fR\ 'u
+\fBsg\fR [\-] [group\ [\-c\ ]\ command]
+.SH "OPIS"
+.PP
+The
+\fBsg\fR
+command works similar to
+\fBnewgrp\fR
+but accepts a command\&. The command will be executed with the
+/bin/sh
+shell\&. With most shells you may run
+\fBsg\fR
+from, you need to enclose multi\-word commands in quotes\&. Another difference between
+\fBnewgrp\fR
+and
+\fBsg\fR
+is that some shells treat
+\fBnewgrp\fR
+specially, replacing themselves with a new instance of a shell that
+\fBnewgrp\fR
+creates\&. This doesn\*(Aqt happen with
+\fBsg\fR, so upon exit from a
+\fBsg\fR
+command you are returned to your previous group ID\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informacje chronione o użytkownikach\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informacje chronione o grupach użytkownik\('ow\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBnewgrp\fR(1),
+\fBsu\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/pl/man3/getspnam.3 b/man/pl/man3/getspnam.3
new file mode 100644
index 0000000..cd473da
--- /dev/null
+++ b/man/pl/man3/getspnam.3
@@ -0,0 +1 @@
+.so man3/shadow.3
diff --git a/man/pl/man3/shadow.3 b/man/pl/man3/shadow.3
new file mode 100644
index 0000000..e27ab5c
--- /dev/null
+++ b/man/pl/man3/shadow.3
@@ -0,0 +1,245 @@
+'\" t
+.\" Title: shadow
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Library Calls
+.\" Source: shadow-utils 4.8.1
+.\" Language: Polish
+.\"
+.TH "SHADOW" "3" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Library Calls"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+shadow, getspnam \- encrypted password file routines
+.SH "SK\(/LADNIA"
+.PP
+\fI#include <shadow\&.h>\fR
+.PP
+\fIstruct spwd *getspent();\fR
+.PP
+\fIstruct spwd *getspnam(char\fR
+\fI*name\fR\fI);\fR
+.PP
+\fIvoid setspent()\fR
+.PP
+\fIvoid endspent();\fR
+.PP
+\fIstruct spwd *fgetspent(FILE\fR
+\fI*fp\fR\fI);\fR
+.PP
+\fIstruct spwd *sgetspent(char\fR
+\fI*cp\fR\fI);\fR
+.PP
+\fIint putspent(struct spwd\fR
+\fI*p,\fR
+\fIFILE\fR
+\fI*fp\fR\fI);\fR
+.PP
+\fIint lckpwdf();\fR
+.PP
+\fIint ulckpwdf();\fR
+.SH "OPIS"
+.PP
+\fIshadow\fR
+manipulates the contents of the shadow password file,
+/etc/shadow\&. The structure in the
+\fI#include\fR
+file is:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct spwd {
+ char *sp_namp; /* user login name */
+ char *sp_pwdp; /* encrypted password */
+ long int sp_lstchg; /* last password change */
+ long int sp_min; /* days until change allowed\&. */
+ long int sp_max; /* days before change required */
+ long int sp_warn; /* days warning for expiration */
+ long int sp_inact; /* days before account inactive */
+ long int sp_expire; /* date when account expires */
+ unsigned long int sp_flag; /* reserved for future use */
+}
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+The meanings of each field are:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_namp \- pointer to null\-terminated user name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_pwdp \- pointer to null\-terminated password
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_lstchg \- days since Jan 1, 1970 password was last changed
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_min \- days before which password may not be changed
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_max \- days after which password must be changed
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_warn \- days before password is to expire that user is warned of pending password expiration
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_inact \- days after password expires that account is considered inactive and disabled
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_expire \- days since Jan 1, 1970 when account will be disabled
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_flag \- reserved for future use
+.RE
+.SH "OPIS"
+.PP
+\fIgetspent\fR,
+\fIgetspname\fR,
+\fIfgetspent\fR, and
+\fIsgetspent\fR
+each return a pointer to a
+\fIstruct spwd\fR\&.
+\fIgetspent\fR
+returns the next entry from the file, and
+\fIfgetspent\fR
+returns the next entry from the given stream, which is assumed to be a file of the proper format\&.
+\fIsgetspent\fR
+returns a pointer to a
+\fIstruct spwd\fR
+using the provided string as input\&.
+\fIgetspnam\fR
+searches from the current position in the file for an entry matching
+\fIname\fR\&.
+.PP
+\fIsetspent\fR
+and
+\fIendspent\fR
+may be used to begin and end, respectively, access to the shadow password file\&.
+.PP
+The
+\fIlckpwdf\fR
+and
+\fIulckpwdf\fR
+routines should be used to insure exclusive access to the
+/etc/shadow
+file\&.
+\fIlckpwdf\fR
+attempts to acquire a lock using
+\fIpw_lock\fR
+for up to 15 seconds\&. It continues by attempting to acquire a second lock using
+\fIspw_lock\fR
+for the remainder of the initial 15 seconds\&. Should either attempt fail after a total of 15 seconds,
+\fIlckpwdf\fR
+returns \-1\&. When both locks are acquired 0 is returned\&.
+.SH "DIAGNOSTYKA"
+.PP
+Routines return NULL if no more entries are available or if an error occurs during processing\&. Routines which have
+\fIint\fR
+as the return value return 0 for success and \-1 for failure\&.
+.SH "OSTRZEŻENIA"
+.PP
+These routines may only be used by the superuser as access to the shadow password file is restricted\&.
+.SH "PLIKI"
+.PP
+/etc/shadow
+.RS 4
+Informacje chronione o użytkownikach\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBgetpwent\fR(3),
+\fBshadow\fR(5)\&.
diff --git a/man/pl/man5/faillog.5 b/man/pl/man5/faillog.5
new file mode 100644
index 0000000..84aff2d
--- /dev/null
+++ b/man/pl/man5/faillog.5
@@ -0,0 +1,64 @@
+'\" t
+.\" Title: faillog
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: File Formats and Conversions
+.\" Source: shadow-utils 4.8.1
+.\" Language: Polish
+.\"
+.TH "FAILLOG" "5" "01/23/2020" "shadow\-utils 4\&.8\&.1" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+faillog \- login failure logging file
+.SH "OPIS"
+.PP
+/var/log/faillog
+maintains a count of login failures and the limits for each account\&.
+.PP
+The file contains fixed length records, indexed by numerical UID\&. Each record contains the count of login failures since the last successful login; the maximum number of failures before the account is disabled; the line on which the last login failure occurred; the date of the last login failure; and the duration (in seconds) during which the account will be locked after a failure\&.
+.PP
+Struktura tego pliku to:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct faillog {
+ short fail_cnt;
+ short fail_max;
+ char fail_line[12];
+ time_t fail_time;
+ long fail_locktime;
+};
+.fi
+.if n \{\
+.RE
+.\}
+.SH "PLIKI"
+.PP
+/var/log/faillog
+.RS 4
+Failure logging file\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBfaillog\fR(8)
diff --git a/man/pl/man5/porttime.5 b/man/pl/man5/porttime.5
new file mode 100644
index 0000000..1be9aa7
--- /dev/null
+++ b/man/pl/man5/porttime.5
@@ -0,0 +1,96 @@
+'\" t
+.\" Title: porttime
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: File Formats and Conversions
+.\" Source: shadow-utils 4.8.1
+.\" Language: Polish
+.\"
+.TH "PORTTIME" "5" "01/23/2020" "shadow\-utils 4\&.8\&.1" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+porttime \- port access time file
+.SH "OPIS"
+.PP
+\fIporttime\fR
+contains a list of tty devices, user names, and permitted login times\&.
+.PP
+Each entry consists of three colon separated fields\&. The first field is a comma separated list of tty devices, or an asterisk to indicate that all tty devices are matched by this entry\&. The second field is a comma separated list of user names, or an asterisk to indicated that all user names are matched by this entry\&. The third field is a comma separated list of permitted access times\&.
+.PP
+Each access time entry consists of zero or more days of the week, abbreviated
+\fISu\fR,
+\fIMo\fR,
+\fITu\fR,
+\fIWe\fR,
+\fITh\fR,
+\fIFr\fR, and
+\fISa\fR, followed by a pair of times separated by a hyphen\&. The abbreviation
+\fIWk\fR
+may be used to represent Monday thru Friday, and
+\fIAl\fR
+may be used to indicate every day\&. If no days are given,
+\fIAl\fR
+is assumed\&.
+.SH "PRZYK\(/LADY"
+.PP
+The following entry allows access to user
+\fBjfh\fR
+on every port during weekdays from 9am to 5pm\&.
+.PP
+*:jfh:Wk0900\-1700
+.PP
+The following entries allow access only to the users
+\fIroot\fR
+and
+\fIoper\fR
+on
+/dev/console
+at any time\&. This illustrates how the
+/etc/porttime
+file is an ordered list of access times\&. Any other user would match the second entry which does not permit access at any time\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ console:root,oper:Al0000\-2400
+ console:*:
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+The following entry allows access for the user
+\fIgames\fR
+on any port during non\-working hours\&.
+.PP
+*:games:Wk1700\-0900,SaSu0000\-2400
+.SH "PLIKI"
+.PP
+/etc/porttime
+.RS 4
+Plik zawierający ustawienia dostępu do port\('ow\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBlogin\fR(1)\&.
diff --git a/man/pl/man8/faillog.8 b/man/pl/man8/faillog.8
new file mode 100644
index 0000000..ed99808
--- /dev/null
+++ b/man/pl/man8/faillog.8
@@ -0,0 +1,165 @@
+'\" t
+.\" Title: faillog
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Polecenia Zarządzania Systemem
+.\" Source: shadow-utils 4.8.1
+.\" Language: Polish
+.\"
+.TH "FAILLOG" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+faillog \- display faillog records or set login failure limits
+.SH "STRESZCZENIE"
+.HP \w'\fBfaillog\fR\ 'u
+\fBfaillog\fR [\fIopcje\fR]
+.SH "OPIS"
+.PP
+\fBfaillog\fR
+displays the contents of the failure log database (/var/log/faillog)\&. It can also set the failure counters and limits\&. When
+\fBfaillog\fR
+is run without arguments, it only displays the faillog records of the users who had a login failure\&.
+.SH "OPCJE"
+.PP
+The options which apply to the
+\fBfaillog\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+Display (or act on) faillog records for all users having an entry in the
+faillog
+database\&.
+.sp
+The range of users can be restricted with the
+\fB\-u\fR
+option\&.
+.sp
+In display mode, this is still restricted to existing users but forces the display of the faillog entries even if they are empty\&.
+.sp
+With the
+\fB\-l\fR,
+\fB\-m\fR,
+\fB\-r\fR,
+\fB\-t\fR
+options, the users\*(Aq records are changed, even if the user does not exist on the system\&. This is useful to reset records of users that have been deleted or to set a policy in advance for a range of users\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Wyświetlenie komunikatu pomocy i zakończenie dzia\(/lania\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\-secs\fR\ \&\fISEC\fR
+.RS 4
+Lock account for
+\fISEC\fR
+seconds after failed login\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-maximum\fR\ \&\fIMAX\fR
+.RS 4
+Set the maximum number of login failures after the account is disabled to
+\fIMAX\fR\&.
+.sp
+Selecting a
+\fIMAX\fR
+value of 0 has the effect of not placing a limit on the number of failed logins\&.
+.sp
+The maximum failure count should always be 0 for
+\fIroot\fR
+to prevent a denial of services attack against the system\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-reset\fR
+.RS 4
+Reset the counters of login failures\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR\ \&\fIDAYS\fR
+.RS 4
+Display faillog records more recent than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR\ \&\fILOGIN\fR|\fIRANGE\fR
+.RS 4
+Display faillog record or maintains failure counters and limits (if used with
+\fB\-l\fR,
+\fB\-m\fR
+or
+\fB\-r\fR
+options) only for the specified user(s)\&.
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+When none of the
+\fB\-l\fR,
+\fB\-m\fR, or
+\fB\-r\fR
+options are used,
+\fBfaillog\fR
+displays the faillog record of the specified user(s)\&.
+.SH "OSTRZEŻENIA"
+.PP
+\fBfaillog\fR
+only prints out users with no successful login since the last failure\&. To print out a user who has had a successful login since their last failure, you must explicitly request the user with the
+\fB\-u\fR
+flag, or print out all users with the
+\fB\-a\fR
+flag\&.
+.SH "PLIKI"
+.PP
+/var/log/faillog
+.RS 4
+Failure logging file\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBlogin\fR(1),
+\fBfaillog\fR(5)\&.
diff --git a/man/pl/man8/groupadd.8 b/man/pl/man8/groupadd.8
new file mode 100644
index 0000000..128a601
--- /dev/null
+++ b/man/pl/man8/groupadd.8
@@ -0,0 +1,257 @@
+'\" t
+.\" Title: groupadd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Polecenia Zarządzania Systemem
+.\" Source: shadow-utils 4.8.1
+.\" Language: Polish
+.\"
+.TH "GROUPADD" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+groupadd \- utw\('orz nową grupę
+.SH "STRESZCZENIE"
+.HP \w'\fBgroupadd\fR\ 'u
+\fBgroupadd\fR [\fIopcje\fR] \fIgroup\fR
+.SH "OPIS"
+.PP
+The
+\fBgroupadd\fR
+command creates a new group account using the values specified on the command line plus the default values from the system\&. The new group will be entered into the system files as needed\&.
+.SH "OPCJE"
+.PP
+The options which apply to the
+\fBgroupadd\fR
+command are:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option causes the command to simply exit with success status if the specified group already exists\&. When used with
+\fB\-g\fR, and the specified GID already exists, another (unique) GID is chosen (i\&.e\&.
+\fB\-g\fR
+is turned off)\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGID\fR
+.RS 4
+The numerical value of the group\*(Aqs ID\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&. The default is to use the smallest ID value greater than or equal to
+\fBGID_MIN\fR
+and greater than every other group\&.
+.sp
+See also the
+\fB\-r\fR
+option and the
+\fBGID_MAX\fR
+description\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Wyświetlenie komunikatu pomocy i zakończenie dzia\(/lania\&.
+.RE
+.PP
+\fB\-K\fR, \fB\-\-key\fR\ \&\fIKEY\fR=\fIVALUE\fR
+.RS 4
+Overrides
+/etc/login\&.defs
+defaults (GID_MIN, GID_MAX and others)\&. Multiple
+\fB\-K\fR
+options can be specified\&.
+.sp
+Example:
+\fB\-K\fR\ \&\fIGID_MIN\fR=\fI100\fR\ \&
+\fB\-K\fR\ \&\fIGID_MAX\fR=\fI499\fR
+.sp
+Note:
+\fB\-K\fR\ \&\fIGID_MIN\fR=\fI10\fR,\fIGID_MAX\fR=\fI499\fR
+doesn\*(Aqt work yet\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+This option permits to add a group with a non\-unique GID\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&. The default is to disable the password\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\*(Aqs password policy\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Create a system group\&.
+.sp
+The numeric identifiers of new system groups are chosen in the
+\fBSYS_GID_MIN\fR\-\fBSYS_GID_MAX\fR
+range, defined in
+login\&.defs, instead of
+\fBGID_MIN\fR\-\fBGID_MAX\fR\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBGID_MIN\fR
+(resp\&.
+\fBGID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_GID_MIN\fR
+(resp\&.
+\fBSYS_GID_MAX\fR) is 101 (resp\&.
+\fBGID_MIN\fR\-1)\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informacje chronione o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguracja pakietu shadow\&.
+.RE
+.SH "OSTRZEŻENIA"
+.PP
+Groupnames must start with a lower case letter or an underscore, followed by lower case letters, digits, underscores, or dashes\&. They can end with a dollar sign\&. In regular expression terms: [a\-z_][a\-z0\-9_\-]*[$]?
+.PP
+Groupnames may only be up to 16 characters long\&.
+.PP
+You may not add a NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.PP
+If the groupname already exists in an external group database such as NIS or LDAP,
+\fBgroupadd\fR
+will deny the group creation request\&.
+.SH "KOD ZAKOŃCZENIA"
+.PP
+The
+\fBgroupadd\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+GID not unique (when
+\fB\-o\fR
+not used)
+.RE
+.PP
+\fI9\fR
+.RS 4
+group name not unique
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/pl/man8/groupdel.8 b/man/pl/man8/groupdel.8
new file mode 100644
index 0000000..43e9de0
--- /dev/null
+++ b/man/pl/man8/groupdel.8
@@ -0,0 +1,145 @@
+'\" t
+.\" Title: groupdel
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Polecenia Zarządzania Systemem
+.\" Source: shadow-utils 4.8.1
+.\" Language: Polish
+.\"
+.TH "GROUPDEL" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+groupdel \- delete a group
+.SH "STRESZCZENIE"
+.HP \w'\fBgroupdel\fR\ 'u
+\fBgroupdel\fR [\fIopcje\fR] \fIGRUPA\fR
+.SH "OPIS"
+.PP
+The
+\fBgroupdel\fR
+command modifies the system account files, deleting all entries that refer to
+\fIGROUP\fR\&. The named group must exist\&.
+.SH "OPCJE"
+.PP
+The options which apply to the
+\fBgroupdel\fR
+command are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Wyświetlenie komunikatu pomocy i zakończenie dzia\(/lania\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.SH "OSTRZEŻENIA"
+.PP
+You may not remove the primary group of any existing user\&. You must remove the user before you remove the group\&.
+.PP
+You should manually check all file systems to ensure that no files remain owned by this group\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informacje chronione o grupach użytkownik\('ow\&.
+.RE
+.SH "KOD ZAKOŃCZENIA"
+.PP
+The
+\fBgroupdel\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI8\fR
+.RS 4
+can\*(Aqt remove user\*(Aqs primary group
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/pl/man8/groupmems.8 b/man/pl/man8/groupmems.8
new file mode 100644
index 0000000..9136efa
--- /dev/null
+++ b/man/pl/man8/groupmems.8
@@ -0,0 +1,180 @@
+'\" t
+.\" Title: groupmems
+.\" Author: George Kraft, IV
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Polecenia Zarządzania Systemem
+.\" Source: shadow-utils 4.8.1
+.\" Language: Polish
+.\"
+.TH "GROUPMEMS" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+groupmems \- administer members of a user\*(Aqs primary group
+.SH "STRESZCZENIE"
+.HP \w'\fBgroupmems\fR\ 'u
+\fBgroupmems\fR \-a\ \fIuser_name\fR | \-d\ \fIuser_name\fR | [\-g\ \fIgroup_name\fR] | \-l | \-p
+.SH "OPIS"
+.PP
+The
+\fBgroupmems\fR
+command 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)\&.
+.PP
+Only the superuser, as administrator, can use
+\fBgroupmems\fR
+to alter the memberships of other groups\&.
+.SH "OPCJE"
+.PP
+The options which apply to the
+\fBgroupmems\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-add\fR\ \&\fIuser_name\fR
+.RS 4
+Add a user to the group membership list\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR\ \&\fIuser_name\fR
+.RS 4
+Delete a user from the group membership list\&.
+.sp
+If the
+/etc/gshadow
+file exist, the user will be removed from the list of members and administrators of the group\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-group\fR\ \&\fIgroup_name\fR
+.RS 4
+The superuser can specify which group membership list to modify\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Wyświetlenie komunikatu pomocy i zakończenie dzia\(/lania\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-list\fR
+.RS 4
+List the group membership list\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-purge\fR
+.RS 4
+Purge all users from the group membership list\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.SH "SETUP"
+.PP
+The
+\fBgroupmems\fR
+executable should be in mode
+2710
+as user
+\fIroot\fR
+and in group
+\fIgroups\fR\&. The system administrator can add users to group
+\fIgroups\fR
+to allow or disallow them using the
+\fBgroupmems\fR
+utility to manage their own group membership list\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ $ groupadd \-r groups
+ $ chmod 2710 groupmems
+ $ chown root\&.groups groupmems
+ $ groupmems \-g groups \-a gk4
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+secure group account information
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/pl/man8/groupmod.8 b/man/pl/man8/groupmod.8
new file mode 100644
index 0000000..c0bfd86
--- /dev/null
+++ b/man/pl/man8/groupmod.8
@@ -0,0 +1,233 @@
+'\" t
+.\" Title: groupmod
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Polecenia Zarządzania Systemem
+.\" Source: shadow-utils 4.8.1
+.\" Language: Polish
+.\"
+.TH "GROUPMOD" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+groupmod \- modyfikuj definicję grupy systemowej
+.SH "STRESZCZENIE"
+.HP \w'\fBgroupmod\fR\ 'u
+\fBgroupmod\fR [\fIopcje\fR] \fIGRUPA\fR
+.SH "OPIS"
+.PP
+The
+\fBgroupmod\fR
+command modifies the definition of the specified
+\fIGROUP\fR
+by modifying the appropriate entry in the group database\&.
+.SH "OPCJE"
+.PP
+The options which apply to the
+\fBgroupmod\fR
+command are:
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGID\fR
+.RS 4
+The group ID of the given
+\fIGROUP\fR
+will be changed to
+\fIGID\fR\&.
+.sp
+The value of
+\fIGID\fR
+must be a non\-negative decimal integer\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&.
+.sp
+Users who use the group as primary group will be updated to keep the group as their primary group\&.
+.sp
+Any files that have the old group ID and must continue to belong to
+\fIGROUP\fR, must have their group ID changed manually\&.
+.sp
+No checks will be performed with regard to the
+\fBGID_MIN\fR,
+\fBGID_MAX\fR,
+\fBSYS_GID_MIN\fR, or
+\fBSYS_GID_MAX\fR
+from
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Wyświetlenie komunikatu pomocy i zakończenie dzia\(/lania\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-new\-name\fR\ \&\fINEW_GROUP\fR
+.RS 4
+The name of the group will be changed from
+\fIGROUP\fR
+to
+\fINEW_GROUP\fR
+name\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+When used with the
+\fB\-g\fR
+option, allow to change the group
+\fIGID\fR
+to a non\-unique value\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\*(Aqs password policy\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informacje chronione o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguracja pakietu shadow\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.SH "KOD ZAKOŃCZENIA"
+.PP
+The
+\fBgroupmod\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+E_SUCCESS: success
+.RE
+.PP
+\fI2\fR
+.RS 4
+E_USAGE: invalid command syntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+E_BAD_ARG: invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+E_GID_IN_USE: specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI6\fR
+.RS 4
+E_NOTFOUND: specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI9\fR
+.RS 4
+E_NAME_IN_USE: group name already in use
+.RE
+.PP
+\fI10\fR
+.RS 4
+E_GRP_UPDATE: can\*(Aqt update group file
+.RE
+.PP
+\fI11\fR
+.RS 4
+E_CLEANUP_SERVICE: can\*(Aqt setup cleanup service
+.RE
+.PP
+\fI12\fR
+.RS 4
+E_PAM_USERNAME: can\*(Aqt determine your username for use with pam
+.RE
+.PP
+\fI13\fR
+.RS 4
+E_PAM_ERROR: pam returned an error, see syslog facility id groupmod for the PAM error message
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/pl/man8/grpck.8 b/man/pl/man8/grpck.8
new file mode 100644
index 0000000..ebd5014
--- /dev/null
+++ b/man/pl/man8/grpck.8
@@ -0,0 +1,247 @@
+'\" t
+.\" Title: grpck
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Polecenia Zarządzania Systemem
+.\" Source: shadow-utils 4.8.1
+.\" Language: Polish
+.\"
+.TH "GRPCK" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+grpck \- verify integrity of group files
+.SH "STRESZCZENIE"
+.HP \w'\fBgrpck\fR\ 'u
+\fBgrpck\fR [opcje] [\fIgroup\fR\ [\ \fIshadow\fR\ ]]
+.SH "OPIS"
+.PP
+The
+\fBgrpck\fR
+command verifies the integrity of the groups information\&. It checks that all entries in
+/etc/group
+and /etc/gshadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+Checks are made to verify that each entry has:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+the correct number of fields
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a unique and valid group name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid group identifier
+(/etc/group only)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid list of members
+and administrators
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a corresponding entry in the
+/etc/gshadow
+file (respectively
+/etc/group
+for the
+gshadow
+checks)
+.RE
+.PP
+The checks for correct number of fields and unique group name are fatal\&. If an entry has the wrong number of fields, the user will be prompted to delete the entire line\&. If the user does not answer affirmatively, all further checks are bypassed\&. An entry with a duplicated group name is prompted for deletion, but the remaining checks will still be made\&. All other errors are warnings and the user is encouraged to run the
+\fBgroupmod\fR
+command to correct the error\&.
+.PP
+The commands which operate on the
+/etc/group
+and /etc/gshadow files
+are not able to alter corrupted or duplicated entries\&.
+\fBgrpck\fR
+should be used in those circumstances to remove the offending entries\&.
+.SH "OPCJE"
+.PP
+The
+\fB\-r\fR
+and
+\fB\-s\fR
+options cannot be combined\&.
+.PP
+The options which apply to the
+\fBgrpck\fR
+command are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Wyświetlenie komunikatu pomocy i zakończenie dzia\(/lania\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-read\-only\fR
+.RS 4
+Execute the
+\fBgrpck\fR
+command in read\-only mode\&. This causes all questions regarding changes to be answered
+\fIno\fR
+without user intervention\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sort\fR
+.RS 4
+Sort entries in
+/etc/group
+and /etc/gshadow
+by GID\&.
+.RE
+.PP
+By default,
+\fBgrpck\fR
+operates on
+/etc/group
+and /etc/gshadow\&. The user may select alternate files with the
+\fIgroup\fR
+and \fIshadow\fR parameters\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informacje chronione o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.SH "KOD ZAKOŃCZENIA"
+.PP
+The
+\fBgrpck\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI2\fR
+.RS 4
+one or more bad group entries
+.RE
+.PP
+\fI3\fR
+.RS 4
+can\*(Aqt open group files
+.RE
+.PP
+\fI4\fR
+.RS 4
+can\*(Aqt lock group files
+.RE
+.PP
+\fI5\fR
+.RS 4
+can\*(Aqt update group files
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBgroup\fR(5),
+\fBgroupmod\fR(8),
+\fBgshadow\fR(5),
+\fBpasswd\fR(5),
+\fBpwck\fR(8),
+\fBshadow\fR(5)\&.
diff --git a/man/pl/man8/lastlog.8 b/man/pl/man8/lastlog.8
new file mode 100644
index 0000000..d68951a
--- /dev/null
+++ b/man/pl/man8/lastlog.8
@@ -0,0 +1,137 @@
+'\" t
+.\" Title: lastlog
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Polecenia Zarządzania Systemem
+.\" Source: shadow-utils 4.8.1
+.\" Language: Polish
+.\"
+.TH "LASTLOG" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+lastlog \- wyświetla informacje o ostanim logowaniu dla wybranego lub wszystkich użytkowanik\('ow
+.SH "STRESZCZENIE"
+.HP \w'\fBlastlog\fR\ 'u
+\fBlastlog\fR [\fIopcje\fR]
+.SH "OPIS"
+.PP
+\fBlastlog\fR
+formats and prints the contents of the last login log
+/var/log/lastlog
+file\&. The
+\fIlogin\-name\fR,
+\fIport\fR, and
+\fIlast login time\fR
+will be printed\&. The default (no flags) causes lastlog entries to be printed, sorted by their order in
+/etc/passwd\&.
+.SH "OPCJE"
+.PP
+The options which apply to the
+\fBlastlog\fR
+command are:
+.PP
+\fB\-b\fR, \fB\-\-before\fR\ \&\fIDAYS\fR
+.RS 4
+Print only lastlog records older than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-C\fR, \fB\-\-clear\fR
+.RS 4
+Clear lastlog record of a user\&. This option can be used only together with
+\fB\-u\fR
+(\fB\-\-user\fR))\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Wyświetlenie komunikatu pomocy i zakończenie dzia\(/lania\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-S\fR, \fB\-\-set\fR
+.RS 4
+Set lastlog record of a user to the current time\&. This option can be used only together with
+\fB\-u\fR
+(\fB\-\-user\fR))\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR\ \&\fIDAYS\fR
+.RS 4
+Print the lastlog records more recent than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR\ \&\fILOGIN\fR|\fIRANGE\fR
+.RS 4
+Print the lastlog record of the specified user(s)\&.
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+If the user has never logged in the message
+\fI** Never logged in**\fR
+will be displayed instead of the port and time\&.
+.PP
+Only the entries for the current users of the system will be displayed\&. Other entries may exist for users that were deleted previously\&.
+.SH "UWAGI"
+.PP
+The
+lastlog
+file is a database which contains info on the last login of each user\&. You should not rotate it\&. It is a sparse file, so its size on the disk is usually much smaller than the one shown by "\fBls \-l\fR" (which can indicate a really big file if you have in
+passwd
+users with a high UID)\&. You can display its real size with "\fBls \-s\fR"\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.SH "PLIKI"
+.PP
+/var/log/lastlog
+.RS 4
+Baza danych ostatnich logowań użytkownik\('ow\&.
+.RE
+.SH "OSTRZEŻENIA"
+.PP
+Duże luki w numeracji UID powodują, że program będzie pracowa\(/l d\(/lużej, nie wyświetlając wynik\('ow (np\&. jeśli w bazie lastlog nie ma wpis\('ow dla o UID pomiedzy 170, a 800, to program będzie sprawia\(/l wrażenie zawieszonego w trakcie przetwarzania wpis\('ow dla użytkowanik\('o\(/l o UID 171\-799)\&.
diff --git a/man/pl/man8/logoutd.8 b/man/pl/man8/logoutd.8
new file mode 100644
index 0000000..8072d5e
--- /dev/null
+++ b/man/pl/man8/logoutd.8
@@ -0,0 +1,57 @@
+'\" t
+.\" Title: logoutd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Polecenia Zarządzania Systemem
+.\" Source: shadow-utils 4.8.1
+.\" Language: Polish
+.\"
+.TH "LOGOUTD" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+logoutd \- wymuszenie ograniczeń czasu logowania
+.SH "STRESZCZENIE"
+.HP \w'\fBlogoutd\fR\ 'u
+\fBlogoutd\fR
+.SH "OPIS"
+.PP
+\fBlogoutd\fR
+enforces the login time and port restrictions specified in
+/etc/porttime\&.
+\fBlogoutd\fR
+should be started from
+/etc/rc\&. The
+/var/run/utmp
+file is scanned periodically and each user name is checked to see if the named user is permitted on the named port at the current time\&. Any login session which is violating the restrictions in
+/etc/porttime
+is terminated\&.
+.SH "PLIKI"
+.PP
+/etc/porttime
+.RS 4
+Plik zawierający ustawienia dostępu do port\('ow\&.
+.RE
+.PP
+/var/run/utmp
+.RS 4
+List bieżących sesji pracy\&.
+.RE
diff --git a/man/pl/man8/userdel.8 b/man/pl/man8/userdel.8
new file mode 100644
index 0000000..43f0eea
--- /dev/null
+++ b/man/pl/man8/userdel.8
@@ -0,0 +1,308 @@
+'\" t
+.\" Title: userdel
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Polecenia Zarządzania Systemem
+.\" Source: shadow-utils 4.8.1
+.\" Language: Polish
+.\"
+.TH "USERDEL" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+userdel \- plik chroniony informacji o użytkownikach
+.SH "STRESZCZENIE"
+.HP \w'\fBuserdel\fR\ 'u
+\fBuserdel\fR [opcje] \fILOGIN\fR
+.SH "OPIS"
+.PP
+The
+\fBuserdel\fR
+command modifies the system account files, deleting all entries that refer to the user name
+\fILOGIN\fR\&. The named user must exist\&.
+.SH "OPCJE"
+.PP
+The options which apply to the
+\fBuserdel\fR
+command are:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option forces the removal of the user account, even if the user is still logged in\&. It also forces
+\fBuserdel\fR
+to remove the user\*(Aqs home directory and mail spool, even if another user uses the same home directory or if the mail spool is not owned by the specified user\&. If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs
+and if a group exists with the same name as the deleted user, then this group will be removed, even if it is still the primary group of another user\&.
+.sp
+\fINote:\fR
+This option is dangerous and may leave your system in an inconsistent state\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Wyświetlenie komunikatu pomocy i zakończenie dzia\(/lania\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-remove\fR
+.RS 4
+Files in the user\*(Aqs home directory will be removed along with the home directory itself and the user\*(Aqs mail spool\&. Files located in other file systems will have to be searched for and deleted manually\&.
+.sp
+The mail spool is defined by the
+\fBMAIL_DIR\fR
+variable in the
+login\&.defs
+file\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR
+.RS 4
+Remove any SELinux user mapping for the user\*(Aqs login\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBUSERDEL_CMD\fR (string)
+.RS 4
+If defined, this command is run when removing a user\&. It should remove any at/cron/print jobs etc\&. owned by the user to be removed (passed as the first argument)\&.
+.sp
+The return code of the script is not taken into account\&.
+.sp
+Here is an example script, which removes the user\*(Aqs cron, at and print jobs:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#! /bin/sh
+
+# Check for the required argument\&.
+if [ $# != 1 ]; then
+ echo "Usage: $0 username"
+ exit 1
+fi
+
+# Remove cron jobs\&.
+crontab \-r \-u $1
+
+# Remove at jobs\&.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username\&.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR \-name "[^\&.]*" \-type f \-user $1 \-delete \e;
+
+# Remove print jobs\&.
+lprm $1
+
+# All done\&.
+exit 0
+
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguracja pakietu shadow\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informacje chronione o użytkownikach\&.
+.RE
+.PP
+/etc/subgid
+.RS 4
+Per user subordinate group IDs\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+Per user subordinate user IDs\&.
+.RE
+.SH "KOD ZAKOŃCZENIA"
+.PP
+The
+\fBuserdel\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+can\*(Aqt update password file
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified user doesn\*(Aqt exist
+.RE
+.PP
+\fI8\fR
+.RS 4
+user currently logged in
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.PP
+\fI12\fR
+.RS 4
+can\*(Aqt remove home directory
+.RE
+.SH "OSTRZEŻENIA"
+.PP
+\fBuserdel\fR
+will not allow you to remove an account if there are running processes which belong to this account\&. In that case, you may have to kill those processes or lock the user\*(Aqs password or account and remove the account later\&. The
+\fB\-f\fR
+option can force the deletion of this account\&.
+.PP
+You should manually check all file systems to ensure that no files remain owned by this user\&.
+.PP
+You may not remove any NIS attributes on a NIS client\&. This must be performed on the NIS server\&.
+.PP
+If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs,
+\fBuserdel\fR
+will delete the group with the same name as the user\&. To avoid inconsistencies in the passwd and group databases,
+\fBuserdel\fR
+will check that this group is not used as a primary group for another user, and will just warn without deleting the group otherwise\&. The
+\fB\-f\fR
+option can force the deletion of this group\&.
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBlogin.defs\fR(5),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuseradd\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/pl/man8/usermod.8 b/man/pl/man8/usermod.8
new file mode 100644
index 0000000..3123a31
--- /dev/null
+++ b/man/pl/man8/usermod.8
@@ -0,0 +1,469 @@
+'\" t
+.\" Title: usermod
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Polecenia Zarządzania Systemem
+.\" Source: shadow-utils 4.8.1
+.\" Language: Polish
+.\"
+.TH "USERMOD" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+usermod \- zmiana danych konta użytkownika
+.SH "STRESZCZENIE"
+.HP \w'\fBusermod\fR\ 'u
+\fBusermod\fR [\fIopcje\fR] \fILOGIN\fR
+.SH "OPIS"
+.PP
+The
+\fBusermod\fR
+command modifies the system account files to reflect the changes that are specified on the command line\&.
+.SH "OPCJE"
+.PP
+The options which apply to the
+\fBusermod\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-append\fR
+.RS 4
+Add the user to the supplementary group(s)\&. Use only with the
+\fB\-G\fR
+option\&.
+.RE
+.PP
+\fB\-b\fR, \fB\-\-badnames\fR
+.RS 4
+Allow names that do not conform to standards\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-comment\fR\ \&\fICOMMENT\fR
+.RS 4
+The new value of the user\*(Aqs password file comment field\&. It is normally modified using the
+\fBchfn\fR(1)
+utility\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-home\fR\ \&\fIHOME_DIR\fR
+.RS 4
+The user\*(Aqs new login directory\&.
+.sp
+If the
+\fB\-m\fR
+option is given, the contents of the current home directory will be moved to the new home directory, which is created if it does not already exist\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+The date on which the user account will be disabled\&. The date is specified in the format
+\fIYYYY\-MM\-DD\fR\&.
+.sp
+An empty
+\fIEXPIRE_DATE\fR
+argument will disable the expiration of the account\&.
+.sp
+This option requires a
+/etc/shadow
+file\&. A
+/etc/shadow
+entry will be created if there were none\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+The number of days after a password expires until the account is permanently disabled\&.
+.sp
+A value of 0 disables the account as soon as the password has expired, and a value of \-1 disables the feature\&.
+.sp
+This option requires a
+/etc/shadow
+file\&. A
+/etc/shadow
+entry will be created if there were none\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGROUP\fR
+.RS 4
+The group name or number of the user\*(Aqs new initial login group\&. The group must exist\&.
+.sp
+Any file from the user\*(Aqs home directory owned by the previous primary group of the user will be owned by this new group\&.
+.sp
+The group ownership of files outside of the user\*(Aqs home directory must be fixed manually\&.
+.RE
+.PP
+\fB\-G\fR, \fB\-\-groups\fR\ \&\fIGROUP1\fR[\fI,GROUP2,\&.\&.\&.\fR[\fI,GROUPN\fR]]]
+.RS 4
+A list of supplementary groups which the user is also a member of\&. Each group is separated from the next by a comma, with no intervening whitespace\&. The groups are subject to the same restrictions as the group given with the
+\fB\-g\fR
+option\&.
+.sp
+If the user is currently a member of a group which is not listed, the user will be removed from the group\&. This behaviour can be changed via the
+\fB\-a\fR
+option, which appends the user to the current supplementary group list\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-login\fR\ \&\fINEW_LOGIN\fR
+.RS 4
+The name of the user will be changed from
+\fILOGIN\fR
+to
+\fINEW_LOGIN\fR\&. Nothing else is changed\&. In particular, the user\*(Aqs home directory or mail spool should probably be renamed manually to reflect the new login name\&.
+.RE
+.PP
+\fB\-L\fR, \fB\-\-lock\fR
+.RS 4
+Lock a user\*(Aqs password\&. This puts a \*(Aq!\*(Aq in front of the encrypted password, effectively disabling the password\&. You can\*(Aqt use this option with
+\fB\-p\fR
+or
+\fB\-U\fR\&.
+.sp
+Note: if you wish to lock the account (not only access with a password), you should also set the
+\fIEXPIRE_DATE\fR
+to
+\fI1\fR\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-move\-home\fR
+.RS 4
+Move the content of the user\*(Aqs home directory to the new location\&.
+.sp
+This option is only valid in combination with the
+\fB\-d\fR
+(or
+\fB\-\-home\fR) option\&.
+.sp
+\fBusermod\fR
+will try to adapt the ownership of the files and to copy the modes, ACL and extended attributes, but manual changes might be needed afterwards\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+When used with the
+\fB\-u\fR
+option, this option allows to change the user ID to a non\-unique value\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\*(Aqs password policy\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+Nazwa nowej pow\(/loki (shell) użytkownika\&. Ustawienie tego pola na puste powoduje, że system wybierze domyślną pow\(/lokę logowania\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-uid\fR\ \&\fIUID\fR
+.RS 4
+The new numerical value of the user\*(Aqs ID\&.
+.sp
+This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&.
+.sp
+The user\*(Aqs mailbox, and any files which the user owns and which are located in the user\*(Aqs home directory will have the file user ID changed automatically\&.
+.sp
+The ownership of files outside of the user\*(Aqs home directory must be fixed manually\&.
+.sp
+No checks will be performed with regard to the
+\fBUID_MIN\fR,
+\fBUID_MAX\fR,
+\fBSYS_UID_MIN\fR, or
+\fBSYS_UID_MAX\fR
+from
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-U\fR, \fB\-\-unlock\fR
+.RS 4
+Unlock a user\*(Aqs password\&. This removes the \*(Aq!\*(Aq in front of the encrypted password\&. You can\*(Aqt use this option with
+\fB\-p\fR
+or
+\fB\-L\fR\&.
+.sp
+Note: if you wish to unlock the account (not only access with a password), you should also set the
+\fIEXPIRE_DATE\fR
+(for example to
+\fI99999\fR, or to the
+\fBEXPIRE\fR
+value from
+/etc/default/useradd)\&.
+.RE
+.PP
+\fB\-v\fR, \fB\-\-add\-subuids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Add a range of subordinate uids to the user\*(Aqs account\&.
+.sp
+This option may be specified multiple times to add multiple ranges to a users account\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR, or
+\fBSUB_UID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-V\fR, \fB\-\-del\-subuids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Remove a range of subordinate uids from the user\*(Aqs account\&.
+.sp
+This option may be specified multiple times to remove multiple ranges to a users account\&. When both
+\fB\-\-del\-subuids\fR
+and
+\fB\-\-add\-subuids\fR
+are specified, the removal of all subordinate uid ranges happens before any subordinate uid range is added\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR, or
+\fBSUB_UID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-add\-subgids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Add a range of subordinate gids to the user\*(Aqs account\&.
+.sp
+This option may be specified multiple times to add multiple ranges to a users account\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR, or
+\fBSUB_GID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-W\fR, \fB\-\-del\-subgids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Remove a range of subordinate gids from the user\*(Aqs account\&.
+.sp
+This option may be specified multiple times to remove multiple ranges to a users account\&. When both
+\fB\-\-del\-subgids\fR
+and
+\fB\-\-add\-subgids\fR
+are specified, the removal of all subordinate gid ranges happens before any subordinate gid range is added\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR, or
+\fBSUB_GID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR\ \&\fISEUSER\fR
+.RS 4
+The new SELinux user for the user\*(Aqs login\&.
+.sp
+A blank
+\fISEUSER\fR
+will remove the SELinux user mapping for user
+\fILOGIN\fR
+(if any)\&.
+.RE
+.SH "OSTRZEŻENIA"
+.PP
+You must make certain that the named user is not executing any processes when this command is being executed if the user\*(Aqs numerical user ID, the user\*(Aqs name, or the user\*(Aqs home directory is being changed\&.
+\fBusermod\fR
+checks this on Linux\&. On other platforms it only uses utmp to check if the user is logged in\&.
+.PP
+You must change the owner of any
+\fBcrontab\fR
+files or
+\fBat\fR
+jobs manually\&.
+.PP
+You must make any changes involving NIS on the NIS server\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBSUB_GID_MIN\fR (number), \fBSUB_GID_MAX\fR (number), \fBSUB_GID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate group IDs) allocate
+\fBSUB_GID_COUNT\fR
+unused group IDs from the range
+\fBSUB_GID_MIN\fR
+to
+\fBSUB_GID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR,
+\fBSUB_GID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSUB_UID_MIN\fR (number), \fBSUB_UID_MAX\fR (number), \fBSUB_UID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate user IDs) allocate
+\fBSUB_UID_COUNT\fR
+unused user IDs from the range
+\fBSUB_UID_MIN\fR
+to
+\fBSUB_UID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR,
+\fBSUB_UID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informacje chronione o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguracja pakietu shadow\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informacje chronione o użytkownikach\&.
+.RE
+.PP
+/etc/subgid
+.RS 4
+Per user subordinate group IDs\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+Per user subordinate user IDs\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8)\&.
diff --git a/man/pl/man8/vigr.8 b/man/pl/man8/vigr.8
new file mode 100644
index 0000000..ff72d7a
--- /dev/null
+++ b/man/pl/man8/vigr.8
@@ -0,0 +1 @@
+.so man8/vipw.8
diff --git a/man/pl/man8/vipw.8 b/man/pl/man8/vipw.8
new file mode 100644
index 0000000..198c1e2
--- /dev/null
+++ b/man/pl/man8/vipw.8
@@ -0,0 +1,137 @@
+'\" t
+.\" Title: vipw
+.\" Author: Marek Micha\(/lkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Polecenia Zarządzania Systemem
+.\" Source: shadow-utils 4.8.1
+.\" Language: Polish
+.\"
+.TH "VIPW" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+vipw, vigr \- edytuj plik hase\(/l, grup lub ich wersji chronionych
+.SH "STRESZCZENIE"
+.HP \w'\fBvipw\fR\ 'u
+\fBvipw\fR [\fIopcje\fR]
+.HP \w'\fBvigr\fR\ 'u
+\fBvigr\fR [\fIopcje\fR]
+.SH "OPIS"
+.PP
+The
+\fBvipw\fR
+and
+\fBvigr\fR
+commands edits the files
+/etc/passwd
+and
+/etc/group, respectively\&. With the
+\fB\-s\fR
+flag, they will edit the shadow versions of those files,
+/etc/shadow
+and
+/etc/gshadow, respectively\&. The programs will set the appropriate locks to prevent file corruption\&. When looking for an editor, the programs will first try the environment variable
+\fB$VISUAL\fR, then the environment variable
+\fB$EDITOR\fR, and finally the default editor,
+\fBvi\fR(1)\&.
+.SH "OPCJE"
+.PP
+The options which apply to the
+\fBvipw\fR
+and
+\fBvigr\fR
+commands are:
+.PP
+\fB\-g\fR, \fB\-\-group\fR
+.RS 4
+Edycja bazy grup\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Wyświetlenie komunikatu pomocy i zakończenie dzia\(/lania\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-passwd\fR
+.RS 4
+Edycja bazy passwd\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Cichy tryb pracy\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shadow\fR
+.RS 4
+Edycja bazy shadow lub gshadow\&.
+.RE
+.SH "ENVIRONMENT"
+.PP
+\fBVISUAL\fR
+.RS 4
+Editor to be used\&.
+.RE
+.PP
+\fBEDITOR\fR
+.RS 4
+Editor to be used if
+\fBVISUAL\fR
+is not set\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informacje chronione o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informacje chronione o użytkownikach\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBvi\fR(1),
+\fBgroup\fR(5),
+\fBgshadow\fR(5)
+,
+\fBpasswd\fR(5), ,
+\fBshadow\fR(5)\&.
diff --git a/man/po/LINGUAS b/man/po/LINGUAS
new file mode 100644
index 0000000..1bf026a
--- /dev/null
+++ b/man/po/LINGUAS
@@ -0,0 +1,8 @@
+# LINGUAS
+
+LINGUAS = da de fr it pl ru sv zh_CN
+
+# These variables are generated based on the LINGUAS list
+POFILES = $(patsubst %,$(srcdir)/%.po,$(LINGUAS))
+UPDATEPOFILES = $(patsubst %,%.po-update,$(LINGUAS))
+DUMMYPOFILES = $(patsubst %,%.nop,$(LINGUAS))
diff --git a/man/po/Makefile.in b/man/po/Makefile.in
new file mode 100644
index 0000000..deaa870
--- /dev/null
+++ b/man/po/Makefile.in
@@ -0,0 +1,245 @@
+# Makefile for PO directory in any package using GNU gettext.
+# Copyright (C) 1995-1997, 2000-2006 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+#
+# This file can be copied and used freely without restrictions. It can
+# be used in projects which are not available under the GNU General Public
+# License but which still want to provide support for the GNU gettext
+# functionality.
+# Please note that the actual code of GNU gettext is covered by the GNU
+# General Public License and is *not* in the public domain.
+#
+# Origin: gettext-0.16
+# Modified to handle translations with xml2po by Nicolas François - 2007
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+MSGFMT_ = @MSGFMT@
+MSGFMT_no = @MSGFMT@
+MSGFMT_yes = @MSGFMT_015@
+MSGFMT = $(MSGFMT_$(USE_MSGCTXT))
+XGETTEXT_ = @XGETTEXT@
+XGETTEXT_no = @XGETTEXT@
+XGETTEXT_yes = @XGETTEXT_015@
+XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
+MSGMERGE = @MSGMERGE@ --previous
+MSGMERGE_UPDATE = @MSGMERGE@ --update --previous
+MSGINIT = msginit
+MSGCONV = msgconv
+MSGFILTER = msgfilter
+
+include $(srcdir)/LINGUAS
+DISTFILES = $(srcdir)/Makevars $(srcdir)/XMLFILES $(srcdir)/LINGUAS $(POFILES)
+
+include $(srcdir)/XMLFILES
+
+include $(srcdir)/Makevars
+
+.SUFFIXES:
+.SUFFIXES: .po .sed .sin .nop .po-create .po-update
+
+remove-potcdate.sin: $(top_srcdir)/po/remove-potcdate.sin
+ cp $? $@
+
+.sin.sed:
+ sed -e '/^#/d' $< > t-$@
+ mv t-$@ $@
+
+all: all-yes
+
+all-yes: stamp-po
+all-no:
+
+# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
+# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
+# we don't want to bother translators with empty POT files). We assume that
+# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
+# In this case, stamp-po is a nop (i.e. a phony target).
+
+# stamp-po is a timestamp denoting the last time at which the CATALOGS have
+# been loosely updated. Its purpose is that when a developer or translator
+# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,
+# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent
+# invocations of "make" will do nothing. This timestamp would not be necessary
+# if updating the $(CATALOGS) would always touch them; however, the rule for
+# $(POFILES) has been designed to not touch files that don't need to be
+# changed.
+stamp-po: $(srcdir)/$(DOMAIN).pot
+ @test ! -f $(srcdir)/$(DOMAIN).pot || { \
+ echo "touch stamp-po" && \
+ echo timestamp > stamp-poT && \
+ mv stamp-poT stamp-po; \
+ }
+
+# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
+# otherwise packages like GCC can not be built if only parts of the source
+# have been downloaded.
+
+# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
+# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
+# TODO: set MSGID_BUGS_ADDRESS, COPYRIGHT_HOLDER
+$(DOMAIN).pot-update: $(XMLFILES) $(srcdir)/XMLFILES remove-potcdate.sed
+ @set -e; tmpdir=`pwd`; \
+ echo "cd $(top_srcdir)/man"; \
+ cd $(top_srcdir)/man; \
+ echo "xml2po --expand-all-entities -o $$tmpdir/$(DOMAIN).po $(notdir $(XMLFILES))"; \
+ xml2po --expand-all-entities -o $$tmpdir/$(DOMAIN).po $(notdir $(XMLFILES)); \
+ cd $$tmpdir
+ test ! -f $(DOMAIN).po || { \
+ if test -f $(srcdir)/$(DOMAIN).pot; then \
+ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
+ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
+ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
+ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
+ else \
+ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
+ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+ fi; \
+ else \
+ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+ fi; \
+ }
+
+# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
+# every "make" invocation, only create it when it is missing.
+# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
+$(srcdir)/$(DOMAIN).pot:
+ $(MAKE) $(DOMAIN).pot-update
+
+# This target rebuilds a PO file if $(DOMAIN).pot has changed.
+# Note that a PO file is not touched if it doesn't need to be changed.
+$(POFILES): $(srcdir)/$(DOMAIN).pot
+ @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
+ if test -f "$(srcdir)/$${lang}.po"; then \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \
+ cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \
+ else \
+ $(MAKE) $${lang}.po-create; \
+ fi
+
+
+install: install-exec install-data
+install-exec:
+install-data:
+
+install-strip: install
+
+installdirs: installdirs-exec installdirs-data
+installdirs-exec:
+installdirs-data:
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall: uninstall-exec uninstall-data
+uninstall-exec:
+uninstall-data:
+
+check: all
+
+info dvi ps pdf html tags TAGS ctags CTAGS ID:
+
+mostlyclean:
+ rm -f remove-potcdate.sed remove-potcdate.sin
+ rm -f stamp-poT
+ rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
+
+clean: mostlyclean
+
+distclean: clean
+ rm -f Makefile
+
+maintainer-clean: distclean
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+ rm -f stamp-po
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir:
+ $(MAKE) update-po
+ @$(MAKE) dist2
+# This is a separate target because 'update-po' must be executed before.
+dist2: stamp-po $(DISTFILES)
+ dists="$(DISTFILES)"; \
+ if test -f $(srcdir)/$(DOMAIN).pot; then \
+ dists="$$dists $(DOMAIN).pot stamp-po"; \
+ fi; \
+ if test -f $(srcdir)/ChangeLog; then \
+ dists="$$dists ChangeLog"; \
+ fi; \
+ for i in 0 1 2 3 4 5 6 7 8 9; do \
+ if test -f $(srcdir)/ChangeLog.$$i; then \
+ dists="$$dists ChangeLog.$$i"; \
+ fi; \
+ done; \
+ for file in $$dists; do \
+ if test -f $$file; then \
+ cp -p $$file $(distdir) || exit 1; \
+ else \
+ cp -p $(srcdir)/$$file $(distdir) || exit 1; \
+ fi; \
+ done
+
+update-po: Makefile
+ $(MAKE) $(DOMAIN).pot-update
+ test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
+
+# General rule for creating PO files.
+
+.nop.po-create:
+ @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
+ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
+ exit 1
+
+# General rule for updating PO files.
+
+.nop.po-update:
+ @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
+ tmpdir=`pwd`; \
+ echo "$$lang:"; \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
+ cd $(srcdir); \
+ if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \
+ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+ rm -f $$tmpdir/$$lang.new.po; \
+ else \
+ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+ :; \
+ else \
+ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+ exit 1; \
+ fi; \
+ fi; \
+ else \
+ echo "msgmerge for $$lang.po failed!" 1>&2; \
+ rm -f $$tmpdir/$$lang.new.po; \
+ fi
+
+$(DUMMYPOFILES):
+
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/po/Makevars b/man/po/Makevars
new file mode 100644
index 0000000..c78c646
--- /dev/null
+++ b/man/po/Makevars
@@ -0,0 +1,27 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(PACKAGE)-man-pages
+
+# These two variables depend on the location of this directory.
+subdir = man/po
+top_builddir = ../..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --no-location
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
+# package. (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.) Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright. The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = Free Software Foundation, Inc.
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used. It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
+
+MSGID_BUGS_ADDRESS = pkg-shadow-devel@lists.alioth.debian.org
diff --git a/man/po/XMLFILES b/man/po/XMLFILES
new file mode 100644
index 0000000..de7925d
--- /dev/null
+++ b/man/po/XMLFILES
@@ -0,0 +1,42 @@
+# List of xml which contain translatable strings.
+XMLFILES = \
+ $(top_srcdir)/man/chage.1.xml \
+ $(top_srcdir)/man/chfn.1.xml \
+ $(top_srcdir)/man/chgpasswd.8.xml \
+ $(top_srcdir)/man/chpasswd.8.xml \
+ $(top_srcdir)/man/chsh.1.xml \
+ $(top_srcdir)/man/expiry.1.xml \
+ $(top_srcdir)/man/faillog.5.xml \
+ $(top_srcdir)/man/faillog.8.xml \
+ $(top_srcdir)/man/gpasswd.1.xml \
+ $(top_srcdir)/man/groupadd.8.xml \
+ $(top_srcdir)/man/groupdel.8.xml \
+ $(top_srcdir)/man/groupmems.8.xml \
+ $(top_srcdir)/man/groupmod.8.xml \
+ $(top_srcdir)/man/groups.1.xml \
+ $(top_srcdir)/man/grpck.8.xml \
+ $(top_srcdir)/man/gshadow.5.xml \
+ $(top_srcdir)/man/lastlog.8.xml \
+ $(top_srcdir)/man/limits.5.xml \
+ $(top_srcdir)/man/login.1.xml \
+ $(top_srcdir)/man/login.access.5.xml \
+ $(top_srcdir)/man/login.defs.5.xml \
+ $(top_srcdir)/man/logoutd.8.xml \
+ $(top_srcdir)/man/newgrp.1.xml \
+ $(top_srcdir)/man/newusers.8.xml \
+ $(top_srcdir)/man/nologin.8.xml \
+ $(top_srcdir)/man/passwd.1.xml \
+ $(top_srcdir)/man/passwd.5.xml \
+ $(top_srcdir)/man/porttime.5.xml \
+ $(top_srcdir)/man/pwck.8.xml \
+ $(top_srcdir)/man/pwconv.8.xml \
+ $(top_srcdir)/man/shadow.3.xml \
+ $(top_srcdir)/man/shadow.5.xml \
+ $(top_srcdir)/man/sg.1.xml \
+ $(top_srcdir)/man/su.1.xml \
+ $(top_srcdir)/man/suauth.5.xml \
+ $(top_srcdir)/man/useradd.8.xml \
+ $(top_srcdir)/man/userdel.8.xml \
+ $(top_srcdir)/man/usermod.8.xml \
+ $(top_srcdir)/man/vipw.8.xml
+
diff --git a/man/po/da.po b/man/po/da.po
new file mode 100644
index 0000000..2bb6aed
--- /dev/null
+++ b/man/po/da.po
@@ -0,0 +1,8304 @@
+# Danish translation shadow-man.
+# Copyright (C) 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the shadow package.
+# Joe Hansen (joedalton2@yahoo.dk), 2012.
+#
+# konventioner:
+# audit -> overvågning
+# entry, entries -> punkt, punkter
+# exist -> findes
+# Home Phone -> telefon (telefonnr. hvor det er mere præcist)
+# locktime -> låsetid
+# mapping -> oversættelse eller kortlægning?
+# quiet -> tavs
+# record -> post
+# scratch -> scratch
+# shadow -> skygge
+# stat -> køre stat
+# unlock -> åbne
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow-man\n"
+"POT-Creation-Date: 2020-01-23 15:00-0600\n"
+"PO-Revision-Date: 2013-08-23 01:35+0200\n"
+"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
+"Language-Team: Danish <debian-l10n-danish@lists.debian.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: vipw.8.xml:41(firstname) suauth.5.xml:39(firstname)
+#: pwconv.8.xml:45(firstname) login.access.5.xml:40(firstname)
+msgid "Marek"
+msgstr ""
+
+#: vipw.8.xml:42(surname) suauth.5.xml:40(surname) pwconv.8.xml:46(surname)
+#: login.access.5.xml:41(surname)
+msgid "Michałkiewicz"
+msgstr ""
+
+#: vipw.8.xml:43(contrib) limits.5.xml:43(contrib)
+msgid "Creation, 1997"
+msgstr ""
+
+#: vipw.8.xml:46(firstname) usermod.8.xml:51(firstname)
+#: userdel.8.xml:50(firstname) useradd.8.xml:63(firstname)
+#: suauth.5.xml:44(firstname) su.1.xml:61(firstname) sg.1.xml:45(firstname)
+#: shadow.5.xml:44(firstname) shadow.3.xml:44(firstname)
+#: pwconv.8.xml:50(firstname) pwck.8.xml:50(firstname)
+#: porttime.5.xml:44(firstname) passwd.5.xml:44(firstname)
+#: passwd.1.xml:51(firstname) newusers.8.xml:60(firstname)
+#: newgrp.1.xml:45(firstname) logoutd.8.xml:44(firstname)
+#: login.defs.5.xml:111(firstname) login.access.5.xml:45(firstname)
+#: login.1.xml:77(firstname) limits.5.xml:46(firstname)
+#: lastlog.8.xml:46(firstname) grpck.8.xml:45(firstname)
+#: groups.1.xml:44(firstname) groupmod.8.xml:45(firstname)
+#: groupmems.8.xml:48(firstname) groupdel.8.xml:45(firstname)
+#: groupadd.8.xml:47(firstname) gpasswd.1.xml:49(firstname)
+#: faillog.8.xml:44(firstname) faillog.5.xml:44(firstname)
+#: expiry.1.xml:48(firstname) chsh.1.xml:47(firstname)
+#: chpasswd.8.xml:48(firstname) chgpasswd.8.xml:44(firstname)
+#: chfn.1.xml:47(firstname) chage.1.xml:45(firstname)
+msgid "Thomas"
+msgstr ""
+
+#: vipw.8.xml:47(surname) usermod.8.xml:52(surname) userdel.8.xml:51(surname)
+#: useradd.8.xml:64(surname) suauth.5.xml:45(surname) su.1.xml:62(surname)
+#: sg.1.xml:46(surname) shadow.5.xml:45(surname) shadow.3.xml:45(surname)
+#: pwconv.8.xml:51(surname) pwck.8.xml:51(surname) porttime.5.xml:45(surname)
+#: passwd.5.xml:45(surname) passwd.1.xml:52(surname) newusers.8.xml:61(surname)
+#: newgrp.1.xml:46(surname) logoutd.8.xml:45(surname)
+#: login.defs.5.xml:112(surname) login.access.5.xml:46(surname)
+#: login.1.xml:78(surname) limits.5.xml:47(surname) lastlog.8.xml:47(surname)
+#: grpck.8.xml:46(surname) groups.1.xml:45(surname) groupmod.8.xml:46(surname)
+#: groupmems.8.xml:49(surname) groupdel.8.xml:46(surname)
+#: groupadd.8.xml:48(surname) gpasswd.1.xml:50(surname)
+#: faillog.8.xml:45(surname) faillog.5.xml:45(surname) expiry.1.xml:49(surname)
+#: chsh.1.xml:48(surname) chpasswd.8.xml:49(surname)
+#: chgpasswd.8.xml:45(surname) chfn.1.xml:48(surname) chage.1.xml:46(surname)
+msgid "Kłoczko"
+msgstr ""
+
+#: vipw.8.xml:48(email) usermod.8.xml:53(email) userdel.8.xml:52(email)
+#: useradd.8.xml:65(email) suauth.5.xml:46(email) su.1.xml:63(email)
+#: sg.1.xml:47(email) shadow.5.xml:46(email) shadow.3.xml:46(email)
+#: pwconv.8.xml:52(email) pwck.8.xml:52(email) porttime.5.xml:46(email)
+#: passwd.5.xml:46(email) passwd.1.xml:53(email) newusers.8.xml:62(email)
+#: newgrp.1.xml:47(email) logoutd.8.xml:46(email) login.defs.5.xml:113(email)
+#: login.access.5.xml:47(email) login.1.xml:79(email) limits.5.xml:48(email)
+#: lastlog.8.xml:48(email) grpck.8.xml:47(email) groups.1.xml:46(email)
+#: groupmod.8.xml:47(email) groupmems.8.xml:50(email) groupdel.8.xml:47(email)
+#: groupadd.8.xml:49(email) gpasswd.1.xml:51(email) faillog.8.xml:46(email)
+#: faillog.5.xml:46(email) expiry.1.xml:50(email) chsh.1.xml:49(email)
+#: chpasswd.8.xml:50(email) chgpasswd.8.xml:46(email) chfn.1.xml:49(email)
+#: chage.1.xml:47(email)
+msgid "kloczek@pld.org.pl"
+msgstr ""
+
+#: vipw.8.xml:49(contrib) usermod.8.xml:54(contrib) userdel.8.xml:53(contrib)
+#: useradd.8.xml:66(contrib) suauth.5.xml:47(contrib) su.1.xml:64(contrib)
+#: sg.1.xml:48(contrib) shadow.5.xml:47(contrib) shadow.3.xml:47(contrib)
+#: pwconv.8.xml:53(contrib) pwck.8.xml:53(contrib) porttime.5.xml:47(contrib)
+#: passwd.5.xml:47(contrib) passwd.1.xml:54(contrib) newusers.8.xml:63(contrib)
+#: newgrp.1.xml:48(contrib) logoutd.8.xml:47(contrib)
+#: login.defs.5.xml:114(contrib) login.access.5.xml:48(contrib)
+#: login.1.xml:80(contrib) limits.5.xml:49(contrib) lastlog.8.xml:49(contrib)
+#: grpck.8.xml:48(contrib) groups.1.xml:47(contrib) groupmod.8.xml:48(contrib)
+#: groupmems.8.xml:51(contrib) groupdel.8.xml:48(contrib)
+#: groupadd.8.xml:50(contrib) gpasswd.1.xml:52(contrib)
+#: faillog.8.xml:47(contrib) faillog.5.xml:47(contrib) expiry.1.xml:51(contrib)
+#: chsh.1.xml:50(contrib) chpasswd.8.xml:51(contrib) chfn.1.xml:50(contrib)
+#: chage.1.xml:48(contrib)
+msgid "shadow-utils maintainer, 2000 - 2007"
+msgstr ""
+
+#: vipw.8.xml:52(firstname) usermod.8.xml:57(firstname)
+#: userdel.8.xml:56(firstname) useradd.8.xml:69(firstname)
+#: suauth.5.xml:50(firstname) su.1.xml:67(firstname) sg.1.xml:51(firstname)
+#: shadow.5.xml:50(firstname) shadow.3.xml:50(firstname)
+#: pwconv.8.xml:56(firstname) pwck.8.xml:56(firstname)
+#: porttime.5.xml:50(firstname) passwd.5.xml:50(firstname)
+#: passwd.1.xml:57(firstname) nologin.8.xml:39(firstname)
+#: newusers.8.xml:66(firstname) newgrp.1.xml:51(firstname)
+#: logoutd.8.xml:50(firstname) login.defs.5.xml:117(firstname)
+#: login.access.5.xml:51(firstname) login.1.xml:83(firstname)
+#: limits.5.xml:52(firstname) lastlog.8.xml:52(firstname)
+#: gshadow.5.xml:38(firstname) grpck.8.xml:51(firstname)
+#: groups.1.xml:50(firstname) groupmod.8.xml:51(firstname)
+#: groupmems.8.xml:54(firstname) groupdel.8.xml:51(firstname)
+#: groupadd.8.xml:53(firstname) gpasswd.1.xml:55(firstname)
+#: faillog.8.xml:50(firstname) faillog.5.xml:50(firstname)
+#: expiry.1.xml:54(firstname) chsh.1.xml:53(firstname)
+#: chpasswd.8.xml:54(firstname) chgpasswd.8.xml:50(firstname)
+#: chfn.1.xml:53(firstname) chage.1.xml:51(firstname)
+msgid "Nicolas"
+msgstr ""
+
+#: vipw.8.xml:53(surname) usermod.8.xml:58(surname) userdel.8.xml:57(surname)
+#: useradd.8.xml:70(surname) suauth.5.xml:51(surname) su.1.xml:68(surname)
+#: sg.1.xml:52(surname) shadow.5.xml:51(surname) shadow.3.xml:51(surname)
+#: pwconv.8.xml:57(surname) pwck.8.xml:57(surname) porttime.5.xml:51(surname)
+#: passwd.5.xml:51(surname) passwd.1.xml:58(surname) nologin.8.xml:40(surname)
+#: newusers.8.xml:67(surname) newgrp.1.xml:52(surname)
+#: logoutd.8.xml:51(surname) login.defs.5.xml:118(surname)
+#: login.access.5.xml:52(surname) login.1.xml:84(surname)
+#: limits.5.xml:53(surname) lastlog.8.xml:53(surname) gshadow.5.xml:39(surname)
+#: grpck.8.xml:52(surname) groups.1.xml:51(surname) groupmod.8.xml:52(surname)
+#: groupmems.8.xml:55(surname) groupdel.8.xml:52(surname)
+#: groupadd.8.xml:54(surname) gpasswd.1.xml:56(surname)
+#: faillog.8.xml:51(surname) faillog.5.xml:51(surname) expiry.1.xml:55(surname)
+#: chsh.1.xml:54(surname) chpasswd.8.xml:55(surname)
+#: chgpasswd.8.xml:51(surname) chfn.1.xml:54(surname) chage.1.xml:52(surname)
+msgid "François"
+msgstr ""
+
+#: vipw.8.xml:54(email) usermod.8.xml:59(email) userdel.8.xml:58(email)
+#: useradd.8.xml:71(email) suauth.5.xml:52(email) su.1.xml:69(email)
+#: sg.1.xml:53(email) shadow.5.xml:52(email) shadow.3.xml:52(email)
+#: pwconv.8.xml:58(email) pwck.8.xml:58(email) porttime.5.xml:52(email)
+#: passwd.5.xml:52(email) passwd.1.xml:59(email) nologin.8.xml:41(email)
+#: newusers.8.xml:68(email) newgrp.1.xml:53(email) logoutd.8.xml:52(email)
+#: login.defs.5.xml:119(email) login.access.5.xml:53(email)
+#: login.1.xml:85(email) limits.5.xml:54(email) lastlog.8.xml:54(email)
+#: gshadow.5.xml:40(email) grpck.8.xml:53(email) groups.1.xml:52(email)
+#: groupmod.8.xml:53(email) groupmems.8.xml:56(email) groupdel.8.xml:53(email)
+#: groupadd.8.xml:55(email) gpasswd.1.xml:57(email) faillog.8.xml:52(email)
+#: faillog.5.xml:52(email) expiry.1.xml:56(email) chsh.1.xml:55(email)
+#: chpasswd.8.xml:56(email) chgpasswd.8.xml:52(email) chfn.1.xml:55(email)
+#: chage.1.xml:53(email)
+msgid "nicolas.francois@centraliens.net"
+msgstr ""
+
+#: vipw.8.xml:55(contrib) usermod.8.xml:60(contrib) userdel.8.xml:59(contrib)
+#: useradd.8.xml:72(contrib) suauth.5.xml:53(contrib) su.1.xml:70(contrib)
+#: sg.1.xml:54(contrib) shadow.5.xml:53(contrib) shadow.3.xml:53(contrib)
+#: pwconv.8.xml:59(contrib) pwck.8.xml:59(contrib) porttime.5.xml:53(contrib)
+#: passwd.5.xml:53(contrib) passwd.1.xml:60(contrib) nologin.8.xml:42(contrib)
+#: newusers.8.xml:69(contrib) newgrp.1.xml:54(contrib)
+#: logoutd.8.xml:53(contrib) login.defs.5.xml:120(contrib)
+#: login.access.5.xml:54(contrib) login.1.xml:86(contrib)
+#: limits.5.xml:55(contrib) lastlog.8.xml:55(contrib) gshadow.5.xml:42(contrib)
+#: grpck.8.xml:54(contrib) groups.1.xml:53(contrib) groupmod.8.xml:54(contrib)
+#: groupmems.8.xml:57(contrib) groupdel.8.xml:54(contrib)
+#: groupadd.8.xml:56(contrib) gpasswd.1.xml:58(contrib)
+#: faillog.8.xml:53(contrib) faillog.5.xml:53(contrib) expiry.1.xml:57(contrib)
+#: chsh.1.xml:56(contrib) chpasswd.8.xml:57(contrib)
+#: chgpasswd.8.xml:53(contrib) chfn.1.xml:56(contrib) chage.1.xml:54(contrib)
+msgid "shadow-utils maintainer, 2007 - now"
+msgstr ""
+
+#: vipw.8.xml:59(refentrytitle) vipw.8.xml:66(refname) vipw.8.xml:75(command)
+#: login.defs.5.xml:520(term)
+msgid "vipw"
+msgstr "vipw"
+
+#: vipw.8.xml:60(manvolnum) usermod.8.xml:65(manvolnum)
+#: userdel.8.xml:64(manvolnum) userdel.8.xml:276(replaceable)
+#: useradd.8.xml:77(manvolnum) pwconv.8.xml:64(manvolnum)
+#: pwck.8.xml:64(manvolnum) nologin.8.xml:47(manvolnum)
+#: newusers.8.xml:74(manvolnum) logoutd.8.xml:58(manvolnum)
+#: lastlog.8.xml:60(manvolnum) grpck.8.xml:59(manvolnum)
+#: groupmod.8.xml:59(manvolnum) groupmems.8.xml:62(manvolnum)
+#: groupdel.8.xml:59(manvolnum) groupdel.8.xml:198(replaceable)
+#: groupadd.8.xml:61(manvolnum) faillog.8.xml:58(manvolnum)
+#: faillog.5.xml:111(manvolnum) chpasswd.8.xml:62(manvolnum)
+#: chgpasswd.8.xml:58(manvolnum)
+msgid "8"
+msgstr "8"
+
+#: vipw.8.xml:61(refmiscinfo) usermod.8.xml:66(refmiscinfo)
+#: userdel.8.xml:65(refmiscinfo) useradd.8.xml:78(refmiscinfo)
+#: pwconv.8.xml:65(refmiscinfo) pwck.8.xml:65(refmiscinfo)
+#: nologin.8.xml:48(refmiscinfo) newusers.8.xml:75(refmiscinfo)
+#: logoutd.8.xml:59(refmiscinfo) lastlog.8.xml:61(refmiscinfo)
+#: grpck.8.xml:60(refmiscinfo) groupmod.8.xml:60(refmiscinfo)
+#: groupmems.8.xml:63(refmiscinfo) groupdel.8.xml:60(refmiscinfo)
+#: groupadd.8.xml:62(refmiscinfo) faillog.8.xml:59(refmiscinfo)
+#: chpasswd.8.xml:63(refmiscinfo) chgpasswd.8.xml:59(refmiscinfo)
+msgid "System Management Commands"
+msgstr "Kommandoer for systemhåndtering"
+
+#: vipw.8.xml:62(refmiscinfo) usermod.8.xml:67(refmiscinfo)
+#: userdel.8.xml:66(refmiscinfo) useradd.8.xml:79(refmiscinfo)
+#: suauth.5.xml:60(refmiscinfo) su.1.xml:77(refmiscinfo)
+#: sg.1.xml:61(refmiscinfo) shadow.5.xml:60(refmiscinfo)
+#: shadow.3.xml:60(refmiscinfo) pwconv.8.xml:66(refmiscinfo)
+#: pwck.8.xml:66(refmiscinfo) porttime.5.xml:60(refmiscinfo)
+#: passwd.5.xml:60(refmiscinfo) passwd.1.xml:67(refmiscinfo)
+#: nologin.8.xml:49(refmiscinfo) newusers.8.xml:76(refmiscinfo)
+#: newgrp.1.xml:61(refmiscinfo) logoutd.8.xml:60(refmiscinfo)
+#: login.defs.5.xml:127(refmiscinfo) login.access.5.xml:61(refmiscinfo)
+#: login.1.xml:93(refmiscinfo) limits.5.xml:62(refmiscinfo)
+#: lastlog.8.xml:62(refmiscinfo) gshadow.5.xml:49(refmiscinfo)
+#: grpck.8.xml:61(refmiscinfo) groups.1.xml:60(refmiscinfo)
+#: groupmod.8.xml:61(refmiscinfo) groupmems.8.xml:64(refmiscinfo)
+#: groupdel.8.xml:61(refmiscinfo) groupadd.8.xml:63(refmiscinfo)
+#: gpasswd.1.xml:65(refmiscinfo) faillog.8.xml:60(refmiscinfo)
+#: faillog.5.xml:60(refmiscinfo) expiry.1.xml:64(refmiscinfo)
+#: chsh.1.xml:63(refmiscinfo) chpasswd.8.xml:64(refmiscinfo)
+#: chgpasswd.8.xml:60(refmiscinfo) chfn.1.xml:63(refmiscinfo)
+#: chage.1.xml:61(refmiscinfo)
+msgid "shadow-utils"
+msgstr "shadow-utils"
+
+#: vipw.8.xml:67(refname) vipw.8.xml:81(command)
+msgid "vigr"
+msgstr "vigr"
+
+#: vipw.8.xml:68(refpurpose)
+msgid "edit the password, group, shadow-password or shadow-group file"
+msgstr ""
+"rediger adgangskoden, gruppe, shadow-adgangskode- eller shadow-gruppe-fil"
+
+#: vipw.8.xml:77(replaceable) vipw.8.xml:83(replaceable)
+#: usermod.8.xml:79(replaceable) userdel.8.xml:76(arg)
+#: useradd.8.xml:90(replaceable) useradd.8.xml:102(replaceable)
+#: su.1.xml:88(replaceable) pwconv.8.xml:81(replaceable)
+#: pwconv.8.xml:87(replaceable) pwconv.8.xml:93(replaceable)
+#: pwconv.8.xml:99(replaceable) pwck.8.xml:77(arg) passwd.1.xml:79(replaceable)
+#: newusers.8.xml:88(replaceable) lastlog.8.xml:74(replaceable)
+#: grpck.8.xml:72(arg) groupmod.8.xml:73(replaceable)
+#: groupdel.8.xml:73(replaceable) groupadd.8.xml:75(replaceable)
+#: faillog.8.xml:72(replaceable) chsh.1.xml:75(replaceable)
+#: chpasswd.8.xml:76(replaceable) chgpasswd.8.xml:72(replaceable)
+#: chfn.1.xml:75(replaceable) chage.1.xml:72(replaceable)
+msgid "options"
+msgstr "tilvalg"
+
+#: vipw.8.xml:89(title) usermod.8.xml:86(title) userdel.8.xml:84(title)
+#: useradd.8.xml:108(title) suauth.5.xml:75(title) su.1.xml:103(title)
+#: sg.1.xml:81(title) shadow.5.xml:69(title) shadow.3.xml:118(title)
+#: shadow.3.xml:174(title) pwconv.8.xml:105(title) pwck.8.xml:92(title)
+#: porttime.5.xml:69(title) passwd.5.xml:69(title) passwd.1.xml:88(title)
+#: nologin.8.xml:64(title) newusers.8.xml:97(title) newgrp.1.xml:77(title)
+#: logoutd.8.xml:75(title) login.defs.5.xml:136(title)
+#: login.access.5.xml:70(title) login.1.xml:125(title) limits.5.xml:72(title)
+#: lastlog.8.xml:80(title) gshadow.5.xml:58(title) grpck.8.xml:83(title)
+#: groups.1.xml:78(title) groupmod.8.xml:80(title) groupmems.8.xml:85(title)
+#: groupdel.8.xml:80(title) groupadd.8.xml:84(title) gpasswd.1.xml:94(title)
+#: faillog.8.xml:78(title) faillog.5.xml:69(title) expiry.1.xml:82(title)
+#: chsh.1.xml:84(title) chpasswd.8.xml:82(title) chgpasswd.8.xml:78(title)
+#: chfn.1.xml:84(title) chage.1.xml:81(title)
+msgid "DESCRIPTION"
+msgstr "BESKRIVELSE"
+
+#: vipw.8.xml:90(para)
+msgid ""
+"The <command>vipw</command> and <command>vigr</command> commands edits the "
+"files <filename>/etc/passwd</filename> and <filename>/etc/group</filename>, "
+"respectively. With the <option>-s</option> flag, they will edit the shadow "
+"versions of those files, <filename>/etc/shadow</filename> and <filename>/etc/"
+"gshadow</filename>, respectively. The programs will set the appropriate "
+"locks to prevent file corruption. When looking for an editor, the programs "
+"will first try the environment variable <envar>$VISUAL</envar>, then the "
+"environment variable <envar>$EDITOR</envar>, and finally the default editor, "
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"Kommandoerne <command>vipw</command> og <command>vigr</command> redigerer "
+"filerne <filename>/etc/passwd</filename> og <filename>/etc/group</filename>, "
+"respektivt. Med flaget <option>-s</option> vil de redigere versionerne for "
+"Shadow for disse filer, <filename>/etc/shadow</filename> og <filename>/etc/"
+"gshadow</filename>, respektivt. Programmerne vil sætte de passende låse for "
+"at forhindre filødelæggelse. Når der kigges efter et redigerngsprogram, så "
+"vil programmet øfrst forsøge med miljøvariablen <envar>$VISUAL</envar>, "
+"derefter miljøvariablen <envar>$EDITOR</envar>, og endelig "
+"standardredigeringsprogrammet, <citerefentry><refentrytitle>vi</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+#: vipw.8.xml:107(title) usermod.8.xml:94(title) userdel.8.xml:93(title)
+#: useradd.8.xml:126(title) su.1.xml:144(title) pwconv.8.xml:187(title)
+#: pwck.8.xml:176(title) passwd.1.xml:174(title) newusers.8.xml:266(title)
+#: login.1.xml:210(title) lastlog.8.xml:92(title) grpck.8.xml:147(title)
+#: groupmod.8.xml:89(title) groupmems.8.xml:100(title) groupdel.8.xml:88(title)
+#: groupadd.8.xml:93(title) gpasswd.1.xml:134(title) faillog.8.xml:89(title)
+#: expiry.1.xml:91(title) chsh.1.xml:95(title) chpasswd.8.xml:130(title)
+#: chgpasswd.8.xml:105(title) chfn.1.xml:111(title) chage.1.xml:91(title)
+msgid "OPTIONS"
+msgstr "TILVALG"
+
+#: vipw.8.xml:108(para)
+msgid ""
+"The options which apply to the <command>vipw</command> and <command>vigr</"
+"command> commands are:"
+msgstr ""
+"Tilvalgene som gælder for kommandoerne <command>vipw</command> og "
+"<command>vigr</command> er:"
+
+#: vipw.8.xml:114(term)
+msgid "<option>-g</option>, <option>--group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+#: vipw.8.xml:116(para)
+msgid "Edit group database."
+msgstr "Rediger gruppedatabase."
+
+#: vipw.8.xml:120(term) userdel.8.xml:123(term) useradd.8.xml:278(term)
+#: pwconv.8.xml:195(term) pwck.8.xml:196(term) passwd.1.xml:214(term)
+#: newusers.8.xml:296(term) lastlog.8.xml:119(term) grpck.8.xml:157(term)
+#: groupmod.8.xml:129(term) groupmems.8.xml:142(term) groupdel.8.xml:95(term)
+#: groupadd.8.xml:131(term) gpasswd.1.xml:173(term) faillog.8.xml:122(term)
+#: expiry.1.xml:112(term) chsh.1.xml:101(term) chpasswd.8.xml:171(term)
+#: chgpasswd.8.xml:131(term) chage.1.xml:129(term)
+msgid "<option>-h</option>, <option>--help</option>"
+msgstr "<option>-h</option>, <option>--help</option>"
+
+#: vipw.8.xml:122(para) userdel.8.xml:125(para) useradd.8.xml:280(para)
+#: pwconv.8.xml:197(para) pwck.8.xml:198(para) passwd.1.xml:216(para)
+#: newusers.8.xml:298(para) lastlog.8.xml:123(para) grpck.8.xml:159(para)
+#: groupmod.8.xml:131(para) groupmems.8.xml:144(para) groupdel.8.xml:97(para)
+#: groupadd.8.xml:133(para) gpasswd.1.xml:175(para) faillog.8.xml:124(para)
+#: expiry.1.xml:114(para) chsh.1.xml:103(para) chpasswd.8.xml:173(para)
+#: chgpasswd.8.xml:133(para) chfn.1.xml:169(para) chage.1.xml:131(para)
+msgid "Display help message and exit."
+msgstr "Vis hjælpeteksten og afslut."
+
+#: vipw.8.xml:126(term)
+msgid "<option>-p</option>, <option>--passwd</option>"
+msgstr "<option>-p</option>, <option>--passwd</option>"
+
+#: vipw.8.xml:128(para)
+msgid "Edit passwd database."
+msgstr "Rediger passwd-database."
+
+#: vipw.8.xml:132(term) pwck.8.xml:202(term) passwd.1.xml:281(term)
+msgid "<option>-q</option>, <option>--quiet</option>"
+msgstr "<option>-q</option>, <option>--quiet</option>"
+
+#: vipw.8.xml:134(para) passwd.1.xml:285(para)
+msgid "Quiet mode."
+msgstr "Stille tilstand."
+
+#: vipw.8.xml:138(term) usermod.8.xml:322(term) userdel.8.xml:146(term)
+#: useradd.8.xml:457(term) pwconv.8.xml:201(term) pwck.8.xml:219(term)
+#: passwd.1.xml:301(term) newusers.8.xml:321(term) lastlog.8.xml:127(term)
+#: grpck.8.xml:173(term) groupmod.8.xml:178(term) groupmems.8.xml:165(term)
+#: groupdel.8.xml:101(term) groupadd.8.xml:204(term) faillog.8.xml:180(term)
+#: chsh.1.xml:107(term) chpasswd.8.xml:188(term) chgpasswd.8.xml:146(term)
+#: chfn.1.xml:153(term) chage.1.xml:203(term)
+msgid ""
+"<option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</"
+"replaceable>"
+
+#: vipw.8.xml:142(para) usermod.8.xml:326(para) userdel.8.xml:150(para)
+#: useradd.8.xml:461(para) pwconv.8.xml:205(para) pwck.8.xml:223(para)
+#: passwd.1.xml:305(para) newusers.8.xml:325(para) lastlog.8.xml:131(para)
+#: grpck.8.xml:177(para) groupmod.8.xml:182(para) groupmems.8.xml:169(para)
+#: groupdel.8.xml:105(para) groupadd.8.xml:208(para) gpasswd.1.xml:185(para)
+#: faillog.8.xml:184(para) chsh.1.xml:111(para) chpasswd.8.xml:192(para)
+#: chgpasswd.8.xml:150(para) chfn.1.xml:157(para) chage.1.xml:207(para)
+msgid ""
+"Apply changes in the <replaceable>CHROOT_DIR</replaceable> directory and use "
+"the configuration files from the <replaceable>CHROOT_DIR</replaceable> "
+"directory."
+msgstr ""
+"Brug ændringer i mappen <replaceable>CHROOT_DIR</replaceable> og brug "
+"konfigurationsfilerne fra mappen <replaceable>CHROOT_DIR</replaceable>."
+
+#: vipw.8.xml:150(term)
+msgid "<option>-s</option>, <option>--shadow</option>"
+msgstr "<option>-s</option>, <option>--shadow</option>"
+
+#: vipw.8.xml:152(para)
+msgid "Edit shadow or gshadow database."
+msgstr "Rediger shadow- eller gshadow-database."
+
+#: vipw.8.xml:156(term)
+msgid "<option>-u</option>, <option>--user</option>"
+msgstr "<option>-u</option>, <option>--user</option>"
+
+#: vipw.8.xml:158(para)
+msgid "Indicates which user's tcb shadow file to edit."
+msgstr "Indikerer hvilken brugers tcb-shadowfil at redigere."
+
+#: vipw.8.xml:165(title) usermod.8.xml:524(title) userdel.8.xml:188(title)
+#: useradd.8.xml:676(title) su.1.xml:338(title) sg.1.xml:98(title)
+#: pwconv.8.xml:227(title) pwck.8.xml:262(title) passwd.1.xml:395(title)
+#: newusers.8.xml:375(title) newgrp.1.xml:109(title) login.1.xml:294(title)
+#: lastlog.8.xml:205(title) grpck.8.xml:209(title) groupmod.8.xml:210(title)
+#: groupmems.8.xml:199(title) groupdel.8.xml:145(title)
+#: groupadd.8.xml:236(title) gpasswd.1.xml:264(title) chsh.1.xml:154(title)
+#: chpasswd.8.xml:239(title) chgpasswd.8.xml:198(title) chfn.1.xml:193(title)
+#: chage.1.xml:250(title)
+msgid "CONFIGURATION"
+msgstr "KONFIGURATION"
+
+#: vipw.8.xml:166(para) usermod.8.xml:525(para) userdel.8.xml:189(para)
+#: useradd.8.xml:677(para) su.1.xml:339(para) sg.1.xml:99(para)
+#: pwck.8.xml:263(para) passwd.1.xml:396(para) newusers.8.xml:376(para)
+#: newgrp.1.xml:110(para) login.1.xml:295(para) lastlog.8.xml:206(para)
+#: grpck.8.xml:210(para) groupmod.8.xml:211(para) groupmems.8.xml:200(para)
+#: groupdel.8.xml:146(para) groupadd.8.xml:237(para) gpasswd.1.xml:265(para)
+#: chsh.1.xml:155(para) chpasswd.8.xml:240(para) chgpasswd.8.xml:199(para)
+#: chfn.1.xml:194(para) chage.1.xml:251(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of this tool:"
+msgstr ""
+"De følgende konfigurationsvariabler i <filename>/etc/login.defs</filename> "
+"ændrer opførelsen for dette værktøj:"
+
+#: vipw.8.xml:30(term) usermod.8.xml:30(term) userdel.8.xml:30(term)
+#: useradd.8.xml:30(term) pwconv.8.xml:30(term) pwck.8.xml:30(term)
+#: login.defs.5.xml:30(term) chage.1.xml:30(term)
+msgid "<option>USE_TCB</option> (boolean)"
+msgstr "<option>USE_TCB</option> (boolesk)"
+
+#: vipw.8.xml:32(para) usermod.8.xml:32(para) userdel.8.xml:32(para)
+#: useradd.8.xml:32(para) pwconv.8.xml:32(para) pwck.8.xml:32(para)
+#: login.defs.5.xml:32(para) chage.1.xml:32(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <citerefentry><refentrytitle>tcb</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry> password shadowing "
+"scheme will be used."
+msgstr ""
+"Hvis <replaceable>ja</replaceable>, så vil skemaet for adgangskodeskygge "
+"<citerefentry><refentrytitle>tcb</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry> blive brugt."
+
+#: vipw.8.xml:177(title)
+msgid "ENVIRONMENT"
+msgstr "MILJØ"
+
+#: vipw.8.xml:180(option)
+msgid "VISUAL"
+msgstr "VISUEL"
+
+#: vipw.8.xml:182(para)
+msgid "Editor to be used."
+msgstr "Redigeringsprogram der skal bruges."
+
+#: vipw.8.xml:186(option)
+msgid "EDITOR"
+msgstr "REDIGERINGSPROGRAM"
+
+#: vipw.8.xml:188(para)
+msgid "Editor to be used if <option>VISUAL</option> is not set."
+msgstr ""
+"Redigeringsprogram der skal bruges hvis <option>VISUAL</option> ikke er "
+"angivet."
+
+#: vipw.8.xml:195(title) usermod.8.xml:542(title) userdel.8.xml:205(title)
+#: useradd.8.xml:706(title) suauth.5.xml:193(title) su.1.xml:366(title)
+#: sg.1.xml:110(title) shadow.5.xml:255(title) shadow.3.xml:226(title)
+#: pwconv.8.xml:250(title) pwck.8.xml:279(title) porttime.5.xml:130(title)
+#: passwd.5.xml:160(title) passwd.1.xml:413(title) newusers.8.xml:411(title)
+#: newgrp.1.xml:121(title) logoutd.8.xml:89(title)
+#: login.access.5.xml:121(title) login.1.xml:338(title) limits.5.xml:196(title)
+#: lastlog.8.xml:217(title) gshadow.5.xml:156(title) grpck.8.xml:221(title)
+#: groups.1.xml:100(title) groupmod.8.xml:222(title) groupmems.8.xml:211(title)
+#: groupdel.8.xml:157(title) groupadd.8.xml:250(title) gpasswd.1.xml:279(title)
+#: faillog.8.xml:243(title) faillog.5.xml:96(title) expiry.1.xml:121(title)
+#: chsh.1.xml:167(title) chpasswd.8.xml:255(title) chgpasswd.8.xml:213(title)
+#: chfn.1.xml:207(title) chage.1.xml:262(title)
+msgid "FILES"
+msgstr "FILER"
+
+#: vipw.8.xml:198(filename) usermod.8.xml:545(filename)
+#: userdel.8.xml:208(filename) useradd.8.xml:721(filename)
+#: sg.1.xml:125(filename) pwck.8.xml:282(filename) newusers.8.xml:426(filename)
+#: newgrp.1.xml:136(filename) gshadow.5.xml:159(filename)
+#: grpck.8.xml:224(filename) groups.1.xml:103(filename)
+#: groupmod.8.xml:225(filename) groupmems.8.xml:214(filename)
+#: groupdel.8.xml:160(filename) groupadd.8.xml:253(filename)
+#: gpasswd.1.xml:72(filename) gpasswd.1.xml:75(filename)
+#: gpasswd.1.xml:282(filename) chgpasswd.8.xml:216(filename)
+msgid "/etc/group"
+msgstr "/etc/group"
+
+#: vipw.8.xml:200(para) usermod.8.xml:547(para) userdel.8.xml:210(para)
+#: useradd.8.xml:723(para) sg.1.xml:127(para) pwck.8.xml:284(para)
+#: newusers.8.xml:428(para) newgrp.1.xml:138(para) gshadow.5.xml:161(para)
+#: grpck.8.xml:226(para) groups.1.xml:105(para) groupmod.8.xml:227(para)
+#: groupmems.8.xml:216(para) groupdel.8.xml:162(para) groupadd.8.xml:255(para)
+#: gpasswd.1.xml:284(para) chgpasswd.8.xml:218(para)
+msgid "Group account information."
+msgstr "Information om gruppekonto."
+
+#: vipw.8.xml:204(filename) usermod.8.xml:551(filename)
+#: useradd.8.xml:727(filename) sg.1.xml:131(filename)
+#: newusers.8.xml:432(filename) newgrp.1.xml:142(filename)
+#: gshadow.5.xml:165(filename) grpck.8.xml:230(filename)
+#: groupmod.8.xml:231(filename) groupmems.8.xml:220(filename)
+#: groupdel.8.xml:166(filename) groupadd.8.xml:259(filename)
+#: gpasswd.1.xml:76(filename) gpasswd.1.xml:288(filename)
+#: chgpasswd.8.xml:222(filename)
+msgid "/etc/gshadow"
+msgstr "/etc/gshadow"
+
+#: vipw.8.xml:206(para) usermod.8.xml:553(para) useradd.8.xml:729(para)
+#: sg.1.xml:133(para) newusers.8.xml:434(para) newgrp.1.xml:144(para)
+#: gshadow.5.xml:167(para) grpck.8.xml:232(para) groupmod.8.xml:233(para)
+#: groupdel.8.xml:168(para) groupadd.8.xml:261(para) gpasswd.1.xml:290(para)
+#: chgpasswd.8.xml:224(para)
+msgid "Secure group account information."
+msgstr "Information om sikret gruppekonto."
+
+#: vipw.8.xml:210(filename) usermod.8.xml:563(filename)
+#: userdel.8.xml:220(filename) useradd.8.xml:709(filename)
+#: su.1.xml:369(filename) sg.1.xml:113(filename) shadow.5.xml:258(filename)
+#: pwck.8.xml:288(filename) passwd.5.xml:163(filename)
+#: passwd.1.xml:416(filename) newusers.8.xml:414(filename)
+#: newgrp.1.xml:124(filename) login.1.xml:353(filename)
+#: grpck.8.xml:236(filename) groupmod.8.xml:243(filename)
+#: expiry.1.xml:124(filename) chsh.1.xml:170(filename)
+#: chpasswd.8.xml:258(filename) chfn.1.xml:216(filename)
+#: chage.1.xml:266(filename)
+msgid "/etc/passwd"
+msgstr "/etc/passwd"
+
+#: vipw.8.xml:212(para) usermod.8.xml:565(para) userdel.8.xml:222(para)
+#: useradd.8.xml:711(para) su.1.xml:371(para) sg.1.xml:115(para)
+#: shadow.5.xml:260(para) pwck.8.xml:290(para) passwd.5.xml:165(para)
+#: passwd.1.xml:418(para) newusers.8.xml:416(para) newgrp.1.xml:126(para)
+#: login.1.xml:355(para) grpck.8.xml:238(para) groupmod.8.xml:245(para)
+#: expiry.1.xml:126(para) chsh.1.xml:172(para) chpasswd.8.xml:260(para)
+#: chfn.1.xml:218(para) chage.1.xml:269(para)
+msgid "User account information."
+msgstr "Information om brugerkonto."
+
+#: vipw.8.xml:216(filename) usermod.8.xml:569(filename)
+#: userdel.8.xml:226(filename) useradd.8.xml:715(filename)
+#: su.1.xml:375(filename) sg.1.xml:119(filename) shadow.5.xml:264(filename)
+#: shadow.3.xml:229(filename) pwck.8.xml:294(filename)
+#: passwd.5.xml:169(filename) passwd.1.xml:422(filename)
+#: newusers.8.xml:420(filename) newgrp.1.xml:130(filename)
+#: login.1.xml:359(filename) expiry.1.xml:130(filename)
+#: chpasswd.8.xml:264(filename) chage.1.xml:274(filename)
+msgid "/etc/shadow"
+msgstr "/etc/shadow"
+
+#: vipw.8.xml:218(para) usermod.8.xml:571(para) userdel.8.xml:228(para)
+#: useradd.8.xml:717(para) su.1.xml:377(para) sg.1.xml:121(para)
+#: shadow.5.xml:266(para) shadow.3.xml:231(para) pwck.8.xml:296(para)
+#: passwd.1.xml:424(para) newusers.8.xml:422(para) newgrp.1.xml:132(para)
+#: login.1.xml:361(para) expiry.1.xml:132(para) chpasswd.8.xml:266(para)
+#: chage.1.xml:277(para)
+msgid "Secure user account information."
+msgstr "Information om sikret brugerkonto."
+
+#: vipw.8.xml:225(title) usermod.8.xml:590(title) userdel.8.xml:325(title)
+#: useradd.8.xml:835(title) suauth.5.xml:222(title) su.1.xml:437(title)
+#: sg.1.xml:140(title) shadow.5.xml:283(title) shadow.3.xml:238(title)
+#: pwconv.8.xml:262(title) pwck.8.xml:354(title) porttime.5.xml:142(title)
+#: passwd.5.xml:188(title) passwd.1.xml:494(title) nologin.8.xml:81(title)
+#: newusers.8.xml:465(title) newgrp.1.xml:151(title)
+#: login.defs.5.xml:547(title) login.access.5.xml:133(title)
+#: login.1.xml:398(title) limits.5.xml:206(title) gshadow.5.xml:174(title)
+#: grpck.8.xml:290(title) groups.1.xml:112(title) groupmod.8.xml:321(title)
+#: groupmems.8.xml:229(title) groupdel.8.xml:214(title)
+#: groupadd.8.xml:341(title) gpasswd.1.xml:297(title) faillog.8.xml:255(title)
+#: faillog.5.xml:108(title) expiry.1.xml:139(title) chsh.1.xml:191(title)
+#: chpasswd.8.xml:285(title) chgpasswd.8.xml:237(title) chfn.1.xml:225(title)
+#: chage.1.xml:317(title)
+msgid "SEE ALSO"
+msgstr "SE OGSÅ"
+
+#: vipw.8.xml:226(para)
+msgid ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry condition=\"tcb"
+"\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+"condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gruppe</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry condition=\"tcb"
+"\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+"condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: usermod.8.xml:46(firstname) userdel.8.xml:45(firstname)
+#: useradd.8.xml:58(firstname) su.1.xml:56(firstname) sg.1.xml:40(firstname)
+#: shadow.5.xml:39(firstname) shadow.3.xml:39(firstname)
+#: pwck.8.xml:45(firstname) porttime.5.xml:39(firstname)
+#: passwd.5.xml:39(firstname) passwd.1.xml:46(firstname)
+#: newusers.8.xml:55(firstname) newgrp.1.xml:40(firstname)
+#: logoutd.8.xml:39(firstname) login.defs.5.xml:106(firstname)
+#: login.1.xml:72(firstname) lastlog.8.xml:41(firstname)
+#: grpck.8.xml:40(firstname) groups.1.xml:39(firstname)
+#: groupmod.8.xml:40(firstname) groupdel.8.xml:40(firstname)
+#: groupadd.8.xml:42(firstname) faillog.8.xml:39(firstname)
+#: faillog.5.xml:39(firstname) expiry.1.xml:43(firstname)
+#: chsh.1.xml:42(firstname) chpasswd.8.xml:43(firstname)
+#: chfn.1.xml:42(firstname) chage.1.xml:40(firstname)
+msgid "Julianne Frances"
+msgstr ""
+
+#: usermod.8.xml:47(surname) userdel.8.xml:46(surname)
+#: useradd.8.xml:59(surname) su.1.xml:57(surname) sg.1.xml:41(surname)
+#: shadow.5.xml:40(surname) shadow.3.xml:40(surname) pwck.8.xml:46(surname)
+#: porttime.5.xml:40(surname) passwd.5.xml:40(surname) passwd.1.xml:47(surname)
+#: newusers.8.xml:56(surname) newgrp.1.xml:41(surname)
+#: logoutd.8.xml:40(surname) login.defs.5.xml:107(surname)
+#: login.1.xml:73(surname) lastlog.8.xml:42(surname) grpck.8.xml:41(surname)
+#: groups.1.xml:40(surname) groupmod.8.xml:41(surname)
+#: groupdel.8.xml:41(surname) groupadd.8.xml:43(surname)
+#: faillog.8.xml:40(surname) faillog.5.xml:40(surname) expiry.1.xml:44(surname)
+#: chsh.1.xml:43(surname) chpasswd.8.xml:44(surname) chfn.1.xml:43(surname)
+#: chage.1.xml:41(surname)
+msgid "Haugh"
+msgstr ""
+
+#: usermod.8.xml:48(contrib) userdel.8.xml:47(contrib)
+#: useradd.8.xml:60(contrib) sg.1.xml:42(contrib) newusers.8.xml:57(contrib)
+#: newgrp.1.xml:42(contrib) logoutd.8.xml:41(contrib)
+#: login.defs.5.xml:108(contrib) groups.1.xml:41(contrib)
+#: groupmod.8.xml:42(contrib) groupdel.8.xml:42(contrib)
+#: groupadd.8.xml:44(contrib) chpasswd.8.xml:45(contrib)
+msgid "Creation, 1991"
+msgstr ""
+
+#: usermod.8.xml:64(refentrytitle) usermod.8.xml:71(refname)
+#: usermod.8.xml:77(command) login.defs.5.xml:510(term)
+msgid "usermod"
+msgstr "usermod"
+
+#: usermod.8.xml:72(refpurpose)
+msgid "modify a user account"
+msgstr "ændre en brugerkonto"
+
+#: usermod.8.xml:81(replaceable) userdel.8.xml:78(replaceable)
+#: useradd.8.xml:92(replaceable) passwd.1.xml:82(replaceable)
+#: chsh.1.xml:78(replaceable) chfn.1.xml:78(replaceable)
+#: chage.1.xml:75(replaceable)
+msgid "LOGIN"
+msgstr "LOGIND"
+
+#: usermod.8.xml:87(para)
+msgid ""
+"The <command>usermod</command> command modifies the system account files to "
+"reflect the changes that are specified on the command line."
+msgstr ""
+"Kommandoen <command>usermod</command> ændrer systemkontofilerne så de "
+"reflekterer ændringerne som angives på kommandolinjen."
+
+#: usermod.8.xml:95(para)
+msgid "The options which apply to the <command>usermod</command> command are:"
+msgstr ""
+"Tilvalgene som kan bruges for kommandoen <command>usermod</command> er:"
+
+#: usermod.8.xml:101(term)
+msgid "<option>-a</option>, <option>--append</option>"
+msgstr "<option>-a</option>, <option>--append</option>"
+
+#: usermod.8.xml:105(para)
+msgid ""
+"Add the user to the supplementary group(s). Use only with the <option>-G</"
+"option> option."
+msgstr ""
+"Tilføj brugeren til de supplementære grupper. Brug kun med tilvalget "
+"<option>-G</option>."
+
+#: usermod.8.xml:112(term)
+#, fuzzy
+#| msgid "<option>-a</option>, <option>--all</option>"
+msgid "<option>-b</option>, <option>--badnames</option>"
+msgstr "<option>-a</option>, <option>--all</option>"
+
+#: usermod.8.xml:116(para) useradd.8.xml:135(para) pwck.8.xml:190(para)
+#: newusers.8.xml:276(para)
+msgid "Allow names that do not conform to standards."
+msgstr ""
+
+#: usermod.8.xml:122(term) useradd.8.xml:162(term)
+msgid ""
+"<option>-c</option>, <option>--comment</option>&nbsp;<replaceable>COMMENT</"
+"replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--comment</option>&nbsp;<replaceable>KOMMENTAR</"
+"replaceable>"
+
+#: usermod.8.xml:126(para)
+msgid ""
+"The new value of the user's password file comment field. It is normally "
+"modified using the <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> utility."
+msgstr ""
+"Den nye værdi for brugerens kommentar kommentarfelt i adgangskodefilen. Den "
+"ændres normalt med redskabet <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+#: usermod.8.xml:135(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home-dir</option>&nbsp;"
+#| "<replaceable>HOME_DIR</replaceable>"
+msgid ""
+"<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home-dir</option>&nbsp;"
+"<replaceable>HJEMMEMAPPE</replaceable>"
+
+#: usermod.8.xml:139(para)
+msgid "The user's new login directory."
+msgstr "Brugerens nye logindmappe."
+
+#: usermod.8.xml:142(para)
+msgid ""
+"If the <option>-m</option> option is given, the contents of the current home "
+"directory will be moved to the new home directory, which is created if it "
+"does not already exist."
+msgstr ""
+"Hvis tilvalget <option>-m</option> er angivet, vil indholdet af den aktuelle "
+"hjemmemappe blive flyttet til den nye hjemmemappe, som oprettes hvis denne "
+"ikke allerede findes."
+
+#: usermod.8.xml:151(term) useradd.8.xml:200(term) useradd.8.xml:577(term)
+msgid ""
+"<option>-e</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>EXPIRE_DATE</replaceable>"
+msgstr ""
+"<option>-e</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>UDLØBSDATO</replaceable>"
+
+#: usermod.8.xml:155(para) useradd.8.xml:204(para)
+msgid ""
+"The date on which the user account will be disabled. The date is specified "
+"in the format <emphasis remap=\"I\">YYYY-MM-DD</emphasis>."
+msgstr ""
+"Datoen hvorpå brugerkontoen vil blive deaktiveret. Datoen er angivet i "
+"formatet <emphasis remap=\"I\">ÅÅÅÅ-MM-DD</emphasis>."
+
+#: usermod.8.xml:159(para)
+msgid ""
+"An empty <replaceable>EXPIRE_DATE</replaceable> argument will disable the "
+"expiration of the account."
+msgstr ""
+"Et tomt argument for <replaceable>UDLØBSDATO</replaceable> vil deaktivere "
+"udløb for kontoen."
+
+#: usermod.8.xml:163(para) usermod.8.xml:184(para)
+msgid ""
+"This option requires a <filename>/etc/shadow</filename> file. A <filename>/"
+"etc/shadow</filename> entry will be created if there were none."
+msgstr ""
+"Dette tilvalg kræver en <filename>/etc/shadow</filename>-fil. Et <filename>/"
+"etc/shadow</filename>-punkt vil blive oprettet hvis et sådant ikke fandtes."
+
+#: usermod.8.xml:171(term) useradd.8.xml:217(term) useradd.8.xml:589(term)
+msgid ""
+"<option>-f</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-f</option>, <option>--inactive</option>&nbsp;<replaceable>INAKTIV</"
+"replaceable>"
+
+#: usermod.8.xml:175(para)
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled."
+msgstr ""
+"Antallet af dage fra en adgangskode udløber til kontoen bliver permanent "
+"deaktiveret."
+
+#: usermod.8.xml:179(para)
+msgid ""
+"A value of 0 disables the account as soon as the password has expired, and a "
+"value of -1 disables the feature."
+msgstr ""
+
+#: usermod.8.xml:192(term) useradd.8.xml:236(term) useradd.8.xml:604(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GROUP</"
+"replaceable>"
+msgstr ""
+
+#: usermod.8.xml:196(para)
+msgid ""
+"The group name or number of the user's new initial login group. The group "
+"must exist."
+msgstr ""
+
+#: usermod.8.xml:200(para)
+msgid ""
+"Any file from the user's home directory owned by the previous primary group "
+"of the user will be owned by this new group."
+msgstr ""
+
+#: usermod.8.xml:204(para)
+msgid ""
+"The group ownership of files outside of the user's home directory must be "
+"fixed manually."
+msgstr ""
+
+#: usermod.8.xml:211(term) useradd.8.xml:263(term)
+msgid ""
+"<option>-G</option>, <option>--groups</option>&nbsp;<replaceable>GROUP1</"
+"replaceable>[<emphasis remap=\"I\">,GROUP2,...</emphasis>[<emphasis remap=\"I"
+"\">,GROUPN</emphasis>]]]"
+msgstr ""
+
+#: usermod.8.xml:215(para)
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option."
+msgstr ""
+
+#: usermod.8.xml:222(para)
+msgid ""
+"If the user is currently a member of a group which is not listed, the user "
+"will be removed from the group. This behaviour can be changed via the "
+"<option>-a</option> option, which appends the user to the current "
+"supplementary group list."
+msgstr ""
+
+#: usermod.8.xml:231(term)
+msgid ""
+"<option>-l</option>, <option>--login</option>&nbsp;<replaceable>NEW_LOGIN</"
+"replaceable>"
+msgstr ""
+
+#: usermod.8.xml:235(para)
+msgid ""
+"The name of the user will be changed from <replaceable>LOGIN</replaceable> "
+"to <replaceable>NEW_LOGIN</replaceable>. Nothing else is changed. In "
+"particular, the user's home directory or mail spool should probably be "
+"renamed manually to reflect the new login name."
+msgstr ""
+
+#: usermod.8.xml:245(term)
+msgid "<option>-L</option>, <option>--lock</option>"
+msgstr ""
+
+#: usermod.8.xml:249(para)
+msgid ""
+"Lock a user's password. This puts a '!' in front of the encrypted password, "
+"effectively disabling the password. You can't use this option with <option>-"
+"p</option> or <option>-U</option>."
+msgstr ""
+
+#: usermod.8.xml:255(para)
+msgid ""
+"Note: if you wish to lock the account (not only access with a password), you "
+"should also set the <replaceable>EXPIRE_DATE</replaceable> to "
+"<replaceable>1</replaceable>."
+msgstr ""
+
+#: usermod.8.xml:264(term)
+msgid "<option>-m</option>, <option>--move-home</option>"
+msgstr ""
+
+#: usermod.8.xml:268(para)
+msgid "Move the content of the user's home directory to the new location."
+msgstr ""
+
+#: usermod.8.xml:272(para)
+msgid ""
+"This option is only valid in combination with the <option>-d</option> (or "
+"<option>--home</option>) option."
+msgstr ""
+
+#: usermod.8.xml:276(para)
+msgid ""
+"<command>usermod</command> will try to adapt the ownership of the files and "
+"to copy the modes, ACL and extended attributes, but manual changes might be "
+"needed afterwards."
+msgstr ""
+
+#: usermod.8.xml:284(term) useradd.8.xml:397(term) groupmod.8.xml:146(term)
+#: groupadd.8.xml:157(term)
+msgid "<option>-o</option>, <option>--non-unique</option>"
+msgstr ""
+
+#: usermod.8.xml:288(para)
+msgid ""
+"When used with the <option>-u</option> option, this option allows to change "
+"the user ID to a non-unique value."
+msgstr ""
+
+#: usermod.8.xml:295(term) useradd.8.xml:409(term) groupmod.8.xml:157(term)
+#: groupadd.8.xml:167(term)
+msgid ""
+"<option>-p</option>, <option>--password</option>&nbsp;<replaceable>PASSWORD</"
+"replaceable>"
+msgstr ""
+
+#: usermod.8.xml:299(para) groupmod.8.xml:161(para)
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>."
+msgstr ""
+
+#: usermod.8.xml:304(para) useradd.8.xml:418(para) groupmod.8.xml:166(para)
+#: groupadd.8.xml:176(para)
+msgid ""
+"<emphasis role=\"bold\">Note:</emphasis> This option is not recommended "
+"because the password (or encrypted password) will be visible by users "
+"listing the processes."
+msgstr ""
+
+#: usermod.8.xml:309(para)
+msgid ""
+"The password will be written in the local <filename>/etc/passwd</filename> "
+"or <filename>/etc/shadow</filename> file. This might differ from the "
+"password database configured in your PAM configuration."
+msgstr ""
+
+#: usermod.8.xml:315(para) useradd.8.xml:423(para) groupmod.8.xml:171(para)
+#: groupadd.8.xml:181(para)
+msgid ""
+"You should make sure the password respects the system's password policy."
+msgstr ""
+
+#: usermod.8.xml:334(term) userdel.8.xml:158(term) useradd.8.xml:469(term)
+#: groupmod.8.xml:190(term) groupdel.8.xml:113(term) groupadd.8.xml:216(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home-dir</option>&nbsp;"
+#| "<replaceable>HOME_DIR</replaceable>"
+msgid ""
+"<option>-P</option>, <option>--prefix</option>&nbsp;<replaceable>PREFIX_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home-dir</option>&nbsp;"
+"<replaceable>HJEMMEMAPPE</replaceable>"
+
+#: usermod.8.xml:338(para) userdel.8.xml:162(para) useradd.8.xml:473(para)
+#: groupmod.8.xml:194(para) groupdel.8.xml:117(para) groupadd.8.xml:220(para)
+msgid ""
+"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."
+msgstr ""
+
+#: usermod.8.xml:351(term) useradd.8.xml:486(term) useradd.8.xml:624(term)
+#: su.1.xml:186(term) chsh.1.xml:119(term)
+msgid ""
+"<option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SHELL</"
+"replaceable>"
+msgstr ""
+
+#: usermod.8.xml:355(para) chsh.1.xml:123(para)
+msgid ""
+"The name of the user's new login shell. Setting this field to blank causes "
+"the system to select the default login shell."
+msgstr ""
+
+#: usermod.8.xml:362(term) useradd.8.xml:500(term)
+msgid ""
+"<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+"replaceable>"
+msgstr ""
+
+#: usermod.8.xml:366(para)
+msgid "The new numerical value of the user's ID."
+msgstr ""
+
+#: usermod.8.xml:369(para)
+msgid ""
+"This value must be unique, unless the <option>-o</option> option is used. "
+"The value must be non-negative."
+msgstr ""
+
+#: usermod.8.xml:374(para)
+msgid ""
+"The user's mailbox, and any files which the user owns and which are located "
+"in the user's home directory will have the file user ID changed "
+"automatically."
+msgstr ""
+
+#: usermod.8.xml:379(para)
+msgid ""
+"The ownership of files outside of the user's home directory must be fixed "
+"manually."
+msgstr ""
+
+#: usermod.8.xml:383(para)
+msgid ""
+"No checks will be performed with regard to the <option>UID_MIN</option>, "
+"<option>UID_MAX</option>, <option>SYS_UID_MIN</option>, or "
+"<option>SYS_UID_MAX</option> from <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: usermod.8.xml:392(term)
+msgid "<option>-U</option>, <option>--unlock</option>"
+msgstr ""
+
+#: usermod.8.xml:396(para)
+msgid ""
+"Unlock a user's password. This removes the '!' in front of the encrypted "
+"password. You can't use this option with <option>-p</option> or <option>-L</"
+"option>."
+msgstr ""
+
+#: usermod.8.xml:401(para)
+msgid ""
+"Note: if you wish to unlock the account (not only access with a password), "
+"you should also set the <replaceable>EXPIRE_DATE</replaceable> (for example "
+"to <replaceable>99999</replaceable>, or to the <option>EXPIRE</option> value "
+"from <filename>/etc/default/useradd</filename>)."
+msgstr ""
+
+#: usermod.8.xml:412(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-f</option>, <option>--inactive</option>&nbsp;"
+#| "<replaceable>INACTIVE</replaceable>"
+msgid ""
+"<option>-v</option>, <option>--add-subuids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-f</option>, <option>--inactive</option>&nbsp;<replaceable>INAKTIV</"
+"replaceable>"
+
+#: usermod.8.xml:416(para)
+msgid "Add a range of subordinate uids to the user's account."
+msgstr ""
+
+#: usermod.8.xml:419(para) usermod.8.xml:457(para)
+msgid ""
+"This option may be specified multiple times to add multiple ranges to a "
+"users account."
+msgstr ""
+
+#: usermod.8.xml:422(para) usermod.8.xml:442(para)
+msgid ""
+"No checks will be performed with regard to <option>SUB_UID_MIN</option>, "
+"<option>SUB_UID_MAX</option>, or <option>SUB_UID_COUNT</option> from /etc/"
+"login.defs."
+msgstr ""
+
+#: usermod.8.xml:430(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-e</option>, <option>--expiredate</option>&nbsp;"
+#| "<replaceable>EXPIRE_DATE</replaceable>"
+msgid ""
+"<option>-V</option>, <option>--del-subuids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-e</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>UDLØBSDATO</replaceable>"
+
+#: usermod.8.xml:434(para)
+msgid "Remove a range of subordinate uids from the user's account."
+msgstr ""
+
+#: usermod.8.xml:437(para)
+msgid ""
+"This option may be specified multiple times to remove multiple ranges to a "
+"users account. When both <option>--del-subuids</option> and <option>--add-"
+"subuids</option> are specified, the removal of all subordinate uid ranges "
+"happens before any subordinate uid range is added."
+msgstr ""
+
+#: usermod.8.xml:450(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-f</option>, <option>--inactive</option>&nbsp;"
+#| "<replaceable>INACTIVE</replaceable>"
+msgid ""
+"<option>-w</option>, <option>--add-subgids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-f</option>, <option>--inactive</option>&nbsp;<replaceable>INAKTIV</"
+"replaceable>"
+
+#: usermod.8.xml:454(para)
+msgid "Add a range of subordinate gids to the user's account."
+msgstr ""
+
+#: usermod.8.xml:460(para) usermod.8.xml:480(para)
+msgid ""
+"No checks will be performed with regard to <option>SUB_GID_MIN</option>, "
+"<option>SUB_GID_MAX</option>, or <option>SUB_GID_COUNT</option> from /etc/"
+"login.defs."
+msgstr ""
+
+#: usermod.8.xml:468(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-e</option>, <option>--expiredate</option>&nbsp;"
+#| "<replaceable>EXPIRE_DATE</replaceable>"
+msgid ""
+"<option>-W</option>, <option>--del-subgids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-e</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>UDLØBSDATO</replaceable>"
+
+#: usermod.8.xml:472(para)
+msgid "Remove a range of subordinate gids from the user's account."
+msgstr ""
+
+#: usermod.8.xml:475(para)
+msgid ""
+"This option may be specified multiple times to remove multiple ranges to a "
+"users account. When both <option>--del-subgids</option> and <option>--add-"
+"subgids</option> are specified, the removal of all subordinate gid ranges "
+"happens before any subordinate gid range is added."
+msgstr ""
+
+#: usermod.8.xml:488(term) useradd.8.xml:535(term)
+msgid ""
+"<option>-Z</option>, <option>--selinux-user</option>&nbsp;"
+"<replaceable>SEUSER</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:492(para)
+msgid "The new SELinux user for the user's login."
+msgstr ""
+
+#: usermod.8.xml:495(para)
+msgid ""
+"A blank <replaceable>SEUSER</replaceable> will remove the SELinux user "
+"mapping for user <replaceable>LOGIN</replaceable> (if any)."
+msgstr ""
+
+#: usermod.8.xml:506(title) userdel.8.xml:298(title) useradd.8.xml:652(title)
+#: su.1.xml:330(title) shadow.3.xml:218(title) passwd.1.xml:377(title)
+#: newusers.8.xml:363(title) login.1.xml:260(title) lastlog.8.xml:229(title)
+#: groupdel.8.xml:133(title) groupadd.8.xml:274(title) gpasswd.1.xml:252(title)
+#: faillog.8.xml:232(title) chpasswd.8.xml:231(title)
+#: chgpasswd.8.xml:186(title)
+msgid "CAVEATS"
+msgstr ""
+
+#: usermod.8.xml:507(para)
+msgid ""
+"You must make certain that the named user is not executing any processes "
+"when this command is being executed if the user's numerical user ID, the "
+"user's name, or the user's home directory is being changed. "
+"<command>usermod</command> checks this on Linux. On other platforms it only "
+"uses utmp to check if the user is logged in."
+msgstr ""
+
+#: usermod.8.xml:514(para)
+msgid ""
+"You must change the owner of any <command>crontab</command> files or "
+"<command>at</command> jobs manually."
+msgstr ""
+
+#: usermod.8.xml:518(para)
+msgid "You must make any changes involving NIS on the NIS server."
+msgstr ""
+
+#: usermod.8.xml:33(term) useradd.8.xml:33(term) login.defs.5.xml:33(term)
+#: lastlog.8.xml:33(term)
+#, fuzzy
+#| msgid "<option>GID_MAX</option> (number)"
+msgid "<option>LASTLOG_UID_MAX</option> (number)"
+msgstr "<option>GID_MAX</option> (nummer)"
+
+#: usermod.8.xml:35(para) useradd.8.xml:35(para) login.defs.5.xml:35(para)
+#: lastlog.8.xml:35(para)
+msgid ""
+"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."
+msgstr ""
+
+#: usermod.8.xml:41(para) useradd.8.xml:41(para) login.defs.5.xml:41(para)
+#: lastlog.8.xml:41(para)
+msgid ""
+"No <option>LASTLOG_UID_MAX</option> option present in the configuration "
+"means that there is no user ID limit for writing lastlog entries."
+msgstr ""
+
+#: usermod.8.xml:32(term) userdel.8.xml:32(term) useradd.8.xml:32(term)
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>MAIL_DIR</option> (string)"
+msgstr ""
+
+#: usermod.8.xml:34(para) userdel.8.xml:34(para) useradd.8.xml:34(para)
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"The mail spool directory. This is needed to manipulate the mailbox when its "
+"corresponding user account is modified or deleted. If not specified, a "
+"compile-time default is used."
+msgstr ""
+
+#: usermod.8.xml:41(term) userdel.8.xml:41(term) useradd.8.xml:41(term)
+#: su.1.xml:41(term) login.defs.5.xml:41(term) login.1.xml:41(term)
+msgid "<option>MAIL_FILE</option> (string)"
+msgstr ""
+
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"Defines the location of the users mail spool files relatively to their home "
+"directory."
+msgstr ""
+
+#. FIXME: MAIL_FILE not used in useradd
+#: usermod.8.xml:50(para) userdel.8.xml:50(para) useradd.8.xml:50(para)
+#: su.1.xml:50(para) login.defs.5.xml:50(para) login.1.xml:50(para)
+msgid ""
+"The <option>MAIL_DIR</option> and <option>MAIL_FILE</option> variables are "
+"used by <command>useradd</command>, <command>usermod</command>, and "
+"<command>userdel</command> to create, move, or delete the user's mail spool."
+msgstr ""
+
+#: usermod.8.xml:56(para) userdel.8.xml:56(para) useradd.8.xml:56(para)
+#: su.1.xml:56(para) login.defs.5.xml:56(para) login.1.xml:56(para)
+msgid ""
+"If <option>MAIL_CHECK_ENAB</option> is set to <replaceable>yes</"
+"replaceable>, they are also used to define the <envar>MAIL</envar> "
+"environment variable."
+msgstr ""
+
+#: usermod.8.xml:30(term) userdel.8.xml:30(term) useradd.8.xml:30(term)
+#: pwconv.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: grpck.8.xml:30(term) groupmod.8.xml:30(term) groupmems.8.xml:30(term)
+#: groupdel.8.xml:30(term) groupadd.8.xml:30(term) gpasswd.1.xml:30(term)
+#: chgpasswd.8.xml:30(term)
+msgid "<option>MAX_MEMBERS_PER_GROUP</option> (number)"
+msgstr ""
+
+#: usermod.8.xml:32(para) userdel.8.xml:32(para) useradd.8.xml:32(para)
+#: pwconv.8.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: grpck.8.xml:32(para) groupmod.8.xml:32(para) groupmems.8.xml:32(para)
+#: groupdel.8.xml:32(para) groupadd.8.xml:32(para) gpasswd.1.xml:32(para)
+#: chgpasswd.8.xml:32(para)
+msgid ""
+"Maximum members per group entry. When the maximum is reached, a new group "
+"entry (line) is started in <filename>/etc/group</filename> (with the same "
+"name, same password, and same GID)."
+msgstr ""
+
+#: usermod.8.xml:37(para) userdel.8.xml:37(para) useradd.8.xml:37(para)
+#: pwconv.8.xml:37(para) newusers.8.xml:37(para) login.defs.5.xml:37(para)
+#: grpck.8.xml:37(para) groupmod.8.xml:37(para) groupmems.8.xml:37(para)
+#: groupdel.8.xml:37(para) groupadd.8.xml:37(para) gpasswd.1.xml:37(para)
+#: chgpasswd.8.xml:37(para)
+msgid ""
+"The default value is 0, meaning that there are no limits in the number of "
+"members in a group."
+msgstr ""
+
+#. Note: on HP, split groups have the same ID, but different
+#. names.
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: pwconv.8.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: grpck.8.xml:43(para) groupmod.8.xml:43(para) groupmems.8.xml:43(para)
+#: groupdel.8.xml:43(para) groupadd.8.xml:43(para) gpasswd.1.xml:43(para)
+#: chgpasswd.8.xml:43(para)
+msgid ""
+"This feature (split group) permits to limit the length of lines in the group "
+"file. This is useful to make sure that lines for NIS groups are not larger "
+"than 1024 characters."
+msgstr ""
+
+#: usermod.8.xml:48(para) userdel.8.xml:48(para) useradd.8.xml:48(para)
+#: pwconv.8.xml:48(para) newusers.8.xml:48(para) login.defs.5.xml:48(para)
+#: grpck.8.xml:48(para) groupmod.8.xml:48(para) groupmems.8.xml:48(para)
+#: groupdel.8.xml:48(para) groupadd.8.xml:48(para) gpasswd.1.xml:48(para)
+#: chgpasswd.8.xml:48(para)
+msgid "If you need to enforce such limit, you can use 25."
+msgstr ""
+
+#: usermod.8.xml:51(para) userdel.8.xml:51(para) useradd.8.xml:51(para)
+#: pwconv.8.xml:51(para) newusers.8.xml:51(para) login.defs.5.xml:51(para)
+#: grpck.8.xml:51(para) groupmod.8.xml:51(para) groupmems.8.xml:51(para)
+#: groupdel.8.xml:51(para) groupadd.8.xml:51(para) gpasswd.1.xml:51(para)
+#: chgpasswd.8.xml:51(para)
+msgid ""
+"Note: split groups may not be supported by all tools (even in the Shadow "
+"toolsuite). You should not use this variable unless you really need it."
+msgstr ""
+
+#: usermod.8.xml:30(term) useradd.8.xml:30(term) newusers.8.xml:30(term)
+#: login.defs.5.xml:30(term)
+#, fuzzy
+#| msgid "<option>GID_MIN</option> (number)"
+msgid "<option>SUB_GID_MIN</option> (number)"
+msgstr "<option>GID_MIN</option> (nummer)"
+
+#: usermod.8.xml:31(term) useradd.8.xml:31(term) newusers.8.xml:31(term)
+#: login.defs.5.xml:31(term)
+#, fuzzy
+#| msgid "<option>GID_MAX</option> (number)"
+msgid "<option>SUB_GID_MAX</option> (number)"
+msgstr "<option>GID_MAX</option> (nummer)"
+
+#: usermod.8.xml:32(term) useradd.8.xml:32(term) newusers.8.xml:32(term)
+#: login.defs.5.xml:32(term)
+#, fuzzy
+#| msgid "<option>GID_MIN</option> (number)"
+msgid "<option>SUB_GID_COUNT</option> (number)"
+msgstr "<option>GID_MIN</option> (nummer)"
+
+#: usermod.8.xml:34(para) useradd.8.xml:34(para) newusers.8.xml:34(para)
+#: login.defs.5.xml:34(para)
+msgid ""
+"If <filename>/etc/subuid</filename> exists, the commands <command>useradd</"
+"command> and <command>newusers</command> (unless the user already have "
+"subordinate group IDs) allocate <option>SUB_GID_COUNT</option> unused group "
+"IDs from the range <option>SUB_GID_MIN</option> to <option>SUB_GID_MAX</"
+"option> for each new user."
+msgstr ""
+
+#: usermod.8.xml:42(para) useradd.8.xml:42(para) newusers.8.xml:42(para)
+#: login.defs.5.xml:42(para)
+#, fuzzy
+#| msgid ""
+#| "The default value for <option>GID_MIN</option> (resp. <option>GID_MAX</"
+#| "option>) is 1000 (resp. 60000)."
+msgid ""
+"The default values for <option>SUB_GID_MIN</option>, <option>SUB_GID_MAX</"
+"option>, <option>SUB_GID_COUNT</option> are respectively 100000, 600100000 "
+"and 65536."
+msgstr ""
+"Standardværdien for <option>GID_MIN</option> (resp. <option>GID_MAX</"
+"option>) er 1000 (resp. 60000)."
+
+#: usermod.8.xml:30(term) useradd.8.xml:30(term) newusers.8.xml:30(term)
+#: login.defs.5.xml:30(term)
+#, fuzzy
+#| msgid "<option>GID_MIN</option> (number)"
+msgid "<option>SUB_UID_MIN</option> (number)"
+msgstr "<option>GID_MIN</option> (nummer)"
+
+#: usermod.8.xml:31(term) useradd.8.xml:31(term) newusers.8.xml:31(term)
+#: login.defs.5.xml:31(term)
+#, fuzzy
+#| msgid "<option>GID_MAX</option> (number)"
+msgid "<option>SUB_UID_MAX</option> (number)"
+msgstr "<option>GID_MAX</option> (nummer)"
+
+#: usermod.8.xml:32(term) useradd.8.xml:32(term) newusers.8.xml:32(term)
+#: login.defs.5.xml:32(term)
+#, fuzzy
+#| msgid "<option>GID_MIN</option> (number)"
+msgid "<option>SUB_UID_COUNT</option> (number)"
+msgstr "<option>GID_MIN</option> (nummer)"
+
+#: usermod.8.xml:34(para) useradd.8.xml:34(para) newusers.8.xml:34(para)
+#: login.defs.5.xml:34(para)
+msgid ""
+"If <filename>/etc/subuid</filename> exists, the commands <command>useradd</"
+"command> and <command>newusers</command> (unless the user already have "
+"subordinate user IDs) allocate <option>SUB_UID_COUNT</option> unused user "
+"IDs from the range <option>SUB_UID_MIN</option> to <option>SUB_UID_MAX</"
+"option> for each new user."
+msgstr ""
+
+#: usermod.8.xml:42(para) useradd.8.xml:42(para) newusers.8.xml:42(para)
+#: login.defs.5.xml:42(para)
+#, fuzzy
+#| msgid ""
+#| "The default value for <option>GID_MIN</option> (resp. <option>GID_MAX</"
+#| "option>) is 1000 (resp. 60000)."
+msgid ""
+"The default values for <option>SUB_UID_MIN</option>, <option>SUB_UID_MAX</"
+"option>, <option>SUB_UID_COUNT</option> are respectively 100000, 600100000 "
+"and 65536."
+msgstr ""
+"Standardværdien for <option>GID_MIN</option> (resp. <option>GID_MAX</"
+"option>) er 1000 (resp. 60000)."
+
+#: usermod.8.xml:30(term) userdel.8.xml:30(term) useradd.8.xml:30(term)
+#: pwck.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>TCB_SYMLINKS</option> (boolean)"
+msgstr ""
+
+#: usermod.8.xml:37(programlisting) userdel.8.xml:37(programlisting)
+#: useradd.8.xml:37(programlisting) pwck.8.xml:37(programlisting)
+#: login.defs.5.xml:37(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"if ( UID is less than 1000) {\n"
+" use /etc/tcb/user\n"
+"} else if ( UID is less than 1000000) {\n"
+" kilos = UID / 1000\n"
+" use /etc/tcb/:kilos/user\n"
+" make symlink /etc/tcb/user to the above directory\n"
+"} else {\n"
+" megas = UID / 1000000\n"
+" kilos = ( UID / megas * 1000000 ) / 1000\n"
+" use /etc/tcb/:megas/:kilos/user\n"
+" make symlink /etc/tcb/user to the above directory\n"
+"}\n"
+" "
+msgstr ""
+
+#: usermod.8.xml:32(para) userdel.8.xml:32(para) useradd.8.xml:32(para)
+#: pwck.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the location of the user tcb directory to "
+"be created will not be automatically set to /etc/tcb/user, but will be "
+"computed depending on the UID of the user, according to the following "
+"algorithm: <placeholder-1/>"
+msgstr ""
+
+#: usermod.8.xml:557(filename) userdel.8.xml:214(filename)
+#: useradd.8.xml:757(filename) su.1.xml:381(filename)
+#: pwconv.8.xml:253(filename) passwd.1.xml:428(filename)
+#: newusers.8.xml:438(filename) login.access.5.xml:124(filename)
+#: login.1.xml:389(filename) groupmod.8.xml:237(filename)
+#: groupadd.8.xml:265(filename) chsh.1.xml:182(filename)
+#: chpasswd.8.xml:270(filename) chgpasswd.8.xml:228(filename)
+#: chfn.1.xml:210(filename)
+msgid "/etc/login.defs"
+msgstr ""
+
+#: usermod.8.xml:559(para) userdel.8.xml:216(para) useradd.8.xml:759(para)
+#: su.1.xml:383(para) pwconv.8.xml:255(para) passwd.1.xml:430(para)
+#: newusers.8.xml:440(para) login.access.5.xml:126(para) login.1.xml:391(para)
+#: groupmod.8.xml:239(para) groupadd.8.xml:267(para) chsh.1.xml:184(para)
+#: chpasswd.8.xml:272(para) chgpasswd.8.xml:230(para) chfn.1.xml:212(para)
+msgid "Shadow password suite configuration."
+msgstr ""
+
+#: usermod.8.xml:575(filename) userdel.8.xml:232(filename)
+#: useradd.8.xml:745(filename) newusers.8.xml:450(filename)
+#, fuzzy
+#| msgid "/etc/suauth"
+msgid "/etc/subgid"
+msgstr "/etc/suauth"
+
+#: usermod.8.xml:577(para) userdel.8.xml:234(para) useradd.8.xml:747(para)
+#: newusers.8.xml:452(para)
+msgid "Per user subordinate group IDs."
+msgstr ""
+
+#: usermod.8.xml:581(filename) userdel.8.xml:238(filename)
+#: useradd.8.xml:751(filename) newusers.8.xml:456(filename)
+#, fuzzy
+#| msgid "/etc/suauth"
+msgid "/etc/subuid"
+msgstr "/etc/suauth"
+
+#: usermod.8.xml:583(para) userdel.8.xml:240(para) useradd.8.xml:753(para)
+#: newusers.8.xml:458(para)
+msgid "Per user subordinate user IDs."
+msgstr ""
+
+#: usermod.8.xml:591(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry><citerefentry condition=\"tcb"
+#| "\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+#| "condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <phrase condition=\"subids"
+"\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gruppe</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry condition=\"tcb"
+"\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+"condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: userdel.8.xml:63(refentrytitle) userdel.8.xml:70(refname)
+#: userdel.8.xml:75(command) login.defs.5.xml:500(term)
+msgid "userdel"
+msgstr ""
+
+#: userdel.8.xml:71(refpurpose)
+msgid "delete a user account and related files"
+msgstr ""
+
+#: userdel.8.xml:85(para)
+msgid ""
+"The <command>userdel</command> command modifies the system account files, "
+"deleting all entries that refer to the user name <emphasis remap=\"I"
+"\">LOGIN</emphasis>. The named user must exist."
+msgstr ""
+
+#: userdel.8.xml:94(para)
+msgid "The options which apply to the <command>userdel</command> command are:"
+msgstr ""
+
+#: userdel.8.xml:99(term) groupadd.8.xml:100(term) expiry.1.xml:103(term)
+msgid "<option>-f</option>, <option>--force</option>"
+msgstr ""
+
+#: userdel.8.xml:103(para)
+msgid ""
+"This option forces the removal of the user account, even if the user is "
+"still logged in. It also forces <command>userdel</command> to remove the "
+"user's home directory and mail spool, even if another user uses the same "
+"home directory or if the mail spool is not owned by the specified user. If "
+"<option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename> and if a group exists with "
+"the same name as the deleted user, then this group will be removed, even if "
+"it is still the primary group of another user."
+msgstr ""
+
+#: userdel.8.xml:116(para)
+msgid ""
+"<emphasis>Note:</emphasis> This option is dangerous and may leave your "
+"system in an inconsistent state."
+msgstr ""
+
+#: userdel.8.xml:129(term)
+msgid "<option>-r</option>, <option>--remove</option>"
+msgstr ""
+
+#: userdel.8.xml:133(para)
+msgid ""
+"Files in the user's home directory will be removed along with the home "
+"directory itself and the user's mail spool. Files located in other file "
+"systems will have to be searched for and deleted manually."
+msgstr ""
+
+#: userdel.8.xml:139(para)
+msgid ""
+"The mail spool is defined by the <option>MAIL_DIR</option> variable in the "
+"<filename>login.defs</filename> file."
+msgstr ""
+
+#: userdel.8.xml:175(term)
+msgid "<option>-Z</option>, <option>--selinux-user</option>"
+msgstr ""
+
+#: userdel.8.xml:179(para)
+msgid "Remove any SELinux user mapping for the user's login."
+msgstr ""
+
+#: userdel.8.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>USERDEL_CMD</option> (string)"
+msgstr ""
+
+#: userdel.8.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If defined, this command is run when removing a user. It should remove any "
+"at/cron/print jobs etc. owned by the user to be removed (passed as the first "
+"argument)."
+msgstr ""
+
+#: userdel.8.xml:40(para) login.defs.5.xml:40(para)
+msgid "The return code of the script is not taken into account."
+msgstr ""
+
+#: userdel.8.xml:46(programlisting) login.defs.5.xml:46(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"#! /bin/sh\n"
+"\n"
+"# Check for the required argument.\n"
+"if [ $# != 1 ]; then\n"
+"\techo \"Usage: $0 username\"\n"
+"\texit 1\n"
+"fi\n"
+"\n"
+"# Remove cron jobs.\n"
+"crontab -r -u $1\n"
+"\n"
+"# Remove at jobs.\n"
+"# Note that it will remove any jobs owned by the same UID,\n"
+"# even if it was shared by a different username.\n"
+"AT_SPOOL_DIR=/var/spool/cron/atjobs\n"
+"find $AT_SPOOL_DIR -name \"[^.]*\" -type f -user $1 -delete \\;\n"
+"\n"
+"# Remove print jobs.\n"
+"lprm $1\n"
+"\n"
+"# All done.\n"
+"exit 0\n"
+" "
+msgstr ""
+
+#: userdel.8.xml:43(para) login.defs.5.xml:43(para)
+msgid ""
+"Here is an example script, which removes the user's cron, at and print jobs: "
+"<placeholder-1/>"
+msgstr ""
+
+#: userdel.8.xml:32(term) useradd.8.xml:32(term) su.1.xml:32(term)
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>USERGROUPS_ENAB</option> (boolean)"
+msgstr ""
+
+#: userdel.8.xml:34(para) useradd.8.xml:34(para) su.1.xml:34(para)
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable setting of the umask group bits to be the same as owner bits "
+"(examples: 022 -&gt; 002, 077 -&gt; 007) for non-root users, if the uid is "
+"the same as gid, and username is the same as the primary group name."
+msgstr ""
+
+#: userdel.8.xml:39(para) useradd.8.xml:39(para) su.1.xml:39(para)
+#: login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, <command>userdel</command> will "
+"remove the user's group if it contains no more members, and "
+"<command>useradd</command> will create by default a group with the name of "
+"the user."
+msgstr ""
+
+#: userdel.8.xml:247(title) useradd.8.xml:766(title) su.1.xml:390(title)
+#: pwck.8.xml:303(title) passwd.1.xml:443(title) grpck.8.xml:245(title)
+#: groupmod.8.xml:252(title) groupdel.8.xml:175(title)
+#: groupadd.8.xml:296(title) chage.1.xml:284(title)
+msgid "EXIT VALUES"
+msgstr ""
+
+#: userdel.8.xml:252(replaceable) useradd.8.xml:771(replaceable)
+#: su.1.xml:409(replaceable) pwck.8.xml:308(replaceable)
+#: passwd.1.xml:448(replaceable) grpck.8.xml:250(replaceable)
+#: groupmod.8.xml:257(replaceable) groupdel.8.xml:180(replaceable)
+#: groupadd.8.xml:301(replaceable) chage.1.xml:289(replaceable)
+msgid "0"
+msgstr ""
+
+#: userdel.8.xml:254(para) useradd.8.xml:773(para) pwck.8.xml:310(para)
+#: passwd.1.xml:450(para) grpck.8.xml:252(para) groupdel.8.xml:182(para)
+#: groupadd.8.xml:303(para) chage.1.xml:291(para)
+msgid "success"
+msgstr ""
+
+#: userdel.8.xml:258(replaceable) useradd.8.xml:777(replaceable)
+#: su.1.xml:75(manvolnum) su.1.xml:415(replaceable) sg.1.xml:59(manvolnum)
+#: pwck.8.xml:314(replaceable) passwd.1.xml:65(manvolnum)
+#: passwd.1.xml:454(replaceable) newgrp.1.xml:59(manvolnum)
+#: login.1.xml:91(manvolnum) grpck.8.xml:256(replaceable)
+#: groups.1.xml:58(manvolnum) gpasswd.1.xml:63(manvolnum)
+#: expiry.1.xml:62(manvolnum) chsh.1.xml:61(manvolnum) chfn.1.xml:61(manvolnum)
+#: chage.1.xml:59(manvolnum) chage.1.xml:295(replaceable)
+msgid "1"
+msgstr ""
+
+#: userdel.8.xml:260(para) useradd.8.xml:779(para)
+msgid "can't update password file"
+msgstr ""
+
+#: userdel.8.xml:264(replaceable) useradd.8.xml:783(replaceable)
+#: pwck.8.xml:320(replaceable) passwd.1.xml:460(replaceable)
+#: grpck.8.xml:262(replaceable) groupmod.8.xml:263(replaceable)
+#: groupdel.8.xml:186(replaceable) groupadd.8.xml:307(replaceable)
+#: chage.1.xml:301(replaceable)
+msgid "2"
+msgstr ""
+
+#: userdel.8.xml:266(para) useradd.8.xml:785(para) pwck.8.xml:316(para)
+#: grpck.8.xml:258(para) groupdel.8.xml:188(para) groupadd.8.xml:309(para)
+#: chage.1.xml:303(para)
+msgid "invalid command syntax"
+msgstr ""
+
+#: userdel.8.xml:270(replaceable) useradd.8.xml:801(replaceable)
+#: pwck.8.xml:344(replaceable) passwd.1.xml:484(replaceable)
+#: groupmod.8.xml:281(replaceable) groupdel.8.xml:192(replaceable)
+msgid "6"
+msgstr ""
+
+#: userdel.8.xml:272(para)
+msgid "specified user doesn't exist"
+msgstr ""
+
+#: userdel.8.xml:278(para)
+msgid "user currently logged in"
+msgstr ""
+
+#: userdel.8.xml:282(replaceable) useradd.8.xml:813(replaceable)
+#: groupmod.8.xml:293(replaceable) groupdel.8.xml:204(replaceable)
+#: groupadd.8.xml:331(replaceable)
+msgid "10"
+msgstr ""
+
+#: userdel.8.xml:284(para) useradd.8.xml:815(para) groupdel.8.xml:206(para)
+#: groupadd.8.xml:333(para)
+msgid "can't update group file"
+msgstr ""
+
+#: userdel.8.xml:288(replaceable) useradd.8.xml:819(replaceable)
+#: groupmod.8.xml:305(replaceable)
+msgid "12"
+msgstr ""
+
+#: userdel.8.xml:290(para)
+msgid "can't remove home directory"
+msgstr ""
+
+#: userdel.8.xml:248(para)
+msgid ""
+"The <command>userdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+
+#: userdel.8.xml:299(para)
+msgid ""
+"<command>userdel</command> will not allow you to remove an account if there "
+"are running processes which belong to this account. In that case, you may "
+"have to kill those processes or lock the user's password or account and "
+"remove the account later. The <option>-f</option> option can force the "
+"deletion of this account."
+msgstr ""
+
+#: userdel.8.xml:306(para)
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this user."
+msgstr ""
+
+#: userdel.8.xml:310(para)
+msgid ""
+"You may not remove any NIS attributes on a NIS client. This must be "
+"performed on the NIS server."
+msgstr ""
+
+#: userdel.8.xml:313(para)
+msgid ""
+"If <option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename>, <command>userdel</"
+"command> will delete the group with the same name as the user. To avoid "
+"inconsistencies in the passwd and group databases, <command>userdel</"
+"command> will check that this group is not used as a primary group for "
+"another user, and will just warn without deleting the group otherwise. The "
+"<option>-f</option> option can force the deletion of this group."
+msgstr ""
+
+#: userdel.8.xml:326(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry><citerefentry condition=\"tcb"
+#| "\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+#| "condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"subids\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gruppe</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry condition=\"tcb"
+"\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+"condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: useradd.8.xml:76(refentrytitle) useradd.8.xml:83(refname)
+#: useradd.8.xml:88(command) useradd.8.xml:95(command)
+#: useradd.8.xml:99(command) login.defs.5.xml:482(term)
+msgid "useradd"
+msgstr ""
+
+#: useradd.8.xml:84(refpurpose)
+msgid "create a new user or update default new user information"
+msgstr ""
+
+#: useradd.8.xml:96(arg) useradd.8.xml:100(arg)
+msgid "-D"
+msgstr ""
+
+#: useradd.8.xml:109(para)
+msgid ""
+"When invoked without the <option>-D</option> option, the <command>useradd</"
+"command> command creates a new user account using the values specified on "
+"the command line plus the default values from the system. Depending on "
+"command line options, the <command>useradd</command> command will update "
+"system files and may also create the new user's home directory and copy "
+"initial files."
+msgstr ""
+
+#: useradd.8.xml:118(para)
+msgid ""
+"By default, a group will also be created for the new user (see <option>-g</"
+"option>, <option>-N</option>, <option>-U</option>, and "
+"<option>USERGROUPS_ENAB</option>)."
+msgstr ""
+
+#: useradd.8.xml:127(para)
+msgid "The options which apply to the <command>useradd</command> command are:"
+msgstr ""
+
+#: useradd.8.xml:132(option) pwck.8.xml:187(option) newusers.8.xml:273(option)
+msgid "--badname"
+msgstr ""
+
+#: useradd.8.xml:141(term) useradd.8.xml:559(term)
+msgid ""
+"<option>-b</option>, <option>--base-dir</option>&nbsp;<replaceable>BASE_DIR</"
+"replaceable>"
+msgstr ""
+
+#: useradd.8.xml:145(para)
+msgid ""
+"The default base directory for the system if <option>-d</option>&nbsp;"
+"<replaceable>HOME_DIR</replaceable> is not specified. <replaceable>BASE_DIR</"
+"replaceable> is concatenated with the account name to define the home "
+"directory. If the <option>-m</option> option is not used, "
+"<replaceable>BASE_DIR</replaceable> must exist."
+msgstr ""
+
+#: useradd.8.xml:152(para)
+msgid ""
+"If this option is not specified, <command>useradd</command> will use the "
+"base directory specified by the <option>HOME</option> variable in <filename>/"
+"etc/default/useradd</filename>, or <filename>/home</filename> by default."
+msgstr ""
+
+#: useradd.8.xml:166(para)
+msgid ""
+"Any text string. It is generally a short description of the login, and is "
+"currently used as the field for the user's full name."
+msgstr ""
+
+#: useradd.8.xml:174(term)
+msgid ""
+"<option>-d</option>, <option>--home-dir</option>&nbsp;<replaceable>HOME_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home-dir</option>&nbsp;"
+"<replaceable>HJEMMEMAPPE</replaceable>"
+
+#: useradd.8.xml:178(para)
+msgid ""
+"The new user will be created using <replaceable>HOME_DIR</replaceable> as "
+"the value for the user's login directory. The default is to append the "
+"<replaceable>LOGIN</replaceable> name to <replaceable>BASE_DIR</replaceable> "
+"and use that as the login directory name. The directory "
+"<replaceable>HOME_DIR</replaceable> does not have to exist but will not be "
+"created if it is missing."
+msgstr ""
+
+#: useradd.8.xml:190(term)
+msgid "<option>-D</option>, <option>--defaults</option>"
+msgstr ""
+
+#: useradd.8.xml:194(para)
+msgid "See below, the subsection \"Changing the default values\"."
+msgstr ""
+
+#: useradd.8.xml:208(para)
+msgid ""
+"If not specified, <command>useradd</command> will use the default expiry "
+"date specified by the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or an empty string (no expiry) by default."
+msgstr ""
+
+#: useradd.8.xml:221(para)
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled. A value of 0 disables the account as soon as the password has "
+"expired, and a value of -1 disables the feature."
+msgstr ""
+
+#: useradd.8.xml:227(para)
+msgid ""
+"If not specified, <command>useradd</command> will use the default inactivity "
+"period specified by the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or -1 by default."
+msgstr ""
+
+#: useradd.8.xml:240(para)
+msgid ""
+"The group name or number of the user's initial login group. The group name "
+"must exist. A group number must refer to an already existing group."
+msgstr ""
+
+#: useradd.8.xml:245(para)
+msgid ""
+"If not specified, the behavior of <command>useradd</command> will depend on "
+"the <option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>. If this variable is set to <replaceable>yes</replaceable> (or "
+"<option>-U/--user-group</option> is specified on the command line), a group "
+"will be created for the user, with the same name as her loginname. If the "
+"variable is set to <replaceable>no</replaceable> (or <option>-N/--no-user-"
+"group</option> is specified on the command line), useradd will set the "
+"primary group of the new user to the value specified by the <option>GROUP</"
+"option> variable in <filename>/etc/default/useradd</filename>, or 100 by "
+"default."
+msgstr ""
+
+#: useradd.8.xml:267(para)
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option. The default is for the user to belong only to "
+"the initial group."
+msgstr ""
+
+#: useradd.8.xml:284(term)
+msgid ""
+"<option>-k</option>, <option>--skel</option>&nbsp;<replaceable>SKEL_DIR</"
+"replaceable>"
+msgstr ""
+
+#: useradd.8.xml:288(para)
+msgid ""
+"The skeleton directory, which contains files and directories to be copied in "
+"the user's home directory, when the home directory is created by "
+"<command>useradd</command>."
+msgstr ""
+
+#: useradd.8.xml:293(para)
+msgid ""
+"This option is only valid if the <option>-m</option> (or <option>--create-"
+"home</option>) option is specified."
+msgstr ""
+
+#: useradd.8.xml:297(para)
+msgid ""
+"If this option is not set, the skeleton directory is defined by the "
+"<option>SKEL</option> variable in <filename>/etc/default/useradd</filename> "
+"or, by default, <filename>/etc/skel</filename>."
+msgstr ""
+
+#: useradd.8.xml:303(para)
+msgid "If possible, the ACLs and extended attributes are copied."
+msgstr ""
+
+#: useradd.8.xml:309(term) groupadd.8.xml:137(term)
+msgid ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
+"replaceable>=<replaceable>VALUE</replaceable>"
+msgstr ""
+
+#: useradd.8.xml:313(para)
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (<option>UID_MIN</"
+"option>, <option>UID_MAX</option>, <option>UMASK</option>, "
+"<option>PASS_MAX_DAYS</option> and others). <placeholder-1/> Example: "
+"<option>-K</option>&nbsp;<replaceable>PASS_MAX_DAYS</"
+"replaceable>=<replaceable>-1</replaceable> can be used when creating system "
+"account to turn off password aging, even though system account has no "
+"password at all. Multiple <option>-K</option> options can be specified, e."
+"g.: <option>-K</option>&nbsp;<replaceable>UID_MIN</"
+"replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+"<replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+
+#: useradd.8.xml:334(term)
+msgid "<option>-l</option>, <option>--no-log-init</option>"
+msgstr ""
+
+#: useradd.8.xml:336(para)
+msgid "Do not add the user to the lastlog and faillog databases."
+msgstr ""
+
+#: useradd.8.xml:339(para)
+msgid ""
+"By default, the user's entries in the lastlog and faillog databases are "
+"reset to avoid reusing the entry from a previously deleted user."
+msgstr ""
+
+#: useradd.8.xml:347(term)
+msgid "<option>-m</option>, <option>--create-home</option>"
+msgstr ""
+
+#: useradd.8.xml:351(para)
+msgid ""
+"Create the user's home directory if it does not exist. The files and "
+"directories contained in the skeleton directory (which can be defined with "
+"the <option>-k</option> option) will be copied to the home directory."
+msgstr ""
+
+#: useradd.8.xml:357(para)
+msgid ""
+"By default, if this option is not specified and <option>CREATE_HOME</option> "
+"is not enabled, no home directories are created."
+msgstr ""
+
+#: useradd.8.xml:365(term)
+#, fuzzy
+#| msgid "<option>-c</option>, <option>--crypt-method</option>"
+msgid "<option>-M</option>, <option>--no-create-home</option>"
+msgstr "<option>-c</option>, <option>--crypt-method</option>"
+
+#: useradd.8.xml:369(para)
+msgid ""
+"Do no create the user's home directory, even if the system wide setting from "
+"<filename>/etc/login.defs</filename> (<option>CREATE_HOME</option>) is set "
+"to <replaceable>yes</replaceable>."
+msgstr ""
+
+#: useradd.8.xml:378(term)
+msgid "<option>-N</option>, <option>--no-user-group</option>"
+msgstr ""
+
+#: useradd.8.xml:382(para)
+msgid ""
+"Do not create a group with the same name as the user, but add the user to "
+"the group specified by the <option>-g</option> option or by the "
+"<option>GROUP</option> variable in <filename>/etc/default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:388(para) useradd.8.xml:526(para)
+msgid ""
+"The default behavior (if the <option>-g</option>, <option>-N</option>, and "
+"<option>-U</option> options are not specified) is defined by the "
+"<option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+
+#: useradd.8.xml:401(para)
+msgid "Allow the creation of a user account with a duplicate (non-unique) UID."
+msgstr ""
+
+#: useradd.8.xml:402(para)
+msgid ""
+"This option is only valid in combination with the <option>-u</option> option."
+msgstr ""
+
+#: useradd.8.xml:413(para) groupadd.8.xml:171(para)
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>. The default is to "
+"disable the password."
+msgstr ""
+
+#: useradd.8.xml:430(term) newusers.8.xml:302(term) groupadd.8.xml:188(term)
+msgid "<option>-r</option>, <option>--system</option>"
+msgstr ""
+
+#: useradd.8.xml:434(para) newusers.8.xml:306(para)
+msgid "Create a system account."
+msgstr ""
+
+#: useradd.8.xml:437(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are chosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>/etc/login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+
+#: useradd.8.xml:446(para)
+msgid ""
+"Note that <command>useradd</command> will not create a home directory for "
+"such a user, regardless of the default setting in <filename>/etc/login.defs</"
+"filename> (<option>CREATE_HOME</option>). You have to specify the <option>-"
+"m</option> options if you want a home directory for a system account to be "
+"created."
+msgstr ""
+
+#: useradd.8.xml:490(para)
+msgid ""
+"The name of the user's login shell. The default is to leave this field "
+"blank, which causes the system to select the default login shell specified "
+"by the <option>SHELL</option> variable in <filename>/etc/default/useradd</"
+"filename>, or an empty string by default."
+msgstr ""
+
+#: useradd.8.xml:504(para)
+msgid ""
+"The numerical value of the user's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than or equal to "
+"<option>UID_MIN</option> and greater than every other user."
+msgstr ""
+
+#: useradd.8.xml:511(para)
+msgid ""
+"See also the <option>-r</option> option and the <option>UID_MAX</option> "
+"description."
+msgstr ""
+
+#: useradd.8.xml:518(term)
+msgid "<option>-U</option>, <option>--user-group</option>"
+msgstr ""
+
+#: useradd.8.xml:522(para)
+msgid ""
+"Create a group with the same name as the user, and add the user to this "
+"group."
+msgstr ""
+
+#: useradd.8.xml:539(para)
+msgid ""
+"The SELinux user for the user's login. The default is to leave this field "
+"blank, which causes the system to select the default SELinux user."
+msgstr ""
+
+#: useradd.8.xml:549(title)
+msgid "Changing the default values"
+msgstr ""
+
+#: useradd.8.xml:550(para)
+msgid ""
+"When invoked with only the <option>-D</option> option, <command>useradd</"
+"command> will display the current default values. When invoked with <option>-"
+"D</option> plus other options, <command>useradd</command> will update the "
+"default values for the specified options. Valid default-changing options are:"
+msgstr ""
+
+#: useradd.8.xml:563(para)
+msgid ""
+"The path prefix for a new user's home directory. The user's name will be "
+"affixed to the end of <replaceable>BASE_DIR</replaceable> to form the new "
+"user's home directory name, if the <option>-d</option> option is not used "
+"when creating a new account."
+msgstr ""
+
+#: useradd.8.xml:570(para)
+msgid ""
+"This option sets the <option>HOME</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:581(para)
+msgid "The date on which the user account is disabled."
+msgstr ""
+
+#: useradd.8.xml:582(para)
+msgid ""
+"This option sets the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:593(para)
+msgid ""
+"The number of days after a password has expired before the account will be "
+"disabled."
+msgstr ""
+"Antallet af dage efter en adgangskode er udløbet før kontoen vil blive "
+"deaktiveret."
+
+#: useradd.8.xml:597(para)
+msgid ""
+"This option sets the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+"Dette tilvalg sætter variablen <option>INACTIVE</option> i <filename>/etc/"
+"default/useradd</filename>."
+
+#: useradd.8.xml:608(para)
+msgid ""
+"The group name or ID for a new user's initial group (when the <option>-N/--"
+"no-user-group</option> is used or when the <option>USERGROUPS_ENAB</option> "
+"variable is set to <replaceable>no</replaceable> in <filename>/etc/login."
+"defs</filename>). The named group must exist, and a numerical group ID must "
+"have an existing entry."
+msgstr ""
+
+#: useradd.8.xml:617(para)
+msgid ""
+"This option sets the <option>GROUP</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:628(para)
+msgid "The name of a new user's login shell."
+msgstr "Navnet på en ny brugers logindskal."
+
+#: useradd.8.xml:631(para)
+msgid ""
+"This option sets the <option>SHELL</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:643(title)
+msgid "NOTES"
+msgstr ""
+
+#: useradd.8.xml:644(para)
+msgid ""
+"The system administrator is responsible for placing the default user files "
+"in the <filename>/etc/skel/</filename> directory (or any other skeleton "
+"directory specified in <filename>/etc/default/useradd</filename> or on the "
+"command line)."
+msgstr ""
+
+#: useradd.8.xml:653(para)
+msgid ""
+"You may not add a user to a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+"Du kan ikke tilføje en bruger til en NIS eller LDAP-gruppe. Dette skal "
+"udføres på den tilsvarende server."
+
+#: useradd.8.xml:658(para)
+msgid ""
+"Similarly, if the username already exists in an external user database such "
+"as NIS or LDAP, <command>useradd</command> will deny the user account "
+"creation request."
+msgstr ""
+
+#: useradd.8.xml:664(para)
+msgid ""
+"Usernames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+
+#: useradd.8.xml:670(para)
+msgid "Usernames may only be up to 32 characters long."
+msgstr "Brugernavne må kun være op til 32 tegn lange."
+
+#: useradd.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>CREATE_HOME</option> (boolean)"
+msgstr "<option>CREATE_HOME</option> (boolesk)"
+
+#: useradd.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"Indicate if a home directory should be created by default for new users."
+msgstr ""
+"Indikerer om en hjemmemappe skal oprettes som standard for nye brugere."
+
+#: useradd.8.xml:36(para) login.defs.5.xml:36(para)
+msgid ""
+"This setting does not apply to system users, and can be overridden on the "
+"command line."
+msgstr ""
+"Denne indstilling gælder ikke for systembrugere og kan overskrives på "
+"kommandolinjen."
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: groupadd.8.xml:32(term)
+msgid "<option>GID_MAX</option> (number)"
+msgstr "<option>GID_MAX</option> (nummer)"
+
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+#: groupadd.8.xml:33(term)
+msgid "<option>GID_MIN</option> (number)"
+msgstr "<option>GID_MIN</option> (nummer)"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+#: groupadd.8.xml:35(para)
+msgid ""
+"Range of group IDs used for the creation of regular groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: groupadd.8.xml:40(para)
+msgid ""
+"The default value for <option>GID_MIN</option> (resp. <option>GID_MAX</"
+"option>) is 1000 (resp. 60000)."
+msgstr ""
+"Standardværdien for <option>GID_MIN</option> (resp. <option>GID_MAX</"
+"option>) er 1000 (resp. 60000)."
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+#| msgid "<option>GID_MAX</option> (number)"
+msgid "<option>HOME_MODE</option> (number)"
+msgstr "<option>GID_MAX</option> (nummer)"
+
+#: useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The mode for new home directories. If not specified, the <option>UMASK</"
+"option> is used to create the mode."
+msgstr ""
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+msgid ""
+"<command>useradd</command> and <command>newusers</command> use this to set "
+"the mode of the home directory they create."
+msgstr ""
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_MAX_DAYS</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The maximum number of days a password may be used. If the password is older "
+"than this, a password change will be forced. If not specified, -1 will be "
+"assumed (which disables the restriction)."
+msgstr ""
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_MIN_DAYS</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The minimum number of days allowed between password changes. Any password "
+"changes attempted sooner than this will be rejected. If not specified, -1 "
+"will be assumed (which disables the restriction)."
+msgstr ""
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_WARN_AGE</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The number of days warning given before a password expires. A zero means "
+"warning is given only upon the day of expiration, a negative value means no "
+"warning is given. If not specified, no warning will be provided."
+msgstr ""
+
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: groupadd.8.xml:30(term)
+msgid "<option>SYS_GID_MAX</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: groupadd.8.xml:31(term)
+msgid "<option>SYS_GID_MIN</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: groupadd.8.xml:33(para)
+msgid ""
+"Range of group IDs used for the creation of system groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#: groupadd.8.xml:38(para)
+msgid ""
+"The default value for <option>SYS_GID_MIN</option> (resp. "
+"<option>SYS_GID_MAX</option>) is 101 (resp. <option>GID_MIN</option>-1)."
+msgstr ""
+
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>SYS_UID_MAX</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+msgid "<option>SYS_UID_MIN</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+msgid ""
+"Range of user IDs used for the creation of system users by <command>useradd</"
+"command> or <command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:37(para) newusers.8.xml:37(para) login.defs.5.xml:37(para)
+msgid ""
+"The default value for <option>SYS_UID_MIN</option> (resp. "
+"<option>SYS_UID_MAX</option>) is 101 (resp. <option>UID_MIN</option>-1)."
+msgstr ""
+
+#: useradd.8.xml:30(term) pwck.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>TCB_AUTH_GROUP</option> (boolean)"
+msgstr ""
+
+#: useradd.8.xml:32(para) pwck.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"If <replaceable>yes</replaceable>, newly created tcb shadow files will be "
+"group owned by the <replaceable>auth</replaceable> group."
+msgstr ""
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>UID_MAX</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>UID_MIN</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"Range of user IDs used for the creation of regular users by "
+"<command>useradd</command> or <command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:39(para) newusers.8.xml:39(para) login.defs.5.xml:39(para)
+msgid ""
+"The default value for <option>UID_MIN</option> (resp. <option>UID_MAX</"
+"option>) is 1000 (resp. 60000)."
+msgstr ""
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: login.1.xml:32(term)
+msgid "<option>UMASK</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: login.1.xml:34(para)
+msgid ""
+"The file mode creation mask is initialized to this value. If not specified, "
+"the mask will be initialized to 022."
+msgstr ""
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#: login.1.xml:38(para)
+msgid ""
+"<command>useradd</command> and <command>newusers</command> use this mask to "
+"set the mode of the home directory they create if <option>HOME_MODE</option> "
+"is not set."
+msgstr ""
+
+#: useradd.8.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: login.1.xml:43(para)
+msgid ""
+"It is also used by <command>login</command> to define users' initial umask. "
+"Note that this mask can be overridden by the user's GECOS line (if "
+"<option>QUOTAS_ENAB</option> is set) or by the specification of a limit with "
+"the <emphasis>K</emphasis> identifier in "
+"<citerefentry><refentrytitle>limits</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+
+#: useradd.8.xml:51(para) newusers.8.xml:51(para) login.defs.5.xml:51(para)
+#: login.1.xml:51(para)
+msgid ""
+"It is also used by <command>pam_umask</command> as the default umask value."
+msgstr ""
+
+#: useradd.8.xml:733(filename)
+msgid "/etc/default/useradd"
+msgstr "/etc/default/useradd"
+
+#: useradd.8.xml:735(para)
+msgid "Default values for account creation."
+msgstr "Standardværdier for kontooprettelse."
+
+#: useradd.8.xml:739(filename)
+msgid "/etc/skel/"
+msgstr "/etc/skel/"
+
+#: useradd.8.xml:741(para)
+msgid "Directory containing default files."
+msgstr "Mappe indeholdende standardfiler."
+
+#: useradd.8.xml:789(replaceable) shadow.3.xml:58(manvolnum)
+#: pwck.8.xml:326(replaceable) passwd.1.xml:466(replaceable)
+#: grpck.8.xml:268(replaceable) groupmod.8.xml:269(replaceable)
+#: groupadd.8.xml:313(replaceable)
+msgid "3"
+msgstr "3"
+
+#: useradd.8.xml:791(para) passwd.1.xml:486(para) groupadd.8.xml:315(para)
+msgid "invalid argument to option"
+msgstr "Ugyldigt argument for tilvalg"
+
+#: useradd.8.xml:795(replaceable) pwck.8.xml:332(replaceable)
+#: passwd.1.xml:472(replaceable) grpck.8.xml:274(replaceable)
+#: groupmod.8.xml:275(replaceable) groupadd.8.xml:319(replaceable)
+msgid "4"
+msgstr "4"
+
+#: useradd.8.xml:797(para)
+msgid "UID already in use (and no <option>-o</option>)"
+msgstr "UID er allerede i brug (og intet <option>-o</option>)"
+
+#: useradd.8.xml:803(para) groupdel.8.xml:194(para)
+msgid "specified group doesn't exist"
+msgstr "angivet gruppe findes ikke"
+
+#: useradd.8.xml:807(replaceable) groupmod.8.xml:287(replaceable)
+#: groupadd.8.xml:325(replaceable)
+msgid "9"
+msgstr "9"
+
+#: useradd.8.xml:809(para)
+msgid "username already in use"
+msgstr "brugernavn er allerede i brug"
+
+#: useradd.8.xml:821(para)
+msgid "can't create home directory"
+msgstr "kan ikke oprette hjemmemappe"
+
+#: useradd.8.xml:825(replaceable)
+#, fuzzy
+#| msgid "4"
+msgid "14"
+msgstr "4"
+
+#: useradd.8.xml:827(para)
+msgid "can't update SELinux user mapping"
+msgstr ""
+
+#: useradd.8.xml:767(para)
+msgid ""
+"The <command>useradd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Kommandoen <command>useradd</command> findes med de følgende værdier: "
+"<placeholder-1/>"
+
+#: useradd.8.xml:836(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry><citerefentry condition=\"tcb"
+#| "\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+#| "condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <phrase condition=\"subids"
+"\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gruppe</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry condition=\"tcb"
+"\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+"condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: suauth.5.xml:41(contrib) pwconv.8.xml:47(contrib)
+#: login.access.5.xml:42(contrib) gpasswd.1.xml:46(contrib)
+msgid "Creation, 1996"
+msgstr ""
+
+#: suauth.5.xml:57(refentrytitle) suauth.5.xml:64(refname)
+msgid "suauth"
+msgstr ""
+
+#: suauth.5.xml:58(manvolnum) shadow.5.xml:58(manvolnum)
+#: pwck.8.xml:338(replaceable) porttime.5.xml:58(manvolnum)
+#: passwd.5.xml:58(manvolnum) passwd.1.xml:478(replaceable)
+#: login.defs.5.xml:125(manvolnum) login.access.5.xml:59(manvolnum)
+#: limits.5.xml:60(manvolnum) gshadow.5.xml:47(manvolnum)
+#: grpck.8.xml:280(replaceable) faillog.5.xml:58(manvolnum)
+msgid "5"
+msgstr "5"
+
+#: suauth.5.xml:59(refmiscinfo) shadow.5.xml:59(refmiscinfo)
+#: porttime.5.xml:59(refmiscinfo) passwd.5.xml:59(refmiscinfo)
+#: login.defs.5.xml:126(refmiscinfo) login.access.5.xml:60(refmiscinfo)
+#: limits.5.xml:61(refmiscinfo) gshadow.5.xml:48(refmiscinfo)
+#: faillog.5.xml:59(refmiscinfo)
+msgid "File Formats and Conversions"
+msgstr ""
+
+#: suauth.5.xml:65(refpurpose)
+msgid "detailed su control file"
+msgstr ""
+
+#: suauth.5.xml:70(command) suauth.5.xml:196(filename)
+msgid "/etc/suauth"
+msgstr "/etc/suauth"
+
+#: suauth.5.xml:76(para)
+msgid ""
+"The file <filename>/etc/suauth</filename> is referenced whenever the su "
+"command is called. It can change the behaviour of the su command, based upon:"
+msgstr ""
+
+#. .RS
+#: suauth.5.xml:83(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+" 1) the user su is targeting\n"
+" "
+msgstr ""
+
+#. .fi
+#: suauth.5.xml:87(para)
+msgid ""
+"2) the user executing the su command (or any groups he might be a member of)"
+msgstr ""
+
+#: suauth.5.xml:92(para)
+msgid ""
+"The file is formatted like this, with lines starting with a # being treated "
+"as comment lines and ignored;"
+msgstr ""
+
+#: suauth.5.xml:97(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+" to-id:from-id:ACTION\n"
+" "
+msgstr ""
+
+#: suauth.5.xml:101(para)
+msgid ""
+"Where to-id is either the word <emphasis>ALL</emphasis>, a list of usernames "
+"delimited by \",\" or the words <emphasis>ALL EXCEPT</emphasis> followed by "
+"a list of usernames delimited by \",\"."
+msgstr ""
+
+#: suauth.5.xml:107(para)
+msgid ""
+"from-id is formatted the same as to-id except the extra word "
+"<emphasis>GROUP</emphasis> is recognized. <emphasis>ALL EXCEPT GROUP</"
+"emphasis> is perfectly valid too. Following <emphasis>GROUP</emphasis> "
+"appears one or more group names, delimited by \",\". It is not sufficient to "
+"have primary group id of the relevant group, an entry in "
+"<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry> is necessary."
+msgstr ""
+
+#: suauth.5.xml:118(para)
+msgid "Action can be one only of the following currently supported options."
+msgstr ""
+
+#: suauth.5.xml:124(emphasis)
+msgid "DENY"
+msgstr ""
+
+#: suauth.5.xml:127(para)
+msgid "The attempt to su is stopped before a password is even asked for."
+msgstr ""
+
+#: suauth.5.xml:134(emphasis)
+msgid "NOPASS"
+msgstr ""
+
+#: suauth.5.xml:137(para)
+msgid ""
+"The attempt to su is automatically successful; no password is asked for."
+msgstr ""
+
+#: suauth.5.xml:145(emphasis)
+msgid "OWNPASS"
+msgstr ""
+
+#: suauth.5.xml:148(para)
+msgid ""
+"For the su command to be successful, the user must enter his or her own "
+"password. They are told this."
+msgstr ""
+
+#: suauth.5.xml:156(para)
+msgid ""
+"Note there are three separate fields delimited by a colon. No whitespace "
+"must surround this colon. Also note that the file is examined sequentially "
+"line by line, and the first applicable rule is used without examining the "
+"file further. This makes it possible for a system administrator to exercise "
+"as fine control as he or she wishes."
+msgstr ""
+
+#: suauth.5.xml:166(title)
+msgid "EXAMPLE"
+msgstr ""
+
+#: suauth.5.xml:167(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+" # sample /etc/suauth file\n"
+" #\n"
+" # A couple of privileged usernames may\n"
+" # su to root with their own password.\n"
+" #\n"
+" root:chris,birddog:OWNPASS\n"
+" #\n"
+" # Anyone else may not su to root unless in\n"
+" # group wheel. This is how BSD does things.\n"
+" #\n"
+" root:ALL EXCEPT GROUP wheel:DENY\n"
+" #\n"
+" # Perhaps terry and birddog are accounts\n"
+" # owned by the same person.\n"
+" # Access can be arranged between them\n"
+" # with no password.\n"
+" #\n"
+" terry:birddog:NOPASS\n"
+" birddog:terry:NOPASS\n"
+" #\n"
+" "
+msgstr ""
+
+#: suauth.5.xml:203(title) pwconv.8.xml:216(title) login.defs.5.xml:531(title)
+msgid "BUGS"
+msgstr ""
+
+#: suauth.5.xml:204(para)
+msgid ""
+"There could be plenty lurking. The file parser is particularly unforgiving "
+"about syntax errors, expecting no spurious whitespace (apart from beginning "
+"and end of lines), and a specific token delimiting different things."
+msgstr ""
+
+#: suauth.5.xml:213(title) shadow.3.xml:208(title)
+msgid "DIAGNOSTICS"
+msgstr ""
+
+#: suauth.5.xml:214(para)
+msgid ""
+"An error parsing the file is reported using "
+"<citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry> as level ERR on facility AUTH."
+msgstr ""
+
+#: suauth.5.xml:223(para)
+msgid ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+
+#: su.1.xml:58(contrib) shadow.5.xml:41(contrib) shadow.3.xml:41(contrib)
+#: porttime.5.xml:41(contrib) passwd.5.xml:41(contrib) passwd.1.xml:48(contrib)
+#: login.1.xml:74(contrib) faillog.8.xml:41(contrib) faillog.5.xml:41(contrib)
+msgid "Creation, 1989"
+msgstr ""
+
+#: su.1.xml:74(refentrytitle) su.1.xml:81(refname) su.1.xml:86(command)
+#: login.defs.5.xml:456(term)
+msgid "su"
+msgstr ""
+
+#: su.1.xml:76(refmiscinfo) sg.1.xml:60(refmiscinfo)
+#: passwd.1.xml:66(refmiscinfo) newgrp.1.xml:60(refmiscinfo)
+#: login.1.xml:92(refmiscinfo) groups.1.xml:59(refmiscinfo)
+#: gpasswd.1.xml:64(refmiscinfo) expiry.1.xml:63(refmiscinfo)
+#: chsh.1.xml:62(refmiscinfo) chfn.1.xml:62(refmiscinfo)
+#: chage.1.xml:60(refmiscinfo)
+msgid "User Commands"
+msgstr ""
+
+#: su.1.xml:82(refpurpose)
+msgid "change user ID or become superuser"
+msgstr ""
+
+#: su.1.xml:91(replaceable) sg.1.xml:72(arg) newgrp.1.xml:71(arg)
+msgid "-"
+msgstr ""
+
+#: su.1.xml:94(replaceable) login.1.xml:107(replaceable)
+#: login.1.xml:115(replaceable)
+msgid "username"
+msgstr ""
+
+#: su.1.xml:96(replaceable)
+msgid "args"
+msgstr ""
+
+#: su.1.xml:104(para)
+msgid ""
+"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."
+msgstr ""
+
+#: su.1.xml:114(para)
+msgid ""
+"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>."
+msgstr ""
+
+#: su.1.xml:122(para)
+msgid ""
+"The user will be prompted for a password, if appropriate. Invalid passwords "
+"will produce an error message. All attempts, both valid and invalid, are "
+"logged to detect abuse of the system."
+msgstr ""
+"Brugeren vil blive spurgt om sin adgangskode, hvis det er relevant. Ugyldige "
+"adgangskoder vil medføre en fejlbesked. Alle forsøg, både gyldige og "
+"ugyldige, logges for at deteketere misbrug af systemet."
+
+#: su.1.xml:127(para)
+msgid ""
+"The current environment is passed to the new shell. The value of <envar>"
+"$PATH</envar> is reset to <filename>/bin:/usr/bin</filename> for normal "
+"users, or <filename>/sbin:/bin:/usr/sbin:/usr/bin</filename> for the "
+"superuser. This may be changed with the <option>ENV_PATH</option> and "
+"<option>ENV_SUPATH</option> definitions in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+
+#: su.1.xml:136(para) login.1.xml:188(para)
+msgid ""
+"A subsystem login is indicated by the presence of a \"*\" as the first "
+"character of the login shell. The given home directory will be used as the "
+"root of a new file system which the user is actually logged into."
+msgstr ""
+
+#: su.1.xml:145(para)
+msgid "The options which apply to the <command>su</command> command are:"
+msgstr ""
+
+#: su.1.xml:149(term)
+msgid ""
+"<option>-c</option>, <option>--command</option>&nbsp;<replaceable>COMMAND</"
+"replaceable>"
+msgstr ""
+
+#: su.1.xml:153(para)
+msgid ""
+"Specify a command that will be invoked by the shell using its <option>-c</"
+"option>."
+msgstr ""
+
+#: su.1.xml:157(para)
+msgid ""
+"The executed command will have no controlling terminal. This option cannot "
+"be used to execute interactive programs which need a controlling TTY."
+msgstr ""
+
+#: su.1.xml:167(term)
+msgid "<option>-</option>, <option>-l</option>, <option>--login</option>"
+msgstr ""
+
+#: su.1.xml:171(para)
+msgid ""
+"Provide an environment similar to what the user would expect had the user "
+"logged in directly."
+msgstr ""
+
+#: su.1.xml:175(para)
+msgid ""
+"When <option>-</option> is used, it must be specified before any "
+"<option>username</option>. For portability it is recommended to use it as "
+"last option, before any <option>username</option>. The other forms (<option>-"
+"l</option> and <option>--login</option>) do not have this restriction."
+msgstr ""
+
+#: su.1.xml:190(para)
+msgid "The shell that will be invoked."
+msgstr ""
+
+#: su.1.xml:198(para)
+msgid "The shell specified with --shell."
+msgstr "Skallen angivet med --shell."
+
+#: su.1.xml:201(para)
+msgid ""
+"If <option>--preserve-environment</option> is used, the shell specified by "
+"the <envar>$SHELL</envar> environment variable."
+msgstr ""
+
+#: su.1.xml:208(para)
+msgid ""
+"The shell indicated in the <filename>/etc/passwd</filename> entry for the "
+"target user."
+msgstr ""
+
+#: su.1.xml:214(para)
+msgid ""
+"<filename>/bin/sh</filename> if a shell could not be found by any above "
+"method."
+msgstr ""
+
+#: su.1.xml:191(para)
+msgid ""
+"The invoked shell is chosen from (highest priority first): <placeholder-1/>"
+msgstr ""
+
+#: su.1.xml:219(para)
+msgid ""
+"If the target user has a restricted shell (i.e. the shell field of this "
+"user's entry in <filename>/etc/passwd</filename> is not listed in <filename>/"
+"etc/shells</filename>), then the <option>--shell</option> option or the "
+"<envar>$SHELL</envar> environment variable won't be taken into account, "
+"unless <command>su</command> is called by root."
+msgstr ""
+
+#: su.1.xml:230(term)
+msgid ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+msgstr ""
+
+#: su.1.xml:239(envar)
+msgid "$PATH"
+msgstr ""
+
+#: su.1.xml:241(para)
+msgid ""
+"reset according to the <filename>/etc/login.defs</filename> options "
+"<option>ENV_PATH</option> or <option>ENV_SUPATH</option> (see below);"
+msgstr ""
+
+#: su.1.xml:250(envar)
+msgid "$IFS"
+msgstr ""
+
+#: su.1.xml:252(para)
+msgid ""
+"reset to <quote>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</quote>, if it was "
+"set."
+msgstr ""
+
+#: su.1.xml:235(para)
+msgid "Preserve the current environment, except for: <placeholder-1/>"
+msgstr ""
+
+#: su.1.xml:261(para)
+msgid ""
+"If the target user has a restricted shell, this option has no effect (unless "
+"<command>su</command> is called by root)."
+msgstr ""
+"Hvis målbrugeren har en begrænset skal, så har dette tilvalg ingen effekt "
+"(med mindre <command>su</command> kaldes af root)."
+
+#: su.1.xml:270(para)
+msgid ""
+"The <envar>$HOME</envar>, <envar>$SHELL</envar>, <envar>$USER</envar>, "
+"<envar>$LOGNAME</envar>, <envar>$PATH</envar>, and <envar>$IFS</envar> "
+"environment variables are reset."
+msgstr ""
+
+#: su.1.xml:279(para)
+msgid ""
+"If <option>--login</option> is not used, the environment is copied, except "
+"for the variables above."
+msgstr ""
+
+#: su.1.xml:286(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TERM</envar>, <envar>"
+"$COLORTERM</envar>, <envar>$DISPLAY</envar>, and <envar>$XAUTHORITY</envar> "
+"environment variables are copied if they were set."
+msgstr ""
+
+#: su.1.xml:296(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TZ</envar>, <envar>$HZ</"
+"envar>, and <envar>$MAIL</envar> environment variables are set according to "
+"the <filename>/etc/login.defs</filename> options <option>ENV_TZ</option>, "
+"<option>ENV_HZ</option>, <option>MAIL_DIR</option>, and <option>MAIL_FILE</"
+"option> (see below)."
+msgstr ""
+
+#: su.1.xml:309(para)
+msgid ""
+"If <option>--login</option> is used, other environment variables might be "
+"set by the <option>ENVIRON_FILE</option> file (see below)."
+msgstr ""
+
+#: su.1.xml:317(para)
+msgid "Other environments might be set by PAM modules."
+msgstr ""
+
+#: su.1.xml:265(para)
+msgid ""
+"Note that the default behavior for the environment is the following: "
+"<placeholder-1/>"
+msgstr ""
+
+#: su.1.xml:331(para)
+msgid ""
+"This version of <command>su</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>CONSOLE</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, either full pathname of a file containing device names (one per "
+"line) or a \":\" delimited list of device names. Root logins will be allowed "
+"only upon these devices."
+msgstr ""
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid "If not defined, root will be allowed on any device."
+msgstr ""
+"Hvis ikke defineret så vil administrator (root) være tilladt på alle enheder"
+
+#: su.1.xml:42(para) login.defs.5.xml:42(para) login.1.xml:42(para)
+msgid "The device should be specified without the /dev/ prefix."
+msgstr "Enheden skal angives uden præfikset /dev/."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>CONSOLE_GROUPS</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"List of groups to add to the user's supplementary groups set when logging in "
+"on the console (as determined by the CONSOLE setting). Default is none. "
+"<placeholder-1/> Use with caution - it is possible for users to gain "
+"permanent access to these groups, even when not logged in on the console."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>DEFAULT_HOME</option> (boolean)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Indicate if login is allowed if we can't cd to the home directory. Default "
+"is no."
+msgstr ""
+"Indiker om logind er tilladt, hvis vi ikke kan cd til hjemmemappen. "
+"Standarden er nej."
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, the user will login in the root "
+"(<filename>/</filename>) directory if it is not possible to cd to her home "
+"directory."
+msgstr ""
+
+#. XXX: When compiled with PAM support, only sulogin uses ENV_HZ
+#: su.1.xml:33(term) login.defs.5.xml:33(term) login.1.xml:33(term)
+msgid "<option>ENV_HZ</option> (string)"
+msgstr "<option>ENV_HZ</option> (streng)"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"If set, it will be used to define the HZ environment variable when a user "
+"login. The value must be preceded by <replaceable>HZ=</replaceable>. A "
+"common value on Linux is <replaceable>HZ=100</replaceable>."
+msgstr ""
+
+#: su.1.xml:41(para) login.defs.5.xml:41(para) login.1.xml:41(para)
+msgid ""
+"The <envar>HZ</envar> environment variable is only set when the user (the "
+"superuser) logs in with <command>sulogin</command>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENVIRON_FILE</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If this file exists and is readable, login environment will be read from it. "
+"Every line should be in the form name=value."
+msgstr ""
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid "Lines starting with a # are treated as comment lines and ignored."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENV_PATH</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the PATH environment variable when a "
+"regular user login. The value is a colon separated list of paths (for "
+"example <replaceable>/bin:/usr/bin</replaceable>) and can be preceded by "
+"<replaceable>PATH=</replaceable>. The default value is <replaceable>PATH=/"
+"bin:/usr/bin</replaceable>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENV_SUPATH</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the PATH environment variable when the "
+"superuser login. The value is a colon separated list of paths (for example "
+"<replaceable>/sbin:/bin:/usr/sbin:/usr/bin</replaceable>) and can be "
+"preceded by <replaceable>PATH=</replaceable>. The default value is "
+"<replaceable>PATH=/sbin:/bin:/usr/sbin:/usr/bin</replaceable>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENV_TZ</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the TZ environment variable when a user "
+"login. The value can be the name of a timezone preceded by <replaceable>TZ=</"
+"replaceable> (for example <replaceable>TZ=CST6CDT</replaceable>), or the "
+"full path to the file containing the timezone specification (for example "
+"<filename>/etc/tzname</filename>)."
+msgstr ""
+
+#. TODO: it can in fact be used to set any other variable
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"If a full path is specified but the file does not exist or cannot be read, "
+"the default is to use <replaceable>TZ=CST6CDT</replaceable>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#: chsh.1.xml:32(term) chfn.1.xml:32(term)
+msgid "<option>LOGIN_STRING</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+#: chsh.1.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"The string used for prompting a password. The default is to use \"Password: "
+"\", or a translation of that string. If you set this variable, the prompt "
+"will not be translated."
+msgstr ""
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+#: chsh.1.xml:39(para) chfn.1.xml:39(para)
+msgid ""
+"If the string contains <replaceable>%s</replaceable>, this will be replaced "
+"by the user's name."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>MAIL_CHECK_ENAB</option> (boolean)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable checking and display of mailbox status upon login."
+msgstr ""
+
+#: su.1.xml:37(para) login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"You should disable it if the shell startup files already check for mail "
+"(\"mailx -e\" or equivalent)."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>QUOTAS_ENAB</option> (boolean)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable setting of resource limits from <filename>/etc/limits</filename> and "
+"ulimit, umask, and niceness from the user's passwd gecos field."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SULOG_FILE</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "If defined, all su activity is logged to this file."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SU_NAME</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"If defined, the command name to display when running \"su -\". For example, "
+"if this is defined as \"su\" then a \"ps\" will display the command is \"-su"
+"\". If not defined, then \"ps\" would display the name of the shell actually "
+"being run, e.g. something like \"-sh\"."
+msgstr ""
+
+#: su.1.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>SU_WHEEL_ONLY</option> (boolean)"
+msgstr ""
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the user must be listed as a member of "
+"the first gid 0 group in <filename>/etc/group</filename> (called "
+"<replaceable>root</replaceable> on most Linux systems) to be able to "
+"<command>su</command> to uid 0 accounts. If the group doesn't exist or is "
+"empty, no one will be able to <command>su</command> to uid 0."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SYSLOG_SU_ENAB</option> (boolean)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"Enable \"syslog\" logging of <command>su</command> activity - in addition to "
+"sulog file logging."
+msgstr ""
+
+#: su.1.xml:391(para)
+msgid ""
+"On success, <command>su</command> returns the exit value of the command it "
+"executed."
+msgstr ""
+
+#: su.1.xml:395(para)
+msgid ""
+"If this command was terminated by a signal, <command>su</command> returns "
+"the number of this signal plus 128."
+msgstr ""
+
+#: su.1.xml:399(para)
+msgid ""
+"If su has to kill the command (because it was asked to terminate, and the "
+"command did not terminate in time), <command>su</command> returns 255."
+msgstr ""
+
+#: su.1.xml:411(para)
+msgid "success (<option>--help</option> only)"
+msgstr ""
+
+#: su.1.xml:417(para)
+msgid "System or authentication failure"
+msgstr ""
+
+#: su.1.xml:421(replaceable)
+msgid "126"
+msgstr ""
+
+#: su.1.xml:423(para)
+msgid "The requested command was not found"
+msgstr ""
+
+#: su.1.xml:427(replaceable)
+msgid "127"
+msgstr ""
+
+#: su.1.xml:429(para)
+msgid "The requested command could not be executed"
+msgstr ""
+
+#: su.1.xml:404(para)
+msgid ""
+"Some exit values from <command>su</command> are independent from the "
+"executed command: <placeholder-1/>"
+msgstr ""
+
+#: su.1.xml:438(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>."
+msgstr ""
+
+#: sg.1.xml:58(refentrytitle) sg.1.xml:65(refname) sg.1.xml:71(command)
+msgid "sg"
+msgstr ""
+
+#: sg.1.xml:66(refpurpose)
+msgid "execute command as different group ID"
+msgstr ""
+
+#: sg.1.xml:74(arg)
+msgid "-c"
+msgstr ""
+
+#: sg.1.xml:73(arg)
+msgid "group <placeholder-1/> command"
+msgstr ""
+
+#: sg.1.xml:82(para)
+msgid ""
+"The <command>sg</command> command works similar to <command>newgrp</command> "
+"but accepts a command. The command will be executed with the <filename>/bin/"
+"sh</filename> shell. With most shells you may run <command>sg</command> "
+"from, you need to enclose multi-word commands in quotes. Another difference "
+"between <command>newgrp</command> and <command>sg</command> is that some "
+"shells treat <command>newgrp</command> specially, replacing themselves with "
+"a new instance of a shell that <command>newgrp</command> creates. This "
+"doesn't happen with <command>sg</command>, so upon exit from a <command>sg</"
+"command> command you are returned to your previous group ID."
+msgstr ""
+
+#: sg.1.xml:32(term) newgrp.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SYSLOG_SG_ENAB</option> (boolean)"
+msgstr ""
+
+#: sg.1.xml:34(para) newgrp.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable \"syslog\" logging of <command>sg</command> activity."
+msgstr ""
+
+#: sg.1.xml:141(para)
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry></phrase>."
+msgstr ""
+
+#: shadow.5.xml:57(refentrytitle) shadow.5.xml:64(refname)
+#: shadow.3.xml:57(refentrytitle) shadow.3.xml:64(refname)
+#: pwck.8.xml:84(replaceable) grpck.8.xml:76(replaceable)
+msgid "shadow"
+msgstr ""
+
+#: shadow.5.xml:65(refpurpose)
+msgid "shadowed password file"
+msgstr ""
+
+#: shadow.5.xml:70(para)
+msgid ""
+"<filename>shadow</filename> is a file which contains the password "
+"information for the system's accounts and optional aging information."
+msgstr ""
+
+#: shadow.5.xml:76(para) gshadow.5.xml:64(para)
+msgid ""
+"This file must not be readable by regular users if password security is to "
+"be maintained."
+msgstr ""
+
+#: shadow.5.xml:81(para)
+msgid ""
+"Each line of this file contains 9 fields, separated by colons (<quote>:</"
+"quote>), in the following order:"
+msgstr ""
+
+#: shadow.5.xml:88(emphasis) passwd.5.xml:78(para)
+msgid "login name"
+msgstr ""
+
+#: shadow.5.xml:90(para)
+msgid "It must be a valid account name, which exist on the system."
+msgstr ""
+
+#: shadow.5.xml:96(emphasis) gshadow.5.xml:83(emphasis)
+msgid "encrypted password"
+msgstr ""
+
+#: shadow.5.xml:98(para)
+msgid ""
+"This field may be empty, in which case no passwords are required to "
+"authenticate as the specified login name. However, some applications which "
+"read the <filename>/etc/shadow</filename> file may decide not to permit any "
+"access at all if the password field is empty."
+msgstr ""
+
+#: shadow.5.xml:105(para) gshadow.5.xml:107(para)
+msgid ""
+"A password field which starts with an exclamation mark means that the "
+"password is locked. The remaining characters on the line represent the "
+"password field before the password was locked."
+msgstr ""
+
+#: shadow.5.xml:111(para) passwd.5.xml:126(para) gshadow.5.xml:85(para)
+msgid ""
+"Refer to <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry> for details on how this string is interpreted."
+msgstr ""
+
+#: shadow.5.xml:116(para) passwd.5.xml:131(para)
+msgid ""
+"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)."
+msgstr ""
+
+#: shadow.5.xml:127(emphasis)
+msgid "date of last password change"
+msgstr ""
+
+#: shadow.5.xml:130(para)
+msgid ""
+"The date of the last password change, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:134(para)
+msgid ""
+"The value 0 has a special meaning, which is that the user should change her "
+"password the next time she will log in the system."
+msgstr ""
+
+#: shadow.5.xml:139(para)
+msgid "An empty field means that password aging features are disabled."
+msgstr ""
+
+#: shadow.5.xml:146(emphasis)
+msgid "minimum password age"
+msgstr ""
+
+#: shadow.5.xml:148(para)
+msgid ""
+"The minimum password age is the number of days the user will have to wait "
+"before she will be allowed to change her password again."
+msgstr ""
+
+#: shadow.5.xml:153(para)
+msgid "An empty field and value 0 mean that there are no minimum password age."
+msgstr ""
+
+#: shadow.5.xml:160(emphasis)
+msgid "maximum password age"
+msgstr ""
+
+#: shadow.5.xml:162(para)
+msgid ""
+"The maximum password age is the number of days after which the user will "
+"have to change her password."
+msgstr ""
+
+#: shadow.5.xml:166(para)
+msgid ""
+"After this number of days is elapsed, the password may still be valid. The "
+"user should be asked to change her password the next time she will log in."
+msgstr ""
+
+#: shadow.5.xml:171(para)
+msgid ""
+"An empty field means that there are no maximum password age, no password "
+"warning period, and no password inactivity period (see below)."
+msgstr ""
+
+#: shadow.5.xml:176(para)
+msgid ""
+"If the maximum password age is lower than the minimum password age, the user "
+"cannot change her password."
+msgstr ""
+
+#: shadow.5.xml:184(emphasis)
+msgid "password warning period"
+msgstr ""
+
+#: shadow.5.xml:187(para)
+msgid ""
+"The number of days before a password is going to expire (see the maximum "
+"password age above) during which the user should be warned."
+msgstr ""
+
+#: shadow.5.xml:192(para)
+msgid ""
+"An empty field and value 0 mean that there are no password warning period."
+msgstr ""
+
+#: shadow.5.xml:200(emphasis)
+msgid "password inactivity period"
+msgstr ""
+
+#: shadow.5.xml:203(para)
+msgid ""
+"The number of days after a password has expired (see the maximum password "
+"age above) during which the password should still be accepted (and the user "
+"should update her password during the next login)."
+msgstr ""
+
+#: shadow.5.xml:209(para)
+msgid ""
+"After expiration of the password and this expiration period is elapsed, no "
+"login is possible using the current user's password. The user should contact "
+"her administrator."
+msgstr ""
+
+#: shadow.5.xml:214(para)
+msgid ""
+"An empty field means that there are no enforcement of an inactivity period."
+msgstr ""
+
+#: shadow.5.xml:222(emphasis)
+msgid "account expiration date"
+msgstr ""
+
+#: shadow.5.xml:225(para)
+msgid ""
+"The date of expiration of the account, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:229(para)
+msgid ""
+"Note that an account expiration differs from a password expiration. In case "
+"of an account expiration, the user shall not be allowed to login. In case of "
+"a password expiration, the user is not allowed to login using her password."
+msgstr ""
+
+#: shadow.5.xml:235(para)
+msgid "An empty field means that the account will never expire."
+msgstr ""
+
+#: shadow.5.xml:238(para)
+msgid ""
+"The value 0 should not be used as it is interpreted as either an account "
+"with no expiration, or as an expiration on Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:246(emphasis)
+msgid "reserved field"
+msgstr ""
+
+#: shadow.5.xml:248(para)
+msgid "This field is reserved for future use."
+msgstr "Dette felt er reserveret for fremtidig brug."
+
+#: shadow.5.xml:270(filename)
+msgid "/etc/shadow-"
+msgstr "/etc/shadow-"
+
+#: shadow.5.xml:272(para)
+msgid "Backup file for /etc/shadow."
+msgstr "Sikkerhedskopi for /etc/shadow."
+
+#: shadow.5.xml:273(para) passwd.5.xml:178(para)
+msgid ""
+"Note that this file is used by the tools of the shadow toolsuite, but not by "
+"all user and password management tools."
+msgstr ""
+"Bemærk at denne fil bruges af værktøjer fra shodows værktøjssæt, men ikke af "
+"alle håndteringsværktøjer for brugere og adgangskoder."
+
+#: shadow.5.xml:284(para)
+msgid ""
+"<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+
+#: shadow.3.xml:59(refmiscinfo)
+msgid "Library Calls"
+msgstr ""
+
+#: shadow.3.xml:65(refname)
+msgid "getspnam"
+msgstr ""
+
+#: shadow.3.xml:66(refpurpose)
+msgid "encrypted password file routines"
+msgstr ""
+
+#: shadow.3.xml:70(title)
+msgid "SYNTAX"
+msgstr "SYNTAKS"
+
+#: shadow.3.xml:72(emphasis)
+msgid "#include &lt;shadow.h&gt;"
+msgstr ""
+
+#: shadow.3.xml:76(emphasis)
+msgid "struct spwd *getspent();"
+msgstr ""
+
+#: shadow.3.xml:80(emphasis)
+msgid "struct spwd *getspnam(char"
+msgstr ""
+
+#: shadow.3.xml:81(emphasis)
+msgid "*name"
+msgstr ""
+
+#: shadow.3.xml:81(emphasis) shadow.3.xml:94(emphasis)
+#: shadow.3.xml:99(emphasis) shadow.3.xml:105(emphasis)
+msgid ");"
+msgstr ""
+
+#: shadow.3.xml:85(emphasis)
+msgid "void setspent();"
+msgstr ""
+
+#: shadow.3.xml:89(emphasis)
+msgid "void endspent();"
+msgstr ""
+
+#: shadow.3.xml:93(emphasis)
+msgid "struct spwd *fgetspent(FILE"
+msgstr ""
+
+#: shadow.3.xml:94(emphasis) shadow.3.xml:105(emphasis)
+msgid "*fp"
+msgstr ""
+
+#: shadow.3.xml:98(emphasis)
+msgid "struct spwd *sgetspent(char"
+msgstr ""
+
+#: shadow.3.xml:99(emphasis)
+msgid "*cp"
+msgstr ""
+
+#: shadow.3.xml:103(emphasis)
+msgid "int putspent(struct spwd"
+msgstr ""
+
+#: shadow.3.xml:104(emphasis)
+msgid "*p,"
+msgstr ""
+
+#: shadow.3.xml:104(emphasis)
+msgid "FILE"
+msgstr ""
+
+#: shadow.3.xml:109(emphasis)
+msgid "int lckpwdf();"
+msgstr ""
+
+#: shadow.3.xml:113(emphasis)
+msgid "int ulckpwdf();"
+msgstr ""
+
+#: shadow.3.xml:119(para)
+msgid ""
+"<emphasis remap=\"I\">shadow</emphasis> manipulates the contents of the "
+"shadow password file, <filename>/etc/shadow</filename>. The structure in the "
+"<emphasis remap=\"I\">#include</emphasis> file is:"
+msgstr ""
+
+#: shadow.3.xml:124(programlisting)
+#, no-wrap
+msgid ""
+"struct spwd {\n"
+" char\t\t*sp_namp; /* user login name */\n"
+" char\t\t*sp_pwdp; /* encrypted password */\n"
+" long int\t\tsp_lstchg; /* last password change */\n"
+" long int\t\tsp_min; /* days until change allowed. */\n"
+" long int\t\tsp_max; /* days before change required */\n"
+" long int\t\tsp_warn; /* days warning for expiration */\n"
+" long int\t\tsp_inact; /* days before account inactive */\n"
+" long int\t\tsp_expire; /* date when account expires */\n"
+" unsigned long int\tsp_flag; /* reserved for future use */\n"
+"}\n"
+" "
+msgstr ""
+
+#: shadow.3.xml:136(para)
+msgid "The meanings of each field are:"
+msgstr ""
+
+#: shadow.3.xml:139(para)
+msgid "sp_namp - pointer to null-terminated user name"
+msgstr ""
+
+#: shadow.3.xml:142(para)
+msgid "sp_pwdp - pointer to null-terminated password"
+msgstr ""
+
+#: shadow.3.xml:145(para)
+msgid "sp_lstchg - days since Jan 1, 1970 password was last changed"
+msgstr ""
+
+#: shadow.3.xml:148(para)
+msgid "sp_min - days before which password may not be changed"
+msgstr "sp_min - antal dage hvor adgangskode ikke må ændres"
+
+#: shadow.3.xml:151(para)
+msgid "sp_max - days after which password must be changed"
+msgstr "sp_max - antal dage hvorefter adgangskode skal ændres"
+
+#: shadow.3.xml:154(para)
+msgid ""
+"sp_warn - days before password is to expire that user is warned of pending "
+"password expiration"
+msgstr ""
+
+#: shadow.3.xml:159(para)
+msgid ""
+"sp_inact - days after password expires that account is considered inactive "
+"and disabled"
+msgstr ""
+
+#: shadow.3.xml:164(para)
+msgid "sp_expire - days since Jan 1, 1970 when account will be disabled"
+msgstr ""
+
+#: shadow.3.xml:167(para)
+msgid "sp_flag - reserved for future use"
+msgstr "sp_flag - reserveret for fremtidig brug"
+
+#: shadow.3.xml:175(para)
+msgid ""
+"<emphasis>getspent</emphasis>, <emphasis>getspname</emphasis>, "
+"<emphasis>fgetspent</emphasis>, and <emphasis>sgetspent</emphasis> each "
+"return a pointer to a <emphasis>struct spwd</emphasis>. <emphasis>getspent</"
+"emphasis> returns the next entry from the file, and <emphasis>fgetspent</"
+"emphasis> returns the next entry from the given stream, which is assumed to "
+"be a file of the proper format. <emphasis>sgetspent</emphasis> returns a "
+"pointer to a <emphasis>struct spwd</emphasis> using the provided string as "
+"input. <emphasis>getspnam</emphasis> searches from the current position in "
+"the file for an entry matching <emphasis>name</emphasis>."
+msgstr ""
+
+#: shadow.3.xml:188(para)
+msgid ""
+"<emphasis>setspent</emphasis> and <emphasis>endspent</emphasis> may be used "
+"to begin and end, respectively, access to the shadow password file."
+msgstr ""
+
+#: shadow.3.xml:194(para)
+msgid ""
+"The <emphasis>lckpwdf</emphasis> and <emphasis>ulckpwdf</emphasis> routines "
+"should be used to insure exclusive access to the <filename>/etc/shadow</"
+"filename> file. <emphasis>lckpwdf</emphasis> attempts to acquire a lock "
+"using <emphasis>pw_lock</emphasis> for up to 15 seconds. It continues by "
+"attempting to acquire a second lock using <emphasis>spw_lock</emphasis> for "
+"the remainder of the initial 15 seconds. Should either attempt fail after a "
+"total of 15 seconds, <emphasis>lckpwdf</emphasis> returns -1. When both "
+"locks are acquired 0 is returned."
+msgstr ""
+
+#: shadow.3.xml:209(para)
+msgid ""
+"Routines return NULL if no more entries are available or if an error occurs "
+"during processing. Routines which have <emphasis>int</emphasis> as the "
+"return value return 0 for success and -1 for failure."
+msgstr ""
+
+#: shadow.3.xml:219(para)
+msgid ""
+"These routines may only be used by the superuser as access to the shadow "
+"password file is restricted."
+msgstr ""
+
+#: shadow.3.xml:239(para)
+msgid ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: pwconv.8.xml:63(refentrytitle) pwconv.8.xml:70(refname)
+#: pwconv.8.xml:79(command) login.defs.5.xml:439(term)
+msgid "pwconv"
+msgstr ""
+
+#: pwconv.8.xml:71(refname) pwconv.8.xml:85(command) login.defs.5.xml:448(term)
+msgid "pwunconv"
+msgstr ""
+
+#: pwconv.8.xml:72(refname) pwconv.8.xml:91(command) login.defs.5.xml:344(term)
+msgid "grpconv"
+msgstr ""
+
+#: pwconv.8.xml:73(refname) pwconv.8.xml:97(command) login.defs.5.xml:350(term)
+msgid "grpunconv"
+msgstr ""
+
+#: pwconv.8.xml:74(refpurpose)
+msgid "convert to and from shadow passwords and groups"
+msgstr ""
+
+#: pwconv.8.xml:106(para)
+msgid ""
+"The <command>pwconv</command> command creates <emphasis remap=\"I\">shadow</"
+"emphasis> from <emphasis remap=\"I\">passwd</emphasis> and an optionally "
+"existing <emphasis remap=\"I\">shadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:111(para)
+msgid ""
+"<command>pwconv</command> does not work with <option>USE_TCB</option> "
+"enabled. To convert to tcb passwords, you should first use <command>pwconv</"
+"command> to convert to shadowed passwords by disabling <option>USE_TCB</"
+"option> in <filename>login.defs</filename> and then convert to tcb password "
+"using <command>tcb_convert</command> (and re-enable <option>USE_TCB</option> "
+"in <filename>login.defs</filename>.)"
+msgstr ""
+
+#: pwconv.8.xml:121(para)
+msgid ""
+"The <command>pwunconv</command> command creates <emphasis remap=\"I"
+"\">passwd</emphasis> from <emphasis remap=\"I\">passwd</emphasis> and "
+"<emphasis remap=\"I\">shadow</emphasis> and then removes <emphasis remap=\"I"
+"\">shadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:127(para)
+msgid ""
+"<command>pwunconv</command> does not work with <option>USE_TCB</option> "
+"enabled. You should first switch back from tcb to shadowed passwords using "
+"<command>tcb_unconvert</command>, and then disable <option>USE_TCB</option> "
+"in <filename>login.defs</filename> before using <command>pwunconv</command>."
+msgstr ""
+
+#: pwconv.8.xml:136(para)
+msgid ""
+"The <command>grpconv</command> command creates <emphasis remap=\"I"
+"\">gshadow</emphasis> from <emphasis remap=\"I\">group</emphasis> and an "
+"optionally existing <emphasis remap=\"I\">gshadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:142(para)
+msgid ""
+"The <command>grpunconv</command> command creates <emphasis remap=\"I"
+"\">group</emphasis> from <emphasis remap=\"I\">group</emphasis> and "
+"<emphasis remap=\"I\">gshadow</emphasis> and then removes <emphasis remap=\"I"
+"\">gshadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:149(para)
+msgid ""
+"These four programs all operate on the normal and shadow password and group "
+"files: <filename>/etc/passwd</filename>, <filename>/etc/group</filename>, "
+"<filename>/etc/shadow</filename>, and <filename>/etc/gshadow</filename>."
+msgstr ""
+
+#: pwconv.8.xml:156(para)
+msgid ""
+"Each program acquires the necessary locks before conversion. "
+"<command>pwconv</command> and <command>grpconv</command> are similar. First, "
+"entries in the shadowed file which don't exist in the main file are removed. "
+"Then, shadowed entries which don't have `x' as the password in the main file "
+"are updated. Any missing shadowed entries are added. Finally, passwords in "
+"the main file are replaced with `x'. These programs can be used for initial "
+"conversion as well to update the shadowed file if the main file is edited by "
+"hand."
+msgstr ""
+
+#: pwconv.8.xml:167(para)
+msgid ""
+"<command>pwconv</command> will use the values of <emphasis remap=\"I"
+"\">PASS_MIN_DAYS</emphasis>, <emphasis remap=\"I\">PASS_MAX_DAYS</emphasis>, "
+"and <emphasis remap=\"I\">PASS_WARN_AGE</emphasis> from <filename>/etc/login."
+"defs</filename> when adding new entries to <filename>/etc/shadow</filename>."
+msgstr ""
+
+#: pwconv.8.xml:176(para)
+msgid ""
+"Likewise <command>pwunconv</command> and <command>grpunconv</command> are "
+"similar. Passwords in the main file are updated from the shadowed file. "
+"Entries which exist in the main file but not in the shadowed file are left "
+"alone. Finally, the shadowed file is removed. Some password aging "
+"information is lost by <command>pwunconv</command>. It will convert what it "
+"can."
+msgstr ""
+
+#: pwconv.8.xml:188(para)
+msgid ""
+"The options which apply to the <command>pwconv</command>, <command>pwunconv</"
+"command>, <command>grpconv</command>, and <command>grpunconv</command> "
+"commands are:"
+msgstr ""
+
+#: pwconv.8.xml:217(para)
+msgid ""
+"Errors in the password or group files (such as invalid or duplicate entries) "
+"may cause these programs to loop forever or fail in other strange ways. "
+"Please run <command>pwck</command> and <command>grpck</command> to correct "
+"any such errors before converting to or from shadow passwords or groups."
+msgstr ""
+
+#: pwconv.8.xml:228(para)
+msgid ""
+"The following configuration variable in <filename>/etc/login.defs</filename> "
+"changes the behavior of <command>grpconv</command> and <command>grpunconv</"
+"command>:"
+msgstr ""
+
+#: pwconv.8.xml:236(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of <command>pwconv</command>:"
+msgstr ""
+
+#: pwconv.8.xml:263(para)
+msgid ""
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry><phrase condition=\"tcb\">, "
+"<citerefentry><refentrytitle>tcb_convert</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>tcb_unconvert</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry></phrase>."
+msgstr ""
+
+#: pwck.8.xml:47(contrib) lastlog.8.xml:43(contrib) grpck.8.xml:42(contrib)
+msgid "Creation, 1992"
+msgstr ""
+
+#: pwck.8.xml:63(refentrytitle) pwck.8.xml:70(refname) pwck.8.xml:76(command)
+#: login.defs.5.xml:430(term)
+msgid "pwck"
+msgstr ""
+
+#: pwck.8.xml:71(refpurpose)
+msgid "verify integrity of password files"
+msgstr ""
+
+#: pwck.8.xml:80(replaceable) passwd.5.xml:57(refentrytitle)
+#: passwd.5.xml:64(refname) passwd.1.xml:64(refentrytitle)
+#: passwd.1.xml:71(refname) passwd.1.xml:77(command) login.defs.5.xml:419(term)
+msgid "passwd"
+msgstr ""
+
+#: pwck.8.xml:93(para)
+msgid ""
+"The <command>pwck</command> command verifies the integrity of the users and "
+"authentication information. It checks that all entries in <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename><phrase condition=\"tcb"
+"\">(or the files in <filename>/etc/tcb</filename>, when <option>USE_TCB</"
+"option> is enabled)</phrase> have the proper format and contain valid data. "
+"The user is prompted to delete entries that are improperly formatted or "
+"which have other uncorrectable errors."
+msgstr ""
+
+#: pwck.8.xml:105(para) grpck.8.xml:94(para)
+msgid "Checks are made to verify that each entry has:"
+msgstr ""
+
+#: pwck.8.xml:108(para) grpck.8.xml:98(para)
+msgid "the correct number of fields"
+msgstr ""
+
+#: pwck.8.xml:111(para)
+msgid "a unique and valid user name"
+msgstr ""
+
+#: pwck.8.xml:114(para)
+msgid "a valid user and group identifier"
+msgstr ""
+
+#: pwck.8.xml:117(para)
+msgid "a valid primary group"
+msgstr ""
+
+#: pwck.8.xml:120(para)
+msgid "a valid home directory"
+msgstr ""
+
+#: pwck.8.xml:123(para)
+msgid "a valid login shell"
+msgstr ""
+
+#: pwck.8.xml:127(para)
+msgid ""
+"<filename>shadow</filename> checks are enabled when a second file parameter "
+"is specified or when <filename>/etc/shadow</filename> exists on the system."
+msgstr ""
+
+#: pwck.8.xml:132(para)
+msgid "These checks are the following:"
+msgstr ""
+
+#: pwck.8.xml:137(para)
+msgid ""
+"every passwd entry has a matching shadow entry, and every shadow entry has a "
+"matching passwd entry"
+msgstr ""
+
+#: pwck.8.xml:143(para)
+msgid "passwords are specified in the shadowed file"
+msgstr ""
+
+#: pwck.8.xml:146(para)
+msgid "shadow entries have the correct number of fields"
+msgstr ""
+
+#: pwck.8.xml:149(para)
+msgid "shadow entries are unique in shadow"
+msgstr ""
+
+#: pwck.8.xml:152(para)
+msgid "the last password changes are not in the future"
+msgstr ""
+
+#: pwck.8.xml:156(para)
+msgid ""
+"The checks for correct number of fields and unique user name are fatal. If "
+"the entry has the wrong number of fields, the user will be prompted to "
+"delete the entire line. If the user does not answer affirmatively, all "
+"further checks are bypassed. An entry with a duplicated user name is "
+"prompted for deletion, but the remaining checks will still be made. All "
+"other errors are warning and the user is encouraged to run the "
+"<command>usermod</command> command to correct the error."
+msgstr ""
+
+#: pwck.8.xml:167(para)
+msgid ""
+"The commands which operate on the <filename>/etc/passwd</filename> file are "
+"not able to alter corrupted or duplicated entries. <command>pwck</command> "
+"should be used in those circumstances to remove the offending entry."
+msgstr ""
+
+#: pwck.8.xml:177(para) grpck.8.xml:148(para)
+msgid ""
+"The <option>-r</option> and <option>-s</option> options cannot be combined."
+msgstr ""
+
+#: pwck.8.xml:181(para)
+msgid "The options which apply to the <command>pwck</command> command are:"
+msgstr ""
+
+#: pwck.8.xml:204(para)
+msgid ""
+"Report errors only. The warnings which do not require any action from the "
+"user won't be displayed."
+msgstr ""
+
+#: pwck.8.xml:211(term) grpck.8.xml:163(term)
+msgid "<option>-r</option>, <option>--read-only</option>"
+msgstr ""
+
+#: pwck.8.xml:213(para)
+msgid "Execute the <command>pwck</command> command in read-only mode."
+msgstr ""
+
+#: pwck.8.xml:231(term) grpck.8.xml:185(term)
+msgid "<option>-s</option>, <option>--sort</option>"
+msgstr ""
+
+#: pwck.8.xml:233(para)
+msgid ""
+"Sort entries in <filename>/etc/passwd</filename> and <filename>/etc/shadow</"
+"filename> by UID."
+msgstr ""
+
+#: pwck.8.xml:237(para)
+msgid "This option has no effect when <option>USE_TCB</option> is enabled."
+msgstr ""
+
+#: pwck.8.xml:244(para)
+msgid ""
+"By default, <command>pwck</command> operates on the files <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename><phrase condition=\"tcb"
+"\"> (or the files in <filename>/etc/tcb</filename>)</phrase>. The user may "
+"select alternate files with the <replaceable>passwd</replaceable> and "
+"<replaceable>shadow</replaceable> parameters."
+msgstr ""
+
+#: pwck.8.xml:253(para)
+msgid ""
+"Note that when <option>USE_TCB</option> is enabled, you cannot specify an "
+"alternative <replaceable>shadow</replaceable> file. In future releases, this "
+"parameter could be replaced by an alternate TCB directory."
+msgstr ""
+
+#: pwck.8.xml:322(para)
+msgid "one or more bad password entries"
+msgstr ""
+
+#: pwck.8.xml:328(para)
+msgid "can't open password files"
+msgstr "kan ikke åbne adgangskodefiler"
+
+#: pwck.8.xml:334(para)
+msgid "can't lock password files"
+msgstr "kan ikke låse adgangskodefiler"
+
+#: pwck.8.xml:340(para)
+msgid "can't update password files"
+msgstr "kan ikke opdatere adgangskodefiler"
+
+#: pwck.8.xml:346(para)
+msgid "can't sort password files"
+msgstr "kan ikke sortere adgangskodefiler"
+
+#: pwck.8.xml:304(para)
+msgid ""
+"The <command>pwck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Kommandoen <command>pwck</command> findes med de følgende værdier: "
+"<placeholder-1/>"
+
+#: pwck.8.xml:355(para)
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+
+#: porttime.5.xml:57(refentrytitle) porttime.5.xml:64(refname)
+msgid "porttime"
+msgstr ""
+
+#: porttime.5.xml:65(refpurpose)
+msgid "port access time file"
+msgstr ""
+
+#: porttime.5.xml:70(para)
+msgid ""
+"<emphasis remap=\"I\">porttime</emphasis> contains a list of tty devices, "
+"user names, and permitted login times."
+msgstr ""
+
+#: porttime.5.xml:75(para)
+msgid ""
+"Each entry consists of three colon separated fields. The first field is a "
+"comma separated list of tty devices, or an asterisk to indicate that all tty "
+"devices are matched by this entry. The second field is a comma separated "
+"list of user names, or an asterisk to indicated that all user names are "
+"matched by this entry. The third field is a comma separated list of "
+"permitted access times."
+msgstr ""
+
+#: porttime.5.xml:84(para)
+msgid ""
+"Each access time entry consists of zero or more days of the week, "
+"abbreviated <emphasis>Su</emphasis>, <emphasis>Mo</emphasis>, <emphasis>Tu</"
+"emphasis>, <emphasis>We</emphasis>, <emphasis>Th</emphasis>, <emphasis>Fr</"
+"emphasis>, and <emphasis>Sa</emphasis>, followed by a pair of times "
+"separated by a hyphen. The abbreviation <emphasis>Wk</emphasis> may be used "
+"to represent Monday thru Friday, and <emphasis>Al</emphasis> may be used to "
+"indicate every day. If no days are given, <emphasis>Al</emphasis> is assumed."
+msgstr ""
+
+#: porttime.5.xml:98(title)
+msgid "EXAMPLES"
+msgstr "EKSEMPLER"
+
+#: porttime.5.xml:99(para)
+msgid ""
+"The following entry allows access to user <emphasis remap=\"B\">jfh</"
+"emphasis> on every port during weekdays from 9am to 5pm."
+msgstr ""
+
+#: porttime.5.xml:105(para)
+msgid "*:jfh:Wk0900-1700"
+msgstr ""
+
+#: porttime.5.xml:107(para)
+msgid ""
+"The following entries allow access only to the users <emphasis>root</"
+"emphasis> and <emphasis>oper</emphasis> on <filename>/dev/console</filename> "
+"at any time. This illustrates how the <filename>/etc/porttime</filename> "
+"file is an ordered list of access times. Any other user would match the "
+"second entry which does not permit access at any time."
+msgstr ""
+
+#: porttime.5.xml:116(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+" console:root,oper:Al0000-2400\n"
+" console:*:\n"
+" "
+msgstr ""
+
+#: porttime.5.xml:121(para)
+msgid ""
+"The following entry allows access for the user <emphasis>games</emphasis> on "
+"any port during non-working hours."
+msgstr ""
+
+#: porttime.5.xml:126(para)
+msgid "*:games:Wk1700-0900,SaSu0000-2400"
+msgstr ""
+
+#: porttime.5.xml:133(filename) logoutd.8.xml:92(filename)
+msgid "/etc/porttime"
+msgstr ""
+
+#: porttime.5.xml:135(para) logoutd.8.xml:94(para)
+msgid "File containing port access."
+msgstr ""
+
+#: porttime.5.xml:143(para) login.access.5.xml:134(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+
+#: passwd.5.xml:65(refpurpose)
+msgid "the password file"
+msgstr ""
+
+#: passwd.5.xml:70(para)
+msgid ""
+"<filename>/etc/passwd</filename> contains one line for each user account, "
+"with seven fields delimited by colons (<quote>:</quote>). These fields are:"
+msgstr ""
+
+#: passwd.5.xml:81(para)
+msgid "optional encrypted password"
+msgstr ""
+
+#: passwd.5.xml:84(para)
+msgid "numerical user ID"
+msgstr ""
+
+#: passwd.5.xml:87(para)
+msgid "numerical group ID"
+msgstr ""
+
+#: passwd.5.xml:90(para)
+msgid "user name or comment field"
+msgstr ""
+
+#: passwd.5.xml:93(para)
+msgid "user home directory"
+msgstr ""
+
+#: passwd.5.xml:96(para)
+msgid "optional user command interpreter"
+msgstr ""
+
+#: passwd.5.xml:100(para)
+msgid ""
+"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."
+msgstr ""
+
+#: passwd.5.xml:109(para)
+msgid ""
+"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."
+msgstr ""
+
+#: passwd.5.xml:118(para)
+msgid ""
+"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."
+msgstr ""
+
+#: passwd.5.xml:138(para)
+msgid ""
+"The comment field is used by various system utilities, such as "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+
+#: passwd.5.xml:144(para)
+msgid ""
+"The home directory field provides the name of the initial working directory. "
+"The <command>login</command> program uses this information to set the value "
+"of the <envar>$HOME</envar> environmental variable."
+msgstr ""
+
+#: passwd.5.xml:150(para)
+msgid ""
+"The command interpreter field provides the name of the user's command "
+"language interpreter, or the name of the initial program to execute. The "
+"<command>login</command> program uses this information to set the value of "
+"the <envar>$SHELL</envar> environmental variable. If this field is empty, it "
+"defaults to the value <filename>/bin/sh</filename>."
+msgstr ""
+
+#: passwd.5.xml:171(para)
+msgid "optional encrypted password file"
+msgstr ""
+
+#: passwd.5.xml:175(filename)
+msgid "/etc/passwd-"
+msgstr ""
+
+#: passwd.5.xml:177(para)
+msgid "Backup file for /etc/passwd."
+msgstr ""
+
+#: passwd.5.xml:189(para)
+msgid ""
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getent</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getpwnam</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwunconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: passwd.1.xml:72(refpurpose)
+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 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)
+msgid "Password Changes"
+msgstr ""
+
+#: passwd.1.xml:99(para)
+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)
+msgid ""
+"After the password has been entered, password aging information is checked "
+"to see if the user is permitted to change the password at this time. If not, "
+"<command>passwd</command> refuses to change the password and exits."
+msgstr ""
+
+#: passwd.1.xml:114(para)
+msgid ""
+"The user is then prompted twice for a replacement password. The second entry "
+"is compared against the first and both are required to match in order for "
+"the password to be changed."
+msgstr ""
+
+#: passwd.1.xml:120(para)
+msgid ""
+"Then, the password is tested for complexity. As a general guideline, "
+"passwords should consist of 6 to 8 characters including one or more "
+"characters from each of the following sets:"
+msgstr ""
+
+#: passwd.1.xml:128(para)
+msgid "lower case alphabetics"
+msgstr ""
+
+#: passwd.1.xml:131(para)
+msgid "digits 0 thru 9"
+msgstr ""
+
+#: passwd.1.xml:134(para)
+msgid "punctuation marks"
+msgstr ""
+
+#: passwd.1.xml:138(para)
+msgid ""
+"Care must be taken not to include the system default erase or kill "
+"characters. <command>passwd</command> will reject any password which is not "
+"suitably complex."
+msgstr ""
+
+#: passwd.1.xml:147(title)
+msgid "Hints for user passwords"
+msgstr ""
+
+#: passwd.1.xml:148(para)
+msgid ""
+"The security of a password depends upon the strength of the encryption "
+"algorithm and the size of the key space. The legacy <emphasis>UNIX</"
+"emphasis> System encryption method is based on the NBS DES algorithm. More "
+"recent methods are now recommended (see <option>ENCRYPT_METHOD</option>). "
+"The size of the key space depends upon the randomness of the password which "
+"is selected."
+msgstr ""
+
+#: passwd.1.xml:157(para)
+msgid ""
+"Compromises in password security normally result from careless password "
+"selection or handling. For this reason, you should not select a password "
+"which appears in a dictionary or which must be written down. The password "
+"should also not be a proper name, your license number, birth date, or street "
+"address. Any of these may be used as guesses to violate system security."
+msgstr ""
+
+#: passwd.1.xml:166(para)
+#, fuzzy
+#| msgid ""
+#| "You can find advices on how to choose a strong password on http://en."
+#| "wikipedia.org/wiki/Password_strength"
+msgid ""
+"You can find advice on how to choose a strong password on http://en."
+"wikipedia.org/wiki/Password_strength"
+msgstr ""
+"Du kan finde råd om hvordan du vælger en god adgangskode på http://en."
+"wikipedia.org/wiki/Password_strength"
+
+#: passwd.1.xml:175(para)
+msgid "The options which apply to the <command>passwd</command> command are:"
+msgstr "Tilvalgene som gælder for kommandoen <command>passwd</command> er:"
+
+#: passwd.1.xml:180(term) faillog.8.xml:96(term)
+msgid "<option>-a</option>, <option>--all</option>"
+msgstr "<option>-a</option>, <option>--all</option>"
+
+#: passwd.1.xml:184(para)
+msgid ""
+"This option can be used only with <option>-S</option> and causes show status "
+"for all users."
+msgstr ""
+"Dette tilvalg kan kun bruges med <option>-S</option> medfører vis status for "
+"alle brugere."
+
+#: passwd.1.xml:191(term)
+msgid "<option>-d</option>, <option>--delete</option>"
+msgstr "<option>-d</option>, <option>--delete</option>"
+
+#: passwd.1.xml:195(para)
+msgid ""
+"Delete a user's password (make it empty). This is a quick way to disable a "
+"password for an account. It will set the named account passwordless."
+msgstr ""
+"Slet en brugers adgangskode (gør den tom). Dette er en hurtig måde at "
+"deaktivere en adgangskode for en konto. Den vil sætte den navngivne konto "
+"uden adgangskode."
+
+#: passwd.1.xml:203(term)
+msgid "<option>-e</option>, <option>--expire</option>"
+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 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."
+
+#: passwd.1.xml:220(term)
+msgid ""
+"<option>-i</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-i</option>, <option>--inactive</option>&nbsp;<replaceable>INAKTIV</"
+"replaceable>"
+
+#: passwd.1.xml:224(para)
+msgid ""
+"This option is used to disable an account after the password has been "
+"expired for a number of days. After a user account has had an expired "
+"password for <replaceable>INACTIVE</replaceable> days, the user may no "
+"longer sign on to the account."
+msgstr ""
+"Denne indstilling bruges til at deaktivere en konto efter at adgangskoden er "
+"udløbet i et antal dage. Efter at en brugerkonto har haft en udløbet "
+"adgangskode for <replaceable>INAKTIV</replaceable> dage, kan brugeren ikke "
+"længere logge ind på kontoen."
+
+#: passwd.1.xml:233(term)
+msgid "<option>-k</option>, <option>--keep-tokens</option>"
+msgstr "<option>-k</option>, <option>--keep-tokens</option>"
+
+#: passwd.1.xml:237(para)
+msgid ""
+"Indicate password change should be performed only for expired authentication "
+"tokens (passwords). The user wishes to keep their non-expired tokens as "
+"before."
+msgstr ""
+
+#: passwd.1.xml:245(term)
+msgid "<option>-l</option>, <option>--lock</option>"
+msgstr ""
+
+#: passwd.1.xml:249(para)
+msgid ""
+"Lock the password of the named account. This option disables a password by "
+"changing it to a value which matches no possible encrypted value (it adds a "
+"´!´ at the beginning of the password)."
+msgstr ""
+
+#: passwd.1.xml:255(para)
+msgid ""
+"Note that this does not disable the account. The user may still be able to "
+"login using another authentication token (e.g. an SSH key). To disable the "
+"account, administrators should use <command>usermod --expiredate 1</command> "
+"(this set the account's expire date to Jan 2, 1970)."
+msgstr ""
+
+#: passwd.1.xml:262(para)
+msgid "Users with a locked password are not allowed to change their password."
+msgstr ""
+
+#: passwd.1.xml:269(term)
+msgid ""
+"<option>-n</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+
+#: passwd.1.xml:273(para) chage.1.xml:174(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 their password at any time."
+msgstr ""
+
+#: passwd.1.xml:291(term)
+msgid ""
+"<option>-r</option>, <option>--repository</option>&nbsp;"
+"<replaceable>REPOSITORY</replaceable>"
+msgstr ""
+
+#: passwd.1.xml:295(para)
+msgid "change password in <replaceable>REPOSITORY</replaceable> repository"
+msgstr ""
+
+#: passwd.1.xml:313(term)
+msgid "<option>-S</option>, <option>--status</option>"
+msgstr ""
+
+#: passwd.1.xml:317(para)
+msgid ""
+"Display account status information. The status information consists of 7 "
+"fields. The first field is the user's login name. The second field indicates "
+"if the user account has a locked password (L), has no password (NP), or has "
+"a usable password (P). The third field gives the date of the last password "
+"change. The next four fields are the minimum age, maximum age, warning "
+"period, and inactivity period for the password. These ages are expressed in "
+"days."
+msgstr ""
+
+#: passwd.1.xml:331(term)
+msgid "<option>-u</option>, <option>--unlock</option>"
+msgstr ""
+
+#: passwd.1.xml:335(para)
+msgid ""
+"Unlock the password of the named account. This option re-enables a password "
+"by changing the password back to its previous value (to the value before "
+"using the <option>-l</option> option)."
+msgstr ""
+
+#: passwd.1.xml:344(term)
+msgid ""
+"<option>-w</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>WARN_DAYS</replaceable>"
+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 their password is "
+"about to expire."
+msgstr ""
+
+#: passwd.1.xml:357(term)
+msgid ""
+"<option>-x</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+
+#: passwd.1.xml:361(para)
+msgid ""
+"Set the maximum number of days a password remains valid. After "
+"<replaceable>MAX_DAYS</replaceable>, the password is required to be changed."
+msgstr ""
+
+#: passwd.1.xml:366(para) chage.1.xml:195(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as "
+"<replaceable>MAX_DAYS</replaceable> will remove checking a password's "
+"validity."
+msgstr ""
+
+#: passwd.1.xml:378(para)
+msgid ""
+"Password complexity checking may vary from site to site. The user is urged "
+"to select a password as complex as he or she feels comfortable with."
+msgstr ""
+
+#: passwd.1.xml:383(para)
+msgid ""
+"Users may not be able to change their password on a system if NIS is enabled "
+"and they are not logged into the NIS server."
+msgstr ""
+
+#: passwd.1.xml:388(para)
+msgid ""
+"<command>passwd</command> uses PAM to authenticate users and to change their "
+"passwords."
+msgstr ""
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>ENCRYPT_METHOD</option> (string)"
+msgstr ""
+
+#: passwd.1.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: gpasswd.1.xml:32(para) chpasswd.8.xml:32(para) chgpasswd.8.xml:32(para)
+msgid ""
+"This defines the system default encryption algorithm for encrypting "
+"passwords (if no algorithm are specified on the command line)."
+msgstr ""
+
+#: passwd.1.xml:36(para) newusers.8.xml:36(para) login.defs.5.xml:36(para)
+#: gpasswd.1.xml:36(para) chpasswd.8.xml:36(para) chgpasswd.8.xml:36(para)
+msgid ""
+"It can take one of these values: <replaceable>DES</replaceable> (default), "
+"<replaceable>MD5</replaceable><phrase condition=\"sha_crypt\">, "
+"<replaceable>SHA256</replaceable>, <replaceable>SHA512</replaceable></"
+"phrase>."
+msgstr ""
+
+#: passwd.1.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: gpasswd.1.xml:43(para) chpasswd.8.xml:43(para) chgpasswd.8.xml:43(para)
+msgid ""
+"Note: this parameter overrides the <option>MD5_CRYPT_ENAB</option> variable."
+msgstr ""
+
+#: passwd.1.xml:47(para) passwd.1.xml:53(para) passwd.1.xml:62(para)
+#: newusers.8.xml:47(para) newusers.8.xml:53(para) newusers.8.xml:62(para)
+#: login.defs.5.xml:47(para) login.defs.5.xml:53(para)
+#: login.defs.5.xml:62(para) gpasswd.1.xml:47(para) gpasswd.1.xml:53(para)
+#: gpasswd.1.xml:62(para) chpasswd.8.xml:47(para) chpasswd.8.xml:53(para)
+#: chpasswd.8.xml:62(para) chgpasswd.8.xml:47(para) chgpasswd.8.xml:53(para)
+#: chgpasswd.8.xml:62(para)
+msgid ""
+"Note: This only affect the generation of group passwords. The generation of "
+"user passwords is done by PAM and subject to the PAM configuration. It is "
+"recommended to set this variable consistently with the PAM configuration."
+msgstr ""
+
+#: passwd.1.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: gpasswd.1.xml:32(term) chpasswd.8.xml:32(term) chgpasswd.8.xml:32(term)
+msgid "<option>MD5_CRYPT_ENAB</option> (boolean)"
+msgstr ""
+
+#: passwd.1.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: gpasswd.1.xml:34(para) chpasswd.8.xml:34(para) chgpasswd.8.xml:34(para)
+msgid ""
+"Indicate if passwords must be encrypted using the MD5-based algorithm. If "
+"set to <replaceable>yes</replaceable>, new passwords will be encrypted using "
+"the MD5-based algorithm compatible with the one used by recent releases of "
+"FreeBSD. It supports passwords of unlimited length and longer salt strings. "
+"Set to <replaceable>no</replaceable> if you need to copy encrypted passwords "
+"to other systems which don't understand the new algorithm. Default is "
+"<replaceable>no</replaceable>."
+msgstr ""
+
+#: passwd.1.xml:44(para) newusers.8.xml:44(para) login.defs.5.xml:44(para)
+#: gpasswd.1.xml:44(para) chpasswd.8.xml:44(para) chgpasswd.8.xml:44(para)
+msgid ""
+"This variable is superseded by the <option>ENCRYPT_METHOD</option> variable "
+"or by any command line option used to configure the encryption algorithm."
+msgstr ""
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid ""
+"This variable is deprecated. You should use <option>ENCRYPT_METHOD</option>."
+msgstr ""
+"Denne variabel er forældet, du skal bruge <option>ENCRYPT_METHOD</option>."
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>OBSCURE_CHECKS_ENAB</option> (boolean)"
+msgstr "<option>OBSCURE_CHECKS_ENAB</option> (boolesk)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable additional checks upon password changes."
+msgstr "Aktiver yderligere kontroller før ændringer af adgangskode."
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_ALWAYS_WARN</option> (boolean)"
+msgstr "<option>PASS_ALWAYS_WARN</option> (boolesk)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Warn about weak passwords (but still allow them) if you are root."
+msgstr ""
+"Advar om svage adgangskoder (men tillad dem stadig) hvis du er administrator "
+"(root)."
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_CHANGE_TRIES</option> (number)"
+msgstr "<option>PASS_CHANGE_TRIES</option> (antal)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Maximum number of attempts to change password if rejected (too easy)."
+msgstr "Maksimalt antal forsøg at ændre adgangskode hvis afvist (for nemt)."
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_MAX_LEN</option> (number)"
+msgstr "<option>PASS_MAX_LEN</option> (antal)"
+
+#: passwd.1.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>PASS_MIN_LEN</option> (number)"
+msgstr "<option>PASS_MIN_LEN</option> (antal)"
+
+#: passwd.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"Number of significant characters in the password for crypt(). "
+"<option>PASS_MAX_LEN</option> is 8 by default. Don't change unless your "
+"crypt() is better. This is ignored if <option>MD5_CRYPT_ENAB</option> set to "
+"<replaceable>yes</replaceable>."
+msgstr ""
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>SHA_CRYPT_MIN_ROUNDS</option> (number)"
+msgstr "<option>SHA_CRYPT_MIN_ROUNDS</option> (antal)"
+
+#: passwd.1.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: gpasswd.1.xml:31(term) chpasswd.8.xml:31(term) chgpasswd.8.xml:31(term)
+msgid "<option>SHA_CRYPT_MAX_ROUNDS</option> (number)"
+msgstr ""
+
+#: passwd.1.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: gpasswd.1.xml:33(para) chpasswd.8.xml:33(para) chgpasswd.8.xml:33(para)
+msgid ""
+"When <option>ENCRYPT_METHOD</option> is set to <replaceable>SHA256</"
+"replaceable> or <replaceable>SHA512</replaceable>, this defines the number "
+"of SHA rounds used by the encryption algorithm by default (when the number "
+"of rounds is not specified on the command line)."
+msgstr ""
+
+#: passwd.1.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: gpasswd.1.xml:40(para) chpasswd.8.xml:40(para) chgpasswd.8.xml:40(para)
+msgid ""
+"With a lot of rounds, it is more difficult to brute forcing the password. "
+"But note also that more CPU resources will be needed to authenticate users."
+msgstr ""
+
+#: passwd.1.xml:45(para) newusers.8.xml:45(para) login.defs.5.xml:45(para)
+#: gpasswd.1.xml:45(para) chpasswd.8.xml:45(para) chgpasswd.8.xml:45(para)
+msgid ""
+"If not specified, the libc will choose the default number of rounds (5000)."
+msgstr ""
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid "The values must be inside the 1000-999,999,999 range."
+msgstr ""
+
+#: passwd.1.xml:52(para) newusers.8.xml:52(para) login.defs.5.xml:52(para)
+#: gpasswd.1.xml:52(para) chpasswd.8.xml:52(para) chgpasswd.8.xml:52(para)
+msgid ""
+"If only one of the <option>SHA_CRYPT_MIN_ROUNDS</option> or "
+"<option>SHA_CRYPT_MAX_ROUNDS</option> values is set, then this value will be "
+"used."
+msgstr ""
+
+#: passwd.1.xml:57(para) newusers.8.xml:57(para) login.defs.5.xml:57(para)
+#: gpasswd.1.xml:57(para) chpasswd.8.xml:57(para) chgpasswd.8.xml:57(para)
+msgid ""
+"If <option>SHA_CRYPT_MIN_ROUNDS</option> &gt; <option>SHA_CRYPT_MAX_ROUNDS</"
+"option>, the highest value will be used."
+msgstr ""
+
+#: passwd.1.xml:434(filename)
+msgid "/etc/pam.d/passwd"
+msgstr ""
+
+#: passwd.1.xml:436(para)
+msgid "PAM configuration for <command>passwd</command>."
+msgstr "PAM-konfiguration for <command>passwd</command>."
+
+#: passwd.1.xml:456(para) chage.1.xml:297(para)
+msgid "permission denied"
+msgstr "tilladelse nægtet"
+
+#: passwd.1.xml:462(para)
+msgid "invalid combination of options"
+msgstr "Ugyldig kombination af tilvalg"
+
+#: passwd.1.xml:468(para)
+msgid "unexpected failure, nothing done"
+msgstr "uventet fejl, intet udført"
+
+#: passwd.1.xml:474(para)
+msgid "unexpected failure, <filename>passwd</filename> file missing"
+msgstr "uventet fejl, <filename>passwd</filename>-filen mangler"
+
+#: passwd.1.xml:480(para)
+msgid "<filename>passwd</filename> file busy, try again"
+msgstr "<filename>passwd</filename>-filen er optaget, forsøg igen"
+
+#: passwd.1.xml:444(para)
+msgid ""
+"The <command>passwd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Kommandoen <command>passwd</command> afsluttedes med de følgende værdier: "
+"<placeholder-1/>"
+
+#: passwd.1.xml:495(para)
+msgid ""
+"<citerefentry><refentrytitle>chpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <phrase condition=\"no_pam"
+"\"><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: nologin.8.xml:46(refentrytitle) nologin.8.xml:53(refname)
+#: nologin.8.xml:59(command)
+msgid "nologin"
+msgstr ""
+
+#: nologin.8.xml:54(refpurpose)
+msgid "politely refuse a login"
+msgstr "nægt venligt et logind"
+
+#: nologin.8.xml:65(para)
+msgid ""
+"The <command>nologin</command> command displays a message that an account is "
+"not available and exits non-zero. It is intended as a replacement shell "
+"field for accounts that have been disabled."
+msgstr ""
+
+#: nologin.8.xml:70(para)
+msgid ""
+"To disable all logins, investigate <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: nologin.8.xml:75(para)
+msgid ""
+"If <command>SSH_ORIGINAL_COMMAND</command> is populated it will be logged."
+msgstr ""
+
+#: nologin.8.xml:82(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: nologin.8.xml:93(title)
+msgid "HISTORY"
+msgstr "HISTORIK"
+
+#: nologin.8.xml:94(para)
+#, fuzzy
+#| msgid "The <command>nologin</command> command appearred in BSD 4.4."
+msgid "The <command>nologin</command> command appeared in BSD 4.4."
+msgstr "Kommandoen <command>nologin</command> fremkom i BSD 4.4."
+
+#: newusers.8.xml:73(refentrytitle) newusers.8.xml:80(refname)
+#: newusers.8.xml:86(command) login.defs.5.xml:400(term)
+msgid "newusers"
+msgstr "newusers"
+
+#: newusers.8.xml:81(refpurpose)
+msgid "update and create new users in batch"
+msgstr "opdater og opret nye brugere i et job"
+
+#: newusers.8.xml:91(replaceable)
+msgid "file"
+msgstr "fil"
+
+#: newusers.8.xml:98(para)
+msgid ""
+"The <command>newusers</command> command reads a <replaceable>file</"
+"replaceable> (or the standard input by default) and uses this information to "
+"update a set of existing users or to create new users. Each line is in the "
+"same format as the standard password file (see "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>) with the exceptions explained below:"
+msgstr ""
+
+#: newusers.8.xml:106(para)
+msgid "pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell"
+msgstr ""
+
+#: newusers.8.xml:111(emphasis)
+msgid "pw_name"
+msgstr ""
+
+#: newusers.8.xml:114(para)
+msgid "This is the name of the user."
+msgstr "Dette er navnet på brugeren."
+
+#: newusers.8.xml:117(para)
+#, fuzzy
+#| msgid ""
+#| "If this field contains the name of an existing user (or the name of an "
+#| "user created before by <command>newusers</command>), the UID of the "
+#| "specified user will be used."
+msgid ""
+"It can be the name of a new user or the name of an existing user (or a user "
+"created before by <command>newusers</command>). In case of an existing user, "
+"the user's information will be changed, otherwise a new user will be created."
+msgstr ""
+"Hvis dette felt indeholder navnet på en eksisterende bruger (eller navnet på "
+"en bruger oprettet før af <command>newusers</command>), så vil UID'en for "
+"den angivne bruger blive brugt."
+
+#: newusers.8.xml:128(emphasis)
+msgid "pw_passwd"
+msgstr ""
+
+#: newusers.8.xml:131(para)
+msgid ""
+"This field will be encrypted and used as the new value of the encrypted "
+"password."
+msgstr ""
+"Dette felt vil være krypteret og brugt som den nye værdi for den krypterede "
+"adgangskode."
+
+#: newusers.8.xml:139(emphasis)
+msgid "pw_uid"
+msgstr ""
+
+#: newusers.8.xml:142(para)
+msgid "This field is used to define the UID of the user."
+msgstr "Dette flet bruges til at definere UID for brugeren."
+
+#: newusers.8.xml:145(para)
+#, fuzzy
+#| msgid ""
+#| "If the field is empty, an new (unused) UID will be defined automatically "
+#| "by <command>newusers</command>."
+msgid ""
+"If the field is empty, a new (unused) UID will be defined automatically by "
+"<command>newusers</command>."
+msgstr ""
+"Hvis feltet er tomt, vil en ny (ubrugt) UID blive defineret automatisk af "
+"<command>newusers</command>."
+
+#: newusers.8.xml:149(para)
+msgid "If this field contains a number, this number will be used as the UID."
+msgstr ""
+"Hvis dette felt indeholer et tal, så vil dette tal blive brugt som UID'en."
+
+#: newusers.8.xml:153(para)
+#, fuzzy
+#| msgid ""
+#| "If this field contains the name of an existing user (or the name of an "
+#| "user created before by <command>newusers</command>), the UID of the "
+#| "specified user will be used."
+msgid ""
+"If this field contains the name of an existing user (or the name of a user "
+"created before by <command>newusers</command>), the UID of the specified "
+"user will be used."
+msgstr ""
+"Hvis dette felt indeholder navnet på en eksisterende bruger (eller navnet på "
+"en bruger oprettet før af <command>newusers</command>), så vil UID'en for "
+"den angivne bruger blive brugt."
+
+#: newusers.8.xml:159(para)
+msgid ""
+"If the UID of an existing user is changed, the files ownership of the user's "
+"file should be fixed manually."
+msgstr ""
+"Hvis UID'en for en eksisterende bruger har ændret sig, så skal filens "
+"ejerskab for brugerens fil rettes manuelt."
+
+#: newusers.8.xml:167(emphasis)
+msgid "pw_gid"
+msgstr ""
+
+#: newusers.8.xml:170(para)
+msgid "This field is used to define the primary group ID for the user."
+msgstr "Dette felt bruges til at definere det primære gruppe-id for brugeren."
+
+#: newusers.8.xml:173(para)
+msgid ""
+"If this field contains the name of an existing group (or a group created "
+"before by <command>newusers</command>), the GID of this group will be used "
+"as the primary group ID for the user."
+msgstr ""
+
+#: newusers.8.xml:179(para)
+msgid ""
+"If this field is a number, this number will be used as the primary group ID "
+"of the user. If no groups exist with this GID, a new group will be created "
+"with this GID, and the name of the user."
+msgstr ""
+
+#: newusers.8.xml:185(para)
+msgid ""
+"If this field is empty, a new group will be created with the name of the "
+"user and a GID will be automatically defined by <command>newusers</command> "
+"to be used as the primary group ID for the user and as the GID for the new "
+"group."
+msgstr ""
+
+#: newusers.8.xml:191(para)
+msgid ""
+"If this field contains the name of a group which does not exist (and was not "
+"created before by <command>newusers</command>), a new group will be created "
+"with the specified name and a GID will be automatically defined by "
+"<command>newusers</command> to be used as the primary group ID for the user "
+"and GID for the new group."
+msgstr ""
+
+#: newusers.8.xml:203(emphasis)
+msgid "pw_gecos"
+msgstr ""
+
+#: newusers.8.xml:206(para)
+msgid "This field is copied in the GECOS field of the user."
+msgstr "Dette felt er kopieret i GECOS-feltet for brugeren."
+
+#: newusers.8.xml:213(emphasis)
+msgid "pw_dir"
+msgstr ""
+
+#: newusers.8.xml:216(para)
+msgid "This field is used to define the home directory of the user."
+msgstr "Dette felt bruges til at definere hjemmemappen for brugeren."
+
+#: newusers.8.xml:219(para)
+msgid ""
+"If this field does not specify an existing directory, the specified "
+"directory is created, with ownership set to the user being created or "
+"updated and its primary group."
+msgstr ""
+"Hvis feltet ikke angiver en eksisterende mappe, så oprettes den angiven "
+"mappe, med ejerskab angivet for brugeren der oprettes elelr opdateres og "
+"dennes primære gruppe."
+
+#: newusers.8.xml:224(para)
+msgid ""
+"If the home directory of an existing user is changed, <command>newusers</"
+"command> does not move or copy the content of the old directory to the new "
+"location. This should be done manually."
+msgstr ""
+"Hvis hjemmemappen for en eksisterende bruger ændres så flytter eller "
+"kopierer <command>newusers</command> ikke indholdet fra den gamle mappe til "
+"den nye placering. Dette ksal gøres manuelt."
+
+#: newusers.8.xml:234(emphasis)
+msgid "pw_shell"
+msgstr ""
+
+#: newusers.8.xml:237(para)
+msgid ""
+"This field defines the shell of the user. No checks are performed on this "
+"field."
+msgstr ""
+"Dette felt definerer brugerens skal. Ingen kontrollerer udføres på dette "
+"felt."
+
+#: newusers.8.xml:245(para)
+msgid ""
+"<command>newusers</command> first tries to create or change all the "
+"specified users, and then write these changes to the user or group "
+"databases. If an error occurs (except in the final writes to the databases), "
+"no changes are committed to the databases."
+msgstr ""
+
+#: newusers.8.xml:251(para)
+msgid ""
+"During this first pass, users are created with a locked password (and "
+"passwords are not changed for the users which are not created). A second "
+"pass is used to update the passwords using PAM. Failures to update a "
+"password are reported, but will not stop the other password updates."
+msgstr ""
+
+#: newusers.8.xml:259(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are updated at a single time."
+msgstr ""
+"Denne kommando skal bruges i store systemmiljøer hvor mange kontoer "
+"opdateres på en gang."
+
+#: newusers.8.xml:267(para)
+msgid "The options which apply to the <command>newusers</command> command are:"
+msgstr "Tilvalgene som gælder for kommandoen <command>newusers</command> er:"
+
+#: newusers.8.xml:284(term) chgpasswd.8.xml:112(term)
+msgid "<option>-c</option>, <option>--crypt-method</option>"
+msgstr "<option>-c</option>, <option>--crypt-method</option>"
+
+#: newusers.8.xml:286(para) chpasswd.8.xml:141(para) chgpasswd.8.xml:114(para)
+msgid "Use the specified method to encrypt the passwords."
+msgstr "Brug den angivne metode til at kryptere adgangskoderne."
+
+#: newusers.8.xml:287(para) chpasswd.8.xml:145(para) chgpasswd.8.xml:118(para)
+msgid ""
+"The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc "
+"support these methods."
+msgstr ""
+"De tilgængelige metoder er DES, Md5, NONE og SHA256 eller SHA512 hvis din "
+"libc understøtter disse metoder."
+
+#: newusers.8.xml:309(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are chosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+"Systembrugere vil blive oprettet uden aldersinformation i <filename>/etc/"
+"shadow</filename>, og deres numeriske identifikatører vælges i intervallet "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option>, defineret i "
+"<filename>login.defs</filename>, i stedet for <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (og deres <option>GID</option>-modparte for "
+"oprettelsen af grupper.)."
+
+#: newusers.8.xml:335(term) chgpasswd.8.xml:158(term)
+msgid "<option>-s</option>, <option>--sha-rounds</option>"
+msgstr "<option>-s</option>, <option>--sha-rounds</option>"
+
+#: newusers.8.xml:337(para) chpasswd.8.xml:204(para) chgpasswd.8.xml:160(para)
+msgid "Use the specified number of rounds to encrypt the passwords."
+msgstr "Brug det angivet antal rundet til at kryhptere adgangskoderne."
+
+#: newusers.8.xml:340(para) chpasswd.8.xml:207(para) chgpasswd.8.xml:163(para)
+msgid ""
+"The value 0 means that the system will choose the default number of rounds "
+"for the crypt method (5000)."
+msgstr ""
+"Værdien 0 betyder at systemet vil vælge antallet af standardrunder for "
+"krypteringsmetoden (5000)."
+
+#: newusers.8.xml:344(para) chpasswd.8.xml:211(para) chgpasswd.8.xml:167(para)
+msgid ""
+"A minimal value of 1000 and a maximal value of 999,999,999 will be enforced."
+msgstr ""
+"En minimusværdi på 1000 og en maksimumsværdi på 999.999.999 vil blive "
+"påtvunget."
+
+#: newusers.8.xml:348(para) chpasswd.8.xml:215(para) chgpasswd.8.xml:171(para)
+msgid "You can only use this option with the SHA256 or SHA512 crypt method."
+msgstr ""
+"Du kan kun bruge dette tilvalg med SHA256- eller SHA512-krypteringsmetoden."
+
+#: newusers.8.xml:352(para) chgpasswd.8.xml:175(para)
+msgid ""
+"By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and "
+"SHA_CRYPT_MAX_ROUNDS variables in <filename>/etc/login.defs</filename>."
+msgstr ""
+"Som standard er antallet af runder defineret af variablerne "
+"SHA_CRYPT_MIN_ROUNDS og SHA_CRYPT_MAX_ROUNDS i <filename>/etc/login.defs</"
+"filename>."
+
+#: newusers.8.xml:364(para)
+msgid ""
+"The input file must be protected since it contains unencrypted passwords."
+msgstr ""
+"Inddatafilen skal beskyttes da den indeholder adgangskoder der ikke er "
+"krypteret."
+
+#: newusers.8.xml:368(para) chgpasswd.8.xml:191(para)
+msgid ""
+"You should make sure the passwords and the encryption method respect the "
+"system's password policy."
+msgstr ""
+"Du skal sikre dig at adgangskoderne og krypteringsmetoden respekterer "
+"systemets adgangskodepolitik."
+
+#: newusers.8.xml:444(filename)
+msgid "/etc/pam.d/newusers"
+msgstr "/etc/pam.d/newusers"
+
+#: newusers.8.xml:446(para)
+msgid "PAM configuration for <command>newusers</command>."
+msgstr "PAM-konfiguration for <command>newusers</command>."
+
+#: newusers.8.xml:466(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry><citerefentry condition=\"tcb"
+#| "\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+#| "condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, <phrase condition="
+"\"subids\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gruppe</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry condition=\"tcb"
+"\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+"condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: newgrp.1.xml:58(refentrytitle) newgrp.1.xml:65(refname)
+#: newgrp.1.xml:71(command)
+msgid "newgrp"
+msgstr ""
+
+#: newgrp.1.xml:66(refpurpose)
+msgid "log in to a new group"
+msgstr "log ind på en ny gruppe"
+
+#: newgrp.1.xml:72(replaceable) grpck.8.xml:74(replaceable)
+#: groupadd.8.xml:78(replaceable) gpasswd.1.xml:88(replaceable)
+msgid "group"
+msgstr ""
+
+#: newgrp.1.xml:78(para)
+msgid ""
+"The <command>newgrp</command> command is used to change the current group ID "
+"during a login session. If the optional <option>-</option> flag is given, "
+"the user's environment will be reinitialized as though the user had logged "
+"in, otherwise the current environment, including current working directory, "
+"remains unchanged."
+msgstr ""
+"Kommandoen <command>newgrp</command> bruges til at ændre den aktuelle grupp-"
+"id under en logindsession. Hvis det valgfrie flag <option>-</option> er "
+"angivet, så vil brugerens miljø blive geninitialiseres som om at brugeren "
+"havde logget ind, ellers bevares det aktuelle miljø, inklusiv aktuel "
+"arbejdsmappe, uændret."
+
+#: newgrp.1.xml:86(para)
+msgid ""
+"<command>newgrp</command> changes the current real group ID to the named "
+"group, or to the default group listed in <filename>/etc/passwd</filename> if "
+"no group name is given. <command>newgrp</command> also tries to add the "
+"group to the user groupset. If not root, the user will be prompted for a "
+"password if she does not have a password (in <filename>/etc/shadow</"
+"filename> if this user has an entry in the shadowed password file, or in "
+"<filename>/etc/passwd</filename> otherwise) and the group does, or if the "
+"user is not listed as a member and the group has a password. The user will "
+"be denied access if the group password is empty and the user is not listed "
+"as a member."
+msgstr ""
+
+#: newgrp.1.xml:100(para)
+msgid ""
+"If there is an entry for this group in <filename>/etc/gshadow</filename>, "
+"then the list of members and the password of this group will be taken from "
+"this file, otherwise, the entry in <filename>/etc/group</filename> is "
+"considered."
+msgstr ""
+
+#: newgrp.1.xml:152(para)
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, <citerefentry condition="
+"\"gshadow\"><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry></phrase>."
+msgstr ""
+
+#: logoutd.8.xml:57(refentrytitle) logoutd.8.xml:64(refname)
+#: logoutd.8.xml:70(command)
+msgid "logoutd"
+msgstr ""
+
+#: logoutd.8.xml:65(refpurpose)
+msgid "enforce login time restrictions"
+msgstr "påtving restriktioner for logindperiode"
+
+#: logoutd.8.xml:76(para)
+msgid ""
+"<command>logoutd</command> enforces the login time and port restrictions "
+"specified in <filename>/etc/porttime</filename>. <command>logoutd</command> "
+"should be started from <filename>/etc/rc</filename>. The <filename>/var/run/"
+"utmp</filename> file is scanned periodically and each user name is checked "
+"to see if the named user is permitted on the named port at the current time. "
+"Any login session which is violating the restrictions in <filename>/etc/"
+"porttime</filename> is terminated."
+msgstr ""
+
+#: logoutd.8.xml:98(filename) login.1.xml:341(filename)
+msgid "/var/run/utmp"
+msgstr ""
+
+#: logoutd.8.xml:100(para) login.1.xml:343(para)
+msgid "List of current login sessions."
+msgstr "Liste over aktuelle logindsessioner."
+
+#: login.defs.5.xml:124(refentrytitle) login.defs.5.xml:131(refname)
+msgid "login.defs"
+msgstr ""
+
+#: login.defs.5.xml:132(refpurpose)
+msgid "shadow password suite configuration"
+msgstr ""
+
+#: login.defs.5.xml:137(para)
+msgid ""
+"The <filename>/etc/login.defs</filename> file defines the site-specific "
+"configuration for the shadow password suite. This file is required. Absence "
+"of this file will not prevent system operation, but will probably result in "
+"undesirable operation."
+msgstr ""
+
+#: login.defs.5.xml:144(para)
+msgid ""
+"This file is a readable text file, each line of the file describing one "
+"configuration parameter. The lines consist of a configuration name and "
+"value, separated by whitespace. Blank lines and comment lines are ignored. "
+"Comments are introduced with a \"#\" pound sign and the pound sign must be "
+"the first non-white character of the line."
+msgstr ""
+"Denne fil er en læsbar tekstfil, hvier linje i filen beskriver en "
+"konfigurationsparameter. Linjerne består af et konfigurationsnavn og -værdi, "
+"adskilt af mellemrum. Tomme linjer og kommentarlinjer ignoreres. Kommentarer "
+"indledes med tegnet »#« og tegnet skal være det første tegn på linjen, som "
+"ikke er et mellemrum."
+
+#: login.defs.5.xml:152(para)
+msgid ""
+"Parameter values may be of four types: strings, booleans, numbers, and long "
+"numbers. A string is comprised of any printable characters. A boolean should "
+"be either the value <replaceable>yes</replaceable> or <replaceable>no</"
+"replaceable>. An undefined boolean parameter or one with a value other than "
+"these will be given a <replaceable>no</replaceable> value. Numbers (both "
+"regular and long) may be either decimal values, octal values (precede the "
+"value with <replaceable>0</replaceable>) or hexadecimal values (precede the "
+"value with <replaceable>0x</replaceable>). The maximum value of the regular "
+"and long numeric parameters is machine-dependent."
+msgstr ""
+
+#: login.defs.5.xml:167(para)
+msgid "The following configuration items are provided:"
+msgstr "De følgende konfigurationspunkter tilbydes:"
+
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+msgid "<option>CHFN_AUTH</option> (boolean)"
+msgstr "<option>CHFN_AUTH</option> (boolesk)"
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chfn</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+msgid "<option>CHFN_RESTRICT</option> (string)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"This parameter specifies which values in the <emphasis remap=\"I\">gecos</"
+"emphasis> field of the <filename>/etc/passwd</filename> file may be changed "
+"by regular users using the <command>chfn</command> program. It can be any "
+"combination of letters <replaceable>f</replaceable>, <replaceable>r</"
+"replaceable>, <replaceable>w</replaceable>, <replaceable>h</replaceable>, "
+"for Full name, Room number, Work phone, and Home phone, respectively. For "
+"backward compatibility, <replaceable>yes</replaceable> is equivalent to "
+"<replaceable>rwh</replaceable> and <replaceable>no</replaceable> is "
+"equivalent to <replaceable>frwh</replaceable>. If not specified, only the "
+"superuser can make any changes. The most restrictive setting is better "
+"achieved by not installing <command>chfn</command> SUID."
+msgstr ""
+
+#: login.defs.5.xml:32(term) chsh.1.xml:32(term)
+msgid "<option>CHSH_AUTH</option> (boolean)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) chsh.1.xml:34(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chsh</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ERASECHAR</option> (number)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Terminal ERASE character (<replaceable>010</replaceable> = backspace, "
+"<replaceable>0177</replaceable> = DEL)."
+msgstr ""
+
+#: login.defs.5.xml:38(para) login.defs.5.xml:37(para) login.1.xml:38(para)
+#: login.1.xml:37(para)
+msgid ""
+"The value can be prefixed \"0\" for an octal value, or \"0x\" for an "
+"hexadecimal value."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FAIL_DELAY</option> (number)"
+msgstr "<option>FAIL_DELAY</option> (antal)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Delay in seconds before being allowed another attempt after a login failure."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FAILLOG_ENAB</option> (boolean)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable logging and display of <filename>/var/log/faillog</filename> login "
+"failure info."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FAKE_SHELL</option> (string)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, <command>login</command> will execute this shell instead of the "
+"users' shell specified in <filename>/etc/passwd</filename>."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FTMP_FILE</option> (string)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, login failures will be logged in this file in a utmp format."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>HUSHLOGIN_FILE</option> (string)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, this file can inhibit all the usual chatter during the login "
+"sequence. If a full pathname is specified, then hushed mode will be enabled "
+"if the user's name or shell are found in the file. If not a full pathname, "
+"then hushed mode will be enabled if the file exists in the user's home "
+"directory."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ISSUE_FILE</option> (string)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "If defined, this file will be displayed before each login prompt."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>KILLCHAR</option> (number)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Terminal KILL character (<replaceable>025</replaceable> = CTRL/U)."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LASTLOG_ENAB</option> (boolean)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging and display of /var/log/lastlog login time info."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOG_OK_LOGINS</option> (boolean)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging of successful logins."
+msgstr "Aktiver logning af succesfulde logind."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOG_UNKFAIL_ENAB</option> (boolean)"
+msgstr "<option>LOG_UNKFAIL_ENAB</option> (boolesk)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable display of unknown usernames when login failures are recorded."
+msgstr "Aktiver visning af ukendte brugernavne når logindfejl optages."
+
+#: login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"Note: logging unknown usernames may be a security issue if an user enter her "
+"password instead of her login name."
+msgstr ""
+"Bemærk: Logning af ukendte brugernaven kan udgøre en sikkerhedsmæssig risiko "
+"såfremt en bruger indtatser sin adgangskode i stedet for sit logindnavn."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOGIN_RETRIES</option> (number)"
+msgstr "<option>LOGIN_RETRIES</option> (antal)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Maximum number of login retries in case of bad password."
+msgstr "Maksimalt antal logindforsøg i tilfælde af ugyldig adgangskode."
+
+#: login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"This will most likely be overridden by PAM, since the default pam_unix "
+"module has its own built in of 3 retries. However, this is a safe fallback "
+"in case you are using an authentication module that does not enforce "
+"PAM_MAXTRIES."
+msgstr ""
+"Denne vil højst sandsynlig blive overskrevet af PAM, da standardmodulet "
+"pam_unix har sin egen indbygget 3 forsøg. Dette er dog en ekstra sikkerhed i "
+"tilfælde af at du bruger et godkendelsesmodul som ikke påtvinger "
+"PAM_MAXTRiES."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOGIN_TIMEOUT</option> (number)"
+msgstr "<option>LOGIN_TIMEOUT</option> (antal)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Max time in seconds for login."
+msgstr "Maks. tidsforbrug i sekunder for logind."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>MOTD_FILE</option> (string)"
+msgstr "<option>MOTD_FILE</option> (streng)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, \":\" delimited list of \"message of the day\" files to be "
+"displayed upon login."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>NOLOGINS_FILE</option> (string)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, name of file whose presence will inhibit non-root logins. The "
+"contents of this file should be a message indicating why logins are "
+"inhibited."
+msgstr ""
+
+#: login.defs.5.xml:212(para)
+msgid ""
+"<option>PASS_MAX_DAYS</option>, <option>PASS_MIN_DAYS</option> and "
+"<option>PASS_WARN_AGE</option> are only used at the time of account "
+"creation. Any changes to these settings won't affect existing accounts."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>PORTTIME_CHECKS_ENAB</option> (boolean)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable checking of time restrictions specified in <filename>/etc/porttime</"
+"filename>."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>TTYGROUP</option> (string)"
+msgstr "<option>TTYGROUP</option> (streng)"
+
+#: login.defs.5.xml:33(term) login.1.xml:33(term)
+msgid "<option>TTYPERM</option> (string)"
+msgstr "<option>TTYPERM</option> (streng)"
+
+#: login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"The terminal permissions: the login tty will be owned by the "
+"<option>TTYGROUP</option> group, and the permissions will be set to "
+"<option>TTYPERM</option>."
+msgstr ""
+
+#: login.defs.5.xml:40(para) login.1.xml:40(para)
+msgid ""
+"By default, the ownership of the terminal is set to the user's primary group "
+"and the permissions are set to <replaceable>0600</replaceable>."
+msgstr ""
+"Som standard er ejerskabet af terminalen angivet til brugerens primære "
+"gruppe og rettighederne er angivet til <replaceable>0600</replaceable>."
+
+#: login.defs.5.xml:45(para) login.1.xml:45(para)
+msgid ""
+"<option>TTYGROUP</option> can be either the name of a group or a numeric "
+"group identifier."
+msgstr ""
+
+#: login.defs.5.xml:49(para) login.1.xml:49(para)
+msgid ""
+"If you have a <command>write</command> program which is \"setgid\" to a "
+"special group which owns the terminals, define TTYGROUP to the group number "
+"and TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign "
+"TTYPERM to either 622 or 600."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>TTYTYPE_FILE</option> (string)"
+msgstr "<option>TTYTYPE_FILE</option> (streng)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, file which maps tty line to TERM environment parameter. Each "
+"line of the file is in a format something like \"vt100 tty01\"."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ULIMIT</option> (number)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Default <command>ulimit</command> value."
+msgstr "Standardværdi for <command>ulimit</command>."
+
+#: login.defs.5.xml:245(title)
+msgid "CROSS REFERENCES"
+msgstr ""
+
+#: login.defs.5.xml:246(para)
+msgid ""
+"The following cross references show which programs in the shadow password "
+"suite use which parameters."
+msgstr ""
+"De følgende krydsreferencer viser hvilke programmer i shadows "
+"adgangskodeprogrampakke der bruger hvilke parametre."
+
+#: login.defs.5.xml:253(term) chage.1.xml:58(refentrytitle)
+#: chage.1.xml:65(refname) chage.1.xml:70(command)
+msgid "chage"
+msgstr ""
+
+#: login.defs.5.xml:255(para) login.defs.5.xml:451(phrase)
+#: login.defs.5.xml:523(phrase)
+msgid "USE_TCB"
+msgstr ""
+
+#: login.defs.5.xml:259(term) chfn.1.xml:60(refentrytitle)
+#: chfn.1.xml:67(refname) chfn.1.xml:73(command)
+msgid "chfn"
+msgstr ""
+
+#: login.defs.5.xml:261(para)
+msgid ""
+"<phrase condition=\"no_pam\">CHFN_AUTH</phrase> CHFN_RESTRICT <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:269(term) chgpasswd.8.xml:57(refentrytitle)
+#: chgpasswd.8.xml:64(refname) chgpasswd.8.xml:70(command)
+msgid "chgpasswd"
+msgstr ""
+
+#: login.defs.5.xml:271(para) login.defs.5.xml:302(para)
+msgid ""
+"ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB <phrase condition="
+"\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:279(term) chpasswd.8.xml:61(refentrytitle)
+#: chpasswd.8.xml:68(refname) chpasswd.8.xml:74(command)
+msgid "chpasswd"
+msgstr ""
+
+#: login.defs.5.xml:282(phrase)
+msgid "ENCRYPT_METHOD MD5_CRYPT_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:284(phrase)
+msgid "SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS"
+msgstr ""
+
+#: login.defs.5.xml:290(term) chsh.1.xml:60(refentrytitle)
+#: chsh.1.xml:67(refname) chsh.1.xml:73(command)
+msgid "chsh"
+msgstr ""
+
+#: login.defs.5.xml:292(para)
+msgid "CHSH_AUTH LOGIN_STRING"
+msgstr ""
+
+#: login.defs.5.xml:300(term) gpasswd.1.xml:62(refentrytitle)
+#: gpasswd.1.xml:69(refname) gpasswd.1.xml:83(command)
+msgid "gpasswd"
+msgstr ""
+
+#: login.defs.5.xml:310(term) groupadd.8.xml:60(refentrytitle)
+#: groupadd.8.xml:67(refname) groupadd.8.xml:73(command)
+msgid "groupadd"
+msgstr ""
+
+#: login.defs.5.xml:312(para)
+msgid "GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN"
+msgstr ""
+
+#: login.defs.5.xml:319(term) groupdel.8.xml:58(refentrytitle)
+#: groupdel.8.xml:65(refname) groupdel.8.xml:71(command)
+msgid "groupdel"
+msgstr ""
+
+#: login.defs.5.xml:321(para) login.defs.5.xml:327(para)
+#: login.defs.5.xml:333(para) login.defs.5.xml:340(para)
+#: login.defs.5.xml:346(para) login.defs.5.xml:352(para)
+msgid "MAX_MEMBERS_PER_GROUP"
+msgstr ""
+
+#: login.defs.5.xml:325(term) groupmems.8.xml:61(refentrytitle)
+#: groupmems.8.xml:68(refname) groupmems.8.xml:74(command)
+msgid "groupmems"
+msgstr ""
+
+#: login.defs.5.xml:331(term) groupmod.8.xml:58(refentrytitle)
+#: groupmod.8.xml:65(refname) groupmod.8.xml:71(command)
+msgid "groupmod"
+msgstr ""
+
+#: login.defs.5.xml:338(term) grpck.8.xml:58(refentrytitle)
+#: grpck.8.xml:65(refname) grpck.8.xml:71(command)
+msgid "grpck"
+msgstr ""
+
+#: login.defs.5.xml:357(term) lastlog.8.xml:59(refentrytitle)
+#: lastlog.8.xml:66(refname) lastlog.8.xml:72(command)
+msgid "lastlog"
+msgstr ""
+
+#: login.defs.5.xml:359(para)
+msgid "LASTLOG_UID_MAX"
+msgstr ""
+
+#: login.defs.5.xml:363(term) login.1.xml:90(refentrytitle)
+#: login.1.xml:97(refname) login.1.xml:103(command) login.1.xml:111(command)
+#: login.1.xml:118(command)
+msgid "login"
+msgstr ""
+
+#: login.defs.5.xml:365(para)
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE</"
+"phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam\">FAILLOG_ENAB</"
+"phrase> FAKE_SHELL <phrase condition=\"no_pam\">FTMP_FILE</phrase> "
+"HUSHLOGIN_FILE <phrase condition=\"no_pam\">ISSUE_FILE</phrase> KILLCHAR "
+"<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 <phrase condition=\"no_pam"
+"\">MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE NOLOGINS_FILE "
+"PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> TTYGROUP TTYPERM TTYTYPE_FILE "
+"<phrase condition=\"no_pam\">ULIMIT UMASK</phrase> USERGROUPS_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:392(term)
+msgid "newgrp / sg"
+msgstr ""
+
+#: login.defs.5.xml:394(para)
+msgid "SYSLOG_SG_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:402(para)
+msgid ""
+"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> "
+"SUB_GID_COUNT SUB_GID_MAX SUB_GID_MIN SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN "
+"SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+msgstr ""
+
+#: login.defs.5.xml:421(para)
+msgid ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN "
+"PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:432(para)
+msgid ""
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb"
+"\">TCB_AUTH_GROUP TCB_SYMLINKS USE_TCB</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:441(para)
+msgid ""
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb\">USE_TCB</"
+"phrase>"
+msgstr ""
+
+#: login.defs.5.xml:458(para)
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENVIRON_FILE</phrase> ENV_PATH "
+"ENV_SUPATH <phrase condition=\"no_pam\">ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB "
+"MAIL_DIR MAIL_FILE QUOTAS_ENAB</phrase> SULOG_FILE SU_NAME <phrase condition="
+"\"no_pam\">SU_WHEEL_ONLY</phrase> SYSLOG_SU_ENAB <phrase condition=\"no_pam"
+"\">USERGROUPS_ENAB</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:473(term)
+msgid "sulogin"
+msgstr ""
+
+#: login.defs.5.xml:475(para)
+msgid "ENV_HZ <phrase condition=\"no_pam\">ENV_TZ</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:484(para)
+msgid ""
+"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 SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN "
+"SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK "
+"<phrase condition=\"tcb\">TCB_AUTH_GROUP TCB_SYMLINK USE_TCB</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:502(para)
+msgid ""
+"MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB <phrase "
+"condition=\"tcb\">TCB_SYMLINKS USE_TCB</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:512(para)
+msgid ""
+"LASTLOG_UID_MAX MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP <phrase condition="
+"\"tcb\">TCB_SYMLINKS USE_TCB</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:532(para)
+msgid ""
+"Much of the functionality that used to be provided by the shadow password "
+"suite is now handled by PAM. Thus, <filename>/etc/login.defs</filename> is "
+"no longer used by <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, or less used by "
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, and <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>. Please refer to the "
+"corresponding PAM configuration files instead."
+msgstr ""
+
+#: login.defs.5.xml:548(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+
+#: login.access.5.xml:58(refentrytitle) login.access.5.xml:65(refname)
+msgid "login.access"
+msgstr ""
+
+#: login.access.5.xml:66(refpurpose)
+msgid "login access control table"
+msgstr "kontroltabel for logindadgang"
+
+#: login.access.5.xml:71(para)
+msgid ""
+"The <emphasis remap=\"I\">login.access</emphasis> file specifies (user, "
+"host) combinations and/or (user, tty) combinations for which a login will be "
+"either accepted or refused."
+msgstr ""
+
+#: login.access.5.xml:77(para)
+msgid ""
+"When someone logs in, the <emphasis remap=\"I\">login.access</emphasis> is "
+"scanned for the first entry that matches the (user, host) combination, or, "
+"in case of non-networked logins, the first entry that matches the (user, "
+"tty) combination. The permissions field of that table entry determines "
+"whether the login will be accepted or refused."
+msgstr ""
+
+#: login.access.5.xml:85(para)
+msgid ""
+"Each line of the login access control table has three fields separated by a "
+"\":\" character:"
+msgstr ""
+"Hver linje i kontroltabellen for logindadagng har tre felter adskilt af "
+"tegnet »:«:"
+
+#: login.access.5.xml:90(para)
+msgid ""
+"<emphasis remap=\"I\">permission</emphasis>:<emphasis remap=\"I\">users</"
+"emphasis>:<emphasis remap=\"I\">origins</emphasis>"
+msgstr ""
+
+#: login.access.5.xml:94(para)
+msgid ""
+"The first field should be a \"<emphasis>+</emphasis>\" (access granted) or "
+"\"<emphasis>-</emphasis>\" (access denied) character. The second field "
+"should be a list of one or more login names, group names, or <emphasis>ALL</"
+"emphasis> (always matches). The third field should be a list of one or more "
+"tty names (for non-networked logins), host names, domain names (begin with "
+"\"<literal>.</literal>\"), host addresses, internet network numbers (end "
+"with \"<literal>.</literal>\"), <emphasis>ALL</emphasis> (always matches) or "
+"<emphasis>LOCAL</emphasis> (matches any string that does not contain a "
+"\"<literal>.</literal>\" character). If you run NIS you can use "
+"@netgroupname in host or user patterns."
+msgstr ""
+
+#: login.access.5.xml:108(para)
+msgid ""
+"The <emphasis>EXCEPT</emphasis> operator makes it possible to write very "
+"compact rules."
+msgstr ""
+
+#: login.access.5.xml:113(para)
+msgid ""
+"The group file is searched only when a name does not match that of the "
+"logged-in user. Only groups are matched in which users are explicitly "
+"listed: the program does not look at a user's primary group id value."
+msgstr ""
+
+#: login.1.xml:98(refpurpose)
+msgid "begin session on the system"
+msgstr ""
+
+#: login.1.xml:104(arg) login.1.xml:112(arg) login.1.xml:119(arg)
+#: login.1.xml:236(option) groupmems.8.xml:79(arg)
+msgid "-p"
+msgstr "-p"
+
+#: login.1.xml:105(replaceable) login.1.xml:113(replaceable)
+#: login.1.xml:120(replaceable)
+msgid "host"
+msgstr "vært"
+
+#: login.1.xml:105(arg) login.1.xml:113(arg)
+msgid "-h <placeholder-1/>"
+msgstr "-h <placeholder-1/>"
+
+#: login.1.xml:108(replaceable)
+msgid "ENV=VAR"
+msgstr ""
+
+#: login.1.xml:114(arg) login.1.xml:214(option)
+msgid "-f"
+msgstr "-f"
+
+#: login.1.xml:120(arg)
+msgid "-r <placeholder-1/>"
+msgstr "-r <placeholder-1/>"
+
+#: login.1.xml:126(para)
+msgid ""
+"The <command>login</command> program is used to establish a new session with "
+"the system. It is normally invoked automatically by responding to the "
+"<emphasis remap=\"I\">login:</emphasis> prompt on the user's terminal. "
+"<command>login</command> may be special to the shell and may not be invoked "
+"as a sub-process. When called from a shell, <command>login</command> should "
+"be executed as <emphasis remap=\"B\">exec login</emphasis> which will cause "
+"the user to exit from the current shell (and thus will prevent the new "
+"logged in user to return to the session of the caller). Attempting to "
+"execute <command>login</command> from any shell but the login shell will "
+"produce an error message."
+msgstr ""
+
+#: login.1.xml:140(para)
+msgid ""
+"The user is then prompted for a password, where appropriate. Echoing is "
+"disabled to prevent revealing the password. Only a small number of password "
+"failures are permitted before <command>login</command> exits and the "
+"communications link is severed."
+msgstr ""
+
+#: login.1.xml:147(para)
+msgid ""
+"If password aging has been enabled for your account, you may be prompted for "
+"a new password before proceeding. You will be forced to provide your old "
+"password and the new password before continuing. Please refer to "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> for more information."
+msgstr ""
+
+#: login.1.xml:156(para)
+msgid ""
+"After a successful login, you will be informed of any system messages and "
+"the presence of mail. You may turn off the printing of the system message "
+"file, <filename>/etc/motd</filename>, by creating a zero-length file "
+"<filename>.hushlogin</filename> in your login directory. The mail message "
+"will be one of \"<emphasis>You have new mail.</emphasis>\", \"<emphasis>You "
+"have mail.</emphasis>\", or \"<emphasis>No Mail.</emphasis>\" according to "
+"the condition of your mailbox."
+msgstr ""
+
+#: login.1.xml:167(para)
+msgid ""
+"Your user and group ID will be set according to their values in the "
+"<filename>/etc/passwd</filename> file. The value for <envar>$HOME</envar>, "
+"<envar>$SHELL</envar>, <envar>$PATH</envar>, <envar>$LOGNAME</envar>, and "
+"<envar>$MAIL</envar> are set according to the appropriate fields in the "
+"password entry. Ulimit, umask and nice values may also be set according to "
+"entries in the GECOS field."
+msgstr ""
+
+#: login.1.xml:176(para)
+msgid ""
+"On some installations, the environmental variable <envar>$TERM</envar> will "
+"be initialized to the terminal type on your tty line, as specified in "
+"<filename>/etc/ttytype</filename>."
+msgstr ""
+
+#: login.1.xml:182(para)
+msgid ""
+"An initialization script for your command interpreter may also be executed. "
+"Please see the appropriate manual section for more information on this "
+"function."
+msgstr ""
+
+#: login.1.xml:194(para) login.1.xml:270(para)
+msgid ""
+"The <command>login</command> program is NOT responsible for removing users "
+"from the utmp file. It is the responsibility of "
+"<citerefentry><refentrytitle>getty</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry> and <citerefentry><refentrytitle>init</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry> to clean up apparent "
+"ownership of a terminal session. If you use <command>login</command> from "
+"the shell prompt without <command>exec</command>, the user you use will "
+"continue to appear to be logged in even after you log out of the \"subsession"
+"\"."
+msgstr ""
+
+#: login.1.xml:217(para)
+msgid "Do not perform authentication, user is preauthenticated."
+msgstr ""
+
+#: login.1.xml:220(para)
+msgid "Note: In that case, <replaceable>username</replaceable> is mandatory."
+msgstr ""
+
+#: login.1.xml:228(option)
+msgid "-h"
+msgstr ""
+
+#: login.1.xml:231(para)
+msgid "Name of the remote host for this login."
+msgstr "Navn på den eksterne vært for dette logind."
+
+#: login.1.xml:239(para)
+msgid "Preserve environment."
+msgstr "Bevar miljø."
+
+#: login.1.xml:244(option)
+msgid "-r"
+msgstr "-r"
+
+#: login.1.xml:247(para)
+msgid "Perform autologin protocol for rlogin."
+msgstr "Udfør autologin-protokol for rlogin."
+
+#: login.1.xml:252(para)
+msgid ""
+"The <option>-r</option>, <option>-h</option> and <option>-f</option> options "
+"are only used when <command>login</command> is invoked by root."
+msgstr ""
+
+#: login.1.xml:261(para)
+msgid ""
+"This version of <command>login</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+
+#: login.1.xml:266(para)
+msgid ""
+"The location of files is subject to differences in system configuration."
+msgstr "Placeringen af filer er underlagt forskelle i systemkonfiguration."
+
+#: login.1.xml:282(para)
+msgid ""
+"As with any program, <command>login</command>'s appearance can be faked. If "
+"non-trusted users have physical access to a machine, an attacker could use "
+"this to obtain the password of the next person coming to sit in front of the "
+"machine. Under Linux, the SAK mechanism can be used by users to initiate a "
+"trusted path and prevent this kind of attack."
+msgstr ""
+
+#: login.1.xml:347(filename)
+msgid "/var/log/wtmp"
+msgstr "/var/log/wtmp"
+
+#: login.1.xml:349(para)
+msgid "List of previous login sessions."
+msgstr "Liste over tidligere logindsessioner."
+
+#: login.1.xml:365(filename)
+msgid "/etc/motd"
+msgstr "/etc/motd"
+
+#: login.1.xml:367(para)
+msgid "System message of the day file."
+msgstr ""
+
+#: login.1.xml:371(filename)
+msgid "/etc/nologin"
+msgstr "/etc/nologin"
+
+#: login.1.xml:373(para)
+msgid "Prevent non-root users from logging in."
+msgstr ""
+
+#: login.1.xml:377(filename)
+msgid "/etc/ttytype"
+msgstr "/etc/ttytype"
+
+#: login.1.xml:379(para)
+msgid "List of terminal types."
+msgstr ""
+
+#: login.1.xml:383(filename)
+msgid "$HOME/.hushlogin"
+msgstr "$HOME/.hushlogin"
+
+#: login.1.xml:385(para)
+msgid "Suppress printing of system messages."
+msgstr "Undertryk udskrivning af systembeskeder."
+
+#: login.1.xml:399(para)
+msgid ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: limits.5.xml:41(firstname)
+msgid "Luca"
+msgstr ""
+
+#: limits.5.xml:42(surname)
+msgid "Berra"
+msgstr ""
+
+#: limits.5.xml:59(refentrytitle) limits.5.xml:66(refname)
+msgid "limits"
+msgstr "limits"
+
+#: limits.5.xml:67(refpurpose)
+msgid "resource limits definition"
+msgstr ""
+
+#: limits.5.xml:73(para)
+msgid ""
+"The <emphasis remap=\"I\">limits</emphasis> file (<filename>/etc/limits</"
+"filename> by default or LIMITS_FILE defined <filename>config.h</filename>) "
+"describes the resource limits you wish to impose. It should be owned by root "
+"and readable by root account only."
+msgstr ""
+
+#: limits.5.xml:81(para)
+msgid ""
+"By default no quota is imposed on 'root'. In fact, there is no way to impose "
+"limits via this procedure to root-equiv accounts (accounts with UID 0)."
+msgstr ""
+
+#: limits.5.xml:87(para)
+msgid "Each line describes a limit for a user in the form:"
+msgstr "Hver linje beskriver en begrænsning for en bruger i formen:"
+
+#: limits.5.xml:90(emphasis)
+msgid "user LIMITS_STRING"
+msgstr "bruger LIMITS_STRING"
+
+#: limits.5.xml:93(para)
+msgid "or in the form:"
+msgstr "eller i formen:"
+
+#: limits.5.xml:96(emphasis)
+msgid "@group LIMITS_STRING"
+msgstr "@group LIMITS_STRING"
+
+#: limits.5.xml:99(para)
+msgid ""
+"The <emphasis>LIMITS_STRING</emphasis> is a string of a concatenated list of "
+"resource limits. Each limit consists of a letter identifier followed by a "
+"numerical limit."
+msgstr ""
+
+#: limits.5.xml:105(para)
+msgid "The valid identifiers are:"
+msgstr ""
+
+#: limits.5.xml:108(para)
+msgid "A: max address space (KB)"
+msgstr "A: Maks. adresserum (KB)"
+
+#: limits.5.xml:109(para)
+msgid "C: max core file size (KB)"
+msgstr ""
+
+#: limits.5.xml:110(para)
+msgid "D: max data size (KB)"
+msgstr "D: Maks. datastørrelse (KB)"
+
+#: limits.5.xml:111(para)
+#, fuzzy
+#| msgid "F: maximum filesize (KB)"
+msgid "F: maximum file size (KB)"
+msgstr "F: Maks filstørrelse (KB)"
+
+#: limits.5.xml:112(para)
+msgid ""
+"K: file creation mask, set by <citerefentry><refentrytitle>umask</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+
+#: limits.5.xml:117(para)
+msgid "I: max nice value (0..39 which translates to 20..-19)"
+msgstr ""
+
+#: limits.5.xml:119(para)
+msgid "L: max number of logins for this user"
+msgstr ""
+
+#: limits.5.xml:120(para)
+msgid "M: max locked-in-memory address space (KB)"
+msgstr ""
+
+#: limits.5.xml:121(para)
+msgid "N: max number of open files"
+msgstr "N: Maks antal åbne filer"
+
+#: limits.5.xml:122(para)
+msgid "O: max real time priority"
+msgstr ""
+
+#: limits.5.xml:123(para)
+msgid ""
+"P: process priority, set by <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+
+#: limits.5.xml:128(para)
+msgid "R: max resident set size (KB)"
+msgstr ""
+
+#: limits.5.xml:129(para)
+msgid "S: max stack size (KB)"
+msgstr ""
+
+#: limits.5.xml:130(para)
+msgid "T: max CPU time (MIN)"
+msgstr "T: Maks CPU-tid (MIN)"
+
+#: limits.5.xml:131(para)
+msgid "U: max number of processes"
+msgstr ""
+
+#: limits.5.xml:134(para)
+msgid ""
+"For example, <emphasis remap=\"I\">L2D2048N5</emphasis> is a valid "
+"<emphasis>LIMITS_STRING</emphasis>. For reading convenience, the following "
+"entries are equivalent:"
+msgstr ""
+
+#: limits.5.xml:140(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+" username L2D2048N5\n"
+" username L2 D2048 N5\n"
+" "
+msgstr ""
+
+#: limits.5.xml:145(para)
+msgid ""
+"Be aware that after <emphasis remap=\"I\">username</emphasis> the rest of "
+"the line is considered a limit string, thus comments are not allowed. An "
+"invalid limits string will be rejected (not considered) by the "
+"<command>login</command> program."
+msgstr ""
+
+#: limits.5.xml:152(para)
+msgid ""
+"The default entry is denoted by username \"<emphasis>*</emphasis>\". If you "
+"have multiple <emphasis remap=\"I\">default</emphasis> entries in your "
+"<emphasis>LIMITS_FILE</emphasis>, then the last one will be used as the "
+"default entry."
+msgstr ""
+
+#: limits.5.xml:159(para)
+msgid ""
+"The limits specified in the form \"<replaceable>@group</replaceable>\" apply "
+"to the members of the specified <replaceable>group</replaceable>."
+msgstr ""
+
+#: limits.5.xml:165(para)
+#, fuzzy
+#| msgid ""
+#| "If more than one line with limits for an user exist, only the first line "
+#| "for this user will be considered."
+msgid ""
+"If more than one line with limits for a user exist, only the first line for "
+"this user will be considered."
+msgstr ""
+"Hvis mere end en linje med begrænsninger for en bruger findes, så vil kun "
+"den første linje for denne bruger indgå."
+
+#: limits.5.xml:170(para)
+msgid ""
+"If no lines are specified for a user, the last <replaceable>@group</"
+"replaceable> line matching a group whose the user is a member of will be "
+"considered, or the last line with default limits if no groups contain the "
+"user."
+msgstr ""
+
+#: limits.5.xml:177(para)
+msgid ""
+"To completely disable limits for a user, a single dash \"<emphasis>-</"
+"emphasis>\" will do."
+msgstr ""
+
+#: limits.5.xml:182(para)
+msgid ""
+"To disable a limit for a user, a single dash \"<replaceable>-</replaceable>"
+"\" can be used instead of the numerical value for this limit."
+msgstr ""
+
+#: limits.5.xml:188(para)
+msgid ""
+"Also, please note that all limit settings are set PER LOGIN. They are not "
+"global, nor are they permanent. Perhaps global limits will come, but for now "
+"this will have to do ;)"
+msgstr ""
+
+#: limits.5.xml:199(filename)
+msgid "/etc/limits"
+msgstr ""
+
+#: limits.5.xml:207(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+msgstr ""
+
+#: lastlog.8.xml:67(refpurpose)
+msgid "reports the most recent login of all users or of a given user"
+msgstr ""
+
+#: lastlog.8.xml:81(para)
+msgid ""
+"<command>lastlog</command> formats and prints the contents of the last login "
+"log <filename>/var/log/lastlog</filename> file. The <emphasis>login-name</"
+"emphasis>, <emphasis>port</emphasis>, and <emphasis>last login time</"
+"emphasis> will be printed. The default (no flags) causes lastlog entries to "
+"be printed, sorted by their order in <filename>/etc/passwd</filename>."
+msgstr ""
+
+#: lastlog.8.xml:93(para)
+msgid "The options which apply to the <command>lastlog</command> command are:"
+msgstr ""
+
+#: lastlog.8.xml:98(term)
+msgid ""
+"<option>-b</option>, <option>--before</option>&nbsp;<replaceable>DAYS</"
+"replaceable>"
+msgstr ""
+
+#: lastlog.8.xml:102(para)
+msgid ""
+"Print only lastlog records older than <emphasis remap=\"I\">DAYS</emphasis>."
+msgstr ""
+
+#: lastlog.8.xml:108(term)
+#, fuzzy
+#| msgid "<option>-u</option>, <option>--user</option>"
+msgid "<option>-C</option>, <option>--clear</option>"
+msgstr "<option>-u</option>, <option>--user</option>"
+
+#: lastlog.8.xml:112(para)
+msgid ""
+"Clear lastlog record of a user. This option can be used only together with "
+"<option>-u</option> (<option>--user</option>))."
+msgstr ""
+
+#: lastlog.8.xml:139(term)
+#, fuzzy
+#| msgid "<option>-u</option>, <option>--user</option>"
+msgid "<option>-S</option>, <option>--set</option>"
+msgstr "<option>-u</option>, <option>--user</option>"
+
+#: lastlog.8.xml:143(para)
+msgid ""
+"Set lastlog record of a user to the current time. This option can be used "
+"only together with <option>-u</option> (<option>--user</option>))."
+msgstr ""
+
+#: lastlog.8.xml:150(term) faillog.8.xml:192(term)
+msgid ""
+"<option>-t</option>, <option>--time</option>&nbsp;<replaceable>DAYS</"
+"replaceable>"
+msgstr ""
+
+#: lastlog.8.xml:154(para)
+msgid ""
+"Print the lastlog records more recent than <emphasis remap=\"I\">DAYS</"
+"emphasis>."
+msgstr ""
+
+#: lastlog.8.xml:161(term) faillog.8.xml:202(term)
+msgid ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+"replaceable>|<replaceable>RANGE</replaceable>"
+msgstr ""
+
+#: lastlog.8.xml:165(para)
+msgid "Print the lastlog record of the specified user(s)."
+msgstr ""
+
+#: lastlog.8.xml:168(para) faillog.8.xml:211(para)
+msgid ""
+"The users can be specified by a login name, a numerical user ID, or a "
+"<replaceable>RANGE</replaceable> of users. This <replaceable>RANGE</"
+"replaceable> of users can be specified with a min and max values "
+"(<replaceable>UID_MIN-UID_MAX</replaceable>), a max value (<replaceable>-"
+"UID_MAX</replaceable>), or a min value (<replaceable>UID_MIN-</replaceable>)."
+msgstr ""
+
+#: lastlog.8.xml:180(para)
+msgid ""
+"If the user has never logged in the message <emphasis>** Never logged in**</"
+"emphasis> will be displayed instead of the port and time."
+msgstr ""
+
+#: lastlog.8.xml:185(para)
+msgid ""
+"Only the entries for the current users of the system will be displayed. "
+"Other entries may exist for users that were deleted previously."
+msgstr ""
+
+#: lastlog.8.xml:193(title) groups.1.xml:90(title) chsh.1.xml:140(title)
+#: chage.1.xml:237(title)
+msgid "NOTE"
+msgstr ""
+
+#: lastlog.8.xml:194(para)
+msgid ""
+"The <filename>lastlog</filename> file is a database which contains info on "
+"the last login of each user. You should not rotate it. It is a sparse file, "
+"so its size on the disk is usually much smaller than the one shown by "
+"\"<command>ls -l</command>\" (which can indicate a really big file if you "
+"have in <filename>passwd</filename> users with a high UID). You can display "
+"its real size with \"<command>ls -s</command>\"."
+msgstr ""
+
+#: lastlog.8.xml:220(filename)
+msgid "/var/log/lastlog"
+msgstr "/var/log/lastlog"
+
+#: lastlog.8.xml:222(para)
+msgid "Database times of previous user logins."
+msgstr "Databasetider for tidligere brugerlogind."
+
+#: lastlog.8.xml:230(para)
+msgid ""
+"Large gaps in UID numbers will cause the lastlog program to run longer with "
+"no output to the screen (i.e. if in lastlog database there is no entries for "
+"users with UID between 170 and 800 lastlog will appear to hang as it "
+"processes entries with UIDs 171-799)."
+msgstr ""
+
+#: gshadow.5.xml:41(contrib)
+msgid "Creation, 2005"
+msgstr ""
+
+#: gshadow.5.xml:46(refentrytitle) gshadow.5.xml:53(refname)
+msgid "gshadow"
+msgstr ""
+
+#: gshadow.5.xml:54(refpurpose)
+msgid "shadowed group file"
+msgstr ""
+
+#: gshadow.5.xml:59(para)
+msgid ""
+"<filename>/etc/gshadow</filename> contains the shadowed information for "
+"group accounts."
+msgstr ""
+
+#: gshadow.5.xml:69(para)
+msgid "Each line of this file contains the following colon-separated fields:"
+msgstr ""
+
+#: gshadow.5.xml:75(emphasis)
+msgid "group name"
+msgstr "gruppenavn"
+
+#: gshadow.5.xml:77(para)
+msgid "It must be a valid group name, which exist on the system."
+msgstr "Det skal være et gyldigt gruppenavn, som findes på systemet."
+
+#: gshadow.5.xml:90(para)
+msgid ""
+"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 *, users will not be able to use a unix "
+"password to access the group (but group members do not need the password)."
+msgstr ""
+
+#: gshadow.5.xml:97(para)
+#, fuzzy
+#| msgid ""
+#| "The new value of the user's password file comment field. It is normally "
+#| "modified using the <citerefentry><refentrytitle>chfn</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry> utility."
+msgid ""
+"The password is used when a user who is not a member of the group wants to "
+"gain the permissions of this group (see <citerefentry><refentrytitle>newgrp</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>)."
+msgstr ""
+"Den nye værdi for brugerens kommentar kommentarfelt i adgangskodefilen. Den "
+"ændres normalt med redskabet <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+#: gshadow.5.xml:103(para)
+msgid ""
+"This field may be empty, in which case only the group members can gain the "
+"group permissions."
+msgstr ""
+
+#: gshadow.5.xml:113(para)
+msgid ""
+"This password supersedes any password specified in <filename>/etc/group</"
+"filename>."
+msgstr ""
+
+#: gshadow.5.xml:121(emphasis)
+msgid "administrators"
+msgstr "administratorer"
+
+#: gshadow.5.xml:123(para) gshadow.5.xml:139(para)
+msgid "It must be a comma-separated list of user names."
+msgstr "Det skal være en kommaadskilt liste af brugernavne."
+
+#: gshadow.5.xml:126(para)
+msgid "Administrators can change the password or the members of the group."
+msgstr "Administratorer kan ændre adgangskoden eller medlemmerne af gruppen."
+
+#: gshadow.5.xml:130(para)
+msgid ""
+"Administrators also have the same permissions as the members (see below)."
+msgstr ""
+"Administratorer har også de samme rettigheder som medlemmerne (se nedenfor)."
+
+#: gshadow.5.xml:137(emphasis)
+msgid "members"
+msgstr "medlemmer"
+
+#: gshadow.5.xml:142(para)
+msgid "Members can access the group without being prompted for a password."
+msgstr "Medlemmer kan tilgå gruppen uden at blive spurgt efter en adgangskode."
+
+#: gshadow.5.xml:146(para)
+msgid ""
+"You should use the same list of users as in <filename>/etc/group</filename>."
+msgstr ""
+"Du skal bruge den samme liste over brugere som i <filename>/etc/group</"
+"filename>."
+
+#: gshadow.5.xml:175(para)
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+
+#: grpck.8.xml:66(refpurpose)
+msgid "verify integrity of group files"
+msgstr "verificer integritet for gruppefiler"
+
+#: grpck.8.xml:84(para)
+msgid ""
+"The <command>grpck</command> command verifies the integrity of the groups "
+"information. It checks that all entries in <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</"
+"filename></phrase> have the proper format and contain valid data. The user "
+"is prompted to delete entries that are improperly formatted or which have "
+"other uncorrectable errors."
+msgstr ""
+
+#: grpck.8.xml:101(para)
+msgid "a unique and valid group name"
+msgstr "et unikt og gyldigt gruppenavn"
+
+#: grpck.8.xml:104(para)
+msgid ""
+"a valid group identifier <phrase condition=\"gshadow\"> (<filename>/etc/"
+"group</filename> only)</phrase>"
+msgstr ""
+
+#: grpck.8.xml:111(para)
+msgid ""
+"a valid list of members <phrase condition=\"gshadow\"> and administrators</"
+"phrase>"
+msgstr ""
+
+#: grpck.8.xml:117(para)
+msgid ""
+"a corresponding entry in the <filename>/etc/gshadow</filename> file "
+"(respectively <filename>/etc/group</filename> for the <filename>gshadow</"
+"filename> checks)"
+msgstr ""
+
+#: grpck.8.xml:125(para)
+msgid ""
+"The checks for correct number of fields and unique group name are fatal. If "
+"an entry has the wrong number of fields, the user will be prompted to delete "
+"the entire line. If the user does not answer affirmatively, all further "
+"checks are bypassed. An entry with a duplicated group name is prompted for "
+"deletion, but the remaining checks will still be made. All other errors are "
+"warnings and the user is encouraged to run the <command>groupmod</command> "
+"command to correct the error."
+msgstr ""
+
+#: grpck.8.xml:136(para)
+msgid ""
+"The commands which operate on the <filename>/etc/group</filename><phrase "
+"condition=\"no_gshadow\">file</phrase><phrase condition=\"gshadow\">and "
+"<filename>/etc/gshadow</filename> files</phrase> are not able to alter "
+"corrupted or duplicated entries. <command>grpck</command> should be used in "
+"those circumstances to remove the offending entries."
+msgstr ""
+
+#: grpck.8.xml:152(para)
+msgid "The options which apply to the <command>grpck</command> command are:"
+msgstr "Tilvalgen som gælder for kommandoen <command>grpck</command> er:"
+
+#: grpck.8.xml:165(para)
+msgid ""
+"Execute the <command>grpck</command> command in read-only mode. This causes "
+"all questions regarding changes to be answered <emphasis>no</emphasis> "
+"without user intervention."
+msgstr ""
+
+#: grpck.8.xml:187(para)
+msgid ""
+"Sort entries in <filename>/etc/group</filename><phrase condition=\"gshadow"
+"\">and <filename>/etc/gshadow</filename></phrase> by GID."
+msgstr ""
+
+#: grpck.8.xml:196(para)
+msgid ""
+"By default, <command>grpck</command> operates on <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</"
+"filename></phrase>. The user may select alternate files with the <emphasis "
+"remap=\"I\">group</emphasis><phrase condition=\"no_gshadow\">parameter.</"
+"phrase><phrase condition=\"gshadow\">and <emphasis remap=\"I\">shadow</"
+"emphasis> parameters.</phrase>"
+msgstr ""
+
+#: grpck.8.xml:264(para)
+msgid "one or more bad group entries"
+msgstr ""
+
+#: grpck.8.xml:270(para)
+msgid "can't open group files"
+msgstr "kan ikke åbne gruppefiler"
+
+#: grpck.8.xml:276(para)
+msgid "can't lock group files"
+msgstr "kan ikke låse gruppefiler"
+
+#: grpck.8.xml:282(para)
+msgid "can't update group files"
+msgstr "kan ikke opdatere gruppefiler"
+
+#: grpck.8.xml:246(para)
+msgid ""
+"The <command>grpck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Kommandoen <command>grpck</command> findes med de følgende værdier: "
+"<placeholder-1/>"
+
+#: grpck.8.xml:291(para)
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"gshadow\"><citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum>, </citerefentry>, </"
+"phrase><citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+
+#: groups.1.xml:57(refentrytitle) groups.1.xml:64(refname)
+#: groups.1.xml:70(command)
+msgid "groups"
+msgstr "groups"
+
+#: groups.1.xml:65(refpurpose)
+msgid "display current group names"
+msgstr "vis aktuelle gruppenavne"
+
+#: groups.1.xml:72(replaceable)
+msgid "user"
+msgstr "bruger"
+
+#: groups.1.xml:79(para)
+msgid ""
+"The <command>groups</command> command displays the current group names or ID "
+"values. If the value does not have a corresponding entry in <filename>/etc/"
+"group</filename>, the value will be displayed as the numerical group value. "
+"The optional <emphasis remap=\"I\">user</emphasis> parameter will display "
+"the groups for the named <emphasis remap=\"I\">user</emphasis>."
+msgstr ""
+
+#: groups.1.xml:91(para)
+msgid ""
+"Systems which do not support concurrent group sets will have the information "
+"from <filename>/etc/group</filename> reported. The user must use "
+"<command>newgrp</command> or <command>sg</command> to change his current "
+"real and effective group ID."
+msgstr ""
+
+#: groups.1.xml:113(para)
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+
+#: groupmod.8.xml:66(refpurpose)
+msgid "modify a group definition on the system"
+msgstr "ændr en gruppedefinition på systemet"
+
+#: groupmod.8.xml:75(replaceable) groupdel.8.xml:75(replaceable)
+msgid "GROUP"
+msgstr "GRUPPE"
+
+#: groupmod.8.xml:81(para)
+msgid ""
+"The <command>groupmod</command> command modifies the definition of the "
+"specified <replaceable>GROUP</replaceable> by modifying the appropriate "
+"entry in the group database."
+msgstr ""
+
+#: groupmod.8.xml:90(para)
+msgid "The options which apply to the <command>groupmod</command> command are:"
+msgstr ""
+
+#: groupmod.8.xml:96(term) groupadd.8.xml:114(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GID</"
+"replaceable>"
+msgstr ""
+
+#: groupmod.8.xml:100(para)
+msgid ""
+"The group ID of the given <replaceable>GROUP</replaceable> will be changed "
+"to <replaceable>GID</replaceable>."
+msgstr ""
+
+#: groupmod.8.xml:104(para)
+msgid ""
+"The value of <replaceable>GID</replaceable> must be a non-negative decimal "
+"integer. This value must be unique, unless the <option>-o</option> option is "
+"used."
+msgstr ""
+
+#: groupmod.8.xml:110(para)
+msgid ""
+"Users who use the group as primary group will be updated to keep the group "
+"as their primary group."
+msgstr ""
+"Brugere som bruger gruppen som primær gruppe vil blive opdateret for at "
+"beholde gruppen som deres primære gruppe."
+
+#: groupmod.8.xml:114(para)
+msgid ""
+"Any files that have the old group ID and must continue to belong to "
+"<replaceable>GROUP</replaceable>, must have their group ID changed manually."
+msgstr ""
+
+#: groupmod.8.xml:120(para)
+msgid ""
+"No checks will be performed with regard to the <option>GID_MIN</option>, "
+"<option>GID_MAX</option>, <option>SYS_GID_MIN</option>, or "
+"<option>SYS_GID_MAX</option> from <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: groupmod.8.xml:135(term)
+msgid ""
+"<option>-n</option>, <option>--new-name</option>&nbsp;"
+"<replaceable>NEW_GROUP</replaceable>"
+msgstr ""
+
+#: groupmod.8.xml:139(para)
+msgid ""
+"The name of the group will be changed from <replaceable>GROUP</replaceable> "
+"to <replaceable>NEW_GROUP</replaceable> name."
+msgstr ""
+
+#: groupmod.8.xml:150(para)
+msgid ""
+"When used with the <option>-g</option> option, allow to change the group "
+"<replaceable>GID</replaceable> to a non-unique value."
+msgstr ""
+
+#: groupmod.8.xml:259(para)
+msgid "E_SUCCESS: success"
+msgstr ""
+
+#: groupmod.8.xml:265(para)
+msgid "E_USAGE: invalid command syntax"
+msgstr ""
+
+#: groupmod.8.xml:271(para)
+#, fuzzy
+#| msgid "invalid argument to option"
+msgid "E_BAD_ARG: invalid argument to option"
+msgstr "Ugyldigt argument for tilvalg"
+
+#: groupmod.8.xml:277(para)
+#, fuzzy
+#| msgid "specified group doesn't exist"
+msgid "E_GID_IN_USE: specified group doesn't exist"
+msgstr "angivet gruppe findes ikke"
+
+#: groupmod.8.xml:283(para)
+#, fuzzy
+#| msgid "specified group doesn't exist"
+msgid "E_NOTFOUND: specified group doesn't exist"
+msgstr "angivet gruppe findes ikke"
+
+#: groupmod.8.xml:289(para)
+#, fuzzy
+#| msgid "group name already in use"
+msgid "E_NAME_IN_USE: group name already in use"
+msgstr "gruppenavn er allerede i brug"
+
+#: groupmod.8.xml:295(para)
+#, fuzzy
+#| msgid "can't update group files"
+msgid "E_GRP_UPDATE: can't update group file"
+msgstr "kan ikke opdatere gruppefiler"
+
+#: groupmod.8.xml:299(replaceable)
+msgid "11"
+msgstr ""
+
+#: groupmod.8.xml:301(para)
+msgid "E_CLEANUP_SERVICE: can't setup cleanup service"
+msgstr ""
+
+#: groupmod.8.xml:307(para)
+msgid "E_PAM_USERNAME: can't determine your username for use with pam"
+msgstr ""
+
+#: groupmod.8.xml:311(replaceable)
+msgid "13"
+msgstr "13"
+
+#: groupmod.8.xml:313(para)
+msgid ""
+"E_PAM_ERROR: pam returned an error, see syslog facility id groupmod for the "
+"PAM error message"
+msgstr ""
+
+#: groupmod.8.xml:253(para)
+msgid ""
+"The <command>groupmod</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Kommandoen <command>groupmod</command> findes med de følgende værdier: "
+"<placeholder-1/>"
+
+#: groupmod.8.xml:322(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: groupmems.8.xml:42(firstname)
+msgid "George"
+msgstr ""
+
+#: groupmems.8.xml:43(surname)
+msgid "Kraft"
+msgstr ""
+
+#: groupmems.8.xml:44(lineage)
+msgid "IV"
+msgstr ""
+
+#: groupmems.8.xml:45(contrib)
+msgid "Creation, 2000"
+msgstr ""
+
+#: groupmems.8.xml:69(refpurpose)
+msgid "administer members of a user's primary group"
+msgstr "administrer medlemmer for en brugers primære gruppe"
+
+#: groupmems.8.xml:76(replaceable) groupmems.8.xml:77(replaceable)
+msgid "user_name"
+msgstr ""
+
+#: groupmems.8.xml:76(arg)
+msgid "-a <placeholder-1/>"
+msgstr "-a <placeholder-1/>"
+
+#: groupmems.8.xml:77(arg)
+msgid "-d <placeholder-1/>"
+msgstr "-d <placeholder-1/>"
+
+#: groupmems.8.xml:78(replaceable)
+msgid "group_name"
+msgstr ""
+
+#: groupmems.8.xml:78(arg)
+msgid "-g <placeholder-1/>"
+msgstr ""
+
+#: groupmems.8.xml:79(arg)
+msgid "-l"
+msgstr "-l"
+
+#: groupmems.8.xml:86(para)
+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)
+msgid ""
+"Only the superuser, as administrator, can use <command>groupmems</command> "
+"to alter the memberships of other groups."
+msgstr ""
+
+#: groupmems.8.xml:101(para)
+msgid ""
+"The options which apply to the <command>groupmems</command> command are:"
+msgstr ""
+
+#: groupmems.8.xml:107(term)
+msgid ""
+"<option>-a</option>, <option>--add</option>&nbsp;<replaceable>user_name</"
+"replaceable>"
+msgstr ""
+
+#: groupmems.8.xml:109(para)
+#, fuzzy
+#| msgid "Add an user to the group membership list."
+msgid "Add a user to the group membership list."
+msgstr "Tilføj en bruger til listen over gruppemedlemmer."
+
+#: groupmems.8.xml:110(para) groupmems.8.xml:126(para)
+#: groupmems.8.xml:157(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, and the group has no "
+"entry in the <filename>/etc/gshadow</filename> file, a new entry will be "
+"created."
+msgstr ""
+"Hvis filen <filename>/etc/gshadow</filename> findes, og gruppen ikke har et "
+"punkt i filen <filename>/etc/gshadow</filename>, så vil et nyt punkt blive "
+"oprettet."
+
+#: groupmems.8.xml:118(term)
+msgid ""
+"<option>-d</option>, <option>--delete</option>&nbsp;<replaceable>user_name</"
+"replaceable>"
+msgstr ""
+
+#: groupmems.8.xml:120(para)
+msgid "Delete a user from the group membership list."
+msgstr "Slet en bruger fra listen over gruppemedlemskab."
+
+#: groupmems.8.xml:121(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, the user will be "
+"removed from the list of members and administrators of the group."
+msgstr ""
+
+#: groupmems.8.xml:134(term)
+msgid ""
+"<option>-g</option>, <option>--group</option>&nbsp;<replaceable>group_name</"
+"replaceable>"
+msgstr ""
+
+#: groupmems.8.xml:136(para)
+msgid "The superuser can specify which group membership list to modify."
+msgstr ""
+
+#: groupmems.8.xml:148(term) chage.1.xml:160(term)
+msgid "<option>-l</option>, <option>--list</option>"
+msgstr ""
+
+#: groupmems.8.xml:150(para)
+msgid "List the group membership list."
+msgstr ""
+
+#: groupmems.8.xml:154(term)
+msgid "<option>-p</option>, <option>--purge</option>"
+msgstr "<option>-p</option>, <option>--purge</option>"
+
+#: groupmems.8.xml:156(para)
+msgid "Purge all users from the group membership list."
+msgstr ""
+
+#: groupmems.8.xml:180(title)
+msgid "SETUP"
+msgstr ""
+
+#: groupmems.8.xml:181(para)
+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 2710 groupmems\n"
+"\t$ chown root.groups groupmems\n"
+"\t$ groupmems -g groups -a gk4\n"
+" "
+msgstr ""
+
+#: groupmems.8.xml:222(para)
+msgid "secure group account information"
+msgstr ""
+
+#: groupmems.8.xml:230(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: groupdel.8.xml:66(refpurpose)
+msgid "delete a group"
+msgstr "slet en gruppe"
+
+#: groupdel.8.xml:81(para)
+msgid ""
+"The <command>groupdel</command> command modifies the system account files, "
+"deleting all entries that refer to <replaceable>GROUP</replaceable>. The "
+"named group must exist."
+msgstr ""
+
+#: groupdel.8.xml:89(para)
+msgid "The options which apply to the <command>groupdel</command> command are:"
+msgstr "Tilvalgene som gælder for kommandoen <command>groupdel</command> er:"
+
+#: groupdel.8.xml:134(para)
+msgid ""
+"You may not remove the primary group of any existing user. You must remove "
+"the user before you remove the group."
+msgstr ""
+"De kan ikke fjerne den primære gruppe for en eksisterende bruger. Du skal "
+"fjerne brugeren før du fjerner gruppen."
+
+#: groupdel.8.xml:138(para)
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this group."
+msgstr ""
+"Du skal manuelt kontrollere alle filsystemer for at sikre dig, at ingen "
+"filer fortsat er ejet af denne gruppe."
+
+#: groupdel.8.xml:200(para)
+msgid "can't remove user's primary group"
+msgstr "Kan ikke fjerne brugers primære gruppe"
+
+#: groupdel.8.xml:176(para)
+msgid ""
+"The <command>groupdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Kommandoen <command>groupdel</command> findes med de følgende værdier: "
+"<placeholder-1/>"
+
+#: groupdel.8.xml:215(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+
+#: groupadd.8.xml:68(refpurpose)
+msgid "create a new group"
+msgstr "opret en ny gruppe"
+
+#: groupadd.8.xml:85(para)
+msgid ""
+"The <command>groupadd</command> command creates a new group account using "
+"the values specified on the command line plus the default values from the "
+"system. The new group will be entered into the system files as needed."
+msgstr ""
+
+#: groupadd.8.xml:94(para)
+msgid "The options which apply to the <command>groupadd</command> command are:"
+msgstr "Tilvalgene som gælder for kommandoen <command>groupadd</command> er:"
+
+#: groupadd.8.xml:104(para)
+msgid ""
+"This option causes the command to simply exit with success status if the "
+"specified group already exists. When used with <option>-g</option>, and the "
+"specified GID already exists, another (unique) GID is chosen (i.e. <option>-"
+"g</option> is turned off)."
+msgstr ""
+
+#: groupadd.8.xml:118(para)
+msgid ""
+"The numerical value of the group's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than or equal to "
+"<option>GID_MIN</option> and greater than every other group."
+msgstr ""
+
+#: groupadd.8.xml:124(para)
+msgid ""
+"See also the <option>-r</option> option and the <option>GID_MAX</option> "
+"description."
+msgstr ""
+"Se også tilvalget <option>-r</option> og beskrivelsen <option>GID_MAX</"
+"option>."
+
+#: groupadd.8.xml:141(para)
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (GID_MIN, GID_MAX "
+"and others). Multiple <option>-K</option> options can be specified."
+msgstr ""
+
+#: groupadd.8.xml:146(para)
+msgid ""
+"Example: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+"<replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+
+#: groupadd.8.xml:150(para)
+msgid ""
+"Note: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+"replaceable>=<replaceable>499</replaceable> doesn't work yet."
+msgstr ""
+
+#: groupadd.8.xml:161(para)
+msgid "This option permits to add a group with a non-unique GID."
+msgstr ""
+
+#: groupadd.8.xml:192(para)
+msgid "Create a system group."
+msgstr "Opret en systemgruppe."
+
+#: groupadd.8.xml:195(para)
+msgid ""
+"The numeric identifiers of new system groups are chosen in the "
+"<option>SYS_GID_MIN</option>-<option>SYS_GID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>GID_MIN</option>-"
+"<option>GID_MAX</option>."
+msgstr ""
+
+#: groupadd.8.xml:275(para)
+msgid ""
+"Groupnames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+
+#: groupadd.8.xml:281(para)
+msgid "Groupnames may only be up to &GROUP_NAME_MAX_LENGTH; characters long."
+msgstr ""
+
+#: groupadd.8.xml:284(para)
+msgid ""
+"You may not add a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+
+#: groupadd.8.xml:288(para)
+msgid ""
+"If the groupname already exists in an external group database such as NIS or "
+"LDAP, <command>groupadd</command> will deny the group creation request."
+msgstr ""
+
+#: groupadd.8.xml:321(para)
+msgid "GID not unique (when <option>-o</option> not used)"
+msgstr ""
+
+#: groupadd.8.xml:327(para)
+msgid "group name not unique"
+msgstr ""
+
+#: groupadd.8.xml:297(para)
+msgid ""
+"The <command>groupadd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+
+#: groupadd.8.xml:342(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: gpasswd.1.xml:44(firstname)
+msgid "Rafal"
+msgstr ""
+
+#: gpasswd.1.xml:45(surname)
+msgid "Maszkowski"
+msgstr ""
+
+#: gpasswd.1.xml:71(phrase)
+msgid "administer <placeholder-1/>"
+msgstr ""
+
+#: gpasswd.1.xml:74(phrase)
+msgid "administer <placeholder-1/> and <placeholder-2/>"
+msgstr ""
+
+#: gpasswd.1.xml:85(replaceable) expiry.1.xml:76(replaceable)
+msgid "option"
+msgstr ""
+
+#: gpasswd.1.xml:95(para)
+msgid ""
+"The <command>gpasswd</command> command is used to administer <filename>/etc/"
+"group</filename><phrase condition=\"gshadow\">, and <filename>/etc/gshadow</"
+"filename></phrase>. Every group can have <phrase condition=\"gshadow"
+"\">administrators,</phrase> members and a password."
+msgstr ""
+
+#: gpasswd.1.xml:103(para)
+msgid ""
+"System administrators can use the <option>-A</option> option to define group "
+"administrator(s) and the <option>-M</option> option to define members. They "
+"have all rights of group administrators and members."
+msgstr ""
+
+#: gpasswd.1.xml:108(para)
+msgid ""
+"<command>gpasswd</command> called by <phrase condition=\"gshadow\">a group "
+"administrator</phrase><phrase condition=\"no_gshadow\">a system "
+"administrator</phrase> with a group name only prompts for the new password "
+"of the <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:115(para)
+msgid ""
+"If a password is set the members can still use "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> without a password, and non-members must supply the password."
+msgstr ""
+
+#: gpasswd.1.xml:123(title)
+msgid "Notes about group passwords"
+msgstr ""
+
+#: gpasswd.1.xml:124(para)
+msgid ""
+"Group passwords are an inherent security problem since more than one person "
+"is permitted to know the password. However, groups are a useful tool for "
+"permitting co-operation between different users."
+msgstr ""
+
+#: gpasswd.1.xml:135(para)
+msgid ""
+"Except for the <option>-A</option> and <option>-M</option> options, the "
+"options cannot be combined."
+msgstr ""
+
+#: gpasswd.1.xml:139(para)
+msgid "The options cannot be combined."
+msgstr ""
+
+#: gpasswd.1.xml:142(para)
+msgid "The options which apply to the <command>gpasswd</command> command are:"
+msgstr ""
+
+#: gpasswd.1.xml:147(term)
+msgid ""
+"<option>-a</option>, <option>--add</option>&nbsp;<replaceable>user</"
+"replaceable>"
+msgstr ""
+
+#: gpasswd.1.xml:151(para)
+msgid ""
+"Add the <replaceable>user</replaceable> to the named <replaceable>group</"
+"replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:160(term)
+msgid ""
+"<option>-d</option>, <option>--delete</option>&nbsp;<replaceable>user</"
+"replaceable>"
+msgstr ""
+
+#: gpasswd.1.xml:164(para)
+msgid ""
+"Remove the <replaceable>user</replaceable> from the named "
+"<replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:181(term)
+msgid ""
+"<option>-Q</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</"
+"replaceable>"
+msgstr ""
+
+#: gpasswd.1.xml:195(term)
+msgid "<option>-r</option>, <option>--remove-password</option>"
+msgstr ""
+
+#: gpasswd.1.xml:199(para)
+msgid ""
+"Remove the password from the named <replaceable>group</replaceable>. The "
+"group password will be empty. Only group members will be allowed to use "
+"<command>newgrp</command> to join the named <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:211(term)
+msgid "<option>-R</option>, <option>--restrict</option>"
+msgstr ""
+
+#: gpasswd.1.xml:215(para)
+msgid ""
+"Restrict the access to the named <replaceable>group</replaceable>. The group "
+"password is set to \"!\". Only group members with a password will be allowed "
+"to use <command>newgrp</command> to join the named <replaceable>group</"
+"replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:227(term)
+msgid ""
+"<option>-A</option>, <option>--administrators</option>&nbsp;"
+"<replaceable>user</replaceable>,..."
+msgstr ""
+
+#: gpasswd.1.xml:231(para)
+msgid "Set the list of administrative users."
+msgstr ""
+
+#: gpasswd.1.xml:239(term)
+msgid ""
+"<option>-M</option>, <option>--members</option>&nbsp;<replaceable>user</"
+"replaceable>,..."
+msgstr ""
+
+#: gpasswd.1.xml:243(para)
+msgid "Set the list of group members."
+msgstr ""
+
+#: gpasswd.1.xml:253(para)
+msgid ""
+"This tool only operates on the <filename>/etc/group</filename><phrase "
+"condition=\"gshadow\"> and <filename>/etc/gshadow</filename> files.</"
+"phrase><phrase condition=\"no_gshadow\">file.</phrase> Thus you cannot "
+"change any NIS or LDAP group. This must be performed on the corresponding "
+"server."
+msgstr ""
+
+#: gpasswd.1.xml:298(para)
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition="
+"\"gshadow\">, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+msgstr ""
+
+#: faillog.8.xml:57(refentrytitle) faillog.8.xml:64(refname)
+#: faillog.8.xml:70(command) faillog.5.xml:57(refentrytitle)
+#: faillog.5.xml:64(refname) faillog.5.xml:111(refentrytitle)
+msgid "faillog"
+msgstr ""
+
+#: faillog.8.xml:65(refpurpose)
+msgid "display faillog records or set login failure limits"
+msgstr ""
+
+#: faillog.8.xml:79(para)
+msgid ""
+"<command>faillog</command> displays the contents of the failure log database "
+"(<filename>/var/log/faillog</filename>). It can also set the failure "
+"counters and limits. When <command>faillog</command> is run without "
+"arguments, it only displays the faillog records of the users who had a login "
+"failure."
+msgstr ""
+
+#: faillog.8.xml:90(para)
+msgid "The options which apply to the <command>faillog</command> command are:"
+msgstr ""
+
+#: faillog.8.xml:98(para)
+msgid ""
+"Display (or act on) faillog records for all users having an entry in the "
+"<filename>faillog</filename> database."
+msgstr ""
+
+#: faillog.8.xml:102(para)
+msgid ""
+"The range of users can be restricted with the <option>-u</option> option."
+msgstr ""
+
+#: faillog.8.xml:106(para)
+msgid ""
+"In display mode, this is still restricted to existing users but forces the "
+"display of the faillog entries even if they are empty."
+msgstr ""
+
+#: faillog.8.xml:111(para)
+msgid ""
+"With the <option>-l</option>, <option>-m</option>, <option>-r</option>, "
+"<option>-t</option> options, the users' records are changed, even if the "
+"user does not exist on the system. This is useful to reset records of users "
+"that have been deleted or to set a policy in advance for a range of users."
+msgstr ""
+
+#: faillog.8.xml:128(term)
+msgid ""
+"<option>-l</option>, <option>--lock-secs</option>&nbsp;<replaceable>SEC</"
+"replaceable>"
+msgstr ""
+
+#: faillog.8.xml:132(para)
+msgid ""
+"Lock account for <replaceable>SEC</replaceable> seconds after failed login."
+msgstr ""
+
+#: faillog.8.xml:136(para) faillog.8.xml:161(para) faillog.8.xml:173(para)
+msgid ""
+"Write access to <filename>/var/log/faillog</filename> is required for this "
+"option."
+msgstr ""
+
+#: faillog.8.xml:143(term)
+msgid ""
+"<option>-m</option>, <option>--maximum</option>&nbsp;<replaceable>MAX</"
+"replaceable>"
+msgstr ""
+
+#: faillog.8.xml:147(para)
+msgid ""
+"Set the maximum number of login failures after the account is disabled to "
+"<replaceable>MAX</replaceable>."
+msgstr ""
+
+#: faillog.8.xml:151(para)
+msgid ""
+"Selecting a <replaceable>MAX</replaceable> value of 0 has the effect of not "
+"placing a limit on the number of failed logins."
+msgstr ""
+
+#: faillog.8.xml:156(para)
+msgid ""
+"The maximum failure count should always be 0 for <emphasis>root</emphasis> "
+"to prevent a denial of services attack against the system."
+msgstr ""
+
+#: faillog.8.xml:168(term)
+msgid "<option>-r</option>, <option>--reset</option>"
+msgstr ""
+
+#: faillog.8.xml:170(para)
+msgid "Reset the counters of login failures."
+msgstr ""
+
+#: faillog.8.xml:195(para)
+msgid ""
+"Display faillog records more recent than <replaceable>DAYS</replaceable>."
+msgstr ""
+
+#: faillog.8.xml:206(para)
+msgid ""
+"Display faillog record or maintains failure counters and limits (if used "
+"with <option>-l</option>, <option>-m</option> or <option>-r</option> "
+"options) only for the specified user(s)."
+msgstr ""
+
+#: faillog.8.xml:224(para)
+msgid ""
+"When none of the <option>-l</option>, <option>-m</option>, or <option>-r</"
+"option> options are used, <command>faillog</command> displays the faillog "
+"record of the specified user(s)."
+msgstr ""
+
+#: faillog.8.xml:233(para)
+msgid ""
+"<command>faillog</command> only prints out users with no successful login "
+"since the last failure. To print out a user who has had a successful login "
+"since their last failure, you must explicitly request the user with the "
+"<option>-u</option> flag, or print out all users with the <option>-a</"
+"option> flag."
+msgstr ""
+
+#: faillog.8.xml:246(filename) faillog.5.xml:99(filename)
+msgid "/var/log/faillog"
+msgstr ""
+
+#: faillog.8.xml:248(para) faillog.5.xml:101(para)
+msgid "Failure logging file."
+msgstr ""
+
+#: faillog.8.xml:256(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>faillog</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: faillog.5.xml:65(refpurpose)
+msgid "login failure logging file"
+msgstr ""
+
+#: faillog.5.xml:70(para)
+msgid ""
+"<filename>/var/log/faillog</filename> maintains a count of login failures "
+"and the limits for each account."
+msgstr ""
+
+#: faillog.5.xml:74(para)
+msgid ""
+"The file contains fixed length records, indexed by numerical UID. Each "
+"record contains the count of login failures since the last successful login; "
+"the maximum number of failures before the account is disabled; the line on "
+"which the last login failure occurred; the date of the last login failure; "
+"and the duration (in seconds) during which the account will be locked after "
+"a failure."
+msgstr ""
+
+#: faillog.5.xml:84(para)
+msgid "The structure of the file is:"
+msgstr "Strukturen for filen er:"
+
+#: faillog.5.xml:85(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort fail_cnt;\n"
+"\tshort fail_max;\n"
+"\tchar fail_line[12];\n"
+"\ttime_t fail_time;\n"
+"\tlong fail_locktime;\n"
+"};"
+msgstr ""
+
+#: expiry.1.xml:45(contrib) chsh.1.xml:44(contrib) chfn.1.xml:44(contrib)
+#: chage.1.xml:42(contrib)
+msgid "Creation, 1990"
+msgstr ""
+
+#: expiry.1.xml:61(refentrytitle) expiry.1.xml:68(refname)
+#: expiry.1.xml:74(command)
+msgid "expiry"
+msgstr ""
+
+#: expiry.1.xml:69(refpurpose)
+msgid "check and enforce password expiration policy"
+msgstr ""
+
+#: expiry.1.xml:83(para)
+msgid ""
+"The <command>expiry</command> command checks (<option>-c</option>) the "
+"current password expiration and forces (<option>-f</option>) changes when "
+"required. It is callable as a normal user command."
+msgstr ""
+
+#: expiry.1.xml:92(para)
+msgid "The options which apply to the <command>expiry</command> command are:"
+msgstr ""
+
+#: expiry.1.xml:97(term)
+msgid "<option>-c</option>, <option>--check</option>"
+msgstr ""
+
+#: expiry.1.xml:99(para)
+msgid "Check the password expiration of the current user."
+msgstr ""
+
+#: expiry.1.xml:105(para)
+msgid "Force a password change if the current user has an expired password."
+msgstr ""
+
+#: expiry.1.xml:140(para) chage.1.xml:318(para)
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: chsh.1.xml:68(refpurpose)
+msgid "change login shell"
+msgstr ""
+
+#: chsh.1.xml:85(para)
+msgid ""
+"The <command>chsh</command> command changes the user login shell. This "
+"determines the name of the user's initial login command. A normal user may "
+"only change the login shell for her own account; the superuser may change "
+"the login shell for any account."
+msgstr ""
+
+#: chsh.1.xml:96(para)
+msgid "The options which apply to the <command>chsh</command> command are:"
+msgstr ""
+
+#: chsh.1.xml:130(para)
+msgid ""
+"If the <option>-s</option> option is not selected, <command>chsh</command> "
+"operates in an interactive fashion, prompting the user with the current "
+"login shell. Enter the new value to change the shell, or leave the line "
+"blank to use the current one. The current shell is displayed between a pair "
+"of <emphasis>[ ]</emphasis> marks."
+msgstr ""
+
+#: chsh.1.xml:141(para)
+msgid ""
+"The only restriction placed on the login shell is that the command name must "
+"be listed in <filename>/etc/shells</filename>, unless the invoker is the "
+"superuser, and then any value may be added. An account with a restricted "
+"login shell may not change her login shell. For this reason, placing "
+"<filename>/bin/rsh</filename> in <filename>/etc/shells</filename> is "
+"discouraged since accidentally changing to a restricted shell would prevent "
+"the user from ever changing her login shell back to its original value."
+msgstr ""
+
+#: chsh.1.xml:176(filename)
+msgid "/etc/shells"
+msgstr ""
+
+#: chsh.1.xml:178(para)
+msgid "List of valid login shells."
+msgstr ""
+
+#: chsh.1.xml:192(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+
+#: chpasswd.8.xml:69(refpurpose)
+msgid "update passwords in batch mode"
+msgstr ""
+
+#: chpasswd.8.xml:83(para)
+msgid ""
+"The <command>chpasswd</command> command reads a list of user name and "
+"password pairs from standard input and uses this information to update a "
+"group of existing users. Each line is of the format:"
+msgstr ""
+
+#: chpasswd.8.xml:88(para)
+msgid ""
+"<emphasis remap=\"I\">user_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+
+#: chpasswd.8.xml:92(para)
+msgid ""
+"By default the passwords must be supplied in clear-text, and are encrypted "
+"by <command>chpasswd</command>. Also the password age will be updated, if "
+"present."
+msgstr ""
+
+#: chpasswd.8.xml:97(para)
+msgid ""
+"The default encryption algorithm can be defined for the system with the "
+"<option>ENCRYPT_METHOD</option> or <option>MD5_CRYPT_ENAB</option> variables "
+"of <filename>/etc/login.defs</filename>, and can be overwritten with the "
+"<option>-e</option>, <option>-m</option>, or <option>-c</option> options."
+msgstr ""
+
+#: chpasswd.8.xml:105(para)
+msgid ""
+"By default, passwords are encrypted by PAM, but (even if not recommended) "
+"you can select a different encryption method with the <option>-e</option>, "
+"<option>-m</option>, or <option>-c</option> options."
+msgstr ""
+
+#: chpasswd.8.xml:111(para)
+msgid ""
+"<phrase condition=\"pam\">Except when PAM is used to encrypt the passwords,</"
+"phrase><command>chpasswd</command> first updates all the passwords in "
+"memory, and then commits all the changes to disk if no errors occurred for "
+"any user."
+msgstr ""
+
+#: chpasswd.8.xml:117(para)
+msgid ""
+"When PAM is used to encrypt the passwords (and update the passwords in the "
+"system database) then if a password cannot be updated <command>chpasswd</"
+"command> continues updating the passwords of the next users, and will return "
+"an error code on exit."
+msgstr ""
+
+#: chpasswd.8.xml:123(para) chgpasswd.8.xml:98(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are created at a single time."
+msgstr ""
+
+#: chpasswd.8.xml:131(para)
+msgid "The options which apply to the <command>chpasswd</command> command are:"
+msgstr ""
+
+#: chpasswd.8.xml:137(term)
+msgid ""
+"<option>-c</option>, <option>--crypt-method</option>&nbsp;"
+"<replaceable>METHOD</replaceable>"
+msgstr ""
+
+#: chpasswd.8.xml:142(para) chgpasswd.8.xml:115(para)
+msgid "The available methods are DES, MD5, and NONE."
+msgstr ""
+
+#: chpasswd.8.xml:149(para)
+msgid "By default, PAM is used to encrypt the passwords."
+msgstr ""
+
+#: chpasswd.8.xml:152(para)
+msgid ""
+"By default (if none of the <option>-c</option>, <option>-m</option>, or "
+"<option>-e</option> options are specified), the encryption method is defined "
+"by the <option>ENCRYPT_METHOD</option> or <option>MD5_CRYPT_ENAB</option> "
+"variables of <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: chpasswd.8.xml:163(term) chgpasswd.8.xml:125(term)
+msgid "<option>-e</option>, <option>--encrypted</option>"
+msgstr ""
+
+#: chpasswd.8.xml:165(para) chgpasswd.8.xml:127(para)
+msgid "Supplied passwords are in encrypted form."
+msgstr ""
+
+#: chpasswd.8.xml:179(term) chgpasswd.8.xml:137(term)
+msgid "<option>-m</option>, <option>--md5</option>"
+msgstr ""
+
+#: chpasswd.8.xml:181(para) chgpasswd.8.xml:139(para)
+msgid ""
+"Use MD5 encryption instead of DES when the supplied passwords are not "
+"encrypted."
+msgstr ""
+
+#: chpasswd.8.xml:200(term)
+msgid ""
+"<option>-s</option>, <option>--sha-rounds</option>&nbsp;<replaceable>ROUNDS</"
+"replaceable>"
+msgstr ""
+
+#: chpasswd.8.xml:219(para)
+msgid ""
+"By default, the number of rounds is defined by the "
+"<option>SHA_CRYPT_MIN_ROUNDS</option> and <option>SHA_CRYPT_MAX_ROUNDS</"
+"option> variables in <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: chpasswd.8.xml:232(para) chgpasswd.8.xml:187(para)
+msgid ""
+"Remember to set permissions or umask to prevent readability of unencrypted "
+"files by other users."
+msgstr ""
+
+#: chpasswd.8.xml:276(filename)
+msgid "/etc/pam.d/chpasswd"
+msgstr ""
+
+#: chpasswd.8.xml:278(para)
+msgid "PAM configuration for <command>chpasswd</command>."
+msgstr ""
+
+#: chpasswd.8.xml:286(para)
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>newusers</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<phrase><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: chgpasswd.8.xml:47(contrib)
+msgid "Creation, 2006"
+msgstr ""
+
+#: chgpasswd.8.xml:65(refpurpose)
+msgid "update group passwords in batch mode"
+msgstr ""
+
+#: chgpasswd.8.xml:79(para)
+msgid ""
+"The <command>chgpasswd</command> command reads a list of group name and "
+"password pairs from standard input and uses this information to update a set "
+"of existing groups. Each line is of the format:"
+msgstr ""
+
+#: chgpasswd.8.xml:84(para)
+msgid ""
+"<emphasis remap=\"I\">group_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+
+#: chgpasswd.8.xml:88(para)
+msgid ""
+"By default the supplied password must be in clear-text, and is encrypted by "
+"<command>chgpasswd</command>."
+msgstr ""
+
+#: chgpasswd.8.xml:92(para)
+msgid ""
+"The default encryption algorithm can be defined for the system with the "
+"<option>ENCRYPT_METHOD</option> variable of <filename>/etc/login.defs</"
+"filename>, and can be overwritten with the <option>-e</option>, <option>-m</"
+"option>, or <option>-c</option> options."
+msgstr ""
+
+#: chgpasswd.8.xml:106(para)
+msgid ""
+"The options which apply to the <command>chgpasswd</command> command are:"
+msgstr ""
+
+#: chgpasswd.8.xml:238(para)
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+msgstr ""
+
+#: chfn.1.xml:68(refpurpose)
+msgid "change real user name and information"
+msgstr ""
+
+#: chfn.1.xml:85(para)
+msgid ""
+"The <command>chfn</command> command changes user fullname, office room "
+"number, office phone number, and home phone number information for a user's "
+"account. This information is typically printed by "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> and similar programs. A normal user may only change the fields "
+"for her own account, subject to the restrictions in <filename>/etc/login."
+"defs</filename>. (The default configuration is to prevent users from "
+"changing their fullname.) The superuser may change any field for any "
+"account. Additionally, only the superuser may use the <option>-o</option> "
+"option to change the undefined portions of the GECOS field."
+msgstr ""
+
+#: chfn.1.xml:99(para)
+msgid ""
+"These fields must not contain any colons. Except for the <emphasis remap=\"I"
+"\">other</emphasis> field, they should not contain any comma or equal sign. "
+"It is also recommended to avoid non-US-ASCII characters, but this is only "
+"enforced for the phone numbers. The <emphasis remap=\"I\">other</emphasis> "
+"field is used to store accounting information used by other applications."
+msgstr ""
+
+#: chfn.1.xml:112(para)
+msgid "The options which apply to the <command>chfn</command> command are:"
+msgstr "Tilvalgende som gælder for kommandoen <command>chfn</command> er:"
+
+#: chfn.1.xml:117(term)
+msgid ""
+"<option>-f</option>, <option>--full-name</option>&nbsp;"
+"<replaceable>FULL_NAME</replaceable>"
+msgstr ""
+"<option>-f</option>, <option>--full-name</option>&nbsp;<replaceable>NAVN</"
+"replaceable>"
+
+#: chfn.1.xml:121(para)
+msgid "Change the user's full name."
+msgstr "Ændr brugerens navn."
+
+#: chfn.1.xml:125(term)
+msgid ""
+"<option>-h</option>, <option>--home-phone</option>&nbsp;"
+"<replaceable>HOME_PHONE</replaceable>"
+msgstr ""
+"<option>-h</option>, <option>--home-phone</option>&nbsp;"
+"<replaceable>TELEFONNUMMER</replaceable>"
+
+#: chfn.1.xml:129(para)
+msgid "Change the user's home phone number."
+msgstr "Ændr brugerens telefonnummer."
+
+#: chfn.1.xml:133(term)
+msgid ""
+"<option>-o</option>, <option>--other</option>&nbsp;<replaceable>OTHER</"
+"replaceable>"
+msgstr ""
+"<option>-o</option>, <option>--other</option>&nbsp;<replaceable>ANDEN</"
+"replaceable>"
+
+#: chfn.1.xml:137(para)
+msgid ""
+"Change the user's other GECOS information. This field is used to store "
+"accounting information used by other applications, and can be changed only "
+"by a superuser."
+msgstr ""
+"Ændr brugerens anden GECOS-information. Dette felt bruges til at gemme "
+"kontoinformation brugt af andre programmer, og kan kun ændres af en "
+"superbruger."
+
+#: chfn.1.xml:145(term)
+msgid ""
+"<option>-r</option>, <option>--room</option>&nbsp;<replaceable>ROOM_NUMBER</"
+"replaceable>"
+msgstr ""
+"<option>-r</option>, <option>--room</option>&nbsp;"
+"<replaceable>VÆRELSESNUMMER</replaceable>"
+
+#: chfn.1.xml:149(para)
+msgid "Change the user's room number."
+msgstr "Ændr brugerens værelsesnummer."
+
+#: chfn.1.xml:165(term)
+msgid "<option>-u</option>, <option>--help</option>"
+msgstr "<option>-u</option>, <option>--help</option>"
+
+#: chfn.1.xml:173(term)
+msgid ""
+"<option>-w</option>, <option>--work-phone</option>&nbsp;"
+"<replaceable>WORK_PHONE</replaceable>"
+msgstr ""
+"<option>-w</option>, <option>--work-phone</option>&nbsp;"
+"<replaceable>ARBEJDSTELEFON</replaceable>"
+
+#: chfn.1.xml:177(para)
+msgid "Change the user's office phone number."
+msgstr "Ændr brugerens arbejdsnummer."
+
+#: chfn.1.xml:181(para)
+msgid ""
+"If none of the options are selected, <command>chfn</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis remap=\"B\">[ ]</emphasis> marks. Without options, <command>chfn</"
+"command> prompts for the current user account."
+msgstr ""
+
+#: chfn.1.xml:226(para)
+msgid ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+
+#: chage.1.xml:66(refpurpose)
+msgid "change user password expiry information"
+msgstr "ændr udløbsinformation om brugeradgangskode"
+
+#: 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 their password."
+msgstr ""
+
+#: chage.1.xml:92(para)
+msgid "The options which apply to the <command>chage</command> command are:"
+msgstr "Tilvalgene som gælder for kommandoen <command>chage</command> er:"
+
+#: chage.1.xml:97(term)
+msgid ""
+"<option>-d</option>, <option>--lastday</option>&nbsp;<replaceable>LAST_DAY</"
+"replaceable>"
+msgstr ""
+
+#: chage.1.xml:101(para)
+msgid ""
+"Set the number of days since January 1st, 1970 when the password was last "
+"changed. The date may also be expressed in the format YYYY-MM-DD (or the "
+"format more commonly used in your area)."
+msgstr ""
+
+#: chage.1.xml:109(term)
+msgid ""
+"<option>-E</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>EXPIRE_DATE</replaceable>"
+msgstr ""
+
+#: chage.1.xml:113(para)
+msgid ""
+"Set the date or number of days since January 1, 1970 on which the user's "
+"account will no longer be accessible. The date may also be expressed in the "
+"format YYYY-MM-DD (or the format more commonly used in your area). A user "
+"whose account is locked must contact the system administrator before being "
+"able to use the system again."
+msgstr ""
+
+#: chage.1.xml:121(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>EXPIRE_DATE</replaceable> will remove an account expiration "
+"date."
+msgstr ""
+
+#: chage.1.xml:135(term)
+#, fuzzy
+#| msgid "<option>-u</option>, <option>--user</option>"
+msgid "<option>-i</option>, <option>--iso8601</option>"
+msgstr "<option>-u</option>, <option>--user</option>"
+
+#: chage.1.xml:137(para)
+msgid "When printing dates, use YYYY-MM-DD format."
+msgstr ""
+
+#: chage.1.xml:141(term)
+msgid ""
+"<option>-I</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+
+#: chage.1.xml:145(para)
+msgid ""
+"Set the number of days of inactivity after a password has expired before the "
+"account is locked. The <replaceable>INACTIVE</replaceable> option is the "
+"number of days of inactivity. A user whose account is locked must contact "
+"the system administrator before being able to use the system again."
+msgstr ""
+
+#: chage.1.xml:152(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>INACTIVE</replaceable> will remove an account's inactivity."
+msgstr ""
+
+#: chage.1.xml:164(para)
+msgid "Show account aging information."
+msgstr ""
+
+#: chage.1.xml:170(term)
+msgid ""
+"<option>-m</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+
+#: chage.1.xml:182(term)
+msgid ""
+"<option>-M</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+
+#: chage.1.xml:186(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 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:215(term)
+msgid ""
+"<option>-W</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>WARN_DAYS</replaceable>"
+msgstr ""
+
+#: chage.1.xml:219(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 their password is about to "
+"expire."
+msgstr ""
+
+#: chage.1.xml:228(para)
+msgid ""
+"If none of the options are selected, <command>chage</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis>[ ]</emphasis> marks."
+msgstr ""
+
+#: chage.1.xml:238(para)
+msgid ""
+"The <command>chage</command> program requires a shadow password file to be "
+"available."
+msgstr ""
+"Programmet <command>chage</command> kræver at en adgangskodefil for shadow "
+"er tilgængelig."
+
+#: chage.1.xml:242(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 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 "
+"upriviligeret bruger til at bestemme hvornår denne brugers adgangskode eller "
+"konto står til at udløbe."
+
+#: chage.1.xml:307(replaceable)
+msgid "15"
+msgstr "15"
+
+#: chage.1.xml:309(para)
+msgid "can't find the shadow password file"
+msgstr "Kan ikke finde shadows adgangskodefil"
+
+#: chage.1.xml:285(para)
+msgid ""
+"The <command>chage</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Kommandoen <command>chage</command> findes med de følgende værdier: "
+"<placeholder-1/>"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
+#: chage.1.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
+#~ msgid ""
+#~ "You can use the <option>--</option> argument to separate <command>su</"
+#~ "command> options from the arguments supplied to the shell."
+#~ msgstr ""
+#~ "Du kan bruge argumentet <option>--</option> til at adskille <command>su</"
+#~ "command>-tilvalg fra argumenterne angivet til skallen."
+
+#~ msgid "can't create mail spool"
+#~ msgstr "kan ikke oprette postkø"
diff --git a/man/po/de.po b/man/po/de.po
new file mode 100644
index 0000000..c7bb0d1
--- /dev/null
+++ b/man/po/de.po
@@ -0,0 +1,10879 @@
+# German translation of shadow-man-pages
+# Copyright (C) 2006 Free Software Foundation, Inc.
+# Simon Brandmair <sbrandmair@gmx.net>, 2005, 2006, 2007, 2011, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow-man-pages\n"
+"POT-Creation-Date: 2020-01-23 15:00-0600\n"
+"PO-Revision-Date: 2013-08-23 01:36+0200\n"
+"Last-Translator: Simon Brandmair <sbrandmair@gmx.net>\n"
+"Language-Team: debian-l10n-german <http://lists.debian.org/debian-l10n-"
+"german/>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: vipw.8.xml:41(firstname) suauth.5.xml:39(firstname)
+#: pwconv.8.xml:45(firstname) login.access.5.xml:40(firstname)
+msgid "Marek"
+msgstr "Marek"
+
+#: vipw.8.xml:42(surname) suauth.5.xml:40(surname) pwconv.8.xml:46(surname)
+#: login.access.5.xml:41(surname)
+msgid "Michałkiewicz"
+msgstr "Michałkiewicz"
+
+#: vipw.8.xml:43(contrib) limits.5.xml:43(contrib)
+msgid "Creation, 1997"
+msgstr "ursprünglicher Autor, 1997"
+
+#: vipw.8.xml:46(firstname) usermod.8.xml:51(firstname)
+#: userdel.8.xml:50(firstname) useradd.8.xml:63(firstname)
+#: suauth.5.xml:44(firstname) su.1.xml:61(firstname) sg.1.xml:45(firstname)
+#: shadow.5.xml:44(firstname) shadow.3.xml:44(firstname)
+#: pwconv.8.xml:50(firstname) pwck.8.xml:50(firstname)
+#: porttime.5.xml:44(firstname) passwd.5.xml:44(firstname)
+#: passwd.1.xml:51(firstname) newusers.8.xml:60(firstname)
+#: newgrp.1.xml:45(firstname) logoutd.8.xml:44(firstname)
+#: login.defs.5.xml:111(firstname) login.access.5.xml:45(firstname)
+#: login.1.xml:77(firstname) limits.5.xml:46(firstname)
+#: lastlog.8.xml:46(firstname) grpck.8.xml:45(firstname)
+#: groups.1.xml:44(firstname) groupmod.8.xml:45(firstname)
+#: groupmems.8.xml:48(firstname) groupdel.8.xml:45(firstname)
+#: groupadd.8.xml:47(firstname) gpasswd.1.xml:49(firstname)
+#: faillog.8.xml:44(firstname) faillog.5.xml:44(firstname)
+#: expiry.1.xml:48(firstname) chsh.1.xml:47(firstname)
+#: chpasswd.8.xml:48(firstname) chgpasswd.8.xml:44(firstname)
+#: chfn.1.xml:47(firstname) chage.1.xml:45(firstname)
+msgid "Thomas"
+msgstr "Thomas"
+
+#: vipw.8.xml:47(surname) usermod.8.xml:52(surname) userdel.8.xml:51(surname)
+#: useradd.8.xml:64(surname) suauth.5.xml:45(surname) su.1.xml:62(surname)
+#: sg.1.xml:46(surname) shadow.5.xml:45(surname) shadow.3.xml:45(surname)
+#: pwconv.8.xml:51(surname) pwck.8.xml:51(surname) porttime.5.xml:45(surname)
+#: passwd.5.xml:45(surname) passwd.1.xml:52(surname) newusers.8.xml:61(surname)
+#: newgrp.1.xml:46(surname) logoutd.8.xml:45(surname)
+#: login.defs.5.xml:112(surname) login.access.5.xml:46(surname)
+#: login.1.xml:78(surname) limits.5.xml:47(surname) lastlog.8.xml:47(surname)
+#: grpck.8.xml:46(surname) groups.1.xml:45(surname) groupmod.8.xml:46(surname)
+#: groupmems.8.xml:49(surname) groupdel.8.xml:46(surname)
+#: groupadd.8.xml:48(surname) gpasswd.1.xml:50(surname)
+#: faillog.8.xml:45(surname) faillog.5.xml:45(surname) expiry.1.xml:49(surname)
+#: chsh.1.xml:48(surname) chpasswd.8.xml:49(surname)
+#: chgpasswd.8.xml:45(surname) chfn.1.xml:48(surname) chage.1.xml:46(surname)
+msgid "Kłoczko"
+msgstr "Kłoczko"
+
+#: vipw.8.xml:48(email) usermod.8.xml:53(email) userdel.8.xml:52(email)
+#: useradd.8.xml:65(email) suauth.5.xml:46(email) su.1.xml:63(email)
+#: sg.1.xml:47(email) shadow.5.xml:46(email) shadow.3.xml:46(email)
+#: pwconv.8.xml:52(email) pwck.8.xml:52(email) porttime.5.xml:46(email)
+#: passwd.5.xml:46(email) passwd.1.xml:53(email) newusers.8.xml:62(email)
+#: newgrp.1.xml:47(email) logoutd.8.xml:46(email) login.defs.5.xml:113(email)
+#: login.access.5.xml:47(email) login.1.xml:79(email) limits.5.xml:48(email)
+#: lastlog.8.xml:48(email) grpck.8.xml:47(email) groups.1.xml:46(email)
+#: groupmod.8.xml:47(email) groupmems.8.xml:50(email) groupdel.8.xml:47(email)
+#: groupadd.8.xml:49(email) gpasswd.1.xml:51(email) faillog.8.xml:46(email)
+#: faillog.5.xml:46(email) expiry.1.xml:50(email) chsh.1.xml:49(email)
+#: chpasswd.8.xml:50(email) chgpasswd.8.xml:46(email) chfn.1.xml:49(email)
+#: chage.1.xml:47(email)
+msgid "kloczek@pld.org.pl"
+msgstr "kloczek@pld.org.pl"
+
+#: vipw.8.xml:49(contrib) usermod.8.xml:54(contrib) userdel.8.xml:53(contrib)
+#: useradd.8.xml:66(contrib) suauth.5.xml:47(contrib) su.1.xml:64(contrib)
+#: sg.1.xml:48(contrib) shadow.5.xml:47(contrib) shadow.3.xml:47(contrib)
+#: pwconv.8.xml:53(contrib) pwck.8.xml:53(contrib) porttime.5.xml:47(contrib)
+#: passwd.5.xml:47(contrib) passwd.1.xml:54(contrib) newusers.8.xml:63(contrib)
+#: newgrp.1.xml:48(contrib) logoutd.8.xml:47(contrib)
+#: login.defs.5.xml:114(contrib) login.access.5.xml:48(contrib)
+#: login.1.xml:80(contrib) limits.5.xml:49(contrib) lastlog.8.xml:49(contrib)
+#: grpck.8.xml:48(contrib) groups.1.xml:47(contrib) groupmod.8.xml:48(contrib)
+#: groupmems.8.xml:51(contrib) groupdel.8.xml:48(contrib)
+#: groupadd.8.xml:50(contrib) gpasswd.1.xml:52(contrib)
+#: faillog.8.xml:47(contrib) faillog.5.xml:47(contrib) expiry.1.xml:51(contrib)
+#: chsh.1.xml:50(contrib) chpasswd.8.xml:51(contrib) chfn.1.xml:50(contrib)
+#: chage.1.xml:48(contrib)
+msgid "shadow-utils maintainer, 2000 - 2007"
+msgstr "shadow-utils-Betreuer, 2000 - 2007"
+
+#: vipw.8.xml:52(firstname) usermod.8.xml:57(firstname)
+#: userdel.8.xml:56(firstname) useradd.8.xml:69(firstname)
+#: suauth.5.xml:50(firstname) su.1.xml:67(firstname) sg.1.xml:51(firstname)
+#: shadow.5.xml:50(firstname) shadow.3.xml:50(firstname)
+#: pwconv.8.xml:56(firstname) pwck.8.xml:56(firstname)
+#: porttime.5.xml:50(firstname) passwd.5.xml:50(firstname)
+#: passwd.1.xml:57(firstname) nologin.8.xml:39(firstname)
+#: newusers.8.xml:66(firstname) newgrp.1.xml:51(firstname)
+#: logoutd.8.xml:50(firstname) login.defs.5.xml:117(firstname)
+#: login.access.5.xml:51(firstname) login.1.xml:83(firstname)
+#: limits.5.xml:52(firstname) lastlog.8.xml:52(firstname)
+#: gshadow.5.xml:38(firstname) grpck.8.xml:51(firstname)
+#: groups.1.xml:50(firstname) groupmod.8.xml:51(firstname)
+#: groupmems.8.xml:54(firstname) groupdel.8.xml:51(firstname)
+#: groupadd.8.xml:53(firstname) gpasswd.1.xml:55(firstname)
+#: faillog.8.xml:50(firstname) faillog.5.xml:50(firstname)
+#: expiry.1.xml:54(firstname) chsh.1.xml:53(firstname)
+#: chpasswd.8.xml:54(firstname) chgpasswd.8.xml:50(firstname)
+#: chfn.1.xml:53(firstname) chage.1.xml:51(firstname)
+msgid "Nicolas"
+msgstr "Nicolas"
+
+#: vipw.8.xml:53(surname) usermod.8.xml:58(surname) userdel.8.xml:57(surname)
+#: useradd.8.xml:70(surname) suauth.5.xml:51(surname) su.1.xml:68(surname)
+#: sg.1.xml:52(surname) shadow.5.xml:51(surname) shadow.3.xml:51(surname)
+#: pwconv.8.xml:57(surname) pwck.8.xml:57(surname) porttime.5.xml:51(surname)
+#: passwd.5.xml:51(surname) passwd.1.xml:58(surname) nologin.8.xml:40(surname)
+#: newusers.8.xml:67(surname) newgrp.1.xml:52(surname)
+#: logoutd.8.xml:51(surname) login.defs.5.xml:118(surname)
+#: login.access.5.xml:52(surname) login.1.xml:84(surname)
+#: limits.5.xml:53(surname) lastlog.8.xml:53(surname) gshadow.5.xml:39(surname)
+#: grpck.8.xml:52(surname) groups.1.xml:51(surname) groupmod.8.xml:52(surname)
+#: groupmems.8.xml:55(surname) groupdel.8.xml:52(surname)
+#: groupadd.8.xml:54(surname) gpasswd.1.xml:56(surname)
+#: faillog.8.xml:51(surname) faillog.5.xml:51(surname) expiry.1.xml:55(surname)
+#: chsh.1.xml:54(surname) chpasswd.8.xml:55(surname)
+#: chgpasswd.8.xml:51(surname) chfn.1.xml:54(surname) chage.1.xml:52(surname)
+msgid "François"
+msgstr "François"
+
+#: vipw.8.xml:54(email) usermod.8.xml:59(email) userdel.8.xml:58(email)
+#: useradd.8.xml:71(email) suauth.5.xml:52(email) su.1.xml:69(email)
+#: sg.1.xml:53(email) shadow.5.xml:52(email) shadow.3.xml:52(email)
+#: pwconv.8.xml:58(email) pwck.8.xml:58(email) porttime.5.xml:52(email)
+#: passwd.5.xml:52(email) passwd.1.xml:59(email) nologin.8.xml:41(email)
+#: newusers.8.xml:68(email) newgrp.1.xml:53(email) logoutd.8.xml:52(email)
+#: login.defs.5.xml:119(email) login.access.5.xml:53(email)
+#: login.1.xml:85(email) limits.5.xml:54(email) lastlog.8.xml:54(email)
+#: gshadow.5.xml:40(email) grpck.8.xml:53(email) groups.1.xml:52(email)
+#: groupmod.8.xml:53(email) groupmems.8.xml:56(email) groupdel.8.xml:53(email)
+#: groupadd.8.xml:55(email) gpasswd.1.xml:57(email) faillog.8.xml:52(email)
+#: faillog.5.xml:52(email) expiry.1.xml:56(email) chsh.1.xml:55(email)
+#: chpasswd.8.xml:56(email) chgpasswd.8.xml:52(email) chfn.1.xml:55(email)
+#: chage.1.xml:53(email)
+msgid "nicolas.francois@centraliens.net"
+msgstr "nicolas.francois@centraliens.net"
+
+#: vipw.8.xml:55(contrib) usermod.8.xml:60(contrib) userdel.8.xml:59(contrib)
+#: useradd.8.xml:72(contrib) suauth.5.xml:53(contrib) su.1.xml:70(contrib)
+#: sg.1.xml:54(contrib) shadow.5.xml:53(contrib) shadow.3.xml:53(contrib)
+#: pwconv.8.xml:59(contrib) pwck.8.xml:59(contrib) porttime.5.xml:53(contrib)
+#: passwd.5.xml:53(contrib) passwd.1.xml:60(contrib) nologin.8.xml:42(contrib)
+#: newusers.8.xml:69(contrib) newgrp.1.xml:54(contrib)
+#: logoutd.8.xml:53(contrib) login.defs.5.xml:120(contrib)
+#: login.access.5.xml:54(contrib) login.1.xml:86(contrib)
+#: limits.5.xml:55(contrib) lastlog.8.xml:55(contrib) gshadow.5.xml:42(contrib)
+#: grpck.8.xml:54(contrib) groups.1.xml:53(contrib) groupmod.8.xml:54(contrib)
+#: groupmems.8.xml:57(contrib) groupdel.8.xml:54(contrib)
+#: groupadd.8.xml:56(contrib) gpasswd.1.xml:58(contrib)
+#: faillog.8.xml:53(contrib) faillog.5.xml:53(contrib) expiry.1.xml:57(contrib)
+#: chsh.1.xml:56(contrib) chpasswd.8.xml:57(contrib)
+#: chgpasswd.8.xml:53(contrib) chfn.1.xml:56(contrib) chage.1.xml:54(contrib)
+msgid "shadow-utils maintainer, 2007 - now"
+msgstr "shadow-utils-Betreuer, 2007 - heute"
+
+#: vipw.8.xml:59(refentrytitle) vipw.8.xml:66(refname) vipw.8.xml:75(command)
+#: login.defs.5.xml:520(term)
+msgid "vipw"
+msgstr "vipw"
+
+#: vipw.8.xml:60(manvolnum) usermod.8.xml:65(manvolnum)
+#: userdel.8.xml:64(manvolnum) userdel.8.xml:276(replaceable)
+#: useradd.8.xml:77(manvolnum) pwconv.8.xml:64(manvolnum)
+#: pwck.8.xml:64(manvolnum) nologin.8.xml:47(manvolnum)
+#: newusers.8.xml:74(manvolnum) logoutd.8.xml:58(manvolnum)
+#: lastlog.8.xml:60(manvolnum) grpck.8.xml:59(manvolnum)
+#: groupmod.8.xml:59(manvolnum) groupmems.8.xml:62(manvolnum)
+#: groupdel.8.xml:59(manvolnum) groupdel.8.xml:198(replaceable)
+#: groupadd.8.xml:61(manvolnum) faillog.8.xml:58(manvolnum)
+#: faillog.5.xml:111(manvolnum) chpasswd.8.xml:62(manvolnum)
+#: chgpasswd.8.xml:58(manvolnum)
+msgid "8"
+msgstr "8"
+
+#: vipw.8.xml:61(refmiscinfo) usermod.8.xml:66(refmiscinfo)
+#: userdel.8.xml:65(refmiscinfo) useradd.8.xml:78(refmiscinfo)
+#: pwconv.8.xml:65(refmiscinfo) pwck.8.xml:65(refmiscinfo)
+#: nologin.8.xml:48(refmiscinfo) newusers.8.xml:75(refmiscinfo)
+#: logoutd.8.xml:59(refmiscinfo) lastlog.8.xml:61(refmiscinfo)
+#: grpck.8.xml:60(refmiscinfo) groupmod.8.xml:60(refmiscinfo)
+#: groupmems.8.xml:63(refmiscinfo) groupdel.8.xml:60(refmiscinfo)
+#: groupadd.8.xml:62(refmiscinfo) faillog.8.xml:59(refmiscinfo)
+#: chpasswd.8.xml:63(refmiscinfo) chgpasswd.8.xml:59(refmiscinfo)
+msgid "System Management Commands"
+msgstr "Befehle zur Systemverwaltung"
+
+#: vipw.8.xml:62(refmiscinfo) usermod.8.xml:67(refmiscinfo)
+#: userdel.8.xml:66(refmiscinfo) useradd.8.xml:79(refmiscinfo)
+#: suauth.5.xml:60(refmiscinfo) su.1.xml:77(refmiscinfo)
+#: sg.1.xml:61(refmiscinfo) shadow.5.xml:60(refmiscinfo)
+#: shadow.3.xml:60(refmiscinfo) pwconv.8.xml:66(refmiscinfo)
+#: pwck.8.xml:66(refmiscinfo) porttime.5.xml:60(refmiscinfo)
+#: passwd.5.xml:60(refmiscinfo) passwd.1.xml:67(refmiscinfo)
+#: nologin.8.xml:49(refmiscinfo) newusers.8.xml:76(refmiscinfo)
+#: newgrp.1.xml:61(refmiscinfo) logoutd.8.xml:60(refmiscinfo)
+#: login.defs.5.xml:127(refmiscinfo) login.access.5.xml:61(refmiscinfo)
+#: login.1.xml:93(refmiscinfo) limits.5.xml:62(refmiscinfo)
+#: lastlog.8.xml:62(refmiscinfo) gshadow.5.xml:49(refmiscinfo)
+#: grpck.8.xml:61(refmiscinfo) groups.1.xml:60(refmiscinfo)
+#: groupmod.8.xml:61(refmiscinfo) groupmems.8.xml:64(refmiscinfo)
+#: groupdel.8.xml:61(refmiscinfo) groupadd.8.xml:63(refmiscinfo)
+#: gpasswd.1.xml:65(refmiscinfo) faillog.8.xml:60(refmiscinfo)
+#: faillog.5.xml:60(refmiscinfo) expiry.1.xml:64(refmiscinfo)
+#: chsh.1.xml:63(refmiscinfo) chpasswd.8.xml:64(refmiscinfo)
+#: chgpasswd.8.xml:60(refmiscinfo) chfn.1.xml:63(refmiscinfo)
+#: chage.1.xml:61(refmiscinfo)
+msgid "shadow-utils"
+msgstr "shadow-utils"
+
+#: vipw.8.xml:67(refname) vipw.8.xml:81(command)
+msgid "vigr"
+msgstr "vigr"
+
+#: vipw.8.xml:68(refpurpose)
+msgid "edit the password, group, shadow-password or shadow-group file"
+msgstr ""
+"bearbeitet die Passwort-, Gruppen-, Shadow-Passwort- oder Shadow-Gruppen-"
+"Datei"
+
+#: vipw.8.xml:77(replaceable) vipw.8.xml:83(replaceable)
+#: usermod.8.xml:79(replaceable) userdel.8.xml:76(arg)
+#: useradd.8.xml:90(replaceable) useradd.8.xml:102(replaceable)
+#: su.1.xml:88(replaceable) pwconv.8.xml:81(replaceable)
+#: pwconv.8.xml:87(replaceable) pwconv.8.xml:93(replaceable)
+#: pwconv.8.xml:99(replaceable) pwck.8.xml:77(arg) passwd.1.xml:79(replaceable)
+#: newusers.8.xml:88(replaceable) lastlog.8.xml:74(replaceable)
+#: grpck.8.xml:72(arg) groupmod.8.xml:73(replaceable)
+#: groupdel.8.xml:73(replaceable) groupadd.8.xml:75(replaceable)
+#: faillog.8.xml:72(replaceable) chsh.1.xml:75(replaceable)
+#: chpasswd.8.xml:76(replaceable) chgpasswd.8.xml:72(replaceable)
+#: chfn.1.xml:75(replaceable) chage.1.xml:72(replaceable)
+msgid "options"
+msgstr "Optionen"
+
+#: vipw.8.xml:89(title) usermod.8.xml:86(title) userdel.8.xml:84(title)
+#: useradd.8.xml:108(title) suauth.5.xml:75(title) su.1.xml:103(title)
+#: sg.1.xml:81(title) shadow.5.xml:69(title) shadow.3.xml:118(title)
+#: shadow.3.xml:174(title) pwconv.8.xml:105(title) pwck.8.xml:92(title)
+#: porttime.5.xml:69(title) passwd.5.xml:69(title) passwd.1.xml:88(title)
+#: nologin.8.xml:64(title) newusers.8.xml:97(title) newgrp.1.xml:77(title)
+#: logoutd.8.xml:75(title) login.defs.5.xml:136(title)
+#: login.access.5.xml:70(title) login.1.xml:125(title) limits.5.xml:72(title)
+#: lastlog.8.xml:80(title) gshadow.5.xml:58(title) grpck.8.xml:83(title)
+#: groups.1.xml:78(title) groupmod.8.xml:80(title) groupmems.8.xml:85(title)
+#: groupdel.8.xml:80(title) groupadd.8.xml:84(title) gpasswd.1.xml:94(title)
+#: faillog.8.xml:78(title) faillog.5.xml:69(title) expiry.1.xml:82(title)
+#: chsh.1.xml:84(title) chpasswd.8.xml:82(title) chgpasswd.8.xml:78(title)
+#: chfn.1.xml:84(title) chage.1.xml:81(title)
+msgid "DESCRIPTION"
+msgstr "BESCHREIBUNG"
+
+#: vipw.8.xml:90(para)
+msgid ""
+"The <command>vipw</command> and <command>vigr</command> commands edits the "
+"files <filename>/etc/passwd</filename> and <filename>/etc/group</filename>, "
+"respectively. With the <option>-s</option> flag, they will edit the shadow "
+"versions of those files, <filename>/etc/shadow</filename> and <filename>/etc/"
+"gshadow</filename>, respectively. The programs will set the appropriate "
+"locks to prevent file corruption. When looking for an editor, the programs "
+"will first try the environment variable <envar>$VISUAL</envar>, then the "
+"environment variable <envar>$EDITOR</envar>, and finally the default editor, "
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"Die Befehle <command>vipw</command> und <command>vigr</command> bearbeiten "
+"die Dateien <filename>/etc/passwd</filename> beziehungsweise <filename>/etc/"
+"group</filename>. Mit der Option <option>-s</option> bearbeiten Sie die "
+"Shadow-Versionen beider Dateien, <filename>/etc/shadow</filename> und "
+"<filename>/etc/gshadow</filename>. Die Programme werden die geeigneten "
+"Sperren setzen, um eine Beschädigung der Dateien zu verhindern. Wenn ein "
+"Editor benötigt wird, wird zuerst die Umgebungsvariable <envar>$VISUAL</"
+"envar> ausgewertet, danach die Umgebungsvariable <envar>$EDITOR</envar>. "
+"Zuletzt wird der Standard-Editor <citerefentry><refentrytitle>vi</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> verwendet."
+
+#: vipw.8.xml:107(title) usermod.8.xml:94(title) userdel.8.xml:93(title)
+#: useradd.8.xml:126(title) su.1.xml:144(title) pwconv.8.xml:187(title)
+#: pwck.8.xml:176(title) passwd.1.xml:174(title) newusers.8.xml:266(title)
+#: login.1.xml:210(title) lastlog.8.xml:92(title) grpck.8.xml:147(title)
+#: groupmod.8.xml:89(title) groupmems.8.xml:100(title) groupdel.8.xml:88(title)
+#: groupadd.8.xml:93(title) gpasswd.1.xml:134(title) faillog.8.xml:89(title)
+#: expiry.1.xml:91(title) chsh.1.xml:95(title) chpasswd.8.xml:130(title)
+#: chgpasswd.8.xml:105(title) chfn.1.xml:111(title) chage.1.xml:91(title)
+msgid "OPTIONS"
+msgstr "OPTIONEN"
+
+#: vipw.8.xml:108(para)
+msgid ""
+"The options which apply to the <command>vipw</command> and <command>vigr</"
+"command> commands are:"
+msgstr ""
+"Die Optionen, die von den Befehlen <command>vipw</command> und "
+"<command>vigr</command> unterstützt werden, sind:"
+
+#: vipw.8.xml:114(term)
+msgid "<option>-g</option>, <option>--group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+#: vipw.8.xml:116(para)
+msgid "Edit group database."
+msgstr "bearbeitet die Gruppendatenbank"
+
+#: vipw.8.xml:120(term) userdel.8.xml:123(term) useradd.8.xml:278(term)
+#: pwconv.8.xml:195(term) pwck.8.xml:196(term) passwd.1.xml:214(term)
+#: newusers.8.xml:296(term) lastlog.8.xml:119(term) grpck.8.xml:157(term)
+#: groupmod.8.xml:129(term) groupmems.8.xml:142(term) groupdel.8.xml:95(term)
+#: groupadd.8.xml:131(term) gpasswd.1.xml:173(term) faillog.8.xml:122(term)
+#: expiry.1.xml:112(term) chsh.1.xml:101(term) chpasswd.8.xml:171(term)
+#: chgpasswd.8.xml:131(term) chage.1.xml:129(term)
+msgid "<option>-h</option>, <option>--help</option>"
+msgstr "<option>-h</option>, <option>--help</option>"
+
+#: vipw.8.xml:122(para) userdel.8.xml:125(para) useradd.8.xml:280(para)
+#: pwconv.8.xml:197(para) pwck.8.xml:198(para) passwd.1.xml:216(para)
+#: newusers.8.xml:298(para) lastlog.8.xml:123(para) grpck.8.xml:159(para)
+#: groupmod.8.xml:131(para) groupmems.8.xml:144(para) groupdel.8.xml:97(para)
+#: groupadd.8.xml:133(para) gpasswd.1.xml:175(para) faillog.8.xml:124(para)
+#: expiry.1.xml:114(para) chsh.1.xml:103(para) chpasswd.8.xml:173(para)
+#: chgpasswd.8.xml:133(para) chfn.1.xml:169(para) chage.1.xml:131(para)
+msgid "Display help message and exit."
+msgstr "zeigt die Hilfe an und beendet das Programm"
+
+#: vipw.8.xml:126(term)
+msgid "<option>-p</option>, <option>--passwd</option>"
+msgstr "<option>-p</option>, <option>--passwd</option>"
+
+#: vipw.8.xml:128(para)
+msgid "Edit passwd database."
+msgstr "bearbeitet die Passwd-Datenbank"
+
+#: vipw.8.xml:132(term) pwck.8.xml:202(term) passwd.1.xml:281(term)
+msgid "<option>-q</option>, <option>--quiet</option>"
+msgstr "<option>-q</option>, <option>--quiet</option>"
+
+#: vipw.8.xml:134(para) passwd.1.xml:285(para)
+msgid "Quiet mode."
+msgstr "stiller Modus"
+
+#: vipw.8.xml:138(term) usermod.8.xml:322(term) userdel.8.xml:146(term)
+#: useradd.8.xml:457(term) pwconv.8.xml:201(term) pwck.8.xml:219(term)
+#: passwd.1.xml:301(term) newusers.8.xml:321(term) lastlog.8.xml:127(term)
+#: grpck.8.xml:173(term) groupmod.8.xml:178(term) groupmems.8.xml:165(term)
+#: groupdel.8.xml:101(term) groupadd.8.xml:204(term) faillog.8.xml:180(term)
+#: chsh.1.xml:107(term) chpasswd.8.xml:188(term) chgpasswd.8.xml:146(term)
+#: chfn.1.xml:153(term) chage.1.xml:203(term)
+msgid ""
+"<option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_VERZ</"
+"replaceable>"
+
+#: vipw.8.xml:142(para) usermod.8.xml:326(para) userdel.8.xml:150(para)
+#: useradd.8.xml:461(para) pwconv.8.xml:205(para) pwck.8.xml:223(para)
+#: passwd.1.xml:305(para) newusers.8.xml:325(para) lastlog.8.xml:131(para)
+#: grpck.8.xml:177(para) groupmod.8.xml:182(para) groupmems.8.xml:169(para)
+#: groupdel.8.xml:105(para) groupadd.8.xml:208(para) gpasswd.1.xml:185(para)
+#: faillog.8.xml:184(para) chsh.1.xml:111(para) chpasswd.8.xml:192(para)
+#: chgpasswd.8.xml:150(para) chfn.1.xml:157(para) chage.1.xml:207(para)
+msgid ""
+"Apply changes in the <replaceable>CHROOT_DIR</replaceable> directory and use "
+"the configuration files from the <replaceable>CHROOT_DIR</replaceable> "
+"directory."
+msgstr ""
+"führt die Veränderungen in dem Verzeichnis <replaceable>CHROOT_VERZ</"
+"replaceable> durch und verwendet die Konfigurationsdateien aus dem "
+"Verzeichnis <replaceable>CHROOT_VERZ</replaceable>"
+
+#: vipw.8.xml:150(term)
+msgid "<option>-s</option>, <option>--shadow</option>"
+msgstr "<option>-s</option>, <option>--shadow</option>"
+
+#: vipw.8.xml:152(para)
+msgid "Edit shadow or gshadow database."
+msgstr "bearbeitet die Shadow- oder Gshadow-Datenbank"
+
+#: vipw.8.xml:156(term)
+msgid "<option>-u</option>, <option>--user</option>"
+msgstr "<option>-u</option>, <option>--user</option>"
+
+#: vipw.8.xml:158(para)
+msgid "Indicates which user's tcb shadow file to edit."
+msgstr "bestimmt, welche Tcb-Shadow-Datei des Benutzers bearbeitet werden soll"
+
+#: vipw.8.xml:165(title) usermod.8.xml:524(title) userdel.8.xml:188(title)
+#: useradd.8.xml:676(title) su.1.xml:338(title) sg.1.xml:98(title)
+#: pwconv.8.xml:227(title) pwck.8.xml:262(title) passwd.1.xml:395(title)
+#: newusers.8.xml:375(title) newgrp.1.xml:109(title) login.1.xml:294(title)
+#: lastlog.8.xml:205(title) grpck.8.xml:209(title) groupmod.8.xml:210(title)
+#: groupmems.8.xml:199(title) groupdel.8.xml:145(title)
+#: groupadd.8.xml:236(title) gpasswd.1.xml:264(title) chsh.1.xml:154(title)
+#: chpasswd.8.xml:239(title) chgpasswd.8.xml:198(title) chfn.1.xml:193(title)
+#: chage.1.xml:250(title)
+msgid "CONFIGURATION"
+msgstr "KONFIGURATION"
+
+#: vipw.8.xml:166(para) usermod.8.xml:525(para) userdel.8.xml:189(para)
+#: useradd.8.xml:677(para) su.1.xml:339(para) sg.1.xml:99(para)
+#: pwck.8.xml:263(para) passwd.1.xml:396(para) newusers.8.xml:376(para)
+#: newgrp.1.xml:110(para) login.1.xml:295(para) lastlog.8.xml:206(para)
+#: grpck.8.xml:210(para) groupmod.8.xml:211(para) groupmems.8.xml:200(para)
+#: groupdel.8.xml:146(para) groupadd.8.xml:237(para) gpasswd.1.xml:265(para)
+#: chsh.1.xml:155(para) chpasswd.8.xml:240(para) chgpasswd.8.xml:199(para)
+#: chfn.1.xml:194(para) chage.1.xml:251(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of this tool:"
+msgstr ""
+"Die folgenden Konfigurationsvariablen in <filename>/etc/login.defs</"
+"filename> beeinflussen das Verhalten dieses Werkzeugs:"
+
+#: vipw.8.xml:30(term) usermod.8.xml:30(term) userdel.8.xml:30(term)
+#: useradd.8.xml:30(term) pwconv.8.xml:30(term) pwck.8.xml:30(term)
+#: login.defs.5.xml:30(term) chage.1.xml:30(term)
+msgid "<option>USE_TCB</option> (boolean)"
+msgstr "<option>USE_TCB</option> (boolesch)"
+
+#: vipw.8.xml:32(para) usermod.8.xml:32(para) userdel.8.xml:32(para)
+#: useradd.8.xml:32(para) pwconv.8.xml:32(para) pwck.8.xml:32(para)
+#: login.defs.5.xml:32(para) chage.1.xml:32(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <citerefentry><refentrytitle>tcb</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry> password shadowing "
+"scheme will be used."
+msgstr ""
+"Wenn auf <replaceable>yes</replaceable> gesetzt, wird das "
+"<citerefentry><refentrytitle>tcb</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>-Passwort-Shadowing-Schema verwendet."
+
+#: vipw.8.xml:177(title)
+msgid "ENVIRONMENT"
+msgstr "UMGEBUNGSVARIABLEN"
+
+#: vipw.8.xml:180(option)
+msgid "VISUAL"
+msgstr "VISUAL"
+
+#: vipw.8.xml:182(para)
+msgid "Editor to be used."
+msgstr "der verwendete Editor"
+
+#: vipw.8.xml:186(option)
+msgid "EDITOR"
+msgstr "EDITOR"
+
+#: vipw.8.xml:188(para)
+msgid "Editor to be used if <option>VISUAL</option> is not set."
+msgstr "der verwendete Editor, wenn <option>VISUAL</option> nicht gesetzt ist"
+
+#: vipw.8.xml:195(title) usermod.8.xml:542(title) userdel.8.xml:205(title)
+#: useradd.8.xml:706(title) suauth.5.xml:193(title) su.1.xml:366(title)
+#: sg.1.xml:110(title) shadow.5.xml:255(title) shadow.3.xml:226(title)
+#: pwconv.8.xml:250(title) pwck.8.xml:279(title) porttime.5.xml:130(title)
+#: passwd.5.xml:160(title) passwd.1.xml:413(title) newusers.8.xml:411(title)
+#: newgrp.1.xml:121(title) logoutd.8.xml:89(title)
+#: login.access.5.xml:121(title) login.1.xml:338(title) limits.5.xml:196(title)
+#: lastlog.8.xml:217(title) gshadow.5.xml:156(title) grpck.8.xml:221(title)
+#: groups.1.xml:100(title) groupmod.8.xml:222(title) groupmems.8.xml:211(title)
+#: groupdel.8.xml:157(title) groupadd.8.xml:250(title) gpasswd.1.xml:279(title)
+#: faillog.8.xml:243(title) faillog.5.xml:96(title) expiry.1.xml:121(title)
+#: chsh.1.xml:167(title) chpasswd.8.xml:255(title) chgpasswd.8.xml:213(title)
+#: chfn.1.xml:207(title) chage.1.xml:262(title)
+msgid "FILES"
+msgstr "DATEIEN"
+
+#: vipw.8.xml:198(filename) usermod.8.xml:545(filename)
+#: userdel.8.xml:208(filename) useradd.8.xml:721(filename)
+#: sg.1.xml:125(filename) pwck.8.xml:282(filename) newusers.8.xml:426(filename)
+#: newgrp.1.xml:136(filename) gshadow.5.xml:159(filename)
+#: grpck.8.xml:224(filename) groups.1.xml:103(filename)
+#: groupmod.8.xml:225(filename) groupmems.8.xml:214(filename)
+#: groupdel.8.xml:160(filename) groupadd.8.xml:253(filename)
+#: gpasswd.1.xml:72(filename) gpasswd.1.xml:75(filename)
+#: gpasswd.1.xml:282(filename) chgpasswd.8.xml:216(filename)
+msgid "/etc/group"
+msgstr "/etc/group"
+
+#: vipw.8.xml:200(para) usermod.8.xml:547(para) userdel.8.xml:210(para)
+#: useradd.8.xml:723(para) sg.1.xml:127(para) pwck.8.xml:284(para)
+#: newusers.8.xml:428(para) newgrp.1.xml:138(para) gshadow.5.xml:161(para)
+#: grpck.8.xml:226(para) groups.1.xml:105(para) groupmod.8.xml:227(para)
+#: groupmems.8.xml:216(para) groupdel.8.xml:162(para) groupadd.8.xml:255(para)
+#: gpasswd.1.xml:284(para) chgpasswd.8.xml:218(para)
+msgid "Group account information."
+msgstr "Informationen zu den Gruppenkonten"
+
+#: vipw.8.xml:204(filename) usermod.8.xml:551(filename)
+#: useradd.8.xml:727(filename) sg.1.xml:131(filename)
+#: newusers.8.xml:432(filename) newgrp.1.xml:142(filename)
+#: gshadow.5.xml:165(filename) grpck.8.xml:230(filename)
+#: groupmod.8.xml:231(filename) groupmems.8.xml:220(filename)
+#: groupdel.8.xml:166(filename) groupadd.8.xml:259(filename)
+#: gpasswd.1.xml:76(filename) gpasswd.1.xml:288(filename)
+#: chgpasswd.8.xml:222(filename)
+msgid "/etc/gshadow"
+msgstr "/etc/gshadow"
+
+# type: Plain text
+#: vipw.8.xml:206(para) usermod.8.xml:553(para) useradd.8.xml:729(para)
+#: sg.1.xml:133(para) newusers.8.xml:434(para) newgrp.1.xml:144(para)
+#: gshadow.5.xml:167(para) grpck.8.xml:232(para) groupmod.8.xml:233(para)
+#: groupdel.8.xml:168(para) groupadd.8.xml:261(para) gpasswd.1.xml:290(para)
+#: chgpasswd.8.xml:224(para)
+msgid "Secure group account information."
+msgstr "sichere Informationen zu den Gruppenkonten"
+
+#: vipw.8.xml:210(filename) usermod.8.xml:563(filename)
+#: userdel.8.xml:220(filename) useradd.8.xml:709(filename)
+#: su.1.xml:369(filename) sg.1.xml:113(filename) shadow.5.xml:258(filename)
+#: pwck.8.xml:288(filename) passwd.5.xml:163(filename)
+#: passwd.1.xml:416(filename) newusers.8.xml:414(filename)
+#: newgrp.1.xml:124(filename) login.1.xml:353(filename)
+#: grpck.8.xml:236(filename) groupmod.8.xml:243(filename)
+#: expiry.1.xml:124(filename) chsh.1.xml:170(filename)
+#: chpasswd.8.xml:258(filename) chfn.1.xml:216(filename)
+#: chage.1.xml:266(filename)
+msgid "/etc/passwd"
+msgstr "/etc/passwd"
+
+#: vipw.8.xml:212(para) usermod.8.xml:565(para) userdel.8.xml:222(para)
+#: useradd.8.xml:711(para) su.1.xml:371(para) sg.1.xml:115(para)
+#: shadow.5.xml:260(para) pwck.8.xml:290(para) passwd.5.xml:165(para)
+#: passwd.1.xml:418(para) newusers.8.xml:416(para) newgrp.1.xml:126(para)
+#: login.1.xml:355(para) grpck.8.xml:238(para) groupmod.8.xml:245(para)
+#: expiry.1.xml:126(para) chsh.1.xml:172(para) chpasswd.8.xml:260(para)
+#: chfn.1.xml:218(para) chage.1.xml:269(para)
+msgid "User account information."
+msgstr "Informationen zu den Benutzerkonten"
+
+#: vipw.8.xml:216(filename) usermod.8.xml:569(filename)
+#: userdel.8.xml:226(filename) useradd.8.xml:715(filename)
+#: su.1.xml:375(filename) sg.1.xml:119(filename) shadow.5.xml:264(filename)
+#: shadow.3.xml:229(filename) pwck.8.xml:294(filename)
+#: passwd.5.xml:169(filename) passwd.1.xml:422(filename)
+#: newusers.8.xml:420(filename) newgrp.1.xml:130(filename)
+#: login.1.xml:359(filename) expiry.1.xml:130(filename)
+#: chpasswd.8.xml:264(filename) chage.1.xml:274(filename)
+msgid "/etc/shadow"
+msgstr "/etc/shadow"
+
+# type: Plain text
+#: vipw.8.xml:218(para) usermod.8.xml:571(para) userdel.8.xml:228(para)
+#: useradd.8.xml:717(para) su.1.xml:377(para) sg.1.xml:121(para)
+#: shadow.5.xml:266(para) shadow.3.xml:231(para) pwck.8.xml:296(para)
+#: passwd.1.xml:424(para) newusers.8.xml:422(para) newgrp.1.xml:132(para)
+#: login.1.xml:361(para) expiry.1.xml:132(para) chpasswd.8.xml:266(para)
+#: chage.1.xml:277(para)
+msgid "Secure user account information."
+msgstr "verschlüsselte Informationen zu den Benutzerkonten"
+
+#: vipw.8.xml:225(title) usermod.8.xml:590(title) userdel.8.xml:325(title)
+#: useradd.8.xml:835(title) suauth.5.xml:222(title) su.1.xml:437(title)
+#: sg.1.xml:140(title) shadow.5.xml:283(title) shadow.3.xml:238(title)
+#: pwconv.8.xml:262(title) pwck.8.xml:354(title) porttime.5.xml:142(title)
+#: passwd.5.xml:188(title) passwd.1.xml:494(title) nologin.8.xml:81(title)
+#: newusers.8.xml:465(title) newgrp.1.xml:151(title)
+#: login.defs.5.xml:547(title) login.access.5.xml:133(title)
+#: login.1.xml:398(title) limits.5.xml:206(title) gshadow.5.xml:174(title)
+#: grpck.8.xml:290(title) groups.1.xml:112(title) groupmod.8.xml:321(title)
+#: groupmems.8.xml:229(title) groupdel.8.xml:214(title)
+#: groupadd.8.xml:341(title) gpasswd.1.xml:297(title) faillog.8.xml:255(title)
+#: faillog.5.xml:108(title) expiry.1.xml:139(title) chsh.1.xml:191(title)
+#: chpasswd.8.xml:285(title) chgpasswd.8.xml:237(title) chfn.1.xml:225(title)
+#: chage.1.xml:317(title)
+msgid "SEE ALSO"
+msgstr "SIEHE AUCH"
+
+#: vipw.8.xml:226(para)
+msgid ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry condition=\"tcb"
+"\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+"condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>,<citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry condition=\"tcb"
+"\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+"condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: usermod.8.xml:46(firstname) userdel.8.xml:45(firstname)
+#: useradd.8.xml:58(firstname) su.1.xml:56(firstname) sg.1.xml:40(firstname)
+#: shadow.5.xml:39(firstname) shadow.3.xml:39(firstname)
+#: pwck.8.xml:45(firstname) porttime.5.xml:39(firstname)
+#: passwd.5.xml:39(firstname) passwd.1.xml:46(firstname)
+#: newusers.8.xml:55(firstname) newgrp.1.xml:40(firstname)
+#: logoutd.8.xml:39(firstname) login.defs.5.xml:106(firstname)
+#: login.1.xml:72(firstname) lastlog.8.xml:41(firstname)
+#: grpck.8.xml:40(firstname) groups.1.xml:39(firstname)
+#: groupmod.8.xml:40(firstname) groupdel.8.xml:40(firstname)
+#: groupadd.8.xml:42(firstname) faillog.8.xml:39(firstname)
+#: faillog.5.xml:39(firstname) expiry.1.xml:43(firstname)
+#: chsh.1.xml:42(firstname) chpasswd.8.xml:43(firstname)
+#: chfn.1.xml:42(firstname) chage.1.xml:40(firstname)
+msgid "Julianne Frances"
+msgstr "Julianne Frances"
+
+#: usermod.8.xml:47(surname) userdel.8.xml:46(surname)
+#: useradd.8.xml:59(surname) su.1.xml:57(surname) sg.1.xml:41(surname)
+#: shadow.5.xml:40(surname) shadow.3.xml:40(surname) pwck.8.xml:46(surname)
+#: porttime.5.xml:40(surname) passwd.5.xml:40(surname) passwd.1.xml:47(surname)
+#: newusers.8.xml:56(surname) newgrp.1.xml:41(surname)
+#: logoutd.8.xml:40(surname) login.defs.5.xml:107(surname)
+#: login.1.xml:73(surname) lastlog.8.xml:42(surname) grpck.8.xml:41(surname)
+#: groups.1.xml:40(surname) groupmod.8.xml:41(surname)
+#: groupdel.8.xml:41(surname) groupadd.8.xml:43(surname)
+#: faillog.8.xml:40(surname) faillog.5.xml:40(surname) expiry.1.xml:44(surname)
+#: chsh.1.xml:43(surname) chpasswd.8.xml:44(surname) chfn.1.xml:43(surname)
+#: chage.1.xml:41(surname)
+msgid "Haugh"
+msgstr "Haugh"
+
+#: usermod.8.xml:48(contrib) userdel.8.xml:47(contrib)
+#: useradd.8.xml:60(contrib) sg.1.xml:42(contrib) newusers.8.xml:57(contrib)
+#: newgrp.1.xml:42(contrib) logoutd.8.xml:41(contrib)
+#: login.defs.5.xml:108(contrib) groups.1.xml:41(contrib)
+#: groupmod.8.xml:42(contrib) groupdel.8.xml:42(contrib)
+#: groupadd.8.xml:44(contrib) chpasswd.8.xml:45(contrib)
+msgid "Creation, 1991"
+msgstr "ursprünglicher Autor, 1991"
+
+#: usermod.8.xml:64(refentrytitle) usermod.8.xml:71(refname)
+#: usermod.8.xml:77(command) login.defs.5.xml:510(term)
+msgid "usermod"
+msgstr "usermod"
+
+#: usermod.8.xml:72(refpurpose)
+msgid "modify a user account"
+msgstr "verändert ein Benutzerkonto"
+
+#: usermod.8.xml:81(replaceable) userdel.8.xml:78(replaceable)
+#: useradd.8.xml:92(replaceable) passwd.1.xml:82(replaceable)
+#: chsh.1.xml:78(replaceable) chfn.1.xml:78(replaceable)
+#: chage.1.xml:75(replaceable)
+msgid "LOGIN"
+msgstr "ANMELDENAME"
+
+#: usermod.8.xml:87(para)
+msgid ""
+"The <command>usermod</command> command modifies the system account files to "
+"reflect the changes that are specified on the command line."
+msgstr ""
+"Der Befehl <command>usermod</command> verändert die Kontodateien des "
+"Systems, so dass sie die Änderungen enthalten, die in der Befehlszeile "
+"eingegeben wurden."
+
+#: usermod.8.xml:95(para)
+msgid "The options which apply to the <command>usermod</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>usermod</command> unterstützt werden, "
+"sind:"
+
+#: usermod.8.xml:101(term)
+msgid "<option>-a</option>, <option>--append</option>"
+msgstr "<option>-a</option>, <option>--append</option>"
+
+#: usermod.8.xml:105(para)
+msgid ""
+"Add the user to the supplementary group(s). Use only with the <option>-G</"
+"option> option."
+msgstr ""
+"Fügt den Benutzer weiteren Gruppen hinzu. Kann nur zusammen mit der Option "
+"<option>-G</option> verwendet werden."
+
+#: usermod.8.xml:112(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-b</option>, <option>--badnames</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: usermod.8.xml:116(para) useradd.8.xml:135(para) pwck.8.xml:190(para)
+#: newusers.8.xml:276(para)
+msgid "Allow names that do not conform to standards."
+msgstr ""
+
+#: usermod.8.xml:122(term) useradd.8.xml:162(term)
+msgid ""
+"<option>-c</option>, <option>--comment</option>&nbsp;<replaceable>COMMENT</"
+"replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--comment</option>&nbsp;<replaceable>KOMMENTAR</"
+"replaceable>"
+
+#: usermod.8.xml:126(para)
+msgid ""
+"The new value of the user's password file comment field. It is normally "
+"modified using the <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> utility."
+msgstr ""
+"Der neue Wert des Kommentarfelds in der Passwortdatei des Benutzers. Er wird "
+"normalerweise mit dem Werkzeug <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> verändert."
+
+#: usermod.8.xml:135(term)
+msgid ""
+"<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_VERZ</"
+"replaceable>"
+
+#: usermod.8.xml:139(para)
+msgid "The user's new login directory."
+msgstr "das neue Home-Verzeichnis des Benutzers"
+
+#: usermod.8.xml:142(para)
+msgid ""
+"If the <option>-m</option> option is given, the contents of the current home "
+"directory will be moved to the new home directory, which is created if it "
+"does not already exist."
+msgstr ""
+"Wenn die Option <option>-m</option> verwendet wurde, wird der Inhalt des "
+"aktuellen Home-Verzeichnisses in das neue Home-Verzeichnis verschoben. Falls "
+"dieses nicht existiert, wird es angelegt."
+
+#: usermod.8.xml:151(term) useradd.8.xml:200(term) useradd.8.xml:577(term)
+msgid ""
+"<option>-e</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>EXPIRE_DATE</replaceable>"
+msgstr ""
+"<option>-e</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>VERFALLS_DATUM</replaceable>"
+
+#: usermod.8.xml:155(para) useradd.8.xml:204(para)
+msgid ""
+"The date on which the user account will be disabled. The date is specified "
+"in the format <emphasis remap=\"I\">YYYY-MM-DD</emphasis>."
+msgstr ""
+"Das Datum, an welchem das Benutzerkonto deaktiviert wird. Das Datum muss im "
+"Format <emphasis remap=\"I\">JJJJ-MM-TT</emphasis> angegeben werden."
+
+#: usermod.8.xml:159(para)
+msgid ""
+"An empty <replaceable>EXPIRE_DATE</replaceable> argument will disable the "
+"expiration of the account."
+msgstr ""
+"Wenn das Argument <replaceable>VERFALLS_DATUM</replaceable> leer bleibt, "
+"wird der Verfall des Kontos deaktiviert."
+
+#: usermod.8.xml:163(para) usermod.8.xml:184(para)
+msgid ""
+"This option requires a <filename>/etc/shadow</filename> file. A <filename>/"
+"etc/shadow</filename> entry will be created if there were none."
+msgstr ""
+"Diese Option benötigt die Datei <filename>/etc/shadow</filename>. Falls die "
+"Datei <filename>/etc/shadow</filename> leer sein sollte, wird ein Eintrag "
+"erstellt."
+
+#: usermod.8.xml:171(term) useradd.8.xml:217(term) useradd.8.xml:589(term)
+msgid ""
+"<option>-f</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-f</option>, <option>--inactive</option>&nbsp;<replaceable>INAKTIV</"
+"replaceable>"
+
+#: usermod.8.xml:175(para)
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled."
+msgstr ""
+"Die Anzahl von Tagen, nach denen ein Passwort abgelaufen ist, bis das Konto "
+"deaktiviert wird."
+
+#: usermod.8.xml:179(para)
+msgid ""
+"A value of 0 disables the account as soon as the password has expired, and a "
+"value of -1 disables the feature."
+msgstr ""
+"Ein Wert von 0 deaktiviert das Konto, sobald das Passwort abläuft. Ein Wert "
+"von -1 schaltet diese Funktion ab."
+
+#: usermod.8.xml:192(term) useradd.8.xml:236(term) useradd.8.xml:604(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GROUP</"
+"replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GRUPPE</"
+"replaceable>"
+
+#: usermod.8.xml:196(para)
+msgid ""
+"The group name or number of the user's new initial login group. The group "
+"must exist."
+msgstr ""
+"Der Name oder die Zahl der anfänglichen Anmeldegruppe eines neuen Benutzers. "
+"Der Gruppenname muss existieren."
+
+#: usermod.8.xml:200(para)
+msgid ""
+"Any file from the user's home directory owned by the previous primary group "
+"of the user will be owned by this new group."
+msgstr ""
+"Jede Datei im Home-Verzeichnis des Benutzers, die der alten Hauptgruppe des "
+"Benutzers gehörte, wird dieser neuen Gruppe gehören."
+
+#: usermod.8.xml:204(para)
+msgid ""
+"The group ownership of files outside of the user's home directory must be "
+"fixed manually."
+msgstr ""
+"Die Gruppenzugehörigkeit von Dateien außerhalb des Home-Verzeichnisses des "
+"Benutzers muss per Hand angepasst werden."
+
+#: usermod.8.xml:211(term) useradd.8.xml:263(term)
+msgid ""
+"<option>-G</option>, <option>--groups</option>&nbsp;<replaceable>GROUP1</"
+"replaceable>[<emphasis remap=\"I\">,GROUP2,...</emphasis>[<emphasis remap=\"I"
+"\">,GROUPN</emphasis>]]]"
+msgstr ""
+"<option>-G</option>, <option>--groups</option>&nbsp;<replaceable>GRUPPE_1</"
+"replaceable>[<emphasis remap=\"I\">,GRUPPE_2, ...</emphasis>[<emphasis remap="
+"\"I\">,GRUPPE_N</emphasis>]]]"
+
+#: usermod.8.xml:215(para)
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option."
+msgstr ""
+"Eine Liste zusätzlicher Gruppen, denen der Benutzer ebenfalls angehört. Die "
+"Gruppen sind durch Kommata ohne Leerzeichen von einander zu trennen. Die "
+"Gruppen unterliegen denselben Beschränkungen wie die Gruppe, die mit der "
+"Option <option>-g</option> bestimmt wurde."
+
+#: usermod.8.xml:222(para)
+msgid ""
+"If the user is currently a member of a group which is not listed, the user "
+"will be removed from the group. This behaviour can be changed via the "
+"<option>-a</option> option, which appends the user to the current "
+"supplementary group list."
+msgstr ""
+"Wenn der Benutzer aktuell Mitglied einer Gruppe ist, die nicht angegeben "
+"ist, wird er aus dieser Gruppe entfernt. Dieses Verhalten kann mit der "
+"Option <option>-a</option> abgeschaltet werden. Damit wird der Benutzer nur "
+"den angegebenen Gruppen hinzugefügt, ohne aus den übrigen gelöscht zu werden."
+
+#: usermod.8.xml:231(term)
+msgid ""
+"<option>-l</option>, <option>--login</option>&nbsp;<replaceable>NEW_LOGIN</"
+"replaceable>"
+msgstr ""
+"<option>-l</option>, <option>--login</option>&nbsp;"
+"<replaceable>NEUER_ANMELDENAME</replaceable>"
+
+#: usermod.8.xml:235(para)
+msgid ""
+"The name of the user will be changed from <replaceable>LOGIN</replaceable> "
+"to <replaceable>NEW_LOGIN</replaceable>. Nothing else is changed. In "
+"particular, the user's home directory or mail spool should probably be "
+"renamed manually to reflect the new login name."
+msgstr ""
+"Der Benutzername wird von <replaceable>ANMELDENAME</replaceable> zu "
+"<replaceable>NEUER_ANMELDENAME</replaceable> verändert. Andere Veränderungen "
+"werden nicht vorgenommen. Daher sollte wahrscheinlich der Name des Home-"
+"Verzeichnisses des Benutzers per Hand geändert werden, um dem neuen "
+"Anmeldenamen Rechnung zu tragen."
+
+#: usermod.8.xml:245(term)
+msgid "<option>-L</option>, <option>--lock</option>"
+msgstr "<option>-L</option>, <option>--lock</option>"
+
+#: usermod.8.xml:249(para)
+msgid ""
+"Lock a user's password. This puts a '!' in front of the encrypted password, "
+"effectively disabling the password. You can't use this option with <option>-"
+"p</option> or <option>-U</option>."
+msgstr ""
+"Sperrt das Passwort eines Benutzers. Dadurch wird ein »!« vor das "
+"verschlüsselte Passwort gesetzt, wodurch im Ergebnis das Passwort "
+"abgeschaltet wird. Sie können diese Option nicht mit <option>-p</option> "
+"oder <option>-U</option> verwenden."
+
+#: usermod.8.xml:255(para)
+msgid ""
+"Note: if you wish to lock the account (not only access with a password), you "
+"should also set the <replaceable>EXPIRE_DATE</replaceable> to "
+"<replaceable>1</replaceable>."
+msgstr ""
+"Hinweis: Wenn Sie das Konto sperren wollen (und nicht nur den Zugang mit "
+"einem Passwort), müssen Sie auch das <replaceable>VERFALLSDATUM</"
+"replaceable> auf <replaceable>1</replaceable> setzen."
+
+#: usermod.8.xml:264(term)
+msgid "<option>-m</option>, <option>--move-home</option>"
+msgstr "<option>-m</option>, <option>--move-home</option>"
+
+#: usermod.8.xml:268(para)
+msgid "Move the content of the user's home directory to the new location."
+msgstr ""
+"verschiebt den Inhalt des Home-Verzeichnisses eines Benutzers zu dem neuen "
+"Ziel"
+
+#: usermod.8.xml:272(para)
+msgid ""
+"This option is only valid in combination with the <option>-d</option> (or "
+"<option>--home</option>) option."
+msgstr ""
+"Diese Option ist nur in Verbindung mit der Option <option>-d</option> (oder "
+"<option>--home</option>) zulässig."
+
+#: usermod.8.xml:276(para)
+msgid ""
+"<command>usermod</command> will try to adapt the ownership of the files and "
+"to copy the modes, ACL and extended attributes, but manual changes might be "
+"needed afterwards."
+msgstr ""
+"<command>usermod</command> versucht, den Eigentümer der Dateien anzupassen "
+"und die Rechte, ACL und erweiterten Attribute zu übernehmen, aber "
+"Anpassungen per Hand können dennoch notwendig sein."
+
+#: usermod.8.xml:284(term) useradd.8.xml:397(term) groupmod.8.xml:146(term)
+#: groupadd.8.xml:157(term)
+msgid "<option>-o</option>, <option>--non-unique</option>"
+msgstr "<option>-o</option>, <option>--non-unique</option>"
+
+# SB: What is that suppossed to mean? I can assign the UID 1000 twice?
+#: usermod.8.xml:288(para)
+msgid ""
+"When used with the <option>-u</option> option, this option allows to change "
+"the user ID to a non-unique value."
+msgstr ""
+"Wenn es mit der Option <option>-u</option> verwendet wird, kann mit dieser "
+"Option der Wert der Benutzer-ID auf einen nicht eindeutigen Wert gesetzt "
+"werden."
+
+#: usermod.8.xml:295(term) useradd.8.xml:409(term) groupmod.8.xml:157(term)
+#: groupadd.8.xml:167(term)
+msgid ""
+"<option>-p</option>, <option>--password</option>&nbsp;<replaceable>PASSWORD</"
+"replaceable>"
+msgstr ""
+"<option>-p</option>, <option>--password</option>&nbsp;<replaceable>PASSWORT</"
+"replaceable>"
+
+#: usermod.8.xml:299(para) groupmod.8.xml:161(para)
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>."
+msgstr ""
+"das verschlüsselte Passwort, wie es von <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry> zurückgegeben wird"
+
+#: usermod.8.xml:304(para) useradd.8.xml:418(para) groupmod.8.xml:166(para)
+#: groupadd.8.xml:176(para)
+msgid ""
+"<emphasis role=\"bold\">Note:</emphasis> This option is not recommended "
+"because the password (or encrypted password) will be visible by users "
+"listing the processes."
+msgstr ""
+"<emphasis role=\"bold\">Hinweis:</emphasis> Diese Option ist nicht "
+"empfehlenswert, weil das Passwort (auch wenn es verschlüsselt ist) für "
+"Benutzer sichtbar ist, die sich den Prozess anzeigen lassen."
+
+#: usermod.8.xml:309(para)
+msgid ""
+"The password will be written in the local <filename>/etc/passwd</filename> "
+"or <filename>/etc/shadow</filename> file. This might differ from the "
+"password database configured in your PAM configuration."
+msgstr ""
+"Das Passwort wird in die lokale Datei <filename>/etc/passwd</filename> oder "
+"<filename>/etc/shadow</filename> geschrieben. Dies könnte von der Passwort-"
+"Datenbank abweichen, die Sie für PAM konfiguriert haben."
+
+#: usermod.8.xml:315(para) useradd.8.xml:423(para) groupmod.8.xml:171(para)
+#: groupadd.8.xml:181(para)
+msgid ""
+"You should make sure the password respects the system's password policy."
+msgstr ""
+"Sie sollten sicherstellen, dass das Passwort den Passwortrichtlinien des "
+"Systems entspricht."
+
+#: usermod.8.xml:334(term) userdel.8.xml:158(term) useradd.8.xml:469(term)
+#: groupmod.8.xml:190(term) groupdel.8.xml:113(term) groupadd.8.xml:216(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_DIR</"
+#| "replaceable>"
+msgid ""
+"<option>-P</option>, <option>--prefix</option>&nbsp;<replaceable>PREFIX_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_VERZ</"
+"replaceable>"
+
+#: usermod.8.xml:338(para) userdel.8.xml:162(para) useradd.8.xml:473(para)
+#: groupmod.8.xml:194(para) groupdel.8.xml:117(para) groupadd.8.xml:220(para)
+msgid ""
+"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."
+msgstr ""
+
+#: usermod.8.xml:351(term) useradd.8.xml:486(term) useradd.8.xml:624(term)
+#: su.1.xml:186(term) chsh.1.xml:119(term)
+msgid ""
+"<option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SHELL</"
+"replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SHELL</"
+"replaceable>"
+
+#: usermod.8.xml:355(para) chsh.1.xml:123(para)
+msgid ""
+"The name of the user's new login shell. Setting this field to blank causes "
+"the system to select the default login shell."
+msgstr ""
+"Der Name der neuen Anmelde-Shell des Benutzers. Falls dieses Feld leer "
+"gelassen wird, verwendet das System die Standard-Anmelde-Shell."
+
+#: usermod.8.xml:362(term) useradd.8.xml:500(term)
+msgid ""
+"<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+"replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+"replaceable>"
+
+#: usermod.8.xml:366(para)
+msgid "The new numerical value of the user's ID."
+msgstr "der neue numerische Wert der UID des Benutzers"
+
+#: usermod.8.xml:369(para)
+msgid ""
+"This value must be unique, unless the <option>-o</option> option is used. "
+"The value must be non-negative."
+msgstr ""
+"Dieser Wert muss eindeutig sein, sofern nicht die Option <option>-o</option> "
+"verwendet wird. Der Wert darf nicht negativ sein."
+
+#: usermod.8.xml:374(para)
+msgid ""
+"The user's mailbox, and any files which the user owns and which are located "
+"in the user's home directory will have the file user ID changed "
+"automatically."
+msgstr ""
+"Für die Mailbox des Benutzers und alle Dateien, die ihm gehören und sich in "
+"seinem Home-Verzeichnis befinden, wird die ID des Eigentümers automatisch "
+"angepasst."
+
+#: usermod.8.xml:379(para)
+msgid ""
+"The ownership of files outside of the user's home directory must be fixed "
+"manually."
+msgstr ""
+"Der Eigentümer von Dateien außerhalb des Home-Verzeichnisses des Benutzers "
+"muss per Hand angepasst werden."
+
+#: usermod.8.xml:383(para)
+msgid ""
+"No checks will be performed with regard to the <option>UID_MIN</option>, "
+"<option>UID_MAX</option>, <option>SYS_UID_MIN</option>, or "
+"<option>SYS_UID_MAX</option> from <filename>/etc/login.defs</filename>."
+msgstr ""
+"Die Werte von <option>UID_MIN</option>, <option>UID_MAX</option>, "
+"<option>SYS_UID_MIN</option> und <option>SYS_UID_MAX</option> aus <filename>/"
+"etc/login.defs</filename> werden nicht geprüft."
+
+#: usermod.8.xml:392(term)
+msgid "<option>-U</option>, <option>--unlock</option>"
+msgstr "<option>-U</option>, <option>--unlock</option>"
+
+#: usermod.8.xml:396(para)
+msgid ""
+"Unlock a user's password. This removes the '!' in front of the encrypted "
+"password. You can't use this option with <option>-p</option> or <option>-L</"
+"option>."
+msgstr ""
+"Gibt das Passwort eines Benutzers frei. Dies entfernt das »!« vor dem "
+"verschlüsselten Passwort. Sie können diese Option nicht mit <option>-p</"
+"option> oder <option>-U</option> verwenden."
+
+#: usermod.8.xml:401(para)
+msgid ""
+"Note: if you wish to unlock the account (not only access with a password), "
+"you should also set the <replaceable>EXPIRE_DATE</replaceable> (for example "
+"to <replaceable>99999</replaceable>, or to the <option>EXPIRE</option> value "
+"from <filename>/etc/default/useradd</filename>)."
+msgstr ""
+"Hinweis: Falls Sie das Benutzerkonto freigeben wollen (und nicht nur den "
+"Zugang mit einem Passwort), sollten Sie auch das <replaceable>VERFALLSDATUM</"
+"replaceable> bearbeiten (zum Beispiel auf <replaceable>99999</replaceable> "
+"oder den Wert von <option>EXPIRE</option> aus <filename>/etc/default/"
+"useradd</filename> setzen)."
+
+#: usermod.8.xml:412(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+#| "replaceable>|<replaceable>RANGE</replaceable>"
+msgid ""
+"<option>-v</option>, <option>--add-subuids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+"replaceable>|<replaceable>MENGE</replaceable>"
+
+#: usermod.8.xml:416(para)
+msgid "Add a range of subordinate uids to the user's account."
+msgstr ""
+
+#: usermod.8.xml:419(para) usermod.8.xml:457(para)
+msgid ""
+"This option may be specified multiple times to add multiple ranges to a "
+"users account."
+msgstr ""
+
+#: usermod.8.xml:422(para) usermod.8.xml:442(para)
+#, fuzzy
+#| msgid ""
+#| "No checks will be performed with regard to the <option>UID_MIN</option>, "
+#| "<option>UID_MAX</option>, <option>SYS_UID_MIN</option>, or "
+#| "<option>SYS_UID_MAX</option> from <filename>/etc/login.defs</filename>."
+msgid ""
+"No checks will be performed with regard to <option>SUB_UID_MIN</option>, "
+"<option>SUB_UID_MAX</option>, or <option>SUB_UID_COUNT</option> from /etc/"
+"login.defs."
+msgstr ""
+"Die Werte von <option>UID_MIN</option>, <option>UID_MAX</option>, "
+"<option>SYS_UID_MIN</option> und <option>SYS_UID_MAX</option> aus <filename>/"
+"etc/login.defs</filename> werden nicht geprüft."
+
+#: usermod.8.xml:430(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+#| "replaceable>|<replaceable>RANGE</replaceable>"
+msgid ""
+"<option>-V</option>, <option>--del-subuids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+"replaceable>|<replaceable>MENGE</replaceable>"
+
+#: usermod.8.xml:434(para)
+msgid "Remove a range of subordinate uids from the user's account."
+msgstr ""
+
+#: usermod.8.xml:437(para)
+msgid ""
+"This option may be specified multiple times to remove multiple ranges to a "
+"users account. When both <option>--del-subuids</option> and <option>--add-"
+"subuids</option> are specified, the removal of all subordinate uid ranges "
+"happens before any subordinate uid range is added."
+msgstr ""
+
+#: usermod.8.xml:450(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+#| "replaceable>|<replaceable>RANGE</replaceable>"
+msgid ""
+"<option>-w</option>, <option>--add-subgids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+"replaceable>|<replaceable>MENGE</replaceable>"
+
+#: usermod.8.xml:454(para)
+msgid "Add a range of subordinate gids to the user's account."
+msgstr ""
+
+#: usermod.8.xml:460(para) usermod.8.xml:480(para)
+#, fuzzy
+#| msgid ""
+#| "No checks will be performed with regard to the <option>GID_MIN</option>, "
+#| "<option>GID_MAX</option>, <option>SYS_GID_MIN</option>, or "
+#| "<option>SYS_GID_MAX</option> from <filename>/etc/login.defs</filename>."
+msgid ""
+"No checks will be performed with regard to <option>SUB_GID_MIN</option>, "
+"<option>SUB_GID_MAX</option>, or <option>SUB_GID_COUNT</option> from /etc/"
+"login.defs."
+msgstr ""
+"Die Werte von <option>GID_MIN</option>, <option>GID_MAX</option>, "
+"<option>SYS_GID_MIN</option> und <option>SYS_GID_MAX</option> aus <filename>/"
+"etc/login.defs</filename> werden nicht geprüft."
+
+#: usermod.8.xml:468(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+#| "replaceable>|<replaceable>RANGE</replaceable>"
+msgid ""
+"<option>-W</option>, <option>--del-subgids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+"replaceable>|<replaceable>MENGE</replaceable>"
+
+#: usermod.8.xml:472(para)
+#, fuzzy
+#| msgid "Remove any SELinux user mapping for the user's login."
+msgid "Remove a range of subordinate gids from the user's account."
+msgstr ""
+"entfernt die Zuordnung von SELinux-Benutzern aus den Anmeldeinformationen "
+"des Benutzers"
+
+#: usermod.8.xml:475(para)
+msgid ""
+"This option may be specified multiple times to remove multiple ranges to a "
+"users account. When both <option>--del-subgids</option> and <option>--add-"
+"subgids</option> are specified, the removal of all subordinate gid ranges "
+"happens before any subordinate gid range is added."
+msgstr ""
+
+#: usermod.8.xml:488(term) useradd.8.xml:535(term)
+msgid ""
+"<option>-Z</option>, <option>--selinux-user</option>&nbsp;"
+"<replaceable>SEUSER</replaceable>"
+msgstr ""
+"<option>-Z</option>, <option>--selinux-user</option>&nbsp;<replaceable>SE-"
+"BENUTZER</replaceable>"
+
+#: usermod.8.xml:492(para)
+msgid "The new SELinux user for the user's login."
+msgstr "der neue SELinux-Benutzer für den Anmeldenamen des Benutzers"
+
+#: usermod.8.xml:495(para)
+msgid ""
+"A blank <replaceable>SEUSER</replaceable> will remove the SELinux user "
+"mapping for user <replaceable>LOGIN</replaceable> (if any)."
+msgstr ""
+"Wenn <replaceable>SEBENUTZER</replaceable> leer ist, wird die Zuordnung von "
+"SELinux-Benutzern (sofern vorhanden) aus den Anmeldeinformationen des "
+"Benutzers entfernt"
+
+#: usermod.8.xml:506(title) userdel.8.xml:298(title) useradd.8.xml:652(title)
+#: su.1.xml:330(title) shadow.3.xml:218(title) passwd.1.xml:377(title)
+#: newusers.8.xml:363(title) login.1.xml:260(title) lastlog.8.xml:229(title)
+#: groupdel.8.xml:133(title) groupadd.8.xml:274(title) gpasswd.1.xml:252(title)
+#: faillog.8.xml:232(title) chpasswd.8.xml:231(title)
+#: chgpasswd.8.xml:186(title)
+msgid "CAVEATS"
+msgstr "WARNUNGEN"
+
+#: usermod.8.xml:507(para)
+#, fuzzy
+#| msgid ""
+#| "You must make certain that the named user is not executing any processes "
+#| "when this command is being executed if the user's numerical user ID, the "
+#| "user's name, or the user's home directory is being changed. "
+#| "<command>usermod</command> checks this on Linux, but only check if the "
+#| "user is logged in according to utmp on other architectures."
+msgid ""
+"You must make certain that the named user is not executing any processes "
+"when this command is being executed if the user's numerical user ID, the "
+"user's name, or the user's home directory is being changed. "
+"<command>usermod</command> checks this on Linux. On other platforms it only "
+"uses utmp to check if the user is logged in."
+msgstr ""
+"Wenn Sie mit diesem Befehl die numerische UID, den Namen oder das Home-"
+"Verzeichnis eines Benutzers verändern wollen, müssen Sie sicherstellen, dass "
+"dieser Benutzer keine Prozesse laufen lässt. Bei Linux stellt dies "
+"<command>usermod</command> sicher, auf anderen Architekturen überprüft es "
+"nur, ob der Benutzer laut utmp eingeloggt ist."
+
+#: usermod.8.xml:514(para)
+msgid ""
+"You must change the owner of any <command>crontab</command> files or "
+"<command>at</command> jobs manually."
+msgstr ""
+"Sie müssen den Eigentümer von <command>crontab</command>-Dateien oder "
+"<command>at</command>-Aufträgen per Hand ändern."
+
+#: usermod.8.xml:518(para)
+msgid "You must make any changes involving NIS on the NIS server."
+msgstr ""
+"Sie müssen alle Änderung in Bezug auf NIS auf dem NIS-Server vornehmen."
+
+#: usermod.8.xml:33(term) useradd.8.xml:33(term) login.defs.5.xml:33(term)
+#: lastlog.8.xml:33(term)
+#, fuzzy
+#| msgid "<option>SYS_UID_MAX</option> (number)"
+msgid "<option>LASTLOG_UID_MAX</option> (number)"
+msgstr "<option>SYS_UID_MAX</option> (Zahl)"
+
+#: usermod.8.xml:35(para) useradd.8.xml:35(para) login.defs.5.xml:35(para)
+#: lastlog.8.xml:35(para)
+msgid ""
+"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."
+msgstr ""
+
+#: usermod.8.xml:41(para) useradd.8.xml:41(para) login.defs.5.xml:41(para)
+#: lastlog.8.xml:41(para)
+msgid ""
+"No <option>LASTLOG_UID_MAX</option> option present in the configuration "
+"means that there is no user ID limit for writing lastlog entries."
+msgstr ""
+
+#: usermod.8.xml:32(term) userdel.8.xml:32(term) useradd.8.xml:32(term)
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>MAIL_DIR</option> (string)"
+msgstr "<option>MAIL_DIR</option> (Zeichenkette)"
+
+#: usermod.8.xml:34(para) userdel.8.xml:34(para) useradd.8.xml:34(para)
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"The mail spool directory. This is needed to manipulate the mailbox when its "
+"corresponding user account is modified or deleted. If not specified, a "
+"compile-time default is used."
+msgstr ""
+"Das Verzeichnis des Mail-Spools. Diese Angabe wird benötigt, um die Mailbox "
+"zu bearbeiten, nachdem das entsprechende Benutzerkonto verändert oder "
+"gelöscht wurde. Falls nicht angegeben, wird ein Standard verwendet, der beim "
+"Kompilieren festgelegt wurde."
+
+#: usermod.8.xml:41(term) userdel.8.xml:41(term) useradd.8.xml:41(term)
+#: su.1.xml:41(term) login.defs.5.xml:41(term) login.1.xml:41(term)
+msgid "<option>MAIL_FILE</option> (string)"
+msgstr "<option>MAIL_FILE</option> (Zeichenkette)"
+
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"Defines the location of the users mail spool files relatively to their home "
+"directory."
+msgstr ""
+"Legt den Ort der Mail-Spool-Dateien eines Benutzers relativ zu seinem Home-"
+"Verzeichnis fest."
+
+#. FIXME: MAIL_FILE not used in useradd
+#: usermod.8.xml:50(para) userdel.8.xml:50(para) useradd.8.xml:50(para)
+#: su.1.xml:50(para) login.defs.5.xml:50(para) login.1.xml:50(para)
+msgid ""
+"The <option>MAIL_DIR</option> and <option>MAIL_FILE</option> variables are "
+"used by <command>useradd</command>, <command>usermod</command>, and "
+"<command>userdel</command> to create, move, or delete the user's mail spool."
+msgstr ""
+"Die Variablen <option>MAIL_DIR</option> und <option>MAIL_FILE</option> "
+"werden von <command>useradd</command>, <command>usermod</command> und "
+"<command>userdel</command> verwendet, um den Mail-Spool eines Benutzers zu "
+"erstellen, zu verschieben oder zu löschen."
+
+#: usermod.8.xml:56(para) userdel.8.xml:56(para) useradd.8.xml:56(para)
+#: su.1.xml:56(para) login.defs.5.xml:56(para) login.1.xml:56(para)
+msgid ""
+"If <option>MAIL_CHECK_ENAB</option> is set to <replaceable>yes</"
+"replaceable>, they are also used to define the <envar>MAIL</envar> "
+"environment variable."
+msgstr ""
+"Falls <option>MAIL_CHECK_ENAB</option> auf <replaceable>yes</replaceable> "
+"gesetzt ist, werden sie auch verwendet, um die Umgebungsvariable "
+"<envar>MAIL</envar> festzulegen."
+
+#: usermod.8.xml:30(term) userdel.8.xml:30(term) useradd.8.xml:30(term)
+#: pwconv.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: grpck.8.xml:30(term) groupmod.8.xml:30(term) groupmems.8.xml:30(term)
+#: groupdel.8.xml:30(term) groupadd.8.xml:30(term) gpasswd.1.xml:30(term)
+#: chgpasswd.8.xml:30(term)
+msgid "<option>MAX_MEMBERS_PER_GROUP</option> (number)"
+msgstr "<option>MAX_MEMBERS_PER_GROUP</option> (Zahl)"
+
+#: usermod.8.xml:32(para) userdel.8.xml:32(para) useradd.8.xml:32(para)
+#: pwconv.8.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: grpck.8.xml:32(para) groupmod.8.xml:32(para) groupmems.8.xml:32(para)
+#: groupdel.8.xml:32(para) groupadd.8.xml:32(para) gpasswd.1.xml:32(para)
+#: chgpasswd.8.xml:32(para)
+msgid ""
+"Maximum members per group entry. When the maximum is reached, a new group "
+"entry (line) is started in <filename>/etc/group</filename> (with the same "
+"name, same password, and same GID)."
+msgstr ""
+"Maximale Anzahl von Mitgliedern je Gruppeneintrag. Wenn das Maximum erreicht "
+"wird, wird ein weiterer Eintrag in <filename>/etc/group</filename> (mit dem "
+"gleichen Namen, dem gleichen Passwort und der gleichen GID) erstellt."
+
+#: usermod.8.xml:37(para) userdel.8.xml:37(para) useradd.8.xml:37(para)
+#: pwconv.8.xml:37(para) newusers.8.xml:37(para) login.defs.5.xml:37(para)
+#: grpck.8.xml:37(para) groupmod.8.xml:37(para) groupmems.8.xml:37(para)
+#: groupdel.8.xml:37(para) groupadd.8.xml:37(para) gpasswd.1.xml:37(para)
+#: chgpasswd.8.xml:37(para)
+msgid ""
+"The default value is 0, meaning that there are no limits in the number of "
+"members in a group."
+msgstr ""
+"Der Standardwert ist 0, was zur Folge hat, dass die Anzahl der Mitglieder "
+"einer Gruppe nicht begrenzt ist."
+
+#. Note: on HP, split groups have the same ID, but different
+#. names.
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: pwconv.8.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: grpck.8.xml:43(para) groupmod.8.xml:43(para) groupmems.8.xml:43(para)
+#: groupdel.8.xml:43(para) groupadd.8.xml:43(para) gpasswd.1.xml:43(para)
+#: chgpasswd.8.xml:43(para)
+msgid ""
+"This feature (split group) permits to limit the length of lines in the group "
+"file. This is useful to make sure that lines for NIS groups are not larger "
+"than 1024 characters."
+msgstr ""
+"Diese Fähigkeit (der aufgeteilten Gruppe) ermöglicht es, die Zeilenlänge in "
+"der Gruppendatei zu begrenzen. Damit kann sichergestellt werden, dass die "
+"Zeilen für NIS-Gruppen nicht länger als 1024 Zeichen sind."
+
+#: usermod.8.xml:48(para) userdel.8.xml:48(para) useradd.8.xml:48(para)
+#: pwconv.8.xml:48(para) newusers.8.xml:48(para) login.defs.5.xml:48(para)
+#: grpck.8.xml:48(para) groupmod.8.xml:48(para) groupmems.8.xml:48(para)
+#: groupdel.8.xml:48(para) groupadd.8.xml:48(para) gpasswd.1.xml:48(para)
+#: chgpasswd.8.xml:48(para)
+msgid "If you need to enforce such limit, you can use 25."
+msgstr "Falls Sie eine solche Begrenzung benötigen, können Sie 25 verwenden."
+
+#: usermod.8.xml:51(para) userdel.8.xml:51(para) useradd.8.xml:51(para)
+#: pwconv.8.xml:51(para) newusers.8.xml:51(para) login.defs.5.xml:51(para)
+#: grpck.8.xml:51(para) groupmod.8.xml:51(para) groupmems.8.xml:51(para)
+#: groupdel.8.xml:51(para) groupadd.8.xml:51(para) gpasswd.1.xml:51(para)
+#: chgpasswd.8.xml:51(para)
+msgid ""
+"Note: split groups may not be supported by all tools (even in the Shadow "
+"toolsuite). You should not use this variable unless you really need it."
+msgstr ""
+"Hinweis: Aufgeteilte Gruppen werden möglicherweise nicht von allen "
+"Werkzeugen unterstützt, selbst nicht aus der Shadow-Werkzeugsammlung. Sie "
+"sollten diese Variable nur setzen, falls Sie zwingend darauf angewiesen sind."
+
+#: usermod.8.xml:30(term) useradd.8.xml:30(term) newusers.8.xml:30(term)
+#: login.defs.5.xml:30(term)
+#, fuzzy
+#| msgid "<option>SYS_GID_MIN</option> (number)"
+msgid "<option>SUB_GID_MIN</option> (number)"
+msgstr "<option>SYS_GID_MIN</option> (Zahl)"
+
+#: usermod.8.xml:31(term) useradd.8.xml:31(term) newusers.8.xml:31(term)
+#: login.defs.5.xml:31(term)
+#, fuzzy
+#| msgid "<option>SYS_GID_MAX</option> (number)"
+msgid "<option>SUB_GID_MAX</option> (number)"
+msgstr "<option>SYS_GID_MAX</option> (Zahl)"
+
+#: usermod.8.xml:32(term) useradd.8.xml:32(term) newusers.8.xml:32(term)
+#: login.defs.5.xml:32(term)
+#, fuzzy
+#| msgid "<option>SYS_GID_MIN</option> (number)"
+msgid "<option>SUB_GID_COUNT</option> (number)"
+msgstr "<option>SYS_GID_MIN</option> (Zahl)"
+
+#: usermod.8.xml:34(para) useradd.8.xml:34(para) newusers.8.xml:34(para)
+#: login.defs.5.xml:34(para)
+msgid ""
+"If <filename>/etc/subuid</filename> exists, the commands <command>useradd</"
+"command> and <command>newusers</command> (unless the user already have "
+"subordinate group IDs) allocate <option>SUB_GID_COUNT</option> unused group "
+"IDs from the range <option>SUB_GID_MIN</option> to <option>SUB_GID_MAX</"
+"option> for each new user."
+msgstr ""
+
+#: usermod.8.xml:42(para) useradd.8.xml:42(para) newusers.8.xml:42(para)
+#: login.defs.5.xml:42(para)
+#, fuzzy
+#| msgid ""
+#| "The default value for <option>SYS_GID_MIN</option> (resp. "
+#| "<option>SYS_GID_MAX</option>) is 101 (resp. <option>GID_MIN</option>-1)."
+msgid ""
+"The default values for <option>SUB_GID_MIN</option>, <option>SUB_GID_MAX</"
+"option>, <option>SUB_GID_COUNT</option> are respectively 100000, 600100000 "
+"and 65536."
+msgstr ""
+"Der Standardwert für <option>SYS_GID_MIN</option> ist 101, für "
+"<option>SYS_GID_MAX</option> <option>GID_MIN</option>-1."
+
+#: usermod.8.xml:30(term) useradd.8.xml:30(term) newusers.8.xml:30(term)
+#: login.defs.5.xml:30(term)
+#, fuzzy
+#| msgid "<option>SYS_UID_MIN</option> (number)"
+msgid "<option>SUB_UID_MIN</option> (number)"
+msgstr "<option>SYS_UID_MIN</option> (Zahl)"
+
+#: usermod.8.xml:31(term) useradd.8.xml:31(term) newusers.8.xml:31(term)
+#: login.defs.5.xml:31(term)
+#, fuzzy
+#| msgid "<option>SYS_UID_MAX</option> (number)"
+msgid "<option>SUB_UID_MAX</option> (number)"
+msgstr "<option>SYS_UID_MAX</option> (Zahl)"
+
+#: usermod.8.xml:32(term) useradd.8.xml:32(term) newusers.8.xml:32(term)
+#: login.defs.5.xml:32(term)
+#, fuzzy
+#| msgid "<option>SYS_UID_MIN</option> (number)"
+msgid "<option>SUB_UID_COUNT</option> (number)"
+msgstr "<option>SYS_UID_MIN</option> (Zahl)"
+
+#: usermod.8.xml:34(para) useradd.8.xml:34(para) newusers.8.xml:34(para)
+#: login.defs.5.xml:34(para)
+msgid ""
+"If <filename>/etc/subuid</filename> exists, the commands <command>useradd</"
+"command> and <command>newusers</command> (unless the user already have "
+"subordinate user IDs) allocate <option>SUB_UID_COUNT</option> unused user "
+"IDs from the range <option>SUB_UID_MIN</option> to <option>SUB_UID_MAX</"
+"option> for each new user."
+msgstr ""
+
+#: usermod.8.xml:42(para) useradd.8.xml:42(para) newusers.8.xml:42(para)
+#: login.defs.5.xml:42(para)
+#, fuzzy
+#| msgid ""
+#| "The default value for <option>SYS_UID_MIN</option> (resp. "
+#| "<option>SYS_UID_MAX</option>) is 101 (resp. <option>UID_MIN</option>-1)."
+msgid ""
+"The default values for <option>SUB_UID_MIN</option>, <option>SUB_UID_MAX</"
+"option>, <option>SUB_UID_COUNT</option> are respectively 100000, 600100000 "
+"and 65536."
+msgstr ""
+"Der Standardwert für <option>SYS_UID_MIN</option> ist 101, für "
+"<option>SYS_UID_MAX</option> <option>UID_MIN</option>-1."
+
+#: usermod.8.xml:30(term) userdel.8.xml:30(term) useradd.8.xml:30(term)
+#: pwck.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>TCB_SYMLINKS</option> (boolean)"
+msgstr "<option>TCB_SYMLINKS</option> (boolesch)"
+
+#: usermod.8.xml:37(programlisting) userdel.8.xml:37(programlisting)
+#: useradd.8.xml:37(programlisting) pwck.8.xml:37(programlisting)
+#: login.defs.5.xml:37(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"if ( UID is less than 1000) {\n"
+" use /etc/tcb/user\n"
+"} else if ( UID is less than 1000000) {\n"
+" kilos = UID / 1000\n"
+" use /etc/tcb/:kilos/user\n"
+" make symlink /etc/tcb/user to the above directory\n"
+"} else {\n"
+" megas = UID / 1000000\n"
+" kilos = ( UID / megas * 1000000 ) / 1000\n"
+" use /etc/tcb/:megas/:kilos/user\n"
+" make symlink /etc/tcb/user to the above directory\n"
+"}\n"
+" "
+msgstr ""
+"\n"
+"falls ( UID kleiner als 1000) {\n"
+" verwende /etc/tcb/user\n"
+"} anderenfalls, falls ( UID kleiner als 1000000) {\n"
+" kilos = UID / 1000\n"
+" verwende /etc/tcb/:kilos/user\n"
+" erstelle symbolischen Verweis /etc/tcb/user zu dem genannten Verzeichnis\n"
+"} anderenfalls {\n"
+" megas = UID / 1000000\n"
+" kilos = ( UID / megas * 1000000 ) / 1000\n"
+" verwende /etc/tcb/:megas/:kilos/user\n"
+" erstelle symbolischen Verweis /etc/tcb/user zu dem genannten Verzeichnis\n"
+"}\n"
+" "
+
+#: usermod.8.xml:32(para) userdel.8.xml:32(para) useradd.8.xml:32(para)
+#: pwck.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the location of the user tcb directory to "
+"be created will not be automatically set to /etc/tcb/user, but will be "
+"computed depending on the UID of the user, according to the following "
+"algorithm: <placeholder-1/>"
+msgstr ""
+"Falls der Wert <replaceable>yes</replaceable> ist, wird der Ort des Tcb-"
+"Verzeichnisses des Benutzers nicht automatisch /etc/tcb/user sein, sondern "
+"nach dem folgenden Algorithmus aus der UID des Benutzers errechnet: "
+"<placeholder-1/>"
+
+#: usermod.8.xml:557(filename) userdel.8.xml:214(filename)
+#: useradd.8.xml:757(filename) su.1.xml:381(filename)
+#: pwconv.8.xml:253(filename) passwd.1.xml:428(filename)
+#: newusers.8.xml:438(filename) login.access.5.xml:124(filename)
+#: login.1.xml:389(filename) groupmod.8.xml:237(filename)
+#: groupadd.8.xml:265(filename) chsh.1.xml:182(filename)
+#: chpasswd.8.xml:270(filename) chgpasswd.8.xml:228(filename)
+#: chfn.1.xml:210(filename)
+msgid "/etc/login.defs"
+msgstr "/etc/login.defs"
+
+#: usermod.8.xml:559(para) userdel.8.xml:216(para) useradd.8.xml:759(para)
+#: su.1.xml:383(para) pwconv.8.xml:255(para) passwd.1.xml:430(para)
+#: newusers.8.xml:440(para) login.access.5.xml:126(para) login.1.xml:391(para)
+#: groupmod.8.xml:239(para) groupadd.8.xml:267(para) chsh.1.xml:184(para)
+#: chpasswd.8.xml:272(para) chgpasswd.8.xml:230(para) chfn.1.xml:212(para)
+msgid "Shadow password suite configuration."
+msgstr "Konfiguration der Shadow-Passwort-Werkzeugsammlung"
+
+#: usermod.8.xml:575(filename) userdel.8.xml:232(filename)
+#: useradd.8.xml:745(filename) newusers.8.xml:450(filename)
+#, fuzzy
+#| msgid "/etc/suauth"
+msgid "/etc/subgid"
+msgstr "/etc/suauth"
+
+#: usermod.8.xml:577(para) userdel.8.xml:234(para) useradd.8.xml:747(para)
+#: newusers.8.xml:452(para)
+msgid "Per user subordinate group IDs."
+msgstr ""
+
+#: usermod.8.xml:581(filename) userdel.8.xml:238(filename)
+#: useradd.8.xml:751(filename) newusers.8.xml:456(filename)
+#, fuzzy
+#| msgid "/etc/suauth"
+msgid "/etc/subuid"
+msgstr "/etc/suauth"
+
+#: usermod.8.xml:583(para) userdel.8.xml:240(para) useradd.8.xml:753(para)
+#: newusers.8.xml:458(para)
+msgid "Per user subordinate user IDs."
+msgstr ""
+
+#: usermod.8.xml:591(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <phrase condition=\"subids"
+"\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: userdel.8.xml:63(refentrytitle) userdel.8.xml:70(refname)
+#: userdel.8.xml:75(command) login.defs.5.xml:500(term)
+msgid "userdel"
+msgstr "userdel"
+
+#: userdel.8.xml:71(refpurpose)
+msgid "delete a user account and related files"
+msgstr "löscht ein Benutzerkonto und die dazugehörigen Dateien"
+
+#: userdel.8.xml:85(para)
+msgid ""
+"The <command>userdel</command> command modifies the system account files, "
+"deleting all entries that refer to the user name <emphasis remap=\"I"
+"\">LOGIN</emphasis>. The named user must exist."
+msgstr ""
+"Der Befehl <command>userdel</command> bearbeitet die Kontodateien des "
+"Systems und löscht darin alle Einträge, die auf den <emphasis remap=\"I"
+"\">ANMELDENAMEN</emphasis> verweisen. Der bezeichnete Benutzer muss "
+"existieren."
+
+#: userdel.8.xml:94(para)
+msgid "The options which apply to the <command>userdel</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>userdel</command> unterstützt werden, "
+"sind:"
+
+#: userdel.8.xml:99(term) groupadd.8.xml:100(term) expiry.1.xml:103(term)
+msgid "<option>-f</option>, <option>--force</option>"
+msgstr "<option>-f</option>, <option>--force</option"
+
+#: userdel.8.xml:103(para)
+msgid ""
+"This option forces the removal of the user account, even if the user is "
+"still logged in. It also forces <command>userdel</command> to remove the "
+"user's home directory and mail spool, even if another user uses the same "
+"home directory or if the mail spool is not owned by the specified user. If "
+"<option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename> and if a group exists with "
+"the same name as the deleted user, then this group will be removed, even if "
+"it is still the primary group of another user."
+msgstr ""
+"Diese Option erzwingt, dass der Benutzer entfernt wird, selbst wenn er noch "
+"angemeldet ist. Sie führt auch dazu, dass <command>userdel</command> das "
+"Home-Verzeichnis und den Mailspool des Benutzers entfernt, sogar wenn ein "
+"anderer Benutzer dasselbe Home-Verzeichnis hat oder der Mailspool nicht dem "
+"angegebenen Benutzer gehört. Falls in <filename>/etc/login.defs</filename> "
+"<option>USERGROUPS_ENAB</option> auf <emphasis remap=\"I\">yes</emphasis> "
+"gesetzt ist und eine Gruppe mit dem gleichen Namen wie der gelöschte "
+"Benutzer vorhanden ist, wird auch diese Gruppe entfernt, selbst wenn sie die "
+"Hauptgruppe anderer Benutzer ist."
+
+#: userdel.8.xml:116(para)
+msgid ""
+"<emphasis>Note:</emphasis> This option is dangerous and may leave your "
+"system in an inconsistent state."
+msgstr ""
+"<emphasis>Hinweis:</emphasis> Diese Option ist gefährlich und kann dazu "
+"führen, dass Ihr System nicht mehr ordnungsgemäß funktioniert."
+
+#: userdel.8.xml:129(term)
+msgid "<option>-r</option>, <option>--remove</option>"
+msgstr "<option>-r</option>, <option>--remove</option>"
+
+#: userdel.8.xml:133(para)
+msgid ""
+"Files in the user's home directory will be removed along with the home "
+"directory itself and the user's mail spool. Files located in other file "
+"systems will have to be searched for and deleted manually."
+msgstr ""
+"Die Dateien im Home-Verzeichnis des Benutzers werden zusammen mit dem Home-"
+"Verzeichnis und dem Mailspool entfernt. Dateien, die sich nicht unterhalb "
+"des Home-Verzeichnisses befinden, müssen per Hand gesucht und gelöscht "
+"werden."
+
+#: userdel.8.xml:139(para)
+msgid ""
+"The mail spool is defined by the <option>MAIL_DIR</option> variable in the "
+"<filename>login.defs</filename> file."
+msgstr ""
+"Der Mailspool wird durch die Variable <option>MAIL_DIR</option> in der Datei "
+"<filename>login.defs</filename> definiert."
+
+#: userdel.8.xml:175(term)
+msgid "<option>-Z</option>, <option>--selinux-user</option>"
+msgstr "<option>-Z</option>, <option>--selinux-user</option>"
+
+#: userdel.8.xml:179(para)
+msgid "Remove any SELinux user mapping for the user's login."
+msgstr ""
+"entfernt die Zuordnung von SELinux-Benutzern aus den Anmeldeinformationen "
+"des Benutzers"
+
+#: userdel.8.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>USERDEL_CMD</option> (string)"
+msgstr "<option>USERDEL_CMD</option> (Zeichenkette)"
+
+#: userdel.8.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If defined, this command is run when removing a user. It should remove any "
+"at/cron/print jobs etc. owned by the user to be removed (passed as the first "
+"argument)."
+msgstr ""
+"Falls angegeben, wird dieser Befehl ausgeführt, wenn ein Benutzer entfernt "
+"wird. Damit können At-, Cron- und Druckaufträge etc. des entfernten "
+"Benutzers (wird als erstes Argument übergeben) gelöscht werden."
+
+#: userdel.8.xml:40(para) login.defs.5.xml:40(para)
+msgid "The return code of the script is not taken into account."
+msgstr "Der Rückgabewert des Skripts wird nicht ausgewertet."
+
+#: userdel.8.xml:46(programlisting) login.defs.5.xml:46(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"#! /bin/sh\n"
+"\n"
+"# Check for the required argument.\n"
+"if [ $# != 1 ]; then\n"
+"\techo \"Usage: $0 username\"\n"
+"\texit 1\n"
+"fi\n"
+"\n"
+"# Remove cron jobs.\n"
+"crontab -r -u $1\n"
+"\n"
+"# Remove at jobs.\n"
+"# Note that it will remove any jobs owned by the same UID,\n"
+"# even if it was shared by a different username.\n"
+"AT_SPOOL_DIR=/var/spool/cron/atjobs\n"
+"find $AT_SPOOL_DIR -name \"[^.]*\" -type f -user $1 -delete \\;\n"
+"\n"
+"# Remove print jobs.\n"
+"lprm $1\n"
+"\n"
+"# All done.\n"
+"exit 0\n"
+" "
+msgstr ""
+"\n"
+"#! /bin/sh\n"
+"\n"
+"# Prüfen, ob das benötigte Argument angegeben wurde\n"
+"if [ $# != 1 ]; then\n"
+"\techo \"Verwendungsweise: $0 Benutzername\"\n"
+"\texit 1\n"
+"fi\n"
+"\n"
+"# cron-Aufträge entfernen\n"
+"crontab -r -u $1\n"
+"\n"
+"# at-Aufträge entfernen.\n"
+"# Hinweis: Dies wird alle Aufträge entfernen, die der gleichen UID\n"
+"# gehören, selbst wenn sie von einem Benutzer mit einem anderen Namen\n"
+"# eingerichtet wurden.\n"
+"AT_SPOOL_DIR=/var/spool/cron/atjobs\n"
+"find $AT_SPOOL_DIR -name \"[^.]*\" -type f -user $1 -delete \\;\n"
+"\n"
+"# Druck-Aufträge entfernen\n"
+"lprm $1\n"
+"\n"
+"# Fertig\n"
+"exit 0\n"
+" "
+
+#: userdel.8.xml:43(para) login.defs.5.xml:43(para)
+msgid ""
+"Here is an example script, which removes the user's cron, at and print jobs: "
+"<placeholder-1/>"
+msgstr ""
+"Dies ist ein Beispielsskript, das die cron-, at- und Druckaufträge des "
+"Benutzers entfernt:<placeholder-1/>"
+
+#: userdel.8.xml:32(term) useradd.8.xml:32(term) su.1.xml:32(term)
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>USERGROUPS_ENAB</option> (boolean)"
+msgstr "<option>USERGROUPS_ENAB</option> (boolesch)"
+
+#: userdel.8.xml:34(para) useradd.8.xml:34(para) su.1.xml:34(para)
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable setting of the umask group bits to be the same as owner bits "
+"(examples: 022 -&gt; 002, 077 -&gt; 007) for non-root users, if the uid is "
+"the same as gid, and username is the same as the primary group name."
+msgstr ""
+"Erlaubt Benutzern, die nicht Root sind, die Umask-Gruppen-Bits auf ihre "
+"Umask-Bits zu setzen (Beispiel: 022 -&gt; 002, 077 -&gt; 007), falls die UID "
+"mit der GID identisch ist sowie der Benutzername mit dem Gruppennamen "
+"übereinstimmt."
+
+#: userdel.8.xml:39(para) useradd.8.xml:39(para) su.1.xml:39(para)
+#: login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, <command>userdel</command> will "
+"remove the user's group if it contains no more members, and "
+"<command>useradd</command> will create by default a group with the name of "
+"the user."
+msgstr ""
+"Wenn der Wert <replaceable>yes</replaceable> ist, wird <command>userdel</"
+"command> die Gruppe des Benutzers entfernen, falls sie keine Mitglieder mehr "
+"hat, und <command>useradd</command> wird standardmäßig eine Gruppe mit dem "
+"Namen des Benutzers erstellen."
+
+#: userdel.8.xml:247(title) useradd.8.xml:766(title) su.1.xml:390(title)
+#: pwck.8.xml:303(title) passwd.1.xml:443(title) grpck.8.xml:245(title)
+#: groupmod.8.xml:252(title) groupdel.8.xml:175(title)
+#: groupadd.8.xml:296(title) chage.1.xml:284(title)
+msgid "EXIT VALUES"
+msgstr "RÜCKGABEWERTE"
+
+#: userdel.8.xml:252(replaceable) useradd.8.xml:771(replaceable)
+#: su.1.xml:409(replaceable) pwck.8.xml:308(replaceable)
+#: passwd.1.xml:448(replaceable) grpck.8.xml:250(replaceable)
+#: groupmod.8.xml:257(replaceable) groupdel.8.xml:180(replaceable)
+#: groupadd.8.xml:301(replaceable) chage.1.xml:289(replaceable)
+msgid "0"
+msgstr "0"
+
+#: userdel.8.xml:254(para) useradd.8.xml:773(para) pwck.8.xml:310(para)
+#: passwd.1.xml:450(para) grpck.8.xml:252(para) groupdel.8.xml:182(para)
+#: groupadd.8.xml:303(para) chage.1.xml:291(para)
+msgid "success"
+msgstr "Erfolg"
+
+#: userdel.8.xml:258(replaceable) useradd.8.xml:777(replaceable)
+#: su.1.xml:75(manvolnum) su.1.xml:415(replaceable) sg.1.xml:59(manvolnum)
+#: pwck.8.xml:314(replaceable) passwd.1.xml:65(manvolnum)
+#: passwd.1.xml:454(replaceable) newgrp.1.xml:59(manvolnum)
+#: login.1.xml:91(manvolnum) grpck.8.xml:256(replaceable)
+#: groups.1.xml:58(manvolnum) gpasswd.1.xml:63(manvolnum)
+#: expiry.1.xml:62(manvolnum) chsh.1.xml:61(manvolnum) chfn.1.xml:61(manvolnum)
+#: chage.1.xml:59(manvolnum) chage.1.xml:295(replaceable)
+msgid "1"
+msgstr "1"
+
+#: userdel.8.xml:260(para) useradd.8.xml:779(para)
+msgid "can't update password file"
+msgstr "Die Passwortdatei kann nicht aktualisieren werden."
+
+#: userdel.8.xml:264(replaceable) useradd.8.xml:783(replaceable)
+#: pwck.8.xml:320(replaceable) passwd.1.xml:460(replaceable)
+#: grpck.8.xml:262(replaceable) groupmod.8.xml:263(replaceable)
+#: groupdel.8.xml:186(replaceable) groupadd.8.xml:307(replaceable)
+#: chage.1.xml:301(replaceable)
+msgid "2"
+msgstr "2"
+
+#: userdel.8.xml:266(para) useradd.8.xml:785(para) pwck.8.xml:316(para)
+#: grpck.8.xml:258(para) groupdel.8.xml:188(para) groupadd.8.xml:309(para)
+#: chage.1.xml:303(para)
+msgid "invalid command syntax"
+msgstr "unzulässige Syntax für diesen Befehl"
+
+#: userdel.8.xml:270(replaceable) useradd.8.xml:801(replaceable)
+#: pwck.8.xml:344(replaceable) passwd.1.xml:484(replaceable)
+#: groupmod.8.xml:281(replaceable) groupdel.8.xml:192(replaceable)
+msgid "6"
+msgstr "6"
+
+#: userdel.8.xml:272(para)
+msgid "specified user doesn't exist"
+msgstr "Der angegebene Benutzer ist nicht vorhanden."
+
+#: userdel.8.xml:278(para)
+msgid "user currently logged in"
+msgstr "Benutzer ist im Moment angemeldet."
+
+#: userdel.8.xml:282(replaceable) useradd.8.xml:813(replaceable)
+#: groupmod.8.xml:293(replaceable) groupdel.8.xml:204(replaceable)
+#: groupadd.8.xml:331(replaceable)
+msgid "10"
+msgstr "10"
+
+#: userdel.8.xml:284(para) useradd.8.xml:815(para) groupdel.8.xml:206(para)
+#: groupadd.8.xml:333(para)
+msgid "can't update group file"
+msgstr "Die Gruppendatei kann nicht aktualisieren werden."
+
+#: userdel.8.xml:288(replaceable) useradd.8.xml:819(replaceable)
+#: groupmod.8.xml:305(replaceable)
+msgid "12"
+msgstr "12"
+
+#: userdel.8.xml:290(para)
+msgid "can't remove home directory"
+msgstr "Das Home-Verzeichnis kann nicht gelöscht werden."
+
+#: userdel.8.xml:248(para)
+msgid ""
+"The <command>userdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Der Befehl <command>userdel</command> gibt beim Beenden folgende Werte "
+"zurück: <placeholder-1/>"
+
+#: userdel.8.xml:299(para)
+msgid ""
+"<command>userdel</command> will not allow you to remove an account if there "
+"are running processes which belong to this account. In that case, you may "
+"have to kill those processes or lock the user's password or account and "
+"remove the account later. The <option>-f</option> option can force the "
+"deletion of this account."
+msgstr ""
+"<command>userdel</command> löscht ein Benutzerkonto nicht, wenn Prozesse "
+"laufen, die diesem Konto gehören. In diesem Fall müssen Sie entweder diese "
+"Prozesse beenden oder das Passwort oder Konto des Benutzers sperren und das "
+"Konto später entfernen. Die Option <option>-f</option> erzwingt das Löschen "
+"eines Kontos."
+
+#: userdel.8.xml:306(para)
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this user."
+msgstr ""
+"Sie sollten von Hand alle Systemdateien überprüfen, um sicherzustellen, dass "
+"keine Dateien vorhanden sind, die dem gelöschten Benutzer gehören."
+
+#: userdel.8.xml:310(para)
+msgid ""
+"You may not remove any NIS attributes on a NIS client. This must be "
+"performed on the NIS server."
+msgstr ""
+"Sie sollten keine NIS-Attribute auf einem NIS-Client löschen. Dies muss auf "
+"dem NIS-Server durchgeführt werden."
+
+#: userdel.8.xml:313(para)
+msgid ""
+"If <option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename>, <command>userdel</"
+"command> will delete the group with the same name as the user. To avoid "
+"inconsistencies in the passwd and group databases, <command>userdel</"
+"command> will check that this group is not used as a primary group for "
+"another user, and will just warn without deleting the group otherwise. The "
+"<option>-f</option> option can force the deletion of this group."
+msgstr ""
+"Falls in <filename>/etc/login.defs</filename> <option>USERGROUPS_ENAB</"
+"option> auf <emphasis remap=\"I\">yes</emphasis> gesetzt ist, wird "
+"<command>userdel</command> die Gruppe mit dem gleichen Namen wie der "
+"Benutzer entfernen. Um Unstimmigkeiten in der Passwort- und Gruppendatenbank "
+"zu vermeiden, überprüft <command>userdel</command>, ob diese Gruppe die "
+"Hauptgruppe für andere Benutzer ist. Gegebenenfalls wird eine Warnung "
+"angezeigt und die betreffende Gruppe nicht entfernt. Mit der Option <option>-"
+"f</option> kann das Löschen dieser Gruppe erzwungen werden."
+
+#: userdel.8.xml:326(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"subids\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: useradd.8.xml:76(refentrytitle) useradd.8.xml:83(refname)
+#: useradd.8.xml:88(command) useradd.8.xml:95(command)
+#: useradd.8.xml:99(command) login.defs.5.xml:482(term)
+msgid "useradd"
+msgstr "useradd"
+
+#: useradd.8.xml:84(refpurpose)
+msgid "create a new user or update default new user information"
+msgstr ""
+"erstellt einen neuen Benutzer oder aktualisiert die Standardwerte für neue "
+"Benutzer"
+
+#: useradd.8.xml:96(arg) useradd.8.xml:100(arg)
+msgid "-D"
+msgstr "-D"
+
+#: useradd.8.xml:109(para)
+msgid ""
+"When invoked without the <option>-D</option> option, the <command>useradd</"
+"command> command creates a new user account using the values specified on "
+"the command line plus the default values from the system. Depending on "
+"command line options, the <command>useradd</command> command will update "
+"system files and may also create the new user's home directory and copy "
+"initial files."
+msgstr ""
+"Wenn der Befehl <command>useradd</command> ohne die Option <option>-D</"
+"option> aufgerufen wird, wird ein neues Benutzerkonto mit den Werten "
+"erstellt, die auf der Befehlszeile angegeben wurden, und den Standardwerten "
+"des Systems. Je nach den Optionen auf der Befehlszeile aktualisiert der "
+"Befehl <command>useradd</command> Systemdateien, erstellt ein Home-"
+"Verzeichnis für den neuen Benutzer und kopiert Dateien."
+
+#: useradd.8.xml:118(para)
+msgid ""
+"By default, a group will also be created for the new user (see <option>-g</"
+"option>, <option>-N</option>, <option>-U</option>, and "
+"<option>USERGROUPS_ENAB</option>)."
+msgstr ""
+"Standardmäßig wird auch eine Gruppe für den neuen Benutzer erstellt "
+"(vergleiche <option>-g</option>, <option>-N</option>, <option>-U</option> "
+"und <option>USERGROUPS_ENAB</option>)."
+
+#: useradd.8.xml:127(para)
+msgid "The options which apply to the <command>useradd</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>useradd</command> unterstützt werden, "
+"sind:"
+
+#: useradd.8.xml:132(option) pwck.8.xml:187(option) newusers.8.xml:273(option)
+msgid "--badname"
+msgstr ""
+
+#: useradd.8.xml:141(term) useradd.8.xml:559(term)
+msgid ""
+"<option>-b</option>, <option>--base-dir</option>&nbsp;<replaceable>BASE_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-b</option>, <option>--base-dir</option>&nbsp;"
+"<replaceable>WURZEL_VERZ</replaceable>"
+
+#: useradd.8.xml:145(para)
+msgid ""
+"The default base directory for the system if <option>-d</option>&nbsp;"
+"<replaceable>HOME_DIR</replaceable> is not specified. <replaceable>BASE_DIR</"
+"replaceable> is concatenated with the account name to define the home "
+"directory. If the <option>-m</option> option is not used, "
+"<replaceable>BASE_DIR</replaceable> must exist."
+msgstr ""
+"Das standardmäßige Wurzelverzeichnis des Systems, wenn nicht eines mit "
+"<option>-d</option>&nbsp;<replaceable>HOME_VERZ</replaceable> festgelegt "
+"wurde. Der Name des Home-Verzeichnisses besteht aus der Verbindung von "
+"<replaceable>WURZEL_VERZ</replaceable> und dem Kontonamen. Wenn die Option "
+"<option>-m</option> nicht verwendet wird, muss <replaceable>WURZEL_VERZ</"
+"replaceable> existieren."
+
+#: useradd.8.xml:152(para)
+msgid ""
+"If this option is not specified, <command>useradd</command> will use the "
+"base directory specified by the <option>HOME</option> variable in <filename>/"
+"etc/default/useradd</filename>, or <filename>/home</filename> by default."
+msgstr ""
+"Falls diese Option nicht angegeben wird, verwendet <command>useradd</"
+"command> das Wurzelverzeichnis, das mit der Variable <option>HOME</option> "
+"in <filename>/etc/default/useradd</filename> festgelegt wurde, anderenfalls "
+"<filename>/home</filename>."
+
+#: useradd.8.xml:166(para)
+msgid ""
+"Any text string. It is generally a short description of the login, and is "
+"currently used as the field for the user's full name."
+msgstr ""
+"Eine beliebige Zeichenkette. Dies ist für gewöhnlich eine kurze Beschreibung "
+"des Logins und wird im Moment im Feld für den vollständigen Namen des "
+"Benutzers gespeichert."
+
+#: useradd.8.xml:174(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_DIR</"
+#| "replaceable>"
+msgid ""
+"<option>-d</option>, <option>--home-dir</option>&nbsp;<replaceable>HOME_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_VERZ</"
+"replaceable>"
+
+#: useradd.8.xml:178(para)
+msgid ""
+"The new user will be created using <replaceable>HOME_DIR</replaceable> as "
+"the value for the user's login directory. The default is to append the "
+"<replaceable>LOGIN</replaceable> name to <replaceable>BASE_DIR</replaceable> "
+"and use that as the login directory name. The directory "
+"<replaceable>HOME_DIR</replaceable> does not have to exist but will not be "
+"created if it is missing."
+msgstr ""
+"Beim Anlegen des neuen Benutzers wird <replaceable>HOME_VERZ</replaceable> "
+"als das Anmeldeverzeichnis des Benutzers verwendet. Um den Namen des "
+"Anmeldeverzeichnisses zu erhalten, wird standardmäßig der "
+"<replaceable>ANMELDE</replaceable>-Name an <replaceable>WURZEL_VERZ</"
+"replaceable> angehängt. Das Verzeichnis <replaceable>HOME_VERZ</replaceable> "
+"muss nicht vorhanden sein, sondern wird gegebenenfalls angelegt."
+
+#: useradd.8.xml:190(term)
+msgid "<option>-D</option>, <option>--defaults</option>"
+msgstr "<option>-D</option>, <option>--defaults</option>"
+
+#: useradd.8.xml:194(para)
+msgid "See below, the subsection \"Changing the default values\"."
+msgstr "Lesen Sie dazu unten den Abschnitt »Die Standardwerte verändern«."
+
+#: useradd.8.xml:208(para)
+msgid ""
+"If not specified, <command>useradd</command> will use the default expiry "
+"date specified by the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or an empty string (no expiry) by default."
+msgstr ""
+"Falls nicht definiert, verwendet <command>useradd</command> das "
+"Standardverfallsdatum, das mit der Variable <option>EXPIRE</option> in "
+"<filename>/etc/default/useradd</filename> bestimmt wurde, anderenfalls eine "
+"leere Zeichenkette (kein Verfall)."
+
+#: useradd.8.xml:221(para)
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled. A value of 0 disables the account as soon as the password has "
+"expired, and a value of -1 disables the feature."
+msgstr ""
+"Die Anzahl von Tagen nach Ablaufen des Passworts bis das Konto dauerhaft "
+"deaktiviert wird. Ein Wert von 0 deaktiviert das Konto, sobald das Passwort "
+"abläuft. Ein Wert von -1 schaltet diese Funktion ab."
+
+#: useradd.8.xml:227(para)
+msgid ""
+"If not specified, <command>useradd</command> will use the default inactivity "
+"period specified by the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or -1 by default."
+msgstr ""
+"Falls nicht definiert, verwendet <command>useradd</command> die "
+"Standarddauer der Inaktivität, die mit der Variable <option>INACTIVE</"
+"option> in <filename>/etc/default/useradd</filename> bestimmt wurde, "
+"anderenfalls -1."
+
+#: useradd.8.xml:240(para)
+msgid ""
+"The group name or number of the user's initial login group. The group name "
+"must exist. A group number must refer to an already existing group."
+msgstr ""
+"Der Name oder die Nummer der anfänglichen Anmeldegruppe des Benutzers. Der "
+"Gruppenname muss existieren. Die Gruppenzahl muss auf eine bereits "
+"vorhandene Gruppe verweisen."
+
+#: useradd.8.xml:245(para)
+msgid ""
+"If not specified, the behavior of <command>useradd</command> will depend on "
+"the <option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>. If this variable is set to <replaceable>yes</replaceable> (or "
+"<option>-U/--user-group</option> is specified on the command line), a group "
+"will be created for the user, with the same name as her loginname. If the "
+"variable is set to <replaceable>no</replaceable> (or <option>-N/--no-user-"
+"group</option> is specified on the command line), useradd will set the "
+"primary group of the new user to the value specified by the <option>GROUP</"
+"option> variable in <filename>/etc/default/useradd</filename>, or 100 by "
+"default."
+msgstr ""
+"Falls nicht definiert, hängt das Verhalten von <command>useradd</command> "
+"von der Variable <option>USERGROUPS_ENAB</option> in <filename>/etc/login."
+"defs</filename> ab. Wenn diese Variable auf <replaceable>yes</replaceable> "
+"gesetzt ist (oder auf der Befehlszeile <option>-U/--user-group</option> "
+"angegeben wurde), wird für den Benutzer eine Gruppe, die auf seinen Namen "
+"lautet, erstellt. Wenn die Variable auf <replaceable>no</replaceable> "
+"gesetzt ist (oder auf der Befehlszeile <option>-N/--no-user-group</option> "
+"angegeben wurde), legt useradd als Hauptgruppe des neuen Benutzers diejenige "
+"fest, die mit der Variable <option>GROUP</option> in <filename>/etc/default/"
+"useradd</filename> definiert wurde, anderenfalls 100."
+
+#: useradd.8.xml:267(para)
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option. The default is for the user to belong only to "
+"the initial group."
+msgstr ""
+"Eine Liste der zusätzlichen Gruppen, denen der Benutzer ebenfalls angehört. "
+"Die Gruppen sind durch Kommata ohne Leerzeichen voneinander zu trennen. Die "
+"Gruppen unterliegen denselben Beschränkungen wie die Gruppe, die mit der "
+"Option <option>-g</option> bestimmt wurde. Standardmäßig ist der Benutzer "
+"nur Mitglied der Ausgangsgruppe."
+
+#: useradd.8.xml:284(term)
+msgid ""
+"<option>-k</option>, <option>--skel</option>&nbsp;<replaceable>SKEL_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-k</option>, <option>--skel</option>&nbsp;<replaceable>GERÜST_VERZ</"
+"replaceable>"
+
+#: useradd.8.xml:288(para)
+msgid ""
+"The skeleton directory, which contains files and directories to be copied in "
+"the user's home directory, when the home directory is created by "
+"<command>useradd</command>."
+msgstr ""
+"Das Gerüstverzeichnis, das die Dateien und Verzeichnisse enthält, die in das "
+"Home-Verzeichnis des Benutzers kopiert werden, wenn es von <command>useradd</"
+"command> erstellt wird."
+
+#: useradd.8.xml:293(para)
+msgid ""
+"This option is only valid if the <option>-m</option> (or <option>--create-"
+"home</option>) option is specified."
+msgstr ""
+"Diese Option ist nur zulässig, wenn auch die Option <option>-m</option> "
+"(oder <option>--create-home</option>) angegeben wird."
+
+#: useradd.8.xml:297(para)
+msgid ""
+"If this option is not set, the skeleton directory is defined by the "
+"<option>SKEL</option> variable in <filename>/etc/default/useradd</filename> "
+"or, by default, <filename>/etc/skel</filename>."
+msgstr ""
+"Wenn diese Option nicht angegeben wird, wird das Gerüstverzeichnis durch die "
+"Variable <option>SKEL</option> in <filename>/etc/default/useradd</filename> "
+"festgelegt, anderenfalls ist dieses <filename>/etc/skel</filename>."
+
+#: useradd.8.xml:303(para)
+msgid "If possible, the ACLs and extended attributes are copied."
+msgstr "Soweit möglich, werden die ACLs und erweiterten Attribute kopiert."
+
+#: useradd.8.xml:309(term) groupadd.8.xml:137(term)
+msgid ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
+"replaceable>=<replaceable>VALUE</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>SCHLÜSSEL</"
+"replaceable>=<replaceable>WERT</replaceable>"
+
+#: useradd.8.xml:313(para)
+#, fuzzy
+#| msgid ""
+#| "Overrides <filename>/etc/login.defs</filename> defaults (<option>UID_MIN</"
+#| "option>, <option>UID_MAX</option>, <option>UMASK</option>, "
+#| "<option>PASS_MAX_DAYS</option> and others). <placeholder-1/> Example: "
+#| "<option>-K</option>&nbsp;<replaceable>PASS_MAX_DAYS</"
+#| "replaceable>=<replaceable>-1</replaceable> can be used when creating "
+#| "system account to turn off password ageing, even though system account "
+#| "has no password at all. Multiple <option>-K</option> options can be "
+#| "specified, e.g.: <option>-K</option>&nbsp;<replaceable>UID_MIN</"
+#| "replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+#| "<replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (<option>UID_MIN</"
+"option>, <option>UID_MAX</option>, <option>UMASK</option>, "
+"<option>PASS_MAX_DAYS</option> and others). <placeholder-1/> Example: "
+"<option>-K</option>&nbsp;<replaceable>PASS_MAX_DAYS</"
+"replaceable>=<replaceable>-1</replaceable> can be used when creating system "
+"account to turn off password aging, even though system account has no "
+"password at all. Multiple <option>-K</option> options can be specified, e."
+"g.: <option>-K</option>&nbsp;<replaceable>UID_MIN</"
+"replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+"<replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+"Überschreibt die Standardwerte aus <filename>/etc/login.defs</filename> "
+"(<option>UID_MIN</option>, <option>UID_MAX</option>, <option>UMASK</option>, "
+"<option>PASS_MAX_DAYS</option> und andere). <placeholder-1/> Beispiel: "
+"<option>-K</option>&nbsp;<replaceable>PASS_MAX_TAGE</"
+"replaceable>=<replaceable>-1</replaceable> kann eingesetzt werden, wenn ein "
+"Systemkonto erstellt wird, um den Verfall des Passworts abzuschalten, selbst "
+"wenn das Systemkonto überhaupt kein Passwort besitzt. Die Option <option>-K</"
+"option> kann mehrmals verwendet werden, z.B.: <option>-K</option>&nbsp;"
+"<replaceable>UID_MIN</replaceable>=<replaceable>100</replaceable>&nbsp;"
+"<option>-K</option>&nbsp;<replaceable>UID_MAX</"
+"replaceable>=<replaceable>499</replaceable>"
+
+#: useradd.8.xml:334(term)
+msgid "<option>-l</option>, <option>--no-log-init</option>"
+msgstr "<option>-l</option>, <option>--no-log-init</option>"
+
+#: useradd.8.xml:336(para)
+msgid "Do not add the user to the lastlog and faillog databases."
+msgstr "Fügt den Benutzer nicht zu den Datenbanken lastlog und faillog hinzu."
+
+#: useradd.8.xml:339(para)
+#, fuzzy
+#| msgid ""
+#| "By default, the user's entries in the lastlog and faillog databases are "
+#| "resetted to avoid reusing the entry from a previously deleted user."
+msgid ""
+"By default, the user's entries in the lastlog and faillog databases are "
+"reset to avoid reusing the entry from a previously deleted user."
+msgstr ""
+"Standardmäßig werden die Benutzereinträge in den Datenbanken lastlog und "
+"faillog zurückgesetzt, um zu vermeiden, dass der Eintrag eines früher "
+"gelöschten Benutzers verwendet wird."
+
+#: useradd.8.xml:347(term)
+msgid "<option>-m</option>, <option>--create-home</option>"
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:351(para)
+msgid ""
+"Create the user's home directory if it does not exist. The files and "
+"directories contained in the skeleton directory (which can be defined with "
+"the <option>-k</option> option) will be copied to the home directory."
+msgstr ""
+"Erstellt das Home-Verzeichnis des Benutzers, wenn es nicht vorhanden ist. "
+"Die Dateien und Verzeichnisse im Gerüstverzeichnis, das mit der Option "
+"<option>-k</option> festgelegt werden kann, werden in das Home-Verzeichnis "
+"kopiert."
+
+#: useradd.8.xml:357(para)
+msgid ""
+"By default, if this option is not specified and <option>CREATE_HOME</option> "
+"is not enabled, no home directories are created."
+msgstr ""
+"Wenn diese Option nicht angegeben wird und <option>CREATE_HOME</option> "
+"nicht aktiviert wurde, wird standardmäßig kein Home-Verzeichnis erstellt."
+
+#: useradd.8.xml:365(term)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid "<option>-M</option>, <option>--no-create-home</option>"
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:369(para)
+msgid ""
+"Do no create the user's home directory, even if the system wide setting from "
+"<filename>/etc/login.defs</filename> (<option>CREATE_HOME</option>) is set "
+"to <replaceable>yes</replaceable>."
+msgstr ""
+"Erstellt nicht das Home-Verzeichnis des Benutzers, selbst wenn die "
+"systemweite Option <option>CREATE_HOME</option> in <filename>/etc/login."
+"defs</filename> auf <replaceable>yes</replaceable> gesetzt ist."
+
+#: useradd.8.xml:378(term)
+msgid "<option>-N</option>, <option>--no-user-group</option>"
+msgstr "<option>-N</option>, <option>--no-user-group</option>"
+
+#: useradd.8.xml:382(para)
+msgid ""
+"Do not create a group with the same name as the user, but add the user to "
+"the group specified by the <option>-g</option> option or by the "
+"<option>GROUP</option> variable in <filename>/etc/default/useradd</filename>."
+msgstr ""
+"Erstellt keine Gruppe mit dem gleichen Namen wie der Benutzer, aber fügt ihn "
+"der Gruppe hinzu, die mit der Option <option>-g</option> oder mit der "
+"Variable <option>GROUP</option> in <filename>/etc/default/useradd</filename> "
+"angegeben wurde."
+
+#: useradd.8.xml:388(para) useradd.8.xml:526(para)
+msgid ""
+"The default behavior (if the <option>-g</option>, <option>-N</option>, and "
+"<option>-U</option> options are not specified) is defined by the "
+"<option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+"Wenn die Optionen <option>-g</option>, <option>-N</option> und <option>-U</"
+"option> nicht angegeben werden, wird das Verhalten durch die Variable "
+"<option>USERGROUPS_ENAB</option> in <filename>/etc/login.defs</filename> "
+"bestimmt."
+
+#: useradd.8.xml:401(para)
+msgid "Allow the creation of a user account with a duplicate (non-unique) UID."
+msgstr ""
+"Erlaubt das Erstellen eines Benutzerkontos mit einer schon vergebenen (nicht "
+"eindeutigen) UID."
+
+#: useradd.8.xml:402(para)
+msgid ""
+"This option is only valid in combination with the <option>-u</option> option."
+msgstr ""
+"Diese Option kann nur in Verbindung mit der Option <option>-u</option> "
+"verwendet werden."
+
+#: useradd.8.xml:413(para) groupadd.8.xml:171(para)
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>. The default is to "
+"disable the password."
+msgstr ""
+"Das verschlüsselte Passwort, wie es von <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry> zurückgegeben wird. "
+"Standardmäßig ist das Passwort deaktiviert."
+
+#: useradd.8.xml:430(term) newusers.8.xml:302(term) groupadd.8.xml:188(term)
+msgid "<option>-r</option>, <option>--system</option>"
+msgstr "<option>-r</option>, <option>--system</option>"
+
+#: useradd.8.xml:434(para) newusers.8.xml:306(para)
+msgid "Create a system account."
+msgstr "erstellt ein Systemkonto"
+
+#: useradd.8.xml:437(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are chosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>/etc/login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+"Systembenutzer werden ohne Hinterlegung ihres Alters in <filename>/etc/"
+"shadow</filename> erstellt. Ihre numerische Kennung wird aus der Spanne "
+"<option>SYS_UID_MIN</option> bis <option>SYS_UID_MAX</option> anstelle von "
+"<option>UID_MIN</option> bis <option>UID_MAX</option> gewählt (gleiches gilt "
+"für die GID bei der Erstellung von Gruppen)."
+
+#: useradd.8.xml:446(para)
+#, fuzzy
+#| msgid ""
+#| "Note that <command>useradd</command> will not create a home directory for "
+#| "such an user, regardless of the default setting in <filename>/etc/login."
+#| "defs</filename> (<option>CREATE_HOME</option>). You have to specify the "
+#| "<option>-m</option> options if you want a home directory for a system "
+#| "account to be created."
+msgid ""
+"Note that <command>useradd</command> will not create a home directory for "
+"such a user, regardless of the default setting in <filename>/etc/login.defs</"
+"filename> (<option>CREATE_HOME</option>). You have to specify the <option>-"
+"m</option> options if you want a home directory for a system account to be "
+"created."
+msgstr ""
+"Beachten Sie, dass <command>useradd</command> für einen solchen Benutzer "
+"unabhängig von der Einstellung in <filename>/etc/login.defs</filename> "
+"(<option>CREATE_HOME</option>) kein Home-Verzeichnis erzeugen wird."
+
+#: useradd.8.xml:490(para)
+msgid ""
+"The name of the user's login shell. The default is to leave this field "
+"blank, which causes the system to select the default login shell specified "
+"by the <option>SHELL</option> variable in <filename>/etc/default/useradd</"
+"filename>, or an empty string by default."
+msgstr ""
+"Der Name der Anmelde-Shell des Benutzers. Standardmäßig wird dieses Feld "
+"leer gelassen. Das System verwendet dann die Standard-Anmelde-Shell, die mit "
+"der Variable <option>SHELL</option> in <filename>/etc/default/useradd</"
+"filename> definiert wird, anderenfalls bleibt das Feld leer."
+
+#: useradd.8.xml:504(para)
+msgid ""
+"The numerical value of the user's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than or equal to "
+"<option>UID_MIN</option> and greater than every other user."
+msgstr ""
+"Der zahlenmäßige Wert der Benutzer-ID. Dieser Wert muss eindeutig sein, "
+"sofern nicht die Option <option>-o</option> verwendet wird. Der Wert darf "
+"nicht negativ sein. Standardmäßig wird der kleinste Wert größer als oder "
+"gleich <option>UID_MIN</option> und größer als jeder andere Wert eines "
+"Benutzers verwendet."
+
+#: useradd.8.xml:511(para)
+msgid ""
+"See also the <option>-r</option> option and the <option>UID_MAX</option> "
+"description."
+msgstr ""
+"Vergleichen Sie auch die Option <option>-r</option> und die Ausführungen zu "
+"<option>UID_MAX</option>."
+
+#: useradd.8.xml:518(term)
+msgid "<option>-U</option>, <option>--user-group</option>"
+msgstr "<option>-U</option>, <option>--user-group</option>"
+
+#: useradd.8.xml:522(para)
+msgid ""
+"Create a group with the same name as the user, and add the user to this "
+"group."
+msgstr ""
+"erstellt eine Gruppe mit dem gleichen Name wie der Benutzer und fügt diesen "
+"der Gruppe hinzu"
+
+#: useradd.8.xml:539(para)
+msgid ""
+"The SELinux user for the user's login. The default is to leave this field "
+"blank, which causes the system to select the default SELinux user."
+msgstr ""
+"Der SELinux-Benutzer für den Benutzer nach seiner Anmeldung. Standardmäßig "
+"bleibt dieses Feld leer und es wird dem System überlassen, den SELinux-"
+"Benutzer zu bestimmen."
+
+#: useradd.8.xml:549(title)
+msgid "Changing the default values"
+msgstr "Die Standardwerte verändern"
+
+#: useradd.8.xml:550(para)
+msgid ""
+"When invoked with only the <option>-D</option> option, <command>useradd</"
+"command> will display the current default values. When invoked with <option>-"
+"D</option> plus other options, <command>useradd</command> will update the "
+"default values for the specified options. Valid default-changing options are:"
+msgstr ""
+"Wenn <command>useradd</command> nur mit der Option <option>-D</option> "
+"aufgerufen wird, werden die aktuellen Standardwerte angezeigt. Wenn "
+"<command>useradd</command> neben der Option <option>-D</option> mit weiteren "
+"Optionen aufgerufen wird, werden deren Standardwerte entsprechend angepasst. "
+"Die gültigen Optionen, um Standardwerte zu ändern, sind:"
+
+#: useradd.8.xml:563(para)
+msgid ""
+"The path prefix for a new user's home directory. The user's name will be "
+"affixed to the end of <replaceable>BASE_DIR</replaceable> to form the new "
+"user's home directory name, if the <option>-d</option> option is not used "
+"when creating a new account."
+msgstr ""
+"Das Wurzelverzeichnis des Home-Verzeichnisses eines neuen Benutzers. Der "
+"Benutzername wird an <replaceable>WURZEL_VERZ</replaceable> angehängt, um "
+"den Namen des Home-Verzeichnisses zu erhalten, falls nicht die Option "
+"<option>-d</option> bei der Erstellung eines neuen Kontos verwendet wird."
+
+#: useradd.8.xml:570(para)
+msgid ""
+"This option sets the <option>HOME</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+"Diese Option verändert die Variable <option>HOME</option> in <filename>/etc/"
+"default/useradd</filename>."
+
+#: useradd.8.xml:581(para)
+msgid "The date on which the user account is disabled."
+msgstr "das Datum, an dem das Benutzerkonto abgeschaltet wird"
+
+#: useradd.8.xml:582(para)
+msgid ""
+"This option sets the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+"Diese Option verändert die Variable <option>EXPIRE</option> in <filename>/"
+"etc/default/useradd</filename>."
+
+#: useradd.8.xml:593(para)
+msgid ""
+"The number of days after a password has expired before the account will be "
+"disabled."
+msgstr ""
+"die Anzahl von Tagen nach dem Ablaufen des Passworts bis das Konto "
+"deaktiviert wird"
+
+#: useradd.8.xml:597(para)
+msgid ""
+"This option sets the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+"Diese Option verändert die Variable <option>INACTIVE</option> in <filename>/"
+"etc/default/useradd</filename>."
+
+#: useradd.8.xml:608(para)
+msgid ""
+"The group name or ID for a new user's initial group (when the <option>-N/--"
+"no-user-group</option> is used or when the <option>USERGROUPS_ENAB</option> "
+"variable is set to <replaceable>no</replaceable> in <filename>/etc/login."
+"defs</filename>). The named group must exist, and a numerical group ID must "
+"have an existing entry."
+msgstr ""
+"Der Gruppenname oder die GID für die Anfangsgruppe eines neuen Benutzers "
+"(wenn <option>-N/--no-user-group</option> verwendet wird oder wenn in "
+"<filename>/etc/login.defs</filename> die Variable <option>USERGROUPS_ENAB</"
+"option> auf <replaceable>no</replaceable> gesetzt ist). Die bezeichnete "
+"Gruppe und die GID müssen existieren."
+
+#: useradd.8.xml:617(para)
+msgid ""
+"This option sets the <option>GROUP</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+"Diese Option verändert die Variable <option>GROUP</option> in <filename>/etc/"
+"default/useradd</filename>."
+
+#: useradd.8.xml:628(para)
+msgid "The name of a new user's login shell."
+msgstr "der Name der Anmelde-Shell des neuen Benutzers"
+
+#: useradd.8.xml:631(para)
+msgid ""
+"This option sets the <option>SHELL</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+"Diese Option verändert die Variable <option>SHELL</option> in <filename>/etc/"
+"default/useradd</filename>."
+
+#: useradd.8.xml:643(title)
+msgid "NOTES"
+msgstr "ANMERKUNGEN"
+
+#: useradd.8.xml:644(para)
+msgid ""
+"The system administrator is responsible for placing the default user files "
+"in the <filename>/etc/skel/</filename> directory (or any other skeleton "
+"directory specified in <filename>/etc/default/useradd</filename> or on the "
+"command line)."
+msgstr ""
+"Der Systemadministrator ist dafür verantwortlich, die standardmäßigen "
+"Benutzerdateien im Verzeichnis <filename>/etc/skel/</filename> (oder in "
+"einem anderen Gerüstverzeichnis, das in <filename>/etc/default/useradd</"
+"filename> oder über die Befehlszeile definiert wurde), anzulegen."
+
+#: useradd.8.xml:653(para)
+msgid ""
+"You may not add a user to a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+"Sie dürfen einen Benutzer nicht einer NIS- oder LDAP-Gruppe hinzufügen. Dies "
+"muss auf dem entsprechenden Server durchgeführt werden."
+
+#: useradd.8.xml:658(para)
+msgid ""
+"Similarly, if the username already exists in an external user database such "
+"as NIS or LDAP, <command>useradd</command> will deny the user account "
+"creation request."
+msgstr ""
+"Ebenso wird <command>useradd</command> ablehnen, ein neues Benutzerkonto zu "
+"erstellen, wenn der Benutzername schon in einer externen Benutzerdatenbank "
+"wie z.B. NIS oder LDAP vorhanden ist."
+
+#: useradd.8.xml:664(para)
+msgid ""
+"Usernames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+"Benutzernamen müssen mit einem Kleinbuchstaben oder einem Unterstrich "
+"beginnen. Sie dürfen nur Kleinbuchstaben, Zahlen, Unterstriche oder "
+"Gedankenstriche enthalten. Sie können mit einem Dollarzeichen enden. Als "
+"regulärer Ausdruck: [a-z_][a-z0-9_-]*[$]?"
+
+#: useradd.8.xml:670(para)
+msgid "Usernames may only be up to 32 characters long."
+msgstr "Benutzernamen dürfen nur bis zu 32 Zeichen lang sein."
+
+#: useradd.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>CREATE_HOME</option> (boolean)"
+msgstr "<option>CREATE_HOME</option> (boolesch)"
+
+#: useradd.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"Indicate if a home directory should be created by default for new users."
+msgstr ""
+"bestimmt, ob standardmäßig ein Home-Verzeichnis für neue Benutzer erstellt "
+"werden soll"
+
+#: useradd.8.xml:36(para) login.defs.5.xml:36(para)
+msgid ""
+"This setting does not apply to system users, and can be overridden on the "
+"command line."
+msgstr ""
+"Diese Einstellung trifft nicht auf Systembenutzer zu. Sie kann auf der "
+"Befehlszeile überschrieben werden."
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: groupadd.8.xml:32(term)
+msgid "<option>GID_MAX</option> (number)"
+msgstr "<option>GID_MAX</option> (Zahl)"
+
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+#: groupadd.8.xml:33(term)
+msgid "<option>GID_MIN</option> (number)"
+msgstr "<option>GID_MIN</option> (Zahl)"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+#: groupadd.8.xml:35(para)
+msgid ""
+"Range of group IDs used for the creation of regular groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+"der Bereich von Gruppen-IDs, aus dem die Programme <command>useradd</"
+"command>, <command>groupadd</command> oder <command>newusers</command> bei "
+"der Erstellung normaler Gruppen auswählen dürfen"
+
+#: useradd.8.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: groupadd.8.xml:40(para)
+msgid ""
+"The default value for <option>GID_MIN</option> (resp. <option>GID_MAX</"
+"option>) is 1000 (resp. 60000)."
+msgstr ""
+"Der Standardwert für <option>GID_MIN</option> ist 1000, für <option>GID_MAX</"
+"option> 60.000."
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+#| msgid "<option>GID_MAX</option> (number)"
+msgid "<option>HOME_MODE</option> (number)"
+msgstr "<option>GID_MAX</option> (Zahl)"
+
+#: useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The mode for new home directories. If not specified, the <option>UMASK</"
+"option> is used to create the mode."
+msgstr ""
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#, fuzzy
+#| msgid ""
+#| "<command>useradd</command> and <command>newusers</command> use this mask "
+#| "to set the mode of the home directory they create"
+msgid ""
+"<command>useradd</command> and <command>newusers</command> use this to set "
+"the mode of the home directory they create."
+msgstr ""
+"<command>useradd</command> und <command>newusers</command> verwenden diese "
+"Bit-Gruppe, um die Rechte des von ihnen erstellten Home-Verzeichnisses zu "
+"setzen."
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_MAX_DAYS</option> (number)"
+msgstr "<option>PASS_MAX_DAYS</option> (Zahl)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The maximum number of days a password may be used. If the password is older "
+"than this, a password change will be forced. If not specified, -1 will be "
+"assumed (which disables the restriction)."
+msgstr ""
+"Die maximale Anzahl von Tagen, für die ein Passwort verwendet werden darf. "
+"Wenn das Passwort älter ist, wird ein Wechsel des Passworts erzwungen. Falls "
+"nicht angegeben, wird -1 angenommen (was zur Folge hat, dass diese "
+"Beschränkung abgeschaltet ist)."
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_MIN_DAYS</option> (number)"
+msgstr "<option>PASS_MIN_DAYS</option> (Zahl)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The minimum number of days allowed between password changes. Any password "
+"changes attempted sooner than this will be rejected. If not specified, -1 "
+"will be assumed (which disables the restriction)."
+msgstr ""
+"Die Mindestanzahl von Tagen, bevor ein Wechsel des Passworts zugelassen "
+"wird. Ein vorheriger Versuch, das Passwort zu ändern, wird abgelehnt. Falls "
+"nicht angegeben, wird -1 angenommen (was zur Folge hat, dass diese "
+"Beschränkung abgeschaltet ist)."
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_WARN_AGE</option> (number)"
+msgstr "<option>PASS_WARN_AGE</option> (Zahl)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The number of days warning given before a password expires. A zero means "
+"warning is given only upon the day of expiration, a negative value means no "
+"warning is given. If not specified, no warning will be provided."
+msgstr ""
+"Die Anzahl von Tagen, an denen der Benutzer vorgewarnt wird, bevor das "
+"Passwort verfällt. Eine Null bedeutet, dass eine Warnung nur am Tag des "
+"Verfalls ausgegeben wird. Ein negativer Wert bedeutet, dass keine Vorwarnung "
+"erfolgt. Falls nicht angegeben, wird keine Vorwarnung ausgegeben."
+
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: groupadd.8.xml:30(term)
+msgid "<option>SYS_GID_MAX</option> (number)"
+msgstr "<option>SYS_GID_MAX</option> (Zahl)"
+
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: groupadd.8.xml:31(term)
+msgid "<option>SYS_GID_MIN</option> (number)"
+msgstr "<option>SYS_GID_MIN</option> (Zahl)"
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: groupadd.8.xml:33(para)
+msgid ""
+"Range of group IDs used for the creation of system groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+"der Bereich von Gruppen-IDs, aus dem die Programme <command>useradd</"
+"command>, <command>groupadd</command> oder <command>newusers</command> bei "
+"der Erstellung von Systemgruppen auswählen dürfen"
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#: groupadd.8.xml:38(para)
+msgid ""
+"The default value for <option>SYS_GID_MIN</option> (resp. "
+"<option>SYS_GID_MAX</option>) is 101 (resp. <option>GID_MIN</option>-1)."
+msgstr ""
+"Der Standardwert für <option>SYS_GID_MIN</option> ist 101, für "
+"<option>SYS_GID_MAX</option> <option>GID_MIN</option>-1."
+
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>SYS_UID_MAX</option> (number)"
+msgstr "<option>SYS_UID_MAX</option> (Zahl)"
+
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+msgid "<option>SYS_UID_MIN</option> (number)"
+msgstr "<option>SYS_UID_MIN</option> (Zahl)"
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+msgid ""
+"Range of user IDs used for the creation of system users by <command>useradd</"
+"command> or <command>newusers</command>."
+msgstr ""
+"der Bereich von Benutzer-IDs, aus dem die Programme <command>useradd</"
+"command> oder <command>newusers</command> bei der Erstellung von "
+"Systembenutzern auswählen dürfen"
+
+#: useradd.8.xml:37(para) newusers.8.xml:37(para) login.defs.5.xml:37(para)
+msgid ""
+"The default value for <option>SYS_UID_MIN</option> (resp. "
+"<option>SYS_UID_MAX</option>) is 101 (resp. <option>UID_MIN</option>-1)."
+msgstr ""
+"Der Standardwert für <option>SYS_UID_MIN</option> ist 101, für "
+"<option>SYS_UID_MAX</option> <option>UID_MIN</option>-1."
+
+#: useradd.8.xml:30(term) pwck.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>TCB_AUTH_GROUP</option> (boolean)"
+msgstr "<option>TCB_AUTH_GROUP</option> (boolesch)"
+
+#: useradd.8.xml:32(para) pwck.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"If <replaceable>yes</replaceable>, newly created tcb shadow files will be "
+"group owned by the <replaceable>auth</replaceable> group."
+msgstr ""
+"Falls <replaceable>yes</replaceable>, gehören neu erstellte tcb-shadow-"
+"Dateien der Gruppe <replaceable>auth</replaceable>."
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>UID_MAX</option> (number)"
+msgstr "<option>UID_MAX</option> (Zahl)"
+
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>UID_MIN</option> (number)"
+msgstr "<option>UID_MIN</option> (Zahl)"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"Range of user IDs used for the creation of regular users by "
+"<command>useradd</command> or <command>newusers</command>."
+msgstr ""
+"der Bereich von Benutzer-IDs, aus dem die Programme <command>useradd</"
+"command> oder <command>newusers</command> bei der Erstellung normaler "
+"Benutzer auswählen dürfen"
+
+#: useradd.8.xml:39(para) newusers.8.xml:39(para) login.defs.5.xml:39(para)
+msgid ""
+"The default value for <option>UID_MIN</option> (resp. <option>UID_MAX</"
+"option>) is 1000 (resp. 60000)."
+msgstr ""
+"Der Standardwert für <option>UID_MIN</option> ist 1000, für <option>UID_MAX</"
+"option> 60.000."
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: login.1.xml:32(term)
+msgid "<option>UMASK</option> (number)"
+msgstr "<option>UMASK</option> (Zahl)"
+
+#: useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: login.1.xml:34(para)
+msgid ""
+"The file mode creation mask is initialized to this value. If not specified, "
+"the mask will be initialized to 022."
+msgstr ""
+"Die Bit-Gruppe, welche die Rechte von erstellten Dateien bestimmt, wird "
+"anfänglich auf diesen Wert gesetzt. Falls nicht angegeben, wird sie auf 022 "
+"gesetzt."
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#: login.1.xml:38(para)
+#, fuzzy
+#| msgid ""
+#| "<command>useradd</command> and <command>newusers</command> use this mask "
+#| "to set the mode of the home directory they create"
+msgid ""
+"<command>useradd</command> and <command>newusers</command> use this mask to "
+"set the mode of the home directory they create if <option>HOME_MODE</option> "
+"is not set."
+msgstr ""
+"<command>useradd</command> und <command>newusers</command> verwenden diese "
+"Bit-Gruppe, um die Rechte des von ihnen erstellten Home-Verzeichnisses zu "
+"setzen."
+
+#: useradd.8.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: login.1.xml:43(para)
+msgid ""
+"It is also used by <command>login</command> to define users' initial umask. "
+"Note that this mask can be overridden by the user's GECOS line (if "
+"<option>QUOTAS_ENAB</option> is set) or by the specification of a limit with "
+"the <emphasis>K</emphasis> identifier in "
+"<citerefentry><refentrytitle>limits</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"Sie wird auch von <command>login</command> verwendet, um die anfängliche "
+"Umask eines Benutzers zu bestimmen. Beachten Sie, dass diese Bit-Gruppe "
+"durch die GECOS-Zeile des Benutzers (wenn <option>QUOTAS_ENAB</option> "
+"gesetzt wurde) oder die Festlegung eines Limits in "
+"<citerefentry><refentrytitle>limits</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry> mit der Kennung <emphasis>K</emphasis> überschrieben werden "
+"kann."
+
+#: useradd.8.xml:51(para) newusers.8.xml:51(para) login.defs.5.xml:51(para)
+#: login.1.xml:51(para)
+msgid ""
+"It is also used by <command>pam_umask</command> as the default umask value."
+msgstr ""
+"Sie wird ebenfalls von <command>pam_umask</command> als die Standard-Umask "
+"verwendet."
+
+#: useradd.8.xml:733(filename)
+msgid "/etc/default/useradd"
+msgstr "/etc/default/useradd"
+
+# type: Plain text
+#: useradd.8.xml:735(para)
+msgid "Default values for account creation."
+msgstr "Standardwerte für die Erstellung eines Kontos"
+
+#: useradd.8.xml:739(filename)
+msgid "/etc/skel/"
+msgstr "/etc/skel/"
+
+#: useradd.8.xml:741(para)
+msgid "Directory containing default files."
+msgstr "Verzeichnis, das die Standarddateien enthält"
+
+#: useradd.8.xml:789(replaceable) shadow.3.xml:58(manvolnum)
+#: pwck.8.xml:326(replaceable) passwd.1.xml:466(replaceable)
+#: grpck.8.xml:268(replaceable) groupmod.8.xml:269(replaceable)
+#: groupadd.8.xml:313(replaceable)
+msgid "3"
+msgstr "3"
+
+#: useradd.8.xml:791(para) passwd.1.xml:486(para) groupadd.8.xml:315(para)
+msgid "invalid argument to option"
+msgstr "ungültiges Argument für Option"
+
+#: useradd.8.xml:795(replaceable) pwck.8.xml:332(replaceable)
+#: passwd.1.xml:472(replaceable) grpck.8.xml:274(replaceable)
+#: groupmod.8.xml:275(replaceable) groupadd.8.xml:319(replaceable)
+msgid "4"
+msgstr "4"
+
+#: useradd.8.xml:797(para)
+msgid "UID already in use (and no <option>-o</option>)"
+msgstr "UID ist schon vergeben (und kein <option>-o</option>)"
+
+#: useradd.8.xml:803(para) groupdel.8.xml:194(para)
+msgid "specified group doesn't exist"
+msgstr "angegebene Gruppe ist nicht vorhanden"
+
+#: useradd.8.xml:807(replaceable) groupmod.8.xml:287(replaceable)
+#: groupadd.8.xml:325(replaceable)
+msgid "9"
+msgstr "9"
+
+#: useradd.8.xml:809(para)
+msgid "username already in use"
+msgstr "Benutzername ist schon vergeben"
+
+#: useradd.8.xml:821(para)
+msgid "can't create home directory"
+msgstr "Home-Verzeichnis kann nicht erstellt werden."
+
+#: useradd.8.xml:825(replaceable)
+msgid "14"
+msgstr "14"
+
+#: useradd.8.xml:827(para)
+msgid "can't update SELinux user mapping"
+msgstr "Die Zuordnung von SELinux-Benutzern kann nicht aktualisiert werden."
+
+#: useradd.8.xml:767(para)
+msgid ""
+"The <command>useradd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Der Befehl <command>useradd</command> gibt beim Beenden folgende Werte "
+"zurück: <placeholder-1/>"
+
+#: useradd.8.xml:836(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <phrase condition=\"subids"
+"\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: suauth.5.xml:41(contrib) pwconv.8.xml:47(contrib)
+#: login.access.5.xml:42(contrib) gpasswd.1.xml:46(contrib)
+msgid "Creation, 1996"
+msgstr "ursprünglicher Autor, 1996"
+
+#: suauth.5.xml:57(refentrytitle) suauth.5.xml:64(refname)
+msgid "suauth"
+msgstr "suauth"
+
+#: suauth.5.xml:58(manvolnum) shadow.5.xml:58(manvolnum)
+#: pwck.8.xml:338(replaceable) porttime.5.xml:58(manvolnum)
+#: passwd.5.xml:58(manvolnum) passwd.1.xml:478(replaceable)
+#: login.defs.5.xml:125(manvolnum) login.access.5.xml:59(manvolnum)
+#: limits.5.xml:60(manvolnum) gshadow.5.xml:47(manvolnum)
+#: grpck.8.xml:280(replaceable) faillog.5.xml:58(manvolnum)
+msgid "5"
+msgstr "5"
+
+#: suauth.5.xml:59(refmiscinfo) shadow.5.xml:59(refmiscinfo)
+#: porttime.5.xml:59(refmiscinfo) passwd.5.xml:59(refmiscinfo)
+#: login.defs.5.xml:126(refmiscinfo) login.access.5.xml:60(refmiscinfo)
+#: limits.5.xml:61(refmiscinfo) gshadow.5.xml:48(refmiscinfo)
+#: faillog.5.xml:59(refmiscinfo)
+msgid "File Formats and Conversions"
+msgstr "Dateiformate und konvertierung"
+
+#: suauth.5.xml:65(refpurpose)
+msgid "detailed su control file"
+msgstr "ausführliche Kontrolldatei für su"
+
+#: suauth.5.xml:70(command) suauth.5.xml:196(filename)
+msgid "/etc/suauth"
+msgstr "/etc/suauth"
+
+#: suauth.5.xml:76(para)
+msgid ""
+"The file <filename>/etc/suauth</filename> is referenced whenever the su "
+"command is called. It can change the behaviour of the su command, based upon:"
+msgstr ""
+"Wenn der Befehl su aufgerufen wird, wird die Datei <filename>/etc/suauth</"
+"filename> ausgewertet. Dadurch kann das Verhalten des Befehls su verändert "
+"werden. Dies hängt von Folgendem ab:"
+
+#. .RS
+#: suauth.5.xml:83(literallayout)
+#, fuzzy, no-wrap
+#| msgid ""
+#| "\n"
+#| " 1) the user su is targetting\n"
+#| " "
+msgid ""
+"\n"
+" 1) the user su is targeting\n"
+" "
+msgstr ""
+"\n"
+" 1) auf welchen Benutzer su gerichtet ist\n"
+" "
+
+#. .fi
+#: suauth.5.xml:87(para)
+msgid ""
+"2) the user executing the su command (or any groups he might be a member of)"
+msgstr ""
+"2) dem Benutzer, der su ausführt (oder einer Gruppe, deren Mitglied er ist)"
+
+# SB: Shouldn't it be ":" at the end?
+#: suauth.5.xml:92(para)
+msgid ""
+"The file is formatted like this, with lines starting with a # being treated "
+"as comment lines and ignored;"
+msgstr ""
+"Die Datei ist folgendermaßen aufgebaut, wobei Zeilen, die mit einem # "
+"beginnen, als Kommentare behandelt und daher ignoriert werden:"
+
+#: suauth.5.xml:97(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+" to-id:from-id:ACTION\n"
+" "
+msgstr ""
+"\n"
+" Herkunfts-ID:Ziel-ID:AKTION\n"
+" "
+
+#: suauth.5.xml:101(para)
+msgid ""
+"Where to-id is either the word <emphasis>ALL</emphasis>, a list of usernames "
+"delimited by \",\" or the words <emphasis>ALL EXCEPT</emphasis> followed by "
+"a list of usernames delimited by \",\"."
+msgstr ""
+"Hierbei kann to-id <emphasis>ALL</emphasis>, eine Aufzählung von "
+"Benutzernamen, die durch ein »,« getrennt werden, oder <emphasis>ALL EXCEPT</"
+"emphasis>, die von einer Aufzählung von Benutzernamen gefolgt werden, die "
+"durch ein »,« getrennt werden, sein."
+
+# SB: What is the meaning of the last sentence?
+#: suauth.5.xml:107(para)
+#, fuzzy
+#| msgid ""
+#| "from-id is formatted the same as to-id except the extra word "
+#| "<emphasis>GROUP</emphasis> is recognised. <emphasis>ALL EXCEPT GROUP</"
+#| "emphasis> is perfectly valid too. Following <emphasis>GROUP</emphasis> "
+#| "appears one or more group names, delimited by \",\". It is not sufficient "
+#| "to have primary group id of the relevant group, an entry in "
+#| "<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry> is neccessary."
+msgid ""
+"from-id is formatted the same as to-id except the extra word "
+"<emphasis>GROUP</emphasis> is recognized. <emphasis>ALL EXCEPT GROUP</"
+"emphasis> is perfectly valid too. Following <emphasis>GROUP</emphasis> "
+"appears one or more group names, delimited by \",\". It is not sufficient to "
+"have primary group id of the relevant group, an entry in "
+"<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry> is necessary."
+msgstr ""
+"from-id hat das gleiche Format wie to-id mit der Ausnahme, dass zusätzlich "
+"<emphasis>GROUP</emphasis> zulässig ist. Auch <emphasis>ALL EXCEPT GROUP</"
+"emphasis> ist zulässig. Nach <emphasis>GROUP</emphasis> werden ein oder "
+"mehrere Gruppennamen aufgeführt, die durch »,« getrennt sind. Die Haupt-ID "
+"einer Gruppe reicht nicht aus, sondern ein Eintrag in "
+"<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry> ist notwendig."
+
+#: suauth.5.xml:118(para)
+msgid "Action can be one only of the following currently supported options."
+msgstr "Als Aktion können nur die folgenden Optionen angegeben werden."
+
+#: suauth.5.xml:124(emphasis)
+msgid "DENY"
+msgstr "DENY"
+
+#: suauth.5.xml:127(para)
+msgid "The attempt to su is stopped before a password is even asked for."
+msgstr ""
+"Der Versuch, su auszuführen, wird abgebrochen, ehe nach einem Passwort "
+"gefragt wird."
+
+#: suauth.5.xml:134(emphasis)
+msgid "NOPASS"
+msgstr "NOPASS"
+
+#: suauth.5.xml:137(para)
+msgid ""
+"The attempt to su is automatically successful; no password is asked for."
+msgstr ""
+"Der Versuch, su auszuführen, hat automatisch Erfolg. Ein Passwort wird nicht "
+"abgefragt."
+
+#: suauth.5.xml:145(emphasis)
+msgid "OWNPASS"
+msgstr "OWNPASS"
+
+#: suauth.5.xml:148(para)
+msgid ""
+"For the su command to be successful, the user must enter his or her own "
+"password. They are told this."
+msgstr ""
+"Damit der Befehl su Erfolg hat, muss der Benutzer sein eigenes Passwort "
+"eingeben. Darauf wird er hingewiesen."
+
+#: suauth.5.xml:156(para)
+msgid ""
+"Note there are three separate fields delimited by a colon. No whitespace "
+"must surround this colon. Also note that the file is examined sequentially "
+"line by line, and the first applicable rule is used without examining the "
+"file further. This makes it possible for a system administrator to exercise "
+"as fine control as he or she wishes."
+msgstr ""
+"Beachten Sie, dass es sich um drei selbständige Felder handelt, die durch "
+"einen Doppelpunkt getrennt sind. Neben den Doppelpunkten darf sich kein "
+"Leerzeichen befinden. Beachten Sie zudem, dass die Datei von oben nach unten "
+"Zeile für Zeile durchgegangen wird. Die erste Regel, die zutreffend ist, "
+"wird angewendet, ohne dass die Datei weiter ausgewertet wird. Damit kann ein "
+"Systemadministrator eine strenge Kontrolle ausüben."
+
+#: suauth.5.xml:166(title)
+msgid "EXAMPLE"
+msgstr "BEISPIEL"
+
+#: suauth.5.xml:167(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+" # sample /etc/suauth file\n"
+" #\n"
+" # A couple of privileged usernames may\n"
+" # su to root with their own password.\n"
+" #\n"
+" root:chris,birddog:OWNPASS\n"
+" #\n"
+" # Anyone else may not su to root unless in\n"
+" # group wheel. This is how BSD does things.\n"
+" #\n"
+" root:ALL EXCEPT GROUP wheel:DENY\n"
+" #\n"
+" # Perhaps terry and birddog are accounts\n"
+" # owned by the same person.\n"
+" # Access can be arranged between them\n"
+" # with no password.\n"
+" #\n"
+" terry:birddog:NOPASS\n"
+" birddog:terry:NOPASS\n"
+" #\n"
+" "
+msgstr ""
+"\n"
+" # /etc/suauth-Beispielsdatei\n"
+" #\n"
+" # Einige besondere Benutzer dürfen su\n"
+" # auf Root mit ihrem eigenen Passwort ausführen.\n"
+" #\n"
+" root:chris,birddog:OWNPASS\n"
+" #\n"
+" # Alle anderen Benutzer dürfen nicht su auf Root\n"
+" # ausführen, falls sie nicht in der Gruppe wheel\n"
+" # sind. Dies wird bei BSD so gehandhabt.\n"
+" #\n"
+" root:ALL EXCEPT GROUP wheel:DENY\n"
+" #\n"
+" # Die Konten terry und birddog gehören derselben\n"
+" # Person. Sie können ohne Passwort aufeinander\n"
+" # zugreifen.\n"
+" #\n"
+" terry:birddog:NOPASS\n"
+" birddog:terry:NOPASS\n"
+" #\n"
+" "
+
+#: suauth.5.xml:203(title) pwconv.8.xml:216(title) login.defs.5.xml:531(title)
+msgid "BUGS"
+msgstr "FEHLER"
+
+#: suauth.5.xml:204(para)
+msgid ""
+"There could be plenty lurking. The file parser is particularly unforgiving "
+"about syntax errors, expecting no spurious whitespace (apart from beginning "
+"and end of lines), and a specific token delimiting different things."
+msgstr ""
+"Es gibt zahlreiche Fehlerquellen. Die Auswertung der Datei ist sehr "
+"empfindlich bei Syntaxfehlern, zusätzlichen Leerzeichen (außer am Anfang und "
+"Schluss einer Zeile) und dem besonderen Zeichen, das die verschiedenen "
+"Felder von einander trennt."
+
+#: suauth.5.xml:213(title) shadow.3.xml:208(title)
+msgid "DIAGNOSTICS"
+msgstr "DIAGNOSE"
+
+#: suauth.5.xml:214(para)
+msgid ""
+"An error parsing the file is reported using "
+"<citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry> as level ERR on facility AUTH."
+msgstr ""
+"Fehler beim Auswerten der Datei werden an "
+"<citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry> mit der Stufe ERR an das Gerät AUTH gemeldet."
+
+#: suauth.5.xml:223(para)
+msgid ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: su.1.xml:58(contrib) shadow.5.xml:41(contrib) shadow.3.xml:41(contrib)
+#: porttime.5.xml:41(contrib) passwd.5.xml:41(contrib) passwd.1.xml:48(contrib)
+#: login.1.xml:74(contrib) faillog.8.xml:41(contrib) faillog.5.xml:41(contrib)
+msgid "Creation, 1989"
+msgstr "ursprünglicher Autor, 1989"
+
+#: su.1.xml:74(refentrytitle) su.1.xml:81(refname) su.1.xml:86(command)
+#: login.defs.5.xml:456(term)
+msgid "su"
+msgstr "su"
+
+#: su.1.xml:76(refmiscinfo) sg.1.xml:60(refmiscinfo)
+#: passwd.1.xml:66(refmiscinfo) newgrp.1.xml:60(refmiscinfo)
+#: login.1.xml:92(refmiscinfo) groups.1.xml:59(refmiscinfo)
+#: gpasswd.1.xml:64(refmiscinfo) expiry.1.xml:63(refmiscinfo)
+#: chsh.1.xml:62(refmiscinfo) chfn.1.xml:62(refmiscinfo)
+#: chage.1.xml:60(refmiscinfo)
+msgid "User Commands"
+msgstr "Dienstprogramme für Benutzer"
+
+#: su.1.xml:82(refpurpose)
+msgid "change user ID or become superuser"
+msgstr "ändert die Benutzer-ID oder wechselt zu Root"
+
+#: su.1.xml:91(replaceable) sg.1.xml:72(arg) newgrp.1.xml:71(arg)
+msgid "-"
+msgstr "-"
+
+#: su.1.xml:94(replaceable) login.1.xml:107(replaceable)
+#: login.1.xml:115(replaceable)
+msgid "username"
+msgstr "Benutzername"
+
+#: su.1.xml:96(replaceable)
+msgid "args"
+msgstr ""
+
+#: su.1.xml:104(para)
+#, fuzzy
+#| msgid ""
+#| "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."
+msgid ""
+"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."
+msgstr ""
+"Der Befehl <command>su</command> dient dazu, während einer Sitzung ein "
+"anderer Benutzer zu werden. Wenn <command>su</command> ohne "
+"<option>username</option> aufgerufen wird, wechselt es standardmäßig zu "
+"Root. Zusätzlich kann das Argument <option>-</option> angegeben werden. "
+"Damit wird eine Umgebung zur Verfügung gestellt, die der entspricht, die der "
+"Benutzer nach einer direkten Anmeldung erwartet."
+
+#: su.1.xml:114(para)
+msgid ""
+"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>."
+msgstr ""
+
+#: su.1.xml:122(para)
+msgid ""
+"The user will be prompted for a password, if appropriate. Invalid passwords "
+"will produce an error message. All attempts, both valid and invalid, are "
+"logged to detect abuse of the system."
+msgstr ""
+"Der Benutzer wird gegebenenfalls nach einem Passwort gefragt. Ungültige "
+"Passworteingaben werden eine Fehlermeldung erzeugen. Sowohl erfolgreiche als "
+"auch misslungene Versuche werden protokolliert, um Missbrauch des Systems zu "
+"entdecken."
+
+#: su.1.xml:127(para)
+msgid ""
+"The current environment is passed to the new shell. The value of <envar>"
+"$PATH</envar> is reset to <filename>/bin:/usr/bin</filename> for normal "
+"users, or <filename>/sbin:/bin:/usr/sbin:/usr/bin</filename> for the "
+"superuser. This may be changed with the <option>ENV_PATH</option> and "
+"<option>ENV_SUPATH</option> definitions in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+"Die aktuelle Umgebung wird an die neue Shell übergeben. Der Wert von <envar>"
+"$PATH</envar> wird für normale Benutzer auf <filename>/bin:/usr/bin</"
+"filename> gesetzt, für Root auf <filename>/sbin:/bin:/usr/sbin:/usr/bin</"
+"filename>. Dieses Verhalten kann durch die Definition von <option>ENV_PATH</"
+"option> und <option>ENV_SUPATH</option> in <filename>/etc/login.defs</"
+"filename> geändert werden."
+
+# SB: Not quite sure what subsystem logins are.
+#: su.1.xml:136(para) login.1.xml:188(para)
+msgid ""
+"A subsystem login is indicated by the presence of a \"*\" as the first "
+"character of the login shell. The given home directory will be used as the "
+"root of a new file system which the user is actually logged into."
+msgstr ""
+"Eine Subsystem-Anmeldung wird durch einen »*« als erstes Zeichen der Anmelde-"
+"Shell gekennzeichnet. Das angegebene Home-Verzeichnis wird als Wurzel für "
+"das Dateisystem verwendet, auf welchem der Benutzer tatsächlich angemeldet "
+"ist."
+
+#: su.1.xml:145(para)
+msgid "The options which apply to the <command>su</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>su</command> unterstützt werden, sind:"
+
+#: su.1.xml:149(term)
+msgid ""
+"<option>-c</option>, <option>--command</option>&nbsp;<replaceable>COMMAND</"
+"replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--command</option>&nbsp;<replaceable>BEFEHL</"
+"replaceable>"
+
+#: su.1.xml:153(para)
+msgid ""
+"Specify a command that will be invoked by the shell using its <option>-c</"
+"option>."
+msgstr ""
+"gibt einen Befehl an, der von der Shell mittels ihrer Option <option>-c</"
+"option> ausgeführt wird"
+
+#: su.1.xml:157(para)
+#, fuzzy
+#| msgid ""
+#| "The executed command will have no controlling terminal. This option "
+#| "cannot be used to execute interractive programs which need a controlling "
+#| "TTY."
+msgid ""
+"The executed command will have no controlling terminal. This option cannot "
+"be used to execute interactive programs which need a controlling TTY."
+msgstr ""
+"Der ausgeführte Befehl hat kein ihn steuerndes Terminal. Mit dieser Option "
+"können keine interaktiven Programme, die ein sie steuerndes TTY benötigen, "
+"ausgeführt werden."
+
+#: su.1.xml:167(term)
+msgid "<option>-</option>, <option>-l</option>, <option>--login</option>"
+msgstr "<option>-</option>, <option>-l</option>, <option>--login</option>"
+
+#: su.1.xml:171(para)
+msgid ""
+"Provide an environment similar to what the user would expect had the user "
+"logged in directly."
+msgstr ""
+"Eine Umgebung wird zur Verfügung gestellt, die der entspricht, die der "
+"Benutzer nach einer direkten Anmeldung erwartet."
+
+#: su.1.xml:175(para)
+#, fuzzy
+#| msgid ""
+#| "When <option>-</option> is used, it must be specified as the last "
+#| "<command>su</command> option. The other forms (<option>-l</option> and "
+#| "<option>--login</option>) do not have this restriction."
+msgid ""
+"When <option>-</option> is used, it must be specified before any "
+"<option>username</option>. For portability it is recommended to use it as "
+"last option, before any <option>username</option>. The other forms (<option>-"
+"l</option> and <option>--login</option>) do not have this restriction."
+msgstr ""
+"Wenn <option>-</option> verwendet wird, muss es als die letzte Option von "
+"<command>su</command> angegeben werden. Die übrigen Formen ((<option>-l</"
+"option> und <option>--login</option>) unterliegen nicht dieser Beschränkung."
+
+#: su.1.xml:190(para)
+msgid "The shell that will be invoked."
+msgstr "die Shell, die gestartet wird"
+
+#: su.1.xml:198(para)
+msgid "The shell specified with --shell."
+msgstr "die Shell, die mit --shell angegeben wurde"
+
+#: su.1.xml:201(para)
+msgid ""
+"If <option>--preserve-environment</option> is used, the shell specified by "
+"the <envar>$SHELL</envar> environment variable."
+msgstr ""
+"Falls <option>--preserve-environment</option> verwendet wird, die Shell, die "
+"durch die Umgebungsvariable <envar>$SHELL</envar> festgelegt wird."
+
+# SB: Bessere Übersetzung als 'Zielbenutzer'?
+#: su.1.xml:208(para)
+msgid ""
+"The shell indicated in the <filename>/etc/passwd</filename> entry for the "
+"target user."
+msgstr ""
+"die Shell, die in <filename>/etc/passwd</filename> für den Zielbenutzer "
+"angegeben ist"
+
+#: su.1.xml:214(para)
+msgid ""
+"<filename>/bin/sh</filename> if a shell could not be found by any above "
+"method."
+msgstr ""
+"<filename>/bin/sh</filename>, falls durch die obigen Methoden keine Shell "
+"gefunden werden kann"
+
+#: su.1.xml:191(para)
+msgid ""
+"The invoked shell is chosen from (highest priority first): <placeholder-1/>"
+msgstr ""
+"Die aufgerufene Shell wird bestimmt durch (höchste Priorität zuerst): "
+"<placeholder-1/>"
+
+# SB: Bessere Übersetzung als 'Zielbenutzer'?
+#: su.1.xml:219(para)
+msgid ""
+"If the target user has a restricted shell (i.e. the shell field of this "
+"user's entry in <filename>/etc/passwd</filename> is not listed in <filename>/"
+"etc/shells</filename>), then the <option>--shell</option> option or the "
+"<envar>$SHELL</envar> environment variable won't be taken into account, "
+"unless <command>su</command> is called by root."
+msgstr ""
+"Falls der Zielbenutzer eine beschränkte Shell hat (d.h. das Feld für die "
+"Shell im Eintrag des Benutzers in <filename>/etc/passwd</filename> ist nicht "
+"in <filename>/etc/shells</filename>) aufgeführt), werden die Option "
+"<option>--shell</option> und die Umgebungsvariable <envar>$SHELL</envar> "
+"nicht beachtet, sofern <command>su</command> nicht von Root aufgerufen wird."
+
+#: su.1.xml:230(term)
+msgid ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+msgstr ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+
+#: su.1.xml:239(envar)
+msgid "$PATH"
+msgstr "$PATH"
+
+#: su.1.xml:241(para)
+msgid ""
+"reset according to the <filename>/etc/login.defs</filename> options "
+"<option>ENV_PATH</option> or <option>ENV_SUPATH</option> (see below);"
+msgstr ""
+"auf den Ausgangswert entsprechend der Optionen <option>ENV_PATH</option> "
+"oder <option>ENV_SUPATH</option> in <filename>/etc/login.defs</filename> "
+"zurücksetzen (siehe unten);"
+
+#: su.1.xml:250(envar)
+msgid "$IFS"
+msgstr "$IFS"
+
+#: su.1.xml:252(para)
+msgid ""
+"reset to <quote>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</quote>, if it was "
+"set."
+msgstr ""
+"auf <quote>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</quote> zurücksetzen, "
+"falls es verändert wurde"
+
+#: su.1.xml:235(para)
+msgid "Preserve the current environment, except for: <placeholder-1/>"
+msgstr "Erhält die aktuelle Umgebung mit Ausnahme von: <placeholder-1/>"
+
+#: su.1.xml:261(para)
+msgid ""
+"If the target user has a restricted shell, this option has no effect (unless "
+"<command>su</command> is called by root)."
+msgstr ""
+"Falls der Zielbenutzer eine beschränkte Shell besitzt, hat diese Option "
+"keinen Effekt (sofern <command>su</command> nicht von Root aufgerufen wird)."
+
+#: su.1.xml:270(para)
+msgid ""
+"The <envar>$HOME</envar>, <envar>$SHELL</envar>, <envar>$USER</envar>, "
+"<envar>$LOGNAME</envar>, <envar>$PATH</envar>, and <envar>$IFS</envar> "
+"environment variables are reset."
+msgstr ""
+"Die Umgebungsvariablen <envar>$HOME</envar>, <envar>$SHELL</envar>, <envar>"
+"$USER</envar>, <envar>$LOGNAME</envar>, <envar>$PATH</envar> und <envar>"
+"$IFS</envar> werden zurückgesetzt."
+
+#: su.1.xml:279(para)
+msgid ""
+"If <option>--login</option> is not used, the environment is copied, except "
+"for the variables above."
+msgstr ""
+"Falls nicht <option>--login</option> verwendet wurde, wird die Umgebung mit "
+"der Ausnahme der genannten Variablen kopiert."
+
+#: su.1.xml:286(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TERM</envar>, <envar>"
+"$COLORTERM</envar>, <envar>$DISPLAY</envar>, and <envar>$XAUTHORITY</envar> "
+"environment variables are copied if they were set."
+msgstr ""
+"Falls <option>--login</option> verwendet wurde, werden die Variablen <envar>"
+"$TERM</envar>, <envar>$COLORTERM</envar>, <envar>$DISPLAY</envar> und <envar>"
+"$XAUTHORITY</envar> übernommen, wenn ihnen ein Wert zugewiesen wurde."
+
+#: su.1.xml:296(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TZ</envar>, <envar>$HZ</"
+"envar>, and <envar>$MAIL</envar> environment variables are set according to "
+"the <filename>/etc/login.defs</filename> options <option>ENV_TZ</option>, "
+"<option>ENV_HZ</option>, <option>MAIL_DIR</option>, and <option>MAIL_FILE</"
+"option> (see below)."
+msgstr ""
+"Falls <option>--login</option> verwendet wurde, werden die "
+"Umgebungsvariablen <envar>$TZ</envar>, <envar>$HZ</envar> und <envar>$MAIL</"
+"envar> auf die in <filename>/etc/login.defs</filename> definierten Optionen "
+"<option>ENV_TZ</option>, <option>ENV_HZ</option>, <option>MAIL_DIR</option> "
+"und <option>MAIL_FILE</option> (siehe unten) gesetzt."
+
+#: su.1.xml:309(para)
+msgid ""
+"If <option>--login</option> is used, other environment variables might be "
+"set by the <option>ENVIRON_FILE</option> file (see below)."
+msgstr ""
+"Wenn <option>--login</option> verwendet wird, können andere "
+"Umgebungsvariablen mit der Datei <option>ENVIRON_FILE</option> vergeben "
+"werden (siehe unten)."
+
+#: su.1.xml:317(para)
+msgid "Other environments might be set by PAM modules."
+msgstr "Andere Umgebungen können auch durch PAM-Module eingerichtet werden."
+
+#: su.1.xml:265(para)
+msgid ""
+"Note that the default behavior for the environment is the following: "
+"<placeholder-1/>"
+msgstr ""
+"Beachten Sie, dass Folgendes das Standardverhalten für die Umgebung ist: "
+"<placeholder-1/>"
+
+#: su.1.xml:331(para)
+msgid ""
+"This version of <command>su</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+"Diese Version von <command>su</command> hat viele Kompilierungsoptionen. "
+"Deren Nützlichkeit hängt von den Anforderungen der jeweiligen Umgebung ab."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>CONSOLE</option> (string)"
+msgstr "<option>CONSOLE</option> (Zeichenkette)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, either full pathname of a file containing device names (one per "
+"line) or a \":\" delimited list of device names. Root logins will be allowed "
+"only upon these devices."
+msgstr ""
+"Die Konfiguration erfolgt entweder über die Angabe des vollen Pfadnamens "
+"einer Datei, welche die Namen der Geräte enthält (eines pro Zeile), oder mit "
+"einer Liste der Gerätenamen, die mit »:« getrennt sind. Root kann sich nur "
+"auf diesen Geräten anmelden."
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid "If not defined, root will be allowed on any device."
+msgstr ""
+"Wenn es unkonfiguriert gelassen wird, kann sich Root auf jedem Gerät "
+"anmelden."
+
+#: su.1.xml:42(para) login.defs.5.xml:42(para) login.1.xml:42(para)
+msgid "The device should be specified without the /dev/ prefix."
+msgstr "Das Gerät soll ohne vorangestelltes /dev/ angegeben werden."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>CONSOLE_GROUPS</option> (string)"
+msgstr "<option>CONSOLE_GROUPS</option> (Zeichenkette)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"List of groups to add to the user's supplementary groups set when logging in "
+"on the console (as determined by the CONSOLE setting). Default is none. "
+"<placeholder-1/> Use with caution - it is possible for users to gain "
+"permanent access to these groups, even when not logged in on the console."
+msgstr ""
+"Liste von Gruppen, deren Mitglied der Benutzer wird, wenn der sich auf der "
+"Konsole anmeldet, die mit dem Parameter CONSOLE festgelegt wird. "
+"Standardmäßig ist die Liste leer. <placeholder-1/> Seien Sie vorsichtig. "
+"Benutzer können dauerhaft Zugang zu den Gruppen erlangen, auch wenn sie "
+"nicht auf der Konsole angemeldet sind."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>DEFAULT_HOME</option> (boolean)"
+msgstr "<option>DEFAULT_HOME</option> (boolesch)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Indicate if login is allowed if we can't cd to the home directory. Default "
+"is no."
+msgstr ""
+"Legt fest, ob ein Login erlaubt wird, wenn mit cd nicht in das Home-"
+"Verzeichnis gewechselt werden kann. Standardmäßig wird dies nicht zugelassen."
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, the user will login in the root "
+"(<filename>/</filename>) directory if it is not possible to cd to her home "
+"directory."
+msgstr ""
+"Falls auf <replaceable>yes</replaceable> gesetzt, wird der Benutzer mit dem "
+"Wurzelverzeichnis (<filename>/</filename>) angemeldet, wenn mit cd nicht in "
+"sein Home-Verzeichnis gewechselt werden kann."
+
+#. XXX: When compiled with PAM support, only sulogin uses ENV_HZ
+#: su.1.xml:33(term) login.defs.5.xml:33(term) login.1.xml:33(term)
+msgid "<option>ENV_HZ</option> (string)"
+msgstr "<option>ENV_HZ</option> (Zeichenkette)"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"If set, it will be used to define the HZ environment variable when a user "
+"login. The value must be preceded by <replaceable>HZ=</replaceable>. A "
+"common value on Linux is <replaceable>HZ=100</replaceable>."
+msgstr ""
+"Wenn vergeben, wird damit die Umgebungsvariable HZ definiert, wenn sich ein "
+"Benutzer anmeldet. Dem Wert muss ein <replaceable>HZ=</replaceable> "
+"vorangestellt werden. Ein üblicher Wert bei Linux ist <replaceable>HZ=100</"
+"replaceable>."
+
+#: su.1.xml:41(para) login.defs.5.xml:41(para) login.1.xml:41(para)
+msgid ""
+"The <envar>HZ</envar> environment variable is only set when the user (the "
+"superuser) logs in with <command>sulogin</command>."
+msgstr ""
+"Die Umgebungsvariable <envar>HZ</envar> wird nur gesetzt, wenn sich der "
+"Benutzer (der Administrator) mit <command>sulogin</command> anmeldet."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENVIRON_FILE</option> (string)"
+msgstr "<option>ENVIRON_FILE</option> (Zeichenkette)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If this file exists and is readable, login environment will be read from it. "
+"Every line should be in the form name=value."
+msgstr ""
+"Wenn diese Datei vorhanden ist, wird die Anmeldeumgebung aus ihr gelesen. "
+"Jede Zeile sollte die Form Name=Wert haben."
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid "Lines starting with a # are treated as comment lines and ignored."
+msgstr ""
+"Zeilen, die mit einem # beginnen, werden als Kommentare behandelt und daher "
+"ignoriert."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENV_PATH</option> (string)"
+msgstr "<option>ENV_PATH</option> (Zeichenkette)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the PATH environment variable when a "
+"regular user login. The value is a colon separated list of paths (for "
+"example <replaceable>/bin:/usr/bin</replaceable>) and can be preceded by "
+"<replaceable>PATH=</replaceable>. The default value is <replaceable>PATH=/"
+"bin:/usr/bin</replaceable>."
+msgstr ""
+"Wenn gesetzt, wird damit die Umgebungsvariable PATH definiert, wenn sich ein "
+"normaler Benutzer anmeldet. Der Wert ist eine Liste, deren Einträge durch "
+"Doppelpunkte getrennt sind (zum Beispiel <replaceable>/bin:/usr/bin</"
+"replaceable>). Ihr kann ein <replaceable>PATH=</replaceable> vorangestellt "
+"werden. Der Standardwert ist <replaceable>PATH=/bin:/usr/bin</replaceable>."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENV_SUPATH</option> (string)"
+msgstr "<option>ENV_SUPATH</option> (Zeichenkette)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the PATH environment variable when the "
+"superuser login. The value is a colon separated list of paths (for example "
+"<replaceable>/sbin:/bin:/usr/sbin:/usr/bin</replaceable>) and can be "
+"preceded by <replaceable>PATH=</replaceable>. The default value is "
+"<replaceable>PATH=/sbin:/bin:/usr/sbin:/usr/bin</replaceable>."
+msgstr ""
+"Wenn gesetzt, wird damit die Umgebungsvariable PATH definiert, wenn sich der "
+"Superuser anmeldet. Der Wert ist eine Liste, deren Einträge durch "
+"Doppelpunkte getrennt sind (zum Beispiel <replaceable>/sbin:/bin:/usr/sbin:/"
+"usr/bin</replaceable>). Ihr kann ein <replaceable>PATH=</replaceable> "
+"vorangestellt werden. Der Standardwert ist <replaceable>PATH=/sbin:/bin:/usr/"
+"sbin:/usr/bin</replaceable>."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENV_TZ</option> (string)"
+msgstr "<option>ENV_TZ</option> (Zeichenkette)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the TZ environment variable when a user "
+"login. The value can be the name of a timezone preceded by <replaceable>TZ=</"
+"replaceable> (for example <replaceable>TZ=CST6CDT</replaceable>), or the "
+"full path to the file containing the timezone specification (for example "
+"<filename>/etc/tzname</filename>)."
+msgstr ""
+"Wenn gesetzt, wird damit die Umgebungsvariable TZ definiert, wenn sich ein "
+"Benutzer anmeldet. Der Wert kann der Name der Zeitzone sein, dem "
+"<replaceable>TZ=</replaceable> vorausgeht (zum Beispiel "
+"<replaceable>TZ=CST6CDT</replaceable>), oder der vollständige Pfad der "
+"Datei, welche die Konfiguration der Zeitzone enthält (zum Beispiel "
+"<filename>/etc/tzname</filename>)."
+
+#. TODO: it can in fact be used to set any other variable
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"If a full path is specified but the file does not exist or cannot be read, "
+"the default is to use <replaceable>TZ=CST6CDT</replaceable>."
+msgstr ""
+"Wenn ein vollständiger Pfadname angegeben wird, die Datei aber nicht "
+"existiert oder nicht lesbar ist, wird <replaceable>TZ=CST6CDT</replaceable> "
+"verwendet."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#: chsh.1.xml:32(term) chfn.1.xml:32(term)
+msgid "<option>LOGIN_STRING</option> (string)"
+msgstr "<option>LOGIN_STRING</option> (Zeichenkette)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+#: chsh.1.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"The string used for prompting a password. The default is to use \"Password: "
+"\", or a translation of that string. If you set this variable, the prompt "
+"will not be translated."
+msgstr ""
+"Diese Zeichenkette wird bei der Eingabeaufforderung des Passworts (Prompt) "
+"verwendet. Standardmäßig wird »Password: « oder eine Übersetzung davon "
+"benutzt. Wenn Sie diese Variable definieren, wird die Eingabeaufforderung "
+"nicht übersetzt."
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+#: chsh.1.xml:39(para) chfn.1.xml:39(para)
+msgid ""
+"If the string contains <replaceable>%s</replaceable>, this will be replaced "
+"by the user's name."
+msgstr ""
+"Wenn die Zeichenkette ein <replaceable>%s</replaceable> enthält, wird dies "
+"durch den Benutzernamen ersetzt."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>MAIL_CHECK_ENAB</option> (boolean)"
+msgstr "<option>MAIL_CHECK_ENAB</option> (boolesch)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable checking and display of mailbox status upon login."
+msgstr ""
+"aktiviert die Prüfung und Anzeige des Status der Mailbox bei der Anmeldung"
+
+#: su.1.xml:37(para) login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"You should disable it if the shell startup files already check for mail "
+"(\"mailx -e\" or equivalent)."
+msgstr ""
+"Sie sollten dies abschalten, wenn schon die Startdateien der Shell die Mails "
+"prüfen (»mailx -e« oder ähnliches)."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>QUOTAS_ENAB</option> (boolean)"
+msgstr "<option>QUOTAS_ENAB</option> (boolesch)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable setting of resource limits from <filename>/etc/limits</filename> and "
+"ulimit, umask, and niceness from the user's passwd gecos field."
+msgstr ""
+"aktiviert das Setzen von Resourcenbeschränkungen aus <filename>/etc/limits</"
+"filename> und von ulimit, umask und niceness aus dem gecos-Feld des "
+"Benutzers von passwd"
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SULOG_FILE</option> (string)"
+msgstr "<option>SULOG_FILE</option> (Zeichenkette)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "If defined, all su activity is logged to this file."
+msgstr ""
+"Wenn angegeben, wird jeder Aufruf von su in dieser Datei protokolliert."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SU_NAME</option> (string)"
+msgstr "<option>SU_NAME</option> (Zeichenkette)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"If defined, the command name to display when running \"su -\". For example, "
+"if this is defined as \"su\" then a \"ps\" will display the command is \"-su"
+"\". If not defined, then \"ps\" would display the name of the shell actually "
+"being run, e.g. something like \"-sh\"."
+msgstr ""
+"Damit kann die Anzeige des Namens des Befehls festgelegt werden, wenn »su -« "
+"ausgeführt wird. Wenn beispielsweise dies auf »su« gesetzt wurde, zeigt »ps« "
+"den Befehl als »-su« an. Wenn es dagegen nicht vergeben wurde, wird »ps« den "
+"Namen der Shell anzeigen, die ausgeführt wird, also etwa »-sh«."
+
+#: su.1.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>SU_WHEEL_ONLY</option> (boolean)"
+msgstr "<option>SU_WHEEL_ONLY</option> (boolesch)"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the user must be listed as a member of "
+"the first gid 0 group in <filename>/etc/group</filename> (called "
+"<replaceable>root</replaceable> on most Linux systems) to be able to "
+"<command>su</command> to uid 0 accounts. If the group doesn't exist or is "
+"empty, no one will be able to <command>su</command> to uid 0."
+msgstr ""
+"Falls <replaceable>yes</replaceable>, muss der Benutzer Mitglied der ersten "
+"Gruppe mit der GID 0 in <filename>/etc/group</filename> sein (auf den "
+"meisten Linux-Systemen heißt die <replaceable>root</replaceable>), um mit "
+"<command>su</command> zu einem Konto mit der UID 0 wechseln zu können. Falls "
+"die Gruppe nicht existiert oder keine Mitglieder hat, kann niemand mittels "
+"<command>su</command> zur UID 0 wechseln."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SYSLOG_SU_ENAB</option> (boolean)"
+msgstr "<option>SYSLOG_SU_ENAB</option> (boolesch)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"Enable \"syslog\" logging of <command>su</command> activity - in addition to "
+"sulog file logging."
+msgstr ""
+"aktiviert das Protokollieren der Aktivitäten von <command>su</command> in "
+"»syslog« neben der Protokollierung in der sulog-Datei"
+
+#: su.1.xml:391(para)
+msgid ""
+"On success, <command>su</command> returns the exit value of the command it "
+"executed."
+msgstr ""
+"Wenn <command>su</command> erfolgreich ausgeführt wird, gibt es den "
+"Rückgabewert des mit ihm ausgeführten Befehls zurück."
+
+#: su.1.xml:395(para)
+msgid ""
+"If this command was terminated by a signal, <command>su</command> returns "
+"the number of this signal plus 128."
+msgstr ""
+"Wenn dieser Befehl mit einem Signal beendet wurde, gibt <command>su</"
+"command> die Nummer des Signals plus 128 zurück."
+
+#: su.1.xml:399(para)
+msgid ""
+"If su has to kill the command (because it was asked to terminate, and the "
+"command did not terminate in time), <command>su</command> returns 255."
+msgstr ""
+"Wenn <command>su</command> den Befehl mit kill beenden musste (weil er der "
+"Aufforderung, sich zu beenden, nicht rechtzeitig nachgekommen ist), gibt es "
+"255 zurück."
+
+#: su.1.xml:411(para)
+msgid "success (<option>--help</option> only)"
+msgstr "Erfolg (nur bei <option>--help</option>)"
+
+#: su.1.xml:417(para)
+msgid "System or authentication failure"
+msgstr "System- oder Anmeldefehler"
+
+#: su.1.xml:421(replaceable)
+msgid "126"
+msgstr "126"
+
+#: su.1.xml:423(para)
+msgid "The requested command was not found"
+msgstr "Der angegebene Befehl konnte nicht gefunden werden."
+
+#: su.1.xml:427(replaceable)
+msgid "127"
+msgstr "127"
+
+#: su.1.xml:429(para)
+msgid "The requested command could not be executed"
+msgstr "Der angegebene Befehl konnte nicht ausgeführt werden."
+
+#: su.1.xml:404(para)
+msgid ""
+"Some exit values from <command>su</command> are independent from the "
+"executed command: <placeholder-1/>"
+msgstr ""
+"Einige Rückgabewerte von <command>su</command> sind unabhängig von dem "
+"ausgeführten Befehl: <placeholder-1/>"
+
+#: su.1.xml:438(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>."
+
+#: sg.1.xml:58(refentrytitle) sg.1.xml:65(refname) sg.1.xml:71(command)
+msgid "sg"
+msgstr "sg"
+
+#: sg.1.xml:66(refpurpose)
+msgid "execute command as different group ID"
+msgstr "führt einen Befehl unter einer anderen Gruppen-ID aus"
+
+#: sg.1.xml:74(arg)
+msgid "-c"
+msgstr "-c"
+
+#: sg.1.xml:73(arg)
+msgid "group <placeholder-1/> command"
+msgstr "Gruppe <placeholder-1/> Befehl"
+
+#: sg.1.xml:82(para)
+msgid ""
+"The <command>sg</command> command works similar to <command>newgrp</command> "
+"but accepts a command. The command will be executed with the <filename>/bin/"
+"sh</filename> shell. With most shells you may run <command>sg</command> "
+"from, you need to enclose multi-word commands in quotes. Another difference "
+"between <command>newgrp</command> and <command>sg</command> is that some "
+"shells treat <command>newgrp</command> specially, replacing themselves with "
+"a new instance of a shell that <command>newgrp</command> creates. This "
+"doesn't happen with <command>sg</command>, so upon exit from a <command>sg</"
+"command> command you are returned to your previous group ID."
+msgstr ""
+"Der Befehl <command>sg</command> funktioniert so ähnlich wie der Befehl "
+"<command>newgrp</command>, übernimmt aber auch einen Befehl. Dieser Befehl "
+"wird in der Shell <filename>/bin/sh</filename> ausgeführt. Bei den meisten "
+"Shells, in denen Sie <command>sg</command> ausführen, müssen Sie die "
+"Befehle, die aus mehrere Wörtern bestehen, in Anführungszeichen einfassen. "
+"Ein weiterer Unterschied zwischen <command>newgrp</command> und <command>sg</"
+"command> ist, dass einige Shells <command>newgrp</command> besonders "
+"behandeln: sie ersetzen sich mit einer neuen Instanz der Shell, die von "
+"<command>newgrp</command> erzeugt wurde. Dies geschieht nicht mit "
+"<command>sg</command>, daher werden Sie nach Beenden des Befehls "
+"<command>sg</command> zu Ihrer vorherigen Gruppen-ID zurückkehren."
+
+#: sg.1.xml:32(term) newgrp.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SYSLOG_SG_ENAB</option> (boolean)"
+msgstr "<option>SYSLOG_SG_ENAB</option> (boolesch)"
+
+#: sg.1.xml:34(para) newgrp.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable \"syslog\" logging of <command>sg</command> activity."
+msgstr ""
+"aktiviert das Protokollieren der Aktivitäten von <command>sg</command> in "
+"»syslog«"
+
+#: sg.1.xml:141(para)
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry></phrase>."
+
+#: shadow.5.xml:57(refentrytitle) shadow.5.xml:64(refname)
+#: shadow.3.xml:57(refentrytitle) shadow.3.xml:64(refname)
+#: pwck.8.xml:84(replaceable) grpck.8.xml:76(replaceable)
+msgid "shadow"
+msgstr "shadow"
+
+#: shadow.5.xml:65(refpurpose)
+msgid "shadowed password file"
+msgstr "Shadow-Passwortdatei"
+
+#: shadow.5.xml:70(para)
+msgid ""
+"<filename>shadow</filename> is a file which contains the password "
+"information for the system's accounts and optional aging information."
+msgstr ""
+"<filename>shadow</filename> ist eine Datei, welche die "
+"Passwortinformationen für die Konten des Systems und fakultativ "
+"Informationen zum Verfall der Passwörter enthält."
+
+#: shadow.5.xml:76(para) gshadow.5.xml:64(para)
+msgid ""
+"This file must not be readable by regular users if password security is to "
+"be maintained."
+msgstr ""
+"Um die Sicherheit der Passwörter zu gewährleisten, darf diese Datei nicht "
+"für normale Benutzer lesbar sein."
+
+#: shadow.5.xml:81(para)
+msgid ""
+"Each line of this file contains 9 fields, separated by colons (<quote>:</"
+"quote>), in the following order:"
+msgstr ""
+"Jede Zeile dieser Datei enthält folgende neun Felder, die durch Doppelpunkt "
+"(<quote>:</quote>) getrennt werden:"
+
+#: shadow.5.xml:88(emphasis) passwd.5.xml:78(para)
+msgid "login name"
+msgstr "Anmeldename"
+
+#: shadow.5.xml:90(para)
+msgid "It must be a valid account name, which exist on the system."
+msgstr ""
+"Dabei muss es sich um eine gültigen Kontonamen handeln, der auf dem System "
+"existiert."
+
+#: shadow.5.xml:96(emphasis) gshadow.5.xml:83(emphasis)
+msgid "encrypted password"
+msgstr "verschlüsseltes Passwort"
+
+#: shadow.5.xml:98(para)
+msgid ""
+"This field may be empty, in which case no passwords are required to "
+"authenticate as the specified login name. However, some applications which "
+"read the <filename>/etc/shadow</filename> file may decide not to permit any "
+"access at all if the password field is empty."
+msgstr ""
+"Dieses Feld kann leer bleiben. In diesem Fall kann sich der angegebene "
+"Benutzer ohne Passwort anmelden. Möglicherweise verweigern Anwendungen, "
+"welche die Datei <filename>/etc/shadow</filename> auswerten, dennoch den "
+"Zugang, wenn das Passwortfeld leer ist."
+
+#: shadow.5.xml:105(para) gshadow.5.xml:107(para)
+#, fuzzy
+#| msgid ""
+#| "A password field which starts with a exclamation mark means that the "
+#| "password is locked. The remaining characters on the line represent the "
+#| "password field before the password was locked."
+msgid ""
+"A password field which starts with an exclamation mark means that the "
+"password is locked. The remaining characters on the line represent the "
+"password field before the password was locked."
+msgstr ""
+"Ein Passwortfeld, das mit einem Ausrufezeichen beginnt, führt dazu, dass das "
+"Passwort gesperrt ist. Die übrigen Zeichen sind das Passwort vor der "
+"Sperrung."
+
+#: shadow.5.xml:111(para) passwd.5.xml:126(para) gshadow.5.xml:85(para)
+msgid ""
+"Refer to <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry> for details on how this string is interpreted."
+msgstr ""
+"Sie sollten in <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry> nachsehen, wenn Sie "
+"mehr über die Bedeutung dieser Zeichenkette wissen wollen."
+
+#: shadow.5.xml:116(para) passwd.5.xml:131(para)
+msgid ""
+"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)."
+msgstr ""
+"Wenn das Passwortfeld eine Zeichenkette enthält, die kein zulässiges "
+"Ergebnis von <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry> ist, z.B. ! oder *, kann sich der Benutzer nicht "
+"mit einem Unix-Passwort anmelden; eine Anmeldung auf anderem Wege wird "
+"dadurch nicht verhindert."
+
+#: shadow.5.xml:127(emphasis)
+msgid "date of last password change"
+msgstr "Datum, an dem das Passwort das letzte Mal geändert wurde"
+
+#: shadow.5.xml:130(para)
+msgid ""
+"The date of the last password change, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr ""
+"Das Datum, als das Passwort das letzte Mal geändert wurde, wird als Anzahl "
+"der Tage seit dem 1. Januar 1970 ausgedrückt."
+
+#: shadow.5.xml:134(para)
+#, fuzzy
+#| msgid ""
+#| "The value 0 has a special meaning, which is that the user should change "
+#| "her pasword the next time she will log in the system."
+msgid ""
+"The value 0 has a special meaning, which is that the user should change her "
+"password the next time she will log in the system."
+msgstr ""
+"Dem Wert 0 kommt eine besondere Bedeutung zu: Der Benutzer sollte sein "
+"Passwort bei der nächsten Anmeldung ändern."
+
+#: shadow.5.xml:139(para)
+msgid "An empty field means that password aging features are disabled."
+msgstr ""
+"Ein leeres Feld bedeutet, dass das Altern des Passworts abgeschaltet ist."
+
+#: shadow.5.xml:146(emphasis)
+msgid "minimum password age"
+msgstr "Mindestalter des Passworts"
+
+#: shadow.5.xml:148(para)
+msgid ""
+"The minimum password age is the number of days the user will have to wait "
+"before she will be allowed to change her password again."
+msgstr ""
+"Das Mindestalter des Passworts ist die Anzahl von Tagen, die ein Benutzer "
+"warten muss, bevor er sein Passwort wieder ändern darf."
+
+#: shadow.5.xml:153(para)
+msgid "An empty field and value 0 mean that there are no minimum password age."
+msgstr ""
+"Eine leeres Feld oder der Wert 0 bedeuten, dass es kein Mindestalter eines "
+"Passworts gibt."
+
+#: shadow.5.xml:160(emphasis)
+msgid "maximum password age"
+msgstr "Höchstalter des Passworts"
+
+#: shadow.5.xml:162(para)
+msgid ""
+"The maximum password age is the number of days after which the user will "
+"have to change her password."
+msgstr ""
+"Das Höchstalter des Passworts ist die Anzahl von Tagen, nach welcher der "
+"Benutzer sein Passwort ändern muss."
+
+#: shadow.5.xml:166(para)
+msgid ""
+"After this number of days is elapsed, the password may still be valid. The "
+"user should be asked to change her password the next time she will log in."
+msgstr ""
+"Auch nach Ablauf dieser Anzahl von Tagen bleibt das Passwort gültig. Der "
+"Benutzer wird bei der nächsten Anmeldung aufgefordert, sein Passwort zu "
+"ändern."
+
+#: shadow.5.xml:171(para)
+msgid ""
+"An empty field means that there are no maximum password age, no password "
+"warning period, and no password inactivity period (see below)."
+msgstr ""
+"Ein leeres Feld bedeutet, dass es kein Höchstalter für das Passwort, keine "
+"Vorwarnung und keine Dauer der Untätigkeit (siehe unten) gibt."
+
+#: shadow.5.xml:176(para)
+msgid ""
+"If the maximum password age is lower than the minimum password age, the user "
+"cannot change her password."
+msgstr ""
+"Wenn das Höchstalter niedriger als das Mindestalter eines Passworts ist, "
+"kann ein Benutzer sein Passwort nicht ändern."
+
+#: shadow.5.xml:184(emphasis)
+msgid "password warning period"
+msgstr "Passwortvorwarndauer"
+
+#: shadow.5.xml:187(para)
+msgid ""
+"The number of days before a password is going to expire (see the maximum "
+"password age above) during which the user should be warned."
+msgstr ""
+"Die Anzahl von Tagen, während welcher der Benutzer vorgewarnt wird, bevor "
+"sein Passwort abläuft (siehe das Höchstalter des Passworts)."
+
+#: shadow.5.xml:192(para)
+msgid ""
+"An empty field and value 0 mean that there are no password warning period."
+msgstr ""
+"Ein leeres Feld oder der Wert 0 bedeutet, dass es keine Vorwarnung gibt."
+
+#: shadow.5.xml:200(emphasis)
+msgid "password inactivity period"
+msgstr "Dauer der fehlenden Verwendung des Passworts"
+
+#: shadow.5.xml:203(para)
+msgid ""
+"The number of days after a password has expired (see the maximum password "
+"age above) during which the password should still be accepted (and the user "
+"should update her password during the next login)."
+msgstr ""
+"Die Anzahl von Tagen, für die ein Benutzer sein Passwort, nachdem es "
+"abgelaufen ist (vergleiche oben das Höchstalter des Passworts), noch "
+"verwenden kann (und während des nächsten Logins ändern muss)."
+
+#: shadow.5.xml:209(para)
+msgid ""
+"After expiration of the password and this expiration period is elapsed, no "
+"login is possible using the current user's password. The user should contact "
+"her administrator."
+msgstr ""
+"Nachdem das Passwort abgelaufen ist und auch die Dauer der Untätigkeit "
+"verstrichen ist, kann sich der Benutzer mit seinem Passwort nicht mehr "
+"anmelden. Er muss sich dann an den Administrator wenden."
+
+#: shadow.5.xml:214(para)
+msgid ""
+"An empty field means that there are no enforcement of an inactivity period."
+msgstr ""
+"Ein leeres Feld bedeutet, dass es keine Höchstdauer zwischen Ablauf des "
+"Passworts und erneuter Anmeldung des Benutzers gibt."
+
+#: shadow.5.xml:222(emphasis)
+msgid "account expiration date"
+msgstr "Datum des Verfalls des Kontos"
+
+#: shadow.5.xml:225(para)
+msgid ""
+"The date of expiration of the account, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr ""
+"Das Datum, an dem das Konto verfällt, wird als Anzahl der Tage seit dem 1. "
+"Januar 1970 ausgedrückt."
+
+#: shadow.5.xml:229(para)
+#, fuzzy
+#| msgid ""
+#| "Note that an account expiration differs from a password expiration. In "
+#| "case of an acount expiration, the user shall not be allowed to login. In "
+#| "case of a password expiration, the user is not allowed to login using her "
+#| "password."
+msgid ""
+"Note that an account expiration differs from a password expiration. In case "
+"of an account expiration, the user shall not be allowed to login. In case of "
+"a password expiration, the user is not allowed to login using her password."
+msgstr ""
+"Beachten Sie, dass der Verfall eines Kontos sich von dem Ablaufen eines "
+"Passworts unterscheidet. Im ersteren Fall kann sich der Benutzer nicht mehr "
+"anmelden. Im letzteren Fall kann sich der Benutzer nur nicht mehr mit seinem "
+"(alten) Passwort anmelden."
+
+#: shadow.5.xml:235(para)
+msgid "An empty field means that the account will never expire."
+msgstr "Ein leeres Feld bedeutet, dass das Konto nicht verfallen wird."
+
+#: shadow.5.xml:238(para)
+msgid ""
+"The value 0 should not be used as it is interpreted as either an account "
+"with no expiration, or as an expiration on Jan 1, 1970."
+msgstr ""
+"Der Wert 0 sollte nicht verwendet werden, weil er sowohl bedeuten kann, dass "
+"das Konto nicht verfällt als auch, dass das Konto bereits am 1. Januar 1970 "
+"verfallen ist."
+
+#: shadow.5.xml:246(emphasis)
+msgid "reserved field"
+msgstr "reserviertes Feld"
+
+#: shadow.5.xml:248(para)
+msgid "This field is reserved for future use."
+msgstr "Dieses Feld ist für zukünftigen Gebrauch reserviert."
+
+#: shadow.5.xml:270(filename)
+msgid "/etc/shadow-"
+msgstr "/etc/shadow-"
+
+#: shadow.5.xml:272(para)
+msgid "Backup file for /etc/shadow."
+msgstr "Sicherungskopie von /etc/shadow"
+
+#: shadow.5.xml:273(para) passwd.5.xml:178(para)
+msgid ""
+"Note that this file is used by the tools of the shadow toolsuite, but not by "
+"all user and password management tools."
+msgstr ""
+"Beachten Sie, dass diese Datei von Werkzeugen der Shadow-Werkzeugsammlung "
+"verwendet wird, aber nicht von allen sonstigen Programmen zur Benutzer- und "
+"Passwortverwaltung."
+
+#: shadow.5.xml:284(para)
+msgid ""
+"<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: shadow.3.xml:59(refmiscinfo)
+msgid "Library Calls"
+msgstr "Bibliotheksaufrufe"
+
+#: shadow.3.xml:65(refname)
+msgid "getspnam"
+msgstr "getspnam"
+
+# SB: Übersetzung iO?
+#: shadow.3.xml:66(refpurpose)
+msgid "encrypted password file routines"
+msgstr "Routinen für die Datei, die die verschlüsselten Passwörter enthält"
+
+#: shadow.3.xml:70(title)
+msgid "SYNTAX"
+msgstr "SYNTAX"
+
+#: shadow.3.xml:72(emphasis)
+msgid "#include &lt;shadow.h&gt;"
+msgstr "#include &lt;shadow.h&gt;"
+
+#: shadow.3.xml:76(emphasis)
+msgid "struct spwd *getspent();"
+msgstr "struct spwd *getspent();"
+
+#: shadow.3.xml:80(emphasis)
+msgid "struct spwd *getspnam(char"
+msgstr "truct spwd *getspnam(char"
+
+#: shadow.3.xml:81(emphasis)
+msgid "*name"
+msgstr "*name"
+
+#: shadow.3.xml:81(emphasis) shadow.3.xml:94(emphasis)
+#: shadow.3.xml:99(emphasis) shadow.3.xml:105(emphasis)
+msgid ");"
+msgstr ");"
+
+#: shadow.3.xml:85(emphasis)
+msgid "void setspent();"
+msgstr "void setspent();"
+
+#: shadow.3.xml:89(emphasis)
+msgid "void endspent();"
+msgstr "void endspent();"
+
+#: shadow.3.xml:93(emphasis)
+msgid "struct spwd *fgetspent(FILE"
+msgstr "struct spwd *fgetspent(FILE"
+
+#: shadow.3.xml:94(emphasis) shadow.3.xml:105(emphasis)
+msgid "*fp"
+msgstr "*fp"
+
+#: shadow.3.xml:98(emphasis)
+msgid "struct spwd *sgetspent(char"
+msgstr "struct spwd *sgetspent(char"
+
+#: shadow.3.xml:99(emphasis)
+msgid "*cp"
+msgstr "*cp"
+
+#: shadow.3.xml:103(emphasis)
+msgid "int putspent(struct spwd"
+msgstr "int putspent(struct spwd"
+
+#: shadow.3.xml:104(emphasis)
+msgid "*p,"
+msgstr "*p,"
+
+#: shadow.3.xml:104(emphasis)
+msgid "FILE"
+msgstr "DATEIEN"
+
+#: shadow.3.xml:109(emphasis)
+msgid "int lckpwdf();"
+msgstr "int lckpwdf();"
+
+#: shadow.3.xml:113(emphasis)
+msgid "int ulckpwdf();"
+msgstr "int ulckpwdf();"
+
+#: shadow.3.xml:119(para)
+msgid ""
+"<emphasis remap=\"I\">shadow</emphasis> manipulates the contents of the "
+"shadow password file, <filename>/etc/shadow</filename>. The structure in the "
+"<emphasis remap=\"I\">#include</emphasis> file is:"
+msgstr ""
+"<emphasis remap=\"I\">shadow</emphasis> verändert den Inhalt der Shadow-"
+"Passwort-Datei <filename>/etc/shadow</filename>. Der Aufbau der Datei "
+"<emphasis remap=\"I\">#include</emphasis> ist:"
+
+#: shadow.3.xml:124(programlisting)
+#, no-wrap
+msgid ""
+"struct spwd {\n"
+" char\t\t*sp_namp; /* user login name */\n"
+" char\t\t*sp_pwdp; /* encrypted password */\n"
+" long int\t\tsp_lstchg; /* last password change */\n"
+" long int\t\tsp_min; /* days until change allowed. */\n"
+" long int\t\tsp_max; /* days before change required */\n"
+" long int\t\tsp_warn; /* days warning for expiration */\n"
+" long int\t\tsp_inact; /* days before account inactive */\n"
+" long int\t\tsp_expire; /* date when account expires */\n"
+" unsigned long int\tsp_flag; /* reserved for future use */\n"
+"}\n"
+" "
+msgstr ""
+"struct spwd {\n"
+" char *sp_namp; /* Anmeldename des Benutzers */\n"
+" char *sp_pwdp; /* verschlüsseltes Passwort */\n"
+" long int sp_lstchg; /* letzte Änderung des Passworts */\n"
+" long int sp_min; /* Tage, ehe Änderung erlaubt ist */\n"
+" long int sp_max; /* Tage, bis Änderung erfolgen muss */\n"
+" long int sp_warn; /* Tage für Warnung vor Verfall */\n"
+" long int sp_inact; /* Tage, ehe Konto inaktiv wird */\n"
+" long int sp_expire; /* Datum, an dem Konto abgeschaltet wird */\n"
+" unsigned long int sp_flag; /* reserviert für zukünftigen Gebrauch*/\n"
+"}\n"
+" "
+
+#: shadow.3.xml:136(para)
+msgid "The meanings of each field are:"
+msgstr "Die Bedeutung dieser Felder ist:"
+
+# SB: Übersetzung von 'null-terminated'?
+#: shadow.3.xml:139(para)
+msgid "sp_namp - pointer to null-terminated user name"
+msgstr "sp_namp - Verweis auf Benutzername, der mit einer Null endet"
+
+#: shadow.3.xml:142(para)
+msgid "sp_pwdp - pointer to null-terminated password"
+msgstr "sp_pwdp - Verweis auf Passwort, das mit einer Null endet"
+
+#: shadow.3.xml:145(para)
+msgid "sp_lstchg - days since Jan 1, 1970 password was last changed"
+msgstr ""
+"sp_lstchg - Anzahl der Tage gerechnet ab dem 1. Januar 1970, seitdem das "
+"Passwort das letzte Mal geändert wurde"
+
+#: shadow.3.xml:148(para)
+msgid "sp_min - days before which password may not be changed"
+msgstr "sp_min - Anzahl der Tage, ehe das Passwort nicht geändert werden darf"
+
+#: shadow.3.xml:151(para)
+msgid "sp_max - days after which password must be changed"
+msgstr "sp_max - Anzahl der Tage, nach denen das Passwort geändert werden muss"
+
+#: shadow.3.xml:154(para)
+msgid ""
+"sp_warn - days before password is to expire that user is warned of pending "
+"password expiration"
+msgstr ""
+"sp_warn - Anzahl der Tage ehe das Passwort verfällt, an denen der Benutzer "
+"vor dem Verfall gewarnt wird"
+
+#: shadow.3.xml:159(para)
+msgid ""
+"sp_inact - days after password expires that account is considered inactive "
+"and disabled"
+msgstr ""
+"sp_inact - Anzahl der Tage nach dem Verfall des Passworts, nach denen das "
+"Konto als inaktiv angesehen und abgeschaltet wird"
+
+#: shadow.3.xml:164(para)
+msgid "sp_expire - days since Jan 1, 1970 when account will be disabled"
+msgstr ""
+"sp_expire - Anzahl Tage gerechnet ab dem 1. Januar 1970, für die das Konto "
+"abgeschaltet ist"
+
+#: shadow.3.xml:167(para)
+msgid "sp_flag - reserved for future use"
+msgstr "sp_flag - für zukünftigen Gebrauch reserviert"
+
+#: shadow.3.xml:175(para)
+msgid ""
+"<emphasis>getspent</emphasis>, <emphasis>getspname</emphasis>, "
+"<emphasis>fgetspent</emphasis>, and <emphasis>sgetspent</emphasis> each "
+"return a pointer to a <emphasis>struct spwd</emphasis>. <emphasis>getspent</"
+"emphasis> returns the next entry from the file, and <emphasis>fgetspent</"
+"emphasis> returns the next entry from the given stream, which is assumed to "
+"be a file of the proper format. <emphasis>sgetspent</emphasis> returns a "
+"pointer to a <emphasis>struct spwd</emphasis> using the provided string as "
+"input. <emphasis>getspnam</emphasis> searches from the current position in "
+"the file for an entry matching <emphasis>name</emphasis>."
+msgstr ""
+"<emphasis>getspent</emphasis>, <emphasis>getspname</emphasis>, "
+"<emphasis>fgetspent</emphasis> und <emphasis>sgetspent</emphasis> geben "
+"einen Verweis auf <emphasis>struct spwd</emphasis> zurück. "
+"<emphasis>getspent</emphasis> gibt den nächsten Eintrag der Datei zurück. "
+"<emphasis>fgetspent</emphasis> gibt den nächsten Eintrag im angegebenen "
+"Datenstrom zurück, für den angenommen wird, dass es sich dabei um eine Datei "
+"im zulässigen Format handelt. <emphasis>sgetspent</emphasis> gibt einen "
+"Verweis auf einen <emphasis>struct spwd</emphasis> zurück, wobei die "
+"angegebene Zeichenkette als Eingabe verwendet wird. <emphasis>getspnam</"
+"emphasis> sucht ab der aktuellen Position in der Datei nach einem Eintrag, "
+"der mit <emphasis>name</emphasis> übereinstimmt."
+
+#: shadow.3.xml:188(para)
+msgid ""
+"<emphasis>setspent</emphasis> and <emphasis>endspent</emphasis> may be used "
+"to begin and end, respectively, access to the shadow password file."
+msgstr ""
+"<emphasis>setspent</emphasis> und <emphasis>endspent</emphasis> können "
+"verwendet werden, um den Zugriff auf die Shadow-Passwort-Datei zu beginnen "
+"oder zu beenden."
+
+#: shadow.3.xml:194(para)
+msgid ""
+"The <emphasis>lckpwdf</emphasis> and <emphasis>ulckpwdf</emphasis> routines "
+"should be used to insure exclusive access to the <filename>/etc/shadow</"
+"filename> file. <emphasis>lckpwdf</emphasis> attempts to acquire a lock "
+"using <emphasis>pw_lock</emphasis> for up to 15 seconds. It continues by "
+"attempting to acquire a second lock using <emphasis>spw_lock</emphasis> for "
+"the remainder of the initial 15 seconds. Should either attempt fail after a "
+"total of 15 seconds, <emphasis>lckpwdf</emphasis> returns -1. When both "
+"locks are acquired 0 is returned."
+msgstr ""
+"Die Routinen <emphasis>lckpwdf</emphasis> und <emphasis>ulckpwdf</emphasis> "
+"sollten eingesetzt werden, da so sichergestellt werden kann, dass exlusiv "
+"auf die Datei <filename>/etc/shadow</filename> zugegriffen wird. "
+"<emphasis>lckpwdf</emphasis> versucht, eine Sperre durch <emphasis>pw_lock</"
+"emphasis> für bis zu 15 Sekunden zu erhalten. Dann versucht es, eine zweite "
+"Sperre durch <emphasis>spw_lock</emphasis> für den Rest der 15 Sekunden zu "
+"erhalten. Sollte einer der beiden Versuche nach insgesamt 15 Sekunden "
+"scheitern, gibt <emphasis>lckpwdf</emphasis> -1 zurück. Wurden beide Sperren "
+"erhalten, wird 0 zurückgegeben."
+
+#: shadow.3.xml:209(para)
+msgid ""
+"Routines return NULL if no more entries are available or if an error occurs "
+"during processing. Routines which have <emphasis>int</emphasis> as the "
+"return value return 0 for success and -1 for failure."
+msgstr ""
+"Wenn kein weiterer Eintrag vorhanden ist oder während der Verarbeitung ein "
+"Fehler auftritt, geben die Routinen NULL zurück. Routinen, die "
+"<emphasis>int</emphasis> als Rückgabewert haben, geben im Erfolgsfall 0 und "
+"beim Scheitern -1 zurück."
+
+#: shadow.3.xml:219(para)
+msgid ""
+"These routines may only be used by the superuser as access to the shadow "
+"password file is restricted."
+msgstr ""
+"Diese Routinen können nur von Root verwendet werden, da der Zugriff auf die "
+"Shadow-Passwort-Datei beschränkt ist."
+
+#: shadow.3.xml:239(para)
+msgid ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: pwconv.8.xml:63(refentrytitle) pwconv.8.xml:70(refname)
+#: pwconv.8.xml:79(command) login.defs.5.xml:439(term)
+msgid "pwconv"
+msgstr "pwconv"
+
+#: pwconv.8.xml:71(refname) pwconv.8.xml:85(command) login.defs.5.xml:448(term)
+msgid "pwunconv"
+msgstr "pwunconv"
+
+#: pwconv.8.xml:72(refname) pwconv.8.xml:91(command) login.defs.5.xml:344(term)
+msgid "grpconv"
+msgstr "grpconv"
+
+#: pwconv.8.xml:73(refname) pwconv.8.xml:97(command) login.defs.5.xml:350(term)
+msgid "grpunconv"
+msgstr "grpunconv"
+
+#: pwconv.8.xml:74(refpurpose)
+msgid "convert to and from shadow passwords and groups"
+msgstr "konvertiert zu oder von Shadow-Passwörtern und -gruppen"
+
+# SB: Translation ok?
+#: pwconv.8.xml:106(para)
+msgid ""
+"The <command>pwconv</command> command creates <emphasis remap=\"I\">shadow</"
+"emphasis> from <emphasis remap=\"I\">passwd</emphasis> and an optionally "
+"existing <emphasis remap=\"I\">shadow</emphasis>."
+msgstr ""
+"Der Befehl <command>pwconv</command> erstellt eine <emphasis remap=\"I"
+"\">shadow</emphasis>-Datei aus einer <emphasis remap=\"I\">passwd</emphasis>-"
+"Datei und gegebenenfalls aus einer bereits vorhandenen <emphasis remap=\"I"
+"\">shadow</emphasis>-Datei."
+
+#: pwconv.8.xml:111(para)
+msgid ""
+"<command>pwconv</command> does not work with <option>USE_TCB</option> "
+"enabled. To convert to tcb passwords, you should first use <command>pwconv</"
+"command> to convert to shadowed passwords by disabling <option>USE_TCB</"
+"option> in <filename>login.defs</filename> and then convert to tcb password "
+"using <command>tcb_convert</command> (and re-enable <option>USE_TCB</option> "
+"in <filename>login.defs</filename>.)"
+msgstr ""
+"<command>pwconv</command> funktioniert nicht, wenn <option>USE_TCB</option> "
+"aktiviert ist. Um zu Tcb-Passwörtern zu konvertieren, sollten Sie zuerst mit "
+"<command>pwconv</command> zu Shadowed-Passwörtern konvertieren, wobei Sie in "
+"<filename>login.defs</filename> <option>USE_TCB</option> deaktivieren, und "
+"anschließend mit <command>tcb_convert</command> zu Tcb-Passwörtern "
+"konvertieren. Schließlich können Sie <option>USE_TCB</option> in "
+"<filename>login.defs</filename> reaktivieren."
+
+# SB: Translation ok?
+#: pwconv.8.xml:121(para)
+msgid ""
+"The <command>pwunconv</command> command creates <emphasis remap=\"I"
+"\">passwd</emphasis> from <emphasis remap=\"I\">passwd</emphasis> and "
+"<emphasis remap=\"I\">shadow</emphasis> and then removes <emphasis remap=\"I"
+"\">shadow</emphasis>."
+msgstr ""
+"Der Befehl <command>pwunconv</command> erstellt eine <emphasis remap=\"I"
+"\">passwd</emphasis>-Datei aus einer <emphasis remap=\"I\">passwd</"
+"emphasis>- und <emphasis remap=\"I\">shadow</emphasis>-Datei und entfernt "
+"anschließend die<emphasis remap=\"I\">shadow</emphasis>-Datei."
+
+#: pwconv.8.xml:127(para)
+msgid ""
+"<command>pwunconv</command> does not work with <option>USE_TCB</option> "
+"enabled. You should first switch back from tcb to shadowed passwords using "
+"<command>tcb_unconvert</command>, and then disable <option>USE_TCB</option> "
+"in <filename>login.defs</filename> before using <command>pwunconv</command>."
+msgstr ""
+"<command>pwunconv</command> funktioniert nicht, wenn <option>USE_TCB</"
+"option> aktiviert ist. Sie sollten zuerst mit <command>tcb_unconvert</"
+"command> von tcb- zu shadowed-Passwörtern wechseln und anschließend vor der "
+"Verwendung von <command>pwunconv</command> <option>USE_TCB</option> in "
+"<filename>login.defs</filename> deaktivieren."
+
+#: pwconv.8.xml:136(para)
+msgid ""
+"The <command>grpconv</command> command creates <emphasis remap=\"I"
+"\">gshadow</emphasis> from <emphasis remap=\"I\">group</emphasis> and an "
+"optionally existing <emphasis remap=\"I\">gshadow</emphasis>."
+msgstr ""
+"Der Befehl <command>grconv</command> erstellt eine <emphasis remap=\"I"
+"\">gshadow</emphasis>-Datei aus einer <emphasis remap=\"I\">group</emphasis>-"
+"Datei und gegebenenfalls aus einer bereits vorhandenen <emphasis remap=\"I"
+"\">gshadow</emphasis>-Datei."
+
+#: pwconv.8.xml:142(para)
+msgid ""
+"The <command>grpunconv</command> command creates <emphasis remap=\"I"
+"\">group</emphasis> from <emphasis remap=\"I\">group</emphasis> and "
+"<emphasis remap=\"I\">gshadow</emphasis> and then removes <emphasis remap=\"I"
+"\">gshadow</emphasis>."
+msgstr ""
+"Der Befehl <command>grpunconv</command> erstellt eine <emphasis remap=\"I"
+"\">group</emphasis>-Datei aus einer <emphasis remap=\"I\">group</emphasis>- "
+"und <emphasis remap=\"I\">gshadow</emphasis>-Datei und entfernt anschließend "
+"die <emphasis remap=\"I\">gshadow</emphasis>-Datei."
+
+#: pwconv.8.xml:149(para)
+msgid ""
+"These four programs all operate on the normal and shadow password and group "
+"files: <filename>/etc/passwd</filename>, <filename>/etc/group</filename>, "
+"<filename>/etc/shadow</filename>, and <filename>/etc/gshadow</filename>."
+msgstr ""
+"Diese vier Programme funktionieren mit der normalen und der Shadow-"
+"Passwortdatei und den Gruppendateien: <filename>/etc/passwd</filename>, "
+"<filename>/etc/group</filename>, <filename>/etc/shadow</filename> und "
+"<filename>/etc/gshadow</filename>."
+
+#: pwconv.8.xml:156(para)
+msgid ""
+"Each program acquires the necessary locks before conversion. "
+"<command>pwconv</command> and <command>grpconv</command> are similar. First, "
+"entries in the shadowed file which don't exist in the main file are removed. "
+"Then, shadowed entries which don't have `x' as the password in the main file "
+"are updated. Any missing shadowed entries are added. Finally, passwords in "
+"the main file are replaced with `x'. These programs can be used for initial "
+"conversion as well to update the shadowed file if the main file is edited by "
+"hand."
+msgstr ""
+"Jedes dieser Programme erzeugt vor der Konvertierung die notwendigen "
+"Sperren. <command>pwconv</command> und <command>grpconv</command> sind "
+"vergleichbar. Zuerst werden die Einträge aus der Shadow-Datei entfernt, die "
+"nicht in der Hauptdatei enthalten sind. Anschließend werden die Einträge in "
+"der Shadow-Datei aktualisiert, die kein »x« als Passwort haben. Zuletzt "
+"werden die Passwörter in der Hauptdatei durch »x« ersetzt. Diese Programme "
+"können für eine erstmalige Konvertierung genutzt werden als auch, um die "
+"Shadow-Datei zu aktualisieren, falls die Hauptdatei von Hand bearbeitet "
+"wurde."
+
+#: pwconv.8.xml:167(para)
+msgid ""
+"<command>pwconv</command> will use the values of <emphasis remap=\"I"
+"\">PASS_MIN_DAYS</emphasis>, <emphasis remap=\"I\">PASS_MAX_DAYS</emphasis>, "
+"and <emphasis remap=\"I\">PASS_WARN_AGE</emphasis> from <filename>/etc/login."
+"defs</filename> when adding new entries to <filename>/etc/shadow</filename>."
+msgstr ""
+"<command>pwconv</command> verwendet die Werte <emphasis remap=\"I"
+"\">PASS_MIN_DAYS</emphasis>, <emphasis remap=\"I\">PASS_MAX_DAYS</emphasis> "
+"und <emphasis remap=\"I\">PASS_WARN_AGE</emphasis> aus <filename>/etc/login."
+"defs</filename>, wenn neue Einträge zu <filename>/etc/shadow</filename> "
+"hinzugefügt werden."
+
+#: pwconv.8.xml:176(para)
+msgid ""
+"Likewise <command>pwunconv</command> and <command>grpunconv</command> are "
+"similar. Passwords in the main file are updated from the shadowed file. "
+"Entries which exist in the main file but not in the shadowed file are left "
+"alone. Finally, the shadowed file is removed. Some password aging "
+"information is lost by <command>pwunconv</command>. It will convert what it "
+"can."
+msgstr ""
+"Ebenfalls sind die Befehle <command>pwunconv</command> und "
+"<command>grpunconv</command> ähnlich. Passwörter in der Hauptdatei werden "
+"durch die Shadow-Datei aktualisiert. Einträge, welche in der Hauptdatei, "
+"aber nicht in der Shadow-Datei vorhanden sind, bleiben unberührt. Zuletzt "
+"wird die Shadow-Datei gelöscht. Eine Information für den Verfall von "
+"Passwörtern geht durch <command>pwunconv</command> verloren. Es wird aber so "
+"viel wie möglich umgewandelt."
+
+#: pwconv.8.xml:188(para)
+msgid ""
+"The options which apply to the <command>pwconv</command>, <command>pwunconv</"
+"command>, <command>grpconv</command>, and <command>grpunconv</command> "
+"commands are:"
+msgstr ""
+"Die Optionen, die von den Befehlen <command>pwconv</command>, "
+"<command>pwunconv</command>, <command>grpconv</command> und "
+"<command>grpunconv</command> unterstützt werden, sind:"
+
+#: pwconv.8.xml:217(para)
+msgid ""
+"Errors in the password or group files (such as invalid or duplicate entries) "
+"may cause these programs to loop forever or fail in other strange ways. "
+"Please run <command>pwck</command> and <command>grpck</command> to correct "
+"any such errors before converting to or from shadow passwords or groups."
+msgstr ""
+"Fehler in der Passwort- oder Gruppendatei (wie z.B. ungültige oder doppelte "
+"Einträge) können zu Endlosschleifen oder anderen seltsamen Fehlern führen. "
+"Sie sollten daher <command>pwck</command> und <command>grpck</command> "
+"ausführen, um solche Fehler zu entfernen, bevor Sie von oder zu Shadow-"
+"Passwörtern oder -gruppen umwandeln."
+
+#: pwconv.8.xml:228(para)
+msgid ""
+"The following configuration variable in <filename>/etc/login.defs</filename> "
+"changes the behavior of <command>grpconv</command> and <command>grpunconv</"
+"command>:"
+msgstr ""
+"Die folgende Konfigurationsvariablen in <filename>/etc/login.defs</filename> "
+"beeinflussen das Verhalten von <command>grpconv</command> und "
+"<command>grpunconv</command>:"
+
+#: pwconv.8.xml:236(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of <command>pwconv</command>:"
+msgstr ""
+"Die folgenden Konfigurationsvariablen in <filename>/etc/login.defs</"
+"filename> beeinflussen das Verhalten von <command>pwconv</command>:"
+
+#: pwconv.8.xml:263(para)
+msgid ""
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry><phrase condition=\"tcb\">, "
+"<citerefentry><refentrytitle>tcb_convert</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>tcb_unconvert</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry><phrase condition=\"tcb\">, "
+"<citerefentry><refentrytitle>tcb_convert</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>tcb_unconvert</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry></phrase>."
+
+#: pwck.8.xml:47(contrib) lastlog.8.xml:43(contrib) grpck.8.xml:42(contrib)
+msgid "Creation, 1992"
+msgstr "ursprünglicher Autor, 1992"
+
+#: pwck.8.xml:63(refentrytitle) pwck.8.xml:70(refname) pwck.8.xml:76(command)
+#: login.defs.5.xml:430(term)
+msgid "pwck"
+msgstr "pwck"
+
+#: pwck.8.xml:71(refpurpose)
+msgid "verify integrity of password files"
+msgstr "überprüft die Stimmigkeit der Passwortdateien"
+
+#: pwck.8.xml:80(replaceable) passwd.5.xml:57(refentrytitle)
+#: passwd.5.xml:64(refname) passwd.1.xml:64(refentrytitle)
+#: passwd.1.xml:71(refname) passwd.1.xml:77(command) login.defs.5.xml:419(term)
+msgid "passwd"
+msgstr "passwd"
+
+#: pwck.8.xml:93(para)
+msgid ""
+"The <command>pwck</command> command verifies the integrity of the users and "
+"authentication information. It checks that all entries in <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename><phrase condition=\"tcb"
+"\">(or the files in <filename>/etc/tcb</filename>, when <option>USE_TCB</"
+"option> is enabled)</phrase> have the proper format and contain valid data. "
+"The user is prompted to delete entries that are improperly formatted or "
+"which have other uncorrectable errors."
+msgstr ""
+"Der Befehl <command>pwck</command> überprüft die Stimmigkeit der Benutzer- "
+"und Authentifizierungsdaten. Alle Einträge in <filename>/etc/passwd</"
+"filename> und <filename>/etc/shadow</filename><phrase condition=\"tcb\"> "
+"(oder die Dateien in <filename>/etc/tcb</filename>, falls <option>USE_TCB</"
+"option> aktiviert ist)</phrase> werden darauf überprüft, ob der Eintrag das "
+"richtige Format hat und gültige Daten enthält. Der Benutzer wird "
+"aufgefordert, Einträge zu löschen, die falsch formatiert sind oder andere "
+"unbehebbare Fehler enthalten."
+
+#: pwck.8.xml:105(para) grpck.8.xml:94(para)
+msgid "Checks are made to verify that each entry has:"
+msgstr "Es wird überprüft, ob jeder Eintrag folgende Eigenschaften aufweist:"
+
+#: pwck.8.xml:108(para) grpck.8.xml:98(para)
+msgid "the correct number of fields"
+msgstr "die richtige Anzahl von Feldern"
+
+#: pwck.8.xml:111(para)
+msgid "a unique and valid user name"
+msgstr "einen eindeutigen und gültigen Benutzernamen"
+
+#: pwck.8.xml:114(para)
+msgid "a valid user and group identifier"
+msgstr "eine gültige Benutzer- und Gruppenkennung"
+
+#: pwck.8.xml:117(para)
+msgid "a valid primary group"
+msgstr "eine gültige Hauptgruppe"
+
+#: pwck.8.xml:120(para)
+msgid "a valid home directory"
+msgstr "ein gültiges Home-Verzeichnis"
+
+#: pwck.8.xml:123(para)
+msgid "a valid login shell"
+msgstr "eine gültige Anmelde-Shell"
+
+#: pwck.8.xml:127(para)
+msgid ""
+"<filename>shadow</filename> checks are enabled when a second file parameter "
+"is specified or when <filename>/etc/shadow</filename> exists on the system."
+msgstr ""
+"Eine Überprüfung von <filename>shadow</filename> findet statt, wenn ein "
+"zweiter Parameter angegeben wird oder auf dem System <filename>/etc/shadow</"
+"filename> existiert."
+
+#: pwck.8.xml:132(para)
+msgid "These checks are the following:"
+msgstr "Diese Tests umfassen Folgendes:"
+
+#: pwck.8.xml:137(para)
+msgid ""
+"every passwd entry has a matching shadow entry, and every shadow entry has a "
+"matching passwd entry"
+msgstr ""
+"ob jedem Eintrag in passwd ein Eintrag in shadow entspricht und umgekehrt"
+
+#: pwck.8.xml:143(para)
+msgid "passwords are specified in the shadowed file"
+msgstr "ob die Passwörter in der Shadow-Datei niedergelegt sind"
+
+#: pwck.8.xml:146(para)
+msgid "shadow entries have the correct number of fields"
+msgstr "ob die shadow-Einträge die richtige Anzahl von Feldern haben"
+
+#: pwck.8.xml:149(para)
+msgid "shadow entries are unique in shadow"
+msgstr "ob die Shadow-Einträge in shadow eindeutig sind"
+
+#: pwck.8.xml:152(para)
+msgid "the last password changes are not in the future"
+msgstr "dass das Datum der letzten Passwortänderung nicht in der Zukunft liegt"
+
+#: pwck.8.xml:156(para)
+msgid ""
+"The checks for correct number of fields and unique user name are fatal. If "
+"the entry has the wrong number of fields, the user will be prompted to "
+"delete the entire line. If the user does not answer affirmatively, all "
+"further checks are bypassed. An entry with a duplicated user name is "
+"prompted for deletion, but the remaining checks will still be made. All "
+"other errors are warning and the user is encouraged to run the "
+"<command>usermod</command> command to correct the error."
+msgstr ""
+"Fehler bei der Überprüfung der richtigen Anzahl der Felder und des "
+"eindeutigen Benutzernames sind schwerwiegend. Wenn ein Eintrag die falsche "
+"Anzahl von Feldern ausweist, wird der Benutzer aufgefordert, die gesamte "
+"Zeile zu löschen. Wenn dies der Benutzer ablehnt, werden alle weiteren Tests "
+"ausgelassen. Bei einem Eintrag mit einem mehrfach verwendeten Benutzernamen "
+"wird der Benutzer aufgefordert, diesen Eintrag zu löschen. Sollte er dies "
+"ablehnen, werden dennoch die übrigen Test ausgeführt. Bei allen anderen "
+"Fehlern wird eine Warnung abgegeben und der Benutzer aufgefordert, den "
+"Fehler mittels des Befehls <command>usermod</command> zu beheben."
+
+#: pwck.8.xml:167(para)
+msgid ""
+"The commands which operate on the <filename>/etc/passwd</filename> file are "
+"not able to alter corrupted or duplicated entries. <command>pwck</command> "
+"should be used in those circumstances to remove the offending entry."
+msgstr ""
+"Die Befehle, welche die Datei <filename>/etc/passwd</filename> bearbeiten, "
+"können falsche oder doppelte Einträge nicht verändern. In solchen Fällen "
+"sollte <command>pwck</command> verwendet werden, um den betreffenden Eintrag "
+"zu entfernen."
+
+#: pwck.8.xml:177(para) grpck.8.xml:148(para)
+msgid ""
+"The <option>-r</option> and <option>-s</option> options cannot be combined."
+msgstr ""
+"Die Optionen <option>-r</option> und <option>-s</option> können nicht "
+"zusammen verwendet werden."
+
+#: pwck.8.xml:181(para)
+msgid "The options which apply to the <command>pwck</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>pwck</command> unterstützt werden, "
+"sind:"
+
+#: pwck.8.xml:204(para)
+msgid ""
+"Report errors only. The warnings which do not require any action from the "
+"user won't be displayed."
+msgstr ""
+"meldet nur Fehler. Warnungen, die keine Handlung des Benutzers erfordern, "
+"werden nicht angezeigt"
+
+#: pwck.8.xml:211(term) grpck.8.xml:163(term)
+msgid "<option>-r</option>, <option>--read-only</option>"
+msgstr "<option>-r</option>, <option>--read-only</option>"
+
+#: pwck.8.xml:213(para)
+msgid "Execute the <command>pwck</command> command in read-only mode."
+msgstr "führt den Befehl <command>pwck</command> im Modus Nur-Lesen aus"
+
+#: pwck.8.xml:231(term) grpck.8.xml:185(term)
+msgid "<option>-s</option>, <option>--sort</option>"
+msgstr "<option>-s</option>, <option>--sort</option>"
+
+#: pwck.8.xml:233(para)
+msgid ""
+"Sort entries in <filename>/etc/passwd</filename> and <filename>/etc/shadow</"
+"filename> by UID."
+msgstr ""
+"ordnet die Einträge in <filename>/etc/passwd</filename> und <filename>/etc/"
+"shadow</filename> nach der UID"
+
+#: pwck.8.xml:237(para)
+msgid "This option has no effect when <option>USE_TCB</option> is enabled."
+msgstr ""
+"Diese Option ist wirkungslos, wenn <option>USE_TCB</option> aktiviert ist."
+
+#: pwck.8.xml:244(para)
+msgid ""
+"By default, <command>pwck</command> operates on the files <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename><phrase condition=\"tcb"
+"\"> (or the files in <filename>/etc/tcb</filename>)</phrase>. The user may "
+"select alternate files with the <replaceable>passwd</replaceable> and "
+"<replaceable>shadow</replaceable> parameters."
+msgstr ""
+"Standardmäßig bearbeitet <command>pwck</command> die Dateien <filename>/etc/"
+"passwd</filename> und <filename>/etc/shadow</filename><phrase condition=\"tcb"
+"\"> (oder die Dateien in <filename>/etc/tcb</filename>)</phrase>. Der "
+"Benutzer kann andere Dateien mit den Parametern <replaceable>passwd</"
+"replaceable> und <replaceable>shadow</replaceable> auswählen."
+
+#: pwck.8.xml:253(para)
+#, fuzzy
+#| msgid ""
+#| "Note that when <option>USE_TCB</option> is enabled, you cannot specify an "
+#| "alternative <replaceable>shadow</replaceable> file. In future releases, "
+#| "this paramater could be replaced by an alternate TCB directory."
+msgid ""
+"Note that when <option>USE_TCB</option> is enabled, you cannot specify an "
+"alternative <replaceable>shadow</replaceable> file. In future releases, this "
+"parameter could be replaced by an alternate TCB directory."
+msgstr ""
+"Hinweis: Wenn <option>USE_TCB</option> aktiviert ist, können Sie keine "
+"andere <replaceable>shadow</replaceable>-Datei angeben. In zukünftigen "
+"Versionen kann dieser Parameter durch ein anderes TCB-Verzeichnis ersetzt "
+"werden."
+
+#: pwck.8.xml:322(para)
+msgid "one or more bad password entries"
+msgstr "ein oder mehrere fehlerhafte Passworteinträge"
+
+#: pwck.8.xml:328(para)
+msgid "can't open password files"
+msgstr "Die Passwortdatei kann nicht geöffnet werden."
+
+#: pwck.8.xml:334(para)
+msgid "can't lock password files"
+msgstr "Die Passwortdatei kann nicht gesperret werden."
+
+#: pwck.8.xml:340(para)
+msgid "can't update password files"
+msgstr "Die Passwortdatei kann nicht aktualisieren werden."
+
+#: pwck.8.xml:346(para)
+msgid "can't sort password files"
+msgstr "Die Passwortdatei kann nicht sortieren werden."
+
+#: pwck.8.xml:304(para)
+msgid ""
+"The <command>pwck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Der Befehl <command>pwck</command> gibt beim Beenden folgende Werte zurück: "
+"<placeholder-1/>"
+
+#: pwck.8.xml:355(para)
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: porttime.5.xml:57(refentrytitle) porttime.5.xml:64(refname)
+msgid "porttime"
+msgstr "porttime"
+
+#: porttime.5.xml:65(refpurpose)
+msgid "port access time file"
+msgstr "Datei für zeitlich begrenzten Zugang zu Ports"
+
+#: porttime.5.xml:70(para)
+msgid ""
+"<emphasis remap=\"I\">porttime</emphasis> contains a list of tty devices, "
+"user names, and permitted login times."
+msgstr ""
+"<emphasis remap=\"I\">porttime</emphasis> enthält eine Liste von tty-"
+"Geräten, Benutzernamen und zulässigen Anmeldezeiten."
+
+#: porttime.5.xml:75(para)
+msgid ""
+"Each entry consists of three colon separated fields. The first field is a "
+"comma separated list of tty devices, or an asterisk to indicate that all tty "
+"devices are matched by this entry. The second field is a comma separated "
+"list of user names, or an asterisk to indicated that all user names are "
+"matched by this entry. The third field is a comma separated list of "
+"permitted access times."
+msgstr ""
+"Jeder Eintrag besteht aus drei Feldern, die durch Doppelpunkte getrennt "
+"sind. Das erste Feld enthält eine Liste von tty-Geräten, die durch Kommata "
+"getrennt sind, oder einen Stern, was bedeutet, dass dieser Eintrag auf alle "
+"tty-Geräte zutrifft. Das zweite Feld enthält eine Liste von Benutzernamen, "
+"die durch Kommata getrennt sind, oder einen Stern, was bedeutet, dass dieser "
+"Eintrag auf alle Benutzernamen zutrifft. Das dritte Feld ist eine Liste von "
+"Anmeldezeiten, die durch Kommata getrennt sind."
+
+#: porttime.5.xml:84(para)
+msgid ""
+"Each access time entry consists of zero or more days of the week, "
+"abbreviated <emphasis>Su</emphasis>, <emphasis>Mo</emphasis>, <emphasis>Tu</"
+"emphasis>, <emphasis>We</emphasis>, <emphasis>Th</emphasis>, <emphasis>Fr</"
+"emphasis>, and <emphasis>Sa</emphasis>, followed by a pair of times "
+"separated by a hyphen. The abbreviation <emphasis>Wk</emphasis> may be used "
+"to represent Monday thru Friday, and <emphasis>Al</emphasis> may be used to "
+"indicate every day. If no days are given, <emphasis>Al</emphasis> is assumed."
+msgstr ""
+"Jeder Zeiteintrag kann aus einem oder mehreren Wochentagen bestehen, die mit "
+"<emphasis>Su</emphasis>, <emphasis>Mo</emphasis>, <emphasis>Tu</emphasis>, "
+"<emphasis>We</emphasis>, <emphasis>Th</emphasis>, <emphasis>Fr</emphasis> "
+"und <emphasis>Sa</emphasis> abgekürzt werden. Danach folgt die Angabe von "
+"zwei Uhrzeiten, die durch einen Bindestrich getrennt sind. Mit der Abkürzung "
+"<emphasis>Wk</emphasis> wird Montag bis Freitag bezeichnet. Mit "
+"<emphasis>Al</emphasis> wird jeder Tag gewählt. Falls keine Tage angegeben "
+"werden, wird <emphasis>Al</emphasis> angenommen."
+
+#: porttime.5.xml:98(title)
+msgid "EXAMPLES"
+msgstr "BEISPIELE"
+
+#: porttime.5.xml:99(para)
+msgid ""
+"The following entry allows access to user <emphasis remap=\"B\">jfh</"
+"emphasis> on every port during weekdays from 9am to 5pm."
+msgstr ""
+"Der folgende Eintrag erlaubt dem Benutzer <emphasis remap=\"B\">jfh</"
+"emphasis> Zugriff auf jeden Port während Werktagen von 9 bis 17 Uhr."
+
+#: porttime.5.xml:105(para)
+msgid "*:jfh:Wk0900-1700"
+msgstr "*:jfh:Wk0900-1700"
+
+#: porttime.5.xml:107(para)
+msgid ""
+"The following entries allow access only to the users <emphasis>root</"
+"emphasis> and <emphasis>oper</emphasis> on <filename>/dev/console</filename> "
+"at any time. This illustrates how the <filename>/etc/porttime</filename> "
+"file is an ordered list of access times. Any other user would match the "
+"second entry which does not permit access at any time."
+msgstr ""
+"Die folgenden Einträge erlauben nur den Benutzern <emphasis>root</emphasis> "
+"und <emphasis>oper</emphasis> jederzeit Zugriff auf <filename>/dev/console</"
+"filename>. Hier ist auch ersichtlich, dass <filename>/etc/porttime</"
+"filename> eine geordnete Liste der Zugriffszeiten ist. Jeder andere Benutzer "
+"fällt unter den zweiten Eintrag, welcher Zugriff zu keiner Zeit erlaubt."
+
+#: porttime.5.xml:116(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+" console:root,oper:Al0000-2400\n"
+" console:*:\n"
+" "
+msgstr ""
+"\n"
+" console:root,oper:Al0000-2400\n"
+" console:*:\n"
+" "
+
+#: porttime.5.xml:121(para)
+msgid ""
+"The following entry allows access for the user <emphasis>games</emphasis> on "
+"any port during non-working hours."
+msgstr ""
+"Der folgende Eintrag erlaubt dem Benutzer <emphasis>games</emphasis> Zugriff "
+"auf jeden Port außerhalb von Arbeitszeiten."
+
+#: porttime.5.xml:126(para)
+msgid "*:games:Wk1700-0900,SaSu0000-2400"
+msgstr "*:games:Wk1700-0900,SaSu0000-2400"
+
+#: porttime.5.xml:133(filename) logoutd.8.xml:92(filename)
+msgid "/etc/porttime"
+msgstr "/etc/porttime"
+
+#: porttime.5.xml:135(para) logoutd.8.xml:94(para)
+msgid "File containing port access."
+msgstr "Datei, die den Port-Zugriff enthält."
+
+#: porttime.5.xml:143(para) login.access.5.xml:134(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: passwd.5.xml:65(refpurpose)
+msgid "the password file"
+msgstr "die Passwortdatei"
+
+#: passwd.5.xml:70(para)
+msgid ""
+"<filename>/etc/passwd</filename> contains one line for each user account, "
+"with seven fields delimited by colons (<quote>:</quote>). These fields are:"
+msgstr ""
+"<filename>/etc/passwd</filename> enthält einen Eintrag pro Benutzerkonto, "
+"wobei jeder Eintrag sieben Felder besitzt, die durch Doppelpunkt (<quote>:</"
+"quote>) getrennt sind. Diese Felder sind:"
+
+#: passwd.5.xml:81(para)
+msgid "optional encrypted password"
+msgstr "optional verschlüsseltes Passwort"
+
+#: passwd.5.xml:84(para)
+msgid "numerical user ID"
+msgstr "numerische Benutzer-ID"
+
+#: passwd.5.xml:87(para)
+msgid "numerical group ID"
+msgstr "numerische Gruppen-ID"
+
+#: passwd.5.xml:90(para)
+msgid "user name or comment field"
+msgstr "Benutzername oder Kommentarfeld"
+
+#: passwd.5.xml:93(para)
+msgid "user home directory"
+msgstr "Home-Verzeichnis des Benutzers"
+
+# SB: Übersetzung von "command interpreter"?
+#: passwd.5.xml:96(para)
+msgid "optional user command interpreter"
+msgstr "optional Befehlsinterpreter des Benutzers"
+
+#: passwd.5.xml:100(para)
+msgid ""
+"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."
+msgstr ""
+
+#: passwd.5.xml:109(para)
+#, fuzzy
+#| msgid ""
+#| "This field may be empty, in which case no passwords are required to "
+#| "authenticate as the specified login name. However, some applications "
+#| "which read the <filename>/etc/shadow</filename> file may decide not to "
+#| "permit any access at all if the password field is empty."
+msgid ""
+"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."
+msgstr ""
+"Dieses Feld kann leer bleiben. In diesem Fall kann sich der angegebene "
+"Benutzer ohne Passwort anmelden. Möglicherweise verweigern Anwendungen, "
+"welche die Datei <filename>/etc/shadow</filename> auswerten, dennoch den "
+"Zugang, wenn das Passwortfeld leer ist."
+
+#: passwd.5.xml:118(para)
+#, fuzzy
+#| msgid ""
+#| "A password field which starts with a exclamation mark means that the "
+#| "password is locked. The remaining characters on the line represent the "
+#| "password field before the password was locked."
+msgid ""
+"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."
+msgstr ""
+"Ein Passwortfeld, das mit einem Ausrufezeichen beginnt, führt dazu, dass das "
+"Passwort gesperrt ist. Die übrigen Zeichen sind das Passwort vor der "
+"Sperrung."
+
+#: passwd.5.xml:138(para)
+msgid ""
+"The comment field is used by various system utilities, such as "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"Das Kommentarfeld wird von verschiedenen Systemprogrammen wie z.B. "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> ausgewertet."
+
+#: passwd.5.xml:144(para)
+msgid ""
+"The home directory field provides the name of the initial working directory. "
+"The <command>login</command> program uses this information to set the value "
+"of the <envar>$HOME</envar> environmental variable."
+msgstr ""
+"Das Feld für das Home-Verzeichnis gibt den Namen für das anfängliche "
+"Arbeitsverzeichnis an. Das Programm <command>login</command> benutzt diese "
+"Information, um den Wert der Umgebungsvariable <envar>$HOME</envar> zu "
+"setzen."
+
+# SB: Übersetzung von "command language interpreter"?
+#: passwd.5.xml:150(para)
+msgid ""
+"The command interpreter field provides the name of the user's command "
+"language interpreter, or the name of the initial program to execute. The "
+"<command>login</command> program uses this information to set the value of "
+"the <envar>$SHELL</envar> environmental variable. If this field is empty, it "
+"defaults to the value <filename>/bin/sh</filename>."
+msgstr ""
+"Das Feld für den Befehlsinterpreter enthält den Namen des Befehlssprachen-"
+"Interpreters des Benutzers oder den Namen des Programms, das zuerst "
+"ausgeführt werden soll. Das Programm <command>login</command> benutzt diese "
+"Information, um den Wert der Umgebungsvariable <envar>$SHELL</envar> zu "
+"setzen. Falls dieses Feld leer ist, wird ihm standardmäßig der Wert "
+"<filename>/bin/sh</filename> zugewiesen."
+
+#: passwd.5.xml:171(para)
+msgid "optional encrypted password file"
+msgstr "optionale Datei für verschlüsseltes Passwort"
+
+#: passwd.5.xml:175(filename)
+msgid "/etc/passwd-"
+msgstr "/etc/passwd-"
+
+#: passwd.5.xml:177(para)
+msgid "Backup file for /etc/passwd."
+msgstr "Sicherungskopie von /etc/passwd"
+
+#: passwd.5.xml:189(para)
+msgid ""
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getent</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getpwnam</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwunconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getent</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getpwnam</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwunconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: passwd.1.xml:72(refpurpose)
+msgid "change user password"
+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 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 ""
+"Der Befehl <command>passwd</command> ändert die Passwörter von "
+"Benutzerkonten. Ein normaler Benutzer kann nur das Passwort seines Kontos "
+"verändern, der Superuser dagegen kann die Passwörter aller Konten ändern. "
+"Mit <command>passwd</command> können auch die Informationen über das Konto "
+"und die Gültigkeitsdauer des Passworts verändert werden."
+
+#: passwd.1.xml:98(title)
+msgid "Password Changes"
+msgstr "Verändern des Passworts"
+
+#: passwd.1.xml:99(para)
+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 ""
+"Der Benutzer wird zuerst nach seinem alten Passwort gefragt, falls eines "
+"vorhanden ist. Dieses Passwort wird dann verschlüsselt und mit dem "
+"gespeicherten Passwort verglichen. Der Benutzer hat nur eine Gelegenheit, "
+"das richtige Passwort einzugeben. Der Superuser kann diesen Schritt "
+"überspringen, um so vergessene Passwörter zu ändern."
+
+#: passwd.1.xml:107(para)
+msgid ""
+"After the password has been entered, password aging information is checked "
+"to see if the user is permitted to change the password at this time. If not, "
+"<command>passwd</command> refuses to change the password and exits."
+msgstr ""
+"Nachdem das Passwort eingegeben wurde, werden Informationen über die "
+"Gültigkeitsdauer des Passworts abgefragt, um festzustellen, ob der Benutzer "
+"das Passwort zu dieser Zeit verändern darf. Wenn nicht, lehnt "
+"<command>passwd</command> die Änderung des Passworts ab und beendet sich."
+
+#: passwd.1.xml:114(para)
+msgid ""
+"The user is then prompted twice for a replacement password. The second entry "
+"is compared against the first and both are required to match in order for "
+"the password to be changed."
+msgstr ""
+"Der Benutzer wird dann aufgefordert, zweimal ein neues Passwort einzugeben. "
+"Beide Eingaben werden miteinander verglichen. Sie müssen übereinstimmen, "
+"damit das Passwort geändert wird."
+
+#: passwd.1.xml:120(para)
+msgid ""
+"Then, the password is tested for complexity. As a general guideline, "
+"passwords should consist of 6 to 8 characters including one or more "
+"characters from each of the following sets:"
+msgstr ""
+"Anschließend wird das Passwort auf seine Komplexität überprüft. Eine "
+"allgemeine Richtlinie besagt, dass Passwörter aus sechs bis acht Zeichen "
+"bestehen sollten und ein oder mehrere Zeichen aus folgenden Mengen enthalten "
+"sollten:"
+
+#: passwd.1.xml:128(para)
+msgid "lower case alphabetics"
+msgstr "Kleinbuchstaben"
+
+#: passwd.1.xml:131(para)
+msgid "digits 0 thru 9"
+msgstr "Ziffern 0 bis 9"
+
+#: passwd.1.xml:134(para)
+msgid "punctuation marks"
+msgstr "Satzzeichen"
+
+#: passwd.1.xml:138(para)
+msgid ""
+"Care must be taken not to include the system default erase or kill "
+"characters. <command>passwd</command> will reject any password which is not "
+"suitably complex."
+msgstr ""
+"Seien Sie vorsichtig, dass Sie nicht die standardmäßigen Lösch- und Kill-"
+"Zeichen des Systems eingeben. <command>passwd</command> weist Passwörter "
+"zurück, die nicht hinreichend komplex sind."
+
+#: passwd.1.xml:147(title)
+msgid "Hints for user passwords"
+msgstr "Hinweise zu Benutzerpasswörtern"
+
+#: passwd.1.xml:148(para)
+msgid ""
+"The security of a password depends upon the strength of the encryption "
+"algorithm and the size of the key space. The legacy <emphasis>UNIX</"
+"emphasis> System encryption method is based on the NBS DES algorithm. More "
+"recent methods are now recommended (see <option>ENCRYPT_METHOD</option>). "
+"The size of the key space depends upon the randomness of the password which "
+"is selected."
+msgstr ""
+"Die Sicherheit eines Passworts hängt von der Stärke des "
+"Verschlüsselungsalgorithmus und von der Größe des Schlüsselraums ab. Die "
+"hergebrachte Verschlüsselung auf <emphasis>UNIX</emphasis>-Systemen basiert "
+"auf dem NBS-DES-Algorithmus. Heutzutage sind neuere Verschlüsselungsmethoden "
+"zu empfehlen (vergleiche <option>ENCRYPT_METHOD</option>). Die Größe des "
+"Schlüsselraums hängt von der Zufälligkeit des gewählten Passworts ab."
+
+#: passwd.1.xml:157(para)
+msgid ""
+"Compromises in password security normally result from careless password "
+"selection or handling. For this reason, you should not select a password "
+"which appears in a dictionary or which must be written down. The password "
+"should also not be a proper name, your license number, birth date, or street "
+"address. Any of these may be used as guesses to violate system security."
+msgstr ""
+"Gefahren für die Sicherheit von Passwörtern kommen gewöhnlich von sorgloser "
+"Wahl oder Handhabung des Passworts. Daher sollten Sie kein Passwort wählen, "
+"das in einem Wörterbuch auftaucht oder das aufgeschrieben werden muss. Das "
+"Passwort sollte somit kein echter Name, Ihr Autokennzeichen, Geburtstag oder "
+"Ihre Adresse sein. All das kann dazu verwendet werden, das Passwort zu "
+"erraten, und stellt daher eine Gefahr für die Sicherheit Ihres Systems dar."
+
+#: passwd.1.xml:166(para)
+#, fuzzy
+#| msgid ""
+#| "You can find advices on how to choose a strong password on http://en."
+#| "wikipedia.org/wiki/Password_strength"
+msgid ""
+"You can find advice on how to choose a strong password on http://en."
+"wikipedia.org/wiki/Password_strength"
+msgstr ""
+"Ratschläge, wie Sie ein sicheres Passwort wählen, finden Sie unter http://de."
+"wikipedia.org/wiki/Passwort#Wahl_von_sicheren_Passw.C3.B6rtern."
+
+#: passwd.1.xml:175(para)
+msgid "The options which apply to the <command>passwd</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>passwd</command> unterstützt werden, "
+"sind:"
+
+#: passwd.1.xml:180(term) faillog.8.xml:96(term)
+msgid "<option>-a</option>, <option>--all</option>"
+msgstr "<option>-a</option>, <option>--all</option>"
+
+#: passwd.1.xml:184(para)
+msgid ""
+"This option can be used only with <option>-S</option> and causes show status "
+"for all users."
+msgstr ""
+"Diese Option kann nur in Verbindung mit <option>-S</option> verwendet werden "
+"und führt dazu, dass der Status aller Benutzer angezeigt wird."
+
+#: passwd.1.xml:191(term)
+msgid "<option>-d</option>, <option>--delete</option>"
+msgstr "<option>-d</option>, <option>--delete</option>"
+
+#: passwd.1.xml:195(para)
+msgid ""
+"Delete a user's password (make it empty). This is a quick way to disable a "
+"password for an account. It will set the named account passwordless."
+msgstr ""
+"Löscht das Passwort eines Benutzers (macht es leer). Dies ist ein schneller "
+"Weg, um das Passwort eines Kontos zu deaktivieren. Dem Konto ist dann kein "
+"Passwort zugeordnet."
+
+#: passwd.1.xml:203(term)
+msgid "<option>-e</option>, <option>--expire</option>"
+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 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 "
+"muss."
+
+#: passwd.1.xml:220(term)
+msgid ""
+"<option>-i</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-i</option>, <option>--inactive</option>&nbsp;<replaceable>INAKTIV</"
+"replaceable>"
+
+#: passwd.1.xml:224(para)
+msgid ""
+"This option is used to disable an account after the password has been "
+"expired for a number of days. After a user account has had an expired "
+"password for <replaceable>INACTIVE</replaceable> days, the user may no "
+"longer sign on to the account."
+msgstr ""
+"Mit dieser Option wird ein Konto deaktiviert, nachdem das Passwort für eine "
+"bestimmte Anzahl von Tagen abgelaufen ist. Wenn ein Benutzerkonto ein "
+"abgelaufenes Passwort für länger als <replaceable>INAKTIV</replaceable> Tage "
+"hatte, kann sich der Benutzer nicht mehr auf diesem Konto anmelden."
+
+#: passwd.1.xml:233(term)
+msgid "<option>-k</option>, <option>--keep-tokens</option>"
+msgstr "<option>-k</option>, <option>--keep-tokens</option>"
+
+# FIXME: Übersetzung, die näher am Original ist (tokens). SB
+#: passwd.1.xml:237(para)
+msgid ""
+"Indicate password change should be performed only for expired authentication "
+"tokens (passwords). The user wishes to keep their non-expired tokens as "
+"before."
+msgstr ""
+"Zeigt an, dass nur abgelaufene Passwörter geändert werden sollen. Der "
+"Benutzer möchte seine gültigen Passwörter unverändert lassen."
+
+#: passwd.1.xml:245(term)
+msgid "<option>-l</option>, <option>--lock</option>"
+msgstr "<option>-l</option>, <option>--lock</option>"
+
+#: passwd.1.xml:249(para)
+msgid ""
+"Lock the password of the named account. This option disables a password by "
+"changing it to a value which matches no possible encrypted value (it adds a "
+"´!´ at the beginning of the password)."
+msgstr ""
+"Sperrt das Passwort des bezeichneten Kontos. Die Option schaltet ein "
+"Passwort ab, indem es ihm einen Wert zuweist, der mit keinem möglichen "
+"verschlüsselten Wert übereinstimmen kann. Dies geschieht, indem ein »!« dem "
+"Passwort vorangestellt wird."
+
+#: passwd.1.xml:255(para)
+msgid ""
+"Note that this does not disable the account. The user may still be able to "
+"login using another authentication token (e.g. an SSH key). To disable the "
+"account, administrators should use <command>usermod --expiredate 1</command> "
+"(this set the account's expire date to Jan 2, 1970)."
+msgstr ""
+"Beachten Sie, dass damit nicht das Konto deaktiviert wird. Der Benutzer kann "
+"sich immer noch mit einer anderen Authentifizierungsmethode (etwa einem SSH-"
+"Schlüssel) anmelden. Um ein Konto abzuschalten, sollte der Administrator "
+"<command>usermod --expiredate 1</command> verwenden; dies setzt das "
+"Verfallsdatum des Kontos auf den 2. Januar 1970."
+
+#: passwd.1.xml:262(para)
+msgid "Users with a locked password are not allowed to change their password."
+msgstr "Benutzer mit einem gesperrten Passwort können dieses nicht ändern."
+
+#: passwd.1.xml:269(term)
+msgid ""
+"<option>-n</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-n</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_TAGE</"
+"replaceable>"
+
+#: passwd.1.xml:273(para) chage.1.xml:174(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 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 "
+"von Null in diesem Feld bedeutet, dass der Benutzer sein Passwort jederzeit "
+"ändern darf."
+
+#: passwd.1.xml:291(term)
+msgid ""
+"<option>-r</option>, <option>--repository</option>&nbsp;"
+"<replaceable>REPOSITORY</replaceable>"
+msgstr ""
+"<option>-r</option>, <option>--repository</option>&nbsp;<replaceable>DEPOT</"
+"replaceable>"
+
+#: passwd.1.xml:295(para)
+msgid "change password in <replaceable>REPOSITORY</replaceable> repository"
+msgstr "ändert das Passwort im Depot <replaceable>DEPOT</replaceable>"
+
+#: passwd.1.xml:313(term)
+msgid "<option>-S</option>, <option>--status</option>"
+msgstr "<option>-S</option>, <option>--status</option>"
+
+#: passwd.1.xml:317(para)
+msgid ""
+"Display account status information. The status information consists of 7 "
+"fields. The first field is the user's login name. The second field indicates "
+"if the user account has a locked password (L), has no password (NP), or has "
+"a usable password (P). The third field gives the date of the last password "
+"change. The next four fields are the minimum age, maximum age, warning "
+"period, and inactivity period for the password. These ages are expressed in "
+"days."
+msgstr ""
+"Zeigt Informationen über den Kontostatus an. Die Statusinformation besteht "
+"aus sieben Feldern. Das erste Feld ist der Anmeldename des Benutzers. Das "
+"zweite Feld zeigt an, ob das Benutzerkonto ein gesperrtes Passwort (L), kein "
+"Passwort (NP) oder ein verwendbares Passwort hat (P). Das dritte Feld zeigt "
+"das Datum der letzten Änderung des Passworts an. Die nächsten vier Felder "
+"sind das Mindestalter, das Höchstalter, die Dauer der Warnung und die Dauer "
+"der Untätigkeit für das Passwort. Die Zeiträume werden in Tagen ausgedrückt."
+
+#: passwd.1.xml:331(term)
+msgid "<option>-u</option>, <option>--unlock</option>"
+msgstr "<option>-u</option>, <option>--unlock</option>"
+
+#: passwd.1.xml:335(para)
+msgid ""
+"Unlock the password of the named account. This option re-enables a password "
+"by changing the password back to its previous value (to the value before "
+"using the <option>-l</option> option)."
+msgstr ""
+"Entsperrt das bezeichnete Konto. Diese Option reaktiviert ein Konto wieder, "
+"indem das Passwort auf seinen alten Wert zurückgesetzt wird, den es hatte, "
+"bevor die Option <option>-l</option> verwendet wurde."
+
+#: passwd.1.xml:344(term)
+msgid ""
+"<option>-w</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>WARN_DAYS</replaceable>"
+msgstr ""
+"<option>-w</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>WARN_TAGE</replaceable>"
+
+#: 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 their password is "
+"about to expire."
+msgstr ""
+"Legt die Anzahl der Tage fest, an denen der Benutzer eine Warnung erhält, "
+"bevor sein Passwort ungültig wird. Die Option <replaceable>WARN_TAGE</"
+"replaceable> bezeichnet die Anzahl der Tage, für die ein Benutzer vor "
+"Verfall seines Passworts gewarnt wird."
+
+#: passwd.1.xml:357(term)
+msgid ""
+"<option>-x</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-x</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_TAGE</"
+"replaceable>"
+
+#: passwd.1.xml:361(para)
+msgid ""
+"Set the maximum number of days a password remains valid. After "
+"<replaceable>MAX_DAYS</replaceable>, the password is required to be changed."
+msgstr ""
+"Bestimmt die maximale Anzahl von Tagen, die das Passwort gültig bleibt. Nach "
+"<replaceable>MAX_TAGE</replaceable> Tagen muss das Passwort geändert werden."
+
+#: passwd.1.xml:366(para) chage.1.xml:195(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as "
+"<replaceable>MAX_DAYS</replaceable> will remove checking a password's "
+"validity."
+msgstr ""
+"Wenn <emphasis remap=\"I\">-1</emphasis> als <replaceable>MAX_TAGE</"
+"replaceable> angegeben wird, wird der Passwortverfall entfernt."
+
+#: passwd.1.xml:378(para)
+msgid ""
+"Password complexity checking may vary from site to site. The user is urged "
+"to select a password as complex as he or she feels comfortable with."
+msgstr ""
+"Die Komplexität der Passwortprüfung kann sich auf verschiedenen Systemen "
+"unterscheiden. Der Benutzer wird angehalten, ein möglichst komplexes, von "
+"ihm aber gut zu verwendendes Passwort zu wählen."
+
+#: passwd.1.xml:383(para)
+msgid ""
+"Users may not be able to change their password on a system if NIS is enabled "
+"and they are not logged into the NIS server."
+msgstr ""
+"Benutzer können unter Umständen ihr Passwort nicht ändern, wenn auf dem "
+"System NIS aktiviert ist, sie aber nicht am NIS-Server angemeldet sind."
+
+#: passwd.1.xml:388(para)
+msgid ""
+"<command>passwd</command> uses PAM to authenticate users and to change their "
+"passwords."
+msgstr ""
+"<command>passwd</command> verwendet PAM, um einen Benutzer zu "
+"authentifizieren und sein Passwort zu ändern."
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>ENCRYPT_METHOD</option> (string)"
+msgstr "<option>ENCRYPT_METHOD</option> (Zeichenkette)"
+
+#: passwd.1.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: gpasswd.1.xml:32(para) chpasswd.8.xml:32(para) chgpasswd.8.xml:32(para)
+msgid ""
+"This defines the system default encryption algorithm for encrypting "
+"passwords (if no algorithm are specified on the command line)."
+msgstr ""
+"Damit wird der standardmäßige Verschlüsselungsalgorithmus, mit dem "
+"Passwörter verschlüsselt werden, bestimmt (soweit nicht in der Befehlszeile "
+"ein Algorithmus angegeben wird)."
+
+#: passwd.1.xml:36(para) newusers.8.xml:36(para) login.defs.5.xml:36(para)
+#: gpasswd.1.xml:36(para) chpasswd.8.xml:36(para) chgpasswd.8.xml:36(para)
+msgid ""
+"It can take one of these values: <replaceable>DES</replaceable> (default), "
+"<replaceable>MD5</replaceable><phrase condition=\"sha_crypt\">, "
+"<replaceable>SHA256</replaceable>, <replaceable>SHA512</replaceable></"
+"phrase>."
+msgstr ""
+"Ihm kann einer der folgenden Wert zugewiesen werden: <replaceable>DES</"
+"replaceable> (default), <replaceable>MD5</replaceable><phrase condition="
+"\"sha_crypt\">, <replaceable>SHA256</replaceable>, <replaceable>SHA512</"
+"replaceable></phrase>."
+
+#: passwd.1.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: gpasswd.1.xml:43(para) chpasswd.8.xml:43(para) chgpasswd.8.xml:43(para)
+msgid ""
+"Note: this parameter overrides the <option>MD5_CRYPT_ENAB</option> variable."
+msgstr ""
+"Hinweis: Dieser Parameter überschreibt die Variable <option>MD5_CRYPT_ENAB</"
+"option>."
+
+#: passwd.1.xml:47(para) passwd.1.xml:53(para) passwd.1.xml:62(para)
+#: newusers.8.xml:47(para) newusers.8.xml:53(para) newusers.8.xml:62(para)
+#: login.defs.5.xml:47(para) login.defs.5.xml:53(para)
+#: login.defs.5.xml:62(para) gpasswd.1.xml:47(para) gpasswd.1.xml:53(para)
+#: gpasswd.1.xml:62(para) chpasswd.8.xml:47(para) chpasswd.8.xml:53(para)
+#: chpasswd.8.xml:62(para) chgpasswd.8.xml:47(para) chgpasswd.8.xml:53(para)
+#: chgpasswd.8.xml:62(para)
+msgid ""
+"Note: This only affect the generation of group passwords. The generation of "
+"user passwords is done by PAM and subject to the PAM configuration. It is "
+"recommended to set this variable consistently with the PAM configuration."
+msgstr ""
+"Hinweis: Damit wird lediglich die Erstellung von Gruppenpasswörtern "
+"beeinflusst. Benutzerpasswörter werden dagegen von PAM erstellt, so dass "
+"dieser Vorgang in PAM konfiguriert werden muss. Empfehlenswert ist, diese "
+"Variable mit der Konfiguration von PAM in Einklang zu bringen."
+
+#: passwd.1.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: gpasswd.1.xml:32(term) chpasswd.8.xml:32(term) chgpasswd.8.xml:32(term)
+msgid "<option>MD5_CRYPT_ENAB</option> (boolean)"
+msgstr "<option>MD5_CRYPT_ENAB</option> (boolesch)"
+
+#: passwd.1.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: gpasswd.1.xml:34(para) chpasswd.8.xml:34(para) chgpasswd.8.xml:34(para)
+msgid ""
+"Indicate if passwords must be encrypted using the MD5-based algorithm. If "
+"set to <replaceable>yes</replaceable>, new passwords will be encrypted using "
+"the MD5-based algorithm compatible with the one used by recent releases of "
+"FreeBSD. It supports passwords of unlimited length and longer salt strings. "
+"Set to <replaceable>no</replaceable> if you need to copy encrypted passwords "
+"to other systems which don't understand the new algorithm. Default is "
+"<replaceable>no</replaceable>."
+msgstr ""
+"Legt fest, ob Passwörter mit dem auf MD5 beruhenden Algorithmus "
+"verschlüsselt werden. Falls diesem Wert <replaceable>yes</replaceable> "
+"zugewiesen ist, werden neue Passwörter mit dem auf MD5 beruhenden "
+"Algorithmus verschlüsselt, der zu dem in der aktuellen Veröffentlichung von "
+"FreeBSD eingesetzten Algorithmus kompatibel ist. Passwörter können dann "
+"beliebig lang sein, auch die Salt-Zeichenketten sind länger. Setzen Sie "
+"diesen Wert auf <replaceable>no</replaceable>, wenn Sie verschlüsselte "
+"Passwörter auf ein anderes System kopieren möchten, das den neuen "
+"Algorithmus nicht versteht. Der Standardwert ist <replaceable>no</"
+"replaceable>."
+
+#: passwd.1.xml:44(para) newusers.8.xml:44(para) login.defs.5.xml:44(para)
+#: gpasswd.1.xml:44(para) chpasswd.8.xml:44(para) chgpasswd.8.xml:44(para)
+msgid ""
+"This variable is superseded by the <option>ENCRYPT_METHOD</option> variable "
+"or by any command line option used to configure the encryption algorithm."
+msgstr ""
+"Dieser Variable geht die Variable <option>ENCRYPT_METHOD</option> und eine "
+"Option auf der Befehlszeile, mit der der Verschlüsselungsalgorithmus "
+"bestimmt wird, vor."
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid ""
+"This variable is deprecated. You should use <option>ENCRYPT_METHOD</option>."
+msgstr ""
+"Der Einsatz dieser Variable ist veraltet. Sie sollten "
+"<option>ENCRYPT_METHOD</option> verwenden."
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>OBSCURE_CHECKS_ENAB</option> (boolean)"
+msgstr "<option>OBSCURE_CHECKS_ENAB</option> (boolesch)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable additional checks upon password changes."
+msgstr "Aktiviert zusätzliche Tests bei der Veränderung eines Passworts."
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_ALWAYS_WARN</option> (boolean)"
+msgstr "<option>PASS_ALWAYS_WARN</option> (boolesch)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Warn about weak passwords (but still allow them) if you are root."
+msgstr ""
+"weist auf schwache Passwörter hin (aber lässt sie zu), falls Sie root sind"
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_CHANGE_TRIES</option> (number)"
+msgstr "<option>PASS_CHANGE_TRIES</option> (Zahl)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Maximum number of attempts to change password if rejected (too easy)."
+msgstr ""
+"maximale Anzahl von Versuchen, ein Passwort zu ändern, wenn dies wegen zu "
+"geringer Stärke des gewählten Passworts abgelehnt wurde"
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_MAX_LEN</option> (number)"
+msgstr "<option>PASS_MAX_LEN</option> (Zahl)"
+
+#: passwd.1.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>PASS_MIN_LEN</option> (number)"
+msgstr "<option>PASS_MIN_LEN</option> (Zahl)"
+
+#: passwd.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"Number of significant characters in the password for crypt(). "
+"<option>PASS_MAX_LEN</option> is 8 by default. Don't change unless your "
+"crypt() is better. This is ignored if <option>MD5_CRYPT_ENAB</option> set to "
+"<replaceable>yes</replaceable>."
+msgstr ""
+"Anzahl der von crypt() berücksichtigten Zeichen des Passworts. Standardmäßig "
+"ist <option>PASS_MAX_LEN</option> 8. Diese Option wird ignoriert, wenn "
+"<option>MD5_CRYPT_ENAB</option> auf <replaceable>yes</replaceable> gesetzt "
+"ist."
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>SHA_CRYPT_MIN_ROUNDS</option> (number)"
+msgstr "<option>SHA_CRYPT_MIN_ROUNDS</option> (Zahl)"
+
+#: passwd.1.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: gpasswd.1.xml:31(term) chpasswd.8.xml:31(term) chgpasswd.8.xml:31(term)
+msgid "<option>SHA_CRYPT_MAX_ROUNDS</option> (number)"
+msgstr "<option>SHA_CRYPT_MAX_ROUNDS</option> (Zahl)"
+
+#: passwd.1.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: gpasswd.1.xml:33(para) chpasswd.8.xml:33(para) chgpasswd.8.xml:33(para)
+msgid ""
+"When <option>ENCRYPT_METHOD</option> is set to <replaceable>SHA256</"
+"replaceable> or <replaceable>SHA512</replaceable>, this defines the number "
+"of SHA rounds used by the encryption algorithm by default (when the number "
+"of rounds is not specified on the command line)."
+msgstr ""
+"Wenn <option>ENCRYPT_METHOD</option> auf <replaceable>SHA256</replaceable> "
+"oder <replaceable>SHA512</replaceable> gesetzt ist, legt dies die Anzahl der "
+"Runden von SHA fest, die standardmäßig vom Verschlüsselungsalgorithmus "
+"verwendet werden (falls die Anzahl der Runden nicht auf der Befehlszeile "
+"angegeben wird)."
+
+#: passwd.1.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: gpasswd.1.xml:40(para) chpasswd.8.xml:40(para) chgpasswd.8.xml:40(para)
+msgid ""
+"With a lot of rounds, it is more difficult to brute forcing the password. "
+"But note also that more CPU resources will be needed to authenticate users."
+msgstr ""
+"Je mehr Runden Sie definieren, umso schwieriger ist es, das Passwort mit "
+"sturem Durchprobieren (brute force) zu knacken; umso mehr Rechenleistung "
+"wird jedoch auch für die Anmeldung eines Benutzers benötigt."
+
+#: passwd.1.xml:45(para) newusers.8.xml:45(para) login.defs.5.xml:45(para)
+#: gpasswd.1.xml:45(para) chpasswd.8.xml:45(para) chgpasswd.8.xml:45(para)
+msgid ""
+"If not specified, the libc will choose the default number of rounds (5000)."
+msgstr ""
+"Falls Sie nichts angeben, wird libc die Standardanzahl der Runden festlegen "
+"(5000)."
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid "The values must be inside the 1000-999,999,999 range."
+msgstr "Die Werte müssen zwischen 1000-999.999.999 liegen."
+
+#: passwd.1.xml:52(para) newusers.8.xml:52(para) login.defs.5.xml:52(para)
+#: gpasswd.1.xml:52(para) chpasswd.8.xml:52(para) chgpasswd.8.xml:52(para)
+msgid ""
+"If only one of the <option>SHA_CRYPT_MIN_ROUNDS</option> or "
+"<option>SHA_CRYPT_MAX_ROUNDS</option> values is set, then this value will be "
+"used."
+msgstr ""
+"Falls nur der Wert für <option>SHA_CRYPT_MIN_ROUNDS</option> oder "
+"<option>SHA_CRYPT_MAX_ROUNDS</option> festgelegt wird, wird dieser Wert "
+"verwendet."
+
+#: passwd.1.xml:57(para) newusers.8.xml:57(para) login.defs.5.xml:57(para)
+#: gpasswd.1.xml:57(para) chpasswd.8.xml:57(para) chgpasswd.8.xml:57(para)
+msgid ""
+"If <option>SHA_CRYPT_MIN_ROUNDS</option> &gt; <option>SHA_CRYPT_MAX_ROUNDS</"
+"option>, the highest value will be used."
+msgstr ""
+"Falls <option>SHA_CRYPT_MIN_ROUNDS</option> &gt; "
+"<option>SHA_CRYPT_MAX_ROUNDS</option>, wird der höhere Wert verwendet."
+
+#: passwd.1.xml:434(filename)
+msgid "/etc/pam.d/passwd"
+msgstr "/etc/pam.d/passwd"
+
+#: passwd.1.xml:436(para)
+msgid "PAM configuration for <command>passwd</command>."
+msgstr "PAM-Konfiguration für <command>passwd</command>"
+
+#: passwd.1.xml:456(para) chage.1.xml:297(para)
+msgid "permission denied"
+msgstr "Berechtigung verweigert"
+
+#: passwd.1.xml:462(para)
+msgid "invalid combination of options"
+msgstr "ungültige Kombination von Optionen"
+
+#: passwd.1.xml:468(para)
+msgid "unexpected failure, nothing done"
+msgstr "unerwarteter Fehler, nichts wurde verändert"
+
+#: passwd.1.xml:474(para)
+msgid "unexpected failure, <filename>passwd</filename> file missing"
+msgstr "unerwarteter Fehler, die Datei <filename>passwd</filename> fehlt"
+
+#: passwd.1.xml:480(para)
+msgid "<filename>passwd</filename> file busy, try again"
+msgstr ""
+"Datei <filename>passwd</filename> wird benutzt, bitte nochmal versuchen"
+
+#: passwd.1.xml:444(para)
+msgid ""
+"The <command>passwd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Der Befehl <command>passwd</command> gibt beim Beenden folgende Werte "
+"zurück: <placeholder-1/>"
+
+#: passwd.1.xml:495(para)
+msgid ""
+"<citerefentry><refentrytitle>chpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <phrase condition=\"no_pam"
+"\"><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <phrase condition=\"no_pam"
+"\"><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: nologin.8.xml:46(refentrytitle) nologin.8.xml:53(refname)
+#: nologin.8.xml:59(command)
+msgid "nologin"
+msgstr "nologin"
+
+#: nologin.8.xml:54(refpurpose)
+msgid "politely refuse a login"
+msgstr "lehnt höflich eine Anmeldung ab"
+
+#: nologin.8.xml:65(para)
+msgid ""
+"The <command>nologin</command> command displays a message that an account is "
+"not available and exits non-zero. It is intended as a replacement shell "
+"field for accounts that have been disabled."
+msgstr ""
+"Der Befehl <command>nologin</command> zeigt die Meldung an, dass ein Konto "
+"nicht verfügbar ist, und gibt einen Wert von ungleich Null zurück. Dies ist "
+"als Einsatz für das Shell-Feld bei abgeschalteten Konten vorgesehen."
+
+#: nologin.8.xml:70(para)
+msgid ""
+"To disable all logins, investigate <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"Wie Sie alle Konten abschalten, erfahren Sie unter "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+
+#: nologin.8.xml:75(para)
+msgid ""
+"If <command>SSH_ORIGINAL_COMMAND</command> is populated it will be logged."
+msgstr ""
+
+#: nologin.8.xml:82(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: nologin.8.xml:93(title)
+msgid "HISTORY"
+msgstr "GESCHICHTE"
+
+#: nologin.8.xml:94(para)
+#, fuzzy
+#| msgid "The <command>nologin</command> command appearred in BSD 4.4."
+msgid "The <command>nologin</command> command appeared in BSD 4.4."
+msgstr "Der Befehl <command>nologin</command> tauchte erstmals in BSD 4.4 auf."
+
+#: newusers.8.xml:73(refentrytitle) newusers.8.xml:80(refname)
+#: newusers.8.xml:86(command) login.defs.5.xml:400(term)
+msgid "newusers"
+msgstr "newusers"
+
+#: newusers.8.xml:81(refpurpose)
+msgid "update and create new users in batch"
+msgstr "erstellt oder aktualisiert mehrere neue Benutzer am Stück"
+
+#: newusers.8.xml:91(replaceable)
+msgid "file"
+msgstr "Datei"
+
+#: newusers.8.xml:98(para)
+msgid ""
+"The <command>newusers</command> command reads a <replaceable>file</"
+"replaceable> (or the standard input by default) and uses this information to "
+"update a set of existing users or to create new users. Each line is in the "
+"same format as the standard password file (see "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>) with the exceptions explained below:"
+msgstr ""
+"Der Befehl <command>newusers</command> verwendet eine <replaceable>Datei</"
+"replaceable> (oder standardmäßig die Standardeingabe) und aktualisiert damit "
+"eine Gruppe bestehender Benutzer oder erstellt damit neue Benutzer. Jede "
+"Zeile hat dasselbe Format wie die übliche Passwortdatei (vergleiche "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>) mit den unten aufgeführten Ausnahmen:"
+
+#: newusers.8.xml:106(para)
+msgid "pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell"
+msgstr "pw_Name:pw_Passwort:pw_uid:pw_gid:pw_gecos:pw_Verz:pw_shell"
+
+#: newusers.8.xml:111(emphasis)
+msgid "pw_name"
+msgstr "pw_Name"
+
+#: newusers.8.xml:114(para)
+msgid "This is the name of the user."
+msgstr "Dies ist der Name des Benutzers."
+
+#: newusers.8.xml:117(para)
+#, fuzzy
+#| msgid ""
+#| "It can be the name of a new user or the name of an existing user (or an "
+#| "user created before by <command>newusers</command>). In case of an "
+#| "existing user, the user's information will be changed, otherwise a new "
+#| "user will be created."
+msgid ""
+"It can be the name of a new user or the name of an existing user (or a user "
+"created before by <command>newusers</command>). In case of an existing user, "
+"the user's information will be changed, otherwise a new user will be created."
+msgstr ""
+"Es kann sich dabei um den Namen eines neuen oder eines existierenden "
+"Benutzer (oder eines, der zuvor mit <command>newusers</command> erstellt "
+"wurde) handeln. Für den Fall, dass der Benutzer bereits vorhanden ist, "
+"werden seine Daten verändert, anderenfalls wird ein neuer Benutzer erstellt."
+
+#: newusers.8.xml:128(emphasis)
+msgid "pw_passwd"
+msgstr "pw_Passwort"
+
+#: newusers.8.xml:131(para)
+msgid ""
+"This field will be encrypted and used as the new value of the encrypted "
+"password."
+msgstr ""
+"Dieses Feld wird verschlüsselt und als neuer Wert für das verschlüsselte "
+"Passwort verwendet."
+
+#: newusers.8.xml:139(emphasis)
+msgid "pw_uid"
+msgstr "pw_uid"
+
+#: newusers.8.xml:142(para)
+msgid "This field is used to define the UID of the user."
+msgstr "Mit diesem Feld wird die UID des Benutzers bestimmt."
+
+#: newusers.8.xml:145(para)
+#, fuzzy
+#| msgid ""
+#| "If the field is empty, an new (unused) UID will be defined automatically "
+#| "by <command>newusers</command>."
+msgid ""
+"If the field is empty, a new (unused) UID will be defined automatically by "
+"<command>newusers</command>."
+msgstr ""
+"Wenn dieses Feld leer ist, wird von <command>newusers</command> automatisch "
+"eine neue (noch freie) UID gewählt."
+
+#: newusers.8.xml:149(para)
+msgid "If this field contains a number, this number will be used as the UID."
+msgstr "Wenn dieses Feld eine Zahl enthält, wird sie als UID verwendet."
+
+#: newusers.8.xml:153(para)
+#, fuzzy
+#| msgid ""
+#| "If this field contains the name of an existing user (or the name of an "
+#| "user created before by <command>newusers</command>), the UID of the "
+#| "specified user will be used."
+msgid ""
+"If this field contains the name of an existing user (or the name of a user "
+"created before by <command>newusers</command>), the UID of the specified "
+"user will be used."
+msgstr ""
+"Wenn dieses Feld den Namen eines existierenden Benutzers enthält (oder eines "
+"Benutzers, der zuvor mit <command>newusers</command> erstellt wurde), wird "
+"die UID des angegebenen Benutzers verwendet."
+
+#: newusers.8.xml:159(para)
+msgid ""
+"If the UID of an existing user is changed, the files ownership of the user's "
+"file should be fixed manually."
+msgstr ""
+"Falls die UID eines bestehenden Benutzers verändert wird, muss der "
+"Eigentümer der Dateien des Benutzers per Hand angepasst werden."
+
+#: newusers.8.xml:167(emphasis)
+msgid "pw_gid"
+msgstr "pw_gid"
+
+#: newusers.8.xml:170(para)
+msgid "This field is used to define the primary group ID for the user."
+msgstr "Mit diesem Feld wird die ID der Hauptgruppe des Benutzers definiert."
+
+#: newusers.8.xml:173(para)
+msgid ""
+"If this field contains the name of an existing group (or a group created "
+"before by <command>newusers</command>), the GID of this group will be used "
+"as the primary group ID for the user."
+msgstr ""
+"Wenn dieses Feld den Namen einer existierenden Gruppe enthält (oder einer "
+"Gruppe, die zuvor mit <command>newusers</command> erstellt wurde), wird die "
+"GID dieser Gruppe als ID der Hauptgruppe des Benutzers verwendet."
+
+#: newusers.8.xml:179(para)
+msgid ""
+"If this field is a number, this number will be used as the primary group ID "
+"of the user. If no groups exist with this GID, a new group will be created "
+"with this GID, and the name of the user."
+msgstr ""
+"Wenn dieses Feld eine Zahl enthält, wird sie als ID der Hauptgruppe des "
+"Benutzers verwendet. Falls eine Gruppe mit dieser GID nicht existiert, wird "
+"eine neue Gruppe mit dieser GID unter dem Namen des Benutzers erstellt."
+
+#: newusers.8.xml:185(para)
+msgid ""
+"If this field is empty, a new group will be created with the name of the "
+"user and a GID will be automatically defined by <command>newusers</command> "
+"to be used as the primary group ID for the user and as the GID for the new "
+"group."
+msgstr ""
+"Wenn dieses Feld leer ist, wird eine neue Gruppe unter dem Namen des "
+"Benutzers erstellt und von <command>newusers</command> automatisch eine neue "
+"GID gewählt, die als ID der Hauptgruppe des Benutzers und als GID für die "
+"neue Gruppe dient."
+
+#: newusers.8.xml:191(para)
+msgid ""
+"If this field contains the name of a group which does not exist (and was not "
+"created before by <command>newusers</command>), a new group will be created "
+"with the specified name and a GID will be automatically defined by "
+"<command>newusers</command> to be used as the primary group ID for the user "
+"and GID for the new group."
+msgstr ""
+"Wenn dieses Feld den Namen einer Gruppe enthält, die nicht vorhanden ist "
+"(und nicht zuvor von <command>newusers</command> erstellt wurde), wird eine "
+"neue Gruppe unter dem angegebenen Namen erstellt und von <command>newusers</"
+"command> automatisch eine neue GID gewählt, die als ID der Hauptgruppe des "
+"Benutzers und als GID für die neue Gruppe dient."
+
+#: newusers.8.xml:203(emphasis)
+msgid "pw_gecos"
+msgstr "pw_gecos"
+
+#: newusers.8.xml:206(para)
+msgid "This field is copied in the GECOS field of the user."
+msgstr "Dieses Feld wird in das GECOS-Feld des Benutzers kopiert."
+
+#: newusers.8.xml:213(emphasis)
+msgid "pw_dir"
+msgstr "pw_Verz"
+
+#: newusers.8.xml:216(para)
+msgid "This field is used to define the home directory of the user."
+msgstr "Mit diesem Feld wird das Home-Verzeichnis des Benutzers definiert."
+
+#: newusers.8.xml:219(para)
+msgid ""
+"If this field does not specify an existing directory, the specified "
+"directory is created, with ownership set to the user being created or "
+"updated and its primary group."
+msgstr ""
+"Wenn in diesem Feld ein Verzeichnis angegeben wird, das nicht vorhanden ist, "
+"wird es erstellt. Dieses gehört dem Benutzer, der gerade erstellt und "
+"aktualisiert wird, und dessen Hauptgruppe."
+
+#: newusers.8.xml:224(para)
+msgid ""
+"If the home directory of an existing user is changed, <command>newusers</"
+"command> does not move or copy the content of the old directory to the new "
+"location. This should be done manually."
+msgstr ""
+"Wenn das Home-Verzeichnis eines vorhandenen Benutzers geändert wird, "
+"verschiebt oder kopiert <command>newusers</command> nicht den Inhalt des "
+"alten Verzeichnisses in das neue. Dies muss von Hand erledigt werden."
+
+#: newusers.8.xml:234(emphasis)
+msgid "pw_shell"
+msgstr "pw_shell"
+
+#: newusers.8.xml:237(para)
+msgid ""
+"This field defines the shell of the user. No checks are performed on this "
+"field."
+msgstr ""
+"Mit diesem Feld wird die Shell des Benutzers definiert. Diese Eingabe wird "
+"nicht überprüft."
+
+#: newusers.8.xml:245(para)
+msgid ""
+"<command>newusers</command> first tries to create or change all the "
+"specified users, and then write these changes to the user or group "
+"databases. If an error occurs (except in the final writes to the databases), "
+"no changes are committed to the databases."
+msgstr ""
+"Zuerst erstellt und ändert <command>newusers</command> die angegebenen "
+"Benutzer und schreibt die Änderungen in die Benutzer- oder Gruppendatenbank. "
+"Falls ein Fehler auftritt (außer beim Schreiben in die Datenbanken), werden "
+"in den Datenbanken keine Änderungen vorgenommen."
+
+#: newusers.8.xml:251(para)
+msgid ""
+"During this first pass, users are created with a locked password (and "
+"passwords are not changed for the users which are not created). A second "
+"pass is used to update the passwords using PAM. Failures to update a "
+"password are reported, but will not stop the other password updates."
+msgstr ""
+"Im ersten Durchlauf werden Benutzer mit einem gesperrten Passwort erstellt; "
+"Passwörter von bereits vorhandenen Benutzern werden in diesem Stadium nicht "
+"verändert. Im zweiten Durchlauf werden die Passwörter mit PAM aktualisiert. "
+"Sofern dabei ein Fehler auftritt, wird dieser angezeigt, die Aktualisierung "
+"der übrigen Passwörter aber fortgesetzt."
+
+#: newusers.8.xml:259(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are updated at a single time."
+msgstr ""
+"Dieser Befehl ist für den Einsatz in einer Umgebung mit zahlreichen Systemen "
+"vorgesehen, in der viele Konten gleichzeitig aktualisiert werden müssen."
+
+#: newusers.8.xml:267(para)
+msgid "The options which apply to the <command>newusers</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>newusers</command> unterstützt werden, "
+"sind:"
+
+#: newusers.8.xml:284(term) chgpasswd.8.xml:112(term)
+msgid "<option>-c</option>, <option>--crypt-method</option>"
+msgstr "<option>-c</option>, <option>--crypt-method</option>"
+
+#: newusers.8.xml:286(para) chpasswd.8.xml:141(para) chgpasswd.8.xml:114(para)
+msgid "Use the specified method to encrypt the passwords."
+msgstr "Definiert die Methode, mit der die Passwörter verschlüsselt werden."
+
+#: newusers.8.xml:287(para) chpasswd.8.xml:145(para) chgpasswd.8.xml:118(para)
+msgid ""
+"The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc "
+"support these methods."
+msgstr ""
+"Die verfügbaren Methoden sind DES, MD5, NONE und SHA256 oder SHA512, soweit "
+"Ihre libc sie unterstützt."
+
+#: newusers.8.xml:309(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are chosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+"Systembenutzer werden ohne Hinterlegung des Alters ihres Passworts in "
+"<filename>/etc/shadow</filename> erstellt. Ihre numerische Kennung wird aus "
+"der Spanne <option>SYS_UID_MIN</option> bis <option>SYS_UID_MAX</option> "
+"anstelle von <option>UID_MIN</option> bis <option>UID_MAX</option> gewählt "
+"(gleiches gilt für die GID bei der Erstellung von Gruppen)."
+
+#: newusers.8.xml:335(term) chgpasswd.8.xml:158(term)
+msgid "<option>-s</option>, <option>--sha-rounds</option>"
+msgstr "<option>-s</option>, <option>--sha-rounds</option>"
+
+#: newusers.8.xml:337(para) chpasswd.8.xml:204(para) chgpasswd.8.xml:160(para)
+msgid "Use the specified number of rounds to encrypt the passwords."
+msgstr ""
+"Verwendet die angegebene Anzahl von Runden, um die Passwörter zu "
+"verschlüsseln."
+
+#: newusers.8.xml:340(para) chpasswd.8.xml:207(para) chgpasswd.8.xml:163(para)
+msgid ""
+"The value 0 means that the system will choose the default number of rounds "
+"for the crypt method (5000)."
+msgstr ""
+"Ein Wert von 0 bedeutet, dass das System die Standardanzahl der Runden "
+"(5000) für die Verschlüsselung verwenden wird."
+
+#: newusers.8.xml:344(para) chpasswd.8.xml:211(para) chgpasswd.8.xml:167(para)
+msgid ""
+"A minimal value of 1000 and a maximal value of 999,999,999 will be enforced."
+msgstr "Der Mindestwert ist 1000, der Höchstwert 999.999.999."
+
+#: newusers.8.xml:348(para) chpasswd.8.xml:215(para) chgpasswd.8.xml:171(para)
+msgid "You can only use this option with the SHA256 or SHA512 crypt method."
+msgstr ""
+"Sie können diese Option nur mit den Verschlüsselungsmethoden SHA256 und "
+"SHA512 verwenden."
+
+#: newusers.8.xml:352(para) chgpasswd.8.xml:175(para)
+msgid ""
+"By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and "
+"SHA_CRYPT_MAX_ROUNDS variables in <filename>/etc/login.defs</filename>."
+msgstr ""
+"Standardmäßig wird die Anzahl der Runden mit den Variablen "
+"SHA_CRYPT_MIN_ROUNDS und SHA_CRYPT_MAX_ROUNDS in <filename>/etc/login.defs</"
+"filename> definiert."
+
+#: newusers.8.xml:364(para)
+msgid ""
+"The input file must be protected since it contains unencrypted passwords."
+msgstr ""
+"Die Eingabedatei muss geschützt werden, da sie unverschlüsselte Passwörter "
+"enthält."
+
+#: newusers.8.xml:368(para) chgpasswd.8.xml:191(para)
+msgid ""
+"You should make sure the passwords and the encryption method respect the "
+"system's password policy."
+msgstr ""
+"Sie sollten darauf achten, dass Passwörter und Verschlüsselungsmethode in "
+"Einklage mit der Passwortrichtlinie des Systems stehen."
+
+#: newusers.8.xml:444(filename)
+msgid "/etc/pam.d/newusers"
+msgstr "/etc/pam.d/newusers"
+
+#: newusers.8.xml:446(para)
+msgid "PAM configuration for <command>newusers</command>."
+msgstr "Konfiguration von PAM für <command>newusers</command>."
+
+#: newusers.8.xml:466(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>grpck</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, <phrase condition="
+"\"subids\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: newgrp.1.xml:58(refentrytitle) newgrp.1.xml:65(refname)
+#: newgrp.1.xml:71(command)
+msgid "newgrp"
+msgstr "newgrp"
+
+#: newgrp.1.xml:66(refpurpose)
+msgid "log in to a new group"
+msgstr "als neue Gruppe anmelden"
+
+#: newgrp.1.xml:72(replaceable) grpck.8.xml:74(replaceable)
+#: groupadd.8.xml:78(replaceable) gpasswd.1.xml:88(replaceable)
+msgid "group"
+msgstr "Gruppe"
+
+#: newgrp.1.xml:78(para)
+msgid ""
+"The <command>newgrp</command> command is used to change the current group ID "
+"during a login session. If the optional <option>-</option> flag is given, "
+"the user's environment will be reinitialized as though the user had logged "
+"in, otherwise the current environment, including current working directory, "
+"remains unchanged."
+msgstr ""
+"Mit dem Befehl <command>newgrp</command> kann während einer angemeldeten "
+"Sitzung die aktuelle Gruppen-ID geändert werden. Wenn zusätzlich der "
+"Schalter <option>-</option> angegeben wird, wird die Benutzerumgebung neu "
+"gestartet, so als ob sich der Benutzer neu angemeldet hätte. Anderenfalls "
+"bleibt die aktuelle Umgebung einschließlich des aktuellen "
+"Arbeitsverzeichnisses unverändert."
+
+#: newgrp.1.xml:86(para)
+msgid ""
+"<command>newgrp</command> changes the current real group ID to the named "
+"group, or to the default group listed in <filename>/etc/passwd</filename> if "
+"no group name is given. <command>newgrp</command> also tries to add the "
+"group to the user groupset. If not root, the user will be prompted for a "
+"password if she does not have a password (in <filename>/etc/shadow</"
+"filename> if this user has an entry in the shadowed password file, or in "
+"<filename>/etc/passwd</filename> otherwise) and the group does, or if the "
+"user is not listed as a member and the group has a password. The user will "
+"be denied access if the group password is empty and the user is not listed "
+"as a member."
+msgstr ""
+"<command>newgrp</command> wechselt von der aktuellen echten Gruppen-ID zu "
+"der angegeben Gruppe oder, falls kein Gruppenname angegeben wird, zu der "
+"Standardgruppe, wie sie in <filename>/etc/passwd</filename> festgelegt ist. "
+"Zudem versucht <command>newgrp</command>, die Gruppe der Gruppensammlung des "
+"Benutzers hinzuzufügen. Wenn der Benutzer nicht Root ist und die Gruppe ein "
+"Passwort hat und der Benutzer nicht Mitglied der Gruppe ist oder kein "
+"Passwort hat (in <filename>/etc/shadow</filename>, falls er einen Eintrag in "
+"der Shadow-Passwort-Datei hat, anderenfalls in <filename>/etc/passwd</"
+"filename>), wird er nach einem Passwort gefragt."
+
+#: newgrp.1.xml:100(para)
+msgid ""
+"If there is an entry for this group in <filename>/etc/gshadow</filename>, "
+"then the list of members and the password of this group will be taken from "
+"this file, otherwise, the entry in <filename>/etc/group</filename> is "
+"considered."
+msgstr ""
+"Wenn sich in <filename>/etc/gshadow</filename> ein Eintrag für diese Gruppe "
+"befindet, wird die Mitgliederliste und das Passwort der Gruppe dieser Datei "
+"entnommen. Anderenfalls wird der Eintrag in <filename>/etc/group</filename> "
+"ausgewertet."
+
+#: newgrp.1.xml:152(para)
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, <citerefentry condition="
+"\"gshadow\"><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, <citerefentry condition="
+"\"gshadow\"><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry></phrase>."
+
+#: logoutd.8.xml:57(refentrytitle) logoutd.8.xml:64(refname)
+#: logoutd.8.xml:70(command)
+msgid "logoutd"
+msgstr "logoutd"
+
+#: logoutd.8.xml:65(refpurpose)
+msgid "enforce login time restrictions"
+msgstr "richtet Beschränkung von Anmeldezeiten ein"
+
+# SB: /etc/rc is not in Debian. Probably doesn't matter, since logoutd is not in Debian either.
+#: logoutd.8.xml:76(para)
+msgid ""
+"<command>logoutd</command> enforces the login time and port restrictions "
+"specified in <filename>/etc/porttime</filename>. <command>logoutd</command> "
+"should be started from <filename>/etc/rc</filename>. The <filename>/var/run/"
+"utmp</filename> file is scanned periodically and each user name is checked "
+"to see if the named user is permitted on the named port at the current time. "
+"Any login session which is violating the restrictions in <filename>/etc/"
+"porttime</filename> is terminated."
+msgstr ""
+"<command>logoutd</command> setzt die Anmeldezeiten und Portbeschränkungen "
+"aus <filename>/etc/porttime</filename> um. <command>logoutd</command> sollte "
+"aus <filename>/etc/rc</filename> gestartet werden. Die Datei <filename>/var/"
+"run/utmp</filename> wird regelmäßig abgerufen, wobei jeder Benutzername "
+"darauf überprüft wird, ob er für den jeweiligen Port zur jeweiligen Zeit "
+"zugelassen ist. Alle angemeldeten Sitzungen, die gegen die Beschränkungen in "
+"<filename>/etc/porttime</filename> verstoßen, werden beendet."
+
+#: logoutd.8.xml:98(filename) login.1.xml:341(filename)
+msgid "/var/run/utmp"
+msgstr "/var/run/utmp"
+
+#: logoutd.8.xml:100(para) login.1.xml:343(para)
+msgid "List of current login sessions."
+msgstr "Liste der aktuellen angemeldeten Sitzungen"
+
+#: login.defs.5.xml:124(refentrytitle) login.defs.5.xml:131(refname)
+msgid "login.defs"
+msgstr "login.defs"
+
+#: login.defs.5.xml:132(refpurpose)
+msgid "shadow password suite configuration"
+msgstr "Konfiguration der Werkzeugsammlung für Shadow-Passwörter"
+
+#: login.defs.5.xml:137(para)
+msgid ""
+"The <filename>/etc/login.defs</filename> file defines the site-specific "
+"configuration for the shadow password suite. This file is required. Absence "
+"of this file will not prevent system operation, but will probably result in "
+"undesirable operation."
+msgstr ""
+"Die Datei <filename>/etc/login.defs</filename> legt die systemspezifische "
+"Konfiguration der Werkzeugsammlung für Shadow-Passwörter fest. Diese Datei "
+"muss vorhanden sein. Wenn sie fehlt, wird das System zwar laufen, es können "
+"aber unerwünschte Ergebnisse auftauchen."
+
+#: login.defs.5.xml:144(para)
+msgid ""
+"This file is a readable text file, each line of the file describing one "
+"configuration parameter. The lines consist of a configuration name and "
+"value, separated by whitespace. Blank lines and comment lines are ignored. "
+"Comments are introduced with a \"#\" pound sign and the pound sign must be "
+"the first non-white character of the line."
+msgstr ""
+"Diese Datei ist eine lesbare Textdatei. Jede Zeile der Datei beschreibt "
+"einen Konfigurationsparameter. Eine Zeile besteht aus einem "
+"Konfigurationsnamen und einem Wert, die durch ein Leerzeichen getrennt sind. "
+"Leer- und Kommentarzeilen werden nicht beachtet. Kommentare werden mit dem "
+"Rautezeichen »#« eingeleitet. Die Raute muss das erste nicht leere Zeichen "
+"der Zeile sein."
+
+#: login.defs.5.xml:152(para)
+msgid ""
+"Parameter values may be of four types: strings, booleans, numbers, and long "
+"numbers. A string is comprised of any printable characters. A boolean should "
+"be either the value <replaceable>yes</replaceable> or <replaceable>no</"
+"replaceable>. An undefined boolean parameter or one with a value other than "
+"these will be given a <replaceable>no</replaceable> value. Numbers (both "
+"regular and long) may be either decimal values, octal values (precede the "
+"value with <replaceable>0</replaceable>) or hexadecimal values (precede the "
+"value with <replaceable>0x</replaceable>). The maximum value of the regular "
+"and long numeric parameters is machine-dependent."
+msgstr ""
+"Die Parameterwerte können aus vier Typen bestehen: Zeichenketten, Boolesch, "
+"Zahlen und lange Zahlen. Eine Zeichenkette kann aus jedem druckbaren Zeichen "
+"bestehen. Ein Boolesch sollte »yes« oder »no« sein. Einem anderen oder "
+"undefinierten Parameter für Boolesch wird der Wert »no« zugewiesen. Normale "
+"und lange Zahlen können aus Dezimalzahlen, Oktalzahlen (beginnen mit »0«) "
+"oder Hexadezimalzahlen (beginnen mit »0x«) bestehen. Die maximale Größe der "
+"Parameter normaler und langer Zahlen ist systemabhängig."
+
+#: login.defs.5.xml:167(para)
+msgid "The following configuration items are provided:"
+msgstr "Die folgenden Konfigurationsmöglichkeiten sind vorhanden:"
+
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+msgid "<option>CHFN_AUTH</option> (boolean)"
+msgstr "<option>CHFN_AUTH</option> (boolesch)"
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chfn</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+"Falls <replaceable>yes</replaceable>, benötigt das Programm <command>chfn</"
+"command> eine Authentifizierung, bevor es Änderungen vornimmt, sofern es "
+"nicht von Root ausgeführt wird."
+
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+msgid "<option>CHFN_RESTRICT</option> (string)"
+msgstr "<option>CHFN_RESTRICT</option> (Zeichenkette)"
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"This parameter specifies which values in the <emphasis remap=\"I\">gecos</"
+"emphasis> field of the <filename>/etc/passwd</filename> file may be changed "
+"by regular users using the <command>chfn</command> program. It can be any "
+"combination of letters <replaceable>f</replaceable>, <replaceable>r</"
+"replaceable>, <replaceable>w</replaceable>, <replaceable>h</replaceable>, "
+"for Full name, Room number, Work phone, and Home phone, respectively. For "
+"backward compatibility, <replaceable>yes</replaceable> is equivalent to "
+"<replaceable>rwh</replaceable> and <replaceable>no</replaceable> is "
+"equivalent to <replaceable>frwh</replaceable>. If not specified, only the "
+"superuser can make any changes. The most restrictive setting is better "
+"achieved by not installing <command>chfn</command> SUID."
+msgstr ""
+"Der Parameter bestimmt, welcher Wert in dem <emphasis remap=\"I\">gecos</"
+"emphasis>-Feld von <filename>/etc/passwd</filename> von gewöhnlichen "
+"Benutzern mittels des Programms <command>chfn</command> geändert werden "
+"darf. Er kann aus jeder Kombination der Buchstaben <emphasis remap=\"I\">f</"
+"emphasis> ,<emphasis remap=\"I\">r</emphasis>, <emphasis remap=\"I\">w</"
+"emphasis> und <emphasis remap=\"I\">h</emphasis> bestehen. Diese Buchstaben "
+"stehen für den vollständigen Namen, die Zimmernummer, die geschäftliche "
+"Telefonnummer und die private Telefonnummer. Zum Zweck der "
+"Abwärtskompatibilität entspricht <replaceable>yes</replaceable> "
+"<replaceable>rwh</replaceable> und <replaceable>no</replaceable> "
+"<replaceable>frwh</replaceable>. Falls nichts festgelegt wird, kann nur Root "
+"Änderungen vornehmen. Die größte Einschränkung erreicht man besser, indem "
+"<filename>chfn</filename> nicht mit SUID-Rechten ausgestattet wird."
+
+#: login.defs.5.xml:32(term) chsh.1.xml:32(term)
+msgid "<option>CHSH_AUTH</option> (boolean)"
+msgstr "<option>CHSH_AUTH</option> (boolesch)"
+
+#: login.defs.5.xml:34(para) chsh.1.xml:34(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chsh</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+"Falls <replaceable>yes</replaceable>, benötigt das Programm <command>chsh</"
+"command> eine Authentifizierung, bevor es Änderungen vornimmt, sofern es "
+"nicht von Root ausgeführt wird."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ERASECHAR</option> (number)"
+msgstr "<option>ERASECHAR</option> (Zahl)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Terminal ERASE character (<replaceable>010</replaceable> = backspace, "
+"<replaceable>0177</replaceable> = DEL)."
+msgstr ""
+"Das Löschzeichen des Terminals (<replaceable>010</replaceable> = Rücktaste, "
+"<replaceable>0177</replaceable> = Entf)."
+
+#: login.defs.5.xml:38(para) login.defs.5.xml:37(para) login.1.xml:38(para)
+#: login.1.xml:37(para)
+msgid ""
+"The value can be prefixed \"0\" for an octal value, or \"0x\" for an "
+"hexadecimal value."
+msgstr ""
+"Wenn der Wert mit »0« beginnt, wird er als Oktalzahl gewertet, wenn er mit "
+"»0x« beginnt, als Hexadezimalzahl."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FAIL_DELAY</option> (number)"
+msgstr "<option>FAIL_DELAY</option> (Zahl)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Delay in seconds before being allowed another attempt after a login failure."
+msgstr ""
+"Wartezeit in Sekunden, ehe nach einem fehlgeschlagenen Anmeldeversuch ein "
+"neuer unternommen werden kann"
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FAILLOG_ENAB</option> (boolean)"
+msgstr "<option>FAILLOG_ENAB</option> (boolesch)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable logging and display of <filename>/var/log/faillog</filename> login "
+"failure info."
+msgstr ""
+"aktiviert die Protokollierung und Anzeige der Informationen zu "
+"fehlgeschlagenen Anmeldeversuchen in <filename>/var/log/faillog</filename>"
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FAKE_SHELL</option> (string)"
+msgstr "<option>FAKE_SHELL</option> (Zeichenkette)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, <command>login</command> will execute this shell instead of the "
+"users' shell specified in <filename>/etc/passwd</filename>."
+msgstr ""
+"Falls angegeben, führt <command>login</command> diese Shell anstelle der in "
+"<filename>/etc/passwd</filename> angegebenen Shell des Benutzers aus."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FTMP_FILE</option> (string)"
+msgstr "<option>FTMP_FILE</option> (Zeichenkette)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, login failures will be logged in this file in a utmp format."
+msgstr ""
+"Falls angegeben, werden fehlgeschlagene Anmeldeversuche in dieser Datei im "
+"Format utmp protokolliert."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>HUSHLOGIN_FILE</option> (string)"
+msgstr "<option>HUSHLOGIN_FILE</option> (Zeichenkette)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, this file can inhibit all the usual chatter during the login "
+"sequence. If a full pathname is specified, then hushed mode will be enabled "
+"if the user's name or shell are found in the file. If not a full pathname, "
+"then hushed mode will be enabled if the file exists in the user's home "
+"directory."
+msgstr ""
+"Falls angegeben, kann diese Datei die übliche Informationsanzeige während "
+"des Anmeldevorgangs unterbinden. Wenn ein vollständiger Pfad angegeben wird, "
+"wird der Modus ohne Anmeldeinformationen verwendet, wenn der Name oder die "
+"Shell des Benutzers in der Datei enthalten sind. Wenn kein vollständiger "
+"Pfad angegeben wird, wird der Modus ohne Anmeldeinformationen aktiviert, "
+"wenn die Datei im Home-Verzeichnis des Benutzers existiert."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ISSUE_FILE</option> (string)"
+msgstr "<option>ISSUE_FILE</option> (Zeichenkette)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "If defined, this file will be displayed before each login prompt."
+msgstr ""
+"Falls angegeben, wird diese Datei vor der Anmeldeaufforderung angezeigt."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>KILLCHAR</option> (number)"
+msgstr "<option>KILLCHAR</option> (Zahl)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Terminal KILL character (<replaceable>025</replaceable> = CTRL/U)."
+msgstr ""
+"Das KILL-Zeichen des Terminals (<replaceable>025</replaceable> = CTRL/U)."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LASTLOG_ENAB</option> (boolean)"
+msgstr "<option>LASTLOG_ENAB</option> (boolesch)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging and display of /var/log/lastlog login time info."
+msgstr ""
+"aktiviert die Protokollierung und Anzeige der Informationen zu Anmeldezeiten "
+"in <filename>/var/log/lastlog</filename>"
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOG_OK_LOGINS</option> (boolean)"
+msgstr "<option>LOG_OK_LOGINS</option> (boolesch)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging of successful logins."
+msgstr "aktiviert die Protokollierung erfolgreicher Anmeldungen"
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOG_UNKFAIL_ENAB</option> (boolean)"
+msgstr "<option>LOG_UNKFAIL_ENAB</option> (boolesch)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable display of unknown usernames when login failures are recorded."
+msgstr ""
+"aktiviert die Anzeige unbekannter Benutzernamen, wenn fehlgeschlagene "
+"Anmeldeversuche aufgezeichnet werden"
+
+#: login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"Note: logging unknown usernames may be a security issue if an user enter her "
+"password instead of her login name."
+msgstr ""
+"Hinweis: Das Protokollieren unbekannter Benutzernamen kann ein "
+"Sicherheitsproblem darstellen, wenn ein Benutzer sein Passwort anstelle "
+"seines Anmeldenamens eingibt."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOGIN_RETRIES</option> (number)"
+msgstr "<option>LOGIN_RETRIES</option> (Zahl)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Maximum number of login retries in case of bad password."
+msgstr ""
+"maximale Anzahl von Anmeldeversuchen, wenn ein falsches Passwort eingegeben "
+"wird"
+
+#: login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"This will most likely be overridden by PAM, since the default pam_unix "
+"module has its own built in of 3 retries. However, this is a safe fallback "
+"in case you are using an authentication module that does not enforce "
+"PAM_MAXTRIES."
+msgstr ""
+"Dies wird höchstwahrscheinlich von PAM überschrieben, da standardmäßig das "
+"Modul pam_unix drei Versuche enthält. Dennoch stellt dies ein zusätzliches "
+"Sicherungssystem dar, falls Sie eine Anmeldemöglichkeit einsetzen, die nicht "
+"PAM_MAXTRIES beachtet."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOGIN_TIMEOUT</option> (number)"
+msgstr "<option>LOGIN_TIMEOUT</option> (Zahl)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Max time in seconds for login."
+msgstr "Höchstdauer für einen Anmeldeversuch"
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>MOTD_FILE</option> (string)"
+msgstr "<option>MOTD_FILE</option> (Zeichenkette)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, \":\" delimited list of \"message of the day\" files to be "
+"displayed upon login."
+msgstr ""
+"Falls angegeben, eine Aufzählung von Dateien, welche die bei der Anmeldung "
+"anzuzeigenden »Nachrichten des Tages« enthält. Die Dateien werden mit einem "
+"»:« getrennt."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>NOLOGINS_FILE</option> (string)"
+msgstr "<option>NOLOGINS_FILE</option> (Zeichenkette)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, name of file whose presence will inhibit non-root logins. The "
+"contents of this file should be a message indicating why logins are "
+"inhibited."
+msgstr ""
+"Falls angegeben, der Name einer Datei, deren Existenz Anmeldungen außer von "
+"Root verhindert. Der Inhalt der Datei sollte die Gründe enthalten, weshalb "
+"Anmeldungen untersagt sind."
+
+#: login.defs.5.xml:212(para)
+msgid ""
+"<option>PASS_MAX_DAYS</option>, <option>PASS_MIN_DAYS</option> and "
+"<option>PASS_WARN_AGE</option> are only used at the time of account "
+"creation. Any changes to these settings won't affect existing accounts."
+msgstr ""
+"<option>PASS_MAX_DAYS</option>, <option>PASS_MIN_DAYS</option> und "
+"<option>PASS_WARN_AGE</option> werden nur bei der Erstellung eines Kontos "
+"verwendet. Spätere Änderungen dieser Werte berühren bestehende Konten nicht."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>PORTTIME_CHECKS_ENAB</option> (boolean)"
+msgstr "<option>PORTTIME_CHECKS_ENAB</option> (boolesch)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable checking of time restrictions specified in <filename>/etc/porttime</"
+"filename>."
+msgstr ""
+"aktiviert die Auswertung der in <filename>/etc/porttime</filename> "
+"angegebenen Zeitbegrenzungen"
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>TTYGROUP</option> (string)"
+msgstr "<option>TTYGROUP</option> (Zeichenkette)"
+
+#: login.defs.5.xml:33(term) login.1.xml:33(term)
+msgid "<option>TTYPERM</option> (string)"
+msgstr "<option>TTYPERM</option> (Zeichenkette)"
+
+#: login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"The terminal permissions: the login tty will be owned by the "
+"<option>TTYGROUP</option> group, and the permissions will be set to "
+"<option>TTYPERM</option>."
+msgstr ""
+"Die Rechte des Terminals: Das Anmelde-tty gehört der Gruppe "
+"<option>TTYGROUP</option> an, die Rechte werden auf <option>TTYPERM</option> "
+"gesetzt."
+
+#: login.defs.5.xml:40(para) login.1.xml:40(para)
+msgid ""
+"By default, the ownership of the terminal is set to the user's primary group "
+"and the permissions are set to <replaceable>0600</replaceable>."
+msgstr ""
+"Standardmäßig ist der Eigentümer des Terminals die Hauptgruppe des "
+"Benutzers, die Rechte werden auf <replaceable>0600</replaceable> gesetzt."
+
+#: login.defs.5.xml:45(para) login.1.xml:45(para)
+msgid ""
+"<option>TTYGROUP</option> can be either the name of a group or a numeric "
+"group identifier."
+msgstr ""
+"<option>TTYGROUP</option> kann der Gruppenname oder die als Zahl "
+"ausgedrückte Gruppen-ID sein."
+
+#: login.defs.5.xml:49(para) login.1.xml:49(para)
+msgid ""
+"If you have a <command>write</command> program which is \"setgid\" to a "
+"special group which owns the terminals, define TTYGROUP to the group number "
+"and TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign "
+"TTYPERM to either 622 or 600."
+msgstr ""
+"Wenn Sie ein <command>write</command>-Programm haben, das »setgid« für eine "
+"Gruppe besitzt, der das Terminal gehört, sollten Sie TTYGROUP die "
+"Gruppennummer und TTYPERM den Wert 0620 zuweisen. Oder Sie sollten TTYGROUP "
+"als Kommentar belassen und TTYPERM den Wert 622 oder 600 zuweisen."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>TTYTYPE_FILE</option> (string)"
+msgstr "<option>TTYTYPE_FILE</option> (Zeichenkette)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, file which maps tty line to TERM environment parameter. Each "
+"line of the file is in a format something like \"vt100 tty01\"."
+msgstr ""
+"Falls angegeben, eine Datei, welche einer tty-Zeile den Umgebungsparameter "
+"TERM zuweist. Jede Zeile hat das Format wie etwa »vt100 tty01«."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ULIMIT</option> (number)"
+msgstr "<option>ULIMIT</option> (Zahl)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Default <command>ulimit</command> value."
+msgstr "der Standardwert von <command>ulimit</command>"
+
+#: login.defs.5.xml:245(title)
+msgid "CROSS REFERENCES"
+msgstr "QUERVERWEISE"
+
+#: login.defs.5.xml:246(para)
+msgid ""
+"The following cross references show which programs in the shadow password "
+"suite use which parameters."
+msgstr ""
+"Die folgenden Querverweise zeigen, welche Programme aus der Shadow-Passwort-"
+"Werkzeugsammlung welche Parameter verwenden."
+
+#: login.defs.5.xml:253(term) chage.1.xml:58(refentrytitle)
+#: chage.1.xml:65(refname) chage.1.xml:70(command)
+msgid "chage"
+msgstr "chage"
+
+#: login.defs.5.xml:255(para) login.defs.5.xml:451(phrase)
+#: login.defs.5.xml:523(phrase)
+msgid "USE_TCB"
+msgstr "USE_TCB"
+
+#: login.defs.5.xml:259(term) chfn.1.xml:60(refentrytitle)
+#: chfn.1.xml:67(refname) chfn.1.xml:73(command)
+msgid "chfn"
+msgstr "chfn"
+
+#: login.defs.5.xml:261(para)
+msgid ""
+"<phrase condition=\"no_pam\">CHFN_AUTH</phrase> CHFN_RESTRICT <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase>"
+msgstr ""
+"<phrase condition=\"no_pam\">CHFN_AUTH</phrase> CHFN_RESTRICT <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase>"
+
+#: login.defs.5.xml:269(term) chgpasswd.8.xml:57(refentrytitle)
+#: chgpasswd.8.xml:64(refname) chgpasswd.8.xml:70(command)
+msgid "chgpasswd"
+msgstr "chgpasswd"
+
+#: login.defs.5.xml:271(para) login.defs.5.xml:302(para)
+msgid ""
+"ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB <phrase condition="
+"\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+"ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB <phrase condition="
+"\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+
+#: login.defs.5.xml:279(term) chpasswd.8.xml:61(refentrytitle)
+#: chpasswd.8.xml:68(refname) chpasswd.8.xml:74(command)
+msgid "chpasswd"
+msgstr "chpasswd"
+
+#: login.defs.5.xml:282(phrase)
+msgid "ENCRYPT_METHOD MD5_CRYPT_ENAB"
+msgstr "ENCRYPT_METHOD MD5_CRYPT_ENAB"
+
+#: login.defs.5.xml:284(phrase)
+msgid "SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS"
+msgstr "SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS"
+
+#: login.defs.5.xml:290(term) chsh.1.xml:60(refentrytitle)
+#: chsh.1.xml:67(refname) chsh.1.xml:73(command)
+msgid "chsh"
+msgstr "chsh"
+
+#: login.defs.5.xml:292(para)
+msgid "CHSH_AUTH LOGIN_STRING"
+msgstr "CHSH_AUTH LOGIN_STRING"
+
+#: login.defs.5.xml:300(term) gpasswd.1.xml:62(refentrytitle)
+#: gpasswd.1.xml:69(refname) gpasswd.1.xml:83(command)
+msgid "gpasswd"
+msgstr "gpasswd"
+
+#: login.defs.5.xml:310(term) groupadd.8.xml:60(refentrytitle)
+#: groupadd.8.xml:67(refname) groupadd.8.xml:73(command)
+msgid "groupadd"
+msgstr "groupadd"
+
+#: login.defs.5.xml:312(para)
+msgid "GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN"
+msgstr "GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN"
+
+#: login.defs.5.xml:319(term) groupdel.8.xml:58(refentrytitle)
+#: groupdel.8.xml:65(refname) groupdel.8.xml:71(command)
+msgid "groupdel"
+msgstr "groupdel"
+
+#: login.defs.5.xml:321(para) login.defs.5.xml:327(para)
+#: login.defs.5.xml:333(para) login.defs.5.xml:340(para)
+#: login.defs.5.xml:346(para) login.defs.5.xml:352(para)
+msgid "MAX_MEMBERS_PER_GROUP"
+msgstr "MAX_MEMBERS_PER_GROUP"
+
+#: login.defs.5.xml:325(term) groupmems.8.xml:61(refentrytitle)
+#: groupmems.8.xml:68(refname) groupmems.8.xml:74(command)
+msgid "groupmems"
+msgstr "groupmems"
+
+#: login.defs.5.xml:331(term) groupmod.8.xml:58(refentrytitle)
+#: groupmod.8.xml:65(refname) groupmod.8.xml:71(command)
+msgid "groupmod"
+msgstr "groupmod"
+
+#: login.defs.5.xml:338(term) grpck.8.xml:58(refentrytitle)
+#: grpck.8.xml:65(refname) grpck.8.xml:71(command)
+msgid "grpck"
+msgstr "grpck"
+
+#: login.defs.5.xml:357(term) lastlog.8.xml:59(refentrytitle)
+#: lastlog.8.xml:66(refname) lastlog.8.xml:72(command)
+msgid "lastlog"
+msgstr "lastlog"
+
+#: login.defs.5.xml:359(para)
+msgid "LASTLOG_UID_MAX"
+msgstr ""
+
+#: login.defs.5.xml:363(term) login.1.xml:90(refentrytitle)
+#: login.1.xml:97(refname) login.1.xml:103(command) login.1.xml:111(command)
+#: login.1.xml:118(command)
+msgid "login"
+msgstr "login"
+
+#: login.defs.5.xml:365(para)
+#, fuzzy
+#| msgid ""
+#| "<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+#| "<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ "
+#| "ENVIRON_FILE</phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam"
+#| "\">FAILLOG_ENAB</phrase> FAKE_SHELL <phrase condition=\"no_pam"
+#| "\">FTMP_FILE</phrase> HUSHLOGIN_FILE <phrase condition=\"no_pam"
+#| "\">ISSUE_FILE</phrase> KILLCHAR <phrase condition=\"no_pam"
+#| "\">LASTLOG_ENAB</phrase> LOGIN_RETRIES <phrase condition=\"no_pam"
+#| "\">LOGIN_STRING</phrase> LOGIN_TIMEOUT LOG_OK_LOGINS LOG_UNKFAIL_ENAB "
+#| "<phrase condition=\"no_pam\">MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE "
+#| "NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> TTYGROUP TTYPERM "
+#| "TTYTYPE_FILE <phrase condition=\"no_pam\">ULIMIT UMASK</phrase> "
+#| "USERGROUPS_ENAB"
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE</"
+"phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam\">FAILLOG_ENAB</"
+"phrase> FAKE_SHELL <phrase condition=\"no_pam\">FTMP_FILE</phrase> "
+"HUSHLOGIN_FILE <phrase condition=\"no_pam\">ISSUE_FILE</phrase> KILLCHAR "
+"<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 <phrase condition=\"no_pam"
+"\">MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE NOLOGINS_FILE "
+"PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> TTYGROUP TTYPERM TTYTYPE_FILE "
+"<phrase condition=\"no_pam\">ULIMIT UMASK</phrase> USERGROUPS_ENAB"
+msgstr ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE</"
+"phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam\">FAILLOG_ENAB</"
+"phrase> FAKE_SHELL <phrase condition=\"no_pam\">FTMP_FILE</phrase> "
+"HUSHLOGIN_FILE <phrase condition=\"no_pam\">ISSUE_FILE</phrase> KILLCHAR "
+"<phrase condition=\"no_pam\">LASTLOG_ENAB</phrase> LOGIN_RETRIES <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase> LOGIN_TIMEOUT LOG_OK_LOGINS "
+"LOG_UNKFAIL_ENAB <phrase condition=\"no_pam\">MAIL_CHECK_ENAB MAIL_DIR "
+"MAIL_FILE MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> "
+"TTYGROUP TTYPERM TTYTYPE_FILE <phrase condition=\"no_pam\">ULIMIT UMASK</"
+"phrase> USERGROUPS_ENAB"
+
+#: login.defs.5.xml:392(term)
+msgid "newgrp / sg"
+msgstr "newgrp / sg"
+
+#: login.defs.5.xml:394(para)
+msgid "SYSLOG_SG_ENAB"
+msgstr "SYSLOG_SG_ENAB"
+
+#: login.defs.5.xml:402(para)
+#, fuzzy
+#| msgid ""
+#| "ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB "
+#| "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"sha_crypt"
+#| "\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase> SYS_GID_MAX "
+#| "SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+msgid ""
+"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> "
+"SUB_GID_COUNT SUB_GID_MAX SUB_GID_MIN SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN "
+"SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+msgstr ""
+"ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB "
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase> SYS_GID_MAX "
+"SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+
+#: login.defs.5.xml:421(para)
+msgid ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN "
+"PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN "
+"PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+
+#: login.defs.5.xml:432(para)
+msgid ""
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb"
+"\">TCB_AUTH_GROUP TCB_SYMLINKS USE_TCB</phrase>"
+msgstr ""
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb"
+"\">TCB_AUTH_GROUP TCB_SYMLINKS USE_TCB</phrase>"
+
+#: login.defs.5.xml:441(para)
+msgid ""
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb\">USE_TCB</"
+"phrase>"
+msgstr ""
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb\">USE_TCB</"
+"phrase>"
+
+#: login.defs.5.xml:458(para)
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENVIRON_FILE</phrase> ENV_PATH "
+"ENV_SUPATH <phrase condition=\"no_pam\">ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB "
+"MAIL_DIR MAIL_FILE QUOTAS_ENAB</phrase> SULOG_FILE SU_NAME <phrase condition="
+"\"no_pam\">SU_WHEEL_ONLY</phrase> SYSLOG_SU_ENAB <phrase condition=\"no_pam"
+"\">USERGROUPS_ENAB</phrase>"
+msgstr ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENVIRON_FILE</phrase> ENV_PATH "
+"ENV_SUPATH <phrase condition=\"no_pam\">ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB "
+"MAIL_DIR MAIL_FILE QUOTAS_ENAB</phrase> SULOG_FILE SU_NAME <phrase condition="
+"\"no_pam\">SU_WHEEL_ONLY</phrase> SYSLOG_SU_ENAB <phrase condition=\"no_pam"
+"\">USERGROUPS_ENAB</phrase>"
+
+#: login.defs.5.xml:473(term)
+msgid "sulogin"
+msgstr "sulogin"
+
+#: login.defs.5.xml:475(para)
+msgid "ENV_HZ <phrase condition=\"no_pam\">ENV_TZ</phrase>"
+msgstr "ENV_HZ <phrase condition=\"no_pam\">ENV_TZ</phrase>"
+
+#: login.defs.5.xml:484(para)
+#, fuzzy
+#| msgid ""
+#| "CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP PASS_MAX_DAYS "
+#| "PASS_MIN_DAYS PASS_WARN_AGE SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX "
+#| "SYS_UID_MIN UID_MAX UID_MIN UMASK <phrase condition=\"tcb"
+#| "\">TCB_AUTH_GROUP TCB_SYMLINK USE_TCB</phrase>"
+msgid ""
+"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 SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN "
+"SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK "
+"<phrase condition=\"tcb\">TCB_AUTH_GROUP TCB_SYMLINK USE_TCB</phrase>"
+msgstr ""
+"CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP PASS_MAX_DAYS "
+"PASS_MIN_DAYS PASS_WARN_AGE SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN "
+"UID_MAX UID_MIN UMASK <phrase condition=\"tcb\">TCB_AUTH_GROUP TCB_SYMLINK "
+"USE_TCB</phrase>"
+
+#: login.defs.5.xml:502(para)
+msgid ""
+"MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB <phrase "
+"condition=\"tcb\">TCB_SYMLINKS USE_TCB</phrase>"
+msgstr ""
+"MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB <phrase "
+"condition=\"tcb\">TCB_SYMLINKS USE_TCB</phrase>"
+
+#: login.defs.5.xml:512(para)
+#, fuzzy
+#| msgid ""
+#| "MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP <phrase condition=\"tcb"
+#| "\">TCB_SYMLINKS USE_TCB</phrase>"
+msgid ""
+"LASTLOG_UID_MAX MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP <phrase condition="
+"\"tcb\">TCB_SYMLINKS USE_TCB</phrase>"
+msgstr ""
+"MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP <phrase condition=\"tcb"
+"\">TCB_SYMLINKS USE_TCB</phrase>"
+
+#: login.defs.5.xml:532(para)
+msgid ""
+"Much of the functionality that used to be provided by the shadow password "
+"suite is now handled by PAM. Thus, <filename>/etc/login.defs</filename> is "
+"no longer used by <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, or less used by "
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, and <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>. Please refer to the "
+"corresponding PAM configuration files instead."
+msgstr ""
+"Ein Großteil der Funktionen, die früher einmal durch die Shadow-Passwort-"
+"Werkzeugsammlung angeboten wurden, wird heute durch PAM zur Verfügung "
+"gestellt. Daher wird <filename>/etc/login.defs</filename> nicht länger von "
+"Programmen wie <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> ausgewertet und von "
+"Programmen wie <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> oder "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> nur noch in geringem Umfang beachtet. Sie sollten daher für "
+"eine entsprechende Konfiguration in den Dateien von PAM nachsehen."
+
+#: login.defs.5.xml:548(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: login.access.5.xml:58(refentrytitle) login.access.5.xml:65(refname)
+msgid "login.access"
+msgstr "login.access"
+
+#: login.access.5.xml:66(refpurpose)
+msgid "login access control table"
+msgstr "Tabelle für die Zugangskontrolle zur Anmeldung"
+
+#: login.access.5.xml:71(para)
+msgid ""
+"The <emphasis remap=\"I\">login.access</emphasis> file specifies (user, "
+"host) combinations and/or (user, tty) combinations for which a login will be "
+"either accepted or refused."
+msgstr ""
+"Die Datei <emphasis remap=\"I\">login.access</emphasis> legt Kombinationen "
+"von (Benutzer, Rechner) und (Benutzer, tty) fest, für die eine Anmeldung "
+"erlaubt oder abgelehnt wird."
+
+#: login.access.5.xml:77(para)
+msgid ""
+"When someone logs in, the <emphasis remap=\"I\">login.access</emphasis> is "
+"scanned for the first entry that matches the (user, host) combination, or, "
+"in case of non-networked logins, the first entry that matches the (user, "
+"tty) combination. The permissions field of that table entry determines "
+"whether the login will be accepted or refused."
+msgstr ""
+"Wenn sich jemand anmeldet, wird <emphasis remap=\"I\">login.access</"
+"emphasis> nach dem ersten Eintrag durchsucht, auf den die Kombination von "
+"(Benutzer, Rechner) oder, bei lokalen Anmeldungen, von (Benutzer, tty) "
+"zutrifft. Das Feld für die Erlaubnis bestimmt, ob die Anmeldung zugelassen "
+"oder abgelehnt wird."
+
+#: login.access.5.xml:85(para)
+msgid ""
+"Each line of the login access control table has three fields separated by a "
+"\":\" character:"
+msgstr ""
+"Jede Zeile der Tabelle für die Zugangskontrolle enthält drei Felder, die "
+"jeweils durch einen Doppelpunkt »:« getrennt sind:"
+
+#: login.access.5.xml:90(para)
+msgid ""
+"<emphasis remap=\"I\">permission</emphasis>:<emphasis remap=\"I\">users</"
+"emphasis>:<emphasis remap=\"I\">origins</emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">Erlaubnis</emphasis>:<emphasis remap=\"I\">Benutzer</"
+"emphasis>:<emphasis remap=\"I\">Herkunft</emphasis>"
+
+#: login.access.5.xml:94(para)
+msgid ""
+"The first field should be a \"<emphasis>+</emphasis>\" (access granted) or "
+"\"<emphasis>-</emphasis>\" (access denied) character. The second field "
+"should be a list of one or more login names, group names, or <emphasis>ALL</"
+"emphasis> (always matches). The third field should be a list of one or more "
+"tty names (for non-networked logins), host names, domain names (begin with "
+"\"<literal>.</literal>\"), host addresses, internet network numbers (end "
+"with \"<literal>.</literal>\"), <emphasis>ALL</emphasis> (always matches) or "
+"<emphasis>LOCAL</emphasis> (matches any string that does not contain a "
+"\"<literal>.</literal>\" character). If you run NIS you can use "
+"@netgroupname in host or user patterns."
+msgstr ""
+"Das erste Feld kann das Zeichen »<emphasis>+</emphasis>« (Zugriff erlaubt) "
+"oder »<emphasis>-</emphasis>« (Zugriff verweigert) sein. Das zweite Feld "
+"kann eine Liste von einem oder mehreren Anmeldenamen, Gruppennamen oder "
+"<emphasis>ALL<emphasis> (trifft immer zu) sein. Das dritte Feld kann eine "
+"Liste von einem oder mehreren tty-Namen (für lokale Anmeldungen), Rechner-"
+"Namen, Domain-Namen (beginnen mit einem »<literal>.</literal>«), Rechner-"
+"Adressen, Internet-Netzwerk-Nummern (enden mit einem »<literal>.</"
+"literal>«), <emphasis>ALL</emphasis> (trifft immer zu) oder <emphasis>LOCAL</"
+"emphasis> (trifft auf alle Zeichenketten zu, die keinen »<literal>.</"
+"literal>« enthalten). Falls Sie NIS einsetzen, können Sie in den Rechner- "
+"und Benutzerangaben auch @netgroupname verwenden."
+
+#: login.access.5.xml:108(para)
+msgid ""
+"The <emphasis>EXCEPT</emphasis> operator makes it possible to write very "
+"compact rules."
+msgstr ""
+"Der Operator <emphasis>EXCEPT</emphasis> ermöglicht es, sehr kurze Regeln zu "
+"schreiben."
+
+#: login.access.5.xml:113(para)
+msgid ""
+"The group file is searched only when a name does not match that of the "
+"logged-in user. Only groups are matched in which users are explicitly "
+"listed: the program does not look at a user's primary group id value."
+msgstr ""
+"Die Gruppendatei wird nur durchsucht, wenn ein Name nicht mit dem des "
+"angemeldeten Benutzers übereinstimmt. Eine Übereinstimmung mit Gruppen wird "
+"nur festgestellt, wenn darin der Benutzer ausdrücklich aufgeführt ist. Das "
+"Programm beachtet also nicht den Wert der Hauptgruppe des Benutzers."
+
+# SB: Translation of login.1 based on Josef Spillner's
+# (josef@ggzgamingzone.org) from 2003. Mention somewhere else as well?
+#: login.1.xml:98(refpurpose)
+msgid "begin session on the system"
+msgstr "startet eine Sitzung auf dem System"
+
+#: login.1.xml:104(arg) login.1.xml:112(arg) login.1.xml:119(arg)
+#: login.1.xml:236(option) groupmems.8.xml:79(arg)
+msgid "-p"
+msgstr "-p"
+
+#: login.1.xml:105(replaceable) login.1.xml:113(replaceable)
+#: login.1.xml:120(replaceable)
+msgid "host"
+msgstr "Rechner"
+
+#: login.1.xml:105(arg) login.1.xml:113(arg)
+msgid "-h <placeholder-1/>"
+msgstr "-h <placeholder-1/>"
+
+#: login.1.xml:108(replaceable)
+msgid "ENV=VAR"
+msgstr "ENV=VAR"
+
+#: login.1.xml:114(arg) login.1.xml:214(option)
+msgid "-f"
+msgstr "-f"
+
+#: login.1.xml:120(arg)
+msgid "-r <placeholder-1/>"
+msgstr "-r <placeholder-1/>"
+
+#: login.1.xml:126(para)
+msgid ""
+"The <command>login</command> program is used to establish a new session with "
+"the system. It is normally invoked automatically by responding to the "
+"<emphasis remap=\"I\">login:</emphasis> prompt on the user's terminal. "
+"<command>login</command> may be special to the shell and may not be invoked "
+"as a sub-process. When called from a shell, <command>login</command> should "
+"be executed as <emphasis remap=\"B\">exec login</emphasis> which will cause "
+"the user to exit from the current shell (and thus will prevent the new "
+"logged in user to return to the session of the caller). Attempting to "
+"execute <command>login</command> from any shell but the login shell will "
+"produce an error message."
+msgstr ""
+"Das Programm <command>login</command> wird verwendet, um eine neue Sitzung "
+"auf dem System zu starten. Es wird normalerweise automatisch als Antwort auf "
+"die <emphasis remap=\"I\">login:</emphasis>-Eingabeaufforderung auf dem "
+"Terminal des Benutzers ausgeführt. <command>login</command> kann von der "
+"Shell besonders behandelt werden und kann nicht als Subprozess gestartet "
+"werden. Wenn <command>login</command> von einer Shell aufgerufen wird, "
+"sollte es als <emphasis remap=\"B\">exec login</emphasis> ausgeführt werden, "
+"so dass die aktuelle Shell des Benutzers beendet wird (und somit verhindert "
+"wird, dass der neue Benutzer in die Sitzung des alten zurückkehren kann). "
+"Der Versuch, von einer Shell außer der Anmelde-Shell <command>login</"
+"command> auszuführen, wird eine Fehlermeldung erzeugen."
+
+#: login.1.xml:140(para)
+msgid ""
+"The user is then prompted for a password, where appropriate. Echoing is "
+"disabled to prevent revealing the password. Only a small number of password "
+"failures are permitted before <command>login</command> exits and the "
+"communications link is severed."
+msgstr ""
+"Falls erforderlich, wird der Benutzer anschließend nach einem Passwort "
+"gefragt. Dieses wird während der Eingabe nicht angezeigt. Es sind nur eine "
+"kleine Anzahl von Anmeldeversuchen zulässig, ehe <command>login</command> "
+"abbricht und die Kommunikation getrennt wird."
+
+#: login.1.xml:147(para)
+msgid ""
+"If password aging has been enabled for your account, you may be prompted for "
+"a new password before proceeding. You will be forced to provide your old "
+"password and the new password before continuing. Please refer to "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> for more information."
+msgstr ""
+"Falls der Passwortverfall für Ihr Konto aktiviert wurde, kann es sein, dass "
+"Sie vor der weiteren Nutzung nach einem neuen Passwort gefragt werden. Sie "
+"müssen Ihr altes und neues Passwort angegeben, bevor Sie fortfahren können. "
+"In der Dokumentation zu <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> finden sich weitere "
+"Informationen."
+
+#: login.1.xml:156(para)
+msgid ""
+"After a successful login, you will be informed of any system messages and "
+"the presence of mail. You may turn off the printing of the system message "
+"file, <filename>/etc/motd</filename>, by creating a zero-length file "
+"<filename>.hushlogin</filename> in your login directory. The mail message "
+"will be one of \"<emphasis>You have new mail.</emphasis>\", \"<emphasis>You "
+"have mail.</emphasis>\", or \"<emphasis>No Mail.</emphasis>\" according to "
+"the condition of your mailbox."
+msgstr ""
+"Nach einer erfolgreichen Anmeldung werden Ihnen Systemmeldungen präsentiert, "
+"sowie das Vorhandensein von Mails angezeigt. Die Anzeige der systemweiten "
+"Nachrichtendatei <filename>/etc/motd</filename> kann abgeschaltet werden, "
+"indem im Anmeldeverzeichnis eine leere Datei <filename>.hushlogin</filename> "
+"angelegt wird. Je nach Zustand der Mailbox des Benutzers ist die "
+"Mailnachricht entweder »<emphasis>Sie haben neue Mails.</emphasis>«, "
+"»<emphasis>Sie haben Mails.</emphasis>« oder »<emphasis>Keine Mails.</"
+"emphasis>«."
+
+#: login.1.xml:167(para)
+msgid ""
+"Your user and group ID will be set according to their values in the "
+"<filename>/etc/passwd</filename> file. The value for <envar>$HOME</envar>, "
+"<envar>$SHELL</envar>, <envar>$PATH</envar>, <envar>$LOGNAME</envar>, and "
+"<envar>$MAIL</envar> are set according to the appropriate fields in the "
+"password entry. Ulimit, umask and nice values may also be set according to "
+"entries in the GECOS field."
+msgstr ""
+"Die Benutzer- und Gruppen-IDs werden gemäß den Werten in <filename>/etc/"
+"passwd</filename> gesetzt. Die Werte für <envar>$HOME</envar>, <envar>"
+"$SHELL</envar>, <envar>$PATH</envar>, <envar>$LOGNAME</envar> und <envar>"
+"$MAIL</envar> werden ebenfalls entsprechend den Feldern im Passworteintrag "
+"gesetzt. Werte für ulimit, umask und nice können ebenfalls gemäß den Werten "
+"im GECOS-Feld gesetzt werden."
+
+#: login.1.xml:176(para)
+msgid ""
+"On some installations, the environmental variable <envar>$TERM</envar> will "
+"be initialized to the terminal type on your tty line, as specified in "
+"<filename>/etc/ttytype</filename>."
+msgstr ""
+"Bei einigen Installationen wird anfänglich die Umgebungsvariable <envar>"
+"$TERM</envar> entsprechend dem Terminaltyp Ihrer tty-Zeile, wie sie in "
+"<filename>/etc/ttytype</filename> angegeben ist, gesetzt."
+
+#: login.1.xml:182(para)
+msgid ""
+"An initialization script for your command interpreter may also be executed. "
+"Please see the appropriate manual section for more information on this "
+"function."
+msgstr ""
+"Ein Startskript für Ihren Befehlsinterpreter kann auch ausgeführt werden. "
+"Sehen Sie bitte in den entsprechenden Handbuchseiten für weitere "
+"Informationen darüber nach."
+
+#: login.1.xml:194(para) login.1.xml:270(para)
+msgid ""
+"The <command>login</command> program is NOT responsible for removing users "
+"from the utmp file. It is the responsibility of "
+"<citerefentry><refentrytitle>getty</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry> and <citerefentry><refentrytitle>init</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry> to clean up apparent "
+"ownership of a terminal session. If you use <command>login</command> from "
+"the shell prompt without <command>exec</command>, the user you use will "
+"continue to appear to be logged in even after you log out of the \"subsession"
+"\"."
+msgstr ""
+"Es liegt NICHT in der Verantwortung von <command>login</command>, Benutzer "
+"aus der utmp-Datei zu entfernen. Sowohl <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry> als auch "
+"<citerefentry><refentrytitle>init</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry> sind dafür zuständig, die offenkundige Eigentümerstellung "
+"einer Terminalsitzung aufzuräumen. Falls Sie <command>login</command> von "
+"der Shell ohne <command>exec</command> verwenden, wird der Benutzer, den Sie "
+"verwenden, weiterhin als angemeldet erscheinen, obwohl Sie die "
+"»untergeordnete Sitzung« beendet haben."
+
+#: login.1.xml:217(para)
+msgid "Do not perform authentication, user is preauthenticated."
+msgstr "Keine Authentifizierung durchführen, Benutzer ist bereits angemeldet."
+
+#: login.1.xml:220(para)
+msgid "Note: In that case, <replaceable>username</replaceable> is mandatory."
+msgstr ""
+"Hinweis: In diesem Fall muss <replaceable>Benutzername</replaceable> "
+"angegeben werden."
+
+#: login.1.xml:228(option)
+msgid "-h"
+msgstr "-h"
+
+#: login.1.xml:231(para)
+msgid "Name of the remote host for this login."
+msgstr "Name des entfernt stehenden Rechners für die Anmeldung"
+
+#: login.1.xml:239(para)
+msgid "Preserve environment."
+msgstr "behält die Umgebungseinstellungen bei"
+
+#: login.1.xml:244(option)
+msgid "-r"
+msgstr "-r"
+
+#: login.1.xml:247(para)
+msgid "Perform autologin protocol for rlogin."
+msgstr "führt das Autologin-Protokoll für rlogin aus"
+
+#: login.1.xml:252(para)
+msgid ""
+"The <option>-r</option>, <option>-h</option> and <option>-f</option> options "
+"are only used when <command>login</command> is invoked by root."
+msgstr ""
+"Die Optionen <option>-r</option>, <option>-h</option> und <option>-f</"
+"option> können nur verwendet werden, wenn <command>login</command> von Root "
+"ausgeführt wird."
+
+#: login.1.xml:261(para)
+msgid ""
+"This version of <command>login</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+"Diese Version von <command>login</command> hat viele Optionen für die "
+"Kompilierung, wobei eventuell nicht alle Optionen auf allen Systemen "
+"verwendet werden."
+
+#: login.1.xml:266(para)
+msgid ""
+"The location of files is subject to differences in system configuration."
+msgstr ""
+"Der Ort der Konfigurationsdateien kann je nach Konfiguration des Systems "
+"unterschiedlich sein."
+
+#: login.1.xml:282(para)
+msgid ""
+"As with any program, <command>login</command>'s appearance can be faked. If "
+"non-trusted users have physical access to a machine, an attacker could use "
+"this to obtain the password of the next person coming to sit in front of the "
+"machine. Under Linux, the SAK mechanism can be used by users to initiate a "
+"trusted path and prevent this kind of attack."
+msgstr ""
+"Wie bei jedem anderen Programm kann auch das Erscheinungsbild von "
+"<command>login</command> vorgespiegelt werden. Falls unseriöse Benutzer "
+"physischen Zugriff auf den Rechner haben, kann dies von einem Angreifer "
+"verwendet werden, um das Passwort der Person zu erhalten, die sich als "
+"nächste vor den Rechner setzt. In Linux können Benutzer den SAK-Mechanismus "
+"verwenden, um einen vertrauenswürdigen Pfad zu erstellen und somit diesem "
+"Angriff zu entgehen."
+
+#: login.1.xml:347(filename)
+msgid "/var/log/wtmp"
+msgstr "/var/log/wtmp"
+
+#: login.1.xml:349(para)
+msgid "List of previous login sessions."
+msgstr "Liste der vorangegangenen angemeldeten Sitzungen"
+
+#: login.1.xml:365(filename)
+msgid "/etc/motd"
+msgstr "/etc/motd"
+
+#: login.1.xml:367(para)
+msgid "System message of the day file."
+msgstr "Datei mit der Systemmeldung des Tages"
+
+#: login.1.xml:371(filename)
+msgid "/etc/nologin"
+msgstr "/etc/nologin"
+
+#: login.1.xml:373(para)
+msgid "Prevent non-root users from logging in."
+msgstr "verhindert, dass sich Benutzer außer Root anmelden"
+
+#: login.1.xml:377(filename)
+msgid "/etc/ttytype"
+msgstr "/etc/ttytype"
+
+#: login.1.xml:379(para)
+msgid "List of terminal types."
+msgstr "Liste der Terminaltypen"
+
+#: login.1.xml:383(filename)
+msgid "$HOME/.hushlogin"
+msgstr "$HOME/.hushlogin"
+
+#: login.1.xml:385(para)
+msgid "Suppress printing of system messages."
+msgstr "unterdrückt die Ausgabe von Systemnachrichten"
+
+#: login.1.xml:399(para)
+msgid ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: limits.5.xml:41(firstname)
+msgid "Luca"
+msgstr "Luca"
+
+#: limits.5.xml:42(surname)
+msgid "Berra"
+msgstr "Berra"
+
+#: limits.5.xml:59(refentrytitle) limits.5.xml:66(refname)
+msgid "limits"
+msgstr "limits"
+
+#: limits.5.xml:67(refpurpose)
+msgid "resource limits definition"
+msgstr "Festlegung von Resourcenbeschränkungen"
+
+#: limits.5.xml:73(para)
+msgid ""
+"The <emphasis remap=\"I\">limits</emphasis> file (<filename>/etc/limits</"
+"filename> by default or LIMITS_FILE defined <filename>config.h</filename>) "
+"describes the resource limits you wish to impose. It should be owned by root "
+"and readable by root account only."
+msgstr ""
+"Die <emphasis remap=\"I\">limits</emphasis>-Datei (standardmäßig <filename>/"
+"etc/limits</filename> oder die durch LIMITS_FILE in <filename>config.h</"
+"filename> festgelegte) bezeichnet die von Ihnen eingeführte Beschränkung von "
+"Ressourcen. Sie sollte Root gehören und nur von ihm lesbar sein."
+
+#: limits.5.xml:81(para)
+msgid ""
+"By default no quota is imposed on 'root'. In fact, there is no way to impose "
+"limits via this procedure to root-equiv accounts (accounts with UID 0)."
+msgstr ""
+"Standardmäßig bestehen für Root keine Einschränkungen. Tatsächlich gibt es "
+"keine Möglichkeit, mit diesem Verfahren Root-Konten (Konten mit der UID 0) "
+"Beschränkungen aufzuerlegen."
+
+#: limits.5.xml:87(para)
+msgid "Each line describes a limit for a user in the form:"
+msgstr ""
+"Jede Zeile beschreibt eine Beschränkung für einen Benutzer in der Form:"
+
+#: limits.5.xml:90(emphasis)
+msgid "user LIMITS_STRING"
+msgstr "Benutzer BESCHRÄNKUNGSZEICHENKETTE"
+
+#: limits.5.xml:93(para)
+msgid "or in the form:"
+msgstr "oder in der Form:"
+
+#: limits.5.xml:96(emphasis)
+msgid "@group LIMITS_STRING"
+msgstr "@Gruppe BESCHRÄNKUNGSZEICHENKETTE"
+
+#: limits.5.xml:99(para)
+msgid ""
+"The <emphasis>LIMITS_STRING</emphasis> is a string of a concatenated list of "
+"resource limits. Each limit consists of a letter identifier followed by a "
+"numerical limit."
+msgstr ""
+"Die <emphasis>BESCHRÄNKUNGSZEICHENKETTE</emphasis> ist eine Kette von "
+"Ressourcen-Beschränkungen. Jede Beschränkung besteht aus einer "
+"Buchstabenkennung, der eine zahlenmäßige Beschränkung folgt."
+
+#: limits.5.xml:105(para)
+msgid "The valid identifiers are:"
+msgstr "Gültige Kennungen sind:"
+
+#: limits.5.xml:108(para)
+msgid "A: max address space (KB)"
+msgstr "A: maximaler Adressraum (KB)"
+
+# SB: Uebersetzung von "core file"?
+#: limits.5.xml:109(para)
+msgid "C: max core file size (KB)"
+msgstr "C: maximale Größe der Speicherabbild-Datei"
+
+#: limits.5.xml:110(para)
+msgid "D: max data size (KB)"
+msgstr "D: maximale Datengröße (KB)"
+
+#: limits.5.xml:111(para)
+#, fuzzy
+#| msgid "F: maximum filesize (KB)"
+msgid "F: maximum file size (KB)"
+msgstr "F: maximale Dateigröße (KB)"
+
+#: limits.5.xml:112(para)
+msgid ""
+"K: file creation mask, set by <citerefentry><refentrytitle>umask</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"K: Maske für die Dateierstellung, wird von "
+"<citerefentry><refentrytitle>umask</refentrytitle><manvolnum>2</manvolnum></"
+"citerefentry> gesetzt."
+
+#: limits.5.xml:117(para)
+msgid "I: max nice value (0..39 which translates to 20..-19)"
+msgstr ""
+"I: Maximaler Wert von nice (0 bis 39, was in 20 bis -19 übersetzt wird)"
+
+#: limits.5.xml:119(para)
+msgid "L: max number of logins for this user"
+msgstr "L: maximale Anzahl von Logins für diesen Benutzer"
+
+#: limits.5.xml:120(para)
+msgid "M: max locked-in-memory address space (KB)"
+msgstr "M: maximaler gesperrter Adressbereich im Speicher (KB)"
+
+#: limits.5.xml:121(para)
+msgid "N: max number of open files"
+msgstr "N: maximale Anzahl offener Dateien"
+
+#: limits.5.xml:122(para)
+msgid "O: max real time priority"
+msgstr "O: Maximale Echtzeit-Priorität "
+
+#: limits.5.xml:123(para)
+msgid ""
+"P: process priority, set by <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"P: Prozesspriorität, wird von <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry> gesetzt."
+
+#: limits.5.xml:128(para)
+msgid "R: max resident set size (KB)"
+msgstr "R: maximale Resident Set Size (KB)"
+
+#: limits.5.xml:129(para)
+msgid "S: max stack size (KB)"
+msgstr "S: maximale Größe des Stapelverarbeitungsspeichers (KB)"
+
+#: limits.5.xml:130(para)
+msgid "T: max CPU time (MIN)"
+msgstr "T: maximale CPU-Zeit (Min)"
+
+#: limits.5.xml:131(para)
+msgid "U: max number of processes"
+msgstr "U: maximale Anzahl von Prozessen"
+
+#: limits.5.xml:134(para)
+msgid ""
+"For example, <emphasis remap=\"I\">L2D2048N5</emphasis> is a valid "
+"<emphasis>LIMITS_STRING</emphasis>. For reading convenience, the following "
+"entries are equivalent:"
+msgstr ""
+"Zum Beispiel ist <emphasis remap=\"I\">L2D2048N5</emphasis> eine gültige "
+"<emphasis>BESCHRÄNKUNGSZEICHENKETTE</emphasis>. Um das Lesen zu erleichtern, "
+"werden folgende Einträge gleich behandelt:"
+
+#: limits.5.xml:140(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+" username L2D2048N5\n"
+" username L2 D2048 N5\n"
+" "
+msgstr ""
+"\n"
+" Benutzername L2D2048N5\n"
+" Benutzername L2 D2048 N5\n"
+" "
+
+#: limits.5.xml:145(para)
+#, fuzzy
+#| msgid ""
+#| "Be aware that after <emphasis remap=\"I\">username</emphasis> the rest of "
+#| "the line is considered a limit string, thus comments are not allowed. A "
+#| "invalid limits string will be rejected (not considered) by the "
+#| "<command>login</command> program."
+msgid ""
+"Be aware that after <emphasis remap=\"I\">username</emphasis> the rest of "
+"the line is considered a limit string, thus comments are not allowed. An "
+"invalid limits string will be rejected (not considered) by the "
+"<command>login</command> program."
+msgstr ""
+"Beachten Sie, dass nach <emphasis remap=\"I\">Benutzername</emphasis> die "
+"übrige Zeile als Zeichenkette für Beschränkungen angesehen wird. Kommentare "
+"sind daher nicht zulässig. Eine ungültige Zeichenkette wird von "
+"<command>login</command> ignoriert."
+
+#: limits.5.xml:152(para)
+msgid ""
+"The default entry is denoted by username \"<emphasis>*</emphasis>\". If you "
+"have multiple <emphasis remap=\"I\">default</emphasis> entries in your "
+"<emphasis>LIMITS_FILE</emphasis>, then the last one will be used as the "
+"default entry."
+msgstr ""
+"Standardwerte werden mit dem Benutzernamen »<emphasis>*</emphasis>« "
+"festgelegt. Falls Sie mehrfach <emphasis remap=\"I\">Standard</emphasis>-"
+"Werte in der <emphasis>BESCHRÄNKUNGSDATEI</emphasis> bestimmen, wird nur der "
+"letzte berücksichtigt."
+
+#: limits.5.xml:159(para)
+msgid ""
+"The limits specified in the form \"<replaceable>@group</replaceable>\" apply "
+"to the members of the specified <replaceable>group</replaceable>."
+msgstr ""
+"Beschränkungen, die in der Form »<replaceable>@group</replaceable>« "
+"festgelegt wurden, gelten für alle Mitglieder der angegebenen Gruppe "
+"<replaceable>group</replaceable>."
+
+#: limits.5.xml:165(para)
+#, fuzzy
+#| msgid ""
+#| "If more than one line with limits for an user exist, only the first line "
+#| "for this user will be considered."
+msgid ""
+"If more than one line with limits for a user exist, only the first line for "
+"this user will be considered."
+msgstr ""
+"Wenn mehr als eine Zeile mit Beschränkungen für einen Benutzer vorhanden "
+"ist, wird für ihn nur die erste Zeile berücksichtigt."
+
+#: limits.5.xml:170(para)
+#, fuzzy
+#| msgid ""
+#| "If no lines are specified for an user, the last <replaceable>@group</"
+#| "replaceable> line matching a group whose the user is a member of will be "
+#| "considered, or the last line with default limits if no groups contain the "
+#| "user."
+msgid ""
+"If no lines are specified for a user, the last <replaceable>@group</"
+"replaceable> line matching a group whose the user is a member of will be "
+"considered, or the last line with default limits if no groups contain the "
+"user."
+msgstr ""
+"Wenn keine Zeile auf einen Benutzer zutrifft, wird auf ihn die letzte Zeile "
+"mit <replaceable>@group</replaceable> angewendet, die auf eine Gruppe "
+"verweist, deren Mitglied er ist. Wenn er auch nicht Mitglied einer der "
+"aufgeführten Gruppe ist, wird auf ihn die letzte Zeile, in der Standardwerte "
+"bestimmt sind, angewendet."
+
+#: limits.5.xml:177(para)
+msgid ""
+"To completely disable limits for a user, a single dash \"<emphasis>-</"
+"emphasis>\" will do."
+msgstr ""
+"Mit einem Gedankenstrich »<emphasis>-</emphasis>« können Sie alle "
+"Beschränkungen für einen Benutzer zu entfernen."
+
+#: limits.5.xml:182(para)
+msgid ""
+"To disable a limit for a user, a single dash \"<replaceable>-</replaceable>"
+"\" can be used instead of the numerical value for this limit."
+msgstr ""
+"Um für einen Benutzer eine bestimmte Beschränkung zu entfernen, müssen Sie "
+"für diese Beschränkung anstelle des numerischen Wertes einen Gedankenstrich "
+"»<replaceable>-</replaceable>« setzen."
+
+# SB: Well, there is PAM with /etc/security/limits.conf
+#: limits.5.xml:188(para)
+msgid ""
+"Also, please note that all limit settings are set PER LOGIN. They are not "
+"global, nor are they permanent. Perhaps global limits will come, but for now "
+"this will have to do ;)"
+msgstr ""
+"Berücksichtigen Sie auch, dass alle Beschränkungen nur JE ANMELDUNG gelten. "
+"Sie sind nicht global und auch nicht dauerhaft. Vielleicht wird es einmal "
+"globale Beschränkungen geben, für jetzt muss dies aber reichen ;)"
+
+#: limits.5.xml:199(filename)
+msgid "/etc/limits"
+msgstr "/etc/limits"
+
+#: limits.5.xml:207(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+
+#: lastlog.8.xml:67(refpurpose)
+msgid "reports the most recent login of all users or of a given user"
+msgstr "berichtet die letzte Anmeldung für alle oder einen bestimmten Benutzer"
+
+#: lastlog.8.xml:81(para)
+msgid ""
+"<command>lastlog</command> formats and prints the contents of the last login "
+"log <filename>/var/log/lastlog</filename> file. The <emphasis>login-name</"
+"emphasis>, <emphasis>port</emphasis>, and <emphasis>last login time</"
+"emphasis> will be printed. The default (no flags) causes lastlog entries to "
+"be printed, sorted by their order in <filename>/etc/passwd</filename>."
+msgstr ""
+"<command>lastlog</command> formatiert und gibt den Inhalt der Datei mit den "
+"letzten Anmeldungen, <filename>/var/log/lastlog</filename>, aus. Der "
+"<emphasis>Anmeldename</emphasis>, der <emphasis>Port</emphasis> und der "
+"<emphasis>Zeitpunkt der letzten Anmeldung</emphasis> werden angezeigt. "
+"Standardmäßig (keine Optionen) werden die Lastlog-Einträge in der "
+"Reihenfolge, wie sie sich in <filename>/etc/passwd</filename> befinden, "
+"ausgegeben."
+
+#: lastlog.8.xml:93(para)
+msgid "The options which apply to the <command>lastlog</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>lastlog</command> unterstützt werden, "
+"sind:"
+
+#: lastlog.8.xml:98(term)
+msgid ""
+"<option>-b</option>, <option>--before</option>&nbsp;<replaceable>DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-b</option>, <option>--before</option>&nbsp;<replaceable>TAGE</"
+"replaceable>"
+
+#: lastlog.8.xml:102(para)
+msgid ""
+"Print only lastlog records older than <emphasis remap=\"I\">DAYS</emphasis>."
+msgstr ""
+"gibt nur Lastlog-Einträge aus, die älter als <emphasis remap=\"I\">TAGE</"
+"emphasis> sind"
+
+#: lastlog.8.xml:108(term)
+#, fuzzy
+#| msgid "<option>-u</option>, <option>--user</option>"
+msgid "<option>-C</option>, <option>--clear</option>"
+msgstr "<option>-u</option>, <option>--user</option>"
+
+#: lastlog.8.xml:112(para)
+#, fuzzy
+#| msgid ""
+#| "This option is only valid in combination with the <option>-d</option> (or "
+#| "<option>--home</option>) option."
+msgid ""
+"Clear lastlog record of a user. This option can be used only together with "
+"<option>-u</option> (<option>--user</option>))."
+msgstr ""
+"Diese Option ist nur in Verbindung mit der Option <option>-d</option> (oder "
+"<option>--home</option>) zulässig."
+
+#: lastlog.8.xml:139(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-S</option>, <option>--set</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: lastlog.8.xml:143(para)
+msgid ""
+"Set lastlog record of a user to the current time. This option can be used "
+"only together with <option>-u</option> (<option>--user</option>))."
+msgstr ""
+
+#: lastlog.8.xml:150(term) faillog.8.xml:192(term)
+msgid ""
+"<option>-t</option>, <option>--time</option>&nbsp;<replaceable>DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option>&nbsp;<replaceable>TAGE</"
+"replaceable>"
+
+#: lastlog.8.xml:154(para)
+msgid ""
+"Print the lastlog records more recent than <emphasis remap=\"I\">DAYS</"
+"emphasis>."
+msgstr ""
+"gibt nur Lastlog-Einträge aus, die neuer als <emphasis remap=\"I\">TAGE</"
+"emphasis> sind"
+
+#: lastlog.8.xml:161(term) faillog.8.xml:202(term)
+msgid ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+"replaceable>|<replaceable>RANGE</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+"replaceable>|<replaceable>MENGE</replaceable>"
+
+#: lastlog.8.xml:165(para)
+msgid "Print the lastlog record of the specified user(s)."
+msgstr "gibt nur die Lastlog-Einträge für die angegebenen Benutzer aus"
+
+#: lastlog.8.xml:168(para) faillog.8.xml:211(para)
+msgid ""
+"The users can be specified by a login name, a numerical user ID, or a "
+"<replaceable>RANGE</replaceable> of users. This <replaceable>RANGE</"
+"replaceable> of users can be specified with a min and max values "
+"(<replaceable>UID_MIN-UID_MAX</replaceable>), a max value (<replaceable>-"
+"UID_MAX</replaceable>), or a min value (<replaceable>UID_MIN-</replaceable>)."
+msgstr ""
+"Die Bestimmung der Benutzer erfolgt durch ihren Anmeldenamen, ihrer "
+"zahlenmäßigen Benutzer-ID oder einer <replaceable>MENGE</replaceable> von "
+"Benutzern. Diese <replaceable>MENGE</replaceable> kann mit Minimum- und "
+"Maximumwerten (<replaceable>UID_MIN-UID_MAX</replaceable>), nur mit einem "
+"Maximumwert (<replaceable>UID_MIN-UID_MAX</replaceable>) oder nur einem "
+"Minimumwert (<replaceable>UID_MIN-</replaceable>) bestimmt werden."
+
+#: lastlog.8.xml:180(para)
+msgid ""
+"If the user has never logged in the message <emphasis>** Never logged in**</"
+"emphasis> will be displayed instead of the port and time."
+msgstr ""
+"Wenn sich ein Benutzer noch nie angemeldet hat, wird die Meldung "
+"<emphasis>** Never logged in**</emphasis> anstatt von Port und Zeit "
+"angezeigt."
+
+#: lastlog.8.xml:185(para)
+msgid ""
+"Only the entries for the current users of the system will be displayed. "
+"Other entries may exist for users that were deleted previously."
+msgstr ""
+"Es werden nur Einträge für auf dem System vorhandene Benutzer angezeigt, "
+"selbst wenn Einträge über gelöschte Benutzer noch vorhanden sind."
+
+#: lastlog.8.xml:193(title) groups.1.xml:90(title) chsh.1.xml:140(title)
+#: chage.1.xml:237(title)
+msgid "NOTE"
+msgstr "ANMERKUNGEN"
+
+#: lastlog.8.xml:194(para)
+msgid ""
+"The <filename>lastlog</filename> file is a database which contains info on "
+"the last login of each user. You should not rotate it. It is a sparse file, "
+"so its size on the disk is usually much smaller than the one shown by "
+"\"<command>ls -l</command>\" (which can indicate a really big file if you "
+"have in <filename>passwd</filename> users with a high UID). You can display "
+"its real size with \"<command>ls -s</command>\"."
+msgstr ""
+"Bei der Datei <filename>lastlog</filename> handelt es sich um eine "
+"Datenbank, die Informationen zur letzten Anmeldung der Benutzer enthält. Sie "
+"sollten sie nicht austauschen. Es handelt sich um eine Sparse-Datei, so dass "
+"die tatsächliche Größe auf dem Speichermedium gewöhnlich viel kleiner ist "
+"als von »<command>ls -l</command>« angezeigt wird (was eine sehr große Datei "
+"anzeigen kann, wenn sich Benutzer mit einer großen UID in <filename>passwd</"
+"filename> befinden). Die wirkliche Dateigröße lässt sich mit »<command>ls -"
+"s</command>« anzeigen."
+
+#: lastlog.8.xml:220(filename)
+msgid "/var/log/lastlog"
+msgstr "/var/log/lastlog"
+
+#: lastlog.8.xml:222(para)
+msgid "Database times of previous user logins."
+msgstr "Datenbank mit Zeiten der letzten Anmeldung der Benutzer"
+
+#: lastlog.8.xml:230(para)
+msgid ""
+"Large gaps in UID numbers will cause the lastlog program to run longer with "
+"no output to the screen (i.e. if in lastlog database there is no entries for "
+"users with UID between 170 and 800 lastlog will appear to hang as it "
+"processes entries with UIDs 171-799)."
+msgstr ""
+"Große Lücken in den UID-Zahlen haben zur Folge, dass das Lastlog-Programm "
+"längere Zeit ohne Bildschirmausgabe läuft. Wenn sich z.B. in der Datenbank "
+"von Lastlog kein Eintrag für Benutzer mit der UID zwischen 170 und 800 "
+"befindet, wird es scheinen, als ob lastlog stehen geblieben ist, während es "
+"die Einträge mit der UID 171 bis 799 verarbeitet."
+
+#: gshadow.5.xml:41(contrib)
+msgid "Creation, 2005"
+msgstr "ursprünglicher Autor, 2005"
+
+#: gshadow.5.xml:46(refentrytitle) gshadow.5.xml:53(refname)
+msgid "gshadow"
+msgstr "gshadow"
+
+#: gshadow.5.xml:54(refpurpose)
+msgid "shadowed group file"
+msgstr "Shadow-Datei für Gruppen"
+
+#: gshadow.5.xml:59(para)
+msgid ""
+"<filename>/etc/gshadow</filename> contains the shadowed information for "
+"group accounts."
+msgstr ""
+"In <filename>/etc/gshadow</filename> befinden sich die Informationen für das "
+"Shadow-Gruppen-System."
+
+#: gshadow.5.xml:69(para)
+msgid "Each line of this file contains the following colon-separated fields:"
+msgstr ""
+"Die darin enthaltenen Zeilen haben folgende Felder, die durch Doppelpunkt "
+"getrennt sind:"
+
+#: gshadow.5.xml:75(emphasis)
+msgid "group name"
+msgstr "Gruppenname"
+
+#: gshadow.5.xml:77(para)
+msgid "It must be a valid group name, which exist on the system."
+msgstr ""
+"Es muss sich um einen gültigen, auf dem System vorhandenen Gruppennamen "
+"handeln."
+
+#: gshadow.5.xml:90(para)
+msgid ""
+"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 *, users will not be able to use a unix "
+"password to access the group (but group members do not need the password)."
+msgstr ""
+"Wenn das Passwortfeld eine Zeichenkette enthält, die kein zulässiges "
+"Ergebnis von <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry> ist, z.B. ! oder *, können Benutzer nicht mit "
+"einem Unix-Passwort Zugang zu der Gruppe erhalten, wobei Gruppenmitglieder "
+"kein Passwort benötigen."
+
+#: gshadow.5.xml:97(para)
+#, fuzzy
+#| msgid ""
+#| "The password is used when an user who is not a member of the group wants "
+#| "to gain the permissions of this group (see "
+#| "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>)."
+msgid ""
+"The password is used when a user who is not a member of the group wants to "
+"gain the permissions of this group (see <citerefentry><refentrytitle>newgrp</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>)."
+msgstr ""
+"Das Passwort wird angefordert, wenn ein Benutzer, der nicht Mitglied der "
+"Gruppe ist, die Berechtigungen dieser Gruppe erhalten will (vergleiche "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>)."
+
+#: gshadow.5.xml:103(para)
+msgid ""
+"This field may be empty, in which case only the group members can gain the "
+"group permissions."
+msgstr ""
+"Dieses Feld kann leer bleiben. Dies hat zur Folge, dass nur "
+"Gruppenmitglieder von den Rechten der Gruppe Gebrauch machen können."
+
+#: gshadow.5.xml:113(para)
+msgid ""
+"This password supersedes any password specified in <filename>/etc/group</"
+"filename>."
+msgstr ""
+"Dieses Passwort geht den in <filename>/etc/group</filename> definierten "
+"Passwörtern vor."
+
+# SB: Gruppenverwalter ist besser als Administrator, weil so keine Verwechslung mit Systemadminstrator.
+#: gshadow.5.xml:121(emphasis)
+msgid "administrators"
+msgstr "Gruppenverwalter"
+
+#: gshadow.5.xml:123(para) gshadow.5.xml:139(para)
+msgid "It must be a comma-separated list of user names."
+msgstr ""
+"Es muss sich dabei um eine durch Kommas getrennte Liste von Benutzernamen "
+"handeln."
+
+#: gshadow.5.xml:126(para)
+msgid "Administrators can change the password or the members of the group."
+msgstr ""
+"Gruppenverwalter können das Passwort und die Mitglieder der Gruppe ändern."
+
+#: gshadow.5.xml:130(para)
+msgid ""
+"Administrators also have the same permissions as the members (see below)."
+msgstr ""
+"Gruppenverwalter haben die gleichen Recht wie die Gruppenmitglieder (siehe "
+"unten)."
+
+#: gshadow.5.xml:137(emphasis)
+msgid "members"
+msgstr "Mitglieder"
+
+#: gshadow.5.xml:142(para)
+msgid "Members can access the group without being prompted for a password."
+msgstr ""
+"Mitglieder haben Zugang zu der Gruppe, ohne eine Passwort eingeben zu müssen."
+
+#: gshadow.5.xml:146(para)
+msgid ""
+"You should use the same list of users as in <filename>/etc/group</filename>."
+msgstr ""
+"Sie sollten die gleiche Benutzerliste wie in <filename>/etc/group</filename> "
+"verwenden."
+
+#: gshadow.5.xml:175(para)
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: grpck.8.xml:66(refpurpose)
+msgid "verify integrity of group files"
+msgstr "überprüft die Stimmigkeit der Gruppendateien"
+
+#: grpck.8.xml:84(para)
+msgid ""
+"The <command>grpck</command> command verifies the integrity of the groups "
+"information. It checks that all entries in <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</"
+"filename></phrase> have the proper format and contain valid data. The user "
+"is prompted to delete entries that are improperly formatted or which have "
+"other uncorrectable errors."
+msgstr ""
+"Der Befehl <command>grpwck</command> überprüft die Stimmigkeit der "
+"Informationen über die Gruppen. Alle Einträge in <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\">und <filename>/etc/gshadow</"
+"filename></phrase> werden darauf überprüft, ob sie das richtige Format haben "
+"und gültige Daten enthalten. Bei einem Eintrag, der falsch formatiert ist "
+"oder andere unbehebbare Fehler enthält, wird der Benutzer aufgefordert, ihn "
+"zu löschen."
+
+#: grpck.8.xml:101(para)
+msgid "a unique and valid group name"
+msgstr "einen eindeutigen und gültigen Gruppennamen"
+
+#: grpck.8.xml:104(para)
+msgid ""
+"a valid group identifier <phrase condition=\"gshadow\"> (<filename>/etc/"
+"group</filename> only)</phrase>"
+msgstr ""
+"eine gültige Gruppenkennung <phrase condition=\"gshadow\"> (nur für "
+"<filename>/etc/group</filename>)</phrase>"
+
+#: grpck.8.xml:111(para)
+msgid ""
+"a valid list of members <phrase condition=\"gshadow\"> and administrators</"
+"phrase>"
+msgstr ""
+"eine gültige Liste der Mitglieder <phrase condition=\"gshadow\"> und "
+"Gruppenverwalter</phrase>"
+
+#: grpck.8.xml:117(para)
+msgid ""
+"a corresponding entry in the <filename>/etc/gshadow</filename> file "
+"(respectively <filename>/etc/group</filename> for the <filename>gshadow</"
+"filename> checks)"
+msgstr ""
+"einen passenden Eintrag in der Datei <filename>/etc/gshadow</filename> "
+"(oder in <filename>/etc/group</filename> bei der Überprüfung von "
+"<filename>gshadow</filename>)"
+
+#: grpck.8.xml:125(para)
+msgid ""
+"The checks for correct number of fields and unique group name are fatal. If "
+"an entry has the wrong number of fields, the user will be prompted to delete "
+"the entire line. If the user does not answer affirmatively, all further "
+"checks are bypassed. An entry with a duplicated group name is prompted for "
+"deletion, but the remaining checks will still be made. All other errors are "
+"warnings and the user is encouraged to run the <command>groupmod</command> "
+"command to correct the error."
+msgstr ""
+"Fehler bei der Überprüfung der richtigen Anzahl der Felder und des "
+"eindeutigen Benutzernamens sind schwerwiegend. Wenn ein Eintrag die falsche "
+"Anzahl von Feldern aufweist, wird der Benutzer aufgefordert, die gesamte "
+"Zeile zu löschen. Wenn er dies ablehnt, werden alle weiteren Tests "
+"ausgelassen. Bei einem Eintrag mit einem mehrfach verwendeten Benutzernamen "
+"wird der Benutzer aufgefordert, diesen Eintrag zu löschen. Sollte er dies "
+"ablehnen, werden dennoch die übrigen Tests ausgeführt. Bei allen anderen "
+"Fehlern wird eine Warnung ausgegeben und der Benutzer aufgefordert, den "
+"Fehler mittels des Befehls <command>groupmod</command> zu beheben."
+
+#: grpck.8.xml:136(para)
+msgid ""
+"The commands which operate on the <filename>/etc/group</filename><phrase "
+"condition=\"no_gshadow\">file</phrase><phrase condition=\"gshadow\">and "
+"<filename>/etc/gshadow</filename> files</phrase> are not able to alter "
+"corrupted or duplicated entries. <command>grpck</command> should be used in "
+"those circumstances to remove the offending entries."
+msgstr ""
+"Die Befehle, welche die <phrase condition=\"no_gshadow\">Datei <filename>/"
+"etc/group</filename></phrase><phrase condition=\"gshadow\">Dateien "
+"<filename>/etc/group</filename> und <filename>/etc/gshadow</filename></"
+"phrase> bearbeiten, können falsche oder doppelte Einträge nicht verändern. "
+"In solchen Fällen sollte <command>grpwck</command> verwendet werden, um die "
+"betreffenden Einträge zu entfernen."
+
+#: grpck.8.xml:152(para)
+msgid "The options which apply to the <command>grpck</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>grpck</command> unterstützt werden, "
+"sind:"
+
+#: grpck.8.xml:165(para)
+msgid ""
+"Execute the <command>grpck</command> command in read-only mode. This causes "
+"all questions regarding changes to be answered <emphasis>no</emphasis> "
+"without user intervention."
+msgstr ""
+"Führt den Befehl <command>grpck</command> im Modus Nur-Lesen aus. Dies hat "
+"zur Folge, dass alle Fragen, ob Veränderungen vorgenommen werden sollen, mit "
+"<emphasis>no</emphasis> beantworteten werden, ohne dass der Benutzer "
+"einzugreifen braucht."
+
+#: grpck.8.xml:187(para)
+msgid ""
+"Sort entries in <filename>/etc/group</filename><phrase condition=\"gshadow"
+"\">and <filename>/etc/gshadow</filename></phrase> by GID."
+msgstr ""
+"Ordnet die Einträge in <filename>/etc/group</filename><phrase condition="
+"\"gshadow\">und <filename>/etc/gshadow</filename></phrase> nach der GID."
+
+#: grpck.8.xml:196(para)
+msgid ""
+"By default, <command>grpck</command> operates on <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</"
+"filename></phrase>. The user may select alternate files with the <emphasis "
+"remap=\"I\">group</emphasis><phrase condition=\"no_gshadow\">parameter.</"
+"phrase><phrase condition=\"gshadow\">and <emphasis remap=\"I\">shadow</"
+"emphasis> parameters.</phrase>"
+msgstr ""
+"Standardmäßig arbeitet <command>grpck</command> mit <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\"> und <filename>/etc/gshadow</"
+"filename></phrase>. Der Benutzer kann andere Dateien mit <phrase condition="
+"\"no_gshadow\">dem Parameter <emphasis remap=\"I\">group</emphasis></"
+"phrase><phrase condition=\"gshadow\">den Parametern <emphasis remap=\"I"
+"\">group</emphasis> und <emphasis remap=\"I\">shadow</emphasis></phrase> "
+"auswählen."
+
+#: grpck.8.xml:264(para)
+msgid "one or more bad group entries"
+msgstr "ein oder mehrere fehlerhafte Gruppeneinträge"
+
+#: grpck.8.xml:270(para)
+msgid "can't open group files"
+msgstr "Die Gruppendateien können nicht geöffnet werden."
+
+#: grpck.8.xml:276(para)
+msgid "can't lock group files"
+msgstr "Die Gruppendateien können nicht gesperrt werden."
+
+#: grpck.8.xml:282(para)
+msgid "can't update group files"
+msgstr "Die Gruppendateien können nicht aktualisiert werden."
+
+#: grpck.8.xml:246(para)
+msgid ""
+"The <command>grpck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Der Befehl <command>grpck</command> gibt beim Beenden folgende Werte zurück: "
+"<placeholder-1/>"
+
+#: grpck.8.xml:291(para)
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"gshadow\"><citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum>, </citerefentry>, </"
+"phrase><citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"gshadow\"><citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum>, </citerefentry>, </"
+"phrase><citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: groups.1.xml:57(refentrytitle) groups.1.xml:64(refname)
+#: groups.1.xml:70(command)
+msgid "groups"
+msgstr "groups"
+
+#: groups.1.xml:65(refpurpose)
+msgid "display current group names"
+msgstr "zeigt die aktuell verwendeten Gruppennamen an"
+
+#: groups.1.xml:72(replaceable)
+msgid "user"
+msgstr "Benutzer"
+
+#: groups.1.xml:79(para)
+msgid ""
+"The <command>groups</command> command displays the current group names or ID "
+"values. If the value does not have a corresponding entry in <filename>/etc/"
+"group</filename>, the value will be displayed as the numerical group value. "
+"The optional <emphasis remap=\"I\">user</emphasis> parameter will display "
+"the groups for the named <emphasis remap=\"I\">user</emphasis>."
+msgstr ""
+"Der Befehl <command>groups</command> zeigt die momentan verwendeten "
+"Gruppennamen oder IDs an. Wenn einem Wert kein Eintrag in <filename>/etc/"
+"group</filename> entspricht, wird die Gruppennummer ausgegeben. Mit der "
+"Option <emphasis remap=\"I\">user</emphasis> werden nur die Gruppen des "
+"bezeichneten <emphasis remap=\"I\">Benutzers</emphasis> angezeigt."
+
+# SB: Übersetzung von "concurrent group set"?
+#: groups.1.xml:91(para)
+msgid ""
+"Systems which do not support concurrent group sets will have the information "
+"from <filename>/etc/group</filename> reported. The user must use "
+"<command>newgrp</command> or <command>sg</command> to change his current "
+"real and effective group ID."
+msgstr ""
+"Auf Systemen, die keine simultanen Gruppen unterstützen, werden die "
+"Informationen aus <filename>/etc/group</filename> ausgegeben. Wenn der "
+"Benutzer seine tatsächliche und effektive Gruppen-ID ändern will, muss er "
+"<command>newgrp</command> oder <command>sg</command> verwenden."
+
+#: groups.1.xml:113(para)
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+
+#: groupmod.8.xml:66(refpurpose)
+msgid "modify a group definition on the system"
+msgstr "ändert die Eigenschaften einer Gruppe auf dem System"
+
+#: groupmod.8.xml:75(replaceable) groupdel.8.xml:75(replaceable)
+msgid "GROUP"
+msgstr "GRUPPE"
+
+#: groupmod.8.xml:81(para)
+msgid ""
+"The <command>groupmod</command> command modifies the definition of the "
+"specified <replaceable>GROUP</replaceable> by modifying the appropriate "
+"entry in the group database."
+msgstr ""
+"Der Befehl <command>groupmod</command> ändert die Eigenschaften der "
+"angegebenen <replaceable>GRUPPE</replaceable>, indem die passenden Einträge "
+"in der Gruppendatenbank geändert werden."
+
+#: groupmod.8.xml:90(para)
+msgid "The options which apply to the <command>groupmod</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>groupmod</command> unterstützt werden, "
+"sind:"
+
+#: groupmod.8.xml:96(term) groupadd.8.xml:114(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GID</"
+"replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GID</"
+"replaceable>"
+
+#: groupmod.8.xml:100(para)
+msgid ""
+"The group ID of the given <replaceable>GROUP</replaceable> will be changed "
+"to <replaceable>GID</replaceable>."
+msgstr ""
+"Die Gruppen-ID der angegebenen <replaceable>GRUPPE</replaceable> wird zu "
+"<replaceable>GID</replaceable> geändert."
+
+#: groupmod.8.xml:104(para)
+msgid ""
+"The value of <replaceable>GID</replaceable> must be a non-negative decimal "
+"integer. This value must be unique, unless the <option>-o</option> option is "
+"used."
+msgstr ""
+"Der Wert von <replaceable>GID</replaceable> muss eine nicht negative, "
+"dezimale Zahl sein. Er muss eindeutig sein, außer wenn die Option <option>-"
+"o</option> verwendet wird."
+
+#: groupmod.8.xml:110(para)
+msgid ""
+"Users who use the group as primary group will be updated to keep the group "
+"as their primary group."
+msgstr ""
+"Benutzer, welche die Gruppe als Hauptgruppe verwenden, werden aktualisiert, "
+"um die Gruppe als Hauptgruppe zu behalten."
+
+#: groupmod.8.xml:114(para)
+msgid ""
+"Any files that have the old group ID and must continue to belong to "
+"<replaceable>GROUP</replaceable>, must have their group ID changed manually."
+msgstr ""
+"Bei Dateien, welche die alte Gruppen-ID haben und weiterhin der Gruppe "
+"<replaceable>GROUP</replaceable> gehören sollen, muss die Gruppen-ID per "
+"Hand angepasst werden."
+
+#: groupmod.8.xml:120(para)
+msgid ""
+"No checks will be performed with regard to the <option>GID_MIN</option>, "
+"<option>GID_MAX</option>, <option>SYS_GID_MIN</option>, or "
+"<option>SYS_GID_MAX</option> from <filename>/etc/login.defs</filename>."
+msgstr ""
+"Die Werte von <option>GID_MIN</option>, <option>GID_MAX</option>, "
+"<option>SYS_GID_MIN</option> und <option>SYS_GID_MAX</option> aus <filename>/"
+"etc/login.defs</filename> werden nicht geprüft."
+
+#: groupmod.8.xml:135(term)
+msgid ""
+"<option>-n</option>, <option>--new-name</option>&nbsp;"
+"<replaceable>NEW_GROUP</replaceable>"
+msgstr ""
+"<option>-n</option>, <option>--new-name</option>&nbsp;"
+"<replaceable>NEUE_GRUPPE</replaceable>"
+
+#: groupmod.8.xml:139(para)
+msgid ""
+"The name of the group will be changed from <replaceable>GROUP</replaceable> "
+"to <replaceable>NEW_GROUP</replaceable> name."
+msgstr ""
+"Der Gruppenname wird vom Namen <replaceable>GRUPPE</replaceable> zu "
+"<replaceable>NEUE_GRUPPE</replaceable> geändert."
+
+#: groupmod.8.xml:150(para)
+msgid ""
+"When used with the <option>-g</option> option, allow to change the group "
+"<replaceable>GID</replaceable> to a non-unique value."
+msgstr ""
+"Wenn sie mit der Option <option>-g</option> verwendet wird, kann mit ihr der "
+"Wert der Gruppen-<replaceable>GID</replaceable> auf einen nicht eindeutigen "
+"Wert gesetzt werden."
+
+#: groupmod.8.xml:259(para)
+msgid "E_SUCCESS: success"
+msgstr ""
+
+#: groupmod.8.xml:265(para)
+#, fuzzy
+#| msgid "invalid command syntax"
+msgid "E_USAGE: invalid command syntax"
+msgstr "unzulässige Syntax für diesen Befehl"
+
+#: groupmod.8.xml:271(para)
+#, fuzzy
+#| msgid "invalid argument to option"
+msgid "E_BAD_ARG: invalid argument to option"
+msgstr "ungültiges Argument für Option"
+
+#: groupmod.8.xml:277(para)
+#, fuzzy
+#| msgid "specified group doesn't exist"
+msgid "E_GID_IN_USE: specified group doesn't exist"
+msgstr "angegebene Gruppe ist nicht vorhanden"
+
+#: groupmod.8.xml:283(para)
+#, fuzzy
+#| msgid "specified group doesn't exist"
+msgid "E_NOTFOUND: specified group doesn't exist"
+msgstr "angegebene Gruppe ist nicht vorhanden"
+
+#: groupmod.8.xml:289(para)
+#, fuzzy
+#| msgid "group name already in use"
+msgid "E_NAME_IN_USE: group name already in use"
+msgstr "Gruppenname wird schon verwendet"
+
+#: groupmod.8.xml:295(para)
+#, fuzzy
+#| msgid "can't update group file"
+msgid "E_GRP_UPDATE: can't update group file"
+msgstr "Die Gruppendatei kann nicht aktualisieren werden."
+
+#: groupmod.8.xml:299(replaceable)
+#, fuzzy
+#| msgid "1"
+msgid "11"
+msgstr "1"
+
+#: groupmod.8.xml:301(para)
+msgid "E_CLEANUP_SERVICE: can't setup cleanup service"
+msgstr ""
+
+#: groupmod.8.xml:307(para)
+msgid "E_PAM_USERNAME: can't determine your username for use with pam"
+msgstr ""
+
+#: groupmod.8.xml:311(replaceable)
+msgid "13"
+msgstr "13"
+
+#: groupmod.8.xml:313(para)
+msgid ""
+"E_PAM_ERROR: pam returned an error, see syslog facility id groupmod for the "
+"PAM error message"
+msgstr ""
+
+#: groupmod.8.xml:253(para)
+msgid ""
+"The <command>groupmod</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Der Befehl <command>groupmod</command> gibt beim Beenden folgende Werte "
+"zurück: <placeholder-1/>"
+
+#: groupmod.8.xml:322(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: groupmems.8.xml:42(firstname)
+msgid "George"
+msgstr "George"
+
+#: groupmems.8.xml:43(surname)
+msgid "Kraft"
+msgstr "Kraft"
+
+#: groupmems.8.xml:44(lineage)
+msgid "IV"
+msgstr "IV"
+
+#: groupmems.8.xml:45(contrib)
+msgid "Creation, 2000"
+msgstr "ursprünglicher Autor, 2000"
+
+#: groupmems.8.xml:69(refpurpose)
+msgid "administer members of a user's primary group"
+msgstr "verwaltet die Mitglieder der Hauptgruppe eines Benutzers"
+
+#: groupmems.8.xml:76(replaceable) groupmems.8.xml:77(replaceable)
+msgid "user_name"
+msgstr "Benutzer_Name"
+
+#: groupmems.8.xml:76(arg)
+msgid "-a <placeholder-1/>"
+msgstr "-a <placeholder-1/>"
+
+#: groupmems.8.xml:77(arg)
+msgid "-d <placeholder-1/>"
+msgstr "-d <placeholder-1/>"
+
+#: groupmems.8.xml:78(replaceable)
+msgid "group_name"
+msgstr "Gruppen_Name"
+
+#: groupmems.8.xml:78(arg)
+msgid "-g <placeholder-1/>"
+msgstr "-g <placeholder-1/>"
+
+#: groupmems.8.xml:79(arg)
+msgid "-l"
+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 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 ""
+"Mit dem Befehl <command>groupmems</command> kann ein Benutzer die "
+"Mitgliederliste seiner eigenen Gruppe verwalten, ohne Root-Rechte zu "
+"benötigen. Das Werkzeug <command>groupmems</command> ist für Systeme "
+"gedacht, auf denen die Hauptgruppe eines Benutzers den gleichen Namen hat "
+"wie der Benutzer (z.B. fritz/fritz)."
+
+#: groupmems.8.xml:94(para)
+msgid ""
+"Only the superuser, as administrator, can use <command>groupmems</command> "
+"to alter the memberships of other groups."
+msgstr ""
+"Nur Root als Administrator kann mit <command>groupmems</command> die "
+"Mitgliederlisten anderer Gruppen bearbeiten."
+
+#: groupmems.8.xml:101(para)
+msgid ""
+"The options which apply to the <command>groupmems</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>groupmems</command> unterstützt "
+"werden, sind:"
+
+#: groupmems.8.xml:107(term)
+msgid ""
+"<option>-a</option>, <option>--add</option>&nbsp;<replaceable>user_name</"
+"replaceable>"
+msgstr ""
+"<option>-a</option>, <option>--add</option>&nbsp;<replaceable>Benutzer_Name</"
+"replaceable>"
+
+#: groupmems.8.xml:109(para)
+#, fuzzy
+#| msgid "Add an user to the group membership list."
+msgid "Add a user to the group membership list."
+msgstr "Fügt einen Benutzer der Mitgliederliste der Gruppe hinzu."
+
+#: groupmems.8.xml:110(para) groupmems.8.xml:126(para)
+#: groupmems.8.xml:157(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, and the group has no "
+"entry in the <filename>/etc/gshadow</filename> file, a new entry will be "
+"created."
+msgstr ""
+"Wenn die Datei <filename>/etc/gshadow</filename> vorhanden ist, die Gruppe "
+"darin aber keinen Eintrag hat, wird ein solcher erstellt."
+
+#: groupmems.8.xml:118(term)
+msgid ""
+"<option>-d</option>, <option>--delete</option>&nbsp;<replaceable>user_name</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--delete</option>&nbsp;"
+"<replaceable>Benutzer_Name</replaceable>"
+
+#: groupmems.8.xml:120(para)
+msgid "Delete a user from the group membership list."
+msgstr "Löscht einen Benutzer aus der Mitgliederliste der Gruppe."
+
+#: groupmems.8.xml:121(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, the user will be "
+"removed from the list of members and administrators of the group."
+msgstr ""
+"Wenn <filename>/etc/gshadow</filename> vorhanden ist, wird der Benutzer aus "
+"der Liste der Mitglieder und Gruppenverwalter entfernt."
+
+#: groupmems.8.xml:134(term)
+msgid ""
+"<option>-g</option>, <option>--group</option>&nbsp;<replaceable>group_name</"
+"replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--group</option>&nbsp;"
+"<replaceable>Gruppen_Name</replaceable>"
+
+#: groupmems.8.xml:136(para)
+msgid "The superuser can specify which group membership list to modify."
+msgstr ""
+"Root kann eine Gruppen bestimmen, deren Mitgliederliste er bearbeiten will."
+
+#: groupmems.8.xml:148(term) chage.1.xml:160(term)
+msgid "<option>-l</option>, <option>--list</option>"
+msgstr "<option>-l</option>, <option>--list</option>"
+
+#: groupmems.8.xml:150(para)
+msgid "List the group membership list."
+msgstr "gibt die Mitgliederliste aus"
+
+#: groupmems.8.xml:154(term)
+msgid "<option>-p</option>, <option>--purge</option>"
+msgstr "<option>-p</option>, <option>--purge</option>"
+
+#: groupmems.8.xml:156(para)
+msgid "Purge all users from the group membership list."
+msgstr "löscht alle Benutzer aus der Mitgliederliste der Gruppe"
+
+#: groupmems.8.xml:180(title)
+msgid "SETUP"
+msgstr "EINRICHTUNG"
+
+#: groupmems.8.xml:181(para)
+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 ""
+"Die ausführbare Datei <command>groupmems</command> sollte die Rechte "
+"<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 "
+"eigenen Gruppe zu verwalten."
+
+#: groupmems.8.xml:190(programlisting)
+#, no-wrap
+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 ""
+"\n"
+"\t$ groupadd -r groups\n"
+"\t$ chmod 2710 groupmems\n"
+"\t$ chown root.groups groupmems\n"
+"\t$ groupmems -g groups -a gk4\n"
+" "
+
+#: groupmems.8.xml:222(para)
+msgid "secure group account information"
+msgstr "verschlüsselte Informationen zu den Gruppenkonten"
+
+#: groupmems.8.xml:230(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: groupdel.8.xml:66(refpurpose)
+msgid "delete a group"
+msgstr "löscht eine Gruppe"
+
+#: groupdel.8.xml:81(para)
+msgid ""
+"The <command>groupdel</command> command modifies the system account files, "
+"deleting all entries that refer to <replaceable>GROUP</replaceable>. The "
+"named group must exist."
+msgstr ""
+"Der Befehl <command>groupdel</command> bearbeitet die Kontodateien des "
+"Systems und löscht darin alle Einträge, die auf die <replaceable>Gruppe</"
+"replaceable> verweisen. Die bezeichnete Gruppe muss existieren."
+
+#: groupdel.8.xml:89(para)
+msgid "The options which apply to the <command>groupdel</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>groupdel</command> unterstützt werden, "
+"sind:"
+
+#: groupdel.8.xml:134(para)
+msgid ""
+"You may not remove the primary group of any existing user. You must remove "
+"the user before you remove the group."
+msgstr ""
+"Sie können nicht die Hauptgruppe eines Benutzers entfernen. Dazu müssten Sie "
+"zunächst den betreffenden Benutzer löschen."
+
+#: groupdel.8.xml:138(para)
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this group."
+msgstr ""
+"Sie sollten von Hand alle Systemdateien überprüfen, um sicherzustellen, dass "
+"keine Dateien, die der gelöschten Gruppe angehören, vorhanden sind."
+
+#: groupdel.8.xml:200(para)
+msgid "can't remove user's primary group"
+msgstr "Die Hauptgruppe eines Benutzers kann nicht entfernen werden."
+
+#: groupdel.8.xml:176(para)
+msgid ""
+"The <command>groupdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Der Befehl <command>groupdel</command> gibt beim Beenden folgende Werte "
+"zurück: <placeholder-1/>"
+
+#: groupdel.8.xml:215(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: groupadd.8.xml:68(refpurpose)
+msgid "create a new group"
+msgstr "erstellt eine neue Gruppe"
+
+#: groupadd.8.xml:85(para)
+msgid ""
+"The <command>groupadd</command> command creates a new group account using "
+"the values specified on the command line plus the default values from the "
+"system. The new group will be entered into the system files as needed."
+msgstr ""
+"Der Befehl <command>groupadd</command> erstellt ein neues Gruppenkonto. "
+"Dabei verwendet er die Werte, die auf der Befehlszeile angegeben wurden, "
+"oder die Standardwerte des Systems. Soweit es notwendig ist, wird die neue "
+"Gruppe den Systemdateien hinzugefügt."
+
+#: groupadd.8.xml:94(para)
+msgid "The options which apply to the <command>groupadd</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>groupadd</command> unterstützt werden, "
+"sind:"
+
+#: groupadd.8.xml:104(para)
+msgid ""
+"This option causes the command to simply exit with success status if the "
+"specified group already exists. When used with <option>-g</option>, and the "
+"specified GID already exists, another (unique) GID is chosen (i.e. <option>-"
+"g</option> is turned off)."
+msgstr ""
+"Die Option führt dazu, dass der Befehl nur dann erfolgreich beendet wird, "
+"wenn die angegebene Gruppe existiert. Falls diese Option zusammen mit der "
+"Option <option>-g</option> verwendet wird und die angegebene GID schon "
+"vergeben ist, wird eine andere, eindeutige GID gewählt (d.h. <option>-g</"
+"option> wird nicht beachtet)."
+
+#: groupadd.8.xml:118(para)
+msgid ""
+"The numerical value of the group's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than or equal to "
+"<option>GID_MIN</option> and greater than every other group."
+msgstr ""
+"Der zahlenmäßige Wert der Gruppen-ID. Dieser Wert muss eindeutig sein, "
+"sofern nicht die Option <option>-o</option> verwendet wird. Der Wert darf "
+"nicht negativ sein. Standardmäßig wird der kleinste Wert größer als oder "
+"gleich <option>GID_MIN</option> und größer als jeder andere Wert einer "
+"Gruppe verwendet."
+
+#: groupadd.8.xml:124(para)
+msgid ""
+"See also the <option>-r</option> option and the <option>GID_MAX</option> "
+"description."
+msgstr ""
+"Vergleichen Sie auch die Option <option>-r</option> und die Ausführungen zu "
+"<option>GID_MAX</option>."
+
+#: groupadd.8.xml:141(para)
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (GID_MIN, GID_MAX "
+"and others). Multiple <option>-K</option> options can be specified."
+msgstr ""
+"Überschreibt die Standardwerte von <filename>/etc/login.defs</filename> "
+"(GID_MIN, GID_MAX und weitere). Diese Option kann mehrfach verwendet werden."
+
+#: groupadd.8.xml:146(para)
+msgid ""
+"Example: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+"<replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+"Beispiel: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+"<replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+
+#: groupadd.8.xml:150(para)
+msgid ""
+"Note: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+"replaceable>=<replaceable>499</replaceable> doesn't work yet."
+msgstr ""
+"Hinweis: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+"replaceable>=<replaceable>499</replaceable> funktioniert noch nicht."
+
+#: groupadd.8.xml:161(para)
+msgid "This option permits to add a group with a non-unique GID."
+msgstr ""
+"Diese Option erlaubt es, eine Gruppe mit einer nicht eindeutigen GID zu "
+"erstellen."
+
+#: groupadd.8.xml:192(para)
+msgid "Create a system group."
+msgstr "erstellt eine neue Systemgruppe"
+
+#: groupadd.8.xml:195(para)
+msgid ""
+"The numeric identifiers of new system groups are chosen in the "
+"<option>SYS_GID_MIN</option>-<option>SYS_GID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>GID_MIN</option>-"
+"<option>GID_MAX</option>."
+msgstr ""
+"Die zahlenmäßige Kennung einer neuen Systemgruppe wird aus der Spanne von "
+"<option>SYS_GID_MIN</option> bis <option>SYS_GID_MAX</option> gewählt, "
+"welche in <filename>login.defs</filename> festgelegt wird, anstelle von "
+"<option>GID_MIN</option> bis <option>GID_MAX</option>."
+
+#: groupadd.8.xml:275(para)
+msgid ""
+"Groupnames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+"Gruppennamen müssen mit einem Kleinbuchstaben oder einem Unterstrich "
+"beginnen. Nachfolgend dürfen sie Kleinbuchstaben, Zahlen, Unterstriche und "
+"Gedankenstriche enthalten. Das letzte Zeichen darf auch ein Dollarzeichen "
+"sein. Als regulärer Ausdruck: [a-z_][a-z0-9_-]*[$]?"
+
+#: groupadd.8.xml:281(para)
+msgid "Groupnames may only be up to &GROUP_NAME_MAX_LENGTH; characters long."
+msgstr ""
+"Gruppennamen dürfen nur bis zu &GROUP_NAME_MAX_LENGTH; Zeichen lang sein."
+
+#: groupadd.8.xml:284(para)
+msgid ""
+"You may not add a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+"Sie können einen Benutzer nicht einer NIS- oder LDAP-Gruppe hinzufügen. Dies "
+"müssen Sie auf dem entsprechenden Server durchführen."
+
+#: groupadd.8.xml:288(para)
+msgid ""
+"If the groupname already exists in an external group database such as NIS or "
+"LDAP, <command>groupadd</command> will deny the group creation request."
+msgstr ""
+"Falls der Gruppenname bereits in einer externen Datenbank (wie etwa NIS oder "
+"LDAP) vergeben ist, wird <command>groupadd</command> die Gruppe nicht "
+"erstellen."
+
+#: groupadd.8.xml:321(para)
+msgid "GID not unique (when <option>-o</option> not used)"
+msgstr "GID nicht eindeutig (wenn <option>-o</option> nicht angegeben wird)"
+
+#: groupadd.8.xml:327(para)
+msgid "group name not unique"
+msgstr "Gruppenname nicht eindeutig"
+
+#: groupadd.8.xml:297(para)
+msgid ""
+"The <command>groupadd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Der Befehl <command>groupadd</command> gibt beim Beenden folgende Werte "
+"zurück: <placeholder-1/>"
+
+#: groupadd.8.xml:342(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: gpasswd.1.xml:44(firstname)
+msgid "Rafal"
+msgstr "Rafal"
+
+#: gpasswd.1.xml:45(surname)
+msgid "Maszkowski"
+msgstr "Maszkowski"
+
+#: gpasswd.1.xml:71(phrase)
+msgid "administer <placeholder-1/>"
+msgstr "verwaltet <placeholder-1/>"
+
+#: gpasswd.1.xml:74(phrase)
+msgid "administer <placeholder-1/> and <placeholder-2/>"
+msgstr "verwaltet <placeholder-1/> und <placeholder-2/>"
+
+#: gpasswd.1.xml:85(replaceable) expiry.1.xml:76(replaceable)
+msgid "option"
+msgstr "Option"
+
+#: gpasswd.1.xml:95(para)
+msgid ""
+"The <command>gpasswd</command> command is used to administer <filename>/etc/"
+"group</filename><phrase condition=\"gshadow\">, and <filename>/etc/gshadow</"
+"filename></phrase>. Every group can have <phrase condition=\"gshadow"
+"\">administrators,</phrase> members and a password."
+msgstr ""
+"Der Befehl <command>gpasswd</command> dient zur Verwaltung von <filename>/"
+"etc/group</filename><phrase condition=\"gshadow\"> und <filename>/etc/"
+"gshadow</filename></phrase>. Jede Gruppe kann <phrase condition=\"gshadow"
+"\">Gruppenverwalter,</phrase> Mitglieder und ein Passwort haben."
+
+#: gpasswd.1.xml:103(para)
+msgid ""
+"System administrators can use the <option>-A</option> option to define group "
+"administrator(s) and the <option>-M</option> option to define members. They "
+"have all rights of group administrators and members."
+msgstr ""
+"Der Systemadministrator kann mit der Option <option>-A</option> "
+"Gruppenverwalter bestimmen. Mit der Option <option>-M</option> legt er die "
+"Mitglieder fest. Er besitzt alle Rechte, die Gruppenverwalter und Mitglieder "
+"haben können."
+
+#: gpasswd.1.xml:108(para)
+msgid ""
+"<command>gpasswd</command> called by <phrase condition=\"gshadow\">a group "
+"administrator</phrase><phrase condition=\"no_gshadow\">a system "
+"administrator</phrase> with a group name only prompts for the new password "
+"of the <replaceable>group</replaceable>."
+msgstr ""
+"Wenn ein <phrase condition=\"gshadow\">Gruppenverwalter</phrase><phrase "
+"condition=\"no_gshadow\">Systemadministrator</phrase> <command>gpasswd</"
+"command> nur mit dem Gruppennamen aufruft, wird er aufgefordert, für die "
+"<replaceable>Gruppe</replaceable> ein neues Passwort zu vergeben."
+
+#: gpasswd.1.xml:115(para)
+msgid ""
+"If a password is set the members can still use "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> without a password, and non-members must supply the password."
+msgstr ""
+"Wenn ein Passwort vergeben wurde, können Mitglieder der Gruppe dennoch ohne "
+"Passwort <citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry> ausführen. Alle anderen Benutzer benötigen dazu "
+"das Passwort."
+
+#: gpasswd.1.xml:123(title)
+msgid "Notes about group passwords"
+msgstr "Hinweise zu Gruppenpasswörtern"
+
+#: gpasswd.1.xml:124(para)
+msgid ""
+"Group passwords are an inherent security problem since more than one person "
+"is permitted to know the password. However, groups are a useful tool for "
+"permitting co-operation between different users."
+msgstr ""
+"Gruppenpasswörter beinhalten ein Sicherheitsrisiko, da mehrere Personen das "
+"Passwort kennen. Dennoch können sie sinnvoll sein, um die Zusammenarbeit "
+"zwischen Benutzern zu erleichtern."
+
+#: gpasswd.1.xml:135(para)
+msgid ""
+"Except for the <option>-A</option> and <option>-M</option> options, the "
+"options cannot be combined."
+msgstr ""
+"Außer die Optionen <option>-A</option> und <option>-M</option> können die "
+"übrigen Optionen nicht zusammen verwendet werden."
+
+#: gpasswd.1.xml:139(para)
+msgid "The options cannot be combined."
+msgstr "Die Optionen können nicht zusammen verwendet werden."
+
+#: gpasswd.1.xml:142(para)
+msgid "The options which apply to the <command>gpasswd</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>gpasswd</command> unterstützt werden, "
+"sind:"
+
+#: gpasswd.1.xml:147(term)
+msgid ""
+"<option>-a</option>, <option>--add</option>&nbsp;<replaceable>user</"
+"replaceable>"
+msgstr ""
+"<option>-a</option>, <option>--add</option>&nbsp;<replaceable>Benutzer</"
+"replaceable>"
+
+#: gpasswd.1.xml:151(para)
+msgid ""
+"Add the <replaceable>user</replaceable> to the named <replaceable>group</"
+"replaceable>."
+msgstr ""
+"Fügt den <replaceable>Benutzer</replaceable> der bezeichneten "
+"<replaceable>Gruppe</replaceable> zu."
+
+#: gpasswd.1.xml:160(term)
+msgid ""
+"<option>-d</option>, <option>--delete</option>&nbsp;<replaceable>user</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--delete</option>&nbsp;<replaceable>Benutzer</"
+"replaceable>"
+
+#: gpasswd.1.xml:164(para)
+msgid ""
+"Remove the <replaceable>user</replaceable> from the named "
+"<replaceable>group</replaceable>."
+msgstr ""
+"entfernt den <replaceable>Benutzer</replaceable> aus der bezeichneten "
+"<replaceable>Gruppe</replaceable>"
+
+#: gpasswd.1.xml:181(term)
+msgid ""
+"<option>-Q</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-Q</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_VERZ</"
+"replaceable>"
+
+#: gpasswd.1.xml:195(term)
+msgid "<option>-r</option>, <option>--remove-password</option>"
+msgstr "<option>-r</option>, <option>--remove-password</option>"
+
+#: gpasswd.1.xml:199(para)
+msgid ""
+"Remove the password from the named <replaceable>group</replaceable>. The "
+"group password will be empty. Only group members will be allowed to use "
+"<command>newgrp</command> to join the named <replaceable>group</replaceable>."
+msgstr ""
+"Entfernt das Passwort der bezeichneten <replaceable>Gruppe</replaceable>. "
+"Das Gruppenpasswort wird leer sein. Damit können nur noch Gruppenmitglieder "
+"mit <command>newgrp</command> zu der bezeichneten <replaceable>Gruppe</"
+"replaceable> wechseln."
+
+#: gpasswd.1.xml:211(term)
+msgid "<option>-R</option>, <option>--restrict</option>"
+msgstr "<option>-R</option>, <option>--restrict</option>"
+
+#: gpasswd.1.xml:215(para)
+msgid ""
+"Restrict the access to the named <replaceable>group</replaceable>. The group "
+"password is set to \"!\". Only group members with a password will be allowed "
+"to use <command>newgrp</command> to join the named <replaceable>group</"
+"replaceable>."
+msgstr ""
+"Schränkt den Zugang zur bezeichneten <replaceable>Gruppe</replaceable> ein. "
+"Das Gruppenpasswort wird auf »!« gesetzt. Damit können nur noch "
+"Gruppenmitglieder mit einem Passwort mit <command>newgrp</command> zu der "
+"bezeichneten <replaceable>Gruppe</replaceable> wechseln."
+
+#: gpasswd.1.xml:227(term)
+msgid ""
+"<option>-A</option>, <option>--administrators</option>&nbsp;"
+"<replaceable>user</replaceable>,..."
+msgstr ""
+"<option>-A</option>, <option>--administrators</option>&nbsp;"
+"<replaceable>Benutzer</replaceable>, ..."
+
+#: gpasswd.1.xml:231(para)
+msgid "Set the list of administrative users."
+msgstr "Liste der Gruppenverwalter bestimmen"
+
+#: gpasswd.1.xml:239(term)
+msgid ""
+"<option>-M</option>, <option>--members</option>&nbsp;<replaceable>user</"
+"replaceable>,..."
+msgstr ""
+"<option>-M</option>, <option>--members</option>&nbsp;<replaceable>Benutzer</"
+"replaceable>, ..."
+
+#: gpasswd.1.xml:243(para)
+msgid "Set the list of group members."
+msgstr "Liste der Mitglieder der Gruppe bestimmen"
+
+#: gpasswd.1.xml:253(para)
+msgid ""
+"This tool only operates on the <filename>/etc/group</filename><phrase "
+"condition=\"gshadow\"> and <filename>/etc/gshadow</filename> files.</"
+"phrase><phrase condition=\"no_gshadow\">file.</phrase> Thus you cannot "
+"change any NIS or LDAP group. This must be performed on the corresponding "
+"server."
+msgstr ""
+"Dieses Werkzeug bearbeitet nur <phrase condition=\"gshadow\">die Dateien "
+"<filename>/etc/group</filename> und <filename>/etc/gshadow</filename> </"
+"phrase><phrase condition=\"no_gshadow\">die Datei <filename>/etc/group</"
+"filename></phrase>. Sie können daher keine NIS- oder LDAP-Gruppen "
+"bearbeiten. Dies muss auf dem entsprechenden Server durchgeführt werden."
+
+#: gpasswd.1.xml:298(para)
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition="
+"\"gshadow\">, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition="
+"\"gshadow\">, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+
+#: faillog.8.xml:57(refentrytitle) faillog.8.xml:64(refname)
+#: faillog.8.xml:70(command) faillog.5.xml:57(refentrytitle)
+#: faillog.5.xml:64(refname) faillog.5.xml:111(refentrytitle)
+msgid "faillog"
+msgstr "faillog"
+
+#: faillog.8.xml:65(refpurpose)
+msgid "display faillog records or set login failure limits"
+msgstr ""
+"zeigt Aufzeichnungen der fehlgeschlagenen Anmeldungen an oder richtet "
+"Beschränkungen für fehlgeschlagene Anmeldungen ein"
+
+#: faillog.8.xml:79(para)
+msgid ""
+"<command>faillog</command> displays the contents of the failure log database "
+"(<filename>/var/log/faillog</filename>). It can also set the failure "
+"counters and limits. When <command>faillog</command> is run without "
+"arguments, it only displays the faillog records of the users who had a login "
+"failure."
+msgstr ""
+"<command>faillog</command> zeigt den Inhalt der Datenbank der "
+"fehlgeschlagenen Anmeldungen (<filename>/var/log/faillog</filename>) an. Es "
+"kann auch die Zählung und Beschränkung der Fehlversuche verwalten. Wenn "
+"<command>faillog</command> ohne Optionen ausgeführt wird, wird nur die Liste "
+"der fehlgeschlagenen Anmeldungen aller Benutzer angezeigt, deren Anmeldung "
+"jemals gescheitert ist."
+
+#: faillog.8.xml:90(para)
+msgid "The options which apply to the <command>faillog</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>faillog</command> unterstützt werden, "
+"sind:"
+
+#: faillog.8.xml:98(para)
+msgid ""
+"Display (or act on) faillog records for all users having an entry in the "
+"<filename>faillog</filename> database."
+msgstr ""
+"zeigt (oder bearbeitet) die faillog-Einträge aller Benutzer, die einen "
+"Eintrag in der Datenbank <filename>faillog</filename> haben"
+
+#: faillog.8.xml:102(para)
+msgid ""
+"The range of users can be restricted with the <option>-u</option> option."
+msgstr ""
+"Die Spanne der Benutzer kann mit der Option <option>-u</option> eingegrenzt "
+"werden."
+
+#: faillog.8.xml:106(para)
+msgid ""
+"In display mode, this is still restricted to existing users but forces the "
+"display of the faillog entries even if they are empty."
+msgstr ""
+"Im Anzeigemodus ist dies auf vorhandene Benutzer beschränkt, erzwingt aber "
+"die Anzeige der Faillog-Einträge, auch wenn diese leer sind."
+
+#: faillog.8.xml:111(para)
+msgid ""
+"With the <option>-l</option>, <option>-m</option>, <option>-r</option>, "
+"<option>-t</option> options, the users' records are changed, even if the "
+"user does not exist on the system. This is useful to reset records of users "
+"that have been deleted or to set a policy in advance for a range of users."
+msgstr ""
+"Mit den Optionen <option>-l</option>, <option>-m</option>, <option>-r</"
+"option> und <option>-t</option> werden die Benutzereinträge selbst dann "
+"geändert, wenn der Benutzer auf dem System nicht vorhanden ist. Dies kann "
+"sinnvoll sein, wenn die Einträge von gelöschten Benutzer zurückgesetzt "
+"werden sollen oder vorsorglich eine Richtlinie für eine Anzahl von Benutzern "
+"eingerichtet werden soll."
+
+#: faillog.8.xml:128(term)
+msgid ""
+"<option>-l</option>, <option>--lock-secs</option>&nbsp;<replaceable>SEC</"
+"replaceable>"
+msgstr ""
+"<option>-l</option>, <option>--lock-secs</option>&nbsp;<replaceable>SEK</"
+"replaceable>"
+
+#: faillog.8.xml:132(para)
+msgid ""
+"Lock account for <replaceable>SEC</replaceable> seconds after failed login."
+msgstr ""
+"sperrt nach einer fehlgeschlagenen Anmeldung das Konto für <replaceable>SEK</"
+"replaceable> Sekunden"
+
+#: faillog.8.xml:136(para) faillog.8.xml:161(para) faillog.8.xml:173(para)
+msgid ""
+"Write access to <filename>/var/log/faillog</filename> is required for this "
+"option."
+msgstr ""
+"Für diese Option muss ein Schreibzugriff auf <filename>/var/log/faillog</"
+"filename> bestehen."
+
+#: faillog.8.xml:143(term)
+msgid ""
+"<option>-m</option>, <option>--maximum</option>&nbsp;<replaceable>MAX</"
+"replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--maximum</option>&nbsp;<replaceable>MAX</"
+"replaceable>"
+
+#: faillog.8.xml:147(para)
+msgid ""
+"Set the maximum number of login failures after the account is disabled to "
+"<replaceable>MAX</replaceable>."
+msgstr ""
+"setzt den Zähler der fehlgeschlagene Anmeldungen, nach denen das Konto "
+"abgeschaltet wird, auf <replaceable>MAX</replaceable>"
+
+#: faillog.8.xml:151(para)
+msgid ""
+"Selecting a <replaceable>MAX</replaceable> value of 0 has the effect of not "
+"placing a limit on the number of failed logins."
+msgstr ""
+"Wenn <replaceable>MAX</replaceable> den Wert 0 hat, besteht keine "
+"Beschränkung für die Anzahl fehlgeschlagener Anmeldeversuche."
+
+#: faillog.8.xml:156(para)
+msgid ""
+"The maximum failure count should always be 0 for <emphasis>root</emphasis> "
+"to prevent a denial of services attack against the system."
+msgstr ""
+"Für <emphasis>root</emphasis> sollte der Wert der maximalen Anmeldeversuche "
+"immer 0 betragen, um eine durch einen Angriff ausgelöste Dienstverweigerung "
+"(denial of service) zu verhindern."
+
+#: faillog.8.xml:168(term)
+msgid "<option>-r</option>, <option>--reset</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: faillog.8.xml:170(para)
+msgid "Reset the counters of login failures."
+msgstr "setzt die Zählerstände der fehlgeschlagenen Anmeldeversuche zurück"
+
+#: faillog.8.xml:195(para)
+msgid ""
+"Display faillog records more recent than <replaceable>DAYS</replaceable>."
+msgstr ""
+"zeigt die Einträge der fehlgeschlagenen Anmeldungen an, die aktueller als "
+"<replaceable>TAGE</replaceable> sind"
+
+#: faillog.8.xml:206(para)
+msgid ""
+"Display faillog record or maintains failure counters and limits (if used "
+"with <option>-l</option>, <option>-m</option> or <option>-r</option> "
+"options) only for the specified user(s)."
+msgstr ""
+"zeigt die Aufzeichnungen der fehlgeschlagenen Anmeldungen nur der "
+"angegebenen Benutzer an oder bearbeitet (wenn mit den Optionen <option>-l</"
+"option>, <option>-m</option> oder <option>-r</option> verwendet) nur deren "
+"Zählerstände und Beschränkungen"
+
+#: faillog.8.xml:224(para)
+msgid ""
+"When none of the <option>-l</option>, <option>-m</option>, or <option>-r</"
+"option> options are used, <command>faillog</command> displays the faillog "
+"record of the specified user(s)."
+msgstr ""
+"Wenn keine der Optionen <option>-l</option>, <option>-m</option> oder "
+"<option>-r</option> verwendet wird, zeigt <command>faillog</command> die "
+"Aufzeichnung der fehlgeschlagenen Anmeldeversuche der angegebenen Benutzer "
+"an."
+
+#: faillog.8.xml:233(para)
+msgid ""
+"<command>faillog</command> only prints out users with no successful login "
+"since the last failure. To print out a user who has had a successful login "
+"since their last failure, you must explicitly request the user with the "
+"<option>-u</option> flag, or print out all users with the <option>-a</"
+"option> flag."
+msgstr ""
+"<command>faillog</command> zeigt nur die Benutzer an, die sich seit der "
+"letzten fehlgeschlagenen Anmeldung nicht erfolgreich anmelden konnten. Um "
+"die übrigen Benutzer anzuzeigen, müssen Sie diese explizit mit der Option "
+"<option>-u</option> benennen oder sich alle Benutzer mit der Option <option>-"
+"a</option> anzeigen lassen."
+
+#: faillog.8.xml:246(filename) faillog.5.xml:99(filename)
+msgid "/var/log/faillog"
+msgstr "/var/log/faillog"
+
+#: faillog.8.xml:248(para) faillog.5.xml:101(para)
+msgid "Failure logging file."
+msgstr "Datei mit fehlgeschlagenen Anmeldungen"
+
+#: faillog.8.xml:256(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>faillog</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>faillog</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: faillog.5.xml:65(refpurpose)
+msgid "login failure logging file"
+msgstr "Datei mit fehlgeschlagenen Anmeldungen"
+
+#: faillog.5.xml:70(para)
+msgid ""
+"<filename>/var/log/faillog</filename> maintains a count of login failures "
+"and the limits for each account."
+msgstr ""
+"In <filename>/var/log/faillog</filename> wird der Zählerstand von "
+"fehlgeschlagenen Anmeldungen und die Beschränkungen für jedes Konto "
+"niedergelegt."
+
+#: faillog.5.xml:74(para)
+msgid ""
+"The file contains fixed length records, indexed by numerical UID. Each "
+"record contains the count of login failures since the last successful login; "
+"the maximum number of failures before the account is disabled; the line on "
+"which the last login failure occurred; the date of the last login failure; "
+"and the duration (in seconds) during which the account will be locked after "
+"a failure."
+msgstr ""
+"Einträge in dieser Datei haben eine festgelegte Länge und sind der "
+"zahlenmäßigen UID nach angeordnet. Jeder Eintrag besteht aus der Anzahl der "
+"fehlgeschlagenen Anmeldungen seit der letzten erfolgreichen Anmeldung, der "
+"maximalen Anzahl von Fehlschlägen, ehe das Konto abgeschaltet wird, dem "
+"Gerät, auf dem die letzte fehlgeschlagene Anmeldung erfolgte, das Datum der "
+"letzten fehlgeschlagenen Anmeldung und die Dauer in Sekunden, für die das "
+"Konto nach einem Fehlschlag gesperrt ist."
+
+#: faillog.5.xml:84(para)
+msgid "The structure of the file is:"
+msgstr "Die Datei ist so aufgebaut:"
+
+#: faillog.5.xml:85(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort fail_cnt;\n"
+"\tshort fail_max;\n"
+"\tchar fail_line[12];\n"
+"\ttime_t fail_time;\n"
+"\tlong fail_locktime;\n"
+"};"
+msgstr ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort fail_cnt;\n"
+"\tshort fail_max;\n"
+"\tchar fail_line[12];\n"
+"\ttime_t fail_time;\n"
+"\tlong fail_locktime;\n"
+"};"
+
+#: expiry.1.xml:45(contrib) chsh.1.xml:44(contrib) chfn.1.xml:44(contrib)
+#: chage.1.xml:42(contrib)
+msgid "Creation, 1990"
+msgstr "ursprünglicher Autor, 1990"
+
+#: expiry.1.xml:61(refentrytitle) expiry.1.xml:68(refname)
+#: expiry.1.xml:74(command)
+msgid "expiry"
+msgstr "expiry"
+
+#: expiry.1.xml:69(refpurpose)
+msgid "check and enforce password expiration policy"
+msgstr "überprüft die Regeln für den Verfall des Passworts und setzt diese um"
+
+#: expiry.1.xml:83(para)
+msgid ""
+"The <command>expiry</command> command checks (<option>-c</option>) the "
+"current password expiration and forces (<option>-f</option>) changes when "
+"required. It is callable as a normal user command."
+msgstr ""
+"Mit der Option <option>-c</option> überprüft der Befehl <command>expiry</"
+"command> den aktuellen Status des Verfalls des Passworts. Mit der Option "
+"<option>-f</option> werden die notwendigen Veränderungen umgesetzt. Er kann "
+"von normalen Benutzern aufgerufen werden."
+
+#: expiry.1.xml:92(para)
+msgid "The options which apply to the <command>expiry</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>expiry</command> unterstützt werden, "
+"sind:"
+
+#: expiry.1.xml:97(term)
+msgid "<option>-c</option>, <option>--check</option>"
+msgstr "<option>-c</option>, <option>--check</option>"
+
+#: expiry.1.xml:99(para)
+msgid "Check the password expiration of the current user."
+msgstr "überprüft den Verfall des Passworts des aktuellen Benutzers"
+
+#: expiry.1.xml:105(para)
+msgid "Force a password change if the current user has an expired password."
+msgstr ""
+"erzwingt den Wechsel des Passworts des aktuellen Benutzers, falls dieses "
+"abgelaufen ist"
+
+#: expiry.1.xml:140(para) chage.1.xml:318(para)
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+# SB: Translation of chsh.1 based on Josef Spillner's
+# (josef@ggzgamingzone.org) from 2003. Mention somewhere else as well?
+#: chsh.1.xml:68(refpurpose)
+msgid "change login shell"
+msgstr "ändert die Anmelde-Shell"
+
+#: chsh.1.xml:85(para)
+msgid ""
+"The <command>chsh</command> command changes the user login shell. This "
+"determines the name of the user's initial login command. A normal user may "
+"only change the login shell for her own account; the superuser may change "
+"the login shell for any account."
+msgstr ""
+"Der Befehl <command>chsh</command> ändert die Anmelde-Shell eines Benutzers. "
+"Er legt den Befehl fest, der bei der Anmeldung ausgeführt wird. Ein normaler "
+"Benutzer kann nur die Anmelde-Shell seines eigenen Kontos ändern, während "
+"Root dies für alle Konten darf."
+
+#: chsh.1.xml:96(para)
+msgid "The options which apply to the <command>chsh</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>chsh</command> unterstützt werden, "
+"sind:"
+
+#: chsh.1.xml:130(para)
+msgid ""
+"If the <option>-s</option> option is not selected, <command>chsh</command> "
+"operates in an interactive fashion, prompting the user with the current "
+"login shell. Enter the new value to change the shell, or leave the line "
+"blank to use the current one. The current shell is displayed between a pair "
+"of <emphasis>[ ]</emphasis> marks."
+msgstr ""
+"Wenn die Option <option>-s</option> nicht ausgewählt ist, wird "
+"<command>chsh</command> im interaktiven Modus betrieben. Dabei wird der "
+"Benutzer mit der aktuellen Anmelde-Shell zur Eingabe einer neuen "
+"aufgefordert. Durch Eingabe eines Wertes wird die Shell geändert, während "
+"sie bei einer leeren Zeile beibehalten wird. Die aktuelle Shell wird "
+"zwischen einem Paar von <emphasis>[ ]</emphasis> angezeigt."
+
+#: chsh.1.xml:141(para)
+msgid ""
+"The only restriction placed on the login shell is that the command name must "
+"be listed in <filename>/etc/shells</filename>, unless the invoker is the "
+"superuser, and then any value may be added. An account with a restricted "
+"login shell may not change her login shell. For this reason, placing "
+"<filename>/bin/rsh</filename> in <filename>/etc/shells</filename> is "
+"discouraged since accidentally changing to a restricted shell would prevent "
+"the user from ever changing her login shell back to its original value."
+msgstr ""
+"Die einzige Beschränkung für die Anmelde-Shell ist, dass der Name des "
+"Befehls in der Datei <filename>/etc/shells</filename> enthalten sein muss. "
+"Root darf allerdings jeden beliebigen Befehl vergeben. Bei Konten, denen "
+"eine beschränkte Anmelde-Shell zugewiesen ist, ist es nicht möglich, die "
+"Anmelde-Shell zu ändern. Daher ist es nicht ratsam, <filename>/bin/rsh</"
+"filename> in <filename>/etc/shells</filename> einzutragen, da ein Benutzer "
+"nicht zu seiner ursprünglichen Anmelde-Shell zurückwechseln kann, falls er "
+"versehentlich eine beschränkte Shell als Anmelde-Shell auswählt."
+
+#: chsh.1.xml:176(filename)
+msgid "/etc/shells"
+msgstr "/etc/shells"
+
+#: chsh.1.xml:178(para)
+msgid "List of valid login shells."
+msgstr "Liste der möglichen Anmelde-Shells"
+
+#: chsh.1.xml:192(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: chpasswd.8.xml:69(refpurpose)
+msgid "update passwords in batch mode"
+msgstr "aktualisiert Passwörter im Batch-Modus"
+
+#: chpasswd.8.xml:83(para)
+msgid ""
+"The <command>chpasswd</command> command reads a list of user name and "
+"password pairs from standard input and uses this information to update a "
+"group of existing users. Each line is of the format:"
+msgstr ""
+"Der Befehl <command>chpasswd</command> liest eine Liste von Benutzername-"
+"Passwort-Paaren von der Standardeingabe. Damit werden Benutzerdaten "
+"aktualisiert. Jede Zeile muss folgendes Format haben:"
+
+#: chpasswd.8.xml:88(para)
+msgid ""
+"<emphasis remap=\"I\">user_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">Benutzername</emphasis>:<emphasis remap=\"I"
+"\">Passwort</emphasis>"
+
+#: chpasswd.8.xml:92(para)
+msgid ""
+"By default the passwords must be supplied in clear-text, and are encrypted "
+"by <command>chpasswd</command>. Also the password age will be updated, if "
+"present."
+msgstr ""
+"Das Passwort muss standardmäßig im Klartext angegeben werden und von "
+"<command>chpasswd</command> verschlüsselt. Soweit vorhanden, wird auch das "
+"Alter des Passworts aktualisiert."
+
+#: chpasswd.8.xml:97(para)
+#, fuzzy
+#| msgid ""
+#| "The default encryption algorithm can be defined for the system with the "
+#| "<option>ENCRYPT_METHOD</option> or <option>MD5_CRYPT_ENAB</option> "
+#| "variables of <filename>/etc/login.defs</filename>, and can be overwitten "
+#| "with the <option>-e</option>, <option>-m</option>, or <option>-c</option> "
+#| "options."
+msgid ""
+"The default encryption algorithm can be defined for the system with the "
+"<option>ENCRYPT_METHOD</option> or <option>MD5_CRYPT_ENAB</option> variables "
+"of <filename>/etc/login.defs</filename>, and can be overwritten with the "
+"<option>-e</option>, <option>-m</option>, or <option>-c</option> options."
+msgstr ""
+"Der standardmäßige Verschlüsselungsalgorithmus kann systemweit mit den "
+"Variablen <option>ENCRYPT_METHOD</option> oder <option>MD5_CRYPT_ENAB</"
+"option> in <filename>/etc/login.defs</filename> definiert werden. Dieser "
+"kann mit den Optionen <option>-e</option>, <option>-m</option> oder <option>-"
+"c</option> überschrieben werden."
+
+#: chpasswd.8.xml:105(para)
+msgid ""
+"By default, passwords are encrypted by PAM, but (even if not recommended) "
+"you can select a different encryption method with the <option>-e</option>, "
+"<option>-m</option>, or <option>-c</option> options."
+msgstr ""
+"Standardmäßig werden die Passwörter von PAM verschlüsselt. Sie können aber "
+"eine andere Verschlüsselungsmethode mit den Optionen <option>-e</option>, "
+"<option>-m</option> oder <option>-c</option> festlegen (dies wird jedoch "
+"nicht angeraten)."
+
+#: chpasswd.8.xml:111(para)
+#, fuzzy
+#| msgid ""
+#| "<phrase condition=\"pam\">Except when PAM is used to encrypt the "
+#| "passwords,</phrase><command>chpasswd</command> first updates all the "
+#| "passwords in memory, and then commits all the changes to disk if no "
+#| "errors occured for any user."
+msgid ""
+"<phrase condition=\"pam\">Except when PAM is used to encrypt the passwords,</"
+"phrase><command>chpasswd</command> first updates all the passwords in "
+"memory, and then commits all the changes to disk if no errors occurred for "
+"any user."
+msgstr ""
+"<phrase condition=\"pam\">PAM wird nicht zur Verschlüsselung der Passwörter "
+"verwendet:</phrase><command>chpasswd</command> aktualisiert zunächst alle "
+"Passwörter im Arbeitsspeicher und schreibt dann die Änderungen auf das "
+"Speichermedium, falls keine Fehler aufgetreten sind."
+
+#: chpasswd.8.xml:117(para)
+msgid ""
+"When PAM is used to encrypt the passwords (and update the passwords in the "
+"system database) then if a password cannot be updated <command>chpasswd</"
+"command> continues updating the passwords of the next users, and will return "
+"an error code on exit."
+msgstr ""
+"Wenn PAM zur Verschlüsselung der Passwörter (und ihrer Aktualisierung in der "
+"Systemdatenbank) verwendet wird, wird <command>chpasswd</command> die "
+"Aktualisierung der Passwörter auch dann fortsetzen, wenn ein Passwort nicht "
+"geändert werden kann, und beim Beenden eine Fehlermeldung zurückgeben."
+
+#: chpasswd.8.xml:123(para) chgpasswd.8.xml:98(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are created at a single time."
+msgstr ""
+"Dieser Befehl ist für den Einsatz in großen Umgebungen vorgesehen, in der "
+"viele Konten gleichzeitig erstellt werden müssen."
+
+#: chpasswd.8.xml:131(para)
+msgid "The options which apply to the <command>chpasswd</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>chpasswd</command> unterstützt werden, "
+"sind:"
+
+#: chpasswd.8.xml:137(term)
+msgid ""
+"<option>-c</option>, <option>--crypt-method</option>&nbsp;"
+"<replaceable>METHOD</replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--crypt-method</option>&nbsp;"
+"<replaceable>METHODE</replaceable>"
+
+#: chpasswd.8.xml:142(para) chgpasswd.8.xml:115(para)
+msgid "The available methods are DES, MD5, and NONE."
+msgstr "Die verfügbaren Methoden sind DES, MD5 und NONE."
+
+#: chpasswd.8.xml:149(para)
+msgid "By default, PAM is used to encrypt the passwords."
+msgstr "Standardmäßig verschlüsselt PAM die Passwörter."
+
+#: chpasswd.8.xml:152(para)
+msgid ""
+"By default (if none of the <option>-c</option>, <option>-m</option>, or "
+"<option>-e</option> options are specified), the encryption method is defined "
+"by the <option>ENCRYPT_METHOD</option> or <option>MD5_CRYPT_ENAB</option> "
+"variables of <filename>/etc/login.defs</filename>."
+msgstr ""
+"Standardmäßig (wenn keine der Optionen <option>-c</option>, <option>-m</"
+"option> oder <option>-e</option> angegeben wird) wird die "
+"Verschlüsselungsmethode durch die Variablen <option>ENCRYPT_METHOD</option> "
+"oder <option>MD5_CRYPT_ENAB</option> in <filename>/etc/login.defs</filename> "
+"bestimmt."
+
+#: chpasswd.8.xml:163(term) chgpasswd.8.xml:125(term)
+msgid "<option>-e</option>, <option>--encrypted</option>"
+msgstr "<option>-e</option>, <option>--encrypted</option>"
+
+#: chpasswd.8.xml:165(para) chgpasswd.8.xml:127(para)
+msgid "Supplied passwords are in encrypted form."
+msgstr "Passwörter werden verschlüsselt angegeben."
+
+#: chpasswd.8.xml:179(term) chgpasswd.8.xml:137(term)
+msgid "<option>-m</option>, <option>--md5</option>"
+msgstr "<option>-m</option>, <option>--md5</option>"
+
+#: chpasswd.8.xml:181(para) chgpasswd.8.xml:139(para)
+msgid ""
+"Use MD5 encryption instead of DES when the supplied passwords are not "
+"encrypted."
+msgstr ""
+"werwendet zur Verschlüsselung MD5 anstelle von DES, wenn die Passwörter "
+"unverschlüsselt angegeben werden"
+
+#: chpasswd.8.xml:200(term)
+msgid ""
+"<option>-s</option>, <option>--sha-rounds</option>&nbsp;<replaceable>ROUNDS</"
+"replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--sha-rounds</option>&nbsp;<replaceable>RUNDEN</"
+"replaceable>"
+
+#: chpasswd.8.xml:219(para)
+msgid ""
+"By default, the number of rounds is defined by the "
+"<option>SHA_CRYPT_MIN_ROUNDS</option> and <option>SHA_CRYPT_MAX_ROUNDS</"
+"option> variables in <filename>/etc/login.defs</filename>."
+msgstr ""
+"Standardmäßig wird die Anzahl der Runden von den Variablen "
+"<option>SHA_CRYPT_MIN_ROUNDS</option> und <option>SHA_CRYPT_MAX_ROUNDS</"
+"option> <filename>/etc/login.defs</filename> bestimmt."
+
+#: chpasswd.8.xml:232(para) chgpasswd.8.xml:187(para)
+msgid ""
+"Remember to set permissions or umask to prevent readability of unencrypted "
+"files by other users."
+msgstr ""
+"Achten Sie darauf, dass die Rechte und Umask korrekt vergeben sind, um zu "
+"verhindern, dass andere Benutzer unverschlüsselte Dateien lesen können."
+
+#: chpasswd.8.xml:276(filename)
+msgid "/etc/pam.d/chpasswd"
+msgstr "/etc/pam.d/chpasswd"
+
+#: chpasswd.8.xml:278(para)
+msgid "PAM configuration for <command>chpasswd</command>."
+msgstr "PAM-Konfiguration für <command>chpasswd</command>"
+
+#: chpasswd.8.xml:286(para)
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>newusers</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<phrase><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>newusers</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<phrase><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: chgpasswd.8.xml:47(contrib)
+msgid "Creation, 2006"
+msgstr "ursprünglicher Autor, 2006"
+
+#: chgpasswd.8.xml:65(refpurpose)
+msgid "update group passwords in batch mode"
+msgstr "aktualisiert Gruppenpasswörter im Batch-Modus"
+
+#: chgpasswd.8.xml:79(para)
+msgid ""
+"The <command>chgpasswd</command> command reads a list of group name and "
+"password pairs from standard input and uses this information to update a set "
+"of existing groups. Each line is of the format:"
+msgstr ""
+"Der Befehl <command>chgpasswd</command> liest eine Liste von Gruppenname-"
+"Passwort-Paaren von der Standardeingabe. Damit werden Gruppendaten "
+"aktualisiert. Jede Zeile muss folgendes Format haben:"
+
+#: chgpasswd.8.xml:84(para)
+msgid ""
+"<emphasis remap=\"I\">group_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">Gruppenname</emphasis>:<emphasis remap=\"I\">Passwort</"
+"emphasis>"
+
+#: chgpasswd.8.xml:88(para)
+msgid ""
+"By default the supplied password must be in clear-text, and is encrypted by "
+"<command>chgpasswd</command>."
+msgstr ""
+"Das Passwort wird standardmäßig im Klartext angegeben. Die "
+"Standardalgorithmus zur Verschlüsselung ist DES."
+
+#: chgpasswd.8.xml:92(para)
+#, fuzzy
+#| msgid ""
+#| "The default encryption algorithm can be defined for the system with the "
+#| "<option>ENCRYPT_METHOD</option> variable of <filename>/etc/login.defs</"
+#| "filename>, and can be overwiten with the <option>-e</option>, <option>-m</"
+#| "option>, or <option>-c</option> options."
+msgid ""
+"The default encryption algorithm can be defined for the system with the "
+"<option>ENCRYPT_METHOD</option> variable of <filename>/etc/login.defs</"
+"filename>, and can be overwritten with the <option>-e</option>, <option>-m</"
+"option>, or <option>-c</option> options."
+msgstr ""
+"Der standardmäßige Verschlüsselungsalgorithmus wird systemweit mit der "
+"Variable <option>ENCRYPT_METHOD</option> in <filename>/etc/login.defs</"
+"filename> bestimmt. Dies kann mit den Optionen <option>-e</option>, <option>-"
+"m</option> oder <option>-c</option> überschrieben werden."
+
+#: chgpasswd.8.xml:106(para)
+msgid ""
+"The options which apply to the <command>chgpasswd</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>chgpasswd</command> unterstützt "
+"werden, sind:"
+
+#: chgpasswd.8.xml:238(para)
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+
+# SB: Translation of chfn.1 based on Josef Spillner's
+# (josef@ggzgamingzone.org) from 2003. Mention somewhere else as well?
+#: chfn.1.xml:68(refpurpose)
+msgid "change real user name and information"
+msgstr ""
+"ändert den vollständigen Namen eines Benutzers und sonstige Informationen"
+
+#: chfn.1.xml:85(para)
+msgid ""
+"The <command>chfn</command> command changes user fullname, office room "
+"number, office phone number, and home phone number information for a user's "
+"account. This information is typically printed by "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> and similar programs. A normal user may only change the fields "
+"for her own account, subject to the restrictions in <filename>/etc/login."
+"defs</filename>. (The default configuration is to prevent users from "
+"changing their fullname.) The superuser may change any field for any "
+"account. Additionally, only the superuser may use the <option>-o</option> "
+"option to change the undefined portions of the GECOS field."
+msgstr ""
+"Der Befehl <command>chfn</command> ändert den vollständigen Namen, die "
+"Bürozimmernummer sowie die berufliche und private Telefonnummer für ein "
+"Benutzerkonto. Diese Informationen werden typischerweise von "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> und ähnlichen Programmen verwendet. Ein normaler Benutzer darf "
+"nur die Felder seines eigenen Kontos ändern und muss dabei zudem die "
+"Einschränkungen in <filename>/etc/login.defs</filename> beachten. So ist es "
+"Benutzern standardmäßig nicht möglich, ihren vollständigen Namen zu ändern. "
+"Root kann die Felder aller Konten verändern. Außerdem darf nur Root mittels "
+"der Option <option>-o</option> die undefinierten Teile des GECOS-Feldes "
+"ändern."
+
+#: chfn.1.xml:99(para)
+msgid ""
+"These fields must not contain any colons. Except for the <emphasis remap=\"I"
+"\">other</emphasis> field, they should not contain any comma or equal sign. "
+"It is also recommended to avoid non-US-ASCII characters, but this is only "
+"enforced for the phone numbers. The <emphasis remap=\"I\">other</emphasis> "
+"field is used to store accounting information used by other applications."
+msgstr ""
+"Diese Felder dürfen keinen Doppelpunkt enthalten. Mit Ausnahme des Feldes "
+"<emphasis remap=\"I\">sonstiges</emphasis> sollten sie kein Komma oder "
+"Gleichheitszeichen enthalten. Außerdem wird abgeraten, andere Zeichen als US-"
+"ASCII zu verwenden, aber nur für die Telefonnummern ist dies zwingend. Das "
+"Feld <emphasis remap=\"I\">sonstiges</emphasis> wird von anderen Anwendungen "
+"verwendet, um dort Informationen über das Konto abzuspeichern."
+
+#: chfn.1.xml:112(para)
+msgid "The options which apply to the <command>chfn</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>chfn</command> unterstützt werden, "
+"sind:"
+
+#: chfn.1.xml:117(term)
+msgid ""
+"<option>-f</option>, <option>--full-name</option>&nbsp;"
+"<replaceable>FULL_NAME</replaceable>"
+msgstr ""
+"<option>-f</option>, <option>--full-name</option>&nbsp;"
+"<replaceable>VOLLSTÄNDIGER_NAME</replaceable>"
+
+#: chfn.1.xml:121(para)
+msgid "Change the user's full name."
+msgstr "verändert den vollständigen Namen des Benutzers"
+
+#: chfn.1.xml:125(term)
+msgid ""
+"<option>-h</option>, <option>--home-phone</option>&nbsp;"
+"<replaceable>HOME_PHONE</replaceable>"
+msgstr ""
+"<option>-h</option>, <option>--home-phone</option>&nbsp;"
+"<replaceable>TEL_PRIV</replaceable>"
+
+#: chfn.1.xml:129(para)
+msgid "Change the user's home phone number."
+msgstr "ändert die private Telefonnummer des Benutzers"
+
+#: chfn.1.xml:133(term)
+msgid ""
+"<option>-o</option>, <option>--other</option>&nbsp;<replaceable>OTHER</"
+"replaceable>"
+msgstr ""
+"<option>-o</option>, <option>--other</option>&nbsp;<replaceable>SONSTIGES</"
+"replaceable>"
+
+#: chfn.1.xml:137(para)
+msgid ""
+"Change the user's other GECOS information. This field is used to store "
+"accounting information used by other applications, and can be changed only "
+"by a superuser."
+msgstr ""
+"Verändert die sonstigen Informationen über den Benutzer in der GECOS-Zeile. "
+"In diesem Feld werden Kontoinformationen anderer Anwendungen gespeichert. Es "
+"kann nur vom Superuser verändert werden."
+
+#: chfn.1.xml:145(term)
+msgid ""
+"<option>-r</option>, <option>--room</option>&nbsp;<replaceable>ROOM_NUMBER</"
+"replaceable>"
+msgstr ""
+"<option>-r</option>, <option>--room</option>&nbsp;"
+"<replaceable>ZIMMER_NUMMER</replaceable>"
+
+#: chfn.1.xml:149(para)
+msgid "Change the user's room number."
+msgstr "ändert die Zimmernummer des Benutzers"
+
+#: chfn.1.xml:165(term)
+msgid "<option>-u</option>, <option>--help</option>"
+msgstr "<option>-u</option>, <option>--help</option>"
+
+#: chfn.1.xml:173(term)
+msgid ""
+"<option>-w</option>, <option>--work-phone</option>&nbsp;"
+"<replaceable>WORK_PHONE</replaceable>"
+msgstr ""
+"<option>-w</option>, <option>--work-phone</option>&nbsp;"
+"<replaceable>TEL_BERUF</replaceable>"
+
+#: chfn.1.xml:177(para)
+msgid "Change the user's office phone number."
+msgstr "verändert die berufliche Telefonnummer des Benutzers"
+
+#: chfn.1.xml:181(para)
+msgid ""
+"If none of the options are selected, <command>chfn</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis remap=\"B\">[ ]</emphasis> marks. Without options, <command>chfn</"
+"command> prompts for the current user account."
+msgstr ""
+"Wenn keine Option ausgewählt wird, arbeitet <command>chfn</command> "
+"interaktiv. Dabei wird der Benutzer nach den aktuellen Werten für alle "
+"Felder befragt. Bei Eingabe eines neuen Wertes wird dieser verwendet, bei "
+"keiner Eingabe stattdessen der Originalwert beibehalten. Der aktuelle Wert "
+"wird zwischen einem Paar von <emphasis remap=\"B\">[ ]</emphasis> angezeigt. "
+"Ohne Optionen fragt <command>chfn</command> nach einem Benutzerkonto."
+
+#: chfn.1.xml:226(para)
+msgid ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: chage.1.xml:66(refpurpose)
+msgid "change user password expiry information"
+msgstr "ändert die Information zum Passwortverfall"
+
+#: 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 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 "
+"Information bestimmt das System, wann ein Benutzer sein Passwort verändern "
+"muss."
+
+#: chage.1.xml:92(para)
+msgid "The options which apply to the <command>chage</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>chage</command> unterstützt werden, "
+"sind:"
+
+#: chage.1.xml:97(term)
+msgid ""
+"<option>-d</option>, <option>--lastday</option>&nbsp;<replaceable>LAST_DAY</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--lastday</option>&nbsp;"
+"<replaceable>LETZTER_TAG</replaceable>"
+
+# SB: So I could also do DD.MM.YYYY or MM.DD.YYYY? How does system know which format I chose?
+#: chage.1.xml:101(para)
+msgid ""
+"Set the number of days since January 1st, 1970 when the password was last "
+"changed. The date may also be expressed in the format YYYY-MM-DD (or the "
+"format more commonly used in your area)."
+msgstr ""
+"Legt die Anzahl der Tage, gerechnet ab dem 1. Januar 1970, fest, seit denen "
+"das Passwort das letzte Mal gewechselt wurde. Das Datum kann auch im Format "
+"JJJJ-MM-TT (oder in dem Format, das in Ihrer Region verbreitet ist) "
+"angegeben werden."
+
+#: chage.1.xml:109(term)
+msgid ""
+"<option>-E</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>EXPIRE_DATE</replaceable>"
+msgstr ""
+"<option>-E</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>VERFALLSDATUM</replaceable>"
+
+#: chage.1.xml:113(para)
+msgid ""
+"Set the date or number of days since January 1, 1970 on which the user's "
+"account will no longer be accessible. The date may also be expressed in the "
+"format YYYY-MM-DD (or the format more commonly used in your area). A user "
+"whose account is locked must contact the system administrator before being "
+"able to use the system again."
+msgstr ""
+"Setzt das Datum oder die Anzahl der Tage seit dem 1. Januar 1970, ab dem auf "
+"das Benutzerkonto nicht mehr zugegriffen werden kann. Das Datum kann auch im "
+"Format JJJJ-MM-TT (oder in dem Format, das in Ihrer Region verbreitet ist) "
+"angegeben werden. Ein Benutzer, dessen Konto gesperrt ist, muss sich mit dem "
+"Systemadministrator in Verbindung setzen, ehe er sich wieder am System "
+"anmelden kann."
+
+#: chage.1.xml:121(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>EXPIRE_DATE</replaceable> will remove an account expiration "
+"date."
+msgstr ""
+"Wenn <emphasis remap=\"I\">-1</emphasis> als <replaceable>VERFALLSDATUM</"
+"replaceable> angegeben wird, wird das Verfallsdatum für das Konto entfernt."
+
+#: chage.1.xml:135(term)
+#, fuzzy
+#| msgid "<option>-s</option>, <option>--sort</option>"
+msgid "<option>-i</option>, <option>--iso8601</option>"
+msgstr "<option>-s</option>, <option>--sort</option>"
+
+#: chage.1.xml:137(para)
+msgid "When printing dates, use YYYY-MM-DD format."
+msgstr ""
+
+#: chage.1.xml:141(term)
+msgid ""
+"<option>-I</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-I</option>, <option>--inactive</option>&nbsp;<replaceable>INAKTIV</"
+"replaceable>"
+
+#: chage.1.xml:145(para)
+msgid ""
+"Set the number of days of inactivity after a password has expired before the "
+"account is locked. The <replaceable>INACTIVE</replaceable> option is the "
+"number of days of inactivity. A user whose account is locked must contact "
+"the system administrator before being able to use the system again."
+msgstr ""
+"Legt die Anzahl der Tage der Untätigkeit fest, nach denen ein Passwort "
+"abgelaufen ist, bevor das Konto gesperrt wird. Die Option "
+"<replaceable>INAKTIV</replaceable> bezeichnet die Anzahl der Tage, für die "
+"das Konto inaktiv ist. Ein Benutzer, dessen Konto gesperrt ist, muss sich "
+"mit dem Systemadministrator in Verbindung setzen, ehe er sich wieder am "
+"System anmelden kann."
+
+#: chage.1.xml:152(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>INACTIVE</replaceable> will remove an account's inactivity."
+msgstr ""
+"Wenn <emphasis remap=\"I\">-1</emphasis> als <replaceable>INAKTIV</"
+"replaceable> angegeben wird, wird die Überwachung der fehlenden Verwendung "
+"des Kontos entfernt."
+
+#: chage.1.xml:164(para)
+msgid "Show account aging information."
+msgstr "zeigt Informationen zur Kontoalterung an"
+
+#: chage.1.xml:170(term)
+msgid ""
+"<option>-m</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_TAGE</"
+"replaceable>"
+
+#: chage.1.xml:182(term)
+msgid ""
+"<option>-M</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-M</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_TAGE</"
+"replaceable>"
+
+#: chage.1.xml:186(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 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 ""
+"Bestimmt die maximale Anzahl von Tagen, die das Passwort gültig bleibt. Wenn "
+"<replaceable>MAX_TAGE</replaceable> plus <replaceable>LETZTER_TAG</"
+"replaceable> älter als das aktuelle Datum ist, muss der Benutzer sein "
+"Passwort ändern, ehe er sein Konto benutzen kann. Mit der Option <option>-W</"
+"option> werden die Benutzer vor dem drohenden Verfall ihres Passworts "
+"gewarnt."
+
+#: chage.1.xml:215(term)
+msgid ""
+"<option>-W</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>WARN_DAYS</replaceable>"
+msgstr ""
+"<option>-W</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>WARN_TAGE</replaceable>"
+
+#: chage.1.xml:219(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 their password is about to "
+"expire."
+msgstr ""
+"Legt die Anzahl der Tage fest, an denen der Benutzer eine Warnung erhält, "
+"bevor sein Passwort geändert werden muss. Die Option <replaceable>WARN_TAGE</"
+"replaceable> bezeichnet die Anzahl der Tage, für die ein Benutzer vor "
+"Verfall seines Passworts gewarnt wird."
+
+#: chage.1.xml:228(para)
+msgid ""
+"If none of the options are selected, <command>chage</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis>[ ]</emphasis> marks."
+msgstr ""
+"Wenn keine Option ausgewählt wird, arbeitet <command>chage</command> "
+"interaktiv. Dabei wird der Benutzer nach den aktuellen Werten für alle "
+"Felder befragt. Bei Eingabe eines neuen Wertes wird dieser verwendet, bei "
+"Eingabe einer Leerzeile stattdessen der Originalwert beibehalten. Der "
+"aktuelle Wert wird zwischen einem Paar von <emphasis remap=\"B\">[ ]</"
+"emphasis> angezeigt."
+
+#: chage.1.xml:238(para)
+msgid ""
+"The <command>chage</command> program requires a shadow password file to be "
+"available."
+msgstr ""
+"Für das Programm <command>chage</command> ist es notwendig, dass eine Shadow-"
+"Passwort-Datei vorhanden ist."
+
+#: chage.1.xml:242(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 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, "
+"um die Verfallsdaten für ihr Konto einzusehen."
+
+#: chage.1.xml:307(replaceable)
+msgid "15"
+msgstr "15"
+
+#: chage.1.xml:309(para)
+msgid "can't find the shadow password file"
+msgstr "Eine Shadow-Passwort-Datei kann nicht gefunden werden."
+
+#: chage.1.xml:285(para)
+msgid ""
+"The <command>chage</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Der Befehl <command>chage</command> gibt beim Beenden folgende Werte zurück: "
+"<placeholder-1/>"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
+#: chage.1.xml:0(None)
+msgid "translator-credits"
+msgstr "Simon Brandmair (sbrandmair@gmx.net), 2005, 2007, 2011."
+
+# SB: Bessere Übersetzung als 'Zielbenutzer'?
+#~ msgid ""
+#~ "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."
+#~ msgstr ""
+#~ "Zusätzliche Argumente können nach dem Benutzernamen angegeben werden. In "
+#~ "diesem Fall werden sie an die Anmelde-Shell des Benutzers weitergereicht. "
+#~ "Insbesondere führt das Argument <option>-c</option> dazu, dass das "
+#~ "nächste Argument von den meisten Interpretatoren als Befehl behandelt "
+#~ "wird. Dieser Befehl wird von der Shell ausgeführt, die in <filename>/etc/"
+#~ "passwd</filename> für den Zielbenutzer angegeben ist."
+
+#~ msgid ""
+#~ "You can use the <option>--</option> argument to separate <command>su</"
+#~ "command> options from the arguments supplied to the shell."
+#~ msgstr ""
+#~ "Sie können das Argument <option>--</option> verwenden, um Optionen für "
+#~ "<command>su</command> von Argumenten für die Shell zu trennen."
+
+#~ msgid ""
+#~ "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 <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>."
+#~ msgstr ""
+#~ "Das Feld für das verschlüsselte Passwort kann leer sein. In diesem Fall "
+#~ "wird kein Passwort benötigt, um sich beim System anzumelden. Allerdings "
+#~ "werden einige Anwendung, die <filename>/etc/passwd</filename> auswerten, "
+#~ "<emphasis>keinen</emphasis> Zugriff erlauben, wenn das "
+#~ "<emphasis>Passwort</emphasis>-Feld leer ist. Wenn das <emphasis>Passwort</"
+#~ "emphasis>-Feld ein kleines <quote>x</quote> enthält, ist das Passwort in "
+#~ "der Datei <citerefentry><refentrytitle>shadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry> gespeichert. Es "
+#~ "<emphasis>muss</emphasis> sich dann ein passender Eintrag in <filename>/"
+#~ "etc/shadow</filename> befinden, oder das Benutzerkonto ist ungültig. Wenn "
+#~ "das <emphasis>Passwort</emphasis>-Feld eine andere Zeichenkette enthält, "
+#~ "wird diese als ein verschlüsseltes Passwort behandelt. Genaueres dazu "
+#~ "befindet sich unter <citerefentry><refentrytitle>crypt</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>."
+
+#~ msgid "-M"
+#~ msgstr "-M"
+
+#~ msgid "Kłoczko"
+#~ msgstr "Kłoczko"
+
+#~ msgid "François"
+#~ msgstr "François"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "can't create mail spool"
+#~ msgstr "Mail-Spool kann nicht erstellen werden."
+
+#~ msgid ""
+#~ "The SELinux user for the user's login. The default is to leave this field "
+#~ "the blank, which causes the system to select the default SELinux user."
+#~ msgstr ""
+#~ "Der SELinux-Benutzer für den Benutzer nach seiner Anmeldung. "
+#~ "Standardmäßig bleibt dieses Feld leer und es wird dem System überlassen, "
+#~ "den SELinux-Benutzer zu bestimmen."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "-q"
+#~ msgstr "-q"
+
+#~ msgid "-s"
+#~ msgstr "-s"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, <phrase condition="
+#~ "\"no_pam\"><citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+#~ "phrase><citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, <phrase condition="
+#~ "\"no_pam\"><citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+#~ "phrase><citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "new_users"
+#~ msgstr "neue_benutzer"
+
+#~ msgid "full_name"
+#~ msgstr "Voller_Name"
+
+#~ msgid "-f <placeholder-1/>"
+#~ msgstr "-f <placeholder-1/>"
+
+#~ msgid "room_no"
+#~ msgstr "Zimmer_Nr"
+
+#~ msgid "work_ph"
+#~ msgstr "Tel_dienstlich"
+
+#~ msgid "-w <placeholder-1/>"
+#~ msgstr "-w <placeholder-1/>"
+
+#~ msgid "home_ph"
+#~ msgstr "Tel_Privat"
+
+#~ msgid "other"
+#~ msgstr "sonstiges"
+
+#~ msgid "-o <placeholder-1/>"
+#~ msgstr "-o <placeholder-1/>"
diff --git a/man/po/fr.po b/man/po/fr.po
new file mode 100644
index 0000000..f795f39
--- /dev/null
+++ b/man/po/fr.po
@@ -0,0 +1,10548 @@
+# translation of shadow-man.po to French
+# French translation of the shadow's man pages
+# Traduction des pages de manuel livrées avec shadow
+# Copyright (C) 2011, 2012 Debian French l10n team <debian-l10n-french@lists.debian.org>
+#
+# Certaines pages étaient déjà traduites:
+# chpasswd: Amand Tihon <amand@alrj.org>
+# faillog(5): Pascal Terjan <CMoi@tuxfamily.org>
+#
+# Nicolas FRANÇOIS <nicolas.francois@centraliens.net>, 2004-2009.
+# Jean-Luc Coulon <jean-luc.coulon@wanadoo.fr>, 2008.
+# ABBAS.B <abelkcem@hotmail.com>, 2009.
+# Christian Perrier <bubulledebian.org>, 2009, 2012.
+# Thomas Blein <tbleintblein.eu>, 2011, 2012, 2013.
+# Jean-Philippe MENGUAL <mengualjeanphi@free.fr>, 2018.
+# chage: Olivier Marin, 2001.
+# chsh, groups, passwd(1), passwd(5): Christophe Blaess, 1997.
+# gpasswd: Maxime Mastin, 2001.
+# shadow(5): Thierry Vignaud <tvignaud@mandrakesoft.com>, 1999.
+# useradd: Frédéric Delanoy, 2000.
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow-man-pages 4.0.18\n"
+"POT-Creation-Date: 2020-01-23 15:00-0600\n"
+"PO-Revision-Date: 2019-01-30 21:55+0100\n"
+"Last-Translator: Jean-Philippe MENGUAL <mengualjeanphi@free.fr>\n"
+"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.2\n"
+"X-Poedit-Language: French\n"
+"X-Poedit-Country: FRANCE\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: vipw.8.xml:41(firstname) suauth.5.xml:39(firstname)
+#: pwconv.8.xml:45(firstname) login.access.5.xml:40(firstname)
+msgid "Marek"
+msgstr "Marek"
+
+#: vipw.8.xml:42(surname) suauth.5.xml:40(surname) pwconv.8.xml:46(surname)
+#: login.access.5.xml:41(surname)
+msgid "Michałkiewicz"
+msgstr "Michałkiewicz"
+
+#: vipw.8.xml:43(contrib) limits.5.xml:43(contrib)
+msgid "Creation, 1997"
+msgstr "Création, 1997"
+
+#: vipw.8.xml:46(firstname) usermod.8.xml:51(firstname)
+#: userdel.8.xml:50(firstname) useradd.8.xml:63(firstname)
+#: suauth.5.xml:44(firstname) su.1.xml:61(firstname) sg.1.xml:45(firstname)
+#: shadow.5.xml:44(firstname) shadow.3.xml:44(firstname)
+#: pwconv.8.xml:50(firstname) pwck.8.xml:50(firstname)
+#: porttime.5.xml:44(firstname) passwd.5.xml:44(firstname)
+#: passwd.1.xml:51(firstname) newusers.8.xml:60(firstname)
+#: newgrp.1.xml:45(firstname) logoutd.8.xml:44(firstname)
+#: login.defs.5.xml:111(firstname) login.access.5.xml:45(firstname)
+#: login.1.xml:77(firstname) limits.5.xml:46(firstname)
+#: lastlog.8.xml:46(firstname) grpck.8.xml:45(firstname)
+#: groups.1.xml:44(firstname) groupmod.8.xml:45(firstname)
+#: groupmems.8.xml:48(firstname) groupdel.8.xml:45(firstname)
+#: groupadd.8.xml:47(firstname) gpasswd.1.xml:49(firstname)
+#: faillog.8.xml:44(firstname) faillog.5.xml:44(firstname)
+#: expiry.1.xml:48(firstname) chsh.1.xml:47(firstname)
+#: chpasswd.8.xml:48(firstname) chgpasswd.8.xml:44(firstname)
+#: chfn.1.xml:47(firstname) chage.1.xml:45(firstname)
+msgid "Thomas"
+msgstr "Thomas"
+
+#: vipw.8.xml:47(surname) usermod.8.xml:52(surname) userdel.8.xml:51(surname)
+#: useradd.8.xml:64(surname) suauth.5.xml:45(surname) su.1.xml:62(surname)
+#: sg.1.xml:46(surname) shadow.5.xml:45(surname) shadow.3.xml:45(surname)
+#: pwconv.8.xml:51(surname) pwck.8.xml:51(surname) porttime.5.xml:45(surname)
+#: passwd.5.xml:45(surname) passwd.1.xml:52(surname) newusers.8.xml:61(surname)
+#: newgrp.1.xml:46(surname) logoutd.8.xml:45(surname)
+#: login.defs.5.xml:112(surname) login.access.5.xml:46(surname)
+#: login.1.xml:78(surname) limits.5.xml:47(surname) lastlog.8.xml:47(surname)
+#: grpck.8.xml:46(surname) groups.1.xml:45(surname) groupmod.8.xml:46(surname)
+#: groupmems.8.xml:49(surname) groupdel.8.xml:46(surname)
+#: groupadd.8.xml:48(surname) gpasswd.1.xml:50(surname)
+#: faillog.8.xml:45(surname) faillog.5.xml:45(surname) expiry.1.xml:49(surname)
+#: chsh.1.xml:48(surname) chpasswd.8.xml:49(surname)
+#: chgpasswd.8.xml:45(surname) chfn.1.xml:48(surname) chage.1.xml:46(surname)
+msgid "Kłoczko"
+msgstr "Kłoczko"
+
+#: vipw.8.xml:48(email) usermod.8.xml:53(email) userdel.8.xml:52(email)
+#: useradd.8.xml:65(email) suauth.5.xml:46(email) su.1.xml:63(email)
+#: sg.1.xml:47(email) shadow.5.xml:46(email) shadow.3.xml:46(email)
+#: pwconv.8.xml:52(email) pwck.8.xml:52(email) porttime.5.xml:46(email)
+#: passwd.5.xml:46(email) passwd.1.xml:53(email) newusers.8.xml:62(email)
+#: newgrp.1.xml:47(email) logoutd.8.xml:46(email) login.defs.5.xml:113(email)
+#: login.access.5.xml:47(email) login.1.xml:79(email) limits.5.xml:48(email)
+#: lastlog.8.xml:48(email) grpck.8.xml:47(email) groups.1.xml:46(email)
+#: groupmod.8.xml:47(email) groupmems.8.xml:50(email) groupdel.8.xml:47(email)
+#: groupadd.8.xml:49(email) gpasswd.1.xml:51(email) faillog.8.xml:46(email)
+#: faillog.5.xml:46(email) expiry.1.xml:50(email) chsh.1.xml:49(email)
+#: chpasswd.8.xml:50(email) chgpasswd.8.xml:46(email) chfn.1.xml:49(email)
+#: chage.1.xml:47(email)
+msgid "kloczek@pld.org.pl"
+msgstr "kloczek@pld.org.pl"
+
+#: vipw.8.xml:49(contrib) usermod.8.xml:54(contrib) userdel.8.xml:53(contrib)
+#: useradd.8.xml:66(contrib) suauth.5.xml:47(contrib) su.1.xml:64(contrib)
+#: sg.1.xml:48(contrib) shadow.5.xml:47(contrib) shadow.3.xml:47(contrib)
+#: pwconv.8.xml:53(contrib) pwck.8.xml:53(contrib) porttime.5.xml:47(contrib)
+#: passwd.5.xml:47(contrib) passwd.1.xml:54(contrib) newusers.8.xml:63(contrib)
+#: newgrp.1.xml:48(contrib) logoutd.8.xml:47(contrib)
+#: login.defs.5.xml:114(contrib) login.access.5.xml:48(contrib)
+#: login.1.xml:80(contrib) limits.5.xml:49(contrib) lastlog.8.xml:49(contrib)
+#: grpck.8.xml:48(contrib) groups.1.xml:47(contrib) groupmod.8.xml:48(contrib)
+#: groupmems.8.xml:51(contrib) groupdel.8.xml:48(contrib)
+#: groupadd.8.xml:50(contrib) gpasswd.1.xml:52(contrib)
+#: faillog.8.xml:47(contrib) faillog.5.xml:47(contrib) expiry.1.xml:51(contrib)
+#: chsh.1.xml:50(contrib) chpasswd.8.xml:51(contrib) chfn.1.xml:50(contrib)
+#: chage.1.xml:48(contrib)
+msgid "shadow-utils maintainer, 2000 - 2007"
+msgstr "Responsable de shadow-utils, 2000 - 2007"
+
+#: vipw.8.xml:52(firstname) usermod.8.xml:57(firstname)
+#: userdel.8.xml:56(firstname) useradd.8.xml:69(firstname)
+#: suauth.5.xml:50(firstname) su.1.xml:67(firstname) sg.1.xml:51(firstname)
+#: shadow.5.xml:50(firstname) shadow.3.xml:50(firstname)
+#: pwconv.8.xml:56(firstname) pwck.8.xml:56(firstname)
+#: porttime.5.xml:50(firstname) passwd.5.xml:50(firstname)
+#: passwd.1.xml:57(firstname) nologin.8.xml:39(firstname)
+#: newusers.8.xml:66(firstname) newgrp.1.xml:51(firstname)
+#: logoutd.8.xml:50(firstname) login.defs.5.xml:117(firstname)
+#: login.access.5.xml:51(firstname) login.1.xml:83(firstname)
+#: limits.5.xml:52(firstname) lastlog.8.xml:52(firstname)
+#: gshadow.5.xml:38(firstname) grpck.8.xml:51(firstname)
+#: groups.1.xml:50(firstname) groupmod.8.xml:51(firstname)
+#: groupmems.8.xml:54(firstname) groupdel.8.xml:51(firstname)
+#: groupadd.8.xml:53(firstname) gpasswd.1.xml:55(firstname)
+#: faillog.8.xml:50(firstname) faillog.5.xml:50(firstname)
+#: expiry.1.xml:54(firstname) chsh.1.xml:53(firstname)
+#: chpasswd.8.xml:54(firstname) chgpasswd.8.xml:50(firstname)
+#: chfn.1.xml:53(firstname) chage.1.xml:51(firstname)
+msgid "Nicolas"
+msgstr "Nicolas"
+
+#: vipw.8.xml:53(surname) usermod.8.xml:58(surname) userdel.8.xml:57(surname)
+#: useradd.8.xml:70(surname) suauth.5.xml:51(surname) su.1.xml:68(surname)
+#: sg.1.xml:52(surname) shadow.5.xml:51(surname) shadow.3.xml:51(surname)
+#: pwconv.8.xml:57(surname) pwck.8.xml:57(surname) porttime.5.xml:51(surname)
+#: passwd.5.xml:51(surname) passwd.1.xml:58(surname) nologin.8.xml:40(surname)
+#: newusers.8.xml:67(surname) newgrp.1.xml:52(surname)
+#: logoutd.8.xml:51(surname) login.defs.5.xml:118(surname)
+#: login.access.5.xml:52(surname) login.1.xml:84(surname)
+#: limits.5.xml:53(surname) lastlog.8.xml:53(surname) gshadow.5.xml:39(surname)
+#: grpck.8.xml:52(surname) groups.1.xml:51(surname) groupmod.8.xml:52(surname)
+#: groupmems.8.xml:55(surname) groupdel.8.xml:52(surname)
+#: groupadd.8.xml:54(surname) gpasswd.1.xml:56(surname)
+#: faillog.8.xml:51(surname) faillog.5.xml:51(surname) expiry.1.xml:55(surname)
+#: chsh.1.xml:54(surname) chpasswd.8.xml:55(surname)
+#: chgpasswd.8.xml:51(surname) chfn.1.xml:54(surname) chage.1.xml:52(surname)
+msgid "François"
+msgstr "François"
+
+#: vipw.8.xml:54(email) usermod.8.xml:59(email) userdel.8.xml:58(email)
+#: useradd.8.xml:71(email) suauth.5.xml:52(email) su.1.xml:69(email)
+#: sg.1.xml:53(email) shadow.5.xml:52(email) shadow.3.xml:52(email)
+#: pwconv.8.xml:58(email) pwck.8.xml:58(email) porttime.5.xml:52(email)
+#: passwd.5.xml:52(email) passwd.1.xml:59(email) nologin.8.xml:41(email)
+#: newusers.8.xml:68(email) newgrp.1.xml:53(email) logoutd.8.xml:52(email)
+#: login.defs.5.xml:119(email) login.access.5.xml:53(email)
+#: login.1.xml:85(email) limits.5.xml:54(email) lastlog.8.xml:54(email)
+#: gshadow.5.xml:40(email) grpck.8.xml:53(email) groups.1.xml:52(email)
+#: groupmod.8.xml:53(email) groupmems.8.xml:56(email) groupdel.8.xml:53(email)
+#: groupadd.8.xml:55(email) gpasswd.1.xml:57(email) faillog.8.xml:52(email)
+#: faillog.5.xml:52(email) expiry.1.xml:56(email) chsh.1.xml:55(email)
+#: chpasswd.8.xml:56(email) chgpasswd.8.xml:52(email) chfn.1.xml:55(email)
+#: chage.1.xml:53(email)
+msgid "nicolas.francois@centraliens.net"
+msgstr "nicolas.francois@centraliens.net"
+
+#: vipw.8.xml:55(contrib) usermod.8.xml:60(contrib) userdel.8.xml:59(contrib)
+#: useradd.8.xml:72(contrib) suauth.5.xml:53(contrib) su.1.xml:70(contrib)
+#: sg.1.xml:54(contrib) shadow.5.xml:53(contrib) shadow.3.xml:53(contrib)
+#: pwconv.8.xml:59(contrib) pwck.8.xml:59(contrib) porttime.5.xml:53(contrib)
+#: passwd.5.xml:53(contrib) passwd.1.xml:60(contrib) nologin.8.xml:42(contrib)
+#: newusers.8.xml:69(contrib) newgrp.1.xml:54(contrib)
+#: logoutd.8.xml:53(contrib) login.defs.5.xml:120(contrib)
+#: login.access.5.xml:54(contrib) login.1.xml:86(contrib)
+#: limits.5.xml:55(contrib) lastlog.8.xml:55(contrib) gshadow.5.xml:42(contrib)
+#: grpck.8.xml:54(contrib) groups.1.xml:53(contrib) groupmod.8.xml:54(contrib)
+#: groupmems.8.xml:57(contrib) groupdel.8.xml:54(contrib)
+#: groupadd.8.xml:56(contrib) gpasswd.1.xml:58(contrib)
+#: faillog.8.xml:53(contrib) faillog.5.xml:53(contrib) expiry.1.xml:57(contrib)
+#: chsh.1.xml:56(contrib) chpasswd.8.xml:57(contrib)
+#: chgpasswd.8.xml:53(contrib) chfn.1.xml:56(contrib) chage.1.xml:54(contrib)
+msgid "shadow-utils maintainer, 2007 - now"
+msgstr "Responsable de shadow-utils, 2007 - maintenant"
+
+#: vipw.8.xml:59(refentrytitle) vipw.8.xml:66(refname) vipw.8.xml:75(command)
+#: login.defs.5.xml:520(term)
+msgid "vipw"
+msgstr "vipw"
+
+#: vipw.8.xml:60(manvolnum) usermod.8.xml:65(manvolnum)
+#: userdel.8.xml:64(manvolnum) userdel.8.xml:276(replaceable)
+#: useradd.8.xml:77(manvolnum) pwconv.8.xml:64(manvolnum)
+#: pwck.8.xml:64(manvolnum) nologin.8.xml:47(manvolnum)
+#: newusers.8.xml:74(manvolnum) logoutd.8.xml:58(manvolnum)
+#: lastlog.8.xml:60(manvolnum) grpck.8.xml:59(manvolnum)
+#: groupmod.8.xml:59(manvolnum) groupmems.8.xml:62(manvolnum)
+#: groupdel.8.xml:59(manvolnum) groupdel.8.xml:198(replaceable)
+#: groupadd.8.xml:61(manvolnum) faillog.8.xml:58(manvolnum)
+#: faillog.5.xml:111(manvolnum) chpasswd.8.xml:62(manvolnum)
+#: chgpasswd.8.xml:58(manvolnum)
+msgid "8"
+msgstr "8"
+
+#: vipw.8.xml:61(refmiscinfo) usermod.8.xml:66(refmiscinfo)
+#: userdel.8.xml:65(refmiscinfo) useradd.8.xml:78(refmiscinfo)
+#: pwconv.8.xml:65(refmiscinfo) pwck.8.xml:65(refmiscinfo)
+#: nologin.8.xml:48(refmiscinfo) newusers.8.xml:75(refmiscinfo)
+#: logoutd.8.xml:59(refmiscinfo) lastlog.8.xml:61(refmiscinfo)
+#: grpck.8.xml:60(refmiscinfo) groupmod.8.xml:60(refmiscinfo)
+#: groupmems.8.xml:63(refmiscinfo) groupdel.8.xml:60(refmiscinfo)
+#: groupadd.8.xml:62(refmiscinfo) faillog.8.xml:59(refmiscinfo)
+#: chpasswd.8.xml:63(refmiscinfo) chgpasswd.8.xml:59(refmiscinfo)
+msgid "System Management Commands"
+msgstr "Commandes de gestion du système"
+
+#: vipw.8.xml:62(refmiscinfo) usermod.8.xml:67(refmiscinfo)
+#: userdel.8.xml:66(refmiscinfo) useradd.8.xml:79(refmiscinfo)
+#: suauth.5.xml:60(refmiscinfo) su.1.xml:77(refmiscinfo)
+#: sg.1.xml:61(refmiscinfo) shadow.5.xml:60(refmiscinfo)
+#: shadow.3.xml:60(refmiscinfo) pwconv.8.xml:66(refmiscinfo)
+#: pwck.8.xml:66(refmiscinfo) porttime.5.xml:60(refmiscinfo)
+#: passwd.5.xml:60(refmiscinfo) passwd.1.xml:67(refmiscinfo)
+#: nologin.8.xml:49(refmiscinfo) newusers.8.xml:76(refmiscinfo)
+#: newgrp.1.xml:61(refmiscinfo) logoutd.8.xml:60(refmiscinfo)
+#: login.defs.5.xml:127(refmiscinfo) login.access.5.xml:61(refmiscinfo)
+#: login.1.xml:93(refmiscinfo) limits.5.xml:62(refmiscinfo)
+#: lastlog.8.xml:62(refmiscinfo) gshadow.5.xml:49(refmiscinfo)
+#: grpck.8.xml:61(refmiscinfo) groups.1.xml:60(refmiscinfo)
+#: groupmod.8.xml:61(refmiscinfo) groupmems.8.xml:64(refmiscinfo)
+#: groupdel.8.xml:61(refmiscinfo) groupadd.8.xml:63(refmiscinfo)
+#: gpasswd.1.xml:65(refmiscinfo) faillog.8.xml:60(refmiscinfo)
+#: faillog.5.xml:60(refmiscinfo) expiry.1.xml:64(refmiscinfo)
+#: chsh.1.xml:63(refmiscinfo) chpasswd.8.xml:64(refmiscinfo)
+#: chgpasswd.8.xml:60(refmiscinfo) chfn.1.xml:63(refmiscinfo)
+#: chage.1.xml:61(refmiscinfo)
+msgid "shadow-utils"
+msgstr "shadow-utils"
+
+#: vipw.8.xml:67(refname) vipw.8.xml:81(command)
+msgid "vigr"
+msgstr "vigr"
+
+#: vipw.8.xml:68(refpurpose)
+msgid "edit the password, group, shadow-password or shadow-group file"
+msgstr "Éditer les fichiers passwd, group, shadow ou gshadow"
+
+#: vipw.8.xml:77(replaceable) vipw.8.xml:83(replaceable)
+#: usermod.8.xml:79(replaceable) userdel.8.xml:76(arg)
+#: useradd.8.xml:90(replaceable) useradd.8.xml:102(replaceable)
+#: su.1.xml:88(replaceable) pwconv.8.xml:81(replaceable)
+#: pwconv.8.xml:87(replaceable) pwconv.8.xml:93(replaceable)
+#: pwconv.8.xml:99(replaceable) pwck.8.xml:77(arg) passwd.1.xml:79(replaceable)
+#: newusers.8.xml:88(replaceable) lastlog.8.xml:74(replaceable)
+#: grpck.8.xml:72(arg) groupmod.8.xml:73(replaceable)
+#: groupdel.8.xml:73(replaceable) groupadd.8.xml:75(replaceable)
+#: faillog.8.xml:72(replaceable) chsh.1.xml:75(replaceable)
+#: chpasswd.8.xml:76(replaceable) chgpasswd.8.xml:72(replaceable)
+#: chfn.1.xml:75(replaceable) chage.1.xml:72(replaceable)
+msgid "options"
+msgstr "options"
+
+#: vipw.8.xml:89(title) usermod.8.xml:86(title) userdel.8.xml:84(title)
+#: useradd.8.xml:108(title) suauth.5.xml:75(title) su.1.xml:103(title)
+#: sg.1.xml:81(title) shadow.5.xml:69(title) shadow.3.xml:118(title)
+#: shadow.3.xml:174(title) pwconv.8.xml:105(title) pwck.8.xml:92(title)
+#: porttime.5.xml:69(title) passwd.5.xml:69(title) passwd.1.xml:88(title)
+#: nologin.8.xml:64(title) newusers.8.xml:97(title) newgrp.1.xml:77(title)
+#: logoutd.8.xml:75(title) login.defs.5.xml:136(title)
+#: login.access.5.xml:70(title) login.1.xml:125(title) limits.5.xml:72(title)
+#: lastlog.8.xml:80(title) gshadow.5.xml:58(title) grpck.8.xml:83(title)
+#: groups.1.xml:78(title) groupmod.8.xml:80(title) groupmems.8.xml:85(title)
+#: groupdel.8.xml:80(title) groupadd.8.xml:84(title) gpasswd.1.xml:94(title)
+#: faillog.8.xml:78(title) faillog.5.xml:69(title) expiry.1.xml:82(title)
+#: chsh.1.xml:84(title) chpasswd.8.xml:82(title) chgpasswd.8.xml:78(title)
+#: chfn.1.xml:84(title) chage.1.xml:81(title)
+msgid "DESCRIPTION"
+msgstr "DESCRIPTION"
+
+#: vipw.8.xml:90(para)
+msgid ""
+"The <command>vipw</command> and <command>vigr</command> commands edits the "
+"files <filename>/etc/passwd</filename> and <filename>/etc/group</filename>, "
+"respectively. With the <option>-s</option> flag, they will edit the shadow "
+"versions of those files, <filename>/etc/shadow</filename> and <filename>/etc/"
+"gshadow</filename>, respectively. The programs will set the appropriate "
+"locks to prevent file corruption. When looking for an editor, the programs "
+"will first try the environment variable <envar>$VISUAL</envar>, then the "
+"environment variable <envar>$EDITOR</envar>, and finally the default editor, "
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<command>vipw</command> et <command>vigr</command> permettent de modifier "
+"les fichiers <filename>/etc/passwd</filename> et <filename>/etc/group</"
+"filename>, respectivement. Avec l'option <option>-s</option>, ils permettent "
+"d'éditer les versions cachées de ces fichiers : <filename>/etc/shadow</"
+"filename> et <filename>/etc/gshadow</filename>, respectivement. Ces "
+"programmes placent les verrous nécessaires afin d'éviter toute corruption "
+"des fichiers. L'éditeur utilisé est choisi d'abord en fonction de la "
+"variable d'environnement <envar>$VISUAL</envar>, puis de la variable "
+"d'environnement <envar>$EDITOR</envar>. À défaut, l'éditeur, "
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> est utilisé quand ces variables ne sont pas définies."
+
+#: vipw.8.xml:107(title) usermod.8.xml:94(title) userdel.8.xml:93(title)
+#: useradd.8.xml:126(title) su.1.xml:144(title) pwconv.8.xml:187(title)
+#: pwck.8.xml:176(title) passwd.1.xml:174(title) newusers.8.xml:266(title)
+#: login.1.xml:210(title) lastlog.8.xml:92(title) grpck.8.xml:147(title)
+#: groupmod.8.xml:89(title) groupmems.8.xml:100(title) groupdel.8.xml:88(title)
+#: groupadd.8.xml:93(title) gpasswd.1.xml:134(title) faillog.8.xml:89(title)
+#: expiry.1.xml:91(title) chsh.1.xml:95(title) chpasswd.8.xml:130(title)
+#: chgpasswd.8.xml:105(title) chfn.1.xml:111(title) chage.1.xml:91(title)
+msgid "OPTIONS"
+msgstr "OPTIONS"
+
+#: vipw.8.xml:108(para)
+msgid ""
+"The options which apply to the <command>vipw</command> and <command>vigr</"
+"command> commands are:"
+msgstr ""
+"Les options applicables aux commandes <command>vipw</command> et "
+"<command>vigr</command> sont :"
+
+#: vipw.8.xml:114(term)
+msgid "<option>-g</option>, <option>--group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+#: vipw.8.xml:116(para)
+msgid "Edit group database."
+msgstr "Éditer la base de données de groupes."
+
+#: vipw.8.xml:120(term) userdel.8.xml:123(term) useradd.8.xml:278(term)
+#: pwconv.8.xml:195(term) pwck.8.xml:196(term) passwd.1.xml:214(term)
+#: newusers.8.xml:296(term) lastlog.8.xml:119(term) grpck.8.xml:157(term)
+#: groupmod.8.xml:129(term) groupmems.8.xml:142(term) groupdel.8.xml:95(term)
+#: groupadd.8.xml:131(term) gpasswd.1.xml:173(term) faillog.8.xml:122(term)
+#: expiry.1.xml:112(term) chsh.1.xml:101(term) chpasswd.8.xml:171(term)
+#: chgpasswd.8.xml:131(term) chage.1.xml:129(term)
+msgid "<option>-h</option>, <option>--help</option>"
+msgstr "<option>-h</option>, <option>--help</option>"
+
+#: vipw.8.xml:122(para) userdel.8.xml:125(para) useradd.8.xml:280(para)
+#: pwconv.8.xml:197(para) pwck.8.xml:198(para) passwd.1.xml:216(para)
+#: newusers.8.xml:298(para) lastlog.8.xml:123(para) grpck.8.xml:159(para)
+#: groupmod.8.xml:131(para) groupmems.8.xml:144(para) groupdel.8.xml:97(para)
+#: groupadd.8.xml:133(para) gpasswd.1.xml:175(para) faillog.8.xml:124(para)
+#: expiry.1.xml:114(para) chsh.1.xml:103(para) chpasswd.8.xml:173(para)
+#: chgpasswd.8.xml:133(para) chfn.1.xml:169(para) chage.1.xml:131(para)
+msgid "Display help message and exit."
+msgstr "Afficher un message d'aide et quitter."
+
+#: vipw.8.xml:126(term)
+msgid "<option>-p</option>, <option>--passwd</option>"
+msgstr "<option>-p</option>, <option>--passwd</option>"
+
+#: vipw.8.xml:128(para)
+msgid "Edit passwd database."
+msgstr "Éditer la base de données passwd."
+
+#: vipw.8.xml:132(term) pwck.8.xml:202(term) passwd.1.xml:281(term)
+msgid "<option>-q</option>, <option>--quiet</option>"
+msgstr "<option>-q</option>, <option>--quiet</option>"
+
+#: vipw.8.xml:134(para) passwd.1.xml:285(para)
+msgid "Quiet mode."
+msgstr "Mode silencieux."
+
+#: vipw.8.xml:138(term) usermod.8.xml:322(term) userdel.8.xml:146(term)
+#: useradd.8.xml:457(term) pwconv.8.xml:201(term) pwck.8.xml:219(term)
+#: passwd.1.xml:301(term) newusers.8.xml:321(term) lastlog.8.xml:127(term)
+#: grpck.8.xml:173(term) groupmod.8.xml:178(term) groupmems.8.xml:165(term)
+#: groupdel.8.xml:101(term) groupadd.8.xml:204(term) faillog.8.xml:180(term)
+#: chsh.1.xml:107(term) chpasswd.8.xml:188(term) chgpasswd.8.xml:146(term)
+#: chfn.1.xml:153(term) chage.1.xml:203(term)
+msgid ""
+"<option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-R</option>, <option>--root</option>&nbsp;<replaceable>RÉP_CHROOT</"
+"replaceable>"
+
+#: vipw.8.xml:142(para) usermod.8.xml:326(para) userdel.8.xml:150(para)
+#: useradd.8.xml:461(para) pwconv.8.xml:205(para) pwck.8.xml:223(para)
+#: passwd.1.xml:305(para) newusers.8.xml:325(para) lastlog.8.xml:131(para)
+#: grpck.8.xml:177(para) groupmod.8.xml:182(para) groupmems.8.xml:169(para)
+#: groupdel.8.xml:105(para) groupadd.8.xml:208(para) gpasswd.1.xml:185(para)
+#: faillog.8.xml:184(para) chsh.1.xml:111(para) chpasswd.8.xml:192(para)
+#: chgpasswd.8.xml:150(para) chfn.1.xml:157(para) chage.1.xml:207(para)
+msgid ""
+"Apply changes in the <replaceable>CHROOT_DIR</replaceable> directory and use "
+"the configuration files from the <replaceable>CHROOT_DIR</replaceable> "
+"directory."
+msgstr ""
+"Appliquer les changements dans le répertoire <replaceable>RÉP_CHROOT</"
+"replaceable> et utiliser les fichiers de configuration du répertoire "
+"<replaceable>RÉP_CHROOT</replaceable>."
+
+#: vipw.8.xml:150(term)
+msgid "<option>-s</option>, <option>--shadow</option>"
+msgstr "<option>-s</option>, <option>--shadow</option>"
+
+#: vipw.8.xml:152(para)
+msgid "Edit shadow or gshadow database."
+msgstr "Éditer les bases de données shadow ou gshadow."
+
+#: vipw.8.xml:156(term)
+msgid "<option>-u</option>, <option>--user</option>"
+msgstr "<option>-u</option>, <option>--user</option>"
+
+#: vipw.8.xml:158(para)
+msgid "Indicates which user's tcb shadow file to edit."
+msgstr "Indique l'utilisateur dont le fichier shadow de tcb doit être édité."
+
+#: vipw.8.xml:165(title) usermod.8.xml:524(title) userdel.8.xml:188(title)
+#: useradd.8.xml:676(title) su.1.xml:338(title) sg.1.xml:98(title)
+#: pwconv.8.xml:227(title) pwck.8.xml:262(title) passwd.1.xml:395(title)
+#: newusers.8.xml:375(title) newgrp.1.xml:109(title) login.1.xml:294(title)
+#: lastlog.8.xml:205(title) grpck.8.xml:209(title) groupmod.8.xml:210(title)
+#: groupmems.8.xml:199(title) groupdel.8.xml:145(title)
+#: groupadd.8.xml:236(title) gpasswd.1.xml:264(title) chsh.1.xml:154(title)
+#: chpasswd.8.xml:239(title) chgpasswd.8.xml:198(title) chfn.1.xml:193(title)
+#: chage.1.xml:250(title)
+msgid "CONFIGURATION"
+msgstr "CONFIGURATION"
+
+#: vipw.8.xml:166(para) usermod.8.xml:525(para) userdel.8.xml:189(para)
+#: useradd.8.xml:677(para) su.1.xml:339(para) sg.1.xml:99(para)
+#: pwck.8.xml:263(para) passwd.1.xml:396(para) newusers.8.xml:376(para)
+#: newgrp.1.xml:110(para) login.1.xml:295(para) lastlog.8.xml:206(para)
+#: grpck.8.xml:210(para) groupmod.8.xml:211(para) groupmems.8.xml:200(para)
+#: groupdel.8.xml:146(para) groupadd.8.xml:237(para) gpasswd.1.xml:265(para)
+#: chsh.1.xml:155(para) chpasswd.8.xml:240(para) chgpasswd.8.xml:199(para)
+#: chfn.1.xml:194(para) chage.1.xml:251(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of this tool:"
+msgstr ""
+"Les variables de configuration suivantes dans <filename>/etc/login.defs</"
+"filename> modifient le comportement de cet outil :"
+
+#: vipw.8.xml:30(term) usermod.8.xml:30(term) userdel.8.xml:30(term)
+#: useradd.8.xml:30(term) pwconv.8.xml:30(term) pwck.8.xml:30(term)
+#: login.defs.5.xml:30(term) chage.1.xml:30(term)
+msgid "<option>USE_TCB</option> (boolean)"
+msgstr "<option>USE_TCB</option> (booléen)"
+
+#: vipw.8.xml:32(para) usermod.8.xml:32(para) userdel.8.xml:32(para)
+#: useradd.8.xml:32(para) pwconv.8.xml:32(para) pwck.8.xml:32(para)
+#: login.defs.5.xml:32(para) chage.1.xml:32(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <citerefentry><refentrytitle>tcb</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry> password shadowing "
+"scheme will be used."
+msgstr ""
+"Si <replaceable>yes</replaceable> (« oui »), le schéma de mot de passe "
+"shadow de <citerefentry><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry> sera utilisé."
+
+#: vipw.8.xml:177(title)
+msgid "ENVIRONMENT"
+msgstr "ENVIRONNEMENT"
+
+#: vipw.8.xml:180(option)
+msgid "VISUAL"
+msgstr "VISUAL"
+
+#: vipw.8.xml:182(para)
+msgid "Editor to be used."
+msgstr "L'éditeur à utiliser"
+
+#: vipw.8.xml:186(option)
+msgid "EDITOR"
+msgstr "EDITOR"
+
+#: vipw.8.xml:188(para)
+msgid "Editor to be used if <option>VISUAL</option> is not set."
+msgstr "L'éditeur à utiliser si <option>VISUAL</option> n'est pas définie."
+
+#: vipw.8.xml:195(title) usermod.8.xml:542(title) userdel.8.xml:205(title)
+#: useradd.8.xml:706(title) suauth.5.xml:193(title) su.1.xml:366(title)
+#: sg.1.xml:110(title) shadow.5.xml:255(title) shadow.3.xml:226(title)
+#: pwconv.8.xml:250(title) pwck.8.xml:279(title) porttime.5.xml:130(title)
+#: passwd.5.xml:160(title) passwd.1.xml:413(title) newusers.8.xml:411(title)
+#: newgrp.1.xml:121(title) logoutd.8.xml:89(title)
+#: login.access.5.xml:121(title) login.1.xml:338(title) limits.5.xml:196(title)
+#: lastlog.8.xml:217(title) gshadow.5.xml:156(title) grpck.8.xml:221(title)
+#: groups.1.xml:100(title) groupmod.8.xml:222(title) groupmems.8.xml:211(title)
+#: groupdel.8.xml:157(title) groupadd.8.xml:250(title) gpasswd.1.xml:279(title)
+#: faillog.8.xml:243(title) faillog.5.xml:96(title) expiry.1.xml:121(title)
+#: chsh.1.xml:167(title) chpasswd.8.xml:255(title) chgpasswd.8.xml:213(title)
+#: chfn.1.xml:207(title) chage.1.xml:262(title)
+msgid "FILES"
+msgstr "FICHIERS"
+
+#: vipw.8.xml:198(filename) usermod.8.xml:545(filename)
+#: userdel.8.xml:208(filename) useradd.8.xml:721(filename)
+#: sg.1.xml:125(filename) pwck.8.xml:282(filename) newusers.8.xml:426(filename)
+#: newgrp.1.xml:136(filename) gshadow.5.xml:159(filename)
+#: grpck.8.xml:224(filename) groups.1.xml:103(filename)
+#: groupmod.8.xml:225(filename) groupmems.8.xml:214(filename)
+#: groupdel.8.xml:160(filename) groupadd.8.xml:253(filename)
+#: gpasswd.1.xml:72(filename) gpasswd.1.xml:75(filename)
+#: gpasswd.1.xml:282(filename) chgpasswd.8.xml:216(filename)
+msgid "/etc/group"
+msgstr "/etc/group"
+
+#: vipw.8.xml:200(para) usermod.8.xml:547(para) userdel.8.xml:210(para)
+#: useradd.8.xml:723(para) sg.1.xml:127(para) pwck.8.xml:284(para)
+#: newusers.8.xml:428(para) newgrp.1.xml:138(para) gshadow.5.xml:161(para)
+#: grpck.8.xml:226(para) groups.1.xml:105(para) groupmod.8.xml:227(para)
+#: groupmems.8.xml:216(para) groupdel.8.xml:162(para) groupadd.8.xml:255(para)
+#: gpasswd.1.xml:284(para) chgpasswd.8.xml:218(para)
+msgid "Group account information."
+msgstr "Informations sur les groupes."
+
+#: vipw.8.xml:204(filename) usermod.8.xml:551(filename)
+#: useradd.8.xml:727(filename) sg.1.xml:131(filename)
+#: newusers.8.xml:432(filename) newgrp.1.xml:142(filename)
+#: gshadow.5.xml:165(filename) grpck.8.xml:230(filename)
+#: groupmod.8.xml:231(filename) groupmems.8.xml:220(filename)
+#: groupdel.8.xml:166(filename) groupadd.8.xml:259(filename)
+#: gpasswd.1.xml:76(filename) gpasswd.1.xml:288(filename)
+#: chgpasswd.8.xml:222(filename)
+msgid "/etc/gshadow"
+msgstr "/etc/gshadow"
+
+#: vipw.8.xml:206(para) usermod.8.xml:553(para) useradd.8.xml:729(para)
+#: sg.1.xml:133(para) newusers.8.xml:434(para) newgrp.1.xml:144(para)
+#: gshadow.5.xml:167(para) grpck.8.xml:232(para) groupmod.8.xml:233(para)
+#: groupdel.8.xml:168(para) groupadd.8.xml:261(para) gpasswd.1.xml:290(para)
+#: chgpasswd.8.xml:224(para)
+msgid "Secure group account information."
+msgstr "Informations sécurisées sur les groupes."
+
+#: vipw.8.xml:210(filename) usermod.8.xml:563(filename)
+#: userdel.8.xml:220(filename) useradd.8.xml:709(filename)
+#: su.1.xml:369(filename) sg.1.xml:113(filename) shadow.5.xml:258(filename)
+#: pwck.8.xml:288(filename) passwd.5.xml:163(filename)
+#: passwd.1.xml:416(filename) newusers.8.xml:414(filename)
+#: newgrp.1.xml:124(filename) login.1.xml:353(filename)
+#: grpck.8.xml:236(filename) groupmod.8.xml:243(filename)
+#: expiry.1.xml:124(filename) chsh.1.xml:170(filename)
+#: chpasswd.8.xml:258(filename) chfn.1.xml:216(filename)
+#: chage.1.xml:266(filename)
+msgid "/etc/passwd"
+msgstr "/etc/passwd"
+
+#: vipw.8.xml:212(para) usermod.8.xml:565(para) userdel.8.xml:222(para)
+#: useradd.8.xml:711(para) su.1.xml:371(para) sg.1.xml:115(para)
+#: shadow.5.xml:260(para) pwck.8.xml:290(para) passwd.5.xml:165(para)
+#: passwd.1.xml:418(para) newusers.8.xml:416(para) newgrp.1.xml:126(para)
+#: login.1.xml:355(para) grpck.8.xml:238(para) groupmod.8.xml:245(para)
+#: expiry.1.xml:126(para) chsh.1.xml:172(para) chpasswd.8.xml:260(para)
+#: chfn.1.xml:218(para) chage.1.xml:269(para)
+msgid "User account information."
+msgstr "Informations sur les comptes des utilisateurs."
+
+#: vipw.8.xml:216(filename) usermod.8.xml:569(filename)
+#: userdel.8.xml:226(filename) useradd.8.xml:715(filename)
+#: su.1.xml:375(filename) sg.1.xml:119(filename) shadow.5.xml:264(filename)
+#: shadow.3.xml:229(filename) pwck.8.xml:294(filename)
+#: passwd.5.xml:169(filename) passwd.1.xml:422(filename)
+#: newusers.8.xml:420(filename) newgrp.1.xml:130(filename)
+#: login.1.xml:359(filename) expiry.1.xml:130(filename)
+#: chpasswd.8.xml:264(filename) chage.1.xml:274(filename)
+msgid "/etc/shadow"
+msgstr "/etc/shadow"
+
+#: vipw.8.xml:218(para) usermod.8.xml:571(para) userdel.8.xml:228(para)
+#: useradd.8.xml:717(para) su.1.xml:377(para) sg.1.xml:121(para)
+#: shadow.5.xml:266(para) shadow.3.xml:231(para) pwck.8.xml:296(para)
+#: passwd.1.xml:424(para) newusers.8.xml:422(para) newgrp.1.xml:132(para)
+#: login.1.xml:361(para) expiry.1.xml:132(para) chpasswd.8.xml:266(para)
+#: chage.1.xml:277(para)
+msgid "Secure user account information."
+msgstr "Informations sécurisées sur les comptes utilisateurs."
+
+#: vipw.8.xml:225(title) usermod.8.xml:590(title) userdel.8.xml:325(title)
+#: useradd.8.xml:835(title) suauth.5.xml:222(title) su.1.xml:437(title)
+#: sg.1.xml:140(title) shadow.5.xml:283(title) shadow.3.xml:238(title)
+#: pwconv.8.xml:262(title) pwck.8.xml:354(title) porttime.5.xml:142(title)
+#: passwd.5.xml:188(title) passwd.1.xml:494(title) nologin.8.xml:81(title)
+#: newusers.8.xml:465(title) newgrp.1.xml:151(title)
+#: login.defs.5.xml:547(title) login.access.5.xml:133(title)
+#: login.1.xml:398(title) limits.5.xml:206(title) gshadow.5.xml:174(title)
+#: grpck.8.xml:290(title) groups.1.xml:112(title) groupmod.8.xml:321(title)
+#: groupmems.8.xml:229(title) groupdel.8.xml:214(title)
+#: groupadd.8.xml:341(title) gpasswd.1.xml:297(title) faillog.8.xml:255(title)
+#: faillog.5.xml:108(title) expiry.1.xml:139(title) chsh.1.xml:191(title)
+#: chpasswd.8.xml:285(title) chgpasswd.8.xml:237(title) chfn.1.xml:225(title)
+#: chage.1.xml:317(title)
+msgid "SEE ALSO"
+msgstr "VOIR AUSSI"
+
+#: vipw.8.xml:226(para)
+msgid ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry condition=\"tcb"
+"\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+"condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry condition=\"tcb"
+"\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+"condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: usermod.8.xml:46(firstname) userdel.8.xml:45(firstname)
+#: useradd.8.xml:58(firstname) su.1.xml:56(firstname) sg.1.xml:40(firstname)
+#: shadow.5.xml:39(firstname) shadow.3.xml:39(firstname)
+#: pwck.8.xml:45(firstname) porttime.5.xml:39(firstname)
+#: passwd.5.xml:39(firstname) passwd.1.xml:46(firstname)
+#: newusers.8.xml:55(firstname) newgrp.1.xml:40(firstname)
+#: logoutd.8.xml:39(firstname) login.defs.5.xml:106(firstname)
+#: login.1.xml:72(firstname) lastlog.8.xml:41(firstname)
+#: grpck.8.xml:40(firstname) groups.1.xml:39(firstname)
+#: groupmod.8.xml:40(firstname) groupdel.8.xml:40(firstname)
+#: groupadd.8.xml:42(firstname) faillog.8.xml:39(firstname)
+#: faillog.5.xml:39(firstname) expiry.1.xml:43(firstname)
+#: chsh.1.xml:42(firstname) chpasswd.8.xml:43(firstname)
+#: chfn.1.xml:42(firstname) chage.1.xml:40(firstname)
+msgid "Julianne Frances"
+msgstr "Julianne Frances"
+
+#: usermod.8.xml:47(surname) userdel.8.xml:46(surname)
+#: useradd.8.xml:59(surname) su.1.xml:57(surname) sg.1.xml:41(surname)
+#: shadow.5.xml:40(surname) shadow.3.xml:40(surname) pwck.8.xml:46(surname)
+#: porttime.5.xml:40(surname) passwd.5.xml:40(surname) passwd.1.xml:47(surname)
+#: newusers.8.xml:56(surname) newgrp.1.xml:41(surname)
+#: logoutd.8.xml:40(surname) login.defs.5.xml:107(surname)
+#: login.1.xml:73(surname) lastlog.8.xml:42(surname) grpck.8.xml:41(surname)
+#: groups.1.xml:40(surname) groupmod.8.xml:41(surname)
+#: groupdel.8.xml:41(surname) groupadd.8.xml:43(surname)
+#: faillog.8.xml:40(surname) faillog.5.xml:40(surname) expiry.1.xml:44(surname)
+#: chsh.1.xml:43(surname) chpasswd.8.xml:44(surname) chfn.1.xml:43(surname)
+#: chage.1.xml:41(surname)
+msgid "Haugh"
+msgstr "Haugh"
+
+#: usermod.8.xml:48(contrib) userdel.8.xml:47(contrib)
+#: useradd.8.xml:60(contrib) sg.1.xml:42(contrib) newusers.8.xml:57(contrib)
+#: newgrp.1.xml:42(contrib) logoutd.8.xml:41(contrib)
+#: login.defs.5.xml:108(contrib) groups.1.xml:41(contrib)
+#: groupmod.8.xml:42(contrib) groupdel.8.xml:42(contrib)
+#: groupadd.8.xml:44(contrib) chpasswd.8.xml:45(contrib)
+msgid "Creation, 1991"
+msgstr "Création, 1991"
+
+#: usermod.8.xml:64(refentrytitle) usermod.8.xml:71(refname)
+#: usermod.8.xml:77(command) login.defs.5.xml:510(term)
+msgid "usermod"
+msgstr "usermod"
+
+#: usermod.8.xml:72(refpurpose)
+msgid "modify a user account"
+msgstr "Modifier un compte utilisateur"
+
+#: usermod.8.xml:81(replaceable) userdel.8.xml:78(replaceable)
+#: useradd.8.xml:92(replaceable) passwd.1.xml:82(replaceable)
+#: chsh.1.xml:78(replaceable) chfn.1.xml:78(replaceable)
+#: chage.1.xml:75(replaceable)
+msgid "LOGIN"
+msgstr "LOGIN"
+
+#: usermod.8.xml:87(para)
+msgid ""
+"The <command>usermod</command> command modifies the system account files to "
+"reflect the changes that are specified on the command line."
+msgstr ""
+"La commande <command>usermod</command> modifie les fichiers d'administration "
+"des comptes du système selon les modifications qui ont été indiquées sur la "
+"ligne de commande."
+
+#: usermod.8.xml:95(para)
+msgid "The options which apply to the <command>usermod</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>usermod</command> sont :"
+
+#: usermod.8.xml:101(term)
+msgid "<option>-a</option>, <option>--append</option>"
+msgstr "<option>-a</option>, <option>--append</option>"
+
+#: usermod.8.xml:105(para)
+msgid ""
+"Add the user to the supplementary group(s). Use only with the <option>-G</"
+"option> option."
+msgstr ""
+"Ajouter l'utilisateur aux groupes supplémentaires. N'utilisez cette option "
+"qu'avec l'option <option>-G</option>."
+
+#: usermod.8.xml:112(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-b</option>, <option>--badnames</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: usermod.8.xml:116(para) useradd.8.xml:135(para) pwck.8.xml:190(para)
+#: newusers.8.xml:276(para)
+msgid "Allow names that do not conform to standards."
+msgstr ""
+
+#: usermod.8.xml:122(term) useradd.8.xml:162(term)
+msgid ""
+"<option>-c</option>, <option>--comment</option>&nbsp;<replaceable>COMMENT</"
+"replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--comment</option>&nbsp;"
+"<replaceable>COMMENTAIRE</replaceable>"
+
+#: usermod.8.xml:126(para)
+msgid ""
+"The new value of the user's password file comment field. It is normally "
+"modified using the <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> utility."
+msgstr ""
+"La nouvelle valeur du champ de commentaire du fichier de mots de passe pour "
+"l'utilisateur. Il est normalement modifié en utilisant l'utilitaire "
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: usermod.8.xml:135(term)
+msgid ""
+"<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home</option> <replaceable>RÉP_PERSO</"
+"replaceable>"
+
+#: usermod.8.xml:139(para)
+msgid "The user's new login directory."
+msgstr "Le nouveau répertoire personnel de l'utilisateur."
+
+#: usermod.8.xml:142(para)
+msgid ""
+"If the <option>-m</option> option is given, the contents of the current home "
+"directory will be moved to the new home directory, which is created if it "
+"does not already exist."
+msgstr ""
+"Si l'option <option>-m</option> est fournie, le contenu du répertoire "
+"personnel actuel sera déplacé dans le nouveau répertoire personnel, qui sera "
+"créé si nécessaire."
+
+#: usermod.8.xml:151(term) useradd.8.xml:200(term) useradd.8.xml:577(term)
+msgid ""
+"<option>-e</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>EXPIRE_DATE</replaceable>"
+msgstr ""
+"<option>-e</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>DATE_FIN_VALIDITÉ</replaceable>"
+
+#: usermod.8.xml:155(para) useradd.8.xml:204(para)
+msgid ""
+"The date on which the user account will be disabled. The date is specified "
+"in the format <emphasis remap=\"I\">YYYY-MM-DD</emphasis>."
+msgstr ""
+"Date à laquelle le compte utilisateur sera désactivé. La date est indiquée "
+"dans le format <emphasis remap=\"I\">AAAA-MM-JJ</emphasis>."
+
+#: usermod.8.xml:159(para)
+msgid ""
+"An empty <replaceable>EXPIRE_DATE</replaceable> argument will disable the "
+"expiration of the account."
+msgstr ""
+"Un paramètre <replaceable>DATE_FIN_VALIDITÉ</replaceable> vide désactivera "
+"l'expiration du compte."
+
+#: usermod.8.xml:163(para) usermod.8.xml:184(para)
+msgid ""
+"This option requires a <filename>/etc/shadow</filename> file. A <filename>/"
+"etc/shadow</filename> entry will be created if there were none."
+msgstr ""
+"Cette option nécessite un fichier <filename>/etc/shadow</filename>. Une "
+"entrée <filename>/etc/shadow</filename> sera créée si il n'y en avait pas."
+
+#: usermod.8.xml:171(term) useradd.8.xml:217(term) useradd.8.xml:589(term)
+msgid ""
+"<option>-f</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-f</option>, <option>--inactive</option>&nbsp;"
+"<replaceable>DURÉE_INACTIVITÉ</replaceable>"
+
+#: usermod.8.xml:175(para)
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled."
+msgstr ""
+"Nombre de jours suivant la fin de validité d'un mot de passe après lequel le "
+"compte est définitivement désactivé."
+
+#: usermod.8.xml:179(para)
+msgid ""
+"A value of 0 disables the account as soon as the password has expired, and a "
+"value of -1 disables the feature."
+msgstr ""
+"Une valeur de 0 désactive le compte dès que le mot de passe a dépassé sa fin "
+"de validité, et une valeur de -1 désactive cette fonctionnalité."
+
+#: usermod.8.xml:192(term) useradd.8.xml:236(term) useradd.8.xml:604(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GROUP</"
+"replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GROUPE</"
+"replaceable>"
+
+#: usermod.8.xml:196(para)
+msgid ""
+"The group name or number of the user's new initial login group. The group "
+"must exist."
+msgstr ""
+"Nom du groupe ou identifiant numérique du groupe de connexion initial de "
+"l'utilisateur. Le groupe doit exister."
+
+#: usermod.8.xml:200(para)
+msgid ""
+"Any file from the user's home directory owned by the previous primary group "
+"of the user will be owned by this new group."
+msgstr ""
+"Tout fichier du répertoire personnel de l'utilisateur appartenant au groupe "
+"primaire précédent de l'utilisateur appartiendra à ce nouveau groupe."
+
+#: usermod.8.xml:204(para)
+msgid ""
+"The group ownership of files outside of the user's home directory must be "
+"fixed manually."
+msgstr ""
+"Le groupe propriétaire des fichiers en dehors du répertoire personnel de "
+"l'utilisateur doit être modifié manuellement."
+
+#: usermod.8.xml:211(term) useradd.8.xml:263(term)
+msgid ""
+"<option>-G</option>, <option>--groups</option>&nbsp;<replaceable>GROUP1</"
+"replaceable>[<emphasis remap=\"I\">,GROUP2,...</emphasis>[<emphasis remap=\"I"
+"\">,GROUPN</emphasis>]]]"
+msgstr ""
+"<option>-G</option>, <option>--groups</option>&nbsp;<replaceable>GROUPE1</"
+"replaceable>[<emphasis remap=\"I\">,GROUPE2,...</emphasis>[<emphasis remap="
+"\"I\">,GROUPEN</emphasis>]]]"
+
+#: usermod.8.xml:215(para)
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option."
+msgstr ""
+"Liste de groupes supplémentaires auxquels appartient également "
+"l'utilisateur. Chaque groupe est séparé du suivant par une virgule, sans "
+"espace entre eux. Les groupes sont soumis aux mêmes restrictions que celles "
+"de l'option <option>-g</option>."
+
+#: usermod.8.xml:222(para)
+msgid ""
+"If the user is currently a member of a group which is not listed, the user "
+"will be removed from the group. This behaviour can be changed via the "
+"<option>-a</option> option, which appends the user to the current "
+"supplementary group list."
+msgstr ""
+"Si l'utilisateur fait actuellement partie d'un groupe qui n'est pas listé, "
+"l'utilisateur sera supprimé du groupe. Ce comportement peut être modifié par "
+"l'option <option>-a</option>, qui permet d'ajouter l'utilisateur à la liste "
+"actuelle des groupes supplémentaires."
+
+#: usermod.8.xml:231(term)
+msgid ""
+"<option>-l</option>, <option>--login</option>&nbsp;<replaceable>NEW_LOGIN</"
+"replaceable>"
+msgstr ""
+"<option>-l</option>, <option>--login</option>&nbsp;"
+"<replaceable>NOUVEAU_LOGIN</replaceable>"
+
+#: usermod.8.xml:235(para)
+msgid ""
+"The name of the user will be changed from <replaceable>LOGIN</replaceable> "
+"to <replaceable>NEW_LOGIN</replaceable>. Nothing else is changed. In "
+"particular, the user's home directory or mail spool should probably be "
+"renamed manually to reflect the new login name."
+msgstr ""
+"Le nom de l'utilisateur passera de <replaceable>LOGIN</replaceable> à "
+"<replaceable>NOUVEAU_LOGIN</replaceable>. Rien d'autre ne sera modifié. En "
+"particulier, le nom du répertoire personnel et l'emplacement de la boîte aux "
+"lettres de l'utilisateur devrontprobablement être changés pour refléter le "
+"nouveau nom de connexion."
+
+#: usermod.8.xml:245(term)
+msgid "<option>-L</option>, <option>--lock</option>"
+msgstr "<option>-L</option>, <option>--lock</option>"
+
+#: usermod.8.xml:249(para)
+msgid ""
+"Lock a user's password. This puts a '!' in front of the encrypted password, "
+"effectively disabling the password. You can't use this option with <option>-"
+"p</option> or <option>-U</option>."
+msgstr ""
+"Verrouiller le mot de passe d'un utilisateur. Cette option ajoute un « ! » "
+"devant le mot de passe chiffré, ce qui désactive le mot de passe. Vous ne "
+"pouvez pas utiliser cette option avec <option>-p</option> ou <option>-U</"
+"option>."
+
+#: usermod.8.xml:255(para)
+msgid ""
+"Note: if you wish to lock the account (not only access with a password), you "
+"should also set the <replaceable>EXPIRE_DATE</replaceable> to "
+"<replaceable>1</replaceable>."
+msgstr ""
+"Remarque : pour verrouiller le compte (et pas seulement l'accès au compte "
+"par un mot de passe), il est également nécessaire de placer "
+"<replaceable>DATE_FIN_VALIDITÉ</replaceable> à <replaceable>1</replaceable>."
+
+#: usermod.8.xml:264(term)
+msgid "<option>-m</option>, <option>--move-home</option>"
+msgstr "<option>-m</option>, <option>--move-home</option>"
+
+#: usermod.8.xml:268(para)
+msgid "Move the content of the user's home directory to the new location."
+msgstr ""
+"Déplacer le contenu du répertoire personnel de l'utilisateur vers un nouvel "
+"emplacement."
+
+#: usermod.8.xml:272(para)
+msgid ""
+"This option is only valid in combination with the <option>-d</option> (or "
+"<option>--home</option>) option."
+msgstr ""
+"Cette option ne fonctionne que lorsqu'elle est combinée avec l'option "
+"<option>-d</option> (ou <option>--home</option>)."
+
+#: usermod.8.xml:276(para)
+msgid ""
+"<command>usermod</command> will try to adapt the ownership of the files and "
+"to copy the modes, ACL and extended attributes, but manual changes might be "
+"needed afterwards."
+msgstr ""
+"<command>usermod</command> essayera d'adapter les permissions des fichiers "
+"et de copier les modes, ACL et attributs étendus. Cependant, vous risquez de "
+"devoir procéder à des modifications vous-même."
+
+#: usermod.8.xml:284(term) useradd.8.xml:397(term) groupmod.8.xml:146(term)
+#: groupadd.8.xml:157(term)
+msgid "<option>-o</option>, <option>--non-unique</option>"
+msgstr "<option>-o</option>, <option>--non-unique</option>"
+
+#: usermod.8.xml:288(para)
+msgid ""
+"When used with the <option>-u</option> option, this option allows to change "
+"the user ID to a non-unique value."
+msgstr ""
+"En combinaison avec l'option <option>-u</option>, cette option permet de "
+"changer l'identifiant utilisateur vers une valeur déjà utilisée."
+
+#: usermod.8.xml:295(term) useradd.8.xml:409(term) groupmod.8.xml:157(term)
+#: groupadd.8.xml:167(term)
+msgid ""
+"<option>-p</option>, <option>--password</option>&nbsp;<replaceable>PASSWORD</"
+"replaceable>"
+msgstr ""
+"<option>-p</option>, <option>--password</option>&nbsp;"
+"<replaceable>MOT_DE_PASSE</replaceable>"
+
+#: usermod.8.xml:299(para) groupmod.8.xml:161(para)
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>."
+msgstr ""
+"Mot de passe chiffré, comme renvoyé par <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>."
+
+#: usermod.8.xml:304(para) useradd.8.xml:418(para) groupmod.8.xml:166(para)
+#: groupadd.8.xml:176(para)
+msgid ""
+"<emphasis role=\"bold\">Note:</emphasis> This option is not recommended "
+"because the password (or encrypted password) will be visible by users "
+"listing the processes."
+msgstr ""
+"<emphasis role=\"bold\">Remarque :</emphasis> l'utilisation de cette option "
+"est déconseillée car le mot de passe (ou le mot de passe chiffré) peut être "
+"visible des utilisateurs qui affichent la liste des processus. "
+
+#: usermod.8.xml:309(para)
+msgid ""
+"The password will be written in the local <filename>/etc/passwd</filename> "
+"or <filename>/etc/shadow</filename> file. This might differ from the "
+"password database configured in your PAM configuration."
+msgstr ""
+"Le mot de passe sera écrit dans le fichier <filename>/etc/passwd</filename> "
+"local ou le fichier <filename>/etc/shadow</filename>. Cela peut être "
+"différent de la base de données de mots de passe définie dans la "
+"configuration de PAM."
+
+#: usermod.8.xml:315(para) useradd.8.xml:423(para) groupmod.8.xml:171(para)
+#: groupadd.8.xml:181(para)
+msgid ""
+"You should make sure the password respects the system's password policy."
+msgstr ""
+"Il est nécessaire de vérifier si le mot de passe respecte la politique de "
+"mots de passe du système."
+
+#: usermod.8.xml:334(term) userdel.8.xml:158(term) useradd.8.xml:469(term)
+#: groupmod.8.xml:190(term) groupdel.8.xml:113(term) groupadd.8.xml:216(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_DIR</"
+#| "replaceable>"
+msgid ""
+"<option>-P</option>, <option>--prefix</option>&nbsp;<replaceable>PREFIX_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home</option> <replaceable>RÉP_PERSO</"
+"replaceable>"
+
+#: usermod.8.xml:338(para) userdel.8.xml:162(para) useradd.8.xml:473(para)
+#: groupmod.8.xml:194(para) groupdel.8.xml:117(para) groupadd.8.xml:220(para)
+msgid ""
+"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."
+msgstr ""
+
+#: usermod.8.xml:351(term) useradd.8.xml:486(term) useradd.8.xml:624(term)
+#: su.1.xml:186(term) chsh.1.xml:119(term)
+msgid ""
+"<option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SHELL</"
+"replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--shell</option>&nbsp;"
+"<replaceable>INTERPRÉTEUR</replaceable>"
+
+#: usermod.8.xml:355(para) chsh.1.xml:123(para)
+msgid ""
+"The name of the user's new login shell. Setting this field to blank causes "
+"the system to select the default login shell."
+msgstr ""
+"Nom du nouvel interpréteur de commandes initial (« login shell ») de "
+"l'utilisateur. Si ce champ est vide, le système sélectionnera l'interpréteur "
+"de commandes initial par défaut."
+
+#: usermod.8.xml:362(term) useradd.8.xml:500(term)
+msgid ""
+"<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+"replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+"replaceable>"
+
+#: usermod.8.xml:366(para)
+msgid "The new numerical value of the user's ID."
+msgstr "La valeur numérique de l'identifiant de l'utilisateur."
+
+#: usermod.8.xml:369(para)
+msgid ""
+"This value must be unique, unless the <option>-o</option> option is used. "
+"The value must be non-negative."
+msgstr ""
+"Cette valeur doit être unique, à moins que l'option <option>-o</option> ne "
+"soit utilisée. La valeur ne doit pas être négative."
+
+#: usermod.8.xml:374(para)
+msgid ""
+"The user's mailbox, and any files which the user owns and which are located "
+"in the user's home directory will have the file user ID changed "
+"automatically."
+msgstr ""
+"La boîte aux lettres et tous les fichiers possédés par l'utilisateur et qui "
+"sont situés dans son répertoire personnel verront leur identifiant "
+"d'utilisateur automatiquement modifié."
+
+#: usermod.8.xml:379(para)
+msgid ""
+"The ownership of files outside of the user's home directory must be fixed "
+"manually."
+msgstr ""
+"Le propriétaire des fichiers en dehors du répertoire personnel de "
+"l'utilisateur doit être modifié manuellement."
+
+#: usermod.8.xml:383(para)
+msgid ""
+"No checks will be performed with regard to the <option>UID_MIN</option>, "
+"<option>UID_MAX</option>, <option>SYS_UID_MIN</option>, or "
+"<option>SYS_UID_MAX</option> from <filename>/etc/login.defs</filename>."
+msgstr ""
+"Aucun contrôle ne sera effectué sur les valeurs de <option>UID_MIN</option>, "
+"<option>UID_MAX</option>, <option>SYS_UID_MIN</option>, ou "
+"<option>SYS_UID_MAX</option> du fichier <filename>/etc/login.defs</filename>."
+
+#: usermod.8.xml:392(term)
+msgid "<option>-U</option>, <option>--unlock</option>"
+msgstr "<option>-U</option>, <option>--unlock</option>"
+
+#: usermod.8.xml:396(para)
+msgid ""
+"Unlock a user's password. This removes the '!' in front of the encrypted "
+"password. You can't use this option with <option>-p</option> or <option>-L</"
+"option>."
+msgstr ""
+"Déverrouiller le mot de passe d'un utilisateur. Cela supprime le « ! » situé "
+"devant le mot de passe chiffré. Vous ne pouvez pas utiliser cette option "
+"avec <option>-p</option> ou <option>-L</option>."
+
+#: usermod.8.xml:401(para)
+msgid ""
+"Note: if you wish to unlock the account (not only access with a password), "
+"you should also set the <replaceable>EXPIRE_DATE</replaceable> (for example "
+"to <replaceable>99999</replaceable>, or to the <option>EXPIRE</option> value "
+"from <filename>/etc/default/useradd</filename>)."
+msgstr ""
+"Remarque : pour déverrouiller le compte (et pas seulement l'accès au compte "
+"via un mot de passe), vous devriez définir la valeur "
+"<replaceable>DATE_FIN_VALIDITÉ</replaceable> (par exemple à "
+"<replaceable>99999</replaceable> ou à la valeur <option>EXPIRE</option> dans "
+"<filename>/etc/default/useradd</filename>)."
+
+#: usermod.8.xml:412(term)
+msgid ""
+"<option>-v</option>, <option>--add-subuids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-v</option>, <option>--add-subuids</option> <replaceable>PREMIER</"
+"replaceable>-<replaceable>DERNIER</replaceable>"
+
+#: usermod.8.xml:416(para)
+msgid "Add a range of subordinate uids to the user's account."
+msgstr "Ajoute une plage d'UIDs subalternes au compte de l'utilisateur."
+
+#: usermod.8.xml:419(para) usermod.8.xml:457(para)
+msgid ""
+"This option may be specified multiple times to add multiple ranges to a "
+"users account."
+msgstr ""
+"Vous pouvez indiquer plusieurs fois cette option, pour ajouter plusieurs "
+"plages de comptes utilisateurs."
+
+#: usermod.8.xml:422(para) usermod.8.xml:442(para)
+msgid ""
+"No checks will be performed with regard to <option>SUB_UID_MIN</option>, "
+"<option>SUB_UID_MAX</option>, or <option>SUB_UID_COUNT</option> from /etc/"
+"login.defs."
+msgstr ""
+"Aucun contrôle ne sera effectué sur les valeurs de <option>SUB_UID_MIN</"
+"option>, <option>SUB_UID_MAX</option>, ou <option>SUB_UID_COUNT</option> du "
+"fichier <filename>/etc/login.defs</filename>."
+
+#: usermod.8.xml:430(term)
+msgid ""
+"<option>-V</option>, <option>--del-subuids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-V</option>, <option>--del-subuids</option> <replaceable>PREMIER</"
+"replaceable>-<replaceable>DERNIER</replaceable>"
+
+#: usermod.8.xml:434(para)
+msgid "Remove a range of subordinate uids from the user's account."
+msgstr "Supprime une plage d'Uids subalternes du compte de l'utilisateur."
+
+#: usermod.8.xml:437(para)
+msgid ""
+"This option may be specified multiple times to remove multiple ranges to a "
+"users account. When both <option>--del-subuids</option> and <option>--add-"
+"subuids</option> are specified, the removal of all subordinate uid ranges "
+"happens before any subordinate uid range is added."
+msgstr ""
+"Vous pouvez indiquer cette option plusieurs fois pour supprimer plusieurs "
+"plages du compte d'un utilisateur. Si vous spécifiez à la fois <option>--del-"
+"subuids</option> et <option>--add-subuids</option>, la suppression de toutes "
+"les plages d'uids subalternes se fait avant tout ajout d'une plage d'uids "
+"subalternes."
+
+#: usermod.8.xml:450(term)
+msgid ""
+"<option>-w</option>, <option>--add-subgids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-w</option>, <option>--add-subgids</option> <replaceable>PREMIER</"
+"replaceable>-<replaceable>DERNIER</replaceable>"
+
+#: usermod.8.xml:454(para)
+msgid "Add a range of subordinate gids to the user's account."
+msgstr "Ajoute une plage de gids subalternes au compte d'un utilisateur."
+
+#: usermod.8.xml:460(para) usermod.8.xml:480(para)
+msgid ""
+"No checks will be performed with regard to <option>SUB_GID_MIN</option>, "
+"<option>SUB_GID_MAX</option>, or <option>SUB_GID_COUNT</option> from /etc/"
+"login.defs."
+msgstr ""
+"Aucun contrôle ne sera effectué sur les valeurs de <option>SUB_GID_MIN</"
+"option>, <option>SUB_GID_MAX</option>, ou <option>SUB_GID_COUNT</option> du "
+"fichier <filename>/etc/login.defs</filename>."
+
+#: usermod.8.xml:468(term)
+msgid ""
+"<option>-W</option>, <option>--del-subgids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-W</option>, <option>--del-subgids</option> <replaceable>PREMIER</"
+"replaceable>-<replaceable>DERNIER</replaceable>"
+
+#: usermod.8.xml:472(para)
+msgid "Remove a range of subordinate gids from the user's account."
+msgstr "Supprime une plage de gids subalternes du compte de l'utilisateur."
+
+#: usermod.8.xml:475(para)
+msgid ""
+"This option may be specified multiple times to remove multiple ranges to a "
+"users account. When both <option>--del-subgids</option> and <option>--add-"
+"subgids</option> are specified, the removal of all subordinate gid ranges "
+"happens before any subordinate gid range is added."
+msgstr ""
+"Vous pouvez indiquer cette option plusieurs fois pour supprimer plusieurs "
+"plages du compte d'un utilisateur. Quand vous indiquez à la fois <option>--"
+"del-subgids</option> et <option>--add-subgids</option>, la uppression de "
+"touts les plages de gids subalternes se fera aant tout ajout d'une plage de "
+"gids subalternes."
+
+#: usermod.8.xml:488(term) useradd.8.xml:535(term)
+msgid ""
+"<option>-Z</option>, <option>--selinux-user</option>&nbsp;"
+"<replaceable>SEUSER</replaceable>"
+msgstr ""
+"<option>-Z</option>, <option>--selinux-user</option>&nbsp;"
+"<replaceable>UTILISATEUR_SELINUX</replaceable>"
+
+#: usermod.8.xml:492(para)
+msgid "The new SELinux user for the user's login."
+msgstr ""
+"Le nouvel utilisateur SELinux utilisé pour la connexion de l'utilisateur."
+
+#: usermod.8.xml:495(para)
+msgid ""
+"A blank <replaceable>SEUSER</replaceable> will remove the SELinux user "
+"mapping for user <replaceable>LOGIN</replaceable> (if any)."
+msgstr ""
+"Un paramètre <replaceable>SEUSER</replaceable> vide éliminera l'association "
+"de l'utilisateur SELinux pour l'utilisateur <replaceable>LOGIN</replaceable> "
+"(si spécifiée)"
+
+#: usermod.8.xml:506(title) userdel.8.xml:298(title) useradd.8.xml:652(title)
+#: su.1.xml:330(title) shadow.3.xml:218(title) passwd.1.xml:377(title)
+#: newusers.8.xml:363(title) login.1.xml:260(title) lastlog.8.xml:229(title)
+#: groupdel.8.xml:133(title) groupadd.8.xml:274(title) gpasswd.1.xml:252(title)
+#: faillog.8.xml:232(title) chpasswd.8.xml:231(title)
+#: chgpasswd.8.xml:186(title)
+msgid "CAVEATS"
+msgstr "AVERTISSEMENTS"
+
+#: usermod.8.xml:507(para)
+msgid ""
+"You must make certain that the named user is not executing any processes "
+"when this command is being executed if the user's numerical user ID, the "
+"user's name, or the user's home directory is being changed. "
+"<command>usermod</command> checks this on Linux. On other platforms it only "
+"uses utmp to check if the user is logged in."
+msgstr ""
+"Il est nécessaire de contrôler que l'identifiant indiqué n'a pas de "
+"processus en cours d'exécution si cette commande est utilisée pour modifier "
+"l'identifiant numérique de l'utilisateur, son identifiant (login) ou son "
+"répertoire personnel. <command>usermod</command> effectue ce contrôle sous "
+"Linux mais vérifie seulement les informations d'utmp sur les autres "
+"architectures pour vérifier si l'utilisateur est connecté."
+
+#: usermod.8.xml:514(para)
+msgid ""
+"You must change the owner of any <command>crontab</command> files or "
+"<command>at</command> jobs manually."
+msgstr ""
+"Il est nécessaire de changer manuellement le propriétaire des fichiers "
+"<command>crontab</command> ou des travaux programmés par <command>at</"
+"command>."
+
+#: usermod.8.xml:518(para)
+msgid "You must make any changes involving NIS on the NIS server."
+msgstr ""
+"Les modifications qui concernent NIS doivent être effectuées sur le serveur "
+"NIS."
+
+#: usermod.8.xml:33(term) useradd.8.xml:33(term) login.defs.5.xml:33(term)
+#: lastlog.8.xml:33(term)
+#, fuzzy
+#| msgid "<option>SUB_UID_MAX</option> (number)"
+msgid "<option>LASTLOG_UID_MAX</option> (number)"
+msgstr "<option>SUB_UID_MAX</option> (nombre)"
+
+#: usermod.8.xml:35(para) useradd.8.xml:35(para) login.defs.5.xml:35(para)
+#: lastlog.8.xml:35(para)
+msgid ""
+"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."
+msgstr ""
+
+#: usermod.8.xml:41(para) useradd.8.xml:41(para) login.defs.5.xml:41(para)
+#: lastlog.8.xml:41(para)
+msgid ""
+"No <option>LASTLOG_UID_MAX</option> option present in the configuration "
+"means that there is no user ID limit for writing lastlog entries."
+msgstr ""
+
+#: usermod.8.xml:32(term) userdel.8.xml:32(term) useradd.8.xml:32(term)
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>MAIL_DIR</option> (string)"
+msgstr "<option>MAIL_DIR</option> (chaîne de caractères)"
+
+#: usermod.8.xml:34(para) userdel.8.xml:34(para) useradd.8.xml:34(para)
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"The mail spool directory. This is needed to manipulate the mailbox when its "
+"corresponding user account is modified or deleted. If not specified, a "
+"compile-time default is used."
+msgstr ""
+"Répertoire d'attente des courriels (« mail spool directory »). Ce paramètre "
+"est nécessaire pour manipuler les boîtes à lettres lorsque le compte d'un "
+"utilisateur est modifié ou supprimé. S'il n'est pas spécifié, une valeur par "
+"défaut définie à la compilation est utilisée."
+
+#: usermod.8.xml:41(term) userdel.8.xml:41(term) useradd.8.xml:41(term)
+#: su.1.xml:41(term) login.defs.5.xml:41(term) login.1.xml:41(term)
+msgid "<option>MAIL_FILE</option> (string)"
+msgstr "<option>MAIL_FILE</option> (chaîne de caractères)"
+
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"Defines the location of the users mail spool files relatively to their home "
+"directory."
+msgstr ""
+"Définir l'emplacement des boîtes aux lettres des utilisateurs relativement à "
+"leur répertoire personnel."
+
+#. FIXME: MAIL_FILE not used in useradd
+#: usermod.8.xml:50(para) userdel.8.xml:50(para) useradd.8.xml:50(para)
+#: su.1.xml:50(para) login.defs.5.xml:50(para) login.1.xml:50(para)
+msgid ""
+"The <option>MAIL_DIR</option> and <option>MAIL_FILE</option> variables are "
+"used by <command>useradd</command>, <command>usermod</command>, and "
+"<command>userdel</command> to create, move, or delete the user's mail spool."
+msgstr ""
+"Les paramètres <option>MAIL_DIR</option> et <option>MAIL_FILE</option> sont "
+"utilisés par <command>useradd</command>, <command>usermod</command> et "
+"<command>userdel</command> pour créer, déplacer ou supprimer les boîtes aux "
+"lettres des utilisateurs."
+
+#: usermod.8.xml:56(para) userdel.8.xml:56(para) useradd.8.xml:56(para)
+#: su.1.xml:56(para) login.defs.5.xml:56(para) login.1.xml:56(para)
+msgid ""
+"If <option>MAIL_CHECK_ENAB</option> is set to <replaceable>yes</"
+"replaceable>, they are also used to define the <envar>MAIL</envar> "
+"environment variable."
+msgstr ""
+"Si <option>MAIL_CHECK_ENAB</option> est réglé sur <replaceable>yes</"
+"replaceable>, ces variables servent également à définir la variable "
+"d'environnement <envar>MAIL</envar>."
+
+#: usermod.8.xml:30(term) userdel.8.xml:30(term) useradd.8.xml:30(term)
+#: pwconv.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: grpck.8.xml:30(term) groupmod.8.xml:30(term) groupmems.8.xml:30(term)
+#: groupdel.8.xml:30(term) groupadd.8.xml:30(term) gpasswd.1.xml:30(term)
+#: chgpasswd.8.xml:30(term)
+msgid "<option>MAX_MEMBERS_PER_GROUP</option> (number)"
+msgstr "<option>MAX_MEMBERS_PER_GROUP</option> (nombre)"
+
+#: usermod.8.xml:32(para) userdel.8.xml:32(para) useradd.8.xml:32(para)
+#: pwconv.8.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: grpck.8.xml:32(para) groupmod.8.xml:32(para) groupmems.8.xml:32(para)
+#: groupdel.8.xml:32(para) groupadd.8.xml:32(para) gpasswd.1.xml:32(para)
+#: chgpasswd.8.xml:32(para)
+msgid ""
+"Maximum members per group entry. When the maximum is reached, a new group "
+"entry (line) is started in <filename>/etc/group</filename> (with the same "
+"name, same password, and same GID)."
+msgstr ""
+"Nombre maximum de membres par entrée de groupe. Lorsque le maximum est "
+"atteint, une nouvelle entrée de groupe (ligne) est démarrée dans <filename>/"
+"etc/group</filename> (avec le même nom, même mot de passe, et même GID)."
+
+#: usermod.8.xml:37(para) userdel.8.xml:37(para) useradd.8.xml:37(para)
+#: pwconv.8.xml:37(para) newusers.8.xml:37(para) login.defs.5.xml:37(para)
+#: grpck.8.xml:37(para) groupmod.8.xml:37(para) groupmems.8.xml:37(para)
+#: groupdel.8.xml:37(para) groupadd.8.xml:37(para) gpasswd.1.xml:37(para)
+#: chgpasswd.8.xml:37(para)
+msgid ""
+"The default value is 0, meaning that there are no limits in the number of "
+"members in a group."
+msgstr ""
+"La valeur par défaut est 0, ce qui signifie qu'il n'y a pas de limites pour "
+"le nombre de membres dans un groupe."
+
+#. Note: on HP, split groups have the same ID, but different
+#. names.
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: pwconv.8.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: grpck.8.xml:43(para) groupmod.8.xml:43(para) groupmems.8.xml:43(para)
+#: groupdel.8.xml:43(para) groupadd.8.xml:43(para) gpasswd.1.xml:43(para)
+#: chgpasswd.8.xml:43(para)
+msgid ""
+"This feature (split group) permits to limit the length of lines in the group "
+"file. This is useful to make sure that lines for NIS groups are not larger "
+"than 1024 characters."
+msgstr ""
+"Cette fonctionnalité (groupe découpé) permet de limiter la longueur des "
+"lignes dans le fichier de groupes. Ceci est utile pour s'assurer que les "
+"lignes pour les groupes NIS ne sont pas plus grandes que 1024 caractères."
+
+#: usermod.8.xml:48(para) userdel.8.xml:48(para) useradd.8.xml:48(para)
+#: pwconv.8.xml:48(para) newusers.8.xml:48(para) login.defs.5.xml:48(para)
+#: grpck.8.xml:48(para) groupmod.8.xml:48(para) groupmems.8.xml:48(para)
+#: groupdel.8.xml:48(para) groupadd.8.xml:48(para) gpasswd.1.xml:48(para)
+#: chgpasswd.8.xml:48(para)
+msgid "If you need to enforce such limit, you can use 25."
+msgstr ""
+"Si vous avez besoin de configurer cette limite, vous pouvez utiliser 25."
+
+#: usermod.8.xml:51(para) userdel.8.xml:51(para) useradd.8.xml:51(para)
+#: pwconv.8.xml:51(para) newusers.8.xml:51(para) login.defs.5.xml:51(para)
+#: grpck.8.xml:51(para) groupmod.8.xml:51(para) groupmems.8.xml:51(para)
+#: groupdel.8.xml:51(para) groupadd.8.xml:51(para) gpasswd.1.xml:51(para)
+#: chgpasswd.8.xml:51(para)
+msgid ""
+"Note: split groups may not be supported by all tools (even in the Shadow "
+"toolsuite). You should not use this variable unless you really need it."
+msgstr ""
+"Remarque : les groupes découpés ne sont peut-être pas pris en charge par "
+"tous les outils (même dans la suite d'outils Shadow). Vous ne devriez pas "
+"utiliser cette variable, sauf si vous en avez vraiment besoin."
+
+#: usermod.8.xml:30(term) useradd.8.xml:30(term) newusers.8.xml:30(term)
+#: login.defs.5.xml:30(term)
+msgid "<option>SUB_GID_MIN</option> (number)"
+msgstr "<option>SUB_GID_MIN</option> (nombre)"
+
+#: usermod.8.xml:31(term) useradd.8.xml:31(term) newusers.8.xml:31(term)
+#: login.defs.5.xml:31(term)
+msgid "<option>SUB_GID_MAX</option> (number)"
+msgstr "<option>SUB_GID_MAX</option> (nombre)"
+
+#: usermod.8.xml:32(term) useradd.8.xml:32(term) newusers.8.xml:32(term)
+#: login.defs.5.xml:32(term)
+msgid "<option>SUB_GID_COUNT</option> (number)"
+msgstr "<option>SUB_GID_COUNT</option> (nombre)"
+
+#: usermod.8.xml:34(para) useradd.8.xml:34(para) newusers.8.xml:34(para)
+#: login.defs.5.xml:34(para)
+msgid ""
+"If <filename>/etc/subuid</filename> exists, the commands <command>useradd</"
+"command> and <command>newusers</command> (unless the user already have "
+"subordinate group IDs) allocate <option>SUB_GID_COUNT</option> unused group "
+"IDs from the range <option>SUB_GID_MIN</option> to <option>SUB_GID_MAX</"
+"option> for each new user."
+msgstr ""
+"Si <filename>/etc/subuid</filename> existe, les commandes <command>useradd</"
+"command> et <command>newusers</command> affectent à <option>SUB_GID_COUNT</"
+"option> les GIDs non utilisés compris entre <option>SUB_GID_MIN</option> et "
+"<option>SUB_GID_MAX</option> pour chaque utilisateur (sauf si l'utilisateur "
+"a déjà indiqué des IDs de groupes subalternes)."
+
+#: usermod.8.xml:42(para) useradd.8.xml:42(para) newusers.8.xml:42(para)
+#: login.defs.5.xml:42(para)
+msgid ""
+"The default values for <option>SUB_GID_MIN</option>, <option>SUB_GID_MAX</"
+"option>, <option>SUB_GID_COUNT</option> are respectively 100000, 600100000 "
+"and 65536."
+msgstr ""
+"Les valeurs par défaut pour <option>SUB_GID_MIN</option>, "
+"<option>SUB_GID_MAX</option> et <option>SUB_GID_COUNT</option> sont "
+"respectivement 100000, 600100000 et 65536."
+
+#: usermod.8.xml:30(term) useradd.8.xml:30(term) newusers.8.xml:30(term)
+#: login.defs.5.xml:30(term)
+msgid "<option>SUB_UID_MIN</option> (number)"
+msgstr "<option>SUB_UID_MIN</option> (nombre)"
+
+#: usermod.8.xml:31(term) useradd.8.xml:31(term) newusers.8.xml:31(term)
+#: login.defs.5.xml:31(term)
+msgid "<option>SUB_UID_MAX</option> (number)"
+msgstr "<option>SUB_UID_MAX</option> (nombre)"
+
+#: usermod.8.xml:32(term) useradd.8.xml:32(term) newusers.8.xml:32(term)
+#: login.defs.5.xml:32(term)
+msgid "<option>SUB_UID_COUNT</option> (number)"
+msgstr "<option>SUB_UID_COUNT</option> (nombre)"
+
+#: usermod.8.xml:34(para) useradd.8.xml:34(para) newusers.8.xml:34(para)
+#: login.defs.5.xml:34(para)
+msgid ""
+"If <filename>/etc/subuid</filename> exists, the commands <command>useradd</"
+"command> and <command>newusers</command> (unless the user already have "
+"subordinate user IDs) allocate <option>SUB_UID_COUNT</option> unused user "
+"IDs from the range <option>SUB_UID_MIN</option> to <option>SUB_UID_MAX</"
+"option> for each new user."
+msgstr ""
+"Si <filename>/etc/subuid</filename> existe, les commandes <command>useradd</"
+"command> et <command>newusers</command> affectent à <option>SUB_UID_COUNT</"
+"option> les UIDs non utilisés compris entre <option>SUB_UID_MIN</option> et "
+"<option>SUB_UID_MAX</option> pour chaque utilisateur (sauf si l'utilisateur "
+"a déjà indiqué des IDs de utilisateurs subalternes)."
+
+#: usermod.8.xml:42(para) useradd.8.xml:42(para) newusers.8.xml:42(para)
+#: login.defs.5.xml:42(para)
+msgid ""
+"The default values for <option>SUB_UID_MIN</option>, <option>SUB_UID_MAX</"
+"option>, <option>SUB_UID_COUNT</option> are respectively 100000, 600100000 "
+"and 65536."
+msgstr ""
+"Les valeurs par défaut pour <option>SUB_UID_MIN</option>, "
+"<option>SUB_UID_MAX</option>, <option>SUB_UID_COUNT</option>, sont "
+"respectivement 100000, 600100000 et 65536."
+
+#: usermod.8.xml:30(term) userdel.8.xml:30(term) useradd.8.xml:30(term)
+#: pwck.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>TCB_SYMLINKS</option> (boolean)"
+msgstr "<option>TCB_SYMLINKS</option> (booléen)"
+
+#: usermod.8.xml:37(programlisting) userdel.8.xml:37(programlisting)
+#: useradd.8.xml:37(programlisting) pwck.8.xml:37(programlisting)
+#: login.defs.5.xml:37(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"if ( UID is less than 1000) {\n"
+" use /etc/tcb/user\n"
+"} else if ( UID is less than 1000000) {\n"
+" kilos = UID / 1000\n"
+" use /etc/tcb/:kilos/user\n"
+" make symlink /etc/tcb/user to the above directory\n"
+"} else {\n"
+" megas = UID / 1000000\n"
+" kilos = ( UID / megas * 1000000 ) / 1000\n"
+" use /etc/tcb/:megas/:kilos/user\n"
+" make symlink /etc/tcb/user to the above directory\n"
+"}\n"
+" "
+msgstr ""
+"\n"
+"si ( UID est inférieur à 1000) {\n"
+" utiliser /etc/tcb/user\n"
+"} sinon, et si ( UID est inférieur à 1000000) {\n"
+" kilos = UID / 1000\n"
+" utiliser /etc/tcb/:kilos/user\n"
+" faire un lien symbolique de /etc/tcb/user vers le répertoire précédent\n"
+"} sinon {\n"
+" megas = UID / 1000000\n"
+" kilos = ( UID / megas * 1000000 ) / 1000\n"
+" utiliser /etc/tcb/:megas/:kilos/user\n"
+" faire un lien symbolique de /etc/tcb/user vers le répertoire précédent\n"
+"}\n"
+" "
+
+#: usermod.8.xml:32(para) userdel.8.xml:32(para) useradd.8.xml:32(para)
+#: pwck.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the location of the user tcb directory to "
+"be created will not be automatically set to /etc/tcb/user, but will be "
+"computed depending on the UID of the user, according to the following "
+"algorithm: <placeholder-1/>"
+msgstr ""
+"Si <replaceable>yes</replaceable> (« oui »), l'emplacement du répertoire tcb "
+"de l'utilisateur à créer ne sera pas automatiquement configuré à /etc/tcb/"
+"user, mais sera calculé en fonction de l'UID de l'utilisateur, à l'aide de "
+"l'algorithme suivant : <placeholder-1/>"
+
+#: usermod.8.xml:557(filename) userdel.8.xml:214(filename)
+#: useradd.8.xml:757(filename) su.1.xml:381(filename)
+#: pwconv.8.xml:253(filename) passwd.1.xml:428(filename)
+#: newusers.8.xml:438(filename) login.access.5.xml:124(filename)
+#: login.1.xml:389(filename) groupmod.8.xml:237(filename)
+#: groupadd.8.xml:265(filename) chsh.1.xml:182(filename)
+#: chpasswd.8.xml:270(filename) chgpasswd.8.xml:228(filename)
+#: chfn.1.xml:210(filename)
+msgid "/etc/login.defs"
+msgstr "/etc/login.defs"
+
+#: usermod.8.xml:559(para) userdel.8.xml:216(para) useradd.8.xml:759(para)
+#: su.1.xml:383(para) pwconv.8.xml:255(para) passwd.1.xml:430(para)
+#: newusers.8.xml:440(para) login.access.5.xml:126(para) login.1.xml:391(para)
+#: groupmod.8.xml:239(para) groupadd.8.xml:267(para) chsh.1.xml:184(para)
+#: chpasswd.8.xml:272(para) chgpasswd.8.xml:230(para) chfn.1.xml:212(para)
+msgid "Shadow password suite configuration."
+msgstr ""
+"Configuration de la suite des mots de passe cachés « shadow password »."
+
+#: usermod.8.xml:575(filename) userdel.8.xml:232(filename)
+#: useradd.8.xml:745(filename) newusers.8.xml:450(filename)
+msgid "/etc/subgid"
+msgstr "/etc/subgid"
+
+#: usermod.8.xml:577(para) userdel.8.xml:234(para) useradd.8.xml:747(para)
+#: newusers.8.xml:452(para)
+msgid "Per user subordinate group IDs."
+msgstr "IDs des groupes subalternes d'un utilisateur."
+
+#: usermod.8.xml:581(filename) userdel.8.xml:238(filename)
+#: useradd.8.xml:751(filename) newusers.8.xml:456(filename)
+msgid "/etc/subuid"
+msgstr "/etc/subuid"
+
+#: usermod.8.xml:583(para) userdel.8.xml:240(para) useradd.8.xml:753(para)
+#: newusers.8.xml:458(para)
+msgid "Per user subordinate user IDs."
+msgstr "IDs de utilisateurs subalternes d'un utilisateur."
+
+#: usermod.8.xml:591(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <phrase condition=\"subids"
+"\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <phrase condition=\"subids"
+"\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: userdel.8.xml:63(refentrytitle) userdel.8.xml:70(refname)
+#: userdel.8.xml:75(command) login.defs.5.xml:500(term)
+msgid "userdel"
+msgstr "userdel"
+
+#: userdel.8.xml:71(refpurpose)
+msgid "delete a user account and related files"
+msgstr "supprimer un compte utilisateur et les fichiers associés"
+
+#: userdel.8.xml:85(para)
+msgid ""
+"The <command>userdel</command> command modifies the system account files, "
+"deleting all entries that refer to the user name <emphasis remap=\"I"
+"\">LOGIN</emphasis>. The named user must exist."
+msgstr ""
+"La commande <command>userdel</command> modifie les fichiers d'administration "
+"des comptes du système, en supprimant les entrées qui se réfèrent à "
+"<emphasis remap=\"I\">LOGIN</emphasis>. L'utilisateur nommé doit exister."
+
+#: userdel.8.xml:94(para)
+msgid "The options which apply to the <command>userdel</command> command are:"
+msgstr ""
+"Les options disponibles de la commande <command>userdel</command> sont :"
+
+#: userdel.8.xml:99(term) groupadd.8.xml:100(term) expiry.1.xml:103(term)
+msgid "<option>-f</option>, <option>--force</option>"
+msgstr "<option>-f</option>, <option>--force</option>"
+
+#: userdel.8.xml:103(para)
+msgid ""
+"This option forces the removal of the user account, even if the user is "
+"still logged in. It also forces <command>userdel</command> to remove the "
+"user's home directory and mail spool, even if another user uses the same "
+"home directory or if the mail spool is not owned by the specified user. If "
+"<option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename> and if a group exists with "
+"the same name as the deleted user, then this group will be removed, even if "
+"it is still the primary group of another user."
+msgstr ""
+"Cette option impose la suppression de l'utilisateur, même s'il est encore "
+"connecté. Elle force également <command>userdel</command> à supprimer son "
+"répertoire personnel et sa file d'attente des courriels, même si un autre "
+"utilisateur utilise le même répertoire personnel ou si l'utilisateur précisé "
+"n'est pas le propriétaire de la file d'attente des courriels. Si "
+"<emphasis>USERGROUPS_ENAB</emphasis> vaut <emphasis remap=\"I\">yes</"
+"emphasis> dans <filename>/etc/login.defs</filename> et si un groupe existe "
+"avec le même nom que l'utilisateur supprimé, alors ce groupe sera supprimé, "
+"même s'il s'agit du groupe primaire d'un autre utilisateur."
+
+#: userdel.8.xml:116(para)
+msgid ""
+"<emphasis>Note:</emphasis> This option is dangerous and may leave your "
+"system in an inconsistent state."
+msgstr ""
+"<emphasis>Remarque :</emphasis> Cette option est dangereuse, elle peut "
+"laisser votre système dans un état incohérent."
+
+#: userdel.8.xml:129(term)
+msgid "<option>-r</option>, <option>--remove</option>"
+msgstr "<option>-r</option>, <option>--remove</option>"
+
+#: userdel.8.xml:133(para)
+msgid ""
+"Files in the user's home directory will be removed along with the home "
+"directory itself and the user's mail spool. Files located in other file "
+"systems will have to be searched for and deleted manually."
+msgstr ""
+"Les fichiers présents dans le répertoire personnel de l'utilisateur seront "
+"supprimés en même temps que le répertoire lui-même, ainsi que le répertoire "
+"d'attente des courriels. Vous devrez rechercher et éliminer vous-même les "
+"fichiers situés dans d'autres systèmes de fichiers."
+
+#: userdel.8.xml:139(para)
+msgid ""
+"The mail spool is defined by the <option>MAIL_DIR</option> variable in the "
+"<filename>login.defs</filename> file."
+msgstr ""
+"Le répertoire d'attente des courriels est défini par la variable "
+"<option>MAIL_DIR</option> dans <filename>login.defs</filename>."
+
+#: userdel.8.xml:175(term)
+msgid "<option>-Z</option>, <option>--selinux-user</option>"
+msgstr "<option>-Z</option>, <option>--selinux-user</option>"
+
+#: userdel.8.xml:179(para)
+msgid "Remove any SELinux user mapping for the user's login."
+msgstr ""
+"Élimine toute association avec tout utilisateur SELinux pour la connexion de "
+"l'utilisateur."
+
+#: userdel.8.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>USERDEL_CMD</option> (string)"
+msgstr "<option>USERDEL_CMD</option> (chaîne de caractères)"
+
+#: userdel.8.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If defined, this command is run when removing a user. It should remove any "
+"at/cron/print jobs etc. owned by the user to be removed (passed as the first "
+"argument)."
+msgstr ""
+"Si définie, la commande est exécutée lors de la suppression d'un "
+"utilisateur. Elle pourra supprimer toutes les tâches périodiques cron ou at, "
+"tous les travaux d'impression, etc. de l'utilisateur (qui sera fourni comme "
+"premier paramètre)."
+
+#: userdel.8.xml:40(para) login.defs.5.xml:40(para)
+msgid "The return code of the script is not taken into account."
+msgstr "Le code de retour du script n'est pas pris en compte."
+
+#: userdel.8.xml:46(programlisting) login.defs.5.xml:46(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"#! /bin/sh\n"
+"\n"
+"# Check for the required argument.\n"
+"if [ $# != 1 ]; then\n"
+"\techo \"Usage: $0 username\"\n"
+"\texit 1\n"
+"fi\n"
+"\n"
+"# Remove cron jobs.\n"
+"crontab -r -u $1\n"
+"\n"
+"# Remove at jobs.\n"
+"# Note that it will remove any jobs owned by the same UID,\n"
+"# even if it was shared by a different username.\n"
+"AT_SPOOL_DIR=/var/spool/cron/atjobs\n"
+"find $AT_SPOOL_DIR -name \"[^.]*\" -type f -user $1 -delete \\;\n"
+"\n"
+"# Remove print jobs.\n"
+"lprm $1\n"
+"\n"
+"# All done.\n"
+"exit 0\n"
+" "
+msgstr ""
+"\n"
+"#! /bin/sh\n"
+"\n"
+"# Check for the required argument.\n"
+"if [ $# != 1 ]; then\n"
+"\techo \"Usage: $0 username\"\n"
+"\texit 1\n"
+"fi\n"
+"\n"
+"# Remove cron jobs.\n"
+"crontab -r -u $1\n"
+"\n"
+"# Remove at jobs.\n"
+"# Note that it will remove any jobs owned by the same UID,\n"
+"# even if it was shared by a different username.\n"
+"AT_SPOOL_DIR=/var/spool/cron/atjobs\n"
+"find $AT_SPOOL_DIR -name \"[^.]*\" -type f -user $1 -delete \\;\n"
+"\n"
+"# Remove print jobs.\n"
+"lprm $1\n"
+"\n"
+"# All done.\n"
+"exit 0\n"
+" "
+
+#: userdel.8.xml:43(para) login.defs.5.xml:43(para)
+msgid ""
+"Here is an example script, which removes the user's cron, at and print jobs: "
+"<placeholder-1/>"
+msgstr ""
+"Voici un script exemple, qui supprime le fichier d'entrée de cron et d'at "
+"ainsi que les travaux d'impression en attente ;<placeholder-1/>"
+
+#: userdel.8.xml:32(term) useradd.8.xml:32(term) su.1.xml:32(term)
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>USERGROUPS_ENAB</option> (boolean)"
+msgstr "<option>USERGROUPS_ENAB</option> (booléen)"
+
+#: userdel.8.xml:34(para) useradd.8.xml:34(para) su.1.xml:34(para)
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable setting of the umask group bits to be the same as owner bits "
+"(examples: 022 -&gt; 002, 077 -&gt; 007) for non-root users, if the uid is "
+"the same as gid, and username is the same as the primary group name."
+msgstr ""
+"Activer la mise en place de bits de masque de groupe (« umask group bits ») "
+"identiques à ceux du propriétaire (exemple : 022 -&gt; 002, 077 -&gt; 007) "
+"pour les utilisateurs non privilégiés, si l'UID est identique au GID et que "
+"l'identifiant de connexion est identique au groupe principal."
+
+#: userdel.8.xml:39(para) useradd.8.xml:39(para) su.1.xml:39(para)
+#: login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, <command>userdel</command> will "
+"remove the user's group if it contains no more members, and "
+"<command>useradd</command> will create by default a group with the name of "
+"the user."
+msgstr ""
+"Si cette variable est configurée à <replaceable>yes</replaceable>, "
+"<command>userdel</command> supprimera le groupe de l'utilisateur s'il ne "
+"contient pas d'autres membres, et <command>useradd</command> créera par "
+"défaut un groupe portant le nom de l'utilisateur."
+
+#: userdel.8.xml:247(title) useradd.8.xml:766(title) su.1.xml:390(title)
+#: pwck.8.xml:303(title) passwd.1.xml:443(title) grpck.8.xml:245(title)
+#: groupmod.8.xml:252(title) groupdel.8.xml:175(title)
+#: groupadd.8.xml:296(title) chage.1.xml:284(title)
+msgid "EXIT VALUES"
+msgstr "VALEURS DE RETOUR"
+
+#: userdel.8.xml:252(replaceable) useradd.8.xml:771(replaceable)
+#: su.1.xml:409(replaceable) pwck.8.xml:308(replaceable)
+#: passwd.1.xml:448(replaceable) grpck.8.xml:250(replaceable)
+#: groupmod.8.xml:257(replaceable) groupdel.8.xml:180(replaceable)
+#: groupadd.8.xml:301(replaceable) chage.1.xml:289(replaceable)
+msgid "0"
+msgstr "0"
+
+#: userdel.8.xml:254(para) useradd.8.xml:773(para) pwck.8.xml:310(para)
+#: passwd.1.xml:450(para) grpck.8.xml:252(para) groupdel.8.xml:182(para)
+#: groupadd.8.xml:303(para) chage.1.xml:291(para)
+msgid "success"
+msgstr "succès"
+
+#: userdel.8.xml:258(replaceable) useradd.8.xml:777(replaceable)
+#: su.1.xml:75(manvolnum) su.1.xml:415(replaceable) sg.1.xml:59(manvolnum)
+#: pwck.8.xml:314(replaceable) passwd.1.xml:65(manvolnum)
+#: passwd.1.xml:454(replaceable) newgrp.1.xml:59(manvolnum)
+#: login.1.xml:91(manvolnum) grpck.8.xml:256(replaceable)
+#: groups.1.xml:58(manvolnum) gpasswd.1.xml:63(manvolnum)
+#: expiry.1.xml:62(manvolnum) chsh.1.xml:61(manvolnum) chfn.1.xml:61(manvolnum)
+#: chage.1.xml:59(manvolnum) chage.1.xml:295(replaceable)
+msgid "1"
+msgstr "1"
+
+#: userdel.8.xml:260(para) useradd.8.xml:779(para)
+msgid "can't update password file"
+msgstr "impossible de mettre à jour le fichier des mots de passe"
+
+#: userdel.8.xml:264(replaceable) useradd.8.xml:783(replaceable)
+#: pwck.8.xml:320(replaceable) passwd.1.xml:460(replaceable)
+#: grpck.8.xml:262(replaceable) groupmod.8.xml:263(replaceable)
+#: groupdel.8.xml:186(replaceable) groupadd.8.xml:307(replaceable)
+#: chage.1.xml:301(replaceable)
+msgid "2"
+msgstr "2"
+
+#: userdel.8.xml:266(para) useradd.8.xml:785(para) pwck.8.xml:316(para)
+#: grpck.8.xml:258(para) groupdel.8.xml:188(para) groupadd.8.xml:309(para)
+#: chage.1.xml:303(para)
+msgid "invalid command syntax"
+msgstr "erreur de syntaxe"
+
+#: userdel.8.xml:270(replaceable) useradd.8.xml:801(replaceable)
+#: pwck.8.xml:344(replaceable) passwd.1.xml:484(replaceable)
+#: groupmod.8.xml:281(replaceable) groupdel.8.xml:192(replaceable)
+msgid "6"
+msgstr "6"
+
+#: userdel.8.xml:272(para)
+msgid "specified user doesn't exist"
+msgstr "l'utilisateur indiqué n'existe pas"
+
+#: userdel.8.xml:278(para)
+msgid "user currently logged in"
+msgstr "l'utilisateur est actuellement connecté"
+
+#: userdel.8.xml:282(replaceable) useradd.8.xml:813(replaceable)
+#: groupmod.8.xml:293(replaceable) groupdel.8.xml:204(replaceable)
+#: groupadd.8.xml:331(replaceable)
+msgid "10"
+msgstr "10"
+
+#: userdel.8.xml:284(para) useradd.8.xml:815(para) groupdel.8.xml:206(para)
+#: groupadd.8.xml:333(para)
+msgid "can't update group file"
+msgstr "impossible de mettre à jour le fichier des groupes"
+
+#: userdel.8.xml:288(replaceable) useradd.8.xml:819(replaceable)
+#: groupmod.8.xml:305(replaceable)
+msgid "12"
+msgstr "12"
+
+#: userdel.8.xml:290(para)
+msgid "can't remove home directory"
+msgstr "impossible de supprimer le répertoire personnel"
+
+#: userdel.8.xml:248(para)
+msgid ""
+"The <command>userdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"La commande <command>userdel</command> retourne les valeurs suivantes en "
+"quittant : <placeholder-1/>"
+
+#: userdel.8.xml:299(para)
+msgid ""
+"<command>userdel</command> will not allow you to remove an account if there "
+"are running processes which belong to this account. In that case, you may "
+"have to kill those processes or lock the user's password or account and "
+"remove the account later. The <option>-f</option> option can force the "
+"deletion of this account."
+msgstr ""
+"<command>userdel</command> ne permet pas la suppression d'un compte si des "
+"processus actifs lui appartiennent encore. Dans ce cas, il peut être "
+"nécessaire de tuer ces processus ou de simplement verrouiller le mot de "
+"passe ou le compte de l'utilisateur, afin de supprimer le compte plus tard. "
+"L'option <option>-f</option> permet de forcer la suppression du compte."
+
+#: userdel.8.xml:306(para)
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this user."
+msgstr ""
+"Vous devez vérifier vous-même qu'aucun fichier possédé par l'utilisateur ne "
+"subsiste sur tous les systèmes de fichiers."
+
+#: userdel.8.xml:310(para)
+msgid ""
+"You may not remove any NIS attributes on a NIS client. This must be "
+"performed on the NIS server."
+msgstr ""
+"Vous ne pouvez supprimer aucun attribut NIS d'un client NIS. Cela doit être "
+"effectué sur le serveur NIS."
+
+#: userdel.8.xml:313(para)
+msgid ""
+"If <option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename>, <command>userdel</"
+"command> will delete the group with the same name as the user. To avoid "
+"inconsistencies in the passwd and group databases, <command>userdel</"
+"command> will check that this group is not used as a primary group for "
+"another user, and will just warn without deleting the group otherwise. The "
+"<option>-f</option> option can force the deletion of this group."
+msgstr ""
+"Si <option>USERGROUPS_ENAB</option> vaut <emphasis remap=\"I\">yes</"
+"emphasis> (« oui ») dans <filename>/etc/login.defs</filename>, "
+"<command>userdel</command> supprimera le groupe ayant le même nom que "
+"l'utilisateur. Afin d'éviter des incohérences entre les fichiers passwd et "
+"group, <command>userdel</command> vérifiera que le groupe n'est pas utilisé "
+"comme groupe primaire d'un autre utilisateur ; si c'est le cas un "
+"avertissement sera affiché et le groupe ne sera pas supprimé. L'option "
+"<option>-f</option> permet d'imposer la suppression du groupe."
+
+#: userdel.8.xml:326(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"subids\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"subids\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: useradd.8.xml:76(refentrytitle) useradd.8.xml:83(refname)
+#: useradd.8.xml:88(command) useradd.8.xml:95(command)
+#: useradd.8.xml:99(command) login.defs.5.xml:482(term)
+msgid "useradd"
+msgstr "useradd"
+
+#: useradd.8.xml:84(refpurpose)
+msgid "create a new user or update default new user information"
+msgstr ""
+"créer un nouvel utilisateur ou modifier les informations par défaut "
+"appliquées aux nouveaux utilisateurs"
+
+#: useradd.8.xml:96(arg) useradd.8.xml:100(arg)
+msgid "-D"
+msgstr "-D"
+
+#: useradd.8.xml:109(para)
+msgid ""
+"When invoked without the <option>-D</option> option, the <command>useradd</"
+"command> command creates a new user account using the values specified on "
+"the command line plus the default values from the system. Depending on "
+"command line options, the <command>useradd</command> command will update "
+"system files and may also create the new user's home directory and copy "
+"initial files."
+msgstr ""
+"Quand elle est invoquée sans l'option <option>-D</option>, la commande "
+"<command>useradd</command> crée un nouveau compte utilisateur qui utilise "
+"les valeurs indiquées sur la ligne de commande et les valeurs par défaut du "
+"système. En fonction des options de la ligne de commande, la commande "
+"<command>useradd</command> fera la mise à jour des fichiers du système, elle "
+"pourra créer le répertoire personnel et copier les fichiers initiaux."
+
+#: useradd.8.xml:118(para)
+msgid ""
+"By default, a group will also be created for the new user (see <option>-g</"
+"option>, <option>-N</option>, <option>-U</option>, and "
+"<option>USERGROUPS_ENAB</option>)."
+msgstr ""
+"Par défaut, un groupe sera également créé pour le nouvel utilisateur (voir "
+"<option>-g</option>, <option>-N</option>, <option>-U</option>, et "
+"<option>USERGROUPS_ENAB</option>)"
+
+#: useradd.8.xml:127(para)
+msgid "The options which apply to the <command>useradd</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>useradd</command> sont :"
+
+#: useradd.8.xml:132(option) pwck.8.xml:187(option) newusers.8.xml:273(option)
+msgid "--badname"
+msgstr ""
+
+#: useradd.8.xml:141(term) useradd.8.xml:559(term)
+msgid ""
+"<option>-b</option>, <option>--base-dir</option>&nbsp;<replaceable>BASE_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-b</option>, <option>--base-dir</option>&nbsp;<replaceable>RÉP_BASE</"
+"replaceable>"
+
+#: useradd.8.xml:145(para)
+msgid ""
+"The default base directory for the system if <option>-d</option>&nbsp;"
+"<replaceable>HOME_DIR</replaceable> is not specified. <replaceable>BASE_DIR</"
+"replaceable> is concatenated with the account name to define the home "
+"directory. If the <option>-m</option> option is not used, "
+"<replaceable>BASE_DIR</replaceable> must exist."
+msgstr ""
+"Répertoire de base par défaut du système si l'option <option>-d</"
+"option>&nbsp;<replaceable>RÉP_PERSO</replaceable> n'est pas spécifiée. "
+"<replaceable>RÉP_BASE</replaceable> est concaténé avec le nom du compte pour "
+"définir le répertoire personnel. Quand l'option <option>-m</option> n'est "
+"pas utilisée, <replaceable>RÉP_BASE</replaceable> doit exister."
+
+#: useradd.8.xml:152(para)
+msgid ""
+"If this option is not specified, <command>useradd</command> will use the "
+"base directory specified by the <option>HOME</option> variable in <filename>/"
+"etc/default/useradd</filename>, or <filename>/home</filename> by default."
+msgstr ""
+"Si cette option n'est pas précisée, <command>useradd</command> utilisera le "
+"répertoire de base précisé par la variable <option>HOME</option> dans "
+"<filename>/etc/default/useradd</filename> ou <filename>/home</filename> par "
+"défaut."
+
+#: useradd.8.xml:166(para)
+msgid ""
+"Any text string. It is generally a short description of the login, and is "
+"currently used as the field for the user's full name."
+msgstr ""
+"Toute chaîne de texte. C'est généralement une description courte du compte, "
+"elle est actuellement utilisée comme champ pour le nom complet de "
+"l'utilisateur."
+
+#: useradd.8.xml:174(term)
+msgid ""
+"<option>-d</option>, <option>--home-dir</option>&nbsp;<replaceable>HOME_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home-dir</option>&nbsp;"
+"<replaceable>RÉP_PERSO</replaceable>"
+
+#: useradd.8.xml:178(para)
+msgid ""
+"The new user will be created using <replaceable>HOME_DIR</replaceable> as "
+"the value for the user's login directory. The default is to append the "
+"<replaceable>LOGIN</replaceable> name to <replaceable>BASE_DIR</replaceable> "
+"and use that as the login directory name. The directory "
+"<replaceable>HOME_DIR</replaceable> does not have to exist but will not be "
+"created if it is missing."
+msgstr ""
+"Le nouvel utilisateur sera créé en utilisant <replaceable>RÉP_PERSO</"
+"replaceable> comme valeur de répertoire de connexion de l'utilisateur. Le "
+"comportement par défaut est de concaténer <replaceable>UTILISATEUR</"
+"replaceable> au répertoire <replaceable>RÉP_BASE</replaceable>, et de "
+"l'utiliser en tant que nom de répertoire de connexion. Il n'est pas "
+"nécessaire que le répertoire <replaceable>RÉP_PERSO</replaceable> existe "
+"mais il ne sera pas créé s'il n'existe pas."
+
+#: useradd.8.xml:190(term)
+msgid "<option>-D</option>, <option>--defaults</option>"
+msgstr "<option>-D</option>, <option>--defaults</option>"
+
+#: useradd.8.xml:194(para)
+msgid "See below, the subsection \"Changing the default values\"."
+msgstr ""
+"Consultez ci-dessous la sous-section « Modifier les valeurs par défaut »."
+
+#: useradd.8.xml:208(para)
+msgid ""
+"If not specified, <command>useradd</command> will use the default expiry "
+"date specified by the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or an empty string (no expiry) by default."
+msgstr ""
+"Si non précisé, <command>useradd</command> utilisera la date d'expiration "
+"par défaut précisée par la variable <option>EXPIRE</option> dans <filename>/"
+"etc/default/useradd</filename> ou une chaîne vide (pas d'expiration) par "
+"défaut."
+
+#: useradd.8.xml:221(para)
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled. A value of 0 disables the account as soon as the password has "
+"expired, and a value of -1 disables the feature."
+msgstr ""
+"Nombre de jours suivant la fin de validité d'un mot de passe après lequel le "
+"compte est définitivement désactivé. Une valeur de 0 désactive le compte dès "
+"que le mot de passe a dépassé sa fin de validité, et une valeur de -1 "
+"désactive cette fonctionnalité."
+
+#: useradd.8.xml:227(para)
+msgid ""
+"If not specified, <command>useradd</command> will use the default inactivity "
+"period specified by the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or -1 by default."
+msgstr ""
+"Si non précisé, <command>useradd</command> utilisera la période d'inactivité "
+"par défaut précisée par la variable <option>INACTIVE</option> dans "
+"<filename>/etc/default/useradd</filename>, ou -1 par défaut."
+
+#: useradd.8.xml:240(para)
+msgid ""
+"The group name or number of the user's initial login group. The group name "
+"must exist. A group number must refer to an already existing group."
+msgstr ""
+"Nom du groupe ou identifiant numérique du groupe de connexion initial de "
+"l'utilisateur. Le nom du groupe doit exister. Un numéro de groupe doit se "
+"référer à un groupe déjà existant."
+
+#: useradd.8.xml:245(para)
+msgid ""
+"If not specified, the behavior of <command>useradd</command> will depend on "
+"the <option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>. If this variable is set to <replaceable>yes</replaceable> (or "
+"<option>-U/--user-group</option> is specified on the command line), a group "
+"will be created for the user, with the same name as her loginname. If the "
+"variable is set to <replaceable>no</replaceable> (or <option>-N/--no-user-"
+"group</option> is specified on the command line), useradd will set the "
+"primary group of the new user to the value specified by the <option>GROUP</"
+"option> variable in <filename>/etc/default/useradd</filename>, or 100 by "
+"default."
+msgstr ""
+"Si non précisé, le comportement de <command>useradd</command> dépendra de la "
+"variable <option>USERGROUPS_ENAB</option> dans <filename>/etc/login.defs</"
+"filename>. Si cette variable est configurée à <replaceable>yes</replaceable> "
+"(ou si <option>-U/--user-group</option> est précisée sur la ligne de "
+"commandes), un groupe sera créé pour l'utilisateur, avec le même nom que son "
+"identifiant. Si la variable est configurée à <replaceable>no</replaceable> "
+"(ou si <option>-N/--no-user-group</option> est précisé sur la ligne de "
+"commandes), useradd configurera le groupe primaire du nouvel utilisateur à "
+"la valeur précisée par la variable <option>GROUP</option> dans <filename>/"
+"etc/default/useradd</filename>, ou 100 par défaut."
+
+#: useradd.8.xml:267(para)
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option. The default is for the user to belong only to "
+"the initial group."
+msgstr ""
+"Liste de groupes supplémentaires auxquels appartient également "
+"l'utilisateur. Chaque groupe est séparé du suivant par une virgule, sans "
+"espace entre eux. Les groupes sont soumis aux mêmes restrictions que celles "
+"de l'option <option>-g</option>. Le comportement par défaut pour "
+"l'utilisateur est de n'appartenir qu'au groupe initial."
+
+#: useradd.8.xml:284(term)
+msgid ""
+"<option>-k</option>, <option>--skel</option>&nbsp;<replaceable>SKEL_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-k</option>, <option>--skel</option>&nbsp;"
+"<replaceable>RÉP_SQUELETTE</replaceable>"
+
+#: useradd.8.xml:288(para)
+msgid ""
+"The skeleton directory, which contains files and directories to be copied in "
+"the user's home directory, when the home directory is created by "
+"<command>useradd</command>."
+msgstr ""
+"Le répertoire squelette, qui contient les fichiers et répertoires qui seront "
+"copiés dans le répertoire personnel de l'utilisateur, quand le répertoire "
+"personnel est créé par <command>useradd</command>."
+
+#: useradd.8.xml:293(para)
+msgid ""
+"This option is only valid if the <option>-m</option> (or <option>--create-"
+"home</option>) option is specified."
+msgstr ""
+"Cette option n'est valable que si l'option <option>-m</option> (ou <option>--"
+"create-home</option>) est utilisée."
+
+#: useradd.8.xml:297(para)
+msgid ""
+"If this option is not set, the skeleton directory is defined by the "
+"<option>SKEL</option> variable in <filename>/etc/default/useradd</filename> "
+"or, by default, <filename>/etc/skel</filename>."
+msgstr ""
+"Si cette option n'est pas précisée, le répertoire squelette est défini par "
+"la variable <option>SKEL</option> dans <filename>/etc/default/useradd</"
+"filename> ou, par défaut, <filename>/etc/skel</filename>."
+
+#: useradd.8.xml:303(para)
+msgid "If possible, the ACLs and extended attributes are copied."
+msgstr "Si possible, les ACL et les attributs étendus seront copiés."
+
+#: useradd.8.xml:309(term) groupadd.8.xml:137(term)
+msgid ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
+"replaceable>=<replaceable>VALUE</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>CLÉ</"
+"replaceable>=<replaceable>VALEUR</replaceable>"
+
+#: useradd.8.xml:313(para)
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (<option>UID_MIN</"
+"option>, <option>UID_MAX</option>, <option>UMASK</option>, "
+"<option>PASS_MAX_DAYS</option> and others). <placeholder-1/> Example: "
+"<option>-K</option>&nbsp;<replaceable>PASS_MAX_DAYS</"
+"replaceable>=<replaceable>-1</replaceable> can be used when creating system "
+"account to turn off password aging, even though system account has no "
+"password at all. Multiple <option>-K</option> options can be specified, e."
+"g.: <option>-K</option>&nbsp;<replaceable>UID_MIN</"
+"replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+"<replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+"Surcharge les valeurs par défaut de <filename>/etc/login.defs</filename> "
+"(<option>UID_MIN</option>, <option>UID_MAX</option>, <option>UMASK</option>, "
+"<option>PASS_MAX_DAYS</option> et autres). <placeholder-1/> Par exemple : "
+"<option>-K</option>&nbsp;<replaceable>PASS_MAX_DAYS</"
+"replaceable>=<replaceable>-1</replaceable> peut être utilisé pour la "
+"création de comptes système pour désactiver la gestion de la durée de "
+"validité des mots de passe, même si les comptes système n'ont pas de mot de "
+"passe. Plusieurs options <option>-K</option> peuvent être précisées, comme "
+"par exemple : <option>-K</option>&nbsp;<replaceable>UID_MIN</"
+"replaceable>=<replaceable>100</replaceable> <option>-K</option>&nbsp;"
+"<replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>"
+
+#: useradd.8.xml:334(term)
+msgid "<option>-l</option>, <option>--no-log-init</option>"
+msgstr "<option>-l</option>, <option>--no-log-init</option>"
+
+#: useradd.8.xml:336(para)
+msgid "Do not add the user to the lastlog and faillog databases."
+msgstr "N'ajoute pas l'utilisateur aux bases de données lastlog et faillog."
+
+#: useradd.8.xml:339(para)
+msgid ""
+"By default, the user's entries in the lastlog and faillog databases are "
+"reset to avoid reusing the entry from a previously deleted user."
+msgstr ""
+"Par défaut, les entrées de l'utilisateur dans les bases de données lastlog "
+"et faillog sont remises à zéro pour éviter de réutiliser les entrées d'un "
+"utilisateur précédemment supprimé."
+
+#: useradd.8.xml:347(term)
+msgid "<option>-m</option>, <option>--create-home</option>"
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:351(para)
+msgid ""
+"Create the user's home directory if it does not exist. The files and "
+"directories contained in the skeleton directory (which can be defined with "
+"the <option>-k</option> option) will be copied to the home directory."
+msgstr ""
+"Créé le répertoire personnel de l'utilisateur s'il n'existe pas. Les "
+"fichiers et les répertoires contenus dans le répertoire squelette (qui peut "
+"être défini avec l'option <option>-k</option>) sera copié dans le répertoire "
+"personnel."
+
+#: useradd.8.xml:357(para)
+msgid ""
+"By default, if this option is not specified and <option>CREATE_HOME</option> "
+"is not enabled, no home directories are created."
+msgstr ""
+"Par défaut, si cette option n'est pas précisée et si <option>CREATE_HOME</"
+"option> n'est pas activée, aucun répertoire personnel ne sera créé."
+
+#: useradd.8.xml:365(term)
+msgid "<option>-M</option>, <option>--no-create-home</option>"
+msgstr "<option>-M</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:369(para)
+msgid ""
+"Do no create the user's home directory, even if the system wide setting from "
+"<filename>/etc/login.defs</filename> (<option>CREATE_HOME</option>) is set "
+"to <replaceable>yes</replaceable>."
+msgstr ""
+"Ne crée pas le répertoire personnel de l'utilisateur, même si la "
+"configuration globale au système contenue dans <filename>/etc/login.defs</"
+"filename> (<option>CREATE_HOME</option>) est configurée à <replaceable>yes</"
+"replaceable>."
+
+#: useradd.8.xml:378(term)
+msgid "<option>-N</option>, <option>--no-user-group</option>"
+msgstr "<option>-N</option>, <option>--no-user-group</option>"
+
+#: useradd.8.xml:382(para)
+msgid ""
+"Do not create a group with the same name as the user, but add the user to "
+"the group specified by the <option>-g</option> option or by the "
+"<option>GROUP</option> variable in <filename>/etc/default/useradd</filename>."
+msgstr ""
+"Ne crée pas de groupe avec le même nom que celui de l'utilisateur, mais "
+"ajoute l'utilisateur au groupe précisé par l'option <option>-g</option> ou "
+"par la variable <option>GROUP</option> dans <filename>/etc/default/useradd</"
+"filename>."
+
+#: useradd.8.xml:388(para) useradd.8.xml:526(para)
+msgid ""
+"The default behavior (if the <option>-g</option>, <option>-N</option>, and "
+"<option>-U</option> options are not specified) is defined by the "
+"<option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+"Le comportement par défaut (si les options <option>-g</option>, <option>-N</"
+"option>, et <option>-U</option> ne sont pas précisées) est défini par la "
+"variable <option>USERGROUPS_ENAB</option> dans <filename>/etc/login.defs</"
+"filename>."
+
+#: useradd.8.xml:401(para)
+msgid "Allow the creation of a user account with a duplicate (non-unique) UID."
+msgstr ""
+"Permet de créer un compte d'utilisateur avec un identifiant (« UID ») "
+"dupliqué (non unique)."
+
+#: useradd.8.xml:402(para)
+msgid ""
+"This option is only valid in combination with the <option>-u</option> option."
+msgstr "Cette option n'est valable qu'avec l'option <option>-u</option>."
+
+#: useradd.8.xml:413(para) groupadd.8.xml:171(para)
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>. The default is to "
+"disable the password."
+msgstr ""
+"Le mot de passe chiffré, comme renvoyé par "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>. Le comportement par défaut est de désactiver le mot de passe."
+
+#: useradd.8.xml:430(term) newusers.8.xml:302(term) groupadd.8.xml:188(term)
+msgid "<option>-r</option>, <option>--system</option>"
+msgstr "<option>-r</option>, <option>--system</option>"
+
+#: useradd.8.xml:434(para) newusers.8.xml:306(para)
+msgid "Create a system account."
+msgstr "Créer un compte système."
+
+#: useradd.8.xml:437(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are chosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>/etc/login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+"Les utilisateurs système seront créés sans information d'expiration dans "
+"<filename>/etc/shadow</filename>, et leur identifiant numérique est choisi "
+"dans l'intervalle <option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option>, "
+"défini dans <filename>/etc/login.defs</filename>, au lieu de "
+"<option>UID_MIN</option>-<option>UID_MAX</option> (et leurs équivalents "
+"<option>GID</option> pour la création des groupes)."
+
+#: useradd.8.xml:446(para)
+msgid ""
+"Note that <command>useradd</command> will not create a home directory for "
+"such a user, regardless of the default setting in <filename>/etc/login.defs</"
+"filename> (<option>CREATE_HOME</option>). You have to specify the <option>-"
+"m</option> options if you want a home directory for a system account to be "
+"created."
+msgstr ""
+"Notez que <command>useradd</command> ne créera pas de répertoire personnel "
+"pour ces utilisateurs, indépendamment de la configuration par défaut dans "
+"<filename>/etc/login.defs</filename> (<option>CREATE_HOME</option>). Vous "
+"devez préciser l'option <option>-m</option> si vous voulez qu'un répertoire "
+"personnel soit créé pour un compte système."
+
+#: useradd.8.xml:490(para)
+msgid ""
+"The name of the user's login shell. The default is to leave this field "
+"blank, which causes the system to select the default login shell specified "
+"by the <option>SHELL</option> variable in <filename>/etc/default/useradd</"
+"filename>, or an empty string by default."
+msgstr ""
+"Le nom de l'interpréteur de commandes initial de l'utilisateur (« login "
+"shell »). Le comportement par défaut est de laisser ce champ vide. Le "
+"système sélectionnera alors l'interpréteur par défaut indiqué par la "
+"variable <option>SHELL</option> dans <filename>/etc/default/useradd</"
+"filename>, ou une chaîne vide par défaut."
+
+#: useradd.8.xml:504(para)
+msgid ""
+"The numerical value of the user's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than or equal to "
+"<option>UID_MIN</option> and greater than every other user."
+msgstr ""
+"La valeur numérique de l'identifiant de l'utilisateur. Cette valeur doit "
+"être unique, sauf si l'option <option>-o</option> est utilisée. La valeur ne "
+"doit pas être négative. Le comportement par défaut est d'utiliser la plus "
+"petite valeur d'identifiant à la fois supérieure ou égale à <option>UID_MIN</"
+"option> et supérieure aux identifiants de tous les autres utilisateurs."
+
+#: useradd.8.xml:511(para)
+msgid ""
+"See also the <option>-r</option> option and the <option>UID_MAX</option> "
+"description."
+msgstr ""
+"Voir aussi aussi l'option <option>-r</option> et la description de "
+"<option>UID_MAX</option>."
+
+#: useradd.8.xml:518(term)
+msgid "<option>-U</option>, <option>--user-group</option>"
+msgstr "<option>-U</option>, <option>--user-group</option>"
+
+#: useradd.8.xml:522(para)
+msgid ""
+"Create a group with the same name as the user, and add the user to this "
+"group."
+msgstr ""
+"Crée un groupe avec le même nom que celui de l'utilisateur, et ajoute "
+"l'utilisateur à ce groupe."
+
+#: useradd.8.xml:539(para)
+msgid ""
+"The SELinux user for the user's login. The default is to leave this field "
+"blank, which causes the system to select the default SELinux user."
+msgstr ""
+"L'utilisateur SELinux utilisé pour la connexion de l'utilisateur. Le "
+"comportement par défaut est de laisser ce champ vide. Le système "
+"sélectionnera alors l'utilisateur SELinux par défaut."
+
+#: useradd.8.xml:549(title)
+msgid "Changing the default values"
+msgstr "Modifier les valeurs par défaut"
+
+#: useradd.8.xml:550(para)
+msgid ""
+"When invoked with only the <option>-D</option> option, <command>useradd</"
+"command> will display the current default values. When invoked with <option>-"
+"D</option> plus other options, <command>useradd</command> will update the "
+"default values for the specified options. Valid default-changing options are:"
+msgstr ""
+"Quand il est invoqué avec seulement l'option <option>-D</option>, "
+"<command>useradd</command> affichera les valeurs actuelles par défaut. Quand "
+"il est invoqué avec l'option <option>-D</option> et d'autres options, "
+"<command>useradd</command> mettra à jour les valeurs par défaut des options "
+"précisées. Les options valables sont :"
+
+#: useradd.8.xml:563(para)
+msgid ""
+"The path prefix for a new user's home directory. The user's name will be "
+"affixed to the end of <replaceable>BASE_DIR</replaceable> to form the new "
+"user's home directory name, if the <option>-d</option> option is not used "
+"when creating a new account."
+msgstr ""
+"Préfixe du chemin des répertoires personnels pour les nouveaux utilisateurs. "
+"Le nom de l'utilisateur sera attaché à la fin de <replaceable>RÉP_PERSO</"
+"replaceable> pour créer le nom du nouveau répertoire personnel si l'option "
+"<option>-d</option> n'est pas utilisée pendant la création d'un nouveau "
+"compte."
+
+#: useradd.8.xml:570(para)
+msgid ""
+"This option sets the <option>HOME</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+"Cette option configure la variable <option>HOME</option> dans <filename>/etc/"
+"default/useradd</filename>."
+
+#: useradd.8.xml:581(para)
+msgid "The date on which the user account is disabled."
+msgstr "Date à laquelle le compte utilisateur sera désactivé."
+
+#: useradd.8.xml:582(para)
+msgid ""
+"This option sets the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+"Cette option configure la variable <option>EXPIRE</option> dans <filename>/"
+"etc/default/useradd</filename>."
+
+#: useradd.8.xml:593(para)
+msgid ""
+"The number of days after a password has expired before the account will be "
+"disabled."
+msgstr ""
+"Nombre de jours après la fin de validité d'un mot de passe avant que le "
+"compte ne soit désactivé."
+
+#: useradd.8.xml:597(para)
+msgid ""
+"This option sets the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+"Cette option configure la variable <option>INACTIVE</option> dans <filename>/"
+"etc/default/useradd</filename>."
+
+#: useradd.8.xml:608(para)
+msgid ""
+"The group name or ID for a new user's initial group (when the <option>-N/--"
+"no-user-group</option> is used or when the <option>USERGROUPS_ENAB</option> "
+"variable is set to <replaceable>no</replaceable> in <filename>/etc/login."
+"defs</filename>). The named group must exist, and a numerical group ID must "
+"have an existing entry."
+msgstr ""
+"Le nom ou l'identifiant du groupe pour le groupe principal d'un nouvel "
+"utilisateur (quand l'option <option>-N/--no-user-group</option> est utilisée "
+"ou quand la variable <option>USERGROUPS_ENAB</option> est configurée à "
+"<replaceable>no</replaceable> dans <filename>/etc/login.defs</filename>). Le "
+"nom du groupe doit exister, et un identifiant de groupe numérique doit avoir "
+"une entrée existante."
+
+#: useradd.8.xml:617(para)
+msgid ""
+"This option sets the <option>GROUP</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+"Cette option configure la variable <option>GROUP</option> dans <filename>/"
+"etc/default/useradd</filename>."
+
+#: useradd.8.xml:628(para)
+msgid "The name of a new user's login shell."
+msgstr "Le nom de l'interpréteur de commandes du nouvel utilisateur."
+
+#: useradd.8.xml:631(para)
+msgid ""
+"This option sets the <option>SHELL</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+"Cette option configure la variable <option>SHELL</option> dans <filename>/"
+"etc/default/useradd</filename>."
+
+#: useradd.8.xml:643(title)
+msgid "NOTES"
+msgstr "NOTES"
+
+#: useradd.8.xml:644(para)
+msgid ""
+"The system administrator is responsible for placing the default user files "
+"in the <filename>/etc/skel/</filename> directory (or any other skeleton "
+"directory specified in <filename>/etc/default/useradd</filename> or on the "
+"command line)."
+msgstr ""
+"L'administrateur système doit se charger de placer les fichiers par défaut "
+"dans le répertoire <filename>/etc/skel</filename> (ou tout autre répertoire "
+"de modèles indiqué dans <filename>/etc/default/useradd</filename> ou sur la "
+"ligne de commande)."
+
+#: useradd.8.xml:653(para)
+msgid ""
+"You may not add a user to a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+"Vous ne pouvez pas ajouter d'utilisateur à un groupe NIS ou LDAP. Cela doit "
+"être effectué sur le serveur correspondant."
+
+#: useradd.8.xml:658(para)
+msgid ""
+"Similarly, if the username already exists in an external user database such "
+"as NIS or LDAP, <command>useradd</command> will deny the user account "
+"creation request."
+msgstr ""
+"De la même façon, si le nom de l'utilisateur existe dans une base de données "
+"externe, telle que NIS ou LDAP, <command>useradd</command> refusera de créer "
+"le compte d'utilisateur."
+
+#: useradd.8.xml:664(para)
+msgid ""
+"Usernames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+"Les noms d'utilisateur doivent commencer par une lettre minuscule ou un "
+"tiret bas (« underscore »), et seuls des lettres minuscules, des chiffres, "
+"des « underscore », ou des tirets peuvent suivre. Ils peuvent se terminer "
+"par un signe dollar. Soit, sous la forme d'une expression rationnelle : [a-"
+"z_][a-z0-9_-]*[$]?"
+
+#: useradd.8.xml:670(para)
+msgid "Usernames may only be up to 32 characters long."
+msgstr "Les noms d'utilisateur sont limités à 16 caractères."
+
+#: useradd.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>CREATE_HOME</option> (boolean)"
+msgstr "<option>CREATE_HOME</option> (boolean)"
+
+#: useradd.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"Indicate if a home directory should be created by default for new users."
+msgstr ""
+"Indiquer si un répertoire personnel doit être créé par défaut pour les "
+"nouveaux utilisateurs."
+
+#: useradd.8.xml:36(para) login.defs.5.xml:36(para)
+msgid ""
+"This setting does not apply to system users, and can be overridden on the "
+"command line."
+msgstr ""
+"Ce réglage ne s'applique pas pour les utilisateurs système, et peut être "
+"annulé sur la ligne de commande."
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: groupadd.8.xml:32(term)
+msgid "<option>GID_MAX</option> (number)"
+msgstr "<option>GID_MAX</option> (nombre)"
+
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+#: groupadd.8.xml:33(term)
+msgid "<option>GID_MIN</option> (number)"
+msgstr "<option>GID_MIN</option> (nombre)"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+#: groupadd.8.xml:35(para)
+msgid ""
+"Range of group IDs used for the creation of regular groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+"Plage d'identifiants numériques de groupes que les commandes "
+"<command>useradd</command>, <command>groupadd</command> ou "
+"<command>newusers</command> peuvent utiliser pour la création des groupes "
+"normaux."
+
+#: useradd.8.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: groupadd.8.xml:40(para)
+msgid ""
+"The default value for <option>GID_MIN</option> (resp. <option>GID_MAX</"
+"option>) is 1000 (resp. 60000)."
+msgstr ""
+"La valeur par défaut pour <option>GID_MIN</option> (respectivement "
+"<option>GID_MAX</option>) est 1000 (respectivement 60000)."
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+#| msgid "<option>GID_MAX</option> (number)"
+msgid "<option>HOME_MODE</option> (number)"
+msgstr "<option>GID_MAX</option> (nombre)"
+
+#: useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The mode for new home directories. If not specified, the <option>UMASK</"
+"option> is used to create the mode."
+msgstr ""
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#, fuzzy
+#| msgid ""
+#| "<command>useradd</command> and <command>newusers</command> use this mask "
+#| "to set the mode of the home directory they create"
+msgid ""
+"<command>useradd</command> and <command>newusers</command> use this to set "
+"the mode of the home directory they create."
+msgstr ""
+"<command>useradd</command> et <command>newusers</command> utilisent ce "
+"masque pour définir les permissions d'accès des répertoires personnels "
+"qu'ils créent."
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_MAX_DAYS</option> (number)"
+msgstr "<option>PASS_MAX_DAYS</option> (nombre)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The maximum number of days a password may be used. If the password is older "
+"than this, a password change will be forced. If not specified, -1 will be "
+"assumed (which disables the restriction)."
+msgstr ""
+"Nombre maximum de jours de validité d'un mot de passe. Après cette durée, "
+"une modification du mot de passe est obligatoire. S'il n'est pas précisé, la "
+"valeur de -1 est utilisée (ce qui enlève toute restriction)."
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_MIN_DAYS</option> (number)"
+msgstr "<option>PASS_MIN_DAYS</option> (nombre)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The minimum number of days allowed between password changes. Any password "
+"changes attempted sooner than this will be rejected. If not specified, -1 "
+"will be assumed (which disables the restriction)."
+msgstr ""
+"Nombre minimum de jours autorisé avant la modification d'un mot de passe. "
+"Toute tentative de modification du mot de passe avant cette durée est "
+"rejetée. S'il n'est pas précisé, la valeur de -1 est utilisée (ce qui enlève "
+"toute restriction)."
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_WARN_AGE</option> (number)"
+msgstr "<option>PASS_WARN_AGE</option> (nombre)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The number of days warning given before a password expires. A zero means "
+"warning is given only upon the day of expiration, a negative value means no "
+"warning is given. If not specified, no warning will be provided."
+msgstr ""
+"Nombre de jours durant lesquels l'utilisateur recevra un avertissement avant "
+"que son mot de passe n'arrive en fin de validité. Une valeur négative "
+"signifie qu'aucun avertissement n'est donné. S'il n'est pas précisé, aucun "
+"avertissement n'est donné."
+
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: groupadd.8.xml:30(term)
+msgid "<option>SYS_GID_MAX</option> (number)"
+msgstr "<option>SYS_GID_MAX</option> (nombre)"
+
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: groupadd.8.xml:31(term)
+msgid "<option>SYS_GID_MIN</option> (number)"
+msgstr "<option>SYS_GID_MIN</option> (nombre)"
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: groupadd.8.xml:33(para)
+msgid ""
+"Range of group IDs used for the creation of system groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+"Plage d'identifiants numériques de groupes que les commandes "
+"<command>useradd</command>, <command>groupadd</command> ou "
+"<command>newusers</command> peuvent utiliser pour la création de groupes "
+"système."
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#: groupadd.8.xml:38(para)
+msgid ""
+"The default value for <option>SYS_GID_MIN</option> (resp. "
+"<option>SYS_GID_MAX</option>) is 101 (resp. <option>GID_MIN</option>-1)."
+msgstr ""
+"La valeur par défaut pour <option>SYS_GID_MIN</option> (respectivement "
+"<option>SYS_GID_MAX</option>) est 101 (respectivement <option>GID_MIN</"
+"option>-1)."
+
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>SYS_UID_MAX</option> (number)"
+msgstr "<option>SYS_UID_MAX</option> (nombre)"
+
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+msgid "<option>SYS_UID_MIN</option> (number)"
+msgstr "<option>SYS_UID_MIN</option> (nombre)"
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+msgid ""
+"Range of user IDs used for the creation of system users by <command>useradd</"
+"command> or <command>newusers</command>."
+msgstr ""
+"Plage d'identifiants numériques d'utilisateurs que les commandes "
+"<command>useradd</command> ou <command>newusers</command> peuvent utiliser "
+"pour la création d'utilisateurs système."
+
+#: useradd.8.xml:37(para) newusers.8.xml:37(para) login.defs.5.xml:37(para)
+msgid ""
+"The default value for <option>SYS_UID_MIN</option> (resp. "
+"<option>SYS_UID_MAX</option>) is 101 (resp. <option>UID_MIN</option>-1)."
+msgstr ""
+"La valeur par défaut pour <option>SYS_UID_MIN</option> (respectivement "
+"<option>SYS_UID_MAX</option>) est 101 (respectivement <option>UID_MIN</"
+"option>-1)."
+
+#: useradd.8.xml:30(term) pwck.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>TCB_AUTH_GROUP</option> (boolean)"
+msgstr "<option>TCB_AUTH_GROUP</option> (booléen)"
+
+#: useradd.8.xml:32(para) pwck.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"If <replaceable>yes</replaceable>, newly created tcb shadow files will be "
+"group owned by the <replaceable>auth</replaceable> group."
+msgstr ""
+"Si <replaceable>yes</replaceable>, le fichier shadow de tcb nouvellement "
+"créé appartiendra au groupe <replaceable>auth</replaceable>."
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>UID_MAX</option> (number)"
+msgstr "<option>UID_MAX</option> (nombre)"
+
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>UID_MIN</option> (number)"
+msgstr "<option>UID_MIN</option> (nombre)"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"Range of user IDs used for the creation of regular users by "
+"<command>useradd</command> or <command>newusers</command>."
+msgstr ""
+"Plage d'identifiants numériques d'utilisateurs que les commandes "
+"<command>useradd</command> ou <command>newusers</command> peuvent utiliser "
+"pour la création d'utilisateurs normaux."
+
+#: useradd.8.xml:39(para) newusers.8.xml:39(para) login.defs.5.xml:39(para)
+msgid ""
+"The default value for <option>UID_MIN</option> (resp. <option>UID_MAX</"
+"option>) is 1000 (resp. 60000)."
+msgstr ""
+"La valeur par défaut de <option>UID_MIN</option> (respectivement "
+"<option>UID_MAX</option>) est 1000 (respectivement 60000)."
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: login.1.xml:32(term)
+msgid "<option>UMASK</option> (number)"
+msgstr "<option>UMASK</option> (nombre)"
+
+#: useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: login.1.xml:34(para)
+msgid ""
+"The file mode creation mask is initialized to this value. If not specified, "
+"the mask will be initialized to 022."
+msgstr ""
+"Valeur d'initialisation du masque de permissions. S'il n'est pas précisé, le "
+"masque des permissions sera initialisé à 022."
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#: login.1.xml:38(para)
+#, fuzzy
+#| msgid ""
+#| "<command>useradd</command> and <command>newusers</command> use this mask "
+#| "to set the mode of the home directory they create"
+msgid ""
+"<command>useradd</command> and <command>newusers</command> use this mask to "
+"set the mode of the home directory they create if <option>HOME_MODE</option> "
+"is not set."
+msgstr ""
+"<command>useradd</command> et <command>newusers</command> utilisent ce "
+"masque pour définir les permissions d'accès des répertoires personnels "
+"qu'ils créent."
+
+#: useradd.8.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: login.1.xml:43(para)
+msgid ""
+"It is also used by <command>login</command> to define users' initial umask. "
+"Note that this mask can be overridden by the user's GECOS line (if "
+"<option>QUOTAS_ENAB</option> is set) or by the specification of a limit with "
+"the <emphasis>K</emphasis> identifier in "
+"<citerefentry><refentrytitle>limits</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"Il est également utilisé par <command>login</command> pour définir l'umask "
+"initial de l'utilisateur. Veuillez noter que cet umask peut être redéfini "
+"par les GECOS de l'utilisateur (si <option>QUOTAS_ENAB</option> est activé) "
+"ou en précisant une limite avec l'identifiant <emphasis>K</emphasis> dans "
+"<citerefentry><refentrytitle>limits</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: useradd.8.xml:51(para) newusers.8.xml:51(para) login.defs.5.xml:51(para)
+#: login.1.xml:51(para)
+msgid ""
+"It is also used by <command>pam_umask</command> as the default umask value."
+msgstr ""
+"Il est également utilisé par <command>pam_umask</command> en tant que valeur "
+"d'umask par défaut."
+
+#: useradd.8.xml:733(filename)
+msgid "/etc/default/useradd"
+msgstr "/etc/default/useradd"
+
+#: useradd.8.xml:735(para)
+msgid "Default values for account creation."
+msgstr "Valeurs par défaut pour la création de comptes."
+
+#: useradd.8.xml:739(filename)
+msgid "/etc/skel/"
+msgstr "/etc/skel/"
+
+#: useradd.8.xml:741(para)
+msgid "Directory containing default files."
+msgstr "Répertoire contenant les fichiers par défaut."
+
+#: useradd.8.xml:789(replaceable) shadow.3.xml:58(manvolnum)
+#: pwck.8.xml:326(replaceable) passwd.1.xml:466(replaceable)
+#: grpck.8.xml:268(replaceable) groupmod.8.xml:269(replaceable)
+#: groupadd.8.xml:313(replaceable)
+msgid "3"
+msgstr "3"
+
+#: useradd.8.xml:791(para) passwd.1.xml:486(para) groupadd.8.xml:315(para)
+msgid "invalid argument to option"
+msgstr "paramètre non valable pour l'option"
+
+#: useradd.8.xml:795(replaceable) pwck.8.xml:332(replaceable)
+#: passwd.1.xml:472(replaceable) grpck.8.xml:274(replaceable)
+#: groupmod.8.xml:275(replaceable) groupadd.8.xml:319(replaceable)
+msgid "4"
+msgstr "4"
+
+#: useradd.8.xml:797(para)
+msgid "UID already in use (and no <option>-o</option>)"
+msgstr "UID déjà utilisé (et pas d'option <option>-o</option>)"
+
+#: useradd.8.xml:803(para) groupdel.8.xml:194(para)
+msgid "specified group doesn't exist"
+msgstr "le groupe spécifié n'existe pas"
+
+#: useradd.8.xml:807(replaceable) groupmod.8.xml:287(replaceable)
+#: groupadd.8.xml:325(replaceable)
+msgid "9"
+msgstr "9"
+
+#: useradd.8.xml:809(para)
+msgid "username already in use"
+msgstr "nom d'utilisateur déjà utilisé"
+
+#: useradd.8.xml:821(para)
+msgid "can't create home directory"
+msgstr "impossible de créer le répertoire personnel"
+
+#: useradd.8.xml:825(replaceable)
+msgid "14"
+msgstr "14"
+
+#: useradd.8.xml:827(para)
+msgid "can't update SELinux user mapping"
+msgstr "Ne peut pas mettre à jour l'association à un utilisateur SELinux"
+
+#: useradd.8.xml:767(para)
+msgid ""
+"The <command>useradd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"La commande <command>useradd</command> retourne les valeurs suivantes en "
+"quittant : <placeholder-1/>"
+
+#: useradd.8.xml:836(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <phrase condition=\"subids"
+"\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <phrase condition=\"subids"
+"\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: suauth.5.xml:41(contrib) pwconv.8.xml:47(contrib)
+#: login.access.5.xml:42(contrib) gpasswd.1.xml:46(contrib)
+msgid "Creation, 1996"
+msgstr "Création, 1996"
+
+#: suauth.5.xml:57(refentrytitle) suauth.5.xml:64(refname)
+msgid "suauth"
+msgstr "suauth"
+
+#: suauth.5.xml:58(manvolnum) shadow.5.xml:58(manvolnum)
+#: pwck.8.xml:338(replaceable) porttime.5.xml:58(manvolnum)
+#: passwd.5.xml:58(manvolnum) passwd.1.xml:478(replaceable)
+#: login.defs.5.xml:125(manvolnum) login.access.5.xml:59(manvolnum)
+#: limits.5.xml:60(manvolnum) gshadow.5.xml:47(manvolnum)
+#: grpck.8.xml:280(replaceable) faillog.5.xml:58(manvolnum)
+msgid "5"
+msgstr "5"
+
+#: suauth.5.xml:59(refmiscinfo) shadow.5.xml:59(refmiscinfo)
+#: porttime.5.xml:59(refmiscinfo) passwd.5.xml:59(refmiscinfo)
+#: login.defs.5.xml:126(refmiscinfo) login.access.5.xml:60(refmiscinfo)
+#: limits.5.xml:61(refmiscinfo) gshadow.5.xml:48(refmiscinfo)
+#: faillog.5.xml:59(refmiscinfo)
+msgid "File Formats and Conversions"
+msgstr "Formats et conversions de fichiers"
+
+#: suauth.5.xml:65(refpurpose)
+msgid "detailed su control file"
+msgstr "Fichier de contrôle détaillé de su"
+
+#: suauth.5.xml:70(command) suauth.5.xml:196(filename)
+msgid "/etc/suauth"
+msgstr "/etc/suauth"
+
+#: suauth.5.xml:76(para)
+msgid ""
+"The file <filename>/etc/suauth</filename> is referenced whenever the su "
+"command is called. It can change the behaviour of the su command, based upon:"
+msgstr ""
+"Le fichier <filename>/etc/suauth</filename> est lu chaque fois que su est "
+"exécuté. Il permet de modifier le comportement de la commande su, en "
+"fonction de :"
+
+#. .RS
+#: suauth.5.xml:83(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+" 1) the user su is targeting\n"
+" "
+msgstr ""
+"\n"
+" 1) l'utilisateur cible de su\n"
+" "
+
+#. .fi
+#: suauth.5.xml:87(para)
+msgid ""
+"2) the user executing the su command (or any groups he might be a member of)"
+msgstr ""
+"2) l'utilisateur qui exécute la commande su (ou un groupe dont il est membre)"
+
+#: suauth.5.xml:92(para)
+msgid ""
+"The file is formatted like this, with lines starting with a # being treated "
+"as comment lines and ignored;"
+msgstr ""
+"Le fichier est formaté de la façon suivante (les lignes commençant par un "
+"« # » sont des commentaires, et sont ignorées) :"
+
+#: suauth.5.xml:97(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+" to-id:from-id:ACTION\n"
+" "
+msgstr ""
+"\n"
+" vers-id:par-id:ACTION\n"
+" "
+
+#: suauth.5.xml:101(para)
+msgid ""
+"Where to-id is either the word <emphasis>ALL</emphasis>, a list of usernames "
+"delimited by \",\" or the words <emphasis>ALL EXCEPT</emphasis> followed by "
+"a list of usernames delimited by \",\"."
+msgstr ""
+"Où vers-id peut être le mot <emphasis>ALL</emphasis>, une liste de noms "
+"d'utilisateurs séparés par une virgule ou <emphasis>ALL EXCEPT</emphasis> "
+"suivi d'une liste d'utilisateurs séparés par une virgule."
+
+#: suauth.5.xml:107(para)
+msgid ""
+"from-id is formatted the same as to-id except the extra word "
+"<emphasis>GROUP</emphasis> is recognized. <emphasis>ALL EXCEPT GROUP</"
+"emphasis> is perfectly valid too. Following <emphasis>GROUP</emphasis> "
+"appears one or more group names, delimited by \",\". It is not sufficient to "
+"have primary group id of the relevant group, an entry in "
+"<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry> is necessary."
+msgstr ""
+"par-id utilise le même format que vers-id, mais accepte également le mot-clé "
+"<emphasis>GROUP</emphasis>. <emphasis>ALL EXCEPT GROUP</emphasis> est "
+"également accepté. <emphasis>GROUP</emphasis> est suivi d'un ou plusieurs "
+"noms de groupes, séparés par une virgule. Il n'est pas suffisant d'avoir "
+"comme groupe primaire le groupe approprié : une entrée dans "
+"<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry> est nécessaire."
+
+#: suauth.5.xml:118(para)
+msgid "Action can be one only of the following currently supported options."
+msgstr "Les valeurs d'ACTION valables sont :"
+
+#: suauth.5.xml:124(emphasis)
+msgid "DENY"
+msgstr "DENY"
+
+#: suauth.5.xml:127(para)
+msgid "The attempt to su is stopped before a password is even asked for."
+msgstr ""
+"La tentative de changement d'utilisateur est arrêtée avant que le mot de "
+"passe ne soit demandé."
+
+#: suauth.5.xml:134(emphasis)
+msgid "NOPASS"
+msgstr "NOPASS"
+
+#: suauth.5.xml:137(para)
+msgid ""
+"The attempt to su is automatically successful; no password is asked for."
+msgstr ""
+"La tentative est automatiquement réussie. Aucun mot de passe n'est demandé."
+
+#: suauth.5.xml:145(emphasis)
+msgid "OWNPASS"
+msgstr "OWNPASS"
+
+#: suauth.5.xml:148(para)
+msgid ""
+"For the su command to be successful, the user must enter his or her own "
+"password. They are told this."
+msgstr ""
+"Pour que la commande su soit réussie, l'utilisateur doit entrer son propre "
+"mot de passe. Ceci lui est demandé."
+
+#: suauth.5.xml:156(para)
+msgid ""
+"Note there are three separate fields delimited by a colon. No whitespace "
+"must surround this colon. Also note that the file is examined sequentially "
+"line by line, and the first applicable rule is used without examining the "
+"file further. This makes it possible for a system administrator to exercise "
+"as fine control as he or she wishes."
+msgstr ""
+"Notez qu'il y a trois champs séparés par un « deux-points ». Ne pas accoler "
+"d'espace à ce « deux-points ». Notez aussi que le fichier est examiné "
+"séquentiellement ligne par ligne, et que la première règle applicable est "
+"utilisée sans que le reste du fichier ne soit examiné. Ceci permet à "
+"l'administrateur système de définir un contrôle aussi fin qu'il le souhaite."
+
+#: suauth.5.xml:166(title)
+msgid "EXAMPLE"
+msgstr "EXEMPLE"
+
+#: suauth.5.xml:167(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+" # sample /etc/suauth file\n"
+" #\n"
+" # A couple of privileged usernames may\n"
+" # su to root with their own password.\n"
+" #\n"
+" root:chris,birddog:OWNPASS\n"
+" #\n"
+" # Anyone else may not su to root unless in\n"
+" # group wheel. This is how BSD does things.\n"
+" #\n"
+" root:ALL EXCEPT GROUP wheel:DENY\n"
+" #\n"
+" # Perhaps terry and birddog are accounts\n"
+" # owned by the same person.\n"
+" # Access can be arranged between them\n"
+" # with no password.\n"
+" #\n"
+" terry:birddog:NOPASS\n"
+" birddog:terry:NOPASS\n"
+" #\n"
+" "
+msgstr ""
+"\n"
+" # exemple de fichier /etc/suauth\n"
+" #\n"
+" # Deux utilisateurs privilégiés peuvent\n"
+" # devenir root avec leur propre mot de passe.\n"
+" #\n"
+" root:chris,birddog:OWNPASS\n"
+" #\n"
+" # Les autres ne peuvent pas de venir root avec\n"
+" # su, à l'exception des membres du groupe wheel.\n"
+" # Ceci correspond au comportement des BSD.\n"
+" #\n"
+" root:ALL EXCEPT GROUP wheel:DENY\n"
+" #\n"
+" # terry et birddog sont des comptes possédés\n"
+" # par la même personne.\n"
+" # Un accès sans mot passe est aménagé\n"
+" # entre ces deux comptes.\n"
+" #\n"
+" terry:birddog:NOPASS\n"
+" birddog:terry:NOPASS\n"
+" #\n"
+" "
+
+#: suauth.5.xml:203(title) pwconv.8.xml:216(title) login.defs.5.xml:531(title)
+msgid "BUGS"
+msgstr "BOGUES"
+
+#: suauth.5.xml:204(para)
+msgid ""
+"There could be plenty lurking. The file parser is particularly unforgiving "
+"about syntax errors, expecting no spurious whitespace (apart from beginning "
+"and end of lines), and a specific token delimiting different things."
+msgstr ""
+"Il en reste sans doute beaucoup. L'analyseur du fichier est particulièrement "
+"impitoyable avec les erreurs de syntaxe. Il n'autorise d'espace qu'en début "
+"et fin de ligne, et seul le délimiteur spécifique doit être utilisé."
+
+#: suauth.5.xml:213(title) shadow.3.xml:208(title)
+msgid "DIAGNOSTICS"
+msgstr "DIAGNOSTICS"
+
+#: suauth.5.xml:214(para)
+msgid ""
+"An error parsing the file is reported using "
+"<citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry> as level ERR on facility AUTH."
+msgstr ""
+"Une erreur dans l'analyse du fichier est reportée via "
+"<citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry> au niveau ERR dans la catégorie AUTH."
+
+#: suauth.5.xml:223(para)
+msgid ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: su.1.xml:58(contrib) shadow.5.xml:41(contrib) shadow.3.xml:41(contrib)
+#: porttime.5.xml:41(contrib) passwd.5.xml:41(contrib) passwd.1.xml:48(contrib)
+#: login.1.xml:74(contrib) faillog.8.xml:41(contrib) faillog.5.xml:41(contrib)
+msgid "Creation, 1989"
+msgstr "Création, 1989"
+
+#: su.1.xml:74(refentrytitle) su.1.xml:81(refname) su.1.xml:86(command)
+#: login.defs.5.xml:456(term)
+msgid "su"
+msgstr "su"
+
+#: su.1.xml:76(refmiscinfo) sg.1.xml:60(refmiscinfo)
+#: passwd.1.xml:66(refmiscinfo) newgrp.1.xml:60(refmiscinfo)
+#: login.1.xml:92(refmiscinfo) groups.1.xml:59(refmiscinfo)
+#: gpasswd.1.xml:64(refmiscinfo) expiry.1.xml:63(refmiscinfo)
+#: chsh.1.xml:62(refmiscinfo) chfn.1.xml:62(refmiscinfo)
+#: chage.1.xml:60(refmiscinfo)
+msgid "User Commands"
+msgstr "Commandes utilisateur"
+
+#: su.1.xml:82(refpurpose)
+msgid "change user ID or become superuser"
+msgstr "Changer d'identifiant d'utilisateur ou devenir superutilisateur"
+
+#: su.1.xml:91(replaceable) sg.1.xml:72(arg) newgrp.1.xml:71(arg)
+msgid "-"
+msgstr "-"
+
+#: su.1.xml:94(replaceable) login.1.xml:107(replaceable)
+#: login.1.xml:115(replaceable)
+msgid "username"
+msgstr "nom_utilisateur"
+
+#: su.1.xml:96(replaceable)
+msgid "args"
+msgstr ""
+
+#: su.1.xml:104(para)
+#, fuzzy
+#| msgid ""
+#| "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."
+msgid ""
+"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."
+msgstr ""
+"La commande <command>su</command> permet de devenir un autre utilisateur "
+"pour la durée d'une session. Invoqué sans nom d'<option>utilisateur</"
+"option>, le comportement par défaut de <command>su</command>est de devenir "
+"superutilisateur. Le paramètre optionnel <option>-</option> permet d'obtenir "
+"un environnement similaire à celui que l'utilisateur aurait obtenu lors "
+"d'une connexion directe."
+
+#: su.1.xml:114(para)
+msgid ""
+"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>."
+msgstr ""
+
+#: su.1.xml:122(para)
+msgid ""
+"The user will be prompted for a password, if appropriate. Invalid passwords "
+"will produce an error message. All attempts, both valid and invalid, are "
+"logged to detect abuse of the system."
+msgstr ""
+"Un mot de passe sera demandé à l'utilisateur, si nécessaire. Les mots de "
+"passe incorrects produisent un message d'erreur. Toutes les tentatives, "
+"réussies ou non, sont enregistrées afin de détecter tout abus du système."
+
+#: su.1.xml:127(para)
+msgid ""
+"The current environment is passed to the new shell. The value of <envar>"
+"$PATH</envar> is reset to <filename>/bin:/usr/bin</filename> for normal "
+"users, or <filename>/sbin:/bin:/usr/sbin:/usr/bin</filename> for the "
+"superuser. This may be changed with the <option>ENV_PATH</option> and "
+"<option>ENV_SUPATH</option> definitions in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+"L'environnement actuel est fourni au nouvel interpréteur de commandes. La "
+"valeur de <envar>$PATH</envar> est réinitialisée à <filename>/bin:/usr/bin</"
+"filename> pour les utilisateurs normaux, ou à <emphasis>/sbin:/bin:/usr/"
+"sbin:/usr/bin</emphasis> pour le superutilisateur. Ce comportement peut être "
+"modifié avec les paramètres <emphasis>ENV_PATH</emphasis> et "
+"<emphasis>ENV_SUPATH</emphasis> dans <filename>/etc/login.defs</filename>. "
+
+#: su.1.xml:136(para) login.1.xml:188(para)
+msgid ""
+"A subsystem login is indicated by the presence of a \"*\" as the first "
+"character of the login shell. The given home directory will be used as the "
+"root of a new file system which the user is actually logged into."
+msgstr ""
+"Une connexion à un sous-système est indiquée par la présence d'un « * » "
+"comme premier caractère de l'interpréteur de commandes initial. Le "
+"répertoire personnel sera utilisé comme racine d'un nouveau système de "
+"fichiers dans lequel l'utilisateur sera connecté."
+
+#: su.1.xml:145(para)
+msgid "The options which apply to the <command>su</command> command are:"
+msgstr "Les options applicables à la commande <command>su</command> sont :"
+
+#: su.1.xml:149(term)
+msgid ""
+"<option>-c</option>, <option>--command</option>&nbsp;<replaceable>COMMAND</"
+"replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--command</option>&nbsp;<replaceable>COMMANDE</"
+"replaceable>"
+
+#: su.1.xml:153(para)
+msgid ""
+"Specify a command that will be invoked by the shell using its <option>-c</"
+"option>."
+msgstr ""
+"Indiquer une commande qui sera invoquée par l'interpréteur de commandes en "
+"utilisant son option <option>-c</option>"
+
+#: su.1.xml:157(para)
+msgid ""
+"The executed command will have no controlling terminal. This option cannot "
+"be used to execute interactive programs which need a controlling TTY."
+msgstr ""
+"La commande exécutée n'aura aucun terminal de contrôle. Cette option ne peut "
+"pas être utilisée pour exécuter des programmes interactifs qui ont besoin "
+"d'un terminal de contrôle."
+
+#: su.1.xml:167(term)
+msgid "<option>-</option>, <option>-l</option>, <option>--login</option>"
+msgstr "<option>-</option>, <option>-l</option>, <option>--login</option>"
+
+#: su.1.xml:171(para)
+msgid ""
+"Provide an environment similar to what the user would expect had the user "
+"logged in directly."
+msgstr ""
+"Fournir à l'utilisateur un environnement similaire à celui qu'il aurait "
+"obtenu s'il s'était connecté directement."
+
+#: su.1.xml:175(para)
+msgid ""
+"When <option>-</option> is used, it must be specified before any "
+"<option>username</option>. For portability it is recommended to use it as "
+"last option, before any <option>username</option>. The other forms (<option>-"
+"l</option> and <option>--login</option>) do not have this restriction."
+msgstr ""
+"Lorsque <option>-</option> est utilisé, il doit être indiqué avant un "
+"<option>username</option>. Pour des questions de portabilité, on vous "
+"recommande de de l'utiliser en dernière option, avant un <option>username</"
+"option>. Les autres formes (<option>-l</option> et <option>--login</option>) "
+"ne présentent pas cette restriction."
+
+#: su.1.xml:190(para)
+msgid "The shell that will be invoked."
+msgstr "Interpréteur de commande devant être appelé."
+
+#: su.1.xml:198(para)
+msgid "The shell specified with --shell."
+msgstr "Interpréteur de commande indiqué par --shell."
+
+#: su.1.xml:201(para)
+msgid ""
+"If <option>--preserve-environment</option> is used, the shell specified by "
+"the <envar>$SHELL</envar> environment variable."
+msgstr ""
+"Si <option>--preserve-environment</option> est utilisé, l'interpréteur de "
+"commandes indiqué par la variable d'environnement <envar>$SHELL</envar> sera "
+"utilisé."
+
+#: su.1.xml:208(para)
+msgid ""
+"The shell indicated in the <filename>/etc/passwd</filename> entry for the "
+"target user."
+msgstr ""
+"Interpréteur de commandes indiqué dans <filename>/etc/passwd</filename> pour "
+"l'utilisateur cible."
+
+#: su.1.xml:214(para)
+msgid ""
+"<filename>/bin/sh</filename> if a shell could not be found by any above "
+"method."
+msgstr ""
+"<filename>/bin/sh</filename> si aucun interpréteur de commandes ne peut être "
+"trouvé par l'une des méthodes ci-dessus."
+
+#: su.1.xml:191(para)
+msgid ""
+"The invoked shell is chosen from (highest priority first): <placeholder-1/>"
+msgstr ""
+"L'interpréteur de commandes à appeler est choisi parmi (le choix de plus "
+"haute priorité en tête) : <placeholder-1/>"
+
+#: su.1.xml:219(para)
+msgid ""
+"If the target user has a restricted shell (i.e. the shell field of this "
+"user's entry in <filename>/etc/passwd</filename> is not listed in <filename>/"
+"etc/shells</filename>), then the <option>--shell</option> option or the "
+"<envar>$SHELL</envar> environment variable won't be taken into account, "
+"unless <command>su</command> is called by root."
+msgstr ""
+"Si l'utilisateur cible possède un interpréteur de commande restreint (par "
+"exemple, le champ de l'interpréteur de commande dans <filename>/etc/passwd</"
+"filename> n'est pas renseigné dans <filename>/etc/shells</filename>), alors, "
+"ni l'option <option>--shell</option> ni la variable d'environnement <envar>"
+"$SHELL</envar> ne seront prises en compte à moins que <command>su</command> "
+"ne soit appelé par le superutilisateur."
+
+#: su.1.xml:230(term)
+msgid ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+msgstr ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+
+#: su.1.xml:239(envar)
+msgid "$PATH"
+msgstr "$PATH"
+
+#: su.1.xml:241(para)
+msgid ""
+"reset according to the <filename>/etc/login.defs</filename> options "
+"<option>ENV_PATH</option> or <option>ENV_SUPATH</option> (see below);"
+msgstr ""
+"réinitialise suivant les options <option>ENV_PATH</option> ou "
+"<option>ENV_SUPATH</option> dans <filename>/etc/login.defs</filename> (voir "
+"ci-dessous) :"
+
+#: su.1.xml:250(envar)
+msgid "$IFS"
+msgstr "$IFS"
+
+#: su.1.xml:252(para)
+msgid ""
+"reset to <quote>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</quote>, if it was "
+"set."
+msgstr ""
+"réinitialise à <quote>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</quote>, s'il "
+"a été défini."
+
+#: su.1.xml:235(para)
+msgid "Preserve the current environment, except for: <placeholder-1/>"
+msgstr "Préserver l'environnement actuel, sauf pour : <placeholder-1/>"
+
+#: su.1.xml:261(para)
+msgid ""
+"If the target user has a restricted shell, this option has no effect (unless "
+"<command>su</command> is called by root)."
+msgstr ""
+"Si l'utilisateur cible possède un interpréteur de commandes restreint, cette "
+"option n'a aucun effet (à moins que <command>su</command> ne soit appelé par "
+"le superutilisateur)."
+
+#: su.1.xml:270(para)
+msgid ""
+"The <envar>$HOME</envar>, <envar>$SHELL</envar>, <envar>$USER</envar>, "
+"<envar>$LOGNAME</envar>, <envar>$PATH</envar>, and <envar>$IFS</envar> "
+"environment variables are reset."
+msgstr ""
+"Les variables d'environnement <envar>$HOME</envar>, <envar>$SHELL</envar>, "
+"<envar>$USER</envar>, <envar>$LOGNAME</envar>, <envar>$PATH</envar> et "
+"<envar>$IFS</envar> sont réinitialisées."
+
+#: su.1.xml:279(para)
+msgid ""
+"If <option>--login</option> is not used, the environment is copied, except "
+"for the variables above."
+msgstr ""
+"Si <option>--login</option> n'est pas utilisée, l'environnement est copié "
+"sauf pour les variables ci-dessus."
+
+#: su.1.xml:286(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TERM</envar>, <envar>"
+"$COLORTERM</envar>, <envar>$DISPLAY</envar>, and <envar>$XAUTHORITY</envar> "
+"environment variables are copied if they were set."
+msgstr ""
+"Si <option>--login</option> est utilisée, les variables d'environnement "
+"<envar>$TERM</envar>, <envar>$COLORTERM</envar>, <envar>$DISPLAY</envar> et "
+"<envar>$XAUTHORITY</envar> sont copiées si elles ont été définies."
+
+#: su.1.xml:296(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TZ</envar>, <envar>$HZ</"
+"envar>, and <envar>$MAIL</envar> environment variables are set according to "
+"the <filename>/etc/login.defs</filename> options <option>ENV_TZ</option>, "
+"<option>ENV_HZ</option>, <option>MAIL_DIR</option>, and <option>MAIL_FILE</"
+"option> (see below)."
+msgstr ""
+"Si <option>--login</option> est utilisée, les variables d'environnement "
+"<envar>$TZ</envar>, <envar>$HZ</envar> et <envar>$MAIL</envar> sont "
+"configurées en accord avec les options <option>ENV_TZ</option>, "
+"<option>ENV_HZ</option>, <option>MAIL_DIR</option> et <option>MAIL_FILE</"
+"option> de <filename>/etc/login.defs</filename> (voir ci-dessous)."
+
+#: su.1.xml:309(para)
+msgid ""
+"If <option>--login</option> is used, other environment variables might be "
+"set by the <option>ENVIRON_FILE</option> file (see below)."
+msgstr ""
+"Si <option>--login</option> est utilisée, les autres variables "
+"d'environnement peuvent être configurées par le fichier "
+"<option>ENVIRON_FILE</option> (voir ci-dessous)."
+
+#: su.1.xml:317(para)
+msgid "Other environments might be set by PAM modules."
+msgstr "D'autres environnements peuvent être configurés par des modules PAM."
+
+#: su.1.xml:265(para)
+msgid ""
+"Note that the default behavior for the environment is the following: "
+"<placeholder-1/>"
+msgstr ""
+"Notez que le comportement par défaut pour l'environnement est le suivant : "
+"<placeholder-1/>"
+
+#: su.1.xml:331(para)
+msgid ""
+"This version of <command>su</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+"Cette version de <command>su</command> a de nombreuses options de "
+"compilation. Seules certaines d'entre elles peuvent avoir été activées sur "
+"votre site."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>CONSOLE</option> (string)"
+msgstr "<option>CONSOLE</option> (chaîne de caractères)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, either full pathname of a file containing device names (one per "
+"line) or a \":\" delimited list of device names. Root logins will be allowed "
+"only upon these devices."
+msgstr ""
+"Si définie, soit un chemin complet du fichier contenant les noms de "
+"périphériques (un par ligne), soit une liste de noms du périphérique "
+"délimitée par des « : ». Les connexions d'un administrateur ne seront "
+"autorisées que depuis ces périphériques."
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid "If not defined, root will be allowed on any device."
+msgstr ""
+"S'il n'est pas défini, root pourra se connecter depuis n'importe quel "
+"périphérique."
+
+#: su.1.xml:42(para) login.defs.5.xml:42(para) login.1.xml:42(para)
+msgid "The device should be specified without the /dev/ prefix."
+msgstr "Le périphérique doit être précisé sans le préfixe /dev/."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>CONSOLE_GROUPS</option> (string)"
+msgstr "<option>CONSOLE_GROUPS</option> (chaîne de caractères)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"List of groups to add to the user's supplementary groups set when logging in "
+"on the console (as determined by the CONSOLE setting). Default is none. "
+"<placeholder-1/> Use with caution - it is possible for users to gain "
+"permanent access to these groups, even when not logged in on the console."
+msgstr ""
+"Une liste de groupes à rajouter aux groupes supplémentaires de l'utilisateur "
+"lors d'une connexion sur une console (déterminé par le paramètre CONSOLE). "
+"Par défaut, aucun groupe n'est ajouté. <placeholder-1/> À utiliser avec "
+"précaution : il est possible que les utilisateurs aient un accès permanent à "
+"ces groupes, et cela même s'ils ne sont pas connectés sur la console."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>DEFAULT_HOME</option> (boolean)"
+msgstr "<option>DEFAULT_HOME</option> (booléen)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Indicate if login is allowed if we can't cd to the home directory. Default "
+"is no."
+msgstr ""
+"Indiquer si la connexion est permise si on ne peut pas accéder au répertoire "
+"personnel. Le réglage par défaut est « no »."
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, the user will login in the root "
+"(<filename>/</filename>) directory if it is not possible to cd to her home "
+"directory."
+msgstr ""
+"Si elle est configurée à <replaceable>yes</replaceable>, l'utilisateur va se "
+"connecter dans le répertoire racine (<filename>/</filename>) s'il n'est pas "
+"possible d'accéder à son répertoire personnel."
+
+#. XXX: When compiled with PAM support, only sulogin uses ENV_HZ
+#: su.1.xml:33(term) login.defs.5.xml:33(term) login.1.xml:33(term)
+msgid "<option>ENV_HZ</option> (string)"
+msgstr "<option>ENV_HZ</option> (chaîne de caractères)"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"If set, it will be used to define the HZ environment variable when a user "
+"login. The value must be preceded by <replaceable>HZ=</replaceable>. A "
+"common value on Linux is <replaceable>HZ=100</replaceable>."
+msgstr ""
+"Si définie, sera utilisée pour définir la variable d'environnement HZ "
+"lorsqu'un utilisateur se connecte. La valeur doit être précédée par "
+"<replaceable>HZ=</replaceable>. Une valeur commune sur Linux est "
+"<replaceable>HZ=100</replaceable>."
+
+#: su.1.xml:41(para) login.defs.5.xml:41(para) login.1.xml:41(para)
+msgid ""
+"The <envar>HZ</envar> environment variable is only set when the user (the "
+"superuser) logs in with <command>sulogin</command>."
+msgstr ""
+"La variable d'environnement <envar>HZ</envar> est uniquement définie quand "
+"l'utilisateur (le super-utilisateur) se connecte avec <command>sulogin</"
+"command>."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENVIRON_FILE</option> (string)"
+msgstr "<option>ENVIRON_FILE</option> (chaîne de caractères)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If this file exists and is readable, login environment will be read from it. "
+"Every line should be in the form name=value."
+msgstr ""
+"Si ce fichier existe et est lisible, l'environnement de connexion sera lu à  "
+"partir de lui. Chaque ligne doit être sous la forme nom=valeur."
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid "Lines starting with a # are treated as comment lines and ignored."
+msgstr ""
+"Les lignes commençant par un « # » sont considérées comme des commentaires, "
+"et sont ignorées."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENV_PATH</option> (string)"
+msgstr "<option>ENV_PATH</option> (chaîne de caractères)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the PATH environment variable when a "
+"regular user login. The value is a colon separated list of paths (for "
+"example <replaceable>/bin:/usr/bin</replaceable>) and can be preceded by "
+"<replaceable>PATH=</replaceable>. The default value is <replaceable>PATH=/"
+"bin:/usr/bin</replaceable>."
+msgstr ""
+"Si définie, sera utilisée pour définir la variable d'environnement PATH "
+"quand un utilisateur ordinaire se connecte. La valeur est une liste de "
+"chemins séparés par des deux points (par exemple <replaceable>/bin:/usr/bin</"
+"replaceable>) et peut être précédée par <replaceable>PATH=</replaceable>. La "
+"valeur par défaut est <replaceable>PATH=/bin:/usr/bin</replaceable>."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENV_SUPATH</option> (string)"
+msgstr "<option>ENV_SUPATH</option> (chaîne de caractères)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the PATH environment variable when the "
+"superuser login. The value is a colon separated list of paths (for example "
+"<replaceable>/sbin:/bin:/usr/sbin:/usr/bin</replaceable>) and can be "
+"preceded by <replaceable>PATH=</replaceable>. The default value is "
+"<replaceable>PATH=/sbin:/bin:/usr/sbin:/usr/bin</replaceable>."
+msgstr ""
+"Si définie, sera utilisée pour définir la variable d'environnement PATH "
+"quand le super-utilisateur se connecte. La valeur est une liste de chemins "
+"séparés par deux points (par exemple <replaceable>/sbin:/bin:/usr/sbin:/usr/"
+"bin</replaceable>) et peut être précédée par <replaceable>PATH=</"
+"replaceable>. La valeur par défaut est <replaceable>PATH=/sbin:/bin:/usr/"
+"sbin:/usr/bin</replaceable>."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENV_TZ</option> (string)"
+msgstr "<option>ENV_TZ</option> (chaîne de caractères)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the TZ environment variable when a user "
+"login. The value can be the name of a timezone preceded by <replaceable>TZ=</"
+"replaceable> (for example <replaceable>TZ=CST6CDT</replaceable>), or the "
+"full path to the file containing the timezone specification (for example "
+"<filename>/etc/tzname</filename>)."
+msgstr ""
+"Si définie, sera utilisée pour définir la variable d'environnement TZ quand "
+"un utilisateur se connecte. La valeur peut être le nom d'un fuseau horaire "
+"précédé par <replaceable>TZ=</replaceable> (par exemple "
+"<replaceable>TZ=CST6CDT</replaceable>), ou le chemin complet vers le fichier "
+"contenant la spécification du fuseau horaire (par exemple <filename>/etc/"
+"tzname</filename>)."
+
+#. TODO: it can in fact be used to set any other variable
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"If a full path is specified but the file does not exist or cannot be read, "
+"the default is to use <replaceable>TZ=CST6CDT</replaceable>."
+msgstr ""
+"Si un chemin complet est spécifié mais que le fichier n'existe pas ou ne "
+"peut pas être lu, la valeur par défaut utilisée est <replaceable>TZ=CST6CDT</"
+"replaceable>."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#: chsh.1.xml:32(term) chfn.1.xml:32(term)
+msgid "<option>LOGIN_STRING</option> (string)"
+msgstr "<option>LOGIN_STRING</option> (chaîne de caractères)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+#: chsh.1.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"The string used for prompting a password. The default is to use \"Password: "
+"\", or a translation of that string. If you set this variable, the prompt "
+"will not be translated."
+msgstr ""
+"La chaîne de caractères utilisée pour l'invite de mot de passe. La valeur "
+"par défaut est d'utiliser \"Password: \" (« mot de passe : »), ou une "
+"traduction de cette chaîne. Si vous définissez cette variable, l'invite ne "
+"sera pas traduite."
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+#: chsh.1.xml:39(para) chfn.1.xml:39(para)
+msgid ""
+"If the string contains <replaceable>%s</replaceable>, this will be replaced "
+"by the user's name."
+msgstr ""
+"Si la chaîne contient <replaceable>%s</replaceable>, ces caractères seront "
+"remplacés par le nom de l'utilisateur."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>MAIL_CHECK_ENAB</option> (boolean)"
+msgstr "<option>MAIL_CHECK_ENAB</option> (booléen)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable checking and display of mailbox status upon login."
+msgstr ""
+"Activer le contrôle et l'affichage du statut de la boîte aux lettres durant "
+"la connexion."
+
+#: su.1.xml:37(para) login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"You should disable it if the shell startup files already check for mail "
+"(\"mailx -e\" or equivalent)."
+msgstr ""
+"Vous devriez le désactiver si les fichiers de démarrage de l'interpréteur de "
+"commandes vérifient déjà la présence de courriers (« mail -e » ou "
+"équivalent)."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>QUOTAS_ENAB</option> (boolean)"
+msgstr "<option>QUOTAS_ENAB</option> (booléen)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable setting of resource limits from <filename>/etc/limits</filename> and "
+"ulimit, umask, and niceness from the user's passwd gecos field."
+msgstr ""
+"Activer la mise en place de limites de resources depuis <filename>/etc/"
+"limits</filename> et ulimit, umask et niveau nice depuis les champs gecos de "
+"passwd."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SULOG_FILE</option> (string)"
+msgstr "<option>SULOG_FILE</option> (chaîne de caractères)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "If defined, all su activity is logged to this file."
+msgstr "Si définie, les activités de su seront enregistrées dans le fichier."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SU_NAME</option> (string)"
+msgstr "<option>SU_NAME</option> (chaîne de caractères)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"If defined, the command name to display when running \"su -\". For example, "
+"if this is defined as \"su\" then a \"ps\" will display the command is \"-su"
+"\". If not defined, then \"ps\" would display the name of the shell actually "
+"being run, e.g. something like \"-sh\"."
+msgstr ""
+"Si définie, le nom de la commande à afficher lorsque « su - » est exécutée. "
+"Par exemple, si elle est définie à « su » alors un « ps » affichera la "
+"commande comme « -su ». Si non définie, alors « ps » affichera le nom du "
+"shell qui sera en fait exécuté, par exemple quelque chose comme « -sh »."
+
+#: su.1.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>SU_WHEEL_ONLY</option> (boolean)"
+msgstr "<option>SU_WHEEL_ONLY</option> (booléen)"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the user must be listed as a member of "
+"the first gid 0 group in <filename>/etc/group</filename> (called "
+"<replaceable>root</replaceable> on most Linux systems) to be able to "
+"<command>su</command> to uid 0 accounts. If the group doesn't exist or is "
+"empty, no one will be able to <command>su</command> to uid 0."
+msgstr ""
+"Si <replaceable>yes</replaceable>, l'utilisateur doit faire partie des "
+"membres du groupe avec le premier gid 0 dans <filename>/etc/group</filename> "
+"(appelé <replaceable>root</replaceable> sur la plupart des systèmes Linux) "
+"pour être capable de <command>su</command> vers des comptes à uid 0. Si ce "
+"groupe n'existe pas ou est vide, personne ne pourra <command>su</command> "
+"vers un uid 0."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SYSLOG_SU_ENAB</option> (boolean)"
+msgstr "<option>SYSLOG_SU_ENAB</option> (booléen)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"Enable \"syslog\" logging of <command>su</command> activity - in addition to "
+"sulog file logging."
+msgstr ""
+"Activer la journalisation « syslog » de l'activité de <command>su</command> "
+"- en plus de la journalisation sulog."
+
+#: su.1.xml:391(para)
+msgid ""
+"On success, <command>su</command> returns the exit value of the command it "
+"executed."
+msgstr ""
+"En cas de succès, <command>su</command> renvoie la valeur de sortie de la "
+"commande qu'il a exécutée."
+
+#: su.1.xml:395(para)
+msgid ""
+"If this command was terminated by a signal, <command>su</command> returns "
+"the number of this signal plus 128."
+msgstr ""
+"Si cette commande s'est terminée par un signal, <command>su</command> y "
+"ajoute 128 et renvoie le résultat."
+
+#: su.1.xml:399(para)
+msgid ""
+"If su has to kill the command (because it was asked to terminate, and the "
+"command did not terminate in time), <command>su</command> returns 255."
+msgstr ""
+"Si <command>su</command> doit tuer la commande (parce qu'il a été demandé de "
+"terminer et que la commande ne s'est pas terminée à temps), <command>su</"
+"command> renvoie 255."
+
+#: su.1.xml:411(para)
+msgid "success (<option>--help</option> only)"
+msgstr "succès (<option>--help</option> uniquement)"
+
+#: su.1.xml:417(para)
+msgid "System or authentication failure"
+msgstr "Échec système ou d'authentification"
+
+#: su.1.xml:421(replaceable)
+msgid "126"
+msgstr "126"
+
+#: su.1.xml:423(para)
+msgid "The requested command was not found"
+msgstr "La commande demandée n'a pas été trouvée."
+
+#: su.1.xml:427(replaceable)
+msgid "127"
+msgstr "127"
+
+#: su.1.xml:429(para)
+msgid "The requested command could not be executed"
+msgstr "La commande demandée n'a pas pu être exécutée."
+
+#: su.1.xml:404(para)
+msgid ""
+"Some exit values from <command>su</command> are independent from the "
+"executed command: <placeholder-1/>"
+msgstr ""
+"Certaines valeurs de retour de <command>su</command> sont indépendantes de "
+"la commande exécutée : <placeholder-1/>"
+
+#: su.1.xml:438(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>."
+
+#: sg.1.xml:58(refentrytitle) sg.1.xml:65(refname) sg.1.xml:71(command)
+msgid "sg"
+msgstr "sg"
+
+#: sg.1.xml:66(refpurpose)
+msgid "execute command as different group ID"
+msgstr "exécuter une commande avec un autre identifiant de groupe"
+
+#: sg.1.xml:74(arg)
+msgid "-c"
+msgstr "-c"
+
+#: sg.1.xml:73(arg)
+msgid "group <placeholder-1/> command"
+msgstr "groupe <placeholder-1/> commande"
+
+#: sg.1.xml:82(para)
+msgid ""
+"The <command>sg</command> command works similar to <command>newgrp</command> "
+"but accepts a command. The command will be executed with the <filename>/bin/"
+"sh</filename> shell. With most shells you may run <command>sg</command> "
+"from, you need to enclose multi-word commands in quotes. Another difference "
+"between <command>newgrp</command> and <command>sg</command> is that some "
+"shells treat <command>newgrp</command> specially, replacing themselves with "
+"a new instance of a shell that <command>newgrp</command> creates. This "
+"doesn't happen with <command>sg</command>, so upon exit from a <command>sg</"
+"command> command you are returned to your previous group ID."
+msgstr ""
+"La commande <command>sg</command> fonctionne de la même manière que "
+"<command>newgrp</command>, mais prend une commande comme paramètre. Cette "
+"commande sera exécutée avec un interpréteur de commandes <filename>/bin/sh</"
+"filename>. Avec la plupart des interpréteurs de commandes permettant "
+"d'exécuter <command>sg</command>, si la commande comporte plusieurs mots, il "
+"faut la placer entre des guillemets (« \" »). Une autre différence entre "
+"<command>newgrp</command> et <command>sg</command> est que certains "
+"interpréteurs de commandes traitent <command>newgrp</command> de façon "
+"particulière, en se remplaçant eux-mêmes par une nouvelle instance d'un "
+"interpréteur que <command>newgrp</command> crée. Ceci n'est pas le cas de "
+"<command>sg</command>, ce qui permet de retrouver le groupe précédent à la "
+"sortie de <command>sg</command>."
+
+#: sg.1.xml:32(term) newgrp.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SYSLOG_SG_ENAB</option> (boolean)"
+msgstr "<option>SYSLOG_SG_ENAB</option> (booléen)"
+
+#: sg.1.xml:34(para) newgrp.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable \"syslog\" logging of <command>sg</command> activity."
+msgstr ""
+"Activer la journalisation « syslog » de l'activité de <command>sg</command>."
+
+#: sg.1.xml:141(para)
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry></phrase>."
+
+#: shadow.5.xml:57(refentrytitle) shadow.5.xml:64(refname)
+#: shadow.3.xml:57(refentrytitle) shadow.3.xml:64(refname)
+#: pwck.8.xml:84(replaceable) grpck.8.xml:76(replaceable)
+msgid "shadow"
+msgstr "shadow"
+
+#: shadow.5.xml:65(refpurpose)
+msgid "shadowed password file"
+msgstr "fichier des mots de passe cachés"
+
+#: shadow.5.xml:70(para)
+msgid ""
+"<filename>shadow</filename> is a file which contains the password "
+"information for the system's accounts and optional aging information."
+msgstr ""
+"<filename>shadow</filename> est un fichier qui contient les informations "
+"cachées concernant les mots de passe des utilisateurs et leurs dates de "
+"validité."
+
+#: shadow.5.xml:76(para) gshadow.5.xml:64(para)
+msgid ""
+"This file must not be readable by regular users if password security is to "
+"be maintained."
+msgstr ""
+"Ce fichier ne doit pas être accessible en lecture par les utilisateurs "
+"normaux afin de maintenir la sécurité des mots de passe, en particuliers "
+"pour prévenir les attaques par dictionnaires."
+
+#: shadow.5.xml:81(para)
+msgid ""
+"Each line of this file contains 9 fields, separated by colons (<quote>:</"
+"quote>), in the following order:"
+msgstr ""
+"Chaque ligne de ce fichier contient 9 champs, séparés par des deux-points "
+"(<quote>:</quote>), dans l'ordre suivant :"
+
+#: shadow.5.xml:88(emphasis) passwd.5.xml:78(para)
+msgid "login name"
+msgstr "nom de connexion de l'utilisateur (« login »)"
+
+#: shadow.5.xml:90(para)
+msgid "It must be a valid account name, which exist on the system."
+msgstr "Ce doit être un nom de compte valable, qui existe sur le système."
+
+#: shadow.5.xml:96(emphasis) gshadow.5.xml:83(emphasis)
+msgid "encrypted password"
+msgstr "mot de passe chiffré"
+
+#: shadow.5.xml:98(para)
+msgid ""
+"This field may be empty, in which case no passwords are required to "
+"authenticate as the specified login name. However, some applications which "
+"read the <filename>/etc/shadow</filename> file may decide not to permit any "
+"access at all if the password field is empty."
+msgstr ""
+"Ce champ peut être vide. Dans ce cas aucun mot de passe n'est nécessaire "
+"pour s'authentifier avec l'identifiant de connexion indiqué. Cependant, "
+"certaines applications qui lisent le fichier <filename>/etc/shadow</"
+"filename> peuvent n'autoriser aucun accès si le mot de passe est vide."
+
+#: shadow.5.xml:105(para) gshadow.5.xml:107(para)
+msgid ""
+"A password field which starts with an exclamation mark means that the "
+"password is locked. The remaining characters on the line represent the "
+"password field before the password was locked."
+msgstr ""
+"Un champ de mot de passe qui commence avec un point d'exclamation indique "
+"que le mot de passe est bloqué. Les caractères restants sur la ligne "
+"représentent le champ de mot de passe avant que le mot de passe n'ait été "
+"bloqué."
+
+#: shadow.5.xml:111(para) passwd.5.xml:126(para) gshadow.5.xml:85(para)
+msgid ""
+"Refer to <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry> for details on how this string is interpreted."
+msgstr ""
+"Consultez <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry> pour plus d'informations sur le traitement de "
+"cette chaîne."
+
+#: shadow.5.xml:116(para) passwd.5.xml:131(para)
+msgid ""
+"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)."
+msgstr ""
+"Si le champ du mot de passe contient une chaîne qui ne peut pas être un "
+"résultat valable de <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, par exemple si elle "
+"contient les caractères ! ou *, alors l'utilisateur ne pourra pas utiliser "
+"son mot de passe UNIX pour se connecter (mais il se peut que l'utilisateur "
+"puisse se connecter au système par d'autres moyens)."
+
+#: shadow.5.xml:127(emphasis)
+msgid "date of last password change"
+msgstr "date du dernier changement de mot de passe"
+
+#: shadow.5.xml:130(para)
+msgid ""
+"The date of the last password change, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr ""
+"La date du dernier changement de mot de passe, exprimée en nombre de jours "
+"depuis le 1er janvier 1970."
+
+#: shadow.5.xml:134(para)
+msgid ""
+"The value 0 has a special meaning, which is that the user should change her "
+"password the next time she will log in the system."
+msgstr ""
+"La valeur 0 a une signification particulière : l'utilisateur devra changer "
+"son mot de passe la prochaine fois qu'il se connectera au système."
+
+#: shadow.5.xml:139(para)
+msgid "An empty field means that password aging features are disabled."
+msgstr ""
+"Un champ vide indique que les fonctionnalités de vieillissement de mot de "
+"passe sont désactivées."
+
+#: shadow.5.xml:146(emphasis)
+msgid "minimum password age"
+msgstr "âge minimum du mot de passe"
+
+#: shadow.5.xml:148(para)
+msgid ""
+"The minimum password age is the number of days the user will have to wait "
+"before she will be allowed to change her password again."
+msgstr ""
+"L'âge minimum du mot de passe est la durée (en jour) que l'utilisateur devra "
+"attendre avant de pouvoir le changer de nouveau."
+
+#: shadow.5.xml:153(para)
+msgid "An empty field and value 0 mean that there are no minimum password age."
+msgstr ""
+"Un champ vide ou une valeur de 0 signifie qu'il n'y a pas d'âge minimum pour "
+"le mot de passe."
+
+#: shadow.5.xml:160(emphasis)
+msgid "maximum password age"
+msgstr "âge maximum du mot de passe"
+
+#: shadow.5.xml:162(para)
+msgid ""
+"The maximum password age is the number of days after which the user will "
+"have to change her password."
+msgstr ""
+"L'âge maximum du mot de passe est la durée (en jour) après laquelle "
+"l'utilisateur devra changer son mot de passe."
+
+#: shadow.5.xml:166(para)
+msgid ""
+"After this number of days is elapsed, the password may still be valid. The "
+"user should be asked to change her password the next time she will log in."
+msgstr ""
+"Une fois cette durée écoulée, le mot de passe restera valable. Il sera "
+"demandé à l'utilisateur de le changer la prochaine fois qu'il se connectera."
+
+#: shadow.5.xml:171(para)
+msgid ""
+"An empty field means that there are no maximum password age, no password "
+"warning period, and no password inactivity period (see below)."
+msgstr ""
+"Un champ vide signifie qu'il n'y a pour le mot de passe aucune limite d'âge, "
+"aucune période d'avertissement d'expiration et aucune période d'inactivité "
+"(voir ci-dessous)."
+
+#: shadow.5.xml:176(para)
+msgid ""
+"If the maximum password age is lower than the minimum password age, the user "
+"cannot change her password."
+msgstr ""
+"Si l'âge maximum du mot de passe est plus petit que l'âge minimum du mot de "
+"passe, l'utilisateur ne pourra pas changer son mot de passe."
+
+#: shadow.5.xml:184(emphasis)
+msgid "password warning period"
+msgstr "période d'avertissement d'expiration du mot de passe"
+
+#: shadow.5.xml:187(para)
+msgid ""
+"The number of days before a password is going to expire (see the maximum "
+"password age above) during which the user should be warned."
+msgstr ""
+"La durée (en jour) pendant laquelle l'utilisateur sera averti avant que le "
+"mot de passe n'expire (voir l'âge maximum du mot de passe ci-dessus)."
+
+#: shadow.5.xml:192(para)
+msgid ""
+"An empty field and value 0 mean that there are no password warning period."
+msgstr ""
+"Un champ vide ou une valeur de 0 signifie qu'il n'y aura pas de période "
+"d'avertissement d'expiration du mot de passe."
+
+#: shadow.5.xml:200(emphasis)
+msgid "password inactivity period"
+msgstr "période d'inactivité du mot de passe"
+
+#: shadow.5.xml:203(para)
+msgid ""
+"The number of days after a password has expired (see the maximum password "
+"age above) during which the password should still be accepted (and the user "
+"should update her password during the next login)."
+msgstr ""
+"La durée (en jour) pendant laquelle le mot de passe sera quand même accepté "
+"après son expiration (voir l'âge maximum du mot de passe ci-dessus). "
+"L'utilisateur devra mettre à jour son mot de passe à la prochaine connexion."
+
+#: shadow.5.xml:209(para)
+msgid ""
+"After expiration of the password and this expiration period is elapsed, no "
+"login is possible using the current user's password. The user should contact "
+"her administrator."
+msgstr ""
+"Après expiration du mot de passe suivie de la période d'expiration, plus "
+"aucune connexion n'est possible en utilisant le mot de passe de "
+"l'utilisateur. L'utilisateur doit contacter son administrateur."
+
+#: shadow.5.xml:214(para)
+msgid ""
+"An empty field means that there are no enforcement of an inactivity period."
+msgstr "Un champ vide signifie qu'aucune période d'inactivité n'est imposée."
+
+#: shadow.5.xml:222(emphasis)
+msgid "account expiration date"
+msgstr "date de fin de validité du compte"
+
+#: shadow.5.xml:225(para)
+msgid ""
+"The date of expiration of the account, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr ""
+"La date d'expiration du compte, exprimé en nombre de jours depuis le "
+"1er janvier 1970."
+
+#: shadow.5.xml:229(para)
+msgid ""
+"Note that an account expiration differs from a password expiration. In case "
+"of an account expiration, the user shall not be allowed to login. In case of "
+"a password expiration, the user is not allowed to login using her password."
+msgstr ""
+"Veuillez noter que l'expiration d'un compte diffère de l'expiration d'un mot "
+"de passe. En cas d'expiration d'un compte, l'utilisateur ne sera plus "
+"autorisé à se connecter. En cas d'expiration d'un mot de passe, "
+"l'utilisateur n'est pas autorisé à se connecter en utilisant son mot de "
+"passe."
+
+#: shadow.5.xml:235(para)
+msgid "An empty field means that the account will never expire."
+msgstr "Un champ vide signifie que le compte n'expirera jamais."
+
+#: shadow.5.xml:238(para)
+msgid ""
+"The value 0 should not be used as it is interpreted as either an account "
+"with no expiration, or as an expiration on Jan 1, 1970."
+msgstr ""
+"La valeur 0 ne doit pas être utilisée puisqu'elle peut être interprétée soit "
+"comme un compte sans expiration, soit comme ayant expiré le 1er janvier 1970."
+
+#: shadow.5.xml:246(emphasis)
+msgid "reserved field"
+msgstr "champ réservé"
+
+#: shadow.5.xml:248(para)
+msgid "This field is reserved for future use."
+msgstr "Ce champ est réservé pour une utilisation future."
+
+#: shadow.5.xml:270(filename)
+msgid "/etc/shadow-"
+msgstr "/etc/shadow-"
+
+#: shadow.5.xml:272(para)
+msgid "Backup file for /etc/shadow."
+msgstr "Fichier de sauvegarde pour /etc/shadow."
+
+#: shadow.5.xml:273(para) passwd.5.xml:178(para)
+msgid ""
+"Note that this file is used by the tools of the shadow toolsuite, but not by "
+"all user and password management tools."
+msgstr ""
+"Notez que ce fichier est utilisé par les outils de la suite d'outils shadow, "
+"mais pas par tous les outils de gestion d'utilisateurs et de mot de passes."
+
+#: shadow.5.xml:284(para)
+msgid ""
+"<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: shadow.3.xml:59(refmiscinfo)
+msgid "Library Calls"
+msgstr "Appels de bibliothèque"
+
+#: shadow.3.xml:65(refname)
+msgid "getspnam"
+msgstr "getspnam"
+
+#: shadow.3.xml:66(refpurpose)
+msgid "encrypted password file routines"
+msgstr "routines d'utilisation des mots de passe cachés"
+
+#: shadow.3.xml:70(title)
+msgid "SYNTAX"
+msgstr "SYNTAX"
+
+#: shadow.3.xml:72(emphasis)
+msgid "#include &lt;shadow.h&gt;"
+msgstr "#include &lt;shadow.h&gt;"
+
+#: shadow.3.xml:76(emphasis)
+msgid "struct spwd *getspent();"
+msgstr "struct spwd *getspent();"
+
+#: shadow.3.xml:80(emphasis)
+msgid "struct spwd *getspnam(char"
+msgstr "struct spwd *getspnam(char"
+
+#: shadow.3.xml:81(emphasis)
+msgid "*name"
+msgstr "*nom"
+
+#: shadow.3.xml:81(emphasis) shadow.3.xml:94(emphasis)
+#: shadow.3.xml:99(emphasis) shadow.3.xml:105(emphasis)
+msgid ");"
+msgstr ");"
+
+#: shadow.3.xml:85(emphasis)
+msgid "void setspent();"
+msgstr "void setspent();"
+
+#: shadow.3.xml:89(emphasis)
+msgid "void endspent();"
+msgstr "void endspent();"
+
+#: shadow.3.xml:93(emphasis)
+msgid "struct spwd *fgetspent(FILE"
+msgstr "struct spwd *fgetspent(FILE"
+
+#: shadow.3.xml:94(emphasis) shadow.3.xml:105(emphasis)
+msgid "*fp"
+msgstr "*fp"
+
+#: shadow.3.xml:98(emphasis)
+msgid "struct spwd *sgetspent(char"
+msgstr "struct spwd *sgetspent(char"
+
+#: shadow.3.xml:99(emphasis)
+msgid "*cp"
+msgstr "*cp"
+
+#: shadow.3.xml:103(emphasis)
+msgid "int putspent(struct spwd"
+msgstr "int putspent(struct spwd"
+
+#: shadow.3.xml:104(emphasis)
+msgid "*p,"
+msgstr "*p,"
+
+#: shadow.3.xml:104(emphasis)
+msgid "FILE"
+msgstr "FICHIER"
+
+#: shadow.3.xml:109(emphasis)
+msgid "int lckpwdf();"
+msgstr "int lckpwdf();"
+
+#: shadow.3.xml:113(emphasis)
+msgid "int ulckpwdf();"
+msgstr "int ulckpwdf();"
+
+#: shadow.3.xml:119(para)
+msgid ""
+"<emphasis remap=\"I\">shadow</emphasis> manipulates the contents of the "
+"shadow password file, <filename>/etc/shadow</filename>. The structure in the "
+"<emphasis remap=\"I\">#include</emphasis> file is:"
+msgstr ""
+"<emphasis remap=\"I\">shadow</emphasis> manipule le contenu du fichier des "
+"mots de passe cachés, <filename>/etc/shadow</filename>. La structure définie "
+"dans le fichier inclus est :"
+
+#: shadow.3.xml:124(programlisting)
+#, no-wrap
+msgid ""
+"struct spwd {\n"
+" char\t\t*sp_namp; /* user login name */\n"
+" char\t\t*sp_pwdp; /* encrypted password */\n"
+" long int\t\tsp_lstchg; /* last password change */\n"
+" long int\t\tsp_min; /* days until change allowed. */\n"
+" long int\t\tsp_max; /* days before change required */\n"
+" long int\t\tsp_warn; /* days warning for expiration */\n"
+" long int\t\tsp_inact; /* days before account inactive */\n"
+" long int\t\tsp_expire; /* date when account expires */\n"
+" unsigned long int\tsp_flag; /* reserved for future use */\n"
+"}\n"
+" "
+msgstr ""
+"struct spwd {\n"
+" char\t\t*sp_namp; /* nom de connexion de l'utilisateur */\n"
+" char\t\t*sp_pwdp; /* mot de passe chiffré */\n"
+" long int\t\tsp_lstchg; /* dernier changement de mot de passe */\n"
+" long int\t\tsp_min; /* jours avant de pouvoir changer de mot de passe */\n"
+" long int\t\tsp_max; /* jours avant l'obligation de changer de mot de passe */\n"
+" long int\t\tsp_warn; /* jours d'avertissement avant la fin de validité */\n"
+" long int\t\tsp_inact; /* jours avant que le compte soit inactif */\n"
+" long int\t\tsp_expire; /* date de fin de validité du compte */\n"
+" unsigned long int\tsp_flag; /* réservé pour une utilisation future */\n"
+"}\n"
+" "
+
+#: shadow.3.xml:136(para)
+msgid "The meanings of each field are:"
+msgstr "La signification de chaque champ est la suivante :"
+
+#: shadow.3.xml:139(para)
+msgid "sp_namp - pointer to null-terminated user name"
+msgstr ""
+"sp_namp - pointeur vers le nom d'utilisateur terminé par un zéro binaire "
+"(« null-terminated »)"
+
+#: shadow.3.xml:142(para)
+msgid "sp_pwdp - pointer to null-terminated password"
+msgstr ""
+"sp_pwdp - pointeur vers le mot de passe terminé par un zéro binaire (« null-"
+"terminated »)"
+
+#: shadow.3.xml:145(para)
+msgid "sp_lstchg - days since Jan 1, 1970 password was last changed"
+msgstr ""
+"sp_lstchg - nombre de jours, comptés à partir du 1er janvier 1970, depuis la "
+"dernière modification du mot de passe"
+
+#: shadow.3.xml:148(para)
+msgid "sp_min - days before which password may not be changed"
+msgstr ""
+"sp_min - nombre de jours pendant lesquels le mot de passe ne peut pas être "
+"changé"
+
+#: shadow.3.xml:151(para)
+msgid "sp_max - days after which password must be changed"
+msgstr ""
+"sp_max - nombre maximal de jours avant que le mot de passe doive être changé"
+
+#: shadow.3.xml:154(para)
+msgid ""
+"sp_warn - days before password is to expire that user is warned of pending "
+"password expiration"
+msgstr ""
+"sp_warn - nombre de jours avant que le mot de passe n'arrive en fin de "
+"validité pendant lesquels l'utilisateur est averti de la fin prochaine de la "
+"validité de son mot de passe"
+
+#: shadow.3.xml:159(para)
+msgid ""
+"sp_inact - days after password expires that account is considered inactive "
+"and disabled"
+msgstr ""
+"sp_inact - nombre de jours après la fin de validité du mot de passe avant de "
+"considérer que le compte est inactif et soit désactivé"
+
+#: shadow.3.xml:164(para)
+msgid "sp_expire - days since Jan 1, 1970 when account will be disabled"
+msgstr ""
+"sp_expire - nombre de jours, comptés à partir du 1er janvier 1970, après "
+"lesquels le compte sera désactivé"
+
+#: shadow.3.xml:167(para)
+msgid "sp_flag - reserved for future use"
+msgstr "sp_flag - réservé pour une utilisation future"
+
+#: shadow.3.xml:175(para)
+msgid ""
+"<emphasis>getspent</emphasis>, <emphasis>getspname</emphasis>, "
+"<emphasis>fgetspent</emphasis>, and <emphasis>sgetspent</emphasis> each "
+"return a pointer to a <emphasis>struct spwd</emphasis>. <emphasis>getspent</"
+"emphasis> returns the next entry from the file, and <emphasis>fgetspent</"
+"emphasis> returns the next entry from the given stream, which is assumed to "
+"be a file of the proper format. <emphasis>sgetspent</emphasis> returns a "
+"pointer to a <emphasis>struct spwd</emphasis> using the provided string as "
+"input. <emphasis>getspnam</emphasis> searches from the current position in "
+"the file for an entry matching <emphasis>name</emphasis>."
+msgstr ""
+"<emphasis>Getspent</emphasis>, <emphasis>getspname</emphasis>, "
+"<emphasis>fgetspent</emphasis>, et <emphasis>sgetspent</emphasis> renvoient "
+"tous un pointeur vers une structure <emphasis>struct spwd</emphasis>. "
+"<emphasis>Getspent</emphasis> renvoie l'entrée suivante du fichier, et "
+"<emphasis>fgetspent</emphasis> renvoie l'entrée suivante du flux qui est "
+"considéré comme étant un fichier au format correct. <emphasis>Sgetspent</"
+"emphasis> renvoie un pointeur vers une structure <emphasis>struct spwd</"
+"emphasis> en utilisant la chaîne de caractère fournie en entrée. "
+"<emphasis>Getspnam</emphasis> cherche à partir de la position courante une "
+"entrée correspondant à <emphasis>nom</emphasis> dans le fichier fourni en "
+"entrée."
+
+#: shadow.3.xml:188(para)
+msgid ""
+"<emphasis>setspent</emphasis> and <emphasis>endspent</emphasis> may be used "
+"to begin and end, respectively, access to the shadow password file."
+msgstr ""
+"<emphasis>Setspent</emphasis> et <emphasis>endspent</emphasis> peuvent être "
+"utilisés pour débuter et terminer l'accès au fichier de mots de passe cachés."
+
+# TBD: vérifier tous les remap
+#: shadow.3.xml:194(para)
+msgid ""
+"The <emphasis>lckpwdf</emphasis> and <emphasis>ulckpwdf</emphasis> routines "
+"should be used to insure exclusive access to the <filename>/etc/shadow</"
+"filename> file. <emphasis>lckpwdf</emphasis> attempts to acquire a lock "
+"using <emphasis>pw_lock</emphasis> for up to 15 seconds. It continues by "
+"attempting to acquire a second lock using <emphasis>spw_lock</emphasis> for "
+"the remainder of the initial 15 seconds. Should either attempt fail after a "
+"total of 15 seconds, <emphasis>lckpwdf</emphasis> returns -1. When both "
+"locks are acquired 0 is returned."
+msgstr ""
+"Les fonctions <emphasis>lckpwdf</emphasis> et <emphasis>ulckpwdf</emphasis> "
+"doivent être utilisées pour garantir un accès exclusif au fichier <filename>/"
+"etc/shadow</filename>. <emphasis>Lckpwdf</emphasis> essaie de placer un "
+"verrou avec <emphasis>pw_lock</emphasis> pendant 15 secondes. Il essaie "
+"ensuite de placer un second verrou en utilisant <emphasis>spw_lock</"
+"emphasis> pendant le reste de ces 15 secondes. Si un de ces verrous ne peut "
+"être placé, <emphasis>lckpwdf</emphasis> renvoie -1. Quand les deux verrous "
+"peuvent être placés, la valeur 0 est renvoyée."
+
+#: shadow.3.xml:209(para)
+msgid ""
+"Routines return NULL if no more entries are available or if an error occurs "
+"during processing. Routines which have <emphasis>int</emphasis> as the "
+"return value return 0 for success and -1 for failure."
+msgstr ""
+"Les fonctions renvoient NULL si plus aucune entrée n'est disponible ou si "
+"une erreur est survenue lors du traitement. Les fonctions dont la valeur de "
+"retour est un <emphasis>int</emphasis> renvoient 0 en cas de succès et -1 en "
+"cas d'échec."
+
+#: shadow.3.xml:219(para)
+msgid ""
+"These routines may only be used by the superuser as access to the shadow "
+"password file is restricted."
+msgstr ""
+"Ces fonctions peuvent n'être utilisées que par le superutilisateur car "
+"l'accès au fichier de mots de passe cachés est restreint."
+
+#: shadow.3.xml:239(para)
+msgid ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: pwconv.8.xml:63(refentrytitle) pwconv.8.xml:70(refname)
+#: pwconv.8.xml:79(command) login.defs.5.xml:439(term)
+msgid "pwconv"
+msgstr "pwconv"
+
+#: pwconv.8.xml:71(refname) pwconv.8.xml:85(command) login.defs.5.xml:448(term)
+msgid "pwunconv"
+msgstr "pwunconv"
+
+#: pwconv.8.xml:72(refname) pwconv.8.xml:91(command) login.defs.5.xml:344(term)
+msgid "grpconv"
+msgstr "grpconv"
+
+#: pwconv.8.xml:73(refname) pwconv.8.xml:97(command) login.defs.5.xml:350(term)
+msgid "grpunconv"
+msgstr "grpunconv"
+
+#: pwconv.8.xml:74(refpurpose)
+msgid "convert to and from shadow passwords and groups"
+msgstr ""
+"Convertir vers ou depuis les fichiers de mots de passe ou de groupe cachés"
+
+#: pwconv.8.xml:106(para)
+msgid ""
+"The <command>pwconv</command> command creates <emphasis remap=\"I\">shadow</"
+"emphasis> from <emphasis remap=\"I\">passwd</emphasis> and an optionally "
+"existing <emphasis remap=\"I\">shadow</emphasis>."
+msgstr ""
+"La commande <command>pwconv</command> crée le fichier <emphasis remap=\"I"
+"\">shadow</emphasis> à partir du fichier <emphasis remap=\"I\">passwd</"
+"emphasis> et d'un éventuel fichier <emphasis remap=\"I\">shadow</emphasis>."
+
+#: pwconv.8.xml:111(para)
+msgid ""
+"<command>pwconv</command> does not work with <option>USE_TCB</option> "
+"enabled. To convert to tcb passwords, you should first use <command>pwconv</"
+"command> to convert to shadowed passwords by disabling <option>USE_TCB</"
+"option> in <filename>login.defs</filename> and then convert to tcb password "
+"using <command>tcb_convert</command> (and re-enable <option>USE_TCB</option> "
+"in <filename>login.defs</filename>.)"
+msgstr ""
+"<command>pwconv</command> ne fonctionne pas avec <option>USE_TCB</option> "
+"activée. Pour convertir les mots de passe vers tcb, vous devez d'abord "
+"utiliser <command>pwconv</command> pour les convertir vers les mots de passe "
+"cachés en désactivant <option>USE_TCB</option> dans <filename>login.defs</"
+"filename> puis les convertir en mots de passe tcb avec <command>tcb_convert</"
+"command> (et en réactivant <option>USE_TCB</option> dans <filename>login."
+"defs</filename>)."
+
+#: pwconv.8.xml:121(para)
+msgid ""
+"The <command>pwunconv</command> command creates <emphasis remap=\"I"
+"\">passwd</emphasis> from <emphasis remap=\"I\">passwd</emphasis> and "
+"<emphasis remap=\"I\">shadow</emphasis> and then removes <emphasis remap=\"I"
+"\">shadow</emphasis>."
+msgstr ""
+"La commande <command>pwunconv</command> crée le fichier <emphasis remap=\"I"
+"\">passwd</emphasis> à partir des fichiers <emphasis remap=\"I\">passwd</"
+"emphasis> et <emphasis remap=\"I\">shadow</emphasis> puis supprime <emphasis "
+"remap=\"I\">shadow</emphasis>."
+
+#: pwconv.8.xml:127(para)
+msgid ""
+"<command>pwunconv</command> does not work with <option>USE_TCB</option> "
+"enabled. You should first switch back from tcb to shadowed passwords using "
+"<command>tcb_unconvert</command>, and then disable <option>USE_TCB</option> "
+"in <filename>login.defs</filename> before using <command>pwunconv</command>."
+msgstr ""
+"<command>pwunconv</command> ne fonctionne pas avec <option>USE_TCB</option> "
+"activé. Vous devez d'abord convertir les mots de passe depuis tcb vers des "
+"mots de passe cachés en utilisant <command>tcb_unconvert</command> puis "
+"désactiver <option>USE_TCB</option> dans <filename>login.defs</filename> "
+"avant d'utiliser <command>pwunconv</command>."
+
+#: pwconv.8.xml:136(para)
+msgid ""
+"The <command>grpconv</command> command creates <emphasis remap=\"I"
+"\">gshadow</emphasis> from <emphasis remap=\"I\">group</emphasis> and an "
+"optionally existing <emphasis remap=\"I\">gshadow</emphasis>."
+msgstr ""
+"La commande <command>grpconv</command> crée <emphasis remap=\"I\">gshadow</"
+"emphasis> à partir de <emphasis remap=\"I\">group</emphasis> et d'un "
+"éventuel fichier <emphasis remap=\"I\">gshadow</emphasis>."
+
+#: pwconv.8.xml:142(para)
+msgid ""
+"The <command>grpunconv</command> command creates <emphasis remap=\"I"
+"\">group</emphasis> from <emphasis remap=\"I\">group</emphasis> and "
+"<emphasis remap=\"I\">gshadow</emphasis> and then removes <emphasis remap=\"I"
+"\">gshadow</emphasis>."
+msgstr ""
+"La commande <command>grpunconv</command> crée <emphasis remap=\"I\">group</"
+"emphasis> à partir des fichiers <emphasis remap=\"I\">group</emphasis> et "
+"<emphasis remap=\"I\">gshadow</emphasis> puis supprime <emphasis remap=\"I"
+"\">gshadow</emphasis>."
+
+#: pwconv.8.xml:149(para)
+msgid ""
+"These four programs all operate on the normal and shadow password and group "
+"files: <filename>/etc/passwd</filename>, <filename>/etc/group</filename>, "
+"<filename>/etc/shadow</filename>, and <filename>/etc/gshadow</filename>."
+msgstr ""
+"Ces quatre programmes opèrent sur les fichiers de mots de passe et "
+"d'informations sur les groupes cachés ou non : <filename>/etc/passwd</"
+"filename>, <filename>/etc/group</filename>, <filename>/etc/shadow</"
+"filename>, et <filename>/etc/gshadow</filename>."
+
+#: pwconv.8.xml:156(para)
+msgid ""
+"Each program acquires the necessary locks before conversion. "
+"<command>pwconv</command> and <command>grpconv</command> are similar. First, "
+"entries in the shadowed file which don't exist in the main file are removed. "
+"Then, shadowed entries which don't have `x' as the password in the main file "
+"are updated. Any missing shadowed entries are added. Finally, passwords in "
+"the main file are replaced with `x'. These programs can be used for initial "
+"conversion as well to update the shadowed file if the main file is edited by "
+"hand."
+msgstr ""
+"Chaque programme place les verrous nécessaires avant d'effectuer la "
+"conversion. <command>pwconv</command> et <command>grpconv</command> sont "
+"similaires. Dans un premier temps, les entrées du fichier de mots de passe "
+"cachés (<filename>/etc/shadow</filename> ou <filename>/etc/gshadow</"
+"filename>) qui n'existent pas dans le fichier principal (<filename>passwd</"
+"filename> ou <filename>group</filename>), sont retirées. Ensuite, les "
+"entrées du fichier <filename>shadow</filename> n'ayant pas pour mot de passe "
+"« x » dans le fichier <filename>passwd</filename> sont mises à jour. Enfin, "
+"les mots de passe du fichier <filename>passwd</filename> sont remplacés par "
+"« x ». Ces programmes peuvent être utilisés pour une première conversion, ou "
+"bien pour une mise à jour, si les fichiers principaux [ NdT : non cachés ] "
+"ont été édités à la main."
+
+#: pwconv.8.xml:167(para)
+msgid ""
+"<command>pwconv</command> will use the values of <emphasis remap=\"I"
+"\">PASS_MIN_DAYS</emphasis>, <emphasis remap=\"I\">PASS_MAX_DAYS</emphasis>, "
+"and <emphasis remap=\"I\">PASS_WARN_AGE</emphasis> from <filename>/etc/login."
+"defs</filename> when adding new entries to <filename>/etc/shadow</filename>."
+msgstr ""
+"Lors de l'ajout de nouvelles entrées dans <filename>/etc/shadow</filename>, "
+"<command>pwconv</command> utilisera les valeurs de <emphasis remap=\"I"
+"\">PASS_MIN_DAYS</emphasis>, <emphasis remap=\"I\">PASS_MAX_DAYS</emphasis>, "
+"et <emphasis remap=\"I\">PASS_WARN_AGE</emphasis> définies dans le fichier "
+"<filename>/etc/login.defs</filename>."
+
+#: pwconv.8.xml:176(para)
+msgid ""
+"Likewise <command>pwunconv</command> and <command>grpunconv</command> are "
+"similar. Passwords in the main file are updated from the shadowed file. "
+"Entries which exist in the main file but not in the shadowed file are left "
+"alone. Finally, the shadowed file is removed. Some password aging "
+"information is lost by <command>pwunconv</command>. It will convert what it "
+"can."
+msgstr ""
+"De même, <command>pwunconv</command> et <command>grpunconv</command> sont "
+"similaires. Les mots de passe des fichiers principaux sont mis à jour à "
+"partir des fichiers d'informations cachées (« shadowed file »). Les entrées "
+"existant dans un fichier principal, mais pas dans le fichier caché sont "
+"laissées. Enfin, le fichier caché est supprimé. Certaines informations d'âge "
+"des mots de passe sont perdues par <command>pwunconv</command>. Il ne "
+"convertit que ce qu'il peut."
+
+#: pwconv.8.xml:188(para)
+msgid ""
+"The options which apply to the <command>pwconv</command>, <command>pwunconv</"
+"command>, <command>grpconv</command>, and <command>grpunconv</command> "
+"commands are:"
+msgstr ""
+"Les options applicables aux commandes <command>pwconv</command>, "
+"<command>pwunconv</command>, <command>grpconv</command> et "
+"<command>grpunconv</command> sont :"
+
+#: pwconv.8.xml:217(para)
+msgid ""
+"Errors in the password or group files (such as invalid or duplicate entries) "
+"may cause these programs to loop forever or fail in other strange ways. "
+"Please run <command>pwck</command> and <command>grpck</command> to correct "
+"any such errors before converting to or from shadow passwords or groups."
+msgstr ""
+"Des erreurs dans les fichiers de mots de passe ou d'informations sur les "
+"groupes (comme des entrées invalides ou redondantes) peuvent conduire ces "
+"programmes à boucler indéfiniment ou à échouer d'une manière tout aussi "
+"étrange. Veuillez exécuter <command>pwck</command> et <command>grpck</"
+"command> pour corriger ces erreurs avant de lancer toute conversion."
+
+#: pwconv.8.xml:228(para)
+msgid ""
+"The following configuration variable in <filename>/etc/login.defs</filename> "
+"changes the behavior of <command>grpconv</command> and <command>grpunconv</"
+"command>:"
+msgstr ""
+"La variable de configuration suivante dans <filename>/etc/login.defs</"
+"filename> change le comportement de <command>grpconv</command> et "
+"<command>grpunconv</command> :"
+
+#: pwconv.8.xml:236(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of <command>pwconv</command>:"
+msgstr ""
+"Les variables de configuration suivantes dans <filename>/etc/login.defs</"
+"filename> changent le comportement de <command>pwconv</command> :"
+
+#: pwconv.8.xml:263(para)
+msgid ""
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry><phrase condition=\"tcb\">, "
+"<citerefentry><refentrytitle>tcb_convert</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>tcb_unconvert</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry><phrase condition=\"tcb\">, "
+"<citerefentry><refentrytitle>tcb_convert</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>tcb_unconvert</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry></phrase>."
+
+#: pwck.8.xml:47(contrib) lastlog.8.xml:43(contrib) grpck.8.xml:42(contrib)
+msgid "Creation, 1992"
+msgstr "Création, 1992"
+
+#: pwck.8.xml:63(refentrytitle) pwck.8.xml:70(refname) pwck.8.xml:76(command)
+#: login.defs.5.xml:430(term)
+msgid "pwck"
+msgstr "pwck"
+
+#: pwck.8.xml:71(refpurpose)
+msgid "verify integrity of password files"
+msgstr "Vérifier l'intégrité des fichiers de mots de passe"
+
+#: pwck.8.xml:80(replaceable) passwd.5.xml:57(refentrytitle)
+#: passwd.5.xml:64(refname) passwd.1.xml:64(refentrytitle)
+#: passwd.1.xml:71(refname) passwd.1.xml:77(command) login.defs.5.xml:419(term)
+msgid "passwd"
+msgstr "passwd"
+
+#: pwck.8.xml:93(para)
+msgid ""
+"The <command>pwck</command> command verifies the integrity of the users and "
+"authentication information. It checks that all entries in <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename><phrase condition=\"tcb"
+"\">(or the files in <filename>/etc/tcb</filename>, when <option>USE_TCB</"
+"option> is enabled)</phrase> have the proper format and contain valid data. "
+"The user is prompted to delete entries that are improperly formatted or "
+"which have other uncorrectable errors."
+msgstr ""
+"La commande <command>pwck</command> vérifie l'intégrité des informations du "
+"système concernant les utilisateurs et leur mots de passe. Toutes les "
+"entrées des fichiers <filename>/etc/passwd</filename> et <filename>/etc/"
+"shadow</filename> sont vérifiées afin de s'assurer qu'elles ont le bon "
+"format et qu'elles contiennent des données valables dans chaque champ. Une "
+"confirmation de l'utilisateur sera demandée pour détruire les entrées mal "
+"formatées ou ayant d'autres erreurs non récupérables."
+
+#: pwck.8.xml:105(para) grpck.8.xml:94(para)
+msgid "Checks are made to verify that each entry has:"
+msgstr "Voici les vérifications effectuées :"
+
+#: pwck.8.xml:108(para) grpck.8.xml:98(para)
+msgid "the correct number of fields"
+msgstr "nombre correct de champs ;"
+
+#: pwck.8.xml:111(para)
+msgid "a unique and valid user name"
+msgstr "unicité et validité des noms d'utilisateur ;"
+
+#: pwck.8.xml:114(para)
+msgid "a valid user and group identifier"
+msgstr "validité des identifiants d'utilisateur et de groupe ;"
+
+#: pwck.8.xml:117(para)
+msgid "a valid primary group"
+msgstr "validité du groupe primaire ;"
+
+#: pwck.8.xml:120(para)
+msgid "a valid home directory"
+msgstr "validité du répertoire personnel ;"
+
+#: pwck.8.xml:123(para)
+msgid "a valid login shell"
+msgstr "validité de l'interpréteur de commandes initial (« login shell »)."
+
+#: pwck.8.xml:127(para)
+msgid ""
+"<filename>shadow</filename> checks are enabled when a second file parameter "
+"is specified or when <filename>/etc/shadow</filename> exists on the system."
+msgstr ""
+"Les vérifications de <filename>shadow</filename> sont activées quand un "
+"second paramètre de fichier est indiqué ou quand <filename>/etc/shadow</"
+"filename> existe sur le système."
+
+#: pwck.8.xml:132(para)
+msgid "These checks are the following:"
+msgstr "Ces vérifications sont les suivantes :"
+
+#: pwck.8.xml:137(para)
+msgid ""
+"every passwd entry has a matching shadow entry, and every shadow entry has a "
+"matching passwd entry"
+msgstr ""
+"chaque entrée de passwd a une entrée correspondante dans shadow, et chaque "
+"entrée shadow a une entrée passwd correspondante ;"
+
+#: pwck.8.xml:143(para)
+msgid "passwords are specified in the shadowed file"
+msgstr ""
+"les mots de passe sont indiqués dans le fichier des mot de passe cachés ;"
+
+#: pwck.8.xml:146(para)
+msgid "shadow entries have the correct number of fields"
+msgstr "les entrées de shadow ont le bon nombre de champs ;"
+
+#: pwck.8.xml:149(para)
+msgid "shadow entries are unique in shadow"
+msgstr "les entrées de shadow sont uniques dans shadow ;"
+
+#: pwck.8.xml:152(para)
+msgid "the last password changes are not in the future"
+msgstr "la date du dernier changement de mot de passe n'est pas dans le futur."
+
+#: pwck.8.xml:156(para)
+msgid ""
+"The checks for correct number of fields and unique user name are fatal. If "
+"the entry has the wrong number of fields, the user will be prompted to "
+"delete the entire line. If the user does not answer affirmatively, all "
+"further checks are bypassed. An entry with a duplicated user name is "
+"prompted for deletion, but the remaining checks will still be made. All "
+"other errors are warning and the user is encouraged to run the "
+"<command>usermod</command> command to correct the error."
+msgstr ""
+"Une erreur dans le nombre de champs ou la non unicité d'un nom d'utilisateur "
+"sera fatale. Si le nombre de champs n'est pas correct, il sera demandé à "
+"l'utilisateur de supprimer la ligne. Si l'utilisateur ne répond pas par "
+"l'affirmative, les vérifications suivantes ne seront pas effectuées. Il sera "
+"également demandé de supprimer les entrées correspondant aux noms "
+"d'utilisateur redondants, mais dans ce cas, les autres vérifications seront "
+"effectuées. Toutes les autres erreurs ne sont que des avertissements et "
+"l'utilisateur est encouragé à utiliser <command>usermod</command> pour les "
+"corriger."
+
+#: pwck.8.xml:167(para)
+msgid ""
+"The commands which operate on the <filename>/etc/passwd</filename> file are "
+"not able to alter corrupted or duplicated entries. <command>pwck</command> "
+"should be used in those circumstances to remove the offending entry."
+msgstr ""
+"Les commandes qui opèrent sur le fichier <filename>/etc/passwd</filename> ne "
+"peuvent pas modifier les entrées corrompues ou redondantes. <command>pwck</"
+"command> doit être utilisé dans ce cas pour retirer ces entrées."
+
+#: pwck.8.xml:177(para) grpck.8.xml:148(para)
+msgid ""
+"The <option>-r</option> and <option>-s</option> options cannot be combined."
+msgstr ""
+"Les options <option>-r</option> et <option>-s</option> ne peuvent pas être "
+"combinées."
+
+#: pwck.8.xml:181(para)
+msgid "The options which apply to the <command>pwck</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>pwck</command> sont :"
+
+#: pwck.8.xml:204(para)
+msgid ""
+"Report errors only. The warnings which do not require any action from the "
+"user won't be displayed."
+msgstr ""
+"Ne signaler que les erreurs. Les avertissements qui ne nécessitent pas une "
+"action de la part de l'utilisateur ne seront pas affichés."
+
+#: pwck.8.xml:211(term) grpck.8.xml:163(term)
+msgid "<option>-r</option>, <option>--read-only</option>"
+msgstr "<option>-r</option>, <option>--read-only</option>"
+
+#: pwck.8.xml:213(para)
+msgid "Execute the <command>pwck</command> command in read-only mode."
+msgstr "Permet d'exécuter <command>pwck</command> dans le mode lecture seule."
+
+#: pwck.8.xml:231(term) grpck.8.xml:185(term)
+msgid "<option>-s</option>, <option>--sort</option>"
+msgstr "<option>-s</option>, <option>--sort</option>"
+
+#: pwck.8.xml:233(para)
+msgid ""
+"Sort entries in <filename>/etc/passwd</filename> and <filename>/etc/shadow</"
+"filename> by UID."
+msgstr ""
+"Trie les entrées de <filename>/etc/passwd</filename> et <filename>/etc/"
+"shadow</filename> par UID."
+
+#: pwck.8.xml:237(para)
+msgid "This option has no effect when <option>USE_TCB</option> is enabled."
+msgstr ""
+"Cette option n'a aucun effet quand <option>USE_TCB</option> est activée."
+
+#: pwck.8.xml:244(para)
+msgid ""
+"By default, <command>pwck</command> operates on the files <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename><phrase condition=\"tcb"
+"\"> (or the files in <filename>/etc/tcb</filename>)</phrase>. The user may "
+"select alternate files with the <replaceable>passwd</replaceable> and "
+"<replaceable>shadow</replaceable> parameters."
+msgstr ""
+"Par défaut, <command>pwck</command> opère sur les fichiers <filename>/etc/"
+"passwd</filename> et <filename>/etc/shadow</filename><phrase condition="
+"\"tcb> (ou les fichiers dans <filename>/etc/tcb</filename>)</phrase>. "
+"L'utilisateur peut spécifier d'autres fichiers avec les paramètres "
+"<replaceable>passwd</replaceable> et <replaceable>shadow</replaceable>."
+
+#: pwck.8.xml:253(para)
+msgid ""
+"Note that when <option>USE_TCB</option> is enabled, you cannot specify an "
+"alternative <replaceable>shadow</replaceable> file. In future releases, this "
+"parameter could be replaced by an alternate TCB directory."
+msgstr ""
+"Veuillez noter que quand <option>USE_TCB</option> est activée, vous ne "
+"pouvez pas indiquer de fichier <replaceable>shadow</replaceable> alternatif. "
+"Dans les prochaines versions, ce paramètre pourra être remplacé par un "
+"répertoire TCB alternatif."
+
+#: pwck.8.xml:322(para)
+msgid "one or more bad password entries"
+msgstr "une entrée de mot de passe ou plus est incorrecte"
+
+#: pwck.8.xml:328(para)
+msgid "can't open password files"
+msgstr "impossible d'ouvrir les fichiers de mots de passe"
+
+#: pwck.8.xml:334(para)
+msgid "can't lock password files"
+msgstr "impossible de verrouiller les fichiers de mots de passe"
+
+#: pwck.8.xml:340(para)
+msgid "can't update password files"
+msgstr "impossible de mettre à jour les fichiers des mots de passe"
+
+#: pwck.8.xml:346(para)
+msgid "can't sort password files"
+msgstr "impossible de trier les fichiers de mots de passe"
+
+#: pwck.8.xml:304(para)
+msgid ""
+"The <command>pwck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"La commande <command>pwck</command> retourne les valeurs suivantes en "
+"quittant : <placeholder-1/>"
+
+#: pwck.8.xml:355(para)
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: porttime.5.xml:57(refentrytitle) porttime.5.xml:64(refname)
+msgid "porttime"
+msgstr "porttime"
+
+#: porttime.5.xml:65(refpurpose)
+msgid "port access time file"
+msgstr ""
+"Fichier de configuration des droits d'accès en fonction de la date et de "
+"l'heure"
+
+#: porttime.5.xml:70(para)
+msgid ""
+"<emphasis remap=\"I\">porttime</emphasis> contains a list of tty devices, "
+"user names, and permitted login times."
+msgstr ""
+"<emphasis remap=\"I\">porttime</emphasis> contient une liste de tty, noms "
+"d'utilisateurs, et horaires d'accès autorisés."
+
+#: porttime.5.xml:75(para)
+msgid ""
+"Each entry consists of three colon separated fields. The first field is a "
+"comma separated list of tty devices, or an asterisk to indicate that all tty "
+"devices are matched by this entry. The second field is a comma separated "
+"list of user names, or an asterisk to indicated that all user names are "
+"matched by this entry. The third field is a comma separated list of "
+"permitted access times."
+msgstr ""
+"Chaque entrée consiste en trois champs séparés par un caractère deux-points "
+"« : ». Le premier champ est une liste de tty séparés par des virgules, ou un "
+"astérisque « * » pour indiquer que l'entrée correspond à toutes les tty. Le "
+"second champ est une liste de noms d'utilisateurs, ou un astérisque pour "
+"indiquer que cette entrée correspond à n'importe quel utilisateur. Le "
+"troisième champ est une liste d'horaires d'accès autorisés."
+
+#: porttime.5.xml:84(para)
+msgid ""
+"Each access time entry consists of zero or more days of the week, "
+"abbreviated <emphasis>Su</emphasis>, <emphasis>Mo</emphasis>, <emphasis>Tu</"
+"emphasis>, <emphasis>We</emphasis>, <emphasis>Th</emphasis>, <emphasis>Fr</"
+"emphasis>, and <emphasis>Sa</emphasis>, followed by a pair of times "
+"separated by a hyphen. The abbreviation <emphasis>Wk</emphasis> may be used "
+"to represent Monday thru Friday, and <emphasis>Al</emphasis> may be used to "
+"indicate every day. If no days are given, <emphasis>Al</emphasis> is assumed."
+msgstr ""
+"Chaque horaire d'accès consiste en zéro ou plusieurs abréviations de jours "
+"de la semaine : <emphasis>Su</emphasis> (dimanche), <emphasis>Mo</emphasis> "
+"(lundi), <emphasis>Tu</emphasis> (mardi), <emphasis>We</emphasis> "
+"(mercredi), <emphasis>Th</emphasis> (jeudi), <emphasis>Fr</emphasis> "
+"(vendredi), <emphasis>Sa</emphasis> (samedi), suivi d'un couple d'horaires "
+"séparés par un tiret. L'abréviation <emphasis>Wk</emphasis> peut être "
+"utilisée pour représenter les jours de la semaine du lundi au vendredi, et "
+"<emphasis>Al</emphasis> permet de spécifier l'ensemble des jours de la "
+"semaine. Par défaut, si aucun jour n'est spécifié, <emphasis>Al</emphasis> "
+"est utilisé."
+
+#: porttime.5.xml:98(title)
+msgid "EXAMPLES"
+msgstr "EXEMPLES"
+
+#: porttime.5.xml:99(para)
+msgid ""
+"The following entry allows access to user <emphasis remap=\"B\">jfh</"
+"emphasis> on every port during weekdays from 9am to 5pm."
+msgstr ""
+"L'entrée suivante autorise l'accès à l'utilisateur <emphasis remap=\"B"
+"\">jfh</emphasis> sur n'importe quel port pendant la semaine de 9 heures à "
+"17 heures."
+
+#: porttime.5.xml:105(para)
+msgid "*:jfh:Wk0900-1700"
+msgstr "*:jfh:Wk0900-1700"
+
+#: porttime.5.xml:107(para)
+msgid ""
+"The following entries allow access only to the users <emphasis>root</"
+"emphasis> and <emphasis>oper</emphasis> on <filename>/dev/console</filename> "
+"at any time. This illustrates how the <filename>/etc/porttime</filename> "
+"file is an ordered list of access times. Any other user would match the "
+"second entry which does not permit access at any time."
+msgstr ""
+"L'entrée suivante autorise l'accès à /dev/console uniquement aux "
+"utilisateurs <emphasis>root</emphasis> et <emphasis>oper</emphasis> à "
+"n'importe quelle heure. Ceci permet de montrer l'importance de l'ordre des "
+"entrées dans le fichier <filename>/etc/porttime</filename>. Les autres "
+"utilisateurs ne satisferont que la deuxième entrée, qui n'autorise aucun "
+"accès."
+
+#: porttime.5.xml:116(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+" console:root,oper:Al0000-2400\n"
+" console:*:\n"
+" "
+msgstr ""
+"\n"
+" console:root,oper:Al0000-2400\n"
+" console:*:\n"
+" "
+
+#: porttime.5.xml:121(para)
+msgid ""
+"The following entry allows access for the user <emphasis>games</emphasis> on "
+"any port during non-working hours."
+msgstr ""
+"L'entrée suivante autorise l'accès à tous les ports pour l'utilisateur "
+"<emphasis>games</emphasis>, en dehors des heures de travail."
+
+#: porttime.5.xml:126(para)
+msgid "*:games:Wk1700-0900,SaSu0000-2400"
+msgstr "*:games:Wk1700-0900,SaSu0000-2400"
+
+#: porttime.5.xml:133(filename) logoutd.8.xml:92(filename)
+msgid "/etc/porttime"
+msgstr "/etc/porttime"
+
+#: porttime.5.xml:135(para) logoutd.8.xml:94(para)
+msgid "File containing port access."
+msgstr "Fichier contenant le port d'accès."
+
+#: porttime.5.xml:143(para) login.access.5.xml:134(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: passwd.5.xml:65(refpurpose)
+msgid "the password file"
+msgstr "fichier des mots de passe"
+
+#: passwd.5.xml:70(para)
+msgid ""
+"<filename>/etc/passwd</filename> contains one line for each user account, "
+"with seven fields delimited by colons (<quote>:</quote>). These fields are:"
+msgstr ""
+"<filename>/etc/passwd</filename> contient différentes informations sur les "
+"comptes utilisateurs. Ces informations consistent en sept champs séparés par "
+"des deux-points (« : ») :"
+
+#: passwd.5.xml:81(para)
+msgid "optional encrypted password"
+msgstr "un mot de passe chiffré optionnel"
+
+#: passwd.5.xml:84(para)
+msgid "numerical user ID"
+msgstr "l'identifiant numérique de l'utilisateur"
+
+#: passwd.5.xml:87(para)
+msgid "numerical group ID"
+msgstr "l'identifiant numérique du groupe de l'utilisateur"
+
+#: passwd.5.xml:90(para)
+msgid "user name or comment field"
+msgstr "le nom complet de l'utilisateur ou un champ de commentaires"
+
+#: passwd.5.xml:93(para)
+msgid "user home directory"
+msgstr "le répertoire personnel de l'utilisateur"
+
+#: passwd.5.xml:96(para)
+msgid "optional user command interpreter"
+msgstr "l'interpréteur de commandes de l'utilisateur (optionnel)"
+
+#: passwd.5.xml:100(para)
+msgid ""
+"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."
+msgstr ""
+
+#: passwd.5.xml:109(para)
+#, fuzzy
+#| msgid ""
+#| "This field may be empty, in which case no passwords are required to "
+#| "authenticate as the specified login name. However, some applications "
+#| "which read the <filename>/etc/shadow</filename> file may decide not to "
+#| "permit any access at all if the password field is empty."
+msgid ""
+"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."
+msgstr ""
+"Ce champ peut être vide. Dans ce cas aucun mot de passe n'est nécessaire "
+"pour s'authentifier avec l'identifiant de connexion indiqué. Cependant, "
+"certaines applications qui lisent le fichier <filename>/etc/shadow</"
+"filename> peuvent n'autoriser aucun accès si le mot de passe est vide."
+
+#: passwd.5.xml:118(para)
+#, fuzzy
+#| msgid ""
+#| "A password field which starts with an exclamation mark means that the "
+#| "password is locked. The remaining characters on the line represent the "
+#| "password field before the password was locked."
+msgid ""
+"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."
+msgstr ""
+"Un champ de mot de passe qui commence avec un point d'exclamation indique "
+"que le mot de passe est bloqué. Les caractères restants sur la ligne "
+"représentent le champ de mot de passe avant que le mot de passe n'ait été "
+"bloqué."
+
+#: passwd.5.xml:138(para)
+msgid ""
+"The comment field is used by various system utilities, such as "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"Le champ de commentaire est utilisé par différents utilitaires système, tels "
+"que <citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>."
+
+#: passwd.5.xml:144(para)
+msgid ""
+"The home directory field provides the name of the initial working directory. "
+"The <command>login</command> program uses this information to set the value "
+"of the <envar>$HOME</envar> environmental variable."
+msgstr ""
+"Le champ du répertoire personnel de l'utilisateur correspond au nom du "
+"répertoire de travail initial. <command>login</command> utilise cette "
+"information pour définir la valeur de la variable d'environnement <envar>"
+"$HOME</envar>."
+
+#: passwd.5.xml:150(para)
+msgid ""
+"The command interpreter field provides the name of the user's command "
+"language interpreter, or the name of the initial program to execute. The "
+"<command>login</command> program uses this information to set the value of "
+"the <envar>$SHELL</envar> environmental variable. If this field is empty, it "
+"defaults to the value <filename>/bin/sh</filename>."
+msgstr ""
+"Le champ de l'interpréteur de commandes correspond au nom de l'interpréteur "
+"de commandes de l'utilisateur, ou au nom d'un programme initial à exécuter. "
+"<command>login</command> utilise cette information pour définir la valeur de "
+"la variable d'environnement <envar>$SHELL</envar>. Si ce champ est vide, "
+"<filename>/bin/sh</filename> est utilisé par défaut."
+
+# TBC: file ?
+#: passwd.5.xml:171(para)
+msgid "optional encrypted password file"
+msgstr "un mot de passe chiffré optionnel"
+
+#: passwd.5.xml:175(filename)
+msgid "/etc/passwd-"
+msgstr "/etc/passwd-"
+
+#: passwd.5.xml:177(para)
+msgid "Backup file for /etc/passwd."
+msgstr "Fichier de sauvegarde de /etc/passwd."
+
+#: passwd.5.xml:189(para)
+msgid ""
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getent</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getpwnam</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwunconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getent</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getpwnam</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwunconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: passwd.1.xml:72(refpurpose)
+msgid "change user password"
+msgstr "Modifier le mot de passe d'un utilisateur"
+
+#: 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 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 ""
+"La commande <command>passwd</command> modifie les mots de passe des comptes "
+"d'utilisateurs. Un utilisateur normal ne peut changer que son propre mot de "
+"passe, alors que le superutilisateur peut changer le mot de passe associé à "
+"n'importe quel compte. <command>passwd</command> modifie également les dates "
+"de fin de validité du compte ou du mot de passe associé."
+
+#: passwd.1.xml:98(title)
+msgid "Password Changes"
+msgstr "Modifications du mot de passe"
+
+#: passwd.1.xml:99(para)
+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 ""
+"Dans un premier temps, l'utilisateur doit fournir son ancien mot de passe, "
+"s'il en avait un. Ce mot de passe est ensuite chiffré puis comparé avec le "
+"mot de passe enregistré. L'utilisateur n'a droit qu'à un seul essai pour "
+"entrer le mot de passe correct. Le superutilisateur peut contourner cette "
+"première étape de manière à changer les mots de passe ayant été oubliés."
+
+#: passwd.1.xml:107(para)
+msgid ""
+"After the password has been entered, password aging information is checked "
+"to see if the user is permitted to change the password at this time. If not, "
+"<command>passwd</command> refuses to change the password and exits."
+msgstr ""
+"Une fois que le mot de passe a été entré, les informations de limite de "
+"validité du mot de passe sont vérifiées pour s'assurer que l'utilisateur est "
+"autorisé à modifier son mot de passe à cet instant. Dans le cas contraire, "
+"<command>passwd</command> refuse de changer le mot de passe, et quitte."
+
+#: passwd.1.xml:114(para)
+msgid ""
+"The user is then prompted twice for a replacement password. The second entry "
+"is compared against the first and both are required to match in order for "
+"the password to be changed."
+msgstr ""
+"Le nouveau mot de passe sera demandé deux fois à l'utilisateur. Le second "
+"mot de passe est comparé avec le premier. Ces deux mots de passe devront "
+"être identiques pour que le mot de passe soit changé."
+
+#: passwd.1.xml:120(para)
+msgid ""
+"Then, the password is tested for complexity. As a general guideline, "
+"passwords should consist of 6 to 8 characters including one or more "
+"characters from each of the following sets:"
+msgstr ""
+"La complexité de ce mot de passe est alors testée. Comme ligne de conduite "
+"générale, un mot de passe doit toujours être constitué de 6 à 8 caractères "
+"en en choisissant un ou plus parmi chacun des ensembles suivants :"
+
+#: passwd.1.xml:128(para)
+msgid "lower case alphabetics"
+msgstr "caractères alphabétiques minuscules"
+
+#: passwd.1.xml:131(para)
+msgid "digits 0 thru 9"
+msgstr "chiffres de 0 à 9"
+
+#: passwd.1.xml:134(para)
+msgid "punctuation marks"
+msgstr "marques de ponctuation"
+
+#: passwd.1.xml:138(para)
+msgid ""
+"Care must be taken not to include the system default erase or kill "
+"characters. <command>passwd</command> will reject any password which is not "
+"suitably complex."
+msgstr ""
+"Il faudra faire attention à ne pas utiliser les caractères de suppression ou "
+"d'effacement. <command>passwd</command> rejettera tout mot de passe dont la "
+"complexité ne sera pas suffisante."
+
+#: passwd.1.xml:147(title)
+msgid "Hints for user passwords"
+msgstr "Astuces pour les mots de passe"
+
+#: passwd.1.xml:148(para)
+msgid ""
+"The security of a password depends upon the strength of the encryption "
+"algorithm and the size of the key space. The legacy <emphasis>UNIX</"
+"emphasis> System encryption method is based on the NBS DES algorithm. More "
+"recent methods are now recommended (see <option>ENCRYPT_METHOD</option>). "
+"The size of the key space depends upon the randomness of the password which "
+"is selected."
+msgstr ""
+"La sécurité d'un mot de passe repose sur la force de l'algorithme de "
+"chiffrement et sur la taille de l'espace de clés utilisé. La méthode de "
+"chiffrement des systèmes <emphasis>UNIX</emphasis> est basée sur "
+"l'algorithme NBS DES. Des méthodes plus récentes sont maintenant "
+"recommandées (voir <option>ENCRYPT_METHOD</option>). La taille de l'espace "
+"de clés dépend de l'aléa du mot de passe utilisé."
+
+#: passwd.1.xml:157(para)
+msgid ""
+"Compromises in password security normally result from careless password "
+"selection or handling. For this reason, you should not select a password "
+"which appears in a dictionary or which must be written down. The password "
+"should also not be a proper name, your license number, birth date, or street "
+"address. Any of these may be used as guesses to violate system security."
+msgstr ""
+"Les compromissions de la sécurité des mots de passe résultent le plus "
+"souvent d'une négligence dans le choix du mot de passe, ou lors de son "
+"utilisation. Pour cette raison, vous ne devez pas sélectionner de mot de "
+"passe apparaissant dans un dictionnaire ou devant être écrit. Le mot de "
+"passe ne doit pas non plus être un nom propre, un numéro minéralogique, une "
+"date de naissance, ou une adresse. En effet ceux-ci pourraient être devinés "
+"pour violer la sécurité du système."
+
+#: passwd.1.xml:166(para)
+msgid ""
+"You can find advice on how to choose a strong password on http://en."
+"wikipedia.org/wiki/Password_strength"
+msgstr ""
+"Vous pouvez trouver des conseils sur la façon de choisir un mot de passe "
+"robuste sur http://en.wikipedia.org/wiki/Password_strength (en anglais)."
+
+#: passwd.1.xml:175(para)
+msgid "The options which apply to the <command>passwd</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>passwd</command> sont :"
+
+#: passwd.1.xml:180(term) faillog.8.xml:96(term)
+msgid "<option>-a</option>, <option>--all</option>"
+msgstr "<option>-a</option>, <option>--all</option>"
+
+# NOTE: pas clair
+#: passwd.1.xml:184(para)
+msgid ""
+"This option can be used only with <option>-S</option> and causes show status "
+"for all users."
+msgstr ""
+"Cette option ne peut être utilisée qu'avec <option>-S</option> et permet "
+"d'afficher l'état des mots de passe pour tous les utilisateurs."
+
+#: passwd.1.xml:191(term)
+msgid "<option>-d</option>, <option>--delete</option>"
+msgstr "<option>-d</option>, <option>--delete</option>"
+
+#: passwd.1.xml:195(para)
+msgid ""
+"Delete a user's password (make it empty). This is a quick way to disable a "
+"password for an account. It will set the named account passwordless."
+msgstr ""
+"Supprimer le mot de passe (le rendre vide) d'un utilisateur. C'est une façon "
+"rapide de supprimer l'authentification par mot de passe pour un compte. Il "
+"rend le compte indiqué sans mot de passe."
+
+#: passwd.1.xml:203(term)
+msgid "<option>-e</option>, <option>--expire</option>"
+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 their password at the user's next login."
+msgstr ""
+"Annuler immédiatement la validité du mot de passe d'un compte. Ceci permet "
+"d'obliger un utilisateur à changer son mot de passe lors de sa prochaine "
+"connexion."
+
+#: passwd.1.xml:220(term)
+msgid ""
+"<option>-i</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-i</option>, <option>--inactive</option>&nbsp;"
+"<replaceable>DURÉE_INACTIVITÉ</replaceable>"
+
+# NOTE: Only this user account
+#: passwd.1.xml:224(para)
+msgid ""
+"This option is used to disable an account after the password has been "
+"expired for a number of days. After a user account has had an expired "
+"password for <replaceable>INACTIVE</replaceable> days, the user may no "
+"longer sign on to the account."
+msgstr ""
+"Cette option permet de désactiver un compte quelques temps après expiration "
+"de son mot de passe. <replaceable>DURÉE_INACTIVITÉ</replaceable> jours après "
+"expiration de son mot de passe, l'utilisateur ne pourra plus se connecter "
+"avec ce compte."
+
+#: passwd.1.xml:233(term)
+msgid "<option>-k</option>, <option>--keep-tokens</option>"
+msgstr "<option>-k</option>, <option>--keep-tokens</option>"
+
+# NOTE: pas clair
+#: passwd.1.xml:237(para)
+msgid ""
+"Indicate password change should be performed only for expired authentication "
+"tokens (passwords). The user wishes to keep their non-expired tokens as "
+"before."
+msgstr ""
+"Indiquer que la modification de mot de passe ne sera effectuée que lors de "
+"l'expiration des jetons d'authentification (mots de passe). C'est utile dans "
+"le cas où l'utilisateur voudrait conserver ses jetons d'authentification "
+"encore valables."
+
+#: passwd.1.xml:245(term)
+msgid "<option>-l</option>, <option>--lock</option>"
+msgstr "<option>-l</option>, <option>--lock</option>"
+
+#: passwd.1.xml:249(para)
+msgid ""
+"Lock the password of the named account. This option disables a password by "
+"changing it to a value which matches no possible encrypted value (it adds a "
+"´!´ at the beginning of the password)."
+msgstr ""
+"Verrouiller le mot de passe du compte indiqué. Cette option désactive un mot "
+"de passe en le modifiant par une valeur qui ne correspond pas à un mot de "
+"passe chiffré possible (cela ajoute un « ! » au début du mot de passe)."
+
+#: passwd.1.xml:255(para)
+msgid ""
+"Note that this does not disable the account. The user may still be able to "
+"login using another authentication token (e.g. an SSH key). To disable the "
+"account, administrators should use <command>usermod --expiredate 1</command> "
+"(this set the account's expire date to Jan 2, 1970)."
+msgstr ""
+"Veuillez noter que cela ne désactive pas le compte. L'utilisateur peut "
+"toujours se connecter en utilisant une autre méthode d'authentification (par "
+"exemple une clé SSH). Pour désactiver un compte, les administrateurs "
+"devraient utiliser <command>usermod --expiredate 1</command> (cela définit "
+"la date d'expiration du compte au 2 janvier 1970)."
+
+#: passwd.1.xml:262(para)
+msgid "Users with a locked password are not allowed to change their password."
+msgstr ""
+"Les utilisateurs avec un mot de passe verrouillé ne sont pas autorisés à le "
+"changer."
+
+#: passwd.1.xml:269(term)
+msgid ""
+"<option>-n</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-n</option>, <option>--mindays</option>&nbsp;<replaceable>JOURS_MIN</"
+"replaceable>"
+
+#: passwd.1.xml:273(para) chage.1.xml:174(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 their password at any time."
+msgstr ""
+"Définir le nombre minimum de jours entre chaque changement de mot de passe à "
+"<replaceable>MIN_JOURS</replaceable>. Une valeur de zéro pour ce champ "
+"indique que l'utilisateur peut changer son mot de passe quand il le souhaite."
+
+#: passwd.1.xml:291(term)
+msgid ""
+"<option>-r</option>, <option>--repository</option>&nbsp;"
+"<replaceable>REPOSITORY</replaceable>"
+msgstr ""
+"<option>-r</option>, <option>--repository</option>&nbsp;"
+"<replaceable>REPOSITORY</replaceable>"
+
+#: passwd.1.xml:295(para)
+msgid "change password in <replaceable>REPOSITORY</replaceable> repository"
+msgstr ""
+"Modifier le mot de passe dans la base <replaceable>REPOSITORY</replaceable>"
+
+#: passwd.1.xml:313(term)
+msgid "<option>-S</option>, <option>--status</option>"
+msgstr "<option>-S</option>, <option>--status</option>"
+
+#: passwd.1.xml:317(para)
+msgid ""
+"Display account status information. The status information consists of 7 "
+"fields. The first field is the user's login name. The second field indicates "
+"if the user account has a locked password (L), has no password (NP), or has "
+"a usable password (P). The third field gives the date of the last password "
+"change. The next four fields are the minimum age, maximum age, warning "
+"period, and inactivity period for the password. These ages are expressed in "
+"days."
+msgstr ""
+"Afficher l'état d'un compte. Cet état est constitué de 7 champs. Le premier "
+"champ est le nom du compte. Le second champ indique si le mot de passe est "
+"bloqué (L), n'a pas de mot de passe (NP) ou a un mot de passe utilisable "
+"(P). Le troisième champ donne la date de dernière modification du mot de "
+"passe. Les quatre champs suivants sont : la durée minimum avant "
+"modification, la durée maximum de validité, la durée d'avertissement, et la "
+"durée d'inactivité autorisée pour le mot de passe. Les durées sont exprimées "
+"en jours."
+
+#: passwd.1.xml:331(term)
+msgid "<option>-u</option>, <option>--unlock</option>"
+msgstr "<option>-u</option>, <option>--unlock</option>"
+
+#: passwd.1.xml:335(para)
+msgid ""
+"Unlock the password of the named account. This option re-enables a password "
+"by changing the password back to its previous value (to the value before "
+"using the <option>-l</option> option)."
+msgstr ""
+"Déverrouiller le mot de passe du compte indiqué. Cette option réactive un "
+"mot de passe en remettant le mot de passe à sa valeur précédente (la valeur "
+"présente avant l'utilisation de l'option <option>-l</option>)."
+
+#: passwd.1.xml:344(term)
+msgid ""
+"<option>-w</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>WARN_DAYS</replaceable>"
+msgstr ""
+"<option>-w</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>DURÉE_AVERTISSEMENT</replaceable>"
+
+#: 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 their password is "
+"about to expire."
+msgstr ""
+"Configurer le nombre de jours d'avertissement avant que le changement de mot "
+"de passe ne soit obligatoire. La valeur <replaceable>JOURS_AVERTISSEMENT</"
+"replaceable> est le nombre de jours précédant l'expiration du mot de passe "
+"et durant lesquels un utilisateur sera prévenu que son mot de passe est sur "
+"le point d'arriver en fin de validité."
+
+#: passwd.1.xml:357(term)
+msgid ""
+"<option>-x</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-x</option>, <option>--maxdays</option>&nbsp;<replaceable>JOURS_MAX</"
+"replaceable>"
+
+#: passwd.1.xml:361(para)
+msgid ""
+"Set the maximum number of days a password remains valid. After "
+"<replaceable>MAX_DAYS</replaceable>, the password is required to be changed."
+msgstr ""
+"Configurer le nombre maximum de jours pendant lesquels un mot de passe reste "
+"valable. Après <replaceable>JOURS_MAX</replaceable>, le mot de passe devra "
+"être modifié."
+
+#: passwd.1.xml:366(para) chage.1.xml:195(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as "
+"<replaceable>MAX_DAYS</replaceable> will remove checking a password's "
+"validity."
+msgstr ""
+"Une valeur de <emphasis remap=\"I\">-1</emphasis> pour "
+"<replaceable>JOURS_MAX</replaceable> supprime la vérification de validité."
+
+#: passwd.1.xml:378(para)
+msgid ""
+"Password complexity checking may vary from site to site. The user is urged "
+"to select a password as complex as he or she feels comfortable with."
+msgstr ""
+"La vérification de la complexité des mots de passe peut varier d'un site à "
+"l'autre. Il est vivement conseillé aux utilisateurs de choisir un mot de "
+"passe aussi complexe que possible dans la limite de ce qu'il est capable de "
+"mémoriser. "
+
+#: passwd.1.xml:383(para)
+msgid ""
+"Users may not be able to change their password on a system if NIS is enabled "
+"and they are not logged into the NIS server."
+msgstr ""
+"Il se peut que les utilisateurs ne puissent pas changer leur mot de passe "
+"sur un système si NIS est activé et qu'ils ne sont pas connectés au serveur "
+"NIS."
+
+#: passwd.1.xml:388(para)
+msgid ""
+"<command>passwd</command> uses PAM to authenticate users and to change their "
+"passwords."
+msgstr ""
+"<command>passwd</command> utilise PAM pour authentifier les utilisateurs et "
+"modifier leur mot de passe."
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>ENCRYPT_METHOD</option> (string)"
+msgstr "<option>ENCRYPT_METHOD</option> (chaîne de caractères)"
+
+#: passwd.1.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: gpasswd.1.xml:32(para) chpasswd.8.xml:32(para) chgpasswd.8.xml:32(para)
+msgid ""
+"This defines the system default encryption algorithm for encrypting "
+"passwords (if no algorithm are specified on the command line)."
+msgstr ""
+"Définir les algorithmes de chiffrement par défaut du système pour coder les "
+"mots de passes (si aucun algorithme n'a été indiqué sur la ligne de "
+"commandes)."
+
+#: passwd.1.xml:36(para) newusers.8.xml:36(para) login.defs.5.xml:36(para)
+#: gpasswd.1.xml:36(para) chpasswd.8.xml:36(para) chgpasswd.8.xml:36(para)
+msgid ""
+"It can take one of these values: <replaceable>DES</replaceable> (default), "
+"<replaceable>MD5</replaceable><phrase condition=\"sha_crypt\">, "
+"<replaceable>SHA256</replaceable>, <replaceable>SHA512</replaceable></"
+"phrase>."
+msgstr ""
+"Les valeurs suivantes sont acceptées : <replaceable>DES</replaceable> (par "
+"défaut), <replaceable>MD5</replaceable><phrase condition=\"sha_crypt\">, "
+"<replaceable>SHA256</replaceable>, <replaceable>SHA512</replaceable></"
+"phrase>."
+
+#: passwd.1.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: gpasswd.1.xml:43(para) chpasswd.8.xml:43(para) chgpasswd.8.xml:43(para)
+msgid ""
+"Note: this parameter overrides the <option>MD5_CRYPT_ENAB</option> variable."
+msgstr ""
+"Remarque : ce paramètre remplace la variable <option>MD5_CRYPT_ENAB</option>."
+
+#: passwd.1.xml:47(para) passwd.1.xml:53(para) passwd.1.xml:62(para)
+#: newusers.8.xml:47(para) newusers.8.xml:53(para) newusers.8.xml:62(para)
+#: login.defs.5.xml:47(para) login.defs.5.xml:53(para)
+#: login.defs.5.xml:62(para) gpasswd.1.xml:47(para) gpasswd.1.xml:53(para)
+#: gpasswd.1.xml:62(para) chpasswd.8.xml:47(para) chpasswd.8.xml:53(para)
+#: chpasswd.8.xml:62(para) chgpasswd.8.xml:47(para) chgpasswd.8.xml:53(para)
+#: chgpasswd.8.xml:62(para)
+msgid ""
+"Note: This only affect the generation of group passwords. The generation of "
+"user passwords is done by PAM and subject to the PAM configuration. It is "
+"recommended to set this variable consistently with the PAM configuration."
+msgstr ""
+"Remarque : cela n'affecte que la création des mots de passe de groupe. La "
+"création de mot de passe des utilisateurs est effectuée par PAM en fonction "
+"de la configuration de PAM. Il est recommandé de définir cette variable en "
+"cohérence avec la configuration de PAM."
+
+#: passwd.1.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: gpasswd.1.xml:32(term) chpasswd.8.xml:32(term) chgpasswd.8.xml:32(term)
+msgid "<option>MD5_CRYPT_ENAB</option> (boolean)"
+msgstr "<option>MD5_CRYPT_ENAB</option> (booléen)"
+
+#: passwd.1.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: gpasswd.1.xml:34(para) chpasswd.8.xml:34(para) chgpasswd.8.xml:34(para)
+msgid ""
+"Indicate if passwords must be encrypted using the MD5-based algorithm. If "
+"set to <replaceable>yes</replaceable>, new passwords will be encrypted using "
+"the MD5-based algorithm compatible with the one used by recent releases of "
+"FreeBSD. It supports passwords of unlimited length and longer salt strings. "
+"Set to <replaceable>no</replaceable> if you need to copy encrypted passwords "
+"to other systems which don't understand the new algorithm. Default is "
+"<replaceable>no</replaceable>."
+msgstr ""
+"Indiquer si un mot de passe doit être chiffré en utilisant l'algorithme basé "
+"sur MD5. Si configurée à <replaceable>yes</replaceable>, les nouveaux mots "
+"de passe seront chiffrés en utilisant l'algorithme basé sur MD5 compatible "
+"avec celui utilisé par les versions récentes de FreeBSD. Il gère des mots de "
+"passe de longueur illimitée et des chaînes de salage plus longues. "
+"Configurez-la à <replaceable>no</replaceable> pour copier les mots de passe "
+"chiffrés sur d'autres systèmes qui ne comprennent pas le nouvel algorithme. "
+"la valeur par défaut est <replaceable>no</replaceable>."
+
+#: passwd.1.xml:44(para) newusers.8.xml:44(para) login.defs.5.xml:44(para)
+#: gpasswd.1.xml:44(para) chpasswd.8.xml:44(para) chgpasswd.8.xml:44(para)
+msgid ""
+"This variable is superseded by the <option>ENCRYPT_METHOD</option> variable "
+"or by any command line option used to configure the encryption algorithm."
+msgstr ""
+"Cette variable est écrasée par la variable <option>ENCRYPT_METHOD</option> "
+"ou par toute option de la ligne de commande utilisée pour configurer "
+"l'algorithme de chiffrement."
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid ""
+"This variable is deprecated. You should use <option>ENCRYPT_METHOD</option>."
+msgstr ""
+"Cette variable est obsolète. Vous devriez utiliser <option>ENCRYPT_METHOD</"
+"option>."
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>OBSCURE_CHECKS_ENAB</option> (boolean)"
+msgstr "<option>OBSCURE_CHECKS_ENAB</option> (booléen)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable additional checks upon password changes."
+msgstr ""
+"Activer des vérifications supplémentaires lors des changements de mot de "
+"passe."
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_ALWAYS_WARN</option> (boolean)"
+msgstr "<option>PASS_ALWAYS_WARN</option> (booléen)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Warn about weak passwords (but still allow them) if you are root."
+msgstr ""
+"Avertir en cas de mots de passe faibles (mais les accepte quand même) si "
+"vous êtes superutilisateur."
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_CHANGE_TRIES</option> (number)"
+msgstr "<option>PASS_CHANGE_TRIES</option> (nombre)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Maximum number of attempts to change password if rejected (too easy)."
+msgstr ""
+"Nombre maximum d'essais pour changer de mot de passe si refusé (trop facile)."
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_MAX_LEN</option> (number)"
+msgstr "<option>PASS_MAX_LEN</option> (nombre)"
+
+#: passwd.1.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>PASS_MIN_LEN</option> (number)"
+msgstr "<option>PASS_MIN_LEN</option> (nombre)"
+
+#: passwd.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"Number of significant characters in the password for crypt(). "
+"<option>PASS_MAX_LEN</option> is 8 by default. Don't change unless your "
+"crypt() is better. This is ignored if <option>MD5_CRYPT_ENAB</option> set to "
+"<replaceable>yes</replaceable>."
+msgstr ""
+"Nombre de caractères significatifs dans le mot de passe pour crypt(). La "
+"valeur par défaut de <option>PASS_MAX_LEN</option> est 8. Ne la changez pas "
+"à moins que votre crypt() ne soit meilleur. Ceci est ignoré si "
+"<option>MD5_CRYPT_ENAB</option> est configurée à <replaceable>yes</"
+"replaceable>."
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>SHA_CRYPT_MIN_ROUNDS</option> (number)"
+msgstr "<option>SHA_CRYPT_MIN_ROUNDS</option> (nombre)"
+
+#: passwd.1.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: gpasswd.1.xml:31(term) chpasswd.8.xml:31(term) chgpasswd.8.xml:31(term)
+msgid "<option>SHA_CRYPT_MAX_ROUNDS</option> (number)"
+msgstr "<option>SHA_CRYPT_MAX_ROUNDS</option> (nombre)"
+
+#: passwd.1.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: gpasswd.1.xml:33(para) chpasswd.8.xml:33(para) chgpasswd.8.xml:33(para)
+msgid ""
+"When <option>ENCRYPT_METHOD</option> is set to <replaceable>SHA256</"
+"replaceable> or <replaceable>SHA512</replaceable>, this defines the number "
+"of SHA rounds used by the encryption algorithm by default (when the number "
+"of rounds is not specified on the command line)."
+msgstr ""
+"Quand <option>ENCRYPT_METHOD</option> est configurée à <replaceable>SHA256</"
+"replaceable> ou <replaceable>SHA512</replaceable>, cela définit le nombre de "
+"rounds de SHA utilisés par l'algorithme de chiffrement par défaut (quand le "
+"nombre de rounds n'est pas précisé sur la ligne de commande)."
+
+#: passwd.1.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: gpasswd.1.xml:40(para) chpasswd.8.xml:40(para) chgpasswd.8.xml:40(para)
+msgid ""
+"With a lot of rounds, it is more difficult to brute forcing the password. "
+"But note also that more CPU resources will be needed to authenticate users."
+msgstr ""
+"Avec beaucoup de rounds, il est plus difficile de trouver le mot de passe "
+"avec une attaque par force brute. Veuillez remarquer que plus de ressources "
+"processeur seront nécessaires pour authentifier les utilisateurs."
+
+#: passwd.1.xml:45(para) newusers.8.xml:45(para) login.defs.5.xml:45(para)
+#: gpasswd.1.xml:45(para) chpasswd.8.xml:45(para) chgpasswd.8.xml:45(para)
+msgid ""
+"If not specified, the libc will choose the default number of rounds (5000)."
+msgstr ""
+"Si non précisée, la libc utilisera le nombre de rounds par défaut (5000)."
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid "The values must be inside the 1000-999,999,999 range."
+msgstr ""
+"Les valeurs doivent être comprises dans l'intervalle 1 000 - 999 999 999."
+
+#: passwd.1.xml:52(para) newusers.8.xml:52(para) login.defs.5.xml:52(para)
+#: gpasswd.1.xml:52(para) chpasswd.8.xml:52(para) chgpasswd.8.xml:52(para)
+msgid ""
+"If only one of the <option>SHA_CRYPT_MIN_ROUNDS</option> or "
+"<option>SHA_CRYPT_MAX_ROUNDS</option> values is set, then this value will be "
+"used."
+msgstr ""
+"Si une seule des variables <option>SHA_CRYPT_MIN_ROUNDS</option> ou "
+"<option>SHA_CRYPT_MAX_ROUNDS</option> est configurée, alors cette valeur "
+"sera utilisée."
+
+#: passwd.1.xml:57(para) newusers.8.xml:57(para) login.defs.5.xml:57(para)
+#: gpasswd.1.xml:57(para) chpasswd.8.xml:57(para) chgpasswd.8.xml:57(para)
+msgid ""
+"If <option>SHA_CRYPT_MIN_ROUNDS</option> &gt; <option>SHA_CRYPT_MAX_ROUNDS</"
+"option>, the highest value will be used."
+msgstr ""
+"Si <option>SHA_CRYPT_MIN_ROUNDS</option> &gt; <option>SHA_CRYPT_MAX_ROUNDS</"
+"option>, la valeur la plus élevée sera utilisée."
+
+#: passwd.1.xml:434(filename)
+msgid "/etc/pam.d/passwd"
+msgstr "/etc/pam.d/passwd"
+
+#: passwd.1.xml:436(para)
+msgid "PAM configuration for <command>passwd</command>."
+msgstr "Configuration de PAM pour <command>passwd</command>."
+
+#: passwd.1.xml:456(para) chage.1.xml:297(para)
+msgid "permission denied"
+msgstr "permission refusée"
+
+#: passwd.1.xml:462(para)
+msgid "invalid combination of options"
+msgstr "combinaison d'options non valable"
+
+#: passwd.1.xml:468(para)
+msgid "unexpected failure, nothing done"
+msgstr "échec inattendu, rien n'a été fait"
+
+#: passwd.1.xml:474(para)
+msgid "unexpected failure, <filename>passwd</filename> file missing"
+msgstr "échec inattendu, le fichier <filename>passwd</filename> est manquant"
+
+#: passwd.1.xml:480(para)
+msgid "<filename>passwd</filename> file busy, try again"
+msgstr ""
+"fichier <filename>passwd</filename> en cours d'utilisation, veuillez "
+"réessayer plus tard"
+
+#: passwd.1.xml:444(para)
+msgid ""
+"The <command>passwd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"La commande <command>passwd</command> retourne les valeurs suivantes en "
+"quittant : <placeholder-1/>"
+
+#: passwd.1.xml:495(para)
+msgid ""
+"<citerefentry><refentrytitle>chpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <phrase condition=\"no_pam"
+"\"><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <phrase condition=\"no_pam"
+"\"><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: nologin.8.xml:46(refentrytitle) nologin.8.xml:53(refname)
+#: nologin.8.xml:59(command)
+msgid "nologin"
+msgstr "nologin"
+
+#: nologin.8.xml:54(refpurpose)
+msgid "politely refuse a login"
+msgstr "refuser poliment une connexion"
+
+#: nologin.8.xml:65(para)
+msgid ""
+"The <command>nologin</command> command displays a message that an account is "
+"not available and exits non-zero. It is intended as a replacement shell "
+"field for accounts that have been disabled."
+msgstr ""
+"La commande <command>nologin</command> affiche un message indiquant que le "
+"compte n'est pas disponible et retourne avec un code non nul. Elle peut être "
+"placée dans le champ indiquant l'interpréteur de commandes pour les comptes "
+"qui ont été désactivés."
+
+#: nologin.8.xml:70(para)
+msgid ""
+"To disable all logins, investigate <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"Pour désactiver toutes les connexions, veuillez consulter "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+
+#: nologin.8.xml:75(para)
+msgid ""
+"If <command>SSH_ORIGINAL_COMMAND</command> is populated it will be logged."
+msgstr ""
+
+#: nologin.8.xml:82(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: nologin.8.xml:93(title)
+msgid "HISTORY"
+msgstr "HISTORIQUE"
+
+#: nologin.8.xml:94(para)
+msgid "The <command>nologin</command> command appeared in BSD 4.4."
+msgstr "La commande <command>nologin</command> est apparue avec BSD 4.4."
+
+#: newusers.8.xml:73(refentrytitle) newusers.8.xml:80(refname)
+#: newusers.8.xml:86(command) login.defs.5.xml:400(term)
+msgid "newusers"
+msgstr "newusers"
+
+#: newusers.8.xml:81(refpurpose)
+msgid "update and create new users in batch"
+msgstr "Mettre à jour, ou créer de nouveaux utilisateurs par lots"
+
+#: newusers.8.xml:91(replaceable)
+msgid "file"
+msgstr "fichier"
+
+#: newusers.8.xml:98(para)
+msgid ""
+"The <command>newusers</command> command reads a <replaceable>file</"
+"replaceable> (or the standard input by default) and uses this information to "
+"update a set of existing users or to create new users. Each line is in the "
+"same format as the standard password file (see "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>) with the exceptions explained below:"
+msgstr ""
+"La commande <command>newusers</command> lit un "
+"<replaceable>fichier<replaceable> (ou l'entrée standard par défaut) et "
+"utilise ces informations pour mettre à jour un groupe d'utilisateurs "
+"existants ou pour créer de nouveaux utilisateurs. Chaque ligne est au même "
+"format que le fichier des mots de passe (consultez "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>) avec les exceptions suivantes :"
+
+#: newusers.8.xml:106(para)
+msgid "pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell"
+msgstr "pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell"
+
+#: newusers.8.xml:111(emphasis)
+msgid "pw_name"
+msgstr "pw_name"
+
+#: newusers.8.xml:114(para)
+msgid "This is the name of the user."
+msgstr "C'est le nom de l'utilisateur."
+
+#: newusers.8.xml:117(para)
+msgid ""
+"It can be the name of a new user or the name of an existing user (or a user "
+"created before by <command>newusers</command>). In case of an existing user, "
+"the user's information will be changed, otherwise a new user will be created."
+msgstr ""
+"Il peut s'agir du nom d'un nouvel utilisateur ou du nom d'un utilisateur "
+"existant (ou d'un utilisateur créé précédemment par <command>newusers</"
+"command>). Dans le cas d'un utilisateur existant, les informations de "
+"l'utilisateur seront modifiées, sinon un nouvel utilisateur sera créé."
+
+#: newusers.8.xml:128(emphasis)
+msgid "pw_passwd"
+msgstr "pw_passwd"
+
+#: newusers.8.xml:131(para)
+msgid ""
+"This field will be encrypted and used as the new value of the encrypted "
+"password."
+msgstr ""
+"Ce champ sera chiffré et utilisé comme nouvelle valeur du mot de passe "
+"chiffré."
+
+#: newusers.8.xml:139(emphasis)
+msgid "pw_uid"
+msgstr "pw_uid"
+
+#: newusers.8.xml:142(para)
+msgid "This field is used to define the UID of the user."
+msgstr "Ce champ est utilisé pour définir l'UID de l'utilisateur."
+
+#: newusers.8.xml:145(para)
+msgid ""
+"If the field is empty, a new (unused) UID will be defined automatically by "
+"<command>newusers</command>."
+msgstr ""
+"Si ce champ est vide, un nouvel UID (non utilisé) sera défini "
+"automatiquement par <command>newusers</command>."
+
+#: newusers.8.xml:149(para)
+msgid "If this field contains a number, this number will be used as the UID."
+msgstr "Si ce champ contient un nombre, ce nombre sera utilisé comme UID."
+
+#: newusers.8.xml:153(para)
+msgid ""
+"If this field contains the name of an existing user (or the name of a user "
+"created before by <command>newusers</command>), the UID of the specified "
+"user will be used."
+msgstr ""
+"Si ce champ contient le nom d'un utilisateur existant (ou le nom d'un "
+"utilisateur créé précédemment par <command>newusers</command>), l'UID de "
+"l'utilisateur indiqué sera utilisé."
+
+#: newusers.8.xml:159(para)
+msgid ""
+"If the UID of an existing user is changed, the files ownership of the user's "
+"file should be fixed manually."
+msgstr ""
+"Si l'UID d'un utilisateur existant est modifié, vous devrez configurer vous-"
+"même le propriétaire des fichiers de l'utilisateur."
+
+#: newusers.8.xml:167(emphasis)
+msgid "pw_gid"
+msgstr "pw_gid"
+
+#: newusers.8.xml:170(para)
+msgid "This field is used to define the primary group ID for the user."
+msgstr ""
+"Ce champ est utilisé pour définir l'identifiant du groupe primaire de "
+"l'utilisateur."
+
+#: newusers.8.xml:173(para)
+msgid ""
+"If this field contains the name of an existing group (or a group created "
+"before by <command>newusers</command>), the GID of this group will be used "
+"as the primary group ID for the user."
+msgstr ""
+"Si ce champ contient le nom d'un groupe existant (ou d'un groupe créé "
+"précédemment par <command>newusers</command>), le GID de ce groupe sera "
+"utilisé comme identifiant de groupe primaire pour l'utilisateur."
+
+#: newusers.8.xml:179(para)
+msgid ""
+"If this field is a number, this number will be used as the primary group ID "
+"of the user. If no groups exist with this GID, a new group will be created "
+"with this GID, and the name of the user."
+msgstr ""
+"Si ce champ est un nombre, ce nombre sera utilisé comme identifiant de "
+"groupe primaire de cet utilisateur. Si aucun groupe n'existe avec ce GID, un "
+"nouveau groupe sera créé avec ce GID et le nom de l'utilisateur."
+
+#: newusers.8.xml:185(para)
+msgid ""
+"If this field is empty, a new group will be created with the name of the "
+"user and a GID will be automatically defined by <command>newusers</command> "
+"to be used as the primary group ID for the user and as the GID for the new "
+"group."
+msgstr ""
+"Si ce champ est vide, un nouveau groupe sera créé avec le nom de "
+"l'utilisateur et un GID sera automatiquement défini par <command>newusers</"
+"command> pour être utilisé comme identifiant de groupe primaire pour "
+"l'utilisateur et comme GID pour le nouveau groupe."
+
+#: newusers.8.xml:191(para)
+msgid ""
+"If this field contains the name of a group which does not exist (and was not "
+"created before by <command>newusers</command>), a new group will be created "
+"with the specified name and a GID will be automatically defined by "
+"<command>newusers</command> to be used as the primary group ID for the user "
+"and GID for the new group."
+msgstr ""
+"Si le champ contient le nom d'un groupe qui n'existe pas (et qui n'a pas été "
+"créé précédemment par <command>newusers</command>), un nouveau groupe sera "
+"créé avec le nom indiqué et un GID sera automatiquement défini par "
+"<command>newusers</command> pour être utilisé comme identifiant de groupe "
+"primaire pour l'utilisateur et comme identifiant pour le nouveau groupe."
+
+#: newusers.8.xml:203(emphasis)
+msgid "pw_gecos"
+msgstr "pw_gecos"
+
+#: newusers.8.xml:206(para)
+msgid "This field is copied in the GECOS field of the user."
+msgstr "Ce champ est copié dans le champ GECOS de l'utilisateur."
+
+#: newusers.8.xml:213(emphasis)
+msgid "pw_dir"
+msgstr "pw_dir"
+
+#: newusers.8.xml:216(para)
+msgid "This field is used to define the home directory of the user."
+msgstr ""
+"Ce champ est utilisé pour définir le répertoire personnel de l'utilisateur."
+
+#: newusers.8.xml:219(para)
+msgid ""
+"If this field does not specify an existing directory, the specified "
+"directory is created, with ownership set to the user being created or "
+"updated and its primary group."
+msgstr ""
+"Si ce champ n'indique pas de répertoire existant, le répertoire indiqué est "
+"créé, avec comme propriétaire l'utilisateur en cours de création ou mis à "
+"jour et son groupe primaire."
+
+#: newusers.8.xml:224(para)
+msgid ""
+"If the home directory of an existing user is changed, <command>newusers</"
+"command> does not move or copy the content of the old directory to the new "
+"location. This should be done manually."
+msgstr ""
+"Si le répertoire personnel d'un utilisateur existant est modifié, "
+"<command>newusers</command> ne déplace ni ne copie le contenu de l'ancien "
+"répertoire personnel à la nouvelle place. Vous devrez effectuer cela vous-"
+"même."
+
+#: newusers.8.xml:234(emphasis)
+msgid "pw_shell"
+msgstr "pw_shell"
+
+#: newusers.8.xml:237(para)
+msgid ""
+"This field defines the shell of the user. No checks are performed on this "
+"field."
+msgstr ""
+"Ce champ définit l'interpréteur de commande de l'utilisateur. Aucune "
+"vérification n'est effectuée sur ce champ."
+
+#: newusers.8.xml:245(para)
+msgid ""
+"<command>newusers</command> first tries to create or change all the "
+"specified users, and then write these changes to the user or group "
+"databases. If an error occurs (except in the final writes to the databases), "
+"no changes are committed to the databases."
+msgstr ""
+"<command>newusers</command> essayera d'abord de créer ou de modifier tous "
+"les utilisateurs indiqués puis écrira ces modifications dans les bases de "
+"données d'utilisateurs et de groupes. Si une erreur survient (en dehors de "
+"l'écriture finale des bases de données), aucune modification ne sera "
+"propagée dans les bases de données."
+
+#: newusers.8.xml:251(para)
+msgid ""
+"During this first pass, users are created with a locked password (and "
+"passwords are not changed for the users which are not created). A second "
+"pass is used to update the passwords using PAM. Failures to update a "
+"password are reported, but will not stop the other password updates."
+msgstr ""
+"Lors du premier passage, les utilisateurs sont créés avec un mot de passe "
+"verrouillé (les mots de passe ne sont pas modifiés pour les utilisateurs non "
+"créés). Un second passage est utilisé pour mettre à jour les mots de passe "
+"en utilisant PAM. Les échecs de mise à jour des mots de passe sont signalés, "
+"mais n'empêchent pas les mises à jour des autres mots de passe."
+
+#: newusers.8.xml:259(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are updated at a single time."
+msgstr ""
+"Cette commande a été conçue pour les gros systèmes pour lesquels un grand "
+"nombre de comptes sont mis à jour en même temps."
+
+#: newusers.8.xml:267(para)
+msgid "The options which apply to the <command>newusers</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>newusers</command> sont :"
+
+#: newusers.8.xml:284(term) chgpasswd.8.xml:112(term)
+msgid "<option>-c</option>, <option>--crypt-method</option>"
+msgstr "<option>-c</option>, <option>--crypt-method</option>"
+
+#: newusers.8.xml:286(para) chpasswd.8.xml:141(para) chgpasswd.8.xml:114(para)
+msgid "Use the specified method to encrypt the passwords."
+msgstr "Utiliser la méthode précisée pour chiffrer les mots de passe."
+
+#: newusers.8.xml:287(para) chpasswd.8.xml:145(para) chgpasswd.8.xml:118(para)
+msgid ""
+"The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc "
+"support these methods."
+msgstr ""
+"Les méthodes disponibles sont DES, MD5, NONE et SHA256 ou SHA512 si votre "
+"libc prend en charge ces méthodes."
+
+#: newusers.8.xml:309(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are chosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+"Les utilisateurs système seront créés sans information d'âge dans <filename>/"
+"etc/shadow</filename> et leurs identifiants numériques sont choisis dans "
+"l'intervalle <option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option>, "
+"défini dans <filename>login.defs</filename>, au lieu de <option>UID_MIN</"
+"option>-<option>UID_MAX</option> (et leur <option>GID</option> correspondant "
+"pour la création de groupes)."
+
+#: newusers.8.xml:335(term) chgpasswd.8.xml:158(term)
+msgid "<option>-s</option>, <option>--sha-rounds</option>"
+msgstr "<option>-s</option>, <option>--sha-rounds</option>"
+
+#: newusers.8.xml:337(para) chpasswd.8.xml:204(para) chgpasswd.8.xml:160(para)
+msgid "Use the specified number of rounds to encrypt the passwords."
+msgstr "Utiliser le nombre de rounds précisé pour chiffrer les mots de passe."
+
+#: newusers.8.xml:340(para) chpasswd.8.xml:207(para) chgpasswd.8.xml:163(para)
+msgid ""
+"The value 0 means that the system will choose the default number of rounds "
+"for the crypt method (5000)."
+msgstr ""
+"La valeur 0 signifie que le système choisira la valeur par défaut du nombre "
+"de rounds pour la méthode de chiffrement (5 000)."
+
+#: newusers.8.xml:344(para) chpasswd.8.xml:211(para) chgpasswd.8.xml:167(para)
+msgid ""
+"A minimal value of 1000 and a maximal value of 999,999,999 will be enforced."
+msgstr ""
+"Une valeur minimale de 1 000 et une valeur maximale de 999 999 999 seront "
+"imposées."
+
+#: newusers.8.xml:348(para) chpasswd.8.xml:215(para) chgpasswd.8.xml:171(para)
+msgid "You can only use this option with the SHA256 or SHA512 crypt method."
+msgstr ""
+"Vous ne pouvez utiliser cette méthode qu'avec les méthodes de chiffrement "
+"SHA256 ou SHA512."
+
+#: newusers.8.xml:352(para) chgpasswd.8.xml:175(para)
+msgid ""
+"By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and "
+"SHA_CRYPT_MAX_ROUNDS variables in <filename>/etc/login.defs</filename>."
+msgstr ""
+"Par défaut, le nombre de rounds est défini par les variables "
+"SHA_CRYPT_MIN_ROUNDS et SHA_CRYPT_MAX_ROUNDS dans <filename>/etc/login.defs</"
+"filename>."
+
+#: newusers.8.xml:364(para)
+msgid ""
+"The input file must be protected since it contains unencrypted passwords."
+msgstr ""
+"Le fichier d'entrée doit être correctement protégé puisqu'il contient des "
+"mots de passe en clair."
+
+#: newusers.8.xml:368(para) chgpasswd.8.xml:191(para)
+msgid ""
+"You should make sure the passwords and the encryption method respect the "
+"system's password policy."
+msgstr ""
+"Vous devez vous assurer que les mots de passe et la méthode de chiffrement "
+"respectent la politique de mot de passe du système."
+
+#: newusers.8.xml:444(filename)
+msgid "/etc/pam.d/newusers"
+msgstr "/etc/pam.d/newusers"
+
+#: newusers.8.xml:446(para)
+msgid "PAM configuration for <command>newusers</command>."
+msgstr "Configuration de PAM pour <command>newusers</command>."
+
+#: newusers.8.xml:466(para)
+msgid ""
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, <phrase condition="
+"\"subids\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, <phrase condition="
+"\"subids\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: newgrp.1.xml:58(refentrytitle) newgrp.1.xml:65(refname)
+#: newgrp.1.xml:71(command)
+msgid "newgrp"
+msgstr "newgrp"
+
+#: newgrp.1.xml:66(refpurpose)
+msgid "log in to a new group"
+msgstr "se connecter avec un nouveau groupe"
+
+#: newgrp.1.xml:72(replaceable) grpck.8.xml:74(replaceable)
+#: groupadd.8.xml:78(replaceable) gpasswd.1.xml:88(replaceable)
+msgid "group"
+msgstr "groupe"
+
+#: newgrp.1.xml:78(para)
+msgid ""
+"The <command>newgrp</command> command is used to change the current group ID "
+"during a login session. If the optional <option>-</option> flag is given, "
+"the user's environment will be reinitialized as though the user had logged "
+"in, otherwise the current environment, including current working directory, "
+"remains unchanged."
+msgstr ""
+"La commande <command>newgrp</command> permet de changer l'identifiant de "
+"groupe de l'utilisateur au cours d'une session. Si l'option <option>-</"
+"option> est fournie, l'environnement de l'utilisateur est réinitialisé, "
+"comme si l'utilisateur venait de se connecter. Sinon, l'environnement "
+"actuel, y compris le répertoire de travail actuel est conservé."
+
+# NOTE:
+#: newgrp.1.xml:86(para)
+msgid ""
+"<command>newgrp</command> changes the current real group ID to the named "
+"group, or to the default group listed in <filename>/etc/passwd</filename> if "
+"no group name is given. <command>newgrp</command> also tries to add the "
+"group to the user groupset. If not root, the user will be prompted for a "
+"password if she does not have a password (in <filename>/etc/shadow</"
+"filename> if this user has an entry in the shadowed password file, or in "
+"<filename>/etc/passwd</filename> otherwise) and the group does, or if the "
+"user is not listed as a member and the group has a password. The user will "
+"be denied access if the group password is empty and the user is not listed "
+"as a member."
+msgstr ""
+"<command>newgrp</command> change l'identifiant de groupe réel actuel à la "
+"valeur du groupe indiqué, ou au groupe par défaut défini dans <filename>/etc/"
+"passwd</filename> si aucun nom de groupe n'est fourni. <command>newgrp</"
+"command> essaiera également d'ajouter le groupe à l'ensemble des groupes de "
+"l'utilisateur. Si l'utilisateur n'est pas superutilisateur, un mot de passe "
+"lui sera demandé s'il n'utilise pas de mot de passe (dans <filename>/etc/"
+"shadow</filename>, si cet utilisateur a une entrée dans le fichier des mots "
+"de passe cachés, ou dans <filename>/etc/passwd</filename> sinon), mais que "
+"le groupe en a un, ou si l'utilisateur n'est pas dans la liste des membres "
+"de ce groupe et que ce groupe utilise un mot de passe. L'accès sera refusé "
+"si le mot de passe du groupe est vide et que l'utilisateur ne fait pas "
+"partie de ses membres."
+
+#: newgrp.1.xml:100(para)
+msgid ""
+"If there is an entry for this group in <filename>/etc/gshadow</filename>, "
+"then the list of members and the password of this group will be taken from "
+"this file, otherwise, the entry in <filename>/etc/group</filename> is "
+"considered."
+msgstr ""
+"S'il y a une entrée pour ce groupe dans <filename>/etc/gshadow</filename>, "
+"alors la liste des membres et le mot de passe de ce groupe seront pris dans "
+"ce fichier, sinon, l'entrée du fichier <filename>/etc/group</filename> est "
+"utilisée."
+
+#: newgrp.1.xml:152(para)
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, <citerefentry condition="
+"\"gshadow\"><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, <citerefentry condition="
+"\"gshadow\"><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry></phrase>."
+
+#: logoutd.8.xml:57(refentrytitle) logoutd.8.xml:64(refname)
+#: logoutd.8.xml:70(command)
+msgid "logoutd"
+msgstr "logoutd"
+
+#: logoutd.8.xml:65(refpurpose)
+msgid "enforce login time restrictions"
+msgstr "Imposer les restrictions de connexion dans le temps"
+
+#: logoutd.8.xml:76(para)
+msgid ""
+"<command>logoutd</command> enforces the login time and port restrictions "
+"specified in <filename>/etc/porttime</filename>. <command>logoutd</command> "
+"should be started from <filename>/etc/rc</filename>. The <filename>/var/run/"
+"utmp</filename> file is scanned periodically and each user name is checked "
+"to see if the named user is permitted on the named port at the current time. "
+"Any login session which is violating the restrictions in <filename>/etc/"
+"porttime</filename> is terminated."
+msgstr ""
+"<command>logoutd</command> impose les restrictions (sur les ports, la date "
+"et l'heure de connexion) spécifiées dans <filename>/etc/porttime</filename>. "
+"<command>logoutd</command> doit être démarré depuis <filename>/etc/rc</"
+"filename>. Il analyse le fichier <filename>/var/run/utmp</filename> "
+"régulièrement et, pour chaque utilisateur, il vérifie que ce nom "
+"d'utilisateur est autorisé à être connecté à ce port à ce moment. Toute "
+"session en violation avec les restrictions de <filename>/etc/porttime</"
+"filename> est terminée."
+
+#: logoutd.8.xml:98(filename) login.1.xml:341(filename)
+msgid "/var/run/utmp"
+msgstr "/var/run/utmp"
+
+#: logoutd.8.xml:100(para) login.1.xml:343(para)
+msgid "List of current login sessions."
+msgstr "Liste des sessions de connexion en cours."
+
+#: login.defs.5.xml:124(refentrytitle) login.defs.5.xml:131(refname)
+msgid "login.defs"
+msgstr "login.defs"
+
+#: login.defs.5.xml:132(refpurpose)
+msgid "shadow password suite configuration"
+msgstr "configuration de la suite des mots de passe cachés « shadow password »"
+
+#: login.defs.5.xml:137(para)
+msgid ""
+"The <filename>/etc/login.defs</filename> file defines the site-specific "
+"configuration for the shadow password suite. This file is required. Absence "
+"of this file will not prevent system operation, but will probably result in "
+"undesirable operation."
+msgstr ""
+"Le fichier <filename>/etc/login.defs</filename> définit la configuration de "
+"la suite shadow password (mots de passe cachés) pour le système. Ce fichier "
+"est indispensable. Son absence n'empêchera pas le système de fonctionner, "
+"mais aura probablement des conséquences indésirables."
+
+#: login.defs.5.xml:144(para)
+msgid ""
+"This file is a readable text file, each line of the file describing one "
+"configuration parameter. The lines consist of a configuration name and "
+"value, separated by whitespace. Blank lines and comment lines are ignored. "
+"Comments are introduced with a \"#\" pound sign and the pound sign must be "
+"the first non-white character of the line."
+msgstr ""
+"Ce fichier est un fichier texte, dont chaque ligne décrit un paramètre de "
+"configuration. Les lignes consistent en un nom et une valeur, séparés par "
+"une espace. Les lignes blanches et les lignes de commentaires sont ignorées. "
+"Les commentaires commencent par un caractère « # », qui doit être le premier "
+"caractère non blanc de la ligne."
+
+#: login.defs.5.xml:152(para)
+msgid ""
+"Parameter values may be of four types: strings, booleans, numbers, and long "
+"numbers. A string is comprised of any printable characters. A boolean should "
+"be either the value <replaceable>yes</replaceable> or <replaceable>no</"
+"replaceable>. An undefined boolean parameter or one with a value other than "
+"these will be given a <replaceable>no</replaceable> value. Numbers (both "
+"regular and long) may be either decimal values, octal values (precede the "
+"value with <replaceable>0</replaceable>) or hexadecimal values (precede the "
+"value with <replaceable>0x</replaceable>). The maximum value of the regular "
+"and long numeric parameters is machine-dependent."
+msgstr ""
+"Les valeurs des paramètres sont de quatre types : chaînes de caractères, "
+"booléens, nombres et nombres longs. Une chaîne de caractères est constituée "
+"de n'importe quels caractères imprimables. Un booléen est soit "
+"<replaceable>yes</replaceable> (oui), soit <replaceable>no</replaceable> "
+"(non). Un paramètre booléen non défini, ou défini avec une valeur autre que "
+"celles-là prendra la valeur <replaceable>no</replaceable>. Un nombre (normal "
+"ou long) peut être soit décimal, soit octal (en précédant la valeur d'un "
+"<replaceable>0</replaceable>), ou encore hexadécimal (en précédant la valeur "
+"de <replaceable>0x</replaceable>). La valeur maximale des paramètres "
+"numériques normaux ou longs dépend de la machine."
+
+#: login.defs.5.xml:167(para)
+msgid "The following configuration items are provided:"
+msgstr "Les paramètres de configuration suivants sont fournis :"
+
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+msgid "<option>CHFN_AUTH</option> (boolean)"
+msgstr "<option>CHFN_AUTH</option> (booléen)"
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chfn</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+"La valeur <replaceable>yes</replaceable> indique que le programme "
+"<command>chfn</command> nécessitera une authentification avant de procéder à "
+"tout changement, à moins qu'ils ne soient exécutés par le superutilisateur."
+
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+msgid "<option>CHFN_RESTRICT</option> (string)"
+msgstr "<option>CHFN_RESTRICT</option> (chaîne de caractères)"
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"This parameter specifies which values in the <emphasis remap=\"I\">gecos</"
+"emphasis> field of the <filename>/etc/passwd</filename> file may be changed "
+"by regular users using the <command>chfn</command> program. It can be any "
+"combination of letters <replaceable>f</replaceable>, <replaceable>r</"
+"replaceable>, <replaceable>w</replaceable>, <replaceable>h</replaceable>, "
+"for Full name, Room number, Work phone, and Home phone, respectively. For "
+"backward compatibility, <replaceable>yes</replaceable> is equivalent to "
+"<replaceable>rwh</replaceable> and <replaceable>no</replaceable> is "
+"equivalent to <replaceable>frwh</replaceable>. If not specified, only the "
+"superuser can make any changes. The most restrictive setting is better "
+"achieved by not installing <command>chfn</command> SUID."
+msgstr ""
+"Ce paramètre précise quelles valeurs du champ <emphasis remap=\"I\">gecos</"
+"emphasis> du fichier <filename>passwd</filename> peuvent être modifiées par "
+"les utilisateurs ordinaires à l'aide du programme <command>chfn</command>. "
+"Il est constitué d'une combinaison de lettres parmi <replaceable>f</"
+"replaceable>, <replaceable>r</replaceable>, <replaceable>w</replaceable> et "
+"<replaceable>h</replaceable>, correspondant respectivement au nom complet, "
+"au numéro de bureau, au numéro de téléphone professionnel et au numéro de "
+"téléphone personnel. Pour des raisons de compatibilité avec des versions "
+"antérieures, <replaceable>yes</replaceable> est équivalent à "
+"<replaceable>rwh</replaceable> et <replaceable>no</replaceable> à "
+"<replaceable>frwh</replaceable>. S'il n'est pas précisé, seul le "
+"superutilisateur peut effectuer des modifications. Pour une configuration "
+"encore plus restrictive, il sera préférable de ne pas installer "
+"<command>chfn</command> avec l'indicateur SUID positionné."
+
+#: login.defs.5.xml:32(term) chsh.1.xml:32(term)
+msgid "<option>CHSH_AUTH</option> (boolean)"
+msgstr "<option>CHSH_AUTH</option> (booléen)"
+
+#: login.defs.5.xml:34(para) chsh.1.xml:34(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chsh</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+"La valeur <replaceable>yes</replaceable> indique que le programme "
+"<command>chsh</command> nécessitera une authentification avant de procéder à "
+"tout changement, à moins qu'ils ne soient exécutés par le superutilisateur."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ERASECHAR</option> (number)"
+msgstr "<option>ERASECHAR</option> (nombre)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Terminal ERASE character (<replaceable>010</replaceable> = backspace, "
+"<replaceable>0177</replaceable> = DEL)."
+msgstr ""
+"Le caractère ERASE du terminal (<replaceable>010</replaceable> = backspace, "
+"<replaceable>0177</replaceable> = DEL)."
+
+#: login.defs.5.xml:38(para) login.defs.5.xml:37(para) login.1.xml:38(para)
+#: login.1.xml:37(para)
+msgid ""
+"The value can be prefixed \"0\" for an octal value, or \"0x\" for an "
+"hexadecimal value."
+msgstr ""
+"La valeur peut être préfixée par « 0 » pour une valeur octale, ou « 0x » "
+"pour une valeur hexadécimale."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FAIL_DELAY</option> (number)"
+msgstr "<option>FAIL_DELAY</option> (nombre)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Delay in seconds before being allowed another attempt after a login failure."
+msgstr ""
+"Le délai en secondes avant qu'un nouvel essai soit permis après un échec de "
+"connexion."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FAILLOG_ENAB</option> (boolean)"
+msgstr "<option>FAILLOG_ENAB</option> (booléen)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable logging and display of <filename>/var/log/faillog</filename> login "
+"failure info."
+msgstr ""
+"Activer l'enregistrement et l'affichage des informations d'échec de "
+"connexion de <filename>/var/log/faillog</filename>"
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FAKE_SHELL</option> (string)"
+msgstr "<option>FAKE_SHELL</option> (chaîne de caractères)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, <command>login</command> will execute this shell instead of the "
+"users' shell specified in <filename>/etc/passwd</filename>."
+msgstr ""
+"Si définie, <command>login</command> exécutera cet interpréteur de commandes "
+"au lieu de l'interpréteur de l'utilisateur spécifié dans <filename>/etc/"
+"passwd</filename>."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FTMP_FILE</option> (string)"
+msgstr "<option>FTMP_FILE</option> (chaîne de caractères)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, login failures will be logged in this file in a utmp format."
+msgstr ""
+"Si définie, les échecs de connexion seront enregistrés dans le fichier sous "
+"le format utmp"
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>HUSHLOGIN_FILE</option> (string)"
+msgstr "<option>HUSHLOGIN_FILE</option> (chaîne de caractères)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, this file can inhibit all the usual chatter during the login "
+"sequence. If a full pathname is specified, then hushed mode will be enabled "
+"if the user's name or shell are found in the file. If not a full pathname, "
+"then hushed mode will be enabled if the file exists in the user's home "
+"directory."
+msgstr ""
+"Si définie, le fichier peut désactiver tous les affichages habituels durant "
+"la séquence de connexion. Si un nom de chemin complet est spécifié, alors le "
+"mode taiseux sera activé si le nom ou l'interpréteur de commandes de "
+"l'utilisateur sont trouvés dans le fichier. Si ce n'est pas un nom de chemin "
+"complet, alors le mode taiseux sera activé si le fichier existe dans le "
+"répertoire personnel de l'utilisateur."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ISSUE_FILE</option> (string)"
+msgstr "<option>ISSUE_FILE</option> (chaîne de caractères)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "If defined, this file will be displayed before each login prompt."
+msgstr "Si définie, le fichier sera affiché avant chaque invite de connexion."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>KILLCHAR</option> (number)"
+msgstr "<option>KILLCHAR</option> (nombre)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Terminal KILL character (<replaceable>025</replaceable> = CTRL/U)."
+msgstr ""
+"Le caractère KILL du terminal (<replaceable>025</replaceable> = CTRL/U)."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LASTLOG_ENAB</option> (boolean)"
+msgstr "<option>LASTLOG_ENAB</option> (booléen)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging and display of /var/log/lastlog login time info."
+msgstr ""
+"Activer la journalisation et l'affichage des informations de dernière "
+"connexion de /var/log/lastlog."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOG_OK_LOGINS</option> (boolean)"
+msgstr "<option>LOG_OK_LOGINS</option> (booléen)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging of successful logins."
+msgstr "Activer la journalisation des connexions réussies."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOG_UNKFAIL_ENAB</option> (boolean)"
+msgstr "<option>LOG_UNKFAIL_ENAB</option> (booléen)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable display of unknown usernames when login failures are recorded."
+msgstr ""
+"Activer l'affichage des noms d'utilisateurs inconnus quand les échecs de "
+"connexions sont enregistrés."
+
+#: login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"Note: logging unknown usernames may be a security issue if an user enter her "
+"password instead of her login name."
+msgstr ""
+"Remarque : la journalisation des noms d'utilisateurs inconnus peut être un "
+"problème de sécurité si un utilisateur entre son mot de passe au lieu de son "
+"nom d'utilisateur."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOGIN_RETRIES</option> (number)"
+msgstr "<option>LOGIN_RETRIES</option> (nombre)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Maximum number of login retries in case of bad password."
+msgstr ""
+"Le nombre maximum de tentatives de connexion en cas de mauvais mot de passe."
+
+#: login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"This will most likely be overridden by PAM, since the default pam_unix "
+"module has its own built in of 3 retries. However, this is a safe fallback "
+"in case you are using an authentication module that does not enforce "
+"PAM_MAXTRIES."
+msgstr ""
+"Ce sera probablement écrasé par PAM, puisque le module pam_unix est réglé en "
+"dur pour n'effectuer que 3 tentatives. Toutefois, il s'agit d'une solution "
+"de repli au cas où vous utilisez un module d'authentification qui ne fait "
+"pas appliquer PAM_MAXTRIES."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOGIN_TIMEOUT</option> (number)"
+msgstr "<option>LOGIN_TIMEOUT</option> (nombre)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Max time in seconds for login."
+msgstr "Le temps maximum en secondes pour la connexion."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>MOTD_FILE</option> (string)"
+msgstr "<option>MOTD_FILE</option> (chaîne de caractères)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, \":\" delimited list of \"message of the day\" files to be "
+"displayed upon login."
+msgstr ""
+"Si définie, liste délimitée par des « : » de fichiers de « message du jour » "
+"à afficher lors de la connexion."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>NOLOGINS_FILE</option> (string)"
+msgstr "<option>NOLOGINS_FILE</option> (chaîne de caractères)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, name of file whose presence will inhibit non-root logins. The "
+"contents of this file should be a message indicating why logins are "
+"inhibited."
+msgstr ""
+"Si définie, nom de fichier dont la présence empêchera les connexions de "
+"quelqu'un d'autre que le superutilisateur. Le contenu de ces fichiers doit "
+"être un message indiquant pourquoi les connexions sont désactivées."
+
+#: login.defs.5.xml:212(para)
+msgid ""
+"<option>PASS_MAX_DAYS</option>, <option>PASS_MIN_DAYS</option> and "
+"<option>PASS_WARN_AGE</option> are only used at the time of account "
+"creation. Any changes to these settings won't affect existing accounts."
+msgstr ""
+"Les paramètres <option>PASS_MAX_DAYS</option>, <option>PASS_MIN_DAYS</"
+"option> et <option>PASS_WARN_AGE</option> ne sont utilisés qu'au moment de "
+"la création d'un compte. Les changements n'affecteront pas les comptes "
+"existants."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>PORTTIME_CHECKS_ENAB</option> (boolean)"
+msgstr "<option>PORTTIME_CHECKS_ENAB</option> (booléen)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable checking of time restrictions specified in <filename>/etc/porttime</"
+"filename>."
+msgstr ""
+"Activer la vérification des restrictions de temps précisées dans <filename>/"
+"etc/porttime</filename>."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>TTYGROUP</option> (string)"
+msgstr "<option>TTYGROUP</option> (chaîne de caractères)"
+
+#: login.defs.5.xml:33(term) login.1.xml:33(term)
+msgid "<option>TTYPERM</option> (string)"
+msgstr "<option>TTYPERM</option> (chaîne de caractères)"
+
+#: login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"The terminal permissions: the login tty will be owned by the "
+"<option>TTYGROUP</option> group, and the permissions will be set to "
+"<option>TTYPERM</option>."
+msgstr ""
+"Les permissions de terminal : la connexion tty appartiendra au groupe "
+"<option>TTYGROUP</option> et les permissions seront configurées à "
+"<option>TTYPERM</option>."
+
+#: login.defs.5.xml:40(para) login.1.xml:40(para)
+msgid ""
+"By default, the ownership of the terminal is set to the user's primary group "
+"and the permissions are set to <replaceable>0600</replaceable>."
+msgstr ""
+"Par défaut, le propriétaire du terminal est configuré au groupe primaire de "
+"l'utilisateur et les permissions sont configurées à <replaceable>0600</"
+"replaceable>."
+
+#: login.defs.5.xml:45(para) login.1.xml:45(para)
+msgid ""
+"<option>TTYGROUP</option> can be either the name of a group or a numeric "
+"group identifier."
+msgstr ""
+"<option>TTYGROUP</option> peut être le nom d'un groupe ou un identifiant "
+"numérique de groupe."
+
+#: login.defs.5.xml:49(para) login.1.xml:49(para)
+msgid ""
+"If you have a <command>write</command> program which is \"setgid\" to a "
+"special group which owns the terminals, define TTYGROUP to the group number "
+"and TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign "
+"TTYPERM to either 622 or 600."
+msgstr ""
+"Si vous avez un programme <command>write</command> qui est « setgid » à un "
+"groupe spécial auquel les terminaux appartiennent, définissez TTYGROUP comme "
+"l'identifiant numérique du groupe et TTYPERM à 0620. Autrement laissez "
+"TTYGROUP décommenté et TTYPERM configuré soit à 622 soit à 600."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>TTYTYPE_FILE</option> (string)"
+msgstr "<option>TTYTYPE_FILE</option> (chaîne de caractères)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, file which maps tty line to TERM environment parameter. Each "
+"line of the file is in a format something like \"vt100 tty01\"."
+msgstr ""
+"Si définie, fichier qui lie les lignes de tty à la variable d'environnement "
+"TERM. Chaque ligne du fichier est dans un format ressemblant à « vt100 "
+"tty01 »."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ULIMIT</option> (number)"
+msgstr "<option>ULIMIT</option> (nombre)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Default <command>ulimit</command> value."
+msgstr "Valeur par défaut d'<command>ulimit</command>."
+
+#: login.defs.5.xml:245(title)
+msgid "CROSS REFERENCES"
+msgstr "RÉFÉRENCES CROISÉES"
+
+#: login.defs.5.xml:246(para)
+msgid ""
+"The following cross references show which programs in the shadow password "
+"suite use which parameters."
+msgstr ""
+"Les références croisées ci-dessous montrent quels sont les paramètres "
+"utilisés par les différents programmes de la suite shadow password."
+
+#: login.defs.5.xml:253(term) chage.1.xml:58(refentrytitle)
+#: chage.1.xml:65(refname) chage.1.xml:70(command)
+msgid "chage"
+msgstr "chage"
+
+#: login.defs.5.xml:255(para) login.defs.5.xml:451(phrase)
+#: login.defs.5.xml:523(phrase)
+msgid "USE_TCB"
+msgstr "USE_TCB"
+
+#: login.defs.5.xml:259(term) chfn.1.xml:60(refentrytitle)
+#: chfn.1.xml:67(refname) chfn.1.xml:73(command)
+msgid "chfn"
+msgstr "chfn"
+
+#: login.defs.5.xml:261(para)
+msgid ""
+"<phrase condition=\"no_pam\">CHFN_AUTH</phrase> CHFN_RESTRICT <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase>"
+msgstr ""
+"<phrase condition=\"no_pam\">CHFN_AUTH</phrase> CHFN_RESTRICT <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase>"
+
+#: login.defs.5.xml:269(term) chgpasswd.8.xml:57(refentrytitle)
+#: chgpasswd.8.xml:64(refname) chgpasswd.8.xml:70(command)
+msgid "chgpasswd"
+msgstr "chgpasswd"
+
+#: login.defs.5.xml:271(para) login.defs.5.xml:302(para)
+msgid ""
+"ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB <phrase condition="
+"\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+"ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB <phrase condition="
+"\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+
+#: login.defs.5.xml:279(term) chpasswd.8.xml:61(refentrytitle)
+#: chpasswd.8.xml:68(refname) chpasswd.8.xml:74(command)
+msgid "chpasswd"
+msgstr "chpasswd"
+
+#: login.defs.5.xml:282(phrase)
+msgid "ENCRYPT_METHOD MD5_CRYPT_ENAB"
+msgstr "ENCRYPT_METHOD MD5_CRYPT_ENAB"
+
+#: login.defs.5.xml:284(phrase)
+msgid "SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS"
+msgstr "SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS"
+
+#: login.defs.5.xml:290(term) chsh.1.xml:60(refentrytitle)
+#: chsh.1.xml:67(refname) chsh.1.xml:73(command)
+msgid "chsh"
+msgstr "chsh"
+
+#: login.defs.5.xml:292(para)
+msgid "CHSH_AUTH LOGIN_STRING"
+msgstr "CHSH_AUTH LOGIN_STRING"
+
+#: login.defs.5.xml:300(term) gpasswd.1.xml:62(refentrytitle)
+#: gpasswd.1.xml:69(refname) gpasswd.1.xml:83(command)
+msgid "gpasswd"
+msgstr "gpasswd"
+
+#: login.defs.5.xml:310(term) groupadd.8.xml:60(refentrytitle)
+#: groupadd.8.xml:67(refname) groupadd.8.xml:73(command)
+msgid "groupadd"
+msgstr "groupadd"
+
+#: login.defs.5.xml:312(para)
+msgid "GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN"
+msgstr "GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN"
+
+#: login.defs.5.xml:319(term) groupdel.8.xml:58(refentrytitle)
+#: groupdel.8.xml:65(refname) groupdel.8.xml:71(command)
+msgid "groupdel"
+msgstr "groupdel"
+
+#: login.defs.5.xml:321(para) login.defs.5.xml:327(para)
+#: login.defs.5.xml:333(para) login.defs.5.xml:340(para)
+#: login.defs.5.xml:346(para) login.defs.5.xml:352(para)
+msgid "MAX_MEMBERS_PER_GROUP"
+msgstr "MAX_MEMBERS_PER_GROUP"
+
+#: login.defs.5.xml:325(term) groupmems.8.xml:61(refentrytitle)
+#: groupmems.8.xml:68(refname) groupmems.8.xml:74(command)
+msgid "groupmems"
+msgstr "groupmems"
+
+#: login.defs.5.xml:331(term) groupmod.8.xml:58(refentrytitle)
+#: groupmod.8.xml:65(refname) groupmod.8.xml:71(command)
+msgid "groupmod"
+msgstr "groupmod"
+
+#: login.defs.5.xml:338(term) grpck.8.xml:58(refentrytitle)
+#: grpck.8.xml:65(refname) grpck.8.xml:71(command)
+msgid "grpck"
+msgstr "grpck"
+
+#: login.defs.5.xml:357(term) lastlog.8.xml:59(refentrytitle)
+#: lastlog.8.xml:66(refname) lastlog.8.xml:72(command)
+msgid "lastlog"
+msgstr "lastlog"
+
+#: login.defs.5.xml:359(para)
+msgid "LASTLOG_UID_MAX"
+msgstr ""
+
+#: login.defs.5.xml:363(term) login.1.xml:90(refentrytitle)
+#: login.1.xml:97(refname) login.1.xml:103(command) login.1.xml:111(command)
+#: login.1.xml:118(command)
+msgid "login"
+msgstr "login"
+
+#: login.defs.5.xml:365(para)
+#, fuzzy
+#| msgid ""
+#| "<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+#| "<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ "
+#| "ENVIRON_FILE</phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam"
+#| "\">FAILLOG_ENAB</phrase> FAKE_SHELL <phrase condition=\"no_pam"
+#| "\">FTMP_FILE</phrase> HUSHLOGIN_FILE <phrase condition=\"no_pam"
+#| "\">ISSUE_FILE</phrase> KILLCHAR <phrase condition=\"no_pam"
+#| "\">LASTLOG_ENAB</phrase> LOGIN_RETRIES <phrase condition=\"no_pam"
+#| "\">LOGIN_STRING</phrase> LOGIN_TIMEOUT LOG_OK_LOGINS LOG_UNKFAIL_ENAB "
+#| "<phrase condition=\"no_pam\">MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE "
+#| "NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> TTYGROUP TTYPERM "
+#| "TTYTYPE_FILE <phrase condition=\"no_pam\">ULIMIT UMASK</phrase> "
+#| "USERGROUPS_ENAB"
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE</"
+"phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam\">FAILLOG_ENAB</"
+"phrase> FAKE_SHELL <phrase condition=\"no_pam\">FTMP_FILE</phrase> "
+"HUSHLOGIN_FILE <phrase condition=\"no_pam\">ISSUE_FILE</phrase> KILLCHAR "
+"<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 <phrase condition=\"no_pam"
+"\">MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE NOLOGINS_FILE "
+"PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> TTYGROUP TTYPERM TTYTYPE_FILE "
+"<phrase condition=\"no_pam\">ULIMIT UMASK</phrase> USERGROUPS_ENAB"
+msgstr ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE</"
+"phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam\">FAILLOG_ENAB</"
+"phrase> FAKE_SHELL <phrase condition=\"no_pam\">FTMP_FILE</phrase> "
+"HUSHLOGIN_FILE <phrase condition=\"no_pam\">ISSUE_FILE</phrase> KILLCHAR "
+"<phrase condition=\"no_pam\">LASTLOG_ENAB</phrase> LOGIN_RETRIES <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase> LOGIN_TIMEOUT LOG_OK_LOGINS "
+"LOG_UNKFAIL_ENAB <phrase condition=\"no_pam\">MAIL_CHECK_ENAB MAIL_DIR "
+"MAIL_FILE MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> "
+"TTYGROUP TTYPERM TTYTYPE_FILE <phrase condition=\"no_pam\">ULIMIT UMASK</"
+"phrase> USERGROUPS_ENAB"
+
+#: login.defs.5.xml:392(term)
+msgid "newgrp / sg"
+msgstr "newgrp / sg"
+
+#: login.defs.5.xml:394(para)
+msgid "SYSLOG_SG_ENAB"
+msgstr "SYSLOG_SG_ENAB"
+
+#: login.defs.5.xml:402(para)
+#, fuzzy
+#| msgid ""
+#| "ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB "
+#| "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"sha_crypt"
+#| "\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase> SUB_GID_COUNT "
+#| "SUB_GID_MAX SUB_GID_MIN SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN SYS_GID_MAX "
+#| "SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+msgid ""
+"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> "
+"SUB_GID_COUNT SUB_GID_MAX SUB_GID_MIN SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN "
+"SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+msgstr ""
+"ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB "
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase> SUB_GID_COUNT "
+"SUB_GID_MAX SUB_GID_MIN SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN SYS_GID_MAX "
+"SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+
+#: login.defs.5.xml:421(para)
+msgid ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN "
+"PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN "
+"PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+
+#: login.defs.5.xml:432(para)
+msgid ""
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb"
+"\">TCB_AUTH_GROUP TCB_SYMLINKS USE_TCB</phrase>"
+msgstr ""
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb"
+"\">TCB_AUTH_GROUP TCB_SYMLINKS USE_TCB</phrase>"
+
+#: login.defs.5.xml:441(para)
+msgid ""
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb\">USE_TCB</"
+"phrase>"
+msgstr ""
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb\">USE_TCB</"
+"phrase>"
+
+#: login.defs.5.xml:458(para)
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENVIRON_FILE</phrase> ENV_PATH "
+"ENV_SUPATH <phrase condition=\"no_pam\">ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB "
+"MAIL_DIR MAIL_FILE QUOTAS_ENAB</phrase> SULOG_FILE SU_NAME <phrase condition="
+"\"no_pam\">SU_WHEEL_ONLY</phrase> SYSLOG_SU_ENAB <phrase condition=\"no_pam"
+"\">USERGROUPS_ENAB</phrase>"
+msgstr ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENVIRON_FILE</phrase> ENV_PATH "
+"ENV_SUPATH <phrase condition=\"no_pam\">ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB "
+"MAIL_DIR MAIL_FILE QUOTAS_ENAB</phrase> SULOG_FILE SU_NAME <phrase condition="
+"\"no_pam\">SU_WHEEL_ONLY</phrase> SYSLOG_SU_ENAB <phrase condition=\"no_pam"
+"\">USERGROUPS_ENAB</phrase>"
+
+#: login.defs.5.xml:473(term)
+msgid "sulogin"
+msgstr "sulogin"
+
+#: login.defs.5.xml:475(para)
+msgid "ENV_HZ <phrase condition=\"no_pam\">ENV_TZ</phrase>"
+msgstr "ENV_HZ <phrase condition=\"no_pam\">ENV_TZ</phrase>"
+
+#: login.defs.5.xml:484(para)
+#, fuzzy
+#| msgid ""
+#| "CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP PASS_MAX_DAYS "
+#| "PASS_MIN_DAYS PASS_WARN_AGE SUB_GID_COUNT SUB_GID_MAX SUB_GID_MIN "
+#| "SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX "
+#| "SYS_UID_MIN UID_MAX UID_MIN UMASK <phrase condition=\"tcb"
+#| "\">TCB_AUTH_GROUP TCB_SYMLINK USE_TCB</phrase>"
+msgid ""
+"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 SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN "
+"SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK "
+"<phrase condition=\"tcb\">TCB_AUTH_GROUP TCB_SYMLINK USE_TCB</phrase>"
+msgstr ""
+"CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP PASS_MAX_DAYS "
+"PASS_MIN_DAYS PASS_WARN_AGE SUB_GID_COUNT SUB_GID_MAX SUB_GID_MIN "
+"SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX "
+"SYS_UID_MIN UID_MAX UID_MIN UMASK <phrase condition=\"tcb\">TCB_AUTH_GROUP "
+"TCB_SYMLINK USE_TCB</phrase>"
+
+#: login.defs.5.xml:502(para)
+msgid ""
+"MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB <phrase "
+"condition=\"tcb\">TCB_SYMLINKS USE_TCB</phrase>"
+msgstr ""
+"MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB <phrase "
+"condition=\"tcb\">TCB_SYMLINKS USE_TCB</phrase>"
+
+#: login.defs.5.xml:512(para)
+#, fuzzy
+#| msgid ""
+#| "MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP <phrase condition=\"tcb"
+#| "\">TCB_SYMLINKS USE_TCB</phrase>"
+msgid ""
+"LASTLOG_UID_MAX MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP <phrase condition="
+"\"tcb\">TCB_SYMLINKS USE_TCB</phrase>"
+msgstr ""
+"MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP <phrase condition=\"tcb"
+"\">TCB_SYMLINKS USE_TCB</phrase>"
+
+#: login.defs.5.xml:532(para)
+msgid ""
+"Much of the functionality that used to be provided by the shadow password "
+"suite is now handled by PAM. Thus, <filename>/etc/login.defs</filename> is "
+"no longer used by <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, or less used by "
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, and <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>. Please refer to the "
+"corresponding PAM configuration files instead."
+msgstr ""
+"La plupart des fonctionnalités qui étaient fournies par les mots de passe "
+"cachés (« shadow password ») sont désormais gérées par PAM. De ce fait, "
+"<filename>/etc/login.defs</filename> n'est plus utilisé par "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> et moins utilisé par <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> et "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>. Veuillez plutôt vous référer aux fichiers de configuration de "
+"PAM correspondant."
+
+#: login.defs.5.xml:548(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: login.access.5.xml:58(refentrytitle) login.access.5.xml:65(refname)
+msgid "login.access"
+msgstr "login.access"
+
+#: login.access.5.xml:66(refpurpose)
+msgid "login access control table"
+msgstr "table de contrôle des connexions"
+
+#: login.access.5.xml:71(para)
+msgid ""
+"The <emphasis remap=\"I\">login.access</emphasis> file specifies (user, "
+"host) combinations and/or (user, tty) combinations for which a login will be "
+"either accepted or refused."
+msgstr ""
+"Le fichier <emphasis remap=\"I\">login.access</emphasis> permet de spécifier "
+"des paires (utilisateur, hôte) et/ou (utilisateur, tty) pour lesquelles "
+"toute connexion sera soit acceptée soit refusée."
+
+#: login.access.5.xml:77(para)
+msgid ""
+"When someone logs in, the <emphasis remap=\"I\">login.access</emphasis> is "
+"scanned for the first entry that matches the (user, host) combination, or, "
+"in case of non-networked logins, the first entry that matches the (user, "
+"tty) combination. The permissions field of that table entry determines "
+"whether the login will be accepted or refused."
+msgstr ""
+"Lorsqu'un utilisateur se connecte, le fichier <emphasis remap=\"I\">login."
+"access</emphasis> est lu jusqu'à la première entrée correspondant à la paire "
+"(utilisateur, hôte) ou, dans le cas d'une connexion ne passant pas par le "
+"réseau, à la première entrée correspondant au couple (utilisateur, tty). Le "
+"champ des permissions de la table pour cette entrée détermine alors si la "
+"connexion doit être acceptée ou refusée."
+
+#: login.access.5.xml:85(para)
+msgid ""
+"Each line of the login access control table has three fields separated by a "
+"\":\" character:"
+msgstr ""
+"Chaque ligne de la table de contrôle des connexions (« login access control "
+"table ») est composée de trois champs séparés par le caractère « : » :"
+
+#: login.access.5.xml:90(para)
+msgid ""
+"<emphasis remap=\"I\">permission</emphasis>:<emphasis remap=\"I\">users</"
+"emphasis>:<emphasis remap=\"I\">origins</emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">permission</emphasis>:<emphasis remap=\"I"
+"\">utilisateurs</emphasis>:<emphasis remap=\"I\">origines</emphasis>"
+
+#: login.access.5.xml:94(para)
+msgid ""
+"The first field should be a \"<emphasis>+</emphasis>\" (access granted) or "
+"\"<emphasis>-</emphasis>\" (access denied) character. The second field "
+"should be a list of one or more login names, group names, or <emphasis>ALL</"
+"emphasis> (always matches). The third field should be a list of one or more "
+"tty names (for non-networked logins), host names, domain names (begin with "
+"\"<literal>.</literal>\"), host addresses, internet network numbers (end "
+"with \"<literal>.</literal>\"), <emphasis>ALL</emphasis> (always matches) or "
+"<emphasis>LOCAL</emphasis> (matches any string that does not contain a "
+"\"<literal>.</literal>\" character). If you run NIS you can use "
+"@netgroupname in host or user patterns."
+msgstr ""
+"Le premier champ est soit un « <emphasis>+</emphasis> » (accès autorisé), "
+"soit un « <emphasis>-</emphasis> » (accès refusé). Le second champ est une "
+"liste d'un ou plusieurs noms d'utilisateurs ou de groupes, ou <emphasis>ALL</"
+"emphasis> (correspond à tous les utilisateurs). Le troisième champ est une "
+"liste d'un ou plusieurs noms de tty (pour les connexions hors réseau), noms "
+"d'hôtes, noms de domaines (commençant par un « <literal>.</literal> »), "
+"adresses d'hôte, adresses de sous-réseau (terminant par un « <literal>.</"
+"literal> »), <emphasis>ALL</emphasis> (pour spécifier n'importe quelle "
+"connexion), ou <emphasis>LOCAL</emphasis> (correspond à n'importe quelle "
+"chaîne ne contenant pas de « <literal>.</literal> »). Si vous utilisez NIS, "
+"vous pouvez utiliser @nomdegroupe pour les motifs d'utilisateur et d'hôte."
+
+#: login.access.5.xml:108(para)
+msgid ""
+"The <emphasis>EXCEPT</emphasis> operator makes it possible to write very "
+"compact rules."
+msgstr ""
+"L'opérateur <emphasis>EXCEPT</emphasis> permet d'écrire des règles très "
+"compactes."
+
+#: login.access.5.xml:113(para)
+msgid ""
+"The group file is searched only when a name does not match that of the "
+"logged-in user. Only groups are matched in which users are explicitly "
+"listed: the program does not look at a user's primary group id value."
+msgstr ""
+"Le fichier d'informations sur les groupes (/etc/group) n'est utilisé que "
+"lorsqu'un nom ne correspond à aucun des utilisateurs connectés. Seuls les "
+"groupes pour lesquels la liste des utilisateurs est spécifiée sont "
+"utilisés : le programme ne recherche pas parmi les groupes primaires des "
+"utilisateurs."
+
+#: login.1.xml:98(refpurpose)
+msgid "begin session on the system"
+msgstr "Démarrer une session sur le système"
+
+#: login.1.xml:104(arg) login.1.xml:112(arg) login.1.xml:119(arg)
+#: login.1.xml:236(option) groupmems.8.xml:79(arg)
+msgid "-p"
+msgstr "-p"
+
+#: login.1.xml:105(replaceable) login.1.xml:113(replaceable)
+#: login.1.xml:120(replaceable)
+msgid "host"
+msgstr "hôte"
+
+#: login.1.xml:105(arg) login.1.xml:113(arg)
+msgid "-h <placeholder-1/>"
+msgstr "-h <placeholder-1/>"
+
+#: login.1.xml:108(replaceable)
+msgid "ENV=VAR"
+msgstr "ENV=VAR"
+
+#: login.1.xml:114(arg) login.1.xml:214(option)
+msgid "-f"
+msgstr "-f"
+
+#: login.1.xml:120(arg)
+msgid "-r <placeholder-1/>"
+msgstr "-r <placeholder-1/>"
+
+#: login.1.xml:126(para)
+msgid ""
+"The <command>login</command> program is used to establish a new session with "
+"the system. It is normally invoked automatically by responding to the "
+"<emphasis remap=\"I\">login:</emphasis> prompt on the user's terminal. "
+"<command>login</command> may be special to the shell and may not be invoked "
+"as a sub-process. When called from a shell, <command>login</command> should "
+"be executed as <emphasis remap=\"B\">exec login</emphasis> which will cause "
+"the user to exit from the current shell (and thus will prevent the new "
+"logged in user to return to the session of the caller). Attempting to "
+"execute <command>login</command> from any shell but the login shell will "
+"produce an error message."
+msgstr ""
+"Le programme <command>login</command> permet d'établir une nouvelle session "
+"sur le système. Il est généralement invoqué après avoir répondu à l'invite "
+"de connexion <emphasis remap=\"I\">login:</emphasis> sur le terminal de "
+"l'utilisateur. <command>login</command> peut être spécifique à "
+"l'interpréteur de commandes et ne devrait pas être invoqué comme un sous-"
+"processus. Lorsqu'il est appelé depuis un interpréteur de commande, "
+"<command>login</command> doit être exécuté comme <emphasis remap=\"B\">>exec "
+"login</emphasis>, ce qui entraîne la sortie de l'interpréteur de commandes "
+"en cours (et ainsi empêche le nouvel utilisateur connecté de retourner à la "
+"session de l'appelant). L'exécution de <command>login</command> depuis un "
+"interpréteur de commandes autre qu'un interpréteur de commandes initial "
+"(« login shell ») produira un message d'erreur."
+
+#: login.1.xml:140(para)
+msgid ""
+"The user is then prompted for a password, where appropriate. Echoing is "
+"disabled to prevent revealing the password. Only a small number of password "
+"failures are permitted before <command>login</command> exits and the "
+"communications link is severed."
+msgstr ""
+"Un mot de passe est ensuite demandé à l'utilisateur. L'affichage du mot de "
+"passe est désactivé pour éviter de révéler le mot de passe. Seul un petit "
+"nombre d'échecs est permis avant que <command>login</command> ne quitte et "
+"que la liaison ne soit interrompue."
+
+#: login.1.xml:147(para)
+msgid ""
+"If password aging has been enabled for your account, you may be prompted for "
+"a new password before proceeding. You will be forced to provide your old "
+"password and the new password before continuing. Please refer to "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> for more information."
+msgstr ""
+"Si une date de fin de validité du mot de passe a été définie pour ce compte, "
+"un nouveau mot de passe pourra vous être demandé. Votre ancien mot de passe "
+"et votre nouveau mot de passe vous seront alors demandés avant de pouvoir "
+"continuer. Veuillez lire la page de manuel "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> pour plus d'informations."
+
+#: login.1.xml:156(para)
+msgid ""
+"After a successful login, you will be informed of any system messages and "
+"the presence of mail. You may turn off the printing of the system message "
+"file, <filename>/etc/motd</filename>, by creating a zero-length file "
+"<filename>.hushlogin</filename> in your login directory. The mail message "
+"will be one of \"<emphasis>You have new mail.</emphasis>\", \"<emphasis>You "
+"have mail.</emphasis>\", or \"<emphasis>No Mail.</emphasis>\" according to "
+"the condition of your mailbox."
+msgstr ""
+"Après une connexion réussie, vous serez informé des messages du système et "
+"de la présence de courrier. Vous pouvez désactiver l'affichage du message du "
+"système (<filename>/etc/motd</filename>), en créant un fichier vide "
+"<filename>.hushlogin</filename> dans le répertoire de votre compte. Le "
+"message concernant les courriers sera « <emphasis>You have new mail.</"
+"emphasis> », « <emphasis>You have mail.</emphasis> », ou « <emphasis>No Mail."
+"</emphasis> » suivant l'état de votre boîte aux lettres."
+
+#: login.1.xml:167(para)
+msgid ""
+"Your user and group ID will be set according to their values in the "
+"<filename>/etc/passwd</filename> file. The value for <envar>$HOME</envar>, "
+"<envar>$SHELL</envar>, <envar>$PATH</envar>, <envar>$LOGNAME</envar>, and "
+"<envar>$MAIL</envar> are set according to the appropriate fields in the "
+"password entry. Ulimit, umask and nice values may also be set according to "
+"entries in the GECOS field."
+msgstr ""
+"Vos identifiants d'utilisateur et de groupe seront définis en fonction des "
+"valeurs spécifiées dans le fichier <filename>/etc/passwd</filename>. Les "
+"valeurs des variables d'environnement <emphasis>$HOME</emphasis>, <emphasis>"
+"$SHELL</emphasis>, <emphasis>$PATH</emphasis>, <emphasis>$LOGNAME</"
+"emphasis>, et <emphasis>$MAIL</emphasis> seront définies en fonction des "
+"champs appropriés de l'entrée qui vous correspond. Les valeurs d'ulimit, "
+"d'umask et de nice pourront également être affectées en fonction des entrées "
+"du champ GECOS."
+
+#: login.1.xml:176(para)
+msgid ""
+"On some installations, the environmental variable <envar>$TERM</envar> will "
+"be initialized to the terminal type on your tty line, as specified in "
+"<filename>/etc/ttytype</filename>."
+msgstr ""
+"Sur certains systèmes, la variable d'environnement <emphasis>$TERM</"
+"emphasis> sera initialisée au type de terminal de votre tty, comme spécifié "
+"dans <filename>/etc/ttytype</filename>."
+
+#: login.1.xml:182(para)
+msgid ""
+"An initialization script for your command interpreter may also be executed. "
+"Please see the appropriate manual section for more information on this "
+"function."
+msgstr ""
+"Un script d'initialisation pour votre interpréteur de commandes pourra "
+"également être exécuté. Veuillez vous référer à la section de manuel "
+"appropriée pour plus d'informations sur cette fonctionnalité."
+
+#: login.1.xml:194(para) login.1.xml:270(para)
+msgid ""
+"The <command>login</command> program is NOT responsible for removing users "
+"from the utmp file. It is the responsibility of "
+"<citerefentry><refentrytitle>getty</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry> and <citerefentry><refentrytitle>init</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry> to clean up apparent "
+"ownership of a terminal session. If you use <command>login</command> from "
+"the shell prompt without <command>exec</command>, the user you use will "
+"continue to appear to be logged in even after you log out of the \"subsession"
+"\"."
+msgstr ""
+"Le programme <command>login</command> n'est PAS responsable de la "
+"suppression d'utilisateurs dans le fichier utmp. Les responsables du "
+"nettoyage de l'appartenance des sessions de terminal sont "
+"<citerefentry><refentrytitle>getty</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry> et <citerefentry><refentrytitle>init</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>. Si vous utilisez "
+"<command>login</command> depuis un interpréteur de commandes sans "
+"<command>exec</command>, l'utilisateur que vous utilisez continuera à "
+"apparaître comme étant connecté même après s'être déconnecté de cette « sous-"
+"session »."
+
+#: login.1.xml:217(para)
+msgid "Do not perform authentication, user is preauthenticated."
+msgstr "Ne pas réaliser d'authentification. L'utilisateur est pré-authentifié."
+
+#: login.1.xml:220(para)
+msgid "Note: In that case, <replaceable>username</replaceable> is mandatory."
+msgstr ""
+"Remarque : Dans ce cas, <replaceable>username</replaceable> est nécessaire."
+
+#: login.1.xml:228(option)
+msgid "-h"
+msgstr "-h"
+
+#: login.1.xml:231(para)
+msgid "Name of the remote host for this login."
+msgstr "Nom de l'hôte distant pour cette connexion."
+
+#: login.1.xml:239(para)
+msgid "Preserve environment."
+msgstr "Préserver l'environnement."
+
+#: login.1.xml:244(option)
+msgid "-r"
+msgstr "-r"
+
+#: login.1.xml:247(para)
+msgid "Perform autologin protocol for rlogin."
+msgstr ""
+"Exécuter le protocole de connexion automatique (autologin) pour rlogin."
+
+#: login.1.xml:252(para)
+msgid ""
+"The <option>-r</option>, <option>-h</option> and <option>-f</option> options "
+"are only used when <command>login</command> is invoked by root."
+msgstr ""
+"Les options <option>-r</option>, <option>-h</option> et <option>-f</option> "
+"ne peuvent être utilisées que par root."
+
+#: login.1.xml:261(para)
+msgid ""
+"This version of <command>login</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+"Cette version de <command>login</command> comporte de nombreuses options de "
+"compilation. Seules certaines d'entre elles peuvent avoir été activées sur "
+"votre site."
+
+#: login.1.xml:266(para)
+msgid ""
+"The location of files is subject to differences in system configuration."
+msgstr ""
+"L'emplacement des fichiers peut varier suivant la configuration du système."
+
+#: login.1.xml:282(para)
+msgid ""
+"As with any program, <command>login</command>'s appearance can be faked. If "
+"non-trusted users have physical access to a machine, an attacker could use "
+"this to obtain the password of the next person coming to sit in front of the "
+"machine. Under Linux, the SAK mechanism can be used by users to initiate a "
+"trusted path and prevent this kind of attack."
+msgstr ""
+"Comme pour n'importe quel programme, l'apparence de <command>login</command> "
+"peut être imitée. Si des utilisateurs non sûrs ont un accès physique à la "
+"machine, un attaquant pourrait utiliser cet accès pour obtenir le mot de "
+"passe de la personne qui s'assiérait ensuite face à l'écran. Sous Linux, le "
+"mécanisme SAK peut être utilisé par les utilisateurs pour initier un chemin "
+"de confiance et prévenir ce genre d'attaques."
+
+#: login.1.xml:347(filename)
+msgid "/var/log/wtmp"
+msgstr "/var/log/wtmp"
+
+#: login.1.xml:349(para)
+msgid "List of previous login sessions."
+msgstr "Liste des sessions de connexion précédentes."
+
+#: login.1.xml:365(filename)
+msgid "/etc/motd"
+msgstr "/etc/motd"
+
+#: login.1.xml:367(para)
+msgid "System message of the day file."
+msgstr "Fichier contenant le message du système."
+
+#: login.1.xml:371(filename)
+msgid "/etc/nologin"
+msgstr "/etc/nologin"
+
+#: login.1.xml:373(para)
+msgid "Prevent non-root users from logging in."
+msgstr "Empêcher les utilisateurs non-root de se connecter."
+
+#: login.1.xml:377(filename)
+msgid "/etc/ttytype"
+msgstr "/etc/ttytype"
+
+#: login.1.xml:379(para)
+msgid "List of terminal types."
+msgstr "Liste des types de terminaux."
+
+#: login.1.xml:383(filename)
+msgid "$HOME/.hushlogin"
+msgstr "$HOME/.hushlogin"
+
+#: login.1.xml:385(para)
+msgid "Suppress printing of system messages."
+msgstr "Supprimer l'affichage des messages du système."
+
+#: login.1.xml:399(para)
+msgid ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: limits.5.xml:41(firstname)
+msgid "Luca"
+msgstr "Luca"
+
+#: limits.5.xml:42(surname)
+msgid "Berra"
+msgstr "Berra"
+
+#: limits.5.xml:59(refentrytitle) limits.5.xml:66(refname)
+msgid "limits"
+msgstr "limits"
+
+#: limits.5.xml:67(refpurpose)
+msgid "resource limits definition"
+msgstr "définition des limites de ressources"
+
+#: limits.5.xml:73(para)
+msgid ""
+"The <emphasis remap=\"I\">limits</emphasis> file (<filename>/etc/limits</"
+"filename> by default or LIMITS_FILE defined <filename>config.h</filename>) "
+"describes the resource limits you wish to impose. It should be owned by root "
+"and readable by root account only."
+msgstr ""
+"Le fichier <emphasis remap=\"I\">limits</emphasis> (<filename>/etc/limits</"
+"filename> par défaut ou LIMITS_FILE définit dans <filename>config.h</"
+"filename>) décrit les limites de ressource que vous voulez imposer. Il doit "
+"être possédé et ne doit être lisible que par le compte root."
+
+#: limits.5.xml:81(para)
+msgid ""
+"By default no quota is imposed on 'root'. In fact, there is no way to impose "
+"limits via this procedure to root-equiv accounts (accounts with UID 0)."
+msgstr ""
+"Par défaut, aucun quota (aucune limite) n'est imposé à « root ». En fait, il "
+"n'est pas possible d'imposer de cette façon de limite aux comptes root ou "
+"équivalents (comptes ayant un UID de 0)."
+
+#: limits.5.xml:87(para)
+msgid "Each line describes a limit for a user in the form:"
+msgstr ""
+"Chaque ligne décrit une limite pour un utilisateur, elle est de la forme "
+"suivante :"
+
+#: limits.5.xml:90(emphasis)
+msgid "user LIMITS_STRING"
+msgstr "utilisateur LISTE_DE_LIMITES"
+
+#: limits.5.xml:93(para)
+msgid "or in the form:"
+msgstr "ou sous la forme :"
+
+#: limits.5.xml:96(emphasis)
+msgid "@group LIMITS_STRING"
+msgstr "@groupe LISTE_DE_LIMITES"
+
+#: limits.5.xml:99(para)
+msgid ""
+"The <emphasis>LIMITS_STRING</emphasis> is a string of a concatenated list of "
+"resource limits. Each limit consists of a letter identifier followed by a "
+"numerical limit."
+msgstr ""
+"Où <emphasis>LISTE_DE_LIMITES</emphasis> est une chaîne construite par la "
+"concaténation d'une liste de limites de ressource. Chaque limite consiste en "
+"une lettre (identifiant le type de limite) et une valeur numérique."
+
+#: limits.5.xml:105(para)
+msgid "The valid identifiers are:"
+msgstr "Les identifiants possibles sont :"
+
+#: limits.5.xml:108(para)
+msgid "A: max address space (KB)"
+msgstr "A : espace d'adressage maximal (en kilo octets)"
+
+#: limits.5.xml:109(para)
+msgid "C: max core file size (KB)"
+msgstr ""
+"C : taille maximale d'un fichier image de la mémoire (« core », en kilo "
+"octets)"
+
+#: limits.5.xml:110(para)
+msgid "D: max data size (KB)"
+msgstr ""
+"D : taille maximale du segment de données d'un programme (en kilo octets)"
+
+#: limits.5.xml:111(para)
+msgid "F: maximum file size (KB)"
+msgstr "F : taille maximale des fichiers (en kilo octets)"
+
+#: limits.5.xml:112(para)
+msgid ""
+"K: file creation mask, set by <citerefentry><refentrytitle>umask</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"K : masque de création de fichier, défini par "
+"<citerefentry><refentrytitle>umask</refentrytitle><manvolnum>2</manvolnum></"
+"citerefentry>."
+
+#: limits.5.xml:117(para)
+msgid "I: max nice value (0..39 which translates to 20..-19)"
+msgstr "I : valeur nice maximum (0..39 qui sera traduit en 20..-19)"
+
+#: limits.5.xml:119(para)
+msgid "L: max number of logins for this user"
+msgstr "L : nombre maximal de connexions simultanées pour cet utilisateur"
+
+#: limits.5.xml:120(para)
+msgid "M: max locked-in-memory address space (KB)"
+msgstr ""
+"M : taille maximale de mémoire verrouillée (« locked-in-memory », en kilo "
+"octets)"
+
+#: limits.5.xml:121(para)
+msgid "N: max number of open files"
+msgstr "N : nombre maximal de fichiers ouverts"
+
+#: limits.5.xml:122(para)
+msgid "O: max real time priority"
+msgstr "O : priorité temps réel maximale"
+
+#: limits.5.xml:123(para)
+msgid ""
+"P: process priority, set by <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"P : priorité des processus, défini par "
+"<citerefentry><refentrytitle>setpriority</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+
+#: limits.5.xml:128(para)
+msgid "R: max resident set size (KB)"
+msgstr ""
+"R : taille maximale de la mémoire résidente (« resident set size », en kilo "
+"octets)"
+
+#: limits.5.xml:129(para)
+msgid "S: max stack size (KB)"
+msgstr "S : taille maximale de la pile (en kilo octets)"
+
+#: limits.5.xml:130(para)
+msgid "T: max CPU time (MIN)"
+msgstr "T : temps processeur maximal consommé (en minutes)"
+
+#: limits.5.xml:131(para)
+msgid "U: max number of processes"
+msgstr "U : nombre maximal de processus"
+
+#: limits.5.xml:134(para)
+msgid ""
+"For example, <emphasis remap=\"I\">L2D2048N5</emphasis> is a valid "
+"<emphasis>LIMITS_STRING</emphasis>. For reading convenience, the following "
+"entries are equivalent:"
+msgstr ""
+"Par exemple, <emphasis remap=\"I\">L2D2048N5</emphasis> est une chaîne "
+"<emphasis>LISTE_DE_LIMITES</emphasis> valable. Pour faciliter la lecture, "
+"les entrées suivantes sont équivalentes :"
+
+# NOTE: elle va pas cette chaîne
+#: limits.5.xml:140(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+" username L2D2048N5\n"
+" username L2 D2048 N5\n"
+" "
+msgstr ""
+"\n"
+" utilisateur L2D2048N5\n"
+" utilisateur L2 D2048 N5\n"
+" "
+
+#: limits.5.xml:145(para)
+msgid ""
+"Be aware that after <emphasis remap=\"I\">username</emphasis> the rest of "
+"the line is considered a limit string, thus comments are not allowed. An "
+"invalid limits string will be rejected (not considered) by the "
+"<command>login</command> program."
+msgstr ""
+"Attention : tout ce qui suit <emphasis remap=\"I\">utilisateur</emphasis> "
+"est considéré comme une limite de chaîne. Les commentaires ne sont pas "
+"autorisés. Une chaîne de limites non valable sera rejetée (non utilisée) par "
+"le programme <command>login</command>."
+
+#: limits.5.xml:152(para)
+msgid ""
+"The default entry is denoted by username \"<emphasis>*</emphasis>\". If you "
+"have multiple <emphasis remap=\"I\">default</emphasis> entries in your "
+"<emphasis>LIMITS_FILE</emphasis>, then the last one will be used as the "
+"default entry."
+msgstr ""
+"L'entrée par défaut est représentée par un utilisateur dénommé "
+"« <emphasis>*</emphasis> ». Si plusieurs entrées par défaut sont présentes "
+"dans le fichier de limites, alors seule la dernière sera prise en compte."
+
+#: limits.5.xml:159(para)
+msgid ""
+"The limits specified in the form \"<replaceable>@group</replaceable>\" apply "
+"to the members of the specified <replaceable>group</replaceable>."
+msgstr ""
+"Les limites précisées sous la forme « <replaceable>@groupe</replaceable> » "
+"s'appliquent aux membres du <replaceable>groupe</replaceable> précisé."
+
+#: limits.5.xml:165(para)
+msgid ""
+"If more than one line with limits for a user exist, only the first line for "
+"this user will be considered."
+msgstr ""
+"Si plusieurs lignes avec des limites pour un utilisateur existent, seule la "
+"première ligne pour cet utilisateur sera prise en compte."
+
+#: limits.5.xml:170(para)
+msgid ""
+"If no lines are specified for a user, the last <replaceable>@group</"
+"replaceable> line matching a group whose the user is a member of will be "
+"considered, or the last line with default limits if no groups contain the "
+"user."
+msgstr ""
+"Si aucune ligne n'est précisée pour l'utilisateur, la dernière ligne "
+"<replaceable>@group</replaceable> correspondant à un groupe auquel "
+"l'utilisateur appartient sera prise en compte, ou la dernière ligne avec les "
+"limites par défaut si aucun groupe ne contient l'utilisateur."
+
+#: limits.5.xml:177(para)
+msgid ""
+"To completely disable limits for a user, a single dash \"<emphasis>-</"
+"emphasis>\" will do."
+msgstr ""
+"Un simple tiret « <emphasis>-</emphasis> » sera suffisant pour désactiver "
+"toute limite à un utilisateur, "
+
+#: limits.5.xml:182(para)
+msgid ""
+"To disable a limit for a user, a single dash \"<replaceable>-</replaceable>"
+"\" can be used instead of the numerical value for this limit."
+msgstr ""
+"Afin de désactiver une limite pour un utilisateur, un simple tiret "
+"« <replaceable>-</replaceable> » peut être utilisé au lieu d'une valeur "
+"numérique pour cette limite."
+
+#: limits.5.xml:188(para)
+msgid ""
+"Also, please note that all limit settings are set PER LOGIN. They are not "
+"global, nor are they permanent. Perhaps global limits will come, but for now "
+"this will have to do ;)"
+msgstr ""
+"Notez également que les limites ne sont configurées que PAR CONNEXION. Il "
+"n'y a pas de limite globale ou permanente. Des limites globales pourraient "
+"voir le jour, mais pour l'instant, il faut faire sans."
+
+#: limits.5.xml:199(filename)
+msgid "/etc/limits"
+msgstr "/etc/limits"
+
+#: limits.5.xml:207(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+
+#: lastlog.8.xml:67(refpurpose)
+msgid "reports the most recent login of all users or of a given user"
+msgstr ""
+"signaler les connexions les plus récentes de tous les utilisateurs ou d'un "
+"utilisateur donné"
+
+#: lastlog.8.xml:81(para)
+msgid ""
+"<command>lastlog</command> formats and prints the contents of the last login "
+"log <filename>/var/log/lastlog</filename> file. The <emphasis>login-name</"
+"emphasis>, <emphasis>port</emphasis>, and <emphasis>last login time</"
+"emphasis> will be printed. The default (no flags) causes lastlog entries to "
+"be printed, sorted by their order in <filename>/etc/passwd</filename>."
+msgstr ""
+"<command>lastlog</command> affiche le contenu du journal des dernières "
+"connexions (<filename>/var/log/lastlog</filename>). Les champs "
+"<emphasis>Utilisateur</emphasis>, <emphasis>Port</emphasis>, date de "
+"<emphasis>Dernière</emphasis> connexion sont affichés. Par défaut (aucune "
+"option de spécifiée), les entrées de lastlog sont affichées triées par ordre "
+"d'apparition dans <filename>/etc/passwd</filename>."
+
+#: lastlog.8.xml:93(para)
+msgid "The options which apply to the <command>lastlog</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>lastlog</command> sont :"
+
+#: lastlog.8.xml:98(term)
+msgid ""
+"<option>-b</option>, <option>--before</option>&nbsp;<replaceable>DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-b</option>, <option>--before</option>&nbsp;<replaceable>JOURS</"
+"replaceable>"
+
+#: lastlog.8.xml:102(para)
+msgid ""
+"Print only lastlog records older than <emphasis remap=\"I\">DAYS</emphasis>."
+msgstr ""
+"N'afficher que les entrées du fichier lastlog plus anciennes que <emphasis "
+"remap=\"I\">JOURS</emphasis>."
+
+#: lastlog.8.xml:108(term)
+msgid "<option>-C</option>, <option>--clear</option>"
+msgstr "<option>-C</option>, <option>--clear</option>"
+
+#: lastlog.8.xml:112(para)
+msgid ""
+"Clear lastlog record of a user. This option can be used only together with "
+"<option>-u</option> (<option>--user</option>))."
+msgstr ""
+"Vide l'enregistrement laslog d'un utilisateur. Vous ne pouvez utiliser cette "
+"option qu'en association avec les options <option>-u</option> (<option>--"
+"user</option>)."
+
+#: lastlog.8.xml:139(term)
+msgid "<option>-S</option>, <option>--set</option>"
+msgstr "<option>-S</option>, <option>--set</option>"
+
+#: lastlog.8.xml:143(para)
+msgid ""
+"Set lastlog record of a user to the current time. This option can be used "
+"only together with <option>-u</option> (<option>--user</option>))."
+msgstr ""
+"Définit l'enregistrement lastlog d'un utilisateur (sa dernière connexion) à "
+"l'heure actuelle. Cette option ne peut être utilisée que combinée à <option>-"
+"u</option> (<option>--user</option>)."
+
+#: lastlog.8.xml:150(term) faillog.8.xml:192(term)
+msgid ""
+"<option>-t</option>, <option>--time</option>&nbsp;<replaceable>DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option>&nbsp;<replaceable>JOURS</"
+"replaceable>"
+
+#: lastlog.8.xml:154(para)
+msgid ""
+"Print the lastlog records more recent than <emphasis remap=\"I\">DAYS</"
+"emphasis>."
+msgstr ""
+"Afficher les entrées du fichier lastlog plus récentes que <emphasis remap=\"I"
+"\">JOURS</emphasis>."
+
+#: lastlog.8.xml:161(term) faillog.8.xml:202(term)
+msgid ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+"replaceable>|<replaceable>RANGE</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+"replaceable>|<replaceable>INTERVALLE</replaceable>"
+
+#: lastlog.8.xml:165(para)
+msgid "Print the lastlog record of the specified user(s)."
+msgstr "N'afficher que les entrées correspondant aux utilisateurs indiqués."
+
+#: lastlog.8.xml:168(para) faillog.8.xml:211(para)
+msgid ""
+"The users can be specified by a login name, a numerical user ID, or a "
+"<replaceable>RANGE</replaceable> of users. This <replaceable>RANGE</"
+"replaceable> of users can be specified with a min and max values "
+"(<replaceable>UID_MIN-UID_MAX</replaceable>), a max value (<replaceable>-"
+"UID_MAX</replaceable>), or a min value (<replaceable>UID_MIN-</replaceable>)."
+msgstr ""
+"Les utilisateurs peuvent être précisés par un nom de connexion, un "
+"identifiant numérique d'utilisateur ou un <replaceable>INTERVALLE</"
+"replaceable> d'utilisateurs. Cet <replaceable>INTERVALLE</replaceable> "
+"d'utilisateurs peut être précisé avec des valeurs minimale et maximale "
+"(<replaceable>UID_MIN-UID_MAX</replaceable>), seulement une valeur maximale "
+"(<replaceable>-UID_MAX</replaceable>) ou une valeur minimale "
+"(<replaceable>UID_MIN-</replaceable>)."
+
+#: lastlog.8.xml:180(para)
+msgid ""
+"If the user has never logged in the message <emphasis>** Never logged in**</"
+"emphasis> will be displayed instead of the port and time."
+msgstr ""
+"Dans le cas où l'utilisateur ne s'est jamais connecté, le message "
+"« <emphasis>**Never logged in**</emphasis> » (« <emphasis>**Jamais "
+"connecté**</emphasis> ») est affiché à la place des champs <emphasis>Port</"
+"emphasis> et date de <emphasis>Dernière</emphasis> connexion."
+
+#: lastlog.8.xml:185(para)
+msgid ""
+"Only the entries for the current users of the system will be displayed. "
+"Other entries may exist for users that were deleted previously."
+msgstr ""
+"Seules les entrées pour les utilisateurs actuels du système seront "
+"affichées. D'autres entrées peuvent exister pour les utilisateurs supprimés "
+"précédemment."
+
+#: lastlog.8.xml:193(title) groups.1.xml:90(title) chsh.1.xml:140(title)
+#: chage.1.xml:237(title)
+msgid "NOTE"
+msgstr "NOTE"
+
+#: lastlog.8.xml:194(para)
+msgid ""
+"The <filename>lastlog</filename> file is a database which contains info on "
+"the last login of each user. You should not rotate it. It is a sparse file, "
+"so its size on the disk is usually much smaller than the one shown by "
+"\"<command>ls -l</command>\" (which can indicate a really big file if you "
+"have in <filename>passwd</filename> users with a high UID). You can display "
+"its real size with \"<command>ls -s</command>\"."
+msgstr ""
+"Le fichier <filename>lastlog</filename> est une base de données qui contient "
+"des informations concernant la dernière connexion de chaque utilisateur. "
+"Vous n'avez pas à faire de rotation (avec <command>logrotate</command>) sur "
+"ce fichier. C'est un fichier « creux », donc sa taille sur le disque est "
+"bien plus petite que celle affichée par « <command>ls -l</command> » (qui "
+"peut indiquer un très gros fichier si vous avez des utilisateurs avec des "
+"UID élevés). Vous pouvez afficher sa taille réelle avec « <command>ls -s</"
+"command> »."
+
+#: lastlog.8.xml:220(filename)
+msgid "/var/log/lastlog"
+msgstr "/var/log/lastlog"
+
+#: lastlog.8.xml:222(para)
+msgid "Database times of previous user logins."
+msgstr ""
+"Base de données de l'heure des connexions précédentes des utilisateurs."
+
+#: lastlog.8.xml:230(para)
+msgid ""
+"Large gaps in UID numbers will cause the lastlog program to run longer with "
+"no output to the screen (i.e. if in lastlog database there is no entries for "
+"users with UID between 170 and 800 lastlog will appear to hang as it "
+"processes entries with UIDs 171-799)."
+msgstr ""
+"S'il y a des trous importants dans les valeurs des UID, <command>lastlog</"
+"command> s'exécutera plus lentement, sans affichage à l'écran (par exemple, "
+"s'il n'y a pas d'entrée pour les utilisateurs ayant un UID compris entre 170 "
+"et 800 dans base de données lastlog, le programme lastlog semblera bloqué "
+"comme s'il traitait les entrées correspondant aux UID 171 à 799)."
+
+#: gshadow.5.xml:41(contrib)
+msgid "Creation, 2005"
+msgstr "Création, 2005"
+
+#: gshadow.5.xml:46(refentrytitle) gshadow.5.xml:53(refname)
+msgid "gshadow"
+msgstr "gshadow"
+
+#: gshadow.5.xml:54(refpurpose)
+msgid "shadowed group file"
+msgstr "informations cachées sur les groupes"
+
+#: gshadow.5.xml:59(para)
+msgid ""
+"<filename>/etc/gshadow</filename> contains the shadowed information for "
+"group accounts."
+msgstr ""
+"<filename>/etc/gshadow</filename> contient les informations cachées sur les "
+"groupes."
+
+#: gshadow.5.xml:69(para)
+msgid "Each line of this file contains the following colon-separated fields:"
+msgstr ""
+"Chaque ligne de ce fichier contient les champs suivants, séparés par des "
+"deux-points (« : ») :"
+
+#: gshadow.5.xml:75(emphasis)
+msgid "group name"
+msgstr "nom du groupe"
+
+#: gshadow.5.xml:77(para)
+msgid "It must be a valid group name, which exist on the system."
+msgstr "Ce doit être un nom de groupe valable, qui existe sur le système."
+
+#: gshadow.5.xml:90(para)
+msgid ""
+"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 *, users will not be able to use a unix "
+"password to access the group (but group members do not need the password)."
+msgstr ""
+"Si le champ du mot de passe contient une chaîne qui ne peut pas être un "
+"résultat valable de <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, par exemple si elle "
+"contient les caractères « ! » ou « * », les utilisateurs ne pourront pas "
+"utiliser le mot de passe UNIX pour accéder au groupe (mais les membres du "
+"groupe n'ont pas besoin de mot de passe)."
+
+#: gshadow.5.xml:97(para)
+msgid ""
+"The password is used when a user who is not a member of the group wants to "
+"gain the permissions of this group (see <citerefentry><refentrytitle>newgrp</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>)."
+msgstr ""
+"Le mot de passe est utilisé quand un utilisateur non membre du groupe veut "
+"obtenir les permissions de ce groupe (consultez "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>)."
+
+#: gshadow.5.xml:103(para)
+msgid ""
+"This field may be empty, in which case only the group members can gain the "
+"group permissions."
+msgstr ""
+"Ce champ peut être vide. Dans ce cas seuls les membres du groupe peuvent "
+"obtenir les permissions du groupe."
+
+#: gshadow.5.xml:113(para)
+msgid ""
+"This password supersedes any password specified in <filename>/etc/group</"
+"filename>."
+msgstr ""
+"Ce mot de passe remplace tout mot de passe indiqué dans <filename>/etc/"
+"group</filename>."
+
+#: gshadow.5.xml:121(emphasis)
+msgid "administrators"
+msgstr "administrateurs"
+
+#: gshadow.5.xml:123(para) gshadow.5.xml:139(para)
+msgid "It must be a comma-separated list of user names."
+msgstr "Ce champ doit être une liste d'utilisateurs, séparés par des virgules."
+
+#: gshadow.5.xml:126(para)
+msgid "Administrators can change the password or the members of the group."
+msgstr ""
+"Les administrateurs peuvent modifier le mot de passe ou les membres du "
+"groupe."
+
+#: gshadow.5.xml:130(para)
+msgid ""
+"Administrators also have the same permissions as the members (see below)."
+msgstr ""
+"Les administrateurs peuvent aussi avoir les mêmes permissions que les "
+"membres (voir ci-dessous)."
+
+#: gshadow.5.xml:137(emphasis)
+msgid "members"
+msgstr "membres"
+
+#: gshadow.5.xml:142(para)
+msgid "Members can access the group without being prompted for a password."
+msgstr ""
+"Les membres peuvent accéder au groupe sans qu'un mot de passe ne leur soit "
+"demandé."
+
+#: gshadow.5.xml:146(para)
+msgid ""
+"You should use the same list of users as in <filename>/etc/group</filename>."
+msgstr ""
+"Vous devez utiliser la même liste d'utilisateurs que dans <filename>/etc/"
+"group</filename>."
+
+#: gshadow.5.xml:175(para)
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: grpck.8.xml:66(refpurpose)
+msgid "verify integrity of group files"
+msgstr "Vérifier l'intégrité des fichiers d'administration des groupes"
+
+#: grpck.8.xml:84(para)
+msgid ""
+"The <command>grpck</command> command verifies the integrity of the groups "
+"information. It checks that all entries in <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</"
+"filename></phrase> have the proper format and contain valid data. The user "
+"is prompted to delete entries that are improperly formatted or which have "
+"other uncorrectable errors."
+msgstr ""
+"La commande <command>grpck</command> vérifie l'intégrité des informations "
+"sur les groupes du système. Toutes les entrées de <filename>/etc/group</"
+"filename> <phrase condition=\"gshadow\"> et <filename>/etc/gshadow</"
+"filename></phrase> sont vérifiées afin de s'assurer qu'elles ont le bon "
+"format et qu'elles contiennent des données valables dans chaque champ. Une "
+"confirmation de l'utilisateur sera demandée pour détruire les entrées mal "
+"formatées ou ayant d'autres erreurs non récupérables."
+
+#: grpck.8.xml:101(para)
+msgid "a unique and valid group name"
+msgstr "unicité et validité des noms de groupe ;"
+
+#: grpck.8.xml:104(para)
+msgid ""
+"a valid group identifier <phrase condition=\"gshadow\"> (<filename>/etc/"
+"group</filename> only)</phrase>"
+msgstr ""
+"validité des identifiants de groupe <phrase condition=\"gshadow\"> "
+"(seulement <filename>/etc/group</filename>)</phrase> ;"
+
+#: grpck.8.xml:111(para)
+msgid ""
+"a valid list of members <phrase condition=\"gshadow\"> and administrators</"
+"phrase>"
+msgstr ""
+"validité de la liste de membres <phrase condition=\"gshadow\"> et "
+"d'administrateurs</phrase> ;"
+
+#: grpck.8.xml:117(para)
+msgid ""
+"a corresponding entry in the <filename>/etc/gshadow</filename> file "
+"(respectively <filename>/etc/group</filename> for the <filename>gshadow</"
+"filename> checks)"
+msgstr ""
+"correspondance d'entrée dans le fichier <filename>/etc/gshadow</filename> "
+"(respectivement <filename>/etc/group</filename> pour les vérifications de "
+"<filename>gshadow</filename>)."
+
+#: grpck.8.xml:125(para)
+msgid ""
+"The checks for correct number of fields and unique group name are fatal. If "
+"an entry has the wrong number of fields, the user will be prompted to delete "
+"the entire line. If the user does not answer affirmatively, all further "
+"checks are bypassed. An entry with a duplicated group name is prompted for "
+"deletion, but the remaining checks will still be made. All other errors are "
+"warnings and the user is encouraged to run the <command>groupmod</command> "
+"command to correct the error."
+msgstr ""
+"Une erreur dans le nombre de champs ou la non unicité d'un nom de groupe "
+"sera fatale. Si le nombre de champs n'est pas correct, il sera demandé à "
+"l'utilisateur de supprimer la ligne. Si l'utilisateur ne répond pas par "
+"l'affirmative, les vérifications suivantes ne seront pas effectuées. Il sera "
+"également demandé de supprimer les entrées correspondant aux noms de groupe "
+"redondants, mais dans ce cas, les autres vérifications seront effectuées. "
+"Toutes les autres erreurs ne sont que des avertissements et l'utilisateur "
+"est encouragé à utiliser <command>groupmod</command> pour les corriger."
+
+#: grpck.8.xml:136(para)
+msgid ""
+"The commands which operate on the <filename>/etc/group</filename><phrase "
+"condition=\"no_gshadow\">file</phrase><phrase condition=\"gshadow\">and "
+"<filename>/etc/gshadow</filename> files</phrase> are not able to alter "
+"corrupted or duplicated entries. <command>grpck</command> should be used in "
+"those circumstances to remove the offending entries."
+msgstr ""
+"Les commandes qui opèrent sur <phrase condition=\"no_gshadow\">le fichier</"
+"phrase> <phrase condition=\"gshadow\">les fichiers</phrase> <filename>/etc/"
+"group</filename> <phrase condition=\"gshadow\">et <filename>/etc/gshadow</"
+"filename></phrase> ne peuvent pas modifier les entrées corrompues ou "
+"redondantes. <command>grpck</command> doit être utilisée dans ce cas pour "
+"supprimer ces entrées."
+
+#: grpck.8.xml:152(para)
+msgid "The options which apply to the <command>grpck</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>grpck</command> sont :"
+
+#: grpck.8.xml:165(para)
+msgid ""
+"Execute the <command>grpck</command> command in read-only mode. This causes "
+"all questions regarding changes to be answered <emphasis>no</emphasis> "
+"without user intervention."
+msgstr ""
+"Exécute la commande <command>grpck</command> en mode lecture seule. Cela "
+"signifie qu'à toutes les questions concernant des modifications il sera "
+"répondu <emphasis>no</emphasis> sans l'intervention de l'utilisateur."
+
+#: grpck.8.xml:187(para)
+msgid ""
+"Sort entries in <filename>/etc/group</filename><phrase condition=\"gshadow"
+"\">and <filename>/etc/gshadow</filename></phrase> by GID."
+msgstr ""
+"Trie les entrées de <filename>/etc/group</filename> <phrase condition="
+"\"gshadow\">et <filename>/etc/gshadow</filename></phrase> par GID."
+
+#: grpck.8.xml:196(para)
+msgid ""
+"By default, <command>grpck</command> operates on <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</"
+"filename></phrase>. The user may select alternate files with the <emphasis "
+"remap=\"I\">group</emphasis><phrase condition=\"no_gshadow\">parameter.</"
+"phrase><phrase condition=\"gshadow\">and <emphasis remap=\"I\">shadow</"
+"emphasis> parameters.</phrase>"
+msgstr ""
+"Par défaut, <command>grpck</command> opère sur <filename>/etc/group</"
+"filename> <phrase condition=\"gshadow\">et <filename>/etc/gshadow</"
+"filename></phrase>. L'utilisateur peut préciser d'autres fichiers avec "
+"<phrase condition=\"no_gshadow\">le paramètre</phrase><phrase condition="
+"\"gshadow\">les paramètres</phrase> <emphasis remap=\"I\">group</emphasis> "
+"<phrase condition=\"gshadow\"> et <emphasis remap=\"I\">shadow</emphasis></"
+"phrase>."
+
+#: grpck.8.xml:264(para)
+msgid "one or more bad group entries"
+msgstr "une entrée de groupe ou plus est incorrecte"
+
+#: grpck.8.xml:270(para)
+msgid "can't open group files"
+msgstr "impossible d'ouvrir les fichiers group"
+
+#: grpck.8.xml:276(para)
+msgid "can't lock group files"
+msgstr "impossible de verrouiller les fichiers group"
+
+#: grpck.8.xml:282(para)
+msgid "can't update group files"
+msgstr "impossible de mettre à jour les fichiers group"
+
+#: grpck.8.xml:246(para)
+msgid ""
+"The <command>grpck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"La commande <command>grpck</command> renvoie les valeurs suivantes en "
+"quittant : <placeholder-1/>"
+
+#: grpck.8.xml:291(para)
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"gshadow\"><citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum>, </citerefentry>, </"
+"phrase><citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"gshadow\"><citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum>, </citerefentry>, </"
+"phrase><citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: groups.1.xml:57(refentrytitle) groups.1.xml:64(refname)
+#: groups.1.xml:70(command)
+msgid "groups"
+msgstr "groups"
+
+#: groups.1.xml:65(refpurpose)
+msgid "display current group names"
+msgstr "Afficher la liste des groupes auxquels appartient l'utilisateur"
+
+#: groups.1.xml:72(replaceable)
+msgid "user"
+msgstr "utilisateur"
+
+#: groups.1.xml:79(para)
+msgid ""
+"The <command>groups</command> command displays the current group names or ID "
+"values. If the value does not have a corresponding entry in <filename>/etc/"
+"group</filename>, the value will be displayed as the numerical group value. "
+"The optional <emphasis remap=\"I\">user</emphasis> parameter will display "
+"the groups for the named <emphasis remap=\"I\">user</emphasis>."
+msgstr ""
+"La commande <command>groups</command> affiche la liste des noms de groupe "
+"(ou leur identifiant numérique) de l'utilisateur courant. Si une valeur n'a "
+"pas d'entrée correspondante dans <filename>/etc/group</filename>, "
+"l'identifiant numérique du groupe est affiché. Le paramètre optionnel "
+"<emphasis remap=\"I\">utilisateur</emphasis> permet d'afficher la liste des "
+"groupes pour cet utilisateur."
+
+#: groups.1.xml:91(para)
+msgid ""
+"Systems which do not support concurrent group sets will have the information "
+"from <filename>/etc/group</filename> reported. The user must use "
+"<command>newgrp</command> or <command>sg</command> to change his current "
+"real and effective group ID."
+msgstr ""
+"Sur les systèmes qui ne gèrent pas l'appartenance à plusieurs groupes, "
+"seules les informations contenues dans <filename>/etc/group</filename> sont "
+"affichées. L'utilisateur doit utiliser <command>newgrp</command> ou "
+"<command>sg</command> pour modifier l'identifiant de groupe réel et effectif."
+
+#: groups.1.xml:113(para)
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+
+#: groupmod.8.xml:66(refpurpose)
+msgid "modify a group definition on the system"
+msgstr "Modifier la définition d'un groupe du système"
+
+#: groupmod.8.xml:75(replaceable) groupdel.8.xml:75(replaceable)
+msgid "GROUP"
+msgstr "GROUPE"
+
+#: groupmod.8.xml:81(para)
+msgid ""
+"The <command>groupmod</command> command modifies the definition of the "
+"specified <replaceable>GROUP</replaceable> by modifying the appropriate "
+"entry in the group database."
+msgstr ""
+"La commande <command>groupmod</command> modifie la définition du "
+"<replaceable>GROUPE</replaceable> spécifié en modifiant l'entrée "
+"correspondante de la base de données des groupes."
+
+#: groupmod.8.xml:90(para)
+msgid "The options which apply to the <command>groupmod</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>groupmod</command> sont :"
+
+#: groupmod.8.xml:96(term) groupadd.8.xml:114(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GID</"
+"replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GID</"
+"replaceable>"
+
+#: groupmod.8.xml:100(para)
+msgid ""
+"The group ID of the given <replaceable>GROUP</replaceable> will be changed "
+"to <replaceable>GID</replaceable>."
+msgstr ""
+"L'identifiant numérique du groupe <replaceable>GROUPE</replaceable> sera "
+"modifié vers <emphasis remap=\"I\">GID</emphasis>."
+
+#: groupmod.8.xml:104(para)
+msgid ""
+"The value of <replaceable>GID</replaceable> must be a non-negative decimal "
+"integer. This value must be unique, unless the <option>-o</option> option is "
+"used."
+msgstr ""
+"La valeur de <replaceable>GID</replaceable> doit être un nombre décimal "
+"positif. Cette valeur doit être unique, à moins que l'option <option>-o</"
+"option> ne soit utilisée."
+
+#: groupmod.8.xml:110(para)
+msgid ""
+"Users who use the group as primary group will be updated to keep the group "
+"as their primary group."
+msgstr ""
+"Les utilisateurs qui utilisent ce groupe comme groupe primaire seront mis à "
+"jour pour garder le groupe comme groupe primaire."
+
+#: groupmod.8.xml:114(para)
+msgid ""
+"Any files that have the old group ID and must continue to belong to "
+"<replaceable>GROUP</replaceable>, must have their group ID changed manually."
+msgstr ""
+"Vous devrez modifier vous-même l'identifiant de groupe des fichiers ayant "
+"l'ancien identifiant de groupe qui doivent continuer à appartenir au "
+"<replaceable>GROUPE</replaceable>."
+
+#: groupmod.8.xml:120(para)
+msgid ""
+"No checks will be performed with regard to the <option>GID_MIN</option>, "
+"<option>GID_MAX</option>, <option>SYS_GID_MIN</option>, or "
+"<option>SYS_GID_MAX</option> from <filename>/etc/login.defs</filename>."
+msgstr ""
+"Aucun contrôle ne sera effectué sur les valeurs de <option>GID_MIN</option>, "
+"<option>GID_MAX</option>, <option>SYS_GID_MIN</option>, ou "
+"<option>SYS_GID_MAX</option> du fichier <filename>/etc/login.defs</filename>."
+
+#: groupmod.8.xml:135(term)
+msgid ""
+"<option>-n</option>, <option>--new-name</option>&nbsp;"
+"<replaceable>NEW_GROUP</replaceable>"
+msgstr ""
+"<option>-n</option>, <option>--new-name</option>&nbsp;"
+"<replaceable>NOUVEAU_NOM_GROUPE</replaceable>"
+
+#: groupmod.8.xml:139(para)
+msgid ""
+"The name of the group will be changed from <replaceable>GROUP</replaceable> "
+"to <replaceable>NEW_GROUP</replaceable> name."
+msgstr ""
+"Le nom du groupe sera modifié de <emphasis remap=\"I\">GROUPE</emphasis> "
+"vers <emphasis remap=\"I\">NOUVEAU_NOM_GROUPE</emphasis>."
+
+#: groupmod.8.xml:150(para)
+msgid ""
+"When used with the <option>-g</option> option, allow to change the group "
+"<replaceable>GID</replaceable> to a non-unique value."
+msgstr ""
+"En combinaison avec l'option <option>-g</option>, cette option permet de "
+"changer l'identifiant du groupe (<replaceable>GID</replaceable>) vers une "
+"valeur déjà utilisée."
+
+#: groupmod.8.xml:259(para)
+msgid "E_SUCCESS: success"
+msgstr ""
+
+#: groupmod.8.xml:265(para)
+#, fuzzy
+#| msgid "invalid command syntax"
+msgid "E_USAGE: invalid command syntax"
+msgstr "erreur de syntaxe"
+
+#: groupmod.8.xml:271(para)
+#, fuzzy
+#| msgid "invalid argument to option"
+msgid "E_BAD_ARG: invalid argument to option"
+msgstr "paramètre non valable pour l'option"
+
+#: groupmod.8.xml:277(para)
+#, fuzzy
+#| msgid "specified group doesn't exist"
+msgid "E_GID_IN_USE: specified group doesn't exist"
+msgstr "le groupe spécifié n'existe pas"
+
+#: groupmod.8.xml:283(para)
+#, fuzzy
+#| msgid "specified group doesn't exist"
+msgid "E_NOTFOUND: specified group doesn't exist"
+msgstr "le groupe spécifié n'existe pas"
+
+#: groupmod.8.xml:289(para)
+#, fuzzy
+#| msgid "group name already in use"
+msgid "E_NAME_IN_USE: group name already in use"
+msgstr "nom de groupe déjà utilisé"
+
+#: groupmod.8.xml:295(para)
+#, fuzzy
+#| msgid "can't update group file"
+msgid "E_GRP_UPDATE: can't update group file"
+msgstr "impossible de mettre à jour le fichier des groupes"
+
+#: groupmod.8.xml:299(replaceable)
+#, fuzzy
+#| msgid "1"
+msgid "11"
+msgstr "1"
+
+#: groupmod.8.xml:301(para)
+msgid "E_CLEANUP_SERVICE: can't setup cleanup service"
+msgstr ""
+
+#: groupmod.8.xml:307(para)
+msgid "E_PAM_USERNAME: can't determine your username for use with pam"
+msgstr ""
+
+#: groupmod.8.xml:311(replaceable)
+#, fuzzy
+#| msgid "1"
+msgid "13"
+msgstr "1"
+
+#: groupmod.8.xml:313(para)
+msgid ""
+"E_PAM_ERROR: pam returned an error, see syslog facility id groupmod for the "
+"PAM error message"
+msgstr ""
+
+#: groupmod.8.xml:253(para)
+msgid ""
+"The <command>groupmod</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"La commande <command>groupmod</command> retourne les valeurs suivantes en "
+"quittant : <placeholder-1/>"
+
+#: groupmod.8.xml:322(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: groupmems.8.xml:42(firstname)
+msgid "George"
+msgstr "George"
+
+#: groupmems.8.xml:43(surname)
+msgid "Kraft"
+msgstr "Kraft"
+
+#: groupmems.8.xml:44(lineage)
+msgid "IV"
+msgstr "IV"
+
+#: groupmems.8.xml:45(contrib)
+msgid "Creation, 2000"
+msgstr "Création, 2000"
+
+#: groupmems.8.xml:69(refpurpose)
+msgid "administer members of a user's primary group"
+msgstr "Administrer les membres du groupe primaire d'un utilisateur"
+
+#: groupmems.8.xml:76(replaceable) groupmems.8.xml:77(replaceable)
+msgid "user_name"
+msgstr "nom_utilisateur"
+
+#: groupmems.8.xml:76(arg)
+msgid "-a <placeholder-1/>"
+msgstr "-a <placeholder-1/>"
+
+#: groupmems.8.xml:77(arg)
+msgid "-d <placeholder-1/>"
+msgstr "-d <placeholder-1/>"
+
+#: groupmems.8.xml:78(replaceable)
+msgid "group_name"
+msgstr "nom_groupe"
+
+#: groupmems.8.xml:78(arg)
+msgid "-g <placeholder-1/>"
+msgstr "-g <placeholder-1/>"
+
+#: groupmems.8.xml:79(arg)
+msgid "-l"
+msgstr "-l"
+
+#: groupmems.8.xml:86(para)
+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 ""
+"La commande <command>groupmems</command> permet à un utilisateur "
+"d'administrer la liste des membres de son propre groupe sans avoir les "
+"privilèges du superutilisateur. L'utilitaire <command>groupmems</command> a "
+"été conçu pour les systèmes qui mettent les utilisateurs dans des groupes "
+"primaires du même nom qu'il doivent pouvoir gérer (par exemple guest/guest)."
+
+#: groupmems.8.xml:94(para)
+msgid ""
+"Only the superuser, as administrator, can use <command>groupmems</command> "
+"to alter the memberships of other groups."
+msgstr ""
+"Seul le superutilisateur, en tant qu'administrateur, peut utiliser "
+"<command>groupmems</command> pour modifier la liste des membres d'un autre "
+"groupe."
+
+#: groupmems.8.xml:101(para)
+msgid ""
+"The options which apply to the <command>groupmems</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>groupmems</command> sont :"
+
+#: groupmems.8.xml:107(term)
+msgid ""
+"<option>-a</option>, <option>--add</option>&nbsp;<replaceable>user_name</"
+"replaceable>"
+msgstr ""
+"<option>-a</option>, <option>--add</option>&nbsp;"
+"<replaceable>nom_utilisateur</replaceable>"
+
+#: groupmems.8.xml:109(para)
+msgid "Add a user to the group membership list."
+msgstr "Ajouter un utilisateur à la liste des membres du groupe."
+
+#: groupmems.8.xml:110(para) groupmems.8.xml:126(para)
+#: groupmems.8.xml:157(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, and the group has no "
+"entry in the <filename>/etc/gshadow</filename> file, a new entry will be "
+"created."
+msgstr ""
+"Si le fichier <filename>/etc/gshadow</filename> existe, et que le groupe n'y "
+"a pas d'entrée, une nouvelle entrée sera créée."
+
+#: groupmems.8.xml:118(term)
+msgid ""
+"<option>-d</option>, <option>--delete</option>&nbsp;<replaceable>user_name</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--delete</option>&nbsp;"
+"<replaceable>nom_utilisateur</replaceable>"
+
+#: groupmems.8.xml:120(para)
+msgid "Delete a user from the group membership list."
+msgstr "Supprimer un utilisateur de la liste des membres du groupe."
+
+#: groupmems.8.xml:121(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, the user will be "
+"removed from the list of members and administrators of the group."
+msgstr ""
+"Si le fichier <filename>/etc/gshadow</filename> existe, l'utilisateur sera "
+"retiré de la liste des membres et des administrateurs du groupe."
+
+#: groupmems.8.xml:134(term)
+msgid ""
+"<option>-g</option>, <option>--group</option>&nbsp;<replaceable>group_name</"
+"replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--group</option>&nbsp;<replaceable>nom_groupe</"
+"replaceable>"
+
+#: groupmems.8.xml:136(para)
+msgid "The superuser can specify which group membership list to modify."
+msgstr ""
+"Le superutilisateur peut préciser la liste des membres du groupe à modifier."
+
+#: groupmems.8.xml:148(term) chage.1.xml:160(term)
+msgid "<option>-l</option>, <option>--list</option>"
+msgstr "<option>-l</option>, <option>--list</option>"
+
+#: groupmems.8.xml:150(para)
+msgid "List the group membership list."
+msgstr "Afficher la liste des membres du groupe."
+
+#: groupmems.8.xml:154(term)
+msgid "<option>-p</option>, <option>--purge</option>"
+msgstr "<option>-p</option>, <option>--purge</option>"
+
+#: groupmems.8.xml:156(para)
+msgid "Purge all users from the group membership list."
+msgstr "Supprimer tous les utilisateurs de la liste des membres du groupe."
+
+#: groupmems.8.xml:180(title)
+msgid "SETUP"
+msgstr "CONFIGURATION"
+
+#: groupmems.8.xml:181(para)
+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 ""
+"L'exécutable <command>groupmems</command> doit être installé en mode "
+"<literal>2710</literal> avec pour utilisateur <emphasis>root</emphasis> et "
+"pour groupe <emphasis>groups</emphasis>. L'administrateur système peut "
+"ajouter des utilisateurs au groupe <emphasis>groups</emphasis> pour leur "
+"permettre ou leur interdire d'utiliser <command>groupmems</command> pour "
+"gérer leur propre liste de membres du groupe."
+
+#: groupmems.8.xml:190(programlisting)
+#, no-wrap
+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 ""
+"\n"
+"\t$ groupadd -r groups\n"
+"\t$ chmod 2710 groupmems\n"
+"\t$ chown root.groups groupmems\n"
+"\t$ groupmems -g groups -a gk4\n"
+" "
+
+#: groupmems.8.xml:222(para)
+msgid "secure group account information"
+msgstr "informations cachées sur les groupes"
+
+#: groupmems.8.xml:230(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: groupdel.8.xml:66(refpurpose)
+msgid "delete a group"
+msgstr "Supprimer un groupe"
+
+#: groupdel.8.xml:81(para)
+msgid ""
+"The <command>groupdel</command> command modifies the system account files, "
+"deleting all entries that refer to <replaceable>GROUP</replaceable>. The "
+"named group must exist."
+msgstr ""
+"La commande <command>groupdel</command> modifie les fichiers "
+"d'administration des comptes du système, en supprimant les entrées qui se "
+"réfèrent à <replaceable>groupe</replaceable>. Le groupe indiqué doit exister."
+
+#: groupdel.8.xml:89(para)
+msgid "The options which apply to the <command>groupdel</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>groupdel</command> sont :"
+
+#: groupdel.8.xml:134(para)
+msgid ""
+"You may not remove the primary group of any existing user. You must remove "
+"the user before you remove the group."
+msgstr ""
+"Vous ne pouvez pas supprimer le groupe primaire d'un utilisateur existant. "
+"Vous devez supprimer l'utilisateur auparavant."
+
+#: groupdel.8.xml:138(para)
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this group."
+msgstr ""
+"Vous devriez vérifier vous-même qu'aucun fichier possédé par le groupe ne "
+"subsiste sur tous les systèmes de fichiers."
+
+#: groupdel.8.xml:200(para)
+msgid "can't remove user's primary group"
+msgstr "impossible de supprimer le groupe primaire d'un utilisateur existant"
+
+#: groupdel.8.xml:176(para)
+msgid ""
+"The <command>groupdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"La commande <command>groupdel</command> renvoie les valeurs suivantes en "
+"quittant : <placeholder-1/>"
+
+#: groupdel.8.xml:215(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: groupadd.8.xml:68(refpurpose)
+msgid "create a new group"
+msgstr "Créer un nouveau groupe"
+
+#: groupadd.8.xml:85(para)
+msgid ""
+"The <command>groupadd</command> command creates a new group account using "
+"the values specified on the command line plus the default values from the "
+"system. The new group will be entered into the system files as needed."
+msgstr ""
+"La commande <command>groupadd</command> crée un nouveau compte de groupe en "
+"utilisant les valeurs spécifiées sur la ligne de commande et les valeurs par "
+"défaut du système. Le nouveau groupe sera inséré dans les fichiers du "
+"système selon les besoins."
+
+#: groupadd.8.xml:94(para)
+msgid "The options which apply to the <command>groupadd</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>groupadd</command> sont :"
+
+#: groupadd.8.xml:104(para)
+msgid ""
+"This option causes the command to simply exit with success status if the "
+"specified group already exists. When used with <option>-g</option>, and the "
+"specified GID already exists, another (unique) GID is chosen (i.e. <option>-"
+"g</option> is turned off)."
+msgstr ""
+"Avec cette option, la commande quittera juste avec un état de succès si le "
+"groupe indiqué existe déjà. Avec l'option <option>-g</option>, si "
+"l'identifiant de groupe indiqué existe déjà, un autre identifiant de groupe "
+"(non utilisé) sera choisi (c.-à-d. que <option>-g</option> est désactivée)."
+
+#: groupadd.8.xml:118(para)
+msgid ""
+"The numerical value of the group's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than or equal to "
+"<option>GID_MIN</option> and greater than every other group."
+msgstr ""
+"La valeur numérique de l'identifiant du groupe (« group ID » ou GID). Cette "
+"valeur doit être unique, sauf si l'option <option>-o</option> est utilisée. "
+"La valeur ne doit pas être négative. Par défaut, le plus petit identifiant "
+"supérieur au <option>GID_MIN</option> et aux identifiants des groupes "
+"existants est utilisé."
+
+#: groupadd.8.xml:124(para)
+msgid ""
+"See also the <option>-r</option> option and the <option>GID_MAX</option> "
+"description."
+msgstr ""
+"Voir aussi aussi la description des options <option>-r</option> et "
+"<option>GID_MAX</option>."
+
+# NOTE: missing <filename>
+#: groupadd.8.xml:141(para)
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (GID_MIN, GID_MAX "
+"and others). Multiple <option>-K</option> options can be specified."
+msgstr ""
+"Surcharger les valeurs par défaut du fichier <filename>/etc/login.defs</"
+"filename> (GID_MIN, GID_MAX et autres). L'option <option>-K</option> peut "
+"être indiquée plusieurs fois."
+
+#: groupadd.8.xml:146(para)
+msgid ""
+"Example: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+"<replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+"Exemple : <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>10</replaceable>&nbsp;<option>-K</option>&nbsp;"
+"<replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+
+#: groupadd.8.xml:150(para)
+msgid ""
+"Note: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+"replaceable>=<replaceable>499</replaceable> doesn't work yet."
+msgstr ""
+"Remarque : <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+"replaceable>=<replaceable>499</replaceable> ne fonctionne pas pour l'instant."
+
+#: groupadd.8.xml:161(para)
+msgid "This option permits to add a group with a non-unique GID."
+msgstr ""
+"Cette option permet d'ajouter un groupe avec un identifiant (« GID ») déjà "
+"utilisé."
+
+#: groupadd.8.xml:192(para)
+msgid "Create a system group."
+msgstr "Créer un groupe système."
+
+#: groupadd.8.xml:195(para)
+msgid ""
+"The numeric identifiers of new system groups are chosen in the "
+"<option>SYS_GID_MIN</option>-<option>SYS_GID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>GID_MIN</option>-"
+"<option>GID_MAX</option>."
+msgstr ""
+"Les identifiants numériques des nouveaux groupes systèmes sont choisis dans "
+"l'intervalle <option>SYS_GID_MIN</option>-<option>SYS_GID_MAX</option>, "
+"défini dans <filename>login.defs</filename>, au lieu de <option>GID_MIN</"
+"option>-<option>GID_MAX</option>"
+
+#: groupadd.8.xml:275(para)
+msgid ""
+"Groupnames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+"Les noms de groupe doivent commencer par une lettre minuscule ou un tiret "
+"bas (« underscore »), et seuls des lettres minuscules, des chiffres, des "
+"« underscore », ou des tirets peuvent suivre. Ils peuvent se terminer par un "
+"signe dollar. Soit, sous la forme d'une expression rationnelle : [a-z_][a-"
+"z0-9_-]*[$]?"
+
+#: groupadd.8.xml:281(para)
+msgid "Groupnames may only be up to &GROUP_NAME_MAX_LENGTH; characters long."
+msgstr "Les noms de groupe sont limités à &GROUP_NAME_MAX_LENGTH; caractères."
+
+#: groupadd.8.xml:284(para)
+msgid ""
+"You may not add a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+"Vous ne pouvez pas ajouter d'utilisateur à un groupe NIS ou LDAP. Cela doit "
+"être effectué sur le serveur correspondant."
+
+#: groupadd.8.xml:288(para)
+msgid ""
+"If the groupname already exists in an external group database such as NIS or "
+"LDAP, <command>groupadd</command> will deny the group creation request."
+msgstr ""
+"Si le nom du groupe existe dans une base de données externe, telle que NIS "
+"ou LDAP, <command>groupadd</command> refusera de créer le groupe."
+
+#: groupadd.8.xml:321(para)
+msgid "GID not unique (when <option>-o</option> not used)"
+msgstr "GID déjà utilisé (et <option>-o</option> n'est pas utilisé)"
+
+#: groupadd.8.xml:327(para)
+msgid "group name not unique"
+msgstr "nom de groupe déjà utilisé"
+
+#: groupadd.8.xml:297(para)
+msgid ""
+"The <command>groupadd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"La commande <command>groupadd</command> retourne les valeurs suivantes en "
+"quittant : <placeholder-1/>"
+
+#: groupadd.8.xml:342(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: gpasswd.1.xml:44(firstname)
+msgid "Rafal"
+msgstr "rafal"
+
+#: gpasswd.1.xml:45(surname)
+msgid "Maszkowski"
+msgstr "Maszkowski"
+
+#: gpasswd.1.xml:71(phrase)
+msgid "administer <placeholder-1/>"
+msgstr "Administrer <placeholder-1/>"
+
+#: gpasswd.1.xml:74(phrase)
+msgid "administer <placeholder-1/> and <placeholder-2/>"
+msgstr "Administrer <placeholder-1/> et <placeholder-2/>"
+
+#: gpasswd.1.xml:85(replaceable) expiry.1.xml:76(replaceable)
+msgid "option"
+msgstr "option"
+
+#: gpasswd.1.xml:95(para)
+msgid ""
+"The <command>gpasswd</command> command is used to administer <filename>/etc/"
+"group</filename><phrase condition=\"gshadow\">, and <filename>/etc/gshadow</"
+"filename></phrase>. Every group can have <phrase condition=\"gshadow"
+"\">administrators,</phrase> members and a password."
+msgstr ""
+"La commande <command>gpasswd</command> est utilisée pour administrer "
+"<filename>/etc/group</filename><phrase condition=\"gshadow\"> et <filename>/"
+"etc/gshadow</filename></phrase>. Chaque groupe peut avoir <phrase condition="
+"\"gshadow\">des administrateurs,</phrase> des membres et un mot de passe."
+
+#: gpasswd.1.xml:103(para)
+msgid ""
+"System administrators can use the <option>-A</option> option to define group "
+"administrator(s) and the <option>-M</option> option to define members. They "
+"have all rights of group administrators and members."
+msgstr ""
+"Les administrateurs système peuvent utiliser l'option <option>-A</option> "
+"pour définir un ou des administrateurs de groupe et l'option <option>-M</"
+"option> pour définir les membres. Ils ont tous les droits des "
+"administrateurs et membres du groupe."
+
+#: gpasswd.1.xml:108(para)
+msgid ""
+"<command>gpasswd</command> called by <phrase condition=\"gshadow\">a group "
+"administrator</phrase><phrase condition=\"no_gshadow\">a system "
+"administrator</phrase> with a group name only prompts for the new password "
+"of the <replaceable>group</replaceable>."
+msgstr ""
+"<command>gpasswd</command> appelée par <phrase condition=\"gshadow\">un "
+"administrateur de groupe</phrase><phrase condition=\"no_gshadow\">un "
+"administrateur système</phrase> avec un nom de groupe demande seulement le "
+"nouveau mot de passe du <replaceable>groupe</replaceable>."
+
+#: gpasswd.1.xml:115(para)
+msgid ""
+"If a password is set the members can still use "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> without a password, and non-members must supply the password."
+msgstr ""
+"Si un mot de passe est configuré, les membres peuvent toujours utiliser "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> sans mot de passe. Les non membres doivent fournir le mot de "
+"passe."
+
+#: gpasswd.1.xml:123(title)
+msgid "Notes about group passwords"
+msgstr "Notes sur les mots de passe de groupe"
+
+#: gpasswd.1.xml:124(para)
+msgid ""
+"Group passwords are an inherent security problem since more than one person "
+"is permitted to know the password. However, groups are a useful tool for "
+"permitting co-operation between different users."
+msgstr ""
+"Les mots de passe de groupe représentent naturellement un risque en matière "
+"de sécurité, puisque plusieurs personnes ont connaissance du mot de passe. "
+"Cependant, les groupes sont utiles pour permettre la coopération entre "
+"différents utilisateurs."
+
+#: gpasswd.1.xml:135(para)
+msgid ""
+"Except for the <option>-A</option> and <option>-M</option> options, the "
+"options cannot be combined."
+msgstr ""
+"À part les options <option>-A</option> et <option>-M</option>, les options "
+"ne peuvent pas être combinées."
+
+#: gpasswd.1.xml:139(para)
+msgid "The options cannot be combined."
+msgstr "Les options ne peuvent pas être combinées."
+
+#: gpasswd.1.xml:142(para)
+msgid "The options which apply to the <command>gpasswd</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>gpasswd</command> sont :"
+
+#: gpasswd.1.xml:147(term)
+msgid ""
+"<option>-a</option>, <option>--add</option>&nbsp;<replaceable>user</"
+"replaceable>"
+msgstr ""
+"<option>-a</option>, <option>--add</option>&nbsp;<replaceable>utilisateur</"
+"replaceable>"
+
+#: gpasswd.1.xml:151(para)
+msgid ""
+"Add the <replaceable>user</replaceable> to the named <replaceable>group</"
+"replaceable>."
+msgstr ""
+"Ajouter l'<replaceable>utilisateur</replaceable> à ce <replaceable>groupe</"
+"replaceable>."
+
+#: gpasswd.1.xml:160(term)
+msgid ""
+"<option>-d</option>, <option>--delete</option>&nbsp;<replaceable>user</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--delete</option>&nbsp;"
+"<replaceable>utilisateur</replaceable>"
+
+#: gpasswd.1.xml:164(para)
+msgid ""
+"Remove the <replaceable>user</replaceable> from the named "
+"<replaceable>group</replaceable>."
+msgstr ""
+"Enlever l'<replaceable>utilisateur</replaceable> de ce <replaceable>groupe</"
+"replaceable>."
+
+#: gpasswd.1.xml:181(term)
+msgid ""
+"<option>-Q</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-Q</option>, <option>--root</option>&nbsp;<replaceable>RÉP_CHROOT</"
+"replaceable>"
+
+#: gpasswd.1.xml:195(term)
+msgid "<option>-r</option>, <option>--remove-password</option>"
+msgstr "<option>-r</option>, <option>--remove-password</option>"
+
+#: gpasswd.1.xml:199(para)
+msgid ""
+"Remove the password from the named <replaceable>group</replaceable>. The "
+"group password will be empty. Only group members will be allowed to use "
+"<command>newgrp</command> to join the named <replaceable>group</replaceable>."
+msgstr ""
+"Enlever le mot de passe pour ce <replaceable>groupe</replaceable>. Le mot de "
+"passe du groupe sera vide. Seuls les membres du groupe seront autorisés à "
+"utiliser <command>newgrp</command> pour rejoindre ce <replaceable>groupe</"
+"replaceable>."
+
+#: gpasswd.1.xml:211(term)
+msgid "<option>-R</option>, <option>--restrict</option>"
+msgstr "<option>-R</option>, <option>--restrict</option>"
+
+#: gpasswd.1.xml:215(para)
+msgid ""
+"Restrict the access to the named <replaceable>group</replaceable>. The group "
+"password is set to \"!\". Only group members with a password will be allowed "
+"to use <command>newgrp</command> to join the named <replaceable>group</"
+"replaceable>."
+msgstr ""
+"Restreindre l'accès à ce <replaceable>groupe</replaceable>. Le mot de passe "
+"du groupe est défini à « ! ». Seuls les membres du groupe seront autorisés à "
+"utiliser <command>newgrp</command> pour rejoindre ce <replaceable>groupe</"
+"replaceable>."
+
+#: gpasswd.1.xml:227(term)
+msgid ""
+"<option>-A</option>, <option>--administrators</option>&nbsp;"
+"<replaceable>user</replaceable>,..."
+msgstr ""
+"<option>-A</option>, <option>--administrators</option>&nbsp;"
+"<replaceable>utilisateur</replaceable>,..."
+
+#: gpasswd.1.xml:231(para)
+msgid "Set the list of administrative users."
+msgstr "Configurer la liste des administrateurs."
+
+#: gpasswd.1.xml:239(term)
+msgid ""
+"<option>-M</option>, <option>--members</option>&nbsp;<replaceable>user</"
+"replaceable>,..."
+msgstr ""
+"<option>-M</option>, <option>--members</option>&nbsp;"
+"<replaceable>utilisateur</replaceable>,..."
+
+#: gpasswd.1.xml:243(para)
+msgid "Set the list of group members."
+msgstr "Configurer la liste des membres du groupe."
+
+#: gpasswd.1.xml:253(para)
+msgid ""
+"This tool only operates on the <filename>/etc/group</filename><phrase "
+"condition=\"gshadow\"> and <filename>/etc/gshadow</filename> files.</"
+"phrase><phrase condition=\"no_gshadow\">file.</phrase> Thus you cannot "
+"change any NIS or LDAP group. This must be performed on the corresponding "
+"server."
+msgstr ""
+"Cet outil ne fonctionne que sur <phrase condition=\"no_gshadow\">le fichier</"
+"phrase><phrase condition=\"gshadow\">les fichiers</phrase> <filename>/etc/"
+"group</filename><phrase condition=\"gshadow\"> et <filename>/etc/gshadow</"
+"filename></phrase>. Par conséquent vous ne pouvez modifier aucun groupe NIS "
+"ou LDAP. Cela doit être effectué sur le serveur correspondant."
+
+#: gpasswd.1.xml:298(para)
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition="
+"\"gshadow\">, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition="
+"\"gshadow\">, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+
+#: faillog.8.xml:57(refentrytitle) faillog.8.xml:64(refname)
+#: faillog.8.xml:70(command) faillog.5.xml:57(refentrytitle)
+#: faillog.5.xml:64(refname) faillog.5.xml:111(refentrytitle)
+msgid "faillog"
+msgstr "faillog"
+
+#: faillog.8.xml:65(refpurpose)
+msgid "display faillog records or set login failure limits"
+msgstr ""
+"Examiner le fichier faillog, et configurer les limites d'échecs de connexion"
+
+#: faillog.8.xml:79(para)
+msgid ""
+"<command>faillog</command> displays the contents of the failure log database "
+"(<filename>/var/log/faillog</filename>). It can also set the failure "
+"counters and limits. When <command>faillog</command> is run without "
+"arguments, it only displays the faillog records of the users who had a login "
+"failure."
+msgstr ""
+"<command>faillog</command> affiche le contenu du journal des échecs de "
+"connexion (<filename>/var/log/faillog</filename>). Il peut aussi configurer "
+"le décompte et les limitations de ces échecs. Exécuter <command>faillog</"
+"command> sans argument n'affiche que la liste des échecs des utilisateurs "
+"qui ont déjà eu un échec de connexion."
+
+#: faillog.8.xml:90(para)
+msgid "The options which apply to the <command>faillog</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>faillog</command> sont :"
+
+#: faillog.8.xml:98(para)
+msgid ""
+"Display (or act on) faillog records for all users having an entry in the "
+"<filename>faillog</filename> database."
+msgstr ""
+"Afficher (ou agir sur) les enregistrements d'erreurs de connexion pour tous "
+"les utilisateurs ayant une entrée dans la base de données <filename>faillog</"
+"filename>."
+
+#: faillog.8.xml:102(para)
+msgid ""
+"The range of users can be restricted with the <option>-u</option> option."
+msgstr ""
+"La liste des utilisateurs peut être limitée avec l'option <option>-u</"
+"option>."
+
+#: faillog.8.xml:106(para)
+msgid ""
+"In display mode, this is still restricted to existing users but forces the "
+"display of the faillog entries even if they are empty."
+msgstr ""
+"En mode affichage, toujours limitée aux utilisateurs existants, mais "
+"l'affichage des entrées d'erreur de connexion est imposé même si elles sont "
+"vides."
+
+#: faillog.8.xml:111(para)
+msgid ""
+"With the <option>-l</option>, <option>-m</option>, <option>-r</option>, "
+"<option>-t</option> options, the users' records are changed, even if the "
+"user does not exist on the system. This is useful to reset records of users "
+"that have been deleted or to set a policy in advance for a range of users."
+msgstr ""
+"Avec les options <option>-l</option>, <option>-m</option>, <option>-r</"
+"option> ou <option>-t</option> les enregistrements des utilisateurs sont "
+"modifiés, même si l'utilisateur n'existe pas sur le système. C'est utile "
+"pour remettre à zéro les enregistrements des utilisateurs qui ont été "
+"supprimés ou pour mettre en place une politique préventive pour un ensemble "
+"d'utilisateurs."
+
+#: faillog.8.xml:128(term)
+msgid ""
+"<option>-l</option>, <option>--lock-secs</option>&nbsp;<replaceable>SEC</"
+"replaceable>"
+msgstr ""
+"<option>-l</option>, <option>--lock-secs</option>&nbsp;<replaceable>SEC</"
+"replaceable>"
+
+# NOTE: s/to/during/
+#: faillog.8.xml:132(para)
+msgid ""
+"Lock account for <replaceable>SEC</replaceable> seconds after failed login."
+msgstr ""
+"Verrouiller le compte pendant <replaceable>SEC</replaceable> secondes après "
+"un échec de connexion."
+
+#: faillog.8.xml:136(para) faillog.8.xml:161(para) faillog.8.xml:173(para)
+msgid ""
+"Write access to <filename>/var/log/faillog</filename> is required for this "
+"option."
+msgstr ""
+"L'accès en écriture sur <filename>/var/log/faillog</filename> est nécessaire "
+"pour cette option."
+
+#: faillog.8.xml:143(term)
+msgid ""
+"<option>-m</option>, <option>--maximum</option>&nbsp;<replaceable>MAX</"
+"replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--maximum</option>&nbsp;<replaceable>MAX</"
+"replaceable>"
+
+#: faillog.8.xml:147(para)
+msgid ""
+"Set the maximum number of login failures after the account is disabled to "
+"<replaceable>MAX</replaceable>."
+msgstr ""
+"Configurer le nombre maximum d'échecs de connexion après lequel le compte "
+"sera désactivé à <replaceable>MAX</replaceable>."
+
+#: faillog.8.xml:151(para)
+msgid ""
+"Selecting a <replaceable>MAX</replaceable> value of 0 has the effect of not "
+"placing a limit on the number of failed logins."
+msgstr ""
+"Sélectionner une valeur <replaceable>MAX</replaceable> de 0 a pour effet de "
+"ne placer aucune limite sur le nombre d'échecs de connexion."
+
+#: faillog.8.xml:156(para)
+msgid ""
+"The maximum failure count should always be 0 for <emphasis>root</emphasis> "
+"to prevent a denial of services attack against the system."
+msgstr ""
+"Le compteur d'erreurs maximum doit toujours être 0 pour <emphasis>root</"
+"emphasis> afin d'éviter les attaques de type déni de service sur le système."
+
+#: faillog.8.xml:168(term)
+msgid "<option>-r</option>, <option>--reset</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: faillog.8.xml:170(para)
+msgid "Reset the counters of login failures."
+msgstr "Remettre à zéro le compteur d'échecs de connexion."
+
+#: faillog.8.xml:195(para)
+msgid ""
+"Display faillog records more recent than <replaceable>DAYS</replaceable>."
+msgstr ""
+"Afficher les entrées de faillog plus récentes que <replaceable>JOURS</"
+"replaceable>."
+
+#: faillog.8.xml:206(para)
+msgid ""
+"Display faillog record or maintains failure counters and limits (if used "
+"with <option>-l</option>, <option>-m</option> or <option>-r</option> "
+"options) only for the specified user(s)."
+msgstr ""
+"Afficher l'entrée de faillog ou maintient le décompte et les limitations "
+"(suivant que l'option <option>-l</option>, <option>-m</option> ou <option>-"
+"r</option> est utilisée) seulement pour les utilisateurs indiqués."
+
+#: faillog.8.xml:224(para)
+msgid ""
+"When none of the <option>-l</option>, <option>-m</option>, or <option>-r</"
+"option> options are used, <command>faillog</command> displays the faillog "
+"record of the specified user(s)."
+msgstr ""
+"Quand aucune des options <option>-l</option>, <option>-m</option> ou "
+"<option>-r</option> n'est utilisée, <command>faillog</command> affiche "
+"l'enregistrement des échecs de connexion des utilisateurs précisés."
+
+#: faillog.8.xml:233(para)
+msgid ""
+"<command>faillog</command> only prints out users with no successful login "
+"since the last failure. To print out a user who has had a successful login "
+"since their last failure, you must explicitly request the user with the "
+"<option>-u</option> flag, or print out all users with the <option>-a</"
+"option> flag."
+msgstr ""
+"<command>faillog</command> n'affiche que les utilisateurs n'ayant pas eu de "
+"connexion réussie depuis leur dernier échec. Pour afficher un utilisateur "
+"ayant eu une connexion réussie depuis son dernier échec, vous devez "
+"explicitement demander cet utilisateur avec l'option <option>-u</option>, ou "
+"demander l'affichage de tous les utilisateurs avec l'option <option>-a</"
+"option>."
+
+#: faillog.8.xml:246(filename) faillog.5.xml:99(filename)
+msgid "/var/log/faillog"
+msgstr "/var/log/faillog"
+
+#: faillog.8.xml:248(para) faillog.5.xml:101(para)
+msgid "Failure logging file."
+msgstr "Journal des échecs de connexion."
+
+#: faillog.8.xml:256(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>faillog</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>faillog</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: faillog.5.xml:65(refpurpose)
+msgid "login failure logging file"
+msgstr "journal des échecs de connexion"
+
+#: faillog.5.xml:70(para)
+msgid ""
+"<filename>/var/log/faillog</filename> maintains a count of login failures "
+"and the limits for each account."
+msgstr ""
+"<filename>/var/log/faillog</filename> maintient un compte des échecs de "
+"connexion et les limites pour chaque compte."
+
+#: faillog.5.xml:74(para)
+msgid ""
+"The file contains fixed length records, indexed by numerical UID. Each "
+"record contains the count of login failures since the last successful login; "
+"the maximum number of failures before the account is disabled; the line on "
+"which the last login failure occurred; the date of the last login failure; "
+"and the duration (in seconds) during which the account will be locked after "
+"a failure."
+msgstr ""
+"Le fichier contient un nombre constant d'enregistrements, triés par "
+"identifiant d'utilisateur numérique. Chaque enregistrement contient le "
+"nombre d'échecs de connexion depuis la dernière connexion réussie, le nombre "
+"maximum d'échecs de connexion avant désactivation du compte, la ligne sur "
+"laquelle a eu lieu le dernier échec de connexion, la date du dernier échec "
+"de connexion et la durée (en seconde) pendant laquelle le compte sera "
+"verrouillé après un échec."
+
+#: faillog.5.xml:84(para)
+msgid "The structure of the file is:"
+msgstr "La structure du fichier est la suivante :"
+
+#: faillog.5.xml:85(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort fail_cnt;\n"
+"\tshort fail_max;\n"
+"\tchar fail_line[12];\n"
+"\ttime_t fail_time;\n"
+"\tlong fail_locktime;\n"
+"};"
+msgstr ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort fail_cnt; /* compteur des échecs */\n"
+"\tshort fail_max; /* nb max avant désactivation */\n"
+"\tchar fail_line[12]; /* ligne du dernier échec */\n"
+"\ttime_t fail_time; /* date du dernier échec */\n"
+"\tlong fail_locktime;};"
+
+#: expiry.1.xml:45(contrib) chsh.1.xml:44(contrib) chfn.1.xml:44(contrib)
+#: chage.1.xml:42(contrib)
+msgid "Creation, 1990"
+msgstr "Création, 1990"
+
+#: expiry.1.xml:61(refentrytitle) expiry.1.xml:68(refname)
+#: expiry.1.xml:74(command)
+msgid "expiry"
+msgstr "expiry"
+
+#: expiry.1.xml:69(refpurpose)
+msgid "check and enforce password expiration policy"
+msgstr "Vérifier et sécuriser la durée de validité des mots de passe"
+
+#: expiry.1.xml:83(para)
+msgid ""
+"The <command>expiry</command> command checks (<option>-c</option>) the "
+"current password expiration and forces (<option>-f</option>) changes when "
+"required. It is callable as a normal user command."
+msgstr ""
+"Avec l'option <option>-c</option>, <command>expiry</command> vérifie la "
+"validité du mot de passe de l'utilisateur actuel, et force (avec l'option "
+"<option>-f</option>) des modifications si nécessaire. Il peut être appelé "
+"par un utilisateur normal."
+
+#: expiry.1.xml:92(para)
+msgid "The options which apply to the <command>expiry</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>expiry</command> sont :"
+
+#: expiry.1.xml:97(term)
+msgid "<option>-c</option>, <option>--check</option>"
+msgstr "<option>-c</option>, <option>--check</option>"
+
+#: expiry.1.xml:99(para)
+msgid "Check the password expiration of the current user."
+msgstr ""
+"Vérifier la durée de validité du mot de passe de l'utilisateur courant."
+
+#: expiry.1.xml:105(para)
+msgid "Force a password change if the current user has an expired password."
+msgstr ""
+"Forcer le changement du mot de passe si l'utilisateur courant possède un mot "
+"de passe qui a expiré."
+
+#: expiry.1.xml:140(para) chage.1.xml:318(para)
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: chsh.1.xml:68(refpurpose)
+msgid "change login shell"
+msgstr "Changer l'interpréteur de commandes initial"
+
+#: chsh.1.xml:85(para)
+msgid ""
+"The <command>chsh</command> command changes the user login shell. This "
+"determines the name of the user's initial login command. A normal user may "
+"only change the login shell for her own account; the superuser may change "
+"the login shell for any account."
+msgstr ""
+"La commande <command>chsh</command> modifie l'interpréteur de commandes "
+"initial (« login shell ») de l'utilisateur qui sera invoqué lors des "
+"connexions de l'utilisateur. Un utilisateur normal ne peut changer que "
+"l'interpréteur associé à son propre compte. Le superutilisateur peut changer "
+"l'interpréteur de commandes initial de n'importe quel compte."
+
+#: chsh.1.xml:96(para)
+msgid "The options which apply to the <command>chsh</command> command are:"
+msgstr "Les options applicables à la commande <command>chsh</command> sont :"
+
+#: chsh.1.xml:130(para)
+msgid ""
+"If the <option>-s</option> option is not selected, <command>chsh</command> "
+"operates in an interactive fashion, prompting the user with the current "
+"login shell. Enter the new value to change the shell, or leave the line "
+"blank to use the current one. The current shell is displayed between a pair "
+"of <emphasis>[ ]</emphasis> marks."
+msgstr ""
+"Quand l'option <option>-s</option> n'est pas sélectionnée, <command>chsh</"
+"command> opère de façon interactive, demandant à l'utilisateur quel doit "
+"être le nouvel interpréteur de commandes initial (« login shell »). "
+"L'utilisateur pourra entrer une nouvelle valeur pour modifier "
+"l'interpréteur, ou laisser la ligne blanche pour conserver l'interpréteur "
+"actuel. L'interpréteur actuel est indiqué entre crochets (<emphasis>[ ]</"
+"emphasis>)."
+
+#: chsh.1.xml:141(para)
+msgid ""
+"The only restriction placed on the login shell is that the command name must "
+"be listed in <filename>/etc/shells</filename>, unless the invoker is the "
+"superuser, and then any value may be added. An account with a restricted "
+"login shell may not change her login shell. For this reason, placing "
+"<filename>/bin/rsh</filename> in <filename>/etc/shells</filename> is "
+"discouraged since accidentally changing to a restricted shell would prevent "
+"the user from ever changing her login shell back to its original value."
+msgstr ""
+"La seule restriction placée sur l'interpréteur de commandes initial (« login "
+"shell ») est que cette commande doit faire partie de <filename>/etc/shells</"
+"filename>, à moins qu'elle ne soit invoquée par le superutilisateur, qui "
+"peut ajouter n'importe quelle valeur. Un compte avec un interpréteur de "
+"commandes initial restreint ne peut pas changer son interpréteur. Pour cette "
+"raison, il est déconseillé de placer <filename>/bin/rsh</filename> dans "
+"<filename>/etc/shells</filename>, puisqu'une modification accidentelle vers "
+"un interpréteur restreint empêchera alors l'utilisateur de revenir ensuite à "
+"l'interpréteur précédent."
+
+#: chsh.1.xml:176(filename)
+msgid "/etc/shells"
+msgstr "/etc/shells"
+
+#: chsh.1.xml:178(para)
+msgid "List of valid login shells."
+msgstr "Liste des interpréteurs de commandes initiaux valables."
+
+#: chsh.1.xml:192(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: chpasswd.8.xml:69(refpurpose)
+msgid "update passwords in batch mode"
+msgstr "Mettre à jour des mots de passe par lot"
+
+#: chpasswd.8.xml:83(para)
+msgid ""
+"The <command>chpasswd</command> command reads a list of user name and "
+"password pairs from standard input and uses this information to update a "
+"group of existing users. Each line is of the format:"
+msgstr ""
+"La commande <command>chpasswd</command> lit une liste de paires de noms "
+"d'utilisateurs et de mots de passe depuis l'entrée standard et utilise ces "
+"informations pour mettre à jour un groupe d'utilisateurs existants. Chaque "
+"ligne est au format suivant :"
+
+#: chpasswd.8.xml:88(para)
+msgid ""
+"<emphasis remap=\"I\">user_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">nom_utilisateur</emphasis>:<emphasis remap=\"I"
+"\">mot_de_passe</emphasis>"
+
+#: chpasswd.8.xml:92(para)
+msgid ""
+"By default the passwords must be supplied in clear-text, and are encrypted "
+"by <command>chpasswd</command>. Also the password age will be updated, if "
+"present."
+msgstr ""
+"Par défaut, les mots de passe doivent être fournis en clair, et sont "
+"chiffrés par <command>chpasswd</command>. L'âge du mot de passe sera "
+"également mis à jour, s'il est présent."
+
+#: chpasswd.8.xml:97(para)
+msgid ""
+"The default encryption algorithm can be defined for the system with the "
+"<option>ENCRYPT_METHOD</option> or <option>MD5_CRYPT_ENAB</option> variables "
+"of <filename>/etc/login.defs</filename>, and can be overwritten with the "
+"<option>-e</option>, <option>-m</option>, or <option>-c</option> options."
+msgstr ""
+"L'algorithme de chiffrement par défaut peut être défini pour le système à "
+"l'aide des variables <option>ENCRYPT_METHOD</option> ou "
+"<option>MD5_CRYPT_ENAB</option> de <filename>/etc/login.defs</filename>, et "
+"peut être surchargé par les options <option>-e</option>, <option>-m</option> "
+"ou <option>-c</option>"
+
+#: chpasswd.8.xml:105(para)
+msgid ""
+"By default, passwords are encrypted by PAM, but (even if not recommended) "
+"you can select a different encryption method with the <option>-e</option>, "
+"<option>-m</option>, or <option>-c</option> options."
+msgstr ""
+"Par défaut les mots de passe sont chiffrés par PAM, mais (même si cela est "
+"déconseillé) vous pouvez sélectionner une méthode de chiffrement différente "
+"avec les options <option>-e</option>, <option>-m</option> ou <option>-c</"
+"option>."
+
+#: chpasswd.8.xml:111(para)
+msgid ""
+"<phrase condition=\"pam\">Except when PAM is used to encrypt the passwords,</"
+"phrase><command>chpasswd</command> first updates all the passwords in "
+"memory, and then commits all the changes to disk if no errors occurred for "
+"any user."
+msgstr ""
+"<phrase condition=\"pam\">Sauf quand PAM est utilisé pour chiffrer les mots "
+"de passe, </phrase><command>chpasswd</command> modifie d'abord tous les mots "
+"de passe en mémoire, puis propage toutes les modifications sur le disque si "
+"aucune erreur n'a eu lieu pour aucun utilisateur."
+
+#: chpasswd.8.xml:117(para)
+msgid ""
+"When PAM is used to encrypt the passwords (and update the passwords in the "
+"system database) then if a password cannot be updated <command>chpasswd</"
+"command> continues updating the passwords of the next users, and will return "
+"an error code on exit."
+msgstr ""
+"Quand PAM est utilisé pour chiffrer les mots de passe (et pour mettre à jour "
+"les mots de passe dans la base de données du système), si aucun mot de passe "
+"ne peut être mis à jour, <command>chpasswd</command> continuera la mise à "
+"jour des mots de passe pour les utilisateurs suivants, et renverra un code "
+"d'erreur en sortie."
+
+#: chpasswd.8.xml:123(para) chgpasswd.8.xml:98(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are created at a single time."
+msgstr ""
+"Cette commande est destinée aux gros systèmes pour lesquels un nombre "
+"importants de comptes sont créés en une seule fois."
+
+#: chpasswd.8.xml:131(para)
+msgid "The options which apply to the <command>chpasswd</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>chpasswd</command> sont :"
+
+#: chpasswd.8.xml:137(term)
+msgid ""
+"<option>-c</option>, <option>--crypt-method</option>&nbsp;"
+"<replaceable>METHOD</replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--crypt-method</option>&nbsp;"
+"<replaceable>MÉTHODE</replaceable>"
+
+#: chpasswd.8.xml:142(para) chgpasswd.8.xml:115(para)
+msgid "The available methods are DES, MD5, and NONE."
+msgstr "Les méthodes disponibles sont DES, MD5 et NONE."
+
+#: chpasswd.8.xml:149(para)
+msgid "By default, PAM is used to encrypt the passwords."
+msgstr "Par défaut, PAM est utilisé pour chiffrer les mots de passe."
+
+#: chpasswd.8.xml:152(para)
+msgid ""
+"By default (if none of the <option>-c</option>, <option>-m</option>, or "
+"<option>-e</option> options are specified), the encryption method is defined "
+"by the <option>ENCRYPT_METHOD</option> or <option>MD5_CRYPT_ENAB</option> "
+"variables of <filename>/etc/login.defs</filename>."
+msgstr ""
+"Par défaut (si aucune des options <option>-c</option>, <option>-m</option> "
+"ou <option>-e</option> n'est précisée), la méthode de chiffrement est "
+"définie par les variables <option>ENCRYPT_METHOD</option> ou "
+"<option>MD5_CRYPT_ENAB</option> de <filename>/etc/login.defs</filename>."
+
+#: chpasswd.8.xml:163(term) chgpasswd.8.xml:125(term)
+msgid "<option>-e</option>, <option>--encrypted</option>"
+msgstr "<option>-e</option>, <option>--encrypted</option>"
+
+#: chpasswd.8.xml:165(para) chgpasswd.8.xml:127(para)
+msgid "Supplied passwords are in encrypted form."
+msgstr "Indiquer que les mots de passe fournis sont chiffrés."
+
+#: chpasswd.8.xml:179(term) chgpasswd.8.xml:137(term)
+msgid "<option>-m</option>, <option>--md5</option>"
+msgstr "<option>-m</option>, <option>--md5</option>"
+
+#: chpasswd.8.xml:181(para) chgpasswd.8.xml:139(para)
+msgid ""
+"Use MD5 encryption instead of DES when the supplied passwords are not "
+"encrypted."
+msgstr ""
+"Permettre d'utiliser le chiffrement MD5, plutôt que DES, lorsque les mots de "
+"passe fournis ne sont pas chiffrés."
+
+#: chpasswd.8.xml:200(term)
+msgid ""
+"<option>-s</option>, <option>--sha-rounds</option>&nbsp;<replaceable>ROUNDS</"
+"replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--sha-rounds</option>&nbsp;<replaceable>ROUNDS</"
+"replaceable>"
+
+#: chpasswd.8.xml:219(para)
+msgid ""
+"By default, the number of rounds is defined by the "
+"<option>SHA_CRYPT_MIN_ROUNDS</option> and <option>SHA_CRYPT_MAX_ROUNDS</"
+"option> variables in <filename>/etc/login.defs</filename>."
+msgstr ""
+"Par défaut, le nombre de rounds est défini par les variables "
+"<option>SHA_CRYPT_MIN_ROUNDS</option> et <option>SHA_CRYPT_MAX_ROUNDS</"
+"option> dans <filename>/etc/login.defs</filename>."
+
+#: chpasswd.8.xml:232(para) chgpasswd.8.xml:187(para)
+msgid ""
+"Remember to set permissions or umask to prevent readability of unencrypted "
+"files by other users."
+msgstr ""
+"Pensez à configurer les permissions ou umask afin d'empêcher la lecture des "
+"fichiers non chiffrés par les d'autres utilisateurs."
+
+#: chpasswd.8.xml:276(filename)
+msgid "/etc/pam.d/chpasswd"
+msgstr "/etc/pam.d/chpasswd"
+
+#: chpasswd.8.xml:278(para)
+msgid "PAM configuration for <command>chpasswd</command>."
+msgstr "Configuration de PAM pour <command>chpasswd</command>."
+
+#: chpasswd.8.xml:286(para)
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>newusers</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<phrase><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>newusers</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<phrase><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: chgpasswd.8.xml:47(contrib)
+msgid "Creation, 2006"
+msgstr "Création, 2006"
+
+#: chgpasswd.8.xml:65(refpurpose)
+msgid "update group passwords in batch mode"
+msgstr "Mettre à jour par lot des mots de passe des groupes"
+
+#: chgpasswd.8.xml:79(para)
+msgid ""
+"The <command>chgpasswd</command> command reads a list of group name and "
+"password pairs from standard input and uses this information to update a set "
+"of existing groups. Each line is of the format:"
+msgstr ""
+"La commande <command>chgpasswd</command> lit une liste de paires de noms de "
+"groupes et de mots de passe depuis l'entrée standard et utilise ces "
+"informations pour mettre à jour un ensemble de groupes existants. Chaque "
+"ligne est au format suivant :"
+
+#: chgpasswd.8.xml:84(para)
+msgid ""
+"<emphasis remap=\"I\">group_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">nom_utilisateur</emphasis>:<emphasis remap=\"I"
+"\">mot_de_passe</emphasis>"
+
+#: chgpasswd.8.xml:88(para)
+msgid ""
+"By default the supplied password must be in clear-text, and is encrypted by "
+"<command>chgpasswd</command>."
+msgstr ""
+"Par défaut, le mot de passe doit être fourni en clair, et est chiffré par "
+"<command>chgpasswd</command>."
+
+#: chgpasswd.8.xml:92(para)
+msgid ""
+"The default encryption algorithm can be defined for the system with the "
+"<option>ENCRYPT_METHOD</option> variable of <filename>/etc/login.defs</"
+"filename>, and can be overwritten with the <option>-e</option>, <option>-m</"
+"option>, or <option>-c</option> options."
+msgstr ""
+"L'algorithme de chiffrement peut être défini pour le système avec la "
+"variable <option>ENCRYPT_METHOD</option> de <filename>/etc/login.defs</"
+"filename> et peut être surchargé avec les options <option>-e</option>, "
+"<option>-m</option> ou <option>-c</option>."
+
+#: chgpasswd.8.xml:106(para)
+msgid ""
+"The options which apply to the <command>chgpasswd</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>chgpasswd</command> sont :"
+
+#: chgpasswd.8.xml:238(para)
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+
+#: chfn.1.xml:68(refpurpose)
+msgid "change real user name and information"
+msgstr "Modifier le nom complet et les informations associées à un utilisateur"
+
+#: chfn.1.xml:85(para)
+msgid ""
+"The <command>chfn</command> command changes user fullname, office room "
+"number, office phone number, and home phone number information for a user's "
+"account. This information is typically printed by "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> and similar programs. A normal user may only change the fields "
+"for her own account, subject to the restrictions in <filename>/etc/login."
+"defs</filename>. (The default configuration is to prevent users from "
+"changing their fullname.) The superuser may change any field for any "
+"account. Additionally, only the superuser may use the <option>-o</option> "
+"option to change the undefined portions of the GECOS field."
+msgstr ""
+"La commande <command>chfn</command> modifie le nom complet d'un utilisateur, "
+"son numéro de bureau, son numéro de téléphone professionnel, son extension, "
+"et son numéro de téléphone personnel. Ces informations sont généralement "
+"affichées par <citerefentry><refentrytitle>finger</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> ou d'autres programmes "
+"similaires. Un utilisateur normal ne peut modifier que les informations "
+"associées à son propre compte, avec les restrictions précisées dans "
+"<filename>/etc/login.defs</filename>. (Par défaut, les utilisateurs ne "
+"peuvent pas modifier leur nom complet). Le superutilisateur peut modifier "
+"n'importe quel champ pour n'importe quel compte. De plus, seul le "
+"superutilisateur peut utiliser l'option <option>-o</option> pour modifier "
+"les parties non précisées du champ GECOS."
+
+#: chfn.1.xml:99(para)
+msgid ""
+"These fields must not contain any colons. Except for the <emphasis remap=\"I"
+"\">other</emphasis> field, they should not contain any comma or equal sign. "
+"It is also recommended to avoid non-US-ASCII characters, but this is only "
+"enforced for the phone numbers. The <emphasis remap=\"I\">other</emphasis> "
+"field is used to store accounting information used by other applications."
+msgstr ""
+"Ces champs ne doivent contenir aucun « : ». À l'exception du champ <emphasis "
+"remap=\"I\">autre</emphasis>, ils ne doivent contenir aucune virgule ou "
+"signe égal. Il est également recommandé d'éviter les caractères non US-"
+"ASCII, mais cela n'est imposé que pour les numéros de téléphone. Le champ "
+"<emphasis remap=\"I\">autre</emphasis> est utilisé pour garder des "
+"informations de compte utilisées par d'autres applications."
+
+#: chfn.1.xml:112(para)
+msgid "The options which apply to the <command>chfn</command> command are:"
+msgstr "Les options applicables à la commande <command>chfn</command> sont :"
+
+#: chfn.1.xml:117(term)
+msgid ""
+"<option>-f</option>, <option>--full-name</option>&nbsp;"
+"<replaceable>FULL_NAME</replaceable>"
+msgstr ""
+"<option>-f</option>, <option>--full-name</option>&nbsp;"
+"<replaceable>NOM_COMPLET</replaceable>"
+
+#: chfn.1.xml:121(para)
+msgid "Change the user's full name."
+msgstr "Modifier le nom complet de l'utilisateur."
+
+#: chfn.1.xml:125(term)
+msgid ""
+"<option>-h</option>, <option>--home-phone</option>&nbsp;"
+"<replaceable>HOME_PHONE</replaceable>"
+msgstr ""
+"<option>-h</option>, <option>--home-phone</option>&nbsp;"
+"<replaceable>TEL_PERSO</replaceable>"
+
+#: chfn.1.xml:129(para)
+msgid "Change the user's home phone number."
+msgstr "Modifier le numéro de téléphone personnel de l'utilisateur."
+
+#: chfn.1.xml:133(term)
+msgid ""
+"<option>-o</option>, <option>--other</option>&nbsp;<replaceable>OTHER</"
+"replaceable>"
+msgstr ""
+"<option>-o</option>, <option>--other</option>&nbsp;<replaceable>AUTRE</"
+"replaceable>"
+
+#: chfn.1.xml:137(para)
+msgid ""
+"Change the user's other GECOS information. This field is used to store "
+"accounting information used by other applications, and can be changed only "
+"by a superuser."
+msgstr ""
+"Modifier les informations GECO de l'utilisateur. Ce champ est utilisé pour "
+"enregistrer les informations de l'utilisateur utilisées par d'autres "
+"applications et peut être changé seulement par un superutilisateur."
+
+#: chfn.1.xml:145(term)
+msgid ""
+"<option>-r</option>, <option>--room</option>&nbsp;<replaceable>ROOM_NUMBER</"
+"replaceable>"
+msgstr ""
+"<option>-r</option>, <option>--room</option>&nbsp;"
+"<replaceable>NUMÉRO_DE_BUREAU</replaceable>"
+
+#: chfn.1.xml:149(para)
+msgid "Change the user's room number."
+msgstr "Modifier le numéro de bureau de l'utilisateur."
+
+#: chfn.1.xml:165(term)
+msgid "<option>-u</option>, <option>--help</option>"
+msgstr "<option>-u</option>, <option>--help</option>"
+
+#: chfn.1.xml:173(term)
+msgid ""
+"<option>-w</option>, <option>--work-phone</option>&nbsp;"
+"<replaceable>WORK_PHONE</replaceable>"
+msgstr ""
+"<option>-w</option>, <option>--work-phone</option>&nbsp;"
+"<replaceable>TEL_PRO</replaceable>"
+
+#: chfn.1.xml:177(para)
+msgid "Change the user's office phone number."
+msgstr "Modifier le numéro de téléphone professionnel de l'utilisateur."
+
+#: chfn.1.xml:181(para)
+msgid ""
+"If none of the options are selected, <command>chfn</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis remap=\"B\">[ ]</emphasis> marks. Without options, <command>chfn</"
+"command> prompts for the current user account."
+msgstr ""
+"Si aucune option n'est sélectionnée, <command>chfn</command> opère de "
+"manière interactive, demandant à l'utilisateur d'entrer les valeurs "
+"actuelles de chacun des champs. Entrer une nouvelle valeur pour la modifier, "
+"ou de laisser une ligne blanche pour conserver la valeur actuelle. La valeur "
+"actuelle est indiquée entre crochets (<emphasis remap=\"B\">[ ]</emphasis>). "
+"En l'absence d'option, <command>chfn</command> opère sur l'utilisateur "
+"actuel."
+
+#: chfn.1.xml:226(para)
+msgid ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: chage.1.xml:66(refpurpose)
+msgid "change user password expiry information"
+msgstr "Modifier les informations de validité d'un mot de passe"
+
+#: 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 their password."
+msgstr ""
+"La commande <command>chage</command> modifie le nombre de jours entre les "
+"changements de mot de passe et la date du dernier changement. Ces "
+"informations sont utilisées par le système pour déterminer le moment où un "
+"utilisateur doit changer son mot de passe."
+
+#: chage.1.xml:92(para)
+msgid "The options which apply to the <command>chage</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>chage</command> sont :"
+
+#: chage.1.xml:97(term)
+msgid ""
+"<option>-d</option>, <option>--lastday</option>&nbsp;<replaceable>LAST_DAY</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--lastday</option>&nbsp;"
+"<replaceable>DERNIER_JOUR</replaceable>"
+
+#: chage.1.xml:101(para)
+msgid ""
+"Set the number of days since January 1st, 1970 when the password was last "
+"changed. The date may also be expressed in the format YYYY-MM-DD (or the "
+"format more commonly used in your area)."
+msgstr ""
+"Configurer le nombre du jour, à compter du 1er janvier 1970, où le mot de "
+"passe a été changé la dernière fois. La date peut aussi être exprimée dans "
+"le format AAAA-MM-JJ (ou le format utilisé plus communément dans votre "
+"région)."
+
+#: chage.1.xml:109(term)
+msgid ""
+"<option>-E</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>EXPIRE_DATE</replaceable>"
+msgstr ""
+"<option>-E</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>DATE_FIN_VALIDITÉ</replaceable>"
+
+# NOTE: s/date//
+#: chage.1.xml:113(para)
+msgid ""
+"Set the date or number of days since January 1, 1970 on which the user's "
+"account will no longer be accessible. The date may also be expressed in the "
+"format YYYY-MM-DD (or the format more commonly used in your area). A user "
+"whose account is locked must contact the system administrator before being "
+"able to use the system again."
+msgstr ""
+"Configurer la date, ou le nombre de jours à compter du 1er janvier 1970, à "
+"partir de laquelle le compte de l'utilisateur ne sera plus accessible. La "
+"date peut aussi être exprimée dans le format AAAA-MM-JJ (ou le format plus "
+"communément utilisé dans votre région). Un utilisateur dont le compte est "
+"bloqué doit contacter l'administrateur système pour pouvoir utiliser à "
+"nouveau le système."
+
+#: chage.1.xml:121(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>EXPIRE_DATE</replaceable> will remove an account expiration "
+"date."
+msgstr ""
+"Une valeur de <emphasis remap=\"I\">-1</emphasis> pour "
+"<replaceable>DATE_FIN_VALIDITÉ</replaceable> aura pour effet de supprimer la "
+"date de fin de validité."
+
+#: chage.1.xml:135(term)
+#, fuzzy
+#| msgid "<option>-s</option>, <option>--sort</option>"
+msgid "<option>-i</option>, <option>--iso8601</option>"
+msgstr "<option>-s</option>, <option>--sort</option>"
+
+#: chage.1.xml:137(para)
+msgid "When printing dates, use YYYY-MM-DD format."
+msgstr ""
+
+#: chage.1.xml:141(term)
+msgid ""
+"<option>-I</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-I</option>, <option>--inactive</option>&nbsp;"
+"<replaceable>DURÉE_INACTIVITÉ</replaceable>"
+
+#: chage.1.xml:145(para)
+msgid ""
+"Set the number of days of inactivity after a password has expired before the "
+"account is locked. The <replaceable>INACTIVE</replaceable> option is the "
+"number of days of inactivity. A user whose account is locked must contact "
+"the system administrator before being able to use the system again."
+msgstr ""
+"Configurer le nombre de jours d'inactivité, après qu'un mot de passe ait "
+"dépassé la date de fin de validité, avant que le compte ne soit bloqué. La "
+"valeur <replaceable>DURÉE_INACTIVITÉ</replaceable> est le nombre de jours "
+"d'inactivité. Un utilisateur dont le compte est bloqué doit contacter "
+"l'administrateur système avant de pouvoir utiliser de nouveau le système."
+
+#: chage.1.xml:152(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>INACTIVE</replaceable> will remove an account's inactivity."
+msgstr ""
+"Une valeur de <emphasis remap=\"I\">-1</emphasis> pour "
+"<replaceable>DURÉE_INACTIVITÉ</replaceable> supprime la durée d'inactivité "
+"pour un compte."
+
+#: chage.1.xml:164(para)
+msgid "Show account aging information."
+msgstr "Afficher les informations sur l'âge des comptes."
+
+#: chage.1.xml:170(term)
+msgid ""
+"<option>-m</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--mindays</option>&nbsp;<replaceable>JOURS_MIN</"
+"replaceable>"
+
+#: chage.1.xml:182(term)
+msgid ""
+"<option>-M</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-M</option>, <option>--maxdays</option>&nbsp;<replaceable>JOURS_MAX</"
+"replaceable>"
+
+#: chage.1.xml:186(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 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 ""
+"Configurer le nombre maximum de jours pendant lesquels un mot de passe est "
+"valable. Quand <replaceable>JOURS_MAX</replaceable> plus "
+"<replaceable>DERNIER_JOUR</replaceable> est inférieur à la date actuelle, "
+"l'utilisateur est obligé de changer son mot de passe avant de pouvoir "
+"utiliser son compte. Cet événement peut être déclenché plus tôt grâce à "
+"l'option <option>-W</option> qui prévient l'utilisateur à l'avance par un "
+"message d'alerte."
+
+#: chage.1.xml:215(term)
+msgid ""
+"<option>-W</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>WARN_DAYS</replaceable>"
+msgstr ""
+"<option>-W</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>DURÉE_AVERTISSEMENT</replaceable>"
+
+#: chage.1.xml:219(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 their password is about to "
+"expire."
+msgstr ""
+"Configurer le nombre de jours d'avertissement avant que le changement de mot "
+"de passe ne soit obligatoire. La valeur <replaceable>JOUORS_AVERTISSEMENT</"
+"replaceable> est le nombre de jours précédant l'expiration et durant "
+"lesquels un utilisateur sera prévenu que son mot de passe est sur le point "
+"d'arriver en fin de validité."
+
+#: chage.1.xml:228(para)
+msgid ""
+"If none of the options are selected, <command>chage</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis>[ ]</emphasis> marks."
+msgstr ""
+"Si aucune de ces options n'est donnée, <command>chage</command> utilise un "
+"mode interactif, demandant confirmation à l'utilisateur pour les valeurs de "
+"tous les champs. Entrez la nouvelle valeur pour modifier la valeur du champ, "
+"ou laissez la ligne vide pour conserver la valeur actuelle. La valeur "
+"actuelle est affichée entre crochets."
+
+#: chage.1.xml:238(para)
+msgid ""
+"The <command>chage</command> program requires a shadow password file to be "
+"available."
+msgstr ""
+"Le programme <command>chage</command> nécessite l'utilisation d'un fichier "
+"de mots de passe cachés (« shadow password file »)."
+
+#: chage.1.xml:242(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 their password or account is due to expire."
+msgstr ""
+"La commande <command>chage</command> est réservée à l'utilisateur root, sauf "
+"pour l'option <option>-l</option>, qui peut être utilisée par un utilisateur "
+"non privilégié pour lui permettre de savoir quand son mot de passe ou son "
+"compte arrivera en fin de validité."
+
+#: chage.1.xml:307(replaceable)
+msgid "15"
+msgstr "15"
+
+#: chage.1.xml:309(para)
+msgid "can't find the shadow password file"
+msgstr "impossible de trouver le fichier des mots de passe cachés"
+
+#: chage.1.xml:285(para)
+msgid ""
+"The <command>chage</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"La commande <command>chage</command> retourne les valeurs suivantes en "
+"quittant : <placeholder-1/>"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
+#: chage.1.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+"Nicolas FRANÇOIS <nicolas.francois@centraliens.net>, 2005-2010Thomas Blein "
+"<tblein@tblein.eu>, 2011-2012Debian French l10n team <debian-l10n-"
+"french@lists.debian.org>, 2011-2012"
+
+#~ msgid ""
+#~ "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."
+#~ msgstr ""
+#~ "Des paramètres supplémentaires peuvent être fournis après le nom de "
+#~ "l'utilisateur. Dans ce cas, ils sont donnés à l'interpréteur de commandes "
+#~ "de connexion de l'utilisateur. En particulier, le paramètre « <option>-c</"
+#~ "option> » considère que le paramètre suivant est une commande pour la "
+#~ "plupart des interpréteurs de commandes. La commande sera exécutée par "
+#~ "l'interpréteur indiqué dans <filename>/etc/passwd</filename> pour "
+#~ "l'utilisateur cible."
+
+#~ msgid ""
+#~ "You can use the <option>--</option> argument to separate <command>su</"
+#~ "command> options from the arguments supplied to the shell."
+#~ msgstr ""
+#~ "Vous pouvez utiliser le paramètre <option>--</option> pour séparer les "
+#~ "options de <command>su</command> des paramètres fournis par "
+#~ "l'interpréteur de commandes."
+
+#~ msgid ""
+#~ "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 <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>."
+#~ msgstr ""
+#~ "Le champ du mot de passe chiffré peut être vide. Dans ce cas, aucun mot "
+#~ "de passe n'est nécessaire pour s'authentifier avec le compte donné. "
+#~ "Cependant, certaines applications qui lisent le fichier <filename>/etc/"
+#~ "passwd</filename> peuvent décider de ne donner aucun accès si le "
+#~ "<emphasis>mot de</emphasis> passe est vide. Si le mot de passe est un "
+#~ "<quote>x</quote> minuscule, alors le mot de passe chiffré se trouve dans "
+#~ "le fichier <citerefentry><refentrytitle>shadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry> ; il "
+#~ "<emphasis>doit</emphasis> y avoir une ligne correspondante dans le "
+#~ "fichier <filename>shadow</filename>, sinon le compte de l'utilisateur "
+#~ "n'est pas valide. Si le mot de passe est constitué d'une autre chaîne, "
+#~ "alors il est considéré comme un mot de passe chiffré, comme indiqué dans "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>."
diff --git a/man/po/it.po b/man/po/it.po
new file mode 100644
index 0000000..50fae46
--- /dev/null
+++ b/man/po/it.po
@@ -0,0 +1,11253 @@
+# Italian translations for shadow package.
+# Copyright © 2005 the shadow copyright holder.
+# This file is distributed under the same license as the shadow package.
+# Giuseppe Sacco <eppesuig@debian.org>, 2005, 2012.
+# Danilo Piazzalunga <danilopiazza@libero.it>, 2005.
+# Isabella Ruocco <isacher@nettaxi.com>, 1999.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.1.5\n"
+"POT-Creation-Date: 2020-01-23 15:00-0600\n"
+"PO-Revision-Date: 2013-08-23 01:38+0200\n"
+"Last-Translator: Giuseppe Sacco <eppesuig@debian.org>\n"
+"Language-Team: Italian <tp@lists.linux.it>\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: vipw.8.xml:41(firstname) suauth.5.xml:39(firstname)
+#: pwconv.8.xml:45(firstname) login.access.5.xml:40(firstname)
+msgid "Marek"
+msgstr ""
+
+#: vipw.8.xml:42(surname) suauth.5.xml:40(surname) pwconv.8.xml:46(surname)
+#: login.access.5.xml:41(surname)
+msgid "Michałkiewicz"
+msgstr ""
+
+#: vipw.8.xml:43(contrib) limits.5.xml:43(contrib)
+msgid "Creation, 1997"
+msgstr ""
+
+#: vipw.8.xml:46(firstname) usermod.8.xml:51(firstname)
+#: userdel.8.xml:50(firstname) useradd.8.xml:63(firstname)
+#: suauth.5.xml:44(firstname) su.1.xml:61(firstname) sg.1.xml:45(firstname)
+#: shadow.5.xml:44(firstname) shadow.3.xml:44(firstname)
+#: pwconv.8.xml:50(firstname) pwck.8.xml:50(firstname)
+#: porttime.5.xml:44(firstname) passwd.5.xml:44(firstname)
+#: passwd.1.xml:51(firstname) newusers.8.xml:60(firstname)
+#: newgrp.1.xml:45(firstname) logoutd.8.xml:44(firstname)
+#: login.defs.5.xml:111(firstname) login.access.5.xml:45(firstname)
+#: login.1.xml:77(firstname) limits.5.xml:46(firstname)
+#: lastlog.8.xml:46(firstname) grpck.8.xml:45(firstname)
+#: groups.1.xml:44(firstname) groupmod.8.xml:45(firstname)
+#: groupmems.8.xml:48(firstname) groupdel.8.xml:45(firstname)
+#: groupadd.8.xml:47(firstname) gpasswd.1.xml:49(firstname)
+#: faillog.8.xml:44(firstname) faillog.5.xml:44(firstname)
+#: expiry.1.xml:48(firstname) chsh.1.xml:47(firstname)
+#: chpasswd.8.xml:48(firstname) chgpasswd.8.xml:44(firstname)
+#: chfn.1.xml:47(firstname) chage.1.xml:45(firstname)
+msgid "Thomas"
+msgstr ""
+
+#: vipw.8.xml:47(surname) usermod.8.xml:52(surname) userdel.8.xml:51(surname)
+#: useradd.8.xml:64(surname) suauth.5.xml:45(surname) su.1.xml:62(surname)
+#: sg.1.xml:46(surname) shadow.5.xml:45(surname) shadow.3.xml:45(surname)
+#: pwconv.8.xml:51(surname) pwck.8.xml:51(surname) porttime.5.xml:45(surname)
+#: passwd.5.xml:45(surname) passwd.1.xml:52(surname) newusers.8.xml:61(surname)
+#: newgrp.1.xml:46(surname) logoutd.8.xml:45(surname)
+#: login.defs.5.xml:112(surname) login.access.5.xml:46(surname)
+#: login.1.xml:78(surname) limits.5.xml:47(surname) lastlog.8.xml:47(surname)
+#: grpck.8.xml:46(surname) groups.1.xml:45(surname) groupmod.8.xml:46(surname)
+#: groupmems.8.xml:49(surname) groupdel.8.xml:46(surname)
+#: groupadd.8.xml:48(surname) gpasswd.1.xml:50(surname)
+#: faillog.8.xml:45(surname) faillog.5.xml:45(surname) expiry.1.xml:49(surname)
+#: chsh.1.xml:48(surname) chpasswd.8.xml:49(surname)
+#: chgpasswd.8.xml:45(surname) chfn.1.xml:48(surname) chage.1.xml:46(surname)
+msgid "Kłoczko"
+msgstr ""
+
+#: vipw.8.xml:48(email) usermod.8.xml:53(email) userdel.8.xml:52(email)
+#: useradd.8.xml:65(email) suauth.5.xml:46(email) su.1.xml:63(email)
+#: sg.1.xml:47(email) shadow.5.xml:46(email) shadow.3.xml:46(email)
+#: pwconv.8.xml:52(email) pwck.8.xml:52(email) porttime.5.xml:46(email)
+#: passwd.5.xml:46(email) passwd.1.xml:53(email) newusers.8.xml:62(email)
+#: newgrp.1.xml:47(email) logoutd.8.xml:46(email) login.defs.5.xml:113(email)
+#: login.access.5.xml:47(email) login.1.xml:79(email) limits.5.xml:48(email)
+#: lastlog.8.xml:48(email) grpck.8.xml:47(email) groups.1.xml:46(email)
+#: groupmod.8.xml:47(email) groupmems.8.xml:50(email) groupdel.8.xml:47(email)
+#: groupadd.8.xml:49(email) gpasswd.1.xml:51(email) faillog.8.xml:46(email)
+#: faillog.5.xml:46(email) expiry.1.xml:50(email) chsh.1.xml:49(email)
+#: chpasswd.8.xml:50(email) chgpasswd.8.xml:46(email) chfn.1.xml:49(email)
+#: chage.1.xml:47(email)
+msgid "kloczek@pld.org.pl"
+msgstr ""
+
+#: vipw.8.xml:49(contrib) usermod.8.xml:54(contrib) userdel.8.xml:53(contrib)
+#: useradd.8.xml:66(contrib) suauth.5.xml:47(contrib) su.1.xml:64(contrib)
+#: sg.1.xml:48(contrib) shadow.5.xml:47(contrib) shadow.3.xml:47(contrib)
+#: pwconv.8.xml:53(contrib) pwck.8.xml:53(contrib) porttime.5.xml:47(contrib)
+#: passwd.5.xml:47(contrib) passwd.1.xml:54(contrib) newusers.8.xml:63(contrib)
+#: newgrp.1.xml:48(contrib) logoutd.8.xml:47(contrib)
+#: login.defs.5.xml:114(contrib) login.access.5.xml:48(contrib)
+#: login.1.xml:80(contrib) limits.5.xml:49(contrib) lastlog.8.xml:49(contrib)
+#: grpck.8.xml:48(contrib) groups.1.xml:47(contrib) groupmod.8.xml:48(contrib)
+#: groupmems.8.xml:51(contrib) groupdel.8.xml:48(contrib)
+#: groupadd.8.xml:50(contrib) gpasswd.1.xml:52(contrib)
+#: faillog.8.xml:47(contrib) faillog.5.xml:47(contrib) expiry.1.xml:51(contrib)
+#: chsh.1.xml:50(contrib) chpasswd.8.xml:51(contrib) chfn.1.xml:50(contrib)
+#: chage.1.xml:48(contrib)
+msgid "shadow-utils maintainer, 2000 - 2007"
+msgstr ""
+
+#: vipw.8.xml:52(firstname) usermod.8.xml:57(firstname)
+#: userdel.8.xml:56(firstname) useradd.8.xml:69(firstname)
+#: suauth.5.xml:50(firstname) su.1.xml:67(firstname) sg.1.xml:51(firstname)
+#: shadow.5.xml:50(firstname) shadow.3.xml:50(firstname)
+#: pwconv.8.xml:56(firstname) pwck.8.xml:56(firstname)
+#: porttime.5.xml:50(firstname) passwd.5.xml:50(firstname)
+#: passwd.1.xml:57(firstname) nologin.8.xml:39(firstname)
+#: newusers.8.xml:66(firstname) newgrp.1.xml:51(firstname)
+#: logoutd.8.xml:50(firstname) login.defs.5.xml:117(firstname)
+#: login.access.5.xml:51(firstname) login.1.xml:83(firstname)
+#: limits.5.xml:52(firstname) lastlog.8.xml:52(firstname)
+#: gshadow.5.xml:38(firstname) grpck.8.xml:51(firstname)
+#: groups.1.xml:50(firstname) groupmod.8.xml:51(firstname)
+#: groupmems.8.xml:54(firstname) groupdel.8.xml:51(firstname)
+#: groupadd.8.xml:53(firstname) gpasswd.1.xml:55(firstname)
+#: faillog.8.xml:50(firstname) faillog.5.xml:50(firstname)
+#: expiry.1.xml:54(firstname) chsh.1.xml:53(firstname)
+#: chpasswd.8.xml:54(firstname) chgpasswd.8.xml:50(firstname)
+#: chfn.1.xml:53(firstname) chage.1.xml:51(firstname)
+msgid "Nicolas"
+msgstr ""
+
+#: vipw.8.xml:53(surname) usermod.8.xml:58(surname) userdel.8.xml:57(surname)
+#: useradd.8.xml:70(surname) suauth.5.xml:51(surname) su.1.xml:68(surname)
+#: sg.1.xml:52(surname) shadow.5.xml:51(surname) shadow.3.xml:51(surname)
+#: pwconv.8.xml:57(surname) pwck.8.xml:57(surname) porttime.5.xml:51(surname)
+#: passwd.5.xml:51(surname) passwd.1.xml:58(surname) nologin.8.xml:40(surname)
+#: newusers.8.xml:67(surname) newgrp.1.xml:52(surname)
+#: logoutd.8.xml:51(surname) login.defs.5.xml:118(surname)
+#: login.access.5.xml:52(surname) login.1.xml:84(surname)
+#: limits.5.xml:53(surname) lastlog.8.xml:53(surname) gshadow.5.xml:39(surname)
+#: grpck.8.xml:52(surname) groups.1.xml:51(surname) groupmod.8.xml:52(surname)
+#: groupmems.8.xml:55(surname) groupdel.8.xml:52(surname)
+#: groupadd.8.xml:54(surname) gpasswd.1.xml:56(surname)
+#: faillog.8.xml:51(surname) faillog.5.xml:51(surname) expiry.1.xml:55(surname)
+#: chsh.1.xml:54(surname) chpasswd.8.xml:55(surname)
+#: chgpasswd.8.xml:51(surname) chfn.1.xml:54(surname) chage.1.xml:52(surname)
+msgid "François"
+msgstr ""
+
+#: vipw.8.xml:54(email) usermod.8.xml:59(email) userdel.8.xml:58(email)
+#: useradd.8.xml:71(email) suauth.5.xml:52(email) su.1.xml:69(email)
+#: sg.1.xml:53(email) shadow.5.xml:52(email) shadow.3.xml:52(email)
+#: pwconv.8.xml:58(email) pwck.8.xml:58(email) porttime.5.xml:52(email)
+#: passwd.5.xml:52(email) passwd.1.xml:59(email) nologin.8.xml:41(email)
+#: newusers.8.xml:68(email) newgrp.1.xml:53(email) logoutd.8.xml:52(email)
+#: login.defs.5.xml:119(email) login.access.5.xml:53(email)
+#: login.1.xml:85(email) limits.5.xml:54(email) lastlog.8.xml:54(email)
+#: gshadow.5.xml:40(email) grpck.8.xml:53(email) groups.1.xml:52(email)
+#: groupmod.8.xml:53(email) groupmems.8.xml:56(email) groupdel.8.xml:53(email)
+#: groupadd.8.xml:55(email) gpasswd.1.xml:57(email) faillog.8.xml:52(email)
+#: faillog.5.xml:52(email) expiry.1.xml:56(email) chsh.1.xml:55(email)
+#: chpasswd.8.xml:56(email) chgpasswd.8.xml:52(email) chfn.1.xml:55(email)
+#: chage.1.xml:53(email)
+msgid "nicolas.francois@centraliens.net"
+msgstr ""
+
+#: vipw.8.xml:55(contrib) usermod.8.xml:60(contrib) userdel.8.xml:59(contrib)
+#: useradd.8.xml:72(contrib) suauth.5.xml:53(contrib) su.1.xml:70(contrib)
+#: sg.1.xml:54(contrib) shadow.5.xml:53(contrib) shadow.3.xml:53(contrib)
+#: pwconv.8.xml:59(contrib) pwck.8.xml:59(contrib) porttime.5.xml:53(contrib)
+#: passwd.5.xml:53(contrib) passwd.1.xml:60(contrib) nologin.8.xml:42(contrib)
+#: newusers.8.xml:69(contrib) newgrp.1.xml:54(contrib)
+#: logoutd.8.xml:53(contrib) login.defs.5.xml:120(contrib)
+#: login.access.5.xml:54(contrib) login.1.xml:86(contrib)
+#: limits.5.xml:55(contrib) lastlog.8.xml:55(contrib) gshadow.5.xml:42(contrib)
+#: grpck.8.xml:54(contrib) groups.1.xml:53(contrib) groupmod.8.xml:54(contrib)
+#: groupmems.8.xml:57(contrib) groupdel.8.xml:54(contrib)
+#: groupadd.8.xml:56(contrib) gpasswd.1.xml:58(contrib)
+#: faillog.8.xml:53(contrib) faillog.5.xml:53(contrib) expiry.1.xml:57(contrib)
+#: chsh.1.xml:56(contrib) chpasswd.8.xml:57(contrib)
+#: chgpasswd.8.xml:53(contrib) chfn.1.xml:56(contrib) chage.1.xml:54(contrib)
+msgid "shadow-utils maintainer, 2007 - now"
+msgstr ""
+
+#: vipw.8.xml:59(refentrytitle) vipw.8.xml:66(refname) vipw.8.xml:75(command)
+#: login.defs.5.xml:520(term)
+msgid "vipw"
+msgstr "vipw"
+
+#: vipw.8.xml:60(manvolnum) usermod.8.xml:65(manvolnum)
+#: userdel.8.xml:64(manvolnum) userdel.8.xml:276(replaceable)
+#: useradd.8.xml:77(manvolnum) pwconv.8.xml:64(manvolnum)
+#: pwck.8.xml:64(manvolnum) nologin.8.xml:47(manvolnum)
+#: newusers.8.xml:74(manvolnum) logoutd.8.xml:58(manvolnum)
+#: lastlog.8.xml:60(manvolnum) grpck.8.xml:59(manvolnum)
+#: groupmod.8.xml:59(manvolnum) groupmems.8.xml:62(manvolnum)
+#: groupdel.8.xml:59(manvolnum) groupdel.8.xml:198(replaceable)
+#: groupadd.8.xml:61(manvolnum) faillog.8.xml:58(manvolnum)
+#: faillog.5.xml:111(manvolnum) chpasswd.8.xml:62(manvolnum)
+#: chgpasswd.8.xml:58(manvolnum)
+msgid "8"
+msgstr "8"
+
+#: vipw.8.xml:61(refmiscinfo) usermod.8.xml:66(refmiscinfo)
+#: userdel.8.xml:65(refmiscinfo) useradd.8.xml:78(refmiscinfo)
+#: pwconv.8.xml:65(refmiscinfo) pwck.8.xml:65(refmiscinfo)
+#: nologin.8.xml:48(refmiscinfo) newusers.8.xml:75(refmiscinfo)
+#: logoutd.8.xml:59(refmiscinfo) lastlog.8.xml:61(refmiscinfo)
+#: grpck.8.xml:60(refmiscinfo) groupmod.8.xml:60(refmiscinfo)
+#: groupmems.8.xml:63(refmiscinfo) groupdel.8.xml:60(refmiscinfo)
+#: groupadd.8.xml:62(refmiscinfo) faillog.8.xml:59(refmiscinfo)
+#: chpasswd.8.xml:63(refmiscinfo) chgpasswd.8.xml:59(refmiscinfo)
+msgid "System Management Commands"
+msgstr "Comandi per la gestione del sistema"
+
+#: vipw.8.xml:62(refmiscinfo) usermod.8.xml:67(refmiscinfo)
+#: userdel.8.xml:66(refmiscinfo) useradd.8.xml:79(refmiscinfo)
+#: suauth.5.xml:60(refmiscinfo) su.1.xml:77(refmiscinfo)
+#: sg.1.xml:61(refmiscinfo) shadow.5.xml:60(refmiscinfo)
+#: shadow.3.xml:60(refmiscinfo) pwconv.8.xml:66(refmiscinfo)
+#: pwck.8.xml:66(refmiscinfo) porttime.5.xml:60(refmiscinfo)
+#: passwd.5.xml:60(refmiscinfo) passwd.1.xml:67(refmiscinfo)
+#: nologin.8.xml:49(refmiscinfo) newusers.8.xml:76(refmiscinfo)
+#: newgrp.1.xml:61(refmiscinfo) logoutd.8.xml:60(refmiscinfo)
+#: login.defs.5.xml:127(refmiscinfo) login.access.5.xml:61(refmiscinfo)
+#: login.1.xml:93(refmiscinfo) limits.5.xml:62(refmiscinfo)
+#: lastlog.8.xml:62(refmiscinfo) gshadow.5.xml:49(refmiscinfo)
+#: grpck.8.xml:61(refmiscinfo) groups.1.xml:60(refmiscinfo)
+#: groupmod.8.xml:61(refmiscinfo) groupmems.8.xml:64(refmiscinfo)
+#: groupdel.8.xml:61(refmiscinfo) groupadd.8.xml:63(refmiscinfo)
+#: gpasswd.1.xml:65(refmiscinfo) faillog.8.xml:60(refmiscinfo)
+#: faillog.5.xml:60(refmiscinfo) expiry.1.xml:64(refmiscinfo)
+#: chsh.1.xml:63(refmiscinfo) chpasswd.8.xml:64(refmiscinfo)
+#: chgpasswd.8.xml:60(refmiscinfo) chfn.1.xml:63(refmiscinfo)
+#: chage.1.xml:61(refmiscinfo)
+msgid "shadow-utils"
+msgstr "shadow-utils"
+
+#: vipw.8.xml:67(refname) vipw.8.xml:81(command)
+msgid "vigr"
+msgstr "vigr"
+
+# type: Plain text
+#: vipw.8.xml:68(refpurpose)
+msgid "edit the password, group, shadow-password or shadow-group file"
+msgstr ""
+"modifica i file delle password, dei gruppi, delle password shadow o dei "
+"gruppi shadow"
+
+#: vipw.8.xml:77(replaceable) vipw.8.xml:83(replaceable)
+#: usermod.8.xml:79(replaceable) userdel.8.xml:76(arg)
+#: useradd.8.xml:90(replaceable) useradd.8.xml:102(replaceable)
+#: su.1.xml:88(replaceable) pwconv.8.xml:81(replaceable)
+#: pwconv.8.xml:87(replaceable) pwconv.8.xml:93(replaceable)
+#: pwconv.8.xml:99(replaceable) pwck.8.xml:77(arg) passwd.1.xml:79(replaceable)
+#: newusers.8.xml:88(replaceable) lastlog.8.xml:74(replaceable)
+#: grpck.8.xml:72(arg) groupmod.8.xml:73(replaceable)
+#: groupdel.8.xml:73(replaceable) groupadd.8.xml:75(replaceable)
+#: faillog.8.xml:72(replaceable) chsh.1.xml:75(replaceable)
+#: chpasswd.8.xml:76(replaceable) chgpasswd.8.xml:72(replaceable)
+#: chfn.1.xml:75(replaceable) chage.1.xml:72(replaceable)
+msgid "options"
+msgstr "opzioni"
+
+# type: SH
+#: vipw.8.xml:89(title) usermod.8.xml:86(title) userdel.8.xml:84(title)
+#: useradd.8.xml:108(title) suauth.5.xml:75(title) su.1.xml:103(title)
+#: sg.1.xml:81(title) shadow.5.xml:69(title) shadow.3.xml:118(title)
+#: shadow.3.xml:174(title) pwconv.8.xml:105(title) pwck.8.xml:92(title)
+#: porttime.5.xml:69(title) passwd.5.xml:69(title) passwd.1.xml:88(title)
+#: nologin.8.xml:64(title) newusers.8.xml:97(title) newgrp.1.xml:77(title)
+#: logoutd.8.xml:75(title) login.defs.5.xml:136(title)
+#: login.access.5.xml:70(title) login.1.xml:125(title) limits.5.xml:72(title)
+#: lastlog.8.xml:80(title) gshadow.5.xml:58(title) grpck.8.xml:83(title)
+#: groups.1.xml:78(title) groupmod.8.xml:80(title) groupmems.8.xml:85(title)
+#: groupdel.8.xml:80(title) groupadd.8.xml:84(title) gpasswd.1.xml:94(title)
+#: faillog.8.xml:78(title) faillog.5.xml:69(title) expiry.1.xml:82(title)
+#: chsh.1.xml:84(title) chpasswd.8.xml:82(title) chgpasswd.8.xml:78(title)
+#: chfn.1.xml:84(title) chage.1.xml:81(title)
+msgid "DESCRIPTION"
+msgstr "DESCRIZIONE"
+
+# type: Plain text
+#: vipw.8.xml:90(para)
+msgid ""
+"The <command>vipw</command> and <command>vigr</command> commands edits the "
+"files <filename>/etc/passwd</filename> and <filename>/etc/group</filename>, "
+"respectively. With the <option>-s</option> flag, they will edit the shadow "
+"versions of those files, <filename>/etc/shadow</filename> and <filename>/etc/"
+"gshadow</filename>, respectively. The programs will set the appropriate "
+"locks to prevent file corruption. When looking for an editor, the programs "
+"will first try the environment variable <envar>$VISUAL</envar>, then the "
+"environment variable <envar>$EDITOR</envar>, and finally the default editor, "
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"I comandi <command>vipw</command> e <command>vigr</command> permettono di "
+"modificare rispettivamente i file <filename>/etc/passwd</filename> e "
+"<filename>/etc/group</filename>. Con l'opzione <option>-s</option>, vengono "
+"aperte le versioni shadow di quei file, rispettivamente <filename>/etc/"
+"shadow</filename> e <filename>/etc/gshadow</filename>. I programmi si "
+"occupano di impostare i lock necessari per evitare la corruzione dei file. "
+"Per determinare l'editor da usare, i programmi prima provano con la "
+"variabile d'ambiente <envar>$VISUAL</envar>, poi con la variabile d'ambiente "
+"<envar>$EDITOR</envar> e infine con l'editor predefinito, "
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+# type: SH
+#: vipw.8.xml:107(title) usermod.8.xml:94(title) userdel.8.xml:93(title)
+#: useradd.8.xml:126(title) su.1.xml:144(title) pwconv.8.xml:187(title)
+#: pwck.8.xml:176(title) passwd.1.xml:174(title) newusers.8.xml:266(title)
+#: login.1.xml:210(title) lastlog.8.xml:92(title) grpck.8.xml:147(title)
+#: groupmod.8.xml:89(title) groupmems.8.xml:100(title) groupdel.8.xml:88(title)
+#: groupadd.8.xml:93(title) gpasswd.1.xml:134(title) faillog.8.xml:89(title)
+#: expiry.1.xml:91(title) chsh.1.xml:95(title) chpasswd.8.xml:130(title)
+#: chgpasswd.8.xml:105(title) chfn.1.xml:111(title) chage.1.xml:91(title)
+msgid "OPTIONS"
+msgstr "OPZIONI"
+
+# type: Plain text
+#: vipw.8.xml:108(para)
+msgid ""
+"The options which apply to the <command>vipw</command> and <command>vigr</"
+"command> commands are:"
+msgstr ""
+"Le opzioni per i comandi <command>vipw</command> e <command>vigr</command> "
+"sono:"
+
+# type: TP
+#: vipw.8.xml:114(term)
+msgid "<option>-g</option>, <option>--group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+#: vipw.8.xml:116(para)
+msgid "Edit group database."
+msgstr "Modifica del database «group»."
+
+# type: TP
+#: vipw.8.xml:120(term) userdel.8.xml:123(term) useradd.8.xml:278(term)
+#: pwconv.8.xml:195(term) pwck.8.xml:196(term) passwd.1.xml:214(term)
+#: newusers.8.xml:296(term) lastlog.8.xml:119(term) grpck.8.xml:157(term)
+#: groupmod.8.xml:129(term) groupmems.8.xml:142(term) groupdel.8.xml:95(term)
+#: groupadd.8.xml:131(term) gpasswd.1.xml:173(term) faillog.8.xml:122(term)
+#: expiry.1.xml:112(term) chsh.1.xml:101(term) chpasswd.8.xml:171(term)
+#: chgpasswd.8.xml:131(term) chage.1.xml:129(term)
+msgid "<option>-h</option>, <option>--help</option>"
+msgstr "<option>-h</option>, <option>--help</option>"
+
+# type: Plain text
+#: vipw.8.xml:122(para) userdel.8.xml:125(para) useradd.8.xml:280(para)
+#: pwconv.8.xml:197(para) pwck.8.xml:198(para) passwd.1.xml:216(para)
+#: newusers.8.xml:298(para) lastlog.8.xml:123(para) grpck.8.xml:159(para)
+#: groupmod.8.xml:131(para) groupmems.8.xml:144(para) groupdel.8.xml:97(para)
+#: groupadd.8.xml:133(para) gpasswd.1.xml:175(para) faillog.8.xml:124(para)
+#: expiry.1.xml:114(para) chsh.1.xml:103(para) chpasswd.8.xml:173(para)
+#: chgpasswd.8.xml:133(para) chfn.1.xml:169(para) chage.1.xml:131(para)
+msgid "Display help message and exit."
+msgstr "Mostra un messaggio di aiuto ed esce."
+
+# type: IP
+#: vipw.8.xml:126(term)
+msgid "<option>-p</option>, <option>--passwd</option>"
+msgstr "<option>-p</option>, <option>--passwd</option>"
+
+#: vipw.8.xml:128(para)
+msgid "Edit passwd database."
+msgstr "Modifica del database «passwd»."
+
+# type: IP
+#: vipw.8.xml:132(term) pwck.8.xml:202(term) passwd.1.xml:281(term)
+msgid "<option>-q</option>, <option>--quiet</option>"
+msgstr "<option>-q</option>, <option>--quiet</option>"
+
+#: vipw.8.xml:134(para) passwd.1.xml:285(para)
+msgid "Quiet mode."
+msgstr "Modalità silenziosa."
+
+# type: IP
+#: vipw.8.xml:138(term) usermod.8.xml:322(term) userdel.8.xml:146(term)
+#: useradd.8.xml:457(term) pwconv.8.xml:201(term) pwck.8.xml:219(term)
+#: passwd.1.xml:301(term) newusers.8.xml:321(term) lastlog.8.xml:127(term)
+#: grpck.8.xml:173(term) groupmod.8.xml:178(term) groupmems.8.xml:165(term)
+#: groupdel.8.xml:101(term) groupadd.8.xml:204(term) faillog.8.xml:180(term)
+#: chsh.1.xml:107(term) chpasswd.8.xml:188(term) chgpasswd.8.xml:146(term)
+#: chfn.1.xml:153(term) chage.1.xml:203(term)
+msgid ""
+"<option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</"
+"replaceable>"
+
+# type: Plain text
+#: vipw.8.xml:142(para) usermod.8.xml:326(para) userdel.8.xml:150(para)
+#: useradd.8.xml:461(para) pwconv.8.xml:205(para) pwck.8.xml:223(para)
+#: passwd.1.xml:305(para) newusers.8.xml:325(para) lastlog.8.xml:131(para)
+#: grpck.8.xml:177(para) groupmod.8.xml:182(para) groupmems.8.xml:169(para)
+#: groupdel.8.xml:105(para) groupadd.8.xml:208(para) gpasswd.1.xml:185(para)
+#: faillog.8.xml:184(para) chsh.1.xml:111(para) chpasswd.8.xml:192(para)
+#: chgpasswd.8.xml:150(para) chfn.1.xml:157(para) chage.1.xml:207(para)
+msgid ""
+"Apply changes in the <replaceable>CHROOT_DIR</replaceable> directory and use "
+"the configuration files from the <replaceable>CHROOT_DIR</replaceable> "
+"directory."
+msgstr ""
+"Effettua le modifiche nella directory <replaceable>CHROOT_DIR</replaceable> "
+"e usa i file di configurazione dalla directory <replaceable>CHROOT_DIR</"
+"replaceable>."
+
+# type: IP
+#: vipw.8.xml:150(term)
+msgid "<option>-s</option>, <option>--shadow</option>"
+msgstr "<option>-s</option>, <option>--shadow</option>"
+
+#: vipw.8.xml:152(para)
+msgid "Edit shadow or gshadow database."
+msgstr "Modifica del database «shadow» o «gshadow»"
+
+# type: IP
+#: vipw.8.xml:156(term)
+msgid "<option>-u</option>, <option>--user</option>"
+msgstr "<option>-u</option>, <option>--user</option>"
+
+#: vipw.8.xml:158(para)
+msgid "Indicates which user's tcb shadow file to edit."
+msgstr "Indica di quale utente modificare il file «shadow tcb»."
+
+#: vipw.8.xml:165(title) usermod.8.xml:524(title) userdel.8.xml:188(title)
+#: useradd.8.xml:676(title) su.1.xml:338(title) sg.1.xml:98(title)
+#: pwconv.8.xml:227(title) pwck.8.xml:262(title) passwd.1.xml:395(title)
+#: newusers.8.xml:375(title) newgrp.1.xml:109(title) login.1.xml:294(title)
+#: lastlog.8.xml:205(title) grpck.8.xml:209(title) groupmod.8.xml:210(title)
+#: groupmems.8.xml:199(title) groupdel.8.xml:145(title)
+#: groupadd.8.xml:236(title) gpasswd.1.xml:264(title) chsh.1.xml:154(title)
+#: chpasswd.8.xml:239(title) chgpasswd.8.xml:198(title) chfn.1.xml:193(title)
+#: chage.1.xml:250(title)
+msgid "CONFIGURATION"
+msgstr "CONFIGURAZIONE"
+
+#: vipw.8.xml:166(para) usermod.8.xml:525(para) userdel.8.xml:189(para)
+#: useradd.8.xml:677(para) su.1.xml:339(para) sg.1.xml:99(para)
+#: pwck.8.xml:263(para) passwd.1.xml:396(para) newusers.8.xml:376(para)
+#: newgrp.1.xml:110(para) login.1.xml:295(para) lastlog.8.xml:206(para)
+#: grpck.8.xml:210(para) groupmod.8.xml:211(para) groupmems.8.xml:200(para)
+#: groupdel.8.xml:146(para) groupadd.8.xml:237(para) gpasswd.1.xml:265(para)
+#: chsh.1.xml:155(para) chpasswd.8.xml:240(para) chgpasswd.8.xml:199(para)
+#: chfn.1.xml:194(para) chage.1.xml:251(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of this tool:"
+msgstr ""
+"Le seguenti variabili di configurazione in <filename>/etc/login.defs</"
+"filename> cambiano il comportamento di questo strumento:"
+
+# type: IP
+#: vipw.8.xml:30(term) usermod.8.xml:30(term) userdel.8.xml:30(term)
+#: useradd.8.xml:30(term) pwconv.8.xml:30(term) pwck.8.xml:30(term)
+#: login.defs.5.xml:30(term) chage.1.xml:30(term)
+msgid "<option>USE_TCB</option> (boolean)"
+msgstr "<option>USE_TCB</option> (booleano)"
+
+# type: Plain text
+#: vipw.8.xml:32(para) usermod.8.xml:32(para) userdel.8.xml:32(para)
+#: useradd.8.xml:32(para) pwconv.8.xml:32(para) pwck.8.xml:32(para)
+#: login.defs.5.xml:32(para) chage.1.xml:32(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <citerefentry><refentrytitle>tcb</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry> password shadowing "
+"scheme will be used."
+msgstr ""
+"Se <replaceable>yes</replaceable> viene usato lo schema "
+"<citerefentry><refentrytitle>tcb</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry> per lo «shadow» delle password."
+
+#: vipw.8.xml:177(title)
+msgid "ENVIRONMENT"
+msgstr "VARIABILI D'AMBIENTE"
+
+#: vipw.8.xml:180(option)
+msgid "VISUAL"
+msgstr "VISUAL"
+
+#: vipw.8.xml:182(para)
+msgid "Editor to be used."
+msgstr "Editor da utilizzare."
+
+#: vipw.8.xml:186(option)
+msgid "EDITOR"
+msgstr "EDITOR"
+
+#: vipw.8.xml:188(para)
+msgid "Editor to be used if <option>VISUAL</option> is not set."
+msgstr "Editor da utilizzare se <option>VISUAL</option> non è impostata."
+
+# type: SH
+#: vipw.8.xml:195(title) usermod.8.xml:542(title) userdel.8.xml:205(title)
+#: useradd.8.xml:706(title) suauth.5.xml:193(title) su.1.xml:366(title)
+#: sg.1.xml:110(title) shadow.5.xml:255(title) shadow.3.xml:226(title)
+#: pwconv.8.xml:250(title) pwck.8.xml:279(title) porttime.5.xml:130(title)
+#: passwd.5.xml:160(title) passwd.1.xml:413(title) newusers.8.xml:411(title)
+#: newgrp.1.xml:121(title) logoutd.8.xml:89(title)
+#: login.access.5.xml:121(title) login.1.xml:338(title) limits.5.xml:196(title)
+#: lastlog.8.xml:217(title) gshadow.5.xml:156(title) grpck.8.xml:221(title)
+#: groups.1.xml:100(title) groupmod.8.xml:222(title) groupmems.8.xml:211(title)
+#: groupdel.8.xml:157(title) groupadd.8.xml:250(title) gpasswd.1.xml:279(title)
+#: faillog.8.xml:243(title) faillog.5.xml:96(title) expiry.1.xml:121(title)
+#: chsh.1.xml:167(title) chpasswd.8.xml:255(title) chgpasswd.8.xml:213(title)
+#: chfn.1.xml:207(title) chage.1.xml:262(title)
+msgid "FILES"
+msgstr "FILE"
+
+#: vipw.8.xml:198(filename) usermod.8.xml:545(filename)
+#: userdel.8.xml:208(filename) useradd.8.xml:721(filename)
+#: sg.1.xml:125(filename) pwck.8.xml:282(filename) newusers.8.xml:426(filename)
+#: newgrp.1.xml:136(filename) gshadow.5.xml:159(filename)
+#: grpck.8.xml:224(filename) groups.1.xml:103(filename)
+#: groupmod.8.xml:225(filename) groupmems.8.xml:214(filename)
+#: groupdel.8.xml:160(filename) groupadd.8.xml:253(filename)
+#: gpasswd.1.xml:72(filename) gpasswd.1.xml:75(filename)
+#: gpasswd.1.xml:282(filename) chgpasswd.8.xml:216(filename)
+msgid "/etc/group"
+msgstr "/etc/group"
+
+# type: Plain text
+#: vipw.8.xml:200(para) usermod.8.xml:547(para) userdel.8.xml:210(para)
+#: useradd.8.xml:723(para) sg.1.xml:127(para) pwck.8.xml:284(para)
+#: newusers.8.xml:428(para) newgrp.1.xml:138(para) gshadow.5.xml:161(para)
+#: grpck.8.xml:226(para) groups.1.xml:105(para) groupmod.8.xml:227(para)
+#: groupmems.8.xml:216(para) groupdel.8.xml:162(para) groupadd.8.xml:255(para)
+#: gpasswd.1.xml:284(para) chgpasswd.8.xml:218(para)
+msgid "Group account information."
+msgstr "Informazioni sugli account di gruppo."
+
+#: vipw.8.xml:204(filename) usermod.8.xml:551(filename)
+#: useradd.8.xml:727(filename) sg.1.xml:131(filename)
+#: newusers.8.xml:432(filename) newgrp.1.xml:142(filename)
+#: gshadow.5.xml:165(filename) grpck.8.xml:230(filename)
+#: groupmod.8.xml:231(filename) groupmems.8.xml:220(filename)
+#: groupdel.8.xml:166(filename) groupadd.8.xml:259(filename)
+#: gpasswd.1.xml:76(filename) gpasswd.1.xml:288(filename)
+#: chgpasswd.8.xml:222(filename)
+msgid "/etc/gshadow"
+msgstr "/etc/gshadow"
+
+# type: Plain text
+#: vipw.8.xml:206(para) usermod.8.xml:553(para) useradd.8.xml:729(para)
+#: sg.1.xml:133(para) newusers.8.xml:434(para) newgrp.1.xml:144(para)
+#: gshadow.5.xml:167(para) grpck.8.xml:232(para) groupmod.8.xml:233(para)
+#: groupdel.8.xml:168(para) groupadd.8.xml:261(para) gpasswd.1.xml:290(para)
+#: chgpasswd.8.xml:224(para)
+msgid "Secure group account information."
+msgstr "Informazioni sicure sugli account di gruppo."
+
+#: vipw.8.xml:210(filename) usermod.8.xml:563(filename)
+#: userdel.8.xml:220(filename) useradd.8.xml:709(filename)
+#: su.1.xml:369(filename) sg.1.xml:113(filename) shadow.5.xml:258(filename)
+#: pwck.8.xml:288(filename) passwd.5.xml:163(filename)
+#: passwd.1.xml:416(filename) newusers.8.xml:414(filename)
+#: newgrp.1.xml:124(filename) login.1.xml:353(filename)
+#: grpck.8.xml:236(filename) groupmod.8.xml:243(filename)
+#: expiry.1.xml:124(filename) chsh.1.xml:170(filename)
+#: chpasswd.8.xml:258(filename) chfn.1.xml:216(filename)
+#: chage.1.xml:266(filename)
+msgid "/etc/passwd"
+msgstr "/etc/passwd"
+
+# type: Plain text
+#: vipw.8.xml:212(para) usermod.8.xml:565(para) userdel.8.xml:222(para)
+#: useradd.8.xml:711(para) su.1.xml:371(para) sg.1.xml:115(para)
+#: shadow.5.xml:260(para) pwck.8.xml:290(para) passwd.5.xml:165(para)
+#: passwd.1.xml:418(para) newusers.8.xml:416(para) newgrp.1.xml:126(para)
+#: login.1.xml:355(para) grpck.8.xml:238(para) groupmod.8.xml:245(para)
+#: expiry.1.xml:126(para) chsh.1.xml:172(para) chpasswd.8.xml:260(para)
+#: chfn.1.xml:218(para) chage.1.xml:269(para)
+msgid "User account information."
+msgstr "Informazioni sugli account utente."
+
+#: vipw.8.xml:216(filename) usermod.8.xml:569(filename)
+#: userdel.8.xml:226(filename) useradd.8.xml:715(filename)
+#: su.1.xml:375(filename) sg.1.xml:119(filename) shadow.5.xml:264(filename)
+#: shadow.3.xml:229(filename) pwck.8.xml:294(filename)
+#: passwd.5.xml:169(filename) passwd.1.xml:422(filename)
+#: newusers.8.xml:420(filename) newgrp.1.xml:130(filename)
+#: login.1.xml:359(filename) expiry.1.xml:130(filename)
+#: chpasswd.8.xml:264(filename) chage.1.xml:274(filename)
+msgid "/etc/shadow"
+msgstr "/etc/shadow"
+
+# type: Plain text
+#: vipw.8.xml:218(para) usermod.8.xml:571(para) userdel.8.xml:228(para)
+#: useradd.8.xml:717(para) su.1.xml:377(para) sg.1.xml:121(para)
+#: shadow.5.xml:266(para) shadow.3.xml:231(para) pwck.8.xml:296(para)
+#: passwd.1.xml:424(para) newusers.8.xml:422(para) newgrp.1.xml:132(para)
+#: login.1.xml:361(para) expiry.1.xml:132(para) chpasswd.8.xml:266(para)
+#: chage.1.xml:277(para)
+msgid "Secure user account information."
+msgstr "Informazioni sicure sugli account utente."
+
+# type: SH
+#: vipw.8.xml:225(title) usermod.8.xml:590(title) userdel.8.xml:325(title)
+#: useradd.8.xml:835(title) suauth.5.xml:222(title) su.1.xml:437(title)
+#: sg.1.xml:140(title) shadow.5.xml:283(title) shadow.3.xml:238(title)
+#: pwconv.8.xml:262(title) pwck.8.xml:354(title) porttime.5.xml:142(title)
+#: passwd.5.xml:188(title) passwd.1.xml:494(title) nologin.8.xml:81(title)
+#: newusers.8.xml:465(title) newgrp.1.xml:151(title)
+#: login.defs.5.xml:547(title) login.access.5.xml:133(title)
+#: login.1.xml:398(title) limits.5.xml:206(title) gshadow.5.xml:174(title)
+#: grpck.8.xml:290(title) groups.1.xml:112(title) groupmod.8.xml:321(title)
+#: groupmems.8.xml:229(title) groupdel.8.xml:214(title)
+#: groupadd.8.xml:341(title) gpasswd.1.xml:297(title) faillog.8.xml:255(title)
+#: faillog.5.xml:108(title) expiry.1.xml:139(title) chsh.1.xml:191(title)
+#: chpasswd.8.xml:285(title) chgpasswd.8.xml:237(title) chfn.1.xml:225(title)
+#: chage.1.xml:317(title)
+msgid "SEE ALSO"
+msgstr "VEDERE ANCHE"
+
+# type: Plain text
+#: vipw.8.xml:226(para)
+msgid ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry condition=\"tcb"
+"\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+"condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry condition=\"tcb"
+"\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+"condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>"
+
+#: usermod.8.xml:46(firstname) userdel.8.xml:45(firstname)
+#: useradd.8.xml:58(firstname) su.1.xml:56(firstname) sg.1.xml:40(firstname)
+#: shadow.5.xml:39(firstname) shadow.3.xml:39(firstname)
+#: pwck.8.xml:45(firstname) porttime.5.xml:39(firstname)
+#: passwd.5.xml:39(firstname) passwd.1.xml:46(firstname)
+#: newusers.8.xml:55(firstname) newgrp.1.xml:40(firstname)
+#: logoutd.8.xml:39(firstname) login.defs.5.xml:106(firstname)
+#: login.1.xml:72(firstname) lastlog.8.xml:41(firstname)
+#: grpck.8.xml:40(firstname) groups.1.xml:39(firstname)
+#: groupmod.8.xml:40(firstname) groupdel.8.xml:40(firstname)
+#: groupadd.8.xml:42(firstname) faillog.8.xml:39(firstname)
+#: faillog.5.xml:39(firstname) expiry.1.xml:43(firstname)
+#: chsh.1.xml:42(firstname) chpasswd.8.xml:43(firstname)
+#: chfn.1.xml:42(firstname) chage.1.xml:40(firstname)
+msgid "Julianne Frances"
+msgstr ""
+
+#: usermod.8.xml:47(surname) userdel.8.xml:46(surname)
+#: useradd.8.xml:59(surname) su.1.xml:57(surname) sg.1.xml:41(surname)
+#: shadow.5.xml:40(surname) shadow.3.xml:40(surname) pwck.8.xml:46(surname)
+#: porttime.5.xml:40(surname) passwd.5.xml:40(surname) passwd.1.xml:47(surname)
+#: newusers.8.xml:56(surname) newgrp.1.xml:41(surname)
+#: logoutd.8.xml:40(surname) login.defs.5.xml:107(surname)
+#: login.1.xml:73(surname) lastlog.8.xml:42(surname) grpck.8.xml:41(surname)
+#: groups.1.xml:40(surname) groupmod.8.xml:41(surname)
+#: groupdel.8.xml:41(surname) groupadd.8.xml:43(surname)
+#: faillog.8.xml:40(surname) faillog.5.xml:40(surname) expiry.1.xml:44(surname)
+#: chsh.1.xml:43(surname) chpasswd.8.xml:44(surname) chfn.1.xml:43(surname)
+#: chage.1.xml:41(surname)
+msgid "Haugh"
+msgstr ""
+
+#: usermod.8.xml:48(contrib) userdel.8.xml:47(contrib)
+#: useradd.8.xml:60(contrib) sg.1.xml:42(contrib) newusers.8.xml:57(contrib)
+#: newgrp.1.xml:42(contrib) logoutd.8.xml:41(contrib)
+#: login.defs.5.xml:108(contrib) groups.1.xml:41(contrib)
+#: groupmod.8.xml:42(contrib) groupdel.8.xml:42(contrib)
+#: groupadd.8.xml:44(contrib) chpasswd.8.xml:45(contrib)
+msgid "Creation, 1991"
+msgstr ""
+
+#: usermod.8.xml:64(refentrytitle) usermod.8.xml:71(refname)
+#: usermod.8.xml:77(command) login.defs.5.xml:510(term)
+msgid "usermod"
+msgstr "usermod"
+
+# type: Plain text
+#: usermod.8.xml:72(refpurpose)
+msgid "modify a user account"
+msgstr "modifica l'account di un utente"
+
+# type: TH
+#: usermod.8.xml:81(replaceable) userdel.8.xml:78(replaceable)
+#: useradd.8.xml:92(replaceable) passwd.1.xml:82(replaceable)
+#: chsh.1.xml:78(replaceable) chfn.1.xml:78(replaceable)
+#: chage.1.xml:75(replaceable)
+msgid "LOGIN"
+msgstr "LOGIN"
+
+# type: Plain text
+#: usermod.8.xml:87(para)
+msgid ""
+"The <command>usermod</command> command modifies the system account files to "
+"reflect the changes that are specified on the command line."
+msgstr ""
+"Il comando <command>usermod</command> modifica i file di account del sistema "
+"in modo da riflettere i cambiamenti che sono specificati sulla riga di "
+"comando."
+
+# type: TP
+#: usermod.8.xml:95(para)
+msgid "The options which apply to the <command>usermod</command> command are:"
+msgstr "Il comando <command>usermod</command> accetta le seguenti opzioni:"
+
+# type: IP
+#: usermod.8.xml:101(term)
+msgid "<option>-a</option>, <option>--append</option>"
+msgstr "<option>-a</option>, <option>--append</option>"
+
+# type: IP
+#: usermod.8.xml:105(para)
+msgid ""
+"Add the user to the supplementary group(s). Use only with the <option>-G</"
+"option> option."
+msgstr ""
+"Aggiunge l'utente al/i gruppo/i supplmentare/i. Usare solo con l'opzione "
+"<option>-G</option>."
+
+# type: IP
+#: usermod.8.xml:112(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-b</option>, <option>--badnames</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: usermod.8.xml:116(para) useradd.8.xml:135(para) pwck.8.xml:190(para)
+#: newusers.8.xml:276(para)
+msgid "Allow names that do not conform to standards."
+msgstr ""
+
+# type: TP
+#: usermod.8.xml:122(term) useradd.8.xml:162(term)
+msgid ""
+"<option>-c</option>, <option>--comment</option>&nbsp;<replaceable>COMMENT</"
+"replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--comment</option>&nbsp;<replaceable>COMMENTO</"
+"replaceable>"
+
+# type: Plain text
+#: usermod.8.xml:126(para)
+msgid ""
+"The new value of the user's password file comment field. It is normally "
+"modified using the <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> utility."
+msgstr ""
+"Il nuovo valore per il campo commento dell'utente nel file password. "
+"Normalmente viene modificato usando l'utilità "
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+# type: TP
+#: usermod.8.xml:135(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home-dir</option>&nbsp;"
+#| "<replaceable>HOME_DIR</replaceable>"
+msgid ""
+"<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home-dir</option>&nbsp;<replaceable>HOME_DIR</"
+"replaceable>"
+
+# type: Plain text
+#: usermod.8.xml:139(para)
+msgid "The user's new login directory."
+msgstr "La nuova directory home dell'utente."
+
+# type: Plain text
+#: usermod.8.xml:142(para)
+msgid ""
+"If the <option>-m</option> option is given, the contents of the current home "
+"directory will be moved to the new home directory, which is created if it "
+"does not already exist."
+msgstr ""
+"Se è data l'opzione <option>-m</option> il contenuto della directory home "
+"corrente sarà spostato nella nuova directory home, che viene creata se non "
+"esiste già."
+
+# type: TP
+#: usermod.8.xml:151(term) useradd.8.xml:200(term) useradd.8.xml:577(term)
+msgid ""
+"<option>-e</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>EXPIRE_DATE</replaceable>"
+msgstr ""
+"<option>-e</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>DATA_SCADENZA</replaceable>"
+
+# type: Plain text
+#: usermod.8.xml:155(para) useradd.8.xml:204(para)
+msgid ""
+"The date on which the user account will be disabled. The date is specified "
+"in the format <emphasis remap=\"I\">YYYY-MM-DD</emphasis>."
+msgstr ""
+"La data in cui l'account dell'utente verrà disabilitato. La data è "
+"specificata nel formato <emphasis remap=\"I\">AAAA-MM-GG</emphasis>."
+
+#: usermod.8.xml:159(para)
+msgid ""
+"An empty <replaceable>EXPIRE_DATE</replaceable> argument will disable the "
+"expiration of the account."
+msgstr ""
+"Un argomento <replaceable>DATA_SCADENZA</replaceable> vuoto disabilita la "
+"scadenza dell'account."
+
+# type: Plain text
+#: usermod.8.xml:163(para) usermod.8.xml:184(para)
+msgid ""
+"This option requires a <filename>/etc/shadow</filename> file. A <filename>/"
+"etc/shadow</filename> entry will be created if there were none."
+msgstr ""
+"Questa opzione richiede il file <filename>/etc/shadow</filename>. Se non c'è "
+"ancora viene creata una voce nel file <filename>/etc/shadow</filename>."
+
+# type: TP
+#: usermod.8.xml:171(term) useradd.8.xml:217(term) useradd.8.xml:589(term)
+msgid ""
+"<option>-f</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-f</option>, <option>--inactive</option>&nbsp;<replaceable>INATTIVO</"
+"replaceable>"
+
+# type: Plain text
+#: usermod.8.xml:175(para)
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled."
+msgstr ""
+"Il numero di giorni dopo la scadenza di una password prima che l'account "
+"venga disabilitato permanentemente."
+
+# type: Plain text
+#: usermod.8.xml:179(para)
+msgid ""
+"A value of 0 disables the account as soon as the password has expired, and a "
+"value of -1 disables the feature."
+msgstr ""
+"Il valore 0 disabilita l'account non appena la password è scaduta, e il "
+"valore -1 disabilita questa funzionalità."
+
+# type: IP
+#: usermod.8.xml:192(term) useradd.8.xml:236(term) useradd.8.xml:604(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GROUP</"
+"replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GRUPPO</"
+"replaceable>"
+
+# type: Plain text
+#: usermod.8.xml:196(para)
+msgid ""
+"The group name or number of the user's new initial login group. The group "
+"must exist."
+msgstr ""
+"Il nome o numero del gruppo da assegnare alla connessione dell'utente. Il "
+"gruppo deve esistere."
+
+#: usermod.8.xml:200(para)
+msgid ""
+"Any file from the user's home directory owned by the previous primary group "
+"of the user will be owned by this new group."
+msgstr ""
+"Tutti i file nella directory home dell'utente che hanno come gruppo il "
+"precedente gruppo primario dell'utente stesso verranno modificati perché "
+"abbiano questo nuovo gruppo."
+
+#: usermod.8.xml:204(para)
+msgid ""
+"The group ownership of files outside of the user's home directory must be "
+"fixed manually."
+msgstr ""
+"Il gruppo dei file che si trovano all'esterno della directory home "
+"dell'utente andrà modificato manualmente."
+
+#: usermod.8.xml:211(term) useradd.8.xml:263(term)
+msgid ""
+"<option>-G</option>, <option>--groups</option>&nbsp;<replaceable>GROUP1</"
+"replaceable>[<emphasis remap=\"I\">,GROUP2,...</emphasis>[<emphasis remap=\"I"
+"\">,GROUPN</emphasis>]]]"
+msgstr ""
+"<option>-G</option>, <option>--groups</option>&nbsp;<replaceable>GRUPPO1</"
+"replaceable>[<emphasis remap=\"I\">,GRUPPO2,...</emphasis>[<emphasis remap="
+"\"I\">,GRUPPON</emphasis>]]]"
+
+# type: Plain text
+#: usermod.8.xml:215(para)
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option."
+msgstr ""
+"Una lista di gruppi supplementari di cui l'utente è altresì membro. Ciascun "
+"gruppo è separato dal successivo da una virgola, senza spazi bianchi "
+"intermedi. I gruppi sono soggetti alle stesse restrizioni del gruppo dato "
+"con l'opzione <option>-g</option>."
+
+# type: Plain text
+#: usermod.8.xml:222(para)
+msgid ""
+"If the user is currently a member of a group which is not listed, the user "
+"will be removed from the group. This behaviour can be changed via the "
+"<option>-a</option> option, which appends the user to the current "
+"supplementary group list."
+msgstr ""
+"Se l'utente è attualmente membro di un gruppo che non è elencato, l'utente "
+"verrà rimosso dal gruppo. Questo comportamento può essere cambiato con "
+"l'opzione <option>-a</option> che aggiunge all'utente i gruppi supplementari "
+"dei quali fa attualmente parte."
+
+# type: IP
+#: usermod.8.xml:231(term)
+msgid ""
+"<option>-l</option>, <option>--login</option>&nbsp;<replaceable>NEW_LOGIN</"
+"replaceable>"
+msgstr ""
+"<option>-l</option>, <option>--login</option>&nbsp;<replaceable>NUOVO_LOGIN</"
+"replaceable>"
+
+# type: Plain text
+#: usermod.8.xml:235(para)
+msgid ""
+"The name of the user will be changed from <replaceable>LOGIN</replaceable> "
+"to <replaceable>NEW_LOGIN</replaceable>. Nothing else is changed. In "
+"particular, the user's home directory or mail spool should probably be "
+"renamed manually to reflect the new login name."
+msgstr ""
+"Il nome dell'utente verrà cambiato da <replaceable>LOGIN</replaceable> a "
+"<replaceable>NUOVO_LOGIN</replaceable>. Niente altro viene cambiato. In "
+"particolare, la directory home dell'utente e la casella di posta dovrebbero "
+"probabilmente essere modificate manualmente in modo da riflettere il nuovo "
+"nome di login."
+
+# type: IP
+#: usermod.8.xml:245(term)
+msgid "<option>-L</option>, <option>--lock</option>"
+msgstr "<option>-L</option>, <option>--lock</option>"
+
+#: usermod.8.xml:249(para)
+msgid ""
+"Lock a user's password. This puts a '!' in front of the encrypted password, "
+"effectively disabling the password. You can't use this option with <option>-"
+"p</option> or <option>-U</option>."
+msgstr ""
+"Blocca la password di un utente. Questo inserisce un «!» davanti alla "
+"password cifrata, disabilitandola. Non si può utilizzare questa opzione con "
+"le opzioni <option>-p</option> e <option>-U</option>."
+
+#: usermod.8.xml:255(para)
+msgid ""
+"Note: if you wish to lock the account (not only access with a password), you "
+"should also set the <replaceable>EXPIRE_DATE</replaceable> to "
+"<replaceable>1</replaceable>."
+msgstr ""
+"Nota: se si vuole bloccare l'account (non solo l'accesso tramite password), "
+"si deve anche impostare <replaceable>DATA_SCADENZA</replaceable> a "
+"<replaceable>1</replaceable>."
+
+# type: IP
+#: usermod.8.xml:264(term)
+msgid "<option>-m</option>, <option>--move-home</option>"
+msgstr "<option>-m</option>, <option>--move-home</option>"
+
+#: usermod.8.xml:268(para)
+msgid "Move the content of the user's home directory to the new location."
+msgstr ""
+"Sposta il contenuto della directory home di un utente nella nuova posizione."
+
+# type: IP
+#: usermod.8.xml:272(para)
+msgid ""
+"This option is only valid in combination with the <option>-d</option> (or "
+"<option>--home</option>) option."
+msgstr ""
+"Questa opzione è valida solo in combinazioone con l'opzione <option>-d</"
+"option> (o <option>--home</option>)."
+
+#: usermod.8.xml:276(para)
+msgid ""
+"<command>usermod</command> will try to adapt the ownership of the files and "
+"to copy the modes, ACL and extended attributes, but manual changes might be "
+"needed afterwards."
+msgstr ""
+"<command>usermod</command> cercherà di adattare la proprietà dei file e di "
+"copiare i permessi, le ACL e gli attributi estesi, ma successive modifiche "
+"manuali potrebbe comunque essere necessarie."
+
+# type: TP
+#: usermod.8.xml:284(term) useradd.8.xml:397(term) groupmod.8.xml:146(term)
+#: groupadd.8.xml:157(term)
+msgid "<option>-o</option>, <option>--non-unique</option>"
+msgstr "<option>-o</option>, <option>--non-unique</option>"
+
+#: usermod.8.xml:288(para)
+msgid ""
+"When used with the <option>-u</option> option, this option allows to change "
+"the user ID to a non-unique value."
+msgstr ""
+"Quando è usata con l'opzione <option>-u</option> questa opzione permette di "
+"modificare l'ID utente in un valore non univoco."
+
+# type: TP
+#: usermod.8.xml:295(term) useradd.8.xml:409(term) groupmod.8.xml:157(term)
+#: groupadd.8.xml:167(term)
+msgid ""
+"<option>-p</option>, <option>--password</option>&nbsp;<replaceable>PASSWORD</"
+"replaceable>"
+msgstr ""
+"<option>-p</option>, <option>--password</option>&nbsp;<replaceable>PASSWORD</"
+"replaceable>"
+
+# type: Plain text
+#: usermod.8.xml:299(para) groupmod.8.xml:161(para)
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>."
+msgstr ""
+"La passwird cifrata, così come viene restituita da "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>."
+
+#: usermod.8.xml:304(para) useradd.8.xml:418(para) groupmod.8.xml:166(para)
+#: groupadd.8.xml:176(para)
+msgid ""
+"<emphasis role=\"bold\">Note:</emphasis> This option is not recommended "
+"because the password (or encrypted password) will be visible by users "
+"listing the processes."
+msgstr ""
+"<emphasis role=\"bold\">Nota:</emphasis> questa opzione non è consigliata "
+"perché la password (o password cifrata) sarà visibile agli utenti che "
+"elencano i processi."
+
+#: usermod.8.xml:309(para)
+msgid ""
+"The password will be written in the local <filename>/etc/passwd</filename> "
+"or <filename>/etc/shadow</filename> file. This might differ from the "
+"password database configured in your PAM configuration."
+msgstr ""
+"La password verrà scritta nel file locale <filename>/etc/passwd</filename> o "
+"<filename>/etc/shadow</filename>. Questo potrebbe essere diverso dal "
+"database delle password configurato per l'utilizzo da PAM."
+
+#: usermod.8.xml:315(para) useradd.8.xml:423(para) groupmod.8.xml:171(para)
+#: groupadd.8.xml:181(para)
+msgid ""
+"You should make sure the password respects the system's password policy."
+msgstr ""
+"Ci si deve accertare che la password rispetti le norme delle password del "
+"sistema."
+
+# type: TP
+#: usermod.8.xml:334(term) userdel.8.xml:158(term) useradd.8.xml:469(term)
+#: groupmod.8.xml:190(term) groupdel.8.xml:113(term) groupadd.8.xml:216(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home-dir</option>&nbsp;"
+#| "<replaceable>HOME_DIR</replaceable>"
+msgid ""
+"<option>-P</option>, <option>--prefix</option>&nbsp;<replaceable>PREFIX_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home-dir</option>&nbsp;<replaceable>HOME_DIR</"
+"replaceable>"
+
+#: usermod.8.xml:338(para) userdel.8.xml:162(para) useradd.8.xml:473(para)
+#: groupmod.8.xml:194(para) groupdel.8.xml:117(para) groupadd.8.xml:220(para)
+msgid ""
+"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."
+msgstr ""
+
+# type: TP
+#: usermod.8.xml:351(term) useradd.8.xml:486(term) useradd.8.xml:624(term)
+#: su.1.xml:186(term) chsh.1.xml:119(term)
+msgid ""
+"<option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SHELL</"
+"replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SHELL</"
+"replaceable>"
+
+# type: Plain text
+#: usermod.8.xml:355(para) chsh.1.xml:123(para)
+msgid ""
+"The name of the user's new login shell. Setting this field to blank causes "
+"the system to select the default login shell."
+msgstr ""
+"Il nome della nuova shell di login dell'utente. Lasciando questo campo vuoto "
+"si fa in modo che il sistema selezioni la shell di login predefinita."
+
+# type: TP
+#: usermod.8.xml:362(term) useradd.8.xml:500(term)
+msgid ""
+"<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+"replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+"replaceable>"
+
+#: usermod.8.xml:366(para)
+msgid "The new numerical value of the user's ID."
+msgstr "Il nuovo valore numerico dell'ID utente."
+
+# type: Plain text
+#: usermod.8.xml:369(para)
+msgid ""
+"This value must be unique, unless the <option>-o</option> option is used. "
+"The value must be non-negative."
+msgstr ""
+"Questo valore deve essere univoco, a meno che non sia utilizzata l'opzione "
+"<option>-o</option>. Il valore non può essere negativo."
+
+# type: Plain text
+#: usermod.8.xml:374(para)
+msgid ""
+"The user's mailbox, and any files which the user owns and which are located "
+"in the user's home directory will have the file user ID changed "
+"automatically."
+msgstr ""
+"La casella di posta dell'utente e ogni altro file di proprietà dell'utente "
+"che si trovi all'interno della directory home avrà l'ID utente cambiato "
+"automaticamente."
+
+#: usermod.8.xml:379(para)
+msgid ""
+"The ownership of files outside of the user's home directory must be fixed "
+"manually."
+msgstr ""
+"La proprietà dei file esterni alla directory home dell'utente va corretta "
+"manualmente."
+
+#: usermod.8.xml:383(para)
+msgid ""
+"No checks will be performed with regard to the <option>UID_MIN</option>, "
+"<option>UID_MAX</option>, <option>SYS_UID_MIN</option>, or "
+"<option>SYS_UID_MAX</option> from <filename>/etc/login.defs</filename>."
+msgstr ""
+"Non vengono fatti controlli riguardo <option>UID_MIN</option>, "
+"<option>UID_MAX</option>, <option>SYS_UID_MIN</option> o "
+"<option>SYS_UID_MAX</option> dal file <filename>/etc/login.defs</filename>."
+
+# type: IP
+#: usermod.8.xml:392(term)
+msgid "<option>-U</option>, <option>--unlock</option>"
+msgstr "<option>-U</option>, <option>--unlock</option>"
+
+#: usermod.8.xml:396(para)
+msgid ""
+"Unlock a user's password. This removes the '!' in front of the encrypted "
+"password. You can't use this option with <option>-p</option> or <option>-L</"
+"option>."
+msgstr ""
+"Sblocca la password di un utente. Questo rimuove il «!» davanti alla "
+"password cifrata. Non si può usare questa opzione con l'opzione <option>-p</"
+"option> o <option>-L</option>."
+
+#: usermod.8.xml:401(para)
+msgid ""
+"Note: if you wish to unlock the account (not only access with a password), "
+"you should also set the <replaceable>EXPIRE_DATE</replaceable> (for example "
+"to <replaceable>99999</replaceable>, or to the <option>EXPIRE</option> value "
+"from <filename>/etc/default/useradd</filename>)."
+msgstr ""
+"Nota: se si vuole sbloccare l'account (non solo l'accesso con password) si "
+"deve anche impostare <replaceable>DATA_SCADENZA</replaceable> (per esempio a "
+"<replaceable>99999</replaceable> o al valore <option>EXPIRE</option> dal "
+"file <filename>/etc/default/useradd</filename>)."
+
+# type: IP
+#: usermod.8.xml:412(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+#| "replaceable>|<replaceable>RANGE</replaceable>"
+msgid ""
+"<option>-v</option>, <option>--add-subuids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+"replaceable>|<replaceable>INTERVALLO</replaceable>"
+
+#: usermod.8.xml:416(para)
+msgid "Add a range of subordinate uids to the user's account."
+msgstr ""
+
+#: usermod.8.xml:419(para) usermod.8.xml:457(para)
+msgid ""
+"This option may be specified multiple times to add multiple ranges to a "
+"users account."
+msgstr ""
+
+#: usermod.8.xml:422(para) usermod.8.xml:442(para)
+#, fuzzy
+#| msgid ""
+#| "No checks will be performed with regard to the <option>UID_MIN</option>, "
+#| "<option>UID_MAX</option>, <option>SYS_UID_MIN</option>, or "
+#| "<option>SYS_UID_MAX</option> from <filename>/etc/login.defs</filename>."
+msgid ""
+"No checks will be performed with regard to <option>SUB_UID_MIN</option>, "
+"<option>SUB_UID_MAX</option>, or <option>SUB_UID_COUNT</option> from /etc/"
+"login.defs."
+msgstr ""
+"Non vengono fatti controlli riguardo <option>UID_MIN</option>, "
+"<option>UID_MAX</option>, <option>SYS_UID_MIN</option> o "
+"<option>SYS_UID_MAX</option> dal file <filename>/etc/login.defs</filename>."
+
+# type: IP
+#: usermod.8.xml:430(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+#| "replaceable>|<replaceable>RANGE</replaceable>"
+msgid ""
+"<option>-V</option>, <option>--del-subuids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+"replaceable>|<replaceable>INTERVALLO</replaceable>"
+
+#: usermod.8.xml:434(para)
+msgid "Remove a range of subordinate uids from the user's account."
+msgstr ""
+
+#: usermod.8.xml:437(para)
+msgid ""
+"This option may be specified multiple times to remove multiple ranges to a "
+"users account. When both <option>--del-subuids</option> and <option>--add-"
+"subuids</option> are specified, the removal of all subordinate uid ranges "
+"happens before any subordinate uid range is added."
+msgstr ""
+
+# type: IP
+#: usermod.8.xml:450(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+#| "replaceable>|<replaceable>RANGE</replaceable>"
+msgid ""
+"<option>-w</option>, <option>--add-subgids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+"replaceable>|<replaceable>INTERVALLO</replaceable>"
+
+#: usermod.8.xml:454(para)
+msgid "Add a range of subordinate gids to the user's account."
+msgstr ""
+
+#: usermod.8.xml:460(para) usermod.8.xml:480(para)
+#, fuzzy
+#| msgid ""
+#| "No checks will be performed with regard to the <option>GID_MIN</option>, "
+#| "<option>GID_MAX</option>, <option>SYS_GID_MIN</option>, or "
+#| "<option>SYS_GID_MAX</option> from <filename>/etc/login.defs</filename>."
+msgid ""
+"No checks will be performed with regard to <option>SUB_GID_MIN</option>, "
+"<option>SUB_GID_MAX</option>, or <option>SUB_GID_COUNT</option> from /etc/"
+"login.defs."
+msgstr ""
+"Non verrà effettuato nessun controllo riguardo i limiti <option>GID_MIN</"
+"option>, <option>GID_MAX</option>, <option>SYS_GID_MIN</option> o "
+"<option>SYS_GID_MAX</option> definiti in <filename>/etc/login.defs</"
+"filename>."
+
+# type: IP
+#: usermod.8.xml:468(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+#| "replaceable>|<replaceable>RANGE</replaceable>"
+msgid ""
+"<option>-W</option>, <option>--del-subgids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+"replaceable>|<replaceable>INTERVALLO</replaceable>"
+
+#: usermod.8.xml:472(para)
+#, fuzzy
+#| msgid "Remove any SELinux user mapping for the user's login."
+msgid "Remove a range of subordinate gids from the user's account."
+msgstr "Rimuove tutti gli utenti SELinux assegnati al login utente."
+
+#: usermod.8.xml:475(para)
+msgid ""
+"This option may be specified multiple times to remove multiple ranges to a "
+"users account. When both <option>--del-subgids</option> and <option>--add-"
+"subgids</option> are specified, the removal of all subordinate gid ranges "
+"happens before any subordinate gid range is added."
+msgstr ""
+
+# type: IP
+#: usermod.8.xml:488(term) useradd.8.xml:535(term)
+msgid ""
+"<option>-Z</option>, <option>--selinux-user</option>&nbsp;"
+"<replaceable>SEUSER</replaceable>"
+msgstr ""
+"<option>-Z</option>, <option>--selinux-user</option>&nbsp;"
+"<replaceable>UTENTESE</replaceable>"
+
+#: usermod.8.xml:492(para)
+msgid "The new SELinux user for the user's login."
+msgstr "Il nuovo utente SELinux per il login dell'utente."
+
+# type: Plain text
+#: usermod.8.xml:495(para)
+msgid ""
+"A blank <replaceable>SEUSER</replaceable> will remove the SELinux user "
+"mapping for user <replaceable>LOGIN</replaceable> (if any)."
+msgstr ""
+"Un <replaceable>UTENTESE</replaceable> vuoto rimuoverà la mappatura per "
+"l'utente SELinux da <replaceable>LOGIN</replaceable> (se presente)."
+
+# type: SH
+#: usermod.8.xml:506(title) userdel.8.xml:298(title) useradd.8.xml:652(title)
+#: su.1.xml:330(title) shadow.3.xml:218(title) passwd.1.xml:377(title)
+#: newusers.8.xml:363(title) login.1.xml:260(title) lastlog.8.xml:229(title)
+#: groupdel.8.xml:133(title) groupadd.8.xml:274(title) gpasswd.1.xml:252(title)
+#: faillog.8.xml:232(title) chpasswd.8.xml:231(title)
+#: chgpasswd.8.xml:186(title)
+msgid "CAVEATS"
+msgstr "AVVISI/CAVEAT"
+
+#: usermod.8.xml:507(para)
+#, fuzzy
+#| msgid ""
+#| "You must make certain that the named user is not executing any processes "
+#| "when this command is being executed if the user's numerical user ID, the "
+#| "user's name, or the user's home directory is being changed. "
+#| "<command>usermod</command> checks this on Linux, but only check if the "
+#| "user is logged in according to utmp on other architectures."
+msgid ""
+"You must make certain that the named user is not executing any processes "
+"when this command is being executed if the user's numerical user ID, the "
+"user's name, or the user's home directory is being changed. "
+"<command>usermod</command> checks this on Linux. On other platforms it only "
+"uses utmp to check if the user is logged in."
+msgstr ""
+"Se si cambia l'ID numerico, il nome dell'utente o la sua directory home, si "
+"deve verificare che l'utente in questione non stia eseguendo nessun processo "
+"al momento dell'esecuzione del comando.\n"
+"<command>usermod</command> effettua questo controllo in Linux, ma su altri "
+"sistemi controlla solo che non sia registrato come collegato in utmp."
+
+#: usermod.8.xml:514(para)
+msgid ""
+"You must change the owner of any <command>crontab</command> files or "
+"<command>at</command> jobs manually."
+msgstr ""
+"Si deve cambiare manualmente il proprietario di eventuali file "
+"<command>crontab</command> e compiti <command>at</command>."
+
+#: usermod.8.xml:518(para)
+msgid "You must make any changes involving NIS on the NIS server."
+msgstr ""
+"Si devono apportare tutte le modifiche che riguardano NIS sul server NIS."
+
+# type: IP
+#: usermod.8.xml:33(term) useradd.8.xml:33(term) login.defs.5.xml:33(term)
+#: lastlog.8.xml:33(term)
+#, fuzzy
+#| msgid "<option>SYS_UID_MAX</option> (number)"
+msgid "<option>LASTLOG_UID_MAX</option> (number)"
+msgstr "<option>SYS_UID_MAX</option> (numerico)"
+
+#: usermod.8.xml:35(para) useradd.8.xml:35(para) login.defs.5.xml:35(para)
+#: lastlog.8.xml:35(para)
+msgid ""
+"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."
+msgstr ""
+
+#: usermod.8.xml:41(para) useradd.8.xml:41(para) login.defs.5.xml:41(para)
+#: lastlog.8.xml:41(para)
+msgid ""
+"No <option>LASTLOG_UID_MAX</option> option present in the configuration "
+"means that there is no user ID limit for writing lastlog entries."
+msgstr ""
+
+# type: IP
+#: usermod.8.xml:32(term) userdel.8.xml:32(term) useradd.8.xml:32(term)
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>MAIL_DIR</option> (string)"
+msgstr "<option>MAIL_DIR</option> (testo)"
+
+#: usermod.8.xml:34(para) userdel.8.xml:34(para) useradd.8.xml:34(para)
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"The mail spool directory. This is needed to manipulate the mailbox when its "
+"corresponding user account is modified or deleted. If not specified, a "
+"compile-time default is used."
+msgstr ""
+"La directory di spool per la posta. Questa è necessaria per manipolare la "
+"casella di posta quando il corrispondente account utente viene modificato o "
+"cancellato. Se non è specificata viene utilizzato un valore impostato al "
+"momento della compilazione."
+
+# type: IP
+#: usermod.8.xml:41(term) userdel.8.xml:41(term) useradd.8.xml:41(term)
+#: su.1.xml:41(term) login.defs.5.xml:41(term) login.1.xml:41(term)
+msgid "<option>MAIL_FILE</option> (string)"
+msgstr "<option>MAIL_FILE</option> (testo)"
+
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"Defines the location of the users mail spool files relatively to their home "
+"directory."
+msgstr ""
+"Imposta la posizione delle caselle di posta degli utenti relative alla loro "
+"directory home."
+
+#. FIXME: MAIL_FILE not used in useradd
+#: usermod.8.xml:50(para) userdel.8.xml:50(para) useradd.8.xml:50(para)
+#: su.1.xml:50(para) login.defs.5.xml:50(para) login.1.xml:50(para)
+msgid ""
+"The <option>MAIL_DIR</option> and <option>MAIL_FILE</option> variables are "
+"used by <command>useradd</command>, <command>usermod</command>, and "
+"<command>userdel</command> to create, move, or delete the user's mail spool."
+msgstr ""
+"Le variabili <option>MAIL_DIR</option> e <option>MAIL_FILE</option> vengono "
+"utilizzate da <command>useradd</command>, <command>usermod</command> e "
+"<command>userdel</command> per creare, spostare e cancellare le caselle di "
+"posta dell'utente."
+
+#: usermod.8.xml:56(para) userdel.8.xml:56(para) useradd.8.xml:56(para)
+#: su.1.xml:56(para) login.defs.5.xml:56(para) login.1.xml:56(para)
+msgid ""
+"If <option>MAIL_CHECK_ENAB</option> is set to <replaceable>yes</"
+"replaceable>, they are also used to define the <envar>MAIL</envar> "
+"environment variable."
+msgstr ""
+"Se <option>MAIL_CHECK_ENAB</option> è impostata a <replaceable>yes</"
+"replaceable> allora sono anche utilizzate per impostare la variabile "
+"d'ambiente <envar>MAIL</envar>."
+
+#: usermod.8.xml:30(term) userdel.8.xml:30(term) useradd.8.xml:30(term)
+#: pwconv.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: grpck.8.xml:30(term) groupmod.8.xml:30(term) groupmems.8.xml:30(term)
+#: groupdel.8.xml:30(term) groupadd.8.xml:30(term) gpasswd.1.xml:30(term)
+#: chgpasswd.8.xml:30(term)
+msgid "<option>MAX_MEMBERS_PER_GROUP</option> (number)"
+msgstr "<option>MAX_MEMBERS_PER_GROUP</option> (numero)"
+
+#: usermod.8.xml:32(para) userdel.8.xml:32(para) useradd.8.xml:32(para)
+#: pwconv.8.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: grpck.8.xml:32(para) groupmod.8.xml:32(para) groupmems.8.xml:32(para)
+#: groupdel.8.xml:32(para) groupadd.8.xml:32(para) gpasswd.1.xml:32(para)
+#: chgpasswd.8.xml:32(para)
+msgid ""
+"Maximum members per group entry. When the maximum is reached, a new group "
+"entry (line) is started in <filename>/etc/group</filename> (with the same "
+"name, same password, and same GID)."
+msgstr ""
+"Numero massimo di membri per gruppo. Quando viene raggiunto il massimo, "
+"viene creata una nuova riga per il gruppo nel file <filename>/etc/group</"
+"filename> (con lo stesso nome, stessa password e stesso GID)."
+
+#: usermod.8.xml:37(para) userdel.8.xml:37(para) useradd.8.xml:37(para)
+#: pwconv.8.xml:37(para) newusers.8.xml:37(para) login.defs.5.xml:37(para)
+#: grpck.8.xml:37(para) groupmod.8.xml:37(para) groupmems.8.xml:37(para)
+#: groupdel.8.xml:37(para) groupadd.8.xml:37(para) gpasswd.1.xml:37(para)
+#: chgpasswd.8.xml:37(para)
+msgid ""
+"The default value is 0, meaning that there are no limits in the number of "
+"members in a group."
+msgstr ""
+"Il valore predefinito è 0, che non pone nessun limite al numero di membri "
+"per gruppo."
+
+#. Note: on HP, split groups have the same ID, but different
+#. names.
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: pwconv.8.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: grpck.8.xml:43(para) groupmod.8.xml:43(para) groupmems.8.xml:43(para)
+#: groupdel.8.xml:43(para) groupadd.8.xml:43(para) gpasswd.1.xml:43(para)
+#: chgpasswd.8.xml:43(para)
+msgid ""
+"This feature (split group) permits to limit the length of lines in the group "
+"file. This is useful to make sure that lines for NIS groups are not larger "
+"than 1024 characters."
+msgstr ""
+"Questa opzione (dividi gruppo) permette di limitare la lunghezza delle righe "
+"nel file «group». Questo è utile per essere certi che le righe per gruppi "
+"NIS non eccedano i 1024 caratteri."
+
+#: usermod.8.xml:48(para) userdel.8.xml:48(para) useradd.8.xml:48(para)
+#: pwconv.8.xml:48(para) newusers.8.xml:48(para) login.defs.5.xml:48(para)
+#: grpck.8.xml:48(para) groupmod.8.xml:48(para) groupmems.8.xml:48(para)
+#: groupdel.8.xml:48(para) groupadd.8.xml:48(para) gpasswd.1.xml:48(para)
+#: chgpasswd.8.xml:48(para)
+msgid "If you need to enforce such limit, you can use 25."
+msgstr "Se si deve impostare questo limite, si può usare 25."
+
+#: usermod.8.xml:51(para) userdel.8.xml:51(para) useradd.8.xml:51(para)
+#: pwconv.8.xml:51(para) newusers.8.xml:51(para) login.defs.5.xml:51(para)
+#: grpck.8.xml:51(para) groupmod.8.xml:51(para) groupmems.8.xml:51(para)
+#: groupdel.8.xml:51(para) groupadd.8.xml:51(para) gpasswd.1.xml:51(para)
+#: chgpasswd.8.xml:51(para)
+msgid ""
+"Note: split groups may not be supported by all tools (even in the Shadow "
+"toolsuite). You should not use this variable unless you really need it."
+msgstr ""
+"Nota: la divisione dei gruppi potrebbe non essere supportata da ogni "
+"strumento (anche all'interno del pacchetto Shadow). Non si dovrebbe "
+"utilizzare questa variabile a meno di esserci forzati."
+
+# type: IP
+#: usermod.8.xml:30(term) useradd.8.xml:30(term) newusers.8.xml:30(term)
+#: login.defs.5.xml:30(term)
+#, fuzzy
+#| msgid "<option>SYS_GID_MIN</option> (number)"
+msgid "<option>SUB_GID_MIN</option> (number)"
+msgstr "<option>SYS_GID_MIN</option> (numerico)"
+
+# type: IP
+#: usermod.8.xml:31(term) useradd.8.xml:31(term) newusers.8.xml:31(term)
+#: login.defs.5.xml:31(term)
+#, fuzzy
+#| msgid "<option>SYS_GID_MAX</option> (number)"
+msgid "<option>SUB_GID_MAX</option> (number)"
+msgstr "<option>SYS_GID_MAX</option> (numerico)"
+
+# type: IP
+#: usermod.8.xml:32(term) useradd.8.xml:32(term) newusers.8.xml:32(term)
+#: login.defs.5.xml:32(term)
+#, fuzzy
+#| msgid "<option>SYS_GID_MIN</option> (number)"
+msgid "<option>SUB_GID_COUNT</option> (number)"
+msgstr "<option>SYS_GID_MIN</option> (numerico)"
+
+#: usermod.8.xml:34(para) useradd.8.xml:34(para) newusers.8.xml:34(para)
+#: login.defs.5.xml:34(para)
+msgid ""
+"If <filename>/etc/subuid</filename> exists, the commands <command>useradd</"
+"command> and <command>newusers</command> (unless the user already have "
+"subordinate group IDs) allocate <option>SUB_GID_COUNT</option> unused group "
+"IDs from the range <option>SUB_GID_MIN</option> to <option>SUB_GID_MAX</"
+"option> for each new user."
+msgstr ""
+
+#: usermod.8.xml:42(para) useradd.8.xml:42(para) newusers.8.xml:42(para)
+#: login.defs.5.xml:42(para)
+#, fuzzy
+#| msgid ""
+#| "The default value for <option>SYS_GID_MIN</option> (resp. "
+#| "<option>SYS_GID_MAX</option>) is 101 (resp. <option>GID_MIN</option>-1)."
+msgid ""
+"The default values for <option>SUB_GID_MIN</option>, <option>SUB_GID_MAX</"
+"option>, <option>SUB_GID_COUNT</option> are respectively 100000, 600100000 "
+"and 65536."
+msgstr ""
+"Il valore predefinito per <option>SYS_GID_MIN</option> (rispettivamente "
+"<option>SYS_GID_MAX</option>) è 101 (rispettivamente <option>GID_MIN</"
+"option>-1)."
+
+# type: IP
+#: usermod.8.xml:30(term) useradd.8.xml:30(term) newusers.8.xml:30(term)
+#: login.defs.5.xml:30(term)
+#, fuzzy
+#| msgid "<option>SYS_UID_MIN</option> (number)"
+msgid "<option>SUB_UID_MIN</option> (number)"
+msgstr "<option>SYS_UID_MIN</option> (numerico)"
+
+# type: IP
+#: usermod.8.xml:31(term) useradd.8.xml:31(term) newusers.8.xml:31(term)
+#: login.defs.5.xml:31(term)
+#, fuzzy
+#| msgid "<option>SYS_UID_MAX</option> (number)"
+msgid "<option>SUB_UID_MAX</option> (number)"
+msgstr "<option>SYS_UID_MAX</option> (numerico)"
+
+# type: IP
+#: usermod.8.xml:32(term) useradd.8.xml:32(term) newusers.8.xml:32(term)
+#: login.defs.5.xml:32(term)
+#, fuzzy
+#| msgid "<option>SYS_UID_MIN</option> (number)"
+msgid "<option>SUB_UID_COUNT</option> (number)"
+msgstr "<option>SYS_UID_MIN</option> (numerico)"
+
+#: usermod.8.xml:34(para) useradd.8.xml:34(para) newusers.8.xml:34(para)
+#: login.defs.5.xml:34(para)
+msgid ""
+"If <filename>/etc/subuid</filename> exists, the commands <command>useradd</"
+"command> and <command>newusers</command> (unless the user already have "
+"subordinate user IDs) allocate <option>SUB_UID_COUNT</option> unused user "
+"IDs from the range <option>SUB_UID_MIN</option> to <option>SUB_UID_MAX</"
+"option> for each new user."
+msgstr ""
+
+#: usermod.8.xml:42(para) useradd.8.xml:42(para) newusers.8.xml:42(para)
+#: login.defs.5.xml:42(para)
+#, fuzzy
+#| msgid ""
+#| "The default value for <option>SYS_UID_MIN</option> (resp. "
+#| "<option>SYS_UID_MAX</option>) is 101 (resp. <option>UID_MIN</option>-1)."
+msgid ""
+"The default values for <option>SUB_UID_MIN</option>, <option>SUB_UID_MAX</"
+"option>, <option>SUB_UID_COUNT</option> are respectively 100000, 600100000 "
+"and 65536."
+msgstr ""
+"Il valore predefinito per <option>SYS_UID_MIN</option> (rispettivamente "
+"<option>SYS_UID_MAX</option>) è 101 (rispettivamente <option>UID_MIN</"
+"option>-1)."
+
+# type: IP
+#: usermod.8.xml:30(term) userdel.8.xml:30(term) useradd.8.xml:30(term)
+#: pwck.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>TCB_SYMLINKS</option> (boolean)"
+msgstr "<option>TCB_SYMLINKS</option> (booleano)"
+
+#: usermod.8.xml:37(programlisting) userdel.8.xml:37(programlisting)
+#: useradd.8.xml:37(programlisting) pwck.8.xml:37(programlisting)
+#: login.defs.5.xml:37(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"if ( UID is less than 1000) {\n"
+" use /etc/tcb/user\n"
+"} else if ( UID is less than 1000000) {\n"
+" kilos = UID / 1000\n"
+" use /etc/tcb/:kilos/user\n"
+" make symlink /etc/tcb/user to the above directory\n"
+"} else {\n"
+" megas = UID / 1000000\n"
+" kilos = ( UID / megas * 1000000 ) / 1000\n"
+" use /etc/tcb/:megas/:kilos/user\n"
+" make symlink /etc/tcb/user to the above directory\n"
+"}\n"
+" "
+msgstr ""
+"\n"
+"se ( UID è minore di 1000) {\n"
+" usa /etc/tcb/user\n"
+"} altrimenti se ( UID è minore di 1000000) {\n"
+" migliaia = UID / 1000\n"
+" usa /etc/tcb/:migliaia/user\n"
+" crea link simbolico da /etc/tcb/user alla directory precedente\n"
+"} altrimenti {\n"
+" milioni = UID / 1000000\n"
+" migliaia = ( UID / megas * 1000000 ) / 1000\n"
+" usa /etc/tcb/:milioni/:migliaia/user\n"
+" crea link simbolico da /etc/tcb/user alla directory precedente\n"
+"}\n"
+" "
+
+#: usermod.8.xml:32(para) userdel.8.xml:32(para) useradd.8.xml:32(para)
+#: pwck.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the location of the user tcb directory to "
+"be created will not be automatically set to /etc/tcb/user, but will be "
+"computed depending on the UID of the user, according to the following "
+"algorithm: <placeholder-1/>"
+msgstr ""
+"Se <replaceable>yes</replaceable> la posizione della directory utente tcb "
+"non verrà creata automaticamente come /etc/tcb/user, ma verrà determinato in "
+"base all'UID dell'utente secondo questo algoritmo: <placeholder-1/>"
+
+#: usermod.8.xml:557(filename) userdel.8.xml:214(filename)
+#: useradd.8.xml:757(filename) su.1.xml:381(filename)
+#: pwconv.8.xml:253(filename) passwd.1.xml:428(filename)
+#: newusers.8.xml:438(filename) login.access.5.xml:124(filename)
+#: login.1.xml:389(filename) groupmod.8.xml:237(filename)
+#: groupadd.8.xml:265(filename) chsh.1.xml:182(filename)
+#: chpasswd.8.xml:270(filename) chgpasswd.8.xml:228(filename)
+#: chfn.1.xml:210(filename)
+msgid "/etc/login.defs"
+msgstr "/etc/login.defs"
+
+#: usermod.8.xml:559(para) userdel.8.xml:216(para) useradd.8.xml:759(para)
+#: su.1.xml:383(para) pwconv.8.xml:255(para) passwd.1.xml:430(para)
+#: newusers.8.xml:440(para) login.access.5.xml:126(para) login.1.xml:391(para)
+#: groupmod.8.xml:239(para) groupadd.8.xml:267(para) chsh.1.xml:184(para)
+#: chpasswd.8.xml:272(para) chgpasswd.8.xml:230(para) chfn.1.xml:212(para)
+msgid "Shadow password suite configuration."
+msgstr "Configurazione del pacchetto password shadow"
+
+#: usermod.8.xml:575(filename) userdel.8.xml:232(filename)
+#: useradd.8.xml:745(filename) newusers.8.xml:450(filename)
+#, fuzzy
+#| msgid "/etc/suauth"
+msgid "/etc/subgid"
+msgstr "/etc/suauth"
+
+#: usermod.8.xml:577(para) userdel.8.xml:234(para) useradd.8.xml:747(para)
+#: newusers.8.xml:452(para)
+msgid "Per user subordinate group IDs."
+msgstr ""
+
+#: usermod.8.xml:581(filename) userdel.8.xml:238(filename)
+#: useradd.8.xml:751(filename) newusers.8.xml:456(filename)
+#, fuzzy
+#| msgid "/etc/suauth"
+msgid "/etc/subuid"
+msgstr "/etc/suauth"
+
+#: usermod.8.xml:583(para) userdel.8.xml:240(para) useradd.8.xml:753(para)
+#: newusers.8.xml:458(para)
+msgid "Per user subordinate user IDs."
+msgstr ""
+
+# type: Plain text
+#: usermod.8.xml:591(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <phrase condition=\"subids"
+"\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: userdel.8.xml:63(refentrytitle) userdel.8.xml:70(refname)
+#: userdel.8.xml:75(command) login.defs.5.xml:500(term)
+msgid "userdel"
+msgstr "userdel"
+
+# type: Plain text
+#: userdel.8.xml:71(refpurpose)
+msgid "delete a user account and related files"
+msgstr "rimuove l'account di un utente ed i file relativi"
+
+# type: Plain text
+#: userdel.8.xml:85(para)
+msgid ""
+"The <command>userdel</command> command modifies the system account files, "
+"deleting all entries that refer to the user name <emphasis remap=\"I"
+"\">LOGIN</emphasis>. The named user must exist."
+msgstr ""
+"Il comando <command>userdel</command> modifica i file di account del "
+"sistema, rimuovendo tutte le voci che si riferiscono al nome utente "
+"<emphasis remap=\"I\">LOGIN</emphasis>. L'utente indicato deve esistere."
+
+# type: TP
+#: userdel.8.xml:94(para)
+msgid "The options which apply to the <command>userdel</command> command are:"
+msgstr "Il comando <command>userdel</command> accetta le seguenti opzioni:"
+
+# type: IP
+#: userdel.8.xml:99(term) groupadd.8.xml:100(term) expiry.1.xml:103(term)
+msgid "<option>-f</option>, <option>--force</option>"
+msgstr "<option>-f</option>, <option>--force</option>"
+
+#: userdel.8.xml:103(para)
+msgid ""
+"This option forces the removal of the user account, even if the user is "
+"still logged in. It also forces <command>userdel</command> to remove the "
+"user's home directory and mail spool, even if another user uses the same "
+"home directory or if the mail spool is not owned by the specified user. If "
+"<option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename> and if a group exists with "
+"the same name as the deleted user, then this group will be removed, even if "
+"it is still the primary group of another user."
+msgstr ""
+"Questa opzione forza la cancellazione di un account utente anche se l'utente "
+"è ancora collegato al sistema. Inoltre forza <command>userdel</command> a "
+"rimuovere la directory home dell'utente e la casella di posta anche se un "
+"altro utente usa la stessa directory home o se la casella di posta non è di "
+"proprietà dell'utente specificato. Se <option>USERGROUPS_ENAB</option> è "
+"impostato a <emphasis remap=\"I\">yes</emphasis> in <filename>/etc/login."
+"defs</filename> e se esiste un gruppo con lo stesso nome dell'utente "
+"cancellato, allora il gruppo stesso viene cancellato anche se risulta il "
+"gruppo primario di un altro utente."
+
+#: userdel.8.xml:116(para)
+msgid ""
+"<emphasis>Note:</emphasis> This option is dangerous and may leave your "
+"system in an inconsistent state."
+msgstr ""
+"<emphasis>Nota:</emphasis> questa opzione è pericolosa e può lasciare il "
+"sistema in uno stato incoerente."
+
+# type: IP
+#: userdel.8.xml:129(term)
+msgid "<option>-r</option>, <option>--remove</option>"
+msgstr "<option>-r</option>, <option>--remove</option>"
+
+# type: Plain text
+#: userdel.8.xml:133(para)
+msgid ""
+"Files in the user's home directory will be removed along with the home "
+"directory itself and the user's mail spool. Files located in other file "
+"systems will have to be searched for and deleted manually."
+msgstr ""
+"I file nella home directory dell'utente verranno rimossi insieme alla home "
+"directory stessa e alla casella di posta dell'utente. I file collocati in "
+"altri file system dovranno essere cercati e rimossi manualmente."
+
+#: userdel.8.xml:139(para)
+msgid ""
+"The mail spool is defined by the <option>MAIL_DIR</option> variable in the "
+"<filename>login.defs</filename> file."
+msgstr ""
+"La directory di spool per la posta è definita dalla variabile "
+"<option>MAIL_DIR</option> nel file <filename>login.defs</filename>."
+
+# type: IP
+#: userdel.8.xml:175(term)
+msgid "<option>-Z</option>, <option>--selinux-user</option>"
+msgstr "<option>-Z</option>, <option>--selinux-user</option>"
+
+#: userdel.8.xml:179(para)
+msgid "Remove any SELinux user mapping for the user's login."
+msgstr "Rimuove tutti gli utenti SELinux assegnati al login utente."
+
+#: userdel.8.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>USERDEL_CMD</option> (string)"
+msgstr "<option>USERDEL_CMD</option> (testo)"
+
+#: userdel.8.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If defined, this command is run when removing a user. It should remove any "
+"at/cron/print jobs etc. owned by the user to be removed (passed as the first "
+"argument)."
+msgstr ""
+"Se definito, questo comando viene eseguito quando si cancella un utente. "
+"Dovrebbe rimuovere tutti i compiti di stampa/cron/at di proprietà "
+"dell'utente da cancellare (passato come primo argomento)."
+
+#: userdel.8.xml:40(para) login.defs.5.xml:40(para)
+msgid "The return code of the script is not taken into account."
+msgstr ""
+"Il codice d'uscita restituito dallo script non è preso in considerazione."
+
+#: userdel.8.xml:46(programlisting) login.defs.5.xml:46(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"#! /bin/sh\n"
+"\n"
+"# Check for the required argument.\n"
+"if [ $# != 1 ]; then\n"
+"\techo \"Usage: $0 username\"\n"
+"\texit 1\n"
+"fi\n"
+"\n"
+"# Remove cron jobs.\n"
+"crontab -r -u $1\n"
+"\n"
+"# Remove at jobs.\n"
+"# Note that it will remove any jobs owned by the same UID,\n"
+"# even if it was shared by a different username.\n"
+"AT_SPOOL_DIR=/var/spool/cron/atjobs\n"
+"find $AT_SPOOL_DIR -name \"[^.]*\" -type f -user $1 -delete \\;\n"
+"\n"
+"# Remove print jobs.\n"
+"lprm $1\n"
+"\n"
+"# All done.\n"
+"exit 0\n"
+" "
+msgstr ""
+"\n"
+"#! /bin/sh\n"
+"\n"
+"# Verifica la presenza dell'argomento obbligatorio\n"
+"if [ $# != 1 ]; then\n"
+" echo \"Uso: $0 username\"\n"
+" exit 1\n"
+"fi\n"
+"\n"
+"# Rimuove i compiti di cron\n"
+"crontab -r -u $1\n"
+"\n"
+"# Rimuove i compiti di at\n"
+"# Nota che verranno rimossi tutti i compiti di proprietà dello stesso UID,\n"
+"# anche se condiviso con un altro nome utente.\n"
+"AT_SPOOL_DIR=/var/spool/cron/atjobs\n"
+"find $AT_SPOOL_DIR -name \"[^.]*\" -type f -user $1 -delete \\;\n"
+"\n"
+"# Rimuove le stampe\n"
+"lprm $1\n"
+"\n"
+"# Finito.\n"
+"exit 0\n"
+" "
+
+#: userdel.8.xml:43(para) login.defs.5.xml:43(para)
+msgid ""
+"Here is an example script, which removes the user's cron, at and print jobs: "
+"<placeholder-1/>"
+msgstr ""
+"Ecco uno script di esempio che rimuove i job dell'utente, sia di cron che at "
+"che di stampa: <placeholder-1/>"
+
+# type: IP
+#: userdel.8.xml:32(term) useradd.8.xml:32(term) su.1.xml:32(term)
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>USERGROUPS_ENAB</option> (boolean)"
+msgstr "<option>USERGROUPS_ENAB</option> (booleano)"
+
+#: userdel.8.xml:34(para) useradd.8.xml:34(para) su.1.xml:34(para)
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable setting of the umask group bits to be the same as owner bits "
+"(examples: 022 -&gt; 002, 077 -&gt; 007) for non-root users, if the uid is "
+"the same as gid, and username is the same as the primary group name."
+msgstr ""
+"Abilita l'impostazione dei bit di gruppo di umask in modo che siano gli "
+"stessi dei bit del proprietario (esempio: 022 -&gt; 002, 077 -&gt; 007) per "
+"utenti non root a condizione che uid e gid siano identici e che il nome "
+"utente sia lo stesso del gruppo primario."
+
+#: userdel.8.xml:39(para) useradd.8.xml:39(para) su.1.xml:39(para)
+#: login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, <command>userdel</command> will "
+"remove the user's group if it contains no more members, and "
+"<command>useradd</command> will create by default a group with the name of "
+"the user."
+msgstr ""
+"Se impostato a <replaceable>yes</replaceable>, <command>userdel</command> "
+"cancellerà il gruppo dell'utente se non contiene altri membri, e "
+"<command>useradd</command> creerà automaticamente un gruppo con lo stesso "
+"nome dell'utente."
+
+# type: SH
+#: userdel.8.xml:247(title) useradd.8.xml:766(title) su.1.xml:390(title)
+#: pwck.8.xml:303(title) passwd.1.xml:443(title) grpck.8.xml:245(title)
+#: groupmod.8.xml:252(title) groupdel.8.xml:175(title)
+#: groupadd.8.xml:296(title) chage.1.xml:284(title)
+msgid "EXIT VALUES"
+msgstr "VALORI RESTITUITI"
+
+# type: IP
+#: userdel.8.xml:252(replaceable) useradd.8.xml:771(replaceable)
+#: su.1.xml:409(replaceable) pwck.8.xml:308(replaceable)
+#: passwd.1.xml:448(replaceable) grpck.8.xml:250(replaceable)
+#: groupmod.8.xml:257(replaceable) groupdel.8.xml:180(replaceable)
+#: groupadd.8.xml:301(replaceable) chage.1.xml:289(replaceable)
+msgid "0"
+msgstr "0"
+
+# type: Plain text
+#: userdel.8.xml:254(para) useradd.8.xml:773(para) pwck.8.xml:310(para)
+#: passwd.1.xml:450(para) grpck.8.xml:252(para) groupdel.8.xml:182(para)
+#: groupadd.8.xml:303(para) chage.1.xml:291(para)
+msgid "success"
+msgstr "successo"
+
+# type: IP
+#: userdel.8.xml:258(replaceable) useradd.8.xml:777(replaceable)
+#: su.1.xml:75(manvolnum) su.1.xml:415(replaceable) sg.1.xml:59(manvolnum)
+#: pwck.8.xml:314(replaceable) passwd.1.xml:65(manvolnum)
+#: passwd.1.xml:454(replaceable) newgrp.1.xml:59(manvolnum)
+#: login.1.xml:91(manvolnum) grpck.8.xml:256(replaceable)
+#: groups.1.xml:58(manvolnum) gpasswd.1.xml:63(manvolnum)
+#: expiry.1.xml:62(manvolnum) chsh.1.xml:61(manvolnum) chfn.1.xml:61(manvolnum)
+#: chage.1.xml:59(manvolnum) chage.1.xml:295(replaceable)
+msgid "1"
+msgstr "1"
+
+# type: Plain text
+#: userdel.8.xml:260(para) useradd.8.xml:779(para)
+msgid "can't update password file"
+msgstr "impossibile aggiornare il file delle password"
+
+# type: IP
+#: userdel.8.xml:264(replaceable) useradd.8.xml:783(replaceable)
+#: pwck.8.xml:320(replaceable) passwd.1.xml:460(replaceable)
+#: grpck.8.xml:262(replaceable) groupmod.8.xml:263(replaceable)
+#: groupdel.8.xml:186(replaceable) groupadd.8.xml:307(replaceable)
+#: chage.1.xml:301(replaceable)
+msgid "2"
+msgstr "2"
+
+# type: Plain text
+#: userdel.8.xml:266(para) useradd.8.xml:785(para) pwck.8.xml:316(para)
+#: grpck.8.xml:258(para) groupdel.8.xml:188(para) groupadd.8.xml:309(para)
+#: chage.1.xml:303(para)
+msgid "invalid command syntax"
+msgstr "sintassi del comando errata"
+
+#: userdel.8.xml:270(replaceable) useradd.8.xml:801(replaceable)
+#: pwck.8.xml:344(replaceable) passwd.1.xml:484(replaceable)
+#: groupmod.8.xml:281(replaceable) groupdel.8.xml:192(replaceable)
+msgid "6"
+msgstr "6"
+
+# type: Plain text
+#: userdel.8.xml:272(para)
+msgid "specified user doesn't exist"
+msgstr "l'utente specificato non esiste"
+
+#: userdel.8.xml:278(para)
+msgid "user currently logged in"
+msgstr "utente attualmente connesso al sistema"
+
+# type: IP
+#: userdel.8.xml:282(replaceable) useradd.8.xml:813(replaceable)
+#: groupmod.8.xml:293(replaceable) groupdel.8.xml:204(replaceable)
+#: groupadd.8.xml:331(replaceable)
+msgid "10"
+msgstr "10"
+
+# type: Plain text
+#: userdel.8.xml:284(para) useradd.8.xml:815(para) groupdel.8.xml:206(para)
+#: groupadd.8.xml:333(para)
+msgid "can't update group file"
+msgstr "non è possibile aggiornare il file group"
+
+# type: IP
+#: userdel.8.xml:288(replaceable) useradd.8.xml:819(replaceable)
+#: groupmod.8.xml:305(replaceable)
+msgid "12"
+msgstr "12"
+
+# type: Plain text
+#: userdel.8.xml:290(para)
+msgid "can't remove home directory"
+msgstr "non è possibile cancellare la directory home"
+
+# type: TP
+#: userdel.8.xml:248(para)
+msgid ""
+"The <command>userdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Il comando <command>userdel</command> esce con i seguenti valori: "
+"<placeholder-1/>"
+
+#: userdel.8.xml:299(para)
+msgid ""
+"<command>userdel</command> will not allow you to remove an account if there "
+"are running processes which belong to this account. In that case, you may "
+"have to kill those processes or lock the user's password or account and "
+"remove the account later. The <option>-f</option> option can force the "
+"deletion of this account."
+msgstr ""
+"<command>userdel</command> non permetterà la cancellazione di un account se "
+"ci sono in esecuzione processi dell'account stesso. In quel caso si deve "
+"prima terminare quei processi o bloccare la password o l'account, e "
+"cancellare l'account successivamente. L'opzione <option>-f</option> forza la "
+"cancellazione dell'account."
+
+# type: Plain text
+#: userdel.8.xml:306(para)
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this user."
+msgstr ""
+"Occorre controllare manualmente tutti i file system per assicurarsi che non "
+"rimanga nessun file di proprietà di questo utente."
+
+# type: Plain text
+#: userdel.8.xml:310(para)
+msgid ""
+"You may not remove any NIS attributes on a NIS client. This must be "
+"performed on the NIS server."
+msgstr ""
+"Non è possibile rimuovere nessun attributo NIS su un client NIS. Questo deve "
+"essere fatto sul server NIS."
+
+#: userdel.8.xml:313(para)
+msgid ""
+"If <option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename>, <command>userdel</"
+"command> will delete the group with the same name as the user. To avoid "
+"inconsistencies in the passwd and group databases, <command>userdel</"
+"command> will check that this group is not used as a primary group for "
+"another user, and will just warn without deleting the group otherwise. The "
+"<option>-f</option> option can force the deletion of this group."
+msgstr ""
+"Se <option>USERGROUPS_ENAB</option> è impostato a <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename>, <command>userdel</"
+"command> cancellerà il gruppo che ha lo stesso nome dell'utente. Per evitare "
+"incoerenze tra i database di passwd e group, <command>userdel</command> "
+"verificherà che questo gruppo non sia utilizzato come gruppo primario da "
+"altri utenti, e nel caso emetterà un avviso senza cancellare il gruppo. "
+"L'opzione <option>-f</option> forza la cancellazione di questo gruppo."
+
+# type: Plain text
+#: userdel.8.xml:326(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"subids\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: useradd.8.xml:76(refentrytitle) useradd.8.xml:83(refname)
+#: useradd.8.xml:88(command) useradd.8.xml:95(command)
+#: useradd.8.xml:99(command) login.defs.5.xml:482(term)
+msgid "useradd"
+msgstr "useradd"
+
+# type: Plain text
+#: useradd.8.xml:84(refpurpose)
+msgid "create a new user or update default new user information"
+msgstr ""
+"crea un nuovo utente o aggiorna le informazioni predefinite per i nuovi "
+"utenti"
+
+#: useradd.8.xml:96(arg) useradd.8.xml:100(arg)
+msgid "-D"
+msgstr "-D"
+
+# type: Plain text
+#: useradd.8.xml:109(para)
+msgid ""
+"When invoked without the <option>-D</option> option, the <command>useradd</"
+"command> command creates a new user account using the values specified on "
+"the command line plus the default values from the system. Depending on "
+"command line options, the <command>useradd</command> command will update "
+"system files and may also create the new user's home directory and copy "
+"initial files."
+msgstr ""
+"Quando viene invocato senza l'opzione <option>-D</option>, il comando "
+"<command>useradd</command> crea un nuovo account di utente usando i valori "
+"specificati sulla riga di comando ed i valori predefiniti dal sistema. A "
+"seconda dalle opzioni nella riga di comando, il comando <command>useradd</"
+"command> aggiornerà i file di sistema che lo necessitano, creerà la home "
+"directory, e lì verranno copiati i file iniziali."
+
+#: useradd.8.xml:118(para)
+msgid ""
+"By default, a group will also be created for the new user (see <option>-g</"
+"option>, <option>-N</option>, <option>-U</option>, and "
+"<option>USERGROUPS_ENAB</option>)."
+msgstr ""
+"Normalmente viene anche creato un gruppo per il nuovo utente (vedere "
+"<option>-g</option>, <option>-N</option>, <option>-U</option> e "
+"<option>USERGROUPS_ENAB</option>).\""
+
+# type: Plain text
+#: useradd.8.xml:127(para)
+msgid "The options which apply to the <command>useradd</command> command are:"
+msgstr "Il comando <command>useradd</command> accetta le seguenti opzioni:"
+
+#: useradd.8.xml:132(option) pwck.8.xml:187(option) newusers.8.xml:273(option)
+msgid "--badname"
+msgstr ""
+
+# type: TP
+#: useradd.8.xml:141(term) useradd.8.xml:559(term)
+msgid ""
+"<option>-b</option>, <option>--base-dir</option>&nbsp;<replaceable>BASE_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-b</option>, <option>--base-dir</option>&nbsp;<replaceable>BASE_DIR</"
+"replaceable>"
+
+#: useradd.8.xml:145(para)
+msgid ""
+"The default base directory for the system if <option>-d</option>&nbsp;"
+"<replaceable>HOME_DIR</replaceable> is not specified. <replaceable>BASE_DIR</"
+"replaceable> is concatenated with the account name to define the home "
+"directory. If the <option>-m</option> option is not used, "
+"<replaceable>BASE_DIR</replaceable> must exist."
+msgstr ""
+"La directory base predefinita, nel caso che l'opzione <option>-d</"
+"option>&nbsp;<replaceable>HOME_DIR</replaceable> non sia specificata. "
+"<replaceable>BASE_DIR</replaceable> viene concatenata con il nome "
+"dell'account per definire la directory home. Se l'opzione <option>-m</"
+"option> non è usata, <replaceable>BASE_DIR</replaceable> deve esistere."
+
+#: useradd.8.xml:152(para)
+msgid ""
+"If this option is not specified, <command>useradd</command> will use the "
+"base directory specified by the <option>HOME</option> variable in <filename>/"
+"etc/default/useradd</filename>, or <filename>/home</filename> by default."
+msgstr ""
+"Se questa opzione non è specificata, <command>useradd</command> userà la "
+"directory base specificata dalla variabile <option>HOME</option> in "
+"<filename>/etc/default/useradd</filename> oppure la costante <filename>/"
+"home</filename>."
+
+#: useradd.8.xml:166(para)
+msgid ""
+"Any text string. It is generally a short description of the login, and is "
+"currently used as the field for the user's full name."
+msgstr ""
+"Un testo qualsiasi. Di norma è una breve descrizione del login, ed è "
+"attualmente usato come nome completo dell'utente."
+
+# type: TP
+#: useradd.8.xml:174(term)
+msgid ""
+"<option>-d</option>, <option>--home-dir</option>&nbsp;<replaceable>HOME_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home-dir</option>&nbsp;<replaceable>HOME_DIR</"
+"replaceable>"
+
+# type: Plain text
+#: useradd.8.xml:178(para)
+msgid ""
+"The new user will be created using <replaceable>HOME_DIR</replaceable> as "
+"the value for the user's login directory. The default is to append the "
+"<replaceable>LOGIN</replaceable> name to <replaceable>BASE_DIR</replaceable> "
+"and use that as the login directory name. The directory "
+"<replaceable>HOME_DIR</replaceable> does not have to exist but will not be "
+"created if it is missing."
+msgstr ""
+"Il nuovo utente verrà creato usando <replaceable>HOME_DIR</replaceable> come "
+"valore per la directory di login dell'utente. Il comportamento predefinito è "
+"di aggiungere il nome <replaceable>LOGIN</replaceable> in fondo a "
+"<replaceable>BASE_DIR</replaceable> ed usare quello come nome di directory "
+"di login. Non è necessario che la directory <replaceable>HOME_DIR</"
+"replaceable> esista, ma se non ci fosse non verrà creata."
+
+# type: IP
+#: useradd.8.xml:190(term)
+msgid "<option>-D</option>, <option>--defaults</option>"
+msgstr "<option>-D</option>, <option>--defaults</option>"
+
+# type: SS
+#: useradd.8.xml:194(para)
+msgid "See below, the subsection \"Changing the default values\"."
+msgstr "Vedere oltre, la sezione «Cambiare i valori predefiniti»."
+
+#: useradd.8.xml:208(para)
+msgid ""
+"If not specified, <command>useradd</command> will use the default expiry "
+"date specified by the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or an empty string (no expiry) by default."
+msgstr ""
+"Se non specificato diversamente, <command>useradd</command> userà la data di "
+"scadenza impostata con la variabile <option>EXPIRE</option> nel file "
+"<filename>/etc/default/useradd</filename> o un campo vuoto (nessuna "
+"scadenza)."
+
+# type: Plain text
+#: useradd.8.xml:221(para)
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled. A value of 0 disables the account as soon as the password has "
+"expired, and a value of -1 disables the feature."
+msgstr ""
+"Il numero di giorni dopo la scadenza della password prima che l'account "
+"venga permanentemente disabilitato. Un valore pari a 0 disabilita l'account "
+"non appena la password è scaduta, ed un valore pari a -1 disabilita questa "
+"funzionalità."
+
+# type: Plain text
+#: useradd.8.xml:227(para)
+msgid ""
+"If not specified, <command>useradd</command> will use the default inactivity "
+"period specified by the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or -1 by default."
+msgstr ""
+"Il comportamento predefinito di <command>useradd</command> è di usare il "
+"periodo di inattività specificato dalla variabile <option>INACTIVE</option> "
+"del file <filename>/etc/default/useradd</filename> oppure -1 (con variabile "
+"assente)."
+
+# type: Plain text
+#: useradd.8.xml:240(para)
+msgid ""
+"The group name or number of the user's initial login group. The group name "
+"must exist. A group number must refer to an already existing group."
+msgstr ""
+"Il nome o numero del gruppo di connessione iniziale dell'utente. Il nome "
+"del gruppo deve esistere. Un numero di gruppo deve riferirsi ad un gruppo "
+"già esistente."
+
+#: useradd.8.xml:245(para)
+msgid ""
+"If not specified, the behavior of <command>useradd</command> will depend on "
+"the <option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>. If this variable is set to <replaceable>yes</replaceable> (or "
+"<option>-U/--user-group</option> is specified on the command line), a group "
+"will be created for the user, with the same name as her loginname. If the "
+"variable is set to <replaceable>no</replaceable> (or <option>-N/--no-user-"
+"group</option> is specified on the command line), useradd will set the "
+"primary group of the new user to the value specified by the <option>GROUP</"
+"option> variable in <filename>/etc/default/useradd</filename>, or 100 by "
+"default."
+msgstr ""
+"Se non specificato, il comportamento di <command>useradd</command> varierà "
+"in base alla variabile <option>USERGROUPS_ENAB</option> del file <filename>/"
+"etc/login.defs</filename>. Se questa variabile è impostata a "
+"<replaceable>yes</replaceable> (o se è stata usata l'opzione <option>-U/--"
+"user-group</option> nella riga di comando) verrà creato un gruppo per "
+"l'utente con lo stesso nome. Se la variabile è impostata a <replaceable>no</"
+"replaceable> (o se è stata usata l'opzione <option>-N/--no-user-group</"
+"option> nella riga di comando) useradd imposterà il gruppo primario "
+"dell'utente in base a quello impostato nella variabile <option>GROUP</"
+"option> del file <filename>/etc/default/useradd</filename> o a 100 se non "
+"specificato."
+
+# type: Plain text
+#: useradd.8.xml:267(para)
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option. The default is for the user to belong only to "
+"the initial group."
+msgstr ""
+"Una lista di gruppi supplementari di cui l'utente è altresì membro. Ciascun "
+"gruppo è separato dal successivo da una virgola, senza spazi bianchi "
+"intermedi. I gruppi sono soggetti alle stesse restrizioni del gruppo dato "
+"con l'opzione <option>-g</option>. Il comportamento predefinito è che "
+"l'utente appartenga solo al gruppo iniziale."
+
+# type: IP
+#: useradd.8.xml:284(term)
+msgid ""
+"<option>-k</option>, <option>--skel</option>&nbsp;<replaceable>SKEL_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-k</option>, <option>--skel</option>&nbsp;<replaceable>SKEL_DIR</"
+"replaceable>"
+
+#: useradd.8.xml:288(para)
+msgid ""
+"The skeleton directory, which contains files and directories to be copied in "
+"the user's home directory, when the home directory is created by "
+"<command>useradd</command>."
+msgstr ""
+"La directory «skeleton» che contiene file e directory da copiare nella "
+"directory home dell'utente quando viene creata da <command>useradd</command>."
+
+# type: IP
+#: useradd.8.xml:293(para)
+msgid ""
+"This option is only valid if the <option>-m</option> (or <option>--create-"
+"home</option>) option is specified."
+msgstr ""
+"Questa opzione è valida solo se anche l'opzione <option>-m</option> (o "
+"<option>--create-home</option>) è stata specificata."
+
+#: useradd.8.xml:297(para)
+msgid ""
+"If this option is not set, the skeleton directory is defined by the "
+"<option>SKEL</option> variable in <filename>/etc/default/useradd</filename> "
+"or, by default, <filename>/etc/skel</filename>."
+msgstr ""
+"Se questa opzione non è impostata, la directory «skeleton» è definita dalla "
+"variabile <option>SKEL</option> nel file <filename>/etc/default/useradd</"
+"filename> o, altrimenti, vale <filename>/etc/skel</filename>."
+
+#: useradd.8.xml:303(para)
+msgid "If possible, the ACLs and extended attributes are copied."
+msgstr "Se possibile vengono copiate le ACL e gli attributi estesi."
+
+#: useradd.8.xml:309(term) groupadd.8.xml:137(term)
+msgid ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
+"replaceable>=<replaceable>VALUE</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
+"replaceable>=<replaceable>VALUE</replaceable>."
+
+#: useradd.8.xml:313(para)
+#, fuzzy
+#| msgid ""
+#| "Overrides <filename>/etc/login.defs</filename> defaults (<option>UID_MIN</"
+#| "option>, <option>UID_MAX</option>, <option>UMASK</option>, "
+#| "<option>PASS_MAX_DAYS</option> and others). <placeholder-1/> Example: "
+#| "<option>-K</option>&nbsp;<replaceable>PASS_MAX_DAYS</"
+#| "replaceable>=<replaceable>-1</replaceable> can be used when creating "
+#| "system account to turn off password ageing, even though system account "
+#| "has no password at all. Multiple <option>-K</option> options can be "
+#| "specified, e.g.: <option>-K</option>&nbsp;<replaceable>UID_MIN</"
+#| "replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+#| "<replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (<option>UID_MIN</"
+"option>, <option>UID_MAX</option>, <option>UMASK</option>, "
+"<option>PASS_MAX_DAYS</option> and others). <placeholder-1/> Example: "
+"<option>-K</option>&nbsp;<replaceable>PASS_MAX_DAYS</"
+"replaceable>=<replaceable>-1</replaceable> can be used when creating system "
+"account to turn off password aging, even though system account has no "
+"password at all. Multiple <option>-K</option> options can be specified, e."
+"g.: <option>-K</option>&nbsp;<replaceable>UID_MIN</"
+"replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+"<replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+"Forza l'impostazione al di là di quanto specificato in <filename>/etc/login."
+"defs</filename> (<option>UID_MIN</option>, <option>UID_MAX</option>, "
+"<option>UMASK</option>, <option>PASS_MAX_DAYS</option> e altri). "
+"<placeholder-1/> Esempio: <option>-K</option>&nbsp;"
+"<replaceable>PASS_MAX_DAYS</replaceable>=<replaceable>-1</replaceable> può "
+"essere usato durante la creazione di account di sistema per disabilitare la "
+"scadenza della password anche se l'account di sistema non ha affatto la "
+"password. Possono essere specificate più opzioni <option>-K</option>, come "
+"in: <option>-K</option>&nbsp;<replaceable>UID_MIN</"
+"replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+"<replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>"
+
+# type: IP
+#: useradd.8.xml:334(term)
+msgid "<option>-l</option>, <option>--no-log-init</option>"
+msgstr "<option>-l</option>, <option>--no-log-init</option>"
+
+#: useradd.8.xml:336(para)
+msgid "Do not add the user to the lastlog and faillog databases."
+msgstr "Non aggiunge l'utente ai database «lastlog» e «faillog»."
+
+#: useradd.8.xml:339(para)
+#, fuzzy
+#| msgid ""
+#| "By default, the user's entries in the lastlog and faillog databases are "
+#| "resetted to avoid reusing the entry from a previously deleted user."
+msgid ""
+"By default, the user's entries in the lastlog and faillog databases are "
+"reset to avoid reusing the entry from a previously deleted user."
+msgstr ""
+"Normalmente i dati utente nei database «lastlog» e «faillog» vengono "
+"azzerati per evitare di riutilizzare dati di un utente cancellato in "
+"precedenza."
+
+# type: IP
+#: useradd.8.xml:347(term)
+msgid "<option>-m</option>, <option>--create-home</option>"
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:351(para)
+msgid ""
+"Create the user's home directory if it does not exist. The files and "
+"directories contained in the skeleton directory (which can be defined with "
+"the <option>-k</option> option) will be copied to the home directory."
+msgstr ""
+"Crea la directory home dell'utente nel caso in cui non esista. I file e "
+"directory contenuti nella directory «skeleton» (che può essere definita con "
+"l'opzione <option>-k</option>) vengono copiati nella directory home."
+
+#: useradd.8.xml:357(para)
+msgid ""
+"By default, if this option is not specified and <option>CREATE_HOME</option> "
+"is not enabled, no home directories are created."
+msgstr ""
+"Se questa opzione non viene utilizzata e se non è attiva la voce "
+"<option>CREATE_HOME</option>, la directory non viene creata."
+
+# type: IP
+#: useradd.8.xml:365(term)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid "<option>-M</option>, <option>--no-create-home</option>"
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:369(para)
+msgid ""
+"Do no create the user's home directory, even if the system wide setting from "
+"<filename>/etc/login.defs</filename> (<option>CREATE_HOME</option>) is set "
+"to <replaceable>yes</replaceable>."
+msgstr ""
+"Non crea la directory home dell'utente nonostante la configurazione di "
+"sistema in <filename>/etc/login.defs</filename> (<option>CREATE_HOME</"
+"option>) sia impostata a <replaceable>yes</replaceable>."
+
+# type: TP
+#: useradd.8.xml:378(term)
+msgid "<option>-N</option>, <option>--no-user-group</option>"
+msgstr "<option>-N</option>, <option>--no-user-group</option>"
+
+#: useradd.8.xml:382(para)
+msgid ""
+"Do not create a group with the same name as the user, but add the user to "
+"the group specified by the <option>-g</option> option or by the "
+"<option>GROUP</option> variable in <filename>/etc/default/useradd</filename>."
+msgstr ""
+"Non crea un gruppo con lo stesso nome dell'utente, ma aggiunge l'utente al "
+"gruppo specificato con l'opzione <option>-g</option> o tramite la variabile "
+"<option>GROUP</option> nel file <filename>/etc/default/useradd</filename>."
+
+#: useradd.8.xml:388(para) useradd.8.xml:526(para)
+msgid ""
+"The default behavior (if the <option>-g</option>, <option>-N</option>, and "
+"<option>-U</option> options are not specified) is defined by the "
+"<option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+"Il comportamento predefinito (se le opzioni <option>-g</option>, <option>-N</"
+"option> e <option>-U</option> non sono specificate) è definito dalla "
+"variabile <option>USERGROUPS_ENAB</option> nel file <filename>/etc/login."
+"defs</filename>."
+
+#: useradd.8.xml:401(para)
+msgid "Allow the creation of a user account with a duplicate (non-unique) UID."
+msgstr "Permette la creazione di un utente con un UID duplicato (non unico)."
+
+# type: IP
+#: useradd.8.xml:402(para)
+msgid ""
+"This option is only valid in combination with the <option>-u</option> option."
+msgstr ""
+"Questa opzione è valida solo congiuntamente all'opzione <option>-u</option>."
+
+# type: Plain text
+#: useradd.8.xml:413(para) groupadd.8.xml:171(para)
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>. The default is to "
+"disable the password."
+msgstr ""
+"La password cifrata, come restituita da <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>. Il comportamento "
+"predefinito è di disabilitare la password."
+
+# type: IP
+#: useradd.8.xml:430(term) newusers.8.xml:302(term) groupadd.8.xml:188(term)
+msgid "<option>-r</option>, <option>--system</option>"
+msgstr "<option>-r</option>, <option>--system</option>"
+
+#: useradd.8.xml:434(para) newusers.8.xml:306(para)
+msgid "Create a system account."
+msgstr "Crea un account di sistema."
+
+#: useradd.8.xml:437(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are chosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>/etc/login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+"Gli utenti di sistema vengono creati senza le informazioni sulla scadenza in "
+"<filename>/etc/shadow</filename> e con l'ID numerico scelto nell'intervallo "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option>, definito nel file "
+"<filename>/etc/login.defs</filename>, anziché <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (e le loro controparti <option>GID</option> per la "
+"creazione dei gruppi)."
+
+#: useradd.8.xml:446(para)
+#, fuzzy
+#| msgid ""
+#| "Note that <command>useradd</command> will not create a home directory for "
+#| "such an user, regardless of the default setting in <filename>/etc/login."
+#| "defs</filename> (<option>CREATE_HOME</option>). You have to specify the "
+#| "<option>-m</option> options if you want a home directory for a system "
+#| "account to be created."
+msgid ""
+"Note that <command>useradd</command> will not create a home directory for "
+"such a user, regardless of the default setting in <filename>/etc/login.defs</"
+"filename> (<option>CREATE_HOME</option>). You have to specify the <option>-"
+"m</option> options if you want a home directory for a system account to be "
+"created."
+msgstr ""
+"Notare che <command>useradd</command> non creerà la directory home per "
+"questi utenti indipendentemente da quanto impostato in <filename>/etc/login."
+"defs</filename> (<option>CREATE_HOME</option>). Si deve specificare "
+"l'opzione <option>-m</option> se si vuole creare la directory home per un "
+"account di sistema."
+
+# type: Plain text
+#: useradd.8.xml:490(para)
+msgid ""
+"The name of the user's login shell. The default is to leave this field "
+"blank, which causes the system to select the default login shell specified "
+"by the <option>SHELL</option> variable in <filename>/etc/default/useradd</"
+"filename>, or an empty string by default."
+msgstr ""
+"Il nome della shell di login dell'utente. Il comportamento predefinito è di "
+"lasciare vuoto questo campo, che fa sì che il sistema selezioni la shell di "
+"connessione predefinita tramite la variabile <option>SHELL</option> in "
+"<filename>/etc/default/useradd</filename>, oppure un testo vuoto."
+
+# type: Plain text
+#: useradd.8.xml:504(para)
+msgid ""
+"The numerical value of the user's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than or equal to "
+"<option>UID_MIN</option> and greater than every other user."
+msgstr ""
+"Il valore numerico dell'identificatore (ID) dell'utente. Questo valore deve "
+"essere univoco, a meno che non venga usata l'opzione <option>-o</option>. Il "
+"valore non deve essere negativo. La scelta predefinita è quella di usare il "
+"minimo valore di ID maggiore o eguale a <option>UID_MIN</option> e maggiore "
+"a qualunque altro utente."
+
+# type: Plain text
+#: useradd.8.xml:511(para)
+msgid ""
+"See also the <option>-r</option> option and the <option>UID_MAX</option> "
+"description."
+msgstr ""
+"Vedere anche la descrizione dell'opzione <option>-r</option> e "
+"<option>UID_MAX</option>"
+
+# type: TP
+#: useradd.8.xml:518(term)
+msgid "<option>-U</option>, <option>--user-group</option>"
+msgstr "<option>-U</option>, <option>--user-group</option>"
+
+#: useradd.8.xml:522(para)
+msgid ""
+"Create a group with the same name as the user, and add the user to this "
+"group."
+msgstr ""
+"Crea un gruppo con lo stesso nome dell'utente e aggiunge l'utente al gruppo "
+"stesso."
+
+# type: Plain text
+#: useradd.8.xml:539(para)
+msgid ""
+"The SELinux user for the user's login. The default is to leave this field "
+"blank, which causes the system to select the default SELinux user."
+msgstr ""
+"L'utente SELinux per questo login utente. Lasciando questo campo vuoto si fa "
+"in modo che il sistema selezioni automaticamente l'utente SELinux."
+
+# type: SS
+#: useradd.8.xml:549(title)
+msgid "Changing the default values"
+msgstr "Cambiare i valori predefiniti"
+
+# type: Plain text
+#: useradd.8.xml:550(para)
+msgid ""
+"When invoked with only the <option>-D</option> option, <command>useradd</"
+"command> will display the current default values. When invoked with <option>-"
+"D</option> plus other options, <command>useradd</command> will update the "
+"default values for the specified options. Valid default-changing options are:"
+msgstr ""
+"Quando invocato con la sola opzione <option>-D</option>, <command>useradd</"
+"command> mostrerà i valori predefiniti correnti. Quando invocato con "
+"l'opzione <option>-D</option> e altre opzioni, <command>useradd</command> "
+"aggiornerà i valori predefiniti per le opzioni specificate. Le opzioni "
+"valide sono:"
+
+# type: Plain text
+#: useradd.8.xml:563(para)
+msgid ""
+"The path prefix for a new user's home directory. The user's name will be "
+"affixed to the end of <replaceable>BASE_DIR</replaceable> to form the new "
+"user's home directory name, if the <option>-d</option> option is not used "
+"when creating a new account."
+msgstr ""
+"Il prefisso del percorso per la directory home del nuovo utente. Il nome "
+"dell'utente verrà aggiunto alla fine di <replaceable>BASE_DIR</replaceable> "
+"per creare il nome della nuova directory home, a meno che non venga usata "
+"l'opzione <option>-d</option> quando si crea un nuovo account."
+
+#: useradd.8.xml:570(para)
+msgid ""
+"This option sets the <option>HOME</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+"Questa opzione imposta la variabile <option>HOME</option> del file "
+"<filename>/etc/default/useradd</filename>."
+
+# type: Plain text
+#: useradd.8.xml:581(para)
+msgid "The date on which the user account is disabled."
+msgstr "La data in cui l'account dell'utente verrà disabilitato."
+
+#: useradd.8.xml:582(para)
+msgid ""
+"This option sets the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+"Questa opzione imposta la variabile <option>EXPIRE</option> del file "
+"<filename>/etc/default/useradd</filename>."
+
+# type: Plain text
+#: useradd.8.xml:593(para)
+msgid ""
+"The number of days after a password has expired before the account will be "
+"disabled."
+msgstr ""
+"Il numero di giorni dopo la scadenza di una password prima che l'account "
+"venga disabilitato."
+
+#: useradd.8.xml:597(para)
+msgid ""
+"This option sets the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+"Questa opzione imposta la variabile <option>INACTIVE</option> del file "
+"<filename>/etc/default/useradd</filename>."
+
+#: useradd.8.xml:608(para)
+#, fuzzy
+#| msgid ""
+#| "The group name or ID for a new user's initial group (when the <option>-"
+#| "N/--no-user-group</option> is used or when the <option>USERGROUPS_ENAB</"
+#| "option> variable is set to <replaceable>no</replaceable> in <filename>/"
+#| "etc/login.defs</filename>. The named group must exist, and a numerical "
+#| "group ID must have an existing entry."
+msgid ""
+"The group name or ID for a new user's initial group (when the <option>-N/--"
+"no-user-group</option> is used or when the <option>USERGROUPS_ENAB</option> "
+"variable is set to <replaceable>no</replaceable> in <filename>/etc/login."
+"defs</filename>). The named group must exist, and a numerical group ID must "
+"have an existing entry."
+msgstr ""
+"Il nome o l'ID del gruppo da usare come gruppo iniziale per il nuovo utente "
+"(quando è usata l'opzione <option>-N/--no-user-group</option> o quando la "
+"variabile <option>USERGROUPS_ENAB</option> è impostata a <replaceable>no</"
+"replaceable> nel file <filename>/etc/login.defs</filename>). Il gruppo "
+"indicato deve esistere, anche se viene utilizzato l'ID numerico."
+
+#: useradd.8.xml:617(para)
+msgid ""
+"This option sets the <option>GROUP</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+"Questa opzione imposta la variabile <option>GROUP</option> nel file "
+"<filename>/etc/default/useradd</filename>."
+
+#: useradd.8.xml:628(para)
+msgid "The name of a new user's login shell."
+msgstr "Il nome della shell di login per il nuovo utente."
+
+#: useradd.8.xml:631(para)
+msgid ""
+"This option sets the <option>SHELL</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+"Questa opzione imposta la variabile <option>SHELL</option> del file "
+"<filename>/etc/default/useradd</filename>."
+
+# type: SH
+#: useradd.8.xml:643(title)
+msgid "NOTES"
+msgstr "NOTE"
+
+# type: Plain text
+#: useradd.8.xml:644(para)
+msgid ""
+"The system administrator is responsible for placing the default user files "
+"in the <filename>/etc/skel/</filename> directory (or any other skeleton "
+"directory specified in <filename>/etc/default/useradd</filename> or on the "
+"command line)."
+msgstr ""
+"L'amministratore di sistema è responsabile del posizionamento dei file "
+"utente predefiniti nella directory <filename>/etc/skel/</filename> (o "
+"qualsiasi altra directory impostata in <filename>/etc/default/useradd</"
+"filename> o nella riga di comando)."
+
+# type: Plain text
+#: useradd.8.xml:653(para)
+msgid ""
+"You may not add a user to a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+"Non è possibile aggiungere un utente ad un gruppo NIS o LDAP. Questo deve "
+"essere fatto sul server corrispondente."
+
+#: useradd.8.xml:658(para)
+msgid ""
+"Similarly, if the username already exists in an external user database such "
+"as NIS or LDAP, <command>useradd</command> will deny the user account "
+"creation request."
+msgstr ""
+"Analogamente, se il nome utente esiste già in un database esterno come NIS o "
+"LDAP, <command>useradd</command> bloccherà la creazione dell'account."
+
+#: useradd.8.xml:664(para)
+msgid ""
+"Usernames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+"I nomi utente devono iniziare con una lettera minuscola o un underscore, "
+"seguiti da lettere minuscole, cifre numeriche, underscore o trattini. "
+"Possono terminare con il simbolo del dollaro. In termini di espressioni "
+"regolari: [a-z_][a-z0-9_-]*[$]?"
+
+#: useradd.8.xml:670(para)
+msgid "Usernames may only be up to 32 characters long."
+msgstr "I nomi utente non possono eccedere i 32 caratteri di lunghezza."
+
+# type: IP
+#: useradd.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>CREATE_HOME</option> (boolean)"
+msgstr "<option>CREATE_HOME</option> (booleano)"
+
+#: useradd.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"Indicate if a home directory should be created by default for new users."
+msgstr "Indica se per i nuovi utenti va creata la directory home."
+
+#: useradd.8.xml:36(para) login.defs.5.xml:36(para)
+msgid ""
+"This setting does not apply to system users, and can be overridden on the "
+"command line."
+msgstr ""
+"Questa impostazione non viene applicata agli utenti di sistema e può essere "
+"modificata sulla riga di comando."
+
+# type: IP
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: groupadd.8.xml:32(term)
+msgid "<option>GID_MAX</option> (number)"
+msgstr "<option>GID_MAX</option> (numerico)"
+
+# type: IP
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+#: groupadd.8.xml:33(term)
+msgid "<option>GID_MIN</option> (number)"
+msgstr "<option>GID_MIN</option> (numerico)"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+#: groupadd.8.xml:35(para)
+msgid ""
+"Range of group IDs used for the creation of regular groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+"Intervallo di ID di gruppo per la creazione di gruppi normali tramite "
+"<command>useradd</command>, <command>groupadd</command> o <command>newusers</"
+"command>."
+
+#: useradd.8.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: groupadd.8.xml:40(para)
+msgid ""
+"The default value for <option>GID_MIN</option> (resp. <option>GID_MAX</"
+"option>) is 1000 (resp. 60000)."
+msgstr ""
+"Il valore predefinito per <option>GID_MIN</option> (rispettivamente "
+"<option>GID_MAX</option>) è 1000 (rispettivmente 60000)."
+
+# type: IP
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+#| msgid "<option>GID_MAX</option> (number)"
+msgid "<option>HOME_MODE</option> (number)"
+msgstr "<option>GID_MAX</option> (numerico)"
+
+#: useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The mode for new home directories. If not specified, the <option>UMASK</"
+"option> is used to create the mode."
+msgstr ""
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#, fuzzy
+#| msgid ""
+#| "<command>useradd</command> and <command>newusers</command> use this mask "
+#| "to set the mode of the home directory they create"
+msgid ""
+"<command>useradd</command> and <command>newusers</command> use this to set "
+"the mode of the home directory they create."
+msgstr ""
+"<command>useradd</command> e <command>newusers</command> usano questa "
+"maschera per impostare i permessi della directory home che creano."
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_MAX_DAYS</option> (number)"
+msgstr "<option>PASS_MAX_DAYS</option> (numerico)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The maximum number of days a password may be used. If the password is older "
+"than this, a password change will be forced. If not specified, -1 will be "
+"assumed (which disables the restriction)."
+msgstr ""
+"Il numero massimo di giorni che una password può essere utilizzata. Se la "
+"password è più vecchia verrà imposto il suo cambiamento. Se non specificato "
+"viene assunto -1 (che disabilita questo controllo)."
+
+# type: IP
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_MIN_DAYS</option> (number)"
+msgstr "<option>PASS_MIN_DAYS</option> (numerico)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The minimum number of days allowed between password changes. Any password "
+"changes attempted sooner than this will be rejected. If not specified, -1 "
+"will be assumed (which disables the restriction)."
+msgstr ""
+"Il numero minimo di giorni tra due cambiamenti di password. Ogni tentativo "
+"di cambiare la password prima di questo periodo verrà rifiutato. Se non "
+"specificato viene assunto -1 (che disabilita questo controllo)."
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_WARN_AGE</option> (number)"
+msgstr "<option>PASS_WARN_AGE</option> (numerico)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The number of days warning given before a password expires. A zero means "
+"warning is given only upon the day of expiration, a negative value means no "
+"warning is given. If not specified, no warning will be provided."
+msgstr ""
+"Il numero di giorni per i quali un utente va avvisato che la sua password "
+"sta per scadere. Se zero l'utente viene avvisato solo alla scadenza. Un "
+"valore negativo indica che non si deve avvisare mai. Se non specificato "
+"allora non c'è nessun avviso."
+
+# type: IP
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: groupadd.8.xml:30(term)
+msgid "<option>SYS_GID_MAX</option> (number)"
+msgstr "<option>SYS_GID_MAX</option> (numerico)"
+
+# type: IP
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: groupadd.8.xml:31(term)
+msgid "<option>SYS_GID_MIN</option> (number)"
+msgstr "<option>SYS_GID_MIN</option> (numerico)"
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: groupadd.8.xml:33(para)
+msgid ""
+"Range of group IDs used for the creation of system groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+"Intervallo di ID di gruppo utilizzato per la creazione di un gruppo di "
+"sistema da <command>useradd</command>, <command>groupadd</command> o "
+"<command>newusers</command>."
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#: groupadd.8.xml:38(para)
+msgid ""
+"The default value for <option>SYS_GID_MIN</option> (resp. "
+"<option>SYS_GID_MAX</option>) is 101 (resp. <option>GID_MIN</option>-1)."
+msgstr ""
+"Il valore predefinito per <option>SYS_GID_MIN</option> (rispettivamente "
+"<option>SYS_GID_MAX</option>) è 101 (rispettivamente <option>GID_MIN</"
+"option>-1)."
+
+# type: IP
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>SYS_UID_MAX</option> (number)"
+msgstr "<option>SYS_UID_MAX</option> (numerico)"
+
+# type: IP
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+msgid "<option>SYS_UID_MIN</option> (number)"
+msgstr "<option>SYS_UID_MIN</option> (numerico)"
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+msgid ""
+"Range of user IDs used for the creation of system users by <command>useradd</"
+"command> or <command>newusers</command>."
+msgstr ""
+"Intervallo di ID utente per la creazione degli utenti di sistema con "
+"<command>useradd</command> o <command>newusers</command>."
+
+#: useradd.8.xml:37(para) newusers.8.xml:37(para) login.defs.5.xml:37(para)
+msgid ""
+"The default value for <option>SYS_UID_MIN</option> (resp. "
+"<option>SYS_UID_MAX</option>) is 101 (resp. <option>UID_MIN</option>-1)."
+msgstr ""
+"Il valore predefinito per <option>SYS_UID_MIN</option> (rispettivamente "
+"<option>SYS_UID_MAX</option>) è 101 (rispettivamente <option>UID_MIN</"
+"option>-1)."
+
+# type: IP
+#: useradd.8.xml:30(term) pwck.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>TCB_AUTH_GROUP</option> (boolean)"
+msgstr "<option>TCB_AUTH_GROUP</option> (booleano)"
+
+# type: Plain text
+#: useradd.8.xml:32(para) pwck.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"If <replaceable>yes</replaceable>, newly created tcb shadow files will be "
+"group owned by the <replaceable>auth</replaceable> group."
+msgstr ""
+"Se <replaceable>yes</replaceable> i file shadow tcb di prossima creazione "
+"avranno come gruppo proprietario il gruppo <replaceable>auth</replaceable>."
+
+# type: IP
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>UID_MAX</option> (number)"
+msgstr "<option>UID_MAX</option> (numerico)"
+
+# type: IP
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>UID_MIN</option> (number)"
+msgstr "<option>UID_MIN</option> (numerico)"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"Range of user IDs used for the creation of regular users by "
+"<command>useradd</command> or <command>newusers</command>."
+msgstr ""
+"Intervallo di ID utente da utilizzare nella creazione degli utenti normali "
+"tramite <command>useradd</command> o <command>newusers</command>."
+
+#: useradd.8.xml:39(para) newusers.8.xml:39(para) login.defs.5.xml:39(para)
+msgid ""
+"The default value for <option>UID_MIN</option> (resp. <option>UID_MAX</"
+"option>) is 1000 (resp. 60000)."
+msgstr ""
+"Il valore predefinito per <option>UID_MIN</option> (rispettivamente "
+"<option>UID_MAX</option>) è 1000 (rispettivamente 60000)."
+
+# type: IP
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: login.1.xml:32(term)
+msgid "<option>UMASK</option> (number)"
+msgstr "<option>UMASK</option> (numerico)"
+
+#: useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: login.1.xml:34(para)
+msgid ""
+"The file mode creation mask is initialized to this value. If not specified, "
+"the mask will be initialized to 022."
+msgstr ""
+"La maschera di permessi alla creazione dei file è inizializzata con questo "
+"valore. Se non specificato la maschera viene impostata a 022."
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#: login.1.xml:38(para)
+#, fuzzy
+#| msgid ""
+#| "<command>useradd</command> and <command>newusers</command> use this mask "
+#| "to set the mode of the home directory they create"
+msgid ""
+"<command>useradd</command> and <command>newusers</command> use this mask to "
+"set the mode of the home directory they create if <option>HOME_MODE</option> "
+"is not set."
+msgstr ""
+"<command>useradd</command> e <command>newusers</command> usano questa "
+"maschera per impostare i permessi della directory home che creano."
+
+#: useradd.8.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: login.1.xml:43(para)
+msgid ""
+"It is also used by <command>login</command> to define users' initial umask. "
+"Note that this mask can be overridden by the user's GECOS line (if "
+"<option>QUOTAS_ENAB</option> is set) or by the specification of a limit with "
+"the <emphasis>K</emphasis> identifier in "
+"<citerefentry><refentrytitle>limits</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"Viene anche utilizzata da <command>login</command> per definire la maschera "
+"iniziale dell'utente. Notare che questa maschera può essere modificata dalla "
+"riga GECOS dell'utente (se <option>QUOTAS_ENAB</option> è impostato) o "
+"specificando un limite con l'identificativo <emphasis>K</emphasis> in "
+"<citerefentry><refentrytitle>limits</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+# type: Plain text
+#: useradd.8.xml:51(para) newusers.8.xml:51(para) login.defs.5.xml:51(para)
+#: login.1.xml:51(para)
+msgid ""
+"It is also used by <command>pam_umask</command> as the default umask value."
+msgstr ""
+"Viene anche utilizzato da <command>pam_umask</command> come valore umask "
+"predefinito."
+
+# type: Plain text
+#: useradd.8.xml:733(filename)
+msgid "/etc/default/useradd"
+msgstr "/etc/default/useradd"
+
+#: useradd.8.xml:735(para)
+msgid "Default values for account creation."
+msgstr "Valori predefiniti per la creazione dell'account."
+
+#: useradd.8.xml:739(filename)
+msgid "/etc/skel/"
+msgstr "/etc/skel/"
+
+# type: Plain text
+#: useradd.8.xml:741(para)
+msgid "Directory containing default files."
+msgstr "Directory contenente i file predefiniti."
+
+# type: IP
+#: useradd.8.xml:789(replaceable) shadow.3.xml:58(manvolnum)
+#: pwck.8.xml:326(replaceable) passwd.1.xml:466(replaceable)
+#: grpck.8.xml:268(replaceable) groupmod.8.xml:269(replaceable)
+#: groupadd.8.xml:313(replaceable)
+msgid "3"
+msgstr "3"
+
+#: useradd.8.xml:791(para) passwd.1.xml:486(para) groupadd.8.xml:315(para)
+msgid "invalid argument to option"
+msgstr "argomento non valido per l'opzione"
+
+# type: IP
+#: useradd.8.xml:795(replaceable) pwck.8.xml:332(replaceable)
+#: passwd.1.xml:472(replaceable) grpck.8.xml:274(replaceable)
+#: groupmod.8.xml:275(replaceable) groupadd.8.xml:319(replaceable)
+msgid "4"
+msgstr "4"
+
+#: useradd.8.xml:797(para)
+msgid "UID already in use (and no <option>-o</option>)"
+msgstr "UID già in uso (e <option>-o</option> assente)"
+
+# type: Plain text
+#: useradd.8.xml:803(para) groupdel.8.xml:194(para)
+msgid "specified group doesn't exist"
+msgstr "il gruppo specificato non esiste"
+
+#: useradd.8.xml:807(replaceable) groupmod.8.xml:287(replaceable)
+#: groupadd.8.xml:325(replaceable)
+msgid "9"
+msgstr "9"
+
+#: useradd.8.xml:809(para)
+msgid "username already in use"
+msgstr "nome utente già in uso"
+
+# type: Plain text
+#: useradd.8.xml:821(para)
+msgid "can't create home directory"
+msgstr "non è possibile creare la directory home"
+
+# type: IP
+#: useradd.8.xml:825(replaceable)
+#, fuzzy
+#| msgid "1"
+msgid "14"
+msgstr "1"
+
+#: useradd.8.xml:827(para)
+msgid "can't update SELinux user mapping"
+msgstr ""
+
+# type: TP
+#: useradd.8.xml:767(para)
+msgid ""
+"The <command>useradd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr "Il comando <command>useradd</command> restituisce i seguenti valori:"
+
+# type: Plain text
+#: useradd.8.xml:836(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <phrase condition=\"subids"
+"\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: suauth.5.xml:41(contrib) pwconv.8.xml:47(contrib)
+#: login.access.5.xml:42(contrib) gpasswd.1.xml:46(contrib)
+msgid "Creation, 1996"
+msgstr ""
+
+#: suauth.5.xml:57(refentrytitle) suauth.5.xml:64(refname)
+msgid "suauth"
+msgstr "suauth"
+
+# type: IP
+#: suauth.5.xml:58(manvolnum) shadow.5.xml:58(manvolnum)
+#: pwck.8.xml:338(replaceable) porttime.5.xml:58(manvolnum)
+#: passwd.5.xml:58(manvolnum) passwd.1.xml:478(replaceable)
+#: login.defs.5.xml:125(manvolnum) login.access.5.xml:59(manvolnum)
+#: limits.5.xml:60(manvolnum) gshadow.5.xml:47(manvolnum)
+#: grpck.8.xml:280(replaceable) faillog.5.xml:58(manvolnum)
+msgid "5"
+msgstr "5"
+
+#: suauth.5.xml:59(refmiscinfo) shadow.5.xml:59(refmiscinfo)
+#: porttime.5.xml:59(refmiscinfo) passwd.5.xml:59(refmiscinfo)
+#: login.defs.5.xml:126(refmiscinfo) login.access.5.xml:60(refmiscinfo)
+#: limits.5.xml:61(refmiscinfo) gshadow.5.xml:48(refmiscinfo)
+#: faillog.5.xml:59(refmiscinfo)
+msgid "File Formats and Conversions"
+msgstr "Formati di file e conversioni"
+
+#: suauth.5.xml:65(refpurpose)
+msgid "detailed su control file"
+msgstr "file di controllo dettagliato per «su»"
+
+#: suauth.5.xml:70(command) suauth.5.xml:196(filename)
+msgid "/etc/suauth"
+msgstr "/etc/suauth"
+
+#: suauth.5.xml:76(para)
+msgid ""
+"The file <filename>/etc/suauth</filename> is referenced whenever the su "
+"command is called. It can change the behaviour of the su command, based upon:"
+msgstr ""
+"Il file <filename>/etc/suauth</filename> viene utilizzato all'invocazione "
+"del comando «su». Può cambiare il comportamento del comando in base a:"
+
+#. .RS
+#: suauth.5.xml:83(literallayout)
+#, fuzzy, no-wrap
+#| msgid ""
+#| "\n"
+#| " 1) the user su is targetting\n"
+#| " "
+msgid ""
+"\n"
+" 1) the user su is targeting\n"
+" "
+msgstr ""
+"\n"
+" 1) l'utente che «su» sta usando come target\n"
+" "
+
+#. .fi
+#: suauth.5.xml:87(para)
+msgid ""
+"2) the user executing the su command (or any groups he might be a member of)"
+msgstr ""
+"2) l'utente che sta invocando «su» (o qualsiasi gruppo del quale questi "
+"faccia parte)"
+
+#: suauth.5.xml:92(para)
+msgid ""
+"The file is formatted like this, with lines starting with a # being treated "
+"as comment lines and ignored;"
+msgstr ""
+"Il formato del file è il seguente, con le righe che iniziano con «#» "
+"trattate come commenti e ignorate;"
+
+#: suauth.5.xml:97(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+" to-id:from-id:ACTION\n"
+" "
+msgstr ""
+"\n"
+" id-finale:id-iniziale:AZIONE\n"
+" "
+
+#: suauth.5.xml:101(para)
+msgid ""
+"Where to-id is either the word <emphasis>ALL</emphasis>, a list of usernames "
+"delimited by \",\" or the words <emphasis>ALL EXCEPT</emphasis> followed by "
+"a list of usernames delimited by \",\"."
+msgstr ""
+"Dove «id-finale» è la parola <emphasis>ALL</emphasis> (tutti), un elenco di "
+"nomi utenti separati da «,» o le parole <emphasis>ALL EXCEPT</emphasis> "
+"seguite da una lista di nomi utente separati da «,»."
+
+#: suauth.5.xml:107(para)
+#, fuzzy
+#| msgid ""
+#| "from-id is formatted the same as to-id except the extra word "
+#| "<emphasis>GROUP</emphasis> is recognised. <emphasis>ALL EXCEPT GROUP</"
+#| "emphasis> is perfectly valid too. Following <emphasis>GROUP</emphasis> "
+#| "appears one or more group names, delimited by \",\". It is not sufficient "
+#| "to have primary group id of the relevant group, an entry in "
+#| "<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry> is neccessary."
+msgid ""
+"from-id is formatted the same as to-id except the extra word "
+"<emphasis>GROUP</emphasis> is recognized. <emphasis>ALL EXCEPT GROUP</"
+"emphasis> is perfectly valid too. Following <emphasis>GROUP</emphasis> "
+"appears one or more group names, delimited by \",\". It is not sufficient to "
+"have primary group id of the relevant group, an entry in "
+"<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry> is necessary."
+msgstr ""
+"«id-iniziale» è formattato come «id-iniziale» salvo il riconoscimento della "
+"parola aggiuntiva <emphasis>GROUP</emphasis>. Anche <emphasis>ALL EXCEPT "
+"GROUP</emphasis> è perfettamente gestito. Subito dopo <emphasis>GROUP</"
+"emphasis> appaiono uno o più nomi di gruppo separati da «,». Non è "
+"sufficiente avere come gruppo primario il gruppo specificato, ma deve anche "
+"esserci la relativa riga in <citerefentry><refentrytitle>/etc/group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: suauth.5.xml:118(para)
+msgid "Action can be one only of the following currently supported options."
+msgstr "AZIONE può essere una delle seguenti opzioni attualmente supportate."
+
+#: suauth.5.xml:124(emphasis)
+msgid "DENY"
+msgstr "DENY"
+
+#: suauth.5.xml:127(para)
+msgid "The attempt to su is stopped before a password is even asked for."
+msgstr ""
+"Il tentativo di usare «su» viene bloccato prima ancora che la password sia "
+"chiesta."
+
+# type: SH
+#: suauth.5.xml:134(emphasis)
+msgid "NOPASS"
+msgstr "NOPASS"
+
+#: suauth.5.xml:137(para)
+msgid ""
+"The attempt to su is automatically successful; no password is asked for."
+msgstr ""
+"Il tentativo di usare «su» ha successo senza neppure chiedere la password."
+
+# type: TH
+#: suauth.5.xml:145(emphasis)
+msgid "OWNPASS"
+msgstr "OWNPASS"
+
+#: suauth.5.xml:148(para)
+msgid ""
+"For the su command to be successful, the user must enter his or her own "
+"password. They are told this."
+msgstr ""
+"Perché «su» abbia successo, l'utente deve inserire la propria password che "
+"verrà espressamente richiesta."
+
+#: suauth.5.xml:156(para)
+msgid ""
+"Note there are three separate fields delimited by a colon. No whitespace "
+"must surround this colon. Also note that the file is examined sequentially "
+"line by line, and the first applicable rule is used without examining the "
+"file further. This makes it possible for a system administrator to exercise "
+"as fine control as he or she wishes."
+msgstr ""
+"Notare che ci sono tre campi diversi separati da «:». Nessuno spazio deve "
+"affiancare i due punti. Notare anche che il file viene esaminato in maniera "
+"sequenziale una riga alla volta, e la prima regola applicabile viene "
+"utilizzata senza procede con la lettura delle successive. Questo permette "
+"all'amministratore di sistema di impostare dei controlli allargati o "
+"puntuali, come preferisce."
+
+# type: SH
+#: suauth.5.xml:166(title)
+msgid "EXAMPLE"
+msgstr "ESEMPIO"
+
+#: suauth.5.xml:167(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+" # sample /etc/suauth file\n"
+" #\n"
+" # A couple of privileged usernames may\n"
+" # su to root with their own password.\n"
+" #\n"
+" root:chris,birddog:OWNPASS\n"
+" #\n"
+" # Anyone else may not su to root unless in\n"
+" # group wheel. This is how BSD does things.\n"
+" #\n"
+" root:ALL EXCEPT GROUP wheel:DENY\n"
+" #\n"
+" # Perhaps terry and birddog are accounts\n"
+" # owned by the same person.\n"
+" # Access can be arranged between them\n"
+" # with no password.\n"
+" #\n"
+" terry:birddog:NOPASS\n"
+" birddog:terry:NOPASS\n"
+" #\n"
+" "
+msgstr ""
+"\n"
+" # Esempio di file /etc/suauth\n"
+" #\n"
+" # Due utenti privilegiati possono usare\n"
+" # su verso root con la propria password.\n"
+" #\n"
+" root:chris,birddog:OWNPASS\n"
+" #\n"
+" # Tutti gli altri non possono farlo a meno di non appartenere\n"
+" # al groppo wheel. Questo è come funziona in BSD.\n"
+" #\n"
+" root:ALL EXCEPT GROUP wheel:DENY\n"
+" #\n"
+" # Nel caso che terry e birddog siano account\n"
+" # della stessa persona di permettere il passaggio\n"
+" # tra loro senza richiedere la password.\n"
+" #\n"
+" terry:birddog:NOPASS\n"
+" birddog:terry:NOPASS\n"
+" #\n"
+" "
+
+# type: SH
+#: suauth.5.xml:203(title) pwconv.8.xml:216(title) login.defs.5.xml:531(title)
+msgid "BUGS"
+msgstr "ERRORI"
+
+#: suauth.5.xml:204(para)
+msgid ""
+"There could be plenty lurking. The file parser is particularly unforgiving "
+"about syntax errors, expecting no spurious whitespace (apart from beginning "
+"and end of lines), and a specific token delimiting different things."
+msgstr ""
+"Ce ne possono essere molti non visti. Il parser dei file è particolarmente "
+"rigido sugli errori di sintassi, attendendo l'assenza di spazi estranei (ad "
+"eccezione di inizio e fine riga) e specifici separatori per delimitare "
+"oggetti diversi."
+
+# type: SH
+#: suauth.5.xml:213(title) shadow.3.xml:208(title)
+msgid "DIAGNOSTICS"
+msgstr "DIAGNOSTICA"
+
+# type: Plain text
+#: suauth.5.xml:214(para)
+msgid ""
+"An error parsing the file is reported using "
+"<citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry> as level ERR on facility AUTH."
+msgstr ""
+"Qualsiasi errore durante le lettura del file viene riportato tramite "
+"<citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry> con livello ERR e «facility» AUTH."
+
+# type: Plain text
+#: suauth.5.xml:223(para)
+msgid ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: su.1.xml:58(contrib) shadow.5.xml:41(contrib) shadow.3.xml:41(contrib)
+#: porttime.5.xml:41(contrib) passwd.5.xml:41(contrib) passwd.1.xml:48(contrib)
+#: login.1.xml:74(contrib) faillog.8.xml:41(contrib) faillog.5.xml:41(contrib)
+msgid "Creation, 1989"
+msgstr ""
+
+#: su.1.xml:74(refentrytitle) su.1.xml:81(refname) su.1.xml:86(command)
+#: login.defs.5.xml:456(term)
+msgid "su"
+msgstr "su"
+
+#: su.1.xml:76(refmiscinfo) sg.1.xml:60(refmiscinfo)
+#: passwd.1.xml:66(refmiscinfo) newgrp.1.xml:60(refmiscinfo)
+#: login.1.xml:92(refmiscinfo) groups.1.xml:59(refmiscinfo)
+#: gpasswd.1.xml:64(refmiscinfo) expiry.1.xml:63(refmiscinfo)
+#: chsh.1.xml:62(refmiscinfo) chfn.1.xml:62(refmiscinfo)
+#: chage.1.xml:60(refmiscinfo)
+msgid "User Commands"
+msgstr "Comandi utente"
+
+# type: Plain text
+#: su.1.xml:82(refpurpose)
+msgid "change user ID or become superuser"
+msgstr "cambia ID utente o diventa amministratore"
+
+#: su.1.xml:91(replaceable) sg.1.xml:72(arg) newgrp.1.xml:71(arg)
+msgid "-"
+msgstr "-"
+
+#: su.1.xml:94(replaceable) login.1.xml:107(replaceable)
+#: login.1.xml:115(replaceable)
+msgid "username"
+msgstr "nome"
+
+#: su.1.xml:96(replaceable)
+msgid "args"
+msgstr ""
+
+# type: Plain text
+#: su.1.xml:104(para)
+#, fuzzy
+#| msgid ""
+#| "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."
+msgid ""
+"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."
+msgstr ""
+"<command>su</command> permette di diventare un altro utente durante una "
+"sessione di login. Se nessun <option>nome</option> utente viene specificato, "
+"<command>su</command> acquisice i privilegi di amministratore. L'opzione "
+"<option>-</option> può essere usata per fornire un ambiente simile a quello "
+"che l'utente troverebbe se effettuasse il login direttamente."
+
+#: su.1.xml:114(para)
+msgid ""
+"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>."
+msgstr ""
+
+# type: Plain text
+#: su.1.xml:122(para)
+msgid ""
+"The user will be prompted for a password, if appropriate. Invalid passwords "
+"will produce an error message. All attempts, both valid and invalid, are "
+"logged to detect abuse of the system."
+msgstr ""
+"All'utente viene quindi chiesta la password, se necessario. Una password "
+"errata viene segnalata da un messaggio d'errore. Viene effettuato il log di "
+"tutti i tentativi, siano essi riusciti o meno, al fine di rilevare ogni "
+"abuso del sistema."
+
+# type: Plain text
+#: su.1.xml:127(para)
+msgid ""
+"The current environment is passed to the new shell. The value of <envar>"
+"$PATH</envar> is reset to <filename>/bin:/usr/bin</filename> for normal "
+"users, or <filename>/sbin:/bin:/usr/sbin:/usr/bin</filename> for the "
+"superuser. This may be changed with the <option>ENV_PATH</option> and "
+"<option>ENV_SUPATH</option> definitions in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+"Le variabili d'ambiente in uso vengono passate alla nuova shell, eccetto il "
+"valore di <envar>$PATH</envar> che viene impostato a <filename>/bin:/usr/"
+"bin</filename> per gli utenti qualsiasi e a <filename>/sbin:/bin:/usr/sbin:/"
+"usr/bin</filename> per l'amministratore. Questa impostazione è controllata "
+"dalle definizioni <emphasis>ENV_PATH</emphasis> ed <emphasis>ENV_SUPATH</"
+"emphasis> in <filename>/etc/login.defs</filename>."
+
+# type: Plain text
+#: su.1.xml:136(para) login.1.xml:188(para)
+msgid ""
+"A subsystem login is indicated by the presence of a \"*\" as the first "
+"character of the login shell. The given home directory will be used as the "
+"root of a new file system which the user is actually logged into."
+msgstr ""
+"Un sottosistema di login è indicato dalla presenza del carattere «*» "
+"all'inizio della shell di login. La directory home impostata sarà utilizzata "
+"come root di un nuovo file system al quale l'utente accede."
+
+# type: TP
+#: su.1.xml:145(para)
+msgid "The options which apply to the <command>su</command> command are:"
+msgstr "Il comando <command>su</command> accetta le seguenti opzioni:"
+
+# type: IP
+#: su.1.xml:149(term)
+msgid ""
+"<option>-c</option>, <option>--command</option>&nbsp;<replaceable>COMMAND</"
+"replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--command</option>&nbsp;<replaceable>COMANDO</"
+"replaceable>"
+
+#: su.1.xml:153(para)
+msgid ""
+"Specify a command that will be invoked by the shell using its <option>-c</"
+"option>."
+msgstr ""
+"Specifica un comando che verrà invocato dalla shell tramite la sua opzione "
+"<option>-c</option>."
+
+#: su.1.xml:157(para)
+#, fuzzy
+#| msgid ""
+#| "The executed command will have no controlling terminal. This option "
+#| "cannot be used to execute interractive programs which need a controlling "
+#| "TTY."
+msgid ""
+"The executed command will have no controlling terminal. This option cannot "
+"be used to execute interactive programs which need a controlling TTY."
+msgstr ""
+"Il comando eseguito non avrà un terminale di controllo. Questa opzione non "
+"può essere utilizzata per invocare programmi interattivi che richiedono un "
+"TTY di controllo."
+
+# type: TP
+#: su.1.xml:167(term)
+msgid "<option>-</option>, <option>-l</option>, <option>--login</option>"
+msgstr "<option>-</option>, <option>-l</option>, <option>--login</option>"
+
+#: su.1.xml:171(para)
+msgid ""
+"Provide an environment similar to what the user would expect had the user "
+"logged in directly."
+msgstr ""
+"Fornisce un ambiente simile a quello che un utente si attende quando "
+"effettua direttamente il login."
+
+#: su.1.xml:175(para)
+#, fuzzy
+#| msgid ""
+#| "When <option>-</option> is used, it must be specified as the last "
+#| "<command>su</command> option. The other forms (<option>-l</option> and "
+#| "<option>--login</option>) do not have this restriction."
+msgid ""
+"When <option>-</option> is used, it must be specified before any "
+"<option>username</option>. For portability it is recommended to use it as "
+"last option, before any <option>username</option>. The other forms (<option>-"
+"l</option> and <option>--login</option>) do not have this restriction."
+msgstr ""
+"Quando si usa <option>-</option> deve essere l'ultima opzione di "
+"<command>su</command>. Le altre forme (<option>-l</option> e <option>--"
+"login</option>) non hanno questo vincolo."
+
+#: su.1.xml:190(para)
+msgid "The shell that will be invoked."
+msgstr "La shell che verrà invocata."
+
+#: su.1.xml:198(para)
+msgid "The shell specified with --shell."
+msgstr "La shell specificata con --shell."
+
+#: su.1.xml:201(para)
+msgid ""
+"If <option>--preserve-environment</option> is used, the shell specified by "
+"the <envar>$SHELL</envar> environment variable."
+msgstr ""
+"Se viene usato <option>--preserve-environment</option>, la shell specificata "
+"dalla variabile d'ambiente <envar>$SHELL</envar>."
+
+#: su.1.xml:208(para)
+msgid ""
+"The shell indicated in the <filename>/etc/passwd</filename> entry for the "
+"target user."
+msgstr ""
+"La shell indicata nel file <filename>/etc/passwd</filename> per l'utente "
+"target."
+
+#: su.1.xml:214(para)
+msgid ""
+"<filename>/bin/sh</filename> if a shell could not be found by any above "
+"method."
+msgstr "<filename>/bin/sh</filename> se gli altri metodi falliscono."
+
+#: su.1.xml:191(para)
+msgid ""
+"The invoked shell is chosen from (highest priority first): <placeholder-1/>"
+msgstr ""
+"La shell invocata viene scelta da (in ordine di priorità): <placeholder-1/>"
+
+#: su.1.xml:219(para)
+msgid ""
+"If the target user has a restricted shell (i.e. the shell field of this "
+"user's entry in <filename>/etc/passwd</filename> is not listed in <filename>/"
+"etc/shells</filename>), then the <option>--shell</option> option or the "
+"<envar>$SHELL</envar> environment variable won't be taken into account, "
+"unless <command>su</command> is called by root."
+msgstr ""
+"Se l'utente target ha una shell con restrizioni (cioè se la sua shell "
+"presente in <filename>/etc/passwd</filename> non è presente in <filename>/"
+"etc/shells</filename>), allora l'opzione <option>--shell</option> e la "
+"variabile d'ambiente <envar>$SHELL</envar> non vengono prese in "
+"considerazione a meno che <command>su</command> sia invocato da root."
+
+# type: IP
+#: su.1.xml:230(term)
+msgid ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+msgstr ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+
+#: su.1.xml:239(envar)
+msgid "$PATH"
+msgstr "$PATH"
+
+#: su.1.xml:241(para)
+msgid ""
+"reset according to the <filename>/etc/login.defs</filename> options "
+"<option>ENV_PATH</option> or <option>ENV_SUPATH</option> (see below);"
+msgstr ""
+"reimpostato in accordo alle opzioni <option>ENV_PATH</option> o "
+"<option>ENV_SUPATH</option> del file <filename>/etc/login.defs</filename> "
+"(vedi sotto);"
+
+#: su.1.xml:250(envar)
+msgid "$IFS"
+msgstr "$IFS"
+
+#: su.1.xml:252(para)
+msgid ""
+"reset to <quote>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</quote>, if it was "
+"set."
+msgstr ""
+"reimpostato a <quote>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</quote> se era "
+"impostato."
+
+# type: Plain text
+#: su.1.xml:235(para)
+msgid "Preserve the current environment, except for: <placeholder-1/>"
+msgstr "Mantiene l'ambiente attuale, fatta eccezione per: <placeholder-1/>"
+
+#: su.1.xml:261(para)
+msgid ""
+"If the target user has a restricted shell, this option has no effect (unless "
+"<command>su</command> is called by root)."
+msgstr ""
+"Se l'utente target ha una shell con restrizioni, questa opzione non ha "
+"effetto (a meno che <command>su</command> sia invocato da root)."
+
+#: su.1.xml:270(para)
+msgid ""
+"The <envar>$HOME</envar>, <envar>$SHELL</envar>, <envar>$USER</envar>, "
+"<envar>$LOGNAME</envar>, <envar>$PATH</envar>, and <envar>$IFS</envar> "
+"environment variables are reset."
+msgstr ""
+"Le variabili d'ambiente <envar>$HOME</envar>, <envar>$SHELL</envar>, <envar>"
+"$USER</envar>, <envar>$LOGNAME</envar>, <envar>$PATH</envar> e <envar>$IFS</"
+"envar> sono reimpostate."
+
+#: su.1.xml:279(para)
+msgid ""
+"If <option>--login</option> is not used, the environment is copied, except "
+"for the variables above."
+msgstr ""
+"Se l'opzione <option>--login</option> non è usata, l'ambiente è copiato con "
+"l'eccezione delle variabili elencate sopra."
+
+#: su.1.xml:286(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TERM</envar>, <envar>"
+"$COLORTERM</envar>, <envar>$DISPLAY</envar>, and <envar>$XAUTHORITY</envar> "
+"environment variables are copied if they were set."
+msgstr ""
+"Se l'opzione <option>--login</option> è utilizzata, le variabili <envar>"
+"$TERM</envar>, <envar>$COLORTERM</envar>, <envar>$DISPLAY</envar> e <envar>"
+"$XAUTHORITY</envar> sono copiate se risultano impostate."
+
+#: su.1.xml:296(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TZ</envar>, <envar>$HZ</"
+"envar>, and <envar>$MAIL</envar> environment variables are set according to "
+"the <filename>/etc/login.defs</filename> options <option>ENV_TZ</option>, "
+"<option>ENV_HZ</option>, <option>MAIL_DIR</option>, and <option>MAIL_FILE</"
+"option> (see below)."
+msgstr ""
+"Se l'opzione <option>--login</option> è utilizzata, le variabili d'ambiente "
+"<envar>$TZ</envar>, <envar>$HZ</envar> e <envar>$MAIL</envar> sono impostate "
+"in accordo alle opzioni <option>ENV_TZ</option>, <option>ENV_HZ</option>, "
+"<option>MAIL_DIR</option> e <option>MAIL_FILE</option> specificate nel file "
+"<filename>/etc/login.defs</filename> (vedi sotto)."
+
+#: su.1.xml:309(para)
+msgid ""
+"If <option>--login</option> is used, other environment variables might be "
+"set by the <option>ENVIRON_FILE</option> file (see below)."
+msgstr ""
+"Se l'opzione <option>--login</option> è utilizzata, altre variabili "
+"d'ambiente potrebbero essere impostate dal file <option>ENVIRON_FILE</"
+"option> (vedi sotto)."
+
+#: su.1.xml:317(para)
+msgid "Other environments might be set by PAM modules."
+msgstr "Altre variabili d'ambiente potrebbero essere impostate da moduli PAM."
+
+#: su.1.xml:265(para)
+msgid ""
+"Note that the default behavior for the environment is the following: "
+"<placeholder-1/>"
+msgstr ""
+"Notare che il comportamento predefinito per l'ambiente è il seguente: "
+"<placeholder-1/>"
+
+# type: Plain text
+#: su.1.xml:331(para)
+msgid ""
+"This version of <command>su</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+"Questa versione di <command>su</command> ha molte opzioni di compilazione; "
+"solo una parte di esse potrebbe essere in uso su un determinato sistema."
+
+# type: IP
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>CONSOLE</option> (string)"
+msgstr "<option>CONSOLE</option> (testo)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, either full pathname of a file containing device names (one per "
+"line) or a \":\" delimited list of device names. Root logins will be allowed "
+"only upon these devices."
+msgstr ""
+"Se definito, o il percorso completo di un file che contiene l'elenco di nomi "
+"di device (uno per riga) oppure un elenco di nomi di device separati da «:». "
+"L'accesso come root verrà permesso solo attraverso questi device."
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid "If not defined, root will be allowed on any device."
+msgstr "Se non definito, root potrà accedere da qualsiasi device."
+
+#: su.1.xml:42(para) login.defs.5.xml:42(para) login.1.xml:42(para)
+msgid "The device should be specified without the /dev/ prefix."
+msgstr "Il nome di device deve essere specificato senza il prefisso /dev."
+
+# type: IP
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>CONSOLE_GROUPS</option> (string)"
+msgstr "<option>CONSOLE_GROUPS</option> (testo)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"List of groups to add to the user's supplementary groups set when logging in "
+"on the console (as determined by the CONSOLE setting). Default is none. "
+"<placeholder-1/> Use with caution - it is possible for users to gain "
+"permanent access to these groups, even when not logged in on the console."
+msgstr ""
+"Elenco di gruppi da aggiungere ai gruppi supplementari dell'utente quando "
+"questi accede dalla console (come determinato dalla impostazione CONSOLE). "
+"Il valore predefinito è nullo. <placeholder-1/> Usare con cautela - è "
+"possibile che gli utenti ottengano l'accesso permanente a questi gruppi "
+"anche se non accedono dalla console."
+
+# type: IP
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>DEFAULT_HOME</option> (boolean)"
+msgstr "<option>DEFAULT_HOME</option> (booleano)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Indicate if login is allowed if we can't cd to the home directory. Default "
+"is no."
+msgstr ""
+"Indica se permettere l'accesso al sistema anche se non si può accedere alla "
+"directory home. Il valore predefinito è no."
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, the user will login in the root "
+"(<filename>/</filename>) directory if it is not possible to cd to her home "
+"directory."
+msgstr ""
+"Se impostato a <replaceable>yes</replaceable>, l'utente accederà alla "
+"directory root (<filename>/</filename>) nel caso che non sia possibile "
+"accedere alla propria directory home."
+
+# type: IP
+#. XXX: When compiled with PAM support, only sulogin uses ENV_HZ
+#: su.1.xml:33(term) login.defs.5.xml:33(term) login.1.xml:33(term)
+msgid "<option>ENV_HZ</option> (string)"
+msgstr "<option>ENV_HZ</option> (testo)"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"If set, it will be used to define the HZ environment variable when a user "
+"login. The value must be preceded by <replaceable>HZ=</replaceable>. A "
+"common value on Linux is <replaceable>HZ=100</replaceable>."
+msgstr ""
+"Se impostato viene utilizzato per definire il valore della variabile "
+"d'ambiente HZ al login dell'utente. Il valore deve essere preceduto da "
+"<replaceable>HZ=</replaceable>. Un valore comune per Linux è "
+"<replaceable>HZ=100</replaceable>."
+
+#: su.1.xml:41(para) login.defs.5.xml:41(para) login.1.xml:41(para)
+msgid ""
+"The <envar>HZ</envar> environment variable is only set when the user (the "
+"superuser) logs in with <command>sulogin</command>."
+msgstr ""
+"La variabile d'ambiente <envar>HZ</envar> viene impostata solo quando "
+"l'utente (il super utente) accede con <command>sulogin</command>."
+
+# type: IP
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENVIRON_FILE</option> (string)"
+msgstr "<option>ENVIRON_FILE</option> (testo)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If this file exists and is readable, login environment will be read from it. "
+"Every line should be in the form name=value."
+msgstr ""
+"Se questo file esiste ed è leggibile, l'ambiente di login viene letto da lì. "
+"Ogni riga deve essere nella forma nome=valore."
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid "Lines starting with a # are treated as comment lines and ignored."
+msgstr "Le righe che iniziano con «#» sono trattate come commenti e ignorate."
+
+# type: IP
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENV_PATH</option> (string)"
+msgstr "<option>ENV_PATH</option> (testo)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+#, fuzzy
+#| msgid ""
+#| "If set, it will be used to define the PATH environment variable when a "
+#| "regular user login. The value can be preceded by <replaceable>PATH=</"
+#| "replaceable>, or a colon separated list of paths (for example "
+#| "<replaceable>/bin:/usr/bin</replaceable>). The default value is "
+#| "<replaceable>PATH=/bin:/usr/bin</replaceable>."
+msgid ""
+"If set, it will be used to define the PATH environment variable when a "
+"regular user login. The value is a colon separated list of paths (for "
+"example <replaceable>/bin:/usr/bin</replaceable>) and can be preceded by "
+"<replaceable>PATH=</replaceable>. The default value is <replaceable>PATH=/"
+"bin:/usr/bin</replaceable>."
+msgstr ""
+"Se impostato, viene utilizzato per definire la variabile d'ambiente PATH "
+"all'accesso di un utente normale. Il valore può essere preceduto da "
+"<replaceable>PATH=</replaceable> e composto da una lista di directory "
+"separate da «:» (per esempio <replaceable>/bin:/usr/bin</replaceable>). Il "
+"valore predefinito è <replaceable>PATH=/bin:/usr/bin</replaceable>."
+
+# type: IP
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENV_SUPATH</option> (string)"
+msgstr "<option>ENV_SUPATH</option> (testo)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+#, fuzzy
+#| msgid ""
+#| "If set, it will be used to define the PATH environment variable when the "
+#| "superuser login. The value can be preceded by <replaceable>PATH=</"
+#| "replaceable>, or a colon separated list of paths (for example "
+#| "<replaceable>/sbin:/bin:/usr/sbin:/usr/bin</replaceable>). The default "
+#| "value is <replaceable>PATH=/sbin:/bin:/usr/sbin:/usr/bin</replaceable>."
+msgid ""
+"If set, it will be used to define the PATH environment variable when the "
+"superuser login. The value is a colon separated list of paths (for example "
+"<replaceable>/sbin:/bin:/usr/sbin:/usr/bin</replaceable>) and can be "
+"preceded by <replaceable>PATH=</replaceable>. The default value is "
+"<replaceable>PATH=/sbin:/bin:/usr/sbin:/usr/bin</replaceable>."
+msgstr ""
+"> #: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)\n"
+"> > msgid \"\"\n"
+"> > \"If set, it will be used to define the PATH environment variable when "
+"the \"\n"
+"> > \"superuser login. The value can be preceded by <replaceable>PATH=</\"\n"
+"> > \"replaceable>, or a colon separated list of paths (for example "
+"<replaceable>/\"\n"
+"> > \"sbin:/bin:/usr/sbin:/usr/bin</replaceable>). The default value is \"\n"
+"> > \"<replaceable>PATH=/sbin:/bin:/usr/sbin:/usr/bin</replaceable>.\"\n"
+"> > msgstr \"Se impostato, viene utilizzato per definire la variabile "
+"d'ambiente PATH al login del superutente. Il valore può essere preceduto da "
+"<replaceable>PATH=</replaceable>, ed è formato da un elenco di directory "
+"separati dal «:» (ad esempio <replaceable>/sbin:/bin:/usr/sbin:/usr/bin</"
+"replaceable>). Il valore predefinito è <replaceable>PATH=/sbin:/bin:/usr/"
+"sbin:/usr/bin</replaceable>.\"\n"
+"> \n"
+"> s/separatI dal/separatE da\n"
+"> "
+
+# type: IP
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENV_TZ</option> (string)"
+msgstr "<option>ENV_TZ</option> (testo)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the TZ environment variable when a user "
+"login. The value can be the name of a timezone preceded by <replaceable>TZ=</"
+"replaceable> (for example <replaceable>TZ=CST6CDT</replaceable>), or the "
+"full path to the file containing the timezone specification (for example "
+"<filename>/etc/tzname</filename>)."
+msgstr ""
+"Se impostato viene usato per definire la variabile d'ambiente TZ al login "
+"dell'utente. Il valore può essere il nome di una «timezone» preceduta da "
+"<replaceable>TZ=</replaceable> (ad esempio <replaceable>TZ=CST6CDT</"
+"replaceable>), o il percorso completo di un file che contenga la specifica "
+"della «timezone» (ad esempio <filename>/etc/tzname</filename>)."
+
+#. TODO: it can in fact be used to set any other variable
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"If a full path is specified but the file does not exist or cannot be read, "
+"the default is to use <replaceable>TZ=CST6CDT</replaceable>."
+msgstr ""
+"Se viene specificato il percorso completo di un file che però non esiste o "
+"non può essere letto, allora viene utilizzato il valore predefinito "
+"<replaceable>TZ=CST6CDT</replaceable>."
+
+# type: IP
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#: chsh.1.xml:32(term) chfn.1.xml:32(term)
+msgid "<option>LOGIN_STRING</option> (string)"
+msgstr "<option>LOGIN_STRING</option> (testo)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+#: chsh.1.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"The string used for prompting a password. The default is to use \"Password: "
+"\", or a translation of that string. If you set this variable, the prompt "
+"will not be translated."
+msgstr ""
+"Il testo da utilizzare per richiedere la password. Il valore predefinito è "
+"«Password: » o una sua traduzione. Se si imposta questa variabile allora il "
+"testo non verrà tradotto."
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+#: chsh.1.xml:39(para) chfn.1.xml:39(para)
+msgid ""
+"If the string contains <replaceable>%s</replaceable>, this will be replaced "
+"by the user's name."
+msgstr ""
+"Se il testo contiene <replaceable>%s</replaceable>, questo verrà sostituito "
+"dal nome dell'utente."
+
+# type: IP
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>MAIL_CHECK_ENAB</option> (boolean)"
+msgstr "<option>MAIL_CHECK_ENAB</option> (testo)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable checking and display of mailbox status upon login."
+msgstr ""
+"Abilita la verifica e stampa a video dello stato della casella di posta al "
+"momento dell'accesso al sistema."
+
+#: su.1.xml:37(para) login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"You should disable it if the shell startup files already check for mail "
+"(\"mailx -e\" or equivalent)."
+msgstr ""
+"Andrebbe disabilitato se i file di avvio della shell effettuano già questo "
+"controllo («mailx -e» o equivalente)."
+
+# type: IP
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>QUOTAS_ENAB</option> (boolean)"
+msgstr "<option>QUOTAS_ENAB</option> (booleano)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable setting of resource limits from <filename>/etc/limits</filename> and "
+"ulimit, umask, and niceness from the user's passwd gecos field."
+msgstr ""
+"Abilita l'impostazione di limiti di risorsa definiti in <filename>/etc/"
+"limits</filename> e ulimit, umask e livello di «nice» in base al campo gecos "
+"del passwd dell'utente."
+
+# type: IP
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SULOG_FILE</option> (string)"
+msgstr "<option>SULOG_FILE</option> (testo)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "If defined, all su activity is logged to this file."
+msgstr "Se definito, tutta l'attività di «su» viene tracciata in questo file."
+
+# type: IP
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SU_NAME</option> (string)"
+msgstr "<option>SU_NAME</option> (testo)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"If defined, the command name to display when running \"su -\". For example, "
+"if this is defined as \"su\" then a \"ps\" will display the command is \"-su"
+"\". If not defined, then \"ps\" would display the name of the shell actually "
+"being run, e.g. something like \"-sh\"."
+msgstr ""
+"Se definito è il nome del comando da mostrare quando si esegue «su -». Ad "
+"esempio, se lo di definisce come «su» allora «ps» mostrerà che il comando è "
+"«-su». Se non definito, «ps» mostrerà il nome della shell invocata, come «-"
+"sh»."
+
+# type: IP
+#: su.1.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>SU_WHEEL_ONLY</option> (boolean)"
+msgstr "<option>SU_WHEEL_ONLY</option> (booleano)"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the user must be listed as a member of "
+"the first gid 0 group in <filename>/etc/group</filename> (called "
+"<replaceable>root</replaceable> on most Linux systems) to be able to "
+"<command>su</command> to uid 0 accounts. If the group doesn't exist or is "
+"empty, no one will be able to <command>su</command> to uid 0."
+msgstr ""
+"Se <replaceable>yes</replaceable>, l'utente deve essere elencato come membro "
+"del primo gruppo con gid 0 in <filename>/etc/group</filename> (chiamato "
+"<replaceable>root</replaceable> in molti sistemi Linux) perché sia possibile "
+"usare <command>su</command> verso account con uid 0. Se il gruppo non esiste "
+"o è vuoto, nessuno potrà utilizzare <command>su</command> verso uid 0."
+
+# type: IP
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SYSLOG_SU_ENAB</option> (boolean)"
+msgstr "<option>SYSLOG_SU_ENAB</option> (booleano)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"Enable \"syslog\" logging of <command>su</command> activity - in addition to "
+"sulog file logging."
+msgstr ""
+"Abilita la tracciatura su «syslog» dell'attività di <command>su</command>, "
+"oltre a quella sul file «sulog»."
+
+#: su.1.xml:391(para)
+msgid ""
+"On success, <command>su</command> returns the exit value of the command it "
+"executed."
+msgstr ""
+"In caso di successo, il valore restituito da <command>su</command> è quello "
+"del comando da esso eseguito."
+
+#: su.1.xml:395(para)
+msgid ""
+"If this command was terminated by a signal, <command>su</command> returns "
+"the number of this signal plus 128."
+msgstr ""
+"Se questo comando è terminato da un segnale, <command>su</command> "
+"restituisce il numero del segnale più 128."
+
+#: su.1.xml:399(para)
+msgid ""
+"If su has to kill the command (because it was asked to terminate, and the "
+"command did not terminate in time), <command>su</command> returns 255."
+msgstr ""
+"Se «su» deve terminare il comando (perché gli è stato chiesto di terminare "
+"ma il comando non è terminato in tempo), <command>su</command> restituisce "
+"255."
+
+# type: IP
+#: su.1.xml:411(para)
+msgid "success (<option>--help</option> only)"
+msgstr "successo (solo <option>--help</option>)"
+
+#: su.1.xml:417(para)
+msgid "System or authentication failure"
+msgstr "Errore di sistema o di autenticazione"
+
+# type: IP
+#: su.1.xml:421(replaceable)
+msgid "126"
+msgstr "126"
+
+# type: Plain text
+#: su.1.xml:423(para)
+msgid "The requested command was not found"
+msgstr "Il comando richiesto non è stato trovato"
+
+# type: IP
+#: su.1.xml:427(replaceable)
+msgid "127"
+msgstr "127"
+
+#: su.1.xml:429(para)
+msgid "The requested command could not be executed"
+msgstr "Il comando richiesto non può essere eseguito"
+
+#: su.1.xml:404(para)
+msgid ""
+"Some exit values from <command>su</command> are independent from the "
+"executed command: <placeholder-1/>"
+msgstr ""
+"Alcuni dei codici d'uscita di <command>su</command> sono indipendenti dal "
+"comando eseguito: <placeholder-1/>\""
+
+# type: Plain text
+#: su.1.xml:438(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>."
+
+#: sg.1.xml:58(refentrytitle) sg.1.xml:65(refname) sg.1.xml:71(command)
+msgid "sg"
+msgstr "sg"
+
+# type: Plain text
+#: sg.1.xml:66(refpurpose)
+msgid "execute command as different group ID"
+msgstr "esegue un comando con un diverso ID di gruppo"
+
+#: sg.1.xml:74(arg)
+msgid "-c"
+msgstr "-c"
+
+#: sg.1.xml:73(arg)
+msgid "group <placeholder-1/> command"
+msgstr "comando <placeholder-1/> group"
+
+# type: Plain text
+#: sg.1.xml:82(para)
+msgid ""
+"The <command>sg</command> command works similar to <command>newgrp</command> "
+"but accepts a command. The command will be executed with the <filename>/bin/"
+"sh</filename> shell. With most shells you may run <command>sg</command> "
+"from, you need to enclose multi-word commands in quotes. Another difference "
+"between <command>newgrp</command> and <command>sg</command> is that some "
+"shells treat <command>newgrp</command> specially, replacing themselves with "
+"a new instance of a shell that <command>newgrp</command> creates. This "
+"doesn't happen with <command>sg</command>, so upon exit from a <command>sg</"
+"command> command you are returned to your previous group ID."
+msgstr ""
+"Il comando <command>sg</command> funziona in maniera analoga a "
+"<command>newgrp</command>, ma accetta un comando che viene eseguito con la "
+"shell <filename>/bin/sh</filename>. La maggior parte delle shell che "
+"permettono l'uso di <command>sg</command> richiede che i comandi composti da "
+"più parole siano inclusi tra apici. Un'altra differenza tra <command>newgrp</"
+"command> e <command>sg</command> è che alcune shell trattano "
+"<command>newgrp</command> in maniera speciale, sostituendo se stesse con la "
+"shell creata da <command>newgrp</command>. Questo non accade con "
+"<command>sg</command>, per cui all'uscita del comando <command>sg</command> "
+"si ritorna al precedente ID di gruppo."
+
+# type: IP
+#: sg.1.xml:32(term) newgrp.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SYSLOG_SG_ENAB</option> (boolean)"
+msgstr "<option>SYSLOG_SG_ENAB</option> (booleano)"
+
+#: sg.1.xml:34(para) newgrp.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable \"syslog\" logging of <command>sg</command> activity."
+msgstr ""
+"Abilita il tracciamento dell'attività di <command>sg</command> su «syslog»."
+
+# type: Plain text
+#: sg.1.xml:141(para)
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry></phrase>."
+
+#: shadow.5.xml:57(refentrytitle) shadow.5.xml:64(refname)
+#: shadow.3.xml:57(refentrytitle) shadow.3.xml:64(refname)
+#: pwck.8.xml:84(replaceable) grpck.8.xml:76(replaceable)
+msgid "shadow"
+msgstr "shadow"
+
+# type: Plain text
+#: shadow.5.xml:65(refpurpose)
+msgid "shadowed password file"
+msgstr "file delle password shadow"
+
+# type: Plain text
+#: shadow.5.xml:70(para)
+msgid ""
+"<filename>shadow</filename> is a file which contains the password "
+"information for the system's accounts and optional aging information."
+msgstr ""
+"<filename>shadow</filename> è un file che contiene le informazioni sulle "
+"password per gli account degli utenti e, opzionalmente, le informazioni "
+"sulla durata delle password («aging»)."
+
+# type: Plain text
+#: shadow.5.xml:76(para) gshadow.5.xml:64(para)
+msgid ""
+"This file must not be readable by regular users if password security is to "
+"be maintained."
+msgstr ""
+"Questo file non deve essere leggibile dagli utenti normali se si vuole "
+"mantenere la sicurezza sulle password."
+
+#: shadow.5.xml:81(para)
+msgid ""
+"Each line of this file contains 9 fields, separated by colons (<quote>:</"
+"quote>), in the following order:"
+msgstr ""
+"Ciascuna riga di questo file contiene 9 campi separati da due punti (<quote>:"
+"</quote>), nel seguente ordine:"
+
+# type: Plain text
+#: shadow.5.xml:88(emphasis) passwd.5.xml:78(para)
+msgid "login name"
+msgstr "nome di login"
+
+#: shadow.5.xml:90(para)
+msgid "It must be a valid account name, which exist on the system."
+msgstr "Deve essere un nome valido di un account esistente nel sistema."
+
+# type: Plain text
+#: shadow.5.xml:96(emphasis) gshadow.5.xml:83(emphasis)
+msgid "encrypted password"
+msgstr "password cifrata"
+
+#: shadow.5.xml:98(para)
+msgid ""
+"This field may be empty, in which case no passwords are required to "
+"authenticate as the specified login name. However, some applications which "
+"read the <filename>/etc/shadow</filename> file may decide not to permit any "
+"access at all if the password field is empty."
+msgstr ""
+"Questo campo può essere vuoto, nel qual caso nessuna password è richiesta "
+"per l'autenticazione di questo specifico nome di login. Tuttavia alcune "
+"applicazioni che leggono <filename>/etc/shadow</filename> possono decidere "
+"di non permettere nessun accesso se il campo password è vuoto."
+
+#: shadow.5.xml:105(para) gshadow.5.xml:107(para)
+#, fuzzy
+#| msgid ""
+#| "A password field which starts with a exclamation mark means that the "
+#| "password is locked. The remaining characters on the line represent the "
+#| "password field before the password was locked."
+msgid ""
+"A password field which starts with an exclamation mark means that the "
+"password is locked. The remaining characters on the line represent the "
+"password field before the password was locked."
+msgstr ""
+"Se il campo password inizia con un punto esclamativo vuol dire che la "
+"password è bloccata. I restanti caratteri del campo sono il contenuto del "
+"campo password prima che venisse bloccata."
+
+# type: Plain text
+#: shadow.5.xml:111(para) passwd.5.xml:126(para) gshadow.5.xml:85(para)
+msgid ""
+"Refer to <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry> for details on how this string is interpreted."
+msgstr ""
+"Fare riferimento a <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry> per dettagli sul modo "
+"in cui questa stringa viene interpretata."
+
+# type: Plain text
+#: shadow.5.xml:116(para) passwd.5.xml:131(para)
+msgid ""
+"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)."
+msgstr ""
+"Se il campo password contiene un testo che non è un risultato valido di "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, come ad esempio ! o *, l'utente non potrà accedere al sistema "
+"utilizzando la password unix (ma potrà accedere al sistema in altri modi)."
+
+# type: Plain text
+#: shadow.5.xml:127(emphasis)
+msgid "date of last password change"
+msgstr "data dell'ultimo cambio di password"
+
+#: shadow.5.xml:130(para)
+msgid ""
+"The date of the last password change, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr ""
+"Data dell'ultimo cambio di password espressa in numero di giorni a partire "
+"dal 1 gennaio 1970."
+
+#: shadow.5.xml:134(para)
+#, fuzzy
+#| msgid ""
+#| "The value 0 has a special meaning, which is that the user should change "
+#| "her pasword the next time she will log in the system."
+msgid ""
+"The value 0 has a special meaning, which is that the user should change her "
+"password the next time she will log in the system."
+msgstr ""
+"Il valore 0 ha un significato speciale, vale a dire che l'utente deve "
+"cambiare la propria password al prossimo accesso al sistema."
+
+#: shadow.5.xml:139(para)
+msgid "An empty field means that password aging features are disabled."
+msgstr "Un campo vuoto implica che la scadenza della password è disabilitata."
+
+# type: SS
+#: shadow.5.xml:146(emphasis)
+msgid "minimum password age"
+msgstr "età minima password"
+
+#: shadow.5.xml:148(para)
+msgid ""
+"The minimum password age is the number of days the user will have to wait "
+"before she will be allowed to change her password again."
+msgstr ""
+"L'età minima password è il numero di giorni che l'utente dovrà attendere "
+"prima di poter cambiare nuovamente la propria password."
+
+#: shadow.5.xml:153(para)
+msgid "An empty field and value 0 mean that there are no minimum password age."
+msgstr ""
+"Un campo vuoto o con valore 0 indica che non c'è una età minima della "
+"password."
+
+# type: SS
+#: shadow.5.xml:160(emphasis)
+msgid "maximum password age"
+msgstr "età massima password"
+
+#: shadow.5.xml:162(para)
+msgid ""
+"The maximum password age is the number of days after which the user will "
+"have to change her password."
+msgstr ""
+"L'età massima password è il numero di giorni dopo il quale l'utente deve "
+"cambiare la propria password."
+
+#: shadow.5.xml:166(para)
+msgid ""
+"After this number of days is elapsed, the password may still be valid. The "
+"user should be asked to change her password the next time she will log in."
+msgstr ""
+"Quando questo numero di giorni è passato, la password può ancora essere "
+"valida. All'utente verrà chiesto di cambiare la password durante il "
+"successivo accesso."
+
+#: shadow.5.xml:171(para)
+msgid ""
+"An empty field means that there are no maximum password age, no password "
+"warning period, and no password inactivity period (see below)."
+msgstr ""
+"Un campo vuoto indica che non ci sono una età massima password, un periodo "
+"di avviso e nessun periodo di inattività (vedere oltre)."
+
+#: shadow.5.xml:176(para)
+msgid ""
+"If the maximum password age is lower than the minimum password age, the user "
+"cannot change her password."
+msgstr ""
+"Se l'età massima password è minore dell'età minima password, l'utente non "
+"può cambiare la propria password."
+
+# type: SS
+#: shadow.5.xml:184(emphasis)
+msgid "password warning period"
+msgstr "periodo avviso password"
+
+# type: Plain text
+#: shadow.5.xml:187(para)
+msgid ""
+"The number of days before a password is going to expire (see the maximum "
+"password age above) during which the user should be warned."
+msgstr ""
+"Il numero di giorni prima della scadenza di una password (vedere età massima "
+"password, sopra) durante il quale l'utente riceve un avviso."
+
+#: shadow.5.xml:192(para)
+msgid ""
+"An empty field and value 0 mean that there are no password warning period."
+msgstr ""
+"Un campo vuoto e il valore 0 indicano che non c'è un periodo di avviso "
+"password."
+
+#: shadow.5.xml:200(emphasis)
+msgid "password inactivity period"
+msgstr "periodo inattività password"
+
+#: shadow.5.xml:203(para)
+msgid ""
+"The number of days after a password has expired (see the maximum password "
+"age above) during which the password should still be accepted (and the user "
+"should update her password during the next login)."
+msgstr ""
+"Il numero di giorni dopo la scadenza della password (vedere età massima "
+"password, sopra) durante il quale la password è ancora accettata (e l'utente "
+"dovrebbe aggiornare la propria password al primo accesso)."
+
+#: shadow.5.xml:209(para)
+msgid ""
+"After expiration of the password and this expiration period is elapsed, no "
+"login is possible using the current user's password. The user should contact "
+"her administrator."
+msgstr ""
+"Dopo la scadenza della password e di questo periodo, l'utente non potrà "
+"accedere usando questa password, ma dovrà contattare l'amministratore."
+
+#: shadow.5.xml:214(para)
+msgid ""
+"An empty field means that there are no enforcement of an inactivity period."
+msgstr "Un campo vuoto implica che non è applicato il periodo di inattività."
+
+# type: Plain text
+#: shadow.5.xml:222(emphasis)
+msgid "account expiration date"
+msgstr "data scadenza account"
+
+#: shadow.5.xml:225(para)
+msgid ""
+"The date of expiration of the account, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr ""
+"La data di scadenza dell'account, espressa in numero di giorni dal 1 gennaio "
+"1970."
+
+#: shadow.5.xml:229(para)
+#, fuzzy
+#| msgid ""
+#| "Note that an account expiration differs from a password expiration. In "
+#| "case of an acount expiration, the user shall not be allowed to login. In "
+#| "case of a password expiration, the user is not allowed to login using her "
+#| "password."
+msgid ""
+"Note that an account expiration differs from a password expiration. In case "
+"of an account expiration, the user shall not be allowed to login. In case of "
+"a password expiration, the user is not allowed to login using her password."
+msgstr ""
+"Notare che la scadenza dell'account differisce da quella della password. Nel "
+"caso di un account scaduto l'utente non deve poter accedere ulteriormente al "
+"sistema. Nel caso di password scaduta invece l'utente non è abilitato ad "
+"accedere con la propria password."
+
+#: shadow.5.xml:235(para)
+msgid "An empty field means that the account will never expire."
+msgstr "Un campo vuoto implica che l'account non scade mai."
+
+#: shadow.5.xml:238(para)
+msgid ""
+"The value 0 should not be used as it is interpreted as either an account "
+"with no expiration, or as an expiration on Jan 1, 1970."
+msgstr ""
+"Il valore 0 non andrebbe usato perché potrebbe essere interpretato come "
+"account che non scade o come scaduto il 1 gennaio 1970."
+
+# type: Plain text
+#: shadow.5.xml:246(emphasis)
+msgid "reserved field"
+msgstr "campo riservato"
+
+# type: Plain text
+#: shadow.5.xml:248(para)
+msgid "This field is reserved for future use."
+msgstr "Questo campo è riservato per uso futuro."
+
+#: shadow.5.xml:270(filename)
+msgid "/etc/shadow-"
+msgstr "/etc/shadow-"
+
+#: shadow.5.xml:272(para)
+msgid "Backup file for /etc/shadow."
+msgstr "Copia di backup per /etc/shadow."
+
+#: shadow.5.xml:273(para) passwd.5.xml:178(para)
+msgid ""
+"Note that this file is used by the tools of the shadow toolsuite, but not by "
+"all user and password management tools."
+msgstr ""
+"Notare che questo file viene usato dagli strumenti del pacchetto shadow, ma "
+"non da tutti gli strumenti per la gestione di utenti e password."
+
+# type: Plain text
+#: shadow.5.xml:284(para)
+msgid ""
+"<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>"
+
+#: shadow.3.xml:59(refmiscinfo)
+msgid "Library Calls"
+msgstr "Chiamate di libreria"
+
+#: shadow.3.xml:65(refname)
+msgid "getspnam"
+msgstr "getspnam"
+
+# type: Plain text
+#: shadow.3.xml:66(refpurpose)
+msgid "encrypted password file routines"
+msgstr "routine per file delle password cifrate"
+
+# type: SH
+#: shadow.3.xml:70(title)
+msgid "SYNTAX"
+msgstr "SINTASSI"
+
+#: shadow.3.xml:72(emphasis)
+msgid "#include &lt;shadow.h&gt;"
+msgstr "#include &lt;shadow.h&gt;"
+
+# type: Plain text
+#: shadow.3.xml:76(emphasis)
+msgid "struct spwd *getspent();"
+msgstr "struct spwd *getspent();"
+
+# type: Plain text
+#: shadow.3.xml:80(emphasis)
+msgid "struct spwd *getspnam(char"
+msgstr "struct spwd *getspnam(char"
+
+#: shadow.3.xml:81(emphasis)
+msgid "*name"
+msgstr "*nome"
+
+#: shadow.3.xml:81(emphasis) shadow.3.xml:94(emphasis)
+#: shadow.3.xml:99(emphasis) shadow.3.xml:105(emphasis)
+msgid ");"
+msgstr ");"
+
+# type: Plain text
+#: shadow.3.xml:85(emphasis)
+msgid "void setspent();"
+msgstr "void setspent();"
+
+# type: Plain text
+#: shadow.3.xml:89(emphasis)
+msgid "void endspent();"
+msgstr "void endspent();"
+
+# type: Plain text
+#: shadow.3.xml:93(emphasis)
+msgid "struct spwd *fgetspent(FILE"
+msgstr "struct spwd *fgetspent(FILE"
+
+#: shadow.3.xml:94(emphasis) shadow.3.xml:105(emphasis)
+msgid "*fp"
+msgstr "*fp"
+
+# type: Plain text
+#: shadow.3.xml:98(emphasis)
+msgid "struct spwd *sgetspent(char"
+msgstr "struct spwd *sgetspent(char"
+
+#: shadow.3.xml:99(emphasis)
+msgid "*cp"
+msgstr "*cp"
+
+#: shadow.3.xml:103(emphasis)
+msgid "int putspent(struct spwd"
+msgstr "int putspent(struct spwd"
+
+#: shadow.3.xml:104(emphasis)
+msgid "*p,"
+msgstr "*p,"
+
+# type: SH
+#: shadow.3.xml:104(emphasis)
+msgid "FILE"
+msgstr "FILE"
+
+#: shadow.3.xml:109(emphasis)
+msgid "int lckpwdf();"
+msgstr "int lckpwdf();"
+
+#: shadow.3.xml:113(emphasis)
+msgid "int ulckpwdf();"
+msgstr "int ulckpwdf();"
+
+# type: Plain text
+#: shadow.3.xml:119(para)
+msgid ""
+"<emphasis remap=\"I\">shadow</emphasis> manipulates the contents of the "
+"shadow password file, <filename>/etc/shadow</filename>. The structure in the "
+"<emphasis remap=\"I\">#include</emphasis> file is:"
+msgstr ""
+"<emphasis remap=\"I\">shadow</emphasis> manipola il contenuto del file delle "
+"password shadow, <filename>/etc/shadow</filename>. La struttura nel file "
+"<emphasis remap=\"I\">#include</emphasis> è la seguente:"
+
+#: shadow.3.xml:124(programlisting)
+#, no-wrap
+msgid ""
+"struct spwd {\n"
+" char\t\t*sp_namp; /* user login name */\n"
+" char\t\t*sp_pwdp; /* encrypted password */\n"
+" long int\t\tsp_lstchg; /* last password change */\n"
+" long int\t\tsp_min; /* days until change allowed. */\n"
+" long int\t\tsp_max; /* days before change required */\n"
+" long int\t\tsp_warn; /* days warning for expiration */\n"
+" long int\t\tsp_inact; /* days before account inactive */\n"
+" long int\t\tsp_expire; /* date when account expires */\n"
+" unsigned long int\tsp_flag; /* reserved for future use */\n"
+"}\n"
+" "
+msgstr ""
+"struct spwd {\n"
+" char\t\t*sp_namp; /* login dell'utente */\n"
+" char\t\t*sp_pwdp; /* password cifrata */\n"
+" long int\t\tsp_lstchg; /* ultimo cambio della password */\n"
+" long int\t\tsp_min; /* giorni minimi tra i cambi */\n"
+" long int\t\tsp_max; /* giorni massimi tra i cambi */\n"
+" long int\t\tsp_warn; /* giorni di preavviso */\n"
+" long int\t\tsp_inact; /* giorni di inattività */\n"
+" long int\t\tsp_expire; /* data di scadenza dell'account */\n"
+" unsigned long int\tsp_flag; /* riservato per uso futuro */\n"
+"}\n"
+" "
+
+# type: Plain text
+#: shadow.3.xml:136(para)
+msgid "The meanings of each field are:"
+msgstr "Ciascun campo significa:"
+
+# type: Plain text
+#: shadow.3.xml:139(para)
+msgid "sp_namp - pointer to null-terminated user name"
+msgstr ""
+"sp_namp - puntatore a una stringa null-terminated che contiene il nome "
+"utente."
+
+# type: Plain text
+#: shadow.3.xml:142(para)
+msgid "sp_pwdp - pointer to null-terminated password"
+msgstr ""
+"sp_pwdp - puntatore a una stringa null-terminated che contiene la password."
+
+# type: Plain text
+#: shadow.3.xml:145(para)
+msgid "sp_lstchg - days since Jan 1, 1970 password was last changed"
+msgstr ""
+"sp_lstchg - giorni trascorsi dal 1 gennaio 1970 al momento in cui la "
+"password è stata cambiata l'ultima volta."
+
+# type: Plain text
+#: shadow.3.xml:148(para)
+msgid "sp_min - days before which password may not be changed"
+msgstr "sp_min - giorni prima dei quali la password non può essere cambiata."
+
+# type: Plain text
+#: shadow.3.xml:151(para)
+msgid "sp_max - days after which password must be changed"
+msgstr "sp_max - giorni dopo i quali la password deve essere cambiata."
+
+# type: Plain text
+#: shadow.3.xml:154(para)
+msgid ""
+"sp_warn - days before password is to expire that user is warned of pending "
+"password expiration"
+msgstr ""
+"sp_warn - giorni prima della scadenza della password in cui l'utente viene "
+"avvertito."
+
+# type: Plain text
+#: shadow.3.xml:159(para)
+msgid ""
+"sp_inact - days after password expires that account is considered inactive "
+"and disabled"
+msgstr ""
+"sp_inact - giorni dopo la scadenza della password dopo i quali l'account "
+"viene considerato inattivo e disabilitato."
+
+# type: Plain text
+#: shadow.3.xml:164(para)
+msgid "sp_expire - days since Jan 1, 1970 when account will be disabled"
+msgstr ""
+"sp_expire - giorni a partire dal 1 gennaio 1970 dopo i quali l'account viene "
+"disabilitato."
+
+# type: Plain text
+#: shadow.3.xml:167(para)
+msgid "sp_flag - reserved for future use"
+msgstr "sp_flag - riservato per uso futuro."
+
+# type: Plain text
+#: shadow.3.xml:175(para)
+msgid ""
+"<emphasis>getspent</emphasis>, <emphasis>getspname</emphasis>, "
+"<emphasis>fgetspent</emphasis>, and <emphasis>sgetspent</emphasis> each "
+"return a pointer to a <emphasis>struct spwd</emphasis>. <emphasis>getspent</"
+"emphasis> returns the next entry from the file, and <emphasis>fgetspent</"
+"emphasis> returns the next entry from the given stream, which is assumed to "
+"be a file of the proper format. <emphasis>sgetspent</emphasis> returns a "
+"pointer to a <emphasis>struct spwd</emphasis> using the provided string as "
+"input. <emphasis>getspnam</emphasis> searches from the current position in "
+"the file for an entry matching <emphasis>name</emphasis>."
+msgstr ""
+"<emphasis>getspent</emphasis>, <emphasis>getspname</emphasis>, "
+"<emphasis>fgetspent</emphasis> e <emphasis>sgetspent</emphasis> "
+"restituiscono tutte un puntatore a uno <emphasis>struct spwd</emphasis>. "
+"<emphasis>getspent</emphasis> restituisce la voce successiva nel file, "
+"<emphasis>fgetspent</emphasis> la voce successiva nello stream specificato, "
+"che si suppone sia un file nel formato corretto. <emphasis>sgetspent</"
+"emphasis> restituisce un puntatore a uno <emphasis>struct spwd</emphasis> "
+"usando come input la stringa fornita. <emphasis>getspnam</emphasis> cerca "
+"una voce che corrisponde a <emphasis>name</emphasis> partendo dalla "
+"posizione corrente nel file."
+
+# type: Plain text
+#: shadow.3.xml:188(para)
+msgid ""
+"<emphasis>setspent</emphasis> and <emphasis>endspent</emphasis> may be used "
+"to begin and end, respectively, access to the shadow password file."
+msgstr ""
+"<emphasis>setspent</emphasis> e <emphasis>endspent</emphasis> sono usate "
+"rispettivamente per iniziare e terminare l'accesso al file delle password "
+"shadow."
+
+# type: Plain text
+#: shadow.3.xml:194(para)
+msgid ""
+"The <emphasis>lckpwdf</emphasis> and <emphasis>ulckpwdf</emphasis> routines "
+"should be used to insure exclusive access to the <filename>/etc/shadow</"
+"filename> file. <emphasis>lckpwdf</emphasis> attempts to acquire a lock "
+"using <emphasis>pw_lock</emphasis> for up to 15 seconds. It continues by "
+"attempting to acquire a second lock using <emphasis>spw_lock</emphasis> for "
+"the remainder of the initial 15 seconds. Should either attempt fail after a "
+"total of 15 seconds, <emphasis>lckpwdf</emphasis> returns -1. When both "
+"locks are acquired 0 is returned."
+msgstr ""
+"Le funzioni <emphasis>lckpwdf</emphasis> e <emphasis>ulckpwdf</emphasis> si "
+"usano per garantire l'accesso esclusivo al file <filename>/etc/shadow</"
+"filename>. <emphasis>lckpwdf</emphasis> prova ad acquisire il lock tramite "
+"<emphasis>pw_lock</emphasis> per un massimo di 15 secondi, dopodiché tenta "
+"di ottenere un secondo lock usando <emphasis>spw_lock</emphasis> per il "
+"tempo che rimane dei 15 secondi iniziali. Se anche uno solo dei due "
+"tentativi fallisce dopo un totale di 15 secondi, <emphasis>lckpwdf</"
+"emphasis> restituisce -1, mentre restituisce 0 se riesce ad acquisire "
+"entrambi i lock."
+
+# type: Plain text
+#: shadow.3.xml:209(para)
+msgid ""
+"Routines return NULL if no more entries are available or if an error occurs "
+"during processing. Routines which have <emphasis>int</emphasis> as the "
+"return value return 0 for success and -1 for failure."
+msgstr ""
+"Le funzioni restituiscono NULL se non ci sono altre voci disponibili o se si "
+"verifica un errore durante l'elaborazione. Le funzioni di tipo "
+"<emphasis>int</emphasis> restituiscono 0 in caso di successo e -1 in caso di "
+"errore."
+
+# type: Plain text
+#: shadow.3.xml:219(para)
+msgid ""
+"These routines may only be used by the superuser as access to the shadow "
+"password file is restricted."
+msgstr ""
+"Queste funzioni possono essere usate solo dall'amministratore, perché "
+"l'accesso al file delle password shadow è riservato."
+
+# type: Plain text
+#: shadow.3.xml:239(para)
+msgid ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: pwconv.8.xml:63(refentrytitle) pwconv.8.xml:70(refname)
+#: pwconv.8.xml:79(command) login.defs.5.xml:439(term)
+msgid "pwconv"
+msgstr "pwconv"
+
+#: pwconv.8.xml:71(refname) pwconv.8.xml:85(command) login.defs.5.xml:448(term)
+msgid "pwunconv"
+msgstr "pwunconv"
+
+#: pwconv.8.xml:72(refname) pwconv.8.xml:91(command) login.defs.5.xml:344(term)
+msgid "grpconv"
+msgstr "grpconv"
+
+#: pwconv.8.xml:73(refname) pwconv.8.xml:97(command) login.defs.5.xml:350(term)
+msgid "grpunconv"
+msgstr "grpunconv"
+
+# type: Plain text
+#: pwconv.8.xml:74(refpurpose)
+msgid "convert to and from shadow passwords and groups"
+msgstr "convertono a e da password e gruppi shadow."
+
+#: pwconv.8.xml:106(para)
+msgid ""
+"The <command>pwconv</command> command creates <emphasis remap=\"I\">shadow</"
+"emphasis> from <emphasis remap=\"I\">passwd</emphasis> and an optionally "
+"existing <emphasis remap=\"I\">shadow</emphasis>."
+msgstr ""
+"<command>pwconv</command> crea <emphasis remap=\"I\">shadow</emphasis> da "
+"<emphasis remap=\"I\">passwd</emphasis> e da un eventuale preesistente "
+"<emphasis remap=\"I\">shadow</emphasis>."
+
+#: pwconv.8.xml:111(para)
+msgid ""
+"<command>pwconv</command> does not work with <option>USE_TCB</option> "
+"enabled. To convert to tcb passwords, you should first use <command>pwconv</"
+"command> to convert to shadowed passwords by disabling <option>USE_TCB</"
+"option> in <filename>login.defs</filename> and then convert to tcb password "
+"using <command>tcb_convert</command> (and re-enable <option>USE_TCB</option> "
+"in <filename>login.defs</filename>.)"
+msgstr ""
+"<command>pwconv</command> non funziona se <option>USE_TCB</option> è attivo. "
+"Per convertire a password tcb si deve prima usare <command>pwconv</command> "
+"per convertire a password shadow disabilitando <option>USE_TCB</option> nel "
+"file <filename>login.defs</filename> e poi convertire a password tcb usando "
+"<command>tcb_convert</command> (e riabilitando <option>USE_TCB</option> in "
+"<filename>login.defs</filename>)."
+
+#: pwconv.8.xml:121(para)
+msgid ""
+"The <command>pwunconv</command> command creates <emphasis remap=\"I"
+"\">passwd</emphasis> from <emphasis remap=\"I\">passwd</emphasis> and "
+"<emphasis remap=\"I\">shadow</emphasis> and then removes <emphasis remap=\"I"
+"\">shadow</emphasis>."
+msgstr ""
+"<command>pwunconv</command> crea <emphasis remap=\"I\">passwd</emphasis> da "
+"<emphasis remap=\"I\">passwd</emphasis> e <emphasis remap=\"I\">shadow</"
+"emphasis> e poi cancella <emphasis remap=\"I\">shadow</emphasis>."
+
+#: pwconv.8.xml:127(para)
+msgid ""
+"<command>pwunconv</command> does not work with <option>USE_TCB</option> "
+"enabled. You should first switch back from tcb to shadowed passwords using "
+"<command>tcb_unconvert</command>, and then disable <option>USE_TCB</option> "
+"in <filename>login.defs</filename> before using <command>pwunconv</command>."
+msgstr ""
+"<command>pwunconv</command> non funziona con <option>USE_TCB</option> "
+"abilitato. Si deve prima ritornare da tcb a password shadow usando "
+"<command>tcb_unconvert</command> e poi disabilitare <option>USE_TCB</option> "
+"in <filename>login.defs</filename> prima di usare <command>pwunconv</"
+"command>."
+
+#: pwconv.8.xml:136(para)
+msgid ""
+"The <command>grpconv</command> command creates <emphasis remap=\"I"
+"\">gshadow</emphasis> from <emphasis remap=\"I\">group</emphasis> and an "
+"optionally existing <emphasis remap=\"I\">gshadow</emphasis>."
+msgstr ""
+"<command>grpconv</command> crea <emphasis remap=\"I\">gshadow</emphasis> da "
+"<emphasis remap=\"I\">group</emphasis> e da un eventuale preesistente "
+"<emphasis remap=\"I\">gshadow</emphasis>."
+
+#: pwconv.8.xml:142(para)
+msgid ""
+"The <command>grpunconv</command> command creates <emphasis remap=\"I"
+"\">group</emphasis> from <emphasis remap=\"I\">group</emphasis> and "
+"<emphasis remap=\"I\">gshadow</emphasis> and then removes <emphasis remap=\"I"
+"\">gshadow</emphasis>."
+msgstr ""
+"<command>grpunconv</command> crea <emphasis remap=\"I\">group</emphasis> da "
+"<emphasis remap=\"I\">group</emphasis> e <emphasis remap=\"I\">gshadow</"
+"emphasis> e quindi rimuove <emphasis remap=\"I\">gshadow</emphasis>."
+
+# type: Plain text
+#: pwconv.8.xml:149(para)
+msgid ""
+"These four programs all operate on the normal and shadow password and group "
+"files: <filename>/etc/passwd</filename>, <filename>/etc/group</filename>, "
+"<filename>/etc/shadow</filename>, and <filename>/etc/gshadow</filename>."
+msgstr ""
+"Questi quattro programmi agiscono tutti sui file normali e oscurati (shadow) "
+"delle password e dei gruppi: <filename>/etc/passwd</filename>, <filename>/"
+"etc/group</filename>, <filename>/etc/shadow</filename> e <filename>/etc/"
+"gshadow</filename>."
+
+# type: Plain text
+#: pwconv.8.xml:156(para)
+msgid ""
+"Each program acquires the necessary locks before conversion. "
+"<command>pwconv</command> and <command>grpconv</command> are similar. First, "
+"entries in the shadowed file which don't exist in the main file are removed. "
+"Then, shadowed entries which don't have `x' as the password in the main file "
+"are updated. Any missing shadowed entries are added. Finally, passwords in "
+"the main file are replaced with `x'. These programs can be used for initial "
+"conversion as well to update the shadowed file if the main file is edited by "
+"hand."
+msgstr ""
+"Ciascun programma, prima della conversione, acquisisce i lock necessari. "
+"<command>pwconv</command> e <command>grpconv</command> sono simili. Per "
+"prima cosa vengono rimosse le voci nel file shadow che non esistono nel file "
+"principale. Quindi vengono aggiornate le voci oscurate che non hanno «x» "
+"come password nel file principale. Vengono aggiunte le eventuali voci "
+"oscurate mancanti. Infine, le password nel file principale vengono "
+"sostituite con «x». Questi programmi possono essere usati per le conversioni "
+"iniziali così come per aggiornare il file oscurato se il file principale "
+"viene modificato a mano."
+
+# type: Plain text
+#: pwconv.8.xml:167(para)
+msgid ""
+"<command>pwconv</command> will use the values of <emphasis remap=\"I"
+"\">PASS_MIN_DAYS</emphasis>, <emphasis remap=\"I\">PASS_MAX_DAYS</emphasis>, "
+"and <emphasis remap=\"I\">PASS_WARN_AGE</emphasis> from <filename>/etc/login."
+"defs</filename> when adding new entries to <filename>/etc/shadow</filename>."
+msgstr ""
+"<command>pwconv</command> userà i valori <emphasis remap=\"I"
+"\">PASS_MIN_DAYS</emphasis>, <emphasis remap=\"I\">PASS_MAX_DAYS</emphasis> "
+"e <emphasis remap=\"I\">PASS_WARN_AGE</emphasis> da <filename>/etc/login."
+"defs</filename> al momento dell'aggiunta di nuove voci a <filename>/etc/"
+"shadow</filename>."
+
+# type: Plain text
+#: pwconv.8.xml:176(para)
+msgid ""
+"Likewise <command>pwunconv</command> and <command>grpunconv</command> are "
+"similar. Passwords in the main file are updated from the shadowed file. "
+"Entries which exist in the main file but not in the shadowed file are left "
+"alone. Finally, the shadowed file is removed. Some password aging "
+"information is lost by <command>pwunconv</command>. It will convert what it "
+"can."
+msgstr ""
+"Analogamente, <command>pwunconv</command> e <command>grpunconv</command> "
+"sono simili. Le password nel file principale vengono aggiornate dal file "
+"shadow. Voci che esistono nel file principale ma non nel file shadow vengono "
+"lasciate stare. Infine, viene rimosso il file shadow. Alcune informazioni "
+"sull'invecchiamento delle password vengono perse da <command>pwunconv</"
+"command>. Convertirà solo quello che potrà."
+
+# type: Plain text
+#: pwconv.8.xml:188(para)
+msgid ""
+"The options which apply to the <command>pwconv</command>, <command>pwunconv</"
+"command>, <command>grpconv</command>, and <command>grpunconv</command> "
+"commands are:"
+msgstr ""
+"Le opzioni che si possono applicare ai comandi <command>pwconv</command>, "
+"<command>pwunconv</command>, <command>grpconv</command> e "
+"<command>grpunconv</command> sono:"
+
+#: pwconv.8.xml:217(para)
+msgid ""
+"Errors in the password or group files (such as invalid or duplicate entries) "
+"may cause these programs to loop forever or fail in other strange ways. "
+"Please run <command>pwck</command> and <command>grpck</command> to correct "
+"any such errors before converting to or from shadow passwords or groups."
+msgstr ""
+"Errori nel file delle password o dei gruppi (come elementi non validi o "
+"duplicati) possono causare dei cicli infiniti in questi programmi, oppure "
+"degli errori non prevedibili. Eseguire <command>pwck</command> e "
+"<command>grpck</command> per correggere ogni eventuale errore prima di "
+"convertire da o verso password o gruppi shadow."
+
+#: pwconv.8.xml:228(para)
+msgid ""
+"The following configuration variable in <filename>/etc/login.defs</filename> "
+"changes the behavior of <command>grpconv</command> and <command>grpunconv</"
+"command>:"
+msgstr ""
+"Le seguenti variabili di configurazione in <filename>/etc/login.defs</"
+"filename> influenzano il comportamento di <command>grpconv</command> e "
+"<command>grpunconv</command>:"
+
+#: pwconv.8.xml:236(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of <command>pwconv</command>:"
+msgstr ""
+"Le seguenti variabili di configurazione in <filename>/etc/login.defs</"
+"filename> influenzano il comportamento di <command>pwconv</command>:"
+
+# type: Plain text
+#: pwconv.8.xml:263(para)
+msgid ""
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry><phrase condition=\"tcb\">, "
+"<citerefentry><refentrytitle>tcb_convert</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>tcb_unconvert</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry><phrase condition=\"tcb\">, "
+"<citerefentry><refentrytitle>tcb_convert</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>tcb_unconvert</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry></phrase>."
+
+#: pwck.8.xml:47(contrib) lastlog.8.xml:43(contrib) grpck.8.xml:42(contrib)
+msgid "Creation, 1992"
+msgstr ""
+
+#: pwck.8.xml:63(refentrytitle) pwck.8.xml:70(refname) pwck.8.xml:76(command)
+#: login.defs.5.xml:430(term)
+msgid "pwck"
+msgstr "pwck"
+
+# type: Plain text
+#: pwck.8.xml:71(refpurpose)
+msgid "verify integrity of password files"
+msgstr "verifica l'integrità dei file delle password"
+
+#: pwck.8.xml:80(replaceable) passwd.5.xml:57(refentrytitle)
+#: passwd.5.xml:64(refname) passwd.1.xml:64(refentrytitle)
+#: passwd.1.xml:71(refname) passwd.1.xml:77(command) login.defs.5.xml:419(term)
+msgid "passwd"
+msgstr "passwd"
+
+# type: Plain text
+#: pwck.8.xml:93(para)
+msgid ""
+"The <command>pwck</command> command verifies the integrity of the users and "
+"authentication information. It checks that all entries in <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename><phrase condition=\"tcb"
+"\">(or the files in <filename>/etc/tcb</filename>, when <option>USE_TCB</"
+"option> is enabled)</phrase> have the proper format and contain valid data. "
+"The user is prompted to delete entries that are improperly formatted or "
+"which have other uncorrectable errors."
+msgstr ""
+"<command>pwck</command> verifica l'integrità delle informazioni su utenti e "
+"autenticazione del sistema. Ogni voce in <filename>/etc/passwd</filename> e "
+"in <filename>/etc/shadow</filename> <phrase condition=\"tcb\">(o nei file in "
+"<filename>/etc/tcb</filename>, quando <option>USE_TCB<option> è abilitato)</"
+"phrase> viene controllata per verificare che abbia il formato corretto e "
+"dati validi in ciascun campo. Viene richiesto all'utente di rimuovere le "
+"voci che non hanno un formato appropriato o che hanno altri errori "
+"impossibili da correggere."
+
+# type: Plain text
+#: pwck.8.xml:105(para) grpck.8.xml:94(para)
+msgid "Checks are made to verify that each entry has:"
+msgstr "Vengono fatti controlli per verificare che ogni voce abbia:"
+
+# type: Plain text
+#: pwck.8.xml:108(para) grpck.8.xml:98(para)
+msgid "the correct number of fields"
+msgstr "il corretto numero di campi"
+
+# type: Plain text
+#: pwck.8.xml:111(para)
+msgid "a unique and valid user name"
+msgstr "un nome utente univoco e valido"
+
+# type: Plain text
+#: pwck.8.xml:114(para)
+msgid "a valid user and group identifier"
+msgstr "identificatori validi dell'utente e del gruppo"
+
+# type: Plain text
+#: pwck.8.xml:117(para)
+msgid "a valid primary group"
+msgstr "un gruppo primario valido"
+
+# type: Plain text
+#: pwck.8.xml:120(para)
+msgid "a valid home directory"
+msgstr "una home directory valida"
+
+# type: Plain text
+#: pwck.8.xml:123(para)
+msgid "a valid login shell"
+msgstr "una shell di login valida"
+
+#: pwck.8.xml:127(para)
+msgid ""
+"<filename>shadow</filename> checks are enabled when a second file parameter "
+"is specified or when <filename>/etc/shadow</filename> exists on the system."
+msgstr ""
+"Le verifiche sul file <filename>shadow</filename> sono abilitate ogni volta "
+"che si usa un secondo argomento o quanto esiste nel sistema il file "
+"<filename>/etc/shadow</filename>."
+
+#: pwck.8.xml:132(para)
+msgid "These checks are the following:"
+msgstr "Le verifiche sono le seguenti:"
+
+#: pwck.8.xml:137(para)
+msgid ""
+"every passwd entry has a matching shadow entry, and every shadow entry has a "
+"matching passwd entry"
+msgstr ""
+"ogni elemento del file passwd deve avere un corrispondente elemento in "
+"shadow, e viceversa"
+
+#: pwck.8.xml:143(para)
+msgid "passwords are specified in the shadowed file"
+msgstr "le password sono specificate nel file shadow"
+
+# type: Plain text
+#: pwck.8.xml:146(para)
+msgid "shadow entries have the correct number of fields"
+msgstr "gli elementi di shadow hanno il corretto numero di campi"
+
+#: pwck.8.xml:149(para)
+msgid "shadow entries are unique in shadow"
+msgstr "gli elementi di shadow sono unici"
+
+# type: Plain text
+#: pwck.8.xml:152(para)
+msgid "the last password changes are not in the future"
+msgstr "le date di ultima modifica non sono nel futuro"
+
+# type: Plain text
+#: pwck.8.xml:156(para)
+msgid ""
+"The checks for correct number of fields and unique user name are fatal. If "
+"the entry has the wrong number of fields, the user will be prompted to "
+"delete the entire line. If the user does not answer affirmatively, all "
+"further checks are bypassed. An entry with a duplicated user name is "
+"prompted for deletion, but the remaining checks will still be made. All "
+"other errors are warning and the user is encouraged to run the "
+"<command>usermod</command> command to correct the error."
+msgstr ""
+"Gli errori nelle verifiche sul corretto numero di campi e sull'univocità del "
+"nome utente sono irrimediabili. Se una voce ha un numero errato di campi, "
+"all'utente viene chiesto di cancellare l'intera riga; se l'utente non "
+"risponde affermativamente, vengono omessi tutti gli ulteriori controlli. "
+"Viene richiesta la cancellazione anche per le voci aventi il nome utente "
+"duplicato, ma i rimanenti controlli vengono ugualmente effettuati. Tutti gli "
+"altri errori non sono gravi e l'utente è invitato a eseguire il comando "
+"<command>usermod</command> per correggerli."
+
+# type: Plain text
+#: pwck.8.xml:167(para)
+msgid ""
+"The commands which operate on the <filename>/etc/passwd</filename> file are "
+"not able to alter corrupted or duplicated entries. <command>pwck</command> "
+"should be used in those circumstances to remove the offending entry."
+msgstr ""
+"I comandi che operano sul file <filename>/etc/passwd</filename> non sono in "
+"grado di modificare voci corrotte o duplicate; in tali circostanze va usato "
+"<command>pwck</command> per rimuovere la voce scorretta."
+
+# type: Plain text
+#: pwck.8.xml:177(para) grpck.8.xml:148(para)
+msgid ""
+"The <option>-r</option> and <option>-s</option> options cannot be combined."
+msgstr ""
+"Le opzioni <option>-r</option> e <option>-s</option> non possono essere "
+"combinate."
+
+# type: Plain text
+#: pwck.8.xml:181(para)
+msgid "The options which apply to the <command>pwck</command> command are:"
+msgstr "Il comando <command>pwck</command> accetta le seguenti opzioni:"
+
+#: pwck.8.xml:204(para)
+msgid ""
+"Report errors only. The warnings which do not require any action from the "
+"user won't be displayed."
+msgstr ""
+"Riporta solo gli errori. Gli avvisi che non richiedono azioni da parte "
+"dell'utente non sono mostrati."
+
+# type: IP
+#: pwck.8.xml:211(term) grpck.8.xml:163(term)
+msgid "<option>-r</option>, <option>--read-only</option>"
+msgstr "<option>-r</option>, <option>--read-only</option>"
+
+# type: TP
+#: pwck.8.xml:213(para)
+msgid "Execute the <command>pwck</command> command in read-only mode."
+msgstr "Esegue il comando <command>pwck</command> in sola lettura."
+
+# type: IP
+#: pwck.8.xml:231(term) grpck.8.xml:185(term)
+msgid "<option>-s</option>, <option>--sort</option>"
+msgstr "<option>-s</option>, <option>--sort</option>"
+
+#: pwck.8.xml:233(para)
+msgid ""
+"Sort entries in <filename>/etc/passwd</filename> and <filename>/etc/shadow</"
+"filename> by UID."
+msgstr ""
+"Ordina gli elementi di <filename>/etc/passwd</filename> e <filename>/etc/"
+"shadow</filename> per UID."
+
+# type: IP
+#: pwck.8.xml:237(para)
+msgid "This option has no effect when <option>USE_TCB</option> is enabled."
+msgstr ""
+"Questa opzione non ha nessun effetto se <option>USE_TCB</option> è abilitato."
+
+#: pwck.8.xml:244(para)
+msgid ""
+"By default, <command>pwck</command> operates on the files <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename><phrase condition=\"tcb"
+"\"> (or the files in <filename>/etc/tcb</filename>)</phrase>. The user may "
+"select alternate files with the <replaceable>passwd</replaceable> and "
+"<replaceable>shadow</replaceable> parameters."
+msgstr ""
+"Come impostazione predefinita, <command>pwck</command> opera sui file "
+"<filename>/etc/passwd</filename> e in <filename>/etc/shadow</"
+"filename><phrase condition=\"tcb\"> (o i file in <filename>/etc/tcb</"
+"filename>)</phrase>. L'utente può selezionare file alternativi con i "
+"parametri <replaceable>passwd</replaceable> e <replaceable>shadow</"
+"replaceable>."
+
+#: pwck.8.xml:253(para)
+#, fuzzy
+#| msgid ""
+#| "Note that when <option>USE_TCB</option> is enabled, you cannot specify an "
+#| "alternative <replaceable>shadow</replaceable> file. In future releases, "
+#| "this paramater could be replaced by an alternate TCB directory."
+msgid ""
+"Note that when <option>USE_TCB</option> is enabled, you cannot specify an "
+"alternative <replaceable>shadow</replaceable> file. In future releases, this "
+"parameter could be replaced by an alternate TCB directory."
+msgstr ""
+"Notare che quando <option>USE_TCB</option> è abilitata, non si può "
+"specificare un file <replaceable>shadow</replaceable> alternativo. In future "
+"versioni questo parametro potrebbe essere sostituito da una directory TCB "
+"alternativa."
+
+# type: Plain text
+#: pwck.8.xml:322(para)
+msgid "one or more bad password entries"
+msgstr "una o più voci di password conengono errori"
+
+# type: Plain text
+#: pwck.8.xml:328(para)
+msgid "can't open password files"
+msgstr "impossibile aprire i file delle password"
+
+# type: Plain text
+#: pwck.8.xml:334(para)
+msgid "can't lock password files"
+msgstr "impossibile fare il lock dei file delle password"
+
+# type: Plain text
+#: pwck.8.xml:340(para)
+msgid "can't update password files"
+msgstr "impossibile aggiornare i file delle password"
+
+# type: Plain text
+#: pwck.8.xml:346(para)
+msgid "can't sort password files"
+msgstr "impossibile ordinare i file delle password"
+
+# type: TP
+#: pwck.8.xml:304(para)
+msgid ""
+"The <command>pwck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Il comando <command>pwck</command> restituisce i seguenti valori: "
+"<placeholder-1/>"
+
+# type: Plain text
+#: pwck.8.xml:355(para)
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: porttime.5.xml:57(refentrytitle) porttime.5.xml:64(refname)
+msgid "porttime"
+msgstr "porttime"
+
+# type: Plain text
+#: porttime.5.xml:65(refpurpose)
+msgid "port access time file"
+msgstr "file delle porte e degli orari d'accesso"
+
+# type: Plain text
+#: porttime.5.xml:70(para)
+msgid ""
+"<emphasis remap=\"I\">porttime</emphasis> contains a list of tty devices, "
+"user names, and permitted login times."
+msgstr ""
+"<emphasis remap=\"I\">porttime</emphasis> contiene un elenco di device tty, "
+"nomi utente e orari di accesso permessi."
+
+# type: Plain text
+#: porttime.5.xml:75(para)
+msgid ""
+"Each entry consists of three colon separated fields. The first field is a "
+"comma separated list of tty devices, or an asterisk to indicate that all tty "
+"devices are matched by this entry. The second field is a comma separated "
+"list of user names, or an asterisk to indicated that all user names are "
+"matched by this entry. The third field is a comma separated list of "
+"permitted access times."
+msgstr ""
+"Ciascuna voce è composta da tre campi separati da due punti. Il primo è un "
+"elenco di device tty, separati da virgole, oppure un asterisco per indicare "
+"che la voce corrisponde a qualsiasi device. Il secondo campo è un elenco di "
+"nomi utente, separati da virgole, oppure un asterisco per indicare che la "
+"voce corrisponde ad ogni utente. Il terzo campo è un elenco degli orari, "
+"separati da virgole, in cui è consentito l'accesso."
+
+# type: Plain text
+#: porttime.5.xml:84(para)
+msgid ""
+"Each access time entry consists of zero or more days of the week, "
+"abbreviated <emphasis>Su</emphasis>, <emphasis>Mo</emphasis>, <emphasis>Tu</"
+"emphasis>, <emphasis>We</emphasis>, <emphasis>Th</emphasis>, <emphasis>Fr</"
+"emphasis>, and <emphasis>Sa</emphasis>, followed by a pair of times "
+"separated by a hyphen. The abbreviation <emphasis>Wk</emphasis> may be used "
+"to represent Monday thru Friday, and <emphasis>Al</emphasis> may be used to "
+"indicate every day. If no days are given, <emphasis>Al</emphasis> is assumed."
+msgstr ""
+"Un orario di accesso consiste in zero o più giorni della settimana "
+"abbreviati in <emphasis>Mo</emphasis> (lunedì), <emphasis>Tu</emphasis>, "
+"<emphasis>We</emphasis>, <emphasis>Th</emphasis>, <emphasis>Fr</emphasis>, "
+"<emphasis>Sa</emphasis> e <emphasis>Su</emphasis> (domenica), seguiti da una "
+"coppia di orari, separati da un trattino. L'abbreviazione <emphasis>Wk</"
+"emphasis> rappresenta tutti i giorni da lunedì a venerdì, mentre "
+"<emphasis>Al</emphasis> indica tutti i giorni della settimana. Se non si "
+"specifica alcun giorno, viene usato implicitamente <emphasis>Al</emphasis>."
+
+# type: SH
+#: porttime.5.xml:98(title)
+msgid "EXAMPLES"
+msgstr "ESEMPI"
+
+# type: Plain text
+#: porttime.5.xml:99(para)
+msgid ""
+"The following entry allows access to user <emphasis remap=\"B\">jfh</"
+"emphasis> on every port during weekdays from 9am to 5pm."
+msgstr ""
+"La voce seguente permette l'accesso all'utente <emphasis remap=\"B\">jfh</"
+"emphasis> da qualsiasi porta durante i giorni lavorativi dalle 9 alle 17."
+
+# type: Plain text
+#: porttime.5.xml:105(para)
+msgid "*:jfh:Wk0900-1700"
+msgstr "*:jfh:Wk0900-1700"
+
+# type: Plain text
+#: porttime.5.xml:107(para)
+msgid ""
+"The following entries allow access only to the users <emphasis>root</"
+"emphasis> and <emphasis>oper</emphasis> on <filename>/dev/console</filename> "
+"at any time. This illustrates how the <filename>/etc/porttime</filename> "
+"file is an ordered list of access times. Any other user would match the "
+"second entry which does not permit access at any time."
+msgstr ""
+"Le voci seguenti permettono l'accesso solo agli utenti <emphasis>root</"
+"emphasis> e <emphasis>oper</emphasis> da <filename>/dev/console</filename> a "
+"qualsiasi ora. Qui viene mostrato come il file <filename>/etc/porttime</"
+"filename> sia una lista ordinata di orari d'accesso: ogni altro utente "
+"corrisponderebbe alla seconda voce, che impedisce l'accesso in qualsiasi "
+"orario."
+
+# type: Plain text
+# no-wrap
+#: porttime.5.xml:116(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+" console:root,oper:Al0000-2400\n"
+" console:*:\n"
+" "
+msgstr ""
+"\n"
+" console:root,oper:Al0000-2400\n"
+" console:*:\n"
+" "
+
+# type: Plain text
+#: porttime.5.xml:121(para)
+msgid ""
+"The following entry allows access for the user <emphasis>games</emphasis> on "
+"any port during non-working hours."
+msgstr ""
+"La voce seguente permette l'accesso all'utente <emphasis>games</emphasis> da "
+"qualsiasi porta durante gli orari non lavorativi."
+
+# type: Plain text
+#: porttime.5.xml:126(para)
+msgid "*:games:Wk1700-0900,SaSu0000-2400"
+msgstr "*:games:Wk1700-0900,SaSu0000-2400"
+
+#: porttime.5.xml:133(filename) logoutd.8.xml:92(filename)
+msgid "/etc/porttime"
+msgstr "/etc/porttime"
+
+#: porttime.5.xml:135(para) logoutd.8.xml:94(para)
+msgid "File containing port access."
+msgstr "File contenente gli accessi alle porte."
+
+# type: Plain text
+#: porttime.5.xml:143(para) login.access.5.xml:134(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+# type: Plain text
+#: passwd.5.xml:65(refpurpose)
+msgid "the password file"
+msgstr "il file delle password"
+
+#: passwd.5.xml:70(para)
+msgid ""
+"<filename>/etc/passwd</filename> contains one line for each user account, "
+"with seven fields delimited by colons (<quote>:</quote>). These fields are:"
+msgstr ""
+"<filename>/etc/passwd</filename> contiene una riga per ogni account, con "
+"sette campi delimitati da due punti (<quote>:</quote>). Questi campi sono:"
+
+# type: Plain text
+#: passwd.5.xml:81(para)
+msgid "optional encrypted password"
+msgstr "password cifrata opzionale"
+
+#: passwd.5.xml:84(para)
+msgid "numerical user ID"
+msgstr "ID utente numerico"
+
+#: passwd.5.xml:87(para)
+msgid "numerical group ID"
+msgstr "ID gruppo numerico"
+
+# type: Plain text
+#: passwd.5.xml:90(para)
+msgid "user name or comment field"
+msgstr "nome utente o commento"
+
+# type: Plain text
+#: passwd.5.xml:93(para)
+msgid "user home directory"
+msgstr "directory home utente"
+
+#: passwd.5.xml:96(para)
+msgid "optional user command interpreter"
+msgstr "interprete dei comandi utente opzionale"
+
+#: passwd.5.xml:100(para)
+msgid ""
+"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."
+msgstr ""
+
+#: passwd.5.xml:109(para)
+#, fuzzy
+#| msgid ""
+#| "This field may be empty, in which case no passwords are required to "
+#| "authenticate as the specified login name. However, some applications "
+#| "which read the <filename>/etc/shadow</filename> file may decide not to "
+#| "permit any access at all if the password field is empty."
+msgid ""
+"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."
+msgstr ""
+"Questo campo può essere vuoto, nel qual caso nessuna password è richiesta "
+"per l'autenticazione di questo specifico nome di login. Tuttavia alcune "
+"applicazioni che leggono <filename>/etc/shadow</filename> possono decidere "
+"di non permettere nessun accesso se il campo password è vuoto."
+
+#: passwd.5.xml:118(para)
+#, fuzzy
+#| msgid ""
+#| "A password field which starts with a exclamation mark means that the "
+#| "password is locked. The remaining characters on the line represent the "
+#| "password field before the password was locked."
+msgid ""
+"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."
+msgstr ""
+"Se il campo password inizia con un punto esclamativo vuol dire che la "
+"password è bloccata. I restanti caratteri del campo sono il contenuto del "
+"campo password prima che venisse bloccata."
+
+# type: Plain text
+#: passwd.5.xml:138(para)
+msgid ""
+"The comment field is used by various system utilities, such as "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"Il campo di commento è utilizzato da vari strumenti di sistema come ad "
+"esempio <citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>."
+
+#: passwd.5.xml:144(para)
+msgid ""
+"The home directory field provides the name of the initial working directory. "
+"The <command>login</command> program uses this information to set the value "
+"of the <envar>$HOME</envar> environmental variable."
+msgstr ""
+"Il campo directory home fornisce il nome della directory di lavoro iniziale. "
+"Il programma <command>login</command> usa questa informazione per impostare "
+"il valore della variabile d'ambiente <envar>$HOME</envar>."
+
+#: passwd.5.xml:150(para)
+msgid ""
+"The command interpreter field provides the name of the user's command "
+"language interpreter, or the name of the initial program to execute. The "
+"<command>login</command> program uses this information to set the value of "
+"the <envar>$SHELL</envar> environmental variable. If this field is empty, it "
+"defaults to the value <filename>/bin/sh</filename>."
+msgstr ""
+"Il campo interprete dei comandi fornisce il nome dell'interprete del "
+"linguaggio utente, o il nome del programma da invocare inizialmente. Il "
+"programma <command>login</command> utilizza questa informazione per "
+"impostare il valore della variabile d'ambiente <envar>$SHELL</envar>. Se "
+"questo campo è vuoto, il valore predefinito è <filename>/bin/sh</filename>."
+
+# type: Plain text
+#: passwd.5.xml:171(para)
+msgid "optional encrypted password file"
+msgstr "file opzionale delle password cifrate"
+
+#: passwd.5.xml:175(filename)
+msgid "/etc/passwd-"
+msgstr "/etc/passwd-"
+
+#: passwd.5.xml:177(para)
+msgid "Backup file for /etc/passwd."
+msgstr "Copia di backup di /etc/passwd."
+
+# type: Plain text
+#: passwd.5.xml:189(para)
+msgid ""
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getent</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getpwnam</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwunconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getent</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getpwnam</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwunconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+# type: Plain text
+#: passwd.1.xml:72(refpurpose)
+msgid "change user password"
+msgstr "cambia la password utente"
+
+# type: Plain text
+#: 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 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 ""
+"<command>passwd</command> cambia la password per account utente. Un utente "
+"normale può solo cambiare la password per il proprio account, mentre il "
+"super utente può cambiarla per qualsiasi account. <command>passwd</command> "
+"modifica anche l'account o il periodo di validità della password associata."
+
+# type: SS
+#: passwd.1.xml:98(title)
+msgid "Password Changes"
+msgstr "Modifiche delle password"
+
+# type: Plain text
+#: passwd.1.xml:99(para)
+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 ""
+"All'utente viene prima chiesta la propria password attuale, se presente. "
+"Questa password viene cifrata e confrontata con quella memorizzata. "
+"All'utente viene data solo una possibilità di inserire la password corretta. "
+"Il super utente salta questo passo in modo da poter modificare password "
+"dimenticate."
+
+# type: Plain text
+#: passwd.1.xml:107(para)
+msgid ""
+"After the password has been entered, password aging information is checked "
+"to see if the user is permitted to change the password at this time. If not, "
+"<command>passwd</command> refuses to change the password and exits."
+msgstr ""
+"Dopo che la password è stata inserita, vengono controllati i parametri "
+"dell'invecchiamento delle password per verificare che l'utente possa "
+"modificarla in questo momento. In caso negativo <command>passwd</command> "
+"non fa cambiare la password ed esce."
+
+# type: Plain text
+#: passwd.1.xml:114(para)
+msgid ""
+"The user is then prompted twice for a replacement password. The second entry "
+"is compared against the first and both are required to match in order for "
+"the password to be changed."
+msgstr ""
+"All'utente viene quindi chiesto di inserire la nuova password due volte. Le "
+"due password sono confrontate e devono essere uguali affinché la password "
+"venga accettata."
+
+# type: Plain text
+#: passwd.1.xml:120(para)
+msgid ""
+"Then, the password is tested for complexity. As a general guideline, "
+"passwords should consist of 6 to 8 characters including one or more "
+"characters from each of the following sets:"
+msgstr ""
+"Quindi viene misurata la complessità della password. In linea di massima le "
+"password dovrebbero contenere dai 6 agli 8 caratteri, includendovi uno o più "
+"caratteri da ciascuno dei seguenti insiemi:"
+
+# type: Plain text
+#: passwd.1.xml:128(para)
+msgid "lower case alphabetics"
+msgstr "lettere minuscole"
+
+# type: Plain text
+#: passwd.1.xml:131(para)
+msgid "digits 0 thru 9"
+msgstr "numeri da 0 a 9"
+
+# type: Plain text
+#: passwd.1.xml:134(para)
+msgid "punctuation marks"
+msgstr "segni di punteggiatura"
+
+# type: Plain text
+#: passwd.1.xml:138(para)
+msgid ""
+"Care must be taken not to include the system default erase or kill "
+"characters. <command>passwd</command> will reject any password which is not "
+"suitably complex."
+msgstr ""
+"Si deve fare attenzione a non inserire il carattere di cancellazione o di "
+"kill (azzeramento della riga). <command>passwd</command> non accetta "
+"password non sufficientemente complesse."
+
+# type: SS
+#: passwd.1.xml:147(title)
+msgid "Hints for user passwords"
+msgstr "Suggerimenti per password utente"
+
+# type: Plain text
+#: passwd.1.xml:148(para)
+msgid ""
+"The security of a password depends upon the strength of the encryption "
+"algorithm and the size of the key space. The legacy <emphasis>UNIX</"
+"emphasis> System encryption method is based on the NBS DES algorithm. More "
+"recent methods are now recommended (see <option>ENCRYPT_METHOD</option>). "
+"The size of the key space depends upon the randomness of the password which "
+"is selected."
+msgstr ""
+"La sicurezza di una password dipende dalla forza dell'algoritmo e dalla "
+"dimensione della chiave utilizzata. Il metodo originale di cifratura del "
+"sistema <emphasis>UNIX</emphasis> si basa sull'algoritmo NBS DES. Adesso "
+"sono da preferisi metodi di cifratura più recenti (vedere "
+"<option>ENCRYPT_METHOD</option>). La dimensione della chiave dipende "
+"dall'aleatorietà della password indicata."
+
+# type: Plain text
+#: passwd.1.xml:157(para)
+msgid ""
+"Compromises in password security normally result from careless password "
+"selection or handling. For this reason, you should not select a password "
+"which appears in a dictionary or which must be written down. The password "
+"should also not be a proper name, your license number, birth date, or street "
+"address. Any of these may be used as guesses to violate system security."
+msgstr ""
+"La compromissione di una password avviene normalmente a seguito di incuria "
+"nella scelta o nella gestione della password. Per questo motivo non si "
+"devono utilizzare password che appaiono nei dizionari o che devono essere "
+"scritte. La password non deve essere uno nome proprio, il numero della "
+"patente, la data di nascita o l'indirizzo. Uno qualunque di questi potrebbe "
+"essere indovinato per violare la sicurezza del sistema."
+
+#: passwd.1.xml:166(para)
+#, fuzzy
+#| msgid ""
+#| "You can find advices on how to choose a strong password on http://en."
+#| "wikipedia.org/wiki/Password_strength"
+msgid ""
+"You can find advice on how to choose a strong password on http://en."
+"wikipedia.org/wiki/Password_strength"
+msgstr ""
+"Si possono trovare indicazioni su come scegliere una password forte su "
+"http://en.wikipedia.org/wiki/Password_strength"
+
+# type: Plain text
+#: passwd.1.xml:175(para)
+msgid "The options which apply to the <command>passwd</command> command are:"
+msgstr "Il comando <command>passwd</command> accetta le seguenti opzioni:"
+
+# type: IP
+#: passwd.1.xml:180(term) faillog.8.xml:96(term)
+msgid "<option>-a</option>, <option>--all</option>"
+msgstr "<option>-a</option>, <option>--all</option>"
+
+#: passwd.1.xml:184(para)
+msgid ""
+"This option can be used only with <option>-S</option> and causes show status "
+"for all users."
+msgstr ""
+"Questa opzione può essere utilizzata solo con <option>-S</option> e mostra "
+"lo stato per ogni utente."
+
+# type: IP
+#: passwd.1.xml:191(term)
+msgid "<option>-d</option>, <option>--delete</option>"
+msgstr "<option>-d</option>, <option>--delete</option>"
+
+#: passwd.1.xml:195(para)
+msgid ""
+"Delete a user's password (make it empty). This is a quick way to disable a "
+"password for an account. It will set the named account passwordless."
+msgstr ""
+"Cancella la password utente (la rende vuota). Questo è un metodo veloce per "
+"disabilitare la password per l'account. Imposta l'account indicato come "
+"senza password."
+
+# type: TP
+#: passwd.1.xml:203(term)
+msgid "<option>-e</option>, <option>--expire</option>"
+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 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."
+
+# type: TP
+#: passwd.1.xml:220(term)
+msgid ""
+"<option>-i</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-i</option>, <option>--inactive</option>&nbsp;<replaceable>INATTIVO</"
+"replaceable>"
+
+#: passwd.1.xml:224(para)
+msgid ""
+"This option is used to disable an account after the password has been "
+"expired for a number of days. After a user account has had an expired "
+"password for <replaceable>INACTIVE</replaceable> days, the user may no "
+"longer sign on to the account."
+msgstr ""
+"Questa opzione viene utilizzata per disabilitare un account dopo che la "
+"password è scaduta da un certo numero di giorni. Dopo che un account ha una "
+"password che è scaduta da <replaceable>INATTIVO</replaceable> giorni, "
+"l'utente non può più accedere con l'account."
+
+# type: IP
+#: passwd.1.xml:233(term)
+msgid "<option>-k</option>, <option>--keep-tokens</option>"
+msgstr "<option>-k</option>, <option>--keep-tokens</option>"
+
+#: passwd.1.xml:237(para)
+msgid ""
+"Indicate password change should be performed only for expired authentication "
+"tokens (passwords). The user wishes to keep their non-expired tokens as "
+"before."
+msgstr ""
+"Indica che il cambio password va effettuato solo per i token (password) di "
+"autenticazione scaduti. L'utente vuole mantenere inalterati i token non "
+"scaduti."
+
+# type: IP
+#: passwd.1.xml:245(term)
+msgid "<option>-l</option>, <option>--lock</option>"
+msgstr "<option>-l</option>, <option>--lock</option>"
+
+#: passwd.1.xml:249(para)
+msgid ""
+"Lock the password of the named account. This option disables a password by "
+"changing it to a value which matches no possible encrypted value (it adds a "
+"´!´ at the beginning of the password)."
+msgstr ""
+"Blocca la password dell'account indicato. Questa opzione disabilita una "
+"password modificandola in modo che non corrisponda a nessun valore cifrato "
+"(aggiunge un «!» all'inizio della password)."
+
+#: passwd.1.xml:255(para)
+msgid ""
+"Note that this does not disable the account. The user may still be able to "
+"login using another authentication token (e.g. an SSH key). To disable the "
+"account, administrators should use <command>usermod --expiredate 1</command> "
+"(this set the account's expire date to Jan 2, 1970)."
+msgstr ""
+"Notare che questo non disabilita l'account. L'utente può sempre accedere al "
+"sistema tramite altri token di autenticazione (ad esempio una chiave SSH). "
+"Per disabilitare l'account l'amministratore deve usare <command>usermod --"
+"expiredate 1</command> (che imposta la data di scadenza al 2 gennaio 1970)."
+
+#: passwd.1.xml:262(para)
+msgid "Users with a locked password are not allowed to change their password."
+msgstr "Gli utenti con password bloccata non la possono cambiare."
+
+# type: IP
+#: passwd.1.xml:269(term)
+msgid ""
+"<option>-n</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-n</option>, <option>--mindays</option>&nbsp;"
+"<replaceable>MIN_GIORNI</replaceable>"
+
+# type: Plain text
+#: passwd.1.xml:273(para) chage.1.xml:174(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 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 "
+"l'utente può cambiare la propria password in qualsiasi momento."
+
+# type: IP
+#: passwd.1.xml:291(term)
+msgid ""
+"<option>-r</option>, <option>--repository</option>&nbsp;"
+"<replaceable>REPOSITORY</replaceable>"
+msgstr ""
+"<option>-r</option>, <option>--repository</option>&nbsp;"
+"<replaceable>REPOSITORY</replaceable>"
+
+#: passwd.1.xml:295(para)
+msgid "change password in <replaceable>REPOSITORY</replaceable> repository"
+msgstr ""
+"cambia la password nel repository <replaceable>REPOSITORY</replaceable>"
+
+# type: IP
+#: passwd.1.xml:313(term)
+msgid "<option>-S</option>, <option>--status</option>"
+msgstr "<option>-S</option>, <option>--status</option>"
+
+# type: Plain text
+#: passwd.1.xml:317(para)
+msgid ""
+"Display account status information. The status information consists of 7 "
+"fields. The first field is the user's login name. The second field indicates "
+"if the user account has a locked password (L), has no password (NP), or has "
+"a usable password (P). The third field gives the date of the last password "
+"change. The next four fields are the minimum age, maximum age, warning "
+"period, and inactivity period for the password. These ages are expressed in "
+"days."
+msgstr ""
+"Visualizza le informazioni sullo stato di un account. Lo stato consiste di 7 "
+"campi. Il primo campo è il nome dell'utente. Il secondo campo indica se "
+"l'account ha una password bloccata (L), non ha password (NP) o ha una "
+"password valida (P). Il terzo campo contiene la data di ultima modifica "
+"della password. I successivi quattro campi sono l'età minima, la massima, il "
+"periodo di avviso e quello di inattività. Queste età sono espresse in giorni."
+
+# type: IP
+#: passwd.1.xml:331(term)
+msgid "<option>-u</option>, <option>--unlock</option>"
+msgstr "<option>-u</option>, <option>--unlock</option>"
+
+#: passwd.1.xml:335(para)
+msgid ""
+"Unlock the password of the named account. This option re-enables a password "
+"by changing the password back to its previous value (to the value before "
+"using the <option>-l</option> option)."
+msgstr ""
+"Sblocca la password dell'account indicato. Questa opzione riabilita la "
+"password riportandola al suo valore precedente (il valore che c'era prima di "
+"usare l'opzione <option>-l</option>)."
+
+# type: IP
+#: passwd.1.xml:344(term)
+msgid ""
+"<option>-w</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>WARN_DAYS</replaceable>"
+msgstr ""
+"<option>-w</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>AVVISO_GIORNI</replaceable>"
+
+# type: Plain text
+#: 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 their password is "
+"about to expire."
+msgstr ""
+"Imposta il numero di giorni di preavviso prima che sia obbligatorio cambiare "
+"la password. L'opzione <replaceable>AVVISO_GIORNI</replaceable> indica il "
+"numero di giorni precedenti alla scadenza della password durante i quali "
+"l'utente viene avvertito dell'imminente scadenza."
+
+# type: IP
+#: passwd.1.xml:357(term)
+msgid ""
+"<option>-x</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-x</option>, <option>--maxdays</option>&nbsp;"
+"<replaceable>MAX_GIORNI</replaceable>"
+
+#: passwd.1.xml:361(para)
+msgid ""
+"Set the maximum number of days a password remains valid. After "
+"<replaceable>MAX_DAYS</replaceable>, the password is required to be changed."
+msgstr ""
+"Imposta il massimo numero di giorni che una password rimane valida. Dopo "
+"<replaceable>MAX_GIORNI</replaceable> viene richiesto di cambiare la "
+"password."
+
+#: passwd.1.xml:366(para) chage.1.xml:195(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as "
+"<replaceable>MAX_DAYS</replaceable> will remove checking a password's "
+"validity."
+msgstr ""
+"Usare il valore <emphasis remap=\"I\">-1</emphasis> come "
+"<replaceable>MAX_GIORNI</replaceable> rimuove il controllo sulla validità "
+"della password."
+
+# type: Plain text
+#: passwd.1.xml:378(para)
+msgid ""
+"Password complexity checking may vary from site to site. The user is urged "
+"to select a password as complex as he or she feels comfortable with."
+msgstr ""
+"Il controllo della complessità delle password varia da sistema a sistema. "
+"All'utente è caldamente consigliato si utilizzare una password che ritenga "
+"sufficientemente complessa."
+
+#: passwd.1.xml:383(para)
+msgid ""
+"Users may not be able to change their password on a system if NIS is enabled "
+"and they are not logged into the NIS server."
+msgstr ""
+"Gli utenti possono non essere in grado di cambiare la propria password se "
+"NIS è abilitato ed essi non sono collegati al server NIS."
+
+#: passwd.1.xml:388(para)
+msgid ""
+"<command>passwd</command> uses PAM to authenticate users and to change their "
+"passwords."
+msgstr ""
+"<command>passwd</command> utilizza PAM per autenticare gli utenti e per "
+"cambiare le loro password."
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>ENCRYPT_METHOD</option> (string)"
+msgstr "<option>ENCRYPT_METHOD</option> (testo)"
+
+#: passwd.1.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: gpasswd.1.xml:32(para) chpasswd.8.xml:32(para) chgpasswd.8.xml:32(para)
+msgid ""
+"This defines the system default encryption algorithm for encrypting "
+"passwords (if no algorithm are specified on the command line)."
+msgstr ""
+"Definisce l'algoritmo di cifratura predefinito per le password (se non ne "
+"viene specificato uno a riga di comando)."
+
+# type: IP
+#: passwd.1.xml:36(para) newusers.8.xml:36(para) login.defs.5.xml:36(para)
+#: gpasswd.1.xml:36(para) chpasswd.8.xml:36(para) chgpasswd.8.xml:36(para)
+msgid ""
+"It can take one of these values: <replaceable>DES</replaceable> (default), "
+"<replaceable>MD5</replaceable><phrase condition=\"sha_crypt\">, "
+"<replaceable>SHA256</replaceable>, <replaceable>SHA512</replaceable></"
+"phrase>."
+msgstr ""
+"Può avere uno dei seguenti valori: <replaceable>DES</replaceable> "
+"(predefinito), <replaceable>MD5</replaceable><phrase condition=\"sha_crypt"
+"\">, <replaceable>SHA256</replaceable>, <replaceable>SHA512</replaceable></"
+"phrase>."
+
+#: passwd.1.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: gpasswd.1.xml:43(para) chpasswd.8.xml:43(para) chgpasswd.8.xml:43(para)
+msgid ""
+"Note: this parameter overrides the <option>MD5_CRYPT_ENAB</option> variable."
+msgstr ""
+"Nota: questo parametro ha la precedenza sulla variabile "
+"<option>MD5_CRYPT_ENAB</option>."
+
+#: passwd.1.xml:47(para) passwd.1.xml:53(para) passwd.1.xml:62(para)
+#: newusers.8.xml:47(para) newusers.8.xml:53(para) newusers.8.xml:62(para)
+#: login.defs.5.xml:47(para) login.defs.5.xml:53(para)
+#: login.defs.5.xml:62(para) gpasswd.1.xml:47(para) gpasswd.1.xml:53(para)
+#: gpasswd.1.xml:62(para) chpasswd.8.xml:47(para) chpasswd.8.xml:53(para)
+#: chpasswd.8.xml:62(para) chgpasswd.8.xml:47(para) chgpasswd.8.xml:53(para)
+#: chgpasswd.8.xml:62(para)
+msgid ""
+"Note: This only affect the generation of group passwords. The generation of "
+"user passwords is done by PAM and subject to the PAM configuration. It is "
+"recommended to set this variable consistently with the PAM configuration."
+msgstr ""
+"Nota: questo ha effetto solo sulla generazione delle password di gruppo. La "
+"generazione delle password utente avviene tramite PAM ed è soggetta alla "
+"configurazione PAM. È raccomandato di impostare questa variabile in maniera "
+"consistente con la configurazione PAM."
+
+#: passwd.1.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: gpasswd.1.xml:32(term) chpasswd.8.xml:32(term) chgpasswd.8.xml:32(term)
+msgid "<option>MD5_CRYPT_ENAB</option> (boolean)"
+msgstr "<option>MD5_CRYPT_ENAB</option> (booleano)"
+
+#: passwd.1.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: gpasswd.1.xml:34(para) chpasswd.8.xml:34(para) chgpasswd.8.xml:34(para)
+msgid ""
+"Indicate if passwords must be encrypted using the MD5-based algorithm. If "
+"set to <replaceable>yes</replaceable>, new passwords will be encrypted using "
+"the MD5-based algorithm compatible with the one used by recent releases of "
+"FreeBSD. It supports passwords of unlimited length and longer salt strings. "
+"Set to <replaceable>no</replaceable> if you need to copy encrypted passwords "
+"to other systems which don't understand the new algorithm. Default is "
+"<replaceable>no</replaceable>."
+msgstr ""
+"Indica se le password vanno cifrate usando l'algoritmo basato su MD5. Se "
+"impostato a <replaceable>yes</replaceable> le nuove password saranno cifrate "
+"usando un algoritmo basato su MD5 e compatibile con quello delle versioni "
+"più recenti di FreeBSD. Supporta password di lunghezza qualsiasi e testi "
+"«salt» più lunghi. Impostare a <replaceable>no</replaceable> se si devono "
+"copiare password su altri sistemi che non gestiscono l'algoritmo. Il valore "
+"predefinito è <replaceable>no</replaceable>."
+
+#: passwd.1.xml:44(para) newusers.8.xml:44(para) login.defs.5.xml:44(para)
+#: gpasswd.1.xml:44(para) chpasswd.8.xml:44(para) chgpasswd.8.xml:44(para)
+msgid ""
+"This variable is superseded by the <option>ENCRYPT_METHOD</option> variable "
+"or by any command line option used to configure the encryption algorithm."
+msgstr ""
+"Questa variabile ha meno priorità della variabile <option>ENCRYPT_METHOD</"
+"option> e di qualsiasi opzione a riga di comando che imposta un algoritmo di "
+"cifratura."
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid ""
+"This variable is deprecated. You should use <option>ENCRYPT_METHOD</option>."
+msgstr ""
+"Questa variabile non è più usata. Si dovrebbe utilizzare "
+"<option>ENCRYPT_METHOD</option>."
+
+# type: IP
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>OBSCURE_CHECKS_ENAB</option> (boolean)"
+msgstr "<option>OBSCURE_CHECKS_ENAB</option> (booleano)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable additional checks upon password changes."
+msgstr "Abilita controlli addizionali durante il cambio password."
+
+# type: IP
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_ALWAYS_WARN</option> (boolean)"
+msgstr "<option>PASS_ALWAYS_WARN</option> (booleano)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Warn about weak passwords (but still allow them) if you are root."
+msgstr ""
+"Avvisa riguardo password deboli (anche se le permette egualmente) se si è "
+"root."
+
+# type: IP
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_CHANGE_TRIES</option> (number)"
+msgstr "<option>PASS_CHANGE_TRIES</option> (numerico)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Maximum number of attempts to change password if rejected (too easy)."
+msgstr "Massimo numero di tentativi per cambiare una password (troppo facile)."
+
+# type: IP
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_MAX_LEN</option> (number)"
+msgstr "<option>PASS_MAX_LEN</option> (numerico)"
+
+# type: IP
+#: passwd.1.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>PASS_MIN_LEN</option> (number)"
+msgstr "<option>PASS_MIN_LEN</option> (numerico)"
+
+#: passwd.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"Number of significant characters in the password for crypt(). "
+"<option>PASS_MAX_LEN</option> is 8 by default. Don't change unless your "
+"crypt() is better. This is ignored if <option>MD5_CRYPT_ENAB</option> set to "
+"<replaceable>yes</replaceable>."
+msgstr ""
+"Numero di caratteri significativi della password per crypt(). "
+"<option>PASS_MAX_LEN</option> è normalmente 8. Da non cambiare a meno che la "
+"propria crypt() sia migliore. Questo viene ignorato se "
+"<option>MD5_CRYPT_ENAB</option> è impostata a <replaceable>yes</replaceable>."
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>SHA_CRYPT_MIN_ROUNDS</option> (number)"
+msgstr "<option>SHA_CRYPT_MIN_ROUNDS</option> (numerico)"
+
+#: passwd.1.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: gpasswd.1.xml:31(term) chpasswd.8.xml:31(term) chgpasswd.8.xml:31(term)
+msgid "<option>SHA_CRYPT_MAX_ROUNDS</option> (number)"
+msgstr "<option>SHA_CRYPT_MAX_ROUNDS</option> (numerico)"
+
+#: passwd.1.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: gpasswd.1.xml:33(para) chpasswd.8.xml:33(para) chgpasswd.8.xml:33(para)
+msgid ""
+"When <option>ENCRYPT_METHOD</option> is set to <replaceable>SHA256</"
+"replaceable> or <replaceable>SHA512</replaceable>, this defines the number "
+"of SHA rounds used by the encryption algorithm by default (when the number "
+"of rounds is not specified on the command line)."
+msgstr ""
+"Quando <option>ENCRYPT_METHOD</option> vale <replaceable>SHA256</"
+"replaceable> o <replaceable>SHA512</replaceable>, questo definisce il numero "
+"di cicli SHA usati per l'algoritmo di cifratura (quando il numero di cicli "
+"non è impostato a riga di comando)."
+
+#: passwd.1.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: gpasswd.1.xml:40(para) chpasswd.8.xml:40(para) chgpasswd.8.xml:40(para)
+msgid ""
+"With a lot of rounds, it is more difficult to brute forcing the password. "
+"But note also that more CPU resources will be needed to authenticate users."
+msgstr ""
+"Con molti cicli è più difficile trovare una password usando la forza bruta. "
+"Ma va notato che è richiesta maggiore potenza di calcolo per autenticare gli "
+"utenti."
+
+#: passwd.1.xml:45(para) newusers.8.xml:45(para) login.defs.5.xml:45(para)
+#: gpasswd.1.xml:45(para) chpasswd.8.xml:45(para) chgpasswd.8.xml:45(para)
+msgid ""
+"If not specified, the libc will choose the default number of rounds (5000)."
+msgstr "Se non specificato sarà la libc a scegliere il numero di cicli (5000)."
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid "The values must be inside the 1000-999,999,999 range."
+msgstr "Il valore deve essere compreso tra 1.000 e 999.999.999."
+
+#: passwd.1.xml:52(para) newusers.8.xml:52(para) login.defs.5.xml:52(para)
+#: gpasswd.1.xml:52(para) chpasswd.8.xml:52(para) chgpasswd.8.xml:52(para)
+msgid ""
+"If only one of the <option>SHA_CRYPT_MIN_ROUNDS</option> or "
+"<option>SHA_CRYPT_MAX_ROUNDS</option> values is set, then this value will be "
+"used."
+msgstr ""
+"Se viene impostato solo uno tra <option>SHA_CRYPT_MIN_ROUNDS</option> e "
+"<option>SHA_CRYPT_MAX_ROUNDS</option>, allora l'unico valore viene "
+"utilizzato."
+
+#: passwd.1.xml:57(para) newusers.8.xml:57(para) login.defs.5.xml:57(para)
+#: gpasswd.1.xml:57(para) chpasswd.8.xml:57(para) chgpasswd.8.xml:57(para)
+msgid ""
+"If <option>SHA_CRYPT_MIN_ROUNDS</option> &gt; <option>SHA_CRYPT_MAX_ROUNDS</"
+"option>, the highest value will be used."
+msgstr ""
+"Se <option>SHA_CRYPT_MIN_ROUNDS</option> &gt; <option>SHA_CRYPT_MAX_ROUNDS</"
+"option>, allora viene utilizzato il maggiore."
+
+#: passwd.1.xml:434(filename)
+msgid "/etc/pam.d/passwd"
+msgstr "/etc/pam.d/passwd"
+
+# type: Plain text
+#: passwd.1.xml:436(para)
+msgid "PAM configuration for <command>passwd</command>."
+msgstr "configurazione PAM per <command>passwd</command>."
+
+#: passwd.1.xml:456(para) chage.1.xml:297(para)
+msgid "permission denied"
+msgstr "permesso negato"
+
+#: passwd.1.xml:462(para)
+msgid "invalid combination of options"
+msgstr "combinazione di opzioni non valida"
+
+#: passwd.1.xml:468(para)
+msgid "unexpected failure, nothing done"
+msgstr "errore non previsto, nulla di fatto"
+
+#: passwd.1.xml:474(para)
+msgid "unexpected failure, <filename>passwd</filename> file missing"
+msgstr "errore non previsto, file <filename>passwd</filename> mancante"
+
+# type: TP
+#: passwd.1.xml:480(para)
+msgid "<filename>passwd</filename> file busy, try again"
+msgstr "file <filename>passwd</filename> occupato, provare di nuovo"
+
+# type: TP
+#: passwd.1.xml:444(para)
+msgid ""
+"The <command>passwd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr "Il comando <command>passwd</command> restituisce i seguenti valori:"
+
+# type: Plain text
+#: passwd.1.xml:495(para)
+msgid ""
+"<citerefentry><refentrytitle>chpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <phrase condition=\"no_pam"
+"\"><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <phrase condition=\"no_pam"
+"\"><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: nologin.8.xml:46(refentrytitle) nologin.8.xml:53(refname)
+#: nologin.8.xml:59(command)
+msgid "nologin"
+msgstr "nologin"
+
+#: nologin.8.xml:54(refpurpose)
+msgid "politely refuse a login"
+msgstr "rifiuta gentilmente l'accesso"
+
+#: nologin.8.xml:65(para)
+msgid ""
+"The <command>nologin</command> command displays a message that an account is "
+"not available and exits non-zero. It is intended as a replacement shell "
+"field for accounts that have been disabled."
+msgstr ""
+"Il comando <command>nologin</command> mostra un messaggio che indica che "
+"l'account non è disponibile ed esce con codice d'errore non zero. È stato "
+"pensato come sostituto del campo shell per account che sono stati "
+"disabilitati."
+
+# type: Plain text
+#: nologin.8.xml:70(para)
+msgid ""
+"To disable all logins, investigate <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"Per diabilitare tutti gli accessi vedere "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+
+#: nologin.8.xml:75(para)
+msgid ""
+"If <command>SSH_ORIGINAL_COMMAND</command> is populated it will be logged."
+msgstr ""
+
+# type: Plain text
+#: nologin.8.xml:82(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: nologin.8.xml:93(title)
+msgid "HISTORY"
+msgstr "CRONOLOGIA"
+
+# type: TP
+#: nologin.8.xml:94(para)
+#, fuzzy
+#| msgid "The <command>nologin</command> command appearred in BSD 4.4."
+msgid "The <command>nologin</command> command appeared in BSD 4.4."
+msgstr "Il comando <command>nologin</command> è apparso in BSD 4.4."
+
+#: newusers.8.xml:73(refentrytitle) newusers.8.xml:80(refname)
+#: newusers.8.xml:86(command) login.defs.5.xml:400(term)
+msgid "newusers"
+msgstr "newusers"
+
+#: newusers.8.xml:81(refpurpose)
+msgid "update and create new users in batch"
+msgstr "aggiorna e crea nuovi utenti in blocco"
+
+#: newusers.8.xml:91(replaceable)
+msgid "file"
+msgstr "file"
+
+#: newusers.8.xml:98(para)
+msgid ""
+"The <command>newusers</command> command reads a <replaceable>file</"
+"replaceable> (or the standard input by default) and uses this information to "
+"update a set of existing users or to create new users. Each line is in the "
+"same format as the standard password file (see "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>) with the exceptions explained below:"
+msgstr ""
+"Il comando <command>newusers</command> legge un <replaceable>file</"
+"replaceable> (o il proprio standard input) e utilizza queste informazioni "
+"per aggiornare l'insieme di utenti già esistenti oppure per crearne di "
+"nuovi. Ogni riga è nello stesso formato del file standard passwd (vedere "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>) con le seguenti eccezioni:"
+
+#: newusers.8.xml:106(para)
+msgid "pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell"
+msgstr "pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell"
+
+#: newusers.8.xml:111(emphasis)
+msgid "pw_name"
+msgstr "pw_name"
+
+#: newusers.8.xml:114(para)
+msgid "This is the name of the user."
+msgstr "Il nome dell'utente."
+
+#: newusers.8.xml:117(para)
+#, fuzzy
+#| msgid ""
+#| "It can be the name of a new user or the name of an existing user (or an "
+#| "user created before by <command>newusers</command>). In case of an "
+#| "existing user, the user's information will be changed, otherwise a new "
+#| "user will be created."
+msgid ""
+"It can be the name of a new user or the name of an existing user (or a user "
+"created before by <command>newusers</command>). In case of an existing user, "
+"the user's information will be changed, otherwise a new user will be created."
+msgstr ""
+"Può essere il nome di un nuovo utente o di uno già esistente (o uno creato "
+"precedentemente da <command>newusers</command>). Nel caso di utente già "
+"esistente le informazioni sull'utente verranno aggiornate, altrimenti verrà "
+"creato un nuovo utente."
+
+#: newusers.8.xml:128(emphasis)
+msgid "pw_passwd"
+msgstr "pw_passwd"
+
+#: newusers.8.xml:131(para)
+msgid ""
+"This field will be encrypted and used as the new value of the encrypted "
+"password."
+msgstr ""
+"Questo campo verrà cifrato e utilizzato come nuovo valore per la password "
+"cifrata."
+
+#: newusers.8.xml:139(emphasis)
+msgid "pw_uid"
+msgstr "pw_uid"
+
+#: newusers.8.xml:142(para)
+msgid "This field is used to define the UID of the user."
+msgstr "Definisce l'UID dell'utente."
+
+#: newusers.8.xml:145(para)
+#, fuzzy
+#| msgid ""
+#| "If the field is empty, an new (unused) UID will be defined automatically "
+#| "by <command>newusers</command>."
+msgid ""
+"If the field is empty, a new (unused) UID will be defined automatically by "
+"<command>newusers</command>."
+msgstr ""
+"Se il campo è vuoto, verrà generato automaticamente un nuovo UID (non "
+"utilizzato) da parte di <command>newusers</command>."
+
+#: newusers.8.xml:149(para)
+msgid "If this field contains a number, this number will be used as the UID."
+msgstr "Se questo campo contiene un numero, verrà utilizzato come UID."
+
+#: newusers.8.xml:153(para)
+#, fuzzy
+#| msgid ""
+#| "If this field contains the name of an existing user (or the name of an "
+#| "user created before by <command>newusers</command>), the UID of the "
+#| "specified user will be used."
+msgid ""
+"If this field contains the name of an existing user (or the name of a user "
+"created before by <command>newusers</command>), the UID of the specified "
+"user will be used."
+msgstr ""
+"Se questo campo contiene il nome di un utente già esistente (o il nome di un "
+"utente creato precedentemente da <command>newusers</command>), verrà "
+"utilizzato l'UID dell'utente specificato."
+
+#: newusers.8.xml:159(para)
+msgid ""
+"If the UID of an existing user is changed, the files ownership of the user's "
+"file should be fixed manually."
+msgstr ""
+"Se viene cambiato l'UID di un utente esistente, la proprietà dei file di "
+"proprietà dell'utente stesso andrà cambiata manualmente."
+
+#: newusers.8.xml:167(emphasis)
+msgid "pw_gid"
+msgstr "pw_gid"
+
+#: newusers.8.xml:170(para)
+msgid "This field is used to define the primary group ID for the user."
+msgstr "Definisce il l'ID del gruppo primario dell'utente."
+
+#: newusers.8.xml:173(para)
+msgid ""
+"If this field contains the name of an existing group (or a group created "
+"before by <command>newusers</command>), the GID of this group will be used "
+"as the primary group ID for the user."
+msgstr ""
+"Se questo campo contiene il nome di un gruppo esistente (o un gruppo creato "
+"in precedenza da <command>newusers</command>), verrà utilizzato come ID del "
+"gruppo primario di questo utente il GID del gruppo stesso."
+
+#: newusers.8.xml:179(para)
+msgid ""
+"If this field is a number, this number will be used as the primary group ID "
+"of the user. If no groups exist with this GID, a new group will be created "
+"with this GID, and the name of the user."
+msgstr ""
+"Se questo campo è numerico, questo numero verrà utilizzato come ID del "
+"gruppo primario dell'utente. Se non esiste nessun gruppo con quel GID, ne "
+"viene creato uno con il nome dell'utente e il GID specificato."
+
+#: newusers.8.xml:185(para)
+msgid ""
+"If this field is empty, a new group will be created with the name of the "
+"user and a GID will be automatically defined by <command>newusers</command> "
+"to be used as the primary group ID for the user and as the GID for the new "
+"group."
+msgstr ""
+"Se questo campo è vuoto verrà creato un nuovo gruppo con lo stesso nome "
+"dell'utente e con un GID determinato automaticamente da <command>newusers</"
+"command> da utilizzare come ID del gruppo primario dell'utente e come GID "
+"del nuovo gruppo."
+
+#: newusers.8.xml:191(para)
+msgid ""
+"If this field contains the name of a group which does not exist (and was not "
+"created before by <command>newusers</command>), a new group will be created "
+"with the specified name and a GID will be automatically defined by "
+"<command>newusers</command> to be used as the primary group ID for the user "
+"and GID for the new group."
+msgstr ""
+"Se questo campo contiene il nome di un gruppo che non esiste (e non è stato "
+"creato precedentemente da <command>newusers</command>), verrà creato un "
+"nuovo gruppo con il nome specificato e un GID determinato automaticamente da "
+"<command>newusers</command> perché sia utilizzato come ID del gruppo "
+"primario dell'utente e come GID per il nuovo gruppo."
+
+#: newusers.8.xml:203(emphasis)
+msgid "pw_gecos"
+msgstr "pw_gecos"
+
+#: newusers.8.xml:206(para)
+msgid "This field is copied in the GECOS field of the user."
+msgstr "Questo campo viene copiato nel campo GECOS dell'utente."
+
+#: newusers.8.xml:213(emphasis)
+msgid "pw_dir"
+msgstr "pw_dir"
+
+#: newusers.8.xml:216(para)
+msgid "This field is used to define the home directory of the user."
+msgstr "Questo campo è utilizzato per impostare la directory home dell'utente."
+
+#: newusers.8.xml:219(para)
+msgid ""
+"If this field does not specify an existing directory, the specified "
+"directory is created, with ownership set to the user being created or "
+"updated and its primary group."
+msgstr ""
+"Se questo campo non contiene il nome di una directory esistente la directory "
+"viene creata, assegnandone la proprietà all'utente che si sta definendo o "
+"aggiornando e al suo gruppo primario."
+
+#: newusers.8.xml:224(para)
+msgid ""
+"If the home directory of an existing user is changed, <command>newusers</"
+"command> does not move or copy the content of the old directory to the new "
+"location. This should be done manually."
+msgstr ""
+"Se si modifica la directory home di un utente esistente, <command>newusers</"
+"command> non sposta o copia il contenuto della vecchia directory nella "
+"nuova. Questo va fatto manualmente."
+
+#: newusers.8.xml:234(emphasis)
+msgid "pw_shell"
+msgstr "pw_shell"
+
+#: newusers.8.xml:237(para)
+msgid ""
+"This field defines the shell of the user. No checks are performed on this "
+"field."
+msgstr ""
+"Questo campo definisce la shell dell'utente. Su questo campo non viene fatto "
+"nessun controllo."
+
+#: newusers.8.xml:245(para)
+msgid ""
+"<command>newusers</command> first tries to create or change all the "
+"specified users, and then write these changes to the user or group "
+"databases. If an error occurs (except in the final writes to the databases), "
+"no changes are committed to the databases."
+msgstr ""
+"<command>newusers</command> prova prima a creare o modificare tutti gli "
+"utenti specificati e poi scrive tutte le modifiche sui database utente e "
+"gruppi. Se c'è un errore (eccetto sulla scrittura finale dei database) "
+"nessuna modifica viene scritta sui database."
+
+#: newusers.8.xml:251(para)
+msgid ""
+"During this first pass, users are created with a locked password (and "
+"passwords are not changed for the users which are not created). A second "
+"pass is used to update the passwords using PAM. Failures to update a "
+"password are reported, but will not stop the other password updates."
+msgstr ""
+"Durante il primo passaggio gli utenti vengono creati con la password "
+"bloccata (e le password non sono modificate nel caso di utenti che non sono "
+"creati). Un secondo passaggio si occupa di aggiornare tutte le password "
+"usando PAM. I problemi durante l'aggiornamento delle password sono "
+"riportati, ma non interrompono la modifica delle altre password."
+
+# type: Plain text
+#: newusers.8.xml:259(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are updated at a single time."
+msgstr ""
+"Questo comando è appositamente pensato per grossi sistemi nei quali molti "
+"account sono aggiornati allo stesso tempo."
+
+# type: TP
+#: newusers.8.xml:267(para)
+msgid "The options which apply to the <command>newusers</command> command are:"
+msgstr "Il comando <command>newusers</command> accetta le seguenti opzioni:"
+
+# type: IP
+#: newusers.8.xml:284(term) chgpasswd.8.xml:112(term)
+msgid "<option>-c</option>, <option>--crypt-method</option>"
+msgstr "<option>-c</option>, <option>--crypt-method</option>"
+
+#: newusers.8.xml:286(para) chpasswd.8.xml:141(para) chgpasswd.8.xml:114(para)
+msgid "Use the specified method to encrypt the passwords."
+msgstr "Utilizza il metodo specificato per cifrare le password."
+
+#: newusers.8.xml:287(para) chpasswd.8.xml:145(para) chgpasswd.8.xml:118(para)
+msgid ""
+"The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc "
+"support these methods."
+msgstr ""
+"I metodi disponibili sono DES, MD5, NONE e SHA256 o SHA512 se la propria "
+"libc lo consente."
+
+#: newusers.8.xml:309(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are chosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+"Gli utenti di sistema sono creati senza informazioni riguardo la scadenza "
+"della password in <filename>/etc/shadow</filename> e il loro identificativo "
+"numerico è scelto nell'intervallo <option>SYS_UID_MIN</option>-"
+"<option>SYS_UID_MAX</option> definito nel file <filename>login.defs</"
+"filename>, anziché dell'intervallo <option>UID_MIN</option>-<option>UID_MAX</"
+"option> (e la loro controparte <option>GID</option> per la creazione dei "
+"gruppi)."
+
+# type: IP
+#: newusers.8.xml:335(term) chgpasswd.8.xml:158(term)
+msgid "<option>-s</option>, <option>--sha-rounds</option>"
+msgstr "<option>-s</option>, <option>--sha-rounds</option>"
+
+#: newusers.8.xml:337(para) chpasswd.8.xml:204(para) chgpasswd.8.xml:160(para)
+msgid "Use the specified number of rounds to encrypt the passwords."
+msgstr "Usa il numero specificato di cicli per cifrare la password."
+
+#: newusers.8.xml:340(para) chpasswd.8.xml:207(para) chgpasswd.8.xml:163(para)
+msgid ""
+"The value 0 means that the system will choose the default number of rounds "
+"for the crypt method (5000)."
+msgstr ""
+"Il valore 0 indica che il sistema utilizzerà il numero predefinito di cicli "
+"per il metodo crypt (5000)."
+
+#: newusers.8.xml:344(para) chpasswd.8.xml:211(para) chgpasswd.8.xml:167(para)
+msgid ""
+"A minimal value of 1000 and a maximal value of 999,999,999 will be enforced."
+msgstr "I valori minimo di 1.000 e massimo di 999.999.999 sono forzati."
+
+#: newusers.8.xml:348(para) chpasswd.8.xml:215(para) chgpasswd.8.xml:171(para)
+msgid "You can only use this option with the SHA256 or SHA512 crypt method."
+msgstr ""
+"Si può utilizzare questa opzione solo con i metodi di cifratura SHA256 o "
+"SHA512."
+
+#: newusers.8.xml:352(para) chgpasswd.8.xml:175(para)
+msgid ""
+"By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and "
+"SHA_CRYPT_MAX_ROUNDS variables in <filename>/etc/login.defs</filename>."
+msgstr ""
+"Il numero di cicli predefinito è impostato con le variabili "
+"SHA_CRYPT_MIN_ROUNDS e SHA_CRYPT_MAX_ROUNDS nel file <filename>/etc/login."
+"defs</filename>."
+
+#: newusers.8.xml:364(para)
+msgid ""
+"The input file must be protected since it contains unencrypted passwords."
+msgstr ""
+"Il file di input deve essere protetto poiché contiene password non cifrate."
+
+#: newusers.8.xml:368(para) chgpasswd.8.xml:191(para)
+msgid ""
+"You should make sure the passwords and the encryption method respect the "
+"system's password policy."
+msgstr ""
+"Ci si deve accertare che le password e il metodo di cifratura rispettino le "
+"norme delle password del sistema."
+
+#: newusers.8.xml:444(filename)
+msgid "/etc/pam.d/newusers"
+msgstr "/etc/pam.d/newusers"
+
+#: newusers.8.xml:446(para)
+msgid "PAM configuration for <command>newusers</command>."
+msgstr "Configurazione PAM per <command>newusers</command>."
+
+# type: Plain text
+#: newusers.8.xml:466(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>grpck</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, <phrase condition="
+"\"subids\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: newgrp.1.xml:58(refentrytitle) newgrp.1.xml:65(refname)
+#: newgrp.1.xml:71(command)
+msgid "newgrp"
+msgstr "newgrp"
+
+# type: Plain text
+#: newgrp.1.xml:66(refpurpose)
+msgid "log in to a new group"
+msgstr "effettua l'accesso a un nuovo gruppo"
+
+#: newgrp.1.xml:72(replaceable) grpck.8.xml:74(replaceable)
+#: groupadd.8.xml:78(replaceable) gpasswd.1.xml:88(replaceable)
+msgid "group"
+msgstr "gruppo"
+
+# type: Plain text
+#: newgrp.1.xml:78(para)
+msgid ""
+"The <command>newgrp</command> command is used to change the current group ID "
+"during a login session. If the optional <option>-</option> flag is given, "
+"the user's environment will be reinitialized as though the user had logged "
+"in, otherwise the current environment, including current working directory, "
+"remains unchanged."
+msgstr ""
+"<command>newgrp</command> permette di cambiare il proprio ID di gruppo "
+"durante una sessione di login. Se viene specificato <option>-</option>, "
+"l'ambiente dell'utente viene reinizializzato come se l'utente stesse "
+"effettuando il login, altrimenti l'ambiente non viene modificato e la "
+"directory corrente non viene cambiata."
+
+# type: Plain text
+#: newgrp.1.xml:86(para)
+msgid ""
+"<command>newgrp</command> changes the current real group ID to the named "
+"group, or to the default group listed in <filename>/etc/passwd</filename> if "
+"no group name is given. <command>newgrp</command> also tries to add the "
+"group to the user groupset. If not root, the user will be prompted for a "
+"password if she does not have a password (in <filename>/etc/shadow</"
+"filename> if this user has an entry in the shadowed password file, or in "
+"<filename>/etc/passwd</filename> otherwise) and the group does, or if the "
+"user is not listed as a member and the group has a password. The user will "
+"be denied access if the group password is empty and the user is not listed "
+"as a member."
+msgstr ""
+"<command>newgrp</command> cambia l'ID di gruppo attuale reale in base al "
+"gruppo passato come argomento oppure, se non si passa nessun argomento, al "
+"gruppo predefinito nel file <filename>/etc/passwd</filename>. "
+"<command>newgrp</command> cerca anche di inserire il gruppo tra quelli "
+"dell'utente. Se non si tratta di root, all'utente viene chiesta una password "
+"nel caso che il gruppo lo richieda e l'utente non ne abbia (né in <filename>/"
+"etc/shadow</filename> se l'utente è definito anche lì, né in <filename>/etc/"
+"passwd</filename> altrimenti), oppure se l'utente non è elencato tra i "
+"membri del gruppo e il gruppo ha una password. Viene negato l'accesso "
+"all'utente nel caso che la password del gruppo sia vuota e l'utente non ne "
+"faccia parte."
+
+#: newgrp.1.xml:100(para)
+msgid ""
+"If there is an entry for this group in <filename>/etc/gshadow</filename>, "
+"then the list of members and the password of this group will be taken from "
+"this file, otherwise, the entry in <filename>/etc/group</filename> is "
+"considered."
+msgstr ""
+"Se c'è una voce per questo gruppo nel file <filename>/etc/gshadow</"
+"filename>, allora l'elenco dei membri e la password di questo gruppo sono "
+"presi da questo file, altrimenti verrà presa la voce da <filename>/etc/"
+"group</filename>."
+
+# type: Plain text
+#: newgrp.1.xml:152(para)
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, <citerefentry condition="
+"\"gshadow\"><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, <citerefentry condition="
+"\"gshadow\"><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry></phrase>."
+
+#: logoutd.8.xml:57(refentrytitle) logoutd.8.xml:64(refname)
+#: logoutd.8.xml:70(command)
+msgid "logoutd"
+msgstr "logoutd"
+
+# type: Plain text
+#: logoutd.8.xml:65(refpurpose)
+msgid "enforce login time restrictions"
+msgstr "impone le limitazioni sugli orari d'accesso"
+
+# type: Plain text
+#: logoutd.8.xml:76(para)
+msgid ""
+"<command>logoutd</command> enforces the login time and port restrictions "
+"specified in <filename>/etc/porttime</filename>. <command>logoutd</command> "
+"should be started from <filename>/etc/rc</filename>. The <filename>/var/run/"
+"utmp</filename> file is scanned periodically and each user name is checked "
+"to see if the named user is permitted on the named port at the current time. "
+"Any login session which is violating the restrictions in <filename>/etc/"
+"porttime</filename> is terminated."
+msgstr ""
+"<command>logoutd</command> fa rispettare le limitazioni sugli orari e sulle "
+"porte di accesso specificate in <filename>/etc/porttime</filename>. "
+"<command>logoutd</command> andrebbe avviato da <filename>/etc/rc</filename>. "
+"Il file <filename>/var/run/utmp</filename> viene controllato periodicamente "
+"per verificare che a ciascun utente sia consentito l'accesso da quella "
+"determinata porta e all'orario attuale. Ogni sessione di login che stia "
+"violando le limitazioni in <filename>/etc/porttime</filename> viene "
+"terminata."
+
+#: logoutd.8.xml:98(filename) login.1.xml:341(filename)
+msgid "/var/run/utmp"
+msgstr "/var/run/utmp"
+
+# type: Plain text
+#: logoutd.8.xml:100(para) login.1.xml:343(para)
+msgid "List of current login sessions."
+msgstr "Elenco delle sessioni attive."
+
+#: login.defs.5.xml:124(refentrytitle) login.defs.5.xml:131(refname)
+msgid "login.defs"
+msgstr "login.defs"
+
+# type: Plain text
+#: login.defs.5.xml:132(refpurpose)
+msgid "shadow password suite configuration"
+msgstr "configurazione del pacchetto password shadow"
+
+#: login.defs.5.xml:137(para)
+msgid ""
+"The <filename>/etc/login.defs</filename> file defines the site-specific "
+"configuration for the shadow password suite. This file is required. Absence "
+"of this file will not prevent system operation, but will probably result in "
+"undesirable operation."
+msgstr ""
+"Il file <filename>/etc/login.defs</filename> contiene la configurazione "
+"specifica per questo sistema relativa al pacchetto password shadow. Questo "
+"file è obbligatorio. La sua assenza non bloccerà l'utilizzo del sistema, ma "
+"probabilmente sarà causa di risultati non desiderati."
+
+#: login.defs.5.xml:144(para)
+msgid ""
+"This file is a readable text file, each line of the file describing one "
+"configuration parameter. The lines consist of a configuration name and "
+"value, separated by whitespace. Blank lines and comment lines are ignored. "
+"Comments are introduced with a \"#\" pound sign and the pound sign must be "
+"the first non-white character of the line."
+msgstr ""
+"Questo file è un file di testo leggibile nel quale ogni riga descrive un "
+"parametro di configurazione. Le righe consistono di una coppia nome valore "
+"separati da spazi. Le righe vuote e di commento sono ignorate. I commenti "
+"iniziano con con il simbolo \"#\" che deve essere il primo carattere diverso "
+"da spazio della riga."
+
+#: login.defs.5.xml:152(para)
+msgid ""
+"Parameter values may be of four types: strings, booleans, numbers, and long "
+"numbers. A string is comprised of any printable characters. A boolean should "
+"be either the value <replaceable>yes</replaceable> or <replaceable>no</"
+"replaceable>. An undefined boolean parameter or one with a value other than "
+"these will be given a <replaceable>no</replaceable> value. Numbers (both "
+"regular and long) may be either decimal values, octal values (precede the "
+"value with <replaceable>0</replaceable>) or hexadecimal values (precede the "
+"value with <replaceable>0x</replaceable>). The maximum value of the regular "
+"and long numeric parameters is machine-dependent."
+msgstr ""
+"I valori dei parametri possono essere di quattro tipi: testo, booleano, "
+"numerico e numerico lungo. Un testo può contenere qualsiasi carattere "
+"stampabile. Un booleano dovrebbe essere uno tra <replaceable>yes</"
+"replaceable> e <replaceable>no</replaceable>. Un parametro dal valore "
+"booleano non definito oppure uno che ha un valore diverso da quelli permessi "
+"verrà equiparato al valore <replaceable>no</replaceable>. I numerici (sia "
+"normali che lunghi) possono essere decimali, ottali (preceduti da "
+"<replaceable>0</replaceable>) o esadecimali (preceduti da <replaceable>0x</"
+"replaceable>). Il valore massimo dei numerici normali e lunghi è dipendente "
+"dalla macchina."
+
+#: login.defs.5.xml:167(para)
+msgid "The following configuration items are provided:"
+msgstr "Sono forniti i seguenti parametri di configurazione:"
+
+# type: IP
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+msgid "<option>CHFN_AUTH</option> (boolean)"
+msgstr "<option>CHFN_AUTH</option> (booleano)"
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chfn</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+"Se <replaceable>yes</replaceable>, il programma <command>chfn</command> "
+"richiederà l'autenticazione prima di apportare qualsiasi modifica, a meno "
+"che non sia eseguito dal super utente."
+
+# type: IP
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+msgid "<option>CHFN_RESTRICT</option> (string)"
+msgstr "<option>CHFN_RESTRICT</option> (testo)"
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"This parameter specifies which values in the <emphasis remap=\"I\">gecos</"
+"emphasis> field of the <filename>/etc/passwd</filename> file may be changed "
+"by regular users using the <command>chfn</command> program. It can be any "
+"combination of letters <replaceable>f</replaceable>, <replaceable>r</"
+"replaceable>, <replaceable>w</replaceable>, <replaceable>h</replaceable>, "
+"for Full name, Room number, Work phone, and Home phone, respectively. For "
+"backward compatibility, <replaceable>yes</replaceable> is equivalent to "
+"<replaceable>rwh</replaceable> and <replaceable>no</replaceable> is "
+"equivalent to <replaceable>frwh</replaceable>. If not specified, only the "
+"superuser can make any changes. The most restrictive setting is better "
+"achieved by not installing <command>chfn</command> SUID."
+msgstr ""
+"Questo parametro specifica quali valori del campo <emphasis remap=\"I"
+"\">gecos</emphasis> del file <filename>/etc/passwd</filename> possono essere "
+"cambiati da utenti normali usando il programma <command>chfn</command>. Può "
+"essere una combinazione qualsiasi delle lettere <replaceable>f</"
+"replaceable>, <replaceable>r</replaceable>, <replaceable>w</replaceable>, "
+"<replaceable>h</replaceable> per «Nome completo (f)», «Numero stanza (r)», "
+"«Telefono di lavoro (w)» e «Telefono di casa (h)». Per compatibilità con "
+"precedenti versioni, <replaceable>yes</replaceable> è quivalente a "
+"<replaceable>rwh</replaceable> e <replaceable>no</replaceable> è equivalente "
+"a <replaceable>frwh</replaceable>. Se non specificato, solo il super utente "
+"può effettuare modifiche. Le impostazioni più stringenti si ottengono "
+"installando <command>chfn</command> non SUID."
+
+# type: IP
+#: login.defs.5.xml:32(term) chsh.1.xml:32(term)
+msgid "<option>CHSH_AUTH</option> (boolean)"
+msgstr "<option>CHSH_AUTH</option> (booleano)"
+
+#: login.defs.5.xml:34(para) chsh.1.xml:34(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chsh</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+"Se <replaceable>yes</replaceable>, il comando <command>chsh</command> "
+"richiederà l'autenticazione prima di apportare qualsiasi modifica, a meno "
+"che sia utilizzato dal super utente."
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ERASECHAR</option> (number)"
+msgstr "<option>ERASECHAR</option> (numerico)"
+
+# type: Plain text
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Terminal ERASE character (<replaceable>010</replaceable> = backspace, "
+"<replaceable>0177</replaceable> = DEL)."
+msgstr ""
+"Carattere ERASE del terminale (<replaceable>010</replaceable> = backspace, "
+"<replaceable>0177</replaceable> = Canc)."
+
+#: login.defs.5.xml:38(para) login.defs.5.xml:37(para) login.1.xml:38(para)
+#: login.1.xml:37(para)
+msgid ""
+"The value can be prefixed \"0\" for an octal value, or \"0x\" for an "
+"hexadecimal value."
+msgstr ""
+"Il valore deve avere il prefisso «0» se in ottale, o «0x» se esadecimale."
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FAIL_DELAY</option> (number)"
+msgstr "<option>FAIL_DELAY</option> (numerico)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Delay in seconds before being allowed another attempt after a login failure."
+msgstr ""
+"Numero di secondi prima che venga concesso un ulteriore tentativo dopo un "
+"accesso fallito."
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FAILLOG_ENAB</option> (boolean)"
+msgstr "<option>FAILLOG_ENAB</option> (booleano)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable logging and display of <filename>/var/log/faillog</filename> login "
+"failure info."
+msgstr ""
+"Abilita la memorizzazione e mostra le informazioni sugli accessi falliti "
+"contenute in <filename>/var/log/faillog</filename>."
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FAKE_SHELL</option> (string)"
+msgstr "<option>FAKE_SHELL</option> (testo)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, <command>login</command> will execute this shell instead of the "
+"users' shell specified in <filename>/etc/passwd</filename>."
+msgstr ""
+"Se impostato, <command>login</command> eseguirà questa shell al posto di "
+"quella utente specificata in <filename>/etc/passwd</filename>."
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FTMP_FILE</option> (string)"
+msgstr "<option>FTMP_FILE</option> (testo)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, login failures will be logged in this file in a utmp format."
+msgstr ""
+"Se impostato, gli accessi falliti verranno tracciati in questo file nel "
+"formato utmp."
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>HUSHLOGIN_FILE</option> (string)"
+msgstr "<option>HUSHLOGIN_FILE</option> (testo)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, this file can inhibit all the usual chatter during the login "
+"sequence. If a full pathname is specified, then hushed mode will be enabled "
+"if the user's name or shell are found in the file. If not a full pathname, "
+"then hushed mode will be enabled if the file exists in the user's home "
+"directory."
+msgstr ""
+"Se definito, questo file inibisce quanto stampato durante l'accesso. Se "
+"viene specificato un percorso completo, la modalità silenziosa (hushed) "
+"viene attivata se in quel file è presente il nome dell'utente o della shell "
+"dell'utente. Se il percorso non è completo, allora la modalità silenziosa "
+"viene attivata se quel file è presente nella directory home dell'utente."
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ISSUE_FILE</option> (string)"
+msgstr "<option>ISSUE_FILE</option> (testo)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "If defined, this file will be displayed before each login prompt."
+msgstr "Se definito, il file verrà mostrato prima del prompt di login."
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>KILLCHAR</option> (number)"
+msgstr "<option>KILLCHAR</option> (numerico)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Terminal KILL character (<replaceable>025</replaceable> = CTRL/U)."
+msgstr ""
+"Il carattere da usare sul terminale per cancellare l'intera riga "
+"(<replaceable>025</replaceable> = CTRL-U)"
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LASTLOG_ENAB</option> (boolean)"
+msgstr "<option>LASTLOG_ENAB</option> (booleano)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging and display of /var/log/lastlog login time info."
+msgstr ""
+"Abilita la memorizzazione e la stampa delle informazioni sulle date degli "
+"ultimi accessi in /var/log/lastlog."
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOG_OK_LOGINS</option> (boolean)"
+msgstr "<option>LOG_OK_LOGINS</option> (booleano)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging of successful logins."
+msgstr "Abilita la tracciatura degli accessi avvenuti con successo."
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOG_UNKFAIL_ENAB</option> (boolean)"
+msgstr "<option>LOG_UNKFAIL_ENAB</option> (booleano)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable display of unknown usernames when login failures are recorded."
+msgstr ""
+"Abilita l'inclusione dei nomi utente sconosciuti quando si registrano gli "
+"accessi falliti."
+
+#: login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"Note: logging unknown usernames may be a security issue if an user enter her "
+"password instead of her login name."
+msgstr ""
+"Nota: memorizzare i nomi sconosciuti potrebbe diventare un problema legato "
+"alla sicurezza se un utente inserisce la propria password al posto del nome "
+"utente."
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOGIN_RETRIES</option> (number)"
+msgstr "<option>LOGIN_RETRIES</option> (numerico)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Maximum number of login retries in case of bad password."
+msgstr "Massimo numero di tentativi di accesso per password errata."
+
+#: login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"This will most likely be overridden by PAM, since the default pam_unix "
+"module has its own built in of 3 retries. However, this is a safe fallback "
+"in case you are using an authentication module that does not enforce "
+"PAM_MAXTRIES."
+msgstr ""
+"Questa impostazione verrà probabilmente superata da quella di PAM poiché il "
+"modulo predefinito pam_unix ha una sua gestione con 3 tentativi. In ogni "
+"caso questa è una impostazione di sicurezza nel caso in cui si utilizzi un "
+"modulo PAM che ignora PAM_MAXTRIES."
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOGIN_TIMEOUT</option> (number)"
+msgstr "<option>LOGIN_TIMEOUT</option> (numerico)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Max time in seconds for login."
+msgstr "Numero massimo di secondi per l'accesso."
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>MOTD_FILE</option> (string)"
+msgstr "<option>MOTD_FILE</option> (testo)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, \":\" delimited list of \"message of the day\" files to be "
+"displayed upon login."
+msgstr ""
+"Se definito è una lista di nomi di file con «messaggi del giorno» separati "
+"da «:» che vengono mostrati subito dopo l'accesso."
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>NOLOGINS_FILE</option> (string)"
+msgstr "<option>NOLOGINS_FILE</option> (testo)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, name of file whose presence will inhibit non-root logins. The "
+"contents of this file should be a message indicating why logins are "
+"inhibited."
+msgstr ""
+"Se definito è il nome di un file che impedisce l'accesso degli utenti non "
+"root. Il suo contenuto dovrebbe essere un messaggio che indica il motivo per "
+"il quale l'accesso è impedito."
+
+#: login.defs.5.xml:212(para)
+msgid ""
+"<option>PASS_MAX_DAYS</option>, <option>PASS_MIN_DAYS</option> and "
+"<option>PASS_WARN_AGE</option> are only used at the time of account "
+"creation. Any changes to these settings won't affect existing accounts."
+msgstr ""
+"<option>PASS_MAX_DAYS</option>, <option>PASS_MIN_DAYS</option> e "
+"<option>PASS_WARN_AGE</option> sono utilizzate solo al momento della "
+"creazione dell'account. Qualsiasi cambiamento di queste impostazioni non "
+"modifica gli account preesistenti."
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>PORTTIME_CHECKS_ENAB</option> (boolean)"
+msgstr "<option>PORTTIME_CHECKS_ENAB</option> (booleano)"
+
+# type: Plain text
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable checking of time restrictions specified in <filename>/etc/porttime</"
+"filename>."
+msgstr ""
+"Abilita la verifica delle restrizioni temporali specificate in <filename>/"
+"etc/porttime</filename>."
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>TTYGROUP</option> (string)"
+msgstr "<option>TTYGROUP</option> (testo)"
+
+# type: IP
+#: login.defs.5.xml:33(term) login.1.xml:33(term)
+msgid "<option>TTYPERM</option> (string)"
+msgstr "<option>TTYPERM</option> (testo)"
+
+#: login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"The terminal permissions: the login tty will be owned by the "
+"<option>TTYGROUP</option> group, and the permissions will be set to "
+"<option>TTYPERM</option>."
+msgstr ""
+"I permessi del terminale: il tty usato per l'accesso sarà di proprietà del "
+"gruppo <option>TTYGROUP</option> e avrà permessi impostati a "
+"<option>TTYPERM</option>."
+
+#: login.defs.5.xml:40(para) login.1.xml:40(para)
+msgid ""
+"By default, the ownership of the terminal is set to the user's primary group "
+"and the permissions are set to <replaceable>0600</replaceable>."
+msgstr ""
+"In maniera predefinita la proprietà del terminale sarà impostata al gruppo "
+"primario dell'utente, mentre i permessi saranno <replaceable>0600</"
+"replaceable>."
+
+#: login.defs.5.xml:45(para) login.1.xml:45(para)
+msgid ""
+"<option>TTYGROUP</option> can be either the name of a group or a numeric "
+"group identifier."
+msgstr ""
+"<option>TTYGROUP</option> può essere il nome del gruppo o il suo "
+"identificativo numerico."
+
+#: login.defs.5.xml:49(para) login.1.xml:49(para)
+msgid ""
+"If you have a <command>write</command> program which is \"setgid\" to a "
+"special group which owns the terminals, define TTYGROUP to the group number "
+"and TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign "
+"TTYPERM to either 622 or 600."
+msgstr ""
+"Se si ha il comando <command>write</command> che è «setgid» e ha un gruppo "
+"speciale che possiede i terminali, definire TTYGROUP con lo stesso gruppo e "
+"TTYPERM a 0620. Altrimenti lasciare TTYGROUP commentato e assegnare TTYPERM "
+"a 622 o 600."
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>TTYTYPE_FILE</option> (string)"
+msgstr "<option>TTYTYPE_FILE</option> (testo)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, file which maps tty line to TERM environment parameter. Each "
+"line of the file is in a format something like \"vt100 tty01\"."
+msgstr ""
+"Se definito si tratta di un file che mappa le linee tty nella variabile "
+"d'ambiente TERM. Ogni riga del file è in un formato tipo «vt100 tty01»."
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ULIMIT</option> (number)"
+msgstr "<option>ULIMIT</option> (numerico)"
+
+# type: Plain text
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Default <command>ulimit</command> value."
+msgstr "Valore <command>ulimit</command> predefinito."
+
+#: login.defs.5.xml:245(title)
+msgid "CROSS REFERENCES"
+msgstr "RIFERIMENTI INCROCIATI"
+
+#: login.defs.5.xml:246(para)
+msgid ""
+"The following cross references show which programs in the shadow password "
+"suite use which parameters."
+msgstr ""
+"I seguenti riferimenti incrociati mostrano quali programmi del pacchetto "
+"shadow password utilizzano quali parametri."
+
+#: login.defs.5.xml:253(term) chage.1.xml:58(refentrytitle)
+#: chage.1.xml:65(refname) chage.1.xml:70(command)
+msgid "chage"
+msgstr "chage"
+
+#: login.defs.5.xml:255(para) login.defs.5.xml:451(phrase)
+#: login.defs.5.xml:523(phrase)
+msgid "USE_TCB"
+msgstr "USE_TCB"
+
+#: login.defs.5.xml:259(term) chfn.1.xml:60(refentrytitle)
+#: chfn.1.xml:67(refname) chfn.1.xml:73(command)
+msgid "chfn"
+msgstr "chfn"
+
+#: login.defs.5.xml:261(para)
+msgid ""
+"<phrase condition=\"no_pam\">CHFN_AUTH</phrase> CHFN_RESTRICT <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase>"
+msgstr ""
+"<phrase condition=\"no_pam\">CHFN_AUTH</phrase> CHFN_RESTRICT <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase>"
+
+#: login.defs.5.xml:269(term) chgpasswd.8.xml:57(refentrytitle)
+#: chgpasswd.8.xml:64(refname) chgpasswd.8.xml:70(command)
+msgid "chgpasswd"
+msgstr "chgpasswd"
+
+#: login.defs.5.xml:271(para) login.defs.5.xml:302(para)
+msgid ""
+"ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB <phrase condition="
+"\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+"ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB <phrase condition="
+"\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+
+#: login.defs.5.xml:279(term) chpasswd.8.xml:61(refentrytitle)
+#: chpasswd.8.xml:68(refname) chpasswd.8.xml:74(command)
+msgid "chpasswd"
+msgstr "chpasswd"
+
+#: login.defs.5.xml:282(phrase)
+msgid "ENCRYPT_METHOD MD5_CRYPT_ENAB"
+msgstr "ENCRYPT_METHOD MD5_CRYPT_ENAB"
+
+#: login.defs.5.xml:284(phrase)
+msgid "SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS"
+msgstr "SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS"
+
+#: login.defs.5.xml:290(term) chsh.1.xml:60(refentrytitle)
+#: chsh.1.xml:67(refname) chsh.1.xml:73(command)
+msgid "chsh"
+msgstr "chsh"
+
+#: login.defs.5.xml:292(para)
+msgid "CHSH_AUTH LOGIN_STRING"
+msgstr "CHSH_AUTH LOGIN_STRING"
+
+#: login.defs.5.xml:300(term) gpasswd.1.xml:62(refentrytitle)
+#: gpasswd.1.xml:69(refname) gpasswd.1.xml:83(command)
+msgid "gpasswd"
+msgstr "gpasswd"
+
+#: login.defs.5.xml:310(term) groupadd.8.xml:60(refentrytitle)
+#: groupadd.8.xml:67(refname) groupadd.8.xml:73(command)
+msgid "groupadd"
+msgstr "groupadd"
+
+#: login.defs.5.xml:312(para)
+msgid "GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN"
+msgstr "GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN"
+
+#: login.defs.5.xml:319(term) groupdel.8.xml:58(refentrytitle)
+#: groupdel.8.xml:65(refname) groupdel.8.xml:71(command)
+msgid "groupdel"
+msgstr "groupdel"
+
+#: login.defs.5.xml:321(para) login.defs.5.xml:327(para)
+#: login.defs.5.xml:333(para) login.defs.5.xml:340(para)
+#: login.defs.5.xml:346(para) login.defs.5.xml:352(para)
+msgid "MAX_MEMBERS_PER_GROUP"
+msgstr "MAX_MEMBERS_PER_GROUP"
+
+#: login.defs.5.xml:325(term) groupmems.8.xml:61(refentrytitle)
+#: groupmems.8.xml:68(refname) groupmems.8.xml:74(command)
+msgid "groupmems"
+msgstr "groupmems"
+
+#: login.defs.5.xml:331(term) groupmod.8.xml:58(refentrytitle)
+#: groupmod.8.xml:65(refname) groupmod.8.xml:71(command)
+msgid "groupmod"
+msgstr "groupmod"
+
+#: login.defs.5.xml:338(term) grpck.8.xml:58(refentrytitle)
+#: grpck.8.xml:65(refname) grpck.8.xml:71(command)
+msgid "grpck"
+msgstr "grpck"
+
+#: login.defs.5.xml:357(term) lastlog.8.xml:59(refentrytitle)
+#: lastlog.8.xml:66(refname) lastlog.8.xml:72(command)
+msgid "lastlog"
+msgstr "lastlog"
+
+#: login.defs.5.xml:359(para)
+msgid "LASTLOG_UID_MAX"
+msgstr ""
+
+#: login.defs.5.xml:363(term) login.1.xml:90(refentrytitle)
+#: login.1.xml:97(refname) login.1.xml:103(command) login.1.xml:111(command)
+#: login.1.xml:118(command)
+msgid "login"
+msgstr "login"
+
+#: login.defs.5.xml:365(para)
+#, fuzzy
+#| msgid ""
+#| "<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+#| "<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ "
+#| "ENVIRON_FILE</phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam"
+#| "\">FAILLOG_ENAB</phrase> FAKE_SHELL <phrase condition=\"no_pam"
+#| "\">FTMP_FILE</phrase> HUSHLOGIN_FILE <phrase condition=\"no_pam"
+#| "\">ISSUE_FILE</phrase> KILLCHAR <phrase condition=\"no_pam"
+#| "\">LASTLOG_ENAB</phrase> LOGIN_RETRIES <phrase condition=\"no_pam"
+#| "\">LOGIN_STRING</phrase> LOGIN_TIMEOUT LOG_OK_LOGINS LOG_UNKFAIL_ENAB "
+#| "<phrase condition=\"no_pam\">MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE "
+#| "NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> TTYGROUP TTYPERM "
+#| "TTYTYPE_FILE <phrase condition=\"no_pam\">ULIMIT UMASK</phrase> "
+#| "USERGROUPS_ENAB"
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE</"
+"phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam\">FAILLOG_ENAB</"
+"phrase> FAKE_SHELL <phrase condition=\"no_pam\">FTMP_FILE</phrase> "
+"HUSHLOGIN_FILE <phrase condition=\"no_pam\">ISSUE_FILE</phrase> KILLCHAR "
+"<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 <phrase condition=\"no_pam"
+"\">MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE NOLOGINS_FILE "
+"PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> TTYGROUP TTYPERM TTYTYPE_FILE "
+"<phrase condition=\"no_pam\">ULIMIT UMASK</phrase> USERGROUPS_ENAB"
+msgstr ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE</"
+"phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam\">FAILLOG_ENAB</"
+"phrase> FAKE_SHELL <phrase condition=\"no_pam\">FTMP_FILE</phrase> "
+"HUSHLOGIN_FILE <phrase condition=\"no_pam\">ISSUE_FILE</phrase> KILLCHAR "
+"<phrase condition=\"no_pam\">LASTLOG_ENAB</phrase> LOGIN_RETRIES <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase> LOGIN_TIMEOUT LOG_OK_LOGINS "
+"LOG_UNKFAIL_ENAB <phrase condition=\"no_pam\">MAIL_CHECK_ENAB MAIL_DIR "
+"MAIL_FILE MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> "
+"TTYGROUP TTYPERM TTYTYPE_FILE <phrase condition=\"no_pam\">ULIMIT UMASK</"
+"phrase> USERGROUPS_ENAB"
+
+#: login.defs.5.xml:392(term)
+msgid "newgrp / sg"
+msgstr "newgrp / sg"
+
+#: login.defs.5.xml:394(para)
+msgid "SYSLOG_SG_ENAB"
+msgstr "SYSLOG_SG_ENAB"
+
+#: login.defs.5.xml:402(para)
+#, fuzzy
+#| msgid ""
+#| "ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB "
+#| "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"sha_crypt"
+#| "\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase> SYS_GID_MAX "
+#| "SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+msgid ""
+"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> "
+"SUB_GID_COUNT SUB_GID_MAX SUB_GID_MIN SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN "
+"SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+msgstr ""
+"ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB "
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase> SYS_GID_MAX "
+"SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+
+#: login.defs.5.xml:421(para)
+msgid ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN "
+"PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN "
+"PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+
+#: login.defs.5.xml:432(para)
+msgid ""
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb"
+"\">TCB_AUTH_GROUP TCB_SYMLINKS USE_TCB</phrase>"
+msgstr ""
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb"
+"\">TCB_AUTH_GROUP TCB_SYMLINKS USE_TCB</phrase>"
+
+#: login.defs.5.xml:441(para)
+msgid ""
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb\">USE_TCB</"
+"phrase>"
+msgstr ""
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb\">USE_TCB</"
+"phrase>"
+
+#: login.defs.5.xml:458(para)
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENVIRON_FILE</phrase> ENV_PATH "
+"ENV_SUPATH <phrase condition=\"no_pam\">ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB "
+"MAIL_DIR MAIL_FILE QUOTAS_ENAB</phrase> SULOG_FILE SU_NAME <phrase condition="
+"\"no_pam\">SU_WHEEL_ONLY</phrase> SYSLOG_SU_ENAB <phrase condition=\"no_pam"
+"\">USERGROUPS_ENAB</phrase>"
+msgstr ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENVIRON_FILE</phrase> ENV_PATH "
+"ENV_SUPATH <phrase condition=\"no_pam\">ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB "
+"MAIL_DIR MAIL_FILE QUOTAS_ENAB</phrase> SULOG_FILE SU_NAME <phrase condition="
+"\"no_pam\">SU_WHEEL_ONLY</phrase> SYSLOG_SU_ENAB <phrase condition=\"no_pam"
+"\">USERGROUPS_ENAB</phrase>"
+
+#: login.defs.5.xml:473(term)
+msgid "sulogin"
+msgstr "sulogin"
+
+#: login.defs.5.xml:475(para)
+msgid "ENV_HZ <phrase condition=\"no_pam\">ENV_TZ</phrase>"
+msgstr "ENV_HZ <phrase condition=\"no_pam\">ENV_TZ</phrase>"
+
+#: login.defs.5.xml:484(para)
+#, fuzzy
+#| msgid ""
+#| "CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP PASS_MAX_DAYS "
+#| "PASS_MIN_DAYS PASS_WARN_AGE SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX "
+#| "SYS_UID_MIN UID_MAX UID_MIN UMASK <phrase condition=\"tcb"
+#| "\">TCB_AUTH_GROUP TCB_SYMLINK USE_TCB</phrase>"
+msgid ""
+"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 SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN "
+"SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK "
+"<phrase condition=\"tcb\">TCB_AUTH_GROUP TCB_SYMLINK USE_TCB</phrase>"
+msgstr ""
+"CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP PASS_MAX_DAYS "
+"PASS_MIN_DAYS PASS_WARN_AGE SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN "
+"UID_MAX UID_MIN UMASK <phrase condition=\"tcb\">TCB_AUTH_GROUP TCB_SYMLINK "
+"USE_TCB</phrase>"
+
+#: login.defs.5.xml:502(para)
+msgid ""
+"MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB <phrase "
+"condition=\"tcb\">TCB_SYMLINKS USE_TCB</phrase>"
+msgstr ""
+"\"MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB "
+"<phrase condition=\"tcb\">TCB_SYMLINKS USE_TCB</phrase>"
+
+#: login.defs.5.xml:512(para)
+#, fuzzy
+#| msgid ""
+#| "MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP <phrase condition=\"tcb"
+#| "\">TCB_SYMLINKS USE_TCB</phrase>"
+msgid ""
+"LASTLOG_UID_MAX MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP <phrase condition="
+"\"tcb\">TCB_SYMLINKS USE_TCB</phrase>"
+msgstr ""
+"MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP <phrase condition=\"tcb"
+"\">TCB_SYMLINKS USE_TCB</phrase>"
+
+# type: Plain text
+#: login.defs.5.xml:532(para)
+msgid ""
+"Much of the functionality that used to be provided by the shadow password "
+"suite is now handled by PAM. Thus, <filename>/etc/login.defs</filename> is "
+"no longer used by <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, or less used by "
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, and <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>. Please refer to the "
+"corresponding PAM configuration files instead."
+msgstr ""
+"Molte delle funzionalità che erano fornite dal pacchetto password shadow "
+"sono adesso gestite da PAM. Quindi <filename>/etc/login.defs</filename> non "
+"è più utilizzato da <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, e meno usato da "
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> e <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>. Vedere la corrispondente configurazione di PAM."
+
+# type: Plain text
+#: login.defs.5.xml:548(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: login.access.5.xml:58(refentrytitle) login.access.5.xml:65(refname)
+msgid "login.access"
+msgstr "login.access"
+
+#: login.access.5.xml:66(refpurpose)
+msgid "login access control table"
+msgstr "tabella di controllo accessi"
+
+#: login.access.5.xml:71(para)
+msgid ""
+"The <emphasis remap=\"I\">login.access</emphasis> file specifies (user, "
+"host) combinations and/or (user, tty) combinations for which a login will be "
+"either accepted or refused."
+msgstr ""
+"Il file <emphasis remap=\"I\">login.access</emphasis> specifica le "
+"combinazioni (utente, macchina) e/o (utente, terminale) per le quali un "
+"accesso sia accettato o rifiutato."
+
+#: login.access.5.xml:77(para)
+msgid ""
+"When someone logs in, the <emphasis remap=\"I\">login.access</emphasis> is "
+"scanned for the first entry that matches the (user, host) combination, or, "
+"in case of non-networked logins, the first entry that matches the (user, "
+"tty) combination. The permissions field of that table entry determines "
+"whether the login will be accepted or refused."
+msgstr ""
+"Quando avviene un accesso, il file <emphasis remap=\\\"I\\\">login.access</"
+"emphasis> viene scorso alla ricerca della prima combinazione (utente, "
+"macchina) oppure, in caso di accesso in locale, la prima combinazione "
+"(utente, terminale). Il campo per l'autorizzazione di quanto ritrovato "
+"determina se l'utente può o meno accedere."
+
+#: login.access.5.xml:85(para)
+msgid ""
+"Each line of the login access control table has three fields separated by a "
+"\":\" character:"
+msgstr ""
+"Ogni riga della tabella di controllo degli accessi ha tre campi separati dal "
+"carattere «:»:"
+
+# type: Plain text
+#: login.access.5.xml:90(para)
+msgid ""
+"<emphasis remap=\"I\">permission</emphasis>:<emphasis remap=\"I\">users</"
+"emphasis>:<emphasis remap=\"I\">origins</emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">permesso</emphasis>:<emphasis remap=\"I\">utenti</"
+"emphasis>:<emphasis remap=\"I\">origini</emphasis>"
+
+#: login.access.5.xml:94(para)
+msgid ""
+"The first field should be a \"<emphasis>+</emphasis>\" (access granted) or "
+"\"<emphasis>-</emphasis>\" (access denied) character. The second field "
+"should be a list of one or more login names, group names, or <emphasis>ALL</"
+"emphasis> (always matches). The third field should be a list of one or more "
+"tty names (for non-networked logins), host names, domain names (begin with "
+"\"<literal>.</literal>\"), host addresses, internet network numbers (end "
+"with \"<literal>.</literal>\"), <emphasis>ALL</emphasis> (always matches) or "
+"<emphasis>LOCAL</emphasis> (matches any string that does not contain a "
+"\"<literal>.</literal>\" character). If you run NIS you can use "
+"@netgroupname in host or user patterns."
+msgstr ""
+"Il primo campo dovrebbe essere il carattere «<emphasis>+</"
+"emphasis>» (accesso concesso) o «<emphasis>-</emphasis>» (accesso negato). "
+"Il secondo campo dovrebbe essere un elenco di nomi utente o gruppi oppure "
+"<emphasis>ALL</emphasis> (sempre vero). Il terzo campo dovrebbe essere una "
+"lista di uno o più nomi di terminale (per accesso locale), nomi di macchina, "
+"nomi di dominio (con il carattere «<literal>.</literal>» all'inizio), "
+"indirizzi di macchina, numeri di rete internet (termina con il carattere "
+"«<literal>.</literal>»), <emphasis>ALL</emphasis> (sempre vero) oppure "
+"<emphasis>LOCAL</emphasis> (corrisponde a ogni testo che non contenga il "
+"carattere «<literal>.</literal>»). Se si usa NIS si può usare @nomenetgroup "
+"come nome macchina o utente."
+
+#: login.access.5.xml:108(para)
+msgid ""
+"The <emphasis>EXCEPT</emphasis> operator makes it possible to write very "
+"compact rules."
+msgstr ""
+"L'operatore <emphasis>EXCEPT</emphasis> permette di scrivere regole molto "
+"compatte."
+
+#: login.access.5.xml:113(para)
+msgid ""
+"The group file is searched only when a name does not match that of the "
+"logged-in user. Only groups are matched in which users are explicitly "
+"listed: the program does not look at a user's primary group id value."
+msgstr ""
+"La ricerca nel file dei gruppi avviene solo quando il nome non corrisponde a "
+"quello dell'utente che accede. I gruppi che possono corrispondere sono solo "
+"quelli nei quali l'utente è esplicitamente elencato: il programma non "
+"controlla l'id del gruppo primario dell'utente."
+
+# type: Plain text
+#: login.1.xml:98(refpurpose)
+msgid "begin session on the system"
+msgstr "apre una sessione sul sistema"
+
+#: login.1.xml:104(arg) login.1.xml:112(arg) login.1.xml:119(arg)
+#: login.1.xml:236(option) groupmems.8.xml:79(arg)
+msgid "-p"
+msgstr "-p"
+
+#: login.1.xml:105(replaceable) login.1.xml:113(replaceable)
+#: login.1.xml:120(replaceable)
+msgid "host"
+msgstr "macchina"
+
+#: login.1.xml:105(arg) login.1.xml:113(arg)
+msgid "-h <placeholder-1/>"
+msgstr "-h <placeholder-1/>"
+
+#: login.1.xml:108(replaceable)
+msgid "ENV=VAR"
+msgstr "ENV=VAR"
+
+#: login.1.xml:114(arg) login.1.xml:214(option)
+msgid "-f"
+msgstr "-f"
+
+#: login.1.xml:120(arg)
+msgid "-r <placeholder-1/>"
+msgstr "-r <placeholder-1/>"
+
+# type: Plain text
+#: login.1.xml:126(para)
+msgid ""
+"The <command>login</command> program is used to establish a new session with "
+"the system. It is normally invoked automatically by responding to the "
+"<emphasis remap=\"I\">login:</emphasis> prompt on the user's terminal. "
+"<command>login</command> may be special to the shell and may not be invoked "
+"as a sub-process. When called from a shell, <command>login</command> should "
+"be executed as <emphasis remap=\"B\">exec login</emphasis> which will cause "
+"the user to exit from the current shell (and thus will prevent the new "
+"logged in user to return to the session of the caller). Attempting to "
+"execute <command>login</command> from any shell but the login shell will "
+"produce an error message."
+msgstr ""
+"<command>login</command> viene utilizzato per aprire una sessione sul "
+"sistema. Normalmente viene invocato automaticamente rispondendo al prompt "
+"<emphasis remap=\"I\">login:</emphasis> del terminale. <command>login</"
+"command> può essere trattato in maniera speciale dalla shell e non può "
+"essere invocato come sottoprocesso. Quando è richiamato dalla shell, "
+"<command>login</command> va invocato come <emphasis remap=\"B\">exec login</"
+"emphasis> che termina la shell utente attuale (il che impedirà al nuovo "
+"utente che accede, di poter ritornare alla sessione del chiamante). Il "
+"tentativo di esecuzione di <command>login</command> da una shell che non sia "
+"quella di login produce un messaggio d'errore."
+
+# type: Plain text
+#: login.1.xml:140(para)
+msgid ""
+"The user is then prompted for a password, where appropriate. Echoing is "
+"disabled to prevent revealing the password. Only a small number of password "
+"failures are permitted before <command>login</command> exits and the "
+"communications link is severed."
+msgstr ""
+"Se necessario viene quindi chiesta la password all'utente. Durante questa "
+"operazione l'eco sul terminale è disabilitata per non rivelare la password. "
+"Solo un basso numero di tentativi falliti è permesso prima che "
+"<command>login</command> termini e che la connessione sia interrotta."
+
+# type: Plain text
+#: login.1.xml:147(para)
+msgid ""
+"If password aging has been enabled for your account, you may be prompted for "
+"a new password before proceeding. You will be forced to provide your old "
+"password and the new password before continuing. Please refer to "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> for more information."
+msgstr ""
+"Se la scadenza delle password è abilitata per il proprio account, prima di "
+"proseguire ci può essere la richiesta di una nuova password. Il programma "
+"chiederà prima la vecchia password e poi la nuova per poter continuare. Per "
+"maggiori informazioni si faccia riferimento a "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+# type: Plain text
+#: login.1.xml:156(para)
+msgid ""
+"After a successful login, you will be informed of any system messages and "
+"the presence of mail. You may turn off the printing of the system message "
+"file, <filename>/etc/motd</filename>, by creating a zero-length file "
+"<filename>.hushlogin</filename> in your login directory. The mail message "
+"will be one of \"<emphasis>You have new mail.</emphasis>\", \"<emphasis>You "
+"have mail.</emphasis>\", or \"<emphasis>No Mail.</emphasis>\" according to "
+"the condition of your mailbox."
+msgstr ""
+"Dopo aver completato correttamente l'accesso, vengono mostrati eventuali "
+"messaggi di sistema e si viene informati della presenza di nuova posta. Si "
+"può evitare di visualizzare i messaggi in <filename>/etc/motd</filename> "
+"creando un file vuoto chiamato <filename>.hushlogin</filename> nella propria "
+"directory di login. Il messaggio relativo alla presenza di posta è "
+"«<emphasis>C'è nuova posta.</emphasis>», «<emphasis>C'è posta.</emphasis>» o "
+"«<emphasis>Nessun messaggio di posta.</emphasis>» a seconda dello stato "
+"della propria casella di posta."
+
+# type: Plain text
+#: login.1.xml:167(para)
+msgid ""
+"Your user and group ID will be set according to their values in the "
+"<filename>/etc/passwd</filename> file. The value for <envar>$HOME</envar>, "
+"<envar>$SHELL</envar>, <envar>$PATH</envar>, <envar>$LOGNAME</envar>, and "
+"<envar>$MAIL</envar> are set according to the appropriate fields in the "
+"password entry. Ulimit, umask and nice values may also be set according to "
+"entries in the GECOS field."
+msgstr ""
+"I propri ID di utente e gruppo vengono poi impostati in base ai valori "
+"definiti nel file <filename>/etc/passwd</filename>. I valori di <envar>"
+"$HOME</envar>, <envar>$SHELL</envar>, <envar>$PATH</envar>, <envar>$LOGNAME</"
+"envar> e <envar>$MAIL</envar> sono impostati in base ai campi appropriati "
+"nella voce della password. Anche i valori per ulimit, umask e nice possono "
+"essere impostati in base al campo GECOS."
+
+# type: Plain text
+#: login.1.xml:176(para)
+msgid ""
+"On some installations, the environmental variable <envar>$TERM</envar> will "
+"be initialized to the terminal type on your tty line, as specified in "
+"<filename>/etc/ttytype</filename>."
+msgstr ""
+"In alcune installazioni la variabile d'ambiente <envar>$TERM</envar> può "
+"essere impostata in base al tipo di terminale della propria connessione, "
+"come specificato in <filename>/etc/ttytype</filename>."
+
+# type: Plain text
+#: login.1.xml:182(para)
+msgid ""
+"An initialization script for your command interpreter may also be executed. "
+"Please see the appropriate manual section for more information on this "
+"function."
+msgstr ""
+"Può anche essere eseguito uno script di inizializzazione per il proprio "
+"interprete dei comandi. Fare riferimento alla relativa sezione di manuale "
+"per maggiori informazioni su questa funzione."
+
+# type: Plain text
+#: login.1.xml:194(para) login.1.xml:270(para)
+msgid ""
+"The <command>login</command> program is NOT responsible for removing users "
+"from the utmp file. It is the responsibility of "
+"<citerefentry><refentrytitle>getty</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry> and <citerefentry><refentrytitle>init</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry> to clean up apparent "
+"ownership of a terminal session. If you use <command>login</command> from "
+"the shell prompt without <command>exec</command>, the user you use will "
+"continue to appear to be logged in even after you log out of the \"subsession"
+"\"."
+msgstr ""
+"Il programma <command>login</command> NON è responsabile di rimuovere gli "
+"utenti dal file utmp. La correzione del proprietario di una sessione di "
+"terminale è responsabilità di <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry> e "
+"<citerefentry><refentrytitle>init</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>. Se si usa <command>login</command> senza <command>exec</"
+"command> dal prompt della shell, allora l'utente che si sta usando risulterà "
+"sempre connesso al sistema anche oltre il termine della «sottosessione»."
+
+# type: Plain text
+#: login.1.xml:217(para)
+msgid "Do not perform authentication, user is preauthenticated."
+msgstr "Non effettua l'autenticazione, l'utente è già autenticato"
+
+#: login.1.xml:220(para)
+msgid "Note: In that case, <replaceable>username</replaceable> is mandatory."
+msgstr ""
+"Nota: in questo caso <replaceable>username</replaceable> è obbligatorio."
+
+#: login.1.xml:228(option)
+msgid "-h"
+msgstr "-h"
+
+# type: Plain text
+#: login.1.xml:231(para)
+msgid "Name of the remote host for this login."
+msgstr "Nome dell'host remoto per questo login."
+
+# type: Plain text
+#: login.1.xml:239(para)
+msgid "Preserve environment."
+msgstr "Non modifica l'ambiente."
+
+#: login.1.xml:244(option)
+msgid "-r"
+msgstr "-r"
+
+# type: Plain text
+#: login.1.xml:247(para)
+msgid "Perform autologin protocol for rlogin."
+msgstr "Attiva il protocollo autologin di rlogin."
+
+# type: Plain text
+#: login.1.xml:252(para)
+msgid ""
+"The <option>-r</option>, <option>-h</option> and <option>-f</option> options "
+"are only used when <command>login</command> is invoked by root."
+msgstr ""
+"Le opzioni <option>-r</option>, <option>-h</option> e <option>-f</option> "
+"possono essere utilizzate solo quando <command>login</command> viene "
+"invocato da root."
+
+# type: Plain text
+#: login.1.xml:261(para)
+msgid ""
+"This version of <command>login</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+"Questa versione di <command>login</command> ha molte opzioni di "
+"compilazione; in un determinato sistema potrebbe esserne in uso solo una "
+"parte."
+
+# type: Plain text
+#: login.1.xml:266(para)
+msgid ""
+"The location of files is subject to differences in system configuration."
+msgstr ""
+"La posizione dei file è soggetta a differenze in base alla configurazione "
+"del sistema."
+
+#: login.1.xml:282(para)
+msgid ""
+"As with any program, <command>login</command>'s appearance can be faked. If "
+"non-trusted users have physical access to a machine, an attacker could use "
+"this to obtain the password of the next person coming to sit in front of the "
+"machine. Under Linux, the SAK mechanism can be used by users to initiate a "
+"trusted path and prevent this kind of attack."
+msgstr ""
+"Come per ogni programma, l'aspetto di <command>login</command> può essere "
+"simulata. Se utenti non fidati hanno accesso fisico alla macchina, essi "
+"potrebbero sfruttare questa cosa per ottenere la password della prossima "
+"persona che si siede davanti al terminale. In Linux si può utilizzare il "
+"meccanismo SAK per iniziare un percorso sicuro che previene questo tipo di "
+"attacchi."
+
+#: login.1.xml:347(filename)
+msgid "/var/log/wtmp"
+msgstr "/var/log/wtmp"
+
+# type: Plain text
+#: login.1.xml:349(para)
+msgid "List of previous login sessions."
+msgstr "Elenco delle precedenti sessioni di login."
+
+#: login.1.xml:365(filename)
+msgid "/etc/motd"
+msgstr "/etc/motd"
+
+#: login.1.xml:367(para)
+msgid "System message of the day file."
+msgstr "File di sistema con il messaggio del giorno."
+
+#: login.1.xml:371(filename)
+msgid "/etc/nologin"
+msgstr "/etc/nologin"
+
+# type: Plain text
+#: login.1.xml:373(para)
+msgid "Prevent non-root users from logging in."
+msgstr "Impedisce l'accesso al sistema per utenti diversi da root."
+
+#: login.1.xml:377(filename)
+msgid "/etc/ttytype"
+msgstr "/etc/ttytype"
+
+# type: Plain text
+#: login.1.xml:379(para)
+msgid "List of terminal types."
+msgstr "Elenco di tipi di terminale."
+
+#: login.1.xml:383(filename)
+msgid "$HOME/.hushlogin"
+msgstr "$HOME/.hushlogin"
+
+# type: Plain text
+#: login.1.xml:385(para)
+msgid "Suppress printing of system messages."
+msgstr "Impedisce che vengano mostrati i messaggi di sistema."
+
+# type: Plain text
+#: login.1.xml:399(para)
+msgid ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: limits.5.xml:41(firstname)
+msgid "Luca"
+msgstr ""
+
+#: limits.5.xml:42(surname)
+msgid "Berra"
+msgstr ""
+
+#: limits.5.xml:59(refentrytitle) limits.5.xml:66(refname)
+msgid "limits"
+msgstr "limits"
+
+#: limits.5.xml:67(refpurpose)
+msgid "resource limits definition"
+msgstr "definizione dei limiti di risorsa"
+
+#: limits.5.xml:73(para)
+msgid ""
+"The <emphasis remap=\"I\">limits</emphasis> file (<filename>/etc/limits</"
+"filename> by default or LIMITS_FILE defined <filename>config.h</filename>) "
+"describes the resource limits you wish to impose. It should be owned by root "
+"and readable by root account only."
+msgstr ""
+"Il file <emphasis remap=\"I\">limits</emphasis> (<filename>/etc/limits</"
+"filename> o quanto definito da LIMITS_FILE in <filename>config.h</filename>) "
+"descrive i limiti di risorsa che si vuole imporre. Deve essere di proprietà "
+"di root e leggibile solo dall'account root."
+
+#: limits.5.xml:81(para)
+msgid ""
+"By default no quota is imposed on 'root'. In fact, there is no way to impose "
+"limits via this procedure to root-equiv accounts (accounts with UID 0)."
+msgstr ""
+"In maniera predefinita non c'è nessun limite alla quota di «root». In "
+"effetti non c'è nessun modo per imporre una quota massima tramite questa "
+"procedura agli account equivalenti a root (cioè tutti quelli con UID 0)."
+
+#: limits.5.xml:87(para)
+msgid "Each line describes a limit for a user in the form:"
+msgstr "Ogni riga descrive un limite per l'utente in questo formato:"
+
+#: limits.5.xml:90(emphasis)
+msgid "user LIMITS_STRING"
+msgstr "utente TESTO_LIMITE"
+
+#: limits.5.xml:93(para)
+msgid "or in the form:"
+msgstr "oppure nel formato:"
+
+#: limits.5.xml:96(emphasis)
+msgid "@group LIMITS_STRING"
+msgstr "@gruppo TESTO_LIMITE"
+
+#: limits.5.xml:99(para)
+msgid ""
+"The <emphasis>LIMITS_STRING</emphasis> is a string of a concatenated list of "
+"resource limits. Each limit consists of a letter identifier followed by a "
+"numerical limit."
+msgstr ""
+"Dove <emphasis>TESTO_LIMITE</emphasis> è un testo dato dalla concatenazione "
+"di vari limiti di risorsa. Ogni limite consiste di una lettera "
+"identificativa seguita dal limite numerico."
+
+#: limits.5.xml:105(para)
+msgid "The valid identifiers are:"
+msgstr "Gli identificatori validi sono:"
+
+#: limits.5.xml:108(para)
+msgid "A: max address space (KB)"
+msgstr "A: spazio massimo di indirizzamento (kB)"
+
+#: limits.5.xml:109(para)
+msgid "C: max core file size (KB)"
+msgstr "C: dimensione massima dei file «core» (kB)"
+
+#: limits.5.xml:110(para)
+msgid "D: max data size (KB)"
+msgstr "D: spazio massimo per i dati (kB)"
+
+#: limits.5.xml:111(para)
+#, fuzzy
+#| msgid "F: maximum filesize (KB)"
+msgid "F: maximum file size (KB)"
+msgstr "F: dimensione massima di file (kB)"
+
+# type: Plain text
+#: limits.5.xml:112(para)
+msgid ""
+"K: file creation mask, set by <citerefentry><refentrytitle>umask</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"K: maschera dei permessi per i file creati, impostata da "
+"<citerefentry><refentrytitle>umask</refentrytitle><manvolnum>2</manvolnum></"
+"citerefentry>."
+
+#: limits.5.xml:117(para)
+msgid "I: max nice value (0..39 which translates to 20..-19)"
+msgstr "I: massimo valore di «nice» (0..39 che viene tradotto in 20..-19)"
+
+#: limits.5.xml:119(para)
+msgid "L: max number of logins for this user"
+msgstr "L: massimo numero di accessi per questo utente"
+
+#: limits.5.xml:120(para)
+msgid "M: max locked-in-memory address space (KB)"
+msgstr ""
+"M: massima quantità di memoria bloccata (della quale non si può fare «swap») "
+"(kB)"
+
+#: limits.5.xml:121(para)
+msgid "N: max number of open files"
+msgstr "N: numero massimo di file aperti"
+
+#: limits.5.xml:122(para)
+msgid "O: max real time priority"
+msgstr "O: massima priorità «real time»"
+
+# type: Plain text
+#: limits.5.xml:123(para)
+msgid ""
+"P: process priority, set by <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"P: priorità di processo, impostata con "
+"<citerefentry><refentrytitle>setpriority</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+
+#: limits.5.xml:128(para)
+msgid "R: max resident set size (KB)"
+msgstr "R: massimo «resident set size» (kB)"
+
+#: limits.5.xml:129(para)
+msgid "S: max stack size (KB)"
+msgstr "S: dimensione massima della pila (kB)"
+
+#: limits.5.xml:130(para)
+msgid "T: max CPU time (MIN)"
+msgstr "T: quantità massima di tempo CPU (MIN)"
+
+#: limits.5.xml:131(para)
+msgid "U: max number of processes"
+msgstr "U: massimo numero di processi"
+
+#: limits.5.xml:134(para)
+msgid ""
+"For example, <emphasis remap=\"I\">L2D2048N5</emphasis> is a valid "
+"<emphasis>LIMITS_STRING</emphasis>. For reading convenience, the following "
+"entries are equivalent:"
+msgstr ""
+"Ad esempio, <emphasis remap=\"I\">L2D2048N5</emphasis> è uno testo valido "
+"per <emphasis>TESTO_LIMITE</emphasis>. Per sempicità di lettura le seguenti "
+"scritture sono equivalenti:"
+
+#: limits.5.xml:140(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+" username L2D2048N5\n"
+" username L2 D2048 N5\n"
+" "
+msgstr ""
+"\n"
+" nomeutente L2D2048N5\n"
+" nomeutente L2 D2048 N5\n"
+" "
+
+#: limits.5.xml:145(para)
+#, fuzzy
+#| msgid ""
+#| "Be aware that after <emphasis remap=\"I\">username</emphasis> the rest of "
+#| "the line is considered a limit string, thus comments are not allowed. A "
+#| "invalid limits string will be rejected (not considered) by the "
+#| "<command>login</command> program."
+msgid ""
+"Be aware that after <emphasis remap=\"I\">username</emphasis> the rest of "
+"the line is considered a limit string, thus comments are not allowed. An "
+"invalid limits string will be rejected (not considered) by the "
+"<command>login</command> program."
+msgstr ""
+"Notare che dopo <emphasis remap=\"I\">nomeutente</emphasis> il resto della "
+"riga è considerato il testo del limite, quindi non sono ammessi commenti a "
+"fine riga. Un testo limite non valido verrà ignorato dal programma "
+"<command>login</command>."
+
+#: limits.5.xml:152(para)
+msgid ""
+"The default entry is denoted by username \"<emphasis>*</emphasis>\". If you "
+"have multiple <emphasis remap=\"I\">default</emphasis> entries in your "
+"<emphasis>LIMITS_FILE</emphasis>, then the last one will be used as the "
+"default entry."
+msgstr ""
+"L'impostazione predefinita è quella che ha come nome utente «<emphasis>*</"
+"emphasis>». Se si hanno varie righe <emphasis remap=\"I\">predefinite</"
+"emphasis> nel file <emphasis>LIMITS_FILE</emphasis> verrà utilizzata solo "
+"l'ultima."
+
+# type: Plain text
+#: limits.5.xml:159(para)
+msgid ""
+"The limits specified in the form \"<replaceable>@group</replaceable>\" apply "
+"to the members of the specified <replaceable>group</replaceable>."
+msgstr ""
+"I limiti specificati nella forma «<replaceable>@gruppo</replaceable>» si "
+"applicano ai membri del <replaceable>gruppo</replaceable> specificato."
+
+#: limits.5.xml:165(para)
+#, fuzzy
+#| msgid ""
+#| "If more than one line with limits for an user exist, only the first line "
+#| "for this user will be considered."
+msgid ""
+"If more than one line with limits for a user exist, only the first line for "
+"this user will be considered."
+msgstr ""
+"Se ci sono più righe per lo stesso utente nel file limits, allora solo la "
+"prima verrà considerata."
+
+#: limits.5.xml:170(para)
+#, fuzzy
+#| msgid ""
+#| "If no lines are specified for an user, the last <replaceable>@group</"
+#| "replaceable> line matching a group whose the user is a member of will be "
+#| "considered, or the last line with default limits if no groups contain the "
+#| "user."
+msgid ""
+"If no lines are specified for a user, the last <replaceable>@group</"
+"replaceable> line matching a group whose the user is a member of will be "
+"considered, or the last line with default limits if no groups contain the "
+"user."
+msgstr ""
+"Se non ci sono righe specifiche per un utente, verrà presa l'ultima riga "
+"<replaceable>@group</replaceable> relativa ad un gruppo del quale l'utente è "
+"membro, oppure l'ultima riga con limiti predefiniti se non si trova nessuna "
+"riga con gruppi dell'utente."
+
+#: limits.5.xml:177(para)
+msgid ""
+"To completely disable limits for a user, a single dash \"<emphasis>-</"
+"emphasis>\" will do."
+msgstr ""
+"Per eliminare completamente l'impostazione di limiti per un certo utente, si "
+"può utilizzare «<emphasis>-</emphasis>»."
+
+#: limits.5.xml:182(para)
+msgid ""
+"To disable a limit for a user, a single dash \"<replaceable>-</replaceable>"
+"\" can be used instead of the numerical value for this limit."
+msgstr ""
+"Per disabilitare i limiti per un utente, un singolo trattino «<replaceable>-"
+"</replaceable>» può essere utilizzato al posto del valore numerico del "
+"limite."
+
+#: limits.5.xml:188(para)
+msgid ""
+"Also, please note that all limit settings are set PER LOGIN. They are not "
+"global, nor are they permanent. Perhaps global limits will come, but for now "
+"this will have to do ;)"
+msgstr ""
+"Notare inoltre che tutte queste impostazioni sono effettuate ad ogni "
+"accesso. Non si tratta di impostazioni globali né permanenti. Forse limiti "
+"globali saranno possibili in futuro, ma per ora devono bastare questi ;)"
+
+#: limits.5.xml:199(filename)
+msgid "/etc/limits"
+msgstr "/etc/limits"
+
+# type: Plain text
+#: limits.5.xml:207(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+
+#: lastlog.8.xml:67(refpurpose)
+msgid "reports the most recent login of all users or of a given user"
+msgstr ""
+"riepiloga gli accessi più recenti di tutti gli utenti o dell'utente dato"
+
+# type: Plain text
+#: lastlog.8.xml:81(para)
+msgid ""
+"<command>lastlog</command> formats and prints the contents of the last login "
+"log <filename>/var/log/lastlog</filename> file. The <emphasis>login-name</"
+"emphasis>, <emphasis>port</emphasis>, and <emphasis>last login time</"
+"emphasis> will be printed. The default (no flags) causes lastlog entries to "
+"be printed, sorted by their order in <filename>/etc/passwd</filename>."
+msgstr ""
+"<command>lastlog</command> formatta e mostra il log degli ultimi accessi, "
+"contenuto nel file <filename>/var/log/lastlog</filename>. Le informazioni "
+"mostrate sono il <emphasis>nome utente</emphasis>, la <emphasis>porta</"
+"emphasis> e la <emphasis>data dell'ultimo accesso</emphasis>. Il "
+"comportamento predefinito (nessuna opzione specificata) è di mostrare i "
+"record di ultimo accesso per tutti gli utenti, nell'ordine in cui compaiono "
+"in <filename>/etc/passwd</filename>."
+
+# type: TP
+#: lastlog.8.xml:93(para)
+msgid "The options which apply to the <command>lastlog</command> command are:"
+msgstr "Il comando <command>lastlog</command> accetta le seguenti opzioni:"
+
+# type: IP
+#: lastlog.8.xml:98(term)
+msgid ""
+"<option>-b</option>, <option>--before</option>&nbsp;<replaceable>DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-b</option>, <option>--before</option>&nbsp;<replaceable>GIORNI</"
+"replaceable>"
+
+# type: Plain text
+#: lastlog.8.xml:102(para)
+msgid ""
+"Print only lastlog records older than <emphasis remap=\"I\">DAYS</emphasis>."
+msgstr ""
+"Mostra solo i record di ultimo accesso più vecchi di <emphasis remap=\"I"
+"\">GIORNI</emphasis> giorni."
+
+# type: IP
+#: lastlog.8.xml:108(term)
+#, fuzzy
+#| msgid "<option>-u</option>, <option>--user</option>"
+msgid "<option>-C</option>, <option>--clear</option>"
+msgstr "<option>-u</option>, <option>--user</option>"
+
+# type: IP
+#: lastlog.8.xml:112(para)
+#, fuzzy
+#| msgid ""
+#| "This option is only valid in combination with the <option>-d</option> (or "
+#| "<option>--home</option>) option."
+msgid ""
+"Clear lastlog record of a user. This option can be used only together with "
+"<option>-u</option> (<option>--user</option>))."
+msgstr ""
+"Questa opzione è valida solo in combinazioone con l'opzione <option>-d</"
+"option> (o <option>--home</option>)."
+
+# type: IP
+#: lastlog.8.xml:139(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-S</option>, <option>--set</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: lastlog.8.xml:143(para)
+msgid ""
+"Set lastlog record of a user to the current time. This option can be used "
+"only together with <option>-u</option> (<option>--user</option>))."
+msgstr ""
+
+# type: IP
+#: lastlog.8.xml:150(term) faillog.8.xml:192(term)
+msgid ""
+"<option>-t</option>, <option>--time</option>&nbsp;<replaceable>DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option>&nbsp;<replaceable>GIORNI</"
+"replaceable>"
+
+# type: Plain text
+#: lastlog.8.xml:154(para)
+msgid ""
+"Print the lastlog records more recent than <emphasis remap=\"I\">DAYS</"
+"emphasis>."
+msgstr ""
+"Mostra solo i record di ultimo accesso più recenti di <emphasis remap=\"I"
+"\">GIORNI</emphasis>."
+
+# type: IP
+#: lastlog.8.xml:161(term) faillog.8.xml:202(term)
+msgid ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+"replaceable>|<replaceable>RANGE</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+"replaceable>|<replaceable>INTERVALLO</replaceable>"
+
+# type: Plain text
+#: lastlog.8.xml:165(para)
+msgid "Print the lastlog record of the specified user(s)."
+msgstr ""
+"Mostra il record di ultimo accesso per l'utente o gli utenti specificati da "
+"<emphasis remap=\"I\">LOGIN</emphasis>."
+
+#: lastlog.8.xml:168(para) faillog.8.xml:211(para)
+msgid ""
+"The users can be specified by a login name, a numerical user ID, or a "
+"<replaceable>RANGE</replaceable> of users. This <replaceable>RANGE</"
+"replaceable> of users can be specified with a min and max values "
+"(<replaceable>UID_MIN-UID_MAX</replaceable>), a max value (<replaceable>-"
+"UID_MAX</replaceable>), or a min value (<replaceable>UID_MIN-</replaceable>)."
+msgstr ""
+"Gli utenti possono essere specificati utilizzando il loro nome oppure l'ID "
+"numerico o tramite un <replaceable>INTERVALLO</replaceable> di utenti. "
+"Questo <replaceable>INTERVALLO</replaceable> di utenti ha tre forme: tra "
+"minimo e massimo (<replaceable>UID_MIN-UID_MAX</replaceable>), fino ad un "
+"valore massimo (<replaceable>-UID_MAX</replaceable>) o da un valore minimo "
+"(<replaceable>UID_MIN-</replaceable>)."
+
+# type: Plain text
+#: lastlog.8.xml:180(para)
+msgid ""
+"If the user has never logged in the message <emphasis>** Never logged in**</"
+"emphasis> will be displayed instead of the port and time."
+msgstr ""
+"Se l'utente non ha mai effettuato accessi al sistema viene mostrato, al "
+"posto della porta e della data, il messaggio «<emphasis>**Nessun accesso "
+"effettuato**</emphasis>»."
+
+#: lastlog.8.xml:185(para)
+msgid ""
+"Only the entries for the current users of the system will be displayed. "
+"Other entries may exist for users that were deleted previously."
+msgstr ""
+"Solo le registrazioni degli utenti correnti del sistema verranno mostrate. "
+"Ci potrebbero essere altre registrazioni per utenti cancellati in precedenza."
+
+# type: SH
+#: lastlog.8.xml:193(title) groups.1.xml:90(title) chsh.1.xml:140(title)
+#: chage.1.xml:237(title)
+msgid "NOTE"
+msgstr "NOTA"
+
+#: lastlog.8.xml:194(para)
+msgid ""
+"The <filename>lastlog</filename> file is a database which contains info on "
+"the last login of each user. You should not rotate it. It is a sparse file, "
+"so its size on the disk is usually much smaller than the one shown by "
+"\"<command>ls -l</command>\" (which can indicate a really big file if you "
+"have in <filename>passwd</filename> users with a high UID). You can display "
+"its real size with \"<command>ls -s</command>\"."
+msgstr ""
+"Il file <filename>lastlog</filename> è un database che contiene informazioni "
+"sull'ultimo accesso di ogni utente. Non deve essere ruotato. Si tratta di un "
+"file «sparse», quindi la sua dimensione è minore di quanto normalmente "
+"mostrato da «<command>ls -l</command>» (che potrebbe indicare una dimensione "
+"veramente grande se si hanno utenti con grandi UID in <filename>passwd</"
+"filename>). Si può vedere la dimensione effettiva con «<command>ls -s</"
+"command>»."
+
+#: lastlog.8.xml:220(filename)
+msgid "/var/log/lastlog"
+msgstr "/var/log/lastlog"
+
+#: lastlog.8.xml:222(para)
+msgid "Database times of previous user logins."
+msgstr "Database degli orari dei precedenti accessi utente."
+
+# type: Plain text
+#: lastlog.8.xml:230(para)
+msgid ""
+"Large gaps in UID numbers will cause the lastlog program to run longer with "
+"no output to the screen (i.e. if in lastlog database there is no entries for "
+"users with UID between 170 and 800 lastlog will appear to hang as it "
+"processes entries with UIDs 171-799)."
+msgstr ""
+"Se ci sono dei grossi scarti tra i valori di UID, il programma lastlog può "
+"restare in esecuzione per un tempo prolungato senza produrre output sullo "
+"schermo (ad es. se nel database lastlog non ci sono registrazioni per UID "
+"tra 170 e 800, il programma sembrerà bloccato mentre esamina gli UID tra 171 "
+"e 799)."
+
+#: gshadow.5.xml:41(contrib)
+msgid "Creation, 2005"
+msgstr ""
+
+#: gshadow.5.xml:46(refentrytitle) gshadow.5.xml:53(refname)
+msgid "gshadow"
+msgstr "gshadow"
+
+# type: Plain text
+#: gshadow.5.xml:54(refpurpose)
+msgid "shadowed group file"
+msgstr "file shadow per i gruppi"
+
+# type: Plain text
+#: gshadow.5.xml:59(para)
+msgid ""
+"<filename>/etc/gshadow</filename> contains the shadowed information for "
+"group accounts."
+msgstr ""
+"<emphasis>/etc/gshadow</emphasis> contiene le informazioni shadow sugli "
+"account di gruppo."
+
+#: gshadow.5.xml:69(para)
+msgid "Each line of this file contains the following colon-separated fields:"
+msgstr "Ogni riga di questo file contiene questi campi separati da due punti:"
+
+# type: Plain text
+#: gshadow.5.xml:75(emphasis)
+msgid "group name"
+msgstr "nome del gruppo"
+
+#: gshadow.5.xml:77(para)
+msgid "It must be a valid group name, which exist on the system."
+msgstr "Deve essere un nome di gruppo valido, che esista nel sistema."
+
+# type: Plain text
+#: gshadow.5.xml:90(para)
+msgid ""
+"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 *, users will not be able to use a unix "
+"password to access the group (but group members do not need the password)."
+msgstr ""
+"Se il campo password contiene un testo che non sia un risultato valido di "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, ad esempio ! o *, gli utenti non potranno accedere a quel "
+"gruppo utilizzando la password unix (ma i membri del gruppo non necessitano "
+"di password)."
+
+# type: Plain text
+#: gshadow.5.xml:97(para)
+#, fuzzy
+#| msgid ""
+#| "The password is used when an user who is not a member of the group wants "
+#| "to gain the permissions of this group (see "
+#| "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>)."
+msgid ""
+"The password is used when a user who is not a member of the group wants to "
+"gain the permissions of this group (see <citerefentry><refentrytitle>newgrp</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>)."
+msgstr ""
+"La password è utilizzata quanto un utente che non è membro del gruppo cerca "
+"di ottenerne i permessi (vedere <citerefentry><refentrytitle>newgrp</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>)."
+
+#: gshadow.5.xml:103(para)
+msgid ""
+"This field may be empty, in which case only the group members can gain the "
+"group permissions."
+msgstr ""
+"Questo campo può essere vuoto, nel qual caso solo i membri del gruppo "
+"possono ottenere i permessi del gruppo."
+
+# type: Plain text
+#: gshadow.5.xml:113(para)
+msgid ""
+"This password supersedes any password specified in <filename>/etc/group</"
+"filename>."
+msgstr ""
+"Questa password ha la precedenza su ogni altra specificata in <filename>/etc/"
+"group</filename>."
+
+#: gshadow.5.xml:121(emphasis)
+msgid "administrators"
+msgstr "amministratori"
+
+# type: Plain text
+#: gshadow.5.xml:123(para) gshadow.5.xml:139(para)
+msgid "It must be a comma-separated list of user names."
+msgstr "Deve essere una lista di nomi utente separati da virgole."
+
+#: gshadow.5.xml:126(para)
+msgid "Administrators can change the password or the members of the group."
+msgstr "Gli amministratori possono cambiare la password o i membri del gruppo."
+
+#: gshadow.5.xml:130(para)
+msgid ""
+"Administrators also have the same permissions as the members (see below)."
+msgstr ""
+"Gli amministratori hanno anche gli stessi permessi dei membri (vedere sotto),"
+
+#: gshadow.5.xml:137(emphasis)
+msgid "members"
+msgstr "membri"
+
+#: gshadow.5.xml:142(para)
+msgid "Members can access the group without being prompted for a password."
+msgstr ""
+"I membri possono accedere al gruppo senza che ne sia richiesta la password."
+
+# type: Plain text
+#: gshadow.5.xml:146(para)
+msgid ""
+"You should use the same list of users as in <filename>/etc/group</filename>."
+msgstr ""
+"Si dovrebbe utilizzare la stessa lista di utenti di <filename>/etc/group</"
+"filename>."
+
+# type: Plain text
+#: gshadow.5.xml:175(para)
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+# type: Plain text
+#: grpck.8.xml:66(refpurpose)
+msgid "verify integrity of group files"
+msgstr "verifica l'integrità dei file dei gruppi"
+
+# type: Plain text
+#: grpck.8.xml:84(para)
+msgid ""
+"The <command>grpck</command> command verifies the integrity of the groups "
+"information. It checks that all entries in <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</"
+"filename></phrase> have the proper format and contain valid data. The user "
+"is prompted to delete entries that are improperly formatted or which have "
+"other uncorrectable errors."
+msgstr ""
+"Il comando <command>grpck</command> verifica l'integrità delle informazioni "
+"sui gruppi. Ogni voce in <filename>/etc/group</filename><phrase condition="
+"\"gshadow\"> e in <filename>/etc/gshadow</filename></phrase> viene "
+"controllata per verificare che abbia il formato corretto e dati validi. "
+"Viene richiesto all'utente di rimuovere le voci che non hanno un formato "
+"appropriato o che presentano altri errori impossibili da correggere."
+
+# type: Plain text
+#: grpck.8.xml:101(para)
+msgid "a unique and valid group name"
+msgstr "un nome univoco e valido di gruppo"
+
+#: grpck.8.xml:104(para)
+msgid ""
+"a valid group identifier <phrase condition=\"gshadow\"> (<filename>/etc/"
+"group</filename> only)</phrase>"
+msgstr ""
+"un identificatore valido di gruppo <phrase condition=\"gshadow\"> (solo "
+"<filename>/etc/group</filename>)</phrase>"
+
+# type: Plain text
+#: grpck.8.xml:111(para)
+msgid ""
+"a valid list of members <phrase condition=\"gshadow\"> and administrators</"
+"phrase>"
+msgstr ""
+"un elenco valido di membri<phrase condition=\"gshadow\"> e amministratori</"
+"phrase>"
+
+# type: Plain text
+#: grpck.8.xml:117(para)
+msgid ""
+"a corresponding entry in the <filename>/etc/gshadow</filename> file "
+"(respectively <filename>/etc/group</filename> for the <filename>gshadow</"
+"filename> checks)"
+msgstr ""
+"una voce corrispondente nel file <filename>/etc/gshadow</filename> "
+"(rispettivamente <filename>/etc/group</filename> per i controlli in "
+"<filename>gshadow</filename>)"
+
+# type: Plain text
+#: grpck.8.xml:125(para)
+msgid ""
+"The checks for correct number of fields and unique group name are fatal. If "
+"an entry has the wrong number of fields, the user will be prompted to delete "
+"the entire line. If the user does not answer affirmatively, all further "
+"checks are bypassed. An entry with a duplicated group name is prompted for "
+"deletion, but the remaining checks will still be made. All other errors are "
+"warnings and the user is encouraged to run the <command>groupmod</command> "
+"command to correct the error."
+msgstr ""
+"Gli errori nelle verifiche sul corretto numero di campi e sull'univocità del "
+"nome del gruppo sono irrimediabili. Se una voce ha un numero errato di "
+"campi, all'utente viene chiesto di cancellare l'intera riga; se l'utente non "
+"risponde affermativamente, vengono omessi tutti gli ulteriori controlli. "
+"Viene richiesta la cancellazione anche per le voci aventi il nome del gruppo "
+"duplicato, ma i rimanenti controlli vengono ugualmente effettuati. Tutti gli "
+"altri errori non sono gravi e l'utente è invitato a eseguire il comando "
+"<command>groupmod</command> per correggerli."
+
+# type: Plain text
+#: grpck.8.xml:136(para)
+msgid ""
+"The commands which operate on the <filename>/etc/group</filename><phrase "
+"condition=\"no_gshadow\">file</phrase><phrase condition=\"gshadow\">and "
+"<filename>/etc/gshadow</filename> files</phrase> are not able to alter "
+"corrupted or duplicated entries. <command>grpck</command> should be used in "
+"those circumstances to remove the offending entries."
+msgstr ""
+"I comandi che operano <phrase condition=\"no_gshadow\">sul file <filename>/"
+"etc/group</filename></phrase><phrase condition=\"gshadow\">sui file "
+"<filename>/etc/group</filename> e <filename>/etc/gshadow</filename></phrase> "
+"non sono in grado di modificare voci corrotte o duplicate; in tali "
+"circostanze va usato <command>grpck</command> per rimuovere le voci "
+"scorrette."
+
+# type: Plain text
+#: grpck.8.xml:152(para)
+msgid "The options which apply to the <command>grpck</command> command are:"
+msgstr "Il comando <command>grpck</command> accetta le seguenti opzioni:"
+
+#: grpck.8.xml:165(para)
+msgid ""
+"Execute the <command>grpck</command> command in read-only mode. This causes "
+"all questions regarding changes to be answered <emphasis>no</emphasis> "
+"without user intervention."
+msgstr ""
+"Esegue il comando <command>grpck</command> in sola lettura. Questo implica "
+"che sia risposto <emphasis>no</emphasis> automaticamente a tutte le domande "
+"relative alle modifiche."
+
+#: grpck.8.xml:187(para)
+msgid ""
+"Sort entries in <filename>/etc/group</filename><phrase condition=\"gshadow"
+"\">and <filename>/etc/gshadow</filename></phrase> by GID."
+msgstr ""
+"Ordina le voci in <filename>/etc/group</filename> <phrase condition=\"gshadow"
+"\">e <filename>/etc/gshadow</filename> </phrase>per GID."
+
+#: grpck.8.xml:196(para)
+#, fuzzy
+#| msgid ""
+#| "By default, <command>grpck</command> operates on <filename>/etc/group</"
+#| "filename><phrase condition=\"gshadow\"> and <filename>/etc/gshadow</"
+#| "filename></phrase>. The user may select alternate files with the "
+#| "<emphasis remap=\"I\">group</emphasis><phrase condition=\"no_gshadow"
+#| "\">parameter.</phrase><phrase condition=\"gshadow\">and <emphasis remap="
+#| "\"I\">shadow</emphasis> parameters.</phrase>"
+msgid ""
+"By default, <command>grpck</command> operates on <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</"
+"filename></phrase>. The user may select alternate files with the <emphasis "
+"remap=\"I\">group</emphasis><phrase condition=\"no_gshadow\">parameter.</"
+"phrase><phrase condition=\"gshadow\">and <emphasis remap=\"I\">shadow</"
+"emphasis> parameters.</phrase>"
+msgstr ""
+"Come impostazione predefinita, <command>grpck</command> opera sul file "
+"<filename>/etc/passwd</filename><phrase condition=\"gshadow\"> e su "
+"<filename>/etc/shadow</filename></phrase>. L'utente può selezionare file "
+"alternativi con <phrase condition=\"gshadow\">i parametri <emphasis remap=\"I"
+"\">group</emphasis> e <emphasis remap=\"I\">shadow</emphasis></"
+"phrase><phrase condition=\"no_gshadow\">il parametro <emphasis remap=\"I"
+"\">group</emphasis></phrase>."
+
+# type: Plain text
+#: grpck.8.xml:264(para)
+msgid "one or more bad group entries"
+msgstr "una o più voci di gruppo contengono errori"
+
+# type: Plain text
+#: grpck.8.xml:270(para)
+msgid "can't open group files"
+msgstr "impossibile aprire i file dei gruppi"
+
+# type: Plain text
+#: grpck.8.xml:276(para)
+msgid "can't lock group files"
+msgstr "impossibile fare il lock dei file dei gruppi"
+
+# type: Plain text
+#: grpck.8.xml:282(para)
+msgid "can't update group files"
+msgstr "impossibile aggiornare i file dei gruppi"
+
+# type: TP
+#: grpck.8.xml:246(para)
+msgid ""
+"The <command>grpck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Il comando <command>grpck</command> restituisce i seguenti valori: "
+"<placeholder-1/>"
+
+# type: Plain text
+#: grpck.8.xml:291(para)
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"gshadow\"><citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum>, </citerefentry>, </"
+"phrase><citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"gshadow\"><citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum>, </citerefentry>, </"
+"phrase><citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: groups.1.xml:57(refentrytitle) groups.1.xml:64(refname)
+#: groups.1.xml:70(command)
+msgid "groups"
+msgstr "groups"
+
+# type: Plain text
+#: groups.1.xml:65(refpurpose)
+msgid "display current group names"
+msgstr "mostra i nomi dei gruppi correnti"
+
+#: groups.1.xml:72(replaceable)
+msgid "user"
+msgstr "utente"
+
+# type: Plain text
+#: groups.1.xml:79(para)
+msgid ""
+"The <command>groups</command> command displays the current group names or ID "
+"values. If the value does not have a corresponding entry in <filename>/etc/"
+"group</filename>, the value will be displayed as the numerical group value. "
+"The optional <emphasis remap=\"I\">user</emphasis> parameter will display "
+"the groups for the named <emphasis remap=\"I\">user</emphasis>."
+msgstr ""
+"Per ciascuno dei gruppi correnti, il comando <command>groups</command> "
+"mostra i nomi o i valori ID. Se un valore non ha nessuna voce corrispondente "
+"in <filename>/etc/group</filename>, esso viene mostrato in forma numerica. "
+"Se viene specificato un <emphasis remap=\"I\">utente</emphasis>, vengono "
+"mostrati i gruppi a cui appartiene quel determinato <emphasis remap=\"I"
+"\">utente</emphasis>."
+
+# type: Plain text
+#: groups.1.xml:91(para)
+msgid ""
+"Systems which do not support concurrent group sets will have the information "
+"from <filename>/etc/group</filename> reported. The user must use "
+"<command>newgrp</command> or <command>sg</command> to change his current "
+"real and effective group ID."
+msgstr ""
+"Sui sistemi che non supportano l'appartenenza contemporanea a più gruppi, "
+"vengono riportate le informazioni da <filename>/etc/group</filename>. "
+"L'utente deve usare <command>newgrp</command> o <command>sg</command> per "
+"cambiare gli ID reale ed effettivo del gruppo."
+
+# type: Plain text
+#: groups.1.xml:113(para)
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+
+# type: Plain text
+#: groupmod.8.xml:66(refpurpose)
+msgid "modify a group definition on the system"
+msgstr "modifica la definizione di un gruppo del sistema"
+
+# type: TH
+#: groupmod.8.xml:75(replaceable) groupdel.8.xml:75(replaceable)
+msgid "GROUP"
+msgstr "GRUPPO"
+
+#: groupmod.8.xml:81(para)
+msgid ""
+"The <command>groupmod</command> command modifies the definition of the "
+"specified <replaceable>GROUP</replaceable> by modifying the appropriate "
+"entry in the group database."
+msgstr ""
+"Il comando <command>groupmod</command> cambia la definizione del "
+"<replaceable>GRUPPO</replaceable> modificando appropriatamente il database "
+"dei gruppi."
+
+# type: Plain text
+#: groupmod.8.xml:90(para)
+msgid "The options which apply to the <command>groupmod</command> command are:"
+msgstr "Il comando <command>groupmod</command> accetta le seguenti opzioni:"
+
+# type: TP
+#: groupmod.8.xml:96(term) groupadd.8.xml:114(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GID</"
+"replaceable>"
+msgstr ""
+"\"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GID</"
+"replaceable>"
+
+# type: Plain text
+#: groupmod.8.xml:100(para)
+msgid ""
+"The group ID of the given <replaceable>GROUP</replaceable> will be changed "
+"to <replaceable>GID</replaceable>."
+msgstr ""
+"Verrà modificato l'ID del <replaceable>GRUPPO</replaceable> in "
+"<replaceable>GID</replaceable>."
+
+# type: Plain text
+#: groupmod.8.xml:104(para)
+msgid ""
+"The value of <replaceable>GID</replaceable> must be a non-negative decimal "
+"integer. This value must be unique, unless the <option>-o</option> option is "
+"used."
+msgstr ""
+"Il valore <replaceable>GID</replaceable> deve essere un numero intero "
+"decimale non negativo. Deve essere univoco, a meno che non venga usata "
+"l'opzione <option>-o</option>."
+
+#: groupmod.8.xml:110(para)
+msgid ""
+"Users who use the group as primary group will be updated to keep the group "
+"as their primary group."
+msgstr ""
+"Gli utenti che hanno il gruppo come gruppo primario verranno aggiornati per "
+"mantenere tale gruppo come loro gruppo primario."
+
+#: groupmod.8.xml:114(para)
+msgid ""
+"Any files that have the old group ID and must continue to belong to "
+"<replaceable>GROUP</replaceable>, must have their group ID changed manually."
+msgstr ""
+"Tutti i file che hanno il vecchio ID di gruppo e devono continuare ad "
+"appartenere a <replaceable>GRUPPO</replaceable>, devono essere aggiornati "
+"manualmente."
+
+#: groupmod.8.xml:120(para)
+msgid ""
+"No checks will be performed with regard to the <option>GID_MIN</option>, "
+"<option>GID_MAX</option>, <option>SYS_GID_MIN</option>, or "
+"<option>SYS_GID_MAX</option> from <filename>/etc/login.defs</filename>."
+msgstr ""
+"Non verrà effettuato nessun controllo riguardo i limiti <option>GID_MIN</"
+"option>, <option>GID_MAX</option>, <option>SYS_GID_MIN</option> o "
+"<option>SYS_GID_MAX</option> definiti in <filename>/etc/login.defs</"
+"filename>."
+
+# type: TP
+#: groupmod.8.xml:135(term)
+msgid ""
+"<option>-n</option>, <option>--new-name</option>&nbsp;"
+"<replaceable>NEW_GROUP</replaceable>"
+msgstr ""
+"<option>-n</option>, <option>--new-name</option>&nbsp;"
+"<replaceable>NUOVO_GRUPPO</replaceable>"
+
+# type: Plain text
+#: groupmod.8.xml:139(para)
+msgid ""
+"The name of the group will be changed from <replaceable>GROUP</replaceable> "
+"to <replaceable>NEW_GROUP</replaceable> name."
+msgstr ""
+"Il nome del gruppo verrà modificato da <replaceable>GRUPPO</replaceable> a "
+"<replaceable>NUOVO_GRUPPO</replaceable>."
+
+#: groupmod.8.xml:150(para)
+msgid ""
+"When used with the <option>-g</option> option, allow to change the group "
+"<replaceable>GID</replaceable> to a non-unique value."
+msgstr ""
+"Quando è usato con l'opzione <option>-g</option>, permette di cambiare il "
+"<replaceable>GID</replaceable> in un valore non univoco."
+
+#: groupmod.8.xml:259(para)
+msgid "E_SUCCESS: success"
+msgstr ""
+
+# type: Plain text
+#: groupmod.8.xml:265(para)
+#, fuzzy
+#| msgid "invalid command syntax"
+msgid "E_USAGE: invalid command syntax"
+msgstr "sintassi del comando errata"
+
+#: groupmod.8.xml:271(para)
+#, fuzzy
+#| msgid "invalid argument to option"
+msgid "E_BAD_ARG: invalid argument to option"
+msgstr "argomento non valido per l'opzione"
+
+# type: Plain text
+#: groupmod.8.xml:277(para)
+#, fuzzy
+#| msgid "specified group doesn't exist"
+msgid "E_GID_IN_USE: specified group doesn't exist"
+msgstr "il gruppo specificato non esiste"
+
+# type: Plain text
+#: groupmod.8.xml:283(para)
+#, fuzzy
+#| msgid "specified group doesn't exist"
+msgid "E_NOTFOUND: specified group doesn't exist"
+msgstr "il gruppo specificato non esiste"
+
+#: groupmod.8.xml:289(para)
+#, fuzzy
+#| msgid "group name already in use"
+msgid "E_NAME_IN_USE: group name already in use"
+msgstr "nome di gruppo già in uso"
+
+# type: Plain text
+#: groupmod.8.xml:295(para)
+#, fuzzy
+#| msgid "can't update group file"
+msgid "E_GRP_UPDATE: can't update group file"
+msgstr "non è possibile aggiornare il file group"
+
+# type: IP
+#: groupmod.8.xml:299(replaceable)
+#, fuzzy
+#| msgid "1"
+msgid "11"
+msgstr "1"
+
+#: groupmod.8.xml:301(para)
+msgid "E_CLEANUP_SERVICE: can't setup cleanup service"
+msgstr ""
+
+#: groupmod.8.xml:307(para)
+msgid "E_PAM_USERNAME: can't determine your username for use with pam"
+msgstr ""
+
+# type: IP
+#: groupmod.8.xml:311(replaceable)
+msgid "13"
+msgstr "13"
+
+#: groupmod.8.xml:313(para)
+msgid ""
+"E_PAM_ERROR: pam returned an error, see syslog facility id groupmod for the "
+"PAM error message"
+msgstr ""
+
+# type: TP
+#: groupmod.8.xml:253(para)
+msgid ""
+"The <command>groupmod</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr "Il comando <command>groupmod</command> esce con i seguenti valori:"
+
+# type: Plain text
+#: groupmod.8.xml:322(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: groupmems.8.xml:42(firstname)
+msgid "George"
+msgstr ""
+
+#: groupmems.8.xml:43(surname)
+msgid "Kraft"
+msgstr ""
+
+#: groupmems.8.xml:44(lineage)
+msgid "IV"
+msgstr ""
+
+#: groupmems.8.xml:45(contrib)
+msgid "Creation, 2000"
+msgstr ""
+
+# type: Plain text
+#: groupmems.8.xml:69(refpurpose)
+msgid "administer members of a user's primary group"
+msgstr "membri amministratori del gruppo primario dell'utente"
+
+#: groupmems.8.xml:76(replaceable) groupmems.8.xml:77(replaceable)
+msgid "user_name"
+msgstr "user_name"
+
+#: groupmems.8.xml:76(arg)
+msgid "-a <placeholder-1/>"
+msgstr "-a <placeholder-1/>"
+
+#: groupmems.8.xml:77(arg)
+msgid "-d <placeholder-1/>"
+msgstr "-d <placeholder-1/>"
+
+#: groupmems.8.xml:78(replaceable)
+msgid "group_name"
+msgstr "group_name"
+
+#: groupmems.8.xml:78(arg)
+msgid "-g <placeholder-1/>"
+msgstr "-g <placeholder-1/>"
+
+#: groupmems.8.xml:79(arg)
+msgid "-l"
+msgstr "-l"
+
+#: groupmems.8.xml:86(para)
+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 ""
+"Il comando <command>groupmems</command> permette a utenti di amministrare la "
+"lista di membri del proprio gruppo senza richiedere i privilegi di "
+"amministratore. Il comando <command>groupmems</command> è per sistemi che "
+"configurano gli utenti perché siano in un gruppo primario con lo stesso nome "
+"dell'utente (esempio: guest/guest)."
+
+#: groupmems.8.xml:94(para)
+msgid ""
+"Only the superuser, as administrator, can use <command>groupmems</command> "
+"to alter the memberships of other groups."
+msgstr ""
+"Solo il super utente, come amministratore, può utilizzare "
+"<command>groupmems</command> per modificare l'elenco di membri di altri "
+"gruppi."
+
+# type: Plain text
+#: groupmems.8.xml:101(para)
+msgid ""
+"The options which apply to the <command>groupmems</command> command are:"
+msgstr "Il comando <command>groupmems</command> accetta le seguenti opzioni:"
+
+# type: IP
+#: groupmems.8.xml:107(term)
+msgid ""
+"<option>-a</option>, <option>--add</option>&nbsp;<replaceable>user_name</"
+"replaceable>"
+msgstr ""
+"<option>-a</option>, <option>--add</option>&nbsp;<replaceable>user_name</"
+"replaceable>"
+
+#: groupmems.8.xml:109(para)
+#, fuzzy
+#| msgid "Add an user to the group membership list."
+msgid "Add a user to the group membership list."
+msgstr "Aggiunge un utente all'elenco di membri del gruppo."
+
+#: groupmems.8.xml:110(para) groupmems.8.xml:126(para)
+#: groupmems.8.xml:157(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, and the group has no "
+"entry in the <filename>/etc/gshadow</filename> file, a new entry will be "
+"created."
+msgstr ""
+"Se esiste il file <filename>/etc/gshadow</filename> e il gruppo non vi è "
+"presente, viene aggiunto."
+
+# type: IP
+#: groupmems.8.xml:118(term)
+msgid ""
+"<option>-d</option>, <option>--delete</option>&nbsp;<replaceable>user_name</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--delete</option>&nbsp;<replaceable>user_name</"
+"replaceable>"
+
+#: groupmems.8.xml:120(para)
+msgid "Delete a user from the group membership list."
+msgstr "Cancella un utente dall'elenco degli utenti del gruppo."
+
+#: groupmems.8.xml:121(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, the user will be "
+"removed from the list of members and administrators of the group."
+msgstr ""
+"Se esiste il file <filename>/etc/gshadow</filename>, l'utente verrà rimosso "
+"dalle liste di utenti e amministratori del gruppo."
+
+# type: IP
+#: groupmems.8.xml:134(term)
+msgid ""
+"<option>-g</option>, <option>--group</option>&nbsp;<replaceable>group_name</"
+"replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--group</option>&nbsp;<replaceable>group_name</"
+"replaceable>"
+
+#: groupmems.8.xml:136(para)
+msgid "The superuser can specify which group membership list to modify."
+msgstr ""
+"Il super utente può specificare quale elenco di membri del gruppo modificare."
+
+# type: IP
+#: groupmems.8.xml:148(term) chage.1.xml:160(term)
+msgid "<option>-l</option>, <option>--list</option>"
+msgstr "<option>-l</option>, <option>--list</option>"
+
+#: groupmems.8.xml:150(para)
+msgid "List the group membership list."
+msgstr "Elenca tutti i membri del gruppo."
+
+# type: TP
+#: groupmems.8.xml:154(term)
+msgid "<option>-p</option>, <option>--purge</option>"
+msgstr "<option>-p</option>, <option>--purge</option>"
+
+#: groupmems.8.xml:156(para)
+msgid "Purge all users from the group membership list."
+msgstr "Elimina tutti gli utenti dalla lista dei membri del gruppo."
+
+#: groupmems.8.xml:180(title)
+msgid "SETUP"
+msgstr "CONFIGURAZIONE"
+
+#: groupmems.8.xml:181(para)
+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 ""
+"L'eseguibile <command>groupmems</command> dovrebbe avere i permessi "
+"<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 "
+"<command>groupmems</command>."
+
+#: groupmems.8.xml:190(programlisting)
+#, no-wrap
+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 ""
+"\n"
+" $ groupadd -r groups\n"
+" $ chmod 2710 groupmems\n"
+" $ chown root.groups groupmems\n"
+" $ groupmems -g groups -a gk4\n"
+" "
+
+# type: Plain text
+#: groupmems.8.xml:222(para)
+msgid "secure group account information"
+msgstr "informazioni sicure sugli account di gruppo"
+
+# type: Plain text
+#: groupmems.8.xml:230(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+# type: Plain text
+#: groupdel.8.xml:66(refpurpose)
+msgid "delete a group"
+msgstr "rimuove un gruppo"
+
+# type: Plain text
+#: groupdel.8.xml:81(para)
+msgid ""
+"The <command>groupdel</command> command modifies the system account files, "
+"deleting all entries that refer to <replaceable>GROUP</replaceable>. The "
+"named group must exist."
+msgstr ""
+"Il comando <command>groupdel</command> modifica i file di account di sistema "
+"rimuovendo tutte le voci che si riferiscono a <replaceable>GRUPPO</"
+"replaceable>. Il gruppo indicato deve esistere."
+
+# type: Plain text
+#: groupdel.8.xml:89(para)
+msgid "The options which apply to the <command>groupdel</command> command are:"
+msgstr "Il comando <command>groupdel</command> accetta le seguenti opzioni:"
+
+# type: Plain text
+#: groupdel.8.xml:134(para)
+msgid ""
+"You may not remove the primary group of any existing user. You must remove "
+"the user before you remove the group."
+msgstr ""
+"Non si può rimuovere un gruppo che sia gruppo primario di un utente. Occorre "
+"rimuovere l'utente prima di rimuovere il gruppo."
+
+# type: Plain text
+#: groupdel.8.xml:138(para)
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this group."
+msgstr ""
+"Occorre controllare manualmente tutti i file system per assicurarsi che non "
+"rimanga alcun file avente questo ID di gruppo."
+
+# type: Plain text
+#: groupdel.8.xml:200(para)
+msgid "can't remove user's primary group"
+msgstr "operazione impossibile perché il gruppo è primario per un utente"
+
+# type: TP
+#: groupdel.8.xml:176(para)
+msgid ""
+"The <command>groupdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Il comando <command>groupdel</command> restituisce i seguenti valori: "
+"<placeholder-1/>"
+
+# type: Plain text
+#: groupdel.8.xml:215(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+# type: Plain text
+#: groupadd.8.xml:68(refpurpose)
+msgid "create a new group"
+msgstr "crea un nuovo gruppo"
+
+# type: Plain text
+#: groupadd.8.xml:85(para)
+msgid ""
+"The <command>groupadd</command> command creates a new group account using "
+"the values specified on the command line plus the default values from the "
+"system. The new group will be entered into the system files as needed."
+msgstr ""
+"Il comando <command>groupadd</command> crea un nuovo account di gruppo "
+"usando i valori specificati sulla riga di comando ed i valori predefiniti "
+"dal sistema. Il nuovo gruppo verrà aggiunto ai file di sistema secondo "
+"necessità."
+
+# type: Plain text
+#: groupadd.8.xml:94(para)
+msgid "The options which apply to the <command>groupadd</command> command are:"
+msgstr "Il comando <command>groupadd</command> accetta le seguenti opzioni:"
+
+#: groupadd.8.xml:104(para)
+msgid ""
+"This option causes the command to simply exit with success status if the "
+"specified group already exists. When used with <option>-g</option>, and the "
+"specified GID already exists, another (unique) GID is chosen (i.e. <option>-"
+"g</option> is turned off)."
+msgstr ""
+"Questa opzione fa sì che il comando esca con esito positivo nel caso che il "
+"gruppo esista già. Quando utilizzato con l'opzione <option>-g</option>, e il "
+"GID specificato esiste, un altro GID (univoco) viene scelto (cioè <option>-"
+"g</option> viene ignorato)."
+
+# type: Plain text
+#: groupadd.8.xml:118(para)
+msgid ""
+"The numerical value of the group's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than or equal to "
+"<option>GID_MIN</option> and greater than every other group."
+msgstr ""
+"Il valore numerico dell'identificatore (ID) del gruppo. Questo valore deve "
+"essere univoco, a meno che non venga usata l'opzione <option>-o</option>. Il "
+"valore deve essere non-negativo. La scelta predefinita è quella di usare il "
+"minimo valore di ID maggiore o eguale a <option>GID_MIN</option> e superiore "
+"a qualunque altro gruppo."
+
+# type: Plain text
+#: groupadd.8.xml:124(para)
+msgid ""
+"See also the <option>-r</option> option and the <option>GID_MAX</option> "
+"description."
+msgstr ""
+"Vedere anche l'opzione <option>-r</option> e la descrizione di "
+"<option>GID_MAX</option>."
+
+#: groupadd.8.xml:141(para)
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (GID_MIN, GID_MAX "
+"and others). Multiple <option>-K</option> options can be specified."
+msgstr ""
+"Ha la precedenza sui valori predefiniti (GID_MIN, GID_MAX e altri) definiti "
+"in <filename>/etc/login.defs</filename>. Più opzioni <option>-K</option> "
+"possono essere specificate."
+
+# type: IP
+#: groupadd.8.xml:146(para)
+msgid ""
+"Example: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+"<replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+"Esempio: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+"<replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+
+#: groupadd.8.xml:150(para)
+msgid ""
+"Note: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+"replaceable>=<replaceable>499</replaceable> doesn't work yet."
+msgstr ""
+"Nota: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+"replaceable>=<replaceable>499</replaceable> non funziona ancora."
+
+#: groupadd.8.xml:161(para)
+msgid "This option permits to add a group with a non-unique GID."
+msgstr ""
+"Questa opzione permette di aggiungere un gruppo con un GID non univoco."
+
+# type: Plain text
+#: groupadd.8.xml:192(para)
+msgid "Create a system group."
+msgstr "Crea un gruppo di sistema."
+
+#: groupadd.8.xml:195(para)
+msgid ""
+"The numeric identifiers of new system groups are chosen in the "
+"<option>SYS_GID_MIN</option>-<option>SYS_GID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>GID_MIN</option>-"
+"<option>GID_MAX</option>."
+msgstr ""
+"L'identificativo numerico del nuovo gruppo di sistema è scelto "
+"nell'intervallo <option>SYS_GID_MIN</option>-<option>SYS_GID_MAX</option> "
+"definito in <filename>login.defs</filename>, al posto di <option>GID_MIN</"
+"option>-<option>GID_MAX</option>."
+
+#: groupadd.8.xml:275(para)
+msgid ""
+"Groupnames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+"I nomi di gruppo devono iniziare con una lettera minuscola o l'underscore, "
+"seguiti da lettere minuscole, cifre numeriche, underscore o trattini. "
+"Possono terminare con il simbolo del dollaro. In termini di espressioni "
+"regolari: [a-z_][a-z0-9_-]*[$]?"
+
+#: groupadd.8.xml:281(para)
+msgid "Groupnames may only be up to &GROUP_NAME_MAX_LENGTH; characters long."
+msgstr ""
+"I nomi di gruppo possono essere al massimo di &GROUP_NAME_MAX_LENGTH; "
+"caratteri."
+
+# type: Plain text
+#: groupadd.8.xml:284(para)
+msgid ""
+"You may not add a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+"Non è possibile aggiungere un gruppo NIS o LDAP. Questo deve essere fatto "
+"sul server corrispondente."
+
+#: groupadd.8.xml:288(para)
+msgid ""
+"If the groupname already exists in an external group database such as NIS or "
+"LDAP, <command>groupadd</command> will deny the group creation request."
+msgstr ""
+"Se il nome di gruppo esiste già in un database esterno come quello NIS o "
+"LDAP, <command>groupadd</command> negherà la richiesta di creazione del "
+"gruppo."
+
+#: groupadd.8.xml:321(para)
+msgid "GID not unique (when <option>-o</option> not used)"
+msgstr "GID non univoco (quando <option>-o</option> non è usata)"
+
+#: groupadd.8.xml:327(para)
+msgid "group name not unique"
+msgstr "nome di gruppo non univoco"
+
+# type: TP
+#: groupadd.8.xml:297(para)
+msgid ""
+"The <command>groupadd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr "Il comando <command>groupadd</command> restituisce i seguenti valori:"
+
+# type: Plain text
+#: groupadd.8.xml:342(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: gpasswd.1.xml:44(firstname)
+msgid "Rafal"
+msgstr ""
+
+#: gpasswd.1.xml:45(surname)
+msgid "Maszkowski"
+msgstr ""
+
+#: gpasswd.1.xml:71(phrase)
+msgid "administer <placeholder-1/>"
+msgstr "amministra <placeholder-1/>"
+
+#: gpasswd.1.xml:74(phrase)
+msgid "administer <placeholder-1/> and <placeholder-2/>"
+msgstr "amministra <placeholder-1/> e <placeholder-2/>"
+
+#: gpasswd.1.xml:85(replaceable) expiry.1.xml:76(replaceable)
+msgid "option"
+msgstr "opzione"
+
+#: gpasswd.1.xml:95(para)
+msgid ""
+"The <command>gpasswd</command> command is used to administer <filename>/etc/"
+"group</filename><phrase condition=\"gshadow\">, and <filename>/etc/gshadow</"
+"filename></phrase>. Every group can have <phrase condition=\"gshadow"
+"\">administrators,</phrase> members and a password."
+msgstr ""
+"Il comando <command>gpasswd</command> è utilizzato per amministrare "
+"<filename>/etc/group</filename><phrase condition=\"gshadow\"> e <filename>/"
+"etc/gshadow</filename></phrase>. Ogni gruppo può avere<phrase condition="
+"\"gshadow\"> amministratori,</phrase> membri e una password."
+
+# type: Plain text
+#: gpasswd.1.xml:103(para)
+msgid ""
+"System administrators can use the <option>-A</option> option to define group "
+"administrator(s) and the <option>-M</option> option to define members. They "
+"have all rights of group administrators and members."
+msgstr ""
+"Gli amministratori di sistema possono usare l'opzione <option>-A</option> "
+"per definire l'amministratore/gli amministratori di gruppo e l'opzione "
+"<option>-M</option> per definire i membri ed hanno tutti i permessi degli "
+"amministratori di gruppo e dei membri."
+
+#: gpasswd.1.xml:108(para)
+msgid ""
+"<command>gpasswd</command> called by <phrase condition=\"gshadow\">a group "
+"administrator</phrase><phrase condition=\"no_gshadow\">a system "
+"administrator</phrase> with a group name only prompts for the new password "
+"of the <replaceable>group</replaceable>."
+msgstr ""
+"<command>gpasswd</command> richiamato da <phrase condition=\"gshadow\">un "
+"amminstatore di gruppo </phrase><phrase condition=\"no_gshadow\">un "
+"amministratore di sistema</phrase> con un nome di gruppo richiede solo la "
+"nuova password del <replaceable>gruppo</replaceable>."
+
+# type: Plain text
+#: gpasswd.1.xml:115(para)
+msgid ""
+"If a password is set the members can still use "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> without a password, and non-members must supply the password."
+msgstr ""
+"Se la password è impostata i membri possono ancora usare "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> senza la password, i non-membri devono fornire la password."
+
+# type: SS
+#: gpasswd.1.xml:123(title)
+msgid "Notes about group passwords"
+msgstr "Note sulle password di gruppo"
+
+# type: Plain text
+#: gpasswd.1.xml:124(para)
+msgid ""
+"Group passwords are an inherent security problem since more than one person "
+"is permitted to know the password. However, groups are a useful tool for "
+"permitting co-operation between different users."
+msgstr ""
+"Le password di gruppo rappresentano un intrinseco problema di sicurezza "
+"perché più di una persona deve conoscerle. Ciononostante i gruppi sono uno "
+"strumento molto utile per la cooperazione tra vari utenti."
+
+# type: Plain text
+#: gpasswd.1.xml:135(para)
+msgid ""
+"Except for the <option>-A</option> and <option>-M</option> options, the "
+"options cannot be combined."
+msgstr ""
+"Ad eccezione di <option>-A</option> e <option>-M</option>, le altre opzioni "
+"non possono essere combinate."
+
+#: gpasswd.1.xml:139(para)
+msgid "The options cannot be combined."
+msgstr "Le opzioni non possono essere combinate."
+
+# type: Plain text
+#: gpasswd.1.xml:142(para)
+msgid "The options which apply to the <command>gpasswd</command> command are:"
+msgstr "Il comando <command>gpasswd</command> accetta le seguenti opzioni:"
+
+# type: IP
+#: gpasswd.1.xml:147(term)
+msgid ""
+"<option>-a</option>, <option>--add</option>&nbsp;<replaceable>user</"
+"replaceable>"
+msgstr ""
+"<option>-a</option>, <option>--add</option>&nbsp;<replaceable>utente</"
+"replaceable>"
+
+# type: Plain text
+#: gpasswd.1.xml:151(para)
+msgid ""
+"Add the <replaceable>user</replaceable> to the named <replaceable>group</"
+"replaceable>."
+msgstr ""
+"Aggiunge <replaceable>utente</replaceable> al <replaceable>gruppo</"
+"replaceable> indicato."
+
+# type: IP
+#: gpasswd.1.xml:160(term)
+msgid ""
+"<option>-d</option>, <option>--delete</option>&nbsp;<replaceable>user</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--delete</option>&nbsp;<replaceable>utente</"
+"replaceable>"
+
+# type: Plain text
+#: gpasswd.1.xml:164(para)
+msgid ""
+"Remove the <replaceable>user</replaceable> from the named "
+"<replaceable>group</replaceable>."
+msgstr ""
+"Rimuove <replaceable>utente</replaceable> dal <replaceable>gruppo</"
+"replaceable> indicato."
+
+# type: IP
+#: gpasswd.1.xml:181(term)
+msgid ""
+"<option>-Q</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-Q</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</"
+"replaceable>"
+
+# type: IP
+#: gpasswd.1.xml:195(term)
+msgid "<option>-r</option>, <option>--remove-password</option>"
+msgstr "<option>-r</option>, <option>--remove-password</option>"
+
+#: gpasswd.1.xml:199(para)
+msgid ""
+"Remove the password from the named <replaceable>group</replaceable>. The "
+"group password will be empty. Only group members will be allowed to use "
+"<command>newgrp</command> to join the named <replaceable>group</replaceable>."
+msgstr ""
+"Rimuove la password dal <replaceable>gruppo</replaceable> indicato. La "
+"password del gruppo sarà vuota. Solo ai membri del gruppo sarà ammesso "
+"l'accesso tramite <command>newgrp</command> al <replaceable>gruppo</"
+"replaceable> indicato."
+
+# type: IP
+#: gpasswd.1.xml:211(term)
+msgid "<option>-R</option>, <option>--restrict</option>"
+msgstr "<option>-R</option>, <option>--restrict</option>"
+
+#: gpasswd.1.xml:215(para)
+msgid ""
+"Restrict the access to the named <replaceable>group</replaceable>. The group "
+"password is set to \"!\". Only group members with a password will be allowed "
+"to use <command>newgrp</command> to join the named <replaceable>group</"
+"replaceable>."
+msgstr ""
+"Limita l'accesso al <replaceable>gruppo</replaceable> indicato. La password "
+"del gruppo è cambiata in «!». Solo ai membri del gruppo con una password "
+"verrà permesso di usare <command>newgrp</command> per accedere al "
+"<replaceable>gruppo</replaceable> indicato."
+
+# type: IP
+#: gpasswd.1.xml:227(term)
+msgid ""
+"<option>-A</option>, <option>--administrators</option>&nbsp;"
+"<replaceable>user</replaceable>,..."
+msgstr ""
+"<option>-A</option>, <option>--administrators</option>&nbsp;"
+"<replaceable>utente</replaceable>,..."
+
+# type: Plain text
+#: gpasswd.1.xml:231(para)
+msgid "Set the list of administrative users."
+msgstr "Imposta l'elenco degli utenti amministratori."
+
+# type: IP
+#: gpasswd.1.xml:239(term)
+msgid ""
+"<option>-M</option>, <option>--members</option>&nbsp;<replaceable>user</"
+"replaceable>,..."
+msgstr ""
+"<option>-M</option>, <option>--members</option>&nbsp;<replaceable>utente</"
+"replaceable>,..."
+
+#: gpasswd.1.xml:243(para)
+msgid "Set the list of group members."
+msgstr "Definisce l'elenco dei membri del gruppo."
+
+#: gpasswd.1.xml:253(para)
+msgid ""
+"This tool only operates on the <filename>/etc/group</filename><phrase "
+"condition=\"gshadow\"> and <filename>/etc/gshadow</filename> files.</"
+"phrase><phrase condition=\"no_gshadow\">file.</phrase> Thus you cannot "
+"change any NIS or LDAP group. This must be performed on the corresponding "
+"server."
+msgstr ""
+"Questo strumento opera solo sul file <filename>/etc/group</filename><phrase "
+"condition=\"gshadow\"> e sul file <filename>/etc/gshadow</filename></"
+"phrase>. Quindi non si possono modificare gruppi NIS o LDAP. Questo dovrebbe "
+"essere fatto sul corrispondente server."
+
+# type: Plain text
+#: gpasswd.1.xml:298(para)
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition="
+"\"gshadow\">, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition="
+"\"gshadow\">, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+
+#: faillog.8.xml:57(refentrytitle) faillog.8.xml:64(refname)
+#: faillog.8.xml:70(command) faillog.5.xml:57(refentrytitle)
+#: faillog.5.xml:64(refname) faillog.5.xml:111(refentrytitle)
+msgid "faillog"
+msgstr "faillog"
+
+# type: Plain text
+#: faillog.8.xml:65(refpurpose)
+msgid "display faillog records or set login failure limits"
+msgstr "mostra le registrazioni e imposta i limiti degli accessi falliti"
+
+# type: Plain text
+#: faillog.8.xml:79(para)
+msgid ""
+"<command>faillog</command> displays the contents of the failure log database "
+"(<filename>/var/log/faillog</filename>). It can also set the failure "
+"counters and limits. When <command>faillog</command> is run without "
+"arguments, it only displays the faillog records of the users who had a login "
+"failure."
+msgstr ""
+"<command>faillog</command> mostra il contentuto del database degli accessi "
+"falliti (<filename>/var/log/faillog</filename>); può anche essere usato per "
+"impostare i conteggi e i limiti dei tentativi falliti. Eseguire "
+"<command>faillog</command> senza argomenti per ottenere un elenco degli "
+"utenti che hanno fallito almeno un tentativo di accesso."
+
+# type: Plain text
+#: faillog.8.xml:90(para)
+msgid "The options which apply to the <command>faillog</command> command are:"
+msgstr "Il comando <command>faillog</command> accetta le seguenti opzioni:"
+
+#: faillog.8.xml:98(para)
+msgid ""
+"Display (or act on) faillog records for all users having an entry in the "
+"<filename>faillog</filename> database."
+msgstr ""
+"Mostra (o opera su) registrazioni faillog per tutti gli utenti presenti nel "
+"database <filename>faillog</filename>."
+
+# type: IP
+#: faillog.8.xml:102(para)
+msgid ""
+"The range of users can be restricted with the <option>-u</option> option."
+msgstr ""
+"L'intervallo di utenti può essere ristretto con l'opzione <option>-u</"
+"option>."
+
+#: faillog.8.xml:106(para)
+msgid ""
+"In display mode, this is still restricted to existing users but forces the "
+"display of the faillog entries even if they are empty."
+msgstr ""
+"Nella modalità di visualizzazione, questo è già ristretto ai soli utenti "
+"esistenti, ma vengono mostrate anche eventuali registrazioni vuote."
+
+#: faillog.8.xml:111(para)
+msgid ""
+"With the <option>-l</option>, <option>-m</option>, <option>-r</option>, "
+"<option>-t</option> options, the users' records are changed, even if the "
+"user does not exist on the system. This is useful to reset records of users "
+"that have been deleted or to set a policy in advance for a range of users."
+msgstr ""
+"Con le opzioni <option>-l</option>, <option>-m</option>, <option>-r</option> "
+"e <option>-t</option>, le registrazioni degli utenti sono modificate anche "
+"se l'utente non esiste nel sistema. Questo è utile quando si vogliono "
+"azzerare le registrazioni degli utenti cancellati, o per definire in "
+"anticipo delle norme per intervalli di utenti."
+
+# type: IP
+#: faillog.8.xml:128(term)
+msgid ""
+"<option>-l</option>, <option>--lock-secs</option>&nbsp;<replaceable>SEC</"
+"replaceable>"
+msgstr ""
+"<option>-l</option>, <option>--lock-secs</option>&nbsp;<replaceable>SEC</"
+"replaceable>"
+
+# type: Plain text
+#: faillog.8.xml:132(para)
+msgid ""
+"Lock account for <replaceable>SEC</replaceable> seconds after failed login."
+msgstr ""
+"Blocca l'account per <replaceable>SEC</replaceable> secondi dopo un "
+"tentativo di accesso fallito."
+
+#: faillog.8.xml:136(para) faillog.8.xml:161(para) faillog.8.xml:173(para)
+msgid ""
+"Write access to <filename>/var/log/faillog</filename> is required for this "
+"option."
+msgstr ""
+"Per questa opzione è necessario l'accesso in scrittura a <filename>/var/log/"
+"faillog</filename>."
+
+# type: IP
+#: faillog.8.xml:143(term)
+msgid ""
+"<option>-m</option>, <option>--maximum</option>&nbsp;<replaceable>MAX</"
+"replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--maximum</option>&nbsp;<replaceable>MAX</"
+"replaceable>"
+
+# type: Plain text
+#: faillog.8.xml:147(para)
+msgid ""
+"Set the maximum number of login failures after the account is disabled to "
+"<replaceable>MAX</replaceable>."
+msgstr ""
+"Imposta a <replaceable>MAX</replaceable> il massimo numero di accessi "
+"falliti prima che l'account sia disabilitato."
+
+#: faillog.8.xml:151(para)
+msgid ""
+"Selecting a <replaceable>MAX</replaceable> value of 0 has the effect of not "
+"placing a limit on the number of failed logins."
+msgstr ""
+"Impostare <replaceable>MAX</replaceable> al valore 0 ha l'effetto di non "
+"porre nessun limite al numero di accessi falliti."
+
+#: faillog.8.xml:156(para)
+msgid ""
+"The maximum failure count should always be 0 for <emphasis>root</emphasis> "
+"to prevent a denial of services attack against the system."
+msgstr ""
+"Il numero massimo di fallimenti dovrebbe sempre essere 0 per <emphasis>root</"
+"emphasis> in modo da evitare attacchi al sistema di tipo «denial of service»."
+
+# type: IP
+#: faillog.8.xml:168(term)
+msgid "<option>-r</option>, <option>--reset</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: faillog.8.xml:170(para)
+msgid "Reset the counters of login failures."
+msgstr "Azzera i contatori degli accessi falliti."
+
+# type: Plain text
+#: faillog.8.xml:195(para)
+msgid ""
+"Display faillog records more recent than <replaceable>DAYS</replaceable>."
+msgstr ""
+"Visualizza le registrazioni faillog più recenti di <replaceable>GIORNI</"
+"replaceable> giorni."
+
+# type: Plain text
+#: faillog.8.xml:206(para)
+msgid ""
+"Display faillog record or maintains failure counters and limits (if used "
+"with <option>-l</option>, <option>-m</option> or <option>-r</option> "
+"options) only for the specified user(s)."
+msgstr ""
+"Mostra la registrazione degli accessi falliti o, se sono state usate le "
+"opzioni <option>-r</option>, <option>-m</option> o <option>-l</option>, "
+"imposta contatori e limiti solo gli utenti specificati."
+
+# type: Plain text
+#: faillog.8.xml:224(para)
+msgid ""
+"When none of the <option>-l</option>, <option>-m</option>, or <option>-r</"
+"option> options are used, <command>faillog</command> displays the faillog "
+"record of the specified user(s)."
+msgstr ""
+"Quando nessuna tra le opzioni <option>-l</option>, <option>-m</option> o "
+"<option>-r</option> è utilizzata, <command>faillog</command> mostra le voci "
+"dei fallimenti degli utenti specificati."
+
+# type: Plain text
+#: faillog.8.xml:233(para)
+msgid ""
+"<command>faillog</command> only prints out users with no successful login "
+"since the last failure. To print out a user who has had a successful login "
+"since their last failure, you must explicitly request the user with the "
+"<option>-u</option> flag, or print out all users with the <option>-a</"
+"option> flag."
+msgstr ""
+"<command>faillog</command> mostra solo gli utenti che non hanno effettuato "
+"nessun accesso corretto dopo l'ultimo tentativo fallito. Un utente che abbia "
+"completato correttamente un accesso dopo l'ultimo tentativo fallito è "
+"mostrato solo se viene richiesto esplicitamente con l'opzione <option>-u</"
+"option> o se viene richiesto di mostrare tutti gli utenti con l'opzione "
+"<option>-a</option>."
+
+#: faillog.8.xml:246(filename) faillog.5.xml:99(filename)
+msgid "/var/log/faillog"
+msgstr "/var/log/faillog"
+
+# type: Plain text
+#: faillog.8.xml:248(para) faillog.5.xml:101(para)
+msgid "Failure logging file."
+msgstr "File per tracciare gli accessi falliti."
+
+# type: Plain text
+#: faillog.8.xml:256(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>faillog</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>faillog</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+# type: Plain text
+#: faillog.5.xml:65(refpurpose)
+msgid "login failure logging file"
+msgstr "file di log degli accessi falliti"
+
+#: faillog.5.xml:70(para)
+msgid ""
+"<filename>/var/log/faillog</filename> maintains a count of login failures "
+"and the limits for each account."
+msgstr ""
+"<filename>/var/log/faillog</filename> mantiene un contatore di accessi "
+"falliti e dei vari limiti per ogni account."
+
+# type: Plain text
+#: faillog.5.xml:74(para)
+msgid ""
+"The file contains fixed length records, indexed by numerical UID. Each "
+"record contains the count of login failures since the last successful login; "
+"the maximum number of failures before the account is disabled; the line on "
+"which the last login failure occurred; the date of the last login failure; "
+"and the duration (in seconds) during which the account will be locked after "
+"a failure."
+msgstr ""
+"Questo file è composto da record di lunghezza fissa, indicizzati dal valore "
+"numerico di UID. Ciascun record contiene il conteggio degli accessi falliti "
+"a partire dall'ultimo login corretto, il numero massimo di tentativi "
+"permessi prima che l'account venga disabilitato, il terminale sul quale "
+"l'ultimo tentativo fallito è avvenuto, la data in cui è avvenuto, e infine "
+"il periodo (in secondi) durante il quale l'account verrà bloccato a seguito "
+"di un fallimento."
+
+# type: Plain text
+#: faillog.5.xml:84(para)
+msgid "The structure of the file is:"
+msgstr "La struttura del file è la seguente:"
+
+# type: Plain text
+#: faillog.5.xml:85(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort fail_cnt;\n"
+"\tshort fail_max;\n"
+"\tchar fail_line[12];\n"
+"\ttime_t fail_time;\n"
+"\tlong fail_locktime;\n"
+"};"
+msgstr ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort fail_cnt;\n"
+"\tshort fail_max;\n"
+"\tchar fail_line[12];\n"
+"\ttime_t fail_time;\n"
+"\tlong fail_locktime;\n"
+"};"
+
+#: expiry.1.xml:45(contrib) chsh.1.xml:44(contrib) chfn.1.xml:44(contrib)
+#: chage.1.xml:42(contrib)
+msgid "Creation, 1990"
+msgstr ""
+
+#: expiry.1.xml:61(refentrytitle) expiry.1.xml:68(refname)
+#: expiry.1.xml:74(command)
+msgid "expiry"
+msgstr "expiry"
+
+# type: Plain text
+#: expiry.1.xml:69(refpurpose)
+msgid "check and enforce password expiration policy"
+msgstr "controlla e fa rispettare la scadenza della password"
+
+# type: Plain text
+#: expiry.1.xml:83(para)
+msgid ""
+"The <command>expiry</command> command checks (<option>-c</option>) the "
+"current password expiration and forces (<option>-f</option>) changes when "
+"required. It is callable as a normal user command."
+msgstr ""
+"<command>expiry</command> controlla (<option>-c</option>) la scadenza della "
+"password in uso e, se necessario, richiede (<option>-f</option>) che venga "
+"cambiata quando necessario. Questo comando può essere eseguito da un utente "
+"qualsiasi."
+
+# type: Plain text
+#: expiry.1.xml:92(para)
+msgid "The options which apply to the <command>expiry</command> command are:"
+msgstr "Il comando <command>expiry</command> accetta le seguenti opzioni:"
+
+# type: IP
+#: expiry.1.xml:97(term)
+msgid "<option>-c</option>, <option>--check</option>"
+msgstr "<option>-c</option>, <option>--check</option>"
+
+# type: Plain text
+#: expiry.1.xml:99(para)
+msgid "Check the password expiration of the current user."
+msgstr "Controlla la scadenza della password dell'utente corrente."
+
+#: expiry.1.xml:105(para)
+msgid "Force a password change if the current user has an expired password."
+msgstr ""
+"Forza un cambio di password se l'utente corrente ha una password scaduta."
+
+# type: Plain text
+#: expiry.1.xml:140(para) chage.1.xml:318(para)
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+# type: Plain text
+#: chsh.1.xml:68(refpurpose)
+msgid "change login shell"
+msgstr "cambia la shell di login"
+
+# type: Plain text
+#: chsh.1.xml:85(para)
+msgid ""
+"The <command>chsh</command> command changes the user login shell. This "
+"determines the name of the user's initial login command. A normal user may "
+"only change the login shell for her own account; the superuser may change "
+"the login shell for any account."
+msgstr ""
+"Il comando <command>chsh</command> cambia la shell di login dell'utente, in "
+"altre parole determina il comando iniziale eseguito quando un utente accede "
+"al sistema. Chiunque può cambiare la propria shell di login, mentre "
+"l'amministratore può cambiare la shell di login per ogni account."
+
+# type: Plain text
+#: chsh.1.xml:96(para)
+msgid "The options which apply to the <command>chsh</command> command are:"
+msgstr "Il comando <command>chsh</command> accetta le seguenti opzioni:"
+
+# type: Plain text
+#: chsh.1.xml:130(para)
+msgid ""
+"If the <option>-s</option> option is not selected, <command>chsh</command> "
+"operates in an interactive fashion, prompting the user with the current "
+"login shell. Enter the new value to change the shell, or leave the line "
+"blank to use the current one. The current shell is displayed between a pair "
+"of <emphasis>[ ]</emphasis> marks."
+msgstr ""
+"Se non viene usata l'opzione <option>-s</option>, <command>chsh</command> "
+"opera in maniera interattiva, mostrando all'utente la shell attuale. "
+"Inserire il nuovo valore oppure lasciare la riga vuota per non modificare il "
+"valore attuale. La shell attuale è mostrata tra parentesi <emphasis>[ ]</"
+"emphasis>."
+
+# type: Plain text
+#: chsh.1.xml:141(para)
+msgid ""
+"The only restriction placed on the login shell is that the command name must "
+"be listed in <filename>/etc/shells</filename>, unless the invoker is the "
+"superuser, and then any value may be added. An account with a restricted "
+"login shell may not change her login shell. For this reason, placing "
+"<filename>/bin/rsh</filename> in <filename>/etc/shells</filename> is "
+"discouraged since accidentally changing to a restricted shell would prevent "
+"the user from ever changing her login shell back to its original value."
+msgstr ""
+"L'unica limitazione sulla scelta della shell di login è che il nome del "
+"comando deve essere presente in <filename>/etc/shells</filename>; fa "
+"eccezione l'amministratore di sistema, che è libero di scegliere qualsiasi "
+"valore. Un account con una shell di login limitata non può cambiare la "
+"propria shell di login. Per questo motivo è sconsigliato includere "
+"<filename>/bin/rsh</filename> in <filename>/etc/shells</filename>: se "
+"accidentalmente un utente selezionasse una shell limitata, non potrebbe più "
+"tornare alla shell di login che usava originariamente."
+
+#: chsh.1.xml:176(filename)
+msgid "/etc/shells"
+msgstr "/etc/shells"
+
+# type: Plain text
+#: chsh.1.xml:178(para)
+msgid "List of valid login shells."
+msgstr "Elenco delle shell di login ammesse."
+
+# type: Plain text
+#: chsh.1.xml:192(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+# type: Plain text
+#: chpasswd.8.xml:69(refpurpose)
+msgid "update passwords in batch mode"
+msgstr "aggiorna le password in modo non interattivo"
+
+# type: Plain text
+#: chpasswd.8.xml:83(para)
+msgid ""
+"The <command>chpasswd</command> command reads a list of user name and "
+"password pairs from standard input and uses this information to update a "
+"group of existing users. Each line is of the format:"
+msgstr ""
+"<command>chpasswd</command> legge da standard input un elenco di coppie di "
+"nomi utente e password e usa queste informazioni per aggiornare un gruppo di "
+"utenti esistenti. Ciascuna riga usa il formato:"
+
+# type: Plain text
+#: chpasswd.8.xml:88(para)
+msgid ""
+"<emphasis remap=\"I\">user_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">nome_utente</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+
+# type: Plain text
+#: chpasswd.8.xml:92(para)
+msgid ""
+"By default the passwords must be supplied in clear-text, and are encrypted "
+"by <command>chpasswd</command>. Also the password age will be updated, if "
+"present."
+msgstr ""
+"Come impostazione predefinita, si devono fornire password in chiaro che "
+"vengono poi cifrate da <command>chpasswd</command>. Vengono aggiornate, se "
+"presenti, anche le informazioni sulla durata delle password."
+
+#: chpasswd.8.xml:97(para)
+#, fuzzy
+#| msgid ""
+#| "The default encryption algorithm can be defined for the system with the "
+#| "<option>ENCRYPT_METHOD</option> or <option>MD5_CRYPT_ENAB</option> "
+#| "variables of <filename>/etc/login.defs</filename>, and can be overwitten "
+#| "with the <option>-e</option>, <option>-m</option>, or <option>-c</option> "
+#| "options."
+msgid ""
+"The default encryption algorithm can be defined for the system with the "
+"<option>ENCRYPT_METHOD</option> or <option>MD5_CRYPT_ENAB</option> variables "
+"of <filename>/etc/login.defs</filename>, and can be overwritten with the "
+"<option>-e</option>, <option>-m</option>, or <option>-c</option> options."
+msgstr ""
+"L'algoritmo di cifratura predefinito può essere impostato con le variabili "
+"<option>ENCRYPT_METHOD</option> e <option>MD5_CRYPT_ENAB</option> in "
+"<filename>/etc/login.defs</filename>, e può essere ulteriormente modificato "
+"con le opzioni <option>-e</option>, <option>-m</option> o <option>-c</"
+"option>."
+
+#: chpasswd.8.xml:105(para)
+msgid ""
+"By default, passwords are encrypted by PAM, but (even if not recommended) "
+"you can select a different encryption method with the <option>-e</option>, "
+"<option>-m</option>, or <option>-c</option> options."
+msgstr ""
+"Se non diversamente impostato, le password saranno cifrate da PAM, ma (anche "
+"se non è raccomandato) si può impostare un metodo di cifratura diverso con "
+"le opzioni <option>-e</option>, <option>-m</option> e <option>-c</option>."
+
+#: chpasswd.8.xml:111(para)
+#, fuzzy
+#| msgid ""
+#| "<phrase condition=\"pam\">Except when PAM is used to encrypt the "
+#| "passwords,</phrase><command>chpasswd</command> first updates all the "
+#| "passwords in memory, and then commits all the changes to disk if no "
+#| "errors occured for any user."
+msgid ""
+"<phrase condition=\"pam\">Except when PAM is used to encrypt the passwords,</"
+"phrase><command>chpasswd</command> first updates all the passwords in "
+"memory, and then commits all the changes to disk if no errors occurred for "
+"any user."
+msgstr ""
+"<phrase condition=\"pam\">Escluso quando PAM viene utilizzato per cifrare le "
+"password, </phrase><command>chpasswd</command> prima aggiorna tutte le "
+"passwor in memoria, e poi scrive tutto su disco se non trova errori per "
+"nessun utente."
+
+#: chpasswd.8.xml:117(para)
+msgid ""
+"When PAM is used to encrypt the passwords (and update the passwords in the "
+"system database) then if a password cannot be updated <command>chpasswd</"
+"command> continues updating the passwords of the next users, and will return "
+"an error code on exit."
+msgstr ""
+"Quando PAM è utilizzato per cifrare le password (e aggiornare le password "
+"nel database di sistema), se una password non può essere aggiornata "
+"<command>chpasswd</command> continua con l'aggiornamento delle password "
+"degli utenti seguenti, e restituisce un codice d'errore all'uscita."
+
+# type: Plain text
+#: chpasswd.8.xml:123(para) chgpasswd.8.xml:98(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are created at a single time."
+msgstr ""
+"Questo comando è appositamente pensato per grossi sistemi in cui si abbia la "
+"necessità di creare molti account nello stesso momento."
+
+# type: Plain text
+#: chpasswd.8.xml:131(para)
+msgid "The options which apply to the <command>chpasswd</command> command are:"
+msgstr "Il comando <command>chpasswd</command> accetta le seguenti opzioni:"
+
+# type: IP
+#: chpasswd.8.xml:137(term)
+msgid ""
+"<option>-c</option>, <option>--crypt-method</option>&nbsp;"
+"<replaceable>METHOD</replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--crypt-method</option>&nbsp;"
+"<replaceable>METODO</replaceable>"
+
+#: chpasswd.8.xml:142(para) chgpasswd.8.xml:115(para)
+msgid "The available methods are DES, MD5, and NONE."
+msgstr "I metodi disponibili sono DES, MD5 e NONE (nessuno)."
+
+#: chpasswd.8.xml:149(para)
+msgid "By default, PAM is used to encrypt the passwords."
+msgstr "PAM viene utilizzato, in maniera predefinita, per cifrare le password."
+
+#: chpasswd.8.xml:152(para)
+msgid ""
+"By default (if none of the <option>-c</option>, <option>-m</option>, or "
+"<option>-e</option> options are specified), the encryption method is defined "
+"by the <option>ENCRYPT_METHOD</option> or <option>MD5_CRYPT_ENAB</option> "
+"variables of <filename>/etc/login.defs</filename>."
+msgstr ""
+"Normalmente (se nessuna delle opzioni <option>-c</option>, <option>-m</"
+"option> o <option>-e</option> viene specificata), il metodo di cifratura è "
+"definito dalle variabili <option>ENCRYPT_METHOD</option> o "
+"<option>MD5_CRYPT_ENAB</option> in <filename>/etc/login.defs</filename>."
+
+# type: IP
+#: chpasswd.8.xml:163(term) chgpasswd.8.xml:125(term)
+msgid "<option>-e</option>, <option>--encrypted</option>"
+msgstr "<option>-e</option>, <option>--encrypted</option>"
+
+# type: Plain text
+#: chpasswd.8.xml:165(para) chgpasswd.8.xml:127(para)
+msgid "Supplied passwords are in encrypted form."
+msgstr "Le password fornite sono in forma cifrata."
+
+# type: IP
+#: chpasswd.8.xml:179(term) chgpasswd.8.xml:137(term)
+msgid "<option>-m</option>, <option>--md5</option>"
+msgstr "<option>-m</option>, <option>--md5</option>"
+
+# type: Plain text
+#: chpasswd.8.xml:181(para) chgpasswd.8.xml:139(para)
+msgid ""
+"Use MD5 encryption instead of DES when the supplied passwords are not "
+"encrypted."
+msgstr ""
+"Usa la cifratura MD5 anziché DES quando le password fornite non sono cifrate."
+
+# type: IP
+#: chpasswd.8.xml:200(term)
+msgid ""
+"<option>-s</option>, <option>--sha-rounds</option>&nbsp;<replaceable>ROUNDS</"
+"replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--sha-rounds</option>&nbsp;<replaceable>CICLI</"
+"replaceable>"
+
+#: chpasswd.8.xml:219(para)
+msgid ""
+"By default, the number of rounds is defined by the "
+"<option>SHA_CRYPT_MIN_ROUNDS</option> and <option>SHA_CRYPT_MAX_ROUNDS</"
+"option> variables in <filename>/etc/login.defs</filename>."
+msgstr ""
+"Il numero di cicli è definito dalle variabili <option>SHA_CRYPT_MIN_ROUNDS</"
+"option> e <option>SHA_CRYPT_MAX_ROUNDS</option> in <filename>/etc/login."
+"defs</filename>."
+
+#: chpasswd.8.xml:232(para) chgpasswd.8.xml:187(para)
+msgid ""
+"Remember to set permissions or umask to prevent readability of unencrypted "
+"files by other users."
+msgstr ""
+"Ricordarsi di impostare i permessi o umask in modo da prevenire la lettura "
+"in chiaro da parte di altri utenti."
+
+#: chpasswd.8.xml:276(filename)
+msgid "/etc/pam.d/chpasswd"
+msgstr "/etc/pam.d/chpasswd"
+
+# type: Plain text
+#: chpasswd.8.xml:278(para)
+msgid "PAM configuration for <command>chpasswd</command>."
+msgstr "Configurazione PAM per <command>chpasswd</command>."
+
+# type: Plain text
+#: chpasswd.8.xml:286(para)
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>newusers</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<phrase><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>newusers</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<phrase><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: chgpasswd.8.xml:47(contrib)
+msgid "Creation, 2006"
+msgstr ""
+
+# type: Plain text
+#: chgpasswd.8.xml:65(refpurpose)
+msgid "update group passwords in batch mode"
+msgstr "aggiorna le password di gruppo in modalità non interattiva"
+
+# type: Plain text
+#: chgpasswd.8.xml:79(para)
+msgid ""
+"The <command>chgpasswd</command> command reads a list of group name and "
+"password pairs from standard input and uses this information to update a set "
+"of existing groups. Each line is of the format:"
+msgstr ""
+"Il comando <command>chgpasswd</command> legge un elenco di coppie di nomi "
+"gruppo e password e usa queste informazioni per aggiornare un insieme di "
+"gruppi esistenti. Ciascuna riga usa il formato:"
+
+# type: Plain text
+#: chgpasswd.8.xml:84(para)
+msgid ""
+"<emphasis remap=\"I\">group_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">nome_gruppo</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+
+# type: Plain text
+#: chgpasswd.8.xml:88(para)
+msgid ""
+"By default the supplied password must be in clear-text, and is encrypted by "
+"<command>chgpasswd</command>."
+msgstr ""
+"Come impostazione predefinita la password deve essere in chiaro ed è cifrata "
+"da <command>chgpasswd</command>."
+
+#: chgpasswd.8.xml:92(para)
+#, fuzzy
+#| msgid ""
+#| "The default encryption algorithm can be defined for the system with the "
+#| "<option>ENCRYPT_METHOD</option> variable of <filename>/etc/login.defs</"
+#| "filename>, and can be overwiten with the <option>-e</option>, <option>-m</"
+#| "option>, or <option>-c</option> options."
+msgid ""
+"The default encryption algorithm can be defined for the system with the "
+"<option>ENCRYPT_METHOD</option> variable of <filename>/etc/login.defs</"
+"filename>, and can be overwritten with the <option>-e</option>, <option>-m</"
+"option>, or <option>-c</option> options."
+msgstr ""
+"L'algoritmo di cifratura utilizzato può essere definito per tutto il sistema "
+"dalla variabile <option>ENCRYPT_METHOD</option> in <filename>/etc/login."
+"defs</filename>, e può essere modificato con le opzioni <option>-e</option>, "
+"<option>-m</option> o <option>-c</option>."
+
+# type: Plain text
+#: chgpasswd.8.xml:106(para)
+msgid ""
+"The options which apply to the <command>chgpasswd</command> command are:"
+msgstr "Il comando <command>chgpasswd</command> accetta le seguenti opzioni:"
+
+# type: Plain text
+#: chgpasswd.8.xml:238(para)
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+
+# type: Plain text
+#: chfn.1.xml:68(refpurpose)
+msgid "change real user name and information"
+msgstr "cambia il nome dell'utente e altre informazioni"
+
+# type: Plain text
+#: chfn.1.xml:85(para)
+msgid ""
+"The <command>chfn</command> command changes user fullname, office room "
+"number, office phone number, and home phone number information for a user's "
+"account. This information is typically printed by "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> and similar programs. A normal user may only change the fields "
+"for her own account, subject to the restrictions in <filename>/etc/login."
+"defs</filename>. (The default configuration is to prevent users from "
+"changing their fullname.) The superuser may change any field for any "
+"account. Additionally, only the superuser may use the <option>-o</option> "
+"option to change the undefined portions of the GECOS field."
+msgstr ""
+"<command>chfn</command> è usato per cambiare il nome completo "
+"dell'utilizzatore, il numero di stanza dell'ufficio, quello di telefono "
+"dell'ufficio e di casa. Questi dati sono normalmente stampati dal programma "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> o equivalenti. Un utente normale può cambiare solo i dati "
+"relativi al proprio account, con eventuali altre limitazioni specificate in "
+"<filename>/etc/login.defs</filename>. (La configurazione predefinita "
+"impedisce la modifica del proprio nome completo.) Il super utente può "
+"cambiare tutte le informazioni di ciascun utente. Inoltre, solo il super "
+"utente può usare l'opzione <option>-o</option> per la modifica delle parti "
+"non definite del campo GECOS."
+
+#: chfn.1.xml:99(para)
+msgid ""
+"These fields must not contain any colons. Except for the <emphasis remap=\"I"
+"\">other</emphasis> field, they should not contain any comma or equal sign. "
+"It is also recommended to avoid non-US-ASCII characters, but this is only "
+"enforced for the phone numbers. The <emphasis remap=\"I\">other</emphasis> "
+"field is used to store accounting information used by other applications."
+msgstr ""
+"Questi campi non possono contenere nessun carattere due punti. Ad eccezione "
+"del campo <emphasis remap=\"I\">other</emphasis>, non dovrebbero contenere "
+"nessuna virgola e nessun segno uguale. È anche consigliato di evitare "
+"caratteri non US-ACII, ma su questo viene fatto un controllo solo per il "
+"numero di telefono. Il campo <emphasis remap=\"I\">other</emphasis> viene "
+"utilizzato per memorizzare informazioni sull'«accounting» da altre "
+"applicazioni."
+
+# type: Plain text
+#: chfn.1.xml:112(para)
+msgid "The options which apply to the <command>chfn</command> command are:"
+msgstr "Il comando <command>chfn</command> accetta le seguenti opzioni:"
+
+# type: IP
+#: chfn.1.xml:117(term)
+msgid ""
+"<option>-f</option>, <option>--full-name</option>&nbsp;"
+"<replaceable>FULL_NAME</replaceable>"
+msgstr ""
+"<option>-f</option>, <option>--full-name</option>&nbsp;"
+"<replaceable>NOME_COMPLETO</replaceable>"
+
+# type: SS
+#: chfn.1.xml:121(para)
+msgid "Change the user's full name."
+msgstr "Cambia il nome completo dell'utente."
+
+# type: IP
+#: chfn.1.xml:125(term)
+msgid ""
+"<option>-h</option>, <option>--home-phone</option>&nbsp;"
+"<replaceable>HOME_PHONE</replaceable>"
+msgstr ""
+"<option>-h</option>, <option>--home-phone</option>&nbsp;"
+"<replaceable>TELEFONO_CASA</replaceable>"
+
+#: chfn.1.xml:129(para)
+msgid "Change the user's home phone number."
+msgstr "Cambia il numero di telefono di casa dell'utente."
+
+# type: IP
+#: chfn.1.xml:133(term)
+msgid ""
+"<option>-o</option>, <option>--other</option>&nbsp;<replaceable>OTHER</"
+"replaceable>"
+msgstr ""
+"<option>-o</option>, <option>--other</option>&nbsp;<replaceable>ALTRO</"
+"replaceable>"
+
+#: chfn.1.xml:137(para)
+msgid ""
+"Change the user's other GECOS information. This field is used to store "
+"accounting information used by other applications, and can be changed only "
+"by a superuser."
+msgstr ""
+"Cambia il campo GECOS per le altre informazioni. Questo campo viene "
+"utilizzato per memorizzare informazioni di «accounting» usate da altre "
+"applicazioni, e può essere modificato solo dal super utente."
+
+# type: IP
+#: chfn.1.xml:145(term)
+msgid ""
+"<option>-r</option>, <option>--room</option>&nbsp;<replaceable>ROOM_NUMBER</"
+"replaceable>"
+msgstr ""
+"<option>-r</option>, <option>--room</option>&nbsp;"
+"<replaceable>NUMERO_STANZA</replaceable>"
+
+#: chfn.1.xml:149(para)
+msgid "Change the user's room number."
+msgstr "Cambia il numero della stanza dell'utente."
+
+# type: TP
+#: chfn.1.xml:165(term)
+msgid "<option>-u</option>, <option>--help</option>"
+msgstr "<option>-u</option>, <option>--help</option>"
+
+# type: IP
+#: chfn.1.xml:173(term)
+msgid ""
+"<option>-w</option>, <option>--work-phone</option>&nbsp;"
+"<replaceable>WORK_PHONE</replaceable>"
+msgstr ""
+"<option>-w</option>, <option>--work-phone</option>&nbsp;"
+"<replaceable>TELEFONO_LAVORO</replaceable>"
+
+#: chfn.1.xml:177(para)
+msgid "Change the user's office phone number."
+msgstr "Cambia il numero di telefono di lavoro dell'utente."
+
+# type: Plain text
+#: chfn.1.xml:181(para)
+msgid ""
+"If none of the options are selected, <command>chfn</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis remap=\"B\">[ ]</emphasis> marks. Without options, <command>chfn</"
+"command> prompts for the current user account."
+msgstr ""
+"Se nessuna delle opzioni è selezionata, <command>chfn</command> opera in "
+"maniera interattiva, chiedendo all'utente il valore da impostare per ogni "
+"campo. Inserire un nuovo valore per sostituire il contenuto attuale, oppure "
+"lasciare la riga vuota per non cambiarlo. Il valore attuale è mostrato tra "
+"le parentesi <emphasis remap=\"B\">[ ]</emphasis>. Senza nessuna opzione, "
+"<command>chfn</command> opera sull'account corrente."
+
+# type: Plain text
+#: chfn.1.xml:226(para)
+msgid ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+# type: Plain text
+#: chage.1.xml:66(refpurpose)
+msgid "change user password expiry information"
+msgstr "cambia le informazioni sulla scadenza della password"
+
+# type: Plain text
+#: 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 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 "
+"sistema per determinare quando un utente deve cambiare la propria password."
+
+# type: Plain text
+#: chage.1.xml:92(para)
+msgid "The options which apply to the <command>chage</command> command are:"
+msgstr "Il comando <command>chage</command> accetta le seguenti opzioni:"
+
+# type: IP
+#: chage.1.xml:97(term)
+msgid ""
+"<option>-d</option>, <option>--lastday</option>&nbsp;<replaceable>LAST_DAY</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--lastday</option>&nbsp;"
+"<replaceable>ULTIMO_GIORNO</replaceable>"
+
+# type: Plain text
+#: chage.1.xml:101(para)
+msgid ""
+"Set the number of days since January 1st, 1970 when the password was last "
+"changed. The date may also be expressed in the format YYYY-MM-DD (or the "
+"format more commonly used in your area)."
+msgstr ""
+"Imposta la data dell'ultimo cambio della password, espressa come il numero "
+"di giorni trascorsi dal 1 gennaio 1970. La data può anche essere specificata "
+"nel formato AAAA-MM-GG o nella notazione comunemente usata nel proprio paese."
+
+# type: TP
+#: chage.1.xml:109(term)
+msgid ""
+"<option>-E</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>EXPIRE_DATE</replaceable>"
+msgstr ""
+"<option>-E</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>DATA_SCADENZA</replaceable>"
+
+# type: Plain text
+#: chage.1.xml:113(para)
+msgid ""
+"Set the date or number of days since January 1, 1970 on which the user's "
+"account will no longer be accessible. The date may also be expressed in the "
+"format YYYY-MM-DD (or the format more commonly used in your area). A user "
+"whose account is locked must contact the system administrator before being "
+"able to use the system again."
+msgstr ""
+"Imposta la data o il numero di giorni dal 1 gennaio 1970 dal quale l'account "
+"utente non sarà più accessibile. La data può essere inserita nel formato "
+"AAAA-MM-GG (o il formato più comunemente utilizzato nel proprio paese). Un "
+"utente il cui account sia bloccato deve contattare l'amministratore di "
+"sistema prima di poter accedere nuovamente al sistema."
+
+#: chage.1.xml:121(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>EXPIRE_DATE</replaceable> will remove an account expiration "
+"date."
+msgstr ""
+"Se si passa il numero <emphasis remap=\"I\">-1</emphasis> come "
+"<replaceable>DATA_SCADENZA</replaceable>, si rimuove la data di scadenza "
+"dell'account."
+
+# type: IP
+#: chage.1.xml:135(term)
+#, fuzzy
+#| msgid "<option>-s</option>, <option>--sort</option>"
+msgid "<option>-i</option>, <option>--iso8601</option>"
+msgstr "<option>-s</option>, <option>--sort</option>"
+
+#: chage.1.xml:137(para)
+msgid "When printing dates, use YYYY-MM-DD format."
+msgstr ""
+
+# type: TP
+#: chage.1.xml:141(term)
+msgid ""
+"<option>-I</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-I</option>, <option>--inactive</option>&nbsp;<replaceable>INATTIVO</"
+"replaceable>"
+
+# type: Plain text
+#: chage.1.xml:145(para)
+msgid ""
+"Set the number of days of inactivity after a password has expired before the "
+"account is locked. The <replaceable>INACTIVE</replaceable> option is the "
+"number of days of inactivity. A user whose account is locked must contact "
+"the system administrator before being able to use the system again."
+msgstr ""
+"Imposta il numero di giorni di inattività dopo la scadenza della password "
+"dopo i quali l'account viene bloccato. L'opzione <replaceable>INATTIVO</"
+"replaceable> indica il numero di giorni di inattività. Un utente con "
+"l'account bloccato deve contattare l'amministratore prima di poter usare "
+"ancora il sistema."
+
+#: chage.1.xml:152(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>INACTIVE</replaceable> will remove an account's inactivity."
+msgstr ""
+"Utilizzare il numero <emphasis remap=\"I\">-1</emphasis> come "
+"<replaceable>INATTIVO</replaceable> elimina l'intervallo di inattività "
+"dall'account."
+
+# type: Plain text
+#: chage.1.xml:164(para)
+msgid "Show account aging information."
+msgstr "Visualizza le informazioni sulla scadenza dell'account."
+
+# type: IP
+#: chage.1.xml:170(term)
+msgid ""
+"<option>-m</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--mindays</option>&nbsp;"
+"<replaceable>MIN_GIORNI</replaceable>"
+
+# type: IP
+#: chage.1.xml:182(term)
+msgid ""
+"<option>-M</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-M</option>, <option>--maxdays</option>&nbsp;"
+"<replaceable>MAX_GIORNI</replaceable>"
+
+# type: Plain text
+#: chage.1.xml:186(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 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 ""
+"Imposta il numero massimo di giorni di validità di una password. Quando la "
+"somma di <replaceable>MAX_GIORNI</replaceable> e <replaceable>ULTIMO_GIORNO</"
+"replaceable> è inferiore alla data odierna, l'utente è obbligato a cambiare "
+"la password prima di poter usare ancora il proprio account. Questo evento "
+"può essere reso noto in anticipo usando l'opzione <option>-W</option>, che "
+"fornisce un preavviso all'utente."
+
+# type: IP
+#: chage.1.xml:215(term)
+msgid ""
+"<option>-W</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>WARN_DAYS</replaceable>"
+msgstr ""
+"<option>-W</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>AVVISO_GIORNI</replaceable>"
+
+# type: Plain text
+#: chage.1.xml:219(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 their password is about to "
+"expire."
+msgstr ""
+"Imposta il numero di giorni di preavviso prima che sia obbligatorio cambiare "
+"la password. L'opzione <replaceable>AVVISO_GIORNI</replaceable> indica il "
+"numero di giorni prima della scadenza della password in cui l'utente viene "
+"avvertito dell'imminente scadenza."
+
+# type: Plain text
+#: chage.1.xml:228(para)
+msgid ""
+"If none of the options are selected, <command>chage</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis>[ ]</emphasis> marks."
+msgstr ""
+"Se non viene specificata nessuna opzione, <command>chage</command> opera in "
+"modalità interattiva, chiedendo all'utente il nuovo valore per ogni campo. "
+"Inserire un nuovo valore per modificare il campo, oppure lasciare la riga "
+"vuota per continuare a usare il valore attuale. I valori attuali vengono "
+"mostrati tra parentesi quadre <emphasis>[ ]</emphasis>."
+
+# type: Plain text
+#: chage.1.xml:238(para)
+msgid ""
+"The <command>chage</command> program requires a shadow password file to be "
+"available."
+msgstr ""
+"<command>chage</command> richiede che il file delle password shadow sia "
+"disponibile."
+
+# type: Plain text
+#: chage.1.xml:242(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 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 "
+"non privilegiato per conoscere la scadenza della propria password o "
+"dell'account."
+
+# type: IP
+#: chage.1.xml:307(replaceable)
+msgid "15"
+msgstr "15"
+
+# type: Plain text
+#: chage.1.xml:309(para)
+msgid "can't find the shadow password file"
+msgstr "non è possibile trovare il file delle password shadow"
+
+# type: TP
+#: chage.1.xml:285(para)
+msgid ""
+"The <command>chage</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Il comando <command>chage</command> restituisce i seguenti valori: "
+"<placeholder-1/>"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
+#: chage.1.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+"Giuseppe Sacco <eppesuig@debian.org>, 2005, 2012.\n"
+"Danilo Piazzalunga <danilopiazza@libero.it>, 2005."
+
+# type: Plain text
+#~ msgid ""
+#~ "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."
+#~ msgstr ""
+#~ "Dopo il nome utente, è possibile specificare argomenti aggiuntivi da "
+#~ "passare alla shell di login dell'utente. In particolare, molti interpreti "
+#~ "di comando adottano la convenzione per cui l'opzione <option>-c</option> "
+#~ "seguita da un argomento fa sì che quest'ultimo sia considerato un "
+#~ "comando. Il comando viene eseguito dalla shell specificata in <filename>/"
+#~ "etc/passwd</filename> per l'utente di destinazione."
+
+#~ msgid ""
+#~ "You can use the <option>--</option> argument to separate <command>su</"
+#~ "command> options from the arguments supplied to the shell."
+#~ msgstr ""
+#~ "Si può utilizzare <option>--</option> per separare le opzioni di "
+#~ "<command>su</command> dagli argomenti passati alla shell."
+
+#~ msgid ""
+#~ "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 <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>."
+#~ msgstr ""
+#~ "Il campo password cifrata può essere vuoto, nel qual caso non viene "
+#~ "richiesta nessuna password per autenticare lo specifico login. Tuttavia "
+#~ "alcune applicazioni che leggono il file <filename>/etc/passwd</filename> "
+#~ "possono decidere di non permettere <emphasis>nessun</emphasis> accesso se "
+#~ "il campo <emphasis>password</emphasis> è vuoto. Se il campo "
+#~ "<emphasis>password</emphasis> contiene solo una <quote>x</quote> "
+#~ "minuscola, la password cifrata è invece memorizzata nel file "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>; ci <emphasis>deve</emphasis> essere una riga "
+#~ "corrispondente nel file <filename>/etc/shadow</filename> altrimenti "
+#~ "l'account non sarà valido. Se il campo <emphasis>password</emphasis> ha "
+#~ "un qualsiasi altro contenuto allora viene trattato come password cifrata, "
+#~ "come specificato da <citerefentry><refentrytitle>crypt</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>."
+
+#~ msgid "-M"
+#~ msgstr "-M"
+
+# type: Plain text
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+# type: Plain text
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "can't create mail spool"
+#~ msgstr "non è possibile creare la casella di posta"
diff --git a/man/po/pl.po b/man/po/pl.po
new file mode 100644
index 0000000..bc475a7
--- /dev/null
+++ b/man/po/pl.po
@@ -0,0 +1,9659 @@
+# Polish translation for shadow man pages
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: man pages for shadow 4.0.16\n"
+"POT-Creation-Date: 2020-01-23 15:00-0600\n"
+"PO-Revision-Date: 2013-08-23 01:38+0200\n"
+"Last-Translator: Tomasz Kłoczko <kloczek@pld.org.pl>\n"
+"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: vipw.8.xml:41(firstname) suauth.5.xml:39(firstname)
+#: pwconv.8.xml:45(firstname) login.access.5.xml:40(firstname)
+msgid "Marek"
+msgstr ""
+
+#: vipw.8.xml:42(surname) suauth.5.xml:40(surname) pwconv.8.xml:46(surname)
+#: login.access.5.xml:41(surname)
+msgid "Michałkiewicz"
+msgstr ""
+
+#: vipw.8.xml:43(contrib) limits.5.xml:43(contrib)
+msgid "Creation, 1997"
+msgstr ""
+
+#: vipw.8.xml:46(firstname) usermod.8.xml:51(firstname)
+#: userdel.8.xml:50(firstname) useradd.8.xml:63(firstname)
+#: suauth.5.xml:44(firstname) su.1.xml:61(firstname) sg.1.xml:45(firstname)
+#: shadow.5.xml:44(firstname) shadow.3.xml:44(firstname)
+#: pwconv.8.xml:50(firstname) pwck.8.xml:50(firstname)
+#: porttime.5.xml:44(firstname) passwd.5.xml:44(firstname)
+#: passwd.1.xml:51(firstname) newusers.8.xml:60(firstname)
+#: newgrp.1.xml:45(firstname) logoutd.8.xml:44(firstname)
+#: login.defs.5.xml:111(firstname) login.access.5.xml:45(firstname)
+#: login.1.xml:77(firstname) limits.5.xml:46(firstname)
+#: lastlog.8.xml:46(firstname) grpck.8.xml:45(firstname)
+#: groups.1.xml:44(firstname) groupmod.8.xml:45(firstname)
+#: groupmems.8.xml:48(firstname) groupdel.8.xml:45(firstname)
+#: groupadd.8.xml:47(firstname) gpasswd.1.xml:49(firstname)
+#: faillog.8.xml:44(firstname) faillog.5.xml:44(firstname)
+#: expiry.1.xml:48(firstname) chsh.1.xml:47(firstname)
+#: chpasswd.8.xml:48(firstname) chgpasswd.8.xml:44(firstname)
+#: chfn.1.xml:47(firstname) chage.1.xml:45(firstname)
+msgid "Thomas"
+msgstr ""
+
+#: vipw.8.xml:47(surname) usermod.8.xml:52(surname) userdel.8.xml:51(surname)
+#: useradd.8.xml:64(surname) suauth.5.xml:45(surname) su.1.xml:62(surname)
+#: sg.1.xml:46(surname) shadow.5.xml:45(surname) shadow.3.xml:45(surname)
+#: pwconv.8.xml:51(surname) pwck.8.xml:51(surname) porttime.5.xml:45(surname)
+#: passwd.5.xml:45(surname) passwd.1.xml:52(surname) newusers.8.xml:61(surname)
+#: newgrp.1.xml:46(surname) logoutd.8.xml:45(surname)
+#: login.defs.5.xml:112(surname) login.access.5.xml:46(surname)
+#: login.1.xml:78(surname) limits.5.xml:47(surname) lastlog.8.xml:47(surname)
+#: grpck.8.xml:46(surname) groups.1.xml:45(surname) groupmod.8.xml:46(surname)
+#: groupmems.8.xml:49(surname) groupdel.8.xml:46(surname)
+#: groupadd.8.xml:48(surname) gpasswd.1.xml:50(surname)
+#: faillog.8.xml:45(surname) faillog.5.xml:45(surname) expiry.1.xml:49(surname)
+#: chsh.1.xml:48(surname) chpasswd.8.xml:49(surname)
+#: chgpasswd.8.xml:45(surname) chfn.1.xml:48(surname) chage.1.xml:46(surname)
+msgid "Kłoczko"
+msgstr ""
+
+#: vipw.8.xml:48(email) usermod.8.xml:53(email) userdel.8.xml:52(email)
+#: useradd.8.xml:65(email) suauth.5.xml:46(email) su.1.xml:63(email)
+#: sg.1.xml:47(email) shadow.5.xml:46(email) shadow.3.xml:46(email)
+#: pwconv.8.xml:52(email) pwck.8.xml:52(email) porttime.5.xml:46(email)
+#: passwd.5.xml:46(email) passwd.1.xml:53(email) newusers.8.xml:62(email)
+#: newgrp.1.xml:47(email) logoutd.8.xml:46(email) login.defs.5.xml:113(email)
+#: login.access.5.xml:47(email) login.1.xml:79(email) limits.5.xml:48(email)
+#: lastlog.8.xml:48(email) grpck.8.xml:47(email) groups.1.xml:46(email)
+#: groupmod.8.xml:47(email) groupmems.8.xml:50(email) groupdel.8.xml:47(email)
+#: groupadd.8.xml:49(email) gpasswd.1.xml:51(email) faillog.8.xml:46(email)
+#: faillog.5.xml:46(email) expiry.1.xml:50(email) chsh.1.xml:49(email)
+#: chpasswd.8.xml:50(email) chgpasswd.8.xml:46(email) chfn.1.xml:49(email)
+#: chage.1.xml:47(email)
+msgid "kloczek@pld.org.pl"
+msgstr ""
+
+#: vipw.8.xml:49(contrib) usermod.8.xml:54(contrib) userdel.8.xml:53(contrib)
+#: useradd.8.xml:66(contrib) suauth.5.xml:47(contrib) su.1.xml:64(contrib)
+#: sg.1.xml:48(contrib) shadow.5.xml:47(contrib) shadow.3.xml:47(contrib)
+#: pwconv.8.xml:53(contrib) pwck.8.xml:53(contrib) porttime.5.xml:47(contrib)
+#: passwd.5.xml:47(contrib) passwd.1.xml:54(contrib) newusers.8.xml:63(contrib)
+#: newgrp.1.xml:48(contrib) logoutd.8.xml:47(contrib)
+#: login.defs.5.xml:114(contrib) login.access.5.xml:48(contrib)
+#: login.1.xml:80(contrib) limits.5.xml:49(contrib) lastlog.8.xml:49(contrib)
+#: grpck.8.xml:48(contrib) groups.1.xml:47(contrib) groupmod.8.xml:48(contrib)
+#: groupmems.8.xml:51(contrib) groupdel.8.xml:48(contrib)
+#: groupadd.8.xml:50(contrib) gpasswd.1.xml:52(contrib)
+#: faillog.8.xml:47(contrib) faillog.5.xml:47(contrib) expiry.1.xml:51(contrib)
+#: chsh.1.xml:50(contrib) chpasswd.8.xml:51(contrib) chfn.1.xml:50(contrib)
+#: chage.1.xml:48(contrib)
+msgid "shadow-utils maintainer, 2000 - 2007"
+msgstr ""
+
+#: vipw.8.xml:52(firstname) usermod.8.xml:57(firstname)
+#: userdel.8.xml:56(firstname) useradd.8.xml:69(firstname)
+#: suauth.5.xml:50(firstname) su.1.xml:67(firstname) sg.1.xml:51(firstname)
+#: shadow.5.xml:50(firstname) shadow.3.xml:50(firstname)
+#: pwconv.8.xml:56(firstname) pwck.8.xml:56(firstname)
+#: porttime.5.xml:50(firstname) passwd.5.xml:50(firstname)
+#: passwd.1.xml:57(firstname) nologin.8.xml:39(firstname)
+#: newusers.8.xml:66(firstname) newgrp.1.xml:51(firstname)
+#: logoutd.8.xml:50(firstname) login.defs.5.xml:117(firstname)
+#: login.access.5.xml:51(firstname) login.1.xml:83(firstname)
+#: limits.5.xml:52(firstname) lastlog.8.xml:52(firstname)
+#: gshadow.5.xml:38(firstname) grpck.8.xml:51(firstname)
+#: groups.1.xml:50(firstname) groupmod.8.xml:51(firstname)
+#: groupmems.8.xml:54(firstname) groupdel.8.xml:51(firstname)
+#: groupadd.8.xml:53(firstname) gpasswd.1.xml:55(firstname)
+#: faillog.8.xml:50(firstname) faillog.5.xml:50(firstname)
+#: expiry.1.xml:54(firstname) chsh.1.xml:53(firstname)
+#: chpasswd.8.xml:54(firstname) chgpasswd.8.xml:50(firstname)
+#: chfn.1.xml:53(firstname) chage.1.xml:51(firstname)
+msgid "Nicolas"
+msgstr ""
+
+#: vipw.8.xml:53(surname) usermod.8.xml:58(surname) userdel.8.xml:57(surname)
+#: useradd.8.xml:70(surname) suauth.5.xml:51(surname) su.1.xml:68(surname)
+#: sg.1.xml:52(surname) shadow.5.xml:51(surname) shadow.3.xml:51(surname)
+#: pwconv.8.xml:57(surname) pwck.8.xml:57(surname) porttime.5.xml:51(surname)
+#: passwd.5.xml:51(surname) passwd.1.xml:58(surname) nologin.8.xml:40(surname)
+#: newusers.8.xml:67(surname) newgrp.1.xml:52(surname)
+#: logoutd.8.xml:51(surname) login.defs.5.xml:118(surname)
+#: login.access.5.xml:52(surname) login.1.xml:84(surname)
+#: limits.5.xml:53(surname) lastlog.8.xml:53(surname) gshadow.5.xml:39(surname)
+#: grpck.8.xml:52(surname) groups.1.xml:51(surname) groupmod.8.xml:52(surname)
+#: groupmems.8.xml:55(surname) groupdel.8.xml:52(surname)
+#: groupadd.8.xml:54(surname) gpasswd.1.xml:56(surname)
+#: faillog.8.xml:51(surname) faillog.5.xml:51(surname) expiry.1.xml:55(surname)
+#: chsh.1.xml:54(surname) chpasswd.8.xml:55(surname)
+#: chgpasswd.8.xml:51(surname) chfn.1.xml:54(surname) chage.1.xml:52(surname)
+msgid "François"
+msgstr ""
+
+#: vipw.8.xml:54(email) usermod.8.xml:59(email) userdel.8.xml:58(email)
+#: useradd.8.xml:71(email) suauth.5.xml:52(email) su.1.xml:69(email)
+#: sg.1.xml:53(email) shadow.5.xml:52(email) shadow.3.xml:52(email)
+#: pwconv.8.xml:58(email) pwck.8.xml:58(email) porttime.5.xml:52(email)
+#: passwd.5.xml:52(email) passwd.1.xml:59(email) nologin.8.xml:41(email)
+#: newusers.8.xml:68(email) newgrp.1.xml:53(email) logoutd.8.xml:52(email)
+#: login.defs.5.xml:119(email) login.access.5.xml:53(email)
+#: login.1.xml:85(email) limits.5.xml:54(email) lastlog.8.xml:54(email)
+#: gshadow.5.xml:40(email) grpck.8.xml:53(email) groups.1.xml:52(email)
+#: groupmod.8.xml:53(email) groupmems.8.xml:56(email) groupdel.8.xml:53(email)
+#: groupadd.8.xml:55(email) gpasswd.1.xml:57(email) faillog.8.xml:52(email)
+#: faillog.5.xml:52(email) expiry.1.xml:56(email) chsh.1.xml:55(email)
+#: chpasswd.8.xml:56(email) chgpasswd.8.xml:52(email) chfn.1.xml:55(email)
+#: chage.1.xml:53(email)
+msgid "nicolas.francois@centraliens.net"
+msgstr ""
+
+#: vipw.8.xml:55(contrib) usermod.8.xml:60(contrib) userdel.8.xml:59(contrib)
+#: useradd.8.xml:72(contrib) suauth.5.xml:53(contrib) su.1.xml:70(contrib)
+#: sg.1.xml:54(contrib) shadow.5.xml:53(contrib) shadow.3.xml:53(contrib)
+#: pwconv.8.xml:59(contrib) pwck.8.xml:59(contrib) porttime.5.xml:53(contrib)
+#: passwd.5.xml:53(contrib) passwd.1.xml:60(contrib) nologin.8.xml:42(contrib)
+#: newusers.8.xml:69(contrib) newgrp.1.xml:54(contrib)
+#: logoutd.8.xml:53(contrib) login.defs.5.xml:120(contrib)
+#: login.access.5.xml:54(contrib) login.1.xml:86(contrib)
+#: limits.5.xml:55(contrib) lastlog.8.xml:55(contrib) gshadow.5.xml:42(contrib)
+#: grpck.8.xml:54(contrib) groups.1.xml:53(contrib) groupmod.8.xml:54(contrib)
+#: groupmems.8.xml:57(contrib) groupdel.8.xml:54(contrib)
+#: groupadd.8.xml:56(contrib) gpasswd.1.xml:58(contrib)
+#: faillog.8.xml:53(contrib) faillog.5.xml:53(contrib) expiry.1.xml:57(contrib)
+#: chsh.1.xml:56(contrib) chpasswd.8.xml:57(contrib)
+#: chgpasswd.8.xml:53(contrib) chfn.1.xml:56(contrib) chage.1.xml:54(contrib)
+msgid "shadow-utils maintainer, 2007 - now"
+msgstr ""
+
+#: vipw.8.xml:59(refentrytitle) vipw.8.xml:66(refname) vipw.8.xml:75(command)
+#: login.defs.5.xml:520(term)
+msgid "vipw"
+msgstr "vipw"
+
+#: vipw.8.xml:60(manvolnum) usermod.8.xml:65(manvolnum)
+#: userdel.8.xml:64(manvolnum) userdel.8.xml:276(replaceable)
+#: useradd.8.xml:77(manvolnum) pwconv.8.xml:64(manvolnum)
+#: pwck.8.xml:64(manvolnum) nologin.8.xml:47(manvolnum)
+#: newusers.8.xml:74(manvolnum) logoutd.8.xml:58(manvolnum)
+#: lastlog.8.xml:60(manvolnum) grpck.8.xml:59(manvolnum)
+#: groupmod.8.xml:59(manvolnum) groupmems.8.xml:62(manvolnum)
+#: groupdel.8.xml:59(manvolnum) groupdel.8.xml:198(replaceable)
+#: groupadd.8.xml:61(manvolnum) faillog.8.xml:58(manvolnum)
+#: faillog.5.xml:111(manvolnum) chpasswd.8.xml:62(manvolnum)
+#: chgpasswd.8.xml:58(manvolnum)
+msgid "8"
+msgstr "8"
+
+#: vipw.8.xml:61(refmiscinfo) usermod.8.xml:66(refmiscinfo)
+#: userdel.8.xml:65(refmiscinfo) useradd.8.xml:78(refmiscinfo)
+#: pwconv.8.xml:65(refmiscinfo) pwck.8.xml:65(refmiscinfo)
+#: nologin.8.xml:48(refmiscinfo) newusers.8.xml:75(refmiscinfo)
+#: logoutd.8.xml:59(refmiscinfo) lastlog.8.xml:61(refmiscinfo)
+#: grpck.8.xml:60(refmiscinfo) groupmod.8.xml:60(refmiscinfo)
+#: groupmems.8.xml:63(refmiscinfo) groupdel.8.xml:60(refmiscinfo)
+#: groupadd.8.xml:62(refmiscinfo) faillog.8.xml:59(refmiscinfo)
+#: chpasswd.8.xml:63(refmiscinfo) chgpasswd.8.xml:59(refmiscinfo)
+msgid "System Management Commands"
+msgstr "Polecenia Zarządzania Systemem"
+
+#: vipw.8.xml:62(refmiscinfo) usermod.8.xml:67(refmiscinfo)
+#: userdel.8.xml:66(refmiscinfo) useradd.8.xml:79(refmiscinfo)
+#: suauth.5.xml:60(refmiscinfo) su.1.xml:77(refmiscinfo)
+#: sg.1.xml:61(refmiscinfo) shadow.5.xml:60(refmiscinfo)
+#: shadow.3.xml:60(refmiscinfo) pwconv.8.xml:66(refmiscinfo)
+#: pwck.8.xml:66(refmiscinfo) porttime.5.xml:60(refmiscinfo)
+#: passwd.5.xml:60(refmiscinfo) passwd.1.xml:67(refmiscinfo)
+#: nologin.8.xml:49(refmiscinfo) newusers.8.xml:76(refmiscinfo)
+#: newgrp.1.xml:61(refmiscinfo) logoutd.8.xml:60(refmiscinfo)
+#: login.defs.5.xml:127(refmiscinfo) login.access.5.xml:61(refmiscinfo)
+#: login.1.xml:93(refmiscinfo) limits.5.xml:62(refmiscinfo)
+#: lastlog.8.xml:62(refmiscinfo) gshadow.5.xml:49(refmiscinfo)
+#: grpck.8.xml:61(refmiscinfo) groups.1.xml:60(refmiscinfo)
+#: groupmod.8.xml:61(refmiscinfo) groupmems.8.xml:64(refmiscinfo)
+#: groupdel.8.xml:61(refmiscinfo) groupadd.8.xml:63(refmiscinfo)
+#: gpasswd.1.xml:65(refmiscinfo) faillog.8.xml:60(refmiscinfo)
+#: faillog.5.xml:60(refmiscinfo) expiry.1.xml:64(refmiscinfo)
+#: chsh.1.xml:63(refmiscinfo) chpasswd.8.xml:64(refmiscinfo)
+#: chgpasswd.8.xml:60(refmiscinfo) chfn.1.xml:63(refmiscinfo)
+#: chage.1.xml:61(refmiscinfo)
+#, fuzzy
+#| msgid "gshadow"
+msgid "shadow-utils"
+msgstr "gshadow"
+
+#: vipw.8.xml:67(refname) vipw.8.xml:81(command)
+msgid "vigr"
+msgstr "vigr"
+
+#: vipw.8.xml:68(refpurpose)
+msgid "edit the password, group, shadow-password or shadow-group file"
+msgstr "edytuj plik haseł, grup lub ich wersji chronionych"
+
+#: vipw.8.xml:77(replaceable) vipw.8.xml:83(replaceable)
+#: usermod.8.xml:79(replaceable) userdel.8.xml:76(arg)
+#: useradd.8.xml:90(replaceable) useradd.8.xml:102(replaceable)
+#: su.1.xml:88(replaceable) pwconv.8.xml:81(replaceable)
+#: pwconv.8.xml:87(replaceable) pwconv.8.xml:93(replaceable)
+#: pwconv.8.xml:99(replaceable) pwck.8.xml:77(arg) passwd.1.xml:79(replaceable)
+#: newusers.8.xml:88(replaceable) lastlog.8.xml:74(replaceable)
+#: grpck.8.xml:72(arg) groupmod.8.xml:73(replaceable)
+#: groupdel.8.xml:73(replaceable) groupadd.8.xml:75(replaceable)
+#: faillog.8.xml:72(replaceable) chsh.1.xml:75(replaceable)
+#: chpasswd.8.xml:76(replaceable) chgpasswd.8.xml:72(replaceable)
+#: chfn.1.xml:75(replaceable) chage.1.xml:72(replaceable)
+msgid "options"
+msgstr "opcje"
+
+#: vipw.8.xml:89(title) usermod.8.xml:86(title) userdel.8.xml:84(title)
+#: useradd.8.xml:108(title) suauth.5.xml:75(title) su.1.xml:103(title)
+#: sg.1.xml:81(title) shadow.5.xml:69(title) shadow.3.xml:118(title)
+#: shadow.3.xml:174(title) pwconv.8.xml:105(title) pwck.8.xml:92(title)
+#: porttime.5.xml:69(title) passwd.5.xml:69(title) passwd.1.xml:88(title)
+#: nologin.8.xml:64(title) newusers.8.xml:97(title) newgrp.1.xml:77(title)
+#: logoutd.8.xml:75(title) login.defs.5.xml:136(title)
+#: login.access.5.xml:70(title) login.1.xml:125(title) limits.5.xml:72(title)
+#: lastlog.8.xml:80(title) gshadow.5.xml:58(title) grpck.8.xml:83(title)
+#: groups.1.xml:78(title) groupmod.8.xml:80(title) groupmems.8.xml:85(title)
+#: groupdel.8.xml:80(title) groupadd.8.xml:84(title) gpasswd.1.xml:94(title)
+#: faillog.8.xml:78(title) faillog.5.xml:69(title) expiry.1.xml:82(title)
+#: chsh.1.xml:84(title) chpasswd.8.xml:82(title) chgpasswd.8.xml:78(title)
+#: chfn.1.xml:84(title) chage.1.xml:81(title)
+msgid "DESCRIPTION"
+msgstr "OPIS"
+
+#: vipw.8.xml:90(para)
+msgid ""
+"The <command>vipw</command> and <command>vigr</command> commands edits the "
+"files <filename>/etc/passwd</filename> and <filename>/etc/group</filename>, "
+"respectively. With the <option>-s</option> flag, they will edit the shadow "
+"versions of those files, <filename>/etc/shadow</filename> and <filename>/etc/"
+"gshadow</filename>, respectively. The programs will set the appropriate "
+"locks to prevent file corruption. When looking for an editor, the programs "
+"will first try the environment variable <envar>$VISUAL</envar>, then the "
+"environment variable <envar>$EDITOR</envar>, and finally the default editor, "
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"Polecenia <command>vipw</command> i <command>vigr</command> umożliwiają "
+"modyfikację plików odpowiednio <filename>/etc/passwd</filename> i <filename>/"
+"etc/group</filename>. Przy zastosowaniu flagi <option>-s</option> modyfikują "
+"także dodatkowe wersje chronione tych plików - odpowiednio <filename>/etc/"
+"shadow</filename> i <filename>/etc/gshadow</filename>. Dla ochrony przed "
+"uszkodzeniem w trakcie modyfikacji tych plików programy te ustawiają "
+"odpowiednie blokady. Szukając edytora programy te używają w pierwszej "
+"kolejności zmiennej środowiska <envar>$VISUAL</envar>, a następnie <envar>"
+"$EDITOR</envar>, a na końcu a na końcu domyślnego edytora "
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: vipw.8.xml:107(title) usermod.8.xml:94(title) userdel.8.xml:93(title)
+#: useradd.8.xml:126(title) su.1.xml:144(title) pwconv.8.xml:187(title)
+#: pwck.8.xml:176(title) passwd.1.xml:174(title) newusers.8.xml:266(title)
+#: login.1.xml:210(title) lastlog.8.xml:92(title) grpck.8.xml:147(title)
+#: groupmod.8.xml:89(title) groupmems.8.xml:100(title) groupdel.8.xml:88(title)
+#: groupadd.8.xml:93(title) gpasswd.1.xml:134(title) faillog.8.xml:89(title)
+#: expiry.1.xml:91(title) chsh.1.xml:95(title) chpasswd.8.xml:130(title)
+#: chgpasswd.8.xml:105(title) chfn.1.xml:111(title) chage.1.xml:91(title)
+msgid "OPTIONS"
+msgstr "OPCJE"
+
+#: vipw.8.xml:108(para)
+msgid ""
+"The options which apply to the <command>vipw</command> and <command>vigr</"
+"command> commands are:"
+msgstr ""
+"Polecenia <command>vipw</command> i <command>vigr</command> posiadają "
+"następujące opcje:Polecenia <command>vipw</command> i <command>vigr</"
+"command> posiadają następujące opcje:"
+
+#: vipw.8.xml:114(term)
+msgid "<option>-g</option>, <option>--group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+#: vipw.8.xml:116(para)
+msgid "Edit group database."
+msgstr "Edycja bazy grup."
+
+#: vipw.8.xml:120(term) userdel.8.xml:123(term) useradd.8.xml:278(term)
+#: pwconv.8.xml:195(term) pwck.8.xml:196(term) passwd.1.xml:214(term)
+#: newusers.8.xml:296(term) lastlog.8.xml:119(term) grpck.8.xml:157(term)
+#: groupmod.8.xml:129(term) groupmems.8.xml:142(term) groupdel.8.xml:95(term)
+#: groupadd.8.xml:131(term) gpasswd.1.xml:173(term) faillog.8.xml:122(term)
+#: expiry.1.xml:112(term) chsh.1.xml:101(term) chpasswd.8.xml:171(term)
+#: chgpasswd.8.xml:131(term) chage.1.xml:129(term)
+msgid "<option>-h</option>, <option>--help</option>"
+msgstr "<option>-h</option>, <option>--help</option>"
+
+#: vipw.8.xml:122(para) userdel.8.xml:125(para) useradd.8.xml:280(para)
+#: pwconv.8.xml:197(para) pwck.8.xml:198(para) passwd.1.xml:216(para)
+#: newusers.8.xml:298(para) lastlog.8.xml:123(para) grpck.8.xml:159(para)
+#: groupmod.8.xml:131(para) groupmems.8.xml:144(para) groupdel.8.xml:97(para)
+#: groupadd.8.xml:133(para) gpasswd.1.xml:175(para) faillog.8.xml:124(para)
+#: expiry.1.xml:114(para) chsh.1.xml:103(para) chpasswd.8.xml:173(para)
+#: chgpasswd.8.xml:133(para) chfn.1.xml:169(para) chage.1.xml:131(para)
+msgid "Display help message and exit."
+msgstr "Wyświetlenie komunikatu pomocy i zakończenie działania."
+
+#: vipw.8.xml:126(term)
+msgid "<option>-p</option>, <option>--passwd</option>"
+msgstr "<option>-p</option>, <option>--passwd</option>"
+
+#: vipw.8.xml:128(para)
+msgid "Edit passwd database."
+msgstr "Edycja bazy passwd."
+
+#: vipw.8.xml:132(term) pwck.8.xml:202(term) passwd.1.xml:281(term)
+msgid "<option>-q</option>, <option>--quiet</option>"
+msgstr "<option>-q</option>, <option>--quiet</option>"
+
+#: vipw.8.xml:134(para) passwd.1.xml:285(para)
+msgid "Quiet mode."
+msgstr "Cichy tryb pracy."
+
+#: vipw.8.xml:138(term) usermod.8.xml:322(term) userdel.8.xml:146(term)
+#: useradd.8.xml:457(term) pwconv.8.xml:201(term) pwck.8.xml:219(term)
+#: passwd.1.xml:301(term) newusers.8.xml:321(term) lastlog.8.xml:127(term)
+#: grpck.8.xml:173(term) groupmod.8.xml:178(term) groupmems.8.xml:165(term)
+#: groupdel.8.xml:101(term) groupadd.8.xml:204(term) faillog.8.xml:180(term)
+#: chsh.1.xml:107(term) chpasswd.8.xml:188(term) chgpasswd.8.xml:146(term)
+#: chfn.1.xml:153(term) chage.1.xml:203(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_DIR</"
+#| "replaceable>"
+msgid ""
+"<option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home</option>&nbsp;<replaceable>KAT_DOMOWY</"
+"replaceable>"
+
+#: vipw.8.xml:142(para) usermod.8.xml:326(para) userdel.8.xml:150(para)
+#: useradd.8.xml:461(para) pwconv.8.xml:205(para) pwck.8.xml:223(para)
+#: passwd.1.xml:305(para) newusers.8.xml:325(para) lastlog.8.xml:131(para)
+#: grpck.8.xml:177(para) groupmod.8.xml:182(para) groupmems.8.xml:169(para)
+#: groupdel.8.xml:105(para) groupadd.8.xml:208(para) gpasswd.1.xml:185(para)
+#: faillog.8.xml:184(para) chsh.1.xml:111(para) chpasswd.8.xml:192(para)
+#: chgpasswd.8.xml:150(para) chfn.1.xml:157(para) chage.1.xml:207(para)
+#, fuzzy
+msgid ""
+"Apply changes in the <replaceable>CHROOT_DIR</replaceable> directory and use "
+"the configuration files from the <replaceable>CHROOT_DIR</replaceable> "
+"directory."
+msgstr ""
+"Nazwa grupy zostanie zmieniona z <replaceable>GRUPA</replaceable> na nazwę "
+"<replaceable>NOWA_GRUPA</replaceable>."
+
+#: vipw.8.xml:150(term)
+msgid "<option>-s</option>, <option>--shadow</option>"
+msgstr "<option>-s</option>, <option>--shadow</option>"
+
+#: vipw.8.xml:152(para)
+msgid "Edit shadow or gshadow database."
+msgstr "Edycja bazy shadow lub gshadow."
+
+#: vipw.8.xml:156(term)
+#, fuzzy
+#| msgid "<option>-q</option>, <option>--quiet</option>"
+msgid "<option>-u</option>, <option>--user</option>"
+msgstr "<option>-q</option>, <option>--quiet</option>"
+
+#: vipw.8.xml:158(para)
+msgid "Indicates which user's tcb shadow file to edit."
+msgstr ""
+
+#: vipw.8.xml:165(title) usermod.8.xml:524(title) userdel.8.xml:188(title)
+#: useradd.8.xml:676(title) su.1.xml:338(title) sg.1.xml:98(title)
+#: pwconv.8.xml:227(title) pwck.8.xml:262(title) passwd.1.xml:395(title)
+#: newusers.8.xml:375(title) newgrp.1.xml:109(title) login.1.xml:294(title)
+#: lastlog.8.xml:205(title) grpck.8.xml:209(title) groupmod.8.xml:210(title)
+#: groupmems.8.xml:199(title) groupdel.8.xml:145(title)
+#: groupadd.8.xml:236(title) gpasswd.1.xml:264(title) chsh.1.xml:154(title)
+#: chpasswd.8.xml:239(title) chgpasswd.8.xml:198(title) chfn.1.xml:193(title)
+#: chage.1.xml:250(title)
+msgid "CONFIGURATION"
+msgstr ""
+
+#: vipw.8.xml:166(para) usermod.8.xml:525(para) userdel.8.xml:189(para)
+#: useradd.8.xml:677(para) su.1.xml:339(para) sg.1.xml:99(para)
+#: pwck.8.xml:263(para) passwd.1.xml:396(para) newusers.8.xml:376(para)
+#: newgrp.1.xml:110(para) login.1.xml:295(para) lastlog.8.xml:206(para)
+#: grpck.8.xml:210(para) groupmod.8.xml:211(para) groupmems.8.xml:200(para)
+#: groupdel.8.xml:146(para) groupadd.8.xml:237(para) gpasswd.1.xml:265(para)
+#: chsh.1.xml:155(para) chpasswd.8.xml:240(para) chgpasswd.8.xml:199(para)
+#: chfn.1.xml:194(para) chage.1.xml:251(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of this tool:"
+msgstr ""
+
+#: vipw.8.xml:30(term) usermod.8.xml:30(term) userdel.8.xml:30(term)
+#: useradd.8.xml:30(term) pwconv.8.xml:30(term) pwck.8.xml:30(term)
+#: login.defs.5.xml:30(term) chage.1.xml:30(term)
+#, fuzzy
+msgid "<option>USE_TCB</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: vipw.8.xml:32(para) usermod.8.xml:32(para) userdel.8.xml:32(para)
+#: useradd.8.xml:32(para) pwconv.8.xml:32(para) pwck.8.xml:32(para)
+#: login.defs.5.xml:32(para) chage.1.xml:32(para)
+#, fuzzy
+msgid ""
+"If <replaceable>yes</replaceable>, the <citerefentry><refentrytitle>tcb</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry> password shadowing "
+"scheme will be used."
+msgstr ""
+"Nowa wartość pola komentarza dla danego użytkownika w pliku haseł. Zwykle "
+"jest zmieniana przy pomocy polecenia <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+#: vipw.8.xml:177(title)
+msgid "ENVIRONMENT"
+msgstr ""
+
+#: vipw.8.xml:180(option)
+msgid "VISUAL"
+msgstr ""
+
+#: vipw.8.xml:182(para)
+msgid "Editor to be used."
+msgstr ""
+
+#: vipw.8.xml:186(option)
+msgid "EDITOR"
+msgstr ""
+
+#: vipw.8.xml:188(para)
+msgid "Editor to be used if <option>VISUAL</option> is not set."
+msgstr ""
+
+#: vipw.8.xml:195(title) usermod.8.xml:542(title) userdel.8.xml:205(title)
+#: useradd.8.xml:706(title) suauth.5.xml:193(title) su.1.xml:366(title)
+#: sg.1.xml:110(title) shadow.5.xml:255(title) shadow.3.xml:226(title)
+#: pwconv.8.xml:250(title) pwck.8.xml:279(title) porttime.5.xml:130(title)
+#: passwd.5.xml:160(title) passwd.1.xml:413(title) newusers.8.xml:411(title)
+#: newgrp.1.xml:121(title) logoutd.8.xml:89(title)
+#: login.access.5.xml:121(title) login.1.xml:338(title) limits.5.xml:196(title)
+#: lastlog.8.xml:217(title) gshadow.5.xml:156(title) grpck.8.xml:221(title)
+#: groups.1.xml:100(title) groupmod.8.xml:222(title) groupmems.8.xml:211(title)
+#: groupdel.8.xml:157(title) groupadd.8.xml:250(title) gpasswd.1.xml:279(title)
+#: faillog.8.xml:243(title) faillog.5.xml:96(title) expiry.1.xml:121(title)
+#: chsh.1.xml:167(title) chpasswd.8.xml:255(title) chgpasswd.8.xml:213(title)
+#: chfn.1.xml:207(title) chage.1.xml:262(title)
+msgid "FILES"
+msgstr "PLIKI"
+
+#: vipw.8.xml:198(filename) usermod.8.xml:545(filename)
+#: userdel.8.xml:208(filename) useradd.8.xml:721(filename)
+#: sg.1.xml:125(filename) pwck.8.xml:282(filename) newusers.8.xml:426(filename)
+#: newgrp.1.xml:136(filename) gshadow.5.xml:159(filename)
+#: grpck.8.xml:224(filename) groups.1.xml:103(filename)
+#: groupmod.8.xml:225(filename) groupmems.8.xml:214(filename)
+#: groupdel.8.xml:160(filename) groupadd.8.xml:253(filename)
+#: gpasswd.1.xml:72(filename) gpasswd.1.xml:75(filename)
+#: gpasswd.1.xml:282(filename) chgpasswd.8.xml:216(filename)
+msgid "/etc/group"
+msgstr "/etc/group"
+
+#: vipw.8.xml:200(para) usermod.8.xml:547(para) userdel.8.xml:210(para)
+#: useradd.8.xml:723(para) sg.1.xml:127(para) pwck.8.xml:284(para)
+#: newusers.8.xml:428(para) newgrp.1.xml:138(para) gshadow.5.xml:161(para)
+#: grpck.8.xml:226(para) groups.1.xml:105(para) groupmod.8.xml:227(para)
+#: groupmems.8.xml:216(para) groupdel.8.xml:162(para) groupadd.8.xml:255(para)
+#: gpasswd.1.xml:284(para) chgpasswd.8.xml:218(para)
+msgid "Group account information."
+msgstr "Informacje o grupach użytkowników."
+
+#: vipw.8.xml:204(filename) usermod.8.xml:551(filename)
+#: useradd.8.xml:727(filename) sg.1.xml:131(filename)
+#: newusers.8.xml:432(filename) newgrp.1.xml:142(filename)
+#: gshadow.5.xml:165(filename) grpck.8.xml:230(filename)
+#: groupmod.8.xml:231(filename) groupmems.8.xml:220(filename)
+#: groupdel.8.xml:166(filename) groupadd.8.xml:259(filename)
+#: gpasswd.1.xml:76(filename) gpasswd.1.xml:288(filename)
+#: chgpasswd.8.xml:222(filename)
+msgid "/etc/gshadow"
+msgstr "/etc/gshadow"
+
+#: vipw.8.xml:206(para) usermod.8.xml:553(para) useradd.8.xml:729(para)
+#: sg.1.xml:133(para) newusers.8.xml:434(para) newgrp.1.xml:144(para)
+#: gshadow.5.xml:167(para) grpck.8.xml:232(para) groupmod.8.xml:233(para)
+#: groupdel.8.xml:168(para) groupadd.8.xml:261(para) gpasswd.1.xml:290(para)
+#: chgpasswd.8.xml:224(para)
+msgid "Secure group account information."
+msgstr "Informacje chronione o grupach użytkowników."
+
+#: vipw.8.xml:210(filename) usermod.8.xml:563(filename)
+#: userdel.8.xml:220(filename) useradd.8.xml:709(filename)
+#: su.1.xml:369(filename) sg.1.xml:113(filename) shadow.5.xml:258(filename)
+#: pwck.8.xml:288(filename) passwd.5.xml:163(filename)
+#: passwd.1.xml:416(filename) newusers.8.xml:414(filename)
+#: newgrp.1.xml:124(filename) login.1.xml:353(filename)
+#: grpck.8.xml:236(filename) groupmod.8.xml:243(filename)
+#: expiry.1.xml:124(filename) chsh.1.xml:170(filename)
+#: chpasswd.8.xml:258(filename) chfn.1.xml:216(filename)
+#: chage.1.xml:266(filename)
+msgid "/etc/passwd"
+msgstr "/etc/passwd"
+
+#: vipw.8.xml:212(para) usermod.8.xml:565(para) userdel.8.xml:222(para)
+#: useradd.8.xml:711(para) su.1.xml:371(para) sg.1.xml:115(para)
+#: shadow.5.xml:260(para) pwck.8.xml:290(para) passwd.5.xml:165(para)
+#: passwd.1.xml:418(para) newusers.8.xml:416(para) newgrp.1.xml:126(para)
+#: login.1.xml:355(para) grpck.8.xml:238(para) groupmod.8.xml:245(para)
+#: expiry.1.xml:126(para) chsh.1.xml:172(para) chpasswd.8.xml:260(para)
+#: chfn.1.xml:218(para) chage.1.xml:269(para)
+msgid "User account information."
+msgstr "Informacja o kontach użytkowników."
+
+#: vipw.8.xml:216(filename) usermod.8.xml:569(filename)
+#: userdel.8.xml:226(filename) useradd.8.xml:715(filename)
+#: su.1.xml:375(filename) sg.1.xml:119(filename) shadow.5.xml:264(filename)
+#: shadow.3.xml:229(filename) pwck.8.xml:294(filename)
+#: passwd.5.xml:169(filename) passwd.1.xml:422(filename)
+#: newusers.8.xml:420(filename) newgrp.1.xml:130(filename)
+#: login.1.xml:359(filename) expiry.1.xml:130(filename)
+#: chpasswd.8.xml:264(filename) chage.1.xml:274(filename)
+msgid "/etc/shadow"
+msgstr "/etc/shadow"
+
+#: vipw.8.xml:218(para) usermod.8.xml:571(para) userdel.8.xml:228(para)
+#: useradd.8.xml:717(para) su.1.xml:377(para) sg.1.xml:121(para)
+#: shadow.5.xml:266(para) shadow.3.xml:231(para) pwck.8.xml:296(para)
+#: passwd.1.xml:424(para) newusers.8.xml:422(para) newgrp.1.xml:132(para)
+#: login.1.xml:361(para) expiry.1.xml:132(para) chpasswd.8.xml:266(para)
+#: chage.1.xml:277(para)
+msgid "Secure user account information."
+msgstr "Informacje chronione o użytkownikach."
+
+#: vipw.8.xml:225(title) usermod.8.xml:590(title) userdel.8.xml:325(title)
+#: useradd.8.xml:835(title) suauth.5.xml:222(title) su.1.xml:437(title)
+#: sg.1.xml:140(title) shadow.5.xml:283(title) shadow.3.xml:238(title)
+#: pwconv.8.xml:262(title) pwck.8.xml:354(title) porttime.5.xml:142(title)
+#: passwd.5.xml:188(title) passwd.1.xml:494(title) nologin.8.xml:81(title)
+#: newusers.8.xml:465(title) newgrp.1.xml:151(title)
+#: login.defs.5.xml:547(title) login.access.5.xml:133(title)
+#: login.1.xml:398(title) limits.5.xml:206(title) gshadow.5.xml:174(title)
+#: grpck.8.xml:290(title) groups.1.xml:112(title) groupmod.8.xml:321(title)
+#: groupmems.8.xml:229(title) groupdel.8.xml:214(title)
+#: groupadd.8.xml:341(title) gpasswd.1.xml:297(title) faillog.8.xml:255(title)
+#: faillog.5.xml:108(title) expiry.1.xml:139(title) chsh.1.xml:191(title)
+#: chpasswd.8.xml:285(title) chgpasswd.8.xml:237(title) chfn.1.xml:225(title)
+#: chage.1.xml:317(title)
+msgid "SEE ALSO"
+msgstr "ZOBACZ TAKŻE"
+
+#: vipw.8.xml:226(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>login</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>"
+msgid ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry condition=\"tcb"
+"\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+"condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>"
+
+#: usermod.8.xml:46(firstname) userdel.8.xml:45(firstname)
+#: useradd.8.xml:58(firstname) su.1.xml:56(firstname) sg.1.xml:40(firstname)
+#: shadow.5.xml:39(firstname) shadow.3.xml:39(firstname)
+#: pwck.8.xml:45(firstname) porttime.5.xml:39(firstname)
+#: passwd.5.xml:39(firstname) passwd.1.xml:46(firstname)
+#: newusers.8.xml:55(firstname) newgrp.1.xml:40(firstname)
+#: logoutd.8.xml:39(firstname) login.defs.5.xml:106(firstname)
+#: login.1.xml:72(firstname) lastlog.8.xml:41(firstname)
+#: grpck.8.xml:40(firstname) groups.1.xml:39(firstname)
+#: groupmod.8.xml:40(firstname) groupdel.8.xml:40(firstname)
+#: groupadd.8.xml:42(firstname) faillog.8.xml:39(firstname)
+#: faillog.5.xml:39(firstname) expiry.1.xml:43(firstname)
+#: chsh.1.xml:42(firstname) chpasswd.8.xml:43(firstname)
+#: chfn.1.xml:42(firstname) chage.1.xml:40(firstname)
+msgid "Julianne Frances"
+msgstr ""
+
+#: usermod.8.xml:47(surname) userdel.8.xml:46(surname)
+#: useradd.8.xml:59(surname) su.1.xml:57(surname) sg.1.xml:41(surname)
+#: shadow.5.xml:40(surname) shadow.3.xml:40(surname) pwck.8.xml:46(surname)
+#: porttime.5.xml:40(surname) passwd.5.xml:40(surname) passwd.1.xml:47(surname)
+#: newusers.8.xml:56(surname) newgrp.1.xml:41(surname)
+#: logoutd.8.xml:40(surname) login.defs.5.xml:107(surname)
+#: login.1.xml:73(surname) lastlog.8.xml:42(surname) grpck.8.xml:41(surname)
+#: groups.1.xml:40(surname) groupmod.8.xml:41(surname)
+#: groupdel.8.xml:41(surname) groupadd.8.xml:43(surname)
+#: faillog.8.xml:40(surname) faillog.5.xml:40(surname) expiry.1.xml:44(surname)
+#: chsh.1.xml:43(surname) chpasswd.8.xml:44(surname) chfn.1.xml:43(surname)
+#: chage.1.xml:41(surname)
+msgid "Haugh"
+msgstr ""
+
+#: usermod.8.xml:48(contrib) userdel.8.xml:47(contrib)
+#: useradd.8.xml:60(contrib) sg.1.xml:42(contrib) newusers.8.xml:57(contrib)
+#: newgrp.1.xml:42(contrib) logoutd.8.xml:41(contrib)
+#: login.defs.5.xml:108(contrib) groups.1.xml:41(contrib)
+#: groupmod.8.xml:42(contrib) groupdel.8.xml:42(contrib)
+#: groupadd.8.xml:44(contrib) chpasswd.8.xml:45(contrib)
+msgid "Creation, 1991"
+msgstr ""
+
+#: usermod.8.xml:64(refentrytitle) usermod.8.xml:71(refname)
+#: usermod.8.xml:77(command) login.defs.5.xml:510(term)
+msgid "usermod"
+msgstr "usermod"
+
+#: usermod.8.xml:72(refpurpose)
+msgid "modify a user account"
+msgstr "zmiana danych konta użytkownika"
+
+#: usermod.8.xml:81(replaceable) userdel.8.xml:78(replaceable)
+#: useradd.8.xml:92(replaceable) passwd.1.xml:82(replaceable)
+#: chsh.1.xml:78(replaceable) chfn.1.xml:78(replaceable)
+#: chage.1.xml:75(replaceable)
+msgid "LOGIN"
+msgstr "LOGIN"
+
+#: usermod.8.xml:87(para)
+msgid ""
+"The <command>usermod</command> command modifies the system account files to "
+"reflect the changes that are specified on the command line."
+msgstr ""
+"Polecenie <command>usermod</command> zmienia systemowe pliki kont, "
+"odzwierciedlając zmiany podane w wierszu poleceń."
+
+#: usermod.8.xml:95(para)
+msgid "The options which apply to the <command>usermod</command> command are:"
+msgstr "Polecenie <command>usermod</command> posiada następujące opcje:"
+
+#: usermod.8.xml:101(term)
+msgid "<option>-a</option>, <option>--append</option>"
+msgstr "<option>-a</option>, <option>--all</option>"
+
+#: usermod.8.xml:105(para)
+#, fuzzy
+#| msgid ""
+#| "Add the user to the supplemental group(s). Use only with <option>-G</"
+#| "option> option."
+msgid ""
+"Add the user to the supplementary group(s). Use only with the <option>-G</"
+"option> option."
+msgstr ""
+"Dodaj użytkownika do dodatkowej grupy lub grup. Może być użyte tylko z opcją "
+"<option>-G</option>."
+
+#: usermod.8.xml:112(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-b</option>, <option>--badnames</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: usermod.8.xml:116(para) useradd.8.xml:135(para) pwck.8.xml:190(para)
+#: newusers.8.xml:276(para)
+msgid "Allow names that do not conform to standards."
+msgstr ""
+
+#: usermod.8.xml:122(term) useradd.8.xml:162(term)
+msgid ""
+"<option>-c</option>, <option>--comment</option>&nbsp;<replaceable>COMMENT</"
+"replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--comment</option>&nbsp;<replaceable>KOMENTARZ</"
+"replaceable>"
+
+#: usermod.8.xml:126(para)
+msgid ""
+"The new value of the user's password file comment field. It is normally "
+"modified using the <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> utility."
+msgstr ""
+"Nowa wartość pola komentarza dla danego użytkownika w pliku haseł. Zwykle "
+"jest zmieniana przy pomocy polecenia <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+#: usermod.8.xml:135(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home-dir</option>&nbsp;"
+#| "<replaceable>HOME_DIR</replaceable>"
+msgid ""
+"<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home-dir</option>&nbsp;"
+"<replaceable>KAT_DOMOWY</replaceable>"
+
+#: usermod.8.xml:139(para)
+msgid "The user's new login directory."
+msgstr ""
+
+#: usermod.8.xml:142(para)
+#, fuzzy
+#| msgid ""
+#| "The user's new login directory. If the <option>-m</option> option is "
+#| "given the contents of the current home directory will be moved to the new "
+#| "home directory, which is created if it does not already exist."
+msgid ""
+"If the <option>-m</option> option is given, the contents of the current home "
+"directory will be moved to the new home directory, which is created if it "
+"does not already exist."
+msgstr ""
+"Nowy katalog domowy użytkownika. Jeżeli podano opcję <option>-m</option>, to "
+"zawartość aktualnego katalogu domowego zostanie przesunięta do nowego "
+"katalogu. Nowy katalog domowy jest tworzony jeśli nie istnieje."
+
+#: usermod.8.xml:151(term) useradd.8.xml:200(term) useradd.8.xml:577(term)
+msgid ""
+"<option>-e</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>EXPIRE_DATE</replaceable>"
+msgstr ""
+"<option>-e</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>DATA_WAŻN</replaceable>"
+
+#: usermod.8.xml:155(para) useradd.8.xml:204(para)
+msgid ""
+"The date on which the user account will be disabled. The date is specified "
+"in the format <emphasis remap=\"I\">YYYY-MM-DD</emphasis>."
+msgstr ""
+"Data, od której konto danego użytkownika zostanie wyłączone. Data podawana "
+"jest w formacie <emphasis remap=\"I\">MM/DD/RR</emphasis>."
+
+#: usermod.8.xml:159(para)
+msgid ""
+"An empty <replaceable>EXPIRE_DATE</replaceable> argument will disable the "
+"expiration of the account."
+msgstr ""
+
+#: usermod.8.xml:163(para) usermod.8.xml:184(para)
+msgid ""
+"This option requires a <filename>/etc/shadow</filename> file. A <filename>/"
+"etc/shadow</filename> entry will be created if there were none."
+msgstr ""
+
+#: usermod.8.xml:171(term) useradd.8.xml:217(term) useradd.8.xml:589(term)
+msgid ""
+"<option>-f</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-f</option>, <option>--inactive</option>&nbsp;"
+"<replaceable>NIEAKTYWNE</replaceable>"
+
+#: usermod.8.xml:175(para)
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled."
+msgstr ""
+
+#: usermod.8.xml:179(para)
+#, fuzzy
+#| msgid ""
+#| "The number of days after a password expires until the account is "
+#| "permanently disabled. A value of 0 disables the account as soon as the "
+#| "password has expired, and a value of -1 disables the feature. The default "
+#| "value is -1."
+msgid ""
+"A value of 0 disables the account as soon as the password has expired, and a "
+"value of -1 disables the feature."
+msgstr ""
+"Liczba dni po wygaśnięciu hasła do stałego wyłączenia konta. Wartość 0 "
+"wyłącza konto natychmiast po przeterminowaniu hasła, zaś wartość -1 wyłącza "
+"tę cechę. Domyślną wartością jest -1."
+
+#: usermod.8.xml:192(term) useradd.8.xml:236(term) useradd.8.xml:604(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GROUP</"
+"replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GRUPA</"
+"replaceable>"
+
+#: usermod.8.xml:196(para)
+#, fuzzy
+#| msgid ""
+#| "The group name or number of the user's new initial login group. The group "
+#| "name must exist. A group number must refer to an already existing group. "
+#| "The default group number is 1."
+msgid ""
+"The group name or number of the user's new initial login group. The group "
+"must exist."
+msgstr ""
+"Nazwa lub numer początkowej grupy logowania użytkownika. Nazwa grupy musi "
+"istnieć. Numer grupy musi odnosić się do już istniejącej grupy. Domyślnym "
+"numerem grupy jest 1."
+
+#: usermod.8.xml:200(para)
+msgid ""
+"Any file from the user's home directory owned by the previous primary group "
+"of the user will be owned by this new group."
+msgstr ""
+
+#: usermod.8.xml:204(para)
+msgid ""
+"The group ownership of files outside of the user's home directory must be "
+"fixed manually."
+msgstr ""
+
+#: usermod.8.xml:211(term) useradd.8.xml:263(term)
+msgid ""
+"<option>-G</option>, <option>--groups</option>&nbsp;<replaceable>GROUP1</"
+"replaceable>[<emphasis remap=\"I\">,GROUP2,...</emphasis>[<emphasis remap=\"I"
+"\">,GROUPN</emphasis>]]]"
+msgstr ""
+"<option>-G</option>, <option>--groups</option>&nbsp;<replaceable>GRUPA1</"
+"replaceable>[<emphasis remap=\"I\">,GRUPA2,...</emphasis>[<emphasis remap=\"I"
+"\">,GRUPAN</emphasis>]]]"
+
+#: usermod.8.xml:215(para)
+#, fuzzy
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option."
+msgstr ""
+"Lista dodatkowych grup, do których również należy użytkownik. Każda grupa "
+"oddzielona jest od następnej przecinkiem, bez wtrąconej spacji. Do grup "
+"odnoszą się te same ograniczenia, które obowiązują przy grupie podanej w "
+"opcji <option>-g</option>. Jeżeli użytkownik jest obecnie członkiem grupy, "
+"której nie podano na liście, to zostanie z niej usunięty."
+
+#: usermod.8.xml:222(para)
+#, fuzzy
+msgid ""
+"If the user is currently a member of a group which is not listed, the user "
+"will be removed from the group. This behaviour can be changed via the "
+"<option>-a</option> option, which appends the user to the current "
+"supplementary group list."
+msgstr ""
+"Lista dodatkowych grup, do których również należy użytkownik. Każda grupa "
+"oddzielona jest od następnej przecinkiem, bez wtrąconej spacji. Do grup "
+"odnoszą się te same ograniczenia, które obowiązują przy grupie podanej w "
+"opcji <option>-g</option>. Jeżeli użytkownik jest obecnie członkiem grupy, "
+"której nie podano na liście, to zostanie z niej usunięty."
+
+#: usermod.8.xml:231(term)
+msgid ""
+"<option>-l</option>, <option>--login</option>&nbsp;<replaceable>NEW_LOGIN</"
+"replaceable>"
+msgstr ""
+"<option>-l</option>, <option>--login</option>&nbsp;<replaceable>NOWY_LOGIN</"
+"replaceable>"
+
+#: usermod.8.xml:235(para)
+#, fuzzy
+msgid ""
+"The name of the user will be changed from <replaceable>LOGIN</replaceable> "
+"to <replaceable>NEW_LOGIN</replaceable>. Nothing else is changed. In "
+"particular, the user's home directory or mail spool should probably be "
+"renamed manually to reflect the new login name."
+msgstr ""
+"Nazwa użytkownika zostanie zmieniona z <emphasis remap=\"I\">LOGIN</"
+"emphasis> na <emphasis remap=\"I\">NOWY_LOGIN</emphasis>. Nic więcej nie "
+"jest zmieniane. W szczególności, prawdopodobnie powinna zostać zmieniona "
+"nazwa katalogu domowego użytkownika, tak by odzwierciedlała nową nazwę "
+"użytkownika."
+
+#: usermod.8.xml:245(term)
+msgid "<option>-L</option>, <option>--lock</option>"
+msgstr "<option>-L</option>, <option>--lock</option>"
+
+#: usermod.8.xml:249(para)
+msgid ""
+"Lock a user's password. This puts a '!' in front of the encrypted password, "
+"effectively disabling the password. You can't use this option with <option>-"
+"p</option> or <option>-U</option>."
+msgstr ""
+"Zablokuj hasło użytkownika. Opcja ta powoduje wstawienie ’!’ na początku "
+"zakodowanego hasła. Opcji tej nie można używać z opcjami <option>-p</option> "
+"or <option>-U</option>."
+
+#: usermod.8.xml:255(para)
+msgid ""
+"Note: if you wish to lock the account (not only access with a password), you "
+"should also set the <replaceable>EXPIRE_DATE</replaceable> to "
+"<replaceable>1</replaceable>."
+msgstr ""
+
+#: usermod.8.xml:264(term)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid "<option>-m</option>, <option>--move-home</option>"
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: usermod.8.xml:268(para)
+msgid "Move the content of the user's home directory to the new location."
+msgstr ""
+
+#: usermod.8.xml:272(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid ""
+"This option is only valid in combination with the <option>-d</option> (or "
+"<option>--home</option>) option."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: usermod.8.xml:276(para)
+msgid ""
+"<command>usermod</command> will try to adapt the ownership of the files and "
+"to copy the modes, ACL and extended attributes, but manual changes might be "
+"needed afterwards."
+msgstr ""
+
+#: usermod.8.xml:284(term) useradd.8.xml:397(term) groupmod.8.xml:146(term)
+#: groupadd.8.xml:157(term)
+msgid "<option>-o</option>, <option>--non-unique</option>"
+msgstr "<option>-o</option>, <option>--non-unique</option>"
+
+#: usermod.8.xml:288(para)
+msgid ""
+"When used with the <option>-u</option> option, this option allows to change "
+"the user ID to a non-unique value."
+msgstr ""
+
+#: usermod.8.xml:295(term) useradd.8.xml:409(term) groupmod.8.xml:157(term)
+#: groupadd.8.xml:167(term)
+msgid ""
+"<option>-p</option>, <option>--password</option>&nbsp;<replaceable>PASSWORD</"
+"replaceable>"
+msgstr ""
+"<option>-p</option>, <option>--password</option>&nbsp;<replaceable>HASŁO</"
+"replaceable>"
+
+#: usermod.8.xml:299(para) groupmod.8.xml:161(para)
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>."
+msgstr ""
+
+#: usermod.8.xml:304(para) useradd.8.xml:418(para) groupmod.8.xml:166(para)
+#: groupadd.8.xml:176(para)
+msgid ""
+"<emphasis role=\"bold\">Note:</emphasis> This option is not recommended "
+"because the password (or encrypted password) will be visible by users "
+"listing the processes."
+msgstr ""
+
+#: usermod.8.xml:309(para)
+msgid ""
+"The password will be written in the local <filename>/etc/passwd</filename> "
+"or <filename>/etc/shadow</filename> file. This might differ from the "
+"password database configured in your PAM configuration."
+msgstr ""
+
+#: usermod.8.xml:315(para) useradd.8.xml:423(para) groupmod.8.xml:171(para)
+#: groupadd.8.xml:181(para)
+msgid ""
+"You should make sure the password respects the system's password policy."
+msgstr ""
+
+#: usermod.8.xml:334(term) userdel.8.xml:158(term) useradd.8.xml:469(term)
+#: groupmod.8.xml:190(term) groupdel.8.xml:113(term) groupadd.8.xml:216(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home-dir</option>&nbsp;"
+#| "<replaceable>HOME_DIR</replaceable>"
+msgid ""
+"<option>-P</option>, <option>--prefix</option>&nbsp;<replaceable>PREFIX_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home-dir</option>&nbsp;"
+"<replaceable>KAT_DOMOWY</replaceable>"
+
+#: usermod.8.xml:338(para) userdel.8.xml:162(para) useradd.8.xml:473(para)
+#: groupmod.8.xml:194(para) groupdel.8.xml:117(para) groupadd.8.xml:220(para)
+msgid ""
+"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."
+msgstr ""
+
+#: usermod.8.xml:351(term) useradd.8.xml:486(term) useradd.8.xml:624(term)
+#: su.1.xml:186(term) chsh.1.xml:119(term)
+msgid ""
+"<option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SHELL</"
+"replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SHELL</"
+"replaceable>"
+
+#: usermod.8.xml:355(para) chsh.1.xml:123(para)
+msgid ""
+"The name of the user's new login shell. Setting this field to blank causes "
+"the system to select the default login shell."
+msgstr ""
+"Nazwa nowej powłoki (shell) użytkownika. Ustawienie tego pola na puste "
+"powoduje, że system wybierze domyślną powłokę logowania."
+
+#: usermod.8.xml:362(term) useradd.8.xml:500(term)
+msgid ""
+"<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+"replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+"replaceable>"
+
+#: usermod.8.xml:366(para)
+msgid "The new numerical value of the user's ID."
+msgstr ""
+
+#: usermod.8.xml:369(para)
+msgid ""
+"This value must be unique, unless the <option>-o</option> option is used. "
+"The value must be non-negative."
+msgstr ""
+
+#: usermod.8.xml:374(para)
+msgid ""
+"The user's mailbox, and any files which the user owns and which are located "
+"in the user's home directory will have the file user ID changed "
+"automatically."
+msgstr ""
+
+#: usermod.8.xml:379(para)
+msgid ""
+"The ownership of files outside of the user's home directory must be fixed "
+"manually."
+msgstr ""
+
+#: usermod.8.xml:383(para)
+msgid ""
+"No checks will be performed with regard to the <option>UID_MIN</option>, "
+"<option>UID_MAX</option>, <option>SYS_UID_MIN</option>, or "
+"<option>SYS_UID_MAX</option> from <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: usermod.8.xml:392(term)
+msgid "<option>-U</option>, <option>--unlock</option>"
+msgstr "<option>-U</option>, <option>--unlock</option>"
+
+#: usermod.8.xml:396(para)
+msgid ""
+"Unlock a user's password. This removes the '!' in front of the encrypted "
+"password. You can't use this option with <option>-p</option> or <option>-L</"
+"option>."
+msgstr ""
+"Odblokowuje hasło użytkownika. Opcja ta powoduje usuniecie ’!’ z początku "
+"zakodowanego hasła. Opcji tej nie można używać z opcjami <option>-p</option> "
+"lub <option>-L</option>."
+
+#: usermod.8.xml:401(para)
+msgid ""
+"Note: if you wish to unlock the account (not only access with a password), "
+"you should also set the <replaceable>EXPIRE_DATE</replaceable> (for example "
+"to <replaceable>99999</replaceable>, or to the <option>EXPIRE</option> value "
+"from <filename>/etc/default/useradd</filename>)."
+msgstr ""
+
+#: usermod.8.xml:412(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
+#| "replaceable>=<replaceable>VALUE</replaceable>"
+msgid ""
+"<option>-v</option>, <option>--add-subuids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KLUCZ</"
+"replaceable>=<replaceable>WARTOŚĆ</replaceable>"
+
+#: usermod.8.xml:416(para)
+msgid "Add a range of subordinate uids to the user's account."
+msgstr ""
+
+#: usermod.8.xml:419(para) usermod.8.xml:457(para)
+msgid ""
+"This option may be specified multiple times to add multiple ranges to a "
+"users account."
+msgstr ""
+
+#: usermod.8.xml:422(para) usermod.8.xml:442(para)
+msgid ""
+"No checks will be performed with regard to <option>SUB_UID_MIN</option>, "
+"<option>SUB_UID_MAX</option>, or <option>SUB_UID_COUNT</option> from /etc/"
+"login.defs."
+msgstr ""
+
+#: usermod.8.xml:430(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
+#| "replaceable>=<replaceable>VALUE</replaceable>"
+msgid ""
+"<option>-V</option>, <option>--del-subuids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KLUCZ</"
+"replaceable>=<replaceable>WARTOŚĆ</replaceable>"
+
+#: usermod.8.xml:434(para)
+msgid "Remove a range of subordinate uids from the user's account."
+msgstr ""
+
+#: usermod.8.xml:437(para)
+msgid ""
+"This option may be specified multiple times to remove multiple ranges to a "
+"users account. When both <option>--del-subuids</option> and <option>--add-"
+"subuids</option> are specified, the removal of all subordinate uid ranges "
+"happens before any subordinate uid range is added."
+msgstr ""
+
+#: usermod.8.xml:450(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
+#| "replaceable>=<replaceable>VALUE</replaceable>"
+msgid ""
+"<option>-w</option>, <option>--add-subgids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KLUCZ</"
+"replaceable>=<replaceable>WARTOŚĆ</replaceable>"
+
+#: usermod.8.xml:454(para)
+msgid "Add a range of subordinate gids to the user's account."
+msgstr ""
+
+#: usermod.8.xml:460(para) usermod.8.xml:480(para)
+msgid ""
+"No checks will be performed with regard to <option>SUB_GID_MIN</option>, "
+"<option>SUB_GID_MAX</option>, or <option>SUB_GID_COUNT</option> from /etc/"
+"login.defs."
+msgstr ""
+
+#: usermod.8.xml:468(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
+#| "replaceable>=<replaceable>VALUE</replaceable>"
+msgid ""
+"<option>-W</option>, <option>--del-subgids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KLUCZ</"
+"replaceable>=<replaceable>WARTOŚĆ</replaceable>"
+
+#: usermod.8.xml:472(para)
+msgid "Remove a range of subordinate gids from the user's account."
+msgstr ""
+
+#: usermod.8.xml:475(para)
+msgid ""
+"This option may be specified multiple times to remove multiple ranges to a "
+"users account. When both <option>--del-subgids</option> and <option>--add-"
+"subgids</option> are specified, the removal of all subordinate gid ranges "
+"happens before any subordinate gid range is added."
+msgstr ""
+
+#: usermod.8.xml:488(term) useradd.8.xml:535(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SHELL</"
+#| "replaceable>"
+msgid ""
+"<option>-Z</option>, <option>--selinux-user</option>&nbsp;"
+"<replaceable>SEUSER</replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SHELL</"
+"replaceable>"
+
+#: usermod.8.xml:492(para)
+msgid "The new SELinux user for the user's login."
+msgstr ""
+
+#: usermod.8.xml:495(para)
+#, fuzzy
+msgid ""
+"A blank <replaceable>SEUSER</replaceable> will remove the SELinux user "
+"mapping for user <replaceable>LOGIN</replaceable> (if any)."
+msgstr ""
+"Nazwa grupy zostanie zmieniona z <replaceable>GRUPA</replaceable> na nazwę "
+"<replaceable>NOWA_GRUPA</replaceable>."
+
+#: usermod.8.xml:506(title) userdel.8.xml:298(title) useradd.8.xml:652(title)
+#: su.1.xml:330(title) shadow.3.xml:218(title) passwd.1.xml:377(title)
+#: newusers.8.xml:363(title) login.1.xml:260(title) lastlog.8.xml:229(title)
+#: groupdel.8.xml:133(title) groupadd.8.xml:274(title) gpasswd.1.xml:252(title)
+#: faillog.8.xml:232(title) chpasswd.8.xml:231(title)
+#: chgpasswd.8.xml:186(title)
+msgid "CAVEATS"
+msgstr "OSTRZEŻENIA"
+
+#: usermod.8.xml:507(para)
+msgid ""
+"You must make certain that the named user is not executing any processes "
+"when this command is being executed if the user's numerical user ID, the "
+"user's name, or the user's home directory is being changed. "
+"<command>usermod</command> checks this on Linux. On other platforms it only "
+"uses utmp to check if the user is logged in."
+msgstr ""
+
+#: usermod.8.xml:514(para)
+msgid ""
+"You must change the owner of any <command>crontab</command> files or "
+"<command>at</command> jobs manually."
+msgstr ""
+
+#: usermod.8.xml:518(para)
+msgid "You must make any changes involving NIS on the NIS server."
+msgstr ""
+
+#: usermod.8.xml:33(term) useradd.8.xml:33(term) login.defs.5.xml:33(term)
+#: lastlog.8.xml:33(term)
+#, fuzzy
+msgid "<option>LASTLOG_UID_MAX</option> (number)"
+msgstr "UID_MAX (numer)"
+
+#: usermod.8.xml:35(para) useradd.8.xml:35(para) login.defs.5.xml:35(para)
+#: lastlog.8.xml:35(para)
+msgid ""
+"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."
+msgstr ""
+
+#: usermod.8.xml:41(para) useradd.8.xml:41(para) login.defs.5.xml:41(para)
+#: lastlog.8.xml:41(para)
+msgid ""
+"No <option>LASTLOG_UID_MAX</option> option present in the configuration "
+"means that there is no user ID limit for writing lastlog entries."
+msgstr ""
+
+#: usermod.8.xml:32(term) userdel.8.xml:32(term) useradd.8.xml:32(term)
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>MAIL_DIR</option> (string)"
+msgstr "MAIL_DIR (łańcuch)"
+
+#: usermod.8.xml:34(para) userdel.8.xml:34(para) useradd.8.xml:34(para)
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"The mail spool directory. This is needed to manipulate the mailbox when its "
+"corresponding user account is modified or deleted. If not specified, a "
+"compile-time default is used."
+msgstr ""
+
+#: usermod.8.xml:41(term) userdel.8.xml:41(term) useradd.8.xml:41(term)
+#: su.1.xml:41(term) login.defs.5.xml:41(term) login.1.xml:41(term)
+#, fuzzy
+msgid "<option>MAIL_FILE</option> (string)"
+msgstr "MAIL_DIR (łańcuch)"
+
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"Defines the location of the users mail spool files relatively to their home "
+"directory."
+msgstr ""
+
+#. FIXME: MAIL_FILE not used in useradd
+#: usermod.8.xml:50(para) userdel.8.xml:50(para) useradd.8.xml:50(para)
+#: su.1.xml:50(para) login.defs.5.xml:50(para) login.1.xml:50(para)
+msgid ""
+"The <option>MAIL_DIR</option> and <option>MAIL_FILE</option> variables are "
+"used by <command>useradd</command>, <command>usermod</command>, and "
+"<command>userdel</command> to create, move, or delete the user's mail spool."
+msgstr ""
+
+#: usermod.8.xml:56(para) userdel.8.xml:56(para) useradd.8.xml:56(para)
+#: su.1.xml:56(para) login.defs.5.xml:56(para) login.1.xml:56(para)
+msgid ""
+"If <option>MAIL_CHECK_ENAB</option> is set to <replaceable>yes</"
+"replaceable>, they are also used to define the <envar>MAIL</envar> "
+"environment variable."
+msgstr ""
+
+#: usermod.8.xml:30(term) userdel.8.xml:30(term) useradd.8.xml:30(term)
+#: pwconv.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: grpck.8.xml:30(term) groupmod.8.xml:30(term) groupmems.8.xml:30(term)
+#: groupdel.8.xml:30(term) groupadd.8.xml:30(term) gpasswd.1.xml:30(term)
+#: chgpasswd.8.xml:30(term)
+msgid "<option>MAX_MEMBERS_PER_GROUP</option> (number)"
+msgstr ""
+
+#: usermod.8.xml:32(para) userdel.8.xml:32(para) useradd.8.xml:32(para)
+#: pwconv.8.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: grpck.8.xml:32(para) groupmod.8.xml:32(para) groupmems.8.xml:32(para)
+#: groupdel.8.xml:32(para) groupadd.8.xml:32(para) gpasswd.1.xml:32(para)
+#: chgpasswd.8.xml:32(para)
+msgid ""
+"Maximum members per group entry. When the maximum is reached, a new group "
+"entry (line) is started in <filename>/etc/group</filename> (with the same "
+"name, same password, and same GID)."
+msgstr ""
+
+#: usermod.8.xml:37(para) userdel.8.xml:37(para) useradd.8.xml:37(para)
+#: pwconv.8.xml:37(para) newusers.8.xml:37(para) login.defs.5.xml:37(para)
+#: grpck.8.xml:37(para) groupmod.8.xml:37(para) groupmems.8.xml:37(para)
+#: groupdel.8.xml:37(para) groupadd.8.xml:37(para) gpasswd.1.xml:37(para)
+#: chgpasswd.8.xml:37(para)
+msgid ""
+"The default value is 0, meaning that there are no limits in the number of "
+"members in a group."
+msgstr ""
+
+#. Note: on HP, split groups have the same ID, but different
+#. names.
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: pwconv.8.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: grpck.8.xml:43(para) groupmod.8.xml:43(para) groupmems.8.xml:43(para)
+#: groupdel.8.xml:43(para) groupadd.8.xml:43(para) gpasswd.1.xml:43(para)
+#: chgpasswd.8.xml:43(para)
+msgid ""
+"This feature (split group) permits to limit the length of lines in the group "
+"file. This is useful to make sure that lines for NIS groups are not larger "
+"than 1024 characters."
+msgstr ""
+
+#: usermod.8.xml:48(para) userdel.8.xml:48(para) useradd.8.xml:48(para)
+#: pwconv.8.xml:48(para) newusers.8.xml:48(para) login.defs.5.xml:48(para)
+#: grpck.8.xml:48(para) groupmod.8.xml:48(para) groupmems.8.xml:48(para)
+#: groupdel.8.xml:48(para) groupadd.8.xml:48(para) gpasswd.1.xml:48(para)
+#: chgpasswd.8.xml:48(para)
+msgid "If you need to enforce such limit, you can use 25."
+msgstr ""
+
+#: usermod.8.xml:51(para) userdel.8.xml:51(para) useradd.8.xml:51(para)
+#: pwconv.8.xml:51(para) newusers.8.xml:51(para) login.defs.5.xml:51(para)
+#: grpck.8.xml:51(para) groupmod.8.xml:51(para) groupmems.8.xml:51(para)
+#: groupdel.8.xml:51(para) groupadd.8.xml:51(para) gpasswd.1.xml:51(para)
+#: chgpasswd.8.xml:51(para)
+msgid ""
+"Note: split groups may not be supported by all tools (even in the Shadow "
+"toolsuite). You should not use this variable unless you really need it."
+msgstr ""
+
+#: usermod.8.xml:30(term) useradd.8.xml:30(term) newusers.8.xml:30(term)
+#: login.defs.5.xml:30(term)
+#, fuzzy
+msgid "<option>SUB_GID_MIN</option> (number)"
+msgstr "GID_MIN (numer)"
+
+#: usermod.8.xml:31(term) useradd.8.xml:31(term) newusers.8.xml:31(term)
+#: login.defs.5.xml:31(term)
+#, fuzzy
+msgid "<option>SUB_GID_MAX</option> (number)"
+msgstr "GID_MAX (numer)"
+
+#: usermod.8.xml:32(term) useradd.8.xml:32(term) newusers.8.xml:32(term)
+#: login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SUB_GID_COUNT</option> (number)"
+msgstr "GID_MIN (numer)"
+
+#: usermod.8.xml:34(para) useradd.8.xml:34(para) newusers.8.xml:34(para)
+#: login.defs.5.xml:34(para)
+msgid ""
+"If <filename>/etc/subuid</filename> exists, the commands <command>useradd</"
+"command> and <command>newusers</command> (unless the user already have "
+"subordinate group IDs) allocate <option>SUB_GID_COUNT</option> unused group "
+"IDs from the range <option>SUB_GID_MIN</option> to <option>SUB_GID_MAX</"
+"option> for each new user."
+msgstr ""
+
+#: usermod.8.xml:42(para) useradd.8.xml:42(para) newusers.8.xml:42(para)
+#: login.defs.5.xml:42(para)
+msgid ""
+"The default values for <option>SUB_GID_MIN</option>, <option>SUB_GID_MAX</"
+"option>, <option>SUB_GID_COUNT</option> are respectively 100000, 600100000 "
+"and 65536."
+msgstr ""
+
+#: usermod.8.xml:30(term) useradd.8.xml:30(term) newusers.8.xml:30(term)
+#: login.defs.5.xml:30(term)
+#, fuzzy
+msgid "<option>SUB_UID_MIN</option> (number)"
+msgstr "UID_MIN (numer)"
+
+#: usermod.8.xml:31(term) useradd.8.xml:31(term) newusers.8.xml:31(term)
+#: login.defs.5.xml:31(term)
+#, fuzzy
+msgid "<option>SUB_UID_MAX</option> (number)"
+msgstr "UID_MAX (numer)"
+
+#: usermod.8.xml:32(term) useradd.8.xml:32(term) newusers.8.xml:32(term)
+#: login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SUB_UID_COUNT</option> (number)"
+msgstr "UID_MIN (numer)"
+
+#: usermod.8.xml:34(para) useradd.8.xml:34(para) newusers.8.xml:34(para)
+#: login.defs.5.xml:34(para)
+msgid ""
+"If <filename>/etc/subuid</filename> exists, the commands <command>useradd</"
+"command> and <command>newusers</command> (unless the user already have "
+"subordinate user IDs) allocate <option>SUB_UID_COUNT</option> unused user "
+"IDs from the range <option>SUB_UID_MIN</option> to <option>SUB_UID_MAX</"
+"option> for each new user."
+msgstr ""
+
+#: usermod.8.xml:42(para) useradd.8.xml:42(para) newusers.8.xml:42(para)
+#: login.defs.5.xml:42(para)
+msgid ""
+"The default values for <option>SUB_UID_MIN</option>, <option>SUB_UID_MAX</"
+"option>, <option>SUB_UID_COUNT</option> are respectively 100000, 600100000 "
+"and 65536."
+msgstr ""
+
+#: usermod.8.xml:30(term) userdel.8.xml:30(term) useradd.8.xml:30(term)
+#: pwck.8.xml:30(term) login.defs.5.xml:30(term)
+#, fuzzy
+msgid "<option>TCB_SYMLINKS</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: usermod.8.xml:37(programlisting) userdel.8.xml:37(programlisting)
+#: useradd.8.xml:37(programlisting) pwck.8.xml:37(programlisting)
+#: login.defs.5.xml:37(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"if ( UID is less than 1000) {\n"
+" use /etc/tcb/user\n"
+"} else if ( UID is less than 1000000) {\n"
+" kilos = UID / 1000\n"
+" use /etc/tcb/:kilos/user\n"
+" make symlink /etc/tcb/user to the above directory\n"
+"} else {\n"
+" megas = UID / 1000000\n"
+" kilos = ( UID / megas * 1000000 ) / 1000\n"
+" use /etc/tcb/:megas/:kilos/user\n"
+" make symlink /etc/tcb/user to the above directory\n"
+"}\n"
+" "
+msgstr ""
+
+#: usermod.8.xml:32(para) userdel.8.xml:32(para) useradd.8.xml:32(para)
+#: pwck.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the location of the user tcb directory to "
+"be created will not be automatically set to /etc/tcb/user, but will be "
+"computed depending on the UID of the user, according to the following "
+"algorithm: <placeholder-1/>"
+msgstr ""
+
+#: usermod.8.xml:557(filename) userdel.8.xml:214(filename)
+#: useradd.8.xml:757(filename) su.1.xml:381(filename)
+#: pwconv.8.xml:253(filename) passwd.1.xml:428(filename)
+#: newusers.8.xml:438(filename) login.access.5.xml:124(filename)
+#: login.1.xml:389(filename) groupmod.8.xml:237(filename)
+#: groupadd.8.xml:265(filename) chsh.1.xml:182(filename)
+#: chpasswd.8.xml:270(filename) chgpasswd.8.xml:228(filename)
+#: chfn.1.xml:210(filename)
+msgid "/etc/login.defs"
+msgstr "/etc/login.defs"
+
+#: usermod.8.xml:559(para) userdel.8.xml:216(para) useradd.8.xml:759(para)
+#: su.1.xml:383(para) pwconv.8.xml:255(para) passwd.1.xml:430(para)
+#: newusers.8.xml:440(para) login.access.5.xml:126(para) login.1.xml:391(para)
+#: groupmod.8.xml:239(para) groupadd.8.xml:267(para) chsh.1.xml:184(para)
+#: chpasswd.8.xml:272(para) chgpasswd.8.xml:230(para) chfn.1.xml:212(para)
+msgid "Shadow password suite configuration."
+msgstr "Konfiguracja pakietu shadow."
+
+#: usermod.8.xml:575(filename) userdel.8.xml:232(filename)
+#: useradd.8.xml:745(filename) newusers.8.xml:450(filename)
+#, fuzzy
+#| msgid "/etc/suauth"
+msgid "/etc/subgid"
+msgstr "/etc/suauth"
+
+#: usermod.8.xml:577(para) userdel.8.xml:234(para) useradd.8.xml:747(para)
+#: newusers.8.xml:452(para)
+msgid "Per user subordinate group IDs."
+msgstr ""
+
+#: usermod.8.xml:581(filename) userdel.8.xml:238(filename)
+#: useradd.8.xml:751(filename) newusers.8.xml:456(filename)
+#, fuzzy
+#| msgid "/etc/suauth"
+msgid "/etc/subuid"
+msgstr "/etc/suauth"
+
+#: usermod.8.xml:583(para) userdel.8.xml:240(para) useradd.8.xml:753(para)
+#: newusers.8.xml:458(para)
+msgid "Per user subordinate user IDs."
+msgstr ""
+
+#: usermod.8.xml:591(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <phrase condition=\"subids"
+"\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: userdel.8.xml:63(refentrytitle) userdel.8.xml:70(refname)
+#: userdel.8.xml:75(command) login.defs.5.xml:500(term)
+msgid "userdel"
+msgstr "userdel"
+
+#: userdel.8.xml:71(refpurpose)
+msgid "delete a user account and related files"
+msgstr "plik chroniony informacji o użytkownikach"
+
+#: userdel.8.xml:85(para)
+#, fuzzy
+msgid ""
+"The <command>userdel</command> command modifies the system account files, "
+"deleting all entries that refer to the user name <emphasis remap=\"I"
+"\">LOGIN</emphasis>. The named user must exist."
+msgstr ""
+"Polecenie <command>usermod</command> zmienia systemowe pliki kont, "
+"odzwierciedlając zmiany podane w wierszu poleceń."
+
+#: userdel.8.xml:94(para)
+msgid "The options which apply to the <command>userdel</command> command are:"
+msgstr "Polecenie <command>userdel</command> posiada następujące opcje:"
+
+#: userdel.8.xml:99(term) groupadd.8.xml:100(term) expiry.1.xml:103(term)
+msgid "<option>-f</option>, <option>--force</option>"
+msgstr "<option>-f</option>, <option>--force</option>"
+
+#: userdel.8.xml:103(para)
+msgid ""
+"This option forces the removal of the user account, even if the user is "
+"still logged in. It also forces <command>userdel</command> to remove the "
+"user's home directory and mail spool, even if another user uses the same "
+"home directory or if the mail spool is not owned by the specified user. If "
+"<option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename> and if a group exists with "
+"the same name as the deleted user, then this group will be removed, even if "
+"it is still the primary group of another user."
+msgstr ""
+
+#: userdel.8.xml:116(para)
+msgid ""
+"<emphasis>Note:</emphasis> This option is dangerous and may leave your "
+"system in an inconsistent state."
+msgstr ""
+
+#: userdel.8.xml:129(term)
+msgid "<option>-r</option>, <option>--remove</option>"
+msgstr "<option>-r</option>, <option>--remove</option>"
+
+#: userdel.8.xml:133(para)
+msgid ""
+"Files in the user's home directory will be removed along with the home "
+"directory itself and the user's mail spool. Files located in other file "
+"systems will have to be searched for and deleted manually."
+msgstr ""
+
+#: userdel.8.xml:139(para)
+msgid ""
+"The mail spool is defined by the <option>MAIL_DIR</option> variable in the "
+"<filename>login.defs</filename> file."
+msgstr ""
+
+#: userdel.8.xml:175(term)
+#, fuzzy
+#| msgid "<option>-q</option>, <option>--quiet</option>"
+msgid "<option>-Z</option>, <option>--selinux-user</option>"
+msgstr "<option>-q</option>, <option>--quiet</option>"
+
+#: userdel.8.xml:179(para)
+msgid "Remove any SELinux user mapping for the user's login."
+msgstr ""
+
+#: userdel.8.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>USERDEL_CMD</option> (string)"
+msgstr "USERDEL_CMD (łańcuch)"
+
+#: userdel.8.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If defined, this command is run when removing a user. It should remove any "
+"at/cron/print jobs etc. owned by the user to be removed (passed as the first "
+"argument)."
+msgstr ""
+
+#: userdel.8.xml:40(para) login.defs.5.xml:40(para)
+msgid "The return code of the script is not taken into account."
+msgstr ""
+
+#: userdel.8.xml:46(programlisting) login.defs.5.xml:46(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"#! /bin/sh\n"
+"\n"
+"# Check for the required argument.\n"
+"if [ $# != 1 ]; then\n"
+"\techo \"Usage: $0 username\"\n"
+"\texit 1\n"
+"fi\n"
+"\n"
+"# Remove cron jobs.\n"
+"crontab -r -u $1\n"
+"\n"
+"# Remove at jobs.\n"
+"# Note that it will remove any jobs owned by the same UID,\n"
+"# even if it was shared by a different username.\n"
+"AT_SPOOL_DIR=/var/spool/cron/atjobs\n"
+"find $AT_SPOOL_DIR -name \"[^.]*\" -type f -user $1 -delete \\;\n"
+"\n"
+"# Remove print jobs.\n"
+"lprm $1\n"
+"\n"
+"# All done.\n"
+"exit 0\n"
+" "
+msgstr ""
+
+#: userdel.8.xml:43(para) login.defs.5.xml:43(para)
+msgid ""
+"Here is an example script, which removes the user's cron, at and print jobs: "
+"<placeholder-1/>"
+msgstr ""
+
+#: userdel.8.xml:32(term) useradd.8.xml:32(term) su.1.xml:32(term)
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>USERGROUPS_ENAB</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: userdel.8.xml:34(para) useradd.8.xml:34(para) su.1.xml:34(para)
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable setting of the umask group bits to be the same as owner bits "
+"(examples: 022 -&gt; 002, 077 -&gt; 007) for non-root users, if the uid is "
+"the same as gid, and username is the same as the primary group name."
+msgstr ""
+
+#: userdel.8.xml:39(para) useradd.8.xml:39(para) su.1.xml:39(para)
+#: login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, <command>userdel</command> will "
+"remove the user's group if it contains no more members, and "
+"<command>useradd</command> will create by default a group with the name of "
+"the user."
+msgstr ""
+
+#: userdel.8.xml:247(title) useradd.8.xml:766(title) su.1.xml:390(title)
+#: pwck.8.xml:303(title) passwd.1.xml:443(title) grpck.8.xml:245(title)
+#: groupmod.8.xml:252(title) groupdel.8.xml:175(title)
+#: groupadd.8.xml:296(title) chage.1.xml:284(title)
+msgid "EXIT VALUES"
+msgstr "KOD ZAKOŃCZENIA"
+
+#: userdel.8.xml:252(replaceable) useradd.8.xml:771(replaceable)
+#: su.1.xml:409(replaceable) pwck.8.xml:308(replaceable)
+#: passwd.1.xml:448(replaceable) grpck.8.xml:250(replaceable)
+#: groupmod.8.xml:257(replaceable) groupdel.8.xml:180(replaceable)
+#: groupadd.8.xml:301(replaceable) chage.1.xml:289(replaceable)
+msgid "0"
+msgstr "0"
+
+#: userdel.8.xml:254(para) useradd.8.xml:773(para) pwck.8.xml:310(para)
+#: passwd.1.xml:450(para) grpck.8.xml:252(para) groupdel.8.xml:182(para)
+#: groupadd.8.xml:303(para) chage.1.xml:291(para)
+msgid "success"
+msgstr "poprawne zakończenie działania programu"
+
+#: userdel.8.xml:258(replaceable) useradd.8.xml:777(replaceable)
+#: su.1.xml:75(manvolnum) su.1.xml:415(replaceable) sg.1.xml:59(manvolnum)
+#: pwck.8.xml:314(replaceable) passwd.1.xml:65(manvolnum)
+#: passwd.1.xml:454(replaceable) newgrp.1.xml:59(manvolnum)
+#: login.1.xml:91(manvolnum) grpck.8.xml:256(replaceable)
+#: groups.1.xml:58(manvolnum) gpasswd.1.xml:63(manvolnum)
+#: expiry.1.xml:62(manvolnum) chsh.1.xml:61(manvolnum) chfn.1.xml:61(manvolnum)
+#: chage.1.xml:59(manvolnum) chage.1.xml:295(replaceable)
+msgid "1"
+msgstr "1"
+
+#: userdel.8.xml:260(para) useradd.8.xml:779(para)
+msgid "can't update password file"
+msgstr "nie można zaktualizować pliku z hasłami"
+
+#: userdel.8.xml:264(replaceable) useradd.8.xml:783(replaceable)
+#: pwck.8.xml:320(replaceable) passwd.1.xml:460(replaceable)
+#: grpck.8.xml:262(replaceable) groupmod.8.xml:263(replaceable)
+#: groupdel.8.xml:186(replaceable) groupadd.8.xml:307(replaceable)
+#: chage.1.xml:301(replaceable)
+msgid "2"
+msgstr "2"
+
+#: userdel.8.xml:266(para) useradd.8.xml:785(para) pwck.8.xml:316(para)
+#: grpck.8.xml:258(para) groupdel.8.xml:188(para) groupadd.8.xml:309(para)
+#: chage.1.xml:303(para)
+msgid "invalid command syntax"
+msgstr "niepoprawna składnia polecenia"
+
+#: userdel.8.xml:270(replaceable) useradd.8.xml:801(replaceable)
+#: pwck.8.xml:344(replaceable) passwd.1.xml:484(replaceable)
+#: groupmod.8.xml:281(replaceable) groupdel.8.xml:192(replaceable)
+msgid "6"
+msgstr "6"
+
+#: userdel.8.xml:272(para)
+msgid "specified user doesn't exist"
+msgstr ""
+
+#: userdel.8.xml:278(para)
+msgid "user currently logged in"
+msgstr ""
+
+#: userdel.8.xml:282(replaceable) useradd.8.xml:813(replaceable)
+#: groupmod.8.xml:293(replaceable) groupdel.8.xml:204(replaceable)
+#: groupadd.8.xml:331(replaceable)
+msgid "10"
+msgstr "10"
+
+#: userdel.8.xml:284(para) useradd.8.xml:815(para) groupdel.8.xml:206(para)
+#: groupadd.8.xml:333(para)
+msgid "can't update group file"
+msgstr "nie można zaktualizować pliku z grupami"
+
+#: userdel.8.xml:288(replaceable) useradd.8.xml:819(replaceable)
+#: groupmod.8.xml:305(replaceable)
+msgid "12"
+msgstr "12"
+
+#: userdel.8.xml:290(para)
+msgid "can't remove home directory"
+msgstr ""
+
+#: userdel.8.xml:248(para)
+msgid ""
+"The <command>userdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Polecenie <command>userdel</command> kończy działanie z następującymi "
+"wartościami kodów zakończenia: <placeholder-1/>"
+
+#: userdel.8.xml:299(para)
+msgid ""
+"<command>userdel</command> will not allow you to remove an account if there "
+"are running processes which belong to this account. In that case, you may "
+"have to kill those processes or lock the user's password or account and "
+"remove the account later. The <option>-f</option> option can force the "
+"deletion of this account."
+msgstr ""
+
+#: userdel.8.xml:306(para)
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this user."
+msgstr ""
+
+#: userdel.8.xml:310(para)
+msgid ""
+"You may not remove any NIS attributes on a NIS client. This must be "
+"performed on the NIS server."
+msgstr ""
+
+#: userdel.8.xml:313(para)
+msgid ""
+"If <option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename>, <command>userdel</"
+"command> will delete the group with the same name as the user. To avoid "
+"inconsistencies in the passwd and group databases, <command>userdel</"
+"command> will check that this group is not used as a primary group for "
+"another user, and will just warn without deleting the group otherwise. The "
+"<option>-f</option> option can force the deletion of this group."
+msgstr ""
+
+#: userdel.8.xml:326(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"subids\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: useradd.8.xml:76(refentrytitle) useradd.8.xml:83(refname)
+#: useradd.8.xml:88(command) useradd.8.xml:95(command)
+#: useradd.8.xml:99(command) login.defs.5.xml:482(term)
+msgid "useradd"
+msgstr "useradd"
+
+#: useradd.8.xml:84(refpurpose)
+msgid "create a new user or update default new user information"
+msgstr ""
+
+#: useradd.8.xml:96(arg) useradd.8.xml:100(arg)
+msgid "-D"
+msgstr "-D"
+
+#: useradd.8.xml:109(para)
+msgid ""
+"When invoked without the <option>-D</option> option, the <command>useradd</"
+"command> command creates a new user account using the values specified on "
+"the command line plus the default values from the system. Depending on "
+"command line options, the <command>useradd</command> command will update "
+"system files and may also create the new user's home directory and copy "
+"initial files."
+msgstr ""
+
+#: useradd.8.xml:118(para)
+msgid ""
+"By default, a group will also be created for the new user (see <option>-g</"
+"option>, <option>-N</option>, <option>-U</option>, and "
+"<option>USERGROUPS_ENAB</option>)."
+msgstr ""
+
+#: useradd.8.xml:127(para)
+msgid "The options which apply to the <command>useradd</command> command are:"
+msgstr "Polecenie <command>useradd</command> posiada następujące opcje:"
+
+#: useradd.8.xml:132(option) pwck.8.xml:187(option) newusers.8.xml:273(option)
+msgid "--badname"
+msgstr ""
+
+#: useradd.8.xml:141(term) useradd.8.xml:559(term)
+msgid ""
+"<option>-b</option>, <option>--base-dir</option>&nbsp;<replaceable>BASE_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-b</option>, <option>--base-dir</option>&nbsp;"
+"<replaceable>KAT_BAZOWY</replaceable>"
+
+#: useradd.8.xml:145(para)
+msgid ""
+"The default base directory for the system if <option>-d</option>&nbsp;"
+"<replaceable>HOME_DIR</replaceable> is not specified. <replaceable>BASE_DIR</"
+"replaceable> is concatenated with the account name to define the home "
+"directory. If the <option>-m</option> option is not used, "
+"<replaceable>BASE_DIR</replaceable> must exist."
+msgstr ""
+
+#: useradd.8.xml:152(para)
+msgid ""
+"If this option is not specified, <command>useradd</command> will use the "
+"base directory specified by the <option>HOME</option> variable in <filename>/"
+"etc/default/useradd</filename>, or <filename>/home</filename> by default."
+msgstr ""
+
+#: useradd.8.xml:166(para)
+msgid ""
+"Any text string. It is generally a short description of the login, and is "
+"currently used as the field for the user's full name."
+msgstr ""
+
+#: useradd.8.xml:174(term)
+msgid ""
+"<option>-d</option>, <option>--home-dir</option>&nbsp;<replaceable>HOME_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home-dir</option>&nbsp;"
+"<replaceable>KAT_DOMOWY</replaceable>"
+
+#: useradd.8.xml:178(para)
+msgid ""
+"The new user will be created using <replaceable>HOME_DIR</replaceable> as "
+"the value for the user's login directory. The default is to append the "
+"<replaceable>LOGIN</replaceable> name to <replaceable>BASE_DIR</replaceable> "
+"and use that as the login directory name. The directory "
+"<replaceable>HOME_DIR</replaceable> does not have to exist but will not be "
+"created if it is missing."
+msgstr ""
+
+#: useradd.8.xml:190(term)
+#, fuzzy
+#| msgid "<option>-d</option>, <option>--delete</option>"
+msgid "<option>-D</option>, <option>--defaults</option>"
+msgstr "<option>-d</option>, <option>--delete</option>"
+
+#: useradd.8.xml:194(para)
+msgid "See below, the subsection \"Changing the default values\"."
+msgstr ""
+
+#: useradd.8.xml:208(para)
+msgid ""
+"If not specified, <command>useradd</command> will use the default expiry "
+"date specified by the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or an empty string (no expiry) by default."
+msgstr ""
+
+#: useradd.8.xml:221(para)
+#, fuzzy
+#| msgid ""
+#| "The number of days after a password expires until the account is "
+#| "permanently disabled. A value of 0 disables the account as soon as the "
+#| "password has expired, and a value of -1 disables the feature. The default "
+#| "value is -1."
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled. A value of 0 disables the account as soon as the password has "
+"expired, and a value of -1 disables the feature."
+msgstr ""
+"Liczba dni po wygaśnięciu hasła do stałego wyłączenia konta. Wartość 0 "
+"wyłącza konto natychmiast po przeterminowaniu hasła, zaś wartość -1 wyłącza "
+"tę cechę. Domyślną wartością jest -1."
+
+#: useradd.8.xml:227(para)
+msgid ""
+"If not specified, <command>useradd</command> will use the default inactivity "
+"period specified by the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or -1 by default."
+msgstr ""
+
+#: useradd.8.xml:240(para)
+#, fuzzy
+#| msgid ""
+#| "The group name or number of the user's new initial login group. The group "
+#| "name must exist. A group number must refer to an already existing group. "
+#| "The default group number is 1."
+msgid ""
+"The group name or number of the user's initial login group. The group name "
+"must exist. A group number must refer to an already existing group."
+msgstr ""
+"Nazwa lub numer początkowej grupy logowania użytkownika. Nazwa grupy musi "
+"istnieć. Numer grupy musi odnosić się do już istniejącej grupy. Domyślnym "
+"numerem grupy jest 1."
+
+#: useradd.8.xml:245(para)
+msgid ""
+"If not specified, the behavior of <command>useradd</command> will depend on "
+"the <option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>. If this variable is set to <replaceable>yes</replaceable> (or "
+"<option>-U/--user-group</option> is specified on the command line), a group "
+"will be created for the user, with the same name as her loginname. If the "
+"variable is set to <replaceable>no</replaceable> (or <option>-N/--no-user-"
+"group</option> is specified on the command line), useradd will set the "
+"primary group of the new user to the value specified by the <option>GROUP</"
+"option> variable in <filename>/etc/default/useradd</filename>, or 100 by "
+"default."
+msgstr ""
+
+#: useradd.8.xml:267(para)
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option. The default is for the user to belong only to "
+"the initial group."
+msgstr ""
+
+#: useradd.8.xml:284(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SHELL</"
+#| "replaceable>"
+msgid ""
+"<option>-k</option>, <option>--skel</option>&nbsp;<replaceable>SKEL_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SHELL</"
+"replaceable>"
+
+#: useradd.8.xml:288(para)
+msgid ""
+"The skeleton directory, which contains files and directories to be copied in "
+"the user's home directory, when the home directory is created by "
+"<command>useradd</command>."
+msgstr ""
+
+#: useradd.8.xml:293(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid ""
+"This option is only valid if the <option>-m</option> (or <option>--create-"
+"home</option>) option is specified."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:297(para)
+msgid ""
+"If this option is not set, the skeleton directory is defined by the "
+"<option>SKEL</option> variable in <filename>/etc/default/useradd</filename> "
+"or, by default, <filename>/etc/skel</filename>."
+msgstr ""
+
+#: useradd.8.xml:303(para)
+msgid "If possible, the ACLs and extended attributes are copied."
+msgstr ""
+
+#: useradd.8.xml:309(term) groupadd.8.xml:137(term)
+msgid ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
+"replaceable>=<replaceable>VALUE</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KLUCZ</"
+"replaceable>=<replaceable>WARTOŚĆ</replaceable>"
+
+#: useradd.8.xml:313(para)
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (<option>UID_MIN</"
+"option>, <option>UID_MAX</option>, <option>UMASK</option>, "
+"<option>PASS_MAX_DAYS</option> and others). <placeholder-1/> Example: "
+"<option>-K</option>&nbsp;<replaceable>PASS_MAX_DAYS</"
+"replaceable>=<replaceable>-1</replaceable> can be used when creating system "
+"account to turn off password aging, even though system account has no "
+"password at all. Multiple <option>-K</option> options can be specified, e."
+"g.: <option>-K</option>&nbsp;<replaceable>UID_MIN</"
+"replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+"<replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+
+#: useradd.8.xml:334(term)
+#, fuzzy
+#| msgid "<option>-l</option>, <option>--list</option>"
+msgid "<option>-l</option>, <option>--no-log-init</option>"
+msgstr "<option>-l</option>, <option>--list</option>"
+
+#: useradd.8.xml:336(para)
+msgid "Do not add the user to the lastlog and faillog databases."
+msgstr ""
+
+#: useradd.8.xml:339(para)
+msgid ""
+"By default, the user's entries in the lastlog and faillog databases are "
+"reset to avoid reusing the entry from a previously deleted user."
+msgstr ""
+
+#: useradd.8.xml:347(term)
+msgid "<option>-m</option>, <option>--create-home</option>"
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:351(para)
+msgid ""
+"Create the user's home directory if it does not exist. The files and "
+"directories contained in the skeleton directory (which can be defined with "
+"the <option>-k</option> option) will be copied to the home directory."
+msgstr ""
+
+#: useradd.8.xml:357(para)
+msgid ""
+"By default, if this option is not specified and <option>CREATE_HOME</option> "
+"is not enabled, no home directories are created."
+msgstr ""
+
+#: useradd.8.xml:365(term)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid "<option>-M</option>, <option>--no-create-home</option>"
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:369(para)
+msgid ""
+"Do no create the user's home directory, even if the system wide setting from "
+"<filename>/etc/login.defs</filename> (<option>CREATE_HOME</option>) is set "
+"to <replaceable>yes</replaceable>."
+msgstr ""
+
+#: useradd.8.xml:378(term)
+#, fuzzy
+#| msgid "<option>-g</option>, <option>--group</option>"
+msgid "<option>-N</option>, <option>--no-user-group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+#: useradd.8.xml:382(para)
+msgid ""
+"Do not create a group with the same name as the user, but add the user to "
+"the group specified by the <option>-g</option> option or by the "
+"<option>GROUP</option> variable in <filename>/etc/default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:388(para) useradd.8.xml:526(para)
+msgid ""
+"The default behavior (if the <option>-g</option>, <option>-N</option>, and "
+"<option>-U</option> options are not specified) is defined by the "
+"<option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+
+#: useradd.8.xml:401(para)
+msgid "Allow the creation of a user account with a duplicate (non-unique) UID."
+msgstr ""
+
+#: useradd.8.xml:402(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid ""
+"This option is only valid in combination with the <option>-u</option> option."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:413(para) groupadd.8.xml:171(para)
+#, fuzzy
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>. The default is to "
+"disable the password."
+msgstr ""
+"Nowa wartość pola komentarza dla danego użytkownika w pliku haseł. Zwykle "
+"jest zmieniana przy pomocy polecenia <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+#: useradd.8.xml:430(term) newusers.8.xml:302(term) groupadd.8.xml:188(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-r</option>, <option>--system</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: useradd.8.xml:434(para) newusers.8.xml:306(para)
+msgid "Create a system account."
+msgstr ""
+
+#: useradd.8.xml:437(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are chosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>/etc/login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+
+#: useradd.8.xml:446(para)
+msgid ""
+"Note that <command>useradd</command> will not create a home directory for "
+"such a user, regardless of the default setting in <filename>/etc/login.defs</"
+"filename> (<option>CREATE_HOME</option>). You have to specify the <option>-"
+"m</option> options if you want a home directory for a system account to be "
+"created."
+msgstr ""
+
+#: useradd.8.xml:490(para)
+msgid ""
+"The name of the user's login shell. The default is to leave this field "
+"blank, which causes the system to select the default login shell specified "
+"by the <option>SHELL</option> variable in <filename>/etc/default/useradd</"
+"filename>, or an empty string by default."
+msgstr ""
+
+#: useradd.8.xml:504(para)
+msgid ""
+"The numerical value of the user's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than or equal to "
+"<option>UID_MIN</option> and greater than every other user."
+msgstr ""
+
+#: useradd.8.xml:511(para)
+#, fuzzy
+msgid ""
+"See also the <option>-r</option> option and the <option>UID_MAX</option> "
+"description."
+msgstr "<option>-</option>, <option>-l</option>, <option>--login</option>"
+
+#: useradd.8.xml:518(term)
+#, fuzzy
+#| msgid "<option>-g</option>, <option>--group</option>"
+msgid "<option>-U</option>, <option>--user-group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+#: useradd.8.xml:522(para)
+msgid ""
+"Create a group with the same name as the user, and add the user to this "
+"group."
+msgstr ""
+
+#: useradd.8.xml:539(para)
+#, fuzzy
+#| msgid ""
+#| "The name of the user's new login shell. Setting this field to blank "
+#| "causes the system to select the default login shell."
+msgid ""
+"The SELinux user for the user's login. The default is to leave this field "
+"blank, which causes the system to select the default SELinux user."
+msgstr ""
+"Nazwa nowej powłoki (shell) użytkownika. Ustawienie tego pola na puste "
+"powoduje, że system wybierze domyślną powłokę logowania."
+
+#: useradd.8.xml:549(title)
+msgid "Changing the default values"
+msgstr ""
+
+#: useradd.8.xml:550(para)
+msgid ""
+"When invoked with only the <option>-D</option> option, <command>useradd</"
+"command> will display the current default values. When invoked with <option>-"
+"D</option> plus other options, <command>useradd</command> will update the "
+"default values for the specified options. Valid default-changing options are:"
+msgstr ""
+
+#: useradd.8.xml:563(para)
+msgid ""
+"The path prefix for a new user's home directory. The user's name will be "
+"affixed to the end of <replaceable>BASE_DIR</replaceable> to form the new "
+"user's home directory name, if the <option>-d</option> option is not used "
+"when creating a new account."
+msgstr ""
+
+#: useradd.8.xml:570(para)
+msgid ""
+"This option sets the <option>HOME</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:581(para)
+msgid "The date on which the user account is disabled."
+msgstr ""
+
+#: useradd.8.xml:582(para)
+msgid ""
+"This option sets the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:593(para)
+msgid ""
+"The number of days after a password has expired before the account will be "
+"disabled."
+msgstr ""
+
+#: useradd.8.xml:597(para)
+msgid ""
+"This option sets the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:608(para)
+msgid ""
+"The group name or ID for a new user's initial group (when the <option>-N/--"
+"no-user-group</option> is used or when the <option>USERGROUPS_ENAB</option> "
+"variable is set to <replaceable>no</replaceable> in <filename>/etc/login."
+"defs</filename>). The named group must exist, and a numerical group ID must "
+"have an existing entry."
+msgstr ""
+
+#: useradd.8.xml:617(para)
+msgid ""
+"This option sets the <option>GROUP</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:628(para)
+msgid "The name of a new user's login shell."
+msgstr ""
+
+#: useradd.8.xml:631(para)
+msgid ""
+"This option sets the <option>SHELL</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:643(title)
+msgid "NOTES"
+msgstr "UWAGI"
+
+#: useradd.8.xml:644(para)
+msgid ""
+"The system administrator is responsible for placing the default user files "
+"in the <filename>/etc/skel/</filename> directory (or any other skeleton "
+"directory specified in <filename>/etc/default/useradd</filename> or on the "
+"command line)."
+msgstr ""
+
+#: useradd.8.xml:653(para)
+msgid ""
+"You may not add a user to a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+
+#: useradd.8.xml:658(para)
+msgid ""
+"Similarly, if the username already exists in an external user database such "
+"as NIS or LDAP, <command>useradd</command> will deny the user account "
+"creation request."
+msgstr ""
+
+#: useradd.8.xml:664(para)
+msgid ""
+"Usernames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+
+#: useradd.8.xml:670(para)
+msgid "Usernames may only be up to 32 characters long."
+msgstr ""
+
+#: useradd.8.xml:30(term) login.defs.5.xml:30(term)
+#, fuzzy
+msgid "<option>CREATE_HOME</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: useradd.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"Indicate if a home directory should be created by default for new users."
+msgstr ""
+
+#: useradd.8.xml:36(para) login.defs.5.xml:36(para)
+msgid ""
+"This setting does not apply to system users, and can be overridden on the "
+"command line."
+msgstr ""
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: groupadd.8.xml:32(term)
+#, fuzzy
+msgid "<option>GID_MAX</option> (number)"
+msgstr "GID_MAX (numer)"
+
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+#: groupadd.8.xml:33(term)
+#, fuzzy
+msgid "<option>GID_MIN</option> (number)"
+msgstr "GID_MIN (numer)"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+#: groupadd.8.xml:35(para)
+msgid ""
+"Range of group IDs used for the creation of regular groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: groupadd.8.xml:40(para)
+msgid ""
+"The default value for <option>GID_MIN</option> (resp. <option>GID_MAX</"
+"option>) is 1000 (resp. 60000)."
+msgstr ""
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>HOME_MODE</option> (number)"
+msgstr "GID_MAX (numer)"
+
+#: useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The mode for new home directories. If not specified, the <option>UMASK</"
+"option> is used to create the mode."
+msgstr ""
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+msgid ""
+"<command>useradd</command> and <command>newusers</command> use this to set "
+"the mode of the home directory they create."
+msgstr ""
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_MAX_DAYS</option> (number)"
+msgstr "PASS_MAX_DAYS (numer)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The maximum number of days a password may be used. If the password is older "
+"than this, a password change will be forced. If not specified, -1 will be "
+"assumed (which disables the restriction)."
+msgstr ""
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_MIN_DAYS</option> (number)"
+msgstr "PASS_MIN_DAYS (numer)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The minimum number of days allowed between password changes. Any password "
+"changes attempted sooner than this will be rejected. If not specified, -1 "
+"will be assumed (which disables the restriction)."
+msgstr ""
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_WARN_AGE</option> (number)"
+msgstr "PASS_WARN_AGE (numer)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The number of days warning given before a password expires. A zero means "
+"warning is given only upon the day of expiration, a negative value means no "
+"warning is given. If not specified, no warning will be provided."
+msgstr ""
+
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: groupadd.8.xml:30(term)
+#, fuzzy
+msgid "<option>SYS_GID_MAX</option> (number)"
+msgstr "GID_MAX (numer)"
+
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: groupadd.8.xml:31(term)
+#, fuzzy
+msgid "<option>SYS_GID_MIN</option> (number)"
+msgstr "GID_MIN (numer)"
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: groupadd.8.xml:33(para)
+msgid ""
+"Range of group IDs used for the creation of system groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#: groupadd.8.xml:38(para)
+msgid ""
+"The default value for <option>SYS_GID_MIN</option> (resp. "
+"<option>SYS_GID_MAX</option>) is 101 (resp. <option>GID_MIN</option>-1)."
+msgstr ""
+
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#, fuzzy
+msgid "<option>SYS_UID_MAX</option> (number)"
+msgstr "UID_MAX (numer)"
+
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#, fuzzy
+msgid "<option>SYS_UID_MIN</option> (number)"
+msgstr "UID_MIN (numer)"
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+msgid ""
+"Range of user IDs used for the creation of system users by <command>useradd</"
+"command> or <command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:37(para) newusers.8.xml:37(para) login.defs.5.xml:37(para)
+msgid ""
+"The default value for <option>SYS_UID_MIN</option> (resp. "
+"<option>SYS_UID_MAX</option>) is 101 (resp. <option>UID_MIN</option>-1)."
+msgstr ""
+
+#: useradd.8.xml:30(term) pwck.8.xml:30(term) login.defs.5.xml:30(term)
+#, fuzzy
+msgid "<option>TCB_AUTH_GROUP</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: useradd.8.xml:32(para) pwck.8.xml:32(para) login.defs.5.xml:32(para)
+#, fuzzy
+msgid ""
+"If <replaceable>yes</replaceable>, newly created tcb shadow files will be "
+"group owned by the <replaceable>auth</replaceable> group."
+msgstr ""
+"Nazwa grupy zostanie zmieniona z <replaceable>GRUPA</replaceable> na nazwę "
+"<replaceable>NOWA_GRUPA</replaceable>."
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>UID_MAX</option> (number)"
+msgstr "UID_MAX (numer)"
+
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>UID_MIN</option> (number)"
+msgstr "UID_MIN (numer)"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"Range of user IDs used for the creation of regular users by "
+"<command>useradd</command> or <command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:39(para) newusers.8.xml:39(para) login.defs.5.xml:39(para)
+msgid ""
+"The default value for <option>UID_MIN</option> (resp. <option>UID_MAX</"
+"option>) is 1000 (resp. 60000)."
+msgstr ""
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: login.1.xml:32(term)
+#, fuzzy
+msgid "<option>UMASK</option> (number)"
+msgstr "UMASK (number)"
+
+#: useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: login.1.xml:34(para)
+msgid ""
+"The file mode creation mask is initialized to this value. If not specified, "
+"the mask will be initialized to 022."
+msgstr ""
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#: login.1.xml:38(para)
+msgid ""
+"<command>useradd</command> and <command>newusers</command> use this mask to "
+"set the mode of the home directory they create if <option>HOME_MODE</option> "
+"is not set."
+msgstr ""
+
+#: useradd.8.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: login.1.xml:43(para)
+msgid ""
+"It is also used by <command>login</command> to define users' initial umask. "
+"Note that this mask can be overridden by the user's GECOS line (if "
+"<option>QUOTAS_ENAB</option> is set) or by the specification of a limit with "
+"the <emphasis>K</emphasis> identifier in "
+"<citerefentry><refentrytitle>limits</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+
+#: useradd.8.xml:51(para) newusers.8.xml:51(para) login.defs.5.xml:51(para)
+#: login.1.xml:51(para)
+msgid ""
+"It is also used by <command>pam_umask</command> as the default umask value."
+msgstr ""
+
+#: useradd.8.xml:733(filename)
+msgid "/etc/default/useradd"
+msgstr "/etc/default/useradd"
+
+#: useradd.8.xml:735(para)
+msgid "Default values for account creation."
+msgstr ""
+
+#: useradd.8.xml:739(filename)
+msgid "/etc/skel/"
+msgstr "/etc/skel/"
+
+#: useradd.8.xml:741(para)
+msgid "Directory containing default files."
+msgstr ""
+
+#: useradd.8.xml:789(replaceable) shadow.3.xml:58(manvolnum)
+#: pwck.8.xml:326(replaceable) passwd.1.xml:466(replaceable)
+#: grpck.8.xml:268(replaceable) groupmod.8.xml:269(replaceable)
+#: groupadd.8.xml:313(replaceable)
+msgid "3"
+msgstr "3"
+
+#: useradd.8.xml:791(para) passwd.1.xml:486(para) groupadd.8.xml:315(para)
+msgid "invalid argument to option"
+msgstr "nieprawidłowy argument opcji"
+
+#: useradd.8.xml:795(replaceable) pwck.8.xml:332(replaceable)
+#: passwd.1.xml:472(replaceable) grpck.8.xml:274(replaceable)
+#: groupmod.8.xml:275(replaceable) groupadd.8.xml:319(replaceable)
+msgid "4"
+msgstr "4"
+
+#: useradd.8.xml:797(para)
+msgid "UID already in use (and no <option>-o</option>)"
+msgstr "UID juz jest używany (i nie uzyto opcji <option>-o</option>)"
+
+#: useradd.8.xml:803(para) groupdel.8.xml:194(para)
+msgid "specified group doesn't exist"
+msgstr ""
+
+#: useradd.8.xml:807(replaceable) groupmod.8.xml:287(replaceable)
+#: groupadd.8.xml:325(replaceable)
+msgid "9"
+msgstr "9"
+
+#: useradd.8.xml:809(para)
+msgid "username already in use"
+msgstr ""
+
+#: useradd.8.xml:821(para)
+msgid "can't create home directory"
+msgstr ""
+
+#: useradd.8.xml:825(replaceable)
+#, fuzzy
+#| msgid "1"
+msgid "14"
+msgstr "1"
+
+#: useradd.8.xml:827(para)
+msgid "can't update SELinux user mapping"
+msgstr ""
+
+#: useradd.8.xml:767(para)
+msgid ""
+"The <command>useradd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Polecenie <command>useradd</command> kończy działanie z następującymi "
+"wartościami kodów zakończenia: <placeholder-1/>"
+
+#: useradd.8.xml:836(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <phrase condition=\"subids"
+"\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: suauth.5.xml:41(contrib) pwconv.8.xml:47(contrib)
+#: login.access.5.xml:42(contrib) gpasswd.1.xml:46(contrib)
+msgid "Creation, 1996"
+msgstr ""
+
+#: suauth.5.xml:57(refentrytitle) suauth.5.xml:64(refname)
+msgid "suauth"
+msgstr "suauth"
+
+#: suauth.5.xml:58(manvolnum) shadow.5.xml:58(manvolnum)
+#: pwck.8.xml:338(replaceable) porttime.5.xml:58(manvolnum)
+#: passwd.5.xml:58(manvolnum) passwd.1.xml:478(replaceable)
+#: login.defs.5.xml:125(manvolnum) login.access.5.xml:59(manvolnum)
+#: limits.5.xml:60(manvolnum) gshadow.5.xml:47(manvolnum)
+#: grpck.8.xml:280(replaceable) faillog.5.xml:58(manvolnum)
+msgid "5"
+msgstr "5"
+
+#: suauth.5.xml:59(refmiscinfo) shadow.5.xml:59(refmiscinfo)
+#: porttime.5.xml:59(refmiscinfo) passwd.5.xml:59(refmiscinfo)
+#: login.defs.5.xml:126(refmiscinfo) login.access.5.xml:60(refmiscinfo)
+#: limits.5.xml:61(refmiscinfo) gshadow.5.xml:48(refmiscinfo)
+#: faillog.5.xml:59(refmiscinfo)
+msgid "File Formats and Conversions"
+msgstr ""
+
+#: suauth.5.xml:65(refpurpose)
+msgid "detailed su control file"
+msgstr ""
+
+#: suauth.5.xml:70(command) suauth.5.xml:196(filename)
+msgid "/etc/suauth"
+msgstr "/etc/suauth"
+
+#: suauth.5.xml:76(para)
+msgid ""
+"The file <filename>/etc/suauth</filename> is referenced whenever the su "
+"command is called. It can change the behaviour of the su command, based upon:"
+msgstr ""
+
+#. .RS
+#: suauth.5.xml:83(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+" 1) the user su is targeting\n"
+" "
+msgstr ""
+
+#. .fi
+#: suauth.5.xml:87(para)
+msgid ""
+"2) the user executing the su command (or any groups he might be a member of)"
+msgstr ""
+
+#: suauth.5.xml:92(para)
+msgid ""
+"The file is formatted like this, with lines starting with a # being treated "
+"as comment lines and ignored;"
+msgstr ""
+
+#: suauth.5.xml:97(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+" to-id:from-id:ACTION\n"
+" "
+msgstr ""
+
+#: suauth.5.xml:101(para)
+msgid ""
+"Where to-id is either the word <emphasis>ALL</emphasis>, a list of usernames "
+"delimited by \",\" or the words <emphasis>ALL EXCEPT</emphasis> followed by "
+"a list of usernames delimited by \",\"."
+msgstr ""
+
+#: suauth.5.xml:107(para)
+msgid ""
+"from-id is formatted the same as to-id except the extra word "
+"<emphasis>GROUP</emphasis> is recognized. <emphasis>ALL EXCEPT GROUP</"
+"emphasis> is perfectly valid too. Following <emphasis>GROUP</emphasis> "
+"appears one or more group names, delimited by \",\". It is not sufficient to "
+"have primary group id of the relevant group, an entry in "
+"<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry> is necessary."
+msgstr ""
+
+#: suauth.5.xml:118(para)
+msgid "Action can be one only of the following currently supported options."
+msgstr ""
+
+#: suauth.5.xml:124(emphasis)
+msgid "DENY"
+msgstr "DENY"
+
+#: suauth.5.xml:127(para)
+msgid "The attempt to su is stopped before a password is even asked for."
+msgstr ""
+
+#: suauth.5.xml:134(emphasis)
+msgid "NOPASS"
+msgstr "NOPASS"
+
+#: suauth.5.xml:137(para)
+msgid ""
+"The attempt to su is automatically successful; no password is asked for."
+msgstr ""
+
+#: suauth.5.xml:145(emphasis)
+msgid "OWNPASS"
+msgstr "OWNPASS"
+
+#: suauth.5.xml:148(para)
+msgid ""
+"For the su command to be successful, the user must enter his or her own "
+"password. They are told this."
+msgstr ""
+
+#: suauth.5.xml:156(para)
+msgid ""
+"Note there are three separate fields delimited by a colon. No whitespace "
+"must surround this colon. Also note that the file is examined sequentially "
+"line by line, and the first applicable rule is used without examining the "
+"file further. This makes it possible for a system administrator to exercise "
+"as fine control as he or she wishes."
+msgstr ""
+
+#: suauth.5.xml:166(title)
+msgid "EXAMPLE"
+msgstr "EXAMPLE"
+
+#: suauth.5.xml:167(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+" # sample /etc/suauth file\n"
+" #\n"
+" # A couple of privileged usernames may\n"
+" # su to root with their own password.\n"
+" #\n"
+" root:chris,birddog:OWNPASS\n"
+" #\n"
+" # Anyone else may not su to root unless in\n"
+" # group wheel. This is how BSD does things.\n"
+" #\n"
+" root:ALL EXCEPT GROUP wheel:DENY\n"
+" #\n"
+" # Perhaps terry and birddog are accounts\n"
+" # owned by the same person.\n"
+" # Access can be arranged between them\n"
+" # with no password.\n"
+" #\n"
+" terry:birddog:NOPASS\n"
+" birddog:terry:NOPASS\n"
+" #\n"
+" "
+msgstr ""
+
+#: suauth.5.xml:203(title) pwconv.8.xml:216(title) login.defs.5.xml:531(title)
+msgid "BUGS"
+msgstr "BŁĘDY"
+
+#: suauth.5.xml:204(para)
+msgid ""
+"There could be plenty lurking. The file parser is particularly unforgiving "
+"about syntax errors, expecting no spurious whitespace (apart from beginning "
+"and end of lines), and a specific token delimiting different things."
+msgstr ""
+
+#: suauth.5.xml:213(title) shadow.3.xml:208(title)
+msgid "DIAGNOSTICS"
+msgstr "DIAGNOSTYKA"
+
+#: suauth.5.xml:214(para)
+msgid ""
+"An error parsing the file is reported using "
+"<citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry> as level ERR on facility AUTH."
+msgstr ""
+
+#: suauth.5.xml:223(para)
+msgid ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: su.1.xml:58(contrib) shadow.5.xml:41(contrib) shadow.3.xml:41(contrib)
+#: porttime.5.xml:41(contrib) passwd.5.xml:41(contrib) passwd.1.xml:48(contrib)
+#: login.1.xml:74(contrib) faillog.8.xml:41(contrib) faillog.5.xml:41(contrib)
+msgid "Creation, 1989"
+msgstr ""
+
+#: su.1.xml:74(refentrytitle) su.1.xml:81(refname) su.1.xml:86(command)
+#: login.defs.5.xml:456(term)
+msgid "su"
+msgstr "su"
+
+#: su.1.xml:76(refmiscinfo) sg.1.xml:60(refmiscinfo)
+#: passwd.1.xml:66(refmiscinfo) newgrp.1.xml:60(refmiscinfo)
+#: login.1.xml:92(refmiscinfo) groups.1.xml:59(refmiscinfo)
+#: gpasswd.1.xml:64(refmiscinfo) expiry.1.xml:63(refmiscinfo)
+#: chsh.1.xml:62(refmiscinfo) chfn.1.xml:62(refmiscinfo)
+#: chage.1.xml:60(refmiscinfo)
+msgid "User Commands"
+msgstr "Polecenia użytkowników"
+
+#: su.1.xml:82(refpurpose)
+msgid "change user ID or become superuser"
+msgstr ""
+
+#: su.1.xml:91(replaceable) sg.1.xml:72(arg) newgrp.1.xml:71(arg)
+msgid "-"
+msgstr "-"
+
+#: su.1.xml:94(replaceable) login.1.xml:107(replaceable)
+#: login.1.xml:115(replaceable)
+msgid "username"
+msgstr ""
+
+#: su.1.xml:96(replaceable)
+msgid "args"
+msgstr ""
+
+#: su.1.xml:104(para)
+msgid ""
+"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."
+msgstr ""
+
+#: su.1.xml:114(para)
+msgid ""
+"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>."
+msgstr ""
+
+#: su.1.xml:122(para)
+msgid ""
+"The user will be prompted for a password, if appropriate. Invalid passwords "
+"will produce an error message. All attempts, both valid and invalid, are "
+"logged to detect abuse of the system."
+msgstr ""
+
+#: su.1.xml:127(para)
+msgid ""
+"The current environment is passed to the new shell. The value of <envar>"
+"$PATH</envar> is reset to <filename>/bin:/usr/bin</filename> for normal "
+"users, or <filename>/sbin:/bin:/usr/sbin:/usr/bin</filename> for the "
+"superuser. This may be changed with the <option>ENV_PATH</option> and "
+"<option>ENV_SUPATH</option> definitions in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+
+#: su.1.xml:136(para) login.1.xml:188(para)
+msgid ""
+"A subsystem login is indicated by the presence of a \"*\" as the first "
+"character of the login shell. The given home directory will be used as the "
+"root of a new file system which the user is actually logged into."
+msgstr ""
+
+#: su.1.xml:145(para)
+msgid "The options which apply to the <command>su</command> command are:"
+msgstr "Polecenie <command>su</command> posiada następujące opcje:"
+
+#: su.1.xml:149(term)
+msgid ""
+"<option>-c</option>, <option>--command</option>&nbsp;<replaceable>COMMAND</"
+"replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--command</option>&nbsp;<replaceable>POLECENIE</"
+"replaceable>"
+
+#: su.1.xml:153(para)
+msgid ""
+"Specify a command that will be invoked by the shell using its <option>-c</"
+"option>."
+msgstr ""
+
+#: su.1.xml:157(para)
+msgid ""
+"The executed command will have no controlling terminal. This option cannot "
+"be used to execute interactive programs which need a controlling TTY."
+msgstr ""
+
+#: su.1.xml:167(term)
+msgid "<option>-</option>, <option>-l</option>, <option>--login</option>"
+msgstr "<option>-</option>, <option>-l</option>, <option>--login</option>"
+
+#: su.1.xml:171(para)
+msgid ""
+"Provide an environment similar to what the user would expect had the user "
+"logged in directly."
+msgstr ""
+
+#: su.1.xml:175(para)
+msgid ""
+"When <option>-</option> is used, it must be specified before any "
+"<option>username</option>. For portability it is recommended to use it as "
+"last option, before any <option>username</option>. The other forms (<option>-"
+"l</option> and <option>--login</option>) do not have this restriction."
+msgstr ""
+
+#: su.1.xml:190(para)
+msgid "The shell that will be invoked."
+msgstr ""
+
+#: su.1.xml:198(para)
+msgid "The shell specified with --shell."
+msgstr ""
+
+#: su.1.xml:201(para)
+msgid ""
+"If <option>--preserve-environment</option> is used, the shell specified by "
+"the <envar>$SHELL</envar> environment variable."
+msgstr ""
+
+#: su.1.xml:208(para)
+msgid ""
+"The shell indicated in the <filename>/etc/passwd</filename> entry for the "
+"target user."
+msgstr ""
+
+#: su.1.xml:214(para)
+msgid ""
+"<filename>/bin/sh</filename> if a shell could not be found by any above "
+"method."
+msgstr ""
+
+#: su.1.xml:191(para)
+msgid ""
+"The invoked shell is chosen from (highest priority first): <placeholder-1/>"
+msgstr ""
+
+#: su.1.xml:219(para)
+msgid ""
+"If the target user has a restricted shell (i.e. the shell field of this "
+"user's entry in <filename>/etc/passwd</filename> is not listed in <filename>/"
+"etc/shells</filename>), then the <option>--shell</option> option or the "
+"<envar>$SHELL</envar> environment variable won't be taken into account, "
+"unless <command>su</command> is called by root."
+msgstr ""
+
+#: su.1.xml:230(term)
+msgid ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+msgstr ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+
+#: su.1.xml:239(envar)
+msgid "$PATH"
+msgstr ""
+
+#: su.1.xml:241(para)
+msgid ""
+"reset according to the <filename>/etc/login.defs</filename> options "
+"<option>ENV_PATH</option> or <option>ENV_SUPATH</option> (see below);"
+msgstr ""
+
+#: su.1.xml:250(envar)
+msgid "$IFS"
+msgstr ""
+
+#: su.1.xml:252(para)
+msgid ""
+"reset to <quote>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</quote>, if it was "
+"set."
+msgstr ""
+
+#: su.1.xml:235(para)
+msgid "Preserve the current environment, except for: <placeholder-1/>"
+msgstr ""
+
+#: su.1.xml:261(para)
+msgid ""
+"If the target user has a restricted shell, this option has no effect (unless "
+"<command>su</command> is called by root)."
+msgstr ""
+
+#: su.1.xml:270(para)
+msgid ""
+"The <envar>$HOME</envar>, <envar>$SHELL</envar>, <envar>$USER</envar>, "
+"<envar>$LOGNAME</envar>, <envar>$PATH</envar>, and <envar>$IFS</envar> "
+"environment variables are reset."
+msgstr ""
+
+#: su.1.xml:279(para)
+msgid ""
+"If <option>--login</option> is not used, the environment is copied, except "
+"for the variables above."
+msgstr ""
+
+#: su.1.xml:286(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TERM</envar>, <envar>"
+"$COLORTERM</envar>, <envar>$DISPLAY</envar>, and <envar>$XAUTHORITY</envar> "
+"environment variables are copied if they were set."
+msgstr ""
+
+#: su.1.xml:296(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TZ</envar>, <envar>$HZ</"
+"envar>, and <envar>$MAIL</envar> environment variables are set according to "
+"the <filename>/etc/login.defs</filename> options <option>ENV_TZ</option>, "
+"<option>ENV_HZ</option>, <option>MAIL_DIR</option>, and <option>MAIL_FILE</"
+"option> (see below)."
+msgstr ""
+
+#: su.1.xml:309(para)
+msgid ""
+"If <option>--login</option> is used, other environment variables might be "
+"set by the <option>ENVIRON_FILE</option> file (see below)."
+msgstr ""
+
+#: su.1.xml:317(para)
+msgid "Other environments might be set by PAM modules."
+msgstr ""
+
+#: su.1.xml:265(para)
+msgid ""
+"Note that the default behavior for the environment is the following: "
+"<placeholder-1/>"
+msgstr ""
+
+#: su.1.xml:331(para)
+msgid ""
+"This version of <command>su</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>CONSOLE</option> (string)"
+msgstr "CHFN_RESTRICT (łańcuch)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, either full pathname of a file containing device names (one per "
+"line) or a \":\" delimited list of device names. Root logins will be allowed "
+"only upon these devices."
+msgstr ""
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid "If not defined, root will be allowed on any device."
+msgstr ""
+
+#: su.1.xml:42(para) login.defs.5.xml:42(para) login.1.xml:42(para)
+msgid "The device should be specified without the /dev/ prefix."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>CONSOLE_GROUPS</option> (string)"
+msgstr "CHFN_RESTRICT (łańcuch)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"List of groups to add to the user's supplementary groups set when logging in "
+"on the console (as determined by the CONSOLE setting). Default is none. "
+"<placeholder-1/> Use with caution - it is possible for users to gain "
+"permanent access to these groups, even when not logged in on the console."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>DEFAULT_HOME</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Indicate if login is allowed if we can't cd to the home directory. Default "
+"is no."
+msgstr ""
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, the user will login in the root "
+"(<filename>/</filename>) directory if it is not possible to cd to her home "
+"directory."
+msgstr ""
+
+#. XXX: When compiled with PAM support, only sulogin uses ENV_HZ
+#: su.1.xml:33(term) login.defs.5.xml:33(term) login.1.xml:33(term)
+#, fuzzy
+msgid "<option>ENV_HZ</option> (string)"
+msgstr "MAIL_DIR (łańcuch)"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"If set, it will be used to define the HZ environment variable when a user "
+"login. The value must be preceded by <replaceable>HZ=</replaceable>. A "
+"common value on Linux is <replaceable>HZ=100</replaceable>."
+msgstr ""
+
+#: su.1.xml:41(para) login.defs.5.xml:41(para) login.1.xml:41(para)
+msgid ""
+"The <envar>HZ</envar> environment variable is only set when the user (the "
+"superuser) logs in with <command>sulogin</command>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENVIRON_FILE</option> (string)"
+msgstr "MAIL_DIR (łańcuch)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If this file exists and is readable, login environment will be read from it. "
+"Every line should be in the form name=value."
+msgstr ""
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid "Lines starting with a # are treated as comment lines and ignored."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENV_PATH</option> (string)"
+msgstr "CHFN_RESTRICT (łańcuch)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the PATH environment variable when a "
+"regular user login. The value is a colon separated list of paths (for "
+"example <replaceable>/bin:/usr/bin</replaceable>) and can be preceded by "
+"<replaceable>PATH=</replaceable>. The default value is <replaceable>PATH=/"
+"bin:/usr/bin</replaceable>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENV_SUPATH</option> (string)"
+msgstr "CHFN_RESTRICT (łańcuch)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the PATH environment variable when the "
+"superuser login. The value is a colon separated list of paths (for example "
+"<replaceable>/sbin:/bin:/usr/sbin:/usr/bin</replaceable>) and can be "
+"preceded by <replaceable>PATH=</replaceable>. The default value is "
+"<replaceable>PATH=/sbin:/bin:/usr/sbin:/usr/bin</replaceable>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENV_TZ</option> (string)"
+msgstr "CHFN_RESTRICT (łańcuch)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the TZ environment variable when a user "
+"login. The value can be the name of a timezone preceded by <replaceable>TZ=</"
+"replaceable> (for example <replaceable>TZ=CST6CDT</replaceable>), or the "
+"full path to the file containing the timezone specification (for example "
+"<filename>/etc/tzname</filename>)."
+msgstr ""
+
+#. TODO: it can in fact be used to set any other variable
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"If a full path is specified but the file does not exist or cannot be read, "
+"the default is to use <replaceable>TZ=CST6CDT</replaceable>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#: chsh.1.xml:32(term) chfn.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOGIN_STRING</option> (string)"
+msgstr "CHFN_RESTRICT (łańcuch)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+#: chsh.1.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"The string used for prompting a password. The default is to use \"Password: "
+"\", or a translation of that string. If you set this variable, the prompt "
+"will not be translated."
+msgstr ""
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+#: chsh.1.xml:39(para) chfn.1.xml:39(para)
+msgid ""
+"If the string contains <replaceable>%s</replaceable>, this will be replaced "
+"by the user's name."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>MAIL_CHECK_ENAB</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable checking and display of mailbox status upon login."
+msgstr ""
+
+#: su.1.xml:37(para) login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"You should disable it if the shell startup files already check for mail "
+"(\"mailx -e\" or equivalent)."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>QUOTAS_ENAB</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable setting of resource limits from <filename>/etc/limits</filename> and "
+"ulimit, umask, and niceness from the user's passwd gecos field."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SULOG_FILE</option> (string)"
+msgstr "CHFN_RESTRICT (łańcuch)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "If defined, all su activity is logged to this file."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SU_NAME</option> (string)"
+msgstr "MAIL_DIR (łańcuch)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"If defined, the command name to display when running \"su -\". For example, "
+"if this is defined as \"su\" then a \"ps\" will display the command is \"-su"
+"\". If not defined, then \"ps\" would display the name of the shell actually "
+"being run, e.g. something like \"-sh\"."
+msgstr ""
+
+#: su.1.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>SU_WHEEL_ONLY</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the user must be listed as a member of "
+"the first gid 0 group in <filename>/etc/group</filename> (called "
+"<replaceable>root</replaceable> on most Linux systems) to be able to "
+"<command>su</command> to uid 0 accounts. If the group doesn't exist or is "
+"empty, no one will be able to <command>su</command> to uid 0."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SYSLOG_SU_ENAB</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"Enable \"syslog\" logging of <command>su</command> activity - in addition to "
+"sulog file logging."
+msgstr ""
+
+#: su.1.xml:391(para)
+msgid ""
+"On success, <command>su</command> returns the exit value of the command it "
+"executed."
+msgstr ""
+
+#: su.1.xml:395(para)
+msgid ""
+"If this command was terminated by a signal, <command>su</command> returns "
+"the number of this signal plus 128."
+msgstr ""
+
+#: su.1.xml:399(para)
+msgid ""
+"If su has to kill the command (because it was asked to terminate, and the "
+"command did not terminate in time), <command>su</command> returns 255."
+msgstr ""
+
+#: su.1.xml:411(para)
+msgid "success (<option>--help</option> only)"
+msgstr ""
+
+#: su.1.xml:417(para)
+msgid "System or authentication failure"
+msgstr ""
+
+#: su.1.xml:421(replaceable)
+#, fuzzy
+#| msgid "12"
+msgid "126"
+msgstr "12"
+
+#: su.1.xml:423(para)
+msgid "The requested command was not found"
+msgstr ""
+
+#: su.1.xml:427(replaceable)
+#, fuzzy
+#| msgid "12"
+msgid "127"
+msgstr "12"
+
+#: su.1.xml:429(para)
+msgid "The requested command could not be executed"
+msgstr ""
+
+#: su.1.xml:404(para)
+msgid ""
+"Some exit values from <command>su</command> are independent from the "
+"executed command: <placeholder-1/>"
+msgstr ""
+
+#: su.1.xml:438(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>sh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>"
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>"
+
+#: sg.1.xml:58(refentrytitle) sg.1.xml:65(refname) sg.1.xml:71(command)
+msgid "sg"
+msgstr "sg"
+
+#: sg.1.xml:66(refpurpose)
+msgid "execute command as different group ID"
+msgstr ""
+
+#: sg.1.xml:74(arg)
+msgid "-c"
+msgstr "-c"
+
+#: sg.1.xml:73(arg)
+msgid "group <placeholder-1/> command"
+msgstr ""
+
+#: sg.1.xml:82(para)
+msgid ""
+"The <command>sg</command> command works similar to <command>newgrp</command> "
+"but accepts a command. The command will be executed with the <filename>/bin/"
+"sh</filename> shell. With most shells you may run <command>sg</command> "
+"from, you need to enclose multi-word commands in quotes. Another difference "
+"between <command>newgrp</command> and <command>sg</command> is that some "
+"shells treat <command>newgrp</command> specially, replacing themselves with "
+"a new instance of a shell that <command>newgrp</command> creates. This "
+"doesn't happen with <command>sg</command>, so upon exit from a <command>sg</"
+"command> command you are returned to your previous group ID."
+msgstr ""
+
+#: sg.1.xml:32(term) newgrp.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SYSLOG_SG_ENAB</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: sg.1.xml:34(para) newgrp.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable \"syslog\" logging of <command>sg</command> activity."
+msgstr ""
+
+#: sg.1.xml:141(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>login</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>"
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>"
+
+#: shadow.5.xml:57(refentrytitle) shadow.5.xml:64(refname)
+#: shadow.3.xml:57(refentrytitle) shadow.3.xml:64(refname)
+#: pwck.8.xml:84(replaceable) grpck.8.xml:76(replaceable)
+msgid "shadow"
+msgstr ""
+
+#: shadow.5.xml:65(refpurpose)
+#, fuzzy
+#| msgid "can't update password file"
+msgid "shadowed password file"
+msgstr "nie można zaktualizować pliku z hasłami"
+
+#: shadow.5.xml:70(para)
+msgid ""
+"<filename>shadow</filename> is a file which contains the password "
+"information for the system's accounts and optional aging information."
+msgstr ""
+
+#: shadow.5.xml:76(para) gshadow.5.xml:64(para)
+msgid ""
+"This file must not be readable by regular users if password security is to "
+"be maintained."
+msgstr ""
+
+#: shadow.5.xml:81(para)
+msgid ""
+"Each line of this file contains 9 fields, separated by colons (<quote>:</"
+"quote>), in the following order:"
+msgstr ""
+
+#: shadow.5.xml:88(emphasis) passwd.5.xml:78(para)
+msgid "login name"
+msgstr ""
+
+#: shadow.5.xml:90(para)
+msgid "It must be a valid account name, which exist on the system."
+msgstr ""
+
+#: shadow.5.xml:96(emphasis) gshadow.5.xml:83(emphasis)
+msgid "encrypted password"
+msgstr ""
+
+#: shadow.5.xml:98(para)
+msgid ""
+"This field may be empty, in which case no passwords are required to "
+"authenticate as the specified login name. However, some applications which "
+"read the <filename>/etc/shadow</filename> file may decide not to permit any "
+"access at all if the password field is empty."
+msgstr ""
+
+#: shadow.5.xml:105(para) gshadow.5.xml:107(para)
+msgid ""
+"A password field which starts with an exclamation mark means that the "
+"password is locked. The remaining characters on the line represent the "
+"password field before the password was locked."
+msgstr ""
+
+#: shadow.5.xml:111(para) passwd.5.xml:126(para) gshadow.5.xml:85(para)
+msgid ""
+"Refer to <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry> for details on how this string is interpreted."
+msgstr ""
+
+#: shadow.5.xml:116(para) passwd.5.xml:131(para)
+#, fuzzy
+msgid ""
+"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)."
+msgstr ""
+"Nowa wartość pola komentarza dla danego użytkownika w pliku haseł. Zwykle "
+"jest zmieniana przy pomocy polecenia <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+#: shadow.5.xml:127(emphasis)
+msgid "date of last password change"
+msgstr ""
+
+#: shadow.5.xml:130(para)
+msgid ""
+"The date of the last password change, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:134(para)
+msgid ""
+"The value 0 has a special meaning, which is that the user should change her "
+"password the next time she will log in the system."
+msgstr ""
+
+#: shadow.5.xml:139(para)
+msgid "An empty field means that password aging features are disabled."
+msgstr ""
+
+#: shadow.5.xml:146(emphasis)
+msgid "minimum password age"
+msgstr ""
+
+#: shadow.5.xml:148(para)
+msgid ""
+"The minimum password age is the number of days the user will have to wait "
+"before she will be allowed to change her password again."
+msgstr ""
+
+#: shadow.5.xml:153(para)
+msgid "An empty field and value 0 mean that there are no minimum password age."
+msgstr ""
+
+#: shadow.5.xml:160(emphasis)
+msgid "maximum password age"
+msgstr ""
+
+#: shadow.5.xml:162(para)
+msgid ""
+"The maximum password age is the number of days after which the user will "
+"have to change her password."
+msgstr ""
+
+#: shadow.5.xml:166(para)
+msgid ""
+"After this number of days is elapsed, the password may still be valid. The "
+"user should be asked to change her password the next time she will log in."
+msgstr ""
+
+#: shadow.5.xml:171(para)
+msgid ""
+"An empty field means that there are no maximum password age, no password "
+"warning period, and no password inactivity period (see below)."
+msgstr ""
+
+#: shadow.5.xml:176(para)
+msgid ""
+"If the maximum password age is lower than the minimum password age, the user "
+"cannot change her password."
+msgstr ""
+
+#: shadow.5.xml:184(emphasis)
+msgid "password warning period"
+msgstr ""
+
+#: shadow.5.xml:187(para)
+msgid ""
+"The number of days before a password is going to expire (see the maximum "
+"password age above) during which the user should be warned."
+msgstr ""
+
+#: shadow.5.xml:192(para)
+msgid ""
+"An empty field and value 0 mean that there are no password warning period."
+msgstr ""
+
+#: shadow.5.xml:200(emphasis)
+msgid "password inactivity period"
+msgstr ""
+
+#: shadow.5.xml:203(para)
+msgid ""
+"The number of days after a password has expired (see the maximum password "
+"age above) during which the password should still be accepted (and the user "
+"should update her password during the next login)."
+msgstr ""
+
+#: shadow.5.xml:209(para)
+msgid ""
+"After expiration of the password and this expiration period is elapsed, no "
+"login is possible using the current user's password. The user should contact "
+"her administrator."
+msgstr ""
+
+#: shadow.5.xml:214(para)
+msgid ""
+"An empty field means that there are no enforcement of an inactivity period."
+msgstr ""
+
+#: shadow.5.xml:222(emphasis)
+#, fuzzy
+#| msgid "User account information."
+msgid "account expiration date"
+msgstr "Informacja o kontach użytkowników."
+
+#: shadow.5.xml:225(para)
+msgid ""
+"The date of expiration of the account, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:229(para)
+msgid ""
+"Note that an account expiration differs from a password expiration. In case "
+"of an account expiration, the user shall not be allowed to login. In case of "
+"a password expiration, the user is not allowed to login using her password."
+msgstr ""
+
+#: shadow.5.xml:235(para)
+msgid "An empty field means that the account will never expire."
+msgstr ""
+
+#: shadow.5.xml:238(para)
+msgid ""
+"The value 0 should not be used as it is interpreted as either an account "
+"with no expiration, or as an expiration on Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:246(emphasis)
+msgid "reserved field"
+msgstr ""
+
+#: shadow.5.xml:248(para)
+msgid "This field is reserved for future use."
+msgstr ""
+
+#: shadow.5.xml:270(filename)
+#, fuzzy
+#| msgid "/etc/shadow"
+msgid "/etc/shadow-"
+msgstr "/etc/shadow"
+
+#: shadow.5.xml:272(para)
+msgid "Backup file for /etc/shadow."
+msgstr ""
+
+#: shadow.5.xml:273(para) passwd.5.xml:178(para)
+msgid ""
+"Note that this file is used by the tools of the shadow toolsuite, but not by "
+"all user and password management tools."
+msgstr ""
+
+#: shadow.5.xml:284(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>"
+msgid ""
+"<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>"
+
+#: shadow.3.xml:59(refmiscinfo)
+msgid "Library Calls"
+msgstr ""
+
+#: shadow.3.xml:65(refname)
+msgid "getspnam"
+msgstr "getspnam"
+
+#: shadow.3.xml:66(refpurpose)
+msgid "encrypted password file routines"
+msgstr ""
+
+#: shadow.3.xml:70(title)
+msgid "SYNTAX"
+msgstr "SKŁADNIA"
+
+#: shadow.3.xml:72(emphasis)
+msgid "#include &lt;shadow.h&gt;"
+msgstr "#include &lt;shadow.h&gt;"
+
+#: shadow.3.xml:76(emphasis)
+msgid "struct spwd *getspent();"
+msgstr "struct spwd *getspent();"
+
+#: shadow.3.xml:80(emphasis)
+msgid "struct spwd *getspnam(char"
+msgstr "struct spwd *getspnam(char"
+
+#: shadow.3.xml:81(emphasis)
+msgid "*name"
+msgstr "*name"
+
+#: shadow.3.xml:81(emphasis) shadow.3.xml:94(emphasis)
+#: shadow.3.xml:99(emphasis) shadow.3.xml:105(emphasis)
+msgid ");"
+msgstr ");"
+
+#: shadow.3.xml:85(emphasis)
+msgid "void setspent();"
+msgstr "void setspent()"
+
+#: shadow.3.xml:89(emphasis)
+msgid "void endspent();"
+msgstr "void endspent();"
+
+#: shadow.3.xml:93(emphasis)
+msgid "struct spwd *fgetspent(FILE"
+msgstr "struct spwd *fgetspent(FILE"
+
+#: shadow.3.xml:94(emphasis) shadow.3.xml:105(emphasis)
+msgid "*fp"
+msgstr "*fp"
+
+#: shadow.3.xml:98(emphasis)
+msgid "struct spwd *sgetspent(char"
+msgstr "struct spwd *sgetspent(char"
+
+#: shadow.3.xml:99(emphasis)
+msgid "*cp"
+msgstr "*cp"
+
+#: shadow.3.xml:103(emphasis)
+msgid "int putspent(struct spwd"
+msgstr "int putspent(struct spwd"
+
+#: shadow.3.xml:104(emphasis)
+msgid "*p,"
+msgstr "*p,"
+
+#: shadow.3.xml:104(emphasis)
+msgid "FILE"
+msgstr "FILE"
+
+#: shadow.3.xml:109(emphasis)
+msgid "int lckpwdf();"
+msgstr "int lckpwdf();"
+
+#: shadow.3.xml:113(emphasis)
+msgid "int ulckpwdf();"
+msgstr "int ulckpwdf();"
+
+#: shadow.3.xml:119(para)
+msgid ""
+"<emphasis remap=\"I\">shadow</emphasis> manipulates the contents of the "
+"shadow password file, <filename>/etc/shadow</filename>. The structure in the "
+"<emphasis remap=\"I\">#include</emphasis> file is:"
+msgstr ""
+
+#: shadow.3.xml:124(programlisting)
+#, no-wrap
+msgid ""
+"struct spwd {\n"
+" char\t\t*sp_namp; /* user login name */\n"
+" char\t\t*sp_pwdp; /* encrypted password */\n"
+" long int\t\tsp_lstchg; /* last password change */\n"
+" long int\t\tsp_min; /* days until change allowed. */\n"
+" long int\t\tsp_max; /* days before change required */\n"
+" long int\t\tsp_warn; /* days warning for expiration */\n"
+" long int\t\tsp_inact; /* days before account inactive */\n"
+" long int\t\tsp_expire; /* date when account expires */\n"
+" unsigned long int\tsp_flag; /* reserved for future use */\n"
+"}\n"
+" "
+msgstr ""
+
+#: shadow.3.xml:136(para)
+msgid "The meanings of each field are:"
+msgstr ""
+
+#: shadow.3.xml:139(para)
+msgid "sp_namp - pointer to null-terminated user name"
+msgstr ""
+
+#: shadow.3.xml:142(para)
+msgid "sp_pwdp - pointer to null-terminated password"
+msgstr ""
+
+#: shadow.3.xml:145(para)
+msgid "sp_lstchg - days since Jan 1, 1970 password was last changed"
+msgstr ""
+
+#: shadow.3.xml:148(para)
+msgid "sp_min - days before which password may not be changed"
+msgstr ""
+
+#: shadow.3.xml:151(para)
+msgid "sp_max - days after which password must be changed"
+msgstr ""
+
+#: shadow.3.xml:154(para)
+msgid ""
+"sp_warn - days before password is to expire that user is warned of pending "
+"password expiration"
+msgstr ""
+
+#: shadow.3.xml:159(para)
+msgid ""
+"sp_inact - days after password expires that account is considered inactive "
+"and disabled"
+msgstr ""
+
+#: shadow.3.xml:164(para)
+msgid "sp_expire - days since Jan 1, 1970 when account will be disabled"
+msgstr ""
+
+#: shadow.3.xml:167(para)
+msgid "sp_flag - reserved for future use"
+msgstr ""
+
+#: shadow.3.xml:175(para)
+msgid ""
+"<emphasis>getspent</emphasis>, <emphasis>getspname</emphasis>, "
+"<emphasis>fgetspent</emphasis>, and <emphasis>sgetspent</emphasis> each "
+"return a pointer to a <emphasis>struct spwd</emphasis>. <emphasis>getspent</"
+"emphasis> returns the next entry from the file, and <emphasis>fgetspent</"
+"emphasis> returns the next entry from the given stream, which is assumed to "
+"be a file of the proper format. <emphasis>sgetspent</emphasis> returns a "
+"pointer to a <emphasis>struct spwd</emphasis> using the provided string as "
+"input. <emphasis>getspnam</emphasis> searches from the current position in "
+"the file for an entry matching <emphasis>name</emphasis>."
+msgstr ""
+
+#: shadow.3.xml:188(para)
+msgid ""
+"<emphasis>setspent</emphasis> and <emphasis>endspent</emphasis> may be used "
+"to begin and end, respectively, access to the shadow password file."
+msgstr ""
+
+#: shadow.3.xml:194(para)
+msgid ""
+"The <emphasis>lckpwdf</emphasis> and <emphasis>ulckpwdf</emphasis> routines "
+"should be used to insure exclusive access to the <filename>/etc/shadow</"
+"filename> file. <emphasis>lckpwdf</emphasis> attempts to acquire a lock "
+"using <emphasis>pw_lock</emphasis> for up to 15 seconds. It continues by "
+"attempting to acquire a second lock using <emphasis>spw_lock</emphasis> for "
+"the remainder of the initial 15 seconds. Should either attempt fail after a "
+"total of 15 seconds, <emphasis>lckpwdf</emphasis> returns -1. When both "
+"locks are acquired 0 is returned."
+msgstr ""
+
+#: shadow.3.xml:209(para)
+msgid ""
+"Routines return NULL if no more entries are available or if an error occurs "
+"during processing. Routines which have <emphasis>int</emphasis> as the "
+"return value return 0 for success and -1 for failure."
+msgstr ""
+
+#: shadow.3.xml:219(para)
+msgid ""
+"These routines may only be used by the superuser as access to the shadow "
+"password file is restricted."
+msgstr ""
+
+#: shadow.3.xml:239(para)
+msgid ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: pwconv.8.xml:63(refentrytitle) pwconv.8.xml:70(refname)
+#: pwconv.8.xml:79(command) login.defs.5.xml:439(term)
+msgid "pwconv"
+msgstr "pwconv"
+
+#: pwconv.8.xml:71(refname) pwconv.8.xml:85(command) login.defs.5.xml:448(term)
+msgid "pwunconv"
+msgstr "pwunconv"
+
+#: pwconv.8.xml:72(refname) pwconv.8.xml:91(command) login.defs.5.xml:344(term)
+msgid "grpconv"
+msgstr "grpconv"
+
+#: pwconv.8.xml:73(refname) pwconv.8.xml:97(command) login.defs.5.xml:350(term)
+msgid "grpunconv"
+msgstr "grpunconv"
+
+#: pwconv.8.xml:74(refpurpose)
+msgid "convert to and from shadow passwords and groups"
+msgstr ""
+
+#: pwconv.8.xml:106(para)
+msgid ""
+"The <command>pwconv</command> command creates <emphasis remap=\"I\">shadow</"
+"emphasis> from <emphasis remap=\"I\">passwd</emphasis> and an optionally "
+"existing <emphasis remap=\"I\">shadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:111(para)
+msgid ""
+"<command>pwconv</command> does not work with <option>USE_TCB</option> "
+"enabled. To convert to tcb passwords, you should first use <command>pwconv</"
+"command> to convert to shadowed passwords by disabling <option>USE_TCB</"
+"option> in <filename>login.defs</filename> and then convert to tcb password "
+"using <command>tcb_convert</command> (and re-enable <option>USE_TCB</option> "
+"in <filename>login.defs</filename>.)"
+msgstr ""
+
+#: pwconv.8.xml:121(para)
+msgid ""
+"The <command>pwunconv</command> command creates <emphasis remap=\"I"
+"\">passwd</emphasis> from <emphasis remap=\"I\">passwd</emphasis> and "
+"<emphasis remap=\"I\">shadow</emphasis> and then removes <emphasis remap=\"I"
+"\">shadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:127(para)
+msgid ""
+"<command>pwunconv</command> does not work with <option>USE_TCB</option> "
+"enabled. You should first switch back from tcb to shadowed passwords using "
+"<command>tcb_unconvert</command>, and then disable <option>USE_TCB</option> "
+"in <filename>login.defs</filename> before using <command>pwunconv</command>."
+msgstr ""
+
+#: pwconv.8.xml:136(para)
+msgid ""
+"The <command>grpconv</command> command creates <emphasis remap=\"I"
+"\">gshadow</emphasis> from <emphasis remap=\"I\">group</emphasis> and an "
+"optionally existing <emphasis remap=\"I\">gshadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:142(para)
+msgid ""
+"The <command>grpunconv</command> command creates <emphasis remap=\"I"
+"\">group</emphasis> from <emphasis remap=\"I\">group</emphasis> and "
+"<emphasis remap=\"I\">gshadow</emphasis> and then removes <emphasis remap=\"I"
+"\">gshadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:149(para)
+msgid ""
+"These four programs all operate on the normal and shadow password and group "
+"files: <filename>/etc/passwd</filename>, <filename>/etc/group</filename>, "
+"<filename>/etc/shadow</filename>, and <filename>/etc/gshadow</filename>."
+msgstr ""
+
+#: pwconv.8.xml:156(para)
+msgid ""
+"Each program acquires the necessary locks before conversion. "
+"<command>pwconv</command> and <command>grpconv</command> are similar. First, "
+"entries in the shadowed file which don't exist in the main file are removed. "
+"Then, shadowed entries which don't have `x' as the password in the main file "
+"are updated. Any missing shadowed entries are added. Finally, passwords in "
+"the main file are replaced with `x'. These programs can be used for initial "
+"conversion as well to update the shadowed file if the main file is edited by "
+"hand."
+msgstr ""
+
+#: pwconv.8.xml:167(para)
+msgid ""
+"<command>pwconv</command> will use the values of <emphasis remap=\"I"
+"\">PASS_MIN_DAYS</emphasis>, <emphasis remap=\"I\">PASS_MAX_DAYS</emphasis>, "
+"and <emphasis remap=\"I\">PASS_WARN_AGE</emphasis> from <filename>/etc/login."
+"defs</filename> when adding new entries to <filename>/etc/shadow</filename>."
+msgstr ""
+
+#: pwconv.8.xml:176(para)
+msgid ""
+"Likewise <command>pwunconv</command> and <command>grpunconv</command> are "
+"similar. Passwords in the main file are updated from the shadowed file. "
+"Entries which exist in the main file but not in the shadowed file are left "
+"alone. Finally, the shadowed file is removed. Some password aging "
+"information is lost by <command>pwunconv</command>. It will convert what it "
+"can."
+msgstr ""
+
+#: pwconv.8.xml:188(para)
+#, fuzzy
+#| msgid ""
+#| "The options which apply to the <command>vipw</command> and <command>vigr</"
+#| "command> commands are:"
+msgid ""
+"The options which apply to the <command>pwconv</command>, <command>pwunconv</"
+"command>, <command>grpconv</command>, and <command>grpunconv</command> "
+"commands are:"
+msgstr ""
+"Polecenia <command>vipw</command> i <command>vigr</command> posiadają "
+"następujące opcje:Polecenia <command>vipw</command> i <command>vigr</"
+"command> posiadają następujące opcje:"
+
+#: pwconv.8.xml:217(para)
+msgid ""
+"Errors in the password or group files (such as invalid or duplicate entries) "
+"may cause these programs to loop forever or fail in other strange ways. "
+"Please run <command>pwck</command> and <command>grpck</command> to correct "
+"any such errors before converting to or from shadow passwords or groups."
+msgstr ""
+
+#: pwconv.8.xml:228(para)
+msgid ""
+"The following configuration variable in <filename>/etc/login.defs</filename> "
+"changes the behavior of <command>grpconv</command> and <command>grpunconv</"
+"command>:"
+msgstr ""
+
+#: pwconv.8.xml:236(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of <command>pwconv</command>:"
+msgstr ""
+
+#: pwconv.8.xml:263(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry><phrase condition=\"tcb\">, "
+"<citerefentry><refentrytitle>tcb_convert</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>tcb_unconvert</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: pwck.8.xml:47(contrib) lastlog.8.xml:43(contrib) grpck.8.xml:42(contrib)
+msgid "Creation, 1992"
+msgstr ""
+
+#: pwck.8.xml:63(refentrytitle) pwck.8.xml:70(refname) pwck.8.xml:76(command)
+#: login.defs.5.xml:430(term)
+msgid "pwck"
+msgstr "pwck"
+
+#: pwck.8.xml:71(refpurpose)
+msgid "verify integrity of password files"
+msgstr ""
+
+#: pwck.8.xml:80(replaceable) passwd.5.xml:57(refentrytitle)
+#: passwd.5.xml:64(refname) passwd.1.xml:64(refentrytitle)
+#: passwd.1.xml:71(refname) passwd.1.xml:77(command) login.defs.5.xml:419(term)
+msgid "passwd"
+msgstr "passwd"
+
+#: pwck.8.xml:93(para)
+msgid ""
+"The <command>pwck</command> command verifies the integrity of the users and "
+"authentication information. It checks that all entries in <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename><phrase condition=\"tcb"
+"\">(or the files in <filename>/etc/tcb</filename>, when <option>USE_TCB</"
+"option> is enabled)</phrase> have the proper format and contain valid data. "
+"The user is prompted to delete entries that are improperly formatted or "
+"which have other uncorrectable errors."
+msgstr ""
+
+#: pwck.8.xml:105(para) grpck.8.xml:94(para)
+msgid "Checks are made to verify that each entry has:"
+msgstr ""
+
+#: pwck.8.xml:108(para) grpck.8.xml:98(para)
+msgid "the correct number of fields"
+msgstr ""
+
+#: pwck.8.xml:111(para)
+msgid "a unique and valid user name"
+msgstr ""
+
+#: pwck.8.xml:114(para)
+msgid "a valid user and group identifier"
+msgstr ""
+
+#: pwck.8.xml:117(para)
+msgid "a valid primary group"
+msgstr ""
+
+#: pwck.8.xml:120(para)
+msgid "a valid home directory"
+msgstr ""
+
+#: pwck.8.xml:123(para)
+msgid "a valid login shell"
+msgstr ""
+
+#: pwck.8.xml:127(para)
+msgid ""
+"<filename>shadow</filename> checks are enabled when a second file parameter "
+"is specified or when <filename>/etc/shadow</filename> exists on the system."
+msgstr ""
+
+#: pwck.8.xml:132(para)
+msgid "These checks are the following:"
+msgstr ""
+
+#: pwck.8.xml:137(para)
+msgid ""
+"every passwd entry has a matching shadow entry, and every shadow entry has a "
+"matching passwd entry"
+msgstr ""
+
+#: pwck.8.xml:143(para)
+msgid "passwords are specified in the shadowed file"
+msgstr ""
+
+#: pwck.8.xml:146(para)
+msgid "shadow entries have the correct number of fields"
+msgstr ""
+
+#: pwck.8.xml:149(para)
+msgid "shadow entries are unique in shadow"
+msgstr ""
+
+#: pwck.8.xml:152(para)
+msgid "the last password changes are not in the future"
+msgstr ""
+
+#: pwck.8.xml:156(para)
+msgid ""
+"The checks for correct number of fields and unique user name are fatal. If "
+"the entry has the wrong number of fields, the user will be prompted to "
+"delete the entire line. If the user does not answer affirmatively, all "
+"further checks are bypassed. An entry with a duplicated user name is "
+"prompted for deletion, but the remaining checks will still be made. All "
+"other errors are warning and the user is encouraged to run the "
+"<command>usermod</command> command to correct the error."
+msgstr ""
+
+#: pwck.8.xml:167(para)
+msgid ""
+"The commands which operate on the <filename>/etc/passwd</filename> file are "
+"not able to alter corrupted or duplicated entries. <command>pwck</command> "
+"should be used in those circumstances to remove the offending entry."
+msgstr ""
+
+#: pwck.8.xml:177(para) grpck.8.xml:148(para)
+#, fuzzy
+msgid ""
+"The <option>-r</option> and <option>-s</option> options cannot be combined."
+msgstr "<option>-</option>, <option>-l</option>, <option>--login</option>"
+
+#: pwck.8.xml:181(para)
+msgid "The options which apply to the <command>pwck</command> command are:"
+msgstr "Polecenie <command>pwck</command> posiada następujące opcje:"
+
+#: pwck.8.xml:204(para)
+msgid ""
+"Report errors only. The warnings which do not require any action from the "
+"user won't be displayed."
+msgstr ""
+
+#: pwck.8.xml:211(term) grpck.8.xml:163(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--remove</option>"
+msgid "<option>-r</option>, <option>--read-only</option>"
+msgstr "<option>-r</option>, <option>--remove</option>"
+
+#: pwck.8.xml:213(para)
+msgid "Execute the <command>pwck</command> command in read-only mode."
+msgstr ""
+
+#: pwck.8.xml:231(term) grpck.8.xml:185(term)
+#, fuzzy
+#| msgid "<option>-s</option>, <option>--shadow</option>"
+msgid "<option>-s</option>, <option>--sort</option>"
+msgstr "<option>-s</option>, <option>--shadow</option>"
+
+#: pwck.8.xml:233(para)
+msgid ""
+"Sort entries in <filename>/etc/passwd</filename> and <filename>/etc/shadow</"
+"filename> by UID."
+msgstr ""
+
+#: pwck.8.xml:237(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid "This option has no effect when <option>USE_TCB</option> is enabled."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: pwck.8.xml:244(para)
+msgid ""
+"By default, <command>pwck</command> operates on the files <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename><phrase condition=\"tcb"
+"\"> (or the files in <filename>/etc/tcb</filename>)</phrase>. The user may "
+"select alternate files with the <replaceable>passwd</replaceable> and "
+"<replaceable>shadow</replaceable> parameters."
+msgstr ""
+
+#: pwck.8.xml:253(para)
+msgid ""
+"Note that when <option>USE_TCB</option> is enabled, you cannot specify an "
+"alternative <replaceable>shadow</replaceable> file. In future releases, this "
+"parameter could be replaced by an alternate TCB directory."
+msgstr ""
+
+#: pwck.8.xml:322(para)
+msgid "one or more bad password entries"
+msgstr ""
+
+#: pwck.8.xml:328(para)
+msgid "can't open password files"
+msgstr ""
+
+#: pwck.8.xml:334(para)
+msgid "can't lock password files"
+msgstr ""
+
+#: pwck.8.xml:340(para)
+msgid "can't update password files"
+msgstr ""
+
+#: pwck.8.xml:346(para)
+#, fuzzy
+#| msgid "can't update password file"
+msgid "can't sort password files"
+msgstr "nie można zaktualizować pliku z hasłami"
+
+#: pwck.8.xml:304(para)
+msgid ""
+"The <command>pwck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Polecenie <command>pwck</command> kończy działanie z następującymi "
+"wartościami kodów zakończenia: <placeholder-1/>"
+
+#: pwck.8.xml:355(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: porttime.5.xml:57(refentrytitle) porttime.5.xml:64(refname)
+msgid "porttime"
+msgstr ""
+
+#: porttime.5.xml:65(refpurpose)
+msgid "port access time file"
+msgstr ""
+
+#: porttime.5.xml:70(para)
+msgid ""
+"<emphasis remap=\"I\">porttime</emphasis> contains a list of tty devices, "
+"user names, and permitted login times."
+msgstr ""
+
+#: porttime.5.xml:75(para)
+msgid ""
+"Each entry consists of three colon separated fields. The first field is a "
+"comma separated list of tty devices, or an asterisk to indicate that all tty "
+"devices are matched by this entry. The second field is a comma separated "
+"list of user names, or an asterisk to indicated that all user names are "
+"matched by this entry. The third field is a comma separated list of "
+"permitted access times."
+msgstr ""
+
+#: porttime.5.xml:84(para)
+msgid ""
+"Each access time entry consists of zero or more days of the week, "
+"abbreviated <emphasis>Su</emphasis>, <emphasis>Mo</emphasis>, <emphasis>Tu</"
+"emphasis>, <emphasis>We</emphasis>, <emphasis>Th</emphasis>, <emphasis>Fr</"
+"emphasis>, and <emphasis>Sa</emphasis>, followed by a pair of times "
+"separated by a hyphen. The abbreviation <emphasis>Wk</emphasis> may be used "
+"to represent Monday thru Friday, and <emphasis>Al</emphasis> may be used to "
+"indicate every day. If no days are given, <emphasis>Al</emphasis> is assumed."
+msgstr ""
+
+#: porttime.5.xml:98(title)
+msgid "EXAMPLES"
+msgstr "PRZYKŁADY"
+
+#: porttime.5.xml:99(para)
+msgid ""
+"The following entry allows access to user <emphasis remap=\"B\">jfh</"
+"emphasis> on every port during weekdays from 9am to 5pm."
+msgstr ""
+
+#: porttime.5.xml:105(para)
+msgid "*:jfh:Wk0900-1700"
+msgstr "*:jfh:Wk0900-1700"
+
+#: porttime.5.xml:107(para)
+msgid ""
+"The following entries allow access only to the users <emphasis>root</"
+"emphasis> and <emphasis>oper</emphasis> on <filename>/dev/console</filename> "
+"at any time. This illustrates how the <filename>/etc/porttime</filename> "
+"file is an ordered list of access times. Any other user would match the "
+"second entry which does not permit access at any time."
+msgstr ""
+
+#: porttime.5.xml:116(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+" console:root,oper:Al0000-2400\n"
+" console:*:\n"
+" "
+msgstr ""
+"\n"
+" console:root,oper:Al0000-2400\n"
+" console:*:\n"
+" "
+
+#: porttime.5.xml:121(para)
+msgid ""
+"The following entry allows access for the user <emphasis>games</emphasis> on "
+"any port during non-working hours."
+msgstr ""
+
+#: porttime.5.xml:126(para)
+msgid "*:games:Wk1700-0900,SaSu0000-2400"
+msgstr "*:games:Wk1700-0900,SaSu0000-2400"
+
+#: porttime.5.xml:133(filename) logoutd.8.xml:92(filename)
+msgid "/etc/porttime"
+msgstr "/etc/porttime"
+
+#: porttime.5.xml:135(para) logoutd.8.xml:94(para)
+msgid "File containing port access."
+msgstr "Plik zawierający ustawienia dostępu do portów."
+
+#: porttime.5.xml:143(para) login.access.5.xml:134(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: passwd.5.xml:65(refpurpose)
+msgid "the password file"
+msgstr ""
+
+#: passwd.5.xml:70(para)
+msgid ""
+"<filename>/etc/passwd</filename> contains one line for each user account, "
+"with seven fields delimited by colons (<quote>:</quote>). These fields are:"
+msgstr ""
+
+#: passwd.5.xml:81(para)
+msgid "optional encrypted password"
+msgstr ""
+
+#: passwd.5.xml:84(para)
+msgid "numerical user ID"
+msgstr ""
+
+#: passwd.5.xml:87(para)
+msgid "numerical group ID"
+msgstr ""
+
+#: passwd.5.xml:90(para)
+msgid "user name or comment field"
+msgstr ""
+
+#: passwd.5.xml:93(para)
+msgid "user home directory"
+msgstr ""
+
+#: passwd.5.xml:96(para)
+msgid "optional user command interpreter"
+msgstr ""
+
+#: passwd.5.xml:100(para)
+msgid ""
+"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."
+msgstr ""
+
+#: passwd.5.xml:109(para)
+msgid ""
+"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."
+msgstr ""
+
+#: passwd.5.xml:118(para)
+msgid ""
+"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."
+msgstr ""
+
+#: passwd.5.xml:138(para)
+msgid ""
+"The comment field is used by various system utilities, such as "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+
+#: passwd.5.xml:144(para)
+msgid ""
+"The home directory field provides the name of the initial working directory. "
+"The <command>login</command> program uses this information to set the value "
+"of the <envar>$HOME</envar> environmental variable."
+msgstr ""
+
+#: passwd.5.xml:150(para)
+msgid ""
+"The command interpreter field provides the name of the user's command "
+"language interpreter, or the name of the initial program to execute. The "
+"<command>login</command> program uses this information to set the value of "
+"the <envar>$SHELL</envar> environmental variable. If this field is empty, it "
+"defaults to the value <filename>/bin/sh</filename>."
+msgstr ""
+
+#: passwd.5.xml:171(para)
+msgid "optional encrypted password file"
+msgstr ""
+
+#: passwd.5.xml:175(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/passwd-"
+msgstr "/etc/passwd"
+
+#: passwd.5.xml:177(para)
+msgid "Backup file for /etc/passwd."
+msgstr ""
+
+#: passwd.5.xml:189(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getent</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getpwnam</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwunconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: passwd.1.xml:72(refpurpose)
+msgid "change user password"
+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 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)
+msgid "Password Changes"
+msgstr ""
+
+#: passwd.1.xml:99(para)
+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)
+msgid ""
+"After the password has been entered, password aging information is checked "
+"to see if the user is permitted to change the password at this time. If not, "
+"<command>passwd</command> refuses to change the password and exits."
+msgstr ""
+
+#: passwd.1.xml:114(para)
+msgid ""
+"The user is then prompted twice for a replacement password. The second entry "
+"is compared against the first and both are required to match in order for "
+"the password to be changed."
+msgstr ""
+
+#: passwd.1.xml:120(para)
+msgid ""
+"Then, the password is tested for complexity. As a general guideline, "
+"passwords should consist of 6 to 8 characters including one or more "
+"characters from each of the following sets:"
+msgstr ""
+
+#: passwd.1.xml:128(para)
+msgid "lower case alphabetics"
+msgstr ""
+
+#: passwd.1.xml:131(para)
+msgid "digits 0 thru 9"
+msgstr ""
+
+#: passwd.1.xml:134(para)
+msgid "punctuation marks"
+msgstr ""
+
+#: passwd.1.xml:138(para)
+msgid ""
+"Care must be taken not to include the system default erase or kill "
+"characters. <command>passwd</command> will reject any password which is not "
+"suitably complex."
+msgstr ""
+
+#: passwd.1.xml:147(title)
+msgid "Hints for user passwords"
+msgstr ""
+
+#: passwd.1.xml:148(para)
+msgid ""
+"The security of a password depends upon the strength of the encryption "
+"algorithm and the size of the key space. The legacy <emphasis>UNIX</"
+"emphasis> System encryption method is based on the NBS DES algorithm. More "
+"recent methods are now recommended (see <option>ENCRYPT_METHOD</option>). "
+"The size of the key space depends upon the randomness of the password which "
+"is selected."
+msgstr ""
+
+#: passwd.1.xml:157(para)
+msgid ""
+"Compromises in password security normally result from careless password "
+"selection or handling. For this reason, you should not select a password "
+"which appears in a dictionary or which must be written down. The password "
+"should also not be a proper name, your license number, birth date, or street "
+"address. Any of these may be used as guesses to violate system security."
+msgstr ""
+
+#: passwd.1.xml:166(para)
+msgid ""
+"You can find advice on how to choose a strong password on http://en."
+"wikipedia.org/wiki/Password_strength"
+msgstr ""
+
+#: passwd.1.xml:175(para)
+msgid "The options which apply to the <command>passwd</command> command are:"
+msgstr "Polecenie <command>passwd</command> posiada następujące opcje:"
+
+#: passwd.1.xml:180(term) faillog.8.xml:96(term)
+msgid "<option>-a</option>, <option>--all</option>"
+msgstr "<option>-a</option>, <option>--all</option>"
+
+#: passwd.1.xml:184(para)
+msgid ""
+"This option can be used only with <option>-S</option> and causes show status "
+"for all users."
+msgstr ""
+
+#: passwd.1.xml:191(term)
+msgid "<option>-d</option>, <option>--delete</option>"
+msgstr "<option>-d</option>, <option>--delete</option>"
+
+#: passwd.1.xml:195(para)
+msgid ""
+"Delete a user's password (make it empty). This is a quick way to disable a "
+"password for an account. It will set the named account passwordless."
+msgstr ""
+
+#: passwd.1.xml:203(term)
+msgid "<option>-e</option>, <option>--expire</option>"
+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 their password at the user's next login."
+msgstr ""
+
+#: passwd.1.xml:220(term)
+msgid ""
+"<option>-i</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-i</option>, <option>--inactive</option>&nbsp;"
+"<replaceable>NIEAKTYWNE</replaceable>"
+
+#: passwd.1.xml:224(para)
+msgid ""
+"This option is used to disable an account after the password has been "
+"expired for a number of days. After a user account has had an expired "
+"password for <replaceable>INACTIVE</replaceable> days, the user may no "
+"longer sign on to the account."
+msgstr ""
+
+#: passwd.1.xml:233(term)
+msgid "<option>-k</option>, <option>--keep-tokens</option>"
+msgstr "<option>-k</option>, <option>--keep-tokens</option>"
+
+#: passwd.1.xml:237(para)
+msgid ""
+"Indicate password change should be performed only for expired authentication "
+"tokens (passwords). The user wishes to keep their non-expired tokens as "
+"before."
+msgstr ""
+
+#: passwd.1.xml:245(term)
+msgid "<option>-l</option>, <option>--lock</option>"
+msgstr "<option>-l</option>, <option>--lock</option>"
+
+#: passwd.1.xml:249(para)
+msgid ""
+"Lock the password of the named account. This option disables a password by "
+"changing it to a value which matches no possible encrypted value (it adds a "
+"´!´ at the beginning of the password)."
+msgstr ""
+
+#: passwd.1.xml:255(para)
+msgid ""
+"Note that this does not disable the account. The user may still be able to "
+"login using another authentication token (e.g. an SSH key). To disable the "
+"account, administrators should use <command>usermod --expiredate 1</command> "
+"(this set the account's expire date to Jan 2, 1970)."
+msgstr ""
+
+#: passwd.1.xml:262(para)
+msgid "Users with a locked password are not allowed to change their password."
+msgstr ""
+
+#: passwd.1.xml:269(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-m</option>, <option>--mindays</option>&nbsp;"
+#| "<replaceable>MIN_DAYS</replaceable>"
+msgid ""
+"<option>-n</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DNI</"
+"replaceable>"
+
+#: passwd.1.xml:273(para) chage.1.xml:174(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 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 "
+"może je zmieniać w dowolnym czasie."
+
+#: passwd.1.xml:291(term)
+msgid ""
+"<option>-r</option>, <option>--repository</option>&nbsp;"
+"<replaceable>REPOSITORY</replaceable>"
+msgstr ""
+"<option>-r</option>, <option>--repository</option>&nbsp;"
+"<replaceable>REPOZYTORIUM</replaceable>"
+
+#: passwd.1.xml:295(para)
+msgid "change password in <replaceable>REPOSITORY</replaceable> repository"
+msgstr ""
+
+#: passwd.1.xml:313(term)
+msgid "<option>-S</option>, <option>--status</option>"
+msgstr "<option>-S</option>, <option>--status</option>"
+
+#: passwd.1.xml:317(para)
+msgid ""
+"Display account status information. The status information consists of 7 "
+"fields. The first field is the user's login name. The second field indicates "
+"if the user account has a locked password (L), has no password (NP), or has "
+"a usable password (P). The third field gives the date of the last password "
+"change. The next four fields are the minimum age, maximum age, warning "
+"period, and inactivity period for the password. These ages are expressed in "
+"days."
+msgstr ""
+
+#: passwd.1.xml:331(term)
+msgid "<option>-u</option>, <option>--unlock</option>"
+msgstr "<option>-u</option>, <option>--unlock</option>"
+
+#: passwd.1.xml:335(para)
+msgid ""
+"Unlock the password of the named account. This option re-enables a password "
+"by changing the password back to its previous value (to the value before "
+"using the <option>-l</option> option)."
+msgstr ""
+
+#: passwd.1.xml:344(term)
+msgid ""
+"<option>-w</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>WARN_DAYS</replaceable>"
+msgstr ""
+"<option>-w</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>DNI_OSTRZ</replaceable>"
+
+#: 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 their password is "
+"about to expire."
+msgstr ""
+
+#: passwd.1.xml:357(term)
+msgid ""
+"<option>-x</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-x</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DNI</"
+"replaceable>"
+
+#: passwd.1.xml:361(para)
+msgid ""
+"Set the maximum number of days a password remains valid. After "
+"<replaceable>MAX_DAYS</replaceable>, the password is required to be changed."
+msgstr ""
+
+#: passwd.1.xml:366(para) chage.1.xml:195(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as "
+"<replaceable>MAX_DAYS</replaceable> will remove checking a password's "
+"validity."
+msgstr ""
+"Przekazanie <emphasis remap=\"I\">-1</emphasis> jako <replaceable>MAX_DAYS</"
+"replaceable> usuwa sprawdzanie wazności hasła."
+
+#: passwd.1.xml:378(para)
+msgid ""
+"Password complexity checking may vary from site to site. The user is urged "
+"to select a password as complex as he or she feels comfortable with."
+msgstr ""
+
+#: passwd.1.xml:383(para)
+msgid ""
+"Users may not be able to change their password on a system if NIS is enabled "
+"and they are not logged into the NIS server."
+msgstr ""
+
+#: passwd.1.xml:388(para)
+msgid ""
+"<command>passwd</command> uses PAM to authenticate users and to change their "
+"passwords."
+msgstr ""
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>ENCRYPT_METHOD</option> (string)"
+msgstr ""
+
+#: passwd.1.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: gpasswd.1.xml:32(para) chpasswd.8.xml:32(para) chgpasswd.8.xml:32(para)
+msgid ""
+"This defines the system default encryption algorithm for encrypting "
+"passwords (if no algorithm are specified on the command line)."
+msgstr ""
+
+#: passwd.1.xml:36(para) newusers.8.xml:36(para) login.defs.5.xml:36(para)
+#: gpasswd.1.xml:36(para) chpasswd.8.xml:36(para) chgpasswd.8.xml:36(para)
+#, fuzzy
+#| msgid ""
+#| "<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
+#| "replaceable>=<replaceable>VALUE</replaceable>"
+msgid ""
+"It can take one of these values: <replaceable>DES</replaceable> (default), "
+"<replaceable>MD5</replaceable><phrase condition=\"sha_crypt\">, "
+"<replaceable>SHA256</replaceable>, <replaceable>SHA512</replaceable></"
+"phrase>."
+msgstr ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KLUCZ</"
+"replaceable>=<replaceable>WARTOŚĆ</replaceable>"
+
+#: passwd.1.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: gpasswd.1.xml:43(para) chpasswd.8.xml:43(para) chgpasswd.8.xml:43(para)
+msgid ""
+"Note: this parameter overrides the <option>MD5_CRYPT_ENAB</option> variable."
+msgstr ""
+
+#: passwd.1.xml:47(para) passwd.1.xml:53(para) passwd.1.xml:62(para)
+#: newusers.8.xml:47(para) newusers.8.xml:53(para) newusers.8.xml:62(para)
+#: login.defs.5.xml:47(para) login.defs.5.xml:53(para)
+#: login.defs.5.xml:62(para) gpasswd.1.xml:47(para) gpasswd.1.xml:53(para)
+#: gpasswd.1.xml:62(para) chpasswd.8.xml:47(para) chpasswd.8.xml:53(para)
+#: chpasswd.8.xml:62(para) chgpasswd.8.xml:47(para) chgpasswd.8.xml:53(para)
+#: chgpasswd.8.xml:62(para)
+msgid ""
+"Note: This only affect the generation of group passwords. The generation of "
+"user passwords is done by PAM and subject to the PAM configuration. It is "
+"recommended to set this variable consistently with the PAM configuration."
+msgstr ""
+
+#: passwd.1.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: gpasswd.1.xml:32(term) chpasswd.8.xml:32(term) chgpasswd.8.xml:32(term)
+msgid "<option>MD5_CRYPT_ENAB</option> (boolean)"
+msgstr ""
+
+#: passwd.1.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: gpasswd.1.xml:34(para) chpasswd.8.xml:34(para) chgpasswd.8.xml:34(para)
+msgid ""
+"Indicate if passwords must be encrypted using the MD5-based algorithm. If "
+"set to <replaceable>yes</replaceable>, new passwords will be encrypted using "
+"the MD5-based algorithm compatible with the one used by recent releases of "
+"FreeBSD. It supports passwords of unlimited length and longer salt strings. "
+"Set to <replaceable>no</replaceable> if you need to copy encrypted passwords "
+"to other systems which don't understand the new algorithm. Default is "
+"<replaceable>no</replaceable>."
+msgstr ""
+
+#: passwd.1.xml:44(para) newusers.8.xml:44(para) login.defs.5.xml:44(para)
+#: gpasswd.1.xml:44(para) chpasswd.8.xml:44(para) chgpasswd.8.xml:44(para)
+msgid ""
+"This variable is superseded by the <option>ENCRYPT_METHOD</option> variable "
+"or by any command line option used to configure the encryption algorithm."
+msgstr ""
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid ""
+"This variable is deprecated. You should use <option>ENCRYPT_METHOD</option>."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>OBSCURE_CHECKS_ENAB</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable additional checks upon password changes."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_ALWAYS_WARN</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Warn about weak passwords (but still allow them) if you are root."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_CHANGE_TRIES</option> (number)"
+msgstr "PASS_WARN_AGE (numer)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Maximum number of attempts to change password if rejected (too easy)."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_MAX_LEN</option> (number)"
+msgstr "PASS_MAX_DAYS (numer)"
+
+#: passwd.1.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>PASS_MIN_LEN</option> (number)"
+msgstr "PASS_MIN_DAYS (numer)"
+
+#: passwd.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"Number of significant characters in the password for crypt(). "
+"<option>PASS_MAX_LEN</option> is 8 by default. Don't change unless your "
+"crypt() is better. This is ignored if <option>MD5_CRYPT_ENAB</option> set to "
+"<replaceable>yes</replaceable>."
+msgstr ""
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>SHA_CRYPT_MIN_ROUNDS</option> (number)"
+msgstr ""
+
+#: passwd.1.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: gpasswd.1.xml:31(term) chpasswd.8.xml:31(term) chgpasswd.8.xml:31(term)
+msgid "<option>SHA_CRYPT_MAX_ROUNDS</option> (number)"
+msgstr ""
+
+#: passwd.1.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: gpasswd.1.xml:33(para) chpasswd.8.xml:33(para) chgpasswd.8.xml:33(para)
+msgid ""
+"When <option>ENCRYPT_METHOD</option> is set to <replaceable>SHA256</"
+"replaceable> or <replaceable>SHA512</replaceable>, this defines the number "
+"of SHA rounds used by the encryption algorithm by default (when the number "
+"of rounds is not specified on the command line)."
+msgstr ""
+
+#: passwd.1.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: gpasswd.1.xml:40(para) chpasswd.8.xml:40(para) chgpasswd.8.xml:40(para)
+msgid ""
+"With a lot of rounds, it is more difficult to brute forcing the password. "
+"But note also that more CPU resources will be needed to authenticate users."
+msgstr ""
+
+#: passwd.1.xml:45(para) newusers.8.xml:45(para) login.defs.5.xml:45(para)
+#: gpasswd.1.xml:45(para) chpasswd.8.xml:45(para) chgpasswd.8.xml:45(para)
+msgid ""
+"If not specified, the libc will choose the default number of rounds (5000)."
+msgstr ""
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid "The values must be inside the 1000-999,999,999 range."
+msgstr ""
+
+#: passwd.1.xml:52(para) newusers.8.xml:52(para) login.defs.5.xml:52(para)
+#: gpasswd.1.xml:52(para) chpasswd.8.xml:52(para) chgpasswd.8.xml:52(para)
+msgid ""
+"If only one of the <option>SHA_CRYPT_MIN_ROUNDS</option> or "
+"<option>SHA_CRYPT_MAX_ROUNDS</option> values is set, then this value will be "
+"used."
+msgstr ""
+
+#: passwd.1.xml:57(para) newusers.8.xml:57(para) login.defs.5.xml:57(para)
+#: gpasswd.1.xml:57(para) chpasswd.8.xml:57(para) chgpasswd.8.xml:57(para)
+msgid ""
+"If <option>SHA_CRYPT_MIN_ROUNDS</option> &gt; <option>SHA_CRYPT_MAX_ROUNDS</"
+"option>, the highest value will be used."
+msgstr ""
+
+#: passwd.1.xml:434(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/pam.d/passwd"
+msgstr "/etc/passwd"
+
+#: passwd.1.xml:436(para)
+msgid "PAM configuration for <command>passwd</command>."
+msgstr ""
+
+#: passwd.1.xml:456(para) chage.1.xml:297(para)
+msgid "permission denied"
+msgstr "brak dostępu"
+
+#: passwd.1.xml:462(para)
+msgid "invalid combination of options"
+msgstr "nieprawidłowa kombinacja opcji"
+
+#: passwd.1.xml:468(para)
+msgid "unexpected failure, nothing done"
+msgstr ""
+
+#: passwd.1.xml:474(para)
+msgid "unexpected failure, <filename>passwd</filename> file missing"
+msgstr ""
+
+#: passwd.1.xml:480(para)
+msgid "<filename>passwd</filename> file busy, try again"
+msgstr ""
+
+#: passwd.1.xml:444(para)
+msgid ""
+"The <command>passwd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Polecenie <command>passwd</command> kończy działanie z następującymi "
+"wartościami kodów zakończenia: <placeholder-1/>"
+
+#: passwd.1.xml:495(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>chpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <phrase condition=\"no_pam"
+"\"><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: nologin.8.xml:46(refentrytitle) nologin.8.xml:53(refname)
+#: nologin.8.xml:59(command)
+msgid "nologin"
+msgstr "nologin"
+
+#: nologin.8.xml:54(refpurpose)
+msgid "politely refuse a login"
+msgstr ""
+
+#: nologin.8.xml:65(para)
+msgid ""
+"The <command>nologin</command> command displays a message that an account is "
+"not available and exits non-zero. It is intended as a replacement shell "
+"field for accounts that have been disabled."
+msgstr ""
+
+#: nologin.8.xml:70(para)
+msgid ""
+"To disable all logins, investigate <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: nologin.8.xml:75(para)
+msgid ""
+"If <command>SSH_ORIGINAL_COMMAND</command> is populated it will be logged."
+msgstr ""
+
+#: nologin.8.xml:82(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: nologin.8.xml:93(title)
+msgid "HISTORY"
+msgstr ""
+
+#: nologin.8.xml:94(para)
+msgid "The <command>nologin</command> command appeared in BSD 4.4."
+msgstr ""
+
+#: newusers.8.xml:73(refentrytitle) newusers.8.xml:80(refname)
+#: newusers.8.xml:86(command) login.defs.5.xml:400(term)
+msgid "newusers"
+msgstr "newusers"
+
+#: newusers.8.xml:81(refpurpose)
+msgid "update and create new users in batch"
+msgstr "wsadowa aktualizacja i tworzenie nowych użytkowników"
+
+#: newusers.8.xml:91(replaceable)
+msgid "file"
+msgstr ""
+
+#: newusers.8.xml:98(para)
+#, fuzzy
+#| msgid ""
+#| "The <command>newusers</command> command reads a file of user name and "
+#| "clear-text password pairs and uses this information to update a group of "
+#| "existing users or to create new users. Each line is in the same format as "
+#| "the standard password file (see <citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>) with the following "
+#| "exceptions:"
+msgid ""
+"The <command>newusers</command> command reads a <replaceable>file</"
+"replaceable> (or the standard input by default) and uses this information to "
+"update a set of existing users or to create new users. Each line is in the "
+"same format as the standard password file (see "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>) with the exceptions explained below:"
+msgstr ""
+"Polecenie <command>newusers</command> odczytuje z pliku nazwa użytkowników i "
+"podane jawnym tekstem hasło. Odczytane informacje wykorzystywane są do "
+"aktualizacji grupy istniejących użytkowników lub tworzenia nowych. Każdy "
+"wiersz pliku posiada taki sam format jak standardowy plik haseł (patrz "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>), z następującymi wyjątkami:"
+
+#: newusers.8.xml:106(para)
+msgid "pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell"
+msgstr ""
+
+#: newusers.8.xml:111(emphasis)
+#, fuzzy
+#| msgid "*name"
+msgid "pw_name"
+msgstr "*name"
+
+#: newusers.8.xml:114(para)
+msgid "This is the name of the user."
+msgstr ""
+
+#: newusers.8.xml:117(para)
+msgid ""
+"It can be the name of a new user or the name of an existing user (or a user "
+"created before by <command>newusers</command>). In case of an existing user, "
+"the user's information will be changed, otherwise a new user will be created."
+msgstr ""
+
+#: newusers.8.xml:128(emphasis)
+msgid "pw_passwd"
+msgstr "pw_passwd"
+
+#: newusers.8.xml:131(para)
+msgid ""
+"This field will be encrypted and used as the new value of the encrypted "
+"password."
+msgstr ""
+"To pole zostanie zakodowane i użyte jako nowa wartość zakodowanego hasła."
+
+#: newusers.8.xml:139(emphasis)
+#, fuzzy
+#| msgid "pw_gid"
+msgid "pw_uid"
+msgstr "pw_gid"
+
+#: newusers.8.xml:142(para)
+msgid "This field is used to define the UID of the user."
+msgstr ""
+
+#: newusers.8.xml:145(para)
+msgid ""
+"If the field is empty, a new (unused) UID will be defined automatically by "
+"<command>newusers</command>."
+msgstr ""
+
+#: newusers.8.xml:149(para)
+msgid "If this field contains a number, this number will be used as the UID."
+msgstr ""
+
+#: newusers.8.xml:153(para)
+msgid ""
+"If this field contains the name of an existing user (or the name of a user "
+"created before by <command>newusers</command>), the UID of the specified "
+"user will be used."
+msgstr ""
+
+#: newusers.8.xml:159(para)
+msgid ""
+"If the UID of an existing user is changed, the files ownership of the user's "
+"file should be fixed manually."
+msgstr ""
+
+#: newusers.8.xml:167(emphasis)
+msgid "pw_gid"
+msgstr "pw_gid"
+
+#: newusers.8.xml:170(para)
+msgid "This field is used to define the primary group ID for the user."
+msgstr ""
+
+#: newusers.8.xml:173(para)
+msgid ""
+"If this field contains the name of an existing group (or a group created "
+"before by <command>newusers</command>), the GID of this group will be used "
+"as the primary group ID for the user."
+msgstr ""
+
+#: newusers.8.xml:179(para)
+msgid ""
+"If this field is a number, this number will be used as the primary group ID "
+"of the user. If no groups exist with this GID, a new group will be created "
+"with this GID, and the name of the user."
+msgstr ""
+
+#: newusers.8.xml:185(para)
+msgid ""
+"If this field is empty, a new group will be created with the name of the "
+"user and a GID will be automatically defined by <command>newusers</command> "
+"to be used as the primary group ID for the user and as the GID for the new "
+"group."
+msgstr ""
+
+#: newusers.8.xml:191(para)
+msgid ""
+"If this field contains the name of a group which does not exist (and was not "
+"created before by <command>newusers</command>), a new group will be created "
+"with the specified name and a GID will be automatically defined by "
+"<command>newusers</command> to be used as the primary group ID for the user "
+"and GID for the new group."
+msgstr ""
+
+#: newusers.8.xml:203(emphasis)
+msgid "pw_gecos"
+msgstr ""
+
+#: newusers.8.xml:206(para)
+msgid "This field is copied in the GECOS field of the user."
+msgstr ""
+
+#: newusers.8.xml:213(emphasis)
+msgid "pw_dir"
+msgstr "pw_dir"
+
+#: newusers.8.xml:216(para)
+msgid "This field is used to define the home directory of the user."
+msgstr ""
+
+#: newusers.8.xml:219(para)
+msgid ""
+"If this field does not specify an existing directory, the specified "
+"directory is created, with ownership set to the user being created or "
+"updated and its primary group."
+msgstr ""
+
+#: newusers.8.xml:224(para)
+msgid ""
+"If the home directory of an existing user is changed, <command>newusers</"
+"command> does not move or copy the content of the old directory to the new "
+"location. This should be done manually."
+msgstr ""
+
+#: newusers.8.xml:234(emphasis)
+msgid "pw_shell"
+msgstr ""
+
+#: newusers.8.xml:237(para)
+msgid ""
+"This field defines the shell of the user. No checks are performed on this "
+"field."
+msgstr ""
+
+#: newusers.8.xml:245(para)
+msgid ""
+"<command>newusers</command> first tries to create or change all the "
+"specified users, and then write these changes to the user or group "
+"databases. If an error occurs (except in the final writes to the databases), "
+"no changes are committed to the databases."
+msgstr ""
+
+#: newusers.8.xml:251(para)
+msgid ""
+"During this first pass, users are created with a locked password (and "
+"passwords are not changed for the users which are not created). A second "
+"pass is used to update the passwords using PAM. Failures to update a "
+"password are reported, but will not stop the other password updates."
+msgstr ""
+
+#: newusers.8.xml:259(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are updated at a single time."
+msgstr ""
+
+#: newusers.8.xml:267(para)
+#, fuzzy
+#| msgid ""
+#| "The options which apply to the <command>usermod</command> command are:"
+msgid "The options which apply to the <command>newusers</command> command are:"
+msgstr "Polecenie <command>usermod</command> posiada następujące opcje:"
+
+#: newusers.8.xml:284(term) chgpasswd.8.xml:112(term)
+#, fuzzy
+msgid "<option>-c</option>, <option>--crypt-method</option>"
+msgstr "<option>-e</option>, <option>--encrypted</option>"
+
+#: newusers.8.xml:286(para) chpasswd.8.xml:141(para) chgpasswd.8.xml:114(para)
+msgid "Use the specified method to encrypt the passwords."
+msgstr ""
+
+#: newusers.8.xml:287(para) chpasswd.8.xml:145(para) chgpasswd.8.xml:118(para)
+msgid ""
+"The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc "
+"support these methods."
+msgstr ""
+
+#: newusers.8.xml:309(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are chosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+
+#: newusers.8.xml:335(term) chgpasswd.8.xml:158(term)
+#, fuzzy
+msgid "<option>-s</option>, <option>--sha-rounds</option>"
+msgstr "<option>-s</option>, <option>--shadow</option>"
+
+#: newusers.8.xml:337(para) chpasswd.8.xml:204(para) chgpasswd.8.xml:160(para)
+msgid "Use the specified number of rounds to encrypt the passwords."
+msgstr ""
+
+#: newusers.8.xml:340(para) chpasswd.8.xml:207(para) chgpasswd.8.xml:163(para)
+msgid ""
+"The value 0 means that the system will choose the default number of rounds "
+"for the crypt method (5000)."
+msgstr ""
+
+#: newusers.8.xml:344(para) chpasswd.8.xml:211(para) chgpasswd.8.xml:167(para)
+msgid ""
+"A minimal value of 1000 and a maximal value of 999,999,999 will be enforced."
+msgstr ""
+
+#: newusers.8.xml:348(para) chpasswd.8.xml:215(para) chgpasswd.8.xml:171(para)
+msgid "You can only use this option with the SHA256 or SHA512 crypt method."
+msgstr ""
+
+#: newusers.8.xml:352(para) chgpasswd.8.xml:175(para)
+msgid ""
+"By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and "
+"SHA_CRYPT_MAX_ROUNDS variables in <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: newusers.8.xml:364(para)
+msgid ""
+"The input file must be protected since it contains unencrypted passwords."
+msgstr ""
+
+#: newusers.8.xml:368(para) chgpasswd.8.xml:191(para)
+msgid ""
+"You should make sure the passwords and the encryption method respect the "
+"system's password policy."
+msgstr ""
+
+#: newusers.8.xml:444(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/pam.d/newusers"
+msgstr "/etc/passwd"
+
+#: newusers.8.xml:446(para)
+msgid "PAM configuration for <command>newusers</command>."
+msgstr ""
+
+#: newusers.8.xml:466(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, <phrase condition="
+"\"subids\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: newgrp.1.xml:58(refentrytitle) newgrp.1.xml:65(refname)
+#: newgrp.1.xml:71(command)
+msgid "newgrp"
+msgstr "newgrp"
+
+#: newgrp.1.xml:66(refpurpose)
+msgid "log in to a new group"
+msgstr ""
+
+#: newgrp.1.xml:72(replaceable) grpck.8.xml:74(replaceable)
+#: groupadd.8.xml:78(replaceable) gpasswd.1.xml:88(replaceable)
+msgid "group"
+msgstr "group"
+
+#: newgrp.1.xml:78(para)
+msgid ""
+"The <command>newgrp</command> command is used to change the current group ID "
+"during a login session. If the optional <option>-</option> flag is given, "
+"the user's environment will be reinitialized as though the user had logged "
+"in, otherwise the current environment, including current working directory, "
+"remains unchanged."
+msgstr ""
+
+#: newgrp.1.xml:86(para)
+msgid ""
+"<command>newgrp</command> changes the current real group ID to the named "
+"group, or to the default group listed in <filename>/etc/passwd</filename> if "
+"no group name is given. <command>newgrp</command> also tries to add the "
+"group to the user groupset. If not root, the user will be prompted for a "
+"password if she does not have a password (in <filename>/etc/shadow</"
+"filename> if this user has an entry in the shadowed password file, or in "
+"<filename>/etc/passwd</filename> otherwise) and the group does, or if the "
+"user is not listed as a member and the group has a password. The user will "
+"be denied access if the group password is empty and the user is not listed "
+"as a member."
+msgstr ""
+
+#: newgrp.1.xml:100(para)
+msgid ""
+"If there is an entry for this group in <filename>/etc/gshadow</filename>, "
+"then the list of members and the password of this group will be taken from "
+"this file, otherwise, the entry in <filename>/etc/group</filename> is "
+"considered."
+msgstr ""
+
+#: newgrp.1.xml:152(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, <citerefentry condition="
+"\"gshadow\"><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>"
+
+#: logoutd.8.xml:57(refentrytitle) logoutd.8.xml:64(refname)
+#: logoutd.8.xml:70(command)
+msgid "logoutd"
+msgstr "logoutd"
+
+#: logoutd.8.xml:65(refpurpose)
+msgid "enforce login time restrictions"
+msgstr "wymuszenie ograniczeń czasu logowania"
+
+#: logoutd.8.xml:76(para)
+msgid ""
+"<command>logoutd</command> enforces the login time and port restrictions "
+"specified in <filename>/etc/porttime</filename>. <command>logoutd</command> "
+"should be started from <filename>/etc/rc</filename>. The <filename>/var/run/"
+"utmp</filename> file is scanned periodically and each user name is checked "
+"to see if the named user is permitted on the named port at the current time. "
+"Any login session which is violating the restrictions in <filename>/etc/"
+"porttime</filename> is terminated."
+msgstr ""
+"<command>logoutd</command> wymusza ograniczenia portów i czasów logowania "
+"podane w <filename>/etc/porttime</filename>. <command>logoutd</command> "
+"powinno być uruchamiane z <filename>/etc/rc</filename>. Okresowo "
+"przeglądany jest plik <filename>/var/run/utmp</filename>. Sprawdzana jest "
+"każda nazwa użytkownika, aby stwierdzić, czy użytkownik ma zezwolenie na "
+"pracę w bieżącym czasie na danym porcie. Każda sesja pracy (logowania) "
+"naruszająca ograniczenia zawarte w <filename>/etc/porttime</filename> jest "
+"kończona."
+
+#: logoutd.8.xml:98(filename) login.1.xml:341(filename)
+msgid "/var/run/utmp"
+msgstr "/var/run/utmp"
+
+#: logoutd.8.xml:100(para) login.1.xml:343(para)
+msgid "List of current login sessions."
+msgstr "List bieżących sesji pracy."
+
+#: login.defs.5.xml:124(refentrytitle) login.defs.5.xml:131(refname)
+msgid "login.defs"
+msgstr "login.defs"
+
+#: login.defs.5.xml:132(refpurpose)
+msgid "shadow password suite configuration"
+msgstr ""
+
+#: login.defs.5.xml:137(para)
+msgid ""
+"The <filename>/etc/login.defs</filename> file defines the site-specific "
+"configuration for the shadow password suite. This file is required. Absence "
+"of this file will not prevent system operation, but will probably result in "
+"undesirable operation."
+msgstr ""
+
+#: login.defs.5.xml:144(para)
+msgid ""
+"This file is a readable text file, each line of the file describing one "
+"configuration parameter. The lines consist of a configuration name and "
+"value, separated by whitespace. Blank lines and comment lines are ignored. "
+"Comments are introduced with a \"#\" pound sign and the pound sign must be "
+"the first non-white character of the line."
+msgstr ""
+
+#: login.defs.5.xml:152(para)
+msgid ""
+"Parameter values may be of four types: strings, booleans, numbers, and long "
+"numbers. A string is comprised of any printable characters. A boolean should "
+"be either the value <replaceable>yes</replaceable> or <replaceable>no</"
+"replaceable>. An undefined boolean parameter or one with a value other than "
+"these will be given a <replaceable>no</replaceable> value. Numbers (both "
+"regular and long) may be either decimal values, octal values (precede the "
+"value with <replaceable>0</replaceable>) or hexadecimal values (precede the "
+"value with <replaceable>0x</replaceable>). The maximum value of the regular "
+"and long numeric parameters is machine-dependent."
+msgstr ""
+
+#: login.defs.5.xml:167(para)
+msgid "The following configuration items are provided:"
+msgstr ""
+
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+msgid "<option>CHFN_AUTH</option> (boolean)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chfn</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+#, fuzzy
+msgid "<option>CHFN_RESTRICT</option> (string)"
+msgstr "CHFN_RESTRICT (łańcuch)"
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"This parameter specifies which values in the <emphasis remap=\"I\">gecos</"
+"emphasis> field of the <filename>/etc/passwd</filename> file may be changed "
+"by regular users using the <command>chfn</command> program. It can be any "
+"combination of letters <replaceable>f</replaceable>, <replaceable>r</"
+"replaceable>, <replaceable>w</replaceable>, <replaceable>h</replaceable>, "
+"for Full name, Room number, Work phone, and Home phone, respectively. For "
+"backward compatibility, <replaceable>yes</replaceable> is equivalent to "
+"<replaceable>rwh</replaceable> and <replaceable>no</replaceable> is "
+"equivalent to <replaceable>frwh</replaceable>. If not specified, only the "
+"superuser can make any changes. The most restrictive setting is better "
+"achieved by not installing <command>chfn</command> SUID."
+msgstr ""
+
+#: login.defs.5.xml:32(term) chsh.1.xml:32(term)
+#, fuzzy
+msgid "<option>CHSH_AUTH</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: login.defs.5.xml:34(para) chsh.1.xml:34(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chsh</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ERASECHAR</option> (number)"
+msgstr "UMASK (number)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+#, fuzzy
+msgid ""
+"Terminal ERASE character (<replaceable>010</replaceable> = backspace, "
+"<replaceable>0177</replaceable> = DEL)."
+msgstr ""
+"Nazwa grupy zostanie zmieniona z <replaceable>GRUPA</replaceable> na nazwę "
+"<replaceable>NOWA_GRUPA</replaceable>."
+
+#: login.defs.5.xml:38(para) login.defs.5.xml:37(para) login.1.xml:38(para)
+#: login.1.xml:37(para)
+msgid ""
+"The value can be prefixed \"0\" for an octal value, or \"0x\" for an "
+"hexadecimal value."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FAIL_DELAY</option> (number)"
+msgstr "PASS_MIN_DAYS (numer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Delay in seconds before being allowed another attempt after a login failure."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FAILLOG_ENAB</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable logging and display of <filename>/var/log/faillog</filename> login "
+"failure info."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FAKE_SHELL</option> (string)"
+msgstr "MAIL_DIR (łańcuch)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, <command>login</command> will execute this shell instead of the "
+"users' shell specified in <filename>/etc/passwd</filename>."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FTMP_FILE</option> (string)"
+msgstr "MAIL_DIR (łańcuch)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, login failures will be logged in this file in a utmp format."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>HUSHLOGIN_FILE</option> (string)"
+msgstr "CHFN_RESTRICT (łańcuch)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, this file can inhibit all the usual chatter during the login "
+"sequence. If a full pathname is specified, then hushed mode will be enabled "
+"if the user's name or shell are found in the file. If not a full pathname, "
+"then hushed mode will be enabled if the file exists in the user's home "
+"directory."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ISSUE_FILE</option> (string)"
+msgstr "MAIL_DIR (łańcuch)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "If defined, this file will be displayed before each login prompt."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>KILLCHAR</option> (number)"
+msgstr "GID_MAX (numer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Terminal KILL character (<replaceable>025</replaceable> = CTRL/U)."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LASTLOG_ENAB</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging and display of /var/log/lastlog login time info."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOG_OK_LOGINS</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging of successful logins."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOG_UNKFAIL_ENAB</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable display of unknown usernames when login failures are recorded."
+msgstr ""
+
+#: login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"Note: logging unknown usernames may be a security issue if an user enter her "
+"password instead of her login name."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOGIN_RETRIES</option> (number)"
+msgstr "GID_MIN (numer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Maximum number of login retries in case of bad password."
+msgstr ""
+
+#: login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"This will most likely be overridden by PAM, since the default pam_unix "
+"module has its own built in of 3 retries. However, this is a safe fallback "
+"in case you are using an authentication module that does not enforce "
+"PAM_MAXTRIES."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOGIN_TIMEOUT</option> (number)"
+msgstr "GID_MAX (numer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Max time in seconds for login."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>MOTD_FILE</option> (string)"
+msgstr "MAIL_DIR (łańcuch)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, \":\" delimited list of \"message of the day\" files to be "
+"displayed upon login."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>NOLOGINS_FILE</option> (string)"
+msgstr "CHFN_RESTRICT (łańcuch)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, name of file whose presence will inhibit non-root logins. The "
+"contents of this file should be a message indicating why logins are "
+"inhibited."
+msgstr ""
+
+#: login.defs.5.xml:212(para)
+msgid ""
+"<option>PASS_MAX_DAYS</option>, <option>PASS_MIN_DAYS</option> and "
+"<option>PASS_WARN_AGE</option> are only used at the time of account "
+"creation. Any changes to these settings won't affect existing accounts."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>PORTTIME_CHECKS_ENAB</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable checking of time restrictions specified in <filename>/etc/porttime</"
+"filename>."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>TTYGROUP</option> (string)"
+msgstr "MAIL_DIR (łańcuch)"
+
+#: login.defs.5.xml:33(term) login.1.xml:33(term)
+#, fuzzy
+msgid "<option>TTYPERM</option> (string)"
+msgstr "USERDEL_CMD (łańcuch)"
+
+#: login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"The terminal permissions: the login tty will be owned by the "
+"<option>TTYGROUP</option> group, and the permissions will be set to "
+"<option>TTYPERM</option>."
+msgstr ""
+
+#: login.defs.5.xml:40(para) login.1.xml:40(para)
+msgid ""
+"By default, the ownership of the terminal is set to the user's primary group "
+"and the permissions are set to <replaceable>0600</replaceable>."
+msgstr ""
+
+#: login.defs.5.xml:45(para) login.1.xml:45(para)
+msgid ""
+"<option>TTYGROUP</option> can be either the name of a group or a numeric "
+"group identifier."
+msgstr ""
+
+#: login.defs.5.xml:49(para) login.1.xml:49(para)
+msgid ""
+"If you have a <command>write</command> program which is \"setgid\" to a "
+"special group which owns the terminals, define TTYGROUP to the group number "
+"and TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign "
+"TTYPERM to either 622 or 600."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>TTYTYPE_FILE</option> (string)"
+msgstr "MAIL_DIR (łańcuch)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, file which maps tty line to TERM environment parameter. Each "
+"line of the file is in a format something like \"vt100 tty01\"."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ULIMIT</option> (number)"
+msgstr "UID_MIN (numer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Default <command>ulimit</command> value."
+msgstr ""
+
+#: login.defs.5.xml:245(title)
+msgid "CROSS REFERENCES"
+msgstr ""
+
+#: login.defs.5.xml:246(para)
+msgid ""
+"The following cross references show which programs in the shadow password "
+"suite use which parameters."
+msgstr ""
+
+#: login.defs.5.xml:253(term) chage.1.xml:58(refentrytitle)
+#: chage.1.xml:65(refname) chage.1.xml:70(command)
+msgid "chage"
+msgstr "chage"
+
+#: login.defs.5.xml:255(para) login.defs.5.xml:451(phrase)
+#: login.defs.5.xml:523(phrase)
+msgid "USE_TCB"
+msgstr ""
+
+#: login.defs.5.xml:259(term) chfn.1.xml:60(refentrytitle)
+#: chfn.1.xml:67(refname) chfn.1.xml:73(command)
+msgid "chfn"
+msgstr "chfn"
+
+#: login.defs.5.xml:261(para)
+msgid ""
+"<phrase condition=\"no_pam\">CHFN_AUTH</phrase> CHFN_RESTRICT <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:269(term) chgpasswd.8.xml:57(refentrytitle)
+#: chgpasswd.8.xml:64(refname) chgpasswd.8.xml:70(command)
+msgid "chgpasswd"
+msgstr "chgpasswd"
+
+#: login.defs.5.xml:271(para) login.defs.5.xml:302(para)
+msgid ""
+"ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB <phrase condition="
+"\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:279(term) chpasswd.8.xml:61(refentrytitle)
+#: chpasswd.8.xml:68(refname) chpasswd.8.xml:74(command)
+msgid "chpasswd"
+msgstr "chpasswd"
+
+#: login.defs.5.xml:282(phrase)
+msgid "ENCRYPT_METHOD MD5_CRYPT_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:284(phrase)
+msgid "SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS"
+msgstr ""
+
+#: login.defs.5.xml:290(term) chsh.1.xml:60(refentrytitle)
+#: chsh.1.xml:67(refname) chsh.1.xml:73(command)
+msgid "chsh"
+msgstr "chsh"
+
+#: login.defs.5.xml:292(para)
+#, fuzzy
+msgid "CHSH_AUTH LOGIN_STRING"
+msgstr "CHFN_AUTH CHFN_RESTRICT"
+
+#: login.defs.5.xml:300(term) gpasswd.1.xml:62(refentrytitle)
+#: gpasswd.1.xml:69(refname) gpasswd.1.xml:83(command)
+msgid "gpasswd"
+msgstr "gpasswd"
+
+#: login.defs.5.xml:310(term) groupadd.8.xml:60(refentrytitle)
+#: groupadd.8.xml:67(refname) groupadd.8.xml:73(command)
+msgid "groupadd"
+msgstr "groupadd"
+
+#: login.defs.5.xml:312(para)
+#, fuzzy
+msgid "GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN"
+msgstr ""
+"GID_MAX GID_MIN PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UID_MAX UID_MIN "
+"UMASK"
+
+#: login.defs.5.xml:319(term) groupdel.8.xml:58(refentrytitle)
+#: groupdel.8.xml:65(refname) groupdel.8.xml:71(command)
+msgid "groupdel"
+msgstr "groupdel"
+
+#: login.defs.5.xml:321(para) login.defs.5.xml:327(para)
+#: login.defs.5.xml:333(para) login.defs.5.xml:340(para)
+#: login.defs.5.xml:346(para) login.defs.5.xml:352(para)
+msgid "MAX_MEMBERS_PER_GROUP"
+msgstr ""
+
+#: login.defs.5.xml:325(term) groupmems.8.xml:61(refentrytitle)
+#: groupmems.8.xml:68(refname) groupmems.8.xml:74(command)
+msgid "groupmems"
+msgstr "groupmems"
+
+#: login.defs.5.xml:331(term) groupmod.8.xml:58(refentrytitle)
+#: groupmod.8.xml:65(refname) groupmod.8.xml:71(command)
+msgid "groupmod"
+msgstr "groupmod"
+
+#: login.defs.5.xml:338(term) grpck.8.xml:58(refentrytitle)
+#: grpck.8.xml:65(refname) grpck.8.xml:71(command)
+msgid "grpck"
+msgstr "grpck"
+
+#: login.defs.5.xml:357(term) lastlog.8.xml:59(refentrytitle)
+#: lastlog.8.xml:66(refname) lastlog.8.xml:72(command)
+msgid "lastlog"
+msgstr "lastlog"
+
+#: login.defs.5.xml:359(para)
+msgid "LASTLOG_UID_MAX"
+msgstr ""
+
+#: login.defs.5.xml:363(term) login.1.xml:90(refentrytitle)
+#: login.1.xml:97(refname) login.1.xml:103(command) login.1.xml:111(command)
+#: login.1.xml:118(command)
+msgid "login"
+msgstr "login"
+
+#: login.defs.5.xml:365(para)
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE</"
+"phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam\">FAILLOG_ENAB</"
+"phrase> FAKE_SHELL <phrase condition=\"no_pam\">FTMP_FILE</phrase> "
+"HUSHLOGIN_FILE <phrase condition=\"no_pam\">ISSUE_FILE</phrase> KILLCHAR "
+"<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 <phrase condition=\"no_pam"
+"\">MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE NOLOGINS_FILE "
+"PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> TTYGROUP TTYPERM TTYTYPE_FILE "
+"<phrase condition=\"no_pam\">ULIMIT UMASK</phrase> USERGROUPS_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:392(term)
+#, fuzzy
+#| msgid "newgrp"
+msgid "newgrp / sg"
+msgstr "newgrp"
+
+#: login.defs.5.xml:394(para)
+msgid "SYSLOG_SG_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:402(para)
+#, fuzzy
+msgid ""
+"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> "
+"SUB_GID_COUNT SUB_GID_MAX SUB_GID_MIN SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN "
+"SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+msgstr ""
+"GID_MAX GID_MIN PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UID_MAX UID_MIN "
+"UMASK"
+
+#: login.defs.5.xml:421(para)
+msgid ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN "
+"PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:432(para)
+msgid ""
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb"
+"\">TCB_AUTH_GROUP TCB_SYMLINKS USE_TCB</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:441(para)
+#, fuzzy
+#| msgid "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UMASK"
+msgid ""
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb\">USE_TCB</"
+"phrase>"
+msgstr "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UMASK"
+
+#: login.defs.5.xml:458(para)
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENVIRON_FILE</phrase> ENV_PATH "
+"ENV_SUPATH <phrase condition=\"no_pam\">ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB "
+"MAIL_DIR MAIL_FILE QUOTAS_ENAB</phrase> SULOG_FILE SU_NAME <phrase condition="
+"\"no_pam\">SU_WHEEL_ONLY</phrase> SYSLOG_SU_ENAB <phrase condition=\"no_pam"
+"\">USERGROUPS_ENAB</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:473(term)
+#, fuzzy
+msgid "sulogin"
+msgstr "login"
+
+#: login.defs.5.xml:475(para)
+msgid "ENV_HZ <phrase condition=\"no_pam\">ENV_TZ</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:484(para)
+#, fuzzy
+msgid ""
+"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 SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN "
+"SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK "
+"<phrase condition=\"tcb\">TCB_AUTH_GROUP TCB_SYMLINK USE_TCB</phrase>"
+msgstr ""
+"GID_MAX GID_MIN PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UID_MAX UID_MIN "
+"UMASK"
+
+#: login.defs.5.xml:502(para)
+msgid ""
+"MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB <phrase "
+"condition=\"tcb\">TCB_SYMLINKS USE_TCB</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:512(para)
+#, fuzzy
+#| msgid "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UMASK"
+msgid ""
+"LASTLOG_UID_MAX MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP <phrase condition="
+"\"tcb\">TCB_SYMLINKS USE_TCB</phrase>"
+msgstr "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UMASK"
+
+#: login.defs.5.xml:532(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgid ""
+"Much of the functionality that used to be provided by the shadow password "
+"suite is now handled by PAM. Thus, <filename>/etc/login.defs</filename> is "
+"no longer used by <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, or less used by "
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, and <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>. Please refer to the "
+"corresponding PAM configuration files instead."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: login.defs.5.xml:548(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: login.access.5.xml:58(refentrytitle) login.access.5.xml:65(refname)
+msgid "login.access"
+msgstr "login.access"
+
+#: login.access.5.xml:66(refpurpose)
+msgid "login access control table"
+msgstr ""
+
+#: login.access.5.xml:71(para)
+msgid ""
+"The <emphasis remap=\"I\">login.access</emphasis> file specifies (user, "
+"host) combinations and/or (user, tty) combinations for which a login will be "
+"either accepted or refused."
+msgstr ""
+
+#: login.access.5.xml:77(para)
+msgid ""
+"When someone logs in, the <emphasis remap=\"I\">login.access</emphasis> is "
+"scanned for the first entry that matches the (user, host) combination, or, "
+"in case of non-networked logins, the first entry that matches the (user, "
+"tty) combination. The permissions field of that table entry determines "
+"whether the login will be accepted or refused."
+msgstr ""
+
+#: login.access.5.xml:85(para)
+msgid ""
+"Each line of the login access control table has three fields separated by a "
+"\":\" character:"
+msgstr ""
+
+#: login.access.5.xml:90(para)
+msgid ""
+"<emphasis remap=\"I\">permission</emphasis>:<emphasis remap=\"I\">users</"
+"emphasis>:<emphasis remap=\"I\">origins</emphasis>"
+msgstr ""
+
+#: login.access.5.xml:94(para)
+msgid ""
+"The first field should be a \"<emphasis>+</emphasis>\" (access granted) or "
+"\"<emphasis>-</emphasis>\" (access denied) character. The second field "
+"should be a list of one or more login names, group names, or <emphasis>ALL</"
+"emphasis> (always matches). The third field should be a list of one or more "
+"tty names (for non-networked logins), host names, domain names (begin with "
+"\"<literal>.</literal>\"), host addresses, internet network numbers (end "
+"with \"<literal>.</literal>\"), <emphasis>ALL</emphasis> (always matches) or "
+"<emphasis>LOCAL</emphasis> (matches any string that does not contain a "
+"\"<literal>.</literal>\" character). If you run NIS you can use "
+"@netgroupname in host or user patterns."
+msgstr ""
+
+#: login.access.5.xml:108(para)
+msgid ""
+"The <emphasis>EXCEPT</emphasis> operator makes it possible to write very "
+"compact rules."
+msgstr ""
+
+#: login.access.5.xml:113(para)
+msgid ""
+"The group file is searched only when a name does not match that of the "
+"logged-in user. Only groups are matched in which users are explicitly "
+"listed: the program does not look at a user's primary group id value."
+msgstr ""
+
+#: login.1.xml:98(refpurpose)
+msgid "begin session on the system"
+msgstr ""
+
+#: login.1.xml:104(arg) login.1.xml:112(arg) login.1.xml:119(arg)
+#: login.1.xml:236(option) groupmems.8.xml:79(arg)
+msgid "-p"
+msgstr "-p"
+
+#: login.1.xml:105(replaceable) login.1.xml:113(replaceable)
+#: login.1.xml:120(replaceable)
+msgid "host"
+msgstr ""
+
+#: login.1.xml:105(arg) login.1.xml:113(arg)
+msgid "-h <placeholder-1/>"
+msgstr "-h <placeholder-1/>"
+
+#: login.1.xml:108(replaceable)
+msgid "ENV=VAR"
+msgstr "ENV=VAR"
+
+#: login.1.xml:114(arg) login.1.xml:214(option)
+msgid "-f"
+msgstr "-f"
+
+#: login.1.xml:120(arg)
+msgid "-r <placeholder-1/>"
+msgstr "-r <placeholder-1/>"
+
+#: login.1.xml:126(para)
+msgid ""
+"The <command>login</command> program is used to establish a new session with "
+"the system. It is normally invoked automatically by responding to the "
+"<emphasis remap=\"I\">login:</emphasis> prompt on the user's terminal. "
+"<command>login</command> may be special to the shell and may not be invoked "
+"as a sub-process. When called from a shell, <command>login</command> should "
+"be executed as <emphasis remap=\"B\">exec login</emphasis> which will cause "
+"the user to exit from the current shell (and thus will prevent the new "
+"logged in user to return to the session of the caller). Attempting to "
+"execute <command>login</command> from any shell but the login shell will "
+"produce an error message."
+msgstr ""
+
+#: login.1.xml:140(para)
+msgid ""
+"The user is then prompted for a password, where appropriate. Echoing is "
+"disabled to prevent revealing the password. Only a small number of password "
+"failures are permitted before <command>login</command> exits and the "
+"communications link is severed."
+msgstr ""
+
+#: login.1.xml:147(para)
+msgid ""
+"If password aging has been enabled for your account, you may be prompted for "
+"a new password before proceeding. You will be forced to provide your old "
+"password and the new password before continuing. Please refer to "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> for more information."
+msgstr ""
+
+#: login.1.xml:156(para)
+msgid ""
+"After a successful login, you will be informed of any system messages and "
+"the presence of mail. You may turn off the printing of the system message "
+"file, <filename>/etc/motd</filename>, by creating a zero-length file "
+"<filename>.hushlogin</filename> in your login directory. The mail message "
+"will be one of \"<emphasis>You have new mail.</emphasis>\", \"<emphasis>You "
+"have mail.</emphasis>\", or \"<emphasis>No Mail.</emphasis>\" according to "
+"the condition of your mailbox."
+msgstr ""
+
+#: login.1.xml:167(para)
+msgid ""
+"Your user and group ID will be set according to their values in the "
+"<filename>/etc/passwd</filename> file. The value for <envar>$HOME</envar>, "
+"<envar>$SHELL</envar>, <envar>$PATH</envar>, <envar>$LOGNAME</envar>, and "
+"<envar>$MAIL</envar> are set according to the appropriate fields in the "
+"password entry. Ulimit, umask and nice values may also be set according to "
+"entries in the GECOS field."
+msgstr ""
+
+#: login.1.xml:176(para)
+msgid ""
+"On some installations, the environmental variable <envar>$TERM</envar> will "
+"be initialized to the terminal type on your tty line, as specified in "
+"<filename>/etc/ttytype</filename>."
+msgstr ""
+
+#: login.1.xml:182(para)
+msgid ""
+"An initialization script for your command interpreter may also be executed. "
+"Please see the appropriate manual section for more information on this "
+"function."
+msgstr ""
+
+#: login.1.xml:194(para) login.1.xml:270(para)
+msgid ""
+"The <command>login</command> program is NOT responsible for removing users "
+"from the utmp file. It is the responsibility of "
+"<citerefentry><refentrytitle>getty</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry> and <citerefentry><refentrytitle>init</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry> to clean up apparent "
+"ownership of a terminal session. If you use <command>login</command> from "
+"the shell prompt without <command>exec</command>, the user you use will "
+"continue to appear to be logged in even after you log out of the \"subsession"
+"\"."
+msgstr ""
+
+#: login.1.xml:217(para)
+msgid "Do not perform authentication, user is preauthenticated."
+msgstr ""
+
+#: login.1.xml:220(para)
+msgid "Note: In that case, <replaceable>username</replaceable> is mandatory."
+msgstr ""
+
+#: login.1.xml:228(option)
+msgid "-h"
+msgstr "-h"
+
+#: login.1.xml:231(para)
+msgid "Name of the remote host for this login."
+msgstr ""
+
+#: login.1.xml:239(para)
+msgid "Preserve environment."
+msgstr ""
+
+#: login.1.xml:244(option)
+msgid "-r"
+msgstr "-r"
+
+#: login.1.xml:247(para)
+msgid "Perform autologin protocol for rlogin."
+msgstr ""
+
+#: login.1.xml:252(para)
+msgid ""
+"The <option>-r</option>, <option>-h</option> and <option>-f</option> options "
+"are only used when <command>login</command> is invoked by root."
+msgstr ""
+
+#: login.1.xml:261(para)
+msgid ""
+"This version of <command>login</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+
+#: login.1.xml:266(para)
+msgid ""
+"The location of files is subject to differences in system configuration."
+msgstr ""
+
+#: login.1.xml:282(para)
+msgid ""
+"As with any program, <command>login</command>'s appearance can be faked. If "
+"non-trusted users have physical access to a machine, an attacker could use "
+"this to obtain the password of the next person coming to sit in front of the "
+"machine. Under Linux, the SAK mechanism can be used by users to initiate a "
+"trusted path and prevent this kind of attack."
+msgstr ""
+
+#: login.1.xml:347(filename)
+msgid "/var/log/wtmp"
+msgstr "/var/log/wtmp"
+
+#: login.1.xml:349(para)
+msgid "List of previous login sessions."
+msgstr ""
+
+#: login.1.xml:365(filename)
+msgid "/etc/motd"
+msgstr "/etc/motd"
+
+#: login.1.xml:367(para)
+msgid "System message of the day file."
+msgstr ""
+
+#: login.1.xml:371(filename)
+msgid "/etc/nologin"
+msgstr "/etc/nologin"
+
+#: login.1.xml:373(para)
+msgid "Prevent non-root users from logging in."
+msgstr ""
+
+#: login.1.xml:377(filename)
+msgid "/etc/ttytype"
+msgstr "/etc/ttytype"
+
+#: login.1.xml:379(para)
+msgid "List of terminal types."
+msgstr ""
+
+#: login.1.xml:383(filename)
+msgid "$HOME/.hushlogin"
+msgstr "$HOME/.hushlogin"
+
+#: login.1.xml:385(para)
+msgid "Suppress printing of system messages."
+msgstr ""
+
+#: login.1.xml:399(para)
+msgid ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: limits.5.xml:41(firstname)
+msgid "Luca"
+msgstr ""
+
+#: limits.5.xml:42(surname)
+msgid "Berra"
+msgstr ""
+
+#: limits.5.xml:59(refentrytitle) limits.5.xml:66(refname)
+msgid "limits"
+msgstr "limits"
+
+#: limits.5.xml:67(refpurpose)
+msgid "resource limits definition"
+msgstr ""
+
+#: limits.5.xml:73(para)
+msgid ""
+"The <emphasis remap=\"I\">limits</emphasis> file (<filename>/etc/limits</"
+"filename> by default or LIMITS_FILE defined <filename>config.h</filename>) "
+"describes the resource limits you wish to impose. It should be owned by root "
+"and readable by root account only."
+msgstr ""
+
+#: limits.5.xml:81(para)
+msgid ""
+"By default no quota is imposed on 'root'. In fact, there is no way to impose "
+"limits via this procedure to root-equiv accounts (accounts with UID 0)."
+msgstr ""
+
+#: limits.5.xml:87(para)
+msgid "Each line describes a limit for a user in the form:"
+msgstr ""
+
+#: limits.5.xml:90(emphasis)
+msgid "user LIMITS_STRING"
+msgstr ""
+
+#: limits.5.xml:93(para)
+msgid "or in the form:"
+msgstr ""
+
+#: limits.5.xml:96(emphasis)
+msgid "@group LIMITS_STRING"
+msgstr ""
+
+#: limits.5.xml:99(para)
+msgid ""
+"The <emphasis>LIMITS_STRING</emphasis> is a string of a concatenated list of "
+"resource limits. Each limit consists of a letter identifier followed by a "
+"numerical limit."
+msgstr ""
+
+#: limits.5.xml:105(para)
+msgid "The valid identifiers are:"
+msgstr ""
+
+#: limits.5.xml:108(para)
+msgid "A: max address space (KB)"
+msgstr ""
+
+#: limits.5.xml:109(para)
+msgid "C: max core file size (KB)"
+msgstr ""
+
+#: limits.5.xml:110(para)
+msgid "D: max data size (KB)"
+msgstr ""
+
+#: limits.5.xml:111(para)
+msgid "F: maximum file size (KB)"
+msgstr ""
+
+#: limits.5.xml:112(para)
+msgid ""
+"K: file creation mask, set by <citerefentry><refentrytitle>umask</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+
+#: limits.5.xml:117(para)
+msgid "I: max nice value (0..39 which translates to 20..-19)"
+msgstr ""
+
+#: limits.5.xml:119(para)
+msgid "L: max number of logins for this user"
+msgstr ""
+
+#: limits.5.xml:120(para)
+msgid "M: max locked-in-memory address space (KB)"
+msgstr ""
+
+#: limits.5.xml:121(para)
+msgid "N: max number of open files"
+msgstr ""
+
+#: limits.5.xml:122(para)
+msgid "O: max real time priority"
+msgstr ""
+
+#: limits.5.xml:123(para)
+msgid ""
+"P: process priority, set by <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+
+#: limits.5.xml:128(para)
+msgid "R: max resident set size (KB)"
+msgstr ""
+
+#: limits.5.xml:129(para)
+msgid "S: max stack size (KB)"
+msgstr ""
+
+#: limits.5.xml:130(para)
+msgid "T: max CPU time (MIN)"
+msgstr ""
+
+#: limits.5.xml:131(para)
+msgid "U: max number of processes"
+msgstr ""
+
+#: limits.5.xml:134(para)
+msgid ""
+"For example, <emphasis remap=\"I\">L2D2048N5</emphasis> is a valid "
+"<emphasis>LIMITS_STRING</emphasis>. For reading convenience, the following "
+"entries are equivalent:"
+msgstr ""
+
+#: limits.5.xml:140(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+" username L2D2048N5\n"
+" username L2 D2048 N5\n"
+" "
+msgstr ""
+"\n"
+" username L2D2048N5\n"
+" username L2 D2048 N5\n"
+" "
+
+#: limits.5.xml:145(para)
+msgid ""
+"Be aware that after <emphasis remap=\"I\">username</emphasis> the rest of "
+"the line is considered a limit string, thus comments are not allowed. An "
+"invalid limits string will be rejected (not considered) by the "
+"<command>login</command> program."
+msgstr ""
+
+#: limits.5.xml:152(para)
+msgid ""
+"The default entry is denoted by username \"<emphasis>*</emphasis>\". If you "
+"have multiple <emphasis remap=\"I\">default</emphasis> entries in your "
+"<emphasis>LIMITS_FILE</emphasis>, then the last one will be used as the "
+"default entry."
+msgstr ""
+
+#: limits.5.xml:159(para)
+#, fuzzy
+msgid ""
+"The limits specified in the form \"<replaceable>@group</replaceable>\" apply "
+"to the members of the specified <replaceable>group</replaceable>."
+msgstr ""
+"Nazwa grupy zostanie zmieniona z <replaceable>GRUPA</replaceable> na nazwę "
+"<replaceable>NOWA_GRUPA</replaceable>."
+
+#: limits.5.xml:165(para)
+msgid ""
+"If more than one line with limits for a user exist, only the first line for "
+"this user will be considered."
+msgstr ""
+
+#: limits.5.xml:170(para)
+msgid ""
+"If no lines are specified for a user, the last <replaceable>@group</"
+"replaceable> line matching a group whose the user is a member of will be "
+"considered, or the last line with default limits if no groups contain the "
+"user."
+msgstr ""
+
+#: limits.5.xml:177(para)
+msgid ""
+"To completely disable limits for a user, a single dash \"<emphasis>-</"
+"emphasis>\" will do."
+msgstr ""
+
+#: limits.5.xml:182(para)
+msgid ""
+"To disable a limit for a user, a single dash \"<replaceable>-</replaceable>"
+"\" can be used instead of the numerical value for this limit."
+msgstr ""
+
+#: limits.5.xml:188(para)
+msgid ""
+"Also, please note that all limit settings are set PER LOGIN. They are not "
+"global, nor are they permanent. Perhaps global limits will come, but for now "
+"this will have to do ;)"
+msgstr ""
+
+#: limits.5.xml:199(filename)
+msgid "/etc/limits"
+msgstr "/etc/limits"
+
+#: limits.5.xml:207(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+
+#: lastlog.8.xml:67(refpurpose)
+msgid "reports the most recent login of all users or of a given user"
+msgstr ""
+"wyświetla informacje o ostanim logowaniu dla wybranego lub wszystkich "
+"użytkowaników"
+
+#: lastlog.8.xml:81(para)
+msgid ""
+"<command>lastlog</command> formats and prints the contents of the last login "
+"log <filename>/var/log/lastlog</filename> file. The <emphasis>login-name</"
+"emphasis>, <emphasis>port</emphasis>, and <emphasis>last login time</"
+"emphasis> will be printed. The default (no flags) causes lastlog entries to "
+"be printed, sorted by their order in <filename>/etc/passwd</filename>."
+msgstr ""
+"Polecenie <command>lastlog</command> formatuje i wyświetla zawartość bazy "
+"ostatnich logowań zapisanych w pliku <filename>/var/log/lastlog</filename>. "
+"Wyświetlone zostaną <emphasis>nazwa użytkownika</emphasis>, <emphasis>port</"
+"emphasis> i <emphasis>czas</emphasis> ostatniego logowania. Domyślnie (bez "
+"flag) pozycje wyświetlane są w kolejności w jakiej są w pliku <filename>/etc/"
+"passwd</filename>."
+
+#: lastlog.8.xml:93(para)
+msgid "The options which apply to the <command>lastlog</command> command are:"
+msgstr "Polecenie <command>lastlog</command> posiada następujące opcje:"
+
+#: lastlog.8.xml:98(term)
+msgid ""
+"<option>-b</option>, <option>--before</option>&nbsp;<replaceable>DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-b</option>, <option>--before</option>&nbsp;<replaceable>DNI</"
+"replaceable>"
+
+#: lastlog.8.xml:102(para)
+msgid ""
+"Print only lastlog records older than <emphasis remap=\"I\">DAYS</emphasis>."
+msgstr ""
+"Wyświetlenie rekordów lastlog starszych niż zadana <emphasis remap=\"I"
+"\">DNI</emphasis>."
+
+#: lastlog.8.xml:108(term)
+#, fuzzy
+#| msgid "<option>-q</option>, <option>--quiet</option>"
+msgid "<option>-C</option>, <option>--clear</option>"
+msgstr "<option>-q</option>, <option>--quiet</option>"
+
+#: lastlog.8.xml:112(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid ""
+"Clear lastlog record of a user. This option can be used only together with "
+"<option>-u</option> (<option>--user</option>))."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: lastlog.8.xml:139(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-S</option>, <option>--set</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: lastlog.8.xml:143(para)
+msgid ""
+"Set lastlog record of a user to the current time. This option can be used "
+"only together with <option>-u</option> (<option>--user</option>))."
+msgstr ""
+
+#: lastlog.8.xml:150(term) faillog.8.xml:192(term)
+msgid ""
+"<option>-t</option>, <option>--time</option>&nbsp;<replaceable>DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option>&nbsp;<replaceable>DNI</"
+"replaceable>"
+
+#: lastlog.8.xml:154(para)
+msgid ""
+"Print the lastlog records more recent than <emphasis remap=\"I\">DAYS</"
+"emphasis>."
+msgstr ""
+"Wyświetlenie rekordów lastlog nie starszych niż zadana ilość <emphasis remap="
+"\"I\">DNI</emphasis>."
+
+#: lastlog.8.xml:161(term) faillog.8.xml:202(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
+#| "replaceable>=<replaceable>VALUE</replaceable>"
+msgid ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+"replaceable>|<replaceable>RANGE</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KLUCZ</"
+"replaceable>=<replaceable>WARTOŚĆ</replaceable>"
+
+#: lastlog.8.xml:165(para)
+#, fuzzy
+#| msgid ""
+#| "Print the lastlog record for user with specified <emphasis remap=\"I"
+#| "\">LOGIN</emphasis> only."
+msgid "Print the lastlog record of the specified user(s)."
+msgstr ""
+"Wyświetlenie informacji o ostanim logowaniu dla użytkownika "
+"<replaceable>LOGIN</replaceable>."
+
+#: lastlog.8.xml:168(para) faillog.8.xml:211(para)
+msgid ""
+"The users can be specified by a login name, a numerical user ID, or a "
+"<replaceable>RANGE</replaceable> of users. This <replaceable>RANGE</"
+"replaceable> of users can be specified with a min and max values "
+"(<replaceable>UID_MIN-UID_MAX</replaceable>), a max value (<replaceable>-"
+"UID_MAX</replaceable>), or a min value (<replaceable>UID_MIN-</replaceable>)."
+msgstr ""
+
+#: lastlog.8.xml:180(para)
+msgid ""
+"If the user has never logged in the message <emphasis>** Never logged in**</"
+"emphasis> will be displayed instead of the port and time."
+msgstr ""
+"Jeżeli użytkownik nigdy się nie logował to zamiast portu i czasu \n"
+"logowania wyświetlany jest komunikat <emphasis>**Nigdy nie zalogowany**</"
+"emphasis> (użytkownik nigdy się nie logował)."
+
+#: lastlog.8.xml:185(para)
+msgid ""
+"Only the entries for the current users of the system will be displayed. "
+"Other entries may exist for users that were deleted previously."
+msgstr ""
+
+#: lastlog.8.xml:193(title) groups.1.xml:90(title) chsh.1.xml:140(title)
+#: chage.1.xml:237(title)
+msgid "NOTE"
+msgstr "UWAGI"
+
+#: lastlog.8.xml:194(para)
+msgid ""
+"The <filename>lastlog</filename> file is a database which contains info on "
+"the last login of each user. You should not rotate it. It is a sparse file, "
+"so its size on the disk is usually much smaller than the one shown by "
+"\"<command>ls -l</command>\" (which can indicate a really big file if you "
+"have in <filename>passwd</filename> users with a high UID). You can display "
+"its real size with \"<command>ls -s</command>\"."
+msgstr ""
+"Baza danych <filename>lastlog</filename> jest plikiem zawierajacym "
+"informacje o ostanim logowaniu każdego użytkowanika. Pliku tego nie powinnoa "
+"się okresowo kasować i zakąłdać od nowa (rotacja). Plik ten jest plikiem z "
+"dziurami tak więc jego rozmiar jest zwykle znacznie mniejszy pokazywany "
+"przez polecenie \"<command>ls -l</command>\" (pokazujące że jest on dużych "
+"rozmiarów jeżeli masz w <filename>passwd</filename> użytkowaników z wysokimi "
+"wartościami UID). Mozesz wyświetlić rzeczywisty rozmiar tego pliku używając "
+"polecenia \"<command>ls -s</command>\"."
+
+#: lastlog.8.xml:220(filename)
+msgid "/var/log/lastlog"
+msgstr "/var/log/lastlog"
+
+#: lastlog.8.xml:222(para)
+msgid "Database times of previous user logins."
+msgstr "Baza danych ostatnich logowań użytkowników."
+
+#: lastlog.8.xml:230(para)
+msgid ""
+"Large gaps in UID numbers will cause the lastlog program to run longer with "
+"no output to the screen (i.e. if in lastlog database there is no entries for "
+"users with UID between 170 and 800 lastlog will appear to hang as it "
+"processes entries with UIDs 171-799)."
+msgstr ""
+"Duże luki w numeracji UID powodują, że program będzie pracował dłużej, nie "
+"wyświetlając wyników (np. jeśli w bazie lastlog nie ma wpisów dla o UID "
+"pomiedzy 170, a 800, to program będzie sprawiał wrażenie zawieszonego w "
+"trakcie przetwarzania wpisów dla użytkowanikół o UID 171-799)."
+
+#: gshadow.5.xml:41(contrib)
+msgid "Creation, 2005"
+msgstr ""
+
+#: gshadow.5.xml:46(refentrytitle) gshadow.5.xml:53(refname)
+msgid "gshadow"
+msgstr "gshadow"
+
+#: gshadow.5.xml:54(refpurpose)
+msgid "shadowed group file"
+msgstr ""
+
+#: gshadow.5.xml:59(para)
+msgid ""
+"<filename>/etc/gshadow</filename> contains the shadowed information for "
+"group accounts."
+msgstr ""
+
+#: gshadow.5.xml:69(para)
+msgid "Each line of this file contains the following colon-separated fields:"
+msgstr ""
+
+#: gshadow.5.xml:75(emphasis)
+msgid "group name"
+msgstr "nazwa grupy"
+
+#: gshadow.5.xml:77(para)
+msgid "It must be a valid group name, which exist on the system."
+msgstr ""
+
+#: gshadow.5.xml:90(para)
+#, fuzzy
+msgid ""
+"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 *, users will not be able to use a unix "
+"password to access the group (but group members do not need the password)."
+msgstr ""
+"Nowa wartość pola komentarza dla danego użytkownika w pliku haseł. Zwykle "
+"jest zmieniana przy pomocy polecenia <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+#: gshadow.5.xml:97(para)
+#, fuzzy
+#| msgid ""
+#| "The new value of the user's password file comment field. It is normally "
+#| "modified using the <citerefentry><refentrytitle>chfn</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry> utility."
+msgid ""
+"The password is used when a user who is not a member of the group wants to "
+"gain the permissions of this group (see <citerefentry><refentrytitle>newgrp</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>)."
+msgstr ""
+"Nowa wartość pola komentarza dla danego użytkownika w pliku haseł. Zwykle "
+"jest zmieniana przy pomocy polecenia <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+#: gshadow.5.xml:103(para)
+msgid ""
+"This field may be empty, in which case only the group members can gain the "
+"group permissions."
+msgstr ""
+
+#: gshadow.5.xml:113(para)
+msgid ""
+"This password supersedes any password specified in <filename>/etc/group</"
+"filename>."
+msgstr ""
+
+#: gshadow.5.xml:121(emphasis)
+msgid "administrators"
+msgstr ""
+
+#: gshadow.5.xml:123(para) gshadow.5.xml:139(para)
+msgid "It must be a comma-separated list of user names."
+msgstr ""
+
+#: gshadow.5.xml:126(para)
+msgid "Administrators can change the password or the members of the group."
+msgstr ""
+
+#: gshadow.5.xml:130(para)
+msgid ""
+"Administrators also have the same permissions as the members (see below)."
+msgstr ""
+
+#: gshadow.5.xml:137(emphasis)
+msgid "members"
+msgstr ""
+
+#: gshadow.5.xml:142(para)
+msgid "Members can access the group without being prompted for a password."
+msgstr ""
+
+#: gshadow.5.xml:146(para)
+msgid ""
+"You should use the same list of users as in <filename>/etc/group</filename>."
+msgstr ""
+
+#: gshadow.5.xml:175(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: grpck.8.xml:66(refpurpose)
+msgid "verify integrity of group files"
+msgstr ""
+
+#: grpck.8.xml:84(para)
+msgid ""
+"The <command>grpck</command> command verifies the integrity of the groups "
+"information. It checks that all entries in <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</"
+"filename></phrase> have the proper format and contain valid data. The user "
+"is prompted to delete entries that are improperly formatted or which have "
+"other uncorrectable errors."
+msgstr ""
+
+#: grpck.8.xml:101(para)
+msgid "a unique and valid group name"
+msgstr ""
+
+#: grpck.8.xml:104(para)
+msgid ""
+"a valid group identifier <phrase condition=\"gshadow\"> (<filename>/etc/"
+"group</filename> only)</phrase>"
+msgstr ""
+
+#: grpck.8.xml:111(para)
+msgid ""
+"a valid list of members <phrase condition=\"gshadow\"> and administrators</"
+"phrase>"
+msgstr ""
+
+#: grpck.8.xml:117(para)
+msgid ""
+"a corresponding entry in the <filename>/etc/gshadow</filename> file "
+"(respectively <filename>/etc/group</filename> for the <filename>gshadow</"
+"filename> checks)"
+msgstr ""
+
+#: grpck.8.xml:125(para)
+msgid ""
+"The checks for correct number of fields and unique group name are fatal. If "
+"an entry has the wrong number of fields, the user will be prompted to delete "
+"the entire line. If the user does not answer affirmatively, all further "
+"checks are bypassed. An entry with a duplicated group name is prompted for "
+"deletion, but the remaining checks will still be made. All other errors are "
+"warnings and the user is encouraged to run the <command>groupmod</command> "
+"command to correct the error."
+msgstr ""
+
+#: grpck.8.xml:136(para)
+msgid ""
+"The commands which operate on the <filename>/etc/group</filename><phrase "
+"condition=\"no_gshadow\">file</phrase><phrase condition=\"gshadow\">and "
+"<filename>/etc/gshadow</filename> files</phrase> are not able to alter "
+"corrupted or duplicated entries. <command>grpck</command> should be used in "
+"those circumstances to remove the offending entries."
+msgstr ""
+
+#: grpck.8.xml:152(para)
+#, fuzzy
+#| msgid "The options which apply to the <command>pwck</command> command are:"
+msgid "The options which apply to the <command>grpck</command> command are:"
+msgstr "Polecenie <command>pwck</command> posiada następujące opcje:"
+
+#: grpck.8.xml:165(para)
+msgid ""
+"Execute the <command>grpck</command> command in read-only mode. This causes "
+"all questions regarding changes to be answered <emphasis>no</emphasis> "
+"without user intervention."
+msgstr ""
+
+#: grpck.8.xml:187(para)
+msgid ""
+"Sort entries in <filename>/etc/group</filename><phrase condition=\"gshadow"
+"\">and <filename>/etc/gshadow</filename></phrase> by GID."
+msgstr ""
+
+#: grpck.8.xml:196(para)
+msgid ""
+"By default, <command>grpck</command> operates on <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</"
+"filename></phrase>. The user may select alternate files with the <emphasis "
+"remap=\"I\">group</emphasis><phrase condition=\"no_gshadow\">parameter.</"
+"phrase><phrase condition=\"gshadow\">and <emphasis remap=\"I\">shadow</"
+"emphasis> parameters.</phrase>"
+msgstr ""
+
+#: grpck.8.xml:264(para)
+msgid "one or more bad group entries"
+msgstr ""
+
+#: grpck.8.xml:270(para)
+msgid "can't open group files"
+msgstr ""
+
+#: grpck.8.xml:276(para)
+msgid "can't lock group files"
+msgstr ""
+
+#: grpck.8.xml:282(para)
+msgid "can't update group files"
+msgstr ""
+
+#: grpck.8.xml:246(para)
+msgid ""
+"The <command>grpck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Polecenie <command>grpckl</command> kończy działanie z następującymi "
+"wartościami kodów zakończenia: <placeholder-1/>"
+
+#: grpck.8.xml:291(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>login</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>gshadow</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"gshadow\"><citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum>, </citerefentry>, </"
+"phrase><citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: groups.1.xml:57(refentrytitle) groups.1.xml:64(refname)
+#: groups.1.xml:70(command)
+msgid "groups"
+msgstr "groups"
+
+#: groups.1.xml:65(refpurpose)
+msgid "display current group names"
+msgstr ""
+
+#: groups.1.xml:72(replaceable)
+msgid "user"
+msgstr ""
+
+#: groups.1.xml:79(para)
+msgid ""
+"The <command>groups</command> command displays the current group names or ID "
+"values. If the value does not have a corresponding entry in <filename>/etc/"
+"group</filename>, the value will be displayed as the numerical group value. "
+"The optional <emphasis remap=\"I\">user</emphasis> parameter will display "
+"the groups for the named <emphasis remap=\"I\">user</emphasis>."
+msgstr ""
+
+#: groups.1.xml:91(para)
+msgid ""
+"Systems which do not support concurrent group sets will have the information "
+"from <filename>/etc/group</filename> reported. The user must use "
+"<command>newgrp</command> or <command>sg</command> to change his current "
+"real and effective group ID."
+msgstr ""
+
+#: groups.1.xml:113(para)
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+
+#: groupmod.8.xml:66(refpurpose)
+msgid "modify a group definition on the system"
+msgstr "modyfikuj definicję grupy systemowej"
+
+#: groupmod.8.xml:75(replaceable) groupdel.8.xml:75(replaceable)
+msgid "GROUP"
+msgstr "GRUPA"
+
+#: groupmod.8.xml:81(para)
+msgid ""
+"The <command>groupmod</command> command modifies the definition of the "
+"specified <replaceable>GROUP</replaceable> by modifying the appropriate "
+"entry in the group database."
+msgstr ""
+"Polcenie <command>groupmod</command> modifikuje definicję grupy "
+"<replaceable>GRUPA</replaceable> poprzez modifikację stosownego wpisu w "
+"bazie grup."
+
+#: groupmod.8.xml:90(para)
+msgid "The options which apply to the <command>groupmod</command> command are:"
+msgstr "Polecenie <command>groupmod</command> posiada następujące opcje:"
+
+#: groupmod.8.xml:96(term) groupadd.8.xml:114(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GID</"
+"replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GID</"
+"replaceable>"
+
+#: groupmod.8.xml:100(para)
+#, fuzzy
+#| msgid ""
+#| "The name of the group will be changed from <replaceable>GROUP</"
+#| "replaceable> to <replaceable>NEW_GROUP</replaceable> name."
+msgid ""
+"The group ID of the given <replaceable>GROUP</replaceable> will be changed "
+"to <replaceable>GID</replaceable>."
+msgstr ""
+"Nazwa grupy zostanie zmieniona z <replaceable>GRUPA</replaceable> na nazwę "
+"<replaceable>NOWA_GRUPA</replaceable>."
+
+#: groupmod.8.xml:104(para)
+#, fuzzy
+msgid ""
+"The value of <replaceable>GID</replaceable> must be a non-negative decimal "
+"integer. This value must be unique, unless the <option>-o</option> option is "
+"used."
+msgstr ""
+"Nowa wartość ID grupy <replaceable>GRUPA</replaceable>. Numeryczna wartość "
+"<replaceable>GID</replaceable> musi mieć nieujemną wartość całkowitą. "
+"Wartość ta musi być unikalna chyba że użyto opcji <option>-o</option>. "
+"Wartości pomiędzy 0 a 999 są zwykle zarezerwowane dla grup systemowych. "
+"Pliki, dla których stary identyfikator jest identyfikatorem grupy pliku, "
+"wymagają ręcznej zmiany ID grupy."
+
+#: groupmod.8.xml:110(para)
+msgid ""
+"Users who use the group as primary group will be updated to keep the group "
+"as their primary group."
+msgstr ""
+
+#: groupmod.8.xml:114(para)
+msgid ""
+"Any files that have the old group ID and must continue to belong to "
+"<replaceable>GROUP</replaceable>, must have their group ID changed manually."
+msgstr ""
+
+#: groupmod.8.xml:120(para)
+msgid ""
+"No checks will be performed with regard to the <option>GID_MIN</option>, "
+"<option>GID_MAX</option>, <option>SYS_GID_MIN</option>, or "
+"<option>SYS_GID_MAX</option> from <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: groupmod.8.xml:135(term)
+msgid ""
+"<option>-n</option>, <option>--new-name</option>&nbsp;"
+"<replaceable>NEW_GROUP</replaceable>"
+msgstr ""
+"<option>-a</option>, <option>--append</option>&nbsp;<replaceable>NOWA_GRUPA</"
+"replaceable>"
+
+#: groupmod.8.xml:139(para)
+msgid ""
+"The name of the group will be changed from <replaceable>GROUP</replaceable> "
+"to <replaceable>NEW_GROUP</replaceable> name."
+msgstr ""
+"Nazwa grupy zostanie zmieniona z <replaceable>GRUPA</replaceable> na nazwę "
+"<replaceable>NOWA_GRUPA</replaceable>."
+
+#: groupmod.8.xml:150(para)
+#, fuzzy
+msgid ""
+"When used with the <option>-g</option> option, allow to change the group "
+"<replaceable>GID</replaceable> to a non-unique value."
+msgstr ""
+"Użyte z opcją <option>-g</option> umożliwia zmiane <replaceable>GID</"
+"replaceable> grupy na wartość nieunikalną."
+
+#: groupmod.8.xml:259(para)
+msgid "E_SUCCESS: success"
+msgstr ""
+
+#: groupmod.8.xml:265(para)
+#, fuzzy
+#| msgid "invalid command syntax"
+msgid "E_USAGE: invalid command syntax"
+msgstr "niepoprawna składnia polecenia"
+
+#: groupmod.8.xml:271(para)
+#, fuzzy
+#| msgid "invalid argument to option"
+msgid "E_BAD_ARG: invalid argument to option"
+msgstr "nieprawidłowy argument opcji"
+
+#: groupmod.8.xml:277(para)
+msgid "E_GID_IN_USE: specified group doesn't exist"
+msgstr ""
+
+#: groupmod.8.xml:283(para)
+msgid "E_NOTFOUND: specified group doesn't exist"
+msgstr ""
+
+#: groupmod.8.xml:289(para)
+#, fuzzy
+#| msgid "group name already in use"
+msgid "E_NAME_IN_USE: group name already in use"
+msgstr "nazwa grupy już jest w użyciu"
+
+#: groupmod.8.xml:295(para)
+#, fuzzy
+#| msgid "can't update group file"
+msgid "E_GRP_UPDATE: can't update group file"
+msgstr "nie można zaktualizować pliku z grupami"
+
+#: groupmod.8.xml:299(replaceable)
+#, fuzzy
+#| msgid "1"
+msgid "11"
+msgstr "1"
+
+#: groupmod.8.xml:301(para)
+msgid "E_CLEANUP_SERVICE: can't setup cleanup service"
+msgstr ""
+
+#: groupmod.8.xml:307(para)
+msgid "E_PAM_USERNAME: can't determine your username for use with pam"
+msgstr ""
+
+#: groupmod.8.xml:311(replaceable)
+msgid "13"
+msgstr "13"
+
+#: groupmod.8.xml:313(para)
+msgid ""
+"E_PAM_ERROR: pam returned an error, see syslog facility id groupmod for the "
+"PAM error message"
+msgstr ""
+
+#: groupmod.8.xml:253(para)
+msgid ""
+"The <command>groupmod</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Polecenie <command>groupmod</command> kończy działanie z następującymi "
+"wartościami kodów zakończenia: <placeholder-1/>"
+
+#: groupmod.8.xml:322(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: groupmems.8.xml:42(firstname)
+msgid "George"
+msgstr ""
+
+#: groupmems.8.xml:43(surname)
+msgid "Kraft"
+msgstr ""
+
+#: groupmems.8.xml:44(lineage)
+msgid "IV"
+msgstr ""
+
+#: groupmems.8.xml:45(contrib)
+msgid "Creation, 2000"
+msgstr ""
+
+#: groupmems.8.xml:69(refpurpose)
+msgid "administer members of a user's primary group"
+msgstr ""
+
+#: groupmems.8.xml:76(replaceable) groupmems.8.xml:77(replaceable)
+msgid "user_name"
+msgstr "user_name"
+
+#: groupmems.8.xml:76(arg)
+msgid "-a <placeholder-1/>"
+msgstr "-a <placeholder-1/>"
+
+#: groupmems.8.xml:77(arg)
+msgid "-d <placeholder-1/>"
+msgstr "-d <placeholder-1/>"
+
+#: groupmems.8.xml:78(replaceable)
+msgid "group_name"
+msgstr ""
+
+#: groupmems.8.xml:78(arg)
+msgid "-g <placeholder-1/>"
+msgstr "-g <placeholder-1/>"
+
+#: groupmems.8.xml:79(arg)
+msgid "-l"
+msgstr "-l"
+
+#: groupmems.8.xml:86(para)
+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)
+msgid ""
+"Only the superuser, as administrator, can use <command>groupmems</command> "
+"to alter the memberships of other groups."
+msgstr ""
+
+#: groupmems.8.xml:101(para)
+msgid ""
+"The options which apply to the <command>groupmems</command> command are:"
+msgstr "Polecenie <command>groupmems</command> posiada następujące opcje:"
+
+#: groupmems.8.xml:107(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+#| "replaceable>"
+msgid ""
+"<option>-a</option>, <option>--add</option>&nbsp;<replaceable>user_name</"
+"replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+"replaceable>"
+
+#: groupmems.8.xml:109(para)
+msgid "Add a user to the group membership list."
+msgstr ""
+
+#: groupmems.8.xml:110(para) groupmems.8.xml:126(para)
+#: groupmems.8.xml:157(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, and the group has no "
+"entry in the <filename>/etc/gshadow</filename> file, a new entry will be "
+"created."
+msgstr ""
+
+#: groupmems.8.xml:118(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-t</option>, <option>--time</option>&nbsp;<replaceable>DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-d</option>, <option>--delete</option>&nbsp;<replaceable>user_name</"
+"replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option>&nbsp;<replaceable>DNI</"
+"replaceable>"
+
+#: groupmems.8.xml:120(para)
+msgid "Delete a user from the group membership list."
+msgstr ""
+
+#: groupmems.8.xml:121(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, the user will be "
+"removed from the list of members and administrators of the group."
+msgstr ""
+
+#: groupmems.8.xml:134(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GID</"
+#| "replaceable>"
+msgid ""
+"<option>-g</option>, <option>--group</option>&nbsp;<replaceable>group_name</"
+"replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GID</"
+"replaceable>"
+
+#: groupmems.8.xml:136(para)
+msgid "The superuser can specify which group membership list to modify."
+msgstr ""
+
+#: groupmems.8.xml:148(term) chage.1.xml:160(term)
+msgid "<option>-l</option>, <option>--list</option>"
+msgstr "<option>-l</option>, <option>--list</option>"
+
+#: groupmems.8.xml:150(para)
+msgid "List the group membership list."
+msgstr ""
+
+#: groupmems.8.xml:154(term)
+#, fuzzy
+#| msgid "<option>-e</option>, <option>--expire</option>"
+msgid "<option>-p</option>, <option>--purge</option>"
+msgstr "<option>-e</option>, <option>--expire</option>"
+
+#: groupmems.8.xml:156(para)
+msgid "Purge all users from the group membership list."
+msgstr ""
+
+#: groupmems.8.xml:180(title)
+msgid "SETUP"
+msgstr ""
+
+#: groupmems.8.xml:181(para)
+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 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 2710 groupmems\n"
+"\t$ chown root.groups groupmems\n"
+"\t$ groupmems -g groups -a gk4\n"
+" "
+
+#: groupmems.8.xml:222(para)
+msgid "secure group account information"
+msgstr ""
+
+#: groupmems.8.xml:230(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: groupdel.8.xml:66(refpurpose)
+msgid "delete a group"
+msgstr ""
+
+#: groupdel.8.xml:81(para)
+#, fuzzy
+msgid ""
+"The <command>groupdel</command> command modifies the system account files, "
+"deleting all entries that refer to <replaceable>GROUP</replaceable>. The "
+"named group must exist."
+msgstr ""
+"Polecenie <command>usermod</command> zmienia systemowe pliki kont, "
+"odzwierciedlając zmiany podane w wierszu poleceń."
+
+#: groupdel.8.xml:89(para)
+#, fuzzy
+#| msgid ""
+#| "The options which apply to the <command>groupmod</command> command are:"
+msgid "The options which apply to the <command>groupdel</command> command are:"
+msgstr "Polecenie <command>groupmod</command> posiada następujące opcje:"
+
+#: groupdel.8.xml:134(para)
+msgid ""
+"You may not remove the primary group of any existing user. You must remove "
+"the user before you remove the group."
+msgstr ""
+
+#: groupdel.8.xml:138(para)
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this group."
+msgstr ""
+
+#: groupdel.8.xml:200(para)
+msgid "can't remove user's primary group"
+msgstr ""
+
+#: groupdel.8.xml:176(para)
+msgid ""
+"The <command>groupdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Polecenie <command>groupdel</command> kończy działanie z następującymi "
+"wartościami kodów zakończenia: <placeholder-1/>"
+
+#: groupdel.8.xml:215(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>"
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>"
+
+#: groupadd.8.xml:68(refpurpose)
+msgid "create a new group"
+msgstr "utwórz nową grupę"
+
+#: groupadd.8.xml:85(para)
+msgid ""
+"The <command>groupadd</command> command creates a new group account using "
+"the values specified on the command line plus the default values from the "
+"system. The new group will be entered into the system files as needed."
+msgstr ""
+
+#: groupadd.8.xml:94(para)
+msgid "The options which apply to the <command>groupadd</command> command are:"
+msgstr "Polecenie <command>groupadd</command> posiada następujące opcje:"
+
+#: groupadd.8.xml:104(para)
+msgid ""
+"This option causes the command to simply exit with success status if the "
+"specified group already exists. When used with <option>-g</option>, and the "
+"specified GID already exists, another (unique) GID is chosen (i.e. <option>-"
+"g</option> is turned off)."
+msgstr ""
+
+#: groupadd.8.xml:118(para)
+msgid ""
+"The numerical value of the group's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than or equal to "
+"<option>GID_MIN</option> and greater than every other group."
+msgstr ""
+
+#: groupadd.8.xml:124(para)
+#, fuzzy
+msgid ""
+"See also the <option>-r</option> option and the <option>GID_MAX</option> "
+"description."
+msgstr "<option>-</option>, <option>-l</option>, <option>--login</option>"
+
+#: groupadd.8.xml:141(para)
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (GID_MIN, GID_MAX "
+"and others). Multiple <option>-K</option> options can be specified."
+msgstr ""
+
+#: groupadd.8.xml:146(para)
+#, fuzzy
+#| msgid ""
+#| "<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
+#| "replaceable>=<replaceable>VALUE</replaceable>"
+msgid ""
+"Example: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+"<replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KLUCZ</"
+"replaceable>=<replaceable>WARTOŚĆ</replaceable>"
+
+#: groupadd.8.xml:150(para)
+msgid ""
+"Note: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+"replaceable>=<replaceable>499</replaceable> doesn't work yet."
+msgstr ""
+
+#: groupadd.8.xml:161(para)
+msgid "This option permits to add a group with a non-unique GID."
+msgstr ""
+
+#: groupadd.8.xml:192(para)
+#, fuzzy
+#| msgid "create a new group"
+msgid "Create a system group."
+msgstr "twółrz nową grupę"
+
+#: groupadd.8.xml:195(para)
+msgid ""
+"The numeric identifiers of new system groups are chosen in the "
+"<option>SYS_GID_MIN</option>-<option>SYS_GID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>GID_MIN</option>-"
+"<option>GID_MAX</option>."
+msgstr ""
+
+#: groupadd.8.xml:275(para)
+msgid ""
+"Groupnames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+
+#: groupadd.8.xml:281(para)
+msgid "Groupnames may only be up to &GROUP_NAME_MAX_LENGTH; characters long."
+msgstr ""
+
+#: groupadd.8.xml:284(para)
+msgid ""
+"You may not add a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+
+#: groupadd.8.xml:288(para)
+msgid ""
+"If the groupname already exists in an external group database such as NIS or "
+"LDAP, <command>groupadd</command> will deny the group creation request."
+msgstr ""
+
+#: groupadd.8.xml:321(para)
+msgid "GID not unique (when <option>-o</option> not used)"
+msgstr ""
+
+#: groupadd.8.xml:327(para)
+msgid "group name not unique"
+msgstr ""
+
+#: groupadd.8.xml:297(para)
+msgid ""
+"The <command>groupadd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Polecenie <command>groupadd</command> kończy działanie z następującymi "
+"wartościami kodów zakończenia: <placeholder-1/>"
+
+#: groupadd.8.xml:342(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: gpasswd.1.xml:44(firstname)
+msgid "Rafal"
+msgstr ""
+
+#: gpasswd.1.xml:45(surname)
+msgid "Maszkowski"
+msgstr ""
+
+#: gpasswd.1.xml:71(phrase)
+#, fuzzy
+#| msgid "-r <placeholder-1/>"
+msgid "administer <placeholder-1/>"
+msgstr "-r <placeholder-1/>"
+
+#: gpasswd.1.xml:74(phrase)
+#, fuzzy
+msgid "administer <placeholder-1/> and <placeholder-2/>"
+msgstr "-K <placeholder-1/>=<placeholder-2/>"
+
+#: gpasswd.1.xml:85(replaceable) expiry.1.xml:76(replaceable)
+#, fuzzy
+msgid "option"
+msgstr "opcje"
+
+#: gpasswd.1.xml:95(para)
+msgid ""
+"The <command>gpasswd</command> command is used to administer <filename>/etc/"
+"group</filename><phrase condition=\"gshadow\">, and <filename>/etc/gshadow</"
+"filename></phrase>. Every group can have <phrase condition=\"gshadow"
+"\">administrators,</phrase> members and a password."
+msgstr ""
+
+#: gpasswd.1.xml:103(para)
+msgid ""
+"System administrators can use the <option>-A</option> option to define group "
+"administrator(s) and the <option>-M</option> option to define members. They "
+"have all rights of group administrators and members."
+msgstr ""
+
+#: gpasswd.1.xml:108(para)
+msgid ""
+"<command>gpasswd</command> called by <phrase condition=\"gshadow\">a group "
+"administrator</phrase><phrase condition=\"no_gshadow\">a system "
+"administrator</phrase> with a group name only prompts for the new password "
+"of the <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:115(para)
+#, fuzzy
+msgid ""
+"If a password is set the members can still use "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> without a password, and non-members must supply the password."
+msgstr ""
+"Nowa wartość pola komentarza dla danego użytkownika w pliku haseł. Zwykle "
+"jest zmieniana przy pomocy polecenia <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+#: gpasswd.1.xml:123(title)
+msgid "Notes about group passwords"
+msgstr ""
+
+#: gpasswd.1.xml:124(para)
+msgid ""
+"Group passwords are an inherent security problem since more than one person "
+"is permitted to know the password. However, groups are a useful tool for "
+"permitting co-operation between different users."
+msgstr ""
+
+#: gpasswd.1.xml:135(para)
+#, fuzzy
+msgid ""
+"Except for the <option>-A</option> and <option>-M</option> options, the "
+"options cannot be combined."
+msgstr "<option>-</option>, <option>-l</option>, <option>--login</option>"
+
+#: gpasswd.1.xml:139(para)
+msgid "The options cannot be combined."
+msgstr ""
+
+#: gpasswd.1.xml:142(para)
+#, fuzzy
+msgid "The options which apply to the <command>gpasswd</command> command are:"
+msgstr "Polecenie <command>passwd</command> posiada następujące opcje:"
+
+#: gpasswd.1.xml:147(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+#| "replaceable>"
+msgid ""
+"<option>-a</option>, <option>--add</option>&nbsp;<replaceable>user</"
+"replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+"replaceable>"
+
+#: gpasswd.1.xml:151(para)
+#, fuzzy
+msgid ""
+"Add the <replaceable>user</replaceable> to the named <replaceable>group</"
+"replaceable>."
+msgstr ""
+"Nazwa grupy zostanie zmieniona z <replaceable>GRUPA</replaceable> na nazwę "
+"<replaceable>NOWA_GRUPA</replaceable>."
+
+#: gpasswd.1.xml:160(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-t</option>, <option>--time</option>&nbsp;<replaceable>DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-d</option>, <option>--delete</option>&nbsp;<replaceable>user</"
+"replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option>&nbsp;<replaceable>DNI</"
+"replaceable>"
+
+#: gpasswd.1.xml:164(para)
+#, fuzzy
+msgid ""
+"Remove the <replaceable>user</replaceable> from the named "
+"<replaceable>group</replaceable>."
+msgstr ""
+"Nazwa grupy zostanie zmieniona z <replaceable>GRUPA</replaceable> na nazwę "
+"<replaceable>NOWA_GRUPA</replaceable>."
+
+#: gpasswd.1.xml:181(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_DIR</"
+#| "replaceable>"
+msgid ""
+"<option>-Q</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home</option>&nbsp;<replaceable>KAT_DOMOWY</"
+"replaceable>"
+
+#: gpasswd.1.xml:195(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--remove</option>"
+msgid "<option>-r</option>, <option>--remove-password</option>"
+msgstr "<option>-r</option>, <option>--remove</option>"
+
+#: gpasswd.1.xml:199(para)
+msgid ""
+"Remove the password from the named <replaceable>group</replaceable>. The "
+"group password will be empty. Only group members will be allowed to use "
+"<command>newgrp</command> to join the named <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:211(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-R</option>, <option>--restrict</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: gpasswd.1.xml:215(para)
+msgid ""
+"Restrict the access to the named <replaceable>group</replaceable>. The group "
+"password is set to \"!\". Only group members with a password will be allowed "
+"to use <command>newgrp</command> to join the named <replaceable>group</"
+"replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:227(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-m</option>, <option>--mindays</option>&nbsp;"
+#| "<replaceable>MIN_DAYS</replaceable>"
+msgid ""
+"<option>-A</option>, <option>--administrators</option>&nbsp;"
+"<replaceable>user</replaceable>,..."
+msgstr ""
+"<option>-m</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DNI</"
+"replaceable>"
+
+#: gpasswd.1.xml:231(para)
+msgid "Set the list of administrative users."
+msgstr ""
+
+#: gpasswd.1.xml:239(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-b</option>, <option>--before</option>&nbsp;<replaceable>DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-M</option>, <option>--members</option>&nbsp;<replaceable>user</"
+"replaceable>,..."
+msgstr ""
+"<option>-b</option>, <option>--before</option>&nbsp;<replaceable>DNI</"
+"replaceable>"
+
+#: gpasswd.1.xml:243(para)
+msgid "Set the list of group members."
+msgstr ""
+
+#: gpasswd.1.xml:253(para)
+msgid ""
+"This tool only operates on the <filename>/etc/group</filename><phrase "
+"condition=\"gshadow\"> and <filename>/etc/gshadow</filename> files.</"
+"phrase><phrase condition=\"no_gshadow\">file.</phrase> Thus you cannot "
+"change any NIS or LDAP group. This must be performed on the corresponding "
+"server."
+msgstr ""
+
+#: gpasswd.1.xml:298(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition="
+"\"gshadow\">, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: faillog.8.xml:57(refentrytitle) faillog.8.xml:64(refname)
+#: faillog.8.xml:70(command) faillog.5.xml:57(refentrytitle)
+#: faillog.5.xml:64(refname) faillog.5.xml:111(refentrytitle)
+msgid "faillog"
+msgstr "faillog"
+
+#: faillog.8.xml:65(refpurpose)
+msgid "display faillog records or set login failure limits"
+msgstr ""
+
+#: faillog.8.xml:79(para)
+msgid ""
+"<command>faillog</command> displays the contents of the failure log database "
+"(<filename>/var/log/faillog</filename>). It can also set the failure "
+"counters and limits. When <command>faillog</command> is run without "
+"arguments, it only displays the faillog records of the users who had a login "
+"failure."
+msgstr ""
+
+#: faillog.8.xml:90(para)
+msgid "The options which apply to the <command>faillog</command> command are:"
+msgstr "Polecenie <command>faillog</command> posiada następujące opcje:"
+
+#: faillog.8.xml:98(para)
+msgid ""
+"Display (or act on) faillog records for all users having an entry in the "
+"<filename>faillog</filename> database."
+msgstr ""
+
+#: faillog.8.xml:102(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid ""
+"The range of users can be restricted with the <option>-u</option> option."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: faillog.8.xml:106(para)
+msgid ""
+"In display mode, this is still restricted to existing users but forces the "
+"display of the faillog entries even if they are empty."
+msgstr ""
+
+#: faillog.8.xml:111(para)
+msgid ""
+"With the <option>-l</option>, <option>-m</option>, <option>-r</option>, "
+"<option>-t</option> options, the users' records are changed, even if the "
+"user does not exist on the system. This is useful to reset records of users "
+"that have been deleted or to set a policy in advance for a range of users."
+msgstr ""
+
+#: faillog.8.xml:128(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-l</option>, <option>--lock-time</option>&nbsp;<replaceable>SEC</"
+#| "replaceable>"
+msgid ""
+"<option>-l</option>, <option>--lock-secs</option>&nbsp;<replaceable>SEC</"
+"replaceable>"
+msgstr ""
+"<option>-l</option>, <option>--lock-time</option>&nbsp;<replaceable>SEK</"
+"replaceable>"
+
+#: faillog.8.xml:132(para)
+msgid ""
+"Lock account for <replaceable>SEC</replaceable> seconds after failed login."
+msgstr ""
+
+#: faillog.8.xml:136(para) faillog.8.xml:161(para) faillog.8.xml:173(para)
+msgid ""
+"Write access to <filename>/var/log/faillog</filename> is required for this "
+"option."
+msgstr ""
+
+#: faillog.8.xml:143(term)
+msgid ""
+"<option>-m</option>, <option>--maximum</option>&nbsp;<replaceable>MAX</"
+"replaceable>"
+msgstr ""
+
+#: faillog.8.xml:147(para)
+msgid ""
+"Set the maximum number of login failures after the account is disabled to "
+"<replaceable>MAX</replaceable>."
+msgstr ""
+
+#: faillog.8.xml:151(para)
+msgid ""
+"Selecting a <replaceable>MAX</replaceable> value of 0 has the effect of not "
+"placing a limit on the number of failed logins."
+msgstr ""
+
+#: faillog.8.xml:156(para)
+msgid ""
+"The maximum failure count should always be 0 for <emphasis>root</emphasis> "
+"to prevent a denial of services attack against the system."
+msgstr ""
+
+#: faillog.8.xml:168(term)
+msgid "<option>-r</option>, <option>--reset</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: faillog.8.xml:170(para)
+msgid "Reset the counters of login failures."
+msgstr ""
+
+#: faillog.8.xml:195(para)
+#, fuzzy
+#| msgid ""
+#| "Print the lastlog records more recent than <emphasis remap=\"I\">DAYS</"
+#| "emphasis>."
+msgid ""
+"Display faillog records more recent than <replaceable>DAYS</replaceable>."
+msgstr ""
+"Wyświetlenie rekordów lastlog nie starszych niż zadana ilość <emphasis remap="
+"\"I\">DNI</emphasis>."
+
+#: faillog.8.xml:206(para)
+msgid ""
+"Display faillog record or maintains failure counters and limits (if used "
+"with <option>-l</option>, <option>-m</option> or <option>-r</option> "
+"options) only for the specified user(s)."
+msgstr ""
+
+#: faillog.8.xml:224(para)
+msgid ""
+"When none of the <option>-l</option>, <option>-m</option>, or <option>-r</"
+"option> options are used, <command>faillog</command> displays the faillog "
+"record of the specified user(s)."
+msgstr ""
+
+#: faillog.8.xml:233(para)
+msgid ""
+"<command>faillog</command> only prints out users with no successful login "
+"since the last failure. To print out a user who has had a successful login "
+"since their last failure, you must explicitly request the user with the "
+"<option>-u</option> flag, or print out all users with the <option>-a</"
+"option> flag."
+msgstr ""
+
+#: faillog.8.xml:246(filename) faillog.5.xml:99(filename)
+msgid "/var/log/faillog"
+msgstr "/var/log/faillog"
+
+#: faillog.8.xml:248(para) faillog.5.xml:101(para)
+msgid "Failure logging file."
+msgstr ""
+
+#: faillog.8.xml:256(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>faillog</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>faillog</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: faillog.5.xml:65(refpurpose)
+msgid "login failure logging file"
+msgstr ""
+
+#: faillog.5.xml:70(para)
+msgid ""
+"<filename>/var/log/faillog</filename> maintains a count of login failures "
+"and the limits for each account."
+msgstr ""
+
+#: faillog.5.xml:74(para)
+msgid ""
+"The file contains fixed length records, indexed by numerical UID. Each "
+"record contains the count of login failures since the last successful login; "
+"the maximum number of failures before the account is disabled; the line on "
+"which the last login failure occurred; the date of the last login failure; "
+"and the duration (in seconds) during which the account will be locked after "
+"a failure."
+msgstr ""
+
+#: faillog.5.xml:84(para)
+msgid "The structure of the file is:"
+msgstr "Struktura tego pliku to:"
+
+#: faillog.5.xml:85(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort fail_cnt;\n"
+"\tshort fail_max;\n"
+"\tchar fail_line[12];\n"
+"\ttime_t fail_time;\n"
+"\tlong fail_locktime;\n"
+"};"
+msgstr ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort fail_cnt;\n"
+"\tshort fail_max;\n"
+"\tchar fail_line[12];\n"
+"\ttime_t fail_time;\n"
+"\tlong fail_locktime;\n"
+"};"
+
+#: expiry.1.xml:45(contrib) chsh.1.xml:44(contrib) chfn.1.xml:44(contrib)
+#: chage.1.xml:42(contrib)
+msgid "Creation, 1990"
+msgstr ""
+
+#: expiry.1.xml:61(refentrytitle) expiry.1.xml:68(refname)
+#: expiry.1.xml:74(command)
+msgid "expiry"
+msgstr "expiry"
+
+#: expiry.1.xml:69(refpurpose)
+msgid "check and enforce password expiration policy"
+msgstr "sprawdzenie ważności i wymuszenie zmiany hasła"
+
+#: expiry.1.xml:83(para)
+msgid ""
+"The <command>expiry</command> command checks (<option>-c</option>) the "
+"current password expiration and forces (<option>-f</option>) changes when "
+"required. It is callable as a normal user command."
+msgstr ""
+"Polecenie <command>expiry</command> sprawdza (<option>-c</option>), kiedy "
+"wygaśnie aktualne hasło oraz wymusza (<option>-f</option>) lub wymusza jego "
+"zmianę.Może ono być wywoływane jako zwykłe polecenie przez użytkownika."
+
+#: expiry.1.xml:92(para)
+#, fuzzy
+#| msgid "The options which apply to the <command>pwck</command> command are:"
+msgid "The options which apply to the <command>expiry</command> command are:"
+msgstr "Polecenie <command>pwck</command> posiada następujące opcje:"
+
+#: expiry.1.xml:97(term)
+#, fuzzy
+#| msgid "<option>-L</option>, <option>--lock</option>"
+msgid "<option>-c</option>, <option>--check</option>"
+msgstr "<option>-L</option>, <option>--lock</option>"
+
+#: expiry.1.xml:99(para)
+#, fuzzy
+#| msgid "check and enforce password expiration policy"
+msgid "Check the password expiration of the current user."
+msgstr "sprawdzenie ważności i wymuszenie zmiany hasła"
+
+#: expiry.1.xml:105(para)
+msgid "Force a password change if the current user has an expired password."
+msgstr ""
+
+#: expiry.1.xml:140(para) chage.1.xml:318(para)
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: chsh.1.xml:68(refpurpose)
+msgid "change login shell"
+msgstr "zmiana powłoki zgłoszeniowej"
+
+#: chsh.1.xml:85(para)
+#, fuzzy
+#| msgid ""
+#| "The <command>chsh</command> command changes the user login shell. This "
+#| "determines the name of the user's initial login command. A normal user "
+#| "may only change the login shell for her own account, the superuser may "
+#| "change the login shell for any account."
+msgid ""
+"The <command>chsh</command> command changes the user login shell. This "
+"determines the name of the user's initial login command. A normal user may "
+"only change the login shell for her own account; the superuser may change "
+"the login shell for any account."
+msgstr ""
+"Polecenie <command>chsh</command> zmienia powłokę zgłoszeniową użytkownika, "
+"która określa nazwę początkowego polecenia zgłoszeniowego użytkownika. "
+"Zwykły użytkownik może zmienić wyłącznie powłokę zgłoszeniową własnego "
+"konta, superużytkownik może zmienić powłokę zgłoszeniową dla dowolnego konta."
+
+#: chsh.1.xml:96(para)
+msgid "The options which apply to the <command>chsh</command> command are:"
+msgstr "Polecenie <command>chsh</command> posiada następujące opcje:"
+
+#: chsh.1.xml:130(para)
+msgid ""
+"If the <option>-s</option> option is not selected, <command>chsh</command> "
+"operates in an interactive fashion, prompting the user with the current "
+"login shell. Enter the new value to change the shell, or leave the line "
+"blank to use the current one. The current shell is displayed between a pair "
+"of <emphasis>[ ]</emphasis> marks."
+msgstr ""
+"Jeżeli nie podano opcji <option>-s</option>, to polecenie <command>chsh</"
+"command> działa w trybie interaktywnym, proponując użytkownikowi bieżącą "
+"powłokę logowania. Wprowadzenie nowej wartości powoduje zmianę powłoki, a "
+"podanie wartości pustej pozostawia bieżącą powłokę. Bieżąca powłoka "
+"wyświetlana jest w nawiasach <emphasis>[ ]</emphasis>"
+
+#: chsh.1.xml:141(para)
+msgid ""
+"The only restriction placed on the login shell is that the command name must "
+"be listed in <filename>/etc/shells</filename>, unless the invoker is the "
+"superuser, and then any value may be added. An account with a restricted "
+"login shell may not change her login shell. For this reason, placing "
+"<filename>/bin/rsh</filename> in <filename>/etc/shells</filename> is "
+"discouraged since accidentally changing to a restricted shell would prevent "
+"the user from ever changing her login shell back to its original value."
+msgstr ""
+"Jedynym ograniczeniem nałożonym na powłokę zgłoszeniową jest to, że jej "
+"nazwa musi być wymieniona w <filename>/etc/shells</filename>, chyba że "
+"polecenie chsh zostało uruchomione przez superużytkownika wówczas może być "
+"podana dowolna nazwa. Użytkownicy kont z ograniczoną powłoką logowania nie "
+"mogą jej zmieniać. Odradza się z tego powodu umieszczanie <filename>/bin/"
+"rsh</filename> w pliku <filename>/etc/shells</filename>, gdyż przypadkowa "
+"zmiana na powłokę ograniczoną uniemożliwi użytkownikowi jakąkolwiek zmianę "
+"powłoki logowania, nawet z powrotem na dotychczasową."
+
+#: chsh.1.xml:176(filename)
+msgid "/etc/shells"
+msgstr "/etc/shells"
+
+#: chsh.1.xml:178(para)
+msgid "List of valid login shells."
+msgstr "Lista dozwolonych powłok zgłoszeniowych."
+
+#: chsh.1.xml:192(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: chpasswd.8.xml:69(refpurpose)
+msgid "update passwords in batch mode"
+msgstr "wsadowa aktualizacja haseł użytkowników"
+
+#: chpasswd.8.xml:83(para)
+msgid ""
+"The <command>chpasswd</command> command reads a list of user name and "
+"password pairs from standard input and uses this information to update a "
+"group of existing users. Each line is of the format:"
+msgstr ""
+"Polecenie <command>chpasswd</command> czyta pary danych (użytkownik i hasło) "
+"ze standardowego wejścia. Odczytane informacje wykorzystywane są do "
+"aktualizacji danych o grupie istniejących użytkowników. Każdy wiersz "
+"przekazywanych danych ma postać:"
+
+#: chpasswd.8.xml:88(para)
+msgid ""
+"<emphasis remap=\"I\">user_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">nazwa_użytkownika</emphasis>:<emphasis remap=\"I"
+"\">hasło</emphasis>"
+
+#: chpasswd.8.xml:92(para)
+#, fuzzy
+msgid ""
+"By default the passwords must be supplied in clear-text, and are encrypted "
+"by <command>chpasswd</command>. Also the password age will be updated, if "
+"present."
+msgstr ""
+"Domyślnie dostarczane hasła muszą być w postaci jawnej. Podczas kodowania "
+"haseł używany jest domyślnie algorytm DES. W trakcie zmiany hasła "
+"aktualizowany jest także wiek hasła."
+
+#: chpasswd.8.xml:97(para)
+msgid ""
+"The default encryption algorithm can be defined for the system with the "
+"<option>ENCRYPT_METHOD</option> or <option>MD5_CRYPT_ENAB</option> variables "
+"of <filename>/etc/login.defs</filename>, and can be overwritten with the "
+"<option>-e</option>, <option>-m</option>, or <option>-c</option> options."
+msgstr ""
+
+#: chpasswd.8.xml:105(para)
+msgid ""
+"By default, passwords are encrypted by PAM, but (even if not recommended) "
+"you can select a different encryption method with the <option>-e</option>, "
+"<option>-m</option>, or <option>-c</option> options."
+msgstr ""
+
+#: chpasswd.8.xml:111(para)
+msgid ""
+"<phrase condition=\"pam\">Except when PAM is used to encrypt the passwords,</"
+"phrase><command>chpasswd</command> first updates all the passwords in "
+"memory, and then commits all the changes to disk if no errors occurred for "
+"any user."
+msgstr ""
+
+#: chpasswd.8.xml:117(para)
+msgid ""
+"When PAM is used to encrypt the passwords (and update the passwords in the "
+"system database) then if a password cannot be updated <command>chpasswd</"
+"command> continues updating the passwords of the next users, and will return "
+"an error code on exit."
+msgstr ""
+
+#: chpasswd.8.xml:123(para) chgpasswd.8.xml:98(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are created at a single time."
+msgstr ""
+"Polecenie to przeznaczone jest do użytku w dużych systemach, gdzie "
+"aktualizuje się wiele kont naraz."
+
+#: chpasswd.8.xml:131(para)
+msgid "The options which apply to the <command>chpasswd</command> command are:"
+msgstr "Polecenie <command>chpasswd</command> posiada następujące opcje:"
+
+#: chpasswd.8.xml:137(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-c</option>, <option>--comment</option>&nbsp;"
+#| "<replaceable>COMMENT</replaceable>"
+msgid ""
+"<option>-c</option>, <option>--crypt-method</option>&nbsp;"
+"<replaceable>METHOD</replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--comment</option>&nbsp;<replaceable>KOMENTARZ</"
+"replaceable>"
+
+#: chpasswd.8.xml:142(para) chgpasswd.8.xml:115(para)
+msgid "The available methods are DES, MD5, and NONE."
+msgstr ""
+
+#: chpasswd.8.xml:149(para)
+msgid "By default, PAM is used to encrypt the passwords."
+msgstr ""
+
+#: chpasswd.8.xml:152(para)
+msgid ""
+"By default (if none of the <option>-c</option>, <option>-m</option>, or "
+"<option>-e</option> options are specified), the encryption method is defined "
+"by the <option>ENCRYPT_METHOD</option> or <option>MD5_CRYPT_ENAB</option> "
+"variables of <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: chpasswd.8.xml:163(term) chgpasswd.8.xml:125(term)
+msgid "<option>-e</option>, <option>--encrypted</option>"
+msgstr "<option>-e</option>, <option>--encrypted</option>"
+
+#: chpasswd.8.xml:165(para) chgpasswd.8.xml:127(para)
+msgid "Supplied passwords are in encrypted form."
+msgstr ""
+"Dostarczone na standardowe wejście hasła są traktowane jako już zakodowane."
+
+#: chpasswd.8.xml:179(term) chgpasswd.8.xml:137(term)
+msgid "<option>-m</option>, <option>--md5</option>"
+msgstr "<option>-m</option>, <option>--md5</option>"
+
+#: chpasswd.8.xml:181(para) chgpasswd.8.xml:139(para)
+msgid ""
+"Use MD5 encryption instead of DES when the supplied passwords are not "
+"encrypted."
+msgstr ""
+"Jeżeli dpostarczane hasła są w postaci jawnej użyj kodowania MD5 zamiast "
+"domyślnego DES."
+
+#: chpasswd.8.xml:200(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-w</option>, <option>--warndays</option>&nbsp;"
+#| "<replaceable>WARN_DAYS</replaceable>"
+msgid ""
+"<option>-s</option>, <option>--sha-rounds</option>&nbsp;<replaceable>ROUNDS</"
+"replaceable>"
+msgstr ""
+"<option>-w</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>DNI_OSTRZ</replaceable>"
+
+#: chpasswd.8.xml:219(para)
+msgid ""
+"By default, the number of rounds is defined by the "
+"<option>SHA_CRYPT_MIN_ROUNDS</option> and <option>SHA_CRYPT_MAX_ROUNDS</"
+"option> variables in <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: chpasswd.8.xml:232(para) chgpasswd.8.xml:187(para)
+msgid ""
+"Remember to set permissions or umask to prevent readability of unencrypted "
+"files by other users."
+msgstr ""
+"Pamiętaj żeby zabezpieczyć przed odczytem plik przekazywany na standardowe "
+"wejście polecenia."
+
+#: chpasswd.8.xml:276(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/pam.d/chpasswd"
+msgstr "/etc/passwd"
+
+#: chpasswd.8.xml:278(para)
+msgid "PAM configuration for <command>chpasswd</command>."
+msgstr ""
+
+#: chpasswd.8.xml:286(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>newusers</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<phrase><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: chgpasswd.8.xml:47(contrib)
+msgid "Creation, 2006"
+msgstr ""
+
+#: chgpasswd.8.xml:65(refpurpose)
+msgid "update group passwords in batch mode"
+msgstr "wsadowa aktualizacja haseł grup"
+
+#: chgpasswd.8.xml:79(para)
+msgid ""
+"The <command>chgpasswd</command> command reads a list of group name and "
+"password pairs from standard input and uses this information to update a set "
+"of existing groups. Each line is of the format:"
+msgstr ""
+"Polecenie <command>chgpasswd</command> czyta pary danych (grupa i hasło) ze "
+"standardowego wejścia. Odczytane informacje wykorzystywane są do "
+"aktualizacji danych o grupach istniejących użytkowników. Każdy wiersz "
+"przekazywanych danych ma postać:"
+
+#: chgpasswd.8.xml:84(para)
+msgid ""
+"<emphasis remap=\"I\">group_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">nazwa_grupy</emphasis>:<emphasis remap=\"I\">hasło</"
+"emphasis>"
+
+#: chgpasswd.8.xml:88(para)
+#, fuzzy
+msgid ""
+"By default the supplied password must be in clear-text, and is encrypted by "
+"<command>chgpasswd</command>."
+msgstr ""
+"Domyślnie dostarczane hasła muszą być w postaci jawnej. Podczas kodowania "
+"haseł używany jest domyślnie algorytm DES."
+
+#: chgpasswd.8.xml:92(para)
+msgid ""
+"The default encryption algorithm can be defined for the system with the "
+"<option>ENCRYPT_METHOD</option> variable of <filename>/etc/login.defs</"
+"filename>, and can be overwritten with the <option>-e</option>, <option>-m</"
+"option>, or <option>-c</option> options."
+msgstr ""
+
+#: chgpasswd.8.xml:106(para)
+msgid ""
+"The options which apply to the <command>chgpasswd</command> command are:"
+msgstr "Polecenie <command>chgpasswd</command> posiada następujące opcje:"
+
+#: chgpasswd.8.xml:238(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: chfn.1.xml:68(refpurpose)
+msgid "change real user name and information"
+msgstr ""
+
+#: chfn.1.xml:85(para)
+msgid ""
+"The <command>chfn</command> command changes user fullname, office room "
+"number, office phone number, and home phone number information for a user's "
+"account. This information is typically printed by "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> and similar programs. A normal user may only change the fields "
+"for her own account, subject to the restrictions in <filename>/etc/login."
+"defs</filename>. (The default configuration is to prevent users from "
+"changing their fullname.) The superuser may change any field for any "
+"account. Additionally, only the superuser may use the <option>-o</option> "
+"option to change the undefined portions of the GECOS field."
+msgstr ""
+
+#: chfn.1.xml:99(para)
+msgid ""
+"These fields must not contain any colons. Except for the <emphasis remap=\"I"
+"\">other</emphasis> field, they should not contain any comma or equal sign. "
+"It is also recommended to avoid non-US-ASCII characters, but this is only "
+"enforced for the phone numbers. The <emphasis remap=\"I\">other</emphasis> "
+"field is used to store accounting information used by other applications."
+msgstr ""
+
+#: chfn.1.xml:112(para)
+#, fuzzy
+#| msgid "The options which apply to the <command>chsh</command> command are:"
+msgid "The options which apply to the <command>chfn</command> command are:"
+msgstr "Polecenie <command>chsh</command> posiada następujące opcje:"
+
+#: chfn.1.xml:117(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+#| "replaceable>"
+msgid ""
+"<option>-f</option>, <option>--full-name</option>&nbsp;"
+"<replaceable>FULL_NAME</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+"replaceable>"
+
+#: chfn.1.xml:121(para)
+msgid "Change the user's full name."
+msgstr ""
+
+#: chfn.1.xml:125(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_DIR</"
+#| "replaceable>"
+msgid ""
+"<option>-h</option>, <option>--home-phone</option>&nbsp;"
+"<replaceable>HOME_PHONE</replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home</option>&nbsp;<replaceable>KAT_DOMOWY</"
+"replaceable>"
+
+#: chfn.1.xml:129(para)
+msgid "Change the user's home phone number."
+msgstr ""
+
+#: chfn.1.xml:133(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_DIR</"
+#| "replaceable>"
+msgid ""
+"<option>-o</option>, <option>--other</option>&nbsp;<replaceable>OTHER</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home</option>&nbsp;<replaceable>KAT_DOMOWY</"
+"replaceable>"
+
+#: chfn.1.xml:137(para)
+msgid ""
+"Change the user's other GECOS information. This field is used to store "
+"accounting information used by other applications, and can be changed only "
+"by a superuser."
+msgstr ""
+
+#: chfn.1.xml:145(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_DIR</"
+#| "replaceable>"
+msgid ""
+"<option>-r</option>, <option>--room</option>&nbsp;<replaceable>ROOM_NUMBER</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home</option>&nbsp;<replaceable>KAT_DOMOWY</"
+"replaceable>"
+
+#: chfn.1.xml:149(para)
+msgid "Change the user's room number."
+msgstr ""
+
+#: chfn.1.xml:165(term)
+#, fuzzy
+#| msgid "<option>-h</option>, <option>--help</option>"
+msgid "<option>-u</option>, <option>--help</option>"
+msgstr "<option>-h</option>, <option>--help</option>"
+
+#: chfn.1.xml:173(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_DIR</"
+#| "replaceable>"
+msgid ""
+"<option>-w</option>, <option>--work-phone</option>&nbsp;"
+"<replaceable>WORK_PHONE</replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home</option>&nbsp;<replaceable>KAT_DOMOWY</"
+"replaceable>"
+
+#: chfn.1.xml:177(para)
+msgid "Change the user's office phone number."
+msgstr ""
+
+#: chfn.1.xml:181(para)
+msgid ""
+"If none of the options are selected, <command>chfn</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis remap=\"B\">[ ]</emphasis> marks. Without options, <command>chfn</"
+"command> prompts for the current user account."
+msgstr ""
+
+#: chfn.1.xml:226(para)
+msgid ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: chage.1.xml:66(refpurpose)
+msgid "change user password expiry information"
+msgstr "zmiana informacji o terminie ważności hasła użytkownika"
+
+#: 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 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 "
+"ustalenia, kiedy użytkownik musi zmienić hasło."
+
+#: chage.1.xml:92(para)
+msgid "The options which apply to the <command>chage</command> command are:"
+msgstr "Polecenie <command>chage</command> posiada następujące opcje:"
+
+#: chage.1.xml:97(term)
+msgid ""
+"<option>-d</option>, <option>--lastday</option>&nbsp;<replaceable>LAST_DAY</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--lastday</option>&nbsp;<replaceable>OSTATNI</"
+"replaceable>"
+
+#: chage.1.xml:101(para)
+msgid ""
+"Set the number of days since January 1st, 1970 when the password was last "
+"changed. The date may also be expressed in the format YYYY-MM-DD (or the "
+"format more commonly used in your area)."
+msgstr ""
+"Ustawia ilość dni od 1 stycznia 1970 kiedy hało było ostani raz zmieniane. "
+"Data ważności może być takze prezekazana w formacie RRRR-MM-DD (lub formacie "
+"używanym lokalnie)."
+
+#: chage.1.xml:109(term)
+msgid ""
+"<option>-E</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>EXPIRE_DATE</replaceable>"
+msgstr ""
+"<option>-E</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>DATA_WAŻN</replaceable>"
+
+#: chage.1.xml:113(para)
+msgid ""
+"Set the date or number of days since January 1, 1970 on which the user's "
+"account will no longer be accessible. The date may also be expressed in the "
+"format YYYY-MM-DD (or the format more commonly used in your area). A user "
+"whose account is locked must contact the system administrator before being "
+"able to use the system again."
+msgstr ""
+"Ustawia datę, począwszy od której konto użytkownika nie będzie już dostępne. "
+"<replaceable>DATA_WAŻN</replaceable> jest liczbą dni od 1 stycznia 1970, od "
+"której konto jest blokowane. Data może być też wyrażona w formacie RRRR-MM-"
+"DD (lub innej, powszechniej używanej w danym regionie). Użytkownik, którego "
+"konto jest zablokowane musi skontaktować się z administratorem systemu zanim "
+"będzie mógł z niego ponownie skorzystać."
+
+#: chage.1.xml:121(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>EXPIRE_DATE</replaceable> will remove an account expiration "
+"date."
+msgstr ""
+"Przekazanie <emphasis remap=\"I\">-1</emphasis> jako <replaceable>DATA_WAŻN</"
+"replaceable> usuwa ograniczenie ważności konta użytkownika."
+
+#: chage.1.xml:135(term)
+#, fuzzy
+#| msgid "<option>-s</option>, <option>--shadow</option>"
+msgid "<option>-i</option>, <option>--iso8601</option>"
+msgstr "<option>-s</option>, <option>--shadow</option>"
+
+#: chage.1.xml:137(para)
+msgid "When printing dates, use YYYY-MM-DD format."
+msgstr ""
+
+#: chage.1.xml:141(term)
+msgid ""
+"<option>-I</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-I</option>, <option>--inactive</option>&nbsp;"
+"<replaceable>NIEAKTYWNE</replaceable>"
+
+#: chage.1.xml:145(para)
+msgid ""
+"Set the number of days of inactivity after a password has expired before the "
+"account is locked. The <replaceable>INACTIVE</replaceable> option is the "
+"number of days of inactivity. A user whose account is locked must contact "
+"the system administrator before being able to use the system again."
+msgstr ""
+"Opcja ta służy do ustawiania czasu nieaktywności konta po wygaśnięciu "
+"ważności hasła, po którym to czasie konto jest blokowane. Parametr "
+"<replaceable>NIEAKTYWNE</replaceable> jest liczbą dni nieaktywności. "
+"Użytkownik, którego konto jest zablokowane musi skontaktować się z "
+"administratorem systemu zanim będzie mógł z niego ponownie skorzystać."
+
+#: chage.1.xml:152(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>INACTIVE</replaceable> will remove an account's inactivity."
+msgstr ""
+"Przekazanie <emphasis remap=\"I\">-1</emphasis> jako "
+"<replaceable>NIEAKTYWNE</replaceable> usuwa ograniczenie nieaktywniści konta "
+"użytkownika."
+
+#: chage.1.xml:164(para)
+msgid "Show account aging information."
+msgstr "Wyświetlenie informacji o terminach ważności konta i hasła."
+
+#: chage.1.xml:170(term)
+msgid ""
+"<option>-m</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DNI</"
+"replaceable>"
+
+#: chage.1.xml:182(term)
+msgid ""
+"<option>-M</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-M</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DNI</"
+"replaceable>"
+
+#: chage.1.xml:186(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 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 ""
+"Ustawia maksymalną liczbę dni, przez jakie hasło jest ważne. Gdy "
+"<replaceable>MAX_DNI</replaceable> plus <replaceable>OSTATNI</replaceable> "
+"jest mniejsze niż bieżący dzień, użytkownik musi zmienić swoje hasła, zanim "
+"będzie mógł skorzystać z konta. Zdarzenie to może być zaplanowane z "
+"wyprzedzeniem przez wykorzystanie opcji <option>-W</option>, ostrzegającej "
+"zawczasu użytkownika o zbliżającym się terminie zmiany."
+
+#: chage.1.xml:215(term)
+msgid ""
+"<option>-W</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>WARN_DAYS</replaceable>"
+msgstr ""
+"<option>-W</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>DNI_OSTRZ</replaceable>"
+
+#: chage.1.xml:219(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 their password is about to "
+"expire."
+msgstr ""
+"Ustawia na <replaceable>DNI_OSTRZ</replaceable> liczbę dni przed upływem "
+"ważności hasła. Od tego dnia użytkownik będzie ostrzegany o nadchodzącym "
+"terminie zmiany hasła."
+
+#: chage.1.xml:228(para)
+msgid ""
+"If none of the options are selected, <command>chage</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis>[ ]</emphasis> marks."
+msgstr ""
+"Jeśli nie podano żadnej opcji, to <command>chage</command> działa w trybie "
+"interaktywnym, proponując użytkownikowi wartości bieżące dla każdego z pól. "
+"Wprowadzenie nowej wartości powoduje zmianę wartości pola, a podanie "
+"wartości pustej pozostawia wartość bieżącą. Bieżąca wartość pola wyświetlana "
+"jest w nawiasach <emphasis>[ ]</emphasis>."
+
+#: chage.1.xml:238(para)
+msgid ""
+"The <command>chage</command> program requires a shadow password file to be "
+"available."
+msgstr ""
+"Program <command>chage</command> wymaga do działania chronionego pliku haseł "
+"użytkowników (shadow)."
+
+#: chage.1.xml:242(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 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 "
+"stwierdzenia, kiedy wygasa jego własne hasło lub konto."
+
+#: chage.1.xml:307(replaceable)
+msgid "15"
+msgstr "15"
+
+#: chage.1.xml:309(para)
+msgid "can't find the shadow password file"
+msgstr "nie można znaleźć pliku shadow"
+
+#: chage.1.xml:285(para)
+msgid ""
+"The <command>chage</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Polecenie <command>chage</command> kończy działanie z następującymi "
+"wartościami kodów zakończenia: <placeholder-1/>"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
+#: chage.1.xml:0(None)
+msgid "translator-credits"
+msgstr "Tomasz Kłoczko <kloczek@pld.org.pl>, 2006"
+
+#, fuzzy
+#~| msgid "-"
+#~ msgid "-M"
+#~ msgstr "-"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#, fuzzy
+#~| msgid ""
+#~| "The name of the user's new login shell. Setting this field to blank "
+#~| "causes the system to select the default login shell."
+#~ msgid ""
+#~ "The SELinux user for the user's login. The default is to leave this field "
+#~ "the blank, which causes the system to select the default SELinux user."
+#~ msgstr ""
+#~ "Nazwa nowej powłoki (shell) użytkownika. Ustawienie tego pola na puste "
+#~ "powoduje, że system wybierze domyślną powłokę logowania."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "-q"
+#~ msgstr "-q"
+
+#~ msgid "-s"
+#~ msgstr "-s"
+
+#, fuzzy
+#~| msgid ""
+#~| "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~| "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, <phrase condition="
+#~ "\"no_pam\"><citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+#~ "phrase><citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid "new_users"
+#~ msgstr "new_users"
+
+#~ msgid "full_name"
+#~ msgstr "full_name"
+
+#~ msgid "-f <placeholder-1/>"
+#~ msgstr "-f <placeholder-1/>"
+
+#~ msgid "room_no"
+#~ msgstr "room_no"
+
+#~ msgid "work_ph"
+#~ msgstr "work_ph"
+
+#~ msgid "-w <placeholder-1/>"
+#~ msgstr "-w <placeholder-1/>"
+
+#~ msgid "home_ph"
+#~ msgstr "home_ph"
+
+#~ msgid "other"
+#~ msgstr "other"
+
+#~ msgid "-o <placeholder-1/>"
+#~ msgstr "-o <placeholder-1/>"
+
+#, fuzzy
+#~| msgid ""
+#~| "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~| "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~| "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>pam</"
+#~| "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>group</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+#~ "condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pam</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>group</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>group</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE"
+#~ msgstr "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE"
+
+#, fuzzy
+#~| msgid "Supplied passwords are in encrypted form."
+#~ msgid "The supplied passwords must be in clear-text."
+#~ msgstr ""
+#~ "Dostarczone na standardowe wejście hasła są traktowane jako już "
+#~ "zakodowane."
+
+#, fuzzy
+#~ msgid "and <placeholder-1/> files"
+#~ msgstr "-a <placeholder-1/>"
+
+#, fuzzy
+#~| msgid ""
+#~| "<command>usermod</command> will not allow you to change the name of a "
+#~| "user who is logged in. You must make certain that the named user is not "
+#~| "executing any processes when this command is being executed if the "
+#~| "user's numerical user ID is being changed. You must change the owner of "
+#~| "any <command>crontab</command> files manually. You must change the owner "
+#~| "of any <command>at</command> jobs manually. You must make any changes "
+#~| "involving NIS on the NIS server."
+#~ msgid ""
+#~ "<command>usermod</command> will not allow you to change the name of an "
+#~ "user who is logged in. You must make certain that the named user is not "
+#~ "executing any processes when this command is being executed if the user's "
+#~ "numerical user ID is being changed. You must change the owner of any "
+#~ "<command>crontab</command> files manually. You must change the owner of "
+#~ "any <command>at</command> jobs manually. You must make any changes "
+#~ "involving NIS on the NIS server."
+#~ msgstr ""
+#~ "Polecenie <command>usermod</command> nie pozwola na zmianę nazwy "
+#~ "zalogowanego użytkownika. Jeśli zmieniany jest numeryczny identyfikator "
+#~ "użytkownika procesu to musisz się upewnić, że w trakcie wykonywania tego "
+#~ "polecenia użytkownik nie wykonuje żadnego procesu. Właśniciela plików "
+#~ "<command>crontab</command> musisz zmienić ręcznie. Właśniciela zadań "
+#~ "<command>at</command> musisz zmienić ręcznie. Jakiekolwiek zmiany "
+#~ "dotyczące NIS musisz wykonać na serwerze NIS."
+
+#~ msgid ""
+#~ "The group name or number of the user's new initial login group. The group "
+#~ "name must exist. A group number must refer to an already existing group. "
+#~ "The default group number is 1."
+#~ msgstr ""
+#~ "Nazwa lub numer początkowej grupy logowania użytkownika. Nazwa grupy musi "
+#~ "istnieć. Numer grupy musi odnosić się do już istniejącej grupy. Domyślnym "
+#~ "numerem grupy jest 1."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>getent</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>getpwnam</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>getent</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>getpwnam</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+
+#, fuzzy
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "-a"
+#~ msgstr "-a"
+
+#~ msgid "-d"
+#~ msgstr "-d"
+
+#~ msgid "-g"
+#~ msgstr "-g"
+
+#~ msgid "GID"
+#~ msgstr "GID"
+
+#~ msgid "-o"
+#~ msgstr "-o"
+
+#~ msgid "KEY"
+#~ msgstr "KLUCZ"
+
+#~ msgid "VALUE"
+#~ msgstr "WARTOŚĆ"
+
+#~ msgid "-K <placeholder-1/>=<placeholder-2/>"
+#~ msgstr "-K <placeholder-1/>=<placeholder-2/>"
+
+#, fuzzy
+#~ msgid "-R"
+#~ msgstr "-"
+
+#, fuzzy
+#~ msgid "<option>-A</option>&nbsp;<replaceable>user</replaceable>,..."
+#~ msgstr ""
+#~ "<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+#~ "replaceable>"
+
+#, fuzzy
+#~ msgid "<option>-M</option>&nbsp;<replaceable>user</replaceable>,..."
+#~ msgstr ""
+#~ "<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+#~ "replaceable>"
+
+#~ msgid "An4wtbt"
+#~ msgstr "An4wtbt"
+
+#~ msgid ""
+#~ "The <option>-t</option> flag overrides the use of <option>-u</option>."
+#~ msgstr ""
+#~ "Opcja <option>-t</option> przesłania użycie opcji <option>-u</option>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid "MAIL_DIR USERDEL_CMD"
+#~ msgstr "MAIL_DIR USERDEL_CMD"
+
+#~ msgid "MAIL_DIR"
+#~ msgstr "MAIL_DIR"
+
+#~ msgid "CHFN_AUTH"
+#~ msgstr "CHFN_AUTH"
+
+#~ msgid "GID_MAX GID_MIN"
+#~ msgstr "GID_MAX GID_MIN"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>newusers</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>newusers</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid "-R <placeholder-1/>"
+#~ msgstr "-R <placeholder-1/>"
+
+#~ msgid "-A <placeholder-1/>"
+#~ msgstr "-A <placeholder-1/>"
+
+#~ msgid "-M <placeholder-1/>"
+#~ msgstr "-M <placeholder-1/>"
diff --git a/man/po/ru.po b/man/po/ru.po
new file mode 100644
index 0000000..3c7df05
--- /dev/null
+++ b/man/po/ru.po
@@ -0,0 +1,12023 @@
+# translation of shadow_1:4.0.18.2-1_ru.po to Russian
+# Yuri Kozlov <kozlov.y@gmail.com>, 2005, 2006, 2007.
+# Yuri Kozlov <yuray@komyakino.ru>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: 1:4.0.18.2-1\n"
+"POT-Creation-Date: 2020-01-23 15:00-0600\n"
+"PO-Revision-Date: 2013-08-23 01:39+0200\n"
+"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
+"Language-Team: Russian <debian-l10n-russian@lists.debian.org>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: vipw.8.xml:41(firstname) suauth.5.xml:39(firstname)
+#: pwconv.8.xml:45(firstname) login.access.5.xml:40(firstname)
+msgid "Marek"
+msgstr ""
+
+#: vipw.8.xml:42(surname) suauth.5.xml:40(surname) pwconv.8.xml:46(surname)
+#: login.access.5.xml:41(surname)
+msgid "Michałkiewicz"
+msgstr ""
+
+#: vipw.8.xml:43(contrib) limits.5.xml:43(contrib)
+msgid "Creation, 1997"
+msgstr ""
+
+#: vipw.8.xml:46(firstname) usermod.8.xml:51(firstname)
+#: userdel.8.xml:50(firstname) useradd.8.xml:63(firstname)
+#: suauth.5.xml:44(firstname) su.1.xml:61(firstname) sg.1.xml:45(firstname)
+#: shadow.5.xml:44(firstname) shadow.3.xml:44(firstname)
+#: pwconv.8.xml:50(firstname) pwck.8.xml:50(firstname)
+#: porttime.5.xml:44(firstname) passwd.5.xml:44(firstname)
+#: passwd.1.xml:51(firstname) newusers.8.xml:60(firstname)
+#: newgrp.1.xml:45(firstname) logoutd.8.xml:44(firstname)
+#: login.defs.5.xml:111(firstname) login.access.5.xml:45(firstname)
+#: login.1.xml:77(firstname) limits.5.xml:46(firstname)
+#: lastlog.8.xml:46(firstname) grpck.8.xml:45(firstname)
+#: groups.1.xml:44(firstname) groupmod.8.xml:45(firstname)
+#: groupmems.8.xml:48(firstname) groupdel.8.xml:45(firstname)
+#: groupadd.8.xml:47(firstname) gpasswd.1.xml:49(firstname)
+#: faillog.8.xml:44(firstname) faillog.5.xml:44(firstname)
+#: expiry.1.xml:48(firstname) chsh.1.xml:47(firstname)
+#: chpasswd.8.xml:48(firstname) chgpasswd.8.xml:44(firstname)
+#: chfn.1.xml:47(firstname) chage.1.xml:45(firstname)
+msgid "Thomas"
+msgstr ""
+
+#: vipw.8.xml:47(surname) usermod.8.xml:52(surname) userdel.8.xml:51(surname)
+#: useradd.8.xml:64(surname) suauth.5.xml:45(surname) su.1.xml:62(surname)
+#: sg.1.xml:46(surname) shadow.5.xml:45(surname) shadow.3.xml:45(surname)
+#: pwconv.8.xml:51(surname) pwck.8.xml:51(surname) porttime.5.xml:45(surname)
+#: passwd.5.xml:45(surname) passwd.1.xml:52(surname) newusers.8.xml:61(surname)
+#: newgrp.1.xml:46(surname) logoutd.8.xml:45(surname)
+#: login.defs.5.xml:112(surname) login.access.5.xml:46(surname)
+#: login.1.xml:78(surname) limits.5.xml:47(surname) lastlog.8.xml:47(surname)
+#: grpck.8.xml:46(surname) groups.1.xml:45(surname) groupmod.8.xml:46(surname)
+#: groupmems.8.xml:49(surname) groupdel.8.xml:46(surname)
+#: groupadd.8.xml:48(surname) gpasswd.1.xml:50(surname)
+#: faillog.8.xml:45(surname) faillog.5.xml:45(surname) expiry.1.xml:49(surname)
+#: chsh.1.xml:48(surname) chpasswd.8.xml:49(surname)
+#: chgpasswd.8.xml:45(surname) chfn.1.xml:48(surname) chage.1.xml:46(surname)
+msgid "Kłoczko"
+msgstr ""
+
+#: vipw.8.xml:48(email) usermod.8.xml:53(email) userdel.8.xml:52(email)
+#: useradd.8.xml:65(email) suauth.5.xml:46(email) su.1.xml:63(email)
+#: sg.1.xml:47(email) shadow.5.xml:46(email) shadow.3.xml:46(email)
+#: pwconv.8.xml:52(email) pwck.8.xml:52(email) porttime.5.xml:46(email)
+#: passwd.5.xml:46(email) passwd.1.xml:53(email) newusers.8.xml:62(email)
+#: newgrp.1.xml:47(email) logoutd.8.xml:46(email) login.defs.5.xml:113(email)
+#: login.access.5.xml:47(email) login.1.xml:79(email) limits.5.xml:48(email)
+#: lastlog.8.xml:48(email) grpck.8.xml:47(email) groups.1.xml:46(email)
+#: groupmod.8.xml:47(email) groupmems.8.xml:50(email) groupdel.8.xml:47(email)
+#: groupadd.8.xml:49(email) gpasswd.1.xml:51(email) faillog.8.xml:46(email)
+#: faillog.5.xml:46(email) expiry.1.xml:50(email) chsh.1.xml:49(email)
+#: chpasswd.8.xml:50(email) chgpasswd.8.xml:46(email) chfn.1.xml:49(email)
+#: chage.1.xml:47(email)
+msgid "kloczek@pld.org.pl"
+msgstr ""
+
+#: vipw.8.xml:49(contrib) usermod.8.xml:54(contrib) userdel.8.xml:53(contrib)
+#: useradd.8.xml:66(contrib) suauth.5.xml:47(contrib) su.1.xml:64(contrib)
+#: sg.1.xml:48(contrib) shadow.5.xml:47(contrib) shadow.3.xml:47(contrib)
+#: pwconv.8.xml:53(contrib) pwck.8.xml:53(contrib) porttime.5.xml:47(contrib)
+#: passwd.5.xml:47(contrib) passwd.1.xml:54(contrib) newusers.8.xml:63(contrib)
+#: newgrp.1.xml:48(contrib) logoutd.8.xml:47(contrib)
+#: login.defs.5.xml:114(contrib) login.access.5.xml:48(contrib)
+#: login.1.xml:80(contrib) limits.5.xml:49(contrib) lastlog.8.xml:49(contrib)
+#: grpck.8.xml:48(contrib) groups.1.xml:47(contrib) groupmod.8.xml:48(contrib)
+#: groupmems.8.xml:51(contrib) groupdel.8.xml:48(contrib)
+#: groupadd.8.xml:50(contrib) gpasswd.1.xml:52(contrib)
+#: faillog.8.xml:47(contrib) faillog.5.xml:47(contrib) expiry.1.xml:51(contrib)
+#: chsh.1.xml:50(contrib) chpasswd.8.xml:51(contrib) chfn.1.xml:50(contrib)
+#: chage.1.xml:48(contrib)
+msgid "shadow-utils maintainer, 2000 - 2007"
+msgstr ""
+
+#: vipw.8.xml:52(firstname) usermod.8.xml:57(firstname)
+#: userdel.8.xml:56(firstname) useradd.8.xml:69(firstname)
+#: suauth.5.xml:50(firstname) su.1.xml:67(firstname) sg.1.xml:51(firstname)
+#: shadow.5.xml:50(firstname) shadow.3.xml:50(firstname)
+#: pwconv.8.xml:56(firstname) pwck.8.xml:56(firstname)
+#: porttime.5.xml:50(firstname) passwd.5.xml:50(firstname)
+#: passwd.1.xml:57(firstname) nologin.8.xml:39(firstname)
+#: newusers.8.xml:66(firstname) newgrp.1.xml:51(firstname)
+#: logoutd.8.xml:50(firstname) login.defs.5.xml:117(firstname)
+#: login.access.5.xml:51(firstname) login.1.xml:83(firstname)
+#: limits.5.xml:52(firstname) lastlog.8.xml:52(firstname)
+#: gshadow.5.xml:38(firstname) grpck.8.xml:51(firstname)
+#: groups.1.xml:50(firstname) groupmod.8.xml:51(firstname)
+#: groupmems.8.xml:54(firstname) groupdel.8.xml:51(firstname)
+#: groupadd.8.xml:53(firstname) gpasswd.1.xml:55(firstname)
+#: faillog.8.xml:50(firstname) faillog.5.xml:50(firstname)
+#: expiry.1.xml:54(firstname) chsh.1.xml:53(firstname)
+#: chpasswd.8.xml:54(firstname) chgpasswd.8.xml:50(firstname)
+#: chfn.1.xml:53(firstname) chage.1.xml:51(firstname)
+msgid "Nicolas"
+msgstr ""
+
+#: vipw.8.xml:53(surname) usermod.8.xml:58(surname) userdel.8.xml:57(surname)
+#: useradd.8.xml:70(surname) suauth.5.xml:51(surname) su.1.xml:68(surname)
+#: sg.1.xml:52(surname) shadow.5.xml:51(surname) shadow.3.xml:51(surname)
+#: pwconv.8.xml:57(surname) pwck.8.xml:57(surname) porttime.5.xml:51(surname)
+#: passwd.5.xml:51(surname) passwd.1.xml:58(surname) nologin.8.xml:40(surname)
+#: newusers.8.xml:67(surname) newgrp.1.xml:52(surname)
+#: logoutd.8.xml:51(surname) login.defs.5.xml:118(surname)
+#: login.access.5.xml:52(surname) login.1.xml:84(surname)
+#: limits.5.xml:53(surname) lastlog.8.xml:53(surname) gshadow.5.xml:39(surname)
+#: grpck.8.xml:52(surname) groups.1.xml:51(surname) groupmod.8.xml:52(surname)
+#: groupmems.8.xml:55(surname) groupdel.8.xml:52(surname)
+#: groupadd.8.xml:54(surname) gpasswd.1.xml:56(surname)
+#: faillog.8.xml:51(surname) faillog.5.xml:51(surname) expiry.1.xml:55(surname)
+#: chsh.1.xml:54(surname) chpasswd.8.xml:55(surname)
+#: chgpasswd.8.xml:51(surname) chfn.1.xml:54(surname) chage.1.xml:52(surname)
+msgid "François"
+msgstr ""
+
+#: vipw.8.xml:54(email) usermod.8.xml:59(email) userdel.8.xml:58(email)
+#: useradd.8.xml:71(email) suauth.5.xml:52(email) su.1.xml:69(email)
+#: sg.1.xml:53(email) shadow.5.xml:52(email) shadow.3.xml:52(email)
+#: pwconv.8.xml:58(email) pwck.8.xml:58(email) porttime.5.xml:52(email)
+#: passwd.5.xml:52(email) passwd.1.xml:59(email) nologin.8.xml:41(email)
+#: newusers.8.xml:68(email) newgrp.1.xml:53(email) logoutd.8.xml:52(email)
+#: login.defs.5.xml:119(email) login.access.5.xml:53(email)
+#: login.1.xml:85(email) limits.5.xml:54(email) lastlog.8.xml:54(email)
+#: gshadow.5.xml:40(email) grpck.8.xml:53(email) groups.1.xml:52(email)
+#: groupmod.8.xml:53(email) groupmems.8.xml:56(email) groupdel.8.xml:53(email)
+#: groupadd.8.xml:55(email) gpasswd.1.xml:57(email) faillog.8.xml:52(email)
+#: faillog.5.xml:52(email) expiry.1.xml:56(email) chsh.1.xml:55(email)
+#: chpasswd.8.xml:56(email) chgpasswd.8.xml:52(email) chfn.1.xml:55(email)
+#: chage.1.xml:53(email)
+msgid "nicolas.francois@centraliens.net"
+msgstr ""
+
+#: vipw.8.xml:55(contrib) usermod.8.xml:60(contrib) userdel.8.xml:59(contrib)
+#: useradd.8.xml:72(contrib) suauth.5.xml:53(contrib) su.1.xml:70(contrib)
+#: sg.1.xml:54(contrib) shadow.5.xml:53(contrib) shadow.3.xml:53(contrib)
+#: pwconv.8.xml:59(contrib) pwck.8.xml:59(contrib) porttime.5.xml:53(contrib)
+#: passwd.5.xml:53(contrib) passwd.1.xml:60(contrib) nologin.8.xml:42(contrib)
+#: newusers.8.xml:69(contrib) newgrp.1.xml:54(contrib)
+#: logoutd.8.xml:53(contrib) login.defs.5.xml:120(contrib)
+#: login.access.5.xml:54(contrib) login.1.xml:86(contrib)
+#: limits.5.xml:55(contrib) lastlog.8.xml:55(contrib) gshadow.5.xml:42(contrib)
+#: grpck.8.xml:54(contrib) groups.1.xml:53(contrib) groupmod.8.xml:54(contrib)
+#: groupmems.8.xml:57(contrib) groupdel.8.xml:54(contrib)
+#: groupadd.8.xml:56(contrib) gpasswd.1.xml:58(contrib)
+#: faillog.8.xml:53(contrib) faillog.5.xml:53(contrib) expiry.1.xml:57(contrib)
+#: chsh.1.xml:56(contrib) chpasswd.8.xml:57(contrib)
+#: chgpasswd.8.xml:53(contrib) chfn.1.xml:56(contrib) chage.1.xml:54(contrib)
+msgid "shadow-utils maintainer, 2007 - now"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para><command>
+#: vipw.8.xml:59(refentrytitle) vipw.8.xml:66(refname) vipw.8.xml:75(command)
+#: login.defs.5.xml:520(term)
+msgid "vipw"
+msgstr "vipw"
+
+# type: Content of: <refentry><refsect1><para><citerefentry><manvolnum>
+#: vipw.8.xml:60(manvolnum) usermod.8.xml:65(manvolnum)
+#: userdel.8.xml:64(manvolnum) userdel.8.xml:276(replaceable)
+#: useradd.8.xml:77(manvolnum) pwconv.8.xml:64(manvolnum)
+#: pwck.8.xml:64(manvolnum) nologin.8.xml:47(manvolnum)
+#: newusers.8.xml:74(manvolnum) logoutd.8.xml:58(manvolnum)
+#: lastlog.8.xml:60(manvolnum) grpck.8.xml:59(manvolnum)
+#: groupmod.8.xml:59(manvolnum) groupmems.8.xml:62(manvolnum)
+#: groupdel.8.xml:59(manvolnum) groupdel.8.xml:198(replaceable)
+#: groupadd.8.xml:61(manvolnum) faillog.8.xml:58(manvolnum)
+#: faillog.5.xml:111(manvolnum) chpasswd.8.xml:62(manvolnum)
+#: chgpasswd.8.xml:58(manvolnum)
+msgid "8"
+msgstr "8"
+
+# type: Content of: <refentry><refmeta><refmiscinfo>
+#: vipw.8.xml:61(refmiscinfo) usermod.8.xml:66(refmiscinfo)
+#: userdel.8.xml:65(refmiscinfo) useradd.8.xml:78(refmiscinfo)
+#: pwconv.8.xml:65(refmiscinfo) pwck.8.xml:65(refmiscinfo)
+#: nologin.8.xml:48(refmiscinfo) newusers.8.xml:75(refmiscinfo)
+#: logoutd.8.xml:59(refmiscinfo) lastlog.8.xml:61(refmiscinfo)
+#: grpck.8.xml:60(refmiscinfo) groupmod.8.xml:60(refmiscinfo)
+#: groupmems.8.xml:63(refmiscinfo) groupdel.8.xml:60(refmiscinfo)
+#: groupadd.8.xml:62(refmiscinfo) faillog.8.xml:59(refmiscinfo)
+#: chpasswd.8.xml:63(refmiscinfo) chgpasswd.8.xml:59(refmiscinfo)
+msgid "System Management Commands"
+msgstr "Команды управления системой"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: vipw.8.xml:62(refmiscinfo) usermod.8.xml:67(refmiscinfo)
+#: userdel.8.xml:66(refmiscinfo) useradd.8.xml:79(refmiscinfo)
+#: suauth.5.xml:60(refmiscinfo) su.1.xml:77(refmiscinfo)
+#: sg.1.xml:61(refmiscinfo) shadow.5.xml:60(refmiscinfo)
+#: shadow.3.xml:60(refmiscinfo) pwconv.8.xml:66(refmiscinfo)
+#: pwck.8.xml:66(refmiscinfo) porttime.5.xml:60(refmiscinfo)
+#: passwd.5.xml:60(refmiscinfo) passwd.1.xml:67(refmiscinfo)
+#: nologin.8.xml:49(refmiscinfo) newusers.8.xml:76(refmiscinfo)
+#: newgrp.1.xml:61(refmiscinfo) logoutd.8.xml:60(refmiscinfo)
+#: login.defs.5.xml:127(refmiscinfo) login.access.5.xml:61(refmiscinfo)
+#: login.1.xml:93(refmiscinfo) limits.5.xml:62(refmiscinfo)
+#: lastlog.8.xml:62(refmiscinfo) gshadow.5.xml:49(refmiscinfo)
+#: grpck.8.xml:61(refmiscinfo) groups.1.xml:60(refmiscinfo)
+#: groupmod.8.xml:61(refmiscinfo) groupmems.8.xml:64(refmiscinfo)
+#: groupdel.8.xml:61(refmiscinfo) groupadd.8.xml:63(refmiscinfo)
+#: gpasswd.1.xml:65(refmiscinfo) faillog.8.xml:60(refmiscinfo)
+#: faillog.5.xml:60(refmiscinfo) expiry.1.xml:64(refmiscinfo)
+#: chsh.1.xml:63(refmiscinfo) chpasswd.8.xml:64(refmiscinfo)
+#: chgpasswd.8.xml:60(refmiscinfo) chfn.1.xml:63(refmiscinfo)
+#: chage.1.xml:61(refmiscinfo)
+msgid "shadow-utils"
+msgstr "shadow-utils"
+
+# type: Content of: <refentry><refsect1><para><command>
+#: vipw.8.xml:67(refname) vipw.8.xml:81(command)
+msgid "vigr"
+msgstr "vigr"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: vipw.8.xml:68(refpurpose)
+msgid "edit the password, group, shadow-password or shadow-group file"
+msgstr ""
+"позволяют редактировать файлы паролей, групп, теневых паролей пользователей "
+"или групп."
+
+# type: Content of: <refentry><refsynopsisdiv><cmdsynopsis><arg><replaceable>
+#: vipw.8.xml:77(replaceable) vipw.8.xml:83(replaceable)
+#: usermod.8.xml:79(replaceable) userdel.8.xml:76(arg)
+#: useradd.8.xml:90(replaceable) useradd.8.xml:102(replaceable)
+#: su.1.xml:88(replaceable) pwconv.8.xml:81(replaceable)
+#: pwconv.8.xml:87(replaceable) pwconv.8.xml:93(replaceable)
+#: pwconv.8.xml:99(replaceable) pwck.8.xml:77(arg) passwd.1.xml:79(replaceable)
+#: newusers.8.xml:88(replaceable) lastlog.8.xml:74(replaceable)
+#: grpck.8.xml:72(arg) groupmod.8.xml:73(replaceable)
+#: groupdel.8.xml:73(replaceable) groupadd.8.xml:75(replaceable)
+#: faillog.8.xml:72(replaceable) chsh.1.xml:75(replaceable)
+#: chpasswd.8.xml:76(replaceable) chgpasswd.8.xml:72(replaceable)
+#: chfn.1.xml:75(replaceable) chage.1.xml:72(replaceable)
+msgid "options"
+msgstr "параметры"
+
+# type: Content of: <refentry><refsect1><title>
+#: vipw.8.xml:89(title) usermod.8.xml:86(title) userdel.8.xml:84(title)
+#: useradd.8.xml:108(title) suauth.5.xml:75(title) su.1.xml:103(title)
+#: sg.1.xml:81(title) shadow.5.xml:69(title) shadow.3.xml:118(title)
+#: shadow.3.xml:174(title) pwconv.8.xml:105(title) pwck.8.xml:92(title)
+#: porttime.5.xml:69(title) passwd.5.xml:69(title) passwd.1.xml:88(title)
+#: nologin.8.xml:64(title) newusers.8.xml:97(title) newgrp.1.xml:77(title)
+#: logoutd.8.xml:75(title) login.defs.5.xml:136(title)
+#: login.access.5.xml:70(title) login.1.xml:125(title) limits.5.xml:72(title)
+#: lastlog.8.xml:80(title) gshadow.5.xml:58(title) grpck.8.xml:83(title)
+#: groups.1.xml:78(title) groupmod.8.xml:80(title) groupmems.8.xml:85(title)
+#: groupdel.8.xml:80(title) groupadd.8.xml:84(title) gpasswd.1.xml:94(title)
+#: faillog.8.xml:78(title) faillog.5.xml:69(title) expiry.1.xml:82(title)
+#: chsh.1.xml:84(title) chpasswd.8.xml:82(title) chgpasswd.8.xml:78(title)
+#: chfn.1.xml:84(title) chage.1.xml:81(title)
+msgid "DESCRIPTION"
+msgstr "ОПИСАНИЕ"
+
+#: vipw.8.xml:90(para)
+msgid ""
+"The <command>vipw</command> and <command>vigr</command> commands edits the "
+"files <filename>/etc/passwd</filename> and <filename>/etc/group</filename>, "
+"respectively. With the <option>-s</option> flag, they will edit the shadow "
+"versions of those files, <filename>/etc/shadow</filename> and <filename>/etc/"
+"gshadow</filename>, respectively. The programs will set the appropriate "
+"locks to prevent file corruption. When looking for an editor, the programs "
+"will first try the environment variable <envar>$VISUAL</envar>, then the "
+"environment variable <envar>$EDITOR</envar>, and finally the default editor, "
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"С помощью программ <command>vipw</command> и <command>vigr</command> можно "
+"изменять файлы <filename>/etc/passwd</filename> и <filename>/etc/group</"
+"filename>, соответственно. Если указан параметр <option>-s</option>, то "
+"будут редактироваться теневые версии этих файлов, <filename>/etc/shadow</"
+"filename> и <filename>/etc/gshadow</filename>, соответственно. На время "
+"работы программы устанавливают блокировку для предотвращения повреждения "
+"файла. При выборе редактора программы сначала проверяют переменную окружения "
+"<envar>$VISUAL</envar>, затем <envar>$EDITOR</envar>, и если ничего не "
+"найдено, запускают стандартный редактор <citerefentry><refentrytitle>vi</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><title>
+#: vipw.8.xml:107(title) usermod.8.xml:94(title) userdel.8.xml:93(title)
+#: useradd.8.xml:126(title) su.1.xml:144(title) pwconv.8.xml:187(title)
+#: pwck.8.xml:176(title) passwd.1.xml:174(title) newusers.8.xml:266(title)
+#: login.1.xml:210(title) lastlog.8.xml:92(title) grpck.8.xml:147(title)
+#: groupmod.8.xml:89(title) groupmems.8.xml:100(title) groupdel.8.xml:88(title)
+#: groupadd.8.xml:93(title) gpasswd.1.xml:134(title) faillog.8.xml:89(title)
+#: expiry.1.xml:91(title) chsh.1.xml:95(title) chpasswd.8.xml:130(title)
+#: chgpasswd.8.xml:105(title) chfn.1.xml:111(title) chage.1.xml:91(title)
+msgid "OPTIONS"
+msgstr "ПАРАМЕТРЫ"
+
+#: vipw.8.xml:108(para)
+msgid ""
+"The options which apply to the <command>vipw</command> and <command>vigr</"
+"command> commands are:"
+msgstr "Параметры команд <command>vipw</command> и <command>vigr</command>:"
+
+#: vipw.8.xml:114(term)
+msgid "<option>-g</option>, <option>--group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: vipw.8.xml:116(para)
+msgid "Edit group database."
+msgstr "Редактировать базу данных групп."
+
+#: vipw.8.xml:120(term) userdel.8.xml:123(term) useradd.8.xml:278(term)
+#: pwconv.8.xml:195(term) pwck.8.xml:196(term) passwd.1.xml:214(term)
+#: newusers.8.xml:296(term) lastlog.8.xml:119(term) grpck.8.xml:157(term)
+#: groupmod.8.xml:129(term) groupmems.8.xml:142(term) groupdel.8.xml:95(term)
+#: groupadd.8.xml:131(term) gpasswd.1.xml:173(term) faillog.8.xml:122(term)
+#: expiry.1.xml:112(term) chsh.1.xml:101(term) chpasswd.8.xml:171(term)
+#: chgpasswd.8.xml:131(term) chage.1.xml:129(term)
+msgid "<option>-h</option>, <option>--help</option>"
+msgstr "<option>-h</option>, <option>--help</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: vipw.8.xml:122(para) userdel.8.xml:125(para) useradd.8.xml:280(para)
+#: pwconv.8.xml:197(para) pwck.8.xml:198(para) passwd.1.xml:216(para)
+#: newusers.8.xml:298(para) lastlog.8.xml:123(para) grpck.8.xml:159(para)
+#: groupmod.8.xml:131(para) groupmems.8.xml:144(para) groupdel.8.xml:97(para)
+#: groupadd.8.xml:133(para) gpasswd.1.xml:175(para) faillog.8.xml:124(para)
+#: expiry.1.xml:114(para) chsh.1.xml:103(para) chpasswd.8.xml:173(para)
+#: chgpasswd.8.xml:133(para) chfn.1.xml:169(para) chage.1.xml:131(para)
+msgid "Display help message and exit."
+msgstr "Показать краткую справку и закончить работу."
+
+#: vipw.8.xml:126(term)
+msgid "<option>-p</option>, <option>--passwd</option>"
+msgstr "<option>-p</option>, <option>--passwd</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: vipw.8.xml:128(para)
+msgid "Edit passwd database."
+msgstr "Редактировать базу данных passwd."
+
+#: vipw.8.xml:132(term) pwck.8.xml:202(term) passwd.1.xml:281(term)
+msgid "<option>-q</option>, <option>--quiet</option>"
+msgstr "<option>-q</option>, <option>--quiet</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: vipw.8.xml:134(para) passwd.1.xml:285(para)
+msgid "Quiet mode."
+msgstr "Не выводить сообщений при работе."
+
+#: vipw.8.xml:138(term) usermod.8.xml:322(term) userdel.8.xml:146(term)
+#: useradd.8.xml:457(term) pwconv.8.xml:201(term) pwck.8.xml:219(term)
+#: passwd.1.xml:301(term) newusers.8.xml:321(term) lastlog.8.xml:127(term)
+#: grpck.8.xml:173(term) groupmod.8.xml:178(term) groupmems.8.xml:165(term)
+#: groupdel.8.xml:101(term) groupadd.8.xml:204(term) faillog.8.xml:180(term)
+#: chsh.1.xml:107(term) chpasswd.8.xml:188(term) chgpasswd.8.xml:146(term)
+#: chfn.1.xml:153(term) chage.1.xml:203(term)
+msgid ""
+"<option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-R</option>, <option>--root</option>&nbsp;<replaceable>КАТ_CHROOT</"
+"replaceable>"
+
+#: vipw.8.xml:142(para) usermod.8.xml:326(para) userdel.8.xml:150(para)
+#: useradd.8.xml:461(para) pwconv.8.xml:205(para) pwck.8.xml:223(para)
+#: passwd.1.xml:305(para) newusers.8.xml:325(para) lastlog.8.xml:131(para)
+#: grpck.8.xml:177(para) groupmod.8.xml:182(para) groupmems.8.xml:169(para)
+#: groupdel.8.xml:105(para) groupadd.8.xml:208(para) gpasswd.1.xml:185(para)
+#: faillog.8.xml:184(para) chsh.1.xml:111(para) chpasswd.8.xml:192(para)
+#: chgpasswd.8.xml:150(para) chfn.1.xml:157(para) chage.1.xml:207(para)
+msgid ""
+"Apply changes in the <replaceable>CHROOT_DIR</replaceable> directory and use "
+"the configuration files from the <replaceable>CHROOT_DIR</replaceable> "
+"directory."
+msgstr ""
+"Выполнить изменения в каталоге <replaceable>КАТ_CHROOT</replaceable> и "
+"использовать файлы настройки из каталога <replaceable>КАТ_CHROOT</"
+"replaceable>."
+
+#: vipw.8.xml:150(term)
+msgid "<option>-s</option>, <option>--shadow</option>"
+msgstr "<option>-s</option>, <option>--shadow</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: vipw.8.xml:152(para)
+msgid "Edit shadow or gshadow database."
+msgstr "Редактировать базу данных shadow или gshadow."
+
+#: vipw.8.xml:156(term)
+msgid "<option>-u</option>, <option>--user</option>"
+msgstr "<option>-u</option>, <option>--user</option>"
+
+#: vipw.8.xml:158(para)
+msgid "Indicates which user's tcb shadow file to edit."
+msgstr "Указать какой пользовательский теневой файл tcb редактировать."
+
+#: vipw.8.xml:165(title) usermod.8.xml:524(title) userdel.8.xml:188(title)
+#: useradd.8.xml:676(title) su.1.xml:338(title) sg.1.xml:98(title)
+#: pwconv.8.xml:227(title) pwck.8.xml:262(title) passwd.1.xml:395(title)
+#: newusers.8.xml:375(title) newgrp.1.xml:109(title) login.1.xml:294(title)
+#: lastlog.8.xml:205(title) grpck.8.xml:209(title) groupmod.8.xml:210(title)
+#: groupmems.8.xml:199(title) groupdel.8.xml:145(title)
+#: groupadd.8.xml:236(title) gpasswd.1.xml:264(title) chsh.1.xml:154(title)
+#: chpasswd.8.xml:239(title) chgpasswd.8.xml:198(title) chfn.1.xml:193(title)
+#: chage.1.xml:250(title)
+msgid "CONFIGURATION"
+msgstr "НАСТРОЙКА"
+
+#: vipw.8.xml:166(para) usermod.8.xml:525(para) userdel.8.xml:189(para)
+#: useradd.8.xml:677(para) su.1.xml:339(para) sg.1.xml:99(para)
+#: pwck.8.xml:263(para) passwd.1.xml:396(para) newusers.8.xml:376(para)
+#: newgrp.1.xml:110(para) login.1.xml:295(para) lastlog.8.xml:206(para)
+#: grpck.8.xml:210(para) groupmod.8.xml:211(para) groupmems.8.xml:200(para)
+#: groupdel.8.xml:146(para) groupadd.8.xml:237(para) gpasswd.1.xml:265(para)
+#: chsh.1.xml:155(para) chpasswd.8.xml:240(para) chgpasswd.8.xml:199(para)
+#: chfn.1.xml:194(para) chage.1.xml:251(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of this tool:"
+msgstr ""
+"На работу этого инструмента влияют следующие переменные настройки из "
+"<filename>/etc/login.defs</filename>:"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: vipw.8.xml:30(term) usermod.8.xml:30(term) userdel.8.xml:30(term)
+#: useradd.8.xml:30(term) pwconv.8.xml:30(term) pwck.8.xml:30(term)
+#: login.defs.5.xml:30(term) chage.1.xml:30(term)
+msgid "<option>USE_TCB</option> (boolean)"
+msgstr "<option>USE_TCB</option> (логический)"
+
+#: vipw.8.xml:32(para) usermod.8.xml:32(para) userdel.8.xml:32(para)
+#: useradd.8.xml:32(para) pwconv.8.xml:32(para) pwck.8.xml:32(para)
+#: login.defs.5.xml:32(para) chage.1.xml:32(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <citerefentry><refentrytitle>tcb</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry> password shadowing "
+"scheme will be used."
+msgstr ""
+"Если значение равно <replaceable>yes</replaceable>, то будет использоваться "
+"теневая схема паролей <citerefentry><refentrytitle>tcb</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: vipw.8.xml:177(title)
+msgid "ENVIRONMENT"
+msgstr "ОКРУЖЕНИЕ"
+
+#: vipw.8.xml:180(option)
+msgid "VISUAL"
+msgstr "VISUAL"
+
+#: vipw.8.xml:182(para)
+msgid "Editor to be used."
+msgstr "Редактор, который будет вызван."
+
+# type: Content of: <refentry><refsect1><title>
+#: vipw.8.xml:186(option)
+msgid "EDITOR"
+msgstr "EDITOR"
+
+#: vipw.8.xml:188(para)
+msgid "Editor to be used if <option>VISUAL</option> is not set."
+msgstr ""
+"Редактор, который будет вызван, если не задана переменная <option>VISUAL</"
+"option>."
+
+# type: Content of: <refentry><refsect1><title>
+#: vipw.8.xml:195(title) usermod.8.xml:542(title) userdel.8.xml:205(title)
+#: useradd.8.xml:706(title) suauth.5.xml:193(title) su.1.xml:366(title)
+#: sg.1.xml:110(title) shadow.5.xml:255(title) shadow.3.xml:226(title)
+#: pwconv.8.xml:250(title) pwck.8.xml:279(title) porttime.5.xml:130(title)
+#: passwd.5.xml:160(title) passwd.1.xml:413(title) newusers.8.xml:411(title)
+#: newgrp.1.xml:121(title) logoutd.8.xml:89(title)
+#: login.access.5.xml:121(title) login.1.xml:338(title) limits.5.xml:196(title)
+#: lastlog.8.xml:217(title) gshadow.5.xml:156(title) grpck.8.xml:221(title)
+#: groups.1.xml:100(title) groupmod.8.xml:222(title) groupmems.8.xml:211(title)
+#: groupdel.8.xml:157(title) groupadd.8.xml:250(title) gpasswd.1.xml:279(title)
+#: faillog.8.xml:243(title) faillog.5.xml:96(title) expiry.1.xml:121(title)
+#: chsh.1.xml:167(title) chpasswd.8.xml:255(title) chgpasswd.8.xml:213(title)
+#: chfn.1.xml:207(title) chage.1.xml:262(title)
+msgid "FILES"
+msgstr "ФАЙЛЫ"
+
+# type: Content of: <refentry><refsect1><para><filename>
+#: vipw.8.xml:198(filename) usermod.8.xml:545(filename)
+#: userdel.8.xml:208(filename) useradd.8.xml:721(filename)
+#: sg.1.xml:125(filename) pwck.8.xml:282(filename) newusers.8.xml:426(filename)
+#: newgrp.1.xml:136(filename) gshadow.5.xml:159(filename)
+#: grpck.8.xml:224(filename) groups.1.xml:103(filename)
+#: groupmod.8.xml:225(filename) groupmems.8.xml:214(filename)
+#: groupdel.8.xml:160(filename) groupadd.8.xml:253(filename)
+#: gpasswd.1.xml:72(filename) gpasswd.1.xml:75(filename)
+#: gpasswd.1.xml:282(filename) chgpasswd.8.xml:216(filename)
+msgid "/etc/group"
+msgstr "/etc/group"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: vipw.8.xml:200(para) usermod.8.xml:547(para) userdel.8.xml:210(para)
+#: useradd.8.xml:723(para) sg.1.xml:127(para) pwck.8.xml:284(para)
+#: newusers.8.xml:428(para) newgrp.1.xml:138(para) gshadow.5.xml:161(para)
+#: grpck.8.xml:226(para) groups.1.xml:105(para) groupmod.8.xml:227(para)
+#: groupmems.8.xml:216(para) groupdel.8.xml:162(para) groupadd.8.xml:255(para)
+#: gpasswd.1.xml:284(para) chgpasswd.8.xml:218(para)
+msgid "Group account information."
+msgstr "содержит информацию о группах"
+
+# type: Content of: <refentry><refsect1><para><filename>
+#: vipw.8.xml:204(filename) usermod.8.xml:551(filename)
+#: useradd.8.xml:727(filename) sg.1.xml:131(filename)
+#: newusers.8.xml:432(filename) newgrp.1.xml:142(filename)
+#: gshadow.5.xml:165(filename) grpck.8.xml:230(filename)
+#: groupmod.8.xml:231(filename) groupmems.8.xml:220(filename)
+#: groupdel.8.xml:166(filename) groupadd.8.xml:259(filename)
+#: gpasswd.1.xml:76(filename) gpasswd.1.xml:288(filename)
+#: chgpasswd.8.xml:222(filename)
+msgid "/etc/gshadow"
+msgstr "/etc/gshadow"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: vipw.8.xml:206(para) usermod.8.xml:553(para) useradd.8.xml:729(para)
+#: sg.1.xml:133(para) newusers.8.xml:434(para) newgrp.1.xml:144(para)
+#: gshadow.5.xml:167(para) grpck.8.xml:232(para) groupmod.8.xml:233(para)
+#: groupdel.8.xml:168(para) groupadd.8.xml:261(para) gpasswd.1.xml:290(para)
+#: chgpasswd.8.xml:224(para)
+msgid "Secure group account information."
+msgstr "содержит защищаемую информацию о группах"
+
+# type: Content of: <refentry><refsect1><para><filename>
+#: vipw.8.xml:210(filename) usermod.8.xml:563(filename)
+#: userdel.8.xml:220(filename) useradd.8.xml:709(filename)
+#: su.1.xml:369(filename) sg.1.xml:113(filename) shadow.5.xml:258(filename)
+#: pwck.8.xml:288(filename) passwd.5.xml:163(filename)
+#: passwd.1.xml:416(filename) newusers.8.xml:414(filename)
+#: newgrp.1.xml:124(filename) login.1.xml:353(filename)
+#: grpck.8.xml:236(filename) groupmod.8.xml:243(filename)
+#: expiry.1.xml:124(filename) chsh.1.xml:170(filename)
+#: chpasswd.8.xml:258(filename) chfn.1.xml:216(filename)
+#: chage.1.xml:266(filename)
+msgid "/etc/passwd"
+msgstr "/etc/passwd"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: vipw.8.xml:212(para) usermod.8.xml:565(para) userdel.8.xml:222(para)
+#: useradd.8.xml:711(para) su.1.xml:371(para) sg.1.xml:115(para)
+#: shadow.5.xml:260(para) pwck.8.xml:290(para) passwd.5.xml:165(para)
+#: passwd.1.xml:418(para) newusers.8.xml:416(para) newgrp.1.xml:126(para)
+#: login.1.xml:355(para) grpck.8.xml:238(para) groupmod.8.xml:245(para)
+#: expiry.1.xml:126(para) chsh.1.xml:172(para) chpasswd.8.xml:260(para)
+#: chfn.1.xml:218(para) chage.1.xml:269(para)
+msgid "User account information."
+msgstr "содержит информацию о пользователях"
+
+# type: Content of: <refentry><refsect1><para><filename>
+#: vipw.8.xml:216(filename) usermod.8.xml:569(filename)
+#: userdel.8.xml:226(filename) useradd.8.xml:715(filename)
+#: su.1.xml:375(filename) sg.1.xml:119(filename) shadow.5.xml:264(filename)
+#: shadow.3.xml:229(filename) pwck.8.xml:294(filename)
+#: passwd.5.xml:169(filename) passwd.1.xml:422(filename)
+#: newusers.8.xml:420(filename) newgrp.1.xml:130(filename)
+#: login.1.xml:359(filename) expiry.1.xml:130(filename)
+#: chpasswd.8.xml:264(filename) chage.1.xml:274(filename)
+msgid "/etc/shadow"
+msgstr "/etc/shadow"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: vipw.8.xml:218(para) usermod.8.xml:571(para) userdel.8.xml:228(para)
+#: useradd.8.xml:717(para) su.1.xml:377(para) sg.1.xml:121(para)
+#: shadow.5.xml:266(para) shadow.3.xml:231(para) pwck.8.xml:296(para)
+#: passwd.1.xml:424(para) newusers.8.xml:422(para) newgrp.1.xml:132(para)
+#: login.1.xml:361(para) expiry.1.xml:132(para) chpasswd.8.xml:266(para)
+#: chage.1.xml:277(para)
+msgid "Secure user account information."
+msgstr "содержит защищаемую информацию о пользователях"
+
+# type: Content of: <refentry><refsect1><title>
+#: vipw.8.xml:225(title) usermod.8.xml:590(title) userdel.8.xml:325(title)
+#: useradd.8.xml:835(title) suauth.5.xml:222(title) su.1.xml:437(title)
+#: sg.1.xml:140(title) shadow.5.xml:283(title) shadow.3.xml:238(title)
+#: pwconv.8.xml:262(title) pwck.8.xml:354(title) porttime.5.xml:142(title)
+#: passwd.5.xml:188(title) passwd.1.xml:494(title) nologin.8.xml:81(title)
+#: newusers.8.xml:465(title) newgrp.1.xml:151(title)
+#: login.defs.5.xml:547(title) login.access.5.xml:133(title)
+#: login.1.xml:398(title) limits.5.xml:206(title) gshadow.5.xml:174(title)
+#: grpck.8.xml:290(title) groups.1.xml:112(title) groupmod.8.xml:321(title)
+#: groupmems.8.xml:229(title) groupdel.8.xml:214(title)
+#: groupadd.8.xml:341(title) gpasswd.1.xml:297(title) faillog.8.xml:255(title)
+#: faillog.5.xml:108(title) expiry.1.xml:139(title) chsh.1.xml:191(title)
+#: chpasswd.8.xml:285(title) chgpasswd.8.xml:237(title) chfn.1.xml:225(title)
+#: chage.1.xml:317(title)
+msgid "SEE ALSO"
+msgstr "СМОТРИТЕ ТАКЖЕ"
+
+#: vipw.8.xml:226(para)
+msgid ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry condition=\"tcb"
+"\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+"condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry condition=\"tcb"
+"\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+"condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: usermod.8.xml:46(firstname) userdel.8.xml:45(firstname)
+#: useradd.8.xml:58(firstname) su.1.xml:56(firstname) sg.1.xml:40(firstname)
+#: shadow.5.xml:39(firstname) shadow.3.xml:39(firstname)
+#: pwck.8.xml:45(firstname) porttime.5.xml:39(firstname)
+#: passwd.5.xml:39(firstname) passwd.1.xml:46(firstname)
+#: newusers.8.xml:55(firstname) newgrp.1.xml:40(firstname)
+#: logoutd.8.xml:39(firstname) login.defs.5.xml:106(firstname)
+#: login.1.xml:72(firstname) lastlog.8.xml:41(firstname)
+#: grpck.8.xml:40(firstname) groups.1.xml:39(firstname)
+#: groupmod.8.xml:40(firstname) groupdel.8.xml:40(firstname)
+#: groupadd.8.xml:42(firstname) faillog.8.xml:39(firstname)
+#: faillog.5.xml:39(firstname) expiry.1.xml:43(firstname)
+#: chsh.1.xml:42(firstname) chpasswd.8.xml:43(firstname)
+#: chfn.1.xml:42(firstname) chage.1.xml:40(firstname)
+msgid "Julianne Frances"
+msgstr ""
+
+#: usermod.8.xml:47(surname) userdel.8.xml:46(surname)
+#: useradd.8.xml:59(surname) su.1.xml:57(surname) sg.1.xml:41(surname)
+#: shadow.5.xml:40(surname) shadow.3.xml:40(surname) pwck.8.xml:46(surname)
+#: porttime.5.xml:40(surname) passwd.5.xml:40(surname) passwd.1.xml:47(surname)
+#: newusers.8.xml:56(surname) newgrp.1.xml:41(surname)
+#: logoutd.8.xml:40(surname) login.defs.5.xml:107(surname)
+#: login.1.xml:73(surname) lastlog.8.xml:42(surname) grpck.8.xml:41(surname)
+#: groups.1.xml:40(surname) groupmod.8.xml:41(surname)
+#: groupdel.8.xml:41(surname) groupadd.8.xml:43(surname)
+#: faillog.8.xml:40(surname) faillog.5.xml:40(surname) expiry.1.xml:44(surname)
+#: chsh.1.xml:43(surname) chpasswd.8.xml:44(surname) chfn.1.xml:43(surname)
+#: chage.1.xml:41(surname)
+msgid "Haugh"
+msgstr ""
+
+#: usermod.8.xml:48(contrib) userdel.8.xml:47(contrib)
+#: useradd.8.xml:60(contrib) sg.1.xml:42(contrib) newusers.8.xml:57(contrib)
+#: newgrp.1.xml:42(contrib) logoutd.8.xml:41(contrib)
+#: login.defs.5.xml:108(contrib) groups.1.xml:41(contrib)
+#: groupmod.8.xml:42(contrib) groupdel.8.xml:42(contrib)
+#: groupadd.8.xml:44(contrib) chpasswd.8.xml:45(contrib)
+msgid "Creation, 1991"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: usermod.8.xml:64(refentrytitle) usermod.8.xml:71(refname)
+#: usermod.8.xml:77(command) login.defs.5.xml:510(term)
+msgid "usermod"
+msgstr "usermod"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: usermod.8.xml:72(refpurpose)
+msgid "modify a user account"
+msgstr "изменяет учётную запись пользователя"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><emphasis>
+#: usermod.8.xml:81(replaceable) userdel.8.xml:78(replaceable)
+#: useradd.8.xml:92(replaceable) passwd.1.xml:82(replaceable)
+#: chsh.1.xml:78(replaceable) chfn.1.xml:78(replaceable)
+#: chage.1.xml:75(replaceable)
+msgid "LOGIN"
+msgstr "УЧЁТНАЯ_ЗАПИСЬ"
+
+# type: Content of: <refentry><refsect1><para>
+#: usermod.8.xml:87(para)
+msgid ""
+"The <command>usermod</command> command modifies the system account files to "
+"reflect the changes that are specified on the command line."
+msgstr ""
+"Команда <command>usermod</command> изменяет системные файлы учётных записей "
+"согласно переданным в командной строке параметрам."
+
+# type: Content of: <refentry><refsect1><para>
+#: usermod.8.xml:95(para)
+msgid "The options which apply to the <command>usermod</command> command are:"
+msgstr "Параметры команды <command>usermod</command>:"
+
+#: usermod.8.xml:101(term)
+msgid "<option>-a</option>, <option>--append</option>"
+msgstr "<option>-a</option>, <option>--append</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:105(para)
+msgid ""
+"Add the user to the supplementary group(s). Use only with the <option>-G</"
+"option> option."
+msgstr ""
+"Добавить пользователя в дополнительную группу(ы). Использовать только вместе "
+"с параметром <option>-G</option>."
+
+#: usermod.8.xml:112(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-b</option>, <option>--badnames</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: usermod.8.xml:116(para) useradd.8.xml:135(para) pwck.8.xml:190(para)
+#: newusers.8.xml:276(para)
+msgid "Allow names that do not conform to standards."
+msgstr ""
+
+#: usermod.8.xml:122(term) useradd.8.xml:162(term)
+msgid ""
+"<option>-c</option>, <option>--comment</option>&nbsp;<replaceable>COMMENT</"
+"replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--comment</option>&nbsp;"
+"<replaceable>КОММЕНТАРИЙ</replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:126(para)
+msgid ""
+"The new value of the user's password file comment field. It is normally "
+"modified using the <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> utility."
+msgstr ""
+"Новое значение поля комментария в файле пользовательских паролей. Обычно его "
+"изменяют с помощью программы <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+#: usermod.8.xml:135(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home-dir</option>&nbsp;"
+#| "<replaceable>HOME_DIR</replaceable>"
+msgid ""
+"<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home-dir</option> "
+"<replaceable>ДОМАШНИЙ_КАТАЛОГ</replaceable>"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: usermod.8.xml:139(para)
+msgid "The user's new login directory."
+msgstr "Домашний каталог нового пользователя."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:142(para)
+msgid ""
+"If the <option>-m</option> option is given, the contents of the current home "
+"directory will be moved to the new home directory, which is created if it "
+"does not already exist."
+msgstr ""
+"Если указан параметр <option>-m</option>, то содержимое текущего домашнего "
+"каталога будет перемещено в новый домашний каталог, который будет создан, "
+"если он ещё не существует."
+
+#: usermod.8.xml:151(term) useradd.8.xml:200(term) useradd.8.xml:577(term)
+msgid ""
+"<option>-e</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>EXPIRE_DATE</replaceable>"
+msgstr ""
+"<option>-e</option>, <option>--expiredate</option> "
+"<replaceable>ДАТА_УСТАРЕВАНИЯ</replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:155(para) useradd.8.xml:204(para)
+msgid ""
+"The date on which the user account will be disabled. The date is specified "
+"in the format <emphasis remap=\"I\">YYYY-MM-DD</emphasis>."
+msgstr ""
+"Дата, когда учётная запись пользователя будет заблокирована. Дата задаётся в "
+"формате <emphasis remap=\"I\">ГГГГ-ММ-ДД</emphasis>."
+
+#: usermod.8.xml:159(para)
+msgid ""
+"An empty <replaceable>EXPIRE_DATE</replaceable> argument will disable the "
+"expiration of the account."
+msgstr ""
+"Пустое значение аргумента <replaceable>ДАТА_УСТАРЕВАНИЯ</replaceable> "
+"отключает устаревание учётной записи."
+
+#: usermod.8.xml:163(para) usermod.8.xml:184(para)
+msgid ""
+"This option requires a <filename>/etc/shadow</filename> file. A <filename>/"
+"etc/shadow</filename> entry will be created if there were none."
+msgstr ""
+"Для этого параметра требуется файл <filename>/etc/shadow</filename>. При "
+"отсутствии в <filename>/etc/shadow</filename> создаётся необходимая запись."
+
+#: usermod.8.xml:171(term) useradd.8.xml:217(term) useradd.8.xml:589(term)
+msgid ""
+"<option>-f</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-f</option>, <option>--inactive</option>&nbsp;<replaceable>ДНЕЙ</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:175(para)
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled."
+msgstr ""
+"Количество дней, которые должны пройти после устаревания пароля, чтобы "
+"учётная запись заблокировалась навсегда."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:179(para)
+msgid ""
+"A value of 0 disables the account as soon as the password has expired, and a "
+"value of -1 disables the feature."
+msgstr ""
+"Если указано значение 0, то учётная запись блокируется сразу после "
+"устаревания пароля, а при значении -1 данная возможность не используется."
+
+#: usermod.8.xml:192(term) useradd.8.xml:236(term) useradd.8.xml:604(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GROUP</"
+"replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>ГРУППА</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:196(para)
+msgid ""
+"The group name or number of the user's new initial login group. The group "
+"must exist."
+msgstr ""
+"Имя или числовой идентификатор новой первичной группы пользователя. Группа с "
+"таким именем должна существовать."
+
+#: usermod.8.xml:200(para)
+msgid ""
+"Any file from the user's home directory owned by the previous primary group "
+"of the user will be owned by this new group."
+msgstr ""
+"Все файлы в домашнем каталоге пользователя, принадлежавшие предыдущей "
+"первичной группе пользователя, будут принадлежать новой группе."
+
+#: usermod.8.xml:204(para)
+msgid ""
+"The group ownership of files outside of the user's home directory must be "
+"fixed manually."
+msgstr ""
+"Группового владельца файлов вне домашнего каталога нужно изменить вручную."
+
+#: usermod.8.xml:211(term) useradd.8.xml:263(term)
+msgid ""
+"<option>-G</option>, <option>--groups</option>&nbsp;<replaceable>GROUP1</"
+"replaceable>[<emphasis remap=\"I\">,GROUP2,...</emphasis>[<emphasis remap=\"I"
+"\">,GROUPN</emphasis>]]]"
+msgstr ""
+"<option>-G</option>, <option>--groups</option>&nbsp;<replaceable>ГРУППА1</"
+"replaceable>[<emphasis remap=\"I\">,ГРУППА2,…</emphasis>[<emphasis remap=\"I"
+"\">,ГРУППАN</emphasis>]]]"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:215(para)
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option."
+msgstr ""
+"Список дополнительных групп, в которых числится пользователь. Перечисление "
+"групп осуществляется через запятую, без промежуточных пробелов. На указанные "
+"группы действуют те же ограничения, что и для группы указанной в параметре "
+"<option>-g</option>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:222(para)
+msgid ""
+"If the user is currently a member of a group which is not listed, the user "
+"will be removed from the group. This behaviour can be changed via the "
+"<option>-a</option> option, which appends the user to the current "
+"supplementary group list."
+msgstr ""
+"Если пользователь — член группы, которой в указанном списке нет, то "
+"пользователь удаляется из этой группы. Такое поведение можно изменить с "
+"помощью параметра <option>-a</option>, при указании которого к уже "
+"имеющемуся списку групп пользователя добавляется список указанных "
+"дополнительных групп."
+
+#: usermod.8.xml:231(term)
+msgid ""
+"<option>-l</option>, <option>--login</option>&nbsp;<replaceable>NEW_LOGIN</"
+"replaceable>"
+msgstr ""
+"<option>-l</option>, <option>--login</option>&nbsp;<replaceable>НОВОЕ_ИМЯ</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:235(para)
+msgid ""
+"The name of the user will be changed from <replaceable>LOGIN</replaceable> "
+"to <replaceable>NEW_LOGIN</replaceable>. Nothing else is changed. In "
+"particular, the user's home directory or mail spool should probably be "
+"renamed manually to reflect the new login name."
+msgstr ""
+"Имя пользователя будет изменено с <replaceable>ИМЯ</replaceable> на "
+"<replaceable>НОВОЕ_ИМЯ</replaceable>. Больше ничего не меняется. В "
+"частности, вероятно, должно быть изменено имя домашнего каталога и почтового "
+"ящика, чтобы отразить изменение имени пользователя."
+
+#: usermod.8.xml:245(term)
+msgid "<option>-L</option>, <option>--lock</option>"
+msgstr "<option>-L</option>, <option>--lock</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:249(para)
+msgid ""
+"Lock a user's password. This puts a '!' in front of the encrypted password, "
+"effectively disabling the password. You can't use this option with <option>-"
+"p</option> or <option>-U</option>."
+msgstr ""
+"Заблокировать пароль пользователя. Это делается помещением символа «!» в "
+"начало шифрованного пароля, чтобы приводит к блокировке пароля. Не "
+"используйте этот параметр вместе с <option>-p</option> или <option>-U</"
+"option>."
+
+#: usermod.8.xml:255(para)
+msgid ""
+"Note: if you wish to lock the account (not only access with a password), you "
+"should also set the <replaceable>EXPIRE_DATE</replaceable> to "
+"<replaceable>1</replaceable>."
+msgstr ""
+"Замечание: если вы хотите заблокировать учётную запись (не только доступ по "
+"паролю), также установите значение <replaceable>EXPIRE_DATE</replaceable> в "
+"<replaceable>1</replaceable>."
+
+#: usermod.8.xml:264(term)
+msgid "<option>-m</option>, <option>--move-home</option>"
+msgstr "<option>-m</option>, <option>--move-home</option>"
+
+#: usermod.8.xml:268(para)
+msgid "Move the content of the user's home directory to the new location."
+msgstr "Переместить содержимое домашнего каталога в новое место."
+
+#: usermod.8.xml:272(para)
+msgid ""
+"This option is only valid in combination with the <option>-d</option> (or "
+"<option>--home</option>) option."
+msgstr ""
+"Этот параметр можно использовать только с параметром <option>-d</option> "
+"(или <option>--home</option>)."
+
+#: usermod.8.xml:276(para)
+msgid ""
+"<command>usermod</command> will try to adapt the ownership of the files and "
+"to copy the modes, ACL and extended attributes, but manual changes might be "
+"needed afterwards."
+msgstr ""
+"Команда <command>usermod</command> пытается изменить владельцев файлов и "
+"копирует права, ACL и расширенные атрибуты, но после неё всё равно могут "
+"потребоваться некоторые ручные действия."
+
+#: usermod.8.xml:284(term) useradd.8.xml:397(term) groupmod.8.xml:146(term)
+#: groupadd.8.xml:157(term)
+msgid "<option>-o</option>, <option>--non-unique</option>"
+msgstr "<option>-o</option>, <option>--non-unique</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:288(para)
+msgid ""
+"When used with the <option>-u</option> option, this option allows to change "
+"the user ID to a non-unique value."
+msgstr ""
+"При использовании с параметром <option>-u</option>, этот параметр позволяет "
+"указывать не уникальный числовой идентификатор пользователя."
+
+#: usermod.8.xml:295(term) useradd.8.xml:409(term) groupmod.8.xml:157(term)
+#: groupadd.8.xml:167(term)
+msgid ""
+"<option>-p</option>, <option>--password</option>&nbsp;<replaceable>PASSWORD</"
+"replaceable>"
+msgstr ""
+"<option>-p</option>, <option>--password</option>&nbsp;<replaceable>ПАРОЛЬ</"
+"replaceable>"
+
+#: usermod.8.xml:299(para) groupmod.8.xml:161(para)
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>."
+msgstr ""
+"Шифрованное значение пароля, которое возвращает функция "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>."
+
+#: usermod.8.xml:304(para) useradd.8.xml:418(para) groupmod.8.xml:166(para)
+#: groupadd.8.xml:176(para)
+msgid ""
+"<emphasis role=\"bold\">Note:</emphasis> This option is not recommended "
+"because the password (or encrypted password) will be visible by users "
+"listing the processes."
+msgstr ""
+"<emphasis role=\"bold\">Замечание:</emphasis> Этот параметр использовать не "
+"рекомендуется, так как пароль (или не шифрованный пароль) будет видим "
+"другими пользователям в списке процессов."
+
+#: usermod.8.xml:309(para)
+msgid ""
+"The password will be written in the local <filename>/etc/passwd</filename> "
+"or <filename>/etc/shadow</filename> file. This might differ from the "
+"password database configured in your PAM configuration."
+msgstr ""
+"Пароль будет записан в локальный файл <filename>/etc/passwd</filename> или "
+"<filename>/etc/shadow</filename>. Это может вызвать расхождения с базой "
+"данных паролей, настроенной в PAM."
+
+#: usermod.8.xml:315(para) useradd.8.xml:423(para) groupmod.8.xml:171(para)
+#: groupadd.8.xml:181(para)
+msgid ""
+"You should make sure the password respects the system's password policy."
+msgstr ""
+"Вы должны проверить, что пароль соответствует политике системных паролей."
+
+#: usermod.8.xml:334(term) userdel.8.xml:158(term) useradd.8.xml:469(term)
+#: groupmod.8.xml:190(term) groupdel.8.xml:113(term) groupadd.8.xml:216(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home-dir</option>&nbsp;"
+#| "<replaceable>HOME_DIR</replaceable>"
+msgid ""
+"<option>-P</option>, <option>--prefix</option>&nbsp;<replaceable>PREFIX_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home-dir</option> "
+"<replaceable>ДОМАШНИЙ_КАТАЛОГ</replaceable>"
+
+#: usermod.8.xml:338(para) userdel.8.xml:162(para) useradd.8.xml:473(para)
+#: groupmod.8.xml:194(para) groupdel.8.xml:117(para) groupadd.8.xml:220(para)
+msgid ""
+"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."
+msgstr ""
+
+#: usermod.8.xml:351(term) useradd.8.xml:486(term) useradd.8.xml:624(term)
+#: su.1.xml:186(term) chsh.1.xml:119(term)
+msgid ""
+"<option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SHELL</"
+"replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--shell</option>&nbsp;<replaceable>ОБОЛОЧКА</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:355(para) chsh.1.xml:123(para)
+msgid ""
+"The name of the user's new login shell. Setting this field to blank causes "
+"the system to select the default login shell."
+msgstr ""
+"Имя новой регистрационной оболочки пользователя. Если задать пустое "
+"значение, то будет использована регистрационная оболочка по умолчанию."
+
+#: usermod.8.xml:362(term) useradd.8.xml:500(term)
+msgid ""
+"<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+"replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+"replaceable>"
+
+#: usermod.8.xml:366(para)
+msgid "The new numerical value of the user's ID."
+msgstr "Новый числовой идентификатор пользователя (UID)."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:369(para)
+msgid ""
+"This value must be unique, unless the <option>-o</option> option is used. "
+"The value must be non-negative."
+msgstr ""
+"Оно должно быть уникальным, если не используется параметр <option>-o</"
+"option>. Значение должно быть неотрицательным."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:374(para)
+msgid ""
+"The user's mailbox, and any files which the user owns and which are located "
+"in the user's home directory will have the file user ID changed "
+"automatically."
+msgstr ""
+"Для почтового ящика и всех файлов, которыми владеет пользователь и которые "
+"расположены в его домашнем каталоге, идентификатор владельца файла будет "
+"изменён автоматически."
+
+#: usermod.8.xml:379(para)
+msgid ""
+"The ownership of files outside of the user's home directory must be fixed "
+"manually."
+msgstr ""
+"Для файлов, расположенных вне домашнего каталога, идентификатор нужно "
+"изменять вручную."
+
+#: usermod.8.xml:383(para)
+msgid ""
+"No checks will be performed with regard to the <option>UID_MIN</option>, "
+"<option>UID_MAX</option>, <option>SYS_UID_MIN</option>, or "
+"<option>SYS_UID_MAX</option> from <filename>/etc/login.defs</filename>."
+msgstr ""
+"Никаких проверок по <option>UID_MIN</option>, <option>UID_MAX</option>, "
+"<option>SYS_UID_MIN</option> или <option>SYS_UID_MAX</option> из <filename>/"
+"etc/login.defs</filename> не производится."
+
+#: usermod.8.xml:392(term)
+msgid "<option>-U</option>, <option>--unlock</option>"
+msgstr "<option>-U</option>, <option>--unlock</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:396(para)
+msgid ""
+"Unlock a user's password. This removes the '!' in front of the encrypted "
+"password. You can't use this option with <option>-p</option> or <option>-L</"
+"option>."
+msgstr ""
+"Разблокировать пароль пользователя. Это выполняется удалением символа «!» из "
+"начала шифрованного пароля. Не используйте этот параметр вместе с <option>-"
+"p</option> или <option>-L</option>."
+
+#: usermod.8.xml:401(para)
+msgid ""
+"Note: if you wish to unlock the account (not only access with a password), "
+"you should also set the <replaceable>EXPIRE_DATE</replaceable> (for example "
+"to <replaceable>99999</replaceable>, or to the <option>EXPIRE</option> value "
+"from <filename>/etc/default/useradd</filename>)."
+msgstr ""
+"Замечание: если вы хотите разблокировать учётную запись (не только доступ по "
+"паролю), также установите значение <replaceable>EXPIRE_DATE</replaceable> "
+"(например, в to <replaceable>99999</replaceable> или равным значению "
+"<option>EXPIRE</option> из файла <filename>/etc/default/useradd</filename>)."
+
+#: usermod.8.xml:412(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+#| "replaceable>|<replaceable>RANGE</replaceable>"
+msgid ""
+"<option>-v</option>, <option>--add-subuids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>УЧЁТНАЯ "
+"ЗАПИСЬ</replaceable>|<replaceable>ДИАПАЗОН</replaceable>"
+
+#: usermod.8.xml:416(para)
+msgid "Add a range of subordinate uids to the user's account."
+msgstr ""
+
+#: usermod.8.xml:419(para) usermod.8.xml:457(para)
+msgid ""
+"This option may be specified multiple times to add multiple ranges to a "
+"users account."
+msgstr ""
+
+#: usermod.8.xml:422(para) usermod.8.xml:442(para)
+#, fuzzy
+#| msgid ""
+#| "No checks will be performed with regard to the <option>UID_MIN</option>, "
+#| "<option>UID_MAX</option>, <option>SYS_UID_MIN</option>, or "
+#| "<option>SYS_UID_MAX</option> from <filename>/etc/login.defs</filename>."
+msgid ""
+"No checks will be performed with regard to <option>SUB_UID_MIN</option>, "
+"<option>SUB_UID_MAX</option>, or <option>SUB_UID_COUNT</option> from /etc/"
+"login.defs."
+msgstr ""
+"Никаких проверок по <option>UID_MIN</option>, <option>UID_MAX</option>, "
+"<option>SYS_UID_MIN</option> или <option>SYS_UID_MAX</option> из <filename>/"
+"etc/login.defs</filename> не производится."
+
+#: usermod.8.xml:430(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+#| "replaceable>|<replaceable>RANGE</replaceable>"
+msgid ""
+"<option>-V</option>, <option>--del-subuids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>УЧЁТНАЯ "
+"ЗАПИСЬ</replaceable>|<replaceable>ДИАПАЗОН</replaceable>"
+
+#: usermod.8.xml:434(para)
+msgid "Remove a range of subordinate uids from the user's account."
+msgstr ""
+
+#: usermod.8.xml:437(para)
+msgid ""
+"This option may be specified multiple times to remove multiple ranges to a "
+"users account. When both <option>--del-subuids</option> and <option>--add-"
+"subuids</option> are specified, the removal of all subordinate uid ranges "
+"happens before any subordinate uid range is added."
+msgstr ""
+
+#: usermod.8.xml:450(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+#| "replaceable>|<replaceable>RANGE</replaceable>"
+msgid ""
+"<option>-w</option>, <option>--add-subgids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>УЧЁТНАЯ "
+"ЗАПИСЬ</replaceable>|<replaceable>ДИАПАЗОН</replaceable>"
+
+#: usermod.8.xml:454(para)
+msgid "Add a range of subordinate gids to the user's account."
+msgstr ""
+
+#: usermod.8.xml:460(para) usermod.8.xml:480(para)
+#, fuzzy
+#| msgid ""
+#| "No checks will be performed with regard to the <option>GID_MIN</option>, "
+#| "<option>GID_MAX</option>, <option>SYS_GID_MIN</option>, or "
+#| "<option>SYS_GID_MAX</option> from <filename>/etc/login.defs</filename>."
+msgid ""
+"No checks will be performed with regard to <option>SUB_GID_MIN</option>, "
+"<option>SUB_GID_MAX</option>, or <option>SUB_GID_COUNT</option> from /etc/"
+"login.defs."
+msgstr ""
+"Никаких проверок по <option>GID_MIN</option>, <option>GID_MAX</option>, "
+"<option>SYS_GID_MIN</option> или <option>SYS_GID_MAX</option> из <filename>/"
+"etc/login.defs</filename> не производится."
+
+#: usermod.8.xml:468(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+#| "replaceable>|<replaceable>RANGE</replaceable>"
+msgid ""
+"<option>-W</option>, <option>--del-subgids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>УЧЁТНАЯ "
+"ЗАПИСЬ</replaceable>|<replaceable>ДИАПАЗОН</replaceable>"
+
+#: usermod.8.xml:472(para)
+#, fuzzy
+#| msgid "Remove any SELinux user mapping for the user's login."
+msgid "Remove a range of subordinate gids from the user's account."
+msgstr ""
+"Удаляет все пользовательские сопоставления SELinux для учётной записи "
+"пользователя."
+
+#: usermod.8.xml:475(para)
+msgid ""
+"This option may be specified multiple times to remove multiple ranges to a "
+"users account. When both <option>--del-subgids</option> and <option>--add-"
+"subgids</option> are specified, the removal of all subordinate gid ranges "
+"happens before any subordinate gid range is added."
+msgstr ""
+
+#: usermod.8.xml:488(term) useradd.8.xml:535(term)
+msgid ""
+"<option>-Z</option>, <option>--selinux-user</option>&nbsp;"
+"<replaceable>SEUSER</replaceable>"
+msgstr ""
+"<option>-Z</option>, <option>--selinux-user</option>&nbsp;"
+"<replaceable>SEUSER</replaceable>"
+
+#: usermod.8.xml:492(para)
+msgid "The new SELinux user for the user's login."
+msgstr "Новый пользователь SELinux для пользовательского входа."
+
+#: usermod.8.xml:495(para)
+msgid ""
+"A blank <replaceable>SEUSER</replaceable> will remove the SELinux user "
+"mapping for user <replaceable>LOGIN</replaceable> (if any)."
+msgstr ""
+"При пустом значении <replaceable>SEUSER</replaceable> пользовательское "
+"сопоставление SELinux для пользователя <replaceable>LOGIN</replaceable> "
+"удаляется (если есть)."
+
+# type: Content of: <refentry><refsect1><title>
+#: usermod.8.xml:506(title) userdel.8.xml:298(title) useradd.8.xml:652(title)
+#: su.1.xml:330(title) shadow.3.xml:218(title) passwd.1.xml:377(title)
+#: newusers.8.xml:363(title) login.1.xml:260(title) lastlog.8.xml:229(title)
+#: groupdel.8.xml:133(title) groupadd.8.xml:274(title) gpasswd.1.xml:252(title)
+#: faillog.8.xml:232(title) chpasswd.8.xml:231(title)
+#: chgpasswd.8.xml:186(title)
+msgid "CAVEATS"
+msgstr "ПРЕДОСТЕРЕЖЕНИЯ"
+
+#: usermod.8.xml:507(para)
+#, fuzzy
+#| msgid ""
+#| "You must make certain that the named user is not executing any processes "
+#| "when this command is being executed if the user's numerical user ID, the "
+#| "user's name, or the user's home directory is being changed. "
+#| "<command>usermod</command> checks this on Linux, but only check if the "
+#| "user is logged in according to utmp on other architectures."
+msgid ""
+"You must make certain that the named user is not executing any processes "
+"when this command is being executed if the user's numerical user ID, the "
+"user's name, or the user's home directory is being changed. "
+"<command>usermod</command> checks this on Linux. On other platforms it only "
+"uses utmp to check if the user is logged in."
+msgstr ""
+"Вы должны убедиться, что от указанного пользователя не запущено никаких "
+"процессов, если при выполнении этой команды изменяется числовой "
+"пользовательский ID, имя пользователя или домашний каталог пользователя. В "
+"Linux команда <command>usermod</command> выполняет такую проверку, но на "
+"других архитектурах проверяется только присутствие пользователя в системе "
+"согласно данным utmp."
+
+#: usermod.8.xml:514(para)
+msgid ""
+"You must change the owner of any <command>crontab</command> files or "
+"<command>at</command> jobs manually."
+msgstr ""
+"Вы должны вручную изменить владельца всех файлов <command>crontab</command> "
+"или заданий <command>at</command>."
+
+#: usermod.8.xml:518(para)
+msgid "You must make any changes involving NIS on the NIS server."
+msgstr "Вы должны сделать все изменения NIS на сервере NIS самостоятельно."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: usermod.8.xml:33(term) useradd.8.xml:33(term) login.defs.5.xml:33(term)
+#: lastlog.8.xml:33(term)
+#, fuzzy
+#| msgid "<option>SYS_UID_MAX</option> (number)"
+msgid "<option>LASTLOG_UID_MAX</option> (number)"
+msgstr "<option>SYS_UID_MAX</option> (число)"
+
+#: usermod.8.xml:35(para) useradd.8.xml:35(para) login.defs.5.xml:35(para)
+#: lastlog.8.xml:35(para)
+msgid ""
+"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."
+msgstr ""
+
+#: usermod.8.xml:41(para) useradd.8.xml:41(para) login.defs.5.xml:41(para)
+#: lastlog.8.xml:41(para)
+msgid ""
+"No <option>LASTLOG_UID_MAX</option> option present in the configuration "
+"means that there is no user ID limit for writing lastlog entries."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: usermod.8.xml:32(term) userdel.8.xml:32(term) useradd.8.xml:32(term)
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>MAIL_DIR</option> (string)"
+msgstr "<option>MAIL_DIR</option> (строка)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:34(para) userdel.8.xml:34(para) useradd.8.xml:34(para)
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"The mail spool directory. This is needed to manipulate the mailbox when its "
+"corresponding user account is modified or deleted. If not specified, a "
+"compile-time default is used."
+msgstr ""
+"Почтовый каталог. Данный параметр нужен для управления почтовым ящиком при "
+"изменении или удалении учётной записи пользователя. Если параметр не задан, "
+"то используется значение указанное при сборке."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: usermod.8.xml:41(term) userdel.8.xml:41(term) useradd.8.xml:41(term)
+#: su.1.xml:41(term) login.defs.5.xml:41(term) login.1.xml:41(term)
+msgid "<option>MAIL_FILE</option> (string)"
+msgstr "<option>MAIL_FILE</option> (строка)"
+
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"Defines the location of the users mail spool files relatively to their home "
+"directory."
+msgstr ""
+"Определяет расположение почтовых файлов пользователя относительно домашнего "
+"каталога."
+
+#. FIXME: MAIL_FILE not used in useradd
+#: usermod.8.xml:50(para) userdel.8.xml:50(para) useradd.8.xml:50(para)
+#: su.1.xml:50(para) login.defs.5.xml:50(para) login.1.xml:50(para)
+msgid ""
+"The <option>MAIL_DIR</option> and <option>MAIL_FILE</option> variables are "
+"used by <command>useradd</command>, <command>usermod</command>, and "
+"<command>userdel</command> to create, move, or delete the user's mail spool."
+msgstr ""
+"Переменные <option>MAIL_DIR</option> и <option>MAIL_FILE</option> "
+"используются командами <command>useradd</command>, <command>usermod</"
+"command> и <command>userdel</command> для создания, перемещения или удаления "
+"почты пользователя."
+
+#: usermod.8.xml:56(para) userdel.8.xml:56(para) useradd.8.xml:56(para)
+#: su.1.xml:56(para) login.defs.5.xml:56(para) login.1.xml:56(para)
+msgid ""
+"If <option>MAIL_CHECK_ENAB</option> is set to <replaceable>yes</"
+"replaceable>, they are also used to define the <envar>MAIL</envar> "
+"environment variable."
+msgstr ""
+"Если значение <option>MAIL_CHECK_ENAB</option> равно <replaceable>yes</"
+"replaceable>, то они также используются для определения переменной окружения "
+"<envar>MAIL</envar>."
+
+#: usermod.8.xml:30(term) userdel.8.xml:30(term) useradd.8.xml:30(term)
+#: pwconv.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: grpck.8.xml:30(term) groupmod.8.xml:30(term) groupmems.8.xml:30(term)
+#: groupdel.8.xml:30(term) groupadd.8.xml:30(term) gpasswd.1.xml:30(term)
+#: chgpasswd.8.xml:30(term)
+msgid "<option>MAX_MEMBERS_PER_GROUP</option> (number)"
+msgstr "<option>MAX_MEMBERS_PER_GROUP</option> (число)"
+
+#: usermod.8.xml:32(para) userdel.8.xml:32(para) useradd.8.xml:32(para)
+#: pwconv.8.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: grpck.8.xml:32(para) groupmod.8.xml:32(para) groupmems.8.xml:32(para)
+#: groupdel.8.xml:32(para) groupadd.8.xml:32(para) gpasswd.1.xml:32(para)
+#: chgpasswd.8.xml:32(para)
+msgid ""
+"Maximum members per group entry. When the maximum is reached, a new group "
+"entry (line) is started in <filename>/etc/group</filename> (with the same "
+"name, same password, and same GID)."
+msgstr ""
+"Максимальное количество членов в записи о группе. При достижения максимума "
+"заводится новая запись группы (строка) в <filename>/etc/group</filename> (с "
+"тем же именем, паролем и тем же GID)."
+
+#: usermod.8.xml:37(para) userdel.8.xml:37(para) useradd.8.xml:37(para)
+#: pwconv.8.xml:37(para) newusers.8.xml:37(para) login.defs.5.xml:37(para)
+#: grpck.8.xml:37(para) groupmod.8.xml:37(para) groupmems.8.xml:37(para)
+#: groupdel.8.xml:37(para) groupadd.8.xml:37(para) gpasswd.1.xml:37(para)
+#: chgpasswd.8.xml:37(para)
+msgid ""
+"The default value is 0, meaning that there are no limits in the number of "
+"members in a group."
+msgstr ""
+"Значение по умолчанию равно 0, означающее, что ограничения на количество "
+"членов в группе нет."
+
+#. Note: on HP, split groups have the same ID, but different
+#. names.
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: pwconv.8.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: grpck.8.xml:43(para) groupmod.8.xml:43(para) groupmems.8.xml:43(para)
+#: groupdel.8.xml:43(para) groupadd.8.xml:43(para) gpasswd.1.xml:43(para)
+#: chgpasswd.8.xml:43(para)
+msgid ""
+"This feature (split group) permits to limit the length of lines in the group "
+"file. This is useful to make sure that lines for NIS groups are not larger "
+"than 1024 characters."
+msgstr ""
+"Данная возможность (разделение группы) позволяет ограничить длину строк в "
+"файле групп. Это полезно для ограничения длины строк групп NIS в 1024 "
+"символа."
+
+#: usermod.8.xml:48(para) userdel.8.xml:48(para) useradd.8.xml:48(para)
+#: pwconv.8.xml:48(para) newusers.8.xml:48(para) login.defs.5.xml:48(para)
+#: grpck.8.xml:48(para) groupmod.8.xml:48(para) groupmems.8.xml:48(para)
+#: groupdel.8.xml:48(para) groupadd.8.xml:48(para) gpasswd.1.xml:48(para)
+#: chgpasswd.8.xml:48(para)
+msgid "If you need to enforce such limit, you can use 25."
+msgstr "Если вам нужно такое ограничение, укажите значение 25."
+
+#: usermod.8.xml:51(para) userdel.8.xml:51(para) useradd.8.xml:51(para)
+#: pwconv.8.xml:51(para) newusers.8.xml:51(para) login.defs.5.xml:51(para)
+#: grpck.8.xml:51(para) groupmod.8.xml:51(para) groupmems.8.xml:51(para)
+#: groupdel.8.xml:51(para) groupadd.8.xml:51(para) gpasswd.1.xml:51(para)
+#: chgpasswd.8.xml:51(para)
+msgid ""
+"Note: split groups may not be supported by all tools (even in the Shadow "
+"toolsuite). You should not use this variable unless you really need it."
+msgstr ""
+"Замечание: разделение групп поддерживается не всеми инструментами (даже в "
+"наборе инструментов Shadow). Вы не должны использовать эту переменную, если "
+"вам действительно это ненужно."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: usermod.8.xml:30(term) useradd.8.xml:30(term) newusers.8.xml:30(term)
+#: login.defs.5.xml:30(term)
+#, fuzzy
+#| msgid "<option>SYS_GID_MIN</option> (number)"
+msgid "<option>SUB_GID_MIN</option> (number)"
+msgstr "<option>SYS_GID_MIN</option> (число)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: usermod.8.xml:31(term) useradd.8.xml:31(term) newusers.8.xml:31(term)
+#: login.defs.5.xml:31(term)
+#, fuzzy
+#| msgid "<option>SYS_GID_MAX</option> (number)"
+msgid "<option>SUB_GID_MAX</option> (number)"
+msgstr "<option>SYS_GID_MAX</option> (число)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: usermod.8.xml:32(term) useradd.8.xml:32(term) newusers.8.xml:32(term)
+#: login.defs.5.xml:32(term)
+#, fuzzy
+#| msgid "<option>SYS_GID_MIN</option> (number)"
+msgid "<option>SUB_GID_COUNT</option> (number)"
+msgstr "<option>SYS_GID_MIN</option> (число)"
+
+#: usermod.8.xml:34(para) useradd.8.xml:34(para) newusers.8.xml:34(para)
+#: login.defs.5.xml:34(para)
+msgid ""
+"If <filename>/etc/subuid</filename> exists, the commands <command>useradd</"
+"command> and <command>newusers</command> (unless the user already have "
+"subordinate group IDs) allocate <option>SUB_GID_COUNT</option> unused group "
+"IDs from the range <option>SUB_GID_MIN</option> to <option>SUB_GID_MAX</"
+"option> for each new user."
+msgstr ""
+
+#: usermod.8.xml:42(para) useradd.8.xml:42(para) newusers.8.xml:42(para)
+#: login.defs.5.xml:42(para)
+#, fuzzy
+#| msgid ""
+#| "The default value for <option>SYS_GID_MIN</option> (resp. "
+#| "<option>SYS_GID_MAX</option>) is 101 (resp. <option>GID_MIN</option>-1)."
+msgid ""
+"The default values for <option>SUB_GID_MIN</option>, <option>SUB_GID_MAX</"
+"option>, <option>SUB_GID_COUNT</option> are respectively 100000, 600100000 "
+"and 65536."
+msgstr ""
+"Значение по умолчанию для <option>SYS_GID_MIN</option> (соотв."
+"<option>SYS_GID_MAX</option>) равно 101 (соотв. <option>GID_MIN</option>-1)."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: usermod.8.xml:30(term) useradd.8.xml:30(term) newusers.8.xml:30(term)
+#: login.defs.5.xml:30(term)
+#, fuzzy
+#| msgid "<option>SYS_UID_MIN</option> (number)"
+msgid "<option>SUB_UID_MIN</option> (number)"
+msgstr "<option>SYS_UID_MIN</option> (число)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: usermod.8.xml:31(term) useradd.8.xml:31(term) newusers.8.xml:31(term)
+#: login.defs.5.xml:31(term)
+#, fuzzy
+#| msgid "<option>SYS_UID_MAX</option> (number)"
+msgid "<option>SUB_UID_MAX</option> (number)"
+msgstr "<option>SYS_UID_MAX</option> (число)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: usermod.8.xml:32(term) useradd.8.xml:32(term) newusers.8.xml:32(term)
+#: login.defs.5.xml:32(term)
+#, fuzzy
+#| msgid "<option>SYS_UID_MIN</option> (number)"
+msgid "<option>SUB_UID_COUNT</option> (number)"
+msgstr "<option>SYS_UID_MIN</option> (число)"
+
+#: usermod.8.xml:34(para) useradd.8.xml:34(para) newusers.8.xml:34(para)
+#: login.defs.5.xml:34(para)
+msgid ""
+"If <filename>/etc/subuid</filename> exists, the commands <command>useradd</"
+"command> and <command>newusers</command> (unless the user already have "
+"subordinate user IDs) allocate <option>SUB_UID_COUNT</option> unused user "
+"IDs from the range <option>SUB_UID_MIN</option> to <option>SUB_UID_MAX</"
+"option> for each new user."
+msgstr ""
+
+#: usermod.8.xml:42(para) useradd.8.xml:42(para) newusers.8.xml:42(para)
+#: login.defs.5.xml:42(para)
+#, fuzzy
+#| msgid ""
+#| "The default value for <option>SYS_UID_MIN</option> (resp. "
+#| "<option>SYS_UID_MAX</option>) is 101 (resp. <option>UID_MIN</option>-1)."
+msgid ""
+"The default values for <option>SUB_UID_MIN</option>, <option>SUB_UID_MAX</"
+"option>, <option>SUB_UID_COUNT</option> are respectively 100000, 600100000 "
+"and 65536."
+msgstr ""
+"Значение по умолчанию для <option>SYS_UID_MIN</option> (соотв. "
+"<option>SYS_UID_MAX</option>) равно 101 (соотв. <option>UID_MIN</option>-1)."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: usermod.8.xml:30(term) userdel.8.xml:30(term) useradd.8.xml:30(term)
+#: pwck.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>TCB_SYMLINKS</option> (boolean)"
+msgstr "<option>TCB_SYMLINKS</option> (логический)"
+
+#: usermod.8.xml:37(programlisting) userdel.8.xml:37(programlisting)
+#: useradd.8.xml:37(programlisting) pwck.8.xml:37(programlisting)
+#: login.defs.5.xml:37(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"if ( UID is less than 1000) {\n"
+" use /etc/tcb/user\n"
+"} else if ( UID is less than 1000000) {\n"
+" kilos = UID / 1000\n"
+" use /etc/tcb/:kilos/user\n"
+" make symlink /etc/tcb/user to the above directory\n"
+"} else {\n"
+" megas = UID / 1000000\n"
+" kilos = ( UID / megas * 1000000 ) / 1000\n"
+" use /etc/tcb/:megas/:kilos/user\n"
+" make symlink /etc/tcb/user to the above directory\n"
+"}\n"
+" "
+msgstr ""
+"\n"
+"если ( UID меньше 1000) {\n"
+" использовать /etc/tcb/user\n"
+"} иначе если ( UID меньше 1000000) {\n"
+" kilos = UID / 1000\n"
+" использовать /etc/tcb/:kilos/user\n"
+" создать symlink /etc/tcb/user на каталог выше\n"
+"} иначе {\n"
+" megas = UID / 1000000\n"
+" kilos = ( UID / megas * 1000000 ) / 1000\n"
+" использовать /etc/tcb/:megas/:kilos/user\n"
+" создать symlink /etc/tcb/user на каталог выше\n"
+"}\n"
+" "
+
+#: usermod.8.xml:32(para) userdel.8.xml:32(para) useradd.8.xml:32(para)
+#: pwck.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the location of the user tcb directory to "
+"be created will not be automatically set to /etc/tcb/user, but will be "
+"computed depending on the UID of the user, according to the following "
+"algorithm: <placeholder-1/>"
+msgstr ""
+"Если значение равно <replaceable>yes</replaceable>, то расположение "
+"создаваемого пользовательского каталога tcb directory не будет автоматически "
+"установлено в /etc/tcb/user, а будет вычислено в зависимости от UID "
+"пользователя, согласно следующему алгоритму: <placeholder-1/>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: usermod.8.xml:557(filename) userdel.8.xml:214(filename)
+#: useradd.8.xml:757(filename) su.1.xml:381(filename)
+#: pwconv.8.xml:253(filename) passwd.1.xml:428(filename)
+#: newusers.8.xml:438(filename) login.access.5.xml:124(filename)
+#: login.1.xml:389(filename) groupmod.8.xml:237(filename)
+#: groupadd.8.xml:265(filename) chsh.1.xml:182(filename)
+#: chpasswd.8.xml:270(filename) chgpasswd.8.xml:228(filename)
+#: chfn.1.xml:210(filename)
+msgid "/etc/login.defs"
+msgstr "/etc/login.defs"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:559(para) userdel.8.xml:216(para) useradd.8.xml:759(para)
+#: su.1.xml:383(para) pwconv.8.xml:255(para) passwd.1.xml:430(para)
+#: newusers.8.xml:440(para) login.access.5.xml:126(para) login.1.xml:391(para)
+#: groupmod.8.xml:239(para) groupadd.8.xml:267(para) chsh.1.xml:184(para)
+#: chpasswd.8.xml:272(para) chgpasswd.8.xml:230(para) chfn.1.xml:212(para)
+msgid "Shadow password suite configuration."
+msgstr "содержит конфигурацию подсистемы теневых паролей"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: usermod.8.xml:575(filename) userdel.8.xml:232(filename)
+#: useradd.8.xml:745(filename) newusers.8.xml:450(filename)
+#, fuzzy
+#| msgid "/etc/suauth"
+msgid "/etc/subgid"
+msgstr "/etc/suauth"
+
+#: usermod.8.xml:577(para) userdel.8.xml:234(para) useradd.8.xml:747(para)
+#: newusers.8.xml:452(para)
+msgid "Per user subordinate group IDs."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: usermod.8.xml:581(filename) userdel.8.xml:238(filename)
+#: useradd.8.xml:751(filename) newusers.8.xml:456(filename)
+#, fuzzy
+#| msgid "/etc/suauth"
+msgid "/etc/subuid"
+msgstr "/etc/suauth"
+
+#: usermod.8.xml:583(para) userdel.8.xml:240(para) useradd.8.xml:753(para)
+#: newusers.8.xml:458(para)
+msgid "Per user subordinate user IDs."
+msgstr ""
+
+#: usermod.8.xml:591(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <phrase condition=\"subids"
+"\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><para><command>
+#: userdel.8.xml:63(refentrytitle) userdel.8.xml:70(refname)
+#: userdel.8.xml:75(command) login.defs.5.xml:500(term)
+msgid "userdel"
+msgstr "userdel"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: userdel.8.xml:71(refpurpose)
+msgid "delete a user account and related files"
+msgstr "удаляет учётную запись и файлы пользователя"
+
+#: userdel.8.xml:85(para)
+msgid ""
+"The <command>userdel</command> command modifies the system account files, "
+"deleting all entries that refer to the user name <emphasis remap=\"I"
+"\">LOGIN</emphasis>. The named user must exist."
+msgstr ""
+"Команда <command>userdel</command> изменяет системные файлы учётных записей, "
+"удаляя все записи, относящиеся к указанному <emphasis remap=\"I"
+"\">имени_пользователя</emphasis>. Заданная учётная запись должна "
+"существовать."
+
+# type: Content of: <refentry><refsect1><para>
+#: userdel.8.xml:94(para)
+msgid "The options which apply to the <command>userdel</command> command are:"
+msgstr "Параметры команды <command>userdel</command>:"
+
+#: userdel.8.xml:99(term) groupadd.8.xml:100(term) expiry.1.xml:103(term)
+msgid "<option>-f</option>, <option>--force</option>"
+msgstr "<option>-f</option>, <option>--force</option>"
+
+#: userdel.8.xml:103(para)
+msgid ""
+"This option forces the removal of the user account, even if the user is "
+"still logged in. It also forces <command>userdel</command> to remove the "
+"user's home directory and mail spool, even if another user uses the same "
+"home directory or if the mail spool is not owned by the specified user. If "
+"<option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename> and if a group exists with "
+"the same name as the deleted user, then this group will be removed, even if "
+"it is still the primary group of another user."
+msgstr ""
+"С этим параметром учётная запись будет удалена, даже если пользователь в "
+"этот момент работает в системе. Он также заставляет <command>userdel</"
+"command> удалить домашний каталог пользователя и почтовый ящик, даже если "
+"другой пользователь использует тот же домашний каталог или если почтовый "
+"ящик не принадлежит данному пользователю. Если значение "
+"<option>USERGROUPS_ENAB</option> равно <emphasis remap=\"I\">yes</emphasis> "
+"в файле <filename>/etc/login.defs</filename> и если существует группа с "
+"именем удаляемого пользователя, то это группа будет удалена, даже если она "
+"всё ещё является первичной группой другого пользователя."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: userdel.8.xml:116(para)
+msgid ""
+"<emphasis>Note:</emphasis> This option is dangerous and may leave your "
+"system in an inconsistent state."
+msgstr ""
+"<emphasis>Замечание:</emphasis> Этот параметр опасно использовать; он может "
+"привести систему в нерабочее состояние."
+
+#: userdel.8.xml:129(term)
+msgid "<option>-r</option>, <option>--remove</option>"
+msgstr "<option>-r</option>, <option>--remove</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: userdel.8.xml:133(para)
+msgid ""
+"Files in the user's home directory will be removed along with the home "
+"directory itself and the user's mail spool. Files located in other file "
+"systems will have to be searched for and deleted manually."
+msgstr ""
+"Файлы в домашнем каталоге пользователя будут удалены вместе с самим домашним "
+"каталогом и почтовым ящиком. Пользовательские файлы, расположенные в других "
+"файловых системах, нужно искать и удалять вручную."
+
+#: userdel.8.xml:139(para)
+msgid ""
+"The mail spool is defined by the <option>MAIL_DIR</option> variable in the "
+"<filename>login.defs</filename> file."
+msgstr ""
+"Имя файла почтового ящика задаётся переменной <option>MAIL_DIR</option> в "
+"файле <filename>login.defs</filename>."
+
+#: userdel.8.xml:175(term)
+msgid "<option>-Z</option>, <option>--selinux-user</option>"
+msgstr "<option>-Z</option>, <option>--selinux-user</option>"
+
+#: userdel.8.xml:179(para)
+msgid "Remove any SELinux user mapping for the user's login."
+msgstr ""
+"Удаляет все пользовательские сопоставления SELinux для учётной записи "
+"пользователя."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: userdel.8.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>USERDEL_CMD</option> (string)"
+msgstr "<option>USERDEL_CMD</option> (строка)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: userdel.8.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If defined, this command is run when removing a user. It should remove any "
+"at/cron/print jobs etc. owned by the user to be removed (passed as the first "
+"argument)."
+msgstr ""
+"Определяет программу, которая будет запущена при удалении пользователя. Она "
+"должна удалять любые задания at/cron/печати удаляемого пользователя "
+"(передаётся в качестве первого аргумента)."
+
+#: userdel.8.xml:40(para) login.defs.5.xml:40(para)
+msgid "The return code of the script is not taken into account."
+msgstr "Возвращаемый сценарием код завершения не учитывается."
+
+#: userdel.8.xml:46(programlisting) login.defs.5.xml:46(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"#! /bin/sh\n"
+"\n"
+"# Check for the required argument.\n"
+"if [ $# != 1 ]; then\n"
+"\techo \"Usage: $0 username\"\n"
+"\texit 1\n"
+"fi\n"
+"\n"
+"# Remove cron jobs.\n"
+"crontab -r -u $1\n"
+"\n"
+"# Remove at jobs.\n"
+"# Note that it will remove any jobs owned by the same UID,\n"
+"# even if it was shared by a different username.\n"
+"AT_SPOOL_DIR=/var/spool/cron/atjobs\n"
+"find $AT_SPOOL_DIR -name \"[^.]*\" -type f -user $1 -delete \\;\n"
+"\n"
+"# Remove print jobs.\n"
+"lprm $1\n"
+"\n"
+"# All done.\n"
+"exit 0\n"
+" "
+msgstr ""
+"\n"
+"#! /bin/sh\n"
+"\n"
+"# проверить все необходимые параметры\n"
+"if [ $# != 1 ]; then\n"
+"\techo \"Использование: $0 имя_пользователя\"\n"
+"\texit 1\n"
+"fi\n"
+"\n"
+"# удалить задания cron\n"
+"crontab -r -u $1\n"
+"\n"
+"# удалить задания at\n"
+"# Заметим, что это удалит все задания с указанным UID,\n"
+"# даже если он используется для другой учётной записи.\n"
+"AT_SPOOL_DIR=/var/spool/cron/atjobs\n"
+"find $AT_SPOOL_DIR -name \"[^.]*\" -type f -user $1 -delete \\;\n"
+"\n"
+"# удалить задания печати\n"
+"lprm $1\n"
+"\n"
+"# всё\n"
+"exit 0\n"
+" "
+
+#: userdel.8.xml:43(para) login.defs.5.xml:43(para)
+msgid ""
+"Here is an example script, which removes the user's cron, at and print jobs: "
+"<placeholder-1/>"
+msgstr ""
+"Вот простой сценарий, который удаляет задания печати, cron и at: "
+"<placeholder-1/>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: userdel.8.xml:32(term) useradd.8.xml:32(term) su.1.xml:32(term)
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>USERGROUPS_ENAB</option> (boolean)"
+msgstr "<option>USERGROUPS_ENAB</option> (логический)"
+
+#: userdel.8.xml:34(para) useradd.8.xml:34(para) su.1.xml:34(para)
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable setting of the umask group bits to be the same as owner bits "
+"(examples: 022 -&gt; 002, 077 -&gt; 007) for non-root users, if the uid is "
+"the same as gid, and username is the same as the primary group name."
+msgstr ""
+"Включает установку группы битов umask равной битам владельца (пример: 022 -"
+"&gt; 002, 077 -&gt; 007) для не суперпользователей, если uid равен gid и имя "
+"пользователя совпадает с именем первичной группы."
+
+#: userdel.8.xml:39(para) useradd.8.xml:39(para) su.1.xml:39(para)
+#: login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, <command>userdel</command> will "
+"remove the user's group if it contains no more members, and "
+"<command>useradd</command> will create by default a group with the name of "
+"the user."
+msgstr ""
+"Если значение равно <replaceable>yes</replaceable>, то <command>userdel</"
+"command> удаляет пользовательскую группу, если в ней нет больше членов, а "
+"<command>useradd</command> по умолчанию создаёт группу с именем пользователя."
+
+# type: Content of: <refentry><refsect1><title>
+#: userdel.8.xml:247(title) useradd.8.xml:766(title) su.1.xml:390(title)
+#: pwck.8.xml:303(title) passwd.1.xml:443(title) grpck.8.xml:245(title)
+#: groupmod.8.xml:252(title) groupdel.8.xml:175(title)
+#: groupadd.8.xml:296(title) chage.1.xml:284(title)
+msgid "EXIT VALUES"
+msgstr "ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><replaceable>
+#: userdel.8.xml:252(replaceable) useradd.8.xml:771(replaceable)
+#: su.1.xml:409(replaceable) pwck.8.xml:308(replaceable)
+#: passwd.1.xml:448(replaceable) grpck.8.xml:250(replaceable)
+#: groupmod.8.xml:257(replaceable) groupdel.8.xml:180(replaceable)
+#: groupadd.8.xml:301(replaceable) chage.1.xml:289(replaceable)
+msgid "0"
+msgstr "0"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: userdel.8.xml:254(para) useradd.8.xml:773(para) pwck.8.xml:310(para)
+#: passwd.1.xml:450(para) grpck.8.xml:252(para) groupdel.8.xml:182(para)
+#: groupadd.8.xml:303(para) chage.1.xml:291(para)
+msgid "success"
+msgstr "успешное выполнение"
+
+# type: Content of: <refentry><refmeta><manvolnum>
+#: userdel.8.xml:258(replaceable) useradd.8.xml:777(replaceable)
+#: su.1.xml:75(manvolnum) su.1.xml:415(replaceable) sg.1.xml:59(manvolnum)
+#: pwck.8.xml:314(replaceable) passwd.1.xml:65(manvolnum)
+#: passwd.1.xml:454(replaceable) newgrp.1.xml:59(manvolnum)
+#: login.1.xml:91(manvolnum) grpck.8.xml:256(replaceable)
+#: groups.1.xml:58(manvolnum) gpasswd.1.xml:63(manvolnum)
+#: expiry.1.xml:62(manvolnum) chsh.1.xml:61(manvolnum) chfn.1.xml:61(manvolnum)
+#: chage.1.xml:59(manvolnum) chage.1.xml:295(replaceable)
+msgid "1"
+msgstr "1"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: userdel.8.xml:260(para) useradd.8.xml:779(para)
+msgid "can't update password file"
+msgstr "не удалось изменить файл паролей"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><replaceable>
+#: userdel.8.xml:264(replaceable) useradd.8.xml:783(replaceable)
+#: pwck.8.xml:320(replaceable) passwd.1.xml:460(replaceable)
+#: grpck.8.xml:262(replaceable) groupmod.8.xml:263(replaceable)
+#: groupdel.8.xml:186(replaceable) groupadd.8.xml:307(replaceable)
+#: chage.1.xml:301(replaceable)
+msgid "2"
+msgstr "2"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: userdel.8.xml:266(para) useradd.8.xml:785(para) pwck.8.xml:316(para)
+#: grpck.8.xml:258(para) groupdel.8.xml:188(para) groupadd.8.xml:309(para)
+#: chage.1.xml:303(para)
+msgid "invalid command syntax"
+msgstr "ошибка в параметрах команды"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><replaceable>
+#: userdel.8.xml:270(replaceable) useradd.8.xml:801(replaceable)
+#: pwck.8.xml:344(replaceable) passwd.1.xml:484(replaceable)
+#: groupmod.8.xml:281(replaceable) groupdel.8.xml:192(replaceable)
+msgid "6"
+msgstr "6"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: userdel.8.xml:272(para)
+msgid "specified user doesn't exist"
+msgstr "указанный пользователь не существует"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: userdel.8.xml:278(para)
+msgid "user currently logged in"
+msgstr "пользователь сейчас работает в системе"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><replaceable>
+#: userdel.8.xml:282(replaceable) useradd.8.xml:813(replaceable)
+#: groupmod.8.xml:293(replaceable) groupdel.8.xml:204(replaceable)
+#: groupadd.8.xml:331(replaceable)
+msgid "10"
+msgstr "10"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: userdel.8.xml:284(para) useradd.8.xml:815(para) groupdel.8.xml:206(para)
+#: groupadd.8.xml:333(para)
+msgid "can't update group file"
+msgstr "не удалось изменить файл групп"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><replaceable>
+#: userdel.8.xml:288(replaceable) useradd.8.xml:819(replaceable)
+#: groupmod.8.xml:305(replaceable)
+msgid "12"
+msgstr "12"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: userdel.8.xml:290(para)
+msgid "can't remove home directory"
+msgstr "не удалось удалить домашний каталог"
+
+# type: Content of: <refentry><refsect1><para>
+#: userdel.8.xml:248(para)
+msgid ""
+"The <command>userdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Команда <command>userdel</command> завершая работу, возвращает следующие "
+"значения: <placeholder-1/>"
+
+#: userdel.8.xml:299(para)
+msgid ""
+"<command>userdel</command> will not allow you to remove an account if there "
+"are running processes which belong to this account. In that case, you may "
+"have to kill those processes or lock the user's password or account and "
+"remove the account later. The <option>-f</option> option can force the "
+"deletion of this account."
+msgstr ""
+"Команда <command>userdel</command> не позволит удалить учётную запись, если "
+"есть запущенные процессы, принадлежащие данной учётной записи. В этом случае "
+"вы можете удалить эти процессы или заблокировать пароль пользователя или "
+"учётную запись, а затем удалить учётную запись. Если указан параметр "
+"<option>-f</option>, то учётная запись будет удалена несмотря ни на что."
+
+# type: Content of: <refentry><refsect1><para>
+#: userdel.8.xml:306(para)
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this user."
+msgstr ""
+"Вы должны вручную проверить все файловые системы, чтобы убедиться, что не "
+"осталось файлов, принадлежащих этому пользователю."
+
+# type: Content of: <refentry><refsect1><para>
+#: userdel.8.xml:310(para)
+msgid ""
+"You may not remove any NIS attributes on a NIS client. This must be "
+"performed on the NIS server."
+msgstr ""
+"Нельзя удалить NIS атрибуты клиента NIS. Это необходимо сделать на NIS "
+"сервере."
+
+#: userdel.8.xml:313(para)
+msgid ""
+"If <option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename>, <command>userdel</"
+"command> will delete the group with the same name as the user. To avoid "
+"inconsistencies in the passwd and group databases, <command>userdel</"
+"command> will check that this group is not used as a primary group for "
+"another user, and will just warn without deleting the group otherwise. The "
+"<option>-f</option> option can force the deletion of this group."
+msgstr ""
+"Если значение переменной <option>USERGROUPS_ENAB</option> равно <emphasis "
+"remap=\"I\">yes</emphasis> в файле <filename>/etc/login.defs</filename>, то "
+"<command>userdel</command> удалит группу с именем как у пользователя. Чтобы "
+"избежать рассогласованности в базах данных групп и паролей, "
+"<command>userdel</command> проверит, что данная группа не используется в "
+"качестве первичной для другого пользователя, и выдаст предупреждение без "
+"удаления, если такое случится. Параметр <option>-f</option> поможет удалить "
+"группу в любом случае."
+
+#: userdel.8.xml:326(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"subids\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: useradd.8.xml:76(refentrytitle) useradd.8.xml:83(refname)
+#: useradd.8.xml:88(command) useradd.8.xml:95(command)
+#: useradd.8.xml:99(command) login.defs.5.xml:482(term)
+msgid "useradd"
+msgstr "useradd"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: useradd.8.xml:84(refpurpose)
+msgid "create a new user or update default new user information"
+msgstr ""
+"регистрирует нового пользователя или изменяет информацию по умолчанию о "
+"новых пользователях"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option>
+#: useradd.8.xml:96(arg) useradd.8.xml:100(arg)
+msgid "-D"
+msgstr "-D"
+
+# type: Content of: <refentry><refsect1><para>
+#: useradd.8.xml:109(para)
+msgid ""
+"When invoked without the <option>-D</option> option, the <command>useradd</"
+"command> command creates a new user account using the values specified on "
+"the command line plus the default values from the system. Depending on "
+"command line options, the <command>useradd</command> command will update "
+"system files and may also create the new user's home directory and copy "
+"initial files."
+msgstr ""
+"При запуске без параметра <option>-D</option> команда <command>useradd</"
+"command> создаёт новую учётную запись пользователя, используя значения из "
+"командной строки и системные значения по умолчанию. В зависимости от "
+"параметров командной строки, команда <command>useradd</command> обновляет "
+"системные файлы, а также может создать домашний каталог нового пользователя "
+"и скопировать начальные файлы настроек."
+
+#: useradd.8.xml:118(para)
+msgid ""
+"By default, a group will also be created for the new user (see <option>-g</"
+"option>, <option>-N</option>, <option>-U</option>, and "
+"<option>USERGROUPS_ENAB</option>)."
+msgstr ""
+"По умолчанию, для нового пользователя также создаётся группа (смотрите "
+"параметры <option>-g</option>, <option>-N</option>, <option>-U</option> и "
+"<option>USERGROUPS_ENAB</option>)."
+
+# type: Content of: <refentry><refsect1><para>
+#: useradd.8.xml:127(para)
+msgid "The options which apply to the <command>useradd</command> command are:"
+msgstr "Параметры команды <command>useradd</command>:"
+
+#: useradd.8.xml:132(option) pwck.8.xml:187(option) newusers.8.xml:273(option)
+msgid "--badname"
+msgstr ""
+
+#: useradd.8.xml:141(term) useradd.8.xml:559(term)
+msgid ""
+"<option>-b</option>, <option>--base-dir</option>&nbsp;<replaceable>BASE_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-b</option>, <option>--base-dir</option> "
+"<replaceable>БАЗОВЫЙ_КАТАЛОГ</replaceable>"
+
+#: useradd.8.xml:145(para)
+msgid ""
+"The default base directory for the system if <option>-d</option>&nbsp;"
+"<replaceable>HOME_DIR</replaceable> is not specified. <replaceable>BASE_DIR</"
+"replaceable> is concatenated with the account name to define the home "
+"directory. If the <option>-m</option> option is not used, "
+"<replaceable>BASE_DIR</replaceable> must exist."
+msgstr ""
+"Базовый системный каталог по умолчанию, если другой каталог не указан с "
+"помощью параметра <option>-d</option>. Значение "
+"<replaceable>БАЗОВЫЙ_КАТАЛОГ</replaceable> объединяется с именем учётной "
+"записи для определения домашнего каталога. Если не указан параметр <option>-"
+"m</option>, то <replaceable>БАЗОВЫЙ_КАТАЛОГ</replaceable> должен "
+"существовать."
+
+#: useradd.8.xml:152(para)
+msgid ""
+"If this option is not specified, <command>useradd</command> will use the "
+"base directory specified by the <option>HOME</option> variable in <filename>/"
+"etc/default/useradd</filename>, or <filename>/home</filename> by default."
+msgstr ""
+"Если этот параметр не задан, то команда <command>useradd</command> будет "
+"использовать базовый каталог, указанный в переменной <option>HOME</option> в "
+"файле <filename>/etc/default/useradd</filename> иначе <filename>/home</"
+"filename> (по умолчанию)."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:166(para)
+msgid ""
+"Any text string. It is generally a short description of the login, and is "
+"currently used as the field for the user's full name."
+msgstr ""
+"Любая текстовая строка. Обычно, здесь коротко описывается учётная запись, и "
+"в настоящее время используется как поле для имени и фамилии пользователя."
+
+#: useradd.8.xml:174(term)
+msgid ""
+"<option>-d</option>, <option>--home-dir</option>&nbsp;<replaceable>HOME_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home-dir</option> "
+"<replaceable>ДОМАШНИЙ_КАТАЛОГ</replaceable>"
+
+#: useradd.8.xml:178(para)
+msgid ""
+"The new user will be created using <replaceable>HOME_DIR</replaceable> as "
+"the value for the user's login directory. The default is to append the "
+"<replaceable>LOGIN</replaceable> name to <replaceable>BASE_DIR</replaceable> "
+"and use that as the login directory name. The directory "
+"<replaceable>HOME_DIR</replaceable> does not have to exist but will not be "
+"created if it is missing."
+msgstr ""
+"Для создаваемого пользователя будет использован каталог "
+"<replaceable>ДОМАШНИЙ_КАТАЛОГ</replaceable> в качестве начального каталога. "
+"По умолчанию, это значение получается объединением <replaceable>ИМЕНИ</"
+"replaceable> пользователя с <replaceable>БАЗОВЫМ_КАТАЛОГОМ</replaceable> и "
+"используется как имя домашнего каталога. Каталог "
+"<replaceable>ДОМАШНИЙ_КАТАЛОГ</replaceable> необязательно должен "
+"существовать, но не будет создан, если его нет."
+
+#: useradd.8.xml:190(term)
+msgid "<option>-D</option>, <option>--defaults</option>"
+msgstr "<option>-D</option>, <option>--defaults</option>"
+
+# type: Content of: <refentry><refsect1><refsect2><title>
+#: useradd.8.xml:194(para)
+msgid "See below, the subsection \"Changing the default values\"."
+msgstr "Смотрите далее в подразделе «Изменение значений по умолчанию»."
+
+#: useradd.8.xml:208(para)
+msgid ""
+"If not specified, <command>useradd</command> will use the default expiry "
+"date specified by the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or an empty string (no expiry) by default."
+msgstr ""
+"Если этот параметр не задан, то команда <command>useradd</command> будет "
+"использовать дату устаревания по умолчанию, указанную в переменной "
+"<option>EXPIRE</option> в файле <filename>/etc/default/useradd</filename>, "
+"иначе пустую строку (без устаревания, по умолчанию)."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:221(para)
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled. A value of 0 disables the account as soon as the password has "
+"expired, and a value of -1 disables the feature."
+msgstr ""
+"Если указано значение 0, то учётная запись блокируется сразу после "
+"устаревания пароля, а при значении -1 данная возможность не используется."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:227(para)
+msgid ""
+"If not specified, <command>useradd</command> will use the default inactivity "
+"period specified by the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or -1 by default."
+msgstr ""
+"Если этот параметр не задан, то команда <command>useradd</command> будет "
+"использовать срок неактивности по умолчанию, указанный в переменной "
+"<option>INACTIVE</option> в файле <filename>/etc/default/useradd</filename> "
+"или -1 (по умолчанию)."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:240(para)
+msgid ""
+"The group name or number of the user's initial login group. The group name "
+"must exist. A group number must refer to an already existing group."
+msgstr ""
+"Имя или числовой идентификатор первичной группы пользователя. Группа с таким "
+"именем должна существовать. Идентификатор группы должен указывать на уже "
+"существующую группу."
+
+#: useradd.8.xml:245(para)
+msgid ""
+"If not specified, the behavior of <command>useradd</command> will depend on "
+"the <option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>. If this variable is set to <replaceable>yes</replaceable> (or "
+"<option>-U/--user-group</option> is specified on the command line), a group "
+"will be created for the user, with the same name as her loginname. If the "
+"variable is set to <replaceable>no</replaceable> (or <option>-N/--no-user-"
+"group</option> is specified on the command line), useradd will set the "
+"primary group of the new user to the value specified by the <option>GROUP</"
+"option> variable in <filename>/etc/default/useradd</filename>, or 100 by "
+"default."
+msgstr ""
+"Если не указан, то поведение <command>useradd</command> зависит от "
+"переменной <option>USERGROUPS_ENAB</option> в файле <filename>/etc/login."
+"defs</filename>. Если значение этой переменной равно <replaceable>yes</"
+"replaceable> (или в командной строке указан параметр <option>-U/--user-"
+"group</option>), то для пользователя будет создана группа с тем же именем "
+"как его имя для входа. Если значение переменной равно <replaceable>no</"
+"replaceable> (или в командной строке указан параметр <option>-N/--no-user-"
+"group</option>), то useradd установит первичную группу нового пользователя "
+"равной значению переменной <option>GROUP</option> из файла <filename>/etc/"
+"default/useradd</filename>, или 100 (по умолчанию)."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:267(para)
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option. The default is for the user to belong only to "
+"the initial group."
+msgstr ""
+"Список дополнительных групп, в которых числится пользователь. Перечисление "
+"групп осуществляется через запятую, без промежуточных пробелов. На указанные "
+"группы действуют те же ограничения, что и для группы указанной в параметре "
+"<option>-g</option>. По умолчанию пользователь входит только в начальную "
+"группу."
+
+#: useradd.8.xml:284(term)
+msgid ""
+"<option>-k</option>, <option>--skel</option>&nbsp;<replaceable>SKEL_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-k</option>, <option>--skel</option>&nbsp;"
+"<replaceable>КАТАЛОГ_ШАБЛОНОВ</replaceable>"
+
+#: useradd.8.xml:288(para)
+msgid ""
+"The skeleton directory, which contains files and directories to be copied in "
+"the user's home directory, when the home directory is created by "
+"<command>useradd</command>."
+msgstr ""
+"Каталог с шаблонами, который содержит файлы и каталоги для копирования в "
+"домашний каталог пользователя при создании домашнего каталога командой "
+"<command>useradd</command>."
+
+#: useradd.8.xml:293(para)
+msgid ""
+"This option is only valid if the <option>-m</option> (or <option>--create-"
+"home</option>) option is specified."
+msgstr ""
+"Этот параметр можно использовать только с параметром <option>-m</option> "
+"(или <option>--create-home</option>)."
+
+#: useradd.8.xml:297(para)
+msgid ""
+"If this option is not set, the skeleton directory is defined by the "
+"<option>SKEL</option> variable in <filename>/etc/default/useradd</filename> "
+"or, by default, <filename>/etc/skel</filename>."
+msgstr ""
+"Если этот параметр не задан, то каталог шаблонов определяется переменной "
+"<option>SKEL</option> из файла <filename>/etc/default/useradd</filename>, "
+"или равен <filename>/etc/skel</filename> (по умолчанию)."
+
+#: useradd.8.xml:303(para)
+msgid "If possible, the ACLs and extended attributes are copied."
+msgstr "Если возможно, выполняется копирование ACL и расширенных атрибутов."
+
+#: useradd.8.xml:309(term) groupadd.8.xml:137(term)
+msgid ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
+"replaceable>=<replaceable>VALUE</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>КЛЮЧ</"
+"replaceable>=<replaceable>ЗНАЧЕНИЕ</replaceable>"
+
+#: useradd.8.xml:313(para)
+#, fuzzy
+#| msgid ""
+#| "Overrides <filename>/etc/login.defs</filename> defaults (<option>UID_MIN</"
+#| "option>, <option>UID_MAX</option>, <option>UMASK</option>, "
+#| "<option>PASS_MAX_DAYS</option> and others). <placeholder-1/> Example: "
+#| "<option>-K</option>&nbsp;<replaceable>PASS_MAX_DAYS</"
+#| "replaceable>=<replaceable>-1</replaceable> can be used when creating "
+#| "system account to turn off password ageing, even though system account "
+#| "has no password at all. Multiple <option>-K</option> options can be "
+#| "specified, e.g.: <option>-K</option>&nbsp;<replaceable>UID_MIN</"
+#| "replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+#| "<replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (<option>UID_MIN</"
+"option>, <option>UID_MAX</option>, <option>UMASK</option>, "
+"<option>PASS_MAX_DAYS</option> and others). <placeholder-1/> Example: "
+"<option>-K</option>&nbsp;<replaceable>PASS_MAX_DAYS</"
+"replaceable>=<replaceable>-1</replaceable> can be used when creating system "
+"account to turn off password aging, even though system account has no "
+"password at all. Multiple <option>-K</option> options can be specified, e."
+"g.: <option>-K</option>&nbsp;<replaceable>UID_MIN</"
+"replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+"<replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+"Заменяет значения по умолчанию из файла <filename>/etc/login.defs</filename> "
+"(<option>UID_MIN</option>, <option>UID_MAX</option>, <option>UMASK</option>, "
+"<option>PASS_MAX_DAYS</option> и других). <placeholder-1/> Пример: <option>-"
+"K</option>&nbsp;<replaceable>PASS_MAX_DAYS</replaceable>=<replaceable>-1</"
+"replaceable> можно использовать при создании системной учётной записи, чтобы "
+"выключить устаревание пароля, даже если системная учётная запись вообще не "
+"имеет пароля. Можно указывать параметр <option>-K</option> несколько раз, "
+"например: <option>-K</option>&nbsp;<replaceable>UID_MIN</"
+"replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+"<replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>"
+
+#: useradd.8.xml:334(term)
+msgid "<option>-l</option>, <option>--no-log-init</option>"
+msgstr "<option>-l</option>, <option>--no-log-init</option>"
+
+#: useradd.8.xml:336(para)
+msgid "Do not add the user to the lastlog and faillog databases."
+msgstr "Не добавлять пользователя в базы данных lastlog и faillog."
+
+#: useradd.8.xml:339(para)
+#, fuzzy
+#| msgid ""
+#| "By default, the user's entries in the lastlog and faillog databases are "
+#| "resetted to avoid reusing the entry from a previously deleted user."
+msgid ""
+"By default, the user's entries in the lastlog and faillog databases are "
+"reset to avoid reusing the entry from a previously deleted user."
+msgstr ""
+"По умолчанию, записи пользователя в базах данных lastlog и faillog "
+"сбрасываются во избежание повторного использования записи, оставшейся от "
+"ранее удалённого пользователя."
+
+#: useradd.8.xml:347(term)
+msgid "<option>-m</option>, <option>--create-home</option>"
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:351(para)
+msgid ""
+"Create the user's home directory if it does not exist. The files and "
+"directories contained in the skeleton directory (which can be defined with "
+"the <option>-k</option> option) will be copied to the home directory."
+msgstr ""
+"Создать домашний каталог пользователя, если он не существует. Файлы и "
+"каталоги, содержащиеся в каталоге шаблонов (который можно указать с помощью "
+"параметра the <option>-k</option> option), будут скопированы в домашний "
+"каталог."
+
+#: useradd.8.xml:357(para)
+msgid ""
+"By default, if this option is not specified and <option>CREATE_HOME</option> "
+"is not enabled, no home directories are created."
+msgstr ""
+"По умолчанию, если этот параметр не указан и не задана переменная "
+"<option>CREATE_HOME</option>, домашний каталог не создаётся."
+
+#: useradd.8.xml:365(term)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid "<option>-M</option>, <option>--no-create-home</option>"
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:369(para)
+msgid ""
+"Do no create the user's home directory, even if the system wide setting from "
+"<filename>/etc/login.defs</filename> (<option>CREATE_HOME</option>) is set "
+"to <replaceable>yes</replaceable>."
+msgstr ""
+"Не создавать домашний каталог пользователя, даже если значение системной "
+"переменной в файле <filename>/etc/login.defs</filename> "
+"(<option>CREATE_HOME</option>) равно <replaceable>yes</replaceable>."
+
+#: useradd.8.xml:378(term)
+msgid "<option>-N</option>, <option>--no-user-group</option>"
+msgstr "<option>-N</option>, <option>--no-user-group</option>"
+
+#: useradd.8.xml:382(para)
+msgid ""
+"Do not create a group with the same name as the user, but add the user to "
+"the group specified by the <option>-g</option> option or by the "
+"<option>GROUP</option> variable in <filename>/etc/default/useradd</filename>."
+msgstr ""
+"Не создавать группу с тем же именем как у пользователя, но добавить "
+"пользователя в группу, заданную параметром <option>-g</option> или "
+"переменной <option>GROUP</option> из файла <filename>/etc/default/useradd</"
+"filename>."
+
+#: useradd.8.xml:388(para) useradd.8.xml:526(para)
+msgid ""
+"The default behavior (if the <option>-g</option>, <option>-N</option>, and "
+"<option>-U</option> options are not specified) is defined by the "
+"<option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+"Поведение по умолчанию (если не указан параметр <option>-g</option>, "
+"<option>-N</option> и <option>-U</option>) определяется переменной "
+"<option>USERGROUPS_ENAB</option> из файла <filename>/etc/login.defs</"
+"filename>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:401(para)
+msgid "Allow the creation of a user account with a duplicate (non-unique) UID."
+msgstr "Разрешить создание учётной записи с уже имеющимся (не уникальным) UID."
+
+#: useradd.8.xml:402(para)
+msgid ""
+"This option is only valid in combination with the <option>-u</option> option."
+msgstr ""
+"Этот параметр можно использовать только с параметром <option>-u</option>."
+
+#: useradd.8.xml:413(para) groupadd.8.xml:171(para)
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>. The default is to "
+"disable the password."
+msgstr ""
+"Шифрованное значение пароля, которое возвращает функция "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>. По умолчанию пароль отключён."
+
+#: useradd.8.xml:430(term) newusers.8.xml:302(term) groupadd.8.xml:188(term)
+msgid "<option>-r</option>, <option>--system</option>"
+msgstr "<option>-r</option>, <option>--system</option>"
+
+#: useradd.8.xml:434(para) newusers.8.xml:306(para)
+msgid "Create a system account."
+msgstr "Создать системную учётную запись."
+
+#: useradd.8.xml:437(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are chosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>/etc/login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+"Системные пользователи создаются без информации об устаревании в <filename>/"
+"etc/shadow</filename>, и их числовые идентификаторы выбираются из диапазона "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option>, определённого в "
+"<filename>/etc/login.defs</filename>, а не из <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (это же касается и части с <option>GID</option> при "
+"создании групп)."
+
+#: useradd.8.xml:446(para)
+#, fuzzy
+#| msgid ""
+#| "Note that <command>useradd</command> will not create a home directory for "
+#| "such an user, regardless of the default setting in <filename>/etc/login."
+#| "defs</filename> (<option>CREATE_HOME</option>). You have to specify the "
+#| "<option>-m</option> options if you want a home directory for a system "
+#| "account to be created."
+msgid ""
+"Note that <command>useradd</command> will not create a home directory for "
+"such a user, regardless of the default setting in <filename>/etc/login.defs</"
+"filename> (<option>CREATE_HOME</option>). You have to specify the <option>-"
+"m</option> options if you want a home directory for a system account to be "
+"created."
+msgstr ""
+"Заметим, что <command>useradd</command> не создаёт домашний каталог для "
+"данного пользователя независимо от значения по умолчанию в <filename>/etc/"
+"login.defs</filename> (<option>CREATE_HOME</option>). Если вы хотите создать "
+"домашний каталог для системной учётной записи укажите параметр <option>-m</"
+"option>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:490(para)
+msgid ""
+"The name of the user's login shell. The default is to leave this field "
+"blank, which causes the system to select the default login shell specified "
+"by the <option>SHELL</option> variable in <filename>/etc/default/useradd</"
+"filename>, or an empty string by default."
+msgstr ""
+"Имя регистрационной оболочки пользователя. По умолчанию это поле пусто, что "
+"вызывает выбор регистрационной оболочки по умолчанию согласно значению "
+"переменной <option>SHELL</option> из файла <filename>/etc/default/useradd</"
+"filename>, или по умолчанию используется пустая строка."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:504(para)
+msgid ""
+"The numerical value of the user's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than or equal to "
+"<option>UID_MIN</option> and greater than every other user."
+msgstr ""
+"Числовое значение идентификатора пользователя (ID). Оно должно быть "
+"уникальным, если не используется параметр <option>-o</option>. Значение "
+"должно быть неотрицательным. По умолчанию используется наименьшее значение "
+"ID большее или равное <option>UID_MIN</option> и большее чем у остальных "
+"пользователей."
+
+#: useradd.8.xml:511(para)
+msgid ""
+"See also the <option>-r</option> option and the <option>UID_MAX</option> "
+"description."
+msgstr ""
+"Смотрите также описание <option>-r</option> и <option>UID_MAX</option>."
+
+#: useradd.8.xml:518(term)
+msgid "<option>-U</option>, <option>--user-group</option>"
+msgstr "<option>-U</option>, <option>--user-group</option>"
+
+#: useradd.8.xml:522(para)
+msgid ""
+"Create a group with the same name as the user, and add the user to this "
+"group."
+msgstr ""
+"Создать группу с тем же именем что и у пользователя, и добавить пользователя "
+"в эту группу."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:539(para)
+msgid ""
+"The SELinux user for the user's login. The default is to leave this field "
+"blank, which causes the system to select the default SELinux user."
+msgstr ""
+"Пользователь SELinux для регистрационной оболочки пользователя. По умолчанию "
+"это поле пусто, что заставляет систему выбрать пользователя SELinux по "
+"умолчанию."
+
+# type: Content of: <refentry><refsect1><refsect2><title>
+#: useradd.8.xml:549(title)
+msgid "Changing the default values"
+msgstr "Изменение значений по умолчанию"
+
+# type: Content of: <refentry><refsect1><refsect2><para>
+#: useradd.8.xml:550(para)
+msgid ""
+"When invoked with only the <option>-D</option> option, <command>useradd</"
+"command> will display the current default values. When invoked with <option>-"
+"D</option> plus other options, <command>useradd</command> will update the "
+"default values for the specified options. Valid default-changing options are:"
+msgstr ""
+"При запуске программы только с параметром <option>-D</option> команда "
+"<command>useradd</command> показывает текущие значения по умолчанию. Если "
+"программа запускается с параметром <option>-D</option> вместе с другими "
+"параметрами, то <command>useradd</command> обновляет значения по умолчанию "
+"этих указанных параметров. Изменяемые параметры:"
+
+#: useradd.8.xml:563(para)
+msgid ""
+"The path prefix for a new user's home directory. The user's name will be "
+"affixed to the end of <replaceable>BASE_DIR</replaceable> to form the new "
+"user's home directory name, if the <option>-d</option> option is not used "
+"when creating a new account."
+msgstr ""
+"Начальная часть пути нового домашнего каталога пользователя. Имя "
+"пользователя будет добавлено в конец <replaceable>ДОМАШНЕГО_КАТАЛОГА</"
+"replaceable> для создания имени нового каталога, если при создании новой "
+"учётной записи не указан параметр <option>-d</option>."
+
+#: useradd.8.xml:570(para)
+msgid ""
+"This option sets the <option>HOME</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+"Этот параметр изменяет переменную <option>HOME</option> в файле <filename>/"
+"etc/default/useradd</filename>."
+
+# type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:581(para)
+msgid "The date on which the user account is disabled."
+msgstr "Дата, когда учётная запись пользователя заблокирована."
+
+#: useradd.8.xml:582(para)
+msgid ""
+"This option sets the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+"Этот параметр изменяет переменную <option>EXPIRE</option> в файле <filename>/"
+"etc/default/useradd</filename>."
+
+# type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:593(para)
+msgid ""
+"The number of days after a password has expired before the account will be "
+"disabled."
+msgstr ""
+"Число дней, которые должны пройти после устаревания пароля, перед тем как "
+"учётная запись будет заблокирована."
+
+#: useradd.8.xml:597(para)
+msgid ""
+"This option sets the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+"Этот параметр изменяет переменную <option>INACTIVE</option> в файле "
+"<filename>/etc/default/useradd</filename>."
+
+#: useradd.8.xml:608(para)
+msgid ""
+"The group name or ID for a new user's initial group (when the <option>-N/--"
+"no-user-group</option> is used or when the <option>USERGROUPS_ENAB</option> "
+"variable is set to <replaceable>no</replaceable> in <filename>/etc/login."
+"defs</filename>). The named group must exist, and a numerical group ID must "
+"have an existing entry."
+msgstr ""
+"Имя группы или ID новой первичной группы пользователя (если используется "
+"<option>-N/--no-user-group</option> или когда значение переменной "
+"<option>USERGROUPS_ENAB</option> равно <replaceable>no</replaceable> (файл "
+"<filename>/etc/login.defs</filename>). Группа с указанным именем должна "
+"существовать, а для числового идентификатора группы должна быть "
+"соответствующая запись."
+
+#: useradd.8.xml:617(para)
+msgid ""
+"This option sets the <option>GROUP</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+"Этот параметр изменяет переменную <option>GROUP</option> в файле <filename>/"
+"etc/default/useradd</filename>."
+
+#: useradd.8.xml:628(para)
+msgid "The name of a new user's login shell."
+msgstr "Имя новой регистрационной командной оболочки пользователя."
+
+#: useradd.8.xml:631(para)
+msgid ""
+"This option sets the <option>SHELL</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+"Этот параметр изменяет переменную <option>SHELL</option> в файле <filename>/"
+"etc/default/useradd</filename>."
+
+# type: Content of: <refentry><refsect1><title>
+#: useradd.8.xml:643(title)
+msgid "NOTES"
+msgstr "ЗАМЕЧАНИЯ"
+
+# type: Content of: <refentry><refsect1><para>
+#: useradd.8.xml:644(para)
+msgid ""
+"The system administrator is responsible for placing the default user files "
+"in the <filename>/etc/skel/</filename> directory (or any other skeleton "
+"directory specified in <filename>/etc/default/useradd</filename> or on the "
+"command line)."
+msgstr ""
+"Системный администратор сам решает, какие файлы нужно положить в каталог "
+"<filename>/etc/skel/</filename> (или в любой другой каталог шаблонов, "
+"указанный в <filename>/etc/default/useradd</filename> или в командной "
+"строке)."
+
+# type: Content of: <refentry><refsect1><para>
+#: useradd.8.xml:653(para)
+msgid ""
+"You may not add a user to a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+"Нельзя добавить пользователя в группу NIS или LDAP. Это необходимо делать на "
+"соответствующем сервере."
+
+# type: Content of: <refentry><refsect1><para>
+#: useradd.8.xml:658(para)
+msgid ""
+"Similarly, if the username already exists in an external user database such "
+"as NIS or LDAP, <command>useradd</command> will deny the user account "
+"creation request."
+msgstr ""
+"Также, если имя пользователя уже существует во внешней базе данных такой как "
+"NIS или LDAP, то <command>useradd</command> не станет создавать учётную "
+"запись пользователя."
+
+# type: Content of: <refentry><refsect1><para>
+#: useradd.8.xml:664(para)
+msgid ""
+"Usernames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+"Имена пользователей должны начинаться со строчной буквы или символа "
+"подчёркивания, и должны состоять только из строчных букв, цифр, символов "
+"подчёркивания и минус. Они могут заканчиваться знаком доллара. Это можно "
+"описать регулярным выражением: [a-z_][a-z0-9_-]*[$]?"
+
+# type: Content of: <refentry><refsect1><para>
+#: useradd.8.xml:670(para)
+msgid "Usernames may only be up to 32 characters long."
+msgstr "Имена пользователей могут быть длиной не более 32 знаков."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>CREATE_HOME</option> (boolean)"
+msgstr "<option>CREATE_HOME</option> (логический)"
+
+#: useradd.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"Indicate if a home directory should be created by default for new users."
+msgstr ""
+"Определяет, должен ли создаваться по умолчанию домашний каталог для новых "
+"пользователей."
+
+#: useradd.8.xml:36(para) login.defs.5.xml:36(para)
+msgid ""
+"This setting does not apply to system users, and can be overridden on the "
+"command line."
+msgstr ""
+"Эта переменная не влияет на системных пользователей и может быть "
+"переопределена из командной строки."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: groupadd.8.xml:32(term)
+msgid "<option>GID_MAX</option> (number)"
+msgstr "<option>GID_MAX</option> (число)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+#: groupadd.8.xml:33(term)
+msgid "<option>GID_MIN</option> (number)"
+msgstr "<option>GID_MIN</option> (число)"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+#: groupadd.8.xml:35(para)
+msgid ""
+"Range of group IDs used for the creation of regular groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+"Диапазон идентификаторов групп, используемый в программах <command>useradd</"
+"command>, <command>groupadd</command> или <command>newusers</command> для "
+"создания обычных групп."
+
+#: useradd.8.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: groupadd.8.xml:40(para)
+msgid ""
+"The default value for <option>GID_MIN</option> (resp. <option>GID_MAX</"
+"option>) is 1000 (resp. 60000)."
+msgstr ""
+"Значение по умолчанию для <option>GID_MIN</option> (соотв. <option>GID_MAX</"
+"option>) равно 1000 (соотв. 60000)."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+#| msgid "<option>GID_MAX</option> (number)"
+msgid "<option>HOME_MODE</option> (number)"
+msgstr "<option>GID_MAX</option> (число)"
+
+#: useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The mode for new home directories. If not specified, the <option>UMASK</"
+"option> is used to create the mode."
+msgstr ""
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#, fuzzy
+#| msgid ""
+#| "<command>useradd</command> and <command>newusers</command> use this mask "
+#| "to set the mode of the home directory they create"
+msgid ""
+"<command>useradd</command> and <command>newusers</command> use this to set "
+"the mode of the home directory they create."
+msgstr ""
+"Команды <command>useradd</command> и <command>newusers</command> используют "
+"эту маску для установки прав доступа к домашнему каталогу, который они "
+"создают."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_MAX_DAYS</option> (number)"
+msgstr "<option>PASS_MAX_DAYS</option> (число)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The maximum number of days a password may be used. If the password is older "
+"than this, a password change will be forced. If not specified, -1 will be "
+"assumed (which disables the restriction)."
+msgstr ""
+"Максимальное число дней использования пароля. Если пароль старее этого "
+"числа, то будет запущена процедура смены пароля. Если значение не задано, то "
+"предполагается значение -1 (то есть возможность ограничения не используется)."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_MIN_DAYS</option> (number)"
+msgstr "<option>PASS_MIN_DAYS</option> (число)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The minimum number of days allowed between password changes. Any password "
+"changes attempted sooner than this will be rejected. If not specified, -1 "
+"will be assumed (which disables the restriction)."
+msgstr ""
+"Максимальное число дней между изменениями пароля. Любая смена пароля ранее "
+"заданного срока выполнена не будет. Если значение не задано, то "
+"предполагается значение -1 (то есть возможность ограничения не используется)."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_WARN_AGE</option> (number)"
+msgstr "<option>PASS_WARN_AGE</option> (число)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The number of days warning given before a password expires. A zero means "
+"warning is given only upon the day of expiration, a negative value means no "
+"warning is given. If not specified, no warning will be provided."
+msgstr ""
+"Число дней за которое начнёт выдаваться предупреждение об устаревании "
+"пароля. Нулевое значение означает, что предупреждение выдаётся в день "
+"устаревания, при отрицательном значении предупреждение выдаваться не будет. "
+"Если значение не задано, выдача предупреждения отключается."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: groupadd.8.xml:30(term)
+msgid "<option>SYS_GID_MAX</option> (number)"
+msgstr "<option>SYS_GID_MAX</option> (число)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: groupadd.8.xml:31(term)
+msgid "<option>SYS_GID_MIN</option> (number)"
+msgstr "<option>SYS_GID_MIN</option> (число)"
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: groupadd.8.xml:33(para)
+msgid ""
+"Range of group IDs used for the creation of system groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+"Диапазон идентификаторов групп, используемый в программах <command>useradd</"
+"command>, <command>groupadd</command> или <command>newusers</command> для "
+"создания системных групп."
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#: groupadd.8.xml:38(para)
+msgid ""
+"The default value for <option>SYS_GID_MIN</option> (resp. "
+"<option>SYS_GID_MAX</option>) is 101 (resp. <option>GID_MIN</option>-1)."
+msgstr ""
+"Значение по умолчанию для <option>SYS_GID_MIN</option> (соотв."
+"<option>SYS_GID_MAX</option>) равно 101 (соотв. <option>GID_MIN</option>-1)."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>SYS_UID_MAX</option> (number)"
+msgstr "<option>SYS_UID_MAX</option> (число)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+msgid "<option>SYS_UID_MIN</option> (number)"
+msgstr "<option>SYS_UID_MIN</option> (число)"
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+msgid ""
+"Range of user IDs used for the creation of system users by <command>useradd</"
+"command> or <command>newusers</command>."
+msgstr ""
+"Диапазон идентификаторов пользователей, используемый в программах "
+"<command>useradd</command> или <command>newusers</command> для создания "
+"системных пользователей."
+
+#: useradd.8.xml:37(para) newusers.8.xml:37(para) login.defs.5.xml:37(para)
+msgid ""
+"The default value for <option>SYS_UID_MIN</option> (resp. "
+"<option>SYS_UID_MAX</option>) is 101 (resp. <option>UID_MIN</option>-1)."
+msgstr ""
+"Значение по умолчанию для <option>SYS_UID_MIN</option> (соотв. "
+"<option>SYS_UID_MAX</option>) равно 101 (соотв. <option>UID_MIN</option>-1)."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:30(term) pwck.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>TCB_AUTH_GROUP</option> (boolean)"
+msgstr "<option>TCB_AUTH_GROUP</option> (логический)"
+
+#: useradd.8.xml:32(para) pwck.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"If <replaceable>yes</replaceable>, newly created tcb shadow files will be "
+"group owned by the <replaceable>auth</replaceable> group."
+msgstr ""
+"Если равно <replaceable>yes</replaceable>, то новые создаваемые теневые "
+"файлы tcb будут принадлежать группе <replaceable>auth</replaceable>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>UID_MAX</option> (number)"
+msgstr "<option>UID_MAX</option> (число)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>UID_MIN</option> (number)"
+msgstr "<option>UID_MIN</option> (число)"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"Range of user IDs used for the creation of regular users by "
+"<command>useradd</command> or <command>newusers</command>."
+msgstr ""
+"Диапазон идентификаторов пользователей, используемый в программах "
+"<command>useradd</command> или <command>newusers</command> для создания "
+"обычных пользователей."
+
+#: useradd.8.xml:39(para) newusers.8.xml:39(para) login.defs.5.xml:39(para)
+msgid ""
+"The default value for <option>UID_MIN</option> (resp. <option>UID_MAX</"
+"option>) is 1000 (resp. 60000)."
+msgstr ""
+"Значение по умолчанию для <option>UID_MIN</option> (соотв. <option>UID_MAX</"
+"option>) равно 1000 (соотв. 60000)."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: login.1.xml:32(term)
+msgid "<option>UMASK</option> (number)"
+msgstr "<option>UMASK</option> (число)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: login.1.xml:34(para)
+msgid ""
+"The file mode creation mask is initialized to this value. If not specified, "
+"the mask will be initialized to 022."
+msgstr ""
+"Задаёт начальное значение маски доступа для создаваемых файлов. Если не "
+"указано, то маска устанавливается в 022."
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#: login.1.xml:38(para)
+#, fuzzy
+#| msgid ""
+#| "<command>useradd</command> and <command>newusers</command> use this mask "
+#| "to set the mode of the home directory they create"
+msgid ""
+"<command>useradd</command> and <command>newusers</command> use this mask to "
+"set the mode of the home directory they create if <option>HOME_MODE</option> "
+"is not set."
+msgstr ""
+"Команды <command>useradd</command> и <command>newusers</command> используют "
+"эту маску для установки прав доступа к домашнему каталогу, который они "
+"создают."
+
+#: useradd.8.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: login.1.xml:43(para)
+msgid ""
+"It is also used by <command>login</command> to define users' initial umask. "
+"Note that this mask can be overridden by the user's GECOS line (if "
+"<option>QUOTAS_ENAB</option> is set) or by the specification of a limit with "
+"the <emphasis>K</emphasis> identifier in "
+"<citerefentry><refentrytitle>limits</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"Также она используется программой <command>login</command> для задания "
+"начального значения umask пользователя. Заметим, что эта маска может быть "
+"переопределена из пользовательской строки GECOS (если установлена переменная "
+"<option>QUOTAS_ENAB</option>) или указанием ограничения с идентификатором "
+"<emphasis>K</emphasis>, в <citerefentry><refentrytitle>limits</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: useradd.8.xml:51(para) newusers.8.xml:51(para) login.defs.5.xml:51(para)
+#: login.1.xml:51(para)
+msgid ""
+"It is also used by <command>pam_umask</command> as the default umask value."
+msgstr ""
+"Она также используется командой <command>pam_umask</command> как значение "
+"umask по умолчанию."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: useradd.8.xml:733(filename)
+msgid "/etc/default/useradd"
+msgstr "/etc/default/useradd"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:735(para)
+msgid "Default values for account creation."
+msgstr "значения по умолчанию для создаваемой учётной записи"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: useradd.8.xml:739(filename)
+msgid "/etc/skel/"
+msgstr "/etc/skel/"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:741(para)
+msgid "Directory containing default files."
+msgstr "каталог, содержащий файлы по умолчанию"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><replaceable>
+#: useradd.8.xml:789(replaceable) shadow.3.xml:58(manvolnum)
+#: pwck.8.xml:326(replaceable) passwd.1.xml:466(replaceable)
+#: grpck.8.xml:268(replaceable) groupmod.8.xml:269(replaceable)
+#: groupadd.8.xml:313(replaceable)
+msgid "3"
+msgstr "3"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:791(para) passwd.1.xml:486(para) groupadd.8.xml:315(para)
+msgid "invalid argument to option"
+msgstr "недопустимое значение параметра"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><replaceable>
+#: useradd.8.xml:795(replaceable) pwck.8.xml:332(replaceable)
+#: passwd.1.xml:472(replaceable) grpck.8.xml:274(replaceable)
+#: groupmod.8.xml:275(replaceable) groupadd.8.xml:319(replaceable)
+msgid "4"
+msgstr "4"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:797(para)
+msgid "UID already in use (and no <option>-o</option>)"
+msgstr "такой UID уже существует (и не задан параметр <option>-o</option>)"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:803(para) groupdel.8.xml:194(para)
+msgid "specified group doesn't exist"
+msgstr "указанная группа не существует"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><replaceable>
+#: useradd.8.xml:807(replaceable) groupmod.8.xml:287(replaceable)
+#: groupadd.8.xml:325(replaceable)
+msgid "9"
+msgstr "9"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:809(para)
+msgid "username already in use"
+msgstr "имя пользователя уже существует"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:821(para)
+msgid "can't create home directory"
+msgstr "не удалось создать домашний каталог"
+
+# type: Content of: <refentry><refmeta><manvolnum>
+#: useradd.8.xml:825(replaceable)
+#, fuzzy
+#| msgid "1"
+msgid "14"
+msgstr "1"
+
+#: useradd.8.xml:827(para)
+msgid "can't update SELinux user mapping"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para>
+#: useradd.8.xml:767(para)
+msgid ""
+"The <command>useradd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Команда <command>useradd</command> завершая работу, возвращает следующие "
+"значения: <placeholder-1/>"
+
+#: useradd.8.xml:836(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <phrase condition=\"subids"
+"\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: suauth.5.xml:41(contrib) pwconv.8.xml:47(contrib)
+#: login.access.5.xml:42(contrib) gpasswd.1.xml:46(contrib)
+msgid "Creation, 1996"
+msgstr ""
+
+# type: Content of: <refentry><refnamediv><refname>
+#: suauth.5.xml:57(refentrytitle) suauth.5.xml:64(refname)
+msgid "suauth"
+msgstr "suauth"
+
+# type: Content of: <refentry><refsect1><para><citerefentry><manvolnum>
+#: suauth.5.xml:58(manvolnum) shadow.5.xml:58(manvolnum)
+#: pwck.8.xml:338(replaceable) porttime.5.xml:58(manvolnum)
+#: passwd.5.xml:58(manvolnum) passwd.1.xml:478(replaceable)
+#: login.defs.5.xml:125(manvolnum) login.access.5.xml:59(manvolnum)
+#: limits.5.xml:60(manvolnum) gshadow.5.xml:47(manvolnum)
+#: grpck.8.xml:280(replaceable) faillog.5.xml:58(manvolnum)
+msgid "5"
+msgstr "5"
+
+# type: Content of: <refentry><refmeta><refmiscinfo>
+#: suauth.5.xml:59(refmiscinfo) shadow.5.xml:59(refmiscinfo)
+#: porttime.5.xml:59(refmiscinfo) passwd.5.xml:59(refmiscinfo)
+#: login.defs.5.xml:126(refmiscinfo) login.access.5.xml:60(refmiscinfo)
+#: limits.5.xml:61(refmiscinfo) gshadow.5.xml:48(refmiscinfo)
+#: faillog.5.xml:59(refmiscinfo)
+msgid "File Formats and Conversions"
+msgstr "Форматы файлов"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: suauth.5.xml:65(refpurpose)
+msgid "detailed su control file"
+msgstr "файл управления командой su"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: suauth.5.xml:70(command) suauth.5.xml:196(filename)
+msgid "/etc/suauth"
+msgstr "/etc/suauth"
+
+# type: Content of: <refentry><refsect1><para>
+#: suauth.5.xml:76(para)
+msgid ""
+"The file <filename>/etc/suauth</filename> is referenced whenever the su "
+"command is called. It can change the behaviour of the su command, based upon:"
+msgstr ""
+"Файл <filename>/etc/suauth</filename> проверяется каждый раз при запуске "
+"команды su. Он влияет на поведение команды su, в зависимости от:"
+
+# type: Content of: <refentry><refsect1><literallayout>
+#. .RS
+#: suauth.5.xml:83(literallayout)
+#, fuzzy, no-wrap
+#| msgid ""
+#| "\n"
+#| " 1) the user su is targetting\n"
+#| " "
+msgid ""
+"\n"
+" 1) the user su is targeting\n"
+" "
+msgstr ""
+"\n"
+" 1) пользователя, права которого нужно получить с помощью su\n"
+" "
+
+# type: Content of: <refentry><refsect1><para>
+#. .fi
+#: suauth.5.xml:87(para)
+msgid ""
+"2) the user executing the su command (or any groups he might be a member of)"
+msgstr ""
+"2) пользователя, запустившего команду su (или группы, членом которой он "
+"может быть)"
+
+# type: Content of: <refentry><refsect1><para>
+#: suauth.5.xml:92(para)
+msgid ""
+"The file is formatted like this, with lines starting with a # being treated "
+"as comment lines and ignored;"
+msgstr ""
+"Формат файла показан ниже, строки начинающиеся с # считаются комментарием и "
+"игнорируются;"
+
+# type: Content of: <refentry><refsect1><literallayout>
+#: suauth.5.xml:97(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+" to-id:from-id:ACTION\n"
+" "
+msgstr ""
+"\n"
+" желаемый-id:желающий-id:ДЕЙСТВИЕ\n"
+" "
+
+#: suauth.5.xml:101(para)
+msgid ""
+"Where to-id is either the word <emphasis>ALL</emphasis>, a list of usernames "
+"delimited by \",\" or the words <emphasis>ALL EXCEPT</emphasis> followed by "
+"a list of usernames delimited by \",\"."
+msgstr ""
+"Где желаемый-id может быть словом <emphasis>ALL</emphasis>, списком имён "
+"пользователей, перечисленных через запятую («,») или фразы <emphasis>ALL "
+"EXCEPT</emphasis>, после которой идёт список имён пользователей "
+"перечисленных через «,»."
+
+#: suauth.5.xml:107(para)
+#, fuzzy
+#| msgid ""
+#| "from-id is formatted the same as to-id except the extra word "
+#| "<emphasis>GROUP</emphasis> is recognised. <emphasis>ALL EXCEPT GROUP</"
+#| "emphasis> is perfectly valid too. Following <emphasis>GROUP</emphasis> "
+#| "appears one or more group names, delimited by \",\". It is not sufficient "
+#| "to have primary group id of the relevant group, an entry in "
+#| "<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry> is neccessary."
+msgid ""
+"from-id is formatted the same as to-id except the extra word "
+"<emphasis>GROUP</emphasis> is recognized. <emphasis>ALL EXCEPT GROUP</"
+"emphasis> is perfectly valid too. Following <emphasis>GROUP</emphasis> "
+"appears one or more group names, delimited by \",\". It is not sufficient to "
+"have primary group id of the relevant group, an entry in "
+"<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry> is necessary."
+msgstr ""
+"желающий-id может содержать то же, что и желательный-id, плюс новое "
+"слово<emphasis>GROUP</emphasis>. <emphasis>ALL EXCEPT GROUP</emphasis> тоже "
+"допустимо. После <emphasis>GROUP</emphasis> указывается одна или более "
+"названий групп, разделённых «,». Недостаточно иметь id первичной группы "
+"соответствующей группы, необходимо иметь запись в файле "
+"<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><para>
+#: suauth.5.xml:118(para)
+msgid "Action can be one only of the following currently supported options."
+msgstr "В поле ДЕЙСТВИЕ может быть только одно из следующих значений:"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><emphasis>
+#: suauth.5.xml:124(emphasis)
+msgid "DENY"
+msgstr "DENY"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: suauth.5.xml:127(para)
+msgid "The attempt to su is stopped before a password is even asked for."
+msgstr "Команда su останавливает выполнение, даже не спрашивая пароль."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><emphasis>
+#: suauth.5.xml:134(emphasis)
+msgid "NOPASS"
+msgstr "NOPASS"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: suauth.5.xml:137(para)
+msgid ""
+"The attempt to su is automatically successful; no password is asked for."
+msgstr "Команда su выполняется без запроса пароля."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><emphasis>
+#: suauth.5.xml:145(emphasis)
+msgid "OWNPASS"
+msgstr "OWNPASS"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: suauth.5.xml:148(para)
+msgid ""
+"For the su command to be successful, the user must enter his or her own "
+"password. They are told this."
+msgstr ""
+"Чтобы успешно выполнить команду su, пользователь должен ввести свой "
+"собственный пароль."
+
+# type: Content of: <refentry><refsect1><para>
+#: suauth.5.xml:156(para)
+msgid ""
+"Note there are three separate fields delimited by a colon. No whitespace "
+"must surround this colon. Also note that the file is examined sequentially "
+"line by line, and the first applicable rule is used without examining the "
+"file further. This makes it possible for a system administrator to exercise "
+"as fine control as he or she wishes."
+msgstr ""
+"Заметим, что тут используются три поля, разделённых двоеточиями. Никаких "
+"пробелов не допускается около двоеточий. Также заметим, что файл "
+"просматривается строка за строкой, и первое подходящее правило будет "
+"использовано без проверки оставшихся правил. Это позволяет системному "
+"администратору осуществлять любой контроль, какой он пожелает."
+
+# type: Content of: <refentry><refsect1><title>
+#: suauth.5.xml:166(title)
+msgid "EXAMPLE"
+msgstr "ПРИМЕР"
+
+# type: Content of: <refentry><refsect1><literallayout>
+#: suauth.5.xml:167(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+" # sample /etc/suauth file\n"
+" #\n"
+" # A couple of privileged usernames may\n"
+" # su to root with their own password.\n"
+" #\n"
+" root:chris,birddog:OWNPASS\n"
+" #\n"
+" # Anyone else may not su to root unless in\n"
+" # group wheel. This is how BSD does things.\n"
+" #\n"
+" root:ALL EXCEPT GROUP wheel:DENY\n"
+" #\n"
+" # Perhaps terry and birddog are accounts\n"
+" # owned by the same person.\n"
+" # Access can be arranged between them\n"
+" # with no password.\n"
+" #\n"
+" terry:birddog:NOPASS\n"
+" birddog:terry:NOPASS\n"
+" #\n"
+" "
+msgstr ""
+"\n"
+" # пример файла /etc/suauth\n"
+" #\n"
+" # Пара привилегированных имён пользователей\n"
+" # могут выполнить su, чтобы получить права суперпользователя введя свой пароль.\n"
+" #\n"
+" root:chris,birddog:OWNPASS\n"
+" #\n"
+" # Все остальные не могут выполнить su для получения root, если они \n"
+" # не члены группы wheel. Так настроено в BSD.\n"
+" #\n"
+" root:ALL EXCEPT GROUP wheel:DENY\n"
+" #\n"
+" # Возможно учётными записями terry и birddog\n"
+" # владеет один человек.\n"
+" # Переход из одной записи в другую\n"
+" # можно сделать без запроса пароля.\n"
+" #\n"
+" terry:birddog:NOPASS\n"
+" birddog:terry:NOPASS\n"
+" #\n"
+" "
+
+# type: Content of: <refentry><refsect1><title>
+#: suauth.5.xml:203(title) pwconv.8.xml:216(title) login.defs.5.xml:531(title)
+msgid "BUGS"
+msgstr "ОШИБКИ РЕАЛИЗАЦИИ"
+
+# type: Content of: <refentry><refsect1><para>
+#: suauth.5.xml:204(para)
+msgid ""
+"There could be plenty lurking. The file parser is particularly unforgiving "
+"about syntax errors, expecting no spurious whitespace (apart from beginning "
+"and end of lines), and a specific token delimiting different things."
+msgstr ""
+"Может быть несколько угроз. Анализатор файла, в частности, не прощает "
+"синтаксических ошибок, ожидая, что не будет недопустимых пробелов (кроме как "
+"в начале и конце строк) и специальных слов, разделяющих различные вещи."
+
+# type: Content of: <refentry><refsect1><title>
+#: suauth.5.xml:213(title) shadow.3.xml:208(title)
+msgid "DIAGNOSTICS"
+msgstr "ДИАГНОСТИКА"
+
+#: suauth.5.xml:214(para)
+msgid ""
+"An error parsing the file is reported using "
+"<citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry> as level ERR on facility AUTH."
+msgstr ""
+"Ошибки при анализе файла выводятся с помощью "
+"<citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry> с уровнем ERR средства AUTH."
+
+#: suauth.5.xml:223(para)
+msgid ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: su.1.xml:58(contrib) shadow.5.xml:41(contrib) shadow.3.xml:41(contrib)
+#: porttime.5.xml:41(contrib) passwd.5.xml:41(contrib) passwd.1.xml:48(contrib)
+#: login.1.xml:74(contrib) faillog.8.xml:41(contrib) faillog.5.xml:41(contrib)
+msgid "Creation, 1989"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: su.1.xml:74(refentrytitle) su.1.xml:81(refname) su.1.xml:86(command)
+#: login.defs.5.xml:456(term)
+msgid "su"
+msgstr "su"
+
+# type: Content of: <refentry><refmeta><refmiscinfo>
+#: su.1.xml:76(refmiscinfo) sg.1.xml:60(refmiscinfo)
+#: passwd.1.xml:66(refmiscinfo) newgrp.1.xml:60(refmiscinfo)
+#: login.1.xml:92(refmiscinfo) groups.1.xml:59(refmiscinfo)
+#: gpasswd.1.xml:64(refmiscinfo) expiry.1.xml:63(refmiscinfo)
+#: chsh.1.xml:62(refmiscinfo) chfn.1.xml:62(refmiscinfo)
+#: chage.1.xml:60(refmiscinfo)
+msgid "User Commands"
+msgstr "Пользовательские команды"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: su.1.xml:82(refpurpose)
+msgid "change user ID or become superuser"
+msgstr "изменяет ID пользователя или делает его суперпользователем"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><option>
+#: su.1.xml:91(replaceable) sg.1.xml:72(arg) newgrp.1.xml:71(arg)
+msgid "-"
+msgstr "-"
+
+# type: Content of: <refentry><refsynopsisdiv><cmdsynopsis><arg><arg><replaceable>
+#: su.1.xml:94(replaceable) login.1.xml:107(replaceable)
+#: login.1.xml:115(replaceable)
+msgid "username"
+msgstr "имя_пользователя"
+
+#: su.1.xml:96(replaceable)
+msgid "args"
+msgstr ""
+
+#: su.1.xml:104(para)
+#, fuzzy
+#| msgid ""
+#| "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."
+msgid ""
+"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."
+msgstr ""
+"Программа <command>su</command> используется для того, чтобы пользователь "
+"мог стать другим пользователем в текущем сеансе. Если <command>su</command> "
+"вызывается без <option>имени_пользователя</option>, то это по умолчанию "
+"делает пользователя суперпользователем. Необязательный параметр <option>-</"
+"option> можно использовать для воссоздания окружения, такого же как если бы "
+"настоящий пользователь выполнял вход в систему."
+
+#: su.1.xml:114(para)
+msgid ""
+"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>."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para>
+#: su.1.xml:122(para)
+msgid ""
+"The user will be prompted for a password, if appropriate. Invalid passwords "
+"will produce an error message. All attempts, both valid and invalid, are "
+"logged to detect abuse of the system."
+msgstr ""
+"Пользователю предложат ввести пароль, если он задан. При неверном пароле "
+"возникает сообщение об ошибке. Все попытки, удачные и неудачные, "
+"протоколируются системой с целью обнаружения злоупотреблений."
+
+#: su.1.xml:127(para)
+msgid ""
+"The current environment is passed to the new shell. The value of <envar>"
+"$PATH</envar> is reset to <filename>/bin:/usr/bin</filename> for normal "
+"users, or <filename>/sbin:/bin:/usr/sbin:/usr/bin</filename> for the "
+"superuser. This may be changed with the <option>ENV_PATH</option> and "
+"<option>ENV_SUPATH</option> definitions in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+"Текущее окружение передаётся новой оболочке. Значение <envar>$PATH</envar> "
+"сбрасывается в значение <filename>/bin:/usr/bin</filename> для обычных "
+"пользователей или в <filename>/sbin:/bin:/usr/sbin:/usr/bin</filename> для "
+"суперпользователя. Эти значения можно изменить в переменных "
+"<option>ENV_PATH</option> и <option>ENV_SUPATH</option> в файле <filename>/"
+"etc/login.defs</filename>."
+
+# type: Content of: <refentry><refsect1><para>
+#: su.1.xml:136(para) login.1.xml:188(para)
+msgid ""
+"A subsystem login is indicated by the presence of a \"*\" as the first "
+"character of the login shell. The given home directory will be used as the "
+"root of a new file system which the user is actually logged into."
+msgstr ""
+"Субсистемный вход в систему можно распознать по наличию символа «*» в начале "
+"регистрационной оболочки. Заданный домашний каталог будет использован как "
+"корень новой файловой системы, в которой регистрируется пользователь."
+
+# type: Content of: <refentry><refsect1><para>
+#: su.1.xml:145(para)
+msgid "The options which apply to the <command>su</command> command are:"
+msgstr "Параметры команды <command>su</command>:"
+
+#: su.1.xml:149(term)
+msgid ""
+"<option>-c</option>, <option>--command</option>&nbsp;<replaceable>COMMAND</"
+"replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--command</option>&nbsp;<replaceable>КОМАНДА</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: su.1.xml:153(para)
+msgid ""
+"Specify a command that will be invoked by the shell using its <option>-c</"
+"option>."
+msgstr ""
+"Указать команду, которая будет запущена оболочкой в виде параметра для "
+"<option>-c</option>."
+
+#: su.1.xml:157(para)
+#, fuzzy
+#| msgid ""
+#| "The executed command will have no controlling terminal. This option "
+#| "cannot be used to execute interractive programs which need a controlling "
+#| "TTY."
+msgid ""
+"The executed command will have no controlling terminal. This option cannot "
+"be used to execute interactive programs which need a controlling TTY."
+msgstr ""
+"Запускаемая программа не будет иметь управляющего терминала. Этот параметр "
+"не может быть использован для запуска интерактивных программ, которым "
+"требуется управляющий TTY."
+
+#: su.1.xml:167(term)
+msgid "<option>-</option>, <option>-l</option>, <option>--login</option>"
+msgstr "<option>-</option>, <option>-l</option>, <option>--login</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: su.1.xml:171(para)
+msgid ""
+"Provide an environment similar to what the user would expect had the user "
+"logged in directly."
+msgstr ""
+"Предоставляет окружение, как если бы пользователь непосредственно "
+"регистрировался в системе."
+
+#: su.1.xml:175(para)
+#, fuzzy
+#| msgid ""
+#| "When <option>-</option> is used, it must be specified as the last "
+#| "<command>su</command> option. The other forms (<option>-l</option> and "
+#| "<option>--login</option>) do not have this restriction."
+msgid ""
+"When <option>-</option> is used, it must be specified before any "
+"<option>username</option>. For portability it is recommended to use it as "
+"last option, before any <option>username</option>. The other forms (<option>-"
+"l</option> and <option>--login</option>) do not have this restriction."
+msgstr ""
+"Если используется <option>-</option>, то он должен быть задан последним "
+"параметром <command>su</command>. Другие формы (<option>-l</option> и "
+"<option>--login</option>) не имеют этого ограничения."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: su.1.xml:190(para)
+msgid "The shell that will be invoked."
+msgstr "Оболочка, которая будет запущена."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: su.1.xml:198(para)
+msgid "The shell specified with --shell."
+msgstr "Оболочка указанная в параметре --shell."
+
+#: su.1.xml:201(para)
+msgid ""
+"If <option>--preserve-environment</option> is used, the shell specified by "
+"the <envar>$SHELL</envar> environment variable."
+msgstr ""
+"Если используется <option>--preserve-environment</option>, то оболочка "
+"задаётся переменной окружения <envar>$SHELL</envar>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: su.1.xml:208(para)
+msgid ""
+"The shell indicated in the <filename>/etc/passwd</filename> entry for the "
+"target user."
+msgstr ""
+"Оболочка, указанная в записи файла <filename>/etc/passwd</filename> для "
+"заданного пользователя."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: su.1.xml:214(para)
+msgid ""
+"<filename>/bin/sh</filename> if a shell could not be found by any above "
+"method."
+msgstr ""
+"<filename>/bin/sh</filename>, если ни одной оболочке не было найдено с "
+"помощью методов, указанных выше."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: su.1.xml:191(para)
+msgid ""
+"The invoked shell is chosen from (highest priority first): <placeholder-1/>"
+msgstr ""
+"Запущенная оболочка выбирается из (в порядке убывания приоритета): "
+"<placeholder-1/>"
+
+#: su.1.xml:219(para)
+msgid ""
+"If the target user has a restricted shell (i.e. the shell field of this "
+"user's entry in <filename>/etc/passwd</filename> is not listed in <filename>/"
+"etc/shells</filename>), then the <option>--shell</option> option or the "
+"<envar>$SHELL</envar> environment variable won't be taken into account, "
+"unless <command>su</command> is called by root."
+msgstr ""
+"Если заданный пользователь имеет ограниченную оболочку (то есть оболочка в "
+"поле пользовательской записи в файле <filename>/etc/passwd</filename> "
+"отсутствует в файле <filename>/etc/shells</filename>), то параметр <option>--"
+"shell</option> или переменная окружения <envar>$SHELL</envar> не будут "
+"учтены, если <command>su</command> не была запущена суперпользователем."
+
+#: su.1.xml:230(term)
+msgid ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+msgstr ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+
+#: su.1.xml:239(envar)
+msgid "$PATH"
+msgstr "$PATH"
+
+#: su.1.xml:241(para)
+msgid ""
+"reset according to the <filename>/etc/login.defs</filename> options "
+"<option>ENV_PATH</option> or <option>ENV_SUPATH</option> (see below);"
+msgstr ""
+"сбрасывается в значение <option>ENV_PATH</option> или <option>ENV_SUPATH</"
+"option> (смотрите далее) из <filename>/etc/login.defs</filename>;"
+
+#: su.1.xml:250(envar)
+msgid "$IFS"
+msgstr "$IFS"
+
+#: su.1.xml:252(para)
+msgid ""
+"reset to <quote>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</quote>, if it was "
+"set."
+msgstr ""
+"сбрасывается в значение <quote>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</"
+"quote>, если она установлена."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: su.1.xml:235(para)
+msgid "Preserve the current environment, except for: <placeholder-1/>"
+msgstr "Сохранить текущее окружение за исключением: <placeholder-1/>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: su.1.xml:261(para)
+msgid ""
+"If the target user has a restricted shell, this option has no effect (unless "
+"<command>su</command> is called by root)."
+msgstr ""
+"Если заданный пользователь имеет ограниченную оболочку, то этот параметр не "
+"сработает (если <command>su</command> не запускается суперпользователем)."
+
+#: su.1.xml:270(para)
+msgid ""
+"The <envar>$HOME</envar>, <envar>$SHELL</envar>, <envar>$USER</envar>, "
+"<envar>$LOGNAME</envar>, <envar>$PATH</envar>, and <envar>$IFS</envar> "
+"environment variables are reset."
+msgstr ""
+"Переменные окружение <envar>$HOME</envar>, <envar>$SHELL</envar>, <envar>"
+"$USER</envar>, <envar>$LOGNAME</envar>, <envar>$PATH</envar> и <envar>$IFS</"
+"envar> сбрасываются."
+
+#: su.1.xml:279(para)
+msgid ""
+"If <option>--login</option> is not used, the environment is copied, except "
+"for the variables above."
+msgstr ""
+"Если параметр <option>--login</option> не указан, то окружение копируется, "
+"за исключением переменных, перечисленных выше."
+
+#: su.1.xml:286(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TERM</envar>, <envar>"
+"$COLORTERM</envar>, <envar>$DISPLAY</envar>, and <envar>$XAUTHORITY</envar> "
+"environment variables are copied if they were set."
+msgstr ""
+"Если параметр <option>--login</option> указан, то переменные окружения "
+"<envar>$TERM</envar>, <envar>$COLORTERM</envar>, <envar>$DISPLAY</envar> и "
+"<envar>$XAUTHORITY</envar> копируются (если они установлены)."
+
+#: su.1.xml:296(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TZ</envar>, <envar>$HZ</"
+"envar>, and <envar>$MAIL</envar> environment variables are set according to "
+"the <filename>/etc/login.defs</filename> options <option>ENV_TZ</option>, "
+"<option>ENV_HZ</option>, <option>MAIL_DIR</option>, and <option>MAIL_FILE</"
+"option> (see below)."
+msgstr ""
+"Если параметр <option>--login</option> указан, то переменные окружения "
+"<envar>$TZ</envar>, <envar>$HZ</envar> и <envar>$MAIL</envar> "
+"устанавливаются согласно переменным файла <filename>/etc/login.defs</"
+"filename>: <option>ENV_TZ</option>, <option>ENV_HZ</option>, "
+"<option>MAIL_DIR</option> и <option>MAIL_FILE</option> (смотрите далее)."
+
+#: su.1.xml:309(para)
+msgid ""
+"If <option>--login</option> is used, other environment variables might be "
+"set by the <option>ENVIRON_FILE</option> file (see below)."
+msgstr ""
+"Если параметр <option>--login</option> указан, то дополнительные переменные "
+"окружения могут быть установлены из файла <option>ENVIRON_FILE</option> "
+"(смотрите далее)."
+
+#: su.1.xml:317(para)
+msgid "Other environments might be set by PAM modules."
+msgstr ""
+"Дополнительные переменные окружения могут быть установлены из модулей PAM."
+
+#: su.1.xml:265(para)
+msgid ""
+"Note that the default behavior for the environment is the following: "
+"<placeholder-1/>"
+msgstr "Заметим, что поведение окружения по умолчанию таково: <placeholder-1/>"
+
+# type: Content of: <refentry><refsect1><para>
+#: su.1.xml:331(para)
+msgid ""
+"This version of <command>su</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+"Данная версия программы <command>su</command> может быть собрана с разными "
+"параметрами и только некоторые из них смогут быть использованы на любой "
+"машине."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>CONSOLE</option> (string)"
+msgstr "<option>CONSOLE</option> (строка)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, either full pathname of a file containing device names (one per "
+"line) or a \":\" delimited list of device names. Root logins will be allowed "
+"only upon these devices."
+msgstr ""
+"Если определена, то значение равно или полному пути к файлу с именами "
+"устройств (одно на строку), или списку имён устройств, перечисленных через "
+"«:». Вход суперпользователя будет разрешён только с этих устройств."
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid "If not defined, root will be allowed on any device."
+msgstr ""
+"Если не определена, то суперпользователь может входить в систему с любого "
+"устройства."
+
+#: su.1.xml:42(para) login.defs.5.xml:42(para) login.1.xml:42(para)
+msgid "The device should be specified without the /dev/ prefix."
+msgstr "Устройства должны указываться без начального префикса /dev/."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>CONSOLE_GROUPS</option> (string)"
+msgstr "<option>CONSOLE_GROUPS</option> (строка)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"List of groups to add to the user's supplementary groups set when logging in "
+"on the console (as determined by the CONSOLE setting). Default is none. "
+"<placeholder-1/> Use with caution - it is possible for users to gain "
+"permanent access to these groups, even when not logged in on the console."
+msgstr ""
+"Список групп для добавления к набору пользовательских дополнительных групп "
+"при входе с консоли (определяемой переменной CONSOLE). По умолчанию не "
+"указана. <placeholder-1/> Используйте осторожно — может дать пользователям "
+"постоянный доступ к этим группам, даже если они не входили с консоли."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>DEFAULT_HOME</option> (boolean)"
+msgstr "<option>DEFAULT_HOME</option> (логический)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Indicate if login is allowed if we can't cd to the home directory. Default "
+"is no."
+msgstr ""
+"Определяет, можно ли войти в систему, если нельзя выполнить cd в домашний "
+"каталог. По умолчанию «no»."
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, the user will login in the root "
+"(<filename>/</filename>) directory if it is not possible to cd to her home "
+"directory."
+msgstr ""
+"Если равно <replaceable>yes</replaceable>, то пользователь будет попадать в "
+"корневой каталог (<filename>/</filename>), если невозможно выполнить cd в "
+"его домашний каталог."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#. XXX: When compiled with PAM support, only sulogin uses ENV_HZ
+#: su.1.xml:33(term) login.defs.5.xml:33(term) login.1.xml:33(term)
+msgid "<option>ENV_HZ</option> (string)"
+msgstr "<option>ENV_HZ</option> (строка)"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"If set, it will be used to define the HZ environment variable when a user "
+"login. The value must be preceded by <replaceable>HZ=</replaceable>. A "
+"common value on Linux is <replaceable>HZ=100</replaceable>."
+msgstr ""
+"Если установлена, то будет использоваться для определения переменной "
+"окружения HZ при входе пользователя в систему. Значение должно начинаться с "
+"<replaceable>HZ=</replaceable>. Обычное значение для Linux — "
+"<replaceable>HZ=100</replaceable>."
+
+#: su.1.xml:41(para) login.defs.5.xml:41(para) login.1.xml:41(para)
+msgid ""
+"The <envar>HZ</envar> environment variable is only set when the user (the "
+"superuser) logs in with <command>sulogin</command>."
+msgstr ""
+"Переменная окружения <envar>HZ</envar> устанавливается только когда "
+"пользователь (суперпользователь) входит в систему с помощью "
+"<command>sulogin</command>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENVIRON_FILE</option> (string)"
+msgstr "<option>ENVIRON_FILE</option> (строка)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If this file exists and is readable, login environment will be read from it. "
+"Every line should be in the form name=value."
+msgstr ""
+"Если этот файл существует и доступ для чтения, то из него читает "
+"регистрационное окружение. Каждая строка должна иметь формат: имя=значение."
+
+# type: Content of: <refentry><refsect1><para>
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid "Lines starting with a # are treated as comment lines and ignored."
+msgstr "Строки, начинающиеся с #, считаются комментарием и игнорируются."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENV_PATH</option> (string)"
+msgstr "<option>ENV_PATH</option> (строка)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+#, fuzzy
+#| msgid ""
+#| "If set, it will be used to define the PATH environment variable when a "
+#| "regular user login. The value can be preceded by <replaceable>PATH=</"
+#| "replaceable>, or a colon separated list of paths (for example "
+#| "<replaceable>/bin:/usr/bin</replaceable>). The default value is "
+#| "<replaceable>PATH=/bin:/usr/bin</replaceable>."
+msgid ""
+"If set, it will be used to define the PATH environment variable when a "
+"regular user login. The value is a colon separated list of paths (for "
+"example <replaceable>/bin:/usr/bin</replaceable>) and can be preceded by "
+"<replaceable>PATH=</replaceable>. The default value is <replaceable>PATH=/"
+"bin:/usr/bin</replaceable>."
+msgstr ""
+"Если установлена, то будет использоваться для определения переменной "
+"окружения PATH, при входе обычного пользователя. Значение может начинаться с "
+"<replaceable>PATH=</replaceable>, или представлять собой список путей через "
+"двоеточие (например, <replaceable>/bin:/usr/bin</replaceable>). Значение по "
+"умолчанию равно <replaceable>PATH=/bin:/usr/bin</replaceable>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENV_SUPATH</option> (string)"
+msgstr "<option>ENV_SUPATH</option> (строка)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+#, fuzzy
+#| msgid ""
+#| "If set, it will be used to define the PATH environment variable when the "
+#| "superuser login. The value can be preceded by <replaceable>PATH=</"
+#| "replaceable>, or a colon separated list of paths (for example "
+#| "<replaceable>/sbin:/bin:/usr/sbin:/usr/bin</replaceable>). The default "
+#| "value is <replaceable>PATH=/sbin:/bin:/usr/sbin:/usr/bin</replaceable>."
+msgid ""
+"If set, it will be used to define the PATH environment variable when the "
+"superuser login. The value is a colon separated list of paths (for example "
+"<replaceable>/sbin:/bin:/usr/sbin:/usr/bin</replaceable>) and can be "
+"preceded by <replaceable>PATH=</replaceable>. The default value is "
+"<replaceable>PATH=/sbin:/bin:/usr/sbin:/usr/bin</replaceable>."
+msgstr ""
+"Если установлена, то будет использоваться для определения переменной "
+"окружения PATH при входе суперпользователя. Значение может начинаться с "
+"<replaceable>PATH=</replaceable>, или представлять собой список путей через "
+"двоеточие (например, <replaceable>/sbin:/bin:/usr/sbin:/usr/bin</"
+"replaceable>). Значение по умолчанию равно <replaceable>PATH=/sbin:/bin:/usr/"
+"sbin:/usr/bin</replaceable>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENV_TZ</option> (string)"
+msgstr "<option>ENV_TZ</option> (строка)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the TZ environment variable when a user "
+"login. The value can be the name of a timezone preceded by <replaceable>TZ=</"
+"replaceable> (for example <replaceable>TZ=CST6CDT</replaceable>), or the "
+"full path to the file containing the timezone specification (for example "
+"<filename>/etc/tzname</filename>)."
+msgstr ""
+"Если установлена, то будет использоваться для определения переменной "
+"окружения TZ при входе пользователя. Значение может быть равно имени "
+"часового пояса, начинающегося <replaceable>TZ=</replaceable> (например, "
+"<replaceable>TZ=CST6CDT</replaceable>), или полному пути к файлу с "
+"параметрами часового пояса (например, <filename>/etc/tzname</filename>)."
+
+#. TODO: it can in fact be used to set any other variable
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"If a full path is specified but the file does not exist or cannot be read, "
+"the default is to use <replaceable>TZ=CST6CDT</replaceable>."
+msgstr ""
+"Если указан полный путь, но файл не существует или недоступен для чтения, то "
+"используется значение по умолчанию: <replaceable>TZ=CST6CDT</replaceable>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#: chsh.1.xml:32(term) chfn.1.xml:32(term)
+msgid "<option>LOGIN_STRING</option> (string)"
+msgstr "<option>LOGIN_STRING</option> (строка)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+#: chsh.1.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"The string used for prompting a password. The default is to use \"Password: "
+"\", or a translation of that string. If you set this variable, the prompt "
+"will not be translated."
+msgstr ""
+"Строка-приглашение к вводу пароля. Значение по умолчанию: «Password:» или "
+"перевод этой строки на разные языки. Если вы измените эту переменную, то "
+"перевод будет отсутствовать."
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+#: chsh.1.xml:39(para) chfn.1.xml:39(para)
+msgid ""
+"If the string contains <replaceable>%s</replaceable>, this will be replaced "
+"by the user's name."
+msgstr ""
+"Если в строке содержится подстрока <replaceable>%s</replaceable>, то она "
+"будет заменена на имя пользователя."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>MAIL_CHECK_ENAB</option> (boolean)"
+msgstr "<option>MAIL_CHECK_ENAB</option> (логический)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable checking and display of mailbox status upon login."
+msgstr "Включает проверку и показ состояния почтового ящика при входе."
+
+#: su.1.xml:37(para) login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"You should disable it if the shell startup files already check for mail "
+"(\"mailx -e\" or equivalent)."
+msgstr ""
+"Вы должны выключить это, если почтовый ящик проверяется из файлов "
+"автозапуска оболочки («mailx -e» или похожей командой)."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>QUOTAS_ENAB</option> (boolean)"
+msgstr "<option>QUOTAS_ENAB</option> (логический)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable setting of resource limits from <filename>/etc/limits</filename> and "
+"ulimit, umask, and niceness from the user's passwd gecos field."
+msgstr ""
+"Включает установку ограничений ресурсов из <filename>/etc/limits</filename> "
+"и ulimit, umask и niceness из поля gecos файла passwd."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SULOG_FILE</option> (string)"
+msgstr "<option>SULOG_FILE</option> (строка)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "If defined, all su activity is logged to this file."
+msgstr ""
+"Если определена, то любая активность su будет протоколироваться в этот файл."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SU_NAME</option> (string)"
+msgstr "<option>SU_NAME</option> (строка)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"If defined, the command name to display when running \"su -\". For example, "
+"if this is defined as \"su\" then a \"ps\" will display the command is \"-su"
+"\". If not defined, then \"ps\" would display the name of the shell actually "
+"being run, e.g. something like \"-sh\"."
+msgstr ""
+"Если определена, то выводится имя команды когда работает «su -». Например, "
+"если значение равно «su», то «ps» покажет команду как «-su». Если не "
+"определена, то «ps» покажет имя запускаемой оболочки например как «-sh»."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>SU_WHEEL_ONLY</option> (boolean)"
+msgstr "<option>SU_WHEEL_ONLY</option> (логический)"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the user must be listed as a member of "
+"the first gid 0 group in <filename>/etc/group</filename> (called "
+"<replaceable>root</replaceable> on most Linux systems) to be able to "
+"<command>su</command> to uid 0 accounts. If the group doesn't exist or is "
+"empty, no one will be able to <command>su</command> to uid 0."
+msgstr ""
+"Если равна <replaceable>yes</replaceable>, то пользователь должен быть "
+"членом первой группы с gid 0 в файле <filename>/etc/group</filename> (в "
+"большинстве систем Linux называется <replaceable>root</replaceable>), чтобы "
+"иметь возможность запускать <command>su</command> для получения uid 0. Если "
+"группа не существует, или пуста, то никто не сможет получить uid 0 с помощью "
+"<command>su</command>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SYSLOG_SU_ENAB</option> (boolean)"
+msgstr "<option>SYSLOG_SU_ENAB</option> (логический)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"Enable \"syslog\" logging of <command>su</command> activity - in addition to "
+"sulog file logging."
+msgstr ""
+"Включить протоколирование «syslog» действий <command>su</command> — "
+"дополнительно к протоколированию в файле sulog."
+
+#: su.1.xml:391(para)
+msgid ""
+"On success, <command>su</command> returns the exit value of the command it "
+"executed."
+msgstr ""
+"При успешном выполнении <command>su</command> возвращает код выхода команды, "
+"которая была выполнена."
+
+#: su.1.xml:395(para)
+msgid ""
+"If this command was terminated by a signal, <command>su</command> returns "
+"the number of this signal plus 128."
+msgstr ""
+"Если выполнение команды завершилось по сигналу, то <command>su</command> "
+"возвращает номер этого сигнала плюс 128."
+
+#: su.1.xml:399(para)
+msgid ""
+"If su has to kill the command (because it was asked to terminate, and the "
+"command did not terminate in time), <command>su</command> returns 255."
+msgstr ""
+"Если su завершила команду (так как был запрос сделать это и команда не "
+"завершилась в положенное время), то <command>su</command> завершается с "
+"кодом 255."
+
+#: su.1.xml:411(para)
+msgid "success (<option>--help</option> only)"
+msgstr "Успешно (только для <option>--help</option>)"
+
+#: su.1.xml:417(para)
+msgid "System or authentication failure"
+msgstr "Сбой аутентификации или системы"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><replaceable>
+#: su.1.xml:421(replaceable)
+msgid "126"
+msgstr "126"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: su.1.xml:423(para)
+msgid "The requested command was not found"
+msgstr "Запрошенная команда не найдена"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><replaceable>
+#: su.1.xml:427(replaceable)
+msgid "127"
+msgstr "127"
+
+#: su.1.xml:429(para)
+msgid "The requested command could not be executed"
+msgstr "Запрошенная команда не может быть выполнена"
+
+#: su.1.xml:404(para)
+msgid ""
+"Some exit values from <command>su</command> are independent from the "
+"executed command: <placeholder-1/>"
+msgstr ""
+"Некоторые коды выхода <command>su</command> не зависят от запускаемой "
+"команды: <placeholder-1/>"
+
+#: su.1.xml:438(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><para><command>
+#: sg.1.xml:58(refentrytitle) sg.1.xml:65(refname) sg.1.xml:71(command)
+msgid "sg"
+msgstr "sg"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: sg.1.xml:66(refpurpose)
+msgid "execute command as different group ID"
+msgstr "выполняет команду с правами другой группы"
+
+# type: Content of: <refentry><refsect1><para><option>
+#: sg.1.xml:74(arg)
+msgid "-c"
+msgstr "-c"
+
+#: sg.1.xml:73(arg)
+msgid "group <placeholder-1/> command"
+msgstr "группа <placeholder-1/> команда"
+
+#: sg.1.xml:82(para)
+msgid ""
+"The <command>sg</command> command works similar to <command>newgrp</command> "
+"but accepts a command. The command will be executed with the <filename>/bin/"
+"sh</filename> shell. With most shells you may run <command>sg</command> "
+"from, you need to enclose multi-word commands in quotes. Another difference "
+"between <command>newgrp</command> and <command>sg</command> is that some "
+"shells treat <command>newgrp</command> specially, replacing themselves with "
+"a new instance of a shell that <command>newgrp</command> creates. This "
+"doesn't happen with <command>sg</command>, so upon exit from a <command>sg</"
+"command> command you are returned to your previous group ID."
+msgstr ""
+"Команда <command>sg</command> работает подобно команде <command>newgrp</"
+"command>, но в качестве параметра ожидает команду. Команда будет выполнена "
+"оболочкой <filename>/bin/sh</filename>. В большинстве оболочек, откуда может "
+"запускаться <command>sg</command>, команду из нескольких слов нужно "
+"заключать в кавычки. Другим отличием между <command>newgrp</command> и "
+"<command>sg</command> является то, что некоторые оболочки воспринимают "
+"<command>newgrp</command> особенным образом, заменяя себя новым экземпляром "
+"оболочки, которую создаёт <command>newgrp</command>. Этого не происходит с "
+"командой <command>sg</command>, поэтому после завершения работы <command>sg</"
+"command> вы возвращаетесь в предыдущую группу."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: sg.1.xml:32(term) newgrp.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SYSLOG_SG_ENAB</option> (boolean)"
+msgstr "<option>SYSLOG_SG_ENAB</option> (логический)"
+
+#: sg.1.xml:34(para) newgrp.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable \"syslog\" logging of <command>sg</command> activity."
+msgstr "Включить протоколирование «syslog» действий <command>sg</command>."
+
+#: sg.1.xml:141(para)
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry></phrase>."
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: shadow.5.xml:57(refentrytitle) shadow.5.xml:64(refname)
+#: shadow.3.xml:57(refentrytitle) shadow.3.xml:64(refname)
+#: pwck.8.xml:84(replaceable) grpck.8.xml:76(replaceable)
+msgid "shadow"
+msgstr "shadow"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: shadow.5.xml:65(refpurpose)
+msgid "shadowed password file"
+msgstr "файл теневых паролей"
+
+# type: Content of: <refentry><refsect1><para>
+#: shadow.5.xml:70(para)
+msgid ""
+"<filename>shadow</filename> is a file which contains the password "
+"information for the system's accounts and optional aging information."
+msgstr ""
+"Файл <filename>shadow</filename> содержит шифрованные пароли учётных записей "
+"пользователей и необязательную информацию об устаревании пароля."
+
+# type: Content of: <refentry><refsect1><para>
+#: shadow.5.xml:76(para) gshadow.5.xml:64(para)
+msgid ""
+"This file must not be readable by regular users if password security is to "
+"be maintained."
+msgstr ""
+"Этот файл должен быть недоступен обычному пользователю, если нужно "
+"обеспечить безопасность паролей."
+
+#: shadow.5.xml:81(para)
+msgid ""
+"Each line of this file contains 9 fields, separated by colons (<quote>:</"
+"quote>), in the following order:"
+msgstr ""
+"Каждая строка файла содержит 9 полей, разделённых двоеточиями (<quote>:</"
+"quote>), расположенных в следующем порядке:"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.5.xml:88(emphasis) passwd.5.xml:78(para)
+msgid "login name"
+msgstr "имя пользователя для входа в систему"
+
+#: shadow.5.xml:90(para)
+msgid "It must be a valid account name, which exist on the system."
+msgstr ""
+"Должно содержать правильное имя учётной записи, которая существует в системе."
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.5.xml:96(emphasis) gshadow.5.xml:83(emphasis)
+msgid "encrypted password"
+msgstr "шифрованный пароль"
+
+#: shadow.5.xml:98(para)
+msgid ""
+"This field may be empty, in which case no passwords are required to "
+"authenticate as the specified login name. However, some applications which "
+"read the <filename>/etc/shadow</filename> file may decide not to permit any "
+"access at all if the password field is empty."
+msgstr ""
+"Это поле может быть пустым, то есть для указанной учётной записи не "
+"требуется аутентификация по паролю. Однако, некоторые приложения, читающие "
+"файл <filename>/etc/shadow</filename>, могут вообще отказать в доступе, если "
+"поле пароля пусто."
+
+#: shadow.5.xml:105(para) gshadow.5.xml:107(para)
+#, fuzzy
+#| msgid ""
+#| "A password field which starts with a exclamation mark means that the "
+#| "password is locked. The remaining characters on the line represent the "
+#| "password field before the password was locked."
+msgid ""
+"A password field which starts with an exclamation mark means that the "
+"password is locked. The remaining characters on the line represent the "
+"password field before the password was locked."
+msgstr ""
+"Поле пароля может начинаться с восклицательного знака, означающего, что "
+"пароль заблокирован. Оставшиеся символы в строке представляют поле пароля до "
+"его блокировки."
+
+#: shadow.5.xml:111(para) passwd.5.xml:126(para) gshadow.5.xml:85(para)
+msgid ""
+"Refer to <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry> for details on how this string is interpreted."
+msgstr ""
+"Подробней о пароле смотрите в справочной странице "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>."
+
+#: shadow.5.xml:116(para) passwd.5.xml:131(para)
+msgid ""
+"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)."
+msgstr ""
+"Если поле пароля содержит строку, которая не удовлетворяет требованиям "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, например содержит ! или *, то пользователь не сможет "
+"использовать этот пароль unix для входа (но может войти в систему под "
+"другими паролями)."
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.5.xml:127(emphasis)
+msgid "date of last password change"
+msgstr "дата последней смены пароля"
+
+#: shadow.5.xml:130(para)
+msgid ""
+"The date of the last password change, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr "Дата последней смены пароля в днях начиная с 1 января 1970 года."
+
+#: shadow.5.xml:134(para)
+#, fuzzy
+#| msgid ""
+#| "The value 0 has a special meaning, which is that the user should change "
+#| "her pasword the next time she will log in the system."
+msgid ""
+"The value 0 has a special meaning, which is that the user should change her "
+"password the next time she will log in the system."
+msgstr ""
+"Значение 0 имеет специальное предназначение: оно указывает, что пользователь "
+"должен сменить пароль в следующий раз при входе в систему."
+
+#: shadow.5.xml:139(para)
+msgid "An empty field means that password aging features are disabled."
+msgstr "Пустое значение обозначает, что проверка устаревания пароля выключена."
+
+# type: Content of: <refentry><refsect1><refsect2><title>
+#: shadow.5.xml:146(emphasis)
+msgid "minimum password age"
+msgstr "минимальный срок действия пароля"
+
+#: shadow.5.xml:148(para)
+msgid ""
+"The minimum password age is the number of days the user will have to wait "
+"before she will be allowed to change her password again."
+msgstr ""
+"Минимальный срок действия пароля в днях, которые пользователь должен ждать, "
+"чтобы поменять пароль."
+
+#: shadow.5.xml:153(para)
+msgid "An empty field and value 0 mean that there are no minimum password age."
+msgstr "Пустое значение поля и 0 отключают минимальный срок действия пароля."
+
+# type: Content of: <refentry><refsect1><refsect2><title>
+#: shadow.5.xml:160(emphasis)
+msgid "maximum password age"
+msgstr "максимальный срок действия пароля"
+
+#: shadow.5.xml:162(para)
+msgid ""
+"The maximum password age is the number of days after which the user will "
+"have to change her password."
+msgstr ""
+"Максимальный срок действия пароля в днях, после которого пользователь должен "
+"изменить пароль."
+
+#: shadow.5.xml:166(para)
+msgid ""
+"After this number of days is elapsed, the password may still be valid. The "
+"user should be asked to change her password the next time she will log in."
+msgstr ""
+"По прошествии этого количества дней пароль может быть ещё действительным. "
+"Пользователя нужно попросить изменить пароль при следующем входе."
+
+#: shadow.5.xml:171(para)
+msgid ""
+"An empty field means that there are no maximum password age, no password "
+"warning period, and no password inactivity period (see below)."
+msgstr ""
+"Пустое значение поля означает, что нет максимального срока действия пароля, "
+"нет периода предупреждения о пароле и нет периода неактивности пароля "
+"(смотрите далее)."
+
+#: shadow.5.xml:176(para)
+msgid ""
+"If the maximum password age is lower than the minimum password age, the user "
+"cannot change her password."
+msgstr ""
+"Если максимальный срок действия пароля меньше чем минимальный срок действия "
+"пароля, то пользователь не сможет изменить свой пароль."
+
+# type: Content of: <refentry><refsect1><refsect2><title>
+#: shadow.5.xml:184(emphasis)
+msgid "password warning period"
+msgstr "период предупреждения о пароле"
+
+# type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: shadow.5.xml:187(para)
+msgid ""
+"The number of days before a password is going to expire (see the maximum "
+"password age above) during which the user should be warned."
+msgstr ""
+"Количество дней до устаревания пароля (смотрите максимальный срок действия "
+"пароля) во время которых пользователю выдаётся предупреждение."
+
+#: shadow.5.xml:192(para)
+msgid ""
+"An empty field and value 0 mean that there are no password warning period."
+msgstr "Пустое значение поля и 0 отключают период предупреждения о пароле."
+
+#: shadow.5.xml:200(emphasis)
+msgid "password inactivity period"
+msgstr "период неактивности пароля"
+
+#: shadow.5.xml:203(para)
+msgid ""
+"The number of days after a password has expired (see the maximum password "
+"age above) during which the password should still be accepted (and the user "
+"should update her password during the next login)."
+msgstr ""
+"Количество дней после устаревания пароля (смотрите максимальный срок "
+"действия пароля) во время которых пароль всё ещё принимается (и пользователь "
+"должен обновить свой пароль при следующем входе)."
+
+#: shadow.5.xml:209(para)
+msgid ""
+"After expiration of the password and this expiration period is elapsed, no "
+"login is possible using the current user's password. The user should contact "
+"her administrator."
+msgstr ""
+"После устаревания пароля и истечения этого периода устаревания вход с "
+"текущим паролем становится невозможным. Пользователь должен обратиться к "
+"администратору."
+
+#: shadow.5.xml:214(para)
+msgid ""
+"An empty field means that there are no enforcement of an inactivity period."
+msgstr "Пустое значение поля означает, что период неактивности отсутствует."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: shadow.5.xml:222(emphasis)
+msgid "account expiration date"
+msgstr "дата истечения срока действия учётной записи"
+
+#: shadow.5.xml:225(para)
+msgid ""
+"The date of expiration of the account, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr ""
+"Дата истечения срока действия учётной записи, указывается в днях начиная с 1 "
+"января 1970 года."
+
+#: shadow.5.xml:229(para)
+#, fuzzy
+#| msgid ""
+#| "Note that an account expiration differs from a password expiration. In "
+#| "case of an acount expiration, the user shall not be allowed to login. In "
+#| "case of a password expiration, the user is not allowed to login using her "
+#| "password."
+msgid ""
+"Note that an account expiration differs from a password expiration. In case "
+"of an account expiration, the user shall not be allowed to login. In case of "
+"a password expiration, the user is not allowed to login using her password."
+msgstr ""
+"Заметим, что устаревание учётной записи отличается от устаревания пароля. "
+"При устаревании учётной записи пользователь не сможет войти в систему. При "
+"устаревании пароля пользователь не может войти в систему по этому паролю."
+
+#: shadow.5.xml:235(para)
+msgid "An empty field means that the account will never expire."
+msgstr "Пустое значение обозначает, что учётная запись никогда не устаревает."
+
+#: shadow.5.xml:238(para)
+msgid ""
+"The value 0 should not be used as it is interpreted as either an account "
+"with no expiration, or as an expiration on Jan 1, 1970."
+msgstr ""
+"Значение 0 не должно использоваться, так как это может рассматриваться как "
+"неустаревающая учётная запись или что запись устарела 1 января 1970 года."
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.5.xml:246(emphasis)
+msgid "reserved field"
+msgstr "зарезервированное поле"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.5.xml:248(para)
+msgid "This field is reserved for future use."
+msgstr "Это поле зарезервировано для использования в будущем."
+
+# type: Content of: <refentry><refsect1><para><filename>
+#: shadow.5.xml:270(filename)
+msgid "/etc/shadow-"
+msgstr "/etc/shadow-"
+
+#: shadow.5.xml:272(para)
+msgid "Backup file for /etc/shadow."
+msgstr "резервная копия файла /etc/shadow"
+
+#: shadow.5.xml:273(para) passwd.5.xml:178(para)
+msgid ""
+"Note that this file is used by the tools of the shadow toolsuite, but not by "
+"all user and password management tools."
+msgstr ""
+"Заметим, что этот файл используется программами из комплекта утилит shadow, "
+"но не всеми инструментами управления пользователями и паролями."
+
+#: shadow.5.xml:284(para)
+msgid ""
+"<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refmeta><refmiscinfo>
+#: shadow.3.xml:59(refmiscinfo)
+msgid "Library Calls"
+msgstr "Библиотечные функции"
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: shadow.3.xml:65(refname)
+msgid "getspnam"
+msgstr "getspnam"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.3.xml:66(refpurpose)
+msgid "encrypted password file routines"
+msgstr "процедуры для работы с файлом шифрованных паролей"
+
+# type: Content of: <refentry><refsect1><title>
+#: shadow.3.xml:70(title)
+msgid "SYNTAX"
+msgstr "СИНТАКСИС"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: shadow.3.xml:72(emphasis)
+msgid "#include &lt;shadow.h&gt;"
+msgstr "#include &lt;shadow.h&gt;"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: shadow.3.xml:76(emphasis)
+msgid "struct spwd *getspent();"
+msgstr "struct spwd *getspent();"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: shadow.3.xml:80(emphasis)
+msgid "struct spwd *getspnam(char"
+msgstr "struct spwd *getspnam(char"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: shadow.3.xml:81(emphasis)
+msgid "*name"
+msgstr "*name"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: shadow.3.xml:81(emphasis) shadow.3.xml:94(emphasis)
+#: shadow.3.xml:99(emphasis) shadow.3.xml:105(emphasis)
+msgid ");"
+msgstr ");"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: shadow.3.xml:85(emphasis)
+msgid "void setspent();"
+msgstr "void setspent();"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: shadow.3.xml:89(emphasis)
+msgid "void endspent();"
+msgstr "void endspent();"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: shadow.3.xml:93(emphasis)
+msgid "struct spwd *fgetspent(FILE"
+msgstr "struct spwd *fgetspent(FILE"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><emphasis>
+#: shadow.3.xml:94(emphasis) shadow.3.xml:105(emphasis)
+msgid "*fp"
+msgstr "*fp"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: shadow.3.xml:98(emphasis)
+msgid "struct spwd *sgetspent(char"
+msgstr "struct spwd *sgetspent(char"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: shadow.3.xml:99(emphasis)
+msgid "*cp"
+msgstr "*cp"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: shadow.3.xml:103(emphasis)
+msgid "int putspent(struct spwd"
+msgstr "int putspent(struct spwd"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: shadow.3.xml:104(emphasis)
+msgid "*p,"
+msgstr "*p,"
+
+# type: Content of: <refentry><refsect1><title>
+#: shadow.3.xml:104(emphasis)
+msgid "FILE"
+msgstr "ФАЙЛ"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: shadow.3.xml:109(emphasis)
+msgid "int lckpwdf();"
+msgstr "int lckpwdf();"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: shadow.3.xml:113(emphasis)
+msgid "int ulckpwdf();"
+msgstr "int ulckpwdf();"
+
+#: shadow.3.xml:119(para)
+msgid ""
+"<emphasis remap=\"I\">shadow</emphasis> manipulates the contents of the "
+"shadow password file, <filename>/etc/shadow</filename>. The structure in the "
+"<emphasis remap=\"I\">#include</emphasis> file is:"
+msgstr ""
+"<emphasis remap=\"I\">shadow</emphasis> управляет содержимым файла теневых "
+"паролей, <filename>/etc/shadow</filename>. Структура в файле <emphasis remap="
+"\"I\">#include</emphasis>:"
+
+# type: Content of: <refentry><refsect1><programlisting>
+#: shadow.3.xml:124(programlisting)
+#, no-wrap
+msgid ""
+"struct spwd {\n"
+" char\t\t*sp_namp; /* user login name */\n"
+" char\t\t*sp_pwdp; /* encrypted password */\n"
+" long int\t\tsp_lstchg; /* last password change */\n"
+" long int\t\tsp_min; /* days until change allowed. */\n"
+" long int\t\tsp_max; /* days before change required */\n"
+" long int\t\tsp_warn; /* days warning for expiration */\n"
+" long int\t\tsp_inact; /* days before account inactive */\n"
+" long int\t\tsp_expire; /* date when account expires */\n"
+" unsigned long int\tsp_flag; /* reserved for future use */\n"
+"}\n"
+" "
+msgstr ""
+"struct spwd {\n"
+" char\t \t \t*sp_namp; /* имя пользователя */\n"
+" char\t \t \t*sp_pwdp; /* шифрованный пароль */\n"
+" long int\t \t \tsp_lstchg; /* дата последней смены пароля */\n"
+" long int\t \t \tsp_min; /* дней должно пройти между сменами пароля. */\n"
+" long int\t \t \tsp_max; /* дней перед необходимостью смены пароля */\n"
+" long int\t \t \tsp_warn; /* дней вывода предупреждения об устаревании */\n"
+" long int\t \t \tsp_inact; /* дней перед тем как учётная запись заблокируется */\n"
+" long int\t \t \tsp_expire; /* дата устаревания учётной записи */\n"
+" unsigned long int\tsp_flag; /* зарезервировано */\n"
+"}"
+
+# type: Content of: <refentry><refsect1><para>
+#: shadow.3.xml:136(para)
+msgid "The meanings of each field are:"
+msgstr "Значение каждого поля:"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.3.xml:139(para)
+msgid "sp_namp - pointer to null-terminated user name"
+msgstr ""
+"sp_namp - указатель на строку с именем пользователя, завершающуюся нулевым "
+"символом"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.3.xml:142(para)
+msgid "sp_pwdp - pointer to null-terminated password"
+msgstr ""
+"sp_pwdp - указатель на строку с паролем, завершающуюся нулевым символом"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.3.xml:145(para)
+msgid "sp_lstchg - days since Jan 1, 1970 password was last changed"
+msgstr ""
+"sp_lstchg - количество дней, когда был изменён пароль последний раз, начиная "
+"с 1 января 1970 года"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.3.xml:148(para)
+msgid "sp_min - days before which password may not be changed"
+msgstr "sp_min - количество дней, когда можно не менять пароль"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.3.xml:151(para)
+msgid "sp_max - days after which password must be changed"
+msgstr ""
+"sp_max - количество дней, которое должно пройти, чтобы нужно было поменять "
+"пароль"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.3.xml:154(para)
+msgid ""
+"sp_warn - days before password is to expire that user is warned of pending "
+"password expiration"
+msgstr ""
+"sp_warn - количество дней, когда будет выдаваться предупреждение о скором "
+"устаревании пароля перед тем как пароль устареет"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.3.xml:159(para)
+msgid ""
+"sp_inact - days after password expires that account is considered inactive "
+"and disabled"
+msgstr ""
+"sp_inact - количество дней, которые должны пройти после устаревания пароля, "
+"когда начинать считать, что учётная запись неактивна и заблокирована"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.3.xml:164(para)
+msgid "sp_expire - days since Jan 1, 1970 when account will be disabled"
+msgstr ""
+"sp_expire - дней, после которых учётная запись будет заблокирована, начиная "
+"с 1 января 1970 года"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.3.xml:167(para)
+msgid "sp_flag - reserved for future use"
+msgstr "sp_flag - зарезервировано"
+
+#: shadow.3.xml:175(para)
+msgid ""
+"<emphasis>getspent</emphasis>, <emphasis>getspname</emphasis>, "
+"<emphasis>fgetspent</emphasis>, and <emphasis>sgetspent</emphasis> each "
+"return a pointer to a <emphasis>struct spwd</emphasis>. <emphasis>getspent</"
+"emphasis> returns the next entry from the file, and <emphasis>fgetspent</"
+"emphasis> returns the next entry from the given stream, which is assumed to "
+"be a file of the proper format. <emphasis>sgetspent</emphasis> returns a "
+"pointer to a <emphasis>struct spwd</emphasis> using the provided string as "
+"input. <emphasis>getspnam</emphasis> searches from the current position in "
+"the file for an entry matching <emphasis>name</emphasis>."
+msgstr ""
+"Функции <emphasis>getspent</emphasis>, <emphasis>getspname</emphasis>, "
+"<emphasis>fgetspent</emphasis> и <emphasis>sgetspent</emphasis> возвращают "
+"указатель на структуру <emphasis>struct spwd</emphasis>. <emphasis>getspent</"
+"emphasis> возвращает следующую запись из файла, а <emphasis>fgetspent</"
+"emphasis> возвращает следующую запись из заданного канала, предполагая, что "
+"это файл правильного формата.<emphasis>sgetspent</emphasis> возвращает "
+"указатель на <emphasis>struct spwd</emphasis>, используя предоставленную "
+"строку в качестве входящих данных. <emphasis>getspnam</emphasis> ищет "
+"начиная с текущей позиции в файле запись по имени <emphasis>name</emphasis>."
+
+# type: Content of: <refentry><refsect1><para>
+#: shadow.3.xml:188(para)
+msgid ""
+"<emphasis>setspent</emphasis> and <emphasis>endspent</emphasis> may be used "
+"to begin and end, respectively, access to the shadow password file."
+msgstr ""
+"Функции <emphasis>setspent</emphasis> и <emphasis>endspent</emphasis> можно "
+"использовать для перемещения в начало и конец файла теневых паролей "
+"соответственно."
+
+#: shadow.3.xml:194(para)
+msgid ""
+"The <emphasis>lckpwdf</emphasis> and <emphasis>ulckpwdf</emphasis> routines "
+"should be used to insure exclusive access to the <filename>/etc/shadow</"
+"filename> file. <emphasis>lckpwdf</emphasis> attempts to acquire a lock "
+"using <emphasis>pw_lock</emphasis> for up to 15 seconds. It continues by "
+"attempting to acquire a second lock using <emphasis>spw_lock</emphasis> for "
+"the remainder of the initial 15 seconds. Should either attempt fail after a "
+"total of 15 seconds, <emphasis>lckpwdf</emphasis> returns -1. When both "
+"locks are acquired 0 is returned."
+msgstr ""
+"Функции <emphasis>lckpwdf</emphasis> и <emphasis>ulckpwdf</emphasis> "
+"используются для получения монопольного доступа к файлу <filename>/etc/"
+"shadow</filename>. <emphasis>lckpwdf</emphasis> пытается выполнить "
+"блокировку с помощью <emphasis>pw_lock</emphasis> в течении 15 секунд. Далее "
+"выполняется попытка получить вторую блокировку с помощью <emphasis>spw_lock</"
+"emphasis> в течении времени оставшегося от первоначальных 15 секунд. При "
+"неудаче в любой из блокировок в течении 15 секунд, функция "
+"<emphasis>lckpwdf</emphasis> возвращает -1. Если обе блокировки прошли "
+"успешно возвращается 0."
+
+# type: Content of: <refentry><refsect1><para>
+#: shadow.3.xml:209(para)
+msgid ""
+"Routines return NULL if no more entries are available or if an error occurs "
+"during processing. Routines which have <emphasis>int</emphasis> as the "
+"return value return 0 for success and -1 for failure."
+msgstr ""
+"Функции возвращают NULL, если все записи кончились или произошла ошибка во "
+"время работы. Функции, возвращающие <emphasis>int</emphasis>, возвращают 0 "
+"при успешном выполнении и -1 в случае неудачи."
+
+# type: Content of: <refentry><refsect1><para>
+#: shadow.3.xml:219(para)
+msgid ""
+"These routines may only be used by the superuser as access to the shadow "
+"password file is restricted."
+msgstr ""
+"Данные функции могут использоваться только суперпользователем, так как "
+"доступ к файлу теневых паролей ограничен."
+
+#: shadow.3.xml:239(para)
+msgid ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><para><command>
+#: pwconv.8.xml:63(refentrytitle) pwconv.8.xml:70(refname)
+#: pwconv.8.xml:79(command) login.defs.5.xml:439(term)
+msgid "pwconv"
+msgstr "pwconv"
+
+# type: Content of: <refentry><refsect1><para><command>
+#: pwconv.8.xml:71(refname) pwconv.8.xml:85(command) login.defs.5.xml:448(term)
+msgid "pwunconv"
+msgstr "pwunconv"
+
+# type: Content of: <refentry><refsect1><para><command>
+#: pwconv.8.xml:72(refname) pwconv.8.xml:91(command) login.defs.5.xml:344(term)
+msgid "grpconv"
+msgstr "grpconv"
+
+# type: Content of: <refentry><refsect1><para><command>
+#: pwconv.8.xml:73(refname) pwconv.8.xml:97(command) login.defs.5.xml:350(term)
+msgid "grpunconv"
+msgstr "grpunconv"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: pwconv.8.xml:74(refpurpose)
+msgid "convert to and from shadow passwords and groups"
+msgstr "преобразует пароли пользователей и групп в/из защищённую форму"
+
+#: pwconv.8.xml:106(para)
+msgid ""
+"The <command>pwconv</command> command creates <emphasis remap=\"I\">shadow</"
+"emphasis> from <emphasis remap=\"I\">passwd</emphasis> and an optionally "
+"existing <emphasis remap=\"I\">shadow</emphasis>."
+msgstr ""
+"Команда <command>pwconv</command> создаёт файл <emphasis remap=\"I\">shadow</"
+"emphasis> из файла <emphasis remap=\"I\">passwd</emphasis> и необязательно "
+"существующего файла <emphasis remap=\"I\">shadow</emphasis>."
+
+#: pwconv.8.xml:111(para)
+msgid ""
+"<command>pwconv</command> does not work with <option>USE_TCB</option> "
+"enabled. To convert to tcb passwords, you should first use <command>pwconv</"
+"command> to convert to shadowed passwords by disabling <option>USE_TCB</"
+"option> in <filename>login.defs</filename> and then convert to tcb password "
+"using <command>tcb_convert</command> (and re-enable <option>USE_TCB</option> "
+"in <filename>login.defs</filename>.)"
+msgstr ""
+"Программа <command>pwconv</command> не работает, если включена "
+"<option>USE_TCB</option>. Для преобразования паролей tcb, сначала "
+"используйте команду <command>pwconv</command> для преобразования теневых "
+"паролей, выключив <option>USE_TCB</option> в <filename>login.defs</"
+"filename>, а затем преобразуйте пароль tcb с помощью <command>tcb_convert</"
+"command> (и включите <option>USE_TCB</option> в <filename>login.defs</"
+"filename> опять)."
+
+#: pwconv.8.xml:121(para)
+msgid ""
+"The <command>pwunconv</command> command creates <emphasis remap=\"I"
+"\">passwd</emphasis> from <emphasis remap=\"I\">passwd</emphasis> and "
+"<emphasis remap=\"I\">shadow</emphasis> and then removes <emphasis remap=\"I"
+"\">shadow</emphasis>."
+msgstr ""
+"Команда <command>pwunconv</command> создаёт файл <emphasis remap=\"I"
+"\">passwd</emphasis> из файлов <emphasis remap=\"I\">passwd</emphasis> и "
+"<emphasis remap=\"I\">shadow</emphasis>, а затем удаляет файл <emphasis "
+"remap=\"I\">shadow</emphasis>."
+
+#: pwconv.8.xml:127(para)
+msgid ""
+"<command>pwunconv</command> does not work with <option>USE_TCB</option> "
+"enabled. You should first switch back from tcb to shadowed passwords using "
+"<command>tcb_unconvert</command>, and then disable <option>USE_TCB</option> "
+"in <filename>login.defs</filename> before using <command>pwunconv</command>."
+msgstr ""
+"Программа <command>pwunconv</command> не работает, если включена "
+"<option>USE_TCB</option>. Сначала вам нужно перейти с tcb обратно к "
+"использованию теневых паролей с помощью <command>tcb_unconvert</command>, а "
+"затем выключить <option>USE_TCB</option> в <filename>login.defs</filename> "
+"перед использованием <command>pwunconv</command>."
+
+#: pwconv.8.xml:136(para)
+msgid ""
+"The <command>grpconv</command> command creates <emphasis remap=\"I"
+"\">gshadow</emphasis> from <emphasis remap=\"I\">group</emphasis> and an "
+"optionally existing <emphasis remap=\"I\">gshadow</emphasis>."
+msgstr ""
+"Команда <command>grpconv</command> создаёт файл <emphasis remap=\"I"
+"\">gshadow</emphasis> из файла <emphasis remap=\"I\">group</emphasis> и "
+"необязательно существующего файла <emphasis remap=\"I\">gshadow</emphasis>."
+
+#: pwconv.8.xml:142(para)
+msgid ""
+"The <command>grpunconv</command> command creates <emphasis remap=\"I"
+"\">group</emphasis> from <emphasis remap=\"I\">group</emphasis> and "
+"<emphasis remap=\"I\">gshadow</emphasis> and then removes <emphasis remap=\"I"
+"\">gshadow</emphasis>."
+msgstr ""
+"Команда <command>grpunconv</command> создаёт файл <emphasis remap=\"I"
+"\">group</emphasis> из файлов <emphasis remap=\"I\">group</emphasis> и "
+"<emphasis remap=\"I\">gshadow</emphasis>, а затем удаляет файл <emphasis "
+"remap=\"I\">gshadow</emphasis>."
+
+#: pwconv.8.xml:149(para)
+msgid ""
+"These four programs all operate on the normal and shadow password and group "
+"files: <filename>/etc/passwd</filename>, <filename>/etc/group</filename>, "
+"<filename>/etc/shadow</filename>, and <filename>/etc/gshadow</filename>."
+msgstr ""
+"Эти четыре программы работают с файлами обычных или теневых паролей "
+"пользователей и групп: <filename>/etc/passwd</filename>, <filename>/etc/"
+"group</filename>, <filename>/etc/shadow</filename> и <filename>/etc/gshadow</"
+"filename>."
+
+# type: Content of: <refentry><refsect1><para>
+#: pwconv.8.xml:156(para)
+msgid ""
+"Each program acquires the necessary locks before conversion. "
+"<command>pwconv</command> and <command>grpconv</command> are similar. First, "
+"entries in the shadowed file which don't exist in the main file are removed. "
+"Then, shadowed entries which don't have `x' as the password in the main file "
+"are updated. Any missing shadowed entries are added. Finally, passwords in "
+"the main file are replaced with `x'. These programs can be used for initial "
+"conversion as well to update the shadowed file if the main file is edited by "
+"hand."
+msgstr ""
+"Каждая программа выполняет необходимые блокировки перед преобразованиями. "
+"Команды <command>pwconv</command> и <command>grpconv</command> выполняют "
+"схожий порядок действий. Сначала удаляются записи из теневого файла которых "
+"нет в главном файле. Затем обновляются записи в теневом файле которые не "
+"содержат «x» вместо пароля в главном файле. Далее добавляются отсутствующие "
+"теневые записи. Наконец, пароли в главном файле заменяются символом «x». "
+"Данные программы можно использовать как для первоначального преобразования, "
+"так и для обновления теневого файла, если главный файл редактировался "
+"вручную."
+
+#: pwconv.8.xml:167(para)
+msgid ""
+"<command>pwconv</command> will use the values of <emphasis remap=\"I"
+"\">PASS_MIN_DAYS</emphasis>, <emphasis remap=\"I\">PASS_MAX_DAYS</emphasis>, "
+"and <emphasis remap=\"I\">PASS_WARN_AGE</emphasis> from <filename>/etc/login."
+"defs</filename> when adding new entries to <filename>/etc/shadow</filename>."
+msgstr ""
+"Команда <command>pwconv</command> использует значения переменных <emphasis "
+"remap=\"I\">PASS_MIN_DAYS</emphasis>, <emphasis remap=\"I\">PASS_MAX_DAYS</"
+"emphasis> и <emphasis remap=\"I\">PASS_WARN_AGE</emphasis> из файла "
+"<filename>/etc/login.defs</filename> при добавлении новых записей в файл "
+"<filename>/etc/shadow</filename>."
+
+# type: Content of: <refentry><refsect1><para>
+#: pwconv.8.xml:176(para)
+msgid ""
+"Likewise <command>pwunconv</command> and <command>grpunconv</command> are "
+"similar. Passwords in the main file are updated from the shadowed file. "
+"Entries which exist in the main file but not in the shadowed file are left "
+"alone. Finally, the shadowed file is removed. Some password aging "
+"information is lost by <command>pwunconv</command>. It will convert what it "
+"can."
+msgstr ""
+"Программы <command>pwunconv</command> и <command>grpunconv</command> также "
+"выполняют схожий порядок действий. Пароли в главном файле обновляются из "
+"теневого файла. Записи, которые существуют в главном файле, но не существуют "
+"в теневом файле оставляются как есть. По окончании, теневой файл удаляется. "
+"Информация об устаревании пароля не учитывается программой "
+"<command>pwunconv</command>. Конвертируется только возможное."
+
+#: pwconv.8.xml:188(para)
+msgid ""
+"The options which apply to the <command>pwconv</command>, <command>pwunconv</"
+"command>, <command>grpconv</command>, and <command>grpunconv</command> "
+"commands are:"
+msgstr ""
+"Параметры, применимые к <command>pwconv</command>, <command>pwunconv</"
+"command>, <command>grpconv</command> и <command>grpunconv</command>:"
+
+# type: Content of: <refentry><refsect1><para>
+#: pwconv.8.xml:217(para)
+msgid ""
+"Errors in the password or group files (such as invalid or duplicate entries) "
+"may cause these programs to loop forever or fail in other strange ways. "
+"Please run <command>pwck</command> and <command>grpck</command> to correct "
+"any such errors before converting to or from shadow passwords or groups."
+msgstr ""
+"Ошибки в файлах паролей или групп (типа неверных или дублирующихся записей) "
+"могут зациклить программу или произойдут какие-то другие странные вещи. "
+"Перед конвертацией запустите <command>pwck</command> и <command>grpck</"
+"command>, чтобы исправить возможные ошибки."
+
+#: pwconv.8.xml:228(para)
+msgid ""
+"The following configuration variable in <filename>/etc/login.defs</filename> "
+"changes the behavior of <command>grpconv</command> and <command>grpunconv</"
+"command>:"
+msgstr ""
+"Следующая переменная настройки в <filename>/etc/login.defs</filename> "
+"изменяет поведение <command>grpconv</command> и <command>grpunconv</command>:"
+
+#: pwconv.8.xml:236(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of <command>pwconv</command>:"
+msgstr ""
+"Следующая переменная настройки в <filename>/etc/login.defs</filename> "
+"изменяет поведение <command>pwconv</command>:"
+
+#: pwconv.8.xml:263(para)
+msgid ""
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry><phrase condition=\"tcb\">, "
+"<citerefentry><refentrytitle>tcb_convert</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>tcb_unconvert</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry><phrase condition=\"tcb\">, "
+"<citerefentry><refentrytitle>tcb_convert</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>tcb_unconvert</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry></phrase>."
+
+#: pwck.8.xml:47(contrib) lastlog.8.xml:43(contrib) grpck.8.xml:42(contrib)
+msgid "Creation, 1992"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: pwck.8.xml:63(refentrytitle) pwck.8.xml:70(refname) pwck.8.xml:76(command)
+#: login.defs.5.xml:430(term)
+msgid "pwck"
+msgstr "pwck"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: pwck.8.xml:71(refpurpose)
+msgid "verify integrity of password files"
+msgstr "проверяет целостность файлов паролей"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: pwck.8.xml:80(replaceable) passwd.5.xml:57(refentrytitle)
+#: passwd.5.xml:64(refname) passwd.1.xml:64(refentrytitle)
+#: passwd.1.xml:71(refname) passwd.1.xml:77(command) login.defs.5.xml:419(term)
+msgid "passwd"
+msgstr "passwd"
+
+# type: Content of: <refentry><refsect1><para>
+#: pwck.8.xml:93(para)
+msgid ""
+"The <command>pwck</command> command verifies the integrity of the users and "
+"authentication information. It checks that all entries in <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename><phrase condition=\"tcb"
+"\">(or the files in <filename>/etc/tcb</filename>, when <option>USE_TCB</"
+"option> is enabled)</phrase> have the proper format and contain valid data. "
+"The user is prompted to delete entries that are improperly formatted or "
+"which have other uncorrectable errors."
+msgstr ""
+"Программа <command>pwck</command> проверяет целостность информации о "
+"пользователях и аутентификации. Проверяется формат всех записей файлов "
+"<filename>/etc/passwd</filename> и <filename>/etc/shadow</filename><phrase "
+"condition=\"tcb\">(или файлов в <filename>/etc/tcb</filename>, если включена "
+"<option>USE_TCB</option>)</phrase> и корректность данных каждого поля. В "
+"случае обнаружения ошибок пользователю предлагается подтвердить удаление "
+"записей, имеющих неверный формат или восстановление которых невозможно."
+
+# type: Content of: <refentry><refsect1><para>
+#: pwck.8.xml:105(para) grpck.8.xml:94(para)
+msgid "Checks are made to verify that each entry has:"
+msgstr "Выполняются следующие проверки:"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: pwck.8.xml:108(para) grpck.8.xml:98(para)
+msgid "the correct number of fields"
+msgstr "правильное количество полей"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: pwck.8.xml:111(para)
+msgid "a unique and valid user name"
+msgstr "уникальность и корректность имени пользователя"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: pwck.8.xml:114(para)
+msgid "a valid user and group identifier"
+msgstr "корректность идентификатора пользователя и группы"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: pwck.8.xml:117(para)
+msgid "a valid primary group"
+msgstr "корректность первичной группы"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: pwck.8.xml:120(para)
+msgid "a valid home directory"
+msgstr "корректность домашнего каталога"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: pwck.8.xml:123(para)
+msgid "a valid login shell"
+msgstr "корректность регистрационной оболочки"
+
+#: pwck.8.xml:127(para)
+msgid ""
+"<filename>shadow</filename> checks are enabled when a second file parameter "
+"is specified or when <filename>/etc/shadow</filename> exists on the system."
+msgstr ""
+"Проверки <filename>shadow</filename> выполняются, если указан второй "
+"файловый параметр или когда в системе существует файл <filename>/etc/shadow</"
+"filename>."
+
+#: pwck.8.xml:132(para)
+msgid "These checks are the following:"
+msgstr "Выполняются следующие проверки:"
+
+#: pwck.8.xml:137(para)
+msgid ""
+"every passwd entry has a matching shadow entry, and every shadow entry has a "
+"matching passwd entry"
+msgstr ""
+"что каждая запись passwd имеет соответствующую запись shadow и каждая запись "
+"shadow имеет соответствующую запись passwd"
+
+#: pwck.8.xml:143(para)
+msgid "passwords are specified in the shadowed file"
+msgstr "пароли указаны в теневом файле"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: pwck.8.xml:146(para)
+msgid "shadow entries have the correct number of fields"
+msgstr "записи shadow содержат корректное количество полей"
+
+#: pwck.8.xml:149(para)
+msgid "shadow entries are unique in shadow"
+msgstr "записи shadow уникальны в shadow"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: pwck.8.xml:152(para)
+msgid "the last password changes are not in the future"
+msgstr "дата последней смены пароля не находится в будущем"
+
+# type: Content of: <refentry><refsect1><para>
+#: pwck.8.xml:156(para)
+msgid ""
+"The checks for correct number of fields and unique user name are fatal. If "
+"the entry has the wrong number of fields, the user will be prompted to "
+"delete the entire line. If the user does not answer affirmatively, all "
+"further checks are bypassed. An entry with a duplicated user name is "
+"prompted for deletion, but the remaining checks will still be made. All "
+"other errors are warning and the user is encouraged to run the "
+"<command>usermod</command> command to correct the error."
+msgstr ""
+"Ошибки в количестве полей и уникальности имён пользователей невосстановимы. "
+"Если запись содержит неверное число полей, пользователя попросят подтвердить "
+"удаление всей записи. Если пользователь ответит отрицательно, дальнейшая "
+"проверка выполняться не будет. При ошибке повторения имени пользователя "
+"также возникает запрос на удаление, но в случае отказа проверка будет "
+"продолжена. Обо всех остальных ошибках выводится предупреждение и "
+"пользователю предлагается запустить команду <command>usermod</command>, "
+"чтобы исправить ошибку."
+
+#: pwck.8.xml:167(para)
+msgid ""
+"The commands which operate on the <filename>/etc/passwd</filename> file are "
+"not able to alter corrupted or duplicated entries. <command>pwck</command> "
+"should be used in those circumstances to remove the offending entry."
+msgstr ""
+"Команды, которые работают с файлом <filename>/etc/passwd</filename>, не "
+"могут изменять повреждённые или дублирующиеся записи. Как раз в этом случае "
+"и нужно использовать <command>pwck</command> для удаления испорченной записи."
+
+#: pwck.8.xml:177(para) grpck.8.xml:148(para)
+msgid ""
+"The <option>-r</option> and <option>-s</option> options cannot be combined."
+msgstr ""
+"Параметры <option>-r</option>, <option>-s</option> не могут использоваться "
+"одновременно."
+
+# type: Content of: <refentry><refsect1><para>
+#: pwck.8.xml:181(para)
+msgid "The options which apply to the <command>pwck</command> command are:"
+msgstr "Параметры команды <command>pwck</command>:"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: pwck.8.xml:204(para)
+msgid ""
+"Report errors only. The warnings which do not require any action from the "
+"user won't be displayed."
+msgstr ""
+"Сообщать только об ошибках. Предупреждения, которые не требуют от "
+"пользователя никаких действий, показаны не будут."
+
+#: pwck.8.xml:211(term) grpck.8.xml:163(term)
+msgid "<option>-r</option>, <option>--read-only</option>"
+msgstr "<option>-r</option>, <option>--read-only</option>"
+
+#: pwck.8.xml:213(para)
+msgid "Execute the <command>pwck</command> command in read-only mode."
+msgstr "Выполнять команду <command>pwck</command> в режиме «только чтение»."
+
+#: pwck.8.xml:231(term) grpck.8.xml:185(term)
+msgid "<option>-s</option>, <option>--sort</option>"
+msgstr "<option>-s</option>, <option>--sort</option>"
+
+#: pwck.8.xml:233(para)
+msgid ""
+"Sort entries in <filename>/etc/passwd</filename> and <filename>/etc/shadow</"
+"filename> by UID."
+msgstr ""
+"Отсортировать все записи в файлах <filename>/etc/passwd</filename> и "
+"<filename>/etc/shadow</filename> по числовому идентификатору пользователя."
+
+#: pwck.8.xml:237(para)
+msgid "This option has no effect when <option>USE_TCB</option> is enabled."
+msgstr "Этот параметр не действует, если определена <option>USE_TCB</option>."
+
+#: pwck.8.xml:244(para)
+msgid ""
+"By default, <command>pwck</command> operates on the files <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename><phrase condition=\"tcb"
+"\"> (or the files in <filename>/etc/tcb</filename>)</phrase>. The user may "
+"select alternate files with the <replaceable>passwd</replaceable> and "
+"<replaceable>shadow</replaceable> parameters."
+msgstr ""
+"По умолчанию, команда <command>pwck</command> работает с файлами <filename>/"
+"etc/passwd</filename> и <filename>/etc/shadow</filename><phrase condition="
+"\"tcb\"> (или файлами в <filename>/etc/tcb</filename>)</phrase>. "
+"Пользователь может указать другие файлы с помощью параметров "
+"<replaceable>passwd</replaceable> и <replaceable>shadow</replaceable>."
+
+#: pwck.8.xml:253(para)
+#, fuzzy
+#| msgid ""
+#| "Note that when <option>USE_TCB</option> is enabled, you cannot specify an "
+#| "alternative <replaceable>shadow</replaceable> file. In future releases, "
+#| "this paramater could be replaced by an alternate TCB directory."
+msgid ""
+"Note that when <option>USE_TCB</option> is enabled, you cannot specify an "
+"alternative <replaceable>shadow</replaceable> file. In future releases, this "
+"parameter could be replaced by an alternate TCB directory."
+msgstr ""
+"Заметим, что если определена <option>USE_TCB</option>, то вы не можете "
+"указать другой файл <replaceable>shadow</replaceable>. В следующих версиях "
+"этим параметром можно будет задать другой каталог TCB."
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: pwck.8.xml:322(para)
+msgid "one or more bad password entries"
+msgstr "есть одна или более записей с недопустимыми паролями"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: pwck.8.xml:328(para)
+msgid "can't open password files"
+msgstr "не удалось открыть файл паролей"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: pwck.8.xml:334(para)
+msgid "can't lock password files"
+msgstr "не удалось заблокировать файл паролей"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: pwck.8.xml:340(para)
+msgid "can't update password files"
+msgstr "не удалось изменить файл паролей"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: pwck.8.xml:346(para)
+msgid "can't sort password files"
+msgstr "не удалось отсортировать файл паролей"
+
+# type: Content of: <refentry><refsect1><para>
+#: pwck.8.xml:304(para)
+msgid ""
+"The <command>pwck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Команда <command>pwck</command> завершая работу, возвращает следующие "
+"значения: <placeholder-1/>"
+
+#: pwck.8.xml:355(para)
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: porttime.5.xml:57(refentrytitle) porttime.5.xml:64(refname)
+msgid "porttime"
+msgstr "porttime"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: porttime.5.xml:65(refpurpose)
+msgid "port access time file"
+msgstr "файл с временами доступа к портам"
+
+# type: Content of: <refentry><refsect1><para>
+#: porttime.5.xml:70(para)
+msgid ""
+"<emphasis remap=\"I\">porttime</emphasis> contains a list of tty devices, "
+"user names, and permitted login times."
+msgstr ""
+"Файл <emphasis remap=\"I\">porttime</emphasis> содержит список устройств "
+"tty, имена пользователей и разрешённое время входа."
+
+# type: Content of: <refentry><refsect1><para>
+#: porttime.5.xml:75(para)
+msgid ""
+"Each entry consists of three colon separated fields. The first field is a "
+"comma separated list of tty devices, or an asterisk to indicate that all tty "
+"devices are matched by this entry. The second field is a comma separated "
+"list of user names, or an asterisk to indicated that all user names are "
+"matched by this entry. The third field is a comma separated list of "
+"permitted access times."
+msgstr ""
+"Каждая запись состоит из трёх полей, разделённых двоеточиями. В первом поле "
+"содержится список устройств tty (перечисленных через запятую) или звёздочка, "
+"указывающая, что все устройства tty попадают под правило этой записи. Во "
+"втором поле содержится список имён пользователей (перечисленных через "
+"запятую) или звёздочка, указывающая, что все имена пользователей попадают "
+"под правило этой записи. В третьем поле содержится список (через запятую) "
+"допустимого времени работы."
+
+#: porttime.5.xml:84(para)
+msgid ""
+"Each access time entry consists of zero or more days of the week, "
+"abbreviated <emphasis>Su</emphasis>, <emphasis>Mo</emphasis>, <emphasis>Tu</"
+"emphasis>, <emphasis>We</emphasis>, <emphasis>Th</emphasis>, <emphasis>Fr</"
+"emphasis>, and <emphasis>Sa</emphasis>, followed by a pair of times "
+"separated by a hyphen. The abbreviation <emphasis>Wk</emphasis> may be used "
+"to represent Monday thru Friday, and <emphasis>Al</emphasis> may be used to "
+"indicate every day. If no days are given, <emphasis>Al</emphasis> is assumed."
+msgstr ""
+"Каждая запись времени доступа состоит из нуля или более дней недели, "
+"обозначенных как <emphasis>Su</emphasis>, <emphasis>Mo</emphasis>, "
+"<emphasis>Tu</emphasis>, <emphasis>We</emphasis>, <emphasis>Th</emphasis>, "
+"<emphasis>Fr</emphasis> и <emphasis>Sa</emphasis>, а также временем начала и "
+"конца, записанного через дефис. Сокращение <emphasis>Wk</emphasis> можно "
+"использовать для обозначения периода с понедельника по пятницу, а "
+"<emphasis>Al</emphasis> обозначает каждый день. Если день не задан, то "
+"предполагается <emphasis>Al</emphasis> в качестве значения по умолчанию."
+
+# type: Content of: <refentry><refsect1><title>
+#: porttime.5.xml:98(title)
+msgid "EXAMPLES"
+msgstr "ПРИМЕРЫ"
+
+#: porttime.5.xml:99(para)
+msgid ""
+"The following entry allows access to user <emphasis remap=\"B\">jfh</"
+"emphasis> on every port during weekdays from 9am to 5pm."
+msgstr ""
+"Следующая запись разрешает доступ пользователю <emphasis remap=\"B\">jfh</"
+"emphasis> с любого порта по будням с 9:00 до 17:00."
+
+# type: Content of: <refentry><refsect1><para>
+#: porttime.5.xml:105(para)
+msgid "*:jfh:Wk0900-1700"
+msgstr "*:jfh:Wk0900-1700"
+
+#: porttime.5.xml:107(para)
+msgid ""
+"The following entries allow access only to the users <emphasis>root</"
+"emphasis> and <emphasis>oper</emphasis> on <filename>/dev/console</filename> "
+"at any time. This illustrates how the <filename>/etc/porttime</filename> "
+"file is an ordered list of access times. Any other user would match the "
+"second entry which does not permit access at any time."
+msgstr ""
+"Следующие записи разрешают доступ только пользователям <emphasis>root</"
+"emphasis> и <emphasis>oper</emphasis> с <filename>/dev/console</filename> в "
+"любое время. Это показывает, что файл <filename>/etc/porttime</filename> "
+"обрабатывается в порядке появления записей в файле. Любой другой "
+"пользователь попадёт под правило второй записи, которая не разрешает доступ "
+"в любое время."
+
+# type: Content of: <refentry><refsect1><programlisting>
+#: porttime.5.xml:116(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+" console:root,oper:Al0000-2400\n"
+" console:*:\n"
+" "
+msgstr ""
+"\n"
+" console:root,oper:Al0000-2400\n"
+" console:*:\n"
+" "
+
+#: porttime.5.xml:121(para)
+msgid ""
+"The following entry allows access for the user <emphasis>games</emphasis> on "
+"any port during non-working hours."
+msgstr ""
+"Следующая запись разрешает доступ пользователю <emphasis>games</emphasis> с "
+"любого порта в нерабочие часы."
+
+# type: Content of: <refentry><refsect1><para>
+#: porttime.5.xml:126(para)
+msgid "*:games:Wk1700-0900,SaSu0000-2400"
+msgstr "*:games:Wk1700-0900,SaSu0000-2400"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: porttime.5.xml:133(filename) logoutd.8.xml:92(filename)
+msgid "/etc/porttime"
+msgstr "/etc/porttime"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: porttime.5.xml:135(para) logoutd.8.xml:94(para)
+msgid "File containing port access."
+msgstr ""
+"содержит разрешённое время работы определённых пользователей с определённых "
+"портов"
+
+#: porttime.5.xml:143(para) login.access.5.xml:134(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: passwd.5.xml:65(refpurpose)
+msgid "the password file"
+msgstr "файл паролей"
+
+# type: Content of: <refentry><refsect1><para>
+#: passwd.5.xml:70(para)
+msgid ""
+"<filename>/etc/passwd</filename> contains one line for each user account, "
+"with seven fields delimited by colons (<quote>:</quote>). These fields are:"
+msgstr ""
+"Файл <filename>/etc/passwd</filename> содержит учётные записи пользователей, "
+"по одной в каждой строке. Строка состоит из семи полей, разделённых "
+"двоеточиями (<quote>:</quote>). Поля:"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: passwd.5.xml:81(para)
+msgid "optional encrypted password"
+msgstr "необязательный зашифрованный пароль"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: passwd.5.xml:84(para)
+msgid "numerical user ID"
+msgstr "числовой идентификатор пользователя"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: passwd.5.xml:87(para)
+msgid "numerical group ID"
+msgstr "числовой идентификатор группы"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: passwd.5.xml:90(para)
+msgid "user name or comment field"
+msgstr "ФИО пользователя или поле комментария"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: passwd.5.xml:93(para)
+msgid "user home directory"
+msgstr "домашний каталог пользователя"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: passwd.5.xml:96(para)
+msgid "optional user command interpreter"
+msgstr "необязательный интерпретатор командной строки пользователя"
+
+#: passwd.5.xml:100(para)
+msgid ""
+"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."
+msgstr ""
+
+#: passwd.5.xml:109(para)
+#, fuzzy
+#| msgid ""
+#| "This field may be empty, in which case no passwords are required to "
+#| "authenticate as the specified login name. However, some applications "
+#| "which read the <filename>/etc/shadow</filename> file may decide not to "
+#| "permit any access at all if the password field is empty."
+msgid ""
+"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."
+msgstr ""
+"Это поле может быть пустым, то есть для указанной учётной записи не "
+"требуется аутентификация по паролю. Однако, некоторые приложения, читающие "
+"файл <filename>/etc/shadow</filename>, могут вообще отказать в доступе, если "
+"поле пароля пусто."
+
+#: passwd.5.xml:118(para)
+#, fuzzy
+#| msgid ""
+#| "A password field which starts with a exclamation mark means that the "
+#| "password is locked. The remaining characters on the line represent the "
+#| "password field before the password was locked."
+msgid ""
+"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."
+msgstr ""
+"Поле пароля может начинаться с восклицательного знака, означающего, что "
+"пароль заблокирован. Оставшиеся символы в строке представляют поле пароля до "
+"его блокировки."
+
+#: passwd.5.xml:138(para)
+msgid ""
+"The comment field is used by various system utilities, such as "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"Поле комментария используется различными системными утилитами, такими как "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: passwd.5.xml:144(para)
+msgid ""
+"The home directory field provides the name of the initial working directory. "
+"The <command>login</command> program uses this information to set the value "
+"of the <envar>$HOME</envar> environmental variable."
+msgstr ""
+"В поле домашнего каталога хранится начальный рабочий каталог. Программа "
+"<command>login</command> использует эту информацию для установки значения "
+"переменной окружения <envar>$HOME</envar>."
+
+#: passwd.5.xml:150(para)
+msgid ""
+"The command interpreter field provides the name of the user's command "
+"language interpreter, or the name of the initial program to execute. The "
+"<command>login</command> program uses this information to set the value of "
+"the <envar>$SHELL</envar> environmental variable. If this field is empty, it "
+"defaults to the value <filename>/bin/sh</filename>."
+msgstr ""
+"В поле интерпретатора командной строки хранится название интерпретатора "
+"командной строки пользователя или программы, которая будет запущена первой. "
+"Программа <command>login</command> использует эту информацию для установки "
+"значения переменной окружения <envar>$SHELL</envar>. Если это поле пустое, "
+"то используется значение по умолчанию <filename>/bin/sh</filename>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: passwd.5.xml:171(para)
+msgid "optional encrypted password file"
+msgstr "необязательный файл с шифрованными паролями"
+
+# type: Content of: <refentry><refsect1><para><filename>
+#: passwd.5.xml:175(filename)
+msgid "/etc/passwd-"
+msgstr "/etc/passwd-"
+
+#: passwd.5.xml:177(para)
+msgid "Backup file for /etc/passwd."
+msgstr "резервная копия файла /etc/passwd"
+
+#: passwd.5.xml:189(para)
+msgid ""
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getent</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getpwnam</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwunconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getent</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getpwnam</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwunconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: passwd.1.xml:72(refpurpose)
+msgid "change user password"
+msgstr "изменяет пароль пользователя"
+
+# type: Content of: <refentry><refsect1><para>
+#: 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 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 ""
+"Программа <command>passwd</command> изменяет пароли пользовательских учётных "
+"записей. Обычный пользователь может изменить пароль только своей учётной "
+"записи, суперпользователь может изменить пароль любой учётной записи. "
+"Программа <command>passwd</command> также изменяет информацию об учётной "
+"записи или срок действия пароля."
+
+# type: Content of: <refentry><refsect1><refsect2><title>
+#: passwd.1.xml:98(title)
+msgid "Password Changes"
+msgstr "Изменение пароля"
+
+# type: Content of: <refentry><refsect1><refsect2><para>
+#: passwd.1.xml:99(para)
+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 ""
+"Сначала пользователя попросят ввести старый пароль, если он был. Этот пароль "
+"зашифровывается и сравнивается с имеющимся. У пользователя есть только одна "
+"попытка ввести правильный пароль. Для суперпользователя этот шаг "
+"пропускается, для того чтобы можно было изменить забытый пароль."
+
+# type: Content of: <refentry><refsect1><refsect2><para>
+#: passwd.1.xml:107(para)
+msgid ""
+"After the password has been entered, password aging information is checked "
+"to see if the user is permitted to change the password at this time. If not, "
+"<command>passwd</command> refuses to change the password and exits."
+msgstr ""
+"После ввода пароля проверяется информация об устаревании пароля, чтобы "
+"убедиться, что пользователю разрешено изменять пароль в настоящий момент. "
+"Если нет, то <command>passwd</command> не производит изменение пароля и "
+"завершает работу."
+
+# type: Content of: <refentry><refsect1><refsect2><para>
+#: passwd.1.xml:114(para)
+msgid ""
+"The user is then prompted twice for a replacement password. The second entry "
+"is compared against the first and both are required to match in order for "
+"the password to be changed."
+msgstr ""
+"Затем пользователю предложат дважды ввести новый пароль. Значение второго "
+"ввода сравнивается с первым и для изменения пароли из обеих попыток должны "
+"совпасть."
+
+# type: Content of: <refentry><refsect1><refsect2><para>
+#: passwd.1.xml:120(para)
+msgid ""
+"Then, the password is tested for complexity. As a general guideline, "
+"passwords should consist of 6 to 8 characters including one or more "
+"characters from each of the following sets:"
+msgstr ""
+"Затем пароль тестируется на сложность подбора. Согласно общим принципам, "
+"пароли должны быть длиной от 6 до 8 символов и включать один или более "
+"символов каждого типа:"
+
+# type: Content of: <refentry><refsect1><refsect2><itemizedlist><listitem><para>
+#: passwd.1.xml:128(para)
+msgid "lower case alphabetics"
+msgstr "строчные буквы"
+
+# type: Content of: <refentry><refsect1><refsect2><itemizedlist><listitem><para>
+#: passwd.1.xml:131(para)
+msgid "digits 0 thru 9"
+msgstr "цифры от 0 до 9"
+
+# type: Content of: <refentry><refsect1><refsect2><itemizedlist><listitem><para>
+#: passwd.1.xml:134(para)
+msgid "punctuation marks"
+msgstr "знаки пунктуации"
+
+# type: Content of: <refentry><refsect1><refsect2><para>
+#: passwd.1.xml:138(para)
+msgid ""
+"Care must be taken not to include the system default erase or kill "
+"characters. <command>passwd</command> will reject any password which is not "
+"suitably complex."
+msgstr ""
+"Не включайте системные символы стирания и удаления. Программа "
+"<command>passwd</command> не примет пароль, который не имеет достаточной "
+"сложности."
+
+# type: Content of: <refentry><refsect1><refsect2><title>
+#: passwd.1.xml:147(title)
+msgid "Hints for user passwords"
+msgstr "Выбор пароля"
+
+# type: Content of: <refentry><refsect1><refsect2><para>
+#: passwd.1.xml:148(para)
+msgid ""
+"The security of a password depends upon the strength of the encryption "
+"algorithm and the size of the key space. The legacy <emphasis>UNIX</"
+"emphasis> System encryption method is based on the NBS DES algorithm. More "
+"recent methods are now recommended (see <option>ENCRYPT_METHOD</option>). "
+"The size of the key space depends upon the randomness of the password which "
+"is selected."
+msgstr ""
+"Безопасность пароля зависит от стойкости алгоритма шифрования и размера "
+"пространства ключа. В старых системах <emphasis>UNIX</emphasis> метод "
+"шифрования основывался на алгоритме NBS DES. Сейчас рекомендуют более новые "
+"методы (смотрите <option>ENCRYPT_METHOD</option>). Размер пространства ключа "
+"зависит от степени произвольности выбранного пароля."
+
+# type: Content of: <refentry><refsect1><refsect2><para>
+#: passwd.1.xml:157(para)
+msgid ""
+"Compromises in password security normally result from careless password "
+"selection or handling. For this reason, you should not select a password "
+"which appears in a dictionary or which must be written down. The password "
+"should also not be a proper name, your license number, birth date, or street "
+"address. Any of these may be used as guesses to violate system security."
+msgstr ""
+"При обеспечении безопасности пароля выбирают нечто среднее между сложным "
+"паролем и сложностью работы с ним. По этой причине, вы не должны "
+"использовать пароль, который является словом из словаря или который придётся "
+"записать из-за его сложности. Также, пароль не должен быть названием чего-"
+"либо, номером вашей лицензии, днём рождения и домашним адресом. Обо всём "
+"этом легко догадаться, что приведёт к нарушению безопасности системы."
+
+#: passwd.1.xml:166(para)
+#, fuzzy
+#| msgid ""
+#| "You can find advices on how to choose a strong password on http://en."
+#| "wikipedia.org/wiki/Password_strength"
+msgid ""
+"You can find advice on how to choose a strong password on http://en."
+"wikipedia.org/wiki/Password_strength"
+msgstr ""
+"О том, как выбрать стойкий пароль, читайте в http://ru.wikipedia.org/wiki/"
+"Сложность_пароля."
+
+# type: Content of: <refentry><refsect1><para>
+#: passwd.1.xml:175(para)
+msgid "The options which apply to the <command>passwd</command> command are:"
+msgstr "Параметры команды <command>passwd</command>:"
+
+#: passwd.1.xml:180(term) faillog.8.xml:96(term)
+msgid "<option>-a</option>, <option>--all</option>"
+msgstr "<option>-a</option>, <option>--all</option>"
+
+#: passwd.1.xml:184(para)
+msgid ""
+"This option can be used only with <option>-S</option> and causes show status "
+"for all users."
+msgstr ""
+"Этот параметр можно использовать только вместе с <option>-S</option> для "
+"вывода статуса всех пользователей."
+
+#: passwd.1.xml:191(term)
+msgid "<option>-d</option>, <option>--delete</option>"
+msgstr "<option>-d</option>, <option>--delete</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:195(para)
+msgid ""
+"Delete a user's password (make it empty). This is a quick way to disable a "
+"password for an account. It will set the named account passwordless."
+msgstr ""
+"Удалить пароль пользователя (сделать его пустым). Это быстрый способ "
+"заблокировать пароль учётной записи. Это сделает указанную учётную запись "
+"беспарольной."
+
+#: passwd.1.xml:203(term)
+msgid "<option>-e</option>, <option>--expire</option>"
+msgstr "<option>-e</option>, <option>--expire</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:207(para)
+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)
+msgid ""
+"<option>-i</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-i</option>, <option>--inactive</option>&nbsp;<replaceable>ДНЕЙ</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:224(para)
+msgid ""
+"This option is used to disable an account after the password has been "
+"expired for a number of days. After a user account has had an expired "
+"password for <replaceable>INACTIVE</replaceable> days, the user may no "
+"longer sign on to the account."
+msgstr ""
+"Этот параметр используется для блокировки учётной записи по прошествии "
+"заданного числа дней после устаревания пароля. То есть, если пароль устарел "
+"и прошло более указанных <replaceable>ДНЕЙ</replaceable>, то пользователь "
+"больше не сможет использовать данную учётную запись."
+
+#: passwd.1.xml:233(term)
+msgid "<option>-k</option>, <option>--keep-tokens</option>"
+msgstr "<option>-k</option>, <option>--keep-tokens</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:237(para)
+msgid ""
+"Indicate password change should be performed only for expired authentication "
+"tokens (passwords). The user wishes to keep their non-expired tokens as "
+"before."
+msgstr ""
+"Указывает, что изменение пароля нужно выполнить только для устаревших ключей "
+"аутентификации (паролей). Пользователи хотят оставить свои непросроченные "
+"ключи нетронутыми."
+
+#: passwd.1.xml:245(term)
+msgid "<option>-l</option>, <option>--lock</option>"
+msgstr "<option>-l</option>, <option>--lock</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:249(para)
+msgid ""
+"Lock the password of the named account. This option disables a password by "
+"changing it to a value which matches no possible encrypted value (it adds a "
+"´!´ at the beginning of the password)."
+msgstr ""
+"Заблокировать пароль указанной учётной записи. Этот параметр блокирует "
+"пароль, изменяя его значение на вариант, который не может быть шифрованным "
+"паролем (добавляется символ «!» в начало пароля)."
+
+#: passwd.1.xml:255(para)
+msgid ""
+"Note that this does not disable the account. The user may still be able to "
+"login using another authentication token (e.g. an SSH key). To disable the "
+"account, administrators should use <command>usermod --expiredate 1</command> "
+"(this set the account's expire date to Jan 2, 1970)."
+msgstr ""
+"Заметим, что это не блокирует учётную запись. Пользователь всё ещё может "
+"войти в систему с помощью другого способа аутентификации (например, с "
+"помощью ключа SSH). Чтобы заблокировать учётную запись, администратор должен "
+"использовать команду <command>usermod --expiredate 1</command> (это "
+"установит дату устаревания учётной запись равной 2 января 1970 года)."
+
+#: passwd.1.xml:262(para)
+msgid "Users with a locked password are not allowed to change their password."
+msgstr "Посетитель с заблокированным паролем не может изменить свой пароль."
+
+#: passwd.1.xml:269(term)
+msgid ""
+"<option>-n</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-n</option>, <option>--mindays</option>&nbsp;<replaceable>МИН_ДНЕЙ</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:273(para) chage.1.xml:174(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 their password at any time."
+msgstr ""
+"Задать <replaceable>минимальное количество дней</replaceable> между сменами "
+"пароля. Нулевое значение этого поля указывает на то, что пользователь может "
+"менять свой пароль когда захочет."
+
+#: passwd.1.xml:291(term)
+msgid ""
+"<option>-r</option>, <option>--repository</option>&nbsp;"
+"<replaceable>REPOSITORY</replaceable>"
+msgstr ""
+"<option>-r</option>, <option>--repository</option>&nbsp;"
+"<replaceable>РЕПОЗИТОРИЙ</replaceable>"
+
+#: passwd.1.xml:295(para)
+msgid "change password in <replaceable>REPOSITORY</replaceable> repository"
+msgstr "Изменить пароль в <replaceable>РЕПОЗИТОРИИ</replaceable>."
+
+#: passwd.1.xml:313(term)
+msgid "<option>-S</option>, <option>--status</option>"
+msgstr "<option>-S</option>, <option>--status</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:317(para)
+msgid ""
+"Display account status information. The status information consists of 7 "
+"fields. The first field is the user's login name. The second field indicates "
+"if the user account has a locked password (L), has no password (NP), or has "
+"a usable password (P). The third field gives the date of the last password "
+"change. The next four fields are the minimum age, maximum age, warning "
+"period, and inactivity period for the password. These ages are expressed in "
+"days."
+msgstr ""
+"Показать состояние учётной записи. Информация о состоянии содержит 7 полей. "
+"Первое поле содержит имя учётной записи. Второе поле указывает, заблокирован "
+"ли пароль учётной записи (L), она без пароля (NP) или у неё есть рабочий "
+"пароль (P). Третье поле хранит дату последнего изменения пароля. В следующих "
+"четырёх полях хранятся минимальный срок, максимальный срок, период выдачи "
+"предупреждения и период неактивности пароля. Эти сроки измеряются в днях."
+
+#: passwd.1.xml:331(term)
+msgid "<option>-u</option>, <option>--unlock</option>"
+msgstr "<option>-u</option>, <option>--unlock</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:335(para)
+msgid ""
+"Unlock the password of the named account. This option re-enables a password "
+"by changing the password back to its previous value (to the value before "
+"using the <option>-l</option> option)."
+msgstr ""
+"Разблокировать пароль указанной учётной записи. Этот параметр разблокирует "
+"пароль, возвращая его прежнее значение (которое было перед использованием "
+"параметра <option>-l</option>)."
+
+#: passwd.1.xml:344(term)
+msgid ""
+"<option>-w</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>WARN_DAYS</replaceable>"
+msgstr ""
+"<option>-w</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>ПРЕД_ДНЕЙ</replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: 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 their password is "
+"about to expire."
+msgstr ""
+"Установить число дней выдачи предупреждения, перед тем как потребуется смена "
+"пароля. В параметре <replaceable>ПРЕД_ДНЕЙ</replaceable> указывается число "
+"дней перед тем как пароль устареет, в течении которых пользователю будут "
+"напоминать, что пароль скоро устареет."
+
+#: passwd.1.xml:357(term)
+msgid ""
+"<option>-x</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-x</option>, <option>--maxdays</option>&nbsp;<replaceable>МАКС_ДНЕЙ</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:361(para)
+msgid ""
+"Set the maximum number of days a password remains valid. After "
+"<replaceable>MAX_DAYS</replaceable>, the password is required to be changed."
+msgstr ""
+"Установить максимальное количество дней, в течении которых пароль остаётся "
+"рабочим. После <replaceable>МАКС_ДНЕЙ</replaceable> пароль нужно изменить."
+
+#: passwd.1.xml:366(para) chage.1.xml:195(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as "
+"<replaceable>MAX_DAYS</replaceable> will remove checking a password's "
+"validity."
+msgstr ""
+"Значение <emphasis remap=\"I\">-1</emphasis> в параметре "
+"<replaceable>МАКС_ДНЕЙ</replaceable> отменяет проверку пароля."
+
+# type: Content of: <refentry><refsect1><para>
+#: passwd.1.xml:378(para)
+msgid ""
+"Password complexity checking may vary from site to site. The user is urged "
+"to select a password as complex as he or she feels comfortable with."
+msgstr ""
+"Сложность пароля проверяется на разных машинах по разному. Пользователю "
+"настоятельно рекомендуется выбирать пароль такой сложности, чтобы ему "
+"нормально работалось."
+
+#: passwd.1.xml:383(para)
+msgid ""
+"Users may not be able to change their password on a system if NIS is enabled "
+"and they are not logged into the NIS server."
+msgstr ""
+"Пользователи не могут изменять свои пароли в системе, если включён NIS и они "
+"не вошли на сервер NIS."
+
+#: passwd.1.xml:388(para)
+msgid ""
+"<command>passwd</command> uses PAM to authenticate users and to change their "
+"passwords."
+msgstr ""
+"Команда <command>passwd</command> для аутентификации пользователей и для "
+"смены паролей использует PAM."
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>ENCRYPT_METHOD</option> (string)"
+msgstr "<option>ENCRYPT_METHOD</option> (строка)"
+
+#: passwd.1.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: gpasswd.1.xml:32(para) chpasswd.8.xml:32(para) chgpasswd.8.xml:32(para)
+msgid ""
+"This defines the system default encryption algorithm for encrypting "
+"passwords (if no algorithm are specified on the command line)."
+msgstr ""
+"Задаёт системный алгоритм шифрования по умолчанию для шифрования паролей "
+"(используется, если алгоритм не указан в командной строке)."
+
+#: passwd.1.xml:36(para) newusers.8.xml:36(para) login.defs.5.xml:36(para)
+#: gpasswd.1.xml:36(para) chpasswd.8.xml:36(para) chgpasswd.8.xml:36(para)
+msgid ""
+"It can take one of these values: <replaceable>DES</replaceable> (default), "
+"<replaceable>MD5</replaceable><phrase condition=\"sha_crypt\">, "
+"<replaceable>SHA256</replaceable>, <replaceable>SHA512</replaceable></"
+"phrase>."
+msgstr ""
+"Возможны следующие значения: <replaceable>DES</replaceable> (по умолчанию), "
+"<replaceable>MD5</replaceable><phrase condition=\"sha_crypt\">, "
+"<replaceable>SHA256</replaceable>, <replaceable>SHA512</replaceable></"
+"phrase>."
+
+#: passwd.1.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: gpasswd.1.xml:43(para) chpasswd.8.xml:43(para) chgpasswd.8.xml:43(para)
+msgid ""
+"Note: this parameter overrides the <option>MD5_CRYPT_ENAB</option> variable."
+msgstr ""
+"Замечание: этот параметр переопределяет переменную <option>MD5_CRYPT_ENAB</"
+"option>."
+
+#: passwd.1.xml:47(para) passwd.1.xml:53(para) passwd.1.xml:62(para)
+#: newusers.8.xml:47(para) newusers.8.xml:53(para) newusers.8.xml:62(para)
+#: login.defs.5.xml:47(para) login.defs.5.xml:53(para)
+#: login.defs.5.xml:62(para) gpasswd.1.xml:47(para) gpasswd.1.xml:53(para)
+#: gpasswd.1.xml:62(para) chpasswd.8.xml:47(para) chpasswd.8.xml:53(para)
+#: chpasswd.8.xml:62(para) chgpasswd.8.xml:47(para) chgpasswd.8.xml:53(para)
+#: chgpasswd.8.xml:62(para)
+msgid ""
+"Note: This only affect the generation of group passwords. The generation of "
+"user passwords is done by PAM and subject to the PAM configuration. It is "
+"recommended to set this variable consistently with the PAM configuration."
+msgstr ""
+"Замечание: действует только при генерации паролей к группам. Генерация "
+"пользовательских паролей выполняется PAM и там же настраивается. "
+"Рекомендуется устанавливать значение этой переменной согласно настройкам PAM."
+
+#: passwd.1.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: gpasswd.1.xml:32(term) chpasswd.8.xml:32(term) chgpasswd.8.xml:32(term)
+msgid "<option>MD5_CRYPT_ENAB</option> (boolean)"
+msgstr "<option>MD5_CRYPT_ENAB</option> (логический)"
+
+#: passwd.1.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: gpasswd.1.xml:34(para) chpasswd.8.xml:34(para) chgpasswd.8.xml:34(para)
+msgid ""
+"Indicate if passwords must be encrypted using the MD5-based algorithm. If "
+"set to <replaceable>yes</replaceable>, new passwords will be encrypted using "
+"the MD5-based algorithm compatible with the one used by recent releases of "
+"FreeBSD. It supports passwords of unlimited length and longer salt strings. "
+"Set to <replaceable>no</replaceable> if you need to copy encrypted passwords "
+"to other systems which don't understand the new algorithm. Default is "
+"<replaceable>no</replaceable>."
+msgstr ""
+"Обозначает, что пароль должен быть зашифрован по алгоритму на основе MD5. "
+"Если значение равно <replaceable>yes</replaceable>, то новые пароли будут "
+"зашифрованы по алгоритму на основе MD5, совместимому с используемым в новых "
+"версиях FreeBSD. Он поддерживает пароли неограниченной длины и имеет более "
+"длинную строку соли. Установите в <replaceable>no</replaceable>, если вам "
+"нужно копировать шифрованные пароли в другие системы, которые не "
+"поддерживают новый алгоритм. По умолчанию <replaceable>no</replaceable>."
+
+#: passwd.1.xml:44(para) newusers.8.xml:44(para) login.defs.5.xml:44(para)
+#: gpasswd.1.xml:44(para) chpasswd.8.xml:44(para) chgpasswd.8.xml:44(para)
+msgid ""
+"This variable is superseded by the <option>ENCRYPT_METHOD</option> variable "
+"or by any command line option used to configure the encryption algorithm."
+msgstr ""
+"Эта переменная переопределяется переменной <option>ENCRYPT_METHOD</option> "
+"или любым параметром командной строки, который задаёт алгоритм шифрования."
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid ""
+"This variable is deprecated. You should use <option>ENCRYPT_METHOD</option>."
+msgstr "Эта переменная устарела; используйте <option>ENCRYPT_METHOD</option>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>OBSCURE_CHECKS_ENAB</option> (boolean)"
+msgstr "<option>OBSCURE_CHECKS_ENAB</option> (логический)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable additional checks upon password changes."
+msgstr "Включает дополнительные проверки при смене пароля."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_ALWAYS_WARN</option> (boolean)"
+msgstr "<option>PASS_ALWAYS_WARN</option> (логический)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Warn about weak passwords (but still allow them) if you are root."
+msgstr ""
+"Предупреждать о слабых паролях (но разрешать их использовать) для "
+"суперпользователя."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_CHANGE_TRIES</option> (number)"
+msgstr "<option>PASS_CHANGE_TRIES</option> (число)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Maximum number of attempts to change password if rejected (too easy)."
+msgstr ""
+"Максимальное количество попыток смены пароля (слишком простого) при "
+"непрохождении проверки."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_MAX_LEN</option> (number)"
+msgstr "<option>PASS_MAX_LEN</option> (число)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: passwd.1.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>PASS_MIN_LEN</option> (number)"
+msgstr "<option>PASS_MIN_LEN</option> (число)"
+
+#: passwd.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"Number of significant characters in the password for crypt(). "
+"<option>PASS_MAX_LEN</option> is 8 by default. Don't change unless your "
+"crypt() is better. This is ignored if <option>MD5_CRYPT_ENAB</option> set to "
+"<replaceable>yes</replaceable>."
+msgstr ""
+"Количество значимых символов в пароле для crypt(). По умолчанию значение "
+"<option>PASS_MAX_LEN</option> равно 8. Не изменяйте, если ваш crypt() лучше. "
+"Игнорируется, если значение <option>MD5_CRYPT_ENAB</option> равно "
+"<replaceable>yes</replaceable>."
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>SHA_CRYPT_MIN_ROUNDS</option> (number)"
+msgstr "<option>SHA_CRYPT_MIN_ROUNDS</option> (число)"
+
+#: passwd.1.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: gpasswd.1.xml:31(term) chpasswd.8.xml:31(term) chgpasswd.8.xml:31(term)
+msgid "<option>SHA_CRYPT_MAX_ROUNDS</option> (number)"
+msgstr "<option>SHA_CRYPT_MAX_ROUNDS</option> (число)"
+
+#: passwd.1.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: gpasswd.1.xml:33(para) chpasswd.8.xml:33(para) chgpasswd.8.xml:33(para)
+msgid ""
+"When <option>ENCRYPT_METHOD</option> is set to <replaceable>SHA256</"
+"replaceable> or <replaceable>SHA512</replaceable>, this defines the number "
+"of SHA rounds used by the encryption algorithm by default (when the number "
+"of rounds is not specified on the command line)."
+msgstr ""
+"Если значение <option>ENCRYPT_METHOD</option> равно <replaceable>SHA256</"
+"replaceable> или <replaceable>SHA512</replaceable>, эта переменная "
+"определяет количество раундов SHA, используемых алгоритмом шифрования по "
+"умолчанию (если количество раундов не задано в командной строке)."
+
+#: passwd.1.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: gpasswd.1.xml:40(para) chpasswd.8.xml:40(para) chgpasswd.8.xml:40(para)
+msgid ""
+"With a lot of rounds, it is more difficult to brute forcing the password. "
+"But note also that more CPU resources will be needed to authenticate users."
+msgstr ""
+"Увеличение количества раундов повышает сложность подбора пароля простым "
+"перебором. Но заметим, что при этом для аутентификации пользователей "
+"требуется большее количество процессорных ресурсов."
+
+#: passwd.1.xml:45(para) newusers.8.xml:45(para) login.defs.5.xml:45(para)
+#: gpasswd.1.xml:45(para) chpasswd.8.xml:45(para) chgpasswd.8.xml:45(para)
+msgid ""
+"If not specified, the libc will choose the default number of rounds (5000)."
+msgstr ""
+"Если не задана, то libc выбирает значение количества раундов по умолчанию "
+"(5000)."
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid "The values must be inside the 1000-999,999,999 range."
+msgstr "Значения должны лежать в диапазоне 1000-999999999."
+
+#: passwd.1.xml:52(para) newusers.8.xml:52(para) login.defs.5.xml:52(para)
+#: gpasswd.1.xml:52(para) chpasswd.8.xml:52(para) chgpasswd.8.xml:52(para)
+msgid ""
+"If only one of the <option>SHA_CRYPT_MIN_ROUNDS</option> or "
+"<option>SHA_CRYPT_MAX_ROUNDS</option> values is set, then this value will be "
+"used."
+msgstr ""
+"Если задано какое-то одно значение — <option>SHA_CRYPT_MIN_ROUNDS</option> "
+"или <option>SHA_CRYPT_MAX_ROUNDS</option> — то будет использовано это "
+"значение."
+
+#: passwd.1.xml:57(para) newusers.8.xml:57(para) login.defs.5.xml:57(para)
+#: gpasswd.1.xml:57(para) chpasswd.8.xml:57(para) chgpasswd.8.xml:57(para)
+msgid ""
+"If <option>SHA_CRYPT_MIN_ROUNDS</option> &gt; <option>SHA_CRYPT_MAX_ROUNDS</"
+"option>, the highest value will be used."
+msgstr ""
+"Если <option>SHA_CRYPT_MIN_ROUNDS</option> &gt; "
+"<option>SHA_CRYPT_MAX_ROUNDS</option>, то используется большее значение."
+
+# type: Content of: <refentry><refsect1><para><filename>
+#: passwd.1.xml:434(filename)
+msgid "/etc/pam.d/passwd"
+msgstr "/etc/pam.d/passwd"
+
+#: passwd.1.xml:436(para)
+msgid "PAM configuration for <command>passwd</command>."
+msgstr "настройки PAM для <command>passwd</command>"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:456(para) chage.1.xml:297(para)
+msgid "permission denied"
+msgstr "доступ запрещён"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:462(para)
+msgid "invalid combination of options"
+msgstr "недопустимая комбинация параметров"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:468(para)
+msgid "unexpected failure, nothing done"
+msgstr "неожиданная ошибка при работе, ничего не сделано"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:474(para)
+msgid "unexpected failure, <filename>passwd</filename> file missing"
+msgstr ""
+"неожиданная ошибка при работе, отсутствует файл <filename>passwd</filename>"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:480(para)
+msgid "<filename>passwd</filename> file busy, try again"
+msgstr ""
+"файл <filename>passwd</filename> занят другой программой, попробуйте ещё раз"
+
+# type: Content of: <refentry><refsect1><para>
+#: passwd.1.xml:444(para)
+msgid ""
+"The <command>passwd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Программа <command>passwd</command> завершая работу, возвращает следующие "
+"значения: <placeholder-1/>"
+
+#: passwd.1.xml:495(para)
+msgid ""
+"<citerefentry><refentrytitle>chpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <phrase condition=\"no_pam"
+"\"><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <phrase condition=\"no_pam"
+"\"><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><para><command>
+#: nologin.8.xml:46(refentrytitle) nologin.8.xml:53(refname)
+#: nologin.8.xml:59(command)
+msgid "nologin"
+msgstr "nologin"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: nologin.8.xml:54(refpurpose)
+msgid "politely refuse a login"
+msgstr "вежливо отказывает во входе в систему"
+
+# type: Content of: <refentry><refsect1><para>
+#: nologin.8.xml:65(para)
+msgid ""
+"The <command>nologin</command> command displays a message that an account is "
+"not available and exits non-zero. It is intended as a replacement shell "
+"field for accounts that have been disabled."
+msgstr ""
+"Программа <command>nologin</command> выдаёт сообщение, что учётная запись "
+"недоступна и завершает работу с ненулевым кодом возврата. Она предназначена "
+"для замены оболочки командной строки в поле оболочки у заблокированных "
+"учётных записей."
+
+#: nologin.8.xml:70(para)
+msgid ""
+"To disable all logins, investigate <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"Чтобы заблокировать все учётные записи посмотрите справочную страницу "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+
+#: nologin.8.xml:75(para)
+msgid ""
+"If <command>SSH_ORIGINAL_COMMAND</command> is populated it will be logged."
+msgstr ""
+
+#: nologin.8.xml:82(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><title>
+#: nologin.8.xml:93(title)
+msgid "HISTORY"
+msgstr "ИСТОРИЯ"
+
+# type: Content of: <refentry><refsect1><para>
+#: nologin.8.xml:94(para)
+#, fuzzy
+#| msgid "The <command>nologin</command> command appearred in BSD 4.4."
+msgid "The <command>nologin</command> command appeared in BSD 4.4."
+msgstr "Программа <command>nologin</command> впервые появилась в BSD 4.4."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: newusers.8.xml:73(refentrytitle) newusers.8.xml:80(refname)
+#: newusers.8.xml:86(command) login.defs.5.xml:400(term)
+msgid "newusers"
+msgstr "newusers"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: newusers.8.xml:81(refpurpose)
+msgid "update and create new users in batch"
+msgstr ""
+"обновляет и создаёт новые учётные записи пользователей в пакетном режиме"
+
+#: newusers.8.xml:91(replaceable)
+msgid "file"
+msgstr "файл"
+
+# type: Content of: <refentry><refsect1><para>
+#: newusers.8.xml:98(para)
+msgid ""
+"The <command>newusers</command> command reads a <replaceable>file</"
+"replaceable> (or the standard input by default) and uses this information to "
+"update a set of existing users or to create new users. Each line is in the "
+"same format as the standard password file (see "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>) with the exceptions explained below:"
+msgstr ""
+"Программа <command>newusers</command> читает <replaceable>файл</replaceable> "
+"(или по умолчанию стандартный ввод) и использует эту информацию для "
+"обновления группы существующих или создания новых учётных записей. Каждая "
+"строка имеет формат стандартного файла паролей (смотрите "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>) за исключением:"
+
+#: newusers.8.xml:106(para)
+msgid "pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell"
+msgstr "pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><replaceable>
+#: newusers.8.xml:111(emphasis)
+msgid "pw_name"
+msgstr "pw_name"
+
+#: newusers.8.xml:114(para)
+msgid "This is the name of the user."
+msgstr "Имя пользователя."
+
+#: newusers.8.xml:117(para)
+#, fuzzy
+#| msgid ""
+#| "It can be the name of a new user or the name of an existing user (or an "
+#| "user created before by <command>newusers</command>). In case of an "
+#| "existing user, the user's information will be changed, otherwise a new "
+#| "user will be created."
+msgid ""
+"It can be the name of a new user or the name of an existing user (or a user "
+"created before by <command>newusers</command>). In case of an existing user, "
+"the user's information will be changed, otherwise a new user will be created."
+msgstr ""
+"Это может быть имя нового пользователя или имя существующего пользователя "
+"(или пользователя, созданного <command>newusers</command> ранее). Если "
+"пользователь существует, то будет изменена информация о пользователе, или же "
+"создаётся новый пользователь."
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: newusers.8.xml:128(emphasis)
+msgid "pw_passwd"
+msgstr "pw_passwd"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: newusers.8.xml:131(para)
+msgid ""
+"This field will be encrypted and used as the new value of the encrypted "
+"password."
+msgstr ""
+"Это поле будет зашифровано и использовано как новое значение шифрованного "
+"пароля."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><replaceable>
+#: newusers.8.xml:139(emphasis)
+msgid "pw_uid"
+msgstr " pw_gid"
+
+#: newusers.8.xml:142(para)
+msgid "This field is used to define the UID of the user."
+msgstr "Это поле используется для определения UID пользователя."
+
+#: newusers.8.xml:145(para)
+#, fuzzy
+#| msgid ""
+#| "If the field is empty, an new (unused) UID will be defined automatically "
+#| "by <command>newusers</command>."
+msgid ""
+"If the field is empty, a new (unused) UID will be defined automatically by "
+"<command>newusers</command>."
+msgstr ""
+"Если это поле пусто, то командой <command>newusers</command> автоматически "
+"определяется новый (неиспользованный) UID."
+
+#: newusers.8.xml:149(para)
+msgid "If this field contains a number, this number will be used as the UID."
+msgstr ""
+"Если в этом поле указано число, то оно будет использовано в качестве UID."
+
+#: newusers.8.xml:153(para)
+#, fuzzy
+#| msgid ""
+#| "If this field contains the name of an existing user (or the name of an "
+#| "user created before by <command>newusers</command>), the UID of the "
+#| "specified user will be used."
+msgid ""
+"If this field contains the name of an existing user (or the name of a user "
+"created before by <command>newusers</command>), the UID of the specified "
+"user will be used."
+msgstr ""
+"Если в поле содержится имя существующего пользователя (или имя пользователя, "
+"созданного <command>newusers</command> ранее), то использует UID указанного "
+"пользователя."
+
+#: newusers.8.xml:159(para)
+msgid ""
+"If the UID of an existing user is changed, the files ownership of the user's "
+"file should be fixed manually."
+msgstr ""
+"Если изменяется UID существующего пользователя, то у файлов, которыми владел "
+"этот пользователь, нужно вручную переопределить владельца."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><replaceable>
+#: newusers.8.xml:167(emphasis)
+msgid "pw_gid"
+msgstr "pw_gid"
+
+#: newusers.8.xml:170(para)
+msgid "This field is used to define the primary group ID for the user."
+msgstr ""
+"Это поле используется для определения ID первичной группы пользователя."
+
+#: newusers.8.xml:173(para)
+msgid ""
+"If this field contains the name of an existing group (or a group created "
+"before by <command>newusers</command>), the GID of this group will be used "
+"as the primary group ID for the user."
+msgstr ""
+"Если в этом поле содержится имя существующей группы (или группы, созданной "
+"<command>newusers</command> ранее), то в качестве ID первичной группы "
+"пользователя будет использован GID этой группы."
+
+#: newusers.8.xml:179(para)
+msgid ""
+"If this field is a number, this number will be used as the primary group ID "
+"of the user. If no groups exist with this GID, a new group will be created "
+"with this GID, and the name of the user."
+msgstr ""
+"Если в этом поле содержится число, то это число будет использовано как ID "
+"первичной группы пользователя. Если с таким GID не существует, то будет "
+"создана новая группа с этим GID и именем пользователя."
+
+#: newusers.8.xml:185(para)
+msgid ""
+"If this field is empty, a new group will be created with the name of the "
+"user and a GID will be automatically defined by <command>newusers</command> "
+"to be used as the primary group ID for the user and as the GID for the new "
+"group."
+msgstr ""
+"Если это поле пусто, то новая группа будет создана с именем пользователя, а "
+"GID будет определён <command>newusers</command> автоматически (для "
+"использования в качестве ID первичной группы пользователя и GID новой "
+"группы)."
+
+#: newusers.8.xml:191(para)
+msgid ""
+"If this field contains the name of a group which does not exist (and was not "
+"created before by <command>newusers</command>), a new group will be created "
+"with the specified name and a GID will be automatically defined by "
+"<command>newusers</command> to be used as the primary group ID for the user "
+"and GID for the new group."
+msgstr ""
+"Если поле содержит имя группы, которой не существует (и которая не была "
+"создана <command>newusers</command> ранее), то будет создана новая группа с "
+"указанным именем, GID будет определён <command>newusers</command> "
+"автоматически (для использования в качестве ID первичной группы пользователя "
+"и GID новой группы)."
+
+#: newusers.8.xml:203(emphasis)
+msgid "pw_gecos"
+msgstr "pw_gecos"
+
+#: newusers.8.xml:206(para)
+msgid "This field is copied in the GECOS field of the user."
+msgstr "Это поле копируется в поле GECOS записи пользователя."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><emphasis>
+#: newusers.8.xml:213(emphasis)
+msgid "pw_dir"
+msgstr "pw_dir"
+
+#: newusers.8.xml:216(para)
+msgid "This field is used to define the home directory of the user."
+msgstr "Это поле используется для определения домашнего каталога пользователя."
+
+#: newusers.8.xml:219(para)
+msgid ""
+"If this field does not specify an existing directory, the specified "
+"directory is created, with ownership set to the user being created or "
+"updated and its primary group."
+msgstr ""
+"Если это поле указывает на несуществующий каталог, то указанный каталог "
+"создаётся, его владельцем назначается создаваемый или обновляемый "
+"пользователь и его первичная группа."
+
+#: newusers.8.xml:224(para)
+msgid ""
+"If the home directory of an existing user is changed, <command>newusers</"
+"command> does not move or copy the content of the old directory to the new "
+"location. This should be done manually."
+msgstr ""
+"Если изменяется домашний каталог существующего пользователя, то команда "
+"<command>newusers</command> не перемещает или копирует содержимое старого "
+"каталога в новое место. Это нужно выполнить вручную."
+
+#: newusers.8.xml:234(emphasis)
+msgid "pw_shell"
+msgstr "pw_shell"
+
+#: newusers.8.xml:237(para)
+msgid ""
+"This field defines the shell of the user. No checks are performed on this "
+"field."
+msgstr ""
+"В этом поле задаётся пользовательская оболочка. Никаких проверок поля не "
+"делается."
+
+#: newusers.8.xml:245(para)
+msgid ""
+"<command>newusers</command> first tries to create or change all the "
+"specified users, and then write these changes to the user or group "
+"databases. If an error occurs (except in the final writes to the databases), "
+"no changes are committed to the databases."
+msgstr ""
+"Команда <command>newusers</command> сначала пытается создать или изменить "
+"всех указанных пользователей, а затем записать эти изменения в базы данных "
+"пользователей или групп. Если происходит ошибка (кроме ошибок при последней "
+"записи в базы данных), то изменения в базы не сохраняются."
+
+#: newusers.8.xml:251(para)
+msgid ""
+"During this first pass, users are created with a locked password (and "
+"passwords are not changed for the users which are not created). A second "
+"pass is used to update the passwords using PAM. Failures to update a "
+"password are reported, but will not stop the other password updates."
+msgstr ""
+"Во время первого прохода пользователи создаются с заблокированными паролями "
+"(у несоздаваемых пользователей пароли не изменяются). Во время второго "
+"прохода выполняется обновление паролей с помощью PAM. При возникновении "
+"ошибок при обновлении об этом сообщается, но обновление паролей продолжается."
+
+# type: Content of: <refentry><refsect1><para>
+#: newusers.8.xml:259(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are updated at a single time."
+msgstr ""
+"Данная команда предназначена для работы в крупных системных средах, где за "
+"один раз обновляется несколько учётных записей."
+
+# type: Content of: <refentry><refsect1><para>
+#: newusers.8.xml:267(para)
+msgid "The options which apply to the <command>newusers</command> command are:"
+msgstr "Параметры команды <command>newusers</command>:"
+
+#: newusers.8.xml:284(term) chgpasswd.8.xml:112(term)
+msgid "<option>-c</option>, <option>--crypt-method</option>"
+msgstr "<option>-c</option>, <option>--crypt-method</option>"
+
+#: newusers.8.xml:286(para) chpasswd.8.xml:141(para) chgpasswd.8.xml:114(para)
+msgid "Use the specified method to encrypt the passwords."
+msgstr "Использовать указанный метод для шифрования паролей."
+
+#: newusers.8.xml:287(para) chpasswd.8.xml:145(para) chgpasswd.8.xml:118(para)
+msgid ""
+"The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc "
+"support these methods."
+msgstr ""
+"Возможные методы: DES, MD5, NONE и SHA256 или SHA512, если эти методы "
+"поддерживается libc."
+
+#: newusers.8.xml:309(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are chosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+"Системные пользователи создаются без информации об устаревании в <filename>/"
+"etc/shadow</filename>, и их числовые идентификаторы выбираются из диапазона "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option>, определённого в "
+"<filename>login.defs</filename>, а не из <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (это же касается и части с <option>GID</option> при "
+"создании групп)."
+
+#: newusers.8.xml:335(term) chgpasswd.8.xml:158(term)
+msgid "<option>-s</option>, <option>--sha-rounds</option>"
+msgstr "<option>-s</option>, <option>--sha-rounds</option>"
+
+#: newusers.8.xml:337(para) chpasswd.8.xml:204(para) chgpasswd.8.xml:160(para)
+msgid "Use the specified number of rounds to encrypt the passwords."
+msgstr "Использовать указанное количество раундов шифрования паролей."
+
+#: newusers.8.xml:340(para) chpasswd.8.xml:207(para) chgpasswd.8.xml:163(para)
+msgid ""
+"The value 0 means that the system will choose the default number of rounds "
+"for the crypt method (5000)."
+msgstr ""
+"Значение 0 означает, что система выберет количество раундов по умолчанию для "
+"выбранного метода шифрования (5000)."
+
+#: newusers.8.xml:344(para) chpasswd.8.xml:211(para) chgpasswd.8.xml:167(para)
+msgid ""
+"A minimal value of 1000 and a maximal value of 999,999,999 will be enforced."
+msgstr ""
+"Минимальное значение равно 1000, а максимальное значение равно 999,999,999."
+
+#: newusers.8.xml:348(para) chpasswd.8.xml:215(para) chgpasswd.8.xml:171(para)
+msgid "You can only use this option with the SHA256 or SHA512 crypt method."
+msgstr ""
+"Вы можете использовать этот параметр только при методе шифрования SHA256 или "
+"SHA512."
+
+#: newusers.8.xml:352(para) chgpasswd.8.xml:175(para)
+msgid ""
+"By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and "
+"SHA_CRYPT_MAX_ROUNDS variables in <filename>/etc/login.defs</filename>."
+msgstr ""
+"По умолчанию, количество раундов определяется переменными "
+"SHA_CRYPT_MIN_ROUNDS и SHA_CRYPT_MAX_ROUNDS из <filename>/etc/login.defs</"
+"filename>."
+
+# type: Content of: <refentry><refsect1><para>
+#: newusers.8.xml:364(para)
+msgid ""
+"The input file must be protected since it contains unencrypted passwords."
+msgstr ""
+"Файл с входными данными должен быть защищён, так как в нём содержатся не "
+"шифрованные пароли."
+
+#: newusers.8.xml:368(para) chgpasswd.8.xml:191(para)
+msgid ""
+"You should make sure the passwords and the encryption method respect the "
+"system's password policy."
+msgstr ""
+"Вы должны проверить, что пароль и метод шифрования соответствует политике "
+"системных паролей."
+
+# type: Content of: <refentry><refsect1><para><filename>
+#: newusers.8.xml:444(filename)
+msgid "/etc/pam.d/newusers"
+msgstr "/etc/pam.d/newusers"
+
+#: newusers.8.xml:446(para)
+msgid "PAM configuration for <command>newusers</command>."
+msgstr "настройки PAM для <command>newusers</command>"
+
+#: newusers.8.xml:466(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>grpck</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, <phrase condition="
+"\"subids\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: newgrp.1.xml:58(refentrytitle) newgrp.1.xml:65(refname)
+#: newgrp.1.xml:71(command)
+msgid "newgrp"
+msgstr "newgrp"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: newgrp.1.xml:66(refpurpose)
+msgid "log in to a new group"
+msgstr "выполняет регистрацию пользователя в новой группе"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: newgrp.1.xml:72(replaceable) grpck.8.xml:74(replaceable)
+#: groupadd.8.xml:78(replaceable) gpasswd.1.xml:88(replaceable)
+msgid "group"
+msgstr "группа"
+
+# type: Content of: <refentry><refsect1><para>
+#: newgrp.1.xml:78(para)
+msgid ""
+"The <command>newgrp</command> command is used to change the current group ID "
+"during a login session. If the optional <option>-</option> flag is given, "
+"the user's environment will be reinitialized as though the user had logged "
+"in, otherwise the current environment, including current working directory, "
+"remains unchanged."
+msgstr ""
+"Программа <command>newgrp</command> используется для изменения ID текущей "
+"группы в работающем сеансе. Если указан необязательный параметр <option>-</"
+"option>, то окружение пользователя будет инициализировано повторно, как если "
+"бы пользователь заново вошёл в систему, иначе имеющееся окружение, включая "
+"текущий рабочий каталог, изменено не будет."
+
+#: newgrp.1.xml:86(para)
+msgid ""
+"<command>newgrp</command> changes the current real group ID to the named "
+"group, or to the default group listed in <filename>/etc/passwd</filename> if "
+"no group name is given. <command>newgrp</command> also tries to add the "
+"group to the user groupset. If not root, the user will be prompted for a "
+"password if she does not have a password (in <filename>/etc/shadow</"
+"filename> if this user has an entry in the shadowed password file, or in "
+"<filename>/etc/passwd</filename> otherwise) and the group does, or if the "
+"user is not listed as a member and the group has a password. The user will "
+"be denied access if the group password is empty and the user is not listed "
+"as a member."
+msgstr ""
+"Программа <command>newgrp</command> изменяет идентификатор текущей реальной "
+"группы на заданный или на группу по умолчанию, указанную в файле <filename>/"
+"etc/passwd</filename>, в случае если имя группы не указано. Программа "
+"<command>newgrp</command> также пытается добавить группу в список групп "
+"пользователя. Если пользователь не является суперпользователем, то его "
+"попросят ввести пароль, даже если он его не имеет (в файле <filename>/etc/"
+"shadow</filename>, если для этого пользователя имеется запись в файле "
+"теневых паролей, иначе используется файл <filename>/etc/passwd</filename>), "
+"а группа имеет, или если пользователь не является членом группы, а группа "
+"имеет пароль. Если пользователь не является членом группы, а у группы пустой "
+"пароль, то пользователю будет отказано в доступе."
+
+# type: Content of: <refentry><refsect1><para>
+#: newgrp.1.xml:100(para)
+msgid ""
+"If there is an entry for this group in <filename>/etc/gshadow</filename>, "
+"then the list of members and the password of this group will be taken from "
+"this file, otherwise, the entry in <filename>/etc/group</filename> is "
+"considered."
+msgstr ""
+"Если есть запись для этой группы в файле <filename>/etc/gshadow</filename>, "
+"то список членов и пароль этой группы будут взяты из этого файла, иначе "
+"используется запись из файла <filename>/etc/group</filename>."
+
+#: newgrp.1.xml:152(para)
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, <citerefentry condition="
+"\"gshadow\"><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, <citerefentry condition="
+"\"gshadow\"><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry></phrase>."
+
+# type: Content of: <refentry><refsect1><para><command>
+#: logoutd.8.xml:57(refentrytitle) logoutd.8.xml:64(refname)
+#: logoutd.8.xml:70(command)
+msgid "logoutd"
+msgstr "logoutd"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: logoutd.8.xml:65(refpurpose)
+msgid "enforce login time restrictions"
+msgstr "контролирует временные интервалы работы в системе"
+
+#: logoutd.8.xml:76(para)
+msgid ""
+"<command>logoutd</command> enforces the login time and port restrictions "
+"specified in <filename>/etc/porttime</filename>. <command>logoutd</command> "
+"should be started from <filename>/etc/rc</filename>. The <filename>/var/run/"
+"utmp</filename> file is scanned periodically and each user name is checked "
+"to see if the named user is permitted on the named port at the current time. "
+"Any login session which is violating the restrictions in <filename>/etc/"
+"porttime</filename> is terminated."
+msgstr ""
+"Программа <command>logoutd</command> контролирует временные ограничения "
+"работы в системе и порты, заданные в файле <filename>/etc/porttime</"
+"filename>. Программа <command>logoutd</command> должна запускаться из "
+"сценария <filename>/etc/rc</filename>. Файл <filename>/var/run/utmp</"
+"filename> периодически сканируется и для каждого имени пользователя "
+"проверяется, разрешено ли данному пользователю работать в настоящий момент "
+"на данном порту. Любой сеанс, который нарушает ограничения, описанные в "
+"файле <filename>/etc/porttime</filename>, будет завершён."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: logoutd.8.xml:98(filename) login.1.xml:341(filename)
+msgid "/var/run/utmp"
+msgstr "/var/run/utmp"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: logoutd.8.xml:100(para) login.1.xml:343(para)
+msgid "List of current login sessions."
+msgstr "содержит список работающих сеансов в системе"
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: login.defs.5.xml:124(refentrytitle) login.defs.5.xml:131(refname)
+msgid "login.defs"
+msgstr "login.defs"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.defs.5.xml:132(refpurpose)
+msgid "shadow password suite configuration"
+msgstr "содержит конфигурацию подсистемы теневых паролей"
+
+# type: Content of: <refentry><refsect1><para>
+#: login.defs.5.xml:137(para)
+msgid ""
+"The <filename>/etc/login.defs</filename> file defines the site-specific "
+"configuration for the shadow password suite. This file is required. Absence "
+"of this file will not prevent system operation, but will probably result in "
+"undesirable operation."
+msgstr ""
+"Файл <filename>/etc/login.defs</filename> содержит настройки подсистемы "
+"теневых паролей (shadow password suite). Этот файл является обязательным. "
+"Отсутствие данного файла не повлияет на работу системы, но, вероятно, "
+"приведёт к выполнению нежелаемых операций."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.defs.5.xml:144(para)
+msgid ""
+"This file is a readable text file, each line of the file describing one "
+"configuration parameter. The lines consist of a configuration name and "
+"value, separated by whitespace. Blank lines and comment lines are ignored. "
+"Comments are introduced with a \"#\" pound sign and the pound sign must be "
+"the first non-white character of the line."
+msgstr ""
+"Файл представляет собой обычный текстовый файл; каждая строка описывает один "
+"параметр настройки. Строки состоят из названия параметра и его значения, "
+"которые разделяются пробельным символом. Пустые строки и комментарии "
+"игнорируются. Комментарии начинаются со знака фунта «#», который должен быть "
+"первым непробельным символом в строке."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.defs.5.xml:152(para)
+msgid ""
+"Parameter values may be of four types: strings, booleans, numbers, and long "
+"numbers. A string is comprised of any printable characters. A boolean should "
+"be either the value <replaceable>yes</replaceable> or <replaceable>no</"
+"replaceable>. An undefined boolean parameter or one with a value other than "
+"these will be given a <replaceable>no</replaceable> value. Numbers (both "
+"regular and long) may be either decimal values, octal values (precede the "
+"value with <replaceable>0</replaceable>) or hexadecimal values (precede the "
+"value with <replaceable>0x</replaceable>). The maximum value of the regular "
+"and long numeric parameters is machine-dependent."
+msgstr ""
+"Значения параметров могут быть четырёх типов: строки, логические значения, "
+"числа и длинные числа. Строки состоят из любых печатных символов. Под "
+"логическими значениями подразумеваются <replaceable>yes</replaceable> или "
+"<replaceable>no</replaceable>. Неопределённый логический параметр или "
+"имеющий значение, отличное от указанных выше, считается как имеющий значение "
+"<replaceable>no</replaceable>. Числа (обычные и длинные) можно задавать в "
+"десятичной, восьмеричной (перед значением ставится «<replaceable>0</"
+"replaceable>») или шестнадцатеричной (перед значением ставится "
+"«<replaceable>0x</replaceable>») системах счисления. Максимальные значения "
+"параметра обычного и длинного числа зависят от архитектуры компьютера."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.defs.5.xml:167(para)
+msgid "The following configuration items are provided:"
+msgstr "Возможны следующие параметры настройки:"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+msgid "<option>CHFN_AUTH</option> (boolean)"
+msgstr "<option>CHFN_AUTH</option> (логический)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chfn</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+"Если равно <<replaceable>yes</replaceable>, то программа <command>chfn</"
+"command> будет проводить аутентификацию перед тем как выполнить любые "
+"изменения, в случае если команда не запущена суперпользователем."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+msgid "<option>CHFN_RESTRICT</option> (string)"
+msgstr "<option>CHFN_RESTRICT</option> (строка)"
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"This parameter specifies which values in the <emphasis remap=\"I\">gecos</"
+"emphasis> field of the <filename>/etc/passwd</filename> file may be changed "
+"by regular users using the <command>chfn</command> program. It can be any "
+"combination of letters <replaceable>f</replaceable>, <replaceable>r</"
+"replaceable>, <replaceable>w</replaceable>, <replaceable>h</replaceable>, "
+"for Full name, Room number, Work phone, and Home phone, respectively. For "
+"backward compatibility, <replaceable>yes</replaceable> is equivalent to "
+"<replaceable>rwh</replaceable> and <replaceable>no</replaceable> is "
+"equivalent to <replaceable>frwh</replaceable>. If not specified, only the "
+"superuser can make any changes. The most restrictive setting is better "
+"achieved by not installing <command>chfn</command> SUID."
+msgstr ""
+"Этим параметром определяются части поля <emphasis remap=\"I\">gecos</"
+"emphasis> в файле <filename>/etc/passwd</filename>, которые могут изменять "
+"обычные пользователи с помощью программы <command>chfn</command>. Строка "
+"может содержать любую комбинацию букв <replaceable>f</replaceable>, "
+"<replaceable>r</replaceable>, <replaceable>w</replaceable>, <replaceable>h</"
+"replaceable> для изменения полного имени пользователя, номера комнаты, "
+"рабочего и домашнего телефона, соответственно. Для совместимости значение "
+"<replaceable>yes</replaceable> эквивалентно <replaceable>rwh</replaceable> и "
+"<replaceable>no</replaceable> эквивалентно <replaceable>frwh</replaceable>. "
+"Если ничего не задано, то только суперпользователь может выполнять любые "
+"изменения. Наиболее ограничительная настройка достигается снятием SUID бита "
+"с файла <filename>chfn</filename>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) chsh.1.xml:32(term)
+msgid "<option>CHSH_AUTH</option> (boolean)"
+msgstr "<option>CHSH_AUTH</option> (логический)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.defs.5.xml:34(para) chsh.1.xml:34(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chsh</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+"Если равно <replaceable>yes</replaceable>, то программа <command>chsh</"
+"command> будет проводить аутентификацию перед тем как выполнить любые "
+"изменения, в случае если команда не запущены суперпользователем."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ERASECHAR</option> (number)"
+msgstr "<option>ERASECHAR</option> (число)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Terminal ERASE character (<replaceable>010</replaceable> = backspace, "
+"<replaceable>0177</replaceable> = DEL)."
+msgstr ""
+"Символ ERASE у терминала (<replaceable>010</replaceable> = backspace, "
+"<replaceable>0177</replaceable> = DEL)."
+
+#: login.defs.5.xml:38(para) login.defs.5.xml:37(para) login.1.xml:38(para)
+#: login.1.xml:37(para)
+msgid ""
+"The value can be prefixed \"0\" for an octal value, or \"0x\" for an "
+"hexadecimal value."
+msgstr ""
+"Значение может начинаться с «0» при указании значения в восьмеричной системе "
+"счисления или «0x» при указании значения в шестнадцатеричной системе "
+"счисления."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FAIL_DELAY</option> (number)"
+msgstr "<option>FAIL_DELAY</option> (число)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Delay in seconds before being allowed another attempt after a login failure."
+msgstr "Задержка в секундах перед повторной попыткой после неудачного входа."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FAILLOG_ENAB</option> (boolean)"
+msgstr "<option>FAILLOG_ENAB</option> (логический)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable logging and display of <filename>/var/log/faillog</filename> login "
+"failure info."
+msgstr ""
+"Включить протоколирование и показ информации о неудачных входах из "
+"<filename>/var/log/faillog</filename>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FAKE_SHELL</option> (string)"
+msgstr "<option>FAKE_SHELL</option> (строка)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, <command>login</command> will execute this shell instead of the "
+"users' shell specified in <filename>/etc/passwd</filename>."
+msgstr ""
+"Если установлена, то программа <command>login</command> запустит указанную "
+"оболочку вместо пользовательской оболочки заданной в <filename>/etc/passwd</"
+"filename>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FTMP_FILE</option> (string)"
+msgstr "<option>FTMP_FILE</option> (строка)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, login failures will be logged in this file in a utmp format."
+msgstr ""
+"Если определена, то неудачные попытки входа будут протоколироваться в этот "
+"файл в формате utmp."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>HUSHLOGIN_FILE</option> (string)"
+msgstr "<option>HUSHLOGIN_FILE</option> (строка)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, this file can inhibit all the usual chatter during the login "
+"sequence. If a full pathname is specified, then hushed mode will be enabled "
+"if the user's name or shell are found in the file. If not a full pathname, "
+"then hushed mode will be enabled if the file exists in the user's home "
+"directory."
+msgstr ""
+"Если определена, то этот файл может заблокировать все обычные переговоры "
+"(chatter) при входе. Если указан полный путь к файлу, то будет включён "
+"сокращённый (hushed) режим, если в этом файле указано имя пользователя или "
+"оболочка. Если указан не полный путь, то будет включён сокращённый (hushed) "
+"режим, если файл находится в домашнем каталоге пользователя."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ISSUE_FILE</option> (string)"
+msgstr "<option>ISSUE_FILE</option> (строка)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "If defined, this file will be displayed before each login prompt."
+msgstr ""
+"Если определена, то этот файл будет показан перед каждым появлением "
+"приглашения на вход."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>KILLCHAR</option> (number)"
+msgstr "<option>KILLCHAR</option> (число)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Terminal KILL character (<replaceable>025</replaceable> = CTRL/U)."
+msgstr "Символ KILL у терминала (<replaceable>025</replaceable> = CTRL/U)."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LASTLOG_ENAB</option> (boolean)"
+msgstr "<option>LASTLOG_ENAB</option> (логический)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging and display of /var/log/lastlog login time info."
+msgstr ""
+"Включить протоколирование и показ информации о времени входа из /var/log/"
+"lastlog."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOG_OK_LOGINS</option> (boolean)"
+msgstr "<option>LOG_OK_LOGINS</option> (логический)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging of successful logins."
+msgstr "Включить протоколирование успешных входов."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOG_UNKFAIL_ENAB</option> (boolean)"
+msgstr "<option>LOG_UNKFAIL_ENAB</option> (логический)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable display of unknown usernames when login failures are recorded."
+msgstr ""
+"Включить показ неизвестных имён пользователей при записи неудачных попыток "
+"входа."
+
+#: login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"Note: logging unknown usernames may be a security issue if an user enter her "
+"password instead of her login name."
+msgstr ""
+"Замечание: протоколирование неизвестных имён пользователя может привести к "
+"проблемам с безопасностью, если пользователь введёт свой пароль вместо "
+"своего имени."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOGIN_RETRIES</option> (number)"
+msgstr "<option>LOGIN_RETRIES</option> (число)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Maximum number of login retries in case of bad password."
+msgstr "Максимальное количество попыток входа при вводе неверного пароля."
+
+#: login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"This will most likely be overridden by PAM, since the default pam_unix "
+"module has its own built in of 3 retries. However, this is a safe fallback "
+"in case you are using an authentication module that does not enforce "
+"PAM_MAXTRIES."
+msgstr ""
+"Наиболее вероятно это значение будет переопределено PAM, так как по "
+"умолчанию в модуле pam_unix определено 3 попытки. Однако, это значение "
+"является резервом, если вы используете модуль аутентификации, который не "
+"учитывает PAM_MAXTRIES."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOGIN_TIMEOUT</option> (number)"
+msgstr "<option>LOGIN_TIMEOUT</option> (число)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Max time in seconds for login."
+msgstr "Максимальное время в секундах, отведённое на вход."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>MOTD_FILE</option> (string)"
+msgstr "<option>MOTD_FILE</option> (строка)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, \":\" delimited list of \"message of the day\" files to be "
+"displayed upon login."
+msgstr ""
+"Если определена, то при входе будет показано «сообщение дня» из файла со "
+"списком значений, разделённых «:»."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>NOLOGINS_FILE</option> (string)"
+msgstr "<option>NOLOGINS_FILE</option> (строка)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, name of file whose presence will inhibit non-root logins. The "
+"contents of this file should be a message indicating why logins are "
+"inhibited."
+msgstr ""
+"Если определена, значение равно имени файла, чьё существование запретит вход "
+"для не суперпользователей. В файле должно содержаться сообщение, описывающее "
+"почему запрещён вход."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.defs.5.xml:212(para)
+msgid ""
+"<option>PASS_MAX_DAYS</option>, <option>PASS_MIN_DAYS</option> and "
+"<option>PASS_WARN_AGE</option> are only used at the time of account "
+"creation. Any changes to these settings won't affect existing accounts."
+msgstr ""
+"Параметры <option>PASS_MAX_DAYS</option>, <option>PASS_MIN_DAYS</option> и "
+"<option>PASS_WARN_AGE</option> используются только при создании учётной "
+"записи. Любые изменения этих параметров не влияют на уже существующие "
+"учётные записи."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>PORTTIME_CHECKS_ENAB</option> (boolean)"
+msgstr "<option>PORTTIME_CHECKS_ENAB</option> (логический)"
+
+# type: Content of: <refentry><refsect1><para>
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable checking of time restrictions specified in <filename>/etc/porttime</"
+"filename>."
+msgstr ""
+"Включить проверку временных ограничений, заданных в <filename>/etc/porttime</"
+"filename>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>TTYGROUP</option> (string)"
+msgstr "<option>TTYGROUP</option> (строка)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:33(term) login.1.xml:33(term)
+msgid "<option>TTYPERM</option> (string)"
+msgstr "<option>TTYPERM</option> (строка)"
+
+#: login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"The terminal permissions: the login tty will be owned by the "
+"<option>TTYGROUP</option> group, and the permissions will be set to "
+"<option>TTYPERM</option>."
+msgstr ""
+"Права терминала: tty входа будет принадлежать группе <option>TTYGROUP</"
+"option>, а права будут назначены в соответствии с <option>TTYPERM</option>."
+
+#: login.defs.5.xml:40(para) login.1.xml:40(para)
+msgid ""
+"By default, the ownership of the terminal is set to the user's primary group "
+"and the permissions are set to <replaceable>0600</replaceable>."
+msgstr ""
+"По умолчанию, терминалом владеет первичная группа пользователя, а права "
+"устанавливаются в <replaceable>0600</replaceable>."
+
+#: login.defs.5.xml:45(para) login.1.xml:45(para)
+msgid ""
+"<option>TTYGROUP</option> can be either the name of a group or a numeric "
+"group identifier."
+msgstr ""
+"В <option>TTYGROUP</option> может задаваться или имя группы, или числовой "
+"идентификатор группы."
+
+#: login.defs.5.xml:49(para) login.1.xml:49(para)
+msgid ""
+"If you have a <command>write</command> program which is \"setgid\" to a "
+"special group which owns the terminals, define TTYGROUP to the group number "
+"and TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign "
+"TTYPERM to either 622 or 600."
+msgstr ""
+"Если ваша программа <command>write</command> имеет «setgid» со специальной "
+"группой, которой принадлежат терминалы, то присвойте TTYGROUP номер этой "
+"группы, а TTYPERM значение 0620. В противном случае оставьте TTYGROUP "
+"закомментированной и назначьте TTYPERM значение 622 или 600."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>TTYTYPE_FILE</option> (string)"
+msgstr "<option>TTYTYPE_FILE</option> (строка)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, file which maps tty line to TERM environment parameter. Each "
+"line of the file is in a format something like \"vt100 tty01\"."
+msgstr ""
+"Если определена, то в ней указывается имя файла, в котором описано "
+"соответствие между линией tty и параметром окружения TERM. Каждая строка "
+"файла имеет формат вида «vt100 tty01»."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ULIMIT</option> (number)"
+msgstr "<option>ULIMIT</option> (число)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Default <command>ulimit</command> value."
+msgstr "Значение <command>ulimit</command> по умолчанию."
+
+# type: Content of: <refentry><refsect1><title>
+#: login.defs.5.xml:245(title)
+msgid "CROSS REFERENCES"
+msgstr "ПЕРЕКРЁСТНЫЕ ССЫЛКИ"
+
+# type: Content of: <refentry><refsect1><para>
+#: login.defs.5.xml:246(para)
+msgid ""
+"The following cross references show which programs in the shadow password "
+"suite use which parameters."
+msgstr ""
+"Следующие перекрёстные ссылки отражают связь между программами и их "
+"параметрам из набора для работы с теневыми паролями."
+
+# type: Content of: <refentry><refsect1><para><command>
+#: login.defs.5.xml:253(term) chage.1.xml:58(refentrytitle)
+#: chage.1.xml:65(refname) chage.1.xml:70(command)
+msgid "chage"
+msgstr "chage"
+
+#: login.defs.5.xml:255(para) login.defs.5.xml:451(phrase)
+#: login.defs.5.xml:523(phrase)
+msgid "USE_TCB"
+msgstr "USE_TCB"
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: login.defs.5.xml:259(term) chfn.1.xml:60(refentrytitle)
+#: chfn.1.xml:67(refname) chfn.1.xml:73(command)
+msgid "chfn"
+msgstr "chfn"
+
+#: login.defs.5.xml:261(para)
+msgid ""
+"<phrase condition=\"no_pam\">CHFN_AUTH</phrase> CHFN_RESTRICT <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase>"
+msgstr ""
+"<phrase condition=\"no_pam\">CHFN_AUTH</phrase> CHFN_RESTRICT <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase>"
+
+# type: Content of: <refentry><refsect1><para><command>
+#: login.defs.5.xml:269(term) chgpasswd.8.xml:57(refentrytitle)
+#: chgpasswd.8.xml:64(refname) chgpasswd.8.xml:70(command)
+msgid "chgpasswd"
+msgstr "chgpasswd"
+
+#: login.defs.5.xml:271(para) login.defs.5.xml:302(para)
+msgid ""
+"ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB <phrase condition="
+"\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+"ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB <phrase condition="
+"\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+
+# type: Content of: <refentry><refsect1><para><command>
+#: login.defs.5.xml:279(term) chpasswd.8.xml:61(refentrytitle)
+#: chpasswd.8.xml:68(refname) chpasswd.8.xml:74(command)
+msgid "chpasswd"
+msgstr "chpasswd"
+
+#: login.defs.5.xml:282(phrase)
+msgid "ENCRYPT_METHOD MD5_CRYPT_ENAB"
+msgstr "ENCRYPT_METHOD MD5_CRYPT_ENAB"
+
+#: login.defs.5.xml:284(phrase)
+msgid "SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS"
+msgstr "SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS"
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: login.defs.5.xml:290(term) chsh.1.xml:60(refentrytitle)
+#: chsh.1.xml:67(refname) chsh.1.xml:73(command)
+msgid "chsh"
+msgstr "chsh"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.defs.5.xml:292(para)
+msgid "CHSH_AUTH LOGIN_STRING"
+msgstr "CHSH_AUTH LOGIN_STRING"
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: login.defs.5.xml:300(term) gpasswd.1.xml:62(refentrytitle)
+#: gpasswd.1.xml:69(refname) gpasswd.1.xml:83(command)
+msgid "gpasswd"
+msgstr "gpasswd"
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: login.defs.5.xml:310(term) groupadd.8.xml:60(refentrytitle)
+#: groupadd.8.xml:67(refname) groupadd.8.xml:73(command)
+msgid "groupadd"
+msgstr "groupadd"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.defs.5.xml:312(para)
+msgid "GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN"
+msgstr "GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN"
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: login.defs.5.xml:319(term) groupdel.8.xml:58(refentrytitle)
+#: groupdel.8.xml:65(refname) groupdel.8.xml:71(command)
+msgid "groupdel"
+msgstr "groupdel"
+
+#: login.defs.5.xml:321(para) login.defs.5.xml:327(para)
+#: login.defs.5.xml:333(para) login.defs.5.xml:340(para)
+#: login.defs.5.xml:346(para) login.defs.5.xml:352(para)
+msgid "MAX_MEMBERS_PER_GROUP"
+msgstr "MAX_MEMBERS_PER_GROUP"
+
+# type: Content of: <refentry><refsect1><para><command>
+#: login.defs.5.xml:325(term) groupmems.8.xml:61(refentrytitle)
+#: groupmems.8.xml:68(refname) groupmems.8.xml:74(command)
+msgid "groupmems"
+msgstr "groupmems"
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: login.defs.5.xml:331(term) groupmod.8.xml:58(refentrytitle)
+#: groupmod.8.xml:65(refname) groupmod.8.xml:71(command)
+msgid "groupmod"
+msgstr "groupmod"
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: login.defs.5.xml:338(term) grpck.8.xml:58(refentrytitle)
+#: grpck.8.xml:65(refname) grpck.8.xml:71(command)
+msgid "grpck"
+msgstr "grpck"
+
+# type: Content of: <refentry><refsect1><para><filename>
+#: login.defs.5.xml:357(term) lastlog.8.xml:59(refentrytitle)
+#: lastlog.8.xml:66(refname) lastlog.8.xml:72(command)
+msgid "lastlog"
+msgstr "lastlog"
+
+#: login.defs.5.xml:359(para)
+msgid "LASTLOG_UID_MAX"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: login.defs.5.xml:363(term) login.1.xml:90(refentrytitle)
+#: login.1.xml:97(refname) login.1.xml:103(command) login.1.xml:111(command)
+#: login.1.xml:118(command)
+msgid "login"
+msgstr "login"
+
+#: login.defs.5.xml:365(para)
+#, fuzzy
+#| msgid ""
+#| "<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+#| "<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ "
+#| "ENVIRON_FILE</phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam"
+#| "\">FAILLOG_ENAB</phrase> FAKE_SHELL <phrase condition=\"no_pam"
+#| "\">FTMP_FILE</phrase> HUSHLOGIN_FILE <phrase condition=\"no_pam"
+#| "\">ISSUE_FILE</phrase> KILLCHAR <phrase condition=\"no_pam"
+#| "\">LASTLOG_ENAB</phrase> LOGIN_RETRIES <phrase condition=\"no_pam"
+#| "\">LOGIN_STRING</phrase> LOGIN_TIMEOUT LOG_OK_LOGINS LOG_UNKFAIL_ENAB "
+#| "<phrase condition=\"no_pam\">MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE "
+#| "NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> TTYGROUP TTYPERM "
+#| "TTYTYPE_FILE <phrase condition=\"no_pam\">ULIMIT UMASK</phrase> "
+#| "USERGROUPS_ENAB"
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE</"
+"phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam\">FAILLOG_ENAB</"
+"phrase> FAKE_SHELL <phrase condition=\"no_pam\">FTMP_FILE</phrase> "
+"HUSHLOGIN_FILE <phrase condition=\"no_pam\">ISSUE_FILE</phrase> KILLCHAR "
+"<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 <phrase condition=\"no_pam"
+"\">MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE NOLOGINS_FILE "
+"PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> TTYGROUP TTYPERM TTYTYPE_FILE "
+"<phrase condition=\"no_pam\">ULIMIT UMASK</phrase> USERGROUPS_ENAB"
+msgstr ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE</"
+"phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam\">FAILLOG_ENAB</"
+"phrase> FAKE_SHELL <phrase condition=\"no_pam\">FTMP_FILE</phrase> "
+"HUSHLOGIN_FILE <phrase condition=\"no_pam\">ISSUE_FILE</phrase> KILLCHAR "
+"<phrase condition=\"no_pam\">LASTLOG_ENAB</phrase> LOGIN_RETRIES <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase> LOGIN_TIMEOUT LOG_OK_LOGINS "
+"LOG_UNKFAIL_ENAB <phrase condition=\"no_pam\">MAIL_CHECK_ENAB MAIL_DIR "
+"MAIL_FILE MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> "
+"TTYGROUP TTYPERM TTYTYPE_FILE <phrase condition=\"no_pam\">ULIMIT UMASK</"
+"phrase> USERGROUPS_ENAB"
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: login.defs.5.xml:392(term)
+msgid "newgrp / sg"
+msgstr "newgrp / sg"
+
+#: login.defs.5.xml:394(para)
+msgid "SYSLOG_SG_ENAB"
+msgstr "SYSLOG_SG_ENAB"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.defs.5.xml:402(para)
+#, fuzzy
+#| msgid ""
+#| "ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB "
+#| "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"sha_crypt"
+#| "\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase> SYS_GID_MAX "
+#| "SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+msgid ""
+"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> "
+"SUB_GID_COUNT SUB_GID_MAX SUB_GID_MIN SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN "
+"SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+msgstr ""
+"ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB "
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase> SYS_GID_MAX "
+"SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+
+#: login.defs.5.xml:421(para)
+msgid ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN "
+"PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN "
+"PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+
+#: login.defs.5.xml:432(para)
+msgid ""
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb"
+"\">TCB_AUTH_GROUP TCB_SYMLINKS USE_TCB</phrase>"
+msgstr ""
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb"
+"\">TCB_AUTH_GROUP TCB_SYMLINKS USE_TCB</phrase>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.defs.5.xml:441(para)
+msgid ""
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb\">USE_TCB</"
+"phrase>"
+msgstr ""
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb\">USE_TCB</"
+"phrase>"
+
+#: login.defs.5.xml:458(para)
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENVIRON_FILE</phrase> ENV_PATH "
+"ENV_SUPATH <phrase condition=\"no_pam\">ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB "
+"MAIL_DIR MAIL_FILE QUOTAS_ENAB</phrase> SULOG_FILE SU_NAME <phrase condition="
+"\"no_pam\">SU_WHEEL_ONLY</phrase> SYSLOG_SU_ENAB <phrase condition=\"no_pam"
+"\">USERGROUPS_ENAB</phrase>"
+msgstr ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENVIRON_FILE</phrase> ENV_PATH "
+"ENV_SUPATH <phrase condition=\"no_pam\">ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB "
+"MAIL_DIR MAIL_FILE QUOTAS_ENAB</phrase> SULOG_FILE SU_NAME <phrase condition="
+"\"no_pam\">SU_WHEEL_ONLY</phrase> SYSLOG_SU_ENAB <phrase condition=\"no_pam"
+"\">USERGROUPS_ENAB</phrase>"
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: login.defs.5.xml:473(term)
+msgid "sulogin"
+msgstr "sulogin"
+
+#: login.defs.5.xml:475(para)
+msgid "ENV_HZ <phrase condition=\"no_pam\">ENV_TZ</phrase>"
+msgstr "ENV_HZ <phrase condition=\"no_pam\">ENV_TZ</phrase>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.defs.5.xml:484(para)
+#, fuzzy
+#| msgid ""
+#| "CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP PASS_MAX_DAYS "
+#| "PASS_MIN_DAYS PASS_WARN_AGE SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX "
+#| "SYS_UID_MIN UID_MAX UID_MIN UMASK <phrase condition=\"tcb"
+#| "\">TCB_AUTH_GROUP TCB_SYMLINK USE_TCB</phrase>"
+msgid ""
+"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 SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN "
+"SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK "
+"<phrase condition=\"tcb\">TCB_AUTH_GROUP TCB_SYMLINK USE_TCB</phrase>"
+msgstr ""
+"CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP PASS_MAX_DAYS "
+"PASS_MIN_DAYS PASS_WARN_AGE SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN "
+"UID_MAX UID_MIN UMASK <phrase condition=\"tcb\">TCB_AUTH_GROUP TCB_SYMLINK "
+"USE_TCB</phrase>"
+
+#: login.defs.5.xml:502(para)
+msgid ""
+"MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB <phrase "
+"condition=\"tcb\">TCB_SYMLINKS USE_TCB</phrase>"
+msgstr ""
+"MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB <phrase "
+"condition=\"tcb\">TCB_SYMLINKS USE_TCB</phrase>"
+
+#: login.defs.5.xml:512(para)
+#, fuzzy
+#| msgid ""
+#| "MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP <phrase condition=\"tcb"
+#| "\">TCB_SYMLINKS USE_TCB</phrase>"
+msgid ""
+"LASTLOG_UID_MAX MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP <phrase condition="
+"\"tcb\">TCB_SYMLINKS USE_TCB</phrase>"
+msgstr ""
+"MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP <phrase condition=\"tcb"
+"\">TCB_SYMLINKS USE_TCB</phrase>"
+
+#: login.defs.5.xml:532(para)
+msgid ""
+"Much of the functionality that used to be provided by the shadow password "
+"suite is now handled by PAM. Thus, <filename>/etc/login.defs</filename> is "
+"no longer used by <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, or less used by "
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, and <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>. Please refer to the "
+"corresponding PAM configuration files instead."
+msgstr ""
+"Большинство функций теневых паролей теперь реализовано через PAM. Поэтому, "
+"файл <filename>/etc/login.defs</filename> больше не используется программами "
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> и "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>. Настройку данных программ следует выполнять в соответствующих "
+"файлах настройки PAM."
+
+#: login.defs.5.xml:548(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: login.access.5.xml:58(refentrytitle) login.access.5.xml:65(refname)
+msgid "login.access"
+msgstr "login.access"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: login.access.5.xml:66(refpurpose)
+msgid "login access control table"
+msgstr "файл контроля доступа в систему"
+
+# type: Content of: <refentry><refsect1><para>
+#: login.access.5.xml:71(para)
+msgid ""
+"The <emphasis remap=\"I\">login.access</emphasis> file specifies (user, "
+"host) combinations and/or (user, tty) combinations for which a login will be "
+"either accepted or refused."
+msgstr ""
+"В файле <emphasis remap=\"I\">login.access</emphasis> определяются "
+"комбинации (пользователь, узел) и/или (пользователь, терминал), которым "
+"будет разрешён или запрещён вход в систему."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.access.5.xml:77(para)
+msgid ""
+"When someone logs in, the <emphasis remap=\"I\">login.access</emphasis> is "
+"scanned for the first entry that matches the (user, host) combination, or, "
+"in case of non-networked logins, the first entry that matches the (user, "
+"tty) combination. The permissions field of that table entry determines "
+"whether the login will be accepted or refused."
+msgstr ""
+"Когда кто-то пытается войти в систему выполняется сканирование файла "
+"<emphasis remap=\"I\">login.access</emphasis> в поисках первой совпадающей "
+"записи (пользователь, узел), или в случае не сетевого входа, первой "
+"совпадающей записи (пользователь, терминал). Из найденной записи выбирается "
+"поле прав доступа, по которому определяется разрешать ли данной учётной "
+"записи вход в систему или нет."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.access.5.xml:85(para)
+msgid ""
+"Each line of the login access control table has three fields separated by a "
+"\":\" character:"
+msgstr ""
+"Каждая строка таблицы контроля доступа в систему состоит из трёх полей "
+"разделённых символом «:» и выглядит так:"
+
+#: login.access.5.xml:90(para)
+msgid ""
+"<emphasis remap=\"I\">permission</emphasis>:<emphasis remap=\"I\">users</"
+"emphasis>:<emphasis remap=\"I\">origins</emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">права_доступа</emphasis>:<emphasis remap=\"I"
+"\">пользователи</emphasis>:<emphasis remap=\"I\">источники</emphasis>"
+
+#: login.access.5.xml:94(para)
+msgid ""
+"The first field should be a \"<emphasis>+</emphasis>\" (access granted) or "
+"\"<emphasis>-</emphasis>\" (access denied) character. The second field "
+"should be a list of one or more login names, group names, or <emphasis>ALL</"
+"emphasis> (always matches). The third field should be a list of one or more "
+"tty names (for non-networked logins), host names, domain names (begin with "
+"\"<literal>.</literal>\"), host addresses, internet network numbers (end "
+"with \"<literal>.</literal>\"), <emphasis>ALL</emphasis> (always matches) or "
+"<emphasis>LOCAL</emphasis> (matches any string that does not contain a "
+"\"<literal>.</literal>\" character). If you run NIS you can use "
+"@netgroupname in host or user patterns."
+msgstr ""
+"Первое поле должно содержать символ «<emphasis>+</emphasis>» (доступ "
+"разрешён) или «<emphasis>-</emphasis>» (доступ запрещён). Второе поле должно "
+"содержать имя одной или более учётных записей, имена групп или "
+"<emphasis>ALL</emphasis> (всегда совпадает). Третье поле должно содержать "
+"одно или нескольких имён терминалов (для доступа не из сети), имена узлов, "
+"доменных имён (начинаются с «<literal>.</literal>»), адреса узлов, адреса "
+"подсетей (заканчиваются на «<literal>.</literal>»), <emphasis>ALL</emphasis> "
+"(всегда совпадает) или <emphasis>LOCAL</emphasis> (любая строка, не "
+"содержащая символа «<literal>.</literal>»). Если используется NIS, то также "
+"можно использовать @имя_сетевой_группы в шаблонах узлов или именах "
+"пользователей."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.access.5.xml:108(para)
+msgid ""
+"The <emphasis>EXCEPT</emphasis> operator makes it possible to write very "
+"compact rules."
+msgstr ""
+"Оператор <emphasis>EXCEPT</emphasis> помогает в написании компактных правил."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.access.5.xml:113(para)
+msgid ""
+"The group file is searched only when a name does not match that of the "
+"logged-in user. Only groups are matched in which users are explicitly "
+"listed: the program does not look at a user's primary group id value."
+msgstr ""
+"Поиск в файле групп производится только когда имя не совпадает с "
+"регистрирующимся пользователем. Рассматриваются группы только с явно "
+"прописанными в них пользователями: программа не принимает во внимание "
+"значение первичной группы пользователя."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: login.1.xml:98(refpurpose)
+msgid "begin session on the system"
+msgstr "начинает сеанс в системе"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option>
+#: login.1.xml:104(arg) login.1.xml:112(arg) login.1.xml:119(arg)
+#: login.1.xml:236(option) groupmems.8.xml:79(arg)
+msgid "-p"
+msgstr "-p"
+
+# type: Content of: <refentry><refsynopsisdiv><cmdsynopsis><arg><replaceable>
+#: login.1.xml:105(replaceable) login.1.xml:113(replaceable)
+#: login.1.xml:120(replaceable)
+msgid "host"
+msgstr "узел"
+
+#: login.1.xml:105(arg) login.1.xml:113(arg)
+msgid "-h <placeholder-1/>"
+msgstr "-h <placeholder-1/>"
+
+# type: Content of: <refentry><refsynopsisdiv><cmdsynopsis><arg><replaceable>
+#: login.1.xml:108(replaceable)
+msgid "ENV=VAR"
+msgstr "ПЕРЕМЕННАЯ_ОКРУЖЕНИЯ=ЗНАЧЕНИЕ"
+
+# type: Content of: <refentry><refsect1><para><option>
+#: login.1.xml:114(arg) login.1.xml:214(option)
+msgid "-f"
+msgstr "-f"
+
+#: login.1.xml:120(arg)
+msgid "-r <placeholder-1/>"
+msgstr "-r <placeholder-1/>"
+
+#: login.1.xml:126(para)
+msgid ""
+"The <command>login</command> program is used to establish a new session with "
+"the system. It is normally invoked automatically by responding to the "
+"<emphasis remap=\"I\">login:</emphasis> prompt on the user's terminal. "
+"<command>login</command> may be special to the shell and may not be invoked "
+"as a sub-process. When called from a shell, <command>login</command> should "
+"be executed as <emphasis remap=\"B\">exec login</emphasis> which will cause "
+"the user to exit from the current shell (and thus will prevent the new "
+"logged in user to return to the session of the caller). Attempting to "
+"execute <command>login</command> from any shell but the login shell will "
+"produce an error message."
+msgstr ""
+"Программа <command>login</command> используется для запуска нового сеанса в "
+"системе. Как правило, эта программа вызывается автоматически и выводит "
+"приглашение <emphasis remap=\"I\">login:</emphasis> на терминал "
+"пользователя. Программа <command>login</command> может восприниматься "
+"оболочкой командной строки не как простая программа и вызываться не как "
+"подпроцесс. При вызове из оболочки <command>login</command> должна "
+"запускаться посредством вызова <emphasis remap=\"B\">exec login</emphasis>, "
+"что приводит к завершению работы пользователя в текущей оболочке (и, таким "
+"образом, вновь входящий в систему пользователь не попадёт в сеанс "
+"вызвавшего). Попытка запустить <command>login</command> из любой оболочки, "
+"отличной от регистрационной, приводит к сообщению об ошибке."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.1.xml:140(para)
+msgid ""
+"The user is then prompted for a password, where appropriate. Echoing is "
+"disabled to prevent revealing the password. Only a small number of password "
+"failures are permitted before <command>login</command> exits and the "
+"communications link is severed."
+msgstr ""
+"В какой-то момент пользователя попросят ввести свой пароль. Чтобы не "
+"допустить раскрытия, символы при вводе пароля не отображаются. Разрешено "
+"очень маленькое количество попыток ввода неправильного пароля, перед тем как "
+"<command>login</command> закончит работу и прервёт подключение."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.1.xml:147(para)
+msgid ""
+"If password aging has been enabled for your account, you may be prompted for "
+"a new password before proceeding. You will be forced to provide your old "
+"password and the new password before continuing. Please refer to "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> for more information."
+msgstr ""
+"Если включён механизм устаревания пароля учётной записи, то перед входом в "
+"систему может потребоваться смена пароля. Для этого нужно ввести старый "
+"пароль и новый пароль. Подробней об этом написано в "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: login.1.xml:156(para)
+msgid ""
+"After a successful login, you will be informed of any system messages and "
+"the presence of mail. You may turn off the printing of the system message "
+"file, <filename>/etc/motd</filename>, by creating a zero-length file "
+"<filename>.hushlogin</filename> in your login directory. The mail message "
+"will be one of \"<emphasis>You have new mail.</emphasis>\", \"<emphasis>You "
+"have mail.</emphasis>\", or \"<emphasis>No Mail.</emphasis>\" according to "
+"the condition of your mailbox."
+msgstr ""
+"После успешного входа в систему, будут показаны сообщения от системы и о "
+"наличии почты. Можно отключить вывод файла системных сообщений из файла "
+"<filename>/etc/motd</filename>, создав в домашнем каталоге файл нулевой "
+"длины с именем <filename>.hushlogin</filename>. Сообщение о наличии почты "
+"может быть одним из: «<emphasis>У вас есть новая почта.</emphasis>», "
+"«<emphasis>У вас есть почта.</emphasis>» или «<emphasis>У вас нет почты.</"
+"emphasis>», в зависимости от наполненности почтового ящика."
+
+#: login.1.xml:167(para)
+msgid ""
+"Your user and group ID will be set according to their values in the "
+"<filename>/etc/passwd</filename> file. The value for <envar>$HOME</envar>, "
+"<envar>$SHELL</envar>, <envar>$PATH</envar>, <envar>$LOGNAME</envar>, and "
+"<envar>$MAIL</envar> are set according to the appropriate fields in the "
+"password entry. Ulimit, umask and nice values may also be set according to "
+"entries in the GECOS field."
+msgstr ""
+"Значение идентификатора учётной записи и группы будет взято из файла "
+"<filename>/etc/passwd</filename>. Значения переменных <envar>$HOME</envar>, "
+"<envar>$SHELL</envar>, <envar>$PATH</envar>, <envar>$LOGNAME</envar> и "
+"<envar>$MAIL</envar> устанавливаются согласно соответствующим полям учётной "
+"записи пользователя. Также могут быть установлены значения ulimit, umask и "
+"nice из поля GECOS."
+
+#: login.1.xml:176(para)
+msgid ""
+"On some installations, the environmental variable <envar>$TERM</envar> will "
+"be initialized to the terminal type on your tty line, as specified in "
+"<filename>/etc/ttytype</filename>."
+msgstr ""
+"В некоторых системах переменной окружения <envar>$TERM</envar> будет "
+"присвоен тип терминала линии tty, согласно данным из файла <filename>/etc/"
+"ttytype</filename>."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.1.xml:182(para)
+msgid ""
+"An initialization script for your command interpreter may also be executed. "
+"Please see the appropriate manual section for more information on this "
+"function."
+msgstr ""
+"Также может быть выполнен сценарий инициализации пользовательского "
+"интерпретатора команд. Подробней об этой функции смотрите соответствующую "
+"справочную страницу."
+
+#: login.1.xml:194(para) login.1.xml:270(para)
+msgid ""
+"The <command>login</command> program is NOT responsible for removing users "
+"from the utmp file. It is the responsibility of "
+"<citerefentry><refentrytitle>getty</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry> and <citerefentry><refentrytitle>init</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry> to clean up apparent "
+"ownership of a terminal session. If you use <command>login</command> from "
+"the shell prompt without <command>exec</command>, the user you use will "
+"continue to appear to be logged in even after you log out of the \"subsession"
+"\"."
+msgstr ""
+"Программа <command>login</command> НЕ удаляет записи о пользователях из "
+"файла utmp. Эта задача программ <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry> и "
+"<citerefentry><refentrytitle>init</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry> — удалять записи о владельце терминального сеанса. Если "
+"<command>login</command> запускается из командной строки без <command>exec</"
+"command>, то пользователь продолжает находиться в системе даже после "
+"завершения работы в «порождённом сеансе»."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.1.xml:217(para)
+msgid "Do not perform authentication, user is preauthenticated."
+msgstr "Не выполнять аутентификацию, пользователь уже прошёл проверку."
+
+#: login.1.xml:220(para)
+msgid "Note: In that case, <replaceable>username</replaceable> is mandatory."
+msgstr ""
+"Замечание: в этом случае <replaceable>имя_пользователя</replaceable> "
+"обязательно."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option>
+#: login.1.xml:228(option)
+msgid "-h"
+msgstr "-h"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.1.xml:231(para)
+msgid "Name of the remote host for this login."
+msgstr "Имя удалённого узла, на который нужно войти."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.1.xml:239(para)
+msgid "Preserve environment."
+msgstr "Сохранить окружение."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option>
+#: login.1.xml:244(option)
+msgid "-r"
+msgstr "-r"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.1.xml:247(para)
+msgid "Perform autologin protocol for rlogin."
+msgstr "Выполнить протокол autologin для rlogin."
+
+#: login.1.xml:252(para)
+msgid ""
+"The <option>-r</option>, <option>-h</option> and <option>-f</option> options "
+"are only used when <command>login</command> is invoked by root."
+msgstr ""
+"Параметры <option>-r</option>, <option>-h</option> и <option>-f</option> "
+"используются только если <command>login</command> запускается "
+"суперпользователем."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.1.xml:261(para)
+msgid ""
+"This version of <command>login</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+"Данная версия <command>login</command> может быть собрана с разными "
+"параметрами и только некоторые из них смогут быть использованы на любой "
+"машине."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.1.xml:266(para)
+msgid ""
+"The location of files is subject to differences in system configuration."
+msgstr "Расположение файлов может отличаться на разных системах."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.1.xml:282(para)
+msgid ""
+"As with any program, <command>login</command>'s appearance can be faked. If "
+"non-trusted users have physical access to a machine, an attacker could use "
+"this to obtain the password of the next person coming to sit in front of the "
+"machine. Under Linux, the SAK mechanism can be used by users to initiate a "
+"trusted path and prevent this kind of attack."
+msgstr ""
+"Как и для любой программы, запуск <command>login</command> может быть "
+"подделан. Если неуполномоченные пользователи имеют физический доступ к "
+"машине, то атакующий может использовать это для получения пароля следующего "
+"человека, который будет работать за машиной. Под Linux пользователи могут "
+"использовать механизм SAK для установления достоверного пути и таким образом "
+"предотвращения атаки."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: login.1.xml:347(filename)
+msgid "/var/log/wtmp"
+msgstr "/var/log/wtmp"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.1.xml:349(para)
+msgid "List of previous login sessions."
+msgstr "содержит список завершённых сеансов работы с системой"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: login.1.xml:365(filename)
+msgid "/etc/motd"
+msgstr "/etc/motd"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.1.xml:367(para)
+msgid "System message of the day file."
+msgstr "содержит системные сообщения за день"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: login.1.xml:371(filename)
+msgid "/etc/nologin"
+msgstr "/etc/nologin"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.1.xml:373(para)
+msgid "Prevent non-root users from logging in."
+msgstr ""
+"при существовании файла блокируется доступ в систему обычным пользователям"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: login.1.xml:377(filename)
+msgid "/etc/ttytype"
+msgstr "/etc/ttytype"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.1.xml:379(para)
+msgid "List of terminal types."
+msgstr "содержит список типов терминалов"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: login.1.xml:383(filename)
+msgid "$HOME/.hushlogin"
+msgstr "$HOME/.hushlogin"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.1.xml:385(para)
+msgid "Suppress printing of system messages."
+msgstr ""
+"при существовании файла системные сообщения при входе в систему не выводятся"
+
+#: login.1.xml:399(para)
+msgid ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: limits.5.xml:41(firstname)
+msgid "Luca"
+msgstr ""
+
+#: limits.5.xml:42(surname)
+msgid "Berra"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: limits.5.xml:59(refentrytitle) limits.5.xml:66(refname)
+msgid "limits"
+msgstr "limits"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: limits.5.xml:67(refpurpose)
+msgid "resource limits definition"
+msgstr "файл контроля ресурсов"
+
+# type: Content of: <refentry><refsect1><para>
+#: limits.5.xml:73(para)
+msgid ""
+"The <emphasis remap=\"I\">limits</emphasis> file (<filename>/etc/limits</"
+"filename> by default or LIMITS_FILE defined <filename>config.h</filename>) "
+"describes the resource limits you wish to impose. It should be owned by root "
+"and readable by root account only."
+msgstr ""
+"В файле <emphasis remap=\"I\">limits</emphasis> (по умолчанию <filename>/etc/"
+"limits</filename> или определяется значением LIMITS_FILE в файле "
+"<filename>config.h</filename>) описываются ограничения, которые можно "
+"изменять. Этот файл должен принадлежать суперпользователю и право на чтение "
+"должно быть только у суперпользователя."
+
+# type: Content of: <refentry><refsect1><para>
+#: limits.5.xml:81(para)
+msgid ""
+"By default no quota is imposed on 'root'. In fact, there is no way to impose "
+"limits via this procedure to root-equiv accounts (accounts with UID 0)."
+msgstr ""
+"По умолчанию учётная запись «root» ничем не ограничена. Фактически, никак "
+"нельзя установить ограничения с помощью этой процедуры на учётные записи, "
+"имеющие права суперпользователя (учётные записи с UID равным 0)."
+
+# type: Content of: <refentry><refsect1><para>
+#: limits.5.xml:87(para)
+msgid "Each line describes a limit for a user in the form:"
+msgstr "Каждая строка описывает ограничение для одного пользователя имеет вид:"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: limits.5.xml:90(emphasis)
+msgid "user LIMITS_STRING"
+msgstr "user СТРОКА_ОГРАНИЧЕНИЙ"
+
+#: limits.5.xml:93(para)
+msgid "or in the form:"
+msgstr "или в виде:"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: limits.5.xml:96(emphasis)
+msgid "@group LIMITS_STRING"
+msgstr "@group СТРОКА_ОГРАНИЧЕНИЙ"
+
+# type: Content of: <refentry><refsect1><para>
+#: limits.5.xml:99(para)
+msgid ""
+"The <emphasis>LIMITS_STRING</emphasis> is a string of a concatenated list of "
+"resource limits. Each limit consists of a letter identifier followed by a "
+"numerical limit."
+msgstr ""
+"<emphasis>СТРОКА_ОГРАНИЧЕНИЙ</emphasis> — это строка, в которой указаны "
+"сразу несколько ограничений. Каждое ограничение состоит из буквенного "
+"идентификатора и числового значения."
+
+# type: Content of: <refentry><refsect1><para>
+#: limits.5.xml:105(para)
+msgid "The valid identifiers are:"
+msgstr "Допустимые идентификаторы:"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: limits.5.xml:108(para)
+msgid "A: max address space (KB)"
+msgstr "A: максимальное адресное пространство (КБ)"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: limits.5.xml:109(para)
+msgid "C: max core file size (KB)"
+msgstr "C: максимальный размер файла core (КБ)"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: limits.5.xml:110(para)
+msgid "D: max data size (KB)"
+msgstr "D: максимальный размер данных (КБ)"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: limits.5.xml:111(para)
+#, fuzzy
+#| msgid "F: maximum filesize (KB)"
+msgid "F: maximum file size (KB)"
+msgstr "F: максимальный размер файла (КБ)"
+
+#: limits.5.xml:112(para)
+msgid ""
+"K: file creation mask, set by <citerefentry><refentrytitle>umask</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"K: маска создаваемых файлов, устанавливается с помощью вызова "
+"<citerefentry><refentrytitle>umask</refentrytitle><manvolnum>2</manvolnum></"
+"citerefentry>."
+
+#: limits.5.xml:117(para)
+msgid "I: max nice value (0..39 which translates to 20..-19)"
+msgstr ""
+"I: максимальное значение уступчивости (nice) (0..39, преобразуемые в 20..-19)"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: limits.5.xml:119(para)
+msgid "L: max number of logins for this user"
+msgstr ""
+"L: максимальное число возможных регистраций в системе этого пользователя"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: limits.5.xml:120(para)
+msgid "M: max locked-in-memory address space (KB)"
+msgstr "M: максимальное синхронизируемое адресное пространство памяти (КБ)"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: limits.5.xml:121(para)
+msgid "N: max number of open files"
+msgstr "N: максимальное число открытых файлов"
+
+#: limits.5.xml:122(para)
+msgid "O: max real time priority"
+msgstr "O: максимальный приоритет реального времени"
+
+#: limits.5.xml:123(para)
+msgid ""
+"P: process priority, set by <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"P: приоритет процесса, устанавливается с помощью вызова "
+"<citerefentry><refentrytitle>setpriority</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: limits.5.xml:128(para)
+msgid "R: max resident set size (KB)"
+msgstr "R: максимальный размер резидентного сегмента (КБ)"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: limits.5.xml:129(para)
+msgid "S: max stack size (KB)"
+msgstr "S: максимальный размер стека (КБ)"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: limits.5.xml:130(para)
+msgid "T: max CPU time (MIN)"
+msgstr "T: максимальное время использования процессора (минут)"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: limits.5.xml:131(para)
+msgid "U: max number of processes"
+msgstr "U: максимальное число процессов"
+
+#: limits.5.xml:134(para)
+msgid ""
+"For example, <emphasis remap=\"I\">L2D2048N5</emphasis> is a valid "
+"<emphasis>LIMITS_STRING</emphasis>. For reading convenience, the following "
+"entries are equivalent:"
+msgstr ""
+"Например, значение <emphasis remap=\"I\">L2D2048N5</emphasis> допустимо для "
+"<emphasis>СТРОКИ_ОГРАНИЧЕНИЙ</emphasis>. Для удобства чтения, следующие "
+"записи эквивалентны:"
+
+# type: Content of: <refentry><refsect1><para>
+#: limits.5.xml:140(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+" username L2D2048N5\n"
+" username L2 D2048 N5\n"
+" "
+msgstr ""
+"\n"
+" username L2D2048N5\n"
+" username L2 D2048 N5\n"
+" "
+
+# type: Content of: <refentry><refsect1><para>
+#: limits.5.xml:145(para)
+#, fuzzy
+#| msgid ""
+#| "Be aware that after <emphasis remap=\"I\">username</emphasis> the rest of "
+#| "the line is considered a limit string, thus comments are not allowed. A "
+#| "invalid limits string will be rejected (not considered) by the "
+#| "<command>login</command> program."
+msgid ""
+"Be aware that after <emphasis remap=\"I\">username</emphasis> the rest of "
+"the line is considered a limit string, thus comments are not allowed. An "
+"invalid limits string will be rejected (not considered) by the "
+"<command>login</command> program."
+msgstr ""
+"Заметим, что после <emphasis remap=\"I\">username</emphasis> оставшаяся "
+"часть строки считается строкой ограничений, поэтому комментарии недопустимы. "
+"Неправильная строка ограничений будет отброшена (не учтена) программой "
+"<command>login</command>."
+
+#: limits.5.xml:152(para)
+msgid ""
+"The default entry is denoted by username \"<emphasis>*</emphasis>\". If you "
+"have multiple <emphasis remap=\"I\">default</emphasis> entries in your "
+"<emphasis>LIMITS_FILE</emphasis>, then the last one will be used as the "
+"default entry."
+msgstr ""
+"Запись по умолчанию выглядит как username \"<emphasis>*</emphasis>\". Если у "
+"вас есть несколько записей <emphasis remap=\"I\">по умолчанию</emphasis> в "
+"файле <emphasis>LIMITS_FILE</emphasis>, то будет использоваться последняя."
+
+#: limits.5.xml:159(para)
+msgid ""
+"The limits specified in the form \"<replaceable>@group</replaceable>\" apply "
+"to the members of the specified <replaceable>group</replaceable>."
+msgstr ""
+"Ограничения, задаваемые в виде «<replaceable>@group</replaceable>», "
+"применяются к членам указанной группы <replaceable>group</replaceable>."
+
+#: limits.5.xml:165(para)
+#, fuzzy
+#| msgid ""
+#| "If more than one line with limits for an user exist, only the first line "
+#| "for this user will be considered."
+msgid ""
+"If more than one line with limits for a user exist, only the first line for "
+"this user will be considered."
+msgstr ""
+"Если для пользователя есть более одной строки ограничений, то учитывается "
+"только первая строка."
+
+#: limits.5.xml:170(para)
+#, fuzzy
+#| msgid ""
+#| "If no lines are specified for an user, the last <replaceable>@group</"
+#| "replaceable> line matching a group whose the user is a member of will be "
+#| "considered, or the last line with default limits if no groups contain the "
+#| "user."
+msgid ""
+"If no lines are specified for a user, the last <replaceable>@group</"
+"replaceable> line matching a group whose the user is a member of will be "
+"considered, or the last line with default limits if no groups contain the "
+"user."
+msgstr ""
+"Если для пользователя не указано ни одной строки, то учитывается последняя "
+"строка <replaceable>@group</replaceable> с группой, в которую входит "
+"пользователь, или последняя строка с ограничениями по умолчанию, если не "
+"указано групп, в которые входит пользователь."
+
+# type: Content of: <refentry><refsect1><para>
+#: limits.5.xml:177(para)
+msgid ""
+"To completely disable limits for a user, a single dash \"<emphasis>-</"
+"emphasis>\" will do."
+msgstr ""
+"Чтобы полностью снять ограничения с пользователя, используется одиночное "
+"тире «<emphasis>-</emphasis>»."
+
+#: limits.5.xml:182(para)
+msgid ""
+"To disable a limit for a user, a single dash \"<replaceable>-</replaceable>"
+"\" can be used instead of the numerical value for this limit."
+msgstr ""
+"Чтобы снять ограничение с пользователя, вместо числового значения "
+"ограничения можно использовать одиночное тире «<emphasis>-</emphasis>»."
+
+# type: Content of: <refentry><refsect1><para>
+#: limits.5.xml:188(para)
+msgid ""
+"Also, please note that all limit settings are set PER LOGIN. They are not "
+"global, nor are they permanent. Perhaps global limits will come, but for now "
+"this will have to do ;)"
+msgstr ""
+"Также заметьте, что все настройки ограничений делаются ДЛЯ КОНКРЕТНОЙ "
+"УЧЁТНОЙ ЗАПИСИ. Они не являются глобальными и не постоянны. Возможно "
+"глобальные ограничения и появятся, но пока это только в планах ;)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: limits.5.xml:199(filename)
+msgid "/etc/limits"
+msgstr "/etc/limits"
+
+#: limits.5.xml:207(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+
+#: lastlog.8.xml:67(refpurpose)
+msgid "reports the most recent login of all users or of a given user"
+msgstr ""
+"выводит отчёт о последней регистрации в системе всех или указанного "
+"пользователя"
+
+#: lastlog.8.xml:81(para)
+msgid ""
+"<command>lastlog</command> formats and prints the contents of the last login "
+"log <filename>/var/log/lastlog</filename> file. The <emphasis>login-name</"
+"emphasis>, <emphasis>port</emphasis>, and <emphasis>last login time</"
+"emphasis> will be printed. The default (no flags) causes lastlog entries to "
+"be printed, sorted by their order in <filename>/etc/passwd</filename>."
+msgstr ""
+"Программа <command>lastlog</command> упорядочивает и выводит содержимое "
+"файла <filename>/var/log/lastlog</filename>, который содержит даты "
+"последнего входа пользователей в систему. Выводятся <emphasis>имя "
+"пользователя</emphasis>, <emphasis>порт</emphasis> и <emphasis>дата "
+"последнего входа в систему</emphasis>. По умолчанию (вызов без параметров) "
+"показываются записи файла lastlog, отсортированные согласно расположению "
+"пользователей в файле <filename>/etc/passwd</filename>."
+
+# type: Content of: <refentry><refsect1><para>
+#: lastlog.8.xml:93(para)
+msgid "The options which apply to the <command>lastlog</command> command are:"
+msgstr "Параметры команды <command>lastlog</command>:"
+
+#: lastlog.8.xml:98(term)
+msgid ""
+"<option>-b</option>, <option>--before</option>&nbsp;<replaceable>DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-b</option>, <option>--before</option>&nbsp;<replaceable>ДНЕЙ</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: lastlog.8.xml:102(para)
+msgid ""
+"Print only lastlog records older than <emphasis remap=\"I\">DAYS</emphasis>."
+msgstr ""
+"Показать записи lastlog за последние <emphasis remap=\"I\">ДНЕЙ</emphasis>."
+
+#: lastlog.8.xml:108(term)
+#, fuzzy
+#| msgid "<option>-u</option>, <option>--user</option>"
+msgid "<option>-C</option>, <option>--clear</option>"
+msgstr "<option>-u</option>, <option>--user</option>"
+
+#: lastlog.8.xml:112(para)
+#, fuzzy
+#| msgid ""
+#| "This option is only valid in combination with the <option>-d</option> (or "
+#| "<option>--home</option>) option."
+msgid ""
+"Clear lastlog record of a user. This option can be used only together with "
+"<option>-u</option> (<option>--user</option>))."
+msgstr ""
+"Этот параметр можно использовать только с параметром <option>-d</option> "
+"(или <option>--home</option>)."
+
+#: lastlog.8.xml:139(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-S</option>, <option>--set</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: lastlog.8.xml:143(para)
+msgid ""
+"Set lastlog record of a user to the current time. This option can be used "
+"only together with <option>-u</option> (<option>--user</option>))."
+msgstr ""
+
+#: lastlog.8.xml:150(term) faillog.8.xml:192(term)
+msgid ""
+"<option>-t</option>, <option>--time</option>&nbsp;<replaceable>DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option>&nbsp;<replaceable>ДНЕЙ</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: lastlog.8.xml:154(para)
+msgid ""
+"Print the lastlog records more recent than <emphasis remap=\"I\">DAYS</"
+"emphasis>."
+msgstr ""
+"Показать записи lastlog новее чем <emphasis remap=\"I\">ДНЕЙ</emphasis>."
+
+#: lastlog.8.xml:161(term) faillog.8.xml:202(term)
+msgid ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+"replaceable>|<replaceable>RANGE</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>УЧЁТНАЯ "
+"ЗАПИСЬ</replaceable>|<replaceable>ДИАПАЗОН</replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: lastlog.8.xml:165(para)
+msgid "Print the lastlog record of the specified user(s)."
+msgstr "Показать запись lastlog только для указанного пользователя(ей)."
+
+#: lastlog.8.xml:168(para) faillog.8.xml:211(para)
+msgid ""
+"The users can be specified by a login name, a numerical user ID, or a "
+"<replaceable>RANGE</replaceable> of users. This <replaceable>RANGE</"
+"replaceable> of users can be specified with a min and max values "
+"(<replaceable>UID_MIN-UID_MAX</replaceable>), a max value (<replaceable>-"
+"UID_MAX</replaceable>), or a min value (<replaceable>UID_MIN-</replaceable>)."
+msgstr ""
+"Пользователя можно указать по отдельному имени, числовому идентификатору или "
+"в виде <replaceable>ДИАПАЗОНА</replaceable> пользователей. Такой "
+"<replaceable>ДИАПАЗОН</replaceable> можно задавать в виде максимального и "
+"минимального значений(<replaceable>UID_МИН-UID_МАКС</replaceable>), "
+"максимального (<replaceable>-UID_МАКС</replaceable>) или минимального "
+"(<replaceable>UID_МИН-</replaceable>) значения."
+
+#: lastlog.8.xml:180(para)
+msgid ""
+"If the user has never logged in the message <emphasis>** Never logged in**</"
+"emphasis> will be displayed instead of the port and time."
+msgstr ""
+"Если пользователь никогда не регистрировался в системе, то будет показано "
+"сообщение <emphasis>** Никогда не входил в систему**</emphasis> вместо "
+"названия порта и даты."
+
+#: lastlog.8.xml:185(para)
+msgid ""
+"Only the entries for the current users of the system will be displayed. "
+"Other entries may exist for users that were deleted previously."
+msgstr ""
+"Будут показаны записи только для пользователей, имеющих в системе данный "
+"момент. В журнале могут существовать записи для удалённых ранее "
+"пользователей."
+
+# type: Content of: <refentry><refsect1><title>
+#: lastlog.8.xml:193(title) groups.1.xml:90(title) chsh.1.xml:140(title)
+#: chage.1.xml:237(title)
+msgid "NOTE"
+msgstr "ЗАМЕЧАНИЕ"
+
+# type: Content of: <refentry><refsect1><para>
+#: lastlog.8.xml:194(para)
+msgid ""
+"The <filename>lastlog</filename> file is a database which contains info on "
+"the last login of each user. You should not rotate it. It is a sparse file, "
+"so its size on the disk is usually much smaller than the one shown by "
+"\"<command>ls -l</command>\" (which can indicate a really big file if you "
+"have in <filename>passwd</filename> users with a high UID). You can display "
+"its real size with \"<command>ls -s</command>\"."
+msgstr ""
+"Файл <filename>lastlog</filename> содержит информацию о последней "
+"регистрации в системе каждого пользователя. Вы не должны применять к нему "
+"ротацию журнальных файлов. Этот файл является разреженным, поэтому его "
+"размер на диске гораздо меньше, чем показывает команда «<command>ls -l</"
+"command>» (которая может показывать, что это очень большой файл, если "
+"значения идентификаторов пользователей в системе достигают больших "
+"значений). Чтобы увидеть реальный размер введите «<command>ls -s</command>»."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: lastlog.8.xml:220(filename)
+msgid "/var/log/lastlog"
+msgstr "/var/log/lastlog"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: lastlog.8.xml:222(para)
+msgid "Database times of previous user logins."
+msgstr "содержит список завершённых сеансов работы с системой"
+
+# type: Content of: <refentry><refsect1><para>
+#: lastlog.8.xml:230(para)
+msgid ""
+"Large gaps in UID numbers will cause the lastlog program to run longer with "
+"no output to the screen (i.e. if in lastlog database there is no entries for "
+"users with UID between 170 and 800 lastlog will appear to hang as it "
+"processes entries with UIDs 171-799)."
+msgstr ""
+"Большие промежутки в значениях идентификаторов пользователей приводят к "
+"тому, что программа некоторое время ничего не выводит на экран (то есть, "
+"если в базе данных lastlog нет пользователей с идентификаторами с 170 по "
+"800, то во время обработки UID с 171 по 799 программа кажется повисшей)."
+
+#: gshadow.5.xml:41(contrib)
+msgid "Creation, 2005"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: gshadow.5.xml:46(refentrytitle) gshadow.5.xml:53(refname)
+msgid "gshadow"
+msgstr "gshadow"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: gshadow.5.xml:54(refpurpose)
+msgid "shadowed group file"
+msgstr "файл с защищаемой информацией о группах"
+
+# type: Content of: <refentry><refsect1><para>
+#: gshadow.5.xml:59(para)
+msgid ""
+"<filename>/etc/gshadow</filename> contains the shadowed information for "
+"group accounts."
+msgstr ""
+"Файл <filename>/etc/gshadow</filename> содержит защищаемую информацию о "
+"группах."
+
+#: gshadow.5.xml:69(para)
+msgid "Each line of this file contains the following colon-separated fields:"
+msgstr ""
+"Каждая строка файла содержит поля, отделёнными друг от друга двоеточием:"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: gshadow.5.xml:75(emphasis)
+msgid "group name"
+msgstr "имя группы"
+
+#: gshadow.5.xml:77(para)
+msgid "It must be a valid group name, which exist on the system."
+msgstr "Должно содержать правильное имя группы, которая существует в системе."
+
+#: gshadow.5.xml:90(para)
+msgid ""
+"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 *, users will not be able to use a unix "
+"password to access the group (but group members do not need the password)."
+msgstr ""
+"Если поле пароля содержит строку, которая не удовлетворяет требованиям "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, например содержит ! или *, то пользователь не сможет "
+"использовать пароль unix для доступа в группу (а члену группы пароль не "
+"нужен)."
+
+#: gshadow.5.xml:97(para)
+#, fuzzy
+#| msgid ""
+#| "The password is used when an user who is not a member of the group wants "
+#| "to gain the permissions of this group (see "
+#| "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>)."
+msgid ""
+"The password is used when a user who is not a member of the group wants to "
+"gain the permissions of this group (see <citerefentry><refentrytitle>newgrp</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>)."
+msgstr ""
+"Пароль используется, если пользователю, не являющему членом группы, "
+"требуются права этой группы (смотрите <citerefentry><refentrytitle>newgrp</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>)."
+
+#: gshadow.5.xml:103(para)
+msgid ""
+"This field may be empty, in which case only the group members can gain the "
+"group permissions."
+msgstr ""
+"Это поле может быть пустым; в этом случае только члены группы могут "
+"пользоваться правами группы."
+
+# type: Content of: <refentry><refsect1><para>
+#: gshadow.5.xml:113(para)
+msgid ""
+"This password supersedes any password specified in <filename>/etc/group</"
+"filename>."
+msgstr ""
+"Данный пароль заменяет любой пароль, указанный в файле <filename>/etc/group</"
+"filename>."
+
+#: gshadow.5.xml:121(emphasis)
+msgid "administrators"
+msgstr "администраторы"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: gshadow.5.xml:123(para) gshadow.5.xml:139(para)
+msgid "It must be a comma-separated list of user names."
+msgstr "Список имён пользователей, перечисленных через запятую."
+
+#: gshadow.5.xml:126(para)
+msgid "Administrators can change the password or the members of the group."
+msgstr "Администраторы могут менять пароль или членство в группе."
+
+#: gshadow.5.xml:130(para)
+msgid ""
+"Administrators also have the same permissions as the members (see below)."
+msgstr ""
+"Администраторы также имеют те же права, что и члены группы (смотрите далее)."
+
+#: gshadow.5.xml:137(emphasis)
+msgid "members"
+msgstr "члены"
+
+#: gshadow.5.xml:142(para)
+msgid "Members can access the group without being prompted for a password."
+msgstr "Члены могут иметь доступ к группе без ввода пароля."
+
+# type: Content of: <refentry><refsect1><para>
+#: gshadow.5.xml:146(para)
+msgid ""
+"You should use the same list of users as in <filename>/etc/group</filename>."
+msgstr ""
+"Вы должны использовать тот же список пользователей что и в <filename>/etc/"
+"group</filename>."
+
+#: gshadow.5.xml:175(para)
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: grpck.8.xml:66(refpurpose)
+msgid "verify integrity of group files"
+msgstr "проверяет корректность файлов групп"
+
+# type: Content of: <refentry><refsect1><para>
+#: grpck.8.xml:84(para)
+msgid ""
+"The <command>grpck</command> command verifies the integrity of the groups "
+"information. It checks that all entries in <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</"
+"filename></phrase> have the proper format and contain valid data. The user "
+"is prompted to delete entries that are improperly formatted or which have "
+"other uncorrectable errors."
+msgstr ""
+"Программа <command>grpck</command> проверяет целостность информации о "
+"группах в системе. Проверяются формат и правильность данных всех записей в "
+"файлах <filename>/etc/group</filename> и <filename>/etc/gshadow</filename>. "
+"В случае обнаружения ошибок пользователю предлагается подтвердить удаление "
+"записей, имеющих неверный формат или восстановление которых невозможно."
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: grpck.8.xml:101(para)
+msgid "a unique and valid group name"
+msgstr "уникальность и корректность имени группы"
+
+#: grpck.8.xml:104(para)
+msgid ""
+"a valid group identifier <phrase condition=\"gshadow\"> (<filename>/etc/"
+"group</filename> only)</phrase>"
+msgstr ""
+"корректность идентификатора группы <phrase condition=\"gshadow\"> (только "
+"для <filename>/etc/group</filename>)</phrase>"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: grpck.8.xml:111(para)
+msgid ""
+"a valid list of members <phrase condition=\"gshadow\"> and administrators</"
+"phrase>"
+msgstr ""
+"корректность списка членов <phrase condition=\"gshadow\">и администраторов</"
+"phrase>"
+
+#: grpck.8.xml:117(para)
+msgid ""
+"a corresponding entry in the <filename>/etc/gshadow</filename> file "
+"(respectively <filename>/etc/group</filename> for the <filename>gshadow</"
+"filename> checks)"
+msgstr ""
+"соответствие записи в файле <filename>/etc/gshadow</filename> (и <filename>/"
+"etc/group</filename> при проверках <filename>gshadow</filename>)"
+
+# type: Content of: <refentry><refsect1><para>
+#: grpck.8.xml:125(para)
+msgid ""
+"The checks for correct number of fields and unique group name are fatal. If "
+"an entry has the wrong number of fields, the user will be prompted to delete "
+"the entire line. If the user does not answer affirmatively, all further "
+"checks are bypassed. An entry with a duplicated group name is prompted for "
+"deletion, but the remaining checks will still be made. All other errors are "
+"warnings and the user is encouraged to run the <command>groupmod</command> "
+"command to correct the error."
+msgstr ""
+"Ошибки в количестве полей и уникальности имён групп невосстановимы. Если "
+"запись содержит неверное число полей, пользователя попросят подтвердить "
+"удаление всей строки. Если пользователь ответит отрицательно, дальнейшая "
+"проверка выполняться не будет. При ошибке повторения имени группы также "
+"возникает запрос на удаление, но в случае отказа проверка будет продолжена. "
+"Обо всех остальных ошибках выводится предупреждение и пользователю "
+"предлагается запустить команду <command>groupmod</command>, чтобы исправить "
+"ошибку."
+
+#: grpck.8.xml:136(para)
+msgid ""
+"The commands which operate on the <filename>/etc/group</filename><phrase "
+"condition=\"no_gshadow\">file</phrase><phrase condition=\"gshadow\">and "
+"<filename>/etc/gshadow</filename> files</phrase> are not able to alter "
+"corrupted or duplicated entries. <command>grpck</command> should be used in "
+"those circumstances to remove the offending entries."
+msgstr ""
+"Команды, которые работают с файлом <filename>/etc/group</filename> <phrase "
+"condition=\"gshadow\"> и <filename>/etc/gshadow</filename></phrase>, не "
+"способны изменить повреждённые или дублирующиеся записи. В этом случае нужно "
+"использовать <command>grpck</command> для удаления испорченной записи."
+
+# type: Content of: <refentry><refsect1><para>
+#: grpck.8.xml:152(para)
+msgid "The options which apply to the <command>grpck</command> command are:"
+msgstr "Параметры команды <command>grpck</command>:"
+
+#: grpck.8.xml:165(para)
+msgid ""
+"Execute the <command>grpck</command> command in read-only mode. This causes "
+"all questions regarding changes to be answered <emphasis>no</emphasis> "
+"without user intervention."
+msgstr ""
+"Запускать команду <command>grpck</command> в режиме только для чтения. При "
+"этом на все вопросы об изменениях устанавливается ответ <emphasis>нет</"
+"emphasis> и участие пользователя не требуется."
+
+#: grpck.8.xml:187(para)
+msgid ""
+"Sort entries in <filename>/etc/group</filename><phrase condition=\"gshadow"
+"\">and <filename>/etc/gshadow</filename></phrase> by GID."
+msgstr ""
+"Отсортировать все записи в файле <filename>/etc/group</filename><phrase "
+"condition=\"gshadow\">и <filename>/etc/gshadow</filename></phrase> по "
+"числовому идентификатору группы (GID)."
+
+#: grpck.8.xml:196(para)
+#, fuzzy
+#| msgid ""
+#| "By default, <command>grpck</command> operates on <filename>/etc/group</"
+#| "filename><phrase condition=\"gshadow\"> and <filename>/etc/gshadow</"
+#| "filename></phrase>. The user may select alternate files with the "
+#| "<emphasis remap=\"I\">group</emphasis><phrase condition=\"no_gshadow"
+#| "\">parameter.</phrase><phrase condition=\"gshadow\">and <emphasis remap="
+#| "\"I\">shadow</emphasis> parameters.</phrase>"
+msgid ""
+"By default, <command>grpck</command> operates on <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</"
+"filename></phrase>. The user may select alternate files with the <emphasis "
+"remap=\"I\">group</emphasis><phrase condition=\"no_gshadow\">parameter.</"
+"phrase><phrase condition=\"gshadow\">and <emphasis remap=\"I\">shadow</"
+"emphasis> parameters.</phrase>"
+msgstr ""
+"По умолчанию, команда <command>grpck</command> работает с файлом <filename>/"
+"etc/group</filename> <phrase condition=\"gshadow\"> и <filename>/etc/"
+"gshadow</filename></phrase>. Пользователь может указать другие файлы с "
+"помощью параметра <emphasis remap=\"I\">group</emphasis><phrase condition="
+"\"no_gshadow\">.</phrase> <phrase condition=\"gshadow\">и <emphasis remap=\"I"
+"\">shadow</emphasis>.</phrase>"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: grpck.8.xml:264(para)
+msgid "one or more bad group entries"
+msgstr "есть одна или более неправильных записей групп"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: grpck.8.xml:270(para)
+msgid "can't open group files"
+msgstr "не удалось открыть файл групп"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: grpck.8.xml:276(para)
+msgid "can't lock group files"
+msgstr "не удалось заблокировать файл групп"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: grpck.8.xml:282(para)
+msgid "can't update group files"
+msgstr "не удалось изменить файл групп"
+
+# type: Content of: <refentry><refsect1><para>
+#: grpck.8.xml:246(para)
+msgid ""
+"The <command>grpck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Команда <command>grpck</command> завершая работу, возвращает следующие "
+"значения: <placeholder-1/>"
+
+#: grpck.8.xml:291(para)
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"gshadow\"><citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum>, </citerefentry>, </"
+"phrase><citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"gshadow\"><citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum>, </citerefentry>, </"
+"phrase><citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: groups.1.xml:57(refentrytitle) groups.1.xml:64(refname)
+#: groups.1.xml:70(command)
+msgid "groups"
+msgstr "groups"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: groups.1.xml:65(refpurpose)
+msgid "display current group names"
+msgstr "показывает имена групп запустившего программу пользователя"
+
+# type: Content of: <refentry><refsynopsisdiv><cmdsynopsis><arg><replaceable>
+#: groups.1.xml:72(replaceable)
+msgid "user"
+msgstr "имя"
+
+#: groups.1.xml:79(para)
+msgid ""
+"The <command>groups</command> command displays the current group names or ID "
+"values. If the value does not have a corresponding entry in <filename>/etc/"
+"group</filename>, the value will be displayed as the numerical group value. "
+"The optional <emphasis remap=\"I\">user</emphasis> parameter will display "
+"the groups for the named <emphasis remap=\"I\">user</emphasis>."
+msgstr ""
+"Команда <command>groups</command> показывает имена групп запустившего "
+"программу пользователя или их числовые идентификаторы (ID). Если для номера "
+"группы нет соответствующей записи в файле <filename>/etc/group</filename>, "
+"то отображается числовое значение. При указании необязательного параметра "
+"<emphasis remap=\"I\">имя</emphasis> выводятся группы для учётной записи с "
+"указанным <emphasis remap=\"I\">именем</emphasis>."
+
+#: groups.1.xml:91(para)
+msgid ""
+"Systems which do not support concurrent group sets will have the information "
+"from <filename>/etc/group</filename> reported. The user must use "
+"<command>newgrp</command> or <command>sg</command> to change his current "
+"real and effective group ID."
+msgstr ""
+"В системах, не имеющих поддержки одновременного членства в нескольких "
+"группах, используется информация из файла <filename>/etc/group</filename>. "
+"Для смены своей текущей реальной или эффективной группы пользователь должен "
+"использовать команды <command>newgrp</command> или <command>sg</command>."
+
+#: groups.1.xml:113(para)
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: groupmod.8.xml:66(refpurpose)
+msgid "modify a group definition on the system"
+msgstr "изменяет определение группы в системе"
+
+#: groupmod.8.xml:75(replaceable) groupdel.8.xml:75(replaceable)
+msgid "GROUP"
+msgstr "ГРУППА"
+
+#: groupmod.8.xml:81(para)
+msgid ""
+"The <command>groupmod</command> command modifies the definition of the "
+"specified <replaceable>GROUP</replaceable> by modifying the appropriate "
+"entry in the group database."
+msgstr ""
+"Команда <command>groupmod</command> изменяет определение указанной "
+"<replaceable>ГРУППЫ</replaceable>, изменяя соответствующую запись в базе "
+"данных групп."
+
+#: groupmod.8.xml:90(para)
+msgid "The options which apply to the <command>groupmod</command> command are:"
+msgstr "Параметры команды <command>groupmod</command>:"
+
+#: groupmod.8.xml:96(term) groupadd.8.xml:114(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GID</"
+"replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GID</"
+"replaceable>"
+
+#: groupmod.8.xml:100(para)
+msgid ""
+"The group ID of the given <replaceable>GROUP</replaceable> will be changed "
+"to <replaceable>GID</replaceable>."
+msgstr ""
+"Имя группы будет изменено с <replaceable>ГРУППА</replaceable> на "
+"<replaceable>GID</replaceable>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: groupmod.8.xml:104(para)
+msgid ""
+"The value of <replaceable>GID</replaceable> must be a non-negative decimal "
+"integer. This value must be unique, unless the <option>-o</option> option is "
+"used."
+msgstr ""
+"Десятичное значение <replaceable>GID</replaceable> должно быть "
+"неотрицательным. Это значение должно быть уникальным, если не указан "
+"параметр <option>-o</option>."
+
+#: groupmod.8.xml:110(para)
+msgid ""
+"Users who use the group as primary group will be updated to keep the group "
+"as their primary group."
+msgstr ""
+"У пользователей, которых эта группа является первичной, будет выполнено "
+"соответствующее обновление."
+
+#: groupmod.8.xml:114(para)
+msgid ""
+"Any files that have the old group ID and must continue to belong to "
+"<replaceable>GROUP</replaceable>, must have their group ID changed manually."
+msgstr ""
+"У всех файлов, которые имеют ID старой группы и должны продолжать "
+"принадлежать <replaceable>GROUP</replaceable>, нужно изменить их ID вручную."
+
+#: groupmod.8.xml:120(para)
+msgid ""
+"No checks will be performed with regard to the <option>GID_MIN</option>, "
+"<option>GID_MAX</option>, <option>SYS_GID_MIN</option>, or "
+"<option>SYS_GID_MAX</option> from <filename>/etc/login.defs</filename>."
+msgstr ""
+"Никаких проверок по <option>GID_MIN</option>, <option>GID_MAX</option>, "
+"<option>SYS_GID_MIN</option> или <option>SYS_GID_MAX</option> из <filename>/"
+"etc/login.defs</filename> не производится."
+
+#: groupmod.8.xml:135(term)
+msgid ""
+"<option>-n</option>, <option>--new-name</option>&nbsp;"
+"<replaceable>NEW_GROUP</replaceable>"
+msgstr ""
+"<option>-n</option>, <option>--new-name</option>&nbsp;"
+"<replaceable>НОВАЯ_ГРУППА</replaceable>"
+
+#: groupmod.8.xml:139(para)
+msgid ""
+"The name of the group will be changed from <replaceable>GROUP</replaceable> "
+"to <replaceable>NEW_GROUP</replaceable> name."
+msgstr ""
+"Имя группы будет изменено с <emphasis remap=\"I\">ГРУППА</emphasis> на "
+"<emphasis remap=\"I\">НОВАЯ_ГРУППА</emphasis>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: groupmod.8.xml:150(para)
+msgid ""
+"When used with the <option>-g</option> option, allow to change the group "
+"<replaceable>GID</replaceable> to a non-unique value."
+msgstr ""
+"При использовании с параметром <option>-g</option> разрешается изменять "
+"<replaceable>GID</replaceable> группы не уникальным значением."
+
+#: groupmod.8.xml:259(para)
+msgid "E_SUCCESS: success"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: groupmod.8.xml:265(para)
+#, fuzzy
+#| msgid "invalid command syntax"
+msgid "E_USAGE: invalid command syntax"
+msgstr "ошибка в параметрах команды"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: groupmod.8.xml:271(para)
+#, fuzzy
+#| msgid "invalid argument to option"
+msgid "E_BAD_ARG: invalid argument to option"
+msgstr "недопустимое значение параметра"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: groupmod.8.xml:277(para)
+#, fuzzy
+#| msgid "specified group doesn't exist"
+msgid "E_GID_IN_USE: specified group doesn't exist"
+msgstr "указанная группа не существует"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: groupmod.8.xml:283(para)
+#, fuzzy
+#| msgid "specified group doesn't exist"
+msgid "E_NOTFOUND: specified group doesn't exist"
+msgstr "указанная группа не существует"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: groupmod.8.xml:289(para)
+#, fuzzy
+#| msgid "group name already in use"
+msgid "E_NAME_IN_USE: group name already in use"
+msgstr "такое имя группы уже используется"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: groupmod.8.xml:295(para)
+#, fuzzy
+#| msgid "can't update group file"
+msgid "E_GRP_UPDATE: can't update group file"
+msgstr "не удалось изменить файл групп"
+
+# type: Content of: <refentry><refmeta><manvolnum>
+#: groupmod.8.xml:299(replaceable)
+#, fuzzy
+#| msgid "1"
+msgid "11"
+msgstr "1"
+
+#: groupmod.8.xml:301(para)
+msgid "E_CLEANUP_SERVICE: can't setup cleanup service"
+msgstr ""
+
+#: groupmod.8.xml:307(para)
+msgid "E_PAM_USERNAME: can't determine your username for use with pam"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><replaceable>
+#: groupmod.8.xml:311(replaceable)
+msgid "13"
+msgstr "13"
+
+#: groupmod.8.xml:313(para)
+msgid ""
+"E_PAM_ERROR: pam returned an error, see syslog facility id groupmod for the "
+"PAM error message"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para>
+#: groupmod.8.xml:253(para)
+msgid ""
+"The <command>groupmod</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Команда <command>groupmod</command> завершая работу, возвращает следующие "
+"значения: <placeholder-1/>"
+
+#: groupmod.8.xml:322(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: groupmems.8.xml:42(firstname)
+msgid "George"
+msgstr ""
+
+#: groupmems.8.xml:43(surname)
+msgid "Kraft"
+msgstr ""
+
+#: groupmems.8.xml:44(lineage)
+msgid "IV"
+msgstr ""
+
+#: groupmems.8.xml:45(contrib)
+msgid "Creation, 2000"
+msgstr ""
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: groupmems.8.xml:69(refpurpose)
+msgid "administer members of a user's primary group"
+msgstr "управляет членами первичной группы пользователя"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><replaceable>
+#: groupmems.8.xml:76(replaceable) groupmems.8.xml:77(replaceable)
+msgid "user_name"
+msgstr "имя_пользователя"
+
+#: groupmems.8.xml:76(arg)
+msgid "-a <placeholder-1/>"
+msgstr "-a <placeholder-1/>"
+
+#: groupmems.8.xml:77(arg)
+msgid "-d <placeholder-1/>"
+msgstr "-d <placeholder-1/>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><replaceable>
+#: groupmems.8.xml:78(replaceable)
+msgid "group_name"
+msgstr "имя_группы"
+
+#: groupmems.8.xml:78(arg)
+msgid "-g <placeholder-1/>"
+msgstr "-g <placeholder-1/>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option>
+#: groupmems.8.xml:79(arg)
+msgid "-l"
+msgstr "-l"
+
+#: groupmems.8.xml:86(para)
+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 ""
+"Программа <command>groupmems</command> позволяет пользователю управлять "
+"списком членов своей группы не имея привилегий суперпользователя. Программа "
+"<command>groupmems</command> работает в системах, где в качестве первичной "
+"группы пользователя является группа с именем совпадающим с именем "
+"пользователя (то есть, guest / guest)."
+
+#: groupmems.8.xml:94(para)
+msgid ""
+"Only the superuser, as administrator, can use <command>groupmems</command> "
+"to alter the memberships of other groups."
+msgstr ""
+"Только суперпользователь как администратор может использовать "
+"<command>groupmems</command>, чтобы изменить список членов не своей группы."
+
+#: groupmems.8.xml:101(para)
+msgid ""
+"The options which apply to the <command>groupmems</command> command are:"
+msgstr "Параметры команды <command>groupmems</command>:"
+
+#: groupmems.8.xml:107(term)
+msgid ""
+"<option>-a</option>, <option>--add</option>&nbsp;<replaceable>user_name</"
+"replaceable>"
+msgstr ""
+"<option>-a</option>, <option>--add</option>&nbsp;"
+"<replaceable>имя_пользователя</replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: groupmems.8.xml:109(para)
+#, fuzzy
+#| msgid "Add an user to the group membership list."
+msgid "Add a user to the group membership list."
+msgstr "Добавить нового пользователя в группу."
+
+#: groupmems.8.xml:110(para) groupmems.8.xml:126(para)
+#: groupmems.8.xml:157(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, and the group has no "
+"entry in the <filename>/etc/gshadow</filename> file, a new entry will be "
+"created."
+msgstr ""
+"Если существует файл <filename>/etc/gshadow</filename> и записи о группе нет "
+"в файле <filename>/etc/gshadow</filename>, то будет создана новая запись."
+
+#: groupmems.8.xml:118(term)
+msgid ""
+"<option>-d</option>, <option>--delete</option>&nbsp;<replaceable>user_name</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--delete</option>&nbsp;"
+"<replaceable>имя_пользователя</replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: groupmems.8.xml:120(para)
+msgid "Delete a user from the group membership list."
+msgstr "Удалить пользователя из группы."
+
+#: groupmems.8.xml:121(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, the user will be "
+"removed from the list of members and administrators of the group."
+msgstr ""
+"Если существует файл <filename>/etc/gshadow</filename>, то пользователь "
+"будет удалён из списка членов и администраторов группы."
+
+#: groupmems.8.xml:134(term)
+msgid ""
+"<option>-g</option>, <option>--group</option>&nbsp;<replaceable>group_name</"
+"replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--group</option>&nbsp;<replaceable>имя_группы</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: groupmems.8.xml:136(para)
+msgid "The superuser can specify which group membership list to modify."
+msgstr ""
+"Суперпользователь может указать группу, в которой нужно изменить список "
+"членов."
+
+#: groupmems.8.xml:148(term) chage.1.xml:160(term)
+msgid "<option>-l</option>, <option>--list</option>"
+msgstr "<option>-l</option>, <option>--list</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: groupmems.8.xml:150(para)
+msgid "List the group membership list."
+msgstr "Показать список членов группы."
+
+#: groupmems.8.xml:154(term)
+msgid "<option>-p</option>, <option>--purge</option>"
+msgstr "<option>-p</option>, <option>--purge</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: groupmems.8.xml:156(para)
+msgid "Purge all users from the group membership list."
+msgstr "Вычистить всех пользователей из списка членов группы."
+
+# type: Content of: <refentry><refsect1><title>
+#: groupmems.8.xml:180(title)
+msgid "SETUP"
+msgstr "НАСТРОЙКА"
+
+#: groupmems.8.xml:181(para)
+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 ""
+"Исполняемый файл программы <command>groupmems</command> должен иметь права "
+"<literal>2710</literal>, принадлежать пользователю <emphasis>root</emphasis> "
+"и группе <emphasis>groups</emphasis>. Системный администратор может "
+"добавлять пользователей в группу <emphasis>groups</emphasis>, разрешая или "
+"запрещая им запускать программу <command>groupmems</command> для управления "
+"членством в своей группе."
+
+# type: Content of: <refentry><refsect1><programlisting>
+#: groupmems.8.xml:190(programlisting)
+#, no-wrap
+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 ""
+"\n"
+"\t$ groupadd -r groups\n"
+"\t$ chmod 2710 groupmems\n"
+"\t$ chown root.groups groupmems\n"
+"\t$ groupmems -g groups -a gk4\n"
+" "
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: groupmems.8.xml:222(para)
+msgid "secure group account information"
+msgstr "содержит защищаемую информацию о группах"
+
+#: groupmems.8.xml:230(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: groupdel.8.xml:66(refpurpose)
+msgid "delete a group"
+msgstr "удаляет группу"
+
+#: groupdel.8.xml:81(para)
+msgid ""
+"The <command>groupdel</command> command modifies the system account files, "
+"deleting all entries that refer to <replaceable>GROUP</replaceable>. The "
+"named group must exist."
+msgstr ""
+"Программа <command>groupdel</command> изменяет системные файлы учётных "
+"записей, удаляя все записи, относящиеся к <replaceable>ГРУППЕ</replaceable>. "
+"Группа с таким именем должна существовать."
+
+#: groupdel.8.xml:89(para)
+msgid "The options which apply to the <command>groupdel</command> command are:"
+msgstr "Параметры команды <command>groupdel</command>:"
+
+# type: Content of: <refentry><refsect1><para>
+#: groupdel.8.xml:134(para)
+msgid ""
+"You may not remove the primary group of any existing user. You must remove "
+"the user before you remove the group."
+msgstr ""
+"Вы не можете удалить группу, если она является первичной для существующего "
+"пользователя. Вы должны удалить пользователя перед тем как удалять группу."
+
+# type: Content of: <refentry><refsect1><para>
+#: groupdel.8.xml:138(para)
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this group."
+msgstr ""
+"Вы должны вручную проверить все файловые системы, чтобы убедиться, что не "
+"осталось файлов, принадлежащих удалённой группе."
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: groupdel.8.xml:200(para)
+msgid "can't remove user's primary group"
+msgstr "не удалось удалить первичную пользовательскую группу"
+
+# type: Content of: <refentry><refsect1><para>
+#: groupdel.8.xml:176(para)
+msgid ""
+"The <command>groupdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Программа <command>groupdel</command> завершая работу, возвращает следующие "
+"значения: <placeholder-1/>"
+
+#: groupdel.8.xml:215(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: groupadd.8.xml:68(refpurpose)
+msgid "create a new group"
+msgstr "создаёт новую группу"
+
+# type: Content of: <refentry><refsect1><para>
+#: groupadd.8.xml:85(para)
+msgid ""
+"The <command>groupadd</command> command creates a new group account using "
+"the values specified on the command line plus the default values from the "
+"system. The new group will be entered into the system files as needed."
+msgstr ""
+"Программа <command>groupadd</command> создаёт новую группу согласно "
+"указанным значениям командной строки и системным значениям по умолчанию. "
+"Новая группа будет добавлена в системные файлы."
+
+#: groupadd.8.xml:94(para)
+msgid "The options which apply to the <command>groupadd</command> command are:"
+msgstr "Параметры команды <command>groupadd</command>:"
+
+#: groupadd.8.xml:104(para)
+msgid ""
+"This option causes the command to simply exit with success status if the "
+"specified group already exists. When used with <option>-g</option>, and the "
+"specified GID already exists, another (unique) GID is chosen (i.e. <option>-"
+"g</option> is turned off)."
+msgstr ""
+"Завершить работу и вернуть состояние успешного выполнения, если группа уже "
+"существует. Если используется вместе с параметром <option>-g</option> и "
+"указанный GID уже существует, то выбирается другой (уникальный) GID (то есть "
+"параметр <option>-g</option> игнорируется)."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: groupadd.8.xml:118(para)
+msgid ""
+"The numerical value of the group's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than or equal to "
+"<option>GID_MIN</option> and greater than every other group."
+msgstr ""
+"Числовое значение идентификатора группы (ID). Оно должно быть уникальным, "
+"если не используется параметр <option>-o</option>. Значение должно быть "
+"неотрицательным. По умолчанию используется наименьшее значение ID большее "
+"или равное <option>GID_MIN</option> и большее чем у остальных групп."
+
+#: groupadd.8.xml:124(para)
+msgid ""
+"See also the <option>-r</option> option and the <option>GID_MAX</option> "
+"description."
+msgstr ""
+"Смотрите также описание <option>-r</option> и <option>GID_MAX</option>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: groupadd.8.xml:141(para)
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (GID_MIN, GID_MAX "
+"and others). Multiple <option>-K</option> options can be specified."
+msgstr ""
+"Изменить значения по умолчанию (GID_MIN, GID_MAX и другие), которые хранятся "
+"в файле <filename>/etc/login.defs</filename>. Можно указать несколько "
+"параметров <option>-K</option>."
+
+#: groupadd.8.xml:146(para)
+msgid ""
+"Example: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+"<replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+"Пример: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+"<replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+
+#: groupadd.8.xml:150(para)
+msgid ""
+"Note: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+"replaceable>=<replaceable>499</replaceable> doesn't work yet."
+msgstr ""
+"Замечание: запись вида <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+"replaceable>=<replaceable>499</replaceable> пока не работает."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: groupadd.8.xml:161(para)
+msgid "This option permits to add a group with a non-unique GID."
+msgstr "Разрешить добавление группы с не уникальным GID."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: groupadd.8.xml:192(para)
+msgid "Create a system group."
+msgstr "Создать системную группу."
+
+#: groupadd.8.xml:195(para)
+msgid ""
+"The numeric identifiers of new system groups are chosen in the "
+"<option>SYS_GID_MIN</option>-<option>SYS_GID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>GID_MIN</option>-"
+"<option>GID_MAX</option>."
+msgstr ""
+"Числовые идентификаторы для системных групп выбираются из диапазона "
+"<option>SYS_GID_MIN</option>-<option>SYS_GID_MAX</option>, определённых в "
+"<filename>login.defs</filename>, а не из <option>GID_MIN</option>-"
+"<option>GID_MAX</option>."
+
+# type: Content of: <refentry><refsect1><para>
+#: groupadd.8.xml:275(para)
+msgid ""
+"Groupnames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+"Имена групп должны начинаться со строчной буквы или символа подчёркивания, и "
+"должны состоять только из строчных букв, цифр, символов подчёркивания и "
+"минус. Они могут заканчиваться знаком доллара. Это можно описать регулярным "
+"выражением: [a-z_][a-z0-9_-]*[$]?"
+
+# type: Content of: <refentry><refsect1><para>
+#: groupadd.8.xml:281(para)
+msgid "Groupnames may only be up to &GROUP_NAME_MAX_LENGTH; characters long."
+msgstr "Имена групп могут быть длиной не более &GROUP_NAME_MAX_LENGTH; знаков."
+
+# type: Content of: <refentry><refsect1><para>
+#: groupadd.8.xml:284(para)
+msgid ""
+"You may not add a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+"Нельзя добавить группу NIS или LDAP. Это необходимо делать на "
+"соответствующем сервере."
+
+# type: Content of: <refentry><refsect1><para>
+#: groupadd.8.xml:288(para)
+msgid ""
+"If the groupname already exists in an external group database such as NIS or "
+"LDAP, <command>groupadd</command> will deny the group creation request."
+msgstr ""
+"Если имя группы уже существует во внешней базе данных групп, например в NIS "
+"или LDAP, то <command>groupadd</command> не станет создавать группу."
+
+#: groupadd.8.xml:321(para)
+msgid "GID not unique (when <option>-o</option> not used)"
+msgstr "не уникальный GID (если не задан параметр <option>-o</option>)"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: groupadd.8.xml:327(para)
+msgid "group name not unique"
+msgstr "не уникальное имя группы"
+
+# type: Content of: <refentry><refsect1><para>
+#: groupadd.8.xml:297(para)
+msgid ""
+"The <command>groupadd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Программа <command>groupadd</command> завершая работу, возвращает следующие "
+"значения: <placeholder-1/>"
+
+#: groupadd.8.xml:342(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: gpasswd.1.xml:44(firstname)
+msgid "Rafal"
+msgstr ""
+
+#: gpasswd.1.xml:45(surname)
+msgid "Maszkowski"
+msgstr ""
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: gpasswd.1.xml:71(phrase)
+msgid "administer <placeholder-1/>"
+msgstr "управление <placeholder-1/>"
+
+#: gpasswd.1.xml:74(phrase)
+msgid "administer <placeholder-1/> and <placeholder-2/>"
+msgstr "управление <placeholder-1/> и <placeholder-2/>"
+
+# type: Content of: <refentry><refsynopsisdiv><cmdsynopsis><arg><replaceable>
+#: gpasswd.1.xml:85(replaceable) expiry.1.xml:76(replaceable)
+msgid "option"
+msgstr "параметр"
+
+#: gpasswd.1.xml:95(para)
+msgid ""
+"The <command>gpasswd</command> command is used to administer <filename>/etc/"
+"group</filename><phrase condition=\"gshadow\">, and <filename>/etc/gshadow</"
+"filename></phrase>. Every group can have <phrase condition=\"gshadow"
+"\">administrators,</phrase> members and a password."
+msgstr ""
+"Программа <command>gpasswd</command> используется для управления файлом "
+"<filename>/etc/group</filename> <phrase condition=\"gshadow\"> и <filename>/"
+"etc/gshadow</filename></phrase>. В каждой группе могут быть определены "
+"<phrase condition=\"gshadow\">администраторы,</phrase> члены и пароль."
+
+#: gpasswd.1.xml:103(para)
+msgid ""
+"System administrators can use the <option>-A</option> option to define group "
+"administrator(s) and the <option>-M</option> option to define members. They "
+"have all rights of group administrators and members."
+msgstr ""
+"Системные администраторы могут использовать параметр <option>-A</option>, "
+"чтобы назначить группе администратора(ов) и параметр <option>-M</option> для "
+"определения списка членов, а также имеют все права администраторов и членов "
+"группы."
+
+#: gpasswd.1.xml:108(para)
+msgid ""
+"<command>gpasswd</command> called by <phrase condition=\"gshadow\">a group "
+"administrator</phrase><phrase condition=\"no_gshadow\">a system "
+"administrator</phrase> with a group name only prompts for the new password "
+"of the <replaceable>group</replaceable>."
+msgstr ""
+"Программа <command>gpasswd</command>, запущенная <phrase condition=\"gshadow"
+"\">администратором группы</phrase><phrase condition=\"no_gshadow\">системным "
+"администратором</phrase> с указанием в командной строке только имени группы, "
+"предложит назначить пароль <replaceable>группе</replaceable>."
+
+#: gpasswd.1.xml:115(para)
+msgid ""
+"If a password is set the members can still use "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> without a password, and non-members must supply the password."
+msgstr ""
+"Если пароль не пустой, то для членов группы вызов "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> пароля не требует, а не члены группы должны ввести пароль."
+
+# type: Content of: <refentry><refsect1><refsect2><title>
+#: gpasswd.1.xml:123(title)
+msgid "Notes about group passwords"
+msgstr "Замечания о паролях групп"
+
+# type: Content of: <refentry><refsect1><refsect2><para>
+#: gpasswd.1.xml:124(para)
+msgid ""
+"Group passwords are an inherent security problem since more than one person "
+"is permitted to know the password. However, groups are a useful tool for "
+"permitting co-operation between different users."
+msgstr ""
+"Пароли групп имеют врождённую проблему с безопасностью, так как пароль знает "
+"более одного человека. Однако, группы являются полезным инструментом "
+"совместной работы различных пользователей."
+
+#: gpasswd.1.xml:135(para)
+msgid ""
+"Except for the <option>-A</option> and <option>-M</option> options, the "
+"options cannot be combined."
+msgstr ""
+"За исключением параметров <option>-A</option> и <option>-M</option>, "
+"параметры нельзя использовать вместе."
+
+#: gpasswd.1.xml:139(para)
+msgid "The options cannot be combined."
+msgstr "Параметры не могут быть указаны одновременно."
+
+# type: Content of: <refentry><refsect1><para>
+#: gpasswd.1.xml:142(para)
+msgid "The options which apply to the <command>gpasswd</command> command are:"
+msgstr "Параметры команды <command>gpasswd</command>:"
+
+#: gpasswd.1.xml:147(term)
+msgid ""
+"<option>-a</option>, <option>--add</option>&nbsp;<replaceable>user</"
+"replaceable>"
+msgstr ""
+"<option>-a</option>, <option>--add</option>&nbsp;<replaceable>пользователь</"
+"replaceable>"
+
+#: gpasswd.1.xml:151(para)
+msgid ""
+"Add the <replaceable>user</replaceable> to the named <replaceable>group</"
+"replaceable>."
+msgstr ""
+"Добавить <replaceable>пользователя</replaceable> в указанную "
+"<replaceable>группу</replaceable>."
+
+#: gpasswd.1.xml:160(term)
+msgid ""
+"<option>-d</option>, <option>--delete</option>&nbsp;<replaceable>user</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--delete</option>&nbsp;"
+"<replaceable>пользователь</replaceable>"
+
+#: gpasswd.1.xml:164(para)
+msgid ""
+"Remove the <replaceable>user</replaceable> from the named "
+"<replaceable>group</replaceable>."
+msgstr ""
+"Удалить <replaceable>пользователя</replaceable> из указанной "
+"<replaceable>группы</replaceable>."
+
+#: gpasswd.1.xml:181(term)
+msgid ""
+"<option>-Q</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-Q</option>, <option>--root</option>&nbsp;<replaceable>КАТ_CHROOT</"
+"replaceable>"
+
+#: gpasswd.1.xml:195(term)
+msgid "<option>-r</option>, <option>--remove-password</option>"
+msgstr "<option>-r</option>, <option>--remove-password</option>"
+
+#: gpasswd.1.xml:199(para)
+msgid ""
+"Remove the password from the named <replaceable>group</replaceable>. The "
+"group password will be empty. Only group members will be allowed to use "
+"<command>newgrp</command> to join the named <replaceable>group</replaceable>."
+msgstr ""
+"Удалить пароль указанной <replaceable>группы</replaceable>. Пароль группы "
+"будет пустым. Только члены группы смогут использовать <command>newgrp</"
+"command> для входа в указанную <replaceable>группу</replaceable>."
+
+#: gpasswd.1.xml:211(term)
+msgid "<option>-R</option>, <option>--restrict</option>"
+msgstr "<option>-R</option>, <option>--restrict</option>"
+
+#: gpasswd.1.xml:215(para)
+msgid ""
+"Restrict the access to the named <replaceable>group</replaceable>. The group "
+"password is set to \"!\". Only group members with a password will be allowed "
+"to use <command>newgrp</command> to join the named <replaceable>group</"
+"replaceable>."
+msgstr ""
+"Ограничить доступ к указанной <replaceable>группе</replaceable>. Пароль "
+"группы становится равным «!». Только члены группы имеющие пароль смогут "
+"использовать <command>newgrp</command> для входа в указанную "
+"<replaceable>группу</replaceable>."
+
+#: gpasswd.1.xml:227(term)
+msgid ""
+"<option>-A</option>, <option>--administrators</option>&nbsp;"
+"<replaceable>user</replaceable>,..."
+msgstr ""
+"<option>-A</option>, <option>--administrators</option> "
+"<replaceable>пользователь</replaceable>, …"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: gpasswd.1.xml:231(para)
+msgid "Set the list of administrative users."
+msgstr "Задать список администраторов группы."
+
+#: gpasswd.1.xml:239(term)
+msgid ""
+"<option>-M</option>, <option>--members</option>&nbsp;<replaceable>user</"
+"replaceable>,..."
+msgstr ""
+"<option>-M</option>, <option>--members</option>&nbsp;"
+"<replaceable>пользователь</replaceable>, …"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: gpasswd.1.xml:243(para)
+msgid "Set the list of group members."
+msgstr "Задать список членов группы."
+
+#: gpasswd.1.xml:253(para)
+msgid ""
+"This tool only operates on the <filename>/etc/group</filename><phrase "
+"condition=\"gshadow\"> and <filename>/etc/gshadow</filename> files.</"
+"phrase><phrase condition=\"no_gshadow\">file.</phrase> Thus you cannot "
+"change any NIS or LDAP group. This must be performed on the corresponding "
+"server."
+msgstr ""
+"Данная утилита работает только с файлом <filename>/etc/group</filename> "
+"<phrase condition=\"gshadow\"> и <filename>/etc/gshadow</filename>.</"
+"phrase><phrase condition=\"no_gshadow\">.</phrase> Она не может изменить "
+"группу NIS или LDAP, это нужно делать на соответствующем сервере."
+
+#: gpasswd.1.xml:298(para)
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition="
+"\"gshadow\">, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition="
+"\"gshadow\">, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: faillog.8.xml:57(refentrytitle) faillog.8.xml:64(refname)
+#: faillog.8.xml:70(command) faillog.5.xml:57(refentrytitle)
+#: faillog.5.xml:64(refname) faillog.5.xml:111(refentrytitle)
+msgid "faillog"
+msgstr "faillog"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: faillog.8.xml:65(refpurpose)
+msgid "display faillog records or set login failure limits"
+msgstr ""
+"показывает записи из файла faillog или задаёт предел неудачных попыток входа "
+"в систему"
+
+#: faillog.8.xml:79(para)
+msgid ""
+"<command>faillog</command> displays the contents of the failure log database "
+"(<filename>/var/log/faillog</filename>). It can also set the failure "
+"counters and limits. When <command>faillog</command> is run without "
+"arguments, it only displays the faillog records of the users who had a login "
+"failure."
+msgstr ""
+"Программа <command>faillog</command> показывает содержимое журнала неудачных "
+"попыток (файл <filename>/var/log/faillog</filename>). Также она может быть "
+"использована для управления счётчиком неудачных попыток и их ограничением. "
+"При запуске <command>faillog</command> без параметров выводятся записи "
+"faillog только тех пользователей, у которых имеется хотя бы одна неудачная "
+"попытка входа."
+
+# type: Content of: <refentry><refsect1><para>
+#: faillog.8.xml:90(para)
+msgid "The options which apply to the <command>faillog</command> command are:"
+msgstr "Параметры команды <command>faillog</command>:"
+
+#: faillog.8.xml:98(para)
+msgid ""
+"Display (or act on) faillog records for all users having an entry in the "
+"<filename>faillog</filename> database."
+msgstr ""
+"Показать записи faillog для всех пользователей из базы данных "
+"<filename>faillog</filename>."
+
+#: faillog.8.xml:102(para)
+msgid ""
+"The range of users can be restricted with the <option>-u</option> option."
+msgstr ""
+"Список пользователей можно ограничить с помощью параметра <option>-u</"
+"option>."
+
+#: faillog.8.xml:106(para)
+msgid ""
+"In display mode, this is still restricted to existing users but forces the "
+"display of the faillog entries even if they are empty."
+msgstr ""
+"В режиме вывода это ограничивает вывод списком существующих пользователей, "
+"но при этом для них выводятся даже пустые записи faillog."
+
+#: faillog.8.xml:111(para)
+msgid ""
+"With the <option>-l</option>, <option>-m</option>, <option>-r</option>, "
+"<option>-t</option> options, the users' records are changed, even if the "
+"user does not exist on the system. This is useful to reset records of users "
+"that have been deleted or to set a policy in advance for a range of users."
+msgstr ""
+"Параметры <option>-l</option>, <option>-m</option>, <option>-r</option>, "
+"<option>-t</option> изменяют записи пользователей, даже если они не "
+"существует в системе. Это полезно для сброса записей пользователей, которые "
+"были удалены или для предварительной установки политики для диапазона "
+"пользователей."
+
+#: faillog.8.xml:128(term)
+msgid ""
+"<option>-l</option>, <option>--lock-secs</option>&nbsp;<replaceable>SEC</"
+"replaceable>"
+msgstr ""
+"<option>-l</option>, <option>--lock-secs</option>&nbsp;<replaceable>СЕКУНД</"
+"replaceable>"
+
+#: faillog.8.xml:132(para)
+msgid ""
+"Lock account for <replaceable>SEC</replaceable> seconds after failed login."
+msgstr ""
+"Блокировать учётную запись на указанное количество <replaceable>СЕКУНД</"
+"replaceable> после неудачной попытки входа."
+
+#: faillog.8.xml:136(para) faillog.8.xml:161(para) faillog.8.xml:173(para)
+msgid ""
+"Write access to <filename>/var/log/faillog</filename> is required for this "
+"option."
+msgstr ""
+"Для этого параметра требуется право на запись в <filename>/var/log/faillog</"
+"filename>."
+
+#: faillog.8.xml:143(term)
+msgid ""
+"<option>-m</option>, <option>--maximum</option>&nbsp;<replaceable>MAX</"
+"replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--maximum</option>&nbsp;"
+"<replaceable>МАКС_ЧИСЛО</replaceable>"
+
+#: faillog.8.xml:147(para)
+msgid ""
+"Set the maximum number of login failures after the account is disabled to "
+"<replaceable>MAX</replaceable>."
+msgstr ""
+"Установить максимальное количество неудачных попыток входа перед блокировкой "
+"учётной записи равным <replaceable>МАКС_ЧИСЛО</replaceable>."
+
+#: faillog.8.xml:151(para)
+msgid ""
+"Selecting a <replaceable>MAX</replaceable> value of 0 has the effect of not "
+"placing a limit on the number of failed logins."
+msgstr ""
+"Если значение <replaceable>МАКС_ЧИСЛО</replaceable> равно 0, то количество "
+"неудачных попыток входа не ограничивается."
+
+#: faillog.8.xml:156(para)
+msgid ""
+"The maximum failure count should always be 0 for <emphasis>root</emphasis> "
+"to prevent a denial of services attack against the system."
+msgstr ""
+"Для предотвращения атаки отказа в обслуживании максимальное количество "
+"неудачных попыток входа у <emphasis>root</emphasis> всегда должно быть равно "
+"0."
+
+#: faillog.8.xml:168(term)
+msgid "<option>-r</option>, <option>--reset</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: faillog.8.xml:170(para)
+msgid "Reset the counters of login failures."
+msgstr "Сбросить счётчик неудачных попыток входа."
+
+#: faillog.8.xml:195(para)
+msgid ""
+"Display faillog records more recent than <replaceable>DAYS</replaceable>."
+msgstr "Показать записи faillog новее чем <replaceable>ДНЕЙ</replaceable>."
+
+#: faillog.8.xml:206(para)
+msgid ""
+"Display faillog record or maintains failure counters and limits (if used "
+"with <option>-l</option>, <option>-m</option> or <option>-r</option> "
+"options) only for the specified user(s)."
+msgstr ""
+"Показать запись faillog или изменить счётчики неудачных попыток и "
+"ограничения (если задан параметр <option>-l</option>, <option>-m</option> "
+"или <option>-r</option>) только для указанных учётных записей."
+
+#: faillog.8.xml:224(para)
+msgid ""
+"When none of the <option>-l</option>, <option>-m</option>, or <option>-r</"
+"option> options are used, <command>faillog</command> displays the faillog "
+"record of the specified user(s)."
+msgstr ""
+"Если параметры <option>-l</option>, <option>-m</option> или <option>-r</"
+"option> не заданы, то <command>faillog</command> показывает записи faillog "
+"указанных пользователей."
+
+# type: Content of: <refentry><refsect1><para>
+#: faillog.8.xml:233(para)
+msgid ""
+"<command>faillog</command> only prints out users with no successful login "
+"since the last failure. To print out a user who has had a successful login "
+"since their last failure, you must explicitly request the user with the "
+"<option>-u</option> flag, or print out all users with the <option>-a</"
+"option> flag."
+msgstr ""
+"Программа <command>faillog</command> выводит только записи о пользователях, "
+"последняя попытка входа которых была неудачной. Чтобы увидеть запись о "
+"пользователе, последняя попытка входа которого была удачной, вы должны "
+"специально указать имя пользователя с помощью параметра <option>-u</option>, "
+"или для показа всех пользователей указать параметр <option>-a</option>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: faillog.8.xml:246(filename) faillog.5.xml:99(filename)
+msgid "/var/log/faillog"
+msgstr "/var/log/faillog"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: faillog.8.xml:248(para) faillog.5.xml:101(para)
+msgid "Failure logging file."
+msgstr "журнал неудавшихся попыток входа в систему"
+
+#: faillog.8.xml:256(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>faillog</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>faillog</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: faillog.5.xml:65(refpurpose)
+msgid "login failure logging file"
+msgstr "файл протокола неудачных попыток входа в систему"
+
+#: faillog.5.xml:70(para)
+msgid ""
+"<filename>/var/log/faillog</filename> maintains a count of login failures "
+"and the limits for each account."
+msgstr ""
+"В файле <filename>/var/log/faillog</filename> содержатся счётчики неудачных "
+"попыток входа и ограничения для каждой учётной записи."
+
+# type: Content of: <refentry><refsect1><para>
+#: faillog.5.xml:74(para)
+msgid ""
+"The file contains fixed length records, indexed by numerical UID. Each "
+"record contains the count of login failures since the last successful login; "
+"the maximum number of failures before the account is disabled; the line on "
+"which the last login failure occurred; the date of the last login failure; "
+"and the duration (in seconds) during which the account will be locked after "
+"a failure."
+msgstr ""
+"Этот файл состоит из записей постоянной длины, упорядоченных по числовому "
+"идентификатору учётной записи. Каждая запись содержит количество неудачных "
+"попыток входа с момента последнего успешного входа в систему, максимальное "
+"количество неудачных попыток перед тем как учётная запись будет "
+"заблокирована, терминал, с которого осуществлялась последняя неудачная "
+"попытка входа, дату этого события и интервал (в секундах) на сколько учётная "
+"запись будет заблокирована в случае неудачной попытки."
+
+# type: Content of: <refentry><refsect1><para>
+#: faillog.5.xml:84(para)
+msgid "The structure of the file is:"
+msgstr "Структура файла:"
+
+# type: Content of: <refentry><refsect1><programlisting>
+#: faillog.5.xml:85(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort fail_cnt;\n"
+"\tshort fail_max;\n"
+"\tchar fail_line[12];\n"
+"\ttime_t fail_time;\n"
+"\tlong fail_locktime;\n"
+"};"
+msgstr ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort fail_cnt;\n"
+"\tshort fail_max;\n"
+"\tchar fail_line[12];\n"
+"\ttime_t fail_time;\n"
+"\tlong fail_locktime;\n"
+"};"
+
+#: expiry.1.xml:45(contrib) chsh.1.xml:44(contrib) chfn.1.xml:44(contrib)
+#: chage.1.xml:42(contrib)
+msgid "Creation, 1990"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para><command>
+#: expiry.1.xml:61(refentrytitle) expiry.1.xml:68(refname)
+#: expiry.1.xml:74(command)
+msgid "expiry"
+msgstr "expiry"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: expiry.1.xml:69(refpurpose)
+msgid "check and enforce password expiration policy"
+msgstr "проверяет и изменяет пароль согласно политике устаревания"
+
+#: expiry.1.xml:83(para)
+msgid ""
+"The <command>expiry</command> command checks (<option>-c</option>) the "
+"current password expiration and forces (<option>-f</option>) changes when "
+"required. It is callable as a normal user command."
+msgstr ""
+"Программа <command>expiry</command> проверяет (параметр <option>-c</option>) "
+"сколько ещё времени будет работоспособен текущий пароль и вынуждает изменить "
+"его (параметр <option>-f</option>), если это требуется. Она может "
+"запускаться обычным пользователем."
+
+# type: Content of: <refentry><refsect1><para>
+#: expiry.1.xml:92(para)
+msgid "The options which apply to the <command>expiry</command> command are:"
+msgstr "Параметры команды <command>expiry</command>:"
+
+#: expiry.1.xml:97(term)
+msgid "<option>-c</option>, <option>--check</option>"
+msgstr "<option>-c</option>, <option>--check</option>"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: expiry.1.xml:99(para)
+msgid "Check the password expiration of the current user."
+msgstr "Проверяет и изменяет срок действия пароля у текущего пользователя."
+
+#: expiry.1.xml:105(para)
+msgid "Force a password change if the current user has an expired password."
+msgstr "Принудительно меняет пароль, если его срок действия истёк."
+
+#: expiry.1.xml:140(para) chage.1.xml:318(para)
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: chsh.1.xml:68(refpurpose)
+msgid "change login shell"
+msgstr "изменяет регистрационную оболочку пользователя"
+
+# type: Content of: <refentry><refsect1><para>
+#: chsh.1.xml:85(para)
+msgid ""
+"The <command>chsh</command> command changes the user login shell. This "
+"determines the name of the user's initial login command. A normal user may "
+"only change the login shell for her own account; the superuser may change "
+"the login shell for any account."
+msgstr ""
+"Программа <command>chsh</command> изменяет регистрационную оболочку "
+"пользователя. Она определяет какая команда будет запущена после регистрации "
+"пользователя в системе. Обычный пользователь может изменять регистрационную "
+"оболочку только для своей учётной записи; суперпользователь может изменять "
+"регистрационную оболочку любой учётной записи."
+
+# type: Content of: <refentry><refsect1><para>
+#: chsh.1.xml:96(para)
+msgid "The options which apply to the <command>chsh</command> command are:"
+msgstr "Параметры команды <command>chsh</command>:"
+
+# type: Content of: <refentry><refsect1><para>
+#: chsh.1.xml:130(para)
+msgid ""
+"If the <option>-s</option> option is not selected, <command>chsh</command> "
+"operates in an interactive fashion, prompting the user with the current "
+"login shell. Enter the new value to change the shell, or leave the line "
+"blank to use the current one. The current shell is displayed between a pair "
+"of <emphasis>[ ]</emphasis> marks."
+msgstr ""
+"Если параметр <option>-s</option> не задан, то <command>chsh</command> "
+"переходит в интерактивный режим, предлагая пользователю изменить свою "
+"регистрационную оболочку. Вводимое значение заменяет текущее значение поля; "
+"если введена пустая строка, то текущее значение остаётся неизменным. Текущее "
+"значение регистрационной оболочки указано в скобках <emphasis>[ ]</emphasis>."
+
+#: chsh.1.xml:141(para)
+msgid ""
+"The only restriction placed on the login shell is that the command name must "
+"be listed in <filename>/etc/shells</filename>, unless the invoker is the "
+"superuser, and then any value may be added. An account with a restricted "
+"login shell may not change her login shell. For this reason, placing "
+"<filename>/bin/rsh</filename> in <filename>/etc/shells</filename> is "
+"discouraged since accidentally changing to a restricted shell would prevent "
+"the user from ever changing her login shell back to its original value."
+msgstr ""
+"Все допустимые имена регистрационных оболочек должны быть указаны в файле "
+"<filename>/etc/shells</filename>. На суперпользователя это ограничение не "
+"действует и поэтому ему разрешено указывать любое значение. Для учётной "
+"записи с ограниченной регистрационной оболочкой пользователь не может "
+"изменить свою регистрационную оболочку. Поэтому <filename>/bin/rsh</"
+"filename> в файле <filename>/etc/shells</filename> лучше не указывать, так "
+"как, если пользователь случайно изменит свою регистрационную оболочку на эту "
+"ограниченную оболочку, то не сможет восстановить её первоначальное значение."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: chsh.1.xml:176(filename)
+msgid "/etc/shells"
+msgstr "/etc/shells"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: chsh.1.xml:178(para)
+msgid "List of valid login shells."
+msgstr "содержит список разрешённых регистрационных оболочек"
+
+#: chsh.1.xml:192(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: chpasswd.8.xml:69(refpurpose)
+msgid "update passwords in batch mode"
+msgstr "обновляет пароли в пакетном режиме"
+
+# type: Content of: <refentry><refsect1><para>
+#: chpasswd.8.xml:83(para)
+msgid ""
+"The <command>chpasswd</command> command reads a list of user name and "
+"password pairs from standard input and uses this information to update a "
+"group of existing users. Each line is of the format:"
+msgstr ""
+"Программа <command>chpasswd</command> читает список пар «пользователь "
+"пароль» из стандартного входного потока и обновляет информацию о "
+"существующих пользователях. Каждая строка имеет вид:"
+
+#: chpasswd.8.xml:88(para)
+msgid ""
+"<emphasis remap=\"I\">user_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">имя_пользователя</emphasis>:<emphasis remap=\"I"
+"\">пароль</emphasis>"
+
+# type: Content of: <refentry><refsect1><para>
+#: chpasswd.8.xml:92(para)
+msgid ""
+"By default the passwords must be supplied in clear-text, and are encrypted "
+"by <command>chpasswd</command>. Also the password age will be updated, if "
+"present."
+msgstr ""
+"По умолчанию, передаваемый пароль должен быть в виде обычного текста и "
+"шифруется командой <command>chpasswd</command>. Также, если есть срок "
+"действия пароля, то он будет обновлён."
+
+#: chpasswd.8.xml:97(para)
+#, fuzzy
+#| msgid ""
+#| "The default encryption algorithm can be defined for the system with the "
+#| "<option>ENCRYPT_METHOD</option> or <option>MD5_CRYPT_ENAB</option> "
+#| "variables of <filename>/etc/login.defs</filename>, and can be overwitten "
+#| "with the <option>-e</option>, <option>-m</option>, or <option>-c</option> "
+#| "options."
+msgid ""
+"The default encryption algorithm can be defined for the system with the "
+"<option>ENCRYPT_METHOD</option> or <option>MD5_CRYPT_ENAB</option> variables "
+"of <filename>/etc/login.defs</filename>, and can be overwritten with the "
+"<option>-e</option>, <option>-m</option>, or <option>-c</option> options."
+msgstr ""
+"Системный алгоритм шифрования по умолчанию может быть задан в переменной "
+"<option>ENCRYPT_METHOD</option> или <option>MD5_CRYPT_ENAB</option> в файле "
+"<filename>/etc/login.defs</filename>, и может быть переопределён параметрами "
+"<option>-e</option>, <option>-m</option> или <option>-c</option>."
+
+#: chpasswd.8.xml:105(para)
+msgid ""
+"By default, passwords are encrypted by PAM, but (even if not recommended) "
+"you can select a different encryption method with the <option>-e</option>, "
+"<option>-m</option>, or <option>-c</option> options."
+msgstr ""
+"По умолчанию пароли шифруются PAM, но (даже если это не рекомендуется) вы "
+"можете выбрать другой метод шифрования с помощью параметра <option>-e</"
+"option>, <option>-m</option> или <option>-c</option>."
+
+#: chpasswd.8.xml:111(para)
+#, fuzzy
+#| msgid ""
+#| "<phrase condition=\"pam\">Except when PAM is used to encrypt the "
+#| "passwords,</phrase><command>chpasswd</command> first updates all the "
+#| "passwords in memory, and then commits all the changes to disk if no "
+#| "errors occured for any user."
+msgid ""
+"<phrase condition=\"pam\">Except when PAM is used to encrypt the passwords,</"
+"phrase><command>chpasswd</command> first updates all the passwords in "
+"memory, and then commits all the changes to disk if no errors occurred for "
+"any user."
+msgstr ""
+"Команда <command>chpasswd</command> <phrase condition=\"pam\">(когда для "
+"шифрования паролей не используется PAM)</phrase> сначала обновляет все "
+"пароли в памяти, а затем записывает все изменения на диск, если не было "
+"никаких ошибок."
+
+#: chpasswd.8.xml:117(para)
+msgid ""
+"When PAM is used to encrypt the passwords (and update the passwords in the "
+"system database) then if a password cannot be updated <command>chpasswd</"
+"command> continues updating the passwords of the next users, and will return "
+"an error code on exit."
+msgstr ""
+"В случае когда шифрование паролей (и обновление в системной базе данных) "
+"выполняется PAM и пароль не может быть обновлён, то <command>chpasswd</"
+"command> продолжает обновление паролей остальных пользователей и завершает "
+"работу с кодом ошибки."
+
+# type: Content of: <refentry><refsect1><para>
+#: chpasswd.8.xml:123(para) chgpasswd.8.xml:98(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are created at a single time."
+msgstr ""
+"Данная команда предназначена для работы в крупных системных средах, где за "
+"один раз заводится несколько учётных записей."
+
+#: chpasswd.8.xml:131(para)
+msgid "The options which apply to the <command>chpasswd</command> command are:"
+msgstr "Параметры команды <command>chpasswd</command>:"
+
+#: chpasswd.8.xml:137(term)
+msgid ""
+"<option>-c</option>, <option>--crypt-method</option>&nbsp;"
+"<replaceable>METHOD</replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--crypt-method</option>&nbsp;"
+"<replaceable>МЕТОД</replaceable>"
+
+#: chpasswd.8.xml:142(para) chgpasswd.8.xml:115(para)
+msgid "The available methods are DES, MD5, and NONE."
+msgstr "Возможные методы: DES, MD5 и NONE."
+
+#: chpasswd.8.xml:149(para)
+msgid "By default, PAM is used to encrypt the passwords."
+msgstr "По умолчанию, для шифрования паролей используется PAM."
+
+#: chpasswd.8.xml:152(para)
+msgid ""
+"By default (if none of the <option>-c</option>, <option>-m</option>, or "
+"<option>-e</option> options are specified), the encryption method is defined "
+"by the <option>ENCRYPT_METHOD</option> or <option>MD5_CRYPT_ENAB</option> "
+"variables of <filename>/etc/login.defs</filename>."
+msgstr ""
+"По умолчанию (если не указан параметр<option>-c</option>, <option>-m</"
+"option> или <option>-e</option>), метод шифрования определяется переменной "
+"<option>ENCRYPT_METHOD</option> или <option>MD5_CRYPT_ENAB</option> из файла "
+"<filename>/etc/login.defs</filename>."
+
+#: chpasswd.8.xml:163(term) chgpasswd.8.xml:125(term)
+msgid "<option>-e</option>, <option>--encrypted</option>"
+msgstr "<option>-e</option>, <option>--encrypted</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: chpasswd.8.xml:165(para) chgpasswd.8.xml:127(para)
+msgid "Supplied passwords are in encrypted form."
+msgstr "Передаваемые пароли заданы в шифрованном виде."
+
+#: chpasswd.8.xml:179(term) chgpasswd.8.xml:137(term)
+msgid "<option>-m</option>, <option>--md5</option>"
+msgstr "<option>-m</option>, <option>--md5</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: chpasswd.8.xml:181(para) chgpasswd.8.xml:139(para)
+msgid ""
+"Use MD5 encryption instead of DES when the supplied passwords are not "
+"encrypted."
+msgstr ""
+"Использовать алгоритм шифрования MD5 вместо DES, если пароли передаются не "
+"шифрованными."
+
+#: chpasswd.8.xml:200(term)
+msgid ""
+"<option>-s</option>, <option>--sha-rounds</option>&nbsp;<replaceable>ROUNDS</"
+"replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--sha-rounds</option>&nbsp;"
+"<replaceable>РАУНДОВ</replaceable>"
+
+#: chpasswd.8.xml:219(para)
+msgid ""
+"By default, the number of rounds is defined by the "
+"<option>SHA_CRYPT_MIN_ROUNDS</option> and <option>SHA_CRYPT_MAX_ROUNDS</"
+"option> variables in <filename>/etc/login.defs</filename>."
+msgstr ""
+"По умолчанию, количество раундов определяется переменными "
+"<option>SHA_CRYPT_MIN_ROUNDS</option> и <option>SHA_CRYPT_MAX_ROUNDS</"
+"option> в <filename>/etc/login.defs</filename>."
+
+# type: Content of: <refentry><refsect1><para>
+#: chpasswd.8.xml:232(para) chgpasswd.8.xml:187(para)
+msgid ""
+"Remember to set permissions or umask to prevent readability of unencrypted "
+"files by other users."
+msgstr ""
+"Не забудьте установить права или umask, чтобы не позволить чтение не "
+"шифрованных файлов другими пользователями."
+
+# type: Content of: <refentry><refsect1><para><filename>
+#: chpasswd.8.xml:276(filename)
+msgid "/etc/pam.d/chpasswd"
+msgstr "/etc/pam.d/chpasswd"
+
+#: chpasswd.8.xml:278(para)
+msgid "PAM configuration for <command>chpasswd</command>."
+msgstr "настройки PAM для <command>chpasswd</command>"
+
+#: chpasswd.8.xml:286(para)
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>newusers</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<phrase><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>newusers</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<phrase><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: chgpasswd.8.xml:47(contrib)
+msgid "Creation, 2006"
+msgstr ""
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: chgpasswd.8.xml:65(refpurpose)
+msgid "update group passwords in batch mode"
+msgstr "обновляет пароли групп в пакетном режиме"
+
+# type: Content of: <refentry><refsect1><para>
+#: chgpasswd.8.xml:79(para)
+msgid ""
+"The <command>chgpasswd</command> command reads a list of group name and "
+"password pairs from standard input and uses this information to update a set "
+"of existing groups. Each line is of the format:"
+msgstr ""
+"Программа <command>chgpasswd</command> читает список пар «группа пароль» из "
+"стандартного входного потока и обновляет информацию о существующих группах. "
+"Каждая строка имеет вид:"
+
+#: chgpasswd.8.xml:84(para)
+msgid ""
+"<emphasis remap=\"I\">group_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">имя_группы</emphasis>:<emphasis remap=\"I\">пароль</"
+"emphasis>"
+
+# type: Content of: <refentry><refsect1><para>
+#: chgpasswd.8.xml:88(para)
+msgid ""
+"By default the supplied password must be in clear-text, and is encrypted by "
+"<command>chgpasswd</command>."
+msgstr ""
+"По умолчанию, передаваемый пароль должен быть в виде обычного текста и "
+"шифруется командой <command>chgpasswd</command>."
+
+#: chgpasswd.8.xml:92(para)
+#, fuzzy
+#| msgid ""
+#| "The default encryption algorithm can be defined for the system with the "
+#| "<option>ENCRYPT_METHOD</option> variable of <filename>/etc/login.defs</"
+#| "filename>, and can be overwiten with the <option>-e</option>, <option>-m</"
+#| "option>, or <option>-c</option> options."
+msgid ""
+"The default encryption algorithm can be defined for the system with the "
+"<option>ENCRYPT_METHOD</option> variable of <filename>/etc/login.defs</"
+"filename>, and can be overwritten with the <option>-e</option>, <option>-m</"
+"option>, or <option>-c</option> options."
+msgstr ""
+"Системный алгоритм шифрования по умолчанию может быть задан в переменной "
+"<option>ENCRYPT_METHOD</option> в файле <filename>/etc/login.defs</"
+"filename>, и может быть переопределён параметрами <option>-e</option>, "
+"<option>-m</option> или <option>-c</option>."
+
+#: chgpasswd.8.xml:106(para)
+msgid ""
+"The options which apply to the <command>chgpasswd</command> command are:"
+msgstr "Параметры команды <command>chgpasswd</command>:"
+
+#: chgpasswd.8.xml:238(para)
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: chfn.1.xml:68(refpurpose)
+msgid "change real user name and information"
+msgstr "изменяет информацию о пользователе"
+
+#: chfn.1.xml:85(para)
+msgid ""
+"The <command>chfn</command> command changes user fullname, office room "
+"number, office phone number, and home phone number information for a user's "
+"account. This information is typically printed by "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> and similar programs. A normal user may only change the fields "
+"for her own account, subject to the restrictions in <filename>/etc/login."
+"defs</filename>. (The default configuration is to prevent users from "
+"changing their fullname.) The superuser may change any field for any "
+"account. Additionally, only the superuser may use the <option>-o</option> "
+"option to change the undefined portions of the GECOS field."
+msgstr ""
+"Программа <command>chfn</command> изменяет ФИО, рабочий телефон, рабочий "
+"номер комнаты, рабочий и домашний номер телефона для учётной записи "
+"пользователя. Обычно, эти данные выводятся командой "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> и ей подобными программами. Обычный пользователь может "
+"изменить только определённые данные собственной учётной записи, разрешённые "
+"в файле <filename>/etc/login.defs</filename> (настройкой по умолчанию "
+"пользователю не разрешается менять своё имя и фамилию). Суперпользователь "
+"может изменять любые данные любой учётной записи. Кроме того, только "
+"суперпользователь может использовать параметр <option>-o</option> для "
+"изменения нестандартизованной части данных GECOS."
+
+#: chfn.1.xml:99(para)
+msgid ""
+"These fields must not contain any colons. Except for the <emphasis remap=\"I"
+"\">other</emphasis> field, they should not contain any comma or equal sign. "
+"It is also recommended to avoid non-US-ASCII characters, but this is only "
+"enforced for the phone numbers. The <emphasis remap=\"I\">other</emphasis> "
+"field is used to store accounting information used by other applications."
+msgstr ""
+"Части поля GECOS не должны содержать двоеточий. За исключением части "
+"<emphasis remap=\"I\">другая</emphasis>, в них не должно содержаться запятых "
+"и знаков равно. Также рекомендуется избегать символов не в кодировке US-"
+"ASCII, но это касается только номеров телефонов. Часть <emphasis remap=\"I"
+"\">другая</emphasis> используется для хранения информации об учётной записи, "
+"которая используется другими приложениями."
+
+# type: Content of: <refentry><refsect1><para>
+#: chfn.1.xml:112(para)
+msgid "The options which apply to the <command>chfn</command> command are:"
+msgstr "Параметры команды <command>chfn</command>:"
+
+#: chfn.1.xml:117(term)
+msgid ""
+"<option>-f</option>, <option>--full-name</option>&nbsp;"
+"<replaceable>FULL_NAME</replaceable>"
+msgstr ""
+"<option>-f</option>, <option>--full-name</option>&nbsp;<replaceable>ФИО</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><refsect2><title>
+#: chfn.1.xml:121(para)
+msgid "Change the user's full name."
+msgstr "Изменяет ФИО пользователя."
+
+#: chfn.1.xml:125(term)
+msgid ""
+"<option>-h</option>, <option>--home-phone</option>&nbsp;"
+"<replaceable>HOME_PHONE</replaceable>"
+msgstr ""
+"<option>-h</option>, <option>--home-phone</option>&nbsp;"
+"<replaceable>ДОМАШНИЙ_ТЕЛЕФОН</replaceable>"
+
+#: chfn.1.xml:129(para)
+msgid "Change the user's home phone number."
+msgstr "Изменяет номер домашнего телефона пользователя."
+
+#: chfn.1.xml:133(term)
+msgid ""
+"<option>-o</option>, <option>--other</option>&nbsp;<replaceable>OTHER</"
+"replaceable>"
+msgstr ""
+"<option>-o</option>, <option>--other</option>&nbsp;<replaceable>ДРУГАЯ</"
+"replaceable>"
+
+#: chfn.1.xml:137(para)
+msgid ""
+"Change the user's other GECOS information. This field is used to store "
+"accounting information used by other applications, and can be changed only "
+"by a superuser."
+msgstr ""
+"Изменяет другую информацию GECOS о пользователе. Эта часть используется для "
+"хранения информации об учётной записи, используемой другими приложениями, и "
+"может изменяться только суперпользователем."
+
+#: chfn.1.xml:145(term)
+msgid ""
+"<option>-r</option>, <option>--room</option>&nbsp;<replaceable>ROOM_NUMBER</"
+"replaceable>"
+msgstr ""
+"<option>-r</option>, <option>--room</option>&nbsp;"
+"<replaceable>НОМЕР_КОМНАТЫ</replaceable>"
+
+#: chfn.1.xml:149(para)
+msgid "Change the user's room number."
+msgstr "Изменяет номер комнаты пользователя."
+
+#: chfn.1.xml:165(term)
+msgid "<option>-u</option>, <option>--help</option>"
+msgstr "<option>-u</option>, <option>--help</option>"
+
+#: chfn.1.xml:173(term)
+msgid ""
+"<option>-w</option>, <option>--work-phone</option>&nbsp;"
+"<replaceable>WORK_PHONE</replaceable>"
+msgstr ""
+"<option>-w</option>, <option>--work-phone</option>&nbsp;"
+"<replaceable>РАБОЧИЙ_ТЕЛЕФОН</replaceable>"
+
+#: chfn.1.xml:177(para)
+msgid "Change the user's office phone number."
+msgstr "Изменяет номер рабочего телефона пользователя."
+
+# type: Content of: <refentry><refsect1><para>
+#: chfn.1.xml:181(para)
+msgid ""
+"If none of the options are selected, <command>chfn</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis remap=\"B\">[ ]</emphasis> marks. Without options, <command>chfn</"
+"command> prompts for the current user account."
+msgstr ""
+"Если ни один параметр не указан, то <command>chfn</command> переходит в "
+"интерактивный режим, предлагая запустившему пользователю изменить данные "
+"своей учётной записи. Вводимое значение заменяет текущее значение записи; "
+"если введена пустая строка, то текущее значение остаётся неизменным. Текущее "
+"значение показано в скобках <emphasis remap=\"B\">[ ]</emphasis>. При вызове "
+"без параметров программа <command>chfn</command> изменяет учётную запись "
+"запустившего пользователя."
+
+#: chfn.1.xml:226(para)
+msgid ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: chage.1.xml:66(refpurpose)
+msgid "change user password expiry information"
+msgstr "изменяет информацию об устаревании пароля пользователя"
+
+# type: Content of: <refentry><refsect1><para>
+#: 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 their password."
+msgstr ""
+"Программа <command>chage</command> изменяет количество дней между датой "
+"смены пароля и датой последней смены пароля. Эта информация используется "
+"системой для определения момента, когда пользователь должен сменить свой "
+"пароль."
+
+# type: Content of: <refentry><refsect1><para>
+#: chage.1.xml:92(para)
+msgid "The options which apply to the <command>chage</command> command are:"
+msgstr "Параметры команды <command>chage</command>:"
+
+#: chage.1.xml:97(term)
+msgid ""
+"<option>-d</option>, <option>--lastday</option>&nbsp;<replaceable>LAST_DAY</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--lastday</option>&nbsp;<replaceable>ПОСЛ_ДЕНЬ</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: chage.1.xml:101(para)
+msgid ""
+"Set the number of days since January 1st, 1970 when the password was last "
+"changed. The date may also be expressed in the format YYYY-MM-DD (or the "
+"format more commonly used in your area)."
+msgstr ""
+"Установить число дней прошедших с 1 января 1970 года, когда была последняя "
+"смена пароля. Дата может быть также указана в виде ГГГГ-ММ-ДД (или в форме "
+"согласно региональным настройкам)."
+
+#: chage.1.xml:109(term)
+msgid ""
+"<option>-E</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>EXPIRE_DATE</replaceable>"
+msgstr ""
+"<option>-E</option>, <option>--expiredate</option> "
+"<replaceable>ДАТА_УСТАРЕВАНИЯ</replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: chage.1.xml:113(para)
+msgid ""
+"Set the date or number of days since January 1, 1970 on which the user's "
+"account will no longer be accessible. The date may also be expressed in the "
+"format YYYY-MM-DD (or the format more commonly used in your area). A user "
+"whose account is locked must contact the system administrator before being "
+"able to use the system again."
+msgstr ""
+"Установить дату устаревания учётной записи пользователя, которая задаётся "
+"числом дней прошедших с 1 января 1970 года. Дата может быть также задана в "
+"виде ГГГГ-ММ-ДД (или в форме согласно региональным настройкам). "
+"Пользователь, чья учётная запись была заблокирована, должен обратиться к "
+"системному администратору, если хочет в дальнейшем работать с системой."
+
+#: chage.1.xml:121(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>EXPIRE_DATE</replaceable> will remove an account expiration "
+"date."
+msgstr ""
+"Значение <emphasis remap=\"I\">-1</emphasis> в параметре "
+"<replaceable>ДАТА_УСТАРЕВАНИЯ</replaceable> отменяет устаревание учётной "
+"записи."
+
+#: chage.1.xml:135(term)
+#, fuzzy
+#| msgid "<option>-s</option>, <option>--sort</option>"
+msgid "<option>-i</option>, <option>--iso8601</option>"
+msgstr "<option>-s</option>, <option>--sort</option>"
+
+#: chage.1.xml:137(para)
+msgid "When printing dates, use YYYY-MM-DD format."
+msgstr ""
+
+#: chage.1.xml:141(term)
+msgid ""
+"<option>-I</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-I</option>, <option>--inactive</option>&nbsp;<replaceable>ДНЕЙ</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: chage.1.xml:145(para)
+msgid ""
+"Set the number of days of inactivity after a password has expired before the "
+"account is locked. The <replaceable>INACTIVE</replaceable> option is the "
+"number of days of inactivity. A user whose account is locked must contact "
+"the system administrator before being able to use the system again."
+msgstr ""
+"Установить количество дней неактивности после устаревания пароля перед тем "
+"как учётная запись будет заблокирована. В параметре <replaceable>ДНЕЙ</"
+"replaceable> задаётся количество дней неактивности. Пользователь, чья "
+"учётная запись была заблокирована, должен обратиться к системному "
+"администратору, если хочет в дальнейшем работать с системой."
+
+#: chage.1.xml:152(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>INACTIVE</replaceable> will remove an account's inactivity."
+msgstr ""
+"Значение <emphasis remap=\"I\">-1</emphasis> в параметре <replaceable>ДНЕЙ</"
+"replaceable> отменяет неактивность учётной записи."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: chage.1.xml:164(para)
+msgid "Show account aging information."
+msgstr "Показать информацию об устаревании учётной записи."
+
+#: chage.1.xml:170(term)
+msgid ""
+"<option>-m</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--mindays</option>&nbsp;<replaceable>МИН_ДНЕЙ</"
+"replaceable>"
+
+#: chage.1.xml:182(term)
+msgid ""
+"<option>-M</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-M</option>, <option>--maxdays</option>&nbsp;<replaceable>МАКС_ДНЕЙ</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: chage.1.xml:186(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 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 ""
+"Установить максимальное количество дней работоспособности пароля. Если сумма "
+"значений <replaceable>МАКС_ДНЕЙ</replaceable> и <replaceable>ПОСЛ_ДЕНЬ</"
+"replaceable> раньше текущего дня, то пользователю придётся изменить свой "
+"пароль перед использованием учётной записи. Для того, чтобы это не было "
+"неожиданностью можно воспользоваться параметром <option>-W</option>, который "
+"активирует выдачу предупреждения о смене пароля пользователя заранее."
+
+#: chage.1.xml:215(term)
+msgid ""
+"<option>-W</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>WARN_DAYS</replaceable>"
+msgstr ""
+"<option>-W</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>ПРЕДУП_ДНЕЙ</replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: chage.1.xml:219(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 their password is about to "
+"expire."
+msgstr ""
+"Установить количество дней выдачи предупреждения, перед тем как потребуется "
+"смена пароля. Параметр <replaceable>ПРЕДУП_ДНЕЙ</replaceable> считается в "
+"днях, в течении которых пользователь будет получать предупреждение об "
+"устаревании пароля, перед тем как это случится."
+
+# type: Content of: <refentry><refsect1><para>
+#: chage.1.xml:228(para)
+msgid ""
+"If none of the options are selected, <command>chage</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis>[ ]</emphasis> marks."
+msgstr ""
+"Если ни один параметр не указан, то <command>chage</command> переходит в "
+"интерактивный режим, предлагая запустившему пользователю изменить значения "
+"всех полей своей учётной записи. Вводимое значение заменяет текущее значение "
+"поля; если введена пустая строка, то текущее значение остаётся неизменным. "
+"Текущее значение показано в скобках <emphasis>[ ]</emphasis>."
+
+# type: Content of: <refentry><refsect1><para>
+#: chage.1.xml:238(para)
+msgid ""
+"The <command>chage</command> program requires a shadow password file to be "
+"available."
+msgstr ""
+"Программа <command>chage</command> требует наличия файла теневых паролей."
+
+# type: Content of: <refentry><refsect1><para>
+#: chage.1.xml:242(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 their password or account is due to expire."
+msgstr ""
+"Программа <command>chage</command> работает только от суперпользователя, за "
+"исключением вызова с параметром <option>-l</option>, который может "
+"использоваться непривилегированным пользователем для определения даты "
+"устаревания своего пароля."
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><replaceable>
+#: chage.1.xml:307(replaceable)
+msgid "15"
+msgstr "15"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: chage.1.xml:309(para)
+msgid "can't find the shadow password file"
+msgstr "не удалось найти файл теневых паролей"
+
+# type: Content of: <refentry><refsect1><para>
+#: chage.1.xml:285(para)
+msgid ""
+"The <command>chage</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Программа <command>chage</command> завершая работу, возвращает следующие "
+"значения: <placeholder-1/>"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
+#: chage.1.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+"Yuri Kozlov <yuray@komyakino.ru>, 2005, 2006, 2012 Sergey Alyoshin <alyoshin."
+"s@gmail.com>, 2012 "
+
+#~ msgid ""
+#~ "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."
+#~ msgstr ""
+#~ "После имени пользователя можно указать дополнительные аргументы, которые "
+#~ "будут переданы регистрационной оболочке пользователя. В частности, "
+#~ "аргумент <option>-c</option> заставит большинство оболочек считать "
+#~ "следующий аргумент как команду. Команда будет выполнена оболочкой, "
+#~ "указанной в файле <filename>/etc/passwd</filename>, которая является "
+#~ "регистрационной для указываемого пользователя."
+
+#~ msgid ""
+#~ "You can use the <option>--</option> argument to separate <command>su</"
+#~ "command> options from the arguments supplied to the shell."
+#~ msgstr ""
+#~ "Вы можете использовать параметр <option>--</option> чтобы отделить "
+#~ "параметры <command>su</command> от параметров, которые передаются "
+#~ "оболочке."
+
+#~ msgid ""
+#~ "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 <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>."
+#~ msgstr ""
+#~ "Поле с зашифрованным паролем может быть пустым, и тогда для входа под "
+#~ "этой учётной записью пароль не требуется. Однако, некоторые приложения, "
+#~ "которые читают файл <filename>/etc/passwd</filename>, могут решить не "
+#~ "позволять <emphasis>любой</emphasis> доступ, если поле <emphasis>пароля</"
+#~ "emphasis> пустое. Если поле <emphasis>пароля</emphasis> содержит строчную "
+#~ "<quote>x</quote>, то шифрованный пароль хранится в файле "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>; в файле <filename>shadow</filename> "
+#~ "<emphasis>должна</emphasis> быть соответствующая строка, иначе учётная "
+#~ "запись считается недействительной. Если в поле <emphasis>пароля</"
+#~ "emphasis> содержится какая-то другая строка, то она воспринимается как "
+#~ "шифрованный пароль, согласно формату <citerefentry><refentrytitle>crypt</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><option>
+#~ msgid "-M"
+#~ msgstr "-M"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#~ msgid "can't create mail spool"
+#~ msgstr "не удалось создать почтовый ящик"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#, fuzzy
+#~| msgid ""
+#~| "The name of the user's new login shell. Setting this field to blank "
+#~| "causes the system to select the default login shell."
+#~ msgid ""
+#~ "The SELinux user for the user's login. The default is to leave this field "
+#~ "the blank, which causes the system to select the default SELinux user."
+#~ msgstr ""
+#~ "Имя новой регистрационной оболочки пользователя. Если задать пустое "
+#~ "значение, то будет использована регистрационная оболочка по умолчанию."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option>
+#~ msgid "-q"
+#~ msgstr "-q"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option>
+#~ msgid "-s"
+#~ msgstr "-s"
+
+#, fuzzy
+#~| msgid ""
+#~| "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~| "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, <phrase condition="
+#~ "\"no_pam\"><citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+#~ "phrase><citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#~ msgid "new_users"
+#~ msgstr "new_users"
+
+# type: Content of: <refentry><refsynopsisdiv><cmdsynopsis><arg><replaceable>
+#~ msgid "full_name"
+#~ msgstr "ФИО"
+
+#~ msgid "-f <placeholder-1/>"
+#~ msgstr "-f <placeholder-1/>"
+
+# type: Content of: <refentry><refsynopsisdiv><cmdsynopsis><arg><replaceable>
+#~ msgid "room_no"
+#~ msgstr "номер комнаты"
+
+# type: Content of: <refentry><refsynopsisdiv><cmdsynopsis><arg><replaceable>
+#~ msgid "work_ph"
+#~ msgstr "рабочий телефон"
+
+#~ msgid "-w <placeholder-1/>"
+#~ msgstr "-w <placeholder-1/>"
+
+# type: Content of: <refentry><refsynopsisdiv><cmdsynopsis><arg><replaceable>
+#~ msgid "home_ph"
+#~ msgstr "домашний телефон"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#~ msgid "other"
+#~ msgstr "другое"
+
+#~ msgid "-o <placeholder-1/>"
+#~ msgstr "-o <placeholder-1/>"
+
+#, fuzzy
+#~| msgid ""
+#~| "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~| "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~| "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>pam</"
+#~| "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>group</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+#~ "condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pam</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>group</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>group</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "Note: <option>-K</option>&nbsp;<replaceable>UID_MIN</"
+#~ "replaceable>=<replaceable>10</replaceable>,<replaceable>UID_MAX</"
+#~ "replaceable>=<replaceable>499</replaceable> doesn't work yet."
+#~ msgstr ""
+#~ "Замечание: запись вида <option>-K</option>&nbsp;<replaceable>UID_MIN</"
+#~ "replaceable>=<replaceable>10</replaceable>,<replaceable>UID_MAX</"
+#~ "replaceable>=<replaceable>499</replaceable> пока не работает."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#~ msgid "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE"
+#~ msgstr "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#, fuzzy
+#~| msgid "Supplied passwords are in encrypted form."
+#~ msgid "The supplied passwords must be in clear-text."
+#~ msgstr "Передаваемые пароли заданы в шифрованном виде."
+
+#, fuzzy
+#~ msgid "and <placeholder-1/> files"
+#~ msgstr "-a <placeholder-1/>"
+
+# type: Content of: <refentry><refsect1><para>
+#, fuzzy
+#~| msgid ""
+#~| "<command>usermod</command> will not allow you to change the name of a "
+#~| "user who is logged in. You must make certain that the named user is not "
+#~| "executing any processes when this command is being executed if the "
+#~| "user's numerical user ID is being changed. You must change the owner of "
+#~| "any <command>crontab</command> files manually. You must change the owner "
+#~| "of any <command>at</command> jobs manually. You must make any changes "
+#~| "involving NIS on the NIS server."
+#~ msgid ""
+#~ "<command>usermod</command> will not allow you to change the name of an "
+#~ "user who is logged in. You must make certain that the named user is not "
+#~ "executing any processes when this command is being executed if the user's "
+#~ "numerical user ID is being changed. You must change the owner of any "
+#~ "<command>crontab</command> files manually. You must change the owner of "
+#~ "any <command>at</command> jobs manually. You must make any changes "
+#~ "involving NIS on the NIS server."
+#~ msgstr ""
+#~ "Команда <command>usermod</command> не будет изменять имя пользователя, "
+#~ "если этот пользователь в данный момент работает в системе. Если требуется "
+#~ "изменить числовой идентификатор пользователя, нужно проверить, что от "
+#~ "этого пользователя нет запущенных процессов. Владельца файлов "
+#~ "<command>crontab</command> нужно изменять вручную. Владельца заданий "
+#~ "<command>at</command> нужно изменять вручную. Также вручную нужно сделать "
+#~ "все изменения связанные с NIS на сервере NIS."
+
+# type: Content of: <refentry><refsect1><para>
+#~ msgid ""
+#~ "<command>userdel</command> will not allow you to remove an account if the "
+#~ "user is currently logged in. You must kill any running processes which "
+#~ "belong to an account that you are deleting."
+#~ msgstr ""
+#~ "Команда <command>userdel</command> не будет удалять учётную запись, если "
+#~ "пользователь в данный момент работает в системе. Вы должны завершить все "
+#~ "запущенные процессы, принадлежащие учётной записи, которую нужно удалить."
+
+#~ msgid ""
+#~ "The encrypted password, as returned by "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>. The default is to disable the account."
+#~ msgstr ""
+#~ "Шифрованное значение пароля, которое возвращает функция "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>. По умолчанию учётная запись заблокирована."
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#~ msgid "encrypted password file"
+#~ msgstr "файл с защищаемой информацией о пользователях"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#~ msgid "comma-separated list of group administrators"
+#~ msgstr "список администраторов группы, перечисленных через запятую"
+
+#~ msgid ""
+#~ "The group name and password fields must be filled. The encrypted password "
+#~ "consists of characters from the 64-character alphabet a thru z, A thru Z, "
+#~ "0 thru 9, \\. and /. Refer to <citerefentry><refentrytitle>crypt</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry> for details on how "
+#~ "this string is interpreted. If the password field contains some string "
+#~ "that is not 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, subject to "
+#~ "<citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></"
+#~ "citerefentry>."
+#~ msgstr ""
+#~ "Поля с именем группы и пароль должны быть заполнены. Шифрованный пароль "
+#~ "состоит из разрешённых 64 символов с a по z, с A по Z, с 0 по 9, \\. и /. "
+#~ "Подробней о пароле смотрите на странице руководства "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>. Если поле пароля содержит строку, которая не "
+#~ "удовлетворяет требованиям <citerefentry><refentrytitle>crypt</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, например "
+#~ "содержит ! или *, то пользователь не сможет использовать этот unix пароль "
+#~ "для регистрации с учётом настроек <citerefentry><refentrytitle>pam</"
+#~ "refentrytitle><manvolnum>7</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#, fuzzy
+#~ msgid ""
+#~ "The group ID of the given <replaceable>GROUP</replaceable> will be "
+#~ "changed to <replaceable>GID</replaceable>. The value of <replaceable>GID</"
+#~ "replaceable> must be a non-negative decimal integer. This value must be "
+#~ "unique, unless the <option>-o</option> option is used. Values between 0 "
+#~ "and 999 are typically reserved for system groups. Any files that have the "
+#~ "old group ID and must continue to belong to <replaceable>GROUP</"
+#~ "replaceable>, must have their group ID changed manually."
+#~ msgstr ""
+#~ "Указывается новый ID группы для <replaceable>ГРУППЫ</replaceable>. "
+#~ "Числовое значение <replaceable>GID</replaceable> должно быть "
+#~ "неотрицательным десятичным числом. Оно должно быть уникальным, если не "
+#~ "задан параметр <option>-o</option>. Значения от 0 до 999 обычно "
+#~ "зарезервированы под системные группы. Изменение принадлежности всех "
+#~ "файлов старой группе необходимо выполнять вручную."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#~ msgid ""
+#~ "The group name or number of the user's new initial login group. The group "
+#~ "name must exist. A group number must refer to an already existing group. "
+#~ "The default group number is 1."
+#~ msgstr ""
+#~ "Имя или числовой идентификатор новой начальной группы пользователя. "
+#~ "Группа с таким именем должна существовать. Идентификатор группы должен "
+#~ "указывать на уже существующую группу. По умолчанию идентификатор группы "
+#~ "установлен в 1."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#~ msgid ""
+#~ "The group name or number of the user's initial login group. The group "
+#~ "name must exist. A group number must refer to an already existing group. "
+#~ "The default group number is 1 or whatever is specified in <filename>/etc/"
+#~ "default/useradd</filename>."
+#~ msgstr ""
+#~ "Имя или числовой идентификатор новой начальной группы пользователя. "
+#~ "Группа с таким именем должна существовать. Идентификатор группы должен "
+#~ "указывать на уже существующую группу. Идентификатор группы по умолчанию "
+#~ "равен 1 или значению указанному в файле <filename>/etc/default/useradd</"
+#~ "filename>."
+
+# type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#~ msgid ""
+#~ "The group name or ID for a new user's initial group. The named group must "
+#~ "exist, and a numerical group ID must have an existing entry."
+#~ msgstr ""
+#~ "Имя или числовой идентификатор новой начальной группы пользователя. "
+#~ "Группа с таким именем должна существовать и для числового идентификатора "
+#~ "должна быть запись."
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#~ msgid "days since Jan 1, 1970 that password was last changed"
+#~ msgstr ""
+#~ "число дней с момента последнего изменения пароля, начиная с 1 января 1970 "
+#~ "года"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#~ msgid "days after which password must be changed"
+#~ msgstr "число дней, после которых пароль должен быть изменён"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#~ msgid "days before password is to expire that user is warned"
+#~ msgstr ""
+#~ "число дней, за сколько пользователя начнут предупреждать, что пароль "
+#~ "устаревает"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#~ msgid "days after password expires that account is disabled"
+#~ msgstr "число дней, после устаревания пароля для блокировки учётной записи"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#~ msgid "days since Jan 1, 1970 that account is disabled"
+#~ msgstr ""
+#~ "дней, отсчитывая с 1 января 1970 года, когда учётная запись была "
+#~ "заблокирована"
+
+# type: Content of: <refentry><refsect1><para>
+#, fuzzy
+#~ msgid ""
+#~ "The password field must be filled. The encrypted password consists of 13 "
+#~ "to 24 characters from the 64 character alphabet a thru z, A thru Z, 0 "
+#~ "thru 9, \\. and /. Optionally it can start with a \"$\" character. This "
+#~ "means the encrypted password was generated using another (not DES) "
+#~ "algorithm. For example if it starts with \"$1$\" it means the MD5-based "
+#~ "algorithm was used."
+#~ msgstr ""
+#~ "Поле пароля должно быть заполнено. Шифрованный пароль имеет длину от 13 "
+#~ "до 24 символов и состоит из 64 символов алфавита от a до z, от A до Z, от "
+#~ "0 до 9, \\. и /. Пароль может начинаться с символа \"$\". Это означает, "
+#~ "что шифрованный пароль был сгенерирован с использованием другого (не DES) "
+#~ "алгоритма. Например, если он начинается с \"$1$\", то это означает, что "
+#~ "использовался алгоритм на основе MD5."
+
+# type: Content of: <refentry><refsect1><para>
+#~ msgid ""
+#~ "The date of the last password change is given as the number of days since "
+#~ "Jan 1, 1970. The password may not be changed again until the proper "
+#~ "number of days have passed, and must be changed after the maximum number "
+#~ "of days. If the minimum number of days required is greater than the "
+#~ "maximum number of day allowed, this password may not be changed by the "
+#~ "user."
+#~ msgstr ""
+#~ "Дата последнего изменения пароля задаётся в днях, прошедших с 1 января "
+#~ "1970 года. Пароль не может быть изменён пока не пройдёт положенное число "
+#~ "дней, и должен быть изменён после максимального числа дней. Если "
+#~ "обязательное минимальное число дней больше чем максимальное число дней, "
+#~ "то такой пароль не может быть изменён пользователем."
+
+# type: Content of: <refentry><refsect1><para>
+#~ msgid ""
+#~ "An account is considered to be inactive and is disabled if the password "
+#~ "is not changed within the specified number of days after the password "
+#~ "expires. An account will also be disabled on the specified day regardless "
+#~ "of other password expiration information."
+#~ msgstr ""
+#~ "Учётная запись считается неактивной и будет заблокирована, если пароль не "
+#~ "был изменён за заданное число дней после устаревания пароля. Учётная "
+#~ "запись также будет заблокирована в заданный день, независимо от другой "
+#~ "информации об устаревании пароля."
+
+# type: Content of: <refentry><refsect1><para>
+#~ msgid ""
+#~ "This information supersedes any password or password age information "
+#~ "present in <filename>/etc/passwd</filename>."
+#~ msgstr ""
+#~ "Информация из этого файла заменяет любой пароль или информацию об "
+#~ "устаревании, содержащуюся в файле <filename>/etc/passwd</filename>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>getent</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>getpwnam</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>getent</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>getpwnam</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "This field must contain the name (or number) of a group. The user will be "
+#~ "added as a member to this group. When a non-existent group name or number "
+#~ "is specified, a new group will be created. In the case of a non-existent "
+#~ "group number, both the name and the number of the new group will be this "
+#~ "number."
+#~ msgstr ""
+#~ "Это поле должно содержать имя (или номер). Пользователь будет добавлен в "
+#~ "эту группу. Если указан числовой идентификатор или имя несуществующей "
+#~ "группы, то будет создана новая группа с данным именем и номером."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#~ msgid ""
+#~ "This field will be checked for existence as a directory, and a new "
+#~ "directory with this name will be created if it does not already exist. "
+#~ "The ownership of the directory will be set to be that of the user being "
+#~ "created or updated."
+#~ msgstr ""
+#~ "Будет проверено существование каталога с именем значения данного поля и "
+#~ "если такого каталога нет, то он будет создан. Владельцем каталога будет "
+#~ "назначен обновляемый или создаваемый пользователь."
+
+#, fuzzy
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option>
+#~ msgid "-a"
+#~ msgstr "-a"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option>
+#~ msgid "-d"
+#~ msgstr "-d"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option>
+#~ msgid "-g"
+#~ msgstr "-g"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><replaceable>
+#~ msgid "GID"
+#~ msgstr "GID"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><option>
+#~ msgid "-o"
+#~ msgstr "-o"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><replaceable>
+#~ msgid "KEY"
+#~ msgstr "КЛЮЧ"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><replaceable>
+#~ msgid "VALUE"
+#~ msgstr "ЗНАЧЕНИЕ"
+
+#~ msgid "-K <placeholder-1/>=<placeholder-2/>"
+#~ msgstr "-K <placeholder-1/>=<placeholder-2/>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><option>
+#, fuzzy
+#~ msgid "-R"
+#~ msgstr "-"
+
+#, fuzzy
+#~ msgid "<option>-A</option>&nbsp;<replaceable>user</replaceable>,..."
+#~ msgstr ""
+#~ "<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+#~ "replaceable>"
+
+#, fuzzy
+#~ msgid "<option>-M</option>&nbsp;<replaceable>user</replaceable>,..."
+#~ msgstr ""
+#~ "<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+#~ "replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#~ msgid "Display faillog records for all users."
+#~ msgstr "Показать записи faillog для всех пользователей."
+
+#~ msgid ""
+#~ "Set maximum number of login failures after the account is disabled to "
+#~ "<replaceable>MAX</replaceable>. Selecting <replaceable>MAX</replaceable> "
+#~ "value of 0 has the effect of not placing a limit on the number of failed "
+#~ "logins. The maximum failure count should always be 0 for <emphasis>root</"
+#~ "emphasis> to prevent a denial of services attack against the system."
+#~ msgstr ""
+#~ "Установить максимальное число неудачных попыток входа "
+#~ "равному<replaceable>МАКС_ЧИСЛО</replaceable>, после чего учётная запись "
+#~ "блокируется. Если <replaceable>МАКС_ЧИСЛО</replaceable> равно 0, то "
+#~ "количество неудачных попыток не ограничивается. Максимальное значение "
+#~ "неудачных попыток должно быть всегда равно 0 для <emphasis>root</"
+#~ "emphasis>, для того чтобы предотвратить атаку отказа в обслуживании на "
+#~ "систему."
+
+#~ msgid ""
+#~ "The user's home directory will be created if it does not exist. The files "
+#~ "contained in <replaceable>SKEL_DIR</replaceable> will be copied to the "
+#~ "home directory if the <option>-k</option> option is used, otherwise the "
+#~ "files contained in <filename>/etc/skel</filename> will be used instead. "
+#~ "Any directories contained in <replaceable>SKEL_DIR</replaceable> or "
+#~ "<filename>/etc/skel</filename> will be created in the user's home "
+#~ "directory as well. The <option>-k</option> option is only valid in "
+#~ "conjunction with the <option>-m</option> option. The default is to not "
+#~ "create the directory and to not copy any files."
+#~ msgstr ""
+#~ "Если домашнего каталога пользователя не существует, то он будет создан. "
+#~ "Файлы из каталога <replaceable>КАТАЛОГ_ШАБЛОН</replaceable> будут "
+#~ "скопированы в домашний каталог, если он указан параметр <option>-k</"
+#~ "option>, иначе будут использованы файлы из каталога <filename>/etc/skel</"
+#~ "filename>. Все подкаталоги каталога <replaceable>КАТАЛОГ_ШАБЛОН</"
+#~ "replaceable> или <filename>/etc/skel</filename> будут также созданы в "
+#~ "домашнем каталоге пользователя. Параметр <option>-k</option> можно "
+#~ "использовать только вместе с параметром <option>-m</option>. По "
+#~ "умолчанию, домашний каталог не создаётся и файлы не копируются."
+
+# type: Content of: <refentry><refsect1><refsect2><para>
+#~ msgid ""
+#~ "Your password must be easily remembered so that you will not be forced to "
+#~ "write it on a piece of paper. This can be accomplished by appending two "
+#~ "small words together and separating each with a special character or "
+#~ "digit. For example, Pass%word."
+#~ msgstr ""
+#~ "Пароль должен легко запоминаться, чтобы не было необходимости записывать "
+#~ "его на бумагу. Этого можно достичь соединив два маленьких слова в одно, "
+#~ "разделив их специальным символом или цифрой. Например, Pass%word."
+
+# type: Content of: <refentry><refsect1><refsect2><para>
+#~ msgid ""
+#~ "Other methods of construction involve selecting an easily remembered "
+#~ "phrase from literature and selecting the first or last letter from each "
+#~ "word. An example of this is:"
+#~ msgstr ""
+#~ "Другим методом создания является выбор легко запоминающейся фразы из "
+#~ "литературы и взятие первой или последней буквы каждого слова. Например:"
+
+# type: Content of: <refentry><refsect1><refsect2><itemizedlist><listitem><para>
+#~ msgid "Ask not for whom the bell tolls"
+#~ msgstr "Ask not for whom the bell tolls"
+
+# type: Content of: <refentry><refsect1><refsect2><itemizedlist><listitem><para>
+#~ msgid "which produces"
+#~ msgstr "получается"
+
+# type: Content of: <refentry><refsect1><refsect2><itemizedlist><listitem><para>
+#~ msgid "An4wtbt"
+#~ msgstr "An4wtbt"
+
+# type: Content of: <refentry><refsect1><refsect2><para>
+#~ msgid ""
+#~ "You may be reasonably sure few crackers will have included this in their "
+#~ "dictionaries. You should, however, select your own methods for "
+#~ "constructing passwords and not rely exclusively on the methods given here."
+#~ msgstr ""
+#~ "Можете быть уверены, что некоторые взломщики включат этот пароль в свои "
+#~ "словари. Поэтому вы должны выбрать свои собственные методы создания "
+#~ "паролей и не полагаться на методы предложенные здесь."
+
+# type: Content of: <refentry><refsect1><para>
+#~ msgid ""
+#~ "The only restriction placed on the contents of the fields is that no "
+#~ "control characters may be present, nor any of comma, colon, or equal "
+#~ "sign. The <emphasis remap=\"I\">other</emphasis> field does not have this "
+#~ "restriction, and is used to store accounting information used by other "
+#~ "applications."
+#~ msgstr ""
+#~ "Единственным ограничением значений полей является то, что они не должны "
+#~ "содержать управляющих символов, запятых, двоеточий или знака равно. На "
+#~ "поле <emphasis remap=\"I\">другое</emphasis> не действует это "
+#~ "ограничение, и оно может использоваться для хранения информации об "
+#~ "учётной записи для любых приложений."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#~ msgid ""
+#~ "Range of user IDs to choose from for the <command>useradd</command> "
+#~ "program."
+#~ msgstr ""
+#~ "Диапазон идентификаторов пользователей, используемый программой "
+#~ "<command>useradd</command>."
+
+#~ msgid ""
+#~ "The <option>-t</option> flag overrides the use of <option>-u</option>."
+#~ msgstr ""
+#~ "Параметр <option>-t</option> отменяет действие параметра <option>-u</"
+#~ "option>."
+
+#~ msgid ""
+#~ "By default, <command>grpck</command> operates on the files <filename>/etc/"
+#~ "group</filename> and <filename>/etc/gshadow</filename>. The user may "
+#~ "select alternate files with the <emphasis remap=\"I\">group</emphasis> "
+#~ "and <emphasis remap=\"I\">shadow</emphasis> parameters. Additionally, the "
+#~ "user may execute the command in read-only mode by specifying the <option>-"
+#~ "r</option> flag. This causes all questions regarding changes to be "
+#~ "answered <emphasis>no</emphasis> without user intervention. "
+#~ "<command>grpck</command> can also sort entries in <filename>/etc/group</"
+#~ "filename> and <filename>/etc/gshadow</filename> by GID. To run it in sort "
+#~ "mode pass it <option>-s</option> flag. No checks are performed then, it "
+#~ "just sorts."
+#~ msgstr ""
+#~ "По умолчанию, команда <command>grpck</command> работает с файлами "
+#~ "<filename>/etc/group</filename> и <filename>/etc/gshadow</filename>. "
+#~ "Пользователь может указать другие файлы с помощью параметров <emphasis "
+#~ "remap=\"I\">shadow</emphasis>. Также, пользователь может запустить "
+#~ "команду в режиме только для чтения, указав параметр <option>-r</option>. "
+#~ "Это приведёт к автоматическому ответу <emphasis>нет</emphasis> без "
+#~ "подтверждения пользователя. Команда <command>grpck</command> также может "
+#~ "отсортировать записи в файлах <filename>/etc/group</filename> и "
+#~ "<filename>/etc/gshadow</filename> по номеру группы. Для запуска режима "
+#~ "сортировки укажите параметр <option>-s</option>. В этом режиме проверка "
+#~ "не выполняется, производится только сортировка."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#~ msgid "MAIL_DIR USERDEL_CMD"
+#~ msgstr "MAIL_DIR USERDEL_CMD"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><emphasis>
+#~ msgid "MAIL_DIR"
+#~ msgstr "MAIL_DIR"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#~ msgid "CHFN_AUTH"
+#~ msgstr "CHFN_AUTH"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#~ msgid "GID_MAX GID_MIN"
+#~ msgstr "GID_MAX GID_MIN"
+
+# type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#~ msgid ""
+#~ "The name of the new user's login shell. The named program will be used "
+#~ "for all future new user accounts."
+#~ msgstr ""
+#~ "Имя новой регистрационной оболочки пользователя. Данная программа будет "
+#~ "использована для всех новых пользовательских учётных записей."
+
+#~ msgid "-R <placeholder-1/>"
+#~ msgstr "-R <placeholder-1/>"
+
+# type: Content of: <refentry><refsynopsisdiv><cmdsynopsis><arg><replaceable>
+#~ msgid "user,"
+#~ msgstr "пользователь,"
+
+#~ msgid "-A <placeholder-1/>"
+#~ msgstr "-A <placeholder-1/>"
+
+#~ msgid "-M <placeholder-1/>"
+#~ msgstr "-M <placeholder-1/>"
+
+#~ msgid ""
+#~ "Group administrator can add and delete users using <option>-a</option> "
+#~ "and <option>-d</option> options respectively. Administrators can use "
+#~ "<option>-r</option> option to remove group password. When no password is "
+#~ "set only group members can use <command>newgrp</command> to join the "
+#~ "group. Option <option>-R</option> disables access via a password to the "
+#~ "group through <command>newgrp</command> command (however members will "
+#~ "still be able to switch to this group)."
+#~ msgstr ""
+#~ "Администратор группы может добавлять и удалять пользователей с помощью "
+#~ "параметров <option>-a</option> и <option>-d</option> соответственно. "
+#~ "Администраторы могут использовать параметр <option>-r</option> для "
+#~ "удаления пароля группы. Если пароль не задан, то только члены группы с "
+#~ "помощью команды <command>newgrp</command> могут войти в группу. Указав "
+#~ "параметр <option>-R</option> можно запретить доступ в группу по паролю с "
+#~ "помощью команды <command>newgrp</command> (однако на членов группы это не "
+#~ "распространяется)."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>newusers</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>newusers</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
diff --git a/man/po/shadow-man-pages.pot b/man/po/shadow-man-pages.pot
new file mode 100644
index 0000000..40ba2f7
--- /dev/null
+++ b/man/po/shadow-man-pages.pot
@@ -0,0 +1,5073 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2020-01-23 15:00-0600\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: vipw.8.xml:41(firstname) suauth.5.xml:39(firstname) pwconv.8.xml:45(firstname) login.access.5.xml:40(firstname)
+msgid "Marek"
+msgstr ""
+
+#: vipw.8.xml:42(surname) suauth.5.xml:40(surname) pwconv.8.xml:46(surname) login.access.5.xml:41(surname)
+msgid "Michałkiewicz"
+msgstr ""
+
+#: vipw.8.xml:43(contrib) limits.5.xml:43(contrib)
+msgid "Creation, 1997"
+msgstr ""
+
+#: vipw.8.xml:46(firstname) usermod.8.xml:51(firstname) userdel.8.xml:50(firstname) useradd.8.xml:63(firstname) suauth.5.xml:44(firstname) su.1.xml:61(firstname) sg.1.xml:45(firstname) shadow.5.xml:44(firstname) shadow.3.xml:44(firstname) pwconv.8.xml:50(firstname) pwck.8.xml:50(firstname) porttime.5.xml:44(firstname) passwd.5.xml:44(firstname) passwd.1.xml:51(firstname) newusers.8.xml:60(firstname) newgrp.1.xml:45(firstname) logoutd.8.xml:44(firstname) login.defs.5.xml:111(firstname) login.access.5.xml:45(firstname) login.1.xml:77(firstname) limits.5.xml:46(firstname) lastlog.8.xml:46(firstname) grpck.8.xml:45(firstname) groups.1.xml:44(firstname) groupmod.8.xml:45(firstname) groupmems.8.xml:48(firstname) groupdel.8.xml:45(firstname) groupadd.8.xml:47(firstname) gpasswd.1.xml:49(firstname) faillog.8.xml:44(firstname) faillog.5.xml:44(firstname) expiry.1.xml:48(firstname) chsh.1.xml:47(firstname) chpasswd.8.xml:48(firstname) chgpasswd.8.xml:44(firstname) chfn.1.xml:47(firstname) chage.1.xml:45(firstname)
+msgid "Thomas"
+msgstr ""
+
+#: vipw.8.xml:47(surname) usermod.8.xml:52(surname) userdel.8.xml:51(surname) useradd.8.xml:64(surname) suauth.5.xml:45(surname) su.1.xml:62(surname) sg.1.xml:46(surname) shadow.5.xml:45(surname) shadow.3.xml:45(surname) pwconv.8.xml:51(surname) pwck.8.xml:51(surname) porttime.5.xml:45(surname) passwd.5.xml:45(surname) passwd.1.xml:52(surname) newusers.8.xml:61(surname) newgrp.1.xml:46(surname) logoutd.8.xml:45(surname) login.defs.5.xml:112(surname) login.access.5.xml:46(surname) login.1.xml:78(surname) limits.5.xml:47(surname) lastlog.8.xml:47(surname) grpck.8.xml:46(surname) groups.1.xml:45(surname) groupmod.8.xml:46(surname) groupmems.8.xml:49(surname) groupdel.8.xml:46(surname) groupadd.8.xml:48(surname) gpasswd.1.xml:50(surname) faillog.8.xml:45(surname) faillog.5.xml:45(surname) expiry.1.xml:49(surname) chsh.1.xml:48(surname) chpasswd.8.xml:49(surname) chgpasswd.8.xml:45(surname) chfn.1.xml:48(surname) chage.1.xml:46(surname)
+msgid "Kłoczko"
+msgstr ""
+
+#: vipw.8.xml:48(email) usermod.8.xml:53(email) userdel.8.xml:52(email) useradd.8.xml:65(email) suauth.5.xml:46(email) su.1.xml:63(email) sg.1.xml:47(email) shadow.5.xml:46(email) shadow.3.xml:46(email) pwconv.8.xml:52(email) pwck.8.xml:52(email) porttime.5.xml:46(email) passwd.5.xml:46(email) passwd.1.xml:53(email) newusers.8.xml:62(email) newgrp.1.xml:47(email) logoutd.8.xml:46(email) login.defs.5.xml:113(email) login.access.5.xml:47(email) login.1.xml:79(email) limits.5.xml:48(email) lastlog.8.xml:48(email) grpck.8.xml:47(email) groups.1.xml:46(email) groupmod.8.xml:47(email) groupmems.8.xml:50(email) groupdel.8.xml:47(email) groupadd.8.xml:49(email) gpasswd.1.xml:51(email) faillog.8.xml:46(email) faillog.5.xml:46(email) expiry.1.xml:50(email) chsh.1.xml:49(email) chpasswd.8.xml:50(email) chgpasswd.8.xml:46(email) chfn.1.xml:49(email) chage.1.xml:47(email)
+msgid "kloczek@pld.org.pl"
+msgstr ""
+
+#: vipw.8.xml:49(contrib) usermod.8.xml:54(contrib) userdel.8.xml:53(contrib) useradd.8.xml:66(contrib) suauth.5.xml:47(contrib) su.1.xml:64(contrib) sg.1.xml:48(contrib) shadow.5.xml:47(contrib) shadow.3.xml:47(contrib) pwconv.8.xml:53(contrib) pwck.8.xml:53(contrib) porttime.5.xml:47(contrib) passwd.5.xml:47(contrib) passwd.1.xml:54(contrib) newusers.8.xml:63(contrib) newgrp.1.xml:48(contrib) logoutd.8.xml:47(contrib) login.defs.5.xml:114(contrib) login.access.5.xml:48(contrib) login.1.xml:80(contrib) limits.5.xml:49(contrib) lastlog.8.xml:49(contrib) grpck.8.xml:48(contrib) groups.1.xml:47(contrib) groupmod.8.xml:48(contrib) groupmems.8.xml:51(contrib) groupdel.8.xml:48(contrib) groupadd.8.xml:50(contrib) gpasswd.1.xml:52(contrib) faillog.8.xml:47(contrib) faillog.5.xml:47(contrib) expiry.1.xml:51(contrib) chsh.1.xml:50(contrib) chpasswd.8.xml:51(contrib) chfn.1.xml:50(contrib) chage.1.xml:48(contrib)
+msgid "shadow-utils maintainer, 2000 - 2007"
+msgstr ""
+
+#: vipw.8.xml:52(firstname) usermod.8.xml:57(firstname) userdel.8.xml:56(firstname) useradd.8.xml:69(firstname) suauth.5.xml:50(firstname) su.1.xml:67(firstname) sg.1.xml:51(firstname) shadow.5.xml:50(firstname) shadow.3.xml:50(firstname) pwconv.8.xml:56(firstname) pwck.8.xml:56(firstname) porttime.5.xml:50(firstname) passwd.5.xml:50(firstname) passwd.1.xml:57(firstname) nologin.8.xml:39(firstname) newusers.8.xml:66(firstname) newgrp.1.xml:51(firstname) logoutd.8.xml:50(firstname) login.defs.5.xml:117(firstname) login.access.5.xml:51(firstname) login.1.xml:83(firstname) limits.5.xml:52(firstname) lastlog.8.xml:52(firstname) gshadow.5.xml:38(firstname) grpck.8.xml:51(firstname) groups.1.xml:50(firstname) groupmod.8.xml:51(firstname) groupmems.8.xml:54(firstname) groupdel.8.xml:51(firstname) groupadd.8.xml:53(firstname) gpasswd.1.xml:55(firstname) faillog.8.xml:50(firstname) faillog.5.xml:50(firstname) expiry.1.xml:54(firstname) chsh.1.xml:53(firstname) chpasswd.8.xml:54(firstname) chgpasswd.8.xml:50(firstname) chfn.1.xml:53(firstname) chage.1.xml:51(firstname)
+msgid "Nicolas"
+msgstr ""
+
+#: vipw.8.xml:53(surname) usermod.8.xml:58(surname) userdel.8.xml:57(surname) useradd.8.xml:70(surname) suauth.5.xml:51(surname) su.1.xml:68(surname) sg.1.xml:52(surname) shadow.5.xml:51(surname) shadow.3.xml:51(surname) pwconv.8.xml:57(surname) pwck.8.xml:57(surname) porttime.5.xml:51(surname) passwd.5.xml:51(surname) passwd.1.xml:58(surname) nologin.8.xml:40(surname) newusers.8.xml:67(surname) newgrp.1.xml:52(surname) logoutd.8.xml:51(surname) login.defs.5.xml:118(surname) login.access.5.xml:52(surname) login.1.xml:84(surname) limits.5.xml:53(surname) lastlog.8.xml:53(surname) gshadow.5.xml:39(surname) grpck.8.xml:52(surname) groups.1.xml:51(surname) groupmod.8.xml:52(surname) groupmems.8.xml:55(surname) groupdel.8.xml:52(surname) groupadd.8.xml:54(surname) gpasswd.1.xml:56(surname) faillog.8.xml:51(surname) faillog.5.xml:51(surname) expiry.1.xml:55(surname) chsh.1.xml:54(surname) chpasswd.8.xml:55(surname) chgpasswd.8.xml:51(surname) chfn.1.xml:54(surname) chage.1.xml:52(surname)
+msgid "François"
+msgstr ""
+
+#: vipw.8.xml:54(email) usermod.8.xml:59(email) userdel.8.xml:58(email) useradd.8.xml:71(email) suauth.5.xml:52(email) su.1.xml:69(email) sg.1.xml:53(email) shadow.5.xml:52(email) shadow.3.xml:52(email) pwconv.8.xml:58(email) pwck.8.xml:58(email) porttime.5.xml:52(email) passwd.5.xml:52(email) passwd.1.xml:59(email) nologin.8.xml:41(email) newusers.8.xml:68(email) newgrp.1.xml:53(email) logoutd.8.xml:52(email) login.defs.5.xml:119(email) login.access.5.xml:53(email) login.1.xml:85(email) limits.5.xml:54(email) lastlog.8.xml:54(email) gshadow.5.xml:40(email) grpck.8.xml:53(email) groups.1.xml:52(email) groupmod.8.xml:53(email) groupmems.8.xml:56(email) groupdel.8.xml:53(email) groupadd.8.xml:55(email) gpasswd.1.xml:57(email) faillog.8.xml:52(email) faillog.5.xml:52(email) expiry.1.xml:56(email) chsh.1.xml:55(email) chpasswd.8.xml:56(email) chgpasswd.8.xml:52(email) chfn.1.xml:55(email) chage.1.xml:53(email)
+msgid "nicolas.francois@centraliens.net"
+msgstr ""
+
+#: vipw.8.xml:55(contrib) usermod.8.xml:60(contrib) userdel.8.xml:59(contrib) useradd.8.xml:72(contrib) suauth.5.xml:53(contrib) su.1.xml:70(contrib) sg.1.xml:54(contrib) shadow.5.xml:53(contrib) shadow.3.xml:53(contrib) pwconv.8.xml:59(contrib) pwck.8.xml:59(contrib) porttime.5.xml:53(contrib) passwd.5.xml:53(contrib) passwd.1.xml:60(contrib) nologin.8.xml:42(contrib) newusers.8.xml:69(contrib) newgrp.1.xml:54(contrib) logoutd.8.xml:53(contrib) login.defs.5.xml:120(contrib) login.access.5.xml:54(contrib) login.1.xml:86(contrib) limits.5.xml:55(contrib) lastlog.8.xml:55(contrib) gshadow.5.xml:42(contrib) grpck.8.xml:54(contrib) groups.1.xml:53(contrib) groupmod.8.xml:54(contrib) groupmems.8.xml:57(contrib) groupdel.8.xml:54(contrib) groupadd.8.xml:56(contrib) gpasswd.1.xml:58(contrib) faillog.8.xml:53(contrib) faillog.5.xml:53(contrib) expiry.1.xml:57(contrib) chsh.1.xml:56(contrib) chpasswd.8.xml:57(contrib) chgpasswd.8.xml:53(contrib) chfn.1.xml:56(contrib) chage.1.xml:54(contrib)
+msgid "shadow-utils maintainer, 2007 - now"
+msgstr ""
+
+#: vipw.8.xml:59(refentrytitle) vipw.8.xml:66(refname) vipw.8.xml:75(command) login.defs.5.xml:520(term)
+msgid "vipw"
+msgstr ""
+
+#: vipw.8.xml:60(manvolnum) usermod.8.xml:65(manvolnum) userdel.8.xml:64(manvolnum) userdel.8.xml:276(replaceable) useradd.8.xml:77(manvolnum) pwconv.8.xml:64(manvolnum) pwck.8.xml:64(manvolnum) nologin.8.xml:47(manvolnum) newusers.8.xml:74(manvolnum) logoutd.8.xml:58(manvolnum) lastlog.8.xml:60(manvolnum) grpck.8.xml:59(manvolnum) groupmod.8.xml:59(manvolnum) groupmems.8.xml:62(manvolnum) groupdel.8.xml:59(manvolnum) groupdel.8.xml:198(replaceable) groupadd.8.xml:61(manvolnum) faillog.8.xml:58(manvolnum) faillog.5.xml:111(manvolnum) chpasswd.8.xml:62(manvolnum) chgpasswd.8.xml:58(manvolnum)
+msgid "8"
+msgstr ""
+
+#: vipw.8.xml:61(refmiscinfo) usermod.8.xml:66(refmiscinfo) userdel.8.xml:65(refmiscinfo) useradd.8.xml:78(refmiscinfo) pwconv.8.xml:65(refmiscinfo) pwck.8.xml:65(refmiscinfo) nologin.8.xml:48(refmiscinfo) newusers.8.xml:75(refmiscinfo) logoutd.8.xml:59(refmiscinfo) lastlog.8.xml:61(refmiscinfo) grpck.8.xml:60(refmiscinfo) groupmod.8.xml:60(refmiscinfo) groupmems.8.xml:63(refmiscinfo) groupdel.8.xml:60(refmiscinfo) groupadd.8.xml:62(refmiscinfo) faillog.8.xml:59(refmiscinfo) chpasswd.8.xml:63(refmiscinfo) chgpasswd.8.xml:59(refmiscinfo)
+msgid "System Management Commands"
+msgstr ""
+
+#: vipw.8.xml:62(refmiscinfo) usermod.8.xml:67(refmiscinfo) userdel.8.xml:66(refmiscinfo) useradd.8.xml:79(refmiscinfo) suauth.5.xml:60(refmiscinfo) su.1.xml:77(refmiscinfo) sg.1.xml:61(refmiscinfo) shadow.5.xml:60(refmiscinfo) shadow.3.xml:60(refmiscinfo) pwconv.8.xml:66(refmiscinfo) pwck.8.xml:66(refmiscinfo) porttime.5.xml:60(refmiscinfo) passwd.5.xml:60(refmiscinfo) passwd.1.xml:67(refmiscinfo) nologin.8.xml:49(refmiscinfo) newusers.8.xml:76(refmiscinfo) newgrp.1.xml:61(refmiscinfo) logoutd.8.xml:60(refmiscinfo) login.defs.5.xml:127(refmiscinfo) login.access.5.xml:61(refmiscinfo) login.1.xml:93(refmiscinfo) limits.5.xml:62(refmiscinfo) lastlog.8.xml:62(refmiscinfo) gshadow.5.xml:49(refmiscinfo) grpck.8.xml:61(refmiscinfo) groups.1.xml:60(refmiscinfo) groupmod.8.xml:61(refmiscinfo) groupmems.8.xml:64(refmiscinfo) groupdel.8.xml:61(refmiscinfo) groupadd.8.xml:63(refmiscinfo) gpasswd.1.xml:65(refmiscinfo) faillog.8.xml:60(refmiscinfo) faillog.5.xml:60(refmiscinfo) expiry.1.xml:64(refmiscinfo) chsh.1.xml:63(refmiscinfo) chpasswd.8.xml:64(refmiscinfo) chgpasswd.8.xml:60(refmiscinfo) chfn.1.xml:63(refmiscinfo) chage.1.xml:61(refmiscinfo)
+msgid "shadow-utils"
+msgstr ""
+
+#: vipw.8.xml:67(refname) vipw.8.xml:81(command)
+msgid "vigr"
+msgstr ""
+
+#: vipw.8.xml:68(refpurpose)
+msgid "edit the password, group, shadow-password or shadow-group file"
+msgstr ""
+
+#: vipw.8.xml:77(replaceable) vipw.8.xml:83(replaceable) usermod.8.xml:79(replaceable) userdel.8.xml:76(arg) useradd.8.xml:90(replaceable) useradd.8.xml:102(replaceable) su.1.xml:88(replaceable) pwconv.8.xml:81(replaceable) pwconv.8.xml:87(replaceable) pwconv.8.xml:93(replaceable) pwconv.8.xml:99(replaceable) pwck.8.xml:77(arg) passwd.1.xml:79(replaceable) newusers.8.xml:88(replaceable) lastlog.8.xml:74(replaceable) grpck.8.xml:72(arg) groupmod.8.xml:73(replaceable) groupdel.8.xml:73(replaceable) groupadd.8.xml:75(replaceable) faillog.8.xml:72(replaceable) chsh.1.xml:75(replaceable) chpasswd.8.xml:76(replaceable) chgpasswd.8.xml:72(replaceable) chfn.1.xml:75(replaceable) chage.1.xml:72(replaceable)
+msgid "options"
+msgstr ""
+
+#: vipw.8.xml:89(title) usermod.8.xml:86(title) userdel.8.xml:84(title) useradd.8.xml:108(title) suauth.5.xml:75(title) su.1.xml:103(title) sg.1.xml:81(title) shadow.5.xml:69(title) shadow.3.xml:118(title) shadow.3.xml:174(title) pwconv.8.xml:105(title) pwck.8.xml:92(title) porttime.5.xml:69(title) passwd.5.xml:69(title) passwd.1.xml:88(title) nologin.8.xml:64(title) newusers.8.xml:97(title) newgrp.1.xml:77(title) logoutd.8.xml:75(title) login.defs.5.xml:136(title) login.access.5.xml:70(title) login.1.xml:125(title) limits.5.xml:72(title) lastlog.8.xml:80(title) gshadow.5.xml:58(title) grpck.8.xml:83(title) groups.1.xml:78(title) groupmod.8.xml:80(title) groupmems.8.xml:85(title) groupdel.8.xml:80(title) groupadd.8.xml:84(title) gpasswd.1.xml:94(title) faillog.8.xml:78(title) faillog.5.xml:69(title) expiry.1.xml:82(title) chsh.1.xml:84(title) chpasswd.8.xml:82(title) chgpasswd.8.xml:78(title) chfn.1.xml:84(title) chage.1.xml:81(title)
+msgid "DESCRIPTION"
+msgstr ""
+
+#: vipw.8.xml:90(para)
+msgid "The <command>vipw</command> and <command>vigr</command> commands edits the files <filename>/etc/passwd</filename> and <filename>/etc/group</filename>, respectively. With the <option>-s</option> flag, they will edit the shadow versions of those files, <filename>/etc/shadow</filename> and <filename>/etc/gshadow</filename>, respectively. The programs will set the appropriate locks to prevent file corruption. When looking for an editor, the programs will first try the environment variable <envar>$VISUAL</envar>, then the environment variable <envar>$EDITOR</envar>, and finally the default editor, <citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+msgstr ""
+
+#: vipw.8.xml:107(title) usermod.8.xml:94(title) userdel.8.xml:93(title) useradd.8.xml:126(title) su.1.xml:144(title) pwconv.8.xml:187(title) pwck.8.xml:176(title) passwd.1.xml:174(title) newusers.8.xml:266(title) login.1.xml:210(title) lastlog.8.xml:92(title) grpck.8.xml:147(title) groupmod.8.xml:89(title) groupmems.8.xml:100(title) groupdel.8.xml:88(title) groupadd.8.xml:93(title) gpasswd.1.xml:134(title) faillog.8.xml:89(title) expiry.1.xml:91(title) chsh.1.xml:95(title) chpasswd.8.xml:130(title) chgpasswd.8.xml:105(title) chfn.1.xml:111(title) chage.1.xml:91(title)
+msgid "OPTIONS"
+msgstr ""
+
+#: vipw.8.xml:108(para)
+msgid "The options which apply to the <command>vipw</command> and <command>vigr</command> commands are:"
+msgstr ""
+
+#: vipw.8.xml:114(term)
+msgid "<option>-g</option>, <option>--group</option>"
+msgstr ""
+
+#: vipw.8.xml:116(para)
+msgid "Edit group database."
+msgstr ""
+
+#: vipw.8.xml:120(term) userdel.8.xml:123(term) useradd.8.xml:278(term) pwconv.8.xml:195(term) pwck.8.xml:196(term) passwd.1.xml:214(term) newusers.8.xml:296(term) lastlog.8.xml:119(term) grpck.8.xml:157(term) groupmod.8.xml:129(term) groupmems.8.xml:142(term) groupdel.8.xml:95(term) groupadd.8.xml:131(term) gpasswd.1.xml:173(term) faillog.8.xml:122(term) expiry.1.xml:112(term) chsh.1.xml:101(term) chpasswd.8.xml:171(term) chgpasswd.8.xml:131(term) chage.1.xml:129(term)
+msgid "<option>-h</option>, <option>--help</option>"
+msgstr ""
+
+#: vipw.8.xml:122(para) userdel.8.xml:125(para) useradd.8.xml:280(para) pwconv.8.xml:197(para) pwck.8.xml:198(para) passwd.1.xml:216(para) newusers.8.xml:298(para) lastlog.8.xml:123(para) grpck.8.xml:159(para) groupmod.8.xml:131(para) groupmems.8.xml:144(para) groupdel.8.xml:97(para) groupadd.8.xml:133(para) gpasswd.1.xml:175(para) faillog.8.xml:124(para) expiry.1.xml:114(para) chsh.1.xml:103(para) chpasswd.8.xml:173(para) chgpasswd.8.xml:133(para) chfn.1.xml:169(para) chage.1.xml:131(para)
+msgid "Display help message and exit."
+msgstr ""
+
+#: vipw.8.xml:126(term)
+msgid "<option>-p</option>, <option>--passwd</option>"
+msgstr ""
+
+#: vipw.8.xml:128(para)
+msgid "Edit passwd database."
+msgstr ""
+
+#: vipw.8.xml:132(term) pwck.8.xml:202(term) passwd.1.xml:281(term)
+msgid "<option>-q</option>, <option>--quiet</option>"
+msgstr ""
+
+#: vipw.8.xml:134(para) passwd.1.xml:285(para)
+msgid "Quiet mode."
+msgstr ""
+
+#: vipw.8.xml:138(term) usermod.8.xml:322(term) userdel.8.xml:146(term) useradd.8.xml:457(term) pwconv.8.xml:201(term) pwck.8.xml:219(term) passwd.1.xml:301(term) newusers.8.xml:321(term) lastlog.8.xml:127(term) grpck.8.xml:173(term) groupmod.8.xml:178(term) groupmems.8.xml:165(term) groupdel.8.xml:101(term) groupadd.8.xml:204(term) faillog.8.xml:180(term) chsh.1.xml:107(term) chpasswd.8.xml:188(term) chgpasswd.8.xml:146(term) chfn.1.xml:153(term) chage.1.xml:203(term)
+msgid "<option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</replaceable>"
+msgstr ""
+
+#: vipw.8.xml:142(para) usermod.8.xml:326(para) userdel.8.xml:150(para) useradd.8.xml:461(para) pwconv.8.xml:205(para) pwck.8.xml:223(para) passwd.1.xml:305(para) newusers.8.xml:325(para) lastlog.8.xml:131(para) grpck.8.xml:177(para) groupmod.8.xml:182(para) groupmems.8.xml:169(para) groupdel.8.xml:105(para) groupadd.8.xml:208(para) gpasswd.1.xml:185(para) faillog.8.xml:184(para) chsh.1.xml:111(para) chpasswd.8.xml:192(para) chgpasswd.8.xml:150(para) chfn.1.xml:157(para) chage.1.xml:207(para)
+msgid "Apply changes in the <replaceable>CHROOT_DIR</replaceable> directory and use the configuration files from the <replaceable>CHROOT_DIR</replaceable> directory."
+msgstr ""
+
+#: vipw.8.xml:150(term)
+msgid "<option>-s</option>, <option>--shadow</option>"
+msgstr ""
+
+#: vipw.8.xml:152(para)
+msgid "Edit shadow or gshadow database."
+msgstr ""
+
+#: vipw.8.xml:156(term)
+msgid "<option>-u</option>, <option>--user</option>"
+msgstr ""
+
+#: vipw.8.xml:158(para)
+msgid "Indicates which user's tcb shadow file to edit."
+msgstr ""
+
+#: vipw.8.xml:165(title) usermod.8.xml:524(title) userdel.8.xml:188(title) useradd.8.xml:676(title) su.1.xml:338(title) sg.1.xml:98(title) pwconv.8.xml:227(title) pwck.8.xml:262(title) passwd.1.xml:395(title) newusers.8.xml:375(title) newgrp.1.xml:109(title) login.1.xml:294(title) lastlog.8.xml:205(title) grpck.8.xml:209(title) groupmod.8.xml:210(title) groupmems.8.xml:199(title) groupdel.8.xml:145(title) groupadd.8.xml:236(title) gpasswd.1.xml:264(title) chsh.1.xml:154(title) chpasswd.8.xml:239(title) chgpasswd.8.xml:198(title) chfn.1.xml:193(title) chage.1.xml:250(title)
+msgid "CONFIGURATION"
+msgstr ""
+
+#: vipw.8.xml:166(para) usermod.8.xml:525(para) userdel.8.xml:189(para) useradd.8.xml:677(para) su.1.xml:339(para) sg.1.xml:99(para) pwck.8.xml:263(para) passwd.1.xml:396(para) newusers.8.xml:376(para) newgrp.1.xml:110(para) login.1.xml:295(para) lastlog.8.xml:206(para) grpck.8.xml:210(para) groupmod.8.xml:211(para) groupmems.8.xml:200(para) groupdel.8.xml:146(para) groupadd.8.xml:237(para) gpasswd.1.xml:265(para) chsh.1.xml:155(para) chpasswd.8.xml:240(para) chgpasswd.8.xml:199(para) chfn.1.xml:194(para) chage.1.xml:251(para)
+msgid "The following configuration variables in <filename>/etc/login.defs</filename> change the behavior of this tool:"
+msgstr ""
+
+#: vipw.8.xml:30(term) usermod.8.xml:30(term) userdel.8.xml:30(term) useradd.8.xml:30(term) pwconv.8.xml:30(term) pwck.8.xml:30(term) login.defs.5.xml:30(term) chage.1.xml:30(term)
+msgid "<option>USE_TCB</option> (boolean)"
+msgstr ""
+
+#: vipw.8.xml:32(para) usermod.8.xml:32(para) userdel.8.xml:32(para) useradd.8.xml:32(para) pwconv.8.xml:32(para) pwck.8.xml:32(para) login.defs.5.xml:32(para) chage.1.xml:32(para)
+msgid "If <replaceable>yes</replaceable>, the <citerefentry><refentrytitle>tcb</refentrytitle><manvolnum>5</manvolnum></citerefentry> password shadowing scheme will be used."
+msgstr ""
+
+#: vipw.8.xml:177(title)
+msgid "ENVIRONMENT"
+msgstr ""
+
+#: vipw.8.xml:180(option)
+msgid "VISUAL"
+msgstr ""
+
+#: vipw.8.xml:182(para)
+msgid "Editor to be used."
+msgstr ""
+
+#: vipw.8.xml:186(option)
+msgid "EDITOR"
+msgstr ""
+
+#: vipw.8.xml:188(para)
+msgid "Editor to be used if <option>VISUAL</option> is not set."
+msgstr ""
+
+#: vipw.8.xml:195(title) usermod.8.xml:542(title) userdel.8.xml:205(title) useradd.8.xml:706(title) suauth.5.xml:193(title) su.1.xml:366(title) sg.1.xml:110(title) shadow.5.xml:255(title) shadow.3.xml:226(title) pwconv.8.xml:250(title) pwck.8.xml:279(title) porttime.5.xml:130(title) passwd.5.xml:160(title) passwd.1.xml:413(title) newusers.8.xml:411(title) newgrp.1.xml:121(title) logoutd.8.xml:89(title) login.access.5.xml:121(title) login.1.xml:338(title) limits.5.xml:196(title) lastlog.8.xml:217(title) gshadow.5.xml:156(title) grpck.8.xml:221(title) groups.1.xml:100(title) groupmod.8.xml:222(title) groupmems.8.xml:211(title) groupdel.8.xml:157(title) groupadd.8.xml:250(title) gpasswd.1.xml:279(title) faillog.8.xml:243(title) faillog.5.xml:96(title) expiry.1.xml:121(title) chsh.1.xml:167(title) chpasswd.8.xml:255(title) chgpasswd.8.xml:213(title) chfn.1.xml:207(title) chage.1.xml:262(title)
+msgid "FILES"
+msgstr ""
+
+#: vipw.8.xml:198(filename) usermod.8.xml:545(filename) userdel.8.xml:208(filename) useradd.8.xml:721(filename) sg.1.xml:125(filename) pwck.8.xml:282(filename) newusers.8.xml:426(filename) newgrp.1.xml:136(filename) gshadow.5.xml:159(filename) grpck.8.xml:224(filename) groups.1.xml:103(filename) groupmod.8.xml:225(filename) groupmems.8.xml:214(filename) groupdel.8.xml:160(filename) groupadd.8.xml:253(filename) gpasswd.1.xml:72(filename) gpasswd.1.xml:75(filename) gpasswd.1.xml:282(filename) chgpasswd.8.xml:216(filename)
+msgid "/etc/group"
+msgstr ""
+
+#: vipw.8.xml:200(para) usermod.8.xml:547(para) userdel.8.xml:210(para) useradd.8.xml:723(para) sg.1.xml:127(para) pwck.8.xml:284(para) newusers.8.xml:428(para) newgrp.1.xml:138(para) gshadow.5.xml:161(para) grpck.8.xml:226(para) groups.1.xml:105(para) groupmod.8.xml:227(para) groupmems.8.xml:216(para) groupdel.8.xml:162(para) groupadd.8.xml:255(para) gpasswd.1.xml:284(para) chgpasswd.8.xml:218(para)
+msgid "Group account information."
+msgstr ""
+
+#: vipw.8.xml:204(filename) usermod.8.xml:551(filename) useradd.8.xml:727(filename) sg.1.xml:131(filename) newusers.8.xml:432(filename) newgrp.1.xml:142(filename) gshadow.5.xml:165(filename) grpck.8.xml:230(filename) groupmod.8.xml:231(filename) groupmems.8.xml:220(filename) groupdel.8.xml:166(filename) groupadd.8.xml:259(filename) gpasswd.1.xml:76(filename) gpasswd.1.xml:288(filename) chgpasswd.8.xml:222(filename)
+msgid "/etc/gshadow"
+msgstr ""
+
+#: vipw.8.xml:206(para) usermod.8.xml:553(para) useradd.8.xml:729(para) sg.1.xml:133(para) newusers.8.xml:434(para) newgrp.1.xml:144(para) gshadow.5.xml:167(para) grpck.8.xml:232(para) groupmod.8.xml:233(para) groupdel.8.xml:168(para) groupadd.8.xml:261(para) gpasswd.1.xml:290(para) chgpasswd.8.xml:224(para)
+msgid "Secure group account information."
+msgstr ""
+
+#: vipw.8.xml:210(filename) usermod.8.xml:563(filename) userdel.8.xml:220(filename) useradd.8.xml:709(filename) su.1.xml:369(filename) sg.1.xml:113(filename) shadow.5.xml:258(filename) pwck.8.xml:288(filename) passwd.5.xml:163(filename) passwd.1.xml:416(filename) newusers.8.xml:414(filename) newgrp.1.xml:124(filename) login.1.xml:353(filename) grpck.8.xml:236(filename) groupmod.8.xml:243(filename) expiry.1.xml:124(filename) chsh.1.xml:170(filename) chpasswd.8.xml:258(filename) chfn.1.xml:216(filename) chage.1.xml:266(filename)
+msgid "/etc/passwd"
+msgstr ""
+
+#: vipw.8.xml:212(para) usermod.8.xml:565(para) userdel.8.xml:222(para) useradd.8.xml:711(para) su.1.xml:371(para) sg.1.xml:115(para) shadow.5.xml:260(para) pwck.8.xml:290(para) passwd.5.xml:165(para) passwd.1.xml:418(para) newusers.8.xml:416(para) newgrp.1.xml:126(para) login.1.xml:355(para) grpck.8.xml:238(para) groupmod.8.xml:245(para) expiry.1.xml:126(para) chsh.1.xml:172(para) chpasswd.8.xml:260(para) chfn.1.xml:218(para) chage.1.xml:269(para)
+msgid "User account information."
+msgstr ""
+
+#: vipw.8.xml:216(filename) usermod.8.xml:569(filename) userdel.8.xml:226(filename) useradd.8.xml:715(filename) su.1.xml:375(filename) sg.1.xml:119(filename) shadow.5.xml:264(filename) shadow.3.xml:229(filename) pwck.8.xml:294(filename) passwd.5.xml:169(filename) passwd.1.xml:422(filename) newusers.8.xml:420(filename) newgrp.1.xml:130(filename) login.1.xml:359(filename) expiry.1.xml:130(filename) chpasswd.8.xml:264(filename) chage.1.xml:274(filename)
+msgid "/etc/shadow"
+msgstr ""
+
+#: vipw.8.xml:218(para) usermod.8.xml:571(para) userdel.8.xml:228(para) useradd.8.xml:717(para) su.1.xml:377(para) sg.1.xml:121(para) shadow.5.xml:266(para) shadow.3.xml:231(para) pwck.8.xml:296(para) passwd.1.xml:424(para) newusers.8.xml:422(para) newgrp.1.xml:132(para) login.1.xml:361(para) expiry.1.xml:132(para) chpasswd.8.xml:266(para) chage.1.xml:277(para)
+msgid "Secure user account information."
+msgstr ""
+
+#: vipw.8.xml:225(title) usermod.8.xml:590(title) userdel.8.xml:325(title) useradd.8.xml:835(title) suauth.5.xml:222(title) su.1.xml:437(title) sg.1.xml:140(title) shadow.5.xml:283(title) shadow.3.xml:238(title) pwconv.8.xml:262(title) pwck.8.xml:354(title) porttime.5.xml:142(title) passwd.5.xml:188(title) passwd.1.xml:494(title) nologin.8.xml:81(title) newusers.8.xml:465(title) newgrp.1.xml:151(title) login.defs.5.xml:547(title) login.access.5.xml:133(title) login.1.xml:398(title) limits.5.xml:206(title) gshadow.5.xml:174(title) grpck.8.xml:290(title) groups.1.xml:112(title) groupmod.8.xml:321(title) groupmems.8.xml:229(title) groupdel.8.xml:214(title) groupadd.8.xml:341(title) gpasswd.1.xml:297(title) faillog.8.xml:255(title) faillog.5.xml:108(title) expiry.1.xml:139(title) chsh.1.xml:191(title) chpasswd.8.xml:285(title) chgpasswd.8.xml:237(title) chfn.1.xml:225(title) chage.1.xml:317(title)
+msgid "SEE ALSO"
+msgstr ""
+
+#: vipw.8.xml:226(para)
+msgid "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></citerefentry><citerefentry condition=\"tcb\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: usermod.8.xml:46(firstname) userdel.8.xml:45(firstname) useradd.8.xml:58(firstname) su.1.xml:56(firstname) sg.1.xml:40(firstname) shadow.5.xml:39(firstname) shadow.3.xml:39(firstname) pwck.8.xml:45(firstname) porttime.5.xml:39(firstname) passwd.5.xml:39(firstname) passwd.1.xml:46(firstname) newusers.8.xml:55(firstname) newgrp.1.xml:40(firstname) logoutd.8.xml:39(firstname) login.defs.5.xml:106(firstname) login.1.xml:72(firstname) lastlog.8.xml:41(firstname) grpck.8.xml:40(firstname) groups.1.xml:39(firstname) groupmod.8.xml:40(firstname) groupdel.8.xml:40(firstname) groupadd.8.xml:42(firstname) faillog.8.xml:39(firstname) faillog.5.xml:39(firstname) expiry.1.xml:43(firstname) chsh.1.xml:42(firstname) chpasswd.8.xml:43(firstname) chfn.1.xml:42(firstname) chage.1.xml:40(firstname)
+msgid "Julianne Frances"
+msgstr ""
+
+#: usermod.8.xml:47(surname) userdel.8.xml:46(surname) useradd.8.xml:59(surname) su.1.xml:57(surname) sg.1.xml:41(surname) shadow.5.xml:40(surname) shadow.3.xml:40(surname) pwck.8.xml:46(surname) porttime.5.xml:40(surname) passwd.5.xml:40(surname) passwd.1.xml:47(surname) newusers.8.xml:56(surname) newgrp.1.xml:41(surname) logoutd.8.xml:40(surname) login.defs.5.xml:107(surname) login.1.xml:73(surname) lastlog.8.xml:42(surname) grpck.8.xml:41(surname) groups.1.xml:40(surname) groupmod.8.xml:41(surname) groupdel.8.xml:41(surname) groupadd.8.xml:43(surname) faillog.8.xml:40(surname) faillog.5.xml:40(surname) expiry.1.xml:44(surname) chsh.1.xml:43(surname) chpasswd.8.xml:44(surname) chfn.1.xml:43(surname) chage.1.xml:41(surname)
+msgid "Haugh"
+msgstr ""
+
+#: usermod.8.xml:48(contrib) userdel.8.xml:47(contrib) useradd.8.xml:60(contrib) sg.1.xml:42(contrib) newusers.8.xml:57(contrib) newgrp.1.xml:42(contrib) logoutd.8.xml:41(contrib) login.defs.5.xml:108(contrib) groups.1.xml:41(contrib) groupmod.8.xml:42(contrib) groupdel.8.xml:42(contrib) groupadd.8.xml:44(contrib) chpasswd.8.xml:45(contrib)
+msgid "Creation, 1991"
+msgstr ""
+
+#: usermod.8.xml:64(refentrytitle) usermod.8.xml:71(refname) usermod.8.xml:77(command) login.defs.5.xml:510(term)
+msgid "usermod"
+msgstr ""
+
+#: usermod.8.xml:72(refpurpose)
+msgid "modify a user account"
+msgstr ""
+
+#: usermod.8.xml:81(replaceable) userdel.8.xml:78(replaceable) useradd.8.xml:92(replaceable) passwd.1.xml:82(replaceable) chsh.1.xml:78(replaceable) chfn.1.xml:78(replaceable) chage.1.xml:75(replaceable)
+msgid "LOGIN"
+msgstr ""
+
+#: usermod.8.xml:87(para)
+msgid "The <command>usermod</command> command modifies the system account files to reflect the changes that are specified on the command line."
+msgstr ""
+
+#: usermod.8.xml:95(para)
+msgid "The options which apply to the <command>usermod</command> command are:"
+msgstr ""
+
+#: usermod.8.xml:101(term)
+msgid "<option>-a</option>, <option>--append</option>"
+msgstr ""
+
+#: usermod.8.xml:105(para)
+msgid "Add the user to the supplementary group(s). Use only with the <option>-G</option> option."
+msgstr ""
+
+#: usermod.8.xml:112(term)
+msgid "<option>-b</option>, <option>--badnames</option>"
+msgstr ""
+
+#: usermod.8.xml:116(para) useradd.8.xml:135(para) pwck.8.xml:190(para) newusers.8.xml:276(para)
+msgid "Allow names that do not conform to standards."
+msgstr ""
+
+#: usermod.8.xml:122(term) useradd.8.xml:162(term)
+msgid "<option>-c</option>, <option>--comment</option>&nbsp;<replaceable>COMMENT</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:126(para)
+msgid "The new value of the user's password file comment field. It is normally modified using the <citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></citerefentry> utility."
+msgstr ""
+
+#: usermod.8.xml:135(term)
+msgid "<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_DIR</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:139(para)
+msgid "The user's new login directory."
+msgstr ""
+
+#: usermod.8.xml:142(para)
+msgid "If the <option>-m</option> option is given, the contents of the current home directory will be moved to the new home directory, which is created if it does not already exist."
+msgstr ""
+
+#: usermod.8.xml:151(term) useradd.8.xml:200(term) useradd.8.xml:577(term)
+msgid "<option>-e</option>, <option>--expiredate</option>&nbsp;<replaceable>EXPIRE_DATE</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:155(para) useradd.8.xml:204(para)
+msgid "The date on which the user account will be disabled. The date is specified in the format <emphasis remap=\"I\">YYYY-MM-DD</emphasis>."
+msgstr ""
+
+#: usermod.8.xml:159(para)
+msgid "An empty <replaceable>EXPIRE_DATE</replaceable> argument will disable the expiration of the account."
+msgstr ""
+
+#: usermod.8.xml:163(para) usermod.8.xml:184(para)
+msgid "This option requires a <filename>/etc/shadow</filename> file. A <filename>/etc/shadow</filename> entry will be created if there were none."
+msgstr ""
+
+#: usermod.8.xml:171(term) useradd.8.xml:217(term) useradd.8.xml:589(term)
+msgid "<option>-f</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:175(para)
+msgid "The number of days after a password expires until the account is permanently disabled."
+msgstr ""
+
+#: usermod.8.xml:179(para)
+msgid "A value of 0 disables the account as soon as the password has expired, and a value of -1 disables the feature."
+msgstr ""
+
+#: usermod.8.xml:192(term) useradd.8.xml:236(term) useradd.8.xml:604(term)
+msgid "<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GROUP</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:196(para)
+msgid "The group name or number of the user's new initial login group. The group must exist."
+msgstr ""
+
+#: usermod.8.xml:200(para)
+msgid "Any file from the user's home directory owned by the previous primary group of the user will be owned by this new group."
+msgstr ""
+
+#: usermod.8.xml:204(para)
+msgid "The group ownership of files outside of the user's home directory must be fixed manually."
+msgstr ""
+
+#: usermod.8.xml:211(term) useradd.8.xml:263(term)
+msgid "<option>-G</option>, <option>--groups</option>&nbsp;<replaceable>GROUP1</replaceable>[<emphasis remap=\"I\">,GROUP2,...</emphasis>[<emphasis remap=\"I\">,GROUPN</emphasis>]]]"
+msgstr ""
+
+#: usermod.8.xml:215(para)
+msgid "A list of supplementary groups which the user is also a member of. Each group is separated from the next by a comma, with no intervening whitespace. The groups are subject to the same restrictions as the group given with the <option>-g</option> option."
+msgstr ""
+
+#: usermod.8.xml:222(para)
+msgid "If the user is currently a member of a group which is not listed, the user will be removed from the group. This behaviour can be changed via the <option>-a</option> option, which appends the user to the current supplementary group list."
+msgstr ""
+
+#: usermod.8.xml:231(term)
+msgid "<option>-l</option>, <option>--login</option>&nbsp;<replaceable>NEW_LOGIN</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:235(para)
+msgid "The name of the user will be changed from <replaceable>LOGIN</replaceable> to <replaceable>NEW_LOGIN</replaceable>. Nothing else is changed. In particular, the user's home directory or mail spool should probably be renamed manually to reflect the new login name."
+msgstr ""
+
+#: usermod.8.xml:245(term)
+msgid "<option>-L</option>, <option>--lock</option>"
+msgstr ""
+
+#: usermod.8.xml:249(para)
+msgid "Lock a user's password. This puts a '!' in front of the encrypted password, effectively disabling the password. You can't use this option with <option>-p</option> or <option>-U</option>."
+msgstr ""
+
+#: usermod.8.xml:255(para)
+msgid "Note: if you wish to lock the account (not only access with a password), you should also set the <replaceable>EXPIRE_DATE</replaceable> to <replaceable>1</replaceable>."
+msgstr ""
+
+#: usermod.8.xml:264(term)
+msgid "<option>-m</option>, <option>--move-home</option>"
+msgstr ""
+
+#: usermod.8.xml:268(para)
+msgid "Move the content of the user's home directory to the new location."
+msgstr ""
+
+#: usermod.8.xml:272(para)
+msgid "This option is only valid in combination with the <option>-d</option> (or <option>--home</option>) option."
+msgstr ""
+
+#: usermod.8.xml:276(para)
+msgid "<command>usermod</command> will try to adapt the ownership of the files and to copy the modes, ACL and extended attributes, but manual changes might be needed afterwards."
+msgstr ""
+
+#: usermod.8.xml:284(term) useradd.8.xml:397(term) groupmod.8.xml:146(term) groupadd.8.xml:157(term)
+msgid "<option>-o</option>, <option>--non-unique</option>"
+msgstr ""
+
+#: usermod.8.xml:288(para)
+msgid "When used with the <option>-u</option> option, this option allows to change the user ID to a non-unique value."
+msgstr ""
+
+#: usermod.8.xml:295(term) useradd.8.xml:409(term) groupmod.8.xml:157(term) groupadd.8.xml:167(term)
+msgid "<option>-p</option>, <option>--password</option>&nbsp;<replaceable>PASSWORD</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:299(para) groupmod.8.xml:161(para)
+msgid "The encrypted password, as returned by <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></citerefentry>."
+msgstr ""
+
+#: usermod.8.xml:304(para) useradd.8.xml:418(para) groupmod.8.xml:166(para) groupadd.8.xml:176(para)
+msgid "<emphasis role=\"bold\">Note:</emphasis> This option is not recommended because the password (or encrypted password) will be visible by users listing the processes."
+msgstr ""
+
+#: usermod.8.xml:309(para)
+msgid "The password will be written in the local <filename>/etc/passwd</filename> or <filename>/etc/shadow</filename> file. This might differ from the password database configured in your PAM configuration."
+msgstr ""
+
+#: usermod.8.xml:315(para) useradd.8.xml:423(para) groupmod.8.xml:171(para) groupadd.8.xml:181(para)
+msgid "You should make sure the password respects the system's password policy."
+msgstr ""
+
+#: usermod.8.xml:334(term) userdel.8.xml:158(term) useradd.8.xml:469(term) groupmod.8.xml:190(term) groupdel.8.xml:113(term) groupadd.8.xml:216(term)
+msgid "<option>-P</option>, <option>--prefix</option>&nbsp;<replaceable>PREFIX_DIR</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:338(para) userdel.8.xml:162(para) useradd.8.xml:473(para) groupmod.8.xml:194(para) groupdel.8.xml:117(para) groupadd.8.xml:220(para)
+msgid "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."
+msgstr ""
+
+#: usermod.8.xml:351(term) useradd.8.xml:486(term) useradd.8.xml:624(term) su.1.xml:186(term) chsh.1.xml:119(term)
+msgid "<option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SHELL</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:355(para) chsh.1.xml:123(para)
+msgid "The name of the user's new login shell. Setting this field to blank causes the system to select the default login shell."
+msgstr ""
+
+#: usermod.8.xml:362(term) useradd.8.xml:500(term)
+msgid "<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:366(para)
+msgid "The new numerical value of the user's ID."
+msgstr ""
+
+#: usermod.8.xml:369(para)
+msgid "This value must be unique, unless the <option>-o</option> option is used. The value must be non-negative."
+msgstr ""
+
+#: usermod.8.xml:374(para)
+msgid "The user's mailbox, and any files which the user owns and which are located in the user's home directory will have the file user ID changed automatically."
+msgstr ""
+
+#: usermod.8.xml:379(para)
+msgid "The ownership of files outside of the user's home directory must be fixed manually."
+msgstr ""
+
+#: usermod.8.xml:383(para)
+msgid "No checks will be performed with regard to the <option>UID_MIN</option>, <option>UID_MAX</option>, <option>SYS_UID_MIN</option>, or <option>SYS_UID_MAX</option> from <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: usermod.8.xml:392(term)
+msgid "<option>-U</option>, <option>--unlock</option>"
+msgstr ""
+
+#: usermod.8.xml:396(para)
+msgid "Unlock a user's password. This removes the '!' in front of the encrypted password. You can't use this option with <option>-p</option> or <option>-L</option>."
+msgstr ""
+
+#: usermod.8.xml:401(para)
+msgid "Note: if you wish to unlock the account (not only access with a password), you should also set the <replaceable>EXPIRE_DATE</replaceable> (for example to <replaceable>99999</replaceable>, or to the <option>EXPIRE</option> value from <filename>/etc/default/useradd</filename>)."
+msgstr ""
+
+#: usermod.8.xml:412(term)
+msgid "<option>-v</option>, <option>--add-subuids</option>&nbsp;<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:416(para)
+msgid "Add a range of subordinate uids to the user's account."
+msgstr ""
+
+#: usermod.8.xml:419(para) usermod.8.xml:457(para)
+msgid "This option may be specified multiple times to add multiple ranges to a users account."
+msgstr ""
+
+#: usermod.8.xml:422(para) usermod.8.xml:442(para)
+msgid "No checks will be performed with regard to <option>SUB_UID_MIN</option>, <option>SUB_UID_MAX</option>, or <option>SUB_UID_COUNT</option> from /etc/login.defs."
+msgstr ""
+
+#: usermod.8.xml:430(term)
+msgid "<option>-V</option>, <option>--del-subuids</option>&nbsp;<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:434(para)
+msgid "Remove a range of subordinate uids from the user's account."
+msgstr ""
+
+#: usermod.8.xml:437(para)
+msgid "This option may be specified multiple times to remove multiple ranges to a users account. When both <option>--del-subuids</option> and <option>--add-subuids</option> are specified, the removal of all subordinate uid ranges happens before any subordinate uid range is added."
+msgstr ""
+
+#: usermod.8.xml:450(term)
+msgid "<option>-w</option>, <option>--add-subgids</option>&nbsp;<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:454(para)
+msgid "Add a range of subordinate gids to the user's account."
+msgstr ""
+
+#: usermod.8.xml:460(para) usermod.8.xml:480(para)
+msgid "No checks will be performed with regard to <option>SUB_GID_MIN</option>, <option>SUB_GID_MAX</option>, or <option>SUB_GID_COUNT</option> from /etc/login.defs."
+msgstr ""
+
+#: usermod.8.xml:468(term)
+msgid "<option>-W</option>, <option>--del-subgids</option>&nbsp;<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:472(para)
+msgid "Remove a range of subordinate gids from the user's account."
+msgstr ""
+
+#: usermod.8.xml:475(para)
+msgid "This option may be specified multiple times to remove multiple ranges to a users account. When both <option>--del-subgids</option> and <option>--add-subgids</option> are specified, the removal of all subordinate gid ranges happens before any subordinate gid range is added."
+msgstr ""
+
+#: usermod.8.xml:488(term) useradd.8.xml:535(term)
+msgid "<option>-Z</option>, <option>--selinux-user</option>&nbsp;<replaceable>SEUSER</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:492(para)
+msgid "The new SELinux user for the user's login."
+msgstr ""
+
+#: usermod.8.xml:495(para)
+msgid "A blank <replaceable>SEUSER</replaceable> will remove the SELinux user mapping for user <replaceable>LOGIN</replaceable> (if any)."
+msgstr ""
+
+#: usermod.8.xml:506(title) userdel.8.xml:298(title) useradd.8.xml:652(title) su.1.xml:330(title) shadow.3.xml:218(title) passwd.1.xml:377(title) newusers.8.xml:363(title) login.1.xml:260(title) lastlog.8.xml:229(title) groupdel.8.xml:133(title) groupadd.8.xml:274(title) gpasswd.1.xml:252(title) faillog.8.xml:232(title) chpasswd.8.xml:231(title) chgpasswd.8.xml:186(title)
+msgid "CAVEATS"
+msgstr ""
+
+#: usermod.8.xml:507(para)
+msgid "You must make certain that the named user is not executing any processes when this command is being executed if the user's numerical user ID, the user's name, or the user's home directory is being changed. <command>usermod</command> checks this on Linux. On other platforms it only uses utmp to check if the user is logged in."
+msgstr ""
+
+#: usermod.8.xml:514(para)
+msgid "You must change the owner of any <command>crontab</command> files or <command>at</command> jobs manually."
+msgstr ""
+
+#: usermod.8.xml:518(para)
+msgid "You must make any changes involving NIS on the NIS server."
+msgstr ""
+
+#: usermod.8.xml:33(term) useradd.8.xml:33(term) login.defs.5.xml:33(term) lastlog.8.xml:33(term)
+msgid "<option>LASTLOG_UID_MAX</option> (number)"
+msgstr ""
+
+#: usermod.8.xml:35(para) useradd.8.xml:35(para) login.defs.5.xml:35(para) lastlog.8.xml:35(para)
+msgid "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."
+msgstr ""
+
+#: usermod.8.xml:41(para) useradd.8.xml:41(para) login.defs.5.xml:41(para) lastlog.8.xml:41(para)
+msgid "No <option>LASTLOG_UID_MAX</option> option present in the configuration means that there is no user ID limit for writing lastlog entries."
+msgstr ""
+
+#: usermod.8.xml:32(term) userdel.8.xml:32(term) useradd.8.xml:32(term) su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>MAIL_DIR</option> (string)"
+msgstr ""
+
+#: usermod.8.xml:34(para) userdel.8.xml:34(para) useradd.8.xml:34(para) su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "The mail spool directory. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted. If not specified, a compile-time default is used."
+msgstr ""
+
+#: usermod.8.xml:41(term) userdel.8.xml:41(term) useradd.8.xml:41(term) su.1.xml:41(term) login.defs.5.xml:41(term) login.1.xml:41(term)
+msgid "<option>MAIL_FILE</option> (string)"
+msgstr ""
+
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para) su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid "Defines the location of the users mail spool files relatively to their home directory."
+msgstr ""
+
+#. FIXME: MAIL_FILE not used in useradd
+#: usermod.8.xml:50(para) userdel.8.xml:50(para) useradd.8.xml:50(para) su.1.xml:50(para) login.defs.5.xml:50(para) login.1.xml:50(para)
+msgid "The <option>MAIL_DIR</option> and <option>MAIL_FILE</option> variables are used by <command>useradd</command>, <command>usermod</command>, and <command>userdel</command> to create, move, or delete the user's mail spool."
+msgstr ""
+
+#: usermod.8.xml:56(para) userdel.8.xml:56(para) useradd.8.xml:56(para) su.1.xml:56(para) login.defs.5.xml:56(para) login.1.xml:56(para)
+msgid "If <option>MAIL_CHECK_ENAB</option> is set to <replaceable>yes</replaceable>, they are also used to define the <envar>MAIL</envar> environment variable."
+msgstr ""
+
+#: usermod.8.xml:30(term) userdel.8.xml:30(term) useradd.8.xml:30(term) pwconv.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term) grpck.8.xml:30(term) groupmod.8.xml:30(term) groupmems.8.xml:30(term) groupdel.8.xml:30(term) groupadd.8.xml:30(term) gpasswd.1.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>MAX_MEMBERS_PER_GROUP</option> (number)"
+msgstr ""
+
+#: usermod.8.xml:32(para) userdel.8.xml:32(para) useradd.8.xml:32(para) pwconv.8.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para) grpck.8.xml:32(para) groupmod.8.xml:32(para) groupmems.8.xml:32(para) groupdel.8.xml:32(para) groupadd.8.xml:32(para) gpasswd.1.xml:32(para) chgpasswd.8.xml:32(para)
+msgid "Maximum members per group entry. When the maximum is reached, a new group entry (line) is started in <filename>/etc/group</filename> (with the same name, same password, and same GID)."
+msgstr ""
+
+#: usermod.8.xml:37(para) userdel.8.xml:37(para) useradd.8.xml:37(para) pwconv.8.xml:37(para) newusers.8.xml:37(para) login.defs.5.xml:37(para) grpck.8.xml:37(para) groupmod.8.xml:37(para) groupmems.8.xml:37(para) groupdel.8.xml:37(para) groupadd.8.xml:37(para) gpasswd.1.xml:37(para) chgpasswd.8.xml:37(para)
+msgid "The default value is 0, meaning that there are no limits in the number of members in a group."
+msgstr ""
+
+#. Note: on HP, split groups have the same ID, but different
+#. names.
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para) pwconv.8.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para) grpck.8.xml:43(para) groupmod.8.xml:43(para) groupmems.8.xml:43(para) groupdel.8.xml:43(para) groupadd.8.xml:43(para) gpasswd.1.xml:43(para) chgpasswd.8.xml:43(para)
+msgid "This feature (split group) permits to limit the length of lines in the group file. This is useful to make sure that lines for NIS groups are not larger than 1024 characters."
+msgstr ""
+
+#: usermod.8.xml:48(para) userdel.8.xml:48(para) useradd.8.xml:48(para) pwconv.8.xml:48(para) newusers.8.xml:48(para) login.defs.5.xml:48(para) grpck.8.xml:48(para) groupmod.8.xml:48(para) groupmems.8.xml:48(para) groupdel.8.xml:48(para) groupadd.8.xml:48(para) gpasswd.1.xml:48(para) chgpasswd.8.xml:48(para)
+msgid "If you need to enforce such limit, you can use 25."
+msgstr ""
+
+#: usermod.8.xml:51(para) userdel.8.xml:51(para) useradd.8.xml:51(para) pwconv.8.xml:51(para) newusers.8.xml:51(para) login.defs.5.xml:51(para) grpck.8.xml:51(para) groupmod.8.xml:51(para) groupmems.8.xml:51(para) groupdel.8.xml:51(para) groupadd.8.xml:51(para) gpasswd.1.xml:51(para) chgpasswd.8.xml:51(para)
+msgid "Note: split groups may not be supported by all tools (even in the Shadow toolsuite). You should not use this variable unless you really need it."
+msgstr ""
+
+#: usermod.8.xml:30(term) useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>SUB_GID_MIN</option> (number)"
+msgstr ""
+
+#: usermod.8.xml:31(term) useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+msgid "<option>SUB_GID_MAX</option> (number)"
+msgstr ""
+
+#: usermod.8.xml:32(term) useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SUB_GID_COUNT</option> (number)"
+msgstr ""
+
+#: usermod.8.xml:34(para) useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid "If <filename>/etc/subuid</filename> exists, the commands <command>useradd</command> and <command>newusers</command> (unless the user already have subordinate group IDs) allocate <option>SUB_GID_COUNT</option> unused group IDs from the range <option>SUB_GID_MIN</option> to <option>SUB_GID_MAX</option> for each new user."
+msgstr ""
+
+#: usermod.8.xml:42(para) useradd.8.xml:42(para) newusers.8.xml:42(para) login.defs.5.xml:42(para)
+msgid "The default values for <option>SUB_GID_MIN</option>, <option>SUB_GID_MAX</option>, <option>SUB_GID_COUNT</option> are respectively 100000, 600100000 and 65536."
+msgstr ""
+
+#: usermod.8.xml:30(term) useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>SUB_UID_MIN</option> (number)"
+msgstr ""
+
+#: usermod.8.xml:31(term) useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+msgid "<option>SUB_UID_MAX</option> (number)"
+msgstr ""
+
+#: usermod.8.xml:32(term) useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SUB_UID_COUNT</option> (number)"
+msgstr ""
+
+#: usermod.8.xml:34(para) useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid "If <filename>/etc/subuid</filename> exists, the commands <command>useradd</command> and <command>newusers</command> (unless the user already have subordinate user IDs) allocate <option>SUB_UID_COUNT</option> unused user IDs from the range <option>SUB_UID_MIN</option> to <option>SUB_UID_MAX</option> for each new user."
+msgstr ""
+
+#: usermod.8.xml:42(para) useradd.8.xml:42(para) newusers.8.xml:42(para) login.defs.5.xml:42(para)
+msgid "The default values for <option>SUB_UID_MIN</option>, <option>SUB_UID_MAX</option>, <option>SUB_UID_COUNT</option> are respectively 100000, 600100000 and 65536."
+msgstr ""
+
+#: usermod.8.xml:30(term) userdel.8.xml:30(term) useradd.8.xml:30(term) pwck.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>TCB_SYMLINKS</option> (boolean)"
+msgstr ""
+
+#: usermod.8.xml:37(programlisting) userdel.8.xml:37(programlisting) useradd.8.xml:37(programlisting) pwck.8.xml:37(programlisting) login.defs.5.xml:37(programlisting)
+#, no-wrap
+msgid "\nif ( UID is less than 1000) {\n use /etc/tcb/user\n} else if ( UID is less than 1000000) {\n kilos = UID / 1000\n use /etc/tcb/:kilos/user\n make symlink /etc/tcb/user to the above directory\n} else {\n megas = UID / 1000000\n kilos = ( UID / megas * 1000000 ) / 1000\n use /etc/tcb/:megas/:kilos/user\n make symlink /etc/tcb/user to the above directory\n}\n "
+msgstr ""
+
+#: usermod.8.xml:32(para) userdel.8.xml:32(para) useradd.8.xml:32(para) pwck.8.xml:32(para) login.defs.5.xml:32(para)
+msgid "If <replaceable>yes</replaceable>, the location of the user tcb directory to be created will not be automatically set to /etc/tcb/user, but will be computed depending on the UID of the user, according to the following algorithm: <placeholder-1/>"
+msgstr ""
+
+#: usermod.8.xml:557(filename) userdel.8.xml:214(filename) useradd.8.xml:757(filename) su.1.xml:381(filename) pwconv.8.xml:253(filename) passwd.1.xml:428(filename) newusers.8.xml:438(filename) login.access.5.xml:124(filename) login.1.xml:389(filename) groupmod.8.xml:237(filename) groupadd.8.xml:265(filename) chsh.1.xml:182(filename) chpasswd.8.xml:270(filename) chgpasswd.8.xml:228(filename) chfn.1.xml:210(filename)
+msgid "/etc/login.defs"
+msgstr ""
+
+#: usermod.8.xml:559(para) userdel.8.xml:216(para) useradd.8.xml:759(para) su.1.xml:383(para) pwconv.8.xml:255(para) passwd.1.xml:430(para) newusers.8.xml:440(para) login.access.5.xml:126(para) login.1.xml:391(para) groupmod.8.xml:239(para) groupadd.8.xml:267(para) chsh.1.xml:184(para) chpasswd.8.xml:272(para) chgpasswd.8.xml:230(para) chfn.1.xml:212(para)
+msgid "Shadow password suite configuration."
+msgstr ""
+
+#: usermod.8.xml:575(filename) userdel.8.xml:232(filename) useradd.8.xml:745(filename) newusers.8.xml:450(filename)
+msgid "/etc/subgid"
+msgstr ""
+
+#: usermod.8.xml:577(para) userdel.8.xml:234(para) useradd.8.xml:747(para) newusers.8.xml:452(para)
+msgid "Per user subordinate group IDs."
+msgstr ""
+
+#: usermod.8.xml:581(filename) userdel.8.xml:238(filename) useradd.8.xml:751(filename) newusers.8.xml:456(filename)
+msgid "/etc/subuid"
+msgstr ""
+
+#: usermod.8.xml:583(para) userdel.8.xml:240(para) useradd.8.xml:753(para) newusers.8.xml:458(para)
+msgid "Per user subordinate user IDs."
+msgstr ""
+
+#: usermod.8.xml:591(para)
+msgid "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <phrase condition=\"subids\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</refentrytitle><manvolnum>5</manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: userdel.8.xml:63(refentrytitle) userdel.8.xml:70(refname) userdel.8.xml:75(command) login.defs.5.xml:500(term)
+msgid "userdel"
+msgstr ""
+
+#: userdel.8.xml:71(refpurpose)
+msgid "delete a user account and related files"
+msgstr ""
+
+#: userdel.8.xml:85(para)
+msgid "The <command>userdel</command> command modifies the system account files, deleting all entries that refer to the user name <emphasis remap=\"I\">LOGIN</emphasis>. The named user must exist."
+msgstr ""
+
+#: userdel.8.xml:94(para)
+msgid "The options which apply to the <command>userdel</command> command are:"
+msgstr ""
+
+#: userdel.8.xml:99(term) groupadd.8.xml:100(term) expiry.1.xml:103(term)
+msgid "<option>-f</option>, <option>--force</option>"
+msgstr ""
+
+#: userdel.8.xml:103(para)
+msgid "This option forces the removal of the user account, even if the user is still logged in. It also forces <command>userdel</command> to remove the user's home directory and mail spool, even if another user uses the same home directory or if the mail spool is not owned by the specified user. If <option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</emphasis> in <filename>/etc/login.defs</filename> and if a group exists with the same name as the deleted user, then this group will be removed, even if it is still the primary group of another user."
+msgstr ""
+
+#: userdel.8.xml:116(para)
+msgid "<emphasis>Note:</emphasis> This option is dangerous and may leave your system in an inconsistent state."
+msgstr ""
+
+#: userdel.8.xml:129(term)
+msgid "<option>-r</option>, <option>--remove</option>"
+msgstr ""
+
+#: userdel.8.xml:133(para)
+msgid "Files in the user's home directory will be removed along with the home directory itself and the user's mail spool. Files located in other file systems will have to be searched for and deleted manually."
+msgstr ""
+
+#: userdel.8.xml:139(para)
+msgid "The mail spool is defined by the <option>MAIL_DIR</option> variable in the <filename>login.defs</filename> file."
+msgstr ""
+
+#: userdel.8.xml:175(term)
+msgid "<option>-Z</option>, <option>--selinux-user</option>"
+msgstr ""
+
+#: userdel.8.xml:179(para)
+msgid "Remove any SELinux user mapping for the user's login."
+msgstr ""
+
+#: userdel.8.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>USERDEL_CMD</option> (string)"
+msgstr ""
+
+#: userdel.8.xml:35(para) login.defs.5.xml:35(para)
+msgid "If defined, this command is run when removing a user. It should remove any at/cron/print jobs etc. owned by the user to be removed (passed as the first argument)."
+msgstr ""
+
+#: userdel.8.xml:40(para) login.defs.5.xml:40(para)
+msgid "The return code of the script is not taken into account."
+msgstr ""
+
+#: userdel.8.xml:46(programlisting) login.defs.5.xml:46(programlisting)
+#, no-wrap
+msgid "\n#! /bin/sh\n\n# Check for the required argument.\nif [ $# != 1 ]; then\n\techo \"Usage: $0 username\"\n\texit 1\nfi\n\n# Remove cron jobs.\ncrontab -r -u $1\n\n# Remove at jobs.\n# Note that it will remove any jobs owned by the same UID,\n# even if it was shared by a different username.\nAT_SPOOL_DIR=/var/spool/cron/atjobs\nfind $AT_SPOOL_DIR -name \"[^.]*\" -type f -user $1 -delete \\;\n\n# Remove print jobs.\nlprm $1\n\n# All done.\nexit 0\n "
+msgstr ""
+
+#: userdel.8.xml:43(para) login.defs.5.xml:43(para)
+msgid "Here is an example script, which removes the user's cron, at and print jobs: <placeholder-1/>"
+msgstr ""
+
+#: userdel.8.xml:32(term) useradd.8.xml:32(term) su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>USERGROUPS_ENAB</option> (boolean)"
+msgstr ""
+
+#: userdel.8.xml:34(para) useradd.8.xml:34(para) su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable setting of the umask group bits to be the same as owner bits (examples: 022 -&gt; 002, 077 -&gt; 007) for non-root users, if the uid is the same as gid, and username is the same as the primary group name."
+msgstr ""
+
+#: userdel.8.xml:39(para) useradd.8.xml:39(para) su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid "If set to <replaceable>yes</replaceable>, <command>userdel</command> will remove the user's group if it contains no more members, and <command>useradd</command> will create by default a group with the name of the user."
+msgstr ""
+
+#: userdel.8.xml:247(title) useradd.8.xml:766(title) su.1.xml:390(title) pwck.8.xml:303(title) passwd.1.xml:443(title) grpck.8.xml:245(title) groupmod.8.xml:252(title) groupdel.8.xml:175(title) groupadd.8.xml:296(title) chage.1.xml:284(title)
+msgid "EXIT VALUES"
+msgstr ""
+
+#: userdel.8.xml:252(replaceable) useradd.8.xml:771(replaceable) su.1.xml:409(replaceable) pwck.8.xml:308(replaceable) passwd.1.xml:448(replaceable) grpck.8.xml:250(replaceable) groupmod.8.xml:257(replaceable) groupdel.8.xml:180(replaceable) groupadd.8.xml:301(replaceable) chage.1.xml:289(replaceable)
+msgid "0"
+msgstr ""
+
+#: userdel.8.xml:254(para) useradd.8.xml:773(para) pwck.8.xml:310(para) passwd.1.xml:450(para) grpck.8.xml:252(para) groupdel.8.xml:182(para) groupadd.8.xml:303(para) chage.1.xml:291(para)
+msgid "success"
+msgstr ""
+
+#: userdel.8.xml:258(replaceable) useradd.8.xml:777(replaceable) su.1.xml:75(manvolnum) su.1.xml:415(replaceable) sg.1.xml:59(manvolnum) pwck.8.xml:314(replaceable) passwd.1.xml:65(manvolnum) passwd.1.xml:454(replaceable) newgrp.1.xml:59(manvolnum) login.1.xml:91(manvolnum) grpck.8.xml:256(replaceable) groups.1.xml:58(manvolnum) gpasswd.1.xml:63(manvolnum) expiry.1.xml:62(manvolnum) chsh.1.xml:61(manvolnum) chfn.1.xml:61(manvolnum) chage.1.xml:59(manvolnum) chage.1.xml:295(replaceable)
+msgid "1"
+msgstr ""
+
+#: userdel.8.xml:260(para) useradd.8.xml:779(para)
+msgid "can't update password file"
+msgstr ""
+
+#: userdel.8.xml:264(replaceable) useradd.8.xml:783(replaceable) pwck.8.xml:320(replaceable) passwd.1.xml:460(replaceable) grpck.8.xml:262(replaceable) groupmod.8.xml:263(replaceable) groupdel.8.xml:186(replaceable) groupadd.8.xml:307(replaceable) chage.1.xml:301(replaceable)
+msgid "2"
+msgstr ""
+
+#: userdel.8.xml:266(para) useradd.8.xml:785(para) pwck.8.xml:316(para) grpck.8.xml:258(para) groupdel.8.xml:188(para) groupadd.8.xml:309(para) chage.1.xml:303(para)
+msgid "invalid command syntax"
+msgstr ""
+
+#: userdel.8.xml:270(replaceable) useradd.8.xml:801(replaceable) pwck.8.xml:344(replaceable) passwd.1.xml:484(replaceable) groupmod.8.xml:281(replaceable) groupdel.8.xml:192(replaceable)
+msgid "6"
+msgstr ""
+
+#: userdel.8.xml:272(para)
+msgid "specified user doesn't exist"
+msgstr ""
+
+#: userdel.8.xml:278(para)
+msgid "user currently logged in"
+msgstr ""
+
+#: userdel.8.xml:282(replaceable) useradd.8.xml:813(replaceable) groupmod.8.xml:293(replaceable) groupdel.8.xml:204(replaceable) groupadd.8.xml:331(replaceable)
+msgid "10"
+msgstr ""
+
+#: userdel.8.xml:284(para) useradd.8.xml:815(para) groupdel.8.xml:206(para) groupadd.8.xml:333(para)
+msgid "can't update group file"
+msgstr ""
+
+#: userdel.8.xml:288(replaceable) useradd.8.xml:819(replaceable) groupmod.8.xml:305(replaceable)
+msgid "12"
+msgstr ""
+
+#: userdel.8.xml:290(para)
+msgid "can't remove home directory"
+msgstr ""
+
+#: userdel.8.xml:248(para)
+msgid "The <command>userdel</command> command exits with the following values: <placeholder-1/>"
+msgstr ""
+
+#: userdel.8.xml:299(para)
+msgid "<command>userdel</command> will not allow you to remove an account if there are running processes which belong to this account. In that case, you may have to kill those processes or lock the user's password or account and remove the account later. The <option>-f</option> option can force the deletion of this account."
+msgstr ""
+
+#: userdel.8.xml:306(para)
+msgid "You should manually check all file systems to ensure that no files remain owned by this user."
+msgstr ""
+
+#: userdel.8.xml:310(para)
+msgid "You may not remove any NIS attributes on a NIS client. This must be performed on the NIS server."
+msgstr ""
+
+#: userdel.8.xml:313(para)
+msgid "If <option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</emphasis> in <filename>/etc/login.defs</filename>, <command>userdel</command> will delete the group with the same name as the user. To avoid inconsistencies in the passwd and group databases, <command>userdel</command> will check that this group is not used as a primary group for another user, and will just warn without deleting the group otherwise. The <option>-f</option> option can force the deletion of this group."
+msgstr ""
+
+#: userdel.8.xml:326(para)
+msgid "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition=\"subids\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</refentrytitle><manvolnum>5</manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: useradd.8.xml:76(refentrytitle) useradd.8.xml:83(refname) useradd.8.xml:88(command) useradd.8.xml:95(command) useradd.8.xml:99(command) login.defs.5.xml:482(term)
+msgid "useradd"
+msgstr ""
+
+#: useradd.8.xml:84(refpurpose)
+msgid "create a new user or update default new user information"
+msgstr ""
+
+#: useradd.8.xml:96(arg) useradd.8.xml:100(arg)
+msgid "-D"
+msgstr ""
+
+#: useradd.8.xml:109(para)
+msgid "When invoked without the <option>-D</option> option, the <command>useradd</command> command creates a new user account using the values specified on the command line plus the default values from the system. Depending on command line options, the <command>useradd</command> command will update system files and may also create the new user's home directory and copy initial files."
+msgstr ""
+
+#: useradd.8.xml:118(para)
+msgid "By default, a group will also be created for the new user (see <option>-g</option>, <option>-N</option>, <option>-U</option>, and <option>USERGROUPS_ENAB</option>)."
+msgstr ""
+
+#: useradd.8.xml:127(para)
+msgid "The options which apply to the <command>useradd</command> command are:"
+msgstr ""
+
+#: useradd.8.xml:132(option) pwck.8.xml:187(option) newusers.8.xml:273(option)
+msgid "--badname"
+msgstr ""
+
+#: useradd.8.xml:141(term) useradd.8.xml:559(term)
+msgid "<option>-b</option>, <option>--base-dir</option>&nbsp;<replaceable>BASE_DIR</replaceable>"
+msgstr ""
+
+#: useradd.8.xml:145(para)
+msgid "The default base directory for the system if <option>-d</option>&nbsp;<replaceable>HOME_DIR</replaceable> is not specified. <replaceable>BASE_DIR</replaceable> is concatenated with the account name to define the home directory. If the <option>-m</option> option is not used, <replaceable>BASE_DIR</replaceable> must exist."
+msgstr ""
+
+#: useradd.8.xml:152(para)
+msgid "If this option is not specified, <command>useradd</command> will use the base directory specified by the <option>HOME</option> variable in <filename>/etc/default/useradd</filename>, or <filename>/home</filename> by default."
+msgstr ""
+
+#: useradd.8.xml:166(para)
+msgid "Any text string. It is generally a short description of the login, and is currently used as the field for the user's full name."
+msgstr ""
+
+#: useradd.8.xml:174(term)
+msgid "<option>-d</option>, <option>--home-dir</option>&nbsp;<replaceable>HOME_DIR</replaceable>"
+msgstr ""
+
+#: useradd.8.xml:178(para)
+msgid "The new user will be created using <replaceable>HOME_DIR</replaceable> as the value for the user's login directory. The default is to append the <replaceable>LOGIN</replaceable> name to <replaceable>BASE_DIR</replaceable> and use that as the login directory name. The directory <replaceable>HOME_DIR</replaceable> does not have to exist but will not be created if it is missing."
+msgstr ""
+
+#: useradd.8.xml:190(term)
+msgid "<option>-D</option>, <option>--defaults</option>"
+msgstr ""
+
+#: useradd.8.xml:194(para)
+msgid "See below, the subsection \"Changing the default values\"."
+msgstr ""
+
+#: useradd.8.xml:208(para)
+msgid "If not specified, <command>useradd</command> will use the default expiry date specified by the <option>EXPIRE</option> variable in <filename>/etc/default/useradd</filename>, or an empty string (no expiry) by default."
+msgstr ""
+
+#: useradd.8.xml:221(para)
+msgid "The number of days after a password expires until the account is permanently disabled. A value of 0 disables the account as soon as the password has expired, and a value of -1 disables the feature."
+msgstr ""
+
+#: useradd.8.xml:227(para)
+msgid "If not specified, <command>useradd</command> will use the default inactivity period specified by the <option>INACTIVE</option> variable in <filename>/etc/default/useradd</filename>, or -1 by default."
+msgstr ""
+
+#: useradd.8.xml:240(para)
+msgid "The group name or number of the user's initial login group. The group name must exist. A group number must refer to an already existing group."
+msgstr ""
+
+#: useradd.8.xml:245(para)
+msgid "If not specified, the behavior of <command>useradd</command> will depend on the <option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</filename>. If this variable is set to <replaceable>yes</replaceable> (or <option>-U/--user-group</option> is specified on the command line), a group will be created for the user, with the same name as her loginname. If the variable is set to <replaceable>no</replaceable> (or <option>-N/--no-user-group</option> is specified on the command line), useradd will set the primary group of the new user to the value specified by the <option>GROUP</option> variable in <filename>/etc/default/useradd</filename>, or 100 by default."
+msgstr ""
+
+#: useradd.8.xml:267(para)
+msgid "A list of supplementary groups which the user is also a member of. Each group is separated from the next by a comma, with no intervening whitespace. The groups are subject to the same restrictions as the group given with the <option>-g</option> option. The default is for the user to belong only to the initial group."
+msgstr ""
+
+#: useradd.8.xml:284(term)
+msgid "<option>-k</option>, <option>--skel</option>&nbsp;<replaceable>SKEL_DIR</replaceable>"
+msgstr ""
+
+#: useradd.8.xml:288(para)
+msgid "The skeleton directory, which contains files and directories to be copied in the user's home directory, when the home directory is created by <command>useradd</command>."
+msgstr ""
+
+#: useradd.8.xml:293(para)
+msgid "This option is only valid if the <option>-m</option> (or <option>--create-home</option>) option is specified."
+msgstr ""
+
+#: useradd.8.xml:297(para)
+msgid "If this option is not set, the skeleton directory is defined by the <option>SKEL</option> variable in <filename>/etc/default/useradd</filename> or, by default, <filename>/etc/skel</filename>."
+msgstr ""
+
+#: useradd.8.xml:303(para)
+msgid "If possible, the ACLs and extended attributes are copied."
+msgstr ""
+
+#: useradd.8.xml:309(term) groupadd.8.xml:137(term)
+msgid "<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</replaceable>=<replaceable>VALUE</replaceable>"
+msgstr ""
+
+#: useradd.8.xml:313(para)
+msgid "Overrides <filename>/etc/login.defs</filename> defaults (<option>UID_MIN</option>, <option>UID_MAX</option>, <option>UMASK</option>, <option>PASS_MAX_DAYS</option> and others). <placeholder-1/> Example: <option>-K</option>&nbsp;<replaceable>PASS_MAX_DAYS</replaceable>=<replaceable>-1</replaceable> can be used when creating system account to turn off password aging, even though system account has no password at all. Multiple <option>-K</option> options can be specified, e.g.: <option>-K</option>&nbsp;<replaceable>UID_MIN</replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;<replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+
+#: useradd.8.xml:334(term)
+msgid "<option>-l</option>, <option>--no-log-init</option>"
+msgstr ""
+
+#: useradd.8.xml:336(para)
+msgid "Do not add the user to the lastlog and faillog databases."
+msgstr ""
+
+#: useradd.8.xml:339(para)
+msgid "By default, the user's entries in the lastlog and faillog databases are reset to avoid reusing the entry from a previously deleted user."
+msgstr ""
+
+#: useradd.8.xml:347(term)
+msgid "<option>-m</option>, <option>--create-home</option>"
+msgstr ""
+
+#: useradd.8.xml:351(para)
+msgid "Create the user's home directory if it does not exist. The files and directories contained in the skeleton directory (which can be defined with the <option>-k</option> option) will be copied to the home directory."
+msgstr ""
+
+#: useradd.8.xml:357(para)
+msgid "By default, if this option is not specified and <option>CREATE_HOME</option> is not enabled, no home directories are created."
+msgstr ""
+
+#: useradd.8.xml:365(term)
+msgid "<option>-M</option>, <option>--no-create-home</option>"
+msgstr ""
+
+#: useradd.8.xml:369(para)
+msgid "Do no create the user's home directory, even if the system wide setting from <filename>/etc/login.defs</filename> (<option>CREATE_HOME</option>) is set to <replaceable>yes</replaceable>."
+msgstr ""
+
+#: useradd.8.xml:378(term)
+msgid "<option>-N</option>, <option>--no-user-group</option>"
+msgstr ""
+
+#: useradd.8.xml:382(para)
+msgid "Do not create a group with the same name as the user, but add the user to the group specified by the <option>-g</option> option or by the <option>GROUP</option> variable in <filename>/etc/default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:388(para) useradd.8.xml:526(para)
+msgid "The default behavior (if the <option>-g</option>, <option>-N</option>, and <option>-U</option> options are not specified) is defined by the <option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: useradd.8.xml:401(para)
+msgid "Allow the creation of a user account with a duplicate (non-unique) UID."
+msgstr ""
+
+#: useradd.8.xml:402(para)
+msgid "This option is only valid in combination with the <option>-u</option> option."
+msgstr ""
+
+#: useradd.8.xml:413(para) groupadd.8.xml:171(para)
+msgid "The encrypted password, as returned by <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></citerefentry>. The default is to disable the password."
+msgstr ""
+
+#: useradd.8.xml:430(term) newusers.8.xml:302(term) groupadd.8.xml:188(term)
+msgid "<option>-r</option>, <option>--system</option>"
+msgstr ""
+
+#: useradd.8.xml:434(para) newusers.8.xml:306(para)
+msgid "Create a system account."
+msgstr ""
+
+#: useradd.8.xml:437(para)
+msgid "System users will be created with no aging information in <filename>/etc/shadow</filename>, and their numeric identifiers are chosen in the <option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in <filename>/etc/login.defs</filename>, instead of <option>UID_MIN</option>-<option>UID_MAX</option> (and their <option>GID</option> counterparts for the creation of groups)."
+msgstr ""
+
+#: useradd.8.xml:446(para)
+msgid "Note that <command>useradd</command> will not create a home directory for such a user, regardless of the default setting in <filename>/etc/login.defs</filename> (<option>CREATE_HOME</option>). You have to specify the <option>-m</option> options if you want a home directory for a system account to be created."
+msgstr ""
+
+#: useradd.8.xml:490(para)
+msgid "The name of the user's login shell. The default is to leave this field blank, which causes the system to select the default login shell specified by the <option>SHELL</option> variable in <filename>/etc/default/useradd</filename>, or an empty string by default."
+msgstr ""
+
+#: useradd.8.xml:504(para)
+msgid "The numerical value of the user's ID. This value must be unique, unless the <option>-o</option> option is used. The value must be non-negative. The default is to use the smallest ID value greater than or equal to <option>UID_MIN</option> and greater than every other user."
+msgstr ""
+
+#: useradd.8.xml:511(para)
+msgid "See also the <option>-r</option> option and the <option>UID_MAX</option> description."
+msgstr ""
+
+#: useradd.8.xml:518(term)
+msgid "<option>-U</option>, <option>--user-group</option>"
+msgstr ""
+
+#: useradd.8.xml:522(para)
+msgid "Create a group with the same name as the user, and add the user to this group."
+msgstr ""
+
+#: useradd.8.xml:539(para)
+msgid "The SELinux user for the user's login. The default is to leave this field blank, which causes the system to select the default SELinux user."
+msgstr ""
+
+#: useradd.8.xml:549(title)
+msgid "Changing the default values"
+msgstr ""
+
+#: useradd.8.xml:550(para)
+msgid "When invoked with only the <option>-D</option> option, <command>useradd</command> will display the current default values. When invoked with <option>-D</option> plus other options, <command>useradd</command> will update the default values for the specified options. Valid default-changing options are:"
+msgstr ""
+
+#: useradd.8.xml:563(para)
+msgid "The path prefix for a new user's home directory. The user's name will be affixed to the end of <replaceable>BASE_DIR</replaceable> to form the new user's home directory name, if the <option>-d</option> option is not used when creating a new account."
+msgstr ""
+
+#: useradd.8.xml:570(para)
+msgid "This option sets the <option>HOME</option> variable in <filename>/etc/default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:581(para)
+msgid "The date on which the user account is disabled."
+msgstr ""
+
+#: useradd.8.xml:582(para)
+msgid "This option sets the <option>EXPIRE</option> variable in <filename>/etc/default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:593(para)
+msgid "The number of days after a password has expired before the account will be disabled."
+msgstr ""
+
+#: useradd.8.xml:597(para)
+msgid "This option sets the <option>INACTIVE</option> variable in <filename>/etc/default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:608(para)
+msgid "The group name or ID for a new user's initial group (when the <option>-N/--no-user-group</option> is used or when the <option>USERGROUPS_ENAB</option> variable is set to <replaceable>no</replaceable> in <filename>/etc/login.defs</filename>). The named group must exist, and a numerical group ID must have an existing entry."
+msgstr ""
+
+#: useradd.8.xml:617(para)
+msgid "This option sets the <option>GROUP</option> variable in <filename>/etc/default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:628(para)
+msgid "The name of a new user's login shell."
+msgstr ""
+
+#: useradd.8.xml:631(para)
+msgid "This option sets the <option>SHELL</option> variable in <filename>/etc/default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:643(title)
+msgid "NOTES"
+msgstr ""
+
+#: useradd.8.xml:644(para)
+msgid "The system administrator is responsible for placing the default user files in the <filename>/etc/skel/</filename> directory (or any other skeleton directory specified in <filename>/etc/default/useradd</filename> or on the command line)."
+msgstr ""
+
+#: useradd.8.xml:653(para)
+msgid "You may not add a user to a NIS or LDAP group. This must be performed on the corresponding server."
+msgstr ""
+
+#: useradd.8.xml:658(para)
+msgid "Similarly, if the username already exists in an external user database such as NIS or LDAP, <command>useradd</command> will deny the user account creation request."
+msgstr ""
+
+#: useradd.8.xml:664(para)
+msgid "Usernames must start with a lower case letter or an underscore, followed by lower case letters, digits, underscores, or dashes. They can end with a dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+
+#: useradd.8.xml:670(para)
+msgid "Usernames may only be up to 32 characters long."
+msgstr ""
+
+#: useradd.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>CREATE_HOME</option> (boolean)"
+msgstr ""
+
+#: useradd.8.xml:32(para) login.defs.5.xml:32(para)
+msgid "Indicate if a home directory should be created by default for new users."
+msgstr ""
+
+#: useradd.8.xml:36(para) login.defs.5.xml:36(para)
+msgid "This setting does not apply to system users, and can be overridden on the command line."
+msgstr ""
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term) groupadd.8.xml:32(term)
+msgid "<option>GID_MAX</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term) groupadd.8.xml:33(term)
+msgid "<option>GID_MIN</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para) groupadd.8.xml:35(para)
+msgid "Range of group IDs used for the creation of regular groups by <command>useradd</command>, <command>groupadd</command>, or <command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para) groupadd.8.xml:40(para)
+msgid "The default value for <option>GID_MIN</option> (resp. <option>GID_MAX</option>) is 1000 (resp. 60000)."
+msgstr ""
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>HOME_MODE</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid "The mode for new home directories. If not specified, the <option>UMASK</option> is used to create the mode."
+msgstr ""
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+msgid "<command>useradd</command> and <command>newusers</command> use this to set the mode of the home directory they create."
+msgstr ""
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_MAX_DAYS</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid "The maximum number of days a password may be used. If the password is older than this, a password change will be forced. If not specified, -1 will be assumed (which disables the restriction)."
+msgstr ""
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_MIN_DAYS</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid "The minimum number of days allowed between password changes. Any password changes attempted sooner than this will be rejected. If not specified, -1 will be assumed (which disables the restriction)."
+msgstr ""
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_WARN_AGE</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid "The number of days warning given before a password expires. A zero means warning is given only upon the day of expiration, a negative value means no warning is given. If not specified, no warning will be provided."
+msgstr ""
+
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term) groupadd.8.xml:30(term)
+msgid "<option>SYS_GID_MAX</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term) groupadd.8.xml:31(term)
+msgid "<option>SYS_GID_MIN</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para) groupadd.8.xml:33(para)
+msgid "Range of group IDs used for the creation of system groups by <command>useradd</command>, <command>groupadd</command>, or <command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para) groupadd.8.xml:38(para)
+msgid "The default value for <option>SYS_GID_MIN</option> (resp. <option>SYS_GID_MAX</option>) is 101 (resp. <option>GID_MIN</option>-1)."
+msgstr ""
+
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>SYS_UID_MAX</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+msgid "<option>SYS_UID_MIN</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+msgid "Range of user IDs used for the creation of system users by <command>useradd</command> or <command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:37(para) newusers.8.xml:37(para) login.defs.5.xml:37(para)
+msgid "The default value for <option>SYS_UID_MIN</option> (resp. <option>SYS_UID_MAX</option>) is 101 (resp. <option>UID_MIN</option>-1)."
+msgstr ""
+
+#: useradd.8.xml:30(term) pwck.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>TCB_AUTH_GROUP</option> (boolean)"
+msgstr ""
+
+#: useradd.8.xml:32(para) pwck.8.xml:32(para) login.defs.5.xml:32(para)
+msgid "If <replaceable>yes</replaceable>, newly created tcb shadow files will be group owned by the <replaceable>auth</replaceable> group."
+msgstr ""
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>UID_MAX</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>UID_MIN</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+msgid "Range of user IDs used for the creation of regular users by <command>useradd</command> or <command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:39(para) newusers.8.xml:39(para) login.defs.5.xml:39(para)
+msgid "The default value for <option>UID_MIN</option> (resp. <option>UID_MAX</option>) is 1000 (resp. 60000)."
+msgstr ""
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>UMASK</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "The file mode creation mask is initialized to this value. If not specified, the mask will be initialized to 022."
+msgstr ""
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid "<command>useradd</command> and <command>newusers</command> use this mask to set the mode of the home directory they create if <option>HOME_MODE</option> is not set."
+msgstr ""
+
+#: useradd.8.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid "It is also used by <command>login</command> to define users' initial umask. Note that this mask can be overridden by the user's GECOS line (if <option>QUOTAS_ENAB</option> is set) or by the specification of a limit with the <emphasis>K</emphasis> identifier in <citerefentry><refentrytitle>limits</refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: useradd.8.xml:51(para) newusers.8.xml:51(para) login.defs.5.xml:51(para) login.1.xml:51(para)
+msgid "It is also used by <command>pam_umask</command> as the default umask value."
+msgstr ""
+
+#: useradd.8.xml:733(filename)
+msgid "/etc/default/useradd"
+msgstr ""
+
+#: useradd.8.xml:735(para)
+msgid "Default values for account creation."
+msgstr ""
+
+#: useradd.8.xml:739(filename)
+msgid "/etc/skel/"
+msgstr ""
+
+#: useradd.8.xml:741(para)
+msgid "Directory containing default files."
+msgstr ""
+
+#: useradd.8.xml:789(replaceable) shadow.3.xml:58(manvolnum) pwck.8.xml:326(replaceable) passwd.1.xml:466(replaceable) grpck.8.xml:268(replaceable) groupmod.8.xml:269(replaceable) groupadd.8.xml:313(replaceable)
+msgid "3"
+msgstr ""
+
+#: useradd.8.xml:791(para) passwd.1.xml:486(para) groupadd.8.xml:315(para)
+msgid "invalid argument to option"
+msgstr ""
+
+#: useradd.8.xml:795(replaceable) pwck.8.xml:332(replaceable) passwd.1.xml:472(replaceable) grpck.8.xml:274(replaceable) groupmod.8.xml:275(replaceable) groupadd.8.xml:319(replaceable)
+msgid "4"
+msgstr ""
+
+#: useradd.8.xml:797(para)
+msgid "UID already in use (and no <option>-o</option>)"
+msgstr ""
+
+#: useradd.8.xml:803(para) groupdel.8.xml:194(para)
+msgid "specified group doesn't exist"
+msgstr ""
+
+#: useradd.8.xml:807(replaceable) groupmod.8.xml:287(replaceable) groupadd.8.xml:325(replaceable)
+msgid "9"
+msgstr ""
+
+#: useradd.8.xml:809(para)
+msgid "username already in use"
+msgstr ""
+
+#: useradd.8.xml:821(para)
+msgid "can't create home directory"
+msgstr ""
+
+#: useradd.8.xml:825(replaceable)
+msgid "14"
+msgstr ""
+
+#: useradd.8.xml:827(para)
+msgid "can't update SELinux user mapping"
+msgstr ""
+
+#: useradd.8.xml:767(para)
+msgid "The <command>useradd</command> command exits with the following values: <placeholder-1/>"
+msgstr ""
+
+#: useradd.8.xml:836(para)
+msgid "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition=\"subids\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</refentrytitle><manvolnum>5</manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: suauth.5.xml:41(contrib) pwconv.8.xml:47(contrib) login.access.5.xml:42(contrib) gpasswd.1.xml:46(contrib)
+msgid "Creation, 1996"
+msgstr ""
+
+#: suauth.5.xml:57(refentrytitle) suauth.5.xml:64(refname)
+msgid "suauth"
+msgstr ""
+
+#: suauth.5.xml:58(manvolnum) shadow.5.xml:58(manvolnum) pwck.8.xml:338(replaceable) porttime.5.xml:58(manvolnum) passwd.5.xml:58(manvolnum) passwd.1.xml:478(replaceable) login.defs.5.xml:125(manvolnum) login.access.5.xml:59(manvolnum) limits.5.xml:60(manvolnum) gshadow.5.xml:47(manvolnum) grpck.8.xml:280(replaceable) faillog.5.xml:58(manvolnum)
+msgid "5"
+msgstr ""
+
+#: suauth.5.xml:59(refmiscinfo) shadow.5.xml:59(refmiscinfo) porttime.5.xml:59(refmiscinfo) passwd.5.xml:59(refmiscinfo) login.defs.5.xml:126(refmiscinfo) login.access.5.xml:60(refmiscinfo) limits.5.xml:61(refmiscinfo) gshadow.5.xml:48(refmiscinfo) faillog.5.xml:59(refmiscinfo)
+msgid "File Formats and Conversions"
+msgstr ""
+
+#: suauth.5.xml:65(refpurpose)
+msgid "detailed su control file"
+msgstr ""
+
+#: suauth.5.xml:70(command) suauth.5.xml:196(filename)
+msgid "/etc/suauth"
+msgstr ""
+
+#: suauth.5.xml:76(para)
+msgid "The file <filename>/etc/suauth</filename> is referenced whenever the su command is called. It can change the behaviour of the su command, based upon:"
+msgstr ""
+
+#. .RS
+#: suauth.5.xml:83(literallayout)
+#, no-wrap
+msgid "\n 1) the user su is targeting\n "
+msgstr ""
+
+#. .fi
+#: suauth.5.xml:87(para)
+msgid "2) the user executing the su command (or any groups he might be a member of)"
+msgstr ""
+
+#: suauth.5.xml:92(para)
+msgid "The file is formatted like this, with lines starting with a # being treated as comment lines and ignored;"
+msgstr ""
+
+#: suauth.5.xml:97(literallayout)
+#, no-wrap
+msgid "\n to-id:from-id:ACTION\n "
+msgstr ""
+
+#: suauth.5.xml:101(para)
+msgid "Where to-id is either the word <emphasis>ALL</emphasis>, a list of usernames delimited by \",\" or the words <emphasis>ALL EXCEPT</emphasis> followed by a list of usernames delimited by \",\"."
+msgstr ""
+
+#: suauth.5.xml:107(para)
+msgid "from-id is formatted the same as to-id except the extra word <emphasis>GROUP</emphasis> is recognized. <emphasis>ALL EXCEPT GROUP</emphasis> is perfectly valid too. Following <emphasis>GROUP</emphasis> appears one or more group names, delimited by \",\". It is not sufficient to have primary group id of the relevant group, an entry in <citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</manvolnum></citerefentry> is necessary."
+msgstr ""
+
+#: suauth.5.xml:118(para)
+msgid "Action can be one only of the following currently supported options."
+msgstr ""
+
+#: suauth.5.xml:124(emphasis)
+msgid "DENY"
+msgstr ""
+
+#: suauth.5.xml:127(para)
+msgid "The attempt to su is stopped before a password is even asked for."
+msgstr ""
+
+#: suauth.5.xml:134(emphasis)
+msgid "NOPASS"
+msgstr ""
+
+#: suauth.5.xml:137(para)
+msgid "The attempt to su is automatically successful; no password is asked for."
+msgstr ""
+
+#: suauth.5.xml:145(emphasis)
+msgid "OWNPASS"
+msgstr ""
+
+#: suauth.5.xml:148(para)
+msgid "For the su command to be successful, the user must enter his or her own password. They are told this."
+msgstr ""
+
+#: suauth.5.xml:156(para)
+msgid "Note there are three separate fields delimited by a colon. No whitespace must surround this colon. Also note that the file is examined sequentially line by line, and the first applicable rule is used without examining the file further. This makes it possible for a system administrator to exercise as fine control as he or she wishes."
+msgstr ""
+
+#: suauth.5.xml:166(title)
+msgid "EXAMPLE"
+msgstr ""
+
+#: suauth.5.xml:167(literallayout)
+#, no-wrap
+msgid "\n # sample /etc/suauth file\n #\n # A couple of privileged usernames may\n # su to root with their own password.\n #\n root:chris,birddog:OWNPASS\n #\n # Anyone else may not su to root unless in\n # group wheel. This is how BSD does things.\n #\n root:ALL EXCEPT GROUP wheel:DENY\n #\n # Perhaps terry and birddog are accounts\n # owned by the same person.\n # Access can be arranged between them\n # with no password.\n #\n terry:birddog:NOPASS\n birddog:terry:NOPASS\n #\n "
+msgstr ""
+
+#: suauth.5.xml:203(title) pwconv.8.xml:216(title) login.defs.5.xml:531(title)
+msgid "BUGS"
+msgstr ""
+
+#: suauth.5.xml:204(para)
+msgid "There could be plenty lurking. The file parser is particularly unforgiving about syntax errors, expecting no spurious whitespace (apart from beginning and end of lines), and a specific token delimiting different things."
+msgstr ""
+
+#: suauth.5.xml:213(title) shadow.3.xml:208(title)
+msgid "DIAGNOSTICS"
+msgstr ""
+
+#: suauth.5.xml:214(para)
+msgid "An error parsing the file is reported using <citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</manvolnum></citerefentry> as level ERR on facility AUTH."
+msgstr ""
+
+#: suauth.5.xml:223(para)
+msgid "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+msgstr ""
+
+#: su.1.xml:58(contrib) shadow.5.xml:41(contrib) shadow.3.xml:41(contrib) porttime.5.xml:41(contrib) passwd.5.xml:41(contrib) passwd.1.xml:48(contrib) login.1.xml:74(contrib) faillog.8.xml:41(contrib) faillog.5.xml:41(contrib)
+msgid "Creation, 1989"
+msgstr ""
+
+#: su.1.xml:74(refentrytitle) su.1.xml:81(refname) su.1.xml:86(command) login.defs.5.xml:456(term)
+msgid "su"
+msgstr ""
+
+#: su.1.xml:76(refmiscinfo) sg.1.xml:60(refmiscinfo) passwd.1.xml:66(refmiscinfo) newgrp.1.xml:60(refmiscinfo) login.1.xml:92(refmiscinfo) groups.1.xml:59(refmiscinfo) gpasswd.1.xml:64(refmiscinfo) expiry.1.xml:63(refmiscinfo) chsh.1.xml:62(refmiscinfo) chfn.1.xml:62(refmiscinfo) chage.1.xml:60(refmiscinfo)
+msgid "User Commands"
+msgstr ""
+
+#: su.1.xml:82(refpurpose)
+msgid "change user ID or become superuser"
+msgstr ""
+
+#: su.1.xml:91(replaceable) sg.1.xml:72(arg) newgrp.1.xml:71(arg)
+msgid "-"
+msgstr ""
+
+#: su.1.xml:94(replaceable) login.1.xml:107(replaceable) login.1.xml:115(replaceable)
+msgid "username"
+msgstr ""
+
+#: su.1.xml:96(replaceable)
+msgid "args"
+msgstr ""
+
+#: su.1.xml:104(para)
+msgid "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."
+msgstr ""
+
+#: su.1.xml:114(para)
+msgid "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>."
+msgstr ""
+
+#: su.1.xml:122(para)
+msgid "The user will be prompted for a password, if appropriate. Invalid passwords will produce an error message. All attempts, both valid and invalid, are logged to detect abuse of the system."
+msgstr ""
+
+#: su.1.xml:127(para)
+msgid "The current environment is passed to the new shell. The value of <envar>$PATH</envar> is reset to <filename>/bin:/usr/bin</filename> for normal users, or <filename>/sbin:/bin:/usr/sbin:/usr/bin</filename> for the superuser. This may be changed with the <option>ENV_PATH</option> and <option>ENV_SUPATH</option> definitions in <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: su.1.xml:136(para) login.1.xml:188(para)
+msgid "A subsystem login is indicated by the presence of a \"*\" as the first character of the login shell. The given home directory will be used as the root of a new file system which the user is actually logged into."
+msgstr ""
+
+#: su.1.xml:145(para)
+msgid "The options which apply to the <command>su</command> command are:"
+msgstr ""
+
+#: su.1.xml:149(term)
+msgid "<option>-c</option>, <option>--command</option>&nbsp;<replaceable>COMMAND</replaceable>"
+msgstr ""
+
+#: su.1.xml:153(para)
+msgid "Specify a command that will be invoked by the shell using its <option>-c</option>."
+msgstr ""
+
+#: su.1.xml:157(para)
+msgid "The executed command will have no controlling terminal. This option cannot be used to execute interactive programs which need a controlling TTY."
+msgstr ""
+
+#: su.1.xml:167(term)
+msgid "<option>-</option>, <option>-l</option>, <option>--login</option>"
+msgstr ""
+
+#: su.1.xml:171(para)
+msgid "Provide an environment similar to what the user would expect had the user logged in directly."
+msgstr ""
+
+#: su.1.xml:175(para)
+msgid "When <option>-</option> is used, it must be specified before any <option>username</option>. For portability it is recommended to use it as last option, before any <option>username</option>. The other forms (<option>-l</option> and <option>--login</option>) do not have this restriction."
+msgstr ""
+
+#: su.1.xml:190(para)
+msgid "The shell that will be invoked."
+msgstr ""
+
+#: su.1.xml:198(para)
+msgid "The shell specified with --shell."
+msgstr ""
+
+#: su.1.xml:201(para)
+msgid "If <option>--preserve-environment</option> is used, the shell specified by the <envar>$SHELL</envar> environment variable."
+msgstr ""
+
+#: su.1.xml:208(para)
+msgid "The shell indicated in the <filename>/etc/passwd</filename> entry for the target user."
+msgstr ""
+
+#: su.1.xml:214(para)
+msgid "<filename>/bin/sh</filename> if a shell could not be found by any above method."
+msgstr ""
+
+#: su.1.xml:191(para)
+msgid "The invoked shell is chosen from (highest priority first): <placeholder-1/>"
+msgstr ""
+
+#: su.1.xml:219(para)
+msgid "If the target user has a restricted shell (i.e. the shell field of this user's entry in <filename>/etc/passwd</filename> is not listed in <filename>/etc/shells</filename>), then the <option>--shell</option> option or the <envar>$SHELL</envar> environment variable won't be taken into account, unless <command>su</command> is called by root."
+msgstr ""
+
+#: su.1.xml:230(term)
+msgid "<option>-m</option>, <option>-p</option>, <option>--preserve-environment</option>"
+msgstr ""
+
+#: su.1.xml:239(envar)
+msgid "$PATH"
+msgstr ""
+
+#: su.1.xml:241(para)
+msgid "reset according to the <filename>/etc/login.defs</filename> options <option>ENV_PATH</option> or <option>ENV_SUPATH</option> (see below);"
+msgstr ""
+
+#: su.1.xml:250(envar)
+msgid "$IFS"
+msgstr ""
+
+#: su.1.xml:252(para)
+msgid "reset to <quote>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</quote>, if it was set."
+msgstr ""
+
+#: su.1.xml:235(para)
+msgid "Preserve the current environment, except for: <placeholder-1/>"
+msgstr ""
+
+#: su.1.xml:261(para)
+msgid "If the target user has a restricted shell, this option has no effect (unless <command>su</command> is called by root)."
+msgstr ""
+
+#: su.1.xml:270(para)
+msgid "The <envar>$HOME</envar>, <envar>$SHELL</envar>, <envar>$USER</envar>, <envar>$LOGNAME</envar>, <envar>$PATH</envar>, and <envar>$IFS</envar> environment variables are reset."
+msgstr ""
+
+#: su.1.xml:279(para)
+msgid "If <option>--login</option> is not used, the environment is copied, except for the variables above."
+msgstr ""
+
+#: su.1.xml:286(para)
+msgid "If <option>--login</option> is used, the <envar>$TERM</envar>, <envar>$COLORTERM</envar>, <envar>$DISPLAY</envar>, and <envar>$XAUTHORITY</envar> environment variables are copied if they were set."
+msgstr ""
+
+#: su.1.xml:296(para)
+msgid "If <option>--login</option> is used, the <envar>$TZ</envar>, <envar>$HZ</envar>, and <envar>$MAIL</envar> environment variables are set according to the <filename>/etc/login.defs</filename> options <option>ENV_TZ</option>, <option>ENV_HZ</option>, <option>MAIL_DIR</option>, and <option>MAIL_FILE</option> (see below)."
+msgstr ""
+
+#: su.1.xml:309(para)
+msgid "If <option>--login</option> is used, other environment variables might be set by the <option>ENVIRON_FILE</option> file (see below)."
+msgstr ""
+
+#: su.1.xml:317(para)
+msgid "Other environments might be set by PAM modules."
+msgstr ""
+
+#: su.1.xml:265(para)
+msgid "Note that the default behavior for the environment is the following: <placeholder-1/>"
+msgstr ""
+
+#: su.1.xml:331(para)
+msgid "This version of <command>su</command> has many compilation options, only some of which may be in use at any particular site."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>CONSOLE</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "If defined, either full pathname of a file containing device names (one per line) or a \":\" delimited list of device names. Root logins will be allowed only upon these devices."
+msgstr ""
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid "If not defined, root will be allowed on any device."
+msgstr ""
+
+#: su.1.xml:42(para) login.defs.5.xml:42(para) login.1.xml:42(para)
+msgid "The device should be specified without the /dev/ prefix."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>CONSOLE_GROUPS</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "List of groups to add to the user's supplementary groups set when logging in on the console (as determined by the CONSOLE setting). Default is none. <placeholder-1/> Use with caution - it is possible for users to gain permanent access to these groups, even when not logged in on the console."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>DEFAULT_HOME</option> (boolean)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Indicate if login is allowed if we can't cd to the home directory. Default is no."
+msgstr ""
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid "If set to <replaceable>yes</replaceable>, the user will login in the root (<filename>/</filename>) directory if it is not possible to cd to her home directory."
+msgstr ""
+
+#. XXX: When compiled with PAM support, only sulogin uses ENV_HZ
+#: su.1.xml:33(term) login.defs.5.xml:33(term) login.1.xml:33(term)
+msgid "<option>ENV_HZ</option> (string)"
+msgstr ""
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid "If set, it will be used to define the HZ environment variable when a user login. The value must be preceded by <replaceable>HZ=</replaceable>. A common value on Linux is <replaceable>HZ=100</replaceable>."
+msgstr ""
+
+#: su.1.xml:41(para) login.defs.5.xml:41(para) login.1.xml:41(para)
+msgid "The <envar>HZ</envar> environment variable is only set when the user (the superuser) logs in with <command>sulogin</command>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENVIRON_FILE</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "If this file exists and is readable, login environment will be read from it. Every line should be in the form name=value."
+msgstr ""
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid "Lines starting with a # are treated as comment lines and ignored."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENV_PATH</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "If set, it will be used to define the PATH environment variable when a regular user login. The value is a colon separated list of paths (for example <replaceable>/bin:/usr/bin</replaceable>) and can be preceded by <replaceable>PATH=</replaceable>. The default value is <replaceable>PATH=/bin:/usr/bin</replaceable>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENV_SUPATH</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "If set, it will be used to define the PATH environment variable when the superuser login. The value is a colon separated list of paths (for example <replaceable>/sbin:/bin:/usr/sbin:/usr/bin</replaceable>) and can be preceded by <replaceable>PATH=</replaceable>. The default value is <replaceable>PATH=/sbin:/bin:/usr/sbin:/usr/bin</replaceable>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENV_TZ</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "If set, it will be used to define the TZ environment variable when a user login. The value can be the name of a timezone preceded by <replaceable>TZ=</replaceable> (for example <replaceable>TZ=CST6CDT</replaceable>), or the full path to the file containing the timezone specification (for example <filename>/etc/tzname</filename>)."
+msgstr ""
+
+#. TODO: it can in fact be used to set any other variable
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid "If a full path is specified but the file does not exist or cannot be read, the default is to use <replaceable>TZ=CST6CDT</replaceable>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term) chsh.1.xml:32(term) chfn.1.xml:32(term)
+msgid "<option>LOGIN_STRING</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para) chsh.1.xml:34(para) chfn.1.xml:34(para)
+msgid "The string used for prompting a password. The default is to use \"Password: \", or a translation of that string. If you set this variable, the prompt will not be translated."
+msgstr ""
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para) chsh.1.xml:39(para) chfn.1.xml:39(para)
+msgid "If the string contains <replaceable>%s</replaceable>, this will be replaced by the user's name."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>MAIL_CHECK_ENAB</option> (boolean)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable checking and display of mailbox status upon login."
+msgstr ""
+
+#: su.1.xml:37(para) login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid "You should disable it if the shell startup files already check for mail (\"mailx -e\" or equivalent)."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>QUOTAS_ENAB</option> (boolean)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable setting of resource limits from <filename>/etc/limits</filename> and ulimit, umask, and niceness from the user's passwd gecos field."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SULOG_FILE</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "If defined, all su activity is logged to this file."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SU_NAME</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "If defined, the command name to display when running \"su -\". For example, if this is defined as \"su\" then a \"ps\" will display the command is \"-su\". If not defined, then \"ps\" would display the name of the shell actually being run, e.g. something like \"-sh\"."
+msgstr ""
+
+#: su.1.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>SU_WHEEL_ONLY</option> (boolean)"
+msgstr ""
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para)
+msgid "If <replaceable>yes</replaceable>, the user must be listed as a member of the first gid 0 group in <filename>/etc/group</filename> (called <replaceable>root</replaceable> on most Linux systems) to be able to <command>su</command> to uid 0 accounts. If the group doesn't exist or is empty, no one will be able to <command>su</command> to uid 0."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SYSLOG_SU_ENAB</option> (boolean)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable \"syslog\" logging of <command>su</command> activity - in addition to sulog file logging."
+msgstr ""
+
+#: su.1.xml:391(para)
+msgid "On success, <command>su</command> returns the exit value of the command it executed."
+msgstr ""
+
+#: su.1.xml:395(para)
+msgid "If this command was terminated by a signal, <command>su</command> returns the number of this signal plus 128."
+msgstr ""
+
+#: su.1.xml:399(para)
+msgid "If su has to kill the command (because it was asked to terminate, and the command did not terminate in time), <command>su</command> returns 255."
+msgstr ""
+
+#: su.1.xml:411(para)
+msgid "success (<option>--help</option> only)"
+msgstr ""
+
+#: su.1.xml:417(para)
+msgid "System or authentication failure"
+msgstr ""
+
+#: su.1.xml:421(replaceable)
+msgid "126"
+msgstr ""
+
+#: su.1.xml:423(para)
+msgid "The requested command was not found"
+msgstr ""
+
+#: su.1.xml:427(replaceable)
+msgid "127"
+msgstr ""
+
+#: su.1.xml:429(para)
+msgid "The requested command could not be executed"
+msgstr ""
+
+#: su.1.xml:404(para)
+msgid "Some exit values from <command>su</command> are independent from the executed command: <placeholder-1/>"
+msgstr ""
+
+#: su.1.xml:438(para)
+msgid "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+msgstr ""
+
+#: sg.1.xml:58(refentrytitle) sg.1.xml:65(refname) sg.1.xml:71(command)
+msgid "sg"
+msgstr ""
+
+#: sg.1.xml:66(refpurpose)
+msgid "execute command as different group ID"
+msgstr ""
+
+#: sg.1.xml:74(arg)
+msgid "-c"
+msgstr ""
+
+#: sg.1.xml:73(arg)
+msgid "group <placeholder-1/> command"
+msgstr ""
+
+#: sg.1.xml:82(para)
+msgid "The <command>sg</command> command works similar to <command>newgrp</command> but accepts a command. The command will be executed with the <filename>/bin/sh</filename> shell. With most shells you may run <command>sg</command> from, you need to enclose multi-word commands in quotes. Another difference between <command>newgrp</command> and <command>sg</command> is that some shells treat <command>newgrp</command> specially, replacing themselves with a new instance of a shell that <command>newgrp</command> creates. This doesn't happen with <command>sg</command>, so upon exit from a <command>sg</command> command you are returned to your previous group ID."
+msgstr ""
+
+#: sg.1.xml:32(term) newgrp.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SYSLOG_SG_ENAB</option> (boolean)"
+msgstr ""
+
+#: sg.1.xml:34(para) newgrp.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable \"syslog\" logging of <command>sg</command> activity."
+msgstr ""
+
+#: sg.1.xml:141(para)
+msgid "<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition=\"gshadow\">, <citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+msgstr ""
+
+#: shadow.5.xml:57(refentrytitle) shadow.5.xml:64(refname) shadow.3.xml:57(refentrytitle) shadow.3.xml:64(refname) pwck.8.xml:84(replaceable) grpck.8.xml:76(replaceable)
+msgid "shadow"
+msgstr ""
+
+#: shadow.5.xml:65(refpurpose)
+msgid "shadowed password file"
+msgstr ""
+
+#: shadow.5.xml:70(para)
+msgid "<filename>shadow</filename> is a file which contains the password information for the system's accounts and optional aging information."
+msgstr ""
+
+#: shadow.5.xml:76(para) gshadow.5.xml:64(para)
+msgid "This file must not be readable by regular users if password security is to be maintained."
+msgstr ""
+
+#: shadow.5.xml:81(para)
+msgid "Each line of this file contains 9 fields, separated by colons (<quote>:</quote>), in the following order:"
+msgstr ""
+
+#: shadow.5.xml:88(emphasis) passwd.5.xml:78(para)
+msgid "login name"
+msgstr ""
+
+#: shadow.5.xml:90(para)
+msgid "It must be a valid account name, which exist on the system."
+msgstr ""
+
+#: shadow.5.xml:96(emphasis) gshadow.5.xml:83(emphasis)
+msgid "encrypted password"
+msgstr ""
+
+#: shadow.5.xml:98(para)
+msgid "This field may be empty, in which case no passwords are required to authenticate as the specified login name. However, some applications which read the <filename>/etc/shadow</filename> file may decide not to permit any access at all if the password field is empty."
+msgstr ""
+
+#: shadow.5.xml:105(para) gshadow.5.xml:107(para)
+msgid "A password field which starts with an exclamation mark means that the password is locked. The remaining characters on the line represent the password field before the password was locked."
+msgstr ""
+
+#: shadow.5.xml:111(para) passwd.5.xml:126(para) gshadow.5.xml:85(para)
+msgid "Refer to <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></citerefentry> for details on how this string is interpreted."
+msgstr ""
+
+#: shadow.5.xml:116(para) passwd.5.xml:131(para)
+msgid "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)."
+msgstr ""
+
+#: shadow.5.xml:127(emphasis)
+msgid "date of last password change"
+msgstr ""
+
+#: shadow.5.xml:130(para)
+msgid "The date of the last password change, expressed as the number of days since Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:134(para)
+msgid "The value 0 has a special meaning, which is that the user should change her password the next time she will log in the system."
+msgstr ""
+
+#: shadow.5.xml:139(para)
+msgid "An empty field means that password aging features are disabled."
+msgstr ""
+
+#: shadow.5.xml:146(emphasis)
+msgid "minimum password age"
+msgstr ""
+
+#: shadow.5.xml:148(para)
+msgid "The minimum password age is the number of days the user will have to wait before she will be allowed to change her password again."
+msgstr ""
+
+#: shadow.5.xml:153(para)
+msgid "An empty field and value 0 mean that there are no minimum password age."
+msgstr ""
+
+#: shadow.5.xml:160(emphasis)
+msgid "maximum password age"
+msgstr ""
+
+#: shadow.5.xml:162(para)
+msgid "The maximum password age is the number of days after which the user will have to change her password."
+msgstr ""
+
+#: shadow.5.xml:166(para)
+msgid "After this number of days is elapsed, the password may still be valid. The user should be asked to change her password the next time she will log in."
+msgstr ""
+
+#: shadow.5.xml:171(para)
+msgid "An empty field means that there are no maximum password age, no password warning period, and no password inactivity period (see below)."
+msgstr ""
+
+#: shadow.5.xml:176(para)
+msgid "If the maximum password age is lower than the minimum password age, the user cannot change her password."
+msgstr ""
+
+#: shadow.5.xml:184(emphasis)
+msgid "password warning period"
+msgstr ""
+
+#: shadow.5.xml:187(para)
+msgid "The number of days before a password is going to expire (see the maximum password age above) during which the user should be warned."
+msgstr ""
+
+#: shadow.5.xml:192(para)
+msgid "An empty field and value 0 mean that there are no password warning period."
+msgstr ""
+
+#: shadow.5.xml:200(emphasis)
+msgid "password inactivity period"
+msgstr ""
+
+#: shadow.5.xml:203(para)
+msgid "The number of days after a password has expired (see the maximum password age above) during which the password should still be accepted (and the user should update her password during the next login)."
+msgstr ""
+
+#: shadow.5.xml:209(para)
+msgid "After expiration of the password and this expiration period is elapsed, no login is possible using the current user's password. The user should contact her administrator."
+msgstr ""
+
+#: shadow.5.xml:214(para)
+msgid "An empty field means that there are no enforcement of an inactivity period."
+msgstr ""
+
+#: shadow.5.xml:222(emphasis)
+msgid "account expiration date"
+msgstr ""
+
+#: shadow.5.xml:225(para)
+msgid "The date of expiration of the account, expressed as the number of days since Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:229(para)
+msgid "Note that an account expiration differs from a password expiration. In case of an account expiration, the user shall not be allowed to login. In case of a password expiration, the user is not allowed to login using her password."
+msgstr ""
+
+#: shadow.5.xml:235(para)
+msgid "An empty field means that the account will never expire."
+msgstr ""
+
+#: shadow.5.xml:238(para)
+msgid "The value 0 should not be used as it is interpreted as either an account with no expiration, or as an expiration on Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:246(emphasis)
+msgid "reserved field"
+msgstr ""
+
+#: shadow.5.xml:248(para)
+msgid "This field is reserved for future use."
+msgstr ""
+
+#: shadow.5.xml:270(filename)
+msgid "/etc/shadow-"
+msgstr ""
+
+#: shadow.5.xml:272(para)
+msgid "Backup file for /etc/shadow."
+msgstr ""
+
+#: shadow.5.xml:273(para) passwd.5.xml:178(para)
+msgid "Note that this file is used by the tools of the shadow toolsuite, but not by all user and password management tools."
+msgstr ""
+
+#: shadow.5.xml:284(para)
+msgid "<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: shadow.3.xml:59(refmiscinfo)
+msgid "Library Calls"
+msgstr ""
+
+#: shadow.3.xml:65(refname)
+msgid "getspnam"
+msgstr ""
+
+#: shadow.3.xml:66(refpurpose)
+msgid "encrypted password file routines"
+msgstr ""
+
+#: shadow.3.xml:70(title)
+msgid "SYNTAX"
+msgstr ""
+
+#: shadow.3.xml:72(emphasis)
+msgid "#include &lt;shadow.h&gt;"
+msgstr ""
+
+#: shadow.3.xml:76(emphasis)
+msgid "struct spwd *getspent();"
+msgstr ""
+
+#: shadow.3.xml:80(emphasis)
+msgid "struct spwd *getspnam(char"
+msgstr ""
+
+#: shadow.3.xml:81(emphasis)
+msgid "*name"
+msgstr ""
+
+#: shadow.3.xml:81(emphasis) shadow.3.xml:94(emphasis) shadow.3.xml:99(emphasis) shadow.3.xml:105(emphasis)
+msgid ");"
+msgstr ""
+
+#: shadow.3.xml:85(emphasis)
+msgid "void setspent();"
+msgstr ""
+
+#: shadow.3.xml:89(emphasis)
+msgid "void endspent();"
+msgstr ""
+
+#: shadow.3.xml:93(emphasis)
+msgid "struct spwd *fgetspent(FILE"
+msgstr ""
+
+#: shadow.3.xml:94(emphasis) shadow.3.xml:105(emphasis)
+msgid "*fp"
+msgstr ""
+
+#: shadow.3.xml:98(emphasis)
+msgid "struct spwd *sgetspent(char"
+msgstr ""
+
+#: shadow.3.xml:99(emphasis)
+msgid "*cp"
+msgstr ""
+
+#: shadow.3.xml:103(emphasis)
+msgid "int putspent(struct spwd"
+msgstr ""
+
+#: shadow.3.xml:104(emphasis)
+msgid "*p,"
+msgstr ""
+
+#: shadow.3.xml:104(emphasis)
+msgid "FILE"
+msgstr ""
+
+#: shadow.3.xml:109(emphasis)
+msgid "int lckpwdf();"
+msgstr ""
+
+#: shadow.3.xml:113(emphasis)
+msgid "int ulckpwdf();"
+msgstr ""
+
+#: shadow.3.xml:119(para)
+msgid "<emphasis remap=\"I\">shadow</emphasis> manipulates the contents of the shadow password file, <filename>/etc/shadow</filename>. The structure in the <emphasis remap=\"I\">#include</emphasis> file is:"
+msgstr ""
+
+#: shadow.3.xml:124(programlisting)
+#, no-wrap
+msgid "struct spwd {\n char\t\t*sp_namp; /* user login name */\n char\t\t*sp_pwdp; /* encrypted password */\n long int\t\tsp_lstchg; /* last password change */\n long int\t\tsp_min; /* days until change allowed. */\n long int\t\tsp_max; /* days before change required */\n long int\t\tsp_warn; /* days warning for expiration */\n long int\t\tsp_inact; /* days before account inactive */\n long int\t\tsp_expire; /* date when account expires */\n unsigned long int\tsp_flag; /* reserved for future use */\n}\n "
+msgstr ""
+
+#: shadow.3.xml:136(para)
+msgid "The meanings of each field are:"
+msgstr ""
+
+#: shadow.3.xml:139(para)
+msgid "sp_namp - pointer to null-terminated user name"
+msgstr ""
+
+#: shadow.3.xml:142(para)
+msgid "sp_pwdp - pointer to null-terminated password"
+msgstr ""
+
+#: shadow.3.xml:145(para)
+msgid "sp_lstchg - days since Jan 1, 1970 password was last changed"
+msgstr ""
+
+#: shadow.3.xml:148(para)
+msgid "sp_min - days before which password may not be changed"
+msgstr ""
+
+#: shadow.3.xml:151(para)
+msgid "sp_max - days after which password must be changed"
+msgstr ""
+
+#: shadow.3.xml:154(para)
+msgid "sp_warn - days before password is to expire that user is warned of pending password expiration"
+msgstr ""
+
+#: shadow.3.xml:159(para)
+msgid "sp_inact - days after password expires that account is considered inactive and disabled"
+msgstr ""
+
+#: shadow.3.xml:164(para)
+msgid "sp_expire - days since Jan 1, 1970 when account will be disabled"
+msgstr ""
+
+#: shadow.3.xml:167(para)
+msgid "sp_flag - reserved for future use"
+msgstr ""
+
+#: shadow.3.xml:175(para)
+msgid "<emphasis>getspent</emphasis>, <emphasis>getspname</emphasis>, <emphasis>fgetspent</emphasis>, and <emphasis>sgetspent</emphasis> each return a pointer to a <emphasis>struct spwd</emphasis>. <emphasis>getspent</emphasis> returns the next entry from the file, and <emphasis>fgetspent</emphasis> returns the next entry from the given stream, which is assumed to be a file of the proper format. <emphasis>sgetspent</emphasis> returns a pointer to a <emphasis>struct spwd</emphasis> using the provided string as input. <emphasis>getspnam</emphasis> searches from the current position in the file for an entry matching <emphasis>name</emphasis>."
+msgstr ""
+
+#: shadow.3.xml:188(para)
+msgid "<emphasis>setspent</emphasis> and <emphasis>endspent</emphasis> may be used to begin and end, respectively, access to the shadow password file."
+msgstr ""
+
+#: shadow.3.xml:194(para)
+msgid "The <emphasis>lckpwdf</emphasis> and <emphasis>ulckpwdf</emphasis> routines should be used to insure exclusive access to the <filename>/etc/shadow</filename> file. <emphasis>lckpwdf</emphasis> attempts to acquire a lock using <emphasis>pw_lock</emphasis> for up to 15 seconds. It continues by attempting to acquire a second lock using <emphasis>spw_lock</emphasis> for the remainder of the initial 15 seconds. Should either attempt fail after a total of 15 seconds, <emphasis>lckpwdf</emphasis> returns -1. When both locks are acquired 0 is returned."
+msgstr ""
+
+#: shadow.3.xml:209(para)
+msgid "Routines return NULL if no more entries are available or if an error occurs during processing. Routines which have <emphasis>int</emphasis> as the return value return 0 for success and -1 for failure."
+msgstr ""
+
+#: shadow.3.xml:219(para)
+msgid "These routines may only be used by the superuser as access to the shadow password file is restricted."
+msgstr ""
+
+#: shadow.3.xml:239(para)
+msgid "<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: pwconv.8.xml:63(refentrytitle) pwconv.8.xml:70(refname) pwconv.8.xml:79(command) login.defs.5.xml:439(term)
+msgid "pwconv"
+msgstr ""
+
+#: pwconv.8.xml:71(refname) pwconv.8.xml:85(command) login.defs.5.xml:448(term)
+msgid "pwunconv"
+msgstr ""
+
+#: pwconv.8.xml:72(refname) pwconv.8.xml:91(command) login.defs.5.xml:344(term)
+msgid "grpconv"
+msgstr ""
+
+#: pwconv.8.xml:73(refname) pwconv.8.xml:97(command) login.defs.5.xml:350(term)
+msgid "grpunconv"
+msgstr ""
+
+#: pwconv.8.xml:74(refpurpose)
+msgid "convert to and from shadow passwords and groups"
+msgstr ""
+
+#: pwconv.8.xml:106(para)
+msgid "The <command>pwconv</command> command creates <emphasis remap=\"I\">shadow</emphasis> from <emphasis remap=\"I\">passwd</emphasis> and an optionally existing <emphasis remap=\"I\">shadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:111(para)
+msgid "<command>pwconv</command> does not work with <option>USE_TCB</option> enabled. To convert to tcb passwords, you should first use <command>pwconv</command> to convert to shadowed passwords by disabling <option>USE_TCB</option> in <filename>login.defs</filename> and then convert to tcb password using <command>tcb_convert</command> (and re-enable <option>USE_TCB</option> in <filename>login.defs</filename>.)"
+msgstr ""
+
+#: pwconv.8.xml:121(para)
+msgid "The <command>pwunconv</command> command creates <emphasis remap=\"I\">passwd</emphasis> from <emphasis remap=\"I\">passwd</emphasis> and <emphasis remap=\"I\">shadow</emphasis> and then removes <emphasis remap=\"I\">shadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:127(para)
+msgid "<command>pwunconv</command> does not work with <option>USE_TCB</option> enabled. You should first switch back from tcb to shadowed passwords using <command>tcb_unconvert</command>, and then disable <option>USE_TCB</option> in <filename>login.defs</filename> before using <command>pwunconv</command>."
+msgstr ""
+
+#: pwconv.8.xml:136(para)
+msgid "The <command>grpconv</command> command creates <emphasis remap=\"I\">gshadow</emphasis> from <emphasis remap=\"I\">group</emphasis> and an optionally existing <emphasis remap=\"I\">gshadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:142(para)
+msgid "The <command>grpunconv</command> command creates <emphasis remap=\"I\">group</emphasis> from <emphasis remap=\"I\">group</emphasis> and <emphasis remap=\"I\">gshadow</emphasis> and then removes <emphasis remap=\"I\">gshadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:149(para)
+msgid "These four programs all operate on the normal and shadow password and group files: <filename>/etc/passwd</filename>, <filename>/etc/group</filename>, <filename>/etc/shadow</filename>, and <filename>/etc/gshadow</filename>."
+msgstr ""
+
+#: pwconv.8.xml:156(para)
+msgid "Each program acquires the necessary locks before conversion. <command>pwconv</command> and <command>grpconv</command> are similar. First, entries in the shadowed file which don't exist in the main file are removed. Then, shadowed entries which don't have `x' as the password in the main file are updated. Any missing shadowed entries are added. Finally, passwords in the main file are replaced with `x'. These programs can be used for initial conversion as well to update the shadowed file if the main file is edited by hand."
+msgstr ""
+
+#: pwconv.8.xml:167(para)
+msgid "<command>pwconv</command> will use the values of <emphasis remap=\"I\">PASS_MIN_DAYS</emphasis>, <emphasis remap=\"I\">PASS_MAX_DAYS</emphasis>, and <emphasis remap=\"I\">PASS_WARN_AGE</emphasis> from <filename>/etc/login.defs</filename> when adding new entries to <filename>/etc/shadow</filename>."
+msgstr ""
+
+#: pwconv.8.xml:176(para)
+msgid "Likewise <command>pwunconv</command> and <command>grpunconv</command> are similar. Passwords in the main file are updated from the shadowed file. Entries which exist in the main file but not in the shadowed file are left alone. Finally, the shadowed file is removed. Some password aging information is lost by <command>pwunconv</command>. It will convert what it can."
+msgstr ""
+
+#: pwconv.8.xml:188(para)
+msgid "The options which apply to the <command>pwconv</command>, <command>pwunconv</command>, <command>grpconv</command>, and <command>grpunconv</command> commands are:"
+msgstr ""
+
+#: pwconv.8.xml:217(para)
+msgid "Errors in the password or group files (such as invalid or duplicate entries) may cause these programs to loop forever or fail in other strange ways. Please run <command>pwck</command> and <command>grpck</command> to correct any such errors before converting to or from shadow passwords or groups."
+msgstr ""
+
+#: pwconv.8.xml:228(para)
+msgid "The following configuration variable in <filename>/etc/login.defs</filename> changes the behavior of <command>grpconv</command> and <command>grpunconv</command>:"
+msgstr ""
+
+#: pwconv.8.xml:236(para)
+msgid "The following configuration variables in <filename>/etc/login.defs</filename> change the behavior of <command>pwconv</command>:"
+msgstr ""
+
+#: pwconv.8.xml:263(para)
+msgid "<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></citerefentry><phrase condition=\"tcb\">, <citerefentry><refentrytitle>tcb_convert</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>tcb_unconvert</refentrytitle><manvolnum>8</manvolnum></citerefentry></phrase>."
+msgstr ""
+
+#: pwck.8.xml:47(contrib) lastlog.8.xml:43(contrib) grpck.8.xml:42(contrib)
+msgid "Creation, 1992"
+msgstr ""
+
+#: pwck.8.xml:63(refentrytitle) pwck.8.xml:70(refname) pwck.8.xml:76(command) login.defs.5.xml:430(term)
+msgid "pwck"
+msgstr ""
+
+#: pwck.8.xml:71(refpurpose)
+msgid "verify integrity of password files"
+msgstr ""
+
+#: pwck.8.xml:80(replaceable) passwd.5.xml:57(refentrytitle) passwd.5.xml:64(refname) passwd.1.xml:64(refentrytitle) passwd.1.xml:71(refname) passwd.1.xml:77(command) login.defs.5.xml:419(term)
+msgid "passwd"
+msgstr ""
+
+#: pwck.8.xml:93(para)
+msgid "The <command>pwck</command> command verifies the integrity of the users and authentication information. It checks that all entries in <filename>/etc/passwd</filename> and <filename>/etc/shadow</filename><phrase condition=\"tcb\">(or the files in <filename>/etc/tcb</filename>, when <option>USE_TCB</option> is enabled)</phrase> have the proper format and contain valid data. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors."
+msgstr ""
+
+#: pwck.8.xml:105(para) grpck.8.xml:94(para)
+msgid "Checks are made to verify that each entry has:"
+msgstr ""
+
+#: pwck.8.xml:108(para) grpck.8.xml:98(para)
+msgid "the correct number of fields"
+msgstr ""
+
+#: pwck.8.xml:111(para)
+msgid "a unique and valid user name"
+msgstr ""
+
+#: pwck.8.xml:114(para)
+msgid "a valid user and group identifier"
+msgstr ""
+
+#: pwck.8.xml:117(para)
+msgid "a valid primary group"
+msgstr ""
+
+#: pwck.8.xml:120(para)
+msgid "a valid home directory"
+msgstr ""
+
+#: pwck.8.xml:123(para)
+msgid "a valid login shell"
+msgstr ""
+
+#: pwck.8.xml:127(para)
+msgid "<filename>shadow</filename> checks are enabled when a second file parameter is specified or when <filename>/etc/shadow</filename> exists on the system."
+msgstr ""
+
+#: pwck.8.xml:132(para)
+msgid "These checks are the following:"
+msgstr ""
+
+#: pwck.8.xml:137(para)
+msgid "every passwd entry has a matching shadow entry, and every shadow entry has a matching passwd entry"
+msgstr ""
+
+#: pwck.8.xml:143(para)
+msgid "passwords are specified in the shadowed file"
+msgstr ""
+
+#: pwck.8.xml:146(para)
+msgid "shadow entries have the correct number of fields"
+msgstr ""
+
+#: pwck.8.xml:149(para)
+msgid "shadow entries are unique in shadow"
+msgstr ""
+
+#: pwck.8.xml:152(para)
+msgid "the last password changes are not in the future"
+msgstr ""
+
+#: pwck.8.xml:156(para)
+msgid "The checks for correct number of fields and unique user name are fatal. If the entry has the wrong number of fields, the user will be prompted to delete the entire line. If the user does not answer affirmatively, all further checks are bypassed. An entry with a duplicated user name is prompted for deletion, but the remaining checks will still be made. All other errors are warning and the user is encouraged to run the <command>usermod</command> command to correct the error."
+msgstr ""
+
+#: pwck.8.xml:167(para)
+msgid "The commands which operate on the <filename>/etc/passwd</filename> file are not able to alter corrupted or duplicated entries. <command>pwck</command> should be used in those circumstances to remove the offending entry."
+msgstr ""
+
+#: pwck.8.xml:177(para) grpck.8.xml:148(para)
+msgid "The <option>-r</option> and <option>-s</option> options cannot be combined."
+msgstr ""
+
+#: pwck.8.xml:181(para)
+msgid "The options which apply to the <command>pwck</command> command are:"
+msgstr ""
+
+#: pwck.8.xml:204(para)
+msgid "Report errors only. The warnings which do not require any action from the user won't be displayed."
+msgstr ""
+
+#: pwck.8.xml:211(term) grpck.8.xml:163(term)
+msgid "<option>-r</option>, <option>--read-only</option>"
+msgstr ""
+
+#: pwck.8.xml:213(para)
+msgid "Execute the <command>pwck</command> command in read-only mode."
+msgstr ""
+
+#: pwck.8.xml:231(term) grpck.8.xml:185(term)
+msgid "<option>-s</option>, <option>--sort</option>"
+msgstr ""
+
+#: pwck.8.xml:233(para)
+msgid "Sort entries in <filename>/etc/passwd</filename> and <filename>/etc/shadow</filename> by UID."
+msgstr ""
+
+#: pwck.8.xml:237(para)
+msgid "This option has no effect when <option>USE_TCB</option> is enabled."
+msgstr ""
+
+#: pwck.8.xml:244(para)
+msgid "By default, <command>pwck</command> operates on the files <filename>/etc/passwd</filename> and <filename>/etc/shadow</filename><phrase condition=\"tcb\"> (or the files in <filename>/etc/tcb</filename>)</phrase>. The user may select alternate files with the <replaceable>passwd</replaceable> and <replaceable>shadow</replaceable> parameters."
+msgstr ""
+
+#: pwck.8.xml:253(para)
+msgid "Note that when <option>USE_TCB</option> is enabled, you cannot specify an alternative <replaceable>shadow</replaceable> file. In future releases, this parameter could be replaced by an alternate TCB directory."
+msgstr ""
+
+#: pwck.8.xml:322(para)
+msgid "one or more bad password entries"
+msgstr ""
+
+#: pwck.8.xml:328(para)
+msgid "can't open password files"
+msgstr ""
+
+#: pwck.8.xml:334(para)
+msgid "can't lock password files"
+msgstr ""
+
+#: pwck.8.xml:340(para)
+msgid "can't update password files"
+msgstr ""
+
+#: pwck.8.xml:346(para)
+msgid "can't sort password files"
+msgstr ""
+
+#: pwck.8.xml:304(para)
+msgid "The <command>pwck</command> command exits with the following values: <placeholder-1/>"
+msgstr ""
+
+#: pwck.8.xml:355(para)
+msgid "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: porttime.5.xml:57(refentrytitle) porttime.5.xml:64(refname)
+msgid "porttime"
+msgstr ""
+
+#: porttime.5.xml:65(refpurpose)
+msgid "port access time file"
+msgstr ""
+
+#: porttime.5.xml:70(para)
+msgid "<emphasis remap=\"I\">porttime</emphasis> contains a list of tty devices, user names, and permitted login times."
+msgstr ""
+
+#: porttime.5.xml:75(para)
+msgid "Each entry consists of three colon separated fields. The first field is a comma separated list of tty devices, or an asterisk to indicate that all tty devices are matched by this entry. The second field is a comma separated list of user names, or an asterisk to indicated that all user names are matched by this entry. The third field is a comma separated list of permitted access times."
+msgstr ""
+
+#: porttime.5.xml:84(para)
+msgid "Each access time entry consists of zero or more days of the week, abbreviated <emphasis>Su</emphasis>, <emphasis>Mo</emphasis>, <emphasis>Tu</emphasis>, <emphasis>We</emphasis>, <emphasis>Th</emphasis>, <emphasis>Fr</emphasis>, and <emphasis>Sa</emphasis>, followed by a pair of times separated by a hyphen. The abbreviation <emphasis>Wk</emphasis> may be used to represent Monday thru Friday, and <emphasis>Al</emphasis> may be used to indicate every day. If no days are given, <emphasis>Al</emphasis> is assumed."
+msgstr ""
+
+#: porttime.5.xml:98(title)
+msgid "EXAMPLES"
+msgstr ""
+
+#: porttime.5.xml:99(para)
+msgid "The following entry allows access to user <emphasis remap=\"B\">jfh</emphasis> on every port during weekdays from 9am to 5pm."
+msgstr ""
+
+#: porttime.5.xml:105(para)
+msgid "*:jfh:Wk0900-1700"
+msgstr ""
+
+#: porttime.5.xml:107(para)
+msgid "The following entries allow access only to the users <emphasis>root</emphasis> and <emphasis>oper</emphasis> on <filename>/dev/console</filename> at any time. This illustrates how the <filename>/etc/porttime</filename> file is an ordered list of access times. Any other user would match the second entry which does not permit access at any time."
+msgstr ""
+
+#: porttime.5.xml:116(programlisting)
+#, no-wrap
+msgid "\n console:root,oper:Al0000-2400\n console:*:\n "
+msgstr ""
+
+#: porttime.5.xml:121(para)
+msgid "The following entry allows access for the user <emphasis>games</emphasis> on any port during non-working hours."
+msgstr ""
+
+#: porttime.5.xml:126(para)
+msgid "*:games:Wk1700-0900,SaSu0000-2400"
+msgstr ""
+
+#: porttime.5.xml:133(filename) logoutd.8.xml:92(filename)
+msgid "/etc/porttime"
+msgstr ""
+
+#: porttime.5.xml:135(para) logoutd.8.xml:94(para)
+msgid "File containing port access."
+msgstr ""
+
+#: porttime.5.xml:143(para) login.access.5.xml:134(para)
+msgid "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+msgstr ""
+
+#: passwd.5.xml:65(refpurpose)
+msgid "the password file"
+msgstr ""
+
+#: passwd.5.xml:70(para)
+msgid "<filename>/etc/passwd</filename> contains one line for each user account, with seven fields delimited by colons (<quote>:</quote>). These fields are:"
+msgstr ""
+
+#: passwd.5.xml:81(para)
+msgid "optional encrypted password"
+msgstr ""
+
+#: passwd.5.xml:84(para)
+msgid "numerical user ID"
+msgstr ""
+
+#: passwd.5.xml:87(para)
+msgid "numerical group ID"
+msgstr ""
+
+#: passwd.5.xml:90(para)
+msgid "user name or comment field"
+msgstr ""
+
+#: passwd.5.xml:93(para)
+msgid "user home directory"
+msgstr ""
+
+#: passwd.5.xml:96(para)
+msgid "optional user command interpreter"
+msgstr ""
+
+#: passwd.5.xml:100(para)
+msgid "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."
+msgstr ""
+
+#: passwd.5.xml:109(para)
+msgid "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."
+msgstr ""
+
+#: passwd.5.xml:118(para)
+msgid "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."
+msgstr ""
+
+#: passwd.5.xml:138(para)
+msgid "The comment field is used by various system utilities, such as <citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+msgstr ""
+
+#: passwd.5.xml:144(para)
+msgid "The home directory field provides the name of the initial working directory. The <command>login</command> program uses this information to set the value of the <envar>$HOME</envar> environmental variable."
+msgstr ""
+
+#: passwd.5.xml:150(para)
+msgid "The command interpreter field provides the name of the user's command language interpreter, or the name of the initial program to execute. The <command>login</command> program uses this information to set the value of the <envar>$SHELL</envar> environmental variable. If this field is empty, it defaults to the value <filename>/bin/sh</filename>."
+msgstr ""
+
+#: passwd.5.xml:171(para)
+msgid "optional encrypted password file"
+msgstr ""
+
+#: passwd.5.xml:175(filename)
+msgid "/etc/passwd-"
+msgstr ""
+
+#: passwd.5.xml:177(para)
+msgid "Backup file for /etc/passwd."
+msgstr ""
+
+#: passwd.5.xml:189(para)
+msgid "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>getent</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>getpwnam</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: passwd.1.xml:72(refpurpose)
+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 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)
+msgid "Password Changes"
+msgstr ""
+
+#: passwd.1.xml:99(para)
+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)
+msgid "After the password has been entered, password aging information is checked to see if the user is permitted to change the password at this time. If not, <command>passwd</command> refuses to change the password and exits."
+msgstr ""
+
+#: passwd.1.xml:114(para)
+msgid "The user is then prompted twice for a replacement password. The second entry is compared against the first and both are required to match in order for the password to be changed."
+msgstr ""
+
+#: passwd.1.xml:120(para)
+msgid "Then, the password is tested for complexity. As a general guideline, passwords should consist of 6 to 8 characters including one or more characters from each of the following sets:"
+msgstr ""
+
+#: passwd.1.xml:128(para)
+msgid "lower case alphabetics"
+msgstr ""
+
+#: passwd.1.xml:131(para)
+msgid "digits 0 thru 9"
+msgstr ""
+
+#: passwd.1.xml:134(para)
+msgid "punctuation marks"
+msgstr ""
+
+#: passwd.1.xml:138(para)
+msgid "Care must be taken not to include the system default erase or kill characters. <command>passwd</command> will reject any password which is not suitably complex."
+msgstr ""
+
+#: passwd.1.xml:147(title)
+msgid "Hints for user passwords"
+msgstr ""
+
+#: passwd.1.xml:148(para)
+msgid "The security of a password depends upon the strength of the encryption algorithm and the size of the key space. The legacy <emphasis>UNIX</emphasis> System encryption method is based on the NBS DES algorithm. More recent methods are now recommended (see <option>ENCRYPT_METHOD</option>). The size of the key space depends upon the randomness of the password which is selected."
+msgstr ""
+
+#: passwd.1.xml:157(para)
+msgid "Compromises in password security normally result from careless password selection or handling. For this reason, you should not select a password which appears in a dictionary or which must be written down. The password should also not be a proper name, your license number, birth date, or street address. Any of these may be used as guesses to violate system security."
+msgstr ""
+
+#: passwd.1.xml:166(para)
+msgid "You can find advice on how to choose a strong password on http://en.wikipedia.org/wiki/Password_strength"
+msgstr ""
+
+#: passwd.1.xml:175(para)
+msgid "The options which apply to the <command>passwd</command> command are:"
+msgstr ""
+
+#: passwd.1.xml:180(term) faillog.8.xml:96(term)
+msgid "<option>-a</option>, <option>--all</option>"
+msgstr ""
+
+#: passwd.1.xml:184(para)
+msgid "This option can be used only with <option>-S</option> and causes show status for all users."
+msgstr ""
+
+#: passwd.1.xml:191(term)
+msgid "<option>-d</option>, <option>--delete</option>"
+msgstr ""
+
+#: passwd.1.xml:195(para)
+msgid "Delete a user's password (make it empty). This is a quick way to disable a password for an account. It will set the named account passwordless."
+msgstr ""
+
+#: passwd.1.xml:203(term)
+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 their password at the user's next login."
+msgstr ""
+
+#: passwd.1.xml:220(term)
+msgid "<option>-i</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</replaceable>"
+msgstr ""
+
+#: passwd.1.xml:224(para)
+msgid "This option is used to disable an account after the password has been expired for a number of days. After a user account has had an expired password for <replaceable>INACTIVE</replaceable> days, the user may no longer sign on to the account."
+msgstr ""
+
+#: passwd.1.xml:233(term)
+msgid "<option>-k</option>, <option>--keep-tokens</option>"
+msgstr ""
+
+#: passwd.1.xml:237(para)
+msgid "Indicate password change should be performed only for expired authentication tokens (passwords). The user wishes to keep their non-expired tokens as before."
+msgstr ""
+
+#: passwd.1.xml:245(term)
+msgid "<option>-l</option>, <option>--lock</option>"
+msgstr ""
+
+#: passwd.1.xml:249(para)
+msgid "Lock the password of the named account. This option disables a password by changing it to a value which matches no possible encrypted value (it adds a ´!´ at the beginning of the password)."
+msgstr ""
+
+#: passwd.1.xml:255(para)
+msgid "Note that this does not disable the account. The user may still be able to login using another authentication token (e.g. an SSH key). To disable the account, administrators should use <command>usermod --expiredate 1</command> (this set the account's expire date to Jan 2, 1970)."
+msgstr ""
+
+#: passwd.1.xml:262(para)
+msgid "Users with a locked password are not allowed to change their password."
+msgstr ""
+
+#: passwd.1.xml:269(term)
+msgid "<option>-n</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DAYS</replaceable>"
+msgstr ""
+
+#: passwd.1.xml:273(para) chage.1.xml:174(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 their password at any time."
+msgstr ""
+
+#: passwd.1.xml:291(term)
+msgid "<option>-r</option>, <option>--repository</option>&nbsp;<replaceable>REPOSITORY</replaceable>"
+msgstr ""
+
+#: passwd.1.xml:295(para)
+msgid "change password in <replaceable>REPOSITORY</replaceable> repository"
+msgstr ""
+
+#: passwd.1.xml:313(term)
+msgid "<option>-S</option>, <option>--status</option>"
+msgstr ""
+
+#: passwd.1.xml:317(para)
+msgid "Display account status information. The status information consists of 7 fields. The first field is the user's login name. The second field indicates if the user account has a locked password (L), has no password (NP), or has a usable password (P). The third field gives the date of the last password change. The next four fields are the minimum age, maximum age, warning period, and inactivity period for the password. These ages are expressed in days."
+msgstr ""
+
+#: passwd.1.xml:331(term)
+msgid "<option>-u</option>, <option>--unlock</option>"
+msgstr ""
+
+#: passwd.1.xml:335(para)
+msgid "Unlock the password of the named account. This option re-enables a password by changing the password back to its previous value (to the value before using the <option>-l</option> option)."
+msgstr ""
+
+#: passwd.1.xml:344(term)
+msgid "<option>-w</option>, <option>--warndays</option>&nbsp;<replaceable>WARN_DAYS</replaceable>"
+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 their password is about to expire."
+msgstr ""
+
+#: passwd.1.xml:357(term)
+msgid "<option>-x</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DAYS</replaceable>"
+msgstr ""
+
+#: passwd.1.xml:361(para)
+msgid "Set the maximum number of days a password remains valid. After <replaceable>MAX_DAYS</replaceable>, the password is required to be changed."
+msgstr ""
+
+#: passwd.1.xml:366(para) chage.1.xml:195(para)
+msgid "Passing the number <emphasis remap=\"I\">-1</emphasis> as <replaceable>MAX_DAYS</replaceable> will remove checking a password's validity."
+msgstr ""
+
+#: passwd.1.xml:378(para)
+msgid "Password complexity checking may vary from site to site. The user is urged to select a password as complex as he or she feels comfortable with."
+msgstr ""
+
+#: passwd.1.xml:383(para)
+msgid "Users may not be able to change their password on a system if NIS is enabled and they are not logged into the NIS server."
+msgstr ""
+
+#: passwd.1.xml:388(para)
+msgid "<command>passwd</command> uses PAM to authenticate users and to change their passwords."
+msgstr ""
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term) gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>ENCRYPT_METHOD</option> (string)"
+msgstr ""
+
+#: passwd.1.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para) gpasswd.1.xml:32(para) chpasswd.8.xml:32(para) chgpasswd.8.xml:32(para)
+msgid "This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)."
+msgstr ""
+
+#: passwd.1.xml:36(para) newusers.8.xml:36(para) login.defs.5.xml:36(para) gpasswd.1.xml:36(para) chpasswd.8.xml:36(para) chgpasswd.8.xml:36(para)
+msgid "It can take one of these values: <replaceable>DES</replaceable> (default), <replaceable>MD5</replaceable><phrase condition=\"sha_crypt\">, <replaceable>SHA256</replaceable>, <replaceable>SHA512</replaceable></phrase>."
+msgstr ""
+
+#: passwd.1.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para) gpasswd.1.xml:43(para) chpasswd.8.xml:43(para) chgpasswd.8.xml:43(para)
+msgid "Note: this parameter overrides the <option>MD5_CRYPT_ENAB</option> variable."
+msgstr ""
+
+#: passwd.1.xml:47(para) passwd.1.xml:53(para) passwd.1.xml:62(para) newusers.8.xml:47(para) newusers.8.xml:53(para) newusers.8.xml:62(para) login.defs.5.xml:47(para) login.defs.5.xml:53(para) login.defs.5.xml:62(para) gpasswd.1.xml:47(para) gpasswd.1.xml:53(para) gpasswd.1.xml:62(para) chpasswd.8.xml:47(para) chpasswd.8.xml:53(para) chpasswd.8.xml:62(para) chgpasswd.8.xml:47(para) chgpasswd.8.xml:53(para) chgpasswd.8.xml:62(para)
+msgid "Note: This only affect the generation of group passwords. The generation of user passwords is done by PAM and subject to the PAM configuration. It is recommended to set this variable consistently with the PAM configuration."
+msgstr ""
+
+#: passwd.1.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term) gpasswd.1.xml:32(term) chpasswd.8.xml:32(term) chgpasswd.8.xml:32(term)
+msgid "<option>MD5_CRYPT_ENAB</option> (boolean)"
+msgstr ""
+
+#: passwd.1.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para) gpasswd.1.xml:34(para) chpasswd.8.xml:34(para) chgpasswd.8.xml:34(para)
+msgid "Indicate if passwords must be encrypted using the MD5-based algorithm. If set to <replaceable>yes</replaceable>, new passwords will be encrypted using the MD5-based algorithm compatible with the one used by recent releases of FreeBSD. It supports passwords of unlimited length and longer salt strings. Set to <replaceable>no</replaceable> if you need to copy encrypted passwords to other systems which don't understand the new algorithm. Default is <replaceable>no</replaceable>."
+msgstr ""
+
+#: passwd.1.xml:44(para) newusers.8.xml:44(para) login.defs.5.xml:44(para) gpasswd.1.xml:44(para) chpasswd.8.xml:44(para) chgpasswd.8.xml:44(para)
+msgid "This variable is superseded by the <option>ENCRYPT_METHOD</option> variable or by any command line option used to configure the encryption algorithm."
+msgstr ""
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para) gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid "This variable is deprecated. You should use <option>ENCRYPT_METHOD</option>."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>OBSCURE_CHECKS_ENAB</option> (boolean)"
+msgstr ""
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable additional checks upon password changes."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_ALWAYS_WARN</option> (boolean)"
+msgstr ""
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Warn about weak passwords (but still allow them) if you are root."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_CHANGE_TRIES</option> (number)"
+msgstr ""
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Maximum number of attempts to change password if rejected (too easy)."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_MAX_LEN</option> (number)"
+msgstr ""
+
+#: passwd.1.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>PASS_MIN_LEN</option> (number)"
+msgstr ""
+
+#: passwd.1.xml:35(para) login.defs.5.xml:35(para)
+msgid "Number of significant characters in the password for crypt(). <option>PASS_MAX_LEN</option> is 8 by default. Don't change unless your crypt() is better. This is ignored if <option>MD5_CRYPT_ENAB</option> set to <replaceable>yes</replaceable>."
+msgstr ""
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term) gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>SHA_CRYPT_MIN_ROUNDS</option> (number)"
+msgstr ""
+
+#: passwd.1.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term) gpasswd.1.xml:31(term) chpasswd.8.xml:31(term) chgpasswd.8.xml:31(term)
+msgid "<option>SHA_CRYPT_MAX_ROUNDS</option> (number)"
+msgstr ""
+
+#: passwd.1.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para) gpasswd.1.xml:33(para) chpasswd.8.xml:33(para) chgpasswd.8.xml:33(para)
+msgid "When <option>ENCRYPT_METHOD</option> is set to <replaceable>SHA256</replaceable> or <replaceable>SHA512</replaceable>, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)."
+msgstr ""
+
+#: passwd.1.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para) gpasswd.1.xml:40(para) chpasswd.8.xml:40(para) chgpasswd.8.xml:40(para)
+msgid "With a lot of rounds, it is more difficult to brute forcing the password. But note also that more CPU resources will be needed to authenticate users."
+msgstr ""
+
+#: passwd.1.xml:45(para) newusers.8.xml:45(para) login.defs.5.xml:45(para) gpasswd.1.xml:45(para) chpasswd.8.xml:45(para) chgpasswd.8.xml:45(para)
+msgid "If not specified, the libc will choose the default number of rounds (5000)."
+msgstr ""
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para) gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid "The values must be inside the 1000-999,999,999 range."
+msgstr ""
+
+#: passwd.1.xml:52(para) newusers.8.xml:52(para) login.defs.5.xml:52(para) gpasswd.1.xml:52(para) chpasswd.8.xml:52(para) chgpasswd.8.xml:52(para)
+msgid "If only one of the <option>SHA_CRYPT_MIN_ROUNDS</option> or <option>SHA_CRYPT_MAX_ROUNDS</option> values is set, then this value will be used."
+msgstr ""
+
+#: passwd.1.xml:57(para) newusers.8.xml:57(para) login.defs.5.xml:57(para) gpasswd.1.xml:57(para) chpasswd.8.xml:57(para) chgpasswd.8.xml:57(para)
+msgid "If <option>SHA_CRYPT_MIN_ROUNDS</option> &gt; <option>SHA_CRYPT_MAX_ROUNDS</option>, the highest value will be used."
+msgstr ""
+
+#: passwd.1.xml:434(filename)
+msgid "/etc/pam.d/passwd"
+msgstr ""
+
+#: passwd.1.xml:436(para)
+msgid "PAM configuration for <command>passwd</command>."
+msgstr ""
+
+#: passwd.1.xml:456(para) chage.1.xml:297(para)
+msgid "permission denied"
+msgstr ""
+
+#: passwd.1.xml:462(para)
+msgid "invalid combination of options"
+msgstr ""
+
+#: passwd.1.xml:468(para)
+msgid "unexpected failure, nothing done"
+msgstr ""
+
+#: passwd.1.xml:474(para)
+msgid "unexpected failure, <filename>passwd</filename> file missing"
+msgstr ""
+
+#: passwd.1.xml:480(para)
+msgid "<filename>passwd</filename> file busy, try again"
+msgstr ""
+
+#: passwd.1.xml:444(para)
+msgid "The <command>passwd</command> command exits with the following values: <placeholder-1/>"
+msgstr ""
+
+#: passwd.1.xml:495(para)
+msgid "<citerefentry><refentrytitle>chpasswd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <phrase condition=\"no_pam\"><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: nologin.8.xml:46(refentrytitle) nologin.8.xml:53(refname) nologin.8.xml:59(command)
+msgid "nologin"
+msgstr ""
+
+#: nologin.8.xml:54(refpurpose)
+msgid "politely refuse a login"
+msgstr ""
+
+#: nologin.8.xml:65(para)
+msgid "The <command>nologin</command> command displays a message that an account is not available and exits non-zero. It is intended as a replacement shell field for accounts that have been disabled."
+msgstr ""
+
+#: nologin.8.xml:70(para)
+msgid "To disable all logins, investigate <citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: nologin.8.xml:75(para)
+msgid "If <command>SSH_ORIGINAL_COMMAND</command> is populated it will be logged."
+msgstr ""
+
+#: nologin.8.xml:82(para)
+msgid "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: nologin.8.xml:93(title)
+msgid "HISTORY"
+msgstr ""
+
+#: nologin.8.xml:94(para)
+msgid "The <command>nologin</command> command appeared in BSD 4.4."
+msgstr ""
+
+#: newusers.8.xml:73(refentrytitle) newusers.8.xml:80(refname) newusers.8.xml:86(command) login.defs.5.xml:400(term)
+msgid "newusers"
+msgstr ""
+
+#: newusers.8.xml:81(refpurpose)
+msgid "update and create new users in batch"
+msgstr ""
+
+#: newusers.8.xml:91(replaceable)
+msgid "file"
+msgstr ""
+
+#: newusers.8.xml:98(para)
+msgid "The <command>newusers</command> command reads a <replaceable>file</replaceable> (or the standard input by default) and uses this information to update a set of existing users or to create new users. Each line is in the same format as the standard password file (see <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></citerefentry>) with the exceptions explained below:"
+msgstr ""
+
+#: newusers.8.xml:106(para)
+msgid "pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell"
+msgstr ""
+
+#: newusers.8.xml:111(emphasis)
+msgid "pw_name"
+msgstr ""
+
+#: newusers.8.xml:114(para)
+msgid "This is the name of the user."
+msgstr ""
+
+#: newusers.8.xml:117(para)
+msgid "It can be the name of a new user or the name of an existing user (or a user created before by <command>newusers</command>). In case of an existing user, the user's information will be changed, otherwise a new user will be created."
+msgstr ""
+
+#: newusers.8.xml:128(emphasis)
+msgid "pw_passwd"
+msgstr ""
+
+#: newusers.8.xml:131(para)
+msgid "This field will be encrypted and used as the new value of the encrypted password."
+msgstr ""
+
+#: newusers.8.xml:139(emphasis)
+msgid "pw_uid"
+msgstr ""
+
+#: newusers.8.xml:142(para)
+msgid "This field is used to define the UID of the user."
+msgstr ""
+
+#: newusers.8.xml:145(para)
+msgid "If the field is empty, a new (unused) UID will be defined automatically by <command>newusers</command>."
+msgstr ""
+
+#: newusers.8.xml:149(para)
+msgid "If this field contains a number, this number will be used as the UID."
+msgstr ""
+
+#: newusers.8.xml:153(para)
+msgid "If this field contains the name of an existing user (or the name of a user created before by <command>newusers</command>), the UID of the specified user will be used."
+msgstr ""
+
+#: newusers.8.xml:159(para)
+msgid "If the UID of an existing user is changed, the files ownership of the user's file should be fixed manually."
+msgstr ""
+
+#: newusers.8.xml:167(emphasis)
+msgid "pw_gid"
+msgstr ""
+
+#: newusers.8.xml:170(para)
+msgid "This field is used to define the primary group ID for the user."
+msgstr ""
+
+#: newusers.8.xml:173(para)
+msgid "If this field contains the name of an existing group (or a group created before by <command>newusers</command>), the GID of this group will be used as the primary group ID for the user."
+msgstr ""
+
+#: newusers.8.xml:179(para)
+msgid "If this field is a number, this number will be used as the primary group ID of the user. If no groups exist with this GID, a new group will be created with this GID, and the name of the user."
+msgstr ""
+
+#: newusers.8.xml:185(para)
+msgid "If this field is empty, a new group will be created with the name of the user and a GID will be automatically defined by <command>newusers</command> to be used as the primary group ID for the user and as the GID for the new group."
+msgstr ""
+
+#: newusers.8.xml:191(para)
+msgid "If this field contains the name of a group which does not exist (and was not created before by <command>newusers</command>), a new group will be created with the specified name and a GID will be automatically defined by <command>newusers</command> to be used as the primary group ID for the user and GID for the new group."
+msgstr ""
+
+#: newusers.8.xml:203(emphasis)
+msgid "pw_gecos"
+msgstr ""
+
+#: newusers.8.xml:206(para)
+msgid "This field is copied in the GECOS field of the user."
+msgstr ""
+
+#: newusers.8.xml:213(emphasis)
+msgid "pw_dir"
+msgstr ""
+
+#: newusers.8.xml:216(para)
+msgid "This field is used to define the home directory of the user."
+msgstr ""
+
+#: newusers.8.xml:219(para)
+msgid "If this field does not specify an existing directory, the specified directory is created, with ownership set to the user being created or updated and its primary group."
+msgstr ""
+
+#: newusers.8.xml:224(para)
+msgid "If the home directory of an existing user is changed, <command>newusers</command> does not move or copy the content of the old directory to the new location. This should be done manually."
+msgstr ""
+
+#: newusers.8.xml:234(emphasis)
+msgid "pw_shell"
+msgstr ""
+
+#: newusers.8.xml:237(para)
+msgid "This field defines the shell of the user. No checks are performed on this field."
+msgstr ""
+
+#: newusers.8.xml:245(para)
+msgid "<command>newusers</command> first tries to create or change all the specified users, and then write these changes to the user or group databases. If an error occurs (except in the final writes to the databases), no changes are committed to the databases."
+msgstr ""
+
+#: newusers.8.xml:251(para)
+msgid "During this first pass, users are created with a locked password (and passwords are not changed for the users which are not created). A second pass is used to update the passwords using PAM. Failures to update a password are reported, but will not stop the other password updates."
+msgstr ""
+
+#: newusers.8.xml:259(para)
+msgid "This command is intended to be used in a large system environment where many accounts are updated at a single time."
+msgstr ""
+
+#: newusers.8.xml:267(para)
+msgid "The options which apply to the <command>newusers</command> command are:"
+msgstr ""
+
+#: newusers.8.xml:284(term) chgpasswd.8.xml:112(term)
+msgid "<option>-c</option>, <option>--crypt-method</option>"
+msgstr ""
+
+#: newusers.8.xml:286(para) chpasswd.8.xml:141(para) chgpasswd.8.xml:114(para)
+msgid "Use the specified method to encrypt the passwords."
+msgstr ""
+
+#: newusers.8.xml:287(para) chpasswd.8.xml:145(para) chgpasswd.8.xml:118(para)
+msgid "The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc support these methods."
+msgstr ""
+
+#: newusers.8.xml:309(para)
+msgid "System users will be created with no aging information in <filename>/etc/shadow</filename>, and their numeric identifiers are chosen in the <option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in <filename>login.defs</filename>, instead of <option>UID_MIN</option>-<option>UID_MAX</option> (and their <option>GID</option> counterparts for the creation of groups)."
+msgstr ""
+
+#: newusers.8.xml:335(term) chgpasswd.8.xml:158(term)
+msgid "<option>-s</option>, <option>--sha-rounds</option>"
+msgstr ""
+
+#: newusers.8.xml:337(para) chpasswd.8.xml:204(para) chgpasswd.8.xml:160(para)
+msgid "Use the specified number of rounds to encrypt the passwords."
+msgstr ""
+
+#: newusers.8.xml:340(para) chpasswd.8.xml:207(para) chgpasswd.8.xml:163(para)
+msgid "The value 0 means that the system will choose the default number of rounds for the crypt method (5000)."
+msgstr ""
+
+#: newusers.8.xml:344(para) chpasswd.8.xml:211(para) chgpasswd.8.xml:167(para)
+msgid "A minimal value of 1000 and a maximal value of 999,999,999 will be enforced."
+msgstr ""
+
+#: newusers.8.xml:348(para) chpasswd.8.xml:215(para) chgpasswd.8.xml:171(para)
+msgid "You can only use this option with the SHA256 or SHA512 crypt method."
+msgstr ""
+
+#: newusers.8.xml:352(para) chgpasswd.8.xml:175(para)
+msgid "By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: newusers.8.xml:364(para)
+msgid "The input file must be protected since it contains unencrypted passwords."
+msgstr ""
+
+#: newusers.8.xml:368(para) chgpasswd.8.xml:191(para)
+msgid "You should make sure the passwords and the encryption method respect the system's password policy."
+msgstr ""
+
+#: newusers.8.xml:444(filename)
+msgid "/etc/pam.d/newusers"
+msgstr ""
+
+#: newusers.8.xml:446(para)
+msgid "PAM configuration for <command>newusers</command>."
+msgstr ""
+
+#: newusers.8.xml:466(para)
+msgid "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <phrase condition=\"subids\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</refentrytitle><manvolnum>5</manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: newgrp.1.xml:58(refentrytitle) newgrp.1.xml:65(refname) newgrp.1.xml:71(command)
+msgid "newgrp"
+msgstr ""
+
+#: newgrp.1.xml:66(refpurpose)
+msgid "log in to a new group"
+msgstr ""
+
+#: newgrp.1.xml:72(replaceable) grpck.8.xml:74(replaceable) groupadd.8.xml:78(replaceable) gpasswd.1.xml:88(replaceable)
+msgid "group"
+msgstr ""
+
+#: newgrp.1.xml:78(para)
+msgid "The <command>newgrp</command> command is used to change the current group ID during a login session. If the optional <option>-</option> flag is given, the user's environment will be reinitialized as though the user had logged in, otherwise the current environment, including current working directory, remains unchanged."
+msgstr ""
+
+#: newgrp.1.xml:86(para)
+msgid "<command>newgrp</command> changes the current real group ID to the named group, or to the default group listed in <filename>/etc/passwd</filename> if no group name is given. <command>newgrp</command> also tries to add the group to the user groupset. If not root, the user will be prompted for a password if she does not have a password (in <filename>/etc/shadow</filename> if this user has an entry in the shadowed password file, or in <filename>/etc/passwd</filename> otherwise) and the group does, or if the user is not listed as a member and the group has a password. The user will be denied access if the group password is empty and the user is not listed as a member."
+msgstr ""
+
+#: newgrp.1.xml:100(para)
+msgid "If there is an entry for this group in <filename>/etc/gshadow</filename>, then the list of members and the password of this group will be taken from this file, otherwise, the entry in <filename>/etc/group</filename> is considered."
+msgstr ""
+
+#: newgrp.1.xml:152(para)
+msgid "<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition=\"gshadow\">, <citerefentry condition=\"gshadow\"><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+msgstr ""
+
+#: logoutd.8.xml:57(refentrytitle) logoutd.8.xml:64(refname) logoutd.8.xml:70(command)
+msgid "logoutd"
+msgstr ""
+
+#: logoutd.8.xml:65(refpurpose)
+msgid "enforce login time restrictions"
+msgstr ""
+
+#: logoutd.8.xml:76(para)
+msgid "<command>logoutd</command> enforces the login time and port restrictions specified in <filename>/etc/porttime</filename>. <command>logoutd</command> should be started from <filename>/etc/rc</filename>. The <filename>/var/run/utmp</filename> file is scanned periodically and each user name is checked to see if the named user is permitted on the named port at the current time. Any login session which is violating the restrictions in <filename>/etc/porttime</filename> is terminated."
+msgstr ""
+
+#: logoutd.8.xml:98(filename) login.1.xml:341(filename)
+msgid "/var/run/utmp"
+msgstr ""
+
+#: logoutd.8.xml:100(para) login.1.xml:343(para)
+msgid "List of current login sessions."
+msgstr ""
+
+#: login.defs.5.xml:124(refentrytitle) login.defs.5.xml:131(refname)
+msgid "login.defs"
+msgstr ""
+
+#: login.defs.5.xml:132(refpurpose)
+msgid "shadow password suite configuration"
+msgstr ""
+
+#: login.defs.5.xml:137(para)
+msgid "The <filename>/etc/login.defs</filename> file defines the site-specific configuration for the shadow password suite. This file is required. Absence of this file will not prevent system operation, but will probably result in undesirable operation."
+msgstr ""
+
+#: login.defs.5.xml:144(para)
+msgid "This file is a readable text file, each line of the file describing one configuration parameter. The lines consist of a configuration name and value, separated by whitespace. Blank lines and comment lines are ignored. Comments are introduced with a \"#\" pound sign and the pound sign must be the first non-white character of the line."
+msgstr ""
+
+#: login.defs.5.xml:152(para)
+msgid "Parameter values may be of four types: strings, booleans, numbers, and long numbers. A string is comprised of any printable characters. A boolean should be either the value <replaceable>yes</replaceable> or <replaceable>no</replaceable>. An undefined boolean parameter or one with a value other than these will be given a <replaceable>no</replaceable> value. Numbers (both regular and long) may be either decimal values, octal values (precede the value with <replaceable>0</replaceable>) or hexadecimal values (precede the value with <replaceable>0x</replaceable>). The maximum value of the regular and long numeric parameters is machine-dependent."
+msgstr ""
+
+#: login.defs.5.xml:167(para)
+msgid "The following configuration items are provided:"
+msgstr ""
+
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+msgid "<option>CHFN_AUTH</option> (boolean)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+msgid "If <replaceable>yes</replaceable>, the <command>chfn</command> program will require authentication before making any changes, unless run by the superuser."
+msgstr ""
+
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+msgid "<option>CHFN_RESTRICT</option> (string)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+msgid "This parameter specifies which values in the <emphasis remap=\"I\">gecos</emphasis> field of the <filename>/etc/passwd</filename> file may be changed by regular users using the <command>chfn</command> program. It can be any combination of letters <replaceable>f</replaceable>, <replaceable>r</replaceable>, <replaceable>w</replaceable>, <replaceable>h</replaceable>, for Full name, Room number, Work phone, and Home phone, respectively. For backward compatibility, <replaceable>yes</replaceable> is equivalent to <replaceable>rwh</replaceable> and <replaceable>no</replaceable> is equivalent to <replaceable>frwh</replaceable>. If not specified, only the superuser can make any changes. The most restrictive setting is better achieved by not installing <command>chfn</command> SUID."
+msgstr ""
+
+#: login.defs.5.xml:32(term) chsh.1.xml:32(term)
+msgid "<option>CHSH_AUTH</option> (boolean)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) chsh.1.xml:34(para)
+msgid "If <replaceable>yes</replaceable>, the <command>chsh</command> program will require authentication before making any changes, unless run by the superuser."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ERASECHAR</option> (number)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Terminal ERASE character (<replaceable>010</replaceable> = backspace, <replaceable>0177</replaceable> = DEL)."
+msgstr ""
+
+#: login.defs.5.xml:38(para) login.defs.5.xml:37(para) login.1.xml:38(para) login.1.xml:37(para)
+msgid "The value can be prefixed \"0\" for an octal value, or \"0x\" for an hexadecimal value."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FAIL_DELAY</option> (number)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Delay in seconds before being allowed another attempt after a login failure."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FAILLOG_ENAB</option> (boolean)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging and display of <filename>/var/log/faillog</filename> login failure info."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FAKE_SHELL</option> (string)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "If set, <command>login</command> will execute this shell instead of the users' shell specified in <filename>/etc/passwd</filename>."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FTMP_FILE</option> (string)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "If defined, login failures will be logged in this file in a utmp format."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>HUSHLOGIN_FILE</option> (string)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "If defined, this file can inhibit all the usual chatter during the login sequence. If a full pathname is specified, then hushed mode will be enabled if the user's name or shell are found in the file. If not a full pathname, then hushed mode will be enabled if the file exists in the user's home directory."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ISSUE_FILE</option> (string)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "If defined, this file will be displayed before each login prompt."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>KILLCHAR</option> (number)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Terminal KILL character (<replaceable>025</replaceable> = CTRL/U)."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LASTLOG_ENAB</option> (boolean)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging and display of /var/log/lastlog login time info."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOG_OK_LOGINS</option> (boolean)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging of successful logins."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOG_UNKFAIL_ENAB</option> (boolean)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable display of unknown usernames when login failures are recorded."
+msgstr ""
+
+#: login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid "Note: logging unknown usernames may be a security issue if an user enter her password instead of her login name."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOGIN_RETRIES</option> (number)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Maximum number of login retries in case of bad password."
+msgstr ""
+
+#: login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid "This will most likely be overridden by PAM, since the default pam_unix module has its own built in of 3 retries. However, this is a safe fallback in case you are using an authentication module that does not enforce PAM_MAXTRIES."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOGIN_TIMEOUT</option> (number)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Max time in seconds for login."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>MOTD_FILE</option> (string)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "If defined, \":\" delimited list of \"message of the day\" files to be displayed upon login."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>NOLOGINS_FILE</option> (string)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "If defined, name of file whose presence will inhibit non-root logins. The contents of this file should be a message indicating why logins are inhibited."
+msgstr ""
+
+#: login.defs.5.xml:212(para)
+msgid "<option>PASS_MAX_DAYS</option>, <option>PASS_MIN_DAYS</option> and <option>PASS_WARN_AGE</option> are only used at the time of account creation. Any changes to these settings won't affect existing accounts."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>PORTTIME_CHECKS_ENAB</option> (boolean)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable checking of time restrictions specified in <filename>/etc/porttime</filename>."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>TTYGROUP</option> (string)"
+msgstr ""
+
+#: login.defs.5.xml:33(term) login.1.xml:33(term)
+msgid "<option>TTYPERM</option> (string)"
+msgstr ""
+
+#: login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid "The terminal permissions: the login tty will be owned by the <option>TTYGROUP</option> group, and the permissions will be set to <option>TTYPERM</option>."
+msgstr ""
+
+#: login.defs.5.xml:40(para) login.1.xml:40(para)
+msgid "By default, the ownership of the terminal is set to the user's primary group and the permissions are set to <replaceable>0600</replaceable>."
+msgstr ""
+
+#: login.defs.5.xml:45(para) login.1.xml:45(para)
+msgid "<option>TTYGROUP</option> can be either the name of a group or a numeric group identifier."
+msgstr ""
+
+#: login.defs.5.xml:49(para) login.1.xml:49(para)
+msgid "If you have a <command>write</command> program which is \"setgid\" to a special group which owns the terminals, define TTYGROUP to the group number and TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign TTYPERM to either 622 or 600."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>TTYTYPE_FILE</option> (string)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "If defined, file which maps tty line to TERM environment parameter. Each line of the file is in a format something like \"vt100 tty01\"."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ULIMIT</option> (number)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Default <command>ulimit</command> value."
+msgstr ""
+
+#: login.defs.5.xml:245(title)
+msgid "CROSS REFERENCES"
+msgstr ""
+
+#: login.defs.5.xml:246(para)
+msgid "The following cross references show which programs in the shadow password suite use which parameters."
+msgstr ""
+
+#: login.defs.5.xml:253(term) chage.1.xml:58(refentrytitle) chage.1.xml:65(refname) chage.1.xml:70(command)
+msgid "chage"
+msgstr ""
+
+#: login.defs.5.xml:255(para) login.defs.5.xml:451(phrase) login.defs.5.xml:523(phrase)
+msgid "USE_TCB"
+msgstr ""
+
+#: login.defs.5.xml:259(term) chfn.1.xml:60(refentrytitle) chfn.1.xml:67(refname) chfn.1.xml:73(command)
+msgid "chfn"
+msgstr ""
+
+#: login.defs.5.xml:261(para)
+msgid "<phrase condition=\"no_pam\">CHFN_AUTH</phrase> CHFN_RESTRICT <phrase condition=\"no_pam\">LOGIN_STRING</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:269(term) chgpasswd.8.xml:57(refentrytitle) chgpasswd.8.xml:64(refname) chgpasswd.8.xml:70(command)
+msgid "chgpasswd"
+msgstr ""
+
+#: login.defs.5.xml:271(para) login.defs.5.xml:302(para)
+msgid "ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB <phrase condition=\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:279(term) chpasswd.8.xml:61(refentrytitle) chpasswd.8.xml:68(refname) chpasswd.8.xml:74(command)
+msgid "chpasswd"
+msgstr ""
+
+#: login.defs.5.xml:282(phrase)
+msgid "ENCRYPT_METHOD MD5_CRYPT_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:284(phrase)
+msgid "SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS"
+msgstr ""
+
+#: login.defs.5.xml:290(term) chsh.1.xml:60(refentrytitle) chsh.1.xml:67(refname) chsh.1.xml:73(command)
+msgid "chsh"
+msgstr ""
+
+#: login.defs.5.xml:292(para)
+msgid "CHSH_AUTH LOGIN_STRING"
+msgstr ""
+
+#: login.defs.5.xml:300(term) gpasswd.1.xml:62(refentrytitle) gpasswd.1.xml:69(refname) gpasswd.1.xml:83(command)
+msgid "gpasswd"
+msgstr ""
+
+#: login.defs.5.xml:310(term) groupadd.8.xml:60(refentrytitle) groupadd.8.xml:67(refname) groupadd.8.xml:73(command)
+msgid "groupadd"
+msgstr ""
+
+#: login.defs.5.xml:312(para)
+msgid "GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN"
+msgstr ""
+
+#: login.defs.5.xml:319(term) groupdel.8.xml:58(refentrytitle) groupdel.8.xml:65(refname) groupdel.8.xml:71(command)
+msgid "groupdel"
+msgstr ""
+
+#: login.defs.5.xml:321(para) login.defs.5.xml:327(para) login.defs.5.xml:333(para) login.defs.5.xml:340(para) login.defs.5.xml:346(para) login.defs.5.xml:352(para)
+msgid "MAX_MEMBERS_PER_GROUP"
+msgstr ""
+
+#: login.defs.5.xml:325(term) groupmems.8.xml:61(refentrytitle) groupmems.8.xml:68(refname) groupmems.8.xml:74(command)
+msgid "groupmems"
+msgstr ""
+
+#: login.defs.5.xml:331(term) groupmod.8.xml:58(refentrytitle) groupmod.8.xml:65(refname) groupmod.8.xml:71(command)
+msgid "groupmod"
+msgstr ""
+
+#: login.defs.5.xml:338(term) grpck.8.xml:58(refentrytitle) grpck.8.xml:65(refname) grpck.8.xml:71(command)
+msgid "grpck"
+msgstr ""
+
+#: login.defs.5.xml:357(term) lastlog.8.xml:59(refentrytitle) lastlog.8.xml:66(refname) lastlog.8.xml:72(command)
+msgid "lastlog"
+msgstr ""
+
+#: login.defs.5.xml:359(para)
+msgid "LASTLOG_UID_MAX"
+msgstr ""
+
+#: login.defs.5.xml:363(term) login.1.xml:90(refentrytitle) login.1.xml:97(refname) login.1.xml:103(command) login.1.xml:111(command) login.1.xml:118(command)
+msgid "login"
+msgstr ""
+
+#: login.defs.5.xml:365(para)
+msgid "<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME <phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE</phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam\">FAILLOG_ENAB</phrase> FAKE_SHELL <phrase condition=\"no_pam\">FTMP_FILE</phrase> HUSHLOGIN_FILE <phrase condition=\"no_pam\">ISSUE_FILE</phrase> KILLCHAR <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 <phrase condition=\"no_pam\">MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> TTYGROUP TTYPERM TTYTYPE_FILE <phrase condition=\"no_pam\">ULIMIT UMASK</phrase> USERGROUPS_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:392(term)
+msgid "newgrp / sg"
+msgstr ""
+
+#: login.defs.5.xml:394(para)
+msgid "SYSLOG_SG_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:402(para)
+msgid "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> SUB_GID_COUNT SUB_GID_MAX SUB_GID_MIN SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+msgstr ""
+
+#: login.defs.5.xml:421(para)
+msgid "ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN <phrase condition=\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:432(para)
+msgid "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb\">TCB_AUTH_GROUP TCB_SYMLINKS USE_TCB</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:441(para)
+msgid "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb\">USE_TCB</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:458(para)
+msgid "<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME <phrase condition=\"no_pam\">ENV_HZ ENVIRON_FILE</phrase> ENV_PATH ENV_SUPATH <phrase condition=\"no_pam\">ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE QUOTAS_ENAB</phrase> SULOG_FILE SU_NAME <phrase condition=\"no_pam\">SU_WHEEL_ONLY</phrase> SYSLOG_SU_ENAB <phrase condition=\"no_pam\">USERGROUPS_ENAB</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:473(term)
+msgid "sulogin"
+msgstr ""
+
+#: login.defs.5.xml:475(para)
+msgid "ENV_HZ <phrase condition=\"no_pam\">ENV_TZ</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:484(para)
+msgid "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 SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK <phrase condition=\"tcb\">TCB_AUTH_GROUP TCB_SYMLINK USE_TCB</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:502(para)
+msgid "MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB <phrase condition=\"tcb\">TCB_SYMLINKS USE_TCB</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:512(para)
+msgid "LASTLOG_UID_MAX MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP <phrase condition=\"tcb\">TCB_SYMLINKS USE_TCB</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:532(para)
+msgid "Much of the functionality that used to be provided by the shadow password suite is now handled by PAM. Thus, <filename>/etc/login.defs</filename> is no longer used by <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, or less used by <citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></citerefentry>, and <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></citerefentry>. Please refer to the corresponding PAM configuration files instead."
+msgstr ""
+
+#: login.defs.5.xml:548(para)
+msgid "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: login.access.5.xml:58(refentrytitle) login.access.5.xml:65(refname)
+msgid "login.access"
+msgstr ""
+
+#: login.access.5.xml:66(refpurpose)
+msgid "login access control table"
+msgstr ""
+
+#: login.access.5.xml:71(para)
+msgid "The <emphasis remap=\"I\">login.access</emphasis> file specifies (user, host) combinations and/or (user, tty) combinations for which a login will be either accepted or refused."
+msgstr ""
+
+#: login.access.5.xml:77(para)
+msgid "When someone logs in, the <emphasis remap=\"I\">login.access</emphasis> is scanned for the first entry that matches the (user, host) combination, or, in case of non-networked logins, the first entry that matches the (user, tty) combination. The permissions field of that table entry determines whether the login will be accepted or refused."
+msgstr ""
+
+#: login.access.5.xml:85(para)
+msgid "Each line of the login access control table has three fields separated by a \":\" character:"
+msgstr ""
+
+#: login.access.5.xml:90(para)
+msgid "<emphasis remap=\"I\">permission</emphasis>:<emphasis remap=\"I\">users</emphasis>:<emphasis remap=\"I\">origins</emphasis>"
+msgstr ""
+
+#: login.access.5.xml:94(para)
+msgid "The first field should be a \"<emphasis>+</emphasis>\" (access granted) or \"<emphasis>-</emphasis>\" (access denied) character. The second field should be a list of one or more login names, group names, or <emphasis>ALL</emphasis> (always matches). The third field should be a list of one or more tty names (for non-networked logins), host names, domain names (begin with \"<literal>.</literal>\"), host addresses, internet network numbers (end with \"<literal>.</literal>\"), <emphasis>ALL</emphasis> (always matches) or <emphasis>LOCAL</emphasis> (matches any string that does not contain a \"<literal>.</literal>\" character). If you run NIS you can use @netgroupname in host or user patterns."
+msgstr ""
+
+#: login.access.5.xml:108(para)
+msgid "The <emphasis>EXCEPT</emphasis> operator makes it possible to write very compact rules."
+msgstr ""
+
+#: login.access.5.xml:113(para)
+msgid "The group file is searched only when a name does not match that of the logged-in user. Only groups are matched in which users are explicitly listed: the program does not look at a user's primary group id value."
+msgstr ""
+
+#: login.1.xml:98(refpurpose)
+msgid "begin session on the system"
+msgstr ""
+
+#: login.1.xml:104(arg) login.1.xml:112(arg) login.1.xml:119(arg) login.1.xml:236(option) groupmems.8.xml:79(arg)
+msgid "-p"
+msgstr ""
+
+#: login.1.xml:105(replaceable) login.1.xml:113(replaceable) login.1.xml:120(replaceable)
+msgid "host"
+msgstr ""
+
+#: login.1.xml:105(arg) login.1.xml:113(arg)
+msgid "-h <placeholder-1/>"
+msgstr ""
+
+#: login.1.xml:108(replaceable)
+msgid "ENV=VAR"
+msgstr ""
+
+#: login.1.xml:114(arg) login.1.xml:214(option)
+msgid "-f"
+msgstr ""
+
+#: login.1.xml:120(arg)
+msgid "-r <placeholder-1/>"
+msgstr ""
+
+#: login.1.xml:126(para)
+msgid "The <command>login</command> program is used to establish a new session with the system. It is normally invoked automatically by responding to the <emphasis remap=\"I\">login:</emphasis> prompt on the user's terminal. <command>login</command> may be special to the shell and may not be invoked as a sub-process. When called from a shell, <command>login</command> should be executed as <emphasis remap=\"B\">exec login</emphasis> which will cause the user to exit from the current shell (and thus will prevent the new logged in user to return to the session of the caller). Attempting to execute <command>login</command> from any shell but the login shell will produce an error message."
+msgstr ""
+
+#: login.1.xml:140(para)
+msgid "The user is then prompted for a password, where appropriate. Echoing is disabled to prevent revealing the password. Only a small number of password failures are permitted before <command>login</command> exits and the communications link is severed."
+msgstr ""
+
+#: login.1.xml:147(para)
+msgid "If password aging has been enabled for your account, you may be prompted for a new password before proceeding. You will be forced to provide your old password and the new password before continuing. Please refer to <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry> for more information."
+msgstr ""
+
+#: login.1.xml:156(para)
+msgid "After a successful login, you will be informed of any system messages and the presence of mail. You may turn off the printing of the system message file, <filename>/etc/motd</filename>, by creating a zero-length file <filename>.hushlogin</filename> in your login directory. The mail message will be one of \"<emphasis>You have new mail.</emphasis>\", \"<emphasis>You have mail.</emphasis>\", or \"<emphasis>No Mail.</emphasis>\" according to the condition of your mailbox."
+msgstr ""
+
+#: login.1.xml:167(para)
+msgid "Your user and group ID will be set according to their values in the <filename>/etc/passwd</filename> file. The value for <envar>$HOME</envar>, <envar>$SHELL</envar>, <envar>$PATH</envar>, <envar>$LOGNAME</envar>, and <envar>$MAIL</envar> are set according to the appropriate fields in the password entry. Ulimit, umask and nice values may also be set according to entries in the GECOS field."
+msgstr ""
+
+#: login.1.xml:176(para)
+msgid "On some installations, the environmental variable <envar>$TERM</envar> will be initialized to the terminal type on your tty line, as specified in <filename>/etc/ttytype</filename>."
+msgstr ""
+
+#: login.1.xml:182(para)
+msgid "An initialization script for your command interpreter may also be executed. Please see the appropriate manual section for more information on this function."
+msgstr ""
+
+#: login.1.xml:194(para) login.1.xml:270(para)
+msgid "The <command>login</command> program is NOT responsible for removing users from the utmp file. It is the responsibility of <citerefentry><refentrytitle>getty</refentrytitle><manvolnum>8</manvolnum></citerefentry> and <citerefentry><refentrytitle>init</refentrytitle><manvolnum>8</manvolnum></citerefentry> to clean up apparent ownership of a terminal session. If you use <command>login</command> from the shell prompt without <command>exec</command>, the user you use will continue to appear to be logged in even after you log out of the \"subsession\"."
+msgstr ""
+
+#: login.1.xml:217(para)
+msgid "Do not perform authentication, user is preauthenticated."
+msgstr ""
+
+#: login.1.xml:220(para)
+msgid "Note: In that case, <replaceable>username</replaceable> is mandatory."
+msgstr ""
+
+#: login.1.xml:228(option)
+msgid "-h"
+msgstr ""
+
+#: login.1.xml:231(para)
+msgid "Name of the remote host for this login."
+msgstr ""
+
+#: login.1.xml:239(para)
+msgid "Preserve environment."
+msgstr ""
+
+#: login.1.xml:244(option)
+msgid "-r"
+msgstr ""
+
+#: login.1.xml:247(para)
+msgid "Perform autologin protocol for rlogin."
+msgstr ""
+
+#: login.1.xml:252(para)
+msgid "The <option>-r</option>, <option>-h</option> and <option>-f</option> options are only used when <command>login</command> is invoked by root."
+msgstr ""
+
+#: login.1.xml:261(para)
+msgid "This version of <command>login</command> has many compilation options, only some of which may be in use at any particular site."
+msgstr ""
+
+#: login.1.xml:266(para)
+msgid "The location of files is subject to differences in system configuration."
+msgstr ""
+
+#: login.1.xml:282(para)
+msgid "As with any program, <command>login</command>'s appearance can be faked. If non-trusted users have physical access to a machine, an attacker could use this to obtain the password of the next person coming to sit in front of the machine. Under Linux, the SAK mechanism can be used by users to initiate a trusted path and prevent this kind of attack."
+msgstr ""
+
+#: login.1.xml:347(filename)
+msgid "/var/log/wtmp"
+msgstr ""
+
+#: login.1.xml:349(para)
+msgid "List of previous login sessions."
+msgstr ""
+
+#: login.1.xml:365(filename)
+msgid "/etc/motd"
+msgstr ""
+
+#: login.1.xml:367(para)
+msgid "System message of the day file."
+msgstr ""
+
+#: login.1.xml:371(filename)
+msgid "/etc/nologin"
+msgstr ""
+
+#: login.1.xml:373(para)
+msgid "Prevent non-root users from logging in."
+msgstr ""
+
+#: login.1.xml:377(filename)
+msgid "/etc/ttytype"
+msgstr ""
+
+#: login.1.xml:379(para)
+msgid "List of terminal types."
+msgstr ""
+
+#: login.1.xml:383(filename)
+msgid "$HOME/.hushlogin"
+msgstr ""
+
+#: login.1.xml:385(para)
+msgid "Suppress printing of system messages."
+msgstr ""
+
+#: login.1.xml:399(para)
+msgid "<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: limits.5.xml:41(firstname)
+msgid "Luca"
+msgstr ""
+
+#: limits.5.xml:42(surname)
+msgid "Berra"
+msgstr ""
+
+#: limits.5.xml:59(refentrytitle) limits.5.xml:66(refname)
+msgid "limits"
+msgstr ""
+
+#: limits.5.xml:67(refpurpose)
+msgid "resource limits definition"
+msgstr ""
+
+#: limits.5.xml:73(para)
+msgid "The <emphasis remap=\"I\">limits</emphasis> file (<filename>/etc/limits</filename> by default or LIMITS_FILE defined <filename>config.h</filename>) describes the resource limits you wish to impose. It should be owned by root and readable by root account only."
+msgstr ""
+
+#: limits.5.xml:81(para)
+msgid "By default no quota is imposed on 'root'. In fact, there is no way to impose limits via this procedure to root-equiv accounts (accounts with UID 0)."
+msgstr ""
+
+#: limits.5.xml:87(para)
+msgid "Each line describes a limit for a user in the form:"
+msgstr ""
+
+#: limits.5.xml:90(emphasis)
+msgid "user LIMITS_STRING"
+msgstr ""
+
+#: limits.5.xml:93(para)
+msgid "or in the form:"
+msgstr ""
+
+#: limits.5.xml:96(emphasis)
+msgid "@group LIMITS_STRING"
+msgstr ""
+
+#: limits.5.xml:99(para)
+msgid "The <emphasis>LIMITS_STRING</emphasis> is a string of a concatenated list of resource limits. Each limit consists of a letter identifier followed by a numerical limit."
+msgstr ""
+
+#: limits.5.xml:105(para)
+msgid "The valid identifiers are:"
+msgstr ""
+
+#: limits.5.xml:108(para)
+msgid "A: max address space (KB)"
+msgstr ""
+
+#: limits.5.xml:109(para)
+msgid "C: max core file size (KB)"
+msgstr ""
+
+#: limits.5.xml:110(para)
+msgid "D: max data size (KB)"
+msgstr ""
+
+#: limits.5.xml:111(para)
+msgid "F: maximum file size (KB)"
+msgstr ""
+
+#: limits.5.xml:112(para)
+msgid "K: file creation mask, set by <citerefentry><refentrytitle>umask</refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+
+#: limits.5.xml:117(para)
+msgid "I: max nice value (0..39 which translates to 20..-19)"
+msgstr ""
+
+#: limits.5.xml:119(para)
+msgid "L: max number of logins for this user"
+msgstr ""
+
+#: limits.5.xml:120(para)
+msgid "M: max locked-in-memory address space (KB)"
+msgstr ""
+
+#: limits.5.xml:121(para)
+msgid "N: max number of open files"
+msgstr ""
+
+#: limits.5.xml:122(para)
+msgid "O: max real time priority"
+msgstr ""
+
+#: limits.5.xml:123(para)
+msgid "P: process priority, set by <citerefentry><refentrytitle>setpriority</refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+
+#: limits.5.xml:128(para)
+msgid "R: max resident set size (KB)"
+msgstr ""
+
+#: limits.5.xml:129(para)
+msgid "S: max stack size (KB)"
+msgstr ""
+
+#: limits.5.xml:130(para)
+msgid "T: max CPU time (MIN)"
+msgstr ""
+
+#: limits.5.xml:131(para)
+msgid "U: max number of processes"
+msgstr ""
+
+#: limits.5.xml:134(para)
+msgid "For example, <emphasis remap=\"I\">L2D2048N5</emphasis> is a valid <emphasis>LIMITS_STRING</emphasis>. For reading convenience, the following entries are equivalent:"
+msgstr ""
+
+#: limits.5.xml:140(programlisting)
+#, no-wrap
+msgid "\n username L2D2048N5\n username L2 D2048 N5\n "
+msgstr ""
+
+#: limits.5.xml:145(para)
+msgid "Be aware that after <emphasis remap=\"I\">username</emphasis> the rest of the line is considered a limit string, thus comments are not allowed. An invalid limits string will be rejected (not considered) by the <command>login</command> program."
+msgstr ""
+
+#: limits.5.xml:152(para)
+msgid "The default entry is denoted by username \"<emphasis>*</emphasis>\". If you have multiple <emphasis remap=\"I\">default</emphasis> entries in your <emphasis>LIMITS_FILE</emphasis>, then the last one will be used as the default entry."
+msgstr ""
+
+#: limits.5.xml:159(para)
+msgid "The limits specified in the form \"<replaceable>@group</replaceable>\" apply to the members of the specified <replaceable>group</replaceable>."
+msgstr ""
+
+#: limits.5.xml:165(para)
+msgid "If more than one line with limits for a user exist, only the first line for this user will be considered."
+msgstr ""
+
+#: limits.5.xml:170(para)
+msgid "If no lines are specified for a user, the last <replaceable>@group</replaceable> line matching a group whose the user is a member of will be considered, or the last line with default limits if no groups contain the user."
+msgstr ""
+
+#: limits.5.xml:177(para)
+msgid "To completely disable limits for a user, a single dash \"<emphasis>-</emphasis>\" will do."
+msgstr ""
+
+#: limits.5.xml:182(para)
+msgid "To disable a limit for a user, a single dash \"<replaceable>-</replaceable>\" can be used instead of the numerical value for this limit."
+msgstr ""
+
+#: limits.5.xml:188(para)
+msgid "Also, please note that all limit settings are set PER LOGIN. They are not global, nor are they permanent. Perhaps global limits will come, but for now this will have to do ;)"
+msgstr ""
+
+#: limits.5.xml:199(filename)
+msgid "/etc/limits"
+msgstr ""
+
+#: limits.5.xml:207(para)
+msgid "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>setpriority</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+
+#: lastlog.8.xml:67(refpurpose)
+msgid "reports the most recent login of all users or of a given user"
+msgstr ""
+
+#: lastlog.8.xml:81(para)
+msgid "<command>lastlog</command> formats and prints the contents of the last login log <filename>/var/log/lastlog</filename> file. The <emphasis>login-name</emphasis>, <emphasis>port</emphasis>, and <emphasis>last login time</emphasis> will be printed. The default (no flags) causes lastlog entries to be printed, sorted by their order in <filename>/etc/passwd</filename>."
+msgstr ""
+
+#: lastlog.8.xml:93(para)
+msgid "The options which apply to the <command>lastlog</command> command are:"
+msgstr ""
+
+#: lastlog.8.xml:98(term)
+msgid "<option>-b</option>, <option>--before</option>&nbsp;<replaceable>DAYS</replaceable>"
+msgstr ""
+
+#: lastlog.8.xml:102(para)
+msgid "Print only lastlog records older than <emphasis remap=\"I\">DAYS</emphasis>."
+msgstr ""
+
+#: lastlog.8.xml:108(term)
+msgid "<option>-C</option>, <option>--clear</option>"
+msgstr ""
+
+#: lastlog.8.xml:112(para)
+msgid "Clear lastlog record of a user. This option can be used only together with <option>-u</option> (<option>--user</option>))."
+msgstr ""
+
+#: lastlog.8.xml:139(term)
+msgid "<option>-S</option>, <option>--set</option>"
+msgstr ""
+
+#: lastlog.8.xml:143(para)
+msgid "Set lastlog record of a user to the current time. This option can be used only together with <option>-u</option> (<option>--user</option>))."
+msgstr ""
+
+#: lastlog.8.xml:150(term) faillog.8.xml:192(term)
+msgid "<option>-t</option>, <option>--time</option>&nbsp;<replaceable>DAYS</replaceable>"
+msgstr ""
+
+#: lastlog.8.xml:154(para)
+msgid "Print the lastlog records more recent than <emphasis remap=\"I\">DAYS</emphasis>."
+msgstr ""
+
+#: lastlog.8.xml:161(term) faillog.8.xml:202(term)
+msgid "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</replaceable>|<replaceable>RANGE</replaceable>"
+msgstr ""
+
+#: lastlog.8.xml:165(para)
+msgid "Print the lastlog record of the specified user(s)."
+msgstr ""
+
+#: lastlog.8.xml:168(para) faillog.8.xml:211(para)
+msgid "The users can be specified by a login name, a numerical user ID, or a <replaceable>RANGE</replaceable> of users. This <replaceable>RANGE</replaceable> of users can be specified with a min and max values (<replaceable>UID_MIN-UID_MAX</replaceable>), a max value (<replaceable>-UID_MAX</replaceable>), or a min value (<replaceable>UID_MIN-</replaceable>)."
+msgstr ""
+
+#: lastlog.8.xml:180(para)
+msgid "If the user has never logged in the message <emphasis>** Never logged in**</emphasis> will be displayed instead of the port and time."
+msgstr ""
+
+#: lastlog.8.xml:185(para)
+msgid "Only the entries for the current users of the system will be displayed. Other entries may exist for users that were deleted previously."
+msgstr ""
+
+#: lastlog.8.xml:193(title) groups.1.xml:90(title) chsh.1.xml:140(title) chage.1.xml:237(title)
+msgid "NOTE"
+msgstr ""
+
+#: lastlog.8.xml:194(para)
+msgid "The <filename>lastlog</filename> file is a database which contains info on the last login of each user. You should not rotate it. It is a sparse file, so its size on the disk is usually much smaller than the one shown by \"<command>ls -l</command>\" (which can indicate a really big file if you have in <filename>passwd</filename> users with a high UID). You can display its real size with \"<command>ls -s</command>\"."
+msgstr ""
+
+#: lastlog.8.xml:220(filename)
+msgid "/var/log/lastlog"
+msgstr ""
+
+#: lastlog.8.xml:222(para)
+msgid "Database times of previous user logins."
+msgstr ""
+
+#: lastlog.8.xml:230(para)
+msgid "Large gaps in UID numbers will cause the lastlog program to run longer with no output to the screen (i.e. if in lastlog database there is no entries for users with UID between 170 and 800 lastlog will appear to hang as it processes entries with UIDs 171-799)."
+msgstr ""
+
+#: gshadow.5.xml:41(contrib)
+msgid "Creation, 2005"
+msgstr ""
+
+#: gshadow.5.xml:46(refentrytitle) gshadow.5.xml:53(refname)
+msgid "gshadow"
+msgstr ""
+
+#: gshadow.5.xml:54(refpurpose)
+msgid "shadowed group file"
+msgstr ""
+
+#: gshadow.5.xml:59(para)
+msgid "<filename>/etc/gshadow</filename> contains the shadowed information for group accounts."
+msgstr ""
+
+#: gshadow.5.xml:69(para)
+msgid "Each line of this file contains the following colon-separated fields:"
+msgstr ""
+
+#: gshadow.5.xml:75(emphasis)
+msgid "group name"
+msgstr ""
+
+#: gshadow.5.xml:77(para)
+msgid "It must be a valid group name, which exist on the system."
+msgstr ""
+
+#: gshadow.5.xml:90(para)
+msgid "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 *, users will not be able to use a unix password to access the group (but group members do not need the password)."
+msgstr ""
+
+#: gshadow.5.xml:97(para)
+msgid "The password is used when a user who is not a member of the group wants to gain the permissions of this group (see <citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></citerefentry>)."
+msgstr ""
+
+#: gshadow.5.xml:103(para)
+msgid "This field may be empty, in which case only the group members can gain the group permissions."
+msgstr ""
+
+#: gshadow.5.xml:113(para)
+msgid "This password supersedes any password specified in <filename>/etc/group</filename>."
+msgstr ""
+
+#: gshadow.5.xml:121(emphasis)
+msgid "administrators"
+msgstr ""
+
+#: gshadow.5.xml:123(para) gshadow.5.xml:139(para)
+msgid "It must be a comma-separated list of user names."
+msgstr ""
+
+#: gshadow.5.xml:126(para)
+msgid "Administrators can change the password or the members of the group."
+msgstr ""
+
+#: gshadow.5.xml:130(para)
+msgid "Administrators also have the same permissions as the members (see below)."
+msgstr ""
+
+#: gshadow.5.xml:137(emphasis)
+msgid "members"
+msgstr ""
+
+#: gshadow.5.xml:142(para)
+msgid "Members can access the group without being prompted for a password."
+msgstr ""
+
+#: gshadow.5.xml:146(para)
+msgid "You should use the same list of users as in <filename>/etc/group</filename>."
+msgstr ""
+
+#: gshadow.5.xml:175(para)
+msgid "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>grpconv</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+msgstr ""
+
+#: grpck.8.xml:66(refpurpose)
+msgid "verify integrity of group files"
+msgstr ""
+
+#: grpck.8.xml:84(para)
+msgid "The <command>grpck</command> command verifies the integrity of the groups information. It checks that all entries in <filename>/etc/group</filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</filename></phrase> have the proper format and contain valid data. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors."
+msgstr ""
+
+#: grpck.8.xml:101(para)
+msgid "a unique and valid group name"
+msgstr ""
+
+#: grpck.8.xml:104(para)
+msgid "a valid group identifier <phrase condition=\"gshadow\"> (<filename>/etc/group</filename> only)</phrase>"
+msgstr ""
+
+#: grpck.8.xml:111(para)
+msgid "a valid list of members <phrase condition=\"gshadow\"> and administrators</phrase>"
+msgstr ""
+
+#: grpck.8.xml:117(para)
+msgid "a corresponding entry in the <filename>/etc/gshadow</filename> file (respectively <filename>/etc/group</filename> for the <filename>gshadow</filename> checks)"
+msgstr ""
+
+#: grpck.8.xml:125(para)
+msgid "The checks for correct number of fields and unique group name are fatal. If an entry has the wrong number of fields, the user will be prompted to delete the entire line. If the user does not answer affirmatively, all further checks are bypassed. An entry with a duplicated group name is prompted for deletion, but the remaining checks will still be made. All other errors are warnings and the user is encouraged to run the <command>groupmod</command> command to correct the error."
+msgstr ""
+
+#: grpck.8.xml:136(para)
+msgid "The commands which operate on the <filename>/etc/group</filename><phrase condition=\"no_gshadow\">file</phrase><phrase condition=\"gshadow\">and <filename>/etc/gshadow</filename> files</phrase> are not able to alter corrupted or duplicated entries. <command>grpck</command> should be used in those circumstances to remove the offending entries."
+msgstr ""
+
+#: grpck.8.xml:152(para)
+msgid "The options which apply to the <command>grpck</command> command are:"
+msgstr ""
+
+#: grpck.8.xml:165(para)
+msgid "Execute the <command>grpck</command> command in read-only mode. This causes all questions regarding changes to be answered <emphasis>no</emphasis> without user intervention."
+msgstr ""
+
+#: grpck.8.xml:187(para)
+msgid "Sort entries in <filename>/etc/group</filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</filename></phrase> by GID."
+msgstr ""
+
+#: grpck.8.xml:196(para)
+msgid "By default, <command>grpck</command> operates on <filename>/etc/group</filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</filename></phrase>. The user may select alternate files with the <emphasis remap=\"I\">group</emphasis><phrase condition=\"no_gshadow\">parameter.</phrase><phrase condition=\"gshadow\">and <emphasis remap=\"I\">shadow</emphasis> parameters.</phrase>"
+msgstr ""
+
+#: grpck.8.xml:264(para)
+msgid "one or more bad group entries"
+msgstr ""
+
+#: grpck.8.xml:270(para)
+msgid "can't open group files"
+msgstr ""
+
+#: grpck.8.xml:276(para)
+msgid "can't lock group files"
+msgstr ""
+
+#: grpck.8.xml:282(para)
+msgid "can't update group files"
+msgstr ""
+
+#: grpck.8.xml:246(para)
+msgid "The <command>grpck</command> command exits with the following values: <placeholder-1/>"
+msgstr ""
+
+#: grpck.8.xml:291(para)
+msgid "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition=\"gshadow\"><citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum>, </citerefentry>, </phrase><citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: groups.1.xml:57(refentrytitle) groups.1.xml:64(refname) groups.1.xml:70(command)
+msgid "groups"
+msgstr ""
+
+#: groups.1.xml:65(refpurpose)
+msgid "display current group names"
+msgstr ""
+
+#: groups.1.xml:72(replaceable)
+msgid "user"
+msgstr ""
+
+#: groups.1.xml:79(para)
+msgid "The <command>groups</command> command displays the current group names or ID values. If the value does not have a corresponding entry in <filename>/etc/group</filename>, the value will be displayed as the numerical group value. The optional <emphasis remap=\"I\">user</emphasis> parameter will display the groups for the named <emphasis remap=\"I\">user</emphasis>."
+msgstr ""
+
+#: groups.1.xml:91(para)
+msgid "Systems which do not support concurrent group sets will have the information from <filename>/etc/group</filename> reported. The user must use <command>newgrp</command> or <command>sg</command> to change his current real and effective group ID."
+msgstr ""
+
+#: groups.1.xml:113(para)
+msgid "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>getgid</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+
+#: groupmod.8.xml:66(refpurpose)
+msgid "modify a group definition on the system"
+msgstr ""
+
+#: groupmod.8.xml:75(replaceable) groupdel.8.xml:75(replaceable)
+msgid "GROUP"
+msgstr ""
+
+#: groupmod.8.xml:81(para)
+msgid "The <command>groupmod</command> command modifies the definition of the specified <replaceable>GROUP</replaceable> by modifying the appropriate entry in the group database."
+msgstr ""
+
+#: groupmod.8.xml:90(para)
+msgid "The options which apply to the <command>groupmod</command> command are:"
+msgstr ""
+
+#: groupmod.8.xml:96(term) groupadd.8.xml:114(term)
+msgid "<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GID</replaceable>"
+msgstr ""
+
+#: groupmod.8.xml:100(para)
+msgid "The group ID of the given <replaceable>GROUP</replaceable> will be changed to <replaceable>GID</replaceable>."
+msgstr ""
+
+#: groupmod.8.xml:104(para)
+msgid "The value of <replaceable>GID</replaceable> must be a non-negative decimal integer. This value must be unique, unless the <option>-o</option> option is used."
+msgstr ""
+
+#: groupmod.8.xml:110(para)
+msgid "Users who use the group as primary group will be updated to keep the group as their primary group."
+msgstr ""
+
+#: groupmod.8.xml:114(para)
+msgid "Any files that have the old group ID and must continue to belong to <replaceable>GROUP</replaceable>, must have their group ID changed manually."
+msgstr ""
+
+#: groupmod.8.xml:120(para)
+msgid "No checks will be performed with regard to the <option>GID_MIN</option>, <option>GID_MAX</option>, <option>SYS_GID_MIN</option>, or <option>SYS_GID_MAX</option> from <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: groupmod.8.xml:135(term)
+msgid "<option>-n</option>, <option>--new-name</option>&nbsp;<replaceable>NEW_GROUP</replaceable>"
+msgstr ""
+
+#: groupmod.8.xml:139(para)
+msgid "The name of the group will be changed from <replaceable>GROUP</replaceable> to <replaceable>NEW_GROUP</replaceable> name."
+msgstr ""
+
+#: groupmod.8.xml:150(para)
+msgid "When used with the <option>-g</option> option, allow to change the group <replaceable>GID</replaceable> to a non-unique value."
+msgstr ""
+
+#: groupmod.8.xml:259(para)
+msgid "E_SUCCESS: success"
+msgstr ""
+
+#: groupmod.8.xml:265(para)
+msgid "E_USAGE: invalid command syntax"
+msgstr ""
+
+#: groupmod.8.xml:271(para)
+msgid "E_BAD_ARG: invalid argument to option"
+msgstr ""
+
+#: groupmod.8.xml:277(para)
+msgid "E_GID_IN_USE: specified group doesn't exist"
+msgstr ""
+
+#: groupmod.8.xml:283(para)
+msgid "E_NOTFOUND: specified group doesn't exist"
+msgstr ""
+
+#: groupmod.8.xml:289(para)
+msgid "E_NAME_IN_USE: group name already in use"
+msgstr ""
+
+#: groupmod.8.xml:295(para)
+msgid "E_GRP_UPDATE: can't update group file"
+msgstr ""
+
+#: groupmod.8.xml:299(replaceable)
+msgid "11"
+msgstr ""
+
+#: groupmod.8.xml:301(para)
+msgid "E_CLEANUP_SERVICE: can't setup cleanup service"
+msgstr ""
+
+#: groupmod.8.xml:307(para)
+msgid "E_PAM_USERNAME: can't determine your username for use with pam"
+msgstr ""
+
+#: groupmod.8.xml:311(replaceable)
+msgid "13"
+msgstr ""
+
+#: groupmod.8.xml:313(para)
+msgid "E_PAM_ERROR: pam returned an error, see syslog facility id groupmod for the PAM error message"
+msgstr ""
+
+#: groupmod.8.xml:253(para)
+msgid "The <command>groupmod</command> command exits with the following values: <placeholder-1/>"
+msgstr ""
+
+#: groupmod.8.xml:322(para)
+msgid "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: groupmems.8.xml:42(firstname)
+msgid "George"
+msgstr ""
+
+#: groupmems.8.xml:43(surname)
+msgid "Kraft"
+msgstr ""
+
+#: groupmems.8.xml:44(lineage)
+msgid "IV"
+msgstr ""
+
+#: groupmems.8.xml:45(contrib)
+msgid "Creation, 2000"
+msgstr ""
+
+#: groupmems.8.xml:69(refpurpose)
+msgid "administer members of a user's primary group"
+msgstr ""
+
+#: groupmems.8.xml:76(replaceable) groupmems.8.xml:77(replaceable)
+msgid "user_name"
+msgstr ""
+
+#: groupmems.8.xml:76(arg)
+msgid "-a <placeholder-1/>"
+msgstr ""
+
+#: groupmems.8.xml:77(arg)
+msgid "-d <placeholder-1/>"
+msgstr ""
+
+#: groupmems.8.xml:78(replaceable)
+msgid "group_name"
+msgstr ""
+
+#: groupmems.8.xml:78(arg)
+msgid "-g <placeholder-1/>"
+msgstr ""
+
+#: groupmems.8.xml:79(arg)
+msgid "-l"
+msgstr ""
+
+#: groupmems.8.xml:86(para)
+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)
+msgid "Only the superuser, as administrator, can use <command>groupmems</command> to alter the memberships of other groups."
+msgstr ""
+
+#: groupmems.8.xml:101(para)
+msgid "The options which apply to the <command>groupmems</command> command are:"
+msgstr ""
+
+#: groupmems.8.xml:107(term)
+msgid "<option>-a</option>, <option>--add</option>&nbsp;<replaceable>user_name</replaceable>"
+msgstr ""
+
+#: groupmems.8.xml:109(para)
+msgid "Add a user to the group membership list."
+msgstr ""
+
+#: groupmems.8.xml:110(para) groupmems.8.xml:126(para) groupmems.8.xml:157(para)
+msgid "If the <filename>/etc/gshadow</filename> file exist, and the group has no entry in the <filename>/etc/gshadow</filename> file, a new entry will be created."
+msgstr ""
+
+#: groupmems.8.xml:118(term)
+msgid "<option>-d</option>, <option>--delete</option>&nbsp;<replaceable>user_name</replaceable>"
+msgstr ""
+
+#: groupmems.8.xml:120(para)
+msgid "Delete a user from the group membership list."
+msgstr ""
+
+#: groupmems.8.xml:121(para)
+msgid "If the <filename>/etc/gshadow</filename> file exist, the user will be removed from the list of members and administrators of the group."
+msgstr ""
+
+#: groupmems.8.xml:134(term)
+msgid "<option>-g</option>, <option>--group</option>&nbsp;<replaceable>group_name</replaceable>"
+msgstr ""
+
+#: groupmems.8.xml:136(para)
+msgid "The superuser can specify which group membership list to modify."
+msgstr ""
+
+#: groupmems.8.xml:148(term) chage.1.xml:160(term)
+msgid "<option>-l</option>, <option>--list</option>"
+msgstr ""
+
+#: groupmems.8.xml:150(para)
+msgid "List the group membership list."
+msgstr ""
+
+#: groupmems.8.xml:154(term)
+msgid "<option>-p</option>, <option>--purge</option>"
+msgstr ""
+
+#: groupmems.8.xml:156(para)
+msgid "Purge all users from the group membership list."
+msgstr ""
+
+#: groupmems.8.xml:180(title)
+msgid "SETUP"
+msgstr ""
+
+#: groupmems.8.xml:181(para)
+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 2710 groupmems\n\t$ chown root.groups groupmems\n\t$ groupmems -g groups -a gk4\n "
+msgstr ""
+
+#: groupmems.8.xml:222(para)
+msgid "secure group account information"
+msgstr ""
+
+#: groupmems.8.xml:230(para)
+msgid "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: groupdel.8.xml:66(refpurpose)
+msgid "delete a group"
+msgstr ""
+
+#: groupdel.8.xml:81(para)
+msgid "The <command>groupdel</command> command modifies the system account files, deleting all entries that refer to <replaceable>GROUP</replaceable>. The named group must exist."
+msgstr ""
+
+#: groupdel.8.xml:89(para)
+msgid "The options which apply to the <command>groupdel</command> command are:"
+msgstr ""
+
+#: groupdel.8.xml:134(para)
+msgid "You may not remove the primary group of any existing user. You must remove the user before you remove the group."
+msgstr ""
+
+#: groupdel.8.xml:138(para)
+msgid "You should manually check all file systems to ensure that no files remain owned by this group."
+msgstr ""
+
+#: groupdel.8.xml:200(para)
+msgid "can't remove user's primary group"
+msgstr ""
+
+#: groupdel.8.xml:176(para)
+msgid "The <command>groupdel</command> command exits with the following values: <placeholder-1/>"
+msgstr ""
+
+#: groupdel.8.xml:215(para)
+msgid "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: groupadd.8.xml:68(refpurpose)
+msgid "create a new group"
+msgstr ""
+
+#: groupadd.8.xml:85(para)
+msgid "The <command>groupadd</command> command creates a new group account using the values specified on the command line plus the default values from the system. The new group will be entered into the system files as needed."
+msgstr ""
+
+#: groupadd.8.xml:94(para)
+msgid "The options which apply to the <command>groupadd</command> command are:"
+msgstr ""
+
+#: groupadd.8.xml:104(para)
+msgid "This option causes the command to simply exit with success status if the specified group already exists. When used with <option>-g</option>, and the specified GID already exists, another (unique) GID is chosen (i.e. <option>-g</option> is turned off)."
+msgstr ""
+
+#: groupadd.8.xml:118(para)
+msgid "The numerical value of the group's ID. This value must be unique, unless the <option>-o</option> option is used. The value must be non-negative. The default is to use the smallest ID value greater than or equal to <option>GID_MIN</option> and greater than every other group."
+msgstr ""
+
+#: groupadd.8.xml:124(para)
+msgid "See also the <option>-r</option> option and the <option>GID_MAX</option> description."
+msgstr ""
+
+#: groupadd.8.xml:141(para)
+msgid "Overrides <filename>/etc/login.defs</filename> defaults (GID_MIN, GID_MAX and others). Multiple <option>-K</option> options can be specified."
+msgstr ""
+
+#: groupadd.8.xml:146(para)
+msgid "Example: <option>-K</option>&nbsp;<replaceable>GID_MIN</replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;<replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+
+#: groupadd.8.xml:150(para)
+msgid "Note: <option>-K</option>&nbsp;<replaceable>GID_MIN</replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable> doesn't work yet."
+msgstr ""
+
+#: groupadd.8.xml:161(para)
+msgid "This option permits to add a group with a non-unique GID."
+msgstr ""
+
+#: groupadd.8.xml:192(para)
+msgid "Create a system group."
+msgstr ""
+
+#: groupadd.8.xml:195(para)
+msgid "The numeric identifiers of new system groups are chosen in the <option>SYS_GID_MIN</option>-<option>SYS_GID_MAX</option> range, defined in <filename>login.defs</filename>, instead of <option>GID_MIN</option>-<option>GID_MAX</option>."
+msgstr ""
+
+#: groupadd.8.xml:275(para)
+msgid "Groupnames must start with a lower case letter or an underscore, followed by lower case letters, digits, underscores, or dashes. They can end with a dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+
+#: groupadd.8.xml:281(para)
+msgid "Groupnames may only be up to &GROUP_NAME_MAX_LENGTH; characters long."
+msgstr ""
+
+#: groupadd.8.xml:284(para)
+msgid "You may not add a NIS or LDAP group. This must be performed on the corresponding server."
+msgstr ""
+
+#: groupadd.8.xml:288(para)
+msgid "If the groupname already exists in an external group database such as NIS or LDAP, <command>groupadd</command> will deny the group creation request."
+msgstr ""
+
+#: groupadd.8.xml:321(para)
+msgid "GID not unique (when <option>-o</option> not used)"
+msgstr ""
+
+#: groupadd.8.xml:327(para)
+msgid "group name not unique"
+msgstr ""
+
+#: groupadd.8.xml:297(para)
+msgid "The <command>groupadd</command> command exits with the following values: <placeholder-1/>"
+msgstr ""
+
+#: groupadd.8.xml:342(para)
+msgid "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: gpasswd.1.xml:44(firstname)
+msgid "Rafal"
+msgstr ""
+
+#: gpasswd.1.xml:45(surname)
+msgid "Maszkowski"
+msgstr ""
+
+#: gpasswd.1.xml:71(phrase)
+msgid "administer <placeholder-1/>"
+msgstr ""
+
+#: gpasswd.1.xml:74(phrase)
+msgid "administer <placeholder-1/> and <placeholder-2/>"
+msgstr ""
+
+#: gpasswd.1.xml:85(replaceable) expiry.1.xml:76(replaceable)
+msgid "option"
+msgstr ""
+
+#: gpasswd.1.xml:95(para)
+msgid "The <command>gpasswd</command> command is used to administer <filename>/etc/group</filename><phrase condition=\"gshadow\">, and <filename>/etc/gshadow</filename></phrase>. Every group can have <phrase condition=\"gshadow\">administrators,</phrase> members and a password."
+msgstr ""
+
+#: gpasswd.1.xml:103(para)
+msgid "System administrators can use the <option>-A</option> option to define group administrator(s) and the <option>-M</option> option to define members. They have all rights of group administrators and members."
+msgstr ""
+
+#: gpasswd.1.xml:108(para)
+msgid "<command>gpasswd</command> called by <phrase condition=\"gshadow\">a group administrator</phrase><phrase condition=\"no_gshadow\">a system administrator</phrase> with a group name only prompts for the new password of the <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:115(para)
+msgid "If a password is set the members can still use <citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></citerefentry> without a password, and non-members must supply the password."
+msgstr ""
+
+#: gpasswd.1.xml:123(title)
+msgid "Notes about group passwords"
+msgstr ""
+
+#: gpasswd.1.xml:124(para)
+msgid "Group passwords are an inherent security problem since more than one person is permitted to know the password. However, groups are a useful tool for permitting co-operation between different users."
+msgstr ""
+
+#: gpasswd.1.xml:135(para)
+msgid "Except for the <option>-A</option> and <option>-M</option> options, the options cannot be combined."
+msgstr ""
+
+#: gpasswd.1.xml:139(para)
+msgid "The options cannot be combined."
+msgstr ""
+
+#: gpasswd.1.xml:142(para)
+msgid "The options which apply to the <command>gpasswd</command> command are:"
+msgstr ""
+
+#: gpasswd.1.xml:147(term)
+msgid "<option>-a</option>, <option>--add</option>&nbsp;<replaceable>user</replaceable>"
+msgstr ""
+
+#: gpasswd.1.xml:151(para)
+msgid "Add the <replaceable>user</replaceable> to the named <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:160(term)
+msgid "<option>-d</option>, <option>--delete</option>&nbsp;<replaceable>user</replaceable>"
+msgstr ""
+
+#: gpasswd.1.xml:164(para)
+msgid "Remove the <replaceable>user</replaceable> from the named <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:181(term)
+msgid "<option>-Q</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</replaceable>"
+msgstr ""
+
+#: gpasswd.1.xml:195(term)
+msgid "<option>-r</option>, <option>--remove-password</option>"
+msgstr ""
+
+#: gpasswd.1.xml:199(para)
+msgid "Remove the password from the named <replaceable>group</replaceable>. The group password will be empty. Only group members will be allowed to use <command>newgrp</command> to join the named <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:211(term)
+msgid "<option>-R</option>, <option>--restrict</option>"
+msgstr ""
+
+#: gpasswd.1.xml:215(para)
+msgid "Restrict the access to the named <replaceable>group</replaceable>. The group password is set to \"!\". Only group members with a password will be allowed to use <command>newgrp</command> to join the named <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:227(term)
+msgid "<option>-A</option>, <option>--administrators</option>&nbsp;<replaceable>user</replaceable>,..."
+msgstr ""
+
+#: gpasswd.1.xml:231(para)
+msgid "Set the list of administrative users."
+msgstr ""
+
+#: gpasswd.1.xml:239(term)
+msgid "<option>-M</option>, <option>--members</option>&nbsp;<replaceable>user</replaceable>,..."
+msgstr ""
+
+#: gpasswd.1.xml:243(para)
+msgid "Set the list of group members."
+msgstr ""
+
+#: gpasswd.1.xml:253(para)
+msgid "This tool only operates on the <filename>/etc/group</filename><phrase condition=\"gshadow\"> and <filename>/etc/gshadow</filename> files.</phrase><phrase condition=\"no_gshadow\">file.</phrase> Thus you cannot change any NIS or LDAP group. This must be performed on the corresponding server."
+msgstr ""
+
+#: gpasswd.1.xml:298(para)
+msgid "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition=\"gshadow\">, <citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+msgstr ""
+
+#: faillog.8.xml:57(refentrytitle) faillog.8.xml:64(refname) faillog.8.xml:70(command) faillog.5.xml:57(refentrytitle) faillog.5.xml:64(refname) faillog.5.xml:111(refentrytitle)
+msgid "faillog"
+msgstr ""
+
+#: faillog.8.xml:65(refpurpose)
+msgid "display faillog records or set login failure limits"
+msgstr ""
+
+#: faillog.8.xml:79(para)
+msgid "<command>faillog</command> displays the contents of the failure log database (<filename>/var/log/faillog</filename>). It can also set the failure counters and limits. When <command>faillog</command> is run without arguments, it only displays the faillog records of the users who had a login failure."
+msgstr ""
+
+#: faillog.8.xml:90(para)
+msgid "The options which apply to the <command>faillog</command> command are:"
+msgstr ""
+
+#: faillog.8.xml:98(para)
+msgid "Display (or act on) faillog records for all users having an entry in the <filename>faillog</filename> database."
+msgstr ""
+
+#: faillog.8.xml:102(para)
+msgid "The range of users can be restricted with the <option>-u</option> option."
+msgstr ""
+
+#: faillog.8.xml:106(para)
+msgid "In display mode, this is still restricted to existing users but forces the display of the faillog entries even if they are empty."
+msgstr ""
+
+#: faillog.8.xml:111(para)
+msgid "With the <option>-l</option>, <option>-m</option>, <option>-r</option>, <option>-t</option> options, the users' records are changed, even if the user does not exist on the system. This is useful to reset records of users that have been deleted or to set a policy in advance for a range of users."
+msgstr ""
+
+#: faillog.8.xml:128(term)
+msgid "<option>-l</option>, <option>--lock-secs</option>&nbsp;<replaceable>SEC</replaceable>"
+msgstr ""
+
+#: faillog.8.xml:132(para)
+msgid "Lock account for <replaceable>SEC</replaceable> seconds after failed login."
+msgstr ""
+
+#: faillog.8.xml:136(para) faillog.8.xml:161(para) faillog.8.xml:173(para)
+msgid "Write access to <filename>/var/log/faillog</filename> is required for this option."
+msgstr ""
+
+#: faillog.8.xml:143(term)
+msgid "<option>-m</option>, <option>--maximum</option>&nbsp;<replaceable>MAX</replaceable>"
+msgstr ""
+
+#: faillog.8.xml:147(para)
+msgid "Set the maximum number of login failures after the account is disabled to <replaceable>MAX</replaceable>."
+msgstr ""
+
+#: faillog.8.xml:151(para)
+msgid "Selecting a <replaceable>MAX</replaceable> value of 0 has the effect of not placing a limit on the number of failed logins."
+msgstr ""
+
+#: faillog.8.xml:156(para)
+msgid "The maximum failure count should always be 0 for <emphasis>root</emphasis> to prevent a denial of services attack against the system."
+msgstr ""
+
+#: faillog.8.xml:168(term)
+msgid "<option>-r</option>, <option>--reset</option>"
+msgstr ""
+
+#: faillog.8.xml:170(para)
+msgid "Reset the counters of login failures."
+msgstr ""
+
+#: faillog.8.xml:195(para)
+msgid "Display faillog records more recent than <replaceable>DAYS</replaceable>."
+msgstr ""
+
+#: faillog.8.xml:206(para)
+msgid "Display faillog record or maintains failure counters and limits (if used with <option>-l</option>, <option>-m</option> or <option>-r</option> options) only for the specified user(s)."
+msgstr ""
+
+#: faillog.8.xml:224(para)
+msgid "When none of the <option>-l</option>, <option>-m</option>, or <option>-r</option> options are used, <command>faillog</command> displays the faillog record of the specified user(s)."
+msgstr ""
+
+#: faillog.8.xml:233(para)
+msgid "<command>faillog</command> only prints out users with no successful login since the last failure. To print out a user who has had a successful login since their last failure, you must explicitly request the user with the <option>-u</option> flag, or print out all users with the <option>-a</option> flag."
+msgstr ""
+
+#: faillog.8.xml:246(filename) faillog.5.xml:99(filename)
+msgid "/var/log/faillog"
+msgstr ""
+
+#: faillog.8.xml:248(para) faillog.5.xml:101(para)
+msgid "Failure logging file."
+msgstr ""
+
+#: faillog.8.xml:256(para)
+msgid "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>faillog</refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: faillog.5.xml:65(refpurpose)
+msgid "login failure logging file"
+msgstr ""
+
+#: faillog.5.xml:70(para)
+msgid "<filename>/var/log/faillog</filename> maintains a count of login failures and the limits for each account."
+msgstr ""
+
+#: faillog.5.xml:74(para)
+msgid "The file contains fixed length records, indexed by numerical UID. Each record contains the count of login failures since the last successful login; the maximum number of failures before the account is disabled; the line on which the last login failure occurred; the date of the last login failure; and the duration (in seconds) during which the account will be locked after a failure."
+msgstr ""
+
+#: faillog.5.xml:84(para)
+msgid "The structure of the file is:"
+msgstr ""
+
+#: faillog.5.xml:85(programlisting)
+#, no-wrap
+msgid "\nstruct\tfaillog {\n\tshort fail_cnt;\n\tshort fail_max;\n\tchar fail_line[12];\n\ttime_t fail_time;\n\tlong fail_locktime;\n};"
+msgstr ""
+
+#: expiry.1.xml:45(contrib) chsh.1.xml:44(contrib) chfn.1.xml:44(contrib) chage.1.xml:42(contrib)
+msgid "Creation, 1990"
+msgstr ""
+
+#: expiry.1.xml:61(refentrytitle) expiry.1.xml:68(refname) expiry.1.xml:74(command)
+msgid "expiry"
+msgstr ""
+
+#: expiry.1.xml:69(refpurpose)
+msgid "check and enforce password expiration policy"
+msgstr ""
+
+#: expiry.1.xml:83(para)
+msgid "The <command>expiry</command> command checks (<option>-c</option>) the current password expiration and forces (<option>-f</option>) changes when required. It is callable as a normal user command."
+msgstr ""
+
+#: expiry.1.xml:92(para)
+msgid "The options which apply to the <command>expiry</command> command are:"
+msgstr ""
+
+#: expiry.1.xml:97(term)
+msgid "<option>-c</option>, <option>--check</option>"
+msgstr ""
+
+#: expiry.1.xml:99(para)
+msgid "Check the password expiration of the current user."
+msgstr ""
+
+#: expiry.1.xml:105(para)
+msgid "Force a password change if the current user has an expired password."
+msgstr ""
+
+#: expiry.1.xml:140(para) chage.1.xml:318(para)
+msgid "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: chsh.1.xml:68(refpurpose)
+msgid "change login shell"
+msgstr ""
+
+#: chsh.1.xml:85(para)
+msgid "The <command>chsh</command> command changes the user login shell. This determines the name of the user's initial login command. A normal user may only change the login shell for her own account; the superuser may change the login shell for any account."
+msgstr ""
+
+#: chsh.1.xml:96(para)
+msgid "The options which apply to the <command>chsh</command> command are:"
+msgstr ""
+
+#: chsh.1.xml:130(para)
+msgid "If the <option>-s</option> option is not selected, <command>chsh</command> operates in an interactive fashion, prompting the user with the current login shell. Enter the new value to change the shell, or leave the line blank to use the current one. The current shell is displayed between a pair of <emphasis>[ ]</emphasis> marks."
+msgstr ""
+
+#: chsh.1.xml:141(para)
+msgid "The only restriction placed on the login shell is that the command name must be listed in <filename>/etc/shells</filename>, unless the invoker is the superuser, and then any value may be added. An account with a restricted login shell may not change her login shell. For this reason, placing <filename>/bin/rsh</filename> in <filename>/etc/shells</filename> is discouraged since accidentally changing to a restricted shell would prevent the user from ever changing her login shell back to its original value."
+msgstr ""
+
+#: chsh.1.xml:176(filename)
+msgid "/etc/shells"
+msgstr ""
+
+#: chsh.1.xml:178(para)
+msgid "List of valid login shells."
+msgstr ""
+
+#: chsh.1.xml:192(para)
+msgid "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: chpasswd.8.xml:69(refpurpose)
+msgid "update passwords in batch mode"
+msgstr ""
+
+#: chpasswd.8.xml:83(para)
+msgid "The <command>chpasswd</command> command reads a list of user name and password pairs from standard input and uses this information to update a group of existing users. Each line is of the format:"
+msgstr ""
+
+#: chpasswd.8.xml:88(para)
+msgid "<emphasis remap=\"I\">user_name</emphasis>:<emphasis remap=\"I\">password</emphasis>"
+msgstr ""
+
+#: chpasswd.8.xml:92(para)
+msgid "By default the passwords must be supplied in clear-text, and are encrypted by <command>chpasswd</command>. Also the password age will be updated, if present."
+msgstr ""
+
+#: chpasswd.8.xml:97(para)
+msgid "The default encryption algorithm can be defined for the system with the <option>ENCRYPT_METHOD</option> or <option>MD5_CRYPT_ENAB</option> variables of <filename>/etc/login.defs</filename>, and can be overwritten with the <option>-e</option>, <option>-m</option>, or <option>-c</option> options."
+msgstr ""
+
+#: chpasswd.8.xml:105(para)
+msgid "By default, passwords are encrypted by PAM, but (even if not recommended) you can select a different encryption method with the <option>-e</option>, <option>-m</option>, or <option>-c</option> options."
+msgstr ""
+
+#: chpasswd.8.xml:111(para)
+msgid "<phrase condition=\"pam\">Except when PAM is used to encrypt the passwords,</phrase><command>chpasswd</command> first updates all the passwords in memory, and then commits all the changes to disk if no errors occurred for any user."
+msgstr ""
+
+#: chpasswd.8.xml:117(para)
+msgid "When PAM is used to encrypt the passwords (and update the passwords in the system database) then if a password cannot be updated <command>chpasswd</command> continues updating the passwords of the next users, and will return an error code on exit."
+msgstr ""
+
+#: chpasswd.8.xml:123(para) chgpasswd.8.xml:98(para)
+msgid "This command is intended to be used in a large system environment where many accounts are created at a single time."
+msgstr ""
+
+#: chpasswd.8.xml:131(para)
+msgid "The options which apply to the <command>chpasswd</command> command are:"
+msgstr ""
+
+#: chpasswd.8.xml:137(term)
+msgid "<option>-c</option>, <option>--crypt-method</option>&nbsp;<replaceable>METHOD</replaceable>"
+msgstr ""
+
+#: chpasswd.8.xml:142(para) chgpasswd.8.xml:115(para)
+msgid "The available methods are DES, MD5, and NONE."
+msgstr ""
+
+#: chpasswd.8.xml:149(para)
+msgid "By default, PAM is used to encrypt the passwords."
+msgstr ""
+
+#: chpasswd.8.xml:152(para)
+msgid "By default (if none of the <option>-c</option>, <option>-m</option>, or <option>-e</option> options are specified), the encryption method is defined by the <option>ENCRYPT_METHOD</option> or <option>MD5_CRYPT_ENAB</option> variables of <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: chpasswd.8.xml:163(term) chgpasswd.8.xml:125(term)
+msgid "<option>-e</option>, <option>--encrypted</option>"
+msgstr ""
+
+#: chpasswd.8.xml:165(para) chgpasswd.8.xml:127(para)
+msgid "Supplied passwords are in encrypted form."
+msgstr ""
+
+#: chpasswd.8.xml:179(term) chgpasswd.8.xml:137(term)
+msgid "<option>-m</option>, <option>--md5</option>"
+msgstr ""
+
+#: chpasswd.8.xml:181(para) chgpasswd.8.xml:139(para)
+msgid "Use MD5 encryption instead of DES when the supplied passwords are not encrypted."
+msgstr ""
+
+#: chpasswd.8.xml:200(term)
+msgid "<option>-s</option>, <option>--sha-rounds</option>&nbsp;<replaceable>ROUNDS</replaceable>"
+msgstr ""
+
+#: chpasswd.8.xml:219(para)
+msgid "By default, the number of rounds is defined by the <option>SHA_CRYPT_MIN_ROUNDS</option> and <option>SHA_CRYPT_MAX_ROUNDS</option> variables in <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: chpasswd.8.xml:232(para) chgpasswd.8.xml:187(para)
+msgid "Remember to set permissions or umask to prevent readability of unencrypted files by other users."
+msgstr ""
+
+#: chpasswd.8.xml:276(filename)
+msgid "/etc/pam.d/chpasswd"
+msgstr ""
+
+#: chpasswd.8.xml:278(para)
+msgid "PAM configuration for <command>chpasswd</command>."
+msgstr ""
+
+#: chpasswd.8.xml:286(para)
+msgid "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: chgpasswd.8.xml:47(contrib)
+msgid "Creation, 2006"
+msgstr ""
+
+#: chgpasswd.8.xml:65(refpurpose)
+msgid "update group passwords in batch mode"
+msgstr ""
+
+#: chgpasswd.8.xml:79(para)
+msgid "The <command>chgpasswd</command> command reads a list of group name and password pairs from standard input and uses this information to update a set of existing groups. Each line is of the format:"
+msgstr ""
+
+#: chgpasswd.8.xml:84(para)
+msgid "<emphasis remap=\"I\">group_name</emphasis>:<emphasis remap=\"I\">password</emphasis>"
+msgstr ""
+
+#: chgpasswd.8.xml:88(para)
+msgid "By default the supplied password must be in clear-text, and is encrypted by <command>chgpasswd</command>."
+msgstr ""
+
+#: chgpasswd.8.xml:92(para)
+msgid "The default encryption algorithm can be defined for the system with the <option>ENCRYPT_METHOD</option> variable of <filename>/etc/login.defs</filename>, and can be overwritten with the <option>-e</option>, <option>-m</option>, or <option>-c</option> options."
+msgstr ""
+
+#: chgpasswd.8.xml:106(para)
+msgid "The options which apply to the <command>chgpasswd</command> command are:"
+msgstr ""
+
+#: chgpasswd.8.xml:238(para)
+msgid "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: chfn.1.xml:68(refpurpose)
+msgid "change real user name and information"
+msgstr ""
+
+#: chfn.1.xml:85(para)
+msgid "The <command>chfn</command> command changes user fullname, office room number, office phone number, and home phone number information for a user's account. This information is typically printed by <citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></citerefentry> and similar programs. A normal user may only change the fields for her own account, subject to the restrictions in <filename>/etc/login.defs</filename>. (The default configuration is to prevent users from changing their fullname.) The superuser may change any field for any account. Additionally, only the superuser may use the <option>-o</option> option to change the undefined portions of the GECOS field."
+msgstr ""
+
+#: chfn.1.xml:99(para)
+msgid "These fields must not contain any colons. Except for the <emphasis remap=\"I\">other</emphasis> field, they should not contain any comma or equal sign. It is also recommended to avoid non-US-ASCII characters, but this is only enforced for the phone numbers. The <emphasis remap=\"I\">other</emphasis> field is used to store accounting information used by other applications."
+msgstr ""
+
+#: chfn.1.xml:112(para)
+msgid "The options which apply to the <command>chfn</command> command are:"
+msgstr ""
+
+#: chfn.1.xml:117(term)
+msgid "<option>-f</option>, <option>--full-name</option>&nbsp;<replaceable>FULL_NAME</replaceable>"
+msgstr ""
+
+#: chfn.1.xml:121(para)
+msgid "Change the user's full name."
+msgstr ""
+
+#: chfn.1.xml:125(term)
+msgid "<option>-h</option>, <option>--home-phone</option>&nbsp;<replaceable>HOME_PHONE</replaceable>"
+msgstr ""
+
+#: chfn.1.xml:129(para)
+msgid "Change the user's home phone number."
+msgstr ""
+
+#: chfn.1.xml:133(term)
+msgid "<option>-o</option>, <option>--other</option>&nbsp;<replaceable>OTHER</replaceable>"
+msgstr ""
+
+#: chfn.1.xml:137(para)
+msgid "Change the user's other GECOS information. This field is used to store accounting information used by other applications, and can be changed only by a superuser."
+msgstr ""
+
+#: chfn.1.xml:145(term)
+msgid "<option>-r</option>, <option>--room</option>&nbsp;<replaceable>ROOM_NUMBER</replaceable>"
+msgstr ""
+
+#: chfn.1.xml:149(para)
+msgid "Change the user's room number."
+msgstr ""
+
+#: chfn.1.xml:165(term)
+msgid "<option>-u</option>, <option>--help</option>"
+msgstr ""
+
+#: chfn.1.xml:173(term)
+msgid "<option>-w</option>, <option>--work-phone</option>&nbsp;<replaceable>WORK_PHONE</replaceable>"
+msgstr ""
+
+#: chfn.1.xml:177(para)
+msgid "Change the user's office phone number."
+msgstr ""
+
+#: chfn.1.xml:181(para)
+msgid "If none of the options are selected, <command>chfn</command> operates in an interactive fashion, prompting the user with the current values for all of the fields. Enter the new value to change the field, or leave the line blank to use the current value. The current value is displayed between a pair of <emphasis remap=\"B\">[ ]</emphasis> marks. Without options, <command>chfn</command> prompts for the current user account."
+msgstr ""
+
+#: chfn.1.xml:226(para)
+msgid "<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: chage.1.xml:66(refpurpose)
+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 their password."
+msgstr ""
+
+#: chage.1.xml:92(para)
+msgid "The options which apply to the <command>chage</command> command are:"
+msgstr ""
+
+#: chage.1.xml:97(term)
+msgid "<option>-d</option>, <option>--lastday</option>&nbsp;<replaceable>LAST_DAY</replaceable>"
+msgstr ""
+
+#: chage.1.xml:101(para)
+msgid "Set the number of days since January 1st, 1970 when the password was last changed. The date may also be expressed in the format YYYY-MM-DD (or the format more commonly used in your area)."
+msgstr ""
+
+#: chage.1.xml:109(term)
+msgid "<option>-E</option>, <option>--expiredate</option>&nbsp;<replaceable>EXPIRE_DATE</replaceable>"
+msgstr ""
+
+#: chage.1.xml:113(para)
+msgid "Set the date or number of days since January 1, 1970 on which the user's account will no longer be accessible. The date may also be expressed in the format YYYY-MM-DD (or the format more commonly used in your area). A user whose account is locked must contact the system administrator before being able to use the system again."
+msgstr ""
+
+#: chage.1.xml:121(para)
+msgid "Passing the number <emphasis remap=\"I\">-1</emphasis> as the <replaceable>EXPIRE_DATE</replaceable> will remove an account expiration date."
+msgstr ""
+
+#: chage.1.xml:135(term)
+msgid "<option>-i</option>, <option>--iso8601</option>"
+msgstr ""
+
+#: chage.1.xml:137(para)
+msgid "When printing dates, use YYYY-MM-DD format."
+msgstr ""
+
+#: chage.1.xml:141(term)
+msgid "<option>-I</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</replaceable>"
+msgstr ""
+
+#: chage.1.xml:145(para)
+msgid "Set the number of days of inactivity after a password has expired before the account is locked. The <replaceable>INACTIVE</replaceable> option is the number of days of inactivity. A user whose account is locked must contact the system administrator before being able to use the system again."
+msgstr ""
+
+#: chage.1.xml:152(para)
+msgid "Passing the number <emphasis remap=\"I\">-1</emphasis> as the <replaceable>INACTIVE</replaceable> will remove an account's inactivity."
+msgstr ""
+
+#: chage.1.xml:164(para)
+msgid "Show account aging information."
+msgstr ""
+
+#: chage.1.xml:170(term)
+msgid "<option>-m</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DAYS</replaceable>"
+msgstr ""
+
+#: chage.1.xml:182(term)
+msgid "<option>-M</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DAYS</replaceable>"
+msgstr ""
+
+#: chage.1.xml:186(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 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:215(term)
+msgid "<option>-W</option>, <option>--warndays</option>&nbsp;<replaceable>WARN_DAYS</replaceable>"
+msgstr ""
+
+#: chage.1.xml:219(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 their password is about to expire."
+msgstr ""
+
+#: chage.1.xml:228(para)
+msgid "If none of the options are selected, <command>chage</command> operates in an interactive fashion, prompting the user with the current values for all of the fields. Enter the new value to change the field, or leave the line blank to use the current value. The current value is displayed between a pair of <emphasis>[ ]</emphasis> marks."
+msgstr ""
+
+#: chage.1.xml:238(para)
+msgid "The <command>chage</command> program requires a shadow password file to be available."
+msgstr ""
+
+#: chage.1.xml:242(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 their password or account is due to expire."
+msgstr ""
+
+#: chage.1.xml:307(replaceable)
+msgid "15"
+msgstr ""
+
+#: chage.1.xml:309(para)
+msgid "can't find the shadow password file"
+msgstr ""
+
+#: chage.1.xml:285(para)
+msgid "The <command>chage</command> command exits with the following values: <placeholder-1/>"
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
+#: chage.1.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
diff --git a/man/po/stamp-po b/man/po/stamp-po
new file mode 100644
index 0000000..9788f70
--- /dev/null
+++ b/man/po/stamp-po
@@ -0,0 +1 @@
+timestamp
diff --git a/man/po/sv.po b/man/po/sv.po
new file mode 100644
index 0000000..06fdc72
--- /dev/null
+++ b/man/po/sv.po
@@ -0,0 +1,9882 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: man pages for shadow 4.0.18\n"
+"POT-Creation-Date: 2020-01-23 15:00-0600\n"
+"PO-Revision-Date: 2013-08-23 01:41+0200\n"
+"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
+"Language-Team: Swedish <debian-l10n-swedish@lists.debian.org>\n"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: vipw.8.xml:41(firstname) suauth.5.xml:39(firstname)
+#: pwconv.8.xml:45(firstname) login.access.5.xml:40(firstname)
+msgid "Marek"
+msgstr ""
+
+#: vipw.8.xml:42(surname) suauth.5.xml:40(surname) pwconv.8.xml:46(surname)
+#: login.access.5.xml:41(surname)
+msgid "Michałkiewicz"
+msgstr ""
+
+#: vipw.8.xml:43(contrib) limits.5.xml:43(contrib)
+msgid "Creation, 1997"
+msgstr ""
+
+#: vipw.8.xml:46(firstname) usermod.8.xml:51(firstname)
+#: userdel.8.xml:50(firstname) useradd.8.xml:63(firstname)
+#: suauth.5.xml:44(firstname) su.1.xml:61(firstname) sg.1.xml:45(firstname)
+#: shadow.5.xml:44(firstname) shadow.3.xml:44(firstname)
+#: pwconv.8.xml:50(firstname) pwck.8.xml:50(firstname)
+#: porttime.5.xml:44(firstname) passwd.5.xml:44(firstname)
+#: passwd.1.xml:51(firstname) newusers.8.xml:60(firstname)
+#: newgrp.1.xml:45(firstname) logoutd.8.xml:44(firstname)
+#: login.defs.5.xml:111(firstname) login.access.5.xml:45(firstname)
+#: login.1.xml:77(firstname) limits.5.xml:46(firstname)
+#: lastlog.8.xml:46(firstname) grpck.8.xml:45(firstname)
+#: groups.1.xml:44(firstname) groupmod.8.xml:45(firstname)
+#: groupmems.8.xml:48(firstname) groupdel.8.xml:45(firstname)
+#: groupadd.8.xml:47(firstname) gpasswd.1.xml:49(firstname)
+#: faillog.8.xml:44(firstname) faillog.5.xml:44(firstname)
+#: expiry.1.xml:48(firstname) chsh.1.xml:47(firstname)
+#: chpasswd.8.xml:48(firstname) chgpasswd.8.xml:44(firstname)
+#: chfn.1.xml:47(firstname) chage.1.xml:45(firstname)
+msgid "Thomas"
+msgstr ""
+
+#: vipw.8.xml:47(surname) usermod.8.xml:52(surname) userdel.8.xml:51(surname)
+#: useradd.8.xml:64(surname) suauth.5.xml:45(surname) su.1.xml:62(surname)
+#: sg.1.xml:46(surname) shadow.5.xml:45(surname) shadow.3.xml:45(surname)
+#: pwconv.8.xml:51(surname) pwck.8.xml:51(surname) porttime.5.xml:45(surname)
+#: passwd.5.xml:45(surname) passwd.1.xml:52(surname) newusers.8.xml:61(surname)
+#: newgrp.1.xml:46(surname) logoutd.8.xml:45(surname)
+#: login.defs.5.xml:112(surname) login.access.5.xml:46(surname)
+#: login.1.xml:78(surname) limits.5.xml:47(surname) lastlog.8.xml:47(surname)
+#: grpck.8.xml:46(surname) groups.1.xml:45(surname) groupmod.8.xml:46(surname)
+#: groupmems.8.xml:49(surname) groupdel.8.xml:46(surname)
+#: groupadd.8.xml:48(surname) gpasswd.1.xml:50(surname)
+#: faillog.8.xml:45(surname) faillog.5.xml:45(surname) expiry.1.xml:49(surname)
+#: chsh.1.xml:48(surname) chpasswd.8.xml:49(surname)
+#: chgpasswd.8.xml:45(surname) chfn.1.xml:48(surname) chage.1.xml:46(surname)
+msgid "Kłoczko"
+msgstr ""
+
+#: vipw.8.xml:48(email) usermod.8.xml:53(email) userdel.8.xml:52(email)
+#: useradd.8.xml:65(email) suauth.5.xml:46(email) su.1.xml:63(email)
+#: sg.1.xml:47(email) shadow.5.xml:46(email) shadow.3.xml:46(email)
+#: pwconv.8.xml:52(email) pwck.8.xml:52(email) porttime.5.xml:46(email)
+#: passwd.5.xml:46(email) passwd.1.xml:53(email) newusers.8.xml:62(email)
+#: newgrp.1.xml:47(email) logoutd.8.xml:46(email) login.defs.5.xml:113(email)
+#: login.access.5.xml:47(email) login.1.xml:79(email) limits.5.xml:48(email)
+#: lastlog.8.xml:48(email) grpck.8.xml:47(email) groups.1.xml:46(email)
+#: groupmod.8.xml:47(email) groupmems.8.xml:50(email) groupdel.8.xml:47(email)
+#: groupadd.8.xml:49(email) gpasswd.1.xml:51(email) faillog.8.xml:46(email)
+#: faillog.5.xml:46(email) expiry.1.xml:50(email) chsh.1.xml:49(email)
+#: chpasswd.8.xml:50(email) chgpasswd.8.xml:46(email) chfn.1.xml:49(email)
+#: chage.1.xml:47(email)
+msgid "kloczek@pld.org.pl"
+msgstr ""
+
+#: vipw.8.xml:49(contrib) usermod.8.xml:54(contrib) userdel.8.xml:53(contrib)
+#: useradd.8.xml:66(contrib) suauth.5.xml:47(contrib) su.1.xml:64(contrib)
+#: sg.1.xml:48(contrib) shadow.5.xml:47(contrib) shadow.3.xml:47(contrib)
+#: pwconv.8.xml:53(contrib) pwck.8.xml:53(contrib) porttime.5.xml:47(contrib)
+#: passwd.5.xml:47(contrib) passwd.1.xml:54(contrib) newusers.8.xml:63(contrib)
+#: newgrp.1.xml:48(contrib) logoutd.8.xml:47(contrib)
+#: login.defs.5.xml:114(contrib) login.access.5.xml:48(contrib)
+#: login.1.xml:80(contrib) limits.5.xml:49(contrib) lastlog.8.xml:49(contrib)
+#: grpck.8.xml:48(contrib) groups.1.xml:47(contrib) groupmod.8.xml:48(contrib)
+#: groupmems.8.xml:51(contrib) groupdel.8.xml:48(contrib)
+#: groupadd.8.xml:50(contrib) gpasswd.1.xml:52(contrib)
+#: faillog.8.xml:47(contrib) faillog.5.xml:47(contrib) expiry.1.xml:51(contrib)
+#: chsh.1.xml:50(contrib) chpasswd.8.xml:51(contrib) chfn.1.xml:50(contrib)
+#: chage.1.xml:48(contrib)
+msgid "shadow-utils maintainer, 2000 - 2007"
+msgstr ""
+
+#: vipw.8.xml:52(firstname) usermod.8.xml:57(firstname)
+#: userdel.8.xml:56(firstname) useradd.8.xml:69(firstname)
+#: suauth.5.xml:50(firstname) su.1.xml:67(firstname) sg.1.xml:51(firstname)
+#: shadow.5.xml:50(firstname) shadow.3.xml:50(firstname)
+#: pwconv.8.xml:56(firstname) pwck.8.xml:56(firstname)
+#: porttime.5.xml:50(firstname) passwd.5.xml:50(firstname)
+#: passwd.1.xml:57(firstname) nologin.8.xml:39(firstname)
+#: newusers.8.xml:66(firstname) newgrp.1.xml:51(firstname)
+#: logoutd.8.xml:50(firstname) login.defs.5.xml:117(firstname)
+#: login.access.5.xml:51(firstname) login.1.xml:83(firstname)
+#: limits.5.xml:52(firstname) lastlog.8.xml:52(firstname)
+#: gshadow.5.xml:38(firstname) grpck.8.xml:51(firstname)
+#: groups.1.xml:50(firstname) groupmod.8.xml:51(firstname)
+#: groupmems.8.xml:54(firstname) groupdel.8.xml:51(firstname)
+#: groupadd.8.xml:53(firstname) gpasswd.1.xml:55(firstname)
+#: faillog.8.xml:50(firstname) faillog.5.xml:50(firstname)
+#: expiry.1.xml:54(firstname) chsh.1.xml:53(firstname)
+#: chpasswd.8.xml:54(firstname) chgpasswd.8.xml:50(firstname)
+#: chfn.1.xml:53(firstname) chage.1.xml:51(firstname)
+msgid "Nicolas"
+msgstr ""
+
+#: vipw.8.xml:53(surname) usermod.8.xml:58(surname) userdel.8.xml:57(surname)
+#: useradd.8.xml:70(surname) suauth.5.xml:51(surname) su.1.xml:68(surname)
+#: sg.1.xml:52(surname) shadow.5.xml:51(surname) shadow.3.xml:51(surname)
+#: pwconv.8.xml:57(surname) pwck.8.xml:57(surname) porttime.5.xml:51(surname)
+#: passwd.5.xml:51(surname) passwd.1.xml:58(surname) nologin.8.xml:40(surname)
+#: newusers.8.xml:67(surname) newgrp.1.xml:52(surname)
+#: logoutd.8.xml:51(surname) login.defs.5.xml:118(surname)
+#: login.access.5.xml:52(surname) login.1.xml:84(surname)
+#: limits.5.xml:53(surname) lastlog.8.xml:53(surname) gshadow.5.xml:39(surname)
+#: grpck.8.xml:52(surname) groups.1.xml:51(surname) groupmod.8.xml:52(surname)
+#: groupmems.8.xml:55(surname) groupdel.8.xml:52(surname)
+#: groupadd.8.xml:54(surname) gpasswd.1.xml:56(surname)
+#: faillog.8.xml:51(surname) faillog.5.xml:51(surname) expiry.1.xml:55(surname)
+#: chsh.1.xml:54(surname) chpasswd.8.xml:55(surname)
+#: chgpasswd.8.xml:51(surname) chfn.1.xml:54(surname) chage.1.xml:52(surname)
+msgid "François"
+msgstr ""
+
+#: vipw.8.xml:54(email) usermod.8.xml:59(email) userdel.8.xml:58(email)
+#: useradd.8.xml:71(email) suauth.5.xml:52(email) su.1.xml:69(email)
+#: sg.1.xml:53(email) shadow.5.xml:52(email) shadow.3.xml:52(email)
+#: pwconv.8.xml:58(email) pwck.8.xml:58(email) porttime.5.xml:52(email)
+#: passwd.5.xml:52(email) passwd.1.xml:59(email) nologin.8.xml:41(email)
+#: newusers.8.xml:68(email) newgrp.1.xml:53(email) logoutd.8.xml:52(email)
+#: login.defs.5.xml:119(email) login.access.5.xml:53(email)
+#: login.1.xml:85(email) limits.5.xml:54(email) lastlog.8.xml:54(email)
+#: gshadow.5.xml:40(email) grpck.8.xml:53(email) groups.1.xml:52(email)
+#: groupmod.8.xml:53(email) groupmems.8.xml:56(email) groupdel.8.xml:53(email)
+#: groupadd.8.xml:55(email) gpasswd.1.xml:57(email) faillog.8.xml:52(email)
+#: faillog.5.xml:52(email) expiry.1.xml:56(email) chsh.1.xml:55(email)
+#: chpasswd.8.xml:56(email) chgpasswd.8.xml:52(email) chfn.1.xml:55(email)
+#: chage.1.xml:53(email)
+msgid "nicolas.francois@centraliens.net"
+msgstr ""
+
+#: vipw.8.xml:55(contrib) usermod.8.xml:60(contrib) userdel.8.xml:59(contrib)
+#: useradd.8.xml:72(contrib) suauth.5.xml:53(contrib) su.1.xml:70(contrib)
+#: sg.1.xml:54(contrib) shadow.5.xml:53(contrib) shadow.3.xml:53(contrib)
+#: pwconv.8.xml:59(contrib) pwck.8.xml:59(contrib) porttime.5.xml:53(contrib)
+#: passwd.5.xml:53(contrib) passwd.1.xml:60(contrib) nologin.8.xml:42(contrib)
+#: newusers.8.xml:69(contrib) newgrp.1.xml:54(contrib)
+#: logoutd.8.xml:53(contrib) login.defs.5.xml:120(contrib)
+#: login.access.5.xml:54(contrib) login.1.xml:86(contrib)
+#: limits.5.xml:55(contrib) lastlog.8.xml:55(contrib) gshadow.5.xml:42(contrib)
+#: grpck.8.xml:54(contrib) groups.1.xml:53(contrib) groupmod.8.xml:54(contrib)
+#: groupmems.8.xml:57(contrib) groupdel.8.xml:54(contrib)
+#: groupadd.8.xml:56(contrib) gpasswd.1.xml:58(contrib)
+#: faillog.8.xml:53(contrib) faillog.5.xml:53(contrib) expiry.1.xml:57(contrib)
+#: chsh.1.xml:56(contrib) chpasswd.8.xml:57(contrib)
+#: chgpasswd.8.xml:53(contrib) chfn.1.xml:56(contrib) chage.1.xml:54(contrib)
+msgid "shadow-utils maintainer, 2007 - now"
+msgstr ""
+
+# Swedish translation of shadow manpage.
+# Copyright (C) 2006 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the shadow package.
+# Daniel Nylander <po@danielnylander.se>, 2006.
+#
+#: vipw.8.xml:59(refentrytitle) vipw.8.xml:66(refname) vipw.8.xml:75(command)
+#: login.defs.5.xml:520(term)
+msgid "vipw"
+msgstr "vipw"
+
+#: vipw.8.xml:60(manvolnum) usermod.8.xml:65(manvolnum)
+#: userdel.8.xml:64(manvolnum) userdel.8.xml:276(replaceable)
+#: useradd.8.xml:77(manvolnum) pwconv.8.xml:64(manvolnum)
+#: pwck.8.xml:64(manvolnum) nologin.8.xml:47(manvolnum)
+#: newusers.8.xml:74(manvolnum) logoutd.8.xml:58(manvolnum)
+#: lastlog.8.xml:60(manvolnum) grpck.8.xml:59(manvolnum)
+#: groupmod.8.xml:59(manvolnum) groupmems.8.xml:62(manvolnum)
+#: groupdel.8.xml:59(manvolnum) groupdel.8.xml:198(replaceable)
+#: groupadd.8.xml:61(manvolnum) faillog.8.xml:58(manvolnum)
+#: faillog.5.xml:111(manvolnum) chpasswd.8.xml:62(manvolnum)
+#: chgpasswd.8.xml:58(manvolnum)
+msgid "8"
+msgstr "8"
+
+#: vipw.8.xml:61(refmiscinfo) usermod.8.xml:66(refmiscinfo)
+#: userdel.8.xml:65(refmiscinfo) useradd.8.xml:78(refmiscinfo)
+#: pwconv.8.xml:65(refmiscinfo) pwck.8.xml:65(refmiscinfo)
+#: nologin.8.xml:48(refmiscinfo) newusers.8.xml:75(refmiscinfo)
+#: logoutd.8.xml:59(refmiscinfo) lastlog.8.xml:61(refmiscinfo)
+#: grpck.8.xml:60(refmiscinfo) groupmod.8.xml:60(refmiscinfo)
+#: groupmems.8.xml:63(refmiscinfo) groupdel.8.xml:60(refmiscinfo)
+#: groupadd.8.xml:62(refmiscinfo) faillog.8.xml:59(refmiscinfo)
+#: chpasswd.8.xml:63(refmiscinfo) chgpasswd.8.xml:59(refmiscinfo)
+msgid "System Management Commands"
+msgstr "Systemhanteringskommandon"
+
+#: vipw.8.xml:62(refmiscinfo) usermod.8.xml:67(refmiscinfo)
+#: userdel.8.xml:66(refmiscinfo) useradd.8.xml:79(refmiscinfo)
+#: suauth.5.xml:60(refmiscinfo) su.1.xml:77(refmiscinfo)
+#: sg.1.xml:61(refmiscinfo) shadow.5.xml:60(refmiscinfo)
+#: shadow.3.xml:60(refmiscinfo) pwconv.8.xml:66(refmiscinfo)
+#: pwck.8.xml:66(refmiscinfo) porttime.5.xml:60(refmiscinfo)
+#: passwd.5.xml:60(refmiscinfo) passwd.1.xml:67(refmiscinfo)
+#: nologin.8.xml:49(refmiscinfo) newusers.8.xml:76(refmiscinfo)
+#: newgrp.1.xml:61(refmiscinfo) logoutd.8.xml:60(refmiscinfo)
+#: login.defs.5.xml:127(refmiscinfo) login.access.5.xml:61(refmiscinfo)
+#: login.1.xml:93(refmiscinfo) limits.5.xml:62(refmiscinfo)
+#: lastlog.8.xml:62(refmiscinfo) gshadow.5.xml:49(refmiscinfo)
+#: grpck.8.xml:61(refmiscinfo) groups.1.xml:60(refmiscinfo)
+#: groupmod.8.xml:61(refmiscinfo) groupmems.8.xml:64(refmiscinfo)
+#: groupdel.8.xml:61(refmiscinfo) groupadd.8.xml:63(refmiscinfo)
+#: gpasswd.1.xml:65(refmiscinfo) faillog.8.xml:60(refmiscinfo)
+#: faillog.5.xml:60(refmiscinfo) expiry.1.xml:64(refmiscinfo)
+#: chsh.1.xml:63(refmiscinfo) chpasswd.8.xml:64(refmiscinfo)
+#: chgpasswd.8.xml:60(refmiscinfo) chfn.1.xml:63(refmiscinfo)
+#: chage.1.xml:61(refmiscinfo)
+#, fuzzy
+#| msgid "shadow"
+msgid "shadow-utils"
+msgstr "shadow"
+
+#: vipw.8.xml:67(refname) vipw.8.xml:81(command)
+msgid "vigr"
+msgstr "vigr"
+
+#: vipw.8.xml:68(refpurpose)
+msgid "edit the password, group, shadow-password or shadow-group file"
+msgstr "redigera lösenordet, grupp, skugglösenord eller skuggruppfil"
+
+#: vipw.8.xml:77(replaceable) vipw.8.xml:83(replaceable)
+#: usermod.8.xml:79(replaceable) userdel.8.xml:76(arg)
+#: useradd.8.xml:90(replaceable) useradd.8.xml:102(replaceable)
+#: su.1.xml:88(replaceable) pwconv.8.xml:81(replaceable)
+#: pwconv.8.xml:87(replaceable) pwconv.8.xml:93(replaceable)
+#: pwconv.8.xml:99(replaceable) pwck.8.xml:77(arg) passwd.1.xml:79(replaceable)
+#: newusers.8.xml:88(replaceable) lastlog.8.xml:74(replaceable)
+#: grpck.8.xml:72(arg) groupmod.8.xml:73(replaceable)
+#: groupdel.8.xml:73(replaceable) groupadd.8.xml:75(replaceable)
+#: faillog.8.xml:72(replaceable) chsh.1.xml:75(replaceable)
+#: chpasswd.8.xml:76(replaceable) chgpasswd.8.xml:72(replaceable)
+#: chfn.1.xml:75(replaceable) chage.1.xml:72(replaceable)
+msgid "options"
+msgstr "flaggor"
+
+#: vipw.8.xml:89(title) usermod.8.xml:86(title) userdel.8.xml:84(title)
+#: useradd.8.xml:108(title) suauth.5.xml:75(title) su.1.xml:103(title)
+#: sg.1.xml:81(title) shadow.5.xml:69(title) shadow.3.xml:118(title)
+#: shadow.3.xml:174(title) pwconv.8.xml:105(title) pwck.8.xml:92(title)
+#: porttime.5.xml:69(title) passwd.5.xml:69(title) passwd.1.xml:88(title)
+#: nologin.8.xml:64(title) newusers.8.xml:97(title) newgrp.1.xml:77(title)
+#: logoutd.8.xml:75(title) login.defs.5.xml:136(title)
+#: login.access.5.xml:70(title) login.1.xml:125(title) limits.5.xml:72(title)
+#: lastlog.8.xml:80(title) gshadow.5.xml:58(title) grpck.8.xml:83(title)
+#: groups.1.xml:78(title) groupmod.8.xml:80(title) groupmems.8.xml:85(title)
+#: groupdel.8.xml:80(title) groupadd.8.xml:84(title) gpasswd.1.xml:94(title)
+#: faillog.8.xml:78(title) faillog.5.xml:69(title) expiry.1.xml:82(title)
+#: chsh.1.xml:84(title) chpasswd.8.xml:82(title) chgpasswd.8.xml:78(title)
+#: chfn.1.xml:84(title) chage.1.xml:81(title)
+msgid "DESCRIPTION"
+msgstr "BESKRIVNING"
+
+#: vipw.8.xml:90(para)
+#, fuzzy
+msgid ""
+"The <command>vipw</command> and <command>vigr</command> commands edits the "
+"files <filename>/etc/passwd</filename> and <filename>/etc/group</filename>, "
+"respectively. With the <option>-s</option> flag, they will edit the shadow "
+"versions of those files, <filename>/etc/shadow</filename> and <filename>/etc/"
+"gshadow</filename>, respectively. The programs will set the appropriate "
+"locks to prevent file corruption. When looking for an editor, the programs "
+"will first try the environment variable <envar>$VISUAL</envar>, then the "
+"environment variable <envar>$EDITOR</envar>, and finally the default editor, "
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<command>vipw</command> and <command>vigr</command> redigerar filerna "
+"<filename>/etc/passwd</filename> och <filename>/etc/group</filename>, "
+"respektive. Med flaggan <option>-s</option>, kommer de att redigera "
+"skuggversionerna av dessa filer, <filename>/etc/shadow</filename> och "
+"<filename>/etc/gshadow</filename>, respektive. Programmen kommer att ställa "
+"in de lämpliga lås som behövs för att förhindra att filerna skadas. När de "
+"letar efter en redigerare kommer programmen att första försöka med "
+"miljövariabeln <envar>$VISUAL</envar>, sedan miljövariabeln <envar>$EDITOR</"
+"envar> och till sist standardredigeraren, <citerefentry><refentrytitle>vi</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+#: vipw.8.xml:107(title) usermod.8.xml:94(title) userdel.8.xml:93(title)
+#: useradd.8.xml:126(title) su.1.xml:144(title) pwconv.8.xml:187(title)
+#: pwck.8.xml:176(title) passwd.1.xml:174(title) newusers.8.xml:266(title)
+#: login.1.xml:210(title) lastlog.8.xml:92(title) grpck.8.xml:147(title)
+#: groupmod.8.xml:89(title) groupmems.8.xml:100(title) groupdel.8.xml:88(title)
+#: groupadd.8.xml:93(title) gpasswd.1.xml:134(title) faillog.8.xml:89(title)
+#: expiry.1.xml:91(title) chsh.1.xml:95(title) chpasswd.8.xml:130(title)
+#: chgpasswd.8.xml:105(title) chfn.1.xml:111(title) chage.1.xml:91(title)
+msgid "OPTIONS"
+msgstr "FLAGGOR"
+
+#: vipw.8.xml:108(para)
+msgid ""
+"The options which apply to the <command>vipw</command> and <command>vigr</"
+"command> commands are:"
+msgstr ""
+"Flaggorna som gäller för kommandona <command>vipw</command> och "
+"<command>vigr</command> är:"
+
+#: vipw.8.xml:114(term)
+msgid "<option>-g</option>, <option>--group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+#: vipw.8.xml:116(para)
+msgid "Edit group database."
+msgstr "Redigera gruppdatabasen."
+
+#: vipw.8.xml:120(term) userdel.8.xml:123(term) useradd.8.xml:278(term)
+#: pwconv.8.xml:195(term) pwck.8.xml:196(term) passwd.1.xml:214(term)
+#: newusers.8.xml:296(term) lastlog.8.xml:119(term) grpck.8.xml:157(term)
+#: groupmod.8.xml:129(term) groupmems.8.xml:142(term) groupdel.8.xml:95(term)
+#: groupadd.8.xml:131(term) gpasswd.1.xml:173(term) faillog.8.xml:122(term)
+#: expiry.1.xml:112(term) chsh.1.xml:101(term) chpasswd.8.xml:171(term)
+#: chgpasswd.8.xml:131(term) chage.1.xml:129(term)
+msgid "<option>-h</option>, <option>--help</option>"
+msgstr "<option>-h</option>, <option>--help</option>"
+
+#: vipw.8.xml:122(para) userdel.8.xml:125(para) useradd.8.xml:280(para)
+#: pwconv.8.xml:197(para) pwck.8.xml:198(para) passwd.1.xml:216(para)
+#: newusers.8.xml:298(para) lastlog.8.xml:123(para) grpck.8.xml:159(para)
+#: groupmod.8.xml:131(para) groupmems.8.xml:144(para) groupdel.8.xml:97(para)
+#: groupadd.8.xml:133(para) gpasswd.1.xml:175(para) faillog.8.xml:124(para)
+#: expiry.1.xml:114(para) chsh.1.xml:103(para) chpasswd.8.xml:173(para)
+#: chgpasswd.8.xml:133(para) chfn.1.xml:169(para) chage.1.xml:131(para)
+msgid "Display help message and exit."
+msgstr "Visa hjälpmeddelande och avsluta."
+
+#: vipw.8.xml:126(term)
+msgid "<option>-p</option>, <option>--passwd</option>"
+msgstr "<option>-p</option>, <option>--passwd</option>"
+
+#: vipw.8.xml:128(para)
+msgid "Edit passwd database."
+msgstr "Redigera lösenordsdatabasen."
+
+#: vipw.8.xml:132(term) pwck.8.xml:202(term) passwd.1.xml:281(term)
+msgid "<option>-q</option>, <option>--quiet</option>"
+msgstr "<option>-q</option>, <option>--quiet</option>"
+
+#: vipw.8.xml:134(para) passwd.1.xml:285(para)
+msgid "Quiet mode."
+msgstr "Tyst läge."
+
+#: vipw.8.xml:138(term) usermod.8.xml:322(term) userdel.8.xml:146(term)
+#: useradd.8.xml:457(term) pwconv.8.xml:201(term) pwck.8.xml:219(term)
+#: passwd.1.xml:301(term) newusers.8.xml:321(term) lastlog.8.xml:127(term)
+#: grpck.8.xml:173(term) groupmod.8.xml:178(term) groupmems.8.xml:165(term)
+#: groupdel.8.xml:101(term) groupadd.8.xml:204(term) faillog.8.xml:180(term)
+#: chsh.1.xml:107(term) chpasswd.8.xml:188(term) chgpasswd.8.xml:146(term)
+#: chfn.1.xml:153(term) chage.1.xml:203(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_DIR</"
+#| "replaceable>"
+msgid ""
+"<option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HEM_KAT</"
+"replaceable>"
+
+#: vipw.8.xml:142(para) usermod.8.xml:326(para) userdel.8.xml:150(para)
+#: useradd.8.xml:461(para) pwconv.8.xml:205(para) pwck.8.xml:223(para)
+#: passwd.1.xml:305(para) newusers.8.xml:325(para) lastlog.8.xml:131(para)
+#: grpck.8.xml:177(para) groupmod.8.xml:182(para) groupmems.8.xml:169(para)
+#: groupdel.8.xml:105(para) groupadd.8.xml:208(para) gpasswd.1.xml:185(para)
+#: faillog.8.xml:184(para) chsh.1.xml:111(para) chpasswd.8.xml:192(para)
+#: chgpasswd.8.xml:150(para) chfn.1.xml:157(para) chage.1.xml:207(para)
+msgid ""
+"Apply changes in the <replaceable>CHROOT_DIR</replaceable> directory and use "
+"the configuration files from the <replaceable>CHROOT_DIR</replaceable> "
+"directory."
+msgstr ""
+
+#: vipw.8.xml:150(term)
+msgid "<option>-s</option>, <option>--shadow</option>"
+msgstr "<option>-s</option>, <option>--shadow</option>"
+
+#: vipw.8.xml:152(para)
+msgid "Edit shadow or gshadow database."
+msgstr "Redigera shadow- eller gshadow-databasen."
+
+#: vipw.8.xml:156(term)
+#, fuzzy
+#| msgid "<option>-q</option>, <option>--quiet</option>"
+msgid "<option>-u</option>, <option>--user</option>"
+msgstr "<option>-q</option>, <option>--quiet</option>"
+
+#: vipw.8.xml:158(para)
+msgid "Indicates which user's tcb shadow file to edit."
+msgstr ""
+
+#: vipw.8.xml:165(title) usermod.8.xml:524(title) userdel.8.xml:188(title)
+#: useradd.8.xml:676(title) su.1.xml:338(title) sg.1.xml:98(title)
+#: pwconv.8.xml:227(title) pwck.8.xml:262(title) passwd.1.xml:395(title)
+#: newusers.8.xml:375(title) newgrp.1.xml:109(title) login.1.xml:294(title)
+#: lastlog.8.xml:205(title) grpck.8.xml:209(title) groupmod.8.xml:210(title)
+#: groupmems.8.xml:199(title) groupdel.8.xml:145(title)
+#: groupadd.8.xml:236(title) gpasswd.1.xml:264(title) chsh.1.xml:154(title)
+#: chpasswd.8.xml:239(title) chgpasswd.8.xml:198(title) chfn.1.xml:193(title)
+#: chage.1.xml:250(title)
+msgid "CONFIGURATION"
+msgstr ""
+
+#: vipw.8.xml:166(para) usermod.8.xml:525(para) userdel.8.xml:189(para)
+#: useradd.8.xml:677(para) su.1.xml:339(para) sg.1.xml:99(para)
+#: pwck.8.xml:263(para) passwd.1.xml:396(para) newusers.8.xml:376(para)
+#: newgrp.1.xml:110(para) login.1.xml:295(para) lastlog.8.xml:206(para)
+#: grpck.8.xml:210(para) groupmod.8.xml:211(para) groupmems.8.xml:200(para)
+#: groupdel.8.xml:146(para) groupadd.8.xml:237(para) gpasswd.1.xml:265(para)
+#: chsh.1.xml:155(para) chpasswd.8.xml:240(para) chgpasswd.8.xml:199(para)
+#: chfn.1.xml:194(para) chage.1.xml:251(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of this tool:"
+msgstr ""
+
+#: vipw.8.xml:30(term) usermod.8.xml:30(term) userdel.8.xml:30(term)
+#: useradd.8.xml:30(term) pwconv.8.xml:30(term) pwck.8.xml:30(term)
+#: login.defs.5.xml:30(term) chage.1.xml:30(term)
+#, fuzzy
+msgid "<option>USE_TCB</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: vipw.8.xml:32(para) usermod.8.xml:32(para) userdel.8.xml:32(para)
+#: useradd.8.xml:32(para) pwconv.8.xml:32(para) pwck.8.xml:32(para)
+#: login.defs.5.xml:32(para) chage.1.xml:32(para)
+#, fuzzy
+#| msgid ""
+#| "Refer to <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#| "manvolnum></citerefentry> for details on how this string is interpreted."
+msgid ""
+"If <replaceable>yes</replaceable>, the <citerefentry><refentrytitle>tcb</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry> password shadowing "
+"scheme will be used."
+msgstr ""
+"Referera till <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry> för detaljer om hur "
+"denna sträng tolkas."
+
+#: vipw.8.xml:177(title)
+msgid "ENVIRONMENT"
+msgstr ""
+
+#: vipw.8.xml:180(option)
+msgid "VISUAL"
+msgstr ""
+
+#: vipw.8.xml:182(para)
+msgid "Editor to be used."
+msgstr ""
+
+#: vipw.8.xml:186(option)
+#, fuzzy
+#| msgid "HYSTORY"
+msgid "EDITOR"
+msgstr "HISTORIK"
+
+#: vipw.8.xml:188(para)
+msgid "Editor to be used if <option>VISUAL</option> is not set."
+msgstr ""
+
+#: vipw.8.xml:195(title) usermod.8.xml:542(title) userdel.8.xml:205(title)
+#: useradd.8.xml:706(title) suauth.5.xml:193(title) su.1.xml:366(title)
+#: sg.1.xml:110(title) shadow.5.xml:255(title) shadow.3.xml:226(title)
+#: pwconv.8.xml:250(title) pwck.8.xml:279(title) porttime.5.xml:130(title)
+#: passwd.5.xml:160(title) passwd.1.xml:413(title) newusers.8.xml:411(title)
+#: newgrp.1.xml:121(title) logoutd.8.xml:89(title)
+#: login.access.5.xml:121(title) login.1.xml:338(title) limits.5.xml:196(title)
+#: lastlog.8.xml:217(title) gshadow.5.xml:156(title) grpck.8.xml:221(title)
+#: groups.1.xml:100(title) groupmod.8.xml:222(title) groupmems.8.xml:211(title)
+#: groupdel.8.xml:157(title) groupadd.8.xml:250(title) gpasswd.1.xml:279(title)
+#: faillog.8.xml:243(title) faillog.5.xml:96(title) expiry.1.xml:121(title)
+#: chsh.1.xml:167(title) chpasswd.8.xml:255(title) chgpasswd.8.xml:213(title)
+#: chfn.1.xml:207(title) chage.1.xml:262(title)
+msgid "FILES"
+msgstr "FILER"
+
+#: vipw.8.xml:198(filename) usermod.8.xml:545(filename)
+#: userdel.8.xml:208(filename) useradd.8.xml:721(filename)
+#: sg.1.xml:125(filename) pwck.8.xml:282(filename) newusers.8.xml:426(filename)
+#: newgrp.1.xml:136(filename) gshadow.5.xml:159(filename)
+#: grpck.8.xml:224(filename) groups.1.xml:103(filename)
+#: groupmod.8.xml:225(filename) groupmems.8.xml:214(filename)
+#: groupdel.8.xml:160(filename) groupadd.8.xml:253(filename)
+#: gpasswd.1.xml:72(filename) gpasswd.1.xml:75(filename)
+#: gpasswd.1.xml:282(filename) chgpasswd.8.xml:216(filename)
+msgid "/etc/group"
+msgstr "/etc/group"
+
+#: vipw.8.xml:200(para) usermod.8.xml:547(para) userdel.8.xml:210(para)
+#: useradd.8.xml:723(para) sg.1.xml:127(para) pwck.8.xml:284(para)
+#: newusers.8.xml:428(para) newgrp.1.xml:138(para) gshadow.5.xml:161(para)
+#: grpck.8.xml:226(para) groups.1.xml:105(para) groupmod.8.xml:227(para)
+#: groupmems.8.xml:216(para) groupdel.8.xml:162(para) groupadd.8.xml:255(para)
+#: gpasswd.1.xml:284(para) chgpasswd.8.xml:218(para)
+msgid "Group account information."
+msgstr "Gruppkontoinformation."
+
+#: vipw.8.xml:204(filename) usermod.8.xml:551(filename)
+#: useradd.8.xml:727(filename) sg.1.xml:131(filename)
+#: newusers.8.xml:432(filename) newgrp.1.xml:142(filename)
+#: gshadow.5.xml:165(filename) grpck.8.xml:230(filename)
+#: groupmod.8.xml:231(filename) groupmems.8.xml:220(filename)
+#: groupdel.8.xml:166(filename) groupadd.8.xml:259(filename)
+#: gpasswd.1.xml:76(filename) gpasswd.1.xml:288(filename)
+#: chgpasswd.8.xml:222(filename)
+msgid "/etc/gshadow"
+msgstr "/etc/gshadow"
+
+#: vipw.8.xml:206(para) usermod.8.xml:553(para) useradd.8.xml:729(para)
+#: sg.1.xml:133(para) newusers.8.xml:434(para) newgrp.1.xml:144(para)
+#: gshadow.5.xml:167(para) grpck.8.xml:232(para) groupmod.8.xml:233(para)
+#: groupdel.8.xml:168(para) groupadd.8.xml:261(para) gpasswd.1.xml:290(para)
+#: chgpasswd.8.xml:224(para)
+msgid "Secure group account information."
+msgstr "Säker gruppkontoinformation."
+
+#: vipw.8.xml:210(filename) usermod.8.xml:563(filename)
+#: userdel.8.xml:220(filename) useradd.8.xml:709(filename)
+#: su.1.xml:369(filename) sg.1.xml:113(filename) shadow.5.xml:258(filename)
+#: pwck.8.xml:288(filename) passwd.5.xml:163(filename)
+#: passwd.1.xml:416(filename) newusers.8.xml:414(filename)
+#: newgrp.1.xml:124(filename) login.1.xml:353(filename)
+#: grpck.8.xml:236(filename) groupmod.8.xml:243(filename)
+#: expiry.1.xml:124(filename) chsh.1.xml:170(filename)
+#: chpasswd.8.xml:258(filename) chfn.1.xml:216(filename)
+#: chage.1.xml:266(filename)
+msgid "/etc/passwd"
+msgstr "/etc/passwd"
+
+#: vipw.8.xml:212(para) usermod.8.xml:565(para) userdel.8.xml:222(para)
+#: useradd.8.xml:711(para) su.1.xml:371(para) sg.1.xml:115(para)
+#: shadow.5.xml:260(para) pwck.8.xml:290(para) passwd.5.xml:165(para)
+#: passwd.1.xml:418(para) newusers.8.xml:416(para) newgrp.1.xml:126(para)
+#: login.1.xml:355(para) grpck.8.xml:238(para) groupmod.8.xml:245(para)
+#: expiry.1.xml:126(para) chsh.1.xml:172(para) chpasswd.8.xml:260(para)
+#: chfn.1.xml:218(para) chage.1.xml:269(para)
+msgid "User account information."
+msgstr "Användarkontoinformation."
+
+#: vipw.8.xml:216(filename) usermod.8.xml:569(filename)
+#: userdel.8.xml:226(filename) useradd.8.xml:715(filename)
+#: su.1.xml:375(filename) sg.1.xml:119(filename) shadow.5.xml:264(filename)
+#: shadow.3.xml:229(filename) pwck.8.xml:294(filename)
+#: passwd.5.xml:169(filename) passwd.1.xml:422(filename)
+#: newusers.8.xml:420(filename) newgrp.1.xml:130(filename)
+#: login.1.xml:359(filename) expiry.1.xml:130(filename)
+#: chpasswd.8.xml:264(filename) chage.1.xml:274(filename)
+msgid "/etc/shadow"
+msgstr "/etc/shadow"
+
+#: vipw.8.xml:218(para) usermod.8.xml:571(para) userdel.8.xml:228(para)
+#: useradd.8.xml:717(para) su.1.xml:377(para) sg.1.xml:121(para)
+#: shadow.5.xml:266(para) shadow.3.xml:231(para) pwck.8.xml:296(para)
+#: passwd.1.xml:424(para) newusers.8.xml:422(para) newgrp.1.xml:132(para)
+#: login.1.xml:361(para) expiry.1.xml:132(para) chpasswd.8.xml:266(para)
+#: chage.1.xml:277(para)
+msgid "Secure user account information."
+msgstr "Säker användarkontoinformation."
+
+#: vipw.8.xml:225(title) usermod.8.xml:590(title) userdel.8.xml:325(title)
+#: useradd.8.xml:835(title) suauth.5.xml:222(title) su.1.xml:437(title)
+#: sg.1.xml:140(title) shadow.5.xml:283(title) shadow.3.xml:238(title)
+#: pwconv.8.xml:262(title) pwck.8.xml:354(title) porttime.5.xml:142(title)
+#: passwd.5.xml:188(title) passwd.1.xml:494(title) nologin.8.xml:81(title)
+#: newusers.8.xml:465(title) newgrp.1.xml:151(title)
+#: login.defs.5.xml:547(title) login.access.5.xml:133(title)
+#: login.1.xml:398(title) limits.5.xml:206(title) gshadow.5.xml:174(title)
+#: grpck.8.xml:290(title) groups.1.xml:112(title) groupmod.8.xml:321(title)
+#: groupmems.8.xml:229(title) groupdel.8.xml:214(title)
+#: groupadd.8.xml:341(title) gpasswd.1.xml:297(title) faillog.8.xml:255(title)
+#: faillog.5.xml:108(title) expiry.1.xml:139(title) chsh.1.xml:191(title)
+#: chpasswd.8.xml:285(title) chgpasswd.8.xml:237(title) chfn.1.xml:225(title)
+#: chage.1.xml:317(title)
+msgid "SEE ALSO"
+msgstr "SE OCKSÅ"
+
+#: vipw.8.xml:226(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>login</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>"
+msgid ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry condition=\"tcb"
+"\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+"condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>"
+
+#: usermod.8.xml:46(firstname) userdel.8.xml:45(firstname)
+#: useradd.8.xml:58(firstname) su.1.xml:56(firstname) sg.1.xml:40(firstname)
+#: shadow.5.xml:39(firstname) shadow.3.xml:39(firstname)
+#: pwck.8.xml:45(firstname) porttime.5.xml:39(firstname)
+#: passwd.5.xml:39(firstname) passwd.1.xml:46(firstname)
+#: newusers.8.xml:55(firstname) newgrp.1.xml:40(firstname)
+#: logoutd.8.xml:39(firstname) login.defs.5.xml:106(firstname)
+#: login.1.xml:72(firstname) lastlog.8.xml:41(firstname)
+#: grpck.8.xml:40(firstname) groups.1.xml:39(firstname)
+#: groupmod.8.xml:40(firstname) groupdel.8.xml:40(firstname)
+#: groupadd.8.xml:42(firstname) faillog.8.xml:39(firstname)
+#: faillog.5.xml:39(firstname) expiry.1.xml:43(firstname)
+#: chsh.1.xml:42(firstname) chpasswd.8.xml:43(firstname)
+#: chfn.1.xml:42(firstname) chage.1.xml:40(firstname)
+msgid "Julianne Frances"
+msgstr ""
+
+#: usermod.8.xml:47(surname) userdel.8.xml:46(surname)
+#: useradd.8.xml:59(surname) su.1.xml:57(surname) sg.1.xml:41(surname)
+#: shadow.5.xml:40(surname) shadow.3.xml:40(surname) pwck.8.xml:46(surname)
+#: porttime.5.xml:40(surname) passwd.5.xml:40(surname) passwd.1.xml:47(surname)
+#: newusers.8.xml:56(surname) newgrp.1.xml:41(surname)
+#: logoutd.8.xml:40(surname) login.defs.5.xml:107(surname)
+#: login.1.xml:73(surname) lastlog.8.xml:42(surname) grpck.8.xml:41(surname)
+#: groups.1.xml:40(surname) groupmod.8.xml:41(surname)
+#: groupdel.8.xml:41(surname) groupadd.8.xml:43(surname)
+#: faillog.8.xml:40(surname) faillog.5.xml:40(surname) expiry.1.xml:44(surname)
+#: chsh.1.xml:43(surname) chpasswd.8.xml:44(surname) chfn.1.xml:43(surname)
+#: chage.1.xml:41(surname)
+msgid "Haugh"
+msgstr ""
+
+#: usermod.8.xml:48(contrib) userdel.8.xml:47(contrib)
+#: useradd.8.xml:60(contrib) sg.1.xml:42(contrib) newusers.8.xml:57(contrib)
+#: newgrp.1.xml:42(contrib) logoutd.8.xml:41(contrib)
+#: login.defs.5.xml:108(contrib) groups.1.xml:41(contrib)
+#: groupmod.8.xml:42(contrib) groupdel.8.xml:42(contrib)
+#: groupadd.8.xml:44(contrib) chpasswd.8.xml:45(contrib)
+msgid "Creation, 1991"
+msgstr ""
+
+#: usermod.8.xml:64(refentrytitle) usermod.8.xml:71(refname)
+#: usermod.8.xml:77(command) login.defs.5.xml:510(term)
+msgid "usermod"
+msgstr "usermod"
+
+#: usermod.8.xml:72(refpurpose)
+msgid "modify a user account"
+msgstr "ändra ett användarkonto"
+
+#: usermod.8.xml:81(replaceable) userdel.8.xml:78(replaceable)
+#: useradd.8.xml:92(replaceable) passwd.1.xml:82(replaceable)
+#: chsh.1.xml:78(replaceable) chfn.1.xml:78(replaceable)
+#: chage.1.xml:75(replaceable)
+msgid "LOGIN"
+msgstr "INLOGGNINGSNAMN"
+
+#: usermod.8.xml:87(para)
+msgid ""
+"The <command>usermod</command> command modifies the system account files to "
+"reflect the changes that are specified on the command line."
+msgstr ""
+"Kommandot <command>usermod</command> ändrar systemkontofiler enligt det som "
+"anges på kommandoraden."
+
+#: usermod.8.xml:95(para)
+msgid "The options which apply to the <command>usermod</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>usermod</command> är:"
+
+#: usermod.8.xml:101(term)
+msgid "<option>-a</option>, <option>--append</option>"
+msgstr "<option>-a</option>, <option>--append</option>"
+
+#: usermod.8.xml:105(para)
+#, fuzzy
+#| msgid ""
+#| "Add the user to the supplemental group(s). Use only with <option>-G</"
+#| "option> option."
+msgid ""
+"Add the user to the supplementary group(s). Use only with the <option>-G</"
+"option> option."
+msgstr ""
+"Lägg till användaren till tilläggsgrupp(er). Använd endast med flaggan "
+"<option>-G</option>."
+
+#: usermod.8.xml:112(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-b</option>, <option>--badnames</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: usermod.8.xml:116(para) useradd.8.xml:135(para) pwck.8.xml:190(para)
+#: newusers.8.xml:276(para)
+msgid "Allow names that do not conform to standards."
+msgstr ""
+
+#: usermod.8.xml:122(term) useradd.8.xml:162(term)
+msgid ""
+"<option>-c</option>, <option>--comment</option>&nbsp;<replaceable>COMMENT</"
+"replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--comment</option>&nbsp;<replaceable>KOMMENTAR</"
+"replaceable>"
+
+#: usermod.8.xml:126(para)
+msgid ""
+"The new value of the user's password file comment field. It is normally "
+"modified using the <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> utility."
+msgstr ""
+"Det nya värdet för användarens kommentarsfält i lösenordsfilen. Vanligtvis "
+"ändras det med verktyget <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+#: usermod.8.xml:135(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home-dir</option>&nbsp;"
+#| "<replaceable>HOME_DIR</replaceable>"
+msgid ""
+"<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home-dir</option>&nbsp;<replaceable>HEM_KAT</"
+"replaceable>"
+
+#: usermod.8.xml:139(para)
+#, fuzzy
+#| msgid "user home directory"
+msgid "The user's new login directory."
+msgstr "användarens hemkatalog"
+
+#: usermod.8.xml:142(para)
+msgid ""
+"If the <option>-m</option> option is given, the contents of the current home "
+"directory will be moved to the new home directory, which is created if it "
+"does not already exist."
+msgstr ""
+
+#: usermod.8.xml:151(term) useradd.8.xml:200(term) useradd.8.xml:577(term)
+msgid ""
+"<option>-e</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>EXPIRE_DATE</replaceable>"
+msgstr ""
+"<option>-e</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>UTGÅNGSDATUM</replaceable>"
+
+#: usermod.8.xml:155(para) useradd.8.xml:204(para)
+msgid ""
+"The date on which the user account will be disabled. The date is specified "
+"in the format <emphasis remap=\"I\">YYYY-MM-DD</emphasis>."
+msgstr ""
+
+#: usermod.8.xml:159(para)
+msgid ""
+"An empty <replaceable>EXPIRE_DATE</replaceable> argument will disable the "
+"expiration of the account."
+msgstr ""
+
+#: usermod.8.xml:163(para) usermod.8.xml:184(para)
+#, fuzzy
+#| msgid ""
+#| "Sort entries in <filename>/etc/passwd</filename> and <filename>/etc/"
+#| "shadow</filename> by UID."
+msgid ""
+"This option requires a <filename>/etc/shadow</filename> file. A <filename>/"
+"etc/shadow</filename> entry will be created if there were none."
+msgstr ""
+"Sorterar poster i <filename>/etc/passwd</filename> och <filename>/etc/"
+"shadow</filename> efter UID."
+
+#: usermod.8.xml:171(term) useradd.8.xml:217(term) useradd.8.xml:589(term)
+msgid ""
+"<option>-f</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-f</option>, <option>--inactive</option>&nbsp;<replaceable>INAKTIV</"
+"replaceable>"
+
+#: usermod.8.xml:175(para)
+#, fuzzy
+#| msgid ""
+#| "The number of days after a password has expired before the account will "
+#| "be disabled."
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled."
+msgstr ""
+"Antalet dagar efter att ett lösenord har gått ut innan kontot kommer att "
+"inaktiveras."
+
+#: usermod.8.xml:179(para)
+msgid ""
+"A value of 0 disables the account as soon as the password has expired, and a "
+"value of -1 disables the feature."
+msgstr ""
+
+#: usermod.8.xml:192(term) useradd.8.xml:236(term) useradd.8.xml:604(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GROUP</"
+"replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GRUPP</"
+"replaceable>"
+
+#: usermod.8.xml:196(para)
+msgid ""
+"The group name or number of the user's new initial login group. The group "
+"must exist."
+msgstr ""
+
+#: usermod.8.xml:200(para)
+msgid ""
+"Any file from the user's home directory owned by the previous primary group "
+"of the user will be owned by this new group."
+msgstr ""
+
+#: usermod.8.xml:204(para)
+msgid ""
+"The group ownership of files outside of the user's home directory must be "
+"fixed manually."
+msgstr ""
+
+#: usermod.8.xml:211(term) useradd.8.xml:263(term)
+msgid ""
+"<option>-G</option>, <option>--groups</option>&nbsp;<replaceable>GROUP1</"
+"replaceable>[<emphasis remap=\"I\">,GROUP2,...</emphasis>[<emphasis remap=\"I"
+"\">,GROUPN</emphasis>]]]"
+msgstr ""
+"<option>-G</option>, <option>--groups</option>&nbsp;<replaceable>GRUPP1</"
+"replaceable>[<emphasis remap=\"I\">,GRUPP2,...</emphasis>[<emphasis remap=\"I"
+"\">,GRUPPN</emphasis>]]]"
+
+#: usermod.8.xml:215(para)
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option."
+msgstr ""
+
+#: usermod.8.xml:222(para)
+msgid ""
+"If the user is currently a member of a group which is not listed, the user "
+"will be removed from the group. This behaviour can be changed via the "
+"<option>-a</option> option, which appends the user to the current "
+"supplementary group list."
+msgstr ""
+
+#: usermod.8.xml:231(term)
+msgid ""
+"<option>-l</option>, <option>--login</option>&nbsp;<replaceable>NEW_LOGIN</"
+"replaceable>"
+msgstr ""
+"<option>-l</option>, <option>--login</option>&nbsp;"
+"<replaceable>NYTT_INLOGGNINGSNAMN</replaceable>"
+
+#: usermod.8.xml:235(para)
+msgid ""
+"The name of the user will be changed from <replaceable>LOGIN</replaceable> "
+"to <replaceable>NEW_LOGIN</replaceable>. Nothing else is changed. In "
+"particular, the user's home directory or mail spool should probably be "
+"renamed manually to reflect the new login name."
+msgstr ""
+
+#: usermod.8.xml:245(term)
+msgid "<option>-L</option>, <option>--lock</option>"
+msgstr "<option>-L</option>, <option>--lock</option>"
+
+#: usermod.8.xml:249(para)
+msgid ""
+"Lock a user's password. This puts a '!' in front of the encrypted password, "
+"effectively disabling the password. You can't use this option with <option>-"
+"p</option> or <option>-U</option>."
+msgstr ""
+"Lås en användares lösenord. Detta sätter ett \"!\" i början av det "
+"krypterade lösenordet som effektivt inaktiverar lösenordet. Du kan inte "
+"använda denna flagga med <option>-p</option> eller <option>-U</option>."
+
+#: usermod.8.xml:255(para)
+msgid ""
+"Note: if you wish to lock the account (not only access with a password), you "
+"should also set the <replaceable>EXPIRE_DATE</replaceable> to "
+"<replaceable>1</replaceable>."
+msgstr ""
+
+#: usermod.8.xml:264(term)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid "<option>-m</option>, <option>--move-home</option>"
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: usermod.8.xml:268(para)
+msgid "Move the content of the user's home directory to the new location."
+msgstr ""
+
+#: usermod.8.xml:272(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid ""
+"This option is only valid in combination with the <option>-d</option> (or "
+"<option>--home</option>) option."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: usermod.8.xml:276(para)
+msgid ""
+"<command>usermod</command> will try to adapt the ownership of the files and "
+"to copy the modes, ACL and extended attributes, but manual changes might be "
+"needed afterwards."
+msgstr ""
+
+#: usermod.8.xml:284(term) useradd.8.xml:397(term) groupmod.8.xml:146(term)
+#: groupadd.8.xml:157(term)
+msgid "<option>-o</option>, <option>--non-unique</option>"
+msgstr "<option>-o</option>, <option>--non-unique</option>"
+
+#: usermod.8.xml:288(para)
+msgid ""
+"When used with the <option>-u</option> option, this option allows to change "
+"the user ID to a non-unique value."
+msgstr ""
+
+#: usermod.8.xml:295(term) useradd.8.xml:409(term) groupmod.8.xml:157(term)
+#: groupadd.8.xml:167(term)
+msgid ""
+"<option>-p</option>, <option>--password</option>&nbsp;<replaceable>PASSWORD</"
+"replaceable>"
+msgstr ""
+"<option>-p</option>, <option>--password</option>&nbsp;<replaceable>LÖSENORD</"
+"replaceable>"
+
+#: usermod.8.xml:299(para) groupmod.8.xml:161(para)
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>."
+msgstr ""
+"Det krypterade lösenordet, som returneras av "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>."
+
+#: usermod.8.xml:304(para) useradd.8.xml:418(para) groupmod.8.xml:166(para)
+#: groupadd.8.xml:176(para)
+msgid ""
+"<emphasis role=\"bold\">Note:</emphasis> This option is not recommended "
+"because the password (or encrypted password) will be visible by users "
+"listing the processes."
+msgstr ""
+
+#: usermod.8.xml:309(para)
+msgid ""
+"The password will be written in the local <filename>/etc/passwd</filename> "
+"or <filename>/etc/shadow</filename> file. This might differ from the "
+"password database configured in your PAM configuration."
+msgstr ""
+
+#: usermod.8.xml:315(para) useradd.8.xml:423(para) groupmod.8.xml:171(para)
+#: groupadd.8.xml:181(para)
+msgid ""
+"You should make sure the password respects the system's password policy."
+msgstr ""
+
+#: usermod.8.xml:334(term) userdel.8.xml:158(term) useradd.8.xml:469(term)
+#: groupmod.8.xml:190(term) groupdel.8.xml:113(term) groupadd.8.xml:216(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home-dir</option>&nbsp;"
+#| "<replaceable>HOME_DIR</replaceable>"
+msgid ""
+"<option>-P</option>, <option>--prefix</option>&nbsp;<replaceable>PREFIX_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home-dir</option>&nbsp;<replaceable>HEM_KAT</"
+"replaceable>"
+
+#: usermod.8.xml:338(para) userdel.8.xml:162(para) useradd.8.xml:473(para)
+#: groupmod.8.xml:194(para) groupdel.8.xml:117(para) groupadd.8.xml:220(para)
+msgid ""
+"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."
+msgstr ""
+
+#: usermod.8.xml:351(term) useradd.8.xml:486(term) useradd.8.xml:624(term)
+#: su.1.xml:186(term) chsh.1.xml:119(term)
+msgid ""
+"<option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SHELL</"
+"replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SKAL</"
+"replaceable>"
+
+#: usermod.8.xml:355(para) chsh.1.xml:123(para)
+msgid ""
+"The name of the user's new login shell. Setting this field to blank causes "
+"the system to select the default login shell."
+msgstr ""
+
+#: usermod.8.xml:362(term) useradd.8.xml:500(term)
+msgid ""
+"<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+"replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+"replaceable>"
+
+#: usermod.8.xml:366(para)
+msgid "The new numerical value of the user's ID."
+msgstr ""
+
+#: usermod.8.xml:369(para)
+msgid ""
+"This value must be unique, unless the <option>-o</option> option is used. "
+"The value must be non-negative."
+msgstr ""
+
+#: usermod.8.xml:374(para)
+msgid ""
+"The user's mailbox, and any files which the user owns and which are located "
+"in the user's home directory will have the file user ID changed "
+"automatically."
+msgstr ""
+
+#: usermod.8.xml:379(para)
+msgid ""
+"The ownership of files outside of the user's home directory must be fixed "
+"manually."
+msgstr ""
+
+#: usermod.8.xml:383(para)
+msgid ""
+"No checks will be performed with regard to the <option>UID_MIN</option>, "
+"<option>UID_MAX</option>, <option>SYS_UID_MIN</option>, or "
+"<option>SYS_UID_MAX</option> from <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: usermod.8.xml:392(term)
+msgid "<option>-U</option>, <option>--unlock</option>"
+msgstr "<option>-U</option>, <option>--unlock</option>"
+
+#: usermod.8.xml:396(para)
+msgid ""
+"Unlock a user's password. This removes the '!' in front of the encrypted "
+"password. You can't use this option with <option>-p</option> or <option>-L</"
+"option>."
+msgstr ""
+"Låser upp en användares lösenord. Detta tar bort det inledande \"!\" i det "
+"krypterade lösenordet. Du kan inte använda denna flagga med <option>-p</"
+"option> eller <option>-L</option>."
+
+#: usermod.8.xml:401(para)
+msgid ""
+"Note: if you wish to unlock the account (not only access with a password), "
+"you should also set the <replaceable>EXPIRE_DATE</replaceable> (for example "
+"to <replaceable>99999</replaceable>, or to the <option>EXPIRE</option> value "
+"from <filename>/etc/default/useradd</filename>)."
+msgstr ""
+
+#: usermod.8.xml:412(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
+#| "replaceable>=<replaceable>VALUE</replaceable>"
+msgid ""
+"<option>-v</option>, <option>--add-subuids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>NYCKEL</"
+"replaceable>=<replaceable>VÄRDE</replaceable>"
+
+#: usermod.8.xml:416(para)
+msgid "Add a range of subordinate uids to the user's account."
+msgstr ""
+
+#: usermod.8.xml:419(para) usermod.8.xml:457(para)
+msgid ""
+"This option may be specified multiple times to add multiple ranges to a "
+"users account."
+msgstr ""
+
+#: usermod.8.xml:422(para) usermod.8.xml:442(para)
+msgid ""
+"No checks will be performed with regard to <option>SUB_UID_MIN</option>, "
+"<option>SUB_UID_MAX</option>, or <option>SUB_UID_COUNT</option> from /etc/"
+"login.defs."
+msgstr ""
+
+#: usermod.8.xml:430(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
+#| "replaceable>=<replaceable>VALUE</replaceable>"
+msgid ""
+"<option>-V</option>, <option>--del-subuids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>NYCKEL</"
+"replaceable>=<replaceable>VÄRDE</replaceable>"
+
+#: usermod.8.xml:434(para)
+msgid "Remove a range of subordinate uids from the user's account."
+msgstr ""
+
+#: usermod.8.xml:437(para)
+msgid ""
+"This option may be specified multiple times to remove multiple ranges to a "
+"users account. When both <option>--del-subuids</option> and <option>--add-"
+"subuids</option> are specified, the removal of all subordinate uid ranges "
+"happens before any subordinate uid range is added."
+msgstr ""
+
+#: usermod.8.xml:450(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
+#| "replaceable>=<replaceable>VALUE</replaceable>"
+msgid ""
+"<option>-w</option>, <option>--add-subgids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>NYCKEL</"
+"replaceable>=<replaceable>VÄRDE</replaceable>"
+
+#: usermod.8.xml:454(para)
+msgid "Add a range of subordinate gids to the user's account."
+msgstr ""
+
+#: usermod.8.xml:460(para) usermod.8.xml:480(para)
+msgid ""
+"No checks will be performed with regard to <option>SUB_GID_MIN</option>, "
+"<option>SUB_GID_MAX</option>, or <option>SUB_GID_COUNT</option> from /etc/"
+"login.defs."
+msgstr ""
+
+#: usermod.8.xml:468(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
+#| "replaceable>=<replaceable>VALUE</replaceable>"
+msgid ""
+"<option>-W</option>, <option>--del-subgids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>NYCKEL</"
+"replaceable>=<replaceable>VÄRDE</replaceable>"
+
+#: usermod.8.xml:472(para)
+msgid "Remove a range of subordinate gids from the user's account."
+msgstr ""
+
+#: usermod.8.xml:475(para)
+msgid ""
+"This option may be specified multiple times to remove multiple ranges to a "
+"users account. When both <option>--del-subgids</option> and <option>--add-"
+"subgids</option> are specified, the removal of all subordinate gid ranges "
+"happens before any subordinate gid range is added."
+msgstr ""
+
+#: usermod.8.xml:488(term) useradd.8.xml:535(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SHELL</"
+#| "replaceable>"
+msgid ""
+"<option>-Z</option>, <option>--selinux-user</option>&nbsp;"
+"<replaceable>SEUSER</replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SKAL</"
+"replaceable>"
+
+#: usermod.8.xml:492(para)
+msgid "The new SELinux user for the user's login."
+msgstr ""
+
+#: usermod.8.xml:495(para)
+msgid ""
+"A blank <replaceable>SEUSER</replaceable> will remove the SELinux user "
+"mapping for user <replaceable>LOGIN</replaceable> (if any)."
+msgstr ""
+
+#: usermod.8.xml:506(title) userdel.8.xml:298(title) useradd.8.xml:652(title)
+#: su.1.xml:330(title) shadow.3.xml:218(title) passwd.1.xml:377(title)
+#: newusers.8.xml:363(title) login.1.xml:260(title) lastlog.8.xml:229(title)
+#: groupdel.8.xml:133(title) groupadd.8.xml:274(title) gpasswd.1.xml:252(title)
+#: faillog.8.xml:232(title) chpasswd.8.xml:231(title)
+#: chgpasswd.8.xml:186(title)
+msgid "CAVEATS"
+msgstr "TÄNK PÅ"
+
+#: usermod.8.xml:507(para)
+msgid ""
+"You must make certain that the named user is not executing any processes "
+"when this command is being executed if the user's numerical user ID, the "
+"user's name, or the user's home directory is being changed. "
+"<command>usermod</command> checks this on Linux. On other platforms it only "
+"uses utmp to check if the user is logged in."
+msgstr ""
+
+#: usermod.8.xml:514(para)
+msgid ""
+"You must change the owner of any <command>crontab</command> files or "
+"<command>at</command> jobs manually."
+msgstr ""
+
+#: usermod.8.xml:518(para)
+msgid "You must make any changes involving NIS on the NIS server."
+msgstr ""
+
+#: usermod.8.xml:33(term) useradd.8.xml:33(term) login.defs.5.xml:33(term)
+#: lastlog.8.xml:33(term)
+#, fuzzy
+msgid "<option>LASTLOG_UID_MAX</option> (number)"
+msgstr "UID_MAX (nummer)"
+
+#: usermod.8.xml:35(para) useradd.8.xml:35(para) login.defs.5.xml:35(para)
+#: lastlog.8.xml:35(para)
+msgid ""
+"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."
+msgstr ""
+
+#: usermod.8.xml:41(para) useradd.8.xml:41(para) login.defs.5.xml:41(para)
+#: lastlog.8.xml:41(para)
+msgid ""
+"No <option>LASTLOG_UID_MAX</option> option present in the configuration "
+"means that there is no user ID limit for writing lastlog entries."
+msgstr ""
+
+#: usermod.8.xml:32(term) userdel.8.xml:32(term) useradd.8.xml:32(term)
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>MAIL_DIR</option> (string)"
+msgstr "MAIL_DIR (sträng)"
+
+#: usermod.8.xml:34(para) userdel.8.xml:34(para) useradd.8.xml:34(para)
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"The mail spool directory. This is needed to manipulate the mailbox when its "
+"corresponding user account is modified or deleted. If not specified, a "
+"compile-time default is used."
+msgstr ""
+
+#: usermod.8.xml:41(term) userdel.8.xml:41(term) useradd.8.xml:41(term)
+#: su.1.xml:41(term) login.defs.5.xml:41(term) login.1.xml:41(term)
+#, fuzzy
+msgid "<option>MAIL_FILE</option> (string)"
+msgstr "MAIL_DIR (sträng)"
+
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"Defines the location of the users mail spool files relatively to their home "
+"directory."
+msgstr ""
+
+#. FIXME: MAIL_FILE not used in useradd
+#: usermod.8.xml:50(para) userdel.8.xml:50(para) useradd.8.xml:50(para)
+#: su.1.xml:50(para) login.defs.5.xml:50(para) login.1.xml:50(para)
+msgid ""
+"The <option>MAIL_DIR</option> and <option>MAIL_FILE</option> variables are "
+"used by <command>useradd</command>, <command>usermod</command>, and "
+"<command>userdel</command> to create, move, or delete the user's mail spool."
+msgstr ""
+
+#: usermod.8.xml:56(para) userdel.8.xml:56(para) useradd.8.xml:56(para)
+#: su.1.xml:56(para) login.defs.5.xml:56(para) login.1.xml:56(para)
+#, fuzzy
+msgid ""
+"If <option>MAIL_CHECK_ENAB</option> is set to <replaceable>yes</"
+"replaceable>, they are also used to define the <envar>MAIL</envar> "
+"environment variable."
+msgstr ""
+"Om <option>--preserve-environment</option> används, anges skalet med "
+"miljövariabeln <envar>$SHELL</envar>."
+
+#: usermod.8.xml:30(term) userdel.8.xml:30(term) useradd.8.xml:30(term)
+#: pwconv.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: grpck.8.xml:30(term) groupmod.8.xml:30(term) groupmems.8.xml:30(term)
+#: groupdel.8.xml:30(term) groupadd.8.xml:30(term) gpasswd.1.xml:30(term)
+#: chgpasswd.8.xml:30(term)
+msgid "<option>MAX_MEMBERS_PER_GROUP</option> (number)"
+msgstr ""
+
+#: usermod.8.xml:32(para) userdel.8.xml:32(para) useradd.8.xml:32(para)
+#: pwconv.8.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: grpck.8.xml:32(para) groupmod.8.xml:32(para) groupmems.8.xml:32(para)
+#: groupdel.8.xml:32(para) groupadd.8.xml:32(para) gpasswd.1.xml:32(para)
+#: chgpasswd.8.xml:32(para)
+msgid ""
+"Maximum members per group entry. When the maximum is reached, a new group "
+"entry (line) is started in <filename>/etc/group</filename> (with the same "
+"name, same password, and same GID)."
+msgstr ""
+
+#: usermod.8.xml:37(para) userdel.8.xml:37(para) useradd.8.xml:37(para)
+#: pwconv.8.xml:37(para) newusers.8.xml:37(para) login.defs.5.xml:37(para)
+#: grpck.8.xml:37(para) groupmod.8.xml:37(para) groupmems.8.xml:37(para)
+#: groupdel.8.xml:37(para) groupadd.8.xml:37(para) gpasswd.1.xml:37(para)
+#: chgpasswd.8.xml:37(para)
+msgid ""
+"The default value is 0, meaning that there are no limits in the number of "
+"members in a group."
+msgstr ""
+
+#. Note: on HP, split groups have the same ID, but different
+#. names.
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: pwconv.8.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: grpck.8.xml:43(para) groupmod.8.xml:43(para) groupmems.8.xml:43(para)
+#: groupdel.8.xml:43(para) groupadd.8.xml:43(para) gpasswd.1.xml:43(para)
+#: chgpasswd.8.xml:43(para)
+msgid ""
+"This feature (split group) permits to limit the length of lines in the group "
+"file. This is useful to make sure that lines for NIS groups are not larger "
+"than 1024 characters."
+msgstr ""
+
+#: usermod.8.xml:48(para) userdel.8.xml:48(para) useradd.8.xml:48(para)
+#: pwconv.8.xml:48(para) newusers.8.xml:48(para) login.defs.5.xml:48(para)
+#: grpck.8.xml:48(para) groupmod.8.xml:48(para) groupmems.8.xml:48(para)
+#: groupdel.8.xml:48(para) groupadd.8.xml:48(para) gpasswd.1.xml:48(para)
+#: chgpasswd.8.xml:48(para)
+msgid "If you need to enforce such limit, you can use 25."
+msgstr ""
+
+#: usermod.8.xml:51(para) userdel.8.xml:51(para) useradd.8.xml:51(para)
+#: pwconv.8.xml:51(para) newusers.8.xml:51(para) login.defs.5.xml:51(para)
+#: grpck.8.xml:51(para) groupmod.8.xml:51(para) groupmems.8.xml:51(para)
+#: groupdel.8.xml:51(para) groupadd.8.xml:51(para) gpasswd.1.xml:51(para)
+#: chgpasswd.8.xml:51(para)
+msgid ""
+"Note: split groups may not be supported by all tools (even in the Shadow "
+"toolsuite). You should not use this variable unless you really need it."
+msgstr ""
+
+#: usermod.8.xml:30(term) useradd.8.xml:30(term) newusers.8.xml:30(term)
+#: login.defs.5.xml:30(term)
+#, fuzzy
+msgid "<option>SUB_GID_MIN</option> (number)"
+msgstr "GID_MIN (nummer)"
+
+#: usermod.8.xml:31(term) useradd.8.xml:31(term) newusers.8.xml:31(term)
+#: login.defs.5.xml:31(term)
+#, fuzzy
+msgid "<option>SUB_GID_MAX</option> (number)"
+msgstr "GID_MAX (nummer)"
+
+#: usermod.8.xml:32(term) useradd.8.xml:32(term) newusers.8.xml:32(term)
+#: login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SUB_GID_COUNT</option> (number)"
+msgstr "GID_MIN (nummer)"
+
+#: usermod.8.xml:34(para) useradd.8.xml:34(para) newusers.8.xml:34(para)
+#: login.defs.5.xml:34(para)
+msgid ""
+"If <filename>/etc/subuid</filename> exists, the commands <command>useradd</"
+"command> and <command>newusers</command> (unless the user already have "
+"subordinate group IDs) allocate <option>SUB_GID_COUNT</option> unused group "
+"IDs from the range <option>SUB_GID_MIN</option> to <option>SUB_GID_MAX</"
+"option> for each new user."
+msgstr ""
+
+#: usermod.8.xml:42(para) useradd.8.xml:42(para) newusers.8.xml:42(para)
+#: login.defs.5.xml:42(para)
+msgid ""
+"The default values for <option>SUB_GID_MIN</option>, <option>SUB_GID_MAX</"
+"option>, <option>SUB_GID_COUNT</option> are respectively 100000, 600100000 "
+"and 65536."
+msgstr ""
+
+#: usermod.8.xml:30(term) useradd.8.xml:30(term) newusers.8.xml:30(term)
+#: login.defs.5.xml:30(term)
+#, fuzzy
+msgid "<option>SUB_UID_MIN</option> (number)"
+msgstr "UID_MIN (nummer)"
+
+#: usermod.8.xml:31(term) useradd.8.xml:31(term) newusers.8.xml:31(term)
+#: login.defs.5.xml:31(term)
+#, fuzzy
+msgid "<option>SUB_UID_MAX</option> (number)"
+msgstr "UID_MAX (nummer)"
+
+#: usermod.8.xml:32(term) useradd.8.xml:32(term) newusers.8.xml:32(term)
+#: login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SUB_UID_COUNT</option> (number)"
+msgstr "UID_MIN (nummer)"
+
+#: usermod.8.xml:34(para) useradd.8.xml:34(para) newusers.8.xml:34(para)
+#: login.defs.5.xml:34(para)
+msgid ""
+"If <filename>/etc/subuid</filename> exists, the commands <command>useradd</"
+"command> and <command>newusers</command> (unless the user already have "
+"subordinate user IDs) allocate <option>SUB_UID_COUNT</option> unused user "
+"IDs from the range <option>SUB_UID_MIN</option> to <option>SUB_UID_MAX</"
+"option> for each new user."
+msgstr ""
+
+#: usermod.8.xml:42(para) useradd.8.xml:42(para) newusers.8.xml:42(para)
+#: login.defs.5.xml:42(para)
+msgid ""
+"The default values for <option>SUB_UID_MIN</option>, <option>SUB_UID_MAX</"
+"option>, <option>SUB_UID_COUNT</option> are respectively 100000, 600100000 "
+"and 65536."
+msgstr ""
+
+#: usermod.8.xml:30(term) userdel.8.xml:30(term) useradd.8.xml:30(term)
+#: pwck.8.xml:30(term) login.defs.5.xml:30(term)
+#, fuzzy
+msgid "<option>TCB_SYMLINKS</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: usermod.8.xml:37(programlisting) userdel.8.xml:37(programlisting)
+#: useradd.8.xml:37(programlisting) pwck.8.xml:37(programlisting)
+#: login.defs.5.xml:37(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"if ( UID is less than 1000) {\n"
+" use /etc/tcb/user\n"
+"} else if ( UID is less than 1000000) {\n"
+" kilos = UID / 1000\n"
+" use /etc/tcb/:kilos/user\n"
+" make symlink /etc/tcb/user to the above directory\n"
+"} else {\n"
+" megas = UID / 1000000\n"
+" kilos = ( UID / megas * 1000000 ) / 1000\n"
+" use /etc/tcb/:megas/:kilos/user\n"
+" make symlink /etc/tcb/user to the above directory\n"
+"}\n"
+" "
+msgstr ""
+
+#: usermod.8.xml:32(para) userdel.8.xml:32(para) useradd.8.xml:32(para)
+#: pwck.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the location of the user tcb directory to "
+"be created will not be automatically set to /etc/tcb/user, but will be "
+"computed depending on the UID of the user, according to the following "
+"algorithm: <placeholder-1/>"
+msgstr ""
+
+#: usermod.8.xml:557(filename) userdel.8.xml:214(filename)
+#: useradd.8.xml:757(filename) su.1.xml:381(filename)
+#: pwconv.8.xml:253(filename) passwd.1.xml:428(filename)
+#: newusers.8.xml:438(filename) login.access.5.xml:124(filename)
+#: login.1.xml:389(filename) groupmod.8.xml:237(filename)
+#: groupadd.8.xml:265(filename) chsh.1.xml:182(filename)
+#: chpasswd.8.xml:270(filename) chgpasswd.8.xml:228(filename)
+#: chfn.1.xml:210(filename)
+msgid "/etc/login.defs"
+msgstr "/etc/login.defs"
+
+#: usermod.8.xml:559(para) userdel.8.xml:216(para) useradd.8.xml:759(para)
+#: su.1.xml:383(para) pwconv.8.xml:255(para) passwd.1.xml:430(para)
+#: newusers.8.xml:440(para) login.access.5.xml:126(para) login.1.xml:391(para)
+#: groupmod.8.xml:239(para) groupadd.8.xml:267(para) chsh.1.xml:184(para)
+#: chpasswd.8.xml:272(para) chgpasswd.8.xml:230(para) chfn.1.xml:212(para)
+msgid "Shadow password suite configuration."
+msgstr ""
+
+#: usermod.8.xml:575(filename) userdel.8.xml:232(filename)
+#: useradd.8.xml:745(filename) newusers.8.xml:450(filename)
+#, fuzzy
+#| msgid "/etc/suauth"
+msgid "/etc/subgid"
+msgstr "/etc/suauth"
+
+#: usermod.8.xml:577(para) userdel.8.xml:234(para) useradd.8.xml:747(para)
+#: newusers.8.xml:452(para)
+msgid "Per user subordinate group IDs."
+msgstr ""
+
+#: usermod.8.xml:581(filename) userdel.8.xml:238(filename)
+#: useradd.8.xml:751(filename) newusers.8.xml:456(filename)
+#, fuzzy
+#| msgid "/etc/suauth"
+msgid "/etc/subuid"
+msgstr "/etc/suauth"
+
+#: usermod.8.xml:583(para) userdel.8.xml:240(para) useradd.8.xml:753(para)
+#: newusers.8.xml:458(para)
+msgid "Per user subordinate user IDs."
+msgstr ""
+
+#: usermod.8.xml:591(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <phrase condition=\"subids"
+"\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: userdel.8.xml:63(refentrytitle) userdel.8.xml:70(refname)
+#: userdel.8.xml:75(command) login.defs.5.xml:500(term)
+msgid "userdel"
+msgstr "userdel"
+
+#: userdel.8.xml:71(refpurpose)
+msgid "delete a user account and related files"
+msgstr "ta bort ett användarkonto och relaterade filer"
+
+#: userdel.8.xml:85(para)
+#, fuzzy
+msgid ""
+"The <command>userdel</command> command modifies the system account files, "
+"deleting all entries that refer to the user name <emphasis remap=\"I"
+"\">LOGIN</emphasis>. The named user must exist."
+msgstr ""
+"Kommandot <command>userdel</command> ändrar i systemkontofilerna, tar bort "
+"alla poster som refererar till <emphasis remap=\"I\">login_name</emphasis>. "
+"Den angivna användaren måste finnas."
+
+#: userdel.8.xml:94(para)
+msgid "The options which apply to the <command>userdel</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>userdel</command> är:"
+
+#: userdel.8.xml:99(term) groupadd.8.xml:100(term) expiry.1.xml:103(term)
+msgid "<option>-f</option>, <option>--force</option>"
+msgstr "<option>-f</option>, <option>--force</option>"
+
+#: userdel.8.xml:103(para)
+msgid ""
+"This option forces the removal of the user account, even if the user is "
+"still logged in. It also forces <command>userdel</command> to remove the "
+"user's home directory and mail spool, even if another user uses the same "
+"home directory or if the mail spool is not owned by the specified user. If "
+"<option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename> and if a group exists with "
+"the same name as the deleted user, then this group will be removed, even if "
+"it is still the primary group of another user."
+msgstr ""
+
+#: userdel.8.xml:116(para)
+msgid ""
+"<emphasis>Note:</emphasis> This option is dangerous and may leave your "
+"system in an inconsistent state."
+msgstr ""
+"<emphasis>Notera:</emphasis> Denna flagga är farlig och kan göra att ditt "
+"system försätts i ett inkonsistent tillstånd."
+
+#: userdel.8.xml:129(term)
+msgid "<option>-r</option>, <option>--remove</option>"
+msgstr "<option>-r</option>, <option>--remove</option>"
+
+#: userdel.8.xml:133(para)
+msgid ""
+"Files in the user's home directory will be removed along with the home "
+"directory itself and the user's mail spool. Files located in other file "
+"systems will have to be searched for and deleted manually."
+msgstr ""
+
+#: userdel.8.xml:139(para)
+msgid ""
+"The mail spool is defined by the <option>MAIL_DIR</option> variable in the "
+"<filename>login.defs</filename> file."
+msgstr ""
+
+#: userdel.8.xml:175(term)
+#, fuzzy
+#| msgid "<option>-q</option>, <option>--quiet</option>"
+msgid "<option>-Z</option>, <option>--selinux-user</option>"
+msgstr "<option>-q</option>, <option>--quiet</option>"
+
+#: userdel.8.xml:179(para)
+msgid "Remove any SELinux user mapping for the user's login."
+msgstr ""
+
+#: userdel.8.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>USERDEL_CMD</option> (string)"
+msgstr "USERDEL_CMD (sträng)"
+
+#: userdel.8.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If defined, this command is run when removing a user. It should remove any "
+"at/cron/print jobs etc. owned by the user to be removed (passed as the first "
+"argument)."
+msgstr ""
+
+#: userdel.8.xml:40(para) login.defs.5.xml:40(para)
+msgid "The return code of the script is not taken into account."
+msgstr ""
+
+#: userdel.8.xml:46(programlisting) login.defs.5.xml:46(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"#! /bin/sh\n"
+"\n"
+"# Check for the required argument.\n"
+"if [ $# != 1 ]; then\n"
+"\techo \"Usage: $0 username\"\n"
+"\texit 1\n"
+"fi\n"
+"\n"
+"# Remove cron jobs.\n"
+"crontab -r -u $1\n"
+"\n"
+"# Remove at jobs.\n"
+"# Note that it will remove any jobs owned by the same UID,\n"
+"# even if it was shared by a different username.\n"
+"AT_SPOOL_DIR=/var/spool/cron/atjobs\n"
+"find $AT_SPOOL_DIR -name \"[^.]*\" -type f -user $1 -delete \\;\n"
+"\n"
+"# Remove print jobs.\n"
+"lprm $1\n"
+"\n"
+"# All done.\n"
+"exit 0\n"
+" "
+msgstr ""
+
+#: userdel.8.xml:43(para) login.defs.5.xml:43(para)
+msgid ""
+"Here is an example script, which removes the user's cron, at and print jobs: "
+"<placeholder-1/>"
+msgstr ""
+
+#: userdel.8.xml:32(term) useradd.8.xml:32(term) su.1.xml:32(term)
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>USERGROUPS_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: userdel.8.xml:34(para) useradd.8.xml:34(para) su.1.xml:34(para)
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable setting of the umask group bits to be the same as owner bits "
+"(examples: 022 -&gt; 002, 077 -&gt; 007) for non-root users, if the uid is "
+"the same as gid, and username is the same as the primary group name."
+msgstr ""
+
+#: userdel.8.xml:39(para) useradd.8.xml:39(para) su.1.xml:39(para)
+#: login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, <command>userdel</command> will "
+"remove the user's group if it contains no more members, and "
+"<command>useradd</command> will create by default a group with the name of "
+"the user."
+msgstr ""
+
+#: userdel.8.xml:247(title) useradd.8.xml:766(title) su.1.xml:390(title)
+#: pwck.8.xml:303(title) passwd.1.xml:443(title) grpck.8.xml:245(title)
+#: groupmod.8.xml:252(title) groupdel.8.xml:175(title)
+#: groupadd.8.xml:296(title) chage.1.xml:284(title)
+msgid "EXIT VALUES"
+msgstr "AVSLUTNINGSVÄRDEN"
+
+#: userdel.8.xml:252(replaceable) useradd.8.xml:771(replaceable)
+#: su.1.xml:409(replaceable) pwck.8.xml:308(replaceable)
+#: passwd.1.xml:448(replaceable) grpck.8.xml:250(replaceable)
+#: groupmod.8.xml:257(replaceable) groupdel.8.xml:180(replaceable)
+#: groupadd.8.xml:301(replaceable) chage.1.xml:289(replaceable)
+msgid "0"
+msgstr "0"
+
+#: userdel.8.xml:254(para) useradd.8.xml:773(para) pwck.8.xml:310(para)
+#: passwd.1.xml:450(para) grpck.8.xml:252(para) groupdel.8.xml:182(para)
+#: groupadd.8.xml:303(para) chage.1.xml:291(para)
+msgid "success"
+msgstr "lyckad"
+
+#: userdel.8.xml:258(replaceable) useradd.8.xml:777(replaceable)
+#: su.1.xml:75(manvolnum) su.1.xml:415(replaceable) sg.1.xml:59(manvolnum)
+#: pwck.8.xml:314(replaceable) passwd.1.xml:65(manvolnum)
+#: passwd.1.xml:454(replaceable) newgrp.1.xml:59(manvolnum)
+#: login.1.xml:91(manvolnum) grpck.8.xml:256(replaceable)
+#: groups.1.xml:58(manvolnum) gpasswd.1.xml:63(manvolnum)
+#: expiry.1.xml:62(manvolnum) chsh.1.xml:61(manvolnum) chfn.1.xml:61(manvolnum)
+#: chage.1.xml:59(manvolnum) chage.1.xml:295(replaceable)
+msgid "1"
+msgstr "1"
+
+#: userdel.8.xml:260(para) useradd.8.xml:779(para)
+msgid "can't update password file"
+msgstr "kan inte uppdatera lösenordsfilen"
+
+#: userdel.8.xml:264(replaceable) useradd.8.xml:783(replaceable)
+#: pwck.8.xml:320(replaceable) passwd.1.xml:460(replaceable)
+#: grpck.8.xml:262(replaceable) groupmod.8.xml:263(replaceable)
+#: groupdel.8.xml:186(replaceable) groupadd.8.xml:307(replaceable)
+#: chage.1.xml:301(replaceable)
+msgid "2"
+msgstr "2"
+
+#: userdel.8.xml:266(para) useradd.8.xml:785(para) pwck.8.xml:316(para)
+#: grpck.8.xml:258(para) groupdel.8.xml:188(para) groupadd.8.xml:309(para)
+#: chage.1.xml:303(para)
+msgid "invalid command syntax"
+msgstr "ogiltig kommandosyntax"
+
+#: userdel.8.xml:270(replaceable) useradd.8.xml:801(replaceable)
+#: pwck.8.xml:344(replaceable) passwd.1.xml:484(replaceable)
+#: groupmod.8.xml:281(replaceable) groupdel.8.xml:192(replaceable)
+msgid "6"
+msgstr "6"
+
+#: userdel.8.xml:272(para)
+msgid "specified user doesn't exist"
+msgstr "angiven användare finns inte"
+
+#: userdel.8.xml:278(para)
+msgid "user currently logged in"
+msgstr "användaren är för närvarande inloggad"
+
+#: userdel.8.xml:282(replaceable) useradd.8.xml:813(replaceable)
+#: groupmod.8.xml:293(replaceable) groupdel.8.xml:204(replaceable)
+#: groupadd.8.xml:331(replaceable)
+msgid "10"
+msgstr "10"
+
+#: userdel.8.xml:284(para) useradd.8.xml:815(para) groupdel.8.xml:206(para)
+#: groupadd.8.xml:333(para)
+msgid "can't update group file"
+msgstr "kan inte uppdatera gruppfilen"
+
+#: userdel.8.xml:288(replaceable) useradd.8.xml:819(replaceable)
+#: groupmod.8.xml:305(replaceable)
+msgid "12"
+msgstr "12"
+
+#: userdel.8.xml:290(para)
+msgid "can't remove home directory"
+msgstr "kan inte ta bort hemkatalogen"
+
+#: userdel.8.xml:248(para)
+msgid ""
+"The <command>userdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Kommandot <command>userdel</command> avslutas med följande värden: "
+"<placeholder-1/>"
+
+#: userdel.8.xml:299(para)
+msgid ""
+"<command>userdel</command> will not allow you to remove an account if there "
+"are running processes which belong to this account. In that case, you may "
+"have to kill those processes or lock the user's password or account and "
+"remove the account later. The <option>-f</option> option can force the "
+"deletion of this account."
+msgstr ""
+
+#: userdel.8.xml:306(para)
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this user."
+msgstr ""
+
+#: userdel.8.xml:310(para)
+msgid ""
+"You may not remove any NIS attributes on a NIS client. This must be "
+"performed on the NIS server."
+msgstr ""
+"Du får inte ta bort några NIS-attribut på en NIS-klient. Detta måste "
+"genomföras på NIS-servern."
+
+#: userdel.8.xml:313(para)
+msgid ""
+"If <option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename>, <command>userdel</"
+"command> will delete the group with the same name as the user. To avoid "
+"inconsistencies in the passwd and group databases, <command>userdel</"
+"command> will check that this group is not used as a primary group for "
+"another user, and will just warn without deleting the group otherwise. The "
+"<option>-f</option> option can force the deletion of this group."
+msgstr ""
+
+#: userdel.8.xml:326(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"subids\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: useradd.8.xml:76(refentrytitle) useradd.8.xml:83(refname)
+#: useradd.8.xml:88(command) useradd.8.xml:95(command)
+#: useradd.8.xml:99(command) login.defs.5.xml:482(term)
+msgid "useradd"
+msgstr "useradd"
+
+#: useradd.8.xml:84(refpurpose)
+msgid "create a new user or update default new user information"
+msgstr ""
+"skapa en ny användare eller uppdatera standardinformation för nya användare"
+
+#: useradd.8.xml:96(arg) useradd.8.xml:100(arg)
+msgid "-D"
+msgstr "-D"
+
+#: useradd.8.xml:109(para)
+msgid ""
+"When invoked without the <option>-D</option> option, the <command>useradd</"
+"command> command creates a new user account using the values specified on "
+"the command line plus the default values from the system. Depending on "
+"command line options, the <command>useradd</command> command will update "
+"system files and may also create the new user's home directory and copy "
+"initial files."
+msgstr ""
+
+#: useradd.8.xml:118(para)
+msgid ""
+"By default, a group will also be created for the new user (see <option>-g</"
+"option>, <option>-N</option>, <option>-U</option>, and "
+"<option>USERGROUPS_ENAB</option>)."
+msgstr ""
+
+#: useradd.8.xml:127(para)
+msgid "The options which apply to the <command>useradd</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>useradd</command> är:"
+
+#: useradd.8.xml:132(option) pwck.8.xml:187(option) newusers.8.xml:273(option)
+msgid "--badname"
+msgstr ""
+
+#: useradd.8.xml:141(term) useradd.8.xml:559(term)
+msgid ""
+"<option>-b</option>, <option>--base-dir</option>&nbsp;<replaceable>BASE_DIR</"
+"replaceable>"
+msgstr ""
+
+#: useradd.8.xml:145(para)
+msgid ""
+"The default base directory for the system if <option>-d</option>&nbsp;"
+"<replaceable>HOME_DIR</replaceable> is not specified. <replaceable>BASE_DIR</"
+"replaceable> is concatenated with the account name to define the home "
+"directory. If the <option>-m</option> option is not used, "
+"<replaceable>BASE_DIR</replaceable> must exist."
+msgstr ""
+
+#: useradd.8.xml:152(para)
+msgid ""
+"If this option is not specified, <command>useradd</command> will use the "
+"base directory specified by the <option>HOME</option> variable in <filename>/"
+"etc/default/useradd</filename>, or <filename>/home</filename> by default."
+msgstr ""
+
+#: useradd.8.xml:166(para)
+msgid ""
+"Any text string. It is generally a short description of the login, and is "
+"currently used as the field for the user's full name."
+msgstr ""
+
+#: useradd.8.xml:174(term)
+msgid ""
+"<option>-d</option>, <option>--home-dir</option>&nbsp;<replaceable>HOME_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home-dir</option>&nbsp;<replaceable>HEM_KAT</"
+"replaceable>"
+
+#: useradd.8.xml:178(para)
+msgid ""
+"The new user will be created using <replaceable>HOME_DIR</replaceable> as "
+"the value for the user's login directory. The default is to append the "
+"<replaceable>LOGIN</replaceable> name to <replaceable>BASE_DIR</replaceable> "
+"and use that as the login directory name. The directory "
+"<replaceable>HOME_DIR</replaceable> does not have to exist but will not be "
+"created if it is missing."
+msgstr ""
+
+#: useradd.8.xml:190(term)
+#, fuzzy
+#| msgid "<option>-d</option>, <option>--delete</option>"
+msgid "<option>-D</option>, <option>--defaults</option>"
+msgstr "<option>-d</option>, <option>--delete</option>"
+
+#: useradd.8.xml:194(para)
+#, fuzzy
+msgid "See below, the subsection \"Changing the default values\"."
+msgstr "Ändrar standardvärden"
+
+#: useradd.8.xml:208(para)
+msgid ""
+"If not specified, <command>useradd</command> will use the default expiry "
+"date specified by the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or an empty string (no expiry) by default."
+msgstr ""
+
+#: useradd.8.xml:221(para)
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled. A value of 0 disables the account as soon as the password has "
+"expired, and a value of -1 disables the feature."
+msgstr ""
+
+#: useradd.8.xml:227(para)
+msgid ""
+"If not specified, <command>useradd</command> will use the default inactivity "
+"period specified by the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or -1 by default."
+msgstr ""
+
+#: useradd.8.xml:240(para)
+msgid ""
+"The group name or number of the user's initial login group. The group name "
+"must exist. A group number must refer to an already existing group."
+msgstr ""
+
+#: useradd.8.xml:245(para)
+msgid ""
+"If not specified, the behavior of <command>useradd</command> will depend on "
+"the <option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>. If this variable is set to <replaceable>yes</replaceable> (or "
+"<option>-U/--user-group</option> is specified on the command line), a group "
+"will be created for the user, with the same name as her loginname. If the "
+"variable is set to <replaceable>no</replaceable> (or <option>-N/--no-user-"
+"group</option> is specified on the command line), useradd will set the "
+"primary group of the new user to the value specified by the <option>GROUP</"
+"option> variable in <filename>/etc/default/useradd</filename>, or 100 by "
+"default."
+msgstr ""
+
+#: useradd.8.xml:267(para)
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option. The default is for the user to belong only to "
+"the initial group."
+msgstr ""
+
+#: useradd.8.xml:284(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SHELL</"
+#| "replaceable>"
+msgid ""
+"<option>-k</option>, <option>--skel</option>&nbsp;<replaceable>SKEL_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SKAL</"
+"replaceable>"
+
+#: useradd.8.xml:288(para)
+msgid ""
+"The skeleton directory, which contains files and directories to be copied in "
+"the user's home directory, when the home directory is created by "
+"<command>useradd</command>."
+msgstr ""
+
+#: useradd.8.xml:293(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid ""
+"This option is only valid if the <option>-m</option> (or <option>--create-"
+"home</option>) option is specified."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:297(para)
+msgid ""
+"If this option is not set, the skeleton directory is defined by the "
+"<option>SKEL</option> variable in <filename>/etc/default/useradd</filename> "
+"or, by default, <filename>/etc/skel</filename>."
+msgstr ""
+
+#: useradd.8.xml:303(para)
+msgid "If possible, the ACLs and extended attributes are copied."
+msgstr ""
+
+#: useradd.8.xml:309(term) groupadd.8.xml:137(term)
+msgid ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
+"replaceable>=<replaceable>VALUE</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>NYCKEL</"
+"replaceable>=<replaceable>VÄRDE</replaceable>"
+
+#: useradd.8.xml:313(para)
+#, fuzzy
+#| msgid ""
+#| "Overrides /etc/login.defs defaults (UID_MIN, UID_MAX, UMASK, "
+#| "PASS_MAX_DAYS and others). <placeholder-1/> Example: <option>-K </"
+#| "option>&nbsp;<replaceable>PASS_MAX_DAYS</replaceable>=<replaceable>-1</"
+#| "replaceable> can be used when creating system account to turn off "
+#| "password ageing, even though system account has no password at all. "
+#| "Multiple <option>-K</option> options can be specified, e.g.: <option>-K </"
+#| "option>&nbsp;<replaceable>UID_MIN</replaceable>=<replaceable>100</"
+#| "replaceable>&nbsp;<option>-K</option>&nbsp;<replaceable>UID_MAX</"
+#| "replaceable>=<replaceable>499</replaceable>"
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (<option>UID_MIN</"
+"option>, <option>UID_MAX</option>, <option>UMASK</option>, "
+"<option>PASS_MAX_DAYS</option> and others). <placeholder-1/> Example: "
+"<option>-K</option>&nbsp;<replaceable>PASS_MAX_DAYS</"
+"replaceable>=<replaceable>-1</replaceable> can be used when creating system "
+"account to turn off password aging, even though system account has no "
+"password at all. Multiple <option>-K</option> options can be specified, e."
+"g.: <option>-K</option>&nbsp;<replaceable>UID_MIN</"
+"replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+"<replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+"Åsidosätter standardvärden för /etc/login.defs (UID_MIN, UID_MAX, UMASK, "
+"PASS_MAX_DAYS och others). <placeholder-1/> Exempel: <option>-K</"
+"option>&nbsp;<replaceable>LÖSEN_MAX_DAGAR</replaceable>=<replaceable>-1</"
+"replaceable> kan användas när systemkonton skapas för att stänga av "
+"lösenordsåldring, även om systemkontot inte har något lösenord alls. Flera "
+"av flaggan <option>-K</option> kan anges, t.ex.: <option>-K</option>&nbsp;"
+"<replaceable>UID_MIN</replaceable>=<replaceable>100</replaceable>&nbsp;"
+"<option>-K</option>&nbsp;<replaceable>UID_MAX</"
+"replaceable>=<replaceable>499</replaceable>"
+
+#: useradd.8.xml:334(term)
+#, fuzzy
+#| msgid "<option>-l</option>, <option>--list</option>"
+msgid "<option>-l</option>, <option>--no-log-init</option>"
+msgstr "<option>-l</option>, <option>--list</option>"
+
+#: useradd.8.xml:336(para)
+msgid "Do not add the user to the lastlog and faillog databases."
+msgstr ""
+
+#: useradd.8.xml:339(para)
+msgid ""
+"By default, the user's entries in the lastlog and faillog databases are "
+"reset to avoid reusing the entry from a previously deleted user."
+msgstr ""
+
+#: useradd.8.xml:347(term)
+msgid "<option>-m</option>, <option>--create-home</option>"
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:351(para)
+msgid ""
+"Create the user's home directory if it does not exist. The files and "
+"directories contained in the skeleton directory (which can be defined with "
+"the <option>-k</option> option) will be copied to the home directory."
+msgstr ""
+
+#: useradd.8.xml:357(para)
+msgid ""
+"By default, if this option is not specified and <option>CREATE_HOME</option> "
+"is not enabled, no home directories are created."
+msgstr ""
+
+#: useradd.8.xml:365(term)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid "<option>-M</option>, <option>--no-create-home</option>"
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:369(para)
+msgid ""
+"Do no create the user's home directory, even if the system wide setting from "
+"<filename>/etc/login.defs</filename> (<option>CREATE_HOME</option>) is set "
+"to <replaceable>yes</replaceable>."
+msgstr ""
+
+#: useradd.8.xml:378(term)
+#, fuzzy
+#| msgid "<option>-g</option>, <option>--group</option>"
+msgid "<option>-N</option>, <option>--no-user-group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+#: useradd.8.xml:382(para)
+msgid ""
+"Do not create a group with the same name as the user, but add the user to "
+"the group specified by the <option>-g</option> option or by the "
+"<option>GROUP</option> variable in <filename>/etc/default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:388(para) useradd.8.xml:526(para)
+msgid ""
+"The default behavior (if the <option>-g</option>, <option>-N</option>, and "
+"<option>-U</option> options are not specified) is defined by the "
+"<option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+
+#: useradd.8.xml:401(para)
+msgid "Allow the creation of a user account with a duplicate (non-unique) UID."
+msgstr ""
+
+#: useradd.8.xml:402(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid ""
+"This option is only valid in combination with the <option>-u</option> option."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:413(para) groupadd.8.xml:171(para)
+#, fuzzy
+#| msgid ""
+#| "The encrypted password, as returned by "
+#| "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>. The default is to "
+"disable the password."
+msgstr ""
+"Det krypterade lösenordet, som returneras av "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>."
+
+#: useradd.8.xml:430(term) newusers.8.xml:302(term) groupadd.8.xml:188(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-r</option>, <option>--system</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: useradd.8.xml:434(para) newusers.8.xml:306(para)
+msgid "Create a system account."
+msgstr ""
+
+#: useradd.8.xml:437(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are chosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>/etc/login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+
+#: useradd.8.xml:446(para)
+msgid ""
+"Note that <command>useradd</command> will not create a home directory for "
+"such a user, regardless of the default setting in <filename>/etc/login.defs</"
+"filename> (<option>CREATE_HOME</option>). You have to specify the <option>-"
+"m</option> options if you want a home directory for a system account to be "
+"created."
+msgstr ""
+
+#: useradd.8.xml:490(para)
+msgid ""
+"The name of the user's login shell. The default is to leave this field "
+"blank, which causes the system to select the default login shell specified "
+"by the <option>SHELL</option> variable in <filename>/etc/default/useradd</"
+"filename>, or an empty string by default."
+msgstr ""
+
+#: useradd.8.xml:504(para)
+msgid ""
+"The numerical value of the user's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than or equal to "
+"<option>UID_MIN</option> and greater than every other user."
+msgstr ""
+
+#: useradd.8.xml:511(para)
+#, fuzzy
+msgid ""
+"See also the <option>-r</option> option and the <option>UID_MAX</option> "
+"description."
+msgstr ""
+"Flaggorna <option>-r</option>, <option>-h</option> och <option>-f</option> "
+"används endast när <command>login</command> har startats av root."
+
+#: useradd.8.xml:518(term)
+#, fuzzy
+#| msgid "<option>-g</option>, <option>--group</option>"
+msgid "<option>-U</option>, <option>--user-group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+#: useradd.8.xml:522(para)
+msgid ""
+"Create a group with the same name as the user, and add the user to this "
+"group."
+msgstr ""
+
+#: useradd.8.xml:539(para)
+msgid ""
+"The SELinux user for the user's login. The default is to leave this field "
+"blank, which causes the system to select the default SELinux user."
+msgstr ""
+
+#: useradd.8.xml:549(title)
+msgid "Changing the default values"
+msgstr "Ändrar standardvärden"
+
+#: useradd.8.xml:550(para)
+msgid ""
+"When invoked with only the <option>-D</option> option, <command>useradd</"
+"command> will display the current default values. When invoked with <option>-"
+"D</option> plus other options, <command>useradd</command> will update the "
+"default values for the specified options. Valid default-changing options are:"
+msgstr ""
+
+#: useradd.8.xml:563(para)
+msgid ""
+"The path prefix for a new user's home directory. The user's name will be "
+"affixed to the end of <replaceable>BASE_DIR</replaceable> to form the new "
+"user's home directory name, if the <option>-d</option> option is not used "
+"when creating a new account."
+msgstr ""
+
+#: useradd.8.xml:570(para)
+msgid ""
+"This option sets the <option>HOME</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:581(para)
+msgid "The date on which the user account is disabled."
+msgstr "Datumet när användarkontot blir inaktiverat."
+
+#: useradd.8.xml:582(para)
+msgid ""
+"This option sets the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:593(para)
+msgid ""
+"The number of days after a password has expired before the account will be "
+"disabled."
+msgstr ""
+"Antalet dagar efter att ett lösenord har gått ut innan kontot kommer att "
+"inaktiveras."
+
+#: useradd.8.xml:597(para)
+msgid ""
+"This option sets the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:608(para)
+msgid ""
+"The group name or ID for a new user's initial group (when the <option>-N/--"
+"no-user-group</option> is used or when the <option>USERGROUPS_ENAB</option> "
+"variable is set to <replaceable>no</replaceable> in <filename>/etc/login."
+"defs</filename>). The named group must exist, and a numerical group ID must "
+"have an existing entry."
+msgstr ""
+
+#: useradd.8.xml:617(para)
+msgid ""
+"This option sets the <option>GROUP</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:628(para)
+msgid "The name of a new user's login shell."
+msgstr ""
+
+#: useradd.8.xml:631(para)
+msgid ""
+"This option sets the <option>SHELL</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:643(title)
+msgid "NOTES"
+msgstr "NOTERINGAR"
+
+#: useradd.8.xml:644(para)
+#, fuzzy
+#| msgid ""
+#| "The system administrator is responsible for placing the default user "
+#| "files in the <filename>/etc/skel/</filename> directory."
+msgid ""
+"The system administrator is responsible for placing the default user files "
+"in the <filename>/etc/skel/</filename> directory (or any other skeleton "
+"directory specified in <filename>/etc/default/useradd</filename> or on the "
+"command line)."
+msgstr ""
+"Systemadministratören är ansvarig för att placera standardanvändarfiler i "
+"katalogen <filename>/etc/skel/</filename>."
+
+#: useradd.8.xml:653(para)
+#, fuzzy
+msgid ""
+"You may not add a user to a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+"Du får inte lägga till en användare till en NIS-grupp. Detta måste "
+"genomföras på NIS-servern."
+
+#: useradd.8.xml:658(para)
+msgid ""
+"Similarly, if the username already exists in an external user database such "
+"as NIS or LDAP, <command>useradd</command> will deny the user account "
+"creation request."
+msgstr ""
+
+#: useradd.8.xml:664(para)
+#, fuzzy
+#| msgid ""
+#| "Usernames must begin with a lower case letter or an underscore, and only "
+#| "lower case letters, underscores, dashes, and dollar signs may follow. In "
+#| "regular expression terms: [a-z_][a-z0-9_-]*[$]"
+msgid ""
+"Usernames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+"Användarnamn måste börja med en gemen bokstav eller ett understreck och får "
+"endast innehålla gemener, understreck, minustecken och på slutet ett dollar-"
+"tecken. I reguljära uttryckstermer: [a-z_][a-z0-9_-]*[$]"
+
+#: useradd.8.xml:670(para)
+msgid "Usernames may only be up to 32 characters long."
+msgstr ""
+
+#: useradd.8.xml:30(term) login.defs.5.xml:30(term)
+#, fuzzy
+msgid "<option>CREATE_HOME</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: useradd.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"Indicate if a home directory should be created by default for new users."
+msgstr ""
+
+#: useradd.8.xml:36(para) login.defs.5.xml:36(para)
+msgid ""
+"This setting does not apply to system users, and can be overridden on the "
+"command line."
+msgstr ""
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: groupadd.8.xml:32(term)
+#, fuzzy
+msgid "<option>GID_MAX</option> (number)"
+msgstr "GID_MAX (nummer)"
+
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+#: groupadd.8.xml:33(term)
+#, fuzzy
+msgid "<option>GID_MIN</option> (number)"
+msgstr "GID_MIN (nummer)"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+#: groupadd.8.xml:35(para)
+msgid ""
+"Range of group IDs used for the creation of regular groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: groupadd.8.xml:40(para)
+msgid ""
+"The default value for <option>GID_MIN</option> (resp. <option>GID_MAX</"
+"option>) is 1000 (resp. 60000)."
+msgstr ""
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>HOME_MODE</option> (number)"
+msgstr "GID_MAX (nummer)"
+
+#: useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The mode for new home directories. If not specified, the <option>UMASK</"
+"option> is used to create the mode."
+msgstr ""
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+msgid ""
+"<command>useradd</command> and <command>newusers</command> use this to set "
+"the mode of the home directory they create."
+msgstr ""
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_MAX_DAYS</option> (number)"
+msgstr "PASS_MAX_DAYS (nummer)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The maximum number of days a password may be used. If the password is older "
+"than this, a password change will be forced. If not specified, -1 will be "
+"assumed (which disables the restriction)."
+msgstr ""
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_MIN_DAYS</option> (number)"
+msgstr "PASS_MIN_DAYS (nummer)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The minimum number of days allowed between password changes. Any password "
+"changes attempted sooner than this will be rejected. If not specified, -1 "
+"will be assumed (which disables the restriction)."
+msgstr ""
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_WARN_AGE</option> (number)"
+msgstr "PASS_WARN_AGE (nummer)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The number of days warning given before a password expires. A zero means "
+"warning is given only upon the day of expiration, a negative value means no "
+"warning is given. If not specified, no warning will be provided."
+msgstr ""
+
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: groupadd.8.xml:30(term)
+#, fuzzy
+msgid "<option>SYS_GID_MAX</option> (number)"
+msgstr "GID_MAX (nummer)"
+
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: groupadd.8.xml:31(term)
+#, fuzzy
+msgid "<option>SYS_GID_MIN</option> (number)"
+msgstr "GID_MIN (nummer)"
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: groupadd.8.xml:33(para)
+msgid ""
+"Range of group IDs used for the creation of system groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#: groupadd.8.xml:38(para)
+msgid ""
+"The default value for <option>SYS_GID_MIN</option> (resp. "
+"<option>SYS_GID_MAX</option>) is 101 (resp. <option>GID_MIN</option>-1)."
+msgstr ""
+
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#, fuzzy
+msgid "<option>SYS_UID_MAX</option> (number)"
+msgstr "UID_MAX (nummer)"
+
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#, fuzzy
+msgid "<option>SYS_UID_MIN</option> (number)"
+msgstr "UID_MIN (nummer)"
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+msgid ""
+"Range of user IDs used for the creation of system users by <command>useradd</"
+"command> or <command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:37(para) newusers.8.xml:37(para) login.defs.5.xml:37(para)
+msgid ""
+"The default value for <option>SYS_UID_MIN</option> (resp. "
+"<option>SYS_UID_MAX</option>) is 101 (resp. <option>UID_MIN</option>-1)."
+msgstr ""
+
+#: useradd.8.xml:30(term) pwck.8.xml:30(term) login.defs.5.xml:30(term)
+#, fuzzy
+msgid "<option>TCB_AUTH_GROUP</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: useradd.8.xml:32(para) pwck.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"If <replaceable>yes</replaceable>, newly created tcb shadow files will be "
+"group owned by the <replaceable>auth</replaceable> group."
+msgstr ""
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>UID_MAX</option> (number)"
+msgstr "UID_MAX (nummer)"
+
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>UID_MIN</option> (number)"
+msgstr "UID_MIN (nummer)"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"Range of user IDs used for the creation of regular users by "
+"<command>useradd</command> or <command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:39(para) newusers.8.xml:39(para) login.defs.5.xml:39(para)
+msgid ""
+"The default value for <option>UID_MIN</option> (resp. <option>UID_MAX</"
+"option>) is 1000 (resp. 60000)."
+msgstr ""
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: login.1.xml:32(term)
+#, fuzzy
+msgid "<option>UMASK</option> (number)"
+msgstr "UMASK (nummer)"
+
+#: useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: login.1.xml:34(para)
+msgid ""
+"The file mode creation mask is initialized to this value. If not specified, "
+"the mask will be initialized to 022."
+msgstr ""
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#: login.1.xml:38(para)
+msgid ""
+"<command>useradd</command> and <command>newusers</command> use this mask to "
+"set the mode of the home directory they create if <option>HOME_MODE</option> "
+"is not set."
+msgstr ""
+
+#: useradd.8.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: login.1.xml:43(para)
+msgid ""
+"It is also used by <command>login</command> to define users' initial umask. "
+"Note that this mask can be overridden by the user's GECOS line (if "
+"<option>QUOTAS_ENAB</option> is set) or by the specification of a limit with "
+"the <emphasis>K</emphasis> identifier in "
+"<citerefentry><refentrytitle>limits</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+
+#: useradd.8.xml:51(para) newusers.8.xml:51(para) login.defs.5.xml:51(para)
+#: login.1.xml:51(para)
+msgid ""
+"It is also used by <command>pam_umask</command> as the default umask value."
+msgstr ""
+
+#: useradd.8.xml:733(filename)
+msgid "/etc/default/useradd"
+msgstr "/etc/default/useradd"
+
+#: useradd.8.xml:735(para)
+msgid "Default values for account creation."
+msgstr "Standardvärden för skapande av konto."
+
+#: useradd.8.xml:739(filename)
+msgid "/etc/skel/"
+msgstr "/etc/skel/"
+
+#: useradd.8.xml:741(para)
+msgid "Directory containing default files."
+msgstr "Katalog som innehåller standardfiler."
+
+#: useradd.8.xml:789(replaceable) shadow.3.xml:58(manvolnum)
+#: pwck.8.xml:326(replaceable) passwd.1.xml:466(replaceable)
+#: grpck.8.xml:268(replaceable) groupmod.8.xml:269(replaceable)
+#: groupadd.8.xml:313(replaceable)
+msgid "3"
+msgstr "3"
+
+#: useradd.8.xml:791(para) passwd.1.xml:486(para) groupadd.8.xml:315(para)
+msgid "invalid argument to option"
+msgstr "ogiltigt argument till flagga"
+
+#: useradd.8.xml:795(replaceable) pwck.8.xml:332(replaceable)
+#: passwd.1.xml:472(replaceable) grpck.8.xml:274(replaceable)
+#: groupmod.8.xml:275(replaceable) groupadd.8.xml:319(replaceable)
+msgid "4"
+msgstr "4"
+
+#: useradd.8.xml:797(para)
+msgid "UID already in use (and no <option>-o</option>)"
+msgstr "UID används redan (och inget <option>-o</option>)"
+
+#: useradd.8.xml:803(para) groupdel.8.xml:194(para)
+msgid "specified group doesn't exist"
+msgstr "angiven grupp finns inte"
+
+#: useradd.8.xml:807(replaceable) groupmod.8.xml:287(replaceable)
+#: groupadd.8.xml:325(replaceable)
+msgid "9"
+msgstr "9"
+
+#: useradd.8.xml:809(para)
+msgid "username already in use"
+msgstr "användarnamnet används redan"
+
+#: useradd.8.xml:821(para)
+msgid "can't create home directory"
+msgstr "kan inte skapa hemkatalog"
+
+#: useradd.8.xml:825(replaceable)
+#, fuzzy
+#| msgid "1"
+msgid "14"
+msgstr "1"
+
+#: useradd.8.xml:827(para)
+msgid "can't update SELinux user mapping"
+msgstr ""
+
+#: useradd.8.xml:767(para)
+msgid ""
+"The <command>useradd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Kommandot <command>useradd</command> avslutas med följande värden: "
+"<placeholder-1/>"
+
+#: useradd.8.xml:836(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <phrase condition=\"subids"
+"\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: suauth.5.xml:41(contrib) pwconv.8.xml:47(contrib)
+#: login.access.5.xml:42(contrib) gpasswd.1.xml:46(contrib)
+msgid "Creation, 1996"
+msgstr ""
+
+#: suauth.5.xml:57(refentrytitle) suauth.5.xml:64(refname)
+msgid "suauth"
+msgstr "suauth"
+
+#: suauth.5.xml:58(manvolnum) shadow.5.xml:58(manvolnum)
+#: pwck.8.xml:338(replaceable) porttime.5.xml:58(manvolnum)
+#: passwd.5.xml:58(manvolnum) passwd.1.xml:478(replaceable)
+#: login.defs.5.xml:125(manvolnum) login.access.5.xml:59(manvolnum)
+#: limits.5.xml:60(manvolnum) gshadow.5.xml:47(manvolnum)
+#: grpck.8.xml:280(replaceable) faillog.5.xml:58(manvolnum)
+msgid "5"
+msgstr "5"
+
+#: suauth.5.xml:59(refmiscinfo) shadow.5.xml:59(refmiscinfo)
+#: porttime.5.xml:59(refmiscinfo) passwd.5.xml:59(refmiscinfo)
+#: login.defs.5.xml:126(refmiscinfo) login.access.5.xml:60(refmiscinfo)
+#: limits.5.xml:61(refmiscinfo) gshadow.5.xml:48(refmiscinfo)
+#: faillog.5.xml:59(refmiscinfo)
+msgid "File Formats and Conversions"
+msgstr "Filformat och konversioner"
+
+#: suauth.5.xml:65(refpurpose)
+msgid "detailed su control file"
+msgstr "detaljerad kontrollfil för su"
+
+#: suauth.5.xml:70(command) suauth.5.xml:196(filename)
+msgid "/etc/suauth"
+msgstr "/etc/suauth"
+
+#: suauth.5.xml:76(para)
+msgid ""
+"The file <filename>/etc/suauth</filename> is referenced whenever the su "
+"command is called. It can change the behaviour of the su command, based upon:"
+msgstr ""
+
+#. .RS
+#: suauth.5.xml:83(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+" 1) the user su is targeting\n"
+" "
+msgstr ""
+
+#. .fi
+#: suauth.5.xml:87(para)
+msgid ""
+"2) the user executing the su command (or any groups he might be a member of)"
+msgstr ""
+
+#: suauth.5.xml:92(para)
+msgid ""
+"The file is formatted like this, with lines starting with a # being treated "
+"as comment lines and ignored;"
+msgstr ""
+"Filen är i följande format, med de rader som inleds med # behandlas som "
+"kommentarsrader och ignoreras;"
+
+#: suauth.5.xml:97(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+" to-id:from-id:ACTION\n"
+" "
+msgstr ""
+"\n"
+" till-id:från-id:ÅTGÄRD\n"
+" "
+
+#: suauth.5.xml:101(para)
+#, fuzzy
+#| msgid ""
+#| "Where to-id is either the word <emphasis>ALL</emphasis>, a list of "
+#| "usernames delimited by \",\" or the words <emphasis>ALL EXCEPT</emphasis> "
+#| "followed by a list of usernames delimited by \",\""
+msgid ""
+"Where to-id is either the word <emphasis>ALL</emphasis>, a list of usernames "
+"delimited by \",\" or the words <emphasis>ALL EXCEPT</emphasis> followed by "
+"a list of usernames delimited by \",\"."
+msgstr ""
+"Där till-id är antingen ordet <emphasis>ALL</emphasis>, en lista med "
+"användarnamn separerade med \",\" eller orden <emphasis>ALL EXCEPT</"
+"emphasis> följt av en lista med användarnamn separerade med \",\""
+
+#: suauth.5.xml:107(para)
+#, fuzzy
+#| msgid ""
+#| "from-id is formatted the same as to-id except the extra word "
+#| "<emphasis>GROUP</emphasis> is recognised. <emphasis>ALL EXCEPT GROUP</"
+#| "emphasis> is perfectly valid too. Following <emphasis>GROUP</emphasis> "
+#| "appears one or more group names, delimited by \",\". It is not sufficient "
+#| "to have primary group id of the relevant group, an entry in "
+#| "<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry> is neccessary."
+msgid ""
+"from-id is formatted the same as to-id except the extra word "
+"<emphasis>GROUP</emphasis> is recognized. <emphasis>ALL EXCEPT GROUP</"
+"emphasis> is perfectly valid too. Following <emphasis>GROUP</emphasis> "
+"appears one or more group names, delimited by \",\". It is not sufficient to "
+"have primary group id of the relevant group, an entry in "
+"<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry> is necessary."
+msgstr ""
+"från-id är formaterad på samma sätt som till-id förutom att det extra ordet "
+"<emphasis>GROUP</emphasis> känns igen. <emphasis>ALL EXCEPT GROUP</emphasis> "
+"är helt giltigt också. Efterföljande till <emphasis>GROUP</emphasis> kan "
+"vara ett eller flera gruppnamn, separerade med \",\". Det är inte "
+"tillräckligt att ha primärt grupp-id för den relevanta gruppen, en post i "
+"<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry> är nödvändigt."
+
+#: suauth.5.xml:118(para)
+msgid "Action can be one only of the following currently supported options."
+msgstr "Åtgärden kan endast vara en av följande för närvarande stödda flaggor."
+
+#: suauth.5.xml:124(emphasis)
+msgid "DENY"
+msgstr "DENY"
+
+#: suauth.5.xml:127(para)
+msgid "The attempt to su is stopped before a password is even asked for."
+msgstr "Försöket att använda su stoppades före ett lösenord har efterfrågats."
+
+#: suauth.5.xml:134(emphasis)
+msgid "NOPASS"
+msgstr "NOPASS"
+
+#: suauth.5.xml:137(para)
+msgid ""
+"The attempt to su is automatically successful; no password is asked for."
+msgstr ""
+"Försöket att använda su lyckades helt automatiskt; inget lösenord har "
+"efterfrågats."
+
+#: suauth.5.xml:145(emphasis)
+msgid "OWNPASS"
+msgstr "OWNPASS"
+
+#: suauth.5.xml:148(para)
+msgid ""
+"For the su command to be successful, the user must enter his or her own "
+"password. They are told this."
+msgstr ""
+"För att su-kommandot ska lyckas måste användaren mata in sitt egna lösenord. "
+"De blir frågade att göra detta."
+
+#: suauth.5.xml:156(para)
+msgid ""
+"Note there are three separate fields delimited by a colon. No whitespace "
+"must surround this colon. Also note that the file is examined sequentially "
+"line by line, and the first applicable rule is used without examining the "
+"file further. This makes it possible for a system administrator to exercise "
+"as fine control as he or she wishes."
+msgstr ""
+
+#: suauth.5.xml:166(title)
+msgid "EXAMPLE"
+msgstr "EXEMPEL"
+
+#: suauth.5.xml:167(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+" # sample /etc/suauth file\n"
+" #\n"
+" # A couple of privileged usernames may\n"
+" # su to root with their own password.\n"
+" #\n"
+" root:chris,birddog:OWNPASS\n"
+" #\n"
+" # Anyone else may not su to root unless in\n"
+" # group wheel. This is how BSD does things.\n"
+" #\n"
+" root:ALL EXCEPT GROUP wheel:DENY\n"
+" #\n"
+" # Perhaps terry and birddog are accounts\n"
+" # owned by the same person.\n"
+" # Access can be arranged between them\n"
+" # with no password.\n"
+" #\n"
+" terry:birddog:NOPASS\n"
+" birddog:terry:NOPASS\n"
+" #\n"
+" "
+msgstr ""
+"\n"
+" # exempelfil för /etc/suauth\n"
+" #\n"
+" # Ett par priviligerade användarnamn som \n"
+" # kan su till root med sina egna lösenord.\n"
+" #\n"
+" root:bosse,birddog:OWNPASS\n"
+" #\n"
+" # Alla andra kan inte su till root om de inte finns\n"
+" # gruppen wheel. Det är så BSD gör saker.\n"
+" #\n"
+" root:ALL EXCEPT GROUP wheel:DENY\n"
+" #\n"
+" # Kanske terry och birddog är konton som\n"
+" # ägs av samma person.\n"
+" # Tillgång kan ges mellan dem utan\n"
+" # lösenord.\n"
+" #\n"
+" terry:birddog:NOPASS\n"
+" birddog:terry:NOPASS\n"
+" #\n"
+" "
+
+#: suauth.5.xml:203(title) pwconv.8.xml:216(title) login.defs.5.xml:531(title)
+msgid "BUGS"
+msgstr "FEL"
+
+#: suauth.5.xml:204(para)
+msgid ""
+"There could be plenty lurking. The file parser is particularly unforgiving "
+"about syntax errors, expecting no spurious whitespace (apart from beginning "
+"and end of lines), and a specific token delimiting different things."
+msgstr ""
+
+#: suauth.5.xml:213(title) shadow.3.xml:208(title)
+msgid "DIAGNOSTICS"
+msgstr "DIAGNOSTIK"
+
+#: suauth.5.xml:214(para)
+msgid ""
+"An error parsing the file is reported using "
+"<citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry> as level ERR on facility AUTH."
+msgstr ""
+
+#: suauth.5.xml:223(para)
+msgid ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: su.1.xml:58(contrib) shadow.5.xml:41(contrib) shadow.3.xml:41(contrib)
+#: porttime.5.xml:41(contrib) passwd.5.xml:41(contrib) passwd.1.xml:48(contrib)
+#: login.1.xml:74(contrib) faillog.8.xml:41(contrib) faillog.5.xml:41(contrib)
+msgid "Creation, 1989"
+msgstr ""
+
+#: su.1.xml:74(refentrytitle) su.1.xml:81(refname) su.1.xml:86(command)
+#: login.defs.5.xml:456(term)
+msgid "su"
+msgstr "su"
+
+#: su.1.xml:76(refmiscinfo) sg.1.xml:60(refmiscinfo)
+#: passwd.1.xml:66(refmiscinfo) newgrp.1.xml:60(refmiscinfo)
+#: login.1.xml:92(refmiscinfo) groups.1.xml:59(refmiscinfo)
+#: gpasswd.1.xml:64(refmiscinfo) expiry.1.xml:63(refmiscinfo)
+#: chsh.1.xml:62(refmiscinfo) chfn.1.xml:62(refmiscinfo)
+#: chage.1.xml:60(refmiscinfo)
+msgid "User Commands"
+msgstr "Användarkommandon"
+
+#: su.1.xml:82(refpurpose)
+#, fuzzy
+msgid "change user ID or become superuser"
+msgstr "ändra användar-id eller bli superanvändare"
+
+#: su.1.xml:91(replaceable) sg.1.xml:72(arg) newgrp.1.xml:71(arg)
+msgid "-"
+msgstr "-"
+
+#: su.1.xml:94(replaceable) login.1.xml:107(replaceable)
+#: login.1.xml:115(replaceable)
+msgid "username"
+msgstr "användarnamn"
+
+#: su.1.xml:96(replaceable)
+msgid "args"
+msgstr ""
+
+#: su.1.xml:104(para)
+#, fuzzy
+msgid ""
+"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."
+msgstr ""
+"<command>su</command> används för att bli en annan användare under en "
+"inloggningssession. Om det startas utan <option>användarnamn</option>, "
+"väljer <command>su</command> superanvändaren. Det valfria argumentet "
+"<option>-</option> kan användas för att tillhandahålla en miljö som liknar "
+"den som användaren skulle förvänta sig om användaren hade loggat in direkt."
+
+#: su.1.xml:114(para)
+msgid ""
+"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>."
+msgstr ""
+
+#: su.1.xml:122(para)
+msgid ""
+"The user will be prompted for a password, if appropriate. Invalid passwords "
+"will produce an error message. All attempts, both valid and invalid, are "
+"logged to detect abuse of the system."
+msgstr ""
+"Användaren kommer att frågas efter ett lösenord, om det är lämpligt. "
+"Ogiltiga lösenord kommer att ge ett felmeddelande. Alla försök, både giltiga "
+"och ogiltiga, loggas för att detektera misskötsel av systemet."
+
+#: su.1.xml:127(para)
+msgid ""
+"The current environment is passed to the new shell. The value of <envar>"
+"$PATH</envar> is reset to <filename>/bin:/usr/bin</filename> for normal "
+"users, or <filename>/sbin:/bin:/usr/sbin:/usr/bin</filename> for the "
+"superuser. This may be changed with the <option>ENV_PATH</option> and "
+"<option>ENV_SUPATH</option> definitions in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+
+#: su.1.xml:136(para) login.1.xml:188(para)
+msgid ""
+"A subsystem login is indicated by the presence of a \"*\" as the first "
+"character of the login shell. The given home directory will be used as the "
+"root of a new file system which the user is actually logged into."
+msgstr ""
+
+#: su.1.xml:145(para)
+msgid "The options which apply to the <command>su</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>su</command> är:"
+
+#: su.1.xml:149(term)
+#, fuzzy
+msgid ""
+"<option>-c</option>, <option>--command</option>&nbsp;<replaceable>COMMAND</"
+"replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--comment</option>&nbsp;<replaceable>KOMMENTAR</"
+"replaceable>"
+
+#: su.1.xml:153(para)
+msgid ""
+"Specify a command that will be invoked by the shell using its <option>-c</"
+"option>."
+msgstr "Ange ett kommando som ska startas av skalet med <option>-c</option>."
+
+#: su.1.xml:157(para)
+msgid ""
+"The executed command will have no controlling terminal. This option cannot "
+"be used to execute interactive programs which need a controlling TTY."
+msgstr ""
+
+#: su.1.xml:167(term)
+msgid "<option>-</option>, <option>-l</option>, <option>--login</option>"
+msgstr "<option>-</option>, <option>-l</option>, <option>--login</option>"
+
+#: su.1.xml:171(para)
+msgid ""
+"Provide an environment similar to what the user would expect had the user "
+"logged in directly."
+msgstr ""
+"Tillhandahåll en miljö som liknar den som användaren skulle förvänta sig om "
+"användaren loggat in direkt."
+
+#: su.1.xml:175(para)
+#, fuzzy
+#| msgid ""
+#| "When <option>-</option> is used, it must be specified as the last "
+#| "<command>su</command> option. The other forms (<option>-l</option> and "
+#| "<option>--login</option>) do not have this restriction."
+msgid ""
+"When <option>-</option> is used, it must be specified before any "
+"<option>username</option>. For portability it is recommended to use it as "
+"last option, before any <option>username</option>. The other forms (<option>-"
+"l</option> and <option>--login</option>) do not have this restriction."
+msgstr ""
+"När <option>-</option> används måste den anges som den sista flaggan för "
+"<command>su</command>. De andra formerna (<option>-l</option> och <option>--"
+"login</option>) har inte denna restriktion."
+
+#: su.1.xml:190(para)
+msgid "The shell that will be invoked."
+msgstr "Skalet som ska startas."
+
+#: su.1.xml:198(para)
+msgid "The shell specified with --shell."
+msgstr "Skalet angivet med --shell."
+
+#: su.1.xml:201(para)
+msgid ""
+"If <option>--preserve-environment</option> is used, the shell specified by "
+"the <envar>$SHELL</envar> environment variable."
+msgstr ""
+"Om <option>--preserve-environment</option> används, anges skalet med "
+"miljövariabeln <envar>$SHELL</envar>."
+
+#: su.1.xml:208(para)
+msgid ""
+"The shell indicated in the <filename>/etc/passwd</filename> entry for the "
+"target user."
+msgstr ""
+
+#: su.1.xml:214(para)
+msgid ""
+"<filename>/bin/sh</filename> if a shell could not be found by any above "
+"method."
+msgstr ""
+"<filename>/bin/sh</filename> om ett skal inte kunde hittas med någon "
+"ovanstående metod."
+
+#: su.1.xml:191(para)
+msgid ""
+"The invoked shell is chosen from (highest priority first): <placeholder-1/>"
+msgstr ""
+
+#: su.1.xml:219(para)
+msgid ""
+"If the target user has a restricted shell (i.e. the shell field of this "
+"user's entry in <filename>/etc/passwd</filename> is not listed in <filename>/"
+"etc/shells</filename>), then the <option>--shell</option> option or the "
+"<envar>$SHELL</envar> environment variable won't be taken into account, "
+"unless <command>su</command> is called by root."
+msgstr ""
+
+#: su.1.xml:230(term)
+msgid ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+msgstr ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+
+#: su.1.xml:239(envar)
+msgid "$PATH"
+msgstr ""
+
+#: su.1.xml:241(para)
+msgid ""
+"reset according to the <filename>/etc/login.defs</filename> options "
+"<option>ENV_PATH</option> or <option>ENV_SUPATH</option> (see below);"
+msgstr ""
+
+#: su.1.xml:250(envar)
+msgid "$IFS"
+msgstr ""
+
+#: su.1.xml:252(para)
+msgid ""
+"reset to <quote>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</quote>, if it was "
+"set."
+msgstr ""
+
+#: su.1.xml:235(para)
+#, fuzzy
+#| msgid "Preserve the current environment."
+msgid "Preserve the current environment, except for: <placeholder-1/>"
+msgstr "Behåll den aktuella miljön."
+
+#: su.1.xml:261(para)
+msgid ""
+"If the target user has a restricted shell, this option has no effect (unless "
+"<command>su</command> is called by root)."
+msgstr ""
+"Om målanvändaren har ett begränsat skal har denna flagga ingen effekt "
+"(såvida inte <command>su</command> har startats av root)."
+
+#: su.1.xml:270(para)
+msgid ""
+"The <envar>$HOME</envar>, <envar>$SHELL</envar>, <envar>$USER</envar>, "
+"<envar>$LOGNAME</envar>, <envar>$PATH</envar>, and <envar>$IFS</envar> "
+"environment variables are reset."
+msgstr ""
+
+#: su.1.xml:279(para)
+msgid ""
+"If <option>--login</option> is not used, the environment is copied, except "
+"for the variables above."
+msgstr ""
+
+#: su.1.xml:286(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TERM</envar>, <envar>"
+"$COLORTERM</envar>, <envar>$DISPLAY</envar>, and <envar>$XAUTHORITY</envar> "
+"environment variables are copied if they were set."
+msgstr ""
+
+#: su.1.xml:296(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TZ</envar>, <envar>$HZ</"
+"envar>, and <envar>$MAIL</envar> environment variables are set according to "
+"the <filename>/etc/login.defs</filename> options <option>ENV_TZ</option>, "
+"<option>ENV_HZ</option>, <option>MAIL_DIR</option>, and <option>MAIL_FILE</"
+"option> (see below)."
+msgstr ""
+
+#: su.1.xml:309(para)
+msgid ""
+"If <option>--login</option> is used, other environment variables might be "
+"set by the <option>ENVIRON_FILE</option> file (see below)."
+msgstr ""
+
+#: su.1.xml:317(para)
+msgid "Other environments might be set by PAM modules."
+msgstr ""
+
+#: su.1.xml:265(para)
+msgid ""
+"Note that the default behavior for the environment is the following: "
+"<placeholder-1/>"
+msgstr ""
+
+#: su.1.xml:331(para)
+msgid ""
+"This version of <command>su</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+"Denna version av <command>su</command> har många kompileringsflaggor, kanske "
+"bara några används på specifika system."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>CONSOLE</option> (string)"
+msgstr "CHFN_RESTRICT (sträng)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, either full pathname of a file containing device names (one per "
+"line) or a \":\" delimited list of device names. Root logins will be allowed "
+"only upon these devices."
+msgstr ""
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid "If not defined, root will be allowed on any device."
+msgstr ""
+
+#: su.1.xml:42(para) login.defs.5.xml:42(para) login.1.xml:42(para)
+msgid "The device should be specified without the /dev/ prefix."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>CONSOLE_GROUPS</option> (string)"
+msgstr "CHFN_RESTRICT (sträng)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"List of groups to add to the user's supplementary groups set when logging in "
+"on the console (as determined by the CONSOLE setting). Default is none. "
+"<placeholder-1/> Use with caution - it is possible for users to gain "
+"permanent access to these groups, even when not logged in on the console."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>DEFAULT_HOME</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Indicate if login is allowed if we can't cd to the home directory. Default "
+"is no."
+msgstr ""
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, the user will login in the root "
+"(<filename>/</filename>) directory if it is not possible to cd to her home "
+"directory."
+msgstr ""
+
+#. XXX: When compiled with PAM support, only sulogin uses ENV_HZ
+#: su.1.xml:33(term) login.defs.5.xml:33(term) login.1.xml:33(term)
+#, fuzzy
+msgid "<option>ENV_HZ</option> (string)"
+msgstr "MAIL_DIR (sträng)"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"If set, it will be used to define the HZ environment variable when a user "
+"login. The value must be preceded by <replaceable>HZ=</replaceable>. A "
+"common value on Linux is <replaceable>HZ=100</replaceable>."
+msgstr ""
+
+#: su.1.xml:41(para) login.defs.5.xml:41(para) login.1.xml:41(para)
+msgid ""
+"The <envar>HZ</envar> environment variable is only set when the user (the "
+"superuser) logs in with <command>sulogin</command>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENVIRON_FILE</option> (string)"
+msgstr "MAIL_DIR (sträng)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If this file exists and is readable, login environment will be read from it. "
+"Every line should be in the form name=value."
+msgstr ""
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+#, fuzzy
+#| msgid ""
+#| "The file is formatted like this, with lines starting with a # being "
+#| "treated as comment lines and ignored;"
+msgid "Lines starting with a # are treated as comment lines and ignored."
+msgstr ""
+"Filen är i följande format, med de rader som inleds med # behandlas som "
+"kommentarsrader och ignoreras;"
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENV_PATH</option> (string)"
+msgstr "CHFN_RESTRICT (sträng)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the PATH environment variable when a "
+"regular user login. The value is a colon separated list of paths (for "
+"example <replaceable>/bin:/usr/bin</replaceable>) and can be preceded by "
+"<replaceable>PATH=</replaceable>. The default value is <replaceable>PATH=/"
+"bin:/usr/bin</replaceable>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENV_SUPATH</option> (string)"
+msgstr "CHFN_RESTRICT (sträng)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the PATH environment variable when the "
+"superuser login. The value is a colon separated list of paths (for example "
+"<replaceable>/sbin:/bin:/usr/sbin:/usr/bin</replaceable>) and can be "
+"preceded by <replaceable>PATH=</replaceable>. The default value is "
+"<replaceable>PATH=/sbin:/bin:/usr/sbin:/usr/bin</replaceable>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENV_TZ</option> (string)"
+msgstr "CHFN_RESTRICT (sträng)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the TZ environment variable when a user "
+"login. The value can be the name of a timezone preceded by <replaceable>TZ=</"
+"replaceable> (for example <replaceable>TZ=CST6CDT</replaceable>), or the "
+"full path to the file containing the timezone specification (for example "
+"<filename>/etc/tzname</filename>)."
+msgstr ""
+
+#. TODO: it can in fact be used to set any other variable
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"If a full path is specified but the file does not exist or cannot be read, "
+"the default is to use <replaceable>TZ=CST6CDT</replaceable>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#: chsh.1.xml:32(term) chfn.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOGIN_STRING</option> (string)"
+msgstr "CHFN_RESTRICT (sträng)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+#: chsh.1.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"The string used for prompting a password. The default is to use \"Password: "
+"\", or a translation of that string. If you set this variable, the prompt "
+"will not be translated."
+msgstr ""
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+#: chsh.1.xml:39(para) chfn.1.xml:39(para)
+msgid ""
+"If the string contains <replaceable>%s</replaceable>, this will be replaced "
+"by the user's name."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>MAIL_CHECK_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable checking and display of mailbox status upon login."
+msgstr ""
+
+#: su.1.xml:37(para) login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"You should disable it if the shell startup files already check for mail "
+"(\"mailx -e\" or equivalent)."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>QUOTAS_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable setting of resource limits from <filename>/etc/limits</filename> and "
+"ulimit, umask, and niceness from the user's passwd gecos field."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SULOG_FILE</option> (string)"
+msgstr "CHFN_RESTRICT (sträng)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "If defined, all su activity is logged to this file."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SU_NAME</option> (string)"
+msgstr "MAIL_DIR (sträng)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"If defined, the command name to display when running \"su -\". For example, "
+"if this is defined as \"su\" then a \"ps\" will display the command is \"-su"
+"\". If not defined, then \"ps\" would display the name of the shell actually "
+"being run, e.g. something like \"-sh\"."
+msgstr ""
+
+#: su.1.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>SU_WHEEL_ONLY</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the user must be listed as a member of "
+"the first gid 0 group in <filename>/etc/group</filename> (called "
+"<replaceable>root</replaceable> on most Linux systems) to be able to "
+"<command>su</command> to uid 0 accounts. If the group doesn't exist or is "
+"empty, no one will be able to <command>su</command> to uid 0."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SYSLOG_SU_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"Enable \"syslog\" logging of <command>su</command> activity - in addition to "
+"sulog file logging."
+msgstr ""
+
+#: su.1.xml:391(para)
+msgid ""
+"On success, <command>su</command> returns the exit value of the command it "
+"executed."
+msgstr ""
+
+#: su.1.xml:395(para)
+msgid ""
+"If this command was terminated by a signal, <command>su</command> returns "
+"the number of this signal plus 128."
+msgstr ""
+
+#: su.1.xml:399(para)
+msgid ""
+"If su has to kill the command (because it was asked to terminate, and the "
+"command did not terminate in time), <command>su</command> returns 255."
+msgstr ""
+
+#: su.1.xml:411(para)
+msgid "success (<option>--help</option> only)"
+msgstr ""
+
+#: su.1.xml:417(para)
+msgid "System or authentication failure"
+msgstr ""
+
+#: su.1.xml:421(replaceable)
+#, fuzzy
+#| msgid "12"
+msgid "126"
+msgstr "12"
+
+#: su.1.xml:423(para)
+#, fuzzy
+#| msgid "execute command as different group ID"
+msgid "The requested command was not found"
+msgstr "kör kommando med annat grupp-id"
+
+#: su.1.xml:427(replaceable)
+#, fuzzy
+#| msgid "12"
+msgid "127"
+msgstr "12"
+
+#: su.1.xml:429(para)
+msgid "The requested command could not be executed"
+msgstr ""
+
+#: su.1.xml:404(para)
+msgid ""
+"Some exit values from <command>su</command> are independent from the "
+"executed command: <placeholder-1/>"
+msgstr ""
+
+#: su.1.xml:438(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>sh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>"
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>"
+
+#: sg.1.xml:58(refentrytitle) sg.1.xml:65(refname) sg.1.xml:71(command)
+msgid "sg"
+msgstr "sg"
+
+#: sg.1.xml:66(refpurpose)
+msgid "execute command as different group ID"
+msgstr "kör kommando med annat grupp-id"
+
+#: sg.1.xml:74(arg)
+msgid "-c"
+msgstr "-c"
+
+#: sg.1.xml:73(arg)
+msgid "group <placeholder-1/> command"
+msgstr "grupp <placeholder-1/> kommando"
+
+#: sg.1.xml:82(para)
+msgid ""
+"The <command>sg</command> command works similar to <command>newgrp</command> "
+"but accepts a command. The command will be executed with the <filename>/bin/"
+"sh</filename> shell. With most shells you may run <command>sg</command> "
+"from, you need to enclose multi-word commands in quotes. Another difference "
+"between <command>newgrp</command> and <command>sg</command> is that some "
+"shells treat <command>newgrp</command> specially, replacing themselves with "
+"a new instance of a shell that <command>newgrp</command> creates. This "
+"doesn't happen with <command>sg</command>, so upon exit from a <command>sg</"
+"command> command you are returned to your previous group ID."
+msgstr ""
+
+#: sg.1.xml:32(term) newgrp.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SYSLOG_SG_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: sg.1.xml:34(para) newgrp.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable \"syslog\" logging of <command>sg</command> activity."
+msgstr ""
+
+#: sg.1.xml:141(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>login</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>"
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>"
+
+#: shadow.5.xml:57(refentrytitle) shadow.5.xml:64(refname)
+#: shadow.3.xml:57(refentrytitle) shadow.3.xml:64(refname)
+#: pwck.8.xml:84(replaceable) grpck.8.xml:76(replaceable)
+msgid "shadow"
+msgstr "shadow"
+
+#: shadow.5.xml:65(refpurpose)
+#, fuzzy
+#| msgid "the password file"
+msgid "shadowed password file"
+msgstr "lösenordsfilen"
+
+#: shadow.5.xml:70(para)
+#, fuzzy
+#| msgid ""
+#| "<filename>/etc/gshadow</filename> contains the shadowed information for "
+#| "group accounts. It contains lines with the following colon-separated "
+#| "fields:"
+msgid ""
+"<filename>shadow</filename> is a file which contains the password "
+"information for the system's accounts and optional aging information."
+msgstr ""
+"<filename>/etc/gshadow</filename> innehåller skuggad gruppkontoinformation. "
+"Den innehåller rader med följande kolonseparerade fält:"
+
+#: shadow.5.xml:76(para) gshadow.5.xml:64(para)
+msgid ""
+"This file must not be readable by regular users if password security is to "
+"be maintained."
+msgstr ""
+"Denna fil får inte vara läsbar av vanliga användare om lösenordssäkerheten "
+"ska upprätthållas."
+
+#: shadow.5.xml:81(para)
+msgid ""
+"Each line of this file contains 9 fields, separated by colons (<quote>:</"
+"quote>), in the following order:"
+msgstr ""
+
+#: shadow.5.xml:88(emphasis) passwd.5.xml:78(para)
+msgid "login name"
+msgstr "inloggningsnamn"
+
+#: shadow.5.xml:90(para)
+msgid "It must be a valid account name, which exist on the system."
+msgstr ""
+
+#: shadow.5.xml:96(emphasis) gshadow.5.xml:83(emphasis)
+msgid "encrypted password"
+msgstr "krypterat lösenord"
+
+#: shadow.5.xml:98(para)
+msgid ""
+"This field may be empty, in which case no passwords are required to "
+"authenticate as the specified login name. However, some applications which "
+"read the <filename>/etc/shadow</filename> file may decide not to permit any "
+"access at all if the password field is empty."
+msgstr ""
+
+#: shadow.5.xml:105(para) gshadow.5.xml:107(para)
+msgid ""
+"A password field which starts with an exclamation mark means that the "
+"password is locked. The remaining characters on the line represent the "
+"password field before the password was locked."
+msgstr ""
+
+#: shadow.5.xml:111(para) passwd.5.xml:126(para) gshadow.5.xml:85(para)
+msgid ""
+"Refer to <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry> for details on how this string is interpreted."
+msgstr ""
+"Referera till <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry> för detaljer om hur "
+"denna sträng tolkas."
+
+#: shadow.5.xml:116(para) passwd.5.xml:131(para)
+#, fuzzy
+msgid ""
+"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)."
+msgstr ""
+"Referera till <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry> för detaljer om hur "
+"denna sträng tolkas."
+
+#: shadow.5.xml:127(emphasis)
+#, fuzzy
+#| msgid "days before password may be changed"
+msgid "date of last password change"
+msgstr "dagar innan lösenordet får ändras"
+
+#: shadow.5.xml:130(para)
+msgid ""
+"The date of the last password change, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:134(para)
+msgid ""
+"The value 0 has a special meaning, which is that the user should change her "
+"password the next time she will log in the system."
+msgstr ""
+
+#: shadow.5.xml:139(para)
+msgid "An empty field means that password aging features are disabled."
+msgstr ""
+
+#: shadow.5.xml:146(emphasis)
+#, fuzzy
+#| msgid "Password Changes"
+msgid "minimum password age"
+msgstr "Lösenordsändringar"
+
+#: shadow.5.xml:148(para)
+msgid ""
+"The minimum password age is the number of days the user will have to wait "
+"before she will be allowed to change her password again."
+msgstr ""
+
+#: shadow.5.xml:153(para)
+msgid "An empty field and value 0 mean that there are no minimum password age."
+msgstr ""
+
+#: shadow.5.xml:160(emphasis)
+#, fuzzy
+#| msgid "Password Changes"
+msgid "maximum password age"
+msgstr "Lösenordsändringar"
+
+#: shadow.5.xml:162(para)
+msgid ""
+"The maximum password age is the number of days after which the user will "
+"have to change her password."
+msgstr ""
+
+#: shadow.5.xml:166(para)
+msgid ""
+"After this number of days is elapsed, the password may still be valid. The "
+"user should be asked to change her password the next time she will log in."
+msgstr ""
+
+#: shadow.5.xml:171(para)
+msgid ""
+"An empty field means that there are no maximum password age, no password "
+"warning period, and no password inactivity period (see below)."
+msgstr ""
+
+#: shadow.5.xml:176(para)
+msgid ""
+"If the maximum password age is lower than the minimum password age, the user "
+"cannot change her password."
+msgstr ""
+
+#: shadow.5.xml:184(emphasis)
+#, fuzzy
+#| msgid "Password Changes"
+msgid "password warning period"
+msgstr "Lösenordsändringar"
+
+#: shadow.5.xml:187(para)
+#, fuzzy
+#| msgid ""
+#| "The number of days after a password has expired before the account will "
+#| "be disabled."
+msgid ""
+"The number of days before a password is going to expire (see the maximum "
+"password age above) during which the user should be warned."
+msgstr ""
+"Antalet dagar efter att ett lösenord har gått ut innan kontot kommer att "
+"inaktiveras."
+
+#: shadow.5.xml:192(para)
+msgid ""
+"An empty field and value 0 mean that there are no password warning period."
+msgstr ""
+
+#: shadow.5.xml:200(emphasis)
+msgid "password inactivity period"
+msgstr ""
+
+#: shadow.5.xml:203(para)
+msgid ""
+"The number of days after a password has expired (see the maximum password "
+"age above) during which the password should still be accepted (and the user "
+"should update her password during the next login)."
+msgstr ""
+
+#: shadow.5.xml:209(para)
+msgid ""
+"After expiration of the password and this expiration period is elapsed, no "
+"login is possible using the current user's password. The user should contact "
+"her administrator."
+msgstr ""
+
+#: shadow.5.xml:214(para)
+msgid ""
+"An empty field means that there are no enforcement of an inactivity period."
+msgstr ""
+
+#: shadow.5.xml:222(emphasis)
+#, fuzzy
+#| msgid "User account information."
+msgid "account expiration date"
+msgstr "Användarkontoinformation."
+
+#: shadow.5.xml:225(para)
+msgid ""
+"The date of expiration of the account, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:229(para)
+msgid ""
+"Note that an account expiration differs from a password expiration. In case "
+"of an account expiration, the user shall not be allowed to login. In case of "
+"a password expiration, the user is not allowed to login using her password."
+msgstr ""
+
+#: shadow.5.xml:235(para)
+msgid "An empty field means that the account will never expire."
+msgstr ""
+
+#: shadow.5.xml:238(para)
+msgid ""
+"The value 0 should not be used as it is interpreted as either an account "
+"with no expiration, or as an expiration on Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:246(emphasis)
+#, fuzzy
+#| msgid "a reserved field"
+msgid "reserved field"
+msgstr "ett reserverat fält"
+
+#: shadow.5.xml:248(para)
+#, fuzzy
+#| msgid "sp_flag - reserved for future use"
+msgid "This field is reserved for future use."
+msgstr "sp_flag - reserverat för framtida användning"
+
+#: shadow.5.xml:270(filename)
+#, fuzzy
+#| msgid "/etc/shadow"
+msgid "/etc/shadow-"
+msgstr "/etc/shadow"
+
+#: shadow.5.xml:272(para)
+msgid "Backup file for /etc/shadow."
+msgstr ""
+
+#: shadow.5.xml:273(para) passwd.5.xml:178(para)
+msgid ""
+"Note that this file is used by the tools of the shadow toolsuite, but not by "
+"all user and password management tools."
+msgstr ""
+
+#: shadow.5.xml:284(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>"
+msgid ""
+"<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>"
+
+#: shadow.3.xml:59(refmiscinfo)
+msgid "Library Calls"
+msgstr "Biblioteksanrop"
+
+#: shadow.3.xml:65(refname)
+msgid "getspnam"
+msgstr "getspnam"
+
+#: shadow.3.xml:66(refpurpose)
+msgid "encrypted password file routines"
+msgstr ""
+
+#: shadow.3.xml:70(title)
+msgid "SYNTAX"
+msgstr "SYNTAX"
+
+#: shadow.3.xml:72(emphasis)
+msgid "#include &lt;shadow.h&gt;"
+msgstr "#include &lt;shadow.h&gt;"
+
+#: shadow.3.xml:76(emphasis)
+msgid "struct spwd *getspent();"
+msgstr "struct spwd *getspent();"
+
+#: shadow.3.xml:80(emphasis)
+msgid "struct spwd *getspnam(char"
+msgstr "struct spwd *getspnam(char"
+
+#: shadow.3.xml:81(emphasis)
+msgid "*name"
+msgstr "*name"
+
+#: shadow.3.xml:81(emphasis) shadow.3.xml:94(emphasis)
+#: shadow.3.xml:99(emphasis) shadow.3.xml:105(emphasis)
+msgid ");"
+msgstr ");"
+
+#: shadow.3.xml:85(emphasis)
+msgid "void setspent();"
+msgstr "void setspent();"
+
+#: shadow.3.xml:89(emphasis)
+msgid "void endspent();"
+msgstr "void endspent();"
+
+#: shadow.3.xml:93(emphasis)
+msgid "struct spwd *fgetspent(FILE"
+msgstr "struct spwd *fgetspent(FILE"
+
+#: shadow.3.xml:94(emphasis) shadow.3.xml:105(emphasis)
+msgid "*fp"
+msgstr "*fp"
+
+#: shadow.3.xml:98(emphasis)
+msgid "struct spwd *sgetspent(char"
+msgstr "struct spwd *sgetspent(char"
+
+#: shadow.3.xml:99(emphasis)
+msgid "*cp"
+msgstr "*cp"
+
+#: shadow.3.xml:103(emphasis)
+msgid "int putspent(struct spwd"
+msgstr "int putspent(struct spwd"
+
+#: shadow.3.xml:104(emphasis)
+msgid "*p,"
+msgstr "*p,"
+
+#: shadow.3.xml:104(emphasis)
+msgid "FILE"
+msgstr "FIL"
+
+#: shadow.3.xml:109(emphasis)
+msgid "int lckpwdf();"
+msgstr "int lckpwdf();"
+
+#: shadow.3.xml:113(emphasis)
+msgid "int ulckpwdf();"
+msgstr "int ulckpwdf();"
+
+#: shadow.3.xml:119(para)
+msgid ""
+"<emphasis remap=\"I\">shadow</emphasis> manipulates the contents of the "
+"shadow password file, <filename>/etc/shadow</filename>. The structure in the "
+"<emphasis remap=\"I\">#include</emphasis> file is:"
+msgstr ""
+
+#: shadow.3.xml:124(programlisting)
+#, no-wrap
+msgid ""
+"struct spwd {\n"
+" char\t\t*sp_namp; /* user login name */\n"
+" char\t\t*sp_pwdp; /* encrypted password */\n"
+" long int\t\tsp_lstchg; /* last password change */\n"
+" long int\t\tsp_min; /* days until change allowed. */\n"
+" long int\t\tsp_max; /* days before change required */\n"
+" long int\t\tsp_warn; /* days warning for expiration */\n"
+" long int\t\tsp_inact; /* days before account inactive */\n"
+" long int\t\tsp_expire; /* date when account expires */\n"
+" unsigned long int\tsp_flag; /* reserved for future use */\n"
+"}\n"
+" "
+msgstr ""
+
+#: shadow.3.xml:136(para)
+msgid "The meanings of each field are:"
+msgstr "Betydelsen av varje fält är:"
+
+#: shadow.3.xml:139(para)
+msgid "sp_namp - pointer to null-terminated user name"
+msgstr ""
+
+#: shadow.3.xml:142(para)
+msgid "sp_pwdp - pointer to null-terminated password"
+msgstr ""
+
+#: shadow.3.xml:145(para)
+msgid "sp_lstchg - days since Jan 1, 1970 password was last changed"
+msgstr ""
+
+#: shadow.3.xml:148(para)
+msgid "sp_min - days before which password may not be changed"
+msgstr ""
+
+#: shadow.3.xml:151(para)
+msgid "sp_max - days after which password must be changed"
+msgstr ""
+
+#: shadow.3.xml:154(para)
+msgid ""
+"sp_warn - days before password is to expire that user is warned of pending "
+"password expiration"
+msgstr ""
+
+#: shadow.3.xml:159(para)
+msgid ""
+"sp_inact - days after password expires that account is considered inactive "
+"and disabled"
+msgstr ""
+
+#: shadow.3.xml:164(para)
+msgid "sp_expire - days since Jan 1, 1970 when account will be disabled"
+msgstr ""
+
+#: shadow.3.xml:167(para)
+msgid "sp_flag - reserved for future use"
+msgstr "sp_flag - reserverat för framtida användning"
+
+#: shadow.3.xml:175(para)
+msgid ""
+"<emphasis>getspent</emphasis>, <emphasis>getspname</emphasis>, "
+"<emphasis>fgetspent</emphasis>, and <emphasis>sgetspent</emphasis> each "
+"return a pointer to a <emphasis>struct spwd</emphasis>. <emphasis>getspent</"
+"emphasis> returns the next entry from the file, and <emphasis>fgetspent</"
+"emphasis> returns the next entry from the given stream, which is assumed to "
+"be a file of the proper format. <emphasis>sgetspent</emphasis> returns a "
+"pointer to a <emphasis>struct spwd</emphasis> using the provided string as "
+"input. <emphasis>getspnam</emphasis> searches from the current position in "
+"the file for an entry matching <emphasis>name</emphasis>."
+msgstr ""
+
+#: shadow.3.xml:188(para)
+msgid ""
+"<emphasis>setspent</emphasis> and <emphasis>endspent</emphasis> may be used "
+"to begin and end, respectively, access to the shadow password file."
+msgstr ""
+
+#: shadow.3.xml:194(para)
+msgid ""
+"The <emphasis>lckpwdf</emphasis> and <emphasis>ulckpwdf</emphasis> routines "
+"should be used to insure exclusive access to the <filename>/etc/shadow</"
+"filename> file. <emphasis>lckpwdf</emphasis> attempts to acquire a lock "
+"using <emphasis>pw_lock</emphasis> for up to 15 seconds. It continues by "
+"attempting to acquire a second lock using <emphasis>spw_lock</emphasis> for "
+"the remainder of the initial 15 seconds. Should either attempt fail after a "
+"total of 15 seconds, <emphasis>lckpwdf</emphasis> returns -1. When both "
+"locks are acquired 0 is returned."
+msgstr ""
+
+#: shadow.3.xml:209(para)
+msgid ""
+"Routines return NULL if no more entries are available or if an error occurs "
+"during processing. Routines which have <emphasis>int</emphasis> as the "
+"return value return 0 for success and -1 for failure."
+msgstr ""
+
+#: shadow.3.xml:219(para)
+msgid ""
+"These routines may only be used by the superuser as access to the shadow "
+"password file is restricted."
+msgstr ""
+
+#: shadow.3.xml:239(para)
+msgid ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: pwconv.8.xml:63(refentrytitle) pwconv.8.xml:70(refname)
+#: pwconv.8.xml:79(command) login.defs.5.xml:439(term)
+msgid "pwconv"
+msgstr "pwconv"
+
+#: pwconv.8.xml:71(refname) pwconv.8.xml:85(command) login.defs.5.xml:448(term)
+msgid "pwunconv"
+msgstr "pwunconv"
+
+#: pwconv.8.xml:72(refname) pwconv.8.xml:91(command) login.defs.5.xml:344(term)
+msgid "grpconv"
+msgstr "grpconv"
+
+#: pwconv.8.xml:73(refname) pwconv.8.xml:97(command) login.defs.5.xml:350(term)
+msgid "grpunconv"
+msgstr "grpunconv"
+
+#: pwconv.8.xml:74(refpurpose)
+msgid "convert to and from shadow passwords and groups"
+msgstr "konvertera till och från skugglösenord och grupper"
+
+#: pwconv.8.xml:106(para)
+msgid ""
+"The <command>pwconv</command> command creates <emphasis remap=\"I\">shadow</"
+"emphasis> from <emphasis remap=\"I\">passwd</emphasis> and an optionally "
+"existing <emphasis remap=\"I\">shadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:111(para)
+msgid ""
+"<command>pwconv</command> does not work with <option>USE_TCB</option> "
+"enabled. To convert to tcb passwords, you should first use <command>pwconv</"
+"command> to convert to shadowed passwords by disabling <option>USE_TCB</"
+"option> in <filename>login.defs</filename> and then convert to tcb password "
+"using <command>tcb_convert</command> (and re-enable <option>USE_TCB</option> "
+"in <filename>login.defs</filename>.)"
+msgstr ""
+
+#: pwconv.8.xml:121(para)
+msgid ""
+"The <command>pwunconv</command> command creates <emphasis remap=\"I"
+"\">passwd</emphasis> from <emphasis remap=\"I\">passwd</emphasis> and "
+"<emphasis remap=\"I\">shadow</emphasis> and then removes <emphasis remap=\"I"
+"\">shadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:127(para)
+msgid ""
+"<command>pwunconv</command> does not work with <option>USE_TCB</option> "
+"enabled. You should first switch back from tcb to shadowed passwords using "
+"<command>tcb_unconvert</command>, and then disable <option>USE_TCB</option> "
+"in <filename>login.defs</filename> before using <command>pwunconv</command>."
+msgstr ""
+
+#: pwconv.8.xml:136(para)
+msgid ""
+"The <command>grpconv</command> command creates <emphasis remap=\"I"
+"\">gshadow</emphasis> from <emphasis remap=\"I\">group</emphasis> and an "
+"optionally existing <emphasis remap=\"I\">gshadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:142(para)
+msgid ""
+"The <command>grpunconv</command> command creates <emphasis remap=\"I"
+"\">group</emphasis> from <emphasis remap=\"I\">group</emphasis> and "
+"<emphasis remap=\"I\">gshadow</emphasis> and then removes <emphasis remap=\"I"
+"\">gshadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:149(para)
+msgid ""
+"These four programs all operate on the normal and shadow password and group "
+"files: <filename>/etc/passwd</filename>, <filename>/etc/group</filename>, "
+"<filename>/etc/shadow</filename>, and <filename>/etc/gshadow</filename>."
+msgstr ""
+
+#: pwconv.8.xml:156(para)
+msgid ""
+"Each program acquires the necessary locks before conversion. "
+"<command>pwconv</command> and <command>grpconv</command> are similar. First, "
+"entries in the shadowed file which don't exist in the main file are removed. "
+"Then, shadowed entries which don't have `x' as the password in the main file "
+"are updated. Any missing shadowed entries are added. Finally, passwords in "
+"the main file are replaced with `x'. These programs can be used for initial "
+"conversion as well to update the shadowed file if the main file is edited by "
+"hand."
+msgstr ""
+
+#: pwconv.8.xml:167(para)
+msgid ""
+"<command>pwconv</command> will use the values of <emphasis remap=\"I"
+"\">PASS_MIN_DAYS</emphasis>, <emphasis remap=\"I\">PASS_MAX_DAYS</emphasis>, "
+"and <emphasis remap=\"I\">PASS_WARN_AGE</emphasis> from <filename>/etc/login."
+"defs</filename> when adding new entries to <filename>/etc/shadow</filename>."
+msgstr ""
+
+#: pwconv.8.xml:176(para)
+msgid ""
+"Likewise <command>pwunconv</command> and <command>grpunconv</command> are "
+"similar. Passwords in the main file are updated from the shadowed file. "
+"Entries which exist in the main file but not in the shadowed file are left "
+"alone. Finally, the shadowed file is removed. Some password aging "
+"information is lost by <command>pwunconv</command>. It will convert what it "
+"can."
+msgstr ""
+
+#: pwconv.8.xml:188(para)
+#, fuzzy
+#| msgid ""
+#| "The options which apply to the <command>vipw</command> and <command>vigr</"
+#| "command> commands are:"
+msgid ""
+"The options which apply to the <command>pwconv</command>, <command>pwunconv</"
+"command>, <command>grpconv</command>, and <command>grpunconv</command> "
+"commands are:"
+msgstr ""
+"Flaggorna som gäller för kommandona <command>vipw</command> och "
+"<command>vigr</command> är:"
+
+#: pwconv.8.xml:217(para)
+msgid ""
+"Errors in the password or group files (such as invalid or duplicate entries) "
+"may cause these programs to loop forever or fail in other strange ways. "
+"Please run <command>pwck</command> and <command>grpck</command> to correct "
+"any such errors before converting to or from shadow passwords or groups."
+msgstr ""
+
+#: pwconv.8.xml:228(para)
+msgid ""
+"The following configuration variable in <filename>/etc/login.defs</filename> "
+"changes the behavior of <command>grpconv</command> and <command>grpunconv</"
+"command>:"
+msgstr ""
+
+#: pwconv.8.xml:236(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of <command>pwconv</command>:"
+msgstr ""
+
+#: pwconv.8.xml:263(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry><phrase condition=\"tcb\">, "
+"<citerefentry><refentrytitle>tcb_convert</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>tcb_unconvert</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: pwck.8.xml:47(contrib) lastlog.8.xml:43(contrib) grpck.8.xml:42(contrib)
+msgid "Creation, 1992"
+msgstr ""
+
+#: pwck.8.xml:63(refentrytitle) pwck.8.xml:70(refname) pwck.8.xml:76(command)
+#: login.defs.5.xml:430(term)
+msgid "pwck"
+msgstr "pwck"
+
+#: pwck.8.xml:71(refpurpose)
+msgid "verify integrity of password files"
+msgstr "validera integriteten för lösenordsfiler"
+
+#: pwck.8.xml:80(replaceable) passwd.5.xml:57(refentrytitle)
+#: passwd.5.xml:64(refname) passwd.1.xml:64(refentrytitle)
+#: passwd.1.xml:71(refname) passwd.1.xml:77(command) login.defs.5.xml:419(term)
+msgid "passwd"
+msgstr "passwd"
+
+#: pwck.8.xml:93(para)
+msgid ""
+"The <command>pwck</command> command verifies the integrity of the users and "
+"authentication information. It checks that all entries in <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename><phrase condition=\"tcb"
+"\">(or the files in <filename>/etc/tcb</filename>, when <option>USE_TCB</"
+"option> is enabled)</phrase> have the proper format and contain valid data. "
+"The user is prompted to delete entries that are improperly formatted or "
+"which have other uncorrectable errors."
+msgstr ""
+
+#: pwck.8.xml:105(para) grpck.8.xml:94(para)
+msgid "Checks are made to verify that each entry has:"
+msgstr "Kontroller görs för att validera att varje post har:"
+
+#: pwck.8.xml:108(para) grpck.8.xml:98(para)
+msgid "the correct number of fields"
+msgstr "korrekt antal fält"
+
+#: pwck.8.xml:111(para)
+#, fuzzy
+#| msgid "a unique user name"
+msgid "a unique and valid user name"
+msgstr "ett unikt användarnamn"
+
+#: pwck.8.xml:114(para)
+msgid "a valid user and group identifier"
+msgstr "en giltig identifierare för användare och grupp"
+
+#: pwck.8.xml:117(para)
+msgid "a valid primary group"
+msgstr "en giltig primär grupp"
+
+#: pwck.8.xml:120(para)
+msgid "a valid home directory"
+msgstr "en giltig hemkatalog"
+
+#: pwck.8.xml:123(para)
+msgid "a valid login shell"
+msgstr "ett giltigt inloggningsskal"
+
+#: pwck.8.xml:127(para)
+msgid ""
+"<filename>shadow</filename> checks are enabled when a second file parameter "
+"is specified or when <filename>/etc/shadow</filename> exists on the system."
+msgstr ""
+
+#: pwck.8.xml:132(para)
+msgid "These checks are the following:"
+msgstr ""
+
+#: pwck.8.xml:137(para)
+msgid ""
+"every passwd entry has a matching shadow entry, and every shadow entry has a "
+"matching passwd entry"
+msgstr ""
+
+#: pwck.8.xml:143(para)
+msgid "passwords are specified in the shadowed file"
+msgstr ""
+
+#: pwck.8.xml:146(para)
+#, fuzzy
+#| msgid "the correct number of fields"
+msgid "shadow entries have the correct number of fields"
+msgstr "korrekt antal fält"
+
+#: pwck.8.xml:149(para)
+msgid "shadow entries are unique in shadow"
+msgstr ""
+
+#: pwck.8.xml:152(para)
+#, fuzzy
+#| msgid "days before password may be changed"
+msgid "the last password changes are not in the future"
+msgstr "dagar innan lösenordet får ändras"
+
+#: pwck.8.xml:156(para)
+msgid ""
+"The checks for correct number of fields and unique user name are fatal. If "
+"the entry has the wrong number of fields, the user will be prompted to "
+"delete the entire line. If the user does not answer affirmatively, all "
+"further checks are bypassed. An entry with a duplicated user name is "
+"prompted for deletion, but the remaining checks will still be made. All "
+"other errors are warning and the user is encouraged to run the "
+"<command>usermod</command> command to correct the error."
+msgstr ""
+
+#: pwck.8.xml:167(para)
+msgid ""
+"The commands which operate on the <filename>/etc/passwd</filename> file are "
+"not able to alter corrupted or duplicated entries. <command>pwck</command> "
+"should be used in those circumstances to remove the offending entry."
+msgstr ""
+
+#: pwck.8.xml:177(para) grpck.8.xml:148(para)
+#, fuzzy
+msgid ""
+"The <option>-r</option> and <option>-s</option> options cannot be combined."
+msgstr ""
+"Flaggorna <option>-r</option>, <option>-h</option> och <option>-f</option> "
+"används endast när <command>login</command> har startats av root."
+
+#: pwck.8.xml:181(para)
+msgid "The options which apply to the <command>pwck</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>pwck</command> är:"
+
+#: pwck.8.xml:204(para)
+msgid ""
+"Report errors only. The warnings which do not require any action from the "
+"user won't be displayed."
+msgstr ""
+
+#: pwck.8.xml:211(term) grpck.8.xml:163(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--remove</option>"
+msgid "<option>-r</option>, <option>--read-only</option>"
+msgstr "<option>-r</option>, <option>--remove</option>"
+
+#: pwck.8.xml:213(para)
+msgid "Execute the <command>pwck</command> command in read-only mode."
+msgstr "Starta kommandot <command>pwck</command> i skrivskyddat läge."
+
+#: pwck.8.xml:231(term) grpck.8.xml:185(term)
+#, fuzzy
+#| msgid "<option>-s</option>, <option>--shadow</option>"
+msgid "<option>-s</option>, <option>--sort</option>"
+msgstr "<option>-s</option>, <option>--shadow</option>"
+
+#: pwck.8.xml:233(para)
+msgid ""
+"Sort entries in <filename>/etc/passwd</filename> and <filename>/etc/shadow</"
+"filename> by UID."
+msgstr ""
+"Sorterar poster i <filename>/etc/passwd</filename> och <filename>/etc/"
+"shadow</filename> efter UID."
+
+#: pwck.8.xml:237(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid "This option has no effect when <option>USE_TCB</option> is enabled."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: pwck.8.xml:244(para)
+msgid ""
+"By default, <command>pwck</command> operates on the files <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename><phrase condition=\"tcb"
+"\"> (or the files in <filename>/etc/tcb</filename>)</phrase>. The user may "
+"select alternate files with the <replaceable>passwd</replaceable> and "
+"<replaceable>shadow</replaceable> parameters."
+msgstr ""
+
+#: pwck.8.xml:253(para)
+msgid ""
+"Note that when <option>USE_TCB</option> is enabled, you cannot specify an "
+"alternative <replaceable>shadow</replaceable> file. In future releases, this "
+"parameter could be replaced by an alternate TCB directory."
+msgstr ""
+
+#: pwck.8.xml:322(para)
+msgid "one or more bad password entries"
+msgstr "en eller flera felaktiga lösenordsposter"
+
+#: pwck.8.xml:328(para)
+msgid "can't open password files"
+msgstr "kan inte öppna lösenordsfiler"
+
+#: pwck.8.xml:334(para)
+msgid "can't lock password files"
+msgstr "kan inte låsa lösenordsfiler"
+
+#: pwck.8.xml:340(para)
+msgid "can't update password files"
+msgstr "kan inte uppdatera lösenordsfiler"
+
+#: pwck.8.xml:346(para)
+#, fuzzy
+#| msgid "can't open password files"
+msgid "can't sort password files"
+msgstr "kan inte öppna lösenordsfiler"
+
+#: pwck.8.xml:304(para)
+msgid ""
+"The <command>pwck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Kommandot <command>pwck</command> avslutas med följande värden: "
+"<placeholder-1/>"
+
+#: pwck.8.xml:355(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: porttime.5.xml:57(refentrytitle) porttime.5.xml:64(refname)
+msgid "porttime"
+msgstr "porttime"
+
+#: porttime.5.xml:65(refpurpose)
+msgid "port access time file"
+msgstr ""
+
+#: porttime.5.xml:70(para)
+msgid ""
+"<emphasis remap=\"I\">porttime</emphasis> contains a list of tty devices, "
+"user names, and permitted login times."
+msgstr ""
+"<emphasis remap=\"I\">porttime</emphasis> innehåller en lista av tty-"
+"enheter, användarnamn och tillåtna inloggningstider."
+
+#: porttime.5.xml:75(para)
+msgid ""
+"Each entry consists of three colon separated fields. The first field is a "
+"comma separated list of tty devices, or an asterisk to indicate that all tty "
+"devices are matched by this entry. The second field is a comma separated "
+"list of user names, or an asterisk to indicated that all user names are "
+"matched by this entry. The third field is a comma separated list of "
+"permitted access times."
+msgstr ""
+
+#: porttime.5.xml:84(para)
+msgid ""
+"Each access time entry consists of zero or more days of the week, "
+"abbreviated <emphasis>Su</emphasis>, <emphasis>Mo</emphasis>, <emphasis>Tu</"
+"emphasis>, <emphasis>We</emphasis>, <emphasis>Th</emphasis>, <emphasis>Fr</"
+"emphasis>, and <emphasis>Sa</emphasis>, followed by a pair of times "
+"separated by a hyphen. The abbreviation <emphasis>Wk</emphasis> may be used "
+"to represent Monday thru Friday, and <emphasis>Al</emphasis> may be used to "
+"indicate every day. If no days are given, <emphasis>Al</emphasis> is assumed."
+msgstr ""
+
+#: porttime.5.xml:98(title)
+msgid "EXAMPLES"
+msgstr "EXEMPEL"
+
+#: porttime.5.xml:99(para)
+msgid ""
+"The following entry allows access to user <emphasis remap=\"B\">jfh</"
+"emphasis> on every port during weekdays from 9am to 5pm."
+msgstr ""
+"Följande post tillåter åtkomst för användaren <emphasis remap=\"B\">jfh</"
+"emphasis> på varje port under veckodagar från 09.00 till 17.00."
+
+#: porttime.5.xml:105(para)
+msgid "*:jfh:Wk0900-1700"
+msgstr "*:jfh:Wk0900-1700"
+
+#: porttime.5.xml:107(para)
+msgid ""
+"The following entries allow access only to the users <emphasis>root</"
+"emphasis> and <emphasis>oper</emphasis> on <filename>/dev/console</filename> "
+"at any time. This illustrates how the <filename>/etc/porttime</filename> "
+"file is an ordered list of access times. Any other user would match the "
+"second entry which does not permit access at any time."
+msgstr ""
+"De följande posterna tillåter åtkomst endast till användarna <emphasis>root</"
+"emphasis> och <emphasis>oper</emphasis> på <filename>/dev/console</filename> "
+"när som helst. Detta illustrerar hur filen <filename>/etc/porttime</"
+"filename> är en ordnad lista för åtkomsttider. Alla andra användare skulle "
+"matcha den andra poster, vilken inte tillåter någon åtkomst oavsett tid."
+
+#: porttime.5.xml:116(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+" console:root,oper:Al0000-2400\n"
+" console:*:\n"
+" "
+msgstr ""
+"\n"
+" console:root,oper:Al0000-2400\n"
+" console:*:\n"
+" "
+
+#: porttime.5.xml:121(para)
+msgid ""
+"The following entry allows access for the user <emphasis>games</emphasis> on "
+"any port during non-working hours."
+msgstr ""
+"Fölajnde post tillåter åtkomst för användaren <emphasis>games</emphasis> på "
+"valfri port men inte under arbetstid."
+
+#: porttime.5.xml:126(para)
+msgid "*:games:Wk1700-0900,SaSu0000-2400"
+msgstr "*:games:Wk1700-0900,SaSu0000-2400"
+
+#: porttime.5.xml:133(filename) logoutd.8.xml:92(filename)
+msgid "/etc/porttime"
+msgstr "/etc/porttime"
+
+#: porttime.5.xml:135(para) logoutd.8.xml:94(para)
+msgid "File containing port access."
+msgstr "Fil som innehåller portåtkomst"
+
+#: porttime.5.xml:143(para) login.access.5.xml:134(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: passwd.5.xml:65(refpurpose)
+msgid "the password file"
+msgstr "lösenordsfilen"
+
+#: passwd.5.xml:70(para)
+msgid ""
+"<filename>/etc/passwd</filename> contains one line for each user account, "
+"with seven fields delimited by colons (<quote>:</quote>). These fields are:"
+msgstr ""
+"<filename>/etc/passwd</filename> innehåller en rad för varje användarkonto "
+"men sju fält separerade med kolontecken (<quote>:</quote>). Dessa fält är:"
+
+#: passwd.5.xml:81(para)
+msgid "optional encrypted password"
+msgstr "valfritt krypterat lösenord"
+
+#: passwd.5.xml:84(para)
+msgid "numerical user ID"
+msgstr "numeriskt användar-id"
+
+#: passwd.5.xml:87(para)
+msgid "numerical group ID"
+msgstr "numeriskt grupp-id"
+
+#: passwd.5.xml:90(para)
+msgid "user name or comment field"
+msgstr "användarnamn eller kommentarsfält"
+
+#: passwd.5.xml:93(para)
+msgid "user home directory"
+msgstr "användarens hemkatalog"
+
+#: passwd.5.xml:96(para)
+msgid "optional user command interpreter"
+msgstr ""
+
+#: passwd.5.xml:100(para)
+msgid ""
+"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."
+msgstr ""
+
+#: passwd.5.xml:109(para)
+msgid ""
+"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."
+msgstr ""
+
+#: passwd.5.xml:118(para)
+msgid ""
+"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."
+msgstr ""
+
+#: passwd.5.xml:138(para)
+msgid ""
+"The comment field is used by various system utilities, such as "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+
+#: passwd.5.xml:144(para)
+msgid ""
+"The home directory field provides the name of the initial working directory. "
+"The <command>login</command> program uses this information to set the value "
+"of the <envar>$HOME</envar> environmental variable."
+msgstr ""
+
+#: passwd.5.xml:150(para)
+msgid ""
+"The command interpreter field provides the name of the user's command "
+"language interpreter, or the name of the initial program to execute. The "
+"<command>login</command> program uses this information to set the value of "
+"the <envar>$SHELL</envar> environmental variable. If this field is empty, it "
+"defaults to the value <filename>/bin/sh</filename>."
+msgstr ""
+
+#: passwd.5.xml:171(para)
+msgid "optional encrypted password file"
+msgstr ""
+
+#: passwd.5.xml:175(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/passwd-"
+msgstr "/etc/passwd"
+
+#: passwd.5.xml:177(para)
+msgid "Backup file for /etc/passwd."
+msgstr ""
+
+#: passwd.5.xml:189(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getent</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getpwnam</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwunconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: passwd.1.xml:72(refpurpose)
+msgid "change user password"
+msgstr "ändra användarlösenord"
+
+#: passwd.1.xml:89(para)
+#, fuzzy
+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 ""
+"<command>passwd</command> ändrar lösenord för användarkonton. En vanlig "
+"användare kan endast ändra lösenordet för sitt egna konto men "
+"superanvändaren kan ändra lösenord för alla konton. <command>passwd</"
+"command> ändrar även kontoinformation, såsom det fullständiga namnet för "
+"användaren, användarens inloggningsskal eller hans/hennes utgångsdatum för "
+"lösenordet och intervall."
+
+#: passwd.1.xml:98(title)
+msgid "Password Changes"
+msgstr "Lösenordsändringar"
+
+#: passwd.1.xml:99(para)
+#, fuzzy
+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 ""
+"Användaren frågas först efter hans/hennes gamla lösenord, om det finns "
+"något. Detta lösenord krypteras sedan och jämförs mot det lagrade "
+"lösenordet. Användaren har endast en chans att ange det korrekta lösenordet. "
+"Superanvändaren tillåts kringgå detta steg så att bortglömda lösenord kan "
+"ändras."
+
+#: passwd.1.xml:107(para)
+msgid ""
+"After the password has been entered, password aging information is checked "
+"to see if the user is permitted to change the password at this time. If not, "
+"<command>passwd</command> refuses to change the password and exits."
+msgstr ""
+"Efter att lösenordet har matats in kontrolleras lösenordets "
+"åldringsinformation för att se om användaren tillåts att ändra lösenord för "
+"tillfället. Om inte, nekar <command>passwd</command> att ändra lösenordet "
+"och avslutas."
+
+#: passwd.1.xml:114(para)
+msgid ""
+"The user is then prompted twice for a replacement password. The second entry "
+"is compared against the first and both are required to match in order for "
+"the password to be changed."
+msgstr ""
+"Användaren frågas sedan två gånger efter ett ersättande lösenord. Den andra "
+"inmatningen jämförs mot den första och båda måste stämma överens för att "
+"lösenordet ska ändras."
+
+#: passwd.1.xml:120(para)
+msgid ""
+"Then, the password is tested for complexity. As a general guideline, "
+"passwords should consist of 6 to 8 characters including one or more "
+"characters from each of the following sets:"
+msgstr ""
+"Sedan testas lösenordet för sin komplexitet. Som en allmän riktlinje bör "
+"lösenord innehålla 6 till 8 tecken och inkluderas ett eller flera tecken "
+"från var och en av följande punkter:"
+
+#: passwd.1.xml:128(para)
+msgid "lower case alphabetics"
+msgstr "gemena bokstäver ur alfabetet"
+
+#: passwd.1.xml:131(para)
+msgid "digits 0 thru 9"
+msgstr "siffrorna 0 till 9"
+
+#: passwd.1.xml:134(para)
+msgid "punctuation marks"
+msgstr "skiljetecken"
+
+#: passwd.1.xml:138(para)
+msgid ""
+"Care must be taken not to include the system default erase or kill "
+"characters. <command>passwd</command> will reject any password which is not "
+"suitably complex."
+msgstr ""
+"Tänk på att inte inkludera systemets standardtecken för radering eller döda. "
+"<command>passwd</command> kommer att neka alla lösenord som inte har lämplig "
+"komplexitet."
+
+#: passwd.1.xml:147(title)
+msgid "Hints for user passwords"
+msgstr "Tips för användarlösenord"
+
+#: passwd.1.xml:148(para)
+#, fuzzy
+#| msgid ""
+#| "The security of a password depends upon the strength of the encryption "
+#| "algorithm and the size of the key space. The <emphasis>UNIX</emphasis> "
+#| "System encryption method is based on the NBS DES algorithm and is very "
+#| "secure. The size of the key space depends upon the randomness of the "
+#| "password which is selected."
+msgid ""
+"The security of a password depends upon the strength of the encryption "
+"algorithm and the size of the key space. The legacy <emphasis>UNIX</"
+"emphasis> System encryption method is based on the NBS DES algorithm. More "
+"recent methods are now recommended (see <option>ENCRYPT_METHOD</option>). "
+"The size of the key space depends upon the randomness of the password which "
+"is selected."
+msgstr ""
+"Säkerhet i ett lösenord beror på styrkan på krypteringsalgoritmen och "
+"nyckellängden. Krypteringsmetoden för <emphasis>UNIX-system</emphasis> är "
+"baserad på NBS DES-algoritmen och är mycket säker. Längden på nyckeln är "
+"beroende på slumpmässigheten för det valda lösenordet."
+
+#: passwd.1.xml:157(para)
+msgid ""
+"Compromises in password security normally result from careless password "
+"selection or handling. For this reason, you should not select a password "
+"which appears in a dictionary or which must be written down. The password "
+"should also not be a proper name, your license number, birth date, or street "
+"address. Any of these may be used as guesses to violate system security."
+msgstr ""
+"Problem i lösenordssäkerheten brukar normalt komma från slarvigt valda "
+"lösenord eller hantering. Av denna anledning bör du inte välja ett lösenord "
+"som finns i en ordbok eller som måste skrivas ner. Lösenordet bör heller "
+"inte vara ett korrekt namn, ditt personnummer, födelsedatum eller "
+"gatuadress. Dessa kan användas som gissningar för att ta sig in i systemet."
+
+#: passwd.1.xml:166(para)
+msgid ""
+"You can find advice on how to choose a strong password on http://en."
+"wikipedia.org/wiki/Password_strength"
+msgstr ""
+
+#: passwd.1.xml:175(para)
+msgid "The options which apply to the <command>passwd</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>passwd</command> är:"
+
+#: passwd.1.xml:180(term) faillog.8.xml:96(term)
+msgid "<option>-a</option>, <option>--all</option>"
+msgstr "<option>-a</option>, <option>--all</option>"
+
+#: passwd.1.xml:184(para)
+msgid ""
+"This option can be used only with <option>-S</option> and causes show status "
+"for all users."
+msgstr ""
+"Denna flagga kan endast användas med <option>-S</option> och gör att status "
+"visas för alla användare."
+
+#: passwd.1.xml:191(term)
+msgid "<option>-d</option>, <option>--delete</option>"
+msgstr "<option>-d</option>, <option>--delete</option>"
+
+#: passwd.1.xml:195(para)
+msgid ""
+"Delete a user's password (make it empty). This is a quick way to disable a "
+"password for an account. It will set the named account passwordless."
+msgstr ""
+"Ta bort en användares lösenord (gör det blankt). Detta är ett snabbt sätt "
+"att inaktivera ett lösenord för ett konto. Det kommer att ta bort det "
+"angivna kontots lösenord."
+
+#: passwd.1.xml:203(term)
+msgid "<option>-e</option>, <option>--expire</option>"
+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 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."
+
+#: passwd.1.xml:220(term)
+msgid ""
+"<option>-i</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-i</option>, <option>--inactive</option>&nbsp;<replaceable>INAKTIV</"
+"replaceable>"
+
+#: passwd.1.xml:224(para)
+msgid ""
+"This option is used to disable an account after the password has been "
+"expired for a number of days. After a user account has had an expired "
+"password for <replaceable>INACTIVE</replaceable> days, the user may no "
+"longer sign on to the account."
+msgstr ""
+"Denna flagga används för att inaktivera ett konto efter att lösenordet har "
+"varit utgånget i ett antal dagar. Efter att ett användarkonto har haft ett "
+"utgånget lösenord i <replaceable>INAKTIV</replaceable> dagar får användaren "
+"inte längre logga in med detta konto."
+
+#: passwd.1.xml:233(term)
+msgid "<option>-k</option>, <option>--keep-tokens</option>"
+msgstr "<option>-k</option>, <option>--keep-tokens</option>"
+
+#: passwd.1.xml:237(para)
+#, fuzzy
+msgid ""
+"Indicate password change should be performed only for expired authentication "
+"tokens (passwords). The user wishes to keep their non-expired tokens as "
+"before."
+msgstr ""
+"Indikera lösenordsändring bör endast genomföras för utgångna "
+"autentiseringslösenord. Användaren önskar behålla sitt icke-utgångna "
+"lösenord som tidigare."
+
+#: passwd.1.xml:245(term)
+msgid "<option>-l</option>, <option>--lock</option>"
+msgstr "<option>-l</option>, <option>--lock</option>"
+
+#: passwd.1.xml:249(para)
+#, fuzzy
+msgid ""
+"Lock the password of the named account. This option disables a password by "
+"changing it to a value which matches no possible encrypted value (it adds a "
+"´!´ at the beginning of the password)."
+msgstr ""
+"Lås angivet konto. Denna flagga inaktiverar ett konto genom att ändra "
+"lösenordet till ett värde som inte matchar något möjligt krypterat värde."
+
+#: passwd.1.xml:255(para)
+msgid ""
+"Note that this does not disable the account. The user may still be able to "
+"login using another authentication token (e.g. an SSH key). To disable the "
+"account, administrators should use <command>usermod --expiredate 1</command> "
+"(this set the account's expire date to Jan 2, 1970)."
+msgstr ""
+
+#: passwd.1.xml:262(para)
+msgid "Users with a locked password are not allowed to change their password."
+msgstr ""
+
+#: passwd.1.xml:269(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-m</option>, <option>--mindays</option>&nbsp;"
+#| "<replaceable>MIN_DAYS</replaceable>"
+msgid ""
+"<option>-n</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DAGAR</"
+"replaceable>"
+
+#: passwd.1.xml:273(para) chage.1.xml:174(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 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 "
+"att användaren kan ändra sitt lösenord när som helst."
+
+#: passwd.1.xml:291(term)
+msgid ""
+"<option>-r</option>, <option>--repository</option>&nbsp;"
+"<replaceable>REPOSITORY</replaceable>"
+msgstr ""
+"<option>-r</option>, <option>--repository</option>&nbsp;<replaceable>FÖRRÅD</"
+"replaceable>"
+
+#: passwd.1.xml:295(para)
+#, fuzzy
+msgid "change password in <replaceable>REPOSITORY</replaceable> repository"
+msgstr "ändra lösenord i förrådet <replaceable>FÖRRÅD</replaceable>"
+
+#: passwd.1.xml:313(term)
+msgid "<option>-S</option>, <option>--status</option>"
+msgstr "<option>-S</option>, <option>--status</option>"
+
+#: passwd.1.xml:317(para)
+#, fuzzy
+#| msgid ""
+#| "Display account status information. The status information consists of 7 "
+#| "fields. The first field is the user's login name. The second field "
+#| "indicates if the user account is locked (L), has no password (NP), or has "
+#| "a usable password (P). The third field gives the date of the last "
+#| "password change. The next four fields are the minimum age, maximum age, "
+#| "warning period, and inactivity period for the password. These ages are "
+#| "expressed in days."
+msgid ""
+"Display account status information. The status information consists of 7 "
+"fields. The first field is the user's login name. The second field indicates "
+"if the user account has a locked password (L), has no password (NP), or has "
+"a usable password (P). The third field gives the date of the last password "
+"change. The next four fields are the minimum age, maximum age, warning "
+"period, and inactivity period for the password. These ages are expressed in "
+"days."
+msgstr ""
+"Visa statusinformation för konto. Statusinformationen innehåller 7 fält. "
+"Första fältet är användarens inloggningsnamn. Det andra fältet indikerar om "
+"användarkontot är låst (L), saknar lösenord (NP) eller har ett användbart "
+"lösenord (P). Det tredje fältet anger datumet för senaste "
+"lösenordsändringen. De nästa fyra fälten är minimal ålder, maximal ålder, "
+"varningsperiod och inaktivitetsperiod för lösenordet. Dessa åldrar anges i "
+"dagar."
+
+#: passwd.1.xml:331(term)
+msgid "<option>-u</option>, <option>--unlock</option>"
+msgstr "<option>-u</option>, <option>--unlock</option>"
+
+#: passwd.1.xml:335(para)
+#, fuzzy
+msgid ""
+"Unlock the password of the named account. This option re-enables a password "
+"by changing the password back to its previous value (to the value before "
+"using the <option>-l</option> option)."
+msgstr ""
+"Lås upp angivet konto. Denna flagga återaktiverar ett konto genom att ändra "
+"tillbaka lösenordet till dess tidigare värde (till värdet före användning av "
+"flaggan <option>-l</option>)."
+
+#: passwd.1.xml:344(term)
+msgid ""
+"<option>-w</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>WARN_DAYS</replaceable>"
+msgstr ""
+"<option>-w</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>VARN_DAGAR</replaceable>"
+
+#: 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 their password is "
+"about to expire."
+msgstr ""
+"Sätter antalet dagar för varning före ett lösenord behöver ändras. Flaggan "
+"<replaceable>VARN_DAGAR</replaceable> är antalet dagar före användaren "
+"varnas om att lösenordet är på väg att bli utgånget."
+
+#: passwd.1.xml:357(term)
+msgid ""
+"<option>-x</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-x</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DAGAR</"
+"replaceable>"
+
+#: passwd.1.xml:361(para)
+msgid ""
+"Set the maximum number of days a password remains valid. After "
+"<replaceable>MAX_DAYS</replaceable>, the password is required to be changed."
+msgstr ""
+"Sätter maximalt antal dagar som ett lösenord ska vara giltigt. Efter "
+"<replaceable>MAX_DAGAR</replaceable> krävs det att lösenordet ändras."
+
+#: passwd.1.xml:366(para) chage.1.xml:195(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as "
+"<replaceable>MAX_DAYS</replaceable> will remove checking a password's "
+"validity."
+msgstr ""
+
+#: passwd.1.xml:378(para)
+#, fuzzy
+#| msgid ""
+#| "Not all options may be supported. Password complexity checking may vary "
+#| "from site to site. The user is urged to select a password as complex as "
+#| "he or she feels comfortable with. Users may not be able to change their "
+#| "password on a system if NIS is enabled and they are not logged into the "
+#| "NIS server."
+msgid ""
+"Password complexity checking may vary from site to site. The user is urged "
+"to select a password as complex as he or she feels comfortable with."
+msgstr ""
+"Inte alla flaggor kanske stöds. Kontroll av lösenordskomplexiteten kan "
+"variera mellan olika system. Användare rekommenderas att välja ett lösenord "
+"som är så komplext som han eller hon känner sig komfortabel med. Användare "
+"kanske inte kan ändra sina lösenord på ett system om NIS är aktiverat och de "
+"inte är inloggade mot NIS-servern."
+
+#: passwd.1.xml:383(para)
+msgid ""
+"Users may not be able to change their password on a system if NIS is enabled "
+"and they are not logged into the NIS server."
+msgstr ""
+
+#: passwd.1.xml:388(para)
+msgid ""
+"<command>passwd</command> uses PAM to authenticate users and to change their "
+"passwords."
+msgstr ""
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>ENCRYPT_METHOD</option> (string)"
+msgstr ""
+
+#: passwd.1.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: gpasswd.1.xml:32(para) chpasswd.8.xml:32(para) chgpasswd.8.xml:32(para)
+msgid ""
+"This defines the system default encryption algorithm for encrypting "
+"passwords (if no algorithm are specified on the command line)."
+msgstr ""
+
+#: passwd.1.xml:36(para) newusers.8.xml:36(para) login.defs.5.xml:36(para)
+#: gpasswd.1.xml:36(para) chpasswd.8.xml:36(para) chgpasswd.8.xml:36(para)
+#, fuzzy
+#| msgid ""
+#| "Example: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+#| "replaceable>=<replaceable>100</replaceable>&nbsp;<option> -K </"
+#| "option>&nbsp;<replaceable>GID_MAX</replaceable>=<replaceable>499</"
+#| "replaceable>"
+msgid ""
+"It can take one of these values: <replaceable>DES</replaceable> (default), "
+"<replaceable>MD5</replaceable><phrase condition=\"sha_crypt\">, "
+"<replaceable>SHA256</replaceable>, <replaceable>SHA512</replaceable></"
+"phrase>."
+msgstr ""
+"Exempel: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+"<replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+
+#: passwd.1.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: gpasswd.1.xml:43(para) chpasswd.8.xml:43(para) chgpasswd.8.xml:43(para)
+msgid ""
+"Note: this parameter overrides the <option>MD5_CRYPT_ENAB</option> variable."
+msgstr ""
+
+#: passwd.1.xml:47(para) passwd.1.xml:53(para) passwd.1.xml:62(para)
+#: newusers.8.xml:47(para) newusers.8.xml:53(para) newusers.8.xml:62(para)
+#: login.defs.5.xml:47(para) login.defs.5.xml:53(para)
+#: login.defs.5.xml:62(para) gpasswd.1.xml:47(para) gpasswd.1.xml:53(para)
+#: gpasswd.1.xml:62(para) chpasswd.8.xml:47(para) chpasswd.8.xml:53(para)
+#: chpasswd.8.xml:62(para) chgpasswd.8.xml:47(para) chgpasswd.8.xml:53(para)
+#: chgpasswd.8.xml:62(para)
+msgid ""
+"Note: This only affect the generation of group passwords. The generation of "
+"user passwords is done by PAM and subject to the PAM configuration. It is "
+"recommended to set this variable consistently with the PAM configuration."
+msgstr ""
+
+#: passwd.1.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: gpasswd.1.xml:32(term) chpasswd.8.xml:32(term) chgpasswd.8.xml:32(term)
+msgid "<option>MD5_CRYPT_ENAB</option> (boolean)"
+msgstr ""
+
+#: passwd.1.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: gpasswd.1.xml:34(para) chpasswd.8.xml:34(para) chgpasswd.8.xml:34(para)
+msgid ""
+"Indicate if passwords must be encrypted using the MD5-based algorithm. If "
+"set to <replaceable>yes</replaceable>, new passwords will be encrypted using "
+"the MD5-based algorithm compatible with the one used by recent releases of "
+"FreeBSD. It supports passwords of unlimited length and longer salt strings. "
+"Set to <replaceable>no</replaceable> if you need to copy encrypted passwords "
+"to other systems which don't understand the new algorithm. Default is "
+"<replaceable>no</replaceable>."
+msgstr ""
+
+#: passwd.1.xml:44(para) newusers.8.xml:44(para) login.defs.5.xml:44(para)
+#: gpasswd.1.xml:44(para) chpasswd.8.xml:44(para) chgpasswd.8.xml:44(para)
+msgid ""
+"This variable is superseded by the <option>ENCRYPT_METHOD</option> variable "
+"or by any command line option used to configure the encryption algorithm."
+msgstr ""
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid ""
+"This variable is deprecated. You should use <option>ENCRYPT_METHOD</option>."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>OBSCURE_CHECKS_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable additional checks upon password changes."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_ALWAYS_WARN</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Warn about weak passwords (but still allow them) if you are root."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_CHANGE_TRIES</option> (number)"
+msgstr "PASS_WARN_AGE (nummer)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Maximum number of attempts to change password if rejected (too easy)."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_MAX_LEN</option> (number)"
+msgstr "PASS_MAX_DAYS (nummer)"
+
+#: passwd.1.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>PASS_MIN_LEN</option> (number)"
+msgstr "PASS_MIN_DAYS (nummer)"
+
+#: passwd.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"Number of significant characters in the password for crypt(). "
+"<option>PASS_MAX_LEN</option> is 8 by default. Don't change unless your "
+"crypt() is better. This is ignored if <option>MD5_CRYPT_ENAB</option> set to "
+"<replaceable>yes</replaceable>."
+msgstr ""
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>SHA_CRYPT_MIN_ROUNDS</option> (number)"
+msgstr ""
+
+#: passwd.1.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: gpasswd.1.xml:31(term) chpasswd.8.xml:31(term) chgpasswd.8.xml:31(term)
+msgid "<option>SHA_CRYPT_MAX_ROUNDS</option> (number)"
+msgstr ""
+
+#: passwd.1.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: gpasswd.1.xml:33(para) chpasswd.8.xml:33(para) chgpasswd.8.xml:33(para)
+msgid ""
+"When <option>ENCRYPT_METHOD</option> is set to <replaceable>SHA256</"
+"replaceable> or <replaceable>SHA512</replaceable>, this defines the number "
+"of SHA rounds used by the encryption algorithm by default (when the number "
+"of rounds is not specified on the command line)."
+msgstr ""
+
+#: passwd.1.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: gpasswd.1.xml:40(para) chpasswd.8.xml:40(para) chgpasswd.8.xml:40(para)
+msgid ""
+"With a lot of rounds, it is more difficult to brute forcing the password. "
+"But note also that more CPU resources will be needed to authenticate users."
+msgstr ""
+
+#: passwd.1.xml:45(para) newusers.8.xml:45(para) login.defs.5.xml:45(para)
+#: gpasswd.1.xml:45(para) chpasswd.8.xml:45(para) chgpasswd.8.xml:45(para)
+msgid ""
+"If not specified, the libc will choose the default number of rounds (5000)."
+msgstr ""
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid "The values must be inside the 1000-999,999,999 range."
+msgstr ""
+
+#: passwd.1.xml:52(para) newusers.8.xml:52(para) login.defs.5.xml:52(para)
+#: gpasswd.1.xml:52(para) chpasswd.8.xml:52(para) chgpasswd.8.xml:52(para)
+msgid ""
+"If only one of the <option>SHA_CRYPT_MIN_ROUNDS</option> or "
+"<option>SHA_CRYPT_MAX_ROUNDS</option> values is set, then this value will be "
+"used."
+msgstr ""
+
+#: passwd.1.xml:57(para) newusers.8.xml:57(para) login.defs.5.xml:57(para)
+#: gpasswd.1.xml:57(para) chpasswd.8.xml:57(para) chgpasswd.8.xml:57(para)
+msgid ""
+"If <option>SHA_CRYPT_MIN_ROUNDS</option> &gt; <option>SHA_CRYPT_MAX_ROUNDS</"
+"option>, the highest value will be used."
+msgstr ""
+
+#: passwd.1.xml:434(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/pam.d/passwd"
+msgstr "/etc/passwd"
+
+#: passwd.1.xml:436(para)
+msgid "PAM configuration for <command>passwd</command>."
+msgstr ""
+
+#: passwd.1.xml:456(para) chage.1.xml:297(para)
+msgid "permission denied"
+msgstr "åtkomst nekad"
+
+#: passwd.1.xml:462(para)
+msgid "invalid combination of options"
+msgstr "ogiltig kombination av flaggor"
+
+#: passwd.1.xml:468(para)
+msgid "unexpected failure, nothing done"
+msgstr "oväntat fel, ingenting har genomförts"
+
+#: passwd.1.xml:474(para)
+msgid "unexpected failure, <filename>passwd</filename> file missing"
+msgstr "oväntat fel, filen <filename>passwd</filename> saknas"
+
+#: passwd.1.xml:480(para)
+msgid "<filename>passwd</filename> file busy, try again"
+msgstr "Filen <filename>passwd</filename> är upptagen, försök igen"
+
+#: passwd.1.xml:444(para)
+msgid ""
+"The <command>passwd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Kommandot <command>passwd</command> avslutas med följande värden: "
+"<placeholder-1/>"
+
+#: passwd.1.xml:495(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>chpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <phrase condition=\"no_pam"
+"\"><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: nologin.8.xml:46(refentrytitle) nologin.8.xml:53(refname)
+#: nologin.8.xml:59(command)
+msgid "nologin"
+msgstr "nologin"
+
+#: nologin.8.xml:54(refpurpose)
+msgid "politely refuse a login"
+msgstr "vägra snällt en inloggning"
+
+#: nologin.8.xml:65(para)
+#, fuzzy
+msgid ""
+"The <command>nologin</command> command displays a message that an account is "
+"not available and exits non-zero. It is intended as a replacement shell "
+"field for accounts that have been disabled."
+msgstr ""
+"<command>nologin</command> visar ett meddelande om att kontot inte är "
+"tillgängligt och avslutas med icke-noll-status. Det är tänkt som ett "
+"ersättande skalfält för konton som har inaktiverats."
+
+#: nologin.8.xml:70(para)
+msgid ""
+"To disable all logins, investigate <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"För att inaktivera alla inloggningar, undersök "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+
+#: nologin.8.xml:75(para)
+msgid ""
+"If <command>SSH_ORIGINAL_COMMAND</command> is populated it will be logged."
+msgstr ""
+
+#: nologin.8.xml:82(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: nologin.8.xml:93(title)
+#, fuzzy
+#| msgid "HYSTORY"
+msgid "HISTORY"
+msgstr "HISTORIK"
+
+#: nologin.8.xml:94(para)
+#, fuzzy
+#| msgid "The <command>nologin</command> command appeared in BSD 4.4."
+msgid "The <command>nologin</command> command appeared in BSD 4.4."
+msgstr "Kommandot <command>nologin</command> dök upp i BSD 4.4."
+
+#: newusers.8.xml:73(refentrytitle) newusers.8.xml:80(refname)
+#: newusers.8.xml:86(command) login.defs.5.xml:400(term)
+msgid "newusers"
+msgstr "newusers"
+
+#: newusers.8.xml:81(refpurpose)
+msgid "update and create new users in batch"
+msgstr "uppdatera och skapa nya användare satsvis"
+
+#: newusers.8.xml:91(replaceable)
+msgid "file"
+msgstr ""
+
+#: newusers.8.xml:98(para)
+msgid ""
+"The <command>newusers</command> command reads a <replaceable>file</"
+"replaceable> (or the standard input by default) and uses this information to "
+"update a set of existing users or to create new users. Each line is in the "
+"same format as the standard password file (see "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>) with the exceptions explained below:"
+msgstr ""
+
+#: newusers.8.xml:106(para)
+msgid "pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell"
+msgstr ""
+
+#: newusers.8.xml:111(emphasis)
+#, fuzzy
+#| msgid "group_name"
+msgid "pw_name"
+msgstr "gruppnamn"
+
+#: newusers.8.xml:114(para)
+msgid "This is the name of the user."
+msgstr ""
+
+#: newusers.8.xml:117(para)
+msgid ""
+"It can be the name of a new user or the name of an existing user (or a user "
+"created before by <command>newusers</command>). In case of an existing user, "
+"the user's information will be changed, otherwise a new user will be created."
+msgstr ""
+
+#: newusers.8.xml:128(emphasis)
+msgid "pw_passwd"
+msgstr "pw_passwd"
+
+#: newusers.8.xml:131(para)
+msgid ""
+"This field will be encrypted and used as the new value of the encrypted "
+"password."
+msgstr ""
+"Detta fält kommer att krypteras och användas som det nya värdet för det "
+"krypterade lösenordet."
+
+#: newusers.8.xml:139(emphasis)
+#, fuzzy
+#| msgid "pw_gid"
+msgid "pw_uid"
+msgstr "pw_gid"
+
+#: newusers.8.xml:142(para)
+msgid "This field is used to define the UID of the user."
+msgstr ""
+
+#: newusers.8.xml:145(para)
+msgid ""
+"If the field is empty, a new (unused) UID will be defined automatically by "
+"<command>newusers</command>."
+msgstr ""
+
+#: newusers.8.xml:149(para)
+msgid "If this field contains a number, this number will be used as the UID."
+msgstr ""
+
+#: newusers.8.xml:153(para)
+msgid ""
+"If this field contains the name of an existing user (or the name of a user "
+"created before by <command>newusers</command>), the UID of the specified "
+"user will be used."
+msgstr ""
+
+#: newusers.8.xml:159(para)
+msgid ""
+"If the UID of an existing user is changed, the files ownership of the user's "
+"file should be fixed manually."
+msgstr ""
+
+#: newusers.8.xml:167(emphasis)
+msgid "pw_gid"
+msgstr "pw_gid"
+
+#: newusers.8.xml:170(para)
+msgid "This field is used to define the primary group ID for the user."
+msgstr ""
+
+#: newusers.8.xml:173(para)
+msgid ""
+"If this field contains the name of an existing group (or a group created "
+"before by <command>newusers</command>), the GID of this group will be used "
+"as the primary group ID for the user."
+msgstr ""
+
+#: newusers.8.xml:179(para)
+msgid ""
+"If this field is a number, this number will be used as the primary group ID "
+"of the user. If no groups exist with this GID, a new group will be created "
+"with this GID, and the name of the user."
+msgstr ""
+
+#: newusers.8.xml:185(para)
+msgid ""
+"If this field is empty, a new group will be created with the name of the "
+"user and a GID will be automatically defined by <command>newusers</command> "
+"to be used as the primary group ID for the user and as the GID for the new "
+"group."
+msgstr ""
+
+#: newusers.8.xml:191(para)
+msgid ""
+"If this field contains the name of a group which does not exist (and was not "
+"created before by <command>newusers</command>), a new group will be created "
+"with the specified name and a GID will be automatically defined by "
+"<command>newusers</command> to be used as the primary group ID for the user "
+"and GID for the new group."
+msgstr ""
+
+#: newusers.8.xml:203(emphasis)
+msgid "pw_gecos"
+msgstr ""
+
+#: newusers.8.xml:206(para)
+msgid "This field is copied in the GECOS field of the user."
+msgstr ""
+
+#: newusers.8.xml:213(emphasis)
+msgid "pw_dir"
+msgstr "pw_dir"
+
+#: newusers.8.xml:216(para)
+msgid "This field is used to define the home directory of the user."
+msgstr ""
+
+#: newusers.8.xml:219(para)
+msgid ""
+"If this field does not specify an existing directory, the specified "
+"directory is created, with ownership set to the user being created or "
+"updated and its primary group."
+msgstr ""
+
+#: newusers.8.xml:224(para)
+msgid ""
+"If the home directory of an existing user is changed, <command>newusers</"
+"command> does not move or copy the content of the old directory to the new "
+"location. This should be done manually."
+msgstr ""
+
+#: newusers.8.xml:234(emphasis)
+msgid "pw_shell"
+msgstr ""
+
+#: newusers.8.xml:237(para)
+msgid ""
+"This field defines the shell of the user. No checks are performed on this "
+"field."
+msgstr ""
+
+#: newusers.8.xml:245(para)
+msgid ""
+"<command>newusers</command> first tries to create or change all the "
+"specified users, and then write these changes to the user or group "
+"databases. If an error occurs (except in the final writes to the databases), "
+"no changes are committed to the databases."
+msgstr ""
+
+#: newusers.8.xml:251(para)
+msgid ""
+"During this first pass, users are created with a locked password (and "
+"passwords are not changed for the users which are not created). A second "
+"pass is used to update the passwords using PAM. Failures to update a "
+"password are reported, but will not stop the other password updates."
+msgstr ""
+
+#: newusers.8.xml:259(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are updated at a single time."
+msgstr ""
+"Detta kommando är tänkt att användas i större systemmiljöer där många konton "
+"uppdateras på samma gång."
+
+#: newusers.8.xml:267(para)
+#, fuzzy
+#| msgid ""
+#| "The options which apply to the <command>usermod</command> command are:"
+msgid "The options which apply to the <command>newusers</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>usermod</command> är:"
+
+#: newusers.8.xml:284(term) chgpasswd.8.xml:112(term)
+#, fuzzy
+msgid "<option>-c</option>, <option>--crypt-method</option>"
+msgstr "<option>-e</option>, <option>--encrypted</option>"
+
+#: newusers.8.xml:286(para) chpasswd.8.xml:141(para) chgpasswd.8.xml:114(para)
+msgid "Use the specified method to encrypt the passwords."
+msgstr ""
+
+#: newusers.8.xml:287(para) chpasswd.8.xml:145(para) chgpasswd.8.xml:118(para)
+msgid ""
+"The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc "
+"support these methods."
+msgstr ""
+
+#: newusers.8.xml:309(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are chosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+
+#: newusers.8.xml:335(term) chgpasswd.8.xml:158(term)
+#, fuzzy
+msgid "<option>-s</option>, <option>--sha-rounds</option>"
+msgstr "<option>-s</option>, <option>--shadow</option>"
+
+#: newusers.8.xml:337(para) chpasswd.8.xml:204(para) chgpasswd.8.xml:160(para)
+msgid "Use the specified number of rounds to encrypt the passwords."
+msgstr ""
+
+#: newusers.8.xml:340(para) chpasswd.8.xml:207(para) chgpasswd.8.xml:163(para)
+msgid ""
+"The value 0 means that the system will choose the default number of rounds "
+"for the crypt method (5000)."
+msgstr ""
+
+#: newusers.8.xml:344(para) chpasswd.8.xml:211(para) chgpasswd.8.xml:167(para)
+msgid ""
+"A minimal value of 1000 and a maximal value of 999,999,999 will be enforced."
+msgstr ""
+
+#: newusers.8.xml:348(para) chpasswd.8.xml:215(para) chgpasswd.8.xml:171(para)
+msgid "You can only use this option with the SHA256 or SHA512 crypt method."
+msgstr ""
+
+#: newusers.8.xml:352(para) chgpasswd.8.xml:175(para)
+msgid ""
+"By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and "
+"SHA_CRYPT_MAX_ROUNDS variables in <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: newusers.8.xml:364(para)
+msgid ""
+"The input file must be protected since it contains unencrypted passwords."
+msgstr ""
+"Inmatningsfilen måste skyddas eftersom den innehåller okrypterade lösenord."
+
+#: newusers.8.xml:368(para) chgpasswd.8.xml:191(para)
+msgid ""
+"You should make sure the passwords and the encryption method respect the "
+"system's password policy."
+msgstr ""
+
+#: newusers.8.xml:444(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/pam.d/newusers"
+msgstr "/etc/passwd"
+
+#: newusers.8.xml:446(para)
+msgid "PAM configuration for <command>newusers</command>."
+msgstr ""
+
+#: newusers.8.xml:466(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, <phrase condition="
+"\"subids\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: newgrp.1.xml:58(refentrytitle) newgrp.1.xml:65(refname)
+#: newgrp.1.xml:71(command)
+msgid "newgrp"
+msgstr "newgrp"
+
+#: newgrp.1.xml:66(refpurpose)
+msgid "log in to a new group"
+msgstr "logga in i en ny grupp"
+
+#: newgrp.1.xml:72(replaceable) grpck.8.xml:74(replaceable)
+#: groupadd.8.xml:78(replaceable) gpasswd.1.xml:88(replaceable)
+msgid "group"
+msgstr "grupp"
+
+#: newgrp.1.xml:78(para)
+msgid ""
+"The <command>newgrp</command> command is used to change the current group ID "
+"during a login session. If the optional <option>-</option> flag is given, "
+"the user's environment will be reinitialized as though the user had logged "
+"in, otherwise the current environment, including current working directory, "
+"remains unchanged."
+msgstr ""
+
+#: newgrp.1.xml:86(para)
+msgid ""
+"<command>newgrp</command> changes the current real group ID to the named "
+"group, or to the default group listed in <filename>/etc/passwd</filename> if "
+"no group name is given. <command>newgrp</command> also tries to add the "
+"group to the user groupset. If not root, the user will be prompted for a "
+"password if she does not have a password (in <filename>/etc/shadow</"
+"filename> if this user has an entry in the shadowed password file, or in "
+"<filename>/etc/passwd</filename> otherwise) and the group does, or if the "
+"user is not listed as a member and the group has a password. The user will "
+"be denied access if the group password is empty and the user is not listed "
+"as a member."
+msgstr ""
+
+#: newgrp.1.xml:100(para)
+msgid ""
+"If there is an entry for this group in <filename>/etc/gshadow</filename>, "
+"then the list of members and the password of this group will be taken from "
+"this file, otherwise, the entry in <filename>/etc/group</filename> is "
+"considered."
+msgstr ""
+
+#: newgrp.1.xml:152(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, <citerefentry condition="
+"\"gshadow\"><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>"
+
+#: logoutd.8.xml:57(refentrytitle) logoutd.8.xml:64(refname)
+#: logoutd.8.xml:70(command)
+msgid "logoutd"
+msgstr "logoutd"
+
+#: logoutd.8.xml:65(refpurpose)
+#, fuzzy
+#| msgid "Enforce login time restrictions"
+msgid "enforce login time restrictions"
+msgstr "Upprätthåll tidsbegränsningar för inloggningar"
+
+#: logoutd.8.xml:76(para)
+msgid ""
+"<command>logoutd</command> enforces the login time and port restrictions "
+"specified in <filename>/etc/porttime</filename>. <command>logoutd</command> "
+"should be started from <filename>/etc/rc</filename>. The <filename>/var/run/"
+"utmp</filename> file is scanned periodically and each user name is checked "
+"to see if the named user is permitted on the named port at the current time. "
+"Any login session which is violating the restrictions in <filename>/etc/"
+"porttime</filename> is terminated."
+msgstr ""
+
+#: logoutd.8.xml:98(filename) login.1.xml:341(filename)
+msgid "/var/run/utmp"
+msgstr "/var/run/utmp"
+
+#: logoutd.8.xml:100(para) login.1.xml:343(para)
+msgid "List of current login sessions."
+msgstr "Lista på aktuella inloggningssessioner."
+
+#: login.defs.5.xml:124(refentrytitle) login.defs.5.xml:131(refname)
+msgid "login.defs"
+msgstr "login.defs"
+
+#: login.defs.5.xml:132(refpurpose)
+msgid "shadow password suite configuration"
+msgstr ""
+
+#: login.defs.5.xml:137(para)
+msgid ""
+"The <filename>/etc/login.defs</filename> file defines the site-specific "
+"configuration for the shadow password suite. This file is required. Absence "
+"of this file will not prevent system operation, but will probably result in "
+"undesirable operation."
+msgstr ""
+
+#: login.defs.5.xml:144(para)
+msgid ""
+"This file is a readable text file, each line of the file describing one "
+"configuration parameter. The lines consist of a configuration name and "
+"value, separated by whitespace. Blank lines and comment lines are ignored. "
+"Comments are introduced with a \"#\" pound sign and the pound sign must be "
+"the first non-white character of the line."
+msgstr ""
+
+#: login.defs.5.xml:152(para)
+msgid ""
+"Parameter values may be of four types: strings, booleans, numbers, and long "
+"numbers. A string is comprised of any printable characters. A boolean should "
+"be either the value <replaceable>yes</replaceable> or <replaceable>no</"
+"replaceable>. An undefined boolean parameter or one with a value other than "
+"these will be given a <replaceable>no</replaceable> value. Numbers (both "
+"regular and long) may be either decimal values, octal values (precede the "
+"value with <replaceable>0</replaceable>) or hexadecimal values (precede the "
+"value with <replaceable>0x</replaceable>). The maximum value of the regular "
+"and long numeric parameters is machine-dependent."
+msgstr ""
+
+#: login.defs.5.xml:167(para)
+msgid "The following configuration items are provided:"
+msgstr "Följande konfigurationsposter tillhandahålls:"
+
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+#, fuzzy
+msgid "<option>CHFN_AUTH</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chfn</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+#, fuzzy
+msgid "<option>CHFN_RESTRICT</option> (string)"
+msgstr "CHFN_RESTRICT (sträng)"
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"This parameter specifies which values in the <emphasis remap=\"I\">gecos</"
+"emphasis> field of the <filename>/etc/passwd</filename> file may be changed "
+"by regular users using the <command>chfn</command> program. It can be any "
+"combination of letters <replaceable>f</replaceable>, <replaceable>r</"
+"replaceable>, <replaceable>w</replaceable>, <replaceable>h</replaceable>, "
+"for Full name, Room number, Work phone, and Home phone, respectively. For "
+"backward compatibility, <replaceable>yes</replaceable> is equivalent to "
+"<replaceable>rwh</replaceable> and <replaceable>no</replaceable> is "
+"equivalent to <replaceable>frwh</replaceable>. If not specified, only the "
+"superuser can make any changes. The most restrictive setting is better "
+"achieved by not installing <command>chfn</command> SUID."
+msgstr ""
+
+#: login.defs.5.xml:32(term) chsh.1.xml:32(term)
+#, fuzzy
+msgid "<option>CHSH_AUTH</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: login.defs.5.xml:34(para) chsh.1.xml:34(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chsh</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ERASECHAR</option> (number)"
+msgstr "UMASK (nummer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Terminal ERASE character (<replaceable>010</replaceable> = backspace, "
+"<replaceable>0177</replaceable> = DEL)."
+msgstr ""
+
+#: login.defs.5.xml:38(para) login.defs.5.xml:37(para) login.1.xml:38(para)
+#: login.1.xml:37(para)
+msgid ""
+"The value can be prefixed \"0\" for an octal value, or \"0x\" for an "
+"hexadecimal value."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FAIL_DELAY</option> (number)"
+msgstr "PASS_MIN_DAYS (nummer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Delay in seconds before being allowed another attempt after a login failure."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FAILLOG_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable logging and display of <filename>/var/log/faillog</filename> login "
+"failure info."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FAKE_SHELL</option> (string)"
+msgstr "MAIL_DIR (sträng)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, <command>login</command> will execute this shell instead of the "
+"users' shell specified in <filename>/etc/passwd</filename>."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FTMP_FILE</option> (string)"
+msgstr "MAIL_DIR (sträng)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, login failures will be logged in this file in a utmp format."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>HUSHLOGIN_FILE</option> (string)"
+msgstr "CHFN_RESTRICT (sträng)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, this file can inhibit all the usual chatter during the login "
+"sequence. If a full pathname is specified, then hushed mode will be enabled "
+"if the user's name or shell are found in the file. If not a full pathname, "
+"then hushed mode will be enabled if the file exists in the user's home "
+"directory."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ISSUE_FILE</option> (string)"
+msgstr "MAIL_DIR (sträng)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "If defined, this file will be displayed before each login prompt."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>KILLCHAR</option> (number)"
+msgstr "GID_MAX (nummer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Terminal KILL character (<replaceable>025</replaceable> = CTRL/U)."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LASTLOG_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging and display of /var/log/lastlog login time info."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOG_OK_LOGINS</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging of successful logins."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOG_UNKFAIL_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable display of unknown usernames when login failures are recorded."
+msgstr ""
+
+#: login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"Note: logging unknown usernames may be a security issue if an user enter her "
+"password instead of her login name."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOGIN_RETRIES</option> (number)"
+msgstr "GID_MIN (nummer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Maximum number of login retries in case of bad password."
+msgstr ""
+
+#: login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"This will most likely be overridden by PAM, since the default pam_unix "
+"module has its own built in of 3 retries. However, this is a safe fallback "
+"in case you are using an authentication module that does not enforce "
+"PAM_MAXTRIES."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOGIN_TIMEOUT</option> (number)"
+msgstr "GID_MAX (nummer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Max time in seconds for login."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>MOTD_FILE</option> (string)"
+msgstr "MAIL_DIR (sträng)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, \":\" delimited list of \"message of the day\" files to be "
+"displayed upon login."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>NOLOGINS_FILE</option> (string)"
+msgstr "CHFN_RESTRICT (sträng)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, name of file whose presence will inhibit non-root logins. The "
+"contents of this file should be a message indicating why logins are "
+"inhibited."
+msgstr ""
+
+#: login.defs.5.xml:212(para)
+#, fuzzy
+msgid ""
+"<option>PASS_MAX_DAYS</option>, <option>PASS_MIN_DAYS</option> and "
+"<option>PASS_WARN_AGE</option> are only used at the time of account "
+"creation. Any changes to these settings won't affect existing accounts."
+msgstr ""
+"PASS_MAX_DAYS, PASS_MIN_DAYS och PASS_WARN_AGE används endast när kontot "
+"skapas. Alla ändringar av dessa inställningar påverkar inte existerande "
+"konton."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>PORTTIME_CHECKS_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable checking of time restrictions specified in <filename>/etc/porttime</"
+"filename>."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>TTYGROUP</option> (string)"
+msgstr "MAIL_DIR (sträng)"
+
+#: login.defs.5.xml:33(term) login.1.xml:33(term)
+#, fuzzy
+msgid "<option>TTYPERM</option> (string)"
+msgstr "USERDEL_CMD (sträng)"
+
+#: login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"The terminal permissions: the login tty will be owned by the "
+"<option>TTYGROUP</option> group, and the permissions will be set to "
+"<option>TTYPERM</option>."
+msgstr ""
+
+#: login.defs.5.xml:40(para) login.1.xml:40(para)
+msgid ""
+"By default, the ownership of the terminal is set to the user's primary group "
+"and the permissions are set to <replaceable>0600</replaceable>."
+msgstr ""
+
+#: login.defs.5.xml:45(para) login.1.xml:45(para)
+msgid ""
+"<option>TTYGROUP</option> can be either the name of a group or a numeric "
+"group identifier."
+msgstr ""
+
+#: login.defs.5.xml:49(para) login.1.xml:49(para)
+msgid ""
+"If you have a <command>write</command> program which is \"setgid\" to a "
+"special group which owns the terminals, define TTYGROUP to the group number "
+"and TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign "
+"TTYPERM to either 622 or 600."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>TTYTYPE_FILE</option> (string)"
+msgstr "MAIL_DIR (sträng)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, file which maps tty line to TERM environment parameter. Each "
+"line of the file is in a format something like \"vt100 tty01\"."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ULIMIT</option> (number)"
+msgstr "UID_MIN (nummer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Default <command>ulimit</command> value."
+msgstr ""
+
+#: login.defs.5.xml:245(title)
+msgid "CROSS REFERENCES"
+msgstr ""
+
+#: login.defs.5.xml:246(para)
+msgid ""
+"The following cross references show which programs in the shadow password "
+"suite use which parameters."
+msgstr ""
+
+#: login.defs.5.xml:253(term) chage.1.xml:58(refentrytitle)
+#: chage.1.xml:65(refname) chage.1.xml:70(command)
+msgid "chage"
+msgstr "chage"
+
+#: login.defs.5.xml:255(para) login.defs.5.xml:451(phrase)
+#: login.defs.5.xml:523(phrase)
+msgid "USE_TCB"
+msgstr ""
+
+#: login.defs.5.xml:259(term) chfn.1.xml:60(refentrytitle)
+#: chfn.1.xml:67(refname) chfn.1.xml:73(command)
+msgid "chfn"
+msgstr "chfn"
+
+#: login.defs.5.xml:261(para)
+msgid ""
+"<phrase condition=\"no_pam\">CHFN_AUTH</phrase> CHFN_RESTRICT <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:269(term) chgpasswd.8.xml:57(refentrytitle)
+#: chgpasswd.8.xml:64(refname) chgpasswd.8.xml:70(command)
+msgid "chgpasswd"
+msgstr "chgpasswd"
+
+#: login.defs.5.xml:271(para) login.defs.5.xml:302(para)
+msgid ""
+"ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB <phrase condition="
+"\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:279(term) chpasswd.8.xml:61(refentrytitle)
+#: chpasswd.8.xml:68(refname) chpasswd.8.xml:74(command)
+msgid "chpasswd"
+msgstr "chpasswd"
+
+#: login.defs.5.xml:282(phrase)
+msgid "ENCRYPT_METHOD MD5_CRYPT_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:284(phrase)
+msgid "SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS"
+msgstr ""
+
+#: login.defs.5.xml:290(term) chsh.1.xml:60(refentrytitle)
+#: chsh.1.xml:67(refname) chsh.1.xml:73(command)
+msgid "chsh"
+msgstr "chsh"
+
+#: login.defs.5.xml:292(para)
+#, fuzzy
+msgid "CHSH_AUTH LOGIN_STRING"
+msgstr "CHFN_AUTH CHFN_RESTRICT"
+
+#: login.defs.5.xml:300(term) gpasswd.1.xml:62(refentrytitle)
+#: gpasswd.1.xml:69(refname) gpasswd.1.xml:83(command)
+msgid "gpasswd"
+msgstr "gpasswd"
+
+#: login.defs.5.xml:310(term) groupadd.8.xml:60(refentrytitle)
+#: groupadd.8.xml:67(refname) groupadd.8.xml:73(command)
+msgid "groupadd"
+msgstr "groupadd"
+
+#: login.defs.5.xml:312(para)
+#, fuzzy
+msgid "GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN"
+msgstr ""
+"GID_MAX GID_MIN PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UID_MAX UID_MIN "
+"UMASK"
+
+#: login.defs.5.xml:319(term) groupdel.8.xml:58(refentrytitle)
+#: groupdel.8.xml:65(refname) groupdel.8.xml:71(command)
+msgid "groupdel"
+msgstr "groupdel"
+
+#: login.defs.5.xml:321(para) login.defs.5.xml:327(para)
+#: login.defs.5.xml:333(para) login.defs.5.xml:340(para)
+#: login.defs.5.xml:346(para) login.defs.5.xml:352(para)
+msgid "MAX_MEMBERS_PER_GROUP"
+msgstr ""
+
+#: login.defs.5.xml:325(term) groupmems.8.xml:61(refentrytitle)
+#: groupmems.8.xml:68(refname) groupmems.8.xml:74(command)
+msgid "groupmems"
+msgstr "groupmems"
+
+#: login.defs.5.xml:331(term) groupmod.8.xml:58(refentrytitle)
+#: groupmod.8.xml:65(refname) groupmod.8.xml:71(command)
+msgid "groupmod"
+msgstr "groupmod"
+
+#: login.defs.5.xml:338(term) grpck.8.xml:58(refentrytitle)
+#: grpck.8.xml:65(refname) grpck.8.xml:71(command)
+msgid "grpck"
+msgstr "grpck"
+
+#: login.defs.5.xml:357(term) lastlog.8.xml:59(refentrytitle)
+#: lastlog.8.xml:66(refname) lastlog.8.xml:72(command)
+msgid "lastlog"
+msgstr "lastlog"
+
+#: login.defs.5.xml:359(para)
+msgid "LASTLOG_UID_MAX"
+msgstr ""
+
+#: login.defs.5.xml:363(term) login.1.xml:90(refentrytitle)
+#: login.1.xml:97(refname) login.1.xml:103(command) login.1.xml:111(command)
+#: login.1.xml:118(command)
+msgid "login"
+msgstr "login"
+
+#: login.defs.5.xml:365(para)
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE</"
+"phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam\">FAILLOG_ENAB</"
+"phrase> FAKE_SHELL <phrase condition=\"no_pam\">FTMP_FILE</phrase> "
+"HUSHLOGIN_FILE <phrase condition=\"no_pam\">ISSUE_FILE</phrase> KILLCHAR "
+"<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 <phrase condition=\"no_pam"
+"\">MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE NOLOGINS_FILE "
+"PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> TTYGROUP TTYPERM TTYTYPE_FILE "
+"<phrase condition=\"no_pam\">ULIMIT UMASK</phrase> USERGROUPS_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:392(term)
+#, fuzzy
+#| msgid "newgrp"
+msgid "newgrp / sg"
+msgstr "newgrp"
+
+#: login.defs.5.xml:394(para)
+msgid "SYSLOG_SG_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:402(para)
+#, fuzzy
+msgid ""
+"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> "
+"SUB_GID_COUNT SUB_GID_MAX SUB_GID_MIN SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN "
+"SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+msgstr ""
+"GID_MAX GID_MIN PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UID_MAX UID_MIN "
+"UMASK"
+
+#: login.defs.5.xml:421(para)
+msgid ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN "
+"PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:432(para)
+msgid ""
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb"
+"\">TCB_AUTH_GROUP TCB_SYMLINKS USE_TCB</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:441(para)
+#, fuzzy
+#| msgid "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UMASK"
+msgid ""
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb\">USE_TCB</"
+"phrase>"
+msgstr "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UMASK"
+
+#: login.defs.5.xml:458(para)
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENVIRON_FILE</phrase> ENV_PATH "
+"ENV_SUPATH <phrase condition=\"no_pam\">ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB "
+"MAIL_DIR MAIL_FILE QUOTAS_ENAB</phrase> SULOG_FILE SU_NAME <phrase condition="
+"\"no_pam\">SU_WHEEL_ONLY</phrase> SYSLOG_SU_ENAB <phrase condition=\"no_pam"
+"\">USERGROUPS_ENAB</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:473(term)
+#, fuzzy
+msgid "sulogin"
+msgstr "login"
+
+#: login.defs.5.xml:475(para)
+msgid "ENV_HZ <phrase condition=\"no_pam\">ENV_TZ</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:484(para)
+#, fuzzy
+msgid ""
+"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 SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN "
+"SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK "
+"<phrase condition=\"tcb\">TCB_AUTH_GROUP TCB_SYMLINK USE_TCB</phrase>"
+msgstr ""
+"GID_MAX GID_MIN PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UID_MAX UID_MIN "
+"UMASK"
+
+#: login.defs.5.xml:502(para)
+msgid ""
+"MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB <phrase "
+"condition=\"tcb\">TCB_SYMLINKS USE_TCB</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:512(para)
+#, fuzzy
+#| msgid "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UMASK"
+msgid ""
+"LASTLOG_UID_MAX MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP <phrase condition="
+"\"tcb\">TCB_SYMLINKS USE_TCB</phrase>"
+msgstr "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UMASK"
+
+#: login.defs.5.xml:532(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgid ""
+"Much of the functionality that used to be provided by the shadow password "
+"suite is now handled by PAM. Thus, <filename>/etc/login.defs</filename> is "
+"no longer used by <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, or less used by "
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, and <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>. Please refer to the "
+"corresponding PAM configuration files instead."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: login.defs.5.xml:548(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: login.access.5.xml:58(refentrytitle) login.access.5.xml:65(refname)
+msgid "login.access"
+msgstr "login.access"
+
+#: login.access.5.xml:66(refpurpose)
+msgid "login access control table"
+msgstr ""
+
+#: login.access.5.xml:71(para)
+msgid ""
+"The <emphasis remap=\"I\">login.access</emphasis> file specifies (user, "
+"host) combinations and/or (user, tty) combinations for which a login will be "
+"either accepted or refused."
+msgstr ""
+
+#: login.access.5.xml:77(para)
+msgid ""
+"When someone logs in, the <emphasis remap=\"I\">login.access</emphasis> is "
+"scanned for the first entry that matches the (user, host) combination, or, "
+"in case of non-networked logins, the first entry that matches the (user, "
+"tty) combination. The permissions field of that table entry determines "
+"whether the login will be accepted or refused."
+msgstr ""
+
+#: login.access.5.xml:85(para)
+msgid ""
+"Each line of the login access control table has three fields separated by a "
+"\":\" character:"
+msgstr ""
+
+#: login.access.5.xml:90(para)
+msgid ""
+"<emphasis remap=\"I\">permission</emphasis>:<emphasis remap=\"I\">users</"
+"emphasis>:<emphasis remap=\"I\">origins</emphasis>"
+msgstr ""
+
+#: login.access.5.xml:94(para)
+msgid ""
+"The first field should be a \"<emphasis>+</emphasis>\" (access granted) or "
+"\"<emphasis>-</emphasis>\" (access denied) character. The second field "
+"should be a list of one or more login names, group names, or <emphasis>ALL</"
+"emphasis> (always matches). The third field should be a list of one or more "
+"tty names (for non-networked logins), host names, domain names (begin with "
+"\"<literal>.</literal>\"), host addresses, internet network numbers (end "
+"with \"<literal>.</literal>\"), <emphasis>ALL</emphasis> (always matches) or "
+"<emphasis>LOCAL</emphasis> (matches any string that does not contain a "
+"\"<literal>.</literal>\" character). If you run NIS you can use "
+"@netgroupname in host or user patterns."
+msgstr ""
+
+#: login.access.5.xml:108(para)
+msgid ""
+"The <emphasis>EXCEPT</emphasis> operator makes it possible to write very "
+"compact rules."
+msgstr ""
+
+#: login.access.5.xml:113(para)
+msgid ""
+"The group file is searched only when a name does not match that of the "
+"logged-in user. Only groups are matched in which users are explicitly "
+"listed: the program does not look at a user's primary group id value."
+msgstr ""
+
+#: login.1.xml:98(refpurpose)
+msgid "begin session on the system"
+msgstr ""
+
+#: login.1.xml:104(arg) login.1.xml:112(arg) login.1.xml:119(arg)
+#: login.1.xml:236(option) groupmems.8.xml:79(arg)
+msgid "-p"
+msgstr "-p"
+
+#: login.1.xml:105(replaceable) login.1.xml:113(replaceable)
+#: login.1.xml:120(replaceable)
+msgid "host"
+msgstr "värd"
+
+#: login.1.xml:105(arg) login.1.xml:113(arg)
+msgid "-h <placeholder-1/>"
+msgstr "-h <placeholder-1/>"
+
+#: login.1.xml:108(replaceable)
+msgid "ENV=VAR"
+msgstr ""
+
+#: login.1.xml:114(arg) login.1.xml:214(option)
+msgid "-f"
+msgstr "-f"
+
+#: login.1.xml:120(arg)
+msgid "-r <placeholder-1/>"
+msgstr "-r <placeholder-1/>"
+
+#: login.1.xml:126(para)
+msgid ""
+"The <command>login</command> program is used to establish a new session with "
+"the system. It is normally invoked automatically by responding to the "
+"<emphasis remap=\"I\">login:</emphasis> prompt on the user's terminal. "
+"<command>login</command> may be special to the shell and may not be invoked "
+"as a sub-process. When called from a shell, <command>login</command> should "
+"be executed as <emphasis remap=\"B\">exec login</emphasis> which will cause "
+"the user to exit from the current shell (and thus will prevent the new "
+"logged in user to return to the session of the caller). Attempting to "
+"execute <command>login</command> from any shell but the login shell will "
+"produce an error message."
+msgstr ""
+
+#: login.1.xml:140(para)
+msgid ""
+"The user is then prompted for a password, where appropriate. Echoing is "
+"disabled to prevent revealing the password. Only a small number of password "
+"failures are permitted before <command>login</command> exits and the "
+"communications link is severed."
+msgstr ""
+
+#: login.1.xml:147(para)
+msgid ""
+"If password aging has been enabled for your account, you may be prompted for "
+"a new password before proceeding. You will be forced to provide your old "
+"password and the new password before continuing. Please refer to "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> for more information."
+msgstr ""
+
+#: login.1.xml:156(para)
+msgid ""
+"After a successful login, you will be informed of any system messages and "
+"the presence of mail. You may turn off the printing of the system message "
+"file, <filename>/etc/motd</filename>, by creating a zero-length file "
+"<filename>.hushlogin</filename> in your login directory. The mail message "
+"will be one of \"<emphasis>You have new mail.</emphasis>\", \"<emphasis>You "
+"have mail.</emphasis>\", or \"<emphasis>No Mail.</emphasis>\" according to "
+"the condition of your mailbox."
+msgstr ""
+
+#: login.1.xml:167(para)
+msgid ""
+"Your user and group ID will be set according to their values in the "
+"<filename>/etc/passwd</filename> file. The value for <envar>$HOME</envar>, "
+"<envar>$SHELL</envar>, <envar>$PATH</envar>, <envar>$LOGNAME</envar>, and "
+"<envar>$MAIL</envar> are set according to the appropriate fields in the "
+"password entry. Ulimit, umask and nice values may also be set according to "
+"entries in the GECOS field."
+msgstr ""
+
+#: login.1.xml:176(para)
+msgid ""
+"On some installations, the environmental variable <envar>$TERM</envar> will "
+"be initialized to the terminal type on your tty line, as specified in "
+"<filename>/etc/ttytype</filename>."
+msgstr ""
+
+#: login.1.xml:182(para)
+msgid ""
+"An initialization script for your command interpreter may also be executed. "
+"Please see the appropriate manual section for more information on this "
+"function."
+msgstr ""
+
+#: login.1.xml:194(para) login.1.xml:270(para)
+msgid ""
+"The <command>login</command> program is NOT responsible for removing users "
+"from the utmp file. It is the responsibility of "
+"<citerefentry><refentrytitle>getty</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry> and <citerefentry><refentrytitle>init</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry> to clean up apparent "
+"ownership of a terminal session. If you use <command>login</command> from "
+"the shell prompt without <command>exec</command>, the user you use will "
+"continue to appear to be logged in even after you log out of the \"subsession"
+"\"."
+msgstr ""
+
+#: login.1.xml:217(para)
+msgid "Do not perform authentication, user is preauthenticated."
+msgstr "Genomför inte autentisering, användaren är förautentiserad."
+
+#: login.1.xml:220(para)
+msgid "Note: In that case, <replaceable>username</replaceable> is mandatory."
+msgstr ""
+
+#: login.1.xml:228(option)
+msgid "-h"
+msgstr "-h"
+
+#: login.1.xml:231(para)
+msgid "Name of the remote host for this login."
+msgstr "Namnet på fjärrvärden för denna inloggning."
+
+#: login.1.xml:239(para)
+msgid "Preserve environment."
+msgstr "Behåll miljö."
+
+#: login.1.xml:244(option)
+msgid "-r"
+msgstr "-r"
+
+#: login.1.xml:247(para)
+msgid "Perform autologin protocol for rlogin."
+msgstr "Genomför automatiskt inloggningsprotokoll för rlogin."
+
+#: login.1.xml:252(para)
+msgid ""
+"The <option>-r</option>, <option>-h</option> and <option>-f</option> options "
+"are only used when <command>login</command> is invoked by root."
+msgstr ""
+"Flaggorna <option>-r</option>, <option>-h</option> och <option>-f</option> "
+"används endast när <command>login</command> har startats av root."
+
+#: login.1.xml:261(para)
+msgid ""
+"This version of <command>login</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+
+#: login.1.xml:266(para)
+msgid ""
+"The location of files is subject to differences in system configuration."
+msgstr ""
+
+#: login.1.xml:282(para)
+msgid ""
+"As with any program, <command>login</command>'s appearance can be faked. If "
+"non-trusted users have physical access to a machine, an attacker could use "
+"this to obtain the password of the next person coming to sit in front of the "
+"machine. Under Linux, the SAK mechanism can be used by users to initiate a "
+"trusted path and prevent this kind of attack."
+msgstr ""
+
+#: login.1.xml:347(filename)
+msgid "/var/log/wtmp"
+msgstr "/var/log/wtmp"
+
+#: login.1.xml:349(para)
+msgid "List of previous login sessions."
+msgstr "Lista på tidigare inloggningssessioner."
+
+#: login.1.xml:365(filename)
+msgid "/etc/motd"
+msgstr "/etc/motd"
+
+#: login.1.xml:367(para)
+msgid "System message of the day file."
+msgstr "Fil för dagens systemmeddelande."
+
+#: login.1.xml:371(filename)
+msgid "/etc/nologin"
+msgstr "/etc/nologin"
+
+#: login.1.xml:373(para)
+msgid "Prevent non-root users from logging in."
+msgstr "Förhindra icke-rootanvändare från att logga in."
+
+#: login.1.xml:377(filename)
+msgid "/etc/ttytype"
+msgstr "/etc/ttytype"
+
+#: login.1.xml:379(para)
+msgid "List of terminal types."
+msgstr "Lista på terminaltyper."
+
+#: login.1.xml:383(filename)
+msgid "$HOME/.hushlogin"
+msgstr "$HOME/.hushlogin"
+
+#: login.1.xml:385(para)
+msgid "Suppress printing of system messages."
+msgstr "Tysta ner utskrift av systemmeddelanden."
+
+#: login.1.xml:399(para)
+msgid ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: limits.5.xml:41(firstname)
+msgid "Luca"
+msgstr ""
+
+#: limits.5.xml:42(surname)
+msgid "Berra"
+msgstr ""
+
+#: limits.5.xml:59(refentrytitle) limits.5.xml:66(refname)
+msgid "limits"
+msgstr "limits"
+
+#: limits.5.xml:67(refpurpose)
+msgid "resource limits definition"
+msgstr "definition av resursbegränsningar"
+
+#: limits.5.xml:73(para)
+msgid ""
+"The <emphasis remap=\"I\">limits</emphasis> file (<filename>/etc/limits</"
+"filename> by default or LIMITS_FILE defined <filename>config.h</filename>) "
+"describes the resource limits you wish to impose. It should be owned by root "
+"and readable by root account only."
+msgstr ""
+
+#: limits.5.xml:81(para)
+msgid ""
+"By default no quota is imposed on 'root'. In fact, there is no way to impose "
+"limits via this procedure to root-equiv accounts (accounts with UID 0)."
+msgstr ""
+
+#: limits.5.xml:87(para)
+msgid "Each line describes a limit for a user in the form:"
+msgstr "Varje rad beskriver en begränsning för användaren i formatet:"
+
+#: limits.5.xml:90(emphasis)
+msgid "user LIMITS_STRING"
+msgstr "user LIMITS_STRING"
+
+#: limits.5.xml:93(para)
+msgid "or in the form:"
+msgstr ""
+
+#: limits.5.xml:96(emphasis)
+#, fuzzy
+#| msgid "user LIMITS_STRING"
+msgid "@group LIMITS_STRING"
+msgstr "user LIMITS_STRING"
+
+#: limits.5.xml:99(para)
+msgid ""
+"The <emphasis>LIMITS_STRING</emphasis> is a string of a concatenated list of "
+"resource limits. Each limit consists of a letter identifier followed by a "
+"numerical limit."
+msgstr ""
+
+#: limits.5.xml:105(para)
+msgid "The valid identifiers are:"
+msgstr "De giltiga identifierarna är:"
+
+#: limits.5.xml:108(para)
+msgid "A: max address space (KB)"
+msgstr "A: maximal adressrymd (KB)"
+
+#: limits.5.xml:109(para)
+msgid "C: max core file size (KB)"
+msgstr ""
+
+#: limits.5.xml:110(para)
+msgid "D: max data size (KB)"
+msgstr "D: maximal datastorlek (KB)"
+
+#: limits.5.xml:111(para)
+#, fuzzy
+#| msgid "F: maximum filesize (KB)"
+msgid "F: maximum file size (KB)"
+msgstr "F: maximal filstorlek (KB)"
+
+#: limits.5.xml:112(para)
+msgid ""
+"K: file creation mask, set by <citerefentry><refentrytitle>umask</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+
+#: limits.5.xml:117(para)
+msgid "I: max nice value (0..39 which translates to 20..-19)"
+msgstr ""
+
+#: limits.5.xml:119(para)
+msgid "L: max number of logins for this user"
+msgstr "L: maximalt antal inloggningar för denna användare"
+
+#: limits.5.xml:120(para)
+msgid "M: max locked-in-memory address space (KB)"
+msgstr ""
+
+#: limits.5.xml:121(para)
+msgid "N: max number of open files"
+msgstr "N: maximalt antal öppna filer"
+
+#: limits.5.xml:122(para)
+msgid "O: max real time priority"
+msgstr ""
+
+#: limits.5.xml:123(para)
+msgid ""
+"P: process priority, set by <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"P: processprioritet, inställd av <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+
+#: limits.5.xml:128(para)
+msgid "R: max resident set size (KB)"
+msgstr ""
+
+#: limits.5.xml:129(para)
+msgid "S: max stack size (KB)"
+msgstr "S: maximal stackstorlek (KB)"
+
+#: limits.5.xml:130(para)
+msgid "T: max CPU time (MIN)"
+msgstr "T: maximal processortid (MIN)"
+
+#: limits.5.xml:131(para)
+msgid "U: max number of processes"
+msgstr "U: maximalt antal processer"
+
+#: limits.5.xml:134(para)
+msgid ""
+"For example, <emphasis remap=\"I\">L2D2048N5</emphasis> is a valid "
+"<emphasis>LIMITS_STRING</emphasis>. For reading convenience, the following "
+"entries are equivalent:"
+msgstr ""
+
+#: limits.5.xml:140(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+" username L2D2048N5\n"
+" username L2 D2048 N5\n"
+" "
+msgstr ""
+"\n"
+" username L2D2048N5\n"
+" username L2 D2048 N5\n"
+" "
+
+#: limits.5.xml:145(para)
+msgid ""
+"Be aware that after <emphasis remap=\"I\">username</emphasis> the rest of "
+"the line is considered a limit string, thus comments are not allowed. An "
+"invalid limits string will be rejected (not considered) by the "
+"<command>login</command> program."
+msgstr ""
+
+#: limits.5.xml:152(para)
+msgid ""
+"The default entry is denoted by username \"<emphasis>*</emphasis>\". If you "
+"have multiple <emphasis remap=\"I\">default</emphasis> entries in your "
+"<emphasis>LIMITS_FILE</emphasis>, then the last one will be used as the "
+"default entry."
+msgstr ""
+
+#: limits.5.xml:159(para)
+msgid ""
+"The limits specified in the form \"<replaceable>@group</replaceable>\" apply "
+"to the members of the specified <replaceable>group</replaceable>."
+msgstr ""
+
+#: limits.5.xml:165(para)
+msgid ""
+"If more than one line with limits for a user exist, only the first line for "
+"this user will be considered."
+msgstr ""
+
+#: limits.5.xml:170(para)
+msgid ""
+"If no lines are specified for a user, the last <replaceable>@group</"
+"replaceable> line matching a group whose the user is a member of will be "
+"considered, or the last line with default limits if no groups contain the "
+"user."
+msgstr ""
+
+#: limits.5.xml:177(para)
+msgid ""
+"To completely disable limits for a user, a single dash \"<emphasis>-</"
+"emphasis>\" will do."
+msgstr ""
+
+#: limits.5.xml:182(para)
+msgid ""
+"To disable a limit for a user, a single dash \"<replaceable>-</replaceable>"
+"\" can be used instead of the numerical value for this limit."
+msgstr ""
+
+#: limits.5.xml:188(para)
+msgid ""
+"Also, please note that all limit settings are set PER LOGIN. They are not "
+"global, nor are they permanent. Perhaps global limits will come, but for now "
+"this will have to do ;)"
+msgstr ""
+
+#: limits.5.xml:199(filename)
+msgid "/etc/limits"
+msgstr "/etc/limits"
+
+#: limits.5.xml:207(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+
+#: lastlog.8.xml:67(refpurpose)
+msgid "reports the most recent login of all users or of a given user"
+msgstr ""
+
+#: lastlog.8.xml:81(para)
+msgid ""
+"<command>lastlog</command> formats and prints the contents of the last login "
+"log <filename>/var/log/lastlog</filename> file. The <emphasis>login-name</"
+"emphasis>, <emphasis>port</emphasis>, and <emphasis>last login time</"
+"emphasis> will be printed. The default (no flags) causes lastlog entries to "
+"be printed, sorted by their order in <filename>/etc/passwd</filename>."
+msgstr ""
+
+#: lastlog.8.xml:93(para)
+msgid "The options which apply to the <command>lastlog</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>lastlog</command> är:"
+
+#: lastlog.8.xml:98(term)
+msgid ""
+"<option>-b</option>, <option>--before</option>&nbsp;<replaceable>DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-b</option>, <option>--before</option>&nbsp;<replaceable>DAGAR</"
+"replaceable>"
+
+#: lastlog.8.xml:102(para)
+msgid ""
+"Print only lastlog records older than <emphasis remap=\"I\">DAYS</emphasis>."
+msgstr ""
+
+#: lastlog.8.xml:108(term)
+#, fuzzy
+#| msgid "<option>-q</option>, <option>--quiet</option>"
+msgid "<option>-C</option>, <option>--clear</option>"
+msgstr "<option>-q</option>, <option>--quiet</option>"
+
+#: lastlog.8.xml:112(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid ""
+"Clear lastlog record of a user. This option can be used only together with "
+"<option>-u</option> (<option>--user</option>))."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: lastlog.8.xml:139(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-S</option>, <option>--set</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: lastlog.8.xml:143(para)
+msgid ""
+"Set lastlog record of a user to the current time. This option can be used "
+"only together with <option>-u</option> (<option>--user</option>))."
+msgstr ""
+
+#: lastlog.8.xml:150(term) faillog.8.xml:192(term)
+msgid ""
+"<option>-t</option>, <option>--time</option>&nbsp;<replaceable>DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option>&nbsp;<replaceable>DAGAR</"
+"replaceable>"
+
+#: lastlog.8.xml:154(para)
+msgid ""
+"Print the lastlog records more recent than <emphasis remap=\"I\">DAYS</"
+"emphasis>."
+msgstr ""
+
+#: lastlog.8.xml:161(term) faillog.8.xml:202(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
+#| "replaceable>=<replaceable>VALUE</replaceable>"
+msgid ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+"replaceable>|<replaceable>RANGE</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>NYCKEL</"
+"replaceable>=<replaceable>VÄRDE</replaceable>"
+
+#: lastlog.8.xml:165(para)
+msgid "Print the lastlog record of the specified user(s)."
+msgstr ""
+
+#: lastlog.8.xml:168(para) faillog.8.xml:211(para)
+msgid ""
+"The users can be specified by a login name, a numerical user ID, or a "
+"<replaceable>RANGE</replaceable> of users. This <replaceable>RANGE</"
+"replaceable> of users can be specified with a min and max values "
+"(<replaceable>UID_MIN-UID_MAX</replaceable>), a max value (<replaceable>-"
+"UID_MAX</replaceable>), or a min value (<replaceable>UID_MIN-</replaceable>)."
+msgstr ""
+
+#: lastlog.8.xml:180(para)
+msgid ""
+"If the user has never logged in the message <emphasis>** Never logged in**</"
+"emphasis> will be displayed instead of the port and time."
+msgstr ""
+
+#: lastlog.8.xml:185(para)
+msgid ""
+"Only the entries for the current users of the system will be displayed. "
+"Other entries may exist for users that were deleted previously."
+msgstr ""
+
+#: lastlog.8.xml:193(title) groups.1.xml:90(title) chsh.1.xml:140(title)
+#: chage.1.xml:237(title)
+msgid "NOTE"
+msgstr "NOTERA"
+
+#: lastlog.8.xml:194(para)
+msgid ""
+"The <filename>lastlog</filename> file is a database which contains info on "
+"the last login of each user. You should not rotate it. It is a sparse file, "
+"so its size on the disk is usually much smaller than the one shown by "
+"\"<command>ls -l</command>\" (which can indicate a really big file if you "
+"have in <filename>passwd</filename> users with a high UID). You can display "
+"its real size with \"<command>ls -s</command>\"."
+msgstr ""
+
+#: lastlog.8.xml:220(filename)
+msgid "/var/log/lastlog"
+msgstr "/var/log/lastlog"
+
+#: lastlog.8.xml:222(para)
+msgid "Database times of previous user logins."
+msgstr "Databastider för tidigare användarinloggningar."
+
+#: lastlog.8.xml:230(para)
+msgid ""
+"Large gaps in UID numbers will cause the lastlog program to run longer with "
+"no output to the screen (i.e. if in lastlog database there is no entries for "
+"users with UID between 170 and 800 lastlog will appear to hang as it "
+"processes entries with UIDs 171-799)."
+msgstr ""
+
+#: gshadow.5.xml:41(contrib)
+msgid "Creation, 2005"
+msgstr ""
+
+#: gshadow.5.xml:46(refentrytitle) gshadow.5.xml:53(refname)
+msgid "gshadow"
+msgstr "gshadow"
+
+#: gshadow.5.xml:54(refpurpose)
+msgid "shadowed group file"
+msgstr "skuggad gruppfil"
+
+#: gshadow.5.xml:59(para)
+#, fuzzy
+#| msgid ""
+#| "<filename>/etc/gshadow</filename> contains the shadowed information for "
+#| "group accounts. It contains lines with the following colon-separated "
+#| "fields:"
+msgid ""
+"<filename>/etc/gshadow</filename> contains the shadowed information for "
+"group accounts."
+msgstr ""
+"<filename>/etc/gshadow</filename> innehåller skuggad gruppkontoinformation. "
+"Den innehåller rader med följande kolonseparerade fält:"
+
+#: gshadow.5.xml:69(para)
+msgid "Each line of this file contains the following colon-separated fields:"
+msgstr ""
+
+#: gshadow.5.xml:75(emphasis)
+msgid "group name"
+msgstr "gruppnamn"
+
+#: gshadow.5.xml:77(para)
+msgid "It must be a valid group name, which exist on the system."
+msgstr ""
+
+#: gshadow.5.xml:90(para)
+#, fuzzy
+msgid ""
+"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 *, users will not be able to use a unix "
+"password to access the group (but group members do not need the password)."
+msgstr ""
+"Referera till <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry> för detaljer om hur "
+"denna sträng tolkas."
+
+#: gshadow.5.xml:97(para)
+#, fuzzy
+#| msgid ""
+#| "The new value of the user's password file comment field. It is normally "
+#| "modified using the <citerefentry><refentrytitle>chfn</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry> utility."
+msgid ""
+"The password is used when a user who is not a member of the group wants to "
+"gain the permissions of this group (see <citerefentry><refentrytitle>newgrp</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>)."
+msgstr ""
+"Det nya värdet för användarens kommentarsfält i lösenordsfilen. Vanligtvis "
+"ändras det med verktyget <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+#: gshadow.5.xml:103(para)
+msgid ""
+"This field may be empty, in which case only the group members can gain the "
+"group permissions."
+msgstr ""
+
+#: gshadow.5.xml:113(para)
+msgid ""
+"This password supersedes any password specified in <filename>/etc/group</"
+"filename>."
+msgstr ""
+
+#: gshadow.5.xml:121(emphasis)
+msgid "administrators"
+msgstr ""
+
+#: gshadow.5.xml:123(para) gshadow.5.xml:139(para)
+#, fuzzy
+#| msgid "comma-separated list of group members"
+msgid "It must be a comma-separated list of user names."
+msgstr "kommaseparerad lista med gruppmedlemmar"
+
+#: gshadow.5.xml:126(para)
+msgid "Administrators can change the password or the members of the group."
+msgstr ""
+
+#: gshadow.5.xml:130(para)
+msgid ""
+"Administrators also have the same permissions as the members (see below)."
+msgstr ""
+
+#: gshadow.5.xml:137(emphasis)
+msgid "members"
+msgstr ""
+
+#: gshadow.5.xml:142(para)
+msgid "Members can access the group without being prompted for a password."
+msgstr ""
+
+#: gshadow.5.xml:146(para)
+msgid ""
+"You should use the same list of users as in <filename>/etc/group</filename>."
+msgstr ""
+
+#: gshadow.5.xml:175(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: grpck.8.xml:66(refpurpose)
+msgid "verify integrity of group files"
+msgstr "validera integriteten för gruppfiler"
+
+#: grpck.8.xml:84(para)
+msgid ""
+"The <command>grpck</command> command verifies the integrity of the groups "
+"information. It checks that all entries in <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</"
+"filename></phrase> have the proper format and contain valid data. The user "
+"is prompted to delete entries that are improperly formatted or which have "
+"other uncorrectable errors."
+msgstr ""
+
+#: grpck.8.xml:101(para)
+#, fuzzy
+#| msgid "a unique group name"
+msgid "a unique and valid group name"
+msgstr "ett unikt gruppnamn"
+
+#: grpck.8.xml:104(para)
+#, fuzzy
+#| msgid ""
+#| "Sort entries in <filename>/etc/passwd</filename> and <filename>/etc/"
+#| "shadow</filename> by UID."
+msgid ""
+"a valid group identifier <phrase condition=\"gshadow\"> (<filename>/etc/"
+"group</filename> only)</phrase>"
+msgstr ""
+"Sorterar poster i <filename>/etc/passwd</filename> och <filename>/etc/"
+"shadow</filename> efter UID."
+
+#: grpck.8.xml:111(para)
+#, fuzzy
+#| msgid "a valid list of members and administrators"
+msgid ""
+"a valid list of members <phrase condition=\"gshadow\"> and administrators</"
+"phrase>"
+msgstr "en giltig lista med medlemmar och administratörer"
+
+#: grpck.8.xml:117(para)
+msgid ""
+"a corresponding entry in the <filename>/etc/gshadow</filename> file "
+"(respectively <filename>/etc/group</filename> for the <filename>gshadow</"
+"filename> checks)"
+msgstr ""
+
+#: grpck.8.xml:125(para)
+msgid ""
+"The checks for correct number of fields and unique group name are fatal. If "
+"an entry has the wrong number of fields, the user will be prompted to delete "
+"the entire line. If the user does not answer affirmatively, all further "
+"checks are bypassed. An entry with a duplicated group name is prompted for "
+"deletion, but the remaining checks will still be made. All other errors are "
+"warnings and the user is encouraged to run the <command>groupmod</command> "
+"command to correct the error."
+msgstr ""
+
+#: grpck.8.xml:136(para)
+msgid ""
+"The commands which operate on the <filename>/etc/group</filename><phrase "
+"condition=\"no_gshadow\">file</phrase><phrase condition=\"gshadow\">and "
+"<filename>/etc/gshadow</filename> files</phrase> are not able to alter "
+"corrupted or duplicated entries. <command>grpck</command> should be used in "
+"those circumstances to remove the offending entries."
+msgstr ""
+
+#: grpck.8.xml:152(para)
+#, fuzzy
+#| msgid "The options which apply to the <command>pwck</command> command are:"
+msgid "The options which apply to the <command>grpck</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>pwck</command> är:"
+
+#: grpck.8.xml:165(para)
+msgid ""
+"Execute the <command>grpck</command> command in read-only mode. This causes "
+"all questions regarding changes to be answered <emphasis>no</emphasis> "
+"without user intervention."
+msgstr ""
+
+#: grpck.8.xml:187(para)
+#, fuzzy
+#| msgid ""
+#| "Sort entries in <filename>/etc/passwd</filename> and <filename>/etc/"
+#| "shadow</filename> by UID."
+msgid ""
+"Sort entries in <filename>/etc/group</filename><phrase condition=\"gshadow"
+"\">and <filename>/etc/gshadow</filename></phrase> by GID."
+msgstr ""
+"Sorterar poster i <filename>/etc/passwd</filename> och <filename>/etc/"
+"shadow</filename> efter UID."
+
+#: grpck.8.xml:196(para)
+msgid ""
+"By default, <command>grpck</command> operates on <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</"
+"filename></phrase>. The user may select alternate files with the <emphasis "
+"remap=\"I\">group</emphasis><phrase condition=\"no_gshadow\">parameter.</"
+"phrase><phrase condition=\"gshadow\">and <emphasis remap=\"I\">shadow</"
+"emphasis> parameters.</phrase>"
+msgstr ""
+
+#: grpck.8.xml:264(para)
+msgid "one or more bad group entries"
+msgstr "en eller flera felaktiga grupposter"
+
+#: grpck.8.xml:270(para)
+msgid "can't open group files"
+msgstr "kan inte öppna gruppfiler"
+
+#: grpck.8.xml:276(para)
+msgid "can't lock group files"
+msgstr "kan inte låsa gruppfiler"
+
+#: grpck.8.xml:282(para)
+msgid "can't update group files"
+msgstr "kan inte uppdatera gruppfiler"
+
+#: grpck.8.xml:246(para)
+msgid ""
+"The <command>grpck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Kommandot <command>grpck</command> avslutas med följande värden: "
+"<placeholder-1/>"
+
+#: grpck.8.xml:291(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"gshadow\"><citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum>, </citerefentry>, </"
+"phrase><citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: groups.1.xml:57(refentrytitle) groups.1.xml:64(refname)
+#: groups.1.xml:70(command)
+msgid "groups"
+msgstr "groups"
+
+#: groups.1.xml:65(refpurpose)
+msgid "display current group names"
+msgstr "visa aktuella gruppnamn"
+
+#: groups.1.xml:72(replaceable)
+msgid "user"
+msgstr "användare"
+
+#: groups.1.xml:79(para)
+msgid ""
+"The <command>groups</command> command displays the current group names or ID "
+"values. If the value does not have a corresponding entry in <filename>/etc/"
+"group</filename>, the value will be displayed as the numerical group value. "
+"The optional <emphasis remap=\"I\">user</emphasis> parameter will display "
+"the groups for the named <emphasis remap=\"I\">user</emphasis>."
+msgstr ""
+
+#: groups.1.xml:91(para)
+msgid ""
+"Systems which do not support concurrent group sets will have the information "
+"from <filename>/etc/group</filename> reported. The user must use "
+"<command>newgrp</command> or <command>sg</command> to change his current "
+"real and effective group ID."
+msgstr ""
+
+#: groups.1.xml:113(para)
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+
+#: groupmod.8.xml:66(refpurpose)
+msgid "modify a group definition on the system"
+msgstr "ändra en gruppdefinition på systemet"
+
+#: groupmod.8.xml:75(replaceable) groupdel.8.xml:75(replaceable)
+msgid "GROUP"
+msgstr "GRUPP"
+
+#: groupmod.8.xml:81(para)
+msgid ""
+"The <command>groupmod</command> command modifies the definition of the "
+"specified <replaceable>GROUP</replaceable> by modifying the appropriate "
+"entry in the group database."
+msgstr ""
+
+#: groupmod.8.xml:90(para)
+msgid "The options which apply to the <command>groupmod</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>groupmod</command> är:"
+
+#: groupmod.8.xml:96(term) groupadd.8.xml:114(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GID</"
+"replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GID</"
+"replaceable>"
+
+#: groupmod.8.xml:100(para)
+msgid ""
+"The group ID of the given <replaceable>GROUP</replaceable> will be changed "
+"to <replaceable>GID</replaceable>."
+msgstr ""
+
+#: groupmod.8.xml:104(para)
+msgid ""
+"The value of <replaceable>GID</replaceable> must be a non-negative decimal "
+"integer. This value must be unique, unless the <option>-o</option> option is "
+"used."
+msgstr ""
+
+#: groupmod.8.xml:110(para)
+msgid ""
+"Users who use the group as primary group will be updated to keep the group "
+"as their primary group."
+msgstr ""
+
+#: groupmod.8.xml:114(para)
+msgid ""
+"Any files that have the old group ID and must continue to belong to "
+"<replaceable>GROUP</replaceable>, must have their group ID changed manually."
+msgstr ""
+
+#: groupmod.8.xml:120(para)
+msgid ""
+"No checks will be performed with regard to the <option>GID_MIN</option>, "
+"<option>GID_MAX</option>, <option>SYS_GID_MIN</option>, or "
+"<option>SYS_GID_MAX</option> from <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: groupmod.8.xml:135(term)
+msgid ""
+"<option>-n</option>, <option>--new-name</option>&nbsp;"
+"<replaceable>NEW_GROUP</replaceable>"
+msgstr ""
+"<option>-n</option>, <option>--new-name</option>&nbsp;<replaceable>NY_GRUPP</"
+"replaceable>"
+
+#: groupmod.8.xml:139(para)
+msgid ""
+"The name of the group will be changed from <replaceable>GROUP</replaceable> "
+"to <replaceable>NEW_GROUP</replaceable> name."
+msgstr ""
+
+#: groupmod.8.xml:150(para)
+#, fuzzy
+msgid ""
+"When used with the <option>-g</option> option, allow to change the group "
+"<replaceable>GID</replaceable> to a non-unique value."
+msgstr ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GID</"
+"replaceable>"
+
+#: groupmod.8.xml:259(para)
+msgid "E_SUCCESS: success"
+msgstr ""
+
+#: groupmod.8.xml:265(para)
+#, fuzzy
+#| msgid "invalid command syntax"
+msgid "E_USAGE: invalid command syntax"
+msgstr "ogiltig kommandosyntax"
+
+#: groupmod.8.xml:271(para)
+#, fuzzy
+#| msgid "invalid argument to option"
+msgid "E_BAD_ARG: invalid argument to option"
+msgstr "ogiltigt argument till flagga"
+
+#: groupmod.8.xml:277(para)
+#, fuzzy
+#| msgid "specified group doesn't exist"
+msgid "E_GID_IN_USE: specified group doesn't exist"
+msgstr "angiven grupp finns inte"
+
+#: groupmod.8.xml:283(para)
+#, fuzzy
+#| msgid "specified group doesn't exist"
+msgid "E_NOTFOUND: specified group doesn't exist"
+msgstr "angiven grupp finns inte"
+
+#: groupmod.8.xml:289(para)
+#, fuzzy
+#| msgid "group name already in use"
+msgid "E_NAME_IN_USE: group name already in use"
+msgstr "gruppnamnet används redan"
+
+#: groupmod.8.xml:295(para)
+#, fuzzy
+#| msgid "can't update group file"
+msgid "E_GRP_UPDATE: can't update group file"
+msgstr "kan inte uppdatera gruppfilen"
+
+#: groupmod.8.xml:299(replaceable)
+#, fuzzy
+#| msgid "1"
+msgid "11"
+msgstr "1"
+
+#: groupmod.8.xml:301(para)
+msgid "E_CLEANUP_SERVICE: can't setup cleanup service"
+msgstr ""
+
+#: groupmod.8.xml:307(para)
+msgid "E_PAM_USERNAME: can't determine your username for use with pam"
+msgstr ""
+
+#: groupmod.8.xml:311(replaceable)
+msgid "13"
+msgstr "13"
+
+#: groupmod.8.xml:313(para)
+msgid ""
+"E_PAM_ERROR: pam returned an error, see syslog facility id groupmod for the "
+"PAM error message"
+msgstr ""
+
+#: groupmod.8.xml:253(para)
+msgid ""
+"The <command>groupmod</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Kommandot <command>groupmod</command> avslutas med följande värden: "
+"<placeholder-1/>"
+
+#: groupmod.8.xml:322(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: groupmems.8.xml:42(firstname)
+msgid "George"
+msgstr ""
+
+#: groupmems.8.xml:43(surname)
+msgid "Kraft"
+msgstr ""
+
+#: groupmems.8.xml:44(lineage)
+msgid "IV"
+msgstr ""
+
+#: groupmems.8.xml:45(contrib)
+msgid "Creation, 2000"
+msgstr ""
+
+#: groupmems.8.xml:69(refpurpose)
+msgid "administer members of a user's primary group"
+msgstr "administrera medlemmar av en användares primära grupp"
+
+#: groupmems.8.xml:76(replaceable) groupmems.8.xml:77(replaceable)
+msgid "user_name"
+msgstr "användarnamn"
+
+#: groupmems.8.xml:76(arg)
+msgid "-a <placeholder-1/>"
+msgstr "-a <placeholder-1/>"
+
+#: groupmems.8.xml:77(arg)
+msgid "-d <placeholder-1/>"
+msgstr "-d <placeholder-1/>"
+
+#: groupmems.8.xml:78(replaceable)
+msgid "group_name"
+msgstr "gruppnamn"
+
+#: groupmems.8.xml:78(arg)
+msgid "-g <placeholder-1/>"
+msgstr "-g <placeholder-1/>"
+
+#: groupmems.8.xml:79(arg)
+msgid "-l"
+msgstr "-l"
+
+#: groupmems.8.xml:86(para)
+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)
+#, fuzzy
+msgid ""
+"Only the superuser, as administrator, can use <command>groupmems</command> "
+"to alter the memberships of other groups."
+msgstr ""
+"Endast superanvändaren, som administratör, kan använda <command>groupmems</"
+"command> för att göra ändringar i medlemskap för andra grupper."
+
+#: groupmems.8.xml:101(para)
+msgid ""
+"The options which apply to the <command>groupmems</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>groupmems</command> är:"
+
+#: groupmems.8.xml:107(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+#| "replaceable>"
+msgid ""
+"<option>-a</option>, <option>--add</option>&nbsp;<replaceable>user_name</"
+"replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+"replaceable>"
+
+#: groupmems.8.xml:109(para)
+#, fuzzy
+#| msgid "Add a new user to the group membership list."
+msgid "Add a user to the group membership list."
+msgstr "Lägg till en ny användare till gruppens medlemslista."
+
+#: groupmems.8.xml:110(para) groupmems.8.xml:126(para)
+#: groupmems.8.xml:157(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, and the group has no "
+"entry in the <filename>/etc/gshadow</filename> file, a new entry will be "
+"created."
+msgstr ""
+
+#: groupmems.8.xml:118(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-t</option>, <option>--time</option>&nbsp;<replaceable>DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-d</option>, <option>--delete</option>&nbsp;<replaceable>user_name</"
+"replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option>&nbsp;<replaceable>DAGAR</"
+"replaceable>"
+
+#: groupmems.8.xml:120(para)
+msgid "Delete a user from the group membership list."
+msgstr "Ta bort en användare från gruppen medlemslista."
+
+#: groupmems.8.xml:121(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, the user will be "
+"removed from the list of members and administrators of the group."
+msgstr ""
+
+#: groupmems.8.xml:134(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GID</"
+#| "replaceable>"
+msgid ""
+"<option>-g</option>, <option>--group</option>&nbsp;<replaceable>group_name</"
+"replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GID</"
+"replaceable>"
+
+#: groupmems.8.xml:136(para)
+#, fuzzy
+msgid "The superuser can specify which group membership list to modify."
+msgstr "Superanvändaren kan ange vilken grupps medlemslista som ska ändras."
+
+#: groupmems.8.xml:148(term) chage.1.xml:160(term)
+msgid "<option>-l</option>, <option>--list</option>"
+msgstr "<option>-l</option>, <option>--list</option>"
+
+#: groupmems.8.xml:150(para)
+msgid "List the group membership list."
+msgstr "Lista gruppens medlemslista."
+
+#: groupmems.8.xml:154(term)
+#, fuzzy
+#| msgid "<option>-e</option>, <option>--expire</option>"
+msgid "<option>-p</option>, <option>--purge</option>"
+msgstr "<option>-e</option>, <option>--expire</option>"
+
+#: groupmems.8.xml:156(para)
+msgid "Purge all users from the group membership list."
+msgstr "Rensa alla användare från gruppens medlemslista."
+
+#: groupmems.8.xml:180(title)
+msgid "SETUP"
+msgstr ""
+
+#: groupmems.8.xml:181(para)
+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 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 2710 groupmems\n"
+"\t$ chown root.groups groupmems\n"
+"\t$ groupmems -g groups -a gk4\n"
+" "
+
+#: groupmems.8.xml:222(para)
+msgid "secure group account information"
+msgstr "säker gruppkontoinformation"
+
+#: groupmems.8.xml:230(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: groupdel.8.xml:66(refpurpose)
+msgid "delete a group"
+msgstr "ta bort en grupp"
+
+#: groupdel.8.xml:81(para)
+#, fuzzy
+msgid ""
+"The <command>groupdel</command> command modifies the system account files, "
+"deleting all entries that refer to <replaceable>GROUP</replaceable>. The "
+"named group must exist."
+msgstr ""
+"Kommandot <command>userdel</command> ändrar i systemkontofilerna, tar bort "
+"alla poster som refererar till <emphasis remap=\"I\">login_name</emphasis>. "
+"Den angivna användaren måste finnas."
+
+#: groupdel.8.xml:89(para)
+#, fuzzy
+#| msgid ""
+#| "The options which apply to the <command>groupmod</command> command are:"
+msgid "The options which apply to the <command>groupdel</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>groupmod</command> är:"
+
+#: groupdel.8.xml:134(para)
+msgid ""
+"You may not remove the primary group of any existing user. You must remove "
+"the user before you remove the group."
+msgstr ""
+"Du får inte ta bort den primära gruppen för någon existerande användare. Du "
+"måste ta bort användaren innan du tar bort gruppen."
+
+#: groupdel.8.xml:138(para)
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this group."
+msgstr ""
+
+#: groupdel.8.xml:200(para)
+msgid "can't remove user's primary group"
+msgstr "kan inte ta bort användarens primära grupp"
+
+#: groupdel.8.xml:176(para)
+msgid ""
+"The <command>groupdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Kommandot <command>groupdel</command> avslutas med följande värden: "
+"<placeholder-1/>"
+
+#: groupdel.8.xml:215(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>"
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>"
+
+#: groupadd.8.xml:68(refpurpose)
+msgid "create a new group"
+msgstr "skapa en ny grupp"
+
+#: groupadd.8.xml:85(para)
+msgid ""
+"The <command>groupadd</command> command creates a new group account using "
+"the values specified on the command line plus the default values from the "
+"system. The new group will be entered into the system files as needed."
+msgstr ""
+
+#: groupadd.8.xml:94(para)
+msgid "The options which apply to the <command>groupadd</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>groupadd</command> är:"
+
+#: groupadd.8.xml:104(para)
+msgid ""
+"This option causes the command to simply exit with success status if the "
+"specified group already exists. When used with <option>-g</option>, and the "
+"specified GID already exists, another (unique) GID is chosen (i.e. <option>-"
+"g</option> is turned off)."
+msgstr ""
+
+#: groupadd.8.xml:118(para)
+msgid ""
+"The numerical value of the group's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than or equal to "
+"<option>GID_MIN</option> and greater than every other group."
+msgstr ""
+
+#: groupadd.8.xml:124(para)
+#, fuzzy
+msgid ""
+"See also the <option>-r</option> option and the <option>GID_MAX</option> "
+"description."
+msgstr ""
+"Flaggorna <option>-r</option>, <option>-h</option> och <option>-f</option> "
+"används endast när <command>login</command> har startats av root."
+
+#: groupadd.8.xml:141(para)
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (GID_MIN, GID_MAX "
+"and others). Multiple <option>-K</option> options can be specified."
+msgstr ""
+"Åsidosätter standardvärden i <filename>/etc/login.defs</filename> (GID_MIN, "
+"GID_MAX och andra). Flera flaggor av <option>-K</option> kan anges."
+
+#: groupadd.8.xml:146(para)
+#, fuzzy
+#| msgid ""
+#| "Example: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+#| "replaceable>=<replaceable>100</replaceable>&nbsp;<option> -K </"
+#| "option>&nbsp;<replaceable>GID_MAX</replaceable>=<replaceable>499</"
+#| "replaceable>"
+msgid ""
+"Example: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+"<replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+"Exempel: <option>-Koption>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+"<replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+
+#: groupadd.8.xml:150(para)
+msgid ""
+"Note: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+"replaceable>=<replaceable>499</replaceable> doesn't work yet."
+msgstr ""
+"Notera: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+"replaceable>=<replaceable>499</replaceable> fungerar ännu inte."
+
+#: groupadd.8.xml:161(para)
+#, fuzzy
+msgid "This option permits to add a group with a non-unique GID."
+msgstr "Denna flagga tillåter att en grupp med ett icke-unikt GID läggs till."
+
+#: groupadd.8.xml:192(para)
+#, fuzzy
+#| msgid "create a new group"
+msgid "Create a system group."
+msgstr "skapa en ny grupp"
+
+#: groupadd.8.xml:195(para)
+msgid ""
+"The numeric identifiers of new system groups are chosen in the "
+"<option>SYS_GID_MIN</option>-<option>SYS_GID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>GID_MIN</option>-"
+"<option>GID_MAX</option>."
+msgstr ""
+
+#: groupadd.8.xml:275(para)
+#, fuzzy
+#| msgid ""
+#| "Usernames must begin with a lower case letter or an underscore, and only "
+#| "lower case letters, underscores, dashes, and dollar signs may follow. In "
+#| "regular expression terms: [a-z_][a-z0-9_-]*[$]"
+msgid ""
+"Groupnames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+"Användarnamn måste börja med en gemen bokstav eller ett understreck och får "
+"endast innehålla gemener, understreck, minustecken och på slutet ett dollar-"
+"tecken. I reguljära uttryckstermer: [a-z_][a-z0-9_-]*[$]"
+
+#: groupadd.8.xml:281(para)
+msgid "Groupnames may only be up to &GROUP_NAME_MAX_LENGTH; characters long."
+msgstr ""
+
+#: groupadd.8.xml:284(para)
+#, fuzzy
+msgid ""
+"You may not add a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+"Du får inte lägga till en användare till en NIS-grupp. Detta måste "
+"genomföras på NIS-servern."
+
+#: groupadd.8.xml:288(para)
+msgid ""
+"If the groupname already exists in an external group database such as NIS or "
+"LDAP, <command>groupadd</command> will deny the group creation request."
+msgstr ""
+
+#: groupadd.8.xml:321(para)
+msgid "GID not unique (when <option>-o</option> not used)"
+msgstr "GID inte unikt (när <option>-o</option> inte används)"
+
+#: groupadd.8.xml:327(para)
+msgid "group name not unique"
+msgstr "gruppnamn inte unikt"
+
+#: groupadd.8.xml:297(para)
+msgid ""
+"The <command>groupadd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Kommandot <command>groupadd</command> avslutas med följande värden: "
+"<placeholder-1/>"
+
+#: groupadd.8.xml:342(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: gpasswd.1.xml:44(firstname)
+msgid "Rafal"
+msgstr ""
+
+#: gpasswd.1.xml:45(surname)
+msgid "Maszkowski"
+msgstr ""
+
+#: gpasswd.1.xml:71(phrase)
+#, fuzzy
+#| msgid "-r <placeholder-1/>"
+msgid "administer <placeholder-1/>"
+msgstr "-r <placeholder-1/>"
+
+#: gpasswd.1.xml:74(phrase)
+#, fuzzy
+msgid "administer <placeholder-1/> and <placeholder-2/>"
+msgstr "-K <placeholder-1/>=<placeholder-2/>"
+
+#: gpasswd.1.xml:85(replaceable) expiry.1.xml:76(replaceable)
+#, fuzzy
+msgid "option"
+msgstr "flaggor"
+
+#: gpasswd.1.xml:95(para)
+msgid ""
+"The <command>gpasswd</command> command is used to administer <filename>/etc/"
+"group</filename><phrase condition=\"gshadow\">, and <filename>/etc/gshadow</"
+"filename></phrase>. Every group can have <phrase condition=\"gshadow"
+"\">administrators,</phrase> members and a password."
+msgstr ""
+
+#: gpasswd.1.xml:103(para)
+msgid ""
+"System administrators can use the <option>-A</option> option to define group "
+"administrator(s) and the <option>-M</option> option to define members. They "
+"have all rights of group administrators and members."
+msgstr ""
+
+#: gpasswd.1.xml:108(para)
+msgid ""
+"<command>gpasswd</command> called by <phrase condition=\"gshadow\">a group "
+"administrator</phrase><phrase condition=\"no_gshadow\">a system "
+"administrator</phrase> with a group name only prompts for the new password "
+"of the <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:115(para)
+#, fuzzy
+msgid ""
+"If a password is set the members can still use "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> without a password, and non-members must supply the password."
+msgstr ""
+"Referera till <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry> för detaljer om hur "
+"denna sträng tolkas."
+
+#: gpasswd.1.xml:123(title)
+msgid "Notes about group passwords"
+msgstr "Noteringar angående grupplösenord"
+
+#: gpasswd.1.xml:124(para)
+msgid ""
+"Group passwords are an inherent security problem since more than one person "
+"is permitted to know the password. However, groups are a useful tool for "
+"permitting co-operation between different users."
+msgstr ""
+
+#: gpasswd.1.xml:135(para)
+#, fuzzy
+msgid ""
+"Except for the <option>-A</option> and <option>-M</option> options, the "
+"options cannot be combined."
+msgstr ""
+"Flaggorna <option>-r</option>, <option>-h</option> och <option>-f</option> "
+"används endast när <command>login</command> har startats av root."
+
+#: gpasswd.1.xml:139(para)
+msgid "The options cannot be combined."
+msgstr ""
+
+#: gpasswd.1.xml:142(para)
+#, fuzzy
+msgid "The options which apply to the <command>gpasswd</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>passwd</command> är:"
+
+#: gpasswd.1.xml:147(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+#| "replaceable>"
+msgid ""
+"<option>-a</option>, <option>--add</option>&nbsp;<replaceable>user</"
+"replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+"replaceable>"
+
+#: gpasswd.1.xml:151(para)
+msgid ""
+"Add the <replaceable>user</replaceable> to the named <replaceable>group</"
+"replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:160(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-t</option>, <option>--time</option>&nbsp;<replaceable>DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-d</option>, <option>--delete</option>&nbsp;<replaceable>user</"
+"replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option>&nbsp;<replaceable>DAGAR</"
+"replaceable>"
+
+#: gpasswd.1.xml:164(para)
+msgid ""
+"Remove the <replaceable>user</replaceable> from the named "
+"<replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:181(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_DIR</"
+#| "replaceable>"
+msgid ""
+"<option>-Q</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HEM_KAT</"
+"replaceable>"
+
+#: gpasswd.1.xml:195(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--remove</option>"
+msgid "<option>-r</option>, <option>--remove-password</option>"
+msgstr "<option>-r</option>, <option>--remove</option>"
+
+#: gpasswd.1.xml:199(para)
+msgid ""
+"Remove the password from the named <replaceable>group</replaceable>. The "
+"group password will be empty. Only group members will be allowed to use "
+"<command>newgrp</command> to join the named <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:211(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-R</option>, <option>--restrict</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: gpasswd.1.xml:215(para)
+msgid ""
+"Restrict the access to the named <replaceable>group</replaceable>. The group "
+"password is set to \"!\". Only group members with a password will be allowed "
+"to use <command>newgrp</command> to join the named <replaceable>group</"
+"replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:227(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-m</option>, <option>--mindays</option>&nbsp;"
+#| "<replaceable>MIN_DAYS</replaceable>"
+msgid ""
+"<option>-A</option>, <option>--administrators</option>&nbsp;"
+"<replaceable>user</replaceable>,..."
+msgstr ""
+"<option>-m</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DAGAR</"
+"replaceable>"
+
+#: gpasswd.1.xml:231(para)
+#, fuzzy
+msgid "Set the list of administrative users."
+msgstr "kommaseparerad lista med gruppadministratörer"
+
+#: gpasswd.1.xml:239(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-b</option>, <option>--before</option>&nbsp;<replaceable>DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-M</option>, <option>--members</option>&nbsp;<replaceable>user</"
+"replaceable>,..."
+msgstr ""
+"<option>-b</option>, <option>--before</option>&nbsp;<replaceable>DAGAR</"
+"replaceable>"
+
+#: gpasswd.1.xml:243(para)
+#, fuzzy
+msgid "Set the list of group members."
+msgstr "kommaseparerad lista med gruppmedlemmar"
+
+#: gpasswd.1.xml:253(para)
+msgid ""
+"This tool only operates on the <filename>/etc/group</filename><phrase "
+"condition=\"gshadow\"> and <filename>/etc/gshadow</filename> files.</"
+"phrase><phrase condition=\"no_gshadow\">file.</phrase> Thus you cannot "
+"change any NIS or LDAP group. This must be performed on the corresponding "
+"server."
+msgstr ""
+
+#: gpasswd.1.xml:298(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition="
+"\"gshadow\">, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: faillog.8.xml:57(refentrytitle) faillog.8.xml:64(refname)
+#: faillog.8.xml:70(command) faillog.5.xml:57(refentrytitle)
+#: faillog.5.xml:64(refname) faillog.5.xml:111(refentrytitle)
+msgid "faillog"
+msgstr "faillog"
+
+#: faillog.8.xml:65(refpurpose)
+msgid "display faillog records or set login failure limits"
+msgstr ""
+
+#: faillog.8.xml:79(para)
+msgid ""
+"<command>faillog</command> displays the contents of the failure log database "
+"(<filename>/var/log/faillog</filename>). It can also set the failure "
+"counters and limits. When <command>faillog</command> is run without "
+"arguments, it only displays the faillog records of the users who had a login "
+"failure."
+msgstr ""
+
+#: faillog.8.xml:90(para)
+msgid "The options which apply to the <command>faillog</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>faillog</command> är:"
+
+#: faillog.8.xml:98(para)
+msgid ""
+"Display (or act on) faillog records for all users having an entry in the "
+"<filename>faillog</filename> database."
+msgstr ""
+
+#: faillog.8.xml:102(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid ""
+"The range of users can be restricted with the <option>-u</option> option."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: faillog.8.xml:106(para)
+msgid ""
+"In display mode, this is still restricted to existing users but forces the "
+"display of the faillog entries even if they are empty."
+msgstr ""
+
+#: faillog.8.xml:111(para)
+msgid ""
+"With the <option>-l</option>, <option>-m</option>, <option>-r</option>, "
+"<option>-t</option> options, the users' records are changed, even if the "
+"user does not exist on the system. This is useful to reset records of users "
+"that have been deleted or to set a policy in advance for a range of users."
+msgstr ""
+
+#: faillog.8.xml:128(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-l</option>, <option>--lock-time</option>&nbsp;<replaceable>SEC</"
+#| "replaceable>"
+msgid ""
+"<option>-l</option>, <option>--lock-secs</option>&nbsp;<replaceable>SEC</"
+"replaceable>"
+msgstr ""
+"<option>-l</option>, <option>--lock-time</option>&nbsp;<replaceable>SEK</"
+"replaceable>"
+
+#: faillog.8.xml:132(para)
+#, fuzzy
+#| msgid ""
+#| "Lock account to <replaceable>SEC</replaceable> seconds after failed login."
+msgid ""
+"Lock account for <replaceable>SEC</replaceable> seconds after failed login."
+msgstr ""
+"Lås kontot <replaceable>SEK</replaceable> sekunder efter misslyckad "
+"inloggning."
+
+#: faillog.8.xml:136(para) faillog.8.xml:161(para) faillog.8.xml:173(para)
+msgid ""
+"Write access to <filename>/var/log/faillog</filename> is required for this "
+"option."
+msgstr ""
+
+#: faillog.8.xml:143(term)
+msgid ""
+"<option>-m</option>, <option>--maximum</option>&nbsp;<replaceable>MAX</"
+"replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--maximum</option>&nbsp;<replaceable>MAX</"
+"replaceable>"
+
+#: faillog.8.xml:147(para)
+#, fuzzy
+#| msgid ""
+#| "Set the maximum number of days a password remains valid. After "
+#| "<replaceable>MAX_DAYS</replaceable>, the password is required to be "
+#| "changed."
+msgid ""
+"Set the maximum number of login failures after the account is disabled to "
+"<replaceable>MAX</replaceable>."
+msgstr ""
+"Sätter maximalt antal dagar som ett lösenord ska vara giltigt. Efter "
+"<replaceable>MAX_DAGAR</replaceable> krävs det att lösenordet ändras."
+
+#: faillog.8.xml:151(para)
+msgid ""
+"Selecting a <replaceable>MAX</replaceable> value of 0 has the effect of not "
+"placing a limit on the number of failed logins."
+msgstr ""
+
+#: faillog.8.xml:156(para)
+msgid ""
+"The maximum failure count should always be 0 for <emphasis>root</emphasis> "
+"to prevent a denial of services attack against the system."
+msgstr ""
+
+#: faillog.8.xml:168(term)
+msgid "<option>-r</option>, <option>--reset</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: faillog.8.xml:170(para)
+msgid "Reset the counters of login failures."
+msgstr ""
+
+#: faillog.8.xml:195(para)
+msgid ""
+"Display faillog records more recent than <replaceable>DAYS</replaceable>."
+msgstr ""
+
+#: faillog.8.xml:206(para)
+msgid ""
+"Display faillog record or maintains failure counters and limits (if used "
+"with <option>-l</option>, <option>-m</option> or <option>-r</option> "
+"options) only for the specified user(s)."
+msgstr ""
+
+#: faillog.8.xml:224(para)
+#, fuzzy
+#| msgid ""
+#| "The <option>-r</option>, <option>-h</option> and <option>-f</option> "
+#| "options are only used when <command>login</command> is invoked by root."
+msgid ""
+"When none of the <option>-l</option>, <option>-m</option>, or <option>-r</"
+"option> options are used, <command>faillog</command> displays the faillog "
+"record of the specified user(s)."
+msgstr ""
+"Flaggorna <option>-r</option>, <option>-h</option> och <option>-f</option> "
+"används endast när <command>login</command> har startats av root."
+
+#: faillog.8.xml:233(para)
+msgid ""
+"<command>faillog</command> only prints out users with no successful login "
+"since the last failure. To print out a user who has had a successful login "
+"since their last failure, you must explicitly request the user with the "
+"<option>-u</option> flag, or print out all users with the <option>-a</"
+"option> flag."
+msgstr ""
+
+#: faillog.8.xml:246(filename) faillog.5.xml:99(filename)
+msgid "/var/log/faillog"
+msgstr "/var/log/faillog"
+
+#: faillog.8.xml:248(para) faillog.5.xml:101(para)
+msgid "Failure logging file."
+msgstr ""
+
+#: faillog.8.xml:256(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>faillog</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>faillog</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: faillog.5.xml:65(refpurpose)
+msgid "login failure logging file"
+msgstr ""
+
+#: faillog.5.xml:70(para)
+msgid ""
+"<filename>/var/log/faillog</filename> maintains a count of login failures "
+"and the limits for each account."
+msgstr ""
+
+#: faillog.5.xml:74(para)
+msgid ""
+"The file contains fixed length records, indexed by numerical UID. Each "
+"record contains the count of login failures since the last successful login; "
+"the maximum number of failures before the account is disabled; the line on "
+"which the last login failure occurred; the date of the last login failure; "
+"and the duration (in seconds) during which the account will be locked after "
+"a failure."
+msgstr ""
+
+#: faillog.5.xml:84(para)
+msgid "The structure of the file is:"
+msgstr "Strukturen för filen är:"
+
+#: faillog.5.xml:85(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort fail_cnt;\n"
+"\tshort fail_max;\n"
+"\tchar fail_line[12];\n"
+"\ttime_t fail_time;\n"
+"\tlong fail_locktime;\n"
+"};"
+msgstr ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort fail_cnt;\n"
+"\tshort fail_max;\n"
+"\tchar fail_line[12];\n"
+"\ttime_t fail_time;\n"
+"\tlong fail_locktime;\n"
+"};"
+
+#: expiry.1.xml:45(contrib) chsh.1.xml:44(contrib) chfn.1.xml:44(contrib)
+#: chage.1.xml:42(contrib)
+msgid "Creation, 1990"
+msgstr ""
+
+#: expiry.1.xml:61(refentrytitle) expiry.1.xml:68(refname)
+#: expiry.1.xml:74(command)
+msgid "expiry"
+msgstr "expiry"
+
+#: expiry.1.xml:69(refpurpose)
+msgid "check and enforce password expiration policy"
+msgstr "kontrollera och upprätthåll policy för lösenordsutgång"
+
+#: expiry.1.xml:83(para)
+msgid ""
+"The <command>expiry</command> command checks (<option>-c</option>) the "
+"current password expiration and forces (<option>-f</option>) changes when "
+"required. It is callable as a normal user command."
+msgstr ""
+
+#: expiry.1.xml:92(para)
+#, fuzzy
+#| msgid "The options which apply to the <command>pwck</command> command are:"
+msgid "The options which apply to the <command>expiry</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>pwck</command> är:"
+
+#: expiry.1.xml:97(term)
+#, fuzzy
+#| msgid "<option>-L</option>, <option>--lock</option>"
+msgid "<option>-c</option>, <option>--check</option>"
+msgstr "<option>-L</option>, <option>--lock</option>"
+
+#: expiry.1.xml:99(para)
+#, fuzzy
+#| msgid "check and enforce password expiration policy"
+msgid "Check the password expiration of the current user."
+msgstr "kontrollera och upprätthåll policy för lösenordsutgång"
+
+#: expiry.1.xml:105(para)
+msgid "Force a password change if the current user has an expired password."
+msgstr ""
+
+#: expiry.1.xml:140(para) chage.1.xml:318(para)
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: chsh.1.xml:68(refpurpose)
+msgid "change login shell"
+msgstr "ändra inloggningsskal"
+
+#: chsh.1.xml:85(para)
+msgid ""
+"The <command>chsh</command> command changes the user login shell. This "
+"determines the name of the user's initial login command. A normal user may "
+"only change the login shell for her own account; the superuser may change "
+"the login shell for any account."
+msgstr ""
+
+#: chsh.1.xml:96(para)
+msgid "The options which apply to the <command>chsh</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>chsh</command> är:"
+
+#: chsh.1.xml:130(para)
+msgid ""
+"If the <option>-s</option> option is not selected, <command>chsh</command> "
+"operates in an interactive fashion, prompting the user with the current "
+"login shell. Enter the new value to change the shell, or leave the line "
+"blank to use the current one. The current shell is displayed between a pair "
+"of <emphasis>[ ]</emphasis> marks."
+msgstr ""
+
+#: chsh.1.xml:141(para)
+msgid ""
+"The only restriction placed on the login shell is that the command name must "
+"be listed in <filename>/etc/shells</filename>, unless the invoker is the "
+"superuser, and then any value may be added. An account with a restricted "
+"login shell may not change her login shell. For this reason, placing "
+"<filename>/bin/rsh</filename> in <filename>/etc/shells</filename> is "
+"discouraged since accidentally changing to a restricted shell would prevent "
+"the user from ever changing her login shell back to its original value."
+msgstr ""
+
+#: chsh.1.xml:176(filename)
+msgid "/etc/shells"
+msgstr "/etc/shells"
+
+#: chsh.1.xml:178(para)
+msgid "List of valid login shells."
+msgstr "Lista på giltiga inloggningsskal."
+
+#: chsh.1.xml:192(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: chpasswd.8.xml:69(refpurpose)
+msgid "update passwords in batch mode"
+msgstr "uppdatera lösenord i satsläge"
+
+#: chpasswd.8.xml:83(para)
+#, fuzzy
+msgid ""
+"The <command>chpasswd</command> command reads a list of user name and "
+"password pairs from standard input and uses this information to update a "
+"group of existing users. Each line is of the format:"
+msgstr ""
+"<command>chgpasswd</command> läser en lista på gruppnamn och lösenordspar "
+"från standard in och använder denna information för att uppdatera en "
+"uppsättning redan existerande grupper. Varje rad är i formatet:"
+
+#: chpasswd.8.xml:88(para)
+msgid ""
+"<emphasis remap=\"I\">user_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">användarnamn</emphasis>:<emphasis remap=\"I"
+"\">lösenord</emphasis>"
+
+#: chpasswd.8.xml:92(para)
+#, fuzzy
+msgid ""
+"By default the passwords must be supplied in clear-text, and are encrypted "
+"by <command>chpasswd</command>. Also the password age will be updated, if "
+"present."
+msgstr ""
+"Som standard måste det insända lösenordet vara i klartext. "
+"Standardkrypteringsalgoritmen är DES."
+
+#: chpasswd.8.xml:97(para)
+msgid ""
+"The default encryption algorithm can be defined for the system with the "
+"<option>ENCRYPT_METHOD</option> or <option>MD5_CRYPT_ENAB</option> variables "
+"of <filename>/etc/login.defs</filename>, and can be overwritten with the "
+"<option>-e</option>, <option>-m</option>, or <option>-c</option> options."
+msgstr ""
+
+#: chpasswd.8.xml:105(para)
+msgid ""
+"By default, passwords are encrypted by PAM, but (even if not recommended) "
+"you can select a different encryption method with the <option>-e</option>, "
+"<option>-m</option>, or <option>-c</option> options."
+msgstr ""
+
+#: chpasswd.8.xml:111(para)
+msgid ""
+"<phrase condition=\"pam\">Except when PAM is used to encrypt the passwords,</"
+"phrase><command>chpasswd</command> first updates all the passwords in "
+"memory, and then commits all the changes to disk if no errors occurred for "
+"any user."
+msgstr ""
+
+#: chpasswd.8.xml:117(para)
+msgid ""
+"When PAM is used to encrypt the passwords (and update the passwords in the "
+"system database) then if a password cannot be updated <command>chpasswd</"
+"command> continues updating the passwords of the next users, and will return "
+"an error code on exit."
+msgstr ""
+
+#: chpasswd.8.xml:123(para) chgpasswd.8.xml:98(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are created at a single time."
+msgstr ""
+
+#: chpasswd.8.xml:131(para)
+msgid "The options which apply to the <command>chpasswd</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>chpasswd</command> är:"
+
+#: chpasswd.8.xml:137(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-c</option>, <option>--comment</option>&nbsp;"
+#| "<replaceable>COMMENT</replaceable>"
+msgid ""
+"<option>-c</option>, <option>--crypt-method</option>&nbsp;"
+"<replaceable>METHOD</replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--comment</option>&nbsp;<replaceable>KOMMENTAR</"
+"replaceable>"
+
+#: chpasswd.8.xml:142(para) chgpasswd.8.xml:115(para)
+msgid "The available methods are DES, MD5, and NONE."
+msgstr ""
+
+#: chpasswd.8.xml:149(para)
+msgid "By default, PAM is used to encrypt the passwords."
+msgstr ""
+
+#: chpasswd.8.xml:152(para)
+msgid ""
+"By default (if none of the <option>-c</option>, <option>-m</option>, or "
+"<option>-e</option> options are specified), the encryption method is defined "
+"by the <option>ENCRYPT_METHOD</option> or <option>MD5_CRYPT_ENAB</option> "
+"variables of <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: chpasswd.8.xml:163(term) chgpasswd.8.xml:125(term)
+msgid "<option>-e</option>, <option>--encrypted</option>"
+msgstr "<option>-e</option>, <option>--encrypted</option>"
+
+#: chpasswd.8.xml:165(para) chgpasswd.8.xml:127(para)
+msgid "Supplied passwords are in encrypted form."
+msgstr "Insända lösenord är i ett krypterat format."
+
+#: chpasswd.8.xml:179(term) chgpasswd.8.xml:137(term)
+msgid "<option>-m</option>, <option>--md5</option>"
+msgstr "<option>-m</option>, <option>--md5</option>"
+
+#: chpasswd.8.xml:181(para) chgpasswd.8.xml:139(para)
+msgid ""
+"Use MD5 encryption instead of DES when the supplied passwords are not "
+"encrypted."
+msgstr ""
+"Använd MD5-kryptering istället för DES när insända lösenord inte är "
+"krypterade."
+
+#: chpasswd.8.xml:200(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-w</option>, <option>--warndays</option>&nbsp;"
+#| "<replaceable>WARN_DAYS</replaceable>"
+msgid ""
+"<option>-s</option>, <option>--sha-rounds</option>&nbsp;<replaceable>ROUNDS</"
+"replaceable>"
+msgstr ""
+"<option>-w</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>VARN_DAGAR</replaceable>"
+
+#: chpasswd.8.xml:219(para)
+msgid ""
+"By default, the number of rounds is defined by the "
+"<option>SHA_CRYPT_MIN_ROUNDS</option> and <option>SHA_CRYPT_MAX_ROUNDS</"
+"option> variables in <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: chpasswd.8.xml:232(para) chgpasswd.8.xml:187(para)
+msgid ""
+"Remember to set permissions or umask to prevent readability of unencrypted "
+"files by other users."
+msgstr ""
+"Kom ihåg att ställa in rättigheter eller umask för att förhindra läsning av "
+"okrypterade filer för andra användare."
+
+#: chpasswd.8.xml:276(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/pam.d/chpasswd"
+msgstr "/etc/passwd"
+
+#: chpasswd.8.xml:278(para)
+msgid "PAM configuration for <command>chpasswd</command>."
+msgstr ""
+
+#: chpasswd.8.xml:286(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>newusers</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<phrase><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: chgpasswd.8.xml:47(contrib)
+msgid "Creation, 2006"
+msgstr ""
+
+#: chgpasswd.8.xml:65(refpurpose)
+msgid "update group passwords in batch mode"
+msgstr "uppdatera grupplösenord i satsläge"
+
+#: chgpasswd.8.xml:79(para)
+#, fuzzy
+msgid ""
+"The <command>chgpasswd</command> command reads a list of group name and "
+"password pairs from standard input and uses this information to update a set "
+"of existing groups. Each line is of the format:"
+msgstr ""
+"<command>chgpasswd</command> läser en lista på gruppnamn och lösenordspar "
+"från standard in och använder denna information för att uppdatera en "
+"uppsättning redan existerande grupper. Varje rad är i formatet:"
+
+#: chgpasswd.8.xml:84(para)
+msgid ""
+"<emphasis remap=\"I\">group_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">gruppnamn</emphasis>:<emphasis remap=\"I\">lösenord</"
+"emphasis>"
+
+#: chgpasswd.8.xml:88(para)
+#, fuzzy
+msgid ""
+"By default the supplied password must be in clear-text, and is encrypted by "
+"<command>chgpasswd</command>."
+msgstr ""
+"Som standard måste det insända lösenordet vara i klartext. "
+"Standardkrypteringsalgoritmen är DES."
+
+#: chgpasswd.8.xml:92(para)
+msgid ""
+"The default encryption algorithm can be defined for the system with the "
+"<option>ENCRYPT_METHOD</option> variable of <filename>/etc/login.defs</"
+"filename>, and can be overwritten with the <option>-e</option>, <option>-m</"
+"option>, or <option>-c</option> options."
+msgstr ""
+
+#: chgpasswd.8.xml:106(para)
+msgid ""
+"The options which apply to the <command>chgpasswd</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>chgpasswd</command> är:"
+
+#: chgpasswd.8.xml:238(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: chfn.1.xml:68(refpurpose)
+msgid "change real user name and information"
+msgstr "ändra verkligt användarnamn och information"
+
+#: chfn.1.xml:85(para)
+msgid ""
+"The <command>chfn</command> command changes user fullname, office room "
+"number, office phone number, and home phone number information for a user's "
+"account. This information is typically printed by "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> and similar programs. A normal user may only change the fields "
+"for her own account, subject to the restrictions in <filename>/etc/login."
+"defs</filename>. (The default configuration is to prevent users from "
+"changing their fullname.) The superuser may change any field for any "
+"account. Additionally, only the superuser may use the <option>-o</option> "
+"option to change the undefined portions of the GECOS field."
+msgstr ""
+
+#: chfn.1.xml:99(para)
+msgid ""
+"These fields must not contain any colons. Except for the <emphasis remap=\"I"
+"\">other</emphasis> field, they should not contain any comma or equal sign. "
+"It is also recommended to avoid non-US-ASCII characters, but this is only "
+"enforced for the phone numbers. The <emphasis remap=\"I\">other</emphasis> "
+"field is used to store accounting information used by other applications."
+msgstr ""
+
+#: chfn.1.xml:112(para)
+#, fuzzy
+#| msgid "The options which apply to the <command>chsh</command> command are:"
+msgid "The options which apply to the <command>chfn</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>chsh</command> är:"
+
+#: chfn.1.xml:117(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+#| "replaceable>"
+msgid ""
+"<option>-f</option>, <option>--full-name</option>&nbsp;"
+"<replaceable>FULL_NAME</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option>&nbsp;"
+"<replaceable>INLOGGNINGSNAMN</replaceable>"
+
+#: chfn.1.xml:121(para)
+#, fuzzy
+#| msgid "Changing the default values"
+msgid "Change the user's full name."
+msgstr "Ändrar standardvärden"
+
+#: chfn.1.xml:125(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_DIR</"
+#| "replaceable>"
+msgid ""
+"<option>-h</option>, <option>--home-phone</option>&nbsp;"
+"<replaceable>HOME_PHONE</replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HEM_KAT</"
+"replaceable>"
+
+#: chfn.1.xml:129(para)
+msgid "Change the user's home phone number."
+msgstr ""
+
+#: chfn.1.xml:133(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_DIR</"
+#| "replaceable>"
+msgid ""
+"<option>-o</option>, <option>--other</option>&nbsp;<replaceable>OTHER</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HEM_KAT</"
+"replaceable>"
+
+#: chfn.1.xml:137(para)
+msgid ""
+"Change the user's other GECOS information. This field is used to store "
+"accounting information used by other applications, and can be changed only "
+"by a superuser."
+msgstr ""
+
+#: chfn.1.xml:145(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_DIR</"
+#| "replaceable>"
+msgid ""
+"<option>-r</option>, <option>--room</option>&nbsp;<replaceable>ROOM_NUMBER</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HEM_KAT</"
+"replaceable>"
+
+#: chfn.1.xml:149(para)
+msgid "Change the user's room number."
+msgstr ""
+
+#: chfn.1.xml:165(term)
+#, fuzzy
+#| msgid "<option>-h</option>, <option>--help</option>"
+msgid "<option>-u</option>, <option>--help</option>"
+msgstr "<option>-h</option>, <option>--help</option>"
+
+#: chfn.1.xml:173(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_DIR</"
+#| "replaceable>"
+msgid ""
+"<option>-w</option>, <option>--work-phone</option>&nbsp;"
+"<replaceable>WORK_PHONE</replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HEM_KAT</"
+"replaceable>"
+
+#: chfn.1.xml:177(para)
+msgid "Change the user's office phone number."
+msgstr ""
+
+#: chfn.1.xml:181(para)
+msgid ""
+"If none of the options are selected, <command>chfn</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis remap=\"B\">[ ]</emphasis> marks. Without options, <command>chfn</"
+"command> prompts for the current user account."
+msgstr ""
+
+#: chfn.1.xml:226(para)
+msgid ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: chage.1.xml:66(refpurpose)
+msgid "change user password expiry information"
+msgstr "ändra åldringsinformation för användarlösenord"
+
+#: 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 their password."
+msgstr ""
+
+#: chage.1.xml:92(para)
+msgid "The options which apply to the <command>chage</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>chage</command> är:"
+
+#: chage.1.xml:97(term)
+msgid ""
+"<option>-d</option>, <option>--lastday</option>&nbsp;<replaceable>LAST_DAY</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--lastday</option>&nbsp;<replaceable>SISTA_DAG</"
+"replaceable>"
+
+#: chage.1.xml:101(para)
+msgid ""
+"Set the number of days since January 1st, 1970 when the password was last "
+"changed. The date may also be expressed in the format YYYY-MM-DD (or the "
+"format more commonly used in your area)."
+msgstr ""
+
+#: chage.1.xml:109(term)
+msgid ""
+"<option>-E</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>EXPIRE_DATE</replaceable>"
+msgstr ""
+"<option>-E</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>UTGÅNGSDATUM</replaceable>"
+
+#: chage.1.xml:113(para)
+msgid ""
+"Set the date or number of days since January 1, 1970 on which the user's "
+"account will no longer be accessible. The date may also be expressed in the "
+"format YYYY-MM-DD (or the format more commonly used in your area). A user "
+"whose account is locked must contact the system administrator before being "
+"able to use the system again."
+msgstr ""
+
+#: chage.1.xml:121(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>EXPIRE_DATE</replaceable> will remove an account expiration "
+"date."
+msgstr ""
+
+#: chage.1.xml:135(term)
+#, fuzzy
+#| msgid "<option>-s</option>, <option>--shadow</option>"
+msgid "<option>-i</option>, <option>--iso8601</option>"
+msgstr "<option>-s</option>, <option>--shadow</option>"
+
+#: chage.1.xml:137(para)
+msgid "When printing dates, use YYYY-MM-DD format."
+msgstr ""
+
+#: chage.1.xml:141(term)
+msgid ""
+"<option>-I</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-I</option>, <option>--inactive</option>&nbsp;<replaceable>INAKTIV</"
+"replaceable>"
+
+#: chage.1.xml:145(para)
+msgid ""
+"Set the number of days of inactivity after a password has expired before the "
+"account is locked. The <replaceable>INACTIVE</replaceable> option is the "
+"number of days of inactivity. A user whose account is locked must contact "
+"the system administrator before being able to use the system again."
+msgstr ""
+
+#: chage.1.xml:152(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>INACTIVE</replaceable> will remove an account's inactivity."
+msgstr ""
+
+#: chage.1.xml:164(para)
+msgid "Show account aging information."
+msgstr "Visa kontots åldringsinformation"
+
+#: chage.1.xml:170(term)
+msgid ""
+"<option>-m</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DAGAR</"
+"replaceable>"
+
+#: chage.1.xml:182(term)
+msgid ""
+"<option>-M</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-M</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DAGAR</"
+"replaceable>"
+
+#: chage.1.xml:186(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 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:215(term)
+msgid ""
+"<option>-W</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>WARN_DAYS</replaceable>"
+msgstr ""
+"<option>-W</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>VARN_DAGAR</replaceable>"
+
+#: chage.1.xml:219(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 their password is about to "
+"expire."
+msgstr ""
+
+#: chage.1.xml:228(para)
+msgid ""
+"If none of the options are selected, <command>chage</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis>[ ]</emphasis> marks."
+msgstr ""
+
+#: chage.1.xml:238(para)
+msgid ""
+"The <command>chage</command> program requires a shadow password file to be "
+"available."
+msgstr ""
+"Programmet <command>chage</command> kräver att en skugglösenordsfil finns "
+"tillgänglig."
+
+#: chage.1.xml:242(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 their password or account is due to expire."
+msgstr ""
+
+#: chage.1.xml:307(replaceable)
+msgid "15"
+msgstr "15"
+
+#: chage.1.xml:309(para)
+msgid "can't find the shadow password file"
+msgstr "kan inte hitta skugglösenordsfilen"
+
+#: chage.1.xml:285(para)
+msgid ""
+"The <command>chage</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Kommandot <command>chage</command> avslutas med följande värden: "
+"<placeholder-1/>"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
+#: chage.1.xml:0(None)
+msgid "translator-credits"
+msgstr "Daniel Nylander <po@danielnylander.se>, 2006."
+
+#~ msgid ""
+#~ "You can use the <option>--</option> argument to separate <command>su</"
+#~ "command> options from the arguments supplied to the shell."
+#~ msgstr ""
+#~ "Du kan använda argumentet <option>--</option> för att separera flaggorna "
+#~ "till <command>su</command> från de argument som skickas till skalet."
+
+#, fuzzy
+#~| msgid "-"
+#~ msgid "-M"
+#~ msgstr "-"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "can't create mail spool"
+#~ msgstr "kan inte skapa postkö"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "-q"
+#~ msgstr "-q"
+
+#~ msgid "-s"
+#~ msgstr "-s"
+
+#, fuzzy
+#~| msgid ""
+#~| "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~| "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, <phrase condition="
+#~ "\"no_pam\"><citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+#~ "phrase><citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid "new_users"
+#~ msgstr "nya_användare"
+
+#~ msgid "full_name"
+#~ msgstr "fullständigt_namn"
+
+#~ msgid "-f <placeholder-1/>"
+#~ msgstr "-f <placeholder-1/>"
+
+#~ msgid "room_no"
+#~ msgstr "rumsnummer"
+
+#~ msgid "work_ph"
+#~ msgstr "arbetstelefon"
+
+#~ msgid "-w <placeholder-1/>"
+#~ msgstr "-w <placeholder-1/>"
+
+#~ msgid "home_ph"
+#~ msgstr "hemtelefon"
+
+#~ msgid "other"
+#~ msgstr "övrigt"
+
+#~ msgid "-o <placeholder-1/>"
+#~ msgstr "-o <placeholder-1/>"
+
+#, fuzzy
+#~| msgid ""
+#~| "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~| "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~| "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>pam</"
+#~| "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>group</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+#~ "condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pam</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>group</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>group</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "Note: <option>-K</option>&nbsp;<replaceable>UID_MIN</"
+#~ "replaceable>=<replaceable>10</replaceable>,<replaceable>UID_MAX</"
+#~ "replaceable>=<replaceable>499</replaceable> doesn't work yet."
+#~ msgstr ""
+#~ "Notera: <option>-K</option>&nbsp;<replaceable>UID_MIN</"
+#~ "replaceable>=<replaceable>10</replaceable>,<replaceable>UID_MAX</"
+#~ "replaceable>=<replaceable>499</replaceable> fungerar ännu inte."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE"
+#~ msgstr "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE"
+
+#, fuzzy
+#~| msgid "Supplied passwords are in encrypted form."
+#~ msgid "The supplied passwords must be in clear-text."
+#~ msgstr "Insända lösenord är i ett krypterat format."
+
+#, fuzzy
+#~ msgid "and <placeholder-1/> files"
+#~ msgstr "-a <placeholder-1/>"
+
+#~ msgid "encrypted password file"
+#~ msgstr "krypterad lösenordsfil"
+
+#~ msgid "comma-separated list of group administrators"
+#~ msgstr "kommaseparerad lista med gruppadministratörer"
+
+#~ msgid "days since Jan 1, 1970 that password was last changed"
+#~ msgstr "dagar sedan 1:a januari, 1970 som lösenordet senast ändrades"
+
+#~ msgid "days after which password must be changed"
+#~ msgstr "dagar efter vilket lösenordet måste ändras"
+
+#~ msgid "days before password is to expire that user is warned"
+#~ msgstr "dagar innan lösenordet går ut som användaren varnas"
+
+#~ msgid "days after password expires that account is disabled"
+#~ msgstr "dagar efter att lösenordet gått ut och kontot inaktiveras"
+
+#~ msgid "days since Jan 1, 1970 that account is disabled"
+#~ msgstr "dagar sedan 1:a januari 1970 som kontot är inaktiverat"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>getent</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>getpwnam</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>getent</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>getpwnam</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+
+#, fuzzy
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "-a"
+#~ msgstr "-a"
+
+#~ msgid "-d"
+#~ msgstr "-d"
+
+#~ msgid "-g"
+#~ msgstr "-g"
+
+#~ msgid "GID"
+#~ msgstr "GID"
+
+#~ msgid "-o"
+#~ msgstr "-o"
+
+#~ msgid "KEY"
+#~ msgstr "NYCKEL"
+
+#~ msgid "VALUE"
+#~ msgstr "VÄRDE"
+
+#~ msgid "-K <placeholder-1/>=<placeholder-2/>"
+#~ msgstr "-K <placeholder-1/>=<placeholder-2/>"
+
+#, fuzzy
+#~ msgid "-R"
+#~ msgstr "-"
+
+#, fuzzy
+#~ msgid "<option>-A</option>&nbsp;<replaceable>user</replaceable>,..."
+#~ msgstr ""
+#~ "<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+#~ "replaceable>"
+
+#, fuzzy
+#~ msgid "<option>-M</option>&nbsp;<replaceable>user</replaceable>,..."
+#~ msgstr ""
+#~ "<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+#~ "replaceable>"
+
+#~ msgid ""
+#~ "Your password must be easily remembered so that you will not be forced to "
+#~ "write it on a piece of paper. This can be accomplished by appending two "
+#~ "small words together and separating each with a special character or "
+#~ "digit. For example, Pass%word."
+#~ msgstr ""
+#~ "Ditt lösenord måste vara lätt att komma ihåg så att du inte behöver "
+#~ "skriva ner det på en papperslapp. Detta kan göras genom att lägga till "
+#~ "två små ord tillsammans och separera dem med ett specialtecken eller "
+#~ "siffra. Till exempel, Pass%word."
+
+#~ msgid ""
+#~ "Other methods of construction involve selecting an easily remembered "
+#~ "phrase from literature and selecting the first or last letter from each "
+#~ "word. An example of this is:"
+#~ msgstr ""
+#~ "Andra metoder för att konstruera lösenord är att välja en literär fras "
+#~ "som är lätt att komma ihåg och välja den första eller sista bokstaven "
+#~ "från varje ord. Ett exempel på detta är:"
+
+#~ msgid "Ask not for whom the bell tolls"
+#~ msgstr "Fråga inte för vem klockorna ringer klockan 3"
+
+#~ msgid "which produces"
+#~ msgstr "som blir"
+
+#~ msgid "An4wtbt"
+#~ msgstr "Fifvkrk3"
+
+#~ msgid ""
+#~ "You may be reasonably sure few crackers will have included this in their "
+#~ "dictionaries. You should, however, select your own methods for "
+#~ "constructing passwords and not rely exclusively on the methods given here."
+#~ msgstr ""
+#~ "Du kan vara hyffsat säker på att få hackare har inkluderat detta i sina "
+#~ "ordböcker. Du bör dock välja dina egna metoder för att konstruera "
+#~ "lösenord och inte enbart förlita dig på de metoder som anges här."
+
+#~ msgid ""
+#~ "The <option>-t</option> flag overrides the use of <option>-u</option>."
+#~ msgstr ""
+#~ "Flaggan <option>-t</option> åsidosätter användningen av <option>-u</"
+#~ "option>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid "MAIL_DIR USERDEL_CMD"
+#~ msgstr "MAIL_DIR USERDEL_CMD"
+
+#~ msgid "MAIL_DIR"
+#~ msgstr "MAIL_DIR"
+
+#~ msgid "CHFN_AUTH"
+#~ msgstr "CHFN_AUTH"
+
+#~ msgid "GID_MAX GID_MIN"
+#~ msgstr "GID_MAX GID_MIN"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>newusers</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>newusers</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid "-R <placeholder-1/>"
+#~ msgstr "-R <placeholder-1/>"
+
+#~ msgid "user,"
+#~ msgstr "användare,"
+
+#~ msgid "-A <placeholder-1/>"
+#~ msgstr "-A <placeholder-1/>"
+
+#~ msgid "-M <placeholder-1/>"
+#~ msgstr "-M <placeholder-1/>"
diff --git a/man/po/zh_CN.po b/man/po/zh_CN.po
new file mode 100644
index 0000000..2537807
--- /dev/null
+++ b/man/po/zh_CN.po
@@ -0,0 +1,9679 @@
+#
+# YunQiang Su <wzssyqa@gmail.com>, 2010, 2011, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow-man-pages VERSION\n"
+"POT-Creation-Date: 2020-01-23 15:00-0600\n"
+"PO-Revision-Date: 2013-08-23 01:42+0200\n"
+"Last-Translator: YunQiang Su <wzssyqa@gmail.com>\n"
+"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bits\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: vipw.8.xml:41(firstname) suauth.5.xml:39(firstname)
+#: pwconv.8.xml:45(firstname) login.access.5.xml:40(firstname)
+msgid "Marek"
+msgstr ""
+
+#: vipw.8.xml:42(surname) suauth.5.xml:40(surname) pwconv.8.xml:46(surname)
+#: login.access.5.xml:41(surname)
+msgid "Michałkiewicz"
+msgstr ""
+
+#: vipw.8.xml:43(contrib) limits.5.xml:43(contrib)
+msgid "Creation, 1997"
+msgstr ""
+
+#: vipw.8.xml:46(firstname) usermod.8.xml:51(firstname)
+#: userdel.8.xml:50(firstname) useradd.8.xml:63(firstname)
+#: suauth.5.xml:44(firstname) su.1.xml:61(firstname) sg.1.xml:45(firstname)
+#: shadow.5.xml:44(firstname) shadow.3.xml:44(firstname)
+#: pwconv.8.xml:50(firstname) pwck.8.xml:50(firstname)
+#: porttime.5.xml:44(firstname) passwd.5.xml:44(firstname)
+#: passwd.1.xml:51(firstname) newusers.8.xml:60(firstname)
+#: newgrp.1.xml:45(firstname) logoutd.8.xml:44(firstname)
+#: login.defs.5.xml:111(firstname) login.access.5.xml:45(firstname)
+#: login.1.xml:77(firstname) limits.5.xml:46(firstname)
+#: lastlog.8.xml:46(firstname) grpck.8.xml:45(firstname)
+#: groups.1.xml:44(firstname) groupmod.8.xml:45(firstname)
+#: groupmems.8.xml:48(firstname) groupdel.8.xml:45(firstname)
+#: groupadd.8.xml:47(firstname) gpasswd.1.xml:49(firstname)
+#: faillog.8.xml:44(firstname) faillog.5.xml:44(firstname)
+#: expiry.1.xml:48(firstname) chsh.1.xml:47(firstname)
+#: chpasswd.8.xml:48(firstname) chgpasswd.8.xml:44(firstname)
+#: chfn.1.xml:47(firstname) chage.1.xml:45(firstname)
+msgid "Thomas"
+msgstr ""
+
+#: vipw.8.xml:47(surname) usermod.8.xml:52(surname) userdel.8.xml:51(surname)
+#: useradd.8.xml:64(surname) suauth.5.xml:45(surname) su.1.xml:62(surname)
+#: sg.1.xml:46(surname) shadow.5.xml:45(surname) shadow.3.xml:45(surname)
+#: pwconv.8.xml:51(surname) pwck.8.xml:51(surname) porttime.5.xml:45(surname)
+#: passwd.5.xml:45(surname) passwd.1.xml:52(surname) newusers.8.xml:61(surname)
+#: newgrp.1.xml:46(surname) logoutd.8.xml:45(surname)
+#: login.defs.5.xml:112(surname) login.access.5.xml:46(surname)
+#: login.1.xml:78(surname) limits.5.xml:47(surname) lastlog.8.xml:47(surname)
+#: grpck.8.xml:46(surname) groups.1.xml:45(surname) groupmod.8.xml:46(surname)
+#: groupmems.8.xml:49(surname) groupdel.8.xml:46(surname)
+#: groupadd.8.xml:48(surname) gpasswd.1.xml:50(surname)
+#: faillog.8.xml:45(surname) faillog.5.xml:45(surname) expiry.1.xml:49(surname)
+#: chsh.1.xml:48(surname) chpasswd.8.xml:49(surname)
+#: chgpasswd.8.xml:45(surname) chfn.1.xml:48(surname) chage.1.xml:46(surname)
+msgid "Kłoczko"
+msgstr ""
+
+#: vipw.8.xml:48(email) usermod.8.xml:53(email) userdel.8.xml:52(email)
+#: useradd.8.xml:65(email) suauth.5.xml:46(email) su.1.xml:63(email)
+#: sg.1.xml:47(email) shadow.5.xml:46(email) shadow.3.xml:46(email)
+#: pwconv.8.xml:52(email) pwck.8.xml:52(email) porttime.5.xml:46(email)
+#: passwd.5.xml:46(email) passwd.1.xml:53(email) newusers.8.xml:62(email)
+#: newgrp.1.xml:47(email) logoutd.8.xml:46(email) login.defs.5.xml:113(email)
+#: login.access.5.xml:47(email) login.1.xml:79(email) limits.5.xml:48(email)
+#: lastlog.8.xml:48(email) grpck.8.xml:47(email) groups.1.xml:46(email)
+#: groupmod.8.xml:47(email) groupmems.8.xml:50(email) groupdel.8.xml:47(email)
+#: groupadd.8.xml:49(email) gpasswd.1.xml:51(email) faillog.8.xml:46(email)
+#: faillog.5.xml:46(email) expiry.1.xml:50(email) chsh.1.xml:49(email)
+#: chpasswd.8.xml:50(email) chgpasswd.8.xml:46(email) chfn.1.xml:49(email)
+#: chage.1.xml:47(email)
+msgid "kloczek@pld.org.pl"
+msgstr ""
+
+#: vipw.8.xml:49(contrib) usermod.8.xml:54(contrib) userdel.8.xml:53(contrib)
+#: useradd.8.xml:66(contrib) suauth.5.xml:47(contrib) su.1.xml:64(contrib)
+#: sg.1.xml:48(contrib) shadow.5.xml:47(contrib) shadow.3.xml:47(contrib)
+#: pwconv.8.xml:53(contrib) pwck.8.xml:53(contrib) porttime.5.xml:47(contrib)
+#: passwd.5.xml:47(contrib) passwd.1.xml:54(contrib) newusers.8.xml:63(contrib)
+#: newgrp.1.xml:48(contrib) logoutd.8.xml:47(contrib)
+#: login.defs.5.xml:114(contrib) login.access.5.xml:48(contrib)
+#: login.1.xml:80(contrib) limits.5.xml:49(contrib) lastlog.8.xml:49(contrib)
+#: grpck.8.xml:48(contrib) groups.1.xml:47(contrib) groupmod.8.xml:48(contrib)
+#: groupmems.8.xml:51(contrib) groupdel.8.xml:48(contrib)
+#: groupadd.8.xml:50(contrib) gpasswd.1.xml:52(contrib)
+#: faillog.8.xml:47(contrib) faillog.5.xml:47(contrib) expiry.1.xml:51(contrib)
+#: chsh.1.xml:50(contrib) chpasswd.8.xml:51(contrib) chfn.1.xml:50(contrib)
+#: chage.1.xml:48(contrib)
+msgid "shadow-utils maintainer, 2000 - 2007"
+msgstr ""
+
+#: vipw.8.xml:52(firstname) usermod.8.xml:57(firstname)
+#: userdel.8.xml:56(firstname) useradd.8.xml:69(firstname)
+#: suauth.5.xml:50(firstname) su.1.xml:67(firstname) sg.1.xml:51(firstname)
+#: shadow.5.xml:50(firstname) shadow.3.xml:50(firstname)
+#: pwconv.8.xml:56(firstname) pwck.8.xml:56(firstname)
+#: porttime.5.xml:50(firstname) passwd.5.xml:50(firstname)
+#: passwd.1.xml:57(firstname) nologin.8.xml:39(firstname)
+#: newusers.8.xml:66(firstname) newgrp.1.xml:51(firstname)
+#: logoutd.8.xml:50(firstname) login.defs.5.xml:117(firstname)
+#: login.access.5.xml:51(firstname) login.1.xml:83(firstname)
+#: limits.5.xml:52(firstname) lastlog.8.xml:52(firstname)
+#: gshadow.5.xml:38(firstname) grpck.8.xml:51(firstname)
+#: groups.1.xml:50(firstname) groupmod.8.xml:51(firstname)
+#: groupmems.8.xml:54(firstname) groupdel.8.xml:51(firstname)
+#: groupadd.8.xml:53(firstname) gpasswd.1.xml:55(firstname)
+#: faillog.8.xml:50(firstname) faillog.5.xml:50(firstname)
+#: expiry.1.xml:54(firstname) chsh.1.xml:53(firstname)
+#: chpasswd.8.xml:54(firstname) chgpasswd.8.xml:50(firstname)
+#: chfn.1.xml:53(firstname) chage.1.xml:51(firstname)
+msgid "Nicolas"
+msgstr ""
+
+#: vipw.8.xml:53(surname) usermod.8.xml:58(surname) userdel.8.xml:57(surname)
+#: useradd.8.xml:70(surname) suauth.5.xml:51(surname) su.1.xml:68(surname)
+#: sg.1.xml:52(surname) shadow.5.xml:51(surname) shadow.3.xml:51(surname)
+#: pwconv.8.xml:57(surname) pwck.8.xml:57(surname) porttime.5.xml:51(surname)
+#: passwd.5.xml:51(surname) passwd.1.xml:58(surname) nologin.8.xml:40(surname)
+#: newusers.8.xml:67(surname) newgrp.1.xml:52(surname)
+#: logoutd.8.xml:51(surname) login.defs.5.xml:118(surname)
+#: login.access.5.xml:52(surname) login.1.xml:84(surname)
+#: limits.5.xml:53(surname) lastlog.8.xml:53(surname) gshadow.5.xml:39(surname)
+#: grpck.8.xml:52(surname) groups.1.xml:51(surname) groupmod.8.xml:52(surname)
+#: groupmems.8.xml:55(surname) groupdel.8.xml:52(surname)
+#: groupadd.8.xml:54(surname) gpasswd.1.xml:56(surname)
+#: faillog.8.xml:51(surname) faillog.5.xml:51(surname) expiry.1.xml:55(surname)
+#: chsh.1.xml:54(surname) chpasswd.8.xml:55(surname)
+#: chgpasswd.8.xml:51(surname) chfn.1.xml:54(surname) chage.1.xml:52(surname)
+msgid "François"
+msgstr ""
+
+#: vipw.8.xml:54(email) usermod.8.xml:59(email) userdel.8.xml:58(email)
+#: useradd.8.xml:71(email) suauth.5.xml:52(email) su.1.xml:69(email)
+#: sg.1.xml:53(email) shadow.5.xml:52(email) shadow.3.xml:52(email)
+#: pwconv.8.xml:58(email) pwck.8.xml:58(email) porttime.5.xml:52(email)
+#: passwd.5.xml:52(email) passwd.1.xml:59(email) nologin.8.xml:41(email)
+#: newusers.8.xml:68(email) newgrp.1.xml:53(email) logoutd.8.xml:52(email)
+#: login.defs.5.xml:119(email) login.access.5.xml:53(email)
+#: login.1.xml:85(email) limits.5.xml:54(email) lastlog.8.xml:54(email)
+#: gshadow.5.xml:40(email) grpck.8.xml:53(email) groups.1.xml:52(email)
+#: groupmod.8.xml:53(email) groupmems.8.xml:56(email) groupdel.8.xml:53(email)
+#: groupadd.8.xml:55(email) gpasswd.1.xml:57(email) faillog.8.xml:52(email)
+#: faillog.5.xml:52(email) expiry.1.xml:56(email) chsh.1.xml:55(email)
+#: chpasswd.8.xml:56(email) chgpasswd.8.xml:52(email) chfn.1.xml:55(email)
+#: chage.1.xml:53(email)
+msgid "nicolas.francois@centraliens.net"
+msgstr ""
+
+#: vipw.8.xml:55(contrib) usermod.8.xml:60(contrib) userdel.8.xml:59(contrib)
+#: useradd.8.xml:72(contrib) suauth.5.xml:53(contrib) su.1.xml:70(contrib)
+#: sg.1.xml:54(contrib) shadow.5.xml:53(contrib) shadow.3.xml:53(contrib)
+#: pwconv.8.xml:59(contrib) pwck.8.xml:59(contrib) porttime.5.xml:53(contrib)
+#: passwd.5.xml:53(contrib) passwd.1.xml:60(contrib) nologin.8.xml:42(contrib)
+#: newusers.8.xml:69(contrib) newgrp.1.xml:54(contrib)
+#: logoutd.8.xml:53(contrib) login.defs.5.xml:120(contrib)
+#: login.access.5.xml:54(contrib) login.1.xml:86(contrib)
+#: limits.5.xml:55(contrib) lastlog.8.xml:55(contrib) gshadow.5.xml:42(contrib)
+#: grpck.8.xml:54(contrib) groups.1.xml:53(contrib) groupmod.8.xml:54(contrib)
+#: groupmems.8.xml:57(contrib) groupdel.8.xml:54(contrib)
+#: groupadd.8.xml:56(contrib) gpasswd.1.xml:58(contrib)
+#: faillog.8.xml:53(contrib) faillog.5.xml:53(contrib) expiry.1.xml:57(contrib)
+#: chsh.1.xml:56(contrib) chpasswd.8.xml:57(contrib)
+#: chgpasswd.8.xml:53(contrib) chfn.1.xml:56(contrib) chage.1.xml:54(contrib)
+msgid "shadow-utils maintainer, 2007 - now"
+msgstr ""
+
+#: vipw.8.xml:59(refentrytitle) vipw.8.xml:66(refname) vipw.8.xml:75(command)
+#: login.defs.5.xml:520(term)
+msgid "vipw"
+msgstr "vipw"
+
+#: vipw.8.xml:60(manvolnum) usermod.8.xml:65(manvolnum)
+#: userdel.8.xml:64(manvolnum) userdel.8.xml:276(replaceable)
+#: useradd.8.xml:77(manvolnum) pwconv.8.xml:64(manvolnum)
+#: pwck.8.xml:64(manvolnum) nologin.8.xml:47(manvolnum)
+#: newusers.8.xml:74(manvolnum) logoutd.8.xml:58(manvolnum)
+#: lastlog.8.xml:60(manvolnum) grpck.8.xml:59(manvolnum)
+#: groupmod.8.xml:59(manvolnum) groupmems.8.xml:62(manvolnum)
+#: groupdel.8.xml:59(manvolnum) groupdel.8.xml:198(replaceable)
+#: groupadd.8.xml:61(manvolnum) faillog.8.xml:58(manvolnum)
+#: faillog.5.xml:111(manvolnum) chpasswd.8.xml:62(manvolnum)
+#: chgpasswd.8.xml:58(manvolnum)
+msgid "8"
+msgstr "8"
+
+#: vipw.8.xml:61(refmiscinfo) usermod.8.xml:66(refmiscinfo)
+#: userdel.8.xml:65(refmiscinfo) useradd.8.xml:78(refmiscinfo)
+#: pwconv.8.xml:65(refmiscinfo) pwck.8.xml:65(refmiscinfo)
+#: nologin.8.xml:48(refmiscinfo) newusers.8.xml:75(refmiscinfo)
+#: logoutd.8.xml:59(refmiscinfo) lastlog.8.xml:61(refmiscinfo)
+#: grpck.8.xml:60(refmiscinfo) groupmod.8.xml:60(refmiscinfo)
+#: groupmems.8.xml:63(refmiscinfo) groupdel.8.xml:60(refmiscinfo)
+#: groupadd.8.xml:62(refmiscinfo) faillog.8.xml:59(refmiscinfo)
+#: chpasswd.8.xml:63(refmiscinfo) chgpasswd.8.xml:59(refmiscinfo)
+msgid "System Management Commands"
+msgstr "系统管理命令"
+
+#: vipw.8.xml:62(refmiscinfo) usermod.8.xml:67(refmiscinfo)
+#: userdel.8.xml:66(refmiscinfo) useradd.8.xml:79(refmiscinfo)
+#: suauth.5.xml:60(refmiscinfo) su.1.xml:77(refmiscinfo)
+#: sg.1.xml:61(refmiscinfo) shadow.5.xml:60(refmiscinfo)
+#: shadow.3.xml:60(refmiscinfo) pwconv.8.xml:66(refmiscinfo)
+#: pwck.8.xml:66(refmiscinfo) porttime.5.xml:60(refmiscinfo)
+#: passwd.5.xml:60(refmiscinfo) passwd.1.xml:67(refmiscinfo)
+#: nologin.8.xml:49(refmiscinfo) newusers.8.xml:76(refmiscinfo)
+#: newgrp.1.xml:61(refmiscinfo) logoutd.8.xml:60(refmiscinfo)
+#: login.defs.5.xml:127(refmiscinfo) login.access.5.xml:61(refmiscinfo)
+#: login.1.xml:93(refmiscinfo) limits.5.xml:62(refmiscinfo)
+#: lastlog.8.xml:62(refmiscinfo) gshadow.5.xml:49(refmiscinfo)
+#: grpck.8.xml:61(refmiscinfo) groups.1.xml:60(refmiscinfo)
+#: groupmod.8.xml:61(refmiscinfo) groupmems.8.xml:64(refmiscinfo)
+#: groupdel.8.xml:61(refmiscinfo) groupadd.8.xml:63(refmiscinfo)
+#: gpasswd.1.xml:65(refmiscinfo) faillog.8.xml:60(refmiscinfo)
+#: faillog.5.xml:60(refmiscinfo) expiry.1.xml:64(refmiscinfo)
+#: chsh.1.xml:63(refmiscinfo) chpasswd.8.xml:64(refmiscinfo)
+#: chgpasswd.8.xml:60(refmiscinfo) chfn.1.xml:63(refmiscinfo)
+#: chage.1.xml:61(refmiscinfo)
+msgid "shadow-utils"
+msgstr "shadow-utils"
+
+#: vipw.8.xml:67(refname) vipw.8.xml:81(command)
+msgid "vigr"
+msgstr "vigr"
+
+#: vipw.8.xml:68(refpurpose)
+msgid "edit the password, group, shadow-password or shadow-group file"
+msgstr "编辑密码、组、影子密码或影子组文件。"
+
+#: vipw.8.xml:77(replaceable) vipw.8.xml:83(replaceable)
+#: usermod.8.xml:79(replaceable) userdel.8.xml:76(arg)
+#: useradd.8.xml:90(replaceable) useradd.8.xml:102(replaceable)
+#: su.1.xml:88(replaceable) pwconv.8.xml:81(replaceable)
+#: pwconv.8.xml:87(replaceable) pwconv.8.xml:93(replaceable)
+#: pwconv.8.xml:99(replaceable) pwck.8.xml:77(arg) passwd.1.xml:79(replaceable)
+#: newusers.8.xml:88(replaceable) lastlog.8.xml:74(replaceable)
+#: grpck.8.xml:72(arg) groupmod.8.xml:73(replaceable)
+#: groupdel.8.xml:73(replaceable) groupadd.8.xml:75(replaceable)
+#: faillog.8.xml:72(replaceable) chsh.1.xml:75(replaceable)
+#: chpasswd.8.xml:76(replaceable) chgpasswd.8.xml:72(replaceable)
+#: chfn.1.xml:75(replaceable) chage.1.xml:72(replaceable)
+msgid "options"
+msgstr "选项"
+
+#: vipw.8.xml:89(title) usermod.8.xml:86(title) userdel.8.xml:84(title)
+#: useradd.8.xml:108(title) suauth.5.xml:75(title) su.1.xml:103(title)
+#: sg.1.xml:81(title) shadow.5.xml:69(title) shadow.3.xml:118(title)
+#: shadow.3.xml:174(title) pwconv.8.xml:105(title) pwck.8.xml:92(title)
+#: porttime.5.xml:69(title) passwd.5.xml:69(title) passwd.1.xml:88(title)
+#: nologin.8.xml:64(title) newusers.8.xml:97(title) newgrp.1.xml:77(title)
+#: logoutd.8.xml:75(title) login.defs.5.xml:136(title)
+#: login.access.5.xml:70(title) login.1.xml:125(title) limits.5.xml:72(title)
+#: lastlog.8.xml:80(title) gshadow.5.xml:58(title) grpck.8.xml:83(title)
+#: groups.1.xml:78(title) groupmod.8.xml:80(title) groupmems.8.xml:85(title)
+#: groupdel.8.xml:80(title) groupadd.8.xml:84(title) gpasswd.1.xml:94(title)
+#: faillog.8.xml:78(title) faillog.5.xml:69(title) expiry.1.xml:82(title)
+#: chsh.1.xml:84(title) chpasswd.8.xml:82(title) chgpasswd.8.xml:78(title)
+#: chfn.1.xml:84(title) chage.1.xml:81(title)
+msgid "DESCRIPTION"
+msgstr "描述"
+
+#: vipw.8.xml:90(para)
+msgid ""
+"The <command>vipw</command> and <command>vigr</command> commands edits the "
+"files <filename>/etc/passwd</filename> and <filename>/etc/group</filename>, "
+"respectively. With the <option>-s</option> flag, they will edit the shadow "
+"versions of those files, <filename>/etc/shadow</filename> and <filename>/etc/"
+"gshadow</filename>, respectively. The programs will set the appropriate "
+"locks to prevent file corruption. When looking for an editor, the programs "
+"will first try the environment variable <envar>$VISUAL</envar>, then the "
+"environment variable <envar>$EDITOR</envar>, and finally the default editor, "
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<command>vipw</command> 和 <command>vigr</command> 命令分别编辑 <filename>/"
+"etc/passwd</filename> 和 <filename>/etc/group</filename> 文件。使用 <option>-"
+"s</option> 标识时,将编辑这些文件的影子版,即分别为 <filename>/etc/shadow</"
+"filename> 和 <filename>/etc/gshadow</filename>。这些程序将设置相应的锁,以防"
+"止文件损坏。寻找编辑器时,首先尝试环境变量 <envar>$VISUAL</envar>,然后是环境"
+"变量 <envar>$EDITOR</envar>,最后是默认编辑器 "
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>。"
+
+#: vipw.8.xml:107(title) usermod.8.xml:94(title) userdel.8.xml:93(title)
+#: useradd.8.xml:126(title) su.1.xml:144(title) pwconv.8.xml:187(title)
+#: pwck.8.xml:176(title) passwd.1.xml:174(title) newusers.8.xml:266(title)
+#: login.1.xml:210(title) lastlog.8.xml:92(title) grpck.8.xml:147(title)
+#: groupmod.8.xml:89(title) groupmems.8.xml:100(title) groupdel.8.xml:88(title)
+#: groupadd.8.xml:93(title) gpasswd.1.xml:134(title) faillog.8.xml:89(title)
+#: expiry.1.xml:91(title) chsh.1.xml:95(title) chpasswd.8.xml:130(title)
+#: chgpasswd.8.xml:105(title) chfn.1.xml:111(title) chage.1.xml:91(title)
+msgid "OPTIONS"
+msgstr "选项"
+
+#: vipw.8.xml:108(para)
+msgid ""
+"The options which apply to the <command>vipw</command> and <command>vigr</"
+"command> commands are:"
+msgstr ""
+"<command>vipw</command> 和 <command>vigr</command> 命令可以接受的选项有:"
+
+#: vipw.8.xml:114(term)
+msgid "<option>-g</option>, <option>--group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+#: vipw.8.xml:116(para)
+msgid "Edit group database."
+msgstr "编辑 group 数据库。"
+
+#: vipw.8.xml:120(term) userdel.8.xml:123(term) useradd.8.xml:278(term)
+#: pwconv.8.xml:195(term) pwck.8.xml:196(term) passwd.1.xml:214(term)
+#: newusers.8.xml:296(term) lastlog.8.xml:119(term) grpck.8.xml:157(term)
+#: groupmod.8.xml:129(term) groupmems.8.xml:142(term) groupdel.8.xml:95(term)
+#: groupadd.8.xml:131(term) gpasswd.1.xml:173(term) faillog.8.xml:122(term)
+#: expiry.1.xml:112(term) chsh.1.xml:101(term) chpasswd.8.xml:171(term)
+#: chgpasswd.8.xml:131(term) chage.1.xml:129(term)
+msgid "<option>-h</option>, <option>--help</option>"
+msgstr "<option>-h</option>, <option>--help</option>"
+
+#: vipw.8.xml:122(para) userdel.8.xml:125(para) useradd.8.xml:280(para)
+#: pwconv.8.xml:197(para) pwck.8.xml:198(para) passwd.1.xml:216(para)
+#: newusers.8.xml:298(para) lastlog.8.xml:123(para) grpck.8.xml:159(para)
+#: groupmod.8.xml:131(para) groupmems.8.xml:144(para) groupdel.8.xml:97(para)
+#: groupadd.8.xml:133(para) gpasswd.1.xml:175(para) faillog.8.xml:124(para)
+#: expiry.1.xml:114(para) chsh.1.xml:103(para) chpasswd.8.xml:173(para)
+#: chgpasswd.8.xml:133(para) chfn.1.xml:169(para) chage.1.xml:131(para)
+msgid "Display help message and exit."
+msgstr "现实帮助信息并退出。"
+
+#: vipw.8.xml:126(term)
+msgid "<option>-p</option>, <option>--passwd</option>"
+msgstr "<option>-p</option>, <option>--passwd</option>"
+
+#: vipw.8.xml:128(para)
+msgid "Edit passwd database."
+msgstr "编辑 passwd 数据库。"
+
+#: vipw.8.xml:132(term) pwck.8.xml:202(term) passwd.1.xml:281(term)
+msgid "<option>-q</option>, <option>--quiet</option>"
+msgstr "<option>-q</option>, <option>--quiet</option>"
+
+#: vipw.8.xml:134(para) passwd.1.xml:285(para)
+msgid "Quiet mode."
+msgstr "安静模式。"
+
+#: vipw.8.xml:138(term) usermod.8.xml:322(term) userdel.8.xml:146(term)
+#: useradd.8.xml:457(term) pwconv.8.xml:201(term) pwck.8.xml:219(term)
+#: passwd.1.xml:301(term) newusers.8.xml:321(term) lastlog.8.xml:127(term)
+#: grpck.8.xml:173(term) groupmod.8.xml:178(term) groupmems.8.xml:165(term)
+#: groupdel.8.xml:101(term) groupadd.8.xml:204(term) faillog.8.xml:180(term)
+#: chsh.1.xml:107(term) chpasswd.8.xml:188(term) chgpasswd.8.xml:146(term)
+#: chfn.1.xml:153(term) chage.1.xml:203(term)
+msgid ""
+"<option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</"
+"replaceable>"
+
+#: vipw.8.xml:142(para) usermod.8.xml:326(para) userdel.8.xml:150(para)
+#: useradd.8.xml:461(para) pwconv.8.xml:205(para) pwck.8.xml:223(para)
+#: passwd.1.xml:305(para) newusers.8.xml:325(para) lastlog.8.xml:131(para)
+#: grpck.8.xml:177(para) groupmod.8.xml:182(para) groupmems.8.xml:169(para)
+#: groupdel.8.xml:105(para) groupadd.8.xml:208(para) gpasswd.1.xml:185(para)
+#: faillog.8.xml:184(para) chsh.1.xml:111(para) chpasswd.8.xml:192(para)
+#: chgpasswd.8.xml:150(para) chfn.1.xml:157(para) chage.1.xml:207(para)
+#, fuzzy
+#| msgid ""
+#| "Add the <replaceable>user</replaceable> to the named <replaceable>group</"
+#| "replaceable>."
+msgid ""
+"Apply changes in the <replaceable>CHROOT_DIR</replaceable> directory and use "
+"the configuration files from the <replaceable>CHROOT_DIR</replaceable> "
+"directory."
+msgstr ""
+"向名为 <replaceable>group</replaceable> 的组中添加用户 <replaceable>user</"
+"replaceable>。"
+
+#: vipw.8.xml:150(term)
+msgid "<option>-s</option>, <option>--shadow</option>"
+msgstr "<option>-s</option>, <option>--shadow</option>"
+
+#: vipw.8.xml:152(para)
+msgid "Edit shadow or gshadow database."
+msgstr "编辑 shadow 或 gshadow 数据库。"
+
+#: vipw.8.xml:156(term)
+msgid "<option>-u</option>, <option>--user</option>"
+msgstr "<option>-u</option>, <option>--user</option>"
+
+#: vipw.8.xml:158(para)
+msgid "Indicates which user's tcb shadow file to edit."
+msgstr "指定要编辑哪个用户的 tcb 影子文件。"
+
+#: vipw.8.xml:165(title) usermod.8.xml:524(title) userdel.8.xml:188(title)
+#: useradd.8.xml:676(title) su.1.xml:338(title) sg.1.xml:98(title)
+#: pwconv.8.xml:227(title) pwck.8.xml:262(title) passwd.1.xml:395(title)
+#: newusers.8.xml:375(title) newgrp.1.xml:109(title) login.1.xml:294(title)
+#: lastlog.8.xml:205(title) grpck.8.xml:209(title) groupmod.8.xml:210(title)
+#: groupmems.8.xml:199(title) groupdel.8.xml:145(title)
+#: groupadd.8.xml:236(title) gpasswd.1.xml:264(title) chsh.1.xml:154(title)
+#: chpasswd.8.xml:239(title) chgpasswd.8.xml:198(title) chfn.1.xml:193(title)
+#: chage.1.xml:250(title)
+msgid "CONFIGURATION"
+msgstr "配置文件"
+
+#: vipw.8.xml:166(para) usermod.8.xml:525(para) userdel.8.xml:189(para)
+#: useradd.8.xml:677(para) su.1.xml:339(para) sg.1.xml:99(para)
+#: pwck.8.xml:263(para) passwd.1.xml:396(para) newusers.8.xml:376(para)
+#: newgrp.1.xml:110(para) login.1.xml:295(para) lastlog.8.xml:206(para)
+#: grpck.8.xml:210(para) groupmod.8.xml:211(para) groupmems.8.xml:200(para)
+#: groupdel.8.xml:146(para) groupadd.8.xml:237(para) gpasswd.1.xml:265(para)
+#: chsh.1.xml:155(para) chpasswd.8.xml:240(para) chgpasswd.8.xml:199(para)
+#: chfn.1.xml:194(para) chage.1.xml:251(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of this tool:"
+msgstr ""
+"在 <filename>/etc/login.defs</filename> 中有如下配置变量,可以用来更改此工具"
+"的行为:"
+
+#: vipw.8.xml:30(term) usermod.8.xml:30(term) userdel.8.xml:30(term)
+#: useradd.8.xml:30(term) pwconv.8.xml:30(term) pwck.8.xml:30(term)
+#: login.defs.5.xml:30(term) chage.1.xml:30(term)
+msgid "<option>USE_TCB</option> (boolean)"
+msgstr "<option>USE_TCB</option> (boolean)"
+
+#: vipw.8.xml:32(para) usermod.8.xml:32(para) userdel.8.xml:32(para)
+#: useradd.8.xml:32(para) pwconv.8.xml:32(para) pwck.8.xml:32(para)
+#: login.defs.5.xml:32(para) chage.1.xml:32(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <citerefentry><refentrytitle>tcb</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry> password shadowing "
+"scheme will be used."
+msgstr ""
+"如果 <replaceable>yes</replaceable>,将会使用 "
+"<citerefentry><refentrytitle>tcb</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry> 影子密码方案。"
+
+#: vipw.8.xml:177(title)
+msgid "ENVIRONMENT"
+msgstr "环境变量"
+
+#: vipw.8.xml:180(option)
+msgid "VISUAL"
+msgstr "VISUAL"
+
+#: vipw.8.xml:182(para)
+msgid "Editor to be used."
+msgstr "要使用的编辑器。"
+
+#: vipw.8.xml:186(option)
+msgid "EDITOR"
+msgstr "EDITOR"
+
+#: vipw.8.xml:188(para)
+msgid "Editor to be used if <option>VISUAL</option> is not set."
+msgstr "<option>VISUAL</option> 没有设置的情况下,使用的编辑器。"
+
+#: vipw.8.xml:195(title) usermod.8.xml:542(title) userdel.8.xml:205(title)
+#: useradd.8.xml:706(title) suauth.5.xml:193(title) su.1.xml:366(title)
+#: sg.1.xml:110(title) shadow.5.xml:255(title) shadow.3.xml:226(title)
+#: pwconv.8.xml:250(title) pwck.8.xml:279(title) porttime.5.xml:130(title)
+#: passwd.5.xml:160(title) passwd.1.xml:413(title) newusers.8.xml:411(title)
+#: newgrp.1.xml:121(title) logoutd.8.xml:89(title)
+#: login.access.5.xml:121(title) login.1.xml:338(title) limits.5.xml:196(title)
+#: lastlog.8.xml:217(title) gshadow.5.xml:156(title) grpck.8.xml:221(title)
+#: groups.1.xml:100(title) groupmod.8.xml:222(title) groupmems.8.xml:211(title)
+#: groupdel.8.xml:157(title) groupadd.8.xml:250(title) gpasswd.1.xml:279(title)
+#: faillog.8.xml:243(title) faillog.5.xml:96(title) expiry.1.xml:121(title)
+#: chsh.1.xml:167(title) chpasswd.8.xml:255(title) chgpasswd.8.xml:213(title)
+#: chfn.1.xml:207(title) chage.1.xml:262(title)
+msgid "FILES"
+msgstr "文件"
+
+#: vipw.8.xml:198(filename) usermod.8.xml:545(filename)
+#: userdel.8.xml:208(filename) useradd.8.xml:721(filename)
+#: sg.1.xml:125(filename) pwck.8.xml:282(filename) newusers.8.xml:426(filename)
+#: newgrp.1.xml:136(filename) gshadow.5.xml:159(filename)
+#: grpck.8.xml:224(filename) groups.1.xml:103(filename)
+#: groupmod.8.xml:225(filename) groupmems.8.xml:214(filename)
+#: groupdel.8.xml:160(filename) groupadd.8.xml:253(filename)
+#: gpasswd.1.xml:72(filename) gpasswd.1.xml:75(filename)
+#: gpasswd.1.xml:282(filename) chgpasswd.8.xml:216(filename)
+msgid "/etc/group"
+msgstr "/etc/group"
+
+#: vipw.8.xml:200(para) usermod.8.xml:547(para) userdel.8.xml:210(para)
+#: useradd.8.xml:723(para) sg.1.xml:127(para) pwck.8.xml:284(para)
+#: newusers.8.xml:428(para) newgrp.1.xml:138(para) gshadow.5.xml:161(para)
+#: grpck.8.xml:226(para) groups.1.xml:105(para) groupmod.8.xml:227(para)
+#: groupmems.8.xml:216(para) groupdel.8.xml:162(para) groupadd.8.xml:255(para)
+#: gpasswd.1.xml:284(para) chgpasswd.8.xml:218(para)
+msgid "Group account information."
+msgstr "组账户信息。"
+
+#: vipw.8.xml:204(filename) usermod.8.xml:551(filename)
+#: useradd.8.xml:727(filename) sg.1.xml:131(filename)
+#: newusers.8.xml:432(filename) newgrp.1.xml:142(filename)
+#: gshadow.5.xml:165(filename) grpck.8.xml:230(filename)
+#: groupmod.8.xml:231(filename) groupmems.8.xml:220(filename)
+#: groupdel.8.xml:166(filename) groupadd.8.xml:259(filename)
+#: gpasswd.1.xml:76(filename) gpasswd.1.xml:288(filename)
+#: chgpasswd.8.xml:222(filename)
+msgid "/etc/gshadow"
+msgstr "/etc/gshadow"
+
+#: vipw.8.xml:206(para) usermod.8.xml:553(para) useradd.8.xml:729(para)
+#: sg.1.xml:133(para) newusers.8.xml:434(para) newgrp.1.xml:144(para)
+#: gshadow.5.xml:167(para) grpck.8.xml:232(para) groupmod.8.xml:233(para)
+#: groupdel.8.xml:168(para) groupadd.8.xml:261(para) gpasswd.1.xml:290(para)
+#: chgpasswd.8.xml:224(para)
+msgid "Secure group account information."
+msgstr "安全组账户信息。"
+
+#: vipw.8.xml:210(filename) usermod.8.xml:563(filename)
+#: userdel.8.xml:220(filename) useradd.8.xml:709(filename)
+#: su.1.xml:369(filename) sg.1.xml:113(filename) shadow.5.xml:258(filename)
+#: pwck.8.xml:288(filename) passwd.5.xml:163(filename)
+#: passwd.1.xml:416(filename) newusers.8.xml:414(filename)
+#: newgrp.1.xml:124(filename) login.1.xml:353(filename)
+#: grpck.8.xml:236(filename) groupmod.8.xml:243(filename)
+#: expiry.1.xml:124(filename) chsh.1.xml:170(filename)
+#: chpasswd.8.xml:258(filename) chfn.1.xml:216(filename)
+#: chage.1.xml:266(filename)
+msgid "/etc/passwd"
+msgstr "/etc/passwd"
+
+#: vipw.8.xml:212(para) usermod.8.xml:565(para) userdel.8.xml:222(para)
+#: useradd.8.xml:711(para) su.1.xml:371(para) sg.1.xml:115(para)
+#: shadow.5.xml:260(para) pwck.8.xml:290(para) passwd.5.xml:165(para)
+#: passwd.1.xml:418(para) newusers.8.xml:416(para) newgrp.1.xml:126(para)
+#: login.1.xml:355(para) grpck.8.xml:238(para) groupmod.8.xml:245(para)
+#: expiry.1.xml:126(para) chsh.1.xml:172(para) chpasswd.8.xml:260(para)
+#: chfn.1.xml:218(para) chage.1.xml:269(para)
+msgid "User account information."
+msgstr "用户账户信息。"
+
+#: vipw.8.xml:216(filename) usermod.8.xml:569(filename)
+#: userdel.8.xml:226(filename) useradd.8.xml:715(filename)
+#: su.1.xml:375(filename) sg.1.xml:119(filename) shadow.5.xml:264(filename)
+#: shadow.3.xml:229(filename) pwck.8.xml:294(filename)
+#: passwd.5.xml:169(filename) passwd.1.xml:422(filename)
+#: newusers.8.xml:420(filename) newgrp.1.xml:130(filename)
+#: login.1.xml:359(filename) expiry.1.xml:130(filename)
+#: chpasswd.8.xml:264(filename) chage.1.xml:274(filename)
+msgid "/etc/shadow"
+msgstr "/etc/shadow"
+
+#: vipw.8.xml:218(para) usermod.8.xml:571(para) userdel.8.xml:228(para)
+#: useradd.8.xml:717(para) su.1.xml:377(para) sg.1.xml:121(para)
+#: shadow.5.xml:266(para) shadow.3.xml:231(para) pwck.8.xml:296(para)
+#: passwd.1.xml:424(para) newusers.8.xml:422(para) newgrp.1.xml:132(para)
+#: login.1.xml:361(para) expiry.1.xml:132(para) chpasswd.8.xml:266(para)
+#: chage.1.xml:277(para)
+msgid "Secure user account information."
+msgstr "安全用户账户信息。"
+
+#: vipw.8.xml:225(title) usermod.8.xml:590(title) userdel.8.xml:325(title)
+#: useradd.8.xml:835(title) suauth.5.xml:222(title) su.1.xml:437(title)
+#: sg.1.xml:140(title) shadow.5.xml:283(title) shadow.3.xml:238(title)
+#: pwconv.8.xml:262(title) pwck.8.xml:354(title) porttime.5.xml:142(title)
+#: passwd.5.xml:188(title) passwd.1.xml:494(title) nologin.8.xml:81(title)
+#: newusers.8.xml:465(title) newgrp.1.xml:151(title)
+#: login.defs.5.xml:547(title) login.access.5.xml:133(title)
+#: login.1.xml:398(title) limits.5.xml:206(title) gshadow.5.xml:174(title)
+#: grpck.8.xml:290(title) groups.1.xml:112(title) groupmod.8.xml:321(title)
+#: groupmems.8.xml:229(title) groupdel.8.xml:214(title)
+#: groupadd.8.xml:341(title) gpasswd.1.xml:297(title) faillog.8.xml:255(title)
+#: faillog.5.xml:108(title) expiry.1.xml:139(title) chsh.1.xml:191(title)
+#: chpasswd.8.xml:285(title) chgpasswd.8.xml:237(title) chfn.1.xml:225(title)
+#: chage.1.xml:317(title)
+msgid "SEE ALSO"
+msgstr "参见"
+
+#: vipw.8.xml:226(para)
+msgid ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry condition=\"tcb"
+"\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+"condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry condition=\"tcb"
+"\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+"condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: usermod.8.xml:46(firstname) userdel.8.xml:45(firstname)
+#: useradd.8.xml:58(firstname) su.1.xml:56(firstname) sg.1.xml:40(firstname)
+#: shadow.5.xml:39(firstname) shadow.3.xml:39(firstname)
+#: pwck.8.xml:45(firstname) porttime.5.xml:39(firstname)
+#: passwd.5.xml:39(firstname) passwd.1.xml:46(firstname)
+#: newusers.8.xml:55(firstname) newgrp.1.xml:40(firstname)
+#: logoutd.8.xml:39(firstname) login.defs.5.xml:106(firstname)
+#: login.1.xml:72(firstname) lastlog.8.xml:41(firstname)
+#: grpck.8.xml:40(firstname) groups.1.xml:39(firstname)
+#: groupmod.8.xml:40(firstname) groupdel.8.xml:40(firstname)
+#: groupadd.8.xml:42(firstname) faillog.8.xml:39(firstname)
+#: faillog.5.xml:39(firstname) expiry.1.xml:43(firstname)
+#: chsh.1.xml:42(firstname) chpasswd.8.xml:43(firstname)
+#: chfn.1.xml:42(firstname) chage.1.xml:40(firstname)
+msgid "Julianne Frances"
+msgstr ""
+
+#: usermod.8.xml:47(surname) userdel.8.xml:46(surname)
+#: useradd.8.xml:59(surname) su.1.xml:57(surname) sg.1.xml:41(surname)
+#: shadow.5.xml:40(surname) shadow.3.xml:40(surname) pwck.8.xml:46(surname)
+#: porttime.5.xml:40(surname) passwd.5.xml:40(surname) passwd.1.xml:47(surname)
+#: newusers.8.xml:56(surname) newgrp.1.xml:41(surname)
+#: logoutd.8.xml:40(surname) login.defs.5.xml:107(surname)
+#: login.1.xml:73(surname) lastlog.8.xml:42(surname) grpck.8.xml:41(surname)
+#: groups.1.xml:40(surname) groupmod.8.xml:41(surname)
+#: groupdel.8.xml:41(surname) groupadd.8.xml:43(surname)
+#: faillog.8.xml:40(surname) faillog.5.xml:40(surname) expiry.1.xml:44(surname)
+#: chsh.1.xml:43(surname) chpasswd.8.xml:44(surname) chfn.1.xml:43(surname)
+#: chage.1.xml:41(surname)
+msgid "Haugh"
+msgstr ""
+
+#: usermod.8.xml:48(contrib) userdel.8.xml:47(contrib)
+#: useradd.8.xml:60(contrib) sg.1.xml:42(contrib) newusers.8.xml:57(contrib)
+#: newgrp.1.xml:42(contrib) logoutd.8.xml:41(contrib)
+#: login.defs.5.xml:108(contrib) groups.1.xml:41(contrib)
+#: groupmod.8.xml:42(contrib) groupdel.8.xml:42(contrib)
+#: groupadd.8.xml:44(contrib) chpasswd.8.xml:45(contrib)
+msgid "Creation, 1991"
+msgstr ""
+
+#: usermod.8.xml:64(refentrytitle) usermod.8.xml:71(refname)
+#: usermod.8.xml:77(command) login.defs.5.xml:510(term)
+msgid "usermod"
+msgstr "usermod"
+
+#: usermod.8.xml:72(refpurpose)
+msgid "modify a user account"
+msgstr "修改一个用户账户"
+
+#: usermod.8.xml:81(replaceable) userdel.8.xml:78(replaceable)
+#: useradd.8.xml:92(replaceable) passwd.1.xml:82(replaceable)
+#: chsh.1.xml:78(replaceable) chfn.1.xml:78(replaceable)
+#: chage.1.xml:75(replaceable)
+msgid "LOGIN"
+msgstr "登录"
+
+#: usermod.8.xml:87(para)
+msgid ""
+"The <command>usermod</command> command modifies the system account files to "
+"reflect the changes that are specified on the command line."
+msgstr ""
+"<command>usermod</command> 修改系统账户文件和在命令行上指定的相关更改。"
+
+#: usermod.8.xml:95(para)
+msgid "The options which apply to the <command>usermod</command> command are:"
+msgstr "<command>usermod</command> 可以接受的选项有:"
+
+#: usermod.8.xml:101(term)
+msgid "<option>-a</option>, <option>--append</option>"
+msgstr "<option>-a</option>, <option>--append</option>"
+
+#: usermod.8.xml:105(para)
+msgid ""
+"Add the user to the supplementary group(s). Use only with the <option>-G</"
+"option> option."
+msgstr "将用户添加到附加组。只能和 <option>-G</option> 选项一起使用。"
+
+#: usermod.8.xml:112(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-b</option>, <option>--badnames</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: usermod.8.xml:116(para) useradd.8.xml:135(para) pwck.8.xml:190(para)
+#: newusers.8.xml:276(para)
+msgid "Allow names that do not conform to standards."
+msgstr ""
+
+#: usermod.8.xml:122(term) useradd.8.xml:162(term)
+msgid ""
+"<option>-c</option>, <option>--comment</option>&nbsp;<replaceable>COMMENT</"
+"replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--comment</option>&nbsp;<replaceable>COMMENT</"
+"replaceable>"
+
+#: usermod.8.xml:126(para)
+msgid ""
+"The new value of the user's password file comment field. It is normally "
+"modified using the <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> utility."
+msgstr ""
+"用户密码文件中注释字段的新值。通常使用 <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> 工具对其进行修改。"
+
+#: usermod.8.xml:135(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home-dir</option>&nbsp;"
+#| "<replaceable>HOME_DIR</replaceable>"
+msgid ""
+"<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home-dir</option>&nbsp;<replaceable>HOME_DIR</"
+"replaceable>"
+
+#: usermod.8.xml:139(para)
+msgid "The user's new login directory."
+msgstr "用户的新登录目录。"
+
+#: usermod.8.xml:142(para)
+msgid ""
+"If the <option>-m</option> option is given, the contents of the current home "
+"directory will be moved to the new home directory, which is created if it "
+"does not already exist."
+msgstr ""
+"如果给了 <option>-m</option> 选项,当前主目录的内容将会移动到新主目录中,如果"
+"不存在,则创建。"
+
+#: usermod.8.xml:151(term) useradd.8.xml:200(term) useradd.8.xml:577(term)
+msgid ""
+"<option>-e</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>EXPIRE_DATE</replaceable>"
+msgstr ""
+"<option>-e</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>EXPIRE_DATE</replaceable>"
+
+#: usermod.8.xml:155(para) useradd.8.xml:204(para)
+msgid ""
+"The date on which the user account will be disabled. The date is specified "
+"in the format <emphasis remap=\"I\">YYYY-MM-DD</emphasis>."
+msgstr ""
+"用户账户将被禁用的日期。日期以 <emphasis remap=\"I\">YYYY-MM-DD</emphasis> 格"
+"式指定。"
+
+#: usermod.8.xml:159(para)
+msgid ""
+"An empty <replaceable>EXPIRE_DATE</replaceable> argument will disable the "
+"expiration of the account."
+msgstr "空 <replaceable>EXPIRE_DATE</replaceable> 参数将禁用账户过期。"
+
+#: usermod.8.xml:163(para) usermod.8.xml:184(para)
+msgid ""
+"This option requires a <filename>/etc/shadow</filename> file. A <filename>/"
+"etc/shadow</filename> entry will be created if there were none."
+msgstr ""
+"此选项需要一个 <filename>/etc/passwd</filename> 文件。如果没有,将会创建一条 "
+"<filename>/etc/shadow</filename> 项目。"
+
+#: usermod.8.xml:171(term) useradd.8.xml:217(term) useradd.8.xml:589(term)
+msgid ""
+"<option>-f</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-f</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+
+#: usermod.8.xml:175(para)
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled."
+msgstr "密码过期之后,账户被彻底禁用之前的天数。"
+
+#: usermod.8.xml:179(para)
+msgid ""
+"A value of 0 disables the account as soon as the password has expired, and a "
+"value of -1 disables the feature."
+msgstr "0 表示密码过期时,立即禁用账户;-1 表示不使用这个功能。"
+
+#: usermod.8.xml:192(term) useradd.8.xml:236(term) useradd.8.xml:604(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GROUP</"
+"replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GROUP</"
+"replaceable>"
+
+#: usermod.8.xml:196(para)
+msgid ""
+"The group name or number of the user's new initial login group. The group "
+"must exist."
+msgstr "用户的新初始登录组的组名或数字代号。此组必须存在。"
+
+#: usermod.8.xml:200(para)
+msgid ""
+"Any file from the user's home directory owned by the previous primary group "
+"of the user will be owned by this new group."
+msgstr "用户主目录中,属于原来的主组的文件将转交新组所有。"
+
+#: usermod.8.xml:204(para)
+msgid ""
+"The group ownership of files outside of the user's home directory must be "
+"fixed manually."
+msgstr "主目录之外的文件所属的组必须手动修改。"
+
+#: usermod.8.xml:211(term) useradd.8.xml:263(term)
+msgid ""
+"<option>-G</option>, <option>--groups</option>&nbsp;<replaceable>GROUP1</"
+"replaceable>[<emphasis remap=\"I\">,GROUP2,...</emphasis>[<emphasis remap=\"I"
+"\">,GROUPN</emphasis>]]]"
+msgstr ""
+"<option>-G</option>, <option>--groups</option>&nbsp;<replaceable>GROUP1</"
+"replaceable>[<emphasis remap=\"I\">,GROUP2,...</emphasis>[<emphasis remap=\"I"
+"\">,GROUPN</emphasis>]]]"
+
+#: usermod.8.xml:215(para)
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option."
+msgstr ""
+"用户还属于的附加组列表。组之间使用逗号分隔,没有空格。这些组需要遵守和 "
+"<option>-g</option> 选项中给的组同样的限制。"
+
+#: usermod.8.xml:222(para)
+msgid ""
+"If the user is currently a member of a group which is not listed, the user "
+"will be removed from the group. This behaviour can be changed via the "
+"<option>-a</option> option, which appends the user to the current "
+"supplementary group list."
+msgstr ""
+"如果用户当前是一个组的成员,而这个组没有列在这里,用户将被从那个组里便删除。"
+"这个行为可以通过 <option>-a</option> 选项修改,这使用户追加到给出的附加组列表"
+"中。"
+
+#: usermod.8.xml:231(term)
+msgid ""
+"<option>-l</option>, <option>--login</option>&nbsp;<replaceable>NEW_LOGIN</"
+"replaceable>"
+msgstr ""
+"<option>-l</option>, <option>--login</option>&nbsp;<replaceable>NEW_LOGIN</"
+"replaceable>"
+
+#: usermod.8.xml:235(para)
+msgid ""
+"The name of the user will be changed from <replaceable>LOGIN</replaceable> "
+"to <replaceable>NEW_LOGIN</replaceable>. Nothing else is changed. In "
+"particular, the user's home directory or mail spool should probably be "
+"renamed manually to reflect the new login name."
+msgstr ""
+"用户的名称将会从 <replaceable>LOGIN</replaceable> 修改为 "
+"<replaceable>NEW_LOGIN</replaceable>。不会更改别的任何东西。特别是,用户的主"
+"目录名和邮件池也需要手动修改以和新登录名对应。"
+
+#: usermod.8.xml:245(term)
+msgid "<option>-L</option>, <option>--lock</option>"
+msgstr "<option>-L</option>, <option>--lock</option>"
+
+#: usermod.8.xml:249(para)
+msgid ""
+"Lock a user's password. This puts a '!' in front of the encrypted password, "
+"effectively disabling the password. You can't use this option with <option>-"
+"p</option> or <option>-U</option>."
+msgstr ""
+"锁定用户的密码。这会在用户加密的密码之前放置一个“!”,可以快速禁用密码。您可以"
+"和 <option>-p</option> 或 <option>-U</option> 配合使用此选项。"
+
+#: usermod.8.xml:255(para)
+msgid ""
+"Note: if you wish to lock the account (not only access with a password), you "
+"should also set the <replaceable>EXPIRE_DATE</replaceable> to "
+"<replaceable>1</replaceable>."
+msgstr ""
+"注意:如果希望锁定账户(不仅仅是通过密码访问),您也需要设置 "
+"<replaceable>EXPIRE_DATE</replaceable> 为 <replaceable>1</replaceable>。"
+
+#: usermod.8.xml:264(term)
+msgid "<option>-m</option>, <option>--move-home</option>"
+msgstr "<option>-m</option>, <option>--move-home</option>"
+
+#: usermod.8.xml:268(para)
+msgid "Move the content of the user's home directory to the new location."
+msgstr "将用户的主目录移动到新位置。"
+
+#: usermod.8.xml:272(para)
+msgid ""
+"This option is only valid in combination with the <option>-d</option> (or "
+"<option>--home</option>) option."
+msgstr ""
+"这个选项只有和 <option>-d</option> (或 <option>--home</option>) 选项组合使用"
+"时才有效。"
+
+#: usermod.8.xml:276(para)
+msgid ""
+"<command>usermod</command> will try to adapt the ownership of the files and "
+"to copy the modes, ACL and extended attributes, but manual changes might be "
+"needed afterwards."
+msgstr ""
+"<command>usermod</command> 会改写文件的属主并复制模式、ACL 和扩展属性,但是稍"
+"后也可能需要手动修改。"
+
+#: usermod.8.xml:284(term) useradd.8.xml:397(term) groupmod.8.xml:146(term)
+#: groupadd.8.xml:157(term)
+msgid "<option>-o</option>, <option>--non-unique</option>"
+msgstr "<option>-o</option>, <option>--non-unique</option>"
+
+#: usermod.8.xml:288(para)
+msgid ""
+"When used with the <option>-u</option> option, this option allows to change "
+"the user ID to a non-unique value."
+msgstr "使用 <option>-u</option> 选项时,可以将用户 ID 改为非唯一的值。"
+
+#: usermod.8.xml:295(term) useradd.8.xml:409(term) groupmod.8.xml:157(term)
+#: groupadd.8.xml:167(term)
+msgid ""
+"<option>-p</option>, <option>--password</option>&nbsp;<replaceable>PASSWORD</"
+"replaceable>"
+msgstr ""
+"<option>-p</option>, <option>--password</option>&nbsp;<replaceable>PASSWORD</"
+"replaceable>"
+
+#: usermod.8.xml:299(para) groupmod.8.xml:161(para)
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>."
+msgstr ""
+"已经加密过的密码,就像 <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry> 返回的那样。"
+
+#: usermod.8.xml:304(para) useradd.8.xml:418(para) groupmod.8.xml:166(para)
+#: groupadd.8.xml:176(para)
+msgid ""
+"<emphasis role=\"bold\">Note:</emphasis> This option is not recommended "
+"because the password (or encrypted password) will be visible by users "
+"listing the processes."
+msgstr ""
+"<emphasis role=\"bold\">注意:</emphasis>不推荐使用这个选项,因为密码(或加密"
+"过的密码)会被用户通过列出这个过程而看到。"
+
+#: usermod.8.xml:309(para)
+msgid ""
+"The password will be written in the local <filename>/etc/passwd</filename> "
+"or <filename>/etc/shadow</filename> file. This might differ from the "
+"password database configured in your PAM configuration."
+msgstr ""
+"密码将会写到本地的 <filename>/etc/passwd</filename> 或 <filename>/etc/"
+"shadow</filename> 文件。这可能会与您的机器有所不同,这根据 PAM 配置中的密码数"
+"据库配置而定。"
+
+#: usermod.8.xml:315(para) useradd.8.xml:423(para) groupmod.8.xml:171(para)
+#: groupadd.8.xml:181(para)
+msgid ""
+"You should make sure the password respects the system's password policy."
+msgstr "您应该确保密码符合系统的密码政策。"
+
+#: usermod.8.xml:334(term) userdel.8.xml:158(term) useradd.8.xml:469(term)
+#: groupmod.8.xml:190(term) groupdel.8.xml:113(term) groupadd.8.xml:216(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-d</option>, <option>--home-dir</option>&nbsp;"
+#| "<replaceable>HOME_DIR</replaceable>"
+msgid ""
+"<option>-P</option>, <option>--prefix</option>&nbsp;<replaceable>PREFIX_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home-dir</option>&nbsp;<replaceable>HOME_DIR</"
+"replaceable>"
+
+#: usermod.8.xml:338(para) userdel.8.xml:162(para) useradd.8.xml:473(para)
+#: groupmod.8.xml:194(para) groupdel.8.xml:117(para) groupadd.8.xml:220(para)
+msgid ""
+"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."
+msgstr ""
+
+#: usermod.8.xml:351(term) useradd.8.xml:486(term) useradd.8.xml:624(term)
+#: su.1.xml:186(term) chsh.1.xml:119(term)
+msgid ""
+"<option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SHELL</"
+"replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SHELL</"
+"replaceable>"
+
+#: usermod.8.xml:355(para) chsh.1.xml:123(para)
+msgid ""
+"The name of the user's new login shell. Setting this field to blank causes "
+"the system to select the default login shell."
+msgstr ""
+"用户的新登录 shell 的名称。将此字段设置为空会让系统选择默认的登录 shell。"
+
+#: usermod.8.xml:362(term) useradd.8.xml:500(term)
+msgid ""
+"<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+"replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+"replaceable>"
+
+#: usermod.8.xml:366(para)
+msgid "The new numerical value of the user's ID."
+msgstr "用户 ID 的新数值。"
+
+#: usermod.8.xml:369(para)
+msgid ""
+"This value must be unique, unless the <option>-o</option> option is used. "
+"The value must be non-negative."
+msgstr ""
+"这个值必须是唯一的,除非使用了 <option>-o</option> 选项,必须是非负值。"
+
+#: usermod.8.xml:374(para)
+msgid ""
+"The user's mailbox, and any files which the user owns and which are located "
+"in the user's home directory will have the file user ID changed "
+"automatically."
+msgstr "用户的邮箱,用户主目录中属于此用户的文件的属主 ID 也将自动更改。"
+
+#: usermod.8.xml:379(para)
+msgid ""
+"The ownership of files outside of the user's home directory must be fixed "
+"manually."
+msgstr "用户主目录之外文件所有权必须手动修复。"
+
+#: usermod.8.xml:383(para)
+msgid ""
+"No checks will be performed with regard to the <option>UID_MIN</option>, "
+"<option>UID_MAX</option>, <option>SYS_UID_MIN</option>, or "
+"<option>SYS_UID_MAX</option> from <filename>/etc/login.defs</filename>."
+msgstr ""
+"不会对 <filename>/etc/login.defs</filename> 中的 <option>UID_MIN</option>, "
+"<option>UID_MAX</option>, <option>SYS_UID_MIN</option> 和 "
+"<option>SYS_UID_MAX</option> 进行检查。"
+
+#: usermod.8.xml:392(term)
+msgid "<option>-U</option>, <option>--unlock</option>"
+msgstr "<option>-U</option>, <option>--unlock</option>"
+
+#: usermod.8.xml:396(para)
+msgid ""
+"Unlock a user's password. This removes the '!' in front of the encrypted "
+"password. You can't use this option with <option>-p</option> or <option>-L</"
+"option>."
+msgstr ""
+"解锁用户的密码。这将移除加密的密码之前的“!”。您可以将此选项和 <option>-p</"
+"option> 或 <option>-L</option> 配合使用。"
+
+#: usermod.8.xml:401(para)
+msgid ""
+"Note: if you wish to unlock the account (not only access with a password), "
+"you should also set the <replaceable>EXPIRE_DATE</replaceable> (for example "
+"to <replaceable>99999</replaceable>, or to the <option>EXPIRE</option> value "
+"from <filename>/etc/default/useradd</filename>)."
+msgstr ""
+"注意:如果您希望解锁账户(不只是使用密码访问),您也应该设置 "
+"<replaceable>EXPIRE_DATE</replaceable> (例如设置为 <replaceable>99999</"
+"replaceable>,或者 <filename>/etc/default/useradd</filename> 中的 "
+"<option>EXPIRE</option> 值)。"
+
+#: usermod.8.xml:412(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+#| "replaceable>|<replaceable>RANGE</replaceable>"
+msgid ""
+"<option>-v</option>, <option>--add-subuids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+"replaceable>|<replaceable>RANGE</replaceable>"
+
+#: usermod.8.xml:416(para)
+msgid "Add a range of subordinate uids to the user's account."
+msgstr ""
+
+#: usermod.8.xml:419(para) usermod.8.xml:457(para)
+msgid ""
+"This option may be specified multiple times to add multiple ranges to a "
+"users account."
+msgstr ""
+
+#: usermod.8.xml:422(para) usermod.8.xml:442(para)
+#, fuzzy
+#| msgid ""
+#| "No checks will be performed with regard to the <option>UID_MIN</option>, "
+#| "<option>UID_MAX</option>, <option>SYS_UID_MIN</option>, or "
+#| "<option>SYS_UID_MAX</option> from <filename>/etc/login.defs</filename>."
+msgid ""
+"No checks will be performed with regard to <option>SUB_UID_MIN</option>, "
+"<option>SUB_UID_MAX</option>, or <option>SUB_UID_COUNT</option> from /etc/"
+"login.defs."
+msgstr ""
+"不会对 <filename>/etc/login.defs</filename> 中的 <option>UID_MIN</option>, "
+"<option>UID_MAX</option>, <option>SYS_UID_MIN</option> 和 "
+"<option>SYS_UID_MAX</option> 进行检查。"
+
+#: usermod.8.xml:430(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+#| "replaceable>|<replaceable>RANGE</replaceable>"
+msgid ""
+"<option>-V</option>, <option>--del-subuids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+"replaceable>|<replaceable>RANGE</replaceable>"
+
+#: usermod.8.xml:434(para)
+msgid "Remove a range of subordinate uids from the user's account."
+msgstr ""
+
+#: usermod.8.xml:437(para)
+msgid ""
+"This option may be specified multiple times to remove multiple ranges to a "
+"users account. When both <option>--del-subuids</option> and <option>--add-"
+"subuids</option> are specified, the removal of all subordinate uid ranges "
+"happens before any subordinate uid range is added."
+msgstr ""
+
+#: usermod.8.xml:450(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+#| "replaceable>|<replaceable>RANGE</replaceable>"
+msgid ""
+"<option>-w</option>, <option>--add-subgids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+"replaceable>|<replaceable>RANGE</replaceable>"
+
+#: usermod.8.xml:454(para)
+msgid "Add a range of subordinate gids to the user's account."
+msgstr ""
+
+#: usermod.8.xml:460(para) usermod.8.xml:480(para)
+#, fuzzy
+#| msgid ""
+#| "The default behavior (if the <option>-g</option>, <option>-N</option>, "
+#| "and <option>-U</option> options are not specified) is defined by the "
+#| "<option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+#| "filename>."
+msgid ""
+"No checks will be performed with regard to <option>SUB_GID_MIN</option>, "
+"<option>SUB_GID_MAX</option>, or <option>SUB_GID_COUNT</option> from /etc/"
+"login.defs."
+msgstr ""
+"如果没有指定 <option>-g</option>, <option>-N</option> 和 <option>-U</option> "
+"选项,默认行为由 <filename>/etc/login.defs</filename> 中的 "
+"<option>USERGROUPS_ENAB</option> 变量指定。"
+
+#: usermod.8.xml:468(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+#| "replaceable>|<replaceable>RANGE</replaceable>"
+msgid ""
+"<option>-W</option>, <option>--del-subgids</option>&nbsp;<replaceable>FIRST</"
+"replaceable>-<replaceable>LAST</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+"replaceable>|<replaceable>RANGE</replaceable>"
+
+#: usermod.8.xml:472(para)
+#, fuzzy
+#| msgid "Remove any SELinux user mapping for the user's login."
+msgid "Remove a range of subordinate gids from the user's account."
+msgstr "移除用户登录的所有 SELinux 用户映射。"
+
+#: usermod.8.xml:475(para)
+msgid ""
+"This option may be specified multiple times to remove multiple ranges to a "
+"users account. When both <option>--del-subgids</option> and <option>--add-"
+"subgids</option> are specified, the removal of all subordinate gid ranges "
+"happens before any subordinate gid range is added."
+msgstr ""
+
+#: usermod.8.xml:488(term) useradd.8.xml:535(term)
+msgid ""
+"<option>-Z</option>, <option>--selinux-user</option>&nbsp;"
+"<replaceable>SEUSER</replaceable>"
+msgstr ""
+"<option>-Z</option>, <option>--selinux-user</option>&nbsp;"
+"<replaceable>SEUSER</replaceable>"
+
+#: usermod.8.xml:492(para)
+msgid "The new SELinux user for the user's login."
+msgstr "用户登陆的 SELinux 用户。"
+
+#: usermod.8.xml:495(para)
+msgid ""
+"A blank <replaceable>SEUSER</replaceable> will remove the SELinux user "
+"mapping for user <replaceable>LOGIN</replaceable> (if any)."
+msgstr ""
+"空的 <replaceable>SEUSER</replaceable> 将移除用户 <replaceable>LOGIN</"
+"replaceable> 的 SELinux 用户映射(如果有)。"
+
+#: usermod.8.xml:506(title) userdel.8.xml:298(title) useradd.8.xml:652(title)
+#: su.1.xml:330(title) shadow.3.xml:218(title) passwd.1.xml:377(title)
+#: newusers.8.xml:363(title) login.1.xml:260(title) lastlog.8.xml:229(title)
+#: groupdel.8.xml:133(title) groupadd.8.xml:274(title) gpasswd.1.xml:252(title)
+#: faillog.8.xml:232(title) chpasswd.8.xml:231(title)
+#: chgpasswd.8.xml:186(title)
+msgid "CAVEATS"
+msgstr "CAVEATS"
+
+#: usermod.8.xml:507(para)
+#, fuzzy
+#| msgid ""
+#| "You must make certain that the named user is not executing any processes "
+#| "when this command is being executed if the user's numerical user ID, the "
+#| "user's name, or the user's home directory is being changed. "
+#| "<command>usermod</command> checks this on Linux, but only check if the "
+#| "user is logged in according to utmp on other architectures."
+msgid ""
+"You must make certain that the named user is not executing any processes "
+"when this command is being executed if the user's numerical user ID, the "
+"user's name, or the user's home directory is being changed. "
+"<command>usermod</command> checks this on Linux. On other platforms it only "
+"uses utmp to check if the user is logged in."
+msgstr ""
+"如果要更改用户的数字 ID、用户名或主目录,需要确保允许命令时,用户没有执行任何"
+"进程。<command>usermod</command> 会在 Linux 上进行检查;但是在其它平台上,仅"
+"仅根据 utmp 检查用户是否已经登录。"
+
+#: usermod.8.xml:514(para)
+msgid ""
+"You must change the owner of any <command>crontab</command> files or "
+"<command>at</command> jobs manually."
+msgstr ""
+"您必须手动更改 <command>crontab</command> 文件或 <command>at</command> 作业的"
+"属主。"
+
+#: usermod.8.xml:518(para)
+msgid "You must make any changes involving NIS on the NIS server."
+msgstr "您必须更改 NIS 服务器上的 NIS 相关内容。"
+
+#: usermod.8.xml:33(term) useradd.8.xml:33(term) login.defs.5.xml:33(term)
+#: lastlog.8.xml:33(term)
+#, fuzzy
+#| msgid "<option>SYS_UID_MAX</option> (number)"
+msgid "<option>LASTLOG_UID_MAX</option> (number)"
+msgstr "<option>SYS_UID_MAX</option> (number)"
+
+#: usermod.8.xml:35(para) useradd.8.xml:35(para) login.defs.5.xml:35(para)
+#: lastlog.8.xml:35(para)
+msgid ""
+"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."
+msgstr ""
+
+#: usermod.8.xml:41(para) useradd.8.xml:41(para) login.defs.5.xml:41(para)
+#: lastlog.8.xml:41(para)
+msgid ""
+"No <option>LASTLOG_UID_MAX</option> option present in the configuration "
+"means that there is no user ID limit for writing lastlog entries."
+msgstr ""
+
+#: usermod.8.xml:32(term) userdel.8.xml:32(term) useradd.8.xml:32(term)
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>MAIL_DIR</option> (string)"
+msgstr "<option>MAIL_DIR</option> (string)"
+
+#: usermod.8.xml:34(para) userdel.8.xml:34(para) useradd.8.xml:34(para)
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"The mail spool directory. This is needed to manipulate the mailbox when its "
+"corresponding user account is modified or deleted. If not specified, a "
+"compile-time default is used."
+msgstr ""
+"邮箱目录。修改或删除用户账户时需要处理邮箱,如果没有指定,将使用编译时指定的"
+"默认值。"
+
+#: usermod.8.xml:41(term) userdel.8.xml:41(term) useradd.8.xml:41(term)
+#: su.1.xml:41(term) login.defs.5.xml:41(term) login.1.xml:41(term)
+msgid "<option>MAIL_FILE</option> (string)"
+msgstr "<option>MAIL_FILE</option> (string)"
+
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"Defines the location of the users mail spool files relatively to their home "
+"directory."
+msgstr "定义用户邮箱文件的位置(相对于主目录)。"
+
+#. FIXME: MAIL_FILE not used in useradd
+#: usermod.8.xml:50(para) userdel.8.xml:50(para) useradd.8.xml:50(para)
+#: su.1.xml:50(para) login.defs.5.xml:50(para) login.1.xml:50(para)
+msgid ""
+"The <option>MAIL_DIR</option> and <option>MAIL_FILE</option> variables are "
+"used by <command>useradd</command>, <command>usermod</command>, and "
+"<command>userdel</command> to create, move, or delete the user's mail spool."
+msgstr ""
+"<option>MAIL_DIR</option> and <option>MAIL_FILE</option> 变量由 "
+"<command>useradd</command>,<command>usermod</command> 和 <command>userdel</"
+"command> 用于创建、移动或删除用户邮箱。"
+
+#: usermod.8.xml:56(para) userdel.8.xml:56(para) useradd.8.xml:56(para)
+#: su.1.xml:56(para) login.defs.5.xml:56(para) login.1.xml:56(para)
+msgid ""
+"If <option>MAIL_CHECK_ENAB</option> is set to <replaceable>yes</"
+"replaceable>, they are also used to define the <envar>MAIL</envar> "
+"environment variable."
+msgstr ""
+"如果 <option>MAIL_CHECK_ENAB</option> 设置为 <replaceable>yes</replaceable>,"
+"它们也被用于定义 <envar>MAIL</envar> 环境变量。"
+
+#: usermod.8.xml:30(term) userdel.8.xml:30(term) useradd.8.xml:30(term)
+#: pwconv.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: grpck.8.xml:30(term) groupmod.8.xml:30(term) groupmems.8.xml:30(term)
+#: groupdel.8.xml:30(term) groupadd.8.xml:30(term) gpasswd.1.xml:30(term)
+#: chgpasswd.8.xml:30(term)
+msgid "<option>MAX_MEMBERS_PER_GROUP</option> (number)"
+msgstr "<option>MAX_MEMBERS_PER_GROUP</option> (number)"
+
+#: usermod.8.xml:32(para) userdel.8.xml:32(para) useradd.8.xml:32(para)
+#: pwconv.8.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: grpck.8.xml:32(para) groupmod.8.xml:32(para) groupmems.8.xml:32(para)
+#: groupdel.8.xml:32(para) groupadd.8.xml:32(para) gpasswd.1.xml:32(para)
+#: chgpasswd.8.xml:32(para)
+msgid ""
+"Maximum members per group entry. When the maximum is reached, a new group "
+"entry (line) is started in <filename>/etc/group</filename> (with the same "
+"name, same password, and same GID)."
+msgstr ""
+"每个组条目的最大成员数。达到最大值时,在 <filename>/etc/group</filename> 开始"
+"一个新条目(行)(使用同样的名称,同样的密码,同样的 GID)。"
+
+#: usermod.8.xml:37(para) userdel.8.xml:37(para) useradd.8.xml:37(para)
+#: pwconv.8.xml:37(para) newusers.8.xml:37(para) login.defs.5.xml:37(para)
+#: grpck.8.xml:37(para) groupmod.8.xml:37(para) groupmems.8.xml:37(para)
+#: groupdel.8.xml:37(para) groupadd.8.xml:37(para) gpasswd.1.xml:37(para)
+#: chgpasswd.8.xml:37(para)
+msgid ""
+"The default value is 0, meaning that there are no limits in the number of "
+"members in a group."
+msgstr "默认值是 0,意味着组中的成员数没有限制。"
+
+#. Note: on HP, split groups have the same ID, but different
+#. names.
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: pwconv.8.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: grpck.8.xml:43(para) groupmod.8.xml:43(para) groupmems.8.xml:43(para)
+#: groupdel.8.xml:43(para) groupadd.8.xml:43(para) gpasswd.1.xml:43(para)
+#: chgpasswd.8.xml:43(para)
+msgid ""
+"This feature (split group) permits to limit the length of lines in the group "
+"file. This is useful to make sure that lines for NIS groups are not larger "
+"than 1024 characters."
+msgstr ""
+"此功能(分割组)允许限制组文件中的行长度。这对于确保 NIS 组的行比长于 1024 字"
+"符。"
+
+#: usermod.8.xml:48(para) userdel.8.xml:48(para) useradd.8.xml:48(para)
+#: pwconv.8.xml:48(para) newusers.8.xml:48(para) login.defs.5.xml:48(para)
+#: grpck.8.xml:48(para) groupmod.8.xml:48(para) groupmems.8.xml:48(para)
+#: groupdel.8.xml:48(para) groupadd.8.xml:48(para) gpasswd.1.xml:48(para)
+#: chgpasswd.8.xml:48(para)
+msgid "If you need to enforce such limit, you can use 25."
+msgstr "如果要强制这个限制,可以使用 25。"
+
+#: usermod.8.xml:51(para) userdel.8.xml:51(para) useradd.8.xml:51(para)
+#: pwconv.8.xml:51(para) newusers.8.xml:51(para) login.defs.5.xml:51(para)
+#: grpck.8.xml:51(para) groupmod.8.xml:51(para) groupmems.8.xml:51(para)
+#: groupdel.8.xml:51(para) groupadd.8.xml:51(para) gpasswd.1.xml:51(para)
+#: chgpasswd.8.xml:51(para)
+msgid ""
+"Note: split groups may not be supported by all tools (even in the Shadow "
+"toolsuite). You should not use this variable unless you really need it."
+msgstr ""
+"注意:分割组可能不受所有工具的支持(甚至在 Shadow 工具集中)。您不应该使用这个"
+"变量,除非真的需要。"
+
+#: usermod.8.xml:30(term) useradd.8.xml:30(term) newusers.8.xml:30(term)
+#: login.defs.5.xml:30(term)
+#, fuzzy
+#| msgid "<option>SYS_GID_MIN</option> (number)"
+msgid "<option>SUB_GID_MIN</option> (number)"
+msgstr "<option>SYS_GID_MIN</option> (number)"
+
+#: usermod.8.xml:31(term) useradd.8.xml:31(term) newusers.8.xml:31(term)
+#: login.defs.5.xml:31(term)
+#, fuzzy
+#| msgid "<option>SYS_GID_MAX</option> (number)"
+msgid "<option>SUB_GID_MAX</option> (number)"
+msgstr "<option>SYS_GID_MAX</option> (number)"
+
+#: usermod.8.xml:32(term) useradd.8.xml:32(term) newusers.8.xml:32(term)
+#: login.defs.5.xml:32(term)
+#, fuzzy
+#| msgid "<option>SYS_GID_MIN</option> (number)"
+msgid "<option>SUB_GID_COUNT</option> (number)"
+msgstr "<option>SYS_GID_MIN</option> (number)"
+
+#: usermod.8.xml:34(para) useradd.8.xml:34(para) newusers.8.xml:34(para)
+#: login.defs.5.xml:34(para)
+msgid ""
+"If <filename>/etc/subuid</filename> exists, the commands <command>useradd</"
+"command> and <command>newusers</command> (unless the user already have "
+"subordinate group IDs) allocate <option>SUB_GID_COUNT</option> unused group "
+"IDs from the range <option>SUB_GID_MIN</option> to <option>SUB_GID_MAX</"
+"option> for each new user."
+msgstr ""
+
+#: usermod.8.xml:42(para) useradd.8.xml:42(para) newusers.8.xml:42(para)
+#: login.defs.5.xml:42(para)
+#, fuzzy
+#| msgid ""
+#| "The default value for <option>SYS_GID_MIN</option> (resp. "
+#| "<option>SYS_GID_MAX</option>) is 101 (resp. <option>GID_MIN</option>-1)."
+msgid ""
+"The default values for <option>SUB_GID_MIN</option>, <option>SUB_GID_MAX</"
+"option>, <option>SUB_GID_COUNT</option> are respectively 100000, 600100000 "
+"and 65536."
+msgstr ""
+"<option>SYS_GID_MIN</option> 和 <option>SYS_GID_MAX</option> 的默认值分别是 "
+"101 和 <option>GID_MIN</option>-1。"
+
+#: usermod.8.xml:30(term) useradd.8.xml:30(term) newusers.8.xml:30(term)
+#: login.defs.5.xml:30(term)
+#, fuzzy
+#| msgid "<option>SYS_UID_MIN</option> (number)"
+msgid "<option>SUB_UID_MIN</option> (number)"
+msgstr "<option>SYS_UID_MIN</option> (number)"
+
+#: usermod.8.xml:31(term) useradd.8.xml:31(term) newusers.8.xml:31(term)
+#: login.defs.5.xml:31(term)
+#, fuzzy
+#| msgid "<option>SYS_UID_MAX</option> (number)"
+msgid "<option>SUB_UID_MAX</option> (number)"
+msgstr "<option>SYS_UID_MAX</option> (number)"
+
+#: usermod.8.xml:32(term) useradd.8.xml:32(term) newusers.8.xml:32(term)
+#: login.defs.5.xml:32(term)
+#, fuzzy
+#| msgid "<option>SYS_UID_MIN</option> (number)"
+msgid "<option>SUB_UID_COUNT</option> (number)"
+msgstr "<option>SYS_UID_MIN</option> (number)"
+
+#: usermod.8.xml:34(para) useradd.8.xml:34(para) newusers.8.xml:34(para)
+#: login.defs.5.xml:34(para)
+msgid ""
+"If <filename>/etc/subuid</filename> exists, the commands <command>useradd</"
+"command> and <command>newusers</command> (unless the user already have "
+"subordinate user IDs) allocate <option>SUB_UID_COUNT</option> unused user "
+"IDs from the range <option>SUB_UID_MIN</option> to <option>SUB_UID_MAX</"
+"option> for each new user."
+msgstr ""
+
+#: usermod.8.xml:42(para) useradd.8.xml:42(para) newusers.8.xml:42(para)
+#: login.defs.5.xml:42(para)
+#, fuzzy
+#| msgid ""
+#| "The default value for <option>SYS_UID_MIN</option> (resp. "
+#| "<option>SYS_UID_MAX</option>) is 101 (resp. <option>UID_MIN</option>-1)."
+msgid ""
+"The default values for <option>SUB_UID_MIN</option>, <option>SUB_UID_MAX</"
+"option>, <option>SUB_UID_COUNT</option> are respectively 100000, 600100000 "
+"and 65536."
+msgstr ""
+"<option>SYS_UID_MIN</option> 和 <option>SYS_UID_MAX</option> 的默认值分别是 "
+"101 和 <option>UID_MIN</option>-1。"
+
+#: usermod.8.xml:30(term) userdel.8.xml:30(term) useradd.8.xml:30(term)
+#: pwck.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>TCB_SYMLINKS</option> (boolean)"
+msgstr "<option>TCB_SYMLINKS</option> (boolean)"
+
+#: usermod.8.xml:37(programlisting) userdel.8.xml:37(programlisting)
+#: useradd.8.xml:37(programlisting) pwck.8.xml:37(programlisting)
+#: login.defs.5.xml:37(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"if ( UID is less than 1000) {\n"
+" use /etc/tcb/user\n"
+"} else if ( UID is less than 1000000) {\n"
+" kilos = UID / 1000\n"
+" use /etc/tcb/:kilos/user\n"
+" make symlink /etc/tcb/user to the above directory\n"
+"} else {\n"
+" megas = UID / 1000000\n"
+" kilos = ( UID / megas * 1000000 ) / 1000\n"
+" use /etc/tcb/:megas/:kilos/user\n"
+" make symlink /etc/tcb/user to the above directory\n"
+"}\n"
+" "
+msgstr ""
+"\n"
+"if ( UID is less than 1000) {\n"
+" use /etc/tcb/user\n"
+"} else if ( UID is less than 1000000) {\n"
+" kilos = UID / 1000\n"
+" use /etc/tcb/:kilos/user\n"
+" make symlink /etc/tcb/user to the above directory\n"
+"} else {\n"
+" megas = UID / 1000000\n"
+" kilos = ( UID / megas * 1000000 ) / 1000\n"
+" use /etc/tcb/:megas/:kilos/user\n"
+" make symlink /etc/tcb/user to the above directory\n"
+"}\n"
+" "
+
+#: usermod.8.xml:32(para) userdel.8.xml:32(para) useradd.8.xml:32(para)
+#: pwck.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the location of the user tcb directory to "
+"be created will not be automatically set to /etc/tcb/user, but will be "
+"computed depending on the UID of the user, according to the following "
+"algorithm: <placeholder-1/>"
+msgstr ""
+"如果是 <replaceable>yes</replaceable>,要创建用户 tcb 目录不会自动设置为 /"
+"etc/tcb/user,但是会根据用户的 UID 计算,根据的算法如下:<placeholder-1/>"
+
+#: usermod.8.xml:557(filename) userdel.8.xml:214(filename)
+#: useradd.8.xml:757(filename) su.1.xml:381(filename)
+#: pwconv.8.xml:253(filename) passwd.1.xml:428(filename)
+#: newusers.8.xml:438(filename) login.access.5.xml:124(filename)
+#: login.1.xml:389(filename) groupmod.8.xml:237(filename)
+#: groupadd.8.xml:265(filename) chsh.1.xml:182(filename)
+#: chpasswd.8.xml:270(filename) chgpasswd.8.xml:228(filename)
+#: chfn.1.xml:210(filename)
+msgid "/etc/login.defs"
+msgstr "/etc/login.defs"
+
+#: usermod.8.xml:559(para) userdel.8.xml:216(para) useradd.8.xml:759(para)
+#: su.1.xml:383(para) pwconv.8.xml:255(para) passwd.1.xml:430(para)
+#: newusers.8.xml:440(para) login.access.5.xml:126(para) login.1.xml:391(para)
+#: groupmod.8.xml:239(para) groupadd.8.xml:267(para) chsh.1.xml:184(para)
+#: chpasswd.8.xml:272(para) chgpasswd.8.xml:230(para) chfn.1.xml:212(para)
+msgid "Shadow password suite configuration."
+msgstr "Shadow 密码套件配置。"
+
+#: usermod.8.xml:575(filename) userdel.8.xml:232(filename)
+#: useradd.8.xml:745(filename) newusers.8.xml:450(filename)
+#, fuzzy
+#| msgid "/etc/suauth"
+msgid "/etc/subgid"
+msgstr "/etc/suauth"
+
+#: usermod.8.xml:577(para) userdel.8.xml:234(para) useradd.8.xml:747(para)
+#: newusers.8.xml:452(para)
+msgid "Per user subordinate group IDs."
+msgstr ""
+
+#: usermod.8.xml:581(filename) userdel.8.xml:238(filename)
+#: useradd.8.xml:751(filename) newusers.8.xml:456(filename)
+#, fuzzy
+#| msgid "/etc/suauth"
+msgid "/etc/subuid"
+msgstr "/etc/suauth"
+
+#: usermod.8.xml:583(para) userdel.8.xml:240(para) useradd.8.xml:753(para)
+#: newusers.8.xml:458(para)
+msgid "Per user subordinate user IDs."
+msgstr ""
+
+#: usermod.8.xml:591(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <phrase condition=\"subids"
+"\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: userdel.8.xml:63(refentrytitle) userdel.8.xml:70(refname)
+#: userdel.8.xml:75(command) login.defs.5.xml:500(term)
+msgid "userdel"
+msgstr "userdel"
+
+#: userdel.8.xml:71(refpurpose)
+msgid "delete a user account and related files"
+msgstr "删除用户账户和相关文件"
+
+#: userdel.8.xml:85(para)
+msgid ""
+"The <command>userdel</command> command modifies the system account files, "
+"deleting all entries that refer to the user name <emphasis remap=\"I"
+"\">LOGIN</emphasis>. The named user must exist."
+msgstr ""
+"<command>userdel</command> 修改系统账户文件,删除与用户名 <emphasis remap=\"I"
+"\">LOGIN</emphasis> 相关的所以项目。给出的用户名必须存在。"
+
+#: userdel.8.xml:94(para)
+msgid "The options which apply to the <command>userdel</command> command are:"
+msgstr "<command>userdel</command> 可以使用的选项有:"
+
+#: userdel.8.xml:99(term) groupadd.8.xml:100(term) expiry.1.xml:103(term)
+msgid "<option>-f</option>, <option>--force</option>"
+msgstr "<option>-f</option>, <option>--force</option>"
+
+#: userdel.8.xml:103(para)
+msgid ""
+"This option forces the removal of the user account, even if the user is "
+"still logged in. It also forces <command>userdel</command> to remove the "
+"user's home directory and mail spool, even if another user uses the same "
+"home directory or if the mail spool is not owned by the specified user. If "
+"<option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename> and if a group exists with "
+"the same name as the deleted user, then this group will be removed, even if "
+"it is still the primary group of another user."
+msgstr ""
+"此选项强制删除用户账户,甚至用户仍然在登录状态。它也强制 <command>userdel</"
+"command> 删除用户的主目录和邮箱,即使其它用户也使用同一个主目录或邮箱不属于指"
+"定的用户。如果 <filename>/etc/login.defs</filename> 中的 "
+"<option>USERGROUPS_ENAB</option> 定义为 <emphasis remap=\"I\">yes</"
+"emphasis>,并且如果有一个和用户同名的组,也会删除此组,即使它仍然是别的用户的"
+"主组。"
+
+#: userdel.8.xml:116(para)
+msgid ""
+"<emphasis>Note:</emphasis> This option is dangerous and may leave your "
+"system in an inconsistent state."
+msgstr "<emphasis>注意:</emphasis>此选项危险,可能会破坏系统的稳定性。"
+
+#: userdel.8.xml:129(term)
+msgid "<option>-r</option>, <option>--remove</option>"
+msgstr "<option>-r</option>, <option>--remove</option>"
+
+#: userdel.8.xml:133(para)
+msgid ""
+"Files in the user's home directory will be removed along with the home "
+"directory itself and the user's mail spool. Files located in other file "
+"systems will have to be searched for and deleted manually."
+msgstr ""
+"用户主目录中的文件将随用户主目录和用户邮箱一起删除。在其它文件系统中的文件必"
+"须手动搜索并删除。"
+
+#: userdel.8.xml:139(para)
+msgid ""
+"The mail spool is defined by the <option>MAIL_DIR</option> variable in the "
+"<filename>login.defs</filename> file."
+msgstr ""
+"邮箱在 <filename>login.defs</filename> 文件中的 <option>MAIL_DIR</option> 变"
+"量中定义。"
+
+#: userdel.8.xml:175(term)
+msgid "<option>-Z</option>, <option>--selinux-user</option>"
+msgstr "<option>-Z</option>, <option>--selinux-user</option>"
+
+#: userdel.8.xml:179(para)
+msgid "Remove any SELinux user mapping for the user's login."
+msgstr "移除用户登录的所有 SELinux 用户映射。"
+
+#: userdel.8.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>USERDEL_CMD</option> (string)"
+msgstr "<option>USERDEL_CMD</option> (string)"
+
+#: userdel.8.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If defined, this command is run when removing a user. It should remove any "
+"at/cron/print jobs etc. owned by the user to be removed (passed as the first "
+"argument)."
+msgstr ""
+"如果定义了,这是删除账户时执行的命令。它应该移除所有属于此用户的的 at/cron/"
+"print 等作业(作为第一个参数传递)。"
+
+#: userdel.8.xml:40(para) login.defs.5.xml:40(para)
+msgid "The return code of the script is not taken into account."
+msgstr "这个脚本的返回值并不被带到账户中去。"
+
+#: userdel.8.xml:46(programlisting) login.defs.5.xml:46(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"#! /bin/sh\n"
+"\n"
+"# Check for the required argument.\n"
+"if [ $# != 1 ]; then\n"
+"\techo \"Usage: $0 username\"\n"
+"\texit 1\n"
+"fi\n"
+"\n"
+"# Remove cron jobs.\n"
+"crontab -r -u $1\n"
+"\n"
+"# Remove at jobs.\n"
+"# Note that it will remove any jobs owned by the same UID,\n"
+"# even if it was shared by a different username.\n"
+"AT_SPOOL_DIR=/var/spool/cron/atjobs\n"
+"find $AT_SPOOL_DIR -name \"[^.]*\" -type f -user $1 -delete \\;\n"
+"\n"
+"# Remove print jobs.\n"
+"lprm $1\n"
+"\n"
+"# All done.\n"
+"exit 0\n"
+" "
+msgstr ""
+"\n"
+"#! /bin/sh\n"
+"\n"
+"# 检查需要的参数\n"
+"if [ $# != 1 ]; then\n"
+"\techo \"Usage: $0 username\"\n"
+"\texit 1\n"
+"fi\n"
+"\n"
+"# 移除 cron 作业\n"
+"crontab -r -u $1\n"
+"\n"
+"# 移除 at 作业\n"
+"# 注意这将移除所有属于同一个 UID 的作业\n"
+"# 即使此 ID 由多个用户名共享\n"
+"AT_SPOOL_DIR=/var/spool/cron/atjobs\n"
+"find $AT_SPOOL_DIR -name \"[^.]*\" -type f -user $1 -delete \\;\n"
+"\n"
+"# 移除 print 作业\n"
+"lprm $1\n"
+"\n"
+"# 全部完成\n"
+"exit 0\n"
+" "
+
+#: userdel.8.xml:43(para) login.defs.5.xml:43(para)
+msgid ""
+"Here is an example script, which removes the user's cron, at and print jobs: "
+"<placeholder-1/>"
+msgstr ""
+"这是一个示例脚本,它移除用户的 cron、at 和 print 作业:<placeholder-1/>"
+
+#: userdel.8.xml:32(term) useradd.8.xml:32(term) su.1.xml:32(term)
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>USERGROUPS_ENAB</option> (boolean)"
+msgstr "<option>USERGROUPS_ENAB</option> (boolean)"
+
+#: userdel.8.xml:34(para) useradd.8.xml:34(para) su.1.xml:34(para)
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable setting of the umask group bits to be the same as owner bits "
+"(examples: 022 -&gt; 002, 077 -&gt; 007) for non-root users, if the uid is "
+"the same as gid, and username is the same as the primary group name."
+msgstr ""
+"如果 uid 和 gid 相同,用户名和主用户名也相同,使非 root 组的组掩码位和属主位"
+"相同 (如:022 -&gt; 002, 077 -&gt; 007)。"
+
+#: userdel.8.xml:39(para) useradd.8.xml:39(para) su.1.xml:39(para)
+#: login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, <command>userdel</command> will "
+"remove the user's group if it contains no more members, and "
+"<command>useradd</command> will create by default a group with the name of "
+"the user."
+msgstr ""
+"如果设置为 <replaceable>yes</replaceable>,如果组中没有成员了,"
+"<command>userdel</command> 将移除此用户组,<command>useradd</command> 创建用"
+"户时,也会创建一个同名的默认组。"
+
+#: userdel.8.xml:247(title) useradd.8.xml:766(title) su.1.xml:390(title)
+#: pwck.8.xml:303(title) passwd.1.xml:443(title) grpck.8.xml:245(title)
+#: groupmod.8.xml:252(title) groupdel.8.xml:175(title)
+#: groupadd.8.xml:296(title) chage.1.xml:284(title)
+msgid "EXIT VALUES"
+msgstr "退出值"
+
+#: userdel.8.xml:252(replaceable) useradd.8.xml:771(replaceable)
+#: su.1.xml:409(replaceable) pwck.8.xml:308(replaceable)
+#: passwd.1.xml:448(replaceable) grpck.8.xml:250(replaceable)
+#: groupmod.8.xml:257(replaceable) groupdel.8.xml:180(replaceable)
+#: groupadd.8.xml:301(replaceable) chage.1.xml:289(replaceable)
+msgid "0"
+msgstr "0"
+
+#: userdel.8.xml:254(para) useradd.8.xml:773(para) pwck.8.xml:310(para)
+#: passwd.1.xml:450(para) grpck.8.xml:252(para) groupdel.8.xml:182(para)
+#: groupadd.8.xml:303(para) chage.1.xml:291(para)
+msgid "success"
+msgstr "成功"
+
+#: userdel.8.xml:258(replaceable) useradd.8.xml:777(replaceable)
+#: su.1.xml:75(manvolnum) su.1.xml:415(replaceable) sg.1.xml:59(manvolnum)
+#: pwck.8.xml:314(replaceable) passwd.1.xml:65(manvolnum)
+#: passwd.1.xml:454(replaceable) newgrp.1.xml:59(manvolnum)
+#: login.1.xml:91(manvolnum) grpck.8.xml:256(replaceable)
+#: groups.1.xml:58(manvolnum) gpasswd.1.xml:63(manvolnum)
+#: expiry.1.xml:62(manvolnum) chsh.1.xml:61(manvolnum) chfn.1.xml:61(manvolnum)
+#: chage.1.xml:59(manvolnum) chage.1.xml:295(replaceable)
+msgid "1"
+msgstr "1"
+
+#: userdel.8.xml:260(para) useradd.8.xml:779(para)
+msgid "can't update password file"
+msgstr "无法更新密码文件"
+
+#: userdel.8.xml:264(replaceable) useradd.8.xml:783(replaceable)
+#: pwck.8.xml:320(replaceable) passwd.1.xml:460(replaceable)
+#: grpck.8.xml:262(replaceable) groupmod.8.xml:263(replaceable)
+#: groupdel.8.xml:186(replaceable) groupadd.8.xml:307(replaceable)
+#: chage.1.xml:301(replaceable)
+msgid "2"
+msgstr "2"
+
+#: userdel.8.xml:266(para) useradd.8.xml:785(para) pwck.8.xml:316(para)
+#: grpck.8.xml:258(para) groupdel.8.xml:188(para) groupadd.8.xml:309(para)
+#: chage.1.xml:303(para)
+msgid "invalid command syntax"
+msgstr "无效的命令语法"
+
+#: userdel.8.xml:270(replaceable) useradd.8.xml:801(replaceable)
+#: pwck.8.xml:344(replaceable) passwd.1.xml:484(replaceable)
+#: groupmod.8.xml:281(replaceable) groupdel.8.xml:192(replaceable)
+msgid "6"
+msgstr "6"
+
+#: userdel.8.xml:272(para)
+msgid "specified user doesn't exist"
+msgstr "指定的用户不存在"
+
+#: userdel.8.xml:278(para)
+msgid "user currently logged in"
+msgstr "用户已经登录"
+
+#: userdel.8.xml:282(replaceable) useradd.8.xml:813(replaceable)
+#: groupmod.8.xml:293(replaceable) groupdel.8.xml:204(replaceable)
+#: groupadd.8.xml:331(replaceable)
+msgid "10"
+msgstr "10"
+
+#: userdel.8.xml:284(para) useradd.8.xml:815(para) groupdel.8.xml:206(para)
+#: groupadd.8.xml:333(para)
+msgid "can't update group file"
+msgstr "无法更新组文件"
+
+#: userdel.8.xml:288(replaceable) useradd.8.xml:819(replaceable)
+#: groupmod.8.xml:305(replaceable)
+msgid "12"
+msgstr "12"
+
+#: userdel.8.xml:290(para)
+msgid "can't remove home directory"
+msgstr "无法删除主目录"
+
+#: userdel.8.xml:248(para)
+msgid ""
+"The <command>userdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr "<command>userdel</command> 命令使用如下值退出:<placeholder-1/>"
+
+#: userdel.8.xml:299(para)
+msgid ""
+"<command>userdel</command> will not allow you to remove an account if there "
+"are running processes which belong to this account. In that case, you may "
+"have to kill those processes or lock the user's password or account and "
+"remove the account later. The <option>-f</option> option can force the "
+"deletion of this account."
+msgstr ""
+"如果某账户有正在运行的进程,<command>userdel</command> 不会允许此账户。此时,"
+"您可能必须要杀死那写进程或者锁定用户的密码和账户,并稍后再删除账户。<option>-"
+"f</option> 选项可以强制此删除账户。"
+
+#: userdel.8.xml:306(para)
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this user."
+msgstr "您应该手动检查所以文件系统,以确保没有遗留此用户的文件。"
+
+#: userdel.8.xml:310(para)
+msgid ""
+"You may not remove any NIS attributes on a NIS client. This must be "
+"performed on the NIS server."
+msgstr "您不能在 NIS 客户端上移除任何 NIS 属性。这必须在 NIS 服务器上执行。"
+
+#: userdel.8.xml:313(para)
+msgid ""
+"If <option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename>, <command>userdel</"
+"command> will delete the group with the same name as the user. To avoid "
+"inconsistencies in the passwd and group databases, <command>userdel</"
+"command> will check that this group is not used as a primary group for "
+"another user, and will just warn without deleting the group otherwise. The "
+"<option>-f</option> option can force the deletion of this group."
+msgstr ""
+"如果在 <filename>/etc/login.defs</filename> 中 <option>USERGROUPS_ENAB</"
+"option> 设置为 <emphasis remap=\"I\">yes</emphasis>, <command>userdel</"
+"command> 将删除同名组。为了避免损坏 passwd 和 group 数据库,"
+"<command>userdel</command> 将会检查这个主是否被别的用户用作主组,如果有,将只"
+"发出警告并不删除此组。<option>-f</option> 选项可以强制删除此组。"
+
+#: userdel.8.xml:326(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"subids\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: useradd.8.xml:76(refentrytitle) useradd.8.xml:83(refname)
+#: useradd.8.xml:88(command) useradd.8.xml:95(command)
+#: useradd.8.xml:99(command) login.defs.5.xml:482(term)
+msgid "useradd"
+msgstr "useradd"
+
+#: useradd.8.xml:84(refpurpose)
+msgid "create a new user or update default new user information"
+msgstr "创建一个新用户或更新默认新用户信息"
+
+#: useradd.8.xml:96(arg) useradd.8.xml:100(arg)
+msgid "-D"
+msgstr "-D"
+
+#: useradd.8.xml:109(para)
+msgid ""
+"When invoked without the <option>-D</option> option, the <command>useradd</"
+"command> command creates a new user account using the values specified on "
+"the command line plus the default values from the system. Depending on "
+"command line options, the <command>useradd</command> command will update "
+"system files and may also create the new user's home directory and copy "
+"initial files."
+msgstr ""
+"如果使用时不带 <option>-D</option> 选项,<command>useradd</command> 命令使用"
+"命令行上指定的值和系统的默认值创建一个新用户。根据命令行选项,"
+"<command>useradd</command> 命令也会更新系统文件和创建新用户的主目录并复制初始"
+"文件。"
+
+#: useradd.8.xml:118(para)
+msgid ""
+"By default, a group will also be created for the new user (see <option>-g</"
+"option>, <option>-N</option>, <option>-U</option>, and "
+"<option>USERGROUPS_ENAB</option>)."
+msgstr ""
+"默认上,也会为用户创建组 (察看 <option>-g</option>, <option>-N</option>, "
+"<option>-U</option>,和 <option>USERGROUPS_ENAB</option>)。"
+
+#: useradd.8.xml:127(para)
+msgid "The options which apply to the <command>useradd</command> command are:"
+msgstr "<command>useradd</command> 可以使用的选项有:"
+
+#: useradd.8.xml:132(option) pwck.8.xml:187(option) newusers.8.xml:273(option)
+msgid "--badname"
+msgstr ""
+
+#: useradd.8.xml:141(term) useradd.8.xml:559(term)
+msgid ""
+"<option>-b</option>, <option>--base-dir</option>&nbsp;<replaceable>BASE_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-b</option>, <option>--base-dir</option>&nbsp;<replaceable>BASE_DIR</"
+"replaceable>"
+
+#: useradd.8.xml:145(para)
+msgid ""
+"The default base directory for the system if <option>-d</option>&nbsp;"
+"<replaceable>HOME_DIR</replaceable> is not specified. <replaceable>BASE_DIR</"
+"replaceable> is concatenated with the account name to define the home "
+"directory. If the <option>-m</option> option is not used, "
+"<replaceable>BASE_DIR</replaceable> must exist."
+msgstr ""
+"如果没有使用 <option>-d</option>&nbsp;<replaceable>HOME_DIR</replaceable>,则"
+"使用默认的基目录。<replaceable>BASE_DIR</replaceable> 加上账户名就是主目录。"
+"如果没有使用 <option>-m</option> 选项,<replaceable>BASE_DIR</replaceable> 必"
+"须已经存在。"
+
+#: useradd.8.xml:152(para)
+msgid ""
+"If this option is not specified, <command>useradd</command> will use the "
+"base directory specified by the <option>HOME</option> variable in <filename>/"
+"etc/default/useradd</filename>, or <filename>/home</filename> by default."
+msgstr ""
+"如果选项没有指定,<command>useradd</command> 将使用 <filename>/etc/default/"
+"useradd</filename> 中的 <option>HOME</option> 变量,或者默认的 <filename>/"
+"home</filename>。"
+
+#: useradd.8.xml:166(para)
+msgid ""
+"Any text string. It is generally a short description of the login, and is "
+"currently used as the field for the user's full name."
+msgstr "任何字符串。通常是关于登录的简短描述,当前用于用户全名。"
+
+#: useradd.8.xml:174(term)
+msgid ""
+"<option>-d</option>, <option>--home-dir</option>&nbsp;<replaceable>HOME_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home-dir</option>&nbsp;<replaceable>HOME_DIR</"
+"replaceable>"
+
+#: useradd.8.xml:178(para)
+msgid ""
+"The new user will be created using <replaceable>HOME_DIR</replaceable> as "
+"the value for the user's login directory. The default is to append the "
+"<replaceable>LOGIN</replaceable> name to <replaceable>BASE_DIR</replaceable> "
+"and use that as the login directory name. The directory "
+"<replaceable>HOME_DIR</replaceable> does not have to exist but will not be "
+"created if it is missing."
+msgstr ""
+"将创建新用户,并使用 <replaceable>HOME_DIR</replaceable> 作为用户登陆目录的"
+"值。默认值是将 <replaceable>LOGIN</replaceable> 名附加到 "
+"<replaceable>BASE_DIR</replaceable> 后面,并使用这作为登陆目录。目录不一定必"
+"须已经存在 <replaceable>HOME_DIR</replaceable>,但是会在需要时创建。"
+
+#: useradd.8.xml:190(term)
+msgid "<option>-D</option>, <option>--defaults</option>"
+msgstr "<option>-D</option>, <option>--defaults</option>"
+
+#: useradd.8.xml:194(para)
+msgid "See below, the subsection \"Changing the default values\"."
+msgstr "看下边,“更改默认值”子节。"
+
+#: useradd.8.xml:208(para)
+msgid ""
+"If not specified, <command>useradd</command> will use the default expiry "
+"date specified by the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or an empty string (no expiry) by default."
+msgstr ""
+"如果没有指定,<command>useradd</command> 将使用 <filename>/etc/default/"
+"useradd</filename> 中 <option>EXPIRE</option> 变量指定的默认过期日期,或者一"
+"个空字符串(不过期)。"
+
+#: useradd.8.xml:221(para)
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled. A value of 0 disables the account as soon as the password has "
+"expired, and a value of -1 disables the feature."
+msgstr ""
+"密码过期后,账户被彻底禁用之前的天数。0 表示立即禁用,-1 表示禁用这个功能。"
+
+#: useradd.8.xml:227(para)
+msgid ""
+"If not specified, <command>useradd</command> will use the default inactivity "
+"period specified by the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or -1 by default."
+msgstr ""
+"如果未指定,<command>useradd</command> 将使用 <filename>/etc/default/"
+"useradd</filename> 中的 <option>INACTIVE</option> 指定的默认禁用周期,或者默"
+"认为 -1。"
+
+#: useradd.8.xml:240(para)
+msgid ""
+"The group name or number of the user's initial login group. The group name "
+"must exist. A group number must refer to an already existing group."
+msgstr ""
+"用户初始登陆组的组名或号码。组名必须已经存在。组号码必须指代已经存在的组。"
+
+#: useradd.8.xml:245(para)
+msgid ""
+"If not specified, the behavior of <command>useradd</command> will depend on "
+"the <option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>. If this variable is set to <replaceable>yes</replaceable> (or "
+"<option>-U/--user-group</option> is specified on the command line), a group "
+"will be created for the user, with the same name as her loginname. If the "
+"variable is set to <replaceable>no</replaceable> (or <option>-N/--no-user-"
+"group</option> is specified on the command line), useradd will set the "
+"primary group of the new user to the value specified by the <option>GROUP</"
+"option> variable in <filename>/etc/default/useradd</filename>, or 100 by "
+"default."
+msgstr ""
+"如果没有指定, <command>useradd</command> 的行为将依赖于 <filename>/etc/"
+"login.defs</filename> 文件中的 <option>USERGROUPS_ENAB</option> 参数。如果此"
+"参数设置为了 <replaceable>yes</replaceable> (或者在命令行上指定了 <option>-"
+"U/--user-group</option>),将会为用户创建一个组,组名和登录名相同。如果选项设"
+"置为了 <replaceable>no</replaceable> (或者在命令行上指定了 <option>-N/--no-"
+"user-group</option>),useradd 会把新用户的主组设置为 <filename>/etc/default/"
+"useradd</filename> 中 <option>GROUP</option> 变量指定的值,再或者默认是 100。"
+
+#: useradd.8.xml:267(para)
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option. The default is for the user to belong only to "
+"the initial group."
+msgstr ""
+"用户还属于的附加组列表。每个组都用逗号隔开,没有中间的空格。这里的组受到了 "
+"<option>-g</option> 选项给定的组同样的限制。默认上,用户只属于初始组。"
+
+#: useradd.8.xml:284(term)
+msgid ""
+"<option>-k</option>, <option>--skel</option>&nbsp;<replaceable>SKEL_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-k</option>, <option>--skel</option>&nbsp;<replaceable>SKEL_DIR</"
+"replaceable>"
+
+#: useradd.8.xml:288(para)
+msgid ""
+"The skeleton directory, which contains files and directories to be copied in "
+"the user's home directory, when the home directory is created by "
+"<command>useradd</command>."
+msgstr ""
+"骨架目录,包含使用 <command>useradd</command> 创建用户时,要复制到用户主目录"
+"中的文件和目录。"
+
+#: useradd.8.xml:293(para)
+msgid ""
+"This option is only valid if the <option>-m</option> (or <option>--create-"
+"home</option>) option is specified."
+msgstr ""
+"这个选项只有在指定 <option>-m</option> (或 <option>--create-home</option>) 选"
+"项时才有效。"
+
+#: useradd.8.xml:297(para)
+msgid ""
+"If this option is not set, the skeleton directory is defined by the "
+"<option>SKEL</option> variable in <filename>/etc/default/useradd</filename> "
+"or, by default, <filename>/etc/skel</filename>."
+msgstr ""
+"如果此项没有设置,骨架目录使用 <filename>/etc/default/useradd</filename> 中"
+"的 <option>SKEL</option> 的变量或默认为 <filename>/etc/skel</filename>。"
+
+#: useradd.8.xml:303(para)
+msgid "If possible, the ACLs and extended attributes are copied."
+msgstr "如果可以,也复制 ACL 和扩展属性。"
+
+#: useradd.8.xml:309(term) groupadd.8.xml:137(term)
+msgid ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
+"replaceable>=<replaceable>VALUE</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
+"replaceable>=<replaceable>VALUE</replaceable>"
+
+#: useradd.8.xml:313(para)
+#, fuzzy
+#| msgid ""
+#| "Overrides <filename>/etc/login.defs</filename> defaults (<option>UID_MIN</"
+#| "option>, <option>UID_MAX</option>, <option>UMASK</option>, "
+#| "<option>PASS_MAX_DAYS</option> and others). <placeholder-1/> Example: "
+#| "<option>-K</option>&nbsp;<replaceable>PASS_MAX_DAYS</"
+#| "replaceable>=<replaceable>-1</replaceable> can be used when creating "
+#| "system account to turn off password ageing, even though system account "
+#| "has no password at all. Multiple <option>-K</option> options can be "
+#| "specified, e.g.: <option>-K</option>&nbsp;<replaceable>UID_MIN</"
+#| "replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+#| "<replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (<option>UID_MIN</"
+"option>, <option>UID_MAX</option>, <option>UMASK</option>, "
+"<option>PASS_MAX_DAYS</option> and others). <placeholder-1/> Example: "
+"<option>-K</option>&nbsp;<replaceable>PASS_MAX_DAYS</"
+"replaceable>=<replaceable>-1</replaceable> can be used when creating system "
+"account to turn off password aging, even though system account has no "
+"password at all. Multiple <option>-K</option> options can be specified, e."
+"g.: <option>-K</option>&nbsp;<replaceable>UID_MIN</"
+"replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+"<replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+"默认覆盖 <filename>/etc/login.defs</filename> (<option>UID_MIN</option>, "
+"<option>UID_MAX</option>, <option>UMASK</option>, <option>PASS_MAX_DAYS</"
+"option> 及其它)。<placeholder-1/> 例如:<option>-K</option>&nbsp;"
+"<replaceable>PASS_MAX_DAYS</replaceable>=<replaceable>-1</replaceable> 可以用"
+"于创建一个密码不会过期的系统账户,即使系统账户没有密码。可以指定多个 "
+"<option>-K</option> 选项,如:<option>-K</option>&nbsp;<replaceable>UID_MIN</"
+"replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+"<replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>"
+
+#: useradd.8.xml:334(term)
+msgid "<option>-l</option>, <option>--no-log-init</option>"
+msgstr "<option>-l</option>, <option>--no-log-init</option>"
+
+#: useradd.8.xml:336(para)
+msgid "Do not add the user to the lastlog and faillog databases."
+msgstr "不要将用户添加到最近登录和登录失败数据库。"
+
+#: useradd.8.xml:339(para)
+#, fuzzy
+#| msgid ""
+#| "By default, the user's entries in the lastlog and faillog databases are "
+#| "resetted to avoid reusing the entry from a previously deleted user."
+msgid ""
+"By default, the user's entries in the lastlog and faillog databases are "
+"reset to avoid reusing the entry from a previously deleted user."
+msgstr ""
+"默认上,最近登录和登录失败中用户的条目会被重置,以避免重新使用先前删除的用户"
+"的条目。"
+
+#: useradd.8.xml:347(term)
+msgid "<option>-m</option>, <option>--create-home</option>"
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:351(para)
+msgid ""
+"Create the user's home directory if it does not exist. The files and "
+"directories contained in the skeleton directory (which can be defined with "
+"the <option>-k</option> option) will be copied to the home directory."
+msgstr ""
+"如果不存在,则创建用户主目录。骨架目录中的文件和目录(可以使用 <option>-k</"
+"option> 选项指定),将会复制到主目录。"
+
+#: useradd.8.xml:357(para)
+msgid ""
+"By default, if this option is not specified and <option>CREATE_HOME</option> "
+"is not enabled, no home directories are created."
+msgstr ""
+"默认上,如果没有指定此选项并且 <option>CREATE_HOME</option> 没有启用,不会创"
+"建主目录。"
+
+#: useradd.8.xml:365(term)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid "<option>-M</option>, <option>--no-create-home</option>"
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:369(para)
+msgid ""
+"Do no create the user's home directory, even if the system wide setting from "
+"<filename>/etc/login.defs</filename> (<option>CREATE_HOME</option>) is set "
+"to <replaceable>yes</replaceable>."
+msgstr ""
+"不创建用户主目录,即使系统在 <filename>/etc/login.defs</filename> 中的设置 "
+"(<option>CREATE_HOME</option>) 为 <replaceable>yes</replaceable>。"
+
+#: useradd.8.xml:378(term)
+msgid "<option>-N</option>, <option>--no-user-group</option>"
+msgstr "<option>-N</option>, <option>--no-user-group</option>"
+
+#: useradd.8.xml:382(para)
+msgid ""
+"Do not create a group with the same name as the user, but add the user to "
+"the group specified by the <option>-g</option> option or by the "
+"<option>GROUP</option> variable in <filename>/etc/default/useradd</filename>."
+msgstr ""
+"不要创建同名组,而是将用户添加到 <option>-g</option> 选项指定的组,或根据 "
+"<filename>/etc/default/useradd</filename> 中的 <option>GROUP</option> 变量。"
+
+#: useradd.8.xml:388(para) useradd.8.xml:526(para)
+msgid ""
+"The default behavior (if the <option>-g</option>, <option>-N</option>, and "
+"<option>-U</option> options are not specified) is defined by the "
+"<option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+"如果没有指定 <option>-g</option>, <option>-N</option> 和 <option>-U</option> "
+"选项,默认行为由 <filename>/etc/login.defs</filename> 中的 "
+"<option>USERGROUPS_ENAB</option> 变量指定。"
+
+#: useradd.8.xml:401(para)
+msgid "Allow the creation of a user account with a duplicate (non-unique) UID."
+msgstr "允许使用重复的 UID 创建用户账户。"
+
+#: useradd.8.xml:402(para)
+msgid ""
+"This option is only valid in combination with the <option>-u</option> option."
+msgstr "此选项只有和 <option>-u</option> 选项组合使用才有效。"
+
+#: useradd.8.xml:413(para) groupadd.8.xml:171(para)
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>. The default is to "
+"disable the password."
+msgstr ""
+"加密了的密码,就像 <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry> 的返回值。默认为禁用密"
+"码。"
+
+#: useradd.8.xml:430(term) newusers.8.xml:302(term) groupadd.8.xml:188(term)
+msgid "<option>-r</option>, <option>--system</option>"
+msgstr "<option>-r</option>, <option>--system</option>"
+
+#: useradd.8.xml:434(para) newusers.8.xml:306(para)
+msgid "Create a system account."
+msgstr "创建一个系统账户。"
+
+#: useradd.8.xml:437(para)
+#, fuzzy
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are chosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>/etc/login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+"系统用户创建时,不会在 <filename>/etc/shadow</filename> 中有年龄信息,数字标"
+"识符会在 <option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> 之间选取,"
+"这两个值在 <filename>/etc/login.defs</filename> 中定义,而不是普通用户的 "
+"<option>UID_MIN</option>-<option>UID_MAX</option> (and their <option>GID</"
+"option> counterparts for the creation of groups)。"
+
+#: useradd.8.xml:446(para)
+#, fuzzy
+#| msgid ""
+#| "Note that <command>useradd</command> will not create a home directory for "
+#| "such an user, regardless of the default setting in <filename>/etc/login."
+#| "defs</filename> (<option>CREATE_HOME</option>). You have to specify the "
+#| "<option>-m</option> options if you want a home directory for a system "
+#| "account to be created."
+msgid ""
+"Note that <command>useradd</command> will not create a home directory for "
+"such a user, regardless of the default setting in <filename>/etc/login.defs</"
+"filename> (<option>CREATE_HOME</option>). You have to specify the <option>-"
+"m</option> options if you want a home directory for a system account to be "
+"created."
+msgstr ""
+"注意:<command>useradd</command> 不会为这种用户创建主目录,无论 <filename>/"
+"etc/login.defs</filename> (<option>CREATE_HOME</option>) 中是的默认设置是怎"
+"样。如果想为要创建的系统账户创建主目录,需要指定 <option>-m</option> 选项。"
+
+#: useradd.8.xml:490(para)
+msgid ""
+"The name of the user's login shell. The default is to leave this field "
+"blank, which causes the system to select the default login shell specified "
+"by the <option>SHELL</option> variable in <filename>/etc/default/useradd</"
+"filename>, or an empty string by default."
+msgstr ""
+"用户的登录 shell 名。默认为留空,让系统根据 <filename>/etc/default/useradd</"
+"filename> 中的 <option>SHELL</option> 变量选择默认的登录 shell,默认为空字符"
+"串。"
+
+#: useradd.8.xml:504(para)
+msgid ""
+"The numerical value of the user's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than or equal to "
+"<option>UID_MIN</option> and greater than every other user."
+msgstr ""
+"用户 ID 的数字值。此值必须为唯一的,除非使用了 <option>-o</option> 选项。此值"
+"必须非负,默认使用大于等于 <option>UID_MIN</option>,且大于任何其他用户 ID 最"
+"小值。"
+
+#: useradd.8.xml:511(para)
+msgid ""
+"See also the <option>-r</option> option and the <option>UID_MAX</option> "
+"description."
+msgstr "请参考 <option>-r</option> 选项和 <option>UID_MAX</option> 的描述。"
+
+#: useradd.8.xml:518(term)
+msgid "<option>-U</option>, <option>--user-group</option>"
+msgstr "<option>-U</option>, <option>--user-group</option>"
+
+#: useradd.8.xml:522(para)
+msgid ""
+"Create a group with the same name as the user, and add the user to this "
+"group."
+msgstr "创建一个和用户同名的组,并将用户添加到组中。"
+
+#: useradd.8.xml:539(para)
+msgid ""
+"The SELinux user for the user's login. The default is to leave this field "
+"blank, which causes the system to select the default SELinux user."
+msgstr ""
+"用户登陆的 SELinux 用户。默认为留空,这会造成系统选择默认的 SELinux 用户。"
+
+#: useradd.8.xml:549(title)
+msgid "Changing the default values"
+msgstr "更改默认值"
+
+#: useradd.8.xml:550(para)
+msgid ""
+"When invoked with only the <option>-D</option> option, <command>useradd</"
+"command> will display the current default values. When invoked with <option>-"
+"D</option> plus other options, <command>useradd</command> will update the "
+"default values for the specified options. Valid default-changing options are:"
+msgstr ""
+"只带 <option>-D</option> 选项使用时,<command>useradd</command> 将显示当前的"
+"默认值。<option>-D</option> 和其它选项配合使用时,<command>useradd</command> "
+"将为指定的选项更新默认值。有效的“更改默认值”选项有:"
+
+#: useradd.8.xml:563(para)
+msgid ""
+"The path prefix for a new user's home directory. The user's name will be "
+"affixed to the end of <replaceable>BASE_DIR</replaceable> to form the new "
+"user's home directory name, if the <option>-d</option> option is not used "
+"when creating a new account."
+msgstr ""
+"新用户主目录的路径前缀。如果创建新账户时,没有使用 <option>-d</option> 选项,"
+"用户的名称将会缀在 <replaceable>BASE_DIR</replaceable> 的后边形成新用户的主目"
+"录名。"
+
+#: useradd.8.xml:570(para)
+msgid ""
+"This option sets the <option>HOME</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+"这个选择在 <filename>/etc/default/useradd</filename> 中设置 <option>HOME</"
+"option> 选项。"
+
+#: useradd.8.xml:581(para)
+msgid "The date on which the user account is disabled."
+msgstr "禁用此用户账户的日期。"
+
+#: useradd.8.xml:582(para)
+msgid ""
+"This option sets the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+"此选项在 <filename>/etc/default/useradd</filename> 中设置 <option>EXPIRE</"
+"option> 变量。"
+
+#: useradd.8.xml:593(para)
+msgid ""
+"The number of days after a password has expired before the account will be "
+"disabled."
+msgstr "密码过期到账户被禁用之前的天数。"
+
+#: useradd.8.xml:597(para)
+msgid ""
+"This option sets the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+"这个选项在 <filename>/etc/default/useradd</filename> 中设置 "
+"<option>INACTIVE</option> 变量。"
+
+#: useradd.8.xml:608(para)
+msgid ""
+"The group name or ID for a new user's initial group (when the <option>-N/--"
+"no-user-group</option> is used or when the <option>USERGROUPS_ENAB</option> "
+"variable is set to <replaceable>no</replaceable> in <filename>/etc/login."
+"defs</filename>). The named group must exist, and a numerical group ID must "
+"have an existing entry."
+msgstr ""
+"新用户初始组的组名或 ID (使用了 <option>-N/--no-user-group</option> 或者 "
+"<filename>/etc/login.defs</filename> 中的变量 <option>USERGROUPS_ENAB</"
+"option> 设置为 <replaceable>no</replaceable> 时)。给出的组必须存在,并且数字"
+"组 ID 必须有一个已经存在的项。"
+
+#: useradd.8.xml:617(para)
+msgid ""
+"This option sets the <option>GROUP</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+"这个选项在 <filename>/etc/default/useradd</filename> 中设置 <option>GROUP</"
+"option> 变量。"
+
+#: useradd.8.xml:628(para)
+msgid "The name of a new user's login shell."
+msgstr "新用户的登录 shell 名。"
+
+#: useradd.8.xml:631(para)
+msgid ""
+"This option sets the <option>SHELL</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+"这个选项在 <filename>/etc/default/useradd</filename> 设置 <option>SHELL</"
+"option> 变量。"
+
+#: useradd.8.xml:643(title)
+msgid "NOTES"
+msgstr "注意:"
+
+#: useradd.8.xml:644(para)
+msgid ""
+"The system administrator is responsible for placing the default user files "
+"in the <filename>/etc/skel/</filename> directory (or any other skeleton "
+"directory specified in <filename>/etc/default/useradd</filename> or on the "
+"command line)."
+msgstr ""
+"系统管理员负责将默认的用户文件放在 <filename>/etc/skel/</filename> 目录中(或"
+"者命令行上、<filename>/etc/default/useradd</filename> 中指定的任何其它目录)。"
+
+#: useradd.8.xml:653(para)
+msgid ""
+"You may not add a user to a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr "您可能不能想 NIS 组或 LDAP 组添加用户。这只能在相应服务器上进行。"
+
+#: useradd.8.xml:658(para)
+msgid ""
+"Similarly, if the username already exists in an external user database such "
+"as NIS or LDAP, <command>useradd</command> will deny the user account "
+"creation request."
+msgstr ""
+"相似地,如果用户名已经存在于外部用户数据库中,比如 NIS 或 LDAP,"
+"<command>useradd</command> 将拒绝创建用户账户的请求。"
+
+#: useradd.8.xml:664(para)
+msgid ""
+"Usernames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+"用户名必须以一个小写字母或下划线开始,跟随小写字符、数字、下划线或连字符的组"
+"合。可以以美元符号结束。用正则表达式表示就是:[a-z_][a-z0-9_-]*[$]?"
+
+#: useradd.8.xml:670(para)
+msgid "Usernames may only be up to 32 characters long."
+msgstr "用户名不能超过 32 个字符长。"
+
+#: useradd.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>CREATE_HOME</option> (boolean)"
+msgstr "<option>CREATE_HOME</option> (boolean)"
+
+#: useradd.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"Indicate if a home directory should be created by default for new users."
+msgstr "指示是否应该为新用户默认创建主目录。"
+
+#: useradd.8.xml:36(para) login.defs.5.xml:36(para)
+msgid ""
+"This setting does not apply to system users, and can be overridden on the "
+"command line."
+msgstr "此设置并不应用到系统用户,并且可以使用命令行覆盖。"
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: groupadd.8.xml:32(term)
+msgid "<option>GID_MAX</option> (number)"
+msgstr "<option>GID_MAX</option> (number)"
+
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+#: groupadd.8.xml:33(term)
+msgid "<option>GID_MIN</option> (number)"
+msgstr "<option>GID_MIN</option> (number)"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+#: groupadd.8.xml:35(para)
+msgid ""
+"Range of group IDs used for the creation of regular groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+"<command>useradd</command>,<command>groupadd</command> 或 "
+"<command>newusers</command> 创建的常规组的组 ID 的范围。"
+
+#: useradd.8.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: groupadd.8.xml:40(para)
+msgid ""
+"The default value for <option>GID_MIN</option> (resp. <option>GID_MAX</"
+"option>) is 1000 (resp. 60000)."
+msgstr ""
+"<option>GID_MIN</option> 和 <option>GID_MAX</option> 的默认值分别是 1000 和 "
+"60000。"
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+#| msgid "<option>GID_MAX</option> (number)"
+msgid "<option>HOME_MODE</option> (number)"
+msgstr "<option>GID_MAX</option> (number)"
+
+#: useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The mode for new home directories. If not specified, the <option>UMASK</"
+"option> is used to create the mode."
+msgstr ""
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#, fuzzy
+#| msgid ""
+#| "<command>useradd</command> and <command>newusers</command> use this mask "
+#| "to set the mode of the home directory they create"
+msgid ""
+"<command>useradd</command> and <command>newusers</command> use this to set "
+"the mode of the home directory they create."
+msgstr ""
+"<command>useradd</command> 和 <command>newusers</command> 使用此掩码设置它们"
+"创建的用户主目录的模式。"
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_MAX_DAYS</option> (number)"
+msgstr "<option>PASS_MAX_DAYS</option> (number)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The maximum number of days a password may be used. If the password is older "
+"than this, a password change will be forced. If not specified, -1 will be "
+"assumed (which disables the restriction)."
+msgstr ""
+"一个密码可以使用的最大天数。如果密码比这旧,将会强迫更改密码。如果不指定,就"
+"假定为 -1,这会禁用这个限制。"
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_MIN_DAYS</option> (number)"
+msgstr "<option>PASS_MIN_DAYS</option> (number)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The minimum number of days allowed between password changes. Any password "
+"changes attempted sooner than this will be rejected. If not specified, -1 "
+"will be assumed (which disables the restriction)."
+msgstr ""
+"两次更改密码时间的最小间隔。将会拒绝任何早于此的更改密码的尝试。如果不指定,"
+"假定为 -1,将会禁用这个限制。"
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_WARN_AGE</option> (number)"
+msgstr "<option>PASS_WARN_AGE</option> (number)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The number of days warning given before a password expires. A zero means "
+"warning is given only upon the day of expiration, a negative value means no "
+"warning is given. If not specified, no warning will be provided."
+msgstr ""
+"密码过期之前给出警告的天数。0 表示只有只在过期的当天警告,负值表示不警告。如"
+"果没有指定,不会给警告。"
+
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: groupadd.8.xml:30(term)
+msgid "<option>SYS_GID_MAX</option> (number)"
+msgstr "<option>SYS_GID_MAX</option> (number)"
+
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: groupadd.8.xml:31(term)
+msgid "<option>SYS_GID_MIN</option> (number)"
+msgstr "<option>SYS_GID_MIN</option> (number)"
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: groupadd.8.xml:33(para)
+msgid ""
+"Range of group IDs used for the creation of system groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+"<command>useradd</command>、<command>groupadd</command> 或 "
+"<command>newusers</command> 创建的系统组的组 ID 的范围。"
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#: groupadd.8.xml:38(para)
+msgid ""
+"The default value for <option>SYS_GID_MIN</option> (resp. "
+"<option>SYS_GID_MAX</option>) is 101 (resp. <option>GID_MIN</option>-1)."
+msgstr ""
+"<option>SYS_GID_MIN</option> 和 <option>SYS_GID_MAX</option> 的默认值分别是 "
+"101 和 <option>GID_MIN</option>-1。"
+
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>SYS_UID_MAX</option> (number)"
+msgstr "<option>SYS_UID_MAX</option> (number)"
+
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+msgid "<option>SYS_UID_MIN</option> (number)"
+msgstr "<option>SYS_UID_MIN</option> (number)"
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+msgid ""
+"Range of user IDs used for the creation of system users by <command>useradd</"
+"command> or <command>newusers</command>."
+msgstr ""
+"<command>useradd</command> 或 <command>newusers</command> 创建的系统用户的用"
+"户 ID 的范围。"
+
+#: useradd.8.xml:37(para) newusers.8.xml:37(para) login.defs.5.xml:37(para)
+msgid ""
+"The default value for <option>SYS_UID_MIN</option> (resp. "
+"<option>SYS_UID_MAX</option>) is 101 (resp. <option>UID_MIN</option>-1)."
+msgstr ""
+"<option>SYS_UID_MIN</option> 和 <option>SYS_UID_MAX</option> 的默认值分别是 "
+"101 和 <option>UID_MIN</option>-1。"
+
+#: useradd.8.xml:30(term) pwck.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>TCB_AUTH_GROUP</option> (boolean)"
+msgstr "<option>TCB_AUTH_GROUP</option> (boolean)"
+
+#: useradd.8.xml:32(para) pwck.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"If <replaceable>yes</replaceable>, newly created tcb shadow files will be "
+"group owned by the <replaceable>auth</replaceable> group."
+msgstr ""
+"如果为 <replaceable>yes</replaceable>,新创建的 tcb 影子文件所属的组将是 "
+"<replaceable>auth</replaceable>。"
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>UID_MAX</option> (number)"
+msgstr "<option>UID_MAX</option> (number)"
+
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>UID_MIN</option> (number)"
+msgstr "<option>UID_MIN</option> (number)"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"Range of user IDs used for the creation of regular users by "
+"<command>useradd</command> or <command>newusers</command>."
+msgstr ""
+"<command>useradd</command> 或 <command>newusers</command> 创建的普通用户的用"
+"户 ID 的范围。"
+
+#: useradd.8.xml:39(para) newusers.8.xml:39(para) login.defs.5.xml:39(para)
+msgid ""
+"The default value for <option>UID_MIN</option> (resp. <option>UID_MAX</"
+"option>) is 1000 (resp. 60000)."
+msgstr ""
+"<option>UID_MIN</option> 和 <option>UID_MAX</option> 的默认值分别是 1000 和 "
+"60000。"
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: login.1.xml:32(term)
+msgid "<option>UMASK</option> (number)"
+msgstr "<option>UMASK</option> (number)"
+
+#: useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: login.1.xml:34(para)
+msgid ""
+"The file mode creation mask is initialized to this value. If not specified, "
+"the mask will be initialized to 022."
+msgstr "文件模式创建掩码初始化为此值。如果没有指定,掩码初始化为 022。"
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#: login.1.xml:38(para)
+#, fuzzy
+#| msgid ""
+#| "<command>useradd</command> and <command>newusers</command> use this mask "
+#| "to set the mode of the home directory they create"
+msgid ""
+"<command>useradd</command> and <command>newusers</command> use this mask to "
+"set the mode of the home directory they create if <option>HOME_MODE</option> "
+"is not set."
+msgstr ""
+"<command>useradd</command> 和 <command>newusers</command> 使用此掩码设置它们"
+"创建的用户主目录的模式。"
+
+#: useradd.8.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: login.1.xml:43(para)
+msgid ""
+"It is also used by <command>login</command> to define users' initial umask. "
+"Note that this mask can be overridden by the user's GECOS line (if "
+"<option>QUOTAS_ENAB</option> is set) or by the specification of a limit with "
+"the <emphasis>K</emphasis> identifier in "
+"<citerefentry><refentrytitle>limits</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"也被 <command>login</command> 用于指定用户的初始 umask。注意,此掩码可以被用"
+"户的 GECOS 行覆盖(当设置了 <option>QUOTAS_ENAB</option> 时),也可以被带 "
+"<emphasis>K</emphasis> 指示符的 <citerefentry><refentrytitle>limits</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry> 定义的限制值覆盖。"
+
+#: useradd.8.xml:51(para) newusers.8.xml:51(para) login.defs.5.xml:51(para)
+#: login.1.xml:51(para)
+msgid ""
+"It is also used by <command>pam_umask</command> as the default umask value."
+msgstr "也被 <command>pam_umask</command> 用作默认 umask 值。"
+
+#: useradd.8.xml:733(filename)
+msgid "/etc/default/useradd"
+msgstr "/etc/default/useradd"
+
+#: useradd.8.xml:735(para)
+msgid "Default values for account creation."
+msgstr "账户创建的默认值。"
+
+#: useradd.8.xml:739(filename)
+msgid "/etc/skel/"
+msgstr "/etc/skel/"
+
+#: useradd.8.xml:741(para)
+msgid "Directory containing default files."
+msgstr "包含默认文件的目录。"
+
+#: useradd.8.xml:789(replaceable) shadow.3.xml:58(manvolnum)
+#: pwck.8.xml:326(replaceable) passwd.1.xml:466(replaceable)
+#: grpck.8.xml:268(replaceable) groupmod.8.xml:269(replaceable)
+#: groupadd.8.xml:313(replaceable)
+msgid "3"
+msgstr "3"
+
+#: useradd.8.xml:791(para) passwd.1.xml:486(para) groupadd.8.xml:315(para)
+msgid "invalid argument to option"
+msgstr "给了选项一个无效的参数"
+
+#: useradd.8.xml:795(replaceable) pwck.8.xml:332(replaceable)
+#: passwd.1.xml:472(replaceable) grpck.8.xml:274(replaceable)
+#: groupmod.8.xml:275(replaceable) groupadd.8.xml:319(replaceable)
+msgid "4"
+msgstr "4"
+
+#: useradd.8.xml:797(para)
+msgid "UID already in use (and no <option>-o</option>)"
+msgstr "UID 已经使用 (且没有 <option>-o</option>)"
+
+#: useradd.8.xml:803(para) groupdel.8.xml:194(para)
+msgid "specified group doesn't exist"
+msgstr "指定的组不存在"
+
+#: useradd.8.xml:807(replaceable) groupmod.8.xml:287(replaceable)
+#: groupadd.8.xml:325(replaceable)
+msgid "9"
+msgstr "9"
+
+#: useradd.8.xml:809(para)
+msgid "username already in use"
+msgstr "用户名已被使用"
+
+#: useradd.8.xml:821(para)
+msgid "can't create home directory"
+msgstr "无法创建主目录"
+
+#: useradd.8.xml:825(replaceable)
+#, fuzzy
+#| msgid "1"
+msgid "14"
+msgstr "1"
+
+#: useradd.8.xml:827(para)
+msgid "can't update SELinux user mapping"
+msgstr ""
+
+#: useradd.8.xml:767(para)
+msgid ""
+"The <command>useradd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr "<command>useradd</command> 可以返回如下值:<placeholder-1/>"
+
+#: useradd.8.xml:836(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <phrase condition=\"subids"
+"\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: suauth.5.xml:41(contrib) pwconv.8.xml:47(contrib)
+#: login.access.5.xml:42(contrib) gpasswd.1.xml:46(contrib)
+msgid "Creation, 1996"
+msgstr ""
+
+#: suauth.5.xml:57(refentrytitle) suauth.5.xml:64(refname)
+msgid "suauth"
+msgstr "suauth"
+
+#: suauth.5.xml:58(manvolnum) shadow.5.xml:58(manvolnum)
+#: pwck.8.xml:338(replaceable) porttime.5.xml:58(manvolnum)
+#: passwd.5.xml:58(manvolnum) passwd.1.xml:478(replaceable)
+#: login.defs.5.xml:125(manvolnum) login.access.5.xml:59(manvolnum)
+#: limits.5.xml:60(manvolnum) gshadow.5.xml:47(manvolnum)
+#: grpck.8.xml:280(replaceable) faillog.5.xml:58(manvolnum)
+msgid "5"
+msgstr "5"
+
+#: suauth.5.xml:59(refmiscinfo) shadow.5.xml:59(refmiscinfo)
+#: porttime.5.xml:59(refmiscinfo) passwd.5.xml:59(refmiscinfo)
+#: login.defs.5.xml:126(refmiscinfo) login.access.5.xml:60(refmiscinfo)
+#: limits.5.xml:61(refmiscinfo) gshadow.5.xml:48(refmiscinfo)
+#: faillog.5.xml:59(refmiscinfo)
+msgid "File Formats and Conversions"
+msgstr "文件格式和转化"
+
+#: suauth.5.xml:65(refpurpose)
+msgid "detailed su control file"
+msgstr "详细的 su 控制文件"
+
+#: suauth.5.xml:70(command) suauth.5.xml:196(filename)
+msgid "/etc/suauth"
+msgstr "/etc/suauth"
+
+#: suauth.5.xml:76(para)
+msgid ""
+"The file <filename>/etc/suauth</filename> is referenced whenever the su "
+"command is called. It can change the behaviour of the su command, based upon:"
+msgstr ""
+"执行 su 命令时,总是根据 <filename>/etc/suauth</filename>,可以更改 su 命令的"
+"行为,规则是:"
+
+#. .RS
+#: suauth.5.xml:83(literallayout)
+#, fuzzy, no-wrap
+#| msgid ""
+#| "\n"
+#| " 1) the user su is targetting\n"
+#| " "
+msgid ""
+"\n"
+" 1) the user su is targeting\n"
+" "
+msgstr ""
+"\n"
+" 1) su 到的用户\n"
+" "
+
+#. .fi
+#: suauth.5.xml:87(para)
+msgid ""
+"2) the user executing the su command (or any groups he might be a member of)"
+msgstr "2) 执行 su 命令的用户 (或者他可能属于的组)"
+
+#: suauth.5.xml:92(para)
+msgid ""
+"The file is formatted like this, with lines starting with a # being treated "
+"as comment lines and ignored;"
+msgstr "文件格式为:以 # 开头的行视为注视,并被忽略;"
+
+#: suauth.5.xml:97(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+" to-id:from-id:ACTION\n"
+" "
+msgstr ""
+"\n"
+" to-id:from-id:ACTION\n"
+" "
+
+#: suauth.5.xml:101(para)
+msgid ""
+"Where to-id is either the word <emphasis>ALL</emphasis>, a list of usernames "
+"delimited by \",\" or the words <emphasis>ALL EXCEPT</emphasis> followed by "
+"a list of usernames delimited by \",\"."
+msgstr ""
+"此处的 to-id 可以是:<emphasis>ALL</emphasis>,逗号(,) 分隔的用户名列表或者 "
+"<emphasis>ALL EXCEPT</emphasis> 后跟逗号分隔的用户名列表。"
+
+#: suauth.5.xml:107(para)
+#, fuzzy
+#| msgid ""
+#| "from-id is formatted the same as to-id except the extra word "
+#| "<emphasis>GROUP</emphasis> is recognised. <emphasis>ALL EXCEPT GROUP</"
+#| "emphasis> is perfectly valid too. Following <emphasis>GROUP</emphasis> "
+#| "appears one or more group names, delimited by \",\". It is not sufficient "
+#| "to have primary group id of the relevant group, an entry in "
+#| "<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry> is neccessary."
+msgid ""
+"from-id is formatted the same as to-id except the extra word "
+"<emphasis>GROUP</emphasis> is recognized. <emphasis>ALL EXCEPT GROUP</"
+"emphasis> is perfectly valid too. Following <emphasis>GROUP</emphasis> "
+"appears one or more group names, delimited by \",\". It is not sufficient to "
+"have primary group id of the relevant group, an entry in "
+"<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry> is necessary."
+msgstr ""
+"from-id 格式和 to-id 相同,但是可以多识别一个词 <emphasis>GROUP</emphasis>。"
+"<emphasis>ALL EXCEPT GROUP</emphasis> 也是有效的。<emphasis>GROUP</emphasis> "
+"后边是一个或更多的组名称,使用逗号(,)分隔。不光要有相关主组的 ID,也需要在 "
+"<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry> 中有一个条目。"
+
+#: suauth.5.xml:118(para)
+msgid "Action can be one only of the following currently supported options."
+msgstr "动作只可以使用如下当前支持的选项。"
+
+#: suauth.5.xml:124(emphasis)
+msgid "DENY"
+msgstr "DENY"
+
+#: suauth.5.xml:127(para)
+msgid "The attempt to su is stopped before a password is even asked for."
+msgstr "su 的尝试在询问密码之前就被拒绝。"
+
+#: suauth.5.xml:134(emphasis)
+msgid "NOPASS"
+msgstr "NOPASS"
+
+#: suauth.5.xml:137(para)
+msgid ""
+"The attempt to su is automatically successful; no password is asked for."
+msgstr "su 尝试自动成功,而且不询问密码。"
+
+#: suauth.5.xml:145(emphasis)
+msgid "OWNPASS"
+msgstr "OWNPASS"
+
+#: suauth.5.xml:148(para)
+msgid ""
+"For the su command to be successful, the user must enter his or her own "
+"password. They are told this."
+msgstr "为了成功执行 su,用户必须提供自己的密码。将会提示他们这样。"
+
+#: suauth.5.xml:156(para)
+msgid ""
+"Note there are three separate fields delimited by a colon. No whitespace "
+"must surround this colon. Also note that the file is examined sequentially "
+"line by line, and the first applicable rule is used without examining the "
+"file further. This makes it possible for a system administrator to exercise "
+"as fine control as he or she wishes."
+msgstr ""
+"注意,有三个用冒号分割的字段。冒号旁边不能有空格。也请注意,这个文件会被一行"
+"一行地依次检查,会使用第一个可用的规则,而不会继续检查文件。这可以让系统管理"
+"员使系统尽量符合其期望。"
+
+#: suauth.5.xml:166(title)
+msgid "EXAMPLE"
+msgstr "示例"
+
+#: suauth.5.xml:167(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+" # sample /etc/suauth file\n"
+" #\n"
+" # A couple of privileged usernames may\n"
+" # su to root with their own password.\n"
+" #\n"
+" root:chris,birddog:OWNPASS\n"
+" #\n"
+" # Anyone else may not su to root unless in\n"
+" # group wheel. This is how BSD does things.\n"
+" #\n"
+" root:ALL EXCEPT GROUP wheel:DENY\n"
+" #\n"
+" # Perhaps terry and birddog are accounts\n"
+" # owned by the same person.\n"
+" # Access can be arranged between them\n"
+" # with no password.\n"
+" #\n"
+" terry:birddog:NOPASS\n"
+" birddog:terry:NOPASS\n"
+" #\n"
+" "
+msgstr ""
+"\n"
+" # 示例 /etc/suauth 文件\n"
+" #\n"
+" # 有两个用户可以使用自己的密码 su 成 root\n"
+" #\n"
+" root:chris,birddog:OWNPASS\n"
+" #\n"
+" # 任何其他人都不能 su 成 root,除非在 wheel 组中。\n"
+" # BSD 就是这样实现这个功能的。\n"
+" #\n"
+" root:ALL EXCEPT GROUP wheel:DENY\n"
+" #\n"
+" # 或许 terry 和 birddog 是属于同一个人的账户\n"
+" # 两个账户直接互相 su,不需要密码\n"
+" #\n"
+" terry:birddog:NOPASS\n"
+" birddog:terry:NOPASS\n"
+" #\n"
+" "
+
+#: suauth.5.xml:203(title) pwconv.8.xml:216(title) login.defs.5.xml:531(title)
+msgid "BUGS"
+msgstr "缺陷"
+
+#: suauth.5.xml:204(para)
+msgid ""
+"There could be plenty lurking. The file parser is particularly unforgiving "
+"about syntax errors, expecting no spurious whitespace (apart from beginning "
+"and end of lines), and a specific token delimiting different things."
+msgstr ""
+"可能会有很多潜在问题。文件解析器尤其不能容忍语法错误,不能有无意义的空白符(除"
+"了行首和行尾),并且使用特定的标记分割不同的事情。"
+
+#: suauth.5.xml:213(title) shadow.3.xml:208(title)
+msgid "DIAGNOSTICS"
+msgstr ""
+
+#: suauth.5.xml:214(para)
+msgid ""
+"An error parsing the file is reported using "
+"<citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry> as level ERR on facility AUTH."
+msgstr ""
+"此文件的解析错误会使用 <citerefentry><refentrytitle>syslogd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry> 作为 AUTH 中的 ERR 级别"
+"报告。"
+
+#: suauth.5.xml:223(para)
+msgid ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: su.1.xml:58(contrib) shadow.5.xml:41(contrib) shadow.3.xml:41(contrib)
+#: porttime.5.xml:41(contrib) passwd.5.xml:41(contrib) passwd.1.xml:48(contrib)
+#: login.1.xml:74(contrib) faillog.8.xml:41(contrib) faillog.5.xml:41(contrib)
+msgid "Creation, 1989"
+msgstr ""
+
+#: su.1.xml:74(refentrytitle) su.1.xml:81(refname) su.1.xml:86(command)
+#: login.defs.5.xml:456(term)
+msgid "su"
+msgstr "su"
+
+#: su.1.xml:76(refmiscinfo) sg.1.xml:60(refmiscinfo)
+#: passwd.1.xml:66(refmiscinfo) newgrp.1.xml:60(refmiscinfo)
+#: login.1.xml:92(refmiscinfo) groups.1.xml:59(refmiscinfo)
+#: gpasswd.1.xml:64(refmiscinfo) expiry.1.xml:63(refmiscinfo)
+#: chsh.1.xml:62(refmiscinfo) chfn.1.xml:62(refmiscinfo)
+#: chage.1.xml:60(refmiscinfo)
+msgid "User Commands"
+msgstr "用户命令"
+
+#: su.1.xml:82(refpurpose)
+msgid "change user ID or become superuser"
+msgstr "更改用户 ID 或成为超级用户"
+
+#: su.1.xml:91(replaceable) sg.1.xml:72(arg) newgrp.1.xml:71(arg)
+msgid "-"
+msgstr "-"
+
+#: su.1.xml:94(replaceable) login.1.xml:107(replaceable)
+#: login.1.xml:115(replaceable)
+msgid "username"
+msgstr "用户名"
+
+#: su.1.xml:96(replaceable)
+msgid "args"
+msgstr ""
+
+#: su.1.xml:104(para)
+#, fuzzy
+#| msgid ""
+#| "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."
+msgid ""
+"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."
+msgstr ""
+"<command>su</command> 用于让用户在登录期间变成另外一个用户。后边不带 "
+"<option>username</option> 使用时,<command>su</command> 默认会变成超级用户。"
+"可选的选项 <option>-</option>,可以用于提供一个类似于用户直接登录的环境,用户"
+"可能期望是这样的。"
+
+#: su.1.xml:114(para)
+msgid ""
+"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>."
+msgstr ""
+
+#: su.1.xml:122(para)
+msgid ""
+"The user will be prompted for a password, if appropriate. Invalid passwords "
+"will produce an error message. All attempts, both valid and invalid, are "
+"logged to detect abuse of the system."
+msgstr ""
+"如果合适,将提示用户输入一个密码。输入无效的密码会产生一个错误消息。所有的尝"
+"试,无论成功还是失败,都会被记录,以检测对系统的滥用。"
+
+#: su.1.xml:127(para)
+msgid ""
+"The current environment is passed to the new shell. The value of <envar>"
+"$PATH</envar> is reset to <filename>/bin:/usr/bin</filename> for normal "
+"users, or <filename>/sbin:/bin:/usr/sbin:/usr/bin</filename> for the "
+"superuser. This may be changed with the <option>ENV_PATH</option> and "
+"<option>ENV_SUPATH</option> definitions in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+"当前环境会传递给新 shell。对于普通用户,<envar>$PATH</envar> 的值重置为 "
+"<filename>/bin:/usr/bin</filename>,而对于超级用户则是 <filename>/sbin:/bin:/"
+"usr/sbin:/usr/bin</filename>。这会随 <filename>/etc/login.defs</filename> 中"
+"的 <option>ENV_PATH</option> 和 <option>ENV_SUPATH</option> 值改变。"
+
+#: su.1.xml:136(para) login.1.xml:188(para)
+msgid ""
+"A subsystem login is indicated by the presence of a \"*\" as the first "
+"character of the login shell. The given home directory will be used as the "
+"root of a new file system which the user is actually logged into."
+msgstr ""
+"在登录 shell 中以第一个字符是“*”标注的是子系统登录。给定的主目录将被用于用户"
+"实际登录的新文件系统的根。"
+
+#: su.1.xml:145(para)
+msgid "The options which apply to the <command>su</command> command are:"
+msgstr "<command>su</command> 命令可以接受的选项有:"
+
+#: su.1.xml:149(term)
+msgid ""
+"<option>-c</option>, <option>--command</option>&nbsp;<replaceable>COMMAND</"
+"replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--command</option>&nbsp;<replaceable>COMMAND</"
+"replaceable>"
+
+#: su.1.xml:153(para)
+msgid ""
+"Specify a command that will be invoked by the shell using its <option>-c</"
+"option>."
+msgstr "通过使用其 <option>-c</option> 选项,指定一个由 shell 运行的命令。"
+
+#: su.1.xml:157(para)
+#, fuzzy
+#| msgid ""
+#| "The executed command will have no controlling terminal. This option "
+#| "cannot be used to execute interractive programs which need a controlling "
+#| "TTY."
+msgid ""
+"The executed command will have no controlling terminal. This option cannot "
+"be used to execute interactive programs which need a controlling TTY."
+msgstr ""
+"执行的命令将不会拥有控制终端。此选项不能用于执行需要控制 TTY 的交互程序。"
+
+#: su.1.xml:167(term)
+msgid "<option>-</option>, <option>-l</option>, <option>--login</option>"
+msgstr "<option>-</option>, <option>-l</option>, <option>--login</option>"
+
+#: su.1.xml:171(para)
+msgid ""
+"Provide an environment similar to what the user would expect had the user "
+"logged in directly."
+msgstr "提供一个类似于用户直接登录的环境,用户可能会希望这样。"
+
+#: su.1.xml:175(para)
+#, fuzzy
+#| msgid ""
+#| "When <option>-</option> is used, it must be specified as the last "
+#| "<command>su</command> option. The other forms (<option>-l</option> and "
+#| "<option>--login</option>) do not have this restriction."
+msgid ""
+"When <option>-</option> is used, it must be specified before any "
+"<option>username</option>. For portability it is recommended to use it as "
+"last option, before any <option>username</option>. The other forms (<option>-"
+"l</option> and <option>--login</option>) do not have this restriction."
+msgstr ""
+"使用了 <option>-</option> 时,它必须是 <command>su</command> 的最后一个参数。"
+"其它形式(<option>-l</option> 和 <option>--login</option>) 没有这个限制。"
+
+#: su.1.xml:190(para)
+msgid "The shell that will be invoked."
+msgstr "将使用的 shell。"
+
+#: su.1.xml:198(para)
+msgid "The shell specified with --shell."
+msgstr "通过 --shell 指定的 shell。"
+
+#: su.1.xml:201(para)
+msgid ""
+"If <option>--preserve-environment</option> is used, the shell specified by "
+"the <envar>$SHELL</envar> environment variable."
+msgstr ""
+"如果使用了 <option>--preserve-environment</option>,shell 将由 <envar>"
+"$SHELL</envar> 环境变量指定。"
+
+#: su.1.xml:208(para)
+msgid ""
+"The shell indicated in the <filename>/etc/passwd</filename> entry for the "
+"target user."
+msgstr "在 <filename>/etc/passwd</filename> 的相应项中为目标用户指定的 shell。"
+
+#: su.1.xml:214(para)
+msgid ""
+"<filename>/bin/sh</filename> if a shell could not be found by any above "
+"method."
+msgstr ""
+"如果无法通过以上办法找到一个 shell,则使用 <filename>/bin/sh</filename>。"
+
+#: su.1.xml:191(para)
+msgid ""
+"The invoked shell is chosen from (highest priority first): <placeholder-1/>"
+msgstr "使用的 shell 在如下中选择(高优先级在前):<placeholder-1/>"
+
+#: su.1.xml:219(para)
+msgid ""
+"If the target user has a restricted shell (i.e. the shell field of this "
+"user's entry in <filename>/etc/passwd</filename> is not listed in <filename>/"
+"etc/shells</filename>), then the <option>--shell</option> option or the "
+"<envar>$SHELL</envar> environment variable won't be taken into account, "
+"unless <command>su</command> is called by root."
+msgstr ""
+"如果目标用户的 shell 是有限制的(即,<filename>/etc/passwd</filename> 中用户项"
+"中的 shell 字段没有在 <filename>/etc/shells</filename> 中列出),那么 "
+"<option>--shell</option> 选项或 <envar>$SHELL</envar> 环境变量不会带入账户,"
+"除非 <command>su</command> 是被 root 调用的。"
+
+#: su.1.xml:230(term)
+msgid ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+msgstr ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+
+#: su.1.xml:239(envar)
+msgid "$PATH"
+msgstr "$PATH"
+
+#: su.1.xml:241(para)
+msgid ""
+"reset according to the <filename>/etc/login.defs</filename> options "
+"<option>ENV_PATH</option> or <option>ENV_SUPATH</option> (see below);"
+msgstr ""
+"根据 <filename>/etc/login.defs</filename> 中的 <option>ENV_PATH</option> or "
+"<option>ENV_SUPATH</option> 选项重设 (请往下看)"
+
+#: su.1.xml:250(envar)
+msgid "$IFS"
+msgstr "$IFS"
+
+#: su.1.xml:252(para)
+msgid ""
+"reset to <quote>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</quote>, if it was "
+"set."
+msgstr ""
+"如果已经设置了,重设 <quote>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</quote>。"
+
+#: su.1.xml:235(para)
+msgid "Preserve the current environment, except for: <placeholder-1/>"
+msgstr "保留当前环境,除非:<placeholder-1/>"
+
+#: su.1.xml:261(para)
+msgid ""
+"If the target user has a restricted shell, this option has no effect (unless "
+"<command>su</command> is called by root)."
+msgstr ""
+"如果用户的 shell 受限,此选项无效 (除非是 root 调用的 <command>su</"
+"command>)。"
+
+#: su.1.xml:270(para)
+msgid ""
+"The <envar>$HOME</envar>, <envar>$SHELL</envar>, <envar>$USER</envar>, "
+"<envar>$LOGNAME</envar>, <envar>$PATH</envar>, and <envar>$IFS</envar> "
+"environment variables are reset."
+msgstr ""
+"The <envar>$HOME</envar>, <envar>$SHELL</envar>, <envar>$USER</envar>, "
+"<envar>$LOGNAME</envar>, <envar>$PATH</envar>, 和 <envar>$IFS</envar> 这些环"
+"境变量会被重置。"
+
+#: su.1.xml:279(para)
+msgid ""
+"If <option>--login</option> is not used, the environment is copied, except "
+"for the variables above."
+msgstr "如果没有使用 <option>--login</option>,复制环境,上述几个变量除外。"
+
+#: su.1.xml:286(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TERM</envar>, <envar>"
+"$COLORTERM</envar>, <envar>$DISPLAY</envar>, and <envar>$XAUTHORITY</envar> "
+"environment variables are copied if they were set."
+msgstr ""
+"如果使用了 <option>--login</option>,如果设置了 <envar>$TERM</envar>, <envar>"
+"$COLORTERM</envar>, <envar>$DISPLAY</envar> 和 <envar>$XAUTHORITY</envar>,这"
+"些环境变量也会被重置。"
+
+#: su.1.xml:296(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TZ</envar>, <envar>$HZ</"
+"envar>, and <envar>$MAIL</envar> environment variables are set according to "
+"the <filename>/etc/login.defs</filename> options <option>ENV_TZ</option>, "
+"<option>ENV_HZ</option>, <option>MAIL_DIR</option>, and <option>MAIL_FILE</"
+"option> (see below)."
+msgstr ""
+"如果使用了 <option>--login</option>,环境变量 <envar>$TZ</envar>, <envar>"
+"$HZ</envar>, and <envar>$MAIL</envar> 也会根据 <filename>/etc/login.defs</"
+"filename> 中的选项 <option>ENV_TZ</option>, <option>ENV_HZ</option>, "
+"<option>MAIL_DIR</option> 和 <option>MAIL_FILE</option> 重置 (请看下边)。"
+
+#: su.1.xml:309(para)
+msgid ""
+"If <option>--login</option> is used, other environment variables might be "
+"set by the <option>ENVIRON_FILE</option> file (see below)."
+msgstr ""
+"如果使用了 <option>--login</option>,其它环境变量可能会根据 "
+"<option>ENVIRON_FILE</option> 文件来设置(请看下边)。"
+
+#: su.1.xml:317(para)
+msgid "Other environments might be set by PAM modules."
+msgstr "其它环境可能由 PAM 模块设置。"
+
+#: su.1.xml:265(para)
+msgid ""
+"Note that the default behavior for the environment is the following: "
+"<placeholder-1/>"
+msgstr "注意,环境的默认行为如下:<placeholder-1/>"
+
+#: su.1.xml:331(para)
+msgid ""
+"This version of <command>su</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+"此版本的 <command>su</command> 有很多编译选项,在某些机器上,可能只使用了其中"
+"的一部分。"
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>CONSOLE</option> (string)"
+msgstr "<option>CONSOLE</option> (string)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, either full pathname of a file containing device names (one per "
+"line) or a \":\" delimited list of device names. Root logins will be allowed "
+"only upon these devices."
+msgstr ""
+"如果定义了,或者是包含设备名(没行一个)的文件的完整路径名,或者是“:”分隔的设备"
+"名列表。将只会在这写设备上允许 root 登录。"
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid "If not defined, root will be allowed on any device."
+msgstr "如果没有定义,可以在任何设备上使用 root。"
+
+#: su.1.xml:42(para) login.defs.5.xml:42(para) login.1.xml:42(para)
+msgid "The device should be specified without the /dev/ prefix."
+msgstr "指定的设备时不带 /dev/ 前缀。"
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>CONSOLE_GROUPS</option> (string)"
+msgstr "<option>CONSOLE_GROUPS</option> (string)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"List of groups to add to the user's supplementary groups set when logging in "
+"on the console (as determined by the CONSOLE setting). Default is none. "
+"<placeholder-1/> Use with caution - it is possible for users to gain "
+"permanent access to these groups, even when not logged in on the console."
+msgstr ""
+"在控制台登录时,添加到用户附加组集中的组列表(就如 CONSOLE 所确定的)。默认是"
+"无。<placeholder-1/> 使用时需要注意:这可能使用户获取这些组的永久权限,甚至登"
+"录到的不是此控制台时。"
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>DEFAULT_HOME</option> (boolean)"
+msgstr "<option>DEFAULT_HOME</option> (boolean)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Indicate if login is allowed if we can't cd to the home directory. Default "
+"is no."
+msgstr "如果不能 cd 到主目录时,说明是否允许登录。默认是否。"
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, the user will login in the root "
+"(<filename>/</filename>) directory if it is not possible to cd to her home "
+"directory."
+msgstr ""
+"如果设置为 <replaceable>yes</replaceable>,如果不能 cd 到主目录时,用户将会登"
+"录到根目录(<filename>/</filename>)。"
+
+#. XXX: When compiled with PAM support, only sulogin uses ENV_HZ
+#: su.1.xml:33(term) login.defs.5.xml:33(term) login.1.xml:33(term)
+msgid "<option>ENV_HZ</option> (string)"
+msgstr "<option>ENV_HZ</option> (string)"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"If set, it will be used to define the HZ environment variable when a user "
+"login. The value must be preceded by <replaceable>HZ=</replaceable>. A "
+"common value on Linux is <replaceable>HZ=100</replaceable>."
+msgstr ""
+"如果设置了,将会用于在用户登录时定义 HZ 环境变量。值必须以 <replaceable>HZ=</"
+"replaceable> 开头。Linux 上的常用值是 <replaceable>HZ=100</replaceable>。"
+
+#: su.1.xml:41(para) login.defs.5.xml:41(para) login.1.xml:41(para)
+msgid ""
+"The <envar>HZ</envar> environment variable is only set when the user (the "
+"superuser) logs in with <command>sulogin</command>."
+msgstr ""
+"<envar>HZ</envar> 环境变量只有当用户(超级用户)使用 <command>sulogin</"
+"command> 登录时才设置。"
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENVIRON_FILE</option> (string)"
+msgstr "<option>ENVIRON_FILE</option> (string)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If this file exists and is readable, login environment will be read from it. "
+"Every line should be in the form name=value."
+msgstr ""
+"如果此文件存在,并且可读,将会从中读取登录环境。所有行都必须是 name=value 的"
+"格式。"
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid "Lines starting with a # are treated as comment lines and ignored."
+msgstr "以 # 开头的行将视为注释,并被忽略。"
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENV_PATH</option> (string)"
+msgstr "<option>ENV_PATH</option> (string)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+#, fuzzy
+#| msgid ""
+#| "If set, it will be used to define the PATH environment variable when a "
+#| "regular user login. The value can be preceded by <replaceable>PATH=</"
+#| "replaceable>, or a colon separated list of paths (for example "
+#| "<replaceable>/bin:/usr/bin</replaceable>). The default value is "
+#| "<replaceable>PATH=/bin:/usr/bin</replaceable>."
+msgid ""
+"If set, it will be used to define the PATH environment variable when a "
+"regular user login. The value is a colon separated list of paths (for "
+"example <replaceable>/bin:/usr/bin</replaceable>) and can be preceded by "
+"<replaceable>PATH=</replaceable>. The default value is <replaceable>PATH=/"
+"bin:/usr/bin</replaceable>."
+msgstr ""
+"如果设置了,它将用于定义普通用户登录时的 PATH 环境变量。此值可以用 "
+"<replaceable>PATH=</replaceable> 开头,或者是冒号分隔的路径列表 (例如 "
+"<replaceable>/bin:/usr/bin</replaceable>)。默认的值是 <replaceable>PATH=/"
+"bin:/usr/bin</replaceable>。"
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENV_SUPATH</option> (string)"
+msgstr "<option>ENV_SUPATH</option> (string)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+#, fuzzy
+#| msgid ""
+#| "If set, it will be used to define the PATH environment variable when the "
+#| "superuser login. The value can be preceded by <replaceable>PATH=</"
+#| "replaceable>, or a colon separated list of paths (for example "
+#| "<replaceable>/sbin:/bin:/usr/sbin:/usr/bin</replaceable>). The default "
+#| "value is <replaceable>PATH=/sbin:/bin:/usr/sbin:/usr/bin</replaceable>."
+msgid ""
+"If set, it will be used to define the PATH environment variable when the "
+"superuser login. The value is a colon separated list of paths (for example "
+"<replaceable>/sbin:/bin:/usr/sbin:/usr/bin</replaceable>) and can be "
+"preceded by <replaceable>PATH=</replaceable>. The default value is "
+"<replaceable>PATH=/sbin:/bin:/usr/sbin:/usr/bin</replaceable>."
+msgstr ""
+"如果设置了,它将用于定义超级用户登录时的 PATH 环境变量。此值可以用 "
+"<replaceable>PATH=</replaceable> 开头,或者是冒号分隔的路径列表 (例如 "
+"<replaceable>/sbin:/bin:/usr/sbin:/usr/bin</replaceable>)。默认值是 "
+"<replaceable>PATH=/sbin:/bin:/usr/sbin:/usr/bin</replaceable>。"
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENV_TZ</option> (string)"
+msgstr "<option>ENV_TZ</option> (string)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the TZ environment variable when a user "
+"login. The value can be the name of a timezone preceded by <replaceable>TZ=</"
+"replaceable> (for example <replaceable>TZ=CST6CDT</replaceable>), or the "
+"full path to the file containing the timezone specification (for example "
+"<filename>/etc/tzname</filename>)."
+msgstr ""
+"如果设置了,它将用于在用户登录时定义 TZ 环境变量。此值可以是以 "
+"<replaceable>TZ=</replaceable> 开头的时区名(例如 <replaceable>TZ=CST6CDT</"
+"replaceable>),或者是包含时区规则的文件完整路径(例如 <filename>/etc/tzname</"
+"filename>)。"
+
+#. TODO: it can in fact be used to set any other variable
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"If a full path is specified but the file does not exist or cannot be read, "
+"the default is to use <replaceable>TZ=CST6CDT</replaceable>."
+msgstr ""
+"如果将完整路径指定为了一个不存在或不可读的文件,则默认使用 "
+"<replaceable>TZ=CST6CDT</replaceable>。"
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#: chsh.1.xml:32(term) chfn.1.xml:32(term)
+msgid "<option>LOGIN_STRING</option> (string)"
+msgstr "<option>LOGIN_STRING</option> (string)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+#: chsh.1.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"The string used for prompting a password. The default is to use \"Password: "
+"\", or a translation of that string. If you set this variable, the prompt "
+"will not be translated."
+msgstr ""
+"此字符串用于提示输入密码。默认是 \"Password: \",或者翻译了的结果(汉语中翻译"
+"为了“密码:”)。如果设置了此变量,提示不会被翻译。"
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+#: chsh.1.xml:39(para) chfn.1.xml:39(para)
+msgid ""
+"If the string contains <replaceable>%s</replaceable>, this will be replaced "
+"by the user's name."
+msgstr "如果字符串包含 <replaceable>%s</replaceable>,将会被用户名替换。"
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>MAIL_CHECK_ENAB</option> (boolean)"
+msgstr "<option>MAIL_CHECK_ENAB</option> (boolean)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable checking and display of mailbox status upon login."
+msgstr "启用登录时检查和现实邮箱状态。"
+
+#: su.1.xml:37(para) login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"You should disable it if the shell startup files already check for mail "
+"(\"mailx -e\" or equivalent)."
+msgstr ""
+"如果 shell 的启动文件已经检查了邮件(\"mailx -e\" 或者其它同功能的工具),您应"
+"该禁用它。"
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>QUOTAS_ENAB</option> (boolean)"
+msgstr "<option>QUOTAS_ENAB</option> (boolean)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+#, fuzzy
+#| msgid ""
+#| "Enable setting of ulimit, umask, and niceness from passwd gecos field."
+msgid ""
+"Enable setting of resource limits from <filename>/etc/limits</filename> and "
+"ulimit, umask, and niceness from the user's passwd gecos field."
+msgstr "允许在 passwd 的 gecos 字段设置 ulimit、umask 和 niceness。"
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SULOG_FILE</option> (string)"
+msgstr "<option>SULOG_FILE</option> (string)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "If defined, all su activity is logged to this file."
+msgstr "如果定义了,所有的 su 活动都会记录到此文件。"
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SU_NAME</option> (string)"
+msgstr "<option>SU_NAME</option> (string)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"If defined, the command name to display when running \"su -\". For example, "
+"if this is defined as \"su\" then a \"ps\" will display the command is \"-su"
+"\". If not defined, then \"ps\" would display the name of the shell actually "
+"being run, e.g. something like \"-sh\"."
+msgstr ""
+"如果定义了,就是运行“su -”时显示的命令名称。例如,如果定义为“su”,那么“ps”会"
+"显示此命令为“-su”。如果没有定义,“ps”将会显示实际执行的 shell,例如类似于“-"
+"sh”。"
+
+#: su.1.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>SU_WHEEL_ONLY</option> (boolean)"
+msgstr "<option>SU_WHEEL_ONLY</option> (boolean)"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the user must be listed as a member of "
+"the first gid 0 group in <filename>/etc/group</filename> (called "
+"<replaceable>root</replaceable> on most Linux systems) to be able to "
+"<command>su</command> to uid 0 accounts. If the group doesn't exist or is "
+"empty, no one will be able to <command>su</command> to uid 0."
+msgstr ""
+"如果为 <replaceable>yes</replaceable>,用户必须在 <filename>/etc/group</"
+"filename> 中别设定为 GID 为 0 的组(在大部分 Linux 上叫 <replaceable>root</"
+"replaceable>)的成员。"
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SYSLOG_SU_ENAB</option> (boolean)"
+msgstr "<option>SYSLOG_SU_ENAB</option> (boolean)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"Enable \"syslog\" logging of <command>su</command> activity - in addition to "
+"sulog file logging."
+msgstr "除了 sulog 文件日志,也为 <command>su</command> 活动启用“syslog”日志。"
+
+#: su.1.xml:391(para)
+msgid ""
+"On success, <command>su</command> returns the exit value of the command it "
+"executed."
+msgstr "成功时,<command>su</command> 返回执行的命令的退出值。"
+
+#: su.1.xml:395(para)
+msgid ""
+"If this command was terminated by a signal, <command>su</command> returns "
+"the number of this signal plus 128."
+msgstr "如果命令被信号结束,<command>su</command> 返回此信号的编号加 128。"
+
+#: su.1.xml:399(para)
+msgid ""
+"If su has to kill the command (because it was asked to terminate, and the "
+"command did not terminate in time), <command>su</command> returns 255."
+msgstr ""
+"如果 su 必须要杀死此命令(因为已经要求它结束,可是却没有及时结束),"
+"<command>su</command> 返回 255。"
+
+#: su.1.xml:411(para)
+msgid "success (<option>--help</option> only)"
+msgstr "成功 (只有 <option>--help</option>)"
+
+#: su.1.xml:417(para)
+msgid "System or authentication failure"
+msgstr "系统或者认证失败"
+
+#: su.1.xml:421(replaceable)
+msgid "126"
+msgstr "126"
+
+#: su.1.xml:423(para)
+msgid "The requested command was not found"
+msgstr "要求的命令不存在"
+
+#: su.1.xml:427(replaceable)
+msgid "127"
+msgstr "127"
+
+#: su.1.xml:429(para)
+msgid "The requested command could not be executed"
+msgstr "请求的命令不能执行"
+
+#: su.1.xml:404(para)
+msgid ""
+"Some exit values from <command>su</command> are independent from the "
+"executed command: <placeholder-1/>"
+msgstr "<command>su</command> 中的某些退出值与执行的命令无关:<placeholder-1/>"
+
+#: su.1.xml:438(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>."
+
+#: sg.1.xml:58(refentrytitle) sg.1.xml:65(refname) sg.1.xml:71(command)
+msgid "sg"
+msgstr "sg"
+
+#: sg.1.xml:66(refpurpose)
+msgid "execute command as different group ID"
+msgstr "以不同的组 ID 执行命令"
+
+#: sg.1.xml:74(arg)
+msgid "-c"
+msgstr "-c"
+
+#: sg.1.xml:73(arg)
+msgid "group <placeholder-1/> command"
+msgstr "组 <placeholder-1/> 命令"
+
+#: sg.1.xml:82(para)
+msgid ""
+"The <command>sg</command> command works similar to <command>newgrp</command> "
+"but accepts a command. The command will be executed with the <filename>/bin/"
+"sh</filename> shell. With most shells you may run <command>sg</command> "
+"from, you need to enclose multi-word commands in quotes. Another difference "
+"between <command>newgrp</command> and <command>sg</command> is that some "
+"shells treat <command>newgrp</command> specially, replacing themselves with "
+"a new instance of a shell that <command>newgrp</command> creates. This "
+"doesn't happen with <command>sg</command>, so upon exit from a <command>sg</"
+"command> command you are returned to your previous group ID."
+msgstr ""
+"<command>sg</command> 命令类似于 <command>newgrp</command>,但是可以接受一个"
+"命令。这个命令将会使用 <filename>/bin/sh</filename> shell 来执行。对于您可以"
+"使用 <command>sg</command> 启动的多数 shell,您需要将多个词的命令用引号引起"
+"来。<command>newgrp</command> 和 <command>sg</command> 之间的另外一个不同点是"
+"某些 shell 对 <command>newgrp</command> 有特殊对待,会使用 <command>newgrp</"
+"command> 创建的一个新的 shell 实例替换自身。这不会发生在 <command>sg</"
+"command> 身上,所以从 <command>sg</command> 退出后,您会返回到先前的组 ID。"
+
+#: sg.1.xml:32(term) newgrp.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SYSLOG_SG_ENAB</option> (boolean)"
+msgstr "<option>SYSLOG_SG_ENAB</option> (boolean)"
+
+#: sg.1.xml:34(para) newgrp.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable \"syslog\" logging of <command>sg</command> activity."
+msgstr "允许“syslog”记录 <command>sg</command> 的活动。"
+
+#: sg.1.xml:141(para)
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry></phrase>."
+
+#: shadow.5.xml:57(refentrytitle) shadow.5.xml:64(refname)
+#: shadow.3.xml:57(refentrytitle) shadow.3.xml:64(refname)
+#: pwck.8.xml:84(replaceable) grpck.8.xml:76(replaceable)
+msgid "shadow"
+msgstr "shadow"
+
+#: shadow.5.xml:65(refpurpose)
+msgid "shadowed password file"
+msgstr "影子化了的密码文件"
+
+#: shadow.5.xml:70(para)
+msgid ""
+"<filename>shadow</filename> is a file which contains the password "
+"information for the system's accounts and optional aging information."
+msgstr ""
+"<filename>shadow</filename> 是一个文件,它包含系统账户的密码信息和可选的年龄"
+"信息。"
+
+#: shadow.5.xml:76(para) gshadow.5.xml:64(para)
+msgid ""
+"This file must not be readable by regular users if password security is to "
+"be maintained."
+msgstr "如果没有维护好密码安全,此文件绝对不能让普通用户可读。"
+
+#: shadow.5.xml:81(para)
+msgid ""
+"Each line of this file contains 9 fields, separated by colons (<quote>:</"
+"quote>), in the following order:"
+msgstr ""
+"此文件的每行包括 9 个字段,使用半角冒号 (<quote>:</quote>) 分隔,顺序如下:"
+
+#: shadow.5.xml:88(emphasis) passwd.5.xml:78(para)
+msgid "login name"
+msgstr "登录名"
+
+#: shadow.5.xml:90(para)
+msgid "It must be a valid account name, which exist on the system."
+msgstr "必须是有效的账户名,且已经存在于系统中。"
+
+#: shadow.5.xml:96(emphasis) gshadow.5.xml:83(emphasis)
+msgid "encrypted password"
+msgstr "加密了的密码"
+
+#: shadow.5.xml:98(para)
+msgid ""
+"This field may be empty, in which case no passwords are required to "
+"authenticate as the specified login name. However, some applications which "
+"read the <filename>/etc/shadow</filename> file may decide not to permit any "
+"access at all if the password field is empty."
+msgstr ""
+"此字段可以为空,此时认证为特定的登录名时,不要求密码。然而,一些读取 "
+"<filename>/etc/shadow</filename> 文件的应用程序,在密码字段为空时,可能决定禁"
+"止任何访问。"
+
+#: shadow.5.xml:105(para) gshadow.5.xml:107(para)
+#, fuzzy
+#| msgid ""
+#| "A password field which starts with a exclamation mark means that the "
+#| "password is locked. The remaining characters on the line represent the "
+#| "password field before the password was locked."
+msgid ""
+"A password field which starts with an exclamation mark means that the "
+"password is locked. The remaining characters on the line represent the "
+"password field before the password was locked."
+msgstr ""
+"以叹号开始的密码字段意味着密码被锁定。该行的剩余字符表示锁定之前的密码。"
+
+#: shadow.5.xml:111(para) passwd.5.xml:126(para) gshadow.5.xml:85(para)
+msgid ""
+"Refer to <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry> for details on how this string is interpreted."
+msgstr ""
+"请参考 <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry> 来了解关于解析此字符串的细节信息。"
+
+#: shadow.5.xml:116(para) passwd.5.xml:131(para)
+msgid ""
+"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)."
+msgstr ""
+"如果密码字段包含一些不是 <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry> 合法结果的字符,比如 ! "
+"或 *,用户将无法使用 unix 密码登录(但是可以通过其它方法登录系统)。"
+
+#: shadow.5.xml:127(emphasis)
+msgid "date of last password change"
+msgstr "最后一次更改密码的日期"
+
+#: shadow.5.xml:130(para)
+msgid ""
+"The date of the last password change, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr "最近一次更改密码的时间,表示从1970年1月1日开始的天数。"
+
+#: shadow.5.xml:134(para)
+#, fuzzy
+#| msgid ""
+#| "The value 0 has a special meaning, which is that the user should change "
+#| "her pasword the next time she will log in the system."
+msgid ""
+"The value 0 has a special meaning, which is that the user should change her "
+"password the next time she will log in the system."
+msgstr "0 有特殊意思,表示用户应该在下次登录系统时更改密码。"
+
+#: shadow.5.xml:139(para)
+msgid "An empty field means that password aging features are disabled."
+msgstr "空字段表示密码年龄功能被禁用。"
+
+#: shadow.5.xml:146(emphasis)
+msgid "minimum password age"
+msgstr "密码的最小年龄"
+
+#: shadow.5.xml:148(para)
+msgid ""
+"The minimum password age is the number of days the user will have to wait "
+"before she will be allowed to change her password again."
+msgstr ""
+"最小密码年龄是指,用户一次更改密码之后,要等多长时间才再次被允许更改密码。"
+
+#: shadow.5.xml:153(para)
+msgid "An empty field and value 0 mean that there are no minimum password age."
+msgstr "空字段或 0 表示没有最小密码年龄。"
+
+#: shadow.5.xml:160(emphasis)
+msgid "maximum password age"
+msgstr "最大密码年龄"
+
+#: shadow.5.xml:162(para)
+msgid ""
+"The maximum password age is the number of days after which the user will "
+"have to change her password."
+msgstr "最大密码年龄是指,这写天之后,用户必须更改密码。"
+
+#: shadow.5.xml:166(para)
+msgid ""
+"After this number of days is elapsed, the password may still be valid. The "
+"user should be asked to change her password the next time she will log in."
+msgstr "这写天之后,密码仍然可用。用户将会在下次登录的时候被要求更改密码。"
+
+#: shadow.5.xml:171(para)
+msgid ""
+"An empty field means that there are no maximum password age, no password "
+"warning period, and no password inactivity period (see below)."
+msgstr ""
+"空字段表示没有最大密码年龄,没有密码警告时间段,没有密码禁用时间段(请看下"
+"边)。"
+
+#: shadow.5.xml:176(para)
+msgid ""
+"If the maximum password age is lower than the minimum password age, the user "
+"cannot change her password."
+msgstr "如果最大密码年龄小于最小密码年龄,用户将会不能更改密码。"
+
+#: shadow.5.xml:184(emphasis)
+msgid "password warning period"
+msgstr "密码警告时间段"
+
+#: shadow.5.xml:187(para)
+msgid ""
+"The number of days before a password is going to expire (see the maximum "
+"password age above) during which the user should be warned."
+msgstr "密码过期之前,提前警告用户的的天数(请参考上边的密码的最大年龄)。"
+
+#: shadow.5.xml:192(para)
+msgid ""
+"An empty field and value 0 mean that there are no password warning period."
+msgstr "空字段或者 0 表示没有密码警告期。"
+
+#: shadow.5.xml:200(emphasis)
+msgid "password inactivity period"
+msgstr "密码禁用期"
+
+#: shadow.5.xml:203(para)
+msgid ""
+"The number of days after a password has expired (see the maximum password "
+"age above) during which the password should still be accepted (and the user "
+"should update her password during the next login)."
+msgstr ""
+"密码过期(查看上边的密码最大年龄)后,仍然接受此密码的天数(在此期间,用户应该在"
+"下次登录时修改密码)。"
+
+#: shadow.5.xml:209(para)
+msgid ""
+"After expiration of the password and this expiration period is elapsed, no "
+"login is possible using the current user's password. The user should contact "
+"her administrator."
+msgstr ""
+"密码到期并且过了这个宽限期之后,使用用户的当前的密码将会不能登录。用户需要联"
+"系系统管理员。"
+
+#: shadow.5.xml:214(para)
+msgid ""
+"An empty field means that there are no enforcement of an inactivity period."
+msgstr "空字段表示没有强制密码过期。"
+
+#: shadow.5.xml:222(emphasis)
+msgid "account expiration date"
+msgstr "账户过期日期"
+
+#: shadow.5.xml:225(para)
+msgid ""
+"The date of expiration of the account, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr "账户过期的日期,表示从1970年1月1日开始的天数。"
+
+#: shadow.5.xml:229(para)
+#, fuzzy
+#| msgid ""
+#| "Note that an account expiration differs from a password expiration. In "
+#| "case of an acount expiration, the user shall not be allowed to login. In "
+#| "case of a password expiration, the user is not allowed to login using her "
+#| "password."
+msgid ""
+"Note that an account expiration differs from a password expiration. In case "
+"of an account expiration, the user shall not be allowed to login. In case of "
+"a password expiration, the user is not allowed to login using her password."
+msgstr ""
+"注意,账户过期不同于密码过期。账户过期时,用户将不被允许登录;密码过期时,用"
+"户将不被允许使用其密码登录。"
+
+#: shadow.5.xml:235(para)
+msgid "An empty field means that the account will never expire."
+msgstr "空字段表示账户永不过期。"
+
+#: shadow.5.xml:238(para)
+msgid ""
+"The value 0 should not be used as it is interpreted as either an account "
+"with no expiration, or as an expiration on Jan 1, 1970."
+msgstr "应该避免使用 0,因为它既能理解成永不过期也能理解成在1970年1月1日过期。"
+
+#: shadow.5.xml:246(emphasis)
+msgid "reserved field"
+msgstr "保留字段"
+
+#: shadow.5.xml:248(para)
+msgid "This field is reserved for future use."
+msgstr "此字段保留作将来使用。"
+
+#: shadow.5.xml:270(filename)
+msgid "/etc/shadow-"
+msgstr "/etc/shadow-"
+
+#: shadow.5.xml:272(para)
+msgid "Backup file for /etc/shadow."
+msgstr "/etc/shadow 的备份文件。"
+
+#: shadow.5.xml:273(para) passwd.5.xml:178(para)
+msgid ""
+"Note that this file is used by the tools of the shadow toolsuite, but not by "
+"all user and password management tools."
+msgstr ""
+"注意,此文件由 shadow 工具集使用,而不是所有的用户和密码管理工具都会使用。"
+
+#: shadow.5.xml:284(para)
+msgid ""
+"<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: shadow.3.xml:59(refmiscinfo)
+msgid "Library Calls"
+msgstr "库函数调用"
+
+#: shadow.3.xml:65(refname)
+msgid "getspnam"
+msgstr "getspnam"
+
+#: shadow.3.xml:66(refpurpose)
+msgid "encrypted password file routines"
+msgstr "加密密码文件工具函数"
+
+#: shadow.3.xml:70(title)
+msgid "SYNTAX"
+msgstr "SYNTAX"
+
+#: shadow.3.xml:72(emphasis)
+msgid "#include &lt;shadow.h&gt;"
+msgstr "#include &lt;shadow.h&gt;"
+
+#: shadow.3.xml:76(emphasis)
+msgid "struct spwd *getspent();"
+msgstr "struct spwd *getspent();"
+
+#: shadow.3.xml:80(emphasis)
+msgid "struct spwd *getspnam(char"
+msgstr "struct spwd *getspnam(char"
+
+#: shadow.3.xml:81(emphasis)
+msgid "*name"
+msgstr "*name"
+
+#: shadow.3.xml:81(emphasis) shadow.3.xml:94(emphasis)
+#: shadow.3.xml:99(emphasis) shadow.3.xml:105(emphasis)
+msgid ");"
+msgstr ");"
+
+#: shadow.3.xml:85(emphasis)
+msgid "void setspent();"
+msgstr "void setspent();"
+
+#: shadow.3.xml:89(emphasis)
+msgid "void endspent();"
+msgstr "void endspent();"
+
+#: shadow.3.xml:93(emphasis)
+msgid "struct spwd *fgetspent(FILE"
+msgstr "struct spwd *fgetspent(FILE"
+
+#: shadow.3.xml:94(emphasis) shadow.3.xml:105(emphasis)
+msgid "*fp"
+msgstr "*fp"
+
+#: shadow.3.xml:98(emphasis)
+msgid "struct spwd *sgetspent(char"
+msgstr "struct spwd *sgetspent(char"
+
+#: shadow.3.xml:99(emphasis)
+msgid "*cp"
+msgstr "*cp"
+
+#: shadow.3.xml:103(emphasis)
+msgid "int putspent(struct spwd"
+msgstr "int putspent(struct spwd"
+
+#: shadow.3.xml:104(emphasis)
+msgid "*p,"
+msgstr "*p,"
+
+#: shadow.3.xml:104(emphasis)
+msgid "FILE"
+msgstr "FILE"
+
+#: shadow.3.xml:109(emphasis)
+msgid "int lckpwdf();"
+msgstr "int lckpwdf();"
+
+#: shadow.3.xml:113(emphasis)
+msgid "int ulckpwdf();"
+msgstr "int ulckpwdf();"
+
+#: shadow.3.xml:119(para)
+msgid ""
+"<emphasis remap=\"I\">shadow</emphasis> manipulates the contents of the "
+"shadow password file, <filename>/etc/shadow</filename>. The structure in the "
+"<emphasis remap=\"I\">#include</emphasis> file is:"
+msgstr ""
+"<emphasis remap=\"I\">shadow</emphasis> 处理 shadow 密码文件 <filename>/etc/"
+"shadow</filename> 的内容。<emphasis remap=\"I\">#include</emphasis> 文件中的"
+"结构是:"
+
+#: shadow.3.xml:124(programlisting)
+#, fuzzy, no-wrap
+msgid ""
+"struct spwd {\n"
+" char\t\t*sp_namp; /* user login name */\n"
+" char\t\t*sp_pwdp; /* encrypted password */\n"
+" long int\t\tsp_lstchg; /* last password change */\n"
+" long int\t\tsp_min; /* days until change allowed. */\n"
+" long int\t\tsp_max; /* days before change required */\n"
+" long int\t\tsp_warn; /* days warning for expiration */\n"
+" long int\t\tsp_inact; /* days before account inactive */\n"
+" long int\t\tsp_expire; /* date when account expires */\n"
+" unsigned long int\tsp_flag; /* reserved for future use */\n"
+"}\n"
+" "
+msgstr ""
+"struct spwd {\n"
+" char\t\t*sp_namp; /* 用户登录名 */\n"
+" char\t\t*sp_pwdp; /* 加密过的密码 */\n"
+" long int\t\tsp_lstchg; /* 最近密码更改日期 */\n"
+" long int\t\tsp_min; /* 到允许更改密码还有多少天 */\n"
+" long int\t\tsp_max; /* 到要求更改密码还有多少天 */\n"
+" long int\t\tsp_warn; /* 警告过期的天数 */\n"
+" long int\t\tsp_inact; /* 账户非活动之前的天数 */\n"
+" long int\t\tsp_expire; /* 账户过期的日期 */\n"
+" unsigned long int\tsp_flag; /* 保留做以后使用 */\n"
+"}\n"
+" "
+
+#: shadow.3.xml:136(para)
+msgid "The meanings of each field are:"
+msgstr "每个字段的含义是:"
+
+#: shadow.3.xml:139(para)
+msgid "sp_namp - pointer to null-terminated user name"
+msgstr "sp_namp - 指向以 null 结束的用户名的指针"
+
+#: shadow.3.xml:142(para)
+msgid "sp_pwdp - pointer to null-terminated password"
+msgstr "sp_pwdp - 指向 null 结束的密码的指针"
+
+#: shadow.3.xml:145(para)
+msgid "sp_lstchg - days since Jan 1, 1970 password was last changed"
+msgstr "sp_lstchg - 最近更改密码的日期(日期计算方法是从1970年1月1日开始的天数)"
+
+#: shadow.3.xml:148(para)
+msgid "sp_min - days before which password may not be changed"
+msgstr ""
+
+#: shadow.3.xml:151(para)
+msgid "sp_max - days after which password must be changed"
+msgstr ""
+
+#: shadow.3.xml:154(para)
+msgid ""
+"sp_warn - days before password is to expire that user is warned of pending "
+"password expiration"
+msgstr ""
+
+#: shadow.3.xml:159(para)
+msgid ""
+"sp_inact - days after password expires that account is considered inactive "
+"and disabled"
+msgstr ""
+
+#: shadow.3.xml:164(para)
+msgid "sp_expire - days since Jan 1, 1970 when account will be disabled"
+msgstr ""
+
+#: shadow.3.xml:167(para)
+msgid "sp_flag - reserved for future use"
+msgstr ""
+
+#: shadow.3.xml:175(para)
+msgid ""
+"<emphasis>getspent</emphasis>, <emphasis>getspname</emphasis>, "
+"<emphasis>fgetspent</emphasis>, and <emphasis>sgetspent</emphasis> each "
+"return a pointer to a <emphasis>struct spwd</emphasis>. <emphasis>getspent</"
+"emphasis> returns the next entry from the file, and <emphasis>fgetspent</"
+"emphasis> returns the next entry from the given stream, which is assumed to "
+"be a file of the proper format. <emphasis>sgetspent</emphasis> returns a "
+"pointer to a <emphasis>struct spwd</emphasis> using the provided string as "
+"input. <emphasis>getspnam</emphasis> searches from the current position in "
+"the file for an entry matching <emphasis>name</emphasis>."
+msgstr ""
+
+#: shadow.3.xml:188(para)
+msgid ""
+"<emphasis>setspent</emphasis> and <emphasis>endspent</emphasis> may be used "
+"to begin and end, respectively, access to the shadow password file."
+msgstr ""
+"<emphasis>setspent</emphasis> 和 <emphasis>endspent</emphasis> 分别用来开始和"
+"结束对影子密码文件的访问。"
+
+#: shadow.3.xml:194(para)
+msgid ""
+"The <emphasis>lckpwdf</emphasis> and <emphasis>ulckpwdf</emphasis> routines "
+"should be used to insure exclusive access to the <filename>/etc/shadow</"
+"filename> file. <emphasis>lckpwdf</emphasis> attempts to acquire a lock "
+"using <emphasis>pw_lock</emphasis> for up to 15 seconds. It continues by "
+"attempting to acquire a second lock using <emphasis>spw_lock</emphasis> for "
+"the remainder of the initial 15 seconds. Should either attempt fail after a "
+"total of 15 seconds, <emphasis>lckpwdf</emphasis> returns -1. When both "
+"locks are acquired 0 is returned."
+msgstr ""
+"需要使用 <emphasis>lckpwdf</emphasis> 和 <emphasis>ulckpwdf</emphasis> 函数来"
+"确保对 <filename>/etc/shadow</filename> 文件的互斥访问。<emphasis>lckpwdf</"
+"emphasis> 使用 <emphasis>pw_lock</emphasis> 来获取一个最长为 15 秒的锁,然后"
+"继续使用 <emphasis>spw_lock</emphasis> 来获取长度为开始的 15 秒时间的剩余量的"
+"第二把锁。总计 15 秒之后,无论哪个失败,<emphasis>lckpwdf</emphasis> 都返回 "
+"-1。两把锁都获取成功时,返回 0。"
+
+#: shadow.3.xml:209(para)
+msgid ""
+"Routines return NULL if no more entries are available or if an error occurs "
+"during processing. Routines which have <emphasis>int</emphasis> as the "
+"return value return 0 for success and -1 for failure."
+msgstr ""
+"如果没有更多条目了或者处理时出错,此函数返回 NULL。使用 <emphasis>int</"
+"emphasis> 类型返回值的函数返回 0 表示成功,-1 表示失败。"
+
+#: shadow.3.xml:219(para)
+msgid ""
+"These routines may only be used by the superuser as access to the shadow "
+"password file is restricted."
+msgstr "这些函数只能由超级用户使用,因为对影子密码文件的访问是受限的。"
+
+#: shadow.3.xml:239(para)
+msgid ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: pwconv.8.xml:63(refentrytitle) pwconv.8.xml:70(refname)
+#: pwconv.8.xml:79(command) login.defs.5.xml:439(term)
+msgid "pwconv"
+msgstr "pwconv"
+
+#: pwconv.8.xml:71(refname) pwconv.8.xml:85(command) login.defs.5.xml:448(term)
+msgid "pwunconv"
+msgstr "pwunconv"
+
+#: pwconv.8.xml:72(refname) pwconv.8.xml:91(command) login.defs.5.xml:344(term)
+msgid "grpconv"
+msgstr "grpconv"
+
+#: pwconv.8.xml:73(refname) pwconv.8.xml:97(command) login.defs.5.xml:350(term)
+msgid "grpunconv"
+msgstr "grpunconv"
+
+#: pwconv.8.xml:74(refpurpose)
+msgid "convert to and from shadow passwords and groups"
+msgstr "在影子密码和组以及其它直接转换"
+
+#: pwconv.8.xml:106(para)
+msgid ""
+"The <command>pwconv</command> command creates <emphasis remap=\"I\">shadow</"
+"emphasis> from <emphasis remap=\"I\">passwd</emphasis> and an optionally "
+"existing <emphasis remap=\"I\">shadow</emphasis>."
+msgstr ""
+"<command>pwconv</command> 命令使用 <emphasis remap=\"I\">passwd</emphasis> 以"
+"及可选并已经存在的 <emphasis remap=\"I\">shadow</emphasis> 来创建 <emphasis "
+"remap=\"I\">shadow</emphasis>。"
+
+#: pwconv.8.xml:111(para)
+msgid ""
+"<command>pwconv</command> does not work with <option>USE_TCB</option> "
+"enabled. To convert to tcb passwords, you should first use <command>pwconv</"
+"command> to convert to shadowed passwords by disabling <option>USE_TCB</"
+"option> in <filename>login.defs</filename> and then convert to tcb password "
+"using <command>tcb_convert</command> (and re-enable <option>USE_TCB</option> "
+"in <filename>login.defs</filename>.)"
+msgstr ""
+"<command>pwconv</command> 不能在启用 <option>USE_TCB</option> 时不能工作。要"
+"转换到 tcb 密码,您首先需要通过在 <filename>login.defs</filename> 禁用 "
+"<option>USE_TCB</option> 并使用 <command>pwconv</command> 转换到影子密码,然"
+"后再使用 <command>tcb_convert</command> 转换到 tcb 密码(并且在 "
+"<filename>login.defs</filename> 中重新启用 <option>USE_TCB</option>)。"
+
+#: pwconv.8.xml:121(para)
+msgid ""
+"The <command>pwunconv</command> command creates <emphasis remap=\"I"
+"\">passwd</emphasis> from <emphasis remap=\"I\">passwd</emphasis> and "
+"<emphasis remap=\"I\">shadow</emphasis> and then removes <emphasis remap=\"I"
+"\">shadow</emphasis>."
+msgstr ""
+"<command>pwunconv</command> 命令使用 <emphasis remap=\"I\">passwd</emphasis> "
+"和 <emphasis remap=\"I\">shadow</emphasis> 来创建 <emphasis remap=\"I"
+"\">passwd</emphasis>,然后移除 <emphasis remap=\"I\">shadow</emphasis>。"
+
+#: pwconv.8.xml:127(para)
+msgid ""
+"<command>pwunconv</command> does not work with <option>USE_TCB</option> "
+"enabled. You should first switch back from tcb to shadowed passwords using "
+"<command>tcb_unconvert</command>, and then disable <option>USE_TCB</option> "
+"in <filename>login.defs</filename> before using <command>pwunconv</command>."
+msgstr ""
+"<command>pwunconv</command> 在启用 <option>USE_TCB</option> 时不能工作。首先"
+"需要使用 <command>tcb_unconvert</command> 从 tcb 切换回影子密码,然后使用 "
+"<command>pwunconv</command> 在 <filename>login.defs</filename> 中禁用 "
+"<option>USE_TCB</option>。"
+
+#: pwconv.8.xml:136(para)
+msgid ""
+"The <command>grpconv</command> command creates <emphasis remap=\"I"
+"\">gshadow</emphasis> from <emphasis remap=\"I\">group</emphasis> and an "
+"optionally existing <emphasis remap=\"I\">gshadow</emphasis>."
+msgstr ""
+"<command>grpconv</command> 从 <emphasis remap=\"I\">group</emphasis> 和可能存"
+"在的 <emphasis remap=\"I\">gshadow</emphasis> 创建 <emphasis remap=\"I"
+"\">gshadow</emphasis>。"
+
+#: pwconv.8.xml:142(para)
+msgid ""
+"The <command>grpunconv</command> command creates <emphasis remap=\"I"
+"\">group</emphasis> from <emphasis remap=\"I\">group</emphasis> and "
+"<emphasis remap=\"I\">gshadow</emphasis> and then removes <emphasis remap=\"I"
+"\">gshadow</emphasis>."
+msgstr ""
+"<command>grpunconv</command> 命令从 <emphasis remap=\"I\">group</emphasis> "
+"和 <emphasis remap=\"I\">gshadow</emphasis> 创建 <emphasis remap=\"I"
+"\">group</emphasis>,然后移除 <emphasis remap=\"I\">gshadow</emphasis>。"
+
+#: pwconv.8.xml:149(para)
+msgid ""
+"These four programs all operate on the normal and shadow password and group "
+"files: <filename>/etc/passwd</filename>, <filename>/etc/group</filename>, "
+"<filename>/etc/shadow</filename>, and <filename>/etc/gshadow</filename>."
+msgstr ""
+"这四个程序都可以操作普通或影子密码和组文件:<filename>/etc/passwd</"
+"filename>, <filename>/etc/group</filename>, <filename>/etc/shadow</filename> "
+"和 <filename>/etc/gshadow</filename>。"
+
+#: pwconv.8.xml:156(para)
+msgid ""
+"Each program acquires the necessary locks before conversion. "
+"<command>pwconv</command> and <command>grpconv</command> are similar. First, "
+"entries in the shadowed file which don't exist in the main file are removed. "
+"Then, shadowed entries which don't have `x' as the password in the main file "
+"are updated. Any missing shadowed entries are added. Finally, passwords in "
+"the main file are replaced with `x'. These programs can be used for initial "
+"conversion as well to update the shadowed file if the main file is edited by "
+"hand."
+msgstr ""
+"转换前,每个程序都会获取需要的锁。<command>pwconv</command> 和 "
+"<command>grpconv</command> 也类似。首先删除,存在于在影子文件中,但在主文件中"
+"却没有的条目;然后,更新在主文件中不使用“x”作为密码的影子条目,会添加所有缺失"
+"的条目;最后,将主文件中的密码替换为“x”。这两个工具可以用于初始转换以及根据手"
+"动编辑的主文件更新影子文件。"
+
+#: pwconv.8.xml:167(para)
+msgid ""
+"<command>pwconv</command> will use the values of <emphasis remap=\"I"
+"\">PASS_MIN_DAYS</emphasis>, <emphasis remap=\"I\">PASS_MAX_DAYS</emphasis>, "
+"and <emphasis remap=\"I\">PASS_WARN_AGE</emphasis> from <filename>/etc/login."
+"defs</filename> when adding new entries to <filename>/etc/shadow</filename>."
+msgstr ""
+"<command>pwconv</command> 向 <filename>/etc/shadow</filename> 添加条目时,将"
+"使用<filename>/etc/login.defs</filename> 中的 <emphasis remap=\"I"
+"\">PASS_MIN_DAYS</emphasis>, <emphasis remap=\"I\">PASS_MAX_DAYS</emphasis> "
+"和 <emphasis remap=\"I\">PASS_WARN_AGE</emphasis> 值。"
+
+#: pwconv.8.xml:176(para)
+msgid ""
+"Likewise <command>pwunconv</command> and <command>grpunconv</command> are "
+"similar. Passwords in the main file are updated from the shadowed file. "
+"Entries which exist in the main file but not in the shadowed file are left "
+"alone. Finally, the shadowed file is removed. Some password aging "
+"information is lost by <command>pwunconv</command>. It will convert what it "
+"can."
+msgstr ""
+"<command>pwunconv</command> 和 <command>grpunconv</command> 与此类似。主文件"
+"中的密码会根据影子文件更新。在主文件中存在,但不在影子文件中的条目单独留下。"
+"最后,移除影子文件。一些密码年龄信息会因为 <command>pwunconv</command> 而丢"
+"失。它只转换它可以转换的。"
+
+#: pwconv.8.xml:188(para)
+msgid ""
+"The options which apply to the <command>pwconv</command>, <command>pwunconv</"
+"command>, <command>grpconv</command>, and <command>grpunconv</command> "
+"commands are:"
+msgstr ""
+"<command>pwconv</command>, <command>pwunconv</command>, <command>grpconv</"
+"command> 和 <command>grpunconv</command> 命令可以接受的选项有:"
+
+#: pwconv.8.xml:217(para)
+msgid ""
+"Errors in the password or group files (such as invalid or duplicate entries) "
+"may cause these programs to loop forever or fail in other strange ways. "
+"Please run <command>pwck</command> and <command>grpck</command> to correct "
+"any such errors before converting to or from shadow passwords or groups."
+msgstr ""
+"在 passwd 或 group 文件中有错误(比如,有重复条目)可能会造成这些程序死循环或者"
+"以奇怪的方式失败。在转换自,或转换到影子密码或组文件前,请运行 "
+"<command>pwck</command> 和 <command>grpck</command> 来修正此类错误。"
+
+#: pwconv.8.xml:228(para)
+msgid ""
+"The following configuration variable in <filename>/etc/login.defs</filename> "
+"changes the behavior of <command>grpconv</command> and <command>grpunconv</"
+"command>:"
+msgstr ""
+"<filename>/etc/login.defs</filename> 中的如下配置变量改变 <command>grpconv</"
+"command> 和 <command>grpunconv</command> 的行为:"
+
+#: pwconv.8.xml:236(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of <command>pwconv</command>:"
+msgstr ""
+"<filename>/etc/login.defs</filename> 中的如下配置变量改变 <command>pwconv</"
+"command> 的行为:"
+
+#: pwconv.8.xml:263(para)
+msgid ""
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry><phrase condition=\"tcb\">, "
+"<citerefentry><refentrytitle>tcb_convert</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>tcb_unconvert</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry><phrase condition=\"tcb\">, "
+"<citerefentry><refentrytitle>tcb_convert</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>tcb_unconvert</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry></phrase>."
+
+#: pwck.8.xml:47(contrib) lastlog.8.xml:43(contrib) grpck.8.xml:42(contrib)
+msgid "Creation, 1992"
+msgstr ""
+
+#: pwck.8.xml:63(refentrytitle) pwck.8.xml:70(refname) pwck.8.xml:76(command)
+#: login.defs.5.xml:430(term)
+msgid "pwck"
+msgstr "pwck"
+
+#: pwck.8.xml:71(refpurpose)
+msgid "verify integrity of password files"
+msgstr "检查密码文件的完整性"
+
+#: pwck.8.xml:80(replaceable) passwd.5.xml:57(refentrytitle)
+#: passwd.5.xml:64(refname) passwd.1.xml:64(refentrytitle)
+#: passwd.1.xml:71(refname) passwd.1.xml:77(command) login.defs.5.xml:419(term)
+msgid "passwd"
+msgstr "passwd"
+
+#: pwck.8.xml:93(para)
+msgid ""
+"The <command>pwck</command> command verifies the integrity of the users and "
+"authentication information. It checks that all entries in <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename><phrase condition=\"tcb"
+"\">(or the files in <filename>/etc/tcb</filename>, when <option>USE_TCB</"
+"option> is enabled)</phrase> have the proper format and contain valid data. "
+"The user is prompted to delete entries that are improperly formatted or "
+"which have other uncorrectable errors."
+msgstr ""
+"<command>pwck</command> 命令检查用户及其认证信息的完整性。它检查 <filename>/"
+"etc/passwd</filename> 和 <filename>/etc/shadow</filename><phrase condition="
+"\"tcb\">(或者在 <option>USE_TCB</option> 启用时,<filename>/etc/tcb</"
+"filename> 中的文件)</phrase> 格式正确、数据有效。将会提示用户删除格式不正确或"
+"者有其它错误的项。"
+
+#: pwck.8.xml:105(para) grpck.8.xml:94(para)
+msgid "Checks are made to verify that each entry has:"
+msgstr "检查的项目有:"
+
+#: pwck.8.xml:108(para) grpck.8.xml:98(para)
+msgid "the correct number of fields"
+msgstr "正确的字段数"
+
+#: pwck.8.xml:111(para)
+msgid "a unique and valid user name"
+msgstr "一个唯一且有效的用户名"
+
+#: pwck.8.xml:114(para)
+msgid "a valid user and group identifier"
+msgstr "一个有效的用户和组标识符"
+
+#: pwck.8.xml:117(para)
+msgid "a valid primary group"
+msgstr "有效的主组"
+
+#: pwck.8.xml:120(para)
+msgid "a valid home directory"
+msgstr "有效的主目录"
+
+#: pwck.8.xml:123(para)
+msgid "a valid login shell"
+msgstr "有效的登录 shell"
+
+#: pwck.8.xml:127(para)
+msgid ""
+"<filename>shadow</filename> checks are enabled when a second file parameter "
+"is specified or when <filename>/etc/shadow</filename> exists on the system."
+msgstr ""
+"当指定第二个文件参数或 <filename>/etc/shadow</filename> 在系统中存在时,启用 "
+"<filename>shadow</filename> 检查。"
+
+#: pwck.8.xml:132(para)
+msgid "These checks are the following:"
+msgstr "这些检查是:"
+
+#: pwck.8.xml:137(para)
+msgid ""
+"every passwd entry has a matching shadow entry, and every shadow entry has a "
+"matching passwd entry"
+msgstr "每个密码项都有对应的影子相,反之亦然。"
+
+#: pwck.8.xml:143(para)
+msgid "passwords are specified in the shadowed file"
+msgstr "密码在影子化了的文件中指定"
+
+#: pwck.8.xml:146(para)
+msgid "shadow entries have the correct number of fields"
+msgstr "影子项有正确的字段数。"
+
+#: pwck.8.xml:149(para)
+msgid "shadow entries are unique in shadow"
+msgstr "影子项在影子文件中是唯一的"
+
+#: pwck.8.xml:152(para)
+msgid "the last password changes are not in the future"
+msgstr "最后一次的密码更改时间不是被设成了一个将来的时间。"
+
+#: pwck.8.xml:156(para)
+msgid ""
+"The checks for correct number of fields and unique user name are fatal. If "
+"the entry has the wrong number of fields, the user will be prompted to "
+"delete the entire line. If the user does not answer affirmatively, all "
+"further checks are bypassed. An entry with a duplicated user name is "
+"prompted for deletion, but the remaining checks will still be made. All "
+"other errors are warning and the user is encouraged to run the "
+"<command>usermod</command> command to correct the error."
+msgstr ""
+
+#: pwck.8.xml:167(para)
+msgid ""
+"The commands which operate on the <filename>/etc/passwd</filename> file are "
+"not able to alter corrupted or duplicated entries. <command>pwck</command> "
+"should be used in those circumstances to remove the offending entry."
+msgstr ""
+"操作 <filename>/etc/passwd</filename> 文件的这些命令不能警告损坏或重复的条"
+"目,这些情况下,应该使用 <command>pwck</command> 来移除这写有问题的条目。"
+
+#: pwck.8.xml:177(para) grpck.8.xml:148(para)
+msgid ""
+"The <option>-r</option> and <option>-s</option> options cannot be combined."
+msgstr "<option>-r</option> 和 <option>-s</option> 选项不能联合使用。"
+
+#: pwck.8.xml:181(para)
+msgid "The options which apply to the <command>pwck</command> command are:"
+msgstr "<command>pwck</command> 选项可以接受的选项有:"
+
+#: pwck.8.xml:204(para)
+msgid ""
+"Report errors only. The warnings which do not require any action from the "
+"user won't be displayed."
+msgstr "只报告错误。不显示那些不需要用户操作的警告。"
+
+#: pwck.8.xml:211(term) grpck.8.xml:163(term)
+msgid "<option>-r</option>, <option>--read-only</option>"
+msgstr "<option>-r</option>, <option>--read-only</option>"
+
+#: pwck.8.xml:213(para)
+msgid "Execute the <command>pwck</command> command in read-only mode."
+msgstr "在只读模式下执行 <command>pwck</command>。"
+
+#: pwck.8.xml:231(term) grpck.8.xml:185(term)
+msgid "<option>-s</option>, <option>--sort</option>"
+msgstr "<option>-s</option>, <option>--sort</option>"
+
+#: pwck.8.xml:233(para)
+msgid ""
+"Sort entries in <filename>/etc/passwd</filename> and <filename>/etc/shadow</"
+"filename> by UID."
+msgstr ""
+"根据 UID 在 <filename>/etc/passwd</filename> 和 <filename>/etc/shadow</"
+"filename> 对项目进行排序。"
+
+#: pwck.8.xml:237(para)
+msgid "This option has no effect when <option>USE_TCB</option> is enabled."
+msgstr "启用 <option>USE_TCB</option> 是,本选项无效。"
+
+#: pwck.8.xml:244(para)
+msgid ""
+"By default, <command>pwck</command> operates on the files <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename><phrase condition=\"tcb"
+"\"> (or the files in <filename>/etc/tcb</filename>)</phrase>. The user may "
+"select alternate files with the <replaceable>passwd</replaceable> and "
+"<replaceable>shadow</replaceable> parameters."
+msgstr ""
+"默认上,<command>pwck</command> 操作文件 <filename>/etc/passwd</filename> 和 "
+"<filename>/etc/shadow</filename><phrase condition=\"tcb\"> (或者在 "
+"<filename>/etc/tcb</filename> 中的文件)</phrase>。用户也可以使用 "
+"<replaceable>passwd</replaceable> 和 <replaceable>shadow</replaceable> 参数来"
+"选择替代文件。"
+
+#: pwck.8.xml:253(para)
+#, fuzzy
+#| msgid ""
+#| "Note that when <option>USE_TCB</option> is enabled, you cannot specify an "
+#| "alternative <replaceable>shadow</replaceable> file. In future releases, "
+#| "this paramater could be replaced by an alternate TCB directory."
+msgid ""
+"Note that when <option>USE_TCB</option> is enabled, you cannot specify an "
+"alternative <replaceable>shadow</replaceable> file. In future releases, this "
+"parameter could be replaced by an alternate TCB directory."
+msgstr ""
+"注意,<option>USE_TCB</option> 启用时,您不能指定另外的 <replaceable>shadow</"
+"replaceable>。以后的版本中,此参数可能会被替换成一个另外的 TCB 目录。"
+
+#: pwck.8.xml:322(para)
+msgid "one or more bad password entries"
+msgstr "一个或多个错误的密码条目"
+
+#: pwck.8.xml:328(para)
+msgid "can't open password files"
+msgstr "无法打开密码文件"
+
+#: pwck.8.xml:334(para)
+msgid "can't lock password files"
+msgstr "无法锁定密码文件"
+
+#: pwck.8.xml:340(para)
+msgid "can't update password files"
+msgstr "无法更新密码文件"
+
+#: pwck.8.xml:346(para)
+msgid "can't sort password files"
+msgstr "无法在密码文件中排序"
+
+#: pwck.8.xml:304(para)
+msgid ""
+"The <command>pwck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr "<command>pwck</command> 命令有如下返回值:<placeholder-1/>"
+
+#: pwck.8.xml:355(para)
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: porttime.5.xml:57(refentrytitle) porttime.5.xml:64(refname)
+msgid "porttime"
+msgstr "porttime"
+
+#: porttime.5.xml:65(refpurpose)
+msgid "port access time file"
+msgstr "端口访问时间文件"
+
+#: porttime.5.xml:70(para)
+msgid ""
+"<emphasis remap=\"I\">porttime</emphasis> contains a list of tty devices, "
+"user names, and permitted login times."
+msgstr ""
+"<emphasis remap=\"I\">porttime</emphasis> 包含一个 tty 设备、用户名和允许登录"
+"时间的列表。"
+
+#: porttime.5.xml:75(para)
+msgid ""
+"Each entry consists of three colon separated fields. The first field is a "
+"comma separated list of tty devices, or an asterisk to indicate that all tty "
+"devices are matched by this entry. The second field is a comma separated "
+"list of user names, or an asterisk to indicated that all user names are "
+"matched by this entry. The third field is a comma separated list of "
+"permitted access times."
+msgstr ""
+"每项包含三个由冒号分隔的字段。第一个字段是逗号分隔的 tty 设备列表,或者星号表"
+"示匹配所有终端。第二个字段是逗号分隔的用户名列表,或者星号表示匹配所有用户"
+"名。第三个字段是逗号分隔的访问许可时间。"
+
+#: porttime.5.xml:84(para)
+msgid ""
+"Each access time entry consists of zero or more days of the week, "
+"abbreviated <emphasis>Su</emphasis>, <emphasis>Mo</emphasis>, <emphasis>Tu</"
+"emphasis>, <emphasis>We</emphasis>, <emphasis>Th</emphasis>, <emphasis>Fr</"
+"emphasis>, and <emphasis>Sa</emphasis>, followed by a pair of times "
+"separated by a hyphen. The abbreviation <emphasis>Wk</emphasis> may be used "
+"to represent Monday thru Friday, and <emphasis>Al</emphasis> may be used to "
+"indicate every day. If no days are given, <emphasis>Al</emphasis> is assumed."
+msgstr ""
+"每条访问时间包含一周的 0 天或多天,缩写为 <emphasis>Su</emphasis>, "
+"<emphasis>Mo</emphasis>, <emphasis>Tu</emphasis>, <emphasis>We</emphasis>, "
+"<emphasis>Th</emphasis>, <emphasis>Fr</emphasis> 和 <emphasis>Sa</emphasis>,"
+"随后是连字符分隔的一组时间,缩写 <emphasis>Wk</emphasis> 可以用于表示周一到周"
+"五,<emphasis>Al</emphasis> 可以用于表示没一天。如果没有制定周几,将会假定为 "
+"<emphasis>Al</emphasis>。"
+
+#: porttime.5.xml:98(title)
+msgid "EXAMPLES"
+msgstr "示例"
+
+#: porttime.5.xml:99(para)
+msgid ""
+"The following entry allows access to user <emphasis remap=\"B\">jfh</"
+"emphasis> on every port during weekdays from 9am to 5pm."
+msgstr ""
+"下面的条目允许在工作日的上午九点到下午五点在任何端口上访问用户 <emphasis "
+"remap=\"B\">jfh</emphasis>。"
+
+#: porttime.5.xml:105(para)
+msgid "*:jfh:Wk0900-1700"
+msgstr "*:jfh:Wk0900-1700"
+
+#: porttime.5.xml:107(para)
+msgid ""
+"The following entries allow access only to the users <emphasis>root</"
+"emphasis> and <emphasis>oper</emphasis> on <filename>/dev/console</filename> "
+"at any time. This illustrates how the <filename>/etc/porttime</filename> "
+"file is an ordered list of access times. Any other user would match the "
+"second entry which does not permit access at any time."
+msgstr ""
+"下面这条任何时间,只允许用户 <emphasis>root</emphasis> 和 <emphasis>oper</"
+"emphasis> 在 <filename>/dev/console</filename> 登录。这也是说 <filename>/etc/"
+"porttime</filename> 文件是一个访问时间的有序列表。任何匹配第二条的其他用户都"
+"不会被允许访问。"
+
+#: porttime.5.xml:116(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+" console:root,oper:Al0000-2400\n"
+" console:*:\n"
+" "
+msgstr ""
+"\n"
+" console:root,oper:Al0000-2400\n"
+" console:*:\n"
+" "
+
+#: porttime.5.xml:121(para)
+msgid ""
+"The following entry allows access for the user <emphasis>games</emphasis> on "
+"any port during non-working hours."
+msgstr ""
+"如下项允许,在非工作时间在任何端口上使用用户 <emphasis>games</emphasis>。"
+
+#: porttime.5.xml:126(para)
+msgid "*:games:Wk1700-0900,SaSu0000-2400"
+msgstr "*:games:Wk1700-0900,SaSu0000-2400"
+
+#: porttime.5.xml:133(filename) logoutd.8.xml:92(filename)
+msgid "/etc/porttime"
+msgstr "/etc/porttime"
+
+#: porttime.5.xml:135(para) logoutd.8.xml:94(para)
+msgid "File containing port access."
+msgstr "包含了端口访问信息的文件。"
+
+#: porttime.5.xml:143(para) login.access.5.xml:134(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: passwd.5.xml:65(refpurpose)
+msgid "the password file"
+msgstr "密码文件"
+
+#: passwd.5.xml:70(para)
+msgid ""
+"<filename>/etc/passwd</filename> contains one line for each user account, "
+"with seven fields delimited by colons (<quote>:</quote>). These fields are:"
+msgstr ""
+"<filename>/etc/passwd</filename> 为每个用户账户包含一行,包含使用冒号 "
+"(<quote>:</quote>) 分隔的七个字段,分别是:"
+
+#: passwd.5.xml:81(para)
+msgid "optional encrypted password"
+msgstr "可选的加密后的密码"
+
+#: passwd.5.xml:84(para)
+msgid "numerical user ID"
+msgstr "数字用户 ID"
+
+#: passwd.5.xml:87(para)
+msgid "numerical group ID"
+msgstr "数字组 ID"
+
+#: passwd.5.xml:90(para)
+msgid "user name or comment field"
+msgstr "用户名和注释字段"
+
+#: passwd.5.xml:93(para)
+msgid "user home directory"
+msgstr "用户主目录"
+
+#: passwd.5.xml:96(para)
+msgid "optional user command interpreter"
+msgstr "可选的用户命令解释器"
+
+#: passwd.5.xml:100(para)
+msgid ""
+"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."
+msgstr ""
+
+#: passwd.5.xml:109(para)
+#, fuzzy
+#| msgid ""
+#| "This field may be empty, in which case no passwords are required to "
+#| "authenticate as the specified login name. However, some applications "
+#| "which read the <filename>/etc/shadow</filename> file may decide not to "
+#| "permit any access at all if the password field is empty."
+msgid ""
+"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."
+msgstr ""
+"此字段可以为空,此时认证为特定的登录名时,不要求密码。然而,一些读取 "
+"<filename>/etc/shadow</filename> 文件的应用程序,在密码字段为空时,可能决定禁"
+"止任何访问。"
+
+#: passwd.5.xml:118(para)
+#, fuzzy
+#| msgid ""
+#| "A password field which starts with a exclamation mark means that the "
+#| "password is locked. The remaining characters on the line represent the "
+#| "password field before the password was locked."
+msgid ""
+"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."
+msgstr ""
+"以叹号开始的密码字段意味着密码被锁定。该行的剩余字符表示锁定之前的密码。"
+
+#: passwd.5.xml:138(para)
+msgid ""
+"The comment field is used by various system utilities, such as "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"此注释字段被多个系统工具使用,例如 <citerefentry><refentrytitle>finger</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>。"
+
+#: passwd.5.xml:144(para)
+msgid ""
+"The home directory field provides the name of the initial working directory. "
+"The <command>login</command> program uses this information to set the value "
+"of the <envar>$HOME</envar> environmental variable."
+msgstr ""
+"主目录字段提供了初始工作目录的名称。<command>login</command> 程序根据此信息设"
+"置 <envar>$HOME</envar> 环境变量。"
+
+#: passwd.5.xml:150(para)
+msgid ""
+"The command interpreter field provides the name of the user's command "
+"language interpreter, or the name of the initial program to execute. The "
+"<command>login</command> program uses this information to set the value of "
+"the <envar>$SHELL</envar> environmental variable. If this field is empty, it "
+"defaults to the value <filename>/bin/sh</filename>."
+msgstr ""
+"命令解释器字段提供了用户命令语言解释器的名称,或者开始时执行的程序的名称。"
+"<command>login</command> 程序使用此信息设置 <envar>$SHELL</envar> 环境变量的"
+"值。如果字段为空,默认值为 <filename>/bin/sh</filename>。"
+
+#: passwd.5.xml:171(para)
+msgid "optional encrypted password file"
+msgstr "可选的加密后的密码文件"
+
+#: passwd.5.xml:175(filename)
+msgid "/etc/passwd-"
+msgstr "/etc/passwd-"
+
+#: passwd.5.xml:177(para)
+msgid "Backup file for /etc/passwd."
+msgstr "/etc/passwd 的备份文件。"
+
+#: passwd.5.xml:189(para)
+msgid ""
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getent</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getpwnam</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwunconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getent</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getpwnam</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwunconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: passwd.1.xml:72(refpurpose)
+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 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 ""
+"<command>passwd</command> 命令用来更改用户账户的密码。普通用户通常只更改其自"
+"己账户的密码,而超级用户可以更改任何账户的密码。<command>passwd</command> 也"
+"更改账户或相关的密码有效期。"
+
+#: passwd.1.xml:98(title)
+msgid "Password Changes"
+msgstr "密码更改"
+
+#: passwd.1.xml:99(para)
+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)
+msgid ""
+"After the password has been entered, password aging information is checked "
+"to see if the user is permitted to change the password at this time. If not, "
+"<command>passwd</command> refuses to change the password and exits."
+msgstr ""
+"输入了密码之后,会检查密码年龄信息,以查看此时是否允许用户更改密码。如果不允"
+"许,<command>passwd</command> 拒绝更改密码,然后退出。"
+
+#: passwd.1.xml:114(para)
+msgid ""
+"The user is then prompted twice for a replacement password. The second entry "
+"is compared against the first and both are required to match in order for "
+"the password to be changed."
+msgstr ""
+"提示用户输入两次新密码。第二次和第一次进行比较,并且需要相同才能更改密码。"
+
+#: passwd.1.xml:120(para)
+msgid ""
+"Then, the password is tested for complexity. As a general guideline, "
+"passwords should consist of 6 to 8 characters including one or more "
+"characters from each of the following sets:"
+msgstr ""
+"然后,测试密码的负责程度。一般来讲,密码应该包含 6 到 8 位字符,从下边的一个"
+"或多个集合中选择:"
+
+#: passwd.1.xml:128(para)
+msgid "lower case alphabetics"
+msgstr "小写字母"
+
+#: passwd.1.xml:131(para)
+msgid "digits 0 thru 9"
+msgstr "数字 0 到 9"
+
+#: passwd.1.xml:134(para)
+msgid "punctuation marks"
+msgstr "标点符号"
+
+#: passwd.1.xml:138(para)
+msgid ""
+"Care must be taken not to include the system default erase or kill "
+"characters. <command>passwd</command> will reject any password which is not "
+"suitably complex."
+msgstr ""
+"必须要留意不能包含系统默认的擦除和杀死字符。<command>passwd</command> 会拒绝"
+"复杂度不满足要求的密码。"
+
+#: passwd.1.xml:147(title)
+msgid "Hints for user passwords"
+msgstr "关于用户密码的提示"
+
+#: passwd.1.xml:148(para)
+msgid ""
+"The security of a password depends upon the strength of the encryption "
+"algorithm and the size of the key space. The legacy <emphasis>UNIX</"
+"emphasis> System encryption method is based on the NBS DES algorithm. More "
+"recent methods are now recommended (see <option>ENCRYPT_METHOD</option>). "
+"The size of the key space depends upon the randomness of the password which "
+"is selected."
+msgstr ""
+"密码的安全性依赖于加密算法的强度和密钥空间的大小。旧的 <emphasis>UNIX</"
+"emphasis> 系统加密算法基于 NBS DES 算法。推荐使用更新的算法(查看 "
+"<option>ENCRYPT_METHOD</option>)。密钥空间的大小依赖于选择的密码的随机性。"
+
+#: passwd.1.xml:157(para)
+msgid ""
+"Compromises in password security normally result from careless password "
+"selection or handling. For this reason, you should not select a password "
+"which appears in a dictionary or which must be written down. The password "
+"should also not be a proper name, your license number, birth date, or street "
+"address. Any of these may be used as guesses to violate system security."
+msgstr ""
+"由于粗心地或处理选择密码,会危及密码的安全。由于这个原因,您不应该选择出现在"
+"词典中或者必须要写下来才能记住的密码。密码也不应该是一个名字、许可证号、生日"
+"或者街道号。所有这些可以用于猜测来损害系统安全。"
+
+#: passwd.1.xml:166(para)
+#, fuzzy
+#| msgid ""
+#| "You can find advices on how to choose a strong password on http://en."
+#| "wikipedia.org/wiki/Password_strength"
+msgid ""
+"You can find advice on how to choose a strong password on http://en."
+"wikipedia.org/wiki/Password_strength"
+msgstr ""
+"您可以在在 http://zh.wikipedia.org/zh-cn/密码强度 找到怎样选择强壮密码的建"
+"议。"
+
+#: passwd.1.xml:175(para)
+msgid "The options which apply to the <command>passwd</command> command are:"
+msgstr "<command>passwd</command> 命令可以接受的选项有:"
+
+#: passwd.1.xml:180(term) faillog.8.xml:96(term)
+msgid "<option>-a</option>, <option>--all</option>"
+msgstr "<option>-a</option>, <option>--all</option>"
+
+#: passwd.1.xml:184(para)
+msgid ""
+"This option can be used only with <option>-S</option> and causes show status "
+"for all users."
+msgstr "此选项只能和 <option>-S</option> 一起使用,来显示所有用户的状态。"
+
+#: passwd.1.xml:191(term)
+msgid "<option>-d</option>, <option>--delete</option>"
+msgstr "<option>-d</option>, <option>--delete</option>"
+
+#: passwd.1.xml:195(para)
+msgid ""
+"Delete a user's password (make it empty). This is a quick way to disable a "
+"password for an account. It will set the named account passwordless."
+msgstr ""
+"删除用户密码(让它为空)。这是禁用一个用户密码的快速方法。它将设置给出名称的账"
+"户。"
+
+#: passwd.1.xml:203(term)
+msgid "<option>-e</option>, <option>--expire</option>"
+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 their password at the user's next login."
+msgstr "让一个账户的密码立即过期。这可以强制一个用户下次登录时更改密码。"
+
+#: passwd.1.xml:220(term)
+msgid ""
+"<option>-i</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-i</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+
+#: passwd.1.xml:224(para)
+msgid ""
+"This option is used to disable an account after the password has been "
+"expired for a number of days. After a user account has had an expired "
+"password for <replaceable>INACTIVE</replaceable> days, the user may no "
+"longer sign on to the account."
+msgstr ""
+"此选项用于在密码过期一定天数之后禁用账户。一个用户账户密码已经过期 "
+"<replaceable>INACTIVE</replaceable> 天之后,用户将不能再登录进账户。"
+
+#: passwd.1.xml:233(term)
+msgid "<option>-k</option>, <option>--keep-tokens</option>"
+msgstr "<option>-k</option>, <option>--keep-tokens</option>"
+
+#: passwd.1.xml:237(para)
+msgid ""
+"Indicate password change should be performed only for expired authentication "
+"tokens (passwords). The user wishes to keep their non-expired tokens as "
+"before."
+msgstr ""
+"表示密码更改只应该因为认证口令(密码)过期更改。用户希望保持他们尚未过期的口"
+"令。"
+
+#: passwd.1.xml:245(term)
+msgid "<option>-l</option>, <option>--lock</option>"
+msgstr "<option>-l</option>, <option>--lock</option>"
+
+#: passwd.1.xml:249(para)
+msgid ""
+"Lock the password of the named account. This option disables a password by "
+"changing it to a value which matches no possible encrypted value (it adds a "
+"´!´ at the beginning of the password)."
+msgstr ""
+"锁定指定账户的密码。此选项通过将密码更改为一个不可能与加密值匹配的值来禁用(它"
+"在密码开头添加一个“!”)。"
+
+#: passwd.1.xml:255(para)
+msgid ""
+"Note that this does not disable the account. The user may still be able to "
+"login using another authentication token (e.g. an SSH key). To disable the "
+"account, administrators should use <command>usermod --expiredate 1</command> "
+"(this set the account's expire date to Jan 2, 1970)."
+msgstr ""
+"注意,这并没有禁用此账户。用户仍然可以通过其它认证方式(如 SSH 密码)来登录。要"
+"禁用此账户,管理员需要使用 <command>usermod --expiredate 1</command> (设置账"
+"户的过期时间为1970年1月2日)。"
+
+#: passwd.1.xml:262(para)
+msgid "Users with a locked password are not allowed to change their password."
+msgstr "被锁定了密码的用户不允许更改密码。"
+
+#: passwd.1.xml:269(term)
+msgid ""
+"<option>-n</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-n</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DAYS</"
+"replaceable>"
+
+#: passwd.1.xml:273(para) chage.1.xml:174(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 their password at any time."
+msgstr ""
+"在密码更改之间的最小天数设置为 <replaceable>MIN_DAYS</replaceable>。此字段中"
+"的 0 值表示用户可以在任何时间更改其密码。"
+
+#: passwd.1.xml:291(term)
+msgid ""
+"<option>-r</option>, <option>--repository</option>&nbsp;"
+"<replaceable>REPOSITORY</replaceable>"
+msgstr ""
+"<option>-r</option>, <option>--repository</option>&nbsp;"
+"<replaceable>REPOSITORY</replaceable>"
+
+#: passwd.1.xml:295(para)
+msgid "change password in <replaceable>REPOSITORY</replaceable> repository"
+msgstr "在 <replaceable>REPOSITORY</replaceable> 中更改密码"
+
+#: passwd.1.xml:313(term)
+msgid "<option>-S</option>, <option>--status</option>"
+msgstr "<option>-S</option>, <option>--status</option>"
+
+#: passwd.1.xml:317(para)
+msgid ""
+"Display account status information. The status information consists of 7 "
+"fields. The first field is the user's login name. The second field indicates "
+"if the user account has a locked password (L), has no password (NP), or has "
+"a usable password (P). The third field gives the date of the last password "
+"change. The next four fields are the minimum age, maximum age, warning "
+"period, and inactivity period for the password. These ages are expressed in "
+"days."
+msgstr ""
+"显示账户状态信息。状态信息包含 7 个字段。首个字段是用户的登录名,第二个字段表"
+"示用户账户是否已经锁定密码(L)、没有密码 (NP)或者密码可用(P),第三个字段给出最"
+"后一次更改密码的日期。接下来的四个字段分别是密码的最小年龄、最大年龄、警告期"
+"和禁用期。这些年龄以天为单位计算。"
+
+#: passwd.1.xml:331(term)
+msgid "<option>-u</option>, <option>--unlock</option>"
+msgstr "<option>-u</option>, <option>--unlock</option>"
+
+#: passwd.1.xml:335(para)
+msgid ""
+"Unlock the password of the named account. This option re-enables a password "
+"by changing the password back to its previous value (to the value before "
+"using the <option>-l</option> option)."
+msgstr ""
+"解锁指定用户的密码。此操作通过将密码改回先前值(改回使用 <option>-l</option> "
+"之前的值)重新启用密码。"
+
+#: passwd.1.xml:344(term)
+msgid ""
+"<option>-w</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>WARN_DAYS</replaceable>"
+msgstr ""
+"<option>-w</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>WARN_DAYS</replaceable>"
+
+#: 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 their password is "
+"about to expire."
+msgstr ""
+"设置在要求更改密码之前警告的天数。<replaceable>WARN_DAYS</replaceable> 选项是"
+"在密码过期之前提前警告的天数。"
+
+#: passwd.1.xml:357(term)
+msgid ""
+"<option>-x</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-x</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DAYS</"
+"replaceable>"
+
+#: passwd.1.xml:361(para)
+msgid ""
+"Set the maximum number of days a password remains valid. After "
+"<replaceable>MAX_DAYS</replaceable>, the password is required to be changed."
+msgstr ""
+"设置密码仍然有效的最大天数。<replaceable>MAX_DAYS</replaceable> 之后,密码会"
+"要求更改。"
+
+#: passwd.1.xml:366(para) chage.1.xml:195(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as "
+"<replaceable>MAX_DAYS</replaceable> will remove checking a password's "
+"validity."
+msgstr ""
+"<replaceable>MAX_DAYS</replaceable> 设置为 <emphasis remap=\"I\">-1</"
+"emphasis> 会移除密码有效性检查。"
+
+#: passwd.1.xml:378(para)
+msgid ""
+"Password complexity checking may vary from site to site. The user is urged "
+"to select a password as complex as he or she feels comfortable with."
+msgstr "密码复杂性检查在每台机器间不同。用户应该选择适合的尽量复杂的密码。"
+
+#: passwd.1.xml:383(para)
+msgid ""
+"Users may not be able to change their password on a system if NIS is enabled "
+"and they are not logged into the NIS server."
+msgstr ""
+"在启动了 NIS 的系统上,如果没有登录 NIS 服务器,用户或许不能更改自己的密码。"
+
+#: passwd.1.xml:388(para)
+msgid ""
+"<command>passwd</command> uses PAM to authenticate users and to change their "
+"passwords."
+msgstr "<command>passwd</command> 使用 PAM 来认证用户以及更改密码。"
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>ENCRYPT_METHOD</option> (string)"
+msgstr "<option>ENCRYPT_METHOD</option> (string)"
+
+#: passwd.1.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: gpasswd.1.xml:32(para) chpasswd.8.xml:32(para) chgpasswd.8.xml:32(para)
+msgid ""
+"This defines the system default encryption algorithm for encrypting "
+"passwords (if no algorithm are specified on the command line)."
+msgstr "这定义了系统加密密码的默认算法(如果没有在命令行上指定算法)。"
+
+#: passwd.1.xml:36(para) newusers.8.xml:36(para) login.defs.5.xml:36(para)
+#: gpasswd.1.xml:36(para) chpasswd.8.xml:36(para) chgpasswd.8.xml:36(para)
+msgid ""
+"It can take one of these values: <replaceable>DES</replaceable> (default), "
+"<replaceable>MD5</replaceable><phrase condition=\"sha_crypt\">, "
+"<replaceable>SHA256</replaceable>, <replaceable>SHA512</replaceable></"
+"phrase>."
+msgstr ""
+"可以使用如下值:<replaceable>DES</replaceable> (default), <replaceable>MD5</"
+"replaceable><phrase condition=\"sha_crypt\">, <replaceable>SHA256</"
+"replaceable>, <replaceable>SHA512</replaceable></phrase>."
+
+#: passwd.1.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: gpasswd.1.xml:43(para) chpasswd.8.xml:43(para) chgpasswd.8.xml:43(para)
+msgid ""
+"Note: this parameter overrides the <option>MD5_CRYPT_ENAB</option> variable."
+msgstr "注意,此参数会覆盖 <option>MD5_CRYPT_ENAB</option> 变量。"
+
+#: passwd.1.xml:47(para) passwd.1.xml:53(para) passwd.1.xml:62(para)
+#: newusers.8.xml:47(para) newusers.8.xml:53(para) newusers.8.xml:62(para)
+#: login.defs.5.xml:47(para) login.defs.5.xml:53(para)
+#: login.defs.5.xml:62(para) gpasswd.1.xml:47(para) gpasswd.1.xml:53(para)
+#: gpasswd.1.xml:62(para) chpasswd.8.xml:47(para) chpasswd.8.xml:53(para)
+#: chpasswd.8.xml:62(para) chgpasswd.8.xml:47(para) chgpasswd.8.xml:53(para)
+#: chgpasswd.8.xml:62(para)
+msgid ""
+"Note: This only affect the generation of group passwords. The generation of "
+"user passwords is done by PAM and subject to the PAM configuration. It is "
+"recommended to set this variable consistently with the PAM configuration."
+msgstr ""
+"注意:这只影响组密码的产生。用户密码的产生是由 PAM 和 PAM 配置负责的。建议设"
+"置此变量和 PAM 配置一致。"
+
+#: passwd.1.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: gpasswd.1.xml:32(term) chpasswd.8.xml:32(term) chgpasswd.8.xml:32(term)
+msgid "<option>MD5_CRYPT_ENAB</option> (boolean)"
+msgstr "<option>MD5_CRYPT_ENAB</option> (boolean)"
+
+#: passwd.1.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: gpasswd.1.xml:34(para) chpasswd.8.xml:34(para) chgpasswd.8.xml:34(para)
+msgid ""
+"Indicate if passwords must be encrypted using the MD5-based algorithm. If "
+"set to <replaceable>yes</replaceable>, new passwords will be encrypted using "
+"the MD5-based algorithm compatible with the one used by recent releases of "
+"FreeBSD. It supports passwords of unlimited length and longer salt strings. "
+"Set to <replaceable>no</replaceable> if you need to copy encrypted passwords "
+"to other systems which don't understand the new algorithm. Default is "
+"<replaceable>no</replaceable>."
+msgstr ""
+"表示密码是否必须使用基于 MD5 的算法加密。如果设为 <replaceable>yes</"
+"replaceable>,新密码将使用可以和新版 FreeBSD 兼容的基于 MD5 的算法加密。它支"
+"持无限长度的密码以及更长的盐字符串。如果您需要将加密的密码复制到其它不理解新"
+"算法的系统,设置为 <replaceable>no</replaceable>。默认值是 <replaceable>no</"
+"replaceable>。"
+
+#: passwd.1.xml:44(para) newusers.8.xml:44(para) login.defs.5.xml:44(para)
+#: gpasswd.1.xml:44(para) chpasswd.8.xml:44(para) chgpasswd.8.xml:44(para)
+#, fuzzy
+#| msgid ""
+#| "This variable is superceded by the <option>ENCRYPT_METHOD</option> "
+#| "variable or by any command line option used to configure the encryption "
+#| "algorithm."
+msgid ""
+"This variable is superseded by the <option>ENCRYPT_METHOD</option> variable "
+"or by any command line option used to configure the encryption algorithm."
+msgstr ""
+"此变量已经被 <option>ENCRYPT_METHOD</option> 变量或者用于配置加密算法的命令行"
+"选项取代。"
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid ""
+"This variable is deprecated. You should use <option>ENCRYPT_METHOD</option>."
+msgstr "此变量已经废弃。您应该使用 <option>ENCRYPT_METHOD</option>。"
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>OBSCURE_CHECKS_ENAB</option> (boolean)"
+msgstr "<option>OBSCURE_CHECKS_ENAB</option> (boolean)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable additional checks upon password changes."
+msgstr "对密码更改启用附加检查。"
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_ALWAYS_WARN</option> (boolean)"
+msgstr "<option>PASS_ALWAYS_WARN</option> (boolean)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Warn about weak passwords (but still allow them) if you are root."
+msgstr "如果是 root,警告弱密码,但是仍然允许使用。"
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_CHANGE_TRIES</option> (number)"
+msgstr "<option>PASS_CHANGE_TRIES</option> (number)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Maximum number of attempts to change password if rejected (too easy)."
+msgstr "可以尝试更改密码的最大次数(太容易)。"
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_MAX_LEN</option> (number)"
+msgstr "<option>PASS_MAX_LEN</option> (number)"
+
+#: passwd.1.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>PASS_MIN_LEN</option> (number)"
+msgstr "<option>PASS_MIN_LEN</option> (number)"
+
+#: passwd.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"Number of significant characters in the password for crypt(). "
+"<option>PASS_MAX_LEN</option> is 8 by default. Don't change unless your "
+"crypt() is better. This is ignored if <option>MD5_CRYPT_ENAB</option> set to "
+"<replaceable>yes</replaceable>."
+msgstr ""
+"crypt() 的有效字符位数。<option>PASS_MAX_LEN</option> 默认是 8,除非您自己的 "
+"crypt() 更好,否则不要更改。如果 <option>MD5_CRYPT_ENAB</option> 设为 "
+"<replaceable>yes</replaceable>,会被忽略。"
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>SHA_CRYPT_MIN_ROUNDS</option> (number)"
+msgstr "<option>SHA_CRYPT_MIN_ROUNDS</option> (number)"
+
+#: passwd.1.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: gpasswd.1.xml:31(term) chpasswd.8.xml:31(term) chgpasswd.8.xml:31(term)
+msgid "<option>SHA_CRYPT_MAX_ROUNDS</option> (number)"
+msgstr "<option>SHA_CRYPT_MAX_ROUNDS</option> (number)"
+
+#: passwd.1.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: gpasswd.1.xml:33(para) chpasswd.8.xml:33(para) chgpasswd.8.xml:33(para)
+msgid ""
+"When <option>ENCRYPT_METHOD</option> is set to <replaceable>SHA256</"
+"replaceable> or <replaceable>SHA512</replaceable>, this defines the number "
+"of SHA rounds used by the encryption algorithm by default (when the number "
+"of rounds is not specified on the command line)."
+msgstr ""
+"<option>ENCRYPT_METHOD</option> 设为 <replaceable>SHA256</replaceable> 或 "
+"<replaceable>SHA512</replaceable> 时,此项确定加密算法默认使用 SHA 轮转数目"
+"(当轮转数没有通过命令行指定时)。"
+
+#: passwd.1.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: gpasswd.1.xml:40(para) chpasswd.8.xml:40(para) chgpasswd.8.xml:40(para)
+msgid ""
+"With a lot of rounds, it is more difficult to brute forcing the password. "
+"But note also that more CPU resources will be needed to authenticate users."
+msgstr ""
+"使用很多轮转,会让暴力破解更加困难。但是需要注意,认证用户时也会需要更多的 "
+"CPU 资源。"
+
+#: passwd.1.xml:45(para) newusers.8.xml:45(para) login.defs.5.xml:45(para)
+#: gpasswd.1.xml:45(para) chpasswd.8.xml:45(para) chgpasswd.8.xml:45(para)
+msgid ""
+"If not specified, the libc will choose the default number of rounds (5000)."
+msgstr "如果没有指定,libc 会选择默认的轮转数(5000)。"
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid "The values must be inside the 1000-999,999,999 range."
+msgstr "值必须在 1000 - 999,999,999 之间。"
+
+#: passwd.1.xml:52(para) newusers.8.xml:52(para) login.defs.5.xml:52(para)
+#: gpasswd.1.xml:52(para) chpasswd.8.xml:52(para) chgpasswd.8.xml:52(para)
+msgid ""
+"If only one of the <option>SHA_CRYPT_MIN_ROUNDS</option> or "
+"<option>SHA_CRYPT_MAX_ROUNDS</option> values is set, then this value will be "
+"used."
+msgstr ""
+"如果只设置了一个 <option>SHA_CRYPT_MIN_ROUNDS</option> 或 "
+"<option>SHA_CRYPT_MAX_ROUNDS</option> 值,就会使用这个值。"
+
+#: passwd.1.xml:57(para) newusers.8.xml:57(para) login.defs.5.xml:57(para)
+#: gpasswd.1.xml:57(para) chpasswd.8.xml:57(para) chgpasswd.8.xml:57(para)
+msgid ""
+"If <option>SHA_CRYPT_MIN_ROUNDS</option> &gt; <option>SHA_CRYPT_MAX_ROUNDS</"
+"option>, the highest value will be used."
+msgstr ""
+"如果 <option>SHA_CRYPT_MIN_ROUNDS</option> &gt; "
+"<option>SHA_CRYPT_MAX_ROUNDS</option>,将会使用大的那个。"
+
+#: passwd.1.xml:434(filename)
+msgid "/etc/pam.d/passwd"
+msgstr "/etc/pam.d/passwd"
+
+#: passwd.1.xml:436(para)
+msgid "PAM configuration for <command>passwd</command>."
+msgstr "<command>passwd</command> 的 PAM 配置。"
+
+#: passwd.1.xml:456(para) chage.1.xml:297(para)
+msgid "permission denied"
+msgstr "权限不够"
+
+#: passwd.1.xml:462(para)
+msgid "invalid combination of options"
+msgstr "无效的选项组合"
+
+#: passwd.1.xml:468(para)
+msgid "unexpected failure, nothing done"
+msgstr "意外的失败,什么也没有做。"
+
+#: passwd.1.xml:474(para)
+msgid "unexpected failure, <filename>passwd</filename> file missing"
+msgstr "意外的失败,<filename>passwd</filename> 文件丢失"
+
+#: passwd.1.xml:480(para)
+msgid "<filename>passwd</filename> file busy, try again"
+msgstr "<filename>passwd</filename> 文件忙,请重试"
+
+#: passwd.1.xml:444(para)
+msgid ""
+"The <command>passwd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr "<command>passwd</command> 命令退出,并返回如下值:<placeholder-1/>"
+
+#: passwd.1.xml:495(para)
+msgid ""
+"<citerefentry><refentrytitle>chpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <phrase condition=\"no_pam"
+"\"><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <phrase condition=\"no_pam"
+"\"><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: nologin.8.xml:46(refentrytitle) nologin.8.xml:53(refname)
+#: nologin.8.xml:59(command)
+msgid "nologin"
+msgstr "nologin"
+
+#: nologin.8.xml:54(refpurpose)
+msgid "politely refuse a login"
+msgstr "礼貌地拒绝登录"
+
+#: nologin.8.xml:65(para)
+msgid ""
+"The <command>nologin</command> command displays a message that an account is "
+"not available and exits non-zero. It is intended as a replacement shell "
+"field for accounts that have been disabled."
+msgstr ""
+"<command>nologin</command> 命令显示一个信息,说账户不可用然后返回非零值。它用"
+"于代替已经禁用的账户的 shell 字段。"
+
+#: nologin.8.xml:70(para)
+msgid ""
+"To disable all logins, investigate <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"如果要禁用所有登录,请参考 <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>。"
+
+#: nologin.8.xml:75(para)
+msgid ""
+"If <command>SSH_ORIGINAL_COMMAND</command> is populated it will be logged."
+msgstr ""
+
+#: nologin.8.xml:82(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: nologin.8.xml:93(title)
+msgid "HISTORY"
+msgstr "历史"
+
+#: nologin.8.xml:94(para)
+#, fuzzy
+#| msgid "The <command>nologin</command> command appearred in BSD 4.4."
+msgid "The <command>nologin</command> command appeared in BSD 4.4."
+msgstr "<command>nologin</command> 首次出现于 BSD 4.4。"
+
+#: newusers.8.xml:73(refentrytitle) newusers.8.xml:80(refname)
+#: newusers.8.xml:86(command) login.defs.5.xml:400(term)
+msgid "newusers"
+msgstr "newusers"
+
+#: newusers.8.xml:81(refpurpose)
+msgid "update and create new users in batch"
+msgstr "批量更新和创建新用户"
+
+#: newusers.8.xml:91(replaceable)
+msgid "file"
+msgstr "文件"
+
+#: newusers.8.xml:98(para)
+#, fuzzy
+#| msgid ""
+#| "The <command>newusers</command> command reads a file of user name and "
+#| "clear-text password pairs and uses this information to update a group of "
+#| "existing users or to create new users. Each line is in the same format as "
+#| "the standard password file (see <citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>) with the "
+#| "exceptions explained below:"
+msgid ""
+"The <command>newusers</command> command reads a <replaceable>file</"
+"replaceable> (or the standard input by default) and uses this information to "
+"update a set of existing users or to create new users. Each line is in the "
+"same format as the standard password file (see "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>) with the exceptions explained below:"
+msgstr ""
+"<command>newusers</command> 命令读取用户名和明文密码对文件,并使用此信息更新"
+"一系列现有用户或创建新用户。每行和标准的 password 文件使用同样的格式(参考 "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>),除了下边这些区别:"
+
+#: newusers.8.xml:106(para)
+msgid "pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell"
+msgstr "pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell"
+
+#: newusers.8.xml:111(emphasis)
+msgid "pw_name"
+msgstr "pw_name"
+
+#: newusers.8.xml:114(para)
+msgid "This is the name of the user."
+msgstr "这是用户的用户名。"
+
+#: newusers.8.xml:117(para)
+#, fuzzy
+#| msgid ""
+#| "It can be the name of a new user or the name of an existing user (or an "
+#| "user created before by <command>newusers</command>). In case of an "
+#| "existing user, the user's information will be changed, otherwise a new "
+#| "user will be created."
+msgid ""
+"It can be the name of a new user or the name of an existing user (or a user "
+"created before by <command>newusers</command>). In case of an existing user, "
+"the user's information will be changed, otherwise a new user will be created."
+msgstr ""
+"既可以是新用户名也可以是现有用户名(也可以是 <command>newusers</command> 以前"
+"创建的用户)。现有用户时,将会更改用户信息,否则会创建新用户。"
+
+#: newusers.8.xml:128(emphasis)
+msgid "pw_passwd"
+msgstr "pw_passwd"
+
+#: newusers.8.xml:131(para)
+msgid ""
+"This field will be encrypted and used as the new value of the encrypted "
+"password."
+msgstr "此字段将被加密然后用于加密后密码的新值。"
+
+#: newusers.8.xml:139(emphasis)
+msgid "pw_uid"
+msgstr "pw_uid"
+
+#: newusers.8.xml:142(para)
+msgid "This field is used to define the UID of the user."
+msgstr "此字段用于定义用户的 UID。"
+
+#: newusers.8.xml:145(para)
+#, fuzzy
+#| msgid ""
+#| "If the field is empty, an new (unused) UID will be defined automatically "
+#| "by <command>newusers</command>."
+msgid ""
+"If the field is empty, a new (unused) UID will be defined automatically by "
+"<command>newusers</command>."
+msgstr ""
+"如果此字段为空,<command>newusers</command> 会自动确定一个新的(未使用的)UID。"
+
+#: newusers.8.xml:149(para)
+msgid "If this field contains a number, this number will be used as the UID."
+msgstr "如果此字段包含一个数字,此数字会用于 UID。"
+
+#: newusers.8.xml:153(para)
+#, fuzzy
+#| msgid ""
+#| "If this field contains the name of an existing user (or the name of an "
+#| "user created before by <command>newusers</command>), the UID of the "
+#| "specified user will be used."
+msgid ""
+"If this field contains the name of an existing user (or the name of a user "
+"created before by <command>newusers</command>), the UID of the specified "
+"user will be used."
+msgstr ""
+"如果此字段包含已经使用了的用户名(或者 <command>newusers</command> 在前边已经"
+"创建的一个用户),将会使用指定用户的 UID。"
+
+#: newusers.8.xml:159(para)
+msgid ""
+"If the UID of an existing user is changed, the files ownership of the user's "
+"file should be fixed manually."
+msgstr "如果一个现有用户更改了 UID,此用户的文件所有权需要手动修复。"
+
+#: newusers.8.xml:167(emphasis)
+msgid "pw_gid"
+msgstr "pw_gid"
+
+#: newusers.8.xml:170(para)
+msgid "This field is used to define the primary group ID for the user."
+msgstr "此字段用于定义用户的主组 ID。"
+
+#: newusers.8.xml:173(para)
+msgid ""
+"If this field contains the name of an existing group (or a group created "
+"before by <command>newusers</command>), the GID of this group will be used "
+"as the primary group ID for the user."
+msgstr ""
+"如果此字段包含一个现有组的组名(或者 <command>newusers</command> 在前边创建的"
+"一个组),此组的 GID 会被用于做此用户的主组 ID。"
+
+#: newusers.8.xml:179(para)
+msgid ""
+"If this field is a number, this number will be used as the primary group ID "
+"of the user. If no groups exist with this GID, a new group will be created "
+"with this GID, and the name of the user."
+msgstr ""
+"如果此字段是一个数字,此数字会被用作此用户的主组 ID。如果没有对应此 GID 的现"
+"有组,将会使用此 GID 创建一个新组,名称和用户名相同。"
+
+#: newusers.8.xml:185(para)
+msgid ""
+"If this field is empty, a new group will be created with the name of the "
+"user and a GID will be automatically defined by <command>newusers</command> "
+"to be used as the primary group ID for the user and as the GID for the new "
+"group."
+msgstr ""
+"如果此字段为空,将会使用用户名作为组名,<command>newusers</command> 自动确定"
+"的一个 GID 作为主组 ID 来创建一个新组。"
+
+#: newusers.8.xml:191(para)
+msgid ""
+"If this field contains the name of a group which does not exist (and was not "
+"created before by <command>newusers</command>), a new group will be created "
+"with the specified name and a GID will be automatically defined by "
+"<command>newusers</command> to be used as the primary group ID for the user "
+"and GID for the new group."
+msgstr ""
+"如果此字段包含一个不存在的组的名字(也没有由 <command>newusers</command> 在前"
+"边创建),将使用指定的组名和 <command>newusers</command> 自动确定的 GID 创建一"
+"个组,并作为用户的主组。"
+
+#: newusers.8.xml:203(emphasis)
+msgid "pw_gecos"
+msgstr "pw_gecos"
+
+#: newusers.8.xml:206(para)
+msgid "This field is copied in the GECOS field of the user."
+msgstr "此字段复制到用户的 GECOS 字段。"
+
+#: newusers.8.xml:213(emphasis)
+msgid "pw_dir"
+msgstr "pw_dir"
+
+#: newusers.8.xml:216(para)
+msgid "This field is used to define the home directory of the user."
+msgstr "此字段用于定义用户的主目录。"
+
+#: newusers.8.xml:219(para)
+msgid ""
+"If this field does not specify an existing directory, the specified "
+"directory is created, with ownership set to the user being created or "
+"updated and its primary group."
+msgstr ""
+"如果此字段指定的不是现有的目录,将会创建指定的目录,所有权设置为创建或更新的"
+"用户及其主组。"
+
+#: newusers.8.xml:224(para)
+msgid ""
+"If the home directory of an existing user is changed, <command>newusers</"
+"command> does not move or copy the content of the old directory to the new "
+"location. This should be done manually."
+msgstr ""
+"如果现有用户的主目录变更,<command>newusers</command> 不会移动或者复制旧目录"
+"的内容到新位置。这需要手动完成。"
+
+#: newusers.8.xml:234(emphasis)
+msgid "pw_shell"
+msgstr "pw_shell"
+
+#: newusers.8.xml:237(para)
+msgid ""
+"This field defines the shell of the user. No checks are performed on this "
+"field."
+msgstr "此字段定义了用户的 shell。对此字段不进行任何检查。"
+
+#: newusers.8.xml:245(para)
+msgid ""
+"<command>newusers</command> first tries to create or change all the "
+"specified users, and then write these changes to the user or group "
+"databases. If an error occurs (except in the final writes to the databases), "
+"no changes are committed to the databases."
+msgstr ""
+"<command>newusers</command> 首先尝试创建或更改所有指定的用户,然后将这些更改"
+"写入用户或组数据库。如果发生错误(除非是在最后写入数据库过程中),不会有任何更"
+"改。"
+
+#: newusers.8.xml:251(para)
+msgid ""
+"During this first pass, users are created with a locked password (and "
+"passwords are not changed for the users which are not created). A second "
+"pass is used to update the passwords using PAM. Failures to update a "
+"password are reported, but will not stop the other password updates."
+msgstr ""
+
+#: newusers.8.xml:259(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are updated at a single time."
+msgstr "此命令一般用于在大型的应用环境中,对大量账户进行一次性更新。"
+
+#: newusers.8.xml:267(para)
+msgid "The options which apply to the <command>newusers</command> command are:"
+msgstr "<command>newusers</command> 命令可以使用的选项有:"
+
+#: newusers.8.xml:284(term) chgpasswd.8.xml:112(term)
+msgid "<option>-c</option>, <option>--crypt-method</option>"
+msgstr "<option>-c</option>, <option>--crypt-method</option>"
+
+#: newusers.8.xml:286(para) chpasswd.8.xml:141(para) chgpasswd.8.xml:114(para)
+msgid "Use the specified method to encrypt the passwords."
+msgstr "使用指定的方法加密密码。"
+
+#: newusers.8.xml:287(para) chpasswd.8.xml:145(para) chgpasswd.8.xml:118(para)
+msgid ""
+"The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc "
+"support these methods."
+msgstr ""
+"可用的方法有 DES, MD5, NONE, and SHA256 或 SHA512,前提是您的 libc 支持这写方"
+"法。"
+
+#: newusers.8.xml:309(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are chosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+
+#: newusers.8.xml:335(term) chgpasswd.8.xml:158(term)
+msgid "<option>-s</option>, <option>--sha-rounds</option>"
+msgstr "<option>-s</option>, <option>--sha-rounds</option>"
+
+#: newusers.8.xml:337(para) chpasswd.8.xml:204(para) chgpasswd.8.xml:160(para)
+msgid "Use the specified number of rounds to encrypt the passwords."
+msgstr "使用指定次数的轮转来加密密码。"
+
+#: newusers.8.xml:340(para) chpasswd.8.xml:207(para) chgpasswd.8.xml:163(para)
+msgid ""
+"The value 0 means that the system will choose the default number of rounds "
+"for the crypt method (5000)."
+msgstr "值 0 表示让系统为加密方法选择默认的轮转次数 (5000)。"
+
+#: newusers.8.xml:344(para) chpasswd.8.xml:211(para) chgpasswd.8.xml:167(para)
+msgid ""
+"A minimal value of 1000 and a maximal value of 999,999,999 will be enforced."
+msgstr "会强制最小 1,000,最大 9,9999,9999"
+
+#: newusers.8.xml:348(para) chpasswd.8.xml:215(para) chgpasswd.8.xml:171(para)
+msgid "You can only use this option with the SHA256 or SHA512 crypt method."
+msgstr "您只可以对 SHA256 或 SHA512 使用此选项。"
+
+#: newusers.8.xml:352(para) chgpasswd.8.xml:175(para)
+msgid ""
+"By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and "
+"SHA_CRYPT_MAX_ROUNDS variables in <filename>/etc/login.defs</filename>."
+msgstr ""
+"默认,轮转数由 <filename>/etc/login.defs</filename> 文件中的 "
+"SHA_CRYPT_MIN_ROUNDS 和 SHA_CRYPT_MAX_ROUNDS 变量确定。"
+
+#: newusers.8.xml:364(para)
+msgid ""
+"The input file must be protected since it contains unencrypted passwords."
+msgstr "输入文件必须受到保护,因为它包含未加密的密码。"
+
+#: newusers.8.xml:368(para) chgpasswd.8.xml:191(para)
+msgid ""
+"You should make sure the passwords and the encryption method respect the "
+"system's password policy."
+msgstr "您需要确保你吗和加密方法符合系统的密码策略。"
+
+#: newusers.8.xml:444(filename)
+msgid "/etc/pam.d/newusers"
+msgstr "/etc/pam.d/newusers"
+
+#: newusers.8.xml:446(para)
+msgid "PAM configuration for <command>newusers</command>."
+msgstr "<command>newusers</command> 的 PAM 配置。"
+
+#: newusers.8.xml:466(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>grpck</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, <phrase condition="
+"\"subids\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: newgrp.1.xml:58(refentrytitle) newgrp.1.xml:65(refname)
+#: newgrp.1.xml:71(command)
+msgid "newgrp"
+msgstr "newgrp"
+
+#: newgrp.1.xml:66(refpurpose)
+msgid "log in to a new group"
+msgstr "登录到一个新组"
+
+#: newgrp.1.xml:72(replaceable) grpck.8.xml:74(replaceable)
+#: groupadd.8.xml:78(replaceable) gpasswd.1.xml:88(replaceable)
+msgid "group"
+msgstr "group"
+
+#: newgrp.1.xml:78(para)
+msgid ""
+"The <command>newgrp</command> command is used to change the current group ID "
+"during a login session. If the optional <option>-</option> flag is given, "
+"the user's environment will be reinitialized as though the user had logged "
+"in, otherwise the current environment, including current working directory, "
+"remains unchanged."
+msgstr ""
+
+#: newgrp.1.xml:86(para)
+msgid ""
+"<command>newgrp</command> changes the current real group ID to the named "
+"group, or to the default group listed in <filename>/etc/passwd</filename> if "
+"no group name is given. <command>newgrp</command> also tries to add the "
+"group to the user groupset. If not root, the user will be prompted for a "
+"password if she does not have a password (in <filename>/etc/shadow</"
+"filename> if this user has an entry in the shadowed password file, or in "
+"<filename>/etc/passwd</filename> otherwise) and the group does, or if the "
+"user is not listed as a member and the group has a password. The user will "
+"be denied access if the group password is empty and the user is not listed "
+"as a member."
+msgstr ""
+
+#: newgrp.1.xml:100(para)
+msgid ""
+"If there is an entry for this group in <filename>/etc/gshadow</filename>, "
+"then the list of members and the password of this group will be taken from "
+"this file, otherwise, the entry in <filename>/etc/group</filename> is "
+"considered."
+msgstr ""
+
+#: newgrp.1.xml:152(para)
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, <citerefentry condition="
+"\"gshadow\"><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, <citerefentry condition="
+"\"gshadow\"><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry></phrase>."
+
+#: logoutd.8.xml:57(refentrytitle) logoutd.8.xml:64(refname)
+#: logoutd.8.xml:70(command)
+msgid "logoutd"
+msgstr "logoutd"
+
+#: logoutd.8.xml:65(refpurpose)
+msgid "enforce login time restrictions"
+msgstr "强制登录时间限制"
+
+#: logoutd.8.xml:76(para)
+msgid ""
+"<command>logoutd</command> enforces the login time and port restrictions "
+"specified in <filename>/etc/porttime</filename>. <command>logoutd</command> "
+"should be started from <filename>/etc/rc</filename>. The <filename>/var/run/"
+"utmp</filename> file is scanned periodically and each user name is checked "
+"to see if the named user is permitted on the named port at the current time. "
+"Any login session which is violating the restrictions in <filename>/etc/"
+"porttime</filename> is terminated."
+msgstr ""
+
+#: logoutd.8.xml:98(filename) login.1.xml:341(filename)
+msgid "/var/run/utmp"
+msgstr "/var/run/utmp"
+
+#: logoutd.8.xml:100(para) login.1.xml:343(para)
+msgid "List of current login sessions."
+msgstr "当前登录会话的列表。"
+
+#: login.defs.5.xml:124(refentrytitle) login.defs.5.xml:131(refname)
+msgid "login.defs"
+msgstr "login.defs"
+
+#: login.defs.5.xml:132(refpurpose)
+msgid "shadow password suite configuration"
+msgstr "影子密码套件配置"
+
+#: login.defs.5.xml:137(para)
+msgid ""
+"The <filename>/etc/login.defs</filename> file defines the site-specific "
+"configuration for the shadow password suite. This file is required. Absence "
+"of this file will not prevent system operation, but will probably result in "
+"undesirable operation."
+msgstr ""
+
+#: login.defs.5.xml:144(para)
+msgid ""
+"This file is a readable text file, each line of the file describing one "
+"configuration parameter. The lines consist of a configuration name and "
+"value, separated by whitespace. Blank lines and comment lines are ignored. "
+"Comments are introduced with a \"#\" pound sign and the pound sign must be "
+"the first non-white character of the line."
+msgstr ""
+
+#: login.defs.5.xml:152(para)
+msgid ""
+"Parameter values may be of four types: strings, booleans, numbers, and long "
+"numbers. A string is comprised of any printable characters. A boolean should "
+"be either the value <replaceable>yes</replaceable> or <replaceable>no</"
+"replaceable>. An undefined boolean parameter or one with a value other than "
+"these will be given a <replaceable>no</replaceable> value. Numbers (both "
+"regular and long) may be either decimal values, octal values (precede the "
+"value with <replaceable>0</replaceable>) or hexadecimal values (precede the "
+"value with <replaceable>0x</replaceable>). The maximum value of the regular "
+"and long numeric parameters is machine-dependent."
+msgstr ""
+
+#: login.defs.5.xml:167(para)
+msgid "The following configuration items are provided:"
+msgstr "提供如下配置项:"
+
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+msgid "<option>CHFN_AUTH</option> (boolean)"
+msgstr "<option>CHFN_AUTH</option> (boolean)"
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chfn</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+"如果为 <replaceable>yes</replaceable>,<command>chfn</command> 进行任何更改前"
+"都要要求认证,除非由超级用户运行。"
+
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+msgid "<option>CHFN_RESTRICT</option> (string)"
+msgstr "<option>CHFN_RESTRICT</option> (string)"
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"This parameter specifies which values in the <emphasis remap=\"I\">gecos</"
+"emphasis> field of the <filename>/etc/passwd</filename> file may be changed "
+"by regular users using the <command>chfn</command> program. It can be any "
+"combination of letters <replaceable>f</replaceable>, <replaceable>r</"
+"replaceable>, <replaceable>w</replaceable>, <replaceable>h</replaceable>, "
+"for Full name, Room number, Work phone, and Home phone, respectively. For "
+"backward compatibility, <replaceable>yes</replaceable> is equivalent to "
+"<replaceable>rwh</replaceable> and <replaceable>no</replaceable> is "
+"equivalent to <replaceable>frwh</replaceable>. If not specified, only the "
+"superuser can make any changes. The most restrictive setting is better "
+"achieved by not installing <command>chfn</command> SUID."
+msgstr ""
+
+#: login.defs.5.xml:32(term) chsh.1.xml:32(term)
+msgid "<option>CHSH_AUTH</option> (boolean)"
+msgstr "<option>CHSH_AUTH</option> (boolean)"
+
+#: login.defs.5.xml:34(para) chsh.1.xml:34(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chsh</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+"如果 <replaceable>yes</replaceable>,<command>chsh</command> 程序在做任何更改"
+"之前都会要求认证,除非是以超级用户身份运行的。"
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ERASECHAR</option> (number)"
+msgstr "<option>ERASECHAR</option> (number)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Terminal ERASE character (<replaceable>010</replaceable> = backspace, "
+"<replaceable>0177</replaceable> = DEL)."
+msgstr ""
+"终端擦除字符 (<replaceable>010</replaceable> = backspace, <replaceable>0177</"
+"replaceable> = DEL)。"
+
+#: login.defs.5.xml:38(para) login.defs.5.xml:37(para) login.1.xml:38(para)
+#: login.1.xml:37(para)
+msgid ""
+"The value can be prefixed \"0\" for an octal value, or \"0x\" for an "
+"hexadecimal value."
+msgstr "此值可以使用前缀“0”表示八进制,“0x”表示十六进制。"
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FAIL_DELAY</option> (number)"
+msgstr "<option>FAIL_DELAY</option> (number)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Delay in seconds before being allowed another attempt after a login failure."
+msgstr "登录失败后,等待多少秒才再允许登录。"
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FAILLOG_ENAB</option> (boolean)"
+msgstr "<option>FAILLOG_ENAB</option> (boolean)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable logging and display of <filename>/var/log/faillog</filename> login "
+"failure info."
+msgstr "允许登录并显示 <filename>/var/log/faillog</filename> 登录失败信息。"
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FAKE_SHELL</option> (string)"
+msgstr "<option>FAKE_SHELL</option> (string)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, <command>login</command> will execute this shell instead of the "
+"users' shell specified in <filename>/etc/passwd</filename>."
+msgstr ""
+"如果设置了,<command>login</command> 将执行此 shell 而不是在 <filename>/etc/"
+"passwd</filename> 中指定的用户 shell。"
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FTMP_FILE</option> (string)"
+msgstr "<option>FTMP_FILE</option> (string)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, login failures will be logged in this file in a utmp format."
+msgstr "如果定义,登录失败会以 utmp 格式记录在此文件中。"
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>HUSHLOGIN_FILE</option> (string)"
+msgstr "<option>HUSHLOGIN_FILE</option> (string)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, this file can inhibit all the usual chatter during the login "
+"sequence. If a full pathname is specified, then hushed mode will be enabled "
+"if the user's name or shell are found in the file. If not a full pathname, "
+"then hushed mode will be enabled if the file exists in the user's home "
+"directory."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ISSUE_FILE</option> (string)"
+msgstr "<option>ISSUE_FILE</option> (string)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "If defined, this file will be displayed before each login prompt."
+msgstr "如果定义了,此文件将在每次的登录提示之前现实。"
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>KILLCHAR</option> (number)"
+msgstr "<option>KILLCHAR</option> (number)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Terminal KILL character (<replaceable>025</replaceable> = CTRL/U)."
+msgstr "终端 KILL 字符 (<replaceable>025</replaceable> = CTRL/U)。"
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LASTLOG_ENAB</option> (boolean)"
+msgstr "<option>LASTLOG_ENAB</option> (boolean)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging and display of /var/log/lastlog login time info."
+msgstr "允许记录和显示 /var/log/lastlog 登录时间信息。"
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOG_OK_LOGINS</option> (boolean)"
+msgstr "<option>LOG_OK_LOGINS</option> (boolean)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging of successful logins."
+msgstr "允许记录成功登录。"
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOG_UNKFAIL_ENAB</option> (boolean)"
+msgstr "<option>LOG_UNKFAIL_ENAB</option> (boolean)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable display of unknown usernames when login failures are recorded."
+msgstr "在记录到登录失败时,允许记录未知用户名。"
+
+#: login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"Note: logging unknown usernames may be a security issue if an user enter her "
+"password instead of her login name."
+msgstr ""
+"注意:如果用户不小心将密码输入到了登录名中,记录未知用户名可能是一个安全隐"
+"患。"
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOGIN_RETRIES</option> (number)"
+msgstr "<option>LOGIN_RETRIES</option> (number)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Maximum number of login retries in case of bad password."
+msgstr "密码错误时,重试的最大次数。"
+
+#: login.defs.5.xml:37(para) login.1.xml:37(para)
+#, fuzzy
+#| msgid ""
+#| "This will most likely be overridden by PAM, since the default pam_unix "
+#| "module has it's own built in of 3 retries. However, this is a safe "
+#| "fallback in case you are using an authentication module that does not "
+#| "enforce PAM_MAXTRIES."
+msgid ""
+"This will most likely be overridden by PAM, since the default pam_unix "
+"module has its own built in of 3 retries. However, this is a safe fallback "
+"in case you are using an authentication module that does not enforce "
+"PAM_MAXTRIES."
+msgstr ""
+"这很有可能被 PAM 覆盖,因为默认的 pam_unix 模块有其内建 3 次重新尝试。然而,"
+"在您使用一个没有强制 PAM_MAXTRIES 的认证模块时,这是一个安全反馈。"
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOGIN_TIMEOUT</option> (number)"
+msgstr "<option>LOGIN_TIMEOUT</option> (number)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Max time in seconds for login."
+msgstr "最大登录时间(以秒为单位)。"
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>MOTD_FILE</option> (string)"
+msgstr "<option>MOTD_FILE</option> (string)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+#, fuzzy
+msgid ""
+"If defined, \":\" delimited list of \"message of the day\" files to be "
+"displayed upon login."
+msgstr "如果定义了,登录时显示“:”分隔的“message of the day”。"
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>NOLOGINS_FILE</option> (string)"
+msgstr "<option>NOLOGINS_FILE</option> (string)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, name of file whose presence will inhibit non-root logins. The "
+"contents of this file should be a message indicating why logins are "
+"inhibited."
+msgstr ""
+
+#: login.defs.5.xml:212(para)
+msgid ""
+"<option>PASS_MAX_DAYS</option>, <option>PASS_MIN_DAYS</option> and "
+"<option>PASS_WARN_AGE</option> are only used at the time of account "
+"creation. Any changes to these settings won't affect existing accounts."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>PORTTIME_CHECKS_ENAB</option> (boolean)"
+msgstr "<option>PORTTIME_CHECKS_ENAB</option> (boolean)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+#, fuzzy
+#| msgid "Enable checking of time restrictions specified in /etc/porttime."
+msgid ""
+"Enable checking of time restrictions specified in <filename>/etc/porttime</"
+"filename>."
+msgstr "启用在 /etc/porttime 中指定的时间限制检查。"
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>TTYGROUP</option> (string)"
+msgstr "<option>TTYGROUP</option> (string)"
+
+#: login.defs.5.xml:33(term) login.1.xml:33(term)
+msgid "<option>TTYPERM</option> (string)"
+msgstr "<option>TTYPERM</option> (string)"
+
+#: login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"The terminal permissions: the login tty will be owned by the "
+"<option>TTYGROUP</option> group, and the permissions will be set to "
+"<option>TTYPERM</option>."
+msgstr ""
+
+#: login.defs.5.xml:40(para) login.1.xml:40(para)
+msgid ""
+"By default, the ownership of the terminal is set to the user's primary group "
+"and the permissions are set to <replaceable>0600</replaceable>."
+msgstr ""
+
+#: login.defs.5.xml:45(para) login.1.xml:45(para)
+msgid ""
+"<option>TTYGROUP</option> can be either the name of a group or a numeric "
+"group identifier."
+msgstr ""
+
+#: login.defs.5.xml:49(para) login.1.xml:49(para)
+msgid ""
+"If you have a <command>write</command> program which is \"setgid\" to a "
+"special group which owns the terminals, define TTYGROUP to the group number "
+"and TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign "
+"TTYPERM to either 622 or 600."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>TTYTYPE_FILE</option> (string)"
+msgstr "<option>TTYTYPE_FILE</option> (string)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, file which maps tty line to TERM environment parameter. Each "
+"line of the file is in a format something like \"vt100 tty01\"."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ULIMIT</option> (number)"
+msgstr "<option>ULIMIT</option> (number)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Default <command>ulimit</command> value."
+msgstr "默认 <command>ulimit</command> 值。"
+
+#: login.defs.5.xml:245(title)
+msgid "CROSS REFERENCES"
+msgstr "交叉引用"
+
+#: login.defs.5.xml:246(para)
+msgid ""
+"The following cross references show which programs in the shadow password "
+"suite use which parameters."
+msgstr "如下交叉引用显示影子密码套件哪个程序使用哪个参数。"
+
+#: login.defs.5.xml:253(term) chage.1.xml:58(refentrytitle)
+#: chage.1.xml:65(refname) chage.1.xml:70(command)
+msgid "chage"
+msgstr "chage"
+
+#: login.defs.5.xml:255(para) login.defs.5.xml:451(phrase)
+#: login.defs.5.xml:523(phrase)
+msgid "USE_TCB"
+msgstr "USE_TCB"
+
+#: login.defs.5.xml:259(term) chfn.1.xml:60(refentrytitle)
+#: chfn.1.xml:67(refname) chfn.1.xml:73(command)
+msgid "chfn"
+msgstr "chfn"
+
+#: login.defs.5.xml:261(para)
+msgid ""
+"<phrase condition=\"no_pam\">CHFN_AUTH</phrase> CHFN_RESTRICT <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase>"
+msgstr ""
+"<phrase condition=\"no_pam\">CHFN_AUTH</phrase> CHFN_RESTRICT <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase>"
+
+#: login.defs.5.xml:269(term) chgpasswd.8.xml:57(refentrytitle)
+#: chgpasswd.8.xml:64(refname) chgpasswd.8.xml:70(command)
+msgid "chgpasswd"
+msgstr "chgpasswd"
+
+#: login.defs.5.xml:271(para) login.defs.5.xml:302(para)
+msgid ""
+"ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB <phrase condition="
+"\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+"ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB <phrase condition="
+"\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+
+#: login.defs.5.xml:279(term) chpasswd.8.xml:61(refentrytitle)
+#: chpasswd.8.xml:68(refname) chpasswd.8.xml:74(command)
+msgid "chpasswd"
+msgstr "chpasswd"
+
+#: login.defs.5.xml:282(phrase)
+msgid "ENCRYPT_METHOD MD5_CRYPT_ENAB"
+msgstr "ENCRYPT_METHOD MD5_CRYPT_ENAB"
+
+#: login.defs.5.xml:284(phrase)
+msgid "SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS"
+msgstr "SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS"
+
+#: login.defs.5.xml:290(term) chsh.1.xml:60(refentrytitle)
+#: chsh.1.xml:67(refname) chsh.1.xml:73(command)
+msgid "chsh"
+msgstr "chsh"
+
+#: login.defs.5.xml:292(para)
+msgid "CHSH_AUTH LOGIN_STRING"
+msgstr "CHSH_AUTH LOGIN_STRING"
+
+#: login.defs.5.xml:300(term) gpasswd.1.xml:62(refentrytitle)
+#: gpasswd.1.xml:69(refname) gpasswd.1.xml:83(command)
+msgid "gpasswd"
+msgstr "gpasswd"
+
+#: login.defs.5.xml:310(term) groupadd.8.xml:60(refentrytitle)
+#: groupadd.8.xml:67(refname) groupadd.8.xml:73(command)
+msgid "groupadd"
+msgstr "groupadd"
+
+#: login.defs.5.xml:312(para)
+msgid "GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN"
+msgstr "GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN"
+
+#: login.defs.5.xml:319(term) groupdel.8.xml:58(refentrytitle)
+#: groupdel.8.xml:65(refname) groupdel.8.xml:71(command)
+msgid "groupdel"
+msgstr "groupdel"
+
+#: login.defs.5.xml:321(para) login.defs.5.xml:327(para)
+#: login.defs.5.xml:333(para) login.defs.5.xml:340(para)
+#: login.defs.5.xml:346(para) login.defs.5.xml:352(para)
+msgid "MAX_MEMBERS_PER_GROUP"
+msgstr "MAX_MEMBERS_PER_GROUP"
+
+#: login.defs.5.xml:325(term) groupmems.8.xml:61(refentrytitle)
+#: groupmems.8.xml:68(refname) groupmems.8.xml:74(command)
+msgid "groupmems"
+msgstr "groupmems"
+
+#: login.defs.5.xml:331(term) groupmod.8.xml:58(refentrytitle)
+#: groupmod.8.xml:65(refname) groupmod.8.xml:71(command)
+msgid "groupmod"
+msgstr "groupmod"
+
+#: login.defs.5.xml:338(term) grpck.8.xml:58(refentrytitle)
+#: grpck.8.xml:65(refname) grpck.8.xml:71(command)
+msgid "grpck"
+msgstr "grpck"
+
+#: login.defs.5.xml:357(term) lastlog.8.xml:59(refentrytitle)
+#: lastlog.8.xml:66(refname) lastlog.8.xml:72(command)
+msgid "lastlog"
+msgstr "lastlog"
+
+#: login.defs.5.xml:359(para)
+msgid "LASTLOG_UID_MAX"
+msgstr ""
+
+#: login.defs.5.xml:363(term) login.1.xml:90(refentrytitle)
+#: login.1.xml:97(refname) login.1.xml:103(command) login.1.xml:111(command)
+#: login.1.xml:118(command)
+msgid "login"
+msgstr "login"
+
+#: login.defs.5.xml:365(para)
+#, fuzzy
+#| msgid ""
+#| "<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+#| "<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ "
+#| "ENVIRON_FILE</phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam"
+#| "\">FAILLOG_ENAB</phrase> FAKE_SHELL <phrase condition=\"no_pam"
+#| "\">FTMP_FILE</phrase> HUSHLOGIN_FILE <phrase condition=\"no_pam"
+#| "\">ISSUE_FILE</phrase> KILLCHAR <phrase condition=\"no_pam"
+#| "\">LASTLOG_ENAB</phrase> LOGIN_RETRIES <phrase condition=\"no_pam"
+#| "\">LOGIN_STRING</phrase> LOGIN_TIMEOUT LOG_OK_LOGINS LOG_UNKFAIL_ENAB "
+#| "<phrase condition=\"no_pam\">MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE "
+#| "NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> TTYGROUP TTYPERM "
+#| "TTYTYPE_FILE <phrase condition=\"no_pam\">ULIMIT UMASK</phrase> "
+#| "USERGROUPS_ENAB"
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE</"
+"phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam\">FAILLOG_ENAB</"
+"phrase> FAKE_SHELL <phrase condition=\"no_pam\">FTMP_FILE</phrase> "
+"HUSHLOGIN_FILE <phrase condition=\"no_pam\">ISSUE_FILE</phrase> KILLCHAR "
+"<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 <phrase condition=\"no_pam"
+"\">MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE NOLOGINS_FILE "
+"PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> TTYGROUP TTYPERM TTYTYPE_FILE "
+"<phrase condition=\"no_pam\">ULIMIT UMASK</phrase> USERGROUPS_ENAB"
+msgstr ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE</"
+"phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam\">FAILLOG_ENAB</"
+"phrase> FAKE_SHELL <phrase condition=\"no_pam\">FTMP_FILE</phrase> "
+"HUSHLOGIN_FILE <phrase condition=\"no_pam\">ISSUE_FILE</phrase> KILLCHAR "
+"<phrase condition=\"no_pam\">LASTLOG_ENAB</phrase> LOGIN_RETRIES <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase> LOGIN_TIMEOUT LOG_OK_LOGINS "
+"LOG_UNKFAIL_ENAB <phrase condition=\"no_pam\">MAIL_CHECK_ENAB MAIL_DIR "
+"MAIL_FILE MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> "
+"TTYGROUP TTYPERM TTYTYPE_FILE <phrase condition=\"no_pam\">ULIMIT UMASK</"
+"phrase> USERGROUPS_ENAB"
+
+#: login.defs.5.xml:392(term)
+msgid "newgrp / sg"
+msgstr "newgrp / sg"
+
+#: login.defs.5.xml:394(para)
+msgid "SYSLOG_SG_ENAB"
+msgstr "SYSLOG_SG_ENAB"
+
+#: login.defs.5.xml:402(para)
+#, fuzzy
+#| msgid ""
+#| "ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB "
+#| "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"sha_crypt"
+#| "\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase> SYS_GID_MAX "
+#| "SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+msgid ""
+"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> "
+"SUB_GID_COUNT SUB_GID_MAX SUB_GID_MIN SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN "
+"SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+msgstr ""
+"ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB "
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase> SYS_GID_MAX "
+"SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+
+#: login.defs.5.xml:421(para)
+msgid ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN "
+"PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN "
+"PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+
+#: login.defs.5.xml:432(para)
+msgid ""
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb"
+"\">TCB_AUTH_GROUP TCB_SYMLINKS USE_TCB</phrase>"
+msgstr ""
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb"
+"\">TCB_AUTH_GROUP TCB_SYMLINKS USE_TCB</phrase>"
+
+#: login.defs.5.xml:441(para)
+msgid ""
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb\">USE_TCB</"
+"phrase>"
+msgstr ""
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb\">USE_TCB</"
+"phrase>"
+
+#: login.defs.5.xml:458(para)
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENVIRON_FILE</phrase> ENV_PATH "
+"ENV_SUPATH <phrase condition=\"no_pam\">ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB "
+"MAIL_DIR MAIL_FILE QUOTAS_ENAB</phrase> SULOG_FILE SU_NAME <phrase condition="
+"\"no_pam\">SU_WHEEL_ONLY</phrase> SYSLOG_SU_ENAB <phrase condition=\"no_pam"
+"\">USERGROUPS_ENAB</phrase>"
+msgstr ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENVIRON_FILE</phrase> ENV_PATH "
+"ENV_SUPATH <phrase condition=\"no_pam\">ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB "
+"MAIL_DIR MAIL_FILE QUOTAS_ENAB</phrase> SULOG_FILE SU_NAME <phrase condition="
+"\"no_pam\">SU_WHEEL_ONLY</phrase> SYSLOG_SU_ENAB <phrase condition=\"no_pam"
+"\">USERGROUPS_ENAB</phrase>"
+
+#: login.defs.5.xml:473(term)
+msgid "sulogin"
+msgstr "sulogin"
+
+#: login.defs.5.xml:475(para)
+msgid "ENV_HZ <phrase condition=\"no_pam\">ENV_TZ</phrase>"
+msgstr "ENV_HZ <phrase condition=\"no_pam\">ENV_TZ</phrase>"
+
+#: login.defs.5.xml:484(para)
+#, fuzzy
+#| msgid ""
+#| "CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP PASS_MAX_DAYS "
+#| "PASS_MIN_DAYS PASS_WARN_AGE SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX "
+#| "SYS_UID_MIN UID_MAX UID_MIN UMASK <phrase condition=\"tcb"
+#| "\">TCB_AUTH_GROUP TCB_SYMLINK USE_TCB</phrase>"
+msgid ""
+"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 SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN "
+"SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK "
+"<phrase condition=\"tcb\">TCB_AUTH_GROUP TCB_SYMLINK USE_TCB</phrase>"
+msgstr ""
+"CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP PASS_MAX_DAYS "
+"PASS_MIN_DAYS PASS_WARN_AGE SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN "
+"UID_MAX UID_MIN UMASK <phrase condition=\"tcb\">TCB_AUTH_GROUP TCB_SYMLINK "
+"USE_TCB</phrase>"
+
+#: login.defs.5.xml:502(para)
+msgid ""
+"MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB <phrase "
+"condition=\"tcb\">TCB_SYMLINKS USE_TCB</phrase>"
+msgstr ""
+"MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB <phrase "
+"condition=\"tcb\">TCB_SYMLINKS USE_TCB</phrase>"
+
+#: login.defs.5.xml:512(para)
+#, fuzzy
+#| msgid ""
+#| "MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP <phrase condition=\"tcb"
+#| "\">TCB_SYMLINKS USE_TCB</phrase>"
+msgid ""
+"LASTLOG_UID_MAX MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP <phrase condition="
+"\"tcb\">TCB_SYMLINKS USE_TCB</phrase>"
+msgstr ""
+"MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP <phrase condition=\"tcb"
+"\">TCB_SYMLINKS USE_TCB</phrase>"
+
+#: login.defs.5.xml:532(para)
+msgid ""
+"Much of the functionality that used to be provided by the shadow password "
+"suite is now handled by PAM. Thus, <filename>/etc/login.defs</filename> is "
+"no longer used by <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, or less used by "
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, and <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>. Please refer to the "
+"corresponding PAM configuration files instead."
+msgstr ""
+
+#: login.defs.5.xml:548(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: login.access.5.xml:58(refentrytitle) login.access.5.xml:65(refname)
+msgid "login.access"
+msgstr "login.access"
+
+#: login.access.5.xml:66(refpurpose)
+msgid "login access control table"
+msgstr "登录访问控制表"
+
+#: login.access.5.xml:71(para)
+msgid ""
+"The <emphasis remap=\"I\">login.access</emphasis> file specifies (user, "
+"host) combinations and/or (user, tty) combinations for which a login will be "
+"either accepted or refused."
+msgstr ""
+
+#: login.access.5.xml:77(para)
+msgid ""
+"When someone logs in, the <emphasis remap=\"I\">login.access</emphasis> is "
+"scanned for the first entry that matches the (user, host) combination, or, "
+"in case of non-networked logins, the first entry that matches the (user, "
+"tty) combination. The permissions field of that table entry determines "
+"whether the login will be accepted or refused."
+msgstr ""
+
+#: login.access.5.xml:85(para)
+msgid ""
+"Each line of the login access control table has three fields separated by a "
+"\":\" character:"
+msgstr "登录访问控制表的每一行有“:”分隔的三个字段:"
+
+#: login.access.5.xml:90(para)
+msgid ""
+"<emphasis remap=\"I\">permission</emphasis>:<emphasis remap=\"I\">users</"
+"emphasis>:<emphasis remap=\"I\">origins</emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">permission</emphasis>:<emphasis remap=\"I\">users</"
+"emphasis>:<emphasis remap=\"I\">origins</emphasis>"
+
+#: login.access.5.xml:94(para)
+msgid ""
+"The first field should be a \"<emphasis>+</emphasis>\" (access granted) or "
+"\"<emphasis>-</emphasis>\" (access denied) character. The second field "
+"should be a list of one or more login names, group names, or <emphasis>ALL</"
+"emphasis> (always matches). The third field should be a list of one or more "
+"tty names (for non-networked logins), host names, domain names (begin with "
+"\"<literal>.</literal>\"), host addresses, internet network numbers (end "
+"with \"<literal>.</literal>\"), <emphasis>ALL</emphasis> (always matches) or "
+"<emphasis>LOCAL</emphasis> (matches any string that does not contain a "
+"\"<literal>.</literal>\" character). If you run NIS you can use "
+"@netgroupname in host or user patterns."
+msgstr ""
+
+#: login.access.5.xml:108(para)
+msgid ""
+"The <emphasis>EXCEPT</emphasis> operator makes it possible to write very "
+"compact rules."
+msgstr "<emphasis>EXCEPT</emphasis> 操作符让编写非常复杂的规则,成为可能。"
+
+#: login.access.5.xml:113(para)
+msgid ""
+"The group file is searched only when a name does not match that of the "
+"logged-in user. Only groups are matched in which users are explicitly "
+"listed: the program does not look at a user's primary group id value."
+msgstr ""
+
+#: login.1.xml:98(refpurpose)
+msgid "begin session on the system"
+msgstr "在系统上启动回话"
+
+#: login.1.xml:104(arg) login.1.xml:112(arg) login.1.xml:119(arg)
+#: login.1.xml:236(option) groupmems.8.xml:79(arg)
+msgid "-p"
+msgstr "-p"
+
+#: login.1.xml:105(replaceable) login.1.xml:113(replaceable)
+#: login.1.xml:120(replaceable)
+msgid "host"
+msgstr "主机"
+
+#: login.1.xml:105(arg) login.1.xml:113(arg)
+msgid "-h <placeholder-1/>"
+msgstr "-h <placeholder-1/>"
+
+#: login.1.xml:108(replaceable)
+msgid "ENV=VAR"
+msgstr "ENV=VAR"
+
+#: login.1.xml:114(arg) login.1.xml:214(option)
+msgid "-f"
+msgstr "-f"
+
+#: login.1.xml:120(arg)
+msgid "-r <placeholder-1/>"
+msgstr "-r <placeholder-1/>"
+
+#: login.1.xml:126(para)
+msgid ""
+"The <command>login</command> program is used to establish a new session with "
+"the system. It is normally invoked automatically by responding to the "
+"<emphasis remap=\"I\">login:</emphasis> prompt on the user's terminal. "
+"<command>login</command> may be special to the shell and may not be invoked "
+"as a sub-process. When called from a shell, <command>login</command> should "
+"be executed as <emphasis remap=\"B\">exec login</emphasis> which will cause "
+"the user to exit from the current shell (and thus will prevent the new "
+"logged in user to return to the session of the caller). Attempting to "
+"execute <command>login</command> from any shell but the login shell will "
+"produce an error message."
+msgstr ""
+
+#: login.1.xml:140(para)
+msgid ""
+"The user is then prompted for a password, where appropriate. Echoing is "
+"disabled to prevent revealing the password. Only a small number of password "
+"failures are permitted before <command>login</command> exits and the "
+"communications link is severed."
+msgstr ""
+
+#: login.1.xml:147(para)
+msgid ""
+"If password aging has been enabled for your account, you may be prompted for "
+"a new password before proceeding. You will be forced to provide your old "
+"password and the new password before continuing. Please refer to "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> for more information."
+msgstr ""
+
+#: login.1.xml:156(para)
+msgid ""
+"After a successful login, you will be informed of any system messages and "
+"the presence of mail. You may turn off the printing of the system message "
+"file, <filename>/etc/motd</filename>, by creating a zero-length file "
+"<filename>.hushlogin</filename> in your login directory. The mail message "
+"will be one of \"<emphasis>You have new mail.</emphasis>\", \"<emphasis>You "
+"have mail.</emphasis>\", or \"<emphasis>No Mail.</emphasis>\" according to "
+"the condition of your mailbox."
+msgstr ""
+
+#: login.1.xml:167(para)
+msgid ""
+"Your user and group ID will be set according to their values in the "
+"<filename>/etc/passwd</filename> file. The value for <envar>$HOME</envar>, "
+"<envar>$SHELL</envar>, <envar>$PATH</envar>, <envar>$LOGNAME</envar>, and "
+"<envar>$MAIL</envar> are set according to the appropriate fields in the "
+"password entry. Ulimit, umask and nice values may also be set according to "
+"entries in the GECOS field."
+msgstr ""
+
+#: login.1.xml:176(para)
+msgid ""
+"On some installations, the environmental variable <envar>$TERM</envar> will "
+"be initialized to the terminal type on your tty line, as specified in "
+"<filename>/etc/ttytype</filename>."
+msgstr ""
+
+#: login.1.xml:182(para)
+msgid ""
+"An initialization script for your command interpreter may also be executed. "
+"Please see the appropriate manual section for more information on this "
+"function."
+msgstr ""
+"命令解释器的初始化脚本也可能执行。请参考手册中相应的章节来获取关于此功能的更"
+"多信息。"
+
+#: login.1.xml:194(para) login.1.xml:270(para)
+msgid ""
+"The <command>login</command> program is NOT responsible for removing users "
+"from the utmp file. It is the responsibility of "
+"<citerefentry><refentrytitle>getty</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry> and <citerefentry><refentrytitle>init</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry> to clean up apparent "
+"ownership of a terminal session. If you use <command>login</command> from "
+"the shell prompt without <command>exec</command>, the user you use will "
+"continue to appear to be logged in even after you log out of the \"subsession"
+"\"."
+msgstr ""
+
+#: login.1.xml:217(para)
+msgid "Do not perform authentication, user is preauthenticated."
+msgstr "不要执行认证,用户已经预认证过。"
+
+#: login.1.xml:220(para)
+msgid "Note: In that case, <replaceable>username</replaceable> is mandatory."
+msgstr "注意:此时,<replaceable>username</replaceable> 是强制的。"
+
+#: login.1.xml:228(option)
+msgid "-h"
+msgstr "-h"
+
+#: login.1.xml:231(para)
+msgid "Name of the remote host for this login."
+msgstr "此登录的远程主机名。"
+
+#: login.1.xml:239(para)
+msgid "Preserve environment."
+msgstr "保留环境。"
+
+#: login.1.xml:244(option)
+msgid "-r"
+msgstr "-r"
+
+#: login.1.xml:247(para)
+msgid "Perform autologin protocol for rlogin."
+msgstr "为 rlogin (远程登录)执行 autologin (自动登录)协议。"
+
+#: login.1.xml:252(para)
+msgid ""
+"The <option>-r</option>, <option>-h</option> and <option>-f</option> options "
+"are only used when <command>login</command> is invoked by root."
+msgstr ""
+"<option>-r</option>, <option>-h</option> and <option>-f</option> 只能用于 "
+"root 使用 <command>login</command> 时。"
+
+#: login.1.xml:261(para)
+msgid ""
+"This version of <command>login</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+"此版本的 <command>login</command> 有很多编译选项,只有一部分可以在任何站点使"
+"用。"
+
+#: login.1.xml:266(para)
+msgid ""
+"The location of files is subject to differences in system configuration."
+msgstr "文件的位置由系统配置决定。"
+
+#: login.1.xml:282(para)
+msgid ""
+"As with any program, <command>login</command>'s appearance can be faked. If "
+"non-trusted users have physical access to a machine, an attacker could use "
+"this to obtain the password of the next person coming to sit in front of the "
+"machine. Under Linux, the SAK mechanism can be used by users to initiate a "
+"trusted path and prevent this kind of attack."
+msgstr ""
+
+#: login.1.xml:347(filename)
+msgid "/var/log/wtmp"
+msgstr "/var/log/wtmp"
+
+#: login.1.xml:349(para)
+msgid "List of previous login sessions."
+msgstr "先前的登录会话列表。"
+
+#: login.1.xml:365(filename)
+msgid "/etc/motd"
+msgstr "/etc/motd"
+
+#: login.1.xml:367(para)
+msgid "System message of the day file."
+msgstr ""
+
+#: login.1.xml:371(filename)
+msgid "/etc/nologin"
+msgstr "/etc/nologin"
+
+#: login.1.xml:373(para)
+msgid "Prevent non-root users from logging in."
+msgstr "阻止非 root 用户登录。"
+
+#: login.1.xml:377(filename)
+msgid "/etc/ttytype"
+msgstr "/etc/ttytype"
+
+#: login.1.xml:379(para)
+msgid "List of terminal types."
+msgstr "终端类型列表。"
+
+#: login.1.xml:383(filename)
+msgid "$HOME/.hushlogin"
+msgstr "$HOME/.hushlogin"
+
+#: login.1.xml:385(para)
+msgid "Suppress printing of system messages."
+msgstr "阻止现实系统信息。"
+
+#: login.1.xml:399(para)
+msgid ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: limits.5.xml:41(firstname)
+msgid "Luca"
+msgstr ""
+
+#: limits.5.xml:42(surname)
+msgid "Berra"
+msgstr ""
+
+#: limits.5.xml:59(refentrytitle) limits.5.xml:66(refname)
+msgid "limits"
+msgstr "limits"
+
+#: limits.5.xml:67(refpurpose)
+msgid "resource limits definition"
+msgstr "资源限制描述"
+
+#: limits.5.xml:73(para)
+msgid ""
+"The <emphasis remap=\"I\">limits</emphasis> file (<filename>/etc/limits</"
+"filename> by default or LIMITS_FILE defined <filename>config.h</filename>) "
+"describes the resource limits you wish to impose. It should be owned by root "
+"and readable by root account only."
+msgstr ""
+
+#: limits.5.xml:81(para)
+msgid ""
+"By default no quota is imposed on 'root'. In fact, there is no way to impose "
+"limits via this procedure to root-equiv accounts (accounts with UID 0)."
+msgstr ""
+
+#: limits.5.xml:87(para)
+msgid "Each line describes a limit for a user in the form:"
+msgstr "每行以如下格式对一个用户描述限制:"
+
+#: limits.5.xml:90(emphasis)
+msgid "user LIMITS_STRING"
+msgstr "user LIMITS_STRING"
+
+#: limits.5.xml:93(para)
+msgid "or in the form:"
+msgstr "或如下格式:"
+
+#: limits.5.xml:96(emphasis)
+msgid "@group LIMITS_STRING"
+msgstr "@group LIMITS_STRING"
+
+#: limits.5.xml:99(para)
+msgid ""
+"The <emphasis>LIMITS_STRING</emphasis> is a string of a concatenated list of "
+"resource limits. Each limit consists of a letter identifier followed by a "
+"numerical limit."
+msgstr ""
+"<emphasis>LIMITS_STRING</emphasis> 是一个串联的资源限制列表。每条限制由一个字"
+"母指示符和跟随的数字限制组成。"
+
+#: limits.5.xml:105(para)
+msgid "The valid identifiers are:"
+msgstr "可用的指示符有:"
+
+#: limits.5.xml:108(para)
+msgid "A: max address space (KB)"
+msgstr "A:最大地址空间 (KB)"
+
+#: limits.5.xml:109(para)
+msgid "C: max core file size (KB)"
+msgstr "C:最大转储文件大小 (KB)"
+
+#: limits.5.xml:110(para)
+msgid "D: max data size (KB)"
+msgstr "D:最大数据大小 (KB)"
+
+#: limits.5.xml:111(para)
+#, fuzzy
+#| msgid "F: maximum filesize (KB)"
+msgid "F: maximum file size (KB)"
+msgstr "F:最大文件尺寸 (KB)"
+
+#: limits.5.xml:112(para)
+msgid ""
+"K: file creation mask, set by <citerefentry><refentrytitle>umask</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"K:文件创建掩码,由 <citerefentry><refentrytitle>umask</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry> 设置。"
+
+#: limits.5.xml:117(para)
+msgid "I: max nice value (0..39 which translates to 20..-19)"
+msgstr "I:最高 nice 级别,(0...39 对应 20...-19)"
+
+#: limits.5.xml:119(para)
+msgid "L: max number of logins for this user"
+msgstr "L:此用户的最大登录数"
+
+#: limits.5.xml:120(para)
+msgid "M: max locked-in-memory address space (KB)"
+msgstr ""
+
+#: limits.5.xml:121(para)
+msgid "N: max number of open files"
+msgstr "N:最大的文件打开数"
+
+#: limits.5.xml:122(para)
+msgid "O: max real time priority"
+msgstr "O:最大实时优先级"
+
+#: limits.5.xml:123(para)
+msgid ""
+"P: process priority, set by <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"P:进程优先级,由 <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry> 设置。"
+
+#: limits.5.xml:128(para)
+msgid "R: max resident set size (KB)"
+msgstr ""
+
+#: limits.5.xml:129(para)
+msgid "S: max stack size (KB)"
+msgstr "S:最大栈尺寸 (KB)"
+
+#: limits.5.xml:130(para)
+msgid "T: max CPU time (MIN)"
+msgstr "T:最大 CPU 时间 (分钟)"
+
+#: limits.5.xml:131(para)
+msgid "U: max number of processes"
+msgstr "U:最大处理器数目"
+
+#: limits.5.xml:134(para)
+msgid ""
+"For example, <emphasis remap=\"I\">L2D2048N5</emphasis> is a valid "
+"<emphasis>LIMITS_STRING</emphasis>. For reading convenience, the following "
+"entries are equivalent:"
+msgstr ""
+"例如,<emphasis remap=\"I\">L2D2048N5</emphasis> 就是有效的 "
+"<emphasis>LIMITS_STRING</emphasis>。为了阅读方便,如下项表示同样的意思:"
+
+#: limits.5.xml:140(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+" username L2D2048N5\n"
+" username L2 D2048 N5\n"
+" "
+msgstr ""
+"\n"
+" username L2D2048N5\n"
+" username L2 D2048 N5\n"
+" "
+
+#: limits.5.xml:145(para)
+msgid ""
+"Be aware that after <emphasis remap=\"I\">username</emphasis> the rest of "
+"the line is considered a limit string, thus comments are not allowed. An "
+"invalid limits string will be rejected (not considered) by the "
+"<command>login</command> program."
+msgstr ""
+
+#: limits.5.xml:152(para)
+msgid ""
+"The default entry is denoted by username \"<emphasis>*</emphasis>\". If you "
+"have multiple <emphasis remap=\"I\">default</emphasis> entries in your "
+"<emphasis>LIMITS_FILE</emphasis>, then the last one will be used as the "
+"default entry."
+msgstr ""
+
+#: limits.5.xml:159(para)
+msgid ""
+"The limits specified in the form \"<replaceable>@group</replaceable>\" apply "
+"to the members of the specified <replaceable>group</replaceable>."
+msgstr ""
+
+#: limits.5.xml:165(para)
+msgid ""
+"If more than one line with limits for a user exist, only the first line for "
+"this user will be considered."
+msgstr ""
+
+#: limits.5.xml:170(para)
+msgid ""
+"If no lines are specified for a user, the last <replaceable>@group</"
+"replaceable> line matching a group whose the user is a member of will be "
+"considered, or the last line with default limits if no groups contain the "
+"user."
+msgstr ""
+
+#: limits.5.xml:177(para)
+msgid ""
+"To completely disable limits for a user, a single dash \"<emphasis>-</"
+"emphasis>\" will do."
+msgstr "要完全禁用对一个用户的限制,可以仅仅只使用一个短线“-”。"
+
+#: limits.5.xml:182(para)
+msgid ""
+"To disable a limit for a user, a single dash \"<replaceable>-</replaceable>"
+"\" can be used instead of the numerical value for this limit."
+msgstr ""
+
+#: limits.5.xml:188(para)
+msgid ""
+"Also, please note that all limit settings are set PER LOGIN. They are not "
+"global, nor are they permanent. Perhaps global limits will come, but for now "
+"this will have to do ;)"
+msgstr ""
+
+#: limits.5.xml:199(filename)
+msgid "/etc/limits"
+msgstr "/etc/limits"
+
+#: limits.5.xml:207(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+
+#: lastlog.8.xml:67(refpurpose)
+msgid "reports the most recent login of all users or of a given user"
+msgstr "报告所有用户的最近登录情况,或者指定用户的最近登录情况"
+
+#: lastlog.8.xml:81(para)
+msgid ""
+"<command>lastlog</command> formats and prints the contents of the last login "
+"log <filename>/var/log/lastlog</filename> file. The <emphasis>login-name</"
+"emphasis>, <emphasis>port</emphasis>, and <emphasis>last login time</"
+"emphasis> will be printed. The default (no flags) causes lastlog entries to "
+"be printed, sorted by their order in <filename>/etc/passwd</filename>."
+msgstr ""
+
+#: lastlog.8.xml:93(para)
+msgid "The options which apply to the <command>lastlog</command> command are:"
+msgstr "<command>lastlog</command> 命令可以接受的选项有:"
+
+#: lastlog.8.xml:98(term)
+msgid ""
+"<option>-b</option>, <option>--before</option>&nbsp;<replaceable>DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-b</option>, <option>--before</option>&nbsp;<replaceable>DAYS</"
+"replaceable>"
+
+#: lastlog.8.xml:102(para)
+msgid ""
+"Print only lastlog records older than <emphasis remap=\"I\">DAYS</emphasis>."
+msgstr "只显示老于 <emphasis remap=\"I\">DAYS</emphasis> 的最近登录记录。"
+
+#: lastlog.8.xml:108(term)
+#, fuzzy
+#| msgid "<option>-u</option>, <option>--user</option>"
+msgid "<option>-C</option>, <option>--clear</option>"
+msgstr "<option>-u</option>, <option>--user</option>"
+
+#: lastlog.8.xml:112(para)
+#, fuzzy
+#| msgid ""
+#| "This option is only valid in combination with the <option>-d</option> (or "
+#| "<option>--home</option>) option."
+msgid ""
+"Clear lastlog record of a user. This option can be used only together with "
+"<option>-u</option> (<option>--user</option>))."
+msgstr ""
+"这个选项只有和 <option>-d</option> (或 <option>--home</option>) 选项组合使用"
+"时才有效。"
+
+#: lastlog.8.xml:139(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-S</option>, <option>--set</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: lastlog.8.xml:143(para)
+msgid ""
+"Set lastlog record of a user to the current time. This option can be used "
+"only together with <option>-u</option> (<option>--user</option>))."
+msgstr ""
+
+#: lastlog.8.xml:150(term) faillog.8.xml:192(term)
+msgid ""
+"<option>-t</option>, <option>--time</option>&nbsp;<replaceable>DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option>&nbsp;<replaceable>DAYS</"
+"replaceable>"
+
+#: lastlog.8.xml:154(para)
+msgid ""
+"Print the lastlog records more recent than <emphasis remap=\"I\">DAYS</"
+"emphasis>."
+msgstr "只现实新于 <emphasis remap=\"I\">DAYS</emphasis> 的最近登录记录。"
+
+#: lastlog.8.xml:161(term) faillog.8.xml:202(term)
+msgid ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+"replaceable>|<replaceable>RANGE</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+"replaceable>|<replaceable>RANGE</replaceable>"
+
+#: lastlog.8.xml:165(para)
+msgid "Print the lastlog record of the specified user(s)."
+msgstr "现实指定用户的最近登录记录。"
+
+#: lastlog.8.xml:168(para) faillog.8.xml:211(para)
+msgid ""
+"The users can be specified by a login name, a numerical user ID, or a "
+"<replaceable>RANGE</replaceable> of users. This <replaceable>RANGE</"
+"replaceable> of users can be specified with a min and max values "
+"(<replaceable>UID_MIN-UID_MAX</replaceable>), a max value (<replaceable>-"
+"UID_MAX</replaceable>), or a min value (<replaceable>UID_MIN-</replaceable>)."
+msgstr ""
+
+#: lastlog.8.xml:180(para)
+msgid ""
+"If the user has never logged in the message <emphasis>** Never logged in**</"
+"emphasis> will be displayed instead of the port and time."
+msgstr ""
+"如果用户从来没有登录过,将会显示 <emphasis>** 从未登录 **</emphasis> 而不是端"
+"口和时间。"
+
+#: lastlog.8.xml:185(para)
+msgid ""
+"Only the entries for the current users of the system will be displayed. "
+"Other entries may exist for users that were deleted previously."
+msgstr ""
+
+#: lastlog.8.xml:193(title) groups.1.xml:90(title) chsh.1.xml:140(title)
+#: chage.1.xml:237(title)
+msgid "NOTE"
+msgstr "注意"
+
+#: lastlog.8.xml:194(para)
+msgid ""
+"The <filename>lastlog</filename> file is a database which contains info on "
+"the last login of each user. You should not rotate it. It is a sparse file, "
+"so its size on the disk is usually much smaller than the one shown by "
+"\"<command>ls -l</command>\" (which can indicate a really big file if you "
+"have in <filename>passwd</filename> users with a high UID). You can display "
+"its real size with \"<command>ls -s</command>\"."
+msgstr ""
+
+#: lastlog.8.xml:220(filename)
+msgid "/var/log/lastlog"
+msgstr "/var/log/lastlog"
+
+#: lastlog.8.xml:222(para)
+msgid "Database times of previous user logins."
+msgstr ""
+
+#: lastlog.8.xml:230(para)
+msgid ""
+"Large gaps in UID numbers will cause the lastlog program to run longer with "
+"no output to the screen (i.e. if in lastlog database there is no entries for "
+"users with UID between 170 and 800 lastlog will appear to hang as it "
+"processes entries with UIDs 171-799)."
+msgstr ""
+
+#: gshadow.5.xml:41(contrib)
+msgid "Creation, 2005"
+msgstr ""
+
+#: gshadow.5.xml:46(refentrytitle) gshadow.5.xml:53(refname)
+msgid "gshadow"
+msgstr "gshadow"
+
+#: gshadow.5.xml:54(refpurpose)
+msgid "shadowed group file"
+msgstr "影子化了的组文件"
+
+#: gshadow.5.xml:59(para)
+msgid ""
+"<filename>/etc/gshadow</filename> contains the shadowed information for "
+"group accounts."
+msgstr "<filename>/etc/gshadow</filename> 包含影子化了的组账户信息。"
+
+#: gshadow.5.xml:69(para)
+msgid "Each line of this file contains the following colon-separated fields:"
+msgstr "此文件的每行包含逗号分隔的如下字段:"
+
+#: gshadow.5.xml:75(emphasis)
+msgid "group name"
+msgstr "组名"
+
+#: gshadow.5.xml:77(para)
+msgid "It must be a valid group name, which exist on the system."
+msgstr "必须是系统中已经存在的有效组。"
+
+#: gshadow.5.xml:90(para)
+msgid ""
+"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 *, users will not be able to use a unix "
+"password to access the group (but group members do not need the password)."
+msgstr ""
+
+#: gshadow.5.xml:97(para)
+#, fuzzy
+#| msgid ""
+#| "The password is used when an user who is not a member of the group wants "
+#| "to gain the permissions of this group (see "
+#| "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>)."
+msgid ""
+"The password is used when a user who is not a member of the group wants to "
+"gain the permissions of this group (see <citerefentry><refentrytitle>newgrp</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>)."
+msgstr ""
+"此密码用于不是此组成员的用户获取此组的权限。(参考 "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> )。"
+
+#: gshadow.5.xml:103(para)
+msgid ""
+"This field may be empty, in which case only the group members can gain the "
+"group permissions."
+msgstr "此字段可以为空,此时,只有组成员可以获取组权限。"
+
+#: gshadow.5.xml:113(para)
+msgid ""
+"This password supersedes any password specified in <filename>/etc/group</"
+"filename>."
+msgstr "此密码取代 <filename>/etc/group</filename> 中指定的任何密码。"
+
+#: gshadow.5.xml:121(emphasis)
+msgid "administrators"
+msgstr "管理员"
+
+#: gshadow.5.xml:123(para) gshadow.5.xml:139(para)
+msgid "It must be a comma-separated list of user names."
+msgstr "必须是一个逗号分隔的用户名列表。"
+
+#: gshadow.5.xml:126(para)
+msgid "Administrators can change the password or the members of the group."
+msgstr "管理员可以更改组密码和成员。"
+
+#: gshadow.5.xml:130(para)
+msgid ""
+"Administrators also have the same permissions as the members (see below)."
+msgstr "管理员也有成员一样的权限(请看下边)。"
+
+#: gshadow.5.xml:137(emphasis)
+msgid "members"
+msgstr "成员"
+
+#: gshadow.5.xml:142(para)
+msgid "Members can access the group without being prompted for a password."
+msgstr "成员可以免密码访问组。"
+
+#: gshadow.5.xml:146(para)
+msgid ""
+"You should use the same list of users as in <filename>/etc/group</filename>."
+msgstr ""
+
+#: gshadow.5.xml:175(para)
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: grpck.8.xml:66(refpurpose)
+msgid "verify integrity of group files"
+msgstr "检查组文件的完整性"
+
+#: grpck.8.xml:84(para)
+msgid ""
+"The <command>grpck</command> command verifies the integrity of the groups "
+"information. It checks that all entries in <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</"
+"filename></phrase> have the proper format and contain valid data. The user "
+"is prompted to delete entries that are improperly formatted or which have "
+"other uncorrectable errors."
+msgstr ""
+
+#: grpck.8.xml:101(para)
+msgid "a unique and valid group name"
+msgstr "一个唯一且有效的组名"
+
+#: grpck.8.xml:104(para)
+msgid ""
+"a valid group identifier <phrase condition=\"gshadow\"> (<filename>/etc/"
+"group</filename> only)</phrase>"
+msgstr ""
+"有效的组标识符 <phrase condition=\"gshadow\"> (仅 <filename>/etc/group</"
+"filename>)</phrase>"
+
+#: grpck.8.xml:111(para)
+msgid ""
+"a valid list of members <phrase condition=\"gshadow\"> and administrators</"
+"phrase>"
+msgstr "有效的成员和 <phrase condition=\"gshadow\">管理员</phrase> 列表。"
+
+#: grpck.8.xml:117(para)
+msgid ""
+"a corresponding entry in the <filename>/etc/gshadow</filename> file "
+"(respectively <filename>/etc/group</filename> for the <filename>gshadow</"
+"filename> checks)"
+msgstr ""
+
+#: grpck.8.xml:125(para)
+msgid ""
+"The checks for correct number of fields and unique group name are fatal. If "
+"an entry has the wrong number of fields, the user will be prompted to delete "
+"the entire line. If the user does not answer affirmatively, all further "
+"checks are bypassed. An entry with a duplicated group name is prompted for "
+"deletion, but the remaining checks will still be made. All other errors are "
+"warnings and the user is encouraged to run the <command>groupmod</command> "
+"command to correct the error."
+msgstr ""
+
+#: grpck.8.xml:136(para)
+msgid ""
+"The commands which operate on the <filename>/etc/group</filename><phrase "
+"condition=\"no_gshadow\">file</phrase><phrase condition=\"gshadow\">and "
+"<filename>/etc/gshadow</filename> files</phrase> are not able to alter "
+"corrupted or duplicated entries. <command>grpck</command> should be used in "
+"those circumstances to remove the offending entries."
+msgstr ""
+
+#: grpck.8.xml:152(para)
+msgid "The options which apply to the <command>grpck</command> command are:"
+msgstr "<command>grpck</command> 可以接受的选项有:"
+
+#: grpck.8.xml:165(para)
+msgid ""
+"Execute the <command>grpck</command> command in read-only mode. This causes "
+"all questions regarding changes to be answered <emphasis>no</emphasis> "
+"without user intervention."
+msgstr ""
+
+#: grpck.8.xml:187(para)
+msgid ""
+"Sort entries in <filename>/etc/group</filename><phrase condition=\"gshadow"
+"\">and <filename>/etc/gshadow</filename></phrase> by GID."
+msgstr ""
+"根据 GID 在 <filename>/etc/group</filename><phrase condition=\"gshadow\"> 和 "
+"<filename>/etc/gshadow</filename></phrase> 中进行排序。"
+
+#: grpck.8.xml:196(para)
+#, fuzzy
+#| msgid ""
+#| "By default, <command>pwck</command> operates on the files <filename>/etc/"
+#| "passwd</filename> and <filename>/etc/shadow</filename><phrase condition="
+#| "\"tcb\"> (or the files in <filename>/etc/tcb</filename>)</phrase>. The "
+#| "user may select alternate files with the <replaceable>passwd</"
+#| "replaceable> and <replaceable>shadow</replaceable> parameters."
+msgid ""
+"By default, <command>grpck</command> operates on <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</"
+"filename></phrase>. The user may select alternate files with the <emphasis "
+"remap=\"I\">group</emphasis><phrase condition=\"no_gshadow\">parameter.</"
+"phrase><phrase condition=\"gshadow\">and <emphasis remap=\"I\">shadow</"
+"emphasis> parameters.</phrase>"
+msgstr ""
+"默认上,<command>pwck</command> 操作文件 <filename>/etc/passwd</filename> 和 "
+"<filename>/etc/shadow</filename><phrase condition=\"tcb\"> (或者在 "
+"<filename>/etc/tcb</filename> 中的文件)</phrase>。用户也可以使用 "
+"<replaceable>passwd</replaceable> 和 <replaceable>shadow</replaceable> 参数来"
+"选择替代文件。"
+
+#: grpck.8.xml:264(para)
+msgid "one or more bad group entries"
+msgstr "一个或多个坏掉的组条目"
+
+#: grpck.8.xml:270(para)
+msgid "can't open group files"
+msgstr "无法打开组文件"
+
+#: grpck.8.xml:276(para)
+msgid "can't lock group files"
+msgstr "无法锁定组文件"
+
+#: grpck.8.xml:282(para)
+msgid "can't update group files"
+msgstr "无法更新组文件"
+
+#: grpck.8.xml:246(para)
+msgid ""
+"The <command>grpck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr "<command>grpck</command> 可以返回如下值:<placeholder-1/>"
+
+#: grpck.8.xml:291(para)
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"gshadow\"><citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum>, </citerefentry>, </"
+"phrase><citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"gshadow\"><citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum>, </citerefentry>, </"
+"phrase><citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: groups.1.xml:57(refentrytitle) groups.1.xml:64(refname)
+#: groups.1.xml:70(command)
+msgid "groups"
+msgstr "groups"
+
+#: groups.1.xml:65(refpurpose)
+msgid "display current group names"
+msgstr "现实当前组名"
+
+#: groups.1.xml:72(replaceable)
+msgid "user"
+msgstr "用户"
+
+#: groups.1.xml:79(para)
+msgid ""
+"The <command>groups</command> command displays the current group names or ID "
+"values. If the value does not have a corresponding entry in <filename>/etc/"
+"group</filename>, the value will be displayed as the numerical group value. "
+"The optional <emphasis remap=\"I\">user</emphasis> parameter will display "
+"the groups for the named <emphasis remap=\"I\">user</emphasis>."
+msgstr ""
+
+#: groups.1.xml:91(para)
+msgid ""
+"Systems which do not support concurrent group sets will have the information "
+"from <filename>/etc/group</filename> reported. The user must use "
+"<command>newgrp</command> or <command>sg</command> to change his current "
+"real and effective group ID."
+msgstr ""
+
+#: groups.1.xml:113(para)
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+
+#: groupmod.8.xml:66(refpurpose)
+msgid "modify a group definition on the system"
+msgstr ""
+
+#: groupmod.8.xml:75(replaceable) groupdel.8.xml:75(replaceable)
+msgid "GROUP"
+msgstr "GROUP"
+
+#: groupmod.8.xml:81(para)
+msgid ""
+"The <command>groupmod</command> command modifies the definition of the "
+"specified <replaceable>GROUP</replaceable> by modifying the appropriate "
+"entry in the group database."
+msgstr ""
+
+#: groupmod.8.xml:90(para)
+msgid "The options which apply to the <command>groupmod</command> command are:"
+msgstr "<command>groupmod</command> 命令可以接受的选项有:"
+
+#: groupmod.8.xml:96(term) groupadd.8.xml:114(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GID</"
+"replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GID</"
+"replaceable>"
+
+#: groupmod.8.xml:100(para)
+msgid ""
+"The group ID of the given <replaceable>GROUP</replaceable> will be changed "
+"to <replaceable>GID</replaceable>."
+msgstr ""
+
+#: groupmod.8.xml:104(para)
+msgid ""
+"The value of <replaceable>GID</replaceable> must be a non-negative decimal "
+"integer. This value must be unique, unless the <option>-o</option> option is "
+"used."
+msgstr ""
+
+#: groupmod.8.xml:110(para)
+msgid ""
+"Users who use the group as primary group will be updated to keep the group "
+"as their primary group."
+msgstr ""
+
+#: groupmod.8.xml:114(para)
+msgid ""
+"Any files that have the old group ID and must continue to belong to "
+"<replaceable>GROUP</replaceable>, must have their group ID changed manually."
+msgstr ""
+
+#: groupmod.8.xml:120(para)
+#, fuzzy
+#| msgid ""
+#| "The default behavior (if the <option>-g</option>, <option>-N</option>, "
+#| "and <option>-U</option> options are not specified) is defined by the "
+#| "<option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+#| "filename>."
+msgid ""
+"No checks will be performed with regard to the <option>GID_MIN</option>, "
+"<option>GID_MAX</option>, <option>SYS_GID_MIN</option>, or "
+"<option>SYS_GID_MAX</option> from <filename>/etc/login.defs</filename>."
+msgstr ""
+"如果没有指定 <option>-g</option>, <option>-N</option> 和 <option>-U</option> "
+"选项,默认行为由 <filename>/etc/login.defs</filename> 中的 "
+"<option>USERGROUPS_ENAB</option> 变量指定。"
+
+#: groupmod.8.xml:135(term)
+msgid ""
+"<option>-n</option>, <option>--new-name</option>&nbsp;"
+"<replaceable>NEW_GROUP</replaceable>"
+msgstr ""
+"<option>-n</option>, <option>--new-name</option>&nbsp;"
+"<replaceable>NEW_GROUP</replaceable>"
+
+#: groupmod.8.xml:139(para)
+msgid ""
+"The name of the group will be changed from <replaceable>GROUP</replaceable> "
+"to <replaceable>NEW_GROUP</replaceable> name."
+msgstr ""
+
+#: groupmod.8.xml:150(para)
+msgid ""
+"When used with the <option>-g</option> option, allow to change the group "
+"<replaceable>GID</replaceable> to a non-unique value."
+msgstr ""
+
+#: groupmod.8.xml:259(para)
+msgid "E_SUCCESS: success"
+msgstr ""
+
+#: groupmod.8.xml:265(para)
+#, fuzzy
+#| msgid "invalid command syntax"
+msgid "E_USAGE: invalid command syntax"
+msgstr "无效的命令语法"
+
+#: groupmod.8.xml:271(para)
+#, fuzzy
+#| msgid "invalid argument to option"
+msgid "E_BAD_ARG: invalid argument to option"
+msgstr "给了选项一个无效的参数"
+
+#: groupmod.8.xml:277(para)
+#, fuzzy
+#| msgid "specified group doesn't exist"
+msgid "E_GID_IN_USE: specified group doesn't exist"
+msgstr "指定的组不存在"
+
+#: groupmod.8.xml:283(para)
+#, fuzzy
+#| msgid "specified group doesn't exist"
+msgid "E_NOTFOUND: specified group doesn't exist"
+msgstr "指定的组不存在"
+
+#: groupmod.8.xml:289(para)
+#, fuzzy
+#| msgid "group name already in use"
+msgid "E_NAME_IN_USE: group name already in use"
+msgstr "组名已经在使用"
+
+#: groupmod.8.xml:295(para)
+#, fuzzy
+#| msgid "can't update group file"
+msgid "E_GRP_UPDATE: can't update group file"
+msgstr "无法更新组文件"
+
+#: groupmod.8.xml:299(replaceable)
+#, fuzzy
+#| msgid "1"
+msgid "11"
+msgstr "1"
+
+#: groupmod.8.xml:301(para)
+msgid "E_CLEANUP_SERVICE: can't setup cleanup service"
+msgstr ""
+
+#: groupmod.8.xml:307(para)
+msgid "E_PAM_USERNAME: can't determine your username for use with pam"
+msgstr ""
+
+#: groupmod.8.xml:311(replaceable)
+msgid "13"
+msgstr "13"
+
+#: groupmod.8.xml:313(para)
+msgid ""
+"E_PAM_ERROR: pam returned an error, see syslog facility id groupmod for the "
+"PAM error message"
+msgstr ""
+
+#: groupmod.8.xml:253(para)
+msgid ""
+"The <command>groupmod</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr "<command>groupmod</command> 命令可以返回如下值:<placeholder-1/>"
+
+#: groupmod.8.xml:322(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: groupmems.8.xml:42(firstname)
+msgid "George"
+msgstr ""
+
+#: groupmems.8.xml:43(surname)
+msgid "Kraft"
+msgstr ""
+
+#: groupmems.8.xml:44(lineage)
+msgid "IV"
+msgstr ""
+
+#: groupmems.8.xml:45(contrib)
+msgid "Creation, 2000"
+msgstr ""
+
+#: groupmems.8.xml:69(refpurpose)
+msgid "administer members of a user's primary group"
+msgstr "用户主组的管理员成员"
+
+#: groupmems.8.xml:76(replaceable) groupmems.8.xml:77(replaceable)
+msgid "user_name"
+msgstr "user_name"
+
+#: groupmems.8.xml:76(arg)
+msgid "-a <placeholder-1/>"
+msgstr "-a <placeholder-1/>"
+
+#: groupmems.8.xml:77(arg)
+msgid "-d <placeholder-1/>"
+msgstr "-d <placeholder-1/>"
+
+#: groupmems.8.xml:78(replaceable)
+msgid "group_name"
+msgstr "group_name"
+
+#: groupmems.8.xml:78(arg)
+msgid "-g <placeholder-1/>"
+msgstr "-g <placeholder-1/>"
+
+#: groupmems.8.xml:79(arg)
+msgid "-l"
+msgstr "-l"
+
+#: groupmems.8.xml:86(para)
+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)
+msgid ""
+"Only the superuser, as administrator, can use <command>groupmems</command> "
+"to alter the memberships of other groups."
+msgstr ""
+
+#: groupmems.8.xml:101(para)
+msgid ""
+"The options which apply to the <command>groupmems</command> command are:"
+msgstr "<command>groupmems</command> 命令可以接受的选项有:"
+
+#: groupmems.8.xml:107(term)
+msgid ""
+"<option>-a</option>, <option>--add</option>&nbsp;<replaceable>user_name</"
+"replaceable>"
+msgstr ""
+"<option>-a</option>, <option>--add</option>&nbsp;<replaceable>user_name</"
+"replaceable>"
+
+#: groupmems.8.xml:109(para)
+#, fuzzy
+#| msgid "Add an user to the group membership list."
+msgid "Add a user to the group membership list."
+msgstr "将一个用户添加到组成员列表。"
+
+#: groupmems.8.xml:110(para) groupmems.8.xml:126(para)
+#: groupmems.8.xml:157(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, and the group has no "
+"entry in the <filename>/etc/gshadow</filename> file, a new entry will be "
+"created."
+msgstr ""
+
+#: groupmems.8.xml:118(term)
+msgid ""
+"<option>-d</option>, <option>--delete</option>&nbsp;<replaceable>user_name</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--delete</option>&nbsp;<replaceable>user_name</"
+"replaceable>"
+
+#: groupmems.8.xml:120(para)
+msgid "Delete a user from the group membership list."
+msgstr "从组成员列表中删除用户。"
+
+#: groupmems.8.xml:121(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, the user will be "
+"removed from the list of members and administrators of the group."
+msgstr ""
+"如果 <filename>/etc/gshadow</filename> 文件存在,用户将会被从组成员和管理员中"
+"移除。"
+
+#: groupmems.8.xml:134(term)
+msgid ""
+"<option>-g</option>, <option>--group</option>&nbsp;<replaceable>group_name</"
+"replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--group</option>&nbsp;<replaceable>group_name</"
+"replaceable>"
+
+#: groupmems.8.xml:136(para)
+msgid "The superuser can specify which group membership list to modify."
+msgstr "超级用户可以指定修改哪个组的组成员列表。"
+
+#: groupmems.8.xml:148(term) chage.1.xml:160(term)
+msgid "<option>-l</option>, <option>--list</option>"
+msgstr "<option>-l</option>, <option>--list</option>"
+
+#: groupmems.8.xml:150(para)
+msgid "List the group membership list."
+msgstr "列出组成员。"
+
+#: groupmems.8.xml:154(term)
+msgid "<option>-p</option>, <option>--purge</option>"
+msgstr "<option>-p</option>, <option>--purge</option>"
+
+#: groupmems.8.xml:156(para)
+msgid "Purge all users from the group membership list."
+msgstr "从组成员列表中删除所有用户。"
+
+#: groupmems.8.xml:180(title)
+msgid "SETUP"
+msgstr ""
+
+#: groupmems.8.xml:181(para)
+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 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 2710 groupmems\n"
+"\t$ chown root.groups groupmems\n"
+"\t$ groupmems -g groups -a gk4\n"
+" "
+
+#: groupmems.8.xml:222(para)
+msgid "secure group account information"
+msgstr "安全组账户信息"
+
+#: groupmems.8.xml:230(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: groupdel.8.xml:66(refpurpose)
+msgid "delete a group"
+msgstr "删除一个组"
+
+#: groupdel.8.xml:81(para)
+msgid ""
+"The <command>groupdel</command> command modifies the system account files, "
+"deleting all entries that refer to <replaceable>GROUP</replaceable>. The "
+"named group must exist."
+msgstr ""
+"<command>userdel</command> 修改系统账户文件,删除与 <replaceable>GROUP</"
+"replaceable> 相关的所有项目。给出的组名必须存在。"
+
+#: groupdel.8.xml:89(para)
+msgid "The options which apply to the <command>groupdel</command> command are:"
+msgstr "<command>groupdel</command> 命令可以接受的选项有:"
+
+#: groupdel.8.xml:134(para)
+msgid ""
+"You may not remove the primary group of any existing user. You must remove "
+"the user before you remove the group."
+msgstr "您不能移除现有用户的主组。在移除此组之前,必须先移除此用户。"
+
+#: groupdel.8.xml:138(para)
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this group."
+msgstr "您需要手动检查所有文件系统,以确保没有遗留的属于此组的文件。"
+
+#: groupdel.8.xml:200(para)
+msgid "can't remove user's primary group"
+msgstr "不能移除用户的主组"
+
+#: groupdel.8.xml:176(para)
+msgid ""
+"The <command>groupdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr "<command>groupdel</command> 命令以如下值退出:<placeholder-1/>"
+
+#: groupdel.8.xml:215(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: groupadd.8.xml:68(refpurpose)
+msgid "create a new group"
+msgstr "创建一个新组"
+
+#: groupadd.8.xml:85(para)
+msgid ""
+"The <command>groupadd</command> command creates a new group account using "
+"the values specified on the command line plus the default values from the "
+"system. The new group will be entered into the system files as needed."
+msgstr ""
+
+#: groupadd.8.xml:94(para)
+msgid "The options which apply to the <command>groupadd</command> command are:"
+msgstr "<command>groupadd</command> 命令可以接受的选项有:"
+
+#: groupadd.8.xml:104(para)
+msgid ""
+"This option causes the command to simply exit with success status if the "
+"specified group already exists. When used with <option>-g</option>, and the "
+"specified GID already exists, another (unique) GID is chosen (i.e. <option>-"
+"g</option> is turned off)."
+msgstr ""
+
+#: groupadd.8.xml:118(para)
+#, fuzzy
+#| msgid ""
+#| "The numerical value of the user's ID. This value must be unique, unless "
+#| "the <option>-o</option> option is used. The value must be non-negative. "
+#| "The default is to use the smallest ID value greater than 999 and greater "
+#| "than every other user. Values between 0 and 999 are typically reserved "
+#| "for system accounts."
+msgid ""
+"The numerical value of the group's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than or equal to "
+"<option>GID_MIN</option> and greater than every other group."
+msgstr ""
+"用户 ID 的数字值。此值必须为唯一的,出发使用了 <option>-o</option> 选项。此值"
+"必须非负,默认使用大于 999,且大于任何其他用户 ID 最小值。0 到 999 之间的值一"
+"般保留做系统账户。"
+
+#: groupadd.8.xml:124(para)
+#, fuzzy
+#| msgid ""
+#| "Except for the <option>-A</option> and <option>-M</option> options, the "
+#| "options cannot be combined."
+msgid ""
+"See also the <option>-r</option> option and the <option>GID_MAX</option> "
+"description."
+msgstr ""
+"除了 <option>-A</option> 和 <option>-M</option> 选项,其它选项不能联合使用。"
+
+#: groupadd.8.xml:141(para)
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (GID_MIN, GID_MAX "
+"and others). Multiple <option>-K</option> options can be specified."
+msgstr ""
+
+#: groupadd.8.xml:146(para)
+msgid ""
+"Example: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+"<replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+"示例:<option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+"<replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+
+#: groupadd.8.xml:150(para)
+msgid ""
+"Note: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+"replaceable>=<replaceable>499</replaceable> doesn't work yet."
+msgstr ""
+"注意:<option>-K</option>&nbsp;<replaceable>GID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+"replaceable>=<replaceable>499</replaceable> 尚不能工作。"
+
+#: groupadd.8.xml:161(para)
+msgid "This option permits to add a group with a non-unique GID."
+msgstr "此选项允许添加一个使用非唯一 GID 的组。"
+
+#: groupadd.8.xml:192(para)
+msgid "Create a system group."
+msgstr "创建一个系统组。"
+
+#: groupadd.8.xml:195(para)
+msgid ""
+"The numeric identifiers of new system groups are chosen in the "
+"<option>SYS_GID_MIN</option>-<option>SYS_GID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>GID_MIN</option>-"
+"<option>GID_MAX</option>."
+msgstr ""
+
+#: groupadd.8.xml:275(para)
+msgid ""
+"Groupnames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+"组名必须以小写字母或者下划线开头,跟随小写字母、下划线或短横线。可以由美元符"
+"号结束。用正则表达式就是:[a-z_][a-z0-9_-]*[$]?"
+
+#: groupadd.8.xml:281(para)
+msgid "Groupnames may only be up to &GROUP_NAME_MAX_LENGTH; characters long."
+msgstr "组名最长为 &GROUP_NAME_MAX_LENGTH; 个字符。"
+
+#: groupadd.8.xml:284(para)
+msgid ""
+"You may not add a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+
+#: groupadd.8.xml:288(para)
+msgid ""
+"If the groupname already exists in an external group database such as NIS or "
+"LDAP, <command>groupadd</command> will deny the group creation request."
+msgstr ""
+
+#: groupadd.8.xml:321(para)
+msgid "GID not unique (when <option>-o</option> not used)"
+msgstr "GID 不唯一 (没有使用 <option>-o</option>)"
+
+#: groupadd.8.xml:327(para)
+msgid "group name not unique"
+msgstr "组名不唯一"
+
+#: groupadd.8.xml:297(para)
+msgid ""
+"The <command>groupadd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr "<command>groupadd</command> 可能以如下值退出:<placeholder-1/>"
+
+#: groupadd.8.xml:342(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: gpasswd.1.xml:44(firstname)
+msgid "Rafal"
+msgstr ""
+
+#: gpasswd.1.xml:45(surname)
+msgid "Maszkowski"
+msgstr ""
+
+#: gpasswd.1.xml:71(phrase)
+msgid "administer <placeholder-1/>"
+msgstr "管理员 <placeholder-1/>"
+
+#: gpasswd.1.xml:74(phrase)
+msgid "administer <placeholder-1/> and <placeholder-2/>"
+msgstr "管理员 <placeholder-1/> 和 <placeholder-2/>"
+
+#: gpasswd.1.xml:85(replaceable) expiry.1.xml:76(replaceable)
+msgid "option"
+msgstr "选项"
+
+#: gpasswd.1.xml:95(para)
+msgid ""
+"The <command>gpasswd</command> command is used to administer <filename>/etc/"
+"group</filename><phrase condition=\"gshadow\">, and <filename>/etc/gshadow</"
+"filename></phrase>. Every group can have <phrase condition=\"gshadow"
+"\">administrators,</phrase> members and a password."
+msgstr ""
+
+#: gpasswd.1.xml:103(para)
+msgid ""
+"System administrators can use the <option>-A</option> option to define group "
+"administrator(s) and the <option>-M</option> option to define members. They "
+"have all rights of group administrators and members."
+msgstr ""
+
+#: gpasswd.1.xml:108(para)
+msgid ""
+"<command>gpasswd</command> called by <phrase condition=\"gshadow\">a group "
+"administrator</phrase><phrase condition=\"no_gshadow\">a system "
+"administrator</phrase> with a group name only prompts for the new password "
+"of the <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:115(para)
+msgid ""
+"If a password is set the members can still use "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> without a password, and non-members must supply the password."
+msgstr ""
+
+#: gpasswd.1.xml:123(title)
+msgid "Notes about group passwords"
+msgstr "请注意组密码"
+
+#: gpasswd.1.xml:124(para)
+msgid ""
+"Group passwords are an inherent security problem since more than one person "
+"is permitted to know the password. However, groups are a useful tool for "
+"permitting co-operation between different users."
+msgstr ""
+
+#: gpasswd.1.xml:135(para)
+msgid ""
+"Except for the <option>-A</option> and <option>-M</option> options, the "
+"options cannot be combined."
+msgstr ""
+"除了 <option>-A</option> 和 <option>-M</option> 选项,其它选项不能联合使用。"
+
+#: gpasswd.1.xml:139(para)
+msgid "The options cannot be combined."
+msgstr "这些选项不能组合使用。"
+
+#: gpasswd.1.xml:142(para)
+msgid "The options which apply to the <command>gpasswd</command> command are:"
+msgstr "<command>gpasswd</command> 可以接受的选项有:"
+
+#: gpasswd.1.xml:147(term)
+msgid ""
+"<option>-a</option>, <option>--add</option>&nbsp;<replaceable>user</"
+"replaceable>"
+msgstr ""
+"<option>-a</option>, <option>--add</option>&nbsp;<replaceable>user</"
+"replaceable>"
+
+#: gpasswd.1.xml:151(para)
+msgid ""
+"Add the <replaceable>user</replaceable> to the named <replaceable>group</"
+"replaceable>."
+msgstr ""
+"向名为 <replaceable>group</replaceable> 的组中添加用户 <replaceable>user</"
+"replaceable>。"
+
+#: gpasswd.1.xml:160(term)
+msgid ""
+"<option>-d</option>, <option>--delete</option>&nbsp;<replaceable>user</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--delete</option>&nbsp;<replaceable>user</"
+"replaceable>"
+
+#: gpasswd.1.xml:164(para)
+msgid ""
+"Remove the <replaceable>user</replaceable> from the named "
+"<replaceable>group</replaceable>."
+msgstr ""
+"从名为 <replaceable>group</replaceable> 的组中移除用户 <replaceable>user</"
+"replaceable>。"
+
+#: gpasswd.1.xml:181(term)
+msgid ""
+"<option>-Q</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-Q</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</"
+"replaceable>"
+
+#: gpasswd.1.xml:195(term)
+msgid "<option>-r</option>, <option>--remove-password</option>"
+msgstr "<option>-r</option>, <option>--remove-password</option>"
+
+#: gpasswd.1.xml:199(para)
+msgid ""
+"Remove the password from the named <replaceable>group</replaceable>. The "
+"group password will be empty. Only group members will be allowed to use "
+"<command>newgrp</command> to join the named <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:211(term)
+msgid "<option>-R</option>, <option>--restrict</option>"
+msgstr "<option>-R</option>, <option>--restrict</option>"
+
+#: gpasswd.1.xml:215(para)
+msgid ""
+"Restrict the access to the named <replaceable>group</replaceable>. The group "
+"password is set to \"!\". Only group members with a password will be allowed "
+"to use <command>newgrp</command> to join the named <replaceable>group</"
+"replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:227(term)
+msgid ""
+"<option>-A</option>, <option>--administrators</option>&nbsp;"
+"<replaceable>user</replaceable>,..."
+msgstr ""
+"<option>-A</option>, <option>--administrators</option>&nbsp;"
+"<replaceable>user</replaceable>,..."
+
+#: gpasswd.1.xml:231(para)
+msgid "Set the list of administrative users."
+msgstr "设置有管理权限的用户列表。"
+
+#: gpasswd.1.xml:239(term)
+msgid ""
+"<option>-M</option>, <option>--members</option>&nbsp;<replaceable>user</"
+"replaceable>,..."
+msgstr ""
+"<option>-M</option>, <option>--members</option>&nbsp;<replaceable>user</"
+"replaceable>,..."
+
+#: gpasswd.1.xml:243(para)
+msgid "Set the list of group members."
+msgstr "设置组成员列表。"
+
+#: gpasswd.1.xml:253(para)
+msgid ""
+"This tool only operates on the <filename>/etc/group</filename><phrase "
+"condition=\"gshadow\"> and <filename>/etc/gshadow</filename> files.</"
+"phrase><phrase condition=\"no_gshadow\">file.</phrase> Thus you cannot "
+"change any NIS or LDAP group. This must be performed on the corresponding "
+"server."
+msgstr ""
+
+#: gpasswd.1.xml:298(para)
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition="
+"\"gshadow\">, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition="
+"\"gshadow\">, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+
+#: faillog.8.xml:57(refentrytitle) faillog.8.xml:64(refname)
+#: faillog.8.xml:70(command) faillog.5.xml:57(refentrytitle)
+#: faillog.5.xml:64(refname) faillog.5.xml:111(refentrytitle)
+msgid "faillog"
+msgstr "faillog"
+
+#: faillog.8.xml:65(refpurpose)
+msgid "display faillog records or set login failure limits"
+msgstr "显示登录失败记录或设置登录失败限制"
+
+#: faillog.8.xml:79(para)
+msgid ""
+"<command>faillog</command> displays the contents of the failure log database "
+"(<filename>/var/log/faillog</filename>). It can also set the failure "
+"counters and limits. When <command>faillog</command> is run without "
+"arguments, it only displays the faillog records of the users who had a login "
+"failure."
+msgstr ""
+
+#: faillog.8.xml:90(para)
+msgid "The options which apply to the <command>faillog</command> command are:"
+msgstr "<command>faillog</command> 可以接受的选项有:"
+
+#: faillog.8.xml:98(para)
+msgid ""
+"Display (or act on) faillog records for all users having an entry in the "
+"<filename>faillog</filename> database."
+msgstr ""
+
+#: faillog.8.xml:102(para)
+msgid ""
+"The range of users can be restricted with the <option>-u</option> option."
+msgstr "用户的范围可以使用 <option>-u</option> 选项限制。"
+
+#: faillog.8.xml:106(para)
+msgid ""
+"In display mode, this is still restricted to existing users but forces the "
+"display of the faillog entries even if they are empty."
+msgstr ""
+
+#: faillog.8.xml:111(para)
+msgid ""
+"With the <option>-l</option>, <option>-m</option>, <option>-r</option>, "
+"<option>-t</option> options, the users' records are changed, even if the "
+"user does not exist on the system. This is useful to reset records of users "
+"that have been deleted or to set a policy in advance for a range of users."
+msgstr ""
+
+#: faillog.8.xml:128(term)
+msgid ""
+"<option>-l</option>, <option>--lock-secs</option>&nbsp;<replaceable>SEC</"
+"replaceable>"
+msgstr ""
+"<option>-l</option>, <option>--lock-secs</option>&nbsp;<replaceable>SEC</"
+"replaceable>"
+
+#: faillog.8.xml:132(para)
+msgid ""
+"Lock account for <replaceable>SEC</replaceable> seconds after failed login."
+msgstr "登录失败后锁定账户 <replaceable>SEC</replaceable> 秒。"
+
+#: faillog.8.xml:136(para) faillog.8.xml:161(para) faillog.8.xml:173(para)
+msgid ""
+"Write access to <filename>/var/log/faillog</filename> is required for this "
+"option."
+msgstr "此选项要求对 <filename>/var/log/faillog</filename> 有写入权限。"
+
+#: faillog.8.xml:143(term)
+msgid ""
+"<option>-m</option>, <option>--maximum</option>&nbsp;<replaceable>MAX</"
+"replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--maximum</option>&nbsp;<replaceable>MAX</"
+"replaceable>"
+
+#: faillog.8.xml:147(para)
+msgid ""
+"Set the maximum number of login failures after the account is disabled to "
+"<replaceable>MAX</replaceable>."
+msgstr ""
+
+#: faillog.8.xml:151(para)
+msgid ""
+"Selecting a <replaceable>MAX</replaceable> value of 0 has the effect of not "
+"placing a limit on the number of failed logins."
+msgstr ""
+
+#: faillog.8.xml:156(para)
+msgid ""
+"The maximum failure count should always be 0 for <emphasis>root</emphasis> "
+"to prevent a denial of services attack against the system."
+msgstr ""
+
+#: faillog.8.xml:168(term)
+msgid "<option>-r</option>, <option>--reset</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: faillog.8.xml:170(para)
+msgid "Reset the counters of login failures."
+msgstr "重置登录失败计数。"
+
+#: faillog.8.xml:195(para)
+msgid ""
+"Display faillog records more recent than <replaceable>DAYS</replaceable>."
+msgstr "显示新于 <replaceable>DAYS</replaceable> 的登录失败记录。"
+
+#: faillog.8.xml:206(para)
+msgid ""
+"Display faillog record or maintains failure counters and limits (if used "
+"with <option>-l</option>, <option>-m</option> or <option>-r</option> "
+"options) only for the specified user(s)."
+msgstr ""
+
+#: faillog.8.xml:224(para)
+msgid ""
+"When none of the <option>-l</option>, <option>-m</option>, or <option>-r</"
+"option> options are used, <command>faillog</command> displays the faillog "
+"record of the specified user(s)."
+msgstr ""
+
+#: faillog.8.xml:233(para)
+msgid ""
+"<command>faillog</command> only prints out users with no successful login "
+"since the last failure. To print out a user who has had a successful login "
+"since their last failure, you must explicitly request the user with the "
+"<option>-u</option> flag, or print out all users with the <option>-a</"
+"option> flag."
+msgstr ""
+
+#: faillog.8.xml:246(filename) faillog.5.xml:99(filename)
+msgid "/var/log/faillog"
+msgstr "/var/log/faillog"
+
+#: faillog.8.xml:248(para) faillog.5.xml:101(para)
+msgid "Failure logging file."
+msgstr ""
+
+#: faillog.8.xml:256(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>faillog</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>faillog</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: faillog.5.xml:65(refpurpose)
+msgid "login failure logging file"
+msgstr "登录失败的日志文件"
+
+#: faillog.5.xml:70(para)
+msgid ""
+"<filename>/var/log/faillog</filename> maintains a count of login failures "
+"and the limits for each account."
+msgstr ""
+
+#: faillog.5.xml:74(para)
+msgid ""
+"The file contains fixed length records, indexed by numerical UID. Each "
+"record contains the count of login failures since the last successful login; "
+"the maximum number of failures before the account is disabled; the line on "
+"which the last login failure occurred; the date of the last login failure; "
+"and the duration (in seconds) during which the account will be locked after "
+"a failure."
+msgstr ""
+
+#: faillog.5.xml:84(para)
+msgid "The structure of the file is:"
+msgstr "文件的结构是:"
+
+#: faillog.5.xml:85(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort fail_cnt;\n"
+"\tshort fail_max;\n"
+"\tchar fail_line[12];\n"
+"\ttime_t fail_time;\n"
+"\tlong fail_locktime;\n"
+"};"
+msgstr ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort fail_cnt;\n"
+"\tshort fail_max;\n"
+"\tchar fail_line[12];\n"
+"\ttime_t fail_time;\n"
+"\tlong fail_locktime;\n"
+"};"
+
+#: expiry.1.xml:45(contrib) chsh.1.xml:44(contrib) chfn.1.xml:44(contrib)
+#: chage.1.xml:42(contrib)
+msgid "Creation, 1990"
+msgstr ""
+
+#: expiry.1.xml:61(refentrytitle) expiry.1.xml:68(refname)
+#: expiry.1.xml:74(command)
+msgid "expiry"
+msgstr "expiry"
+
+#: expiry.1.xml:69(refpurpose)
+msgid "check and enforce password expiration policy"
+msgstr ""
+
+#: expiry.1.xml:83(para)
+msgid ""
+"The <command>expiry</command> command checks (<option>-c</option>) the "
+"current password expiration and forces (<option>-f</option>) changes when "
+"required. It is callable as a normal user command."
+msgstr ""
+
+#: expiry.1.xml:92(para)
+msgid "The options which apply to the <command>expiry</command> command are:"
+msgstr "<command>expiry</command> 选项可以接受的选项有:"
+
+#: expiry.1.xml:97(term)
+msgid "<option>-c</option>, <option>--check</option>"
+msgstr "<option>-c</option>, <option>--check</option>"
+
+#: expiry.1.xml:99(para)
+msgid "Check the password expiration of the current user."
+msgstr ""
+
+#: expiry.1.xml:105(para)
+msgid "Force a password change if the current user has an expired password."
+msgstr "如果用户密码过期,则强制用户修改密码。"
+
+#: expiry.1.xml:140(para) chage.1.xml:318(para)
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: chsh.1.xml:68(refpurpose)
+msgid "change login shell"
+msgstr "更改登录 shell"
+
+#: chsh.1.xml:85(para)
+msgid ""
+"The <command>chsh</command> command changes the user login shell. This "
+"determines the name of the user's initial login command. A normal user may "
+"only change the login shell for her own account; the superuser may change "
+"the login shell for any account."
+msgstr ""
+
+#: chsh.1.xml:96(para)
+msgid "The options which apply to the <command>chsh</command> command are:"
+msgstr "<command>chsh</command> 命令可以接受的选项有:"
+
+#: chsh.1.xml:130(para)
+msgid ""
+"If the <option>-s</option> option is not selected, <command>chsh</command> "
+"operates in an interactive fashion, prompting the user with the current "
+"login shell. Enter the new value to change the shell, or leave the line "
+"blank to use the current one. The current shell is displayed between a pair "
+"of <emphasis>[ ]</emphasis> marks."
+msgstr ""
+
+#: chsh.1.xml:141(para)
+msgid ""
+"The only restriction placed on the login shell is that the command name must "
+"be listed in <filename>/etc/shells</filename>, unless the invoker is the "
+"superuser, and then any value may be added. An account with a restricted "
+"login shell may not change her login shell. For this reason, placing "
+"<filename>/bin/rsh</filename> in <filename>/etc/shells</filename> is "
+"discouraged since accidentally changing to a restricted shell would prevent "
+"the user from ever changing her login shell back to its original value."
+msgstr ""
+
+#: chsh.1.xml:176(filename)
+msgid "/etc/shells"
+msgstr "/etc/shells"
+
+#: chsh.1.xml:178(para)
+msgid "List of valid login shells."
+msgstr "可用的登录 shell 的列表。"
+
+#: chsh.1.xml:192(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: chpasswd.8.xml:69(refpurpose)
+msgid "update passwords in batch mode"
+msgstr "批量更新密码"
+
+#: chpasswd.8.xml:83(para)
+msgid ""
+"The <command>chpasswd</command> command reads a list of user name and "
+"password pairs from standard input and uses this information to update a "
+"group of existing users. Each line is of the format:"
+msgstr ""
+
+#: chpasswd.8.xml:88(para)
+msgid ""
+"<emphasis remap=\"I\">user_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">user_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+
+#: chpasswd.8.xml:92(para)
+msgid ""
+"By default the passwords must be supplied in clear-text, and are encrypted "
+"by <command>chpasswd</command>. Also the password age will be updated, if "
+"present."
+msgstr ""
+"默认必须明文提供密码,然后由 <command>chpasswd</command> 加密。如果存在密码年"
+"龄信息,也会更新之。"
+
+#: chpasswd.8.xml:97(para)
+#, fuzzy
+#| msgid ""
+#| "The default encryption algorithm can be defined for the system with the "
+#| "ENCRYPT_METHOD variable of <filename>/etc/login.defs</filename>, and can "
+#| "be overwiten with the <option>-e</option>, <option>-m</option>, or "
+#| "<option>-c</option> options."
+msgid ""
+"The default encryption algorithm can be defined for the system with the "
+"<option>ENCRYPT_METHOD</option> or <option>MD5_CRYPT_ENAB</option> variables "
+"of <filename>/etc/login.defs</filename>, and can be overwritten with the "
+"<option>-e</option>, <option>-m</option>, or <option>-c</option> options."
+msgstr ""
+"默认加密算法可以通过 <filename>/etc/login.defs</filename> 的 ENCRYPT_METHOD "
+"变量设置,并且可以使用 <option>-e</option>, <option>-m</option> 或 <option>-"
+"c</option> 选项覆盖。"
+
+#: chpasswd.8.xml:105(para)
+msgid ""
+"By default, passwords are encrypted by PAM, but (even if not recommended) "
+"you can select a different encryption method with the <option>-e</option>, "
+"<option>-m</option>, or <option>-c</option> options."
+msgstr ""
+
+#: chpasswd.8.xml:111(para)
+msgid ""
+"<phrase condition=\"pam\">Except when PAM is used to encrypt the passwords,</"
+"phrase><command>chpasswd</command> first updates all the passwords in "
+"memory, and then commits all the changes to disk if no errors occurred for "
+"any user."
+msgstr ""
+
+#: chpasswd.8.xml:117(para)
+msgid ""
+"When PAM is used to encrypt the passwords (and update the passwords in the "
+"system database) then if a password cannot be updated <command>chpasswd</"
+"command> continues updating the passwords of the next users, and will return "
+"an error code on exit."
+msgstr ""
+
+#: chpasswd.8.xml:123(para) chgpasswd.8.xml:98(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are created at a single time."
+msgstr "此命令一般用于需要一次创建很多用户的大型系统。"
+
+#: chpasswd.8.xml:131(para)
+msgid "The options which apply to the <command>chpasswd</command> command are:"
+msgstr "<command>chpasswd</command> 可以接受的选项有:"
+
+#: chpasswd.8.xml:137(term)
+msgid ""
+"<option>-c</option>, <option>--crypt-method</option>&nbsp;"
+"<replaceable>METHOD</replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--crypt-method</option>&nbsp;"
+"<replaceable>METHOD</replaceable>"
+
+#: chpasswd.8.xml:142(para) chgpasswd.8.xml:115(para)
+msgid "The available methods are DES, MD5, and NONE."
+msgstr "可用的方法有 DES,MD5 和 NONE。"
+
+#: chpasswd.8.xml:149(para)
+msgid "By default, PAM is used to encrypt the passwords."
+msgstr "默认,使用 PAM 来加密密码。"
+
+#: chpasswd.8.xml:152(para)
+msgid ""
+"By default (if none of the <option>-c</option>, <option>-m</option>, or "
+"<option>-e</option> options are specified), the encryption method is defined "
+"by the <option>ENCRYPT_METHOD</option> or <option>MD5_CRYPT_ENAB</option> "
+"variables of <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: chpasswd.8.xml:163(term) chgpasswd.8.xml:125(term)
+msgid "<option>-e</option>, <option>--encrypted</option>"
+msgstr "<option>-e</option>, <option>--encrypted</option>"
+
+#: chpasswd.8.xml:165(para) chgpasswd.8.xml:127(para)
+msgid "Supplied passwords are in encrypted form."
+msgstr "提供的密码是已经加密了的"
+
+#: chpasswd.8.xml:179(term) chgpasswd.8.xml:137(term)
+msgid "<option>-m</option>, <option>--md5</option>"
+msgstr "<option>-m</option>, <option>--md5</option>"
+
+#: chpasswd.8.xml:181(para) chgpasswd.8.xml:139(para)
+msgid ""
+"Use MD5 encryption instead of DES when the supplied passwords are not "
+"encrypted."
+msgstr "如果提供的密码没有加密,则使用 MD5 加密而不是 DES。"
+
+#: chpasswd.8.xml:200(term)
+msgid ""
+"<option>-s</option>, <option>--sha-rounds</option>&nbsp;<replaceable>ROUNDS</"
+"replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--sha-rounds</option>&nbsp;<replaceable>ROUNDS</"
+"replaceable>"
+
+#: chpasswd.8.xml:219(para)
+msgid ""
+"By default, the number of rounds is defined by the "
+"<option>SHA_CRYPT_MIN_ROUNDS</option> and <option>SHA_CRYPT_MAX_ROUNDS</"
+"option> variables in <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: chpasswd.8.xml:232(para) chgpasswd.8.xml:187(para)
+msgid ""
+"Remember to set permissions or umask to prevent readability of unencrypted "
+"files by other users."
+msgstr "记住要设置权限或者掩码来阻止其它用户对未加密文件的读取。"
+
+#: chpasswd.8.xml:276(filename)
+msgid "/etc/pam.d/chpasswd"
+msgstr "/etc/pam.d/chpasswd"
+
+#: chpasswd.8.xml:278(para)
+msgid "PAM configuration for <command>chpasswd</command>."
+msgstr "<command>chpasswd</command> 的 PAM 配置。"
+
+#: chpasswd.8.xml:286(para)
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>newusers</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<phrase><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>newusers</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<phrase><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: chgpasswd.8.xml:47(contrib)
+msgid "Creation, 2006"
+msgstr ""
+
+#: chgpasswd.8.xml:65(refpurpose)
+msgid "update group passwords in batch mode"
+msgstr "批量更新组密码"
+
+#: chgpasswd.8.xml:79(para)
+msgid ""
+"The <command>chgpasswd</command> command reads a list of group name and "
+"password pairs from standard input and uses this information to update a set "
+"of existing groups. Each line is of the format:"
+msgstr ""
+"<command>chgpasswd</command> 命令从标准输入读取一系列组名和密码对,并使用此信"
+"息更新这些存在的组。每行的格式如下:"
+
+#: chgpasswd.8.xml:84(para)
+msgid ""
+"<emphasis remap=\"I\">group_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">group_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+
+#: chgpasswd.8.xml:88(para)
+msgid ""
+"By default the supplied password must be in clear-text, and is encrypted by "
+"<command>chgpasswd</command>."
+msgstr ""
+"默认上,提供的密码必须是明码文本,然后由 <command>chgpasswd</command> 加密。"
+
+#: chgpasswd.8.xml:92(para)
+#, fuzzy
+#| msgid ""
+#| "The default encryption algorithm can be defined for the system with the "
+#| "ENCRYPT_METHOD variable of <filename>/etc/login.defs</filename>, and can "
+#| "be overwiten with the <option>-e</option>, <option>-m</option>, or "
+#| "<option>-c</option> options."
+msgid ""
+"The default encryption algorithm can be defined for the system with the "
+"<option>ENCRYPT_METHOD</option> variable of <filename>/etc/login.defs</"
+"filename>, and can be overwritten with the <option>-e</option>, <option>-m</"
+"option>, or <option>-c</option> options."
+msgstr ""
+"默认加密算法可以通过 <filename>/etc/login.defs</filename> 的 ENCRYPT_METHOD "
+"变量设置,并且可以使用 <option>-e</option>, <option>-m</option> 或 <option>-"
+"c</option> 选项覆盖。"
+
+#: chgpasswd.8.xml:106(para)
+msgid ""
+"The options which apply to the <command>chgpasswd</command> command are:"
+msgstr "<command>chgpasswd</command> 可以接受的选项有:"
+
+#: chgpasswd.8.xml:238(para)
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+
+#: chfn.1.xml:68(refpurpose)
+msgid "change real user name and information"
+msgstr "更改真名和信息"
+
+#: chfn.1.xml:85(para)
+msgid ""
+"The <command>chfn</command> command changes user fullname, office room "
+"number, office phone number, and home phone number information for a user's "
+"account. This information is typically printed by "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> and similar programs. A normal user may only change the fields "
+"for her own account, subject to the restrictions in <filename>/etc/login."
+"defs</filename>. (The default configuration is to prevent users from "
+"changing their fullname.) The superuser may change any field for any "
+"account. Additionally, only the superuser may use the <option>-o</option> "
+"option to change the undefined portions of the GECOS field."
+msgstr ""
+
+#: chfn.1.xml:99(para)
+msgid ""
+"These fields must not contain any colons. Except for the <emphasis remap=\"I"
+"\">other</emphasis> field, they should not contain any comma or equal sign. "
+"It is also recommended to avoid non-US-ASCII characters, but this is only "
+"enforced for the phone numbers. The <emphasis remap=\"I\">other</emphasis> "
+"field is used to store accounting information used by other applications."
+msgstr ""
+
+#: chfn.1.xml:112(para)
+msgid "The options which apply to the <command>chfn</command> command are:"
+msgstr "<command>chfn</command> 命令可以接受的选项有:"
+
+#: chfn.1.xml:117(term)
+msgid ""
+"<option>-f</option>, <option>--full-name</option>&nbsp;"
+"<replaceable>FULL_NAME</replaceable>"
+msgstr ""
+"<option>-f</option>, <option>--full-name</option>&nbsp;"
+"<replaceable>FULL_NAME</replaceable>"
+
+#: chfn.1.xml:121(para)
+msgid "Change the user's full name."
+msgstr "更改用户的全名"
+
+#: chfn.1.xml:125(term)
+msgid ""
+"<option>-h</option>, <option>--home-phone</option>&nbsp;"
+"<replaceable>HOME_PHONE</replaceable>"
+msgstr ""
+"<option>-h</option>, <option>--home-phone</option>&nbsp;"
+"<replaceable>HOME_PHONE</replaceable>"
+
+#: chfn.1.xml:129(para)
+msgid "Change the user's home phone number."
+msgstr ""
+
+#: chfn.1.xml:133(term)
+msgid ""
+"<option>-o</option>, <option>--other</option>&nbsp;<replaceable>OTHER</"
+"replaceable>"
+msgstr ""
+"<option>-o</option>, <option>--other</option>&nbsp;<replaceable>OTHER</"
+"replaceable>"
+
+#: chfn.1.xml:137(para)
+msgid ""
+"Change the user's other GECOS information. This field is used to store "
+"accounting information used by other applications, and can be changed only "
+"by a superuser."
+msgstr ""
+
+#: chfn.1.xml:145(term)
+msgid ""
+"<option>-r</option>, <option>--room</option>&nbsp;<replaceable>ROOM_NUMBER</"
+"replaceable>"
+msgstr ""
+"<option>-r</option>, <option>--room</option>&nbsp;<replaceable>ROOM_NUMBER</"
+"replaceable>"
+
+#: chfn.1.xml:149(para)
+msgid "Change the user's room number."
+msgstr ""
+
+#: chfn.1.xml:165(term)
+msgid "<option>-u</option>, <option>--help</option>"
+msgstr "<option>-u</option>, <option>--help</option>"
+
+#: chfn.1.xml:173(term)
+msgid ""
+"<option>-w</option>, <option>--work-phone</option>&nbsp;"
+"<replaceable>WORK_PHONE</replaceable>"
+msgstr ""
+"<option>-w</option>, <option>--work-phone</option>&nbsp;"
+"<replaceable>WORK_PHONE</replaceable>"
+
+#: chfn.1.xml:177(para)
+msgid "Change the user's office phone number."
+msgstr ""
+
+#: chfn.1.xml:181(para)
+msgid ""
+"If none of the options are selected, <command>chfn</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis remap=\"B\">[ ]</emphasis> marks. Without options, <command>chfn</"
+"command> prompts for the current user account."
+msgstr ""
+
+#: chfn.1.xml:226(para)
+msgid ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: chage.1.xml:66(refpurpose)
+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 their password."
+msgstr ""
+
+#: chage.1.xml:92(para)
+msgid "The options which apply to the <command>chage</command> command are:"
+msgstr "<command>chage</command> 命令可以接受的选项有:"
+
+#: chage.1.xml:97(term)
+msgid ""
+"<option>-d</option>, <option>--lastday</option>&nbsp;<replaceable>LAST_DAY</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--lastday</option>&nbsp;<replaceable>LAST_DAY</"
+"replaceable>"
+
+#: chage.1.xml:101(para)
+msgid ""
+"Set the number of days since January 1st, 1970 when the password was last "
+"changed. The date may also be expressed in the format YYYY-MM-DD (or the "
+"format more commonly used in your area)."
+msgstr ""
+
+#: chage.1.xml:109(term)
+msgid ""
+"<option>-E</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>EXPIRE_DATE</replaceable>"
+msgstr ""
+"<option>-E</option>, <option>--expiredate</option>&nbsp;"
+"<replaceable>EXPIRE_DATE</replaceable>"
+
+#: chage.1.xml:113(para)
+msgid ""
+"Set the date or number of days since January 1, 1970 on which the user's "
+"account will no longer be accessible. The date may also be expressed in the "
+"format YYYY-MM-DD (or the format more commonly used in your area). A user "
+"whose account is locked must contact the system administrator before being "
+"able to use the system again."
+msgstr ""
+
+#: chage.1.xml:121(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>EXPIRE_DATE</replaceable> will remove an account expiration "
+"date."
+msgstr ""
+"<replaceable>EXPIRE_DATE</replaceable> 设置为 <emphasis remap=\"I\">-1</"
+"emphasis> 会移除账户的过期日期。"
+
+#: chage.1.xml:135(term)
+#, fuzzy
+#| msgid "<option>-s</option>, <option>--sort</option>"
+msgid "<option>-i</option>, <option>--iso8601</option>"
+msgstr "<option>-s</option>, <option>--sort</option>"
+
+#: chage.1.xml:137(para)
+msgid "When printing dates, use YYYY-MM-DD format."
+msgstr ""
+
+#: chage.1.xml:141(term)
+msgid ""
+"<option>-I</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-I</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</"
+"replaceable>"
+
+#: chage.1.xml:145(para)
+msgid ""
+"Set the number of days of inactivity after a password has expired before the "
+"account is locked. The <replaceable>INACTIVE</replaceable> option is the "
+"number of days of inactivity. A user whose account is locked must contact "
+"the system administrator before being able to use the system again."
+msgstr ""
+
+#: chage.1.xml:152(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>INACTIVE</replaceable> will remove an account's inactivity."
+msgstr ""
+"<replaceable>INACTIVE</replaceable> 设置为 <emphasis remap=\"I\">-1</"
+"emphasis> 会移除账户禁用功能。"
+
+#: chage.1.xml:164(para)
+msgid "Show account aging information."
+msgstr "现实账户年龄信息。"
+
+#: chage.1.xml:170(term)
+msgid ""
+"<option>-m</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DAYS</"
+"replaceable>"
+
+#: chage.1.xml:182(term)
+msgid ""
+"<option>-M</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-M</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DAYS</"
+"replaceable>"
+
+#: chage.1.xml:186(para)
+#, fuzzy
+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 ""
+"设置密码有效的最大天数。<replaceable>MAX_DAYS</replaceable> 加 "
+"<replaceable>LAST_DAY</replaceable> 小于当前日期时,会要求用户更改密码,否则"
+"不能使用此账户。"
+
+#: chage.1.xml:215(term)
+msgid ""
+"<option>-W</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>WARN_DAYS</replaceable>"
+msgstr ""
+"<option>-W</option>, <option>--warndays</option>&nbsp;"
+"<replaceable>WARN_DAYS</replaceable>"
+
+#: chage.1.xml:219(para)
+#, fuzzy
+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 ""
+"设置在要求更改密码之前几天开始警告。<replaceable>WARN_DAYS</replaceable> 选项"
+
+#: chage.1.xml:228(para)
+msgid ""
+"If none of the options are selected, <command>chage</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis>[ ]</emphasis> marks."
+msgstr ""
+"如果没有选择任何选项,<command>chage</command> 会进入交互模式,以所有字段的当"
+"前值提示用户。输入一个新值可以更改这些字段,或者留空使用当前值。当前值出现在 "
+"<emphasis>[ ]</emphasis> 标记对里。"
+
+#: chage.1.xml:238(para)
+msgid ""
+"The <command>chage</command> program requires a shadow password file to be "
+"available."
+msgstr "<command>chage</command> 需要有一个影子密码文件才可用。"
+
+#: chage.1.xml:242(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 their password or account is due to expire."
+msgstr ""
+"只有 root 才可以使用 <command>chage</command>,一个特殊情况是 <option>-l</"
+"option> 选项,用来让非特权用户觉得自己的密码或账户何时过期。"
+
+#: chage.1.xml:307(replaceable)
+msgid "15"
+msgstr "15"
+
+#: chage.1.xml:309(para)
+msgid "can't find the shadow password file"
+msgstr "无法找到影子密码文件"
+
+#: chage.1.xml:285(para)
+msgid ""
+"The <command>chage</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr "<command>chage</command> 命令有如下退出值:<placeholder-1/>"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
+#: chage.1.xml:0(None)
+msgid "translator-credits"
+msgstr "YunQiang Su <wzssyqa@gmail.com>, 2010."
+
+#~ msgid ""
+#~ "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."
+#~ msgstr ""
+#~ "附加参数可以在用户名之后提供,这时,将会把他们提供给用户的登录 shell。特别"
+#~ "地,参数 <option>-c</option> 将会使下一个参数被多数命令解释器视为命令。这"
+#~ "个命令会被 <filename>/etc/passwd</filename> 中为目标用户指定的 shell 执"
+#~ "行。"
+
+#~ msgid ""
+#~ "You can use the <option>--</option> argument to separate <command>su</"
+#~ "command> options from the arguments supplied to the shell."
+#~ msgstr ""
+#~ "您可以使用 <option>--</option> 参数将 <command>su</command> 选项和提供给 "
+#~ "shell 的参数分隔开来。"
+
+#~ msgid ""
+#~ "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 <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>."
+#~ msgstr ""
+#~ "加密的密码字段可以为空,此时使用指定的登录名登录时不会要求认证。然而,如"
+#~ "果 <emphasis>password</emphasis> 为空,一些读取 <filename>/etc/passwd</"
+#~ "filename> 文件的程序可能会不允许 <emphasis>任何</emphasis> 访问。如果 "
+#~ "<emphasis>password</emphasis> 字段是一个小写的 <quote>x</quote>,那么加密"
+#~ "的密码实际上存储于 <citerefentry><refentrytitle>shadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry> 中;在 <filename>/"
+#~ "etc/shadow</filename> 文件中 <emphasis>必须</emphasis> 有对应的行,否则用"
+#~ "户账户就会无效。如果 <emphasis>password</emphasis> 字段是其他任何字符串,"
+#~ "将会被视为加密过的密码,如 <citerefentry><refentrytitle>crypt</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry> 中的说明。"
+
+#~ msgid "-M"
+#~ msgstr "-M"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "can't create mail spool"
+#~ msgstr "无法创建邮箱"
+
+#~ msgid ""
+#~ "The SELinux user for the user's login. The default is to leave this field "
+#~ "the blank, which causes the system to select the default SELinux user."
+#~ msgstr ""
+#~ "用户登录使用的 SELinux 用户。默认值就留空,会让系统选择默认的 SELinux 用"
+#~ "户。"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "-q"
+#~ msgstr "-q"
+
+#~ msgid "-s"
+#~ msgstr "-s"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, <phrase condition="
+#~ "\"no_pam\"><citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+#~ "phrase><citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, <phrase condition="
+#~ "\"no_pam\"><citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+#~ "phrase><citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "new_users"
+#~ msgstr "新用户"
+
+#~ msgid "full_name"
+#~ msgstr "full_name"
+
+#~ msgid "-f <placeholder-1/>"
+#~ msgstr "-f <placeholder-1/>"
+
+#~ msgid "room_no"
+#~ msgstr "room_no"
+
+#~ msgid "work_ph"
+#~ msgstr "work_ph"
+
+#~ msgid "-w <placeholder-1/>"
+#~ msgstr "-w <placeholder-1/>"
+
+#~ msgid "home_ph"
+#~ msgstr "home_ph"
+
+#~ msgid "other"
+#~ msgstr "其它"
+
+#~ msgid "-o <placeholder-1/>"
+#~ msgstr "-o <placeholder-1/>"
diff --git a/man/porttime.5.xml b/man/porttime.5.xml
new file mode 100644
index 0000000..e28ce60
--- /dev/null
+++ b/man/porttime.5.xml
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1989 - 1990, Julianne Frances Haugh
+ Copyright (c) 2007 - 2008, 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='porttime.5'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1989</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>porttime</refentrytitle>
+ <manvolnum>5</manvolnum>
+ <refmiscinfo class="sectdesc">File Formats and Conversions</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>porttime</refname>
+ <refpurpose>port access time file</refpurpose>
+ </refnamediv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ <emphasis remap='I'>porttime</emphasis> contains a list of tty
+ devices, user names, and permitted login times.
+ </para>
+
+ <para>
+ Each entry consists of three colon separated fields. The first field
+ is a comma separated list of tty devices, or an asterisk to indicate
+ that all tty devices are matched by this entry. The second field is a
+ comma separated list of user names, or an asterisk to indicated that
+ all user names are matched by this entry. The third field is a comma
+ separated list of permitted access times.
+ </para>
+
+ <para>
+ Each access time entry consists of zero or more days of the week,
+ abbreviated <emphasis>Su</emphasis>, <emphasis>Mo</emphasis>,
+ <emphasis>Tu</emphasis>, <emphasis>We</emphasis>,
+ <emphasis>Th</emphasis>, <emphasis>Fr</emphasis>, and
+ <emphasis>Sa</emphasis>, followed by a pair of times separated by a
+ hyphen. The abbreviation <emphasis>Wk</emphasis> may be used to
+ represent Monday thru Friday, and <emphasis>Al</emphasis> may be used
+ to indicate every day. If no days are given, <emphasis>Al</emphasis>
+ is assumed.
+ </para>
+ </refsect1>
+
+ <refsect1 id='examples'>
+ <title>EXAMPLES</title>
+ <para>
+ The following entry allows access to user <emphasis
+ remap='B'>jfh</emphasis> on every port during weekdays from 9am to
+ 5pm.
+ </para>
+
+ <para> *:jfh:Wk0900-1700</para>
+
+ <para>
+ The following entries allow access only to the users
+ <emphasis>root</emphasis> and <emphasis>oper</emphasis> on
+ <filename>/dev/console</filename> at any time. This illustrates how
+ the <filename>/etc/porttime</filename> file is an ordered list of
+ access times. Any other user would match the second entry which does
+ not permit access at any time.
+ </para>
+
+ <programlisting>
+ console:root,oper:Al0000-2400
+ console:*:
+ </programlisting>
+
+ <para>
+ The following entry allows access for the user
+ <emphasis>games</emphasis> on any port during non-working hours.
+ </para>
+
+ <para> *:games:Wk1700-0900,SaSu0000-2400</para>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/porttime</filename></term>
+ <listitem>
+ <para>File containing port access.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/pt_BR/Makefile.am b/man/pt_BR/Makefile.am
new file mode 100644
index 0000000..f0773a7
--- /dev/null
+++ b/man/pt_BR/Makefile.am
@@ -0,0 +1,12 @@
+
+mandir = @mandir@/pt_BR
+
+man_MANS = \
+ man1/gpasswd.1 \
+ man8/groupadd.8 \
+ man8/groupdel.8 \
+ man8/groupmod.8 \
+ man5/passwd.5 \
+ man5/shadow.5
+
+EXTRA_DIST = $(man_MANS)
diff --git a/man/pt_BR/Makefile.in b/man/pt_BR/Makefile.in
new file mode 100644
index 0000000..d418e56
--- /dev/null
+++ b/man/pt_BR/Makefile.in
@@ -0,0 +1,654 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = man/pt_BR
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" \
+ "$(DESTDIR)$(man8dir)"
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@/pt_BR
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = \
+ man1/gpasswd.1 \
+ man8/groupadd.8 \
+ man8/groupdel.8 \
+ man8/groupmod.8 \
+ man5/passwd.5 \
+ man5/shadow.5
+
+EXTRA_DIST = $(man_MANS)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/pt_BR/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign man/pt_BR/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+install-man5: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man5dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.5[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man5:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man5dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.5[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir)
+install-man8: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man8dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.8[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man8:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man8dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.8[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-man5 install-man8 install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+ uninstall-am uninstall-man uninstall-man1 uninstall-man5 \
+ uninstall-man8
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/pt_BR/man1/gpasswd.1 b/man/pt_BR/man1/gpasswd.1
new file mode 100644
index 0000000..cccb459
--- /dev/null
+++ b/man/pt_BR/man1/gpasswd.1
@@ -0,0 +1,93 @@
+.\" Copyright 1996, Rafal Maszkowski, rzm@pdi.net
+.\"
+.\" É permitida a confecção e distribuição deste manual, devidamente
+.\" acompanhado dos avisos de direitos autorais e desta permissão
+.\" em todas as cópias.
+.\"
+.\" É permitida a cópia e distribuição de versões modificadas deste manual
+.\" sob as condições acima, e que todo o trabalho derivado seja distribuido
+.\" sob as mesmas condições deste manual.
+.\"
+.\" Uma vez que o kernel do Linux e suas bibliotecas estão constantemente
+.\" mudando, esta página de manual poderá estar incorreta ou desatualizada.
+.\" O(s) autor(es) não assumem responsabilidade por erros ou omissões,
+.\" ou por danos resultantes do uso das informações aqui contidas.
+.\"
+.\" Versões formatadas ou processadas deste manual, desacompanhadas dos
+.\" fontes, devem conter a autorização e os direitos autorais dos autores do
+.\" trabalho.
+.\"
+.\" Você deve receber uma cópia da Licença Pública GNU
+.\" junto com este manual; caso contrário, escreva para a Free Software
+.\" Foundation, Inc., 675 mass Ave, Cambridge, MA 02139 USA ou
+.\" em português na Conectiva Informática \- http://www.conectiva.com.br
+.\"
+.\" $Id$
+.\"
+.TH GPASSWD 1
+.SH NOME
+gpasswd \- administra o arquivo \fI/etc/group\fR
+.br
+.SH SINOPSE
+\fBgpasswd\fR \fIgrupo\fR
+.br
+\fBgpasswd \-a\fR \fIusuário\fR \fIgrupo\fR
+.br
+\fBgpasswd \-d\fR \fIusuário\fR \fIgrupo\fR
+.br
+\fBgpasswd \-R\fR \fIgrupo\fR
+.br
+.B gpasswd
+.B \-r
+\fIgrupo\fR
+.br
+.B gpasswd
+.RB [ \-A
+\fIusuário\fR,...]
+.RB [ \-M
+\fIusuário\fR,...]
+\fIgrupo\fR
+.br
+.SH DESCRIÇÃO
+O
+.B gpasswd
+é utilizado para administrar o arquivo \fI/etc/group\fR (e o arquivo
+\fI/etc/gshadow\fR, caso compilado com SHADOWGRP).
+Todos os grupos podem ter administradores, membros e uma senha. O
+administrador do sistema pode usar a opção \fB\-A\fR para definir o
+administrador do grupo e \fB\-M\fR para definir os membros e todos os seus
+direitos assim como os do administrador.
+.PP
+Administradores de grupos podem adicionar e excluir usuários utilizando as
+opções \fB\-a\fR e \fB\-d\fR respectivamente. Administradores podem usar a opção
+\fB\-r\fR para remover a senha de um grupo. Quando não há senhas definidas
+para um grupo, somente os membros do grupo podem usar o comando
+.BR newgrp (1)
+para adicionar novos usuários ao grupo . A opção \fB\-R\fR
+desabilita o acesso ao grupo através do comando
+.BR newgrp (1)
+.
+.PP
+O
+.B gpasswd
+executado pelo administrador do grupo seguido pelo nome
+solicitará a senha do grupo. Caso o comando
+.BR newgrp (1)
+esteja habilitado para outros usuários do grupo sem o uso de senha, não
+membros podem também executar o comando, informando porém a senha do grupo.
+.SH ARQUIVOS
+\fI/etc/group\fR \- informações do grupo
+.br
+\fI/etc/gshadow\fR \- informações do grupo em arquivo shadow
+.SH VEJA TAMBÉM
+.BR newgrp (1),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR grpck (8)
+.SH TRADUÇÃO E REVISÃO PARA A LÍNGUA PORTUGUESA
+Sandro Nunes Henrique <sandro@conectiva.com.br> (tradução)
+.br
+Rodrigo Stulzer Lopes <rodrigo@conectiva.com.br> (revisão)
+.br
+Guilherme de S. Pastore <gpastore@colband.com.br> (revisão)
diff --git a/man/pt_BR/man5/passwd.5 b/man/pt_BR/man5/passwd.5
new file mode 100644
index 0000000..211c789
--- /dev/null
+++ b/man/pt_BR/man5/passwd.5
@@ -0,0 +1,133 @@
+.\" -*- nroff -*-
+.\" Copyright (c) 1993 Michael Haardt (michael@moria.de), Fri Apr 2 11:32:09 MET DST 1993
+.\"
+.\" This is free documentation; you can redistribute it and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation; either version 2 of
+.\" the License, or (at your option) any later version.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual is distributed in the hope that it will be useful,
+.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.\" GNU General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public
+.\" License along with this manual; if not, write to the Free
+.\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
+.\" USA.
+.\"
+.\" Modified Sun Jul 25 10:46:28 1993 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Aug 21 18:12:27 1994 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Jun 18 01:53:57 1995 by Andries Brouwer (aeb@cwi.nl)
+.\" Modified Mon Jan 5 20:24:40 MET 1998 by Michael Haardt
+.\" (michael@cantor.informatik.rwth-aachen.de)
+.TH PASSWD 5 "5/01/1998" "" "Formatos de Arquivo"
+.SH NOME
+passwd \- arquivo de senhas
+.SH DESCRIÇÃO
+.B Passwd
+é um arquivo texto, que contém a lista de contas do sistema,
+fornecendo para cada conta qualquer informação útil como identificação numérica do usuário,
+identificação numérica do grupo, diretório do usuário, interpretador de comandos, etc.
+Freqüentemente ele contém as senhas criptografadas para cada conta.
+Ele deveria ter permissão total de leitura (muitos utilitários, como
+.BR ls (1)
+usa-o para mapear as identificações dos usuários para nome de usuários), mas
+a permissão de escrita é apenas para o superusuário.
+.PP
+Nos bons e velhos dias não havia grandes problemas com esta permissão total
+de leitura. Todos podiam ler as senhas criptografadas, mas o hardware era
+muito lento para quebrar as senhas bem escolhidas, e além disso, a suposição fundamental
+usada era que toda comunidade de usuários era amigável. Atualmente muitas
+pessoas executam alguma versão da suite shadow password, onde
+.I /etc/passwd
+tem *'s ao invéz de senhas criptografadas, e as senhas criptorafadas estão em
+.I /etc/shadow
+o qual é legível apenas para o superusuário.
+.PP
+Apesar de que senhas shadow serem usadas, muitos administradores de
+sistemas usam
+estrelas no campo de senhas criptografadas para ter certeza que este usuário
+autentique-se a si mesmo(a) usando uma senha. (Mas veja as Notas abaixo.)
+.PP
+Se você cria um nova conta, primeiro coloque asteriscos no campo de
+senhas, então use
+.BR passwd (1)
+para seleciona-lá.
+.PP
+Há apenas um lançamento por linha, e cada linha tem o formato:
+.sp
+.RS
+account:password:UID:GID:GECOS:directory:shell
+.RE
+.sp
+As descrições dos campos são:
+.sp
+.RS
+.TP 1.0in
+.I account
+o nome dos usuários do sistema. Ele não deveria conter letras maiúsculas.
+.TP
+.I password
+a senha criptografada do usuários ou asteriscos.
+.TP
+.I UID
+a identificação numérica do usuário.
+.TP
+.I GID
+a identificação do grupo primário para este usuário.
+.TP
+.I GECOS
+Este campo é opcional e somente usado para propósitos informativos.
+Usualmente, ele contém o nome completo do usuário. GECOS significa General Electric
+Comprehensive Operating System, que foi renomeado para GCOS quando
+a divissão de grandes sistemas da GE foi vendida para Honeywell. Dennis Ritchie havia
+relatado: "Algumas vezes nós mandamos uma saída para a impressora ou trabalhos em lote
+para um máquina GCOS. O campo gcos no arquivo de senhas estava no lugar
+para esconder a informação para o $IDENTcard. Não elegante."
+.TP
+.I directory
+o diretório do usuário ($HOME).
+.TP
+.I shell
+o interpretador de comando usados depois do login (se vazio, usa o
+.BR /bin/sh ).
+Se selecionado um executável que não existe, o usuário ficará incapaz de
+logar através de
+.BR login (1).
+.RE
+.SH NOTAS
+Se você quiser criar grupos de usuários, as GIDs devem ser iguais e devem
+ter um lançamento no \fI/etc/group\fP, ou o grupo não existe.
+.PP
+Se a senha criptografada é selecionada como asteriscos, o usuário ficará
+apto para logar usando
+.BR login (1),
+mas talvez logar usando
+.BR rlogin (1),
+executar processos existentes e iniciar novos através de
+.BR rsh (1)
+ou
+.BR cron (1)
+ou
+.BR at (1)
+ou filtros de correio, etc. Tentativa para fechar um conta por simples
+mudança do campo
+shell produz o mesmo resultado e adicionalmente permite o uso de
+.BR su (1).
+.SH ARQUIVOS
+.I /etc/passwd
+.SH "VEJA TAMBÉM"
+.BR passwd (1),
+.BR login (1),
+.BR su (1),
+.BR group (5),
+.BR shadow (5)
+.SH TRADUZIDO POR LDP-BR em 21/08/2000.
+\&\fR\&\f(CWAndré L. Fassone Canova <lonelywolf@blv.com.br> (tradução)\fR
+\&\fR\&\f(CWRoberto Selbach Teixeira <robteix@zaz.com.br> (revisão)\fR
diff --git a/man/pt_BR/man5/shadow.5 b/man/pt_BR/man5/shadow.5
new file mode 100644
index 0000000..8f7c395
--- /dev/null
+++ b/man/pt_BR/man5/shadow.5
@@ -0,0 +1,81 @@
+.\" $Id$
+.\" Copyright 1989 \- 1990, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.TH SHADOW 5
+.SH NOME
+shadow \- arquivo de senhas criptografadas
+.SH DESCRIÇÃO
+.I shadow
+contém as informações de senhas criptografadas das contas dos usuários e opcionalmente a informação de idade da senha.
+Contém:
+.IP "" .5i
+Nome de acesso.
+.IP "" .5i
+Senha criptografada.
+.IP "" .5i
+Dias decorridos entre 1 de janeiro de 1970 e a última alteração da senha.
+.IP "" .5i
+Número de dias até que a senha deva ser alterada.
+.IP "" .5i
+Número de dias após o qual a senha deve ser alterada.
+.IP "" .5i
+Número de dias antes da expiração da senha no qual o usuário será avisado.
+.IP "" .5i
+Número de dias após a expiração da senha que a conta deve ser desabilitada.
+.IP "" .5i
+Dias decorridos entre 1 de janeiro de 1970 e a data em que a conta foi desabilitada.
+.IP "" .5i
+Campo reservado.
+.PP
+O campo senha deve ser preenchido. A senha criptografada consiste de 13 a 24 caracteres entre os 64 caracteres alfabéticos \- de a até z e de A até Z, além de 0 a 9, \. e /. Verifique em \fBcrypt\fR(3) por maiores detalhes de como esta cadeia de caracteres é interpretada.
+.PP
+A data da última mudança da senha é dada pelo número de dias desde 1 de janeiro de 1970. A senha não pode ser alterada novamente até que um determinado número de dias tenha se passado, e deve ser alterada após um número máximo de dias. Se o número mínimo de dias for maior que o número máximo, a senha não pode ser alterada pelo usuário.
+.PP
+uma conta é considerada inativa e desabilitada se a senha não foi alterada dentro de um determinado número de dias após a expiração das senhas. Uma conta poderá ser desabilitada ainda no dia especificado, independentemente de qualquer informação de expiração da senha.
+.PP
+Esta informação sobrepõe\-se a qualquer senha ou idade de senha presente no arquivo.
+.PP
+Este arquivo não poderá ser acessado por usuários comuns, caso deseje manter a segurança das senhas.
+.SH ARQUIVOS
+\fI/etc/passwd\fR \- informações das contas de usuários
+.br
+\fI/etc/shadow\fR \- senhas de usuários criptografadas
+.SH VEJA TAMBÉM
+.BR chage (1),
+.BR login (1),
+.BR passwd (1),
+.BR su (1),
+.BR shadow (3),
+.BR passwd (5),
+.BR pwconv (8),
+.BR pwunconv (8),
+.BR sulogin (8)
+.SH AUTOR
+Julianne Frances Haugh (jfh@tab.com)
+.SH TRADUÇÃO E REVISÃO PARA A LÍNGUA PORTUGUESA
+Sandro Nunes Henrique <sandro@conectiva.com.br> (tradução)
+Rodrigo Stulzer Lopes <rodrigo@conectiva.com.br> (revisão)
diff --git a/man/pt_BR/man8/groupadd.8 b/man/pt_BR/man8/groupadd.8
new file mode 100644
index 0000000..7ac0303
--- /dev/null
+++ b/man/pt_BR/man8/groupadd.8
@@ -0,0 +1,83 @@
+.\" Copyright 1991, Julianne Frances Haugh
+.\" Todos os direitos reservados.
+.\"
+.\" É permitida a confecção e distribuição deste manual, devidamente
+.\" acompanhado dos avisos de direitos autorais e desta permissão
+.\" em todas as cópias.
+.\"
+.\" É permitida a cópia e distribuição de versões modificadas deste manual
+.\" sob as condições acima, e que todo o trabalho derivado seja distribuído
+.\" sob as mesmas condições deste manual.
+.\"
+.\" Uma vez que o kernel do Linux e suas bibliotecas estão constantemente
+.\" mudando, esta página de manual poderá estar incorreta ou desatualizada.
+.\" O(s) autor(es) não assumem responsabilidade por erros ou omissões,
+.\" ou por danos resultantes do uso das informações aqui contidas.
+.\"
+.\" Versões formatadas ou processadas deste manual, desacompanhadas dos
+.\" fontes, devem conter a autorização e os direitos autorais dos autores do
+.\" trabalho.
+.\"
+.\" Você deve receber uma cópia da Licença Pública GNU
+.\" junto com este manual; caso contrário, escreva para a Free Software
+.\" Foundation, Inc., 675 mass Ave, Cambridge, MA 02139 USA ou
+.\" em português na Conectiva Informática Ltda. \- http://www.conectiva.com.br
+.\"
+.\"
+.\"
+.\" $Id$
+.\"
+.TH GROUPADD 8
+.SH NOME
+groupadd \- Criar um novo grupo
+.SH SINOPSE
+\fBgroupadd\fR [\fB\-g\fR \fIgid\fR [\fB\-o\fR]] [\fB\-f\fR] \fIgrupo\fR
+.SH DESCRIÇÃO
+O comando \fBgroupadd\fR cria um novo grupo usando valores especificados na
+linha de comando e os valores padrões do sistema. O novo grupo será criado
+nos arquivos do sistema, conforme o requerido. As opções que aplicam\-se ao
+comando \fBgroupadd\fR são
+.IP \fB\-f\fR
+Este é o indicador \fIforce\fR . Ele não irá parar o processamento do
+\fBgroupadd\fR e não finalizará o programa, caso um grupo que esteja sendo
+criado já exista no sistema. Neste caso, o grupo não será alterado(ou
+adicionado novamente).
+.IP "\fB\-g \fIgid\fR"
+A identificação numérica do grupo é denominada ID. Este valor deve ser
+único, a menos que a opção \fB\-o\fR seja usada. O valor deve ser não
+negativo, e o padrão é o menor valor maior que 500 e o maior que qualquer
+outro grupo. Valores entre 0 e 999 são tipicamente reservados para \fIcontas
+do sistema\fR.
+.IP \fB\-r\fR
+Este indicador instrui \fBgroupadd\fR a adicionar uma \fIconta do sistema
+\fR. A primeira identificação de grupo \fI(gid)\fR menor que 999 será
+automaticamente selecionada a menos que a opção \fB\-g\fR seja informada
+também.
+.BR
+Esta é uma informação disponibilizada pela Red Hat Software.
+.BR
+Esta opção também modifica o modo como a opção \fB\-g\fR funciona. Ao
+solicitar um \fIgid\fR que não seja único e ao não informar a opção
+\fB\-o\fR, a criação do grupo , a criação terá o comportamento padrão
+(adicionando um grupo como se as opções \fB\-g\fR ou \fB\-o\fR \fBnão\fR
+fossem especificadas).
+.BR
+.SH ARQUIVOS
+\fI/etc/group\fR \- informações sobre o grupo
+.br
+\fI/etc/gshadow\fR \- informações seguras sobre o grupo
+.br
+.SH VEJA TAMBÉM
+.BR chfn (1),
+.BR chsh (1),
+.BR passwd (1),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR useradd (8),
+.BR userdel (8),
+.BR usermod (8)
+.SH AUTOR
+Julianne Frances Haugh (jfh@tab.com)
+.SH TRADUÇÃO E REVISÃO PARA A LÍNGUA PORTUGUESA
+Sandro Nunes Henrique <sandro@conectiva.com.br> (tradução)
+Rodrigo Stulzer Lopes <rodrigo@conectiva.com.br> (revisão)
diff --git a/man/pt_BR/man8/groupdel.8 b/man/pt_BR/man8/groupdel.8
new file mode 100644
index 0000000..61292e6
--- /dev/null
+++ b/man/pt_BR/man8/groupdel.8
@@ -0,0 +1,59 @@
+.\" Copyright 1991 \- 1993, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Todos os direitos reservados.
+.\"
+.\" É permitida a confecção e distribuição deste manual, devidamente
+.\" acompanhado dos avisos de direitos autorais e desta permissão
+.\" em todas as cópias.
+.\"
+.\" É permitida a cópia e distribuição de versões modificadas deste manual
+.\" sob as condições acima, e que todo o trabalho derivado seja distribuído
+.\" sob as mesmas condições deste manual.
+.\"
+.\" Uma vez que o kernel do Linux e suas bibliotecas estão constantemente
+.\" mudando, esta página de manual poderá estar incorreta ou desatualizada.
+.\" O(s) autor(es) não assumem responsabilidade por erros ou omissões,
+.\" ou por danos resultantes do uso das informações aqui contidas.
+.\"
+.\" Versões formatadas ou processadas deste manual, desacompanhadas dos
+.\" fontes, devem conter a autorização e os direitos autorais dos autores do
+.\" trabalho.
+.\"
+.\" Você deve receber uma cópia da Licença Pública GNU
+.\" junto com este manual; caso contrário, escreva para a Free Software
+.\" Foundation, Inc., 675 mass Ave, Cambridge, MA 02139 USA ou
+.\" em português na Conectiva Informática Ltda. \- http://www.conectiva.com.br.\"
+.\"
+.\" $Id$
+.\"
+.TH GROUPDEL 8
+.SH NOME
+groupdel \- Apaga um grupo
+.SH SINOPSE
+.B groupdel
+.I grupo
+.SH DESCRIÇÃO
+O comando \fBgroupdel\fR modifica os arquivos de contas do sistema, apagando todas as referências ao \fIgrupo\fR. O grupo a ser apagado deve existir.
+.PP
+Deve\-se manualmente checar os sistemas de arquivos para garantir que nenhum dos arquivos permanece com o grupo ou com a sua identificação.
+.SH DICAS
+Não se deve remover o grupo primário de um grupo existente. Deve\-se remover os usuários, antes de se remover o grupo.
+.SH ARQUIVOS
+\fI/etc/group\fR \- informações do grupo
+.br
+\fI/etc/gshadow\fR \- informações seguras do grupo
+.SH VEJA TAMBÉM
+.BR chfn (1),
+.BR chsh (1),
+.BR passwd (1),
+.BR groupadd (8),
+.BR groupmod (8),
+.BR useradd (8),
+.BR userdel (8),
+.BR usermod (8)
+.SH AUTOR
+Julianne Frances Haugh (jfh@tab.com)
+.SH TRADUÇÃO E REVISÃO PARA A LÍNGUA PORTUGUESA
+Sandro Nunes Henrique <sandro@conectiva.com.br> (tradução)
+Rodrigo Stulzer Lopes <rodrigo@conectiva.com.br> (revisão)
diff --git a/man/pt_BR/man8/groupmod.8 b/man/pt_BR/man8/groupmod.8
new file mode 100644
index 0000000..fec97d1
--- /dev/null
+++ b/man/pt_BR/man8/groupmod.8
@@ -0,0 +1,61 @@
+.\" $Id$
+.\" Copyright 1991, Julianne Frances Haugh
+.\" Todos os direitos reservados.
+.\"
+.\" É permitida a confecção e distribuição deste manual, devidamente
+.\" acompanhado dos avisos de direitos autorais e desta permissão
+.\" em todas as cópias.
+.\"
+.\" É permitida a cópia e distribuição de versões modificadas deste manual
+.\" sob as condições acima, e que todo o trabalho derivado seja distribuído
+.\" sob as mesmas condições deste manual.
+.\"
+.\" Uma vez que o kernel do Linux e suas bibliotecas estão constantemente
+.\" mudando, esta página de manual poderá estar incorreta ou desatualizada.
+.\" O(s) autor(es) não assumem responsabilidade por erros ou omissões,
+.\" ou por danos resultantes do uso das informações aqui contidas.
+.\"
+.\" Versões formatadas ou processadas deste manual, desacompanhadas dos
+.\" fontes, devem conter a autorização e os direitos autorais dos autores do
+.\" trabalho.
+.\"
+.\" Você deve receber uma cópia da Licença Pública GNU
+.\" junto com este manual; caso contrário, escreva para a Free Software
+.\" Foundation, Inc., 675 mass Ave, Cambridge, MA 02139 USA ou
+.\" em português na Conectiva Informática Ltda. \- http://www.conectiva.com.br
+.TH GROUPMOD 8
+.SH NOME
+groupmod \- Modifica um grupo
+.SH SINOPSE
+\fBgroupmod\fR [\fB\-g\fR \fIgid\fR [\fB\-o\fR]] [\fB\-n\fR \fInome_grupo\fR] \fIgrupo\fR
+.SH DESCRIÇÃO
+O comando \fBgroupmod\fR modifica os arquivos de contas do sistema para as
+novas configuraXXes informadas na linha de comando. As opXXes que aplicam\-se
+ao comando \fIgroupmod\fR sXo:
+.IP "\fB\-g\fR \fIgid\fR"
+O valor numXrico de identificaXXo do grupo X denominada GID. Este valor deve
+ser Xnico, a menos que a opXXo \fB\-o\fR seja usada. O valor dever ser nXo
+negativo. Valores entre 0 e 999 sXo tipicamente reservados para grupos do
+sistema. Quaisquer arquivos com uma identificaXXo antiga de grupo devem ter
+o ID mudado manualmente.
+.IP "\fB\-n\fR \fInome_grupo\fR"
+O nome do grupo irá ser alterado de \fIgroup\fR para
+\fInome_grupo\fR.
+.SH ARQUIVOS
+\fI/etc/group\fR \- Informações do grupo
+.br
+\fI/etc/gshadow\fR \- informações seguras do grupo
+.SH VEJA TAMBÉM
+.BR chfn (1),
+.BR chsh (1),
+.BR passwd (1),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR useradd (8),
+.BR userdel (8),
+.BR usermod (8)
+.SH AUTOR
+Julianne Frances Haugh (jfh@tab.com)
+.SH TRADUÇÃO E REVISÃO PARA A LÍNGUA PORTUGUESA
+Sandro Nunes Henrique <sandro@conectiva.com.br> (tradução)
+Rodrigo Stulzer Lopes <rodrigo@conectiva.com.br> (revisão)
diff --git a/man/pwck.8.xml b/man/pwck.8.xml
new file mode 100644
index 0000000..bc99605
--- /dev/null
+++ b/man/pwck.8.xml
@@ -0,0 +1,373 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1992 , Julianne Frances Haugh
+ Copyright (c) 2007 - 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY PASS_MAX_DAYS SYSTEM "login.defs.d/PASS_MAX_DAYS.xml">
+<!ENTITY PASS_MIN_DAYS SYSTEM "login.defs.d/PASS_MIN_DAYS.xml">
+<!ENTITY PASS_WARN_AGE SYSTEM "login.defs.d/PASS_WARN_AGE.xml">
+<!ENTITY TCB_AUTH_GROUP SYSTEM "login.defs.d/TCB_AUTH_GROUP.xml">
+<!ENTITY TCB_SYMLINKS SYSTEM "login.defs.d/TCB_SYMLINKS.xml">
+<!ENTITY USE_TCB SYSTEM "login.defs.d/USE_TCB.xml">
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='pwck.8'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1992</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>pwck</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>pwck</refname>
+ <refpurpose>verify integrity of password files</refpurpose>
+ </refnamediv>
+ <!-- body begins here -->
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>pwck</command>
+ <arg choice='opt'>options</arg>
+ <arg choice='opt'>
+ <arg choice='plain'>
+ <replaceable>passwd</replaceable>
+ </arg>
+ <arg choice='opt'>
+ <arg choice='plain'>
+ <replaceable>shadow</replaceable>
+ </arg>
+ </arg>
+ </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The <command>pwck</command> command verifies the integrity of the
+ users and authentication information. It checks that all entries in
+ <filename>/etc/passwd</filename> and <filename>/etc/shadow</filename>
+ <phrase condition="tcb">(or the files in
+ <filename>/etc/tcb</filename>, when <option>USE_TCB</option> is
+ enabled)</phrase>
+ have the proper format and contain valid data.
+ The user is prompted to delete entries that are
+ improperly formatted or which have other uncorrectable errors.
+ </para>
+
+ <para>Checks are made to verify that each entry has:</para>
+ <itemizedlist mark='bullet'>
+ <listitem>
+ <para>the correct number of fields</para>
+ </listitem>
+ <listitem>
+ <para>a unique and valid user name</para>
+ </listitem>
+ <listitem>
+ <para>a valid user and group identifier</para>
+ </listitem>
+ <listitem>
+ <para>a valid primary group</para>
+ </listitem>
+ <listitem>
+ <para> a valid home directory</para>
+ </listitem>
+ <listitem>
+ <para>a valid login shell</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ <filename>shadow</filename> checks are enabled when a second file
+ parameter is specified or when <filename>/etc/shadow</filename>
+ exists on the system.
+ </para>
+ <para>
+ These checks are the following:
+ </para>
+ <itemizedlist mark='bullet'>
+ <listitem>
+ <para>
+ every passwd entry has a matching shadow entry, and every shadow
+ entry has a matching passwd entry
+ </para>
+ </listitem>
+ <listitem>
+ <para>passwords are specified in the shadowed file</para>
+ </listitem>
+ <listitem>
+ <para>shadow entries have the correct number of fields</para>
+ </listitem>
+ <listitem>
+ <para>shadow entries are unique in shadow</para>
+ </listitem>
+ <listitem>
+ <para>the last password changes are not in the future</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ The checks for correct number of fields and unique user name are
+ fatal. If the entry has the wrong number of fields, the user will be
+ prompted to delete the entire line. If the user does not answer
+ affirmatively, all further checks are bypassed. An entry with a
+ duplicated user name is prompted for deletion, but the remaining
+ checks will still be made. All other errors are warning and the user
+ is encouraged to run the <command>usermod</command> command to correct
+ the error.
+ </para>
+
+ <para>
+ The commands which operate on the <filename>/etc/passwd</filename>
+ file are not able to alter corrupted or duplicated entries.
+ <command>pwck</command> should be used in those circumstances to
+ remove the offending entry.
+ </para>
+ </refsect1>
+
+ <refsect1 id='options'>
+ <title>OPTIONS</title>
+ <para>
+ The <option>-r</option> and <option>-s</option> options cannot be
+ combined.
+ </para>
+ <para>
+ 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>
+ <para>Display help message and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-q</option>, <option>--quiet</option></term>
+ <listitem>
+ <para>
+ Report errors only. The warnings which do not require any
+ action from the user won't be displayed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-r</option>, <option>--read-only</option></term>
+ <listitem>
+ <para>
+ Execute the <command>pwck</command> command in read-only mode.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Apply changes in the <replaceable>CHROOT_DIR</replaceable>
+ directory and use the configuration files from the
+ <replaceable>CHROOT_DIR</replaceable> directory.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-s</option>, <option>--sort</option></term>
+ <listitem>
+ <para>
+ Sort entries in <filename>/etc/passwd</filename> and
+ <filename>/etc/shadow</filename> by UID.
+ </para>
+ <para condition="tcb">
+ This option has no effect when <option>USE_TCB</option> is enabled.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>
+ By default, <command>pwck</command> operates on the files
+ <filename>/etc/passwd</filename> and
+ <filename>/etc/shadow</filename><phrase condition="tcb"> (or the
+ files in <filename>/etc/tcb</filename>)</phrase>.
+ The user may select alternate files with the
+ <replaceable>passwd</replaceable> and
+ <replaceable>shadow</replaceable> parameters.
+ </para>
+ <para condition="tcb">
+ Note that when <option>USE_TCB</option> is enabled, you cannot
+ specify an alternative <replaceable>shadow</replaceable> file. In
+ future releases, this parameter could be replaced by an alternate
+ TCB directory.
+ </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>
+ &PASS_MAX_DAYS;
+ &PASS_MIN_DAYS;
+ &PASS_WARN_AGE;
+ &TCB_AUTH_GROUP;
+ &TCB_SYMLINKS;
+ &USE_TCB;
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/group</filename></term>
+ <listitem>
+ <para>Group account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/passwd</filename></term>
+ <listitem>
+ <para>User account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/shadow</filename></term>
+ <listitem>
+ <para>Secure user account information.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='exit_values'>
+ <title>EXIT VALUES</title>
+ <para>
+ The <command>pwck</command> command exits with the following values:
+ <variablelist>
+ <varlistentry>
+ <term><replaceable>0</replaceable></term>
+ <listitem>
+ <para>success</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>1</replaceable></term>
+ <listitem>
+ <para>invalid command syntax</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>2</replaceable></term>
+ <listitem>
+ <para>one or more bad password entries</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>3</replaceable></term>
+ <listitem>
+ <para>can't open password files</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>4</replaceable></term>
+ <listitem>
+ <para>can't lock password files</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>5</replaceable></term>
+ <listitem>
+ <para>can't update password files</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>6</replaceable></term>
+ <listitem>
+ <para>can't sort password files</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>group</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/pwconv.8.xml b/man/pwconv.8.xml
new file mode 100644
index 0000000..3e26498
--- /dev/null
+++ b/man/pwconv.8.xml
@@ -0,0 +1,281 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ Copyright (c) 2007 - 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!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">
+<!ENTITY PASS_MIN_DAYS SYSTEM "login.defs.d/PASS_MIN_DAYS.xml">
+<!ENTITY PASS_WARN_AGE SYSTEM "login.defs.d/PASS_WARN_AGE.xml">
+<!ENTITY USE_TCB SYSTEM "login.defs.d/USE_TCB.xml">
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='pwconv.8'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Marek</firstname>
+ <surname>Michałkiewicz</surname>
+ <contrib>Creation, 1996</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>pwconv</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>pwconv</refname>
+ <refname>pwunconv</refname>
+ <refname>grpconv</refname>
+ <refname>grpunconv</refname>
+ <refpurpose>convert to and from shadow passwords and groups</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>pwconv</command>
+ <arg choice='opt'>
+ <replaceable>options</replaceable>
+ </arg>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>pwunconv</command>
+ <arg choice='opt'>
+ <replaceable>options</replaceable>
+ </arg>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>grpconv</command>
+ <arg choice='opt'>
+ <replaceable>options</replaceable>
+ </arg>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>grpunconv</command>
+ <arg choice='opt'>
+ <replaceable>options</replaceable>
+ </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The <command>pwconv</command> command creates <emphasis
+ remap='I'>shadow</emphasis> from <emphasis remap='I'>passwd</emphasis>
+ and an optionally existing <emphasis remap='I'>shadow</emphasis>.
+ </para>
+ <para condition="tcb">
+ <command>pwconv</command> does not work with
+ <option>USE_TCB</option> enabled. To convert to tcb passwords, you
+ should first use <command>pwconv</command> to convert to shadowed
+ passwords by disabling <option>USE_TCB</option> in
+ <filename>login.defs</filename> and then convert to tcb password
+ using <command>tcb_convert</command> (and re-enable
+ <option>USE_TCB</option> in <filename>login.defs</filename>.)
+ </para>
+
+ <para>
+ The <command>pwunconv</command> command creates <emphasis
+ remap='I'>passwd</emphasis> from <emphasis remap='I'>passwd</emphasis>
+ and <emphasis remap='I'>shadow</emphasis> and then removes <emphasis
+ remap='I'>shadow</emphasis>.
+ </para>
+ <para condition="tcb">
+ <command>pwunconv</command> does not work with
+ <option>USE_TCB</option> enabled. You should first switch back from
+ tcb to shadowed passwords using <command>tcb_unconvert</command>,
+ and then disable <option>USE_TCB</option> in
+ <filename>login.defs</filename> before using
+ <command>pwunconv</command>.
+ </para>
+
+ <para>
+ The <command>grpconv</command> command creates <emphasis
+ remap='I'>gshadow</emphasis> from <emphasis remap='I'>group</emphasis>
+ and an optionally existing <emphasis remap='I'>gshadow</emphasis>.
+ </para>
+
+ <para>
+ The <command>grpunconv</command> command creates <emphasis
+ remap='I'>group</emphasis> from <emphasis remap='I'>group</emphasis>
+ and <emphasis remap='I'>gshadow</emphasis> and then removes <emphasis
+ remap='I'>gshadow</emphasis>.
+ </para>
+
+ <para>
+ These four programs all operate on the normal and shadow password and
+ group files: <filename>/etc/passwd</filename>,
+ <filename>/etc/group</filename>, <filename>/etc/shadow</filename>, and
+ <filename>/etc/gshadow</filename>.
+ </para>
+
+ <para>
+ Each program acquires the necessary locks before conversion.
+ <command>pwconv</command> and <command>grpconv</command> are similar.
+ First, entries in the shadowed file which don't exist in the main file
+ are removed. Then, shadowed entries which don't have `x' as the
+ password in the main file are updated. Any missing shadowed entries
+ are added. Finally, passwords in the main file are replaced with `x'.
+ These programs can be used for initial conversion as well to update
+ the shadowed file if the main file is edited by hand.
+ </para>
+
+ <para>
+ <command>pwconv</command> will use the values of <emphasis
+ remap='I'>PASS_MIN_DAYS</emphasis>, <emphasis
+ remap='I'>PASS_MAX_DAYS</emphasis>, and <emphasis
+ remap='I'>PASS_WARN_AGE</emphasis> from
+ <filename>/etc/login.defs</filename> when adding new entries to
+ <filename>/etc/shadow</filename>.
+ </para>
+
+ <para>
+ Likewise <command>pwunconv</command> and <command>grpunconv</command>
+ are similar. Passwords in the main file are updated from the shadowed
+ file. Entries which exist in the main file but not in the shadowed
+ file are left alone. Finally, the shadowed file is removed. Some
+ password aging information is lost by <command>pwunconv</command>. It
+ will convert what it can.
+ </para>
+ </refsect1>
+
+ <refsect1 id='options'>
+ <title>OPTIONS</title>
+ <para>
+ The options which apply to the <command>pwconv</command>,
+ <command>pwunconv</command>, <command>grpconv</command>, and
+ <command>grpunconv</command> commands are:
+ </para>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term><option>-h</option>, <option>--help</option></term>
+ <listitem>
+ <para>Display help message and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Apply changes in the <replaceable>CHROOT_DIR</replaceable>
+ directory and use the configuration files from the
+ <replaceable>CHROOT_DIR</replaceable> directory.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='bugs'>
+ <title>BUGS</title>
+ <para>
+ Errors in the password or group files (such as invalid or duplicate
+ entries) may cause these programs to loop forever or fail in other
+ strange ways. Please run <command>pwck</command> and
+ <command>grpck</command> to correct any such errors before converting
+ to or from shadow passwords or groups.
+ </para>
+ </refsect1>
+
+ <refsect1 id='configuration'>
+ <title>CONFIGURATION</title>
+ <para>
+ The following configuration variable in
+ <filename>/etc/login.defs</filename> changes the behavior of
+ <command>grpconv</command> and <command>grpunconv</command>:
+ </para>
+ <variablelist>
+ &MAX_MEMBERS_PER_GROUP;
+ </variablelist>
+ <para>
+ The following configuration variables in
+ <filename>/etc/login.defs</filename> change the behavior of
+ <command>pwconv</command>:
+ </para>
+ <variablelist>
+ &PASS_MAX_DAYS;
+ &PASS_MIN_DAYS;
+ &PASS_WARN_AGE;
+ &USE_TCB;
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/login.defs</filename></term>
+ <listitem>
+ <para>Shadow password suite configuration.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry><phrase condition="tcb">,
+ <citerefentry>
+ <refentrytitle>tcb_convert</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>tcb_unconvert</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry></phrase>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/ru/Makefile.am b/man/ru/Makefile.am
new file mode 100644
index 0000000..8a776a8
--- /dev/null
+++ b/man/ru/Makefile.am
@@ -0,0 +1,66 @@
+
+mandir = @mandir@/ru
+
+man_MANS = \
+ man1/chage.1 \
+ man1/chfn.1 \
+ man8/chgpasswd.8 \
+ man8/chpasswd.8 \
+ man1/chsh.1 \
+ man1/expiry.1 \
+ man5/faillog.5 \
+ man8/faillog.8 \
+ man3/getspnam.3 \
+ man1/gpasswd.1 \
+ man8/groupadd.8 \
+ man8/groupdel.8 \
+ man8/groupmems.8 \
+ man8/groupmod.8 \
+ man1/groups.1 \
+ man8/grpck.8 \
+ man8/grpconv.8 \
+ man8/grpunconv.8 \
+ man5/gshadow.5 \
+ man8/lastlog.8 \
+ man1/login.1 \
+ man5/login.defs.5 \
+ man8/logoutd.8 \
+ man1/newgrp.1 \
+ man8/newusers.8 \
+ man8/nologin.8 \
+ man1/passwd.1 \
+ man5/passwd.5 \
+ man8/pwck.8 \
+ man8/pwconv.8 \
+ man8/pwunconv.8 \
+ man1/sg.1 \
+ man3/shadow.3 \
+ man5/shadow.5 \
+ man1/su.1 \
+ man5/suauth.5 \
+ man8/useradd.8 \
+ man8/userdel.8 \
+ man8/usermod.8 \
+ man8/vigr.8 \
+ man8/vipw.8
+
+man_nopam = \
+ man5/limits.5 \
+ man5/login.access.5 \
+ man5/porttime.5
+
+if !USE_PAM
+man_MANS += $(man_nopam)
+endif
+
+EXTRA_DIST = \
+ $(man_MANS) \
+ man1/id.1 \
+ man8/sulogin.8
+
+if USE_PAM
+EXTRA_DIST += $(man_nopam)
+endif
+
+include ../generate_translations.mak
+
diff --git a/man/ru/Makefile.in b/man/ru/Makefile.in
new file mode 100644
index 0000000..e92688f
--- /dev/null
+++ b/man/ru/Makefile.in
@@ -0,0 +1,773 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@USE_PAM_FALSE@am__append_1 = $(man_nopam)
+@USE_PAM_TRUE@am__append_2 = $(man_nopam)
+subdir = man/ru
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" \
+ "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"
+man3dir = $(mandir)/man3
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/../generate_mans.mak \
+ $(srcdir)/../generate_translations.mak $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@/ru
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = man1/chage.1 man1/chfn.1 man8/chgpasswd.8 man8/chpasswd.8 \
+ man1/chsh.1 man1/expiry.1 man5/faillog.5 man8/faillog.8 \
+ man3/getspnam.3 man1/gpasswd.1 man8/groupadd.8 man8/groupdel.8 \
+ man8/groupmems.8 man8/groupmod.8 man1/groups.1 man8/grpck.8 \
+ man8/grpconv.8 man8/grpunconv.8 man5/gshadow.5 man8/lastlog.8 \
+ man1/login.1 man5/login.defs.5 man8/logoutd.8 man1/newgrp.1 \
+ man8/newusers.8 man8/nologin.8 man1/passwd.1 man5/passwd.5 \
+ man8/pwck.8 man8/pwconv.8 man8/pwunconv.8 man1/sg.1 \
+ man3/shadow.3 man5/shadow.5 man1/su.1 man5/suauth.5 \
+ man8/useradd.8 man8/userdel.8 man8/usermod.8 man8/vigr.8 \
+ man8/vipw.8 $(am__append_1)
+man_nopam = \
+ man5/limits.5 \
+ man5/login.access.5 \
+ man5/porttime.5
+
+EXTRA_DIST = $(man_MANS) man1/id.1 man8/sulogin.8 $(am__append_2)
+LANG = $(notdir $(CURDIR))
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_FALSE@PAM_COND = no_pam
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_TRUE@PAM_COND = pam
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_FALSE@SHADOWGRP_COND = no_gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_TRUE@SHADOWGRP_COND = gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@WITH_TCB_FALSE@TCB_COND = no_tcb
+@ENABLE_REGENERATE_MAN_TRUE@@WITH_TCB_TRUE@TCB_COND = tcb
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_FALSE@SHA_CRYPT_COND = no_sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_TRUE@SHA_CRYPT_COND = sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@@ENABLE_SUBIDS_FALSE@SUBIDS_COND = no_subids
+@ENABLE_REGENERATE_MAN_TRUE@@ENABLE_SUBIDS_TRUE@SUBIDS_COND = subids
+CLEANFILES = messages.mo login.defs.d $(EXTRA_DIST) $(addsuffix .xml,$(EXTRA_DIST)) config.xml
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../generate_translations.mak $(srcdir)/../generate_mans.mak $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/ru/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign man/ru/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(srcdir)/../generate_translations.mak $(srcdir)/../generate_mans.mak $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+install-man3: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man3dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.3[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man3:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man3dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.3[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir)
+install-man5: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man5dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.5[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man5:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man5dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.5[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir)
+install-man8: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man8dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.8[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man8:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man8dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.8[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+@ENABLE_REGENERATE_MAN_FALSE@clean-local:
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1 install-man3 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man3 uninstall-man5 \
+ uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ clean-local cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-man3 install-man5 install-man8 \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags-am uninstall uninstall-am uninstall-man uninstall-man1 \
+ uninstall-man3 uninstall-man5 uninstall-man8
+
+.PRECIOUS: Makefile
+
+
+@ENABLE_REGENERATE_MAN_TRUE@config.xml: ../config.xml.in
+@ENABLE_REGENERATE_MAN_TRUE@ $(MAKE) -C .. config.xml
+@ENABLE_REGENERATE_MAN_TRUE@ cp ../config.xml $@
+
+@ENABLE_REGENERATE_MAN_TRUE@messages.mo: ../po/$(LANG).po
+@ENABLE_REGENERATE_MAN_TRUE@ msgfmt ../po/$(LANG).po -o messages.mo
+
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.d:
+@ENABLE_REGENERATE_MAN_TRUE@ ln -sf ../login.defs.d login.defs.d
+
+@ENABLE_REGENERATE_MAN_TRUE@%.xml: ../%.xml messages.mo login.defs.d
+@ENABLE_REGENERATE_MAN_TRUE@ if grep -q SHADOW-CONFIG-HERE $< ; then \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^<!-- SHADOW-CONFIG-HERE -->/<!ENTITY % config SYSTEM "config.xml">%config;/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ else \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^\(<!DOCTYPE .*docbookx.dtd"\)>/\1 [<!ENTITY % config SYSTEM "config.xml">%config;]>/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ fi
+@ENABLE_REGENERATE_MAN_TRUE@ itstool -d -l $(LANG) -m messages.mo -o . $@
+@ENABLE_REGENERATE_MAN_TRUE@ sed -i 's:\(^<refentry .*\)>:\1 lang="$(LANG)">:' $@
+
+@ENABLE_REGENERATE_MAN_TRUE@%.xml-config: %.xml
+@ENABLE_REGENERATE_MAN_TRUE@ if grep -q SHADOW-CONFIG-HERE $<; then \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^<!-- SHADOW-CONFIG-HERE -->/<!ENTITY % config SYSTEM "config.xml">%config;/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ else \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^\(<!DOCTYPE .*docbookx.dtd"\)>/\1 [<!ENTITY % config SYSTEM "config.xml">%config;]>/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ fi
+
+@ENABLE_REGENERATE_MAN_TRUE@man1/% man3/% man5/% man8/%: %.xml-config Makefile config.xml
+@ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam profile.condition "$(PAM_COND);$(SHADOWGRP_COND);$(TCB_COND);$(SHA_CRYPT_COND);$(SUBIDS_COND)" \
+@ENABLE_REGENERATE_MAN_TRUE@ --param "man.authors.section.enabled" "0" \
+@ENABLE_REGENERATE_MAN_TRUE@ --stringparam "man.output.base.dir" "" \
+@ENABLE_REGENERATE_MAN_TRUE@ --param "man.output.in.separate.dir" "1" \
+@ENABLE_REGENERATE_MAN_TRUE@ -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/profile-docbook.xsl $<
+
+@ENABLE_REGENERATE_MAN_TRUE@clean-local:
+@ENABLE_REGENERATE_MAN_TRUE@ rm -rf man1 man3 man5 man8
+
+#$(man_MANS):
+# @echo you need to run configure with --enable-man to generate man pages
+
+@ENABLE_REGENERATE_MAN_TRUE@man8/grpconv.8 man8/grpunconv.8 man8/pwunconv.8: man8/pwconv.8
+
+@ENABLE_REGENERATE_MAN_TRUE@man3/getspnam.3: man3/shadow.3
+
+@ENABLE_REGENERATE_MAN_TRUE@man8/vigr.8: man8/vipw.8
+
+@ENABLE_REGENERATE_MAN_FALSE@$(man_MANS):
+@ENABLE_REGENERATE_MAN_FALSE@ @echo you need to run configure with --enable-man to generate man pages
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/ru/man1/chage.1 b/man/ru/man1/chage.1
new file mode 100644
index 0000000..9f197f0
--- /dev/null
+++ b/man/ru/man1/chage.1
@@ -0,0 +1,189 @@
+'\" t
+.\" Title: chage
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Пользовательские команды
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "chage" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Пользовательские команды"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+chage \- изменяет информацию об устаревании пароля пользователя
+.SH "СИНТАКСИС"
+.HP \w'\fBchage\fR\ 'u
+\fBchage\fR [\fIпараметры\fR] \fIУЧЁТНАЯ_ЗАПИСЬ\fR
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBchage\fR
+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\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+The options which apply to the
+\fBchage\fR
+command are:
+.PP
+\fB\-d\fR, \fB\-\-lastday\fR\ \&\fILAST_DAY\fR
+.RS 4
+Установить число дней прошедших с 1 января 1970 года, когда была последняя смена пароля\&. Дата может быть также указана в виде ГГГГ\-ММ\-ДД (или в форме согласно региональным настройкам)\&.
+.RE
+.PP
+\fB\-E\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+Установить дату устаревания учётной записи пользователя, которая задаётся числом дней прошедших с 1 января 1970 года\&. Дата может быть также задана в виде ГГГГ\-ММ\-ДД (или в форме согласно региональным настройкам)\&. Пользователь, чья учётная запись была заблокирована, должен обратиться к системному администратору, если хочет в дальнейшем работать с системой\&.
+.sp
+Passing the number
+\fI\-1\fR
+as the
+\fIEXPIRE_DATE\fR
+will remove an account expiration date\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-i\fR, \fB\-\-iso8601\fR
+.RS 4
+When printing dates, use YYYY\-MM\-DD format\&.
+.RE
+.PP
+\fB\-I\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+Set the number of days of inactivity after a password has expired before the account is locked\&. The
+\fIINACTIVE\fR
+option is the number of days of inactivity\&. A user whose account is locked must contact the system administrator before being able to use the system again\&.
+.sp
+Passing the number
+\fI\-1\fR
+as the
+\fIINACTIVE\fR
+will remove an account\*(Aqs inactivity\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-list\fR
+.RS 4
+Показать информацию об устаревании учётной записи\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-mindays\fR\ \&\fIMIN_DAYS\fR
+.RS 4
+Set the minimum number of days between password changes to
+\fIMIN_DAYS\fR\&. A value of zero for this field indicates that the user may change their password at any time\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-maxdays\fR\ \&\fIMAX_DAYS\fR
+.RS 4
+Set the maximum number of days during which a password is valid\&. When
+\fIMAX_DAYS\fR
+plus
+\fILAST_DAY\fR
+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
+\fB\-W\fR
+option, which provides the user with advance warning\&.
+.sp
+Passing the number
+\fI\-1\fR
+as
+\fIMAX_DAYS\fR
+will remove checking a password\*(Aqs validity\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-W\fR, \fB\-\-warndays\fR\ \&\fIWARN_DAYS\fR
+.RS 4
+Set the number of days of warning before a password change is required\&. The
+\fIWARN_DAYS\fR
+option is the number of days prior to the password expiring that a user will be warned their password is about to expire\&.
+.RE
+.PP
+If none of the options are selected,
+\fBchage\fR
+operates in an interactive fashion, prompting the user with the current values for all of the fields\&. Enter the new value to change the field, or leave the line blank to use the current value\&. The current value is displayed between a pair of
+\fI[ ]\fR
+marks\&.
+.SH "ЗАМЕЧАНИЕ"
+.PP
+The
+\fBchage\fR
+program requires a shadow password file to be available\&.
+.PP
+The
+\fBchage\fR
+command is restricted to the root user, except for the
+\fB\-l\fR
+option, which may be used by an unprivileged user to determine when their password or account is due to expire\&.
+.SH "НАСТРОЙКА"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.SH "ФАЙЛЫ"
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.SH "ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ"
+.PP
+The
+\fBchage\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+permission denied
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI15\fR
+.RS 4
+can\*(Aqt find the shadow password file
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/ru/man1/chfn.1 b/man/ru/man1/chfn.1
new file mode 100644
index 0000000..2b9e5c3
--- /dev/null
+++ b/man/ru/man1/chfn.1
@@ -0,0 +1,163 @@
+'\" t
+.\" Title: chfn
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Пользовательские команды
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "chfn" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Пользовательские команды"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+chfn \- изменяет информацию о пользователе
+.SH "СИНТАКСИС"
+.HP \w'\fBchfn\fR\ 'u
+\fBchfn\fR [\fIпараметры\fR] [\fIУЧЁТНАЯ_ЗАПИСЬ\fR]
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBchfn\fR
+command changes user fullname, office room number, office phone number, and home phone number information for a user\*(Aqs account\&. This information is typically printed by
+\fBfinger\fR(1)
+and similar programs\&. A normal user may only change the fields for her own account, subject to the restrictions in
+/etc/login\&.defs\&. (The default configuration is to prevent users from changing their fullname\&.) The superuser may change any field for any account\&. Additionally, only the superuser may use the
+\fB\-o\fR
+option to change the undefined portions of the GECOS field\&.
+.PP
+These fields must not contain any colons\&. Except for the
+\fIother\fR
+field, they should not contain any comma or equal sign\&. It is also recommended to avoid non\-US\-ASCII characters, but this is only enforced for the phone numbers\&. The
+\fIother\fR
+field is used to store accounting information used by other applications\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+The options which apply to the
+\fBchfn\fR
+command are:
+.PP
+\fB\-f\fR, \fB\-\-full\-name\fR\ \&\fIFULL_NAME\fR
+.RS 4
+Изменяет ФИО пользователя\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-home\-phone\fR\ \&\fIHOME_PHONE\fR
+.RS 4
+Изменяет номер домашнего телефона пользователя\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-other\fR\ \&\fIOTHER\fR
+.RS 4
+Изменяет другую информацию GECOS о пользователе\&. Эта часть используется для хранения информации об учётной записи, используемой другими приложениями, и может изменяться только суперпользователем\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-room\fR\ \&\fIROOM_NUMBER\fR
+.RS 4
+Изменяет номер комнаты пользователя\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-work\-phone\fR\ \&\fIWORK_PHONE\fR
+.RS 4
+Изменяет номер рабочего телефона пользователя\&.
+.RE
+.PP
+If none of the options are selected,
+\fBchfn\fR
+operates in an interactive fashion, prompting the user with the current values for all of the fields\&. Enter the new value to change the field, or leave the line blank to use the current value\&. The current value is displayed between a pair of
+\fB[ ]\fR
+marks\&. Without options,
+\fBchfn\fR
+prompts for the current user account\&.
+.SH "НАСТРОЙКА"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHFN_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchfn\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCHFN_RESTRICT\fR (string)
+.RS 4
+This parameter specifies which values in the
+\fIgecos\fR
+field of the
+/etc/passwd
+file may be changed by regular users using the
+\fBchfn\fR
+program\&. It can be any combination of letters
+\fIf\fR,
+\fIr\fR,
+\fIw\fR,
+\fIh\fR, for Full name, Room number, Work phone, and Home phone, respectively\&. For backward compatibility,
+\fIyes\fR
+is equivalent to
+\fIrwh\fR
+and
+\fIno\fR
+is equivalent to
+\fIfrwh\fR\&. If not specified, only the superuser can make any changes\&. The most restrictive setting is better achieved by not installing
+\fBchfn\fR
+SUID\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+Строка\-приглашение к вводу пароля\&. Значение по умолчанию: \(FoPassword:\(Fc или перевод этой строки на разные языки\&. Если вы измените эту переменную, то перевод будет отсутствовать\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBchsh\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/ru/man1/chsh.1 b/man/ru/man1/chsh.1
new file mode 100644
index 0000000..e4392fc
--- /dev/null
+++ b/man/ru/man1/chsh.1
@@ -0,0 +1,121 @@
+'\" t
+.\" Title: chsh
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Пользовательские команды
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "chsh" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Пользовательские команды"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+chsh \- изменяет регистрационную оболочку пользователя
+.SH "СИНТАКСИС"
+.HP \w'\fBchsh\fR\ 'u
+\fBchsh\fR [\fIпараметры\fR] [\fIУЧЁТНАЯ_ЗАПИСЬ\fR]
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBchsh\fR
+command changes the user login shell\&. This determines the name of the user\*(Aqs initial login command\&. A normal user may only change the login shell for her own account; the superuser may change the login shell for any account\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+The options which apply to the
+\fBchsh\fR
+command are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+Имя новой регистрационной оболочки пользователя\&. Если задать пустое значение, то будет использована регистрационная оболочка по умолчанию\&.
+.RE
+.PP
+If the
+\fB\-s\fR
+option is not selected,
+\fBchsh\fR
+operates in an interactive fashion, prompting the user with the current login shell\&. Enter the new value to change the shell, or leave the line blank to use the current one\&. The current shell is displayed between a pair of
+\fI[ ]\fR
+marks\&.
+.SH "ЗАМЕЧАНИЕ"
+.PP
+The only restriction placed on the login shell is that the command name must be listed in
+/etc/shells, unless the invoker is the superuser, and then any value may be added\&. An account with a restricted login shell may not change her login shell\&. For this reason, placing
+/bin/rsh
+in
+/etc/shells
+is discouraged since accidentally changing to a restricted shell would prevent the user from ever changing her login shell back to its original value\&.
+.SH "НАСТРОЙКА"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHSH_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchsh\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+Строка\-приглашение к вводу пароля\&. Значение по умолчанию: \(FoPassword:\(Fc или перевод этой строки на разные языки\&. Если вы измените эту переменную, то перевод будет отсутствовать\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shells
+.RS 4
+содержит список разрешённых регистрационных оболочек
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBchfn\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/ru/man1/expiry.1 b/man/ru/man1/expiry.1
new file mode 100644
index 0000000..a977416
--- /dev/null
+++ b/man/ru/man1/expiry.1
@@ -0,0 +1,74 @@
+'\" t
+.\" Title: expiry
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Пользовательские команды
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "expiry" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Пользовательские команды"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+expiry \- проверяет и изменяет пароль согласно политике устаревания
+.SH "СИНТАКСИС"
+.HP \w'\fBexpiry\fR\ 'u
+\fBexpiry\fR \fIпараметр\fR
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBexpiry\fR
+command checks (\fB\-c\fR) the current password expiration and forces (\fB\-f\fR) changes when required\&. It is callable as a normal user command\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+The options which apply to the
+\fBexpiry\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-check\fR
+.RS 4
+Проверяет и изменяет срок действия пароля у текущего пользователя\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+Принудительно меняет пароль, если его срок действия истёк\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/ru/man1/gpasswd.1 b/man/ru/man1/gpasswd.1
new file mode 100644
index 0000000..ea1862e
--- /dev/null
+++ b/man/ru/man1/gpasswd.1
@@ -0,0 +1,232 @@
+'\" t
+.\" Title: gpasswd
+.\" Author: Rafal Maszkowski
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Пользовательские команды
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "gpasswd" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Пользовательские команды"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+gpasswd \- administer /etc/group and /etc/gshadow
+.SH "СИНТАКСИС"
+.HP \w'\fBgpasswd\fR\ 'u
+\fBgpasswd\fR [\fIпараметр\fR] \fIгруппа\fR
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBgpasswd\fR
+command is used to administer
+/etc/group, and /etc/gshadow\&. Every group can have
+administrators,
+members and a password\&.
+.PP
+System administrators can use the
+\fB\-A\fR
+option to define group administrator(s) and the
+\fB\-M\fR
+option to define members\&. They have all rights of group administrators and members\&.
+.PP
+\fBgpasswd\fR
+called by
+a group administrator
+with a group name only prompts for the new password of the
+\fIgroup\fR\&.
+.PP
+If a password is set the members can still use
+\fBnewgrp\fR(1)
+without a password, and non\-members must supply the password\&.
+.SS "Замечания о паролях групп"
+.PP
+Пароли групп имеют врождённую проблему с безопасностью, так как пароль знает более одного человека\&. Однако, группы являются полезным инструментом совместной работы различных пользователей\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+Except for the
+\fB\-A\fR
+and
+\fB\-M\fR
+options, the options cannot be combined\&.
+.PP
+The options which apply to the
+\fBgpasswd\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-add\fR\ \&\fIuser\fR
+.RS 4
+Add the
+\fIuser\fR
+to the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR\ \&\fIuser\fR
+.RS 4
+Remove the
+\fIuser\fR
+from the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-Q\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-remove\-password\fR
+.RS 4
+Remove the password from the named
+\fIgroup\fR\&. The group password will be empty\&. Only group members will be allowed to use
+\fBnewgrp\fR
+to join the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-restrict\fR
+.RS 4
+Restrict the access to the named
+\fIgroup\fR\&. The group password is set to "!"\&. Only group members with a password will be allowed to use
+\fBnewgrp\fR
+to join the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-A\fR, \fB\-\-administrators\fR\ \&\fIuser\fR,\&.\&.\&.
+.RS 4
+Задать список администраторов группы\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-members\fR\ \&\fIuser\fR,\&.\&.\&.
+.RS 4
+Задать список членов группы\&.
+.RE
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+This tool only operates on the
+/etc/group
+and /etc/gshadow files\&.
+Thus you cannot change any NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.SH "НАСТРОЙКА"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+Задаёт системный алгоритм шифрования по умолчанию для шифрования паролей (используется, если алгоритм не указан в командной строке)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Значение по умолчанию равно 0, означающее, что ограничения на количество членов в группе нет\&.
+.sp
+Данная возможность (разделение группы) позволяет ограничить длину строк в файле групп\&. Это полезно для ограничения длины строк групп NIS в 1024 символа\&.
+.sp
+Если вам нужно такое ограничение, укажите значение 25\&.
+.sp
+Замечание: разделение групп поддерживается не всеми инструментами (даже в наборе инструментов Shadow)\&. Вы не должны использовать эту переменную, если вам действительно это ненужно\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+Увеличение количества раундов повышает сложность подбора пароля простым перебором\&. Но заметим, что при этом для аутентификации пользователей требуется большее количество процессорных ресурсов\&.
+.sp
+Если не задана, то libc выбирает значение количества раундов по умолчанию (5000)\&.
+.sp
+Значения должны лежать в диапазоне 1000\-999999999\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBnewgrp\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBgrpck\fR(8),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/ru/man1/groups.1 b/man/ru/man1/groups.1
new file mode 100644
index 0000000..1258a50
--- /dev/null
+++ b/man/ru/man1/groups.1
@@ -0,0 +1,64 @@
+'\" t
+.\" Title: groups
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Пользовательские команды
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "groups" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Пользовательские команды"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+groups \- показывает имена групп запустившего программу пользователя
+.SH "СИНТАКСИС"
+.HP \w'\fBgroups\fR\ 'u
+\fBgroups\fR [\fIимя\fR]
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBgroups\fR
+command displays the current group names or ID values\&. If the value does not have a corresponding entry in
+/etc/group, the value will be displayed as the numerical group value\&. The optional
+\fIuser\fR
+parameter will display the groups for the named
+\fIuser\fR\&.
+.SH "ЗАМЕЧАНИЕ"
+.PP
+Systems which do not support concurrent group sets will have the information from
+/etc/group
+reported\&. The user must use
+\fBnewgrp\fR
+or
+\fBsg\fR
+to change his current real and effective group ID\&.
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBnewgrp\fR(1),
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)\&.
diff --git a/man/ru/man1/id.1 b/man/ru/man1/id.1
new file mode 100644
index 0000000..fbcb6ed
--- /dev/null
+++ b/man/ru/man1/id.1
@@ -0,0 +1,60 @@
+'\" t
+.\" Title: id
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Пользовательские команды
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "id" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Пользовательские команды"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+id \- display current user and group ID names
+.SH "СИНТАКСИС"
+.HP \w'\fBid\fR\ 'u
+\fBid\fR [\-a]
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBid\fR
+command displays the current real and effective user and group ID names or values\&. If the value does not have a corresponding entry in
+/etc/passwd
+or
+/etc/group, the value will be displayed without the corresponding name\&. The optional
+\fB\-a\fR
+flag will display the group set on systems which support multiple concurrent group membership\&.
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)
diff --git a/man/ru/man1/login.1 b/man/ru/man1/login.1
new file mode 100644
index 0000000..5da064a
--- /dev/null
+++ b/man/ru/man1/login.1
@@ -0,0 +1,487 @@
+'\" t
+.\" Title: login
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Пользовательские команды
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "login" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Пользовательские команды"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+login \- начинает сеанс в системе
+.SH "СИНТАКСИС"
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] [\-h\ \fIhost\fR] [\fIимя_пользователя\fR] [\fIПЕРЕМЕННАЯ_ОКРУЖЕНИЯ=ЗНАЧЕНИЕ\fR...]
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] [\-h\ \fIhost\fR] \-f \fIимя_пользователя\fR
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] \-r\ \fIhost\fR
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBlogin\fR
+program is used to establish a new session with the system\&. It is normally invoked automatically by responding to the
+\fIlogin:\fR
+prompt on the user\*(Aqs terminal\&.
+\fBlogin\fR
+may be special to the shell and may not be invoked as a sub\-process\&. When called from a shell,
+\fBlogin\fR
+should be executed as
+\fBexec login\fR
+which will cause the user to exit from the current shell (and thus will prevent the new logged in user to return to the session of the caller)\&. Attempting to execute
+\fBlogin\fR
+from any shell but the login shell will produce an error message\&.
+.PP
+The user is then prompted for a password, where appropriate\&. Echoing is disabled to prevent revealing the password\&. Only a small number of password failures are permitted before
+\fBlogin\fR
+exits and the communications link is severed\&.
+.PP
+If password aging has been enabled for your account, you may be prompted for a new password before proceeding\&. You will be forced to provide your old password and the new password before continuing\&. Please refer to
+\fBpasswd\fR(1)
+for more information\&.
+.PP
+After a successful login, you will be informed of any system messages and the presence of mail\&. You may turn off the printing of the system message file,
+/etc/motd, by creating a zero\-length file
+\&.hushlogin
+in your login directory\&. The mail message will be one of "\fIYou have new mail\&.\fR", "\fIYou have mail\&.\fR", or "\fINo Mail\&.\fR" according to the condition of your mailbox\&.
+.PP
+Your user and group ID will be set according to their values in the
+/etc/passwd
+file\&. The value for
+\fB$HOME\fR,
+\fB$SHELL\fR,
+\fB$PATH\fR,
+\fB$LOGNAME\fR, and
+\fB$MAIL\fR
+are set according to the appropriate fields in the password entry\&. Ulimit, umask and nice values may also be set according to entries in the GECOS field\&.
+.PP
+On some installations, the environmental variable
+\fB$TERM\fR
+will be initialized to the terminal type on your tty line, as specified in
+/etc/ttytype\&.
+.PP
+Также может быть выполнен сценарий инициализации пользовательского интерпретатора команд\&. Подробней об этой функции смотрите соответствующую справочную страницу\&.
+.PP
+Субсистемный вход в систему можно распознать по наличию символа \(Fo*\(Fc в начале регистрационной оболочки\&. Заданный домашний каталог будет использован как корень новой файловой системы, в которой регистрируется пользователь\&.
+.PP
+The
+\fBlogin\fR
+program is NOT responsible for removing users from the utmp file\&. It is the responsibility of
+\fBgetty\fR(8)
+and
+\fBinit\fR(8)
+to clean up apparent ownership of a terminal session\&. If you use
+\fBlogin\fR
+from the shell prompt without
+\fBexec\fR, the user you use will continue to appear to be logged in even after you log out of the "subsession"\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+\fB\-f\fR
+.RS 4
+Не выполнять аутентификацию, пользователь уже прошёл проверку\&.
+.sp
+Note: In that case,
+\fIusername\fR
+is mandatory\&.
+.RE
+.PP
+\fB\-h\fR
+.RS 4
+Имя удалённого узла, на который нужно войти\&.
+.RE
+.PP
+\fB\-p\fR
+.RS 4
+Сохранить окружение\&.
+.RE
+.PP
+\fB\-r\fR
+.RS 4
+Выполнить протокол autologin для rlogin\&.
+.RE
+.PP
+The
+\fB\-r\fR,
+\fB\-h\fR
+and
+\fB\-f\fR
+options are only used when
+\fBlogin\fR
+is invoked by root\&.
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+This version of
+\fBlogin\fR
+has many compilation options, only some of which may be in use at any particular site\&.
+.PP
+Расположение файлов может отличаться на разных системах\&.
+.PP
+The
+\fBlogin\fR
+program is NOT responsible for removing users from the utmp file\&. It is the responsibility of
+\fBgetty\fR(8)
+and
+\fBinit\fR(8)
+to clean up apparent ownership of a terminal session\&. If you use
+\fBlogin\fR
+from the shell prompt without
+\fBexec\fR, the user you use will continue to appear to be logged in even after you log out of the "subsession"\&.
+.PP
+As with any program,
+\fBlogin\fR\*(Aqs appearance can be faked\&. If non\-trusted users have physical access to a machine, an attacker could use this to obtain the password of the next person coming to sit in front of the machine\&. Under Linux, the SAK mechanism can be used by users to initiate a trusted path and prevent this kind of attack\&.
+.SH "НАСТРОЙКА"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+Если определена, то значение равно или полному пути к файлу с именами устройств (одно на строку), или списку имён устройств, перечисленных через \(Fo:\(Fc\&. Вход суперпользователя будет разрешён только с этих устройств\&.
+.sp
+Если не определена, то суперпользователь может входить в систему с любого устройства\&.
+.sp
+Устройства должны указываться без начального префикса /dev/\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\*(Aqs supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Определяет, можно ли войти в систему, если нельзя выполнить cd в домашний каталог\&. По умолчанию \(Fono\(Fc\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value is a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value is a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/sbin:/bin:/usr/sbin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+Если этот файл существует и доступ для чтения, то из него читает регистрационное окружение\&. Каждая строка должна иметь формат: имя=значение\&.
+.sp
+Строки, начинающиеся с #, считаются комментарием и игнорируются\&.
+.RE
+.PP
+\fBERASECHAR\fR (number)
+.RS 4
+Terminal ERASE character (\fI010\fR
+= backspace,
+\fI0177\fR
+= DEL)\&.
+.sp
+Значение может начинаться с \(Fo0\(Fc при указании значения в восьмеричной системе счисления или \(Fo0x\(Fc при указании значения в шестнадцатеричной системе счисления\&.
+.RE
+.PP
+\fBFAIL_DELAY\fR (number)
+.RS 4
+Задержка в секундах перед повторной попыткой после неудачного входа\&.
+.RE
+.PP
+\fBFAILLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of
+/var/log/faillog
+login failure info\&.
+.RE
+.PP
+\fBFAKE_SHELL\fR (string)
+.RS 4
+If set,
+\fBlogin\fR
+will execute this shell instead of the users\*(Aq shell specified in
+/etc/passwd\&.
+.RE
+.PP
+\fBFTMP_FILE\fR (string)
+.RS 4
+Если определена, то неудачные попытки входа будут протоколироваться в этот файл в формате utmp\&.
+.RE
+.PP
+\fBHUSHLOGIN_FILE\fR (string)
+.RS 4
+Если определена, то этот файл может заблокировать все обычные переговоры (chatter) при входе\&. Если указан полный путь к файлу, то будет включён сокращённый (hushed) режим, если в этом файле указано имя пользователя или оболочка\&. Если указан не полный путь, то будет включён сокращённый (hushed) режим, если файл находится в домашнем каталоге пользователя\&.
+.RE
+.PP
+\fBISSUE_FILE\fR (string)
+.RS 4
+Если определена, то этот файл будет показан перед каждым появлением приглашения на вход\&.
+.RE
+.PP
+\fBKILLCHAR\fR (number)
+.RS 4
+Terminal KILL character (\fI025\fR
+= CTRL/U)\&.
+.sp
+Значение может начинаться с \(Fo0\(Fc при указании значения в восьмеричной системе счисления или \(Fo0x\(Fc при указании значения в шестнадцатеричной системе счисления\&.
+.RE
+.PP
+\fBLASTLOG_ENAB\fR (boolean)
+.RS 4
+Включить протоколирование и показ информации о времени входа из /var/log/lastlog\&.
+.RE
+.PP
+\fBLOGIN_RETRIES\fR (number)
+.RS 4
+Максимальное количество попыток входа при вводе неверного пароля\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+Строка\-приглашение к вводу пароля\&. Значение по умолчанию: \(FoPassword:\(Fc или перевод этой строки на разные языки\&. Если вы измените эту переменную, то перевод будет отсутствовать\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.PP
+\fBLOGIN_TIMEOUT\fR (number)
+.RS 4
+Максимальное время в секундах, отведённое на вход\&.
+.RE
+.PP
+\fBLOG_OK_LOGINS\fR (boolean)
+.RS 4
+Включить протоколирование успешных входов\&.
+.RE
+.PP
+\fBLOG_UNKFAIL_ENAB\fR (boolean)
+.RS 4
+Включить показ неизвестных имён пользователей при записи неудачных попыток входа\&.
+.sp
+Замечание: протоколирование неизвестных имён пользователя может привести к проблемам с безопасностью, если пользователь введёт свой пароль вместо своего имени\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+Включает проверку и показ состояния почтового ящика при входе\&.
+.sp
+Вы должны выключить это, если почтовый ящик проверяется из файлов автозапуска оболочки (\(Fomailx \-e\(Fc или похожей командой)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+Почтовый каталог\&. Данный параметр нужен для управления почтовым ящиком при изменении или удалении учётной записи пользователя\&. Если параметр не задан, то используется значение указанное при сборке\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Определяет расположение почтовых файлов пользователя относительно домашнего каталога\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMOTD_FILE\fR (string)
+.RS 4
+Если определена, то при входе будет показано \(Foсообщение дня\(Fc из файла со списком значений, разделённых \(Fo:\(Fc\&.
+.RE
+.PP
+\fBNOLOGINS_FILE\fR (string)
+.RS 4
+Если определена, значение равно имени файла, чьё существование запретит вход для не суперпользователей\&. В файле должно содержаться сообщение, описывающее почему запрещён вход\&.
+.RE
+.PP
+\fBPORTTIME_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable checking of time restrictions specified in
+/etc/porttime\&.
+.RE
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of resource limits from
+/etc/limits
+and ulimit, umask, and niceness from the user\*(Aqs passwd gecos field\&.
+.RE
+.PP
+\fBTTYGROUP\fR (string), \fBTTYPERM\fR (string)
+.RS 4
+The terminal permissions: the login tty will be owned by the
+\fBTTYGROUP\fR
+group, and the permissions will be set to
+\fBTTYPERM\fR\&.
+.sp
+By default, the ownership of the terminal is set to the user\*(Aqs primary group and the permissions are set to
+\fI0600\fR\&.
+.sp
+\fBTTYGROUP\fR
+can be either the name of a group or a numeric group identifier\&.
+.sp
+If you have a
+\fBwrite\fR
+program which is "setgid" to a special group which owns the terminals, define TTYGROUP to the group number and TTYPERM to 0620\&. Otherwise leave TTYGROUP commented out and assign TTYPERM to either 622 or 600\&.
+.RE
+.PP
+\fBTTYTYPE_FILE\fR (string)
+.RS 4
+Если определена, то в ней указывается имя файла, в котором описано соответствие между линией tty и параметром окружения TERM\&. Каждая строка файла имеет формат вида \(Fovt100 tty01\(Fc\&.
+.RE
+.PP
+\fBULIMIT\fR (number)
+.RS 4
+Default
+\fBulimit\fR
+value\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+Задаёт начальное значение маски доступа для создаваемых файлов\&. Если не указано, то маска устанавливается в 022\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create if
+\fBHOME_MODE\fR
+is not set\&.
+.sp
+It is also used by
+\fBlogin\fR
+to define users\*(Aq initial umask\&. Note that this mask can be overridden by the user\*(Aqs GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Включает установку группы битов umask равной битам владельца (пример: 022 \-> 002, 077 \-> 007) для не суперпользователей, если uid равен gid и имя пользователя совпадает с именем первичной группы\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/var/run/utmp
+.RS 4
+содержит список работающих сеансов в системе
+.RE
+.PP
+/var/log/wtmp
+.RS 4
+содержит список завершённых сеансов работы с системой
+.RE
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.PP
+/etc/motd
+.RS 4
+содержит системные сообщения за день
+.RE
+.PP
+/etc/nologin
+.RS 4
+при существовании файла блокируется доступ в систему обычным пользователям
+.RE
+.PP
+/etc/ttytype
+.RS 4
+содержит список типов терминалов
+.RE
+.PP
+$HOME/\&.hushlogin
+.RS 4
+при существовании файла системные сообщения при входе в систему не выводятся
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBmail\fR(1),
+\fBpasswd\fR(1),
+\fBsh\fR(1),
+\fBsu\fR(1),
+\fBlogin.defs\fR(5),
+\fBnologin\fR(5),
+\fBpasswd\fR(5),
+\fBsecuretty\fR(5),
+\fBgetty\fR(8)\&.
diff --git a/man/ru/man1/newgrp.1 b/man/ru/man1/newgrp.1
new file mode 100644
index 0000000..e006ab3
--- /dev/null
+++ b/man/ru/man1/newgrp.1
@@ -0,0 +1,98 @@
+'\" t
+.\" Title: newgrp
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Пользовательские команды
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "newgrp" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Пользовательские команды"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+newgrp \- выполняет регистрацию пользователя в новой группе
+.SH "СИНТАКСИС"
+.HP \w'\fBnewgrp\fR\ 'u
+\fBnewgrp\fR [\-] [\fIгруппа\fR]
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBnewgrp\fR
+command is used to change the current group ID during a login session\&. If the optional
+\fB\-\fR
+flag is given, the user\*(Aqs environment will be reinitialized as though the user had logged in, otherwise the current environment, including current working directory, remains unchanged\&.
+.PP
+\fBnewgrp\fR
+changes the current real group ID to the named group, or to the default group listed in
+/etc/passwd
+if no group name is given\&.
+\fBnewgrp\fR
+also tries to add the group to the user groupset\&. If not root, the user will be prompted for a password if she does not have a password (in
+/etc/shadow
+if this user has an entry in the shadowed password file, or in
+/etc/passwd
+otherwise) and the group does, or if the user is not listed as a member and the group has a password\&. The user will be denied access if the group password is empty and the user is not listed as a member\&.
+.PP
+If there is an entry for this group in
+/etc/gshadow, then the list of members and the password of this group will be taken from this file, otherwise, the entry in
+/etc/group
+is considered\&.
+.SH "НАСТРОЙКА"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBsu\fR(1),
+\fBsg\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/ru/man1/passwd.1 b/man/ru/man1/passwd.1
new file mode 100644
index 0000000..749cd61
--- /dev/null
+++ b/man/ru/man1/passwd.1
@@ -0,0 +1,365 @@
+'\" t
+.\" Title: passwd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Пользовательские команды
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "passwd" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Пользовательские команды"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+passwd \- изменяет пароль пользователя
+.SH "СИНТАКСИС"
+.HP \w'\fBpasswd\fR\ 'u
+\fBpasswd\fR [\fIпараметры\fR] [\fIУЧЁТНАЯ_ЗАПИСЬ\fR]
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBpasswd\fR
+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\&.
+\fBpasswd\fR
+also changes the account or associated password validity period\&.
+.SS "Изменение пароля"
+.PP
+Сначала пользователя попросят ввести старый пароль, если он был\&. Этот пароль зашифровывается и сравнивается с имеющимся\&. У пользователя есть только одна попытка ввести правильный пароль\&. Для суперпользователя этот шаг пропускается, для того чтобы можно было изменить забытый пароль\&.
+.PP
+After the password has been entered, password aging information is checked to see if the user is permitted to change the password at this time\&. If not,
+\fBpasswd\fR
+refuses to change the password and exits\&.
+.PP
+Затем пользователю предложат дважды ввести новый пароль\&. Значение второго ввода сравнивается с первым и для изменения пароли из обеих попыток должны совпасть\&.
+.PP
+Затем пароль тестируется на сложность подбора\&. Согласно общим принципам, пароли должны быть длиной от 6 до 8 символов и включать один или более символов каждого типа:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+строчные буквы
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+цифры от 0 до 9
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+знаки пунктуации
+.RE
+.PP
+Care must be taken not to include the system default erase or kill characters\&.
+\fBpasswd\fR
+will reject any password which is not suitably complex\&.
+.SS "Выбор пароля"
+.PP
+The security of a password depends upon the strength of the encryption algorithm and the size of the key space\&. The legacy
+\fIUNIX\fR
+System encryption method is based on the NBS DES algorithm\&. More recent methods are now recommended (see
+\fBENCRYPT_METHOD\fR)\&. The size of the key space depends upon the randomness of the password which is selected\&.
+.PP
+При обеспечении безопасности пароля выбирают нечто среднее между сложным паролем и сложностью работы с ним\&. По этой причине, вы не должны использовать пароль, который является словом из словаря или который придётся записать из\-за его сложности\&. Также, пароль не должен быть названием чего\-либо, номером вашей лицензии, днём рождения и домашним адресом\&. Обо всём этом легко догадаться, что приведёт к нарушению безопасности системы\&.
+.PP
+You can find advice on how to choose a strong password on http://en\&.wikipedia\&.org/wiki/Password_strength
+.SH "ПАРАМЕТРЫ"
+.PP
+The options which apply to the
+\fBpasswd\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+This option can be used only with
+\fB\-S\fR
+and causes show status for all users\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR
+.RS 4
+Удалить пароль пользователя (сделать его пустым)\&. Это быстрый способ заблокировать пароль учётной записи\&. Это сделает указанную учётную запись беспарольной\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expire\fR
+.RS 4
+Немедленно сделать пароль устаревшим\&. В результате это заставит пользователя изменить пароль при следующем входе в систему\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-i\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+This option is used to disable an account after the password has been expired for a number of days\&. After a user account has had an expired password for
+\fIINACTIVE\fR
+days, the user may no longer sign on to the account\&.
+.RE
+.PP
+\fB\-k\fR, \fB\-\-keep\-tokens\fR
+.RS 4
+Указывает, что изменение пароля нужно выполнить только для устаревших ключей аутентификации (паролей)\&. Пользователи хотят оставить свои непросроченные ключи нетронутыми\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\fR
+.RS 4
+Заблокировать пароль указанной учётной записи\&. Этот параметр блокирует пароль, изменяя его значение на вариант, который не может быть шифрованным паролем (добавляется символ \(Fo!\(Fc в начало пароля)\&.
+.sp
+Note that this does not disable the account\&. The user may still be able to login using another authentication token (e\&.g\&. an SSH key)\&. To disable the account, administrators should use
+\fBusermod \-\-expiredate 1\fR
+(this set the account\*(Aqs expire date to Jan 2, 1970)\&.
+.sp
+Посетитель с заблокированным паролем не может изменить свой пароль\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-mindays\fR\ \&\fIMIN_DAYS\fR
+.RS 4
+Set the minimum number of days between password changes to
+\fIMIN_DAYS\fR\&. A value of zero for this field indicates that the user may change their password at any time\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Не выводить сообщений при работе\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-repository\fR\ \&\fIREPOSITORY\fR
+.RS 4
+change password in
+\fIREPOSITORY\fR
+repository
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-S\fR, \fB\-\-status\fR
+.RS 4
+Показать состояние учётной записи\&. Информация о состоянии содержит 7 полей\&. Первое поле содержит имя учётной записи\&. Второе поле указывает, заблокирован ли пароль учётной записи (L), она без пароля (NP) или у неё есть рабочий пароль (P)\&. Третье поле хранит дату последнего изменения пароля\&. В следующих четырёх полях хранятся минимальный срок, максимальный срок, период выдачи предупреждения и период неактивности пароля\&. Эти сроки измеряются в днях\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-unlock\fR
+.RS 4
+Unlock the password of the named account\&. This option re\-enables a password by changing the password back to its previous value (to the value before using the
+\fB\-l\fR
+option)\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-warndays\fR\ \&\fIWARN_DAYS\fR
+.RS 4
+Set the number of days of warning before a password change is required\&. The
+\fIWARN_DAYS\fR
+option is the number of days prior to the password expiring that a user will be warned that their password is about to expire\&.
+.RE
+.PP
+\fB\-x\fR, \fB\-\-maxdays\fR\ \&\fIMAX_DAYS\fR
+.RS 4
+Set the maximum number of days a password remains valid\&. After
+\fIMAX_DAYS\fR, the password is required to be changed\&.
+.sp
+Passing the number
+\fI\-1\fR
+as
+\fIMAX_DAYS\fR
+will remove checking a password\*(Aqs validity\&.
+.RE
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+Сложность пароля проверяется на разных машинах по разному\&. Пользователю настоятельно рекомендуется выбирать пароль такой сложности, чтобы ему нормально работалось\&.
+.PP
+Пользователи не могут изменять свои пароли в системе, если включён NIS и они не вошли на сервер NIS\&.
+.SH "НАСТРОЙКА"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+Задаёт системный алгоритм шифрования по умолчанию для шифрования паролей (используется, если алгоритм не указан в командной строке)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBOBSCURE_CHECKS_ENAB\fR (boolean)
+.RS 4
+Включает дополнительные проверки при смене пароля\&.
+.RE
+.PP
+\fBPASS_ALWAYS_WARN\fR (boolean)
+.RS 4
+Предупреждать о слабых паролях (но разрешать их использовать) для суперпользователя\&.
+.RE
+.PP
+\fBPASS_CHANGE_TRIES\fR (number)
+.RS 4
+Максимальное количество попыток смены пароля (слишком простого) при непрохождении проверки\&.
+.RE
+.PP
+\fBPASS_MAX_LEN\fR (number), \fBPASS_MIN_LEN\fR (number)
+.RS 4
+Number of significant characters in the password for crypt()\&.
+\fBPASS_MAX_LEN\fR
+is 8 by default\&. Don\*(Aqt change unless your crypt() is better\&. This is ignored if
+\fBMD5_CRYPT_ENAB\fR
+set to
+\fIyes\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+Увеличение количества раундов повышает сложность подбора пароля простым перебором\&. Но заметим, что при этом для аутентификации пользователей требуется большее количество процессорных ресурсов\&.
+.sp
+Если не задана, то libc выбирает значение количества раундов по умолчанию (5000)\&.
+.sp
+Значения должны лежать в диапазоне 1000\-999999999\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.SH "ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ"
+.PP
+The
+\fBpasswd\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+permission denied
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid combination of options
+.RE
+.PP
+\fI3\fR
+.RS 4
+unexpected failure, nothing done
+.RE
+.PP
+\fI4\fR
+.RS 4
+unexpected failure,
+passwd
+file missing
+.RE
+.PP
+\fI5\fR
+.RS 4
+passwd
+file busy, try again
+.RE
+.PP
+\fI6\fR
+.RS 4
+invalid argument to option
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBchpasswd\fR(8),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBlogin.defs\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/ru/man1/sg.1 b/man/ru/man1/sg.1
new file mode 100644
index 0000000..b2cbbe9
--- /dev/null
+++ b/man/ru/man1/sg.1
@@ -0,0 +1,97 @@
+'\" t
+.\" Title: sg
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Пользовательские команды
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "sg" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Пользовательские команды"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+sg \- выполняет команду с правами другой группы
+.SH "СИНТАКСИС"
+.HP \w'\fBsg\fR\ 'u
+\fBsg\fR [\-] [group\ [\-c\ ]\ command]
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBsg\fR
+command works similar to
+\fBnewgrp\fR
+but accepts a command\&. The command will be executed with the
+/bin/sh
+shell\&. With most shells you may run
+\fBsg\fR
+from, you need to enclose multi\-word commands in quotes\&. Another difference between
+\fBnewgrp\fR
+and
+\fBsg\fR
+is that some shells treat
+\fBnewgrp\fR
+specially, replacing themselves with a new instance of a shell that
+\fBnewgrp\fR
+creates\&. This doesn\*(Aqt happen with
+\fBsg\fR, so upon exit from a
+\fBsg\fR
+command you are returned to your previous group ID\&.
+.SH "НАСТРОЙКА"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBnewgrp\fR(1),
+\fBsu\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/ru/man1/su.1 b/man/ru/man1/su.1
new file mode 100644
index 0000000..81552a8
--- /dev/null
+++ b/man/ru/man1/su.1
@@ -0,0 +1,448 @@
+'\" t
+.\" Title: su
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Пользовательские команды
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "su" "1" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Пользовательские команды"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+su \- изменяет ID пользователя или делает его суперпользователем
+.SH "СИНТАКСИС"
+.HP \w'\fBsu\fR\ 'u
+\fBsu\fR [\fIпараметры\fR] [\fI\-\fR] [\fIимя_пользователя\fR\ [\ \fIargs\fR\ ]]
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBsu\fR
+command is used to become another user during a login session\&. Invoked without a
+\fBusername\fR,
+\fBsu\fR
+defaults to becoming the superuser\&. The
+\fB\-\fR
+option may be used to provide an environment similar to what the user would expect had the user logged in directly\&. The
+\fB\-c\fR
+option may be used to treat the next argument as a command by most shells\&.
+.PP
+Options are recognized everywhere in the argument list\&. You can use the
+\fB\-\-\fR
+argument to stop option parsing\&. The
+\fB\-\fR
+option is special: it is also recognized after
+\fB\-\-\fR, but has to be placed before
+\fBusername\fR\&.
+.PP
+Пользователю предложат ввести пароль, если он задан\&. При неверном пароле возникает сообщение об ошибке\&. Все попытки, удачные и неудачные, протоколируются системой с целью обнаружения злоупотреблений\&.
+.PP
+The current environment is passed to the new shell\&. The value of
+\fB$PATH\fR
+is reset to
+/bin:/usr/bin
+for normal users, or
+/sbin:/bin:/usr/sbin:/usr/bin
+for the superuser\&. This may be changed with the
+\fBENV_PATH\fR
+and
+\fBENV_SUPATH\fR
+definitions in
+/etc/login\&.defs\&.
+.PP
+Субсистемный вход в систему можно распознать по наличию символа \(Fo*\(Fc в начале регистрационной оболочки\&. Заданный домашний каталог будет использован как корень новой файловой системы, в которой регистрируется пользователь\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+The options which apply to the
+\fBsu\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-command\fR\ \&\fICOMMAND\fR
+.RS 4
+Specify a command that will be invoked by the shell using its
+\fB\-c\fR\&.
+.sp
+The executed command will have no controlling terminal\&. This option cannot be used to execute interactive programs which need a controlling TTY\&.
+.RE
+.PP
+\fB\-\fR, \fB\-l\fR, \fB\-\-login\fR
+.RS 4
+Предоставляет окружение, как если бы пользователь непосредственно регистрировался в системе\&.
+.sp
+When
+\fB\-\fR
+is used, it must be specified before any
+\fBusername\fR\&. For portability it is recommended to use it as last option, before any
+\fBusername\fR\&. The other forms (\fB\-l\fR
+and
+\fB\-\-login\fR) do not have this restriction\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+Оболочка, которая будет запущена\&.
+.sp
+The invoked shell is chosen from (highest priority first):
+.PP
+.RS 4
+The shell specified with \-\-shell\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-preserve\-environment\fR
+is used, the shell specified by the
+\fB$SHELL\fR
+environment variable\&.
+.RE
+.PP
+.RS 4
+The shell indicated in the
+/etc/passwd
+entry for the target user\&.
+.RE
+.PP
+.RS 4
+/bin/sh
+if a shell could not be found by any above method\&.
+.RE
+.sp
+If the target user has a restricted shell (i\&.e\&. the shell field of this user\*(Aqs entry in
+/etc/passwd
+is not listed in
+/etc/shells), then the
+\fB\-\-shell\fR
+option or the
+\fB$SHELL\fR
+environment variable won\*(Aqt be taken into account, unless
+\fBsu\fR
+is called by root\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-p\fR, \fB\-\-preserve\-environment\fR
+.RS 4
+Preserve the current environment, except for:
+.PP
+\fB$PATH\fR
+.RS 4
+reset according to the
+/etc/login\&.defs
+options
+\fBENV_PATH\fR
+or
+\fBENV_SUPATH\fR
+(see below);
+.RE
+.PP
+\fB$IFS\fR
+.RS 4
+reset to
+\(Fo<space><tab><newline>\(Fc, if it was set\&.
+.RE
+.sp
+If the target user has a restricted shell, this option has no effect (unless
+\fBsu\fR
+is called by root)\&.
+.sp
+Note that the default behavior for the environment is the following:
+.PP
+.RS 4
+The
+\fB$HOME\fR,
+\fB$SHELL\fR,
+\fB$USER\fR,
+\fB$LOGNAME\fR,
+\fB$PATH\fR, and
+\fB$IFS\fR
+environment variables are reset\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is not used, the environment is copied, except for the variables above\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, the
+\fB$TERM\fR,
+\fB$COLORTERM\fR,
+\fB$DISPLAY\fR, and
+\fB$XAUTHORITY\fR
+environment variables are copied if they were set\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, the
+\fB$TZ\fR,
+\fB$HZ\fR, and
+\fB$MAIL\fR
+environment variables are set according to the
+/etc/login\&.defs
+options
+\fBENV_TZ\fR,
+\fBENV_HZ\fR,
+\fBMAIL_DIR\fR, and
+\fBMAIL_FILE\fR
+(see below)\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, other environment variables might be set by the
+\fBENVIRON_FILE\fR
+file (see below)\&.
+.RE
+.sp
+.RE
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+This version of
+\fBsu\fR
+has many compilation options, only some of which may be in use at any particular site\&.
+.SH "НАСТРОЙКА"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+Если определена, то значение равно или полному пути к файлу с именами устройств (одно на строку), или списку имён устройств, перечисленных через \(Fo:\(Fc\&. Вход суперпользователя будет разрешён только с этих устройств\&.
+.sp
+Если не определена, то суперпользователь может входить в систему с любого устройства\&.
+.sp
+Устройства должны указываться без начального префикса /dev/\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\*(Aqs supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Определяет, можно ли войти в систему, если нельзя выполнить cd в домашний каталог\&. По умолчанию \(Fono\(Fc\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+Если этот файл существует и доступ для чтения, то из него читает регистрационное окружение\&. Каждая строка должна иметь формат: имя=значение\&.
+.sp
+Строки, начинающиеся с #, считаются комментарием и игнорируются\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value is a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value is a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/sbin:/bin:/usr/sbin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+Строка\-приглашение к вводу пароля\&. Значение по умолчанию: \(FoPassword:\(Fc или перевод этой строки на разные языки\&. Если вы измените эту переменную, то перевод будет отсутствовать\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+Включает проверку и показ состояния почтового ящика при входе\&.
+.sp
+Вы должны выключить это, если почтовый ящик проверяется из файлов автозапуска оболочки (\(Fomailx \-e\(Fc или похожей командой)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+Почтовый каталог\&. Данный параметр нужен для управления почтовым ящиком при изменении или удалении учётной записи пользователя\&. Если параметр не задан, то используется значение указанное при сборке\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Определяет расположение почтовых файлов пользователя относительно домашнего каталога\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of resource limits from
+/etc/limits
+and ulimit, umask, and niceness from the user\*(Aqs passwd gecos field\&.
+.RE
+.PP
+\fBSULOG_FILE\fR (string)
+.RS 4
+Если определена, то любая активность su будет протоколироваться в этот файл\&.
+.RE
+.PP
+\fBSU_NAME\fR (string)
+.RS 4
+Если определена, то выводится имя команды когда работает \(Fosu \-\(Fc\&. Например, если значение равно \(Fosu\(Fc, то \(Fops\(Fc покажет команду как \(Fo\-su\(Fc\&. Если не определена, то \(Fops\(Fc покажет имя запускаемой оболочки например как \(Fo\-sh\(Fc\&.
+.RE
+.PP
+\fBSU_WHEEL_ONLY\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the user must be listed as a member of the first gid 0 group in
+/etc/group
+(called
+\fIroot\fR
+on most Linux systems) to be able to
+\fBsu\fR
+to uid 0 accounts\&. If the group doesn\*(Aqt exist or is empty, no one will be able to
+\fBsu\fR
+to uid 0\&.
+.RE
+.PP
+\fBSYSLOG_SU_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsu\fR
+activity \- in addition to sulog file logging\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Включает установку группы битов umask равной битам владельца (пример: 022 \-> 002, 077 \-> 007) для не суперпользователей, если uid равен gid и имя пользователя совпадает с именем первичной группы\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.SH "ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ"
+.PP
+On success,
+\fBsu\fR
+returns the exit value of the command it executed\&.
+.PP
+If this command was terminated by a signal,
+\fBsu\fR
+returns the number of this signal plus 128\&.
+.PP
+If su has to kill the command (because it was asked to terminate, and the command did not terminate in time),
+\fBsu\fR
+returns 255\&.
+.PP
+Some exit values from
+\fBsu\fR
+are independent from the executed command:
+.PP
+\fI0\fR
+.RS 4
+success (\fB\-\-help\fR
+only)
+.RE
+.PP
+\fI1\fR
+.RS 4
+System or authentication failure
+.RE
+.PP
+\fI126\fR
+.RS 4
+The requested command was not found
+.RE
+.PP
+\fI127\fR
+.RS 4
+The requested command could not be executed
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBlogin\fR(1),
+\fBlogin.defs\fR(5),
+\fBsg\fR(1),
+\fBsh\fR(1)\&.
diff --git a/man/ru/man3/getspnam.3 b/man/ru/man3/getspnam.3
new file mode 100644
index 0000000..cd473da
--- /dev/null
+++ b/man/ru/man3/getspnam.3
@@ -0,0 +1 @@
+.so man3/shadow.3
diff --git a/man/ru/man3/shadow.3 b/man/ru/man3/shadow.3
new file mode 100644
index 0000000..d9d9ad3
--- /dev/null
+++ b/man/ru/man3/shadow.3
@@ -0,0 +1,245 @@
+'\" t
+.\" Title: shadow
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Библиотечные функции
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "shadow" "3" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Библиотечные функции"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+shadow, getspnam \- процедуры для работы с файлом шифрованных паролей
+.SH "СИНТАКСИС"
+.PP
+\fI#include <shadow\&.h>\fR
+.PP
+\fIstruct spwd *getspent();\fR
+.PP
+\fIstruct spwd *getspnam(char\fR
+\fI*name\fR\fI);\fR
+.PP
+\fIvoid setspent();\fR
+.PP
+\fIvoid endspent();\fR
+.PP
+\fIstruct spwd *fgetspent(FILE\fR
+\fI*fp\fR\fI);\fR
+.PP
+\fIstruct spwd *sgetspent(char\fR
+\fI*cp\fR\fI);\fR
+.PP
+\fIint putspent(struct spwd\fR
+\fI*p,\fR
+\fIФАЙЛ\fR
+\fI*fp\fR\fI);\fR
+.PP
+\fIint lckpwdf();\fR
+.PP
+\fIint ulckpwdf();\fR
+.SH "ОПИСАНИЕ"
+.PP
+\fIshadow\fR
+manipulates the contents of the shadow password file,
+/etc/shadow\&. The structure in the
+\fI#include\fR
+file is:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct spwd {
+ char *sp_namp; /* user login name */
+ char *sp_pwdp; /* encrypted password */
+ long int sp_lstchg; /* last password change */
+ long int sp_min; /* days until change allowed\&. */
+ long int sp_max; /* days before change required */
+ long int sp_warn; /* days warning for expiration */
+ long int sp_inact; /* days before account inactive */
+ long int sp_expire; /* date when account expires */
+ unsigned long int sp_flag; /* reserved for future use */
+}
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Значение каждого поля:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_namp \- указатель на строку с именем пользователя, завершающуюся нулевым символом
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_pwdp \- указатель на строку с паролем, завершающуюся нулевым символом
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_lstchg \- количество дней, когда был изменён пароль последний раз, начиная с 1 января 1970 года
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_min \- количество дней, когда можно не менять пароль
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_max \- количество дней, которое должно пройти, чтобы нужно было поменять пароль
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_warn \- количество дней, когда будет выдаваться предупреждение о скором устаревании пароля перед тем как пароль устареет
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_inact \- количество дней, которые должны пройти после устаревания пароля, когда начинать считать, что учётная запись неактивна и заблокирована
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_expire \- дней, после которых учётная запись будет заблокирована, начиная с 1 января 1970 года
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_flag \- зарезервировано
+.RE
+.SH "ОПИСАНИЕ"
+.PP
+\fIgetspent\fR,
+\fIgetspname\fR,
+\fIfgetspent\fR, and
+\fIsgetspent\fR
+each return a pointer to a
+\fIstruct spwd\fR\&.
+\fIgetspent\fR
+returns the next entry from the file, and
+\fIfgetspent\fR
+returns the next entry from the given stream, which is assumed to be a file of the proper format\&.
+\fIsgetspent\fR
+returns a pointer to a
+\fIstruct spwd\fR
+using the provided string as input\&.
+\fIgetspnam\fR
+searches from the current position in the file for an entry matching
+\fIname\fR\&.
+.PP
+\fIsetspent\fR
+and
+\fIendspent\fR
+may be used to begin and end, respectively, access to the shadow password file\&.
+.PP
+The
+\fIlckpwdf\fR
+and
+\fIulckpwdf\fR
+routines should be used to insure exclusive access to the
+/etc/shadow
+file\&.
+\fIlckpwdf\fR
+attempts to acquire a lock using
+\fIpw_lock\fR
+for up to 15 seconds\&. It continues by attempting to acquire a second lock using
+\fIspw_lock\fR
+for the remainder of the initial 15 seconds\&. Should either attempt fail after a total of 15 seconds,
+\fIlckpwdf\fR
+returns \-1\&. When both locks are acquired 0 is returned\&.
+.SH "ДИАГНОСТИКА"
+.PP
+Routines return NULL if no more entries are available or if an error occurs during processing\&. Routines which have
+\fIint\fR
+as the return value return 0 for success and \-1 for failure\&.
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+Данные функции могут использоваться только суперпользователем, так как доступ к файлу теневых паролей ограничен\&.
+.SH "ФАЙЛЫ"
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBgetpwent\fR(3),
+\fBshadow\fR(5)\&.
diff --git a/man/ru/man5/faillog.5 b/man/ru/man5/faillog.5
new file mode 100644
index 0000000..88d2545
--- /dev/null
+++ b/man/ru/man5/faillog.5
@@ -0,0 +1,64 @@
+'\" t
+.\" Title: faillog
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Форматы файлов
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "faillog" "5" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Форматы файлов"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+faillog \- файл протокола неудачных попыток входа в систему
+.SH "ОПИСАНИЕ"
+.PP
+/var/log/faillog
+maintains a count of login failures and the limits for each account\&.
+.PP
+Этот файл состоит из записей постоянной длины, упорядоченных по числовому идентификатору учётной записи\&. Каждая запись содержит количество неудачных попыток входа с момента последнего успешного входа в систему, максимальное количество неудачных попыток перед тем как учётная запись будет заблокирована, терминал, с которого осуществлялась последняя неудачная попытка входа, дату этого события и интервал (в секундах) на сколько учётная запись будет заблокирована в случае неудачной попытки\&.
+.PP
+Структура файла:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct faillog {
+ short fail_cnt;
+ short fail_max;
+ char fail_line[12];
+ time_t fail_time;
+ long fail_locktime;
+};
+.fi
+.if n \{\
+.RE
+.\}
+.SH "ФАЙЛЫ"
+.PP
+/var/log/faillog
+.RS 4
+журнал неудавшихся попыток входа в систему
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBfaillog\fR(8)
diff --git a/man/ru/man5/gshadow.5 b/man/ru/man5/gshadow.5
new file mode 100644
index 0000000..d3d6bce
--- /dev/null
+++ b/man/ru/man5/gshadow.5
@@ -0,0 +1,101 @@
+'\" t
+.\" Title: gshadow
+.\" Author: Nicolas Fran\(,cois <nicolas.francois@centraliens.net>
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Форматы файлов
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "gshadow" "5" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Форматы файлов"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+gshadow \- файл с защищаемой информацией о группах
+.SH "ОПИСАНИЕ"
+.PP
+/etc/gshadow
+contains the shadowed information for group accounts\&.
+.PP
+Этот файл должен быть недоступен обычному пользователю, если нужно обеспечить безопасность паролей\&.
+.PP
+Каждая строка файла содержит поля, отделёнными друг от друга двоеточием:
+.PP
+\fBимя группы\fR
+.RS 4
+Должно содержать правильное имя группы, которая существует в системе\&.
+.RE
+.PP
+\fBшифрованный пароль\fR
+.RS 4
+Refer to
+\fBcrypt\fR(3)
+for details on how this string is interpreted\&.
+.sp
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), for instance ! or *, users will not be able to use a unix password to access the group (but group members do not need the password)\&.
+.sp
+The password is used when a user who is not a member of the group wants to gain the permissions of this group (see
+\fBnewgrp\fR(1))\&.
+.sp
+Это поле может быть пустым; в этом случае только члены группы могут пользоваться правами группы\&.
+.sp
+A password field which starts with an exclamation mark means that the password is locked\&. The remaining characters on the line represent the password field before the password was locked\&.
+.sp
+This password supersedes any password specified in
+/etc/group\&.
+.RE
+.PP
+\fBадминистраторы\fR
+.RS 4
+Список имён пользователей, перечисленных через запятую\&.
+.sp
+Администраторы могут менять пароль или членство в группе\&.
+.sp
+Администраторы также имеют те же права, что и члены группы (смотрите далее)\&.
+.RE
+.PP
+\fBчлены\fR
+.RS 4
+Список имён пользователей, перечисленных через запятую\&.
+.sp
+Члены могут иметь доступ к группе без ввода пароля\&.
+.sp
+You should use the same list of users as in
+/etc/group\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBgpasswd\fR(5),
+\fBgroup\fR(5),
+\fBgrpck\fR(8),
+\fBgrpconv\fR(8),
+\fBnewgrp\fR(1)\&.
diff --git a/man/ru/man5/limits.5 b/man/ru/man5/limits.5
new file mode 100644
index 0000000..022f850
--- /dev/null
+++ b/man/ru/man5/limits.5
@@ -0,0 +1,274 @@
+'\" t
+.\" Title: limits
+.\" Author: Luca Berra
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Форматы файлов
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "limits" "5" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Форматы файлов"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+limits \- файл контроля ресурсов
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fIlimits\fR
+file (/etc/limits
+by default or LIMITS_FILE defined
+config\&.h) describes the resource limits you wish to impose\&. It should be owned by root and readable by root account only\&.
+.PP
+По умолчанию учётная запись \(Foroot\(Fc ничем не ограничена\&. Фактически, никак нельзя установить ограничения с помощью этой процедуры на учётные записи, имеющие права суперпользователя (учётные записи с UID равным 0)\&.
+.PP
+Каждая строка описывает ограничение для одного пользователя имеет вид:
+.PP
+\fIuser СТРОКА_ОГРАНИЧЕНИЙ\fR
+.PP
+или в виде:
+.PP
+\fI@group СТРОКА_ОГРАНИЧЕНИЙ\fR
+.PP
+The
+\fILIMITS_STRING\fR
+is a string of a concatenated list of resource limits\&. Each limit consists of a letter identifier followed by a numerical limit\&.
+.PP
+Допустимые идентификаторы:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+A: максимальное адресное пространство (КБ)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+C: максимальный размер файла core (КБ)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+D: максимальный размер данных (КБ)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+F: maximum file size (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+K: file creation mask, set by
+\fBumask\fR(2)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+I: максимальное значение уступчивости (nice) (0\&.\&.39, преобразуемые в 20\&.\&.\-19)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+L: максимальное число возможных регистраций в системе этого пользователя
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+M: максимальное синхронизируемое адресное пространство памяти (КБ)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+N: максимальное число открытых файлов
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+O: максимальный приоритет реального времени
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+P: process priority, set by
+\fBsetpriority\fR(2)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+R: максимальный размер резидентного сегмента (КБ)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+S: максимальный размер стека (КБ)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+T: максимальное время использования процессора (минут)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+U: максимальное число процессов
+.RE
+.PP
+For example,
+\fIL2D2048N5\fR
+is a valid
+\fILIMITS_STRING\fR\&. For reading convenience, the following entries are equivalent:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ username L2D2048N5
+ username L2 D2048 N5
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Be aware that after
+\fIusername\fR
+the rest of the line is considered a limit string, thus comments are not allowed\&. An invalid limits string will be rejected (not considered) by the
+\fBlogin\fR
+program\&.
+.PP
+The default entry is denoted by username "\fI*\fR"\&. If you have multiple
+\fIdefault\fR
+entries in your
+\fILIMITS_FILE\fR, then the last one will be used as the default entry\&.
+.PP
+The limits specified in the form "\fI@group\fR" apply to the members of the specified
+\fIgroup\fR\&.
+.PP
+If more than one line with limits for a user exist, only the first line for this user will be considered\&.
+.PP
+If no lines are specified for a user, the last
+\fI@group\fR
+line matching a group whose the user is a member of will be considered, or the last line with default limits if no groups contain the user\&.
+.PP
+To completely disable limits for a user, a single dash "\fI\-\fR" will do\&.
+.PP
+To disable a limit for a user, a single dash "\fI\-\fR" can be used instead of the numerical value for this limit\&.
+.PP
+Также заметьте, что все настройки ограничений делаются ДЛЯ КОНКРЕТНОЙ УЧЁТНОЙ ЗАПИСИ\&. Они не являются глобальными и не постоянны\&. Возможно глобальные ограничения и появятся, но пока это только в планах ;)
+.SH "ФАЙЛЫ"
+.PP
+/etc/limits
+.RS 4
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBlogin\fR(1),
+\fBsetpriority\fR(2),
+\fBsetrlimit\fR(2)\&.
diff --git a/man/ru/man5/login.access.5 b/man/ru/man5/login.access.5
new file mode 100644
index 0000000..ae30f92
--- /dev/null
+++ b/man/ru/man5/login.access.5
@@ -0,0 +1,67 @@
+'\" t
+.\" Title: login.access
+.\" Author: Marek Micha\(/lkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Форматы файлов
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "login\&.access" "5" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Форматы файлов"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+login.access \- файл контроля доступа в систему
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fIlogin\&.access\fR
+file specifies (user, host) combinations and/or (user, tty) combinations for which a login will be either accepted or refused\&.
+.PP
+When someone logs in, the
+\fIlogin\&.access\fR
+is scanned for the first entry that matches the (user, host) combination, or, in case of non\-networked logins, the first entry that matches the (user, tty) combination\&. The permissions field of that table entry determines whether the login will be accepted or refused\&.
+.PP
+Каждая строка таблицы контроля доступа в систему состоит из трёх полей разделённых символом \(Fo:\(Fc и выглядит так:
+.PP
+\fIpermission\fR:\fIusers\fR:\fIorigins\fR
+.PP
+The first field should be a "\fI+\fR" (access granted) or "\fI\-\fR" (access denied) character\&. The second field should be a list of one or more login names, group names, or
+\fIALL\fR
+(always matches)\&. The third field should be a list of one or more tty names (for non\-networked logins), host names, domain names (begin with "\&."), host addresses, internet network numbers (end with "\&."),
+\fIALL\fR
+(always matches) or
+\fILOCAL\fR
+(matches any string that does not contain a "\&." character)\&. If you run NIS you can use @netgroupname in host or user patterns\&.
+.PP
+The
+\fIEXCEPT\fR
+operator makes it possible to write very compact rules\&.
+.PP
+Поиск в файле групп производится только когда имя не совпадает с регистрирующимся пользователем\&. Рассматриваются группы только с явно прописанными в них пользователями: программа не принимает во внимание значение первичной группы пользователя\&.
+.SH "ФАЙЛЫ"
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBlogin\fR(1)\&.
diff --git a/man/ru/man5/login.defs.5 b/man/ru/man5/login.defs.5
new file mode 100644
index 0000000..1439d5a
--- /dev/null
+++ b/man/ru/man5/login.defs.5
@@ -0,0 +1,854 @@
+'\" t
+.\" Title: login.defs
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Форматы файлов
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "login\&.defs" "5" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Форматы файлов"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+login.defs \- содержит конфигурацию подсистемы теневых паролей
+.SH "ОПИСАНИЕ"
+.PP
+The
+/etc/login\&.defs
+file defines the site\-specific configuration for the shadow password suite\&. This file is required\&. Absence of this file will not prevent system operation, but will probably result in undesirable operation\&.
+.PP
+Файл представляет собой обычный текстовый файл; каждая строка описывает один параметр настройки\&. Строки состоят из названия параметра и его значения, которые разделяются пробельным символом\&. Пустые строки и комментарии игнорируются\&. Комментарии начинаются со знака фунта \(Fo#\(Fc, который должен быть первым непробельным символом в строке\&.
+.PP
+Parameter values may be of four types: strings, booleans, numbers, and long numbers\&. A string is comprised of any printable characters\&. A boolean should be either the value
+\fIyes\fR
+or
+\fIno\fR\&. An undefined boolean parameter or one with a value other than these will be given a
+\fIno\fR
+value\&. Numbers (both regular and long) may be either decimal values, octal values (precede the value with
+\fI0\fR) or hexadecimal values (precede the value with
+\fI0x\fR)\&. The maximum value of the regular and long numeric parameters is machine\-dependent\&.
+.PP
+Возможны следующие параметры настройки:
+.PP
+\fBCHFN_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchfn\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCHFN_RESTRICT\fR (string)
+.RS 4
+This parameter specifies which values in the
+\fIgecos\fR
+field of the
+/etc/passwd
+file may be changed by regular users using the
+\fBchfn\fR
+program\&. It can be any combination of letters
+\fIf\fR,
+\fIr\fR,
+\fIw\fR,
+\fIh\fR, for Full name, Room number, Work phone, and Home phone, respectively\&. For backward compatibility,
+\fIyes\fR
+is equivalent to
+\fIrwh\fR
+and
+\fIno\fR
+is equivalent to
+\fIfrwh\fR\&. If not specified, only the superuser can make any changes\&. The most restrictive setting is better achieved by not installing
+\fBchfn\fR
+SUID\&.
+.RE
+.PP
+\fBCHSH_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchsh\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+Если определена, то значение равно или полному пути к файлу с именами устройств (одно на строку), или списку имён устройств, перечисленных через \(Fo:\(Fc\&. Вход суперпользователя будет разрешён только с этих устройств\&.
+.sp
+Если не определена, то суперпользователь может входить в систему с любого устройства\&.
+.sp
+Устройства должны указываться без начального префикса /dev/\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\*(Aqs supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBCREATE_HOME\fR (boolean)
+.RS 4
+Определяет, должен ли создаваться по умолчанию домашний каталог для новых пользователей\&.
+.sp
+Эта переменная не влияет на системных пользователей и может быть переопределена из командной строки\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Определяет, можно ли войти в систему, если нельзя выполнить cd в домашний каталог\&. По умолчанию \(Fono\(Fc\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+Задаёт системный алгоритм шифрования по умолчанию для шифрования паролей (используется, если алгоритм не указан в командной строке)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value is a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value is a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/sbin:/bin:/usr/sbin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+Если этот файл существует и доступ для чтения, то из него читает регистрационное окружение\&. Каждая строка должна иметь формат: имя=значение\&.
+.sp
+Строки, начинающиеся с #, считаются комментарием и игнорируются\&.
+.RE
+.PP
+\fBERASECHAR\fR (number)
+.RS 4
+Terminal ERASE character (\fI010\fR
+= backspace,
+\fI0177\fR
+= DEL)\&.
+.sp
+Значение может начинаться с \(Fo0\(Fc при указании значения в восьмеричной системе счисления или \(Fo0x\(Fc при указании значения в шестнадцатеричной системе счисления\&.
+.RE
+.PP
+\fBFAIL_DELAY\fR (number)
+.RS 4
+Задержка в секундах перед повторной попыткой после неудачного входа\&.
+.RE
+.PP
+\fBFAILLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of
+/var/log/faillog
+login failure info\&.
+.RE
+.PP
+\fBFAKE_SHELL\fR (string)
+.RS 4
+If set,
+\fBlogin\fR
+will execute this shell instead of the users\*(Aq shell specified in
+/etc/passwd\&.
+.RE
+.PP
+\fBFTMP_FILE\fR (string)
+.RS 4
+Если определена, то неудачные попытки входа будут протоколироваться в этот файл в формате utmp\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBGID_MIN\fR
+(resp\&.
+\fBGID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBHOME_MODE\fR (number)
+.RS 4
+The mode for new home directories\&. If not specified, the
+\fBUMASK\fR
+is used to create the mode\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this to set the mode of the home directory they create\&.
+.RE
+.PP
+\fBHUSHLOGIN_FILE\fR (string)
+.RS 4
+Если определена, то этот файл может заблокировать все обычные переговоры (chatter) при входе\&. Если указан полный путь к файлу, то будет включён сокращённый (hushed) режим, если в этом файле указано имя пользователя или оболочка\&. Если указан не полный путь, то будет включён сокращённый (hushed) режим, если файл находится в домашнем каталоге пользователя\&.
+.RE
+.PP
+\fBISSUE_FILE\fR (string)
+.RS 4
+Если определена, то этот файл будет показан перед каждым появлением приглашения на вход\&.
+.RE
+.PP
+\fBKILLCHAR\fR (number)
+.RS 4
+Terminal KILL character (\fI025\fR
+= CTRL/U)\&.
+.sp
+Значение может начинаться с \(Fo0\(Fc при указании значения в восьмеричной системе счисления или \(Fo0x\(Fc при указании значения в шестнадцатеричной системе счисления\&.
+.RE
+.PP
+\fBLASTLOG_ENAB\fR (boolean)
+.RS 4
+Включить протоколирование и показ информации о времени входа из /var/log/lastlog\&.
+.RE
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.PP
+\fBLOG_OK_LOGINS\fR (boolean)
+.RS 4
+Включить протоколирование успешных входов\&.
+.RE
+.PP
+\fBLOG_UNKFAIL_ENAB\fR (boolean)
+.RS 4
+Включить показ неизвестных имён пользователей при записи неудачных попыток входа\&.
+.sp
+Замечание: протоколирование неизвестных имён пользователя может привести к проблемам с безопасностью, если пользователь введёт свой пароль вместо своего имени\&.
+.RE
+.PP
+\fBLOGIN_RETRIES\fR (number)
+.RS 4
+Максимальное количество попыток входа при вводе неверного пароля\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+Строка\-приглашение к вводу пароля\&. Значение по умолчанию: \(FoPassword:\(Fc или перевод этой строки на разные языки\&. Если вы измените эту переменную, то перевод будет отсутствовать\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.PP
+\fBLOGIN_TIMEOUT\fR (number)
+.RS 4
+Максимальное время в секундах, отведённое на вход\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+Включает проверку и показ состояния почтового ящика при входе\&.
+.sp
+Вы должны выключить это, если почтовый ящик проверяется из файлов автозапуска оболочки (\(Fomailx \-e\(Fc или похожей командой)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+Почтовый каталог\&. Данный параметр нужен для управления почтовым ящиком при изменении или удалении учётной записи пользователя\&. Если параметр не задан, то используется значение указанное при сборке\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Определяет расположение почтовых файлов пользователя относительно домашнего каталога\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Значение по умолчанию равно 0, означающее, что ограничения на количество членов в группе нет\&.
+.sp
+Данная возможность (разделение группы) позволяет ограничить длину строк в файле групп\&. Это полезно для ограничения длины строк групп NIS в 1024 символа\&.
+.sp
+Если вам нужно такое ограничение, укажите значение 25\&.
+.sp
+Замечание: разделение групп поддерживается не всеми инструментами (даже в наборе инструментов Shadow)\&. Вы не должны использовать эту переменную, если вам действительно это ненужно\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBMOTD_FILE\fR (string)
+.RS 4
+Если определена, то при входе будет показано \(Foсообщение дня\(Fc из файла со списком значений, разделённых \(Fo:\(Fc\&.
+.RE
+.PP
+\fBNOLOGINS_FILE\fR (string)
+.RS 4
+Если определена, значение равно имени файла, чьё существование запретит вход для не суперпользователей\&. В файле должно содержаться сообщение, описывающее почему запрещён вход\&.
+.RE
+.PP
+\fBOBSCURE_CHECKS_ENAB\fR (boolean)
+.RS 4
+Включает дополнительные проверки при смене пароля\&.
+.RE
+.PP
+\fBPASS_ALWAYS_WARN\fR (boolean)
+.RS 4
+Предупреждать о слабых паролях (но разрешать их использовать) для суперпользователя\&.
+.RE
+.PP
+\fBPASS_CHANGE_TRIES\fR (number)
+.RS 4
+Максимальное количество попыток смены пароля (слишком простого) при непрохождении проверки\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+Максимальное число дней использования пароля\&. Если пароль старее этого числа, то будет запущена процедура смены пароля\&. Если значение не задано, то предполагается значение \-1 (то есть возможность ограничения не используется)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+Максимальное число дней между изменениями пароля\&. Любая смена пароля ранее заданного срока выполнена не будет\&. Если значение не задано, то предполагается значение \-1 (то есть возможность ограничения не используется)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+Число дней за которое начнёт выдаваться предупреждение об устаревании пароля\&. Нулевое значение означает, что предупреждение выдаётся в день устаревания, при отрицательном значении предупреждение выдаваться не будет\&. Если значение не задано, выдача предупреждения отключается\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR,
+\fBPASS_MIN_DAYS\fR
+and
+\fBPASS_WARN_AGE\fR
+are only used at the time of account creation\&. Any changes to these settings won\*(Aqt affect existing accounts\&.
+.PP
+\fBPASS_MAX_LEN\fR (number), \fBPASS_MIN_LEN\fR (number)
+.RS 4
+Number of significant characters in the password for crypt()\&.
+\fBPASS_MAX_LEN\fR
+is 8 by default\&. Don\*(Aqt change unless your crypt() is better\&. This is ignored if
+\fBMD5_CRYPT_ENAB\fR
+set to
+\fIyes\fR\&.
+.RE
+.PP
+\fBPORTTIME_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable checking of time restrictions specified in
+/etc/porttime\&.
+.RE
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of resource limits from
+/etc/limits
+and ulimit, umask, and niceness from the user\*(Aqs passwd gecos field\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+Увеличение количества раундов повышает сложность подбора пароля простым перебором\&. Но заметим, что при этом для аутентификации пользователей требуется большее количество процессорных ресурсов\&.
+.sp
+Если не задана, то libc выбирает значение количества раундов по умолчанию (5000)\&.
+.sp
+Значения должны лежать в диапазоне 1000\-999999999\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.PP
+\fBSULOG_FILE\fR (string)
+.RS 4
+Если определена, то любая активность su будет протоколироваться в этот файл\&.
+.RE
+.PP
+\fBSU_NAME\fR (string)
+.RS 4
+Если определена, то выводится имя команды когда работает \(Fosu \-\(Fc\&. Например, если значение равно \(Fosu\(Fc, то \(Fops\(Fc покажет команду как \(Fo\-su\(Fc\&. Если не определена, то \(Fops\(Fc покажет имя запускаемой оболочки например как \(Fo\-sh\(Fc\&.
+.RE
+.PP
+\fBSU_WHEEL_ONLY\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the user must be listed as a member of the first gid 0 group in
+/etc/group
+(called
+\fIroot\fR
+on most Linux systems) to be able to
+\fBsu\fR
+to uid 0 accounts\&. If the group doesn\*(Aqt exist or is empty, no one will be able to
+\fBsu\fR
+to uid 0\&.
+.RE
+.PP
+\fBSUB_GID_MIN\fR (number), \fBSUB_GID_MAX\fR (number), \fBSUB_GID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate group IDs) allocate
+\fBSUB_GID_COUNT\fR
+unused group IDs from the range
+\fBSUB_GID_MIN\fR
+to
+\fBSUB_GID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR,
+\fBSUB_GID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSUB_UID_MIN\fR (number), \fBSUB_UID_MAX\fR (number), \fBSUB_UID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate user IDs) allocate
+\fBSUB_UID_COUNT\fR
+unused user IDs from the range
+\fBSUB_UID_MIN\fR
+to
+\fBSUB_UID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR,
+\fBSUB_UID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_GID_MIN\fR
+(resp\&.
+\fBSYS_GID_MAX\fR) is 101 (resp\&.
+\fBGID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_UID_MIN\fR
+(resp\&.
+\fBSYS_UID_MAX\fR) is 101 (resp\&.
+\fBUID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.PP
+\fBSYSLOG_SU_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsu\fR
+activity \- in addition to sulog file logging\&.
+.RE
+.PP
+\fBTTYGROUP\fR (string), \fBTTYPERM\fR (string)
+.RS 4
+The terminal permissions: the login tty will be owned by the
+\fBTTYGROUP\fR
+group, and the permissions will be set to
+\fBTTYPERM\fR\&.
+.sp
+By default, the ownership of the terminal is set to the user\*(Aqs primary group and the permissions are set to
+\fI0600\fR\&.
+.sp
+\fBTTYGROUP\fR
+can be either the name of a group or a numeric group identifier\&.
+.sp
+If you have a
+\fBwrite\fR
+program which is "setgid" to a special group which owns the terminals, define TTYGROUP to the group number and TTYPERM to 0620\&. Otherwise leave TTYGROUP commented out and assign TTYPERM to either 622 or 600\&.
+.RE
+.PP
+\fBTTYTYPE_FILE\fR (string)
+.RS 4
+Если определена, то в ней указывается имя файла, в котором описано соответствие между линией tty и параметром окружения TERM\&. Каждая строка файла имеет формат вида \(Fovt100 tty01\(Fc\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBUID_MIN\fR
+(resp\&.
+\fBUID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBULIMIT\fR (number)
+.RS 4
+Default
+\fBulimit\fR
+value\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+Задаёт начальное значение маски доступа для создаваемых файлов\&. Если не указано, то маска устанавливается в 022\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create if
+\fBHOME_MODE\fR
+is not set\&.
+.sp
+It is also used by
+\fBlogin\fR
+to define users\*(Aq initial umask\&. Note that this mask can be overridden by the user\*(Aqs GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERDEL_CMD\fR (string)
+.RS 4
+Определяет программу, которая будет запущена при удалении пользователя\&. Она должна удалять любые задания at/cron/печати удаляемого пользователя (передаётся в качестве первого аргумента)\&.
+.sp
+Возвращаемый сценарием код завершения не учитывается\&.
+.sp
+Here is an example script, which removes the user\*(Aqs cron, at and print jobs:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#! /bin/sh
+
+# Check for the required argument\&.
+if [ $# != 1 ]; then
+ echo "Usage: $0 username"
+ exit 1
+fi
+
+# Remove cron jobs\&.
+crontab \-r \-u $1
+
+# Remove at jobs\&.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username\&.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR \-name "[^\&.]*" \-type f \-user $1 \-delete \e;
+
+# Remove print jobs\&.
+lprm $1
+
+# All done\&.
+exit 0
+
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Включает установку группы битов umask равной битам владельца (пример: 022 \-> 002, 077 \-> 007) для не суперпользователей, если uid равен gid и имя пользователя совпадает с именем первичной группы\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "ПЕРЕКРЁСТНЫЕ ССЫЛКИ"
+.PP
+Следующие перекрёстные ссылки отражают связь между программами и их параметрам из набора для работы с теневыми паролями\&.
+.PP
+chfn
+.RS 4
+CHFN_AUTH
+CHFN_RESTRICT
+LOGIN_STRING
+.RE
+.PP
+chgpasswd
+.RS 4
+ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+chpasswd
+.RS 4
+ENCRYPT_METHOD MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+chsh
+.RS 4
+CHSH_AUTH LOGIN_STRING
+.RE
+.PP
+gpasswd
+.RS 4
+ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+groupadd
+.RS 4
+GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN
+.RE
+.PP
+groupdel
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+groupmems
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+groupmod
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpck
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpconv
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpunconv
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+lastlog
+.RS 4
+LASTLOG_UID_MAX
+.RE
+.PP
+login
+.RS 4
+CONSOLE
+CONSOLE_GROUPS DEFAULT_HOME
+ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE
+ERASECHAR FAIL_DELAY
+FAILLOG_ENAB
+FAKE_SHELL
+FTMP_FILE
+HUSHLOGIN_FILE
+ISSUE_FILE
+KILLCHAR
+LASTLOG_ENAB LASTLOG_UID_MAX
+LOGIN_RETRIES
+LOGIN_STRING
+LOGIN_TIMEOUT LOG_OK_LOGINS LOG_UNKFAIL_ENAB
+MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB
+TTYGROUP TTYPERM TTYTYPE_FILE
+ULIMIT UMASK
+USERGROUPS_ENAB
+.RE
+.PP
+newgrp / sg
+.RS 4
+SYSLOG_SG_ENAB
+.RE
+.PP
+newusers
+.RS 4
+ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB HOME_MODE PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+SUB_GID_COUNT SUB_GID_MAX SUB_GID_MIN SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK
+.RE
+.PP
+passwd
+.RS 4
+ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+pwck
+.RS 4
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+.RE
+.PP
+pwconv
+.RS 4
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+.RE
+.PP
+su
+.RS 4
+CONSOLE
+CONSOLE_GROUPS DEFAULT_HOME
+ENV_HZ ENVIRON_FILE
+ENV_PATH ENV_SUPATH
+ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE QUOTAS_ENAB
+SULOG_FILE SU_NAME
+SU_WHEEL_ONLY
+SYSLOG_SU_ENAB
+USERGROUPS_ENAB
+.RE
+.PP
+sulogin
+.RS 4
+ENV_HZ
+ENV_TZ
+.RE
+.PP
+useradd
+.RS 4
+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 SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK
+.RE
+.PP
+userdel
+.RS 4
+MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB
+.RE
+.PP
+usermod
+.RS 4
+LASTLOG_UID_MAX MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBsu\fR(1),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBpam\fR(8)\&.
diff --git a/man/ru/man5/passwd.5 b/man/ru/man5/passwd.5
new file mode 100644
index 0000000..54bead1
--- /dev/null
+++ b/man/ru/man5/passwd.5
@@ -0,0 +1,193 @@
+'\" t
+.\" Title: passwd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Форматы файлов
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "passwd" "5" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Форматы файлов"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+passwd \- файл паролей
+.SH "ОПИСАНИЕ"
+.PP
+/etc/passwd
+contains one line for each user account, with seven fields delimited by colons (\(Fo:\(Fc)\&. These fields are:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+имя пользователя для входа в систему
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+необязательный зашифрованный пароль
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+числовой идентификатор пользователя
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+числовой идентификатор группы
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+ФИО пользователя или поле комментария
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+домашний каталог пользователя
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+необязательный интерпретатор командной строки пользователя
+.RE
+.PP
+If the
+\fIpassword\fR
+field is a lower\-case
+\(Fox\(Fc, then the encrypted password is actually stored in the
+\fBshadow\fR(5)
+file instead; there
+\fImust\fR
+be a corresponding line in the
+/etc/shadow
+file, or else the user account is invalid\&.
+.PP
+The encrypted
+\fIpassword\fR
+field may be empty, in which case no password is required to authenticate as the specified login name\&. However, some applications which read the
+/etc/passwd
+file may decide not to permit
+\fIany\fR
+access at all if the
+\fIpassword\fR
+field is blank\&.
+.PP
+A
+\fIpassword\fR
+field which starts with an exclamation mark means that the password is locked\&. The remaining characters on the line represent the
+\fIpassword\fR
+field before the password was locked\&.
+.PP
+Refer to
+\fBcrypt\fR(3)
+for details on how this string is interpreted\&.
+.PP
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), 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)\&.
+.PP
+The comment field is used by various system utilities, such as
+\fBfinger\fR(1)\&.
+.PP
+The home directory field provides the name of the initial working directory\&. The
+\fBlogin\fR
+program uses this information to set the value of the
+\fB$HOME\fR
+environmental variable\&.
+.PP
+The command interpreter field provides the name of the user\*(Aqs command language interpreter, or the name of the initial program to execute\&. The
+\fBlogin\fR
+program uses this information to set the value of the
+\fB$SHELL\fR
+environmental variable\&. If this field is empty, it defaults to the value
+/bin/sh\&.
+.SH "ФАЙЛЫ"
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+необязательный файл с шифрованными паролями
+.RE
+.PP
+/etc/passwd\-
+.RS 4
+резервная копия файла /etc/passwd
+.sp
+Заметим, что этот файл используется программами из комплекта утилит shadow, но не всеми инструментами управления пользователями и паролями\&.
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBcrypt\fR(3),
+\fBgetent\fR(1),
+\fBgetpwnam\fR(3),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBpwck\fR(8),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBshadow\fR(5),
+\fBsu\fR(1),
+\fBsulogin\fR(8)\&.
diff --git a/man/ru/man5/porttime.5 b/man/ru/man5/porttime.5
new file mode 100644
index 0000000..6396ca9
--- /dev/null
+++ b/man/ru/man5/porttime.5
@@ -0,0 +1,96 @@
+'\" t
+.\" Title: porttime
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Форматы файлов
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "porttime" "5" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Форматы файлов"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+porttime \- файл с временами доступа к портам
+.SH "ОПИСАНИЕ"
+.PP
+\fIporttime\fR
+contains a list of tty devices, user names, and permitted login times\&.
+.PP
+Каждая запись состоит из трёх полей, разделённых двоеточиями\&. В первом поле содержится список устройств tty (перечисленных через запятую) или звёздочка, указывающая, что все устройства tty попадают под правило этой записи\&. Во втором поле содержится список имён пользователей (перечисленных через запятую) или звёздочка, указывающая, что все имена пользователей попадают под правило этой записи\&. В третьем поле содержится список (через запятую) допустимого времени работы\&.
+.PP
+Each access time entry consists of zero or more days of the week, abbreviated
+\fISu\fR,
+\fIMo\fR,
+\fITu\fR,
+\fIWe\fR,
+\fITh\fR,
+\fIFr\fR, and
+\fISa\fR, followed by a pair of times separated by a hyphen\&. The abbreviation
+\fIWk\fR
+may be used to represent Monday thru Friday, and
+\fIAl\fR
+may be used to indicate every day\&. If no days are given,
+\fIAl\fR
+is assumed\&.
+.SH "ПРИМЕРЫ"
+.PP
+The following entry allows access to user
+\fBjfh\fR
+on every port during weekdays from 9am to 5pm\&.
+.PP
+*:jfh:Wk0900\-1700
+.PP
+The following entries allow access only to the users
+\fIroot\fR
+and
+\fIoper\fR
+on
+/dev/console
+at any time\&. This illustrates how the
+/etc/porttime
+file is an ordered list of access times\&. Any other user would match the second entry which does not permit access at any time\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ console:root,oper:Al0000\-2400
+ console:*:
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+The following entry allows access for the user
+\fIgames\fR
+on any port during non\-working hours\&.
+.PP
+*:games:Wk1700\-0900,SaSu0000\-2400
+.SH "ФАЙЛЫ"
+.PP
+/etc/porttime
+.RS 4
+содержит разрешённое время работы определённых пользователей с определённых портов
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBlogin\fR(1)\&.
diff --git a/man/ru/man5/shadow.5 b/man/ru/man5/shadow.5
new file mode 100644
index 0000000..851094e
--- /dev/null
+++ b/man/ru/man5/shadow.5
@@ -0,0 +1,148 @@
+'\" t
+.\" Title: shadow
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Форматы файлов
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "shadow" "5" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Форматы файлов"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+shadow \- файл теневых паролей
+.SH "ОПИСАНИЕ"
+.PP
+shadow
+is a file which contains the password information for the system\*(Aqs accounts and optional aging information\&.
+.PP
+Этот файл должен быть недоступен обычному пользователю, если нужно обеспечить безопасность паролей\&.
+.PP
+Each line of this file contains 9 fields, separated by colons (\(Fo:\(Fc), in the following order:
+.PP
+\fBимя пользователя для входа в систему\fR
+.RS 4
+Должно содержать правильное имя учётной записи, которая существует в системе\&.
+.RE
+.PP
+\fBшифрованный пароль\fR
+.RS 4
+This field may be empty, in which case no passwords are required to authenticate as the specified login name\&. However, some applications which read the
+/etc/shadow
+file may decide not to permit any access at all if the password field is empty\&.
+.sp
+A password field which starts with an exclamation mark means that the password is locked\&. The remaining characters on the line represent the password field before the password was locked\&.
+.sp
+Refer to
+\fBcrypt\fR(3)
+for details on how this string is interpreted\&.
+.sp
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), 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)\&.
+.RE
+.PP
+\fBдата последней смены пароля\fR
+.RS 4
+Дата последней смены пароля в днях начиная с 1 января 1970 года\&.
+.sp
+The value 0 has a special meaning, which is that the user should change her password the next time she will log in the system\&.
+.sp
+Пустое значение обозначает, что проверка устаревания пароля выключена\&.
+.RE
+.PP
+\fBминимальный срок действия пароля\fR
+.RS 4
+Минимальный срок действия пароля в днях, которые пользователь должен ждать, чтобы поменять пароль\&.
+.sp
+Пустое значение поля и 0 отключают минимальный срок действия пароля\&.
+.RE
+.PP
+\fBмаксимальный срок действия пароля\fR
+.RS 4
+Максимальный срок действия пароля в днях, после которого пользователь должен изменить пароль\&.
+.sp
+По прошествии этого количества дней пароль может быть ещё действительным\&. Пользователя нужно попросить изменить пароль при следующем входе\&.
+.sp
+Пустое значение поля означает, что нет максимального срока действия пароля, нет периода предупреждения о пароле и нет периода неактивности пароля (смотрите далее)\&.
+.sp
+Если максимальный срок действия пароля меньше чем минимальный срок действия пароля, то пользователь не сможет изменить свой пароль\&.
+.RE
+.PP
+\fBпериод предупреждения о пароле\fR
+.RS 4
+Количество дней до устаревания пароля (смотрите максимальный срок действия пароля) во время которых пользователю выдаётся предупреждение\&.
+.sp
+Пустое значение поля и 0 отключают период предупреждения о пароле\&.
+.RE
+.PP
+\fBпериод неактивности пароля\fR
+.RS 4
+Количество дней после устаревания пароля (смотрите максимальный срок действия пароля) во время которых пароль всё ещё принимается (и пользователь должен обновить свой пароль при следующем входе)\&.
+.sp
+После устаревания пароля и истечения этого периода устаревания вход с текущим паролем становится невозможным\&. Пользователь должен обратиться к администратору\&.
+.sp
+Пустое значение поля означает, что период неактивности отсутствует\&.
+.RE
+.PP
+\fBдата истечения срока действия учётной записи\fR
+.RS 4
+Дата истечения срока действия учётной записи, указывается в днях начиная с 1 января 1970 года\&.
+.sp
+Note that an account expiration differs from a password expiration\&. In case of an account expiration, the user shall not be allowed to login\&. In case of a password expiration, the user is not allowed to login using her password\&.
+.sp
+Пустое значение обозначает, что учётная запись никогда не устаревает\&.
+.sp
+Значение 0 не должно использоваться, так как это может рассматриваться как неустаревающая учётная запись или что запись устарела 1 января 1970 года\&.
+.RE
+.PP
+\fBзарезервированное поле\fR
+.RS 4
+Это поле зарезервировано для использования в будущем\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.PP
+/etc/shadow\-
+.RS 4
+резервная копия файла /etc/shadow
+.sp
+Заметим, что этот файл используется программами из комплекта утилит shadow, но не всеми инструментами управления пользователями и паролями\&.
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBchage\fR(1),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBpasswd\fR(5),
+\fBpwck\fR(8),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBsu\fR(1),
+\fBsulogin\fR(8)\&.
diff --git a/man/ru/man5/suauth.5 b/man/ru/man5/suauth.5
new file mode 100644
index 0000000..c4b59ba
--- /dev/null
+++ b/man/ru/man5/suauth.5
@@ -0,0 +1,146 @@
+'\" t
+.\" Title: suauth
+.\" Author: Marek Micha\(/lkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Форматы файлов
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "suauth" "5" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Форматы файлов"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+suauth \- файл управления командой su
+.SH "СИНТАКСИС"
+.HP \w'\fB/etc/suauth\fR\ 'u
+\fB/etc/suauth\fR
+.SH "ОПИСАНИЕ"
+.PP
+The file
+/etc/suauth
+is referenced whenever the su command is called\&. It can change the behaviour of the su command, based upon:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ 1) the user su is targeting
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+2) пользователя, запустившего команду su (или группы, членом которой он может быть)
+.PP
+Формат файла показан ниже, строки начинающиеся с # считаются комментарием и игнорируются;
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ to\-id:from\-id:ACTION
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Where to\-id is either the word
+\fIALL\fR, a list of usernames delimited by "," or the words
+\fIALL EXCEPT\fR
+followed by a list of usernames delimited by ","\&.
+.PP
+from\-id is formatted the same as to\-id except the extra word
+\fIGROUP\fR
+is recognized\&.
+\fIALL EXCEPT GROUP\fR
+is perfectly valid too\&. Following
+\fIGROUP\fR
+appears one or more group names, delimited by ","\&. It is not sufficient to have primary group id of the relevant group, an entry in
+\fB/etc/group\fR(5)
+is necessary\&.
+.PP
+В поле ДЕЙСТВИЕ может быть только одно из следующих значений:
+.PP
+\fIDENY\fR
+.RS 4
+Команда su останавливает выполнение, даже не спрашивая пароль\&.
+.RE
+.PP
+\fINOPASS\fR
+.RS 4
+Команда su выполняется без запроса пароля\&.
+.RE
+.PP
+\fIOWNPASS\fR
+.RS 4
+Чтобы успешно выполнить команду su, пользователь должен ввести свой собственный пароль\&.
+.RE
+.PP
+Заметим, что тут используются три поля, разделённых двоеточиями\&. Никаких пробелов не допускается около двоеточий\&. Также заметим, что файл просматривается строка за строкой, и первое подходящее правило будет использовано без проверки оставшихся правил\&. Это позволяет системному администратору осуществлять любой контроль, какой он пожелает\&.
+.SH "ПРИМЕР"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ # sample /etc/suauth file
+ #
+ # A couple of privileged usernames may
+ # su to root with their own password\&.
+ #
+ root:chris,birddog:OWNPASS
+ #
+ # Anyone else may not su to root unless in
+ # group wheel\&. This is how BSD does things\&.
+ #
+ root:ALL EXCEPT GROUP wheel:DENY
+ #
+ # Perhaps terry and birddog are accounts
+ # owned by the same person\&.
+ # Access can be arranged between them
+ # with no password\&.
+ #
+ terry:birddog:NOPASS
+ birddog:terry:NOPASS
+ #
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "ФАЙЛЫ"
+.PP
+/etc/suauth
+.RS 4
+.RE
+.SH "ОШИБКИ РЕАЛИЗАЦИИ"
+.PP
+Может быть несколько угроз\&. Анализатор файла, в частности, не прощает синтаксических ошибок, ожидая, что не будет недопустимых пробелов (кроме как в начале и конце строк) и специальных слов, разделяющих различные вещи\&.
+.SH "ДИАГНОСТИКА"
+.PP
+An error parsing the file is reported using
+\fBsyslogd\fR(8)
+as level ERR on facility AUTH\&.
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBsu\fR(1)\&.
diff --git a/man/ru/man8/chgpasswd.8 b/man/ru/man8/chgpasswd.8
new file mode 100644
index 0000000..120042b
--- /dev/null
+++ b/man/ru/man8/chgpasswd.8
@@ -0,0 +1,208 @@
+'\" t
+.\" Title: chgpasswd
+.\" Author: Thomas K\(/loczko <kloczek@pld.org.pl>
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Команды управления системой
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "chgpasswd" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+chgpasswd \- обновляет пароли групп в пакетном режиме
+.SH "СИНТАКСИС"
+.HP \w'\fBchgpasswd\fR\ 'u
+\fBchgpasswd\fR [\fIпараметры\fR]
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBchgpasswd\fR
+command reads a list of group name and password pairs from standard input and uses this information to update a set of existing groups\&. Each line is of the format:
+.PP
+\fIgroup_name\fR:\fIpassword\fR
+.PP
+By default the supplied password must be in clear\-text, and is encrypted by
+\fBchgpasswd\fR\&.
+.PP
+The default encryption algorithm can be defined for the system with the
+\fBENCRYPT_METHOD\fR
+variable of
+/etc/login\&.defs, and can be overwritten with the
+\fB\-e\fR,
+\fB\-m\fR, or
+\fB\-c\fR
+options\&.
+.PP
+Данная команда предназначена для работы в крупных системных средах, где за один раз заводится несколько учётных записей\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+The options which apply to the
+\fBchgpasswd\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+Использовать указанный метод для шифрования паролей\&.
+.sp
+Возможные методы: DES, MD5, NONE и SHA256 или SHA512, если эти методы поддерживается libc\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-encrypted\fR
+.RS 4
+Передаваемые пароли заданы в шифрованном виде\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-md5\fR
+.RS 4
+Использовать алгоритм шифрования MD5 вместо DES, если пароли передаются не шифрованными\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+Использовать указанное количество раундов шифрования паролей\&.
+.sp
+Значение 0 означает, что система выберет количество раундов по умолчанию для выбранного метода шифрования (5000)\&.
+.sp
+Минимальное значение равно 1000, а максимальное значение равно 999,999,999\&.
+.sp
+Вы можете использовать этот параметр только при методе шифрования SHA256 или SHA512\&.
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+Не забудьте установить права или umask, чтобы не позволить чтение не шифрованных файлов другими пользователями\&.
+.PP
+Вы должны проверить, что пароль и метод шифрования соответствует политике системных паролей\&.
+.SH "НАСТРОЙКА"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+Задаёт системный алгоритм шифрования по умолчанию для шифрования паролей (используется, если алгоритм не указан в командной строке)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Значение по умолчанию равно 0, означающее, что ограничения на количество членов в группе нет\&.
+.sp
+Данная возможность (разделение группы) позволяет ограничить длину строк в файле групп\&. Это полезно для ограничения длины строк групп NIS в 1024 символа\&.
+.sp
+Если вам нужно такое ограничение, укажите значение 25\&.
+.sp
+Замечание: разделение групп поддерживается не всеми инструментами (даже в наборе инструментов Shadow)\&. Вы не должны использовать эту переменную, если вам действительно это ненужно\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+Увеличение количества раундов повышает сложность подбора пароля простым перебором\&. Но заметим, что при этом для аутентификации пользователей требуется большее количество процессорных ресурсов\&.
+.sp
+Если не задана, то libc выбирает значение количества раундов по умолчанию (5000)\&.
+.sp
+Значения должны лежать в диапазоне 1000\-999999999\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBgpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBlogin.defs\fR(5)\&.
diff --git a/man/ru/man8/chpasswd.8 b/man/ru/man8/chpasswd.8
new file mode 100644
index 0000000..4207b6a
--- /dev/null
+++ b/man/ru/man8/chpasswd.8
@@ -0,0 +1,212 @@
+'\" t
+.\" Title: chpasswd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Команды управления системой
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "chpasswd" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+chpasswd \- обновляет пароли в пакетном режиме
+.SH "СИНТАКСИС"
+.HP \w'\fBchpasswd\fR\ 'u
+\fBchpasswd\fR [\fIпараметры\fR]
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBchpasswd\fR
+command reads a list of user name and password pairs from standard input and uses this information to update a group of existing users\&. Each line is of the format:
+.PP
+\fIuser_name\fR:\fIpassword\fR
+.PP
+By default the passwords must be supplied in clear\-text, and are encrypted by
+\fBchpasswd\fR\&. Also the password age will be updated, if present\&.
+.PP
+The default encryption algorithm can be defined for the system with the
+\fBENCRYPT_METHOD\fR
+or
+\fBMD5_CRYPT_ENAB\fR
+variables of
+/etc/login\&.defs, and can be overwritten with the
+\fB\-e\fR,
+\fB\-m\fR, or
+\fB\-c\fR
+options\&.
+.PP
+\fBchpasswd\fR
+first updates all the passwords in memory, and then commits all the changes to disk if no errors occurred for any user\&.
+.PP
+Данная команда предназначена для работы в крупных системных средах, где за один раз заводится несколько учётных записей\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+The options which apply to the
+\fBchpasswd\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR\ \&\fIMETHOD\fR
+.RS 4
+Использовать указанный метод для шифрования паролей\&.
+.sp
+Возможные методы: DES, MD5, NONE и SHA256 или SHA512, если эти методы поддерживается libc\&.
+.sp
+By default (if none of the
+\fB\-c\fR,
+\fB\-m\fR, or
+\fB\-e\fR
+options are specified), the encryption method is defined by the
+\fBENCRYPT_METHOD\fR
+or
+\fBMD5_CRYPT_ENAB\fR
+variables of
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-encrypted\fR
+.RS 4
+Передаваемые пароли заданы в шифрованном виде\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-md5\fR
+.RS 4
+Использовать алгоритм шифрования MD5 вместо DES, если пароли передаются не шифрованными\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR\ \&\fIROUNDS\fR
+.RS 4
+Использовать указанное количество раундов шифрования паролей\&.
+.sp
+Значение 0 означает, что система выберет количество раундов по умолчанию для выбранного метода шифрования (5000)\&.
+.sp
+Минимальное значение равно 1000, а максимальное значение равно 999,999,999\&.
+.sp
+Вы можете использовать этот параметр только при методе шифрования SHA256 или SHA512\&.
+.sp
+By default, the number of rounds is defined by the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+and
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+variables in
+/etc/login\&.defs\&.
+.RE
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+Не забудьте установить права или umask, чтобы не позволить чтение не шифрованных файлов другими пользователями\&.
+.SH "НАСТРОЙКА"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+Задаёт системный алгоритм шифрования по умолчанию для шифрования паролей (используется, если алгоритм не указан в командной строке)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+Увеличение количества раундов повышает сложность подбора пароля простым перебором\&. Но заметим, что при этом для аутентификации пользователей требуется большее количество процессорных ресурсов\&.
+.sp
+Если не задана, то libc выбирает значение количества раундов по умолчанию (5000)\&.
+.sp
+Значения должны лежать в диапазоне 1000\-999999999\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBpasswd\fR(1),
+\fBnewusers\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8)\&.
diff --git a/man/ru/man8/faillog.8 b/man/ru/man8/faillog.8
new file mode 100644
index 0000000..78f029f
--- /dev/null
+++ b/man/ru/man8/faillog.8
@@ -0,0 +1,165 @@
+'\" t
+.\" Title: faillog
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Команды управления системой
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "faillog" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+faillog \- показывает записи из файла faillog или задаёт предел неудачных попыток входа в систему
+.SH "СИНТАКСИС"
+.HP \w'\fBfaillog\fR\ 'u
+\fBfaillog\fR [\fIпараметры\fR]
+.SH "ОПИСАНИЕ"
+.PP
+\fBfaillog\fR
+displays the contents of the failure log database (/var/log/faillog)\&. It can also set the failure counters and limits\&. When
+\fBfaillog\fR
+is run without arguments, it only displays the faillog records of the users who had a login failure\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+The options which apply to the
+\fBfaillog\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+Display (or act on) faillog records for all users having an entry in the
+faillog
+database\&.
+.sp
+The range of users can be restricted with the
+\fB\-u\fR
+option\&.
+.sp
+В режиме вывода это ограничивает вывод списком существующих пользователей, но при этом для них выводятся даже пустые записи faillog\&.
+.sp
+With the
+\fB\-l\fR,
+\fB\-m\fR,
+\fB\-r\fR,
+\fB\-t\fR
+options, the users\*(Aq records are changed, even if the user does not exist on the system\&. This is useful to reset records of users that have been deleted or to set a policy in advance for a range of users\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\-secs\fR\ \&\fISEC\fR
+.RS 4
+Lock account for
+\fISEC\fR
+seconds after failed login\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-maximum\fR\ \&\fIMAX\fR
+.RS 4
+Set the maximum number of login failures after the account is disabled to
+\fIMAX\fR\&.
+.sp
+Selecting a
+\fIMAX\fR
+value of 0 has the effect of not placing a limit on the number of failed logins\&.
+.sp
+The maximum failure count should always be 0 for
+\fIroot\fR
+to prevent a denial of services attack against the system\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-reset\fR
+.RS 4
+Сбросить счётчик неудачных попыток входа\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR\ \&\fIDAYS\fR
+.RS 4
+Display faillog records more recent than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR\ \&\fILOGIN\fR|\fIRANGE\fR
+.RS 4
+Display faillog record or maintains failure counters and limits (if used with
+\fB\-l\fR,
+\fB\-m\fR
+or
+\fB\-r\fR
+options) only for the specified user(s)\&.
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+When none of the
+\fB\-l\fR,
+\fB\-m\fR, or
+\fB\-r\fR
+options are used,
+\fBfaillog\fR
+displays the faillog record of the specified user(s)\&.
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+\fBfaillog\fR
+only prints out users with no successful login since the last failure\&. To print out a user who has had a successful login since their last failure, you must explicitly request the user with the
+\fB\-u\fR
+flag, or print out all users with the
+\fB\-a\fR
+flag\&.
+.SH "ФАЙЛЫ"
+.PP
+/var/log/faillog
+.RS 4
+журнал неудавшихся попыток входа в систему
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBlogin\fR(1),
+\fBfaillog\fR(5)\&.
diff --git a/man/ru/man8/groupadd.8 b/man/ru/man8/groupadd.8
new file mode 100644
index 0000000..d10ec2b
--- /dev/null
+++ b/man/ru/man8/groupadd.8
@@ -0,0 +1,257 @@
+'\" t
+.\" Title: groupadd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Команды управления системой
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "groupadd" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+groupadd \- создаёт новую группу
+.SH "СИНТАКСИС"
+.HP \w'\fBgroupadd\fR\ 'u
+\fBgroupadd\fR [\fIпараметры\fR] \fIгруппа\fR
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBgroupadd\fR
+command creates a new group account using the values specified on the command line plus the default values from the system\&. The new group will be entered into the system files as needed\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+The options which apply to the
+\fBgroupadd\fR
+command are:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option causes the command to simply exit with success status if the specified group already exists\&. When used with
+\fB\-g\fR, and the specified GID already exists, another (unique) GID is chosen (i\&.e\&.
+\fB\-g\fR
+is turned off)\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGID\fR
+.RS 4
+The numerical value of the group\*(Aqs ID\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&. The default is to use the smallest ID value greater than or equal to
+\fBGID_MIN\fR
+and greater than every other group\&.
+.sp
+See also the
+\fB\-r\fR
+option and the
+\fBGID_MAX\fR
+description\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-K\fR, \fB\-\-key\fR\ \&\fIKEY\fR=\fIVALUE\fR
+.RS 4
+Overrides
+/etc/login\&.defs
+defaults (GID_MIN, GID_MAX and others)\&. Multiple
+\fB\-K\fR
+options can be specified\&.
+.sp
+Example:
+\fB\-K\fR\ \&\fIGID_MIN\fR=\fI100\fR\ \&
+\fB\-K\fR\ \&\fIGID_MAX\fR=\fI499\fR
+.sp
+Note:
+\fB\-K\fR\ \&\fIGID_MIN\fR=\fI10\fR,\fIGID_MAX\fR=\fI499\fR
+doesn\*(Aqt work yet\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+Разрешить добавление группы с не уникальным GID\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&. The default is to disable the password\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+Вы должны проверить, что пароль соответствует политике системных паролей\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Создать системную группу\&.
+.sp
+The numeric identifiers of new system groups are chosen in the
+\fBSYS_GID_MIN\fR\-\fBSYS_GID_MAX\fR
+range, defined in
+login\&.defs, instead of
+\fBGID_MIN\fR\-\fBGID_MAX\fR\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.SH "НАСТРОЙКА"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBGID_MIN\fR
+(resp\&.
+\fBGID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Значение по умолчанию равно 0, означающее, что ограничения на количество членов в группе нет\&.
+.sp
+Данная возможность (разделение группы) позволяет ограничить длину строк в файле групп\&. Это полезно для ограничения длины строк групп NIS в 1024 символа\&.
+.sp
+Если вам нужно такое ограничение, укажите значение 25\&.
+.sp
+Замечание: разделение групп поддерживается не всеми инструментами (даже в наборе инструментов Shadow)\&. Вы не должны использовать эту переменную, если вам действительно это ненужно\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_GID_MIN\fR
+(resp\&.
+\fBSYS_GID_MAX\fR) is 101 (resp\&.
+\fBGID_MIN\fR\-1)\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+Имена групп должны начинаться со строчной буквы или символа подчёркивания, и должны состоять только из строчных букв, цифр, символов подчёркивания и минус\&. Они могут заканчиваться знаком доллара\&. Это можно описать регулярным выражением: [a\-z_][a\-z0\-9_\-]*[$]?
+.PP
+Groupnames may only be up to 16 characters long\&.
+.PP
+Нельзя добавить группу NIS или LDAP\&. Это необходимо делать на соответствующем сервере\&.
+.PP
+If the groupname already exists in an external group database such as NIS or LDAP,
+\fBgroupadd\fR
+will deny the group creation request\&.
+.SH "ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ"
+.PP
+The
+\fBgroupadd\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+GID not unique (when
+\fB\-o\fR
+not used)
+.RE
+.PP
+\fI9\fR
+.RS 4
+group name not unique
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/ru/man8/groupdel.8 b/man/ru/man8/groupdel.8
new file mode 100644
index 0000000..a0cf697
--- /dev/null
+++ b/man/ru/man8/groupdel.8
@@ -0,0 +1,145 @@
+'\" t
+.\" Title: groupdel
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Команды управления системой
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "groupdel" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+groupdel \- удаляет группу
+.SH "СИНТАКСИС"
+.HP \w'\fBgroupdel\fR\ 'u
+\fBgroupdel\fR [\fIпараметры\fR] \fIГРУППА\fR
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBgroupdel\fR
+command modifies the system account files, deleting all entries that refer to
+\fIGROUP\fR\&. The named group must exist\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+The options which apply to the
+\fBgroupdel\fR
+command are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+Вы не можете удалить группу, если она является первичной для существующего пользователя\&. Вы должны удалить пользователя перед тем как удалять группу\&.
+.PP
+Вы должны вручную проверить все файловые системы, чтобы убедиться, что не осталось файлов, принадлежащих удалённой группе\&.
+.SH "НАСТРОЙКА"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Значение по умолчанию равно 0, означающее, что ограничения на количество членов в группе нет\&.
+.sp
+Данная возможность (разделение группы) позволяет ограничить длину строк в файле групп\&. Это полезно для ограничения длины строк групп NIS в 1024 символа\&.
+.sp
+Если вам нужно такое ограничение, укажите значение 25\&.
+.sp
+Замечание: разделение групп поддерживается не всеми инструментами (даже в наборе инструментов Shadow)\&. Вы не должны использовать эту переменную, если вам действительно это ненужно\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.SH "ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ"
+.PP
+The
+\fBgroupdel\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI8\fR
+.RS 4
+can\*(Aqt remove user\*(Aqs primary group
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/ru/man8/groupmems.8 b/man/ru/man8/groupmems.8
new file mode 100644
index 0000000..2b1d299
--- /dev/null
+++ b/man/ru/man8/groupmems.8
@@ -0,0 +1,180 @@
+'\" t
+.\" Title: groupmems
+.\" Author: George Kraft, IV
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Команды управления системой
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "groupmems" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+groupmems \- управляет членами первичной группы пользователя
+.SH "СИНТАКСИС"
+.HP \w'\fBgroupmems\fR\ 'u
+\fBgroupmems\fR \-a\ \fIuser_name\fR | \-d\ \fIuser_name\fR | [\-g\ \fIgroup_name\fR] | \-l | \-p
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBgroupmems\fR
+command 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)\&.
+.PP
+Only the superuser, as administrator, can use
+\fBgroupmems\fR
+to alter the memberships of other groups\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+The options which apply to the
+\fBgroupmems\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-add\fR\ \&\fIuser_name\fR
+.RS 4
+Add a user to the group membership list\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR\ \&\fIuser_name\fR
+.RS 4
+Удалить пользователя из группы\&.
+.sp
+If the
+/etc/gshadow
+file exist, the user will be removed from the list of members and administrators of the group\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-group\fR\ \&\fIgroup_name\fR
+.RS 4
+Суперпользователь может указать группу, в которой нужно изменить список членов\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-list\fR
+.RS 4
+Показать список членов группы\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-purge\fR
+.RS 4
+Вычистить всех пользователей из списка членов группы\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.SH "НАСТРОЙКА"
+.PP
+The
+\fBgroupmems\fR
+executable should be in mode
+2710
+as user
+\fIroot\fR
+and in group
+\fIgroups\fR\&. The system administrator can add users to group
+\fIgroups\fR
+to allow or disallow them using the
+\fBgroupmems\fR
+utility to manage their own group membership list\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ $ groupadd \-r groups
+ $ chmod 2710 groupmems
+ $ chown root\&.groups groupmems
+ $ groupmems \-g groups \-a gk4
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "НАСТРОЙКА"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Значение по умолчанию равно 0, означающее, что ограничения на количество членов в группе нет\&.
+.sp
+Данная возможность (разделение группы) позволяет ограничить длину строк в файле групп\&. Это полезно для ограничения длины строк групп NIS в 1024 символа\&.
+.sp
+Если вам нужно такое ограничение, укажите значение 25\&.
+.sp
+Замечание: разделение групп поддерживается не всеми инструментами (даже в наборе инструментов Shadow)\&. Вы не должны использовать эту переменную, если вам действительно это ненужно\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/ru/man8/groupmod.8 b/man/ru/man8/groupmod.8
new file mode 100644
index 0000000..5527a8e
--- /dev/null
+++ b/man/ru/man8/groupmod.8
@@ -0,0 +1,233 @@
+'\" t
+.\" Title: groupmod
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Команды управления системой
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "groupmod" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+groupmod \- изменяет определение группы в системе
+.SH "СИНТАКСИС"
+.HP \w'\fBgroupmod\fR\ 'u
+\fBgroupmod\fR [\fIпараметры\fR] \fIГРУППА\fR
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBgroupmod\fR
+command modifies the definition of the specified
+\fIGROUP\fR
+by modifying the appropriate entry in the group database\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+The options which apply to the
+\fBgroupmod\fR
+command are:
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGID\fR
+.RS 4
+The group ID of the given
+\fIGROUP\fR
+will be changed to
+\fIGID\fR\&.
+.sp
+The value of
+\fIGID\fR
+must be a non\-negative decimal integer\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&.
+.sp
+У пользователей, которых эта группа является первичной, будет выполнено соответствующее обновление\&.
+.sp
+Any files that have the old group ID and must continue to belong to
+\fIGROUP\fR, must have their group ID changed manually\&.
+.sp
+No checks will be performed with regard to the
+\fBGID_MIN\fR,
+\fBGID_MAX\fR,
+\fBSYS_GID_MIN\fR, or
+\fBSYS_GID_MAX\fR
+from
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-new\-name\fR\ \&\fINEW_GROUP\fR
+.RS 4
+The name of the group will be changed from
+\fIGROUP\fR
+to
+\fINEW_GROUP\fR
+name\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+When used with the
+\fB\-g\fR
+option, allow to change the group
+\fIGID\fR
+to a non\-unique value\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+Вы должны проверить, что пароль соответствует политике системных паролей\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.SH "НАСТРОЙКА"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Значение по умолчанию равно 0, означающее, что ограничения на количество членов в группе нет\&.
+.sp
+Данная возможность (разделение группы) позволяет ограничить длину строк в файле групп\&. Это полезно для ограничения длины строк групп NIS в 1024 символа\&.
+.sp
+Если вам нужно такое ограничение, укажите значение 25\&.
+.sp
+Замечание: разделение групп поддерживается не всеми инструментами (даже в наборе инструментов Shadow)\&. Вы не должны использовать эту переменную, если вам действительно это ненужно\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.SH "ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ"
+.PP
+The
+\fBgroupmod\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+E_SUCCESS: success
+.RE
+.PP
+\fI2\fR
+.RS 4
+E_USAGE: invalid command syntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+E_BAD_ARG: invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+E_GID_IN_USE: specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI6\fR
+.RS 4
+E_NOTFOUND: specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI9\fR
+.RS 4
+E_NAME_IN_USE: group name already in use
+.RE
+.PP
+\fI10\fR
+.RS 4
+E_GRP_UPDATE: can\*(Aqt update group file
+.RE
+.PP
+\fI11\fR
+.RS 4
+E_CLEANUP_SERVICE: can\*(Aqt setup cleanup service
+.RE
+.PP
+\fI12\fR
+.RS 4
+E_PAM_USERNAME: can\*(Aqt determine your username for use with pam
+.RE
+.PP
+\fI13\fR
+.RS 4
+E_PAM_ERROR: pam returned an error, see syslog facility id groupmod for the PAM error message
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/ru/man8/grpck.8 b/man/ru/man8/grpck.8
new file mode 100644
index 0000000..eaec6fa
--- /dev/null
+++ b/man/ru/man8/grpck.8
@@ -0,0 +1,247 @@
+'\" t
+.\" Title: grpck
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Команды управления системой
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "grpck" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+grpck \- проверяет корректность файлов групп
+.SH "СИНТАКСИС"
+.HP \w'\fBgrpck\fR\ 'u
+\fBgrpck\fR [параметры] [\fIгруппа\fR\ [\ \fIshadow\fR\ ]]
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBgrpck\fR
+command verifies the integrity of the groups information\&. It checks that all entries in
+/etc/group
+and /etc/gshadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+Выполняются следующие проверки:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+правильное количество полей
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+уникальность и корректность имени группы
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid group identifier
+(/etc/group only)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid list of members
+and administrators
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a corresponding entry in the
+/etc/gshadow
+file (respectively
+/etc/group
+for the
+gshadow
+checks)
+.RE
+.PP
+The checks for correct number of fields and unique group name are fatal\&. If an entry has the wrong number of fields, the user will be prompted to delete the entire line\&. If the user does not answer affirmatively, all further checks are bypassed\&. An entry with a duplicated group name is prompted for deletion, but the remaining checks will still be made\&. All other errors are warnings and the user is encouraged to run the
+\fBgroupmod\fR
+command to correct the error\&.
+.PP
+The commands which operate on the
+/etc/group
+and /etc/gshadow files
+are not able to alter corrupted or duplicated entries\&.
+\fBgrpck\fR
+should be used in those circumstances to remove the offending entries\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+The
+\fB\-r\fR
+and
+\fB\-s\fR
+options cannot be combined\&.
+.PP
+The options which apply to the
+\fBgrpck\fR
+command are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-read\-only\fR
+.RS 4
+Execute the
+\fBgrpck\fR
+command in read\-only mode\&. This causes all questions regarding changes to be answered
+\fIno\fR
+without user intervention\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sort\fR
+.RS 4
+Sort entries in
+/etc/group
+and /etc/gshadow
+by GID\&.
+.RE
+.PP
+By default,
+\fBgrpck\fR
+operates on
+/etc/group
+and /etc/gshadow\&. The user may select alternate files with the
+\fIgroup\fR
+and \fIshadow\fR parameters\&.
+.SH "НАСТРОЙКА"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Значение по умолчанию равно 0, означающее, что ограничения на количество членов в группе нет\&.
+.sp
+Данная возможность (разделение группы) позволяет ограничить длину строк в файле групп\&. Это полезно для ограничения длины строк групп NIS в 1024 символа\&.
+.sp
+Если вам нужно такое ограничение, укажите значение 25\&.
+.sp
+Замечание: разделение групп поддерживается не всеми инструментами (даже в наборе инструментов Shadow)\&. Вы не должны использовать эту переменную, если вам действительно это ненужно\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.SH "ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ"
+.PP
+The
+\fBgrpck\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI2\fR
+.RS 4
+one or more bad group entries
+.RE
+.PP
+\fI3\fR
+.RS 4
+can\*(Aqt open group files
+.RE
+.PP
+\fI4\fR
+.RS 4
+can\*(Aqt lock group files
+.RE
+.PP
+\fI5\fR
+.RS 4
+can\*(Aqt update group files
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBgroup\fR(5),
+\fBgroupmod\fR(8),
+\fBgshadow\fR(5),
+\fBpasswd\fR(5),
+\fBpwck\fR(8),
+\fBshadow\fR(5)\&.
diff --git a/man/ru/man8/grpconv.8 b/man/ru/man8/grpconv.8
new file mode 100644
index 0000000..6eed9e8
--- /dev/null
+++ b/man/ru/man8/grpconv.8
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/ru/man8/grpunconv.8 b/man/ru/man8/grpunconv.8
new file mode 100644
index 0000000..6eed9e8
--- /dev/null
+++ b/man/ru/man8/grpunconv.8
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/ru/man8/lastlog.8 b/man/ru/man8/lastlog.8
new file mode 100644
index 0000000..01a5b20
--- /dev/null
+++ b/man/ru/man8/lastlog.8
@@ -0,0 +1,137 @@
+'\" t
+.\" Title: lastlog
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Команды управления системой
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "lastlog" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+lastlog \- выводит отчёт о последней регистрации в системе всех или указанного пользователя
+.SH "СИНТАКСИС"
+.HP \w'\fBlastlog\fR\ 'u
+\fBlastlog\fR [\fIпараметры\fR]
+.SH "ОПИСАНИЕ"
+.PP
+\fBlastlog\fR
+formats and prints the contents of the last login log
+/var/log/lastlog
+file\&. The
+\fIlogin\-name\fR,
+\fIport\fR, and
+\fIlast login time\fR
+will be printed\&. The default (no flags) causes lastlog entries to be printed, sorted by their order in
+/etc/passwd\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+The options which apply to the
+\fBlastlog\fR
+command are:
+.PP
+\fB\-b\fR, \fB\-\-before\fR\ \&\fIDAYS\fR
+.RS 4
+Print only lastlog records older than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-C\fR, \fB\-\-clear\fR
+.RS 4
+Clear lastlog record of a user\&. This option can be used only together with
+\fB\-u\fR
+(\fB\-\-user\fR))\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-S\fR, \fB\-\-set\fR
+.RS 4
+Set lastlog record of a user to the current time\&. This option can be used only together with
+\fB\-u\fR
+(\fB\-\-user\fR))\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR\ \&\fIDAYS\fR
+.RS 4
+Print the lastlog records more recent than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR\ \&\fILOGIN\fR|\fIRANGE\fR
+.RS 4
+Показать запись lastlog только для указанного пользователя(ей)\&.
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+If the user has never logged in the message
+\fI** Never logged in**\fR
+will be displayed instead of the port and time\&.
+.PP
+Будут показаны записи только для пользователей, имеющих в системе данный момент\&. В журнале могут существовать записи для удалённых ранее пользователей\&.
+.SH "ЗАМЕЧАНИЕ"
+.PP
+The
+lastlog
+file is a database which contains info on the last login of each user\&. You should not rotate it\&. It is a sparse file, so its size on the disk is usually much smaller than the one shown by "\fBls \-l\fR" (which can indicate a really big file if you have in
+passwd
+users with a high UID)\&. You can display its real size with "\fBls \-s\fR"\&.
+.SH "НАСТРОЙКА"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/var/log/lastlog
+.RS 4
+содержит список завершённых сеансов работы с системой
+.RE
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+Большие промежутки в значениях идентификаторов пользователей приводят к тому, что программа некоторое время ничего не выводит на экран (то есть, если в базе данных lastlog нет пользователей с идентификаторами с 170 по 800, то во время обработки UID с 171 по 799 программа кажется повисшей)\&.
diff --git a/man/ru/man8/logoutd.8 b/man/ru/man8/logoutd.8
new file mode 100644
index 0000000..1a97a36
--- /dev/null
+++ b/man/ru/man8/logoutd.8
@@ -0,0 +1,57 @@
+'\" t
+.\" Title: logoutd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Команды управления системой
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "logoutd" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+logoutd \- контролирует временные интервалы работы в системе
+.SH "СИНТАКСИС"
+.HP \w'\fBlogoutd\fR\ 'u
+\fBlogoutd\fR
+.SH "ОПИСАНИЕ"
+.PP
+\fBlogoutd\fR
+enforces the login time and port restrictions specified in
+/etc/porttime\&.
+\fBlogoutd\fR
+should be started from
+/etc/rc\&. The
+/var/run/utmp
+file is scanned periodically and each user name is checked to see if the named user is permitted on the named port at the current time\&. Any login session which is violating the restrictions in
+/etc/porttime
+is terminated\&.
+.SH "ФАЙЛЫ"
+.PP
+/etc/porttime
+.RS 4
+содержит разрешённое время работы определённых пользователей с определённых портов
+.RE
+.PP
+/var/run/utmp
+.RS 4
+содержит список работающих сеансов в системе
+.RE
diff --git a/man/ru/man8/newusers.8 b/man/ru/man8/newusers.8
new file mode 100644
index 0000000..dd146ed
--- /dev/null
+++ b/man/ru/man8/newusers.8
@@ -0,0 +1,449 @@
+'\" t
+.\" Title: newusers
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Команды управления системой
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "newusers" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+newusers \- обновляет и создаёт новые учётные записи пользователей в пакетном режиме
+.SH "СИНТАКСИС"
+.HP \w'\fBnewusers\fR\ 'u
+\fBnewusers\fR [\fIпараметры\fR] [\fIфайл\fR]
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBnewusers\fR
+command reads a
+\fIfile\fR
+(or the standard input by default) and uses this information to update a set of existing users or to create new users\&. Each line is in the same format as the standard password file (see
+\fBpasswd\fR(5)) with the exceptions explained below:
+.PP
+pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell
+.PP
+\fIpw_name\fR
+.RS 4
+Имя пользователя\&.
+.sp
+It can be the name of a new user or the name of an existing user (or a user created before by
+\fBnewusers\fR)\&. In case of an existing user, the user\*(Aqs information will be changed, otherwise a new user will be created\&.
+.RE
+.PP
+\fIpw_passwd\fR
+.RS 4
+Это поле будет зашифровано и использовано как новое значение шифрованного пароля\&.
+.RE
+.PP
+\fI pw_gid\fR
+.RS 4
+Это поле используется для определения UID пользователя\&.
+.sp
+If the field is empty, a new (unused) UID will be defined automatically by
+\fBnewusers\fR\&.
+.sp
+Если в этом поле указано число, то оно будет использовано в качестве UID\&.
+.sp
+If this field contains the name of an existing user (or the name of a user created before by
+\fBnewusers\fR), the UID of the specified user will be used\&.
+.sp
+Если изменяется UID существующего пользователя, то у файлов, которыми владел этот пользователь, нужно вручную переопределить владельца\&.
+.RE
+.PP
+\fIpw_gid\fR
+.RS 4
+Это поле используется для определения ID первичной группы пользователя\&.
+.sp
+If this field contains the name of an existing group (or a group created before by
+\fBnewusers\fR), the GID of this group will be used as the primary group ID for the user\&.
+.sp
+Если в этом поле содержится число, то это число будет использовано как ID первичной группы пользователя\&. Если с таким GID не существует, то будет создана новая группа с этим GID и именем пользователя\&.
+.sp
+If this field is empty, a new group will be created with the name of the user and a GID will be automatically defined by
+\fBnewusers\fR
+to be used as the primary group ID for the user and as the GID for the new group\&.
+.sp
+If this field contains the name of a group which does not exist (and was not created before by
+\fBnewusers\fR), a new group will be created with the specified name and a GID will be automatically defined by
+\fBnewusers\fR
+to be used as the primary group ID for the user and GID for the new group\&.
+.RE
+.PP
+\fIpw_gecos\fR
+.RS 4
+Это поле копируется в поле GECOS записи пользователя\&.
+.RE
+.PP
+\fIpw_dir\fR
+.RS 4
+Это поле используется для определения домашнего каталога пользователя\&.
+.sp
+Если это поле указывает на несуществующий каталог, то указанный каталог создаётся, его владельцем назначается создаваемый или обновляемый пользователь и его первичная группа\&.
+.sp
+If the home directory of an existing user is changed,
+\fBnewusers\fR
+does not move or copy the content of the old directory to the new location\&. This should be done manually\&.
+.RE
+.PP
+\fIpw_shell\fR
+.RS 4
+В этом поле задаётся пользовательская оболочка\&. Никаких проверок поля не делается\&.
+.RE
+.PP
+\fBnewusers\fR
+first tries to create or change all the specified users, and then write these changes to the user or group databases\&. If an error occurs (except in the final writes to the databases), no changes are committed to the databases\&.
+.PP
+Данная команда предназначена для работы в крупных системных средах, где за один раз обновляется несколько учётных записей\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+The options which apply to the
+\fBnewusers\fR
+command are:
+.PP
+\fB\-\-badname\fR\ \&
+.RS 4
+Allow names that do not conform to standards\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+Использовать указанный метод для шифрования паролей\&.
+.sp
+Возможные методы: DES, MD5, NONE и SHA256 или SHA512, если эти методы поддерживается libc\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Создать системную учётную запись\&.
+.sp
+System users will be created with no aging information in
+/etc/shadow, and their numeric identifiers are chosen in the
+\fBSYS_UID_MIN\fR\-\fBSYS_UID_MAX\fR
+range, defined in
+login\&.defs, instead of
+\fBUID_MIN\fR\-\fBUID_MAX\fR
+(and their
+\fBGID\fR
+counterparts for the creation of groups)\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+Использовать указанное количество раундов шифрования паролей\&.
+.sp
+Значение 0 означает, что система выберет количество раундов по умолчанию для выбранного метода шифрования (5000)\&.
+.sp
+Минимальное значение равно 1000, а максимальное значение равно 999,999,999\&.
+.sp
+Вы можете использовать этот параметр только при методе шифрования SHA256 или SHA512\&.
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+Файл с входными данными должен быть защищён, так как в нём содержатся не шифрованные пароли\&.
+.PP
+Вы должны проверить, что пароль и метод шифрования соответствует политике системных паролей\&.
+.SH "НАСТРОЙКА"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+Задаёт системный алгоритм шифрования по умолчанию для шифрования паролей (используется, если алгоритм не указан в командной строке)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBGID_MIN\fR
+(resp\&.
+\fBGID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBHOME_MODE\fR (number)
+.RS 4
+The mode for new home directories\&. If not specified, the
+\fBUMASK\fR
+is used to create the mode\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this to set the mode of the home directory they create\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Значение по умолчанию равно 0, означающее, что ограничения на количество членов в группе нет\&.
+.sp
+Данная возможность (разделение группы) позволяет ограничить длину строк в файле групп\&. Это полезно для ограничения длины строк групп NIS в 1024 символа\&.
+.sp
+Если вам нужно такое ограничение, укажите значение 25\&.
+.sp
+Замечание: разделение групп поддерживается не всеми инструментами (даже в наборе инструментов Shadow)\&. Вы не должны использовать эту переменную, если вам действительно это ненужно\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+Максимальное число дней использования пароля\&. Если пароль старее этого числа, то будет запущена процедура смены пароля\&. Если значение не задано, то предполагается значение \-1 (то есть возможность ограничения не используется)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+Максимальное число дней между изменениями пароля\&. Любая смена пароля ранее заданного срока выполнена не будет\&. Если значение не задано, то предполагается значение \-1 (то есть возможность ограничения не используется)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+Число дней за которое начнёт выдаваться предупреждение об устаревании пароля\&. Нулевое значение означает, что предупреждение выдаётся в день устаревания, при отрицательном значении предупреждение выдаваться не будет\&. Если значение не задано, выдача предупреждения отключается\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+Увеличение количества раундов повышает сложность подбора пароля простым перебором\&. Но заметим, что при этом для аутентификации пользователей требуется большее количество процессорных ресурсов\&.
+.sp
+Если не задана, то libc выбирает значение количества раундов по умолчанию (5000)\&.
+.sp
+Значения должны лежать в диапазоне 1000\-999999999\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.PP
+\fBSUB_GID_MIN\fR (number), \fBSUB_GID_MAX\fR (number), \fBSUB_GID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate group IDs) allocate
+\fBSUB_GID_COUNT\fR
+unused group IDs from the range
+\fBSUB_GID_MIN\fR
+to
+\fBSUB_GID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR,
+\fBSUB_GID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSUB_UID_MIN\fR (number), \fBSUB_UID_MAX\fR (number), \fBSUB_UID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate user IDs) allocate
+\fBSUB_UID_COUNT\fR
+unused user IDs from the range
+\fBSUB_UID_MIN\fR
+to
+\fBSUB_UID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR,
+\fBSUB_UID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_GID_MIN\fR
+(resp\&.
+\fBSYS_GID_MAX\fR) is 101 (resp\&.
+\fBGID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_UID_MIN\fR
+(resp\&.
+\fBSYS_UID_MAX\fR) is 101 (resp\&.
+\fBUID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBUID_MIN\fR
+(resp\&.
+\fBUID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+Задаёт начальное значение маски доступа для создаваемых файлов\&. Если не указано, то маска устанавливается в 022\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create if
+\fBHOME_MODE\fR
+is not set\&.
+.sp
+It is also used by
+\fBlogin\fR
+to define users\*(Aq initial umask\&. Note that this mask can be overridden by the user\*(Aqs GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.PP
+/etc/subgid
+.RS 4
+Per user subordinate group IDs\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+Per user subordinate user IDs\&.
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(1),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuseradd\fR(8)\&.
diff --git a/man/ru/man8/nologin.8 b/man/ru/man8/nologin.8
new file mode 100644
index 0000000..61c6b07
--- /dev/null
+++ b/man/ru/man8/nologin.8
@@ -0,0 +1,55 @@
+'\" t
+.\" Title: nologin
+.\" Author: Nicolas Fran\(,cois <nicolas.francois@centraliens.net>
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Команды управления системой
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "nologin" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+nologin \- вежливо отказывает во входе в систему
+.SH "СИНТАКСИС"
+.HP \w'\fBnologin\fR\ 'u
+\fBnologin\fR
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBnologin\fR
+command displays a message that an account is not available and exits non\-zero\&. It is intended as a replacement shell field for accounts that have been disabled\&.
+.PP
+To disable all logins, investigate
+\fBnologin\fR(5)\&.
+.PP
+If
+\fBSSH_ORIGINAL_COMMAND\fR
+is populated it will be logged\&.
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBlogin\fR(1),
+\fBnologin\fR(5)\&.
+.SH "ИСТОРИЯ"
+.PP
+The
+\fBnologin\fR
+command appeared in BSD 4\&.4\&.
diff --git a/man/ru/man8/pwck.8 b/man/ru/man8/pwck.8
new file mode 100644
index 0000000..f692d39
--- /dev/null
+++ b/man/ru/man8/pwck.8
@@ -0,0 +1,328 @@
+'\" t
+.\" Title: pwck
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Команды управления системой
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "pwck" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+pwck \- проверяет целостность файлов паролей
+.SH "СИНТАКСИС"
+.HP \w'\fBpwck\fR\ 'u
+\fBpwck\fR [параметры] [\fIpasswd\fR\ [\ \fIshadow\fR\ ]]
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBpwck\fR
+command verifies the integrity of the users and authentication information\&. It checks that all entries in
+/etc/passwd
+and
+/etc/shadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+Выполняются следующие проверки:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+правильное количество полей
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+уникальность и корректность имени пользователя
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+корректность идентификатора пользователя и группы
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+корректность первичной группы
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+корректность домашнего каталога
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+корректность регистрационной оболочки
+.RE
+.PP
+shadow
+checks are enabled when a second file parameter is specified or when
+/etc/shadow
+exists on the system\&.
+.PP
+Выполняются следующие проверки:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+что каждая запись passwd имеет соответствующую запись shadow и каждая запись shadow имеет соответствующую запись passwd
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+пароли указаны в теневом файле
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+записи shadow содержат корректное количество полей
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+записи shadow уникальны в shadow
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+дата последней смены пароля не находится в будущем
+.RE
+.PP
+The checks for correct number of fields and unique user name are fatal\&. If the entry has the wrong number of fields, the user will be prompted to delete the entire line\&. If the user does not answer affirmatively, all further checks are bypassed\&. An entry with a duplicated user name is prompted for deletion, but the remaining checks will still be made\&. All other errors are warning and the user is encouraged to run the
+\fBusermod\fR
+command to correct the error\&.
+.PP
+The commands which operate on the
+/etc/passwd
+file are not able to alter corrupted or duplicated entries\&.
+\fBpwck\fR
+should be used in those circumstances to remove the offending entry\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+The
+\fB\-r\fR
+and
+\fB\-s\fR
+options cannot be combined\&.
+.PP
+The options which apply to the
+\fBpwck\fR
+command are:
+.PP
+\fB\-\-badname\fR\ \&
+.RS 4
+Allow names that do not conform to standards\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Сообщать только об ошибках\&. Предупреждения, которые не требуют от пользователя никаких действий, показаны не будут\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-read\-only\fR
+.RS 4
+Execute the
+\fBpwck\fR
+command in read\-only mode\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sort\fR
+.RS 4
+Sort entries in
+/etc/passwd
+and
+/etc/shadow
+by UID\&.
+.RE
+.PP
+By default,
+\fBpwck\fR
+operates on the files
+/etc/passwd
+and
+/etc/shadow\&. The user may select alternate files with the
+\fIpasswd\fR
+and
+\fIshadow\fR
+parameters\&.
+.SH "НАСТРОЙКА"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+Максимальное число дней использования пароля\&. Если пароль старее этого числа, то будет запущена процедура смены пароля\&. Если значение не задано, то предполагается значение \-1 (то есть возможность ограничения не используется)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+Максимальное число дней между изменениями пароля\&. Любая смена пароля ранее заданного срока выполнена не будет\&. Если значение не задано, то предполагается значение \-1 (то есть возможность ограничения не используется)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+Число дней за которое начнёт выдаваться предупреждение об устаревании пароля\&. Нулевое значение означает, что предупреждение выдаётся в день устаревания, при отрицательном значении предупреждение выдаваться не будет\&. Если значение не задано, выдача предупреждения отключается\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.SH "ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ"
+.PP
+The
+\fBpwck\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI2\fR
+.RS 4
+one or more bad password entries
+.RE
+.PP
+\fI3\fR
+.RS 4
+can\*(Aqt open password files
+.RE
+.PP
+\fI4\fR
+.RS 4
+can\*(Aqt lock password files
+.RE
+.PP
+\fI5\fR
+.RS 4
+can\*(Aqt update password files
+.RE
+.PP
+\fI6\fR
+.RS 4
+can\*(Aqt sort password files
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBgroup\fR(5),
+\fBgrpck\fR(8),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/ru/man8/pwconv.8 b/man/ru/man8/pwconv.8
new file mode 100644
index 0000000..714fc1e
--- /dev/null
+++ b/man/ru/man8/pwconv.8
@@ -0,0 +1,193 @@
+'\" t
+.\" Title: pwconv
+.\" Author: Marek Micha\(/lkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Команды управления системой
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "pwconv" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+pwconv, pwunconv, grpconv, grpunconv \- преобразует пароли пользователей и групп в/из защищённую форму
+.SH "СИНТАКСИС"
+.HP \w'\fBpwconv\fR\ 'u
+\fBpwconv\fR [\fIпараметры\fR]
+.HP \w'\fBpwunconv\fR\ 'u
+\fBpwunconv\fR [\fIпараметры\fR]
+.HP \w'\fBgrpconv\fR\ 'u
+\fBgrpconv\fR [\fIпараметры\fR]
+.HP \w'\fBgrpunconv\fR\ 'u
+\fBgrpunconv\fR [\fIпараметры\fR]
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBpwconv\fR
+command creates
+\fIshadow\fR
+from
+\fIpasswd\fR
+and an optionally existing
+\fIshadow\fR\&.
+.PP
+The
+\fBpwunconv\fR
+command creates
+\fIpasswd\fR
+from
+\fIpasswd\fR
+and
+\fIshadow\fR
+and then removes
+\fIshadow\fR\&.
+.PP
+The
+\fBgrpconv\fR
+command creates
+\fIgshadow\fR
+from
+\fIgroup\fR
+and an optionally existing
+\fIgshadow\fR\&.
+.PP
+The
+\fBgrpunconv\fR
+command creates
+\fIgroup\fR
+from
+\fIgroup\fR
+and
+\fIgshadow\fR
+and then removes
+\fIgshadow\fR\&.
+.PP
+These four programs all operate on the normal and shadow password and group files:
+/etc/passwd,
+/etc/group,
+/etc/shadow, and
+/etc/gshadow\&.
+.PP
+Each program acquires the necessary locks before conversion\&.
+\fBpwconv\fR
+and
+\fBgrpconv\fR
+are similar\&. First, entries in the shadowed file which don\*(Aqt exist in the main file are removed\&. Then, shadowed entries which don\*(Aqt have `x\*(Aq as the password in the main file are updated\&. Any missing shadowed entries are added\&. Finally, passwords in the main file are replaced with `x\*(Aq\&. These programs can be used for initial conversion as well to update the shadowed file if the main file is edited by hand\&.
+.PP
+\fBpwconv\fR
+will use the values of
+\fIPASS_MIN_DAYS\fR,
+\fIPASS_MAX_DAYS\fR, and
+\fIPASS_WARN_AGE\fR
+from
+/etc/login\&.defs
+when adding new entries to
+/etc/shadow\&.
+.PP
+Likewise
+\fBpwunconv\fR
+and
+\fBgrpunconv\fR
+are similar\&. Passwords in the main file are updated from the shadowed file\&. Entries which exist in the main file but not in the shadowed file are left alone\&. Finally, the shadowed file is removed\&. Some password aging information is lost by
+\fBpwunconv\fR\&. It will convert what it can\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+The options which apply to the
+\fBpwconv\fR,
+\fBpwunconv\fR,
+\fBgrpconv\fR, and
+\fBgrpunconv\fR
+commands are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.SH "ОШИБКИ РЕАЛИЗАЦИИ"
+.PP
+Errors in the password or group files (such as invalid or duplicate entries) may cause these programs to loop forever or fail in other strange ways\&. Please run
+\fBpwck\fR
+and
+\fBgrpck\fR
+to correct any such errors before converting to or from shadow passwords or groups\&.
+.SH "НАСТРОЙКА"
+.PP
+The following configuration variable in
+/etc/login\&.defs
+changes the behavior of
+\fBgrpconv\fR
+and
+\fBgrpunconv\fR:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Значение по умолчанию равно 0, означающее, что ограничения на количество членов в группе нет\&.
+.sp
+Данная возможность (разделение группы) позволяет ограничить длину строк в файле групп\&. Это полезно для ограничения длины строк групп NIS в 1024 символа\&.
+.sp
+Если вам нужно такое ограничение, укажите значение 25\&.
+.sp
+Замечание: разделение групп поддерживается не всеми инструментами (даже в наборе инструментов Shadow)\&. Вы не должны использовать эту переменную, если вам действительно это ненужно\&.
+.RE
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of
+\fBpwconv\fR:
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+Максимальное число дней использования пароля\&. Если пароль старее этого числа, то будет запущена процедура смены пароля\&. Если значение не задано, то предполагается значение \-1 (то есть возможность ограничения не используется)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+Максимальное число дней между изменениями пароля\&. Любая смена пароля ранее заданного срока выполнена не будет\&. Если значение не задано, то предполагается значение \-1 (то есть возможность ограничения не используется)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+Число дней за которое начнёт выдаваться предупреждение об устаревании пароля\&. Нулевое значение означает, что предупреждение выдаётся в день устаревания, при отрицательном значении предупреждение выдаваться не будет\&. Если значение не задано, выдача предупреждения отключается\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBgrpck\fR(8),
+\fBlogin.defs\fR(5),
+\fBpwck\fR(8)\&.
diff --git a/man/ru/man8/pwunconv.8 b/man/ru/man8/pwunconv.8
new file mode 100644
index 0000000..6eed9e8
--- /dev/null
+++ b/man/ru/man8/pwunconv.8
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/ru/man8/sulogin.8 b/man/ru/man8/sulogin.8
new file mode 100644
index 0000000..a2db1b3
--- /dev/null
+++ b/man/ru/man8/sulogin.8
@@ -0,0 +1,116 @@
+'\" t
+.\" Title: sulogin
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Команды управления системой
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "sulogin" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+sulogin \- Single\-user login
+.SH "СИНТАКСИС"
+.PP
+\fBsulogin\fR
+[\fItty\-device\fR]
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBsulogin\fR
+command is invoked by
+\fBinit\fR
+prior to allowing the user access to the system when in single user mode\&. This feature may only be available on certain systems where
+\fBinit\fR
+has been modified accordingly, or where the
+/etc/inittab
+has an entry for a single user login\&.
+.PP
+The user is prompted
+.PP
+Type control\-d to proceed with normal startup,
+(or give root password for system maintenance):
+.PP
+Input and output will be performed with the standard file descriptors unless the optional device name argument is provided\&.
+.PP
+If the user enters the correct root password, a login session is initiated\&. When
+\fIEOF\fR
+is pressed instead, the system enters multi\-user mode\&.
+.PP
+After the user exits the single\-user shell, or presses
+\fIEOF\fR, the system begins the initialization process required to enter multi\-user mode\&.
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+This command can only be used if
+\fBinit\fR
+has been modified to call
+\fBsulogin\fR
+instead of
+/bin/sh, or if the user has set the
+\fIinittab\fR
+to support a single user login\&. For example, the line:
+.PP
+co:s:respawn:/etc/sulogin /dev/console
+.PP
+should execute the sulogin command in single user mode\&.
+.PP
+As complete an environment as possible is created\&. However, various devices may be unmounted or uninitialized and many of the user commands may be unavailable or nonfunctional as a result\&.
+.SH "НАСТРОЙКА"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBlogin\fR(1),
+\fBsh\fR(1),
+\fBinit\fR(8)\&.
diff --git a/man/ru/man8/useradd.8 b/man/ru/man8/useradd.8
new file mode 100644
index 0000000..f3df76a
--- /dev/null
+++ b/man/ru/man8/useradd.8
@@ -0,0 +1,784 @@
+'\" t
+.\" Title: useradd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Команды управления системой
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "useradd" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+useradd \- регистрирует нового пользователя или изменяет информацию по умолчанию о новых пользователях
+.SH "СИНТАКСИС"
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR [\fIпараметры\fR] \fIУЧЁТНАЯ_ЗАПИСЬ\fR
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR \-D
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR \-D [\fIпараметры\fR]
+.SH "ОПИСАНИЕ"
+.PP
+When invoked without the
+\fB\-D\fR
+option, the
+\fBuseradd\fR
+command creates a new user account using the values specified on the command line plus the default values from the system\&. Depending on command line options, the
+\fBuseradd\fR
+command will update system files and may also create the new user\*(Aqs home directory and copy initial files\&.
+.PP
+By default, a group will also be created for the new user (see
+\fB\-g\fR,
+\fB\-N\fR,
+\fB\-U\fR, and
+\fBUSERGROUPS_ENAB\fR)\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+The options which apply to the
+\fBuseradd\fR
+command are:
+.PP
+\fB\-\-badname\fR\ \&
+.RS 4
+Allow names that do not conform to standards\&.
+.RE
+.PP
+\fB\-b\fR, \fB\-\-base\-dir\fR\ \&\fIBASE_DIR\fR
+.RS 4
+The default base directory for the system if
+\fB\-d\fR\ \&\fIHOME_DIR\fR
+is not specified\&.
+\fIBASE_DIR\fR
+is concatenated with the account name to define the home directory\&. If the
+\fB\-m\fR
+option is not used,
+\fIBASE_DIR\fR
+must exist\&.
+.sp
+If this option is not specified,
+\fBuseradd\fR
+will use the base directory specified by the
+\fBHOME\fR
+variable in
+/etc/default/useradd, or
+/home
+by default\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-comment\fR\ \&\fICOMMENT\fR
+.RS 4
+Любая текстовая строка\&. Обычно, здесь коротко описывается учётная запись, и в настоящее время используется как поле для имени и фамилии пользователя\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-home\-dir\fR\ \&\fIHOME_DIR\fR
+.RS 4
+The new user will be created using
+\fIHOME_DIR\fR
+as the value for the user\*(Aqs login directory\&. The default is to append the
+\fILOGIN\fR
+name to
+\fIBASE_DIR\fR
+and use that as the login directory name\&. The directory
+\fIHOME_DIR\fR
+does not have to exist but will not be created if it is missing\&.
+.RE
+.PP
+\fB\-D\fR, \fB\-\-defaults\fR
+.RS 4
+Смотрите далее в подразделе \(FoИзменение значений по умолчанию\(Fc\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+The date on which the user account will be disabled\&. The date is specified in the format
+\fIYYYY\-MM\-DD\fR\&.
+.sp
+If not specified,
+\fBuseradd\fR
+will use the default expiry date specified by the
+\fBEXPIRE\fR
+variable in
+/etc/default/useradd, or an empty string (no expiry) by default\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+Если указано значение 0, то учётная запись блокируется сразу после устаревания пароля, а при значении \-1 данная возможность не используется\&.
+.sp
+If not specified,
+\fBuseradd\fR
+will use the default inactivity period specified by the
+\fBINACTIVE\fR
+variable in
+/etc/default/useradd, or \-1 by default\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGROUP\fR
+.RS 4
+Имя или числовой идентификатор первичной группы пользователя\&. Группа с таким именем должна существовать\&. Идентификатор группы должен указывать на уже существующую группу\&.
+.sp
+If not specified, the behavior of
+\fBuseradd\fR
+will depend on the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&. If this variable is set to
+\fIyes\fR
+(or
+\fB\-U/\-\-user\-group\fR
+is specified on the command line), a group will be created for the user, with the same name as her loginname\&. If the variable is set to
+\fIno\fR
+(or
+\fB\-N/\-\-no\-user\-group\fR
+is specified on the command line), useradd will set the primary group of the new user to the value specified by the
+\fBGROUP\fR
+variable in
+/etc/default/useradd, or 100 by default\&.
+.RE
+.PP
+\fB\-G\fR, \fB\-\-groups\fR\ \&\fIGROUP1\fR[\fI,GROUP2,\&.\&.\&.\fR[\fI,GROUPN\fR]]]
+.RS 4
+A list of supplementary groups which the user is also a member of\&. Each group is separated from the next by a comma, with no intervening whitespace\&. The groups are subject to the same restrictions as the group given with the
+\fB\-g\fR
+option\&. The default is for the user to belong only to the initial group\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-k\fR, \fB\-\-skel\fR\ \&\fISKEL_DIR\fR
+.RS 4
+The skeleton directory, which contains files and directories to be copied in the user\*(Aqs home directory, when the home directory is created by
+\fBuseradd\fR\&.
+.sp
+This option is only valid if the
+\fB\-m\fR
+(or
+\fB\-\-create\-home\fR) option is specified\&.
+.sp
+If this option is not set, the skeleton directory is defined by the
+\fBSKEL\fR
+variable in
+/etc/default/useradd
+or, by default,
+/etc/skel\&.
+.sp
+Если возможно, выполняется копирование ACL и расширенных атрибутов\&.
+.RE
+.PP
+\fB\-K\fR, \fB\-\-key\fR\ \&\fIKEY\fR=\fIVALUE\fR
+.RS 4
+Overrides
+/etc/login\&.defs
+defaults (\fBUID_MIN\fR,
+\fBUID_MAX\fR,
+\fBUMASK\fR,
+\fBPASS_MAX_DAYS\fR
+and others)\&.
+
+Example:
+\fB\-K\fR\ \&\fIPASS_MAX_DAYS\fR=\fI\-1\fR
+can be used when creating system account to turn off password aging, even though system account has no password at all\&. Multiple
+\fB\-K\fR
+options can be specified, e\&.g\&.:
+\fB\-K\fR\ \&\fIUID_MIN\fR=\fI100\fR\ \&
+\fB\-K\fR\ \&\fIUID_MAX\fR=\fI499\fR
+.RE
+.PP
+\fB\-l\fR, \fB\-\-no\-log\-init\fR
+.RS 4
+Не добавлять пользователя в базы данных lastlog и faillog\&.
+.sp
+By default, the user\*(Aqs entries in the lastlog and faillog databases are reset to avoid reusing the entry from a previously deleted user\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-create\-home\fR
+.RS 4
+Create the user\*(Aqs home directory if it does not exist\&. The files and directories contained in the skeleton directory (which can be defined with the
+\fB\-k\fR
+option) will be copied to the home directory\&.
+.sp
+By default, if this option is not specified and
+\fBCREATE_HOME\fR
+is not enabled, no home directories are created\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-no\-create\-home\fR
+.RS 4
+Do no create the user\*(Aqs home directory, even if the system wide setting from
+/etc/login\&.defs
+(\fBCREATE_HOME\fR) is set to
+\fIyes\fR\&.
+.RE
+.PP
+\fB\-N\fR, \fB\-\-no\-user\-group\fR
+.RS 4
+Do not create a group with the same name as the user, but add the user to the group specified by the
+\fB\-g\fR
+option or by the
+\fBGROUP\fR
+variable in
+/etc/default/useradd\&.
+.sp
+The default behavior (if the
+\fB\-g\fR,
+\fB\-N\fR, and
+\fB\-U\fR
+options are not specified) is defined by the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+Разрешить создание учётной записи с уже имеющимся (не уникальным) UID\&.
+.sp
+This option is only valid in combination with the
+\fB\-u\fR
+option\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&. The default is to disable the password\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+Вы должны проверить, что пароль соответствует политике системных паролей\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Создать системную учётную запись\&.
+.sp
+System users will be created with no aging information in
+/etc/shadow, and their numeric identifiers are chosen in the
+\fBSYS_UID_MIN\fR\-\fBSYS_UID_MAX\fR
+range, defined in
+/etc/login\&.defs, instead of
+\fBUID_MIN\fR\-\fBUID_MAX\fR
+(and their
+\fBGID\fR
+counterparts for the creation of groups)\&.
+.sp
+Note that
+\fBuseradd\fR
+will not create a home directory for such a user, regardless of the default setting in
+/etc/login\&.defs
+(\fBCREATE_HOME\fR)\&. You have to specify the
+\fB\-m\fR
+options if you want a home directory for a system account to be created\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+The name of the user\*(Aqs login shell\&. The default is to leave this field blank, which causes the system to select the default login shell specified by the
+\fBSHELL\fR
+variable in
+/etc/default/useradd, or an empty string by default\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-uid\fR\ \&\fIUID\fR
+.RS 4
+The numerical value of the user\*(Aqs ID\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&. The default is to use the smallest ID value greater than or equal to
+\fBUID_MIN\fR
+and greater than every other user\&.
+.sp
+See also the
+\fB\-r\fR
+option and the
+\fBUID_MAX\fR
+description\&.
+.RE
+.PP
+\fB\-U\fR, \fB\-\-user\-group\fR
+.RS 4
+Создать группу с тем же именем что и у пользователя, и добавить пользователя в эту группу\&.
+.sp
+The default behavior (if the
+\fB\-g\fR,
+\fB\-N\fR, and
+\fB\-U\fR
+options are not specified) is defined by the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR\ \&\fISEUSER\fR
+.RS 4
+Пользователь SELinux для регистрационной оболочки пользователя\&. По умолчанию это поле пусто, что заставляет систему выбрать пользователя SELinux по умолчанию\&.
+.RE
+.SS "Изменение значений по умолчанию"
+.PP
+When invoked with only the
+\fB\-D\fR
+option,
+\fBuseradd\fR
+will display the current default values\&. When invoked with
+\fB\-D\fR
+plus other options,
+\fBuseradd\fR
+will update the default values for the specified options\&. Valid default\-changing options are:
+.PP
+\fB\-b\fR, \fB\-\-base\-dir\fR\ \&\fIBASE_DIR\fR
+.RS 4
+The path prefix for a new user\*(Aqs home directory\&. The user\*(Aqs name will be affixed to the end of
+\fIBASE_DIR\fR
+to form the new user\*(Aqs home directory name, if the
+\fB\-d\fR
+option is not used when creating a new account\&.
+.sp
+This option sets the
+\fBHOME\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+Дата, когда учётная запись пользователя заблокирована\&.
+.sp
+This option sets the
+\fBEXPIRE\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+Число дней, которые должны пройти после устаревания пароля, перед тем как учётная запись будет заблокирована\&.
+.sp
+This option sets the
+\fBINACTIVE\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGROUP\fR
+.RS 4
+The group name or ID for a new user\*(Aqs initial group (when the
+\fB\-N/\-\-no\-user\-group\fR
+is used or when the
+\fBUSERGROUPS_ENAB\fR
+variable is set to
+\fIno\fR
+in
+/etc/login\&.defs)\&. The named group must exist, and a numerical group ID must have an existing entry\&.
+.sp
+This option sets the
+\fBGROUP\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+Имя новой регистрационной командной оболочки пользователя\&.
+.sp
+This option sets the
+\fBSHELL\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.SH "ЗАМЕЧАНИЯ"
+.PP
+The system administrator is responsible for placing the default user files in the
+/etc/skel/
+directory (or any other skeleton directory specified in
+/etc/default/useradd
+or on the command line)\&.
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+Нельзя добавить пользователя в группу NIS или LDAP\&. Это необходимо делать на соответствующем сервере\&.
+.PP
+Similarly, if the username already exists in an external user database such as NIS or LDAP,
+\fBuseradd\fR
+will deny the user account creation request\&.
+.PP
+Имена пользователей должны начинаться со строчной буквы или символа подчёркивания, и должны состоять только из строчных букв, цифр, символов подчёркивания и минус\&. Они могут заканчиваться знаком доллара\&. Это можно описать регулярным выражением: [a\-z_][a\-z0\-9_\-]*[$]?
+.PP
+Имена пользователей могут быть длиной не более 32 знаков\&.
+.SH "НАСТРОЙКА"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCREATE_HOME\fR (boolean)
+.RS 4
+Определяет, должен ли создаваться по умолчанию домашний каталог для новых пользователей\&.
+.sp
+Эта переменная не влияет на системных пользователей и может быть переопределена из командной строки\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBGID_MIN\fR
+(resp\&.
+\fBGID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBHOME_MODE\fR (number)
+.RS 4
+The mode for new home directories\&. If not specified, the
+\fBUMASK\fR
+is used to create the mode\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this to set the mode of the home directory they create\&.
+.RE
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+Почтовый каталог\&. Данный параметр нужен для управления почтовым ящиком при изменении или удалении учётной записи пользователя\&. Если параметр не задан, то используется значение указанное при сборке\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Определяет расположение почтовых файлов пользователя относительно домашнего каталога\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Значение по умолчанию равно 0, означающее, что ограничения на количество членов в группе нет\&.
+.sp
+Данная возможность (разделение группы) позволяет ограничить длину строк в файле групп\&. Это полезно для ограничения длины строк групп NIS в 1024 символа\&.
+.sp
+Если вам нужно такое ограничение, укажите значение 25\&.
+.sp
+Замечание: разделение групп поддерживается не всеми инструментами (даже в наборе инструментов Shadow)\&. Вы не должны использовать эту переменную, если вам действительно это ненужно\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+Максимальное число дней использования пароля\&. Если пароль старее этого числа, то будет запущена процедура смены пароля\&. Если значение не задано, то предполагается значение \-1 (то есть возможность ограничения не используется)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+Максимальное число дней между изменениями пароля\&. Любая смена пароля ранее заданного срока выполнена не будет\&. Если значение не задано, то предполагается значение \-1 (то есть возможность ограничения не используется)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+Число дней за которое начнёт выдаваться предупреждение об устаревании пароля\&. Нулевое значение означает, что предупреждение выдаётся в день устаревания, при отрицательном значении предупреждение выдаваться не будет\&. Если значение не задано, выдача предупреждения отключается\&.
+.RE
+.PP
+\fBSUB_GID_MIN\fR (number), \fBSUB_GID_MAX\fR (number), \fBSUB_GID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate group IDs) allocate
+\fBSUB_GID_COUNT\fR
+unused group IDs from the range
+\fBSUB_GID_MIN\fR
+to
+\fBSUB_GID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR,
+\fBSUB_GID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSUB_UID_MIN\fR (number), \fBSUB_UID_MAX\fR (number), \fBSUB_UID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate user IDs) allocate
+\fBSUB_UID_COUNT\fR
+unused user IDs from the range
+\fBSUB_UID_MIN\fR
+to
+\fBSUB_UID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR,
+\fBSUB_UID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_GID_MIN\fR
+(resp\&.
+\fBSYS_GID_MAX\fR) is 101 (resp\&.
+\fBGID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_UID_MIN\fR
+(resp\&.
+\fBSYS_UID_MAX\fR) is 101 (resp\&.
+\fBUID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBUID_MIN\fR
+(resp\&.
+\fBUID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+Задаёт начальное значение маски доступа для создаваемых файлов\&. Если не указано, то маска устанавливается в 022\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create if
+\fBHOME_MODE\fR
+is not set\&.
+.sp
+It is also used by
+\fBlogin\fR
+to define users\*(Aq initial umask\&. Note that this mask can be overridden by the user\*(Aqs GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Включает установку группы битов umask равной битам владельца (пример: 022 \-> 002, 077 \-> 007) для не суперпользователей, если uid равен gid и имя пользователя совпадает с именем первичной группы\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.PP
+/etc/default/useradd
+.RS 4
+значения по умолчанию для создаваемой учётной записи
+.RE
+.PP
+/etc/skel/
+.RS 4
+каталог, содержащий файлы по умолчанию
+.RE
+.PP
+/etc/subgid
+.RS 4
+Per user subordinate group IDs\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+Per user subordinate user IDs\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.SH "ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ"
+.PP
+The
+\fBuseradd\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+can\*(Aqt update password file
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+UID already in use (and no
+\fB\-o\fR)
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI9\fR
+.RS 4
+username already in use
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.PP
+\fI12\fR
+.RS 4
+can\*(Aqt create home directory
+.RE
+.PP
+\fI14\fR
+.RS 4
+can\*(Aqt update SELinux user mapping
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBnewusers\fR(8),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/ru/man8/userdel.8 b/man/ru/man8/userdel.8
new file mode 100644
index 0000000..82e8619
--- /dev/null
+++ b/man/ru/man8/userdel.8
@@ -0,0 +1,308 @@
+'\" t
+.\" Title: userdel
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Команды управления системой
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "userdel" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+userdel \- удаляет учётную запись и файлы пользователя
+.SH "СИНТАКСИС"
+.HP \w'\fBuserdel\fR\ 'u
+\fBuserdel\fR [параметры] \fIУЧЁТНАЯ_ЗАПИСЬ\fR
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBuserdel\fR
+command modifies the system account files, deleting all entries that refer to the user name
+\fILOGIN\fR\&. The named user must exist\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+The options which apply to the
+\fBuserdel\fR
+command are:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option forces the removal of the user account, even if the user is still logged in\&. It also forces
+\fBuserdel\fR
+to remove the user\*(Aqs home directory and mail spool, even if another user uses the same home directory or if the mail spool is not owned by the specified user\&. If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs
+and if a group exists with the same name as the deleted user, then this group will be removed, even if it is still the primary group of another user\&.
+.sp
+\fINote:\fR
+This option is dangerous and may leave your system in an inconsistent state\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-remove\fR
+.RS 4
+Файлы в домашнем каталоге пользователя будут удалены вместе с самим домашним каталогом и почтовым ящиком\&. Пользовательские файлы, расположенные в других файловых системах, нужно искать и удалять вручную\&.
+.sp
+The mail spool is defined by the
+\fBMAIL_DIR\fR
+variable in the
+login\&.defs
+file\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR
+.RS 4
+Удаляет все пользовательские сопоставления SELinux для учётной записи пользователя\&.
+.RE
+.SH "НАСТРОЙКА"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+Почтовый каталог\&. Данный параметр нужен для управления почтовым ящиком при изменении или удалении учётной записи пользователя\&. Если параметр не задан, то используется значение указанное при сборке\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Определяет расположение почтовых файлов пользователя относительно домашнего каталога\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Значение по умолчанию равно 0, означающее, что ограничения на количество членов в группе нет\&.
+.sp
+Данная возможность (разделение группы) позволяет ограничить длину строк в файле групп\&. Это полезно для ограничения длины строк групп NIS в 1024 символа\&.
+.sp
+Если вам нужно такое ограничение, укажите значение 25\&.
+.sp
+Замечание: разделение групп поддерживается не всеми инструментами (даже в наборе инструментов Shadow)\&. Вы не должны использовать эту переменную, если вам действительно это ненужно\&.
+.RE
+.PP
+\fBUSERDEL_CMD\fR (string)
+.RS 4
+Определяет программу, которая будет запущена при удалении пользователя\&. Она должна удалять любые задания at/cron/печати удаляемого пользователя (передаётся в качестве первого аргумента)\&.
+.sp
+Возвращаемый сценарием код завершения не учитывается\&.
+.sp
+Here is an example script, which removes the user\*(Aqs cron, at and print jobs:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#! /bin/sh
+
+# Check for the required argument\&.
+if [ $# != 1 ]; then
+ echo "Usage: $0 username"
+ exit 1
+fi
+
+# Remove cron jobs\&.
+crontab \-r \-u $1
+
+# Remove at jobs\&.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username\&.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR \-name "[^\&.]*" \-type f \-user $1 \-delete \e;
+
+# Remove print jobs\&.
+lprm $1
+
+# All done\&.
+exit 0
+
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Включает установку группы битов umask равной битам владельца (пример: 022 \-> 002, 077 \-> 007) для не суперпользователей, если uid равен gid и имя пользователя совпадает с именем первичной группы\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.PP
+/etc/subgid
+.RS 4
+Per user subordinate group IDs\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+Per user subordinate user IDs\&.
+.RE
+.SH "ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ"
+.PP
+The
+\fBuserdel\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+can\*(Aqt update password file
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified user doesn\*(Aqt exist
+.RE
+.PP
+\fI8\fR
+.RS 4
+user currently logged in
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.PP
+\fI12\fR
+.RS 4
+can\*(Aqt remove home directory
+.RE
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+\fBuserdel\fR
+will not allow you to remove an account if there are running processes which belong to this account\&. In that case, you may have to kill those processes or lock the user\*(Aqs password or account and remove the account later\&. The
+\fB\-f\fR
+option can force the deletion of this account\&.
+.PP
+Вы должны вручную проверить все файловые системы, чтобы убедиться, что не осталось файлов, принадлежащих этому пользователю\&.
+.PP
+Нельзя удалить NIS атрибуты клиента NIS\&. Это необходимо сделать на NIS сервере\&.
+.PP
+If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs,
+\fBuserdel\fR
+will delete the group with the same name as the user\&. To avoid inconsistencies in the passwd and group databases,
+\fBuserdel\fR
+will check that this group is not used as a primary group for another user, and will just warn without deleting the group otherwise\&. The
+\fB\-f\fR
+option can force the deletion of this group\&.
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBlogin.defs\fR(5),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuseradd\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/ru/man8/usermod.8 b/man/ru/man8/usermod.8
new file mode 100644
index 0000000..291b69a
--- /dev/null
+++ b/man/ru/man8/usermod.8
@@ -0,0 +1,469 @@
+'\" t
+.\" Title: usermod
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Команды управления системой
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "usermod" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+usermod \- изменяет учётную запись пользователя
+.SH "СИНТАКСИС"
+.HP \w'\fBusermod\fR\ 'u
+\fBusermod\fR [\fIпараметры\fR] \fIУЧЁТНАЯ_ЗАПИСЬ\fR
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBusermod\fR
+command modifies the system account files to reflect the changes that are specified on the command line\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+The options which apply to the
+\fBusermod\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-append\fR
+.RS 4
+Add the user to the supplementary group(s)\&. Use only with the
+\fB\-G\fR
+option\&.
+.RE
+.PP
+\fB\-b\fR, \fB\-\-badnames\fR
+.RS 4
+Allow names that do not conform to standards\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-comment\fR\ \&\fICOMMENT\fR
+.RS 4
+The new value of the user\*(Aqs password file comment field\&. It is normally modified using the
+\fBchfn\fR(1)
+utility\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-home\fR\ \&\fIHOME_DIR\fR
+.RS 4
+Домашний каталог нового пользователя\&.
+.sp
+If the
+\fB\-m\fR
+option is given, the contents of the current home directory will be moved to the new home directory, which is created if it does not already exist\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+The date on which the user account will be disabled\&. The date is specified in the format
+\fIYYYY\-MM\-DD\fR\&.
+.sp
+An empty
+\fIEXPIRE_DATE\fR
+argument will disable the expiration of the account\&.
+.sp
+This option requires a
+/etc/shadow
+file\&. A
+/etc/shadow
+entry will be created if there were none\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+Количество дней, которые должны пройти после устаревания пароля, чтобы учётная запись заблокировалась навсегда\&.
+.sp
+Если указано значение 0, то учётная запись блокируется сразу после устаревания пароля, а при значении \-1 данная возможность не используется\&.
+.sp
+This option requires a
+/etc/shadow
+file\&. A
+/etc/shadow
+entry will be created if there were none\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGROUP\fR
+.RS 4
+Имя или числовой идентификатор новой первичной группы пользователя\&. Группа с таким именем должна существовать\&.
+.sp
+Все файлы в домашнем каталоге пользователя, принадлежавшие предыдущей первичной группе пользователя, будут принадлежать новой группе\&.
+.sp
+Группового владельца файлов вне домашнего каталога нужно изменить вручную\&.
+.RE
+.PP
+\fB\-G\fR, \fB\-\-groups\fR\ \&\fIGROUP1\fR[\fI,GROUP2,\&.\&.\&.\fR[\fI,GROUPN\fR]]]
+.RS 4
+A list of supplementary groups which the user is also a member of\&. Each group is separated from the next by a comma, with no intervening whitespace\&. The groups are subject to the same restrictions as the group given with the
+\fB\-g\fR
+option\&.
+.sp
+If the user is currently a member of a group which is not listed, the user will be removed from the group\&. This behaviour can be changed via the
+\fB\-a\fR
+option, which appends the user to the current supplementary group list\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-login\fR\ \&\fINEW_LOGIN\fR
+.RS 4
+The name of the user will be changed from
+\fILOGIN\fR
+to
+\fINEW_LOGIN\fR\&. Nothing else is changed\&. In particular, the user\*(Aqs home directory or mail spool should probably be renamed manually to reflect the new login name\&.
+.RE
+.PP
+\fB\-L\fR, \fB\-\-lock\fR
+.RS 4
+Lock a user\*(Aqs password\&. This puts a \*(Aq!\*(Aq in front of the encrypted password, effectively disabling the password\&. You can\*(Aqt use this option with
+\fB\-p\fR
+or
+\fB\-U\fR\&.
+.sp
+Note: if you wish to lock the account (not only access with a password), you should also set the
+\fIEXPIRE_DATE\fR
+to
+\fI1\fR\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-move\-home\fR
+.RS 4
+Переместить содержимое домашнего каталога в новое место\&.
+.sp
+This option is only valid in combination with the
+\fB\-d\fR
+(or
+\fB\-\-home\fR) option\&.
+.sp
+\fBusermod\fR
+will try to adapt the ownership of the files and to copy the modes, ACL and extended attributes, but manual changes might be needed afterwards\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+When used with the
+\fB\-u\fR
+option, this option allows to change the user ID to a non\-unique value\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+Вы должны проверить, что пароль соответствует политике системных паролей\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+Имя новой регистрационной оболочки пользователя\&. Если задать пустое значение, то будет использована регистрационная оболочка по умолчанию\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-uid\fR\ \&\fIUID\fR
+.RS 4
+Новый числовой идентификатор пользователя (UID)\&.
+.sp
+This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&.
+.sp
+Для почтового ящика и всех файлов, которыми владеет пользователь и которые расположены в его домашнем каталоге, идентификатор владельца файла будет изменён автоматически\&.
+.sp
+Для файлов, расположенных вне домашнего каталога, идентификатор нужно изменять вручную\&.
+.sp
+No checks will be performed with regard to the
+\fBUID_MIN\fR,
+\fBUID_MAX\fR,
+\fBSYS_UID_MIN\fR, or
+\fBSYS_UID_MAX\fR
+from
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-U\fR, \fB\-\-unlock\fR
+.RS 4
+Unlock a user\*(Aqs password\&. This removes the \*(Aq!\*(Aq in front of the encrypted password\&. You can\*(Aqt use this option with
+\fB\-p\fR
+or
+\fB\-L\fR\&.
+.sp
+Note: if you wish to unlock the account (not only access with a password), you should also set the
+\fIEXPIRE_DATE\fR
+(for example to
+\fI99999\fR, or to the
+\fBEXPIRE\fR
+value from
+/etc/default/useradd)\&.
+.RE
+.PP
+\fB\-v\fR, \fB\-\-add\-subuids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Add a range of subordinate uids to the user\*(Aqs account\&.
+.sp
+This option may be specified multiple times to add multiple ranges to a users account\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR, or
+\fBSUB_UID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-V\fR, \fB\-\-del\-subuids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Remove a range of subordinate uids from the user\*(Aqs account\&.
+.sp
+This option may be specified multiple times to remove multiple ranges to a users account\&. When both
+\fB\-\-del\-subuids\fR
+and
+\fB\-\-add\-subuids\fR
+are specified, the removal of all subordinate uid ranges happens before any subordinate uid range is added\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR, or
+\fBSUB_UID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-add\-subgids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Add a range of subordinate gids to the user\*(Aqs account\&.
+.sp
+This option may be specified multiple times to add multiple ranges to a users account\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR, or
+\fBSUB_GID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-W\fR, \fB\-\-del\-subgids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Remove a range of subordinate gids from the user\*(Aqs account\&.
+.sp
+This option may be specified multiple times to remove multiple ranges to a users account\&. When both
+\fB\-\-del\-subgids\fR
+and
+\fB\-\-add\-subgids\fR
+are specified, the removal of all subordinate gid ranges happens before any subordinate gid range is added\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR, or
+\fBSUB_GID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR\ \&\fISEUSER\fR
+.RS 4
+Новый пользователь SELinux для пользовательского входа\&.
+.sp
+A blank
+\fISEUSER\fR
+will remove the SELinux user mapping for user
+\fILOGIN\fR
+(if any)\&.
+.RE
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+You must make certain that the named user is not executing any processes when this command is being executed if the user\*(Aqs numerical user ID, the user\*(Aqs name, or the user\*(Aqs home directory is being changed\&.
+\fBusermod\fR
+checks this on Linux\&. On other platforms it only uses utmp to check if the user is logged in\&.
+.PP
+You must change the owner of any
+\fBcrontab\fR
+files or
+\fBat\fR
+jobs manually\&.
+.PP
+Вы должны сделать все изменения NIS на сервере NIS самостоятельно\&.
+.SH "НАСТРОЙКА"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+Почтовый каталог\&. Данный параметр нужен для управления почтовым ящиком при изменении или удалении учётной записи пользователя\&. Если параметр не задан, то используется значение указанное при сборке\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Определяет расположение почтовых файлов пользователя относительно домашнего каталога\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+Значение по умолчанию равно 0, означающее, что ограничения на количество членов в группе нет\&.
+.sp
+Данная возможность (разделение группы) позволяет ограничить длину строк в файле групп\&. Это полезно для ограничения длины строк групп NIS в 1024 символа\&.
+.sp
+Если вам нужно такое ограничение, укажите значение 25\&.
+.sp
+Замечание: разделение групп поддерживается не всеми инструментами (даже в наборе инструментов Shadow)\&. Вы не должны использовать эту переменную, если вам действительно это ненужно\&.
+.RE
+.PP
+\fBSUB_GID_MIN\fR (number), \fBSUB_GID_MAX\fR (number), \fBSUB_GID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate group IDs) allocate
+\fBSUB_GID_COUNT\fR
+unused group IDs from the range
+\fBSUB_GID_MIN\fR
+to
+\fBSUB_GID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR,
+\fBSUB_GID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSUB_UID_MIN\fR (number), \fBSUB_UID_MAX\fR (number), \fBSUB_UID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate user IDs) allocate
+\fBSUB_UID_COUNT\fR
+unused user IDs from the range
+\fBSUB_UID_MIN\fR
+to
+\fBSUB_UID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR,
+\fBSUB_UID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.PP
+/etc/subgid
+.RS 4
+Per user subordinate group IDs\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+Per user subordinate user IDs\&.
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8)\&.
diff --git a/man/ru/man8/vigr.8 b/man/ru/man8/vigr.8
new file mode 100644
index 0000000..ff72d7a
--- /dev/null
+++ b/man/ru/man8/vigr.8
@@ -0,0 +1 @@
+.so man8/vipw.8
diff --git a/man/ru/man8/vipw.8 b/man/ru/man8/vipw.8
new file mode 100644
index 0000000..bd8ab4d
--- /dev/null
+++ b/man/ru/man8/vipw.8
@@ -0,0 +1,137 @@
+'\" t
+.\" Title: vipw
+.\" Author: Marek Micha\(/lkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 01/23/2020
+.\" Manual: Команды управления системой
+.\" Source: shadow-utils 4.8.1
+.\" Language: Russian
+.\"
+.TH "vipw" "8" "01/23/2020" "shadow\-utils 4\&.8\&.1" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+vipw, vigr \- позволяют редактировать файлы паролей, групп, теневых паролей пользователей или групп\&.
+.SH "СИНТАКСИС"
+.HP \w'\fBvipw\fR\ 'u
+\fBvipw\fR [\fIпараметры\fR]
+.HP \w'\fBvigr\fR\ 'u
+\fBvigr\fR [\fIпараметры\fR]
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBvipw\fR
+and
+\fBvigr\fR
+commands edits the files
+/etc/passwd
+and
+/etc/group, respectively\&. With the
+\fB\-s\fR
+flag, they will edit the shadow versions of those files,
+/etc/shadow
+and
+/etc/gshadow, respectively\&. The programs will set the appropriate locks to prevent file corruption\&. When looking for an editor, the programs will first try the environment variable
+\fB$VISUAL\fR, then the environment variable
+\fB$EDITOR\fR, and finally the default editor,
+\fBvi\fR(1)\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+The options which apply to the
+\fBvipw\fR
+and
+\fBvigr\fR
+commands are:
+.PP
+\fB\-g\fR, \fB\-\-group\fR
+.RS 4
+Редактировать базу данных групп\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-passwd\fR
+.RS 4
+Редактировать базу данных passwd\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Не выводить сообщений при работе\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shadow\fR
+.RS 4
+Редактировать базу данных shadow или gshadow\&.
+.RE
+.SH "ОКРУЖЕНИЕ"
+.PP
+\fBVISUAL\fR
+.RS 4
+Редактор, который будет вызван\&.
+.RE
+.PP
+\fBEDITOR\fR
+.RS 4
+Editor to be used if
+\fBVISUAL\fR
+is not set\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBvi\fR(1),
+\fBgroup\fR(5),
+\fBgshadow\fR(5)
+,
+\fBpasswd\fR(5), ,
+\fBshadow\fR(5)\&.
diff --git a/man/sg.1.xml b/man/sg.1.xml
new file mode 100644
index 0000000..012d9a5
--- /dev/null
+++ b/man/sg.1.xml
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1991 , Julianne Frances Haugh
+ Copyright (c) 2007 - 2008, 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY SYSLOG_SG_ENAB SYSTEM "login.defs.d/SYSLOG_SG_ENAB.xml">
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='sg.1'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1991</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>sg</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>sg</refname>
+ <refpurpose>execute command as different group ID</refpurpose>
+ </refnamediv>
+ <!-- body begins here -->
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>sg</command>
+ <arg choice='opt'>- </arg>
+ <arg choice='opt'>group
+ <arg choice='opt'>-c </arg>
+ command
+ </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The <command>sg</command> command works similar to
+ <command>newgrp</command> but accepts a command. The command will be
+ executed with the <filename>/bin/sh</filename> shell. With most shells
+ you may run <command>sg</command> from, you need to enclose multi-word
+ commands in quotes. Another difference between
+ <command>newgrp</command> and <command>sg</command> is that some
+ shells treat <command>newgrp</command> specially, replacing themselves
+ with a new instance of a shell that <command>newgrp</command> creates.
+ This doesn't happen with <command>sg</command>, so upon exit from a
+ <command>sg</command> command you are returned to your previous group
+ ID.
+ </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>
+ &SYSLOG_SG_ENAB;
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/passwd</filename></term>
+ <listitem>
+ <para>User account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/shadow</filename></term>
+ <listitem>
+ <para>Secure user account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/group</filename></term>
+ <listitem>
+ <para>Group account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="gshadow">
+ <term><filename>/etc/gshadow</filename></term>
+ <listitem>
+ <para>Secure group account information.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>id</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>su</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>gpasswd</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>group</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry><phrase condition="gshadow">,
+ <citerefentry>
+ <refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>
+ </phrase>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/shadow.3.xml b/man/shadow.3.xml
new file mode 100644
index 0000000..edc46d5
--- /dev/null
+++ b/man/shadow.3.xml
@@ -0,0 +1,248 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1989 - 1993, Julianne Frances Haugh
+ Copyright (c) 2007 - 2008, 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='shadow.3'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1989</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>shadow</refentrytitle>
+ <manvolnum>3</manvolnum>
+ <refmiscinfo class="sectdesc">Library Calls</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>shadow</refname>
+ <refname>getspnam</refname>
+ <refpurpose>encrypted password file routines</refpurpose>
+ </refnamediv>
+
+ <refsect1 id='syntax'>
+ <title>SYNTAX</title>
+ <para>
+ <emphasis>#include &lt;shadow.h&gt;</emphasis>
+ </para>
+
+ <para>
+ <emphasis>struct spwd *getspent();</emphasis>
+ </para>
+
+ <para>
+ <emphasis>struct spwd *getspnam(char</emphasis> <emphasis
+ remap='I'>*name</emphasis><emphasis>);</emphasis>
+ </para>
+
+ <para>
+ <emphasis>void setspent();</emphasis>
+ </para>
+
+ <para>
+ <emphasis>void endspent();</emphasis>
+ </para>
+
+ <para>
+ <emphasis>struct spwd *fgetspent(FILE</emphasis> <emphasis
+ remap='I'>*fp</emphasis><emphasis>);</emphasis>
+ </para>
+
+ <para>
+ <emphasis>struct spwd *sgetspent(char</emphasis> <emphasis
+ remap='I'>*cp</emphasis><emphasis>);</emphasis>
+ </para>
+
+ <para>
+ <emphasis>int putspent(struct spwd</emphasis> <emphasis
+ remap='I'>*p,</emphasis> <emphasis>FILE</emphasis> <emphasis
+ remap='I'>*fp</emphasis><emphasis>);</emphasis>
+ </para>
+
+ <para>
+ <emphasis>int lckpwdf();</emphasis>
+ </para>
+
+ <para>
+ <emphasis>int ulckpwdf();</emphasis>
+ </para>
+ </refsect1>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ <emphasis remap='I'>shadow</emphasis> manipulates the contents of the
+ shadow password file, <filename>/etc/shadow</filename>. The structure
+ in the <emphasis remap='I'>#include</emphasis> file is:
+ </para>
+ <programlisting>struct spwd {
+ char *sp_namp; /* user login name */
+ char *sp_pwdp; /* encrypted password */
+ long int sp_lstchg; /* last password change */
+ long int sp_min; /* days until change allowed. */
+ long int sp_max; /* days before change required */
+ long int sp_warn; /* days warning for expiration */
+ long int sp_inact; /* days before account inactive */
+ long int sp_expire; /* date when account expires */
+ unsigned long int sp_flag; /* reserved for future use */
+}
+ </programlisting>
+ <para>The meanings of each field are:</para>
+ <itemizedlist mark='bullet'>
+ <listitem>
+ <para>sp_namp - pointer to null-terminated user name</para>
+ </listitem>
+ <listitem>
+ <para>sp_pwdp - pointer to null-terminated password</para>
+ </listitem>
+ <listitem>
+ <para>sp_lstchg - days since Jan 1, 1970 password was last changed</para>
+ </listitem>
+ <listitem>
+ <para>sp_min - days before which password may not be changed</para>
+ </listitem>
+ <listitem>
+ <para>sp_max - days after which password must be changed</para>
+ </listitem>
+ <listitem>
+ <para>sp_warn - days before password is to expire that user is warned of
+ pending password expiration
+ </para>
+ </listitem>
+ <listitem>
+ <para>sp_inact - days after password expires that account is considered
+ inactive and disabled
+ </para>
+ </listitem>
+ <listitem>
+ <para>sp_expire - days since Jan 1, 1970 when account will be disabled</para>
+ </listitem>
+ <listitem>
+ <para>sp_flag - reserved for future use</para>
+ </listitem>
+ </itemizedlist>
+
+ </refsect1>
+
+ <refsect1 id='description2'>
+ <title>DESCRIPTION</title>
+ <para>
+ <emphasis>getspent</emphasis>, <emphasis>getspname</emphasis>,
+ <emphasis>fgetspent</emphasis>, and <emphasis>sgetspent</emphasis>
+ each return a pointer to a <emphasis>struct spwd</emphasis>.
+ <emphasis>getspent</emphasis> returns the next entry from the file,
+ and <emphasis>fgetspent</emphasis> returns the next entry from the
+ given stream, which is assumed to be a file of the proper format.
+ <emphasis>sgetspent</emphasis> returns a pointer to a <emphasis>struct
+ spwd</emphasis> using the provided string as input.
+ <emphasis>getspnam</emphasis> searches from the current position in
+ the file for an entry matching <emphasis>name</emphasis>.
+ </para>
+
+ <para>
+ <emphasis>setspent</emphasis> and <emphasis>endspent</emphasis> may be
+ used to begin and end, respectively, access to the shadow password
+ file.
+ </para>
+
+ <para>
+ The <emphasis>lckpwdf</emphasis> and <emphasis>ulckpwdf</emphasis>
+ routines should be used to insure exclusive access to the
+ <filename>/etc/shadow</filename> file. <emphasis>lckpwdf</emphasis>
+ attempts to acquire a lock using <emphasis>pw_lock</emphasis> for up
+ to 15 seconds. It continues by attempting to acquire a second lock
+ using <emphasis>spw_lock</emphasis> for the remainder of the initial
+ 15 seconds. Should either attempt fail after a total of 15 seconds,
+ <emphasis>lckpwdf</emphasis> returns -1. When both locks are acquired
+ 0 is returned.
+ </para>
+ </refsect1>
+
+ <refsect1 id='diagnostics'>
+ <title>DIAGNOSTICS</title>
+ <para>
+ Routines return NULL if no more entries are available or if an error
+ occurs during processing. Routines which have <emphasis>int</emphasis>
+ as the return value return 0 for success and
+ -1 for failure.
+ </para>
+ </refsect1>
+
+ <refsect1 id='caveats'>
+ <title>CAVEATS</title>
+ <para>
+ These routines may only be used by the superuser as access to the
+ shadow password file is restricted.
+ </para>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/shadow</filename></term>
+ <listitem>
+ <para>Secure user account information.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>getpwent</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/shadow.5.xml b/man/shadow.5.xml
new file mode 100644
index 0000000..79ae27a
--- /dev/null
+++ b/man/shadow.5.xml
@@ -0,0 +1,314 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1989 - 1990, Julianne Frances Haugh
+ 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='shadow.5'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1989</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>shadow</refentrytitle>
+ <manvolnum>5</manvolnum>
+ <refmiscinfo class="sectdesc">File Formats and Conversions</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>shadow</refname>
+ <refpurpose>shadowed password file</refpurpose>
+ </refnamediv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ <filename>shadow</filename> is a file which contains the password
+ information for the system's accounts and optional aging
+ information.
+ </para>
+
+ <para>
+ This file must not be readable by regular users if password security
+ is to be maintained.
+ </para>
+
+ <para>
+ Each line of this file contains 9 fields, separated by colons
+ (<quote>:</quote>), in the following order:
+ </para>
+
+ <variablelist>
+ <varlistentry>
+ <term><emphasis role="bold">login name</emphasis></term>
+ <listitem>
+ <para>
+ It must be a valid account name, which exist on the system.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><emphasis role="bold">encrypted password</emphasis></term>
+ <listitem>
+ <para>
+ This field may be empty, in which case no passwords are
+ required to authenticate as the specified login name.
+ However, some applications which read the
+ <filename>/etc/shadow</filename> file may decide not to permit
+ any access at all if the password field is empty.
+ </para>
+ <para>
+ A password field which starts with an exclamation mark means
+ that the password is locked. The remaining characters on the
+ 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>
+ <term>
+ <emphasis role="bold">date of last password change</emphasis>
+ </term>
+ <listitem>
+ <para>
+ The date of the last password change, expressed as the number
+ of days since Jan 1, 1970.
+ </para>
+ <para>
+ The value 0 has a special meaning, which is that the user
+ should change her password the next time she will log in the
+ system.
+ </para>
+ <para>
+ An empty field means that password aging features are
+ disabled.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><emphasis role="bold">minimum password age</emphasis></term>
+ <listitem>
+ <para>
+ The minimum password age is the number of days the user will
+ have to wait before she will be allowed to change her password
+ again.
+ </para>
+ <para>
+ An empty field and value 0 mean that there are no minimum
+ password age.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><emphasis role="bold">maximum password age</emphasis></term>
+ <listitem>
+ <para>
+ The maximum password age is the number of days after which the
+ user will have to change her password.
+ </para>
+ <para>
+ After this number of days is elapsed, the password may still
+ be valid. The user should be asked to change her password the
+ next time she will log in.
+ </para>
+ <para>
+ An empty field means that there are no maximum password age,
+ no password warning period, and no password inactivity period
+ (see below).
+ </para>
+ <para>
+ If the maximum password age is lower than the minimum password
+ age, the user cannot change her password.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis role="bold">password warning period</emphasis>
+ </term>
+ <listitem>
+ <para>
+ The number of days before a password is going to expire (see
+ the maximum password age above) during which the user should
+ be warned.
+ </para>
+ <para>
+ An empty field and value 0 mean that there are no password
+ warning period.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis role="bold">password inactivity period</emphasis>
+ </term>
+ <listitem>
+ <para>
+ The number of days after a password has expired (see the
+ maximum password age above) during which the password should
+ still be accepted (and the user should update her password
+ during the next login).
+ </para>
+ <para>
+ After expiration of the password and this expiration period is
+ elapsed, no login is possible using the current user's
+ password. The user should contact her administrator.
+ </para>
+ <para>
+ An empty field means that there are no enforcement of an
+ inactivity period.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis role="bold">account expiration date</emphasis>
+ </term>
+ <listitem>
+ <para>
+ The date of expiration of the account, expressed as the number
+ of days since Jan 1, 1970.
+ </para>
+ <para>
+ Note that an account expiration differs from a password
+ expiration. In case of an account expiration, the user shall
+ not be allowed to login. In case of a password expiration,
+ the user is not allowed to login using her password.
+ </para>
+ <para>
+ An empty field means that the account will never expire.
+ </para>
+ <para>
+ The value 0 should not be used as it is interpreted as either
+ an account with no expiration, or as an expiration on Jan 1,
+ 1970.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><emphasis role="bold">reserved field</emphasis></term>
+ <listitem>
+ <para>This field is reserved for future use.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/passwd</filename></term>
+ <listitem>
+ <para>User account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/shadow</filename></term>
+ <listitem>
+ <para>Secure user account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/shadow-</filename></term>
+ <listitem>
+ <para>Backup file for /etc/shadow.</para>
+ <para>
+ Note that this file is used by the tools of the shadow
+ toolsuite, but not by all user and password management tools.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>chage</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>pwunconv</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>su</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>sulogin</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/su.1.xml b/man/su.1.xml
new file mode 100644
index 0000000..4b413fc
--- /dev/null
+++ b/man/su.1.xml
@@ -0,0 +1,452 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1989 - 1990, Julianne Frances Haugh
+ Copyright (c) 2007 - 2008, 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY CONSOLE SYSTEM "login.defs.d/CONSOLE.xml">
+<!ENTITY CONSOLE_GROUPS SYSTEM "login.defs.d/CONSOLE_GROUPS.xml">
+<!ENTITY DEFAULT_HOME SYSTEM "login.defs.d/DEFAULT_HOME.xml">
+<!ENTITY ENV_HZ SYSTEM "login.defs.d/ENV_HZ.xml">
+<!ENTITY ENVIRON_FILE SYSTEM "login.defs.d/ENVIRON_FILE.xml">
+<!ENTITY ENV_PATH SYSTEM "login.defs.d/ENV_PATH.xml">
+<!ENTITY ENV_SUPATH SYSTEM "login.defs.d/ENV_SUPATH.xml">
+<!ENTITY ENV_TZ SYSTEM "login.defs.d/ENV_TZ.xml">
+<!ENTITY LOGIN_STRING SYSTEM "login.defs.d/LOGIN_STRING.xml">
+<!ENTITY MAIL_CHECK_ENAB SYSTEM "login.defs.d/MAIL_CHECK_ENAB.xml">
+<!ENTITY MAIL_DIR SYSTEM "login.defs.d/MAIL_DIR.xml">
+<!ENTITY QUOTAS_ENAB SYSTEM "login.defs.d/QUOTAS_ENAB.xml">
+<!ENTITY SULOG_FILE SYSTEM "login.defs.d/SULOG_FILE.xml">
+<!ENTITY SU_NAME SYSTEM "login.defs.d/SU_NAME.xml">
+<!ENTITY SU_WHEEL_ONLY SYSTEM "login.defs.d/SU_WHEEL_ONLY.xml">
+<!ENTITY SYSLOG_SU_ENAB SYSTEM "login.defs.d/SYSLOG_SU_ENAB.xml">
+<!ENTITY USERGROUPS_ENAB SYSTEM "login.defs.d/USERGROUPS_ENAB.xml">
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='su.1'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1989</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>su</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>su</refname>
+ <refpurpose>change user ID or become superuser</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>su</command>
+ <arg choice='opt'>
+ <replaceable>options</replaceable>
+ </arg>
+ <arg choice='opt'>
+ <replaceable>-</replaceable>
+ </arg>
+ <arg choice='opt'>
+ <replaceable>username</replaceable>
+ <arg choice='opt'>
+ <replaceable>args</replaceable>
+ </arg>
+ </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <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
+ <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>
+ 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
+ passwords will produce an error message. All attempts, both valid and
+ invalid, are logged to detect abuse of the system.
+ </para>
+
+ <para>
+ The current environment is passed to the new shell. The value of
+ <envar>$PATH</envar> is reset to <filename>/bin:/usr/bin</filename>
+ for normal users, or <filename>/sbin:/bin:/usr/sbin:/usr/bin</filename>
+ for the superuser. This may be changed with the
+ <option>ENV_PATH</option> and <option>ENV_SUPATH</option>
+ definitions in <filename>/etc/login.defs</filename>.
+ </para>
+
+ <para>
+ A subsystem login is indicated by the presence of a "*" as the first
+ character of the login shell. The given home directory will be used as
+ the root of a new file system which the user is actually logged into.
+ </para>
+ </refsect1>
+
+ <refsect1 id='options'>
+ <title>OPTIONS</title>
+ <para>The options which apply to the <command>su</command> command are:
+ </para>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term>
+ <option>-c</option>, <option>--command</option>&nbsp;<replaceable>COMMAND</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Specify a command that will be invoked by the shell using its
+ <option>-c</option>.
+ </para>
+ <para>
+ The executed command will have no controlling terminal. This
+ option cannot be used to execute interactive programs which
+ need a controlling TTY.
+ <!-- This avoids TTY hijacking when su is used to lower
+ privileges -->
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-</option>, <option>-l</option>, <option>--login</option>
+ </term>
+ <listitem>
+ <para>
+ Provide an environment similar to what the user would expect had
+ the user logged in directly.
+ </para>
+ <para>
+ When <option>-</option> is used, it must be specified before any
+ <option>username</option>. For portability it is recommended
+ to use it as last option, before any
+ <option>username</option>. The other forms
+ (<option>-l</option> and <option>--login</option>)
+ do not have this restriction.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SHELL</replaceable>
+ </term>
+ <listitem>
+ <para>The shell that will be invoked.</para>
+ <para>
+ The invoked shell is chosen from (highest priority first):
+ <!--This should be an ordered list, but lists inside another
+ list does not work well with current docbook.
+ - nekral - 2009.06.03 -->
+ <variablelist>
+ <varlistentry><term></term><listitem>
+ <para>The shell specified with --shell.</para>
+ </listitem></varlistentry>
+ <varlistentry><term></term><listitem>
+ <para>
+ If <option>--preserve-environment</option> is used, the
+ shell specified by the <envar>$SHELL</envar> environment
+ variable.
+ </para>
+ </listitem></varlistentry>
+ <varlistentry><term></term><listitem>
+ <para>
+ The shell indicated in the <filename>/etc/passwd</filename>
+ entry for the target user.
+ </para>
+ </listitem></varlistentry>
+ <varlistentry><term></term><listitem>
+ <para><filename>/bin/sh</filename> if a shell could not be
+ found by any above method.</para>
+ </listitem></varlistentry>
+ </variablelist>
+ </para>
+ <para>
+ If the target user has a restricted shell (i.e. the shell field of
+ this user's entry in <filename>/etc/passwd</filename> is not
+ listed in <filename>/etc/shells</filename>), then the
+ <option>--shell</option> option or the <envar>$SHELL</envar>
+ environment variable won't be taken into account, unless
+ <command>su</command> is called by root.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-m</option>, <option>-p</option>,
+ <option>--preserve-environment</option>
+ </term>
+ <listitem>
+ <para>
+ Preserve the current environment, except for:
+ <variablelist>
+ <varlistentry>
+ <term><envar>$PATH</envar></term>
+ <listitem>
+ <para>
+ reset according to the
+ <filename>/etc/login.defs</filename> options
+ <option>ENV_PATH</option> or
+ <option>ENV_SUPATH</option> (see below);
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><envar>$IFS</envar></term>
+ <listitem>
+ <para>
+ reset to
+ <quote>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</quote>,
+ if it was set.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ <para>
+ If the target user has a restricted shell, this option has no
+ effect (unless <command>su</command> is called by root).
+ </para>
+ <para>
+ Note that the default behavior for the environment is the
+ following:
+ <variablelist>
+ <varlistentry><term></term><listitem>
+ <para>
+ The <envar>$HOME</envar>, <envar>$SHELL</envar>,
+ <envar>$USER</envar>, <envar>$LOGNAME</envar>,
+ <envar>$PATH</envar>, and <envar>$IFS</envar>
+ environment variables are reset.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry><term></term><listitem>
+ <para>
+ If <option>--login</option> is not used, the
+ environment is copied, except for the variables above.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry><term></term><listitem>
+ <para>
+ If <option>--login</option> is used, the
+ <envar>$TERM</envar>, <envar>$COLORTERM</envar>,
+ <envar>$DISPLAY</envar>, and
+ <envar>$XAUTHORITY</envar> environment variables are
+ copied if they were set.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="no_pam"><term></term><listitem>
+ <para>
+ If <option>--login</option> is used, the
+ <envar>$TZ</envar>, <envar>$HZ</envar>, and
+ <envar>$MAIL</envar> environment
+ variables are set according to the
+ <filename>/etc/login.defs</filename>
+ options <option>ENV_TZ</option>,
+ <option>ENV_HZ</option>, <option>MAIL_DIR</option>, and
+ <option>MAIL_FILE</option> (see below).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="no_pam"><term></term><listitem>
+ <para>
+ If <option>--login</option> is used, other environment
+ variables might be set by the
+ <option>ENVIRON_FILE</option> file (see below).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="pam"><term></term><listitem>
+ <para>
+ Other environments might be set by PAM modules.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='caveats'>
+ <title>CAVEATS</title>
+ <para>
+ This version of <command>su</command> has many compilation options,
+ only some of which may be in use at any particular site.
+ </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>
+ &CONSOLE;
+ &CONSOLE_GROUPS;
+ &DEFAULT_HOME;
+ <phrase condition="no_pam">&ENV_HZ;</phrase>
+ &ENVIRON_FILE;
+ &ENV_PATH;
+ &ENV_SUPATH;
+ &ENV_TZ;
+ <phrase condition="no_pam">&LOGIN_STRING;</phrase>
+ &MAIL_CHECK_ENAB;
+ <phrase condition="no_pam">&MAIL_DIR;</phrase>
+ &QUOTAS_ENAB;
+ &SULOG_FILE;
+ &SU_NAME;
+ &SU_WHEEL_ONLY;
+ &SYSLOG_SU_ENAB;
+ <phrase condition="no_pam">&USERGROUPS_ENAB;</phrase>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/passwd</filename></term>
+ <listitem>
+ <para>User account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/shadow</filename></term>
+ <listitem>
+ <para>Secure user account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/login.defs</filename></term>
+ <listitem>
+ <para>Shadow password suite configuration.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='exit_values'>
+ <title>EXIT VALUES</title>
+ <para>
+ On success, <command>su</command> returns the exit value of the
+ command it executed.
+ </para>
+ <para>
+ If this command was terminated by a signal, <command>su</command>
+ returns the number of this signal plus 128.
+ </para>
+ <para>
+ If su has to kill the command (because it was asked to terminate,
+ and the command did not terminate in time), <command>su</command>
+ returns 255.
+ </para>
+ <para>
+ Some exit values from <command>su</command> are independent from the
+ executed command:
+ <variablelist>
+ <varlistentry>
+ <term><replaceable>0</replaceable></term>
+ <listitem>
+ <para>success (<option>--help</option> only)</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>1</replaceable></term>
+ <listitem>
+ <para>System or authentication failure</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>126</replaceable></term>
+ <listitem>
+ <para>The requested command was not found</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>127</replaceable></term>
+ <listitem>
+ <para>The requested command could not be executed</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para><citerefentry>
+ <refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/suauth.5.xml b/man/suauth.5.xml
new file mode 100644
index 0000000..97ef6d1
--- /dev/null
+++ b/man/suauth.5.xml
@@ -0,0 +1,229 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1996 , Marek Michałkiewicz
+ Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='suauth.5'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Marek</firstname>
+ <surname>Michałkiewicz</surname>
+ <contrib>Creation, 1996</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>suauth</refentrytitle>
+ <manvolnum>5</manvolnum>
+ <refmiscinfo class="sectdesc">File Formats and Conversions</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>suauth</refname>
+ <refpurpose>detailed su control file</refpurpose>
+ </refnamediv>
+ <!-- body begins here -->
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>/etc/suauth</command>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The file <filename>/etc/suauth</filename> is referenced whenever the
+ su command is called. It can change the behaviour of the su command,
+ based upon:
+ </para>
+
+ <!-- .RS -->
+ <literallayout remap='.nf'>
+ 1) the user su is targeting
+ </literallayout>
+ <!-- .fi -->
+ <para>
+ 2) the user executing the su command (or any groups he might be
+ a member of)
+ </para>
+
+ <para>
+ The file is formatted like this, with lines starting with a # being
+ treated as comment lines and ignored;
+ </para>
+
+ <literallayout remap='RS'>
+ to-id:from-id:ACTION
+ </literallayout>
+
+ <para>
+ Where to-id is either the word <emphasis>ALL</emphasis>, a list of
+ usernames delimited by "," or the words <emphasis>ALL
+ EXCEPT</emphasis> followed by a list of usernames delimited by ",".
+ </para>
+
+ <para>
+ from-id is formatted the same as to-id except the extra word
+ <emphasis>GROUP</emphasis> is recognized. <emphasis>ALL EXCEPT
+ GROUP</emphasis> is perfectly valid too. Following
+ <emphasis>GROUP</emphasis> appears one or more group names, delimited
+ by ",". It is not sufficient to have primary group id of the relevant
+ group, an entry in
+ <citerefentry><refentrytitle>/etc/group</refentrytitle>
+ <manvolnum>5</manvolnum></citerefentry> is necessary.
+ </para>
+
+ <para>
+ Action can be one only of the following currently supported options.
+ </para>
+ <variablelist remap='TP'>
+ <varlistentry>
+ <term>
+ <emphasis>DENY</emphasis>
+ </term>
+ <listitem>
+ <para>The attempt to su is stopped before a password is
+ even asked for.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis>NOPASS</emphasis>
+ </term>
+ <listitem>
+ <para>
+ The attempt to su is automatically successful; no password is
+ asked for.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis>OWNPASS</emphasis>
+ </term>
+ <listitem>
+ <para>
+ For the su command to be successful, the user must enter his or
+ her own password. They are told this.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>
+ Note there are three separate fields delimited by a colon. No
+ whitespace must surround this colon. Also note that the file is
+ examined sequentially line by line, and the first applicable rule is
+ used without examining the file further. This makes it possible for a
+ system administrator to exercise as fine control as he or she wishes.
+ </para>
+ </refsect1>
+
+ <refsect1 id='example'>
+ <title>EXAMPLE</title>
+ <literallayout remap='.nf'>
+ # sample /etc/suauth file
+ #
+ # A couple of privileged usernames may
+ # su to root with their own password.
+ #
+ root:chris,birddog:OWNPASS
+ #
+ # Anyone else may not su to root unless in
+ # group wheel. This is how BSD does things.
+ #
+ root:ALL EXCEPT GROUP wheel:DENY
+ #
+ # Perhaps terry and birddog are accounts
+ # owned by the same person.
+ # Access can be arranged between them
+ # with no password.
+ #
+ terry:birddog:NOPASS
+ birddog:terry:NOPASS
+ #
+ </literallayout>
+ <!-- .fi -->
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/suauth</filename></term>
+ <listitem><para></para></listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='bugs'>
+ <title>BUGS</title>
+ <para>
+ There could be plenty lurking. The file parser is particularly
+ unforgiving about syntax errors, expecting no spurious whitespace
+ (apart from beginning and end of lines), and a specific token
+ delimiting different things.
+ </para>
+ </refsect1>
+
+ <refsect1 id='diagnostics'>
+ <title>DIAGNOSTICS</title>
+ <para>
+ An error parsing the file is reported using
+ <citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+ as level ERR on facility AUTH.
+ </para>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>su</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/subgid.5.xml b/man/subgid.5.xml
new file mode 100644
index 0000000..70c561c
--- /dev/null
+++ b/man/subgid.5.xml
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2013 Eric W. Biederman
+ 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!-- 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>
+ <refmiscinfo class="sectdesc">File Formats and Conversions</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>subgid</refname>
+ <refpurpose>the subordinate gid file</refpurpose>
+ </refnamediv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ Each line in <filename>/etc/subgid</filename> contains
+ a user name and a range of subordinate group ids that user
+ is allowed to use.
+
+ This is specified with three fields delimited by colons
+ (<quote>:</quote>).
+ These fields are:
+ </para>
+ <itemizedlist mark='bullet'>
+ <listitem>
+ <para>login name or UID</para>
+ </listitem>
+ <listitem>
+ <para>numerical subordinate group ID</para>
+ </listitem>
+ <listitem>
+ <para>numerical subordinate group ID count</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ This file specifies the group IDs that ordinary users can use, with
+ the <command>newgidmap</command> command, to configure gid mapping
+ in a user namespace.
+ </para>
+
+ <para>
+ Multiple ranges may be specified per user.
+ </para>
+
+ <para>
+ When large number of entries (10000-100000 or more) are defined in
+ <filename>/etc/subgid</filename>, parsing performance penalty will
+ become noticeable. In this case it is recommended to use UIDs
+ instead of login names. Benchmarks have shown speed-ups up to 20x.
+ </para>
+
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/subgid</filename></term>
+ <listitem>
+ <para>Per user subordinate group IDs.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/subgid-</filename></term>
+ <listitem>
+ <para>Backup file for /etc/subgid.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>newgidmap</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>newuidmap</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>newusers</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>subuid</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>user_namespaces</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/subuid.5.xml b/man/subuid.5.xml
new file mode 100644
index 0000000..ec6a85f
--- /dev/null
+++ b/man/subuid.5.xml
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2013 Eric W. Biederman
+ 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!-- 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>
+ <refmiscinfo class="sectdesc">File Formats and Conversions</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>subuid</refname>
+ <refpurpose>the subordinate uid file</refpurpose>
+ </refnamediv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ Each line in <filename>/etc/subuid</filename> contains
+ a user name and a range of subordinate user ids that user
+ is allowed to use.
+
+ This is specified with three fields delimited by colons
+ (<quote>:</quote>).
+ These fields are:
+ </para>
+ <itemizedlist mark='bullet'>
+ <listitem>
+ <para>login name or UID</para>
+ </listitem>
+ <listitem>
+ <para>numerical subordinate user ID</para>
+ </listitem>
+ <listitem>
+ <para>numerical subordinate user ID count</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>
+ This file specifies the user IDs that ordinary users can use, with
+ the <command>newuidmap</command> command, to configure uid mapping
+ in a user namespace.
+ </para>
+
+ <para>
+ Multiple ranges may be specified per user.
+ </para>
+
+ <para>
+ When large number of entries (10000-100000 or more) are defined in
+ <filename>/etc/subuid</filename>, parsing performance penalty will
+ become noticeable. In this case it is recommended to use UIDs
+ instead of login names. Benchmarks have shown speed-ups up to 20x.
+ </para>
+
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/subuid</filename></term>
+ <listitem>
+ <para>Per user subordinate user IDs.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/subuid-</filename></term>
+ <listitem>
+ <para>Backup file for /etc/subuid.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>newgidmap</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>newuidmap</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>newusers</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>subgid</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>user_namespaces</refentrytitle><manvolnum>7</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/sulogin.8.xml b/man/sulogin.8.xml
new file mode 100644
index 0000000..432232c
--- /dev/null
+++ b/man/sulogin.8.xml
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1989 - 1992, Julianne Frances Haugh
+ Copyright (c) 2007 - 2008, 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY ENV_HZ SYSTEM "login.defs.d/ENV_HZ.xml">
+<!ENTITY ENV_TZ SYSTEM "login.defs.d/ENV_TZ.xml">
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='sulogin.8'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1989</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>sulogin</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>sulogin</refname>
+ <refpurpose>Single-user login</refpurpose>
+ </refnamediv>
+
+ <refsect1 id='syntax'>
+ <title>SYNTAX</title>
+ <para><command>sulogin</command> [<emphasis remap='I'>tty-device</emphasis>]
+ </para>
+ </refsect1>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The <command>sulogin</command> command is invoked by <command>init</command>
+ prior to allowing the user access to the system when in single user mode.
+ This feature may only be available on certain systems where
+ <command>init</command> has been modified accordingly, or where the
+ <filename>/etc/inittab</filename> has an entry for a single user
+ login.
+ </para>
+
+ <para>The user is prompted</para>
+
+ <para>Type control-d to proceed with normal startup,
+ <!-- .br -->
+ (or give root password for system maintenance):
+ </para>
+
+ <para>
+ Input and output will be performed with the standard file descriptors
+ unless the optional device name argument is provided.
+ </para>
+
+ <para>
+ If the user enters the correct root password, a login session is
+ initiated. When <emphasis>EOF</emphasis> is pressed instead, the
+ system enters multi-user mode.
+ </para>
+
+ <para>
+ After the user exits the single-user shell, or presses
+ <emphasis>EOF</emphasis>, the system begins the initialization process
+ required to enter multi-user mode.
+ </para>
+ </refsect1>
+
+ <refsect1 id='caveats'>
+ <title>CAVEATS</title>
+ <para>
+ This command can only be used if <command>init</command> has been
+ modified to call <command>sulogin</command> instead of
+ <filename>/bin/sh</filename>, or if the user has set the <emphasis
+ remap='I'>inittab</emphasis> to support a single user login. For
+ example, the line:
+ </para>
+
+ <para>co:s:respawn:/etc/sulogin /dev/console</para>
+
+ <para>should execute the sulogin command in single user mode.</para>
+
+ <para>
+ As complete an environment as possible is created. However, various
+ devices may be unmounted or uninitialized and many of the user
+ commands may be unavailable or nonfunctional as a result.
+ </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>
+ &ENV_HZ;
+ &ENV_TZ;
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/passwd</filename></term>
+ <listitem>
+ <para>User account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/shadow</filename></term>
+ <listitem>
+ <para>Secure user account information.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>init</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/sv/Makefile.am b/man/sv/Makefile.am
new file mode 100644
index 0000000..e64b7bc
--- /dev/null
+++ b/man/sv/Makefile.am
@@ -0,0 +1,49 @@
+mandir = @mandir@/sv
+
+# 2012.01.28 - activate manpages with more than 50% translated messages
+man_MANS = \
+ man1/chage.1 \
+ man1/chsh.1 \
+ man1/expiry.1 \
+ man5/faillog.5 \
+ man8/faillog.8 \
+ man3/getspnam.3 \
+ man8/groupadd.8 \
+ man8/groupdel.8 \
+ man8/groupmems.8 \
+ man8/groupmod.8 \
+ man1/groups.1 \
+ man8/grpck.8 \
+ man5/gshadow.5 \
+ man8/lastlog.8 \
+ man8/logoutd.8 \
+ man1/newgrp.1 \
+ man8/nologin.8 \
+ man1/passwd.1 \
+ man5/passwd.5 \
+ man8/pwck.8 \
+ man1/sg.1 \
+ man3/shadow.3 \
+ man5/suauth.5 \
+ man8/userdel.8 \
+ man8/vigr.8 \
+ man8/vipw.8
+
+man_nopam = \
+ man5/limits.5 \
+ man5/porttime.5
+
+if !USE_PAM
+man_MANS += $(man_nopam)
+endif
+
+EXTRA_DIST = \
+ $(man_MANS) \
+ man1/id.1
+
+if USE_PAM
+EXTRA_DIST += $(man_nopam)
+endif
+
+include ../generate_translations.mak
+
diff --git a/man/sv/Makefile.in b/man/sv/Makefile.in
new file mode 100644
index 0000000..f6f7147
--- /dev/null
+++ b/man/sv/Makefile.in
@@ -0,0 +1,770 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@USE_PAM_FALSE@am__append_1 = $(man_nopam)
+@USE_PAM_TRUE@am__append_2 = $(man_nopam)
+subdir = man/sv
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" \
+ "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"
+man3dir = $(mandir)/man3
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/../generate_mans.mak \
+ $(srcdir)/../generate_translations.mak $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@/sv
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# 2012.01.28 - activate manpages with more than 50% translated messages
+man_MANS = man1/chage.1 man1/chsh.1 man1/expiry.1 man5/faillog.5 \
+ man8/faillog.8 man3/getspnam.3 man8/groupadd.8 man8/groupdel.8 \
+ man8/groupmems.8 man8/groupmod.8 man1/groups.1 man8/grpck.8 \
+ man5/gshadow.5 man8/lastlog.8 man8/logoutd.8 man1/newgrp.1 \
+ man8/nologin.8 man1/passwd.1 man5/passwd.5 man8/pwck.8 \
+ man1/sg.1 man3/shadow.3 man5/suauth.5 man8/userdel.8 \
+ man8/vigr.8 man8/vipw.8 $(am__append_1)
+man_nopam = \
+ man5/limits.5 \
+ man5/porttime.5
+
+EXTRA_DIST = $(man_MANS) man1/id.1 $(am__append_2)
+LANG = $(notdir $(CURDIR))
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_FALSE@PAM_COND = no_pam
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_TRUE@PAM_COND = pam
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_FALSE@SHADOWGRP_COND = no_gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_TRUE@SHADOWGRP_COND = gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@WITH_TCB_FALSE@TCB_COND = no_tcb
+@ENABLE_REGENERATE_MAN_TRUE@@WITH_TCB_TRUE@TCB_COND = tcb
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_FALSE@SHA_CRYPT_COND = no_sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_TRUE@SHA_CRYPT_COND = sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@@ENABLE_SUBIDS_FALSE@SUBIDS_COND = no_subids
+@ENABLE_REGENERATE_MAN_TRUE@@ENABLE_SUBIDS_TRUE@SUBIDS_COND = subids
+CLEANFILES = messages.mo login.defs.d $(EXTRA_DIST) $(addsuffix .xml,$(EXTRA_DIST)) config.xml
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../generate_translations.mak $(srcdir)/../generate_mans.mak $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/sv/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign man/sv/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(srcdir)/../generate_translations.mak $(srcdir)/../generate_mans.mak $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+install-man3: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man3dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.3[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man3:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man3dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.3[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir)
+install-man5: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man5dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.5[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man5:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man5dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.5[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir)
+install-man8: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man8dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.8[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man8:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man8dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.8[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+@ENABLE_REGENERATE_MAN_FALSE@clean-local:
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1 install-man3 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man3 uninstall-man5 \
+ uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ clean-local cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-man3 install-man5 install-man8 \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags-am uninstall uninstall-am uninstall-man uninstall-man1 \
+ uninstall-man3 uninstall-man5 uninstall-man8
+
+.PRECIOUS: Makefile
+
+
+@ENABLE_REGENERATE_MAN_TRUE@config.xml: ../config.xml.in
+@ENABLE_REGENERATE_MAN_TRUE@ $(MAKE) -C .. config.xml
+@ENABLE_REGENERATE_MAN_TRUE@ cp ../config.xml $@
+
+@ENABLE_REGENERATE_MAN_TRUE@messages.mo: ../po/$(LANG).po
+@ENABLE_REGENERATE_MAN_TRUE@ msgfmt ../po/$(LANG).po -o messages.mo
+
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.d:
+@ENABLE_REGENERATE_MAN_TRUE@ ln -sf ../login.defs.d login.defs.d
+
+@ENABLE_REGENERATE_MAN_TRUE@%.xml: ../%.xml messages.mo login.defs.d
+@ENABLE_REGENERATE_MAN_TRUE@ if grep -q SHADOW-CONFIG-HERE $< ; then \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^<!-- SHADOW-CONFIG-HERE -->/<!ENTITY % config SYSTEM "config.xml">%config;/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ else \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^\(<!DOCTYPE .*docbookx.dtd"\)>/\1 [<!ENTITY % config SYSTEM "config.xml">%config;]>/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ fi
+@ENABLE_REGENERATE_MAN_TRUE@ itstool -d -l $(LANG) -m messages.mo -o . $@
+@ENABLE_REGENERATE_MAN_TRUE@ sed -i 's:\(^<refentry .*\)>:\1 lang="$(LANG)">:' $@
+
+@ENABLE_REGENERATE_MAN_TRUE@%.xml-config: %.xml
+@ENABLE_REGENERATE_MAN_TRUE@ if grep -q SHADOW-CONFIG-HERE $<; then \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^<!-- SHADOW-CONFIG-HERE -->/<!ENTITY % config SYSTEM "config.xml">%config;/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ else \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^\(<!DOCTYPE .*docbookx.dtd"\)>/\1 [<!ENTITY % config SYSTEM "config.xml">%config;]>/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ fi
+
+@ENABLE_REGENERATE_MAN_TRUE@man1/% man3/% man5/% man8/%: %.xml-config Makefile config.xml
+@ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam profile.condition "$(PAM_COND);$(SHADOWGRP_COND);$(TCB_COND);$(SHA_CRYPT_COND);$(SUBIDS_COND)" \
+@ENABLE_REGENERATE_MAN_TRUE@ --param "man.authors.section.enabled" "0" \
+@ENABLE_REGENERATE_MAN_TRUE@ --stringparam "man.output.base.dir" "" \
+@ENABLE_REGENERATE_MAN_TRUE@ --param "man.output.in.separate.dir" "1" \
+@ENABLE_REGENERATE_MAN_TRUE@ -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/profile-docbook.xsl $<
+
+@ENABLE_REGENERATE_MAN_TRUE@clean-local:
+@ENABLE_REGENERATE_MAN_TRUE@ rm -rf man1 man3 man5 man8
+
+#$(man_MANS):
+# @echo you need to run configure with --enable-man to generate man pages
+
+@ENABLE_REGENERATE_MAN_TRUE@man8/grpconv.8 man8/grpunconv.8 man8/pwunconv.8: man8/pwconv.8
+
+@ENABLE_REGENERATE_MAN_TRUE@man3/getspnam.3: man3/shadow.3
+
+@ENABLE_REGENERATE_MAN_TRUE@man8/vigr.8: man8/vipw.8
+
+@ENABLE_REGENERATE_MAN_FALSE@$(man_MANS):
+@ENABLE_REGENERATE_MAN_FALSE@ @echo you need to run configure with --enable-man to generate man pages
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/sv/man1/chage.1 b/man/sv/man1/chage.1
new file mode 100644
index 0000000..804e474
--- /dev/null
+++ b/man/sv/man1/chage.1
@@ -0,0 +1,189 @@
+'\" t
+.\" Title: chage
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Anv\(:andarkommandon
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "CHAGE" "1" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Anv\(:andarkommandon"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+chage \- \(:andra \(oaldringsinformation f\(:or anv\(:andarl\(:osenord
+.SH "SYNOPSIS"
+.HP \w'\fBchage\fR\ 'u
+\fBchage\fR [\fIflaggor\fR] \fIINLOGGNINGSNAMN\fR
+.SH "BESKRIVNING"
+.PP
+The
+\fBchage\fR
+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\&.
+.SH "FLAGGOR"
+.PP
+The options which apply to the
+\fBchage\fR
+command are:
+.PP
+\fB\-d\fR, \fB\-\-lastday\fR\ \&\fILAST_DAY\fR
+.RS 4
+Set the number of days since January 1st, 1970 when the password was last changed\&. The date may also be expressed in the format YYYY\-MM\-DD (or the format more commonly used in your area)\&.
+.RE
+.PP
+\fB\-E\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+Set the date or number of days since January 1, 1970 on which the user\*(Aqs account will no longer be accessible\&. The date may also be expressed in the format YYYY\-MM\-DD (or the format more commonly used in your area)\&. A user whose account is locked must contact the system administrator before being able to use the system again\&.
+.sp
+Passing the number
+\fI\-1\fR
+as the
+\fIEXPIRE_DATE\fR
+will remove an account expiration date\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.PP
+\fB\-i\fR, \fB\-\-iso8601\fR
+.RS 4
+When printing dates, use YYYY\-MM\-DD format\&.
+.RE
+.PP
+\fB\-I\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+Set the number of days of inactivity after a password has expired before the account is locked\&. The
+\fIINACTIVE\fR
+option is the number of days of inactivity\&. A user whose account is locked must contact the system administrator before being able to use the system again\&.
+.sp
+Passing the number
+\fI\-1\fR
+as the
+\fIINACTIVE\fR
+will remove an account\*(Aqs inactivity\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-list\fR
+.RS 4
+Visa kontots \(oaldringsinformation
+.RE
+.PP
+\fB\-m\fR, \fB\-\-mindays\fR\ \&\fIMIN_DAYS\fR
+.RS 4
+Set the minimum number of days between password changes to
+\fIMIN_DAYS\fR\&. A value of zero for this field indicates that the user may change their password at any time\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-maxdays\fR\ \&\fIMAX_DAYS\fR
+.RS 4
+Set the maximum number of days during which a password is valid\&. When
+\fIMAX_DAYS\fR
+plus
+\fILAST_DAY\fR
+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
+\fB\-W\fR
+option, which provides the user with advance warning\&.
+.sp
+Passing the number
+\fI\-1\fR
+as
+\fIMAX_DAYS\fR
+will remove checking a password\*(Aqs validity\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-W\fR, \fB\-\-warndays\fR\ \&\fIWARN_DAYS\fR
+.RS 4
+Set the number of days of warning before a password change is required\&. The
+\fIWARN_DAYS\fR
+option is the number of days prior to the password expiring that a user will be warned their password is about to expire\&.
+.RE
+.PP
+If none of the options are selected,
+\fBchage\fR
+operates in an interactive fashion, prompting the user with the current values for all of the fields\&. Enter the new value to change the field, or leave the line blank to use the current value\&. The current value is displayed between a pair of
+\fI[ ]\fR
+marks\&.
+.SH "NOTERA"
+.PP
+The
+\fBchage\fR
+program requires a shadow password file to be available\&.
+.PP
+The
+\fBchage\fR
+command is restricted to the root user, except for the
+\fB\-l\fR
+option, which may be used by an unprivileged user to determine when their password or account is due to expire\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.SH "FILER"
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+S\(:aker anv\(:andarkontoinformation\&.
+.RE
+.SH "AVSLUTNINGSV\(:ARDEN"
+.PP
+The
+\fBchage\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+permission denied
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI15\fR
+.RS 4
+can\*(Aqt find the shadow password file
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/sv/man1/chsh.1 b/man/sv/man1/chsh.1
new file mode 100644
index 0000000..c07419b
--- /dev/null
+++ b/man/sv/man1/chsh.1
@@ -0,0 +1,121 @@
+'\" t
+.\" Title: chsh
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Anv\(:andarkommandon
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "CHSH" "1" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Anv\(:andarkommandon"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+chsh \- \(:andra inloggningsskal
+.SH "SYNOPSIS"
+.HP \w'\fBchsh\fR\ 'u
+\fBchsh\fR [\fIflaggor\fR] [\fIINLOGGNINGSNAMN\fR]
+.SH "BESKRIVNING"
+.PP
+The
+\fBchsh\fR
+command changes the user login shell\&. This determines the name of the user\*(Aqs initial login command\&. A normal user may only change the login shell for her own account; the superuser may change the login shell for any account\&.
+.SH "FLAGGOR"
+.PP
+The options which apply to the
+\fBchsh\fR
+command are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+The name of the user\*(Aqs new login shell\&. Setting this field to blank causes the system to select the default login shell\&.
+.RE
+.PP
+If the
+\fB\-s\fR
+option is not selected,
+\fBchsh\fR
+operates in an interactive fashion, prompting the user with the current login shell\&. Enter the new value to change the shell, or leave the line blank to use the current one\&. The current shell is displayed between a pair of
+\fI[ ]\fR
+marks\&.
+.SH "NOTERA"
+.PP
+The only restriction placed on the login shell is that the command name must be listed in
+/etc/shells, unless the invoker is the superuser, and then any value may be added\&. An account with a restricted login shell may not change her login shell\&. For this reason, placing
+/bin/rsh
+in
+/etc/shells
+is discouraged since accidentally changing to a restricted shell would prevent the user from ever changing her login shell back to its original value\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHSH_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchsh\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will not be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.SH "FILER"
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shells
+.RS 4
+Lista p\(oa giltiga inloggningsskal\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBchfn\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/sv/man1/expiry.1 b/man/sv/man1/expiry.1
new file mode 100644
index 0000000..b1290f4
--- /dev/null
+++ b/man/sv/man1/expiry.1
@@ -0,0 +1,74 @@
+'\" t
+.\" Title: expiry
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Anv\(:andarkommandon
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "EXPIRY" "1" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Anv\(:andarkommandon"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+expiry \- kontrollera och uppr\(:atth\(oall policy f\(:or l\(:osenordsutg\(oang
+.SH "SYNOPSIS"
+.HP \w'\fBexpiry\fR\ 'u
+\fBexpiry\fR \fIoption\fR
+.SH "BESKRIVNING"
+.PP
+The
+\fBexpiry\fR
+command checks (\fB\-c\fR) the current password expiration and forces (\fB\-f\fR) changes when required\&. It is callable as a normal user command\&.
+.SH "FLAGGOR"
+.PP
+The options which apply to the
+\fBexpiry\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-check\fR
+.RS 4
+Check the password expiration of the current user\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+Force a password change if the current user has an expired password\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.SH "FILER"
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+S\(:aker anv\(:andarkontoinformation\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/sv/man1/groups.1 b/man/sv/man1/groups.1
new file mode 100644
index 0000000..b03759b
--- /dev/null
+++ b/man/sv/man1/groups.1
@@ -0,0 +1,64 @@
+'\" t
+.\" Title: groups
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Anv\(:andarkommandon
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "GROUPS" "1" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Anv\(:andarkommandon"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+groups \- visa aktuella gruppnamn
+.SH "SYNOPSIS"
+.HP \w'\fBgroups\fR\ 'u
+\fBgroups\fR [\fIanv\(:andare\fR]
+.SH "BESKRIVNING"
+.PP
+The
+\fBgroups\fR
+command displays the current group names or ID values\&. If the value does not have a corresponding entry in
+/etc/group, the value will be displayed as the numerical group value\&. The optional
+\fIuser\fR
+parameter will display the groups for the named
+\fIuser\fR\&.
+.SH "NOTERA"
+.PP
+Systems which do not support concurrent group sets will have the information from
+/etc/group
+reported\&. The user must use
+\fBnewgrp\fR
+or
+\fBsg\fR
+to change his current real and effective group ID\&.
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBnewgrp\fR(1),
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)\&.
diff --git a/man/sv/man1/id.1 b/man/sv/man1/id.1
new file mode 100644
index 0000000..fa1c8f8
--- /dev/null
+++ b/man/sv/man1/id.1
@@ -0,0 +1,60 @@
+'\" t
+.\" Title: id
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Anv\(:andarkommandon
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "ID" "1" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Anv\(:andarkommandon"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+id \- display current user and group ID names
+.SH "SYNOPSIS"
+.HP \w'\fBid\fR\ 'u
+\fBid\fR [\-a]
+.SH "BESKRIVNING"
+.PP
+The
+\fBid\fR
+command displays the current real and effective user and group ID names or values\&. If the value does not have a corresponding entry in
+/etc/passwd
+or
+/etc/group, the value will be displayed without the corresponding name\&. The optional
+\fB\-a\fR
+flag will display the group set on systems which support multiple concurrent group membership\&.
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)
diff --git a/man/sv/man1/newgrp.1 b/man/sv/man1/newgrp.1
new file mode 100644
index 0000000..b77c5f6
--- /dev/null
+++ b/man/sv/man1/newgrp.1
@@ -0,0 +1,98 @@
+'\" t
+.\" Title: newgrp
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Anv\(:andarkommandon
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "NEWGRP" "1" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Anv\(:andarkommandon"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+newgrp \- logga in i en ny grupp
+.SH "SYNOPSIS"
+.HP \w'\fBnewgrp\fR\ 'u
+\fBnewgrp\fR [\-] [\fIgrupp\fR]
+.SH "BESKRIVNING"
+.PP
+The
+\fBnewgrp\fR
+command is used to change the current group ID during a login session\&. If the optional
+\fB\-\fR
+flag is given, the user\*(Aqs environment will be reinitialized as though the user had logged in, otherwise the current environment, including current working directory, remains unchanged\&.
+.PP
+\fBnewgrp\fR
+changes the current real group ID to the named group, or to the default group listed in
+/etc/passwd
+if no group name is given\&.
+\fBnewgrp\fR
+also tries to add the group to the user groupset\&. If not root, the user will be prompted for a password if she does not have a password (in
+/etc/shadow
+if this user has an entry in the shadowed password file, or in
+/etc/passwd
+otherwise) and the group does, or if the user is not listed as a member and the group has a password\&. The user will be denied access if the group password is empty and the user is not listed as a member\&.
+.PP
+If there is an entry for this group in
+/etc/gshadow, then the list of members and the password of this group will be taken from this file, otherwise, the entry in
+/etc/group
+is considered\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "FILER"
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+S\(:aker anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+S\(:aker gruppkontoinformation\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBsu\fR(1),
+\fBsg\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/sv/man1/passwd.1 b/man/sv/man1/passwd.1
new file mode 100644
index 0000000..8203402
--- /dev/null
+++ b/man/sv/man1/passwd.1
@@ -0,0 +1,365 @@
+'\" t
+.\" Title: passwd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Anv\(:andarkommandon
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "PASSWD" "1" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Anv\(:andarkommandon"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+passwd \- \(:andra anv\(:andarl\(:osenord
+.SH "SYNOPSIS"
+.HP \w'\fBpasswd\fR\ 'u
+\fBpasswd\fR [\fIflaggor\fR] [\fIINLOGGNINGSNAMN\fR]
+.SH "BESKRIVNING"
+.PP
+The
+\fBpasswd\fR
+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\&.
+\fBpasswd\fR
+also changes the account or associated password validity period\&.
+.SS "L\(:osenords\(:andringar"
+.PP
+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\&.
+.PP
+After the password has been entered, password aging information is checked to see if the user is permitted to change the password at this time\&. If not,
+\fBpasswd\fR
+refuses to change the password and exits\&.
+.PP
+Anv\(:andaren fr\(oagas sedan tv\(oa g\(oanger efter ett ers\(:attande l\(:osenord\&. Den andra inmatningen j\(:amf\(:ors mot den f\(:orsta och b\(oada m\(oaste st\(:amma \(:overens f\(:or att l\(:osenordet ska \(:andras\&.
+.PP
+Sedan testas l\(:osenordet f\(:or sin komplexitet\&. Som en allm\(:an riktlinje b\(:or l\(:osenord inneh\(oalla 6 till 8 tecken och inkluderas ett eller flera tecken fr\(oan var och en av f\(:oljande punkter:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+gemena bokst\(:aver ur alfabetet
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+siffrorna 0 till 9
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+skiljetecken
+.RE
+.PP
+Care must be taken not to include the system default erase or kill characters\&.
+\fBpasswd\fR
+will reject any password which is not suitably complex\&.
+.SS "Tips f\(:or anv\(:andarl\(:osenord"
+.PP
+The security of a password depends upon the strength of the encryption algorithm and the size of the key space\&. The legacy
+\fIUNIX\fR
+System encryption method is based on the NBS DES algorithm\&. More recent methods are now recommended (see
+\fBENCRYPT_METHOD\fR)\&. The size of the key space depends upon the randomness of the password which is selected\&.
+.PP
+Problem i l\(:osenordss\(:akerheten brukar normalt komma fr\(oan slarvigt valda l\(:osenord eller hantering\&. Av denna anledning b\(:or du inte v\(:alja ett l\(:osenord som finns i en ordbok eller som m\(oaste skrivas ner\&. L\(:osenordet b\(:or heller inte vara ett korrekt namn, ditt personnummer, f\(:odelsedatum eller gatuadress\&. Dessa kan anv\(:andas som gissningar f\(:or att ta sig in i systemet\&.
+.PP
+You can find advice on how to choose a strong password on http://en\&.wikipedia\&.org/wiki/Password_strength
+.SH "FLAGGOR"
+.PP
+The options which apply to the
+\fBpasswd\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+This option can be used only with
+\fB\-S\fR
+and causes show status for all users\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR
+.RS 4
+Ta bort en anv\(:andares l\(:osenord (g\(:or det blankt)\&. Detta \(:ar ett snabbt s\(:att att inaktivera ett l\(:osenord f\(:or ett konto\&. Det kommer att ta bort det angivna kontots l\(:osenord\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expire\fR
+.RS 4
+L\(:osenordet f\(:or ett konto s\(:atts omedelbart som utg\(oanget\&. Detta kan tvinga en anv\(:andare att \(:andra sitt l\(:osenord vid n\(:asta inloggningsf\(:ors\(:ok\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.PP
+\fB\-i\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+This option is used to disable an account after the password has been expired for a number of days\&. After a user account has had an expired password for
+\fIINACTIVE\fR
+days, the user may no longer sign on to the account\&.
+.RE
+.PP
+\fB\-k\fR, \fB\-\-keep\-tokens\fR
+.RS 4
+Indicate password change should be performed only for expired authentication tokens (passwords)\&. The user wishes to keep their non\-expired tokens as before\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\fR
+.RS 4
+Lock the password of the named account\&. This option disables a password by changing it to a value which matches no possible encrypted value (it adds a \(aa!\(aa at the beginning of the password)\&.
+.sp
+Note that this does not disable the account\&. The user may still be able to login using another authentication token (e\&.g\&. an SSH key)\&. To disable the account, administrators should use
+\fBusermod \-\-expiredate 1\fR
+(this set the account\*(Aqs expire date to Jan 2, 1970)\&.
+.sp
+Users with a locked password are not allowed to change their password\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-mindays\fR\ \&\fIMIN_DAYS\fR
+.RS 4
+Set the minimum number of days between password changes to
+\fIMIN_DAYS\fR\&. A value of zero for this field indicates that the user may change their password at any time\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Tyst l\(:age\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-repository\fR\ \&\fIREPOSITORY\fR
+.RS 4
+change password in
+\fIREPOSITORY\fR
+repository
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-S\fR, \fB\-\-status\fR
+.RS 4
+Display account status information\&. The status information consists of 7 fields\&. The first field is the user\*(Aqs login name\&. The second field indicates if the user account has a locked password (L), has no password (NP), or has a usable password (P)\&. The third field gives the date of the last password change\&. The next four fields are the minimum age, maximum age, warning period, and inactivity period for the password\&. These ages are expressed in days\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-unlock\fR
+.RS 4
+Unlock the password of the named account\&. This option re\-enables a password by changing the password back to its previous value (to the value before using the
+\fB\-l\fR
+option)\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-warndays\fR\ \&\fIWARN_DAYS\fR
+.RS 4
+Set the number of days of warning before a password change is required\&. The
+\fIWARN_DAYS\fR
+option is the number of days prior to the password expiring that a user will be warned that their password is about to expire\&.
+.RE
+.PP
+\fB\-x\fR, \fB\-\-maxdays\fR\ \&\fIMAX_DAYS\fR
+.RS 4
+Set the maximum number of days a password remains valid\&. After
+\fIMAX_DAYS\fR, the password is required to be changed\&.
+.sp
+Passing the number
+\fI\-1\fR
+as
+\fIMAX_DAYS\fR
+will remove checking a password\*(Aqs validity\&.
+.RE
+.SH "T\(:ANK P\(oA"
+.PP
+Password complexity checking may vary from site to site\&. The user is urged to select a password as complex as he or she feels comfortable with\&.
+.PP
+Users may not be able to change their password on a system if NIS is enabled and they are not logged into the NIS server\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBOBSCURE_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable additional checks upon password changes\&.
+.RE
+.PP
+\fBPASS_ALWAYS_WARN\fR (boolean)
+.RS 4
+Warn about weak passwords (but still allow them) if you are root\&.
+.RE
+.PP
+\fBPASS_CHANGE_TRIES\fR (number)
+.RS 4
+Maximum number of attempts to change password if rejected (too easy)\&.
+.RE
+.PP
+\fBPASS_MAX_LEN\fR (number), \fBPASS_MIN_LEN\fR (number)
+.RS 4
+Number of significant characters in the password for crypt()\&.
+\fBPASS_MAX_LEN\fR
+is 8 by default\&. Don\*(Aqt change unless your crypt() is better\&. This is ignored if
+\fBMD5_CRYPT_ENAB\fR
+set to
+\fIyes\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999,999,999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FILER"
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+S\(:aker anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "AVSLUTNINGSV\(:ARDEN"
+.PP
+The
+\fBpasswd\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+permission denied
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid combination of options
+.RE
+.PP
+\fI3\fR
+.RS 4
+unexpected failure, nothing done
+.RE
+.PP
+\fI4\fR
+.RS 4
+unexpected failure,
+passwd
+file missing
+.RE
+.PP
+\fI5\fR
+.RS 4
+passwd
+file busy, try again
+.RE
+.PP
+\fI6\fR
+.RS 4
+invalid argument to option
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBchpasswd\fR(8),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBlogin.defs\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/sv/man1/sg.1 b/man/sv/man1/sg.1
new file mode 100644
index 0000000..08111ec
--- /dev/null
+++ b/man/sv/man1/sg.1
@@ -0,0 +1,97 @@
+'\" t
+.\" Title: sg
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Anv\(:andarkommandon
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "SG" "1" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Anv\(:andarkommandon"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+sg \- k\(:or kommando med annat grupp\-id
+.SH "SYNOPSIS"
+.HP \w'\fBsg\fR\ 'u
+\fBsg\fR [\-] [group\ [\-c\ ]\ command]
+.SH "BESKRIVNING"
+.PP
+The
+\fBsg\fR
+command works similar to
+\fBnewgrp\fR
+but accepts a command\&. The command will be executed with the
+/bin/sh
+shell\&. With most shells you may run
+\fBsg\fR
+from, you need to enclose multi\-word commands in quotes\&. Another difference between
+\fBnewgrp\fR
+and
+\fBsg\fR
+is that some shells treat
+\fBnewgrp\fR
+specially, replacing themselves with a new instance of a shell that
+\fBnewgrp\fR
+creates\&. This doesn\*(Aqt happen with
+\fBsg\fR, so upon exit from a
+\fBsg\fR
+command you are returned to your previous group ID\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "FILER"
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+S\(:aker anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+S\(:aker gruppkontoinformation\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBnewgrp\fR(1),
+\fBsu\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/sv/man3/getspnam.3 b/man/sv/man3/getspnam.3
new file mode 100644
index 0000000..cd473da
--- /dev/null
+++ b/man/sv/man3/getspnam.3
@@ -0,0 +1 @@
+.so man3/shadow.3
diff --git a/man/sv/man3/shadow.3 b/man/sv/man3/shadow.3
new file mode 100644
index 0000000..d16ede6
--- /dev/null
+++ b/man/sv/man3/shadow.3
@@ -0,0 +1,245 @@
+'\" t
+.\" Title: shadow
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Biblioteksanrop
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "SHADOW" "3" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Biblioteksanrop"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+shadow, getspnam \- encrypted password file routines
+.SH "SYNTAX"
+.PP
+\fI#include <shadow\&.h>\fR
+.PP
+\fIstruct spwd *getspent();\fR
+.PP
+\fIstruct spwd *getspnam(char\fR
+\fI*name\fR\fI);\fR
+.PP
+\fIvoid setspent();\fR
+.PP
+\fIvoid endspent();\fR
+.PP
+\fIstruct spwd *fgetspent(FILE\fR
+\fI*fp\fR\fI);\fR
+.PP
+\fIstruct spwd *sgetspent(char\fR
+\fI*cp\fR\fI);\fR
+.PP
+\fIint putspent(struct spwd\fR
+\fI*p,\fR
+\fIFIL\fR
+\fI*fp\fR\fI);\fR
+.PP
+\fIint lckpwdf();\fR
+.PP
+\fIint ulckpwdf();\fR
+.SH "BESKRIVNING"
+.PP
+\fIshadow\fR
+manipulates the contents of the shadow password file,
+/etc/shadow\&. The structure in the
+\fI#include\fR
+file is:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct spwd {
+ char *sp_namp; /* user login name */
+ char *sp_pwdp; /* encrypted password */
+ long int sp_lstchg; /* last password change */
+ long int sp_min; /* days until change allowed\&. */
+ long int sp_max; /* days before change required */
+ long int sp_warn; /* days warning for expiration */
+ long int sp_inact; /* days before account inactive */
+ long int sp_expire; /* date when account expires */
+ unsigned long int sp_flag; /* reserved for future use */
+}
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Betydelsen av varje f\(:alt \(:ar:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_namp \- pointer to null\-terminated user name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_pwdp \- pointer to null\-terminated password
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_lstchg \- days since Jan 1, 1970 password was last changed
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_min \- days before which password may not be changed
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_max \- days after which password must be changed
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_warn \- days before password is to expire that user is warned of pending password expiration
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_inact \- days after password expires that account is considered inactive and disabled
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_expire \- days since Jan 1, 1970 when account will be disabled
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_flag \- reserverat f\(:or framtida anv\(:andning
+.RE
+.SH "BESKRIVNING"
+.PP
+\fIgetspent\fR,
+\fIgetspname\fR,
+\fIfgetspent\fR, and
+\fIsgetspent\fR
+each return a pointer to a
+\fIstruct spwd\fR\&.
+\fIgetspent\fR
+returns the next entry from the file, and
+\fIfgetspent\fR
+returns the next entry from the given stream, which is assumed to be a file of the proper format\&.
+\fIsgetspent\fR
+returns a pointer to a
+\fIstruct spwd\fR
+using the provided string as input\&.
+\fIgetspnam\fR
+searches from the current position in the file for an entry matching
+\fIname\fR\&.
+.PP
+\fIsetspent\fR
+and
+\fIendspent\fR
+may be used to begin and end, respectively, access to the shadow password file\&.
+.PP
+The
+\fIlckpwdf\fR
+and
+\fIulckpwdf\fR
+routines should be used to insure exclusive access to the
+/etc/shadow
+file\&.
+\fIlckpwdf\fR
+attempts to acquire a lock using
+\fIpw_lock\fR
+for up to 15 seconds\&. It continues by attempting to acquire a second lock using
+\fIspw_lock\fR
+for the remainder of the initial 15 seconds\&. Should either attempt fail after a total of 15 seconds,
+\fIlckpwdf\fR
+returns \-1\&. When both locks are acquired 0 is returned\&.
+.SH "DIAGNOSTIK"
+.PP
+Routines return NULL if no more entries are available or if an error occurs during processing\&. Routines which have
+\fIint\fR
+as the return value return 0 for success and \-1 for failure\&.
+.SH "T\(:ANK P\(oA"
+.PP
+These routines may only be used by the superuser as access to the shadow password file is restricted\&.
+.SH "FILER"
+.PP
+/etc/shadow
+.RS 4
+S\(:aker anv\(:andarkontoinformation\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBgetpwent\fR(3),
+\fBshadow\fR(5)\&.
diff --git a/man/sv/man5/faillog.5 b/man/sv/man5/faillog.5
new file mode 100644
index 0000000..ab99282
--- /dev/null
+++ b/man/sv/man5/faillog.5
@@ -0,0 +1,64 @@
+'\" t
+.\" Title: faillog
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Filformat och konversioner
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "FAILLOG" "5" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Filformat och konversioner"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+faillog \- login failure logging file
+.SH "BESKRIVNING"
+.PP
+/var/log/faillog
+maintains a count of login failures and the limits for each account\&.
+.PP
+The file contains fixed length records, indexed by numerical UID\&. Each record contains the count of login failures since the last successful login; the maximum number of failures before the account is disabled; the line on which the last login failure occurred; the date of the last login failure; and the duration (in seconds) during which the account will be locked after a failure\&.
+.PP
+Strukturen f\(:or filen \(:ar:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct faillog {
+ short fail_cnt;
+ short fail_max;
+ char fail_line[12];
+ time_t fail_time;
+ long fail_locktime;
+};
+.fi
+.if n \{\
+.RE
+.\}
+.SH "FILER"
+.PP
+/var/log/faillog
+.RS 4
+Failure logging file\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBfaillog\fR(8)
diff --git a/man/sv/man5/gshadow.5 b/man/sv/man5/gshadow.5
new file mode 100644
index 0000000..9cc1d3e
--- /dev/null
+++ b/man/sv/man5/gshadow.5
@@ -0,0 +1,101 @@
+'\" t
+.\" Title: gshadow
+.\" Author: Nicolas Fran\(,cois <nicolas.francois@centraliens.net>
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Filformat och konversioner
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "GSHADOW" "5" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Filformat och konversioner"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+gshadow \- skuggad gruppfil
+.SH "BESKRIVNING"
+.PP
+/etc/gshadow
+contains the shadowed information for group accounts\&.
+.PP
+Denna fil f\(oar inte vara l\(:asbar av vanliga anv\(:andare om l\(:osenordss\(:akerheten ska uppr\(:atth\(oallas\&.
+.PP
+Each line of this file contains the following colon\-separated fields:
+.PP
+\fBgruppnamn\fR
+.RS 4
+It must be a valid group name, which exist on the system\&.
+.RE
+.PP
+\fBkrypterat l\(:osenord\fR
+.RS 4
+Refer to
+\fBcrypt\fR(3)
+for details on how this string is interpreted\&.
+.sp
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), for instance ! or *, users will not be able to use a unix password to access the group (but group members do not need the password)\&.
+.sp
+The password is used when a user who is not a member of the group wants to gain the permissions of this group (see
+\fBnewgrp\fR(1))\&.
+.sp
+This field may be empty, in which case only the group members can gain the group permissions\&.
+.sp
+A password field which starts with an exclamation mark means that the password is locked\&. The remaining characters on the line represent the password field before the password was locked\&.
+.sp
+This password supersedes any password specified in
+/etc/group\&.
+.RE
+.PP
+\fBadministrators\fR
+.RS 4
+It must be a comma\-separated list of user names\&.
+.sp
+Administrators can change the password or the members of the group\&.
+.sp
+Administrators also have the same permissions as the members (see below)\&.
+.RE
+.PP
+\fBmembers\fR
+.RS 4
+It must be a comma\-separated list of user names\&.
+.sp
+Members can access the group without being prompted for a password\&.
+.sp
+You should use the same list of users as in
+/etc/group\&.
+.RE
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+S\(:aker gruppkontoinformation\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBgpasswd\fR(5),
+\fBgroup\fR(5),
+\fBgrpck\fR(8),
+\fBgrpconv\fR(8),
+\fBnewgrp\fR(1)\&.
diff --git a/man/sv/man5/limits.5 b/man/sv/man5/limits.5
new file mode 100644
index 0000000..ac1e386
--- /dev/null
+++ b/man/sv/man5/limits.5
@@ -0,0 +1,274 @@
+'\" t
+.\" Title: limits
+.\" Author: Luca Berra
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Filformat och konversioner
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "LIMITS" "5" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Filformat och konversioner"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+limits \- definition av resursbegr\(:ansningar
+.SH "BESKRIVNING"
+.PP
+The
+\fIlimits\fR
+file (/etc/limits
+by default or LIMITS_FILE defined
+config\&.h) describes the resource limits you wish to impose\&. It should be owned by root and readable by root account only\&.
+.PP
+By default no quota is imposed on \*(Aqroot\*(Aq\&. In fact, there is no way to impose limits via this procedure to root\-equiv accounts (accounts with UID 0)\&.
+.PP
+Varje rad beskriver en begr\(:ansning f\(:or anv\(:andaren i formatet:
+.PP
+\fIuser LIMITS_STRING\fR
+.PP
+or in the form:
+.PP
+\fI@group LIMITS_STRING\fR
+.PP
+The
+\fILIMITS_STRING\fR
+is a string of a concatenated list of resource limits\&. Each limit consists of a letter identifier followed by a numerical limit\&.
+.PP
+De giltiga identifierarna \(:ar:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+A: maximal adressrymd (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+C: max core file size (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+D: maximal datastorlek (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+F: maximum file size (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+K: file creation mask, set by
+\fBumask\fR(2)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+I: max nice value (0\&.\&.39 which translates to 20\&.\&.\-19)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+L: maximalt antal inloggningar f\(:or denna anv\(:andare
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+M: max locked\-in\-memory address space (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+N: maximalt antal \(:oppna filer
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+O: max real time priority
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+P: process priority, set by
+\fBsetpriority\fR(2)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+R: max resident set size (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+S: maximal stackstorlek (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+T: maximal processortid (MIN)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+U: maximalt antal processer
+.RE
+.PP
+For example,
+\fIL2D2048N5\fR
+is a valid
+\fILIMITS_STRING\fR\&. For reading convenience, the following entries are equivalent:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ username L2D2048N5
+ username L2 D2048 N5
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Be aware that after
+\fIusername\fR
+the rest of the line is considered a limit string, thus comments are not allowed\&. An invalid limits string will be rejected (not considered) by the
+\fBlogin\fR
+program\&.
+.PP
+The default entry is denoted by username "\fI*\fR"\&. If you have multiple
+\fIdefault\fR
+entries in your
+\fILIMITS_FILE\fR, then the last one will be used as the default entry\&.
+.PP
+The limits specified in the form "\fI@group\fR" apply to the members of the specified
+\fIgroup\fR\&.
+.PP
+If more than one line with limits for a user exist, only the first line for this user will be considered\&.
+.PP
+If no lines are specified for a user, the last
+\fI@group\fR
+line matching a group whose the user is a member of will be considered, or the last line with default limits if no groups contain the user\&.
+.PP
+To completely disable limits for a user, a single dash "\fI\-\fR" will do\&.
+.PP
+To disable a limit for a user, a single dash "\fI\-\fR" can be used instead of the numerical value for this limit\&.
+.PP
+Also, please note that all limit settings are set PER LOGIN\&. They are not global, nor are they permanent\&. Perhaps global limits will come, but for now this will have to do ;)
+.SH "FILER"
+.PP
+/etc/limits
+.RS 4
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBlogin\fR(1),
+\fBsetpriority\fR(2),
+\fBsetrlimit\fR(2)\&.
diff --git a/man/sv/man5/passwd.5 b/man/sv/man5/passwd.5
new file mode 100644
index 0000000..18efaab
--- /dev/null
+++ b/man/sv/man5/passwd.5
@@ -0,0 +1,193 @@
+'\" t
+.\" Title: passwd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Filformat och konversioner
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "PASSWD" "5" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Filformat och konversioner"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+passwd \- l\(:osenordsfilen
+.SH "BESKRIVNING"
+.PP
+/etc/passwd
+contains one line for each user account, with seven fields delimited by colons (\(rq:\(rq)\&. These fields are:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+inloggningsnamn
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+valfritt krypterat l\(:osenord
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+numeriskt anv\(:andar\-id
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+numeriskt grupp\-id
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+anv\(:andarnamn eller kommentarsf\(:alt
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+anv\(:andarens hemkatalog
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+optional user command interpreter
+.RE
+.PP
+If the
+\fIpassword\fR
+field is a lower\-case
+\(rqx\(rq, then the encrypted password is actually stored in the
+\fBshadow\fR(5)
+file instead; there
+\fImust\fR
+be a corresponding line in the
+/etc/shadow
+file, or else the user account is invalid\&.
+.PP
+The encrypted
+\fIpassword\fR
+field may be empty, in which case no password is required to authenticate as the specified login name\&. However, some applications which read the
+/etc/passwd
+file may decide not to permit
+\fIany\fR
+access at all if the
+\fIpassword\fR
+field is blank\&.
+.PP
+A
+\fIpassword\fR
+field which starts with an exclamation mark means that the password is locked\&. The remaining characters on the line represent the
+\fIpassword\fR
+field before the password was locked\&.
+.PP
+Refer to
+\fBcrypt\fR(3)
+for details on how this string is interpreted\&.
+.PP
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), 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)\&.
+.PP
+The comment field is used by various system utilities, such as
+\fBfinger\fR(1)\&.
+.PP
+The home directory field provides the name of the initial working directory\&. The
+\fBlogin\fR
+program uses this information to set the value of the
+\fB$HOME\fR
+environmental variable\&.
+.PP
+The command interpreter field provides the name of the user\*(Aqs command language interpreter, or the name of the initial program to execute\&. The
+\fBlogin\fR
+program uses this information to set the value of the
+\fB$SHELL\fR
+environmental variable\&. If this field is empty, it defaults to the value
+/bin/sh\&.
+.SH "FILER"
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+optional encrypted password file
+.RE
+.PP
+/etc/passwd\-
+.RS 4
+Backup file for /etc/passwd\&.
+.sp
+Note that this file is used by the tools of the shadow toolsuite, but not by all user and password management tools\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBcrypt\fR(3),
+\fBgetent\fR(1),
+\fBgetpwnam\fR(3),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBpwck\fR(8),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBshadow\fR(5),
+\fBsu\fR(1),
+\fBsulogin\fR(8)\&.
diff --git a/man/sv/man5/porttime.5 b/man/sv/man5/porttime.5
new file mode 100644
index 0000000..c3a42f1
--- /dev/null
+++ b/man/sv/man5/porttime.5
@@ -0,0 +1,96 @@
+'\" t
+.\" Title: porttime
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Filformat och konversioner
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "PORTTIME" "5" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Filformat och konversioner"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+porttime \- port access time file
+.SH "BESKRIVNING"
+.PP
+\fIporttime\fR
+contains a list of tty devices, user names, and permitted login times\&.
+.PP
+Each entry consists of three colon separated fields\&. The first field is a comma separated list of tty devices, or an asterisk to indicate that all tty devices are matched by this entry\&. The second field is a comma separated list of user names, or an asterisk to indicated that all user names are matched by this entry\&. The third field is a comma separated list of permitted access times\&.
+.PP
+Each access time entry consists of zero or more days of the week, abbreviated
+\fISu\fR,
+\fIMo\fR,
+\fITu\fR,
+\fIWe\fR,
+\fITh\fR,
+\fIFr\fR, and
+\fISa\fR, followed by a pair of times separated by a hyphen\&. The abbreviation
+\fIWk\fR
+may be used to represent Monday thru Friday, and
+\fIAl\fR
+may be used to indicate every day\&. If no days are given,
+\fIAl\fR
+is assumed\&.
+.SH "EXEMPEL"
+.PP
+The following entry allows access to user
+\fBjfh\fR
+on every port during weekdays from 9am to 5pm\&.
+.PP
+*:jfh:Wk0900\-1700
+.PP
+The following entries allow access only to the users
+\fIroot\fR
+and
+\fIoper\fR
+on
+/dev/console
+at any time\&. This illustrates how the
+/etc/porttime
+file is an ordered list of access times\&. Any other user would match the second entry which does not permit access at any time\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ console:root,oper:Al0000\-2400
+ console:*:
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+The following entry allows access for the user
+\fIgames\fR
+on any port during non\-working hours\&.
+.PP
+*:games:Wk1700\-0900,SaSu0000\-2400
+.SH "FILER"
+.PP
+/etc/porttime
+.RS 4
+Fil som inneh\(oaller port\(oatkomst
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBlogin\fR(1)\&.
diff --git a/man/sv/man5/suauth.5 b/man/sv/man5/suauth.5
new file mode 100644
index 0000000..e6e630b
--- /dev/null
+++ b/man/sv/man5/suauth.5
@@ -0,0 +1,146 @@
+'\" t
+.\" Title: suauth
+.\" Author: Marek Micha\(/lkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Filformat och konversioner
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "SUAUTH" "5" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Filformat och konversioner"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+suauth \- detaljerad kontrollfil f\(:or su
+.SH "SYNOPSIS"
+.HP \w'\fB/etc/suauth\fR\ 'u
+\fB/etc/suauth\fR
+.SH "BESKRIVNING"
+.PP
+The file
+/etc/suauth
+is referenced whenever the su command is called\&. It can change the behaviour of the su command, based upon:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ 1) the user su is targeting
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+2) the user executing the su command (or any groups he might be a member of)
+.PP
+Filen \(:ar i f\(:oljande format, med de rader som inleds med # behandlas som kommentarsrader och ignoreras;
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ to\-id:from\-id:ACTION
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Where to\-id is either the word
+\fIALL\fR, a list of usernames delimited by "," or the words
+\fIALL EXCEPT\fR
+followed by a list of usernames delimited by ","\&.
+.PP
+from\-id is formatted the same as to\-id except the extra word
+\fIGROUP\fR
+is recognized\&.
+\fIALL EXCEPT GROUP\fR
+is perfectly valid too\&. Following
+\fIGROUP\fR
+appears one or more group names, delimited by ","\&. It is not sufficient to have primary group id of the relevant group, an entry in
+\fB/etc/group\fR(5)
+is necessary\&.
+.PP
+\(oAtg\(:arden kan endast vara en av f\(:oljande f\(:or n\(:arvarande st\(:odda flaggor\&.
+.PP
+\fIDENY\fR
+.RS 4
+F\(:ors\(:oket att anv\(:anda su stoppades f\(:ore ett l\(:osenord har efterfr\(oagats\&.
+.RE
+.PP
+\fINOPASS\fR
+.RS 4
+F\(:ors\(:oket att anv\(:anda su lyckades helt automatiskt; inget l\(:osenord har efterfr\(oagats\&.
+.RE
+.PP
+\fIOWNPASS\fR
+.RS 4
+F\(:or att su\-kommandot ska lyckas m\(oaste anv\(:andaren mata in sitt egna l\(:osenord\&. De blir fr\(oagade att g\(:ora detta\&.
+.RE
+.PP
+Note there are three separate fields delimited by a colon\&. No whitespace must surround this colon\&. Also note that the file is examined sequentially line by line, and the first applicable rule is used without examining the file further\&. This makes it possible for a system administrator to exercise as fine control as he or she wishes\&.
+.SH "EXEMPEL"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ # sample /etc/suauth file
+ #
+ # A couple of privileged usernames may
+ # su to root with their own password\&.
+ #
+ root:chris,birddog:OWNPASS
+ #
+ # Anyone else may not su to root unless in
+ # group wheel\&. This is how BSD does things\&.
+ #
+ root:ALL EXCEPT GROUP wheel:DENY
+ #
+ # Perhaps terry and birddog are accounts
+ # owned by the same person\&.
+ # Access can be arranged between them
+ # with no password\&.
+ #
+ terry:birddog:NOPASS
+ birddog:terry:NOPASS
+ #
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "FILER"
+.PP
+/etc/suauth
+.RS 4
+.RE
+.SH "FEL"
+.PP
+There could be plenty lurking\&. The file parser is particularly unforgiving about syntax errors, expecting no spurious whitespace (apart from beginning and end of lines), and a specific token delimiting different things\&.
+.SH "DIAGNOSTIK"
+.PP
+An error parsing the file is reported using
+\fBsyslogd\fR(8)
+as level ERR on facility AUTH\&.
+.SH "SE OCKS\(oA"
+.PP
+\fBsu\fR(1)\&.
diff --git a/man/sv/man8/faillog.8 b/man/sv/man8/faillog.8
new file mode 100644
index 0000000..5316ebd
--- /dev/null
+++ b/man/sv/man8/faillog.8
@@ -0,0 +1,165 @@
+'\" t
+.\" Title: faillog
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Systemhanteringskommandon
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "FAILLOG" "8" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+faillog \- display faillog records or set login failure limits
+.SH "SYNOPSIS"
+.HP \w'\fBfaillog\fR\ 'u
+\fBfaillog\fR [\fIflaggor\fR]
+.SH "BESKRIVNING"
+.PP
+\fBfaillog\fR
+displays the contents of the failure log database (/var/log/faillog)\&. It can also set the failure counters and limits\&. When
+\fBfaillog\fR
+is run without arguments, it only displays the faillog records of the users who had a login failure\&.
+.SH "FLAGGOR"
+.PP
+The options which apply to the
+\fBfaillog\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+Display (or act on) faillog records for all users having an entry in the
+faillog
+database\&.
+.sp
+The range of users can be restricted with the
+\fB\-u\fR
+option\&.
+.sp
+In display mode, this is still restricted to existing users but forces the display of the faillog entries even if they are empty\&.
+.sp
+With the
+\fB\-l\fR,
+\fB\-m\fR,
+\fB\-r\fR,
+\fB\-t\fR
+options, the users\*(Aq records are changed, even if the user does not exist on the system\&. This is useful to reset records of users that have been deleted or to set a policy in advance for a range of users\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\-secs\fR\ \&\fISEC\fR
+.RS 4
+Lock account for
+\fISEC\fR
+seconds after failed login\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-maximum\fR\ \&\fIMAX\fR
+.RS 4
+Set the maximum number of login failures after the account is disabled to
+\fIMAX\fR\&.
+.sp
+Selecting a
+\fIMAX\fR
+value of 0 has the effect of not placing a limit on the number of failed logins\&.
+.sp
+The maximum failure count should always be 0 for
+\fIroot\fR
+to prevent a denial of services attack against the system\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-reset\fR
+.RS 4
+Reset the counters of login failures\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR\ \&\fIDAYS\fR
+.RS 4
+Display faillog records more recent than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR\ \&\fILOGIN\fR|\fIRANGE\fR
+.RS 4
+Display faillog record or maintains failure counters and limits (if used with
+\fB\-l\fR,
+\fB\-m\fR
+or
+\fB\-r\fR
+options) only for the specified user(s)\&.
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+When none of the
+\fB\-l\fR,
+\fB\-m\fR, or
+\fB\-r\fR
+options are used,
+\fBfaillog\fR
+displays the faillog record of the specified user(s)\&.
+.SH "T\(:ANK P\(oA"
+.PP
+\fBfaillog\fR
+only prints out users with no successful login since the last failure\&. To print out a user who has had a successful login since their last failure, you must explicitly request the user with the
+\fB\-u\fR
+flag, or print out all users with the
+\fB\-a\fR
+flag\&.
+.SH "FILER"
+.PP
+/var/log/faillog
+.RS 4
+Failure logging file\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBlogin\fR(1),
+\fBfaillog\fR(5)\&.
diff --git a/man/sv/man8/groupadd.8 b/man/sv/man8/groupadd.8
new file mode 100644
index 0000000..cafd8e3
--- /dev/null
+++ b/man/sv/man8/groupadd.8
@@ -0,0 +1,257 @@
+'\" t
+.\" Title: groupadd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Systemhanteringskommandon
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "GROUPADD" "8" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+groupadd \- skapa en ny grupp
+.SH "SYNOPSIS"
+.HP \w'\fBgroupadd\fR\ 'u
+\fBgroupadd\fR [\fIflaggor\fR] \fIgrupp\fR
+.SH "BESKRIVNING"
+.PP
+The
+\fBgroupadd\fR
+command creates a new group account using the values specified on the command line plus the default values from the system\&. The new group will be entered into the system files as needed\&.
+.SH "FLAGGOR"
+.PP
+The options which apply to the
+\fBgroupadd\fR
+command are:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option causes the command to simply exit with success status if the specified group already exists\&. When used with
+\fB\-g\fR, and the specified GID already exists, another (unique) GID is chosen (i\&.e\&.
+\fB\-g\fR
+is turned off)\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGID\fR
+.RS 4
+The numerical value of the group\*(Aqs ID\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&. The default is to use the smallest ID value greater than or equal to
+\fBGID_MIN\fR
+and greater than every other group\&.
+.sp
+See also the
+\fB\-r\fR
+option and the
+\fBGID_MAX\fR
+description\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.PP
+\fB\-K\fR, \fB\-\-key\fR\ \&\fIKEY\fR=\fIVALUE\fR
+.RS 4
+Overrides
+/etc/login\&.defs
+defaults (GID_MIN, GID_MAX and others)\&. Multiple
+\fB\-K\fR
+options can be specified\&.
+.sp
+Example:
+\fB\-K\fR\ \&\fIGID_MIN\fR=\fI100\fR\ \&
+\fB\-K\fR\ \&\fIGID_MAX\fR=\fI499\fR
+.sp
+Note:
+\fB\-K\fR\ \&\fIGID_MIN\fR=\fI10\fR,\fIGID_MAX\fR=\fI499\fR
+doesn\*(Aqt work yet\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+This option permits to add a group with a non\-unique GID\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&. The default is to disable the password\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\*(Aqs password policy\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Create a system group\&.
+.sp
+The numeric identifiers of new system groups are chosen in the
+\fBSYS_GID_MIN\fR\-\fBSYS_GID_MAX\fR
+range, defined in
+login\&.defs, instead of
+\fBGID_MIN\fR\-\fBGID_MAX\fR\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBGID_MIN\fR
+(resp\&.
+\fBGID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_GID_MIN\fR
+(resp\&.
+\fBSYS_GID_MAX\fR) is 101 (resp\&.
+\fBGID_MIN\fR\-1)\&.
+.RE
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+S\(:aker gruppkontoinformation\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "T\(:ANK P\(oA"
+.PP
+Groupnames must start with a lower case letter or an underscore, followed by lower case letters, digits, underscores, or dashes\&. They can end with a dollar sign\&. In regular expression terms: [a\-z_][a\-z0\-9_\-]*[$]?
+.PP
+Groupnames may only be up to 16 characters long\&.
+.PP
+You may not add a NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.PP
+If the groupname already exists in an external group database such as NIS or LDAP,
+\fBgroupadd\fR
+will deny the group creation request\&.
+.SH "AVSLUTNINGSV\(:ARDEN"
+.PP
+The
+\fBgroupadd\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+GID not unique (when
+\fB\-o\fR
+not used)
+.RE
+.PP
+\fI9\fR
+.RS 4
+group name not unique
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/sv/man8/groupdel.8 b/man/sv/man8/groupdel.8
new file mode 100644
index 0000000..5cc5b3a
--- /dev/null
+++ b/man/sv/man8/groupdel.8
@@ -0,0 +1,145 @@
+'\" t
+.\" Title: groupdel
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Systemhanteringskommandon
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "GROUPDEL" "8" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+groupdel \- ta bort en grupp
+.SH "SYNOPSIS"
+.HP \w'\fBgroupdel\fR\ 'u
+\fBgroupdel\fR [\fIflaggor\fR] \fIGRUPP\fR
+.SH "BESKRIVNING"
+.PP
+The
+\fBgroupdel\fR
+command modifies the system account files, deleting all entries that refer to
+\fIGROUP\fR\&. The named group must exist\&.
+.SH "FLAGGOR"
+.PP
+The options which apply to the
+\fBgroupdel\fR
+command are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.SH "T\(:ANK P\(oA"
+.PP
+Du f\(oar inte ta bort den prim\(:ara gruppen f\(:or n\(oagon existerande anv\(:andare\&. Du m\(oaste ta bort anv\(:andaren innan du tar bort gruppen\&.
+.PP
+You should manually check all file systems to ensure that no files remain owned by this group\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+S\(:aker gruppkontoinformation\&.
+.RE
+.SH "AVSLUTNINGSV\(:ARDEN"
+.PP
+The
+\fBgroupdel\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI8\fR
+.RS 4
+can\*(Aqt remove user\*(Aqs primary group
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/sv/man8/groupmems.8 b/man/sv/man8/groupmems.8
new file mode 100644
index 0000000..c3b50a9
--- /dev/null
+++ b/man/sv/man8/groupmems.8
@@ -0,0 +1,180 @@
+'\" t
+.\" Title: groupmems
+.\" Author: George Kraft, IV
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Systemhanteringskommandon
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "GROUPMEMS" "8" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+groupmems \- administrera medlemmar av en anv\(:andares prim\(:ara grupp
+.SH "SYNOPSIS"
+.HP \w'\fBgroupmems\fR\ 'u
+\fBgroupmems\fR \-a\ \fIuser_name\fR | \-d\ \fIuser_name\fR | [\-g\ \fIgroup_name\fR] | \-l | \-p
+.SH "BESKRIVNING"
+.PP
+The
+\fBgroupmems\fR
+command 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)\&.
+.PP
+Only the superuser, as administrator, can use
+\fBgroupmems\fR
+to alter the memberships of other groups\&.
+.SH "FLAGGOR"
+.PP
+The options which apply to the
+\fBgroupmems\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-add\fR\ \&\fIuser_name\fR
+.RS 4
+Add a user to the group membership list\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR\ \&\fIuser_name\fR
+.RS 4
+Ta bort en anv\(:andare fr\(oan gruppen medlemslista\&.
+.sp
+If the
+/etc/gshadow
+file exist, the user will be removed from the list of members and administrators of the group\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-group\fR\ \&\fIgroup_name\fR
+.RS 4
+The superuser can specify which group membership list to modify\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-list\fR
+.RS 4
+Lista gruppens medlemslista\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-purge\fR
+.RS 4
+Rensa alla anv\(:andare fr\(oan gruppens medlemslista\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.SH "SETUP"
+.PP
+The
+\fBgroupmems\fR
+executable should be in mode
+2710
+as user
+\fIroot\fR
+and in group
+\fIgroups\fR\&. The system administrator can add users to group
+\fIgroups\fR
+to allow or disallow them using the
+\fBgroupmems\fR
+utility to manage their own group membership list\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ $ groupadd \-r groups
+ $ chmod 2710 groupmems
+ $ chown root\&.groups groupmems
+ $ groupmems \-g groups \-a gk4
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+s\(:aker gruppkontoinformation
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/sv/man8/groupmod.8 b/man/sv/man8/groupmod.8
new file mode 100644
index 0000000..8a0e670
--- /dev/null
+++ b/man/sv/man8/groupmod.8
@@ -0,0 +1,233 @@
+'\" t
+.\" Title: groupmod
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Systemhanteringskommandon
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "GROUPMOD" "8" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+groupmod \- \(:andra en gruppdefinition p\(oa systemet
+.SH "SYNOPSIS"
+.HP \w'\fBgroupmod\fR\ 'u
+\fBgroupmod\fR [\fIflaggor\fR] \fIGRUPP\fR
+.SH "BESKRIVNING"
+.PP
+The
+\fBgroupmod\fR
+command modifies the definition of the specified
+\fIGROUP\fR
+by modifying the appropriate entry in the group database\&.
+.SH "FLAGGOR"
+.PP
+The options which apply to the
+\fBgroupmod\fR
+command are:
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGID\fR
+.RS 4
+The group ID of the given
+\fIGROUP\fR
+will be changed to
+\fIGID\fR\&.
+.sp
+The value of
+\fIGID\fR
+must be a non\-negative decimal integer\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&.
+.sp
+Users who use the group as primary group will be updated to keep the group as their primary group\&.
+.sp
+Any files that have the old group ID and must continue to belong to
+\fIGROUP\fR, must have their group ID changed manually\&.
+.sp
+No checks will be performed with regard to the
+\fBGID_MIN\fR,
+\fBGID_MAX\fR,
+\fBSYS_GID_MIN\fR, or
+\fBSYS_GID_MAX\fR
+from
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-new\-name\fR\ \&\fINEW_GROUP\fR
+.RS 4
+The name of the group will be changed from
+\fIGROUP\fR
+to
+\fINEW_GROUP\fR
+name\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+When used with the
+\fB\-g\fR
+option, allow to change the group
+\fIGID\fR
+to a non\-unique value\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\*(Aqs password policy\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+S\(:aker gruppkontoinformation\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.SH "AVSLUTNINGSV\(:ARDEN"
+.PP
+The
+\fBgroupmod\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+E_SUCCESS: success
+.RE
+.PP
+\fI2\fR
+.RS 4
+E_USAGE: invalid command syntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+E_BAD_ARG: invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+E_GID_IN_USE: specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI6\fR
+.RS 4
+E_NOTFOUND: specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI9\fR
+.RS 4
+E_NAME_IN_USE: group name already in use
+.RE
+.PP
+\fI10\fR
+.RS 4
+E_GRP_UPDATE: can\*(Aqt update group file
+.RE
+.PP
+\fI11\fR
+.RS 4
+E_CLEANUP_SERVICE: can\*(Aqt setup cleanup service
+.RE
+.PP
+\fI12\fR
+.RS 4
+E_PAM_USERNAME: can\*(Aqt determine your username for use with pam
+.RE
+.PP
+\fI13\fR
+.RS 4
+E_PAM_ERROR: pam returned an error, see syslog facility id groupmod for the PAM error message
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/sv/man8/grpck.8 b/man/sv/man8/grpck.8
new file mode 100644
index 0000000..c139a1a
--- /dev/null
+++ b/man/sv/man8/grpck.8
@@ -0,0 +1,247 @@
+'\" t
+.\" Title: grpck
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Systemhanteringskommandon
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "GRPCK" "8" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+grpck \- validera integriteten f\(:or gruppfiler
+.SH "SYNOPSIS"
+.HP \w'\fBgrpck\fR\ 'u
+\fBgrpck\fR [flaggor] [\fIgrupp\fR\ [\ \fIshadow\fR\ ]]
+.SH "BESKRIVNING"
+.PP
+The
+\fBgrpck\fR
+command verifies the integrity of the groups information\&. It checks that all entries in
+/etc/group
+and /etc/gshadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+Kontroller g\(:ors f\(:or att validera att varje post har:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+korrekt antal f\(:alt
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a unique and valid group name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid group identifier
+(/etc/group only)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid list of members
+and administrators
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a corresponding entry in the
+/etc/gshadow
+file (respectively
+/etc/group
+for the
+gshadow
+checks)
+.RE
+.PP
+The checks for correct number of fields and unique group name are fatal\&. If an entry has the wrong number of fields, the user will be prompted to delete the entire line\&. If the user does not answer affirmatively, all further checks are bypassed\&. An entry with a duplicated group name is prompted for deletion, but the remaining checks will still be made\&. All other errors are warnings and the user is encouraged to run the
+\fBgroupmod\fR
+command to correct the error\&.
+.PP
+The commands which operate on the
+/etc/group
+and /etc/gshadow files
+are not able to alter corrupted or duplicated entries\&.
+\fBgrpck\fR
+should be used in those circumstances to remove the offending entries\&.
+.SH "FLAGGOR"
+.PP
+The
+\fB\-r\fR
+and
+\fB\-s\fR
+options cannot be combined\&.
+.PP
+The options which apply to the
+\fBgrpck\fR
+command are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-read\-only\fR
+.RS 4
+Execute the
+\fBgrpck\fR
+command in read\-only mode\&. This causes all questions regarding changes to be answered
+\fIno\fR
+without user intervention\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sort\fR
+.RS 4
+Sort entries in
+/etc/group
+and /etc/gshadow
+by GID\&.
+.RE
+.PP
+By default,
+\fBgrpck\fR
+operates on
+/etc/group
+and /etc/gshadow\&. The user may select alternate files with the
+\fIgroup\fR
+and \fIshadow\fR parameters\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+S\(:aker gruppkontoinformation\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.SH "AVSLUTNINGSV\(:ARDEN"
+.PP
+The
+\fBgrpck\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI2\fR
+.RS 4
+one or more bad group entries
+.RE
+.PP
+\fI3\fR
+.RS 4
+can\*(Aqt open group files
+.RE
+.PP
+\fI4\fR
+.RS 4
+can\*(Aqt lock group files
+.RE
+.PP
+\fI5\fR
+.RS 4
+can\*(Aqt update group files
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBgroup\fR(5),
+\fBgroupmod\fR(8),
+\fBgshadow\fR(5),
+\fBpasswd\fR(5),
+\fBpwck\fR(8),
+\fBshadow\fR(5)\&.
diff --git a/man/sv/man8/lastlog.8 b/man/sv/man8/lastlog.8
new file mode 100644
index 0000000..b7ecc2b
--- /dev/null
+++ b/man/sv/man8/lastlog.8
@@ -0,0 +1,137 @@
+'\" t
+.\" Title: lastlog
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Systemhanteringskommandon
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "LASTLOG" "8" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+lastlog \- reports the most recent login of all users or of a given user
+.SH "SYNOPSIS"
+.HP \w'\fBlastlog\fR\ 'u
+\fBlastlog\fR [\fIflaggor\fR]
+.SH "BESKRIVNING"
+.PP
+\fBlastlog\fR
+formats and prints the contents of the last login log
+/var/log/lastlog
+file\&. The
+\fIlogin\-name\fR,
+\fIport\fR, and
+\fIlast login time\fR
+will be printed\&. The default (no flags) causes lastlog entries to be printed, sorted by their order in
+/etc/passwd\&.
+.SH "FLAGGOR"
+.PP
+The options which apply to the
+\fBlastlog\fR
+command are:
+.PP
+\fB\-b\fR, \fB\-\-before\fR\ \&\fIDAYS\fR
+.RS 4
+Print only lastlog records older than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-C\fR, \fB\-\-clear\fR
+.RS 4
+Clear lastlog record of a user\&. This option can be used only together with
+\fB\-u\fR
+(\fB\-\-user\fR))\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-S\fR, \fB\-\-set\fR
+.RS 4
+Set lastlog record of a user to the current time\&. This option can be used only together with
+\fB\-u\fR
+(\fB\-\-user\fR))\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR\ \&\fIDAYS\fR
+.RS 4
+Print the lastlog records more recent than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR\ \&\fILOGIN\fR|\fIRANGE\fR
+.RS 4
+Print the lastlog record of the specified user(s)\&.
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+If the user has never logged in the message
+\fI** Never logged in**\fR
+will be displayed instead of the port and time\&.
+.PP
+Only the entries for the current users of the system will be displayed\&. Other entries may exist for users that were deleted previously\&.
+.SH "NOTERA"
+.PP
+The
+lastlog
+file is a database which contains info on the last login of each user\&. You should not rotate it\&. It is a sparse file, so its size on the disk is usually much smaller than the one shown by "\fBls \-l\fR" (which can indicate a really big file if you have in
+passwd
+users with a high UID)\&. You can display its real size with "\fBls \-s\fR"\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.SH "FILER"
+.PP
+/var/log/lastlog
+.RS 4
+Databastider f\(:or tidigare anv\(:andarinloggningar\&.
+.RE
+.SH "T\(:ANK P\(oA"
+.PP
+Large gaps in UID numbers will cause the lastlog program to run longer with no output to the screen (i\&.e\&. if in lastlog database there is no entries for users with UID between 170 and 800 lastlog will appear to hang as it processes entries with UIDs 171\-799)\&.
diff --git a/man/sv/man8/logoutd.8 b/man/sv/man8/logoutd.8
new file mode 100644
index 0000000..cec10d1
--- /dev/null
+++ b/man/sv/man8/logoutd.8
@@ -0,0 +1,57 @@
+'\" t
+.\" Title: logoutd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Systemhanteringskommandon
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "LOGOUTD" "8" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+logoutd \- enforce login time restrictions
+.SH "SYNOPSIS"
+.HP \w'\fBlogoutd\fR\ 'u
+\fBlogoutd\fR
+.SH "BESKRIVNING"
+.PP
+\fBlogoutd\fR
+enforces the login time and port restrictions specified in
+/etc/porttime\&.
+\fBlogoutd\fR
+should be started from
+/etc/rc\&. The
+/var/run/utmp
+file is scanned periodically and each user name is checked to see if the named user is permitted on the named port at the current time\&. Any login session which is violating the restrictions in
+/etc/porttime
+is terminated\&.
+.SH "FILER"
+.PP
+/etc/porttime
+.RS 4
+Fil som inneh\(oaller port\(oatkomst
+.RE
+.PP
+/var/run/utmp
+.RS 4
+Lista p\(oa aktuella inloggningssessioner\&.
+.RE
diff --git a/man/sv/man8/nologin.8 b/man/sv/man8/nologin.8
new file mode 100644
index 0000000..bec08cb
--- /dev/null
+++ b/man/sv/man8/nologin.8
@@ -0,0 +1,55 @@
+'\" t
+.\" Title: nologin
+.\" Author: Nicolas Fran\(,cois <nicolas.francois@centraliens.net>
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Systemhanteringskommandon
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "NOLOGIN" "8" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+nologin \- v\(:agra sn\(:allt en inloggning
+.SH "SYNOPSIS"
+.HP \w'\fBnologin\fR\ 'u
+\fBnologin\fR
+.SH "BESKRIVNING"
+.PP
+The
+\fBnologin\fR
+command displays a message that an account is not available and exits non\-zero\&. It is intended as a replacement shell field for accounts that have been disabled\&.
+.PP
+To disable all logins, investigate
+\fBnologin\fR(5)\&.
+.PP
+If
+\fBSSH_ORIGINAL_COMMAND\fR
+is populated it will be logged\&.
+.SH "SE OCKS\(oA"
+.PP
+\fBlogin\fR(1),
+\fBnologin\fR(5)\&.
+.SH "HISTORY"
+.PP
+The
+\fBnologin\fR
+command appeared in BSD 4\&.4\&.
diff --git a/man/sv/man8/pwck.8 b/man/sv/man8/pwck.8
new file mode 100644
index 0000000..7f99af7
--- /dev/null
+++ b/man/sv/man8/pwck.8
@@ -0,0 +1,328 @@
+'\" t
+.\" Title: pwck
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Systemhanteringskommandon
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "PWCK" "8" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+pwck \- validera integriteten f\(:or l\(:osenordsfiler
+.SH "SYNOPSIS"
+.HP \w'\fBpwck\fR\ 'u
+\fBpwck\fR [flaggor] [\fIpasswd\fR\ [\ \fIshadow\fR\ ]]
+.SH "BESKRIVNING"
+.PP
+The
+\fBpwck\fR
+command verifies the integrity of the users and authentication information\&. It checks that all entries in
+/etc/passwd
+and
+/etc/shadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+Kontroller g\(:ors f\(:or att validera att varje post har:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+korrekt antal f\(:alt
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a unique and valid user name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+en giltig identifierare f\(:or anv\(:andare och grupp
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+en giltig prim\(:ar grupp
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+en giltig hemkatalog
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+ett giltigt inloggningsskal
+.RE
+.PP
+shadow
+checks are enabled when a second file parameter is specified or when
+/etc/shadow
+exists on the system\&.
+.PP
+These checks are the following:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+every passwd entry has a matching shadow entry, and every shadow entry has a matching passwd entry
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+passwords are specified in the shadowed file
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+shadow entries have the correct number of fields
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+shadow entries are unique in shadow
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+the last password changes are not in the future
+.RE
+.PP
+The checks for correct number of fields and unique user name are fatal\&. If the entry has the wrong number of fields, the user will be prompted to delete the entire line\&. If the user does not answer affirmatively, all further checks are bypassed\&. An entry with a duplicated user name is prompted for deletion, but the remaining checks will still be made\&. All other errors are warning and the user is encouraged to run the
+\fBusermod\fR
+command to correct the error\&.
+.PP
+The commands which operate on the
+/etc/passwd
+file are not able to alter corrupted or duplicated entries\&.
+\fBpwck\fR
+should be used in those circumstances to remove the offending entry\&.
+.SH "FLAGGOR"
+.PP
+The
+\fB\-r\fR
+and
+\fB\-s\fR
+options cannot be combined\&.
+.PP
+The options which apply to the
+\fBpwck\fR
+command are:
+.PP
+\fB\-\-badname\fR\ \&
+.RS 4
+Allow names that do not conform to standards\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Report errors only\&. The warnings which do not require any action from the user won\*(Aqt be displayed\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-read\-only\fR
+.RS 4
+Execute the
+\fBpwck\fR
+command in read\-only mode\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sort\fR
+.RS 4
+Sort entries in
+/etc/passwd
+and
+/etc/shadow
+by UID\&.
+.RE
+.PP
+By default,
+\fBpwck\fR
+operates on the files
+/etc/passwd
+and
+/etc/shadow\&. The user may select alternate files with the
+\fIpasswd\fR
+and
+\fIshadow\fR
+parameters\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+The maximum number of days a password may be used\&. If the password is older than this, a password change will be forced\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+The minimum number of days allowed between password changes\&. Any password changes attempted sooner than this will be rejected\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+The number of days warning given before a password expires\&. A zero means warning is given only upon the day of expiration, a negative value means no warning is given\&. If not specified, no warning will be provided\&.
+.RE
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+S\(:aker anv\(:andarkontoinformation\&.
+.RE
+.SH "AVSLUTNINGSV\(:ARDEN"
+.PP
+The
+\fBpwck\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI2\fR
+.RS 4
+one or more bad password entries
+.RE
+.PP
+\fI3\fR
+.RS 4
+can\*(Aqt open password files
+.RE
+.PP
+\fI4\fR
+.RS 4
+can\*(Aqt lock password files
+.RE
+.PP
+\fI5\fR
+.RS 4
+can\*(Aqt update password files
+.RE
+.PP
+\fI6\fR
+.RS 4
+can\*(Aqt sort password files
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBgroup\fR(5),
+\fBgrpck\fR(8),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/sv/man8/userdel.8 b/man/sv/man8/userdel.8
new file mode 100644
index 0000000..822320b
--- /dev/null
+++ b/man/sv/man8/userdel.8
@@ -0,0 +1,308 @@
+'\" t
+.\" Title: userdel
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Systemhanteringskommandon
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "USERDEL" "8" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+userdel \- ta bort ett anv\(:andarkonto och relaterade filer
+.SH "SYNOPSIS"
+.HP \w'\fBuserdel\fR\ 'u
+\fBuserdel\fR [flaggor] \fIINLOGGNINGSNAMN\fR
+.SH "BESKRIVNING"
+.PP
+The
+\fBuserdel\fR
+command modifies the system account files, deleting all entries that refer to the user name
+\fILOGIN\fR\&. The named user must exist\&.
+.SH "FLAGGOR"
+.PP
+The options which apply to the
+\fBuserdel\fR
+command are:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option forces the removal of the user account, even if the user is still logged in\&. It also forces
+\fBuserdel\fR
+to remove the user\*(Aqs home directory and mail spool, even if another user uses the same home directory or if the mail spool is not owned by the specified user\&. If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs
+and if a group exists with the same name as the deleted user, then this group will be removed, even if it is still the primary group of another user\&.
+.sp
+\fINote:\fR
+This option is dangerous and may leave your system in an inconsistent state\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-remove\fR
+.RS 4
+Files in the user\*(Aqs home directory will be removed along with the home directory itself and the user\*(Aqs mail spool\&. Files located in other file systems will have to be searched for and deleted manually\&.
+.sp
+The mail spool is defined by the
+\fBMAIL_DIR\fR
+variable in the
+login\&.defs
+file\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR
+.RS 4
+Remove any SELinux user mapping for the user\*(Aqs login\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBUSERDEL_CMD\fR (string)
+.RS 4
+If defined, this command is run when removing a user\&. It should remove any at/cron/print jobs etc\&. owned by the user to be removed (passed as the first argument)\&.
+.sp
+The return code of the script is not taken into account\&.
+.sp
+Here is an example script, which removes the user\*(Aqs cron, at and print jobs:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#! /bin/sh
+
+# Check for the required argument\&.
+if [ $# != 1 ]; then
+ echo "Usage: $0 username"
+ exit 1
+fi
+
+# Remove cron jobs\&.
+crontab \-r \-u $1
+
+# Remove at jobs\&.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username\&.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR \-name "[^\&.]*" \-type f \-user $1 \-delete \e;
+
+# Remove print jobs\&.
+lprm $1
+
+# All done\&.
+exit 0
+
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+S\(:aker anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/subgid
+.RS 4
+Per user subordinate group IDs\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+Per user subordinate user IDs\&.
+.RE
+.SH "AVSLUTNINGSV\(:ARDEN"
+.PP
+The
+\fBuserdel\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+can\*(Aqt update password file
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified user doesn\*(Aqt exist
+.RE
+.PP
+\fI8\fR
+.RS 4
+user currently logged in
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.PP
+\fI12\fR
+.RS 4
+can\*(Aqt remove home directory
+.RE
+.SH "T\(:ANK P\(oA"
+.PP
+\fBuserdel\fR
+will not allow you to remove an account if there are running processes which belong to this account\&. In that case, you may have to kill those processes or lock the user\*(Aqs password or account and remove the account later\&. The
+\fB\-f\fR
+option can force the deletion of this account\&.
+.PP
+You should manually check all file systems to ensure that no files remain owned by this user\&.
+.PP
+Du f\(oar inte ta bort n\(oagra NIS\-attribut p\(oa en NIS\-klient\&. Detta m\(oaste genomf\(:oras p\(oa NIS\-servern\&.
+.PP
+If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs,
+\fBuserdel\fR
+will delete the group with the same name as the user\&. To avoid inconsistencies in the passwd and group databases,
+\fBuserdel\fR
+will check that this group is not used as a primary group for another user, and will just warn without deleting the group otherwise\&. The
+\fB\-f\fR
+option can force the deletion of this group\&.
+.SH "SE OCKS\(oA"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBlogin.defs\fR(5),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuseradd\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/sv/man8/vigr.8 b/man/sv/man8/vigr.8
new file mode 100644
index 0000000..ff72d7a
--- /dev/null
+++ b/man/sv/man8/vigr.8
@@ -0,0 +1 @@
+.so man8/vipw.8
diff --git a/man/sv/man8/vipw.8 b/man/sv/man8/vipw.8
new file mode 100644
index 0000000..5adbd8f
--- /dev/null
+++ b/man/sv/man8/vipw.8
@@ -0,0 +1,137 @@
+'\" t
+.\" Title: vipw
+.\" Author: Marek Micha\(/lkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 23-01-2020
+.\" Manual: Systemhanteringskommandon
+.\" Source: shadow-utils 4.8.1
+.\" Language: Swedish
+.\"
+.TH "VIPW" "8" "23-01-2020" "shadow\-utils 4\&.8\&.1" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+vipw, vigr \- redigera l\(:osenordet, grupp, skuggl\(:osenord eller skuggruppfil
+.SH "SYNOPSIS"
+.HP \w'\fBvipw\fR\ 'u
+\fBvipw\fR [\fIflaggor\fR]
+.HP \w'\fBvigr\fR\ 'u
+\fBvigr\fR [\fIflaggor\fR]
+.SH "BESKRIVNING"
+.PP
+The
+\fBvipw\fR
+and
+\fBvigr\fR
+commands edits the files
+/etc/passwd
+and
+/etc/group, respectively\&. With the
+\fB\-s\fR
+flag, they will edit the shadow versions of those files,
+/etc/shadow
+and
+/etc/gshadow, respectively\&. The programs will set the appropriate locks to prevent file corruption\&. When looking for an editor, the programs will first try the environment variable
+\fB$VISUAL\fR, then the environment variable
+\fB$EDITOR\fR, and finally the default editor,
+\fBvi\fR(1)\&.
+.SH "FLAGGOR"
+.PP
+The options which apply to the
+\fBvipw\fR
+and
+\fBvigr\fR
+commands are:
+.PP
+\fB\-g\fR, \fB\-\-group\fR
+.RS 4
+Redigera gruppdatabasen\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-passwd\fR
+.RS 4
+Redigera l\(:osenordsdatabasen\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Tyst l\(:age\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shadow\fR
+.RS 4
+Redigera shadow\- eller gshadow\-databasen\&.
+.RE
+.SH "ENVIRONMENT"
+.PP
+\fBVISUAL\fR
+.RS 4
+Editor to be used\&.
+.RE
+.PP
+\fBEDITOR\fR
+.RS 4
+Editor to be used if
+\fBVISUAL\fR
+is not set\&.
+.RE
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+S\(:aker gruppkontoinformation\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+S\(:aker anv\(:andarkontoinformation\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBvi\fR(1),
+\fBgroup\fR(5),
+\fBgshadow\fR(5)
+,
+\fBpasswd\fR(5), ,
+\fBshadow\fR(5)\&.
diff --git a/man/tr/Makefile.am b/man/tr/Makefile.am
new file mode 100644
index 0000000..8d8b916
--- /dev/null
+++ b/man/tr/Makefile.am
@@ -0,0 +1,18 @@
+mandir = @mandir@/tr
+
+man_MANS = \
+ man1/chage.1 \
+ man1/chfn.1 \
+ man8/groupadd.8 \
+ man8/groupdel.8 \
+ man8/groupmod.8 \
+ man1/login.1 \
+ man1/passwd.1 \
+ man5/passwd.5 \
+ man5/shadow.5 \
+ man1/su.1 \
+ man8/useradd.8 \
+ man8/userdel.8 \
+ man8/usermod.8
+
+EXTRA_DIST = $(man_MANS)
diff --git a/man/tr/Makefile.in b/man/tr/Makefile.in
new file mode 100644
index 0000000..7321155
--- /dev/null
+++ b/man/tr/Makefile.in
@@ -0,0 +1,661 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = man/tr
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" \
+ "$(DESTDIR)$(man8dir)"
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@/tr
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = \
+ man1/chage.1 \
+ man1/chfn.1 \
+ man8/groupadd.8 \
+ man8/groupdel.8 \
+ man8/groupmod.8 \
+ man1/login.1 \
+ man1/passwd.1 \
+ man5/passwd.5 \
+ man5/shadow.5 \
+ man1/su.1 \
+ man8/useradd.8 \
+ man8/userdel.8 \
+ man8/usermod.8
+
+EXTRA_DIST = $(man_MANS)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/tr/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign man/tr/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+install-man5: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man5dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.5[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man5:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man5dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.5[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir)
+install-man8: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man8dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.8[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man8:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man8dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.8[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-man5 install-man8 install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+ uninstall-am uninstall-man uninstall-man1 uninstall-man5 \
+ uninstall-man8
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/tr/man1/chage.1 b/man/tr/man1/chage.1
new file mode 100644
index 0000000..16bbbb1
--- /dev/null
+++ b/man/tr/man1/chage.1
@@ -0,0 +1,90 @@
+
+
+.\" Copyright 1990 - 1994 Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+
+.TH chage 1 "" "" ""
+.nh
+.SH İSİM
+chage -
+kullanıcı parolasının son kullanma tarihini değiştirir
+
+.SH KULLANIM
+
+.nf
+
+\fBchage\fR [\fB-m \fR\fIasgari-gün-sayısı\fR] [\fB-M \fR\fIazami-gün-sayısı\fR] [\fB-d \fR\fIson-gün\fR]
+ [\fB-I \fR\fIpasif\fR] [\fB-E \fR\fIson-tarih\fR] [\fB-W \fR\fIuyarı-gün-sayısı\fR] \fIkullanıcı\fR
+
+\fBchage -l \fR\fIkullanıcı\fR
+
+.fi
+
+
+
+.SH AÇIKLAMA
+
+
+\fBchage\fR, parolanın son değiştirilme tarihinden, değiştirilmesi gerekecek olan güne kadar geçen sürenin gün cinsinde miktarını değiştirir. Bu bilgi, sistem tarafından, kullanıcının ne zaman parolasını değiştirmesi gerektiğini bulmakta kullanılır. Bu komut root kullanıcıya tahsis edilmiştir. Sadece \fB-l\fR seçeneği, normal kullanıcılar tarafından, parola ve hesaplarının son kullanma tarihini görmek amacı ile kullanılabilir.
+
+\fB-m\fR seçeneği ile belirtilen \fIasgari-gün-sayısı\fR´nın değeri, parola değişiklikleri arasında geçecek asgari gün sayısıdır. Buraya sıfır değeri verilirse, kullanıcı istediği bir zaman parolasını değiştirebilir.
+
+\fB-M\fR seçeneği ile belirtilen \fIazami-gün-sayısı\fR´nın değeri, parolanın geçerliliğinin biteceği güne kadar geçecek zamanın gün cinsinden miktarıdır. \fIazami-gün-sayısı\fR artı \fIson-gün\fR, içinde bulunulan günden az ise, kullanıcı hesabını kullanmadan önce parolasını değiştirmek zorunda kalacaktır. Bu olay, \fB-W\fR seçeneğini kullanılarak da ayarlanabilir. Bu seçenek sayesinde kullanıcıya bu olay hakkında uyarı mesajı verebilirsiniz.
+
+\fB-d\fR seçeneği ile, \fIson-gün\fR´ün değeri 1 Ocak 1970´den parolanın son değişeceği güne kadar olan gün sayısıdır. YYYY-AA-GG biçiminde bir tarih olarak da belirtilebilir (veya yaşadığınız bölgede kabul edilen tarih biçimi ile).
+
+\fB-E\fR seçeneği, kullanıcı hesabının hangi tarihten sonra erişilemez olduğunu ayarlamak için kullanılır. \fIson-tarih\fR´in değeri; 1 Ocak 1970´den hesabın kilitleneceği güne kadar olan sürenin gün cinsinden miktarıdır. YYYY-AA-GG biçiminde bir tarih olarak da belirtilebilir (veya yaşadığınız bölgede kabul edilen tarih biçimi ile). Hesabı kilitlenen bir kullanıcının hesabını tekrar kullanabilmesi için, mutlaka sistem yöneticisine baş vurması gerekmektedir.
+
+\fB-I\fR seçeneği, bir parolanın pasif hale geçmesi ile hesabın kilitlenmesi arasında geçecek olan gün miktarını ayarlamak için kullanılır. \fIpasif\fR seçeneği, pasif geçecek gün sayısıdır. 0 (sıfır) değeri bu özelliği etkisizleştirir. Hesabı kilitlenen bir kullanıcının hesabını tekrar kullanabilmesi için, mutlaka sistem yöneticisine baş vurması gerekmektedir.
+
+\fB-W\fR seçeneği, bir parola değişikliğinin gerekeceği günden kaç gün önce uyarı verileceğini ayarlamak için kullanılır. \fIuyarı-gün-sayısı\fR seçeneği, kullanıcının parolasının geçersiz kalmasından önce kullanıcının uyarılacağı gün sayısıdır.
+
+Şayet hiçbir seçenek belirtilmezse, \fBchage\fR etkileşimli kipe geçer. O an için geçerli olan bütün değerleri ekrana yazar. Bu alanlardaki değerleri değiştirmek için yeni değerler girilir. Şayet geçerli değerleri kullanmak istiyorsanız bu satırları boş bırakın. Geçerli değerler \fB[ ]\fR işaretleri arasında gösterilir.
+
+.SH SINIRLAMALAR
+
+\fBchage\fR uygulamasının /etc/shadow dosyasına ihtiyacı vardır. Şayet parolalar /etc/passwd dosyası içinde saklanıyorsa, \fBchage\fR uygulamasının işlevselliği ortadan kalkar.
+
+.SH İLGİLİ DOYALAR
+
+/etc/passwd - kullanıcı hesabı bilgileri
+.br
+/etc/shadow - gölge parolalı kullanıcı hesabı bilgileri
+
+.SH İLGİLİ DOYALAR
+
+\fBpasswd\fR(5),
+\fBshadow\fR(5)
+
+.SH YAZAN
+
+Julianne Frances Haugh <jockgrrl (at) ix.netcom.com> tarafından yazılmıştır.
+
+.SH ÇEVİREN
+
+Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Kasım 2003
+
diff --git a/man/tr/man1/chfn.1 b/man/tr/man1/chfn.1
new file mode 100644
index 0000000..a867ed9
--- /dev/null
+++ b/man/tr/man1/chfn.1
@@ -0,0 +1,79 @@
+
+
+.\" chfn.1 -- change your finger information
+.\" (c) 1994 by salvatore valente <svalente@athena.mit.edu>
+.\"
+.\" this program is free software. you can redistribute it and
+.\" modify it under the terms of the gnu general public license.
+.\" there is no warranty.
+
+.TH chfn 1 "13 Ekim 1994" "chfn " "Linux Başvuru Kılavuzu"
+.nh
+.SH İSİM
+chfn -
+kişisel bilgilerinizi değiştirir
+
+.SH KULLANIM
+
+.nf
+
+\fBchfn\fR [ \fB-f \fR\fIAdı-Soyadı\fR ] [ \fB-o \fR\fIİşyeri\fR ] [ \fB-p \fR\fIİş-telefonu\fR ]
+ [ \fB-h \fR\fIEv-telefonu\fR ] [ \fB-u\fR ] [ \fB-v\fR ] [ \fIkullanıcı\fR ]
+
+.fi
+
+
+
+.SH AÇIKLAMA
+
+\fBchfn\fR, kişisel bilgilerinizi değiştirmek için kullanılır. Bu bilgiler /etc/passwd dosyası içinde saklanır ve \fBfinger\fR komutu aracılığı ile ekrana gönderilir. Linux \fBfinger\fR komutu; \fBchfn\fR tarafından değiştirilebilen dört bilgi alanı görüntüler: adınız ve soyadınız, işyeriniz, iş telefon numaranız ve ev telefon numaranız.
+.SS KOMUT SATIRI
+
+Dört parçadan oluşan bu bilgilerin herhangi biri komut satırından belirtilebilir. Şayet komut satırından bilgi girilmemiş ise, \fBchfn\fR etkileşimli kipe geçecektir.
+.SS ETKİLEŞİMLİ KİP
+
+Etkileşimli kipte, \fBchfn\fR, her bir alan için kullanıcıdan veri girmesini isteyecektir. Bu alanlara yeni bilgi girebilir ya da eski bilgiyi korumak için enter tuşuna basıp devam edebilirsiniz. Alanları boş bırakmak için \fBnone\fR kelimesini giriniz.
+
+.SH SEÇENEKLER
+
+
+.br
+.ns
+.TP
+\fB-f\fR, \fB--full-name\fR
+Ad ve soyadı belirtilir.
+
+.TP
+\fB-o\fR, \fB--office\fR
+İşyeri ya da işyerindeki bölümünüz.
+
+.TP
+\fB-p\fR, \fB--office-phone\fR
+İş telefonunuz.
+
+.TP
+\fB-h\fR, \fB--home-phone\fR
+Ev telefonunuz.
+
+.TP
+\fB-u\fR, \fB--help\fR
+Bu kullanım bilgisi görüntüler ve çıkar.
+
+.TP
+\fB-v\fR, \fB--version\fR
+Sürüm bilgilerini görüntüler ve çıkar.
+
+.PP
+
+.SH İLGİLİ BELGELER
+
+\fBfinger\fR(1),
+\fBpasswd\fR(5).
+
+.SH YAZAN
+
+Salvatore Valente <svalente (at) mit.edu> tarafından yazılmıştır.
+.SH ÇEVİREN
+
+Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Aralık 2003
+
diff --git a/man/tr/man1/login.1 b/man/tr/man1/login.1
new file mode 100644
index 0000000..491a97d
--- /dev/null
+++ b/man/tr/man1/login.1
@@ -0,0 +1,114 @@
+
+
+.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
+.\" May be distributed under the GNU General Public License
+
+.TH login 1 "4 Kasım 1996" "Util-linux 1.6" "Linux Yazılımcılarının Kılavuzu"
+.nh
+.SH İSİM
+login -
+Kullanıcının sisteme girişini sağlar.
+
+.SH KULLANIM
+
+
+\fBlogin\fR [ \fIisim\fR ]
+.br
+\fBlogin -p\fR
+.br
+\fBlogin -h\fR \fIkonakismi\fR
+.br
+\fBlogin -f\fR \fIisim\fR
+
+
+.SH AÇIKLAMA
+
+\fBlogin\fR, bir sisteme bağlanmak için kullanılır. Ayrıca, istenilen bir anda, bir kullanıcı adından başka birine geçiş yapmak içinde kullanılabilir (günümüzdeki pek çok kabuk, yerleşik olarak bu özelliği desteklemektedir).
+
+Herhangi bir argüman belirtilmemişse, \fBlogin\fR kullanıcı adını soracaktır.
+
+Şayet kullanıcı root değilse, ve eğer /etc/nologin dosyası varsa, bu dosyanın içeriği ekrana basılacak ve \fBlogin\fR sonlandırılacaktır. Bu genellikle, sistem kapanırken, yapılacak bağlantıları önlemek için kullanılır.
+
+Şayet kullanıcı için /etc/usertty içinde özel erişim kısıtlamaları tanımlanmışsa, kullanıcı bu şartları karşılamak zorundadır. Aksi taktirde bağlantı girişimi reddedilecek ve bir \fBsyslog\fR iletisi üretilecektir. Daha fazla bilgi için "Özel Erişim Kısıtlamaları" bölümüne bakınız.
+
+Şayet kullanıcı root ise, /etc/securetty içinde listelenen uçbirimlerden birisini kullanarak bağlanmak zorundadır. Giriş hataları \fBsyslog\fR tarafından kaydedilir.
+
+Bütün bu şartlar kontrol edildikten sonra, parola istenecek ve kontrol edilecektir (şayet bu kullanıcı için parola gerekli ise). \fBlogin\fR sonlandırılmadan önce, 10 giriş denemesine izin vardır, fakat ilk üç denemeden sonra isteğe karşılık verme süresi uzayacaktır. Bağlantı hataları \fBsyslog\fR üzerinden rapor edilecektir. Bu, ayrıca başarılı root bağlantılarını raporlamak içinde kullanılır.
+
+Şayet .hushlogin dosyası varsa, bir "hızlı" bağlantı gerçekleştirilir (bu özellik; e-posta kontrolünü, en son bağlantı zamanının ve günün iletisinin ekrana basılmasını engeller). Diğer yandan, şayet /var/log/lastlog dosyası varsa, son bağlantı zamanı ekrana basılacaktır (ve o anki bağlantı kaydedilecektir).
+
+Uçbirimin UID ve GID ayarlarını yapmak gibi, rastgele yönetim işleri yapılır. Şayet daha önceden belirtilmişse, TERM ortam değişkeni korunur (\fB-p\fR seçeneği kullanılmışsa diğer çevre değişkenleri de korunur). Daha sonra HOME, PATH, SHELL, TERM, MAIL ve LOGNAME ortam değişkenleri ayarlanır. PATH değişkeni normal kullanıcılar için öntanımlı olarak /usr/local/bin:/bin:/usr/bin:. ve root kullanıcı için /bin:/usr/sbin:/usr/bin'dir. Son olarak, şayet bu bir "hızlı" bağlantı değilse; günün iletisi görüntülenir, kullanıcıya ait /var/spool/mail içindeki dosya kontrol edilir ve şayet dosya uzunluğu sıfırdan farklı ise bir ileti görüntülenir (şayet bu dosyanın uzunluğu sıfırdan farklı ise, kullanıcıya bir ileti gelmiş demektir).
+
+Daha sonra kullanıcı kabuğu başlatılır. Şayet \fB/etc/passwd\fR içinde kullanıcı için bir kabuk tanımlı değilse, \fB/bin/sh\fR kullanılır. Şayet /etc/passwd içinde bir dizin tanımlı değilse, ev dizini olarak \fB/\fR (kök) dizini kullanılır (yukarıda bahsedilen .hushlogin dosyası için ev dizinine bakılır).
+
+
+.SH SEÇENEKLER
+
+
+.br
+.ns
+.TP
+\fB-p\fR
+\fBgetty\fR(8) tarafından kullanılır, ortam değişkenlerinin korunmasını sağlar.
+
+.TP
+\fB-f\fR
+İkinci bağlantı doğrulamasını atlamak için kullanılır. Özellikle root kullanıcı için çalışmaz ve Linux altında da çalıştığı görülmemiştir.
+
+.TP
+\fB-h\fR
+Diğer sunucular tarafından (\fBtelnetd\fR(8) gibi) uzak sunucunun adını, \fBlogin\fR´e bildirmek için kullanılır, bundan dolayı, utmp ve wtmp içine yerleştirilebilir. Bu seçenek sadece root kullanıcı içindir.
+
+.PP
+
+.SH ÖZEL ERİŞİM KISITLAMALARI
+
+/etc/securetty dosyası, root kullanıcının bağlantı yapabileceği, uçbirim isimlerinin listesini içerir. Her bir satırda, /dev/ öneki olmaksızın bir tty aygıtının adı belirtilmelidir. Şayet bu dosya yoksa, root kullanıcı herhangi bir uçbirim üzerinden bağlanabilir.
+
+Günümüzde çoğu Linux sistemi PAM (Pluggable Authentication Modules - Eklenebilir Kimlik Kantlama Modülleri) kullanmaktadır. PAM kullanılmayan sistemlerde /etc/usertty dosyası, belirlenen kullanıcılar için, ek erişim kısıtlamaları içerir. Şayet bu dosya yoksa, ek erişim kısıtlamaları yüklenemez. Bu dosya çeşitli bölümler içerir. Üç çeşit bölüm türü münkündür: CLASSES, GROUPS ve USERS. CLASSES bölümü uçbirim sınıflarının ve sunucu adlarının şablonlarını içerir. GROUPS bölümü her bir grup için, USERS bölümü ise her bir kullanıcı için izin verilen uçbirimleri ve sunucuları tanımlar.
+
+Bu dosya içindeki her bir satır en fazla 255 karaktere sahip olabilir. Açıklamalar \fB#\fR ile başlar ve satır sonuna kadar devam eder.
+
+.SS CLASSES Bölümü
+
+Bir CLASSES bölümü bir satırın başında tamamen büyük harflerden oluşmuş CLASSES dizgesi ile başlar. Yeni bir bölümün başlangıcına veya dosyanın sonuna kadar her bir satır sekmeler ya da boşluklar tarafından ayrılmış sözcük dizilimleri içerir. Her bir satır uçbirim sınıfları ve sunucu şablonları içerir.
+
+Satır başındaki sözcük, satırın kalanında tanımlanmış uçbirimler ve sunucu şablonları için ortak sınıf ismidir. Bu sınıf ismi GROUPS veya USERS bölümlerinde kullanılabilir. Yinelenmiş sınıflar oluşturma hatasından korunmak için sınıf isimleri tanımlamaların içinde kullanılmamalıdır.
+
+Örnek bir CLASSES bölümü:
+
+.nf
+
+CLASSES
+sinif1 tty1 tty2
+sinif2 tty3 @.foo.com
+
+.fi
+
+
+Burada \fIsinif1\fR ve \fIsinif2\fR sınıfları sağ taraflarındakilerle tanımlanmıştır.
+
+.SS GROUPS Bölümü
+
+Bir GROUPS bölümü; her bir UNIX grubu için izin verilen uçbirim ve
+sunucuları tanımlar. Şayet bir kullanıcı /etc/passwd ve /etc/group dosyalarındaki tanımlara göre göre bir UNIX grubunun üyesi ise ve bu grup /etc/usertty içindeki GROUPS bölümünde belirtilmiş ise, kullanıcıya erişim izni verilmiş demektir.
+
+Bir CLASSES bölümü bir satırın başında tamamen büyük harflerden oluşmuş CLASSES dizgesi ile başlar.
+Bir GROUPS bölümü bir satırda tamamen büyük harflerden oluşmuş GROUPS
+yazısı ile başlar ve devam eden tüm satırlar, boşluklar veya tablar ile ayrılmış, kelimeler dizileridir. Satırdaki ilk kelime grup adı ve diğer kelimeler; grup elemanlarına bağlantı için izin verilen ttys´ler ve sunuculardır. Bu tanımlamalar önceki bölümde( CLASSES bölümünde) açıklanan sınıfları içerebilirler.
+
+
+.SH TEMİNİ
+
+\fBlogin\fR, e2fsprogs paketinin bir parçasıdır ve
+.br
+http://e2fsprogs.sourceforge.net adresinden temin edilebilir.
+
+.SH İLGİLİ BELGELER
+
+\fBchattr\fR(1)
+
+.SH ÇEVİREN
+
+Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Kasım 2003
+
diff --git a/man/tr/man1/passwd.1 b/man/tr/man1/passwd.1
new file mode 100644
index 0000000..afc461a
--- /dev/null
+++ b/man/tr/man1/passwd.1
@@ -0,0 +1,172 @@
+
+
+.\" Copyright Red Hat, Inc., 1998, 1999, 2002.
+.\"
+.\" 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, and the entire permission notice in its entirety,
+.\" including the disclaimer of warranties.
+.\" 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 author may not be used to endorse or promote
+.\" products derived from this software without specific prior
+.\" written permission.
+.\"
+.\" ALTERNATIVELY, this product may be distributed under the terms of
+.\" the GNU Public License, in which case the provisions of the GPL are
+.\" required INSTEAD OF the above restrictions. (This clause is
+.\" necessary due to a potential bad interaction between the GPL and
+.\" the restrictions contained in a BSD-style copyright.)
+.\"
+.\" THIS SOFTWARE IS PROVIDED ``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 AUTHOR 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.
+.\"
+.\" Copyright (c) Cristian Gafton, 1998, <gafton@redhat.com>
+.\"
+
+.TH passwd 1 "3 Ocak 1998" "Red Hat Linux" "Kullanıcı Araçları"
+.nh
+.SH İSİM
+passwd -
+kullanıcının parolasını günceller
+
+.SH KULLANIM
+
+.nf
+
+\fBpasswd \fR[\fB-k\fR] [\fB-l\fR] [\fB-u \fR[\fB-f\fR]] [\fB-d\fR] [\fB-n \fR\fIasgari_ömür\fR] [\fB-x \fR\fIazami_ömür\fR]
+ [\fB-w \fR\fIuyarı_süresi\fR] [\fB-i \fR\fIaskı_süresi\fR] [\fB-S\fR] [\fIkullanıcı\fR]
+
+.fi
+
+
+
+.SH AÇIKLAMA
+
+\fBpasswd\fR, bir kullanıcının parolasını günceller
+
+\fBpasswd\fR, \fBLinux-PAM API\fR´si aracılığı ile çalışmak üzere ayarlanmıştır. Aslında, \fBpasswd\fR, kendisini Linux-Pam ile birlikte bir "passdw" servisi olarak başlatır ve yetkilendirme için ayarlanmış parola modüllerini kullanır. Daha sonra kullanıcının parolası güncellenir.
+
+Bu servis için, Linux-PAM ayar dosyası, basitçe, şu şekilde olurdu:
+
+.nf
+
+#
+# bir parola güncellenmeden önce, bu önerilen parolanın sağlamlığını
+# kontrol eden passwd servis girdisi.
+#
+passwd password requisite \
+ /usr/lib/security/pam_cracklib.so retry=3
+passwd password required \
+ /usr/lib/security/pam_unix.so use_authtok
+#
+
+.fi
+
+
+NOT: Bu uygulamanın düzgün çalışması için, diğer modül türlerine ihtiyaç yoktur.
+
+.SH SEÇENEKLER
+
+
+.br
+.ns
+.TP
+\fB-k\fR
+Bu seçenek, güncellemenin, sadece geçerlilik süresi bitmiş parolaları kapsadığı anlamaına gelir. Kullanıcı geçerlilik süresi dolmamış parolalarını kullanmaya devam edebilir.
+
+.TP
+\fB-l\fR
+Bu seçeneği sadece root kullanıcı kullanabilir. Belirtilen hesabı
+kilitlemeye yarar. Kilitleme işlemi; şifrelenmiş parolanın sözdizimi geçersiz hale getirilerek uygulanır (şifreli sözdiziminin başına ! getirmek suretiyle).
+
+.TP
+\fB--stdin\fR
+Bu seçenek, yeni parolanın borulanabilen standart girdiden okunacağı anlamına gelir.
+
+.TP
+\fB-u\fR
+\fB-l\fR seçeneğinin tersidir. Kilitlenmiş hesap parolalarının önündeki ! önekini kaldırarak, hesabı kullanıma açar. Bu seçenek, sadece root kullanıcıya tahsis edilmiştir. Öntanımlı olarak, \fBpassdw\fR, parolasız bir hesap oluşturmayı reddedecektir (parola olarak sadece ! işaretine sahip bir hesabın kilidini kaldıramaz). \fB-f\fR seçeneği, bu korumayı aşmak için kullanılabilir.
+
+.TP
+\fB-d\fR
+Bu seçenek, bir hesabın parolasını yok etmenin en kolay ve hızlı yoludur. Belirtilen hesabın parolasız açılmasını sağlar. Sadece root kullanıcı bu seçeneği kullanabilir.
+
+.TP
+\fB-n\fR
+Kullanıcının hesabı parola için bir geçerlilik süresi tanımlanmasını destekliyorsa, bu seçenekle parolanın geçerli olduğu asgari süre gün cinsinden belirtilebilir. Sadece root kullanıcı bu seçeneği kullanabilir.
+
+.TP
+\fB-x\fR
+Kullanıcının hesabı parola için bir geçerlilik süresi tanımlanmasını destekliyorsa, bu seçenekle parolanın geçerli olduğu azami süre gün cinsinden belirtilebilir. Sadece root kullanıcı bu seçeneği kullanabilir.
+
+.TP
+\fB-w\fR
+Kullanıcının hesabı parola için bir geçerlilik süresi tanımlanmasını destekliyorsa, bu seçenekle, kullanıcının parolasının zamanaşımına uğrayacağı tarihten kaç gün önceden itibaren uyarılacağı gün cinsinden belirtilebilir. Sadece root kullanıcı bu seçeneği kullanabilir.
+
+.TP
+\fB-i\fR
+Kullanıcının hesabı parola için bir geçerlilik süresi tanımlanmasını destekliyorsa, kullanıcı parolası zamanaşımına uğradıktan sonra kullanıcı hesabı tamamen iptal edilene kadar kaç gün süreyle bekleneceği belirtilir. Sadece root kullanıcı bu seçeneği kullanabilir.
+
+.PP
+
+.SH İKİ ÖNEMLİ KURAL
+.SS Parolanızı koruyun
+
+Parolanızı herhangi bir yere not etmeyin. Bunun yerine ezberinizde tutun. Parolanızı şifrelenmemiş bir dosya içine yazıp, ortalıkta bırakmayın. Birbirinden bağımsız parolalar kullanın. Her yere aynı parola ile üye olmayın. Bilgisayar destek veya satış görevlileri ile parolanızı paylaşmayın. Parolanızı yazarken, kimsenin sizi izlemesine izin vermeyin. Güvenli olduğuna inanmadığınız bir sistemden, parolanız aracılığı ile giriş yapmayın. Parolanız için geçerlilik süreleri tahsis edin ve parolanızı düzenli olarak değiştirin. Bir sistemdeki parolanız sizin her şeyinizdir. Bu konuda paronoyak davranmak, vurdumduymazlıktan daha mantıklı bir yöntemdir.
+
+.SS Tahmin edilmesi güç bir parola seçin
+
+\fBpasswd\fR, sizin kötü bir parola seçmenizi önlemeye çalışacaktır, fakat bu çok güvenilir bir sistem değildir. Parolalarınızı, mantıklı bir şekilde oluşturun. Herhangi bir sözlükte (hangi dilde olursa olsun) bulunabilecek kelimeler kullanmayın. Çocuğunuzun, en sevdiğiniz film kahramanınızın, evcil hayvanlarınızın, ana-babanızın, mekanların ve ünlü kişilerin adlarını parola olarak seçmeyin. Telefon numarası, araç plakanız, doğum tarihiniz, SSK numaranız gibi başkaları tarafından ulaşılabilecek bilgileri, parola olarak kullanmayınız. Basit şablonlu parolalardan uzak durun. Bunun yerine, küçük ve büyük harflerin karışımından oluşan ve mümkünse içerisinde rakamlar bulunan parolalar seçin. Uzun parolalar kullanın. Noktalama işaretlerinin kullanıldığı kelime çiftleri oldukça iyi bir seçim olacaktır. Uzun ve akılda kalır bir cümlenin ilk harflerinden oluşmuş anlamsız bir kelime de oldukça iyi bir seçim sayılır.
+
+
+
+Sistem, sizi bu iki kurala uymak konusunda biraz zorlayacaktır ama buradaki en önemli etken "insan"dır. Sistemlerin daha güvenli hale gelmesini sağlayan en önemli etken uyanık kullanıcılardır.
+
+.SH ÇIKIŞ DURUMU
+
+Çıkış durumu olarak \fB0\fR, işlemin başarıyla tamamlandığını gösterir. Hata oluştuğu durumlarda \fB1\fR ile çıkar. Metin olarak çıktılanabilen hatalar standart hataya yazılır.
+
+.SH UYUMLULUK
+
+Linux-PAM (Linux için Eklenebilir Kimlik Kanıtlama modülleri).
+.br
+Şayet, elinizdeki Linux-PAM sürümü, Linux dosya sistemi standartları ile uyumlu ise, modülleri /usr/lib/security dizini (örnekte gösterilen) yerine /lib/security altında bulabilirsiniz.
+
+.SH İLGİLİ DOSYALAR
+
+\fB/etc/pam.d/passwd\fR - \fBLinux-PAM\fR yapılandırma dosyası
+
+.SH YAZILIM HATALARI
+
+Bilinen herhangi bir yazılım hatası yoktur.
+.SH İLGİLİ BELGELER
+
+\fBpam_chauthok\fR(2),
+\fBpam\fR(8).
+
+\fBLinux-PAM\fR ile bu uygulamanın birlikte nasıl yapılandırıldığı hakkında daha ayrıntılı bilgiyi
+.br
+http://parc.power.net/morgan/Linux-PAM/index.html
+.br
+adresindeki, \fBLinux-PAM System Administrators´ Guide\fR içinde bulabilirsiniz.
+
+.SH YAZAN
+
+Cristian Gafton <gafton (at) redhat.com> tarafından yazılmıştır.
+.SH ÇEVİREN
+
+Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Aralık 2003
+
diff --git a/man/tr/man1/su.1 b/man/tr/man1/su.1
new file mode 100644
index 0000000..332c142
--- /dev/null
+++ b/man/tr/man1/su.1
@@ -0,0 +1,84 @@
+
+.TH su 1 "Eylül 2001" "GNU sh-utils 2.0.11" "FSF"
+.nh
+.SH İSİM
+su -
+başka bir kullanıcı ve grup kimliği ile bir kabuk çalıştırır
+
+.SH KULLANIM
+
+
+\fBsu\fR [\fISEÇENEK\fR]... [-] [\fIKULLANICI\fR [\fIARGÜMANLAR\fR]...]
+
+
+
+.SH AÇIKLAMA
+
+Etkin kullanıcı ve grup kimliğini \fIKULLANICI\fR´nınkilerle ile değiştirir.
+
+
+
+.br
+.ns
+.TP
+\fB-\fR, \fB-l\fR, \fB--login\fR
+Kabuğu, giriş kabuğu haline dönüştürür.
+
+.TP
+\fB-c\fR, \fB--commmand\fR=\fIKOMUT \fR
+Kabuğa \fB-c\fR ile tek bir \fIKOMUT\fR aktarır.
+
+.TP
+\fB-f\fR, \fB--fast\fR
+Kabuğa \fB-f\fR aktarır (csh veya tcsh için).
+
+.TP
+\fB-m\fR, \fB--preserve-environment\fR
+Ortam değişkenlerini sıfırlamaz.
+
+.TP
+\fB-p\fR
+\fB-m\fR ile aynıdır.
+
+.TP
+\fB-s\fR, \fB--shell\fR=\fIKABUK \fR
+/etc/shells izin verdiği taktirde \fIKABUK\fR kabuğunu çalıştırır.
+
+.TP
+\fB--help\fR
+Bu yardım metnini görüntüler ve çıkar.
+
+.TP
+\fB--version\fR
+Sürüm bilgilerini görüntüler ve çıkar.
+
+.PP
+
+
+Tek başına \fB-\fR verilirse \fB-l\fR verilmiş gibi işlem yapılır. \fIKULLANICI\fR belirtilmezse, kullanıcı root kabul edilir.
+
+.SH YAZAN
+
+David MacKenzie tarafından yazılmıştır.
+.SH GERİBİLDİRİM
+
+Lütfen, böcekleri ve hataları <bug-sh-utils (at) gnu.org> adresine bildirin.
+.SH TELİF HAKKI
+
+Telif hakkı © 2000 Free Software Foundation, Inc.
+.br
+Bu bir serbest yazılımdır; kopyalama koşulları için kaynak koduna bakınız. Hiçbir garantisi yoktur; hatta SATILABİLİRLİĞİ veya ŞAHSİ KULLANIMINIZA UYGUNLUĞU için bile garanti verilmez.
+
+.SH İLGİLİ BELGELER
+
+\fBsu\fR komutu ile ilgili kapsamlı bir kılavuz Texinfo olarak mevcuttur. Şayet \fBinfo\fR ve \fBsu\fR yazılımları düzgün bir şekilde sisteminizde mevcutsa, aşağıdaki komut ile bu kılavuzu görüntüleyebilirsiniz.
+
+.IP
+
+\fBinfo su\fR
+.PP
+
+.SH ÇEVİREN
+
+Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Kasım 2003
+
diff --git a/man/tr/man5/passwd.5 b/man/tr/man5/passwd.5
new file mode 100644
index 0000000..2c5348b
--- /dev/null
+++ b/man/tr/man5/passwd.5
@@ -0,0 +1,113 @@
+
+
+.\" Copyright (c) 1993 Michael Haardt (michael@moria.de), Fri Apr 2 11:32:09 MET DST 1993
+.\"
+.\" This is free documentation; you can redistribute it and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation; either version 2 of
+.\" the License, or (at your option) any later version.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual is distributed in the hope that it will be useful,
+.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.\" GNU General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public
+.\" License along with this manual; if not, write to the Free
+.\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
+.\" USA.
+.\"
+.\" Modified Sun Jul 25 10:46:28 1993 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Aug 21 18:12:27 1994 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Jun 18 01:53:57 1995 by Andries Brouwer (aeb@cwi.nl)
+.\" Modified Mon Jan 5 20:24:40 MET 1998 by Michael Haardt
+.\" (michael@cantor.informatik.rwth-aachen.de)
+
+.TH passwd 5 "5 Ocak 1998" "" "Dosya biçimleri"
+.nh
+.SH İSİM
+passwd -
+parola dosyası
+
+.SH AÇIKLAMA
+
+
+
+
+
+
+\fBpasswd\fR bir metin dosyasıdır. Sistem hesaplarının bir listesini tutar. Kullanıcı kimliği, grup kimliği, ev dizini, kabuk ve benzeri bilgileri ihtiva eder. Sıklıkla, her bir hesap için şifrelenmiş parolayı da içerir. Herkes tarafından okunma iznine sahiptir (pek çok uygulama bu dosyayı kullanır, mesela \fBls\fR(1), kullanıcı ismi ile kullanıcı kimlğini birbirine eşlemek için kullanır) ama sadece süper kullanıcının yazma izni vardır.
+
+Eski güzel günlerde, bu okuma izni ile ilgili büyük bir sorun yoktu. Herkes bu şifreli parolaları okuyabiliyordu ama iyi seçilmiş bir parolayı kırmak için yeterli donanım gücü yoktu ve kullanıcı grubu oldukça iyi niyetliydi. Günümüzde ise, pek çok kullanıcı gölgeli parola sistemini kullanmakta, /etc/passwd içinde parolanın yerinde bir `*´ görünmekte ve şifreli parola /etc/shadow içinde saklanmaktadır. Bu dosya sadece süper kullanıcı tarafından okunabilir.
+
+Gölgeli parolanın kullanılıp kullanılmadığına bakılmaksızın, pek çok sistem yöneticisi, şifrelenmiş parola alanında bir yıldız kullanır. Böylece bu kullanıcının bir parola kullanarak yetki almasını önler. (Yine de aşağıdaki \fBEK BİLGİ\fR bölümüne bakınız.
+
+Şayet yeni bir kullanıcı hesabı oluşturuyorsanız, ilk olarak parola alanına bir yıldız koyunuz, daha sonra \fBpasswd\fR(1)komutu ile parolayı belirleyin.
+
+Her satırda bir girdi yapılır ve her satır şu biçimdedir:
+.RS
+
+hesap:parola:UID:GID:GECOS:dizin:kabuk
+.RE
+
+Bu alanların açıklamaları şunlardır:
+
+
+.br
+.ns
+.TP
+\fIhesap\fR
+Kullanıcının sistemdeki adı. Büyük harf içermemelidir.
+
+.TP
+\fIparola\fR
+Şifreli kullanıcı parolası veya bir yıldız işareti.
+
+.TP
+\fIUID\fR
+Sayısal kullanıcı kimliği
+
+.TP
+\fIGID\fR
+Bu kullanıcının sayısal birincil grup kimliği
+
+.TP
+\fIGECOS\fR
+Bu alan seçime bağlıdır ve sadece bilgilendirme amacı
+ile kullanılır. Genellikle kullanıcının tam adı yazılır. GECOS´un anlamı General Electric Comprehensive Operating System´dir. General Electric´in büyük sistem bölümü Honeywell´e satıldığı zaman GCOS olarak yeniden adlandırılmıştır. Dennis Ritchie´nin bildirdiğine göre: "bazı zamanlar yazıcı çıktılarını veya toplu işleri GCOS makineye gönderiyoruz. Parola dosyasındaki gcos alanı $IDENTcard için bilgileri biriktirme alanı olarak kullanılır. Zariflik olsun diye oraya konmamıştır."
+
+.TP
+\fIdizin\fR
+Kullanıcının $HOME dizinidir.
+
+.TP
+\fIkabuk\fR
+Sisteme girişte kullanılacak kabuk (belirtilmemişse \fB/bin/sh\fR kullanılır). Şayet olmayan bir uygulama belirtilirse, kullanıcı \fBlogin\fR(1) ile sisteme bağlanamaz.
+
+.PP
+.SH EK BİLGİ
+
+Şayet bir kullanıcı grubu oluşturmak istiyorsanız, Grup numaraları aynı olmak zorundadır ve /etc/group dosyasında bir girdisi olmalıdır. Aksi taktirde bir grup oluşturulmaz.
+
+Şayet şifreli parola bir yıldız ile betimlenmişse, kullanıcı \fBlogin\fR(1)'i kullanarak bağlanamaz ama hala \fBrlogin\fR(1)'i kullanarak bağlanabilir, varolan bir süreci çalıştırabilir, \fBrsh\fR(1), \fBcron\fR(1), \fBat\fR(1) veya posta süzgeçleri üzerinden yenilerini başlatabilir. Kabuk alanını değiştirerek bir hesabı kapatmaya çalışmak da aynı sonucu verir ve ek olarak \fBsu\fR(1) komutunun kullanımına izin verir.
+
+.SH İLGİLİ DOSYALAR
+
+/etc/passwd
+.SH İLGİLİ BELGELER
+
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBsu\fR(1),
+\fBgroup\fR(5),
+\fBshadow\fR(5).
+
+.SH ÇEVİREN
+
+Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Ocak 2004
+
diff --git a/man/tr/man5/shadow.5 b/man/tr/man5/shadow.5
new file mode 100644
index 0000000..8c56f05
--- /dev/null
+++ b/man/tr/man5/shadow.5
@@ -0,0 +1,96 @@
+
+
+.\" Copyright 1989 - 1990, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+
+.TH shadow 5 "" "" ""
+.nh
+.SH İSİM
+shadow -
+şifreli parola dosyası
+
+.SH AÇIKLAMA
+
+\fBshadow\fR kullanıcı hesaplarının şifreli parola bilgilerini ve isteğe bağlı parola dönemsellik bilgilerini içerir.
+
+
+.IP
+
+Kullanıcı adı
+
+Şifreli parola
+
+1 Ocak 1970´den parolanın en son değiştiği güne kadar geçen gün sayısı
+
+Parolanın değişmesi gerekecek güne kadar olan sürenin gün sayısı
+
+Parolanın değişmesi gereken günden sonraki sürenin gün sayısı
+
+Parolanın zaman aşımından önce kullanıcının uyarılacağı gün sayısı
+
+Parolanın zaman aşımından hesabın kapatılacağı güne kadar geçecek sürenin gün sayısı
+
+1 ocak 1970´den hesabın kapatılacağı güne kadar geçen sürenin gün sayısı
+
+Bir yedek alan
+
+.PP
+Parola alanı mutlaka dolu olmalıdır. Şifreli parola alanı 64 karakterlik
+bir alfabeden (a´dan z´ye, A´dan Z´ye, 0´dan 9´a, "." Ve "/" den oluşan bir alfabe) seçilen 13 ila 24 karakterden oluşur. Bu dizgenin nasıl yorumlandığını görmek için \fBcrypt\fR(3)'e bakınız.
+
+Parolanın en son değiştiği günün tarihi, 1 Ocak 1970´den beri geçen gün sayısı olarak belirtilir. Geçerli gün sayısı geçmeden parolanın tekrar değiştirilmesi önlenebilir ve belirli bir gün sayısı geçtikten sonra parolanın değişmesi için kullanıcı zorlanabilir. Şayet gerekli en az gün sayısı en çok gün sayısından daha büyük ise, parola kullanıcı tarafından değiştirilemez.
+
+Şayet parola son kullanım tarihinden sonra belirtilen süre içinde değiştirilmez ise, kullanıcı hesabı kapatılır. Parola son kullanım tarihinden bağımsız olarak, bir kullanıcı hesabı belirtilen sürenin sonunda kapatılabilir.
+
+Bu bilgiler, /etc/passwd dosyasında da varsa, /etc/shadow dosyasındaki bilgiler geçerlidir.
+
+Parola güvenliği açısından bu dosya için normal kullanıcılara okuma izni kapalı olmalıdır.
+
+.SH İLGİLİ DOSYALAR
+
+/etc/passwd - kullanıcı hesap bilgileri
+.br
+/etc/shadow - şifreli kullanıcı parolaları
+
+.SH İLGİLİ BELGELER
+
+\fBchage\fR(1),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBsu\fR(1),
+\fBpasswd\fR(5),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBsulogin\fR(8).
+
+.SH YAZAN
+
+Julianne Frances Haugh <jockgrrl (at) ix.netcom.com> tarafından yazılmıştır.
+.SH ÇEVİREN
+
+Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Ocak 2004
+
diff --git a/man/tr/man8/groupadd.8 b/man/tr/man8/groupadd.8
new file mode 100644
index 0000000..1568ae2
--- /dev/null
+++ b/man/tr/man8/groupadd.8
@@ -0,0 +1,97 @@
+
+
+.\" Copyright 1991, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+
+.TH groupadd 8 "" "" ""
+.nh
+.SH İSİM
+groupadd -
+yeni bir grup oluşturur
+
+.SH KULLANIM
+
+.nf
+
+\fBgroupadd\fR [\fB-g \fR\fIgrup-kimliği\fR [\fB-o\fR]] [\fB-r\fR] [\fB-f\fR] \fIgrup\fR
+
+.fi
+
+
+.SH AÇIKLAMA
+
+\fBgroupadd\fR komutu, komut satırından tanımlanan bilgiler ve sistemdeki öntanımlı bilgiler eşliğinde yeni bir grup oluşturur. Yeni grup, gerekli sistem dosyalarına girilir. \fBgroupadd\fR komutuna uygulanacak seçenekler şunlardır:
+
+
+
+.br
+.ns
+.TP
+\fB-g \fR\fIgrup-kimliği\fR
+Grubu tanımlayan numara. \fB-o\fR seçeneği belirtilmediği sürece bu numara benzersiz olmalıdır. Negatif bir değer atanamaz. Öntanımlı olarak 500´den ve diğer bütün tanımlı grup numaralarından daha büyük olan en küçük sayı kullanılır. 0 ile 499 arasındaki değerler, geleneksel olarak, \fIsistem hesapları\fR için ayrılır.
+
+.TP
+\fB-r\fR
+Bu seçenek \fBgroupadd\fR komutuna bir \fIsistem hesabı\fR eklemesini söyler. \fB-g\fR seçeneği belirtilmediği sürece, 499´dan küçük olan olası bir grup numarası atanır. Bu seçenek Red Hat tarafından eklenmiştir.
+
+.TP
+\fB-f\fR
+Zorlama seçeneği. Bu seçenek, \fBgroupadd\fR komutunun eklemeye çalıştığı grup sistemde halihazırda var ise, bir hata vererek çıkmasını sağlar. Böyle bir durumda grup değişmeyecek veya tekrar eklenmeyecektir.
+
+Bu seçenek aynı zamanda, \fB-g\fR seçeneğinin çalışma şeklini düzenler. Benzersiz olmayan bir grup numarası istediğiniz ve \fB-o\fR seçeneğini vermediğiniz zaman, grup oluşturma işlemi, standart şekline (\fB-g\fR veya \fB-o\fR seçeneği tanımlanmadığı durumda bir grup ekler gibi) geri dönecektir. Bu seçenek Red Hat tarafından eklenmiştir.
+
+.PP
+
+.SH İLGİLİ DOSYALAR
+
+.nf
+
+\fB/etc/group\fR - grupların hesap bilgileri
+\fB/etc/gshadow\fR - güvenli grup bilgileri
+
+.fi
+
+
+.SH İLGİLİ BELGELER
+
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8).
+
+.SH YAZAN
+
+Julianne Frances Haugh <jockgrrl (at) ix.netcom.com> tarafından yazılmıştır.
+
+.SH ÇEVİREN
+
+Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Ocak 2004
+
diff --git a/man/tr/man8/groupdel.8 b/man/tr/man8/groupdel.8
new file mode 100644
index 0000000..eda77ac
--- /dev/null
+++ b/man/tr/man8/groupdel.8
@@ -0,0 +1,77 @@
+
+
+.\" Copyright 1991 - 1993, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+
+.TH groupdel 8 "" "" ""
+.nh
+.SH İSİM
+groupdel -
+bir grubu siler
+
+.SH KULLANIM
+\fBgroupdel \fR\fIgrup\fR
+
+.SH AÇIKLAMA
+
+\fBgroupdel\fR komutu, sistem hesap dosyalarını düzenler ve \fIgrup\fR olarak belirtilen gruba ait bütün girdileri siler. Silinmek istenen grup, sistemde varolmalıdır.
+
+Silme işleminden sonra, silinen grup numarasına ait herhangi bir dosya kalmadığından emin olmak için bütün dosya sistemlerini kontrol etmelisiniz.
+
+.SH YETERSİZLİKLER
+
+Varolan herhangi bir kullanıcının birincil grubunu silemeyebilirsiniz. Grubu silmeden önce bu kullanıcıyı sistemden kaldırmak zorundasınız.
+
+.SH İLGİLİ DOSYALAR
+
+.nf
+
+\fB/etc/group\fR - grupların hesap bilgileri
+\fB/etc/gshadow\fR - güvenli grup bilgileri
+
+.fi
+
+
+.SH İLGİLİ BELGELER
+
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8).
+
+.SH YAZAN
+
+Julianne Frances Haugh <jockgrrl (at) ix.netcom.com> tarafından yazılmıştır.
+
+.SH ÇEVİREN
+
+Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Ocak 2004
+
diff --git a/man/tr/man8/groupmod.8 b/man/tr/man8/groupmod.8
new file mode 100644
index 0000000..f55a05d
--- /dev/null
+++ b/man/tr/man8/groupmod.8
@@ -0,0 +1,91 @@
+
+
+.\" Copyright 1991, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+
+.TH groupmod 8 "" "" ""
+.nh
+.SH İSİM
+groupmod -
+bir grubun niteliklerini düzenler
+
+.SH KULLANIM
+
+.nf
+
+\fBgroupmod\fR [\fB-g \fR\fIgrup-kimliği\fR [\fB-o\fR]] [\fB-n \fR\fIgrup-ismi\fR] \fIgrup\fR
+
+.fi
+
+
+.SH AÇIKLAMA
+
+\fBgroupmod\fR komutu, komut satırından tanımlanan bir gruba ait bilgilerdeki değişiklikleri, sistem hesap dosyaları üzerinde değiştirmek için kullanılır. Bu komuta verilebilecek seçenekler şunlardır:
+
+
+
+.br
+.ns
+.TP
+\fB-g \fR\fIgrup-kimliği\fR
+Grubu tanımlayan numara. \fB-o\fR seçeneği belirtilmediği sürece bu numara benzersiz olmalıdır. Negatif bir değer atanamaz. 0 ile 99 arasında değerler, geleneksel olarak, sistem grupları için ayrılmıştır. Dosya grup numarası, eski grup numarası olan bütün dosyaların dosya grup numaraları el ile değiştirilmelidir.
+
+.TP
+\fB-n \fR\fIgrup-ismi\fR
+\fIgrup\fR ile belirtilen grubun alacağı yeni grup adını tanımlar.
+
+.PP
+
+.SH İLGİLİ DOSYALAR
+
+.nf
+
+\fB/etc/group\fR - grupların hesap bilgileri
+\fB/etc/gshadow\fR - güvenli grup bilgileri
+
+.fi
+
+
+.SH İLGİLİ BELGELER
+
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8).
+
+.SH YAZAN
+
+Julianne Frances Haugh <jockgrrl (at) ix.netcom.com> tarafından yazılmıştır.
+
+.SH ÇEVİREN
+
+Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Ocak 2004
+
diff --git a/man/tr/man8/useradd.8 b/man/tr/man8/useradd.8
new file mode 100644
index 0000000..379b2d3
--- /dev/null
+++ b/man/tr/man8/useradd.8
@@ -0,0 +1,195 @@
+
+
+.\" Copyright 1991 - 1994, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+
+.TH useradd 8 "" "" ""
+.nh
+.SH İSİM
+useradd -
+yeni bir kullanıcı oluşturur veya öntanımlı yeni kullanıcı bilgilerini günceller
+
+.SH KULLANIM
+
+.nf
+
+\fBuseradd\fR [\fB-c \fR\fIaçıklama\fR] [\fB-d \fR\fIevdizini\fR]
+ [\fB-e \fR\fIbitiş_tarihi\fR] [\fB-f \fR\fIaskı_süresi\fR]
+ [\fB-g \fR\fIbirincil_grup\fR] [\fB-G \fR\fIgrup\fR[,...]]
+ [\fB-m \fR[\fB-k \fR\fIiskelet_dizin\fR] | \fB-M\fR] [\fB-p \fR\fIparola\fR]
+ [\fB-s \fR\fIkabuk\fR] [\fB-u \fR\fIkull_kiml\fR [ \fB-o\fR]] [\fB-n\fR] [\fB-r\fR] \fIkullanıcı\fR
+
+.fi
+
+
+.nf
+
+\fBuseradd -D\fR [\fB-g \fR\fIöntanımlı_grup\fR] [\fB-b \fR\fIöntanımlı_ev\fR]
+ [\fB-f \fR\fIöntanımlı_askı_süresi\fR] [\fB-e \fR\fIöntanımlı_bitiş_tarihi\fR]
+ [\fB-s \fR\fIöntanımlı_kabuk\fR]
+
+.fi
+
+
+.SH AÇIKLAMA
+.SS Yeni Kullanıcıların Oluşturulması
+
+\fB-D\fR seçeneği belitilmeden çağrıldığında, \fBuseradd\fR komutu, komut satırında tanımlanan değerleri ve sistemdeki öntanımlı değerleri kullanarak yeni bir kullanıcı oluşturur. Komut satırında belirtilen seçeneklere bağlı olarak, gerekli sistem dosyalarına yeni kullanıcının bilgileri girilir; ev dizini oluşturulur; ilk dosyalar kopyalanır. Red Hat Linux´da kullanılan sürümünde, \fB-n\fR seçeneği belirtilmediği sürece, oluşturulan her kullanıcı için yeni bir grup oluşturulur. Kullanabileceğiniz seçenekler şunlardır:
+
+
+
+.br
+.ns
+.TP
+\fB-c \fR\fIaçıklama\fR
+Yeni kullanıcının parola dosyasındaki açıklama alanı.
+
+.TP
+\fB-d \fR\fIevdizini\fR
+Oluşturulan yeni kullanıcının sisteme girişte kullanacağı ev dizinini belirtir. Öntanımlı olarak, \fIkullanıcı\fR ismi \fIöntanımlı_ev\fR'e eklenecek ve sisteme giriş dizini ismi olarak kullanılacaktır.
+
+.TP
+\fB-e \fR\fIbitiş_tarihi\fR
+Kullanıcı hesabının son kullanma tarihini belirtir. Tarih YYYY-AA-GG (Y: yıl, A: ay, G: gün) şeklinde belirtilir.
+
+.TP
+\fB-f \fR\fIaskı_süresi\fR
+Kullanıcı parolasının son kullanma tarihinden itibaren, bu hesabın
+tamamen kapatılacağı tarihe kadar geçecek olan sürenin gün cinsinden değeri belirtilir. Bu değer 0 olarak belirtilirse, parolanın son kullanma tarihinde hesap kapatılır. -1 değeri verilirse, bu özellik iptal edilmiş olur. -1 değeri öntanımlı değerdir.
+
+.TP
+\fB-g \fR\fIbirincil_grup\fR
+Kullanıcının üyesi olacağı birincil grubun adı veya numarası belirtilir. Belirtilen grup, sistemde önceden tanımlanmış olmalıdır. Şayet grup numarası belirtilmiş ise, bu numara sistemde var olan bir gruba ait olmalıdır. Olmayan gruba ait bir isim veya numara kullanamazsınız. Öntanımlı değer 1 dir.
+
+.TP
+\fB-g \fR\fIgrup\fR[,...]
+Kullanıcının üyesi olacağı ilave gruplar belirtilir. Her grup, diğerinden virgül ile ayrılır, arada boşluk bırakılmaz. Burada tanımlanan gruplar, \fB-g\fR ile tanımlanan grubun kısıtlamalarına tabidirler. Öntanımlı olarak, kullanıcının sadece \fIbirincil_grup\fR üyesi olduğu kabul edilir.
+
+.TP
+\fB-m\fR
+Şayet sistemde kullanıcının ev dizini yok ise, yeni bir dizin oluşturulur. Eğer \fB-k\fR seçeneği belirtilmişse \fIiskelet_dizin\fR içindeki dosyalar ev dizinine kopyalanır. Aksi taktirde /etc/skel içindeki dosyalar kullanılır. \fIiskelet_dizin\fR veya /etc/skel içindeki bütün dizinler, ev dizininde de oluşturulur. \fB-k\fR seçeneği, sadece \fB-m\fR seçeneği ile birlikte kullanıldığında etkilidir. Öntanımlı olarak, dizin oluşturulmaz ve dosyalar kopyalanmaz.
+
+.TP
+\fB-M\fR
+/etc/login.defs içinde tanımlı bütün sistemi kapsayan ayarlarda ev dizininin yaratılması gerektiği belirtilmiş olsa bile, kullanıcı ev dizini oluşturulmaz.
+
+.TP
+\fB-n\fR
+Öntanımlı olarak, oluşturulan yeni kullanıcı ile aynı adlı yeni bir grup oluşturulur. Bu seçenek belirtilir ise, bu Red Hat Linux´a özel davranış kapatılmış olur.
+
+.TP
+\fB-r\fR
+Bu seçenek, yeni bir sistem hesabı açmak için kullanılır. Böylece, /etc/login.defs içinde belirtilen UID_MIN değerinden daha küçük kullanıcı kimlikli kullanıcı oluşturulabilir. /etc/login.defs içindeki öntanımlı değerler ne olursa olsun, \fBuseradd\fR komutu böyle bir kullanıcı için ev dizini oluşturmayacaktır. Oluşturulacak sistem hesabı için bir ev dizini istiyorsanız, \fB-m\fR seçeneğini kullanmak zorundasınız. Bu, Red Hat tarafından eklenmiş bir seçenektir.
+
+.TP
+\fB-p \fR\fIparola\fR
+\fBcrypt\fR(3) tarafından döndürülen şifrelenmiş paroladır. Öntanımlı olarak hesap kapalıdır.
+
+.TP
+\fB-s \fR\fIkabuk\fR
+Kullanıcının sisteme girişte kullanacağı kabuğun adıdır. Öntanımlı olarak bu değer boştur, böylece sistemin öntanımlı kabuğunun seçilmesi sağlanır.
+
+.TP
+\fB-u \fR\fIkull_kiml\fR
+Kullanıcı kimliğinin sayısal değeridir. Bu değer, \fB-o\fR seçeneği kullanılmadığı sürece, eşsiz olmalıdır. Değer mutlaka pozitif bir sayı olmalıdır. Öntanımlı olarak, diğer kullanıcıların numaralarından ve 99´dan büyük, en küçük numara kullanılır. 0 ile 99 arasındaki değerler sistem hesapları için ayrılmıştır.
+
+.PP
+.SS Öntanımlı Değerlerin Değiştirilmesi
+
+
+\fB-D\fR seçeneği ile birlikte kullanıldığı zaman, \fBuseradd\fR ya geçerli değerleri görüntüler, ya da öntanımlı değerleri, komut satırından belirtilenler ile günceller. Kullanabileceğiniz seçenekler şunlardır:
+
+
+.br
+.ns
+.TP
+\fB-b \fR\fIöntanımlı_ev\fR
+Yeni bir kullanıcının ev dizini için ilk dosyayolu önekini belirtir. \fIYeni bir hesap açarken \fB-d\fR seçeneği belirtilmemişse\fR, yeni kullanıcının adı \fIöntanımlı_ev\fR'in sonuna eklenir ve yeni dizin oluşturulur.
+
+.TP
+\fB-e \fR\fIöntanımlı_bitiş_tarihi\fR
+Kullanıcı hesabının kapatılacağı tarih.
+
+.TP
+\fB-f \fR\fIöntanımlı_askı_süresi\fR
+Kullanıcı parolasının son kullanma tarihinden itibaren, bu hesabın tamamen kapatılacağı tarihe kadar geçecek olan sürenin gün cinsinden değeri.
+
+.TP
+\fB-g \fR\fIöntanımlı_grup\fR
+Yeni bir kullanıcı için birincil grup adı veya grup kimliği. Belirtilen grup ismi sistemde mevcut olmalı ve sayısal grup kimliği için mevcut bir girdi bulunmalıdır.
+
+.TP
+\fB-s \fR\fIöntanımlı_kabuk\fR
+Yeni bir kullanıcının sisteme girişte kullanacağı kabuğun adı. Belirtilen kabuk gelecekte açılacak bütün yeni hesaplarda kullanılır.
+
+.PP
+
+Şayet herhangi bir seçenek belirtilmezse, \fBuseradd\fR geçerli öntanımlı değerleri görüntüleyecektir.
+
+.SH NOTLAR
+
+/etc/skel dizinindeki öntanımlı dosyaların yerleştirilmesi sistem yöneticilerinin sorumluluğundadır. \fBuseradd\fR komutunun bu sürümü, Red Hat tarafından, Red Hat kullanıcı/grup uyumluluğunu sağlayamak için düzenlenmiştir.
+
+.SH YETERSİZLİKLER
+
+NIS grubuna kullanıcı ekleyemezsiniz. Bu NIS sunucusu üzerinde yapılmalıdır.
+
+.SH İLGİLİ DOSYALAR
+
+.nf
+
+\fB/etc/passwd\fR - kullanıcı hesabı bilgileri
+\fB/etc/shadow\fR - güvenli kullanıcı hesabı bilgileri
+\fB/etc/group\fR - grup bilgileri
+\fB/etc/gshadow\fR - güvenli grup bilgileri
+\fB/etc/default/useradd\fR - öntanımlı bilgiler
+\fB/etc/login.defs\fR - sistem genelinde geçerli kurallar
+\fB/etc/skel\fR - öntanımlı dosyaları içeren dizin
+
+.fi
+
+
+.SH İLGİLİ BELGELER
+
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8).
+
+.SH YAZAN
+
+Julianne Frances Haugh <jockgrrl (at) ix.netcom.com> tarafından yazılmıştır.
+
+.SH ÇEVİREN
+
+Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Aralık 2003
+
diff --git a/man/tr/man8/userdel.8 b/man/tr/man8/userdel.8
new file mode 100644
index 0000000..b6f5919
--- /dev/null
+++ b/man/tr/man8/userdel.8
@@ -0,0 +1,94 @@
+
+
+.\" Copyright 1991 - 1994, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+
+.TH userdel 8 "" "" ""
+.nh
+.SH İSİM
+userdel -
+Bir kullanıcı hesabını ve onunla ilgili dosyaları siler
+
+.SH KULLANIM
+
+.nf
+
+\fBuserdel\fR [ \fB-r\fR ] \fIkullanıcı\fR
+
+.fi
+
+
+.SH AÇIKLAMA
+
+\fBuserdel\fR, userdel komutu, \fIkullanıcı\fR ile belirtilen hesabı silerek, sistem hesap dosyalarını değiştirir. Silinmeye çalışan \fIkullanıcı\fR hesabı, sistemde var olan bir hesap olmalıdır. Var olmayan bir hesabı silemezsiniz.
+
+
+
+.br
+.ns
+.TP
+\fB-r\fR
+Kullanıcının ev dizinindeki dosyalar, ev dizininin kendisi ve
+kullanıcının posta havuzu silinir. Diğer dosya sistemlerinde bulunan dosyalar silinmez. Bu nedenle bu dosyaları bulmak ve onları silmek sistem yöneticisinin görevidir.
+
+.PP
+
+.SH İLGİLİ DOSYALAR
+
+.nf
+
+/etc/passwd - kullanıcı hesap bilgileri
+/etc/shadow - güvenli kullanıcı hesap bilgileri
+/etc/group - grup bilgileri
+
+.fi
+
+
+.SH YETERSİZLİKLER
+
+Kullanıcı sisteme bağlı ise, \fBuserdel\fR komutu ile bu hesabı
+kaldıramazsınız. Silmeye çalıştığınız hesaba ait çalışan bütün süreçleri öldürmek zorundasınız. Bir NIS istemcisindeki NIS özniteliklerini kaldıramayabilirsiniz. Bu işlem, NIS sunucu üzerinde gerçekleştirilmelidir.
+
+.SH İLGİLİ BELGELER
+
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBusermod\fR(8).
+
+.SH YAZAN
+
+Julianne Frances Haugh <jockgrrl (at) ix.netcom.com> tarafından yazılmıştır.
+
+.SH ÇEVİREN
+
+Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Aralık 2003
+
diff --git a/man/tr/man8/usermod.8 b/man/tr/man8/usermod.8
new file mode 100644
index 0000000..6980829
--- /dev/null
+++ b/man/tr/man8/usermod.8
@@ -0,0 +1,142 @@
+
+
+.\" Copyright 1991 - 1994, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+
+.TH usermod 8 "" "" ""
+.nh
+.SH İSİM
+usermod -
+bir kullanıcı hesabını düzenler
+
+.SH KULLANIM
+
+.nf
+
+\fBusermod\fR [\fB-c \fR\fIaçıklama\fR] [\fB-d \fR\fIevdizini \fR[\fB-m\fR]]
+ [\fB-e \fR\fIbitiş_tarihi\fR] [\fB-f \fR\fIaskı_süresi\fR]
+ [\fB-g \fR\fIbirincil_grup\fR] [\fB-G \fR\fIgrup\fR[,...]]
+ [\fB-l \fR\fIkullanıcı-adı\fR] [\fB-p \fR\fIparola\fR]
+ [\fB-s \fR\fIkabuk\fR] [\fB-u \fR\fIkull_kiml\fR [\fB-o\fR]] [\fB-L\fR|\fB-U\fR] \fIkullanıcı\fR
+
+.fi
+
+
+.SH AÇIKLAMA
+
+\fBusermod\fR komutu, sistem hesap dosyalarını düzenlemeye, üzerlerinde değişiklik yapmaya yarar. Bu komuta uygulanabilecek seçenekler şunlardır:
+
+
+
+.br
+.ns
+.TP
+\fB-c \fR\fIaçıklama\fR
+Kullanıcı parola dosyasındaki açıklama alanına girilecek yeni değeri belirtir. Normalde \fBchfn\fR(1) komutu ile düzenlenir.
+
+.TP
+\fB-d \fR\fIevdizini\fR
+Kullanıcının sisteme girişte kullanacağı ev dizinini belirtir. Şayet \fB-m\fR seçeneği belirtilmiş ise, kullanıcının hali hazırda kullanmakta olduğu ev dizininin içeriği yeni oluşturulan ev dizinine aktarılır.
+
+.TP
+\fB-e \fR\fIbitiş_tarihi\fR
+Kullanıcı hesabının son kullanma tarihini belirtir. Tarih YYYY-AA-GG (Y: yıl, A: ay, G: gün) şeklinde belirtilir.
+
+.TP
+\fB-f \fR\fIaskı_süresi\fR
+Kullanıcı parolasının son kullanma tarihinden itibaren, bu hesabın
+tamamen kapatılacağı tarihe kadar geçecek olan sürenin gün cinsinden değeri belirtilir. Bu değer 0 olarak belirtilirse, parolanın son kullanma tarihinde hesap kapatılır. -1 değeri verilirse, bu özellik iptal edilmiş olur. -1 değeri öntanımlı değerdir.
+
+.TP
+\fB-g \fR\fIbirincil_grup\fR
+Kullanıcının üyesi olacağı birincil grubun adı veya numarası belirtilir. Belirtilen grup, sistemde önceden tanımlanmış olmalıdır. Öntanımlı değer 1 dir.
+
+.TP
+\fB-g \fR\fIgrup\fR[,...]
+Kullanıcının üyesi olacağı ilave gruplar belirtilir. Her grup, diğerinden virgül ile ayrılır, arada boşluk bırakılmaz. Burada tanımlanan gruplar, \fB-g\fR ile tanımlanan grubun kısıtlamalarına tabidirler. Şayet kullanıcı listelenen gruplar haricinde bir grubun da üyesi ise, kullanıcı bu gruptan çıkarılır.
+
+.TP
+\fB-l \fR\fIkullanıcı-adı\fR
+Sisteme girişte kullanıcının kullanacağı yeni isim. Sadece isim değişir, başka hiçbir şey değişmez. Kullanıcının ev dizininin ismi, yeni kullanıcı ismi ile bağlantı yapılmasını sağlamak için \fIkullanıcı-adı\fR ile tanımlanan yeni isme dönüşür.
+
+.TP
+\fB-p \fR\fIparola\fR
+\fBcrypt\fR(3) tarafından döndürülen şifrelenmiş paroladır.
+
+.TP
+\fB-s \fR\fIkabuk\fR
+Kullanıcının sisteme girişte kullanacağı kabuğun adıdır. Bu alan boş bırakılırsa, sistemin öntanımlı kabuğunun seçilmesi sağlanır.
+
+.TP
+\fB-u \fR\fIkull_kiml\fR
+Kullanıcı kimliğinin sayısal değeridir. Bu değer, \fB-o\fR seçeneği kullanılmadığı sürece, eşsiz olmalıdır. Değer mutlaka pozitif bir sayı olmalıdır. 0 ile 99 arsındaki değerler sistem hesapları için ayrılmıştır. Bu değer değiştirildiği zaman; kullanıcının sahip olduğu bütün dosyaların ve kullanıcı ev dizinini kök dizin olarak kabul ederek, kullanıcı ev dizininin altındaki hiyeraşik yapı içindeki bütün dosyaların kullanıcı numarası otomatik olarak değişir. Kullanıcı ev dizininin dışındaki dosyaların kullanıcı iyelik numarası kullanıcı tarafından değiştirilmelidir.
+
+.TP
+\fB-L\fR
+Kullanıcı parolasını kilitler. Parolayı devre dışı bırakmak için, şifreli parolanın önüne '!' işareti koyar. Bu seçeneği \fB-p\fR veya \fB-U\fR seçenekleri ile birlikte kullanamazsınız.
+
+.TP
+\fB-U\fR
+Devre dışı bırakılmış bir kullanıcı parolasını tekrar açar. Yaptığı iş şifreli parolanın önündeki '!' işaretini kaldırmaktır. Bu seçeneği \fB-p\fR veya \fB-L\fR seçenekleri ile birlikte kullanamazsınız.
+
+.PP
+.SH YETERSİZLİKLER
+
+\fBusermod\fR komutu ile, sisteme bağlı bir kullanıcının adını
+değiştiremezsiniz. Kullanıcının tanımlayıcı numarasını değiştirmeye kalktığınız zaman, kullanıcının herhangi bir süreç çalıştırmadığından emin olun. Herhangi bir \fBcrontab\fR dosyasının sahibini kendiniz değiştirmelisiniz. Çalışan herhangi bir işin sahibini de kendiniz değiştirmelisiniz. NIS sunuculardaki NIS ile alakalı bütün değişiklikleri kendiniz yapmalısınız
+
+.SH İLGİLİ DOSYALAR
+
+.nf
+
+\fB/etc/passwd\fR - kullanıcı hesabı bilgileri
+\fB/etc/shadow\fR - güvenli kullanıcı hesabı bilgileri
+\fB/etc/group\fR - grup bilgileri
+
+.fi
+
+
+.SH İLGİLİ BELGELER
+
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8).
+
+.SH YAZAN
+
+Julianne Frances Haugh <jockgrrl (at) ix.netcom.com> tarafından yazılmıştır.
+
+.SH ÇEVİREN
+
+Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Ocak 2004
+
diff --git a/man/useradd.8.xml b/man/useradd.8.xml
new file mode 100644
index 0000000..03612ce
--- /dev/null
+++ b/man/useradd.8.xml
@@ -0,0 +1,880 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ Copyright (c) 2007 - 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "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">
+<!ENTITY PASS_MIN_DAYS SYSTEM "login.defs.d/PASS_MIN_DAYS.xml">
+<!ENTITY PASS_WARN_AGE SYSTEM "login.defs.d/PASS_WARN_AGE.xml">
+<!ENTITY SUB_GID_COUNT SYSTEM "login.defs.d/SUB_GID_COUNT.xml">
+<!ENTITY SUB_UID_COUNT SYSTEM "login.defs.d/SUB_UID_COUNT.xml">
+<!ENTITY SYS_GID_MAX SYSTEM "login.defs.d/SYS_GID_MAX.xml">
+<!ENTITY SYS_UID_MAX SYSTEM "login.defs.d/SYS_UID_MAX.xml">
+<!ENTITY UID_MAX SYSTEM "login.defs.d/UID_MAX.xml">
+<!ENTITY UMASK SYSTEM "login.defs.d/UMASK.xml">
+<!ENTITY TCB_AUTH_GROUP SYSTEM "login.defs.d/TCB_AUTH_GROUP.xml">
+<!ENTITY TCB_SYMLINKS SYSTEM "login.defs.d/TCB_SYMLINKS.xml">
+<!ENTITY USE_TCB SYSTEM "login.defs.d/USE_TCB.xml">
+<!ENTITY USERGROUPS_ENAB SYSTEM "login.defs.d/USERGROUPS_ENAB.xml">
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='useradd.8'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1991</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>useradd</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>useradd</refname>
+ <refpurpose>create a new user or update default new user information</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>useradd</command>
+ <arg choice='opt'>
+ <replaceable>options</replaceable>
+ </arg>
+ <arg choice='plain'><replaceable>LOGIN</replaceable></arg>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>useradd</command>
+ <arg choice='plain'>-D </arg>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>useradd</command>
+ <arg choice='plain'>-D </arg>
+ <arg choice='opt'>
+ <replaceable>options</replaceable>
+ </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ When invoked without the <option>-D</option> option, the
+ <command>useradd</command> command creates a new user account using
+ the values specified on the command line plus the default values from
+ the system. Depending on command line options, the
+ <command>useradd</command> command
+ will update system files and may also create the new user's home
+ directory and copy initial files.
+ </para>
+ <para>
+ By default, a group will also be created for the new user (see
+ <option>-g</option>, <option>-N</option>, <option>-U</option>, and
+ <option>USERGROUPS_ENAB</option>).
+ </para>
+ </refsect1>
+
+ <refsect1 id='options'>
+ <title>OPTIONS</title>
+ <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>
+ </term>
+ <listitem>
+ <para>
+ The default base directory for the system if <option>-d</option>&nbsp;<replaceable>HOME_DIR</replaceable> is not specified.
+ <replaceable>BASE_DIR</replaceable> is
+ concatenated with the account name to define the home directory.
+ If the <option>-m</option> option is not used,
+ <replaceable>BASE_DIR</replaceable> must exist.
+ </para>
+ <para>
+ If this option is not specified, <command>useradd</command>
+ will use the base directory specified by the
+ <option>HOME</option> variable in
+ <filename>/etc/default/useradd</filename>, or
+ <filename>/home</filename> by default.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-c</option>, <option>--comment</option>&nbsp;<replaceable>COMMENT</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Any text string. It is generally a short description of the
+ login, and is currently used as the field for the user's full
+ name.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-d</option>, <option>--home-dir</option>&nbsp;<replaceable>HOME_DIR</replaceable>
+ </term>
+ <listitem>
+ <para>
+ The new user will be created using
+ <replaceable>HOME_DIR</replaceable> as the value for the user's
+ login directory. The default is to append the
+ <replaceable>LOGIN</replaceable> name to
+ <replaceable>BASE_DIR</replaceable> and use that as the login
+ directory name. The directory <replaceable>HOME_DIR</replaceable>
+ does not have to exist but will not be created if it is missing.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-D</option>, <option>--defaults</option>
+ </term>
+ <listitem>
+ <para>
+ See below, the subsection "Changing the default values".
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-e</option>, <option>--expiredate</option>&nbsp;<replaceable>EXPIRE_DATE</replaceable>
+ </term>
+ <listitem>
+ <para>
+ The date on which the user account will be disabled. The date is
+ specified in the format <emphasis remap='I'>YYYY-MM-DD</emphasis>.
+ </para>
+ <para>
+ If not specified, <command>useradd</command> will use the
+ default expiry date specified by the <option>EXPIRE</option>
+ variable in <filename>/etc/default/useradd</filename>, or
+ an empty string (no expiry) by default.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-f</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</replaceable>
+ </term>
+ <listitem>
+ <para>
+ The number of days after a password expires until the account is
+ permanently disabled. A value of 0 disables the account as soon
+ as the password has expired, and a value of -1 disables the
+ feature.
+ </para>
+ <para>
+ If not specified, <command>useradd</command> will use the
+ default inactivity period specified by the
+ <option>INACTIVE</option> variable in
+ <filename>/etc/default/useradd</filename>, or -1 by default.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GROUP</replaceable>
+ </term>
+ <listitem>
+ <para>
+ The group name or number of the user's initial login group. The
+ group name must exist. A group number must refer to an already
+ existing group.
+ </para>
+ <para>
+ If not specified, the behavior of <command>useradd</command>
+ will depend on the <option>USERGROUPS_ENAB</option> variable
+ in <filename>/etc/login.defs</filename>. If this variable is
+ set to <replaceable>yes</replaceable> (or
+ <option>-U/--user-group</option> is specified on the command
+ line), a group will be created for the user, with the same
+ name as her loginname. If the variable is set to
+ <replaceable>no</replaceable> (or
+ <option>-N/--no-user-group</option> is specified on the
+ command line), useradd will set the primary group of the new
+ user to the value specified by the <option>GROUP</option>
+ variable in <filename>/etc/default/useradd</filename>, or
+ 100 by default.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-G</option>, <option>--groups</option>&nbsp;<replaceable>GROUP1</replaceable>[<emphasis remap='I'>,GROUP2,...</emphasis>[<emphasis remap='I'>,GROUPN</emphasis>]]]
+ </term>
+ <listitem>
+ <para>
+ A list of supplementary groups which the user is also a member
+ of. Each group is separated from the next by a comma, with no
+ intervening whitespace. The groups are subject to the same
+ restrictions as the group given with the <option>-g</option>
+ option. The default is for the user to belong only to the
+ initial group.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-h</option>, <option>--help</option></term>
+ <listitem>
+ <para>Display help message and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-k</option>, <option>--skel</option>&nbsp;<replaceable>SKEL_DIR</replaceable>
+ </term>
+ <listitem>
+ <para>
+ The skeleton directory, which contains files and directories
+ to be copied in the user's home directory, when the home
+ directory is created by <command>useradd</command>.
+ </para>
+ <para>
+ This option is only valid if the <option>-m</option> (or
+ <option>--create-home</option>) option is specified.
+ </para>
+ <para>
+ If this option is not set, the skeleton directory is defined
+ by the <option>SKEL</option> variable in
+ <filename>/etc/default/useradd</filename> or, by default,
+ <filename>/etc/skel</filename>.
+ </para>
+ <para>
+ If possible, the ACLs and extended attributes are copied.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</replaceable>=<replaceable>VALUE</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Overrides <filename>/etc/login.defs</filename> defaults
+ (<option>UID_MIN</option>, <option>UID_MAX</option>,
+ <option>UMASK</option>, <option>PASS_MAX_DAYS</option>
+ and others).
+ <para>
+ </para>
+ Example: <option>-K</option>&nbsp;<replaceable>PASS_MAX_DAYS</replaceable>=<replaceable>-1</replaceable>
+ can be used when creating system account to turn off password
+ aging, even though system account has no password at all.
+ Multiple <option>-K</option> options can be specified, e.g.:
+ <option>-K</option>&nbsp;<replaceable>UID_MIN</replaceable>=<replaceable>100</replaceable>&nbsp;
+ <option>-K</option>&nbsp;<replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>
+ </para>
+ <!--para>
+ Note: <option>-K</option>&nbsp;<replaceable>UID_MIN</replaceable>=<replaceable>10</replaceable>,<replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>
+ doesn't work yet.
+ </para-->
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-l</option>, <option>--no-log-init</option></term>
+ <listitem>
+ <para>
+ Do not add the user to the lastlog and faillog databases.
+ </para>
+ <para>
+ By default, the user's entries in the lastlog and faillog
+ databases are reset to avoid reusing the entry from a previously
+ deleted user.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-m</option>, <option>--create-home</option>
+ </term>
+ <listitem>
+ <para>
+ Create the user's home directory if it does not exist.
+ The files and directories contained in the skeleton directory
+ (which can be defined with the <option>-k</option> option)
+ will be copied to the home directory.
+ </para>
+ <para>
+ By default, if this option is not specified and
+ <option>CREATE_HOME</option> is not enabled, no home
+ directories are created.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-M</option>, <option>--no-create-home</option>
+ </term>
+ <listitem>
+ <para>
+ Do no create the user's home directory, even if the system
+ wide setting from <filename>/etc/login.defs</filename>
+ (<option>CREATE_HOME</option>) is set to
+ <replaceable>yes</replaceable>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-N</option>, <option>--no-user-group</option>
+ </term>
+ <listitem>
+ <para>
+ Do not create a group with the same name as the user, but
+ add the user to the group specified by the <option>-g</option>
+ option or by the <option>GROUP</option> variable in
+ <filename>/etc/default/useradd</filename>.
+ </para>
+ <para>
+ The default behavior (if the <option>-g</option>,
+ <option>-N</option>, and <option>-U</option> options are not
+ specified) is defined by the <option>USERGROUPS_ENAB</option>
+ variable in <filename>/etc/login.defs</filename>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-o</option>, <option>--non-unique</option>
+ </term>
+ <listitem>
+ <para>Allow the creation of a user account with a duplicate (non-unique) UID.</para>
+ <para>
+ This option is only valid in combination with the
+ <option>-u</option> option.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-p</option>, <option>--password</option>&nbsp;<replaceable>PASSWORD</replaceable>
+ </term>
+ <listitem>
+ <para>
+ The encrypted password, as returned by <citerefentry>
+ <refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>. The default is to disable the password.
+ </para>
+ <para>
+ <emphasis role="bold">Note:</emphasis> This option is not
+ recommended because the password (or encrypted password) will
+ be visible by users listing the processes.
+ </para>
+ <para>
+ You should make sure the password respects the system's
+ password policy.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-r</option>, <option>--system</option>
+ </term>
+ <listitem>
+ <para>
+ Create a system account.
+ </para>
+ <para>
+ System users will be created with no aging information in
+ <filename>/etc/shadow</filename>, and their numeric
+ identifiers are chosen in the
+ <option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option>
+ range, defined in <filename>/etc/login.defs</filename>, instead of
+ <option>UID_MIN</option>-<option>UID_MAX</option> (and their
+ <option>GID</option> counterparts for the creation of groups).
+ </para>
+ <para>
+ Note that <command>useradd</command> will not create a home
+ directory for such a user, regardless of the default setting
+ in <filename>/etc/login.defs</filename>
+ (<option>CREATE_HOME</option>). You have to specify the
+ <option>-m</option> options if you want a home directory for a
+ system account to be created.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Apply changes in the <replaceable>CHROOT_DIR</replaceable>
+ directory and use the configuration files from the
+ <replaceable>CHROOT_DIR</replaceable> directory.
+ </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>
+ </term>
+ <listitem>
+ <para>
+ The name of the user's login shell. The default is to leave this
+ field blank, which causes the system to select the default login
+ shell specified by the <option>SHELL</option> variable in
+ <filename>/etc/default/useradd</filename>, or an empty string
+ by default.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</replaceable>
+ </term>
+ <listitem>
+ <para>
+ The numerical value of the user's ID. This value must be unique,
+ unless the <option>-o</option> option is used. The value must be
+ non-negative. The default is to use the smallest ID value
+ greater than or equal to <option>UID_MIN</option> and greater
+ than every other user.
+ </para>
+ <para>
+ See also the <option>-r</option> option and the
+ <option>UID_MAX</option> description.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-U</option>, <option>--user-group</option>
+ </term>
+ <listitem>
+ <para>
+ Create a group with the same name as the user, and
+ add the user to this group.
+ </para>
+ <para>
+ The default behavior (if the <option>-g</option>,
+ <option>-N</option>, and <option>-U</option> options are not
+ specified) is defined by the <option>USERGROUPS_ENAB</option>
+ variable in <filename>/etc/login.defs</filename>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-Z</option>, <option>--selinux-user</option>&nbsp;<replaceable>SEUSER</replaceable>
+ </term>
+ <listitem>
+ <para>
+ The SELinux user for the user's login. The default is to leave this
+ field blank, which causes the system to select the default SELinux
+ user.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <refsect2 id='changing_the_default_values'>
+ <title>Changing the default values</title>
+ <para>
+ When invoked with only the <option>-D</option> option,
+ <command>useradd</command> will display the current default values.
+ When invoked with <option>-D</option> plus other options,
+ <command>useradd</command> will update the default values for the
+ specified options. Valid default-changing options are:
+ </para>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term>
+ <option>-b</option>, <option>--base-dir</option>&nbsp;<replaceable>BASE_DIR</replaceable>
+ </term>
+ <listitem>
+ <para>
+ The path prefix for a new user's home directory. The
+ user's name will be affixed to the end of
+ <replaceable>BASE_DIR</replaceable> to form the new user's
+ home directory name, if the <option>-d</option> option is not used
+ when creating a new account.
+ </para>
+ <para>
+ This option sets the <option>HOME</option> variable in
+ <filename>/etc/default/useradd</filename>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-e</option>, <option>--expiredate</option>&nbsp;<replaceable>EXPIRE_DATE</replaceable>
+ </term>
+ <listitem>
+ <para>The date on which the user account is disabled.</para>
+ <para>
+ This option sets the <option>EXPIRE</option> variable in
+ <filename>/etc/default/useradd</filename>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-f</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</replaceable>
+ </term>
+ <listitem>
+ <para>
+ The number of days after a password has expired before the
+ account will be disabled.
+ </para>
+ <para>
+ This option sets the <option>INACTIVE</option> variable in
+ <filename>/etc/default/useradd</filename>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GROUP</replaceable>
+ </term>
+ <listitem>
+ <para>
+ The group name or ID for a new user's initial group (when
+ the <option>-N/--no-user-group</option> is used or when the
+ <option>USERGROUPS_ENAB</option> variable is set to
+ <replaceable>no</replaceable> in
+ <filename>/etc/login.defs</filename>). The named
+ group must exist, and a numerical group ID must have an
+ existing entry.
+ </para>
+ <para>
+ This option sets the <option>GROUP</option> variable in
+ <filename>/etc/default/useradd</filename>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SHELL</replaceable>
+ </term>
+ <listitem>
+ <para>
+ The name of a new user's login shell.
+ </para>
+ <para>
+ This option sets the <option>SHELL</option> variable in
+ <filename>/etc/default/useradd</filename>.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ </refsect2>
+ </refsect1>
+
+ <refsect1 id='notes'>
+ <title>NOTES</title>
+ <para>The system administrator is responsible for placing the default
+ user files in the <filename>/etc/skel/</filename> directory (or any
+ other skeleton directory specified in
+ <filename>/etc/default/useradd</filename> or on the command line).
+ </para>
+ </refsect1>
+
+ <refsect1 id='caveats'>
+ <title>CAVEATS</title>
+ <para>
+ You may not add a user to a NIS or LDAP group. This must be
+ performed on the corresponding server.
+ </para>
+
+ <para>
+ Similarly, if the username already exists in an external user
+ database such as NIS or LDAP, <command>useradd</command> will deny
+ the user account creation request.
+ </para>
+
+ <para>
+ Usernames must start with a lower case letter or an underscore,
+ followed by lower case letters, digits, underscores, or dashes.
+ They can end with a dollar sign.
+ In regular expression terms: [a-z_][a-z0-9_-]*[$]?
+ </para>
+ <para>
+ Usernames may only be up to 32 characters long.
+ </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>
+ &CREATE_HOME;
+ &GID_MAX; <!-- documents also 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; <!-- documents also SUB_GID_MAX and SUB_GID_MIN -->
+ &SUB_UID_COUNT; <!-- documents also SUB_UID_MAX and SUB_UID_MIN -->
+ &SYS_GID_MAX; <!-- documents also SYS_GID_MIN -->
+ &SYS_UID_MAX; <!-- documents also SYS_UID_MIN -->
+ &TCB_AUTH_GROUP;
+ &TCB_SYMLINKS;
+ &UID_MAX; <!-- documents also UID_MIN -->
+ &UMASK;
+ &USE_TCB;
+ &USERGROUPS_ENAB;
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/passwd</filename></term>
+ <listitem>
+ <para>User account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/shadow</filename></term>
+ <listitem>
+ <para>Secure user account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/group</filename></term>
+ <listitem>
+ <para>Group account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="gshadow">
+ <term><filename>/etc/gshadow</filename></term>
+ <listitem>
+ <para>Secure group account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/default/useradd</filename></term>
+ <listitem>
+ <para>Default values for account creation.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/skel/</filename></term>
+ <listitem>
+ <para>Directory containing default files.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="subids">
+ <term><filename>/etc/subgid</filename></term>
+ <listitem>
+ <para>Per user subordinate group IDs.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="subids">
+ <term><filename>/etc/subuid</filename></term>
+ <listitem>
+ <para>Per user subordinate user IDs.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/login.defs</filename></term>
+ <listitem>
+ <para>Shadow password suite configuration.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='exit_values'>
+ <title>EXIT VALUES</title>
+ <para>
+ The <command>useradd</command> command exits with the following values:
+ <variablelist>
+ <varlistentry>
+ <term><replaceable>0</replaceable></term>
+ <listitem>
+ <para>success</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>1</replaceable></term>
+ <listitem>
+ <para>can't update password file</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>2</replaceable></term>
+ <listitem>
+ <para>invalid command syntax</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>3</replaceable></term>
+ <listitem>
+ <para>invalid argument to option</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>4</replaceable></term>
+ <listitem>
+ <para>UID already in use (and no <option>-o</option>)</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>6</replaceable></term>
+ <listitem>
+ <para>specified group doesn't exist</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>9</replaceable></term>
+ <listitem>
+ <para>username already in use</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>10</replaceable></term>
+ <listitem>
+ <para>can't update group file</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>12</replaceable></term>
+ <listitem>
+ <para>can't create home directory</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>14</replaceable></term>
+ <listitem>
+ <para>can't update SELinux user mapping</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>newusers</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <phrase condition="subids">
+ <citerefentry>
+ <refentrytitle>subgid</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>subuid</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ </phrase>
+ <citerefentry>
+ <refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/userdel.8.xml b/man/userdel.8.xml
new file mode 100644
index 0000000..b086383
--- /dev/null
+++ b/man/userdel.8.xml
@@ -0,0 +1,366 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ Copyright (c) 2007 - 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!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 TCB_SYMLINKS SYSTEM "login.defs.d/TCB_SYMLINKS.xml">
+<!ENTITY USE_TCB SYSTEM "login.defs.d/USE_TCB.xml">
+<!ENTITY USERDEL_CMD SYSTEM "login.defs.d/USERDEL_CMD.xml">
+<!ENTITY USERGROUPS_ENAB SYSTEM "login.defs.d/USERGROUPS_ENAB.xml">
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='userdel.8'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1991</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>userdel</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>userdel</refname>
+ <refpurpose>delete a user account and related files</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>userdel</command>
+ <arg choice='opt'>options</arg>
+ <arg choice='plain'>
+ <replaceable>LOGIN</replaceable>
+ </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The <command>userdel</command> command modifies the system account
+ files, deleting all entries that refer to the user name <emphasis
+ remap='I'>LOGIN</emphasis>. The named user must exist.
+ </para>
+ </refsect1>
+
+ <refsect1 id='options'>
+ <title>OPTIONS</title>
+ <para>
+ The options which apply to the <command>userdel</command> command are:
+ </para>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term>
+ <option>-f</option>, <option>--force</option>
+ </term>
+ <listitem>
+ <para>
+ This option forces the removal of the user account, even if the
+ user is still
+ logged in. It also forces <command>userdel</command> to remove
+ the user's home directory and mail spool, even if another
+ user uses the same home directory or if the mail spool is not
+ owned by the specified user. If
+ <option>USERGROUPS_ENAB</option> is defined to <emphasis
+ remap='I'>yes</emphasis> in <filename>/etc/login.defs</filename>
+ and if a group exists with the same name as the deleted user,
+ then this group will be removed, even if it is still the primary
+ group of another user.
+ </para>
+ <para>
+ <emphasis>Note:</emphasis> This option is dangerous and may leave
+ your system in an inconsistent state.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-h</option>, <option>--help</option></term>
+ <listitem>
+ <para>Display help message and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-r</option>, <option>--remove</option>
+ </term>
+ <listitem>
+ <para>
+ Files in the user's home directory will be removed along with
+ the home directory itself and the user's mail spool. Files
+ located in other file systems will have to be searched for and
+ deleted manually.
+ </para>
+ <para>
+ The mail spool is defined by the <option>MAIL_DIR</option>
+ variable in the <filename>login.defs</filename> file.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Apply changes in the <replaceable>CHROOT_DIR</replaceable>
+ directory and use the configuration files from the
+ <replaceable>CHROOT_DIR</replaceable> directory.
+ </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>
+ </term>
+ <listitem>
+ <para>
+ Remove any SELinux user mapping for the user's login.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </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>
+ &MAIL_DIR; <!-- documents also MAIL_FILE -->
+ &MAX_MEMBERS_PER_GROUP;
+ &TCB_SYMLINKS;
+ &USE_TCB;
+ &USERDEL_CMD;
+ &USERGROUPS_ENAB;
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/group</filename></term>
+ <listitem>
+ <para>Group account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/login.defs</filename></term>
+ <listitem>
+ <para>Shadow password suite configuration.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/passwd</filename></term>
+ <listitem>
+ <para>User account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/shadow</filename></term>
+ <listitem>
+ <para>Secure user account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="subids">
+ <term><filename>/etc/subgid</filename></term>
+ <listitem>
+ <para>Per user subordinate group IDs.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="subids">
+ <term><filename>/etc/subuid</filename></term>
+ <listitem>
+ <para>Per user subordinate user IDs.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='exit_values'>
+ <title>EXIT VALUES</title>
+ <para>
+ The <command>userdel</command> command exits with the following values:
+ <variablelist>
+ <varlistentry>
+ <term><replaceable>0</replaceable></term>
+ <listitem>
+ <para>success</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>1</replaceable></term>
+ <listitem>
+ <para>can't update password file</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>2</replaceable></term>
+ <listitem>
+ <para>invalid command syntax</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>6</replaceable></term>
+ <listitem>
+ <para>specified user doesn't exist</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>8</replaceable></term>
+ <listitem>
+ <para>user currently logged in</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>10</replaceable></term>
+ <listitem>
+ <para>can't update group file</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>12</replaceable></term>
+ <listitem>
+ <para>can't remove home directory</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </refsect1>
+
+ <refsect1 id='caveats'>
+ <title>CAVEATS</title>
+ <para>
+ <command>userdel</command> will not allow you to remove an account if
+ there are running processes which belong to this account. In that
+ case, you may have to kill those processes or lock the user's
+ password or account and remove the account later. The
+ <option>-f</option> option can force the deletion of this account.
+ </para>
+ <para>
+ You should manually check all file systems to ensure that no files
+ remain owned by this user.
+ </para>
+ <para>You may not remove any NIS attributes on a NIS client. This must
+ be performed on the NIS server.
+ </para>
+ <para>If <option>USERGROUPS_ENAB</option> is defined to <emphasis
+ remap='I'>yes</emphasis> in <filename>/etc/login.defs</filename>,
+ <command>userdel</command> will delete the group with the same name
+ as the user. To avoid inconsistencies in the passwd and group
+ databases, <command>userdel</command> will check that this group is
+ not used as a primary group for another user, and will just warn
+ without deleting the group otherwise. The <option>-f</option> option
+ can force the deletion of this group.
+ </para>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para><citerefentry>
+ <refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>gpasswd</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <phrase condition="subids">
+ <citerefentry>
+ <refentrytitle>subgid</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>subuid</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ </phrase>
+ <citerefentry>
+ <refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/usermod.8.xml b/man/usermod.8.xml
new file mode 100644
index 0000000..a1d0efd
--- /dev/null
+++ b/man/usermod.8.xml
@@ -0,0 +1,635 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ Copyright (c) 2007 - 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.
+-->
+<!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">
+<!ENTITY SUB_UID_COUNT SYSTEM "login.defs.d/SUB_UID_COUNT.xml">
+<!ENTITY TCB_SYMLINKS SYSTEM "login.defs.d/TCB_SYMLINKS.xml">
+<!ENTITY USE_TCB SYSTEM "login.defs.d/USE_TCB.xml">
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='usermod.8'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Julianne Frances</firstname>
+ <surname>Haugh</surname>
+ <contrib>Creation, 1991</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>usermod</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>usermod</refname>
+ <refpurpose>modify a user account</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>usermod</command>
+ <arg choice='opt'>
+ <replaceable>options</replaceable>
+ </arg>
+ <arg choice='plain'><replaceable>LOGIN</replaceable></arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The <command>usermod</command> command modifies the system account
+ files to reflect the changes that are specified on the command line.
+ </para>
+ </refsect1>
+
+ <refsect1 id='options'>
+ <title>OPTIONS</title>
+ <para>
+ The options which apply to the <command>usermod</command> command
+ are:
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <option>-a</option>, <option>--append</option>
+ </term>
+ <listitem>
+ <para>
+ Add the user to the supplementary group(s). Use only with the
+ <option>-G</option> option.
+ </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>
+ </term>
+ <listitem>
+ <para>
+ The new value of the user's password file comment field. It is
+ normally modified using the <citerefentry>
+ <refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry> utility.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_DIR</replaceable>
+ </term>
+ <listitem>
+ <para>
+ The user's new login directory.
+ </para>
+ <para>
+ If the <option>-m</option>
+ option is given, the contents of the current home directory will
+ be moved to the new home directory, which is created if it does
+ not already exist.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-e</option>, <option>--expiredate</option>&nbsp;<replaceable>EXPIRE_DATE</replaceable>
+ </term>
+ <listitem>
+ <para>
+ The date on which the user account will be disabled. The date is
+ specified in the format <emphasis remap='I'>YYYY-MM-DD</emphasis>.
+ </para>
+ <para>
+ An empty <replaceable>EXPIRE_DATE</replaceable> argument will
+ disable the expiration of the account.
+ </para>
+ <para>
+ This option requires a <filename>/etc/shadow</filename> file.
+ A <filename>/etc/shadow</filename> entry will be created if
+ there were none.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-f</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</replaceable>
+ </term>
+ <listitem>
+ <para>
+ The number of days after a password expires until the account is
+ permanently disabled.
+ </para>
+ <para>
+ A value of 0 disables the account as soon
+ as the password has expired, and a value of -1 disables the
+ feature.
+ </para>
+ <para>
+ This option requires a <filename>/etc/shadow</filename> file.
+ A <filename>/etc/shadow</filename> entry will be created if
+ there were none.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GROUP</replaceable>
+ </term>
+ <listitem>
+ <para>
+ The group name or number of the user's new initial login group.
+ The group must exist.
+ </para>
+ <para>
+ Any file from the user's home directory owned by the previous
+ primary group of the user will be owned by this new group.
+ </para>
+ <para>
+ The group ownership of files outside of the user's home directory
+ must be fixed manually.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-G</option>, <option>--groups</option>&nbsp;<replaceable>GROUP1</replaceable>[<emphasis remap='I'>,GROUP2,...</emphasis>[<emphasis remap='I'>,GROUPN</emphasis>]]]
+ </term>
+ <listitem>
+ <para>
+ A list of supplementary groups which the user is also a member
+ of. Each group is separated from the next by a comma, with no
+ intervening whitespace. The groups are subject to the same
+ restrictions as the group given with the <option>-g</option>
+ option.
+ </para>
+ <para>
+ If the user is currently a member of a group which is
+ not listed, the user will be removed from the group. This
+ behaviour can be changed via the <option>-a</option> option, which
+ appends the user to the current supplementary group list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-l</option>, <option>--login</option>&nbsp;<replaceable>NEW_LOGIN</replaceable>
+ </term>
+ <listitem>
+ <para>
+ The name of the user will be changed from
+ <replaceable>LOGIN</replaceable> to
+ <replaceable>NEW_LOGIN</replaceable>. Nothing else is changed. In
+ particular, the user's home directory or mail spool should
+ probably be renamed manually to reflect the new login name.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-L</option>, <option>--lock</option>
+ </term>
+ <listitem>
+ <para>
+ Lock a user's password. This puts a '!' in front of the
+ encrypted password, effectively disabling the password. You
+ can't use this option with <option>-p</option> or
+ <option>-U</option>.
+ </para>
+ <para>
+ Note: if you wish to lock the account (not only access with a
+ password), you should also set the
+ <replaceable>EXPIRE_DATE</replaceable> to
+ <replaceable>1</replaceable>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-m</option>, <option>--move-home</option>
+ </term>
+ <listitem>
+ <para>
+ Move the content of the user's home directory to the new
+ location.
+ </para>
+ <para>
+ This option is only valid in combination with the
+ <option>-d</option> (or <option>--home</option>) option.
+ </para>
+ <para>
+ <command>usermod</command> will try to adapt the ownership of the
+ files and to copy the modes, ACL and extended attributes, but
+ manual changes might be needed afterwards.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-o</option>, <option>--non-unique</option>
+ </term>
+ <listitem>
+ <para>
+ When used with the <option>-u</option> option, this option
+ allows to change the user ID to a non-unique value.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-p</option>, <option>--password</option>&nbsp;<replaceable>PASSWORD</replaceable>
+ </term>
+ <listitem>
+ <para>
+ The encrypted password, as returned by <citerefentry>
+ <refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>.
+ </para>
+ <para>
+ <emphasis role="bold">Note:</emphasis> This option is not
+ recommended because the password (or encrypted password) will
+ be visible by users listing the processes.
+ </para>
+ <para condition="pam">
+ The password will be written in the local
+ <filename>/etc/passwd</filename> or
+ <filename>/etc/shadow</filename> file. This might differ from the
+ password database configured in your PAM configuration.
+ </para>
+ <para>
+ You should make sure the password respects the system's
+ password policy.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Apply changes in the <replaceable>CHROOT_DIR</replaceable>
+ directory and use the configuration files from the
+ <replaceable>CHROOT_DIR</replaceable> directory.
+ </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>
+ </term>
+ <listitem>
+ <para>
+ The name of the user's new login shell. Setting this field to
+ blank causes the system to select the default login shell.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</replaceable>
+ </term>
+ <listitem>
+ <para>
+ The new numerical value of the user's ID.
+ </para>
+ <para>
+ This value must be unique,
+ unless the <option>-o</option> option is used. The value must be
+ non-negative.
+ </para>
+ <para>
+ The user's mailbox, and any files which the user owns and which are
+ located in the user's home
+ directory will have the file user ID changed automatically.
+ </para>
+ <para>
+ The ownership of files outside of the user's home directory
+ must be fixed manually.
+ </para>
+ <para>
+ No checks will be performed with regard to the
+ <option>UID_MIN</option>, <option>UID_MAX</option>,
+ <option>SYS_UID_MIN</option>, or <option>SYS_UID_MAX</option>
+ from <filename>/etc/login.defs</filename>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-U</option>, <option>--unlock</option>
+ </term>
+ <listitem>
+ <para>
+ Unlock a user's password. This removes the '!' in front of the
+ encrypted password. You can't use this option with
+ <option>-p</option> or <option>-L</option>.
+ </para>
+ <para>
+ Note: if you wish to unlock the account (not only access with a
+ password), you should also set the
+ <replaceable>EXPIRE_DATE</replaceable> (for example to
+ <replaceable>99999</replaceable>, or to the
+ <option>EXPIRE</option> value from
+ <filename>/etc/default/useradd</filename>).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="subids">
+ <term>
+ <option>-v</option>, <option>--add-subuids</option>&nbsp;<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Add a range of subordinate uids to the user's account.
+ </para>
+ <para>
+ This option may be specified multiple times to add multiple ranges to a users account.
+ </para>
+ <para>
+ No checks will be performed with regard to
+ <option>SUB_UID_MIN</option>, <option>SUB_UID_MAX</option>, or
+ <option>SUB_UID_COUNT</option> from /etc/login.defs.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="subids">
+ <term>
+ <option>-V</option>, <option>--del-subuids</option>&nbsp;<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Remove a range of subordinate uids from the user's account.
+ </para>
+ <para>
+ This option may be specified multiple times to remove multiple ranges to a users account.
+ When both <option>--del-subuids</option> and <option>--add-subuids</option> are specified,
+ the removal of all subordinate uid ranges happens before any subordinate uid range is added.
+ </para>
+ <para>
+ No checks will be performed with regard to
+ <option>SUB_UID_MIN</option>, <option>SUB_UID_MAX</option>, or
+ <option>SUB_UID_COUNT</option> from /etc/login.defs.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="subids">
+ <term>
+ <option>-w</option>, <option>--add-subgids</option>&nbsp;<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Add a range of subordinate gids to the user's account.
+ </para>
+ <para>
+ This option may be specified multiple times to add multiple ranges to a users account.
+ </para>
+ <para>
+ No checks will be performed with regard to
+ <option>SUB_GID_MIN</option>, <option>SUB_GID_MAX</option>, or
+ <option>SUB_GID_COUNT</option> from /etc/login.defs.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="subids">
+ <term>
+ <option>-W</option>, <option>--del-subgids</option>&nbsp;<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Remove a range of subordinate gids from the user's account.
+ </para>
+ <para>
+ This option may be specified multiple times to remove multiple ranges to a users account.
+ When both <option>--del-subgids</option> and <option>--add-subgids</option> are specified,
+ the removal of all subordinate gid ranges happens before any subordinate gid range is added.
+ </para>
+ <para>
+ No checks will be performed with regard to
+ <option>SUB_GID_MIN</option>, <option>SUB_GID_MAX</option>, or
+ <option>SUB_GID_COUNT</option> from /etc/login.defs.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-Z</option>, <option>--selinux-user</option>&nbsp;<replaceable>SEUSER</replaceable>
+ </term>
+ <listitem>
+ <para>
+ The new SELinux user for the user's login.
+ </para>
+ <para>
+ A blank <replaceable>SEUSER</replaceable> will remove the
+ SELinux user mapping for user <replaceable>LOGIN</replaceable>
+ (if any).
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='caveats'>
+ <title>CAVEATS</title>
+ <para>
+ You must make certain that the named user is
+ not executing any processes when this command is being executed if the
+ user's numerical user ID, the user's name, or the user's home
+ directory is being changed. <command>usermod</command> checks this
+ on Linux. On other platforms it only uses utmp to check if the user is logged in.
+ </para>
+ <para>
+ You must change the owner of any <command>crontab</command> files or
+ <command>at</command> jobs manually.
+ </para>
+ <para>
+ You must make any changes involving NIS on the NIS server.
+ </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;
+ &MAIL_DIR; <!-- documents also MAIL_FILE -->
+ &MAX_MEMBERS_PER_GROUP;
+ &SUB_GID_COUNT; <!-- documents also SUB_GID_MAX and SUB_GID_MIN -->
+ &SUB_UID_COUNT; <!-- documents also SUB_UID_MAX and SUB_UID_MIN -->
+ &TCB_SYMLINKS;
+ &USE_TCB;
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/group</filename></term>
+ <listitem>
+ <para>Group account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="gshadow">
+ <term><filename>/etc/gshadow</filename></term>
+ <listitem>
+ <para>Secure group account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/login.defs</filename></term>
+ <listitem>
+ <para>Shadow password suite configuration.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/passwd</filename></term>
+ <listitem>
+ <para>User account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/shadow</filename></term>
+ <listitem>
+ <para>Secure user account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="subids">
+ <term><filename>/etc/subgid</filename></term>
+ <listitem>
+ <para>Per user subordinate group IDs.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="subids">
+ <term><filename>/etc/subuid</filename></term>
+ <listitem>
+ <para>Per user subordinate user IDs.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>gpasswd</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <phrase condition="subids">
+ <citerefentry>
+ <refentrytitle>subgid</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>subuid</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ </phrase>
+ <citerefentry>
+ <refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/vipw.8.xml b/man/vipw.8.xml
new file mode 100644
index 0000000..810ef59
--- /dev/null
+++ b/man/vipw.8.xml
@@ -0,0 +1,250 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 1997 , Marek Michałkiewicz
+ Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ Copyright (c) 2007 - 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.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY USE_TCB SYSTEM "login.defs.d/USE_TCB.xml">
+<!-- SHADOW-CONFIG-HERE -->
+]>
+<refentry id='vipw.8'>
+ <!-- $Id$ -->
+ <refentryinfo>
+ <author>
+ <firstname>Marek</firstname>
+ <surname>Michałkiewicz</surname>
+ <contrib>Creation, 1997</contrib>
+ </author>
+ <author>
+ <firstname>Thomas</firstname>
+ <surname>Kłoczko</surname>
+ <email>kloczek@pld.org.pl</email>
+ <contrib>shadow-utils maintainer, 2000 - 2007</contrib>
+ </author>
+ <author>
+ <firstname>Nicolas</firstname>
+ <surname>François</surname>
+ <email>nicolas.francois@centraliens.net</email>
+ <contrib>shadow-utils maintainer, 2007 - now</contrib>
+ </author>
+ </refentryinfo>
+ <refmeta>
+ <refentrytitle>vipw</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+ <refmiscinfo class="source">shadow-utils</refmiscinfo>
+ <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
+ </refmeta>
+ <refnamediv id='name'>
+ <refname>vipw</refname>
+ <refname>vigr</refname>
+ <refpurpose>
+ edit the password, group, shadow-password or shadow-group file
+ </refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv id='synopsis'>
+ <cmdsynopsis>
+ <command>vipw</command>
+ <arg choice='opt'>
+ <replaceable>options</replaceable>
+ </arg>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>vigr</command>
+ <arg choice='opt'>
+ <replaceable>options</replaceable>
+ </arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id='description'>
+ <title>DESCRIPTION</title>
+ <para>
+ The <command>vipw</command> and <command>vigr</command> commands edits
+ the files <filename>/etc/passwd</filename> and
+ <filename>/etc/group</filename>, respectively. With the
+ <option>-s</option> flag, they will edit the shadow versions of those
+ files, <filename>/etc/shadow</filename> and
+ <filename>/etc/gshadow</filename>, respectively. The programs will set
+ the appropriate locks to prevent file corruption. When looking for an
+ editor, the programs will first try the environment variable
+ <envar>$VISUAL</envar>, then the environment variable
+ <envar>$EDITOR</envar>, and finally the default editor,
+ <citerefentry><refentrytitle>vi</refentrytitle>
+ <manvolnum>1</manvolnum></citerefentry>.
+ </para>
+ </refsect1>
+
+ <refsect1 id='options'>
+ <title>OPTIONS</title>
+ <para>
+ The options which apply to the <command>vipw</command> and
+ <command>vigr</command> commands are:
+ </para>
+ <variablelist remap='IP'>
+ <varlistentry>
+ <term><option>-g</option>, <option>--group</option></term>
+ <listitem>
+ <para>Edit group database.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-h</option>, <option>--help</option></term>
+ <listitem>
+ <para>Display help message and exit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-p</option>, <option>--passwd</option></term>
+ <listitem>
+ <para>Edit passwd database.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-q</option>, <option>--quiet</option></term>
+ <listitem>
+ <para>Quiet mode.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <option>-R</option>, <option>--root</option>&nbsp;<replaceable>CHROOT_DIR</replaceable>
+ </term>
+ <listitem>
+ <para>
+ Apply changes in the <replaceable>CHROOT_DIR</replaceable>
+ directory and use the configuration files from the
+ <replaceable>CHROOT_DIR</replaceable> directory.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-s</option>, <option>--shadow</option></term>
+ <listitem>
+ <para>Edit shadow or gshadow database.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry condition="tcb">
+ <term><option>-u</option>, <option>--user</option></term>
+ <listitem>
+ <para>Indicates which user's tcb shadow file to edit.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='configuration' condition="tcb">
+ <title>CONFIGURATION</title>
+ <para>
+ The following configuration variables in
+ <filename>/etc/login.defs</filename> change the behavior of this
+ tool:
+ </para>
+ <variablelist>
+ &USE_TCB;
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='environment'>
+ <title>ENVIRONMENT</title>
+ <variablelist>
+ <varlistentry>
+ <term><option>VISUAL</option></term>
+ <listitem>
+ <para>Editor to be used.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>EDITOR</option></term>
+ <listitem>
+ <para>Editor to be used if <option>VISUAL</option> is not set.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='files'>
+ <title>FILES</title>
+ <variablelist>
+ <varlistentry>
+ <term><filename>/etc/group</filename></term>
+ <listitem>
+ <para>Group account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/gshadow</filename></term>
+ <listitem>
+ <para>Secure group account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/passwd</filename></term>
+ <listitem>
+ <para>User account information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><filename>/etc/shadow</filename></term>
+ <listitem>
+ <para>Secure user account information.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1 id='see_also'>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>group</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>
+ <citerefentry condition="tcb">
+ <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry condition="tcb">
+ <refentrytitle>tcb</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum>
+ </citerefentry>.
+ </para>
+ </refsect1>
+</refentry>
diff --git a/man/zh_CN/Makefile.am b/man/zh_CN/Makefile.am
new file mode 100644
index 0000000..e9d8f2c
--- /dev/null
+++ b/man/zh_CN/Makefile.am
@@ -0,0 +1,66 @@
+
+mandir = @mandir@/zh_CN
+
+man_MANS = \
+ man1/chage.1 \
+ man1/chfn.1 \
+ man8/chgpasswd.8 \
+ man8/chpasswd.8 \
+ man1/chsh.1 \
+ man1/expiry.1 \
+ man5/faillog.5 \
+ man8/faillog.8 \
+ man3/getspnam.3 \
+ man1/gpasswd.1 \
+ man8/groupadd.8 \
+ man8/groupdel.8 \
+ man8/groupmems.8 \
+ man8/groupmod.8 \
+ man1/groups.1 \
+ man8/grpck.8 \
+ man8/grpconv.8 \
+ man8/grpunconv.8 \
+ man5/gshadow.5 \
+ man8/lastlog.8 \
+ man1/login.1 \
+ man5/login.defs.5 \
+ man8/logoutd.8 \
+ man1/newgrp.1 \
+ man8/newusers.8 \
+ man8/nologin.8 \
+ man1/passwd.1 \
+ man5/passwd.5 \
+ man8/pwck.8 \
+ man8/pwconv.8 \
+ man8/pwunconv.8 \
+ man1/sg.1 \
+ man3/shadow.3 \
+ man5/shadow.5 \
+ man1/su.1 \
+ man5/suauth.5 \
+ man8/useradd.8 \
+ man8/userdel.8 \
+ man8/usermod.8 \
+ man8/vigr.8 \
+ man8/vipw.8
+
+man_nopam = \
+ man5/limits.5 \
+ man5/login.access.5 \
+ man5/porttime.5
+
+if !USE_PAM
+man_MANS += $(man_nopam)
+endif
+
+EXTRA_DIST = \
+ $(man_MANS) \
+ man1/id.1 \
+ man8/sulogin.8
+
+if USE_PAM
+EXTRA_DIST += $(man_nopam)
+endif
+
+include ../generate_translations.mak
+
diff --git a/man/zh_CN/Makefile.in b/man/zh_CN/Makefile.in
new file mode 100644
index 0000000..432a593
--- /dev/null
+++ b/man/zh_CN/Makefile.in
@@ -0,0 +1,773 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@USE_PAM_FALSE@am__append_1 = $(man_nopam)
+@USE_PAM_TRUE@am__append_2 = $(man_nopam)
+subdir = man/zh_CN
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" \
+ "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"
+man3dir = $(mandir)/man3
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/../generate_mans.mak \
+ $(srcdir)/../generate_translations.mak $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@/zh_CN
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = man1/chage.1 man1/chfn.1 man8/chgpasswd.8 man8/chpasswd.8 \
+ man1/chsh.1 man1/expiry.1 man5/faillog.5 man8/faillog.8 \
+ man3/getspnam.3 man1/gpasswd.1 man8/groupadd.8 man8/groupdel.8 \
+ man8/groupmems.8 man8/groupmod.8 man1/groups.1 man8/grpck.8 \
+ man8/grpconv.8 man8/grpunconv.8 man5/gshadow.5 man8/lastlog.8 \
+ man1/login.1 man5/login.defs.5 man8/logoutd.8 man1/newgrp.1 \
+ man8/newusers.8 man8/nologin.8 man1/passwd.1 man5/passwd.5 \
+ man8/pwck.8 man8/pwconv.8 man8/pwunconv.8 man1/sg.1 \
+ man3/shadow.3 man5/shadow.5 man1/su.1 man5/suauth.5 \
+ man8/useradd.8 man8/userdel.8 man8/usermod.8 man8/vigr.8 \
+ man8/vipw.8 $(am__append_1)
+man_nopam = \
+ man5/limits.5 \
+ man5/login.access.5 \
+ man5/porttime.5
+
+EXTRA_DIST = $(man_MANS) man1/id.1 man8/sulogin.8 $(am__append_2)
+LANG = $(notdir $(CURDIR))
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_FALSE@PAM_COND = no_pam
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_TRUE@PAM_COND = pam
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_FALSE@SHADOWGRP_COND = no_gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_TRUE@SHADOWGRP_COND = gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@WITH_TCB_FALSE@TCB_COND = no_tcb
+@ENABLE_REGENERATE_MAN_TRUE@@WITH_TCB_TRUE@TCB_COND = tcb
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_FALSE@SHA_CRYPT_COND = no_sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_TRUE@SHA_CRYPT_COND = sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@@ENABLE_SUBIDS_FALSE@SUBIDS_COND = no_subids
+@ENABLE_REGENERATE_MAN_TRUE@@ENABLE_SUBIDS_TRUE@SUBIDS_COND = subids
+CLEANFILES = messages.mo login.defs.d $(EXTRA_DIST) $(addsuffix .xml,$(EXTRA_DIST)) config.xml
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../generate_translations.mak $(srcdir)/../generate_mans.mak $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/zh_CN/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign man/zh_CN/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(srcdir)/../generate_translations.mak $(srcdir)/../generate_mans.mak $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+install-man3: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man3dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.3[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man3:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man3dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.3[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir)
+install-man5: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man5dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.5[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man5:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man5dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.5[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir)
+install-man8: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man8dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.8[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man8:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man8dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.8[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+@ENABLE_REGENERATE_MAN_FALSE@clean-local:
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1 install-man3 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man3 uninstall-man5 \
+ uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ clean-local cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-man3 install-man5 install-man8 \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags-am uninstall uninstall-am uninstall-man uninstall-man1 \
+ uninstall-man3 uninstall-man5 uninstall-man8
+
+.PRECIOUS: Makefile
+
+
+@ENABLE_REGENERATE_MAN_TRUE@config.xml: ../config.xml.in
+@ENABLE_REGENERATE_MAN_TRUE@ $(MAKE) -C .. config.xml
+@ENABLE_REGENERATE_MAN_TRUE@ cp ../config.xml $@
+
+@ENABLE_REGENERATE_MAN_TRUE@messages.mo: ../po/$(LANG).po
+@ENABLE_REGENERATE_MAN_TRUE@ msgfmt ../po/$(LANG).po -o messages.mo
+
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.d:
+@ENABLE_REGENERATE_MAN_TRUE@ ln -sf ../login.defs.d login.defs.d
+
+@ENABLE_REGENERATE_MAN_TRUE@%.xml: ../%.xml messages.mo login.defs.d
+@ENABLE_REGENERATE_MAN_TRUE@ if grep -q SHADOW-CONFIG-HERE $< ; then \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^<!-- SHADOW-CONFIG-HERE -->/<!ENTITY % config SYSTEM "config.xml">%config;/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ else \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^\(<!DOCTYPE .*docbookx.dtd"\)>/\1 [<!ENTITY % config SYSTEM "config.xml">%config;]>/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ fi
+@ENABLE_REGENERATE_MAN_TRUE@ itstool -d -l $(LANG) -m messages.mo -o . $@
+@ENABLE_REGENERATE_MAN_TRUE@ sed -i 's:\(^<refentry .*\)>:\1 lang="$(LANG)">:' $@
+
+@ENABLE_REGENERATE_MAN_TRUE@%.xml-config: %.xml
+@ENABLE_REGENERATE_MAN_TRUE@ if grep -q SHADOW-CONFIG-HERE $<; then \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^<!-- SHADOW-CONFIG-HERE -->/<!ENTITY % config SYSTEM "config.xml">%config;/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ else \
+@ENABLE_REGENERATE_MAN_TRUE@ sed -e 's/^\(<!DOCTYPE .*docbookx.dtd"\)>/\1 [<!ENTITY % config SYSTEM "config.xml">%config;]>/' $< > $@; \
+@ENABLE_REGENERATE_MAN_TRUE@ fi
+
+@ENABLE_REGENERATE_MAN_TRUE@man1/% man3/% man5/% man8/%: %.xml-config Makefile config.xml
+@ENABLE_REGENERATE_MAN_TRUE@ $(XSLTPROC) --stringparam profile.condition "$(PAM_COND);$(SHADOWGRP_COND);$(TCB_COND);$(SHA_CRYPT_COND);$(SUBIDS_COND)" \
+@ENABLE_REGENERATE_MAN_TRUE@ --param "man.authors.section.enabled" "0" \
+@ENABLE_REGENERATE_MAN_TRUE@ --stringparam "man.output.base.dir" "" \
+@ENABLE_REGENERATE_MAN_TRUE@ --param "man.output.in.separate.dir" "1" \
+@ENABLE_REGENERATE_MAN_TRUE@ -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/profile-docbook.xsl $<
+
+@ENABLE_REGENERATE_MAN_TRUE@clean-local:
+@ENABLE_REGENERATE_MAN_TRUE@ rm -rf man1 man3 man5 man8
+
+#$(man_MANS):
+# @echo you need to run configure with --enable-man to generate man pages
+
+@ENABLE_REGENERATE_MAN_TRUE@man8/grpconv.8 man8/grpunconv.8 man8/pwunconv.8: man8/pwconv.8
+
+@ENABLE_REGENERATE_MAN_TRUE@man3/getspnam.3: man3/shadow.3
+
+@ENABLE_REGENERATE_MAN_TRUE@man8/vigr.8: man8/vipw.8
+
+@ENABLE_REGENERATE_MAN_FALSE@$(man_MANS):
+@ENABLE_REGENERATE_MAN_FALSE@ @echo you need to run configure with --enable-man to generate man pages
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/zh_CN/man1/chage.1 b/man/zh_CN/man1/chage.1
new file mode 100644
index 0000000..0eae23d
--- /dev/null
+++ b/man/zh_CN/man1/chage.1
@@ -0,0 +1,189 @@
+'\" t
+.\" Title: chage
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 用户命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "CHAGE" "1" "2020-01-23" "shadow\-utils 4\&.8\&.1" "用户命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+chage \- 更改用户密码过期信息
+.SH "大纲"
+.HP \w'\fBchage\fR\ 'u
+\fBchage\fR [\fI选项\fR] \fI登录\fR
+.SH "描述"
+.PP
+The
+\fBchage\fR
+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\&.
+.SH "选项"
+.PP
+The options which apply to the
+\fBchage\fR
+command are:
+.PP
+\fB\-d\fR, \fB\-\-lastday\fR\ \&\fILAST_DAY\fR
+.RS 4
+Set the number of days since January 1st, 1970 when the password was last changed\&. The date may also be expressed in the format YYYY\-MM\-DD (or the format more commonly used in your area)\&.
+.RE
+.PP
+\fB\-E\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+Set the date or number of days since January 1, 1970 on which the user\*(Aqs account will no longer be accessible\&. The date may also be expressed in the format YYYY\-MM\-DD (or the format more commonly used in your area)\&. A user whose account is locked must contact the system administrator before being able to use the system again\&.
+.sp
+Passing the number
+\fI\-1\fR
+as the
+\fIEXPIRE_DATE\fR
+will remove an account expiration date\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+现实帮助信息并退出。
+.RE
+.PP
+\fB\-i\fR, \fB\-\-iso8601\fR
+.RS 4
+When printing dates, use YYYY\-MM\-DD format\&.
+.RE
+.PP
+\fB\-I\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+Set the number of days of inactivity after a password has expired before the account is locked\&. The
+\fIINACTIVE\fR
+option is the number of days of inactivity\&. A user whose account is locked must contact the system administrator before being able to use the system again\&.
+.sp
+Passing the number
+\fI\-1\fR
+as the
+\fIINACTIVE\fR
+will remove an account\*(Aqs inactivity\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-list\fR
+.RS 4
+现实账户年龄信息。
+.RE
+.PP
+\fB\-m\fR, \fB\-\-mindays\fR\ \&\fIMIN_DAYS\fR
+.RS 4
+Set the minimum number of days between password changes to
+\fIMIN_DAYS\fR\&. A value of zero for this field indicates that the user may change their password at any time\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-maxdays\fR\ \&\fIMAX_DAYS\fR
+.RS 4
+Set the maximum number of days during which a password is valid\&. When
+\fIMAX_DAYS\fR
+plus
+\fILAST_DAY\fR
+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
+\fB\-W\fR
+option, which provides the user with advance warning\&.
+.sp
+Passing the number
+\fI\-1\fR
+as
+\fIMAX_DAYS\fR
+will remove checking a password\*(Aqs validity\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-W\fR, \fB\-\-warndays\fR\ \&\fIWARN_DAYS\fR
+.RS 4
+Set the number of days of warning before a password change is required\&. The
+\fIWARN_DAYS\fR
+option is the number of days prior to the password expiring that a user will be warned their password is about to expire\&.
+.RE
+.PP
+If none of the options are selected,
+\fBchage\fR
+operates in an interactive fashion, prompting the user with the current values for all of the fields\&. Enter the new value to change the field, or leave the line blank to use the current value\&. The current value is displayed between a pair of
+\fI[ ]\fR
+marks\&.
+.SH "注意"
+.PP
+The
+\fBchage\fR
+program requires a shadow password file to be available\&.
+.PP
+The
+\fBchage\fR
+command is restricted to the root user, except for the
+\fB\-l\fR
+option, which may be used by an unprivileged user to determine when their password or account is due to expire\&.
+.SH "配置文件"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.SH "文件"
+.PP
+/etc/passwd
+.RS 4
+用户账户信息。
+.RE
+.PP
+/etc/shadow
+.RS 4
+安全用户账户信息。
+.RE
+.SH "退出值"
+.PP
+The
+\fBchage\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+permission denied
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI15\fR
+.RS 4
+can\*(Aqt find the shadow password file
+.RE
+.SH "参见"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/zh_CN/man1/chfn.1 b/man/zh_CN/man1/chfn.1
new file mode 100644
index 0000000..c0a2f2e
--- /dev/null
+++ b/man/zh_CN/man1/chfn.1
@@ -0,0 +1,163 @@
+'\" t
+.\" Title: chfn
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 用户命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "CHFN" "1" "2020-01-23" "shadow\-utils 4\&.8\&.1" "用户命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+chfn \- 更改真名和信息
+.SH "大纲"
+.HP \w'\fBchfn\fR\ 'u
+\fBchfn\fR [\fI选项\fR] [\fI登录\fR]
+.SH "描述"
+.PP
+The
+\fBchfn\fR
+command changes user fullname, office room number, office phone number, and home phone number information for a user\*(Aqs account\&. This information is typically printed by
+\fBfinger\fR(1)
+and similar programs\&. A normal user may only change the fields for her own account, subject to the restrictions in
+/etc/login\&.defs\&. (The default configuration is to prevent users from changing their fullname\&.) The superuser may change any field for any account\&. Additionally, only the superuser may use the
+\fB\-o\fR
+option to change the undefined portions of the GECOS field\&.
+.PP
+These fields must not contain any colons\&. Except for the
+\fIother\fR
+field, they should not contain any comma or equal sign\&. It is also recommended to avoid non\-US\-ASCII characters, but this is only enforced for the phone numbers\&. The
+\fIother\fR
+field is used to store accounting information used by other applications\&.
+.SH "选项"
+.PP
+The options which apply to the
+\fBchfn\fR
+command are:
+.PP
+\fB\-f\fR, \fB\-\-full\-name\fR\ \&\fIFULL_NAME\fR
+.RS 4
+更改用户的全名
+.RE
+.PP
+\fB\-h\fR, \fB\-\-home\-phone\fR\ \&\fIHOME_PHONE\fR
+.RS 4
+Change the user\*(Aqs home phone number\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-other\fR\ \&\fIOTHER\fR
+.RS 4
+Change the user\*(Aqs other GECOS information\&. This field is used to store accounting information used by other applications, and can be changed only by a superuser\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-room\fR\ \&\fIROOM_NUMBER\fR
+.RS 4
+Change the user\*(Aqs room number\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-help\fR
+.RS 4
+现实帮助信息并退出。
+.RE
+.PP
+\fB\-w\fR, \fB\-\-work\-phone\fR\ \&\fIWORK_PHONE\fR
+.RS 4
+Change the user\*(Aqs office phone number\&.
+.RE
+.PP
+If none of the options are selected,
+\fBchfn\fR
+operates in an interactive fashion, prompting the user with the current values for all of the fields\&. Enter the new value to change the field, or leave the line blank to use the current value\&. The current value is displayed between a pair of
+\fB[ ]\fR
+marks\&. Without options,
+\fBchfn\fR
+prompts for the current user account\&.
+.SH "配置文件"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHFN_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchfn\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCHFN_RESTRICT\fR (string)
+.RS 4
+This parameter specifies which values in the
+\fIgecos\fR
+field of the
+/etc/passwd
+file may be changed by regular users using the
+\fBchfn\fR
+program\&. It can be any combination of letters
+\fIf\fR,
+\fIr\fR,
+\fIw\fR,
+\fIh\fR, for Full name, Room number, Work phone, and Home phone, respectively\&. For backward compatibility,
+\fIyes\fR
+is equivalent to
+\fIrwh\fR
+and
+\fIno\fR
+is equivalent to
+\fIfrwh\fR\&. If not specified, only the superuser can make any changes\&. The most restrictive setting is better achieved by not installing
+\fBchfn\fR
+SUID\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+此字符串用于提示输入密码。默认是 "Password: ",或者翻译了的结果(汉语中翻译为了\(lq密码:\(rq)。如果设置了此变量,提示不会被翻译。
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.SH "文件"
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow 密码套件配置。
+.RE
+.PP
+/etc/passwd
+.RS 4
+用户账户信息。
+.RE
+.SH "参见"
+.PP
+\fBchsh\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/zh_CN/man1/chsh.1 b/man/zh_CN/man1/chsh.1
new file mode 100644
index 0000000..e9147a7
--- /dev/null
+++ b/man/zh_CN/man1/chsh.1
@@ -0,0 +1,121 @@
+'\" t
+.\" Title: chsh
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 用户命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "CHSH" "1" "2020-01-23" "shadow\-utils 4\&.8\&.1" "用户命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+chsh \- 更改登录 shell
+.SH "大纲"
+.HP \w'\fBchsh\fR\ 'u
+\fBchsh\fR [\fI选项\fR] [\fI登录\fR]
+.SH "描述"
+.PP
+The
+\fBchsh\fR
+command changes the user login shell\&. This determines the name of the user\*(Aqs initial login command\&. A normal user may only change the login shell for her own account; the superuser may change the login shell for any account\&.
+.SH "选项"
+.PP
+The options which apply to the
+\fBchsh\fR
+command are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+现实帮助信息并退出。
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+用户的新登录 shell 的名称。将此字段设置为空会让系统选择默认的登录 shell。
+.RE
+.PP
+If the
+\fB\-s\fR
+option is not selected,
+\fBchsh\fR
+operates in an interactive fashion, prompting the user with the current login shell\&. Enter the new value to change the shell, or leave the line blank to use the current one\&. The current shell is displayed between a pair of
+\fI[ ]\fR
+marks\&.
+.SH "注意"
+.PP
+The only restriction placed on the login shell is that the command name must be listed in
+/etc/shells, unless the invoker is the superuser, and then any value may be added\&. An account with a restricted login shell may not change her login shell\&. For this reason, placing
+/bin/rsh
+in
+/etc/shells
+is discouraged since accidentally changing to a restricted shell would prevent the user from ever changing her login shell back to its original value\&.
+.SH "配置文件"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHSH_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchsh\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+此字符串用于提示输入密码。默认是 "Password: ",或者翻译了的结果(汉语中翻译为了\(lq密码:\(rq)。如果设置了此变量,提示不会被翻译。
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.SH "文件"
+.PP
+/etc/passwd
+.RS 4
+用户账户信息。
+.RE
+.PP
+/etc/shells
+.RS 4
+可用的登录 shell 的列表。
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow 密码套件配置。
+.RE
+.SH "参见"
+.PP
+\fBchfn\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/zh_CN/man1/expiry.1 b/man/zh_CN/man1/expiry.1
new file mode 100644
index 0000000..afd3255
--- /dev/null
+++ b/man/zh_CN/man1/expiry.1
@@ -0,0 +1,74 @@
+'\" t
+.\" Title: expiry
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 用户命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "EXPIRY" "1" "2020-01-23" "shadow\-utils 4\&.8\&.1" "用户命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+expiry \- check and enforce password expiration policy
+.SH "大纲"
+.HP \w'\fBexpiry\fR\ 'u
+\fBexpiry\fR \fI选项\fR
+.SH "描述"
+.PP
+The
+\fBexpiry\fR
+command checks (\fB\-c\fR) the current password expiration and forces (\fB\-f\fR) changes when required\&. It is callable as a normal user command\&.
+.SH "选项"
+.PP
+The options which apply to the
+\fBexpiry\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-check\fR
+.RS 4
+Check the password expiration of the current user\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+如果用户密码过期,则强制用户修改密码。
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+现实帮助信息并退出。
+.RE
+.SH "文件"
+.PP
+/etc/passwd
+.RS 4
+用户账户信息。
+.RE
+.PP
+/etc/shadow
+.RS 4
+安全用户账户信息。
+.RE
+.SH "参见"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/zh_CN/man1/gpasswd.1 b/man/zh_CN/man1/gpasswd.1
new file mode 100644
index 0000000..3b4f351
--- /dev/null
+++ b/man/zh_CN/man1/gpasswd.1
@@ -0,0 +1,232 @@
+'\" t
+.\" Title: gpasswd
+.\" Author: Rafal Maszkowski
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 用户命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "GPASSWD" "1" "2020-01-23" "shadow\-utils 4\&.8\&.1" "用户命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+gpasswd \- administer /etc/group and /etc/gshadow
+.SH "大纲"
+.HP \w'\fBgpasswd\fR\ 'u
+\fBgpasswd\fR [\fI选项\fR] \fIgroup\fR
+.SH "描述"
+.PP
+The
+\fBgpasswd\fR
+command is used to administer
+/etc/group, and /etc/gshadow\&. Every group can have
+administrators,
+members and a password\&.
+.PP
+System administrators can use the
+\fB\-A\fR
+option to define group administrator(s) and the
+\fB\-M\fR
+option to define members\&. They have all rights of group administrators and members\&.
+.PP
+\fBgpasswd\fR
+called by
+a group administrator
+with a group name only prompts for the new password of the
+\fIgroup\fR\&.
+.PP
+If a password is set the members can still use
+\fBnewgrp\fR(1)
+without a password, and non\-members must supply the password\&.
+.SS "请注意组密码"
+.PP
+Group passwords are an inherent security problem since more than one person is permitted to know the password\&. However, groups are a useful tool for permitting co\-operation between different users\&.
+.SH "选项"
+.PP
+Except for the
+\fB\-A\fR
+and
+\fB\-M\fR
+options, the options cannot be combined\&.
+.PP
+The options which apply to the
+\fBgpasswd\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-add\fR\ \&\fIuser\fR
+.RS 4
+Add the
+\fIuser\fR
+to the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR\ \&\fIuser\fR
+.RS 4
+Remove the
+\fIuser\fR
+from the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+现实帮助信息并退出。
+.RE
+.PP
+\fB\-Q\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-remove\-password\fR
+.RS 4
+Remove the password from the named
+\fIgroup\fR\&. The group password will be empty\&. Only group members will be allowed to use
+\fBnewgrp\fR
+to join the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-restrict\fR
+.RS 4
+Restrict the access to the named
+\fIgroup\fR\&. The group password is set to "!"\&. Only group members with a password will be allowed to use
+\fBnewgrp\fR
+to join the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-A\fR, \fB\-\-administrators\fR\ \&\fIuser\fR,\&.\&.\&.
+.RS 4
+设置有管理权限的用户列表。
+.RE
+.PP
+\fB\-M\fR, \fB\-\-members\fR\ \&\fIuser\fR,\&.\&.\&.
+.RS 4
+设置组成员列表。
+.RE
+.SH "CAVEATS"
+.PP
+This tool only operates on the
+/etc/group
+and /etc/gshadow files\&.
+Thus you cannot change any NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.SH "配置文件"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+这定义了系统加密密码的默认算法(如果没有在命令行上指定算法)。
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+默认值是 0,意味着组中的成员数没有限制。
+.sp
+此功能(分割组)允许限制组文件中的行长度。这对于确保 NIS 组的行比长于 1024 字符。
+.sp
+如果要强制这个限制,可以使用 25。
+.sp
+注意:分割组可能不受所有工具的支持(甚至在 Shadow 工具集中)。您不应该使用这个变量,除非真的需要。
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+使用很多轮转,会让暴力破解更加困难。但是需要注意,认证用户时也会需要更多的 CPU 资源。
+.sp
+如果没有指定,libc 会选择默认的轮转数(5000)。
+.sp
+值必须在 1000 \- 999,999,999 之间。
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "文件"
+.PP
+/etc/group
+.RS 4
+组账户信息。
+.RE
+.PP
+/etc/gshadow
+.RS 4
+安全组账户信息。
+.RE
+.SH "参见"
+.PP
+\fBnewgrp\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBgrpck\fR(8),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/zh_CN/man1/groups.1 b/man/zh_CN/man1/groups.1
new file mode 100644
index 0000000..4b7982a
--- /dev/null
+++ b/man/zh_CN/man1/groups.1
@@ -0,0 +1,64 @@
+'\" t
+.\" Title: groups
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 用户命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "GROUPS" "1" "2020-01-23" "shadow\-utils 4\&.8\&.1" "用户命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+groups \- 现实当前组名
+.SH "大纲"
+.HP \w'\fBgroups\fR\ 'u
+\fBgroups\fR [\fI用户\fR]
+.SH "描述"
+.PP
+The
+\fBgroups\fR
+command displays the current group names or ID values\&. If the value does not have a corresponding entry in
+/etc/group, the value will be displayed as the numerical group value\&. The optional
+\fIuser\fR
+parameter will display the groups for the named
+\fIuser\fR\&.
+.SH "注意"
+.PP
+Systems which do not support concurrent group sets will have the information from
+/etc/group
+reported\&. The user must use
+\fBnewgrp\fR
+or
+\fBsg\fR
+to change his current real and effective group ID\&.
+.SH "文件"
+.PP
+/etc/group
+.RS 4
+组账户信息。
+.RE
+.SH "参见"
+.PP
+\fBnewgrp\fR(1),
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)\&.
diff --git a/man/zh_CN/man1/id.1 b/man/zh_CN/man1/id.1
new file mode 100644
index 0000000..637c0d5
--- /dev/null
+++ b/man/zh_CN/man1/id.1
@@ -0,0 +1,60 @@
+'\" t
+.\" Title: id
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 用户命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "ID" "1" "2020-01-23" "shadow\-utils 4\&.8\&.1" "用户命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+id \- display current user and group ID names
+.SH "大纲"
+.HP \w'\fBid\fR\ 'u
+\fBid\fR [\-a]
+.SH "描述"
+.PP
+The
+\fBid\fR
+command displays the current real and effective user and group ID names or values\&. If the value does not have a corresponding entry in
+/etc/passwd
+or
+/etc/group, the value will be displayed without the corresponding name\&. The optional
+\fB\-a\fR
+flag will display the group set on systems which support multiple concurrent group membership\&.
+.SH "文件"
+.PP
+/etc/group
+.RS 4
+组账户信息。
+.RE
+.PP
+/etc/passwd
+.RS 4
+用户账户信息。
+.RE
+.SH "参见"
+.PP
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)
diff --git a/man/zh_CN/man1/login.1 b/man/zh_CN/man1/login.1
new file mode 100644
index 0000000..7ecfde7
--- /dev/null
+++ b/man/zh_CN/man1/login.1
@@ -0,0 +1,487 @@
+'\" t
+.\" Title: login
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 用户命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "LOGIN" "1" "2020-01-23" "shadow\-utils 4\&.8\&.1" "用户命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+login \- 在系统上启动回话
+.SH "大纲"
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] [\-h\ \fIhost\fR] [\fI用户名\fR] [\fIENV=VAR\fR...]
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] [\-h\ \fIhost\fR] \-f \fI用户名\fR
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] \-r\ \fIhost\fR
+.SH "描述"
+.PP
+The
+\fBlogin\fR
+program is used to establish a new session with the system\&. It is normally invoked automatically by responding to the
+\fIlogin:\fR
+prompt on the user\*(Aqs terminal\&.
+\fBlogin\fR
+may be special to the shell and may not be invoked as a sub\-process\&. When called from a shell,
+\fBlogin\fR
+should be executed as
+\fBexec login\fR
+which will cause the user to exit from the current shell (and thus will prevent the new logged in user to return to the session of the caller)\&. Attempting to execute
+\fBlogin\fR
+from any shell but the login shell will produce an error message\&.
+.PP
+The user is then prompted for a password, where appropriate\&. Echoing is disabled to prevent revealing the password\&. Only a small number of password failures are permitted before
+\fBlogin\fR
+exits and the communications link is severed\&.
+.PP
+If password aging has been enabled for your account, you may be prompted for a new password before proceeding\&. You will be forced to provide your old password and the new password before continuing\&. Please refer to
+\fBpasswd\fR(1)
+for more information\&.
+.PP
+After a successful login, you will be informed of any system messages and the presence of mail\&. You may turn off the printing of the system message file,
+/etc/motd, by creating a zero\-length file
+\&.hushlogin
+in your login directory\&. The mail message will be one of "\fIYou have new mail\&.\fR", "\fIYou have mail\&.\fR", or "\fINo Mail\&.\fR" according to the condition of your mailbox\&.
+.PP
+Your user and group ID will be set according to their values in the
+/etc/passwd
+file\&. The value for
+\fB$HOME\fR,
+\fB$SHELL\fR,
+\fB$PATH\fR,
+\fB$LOGNAME\fR, and
+\fB$MAIL\fR
+are set according to the appropriate fields in the password entry\&. Ulimit, umask and nice values may also be set according to entries in the GECOS field\&.
+.PP
+On some installations, the environmental variable
+\fB$TERM\fR
+will be initialized to the terminal type on your tty line, as specified in
+/etc/ttytype\&.
+.PP
+命令解释器的初始化脚本也可能执行。请参考手册中相应的章节来获取关于此功能的更多信息。
+.PP
+在登录 shell 中以第一个字符是\(lq*\(rq标注的是子系统登录。给定的主目录将被用于用户实际登录的新文件系统的根。
+.PP
+The
+\fBlogin\fR
+program is NOT responsible for removing users from the utmp file\&. It is the responsibility of
+\fBgetty\fR(8)
+and
+\fBinit\fR(8)
+to clean up apparent ownership of a terminal session\&. If you use
+\fBlogin\fR
+from the shell prompt without
+\fBexec\fR, the user you use will continue to appear to be logged in even after you log out of the "subsession"\&.
+.SH "选项"
+.PP
+\fB\-f\fR
+.RS 4
+不要执行认证,用户已经预认证过。
+.sp
+Note: In that case,
+\fIusername\fR
+is mandatory\&.
+.RE
+.PP
+\fB\-h\fR
+.RS 4
+此登录的远程主机名。
+.RE
+.PP
+\fB\-p\fR
+.RS 4
+保留环境。
+.RE
+.PP
+\fB\-r\fR
+.RS 4
+为 rlogin (远程登录)执行 autologin (自动登录)协议。
+.RE
+.PP
+The
+\fB\-r\fR,
+\fB\-h\fR
+and
+\fB\-f\fR
+options are only used when
+\fBlogin\fR
+is invoked by root\&.
+.SH "CAVEATS"
+.PP
+This version of
+\fBlogin\fR
+has many compilation options, only some of which may be in use at any particular site\&.
+.PP
+文件的位置由系统配置决定。
+.PP
+The
+\fBlogin\fR
+program is NOT responsible for removing users from the utmp file\&. It is the responsibility of
+\fBgetty\fR(8)
+and
+\fBinit\fR(8)
+to clean up apparent ownership of a terminal session\&. If you use
+\fBlogin\fR
+from the shell prompt without
+\fBexec\fR, the user you use will continue to appear to be logged in even after you log out of the "subsession"\&.
+.PP
+As with any program,
+\fBlogin\fR\*(Aqs appearance can be faked\&. If non\-trusted users have physical access to a machine, an attacker could use this to obtain the password of the next person coming to sit in front of the machine\&. Under Linux, the SAK mechanism can be used by users to initiate a trusted path and prevent this kind of attack\&.
+.SH "配置文件"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+如果定义了,或者是包含设备名(没行一个)的文件的完整路径名,或者是\(lq:\(rq分隔的设备名列表。将只会在这写设备上允许 root 登录。
+.sp
+如果没有定义,可以在任何设备上使用 root。
+.sp
+指定的设备时不带 /dev/ 前缀。
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\*(Aqs supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+如果不能 cd 到主目录时,说明是否允许登录。默认是否。
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value is a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value is a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/sbin:/bin:/usr/sbin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+如果此文件存在,并且可读,将会从中读取登录环境。所有行都必须是 name=value 的格式。
+.sp
+以 # 开头的行将视为注释,并被忽略。
+.RE
+.PP
+\fBERASECHAR\fR (number)
+.RS 4
+Terminal ERASE character (\fI010\fR
+= backspace,
+\fI0177\fR
+= DEL)\&.
+.sp
+此值可以使用前缀\(lq0\(rq表示八进制,\(lq0x\(rq表示十六进制。
+.RE
+.PP
+\fBFAIL_DELAY\fR (number)
+.RS 4
+登录失败后,等待多少秒才再允许登录。
+.RE
+.PP
+\fBFAILLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of
+/var/log/faillog
+login failure info\&.
+.RE
+.PP
+\fBFAKE_SHELL\fR (string)
+.RS 4
+If set,
+\fBlogin\fR
+will execute this shell instead of the users\*(Aq shell specified in
+/etc/passwd\&.
+.RE
+.PP
+\fBFTMP_FILE\fR (string)
+.RS 4
+如果定义,登录失败会以 utmp 格式记录在此文件中。
+.RE
+.PP
+\fBHUSHLOGIN_FILE\fR (string)
+.RS 4
+If defined, this file can inhibit all the usual chatter during the login sequence\&. If a full pathname is specified, then hushed mode will be enabled if the user\*(Aqs name or shell are found in the file\&. If not a full pathname, then hushed mode will be enabled if the file exists in the user\*(Aqs home directory\&.
+.RE
+.PP
+\fBISSUE_FILE\fR (string)
+.RS 4
+如果定义了,此文件将在每次的登录提示之前现实。
+.RE
+.PP
+\fBKILLCHAR\fR (number)
+.RS 4
+Terminal KILL character (\fI025\fR
+= CTRL/U)\&.
+.sp
+此值可以使用前缀\(lq0\(rq表示八进制,\(lq0x\(rq表示十六进制。
+.RE
+.PP
+\fBLASTLOG_ENAB\fR (boolean)
+.RS 4
+允许记录和显示 /var/log/lastlog 登录时间信息。
+.RE
+.PP
+\fBLOGIN_RETRIES\fR (number)
+.RS 4
+密码错误时,重试的最大次数。
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+此字符串用于提示输入密码。默认是 "Password: ",或者翻译了的结果(汉语中翻译为了\(lq密码:\(rq)。如果设置了此变量,提示不会被翻译。
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.PP
+\fBLOGIN_TIMEOUT\fR (number)
+.RS 4
+最大登录时间(以秒为单位)。
+.RE
+.PP
+\fBLOG_OK_LOGINS\fR (boolean)
+.RS 4
+允许记录成功登录。
+.RE
+.PP
+\fBLOG_UNKFAIL_ENAB\fR (boolean)
+.RS 4
+在记录到登录失败时,允许记录未知用户名。
+.sp
+注意:如果用户不小心将密码输入到了登录名中,记录未知用户名可能是一个安全隐患。
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+启用登录时检查和现实邮箱状态。
+.sp
+如果 shell 的启动文件已经检查了邮件("mailx \-e" 或者其它同功能的工具),您应该禁用它。
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+邮箱目录。修改或删除用户账户时需要处理邮箱,如果没有指定,将使用编译时指定的默认值。
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+定义用户邮箱文件的位置(相对于主目录)。
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMOTD_FILE\fR (string)
+.RS 4
+If defined, ":" delimited list of "message of the day" files to be displayed upon login\&.
+.RE
+.PP
+\fBNOLOGINS_FILE\fR (string)
+.RS 4
+If defined, name of file whose presence will inhibit non\-root logins\&. The contents of this file should be a message indicating why logins are inhibited\&.
+.RE
+.PP
+\fBPORTTIME_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable checking of time restrictions specified in
+/etc/porttime\&.
+.RE
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of resource limits from
+/etc/limits
+and ulimit, umask, and niceness from the user\*(Aqs passwd gecos field\&.
+.RE
+.PP
+\fBTTYGROUP\fR (string), \fBTTYPERM\fR (string)
+.RS 4
+The terminal permissions: the login tty will be owned by the
+\fBTTYGROUP\fR
+group, and the permissions will be set to
+\fBTTYPERM\fR\&.
+.sp
+By default, the ownership of the terminal is set to the user\*(Aqs primary group and the permissions are set to
+\fI0600\fR\&.
+.sp
+\fBTTYGROUP\fR
+can be either the name of a group or a numeric group identifier\&.
+.sp
+If you have a
+\fBwrite\fR
+program which is "setgid" to a special group which owns the terminals, define TTYGROUP to the group number and TTYPERM to 0620\&. Otherwise leave TTYGROUP commented out and assign TTYPERM to either 622 or 600\&.
+.RE
+.PP
+\fBTTYTYPE_FILE\fR (string)
+.RS 4
+If defined, file which maps tty line to TERM environment parameter\&. Each line of the file is in a format something like "vt100 tty01"\&.
+.RE
+.PP
+\fBULIMIT\fR (number)
+.RS 4
+Default
+\fBulimit\fR
+value\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+文件模式创建掩码初始化为此值。如果没有指定,掩码初始化为 022。
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create if
+\fBHOME_MODE\fR
+is not set\&.
+.sp
+It is also used by
+\fBlogin\fR
+to define users\*(Aq initial umask\&. Note that this mask can be overridden by the user\*(Aqs GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+如果 uid 和 gid 相同,用户名和主用户名也相同,使非 root 组的组掩码位和属主位相同 (如:022 \-> 002, 077 \-> 007)。
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "文件"
+.PP
+/var/run/utmp
+.RS 4
+当前登录会话的列表。
+.RE
+.PP
+/var/log/wtmp
+.RS 4
+先前的登录会话列表。
+.RE
+.PP
+/etc/passwd
+.RS 4
+用户账户信息。
+.RE
+.PP
+/etc/shadow
+.RS 4
+安全用户账户信息。
+.RE
+.PP
+/etc/motd
+.RS 4
+System message of the day file\&.
+.RE
+.PP
+/etc/nologin
+.RS 4
+阻止非 root 用户登录。
+.RE
+.PP
+/etc/ttytype
+.RS 4
+终端类型列表。
+.RE
+.PP
+$HOME/\&.hushlogin
+.RS 4
+阻止现实系统信息。
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow 密码套件配置。
+.RE
+.SH "参见"
+.PP
+\fBmail\fR(1),
+\fBpasswd\fR(1),
+\fBsh\fR(1),
+\fBsu\fR(1),
+\fBlogin.defs\fR(5),
+\fBnologin\fR(5),
+\fBpasswd\fR(5),
+\fBsecuretty\fR(5),
+\fBgetty\fR(8)\&.
diff --git a/man/zh_CN/man1/newgrp.1 b/man/zh_CN/man1/newgrp.1
new file mode 100644
index 0000000..c696e0c
--- /dev/null
+++ b/man/zh_CN/man1/newgrp.1
@@ -0,0 +1,98 @@
+'\" t
+.\" Title: newgrp
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 用户命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "NEWGRP" "1" "2020-01-23" "shadow\-utils 4\&.8\&.1" "用户命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+newgrp \- 登录到一个新组
+.SH "大纲"
+.HP \w'\fBnewgrp\fR\ 'u
+\fBnewgrp\fR [\-] [\fIgroup\fR]
+.SH "描述"
+.PP
+The
+\fBnewgrp\fR
+command is used to change the current group ID during a login session\&. If the optional
+\fB\-\fR
+flag is given, the user\*(Aqs environment will be reinitialized as though the user had logged in, otherwise the current environment, including current working directory, remains unchanged\&.
+.PP
+\fBnewgrp\fR
+changes the current real group ID to the named group, or to the default group listed in
+/etc/passwd
+if no group name is given\&.
+\fBnewgrp\fR
+also tries to add the group to the user groupset\&. If not root, the user will be prompted for a password if she does not have a password (in
+/etc/shadow
+if this user has an entry in the shadowed password file, or in
+/etc/passwd
+otherwise) and the group does, or if the user is not listed as a member and the group has a password\&. The user will be denied access if the group password is empty and the user is not listed as a member\&.
+.PP
+If there is an entry for this group in
+/etc/gshadow, then the list of members and the password of this group will be taken from this file, otherwise, the entry in
+/etc/group
+is considered\&.
+.SH "配置文件"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "文件"
+.PP
+/etc/passwd
+.RS 4
+用户账户信息。
+.RE
+.PP
+/etc/shadow
+.RS 4
+安全用户账户信息。
+.RE
+.PP
+/etc/group
+.RS 4
+组账户信息。
+.RE
+.PP
+/etc/gshadow
+.RS 4
+安全组账户信息。
+.RE
+.SH "参见"
+.PP
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBsu\fR(1),
+\fBsg\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/zh_CN/man1/passwd.1 b/man/zh_CN/man1/passwd.1
new file mode 100644
index 0000000..5d934a1
--- /dev/null
+++ b/man/zh_CN/man1/passwd.1
@@ -0,0 +1,365 @@
+'\" t
+.\" Title: passwd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 用户命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "PASSWD" "1" "2020-01-23" "shadow\-utils 4\&.8\&.1" "用户命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+passwd \- 更改用户密码
+.SH "大纲"
+.HP \w'\fBpasswd\fR\ 'u
+\fBpasswd\fR [\fI选项\fR] [\fI登录\fR]
+.SH "描述"
+.PP
+The
+\fBpasswd\fR
+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\&.
+\fBpasswd\fR
+also changes the account or associated password validity period\&.
+.SS "密码更改"
+.PP
+如果有旧密码,首先提示用户输入旧密码。加密这个密码然后和存储的密码进行比较。用户只有一次机会输入正确密码。允许超级用户略过这个步骤,以便更改忘记了的密码。
+.PP
+After the password has been entered, password aging information is checked to see if the user is permitted to change the password at this time\&. If not,
+\fBpasswd\fR
+refuses to change the password and exits\&.
+.PP
+提示用户输入两次新密码。第二次和第一次进行比较,并且需要相同才能更改密码。
+.PP
+然后,测试密码的负责程度。一般来讲,密码应该包含 6 到 8 位字符,从下边的一个或多个集合中选择:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+小写字母
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+数字 0 到 9
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+标点符号
+.RE
+.PP
+Care must be taken not to include the system default erase or kill characters\&.
+\fBpasswd\fR
+will reject any password which is not suitably complex\&.
+.SS "关于用户密码的提示"
+.PP
+The security of a password depends upon the strength of the encryption algorithm and the size of the key space\&. The legacy
+\fIUNIX\fR
+System encryption method is based on the NBS DES algorithm\&. More recent methods are now recommended (see
+\fBENCRYPT_METHOD\fR)\&. The size of the key space depends upon the randomness of the password which is selected\&.
+.PP
+由于粗心地或处理选择密码,会危及密码的安全。由于这个原因,您不应该选择出现在词典中或者必须要写下来才能记住的密码。密码也不应该是一个名字、许可证号、生日或者街道号。所有这些可以用于猜测来损害系统安全。
+.PP
+You can find advice on how to choose a strong password on http://en\&.wikipedia\&.org/wiki/Password_strength
+.SH "选项"
+.PP
+The options which apply to the
+\fBpasswd\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+This option can be used only with
+\fB\-S\fR
+and causes show status for all users\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR
+.RS 4
+删除用户密码(让它为空)。这是禁用一个用户密码的快速方法。它将设置给出名称的账户。
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expire\fR
+.RS 4
+让一个账户的密码立即过期。这可以强制一个用户下次登录时更改密码。
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+现实帮助信息并退出。
+.RE
+.PP
+\fB\-i\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+This option is used to disable an account after the password has been expired for a number of days\&. After a user account has had an expired password for
+\fIINACTIVE\fR
+days, the user may no longer sign on to the account\&.
+.RE
+.PP
+\fB\-k\fR, \fB\-\-keep\-tokens\fR
+.RS 4
+表示密码更改只应该因为认证口令(密码)过期更改。用户希望保持他们尚未过期的口令。
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\fR
+.RS 4
+锁定指定账户的密码。此选项通过将密码更改为一个不可能与加密值匹配的值来禁用(它在密码开头添加一个\(lq!\(rq)。
+.sp
+Note that this does not disable the account\&. The user may still be able to login using another authentication token (e\&.g\&. an SSH key)\&. To disable the account, administrators should use
+\fBusermod \-\-expiredate 1\fR
+(this set the account\*(Aqs expire date to Jan 2, 1970)\&.
+.sp
+被锁定了密码的用户不允许更改密码。
+.RE
+.PP
+\fB\-n\fR, \fB\-\-mindays\fR\ \&\fIMIN_DAYS\fR
+.RS 4
+Set the minimum number of days between password changes to
+\fIMIN_DAYS\fR\&. A value of zero for this field indicates that the user may change their password at any time\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+安静模式。
+.RE
+.PP
+\fB\-r\fR, \fB\-\-repository\fR\ \&\fIREPOSITORY\fR
+.RS 4
+change password in
+\fIREPOSITORY\fR
+repository
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-S\fR, \fB\-\-status\fR
+.RS 4
+显示账户状态信息。状态信息包含 7 个字段。首个字段是用户的登录名,第二个字段表示用户账户是否已经锁定密码(L)、没有密码 (NP)或者密码可用(P),第三个字段给出最后一次更改密码的日期。接下来的四个字段分别是密码的最小年龄、最大年龄、警告期和禁用期。这些年龄以天为单位计算。
+.RE
+.PP
+\fB\-u\fR, \fB\-\-unlock\fR
+.RS 4
+Unlock the password of the named account\&. This option re\-enables a password by changing the password back to its previous value (to the value before using the
+\fB\-l\fR
+option)\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-warndays\fR\ \&\fIWARN_DAYS\fR
+.RS 4
+Set the number of days of warning before a password change is required\&. The
+\fIWARN_DAYS\fR
+option is the number of days prior to the password expiring that a user will be warned that their password is about to expire\&.
+.RE
+.PP
+\fB\-x\fR, \fB\-\-maxdays\fR\ \&\fIMAX_DAYS\fR
+.RS 4
+Set the maximum number of days a password remains valid\&. After
+\fIMAX_DAYS\fR, the password is required to be changed\&.
+.sp
+Passing the number
+\fI\-1\fR
+as
+\fIMAX_DAYS\fR
+will remove checking a password\*(Aqs validity\&.
+.RE
+.SH "CAVEATS"
+.PP
+密码复杂性检查在每台机器间不同。用户应该选择适合的尽量复杂的密码。
+.PP
+在启动了 NIS 的系统上,如果没有登录 NIS 服务器,用户或许不能更改自己的密码。
+.SH "配置文件"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+这定义了系统加密密码的默认算法(如果没有在命令行上指定算法)。
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBOBSCURE_CHECKS_ENAB\fR (boolean)
+.RS 4
+对密码更改启用附加检查。
+.RE
+.PP
+\fBPASS_ALWAYS_WARN\fR (boolean)
+.RS 4
+如果是 root,警告弱密码,但是仍然允许使用。
+.RE
+.PP
+\fBPASS_CHANGE_TRIES\fR (number)
+.RS 4
+可以尝试更改密码的最大次数(太容易)。
+.RE
+.PP
+\fBPASS_MAX_LEN\fR (number), \fBPASS_MIN_LEN\fR (number)
+.RS 4
+Number of significant characters in the password for crypt()\&.
+\fBPASS_MAX_LEN\fR
+is 8 by default\&. Don\*(Aqt change unless your crypt() is better\&. This is ignored if
+\fBMD5_CRYPT_ENAB\fR
+set to
+\fIyes\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+使用很多轮转,会让暴力破解更加困难。但是需要注意,认证用户时也会需要更多的 CPU 资源。
+.sp
+如果没有指定,libc 会选择默认的轮转数(5000)。
+.sp
+值必须在 1000 \- 999,999,999 之间。
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "文件"
+.PP
+/etc/passwd
+.RS 4
+用户账户信息。
+.RE
+.PP
+/etc/shadow
+.RS 4
+安全用户账户信息。
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow 密码套件配置。
+.RE
+.SH "退出值"
+.PP
+The
+\fBpasswd\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+permission denied
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid combination of options
+.RE
+.PP
+\fI3\fR
+.RS 4
+unexpected failure, nothing done
+.RE
+.PP
+\fI4\fR
+.RS 4
+unexpected failure,
+passwd
+file missing
+.RE
+.PP
+\fI5\fR
+.RS 4
+passwd
+file busy, try again
+.RE
+.PP
+\fI6\fR
+.RS 4
+invalid argument to option
+.RE
+.SH "参见"
+.PP
+\fBchpasswd\fR(8),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBlogin.defs\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/zh_CN/man1/sg.1 b/man/zh_CN/man1/sg.1
new file mode 100644
index 0000000..bda6a5e
--- /dev/null
+++ b/man/zh_CN/man1/sg.1
@@ -0,0 +1,97 @@
+'\" t
+.\" Title: sg
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 用户命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "SG" "1" "2020-01-23" "shadow\-utils 4\&.8\&.1" "用户命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+sg \- 以不同的组 ID 执行命令
+.SH "大纲"
+.HP \w'\fBsg\fR\ 'u
+\fBsg\fR [\-] [group\ [\-c\ ]\ command]
+.SH "描述"
+.PP
+The
+\fBsg\fR
+command works similar to
+\fBnewgrp\fR
+but accepts a command\&. The command will be executed with the
+/bin/sh
+shell\&. With most shells you may run
+\fBsg\fR
+from, you need to enclose multi\-word commands in quotes\&. Another difference between
+\fBnewgrp\fR
+and
+\fBsg\fR
+is that some shells treat
+\fBnewgrp\fR
+specially, replacing themselves with a new instance of a shell that
+\fBnewgrp\fR
+creates\&. This doesn\*(Aqt happen with
+\fBsg\fR, so upon exit from a
+\fBsg\fR
+command you are returned to your previous group ID\&.
+.SH "配置文件"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "文件"
+.PP
+/etc/passwd
+.RS 4
+用户账户信息。
+.RE
+.PP
+/etc/shadow
+.RS 4
+安全用户账户信息。
+.RE
+.PP
+/etc/group
+.RS 4
+组账户信息。
+.RE
+.PP
+/etc/gshadow
+.RS 4
+安全组账户信息。
+.RE
+.SH "参见"
+.PP
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBnewgrp\fR(1),
+\fBsu\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/zh_CN/man1/su.1 b/man/zh_CN/man1/su.1
new file mode 100644
index 0000000..c4d29c1
--- /dev/null
+++ b/man/zh_CN/man1/su.1
@@ -0,0 +1,448 @@
+'\" t
+.\" Title: su
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 用户命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "SU" "1" "2020-01-23" "shadow\-utils 4\&.8\&.1" "用户命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+su \- 更改用户 ID 或成为超级用户
+.SH "大纲"
+.HP \w'\fBsu\fR\ 'u
+\fBsu\fR [\fI选项\fR] [\fI\-\fR] [\fI用户名\fR\ [\ \fIargs\fR\ ]]
+.SH "描述"
+.PP
+The
+\fBsu\fR
+command is used to become another user during a login session\&. Invoked without a
+\fBusername\fR,
+\fBsu\fR
+defaults to becoming the superuser\&. The
+\fB\-\fR
+option may be used to provide an environment similar to what the user would expect had the user logged in directly\&. The
+\fB\-c\fR
+option may be used to treat the next argument as a command by most shells\&.
+.PP
+Options are recognized everywhere in the argument list\&. You can use the
+\fB\-\-\fR
+argument to stop option parsing\&. The
+\fB\-\fR
+option is special: it is also recognized after
+\fB\-\-\fR, but has to be placed before
+\fBusername\fR\&.
+.PP
+如果合适,将提示用户输入一个密码。输入无效的密码会产生一个错误消息。所有的尝试,无论成功还是失败,都会被记录,以检测对系统的滥用。
+.PP
+The current environment is passed to the new shell\&. The value of
+\fB$PATH\fR
+is reset to
+/bin:/usr/bin
+for normal users, or
+/sbin:/bin:/usr/sbin:/usr/bin
+for the superuser\&. This may be changed with the
+\fBENV_PATH\fR
+and
+\fBENV_SUPATH\fR
+definitions in
+/etc/login\&.defs\&.
+.PP
+在登录 shell 中以第一个字符是\(lq*\(rq标注的是子系统登录。给定的主目录将被用于用户实际登录的新文件系统的根。
+.SH "选项"
+.PP
+The options which apply to the
+\fBsu\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-command\fR\ \&\fICOMMAND\fR
+.RS 4
+Specify a command that will be invoked by the shell using its
+\fB\-c\fR\&.
+.sp
+The executed command will have no controlling terminal\&. This option cannot be used to execute interactive programs which need a controlling TTY\&.
+.RE
+.PP
+\fB\-\fR, \fB\-l\fR, \fB\-\-login\fR
+.RS 4
+提供一个类似于用户直接登录的环境,用户可能会希望这样。
+.sp
+When
+\fB\-\fR
+is used, it must be specified before any
+\fBusername\fR\&. For portability it is recommended to use it as last option, before any
+\fBusername\fR\&. The other forms (\fB\-l\fR
+and
+\fB\-\-login\fR) do not have this restriction\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+将使用的 shell。
+.sp
+The invoked shell is chosen from (highest priority first):
+.PP
+.RS 4
+The shell specified with \-\-shell\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-preserve\-environment\fR
+is used, the shell specified by the
+\fB$SHELL\fR
+environment variable\&.
+.RE
+.PP
+.RS 4
+The shell indicated in the
+/etc/passwd
+entry for the target user\&.
+.RE
+.PP
+.RS 4
+/bin/sh
+if a shell could not be found by any above method\&.
+.RE
+.sp
+If the target user has a restricted shell (i\&.e\&. the shell field of this user\*(Aqs entry in
+/etc/passwd
+is not listed in
+/etc/shells), then the
+\fB\-\-shell\fR
+option or the
+\fB$SHELL\fR
+environment variable won\*(Aqt be taken into account, unless
+\fBsu\fR
+is called by root\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-p\fR, \fB\-\-preserve\-environment\fR
+.RS 4
+Preserve the current environment, except for:
+.PP
+\fB$PATH\fR
+.RS 4
+reset according to the
+/etc/login\&.defs
+options
+\fBENV_PATH\fR
+or
+\fBENV_SUPATH\fR
+(see below);
+.RE
+.PP
+\fB$IFS\fR
+.RS 4
+reset to
+\(lq<space><tab><newline>\(rq, if it was set\&.
+.RE
+.sp
+If the target user has a restricted shell, this option has no effect (unless
+\fBsu\fR
+is called by root)\&.
+.sp
+Note that the default behavior for the environment is the following:
+.PP
+.RS 4
+The
+\fB$HOME\fR,
+\fB$SHELL\fR,
+\fB$USER\fR,
+\fB$LOGNAME\fR,
+\fB$PATH\fR, and
+\fB$IFS\fR
+environment variables are reset\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is not used, the environment is copied, except for the variables above\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, the
+\fB$TERM\fR,
+\fB$COLORTERM\fR,
+\fB$DISPLAY\fR, and
+\fB$XAUTHORITY\fR
+environment variables are copied if they were set\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, the
+\fB$TZ\fR,
+\fB$HZ\fR, and
+\fB$MAIL\fR
+environment variables are set according to the
+/etc/login\&.defs
+options
+\fBENV_TZ\fR,
+\fBENV_HZ\fR,
+\fBMAIL_DIR\fR, and
+\fBMAIL_FILE\fR
+(see below)\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, other environment variables might be set by the
+\fBENVIRON_FILE\fR
+file (see below)\&.
+.RE
+.sp
+.RE
+.SH "CAVEATS"
+.PP
+This version of
+\fBsu\fR
+has many compilation options, only some of which may be in use at any particular site\&.
+.SH "配置文件"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+如果定义了,或者是包含设备名(没行一个)的文件的完整路径名,或者是\(lq:\(rq分隔的设备名列表。将只会在这写设备上允许 root 登录。
+.sp
+如果没有定义,可以在任何设备上使用 root。
+.sp
+指定的设备时不带 /dev/ 前缀。
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\*(Aqs supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+如果不能 cd 到主目录时,说明是否允许登录。默认是否。
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+如果此文件存在,并且可读,将会从中读取登录环境。所有行都必须是 name=value 的格式。
+.sp
+以 # 开头的行将视为注释,并被忽略。
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value is a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value is a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/sbin:/bin:/usr/sbin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+此字符串用于提示输入密码。默认是 "Password: ",或者翻译了的结果(汉语中翻译为了\(lq密码:\(rq)。如果设置了此变量,提示不会被翻译。
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+启用登录时检查和现实邮箱状态。
+.sp
+如果 shell 的启动文件已经检查了邮件("mailx \-e" 或者其它同功能的工具),您应该禁用它。
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+邮箱目录。修改或删除用户账户时需要处理邮箱,如果没有指定,将使用编译时指定的默认值。
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+定义用户邮箱文件的位置(相对于主目录)。
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of resource limits from
+/etc/limits
+and ulimit, umask, and niceness from the user\*(Aqs passwd gecos field\&.
+.RE
+.PP
+\fBSULOG_FILE\fR (string)
+.RS 4
+如果定义了,所有的 su 活动都会记录到此文件。
+.RE
+.PP
+\fBSU_NAME\fR (string)
+.RS 4
+如果定义了,就是运行\(lqsu \-\(rq时显示的命令名称。例如,如果定义为\(lqsu\(rq,那么\(lqps\(rq会显示此命令为\(lq\-su\(rq。如果没有定义,\(lqps\(rq将会显示实际执行的 shell,例如类似于\(lq\-sh\(rq。
+.RE
+.PP
+\fBSU_WHEEL_ONLY\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the user must be listed as a member of the first gid 0 group in
+/etc/group
+(called
+\fIroot\fR
+on most Linux systems) to be able to
+\fBsu\fR
+to uid 0 accounts\&. If the group doesn\*(Aqt exist or is empty, no one will be able to
+\fBsu\fR
+to uid 0\&.
+.RE
+.PP
+\fBSYSLOG_SU_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsu\fR
+activity \- in addition to sulog file logging\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+如果 uid 和 gid 相同,用户名和主用户名也相同,使非 root 组的组掩码位和属主位相同 (如:022 \-> 002, 077 \-> 007)。
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "文件"
+.PP
+/etc/passwd
+.RS 4
+用户账户信息。
+.RE
+.PP
+/etc/shadow
+.RS 4
+安全用户账户信息。
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow 密码套件配置。
+.RE
+.SH "退出值"
+.PP
+On success,
+\fBsu\fR
+returns the exit value of the command it executed\&.
+.PP
+If this command was terminated by a signal,
+\fBsu\fR
+returns the number of this signal plus 128\&.
+.PP
+If su has to kill the command (because it was asked to terminate, and the command did not terminate in time),
+\fBsu\fR
+returns 255\&.
+.PP
+Some exit values from
+\fBsu\fR
+are independent from the executed command:
+.PP
+\fI0\fR
+.RS 4
+success (\fB\-\-help\fR
+only)
+.RE
+.PP
+\fI1\fR
+.RS 4
+System or authentication failure
+.RE
+.PP
+\fI126\fR
+.RS 4
+The requested command was not found
+.RE
+.PP
+\fI127\fR
+.RS 4
+The requested command could not be executed
+.RE
+.SH "参见"
+.PP
+\fBlogin\fR(1),
+\fBlogin.defs\fR(5),
+\fBsg\fR(1),
+\fBsh\fR(1)\&.
diff --git a/man/zh_CN/man3/getspnam.3 b/man/zh_CN/man3/getspnam.3
new file mode 100644
index 0000000..cd473da
--- /dev/null
+++ b/man/zh_CN/man3/getspnam.3
@@ -0,0 +1 @@
+.so man3/shadow.3
diff --git a/man/zh_CN/man3/shadow.3 b/man/zh_CN/man3/shadow.3
new file mode 100644
index 0000000..cb8e8b6
--- /dev/null
+++ b/man/zh_CN/man3/shadow.3
@@ -0,0 +1,245 @@
+'\" t
+.\" Title: shadow
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 库函数调用
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "SHADOW" "3" "2020-01-23" "shadow\-utils 4\&.8\&.1" "库函数调用"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+shadow, getspnam \- 加密密码文件工具函数
+.SH "SYNTAX"
+.PP
+\fI#include <shadow\&.h>\fR
+.PP
+\fIstruct spwd *getspent();\fR
+.PP
+\fIstruct spwd *getspnam(char\fR
+\fI*name\fR\fI);\fR
+.PP
+\fIvoid setspent();\fR
+.PP
+\fIvoid endspent();\fR
+.PP
+\fIstruct spwd *fgetspent(FILE\fR
+\fI*fp\fR\fI);\fR
+.PP
+\fIstruct spwd *sgetspent(char\fR
+\fI*cp\fR\fI);\fR
+.PP
+\fIint putspent(struct spwd\fR
+\fI*p,\fR
+\fIFILE\fR
+\fI*fp\fR\fI);\fR
+.PP
+\fIint lckpwdf();\fR
+.PP
+\fIint ulckpwdf();\fR
+.SH "描述"
+.PP
+\fIshadow\fR
+manipulates the contents of the shadow password file,
+/etc/shadow\&. The structure in the
+\fI#include\fR
+file is:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct spwd {
+ char *sp_namp; /* user login name */
+ char *sp_pwdp; /* encrypted password */
+ long int sp_lstchg; /* last password change */
+ long int sp_min; /* days until change allowed\&. */
+ long int sp_max; /* days before change required */
+ long int sp_warn; /* days warning for expiration */
+ long int sp_inact; /* days before account inactive */
+ long int sp_expire; /* date when account expires */
+ unsigned long int sp_flag; /* reserved for future use */
+}
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+每个字段的含义是:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_namp \- 指向以 null 结束的用户名的指针
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_pwdp \- 指向 null 结束的密码的指针
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_lstchg \- 最近更改密码的日期(日期计算方法是从1970年1月1日开始的天数)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_min \- days before which password may not be changed
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_max \- days after which password must be changed
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_warn \- days before password is to expire that user is warned of pending password expiration
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_inact \- days after password expires that account is considered inactive and disabled
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_expire \- days since Jan 1, 1970 when account will be disabled
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_flag \- reserved for future use
+.RE
+.SH "描述"
+.PP
+\fIgetspent\fR,
+\fIgetspname\fR,
+\fIfgetspent\fR, and
+\fIsgetspent\fR
+each return a pointer to a
+\fIstruct spwd\fR\&.
+\fIgetspent\fR
+returns the next entry from the file, and
+\fIfgetspent\fR
+returns the next entry from the given stream, which is assumed to be a file of the proper format\&.
+\fIsgetspent\fR
+returns a pointer to a
+\fIstruct spwd\fR
+using the provided string as input\&.
+\fIgetspnam\fR
+searches from the current position in the file for an entry matching
+\fIname\fR\&.
+.PP
+\fIsetspent\fR
+and
+\fIendspent\fR
+may be used to begin and end, respectively, access to the shadow password file\&.
+.PP
+The
+\fIlckpwdf\fR
+and
+\fIulckpwdf\fR
+routines should be used to insure exclusive access to the
+/etc/shadow
+file\&.
+\fIlckpwdf\fR
+attempts to acquire a lock using
+\fIpw_lock\fR
+for up to 15 seconds\&. It continues by attempting to acquire a second lock using
+\fIspw_lock\fR
+for the remainder of the initial 15 seconds\&. Should either attempt fail after a total of 15 seconds,
+\fIlckpwdf\fR
+returns \-1\&. When both locks are acquired 0 is returned\&.
+.SH "DIAGNOSTICS"
+.PP
+Routines return NULL if no more entries are available or if an error occurs during processing\&. Routines which have
+\fIint\fR
+as the return value return 0 for success and \-1 for failure\&.
+.SH "CAVEATS"
+.PP
+这些函数只能由超级用户使用,因为对影子密码文件的访问是受限的。
+.SH "文件"
+.PP
+/etc/shadow
+.RS 4
+安全用户账户信息。
+.RE
+.SH "参见"
+.PP
+\fBgetpwent\fR(3),
+\fBshadow\fR(5)\&.
diff --git a/man/zh_CN/man5/faillog.5 b/man/zh_CN/man5/faillog.5
new file mode 100644
index 0000000..39a982f
--- /dev/null
+++ b/man/zh_CN/man5/faillog.5
@@ -0,0 +1,64 @@
+'\" t
+.\" Title: faillog
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 文件格式和转化
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "FAILLOG" "5" "2020-01-23" "shadow\-utils 4\&.8\&.1" "文件格式和转化"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+faillog \- 登录失败的日志文件
+.SH "描述"
+.PP
+/var/log/faillog
+maintains a count of login failures and the limits for each account\&.
+.PP
+The file contains fixed length records, indexed by numerical UID\&. Each record contains the count of login failures since the last successful login; the maximum number of failures before the account is disabled; the line on which the last login failure occurred; the date of the last login failure; and the duration (in seconds) during which the account will be locked after a failure\&.
+.PP
+文件的结构是:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct faillog {
+ short fail_cnt;
+ short fail_max;
+ char fail_line[12];
+ time_t fail_time;
+ long fail_locktime;
+};
+.fi
+.if n \{\
+.RE
+.\}
+.SH "文件"
+.PP
+/var/log/faillog
+.RS 4
+Failure logging file\&.
+.RE
+.SH "参见"
+.PP
+\fBfaillog\fR(8)
diff --git a/man/zh_CN/man5/gshadow.5 b/man/zh_CN/man5/gshadow.5
new file mode 100644
index 0000000..ac163c8
--- /dev/null
+++ b/man/zh_CN/man5/gshadow.5
@@ -0,0 +1,101 @@
+'\" t
+.\" Title: gshadow
+.\" Author: Nicolas Fran\(,cois <nicolas.francois@centraliens.net>
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 文件格式和转化
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "GSHADOW" "5" "2020-01-23" "shadow\-utils 4\&.8\&.1" "文件格式和转化"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+gshadow \- 影子化了的组文件
+.SH "描述"
+.PP
+/etc/gshadow
+contains the shadowed information for group accounts\&.
+.PP
+如果没有维护好密码安全,此文件绝对不能让普通用户可读。
+.PP
+此文件的每行包含逗号分隔的如下字段:
+.PP
+\fB组名\fR
+.RS 4
+必须是系统中已经存在的有效组。
+.RE
+.PP
+\fB加密了的密码\fR
+.RS 4
+Refer to
+\fBcrypt\fR(3)
+for details on how this string is interpreted\&.
+.sp
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), for instance ! or *, users will not be able to use a unix password to access the group (but group members do not need the password)\&.
+.sp
+The password is used when a user who is not a member of the group wants to gain the permissions of this group (see
+\fBnewgrp\fR(1))\&.
+.sp
+此字段可以为空,此时,只有组成员可以获取组权限。
+.sp
+A password field which starts with an exclamation mark means that the password is locked\&. The remaining characters on the line represent the password field before the password was locked\&.
+.sp
+This password supersedes any password specified in
+/etc/group\&.
+.RE
+.PP
+\fB管理员\fR
+.RS 4
+必须是一个逗号分隔的用户名列表。
+.sp
+管理员可以更改组密码和成员。
+.sp
+管理员也有成员一样的权限(请看下边)。
+.RE
+.PP
+\fB成员\fR
+.RS 4
+必须是一个逗号分隔的用户名列表。
+.sp
+成员可以免密码访问组。
+.sp
+You should use the same list of users as in
+/etc/group\&.
+.RE
+.SH "文件"
+.PP
+/etc/group
+.RS 4
+组账户信息。
+.RE
+.PP
+/etc/gshadow
+.RS 4
+安全组账户信息。
+.RE
+.SH "参见"
+.PP
+\fBgpasswd\fR(5),
+\fBgroup\fR(5),
+\fBgrpck\fR(8),
+\fBgrpconv\fR(8),
+\fBnewgrp\fR(1)\&.
diff --git a/man/zh_CN/man5/limits.5 b/man/zh_CN/man5/limits.5
new file mode 100644
index 0000000..1328a85
--- /dev/null
+++ b/man/zh_CN/man5/limits.5
@@ -0,0 +1,274 @@
+'\" t
+.\" Title: limits
+.\" Author: Luca Berra
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 文件格式和转化
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "LIMITS" "5" "2020-01-23" "shadow\-utils 4\&.8\&.1" "文件格式和转化"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+limits \- 资源限制描述
+.SH "描述"
+.PP
+The
+\fIlimits\fR
+file (/etc/limits
+by default or LIMITS_FILE defined
+config\&.h) describes the resource limits you wish to impose\&. It should be owned by root and readable by root account only\&.
+.PP
+By default no quota is imposed on \*(Aqroot\*(Aq\&. In fact, there is no way to impose limits via this procedure to root\-equiv accounts (accounts with UID 0)\&.
+.PP
+每行以如下格式对一个用户描述限制:
+.PP
+\fIuser LIMITS_STRING\fR
+.PP
+或如下格式:
+.PP
+\fI@group LIMITS_STRING\fR
+.PP
+The
+\fILIMITS_STRING\fR
+is a string of a concatenated list of resource limits\&. Each limit consists of a letter identifier followed by a numerical limit\&.
+.PP
+可用的指示符有:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+A:最大地址空间 (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+C:最大转储文件大小 (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+D:最大数据大小 (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+F: maximum file size (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+K: file creation mask, set by
+\fBumask\fR(2)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+I:最高 nice 级别,(0\&.\&.\&.39 对应 20\&.\&.\&.\-19)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+L:此用户的最大登录数
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+M: max locked\-in\-memory address space (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+N:最大的文件打开数
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+O:最大实时优先级
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+P: process priority, set by
+\fBsetpriority\fR(2)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+R: max resident set size (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+S:最大栈尺寸 (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+T:最大 CPU 时间 (分钟)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+U:最大处理器数目
+.RE
+.PP
+For example,
+\fIL2D2048N5\fR
+is a valid
+\fILIMITS_STRING\fR\&. For reading convenience, the following entries are equivalent:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ username L2D2048N5
+ username L2 D2048 N5
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Be aware that after
+\fIusername\fR
+the rest of the line is considered a limit string, thus comments are not allowed\&. An invalid limits string will be rejected (not considered) by the
+\fBlogin\fR
+program\&.
+.PP
+The default entry is denoted by username "\fI*\fR"\&. If you have multiple
+\fIdefault\fR
+entries in your
+\fILIMITS_FILE\fR, then the last one will be used as the default entry\&.
+.PP
+The limits specified in the form "\fI@group\fR" apply to the members of the specified
+\fIgroup\fR\&.
+.PP
+If more than one line with limits for a user exist, only the first line for this user will be considered\&.
+.PP
+If no lines are specified for a user, the last
+\fI@group\fR
+line matching a group whose the user is a member of will be considered, or the last line with default limits if no groups contain the user\&.
+.PP
+To completely disable limits for a user, a single dash "\fI\-\fR" will do\&.
+.PP
+To disable a limit for a user, a single dash "\fI\-\fR" can be used instead of the numerical value for this limit\&.
+.PP
+Also, please note that all limit settings are set PER LOGIN\&. They are not global, nor are they permanent\&. Perhaps global limits will come, but for now this will have to do ;)
+.SH "文件"
+.PP
+/etc/limits
+.RS 4
+.RE
+.SH "参见"
+.PP
+\fBlogin\fR(1),
+\fBsetpriority\fR(2),
+\fBsetrlimit\fR(2)\&.
diff --git a/man/zh_CN/man5/login.access.5 b/man/zh_CN/man5/login.access.5
new file mode 100644
index 0000000..1e91af4
--- /dev/null
+++ b/man/zh_CN/man5/login.access.5
@@ -0,0 +1,67 @@
+'\" t
+.\" Title: login.access
+.\" Author: Marek Micha\(/lkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 文件格式和转化
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "LOGIN\&.ACCESS" "5" "2020-01-23" "shadow\-utils 4\&.8\&.1" "文件格式和转化"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+login.access \- 登录访问控制表
+.SH "描述"
+.PP
+The
+\fIlogin\&.access\fR
+file specifies (user, host) combinations and/or (user, tty) combinations for which a login will be either accepted or refused\&.
+.PP
+When someone logs in, the
+\fIlogin\&.access\fR
+is scanned for the first entry that matches the (user, host) combination, or, in case of non\-networked logins, the first entry that matches the (user, tty) combination\&. The permissions field of that table entry determines whether the login will be accepted or refused\&.
+.PP
+登录访问控制表的每一行有\(lq:\(rq分隔的三个字段:
+.PP
+\fIpermission\fR:\fIusers\fR:\fIorigins\fR
+.PP
+The first field should be a "\fI+\fR" (access granted) or "\fI\-\fR" (access denied) character\&. The second field should be a list of one or more login names, group names, or
+\fIALL\fR
+(always matches)\&. The third field should be a list of one or more tty names (for non\-networked logins), host names, domain names (begin with "\&."), host addresses, internet network numbers (end with "\&."),
+\fIALL\fR
+(always matches) or
+\fILOCAL\fR
+(matches any string that does not contain a "\&." character)\&. If you run NIS you can use @netgroupname in host or user patterns\&.
+.PP
+The
+\fIEXCEPT\fR
+operator makes it possible to write very compact rules\&.
+.PP
+The group file is searched only when a name does not match that of the logged\-in user\&. Only groups are matched in which users are explicitly listed: the program does not look at a user\*(Aqs primary group id value\&.
+.SH "文件"
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow 密码套件配置。
+.RE
+.SH "参见"
+.PP
+\fBlogin\fR(1)\&.
diff --git a/man/zh_CN/man5/login.defs.5 b/man/zh_CN/man5/login.defs.5
new file mode 100644
index 0000000..6267e1f
--- /dev/null
+++ b/man/zh_CN/man5/login.defs.5
@@ -0,0 +1,854 @@
+'\" t
+.\" Title: login.defs
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 文件格式和转化
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "LOGIN\&.DEFS" "5" "2020-01-23" "shadow\-utils 4\&.8\&.1" "文件格式和转化"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+login.defs \- 影子密码套件配置
+.SH "描述"
+.PP
+The
+/etc/login\&.defs
+file defines the site\-specific configuration for the shadow password suite\&. This file is required\&. Absence of this file will not prevent system operation, but will probably result in undesirable operation\&.
+.PP
+This file is a readable text file, each line of the file describing one configuration parameter\&. The lines consist of a configuration name and value, separated by whitespace\&. Blank lines and comment lines are ignored\&. Comments are introduced with a "#" pound sign and the pound sign must be the first non\-white character of the line\&.
+.PP
+Parameter values may be of four types: strings, booleans, numbers, and long numbers\&. A string is comprised of any printable characters\&. A boolean should be either the value
+\fIyes\fR
+or
+\fIno\fR\&. An undefined boolean parameter or one with a value other than these will be given a
+\fIno\fR
+value\&. Numbers (both regular and long) may be either decimal values, octal values (precede the value with
+\fI0\fR) or hexadecimal values (precede the value with
+\fI0x\fR)\&. The maximum value of the regular and long numeric parameters is machine\-dependent\&.
+.PP
+提供如下配置项:
+.PP
+\fBCHFN_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchfn\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCHFN_RESTRICT\fR (string)
+.RS 4
+This parameter specifies which values in the
+\fIgecos\fR
+field of the
+/etc/passwd
+file may be changed by regular users using the
+\fBchfn\fR
+program\&. It can be any combination of letters
+\fIf\fR,
+\fIr\fR,
+\fIw\fR,
+\fIh\fR, for Full name, Room number, Work phone, and Home phone, respectively\&. For backward compatibility,
+\fIyes\fR
+is equivalent to
+\fIrwh\fR
+and
+\fIno\fR
+is equivalent to
+\fIfrwh\fR\&. If not specified, only the superuser can make any changes\&. The most restrictive setting is better achieved by not installing
+\fBchfn\fR
+SUID\&.
+.RE
+.PP
+\fBCHSH_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchsh\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+如果定义了,或者是包含设备名(没行一个)的文件的完整路径名,或者是\(lq:\(rq分隔的设备名列表。将只会在这写设备上允许 root 登录。
+.sp
+如果没有定义,可以在任何设备上使用 root。
+.sp
+指定的设备时不带 /dev/ 前缀。
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\*(Aqs supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBCREATE_HOME\fR (boolean)
+.RS 4
+指示是否应该为新用户默认创建主目录。
+.sp
+此设置并不应用到系统用户,并且可以使用命令行覆盖。
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+如果不能 cd 到主目录时,说明是否允许登录。默认是否。
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+这定义了系统加密密码的默认算法(如果没有在命令行上指定算法)。
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value is a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value is a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR) and can be preceded by
+\fIPATH=\fR\&. The default value is
+\fIPATH=/sbin:/bin:/usr/sbin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+如果此文件存在,并且可读,将会从中读取登录环境。所有行都必须是 name=value 的格式。
+.sp
+以 # 开头的行将视为注释,并被忽略。
+.RE
+.PP
+\fBERASECHAR\fR (number)
+.RS 4
+Terminal ERASE character (\fI010\fR
+= backspace,
+\fI0177\fR
+= DEL)\&.
+.sp
+此值可以使用前缀\(lq0\(rq表示八进制,\(lq0x\(rq表示十六进制。
+.RE
+.PP
+\fBFAIL_DELAY\fR (number)
+.RS 4
+登录失败后,等待多少秒才再允许登录。
+.RE
+.PP
+\fBFAILLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of
+/var/log/faillog
+login failure info\&.
+.RE
+.PP
+\fBFAKE_SHELL\fR (string)
+.RS 4
+If set,
+\fBlogin\fR
+will execute this shell instead of the users\*(Aq shell specified in
+/etc/passwd\&.
+.RE
+.PP
+\fBFTMP_FILE\fR (string)
+.RS 4
+如果定义,登录失败会以 utmp 格式记录在此文件中。
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBGID_MIN\fR
+(resp\&.
+\fBGID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBHOME_MODE\fR (number)
+.RS 4
+The mode for new home directories\&. If not specified, the
+\fBUMASK\fR
+is used to create the mode\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this to set the mode of the home directory they create\&.
+.RE
+.PP
+\fBHUSHLOGIN_FILE\fR (string)
+.RS 4
+If defined, this file can inhibit all the usual chatter during the login sequence\&. If a full pathname is specified, then hushed mode will be enabled if the user\*(Aqs name or shell are found in the file\&. If not a full pathname, then hushed mode will be enabled if the file exists in the user\*(Aqs home directory\&.
+.RE
+.PP
+\fBISSUE_FILE\fR (string)
+.RS 4
+如果定义了,此文件将在每次的登录提示之前现实。
+.RE
+.PP
+\fBKILLCHAR\fR (number)
+.RS 4
+Terminal KILL character (\fI025\fR
+= CTRL/U)\&.
+.sp
+此值可以使用前缀\(lq0\(rq表示八进制,\(lq0x\(rq表示十六进制。
+.RE
+.PP
+\fBLASTLOG_ENAB\fR (boolean)
+.RS 4
+允许记录和显示 /var/log/lastlog 登录时间信息。
+.RE
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.PP
+\fBLOG_OK_LOGINS\fR (boolean)
+.RS 4
+允许记录成功登录。
+.RE
+.PP
+\fBLOG_UNKFAIL_ENAB\fR (boolean)
+.RS 4
+在记录到登录失败时,允许记录未知用户名。
+.sp
+注意:如果用户不小心将密码输入到了登录名中,记录未知用户名可能是一个安全隐患。
+.RE
+.PP
+\fBLOGIN_RETRIES\fR (number)
+.RS 4
+密码错误时,重试的最大次数。
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+此字符串用于提示输入密码。默认是 "Password: ",或者翻译了的结果(汉语中翻译为了\(lq密码:\(rq)。如果设置了此变量,提示不会被翻译。
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\*(Aqs name\&.
+.RE
+.PP
+\fBLOGIN_TIMEOUT\fR (number)
+.RS 4
+最大登录时间(以秒为单位)。
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+启用登录时检查和现实邮箱状态。
+.sp
+如果 shell 的启动文件已经检查了邮件("mailx \-e" 或者其它同功能的工具),您应该禁用它。
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+邮箱目录。修改或删除用户账户时需要处理邮箱,如果没有指定,将使用编译时指定的默认值。
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+定义用户邮箱文件的位置(相对于主目录)。
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+默认值是 0,意味着组中的成员数没有限制。
+.sp
+此功能(分割组)允许限制组文件中的行长度。这对于确保 NIS 组的行比长于 1024 字符。
+.sp
+如果要强制这个限制,可以使用 25。
+.sp
+注意:分割组可能不受所有工具的支持(甚至在 Shadow 工具集中)。您不应该使用这个变量,除非真的需要。
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBMOTD_FILE\fR (string)
+.RS 4
+If defined, ":" delimited list of "message of the day" files to be displayed upon login\&.
+.RE
+.PP
+\fBNOLOGINS_FILE\fR (string)
+.RS 4
+If defined, name of file whose presence will inhibit non\-root logins\&. The contents of this file should be a message indicating why logins are inhibited\&.
+.RE
+.PP
+\fBOBSCURE_CHECKS_ENAB\fR (boolean)
+.RS 4
+对密码更改启用附加检查。
+.RE
+.PP
+\fBPASS_ALWAYS_WARN\fR (boolean)
+.RS 4
+如果是 root,警告弱密码,但是仍然允许使用。
+.RE
+.PP
+\fBPASS_CHANGE_TRIES\fR (number)
+.RS 4
+可以尝试更改密码的最大次数(太容易)。
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+一个密码可以使用的最大天数。如果密码比这旧,将会强迫更改密码。如果不指定,就假定为 \-1,这会禁用这个限制。
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+两次更改密码时间的最小间隔。将会拒绝任何早于此的更改密码的尝试。如果不指定,假定为 \-1,将会禁用这个限制。
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+密码过期之前给出警告的天数。0 表示只有只在过期的当天警告,负值表示不警告。如果没有指定,不会给警告。
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR,
+\fBPASS_MIN_DAYS\fR
+and
+\fBPASS_WARN_AGE\fR
+are only used at the time of account creation\&. Any changes to these settings won\*(Aqt affect existing accounts\&.
+.PP
+\fBPASS_MAX_LEN\fR (number), \fBPASS_MIN_LEN\fR (number)
+.RS 4
+Number of significant characters in the password for crypt()\&.
+\fBPASS_MAX_LEN\fR
+is 8 by default\&. Don\*(Aqt change unless your crypt() is better\&. This is ignored if
+\fBMD5_CRYPT_ENAB\fR
+set to
+\fIyes\fR\&.
+.RE
+.PP
+\fBPORTTIME_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable checking of time restrictions specified in
+/etc/porttime\&.
+.RE
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of resource limits from
+/etc/limits
+and ulimit, umask, and niceness from the user\*(Aqs passwd gecos field\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+使用很多轮转,会让暴力破解更加困难。但是需要注意,认证用户时也会需要更多的 CPU 资源。
+.sp
+如果没有指定,libc 会选择默认的轮转数(5000)。
+.sp
+值必须在 1000 \- 999,999,999 之间。
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.PP
+\fBSULOG_FILE\fR (string)
+.RS 4
+如果定义了,所有的 su 活动都会记录到此文件。
+.RE
+.PP
+\fBSU_NAME\fR (string)
+.RS 4
+如果定义了,就是运行\(lqsu \-\(rq时显示的命令名称。例如,如果定义为\(lqsu\(rq,那么\(lqps\(rq会显示此命令为\(lq\-su\(rq。如果没有定义,\(lqps\(rq将会显示实际执行的 shell,例如类似于\(lq\-sh\(rq。
+.RE
+.PP
+\fBSU_WHEEL_ONLY\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the user must be listed as a member of the first gid 0 group in
+/etc/group
+(called
+\fIroot\fR
+on most Linux systems) to be able to
+\fBsu\fR
+to uid 0 accounts\&. If the group doesn\*(Aqt exist or is empty, no one will be able to
+\fBsu\fR
+to uid 0\&.
+.RE
+.PP
+\fBSUB_GID_MIN\fR (number), \fBSUB_GID_MAX\fR (number), \fBSUB_GID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate group IDs) allocate
+\fBSUB_GID_COUNT\fR
+unused group IDs from the range
+\fBSUB_GID_MIN\fR
+to
+\fBSUB_GID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR,
+\fBSUB_GID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSUB_UID_MIN\fR (number), \fBSUB_UID_MAX\fR (number), \fBSUB_UID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate user IDs) allocate
+\fBSUB_UID_COUNT\fR
+unused user IDs from the range
+\fBSUB_UID_MIN\fR
+to
+\fBSUB_UID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR,
+\fBSUB_UID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_GID_MIN\fR
+(resp\&.
+\fBSYS_GID_MAX\fR) is 101 (resp\&.
+\fBGID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_UID_MIN\fR
+(resp\&.
+\fBSYS_UID_MAX\fR) is 101 (resp\&.
+\fBUID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.PP
+\fBSYSLOG_SU_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsu\fR
+activity \- in addition to sulog file logging\&.
+.RE
+.PP
+\fBTTYGROUP\fR (string), \fBTTYPERM\fR (string)
+.RS 4
+The terminal permissions: the login tty will be owned by the
+\fBTTYGROUP\fR
+group, and the permissions will be set to
+\fBTTYPERM\fR\&.
+.sp
+By default, the ownership of the terminal is set to the user\*(Aqs primary group and the permissions are set to
+\fI0600\fR\&.
+.sp
+\fBTTYGROUP\fR
+can be either the name of a group or a numeric group identifier\&.
+.sp
+If you have a
+\fBwrite\fR
+program which is "setgid" to a special group which owns the terminals, define TTYGROUP to the group number and TTYPERM to 0620\&. Otherwise leave TTYGROUP commented out and assign TTYPERM to either 622 or 600\&.
+.RE
+.PP
+\fBTTYTYPE_FILE\fR (string)
+.RS 4
+If defined, file which maps tty line to TERM environment parameter\&. Each line of the file is in a format something like "vt100 tty01"\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBUID_MIN\fR
+(resp\&.
+\fBUID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBULIMIT\fR (number)
+.RS 4
+Default
+\fBulimit\fR
+value\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+文件模式创建掩码初始化为此值。如果没有指定,掩码初始化为 022。
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create if
+\fBHOME_MODE\fR
+is not set\&.
+.sp
+It is also used by
+\fBlogin\fR
+to define users\*(Aq initial umask\&. Note that this mask can be overridden by the user\*(Aqs GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERDEL_CMD\fR (string)
+.RS 4
+如果定义了,这是删除账户时执行的命令。它应该移除所有属于此用户的的 at/cron/print 等作业(作为第一个参数传递)。
+.sp
+这个脚本的返回值并不被带到账户中去。
+.sp
+Here is an example script, which removes the user\*(Aqs cron, at and print jobs:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#! /bin/sh
+
+# Check for the required argument\&.
+if [ $# != 1 ]; then
+ echo "Usage: $0 username"
+ exit 1
+fi
+
+# Remove cron jobs\&.
+crontab \-r \-u $1
+
+# Remove at jobs\&.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username\&.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR \-name "[^\&.]*" \-type f \-user $1 \-delete \e;
+
+# Remove print jobs\&.
+lprm $1
+
+# All done\&.
+exit 0
+
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+如果 uid 和 gid 相同,用户名和主用户名也相同,使非 root 组的组掩码位和属主位相同 (如:022 \-> 002, 077 \-> 007)。
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "交叉引用"
+.PP
+如下交叉引用显示影子密码套件哪个程序使用哪个参数。
+.PP
+chfn
+.RS 4
+CHFN_AUTH
+CHFN_RESTRICT
+LOGIN_STRING
+.RE
+.PP
+chgpasswd
+.RS 4
+ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+chpasswd
+.RS 4
+ENCRYPT_METHOD MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+chsh
+.RS 4
+CHSH_AUTH LOGIN_STRING
+.RE
+.PP
+gpasswd
+.RS 4
+ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+groupadd
+.RS 4
+GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN
+.RE
+.PP
+groupdel
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+groupmems
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+groupmod
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpck
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpconv
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpunconv
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+lastlog
+.RS 4
+LASTLOG_UID_MAX
+.RE
+.PP
+login
+.RS 4
+CONSOLE
+CONSOLE_GROUPS DEFAULT_HOME
+ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE
+ERASECHAR FAIL_DELAY
+FAILLOG_ENAB
+FAKE_SHELL
+FTMP_FILE
+HUSHLOGIN_FILE
+ISSUE_FILE
+KILLCHAR
+LASTLOG_ENAB LASTLOG_UID_MAX
+LOGIN_RETRIES
+LOGIN_STRING
+LOGIN_TIMEOUT LOG_OK_LOGINS LOG_UNKFAIL_ENAB
+MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB
+TTYGROUP TTYPERM TTYTYPE_FILE
+ULIMIT UMASK
+USERGROUPS_ENAB
+.RE
+.PP
+newgrp / sg
+.RS 4
+SYSLOG_SG_ENAB
+.RE
+.PP
+newusers
+.RS 4
+ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB HOME_MODE PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+SUB_GID_COUNT SUB_GID_MAX SUB_GID_MIN SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK
+.RE
+.PP
+passwd
+.RS 4
+ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+pwck
+.RS 4
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+.RE
+.PP
+pwconv
+.RS 4
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+.RE
+.PP
+su
+.RS 4
+CONSOLE
+CONSOLE_GROUPS DEFAULT_HOME
+ENV_HZ ENVIRON_FILE
+ENV_PATH ENV_SUPATH
+ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE QUOTAS_ENAB
+SULOG_FILE SU_NAME
+SU_WHEEL_ONLY
+SYSLOG_SU_ENAB
+USERGROUPS_ENAB
+.RE
+.PP
+sulogin
+.RS 4
+ENV_HZ
+ENV_TZ
+.RE
+.PP
+useradd
+.RS 4
+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 SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK
+.RE
+.PP
+userdel
+.RS 4
+MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB
+.RE
+.PP
+usermod
+.RS 4
+LASTLOG_UID_MAX MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP
+.RE
+.SH "参见"
+.PP
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBsu\fR(1),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBpam\fR(8)\&.
diff --git a/man/zh_CN/man5/passwd.5 b/man/zh_CN/man5/passwd.5
new file mode 100644
index 0000000..6bd853b
--- /dev/null
+++ b/man/zh_CN/man5/passwd.5
@@ -0,0 +1,193 @@
+'\" t
+.\" Title: passwd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 文件格式和转化
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "PASSWD" "5" "2020-01-23" "shadow\-utils 4\&.8\&.1" "文件格式和转化"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+passwd \- 密码文件
+.SH "描述"
+.PP
+/etc/passwd
+contains one line for each user account, with seven fields delimited by colons (\(lq:\(rq)\&. These fields are:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+登录名
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+可选的加密后的密码
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+数字用户 ID
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+数字组 ID
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+用户名和注释字段
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+用户主目录
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+可选的用户命令解释器
+.RE
+.PP
+If the
+\fIpassword\fR
+field is a lower\-case
+\(lqx\(rq, then the encrypted password is actually stored in the
+\fBshadow\fR(5)
+file instead; there
+\fImust\fR
+be a corresponding line in the
+/etc/shadow
+file, or else the user account is invalid\&.
+.PP
+The encrypted
+\fIpassword\fR
+field may be empty, in which case no password is required to authenticate as the specified login name\&. However, some applications which read the
+/etc/passwd
+file may decide not to permit
+\fIany\fR
+access at all if the
+\fIpassword\fR
+field is blank\&.
+.PP
+A
+\fIpassword\fR
+field which starts with an exclamation mark means that the password is locked\&. The remaining characters on the line represent the
+\fIpassword\fR
+field before the password was locked\&.
+.PP
+Refer to
+\fBcrypt\fR(3)
+for details on how this string is interpreted\&.
+.PP
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), 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)\&.
+.PP
+The comment field is used by various system utilities, such as
+\fBfinger\fR(1)\&.
+.PP
+The home directory field provides the name of the initial working directory\&. The
+\fBlogin\fR
+program uses this information to set the value of the
+\fB$HOME\fR
+environmental variable\&.
+.PP
+The command interpreter field provides the name of the user\*(Aqs command language interpreter, or the name of the initial program to execute\&. The
+\fBlogin\fR
+program uses this information to set the value of the
+\fB$SHELL\fR
+environmental variable\&. If this field is empty, it defaults to the value
+/bin/sh\&.
+.SH "文件"
+.PP
+/etc/passwd
+.RS 4
+用户账户信息。
+.RE
+.PP
+/etc/shadow
+.RS 4
+可选的加密后的密码文件
+.RE
+.PP
+/etc/passwd\-
+.RS 4
+/etc/passwd 的备份文件。
+.sp
+注意,此文件由 shadow 工具集使用,而不是所有的用户和密码管理工具都会使用。
+.RE
+.SH "参见"
+.PP
+\fBcrypt\fR(3),
+\fBgetent\fR(1),
+\fBgetpwnam\fR(3),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBpwck\fR(8),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBshadow\fR(5),
+\fBsu\fR(1),
+\fBsulogin\fR(8)\&.
diff --git a/man/zh_CN/man5/porttime.5 b/man/zh_CN/man5/porttime.5
new file mode 100644
index 0000000..3fcc951
--- /dev/null
+++ b/man/zh_CN/man5/porttime.5
@@ -0,0 +1,96 @@
+'\" t
+.\" Title: porttime
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 文件格式和转化
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "PORTTIME" "5" "2020-01-23" "shadow\-utils 4\&.8\&.1" "文件格式和转化"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+porttime \- 端口访问时间文件
+.SH "描述"
+.PP
+\fIporttime\fR
+contains a list of tty devices, user names, and permitted login times\&.
+.PP
+每项包含三个由冒号分隔的字段。第一个字段是逗号分隔的 tty 设备列表,或者星号表示匹配所有终端。第二个字段是逗号分隔的用户名列表,或者星号表示匹配所有用户名。第三个字段是逗号分隔的访问许可时间。
+.PP
+Each access time entry consists of zero or more days of the week, abbreviated
+\fISu\fR,
+\fIMo\fR,
+\fITu\fR,
+\fIWe\fR,
+\fITh\fR,
+\fIFr\fR, and
+\fISa\fR, followed by a pair of times separated by a hyphen\&. The abbreviation
+\fIWk\fR
+may be used to represent Monday thru Friday, and
+\fIAl\fR
+may be used to indicate every day\&. If no days are given,
+\fIAl\fR
+is assumed\&.
+.SH "示例"
+.PP
+The following entry allows access to user
+\fBjfh\fR
+on every port during weekdays from 9am to 5pm\&.
+.PP
+*:jfh:Wk0900\-1700
+.PP
+The following entries allow access only to the users
+\fIroot\fR
+and
+\fIoper\fR
+on
+/dev/console
+at any time\&. This illustrates how the
+/etc/porttime
+file is an ordered list of access times\&. Any other user would match the second entry which does not permit access at any time\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ console:root,oper:Al0000\-2400
+ console:*:
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+The following entry allows access for the user
+\fIgames\fR
+on any port during non\-working hours\&.
+.PP
+*:games:Wk1700\-0900,SaSu0000\-2400
+.SH "文件"
+.PP
+/etc/porttime
+.RS 4
+包含了端口访问信息的文件。
+.RE
+.SH "参见"
+.PP
+\fBlogin\fR(1)\&.
diff --git a/man/zh_CN/man5/shadow.5 b/man/zh_CN/man5/shadow.5
new file mode 100644
index 0000000..4c9fe5c
--- /dev/null
+++ b/man/zh_CN/man5/shadow.5
@@ -0,0 +1,148 @@
+'\" t
+.\" Title: shadow
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 文件格式和转化
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "SHADOW" "5" "2020-01-23" "shadow\-utils 4\&.8\&.1" "文件格式和转化"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+shadow \- 影子化了的密码文件
+.SH "描述"
+.PP
+shadow
+is a file which contains the password information for the system\*(Aqs accounts and optional aging information\&.
+.PP
+如果没有维护好密码安全,此文件绝对不能让普通用户可读。
+.PP
+Each line of this file contains 9 fields, separated by colons (\(lq:\(rq), in the following order:
+.PP
+\fB登录名\fR
+.RS 4
+必须是有效的账户名,且已经存在于系统中。
+.RE
+.PP
+\fB加密了的密码\fR
+.RS 4
+This field may be empty, in which case no passwords are required to authenticate as the specified login name\&. However, some applications which read the
+/etc/shadow
+file may decide not to permit any access at all if the password field is empty\&.
+.sp
+A password field which starts with an exclamation mark means that the password is locked\&. The remaining characters on the line represent the password field before the password was locked\&.
+.sp
+Refer to
+\fBcrypt\fR(3)
+for details on how this string is interpreted\&.
+.sp
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), 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)\&.
+.RE
+.PP
+\fB最后一次更改密码的日期\fR
+.RS 4
+最近一次更改密码的时间,表示从1970年1月1日开始的天数。
+.sp
+The value 0 has a special meaning, which is that the user should change her password the next time she will log in the system\&.
+.sp
+空字段表示密码年龄功能被禁用。
+.RE
+.PP
+\fB密码的最小年龄\fR
+.RS 4
+最小密码年龄是指,用户一次更改密码之后,要等多长时间才再次被允许更改密码。
+.sp
+空字段或 0 表示没有最小密码年龄。
+.RE
+.PP
+\fB最大密码年龄\fR
+.RS 4
+最大密码年龄是指,这写天之后,用户必须更改密码。
+.sp
+这写天之后,密码仍然可用。用户将会在下次登录的时候被要求更改密码。
+.sp
+空字段表示没有最大密码年龄,没有密码警告时间段,没有密码禁用时间段(请看下边)。
+.sp
+如果最大密码年龄小于最小密码年龄,用户将会不能更改密码。
+.RE
+.PP
+\fB密码警告时间段\fR
+.RS 4
+密码过期之前,提前警告用户的的天数(请参考上边的密码的最大年龄)。
+.sp
+空字段或者 0 表示没有密码警告期。
+.RE
+.PP
+\fB密码禁用期\fR
+.RS 4
+密码过期(查看上边的密码最大年龄)后,仍然接受此密码的天数(在此期间,用户应该在下次登录时修改密码)。
+.sp
+密码到期并且过了这个宽限期之后,使用用户的当前的密码将会不能登录。用户需要联系系统管理员。
+.sp
+空字段表示没有强制密码过期。
+.RE
+.PP
+\fB账户过期日期\fR
+.RS 4
+账户过期的日期,表示从1970年1月1日开始的天数。
+.sp
+Note that an account expiration differs from a password expiration\&. In case of an account expiration, the user shall not be allowed to login\&. In case of a password expiration, the user is not allowed to login using her password\&.
+.sp
+空字段表示账户永不过期。
+.sp
+应该避免使用 0,因为它既能理解成永不过期也能理解成在1970年1月1日过期。
+.RE
+.PP
+\fB保留字段\fR
+.RS 4
+此字段保留作将来使用。
+.RE
+.SH "文件"
+.PP
+/etc/passwd
+.RS 4
+用户账户信息。
+.RE
+.PP
+/etc/shadow
+.RS 4
+安全用户账户信息。
+.RE
+.PP
+/etc/shadow\-
+.RS 4
+/etc/shadow 的备份文件。
+.sp
+注意,此文件由 shadow 工具集使用,而不是所有的用户和密码管理工具都会使用。
+.RE
+.SH "参见"
+.PP
+\fBchage\fR(1),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBpasswd\fR(5),
+\fBpwck\fR(8),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBsu\fR(1),
+\fBsulogin\fR(8)\&.
diff --git a/man/zh_CN/man5/suauth.5 b/man/zh_CN/man5/suauth.5
new file mode 100644
index 0000000..1a1de53
--- /dev/null
+++ b/man/zh_CN/man5/suauth.5
@@ -0,0 +1,146 @@
+'\" t
+.\" Title: suauth
+.\" Author: Marek Micha\(/lkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 文件格式和转化
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "SUAUTH" "5" "2020-01-23" "shadow\-utils 4\&.8\&.1" "文件格式和转化"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+suauth \- 详细的 su 控制文件
+.SH "大纲"
+.HP \w'\fB/etc/suauth\fR\ 'u
+\fB/etc/suauth\fR
+.SH "描述"
+.PP
+The file
+/etc/suauth
+is referenced whenever the su command is called\&. It can change the behaviour of the su command, based upon:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ 1) the user su is targeting
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+2) 执行 su 命令的用户 (或者他可能属于的组)
+.PP
+文件格式为:以 # 开头的行视为注视,并被忽略;
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ to\-id:from\-id:ACTION
+
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Where to\-id is either the word
+\fIALL\fR, a list of usernames delimited by "," or the words
+\fIALL EXCEPT\fR
+followed by a list of usernames delimited by ","\&.
+.PP
+from\-id is formatted the same as to\-id except the extra word
+\fIGROUP\fR
+is recognized\&.
+\fIALL EXCEPT GROUP\fR
+is perfectly valid too\&. Following
+\fIGROUP\fR
+appears one or more group names, delimited by ","\&. It is not sufficient to have primary group id of the relevant group, an entry in
+\fB/etc/group\fR(5)
+is necessary\&.
+.PP
+动作只可以使用如下当前支持的选项。
+.PP
+\fIDENY\fR
+.RS 4
+su 的尝试在询问密码之前就被拒绝。
+.RE
+.PP
+\fINOPASS\fR
+.RS 4
+su 尝试自动成功,而且不询问密码。
+.RE
+.PP
+\fIOWNPASS\fR
+.RS 4
+为了成功执行 su,用户必须提供自己的密码。将会提示他们这样。
+.RE
+.PP
+注意,有三个用冒号分割的字段。冒号旁边不能有空格。也请注意,这个文件会被一行一行地依次检查,会使用第一个可用的规则,而不会继续检查文件。这可以让系统管理员使系统尽量符合其期望。
+.SH "示例"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ # sample /etc/suauth file
+ #
+ # A couple of privileged usernames may
+ # su to root with their own password\&.
+ #
+ root:chris,birddog:OWNPASS
+ #
+ # Anyone else may not su to root unless in
+ # group wheel\&. This is how BSD does things\&.
+ #
+ root:ALL EXCEPT GROUP wheel:DENY
+ #
+ # Perhaps terry and birddog are accounts
+ # owned by the same person\&.
+ # Access can be arranged between them
+ # with no password\&.
+ #
+ terry:birddog:NOPASS
+ birddog:terry:NOPASS
+ #
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "文件"
+.PP
+/etc/suauth
+.RS 4
+.RE
+.SH "缺陷"
+.PP
+可能会有很多潜在问题。文件解析器尤其不能容忍语法错误,不能有无意义的空白符(除了行首和行尾),并且使用特定的标记分割不同的事情。
+.SH "DIAGNOSTICS"
+.PP
+An error parsing the file is reported using
+\fBsyslogd\fR(8)
+as level ERR on facility AUTH\&.
+.SH "参见"
+.PP
+\fBsu\fR(1)\&.
diff --git a/man/zh_CN/man8/chgpasswd.8 b/man/zh_CN/man8/chgpasswd.8
new file mode 100644
index 0000000..ff0204e
--- /dev/null
+++ b/man/zh_CN/man8/chgpasswd.8
@@ -0,0 +1,208 @@
+'\" t
+.\" Title: chgpasswd
+.\" Author: Thomas K\(/loczko <kloczek@pld.org.pl>
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 系统管理命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "CHGPASSWD" "8" "2020-01-23" "shadow\-utils 4\&.8\&.1" "系统管理命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+chgpasswd \- 批量更新组密码
+.SH "大纲"
+.HP \w'\fBchgpasswd\fR\ 'u
+\fBchgpasswd\fR [\fI选项\fR]
+.SH "描述"
+.PP
+The
+\fBchgpasswd\fR
+command reads a list of group name and password pairs from standard input and uses this information to update a set of existing groups\&. Each line is of the format:
+.PP
+\fIgroup_name\fR:\fIpassword\fR
+.PP
+By default the supplied password must be in clear\-text, and is encrypted by
+\fBchgpasswd\fR\&.
+.PP
+The default encryption algorithm can be defined for the system with the
+\fBENCRYPT_METHOD\fR
+variable of
+/etc/login\&.defs, and can be overwritten with the
+\fB\-e\fR,
+\fB\-m\fR, or
+\fB\-c\fR
+options\&.
+.PP
+此命令一般用于需要一次创建很多用户的大型系统。
+.SH "选项"
+.PP
+The options which apply to the
+\fBchgpasswd\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+使用指定的方法加密密码。
+.sp
+可用的方法有 DES, MD5, NONE, and SHA256 或 SHA512,前提是您的 libc 支持这写方法。
+.RE
+.PP
+\fB\-e\fR, \fB\-\-encrypted\fR
+.RS 4
+提供的密码是已经加密了的
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+现实帮助信息并退出。
+.RE
+.PP
+\fB\-m\fR, \fB\-\-md5\fR
+.RS 4
+如果提供的密码没有加密,则使用 MD5 加密而不是 DES。
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+使用指定次数的轮转来加密密码。
+.sp
+值 0 表示让系统为加密方法选择默认的轮转次数 (5000)。
+.sp
+会强制最小 1,000,最大 9,9999,9999
+.sp
+您只可以对 SHA256 或 SHA512 使用此选项。
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "CAVEATS"
+.PP
+记住要设置权限或者掩码来阻止其它用户对未加密文件的读取。
+.PP
+您需要确保你吗和加密方法符合系统的密码策略。
+.SH "配置文件"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+这定义了系统加密密码的默认算法(如果没有在命令行上指定算法)。
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+默认值是 0,意味着组中的成员数没有限制。
+.sp
+此功能(分割组)允许限制组文件中的行长度。这对于确保 NIS 组的行比长于 1024 字符。
+.sp
+如果要强制这个限制,可以使用 25。
+.sp
+注意:分割组可能不受所有工具的支持(甚至在 Shadow 工具集中)。您不应该使用这个变量,除非真的需要。
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+使用很多轮转,会让暴力破解更加困难。但是需要注意,认证用户时也会需要更多的 CPU 资源。
+.sp
+如果没有指定,libc 会选择默认的轮转数(5000)。
+.sp
+值必须在 1000 \- 999,999,999 之间。
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "文件"
+.PP
+/etc/group
+.RS 4
+组账户信息。
+.RE
+.PP
+/etc/gshadow
+.RS 4
+安全组账户信息。
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow 密码套件配置。
+.RE
+.SH "参见"
+.PP
+\fBgpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBlogin.defs\fR(5)\&.
diff --git a/man/zh_CN/man8/chpasswd.8 b/man/zh_CN/man8/chpasswd.8
new file mode 100644
index 0000000..b26ed56
--- /dev/null
+++ b/man/zh_CN/man8/chpasswd.8
@@ -0,0 +1,212 @@
+'\" t
+.\" Title: chpasswd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 系统管理命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "CHPASSWD" "8" "2020-01-23" "shadow\-utils 4\&.8\&.1" "系统管理命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+chpasswd \- 批量更新密码
+.SH "大纲"
+.HP \w'\fBchpasswd\fR\ 'u
+\fBchpasswd\fR [\fI选项\fR]
+.SH "描述"
+.PP
+The
+\fBchpasswd\fR
+command reads a list of user name and password pairs from standard input and uses this information to update a group of existing users\&. Each line is of the format:
+.PP
+\fIuser_name\fR:\fIpassword\fR
+.PP
+By default the passwords must be supplied in clear\-text, and are encrypted by
+\fBchpasswd\fR\&. Also the password age will be updated, if present\&.
+.PP
+The default encryption algorithm can be defined for the system with the
+\fBENCRYPT_METHOD\fR
+or
+\fBMD5_CRYPT_ENAB\fR
+variables of
+/etc/login\&.defs, and can be overwritten with the
+\fB\-e\fR,
+\fB\-m\fR, or
+\fB\-c\fR
+options\&.
+.PP
+\fBchpasswd\fR
+first updates all the passwords in memory, and then commits all the changes to disk if no errors occurred for any user\&.
+.PP
+此命令一般用于需要一次创建很多用户的大型系统。
+.SH "选项"
+.PP
+The options which apply to the
+\fBchpasswd\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR\ \&\fIMETHOD\fR
+.RS 4
+使用指定的方法加密密码。
+.sp
+可用的方法有 DES, MD5, NONE, and SHA256 或 SHA512,前提是您的 libc 支持这写方法。
+.sp
+By default (if none of the
+\fB\-c\fR,
+\fB\-m\fR, or
+\fB\-e\fR
+options are specified), the encryption method is defined by the
+\fBENCRYPT_METHOD\fR
+or
+\fBMD5_CRYPT_ENAB\fR
+variables of
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-encrypted\fR
+.RS 4
+提供的密码是已经加密了的
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+现实帮助信息并退出。
+.RE
+.PP
+\fB\-m\fR, \fB\-\-md5\fR
+.RS 4
+如果提供的密码没有加密,则使用 MD5 加密而不是 DES。
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR\ \&\fIROUNDS\fR
+.RS 4
+使用指定次数的轮转来加密密码。
+.sp
+值 0 表示让系统为加密方法选择默认的轮转次数 (5000)。
+.sp
+会强制最小 1,000,最大 9,9999,9999
+.sp
+您只可以对 SHA256 或 SHA512 使用此选项。
+.sp
+By default, the number of rounds is defined by the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+and
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+variables in
+/etc/login\&.defs\&.
+.RE
+.SH "CAVEATS"
+.PP
+记住要设置权限或者掩码来阻止其它用户对未加密文件的读取。
+.SH "配置文件"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+这定义了系统加密密码的默认算法(如果没有在命令行上指定算法)。
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+使用很多轮转,会让暴力破解更加困难。但是需要注意,认证用户时也会需要更多的 CPU 资源。
+.sp
+如果没有指定,libc 会选择默认的轮转数(5000)。
+.sp
+值必须在 1000 \- 999,999,999 之间。
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "文件"
+.PP
+/etc/passwd
+.RS 4
+用户账户信息。
+.RE
+.PP
+/etc/shadow
+.RS 4
+安全用户账户信息。
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow 密码套件配置。
+.RE
+.SH "参见"
+.PP
+\fBpasswd\fR(1),
+\fBnewusers\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8)\&.
diff --git a/man/zh_CN/man8/faillog.8 b/man/zh_CN/man8/faillog.8
new file mode 100644
index 0000000..50b154b
--- /dev/null
+++ b/man/zh_CN/man8/faillog.8
@@ -0,0 +1,165 @@
+'\" t
+.\" Title: faillog
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 系统管理命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "FAILLOG" "8" "2020-01-23" "shadow\-utils 4\&.8\&.1" "系统管理命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+faillog \- 显示登录失败记录或设置登录失败限制
+.SH "大纲"
+.HP \w'\fBfaillog\fR\ 'u
+\fBfaillog\fR [\fI选项\fR]
+.SH "描述"
+.PP
+\fBfaillog\fR
+displays the contents of the failure log database (/var/log/faillog)\&. It can also set the failure counters and limits\&. When
+\fBfaillog\fR
+is run without arguments, it only displays the faillog records of the users who had a login failure\&.
+.SH "选项"
+.PP
+The options which apply to the
+\fBfaillog\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+Display (or act on) faillog records for all users having an entry in the
+faillog
+database\&.
+.sp
+The range of users can be restricted with the
+\fB\-u\fR
+option\&.
+.sp
+In display mode, this is still restricted to existing users but forces the display of the faillog entries even if they are empty\&.
+.sp
+With the
+\fB\-l\fR,
+\fB\-m\fR,
+\fB\-r\fR,
+\fB\-t\fR
+options, the users\*(Aq records are changed, even if the user does not exist on the system\&. This is useful to reset records of users that have been deleted or to set a policy in advance for a range of users\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+现实帮助信息并退出。
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\-secs\fR\ \&\fISEC\fR
+.RS 4
+Lock account for
+\fISEC\fR
+seconds after failed login\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-maximum\fR\ \&\fIMAX\fR
+.RS 4
+Set the maximum number of login failures after the account is disabled to
+\fIMAX\fR\&.
+.sp
+Selecting a
+\fIMAX\fR
+value of 0 has the effect of not placing a limit on the number of failed logins\&.
+.sp
+The maximum failure count should always be 0 for
+\fIroot\fR
+to prevent a denial of services attack against the system\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-reset\fR
+.RS 4
+重置登录失败计数。
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR\ \&\fIDAYS\fR
+.RS 4
+Display faillog records more recent than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR\ \&\fILOGIN\fR|\fIRANGE\fR
+.RS 4
+Display faillog record or maintains failure counters and limits (if used with
+\fB\-l\fR,
+\fB\-m\fR
+or
+\fB\-r\fR
+options) only for the specified user(s)\&.
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+When none of the
+\fB\-l\fR,
+\fB\-m\fR, or
+\fB\-r\fR
+options are used,
+\fBfaillog\fR
+displays the faillog record of the specified user(s)\&.
+.SH "CAVEATS"
+.PP
+\fBfaillog\fR
+only prints out users with no successful login since the last failure\&. To print out a user who has had a successful login since their last failure, you must explicitly request the user with the
+\fB\-u\fR
+flag, or print out all users with the
+\fB\-a\fR
+flag\&.
+.SH "文件"
+.PP
+/var/log/faillog
+.RS 4
+Failure logging file\&.
+.RE
+.SH "参见"
+.PP
+\fBlogin\fR(1),
+\fBfaillog\fR(5)\&.
diff --git a/man/zh_CN/man8/groupadd.8 b/man/zh_CN/man8/groupadd.8
new file mode 100644
index 0000000..f150550
--- /dev/null
+++ b/man/zh_CN/man8/groupadd.8
@@ -0,0 +1,257 @@
+'\" t
+.\" Title: groupadd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 系统管理命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "GROUPADD" "8" "2020-01-23" "shadow\-utils 4\&.8\&.1" "系统管理命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+groupadd \- 创建一个新组
+.SH "大纲"
+.HP \w'\fBgroupadd\fR\ 'u
+\fBgroupadd\fR [\fI选项\fR] \fIgroup\fR
+.SH "描述"
+.PP
+The
+\fBgroupadd\fR
+command creates a new group account using the values specified on the command line plus the default values from the system\&. The new group will be entered into the system files as needed\&.
+.SH "选项"
+.PP
+The options which apply to the
+\fBgroupadd\fR
+command are:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option causes the command to simply exit with success status if the specified group already exists\&. When used with
+\fB\-g\fR, and the specified GID already exists, another (unique) GID is chosen (i\&.e\&.
+\fB\-g\fR
+is turned off)\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGID\fR
+.RS 4
+The numerical value of the group\*(Aqs ID\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&. The default is to use the smallest ID value greater than or equal to
+\fBGID_MIN\fR
+and greater than every other group\&.
+.sp
+See also the
+\fB\-r\fR
+option and the
+\fBGID_MAX\fR
+description\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+现实帮助信息并退出。
+.RE
+.PP
+\fB\-K\fR, \fB\-\-key\fR\ \&\fIKEY\fR=\fIVALUE\fR
+.RS 4
+Overrides
+/etc/login\&.defs
+defaults (GID_MIN, GID_MAX and others)\&. Multiple
+\fB\-K\fR
+options can be specified\&.
+.sp
+Example:
+\fB\-K\fR\ \&\fIGID_MIN\fR=\fI100\fR\ \&
+\fB\-K\fR\ \&\fIGID_MAX\fR=\fI499\fR
+.sp
+Note:
+\fB\-K\fR\ \&\fIGID_MIN\fR=\fI10\fR,\fIGID_MAX\fR=\fI499\fR
+doesn\*(Aqt work yet\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+此选项允许添加一个使用非唯一 GID 的组。
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&. The default is to disable the password\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+您应该确保密码符合系统的密码政策。
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+创建一个系统组。
+.sp
+The numeric identifiers of new system groups are chosen in the
+\fBSYS_GID_MIN\fR\-\fBSYS_GID_MAX\fR
+range, defined in
+login\&.defs, instead of
+\fBGID_MIN\fR\-\fBGID_MAX\fR\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.SH "配置文件"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBGID_MIN\fR
+(resp\&.
+\fBGID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+默认值是 0,意味着组中的成员数没有限制。
+.sp
+此功能(分割组)允许限制组文件中的行长度。这对于确保 NIS 组的行比长于 1024 字符。
+.sp
+如果要强制这个限制,可以使用 25。
+.sp
+注意:分割组可能不受所有工具的支持(甚至在 Shadow 工具集中)。您不应该使用这个变量,除非真的需要。
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_GID_MIN\fR
+(resp\&.
+\fBSYS_GID_MAX\fR) is 101 (resp\&.
+\fBGID_MIN\fR\-1)\&.
+.RE
+.SH "文件"
+.PP
+/etc/group
+.RS 4
+组账户信息。
+.RE
+.PP
+/etc/gshadow
+.RS 4
+安全组账户信息。
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow 密码套件配置。
+.RE
+.SH "CAVEATS"
+.PP
+组名必须以小写字母或者下划线开头,跟随小写字母、下划线或短横线。可以由美元符号结束。用正则表达式就是:[a\-z_][a\-z0\-9_\-]*[$]?
+.PP
+Groupnames may only be up to 16 characters long\&.
+.PP
+You may not add a NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.PP
+If the groupname already exists in an external group database such as NIS or LDAP,
+\fBgroupadd\fR
+will deny the group creation request\&.
+.SH "退出值"
+.PP
+The
+\fBgroupadd\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+GID not unique (when
+\fB\-o\fR
+not used)
+.RE
+.PP
+\fI9\fR
+.RS 4
+group name not unique
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.SH "参见"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/zh_CN/man8/groupdel.8 b/man/zh_CN/man8/groupdel.8
new file mode 100644
index 0000000..dd5804d
--- /dev/null
+++ b/man/zh_CN/man8/groupdel.8
@@ -0,0 +1,145 @@
+'\" t
+.\" Title: groupdel
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 系统管理命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "GROUPDEL" "8" "2020-01-23" "shadow\-utils 4\&.8\&.1" "系统管理命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+groupdel \- 删除一个组
+.SH "大纲"
+.HP \w'\fBgroupdel\fR\ 'u
+\fBgroupdel\fR [\fI选项\fR] \fIGROUP\fR
+.SH "描述"
+.PP
+The
+\fBgroupdel\fR
+command modifies the system account files, deleting all entries that refer to
+\fIGROUP\fR\&. The named group must exist\&.
+.SH "选项"
+.PP
+The options which apply to the
+\fBgroupdel\fR
+command are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+现实帮助信息并退出。
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.SH "CAVEATS"
+.PP
+您不能移除现有用户的主组。在移除此组之前,必须先移除此用户。
+.PP
+您需要手动检查所有文件系统,以确保没有遗留的属于此组的文件。
+.SH "配置文件"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+默认值是 0,意味着组中的成员数没有限制。
+.sp
+此功能(分割组)允许限制组文件中的行长度。这对于确保 NIS 组的行比长于 1024 字符。
+.sp
+如果要强制这个限制,可以使用 25。
+.sp
+注意:分割组可能不受所有工具的支持(甚至在 Shadow 工具集中)。您不应该使用这个变量,除非真的需要。
+.RE
+.SH "文件"
+.PP
+/etc/group
+.RS 4
+组账户信息。
+.RE
+.PP
+/etc/gshadow
+.RS 4
+安全组账户信息。
+.RE
+.SH "退出值"
+.PP
+The
+\fBgroupdel\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI8\fR
+.RS 4
+can\*(Aqt remove user\*(Aqs primary group
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.SH "参见"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/zh_CN/man8/groupmems.8 b/man/zh_CN/man8/groupmems.8
new file mode 100644
index 0000000..fdfe2c3
--- /dev/null
+++ b/man/zh_CN/man8/groupmems.8
@@ -0,0 +1,180 @@
+'\" t
+.\" Title: groupmems
+.\" Author: George Kraft, IV
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 系统管理命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "GROUPMEMS" "8" "2020-01-23" "shadow\-utils 4\&.8\&.1" "系统管理命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+groupmems \- 用户主组的管理员成员
+.SH "大纲"
+.HP \w'\fBgroupmems\fR\ 'u
+\fBgroupmems\fR \-a\ \fIuser_name\fR | \-d\ \fIuser_name\fR | [\-g\ \fIgroup_name\fR] | \-l | \-p
+.SH "描述"
+.PP
+The
+\fBgroupmems\fR
+command 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)\&.
+.PP
+Only the superuser, as administrator, can use
+\fBgroupmems\fR
+to alter the memberships of other groups\&.
+.SH "选项"
+.PP
+The options which apply to the
+\fBgroupmems\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-add\fR\ \&\fIuser_name\fR
+.RS 4
+Add a user to the group membership list\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR\ \&\fIuser_name\fR
+.RS 4
+从组成员列表中删除用户。
+.sp
+If the
+/etc/gshadow
+file exist, the user will be removed from the list of members and administrators of the group\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-group\fR\ \&\fIgroup_name\fR
+.RS 4
+超级用户可以指定修改哪个组的组成员列表。
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+现实帮助信息并退出。
+.RE
+.PP
+\fB\-l\fR, \fB\-\-list\fR
+.RS 4
+列出组成员。
+.RE
+.PP
+\fB\-p\fR, \fB\-\-purge\fR
+.RS 4
+从组成员列表中删除所有用户。
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.SH "SETUP"
+.PP
+The
+\fBgroupmems\fR
+executable should be in mode
+2710
+as user
+\fIroot\fR
+and in group
+\fIgroups\fR\&. The system administrator can add users to group
+\fIgroups\fR
+to allow or disallow them using the
+\fBgroupmems\fR
+utility to manage their own group membership list\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+ $ groupadd \-r groups
+ $ chmod 2710 groupmems
+ $ chown root\&.groups groupmems
+ $ groupmems \-g groups \-a gk4
+
+.fi
+.if n \{\
+.RE
+.\}
+.SH "配置文件"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+默认值是 0,意味着组中的成员数没有限制。
+.sp
+此功能(分割组)允许限制组文件中的行长度。这对于确保 NIS 组的行比长于 1024 字符。
+.sp
+如果要强制这个限制,可以使用 25。
+.sp
+注意:分割组可能不受所有工具的支持(甚至在 Shadow 工具集中)。您不应该使用这个变量,除非真的需要。
+.RE
+.SH "文件"
+.PP
+/etc/group
+.RS 4
+组账户信息。
+.RE
+.PP
+/etc/gshadow
+.RS 4
+安全组账户信息
+.RE
+.SH "参见"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/zh_CN/man8/groupmod.8 b/man/zh_CN/man8/groupmod.8
new file mode 100644
index 0000000..9701a5e
--- /dev/null
+++ b/man/zh_CN/man8/groupmod.8
@@ -0,0 +1,233 @@
+'\" t
+.\" Title: groupmod
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 系统管理命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "GROUPMOD" "8" "2020-01-23" "shadow\-utils 4\&.8\&.1" "系统管理命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+groupmod \- modify a group definition on the system
+.SH "大纲"
+.HP \w'\fBgroupmod\fR\ 'u
+\fBgroupmod\fR [\fI选项\fR] \fIGROUP\fR
+.SH "描述"
+.PP
+The
+\fBgroupmod\fR
+command modifies the definition of the specified
+\fIGROUP\fR
+by modifying the appropriate entry in the group database\&.
+.SH "选项"
+.PP
+The options which apply to the
+\fBgroupmod\fR
+command are:
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGID\fR
+.RS 4
+The group ID of the given
+\fIGROUP\fR
+will be changed to
+\fIGID\fR\&.
+.sp
+The value of
+\fIGID\fR
+must be a non\-negative decimal integer\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&.
+.sp
+Users who use the group as primary group will be updated to keep the group as their primary group\&.
+.sp
+Any files that have the old group ID and must continue to belong to
+\fIGROUP\fR, must have their group ID changed manually\&.
+.sp
+No checks will be performed with regard to the
+\fBGID_MIN\fR,
+\fBGID_MAX\fR,
+\fBSYS_GID_MIN\fR, or
+\fBSYS_GID_MAX\fR
+from
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+现实帮助信息并退出。
+.RE
+.PP
+\fB\-n\fR, \fB\-\-new\-name\fR\ \&\fINEW_GROUP\fR
+.RS 4
+The name of the group will be changed from
+\fIGROUP\fR
+to
+\fINEW_GROUP\fR
+name\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+When used with the
+\fB\-g\fR
+option, allow to change the group
+\fIGID\fR
+to a non\-unique value\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+您应该确保密码符合系统的密码政策。
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.SH "配置文件"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+默认值是 0,意味着组中的成员数没有限制。
+.sp
+此功能(分割组)允许限制组文件中的行长度。这对于确保 NIS 组的行比长于 1024 字符。
+.sp
+如果要强制这个限制,可以使用 25。
+.sp
+注意:分割组可能不受所有工具的支持(甚至在 Shadow 工具集中)。您不应该使用这个变量,除非真的需要。
+.RE
+.SH "文件"
+.PP
+/etc/group
+.RS 4
+组账户信息。
+.RE
+.PP
+/etc/gshadow
+.RS 4
+安全组账户信息。
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow 密码套件配置。
+.RE
+.PP
+/etc/passwd
+.RS 4
+用户账户信息。
+.RE
+.SH "退出值"
+.PP
+The
+\fBgroupmod\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+E_SUCCESS: success
+.RE
+.PP
+\fI2\fR
+.RS 4
+E_USAGE: invalid command syntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+E_BAD_ARG: invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+E_GID_IN_USE: specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI6\fR
+.RS 4
+E_NOTFOUND: specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI9\fR
+.RS 4
+E_NAME_IN_USE: group name already in use
+.RE
+.PP
+\fI10\fR
+.RS 4
+E_GRP_UPDATE: can\*(Aqt update group file
+.RE
+.PP
+\fI11\fR
+.RS 4
+E_CLEANUP_SERVICE: can\*(Aqt setup cleanup service
+.RE
+.PP
+\fI12\fR
+.RS 4
+E_PAM_USERNAME: can\*(Aqt determine your username for use with pam
+.RE
+.PP
+\fI13\fR
+.RS 4
+E_PAM_ERROR: pam returned an error, see syslog facility id groupmod for the PAM error message
+.RE
+.SH "参见"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/zh_CN/man8/grpck.8 b/man/zh_CN/man8/grpck.8
new file mode 100644
index 0000000..eb8f146
--- /dev/null
+++ b/man/zh_CN/man8/grpck.8
@@ -0,0 +1,247 @@
+'\" t
+.\" Title: grpck
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 系统管理命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "GRPCK" "8" "2020-01-23" "shadow\-utils 4\&.8\&.1" "系统管理命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+grpck \- 检查组文件的完整性
+.SH "大纲"
+.HP \w'\fBgrpck\fR\ 'u
+\fBgrpck\fR [选项] [\fIgroup\fR\ [\ \fIshadow\fR\ ]]
+.SH "描述"
+.PP
+The
+\fBgrpck\fR
+command verifies the integrity of the groups information\&. It checks that all entries in
+/etc/group
+and /etc/gshadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+检查的项目有:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+正确的字段数
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+一个唯一且有效的组名
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid group identifier
+(/etc/group only)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid list of members
+and administrators
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a corresponding entry in the
+/etc/gshadow
+file (respectively
+/etc/group
+for the
+gshadow
+checks)
+.RE
+.PP
+The checks for correct number of fields and unique group name are fatal\&. If an entry has the wrong number of fields, the user will be prompted to delete the entire line\&. If the user does not answer affirmatively, all further checks are bypassed\&. An entry with a duplicated group name is prompted for deletion, but the remaining checks will still be made\&. All other errors are warnings and the user is encouraged to run the
+\fBgroupmod\fR
+command to correct the error\&.
+.PP
+The commands which operate on the
+/etc/group
+and /etc/gshadow files
+are not able to alter corrupted or duplicated entries\&.
+\fBgrpck\fR
+should be used in those circumstances to remove the offending entries\&.
+.SH "选项"
+.PP
+The
+\fB\-r\fR
+and
+\fB\-s\fR
+options cannot be combined\&.
+.PP
+The options which apply to the
+\fBgrpck\fR
+command are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+现实帮助信息并退出。
+.RE
+.PP
+\fB\-r\fR, \fB\-\-read\-only\fR
+.RS 4
+Execute the
+\fBgrpck\fR
+command in read\-only mode\&. This causes all questions regarding changes to be answered
+\fIno\fR
+without user intervention\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sort\fR
+.RS 4
+Sort entries in
+/etc/group
+and /etc/gshadow
+by GID\&.
+.RE
+.PP
+By default,
+\fBgrpck\fR
+operates on
+/etc/group
+and /etc/gshadow\&. The user may select alternate files with the
+\fIgroup\fR
+and \fIshadow\fR parameters\&.
+.SH "配置文件"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+默认值是 0,意味着组中的成员数没有限制。
+.sp
+此功能(分割组)允许限制组文件中的行长度。这对于确保 NIS 组的行比长于 1024 字符。
+.sp
+如果要强制这个限制,可以使用 25。
+.sp
+注意:分割组可能不受所有工具的支持(甚至在 Shadow 工具集中)。您不应该使用这个变量,除非真的需要。
+.RE
+.SH "文件"
+.PP
+/etc/group
+.RS 4
+组账户信息。
+.RE
+.PP
+/etc/gshadow
+.RS 4
+安全组账户信息。
+.RE
+.PP
+/etc/passwd
+.RS 4
+用户账户信息。
+.RE
+.SH "退出值"
+.PP
+The
+\fBgrpck\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI2\fR
+.RS 4
+one or more bad group entries
+.RE
+.PP
+\fI3\fR
+.RS 4
+can\*(Aqt open group files
+.RE
+.PP
+\fI4\fR
+.RS 4
+can\*(Aqt lock group files
+.RE
+.PP
+\fI5\fR
+.RS 4
+can\*(Aqt update group files
+.RE
+.SH "参见"
+.PP
+\fBgroup\fR(5),
+\fBgroupmod\fR(8),
+\fBgshadow\fR(5),
+\fBpasswd\fR(5),
+\fBpwck\fR(8),
+\fBshadow\fR(5)\&.
diff --git a/man/zh_CN/man8/grpconv.8 b/man/zh_CN/man8/grpconv.8
new file mode 100644
index 0000000..6eed9e8
--- /dev/null
+++ b/man/zh_CN/man8/grpconv.8
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/zh_CN/man8/grpunconv.8 b/man/zh_CN/man8/grpunconv.8
new file mode 100644
index 0000000..6eed9e8
--- /dev/null
+++ b/man/zh_CN/man8/grpunconv.8
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/zh_CN/man8/lastlog.8 b/man/zh_CN/man8/lastlog.8
new file mode 100644
index 0000000..52dcc9c
--- /dev/null
+++ b/man/zh_CN/man8/lastlog.8
@@ -0,0 +1,137 @@
+'\" t
+.\" Title: lastlog
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 系统管理命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "LASTLOG" "8" "2020-01-23" "shadow\-utils 4\&.8\&.1" "系统管理命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+lastlog \- 报告所有用户的最近登录情况,或者指定用户的最近登录情况
+.SH "大纲"
+.HP \w'\fBlastlog\fR\ 'u
+\fBlastlog\fR [\fI选项\fR]
+.SH "描述"
+.PP
+\fBlastlog\fR
+formats and prints the contents of the last login log
+/var/log/lastlog
+file\&. The
+\fIlogin\-name\fR,
+\fIport\fR, and
+\fIlast login time\fR
+will be printed\&. The default (no flags) causes lastlog entries to be printed, sorted by their order in
+/etc/passwd\&.
+.SH "选项"
+.PP
+The options which apply to the
+\fBlastlog\fR
+command are:
+.PP
+\fB\-b\fR, \fB\-\-before\fR\ \&\fIDAYS\fR
+.RS 4
+Print only lastlog records older than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-C\fR, \fB\-\-clear\fR
+.RS 4
+Clear lastlog record of a user\&. This option can be used only together with
+\fB\-u\fR
+(\fB\-\-user\fR))\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+现实帮助信息并退出。
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-S\fR, \fB\-\-set\fR
+.RS 4
+Set lastlog record of a user to the current time\&. This option can be used only together with
+\fB\-u\fR
+(\fB\-\-user\fR))\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR\ \&\fIDAYS\fR
+.RS 4
+Print the lastlog records more recent than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR\ \&\fILOGIN\fR|\fIRANGE\fR
+.RS 4
+现实指定用户的最近登录记录。
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+If the user has never logged in the message
+\fI** Never logged in**\fR
+will be displayed instead of the port and time\&.
+.PP
+Only the entries for the current users of the system will be displayed\&. Other entries may exist for users that were deleted previously\&.
+.SH "注意"
+.PP
+The
+lastlog
+file is a database which contains info on the last login of each user\&. You should not rotate it\&. It is a sparse file, so its size on the disk is usually much smaller than the one shown by "\fBls \-l\fR" (which can indicate a really big file if you have in
+passwd
+users with a high UID)\&. You can display its real size with "\fBls \-s\fR"\&.
+.SH "配置文件"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.SH "文件"
+.PP
+/var/log/lastlog
+.RS 4
+Database times of previous user logins\&.
+.RE
+.SH "CAVEATS"
+.PP
+Large gaps in UID numbers will cause the lastlog program to run longer with no output to the screen (i\&.e\&. if in lastlog database there is no entries for users with UID between 170 and 800 lastlog will appear to hang as it processes entries with UIDs 171\-799)\&.
diff --git a/man/zh_CN/man8/logoutd.8 b/man/zh_CN/man8/logoutd.8
new file mode 100644
index 0000000..d9c36e7
--- /dev/null
+++ b/man/zh_CN/man8/logoutd.8
@@ -0,0 +1,57 @@
+'\" t
+.\" Title: logoutd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 系统管理命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "LOGOUTD" "8" "2020-01-23" "shadow\-utils 4\&.8\&.1" "系统管理命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+logoutd \- 强制登录时间限制
+.SH "大纲"
+.HP \w'\fBlogoutd\fR\ 'u
+\fBlogoutd\fR
+.SH "描述"
+.PP
+\fBlogoutd\fR
+enforces the login time and port restrictions specified in
+/etc/porttime\&.
+\fBlogoutd\fR
+should be started from
+/etc/rc\&. The
+/var/run/utmp
+file is scanned periodically and each user name is checked to see if the named user is permitted on the named port at the current time\&. Any login session which is violating the restrictions in
+/etc/porttime
+is terminated\&.
+.SH "文件"
+.PP
+/etc/porttime
+.RS 4
+包含了端口访问信息的文件。
+.RE
+.PP
+/var/run/utmp
+.RS 4
+当前登录会话的列表。
+.RE
diff --git a/man/zh_CN/man8/newusers.8 b/man/zh_CN/man8/newusers.8
new file mode 100644
index 0000000..190defa
--- /dev/null
+++ b/man/zh_CN/man8/newusers.8
@@ -0,0 +1,449 @@
+'\" t
+.\" Title: newusers
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 系统管理命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "NEWUSERS" "8" "2020-01-23" "shadow\-utils 4\&.8\&.1" "系统管理命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+newusers \- 批量更新和创建新用户
+.SH "大纲"
+.HP \w'\fBnewusers\fR\ 'u
+\fBnewusers\fR [\fI选项\fR] [\fI文件\fR]
+.SH "描述"
+.PP
+The
+\fBnewusers\fR
+command reads a
+\fIfile\fR
+(or the standard input by default) and uses this information to update a set of existing users or to create new users\&. Each line is in the same format as the standard password file (see
+\fBpasswd\fR(5)) with the exceptions explained below:
+.PP
+pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell
+.PP
+\fIpw_name\fR
+.RS 4
+这是用户的用户名。
+.sp
+It can be the name of a new user or the name of an existing user (or a user created before by
+\fBnewusers\fR)\&. In case of an existing user, the user\*(Aqs information will be changed, otherwise a new user will be created\&.
+.RE
+.PP
+\fIpw_passwd\fR
+.RS 4
+此字段将被加密然后用于加密后密码的新值。
+.RE
+.PP
+\fIpw_uid\fR
+.RS 4
+此字段用于定义用户的 UID。
+.sp
+If the field is empty, a new (unused) UID will be defined automatically by
+\fBnewusers\fR\&.
+.sp
+如果此字段包含一个数字,此数字会用于 UID。
+.sp
+If this field contains the name of an existing user (or the name of a user created before by
+\fBnewusers\fR), the UID of the specified user will be used\&.
+.sp
+如果一个现有用户更改了 UID,此用户的文件所有权需要手动修复。
+.RE
+.PP
+\fIpw_gid\fR
+.RS 4
+此字段用于定义用户的主组 ID。
+.sp
+If this field contains the name of an existing group (or a group created before by
+\fBnewusers\fR), the GID of this group will be used as the primary group ID for the user\&.
+.sp
+如果此字段是一个数字,此数字会被用作此用户的主组 ID。如果没有对应此 GID 的现有组,将会使用此 GID 创建一个新组,名称和用户名相同。
+.sp
+If this field is empty, a new group will be created with the name of the user and a GID will be automatically defined by
+\fBnewusers\fR
+to be used as the primary group ID for the user and as the GID for the new group\&.
+.sp
+If this field contains the name of a group which does not exist (and was not created before by
+\fBnewusers\fR), a new group will be created with the specified name and a GID will be automatically defined by
+\fBnewusers\fR
+to be used as the primary group ID for the user and GID for the new group\&.
+.RE
+.PP
+\fIpw_gecos\fR
+.RS 4
+此字段复制到用户的 GECOS 字段。
+.RE
+.PP
+\fIpw_dir\fR
+.RS 4
+此字段用于定义用户的主目录。
+.sp
+如果此字段指定的不是现有的目录,将会创建指定的目录,所有权设置为创建或更新的用户及其主组。
+.sp
+If the home directory of an existing user is changed,
+\fBnewusers\fR
+does not move or copy the content of the old directory to the new location\&. This should be done manually\&.
+.RE
+.PP
+\fIpw_shell\fR
+.RS 4
+此字段定义了用户的 shell。对此字段不进行任何检查。
+.RE
+.PP
+\fBnewusers\fR
+first tries to create or change all the specified users, and then write these changes to the user or group databases\&. If an error occurs (except in the final writes to the databases), no changes are committed to the databases\&.
+.PP
+此命令一般用于在大型的应用环境中,对大量账户进行一次性更新。
+.SH "选项"
+.PP
+The options which apply to the
+\fBnewusers\fR
+command are:
+.PP
+\fB\-\-badname\fR\ \&
+.RS 4
+Allow names that do not conform to standards\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+使用指定的方法加密密码。
+.sp
+可用的方法有 DES, MD5, NONE, and SHA256 或 SHA512,前提是您的 libc 支持这写方法。
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+现实帮助信息并退出。
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+创建一个系统账户。
+.sp
+System users will be created with no aging information in
+/etc/shadow, and their numeric identifiers are chosen in the
+\fBSYS_UID_MIN\fR\-\fBSYS_UID_MAX\fR
+range, defined in
+login\&.defs, instead of
+\fBUID_MIN\fR\-\fBUID_MAX\fR
+(and their
+\fBGID\fR
+counterparts for the creation of groups)\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+使用指定次数的轮转来加密密码。
+.sp
+值 0 表示让系统为加密方法选择默认的轮转次数 (5000)。
+.sp
+会强制最小 1,000,最大 9,9999,9999
+.sp
+您只可以对 SHA256 或 SHA512 使用此选项。
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "CAVEATS"
+.PP
+输入文件必须受到保护,因为它包含未加密的密码。
+.PP
+您需要确保你吗和加密方法符合系统的密码策略。
+.SH "配置文件"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+这定义了系统加密密码的默认算法(如果没有在命令行上指定算法)。
+.sp
+It can take one of these values:
+\fIDES\fR
+(default),
+\fIMD5\fR, \fISHA256\fR, \fISHA512\fR\&.
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBGID_MIN\fR
+(resp\&.
+\fBGID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBHOME_MODE\fR (number)
+.RS 4
+The mode for new home directories\&. If not specified, the
+\fBUMASK\fR
+is used to create the mode\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this to set the mode of the home directory they create\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+默认值是 0,意味着组中的成员数没有限制。
+.sp
+此功能(分割组)允许限制组文件中的行长度。这对于确保 NIS 组的行比长于 1024 字符。
+.sp
+如果要强制这个限制,可以使用 25。
+.sp
+注意:分割组可能不受所有工具的支持(甚至在 Shadow 工具集中)。您不应该使用这个变量,除非真的需要。
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\*(Aqt understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superseded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+一个密码可以使用的最大天数。如果密码比这旧,将会强迫更改密码。如果不指定,就假定为 \-1,这会禁用这个限制。
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+两次更改密码时间的最小间隔。将会拒绝任何早于此的更改密码的尝试。如果不指定,假定为 \-1,将会禁用这个限制。
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+密码过期之前给出警告的天数。0 表示只有只在过期的当天警告,负值表示不警告。如果没有指定,不会给警告。
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+使用很多轮转,会让暴力破解更加困难。但是需要注意,认证用户时也会需要更多的 CPU 资源。
+.sp
+如果没有指定,libc 会选择默认的轮转数(5000)。
+.sp
+值必须在 1000 \- 999,999,999 之间。
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.PP
+\fBSUB_GID_MIN\fR (number), \fBSUB_GID_MAX\fR (number), \fBSUB_GID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate group IDs) allocate
+\fBSUB_GID_COUNT\fR
+unused group IDs from the range
+\fBSUB_GID_MIN\fR
+to
+\fBSUB_GID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR,
+\fBSUB_GID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSUB_UID_MIN\fR (number), \fBSUB_UID_MAX\fR (number), \fBSUB_UID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate user IDs) allocate
+\fBSUB_UID_COUNT\fR
+unused user IDs from the range
+\fBSUB_UID_MIN\fR
+to
+\fBSUB_UID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR,
+\fBSUB_UID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_GID_MIN\fR
+(resp\&.
+\fBSYS_GID_MAX\fR) is 101 (resp\&.
+\fBGID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_UID_MIN\fR
+(resp\&.
+\fBSYS_UID_MAX\fR) is 101 (resp\&.
+\fBUID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBUID_MIN\fR
+(resp\&.
+\fBUID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+文件模式创建掩码初始化为此值。如果没有指定,掩码初始化为 022。
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create if
+\fBHOME_MODE\fR
+is not set\&.
+.sp
+It is also used by
+\fBlogin\fR
+to define users\*(Aq initial umask\&. Note that this mask can be overridden by the user\*(Aqs GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.SH "文件"
+.PP
+/etc/passwd
+.RS 4
+用户账户信息。
+.RE
+.PP
+/etc/shadow
+.RS 4
+安全用户账户信息。
+.RE
+.PP
+/etc/group
+.RS 4
+组账户信息。
+.RE
+.PP
+/etc/gshadow
+.RS 4
+安全组账户信息。
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow 密码套件配置。
+.RE
+.PP
+/etc/subgid
+.RS 4
+Per user subordinate group IDs\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+Per user subordinate user IDs\&.
+.RE
+.SH "参见"
+.PP
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(1),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuseradd\fR(8)\&.
diff --git a/man/zh_CN/man8/nologin.8 b/man/zh_CN/man8/nologin.8
new file mode 100644
index 0000000..d07348f
--- /dev/null
+++ b/man/zh_CN/man8/nologin.8
@@ -0,0 +1,55 @@
+'\" t
+.\" Title: nologin
+.\" Author: Nicolas Fran\(,cois <nicolas.francois@centraliens.net>
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 系统管理命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "NOLOGIN" "8" "2020-01-23" "shadow\-utils 4\&.8\&.1" "系统管理命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+nologin \- 礼貌地拒绝登录
+.SH "大纲"
+.HP \w'\fBnologin\fR\ 'u
+\fBnologin\fR
+.SH "描述"
+.PP
+The
+\fBnologin\fR
+command displays a message that an account is not available and exits non\-zero\&. It is intended as a replacement shell field for accounts that have been disabled\&.
+.PP
+To disable all logins, investigate
+\fBnologin\fR(5)\&.
+.PP
+If
+\fBSSH_ORIGINAL_COMMAND\fR
+is populated it will be logged\&.
+.SH "参见"
+.PP
+\fBlogin\fR(1),
+\fBnologin\fR(5)\&.
+.SH "历史"
+.PP
+The
+\fBnologin\fR
+command appeared in BSD 4\&.4\&.
diff --git a/man/zh_CN/man8/pwck.8 b/man/zh_CN/man8/pwck.8
new file mode 100644
index 0000000..8544184
--- /dev/null
+++ b/man/zh_CN/man8/pwck.8
@@ -0,0 +1,328 @@
+'\" t
+.\" Title: pwck
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 系统管理命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "PWCK" "8" "2020-01-23" "shadow\-utils 4\&.8\&.1" "系统管理命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+pwck \- 检查密码文件的完整性
+.SH "大纲"
+.HP \w'\fBpwck\fR\ 'u
+\fBpwck\fR [选项] [\fIpasswd\fR\ [\ \fIshadow\fR\ ]]
+.SH "描述"
+.PP
+The
+\fBpwck\fR
+command verifies the integrity of the users and authentication information\&. It checks that all entries in
+/etc/passwd
+and
+/etc/shadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+检查的项目有:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+正确的字段数
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+一个唯一且有效的用户名
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+一个有效的用户和组标识符
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+有效的主组
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+有效的主目录
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+有效的登录 shell
+.RE
+.PP
+shadow
+checks are enabled when a second file parameter is specified or when
+/etc/shadow
+exists on the system\&.
+.PP
+这些检查是:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+每个密码项都有对应的影子相,反之亦然。
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+密码在影子化了的文件中指定
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+影子项有正确的字段数。
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+影子项在影子文件中是唯一的
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+最后一次的密码更改时间不是被设成了一个将来的时间。
+.RE
+.PP
+The checks for correct number of fields and unique user name are fatal\&. If the entry has the wrong number of fields, the user will be prompted to delete the entire line\&. If the user does not answer affirmatively, all further checks are bypassed\&. An entry with a duplicated user name is prompted for deletion, but the remaining checks will still be made\&. All other errors are warning and the user is encouraged to run the
+\fBusermod\fR
+command to correct the error\&.
+.PP
+The commands which operate on the
+/etc/passwd
+file are not able to alter corrupted or duplicated entries\&.
+\fBpwck\fR
+should be used in those circumstances to remove the offending entry\&.
+.SH "选项"
+.PP
+The
+\fB\-r\fR
+and
+\fB\-s\fR
+options cannot be combined\&.
+.PP
+The options which apply to the
+\fBpwck\fR
+command are:
+.PP
+\fB\-\-badname\fR\ \&
+.RS 4
+Allow names that do not conform to standards\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+现实帮助信息并退出。
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+只报告错误。不显示那些不需要用户操作的警告。
+.RE
+.PP
+\fB\-r\fR, \fB\-\-read\-only\fR
+.RS 4
+Execute the
+\fBpwck\fR
+command in read\-only mode\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sort\fR
+.RS 4
+Sort entries in
+/etc/passwd
+and
+/etc/shadow
+by UID\&.
+.RE
+.PP
+By default,
+\fBpwck\fR
+operates on the files
+/etc/passwd
+and
+/etc/shadow\&. The user may select alternate files with the
+\fIpasswd\fR
+and
+\fIshadow\fR
+parameters\&.
+.SH "配置文件"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+一个密码可以使用的最大天数。如果密码比这旧,将会强迫更改密码。如果不指定,就假定为 \-1,这会禁用这个限制。
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+两次更改密码时间的最小间隔。将会拒绝任何早于此的更改密码的尝试。如果不指定,假定为 \-1,将会禁用这个限制。
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+密码过期之前给出警告的天数。0 表示只有只在过期的当天警告,负值表示不警告。如果没有指定,不会给警告。
+.RE
+.SH "文件"
+.PP
+/etc/group
+.RS 4
+组账户信息。
+.RE
+.PP
+/etc/passwd
+.RS 4
+用户账户信息。
+.RE
+.PP
+/etc/shadow
+.RS 4
+安全用户账户信息。
+.RE
+.SH "退出值"
+.PP
+The
+\fBpwck\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI2\fR
+.RS 4
+one or more bad password entries
+.RE
+.PP
+\fI3\fR
+.RS 4
+can\*(Aqt open password files
+.RE
+.PP
+\fI4\fR
+.RS 4
+can\*(Aqt lock password files
+.RE
+.PP
+\fI5\fR
+.RS 4
+can\*(Aqt update password files
+.RE
+.PP
+\fI6\fR
+.RS 4
+can\*(Aqt sort password files
+.RE
+.SH "参见"
+.PP
+\fBgroup\fR(5),
+\fBgrpck\fR(8),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/zh_CN/man8/pwconv.8 b/man/zh_CN/man8/pwconv.8
new file mode 100644
index 0000000..0b6f41e
--- /dev/null
+++ b/man/zh_CN/man8/pwconv.8
@@ -0,0 +1,193 @@
+'\" t
+.\" Title: pwconv
+.\" Author: Marek Micha\(/lkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 系统管理命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "PWCONV" "8" "2020-01-23" "shadow\-utils 4\&.8\&.1" "系统管理命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+pwconv, pwunconv, grpconv, grpunconv \- 在影子密码和组以及其它直接转换
+.SH "大纲"
+.HP \w'\fBpwconv\fR\ 'u
+\fBpwconv\fR [\fI选项\fR]
+.HP \w'\fBpwunconv\fR\ 'u
+\fBpwunconv\fR [\fI选项\fR]
+.HP \w'\fBgrpconv\fR\ 'u
+\fBgrpconv\fR [\fI选项\fR]
+.HP \w'\fBgrpunconv\fR\ 'u
+\fBgrpunconv\fR [\fI选项\fR]
+.SH "描述"
+.PP
+The
+\fBpwconv\fR
+command creates
+\fIshadow\fR
+from
+\fIpasswd\fR
+and an optionally existing
+\fIshadow\fR\&.
+.PP
+The
+\fBpwunconv\fR
+command creates
+\fIpasswd\fR
+from
+\fIpasswd\fR
+and
+\fIshadow\fR
+and then removes
+\fIshadow\fR\&.
+.PP
+The
+\fBgrpconv\fR
+command creates
+\fIgshadow\fR
+from
+\fIgroup\fR
+and an optionally existing
+\fIgshadow\fR\&.
+.PP
+The
+\fBgrpunconv\fR
+command creates
+\fIgroup\fR
+from
+\fIgroup\fR
+and
+\fIgshadow\fR
+and then removes
+\fIgshadow\fR\&.
+.PP
+These four programs all operate on the normal and shadow password and group files:
+/etc/passwd,
+/etc/group,
+/etc/shadow, and
+/etc/gshadow\&.
+.PP
+Each program acquires the necessary locks before conversion\&.
+\fBpwconv\fR
+and
+\fBgrpconv\fR
+are similar\&. First, entries in the shadowed file which don\*(Aqt exist in the main file are removed\&. Then, shadowed entries which don\*(Aqt have `x\*(Aq as the password in the main file are updated\&. Any missing shadowed entries are added\&. Finally, passwords in the main file are replaced with `x\*(Aq\&. These programs can be used for initial conversion as well to update the shadowed file if the main file is edited by hand\&.
+.PP
+\fBpwconv\fR
+will use the values of
+\fIPASS_MIN_DAYS\fR,
+\fIPASS_MAX_DAYS\fR, and
+\fIPASS_WARN_AGE\fR
+from
+/etc/login\&.defs
+when adding new entries to
+/etc/shadow\&.
+.PP
+Likewise
+\fBpwunconv\fR
+and
+\fBgrpunconv\fR
+are similar\&. Passwords in the main file are updated from the shadowed file\&. Entries which exist in the main file but not in the shadowed file are left alone\&. Finally, the shadowed file is removed\&. Some password aging information is lost by
+\fBpwunconv\fR\&. It will convert what it can\&.
+.SH "选项"
+.PP
+The options which apply to the
+\fBpwconv\fR,
+\fBpwunconv\fR,
+\fBgrpconv\fR, and
+\fBgrpunconv\fR
+commands are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+现实帮助信息并退出。
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.SH "缺陷"
+.PP
+Errors in the password or group files (such as invalid or duplicate entries) may cause these programs to loop forever or fail in other strange ways\&. Please run
+\fBpwck\fR
+and
+\fBgrpck\fR
+to correct any such errors before converting to or from shadow passwords or groups\&.
+.SH "配置文件"
+.PP
+The following configuration variable in
+/etc/login\&.defs
+changes the behavior of
+\fBgrpconv\fR
+and
+\fBgrpunconv\fR:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+默认值是 0,意味着组中的成员数没有限制。
+.sp
+此功能(分割组)允许限制组文件中的行长度。这对于确保 NIS 组的行比长于 1024 字符。
+.sp
+如果要强制这个限制,可以使用 25。
+.sp
+注意:分割组可能不受所有工具的支持(甚至在 Shadow 工具集中)。您不应该使用这个变量,除非真的需要。
+.RE
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of
+\fBpwconv\fR:
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+一个密码可以使用的最大天数。如果密码比这旧,将会强迫更改密码。如果不指定,就假定为 \-1,这会禁用这个限制。
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+两次更改密码时间的最小间隔。将会拒绝任何早于此的更改密码的尝试。如果不指定,假定为 \-1,将会禁用这个限制。
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+密码过期之前给出警告的天数。0 表示只有只在过期的当天警告,负值表示不警告。如果没有指定,不会给警告。
+.RE
+.SH "文件"
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow 密码套件配置。
+.RE
+.SH "参见"
+.PP
+\fBgrpck\fR(8),
+\fBlogin.defs\fR(5),
+\fBpwck\fR(8)\&.
diff --git a/man/zh_CN/man8/pwunconv.8 b/man/zh_CN/man8/pwunconv.8
new file mode 100644
index 0000000..6eed9e8
--- /dev/null
+++ b/man/zh_CN/man8/pwunconv.8
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/zh_CN/man8/sulogin.8 b/man/zh_CN/man8/sulogin.8
new file mode 100644
index 0000000..a8acbf7
--- /dev/null
+++ b/man/zh_CN/man8/sulogin.8
@@ -0,0 +1,116 @@
+'\" t
+.\" Title: sulogin
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 系统管理命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "SULOGIN" "8" "2020-01-23" "shadow\-utils 4\&.8\&.1" "系统管理命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+sulogin \- Single\-user login
+.SH "SYNTAX"
+.PP
+\fBsulogin\fR
+[\fItty\-device\fR]
+.SH "描述"
+.PP
+The
+\fBsulogin\fR
+command is invoked by
+\fBinit\fR
+prior to allowing the user access to the system when in single user mode\&. This feature may only be available on certain systems where
+\fBinit\fR
+has been modified accordingly, or where the
+/etc/inittab
+has an entry for a single user login\&.
+.PP
+The user is prompted
+.PP
+Type control\-d to proceed with normal startup,
+(or give root password for system maintenance):
+.PP
+Input and output will be performed with the standard file descriptors unless the optional device name argument is provided\&.
+.PP
+If the user enters the correct root password, a login session is initiated\&. When
+\fIEOF\fR
+is pressed instead, the system enters multi\-user mode\&.
+.PP
+After the user exits the single\-user shell, or presses
+\fIEOF\fR, the system begins the initialization process required to enter multi\-user mode\&.
+.SH "CAVEATS"
+.PP
+This command can only be used if
+\fBinit\fR
+has been modified to call
+\fBsulogin\fR
+instead of
+/bin/sh, or if the user has set the
+\fIinittab\fR
+to support a single user login\&. For example, the line:
+.PP
+co:s:respawn:/etc/sulogin /dev/console
+.PP
+should execute the sulogin command in single user mode\&.
+.PP
+As complete an environment as possible is created\&. However, various devices may be unmounted or uninitialized and many of the user commands may be unavailable or nonfunctional as a result\&.
+.SH "配置文件"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.SH "文件"
+.PP
+/etc/passwd
+.RS 4
+用户账户信息。
+.RE
+.PP
+/etc/shadow
+.RS 4
+安全用户账户信息。
+.RE
+.SH "参见"
+.PP
+\fBlogin\fR(1),
+\fBsh\fR(1),
+\fBinit\fR(8)\&.
diff --git a/man/zh_CN/man8/useradd.8 b/man/zh_CN/man8/useradd.8
new file mode 100644
index 0000000..ea0f7b1
--- /dev/null
+++ b/man/zh_CN/man8/useradd.8
@@ -0,0 +1,784 @@
+'\" t
+.\" Title: useradd
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 系统管理命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "USERADD" "8" "2020-01-23" "shadow\-utils 4\&.8\&.1" "系统管理命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+useradd \- 创建一个新用户或更新默认新用户信息
+.SH "大纲"
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR [\fI选项\fR] \fI登录\fR
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR \-D
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR \-D [\fI选项\fR]
+.SH "描述"
+.PP
+When invoked without the
+\fB\-D\fR
+option, the
+\fBuseradd\fR
+command creates a new user account using the values specified on the command line plus the default values from the system\&. Depending on command line options, the
+\fBuseradd\fR
+command will update system files and may also create the new user\*(Aqs home directory and copy initial files\&.
+.PP
+By default, a group will also be created for the new user (see
+\fB\-g\fR,
+\fB\-N\fR,
+\fB\-U\fR, and
+\fBUSERGROUPS_ENAB\fR)\&.
+.SH "选项"
+.PP
+The options which apply to the
+\fBuseradd\fR
+command are:
+.PP
+\fB\-\-badname\fR\ \&
+.RS 4
+Allow names that do not conform to standards\&.
+.RE
+.PP
+\fB\-b\fR, \fB\-\-base\-dir\fR\ \&\fIBASE_DIR\fR
+.RS 4
+The default base directory for the system if
+\fB\-d\fR\ \&\fIHOME_DIR\fR
+is not specified\&.
+\fIBASE_DIR\fR
+is concatenated with the account name to define the home directory\&. If the
+\fB\-m\fR
+option is not used,
+\fIBASE_DIR\fR
+must exist\&.
+.sp
+If this option is not specified,
+\fBuseradd\fR
+will use the base directory specified by the
+\fBHOME\fR
+variable in
+/etc/default/useradd, or
+/home
+by default\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-comment\fR\ \&\fICOMMENT\fR
+.RS 4
+任何字符串。通常是关于登录的简短描述,当前用于用户全名。
+.RE
+.PP
+\fB\-d\fR, \fB\-\-home\-dir\fR\ \&\fIHOME_DIR\fR
+.RS 4
+The new user will be created using
+\fIHOME_DIR\fR
+as the value for the user\*(Aqs login directory\&. The default is to append the
+\fILOGIN\fR
+name to
+\fIBASE_DIR\fR
+and use that as the login directory name\&. The directory
+\fIHOME_DIR\fR
+does not have to exist but will not be created if it is missing\&.
+.RE
+.PP
+\fB\-D\fR, \fB\-\-defaults\fR
+.RS 4
+看下边,\(lq更改默认值\(rq子节。
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+The date on which the user account will be disabled\&. The date is specified in the format
+\fIYYYY\-MM\-DD\fR\&.
+.sp
+If not specified,
+\fBuseradd\fR
+will use the default expiry date specified by the
+\fBEXPIRE\fR
+variable in
+/etc/default/useradd, or an empty string (no expiry) by default\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+密码过期后,账户被彻底禁用之前的天数。0 表示立即禁用,\-1 表示禁用这个功能。
+.sp
+If not specified,
+\fBuseradd\fR
+will use the default inactivity period specified by the
+\fBINACTIVE\fR
+variable in
+/etc/default/useradd, or \-1 by default\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGROUP\fR
+.RS 4
+用户初始登陆组的组名或号码。组名必须已经存在。组号码必须指代已经存在的组。
+.sp
+If not specified, the behavior of
+\fBuseradd\fR
+will depend on the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&. If this variable is set to
+\fIyes\fR
+(or
+\fB\-U/\-\-user\-group\fR
+is specified on the command line), a group will be created for the user, with the same name as her loginname\&. If the variable is set to
+\fIno\fR
+(or
+\fB\-N/\-\-no\-user\-group\fR
+is specified on the command line), useradd will set the primary group of the new user to the value specified by the
+\fBGROUP\fR
+variable in
+/etc/default/useradd, or 100 by default\&.
+.RE
+.PP
+\fB\-G\fR, \fB\-\-groups\fR\ \&\fIGROUP1\fR[\fI,GROUP2,\&.\&.\&.\fR[\fI,GROUPN\fR]]]
+.RS 4
+A list of supplementary groups which the user is also a member of\&. Each group is separated from the next by a comma, with no intervening whitespace\&. The groups are subject to the same restrictions as the group given with the
+\fB\-g\fR
+option\&. The default is for the user to belong only to the initial group\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+现实帮助信息并退出。
+.RE
+.PP
+\fB\-k\fR, \fB\-\-skel\fR\ \&\fISKEL_DIR\fR
+.RS 4
+The skeleton directory, which contains files and directories to be copied in the user\*(Aqs home directory, when the home directory is created by
+\fBuseradd\fR\&.
+.sp
+This option is only valid if the
+\fB\-m\fR
+(or
+\fB\-\-create\-home\fR) option is specified\&.
+.sp
+If this option is not set, the skeleton directory is defined by the
+\fBSKEL\fR
+variable in
+/etc/default/useradd
+or, by default,
+/etc/skel\&.
+.sp
+如果可以,也复制 ACL 和扩展属性。
+.RE
+.PP
+\fB\-K\fR, \fB\-\-key\fR\ \&\fIKEY\fR=\fIVALUE\fR
+.RS 4
+Overrides
+/etc/login\&.defs
+defaults (\fBUID_MIN\fR,
+\fBUID_MAX\fR,
+\fBUMASK\fR,
+\fBPASS_MAX_DAYS\fR
+and others)\&.
+
+Example:
+\fB\-K\fR\ \&\fIPASS_MAX_DAYS\fR=\fI\-1\fR
+can be used when creating system account to turn off password aging, even though system account has no password at all\&. Multiple
+\fB\-K\fR
+options can be specified, e\&.g\&.:
+\fB\-K\fR\ \&\fIUID_MIN\fR=\fI100\fR\ \&
+\fB\-K\fR\ \&\fIUID_MAX\fR=\fI499\fR
+.RE
+.PP
+\fB\-l\fR, \fB\-\-no\-log\-init\fR
+.RS 4
+不要将用户添加到最近登录和登录失败数据库。
+.sp
+By default, the user\*(Aqs entries in the lastlog and faillog databases are reset to avoid reusing the entry from a previously deleted user\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-create\-home\fR
+.RS 4
+Create the user\*(Aqs home directory if it does not exist\&. The files and directories contained in the skeleton directory (which can be defined with the
+\fB\-k\fR
+option) will be copied to the home directory\&.
+.sp
+By default, if this option is not specified and
+\fBCREATE_HOME\fR
+is not enabled, no home directories are created\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-no\-create\-home\fR
+.RS 4
+Do no create the user\*(Aqs home directory, even if the system wide setting from
+/etc/login\&.defs
+(\fBCREATE_HOME\fR) is set to
+\fIyes\fR\&.
+.RE
+.PP
+\fB\-N\fR, \fB\-\-no\-user\-group\fR
+.RS 4
+Do not create a group with the same name as the user, but add the user to the group specified by the
+\fB\-g\fR
+option or by the
+\fBGROUP\fR
+variable in
+/etc/default/useradd\&.
+.sp
+The default behavior (if the
+\fB\-g\fR,
+\fB\-N\fR, and
+\fB\-U\fR
+options are not specified) is defined by the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+允许使用重复的 UID 创建用户账户。
+.sp
+This option is only valid in combination with the
+\fB\-u\fR
+option\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&. The default is to disable the password\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+您应该确保密码符合系统的密码政策。
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+创建一个系统账户。
+.sp
+System users will be created with no aging information in
+/etc/shadow, and their numeric identifiers are chosen in the
+\fBSYS_UID_MIN\fR\-\fBSYS_UID_MAX\fR
+range, defined in
+/etc/login\&.defs, instead of
+\fBUID_MIN\fR\-\fBUID_MAX\fR
+(and their
+\fBGID\fR
+counterparts for the creation of groups)\&.
+.sp
+Note that
+\fBuseradd\fR
+will not create a home directory for such a user, regardless of the default setting in
+/etc/login\&.defs
+(\fBCREATE_HOME\fR)\&. You have to specify the
+\fB\-m\fR
+options if you want a home directory for a system account to be created\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+The name of the user\*(Aqs login shell\&. The default is to leave this field blank, which causes the system to select the default login shell specified by the
+\fBSHELL\fR
+variable in
+/etc/default/useradd, or an empty string by default\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-uid\fR\ \&\fIUID\fR
+.RS 4
+The numerical value of the user\*(Aqs ID\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&. The default is to use the smallest ID value greater than or equal to
+\fBUID_MIN\fR
+and greater than every other user\&.
+.sp
+See also the
+\fB\-r\fR
+option and the
+\fBUID_MAX\fR
+description\&.
+.RE
+.PP
+\fB\-U\fR, \fB\-\-user\-group\fR
+.RS 4
+创建一个和用户同名的组,并将用户添加到组中。
+.sp
+The default behavior (if the
+\fB\-g\fR,
+\fB\-N\fR, and
+\fB\-U\fR
+options are not specified) is defined by the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR\ \&\fISEUSER\fR
+.RS 4
+用户登陆的 SELinux 用户。默认为留空,这会造成系统选择默认的 SELinux 用户。
+.RE
+.SS "更改默认值"
+.PP
+When invoked with only the
+\fB\-D\fR
+option,
+\fBuseradd\fR
+will display the current default values\&. When invoked with
+\fB\-D\fR
+plus other options,
+\fBuseradd\fR
+will update the default values for the specified options\&. Valid default\-changing options are:
+.PP
+\fB\-b\fR, \fB\-\-base\-dir\fR\ \&\fIBASE_DIR\fR
+.RS 4
+The path prefix for a new user\*(Aqs home directory\&. The user\*(Aqs name will be affixed to the end of
+\fIBASE_DIR\fR
+to form the new user\*(Aqs home directory name, if the
+\fB\-d\fR
+option is not used when creating a new account\&.
+.sp
+This option sets the
+\fBHOME\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+禁用此用户账户的日期。
+.sp
+This option sets the
+\fBEXPIRE\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+密码过期到账户被禁用之前的天数。
+.sp
+This option sets the
+\fBINACTIVE\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGROUP\fR
+.RS 4
+The group name or ID for a new user\*(Aqs initial group (when the
+\fB\-N/\-\-no\-user\-group\fR
+is used or when the
+\fBUSERGROUPS_ENAB\fR
+variable is set to
+\fIno\fR
+in
+/etc/login\&.defs)\&. The named group must exist, and a numerical group ID must have an existing entry\&.
+.sp
+This option sets the
+\fBGROUP\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+新用户的登录 shell 名。
+.sp
+This option sets the
+\fBSHELL\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.SH "注意:"
+.PP
+The system administrator is responsible for placing the default user files in the
+/etc/skel/
+directory (or any other skeleton directory specified in
+/etc/default/useradd
+or on the command line)\&.
+.SH "CAVEATS"
+.PP
+您可能不能想 NIS 组或 LDAP 组添加用户。这只能在相应服务器上进行。
+.PP
+Similarly, if the username already exists in an external user database such as NIS or LDAP,
+\fBuseradd\fR
+will deny the user account creation request\&.
+.PP
+用户名必须以一个小写字母或下划线开始,跟随小写字符、数字、下划线或连字符的组合。可以以美元符号结束。用正则表达式表示就是:[a\-z_][a\-z0\-9_\-]*[$]?
+.PP
+用户名不能超过 32 个字符长。
+.SH "配置文件"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCREATE_HOME\fR (boolean)
+.RS 4
+指示是否应该为新用户默认创建主目录。
+.sp
+此设置并不应用到系统用户,并且可以使用命令行覆盖。
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBGID_MIN\fR
+(resp\&.
+\fBGID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBHOME_MODE\fR (number)
+.RS 4
+The mode for new home directories\&. If not specified, the
+\fBUMASK\fR
+is used to create the mode\&.
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this to set the mode of the home directory they create\&.
+.RE
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+邮箱目录。修改或删除用户账户时需要处理邮箱,如果没有指定,将使用编译时指定的默认值。
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+定义用户邮箱文件的位置(相对于主目录)。
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+默认值是 0,意味着组中的成员数没有限制。
+.sp
+此功能(分割组)允许限制组文件中的行长度。这对于确保 NIS 组的行比长于 1024 字符。
+.sp
+如果要强制这个限制,可以使用 25。
+.sp
+注意:分割组可能不受所有工具的支持(甚至在 Shadow 工具集中)。您不应该使用这个变量,除非真的需要。
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+一个密码可以使用的最大天数。如果密码比这旧,将会强迫更改密码。如果不指定,就假定为 \-1,这会禁用这个限制。
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+两次更改密码时间的最小间隔。将会拒绝任何早于此的更改密码的尝试。如果不指定,假定为 \-1,将会禁用这个限制。
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+密码过期之前给出警告的天数。0 表示只有只在过期的当天警告,负值表示不警告。如果没有指定,不会给警告。
+.RE
+.PP
+\fBSUB_GID_MIN\fR (number), \fBSUB_GID_MAX\fR (number), \fBSUB_GID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate group IDs) allocate
+\fBSUB_GID_COUNT\fR
+unused group IDs from the range
+\fBSUB_GID_MIN\fR
+to
+\fBSUB_GID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR,
+\fBSUB_GID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSUB_UID_MIN\fR (number), \fBSUB_UID_MAX\fR (number), \fBSUB_UID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate user IDs) allocate
+\fBSUB_UID_COUNT\fR
+unused user IDs from the range
+\fBSUB_UID_MIN\fR
+to
+\fBSUB_UID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR,
+\fBSUB_UID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_GID_MIN\fR
+(resp\&.
+\fBSYS_GID_MAX\fR) is 101 (resp\&.
+\fBGID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBSYS_UID_MIN\fR
+(resp\&.
+\fBSYS_UID_MAX\fR) is 101 (resp\&.
+\fBUID_MIN\fR\-1)\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.sp
+The default value for
+\fBUID_MIN\fR
+(resp\&.
+\fBUID_MAX\fR) is 1000 (resp\&. 60000)\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+文件模式创建掩码初始化为此值。如果没有指定,掩码初始化为 022。
+.sp
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create if
+\fBHOME_MODE\fR
+is not set\&.
+.sp
+It is also used by
+\fBlogin\fR
+to define users\*(Aq initial umask\&. Note that this mask can be overridden by the user\*(Aqs GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+如果 uid 和 gid 相同,用户名和主用户名也相同,使非 root 组的组掩码位和属主位相同 (如:022 \-> 002, 077 \-> 007)。
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "文件"
+.PP
+/etc/passwd
+.RS 4
+用户账户信息。
+.RE
+.PP
+/etc/shadow
+.RS 4
+安全用户账户信息。
+.RE
+.PP
+/etc/group
+.RS 4
+组账户信息。
+.RE
+.PP
+/etc/gshadow
+.RS 4
+安全组账户信息。
+.RE
+.PP
+/etc/default/useradd
+.RS 4
+账户创建的默认值。
+.RE
+.PP
+/etc/skel/
+.RS 4
+包含默认文件的目录。
+.RE
+.PP
+/etc/subgid
+.RS 4
+Per user subordinate group IDs\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+Per user subordinate user IDs\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow 密码套件配置。
+.RE
+.SH "退出值"
+.PP
+The
+\fBuseradd\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+can\*(Aqt update password file
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+UID already in use (and no
+\fB\-o\fR)
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified group doesn\*(Aqt exist
+.RE
+.PP
+\fI9\fR
+.RS 4
+username already in use
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.PP
+\fI12\fR
+.RS 4
+can\*(Aqt create home directory
+.RE
+.PP
+\fI14\fR
+.RS 4
+can\*(Aqt update SELinux user mapping
+.RE
+.SH "参见"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBnewusers\fR(8),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/zh_CN/man8/userdel.8 b/man/zh_CN/man8/userdel.8
new file mode 100644
index 0000000..3c91432
--- /dev/null
+++ b/man/zh_CN/man8/userdel.8
@@ -0,0 +1,308 @@
+'\" t
+.\" Title: userdel
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 系统管理命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "USERDEL" "8" "2020-01-23" "shadow\-utils 4\&.8\&.1" "系统管理命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+userdel \- 删除用户账户和相关文件
+.SH "大纲"
+.HP \w'\fBuserdel\fR\ 'u
+\fBuserdel\fR [选项] \fI登录\fR
+.SH "描述"
+.PP
+The
+\fBuserdel\fR
+command modifies the system account files, deleting all entries that refer to the user name
+\fILOGIN\fR\&. The named user must exist\&.
+.SH "选项"
+.PP
+The options which apply to the
+\fBuserdel\fR
+command are:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option forces the removal of the user account, even if the user is still logged in\&. It also forces
+\fBuserdel\fR
+to remove the user\*(Aqs home directory and mail spool, even if another user uses the same home directory or if the mail spool is not owned by the specified user\&. If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs
+and if a group exists with the same name as the deleted user, then this group will be removed, even if it is still the primary group of another user\&.
+.sp
+\fINote:\fR
+This option is dangerous and may leave your system in an inconsistent state\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+现实帮助信息并退出。
+.RE
+.PP
+\fB\-r\fR, \fB\-\-remove\fR
+.RS 4
+用户主目录中的文件将随用户主目录和用户邮箱一起删除。在其它文件系统中的文件必须手动搜索并删除。
+.sp
+The mail spool is defined by the
+\fBMAIL_DIR\fR
+variable in the
+login\&.defs
+file\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR
+.RS 4
+移除用户登录的所有 SELinux 用户映射。
+.RE
+.SH "配置文件"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+邮箱目录。修改或删除用户账户时需要处理邮箱,如果没有指定,将使用编译时指定的默认值。
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+定义用户邮箱文件的位置(相对于主目录)。
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+默认值是 0,意味着组中的成员数没有限制。
+.sp
+此功能(分割组)允许限制组文件中的行长度。这对于确保 NIS 组的行比长于 1024 字符。
+.sp
+如果要强制这个限制,可以使用 25。
+.sp
+注意:分割组可能不受所有工具的支持(甚至在 Shadow 工具集中)。您不应该使用这个变量,除非真的需要。
+.RE
+.PP
+\fBUSERDEL_CMD\fR (string)
+.RS 4
+如果定义了,这是删除账户时执行的命令。它应该移除所有属于此用户的的 at/cron/print 等作业(作为第一个参数传递)。
+.sp
+这个脚本的返回值并不被带到账户中去。
+.sp
+Here is an example script, which removes the user\*(Aqs cron, at and print jobs:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#! /bin/sh
+
+# Check for the required argument\&.
+if [ $# != 1 ]; then
+ echo "Usage: $0 username"
+ exit 1
+fi
+
+# Remove cron jobs\&.
+crontab \-r \-u $1
+
+# Remove at jobs\&.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username\&.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR \-name "[^\&.]*" \-type f \-user $1 \-delete \e;
+
+# Remove print jobs\&.
+lprm $1
+
+# All done\&.
+exit 0
+
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+如果 uid 和 gid 相同,用户名和主用户名也相同,使非 root 组的组掩码位和属主位相同 (如:022 \-> 002, 077 \-> 007)。
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\*(Aqs group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "文件"
+.PP
+/etc/group
+.RS 4
+组账户信息。
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow 密码套件配置。
+.RE
+.PP
+/etc/passwd
+.RS 4
+用户账户信息。
+.RE
+.PP
+/etc/shadow
+.RS 4
+安全用户账户信息。
+.RE
+.PP
+/etc/subgid
+.RS 4
+Per user subordinate group IDs\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+Per user subordinate user IDs\&.
+.RE
+.SH "退出值"
+.PP
+The
+\fBuserdel\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+can\*(Aqt update password file
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified user doesn\*(Aqt exist
+.RE
+.PP
+\fI8\fR
+.RS 4
+user currently logged in
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\*(Aqt update group file
+.RE
+.PP
+\fI12\fR
+.RS 4
+can\*(Aqt remove home directory
+.RE
+.SH "CAVEATS"
+.PP
+\fBuserdel\fR
+will not allow you to remove an account if there are running processes which belong to this account\&. In that case, you may have to kill those processes or lock the user\*(Aqs password or account and remove the account later\&. The
+\fB\-f\fR
+option can force the deletion of this account\&.
+.PP
+您应该手动检查所以文件系统,以确保没有遗留此用户的文件。
+.PP
+您不能在 NIS 客户端上移除任何 NIS 属性。这必须在 NIS 服务器上执行。
+.PP
+If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs,
+\fBuserdel\fR
+will delete the group with the same name as the user\&. To avoid inconsistencies in the passwd and group databases,
+\fBuserdel\fR
+will check that this group is not used as a primary group for another user, and will just warn without deleting the group otherwise\&. The
+\fB\-f\fR
+option can force the deletion of this group\&.
+.SH "参见"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBlogin.defs\fR(5),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuseradd\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/zh_CN/man8/usermod.8 b/man/zh_CN/man8/usermod.8
new file mode 100644
index 0000000..270df0a
--- /dev/null
+++ b/man/zh_CN/man8/usermod.8
@@ -0,0 +1,469 @@
+'\" t
+.\" Title: usermod
+.\" Author: Julianne Frances Haugh
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 系统管理命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "USERMOD" "8" "2020-01-23" "shadow\-utils 4\&.8\&.1" "系统管理命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+usermod \- 修改一个用户账户
+.SH "大纲"
+.HP \w'\fBusermod\fR\ 'u
+\fBusermod\fR [\fI选项\fR] \fI登录\fR
+.SH "描述"
+.PP
+The
+\fBusermod\fR
+command modifies the system account files to reflect the changes that are specified on the command line\&.
+.SH "选项"
+.PP
+The options which apply to the
+\fBusermod\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-append\fR
+.RS 4
+Add the user to the supplementary group(s)\&. Use only with the
+\fB\-G\fR
+option\&.
+.RE
+.PP
+\fB\-b\fR, \fB\-\-badnames\fR
+.RS 4
+Allow names that do not conform to standards\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-comment\fR\ \&\fICOMMENT\fR
+.RS 4
+The new value of the user\*(Aqs password file comment field\&. It is normally modified using the
+\fBchfn\fR(1)
+utility\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-home\fR\ \&\fIHOME_DIR\fR
+.RS 4
+用户的新登录目录。
+.sp
+If the
+\fB\-m\fR
+option is given, the contents of the current home directory will be moved to the new home directory, which is created if it does not already exist\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\ \&\fIEXPIRE_DATE\fR
+.RS 4
+The date on which the user account will be disabled\&. The date is specified in the format
+\fIYYYY\-MM\-DD\fR\&.
+.sp
+An empty
+\fIEXPIRE_DATE\fR
+argument will disable the expiration of the account\&.
+.sp
+This option requires a
+/etc/shadow
+file\&. A
+/etc/shadow
+entry will be created if there were none\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\ \&\fIINACTIVE\fR
+.RS 4
+密码过期之后,账户被彻底禁用之前的天数。
+.sp
+0 表示密码过期时,立即禁用账户;\-1 表示不使用这个功能。
+.sp
+This option requires a
+/etc/shadow
+file\&. A
+/etc/shadow
+entry will be created if there were none\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\ \&\fIGROUP\fR
+.RS 4
+用户的新初始登录组的组名或数字代号。此组必须存在。
+.sp
+用户主目录中,属于原来的主组的文件将转交新组所有。
+.sp
+主目录之外的文件所属的组必须手动修改。
+.RE
+.PP
+\fB\-G\fR, \fB\-\-groups\fR\ \&\fIGROUP1\fR[\fI,GROUP2,\&.\&.\&.\fR[\fI,GROUPN\fR]]]
+.RS 4
+A list of supplementary groups which the user is also a member of\&. Each group is separated from the next by a comma, with no intervening whitespace\&. The groups are subject to the same restrictions as the group given with the
+\fB\-g\fR
+option\&.
+.sp
+If the user is currently a member of a group which is not listed, the user will be removed from the group\&. This behaviour can be changed via the
+\fB\-a\fR
+option, which appends the user to the current supplementary group list\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-login\fR\ \&\fINEW_LOGIN\fR
+.RS 4
+The name of the user will be changed from
+\fILOGIN\fR
+to
+\fINEW_LOGIN\fR\&. Nothing else is changed\&. In particular, the user\*(Aqs home directory or mail spool should probably be renamed manually to reflect the new login name\&.
+.RE
+.PP
+\fB\-L\fR, \fB\-\-lock\fR
+.RS 4
+Lock a user\*(Aqs password\&. This puts a \*(Aq!\*(Aq in front of the encrypted password, effectively disabling the password\&. You can\*(Aqt use this option with
+\fB\-p\fR
+or
+\fB\-U\fR\&.
+.sp
+Note: if you wish to lock the account (not only access with a password), you should also set the
+\fIEXPIRE_DATE\fR
+to
+\fI1\fR\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-move\-home\fR
+.RS 4
+将用户的主目录移动到新位置。
+.sp
+This option is only valid in combination with the
+\fB\-d\fR
+(or
+\fB\-\-home\fR) option\&.
+.sp
+\fBusermod\fR
+will try to adapt the ownership of the files and to copy the modes, ACL and extended attributes, but manual changes might be needed afterwards\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+When used with the
+\fB\-u\fR
+option, this option allows to change the user ID to a non\-unique value\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\ \&\fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&.
+.sp
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+您应该确保密码符合系统的密码政策。
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-P\fR, \fB\-\-prefix\fR\ \&\fIPREFIX_DIR\fR
+.RS 4
+Apply changes in the
+\fIPREFIX_DIR\fR
+directory and use the configuration files from the
+\fIPREFIX_DIR\fR
+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\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\ \&\fISHELL\fR
+.RS 4
+用户的新登录 shell 的名称。将此字段设置为空会让系统选择默认的登录 shell。
+.RE
+.PP
+\fB\-u\fR, \fB\-\-uid\fR\ \&\fIUID\fR
+.RS 4
+用户 ID 的新数值。
+.sp
+This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&.
+.sp
+用户的邮箱,用户主目录中属于此用户的文件的属主 ID 也将自动更改。
+.sp
+用户主目录之外文件所有权必须手动修复。
+.sp
+No checks will be performed with regard to the
+\fBUID_MIN\fR,
+\fBUID_MAX\fR,
+\fBSYS_UID_MIN\fR, or
+\fBSYS_UID_MAX\fR
+from
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-U\fR, \fB\-\-unlock\fR
+.RS 4
+Unlock a user\*(Aqs password\&. This removes the \*(Aq!\*(Aq in front of the encrypted password\&. You can\*(Aqt use this option with
+\fB\-p\fR
+or
+\fB\-L\fR\&.
+.sp
+Note: if you wish to unlock the account (not only access with a password), you should also set the
+\fIEXPIRE_DATE\fR
+(for example to
+\fI99999\fR, or to the
+\fBEXPIRE\fR
+value from
+/etc/default/useradd)\&.
+.RE
+.PP
+\fB\-v\fR, \fB\-\-add\-subuids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Add a range of subordinate uids to the user\*(Aqs account\&.
+.sp
+This option may be specified multiple times to add multiple ranges to a users account\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR, or
+\fBSUB_UID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-V\fR, \fB\-\-del\-subuids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Remove a range of subordinate uids from the user\*(Aqs account\&.
+.sp
+This option may be specified multiple times to remove multiple ranges to a users account\&. When both
+\fB\-\-del\-subuids\fR
+and
+\fB\-\-add\-subuids\fR
+are specified, the removal of all subordinate uid ranges happens before any subordinate uid range is added\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR, or
+\fBSUB_UID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-add\-subgids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Add a range of subordinate gids to the user\*(Aqs account\&.
+.sp
+This option may be specified multiple times to add multiple ranges to a users account\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR, or
+\fBSUB_GID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-W\fR, \fB\-\-del\-subgids\fR\ \&\fIFIRST\fR\-\fILAST\fR
+.RS 4
+Remove a range of subordinate gids from the user\*(Aqs account\&.
+.sp
+This option may be specified multiple times to remove multiple ranges to a users account\&. When both
+\fB\-\-del\-subgids\fR
+and
+\fB\-\-add\-subgids\fR
+are specified, the removal of all subordinate gid ranges happens before any subordinate gid range is added\&.
+.sp
+No checks will be performed with regard to
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR, or
+\fBSUB_GID_COUNT\fR
+from /etc/login\&.defs\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR\ \&\fISEUSER\fR
+.RS 4
+用户登陆的 SELinux 用户。
+.sp
+A blank
+\fISEUSER\fR
+will remove the SELinux user mapping for user
+\fILOGIN\fR
+(if any)\&.
+.RE
+.SH "CAVEATS"
+.PP
+You must make certain that the named user is not executing any processes when this command is being executed if the user\*(Aqs numerical user ID, the user\*(Aqs name, or the user\*(Aqs home directory is being changed\&.
+\fBusermod\fR
+checks this on Linux\&. On other platforms it only uses utmp to check if the user is logged in\&.
+.PP
+You must change the owner of any
+\fBcrontab\fR
+files or
+\fBat\fR
+jobs manually\&.
+.PP
+您必须更改 NIS 服务器上的 NIS 相关内容。
+.SH "配置文件"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBLASTLOG_UID_MAX\fR (number)
+.RS 4
+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\&.
+.sp
+No
+\fBLASTLOG_UID_MAX\fR
+option present in the configuration means that there is no user ID limit for writing lastlog entries\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+邮箱目录。修改或删除用户账户时需要处理邮箱,如果没有指定,将使用编译时指定的默认值。
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+定义用户邮箱文件的位置(相对于主目录)。
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\*(Aqs mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+默认值是 0,意味着组中的成员数没有限制。
+.sp
+此功能(分割组)允许限制组文件中的行长度。这对于确保 NIS 组的行比长于 1024 字符。
+.sp
+如果要强制这个限制,可以使用 25。
+.sp
+注意:分割组可能不受所有工具的支持(甚至在 Shadow 工具集中)。您不应该使用这个变量,除非真的需要。
+.RE
+.PP
+\fBSUB_GID_MIN\fR (number), \fBSUB_GID_MAX\fR (number), \fBSUB_GID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate group IDs) allocate
+\fBSUB_GID_COUNT\fR
+unused group IDs from the range
+\fBSUB_GID_MIN\fR
+to
+\fBSUB_GID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_GID_MIN\fR,
+\fBSUB_GID_MAX\fR,
+\fBSUB_GID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.PP
+\fBSUB_UID_MIN\fR (number), \fBSUB_UID_MAX\fR (number), \fBSUB_UID_COUNT\fR (number)
+.RS 4
+If
+/etc/subuid
+exists, the commands
+\fBuseradd\fR
+and
+\fBnewusers\fR
+(unless the user already have subordinate user IDs) allocate
+\fBSUB_UID_COUNT\fR
+unused user IDs from the range
+\fBSUB_UID_MIN\fR
+to
+\fBSUB_UID_MAX\fR
+for each new user\&.
+.sp
+The default values for
+\fBSUB_UID_MIN\fR,
+\fBSUB_UID_MAX\fR,
+\fBSUB_UID_COUNT\fR
+are respectively 100000, 600100000 and 65536\&.
+.RE
+.SH "文件"
+.PP
+/etc/group
+.RS 4
+组账户信息。
+.RE
+.PP
+/etc/gshadow
+.RS 4
+安全组账户信息。
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow 密码套件配置。
+.RE
+.PP
+/etc/passwd
+.RS 4
+用户账户信息。
+.RE
+.PP
+/etc/shadow
+.RS 4
+安全用户账户信息。
+.RE
+.PP
+/etc/subgid
+.RS 4
+Per user subordinate group IDs\&.
+.RE
+.PP
+/etc/subuid
+.RS 4
+Per user subordinate user IDs\&.
+.RE
+.SH "参见"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBsubgid\fR(5), \fBsubuid\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8)\&.
diff --git a/man/zh_CN/man8/vigr.8 b/man/zh_CN/man8/vigr.8
new file mode 100644
index 0000000..ff72d7a
--- /dev/null
+++ b/man/zh_CN/man8/vigr.8
@@ -0,0 +1 @@
+.so man8/vipw.8
diff --git a/man/zh_CN/man8/vipw.8 b/man/zh_CN/man8/vipw.8
new file mode 100644
index 0000000..971d955
--- /dev/null
+++ b/man/zh_CN/man8/vipw.8
@@ -0,0 +1,137 @@
+'\" t
+.\" Title: vipw
+.\" Author: Marek Micha\(/lkiewicz
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 2020-01-23
+.\" Manual: 系统管理命令
+.\" Source: shadow-utils 4.8.1
+.\" Language: Chinese Simplified
+.\"
+.TH "VIPW" "8" "2020-01-23" "shadow\-utils 4\&.8\&.1" "系统管理命令"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "名称"
+vipw, vigr \- 编辑密码、组、影子密码或影子组文件。
+.SH "大纲"
+.HP \w'\fBvipw\fR\ 'u
+\fBvipw\fR [\fI选项\fR]
+.HP \w'\fBvigr\fR\ 'u
+\fBvigr\fR [\fI选项\fR]
+.SH "描述"
+.PP
+The
+\fBvipw\fR
+and
+\fBvigr\fR
+commands edits the files
+/etc/passwd
+and
+/etc/group, respectively\&. With the
+\fB\-s\fR
+flag, they will edit the shadow versions of those files,
+/etc/shadow
+and
+/etc/gshadow, respectively\&. The programs will set the appropriate locks to prevent file corruption\&. When looking for an editor, the programs will first try the environment variable
+\fB$VISUAL\fR, then the environment variable
+\fB$EDITOR\fR, and finally the default editor,
+\fBvi\fR(1)\&.
+.SH "选项"
+.PP
+The options which apply to the
+\fBvipw\fR
+and
+\fBvigr\fR
+commands are:
+.PP
+\fB\-g\fR, \fB\-\-group\fR
+.RS 4
+编辑 group 数据库。
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+现实帮助信息并退出。
+.RE
+.PP
+\fB\-p\fR, \fB\-\-passwd\fR
+.RS 4
+编辑 passwd 数据库。
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+安静模式。
+.RE
+.PP
+\fB\-R\fR, \fB\-\-root\fR\ \&\fICHROOT_DIR\fR
+.RS 4
+Apply changes in the
+\fICHROOT_DIR\fR
+directory and use the configuration files from the
+\fICHROOT_DIR\fR
+directory\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shadow\fR
+.RS 4
+编辑 shadow 或 gshadow 数据库。
+.RE
+.SH "环境变量"
+.PP
+\fBVISUAL\fR
+.RS 4
+要使用的编辑器。
+.RE
+.PP
+\fBEDITOR\fR
+.RS 4
+Editor to be used if
+\fBVISUAL\fR
+is not set\&.
+.RE
+.SH "文件"
+.PP
+/etc/group
+.RS 4
+组账户信息。
+.RE
+.PP
+/etc/gshadow
+.RS 4
+安全组账户信息。
+.RE
+.PP
+/etc/passwd
+.RS 4
+用户账户信息。
+.RE
+.PP
+/etc/shadow
+.RS 4
+安全用户账户信息。
+.RE
+.SH "参见"
+.PP
+\fBvi\fR(1),
+\fBgroup\fR(5),
+\fBgshadow\fR(5)
+,
+\fBpasswd\fR(5), ,
+\fBshadow\fR(5)\&.
diff --git a/man/zh_TW/Makefile.am b/man/zh_TW/Makefile.am
new file mode 100644
index 0000000..c36ed2c
--- /dev/null
+++ b/man/zh_TW/Makefile.am
@@ -0,0 +1,18 @@
+# man pages encoded in Big5
+mandir = @mandir@/zh_TW
+
+man_MANS = \
+ man1/chfn.1 \
+ man1/chsh.1 \
+ man8/chpasswd.8 \
+ man1/newgrp.1 \
+ man8/groupadd.8 \
+ man8/groupdel.8 \
+ man8/groupmod.8 \
+ man5/passwd.5 \
+ man1/su.1 \
+ man8/useradd.8 \
+ man8/userdel.8 \
+ man8/usermod.8
+
+EXTRA_DIST = $(man_MANS)
diff --git a/man/zh_TW/Makefile.in b/man/zh_TW/Makefile.in
new file mode 100644
index 0000000..91a7be2
--- /dev/null
+++ b/man/zh_TW/Makefile.in
@@ -0,0 +1,662 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = man/zh_TW
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" \
+ "$(DESTDIR)$(man8dir)"
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+
+# man pages encoded in Big5
+mandir = @mandir@/zh_TW
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = \
+ man1/chfn.1 \
+ man1/chsh.1 \
+ man8/chpasswd.8 \
+ man1/newgrp.1 \
+ man8/groupadd.8 \
+ man8/groupdel.8 \
+ man8/groupmod.8 \
+ man5/passwd.5 \
+ man1/su.1 \
+ man8/useradd.8 \
+ man8/userdel.8 \
+ man8/usermod.8
+
+EXTRA_DIST = $(man_MANS)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/zh_TW/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign man/zh_TW/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+install-man5: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man5dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.5[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man5:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man5dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.5[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir)
+install-man8: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man8dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.8[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man8:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man8dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.8[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-man5 install-man8 install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+ uninstall-am uninstall-man uninstall-man1 uninstall-man5 \
+ uninstall-man8
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/zh_TW/man1/chfn.1 b/man/zh_TW/man1/chfn.1
new file mode 100644
index 0000000..b84668f
--- /dev/null
+++ b/man/zh_TW/man1/chfn.1
@@ -0,0 +1,58 @@
+.\" $Id$
+.\" (c) 1994 by salvatore valente <svalente@athena.mit.edu>
+.\"
+.\" this program is free software. you can redistribute it and
+.\" modify it under the terms of the gnu general public license.
+.\" there is no warranty.
+.TH CHFN 1 "October 13 1994" "chfn" "Linux Reference Manual"
+.SH 名稱
+chfn \- 改 變 你 的 finger 訊 息
+.SH 語法
+.B chfn
+[\ \-f\ full\-name\ ] [\ \-o\ office\ ] [\ \-p\ office\-phone\ ]
+[\ \-h\ home\-phone\ ] [\ \-u\ ] [\ \-v\ ] [\ username\ ]
+.SH 描述
+.B chfn
+是 用 來 改 變 你 的 finger 訊 息 。 訊 息 是 存 放 在
+.I /etc/passwd 檔 內 。 可 藉 由
+.B finger
+來 顯 示 你 的 訊 息 。 Linux
+.B finger
+命 令 會 顯 示 四 段 訊 息 , 這 些 訊 息 均 可 藉 由
+.B chfn
+改 變
+: 真 實 姓 名 , 工 作 地 點 電 話 , 及 你 家 的 電 話 。
+.SS 命令列
+每 一 段 訊 息 均 可 在 命 令 列 上 指 定 。 如 沒 有 給 定 訊 息 ,
+.B chfn
+進 入 交 談 模 式
+.SS INTERACTIVE MODE
+交談模式
+.B chfn
+會 在 每 一 欄 前 提 示 。 在 提 示 狀 態 下 , 你 就 可 輸 入 新 的 訊 息 或
+是 按 return 而 不 改 變 。
+輸 入 "none" 則 表 示 該 欄 空 白 。
+.SH 選項
+.TP
+.I "\-f, \-\-full\-name"
+真 實 姓 名
+.TP
+.I "\-h, \-\-home\-phone"
+家 裡 的 電 話
+.TP
+.I "\-o, \-\-office"
+辦 工 室 號 碼
+.TP
+.I "\-p, \-\-office\-phone"
+辦 公 室 電 話
+.TP
+.I "\-u, \-\-help"
+秀 出 使 用 說 明 短 訊 。
+.TP
+.I "\-v, \-\-version"
+秀 出 版 本 訊 息 。
+.SH "相關文件"
+.BR finger (1),
+.BR passwd (5)
+.SH 作者
+Salvatore Valente <svalente@mit.edu>
diff --git a/man/zh_TW/man1/chsh.1 b/man/zh_TW/man1/chsh.1
new file mode 100644
index 0000000..2a934c0
--- /dev/null
+++ b/man/zh_TW/man1/chsh.1
@@ -0,0 +1,45 @@
+.\" $Id$
+.\" (c) 1994 by salvatore valente <svalente@athena.mit.edu>
+.\"
+.\" this program is free software. you can redistribute it and
+.\" modify it under the terms of the gnu general public license.
+.\" there is no warranty.
+.TH CHSH 1 "October 13 1994" "chsh" "Linux Reference Manual"
+.SH 名稱
+chsh \- 更換你登入時所用的shell
+.SH 語法
+.B chsh
+[\ \-s\ shell\ ] [\ \-l\ ] [\ \-u\ ] [\ \-v\ ] [\ username\ ]
+.SH 描述
+.B chsh
+用來更換你登入時所用的shell
+。在命令列沒指定shell。
+.B chsh
+會提示一個給你。
+.SS 有效的shell
+.B chsh
+可用指定路徑全名的方式來指定任何一個可執行的檔案。
+然而,如果此 shell並沒紀錄在
+.I /etc/shells
+檔上,則chsh會提出警告訊息。
+.SH 選項
+.TP
+.I "\-l, \-\-list\-shells"
+列出紀錄在
+.I /etc/shells
+的shell。
+.TP
+.I "\-s, \-\-shell"
+變更你的登入shell.
+.TP
+.I "\-u, \-\-help"
+使用短訊。
+.TP
+.I "\-v, \-\-version"
+版本資訊
+.SH "相關文件"
+.BR login (1),
+.BR passwd (5),
+.BR shells (5)
+.SH 作者
+Salvatore Valente <svalente@mit.edu>
diff --git a/man/zh_TW/man1/newgrp.1 b/man/zh_TW/man1/newgrp.1
new file mode 100644
index 0000000..3fb79f6
--- /dev/null
+++ b/man/zh_TW/man1/newgrp.1
@@ -0,0 +1,38 @@
+.\" Original author unknown. This man page is in the public domain.
+.\" Modified Sat Oct 9 17:46:48 1993 by faith@cs.unc.edu
+.TH NEWGRP 1 "9 October 1993" "Linux 1.2" "Linux Programmer's Manual"
+
+.SH NAME
+newgrp \- 登入到新的使用者組中
+
+.SH "總覽 (SYNOPSIS)"
+.BI "newgrp [ " group " ]"
+
+.SH "描述 (DESCRIPTION)"
+.B Newgrp
+改變 調用者 的 使用者組標識, 類似於
+.BR login (1).
+調用者 仍舊 登入 在 系統 中, 當前目錄 也不變, 但是 檔案的訪問權限 將 根據
+新的 使用者組 ID 計算.
+.LP
+如果 沒有 指定 使用者組, GID 將 變成 登入 的 GID.
+.LP
+
+.SH "檔案 (FILES)"
+.I /etc/group
+.br
+.I /etc/passwd
+
+.SH "另見 (SEE ALSO)"
+.BR login "(1), " group (5)
+
+.SH "作者 (AUTHOR)"
+Originally by Michael Haardt. Currently maintained by
+Peter Orbaek (poe@daimi.aau.dk).
+
+.SH "[中文版維護人]"
+.B 徐明 <xuming@users.sourceforge.net>
+.SH "[中文版最新更新]"
+.BR 2003/05/13
+.SH "《中國Linux論壇man手冊頁翻譯計劃》"
+.BI http://cmpp.linuxforum.net
diff --git a/man/zh_TW/man1/su.1 b/man/zh_TW/man1/su.1
new file mode 100644
index 0000000..964d3d2
--- /dev/null
+++ b/man/zh_TW/man1/su.1
@@ -0,0 +1,62 @@
+.TH SU "1" "1999年8月" "GNU sh-utils 2.0" FSF
+.SH NAME(名稱)
+su \- 運行替換使用者和組標識的shell
+.SH SYNOPSIS(總覽)
+.B su
+[\fIOPTION\fR]... [\fI-\fR] [\fIUSER \fR[\fIARG\fR]...]
+.SH DESCRIPTION(描述)
+.PP
+.PP
+修改有效使用者標識和組標識為USER的.
+.TP
+-, \fB\-l\fR, \fB\-\-login\fR
+使得shell為可登入的shell
+.TP
+\fB\-c\fR, \fB\-\-commmand\fR=\fICOMMAND\fR
+傳遞單個COMMAND給\fB\-c\fR的shell.
+.TP
+\fB\-f\fR, \fB\-\-fast\fR
+傳遞\fB\-f\fR給shell(針對csh或tcsh)
+.TP
+\fB\-m\fR, \fB\-\-preserve\-environment\fR
+不重置環境變量
+.TP
+\fB\-p\fR
+與\fB\-m\fR同
+.TP
+\fB\-s\fR, \fB\-\-shell\fR=\fISHELL\fR
+如果/etc/shells允許\,運行SHELL.
+.TP
+\fB\-\-help\fR
+顯示幫助並退出
+.TP
+\fB\-\-version\fR
+輸出版本信息並退出
+.PP
+單一的-意味著\fB\-l\fR.如果沒有給定USER,則假定為root.
+.SH (報告BUGS)
+報告bugs,請發郵件到bug-sh-utils@gnu.org.
+.SH (另見)
+以Texinfo手冊形式維護的
+.B su
+完全文件.如果你正確地安裝了
+.B info
+和
+.B echo
+命令
+.IP
+.B info su
+.PP
+應該可以使你訪問到整個手冊.
+.SH COPYRIGHT(版權)
+版權所有 \(co 1999 Free Software Foundation, Inc.
+.br
+這是自由軟體;參看複製條件的源檔案.不作任何擔保,更不用說商品性或者基於特殊目的的適
+用性.
+
+.SH "[中文版維護人]"
+.B riser <boomer@ccidnet.com>
+.SH "[中文版最新更新]"
+.BR 2001/08/08
+.SH "《中國linux論壇man手冊頁翻譯計劃》:"
+.BI http://cmpp.linuxforum.net
diff --git a/man/zh_TW/man5/passwd.5 b/man/zh_TW/man5/passwd.5
new file mode 100644
index 0000000..57b5ea3
--- /dev/null
+++ b/man/zh_TW/man5/passwd.5
@@ -0,0 +1,132 @@
+.\" Copyright (c) 1993 Michael Haardt (michael@moria.de), Fri Apr 2 11:32:09 MET DST 1993
+.\" Chinese Version Copyright Scorpio, www.linuxforum.net, 2000
+.\"
+.\" This is free documentation; you can redistribute it and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation; either version 2 of
+.\" the License, or (at your option) any later version.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual is distributed in the hope that it will be useful,
+.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.\" GNU General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public
+.\" License along with this manual; if not, write to the Free
+.\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
+.\" USA.
+.\"
+.\" Modified Sun Jul 25 10:46:28 1993 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Aug 21 18:12:27 1994 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Jun 18 01:53:57 1995 by Andries Brouwer (aeb@cwi.nl)
+.\" Modified Mon Jan 5 20:24:40 MET 1998 by Michael Haardt
+.\" (michael@cantor.informatik.rwth-aachen.de)
+.TH PASSWD 5 "January 5, 1998" "" "File formats"
+.SH NAME 名稱
+passwd \- 密碼檔案
+.SH 描述
+.B Passwd
+是個純文字檔, 它包含了一個系統帳戶列表,
+給出每個帳戶一些有用的信息,比如使用者 ID,組 ID, 家目錄, shell,等.
+通常它也包含了每個使用者經過加密的密碼.
+它通常應該是可讀的(許\多命令,工具程式,像
+.BR ls (1)
+用它做使用者 Id 到使用者名稱的映射),但是只允許\超級使用者有寫方式權限.
+.PP
+在過去美好的日子裏,這種一般的讀許\可沒有什麼大問題.
+每個人都能讀到加密了的密碼,因為硬體太慢以至於不能解開一個
+精選的密碼,另外,這基本假定是為友好的使用團體使用的.
+現在,許\多人運行一些版本的影子密碼套件,它們在
+.I /etc/passwd
+的密碼域裏是 *,而不再是加密的口令,
+加密的口令放在
+.I /etc/shadow
+中,那個檔案只有超級使用者能讀.
+.PP
+不管是否使用了影子密碼,許\多系統管理員使用一個星號在加密的密碼字段
+以確保使用者不能鑒別他(她)自己的密碼. (見下面的注意)
+.PP
+如果你建立了一個新的登入,首先放個星號在密碼字段,
+然後使用
+.BR passwd (1)
+設置它.
+.PP
+(密碼檔案)裏每行一條記錄,並且每行有這樣的格式:
+.sp
+.RS
+account:password:UID:GID:GECOS:directory:shell
+(帳號:密碼:使用者ID:組ID:一般的信息:目錄:shell)
+.RE
+.sp
+字段描述如下:
+.sp
+.RS
+.TP 1.0in
+.I account
+使用者在系統中的名字,它不能包含大寫字母.
+.TP
+.I password
+加密的使用者密碼,或者星號。
+.TP
+.I UID
+使用者 ID 數。
+.TP
+.I GID
+使用者的主要組 ID 數。
+.TP
+.I GECOS
+這字段是可選的,通常為了存放信息目的而設的.
+通常,它包含了使用者的全名. GECOS 意思是通用電氣綜合作業系統(General Electric
+Comprehensive Operating System), 當 GE 的大型系統部分割售賣給 Honeywell
+時它被改為 GCOS. Dennis Ritchie 作過報告:"有時我們發送印刷品或批道作業到
+GCOS機器時,gcos 字段打斷了 $IDENT 卡的信息,不太美觀。"(譯者:我想是太長吧)
+.TP
+.I directory
+使用者的 $HOME 目錄.
+.TP
+.I shell
+登入時運行的程式(如果空的,使用
+.BR /bin/sh ).
+如果設為不存在的執行(程式),使用者不能通過
+.BR login (1)
+登入.
+.RE
+.SH 注意
+如果你想建立使用者組,他們的 GID 必須相等並且一定是在
+\fI/etc/group\fP的一條記錄, 要不然組就不存在.
+.PP
+如果加密密碼設成星號,使用者將不能用
+.BR login (1)
+來登入, 但依然可以用
+.BR rlogin (1)
+登入, 通過
+.BR rsh (1)
+或者
+.BR cron (1)
+或者
+.BR at (1)
+或者 mail 過濾器等程式運行已有的進程和開始新的等.
+試圖通過簡單改變 shell 字段鎖住一個使用者結果是一樣的,
+而且還附上了使用
+.B su(1)
+的權限.
+.SH 相關檔案
+.I /etc/passwd
+.SH "又見"
+.BR passwd (1),
+.BR login (1),
+.BR su (1),
+.BR group (5),
+.BR shadow (5)
+.br
+.SH "[中文版維護人]"
+.B Scorpio <rawk@chinese.com>
+.SH "[中文版最新更新]"
+.B 2000/11/26
+.SH "《中國linux論壇man手冊頁翻譯計劃》:"
+.BI http://cmpp.linuxforum.net
diff --git a/man/zh_TW/man8/chpasswd.8 b/man/zh_TW/man8/chpasswd.8
new file mode 100644
index 0000000..068cf95
--- /dev/null
+++ b/man/zh_TW/man8/chpasswd.8
@@ -0,0 +1,69 @@
+.\" Copyright 1991, Julianne Frances Haugh
+.\" All rights reserved.
+.\"; 中文版版權所有 soloman, Laser www.linuxforum.net 2000
+.\"
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.\"
+.TH CHPASSWD 8
+.SH NAME
+chpasswd \- 成批更新使用者的口令
+.SH 總覽
+chpasswd [\-e]
+.SH 描述
+.B chpasswd
+從系統的標準輸入讀入使用者的名稱和口令,
+並利用這些信息來更新系統上已存在的使用者的口令。
+在沒有用 \-e 這個開關選項的情況下,口令將按明文的形式接收。
+如果使用了 \-e 選項,口令將只能以加密的方式傳遞。
+每行的具體格式如下所示:
+.sp 1
+ \fI使用者名\fR:\fI新口令\fR
+.sp 1
+使用者名必須是系統上已存在的使用者。
+輸入的密碼在必要時進行加密處理,
+如果口令檔案具有時間特性,則同時更新。
+.PP
+此命令適用於大型的系統,在此類系統中,
+使用者一般都是一次同時生成的,而用 adduser 和
+passwd 口令來對其一一進行設置一般說往往比較慢。
+.SH 注意事項
+.\" The \fBmkpasswd\fR command must be executed afterwards to update the
+.\" DBM password files.
+.\" This command may be discarded in favor of the newusers(8) command.
+因為可以使用檔案重定向進行輸入,
+即:chpasswd &lt; user&amp;passwd-filename,
+如果輸入檔案是按非加密方式傳遞的話,請對該檔案進行適當的加密。
+.SH 又見
+passwd(1),useradd(8),newuser(8)
+.SH 作者
+Julianne Frances Haugh (jfh@bga.com)
+
+.SH "[中文版維護人]"
+.B 所羅門 <solomen@email.com.cn>
+.SH "[中文版最新更新]"
+2000/11/26
+.SH "[中國 Linux 論壇 man 手冊頁翻譯計劃]"
+.BI http://cmpp.linuxforum.net
+
diff --git a/man/zh_TW/man8/groupadd.8 b/man/zh_TW/man8/groupadd.8
new file mode 100644
index 0000000..b88cb0a
--- /dev/null
+++ b/man/zh_TW/man8/groupadd.8
@@ -0,0 +1,88 @@
+.\" $Id$
+.\" Copyright 1991, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.TH GROUPADD 8
+.SH 名稱
+groupadd \- 建 立 新 群 組
+.SH 語法
+\fBgroupadd\fR [\fB\-g\fR \fIgid\fR [\fB\-o\fR]] [\fB\-f\fR] \fIgroup\fR
+.SH 描述
+\fBgroupadd\fR
+可 指 定 群 組 名 稱 來 建 立 新 的 群 組 帳 號 。
+需 要 時 可 從 系 統 中 取 得 新 群 組 值 。
+\fBgroupadd\fR 有 下 列 選 項 可 用 。
+.IP \fB\-f\fR
+This is \fIforce\fR flag.
+新 增 一 個 已 經 存 在 的 群 組 帳 號 , 系 統 會 出
+現 錯 誤 訊 息 然 後 結 束 \fBgroupadd\fR 。
+ 如 果 是 這 樣 的 情 況 , 不 會 新 增 這 個 群 組
+( 如 果 是 這 個 情 況 下 , 系 統 不 會 再 新 增 一 次 )
+.br
+也 可 同 時 加 上 \fB\-g\fR 選 項
+當 你 加 上 一 個 \fIgid\fR , 此 時 \fIgid\fR
+就 不 用 是 唯 一 值 , 可 不 加 \fB\-o\fR 參 數 ,
+建 好 群 組 後 會 顯 結 果
+(adding a group as neither \fB\-g\fR or \fB\-o\fR options were
+specified).
+
+.IP "\fB\-g \fIgid\fR"
+group's ID 值 。
+除 非 使 用 \fB\-o\fR 參 數 不 然 該 值 必 須 是 唯 一 , 不 可 相 同 。
+數 值 不 可 為 負 。
+預 設 為 最 小 不 得 小 於 500 而 逐 次 增 加 。 0~999 傳 統 上
+是 保 留 給 \fI系統帳號\fR 使 用 。
+.IP \fB\-r\fR
+此 參 數 是 用 來 建 立 \fI系統帳號\fR 。
+的 UID 會 比 定 義 在 系 統 檔 上 /etc/login.defs.
+的 UID_MIN 來 的 小 。 注 意 useradd 此 用 法 所 建
+立 的 帳 號 不 會 建 立 使 用 者 目 錄 , 也 不 會
+在 乎 紀 錄 在 /etc/login.defs. 的 定 義 值 。 如
+果 你 想 要 有 使 用 者 目 錄 須 額 外 指 定 \-m 參
+數 來 建 立 系 統 帳 號 。 這 是 RED HAT 額 外 增
+設 的 選 項 。
+它 會 自 動 幫 你 選 定 一 個 小 於 999 的 \fIgif\fR
+不 需 要 再 加 上 \fB\-g\fR 參 數 。
+.br
+這 是 RED HAT 額 外 增 設 的 選 項 。
+
+.br
+這 是 RED HAT 額 外 增 設 的 選 項 。
+.SH 檔案
+\fI/etc/group\fR \- 群 組 資 訊
+.br
+\fI/etc/gshadow\fR \- 群 組 資 訊 加 密
+.SH 相關文件
+.BR chfn (1),
+.BR chsh (1),
+.BR useradd (8),
+.BR userdel (8),
+.BR usermod (8),
+.BR passwd (1),
+.BR groupdel (8),
+.BR groupmod (8)
+.SH 作者
+Julianne Frances Haugh (jfh@tab.com)
diff --git a/man/zh_TW/man8/groupdel.8 b/man/zh_TW/man8/groupdel.8
new file mode 100644
index 0000000..ad79a2d
--- /dev/null
+++ b/man/zh_TW/man8/groupdel.8
@@ -0,0 +1,55 @@
+.\" $Id$
+.\" Copyright 1991 - 1993, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.TH GROUPDEL 8
+.SH 名稱
+groupdel \- 刪除群組
+.SH 語法
+.B groupdel
+.I group
+.SH 描述
+\fBgroupdel\fR 命令會修改系統帳號檔,會刪除所有已經存在的\fIgroup\fR.
+群組名須存在。
+.PP
+你須手動確認一下所有的檔案系統確保有沒有檔案還是沒修正群組名變成群組ID。
+.SH 警告
+如果有任何一個群組的使用者在線上的話就不能移除該群組。
+最好先移除使用者後再移除群組。
+.SH 檔案
+\fI/etc/group\fR \- 群組資訊
+\fI/etc/gshadow\fR \- 群組資訊加密
+.SH 相關文件
+.BR chfn (1),
+.BR chsh (1),
+.BR useradd (8),
+.BR userdel (8),
+.BR usermod (8),
+.BR passwd (1),
+.BR groupadd (8),
+.BR groupmod (8)
+.SH 作者
+Julianne Frances Haugh (jfh@tab.com)
diff --git a/man/zh_TW/man8/groupmod.8 b/man/zh_TW/man8/groupmod.8
new file mode 100644
index 0000000..2c1dae7
--- /dev/null
+++ b/man/zh_TW/man8/groupmod.8
@@ -0,0 +1,63 @@
+.\" $Id$
+.\" Copyright 1991, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.TH GROUPMOD 8
+.SH 名稱
+groupmod \- 修 改 群 組
+.SH 語法
+\fBgroupmod\fR [\fB\-g\fR \fIgid \fR[\fB\-o\fR]] [\fB\-n\fR \fIgroup_name \fR] \fIgroup\fR
+.SH 描述
+
+\fBgroupmod\fR 命 令 會 參 照 你 命 令 列 上 指 定 的 部 份
+修 改 系 統 帳 號 檔 。 下 列 為 \fIgroupmod\fR 可 選 用 的 參 數 。
+
+.IP "\fB\-g\fR \fIgid\fR"
+群 組 I D 值 。
+必 須 為 唯 一 的 ID 值 , 除 非 用 \-o 選 項 。
+數 字 不 可 為 負 值。預 設 為 最
+小 不 得 小 於 999 而 逐 次 增 加 。 0~ 499 傳 統 上
+是 保 留 給 系 統 帳 號 使 用 。
+如 果 有 檔 案 使 用 舊 的 群 組 ID , 而 這 時 候 你 新 增 的 群 組 ID
+恰 好 與 舊 的 相 同 , 這 樣 的 話
+你 要 手 動 改 一 下 這 些 檔 案 的 群 組 ID 。
+.IP "\fB\-n\fR \fIgroup_name\fR"
+更 改 群 組 名 。
+.SH 檔案
+\fI/etc/group\fR \- 群 組 資 訊
+.br
+\fI/etc/gshadow\fR \- 群 組 資 訊 加 密
+.SH 相關文件
+.BR chfn (1),
+.BR chsh (1),
+.BR useradd (8),
+.BR userdel (8),
+.BR usermod (8),
+.BR passwd (1),
+.BR groupadd (8),
+.BR groupdel (8)
+.SH 作者
+Julianne Frances Haugh (jfh@tab.com)
diff --git a/man/zh_TW/man8/useradd.8 b/man/zh_TW/man8/useradd.8
new file mode 100644
index 0000000..a0bfd0b
--- /dev/null
+++ b/man/zh_TW/man8/useradd.8
@@ -0,0 +1,184 @@
+.\" $Id$
+.\" Copyright 1991 \- 1994, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.TH USERADD 8
+.SH 名 稱
+useradd \- 帳 號 建 立 或 更 新 新 使 用 者 的 資 訊
+.SH 語 法
+.TP 8
+.B useradd
+.\" .RB [ \-A
+.\" .RI { method | \fBDEFAULT\fR "},... ]"
+.RB [ \-c
+.IR comment ]
+.RB [ \-d
+.IR home_dir ]
+.br
+.RB [ \-e
+.IR expire_date ]
+.RB [ \-f
+.IR inactive_time ]
+.br
+.RB [ \-g
+.IR initial_group ]
+.RB [ \-G
+.IR group [,...]]
+.br
+.RB [ \-m " [" \-k
+.IR skeleton_dir ] " |" " " \-M ]
+.RB [ \-s
+.IR shell ]
+.br
+.RB [ \-u
+.IR uid " ["
+.BR \-o ]]
+.RB [ \-n ]
+.RB [ \-r ]
+.I login
+.TP 8
+\fBuseradd\fR \fB\-D\fR [\fB\-g\fR \fIdefault_group\fR] [\fB\-b\fR \fIdefault_home\fR]
+.br
+[\fB\-f\fR \fIdefault_inactive\fR] [\fB\-e\fR \fIdefault_expire_date\fR]
+.br
+[\fB\-s\fR \fIdefault_shell\fR]
+.SH 描 述
+.SS 新 帳 號 建 立
+當 不 加 \fB\-D\fR 參 數 , \fBuseradd\fR 指 令 使 用 命 令 列 來 指 定
+新 帳 號 的 設 定 值 and 使 用 系 統 上 的 預 設 值 .
+新 使 用 者 帳 號 將 產 生 一 些 系 統 檔 案 , 使 用 者 目 錄 建 立 ,
+拷 備 起 始 檔 案 等
+, 這 些 均 可 以 利 用 命 令列 選 項 指 定 。 此 版 本 為 Red Hat Linux 提 供
+, 可 幫 每 個 新 加 入 的 使 用 者 建 立 個 別 的 group , 毋 須 添 加 \fB\-n\fR
+選 項 。
+\fBuseradd\fR 可 使 用 的 選 項 為
+.IP "\fB\-c\fR \fIcomment\fR"
+新 帳 號 password 檔 的 說 明 欄 。
+.IP "\fB\-d\fR \fIhome_dir\fR"
+新 帳 號 每 次 登 入 時 所 使 用 的 \fIhome_dir\fR 。
+預 設 值 為 \fIdefault_home\fR 內 \fIlogin\fR 名 稱 , 並 當 成 登 入 時 目 錄
+名 稱 。
+.IP "\fB\-e\fR \fIexpire_date\fR"
+帳 號 終 止 日 期 。 日 期 的 指 定 格 式 為 \fIMM/DD/YY\fR 。
+.IP "\fB\-f\fR \fIinactive_days\fR"
+帳 號 過 期 幾 日 後 永 久 停 權 。
+當 值 為 0 時 帳 號 則 立 刻 被 停 權 。
+而 當 值 為 \-1 時 則 關 閉 此 功\ 能 , 預 設 值 為 \-1
+.IP "\fB\-g\fR \fIinitial_group\fR"
+group 名 稱 或 以 數 字 來 做 為 使 用 者 登 入 起 始 群 組 (group) 。
+群 組 名 須 為 現 有 存 在 的 名 稱 。
+群 組 數 字 也 須 為 現 有 存 在 的 群 組 。
+預 設 的 群 組 數 字 為 1 。
+.IP "\fB\-G\fR \fIgroup,[...]\fR"
+定 義 此 使 用 者 為 此 一 堆 groups 的 成 員 。
+每 個 群 組 使 用 "," 區 格 開 來 , 不 可 以 夾 雜 空 白 字 元 。
+ 群 組 名 同 \fB\-g\fR 選 項 的 限 制 。
+定 義 值 為 使用 者 的 起 始 群 組 。
+.IP \fB\-m\fR
+使 用 者 目 錄 如 不 存 在 則 自 動 建 立 。
+如 使 用 \fB\-k\fR 選 項 \fIskeleton_dir\fR 內 的 檔 案 將 複 製 至 使 用 者 目
+錄 下 。
+然 而 在 \fI/etc/skel\fR 目 錄 下 的 檔 案 也 會 複 製 過 去 取 代 。
+任 何 在 \fIskeleton_dir\fR or \fI/etc/skel\fR 的 目 錄 也 相 同 會 在 使 用 者
+目 錄 下 一 一 建 立 。
+The \fB\-k\fR 同 \fB\-m\fR
+不 建 立 目 錄 以 及 不 複 製 任 何 檔 案 為 預 設 值 。
+.IP \fB\-M\fR
+不 建 立 使 用 者 目 錄 , 即 使 \fI/etc/login.defs\fR 系 統 檔 設 定 要 建
+立 使 用 者 目 錄 。
+.IP \fB\-n\fR
+預 設 值 使 用 者 群 組 與 使 用 者 名 稱 會 相 同 。 此 選 項 將 取 消 此 預
+設 值 。
+.IP \fB\-r\fR
+此 參 數 是 用 來 建 立 系 統 帳 號 。 系 統 帳 號 的 UID 會 比 定 義 在 系
+統 檔 上 \fI/etc/login.defs\fR.
+的 UID_MIN 來 的 小 。 注 意 \fBuseradd\fR 此 用 法 所 建 立 的 帳 號 不 會
+建 立 使 用 者 目 錄
+, 也 不 會 在 乎 紀 錄 在 \fI/etc/login.defs\fR. 的 定 義 值 。
+如 果 你 想 要 有 使 用 者 目 錄 須 額 外 指 定 \fB\-m\fR 參 數 來 建 立 系
+統 帳 號 。
+這 是 RED HAT 額 外 增 設 的 選 項 。
+.IP "\fB\-s\fR \fIshell\fR"
+使 用 者 登 入 後 使 用 的 shell 名 稱 。
+預 設 為 不 填 寫 , 這 樣 系 統 會 幫 你 指 定 預 設 的 登 入 shell 。
+.IP "\fB\-u\fR \fIuid\fR"
+使 用 者 的 ID 值 。 必 須 為 唯 一 的 ID 值 , 除 非 用 \fI\-o\fR 選 項 。
+數 字 不 可 為 負 值。預 設 為 最 小 不 得 小 於 999 而 逐 次 增 加 。
+0~ 999 傳 統 上 是 保 留 給 系 統 帳 號 使 用 。
+
+.SS 改 變 預 設 值
+當 \fB\-D\fR 選 項 出 現 時 , \fBuseradd\fR 秀 出 現 在 的 預 設 值 , 或 是 藉
+由
+命 令 列 的 方 式 更 新 預 設 值 。
+可 用 選 項 為 :
+.IP "\fB\-b\fR \fIdefault_home\fR"
+定 義 使 用 者 所 屬 目 錄 的 前 一 個 目 錄 。
+使 用 者 名 稱 會 附 加 在 \fIdefault_home\fR 後 面
+用 來 建 立 新 使 用 者 的 目 錄 。
+當 然 使 用 \fB\-d\fI 後 則 此 選 項 無 效 。
+.IP "\fB\-e\fR \fIdefault_expire_date\fR"
+使 用 者 帳 號 停 止 日 期 。
+.IP "\fB\-f\fR \fIdefault_inactive\fR"
+帳 號 過 期 幾 日 後 停 權 。
+.IP "\fB\-g\fR \fIdefault_group\fR"
+新 帳 號 起 始 群 組 名 或 ID 。
+群 組 名 須 為 現 有 存 在 的 名 稱 。
+群 組 I D 也 須 為 現 有 存 在 的 群 組 。
+.IP "\fB\-s\fR \fIdefault_shell\fR"
+使 用 者 登 入 後 使 用 的 shell 名 稱 。
+往 後 新 加 入 的 帳 號 都 將 使 用 此 shell.
+.PP
+如 不 指 定 任 何 參 數 , \fBuseradd\fR 顯 示 目 前 預 設 的 值 。
+.SH 注 記
+系 統 管 理 者 有 義 務 在 \fI/etc/skel\fR 目 錄 下 放 置 使 用 者 定 義 檔 。
+.br
+此 版 本 『useradd』 由 Red Hat 修 改 。
+.SH 警 告
+不 可 新 增 使 用 者 於 NIS 群 組 中 。
+你 必 須 在 NIS 伺 服 器 上 執 行 。
+.SH 檔 案
+\fI/etc/passwd\fR \- 使 用 者 帳 號 資 訊
+.br
+\fI/etc/shadow\fR \- 使 用 者 帳 號 資 訊 加 密
+.br
+\fI/etc/group\fR \- 群 組 資 訊
+.br
+\fI/etc/default/useradd\fR \- 定 義 資 訊
+.br
+\fI/etc/login.defs\fR \- 系 統 廣 義 設 定
+.br
+\fI/etc/skel/\fR \- 內 含 定 義 檔 的 目 錄
+.SH SEE ALSO
+.BR chfn (1),
+.BR chsh (1),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR passwd (1),
+.BR userdel (8),
+.BR usermod (8)
+.SH AUTHOR
+Julianne Frances Haugh (jfh@tab.com)
diff --git a/man/zh_TW/man8/userdel.8 b/man/zh_TW/man8/userdel.8
new file mode 100644
index 0000000..1a255d5
--- /dev/null
+++ b/man/zh_TW/man8/userdel.8
@@ -0,0 +1,65 @@
+.\" $Id$
+.\" Copyright 1991 \- 1994, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.TH USERDEL 8
+.SH 名稱
+userdel \- 刪 除 使 用 者 帳 號 及 相 關 檔 案
+.SH 語法
+.B userdel
+[\fB\-r\fR]
+.I login
+.SH 描述
+\fBuserdel\fR 命 令 修 改 系 統 帳 號 檔
+刪 除 所 有 \fIlogin\fR 會 參 考 的 部 份 。
+使 用 者 名 稱 必 須是 存 在 的 。
+.IP \fB\-r\fR
+使 用 者 目 錄 下 的 檔 案 一 並 移 除 。 在 其 他 位 置 上 的 檔
+案 也 將 一 一 找 出 並 刪 除 。
+.SH 檔案
+\fI/etc/passwd\fR \- 使 用 者 帳 號 資 料
+.br
+\fI/etc/shadow\fR \- 使 用 者 帳 號 資 訊 加 密
+.br
+\fI/etc/group\fR \- 群 組 資 訊
+.SH 警告
+\fBuserdel\fR 不 允 許 你 移 除 正 在線 上
+的 使 用 者 帳 號 。
+你 必 須 砍 掉 此 帳 號 現 在 在 系 統 上 執 行 的 程 序 才 能 進 行 帳 號
+刪 除 。
+不 能 在 NIS client 端 移 除 NIS 屬 性 的 東 西 。
+這 動 做 須 在 NIS server 端 上 執 行 。
+.SH SEE ALSO
+.BR chfn (1),
+.BR chsh (1),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR passwd (1),
+.BR useradd (8),
+.BR usermod (8)
+.SH 作者
+Julianne Frances Haugh (jfh@tab.com)
diff --git a/man/zh_TW/man8/usermod.8 b/man/zh_TW/man8/usermod.8
new file mode 100644
index 0000000..1c52785
--- /dev/null
+++ b/man/zh_TW/man8/usermod.8
@@ -0,0 +1,129 @@
+.\" $Id$
+.\" Copyright 1991 \- 1994, Julianne Frances Haugh
+.\" 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. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH 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 JULIE HAUGH 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.
+.TH USERMOD 8
+.SH 名稱
+usermod \- 修 改 使 用 者 帳 號
+.SH 語法
+.TP 8
+.B usermod
+.\" .RB [ \-A
+.\" .RI { method | \fBDEFAULT\fR "},... ]"
+.RB [ \-c
+.IR comment ]
+.RB [ \-d
+.IR home_dir " ["
+.BR \-m ]]
+.br
+.RB [ \-e
+.IR expire_date ]
+.RB [ \-f
+.IR inactive_time ]
+.br
+.RB [ \-g
+.IR initial_group ]
+.RB [ \-G
+.IR group [,...]]
+.br
+.RB [ \-l
+.IR login_name ]
+.RB [ \-s
+.IR shell ]
+.br
+.RB [ \-u
+.IR uid " ["
+.BR \-o ]]
+.I login
+.SH 描述
+\fBusermod\fR 命 令 會 參 照 你 命 令 列 上 指 定 的 部 份 修 改 系 統 帳
+號 檔 。 下 列 為 \fBusermod\fR 可 選 用 的 參 數 。
+
+.\" .IP "\fB\-A \fImethod\fR|\fBDEFAULT\fR"
+.\" The new value of the user's authentication method.
+.\" The authentication method is the name of a program which is responsible
+.\" for validating the user's identity.
+.\" The string \fBDEFAULT\fR may be used to change the user's authentication
+.\" method to the standard system password method.
+.IP "\fB\-c\fR \fIcomment\fR"
+更 新 使 用 者 帳 號 password 檔 中 的 注 解 欄
+, 一 般 是 使 用 \fBchfn\fR(1) 來 修 改 。
+.IP "\fB\-d\fR \fIhome_dir\fR"
+更 新 使 用 者 新 的 登 入 目 錄 。
+如 果 給 定 \fB\-m\fR 選 項 , 使 用 者 舊 目 錄 會 搬 到 新 的 目 錄 去
+,如 舊 目 錄 不 存 在 則 建 個 新 的 。
+.IP "\fB\-e\fR \fIexpire_date\fR"
+加 上 使 用 者 帳 號 停 止 日 期 。 日 期 格 式 為 \fIMM/DD/YY\fR.
+.IP "\fB\-f\fR \fIinactive_days\fR"
+帳 號 過 期 幾 日 後 永 久 停 權。當 值 為 0 時
+帳 號 則 立 刻 被 停 權 。 而 當 值 為 \-1 時 則 關閉此功\能
+。預 設 值 為 \-1。
+.IP "\fB\-g\fR \fIinitial_group\fR"
+更 新 使 用 者 新 的 起 始 登 入 群 組 。 群 組 名 須 已 存 在
+。群 組 ID 必 須 參 照 既 有 的 的 群 組 。 群 組 ID 預 設 值 為 1 。
+.IP "\fB\-G\fR \fIgroup,[...]\fR"
+定 義 使 用 者 為 一 堆 groups 的 成 員 。 每
+個 群 組 使 用 "," 區 格 開 來 , 不 可 以 夾 雜 空
+白 字 元 。 群 組 名 同 \-g 選 項 的 限 制 。
+如 果 使 用 者 現 在 的 群 組 不 再 此 列 , 則 將 使 用 者 由 該
+群 組 中 移 除 。
+.IP "\fB\-l\fR \fIlogin_name\fR"
+變 更 使 用 者 \fIlogin\fR 時 的 名 稱 為 \fIlogin_name\fR 。
+其 於 不 變 。 特 別 是 , 使 用 者 目 錄 名 應 該 也 會 跟 著 更 動 成 新
+的 登 入 名 。
+.IP "\fB\-s\fR \fIshell\fR"
+指 定 新 登 入 shell 。 如 此 欄 留 白 , 系 統 將 選 用 系 統 預 設 shell 。
+.IP "\fB\-u\fR \fIuid\fR"
+使 用 者 ID 值 。必 須 為 唯 一 的 ID 值 , 除 非 用 \fI\-o\fR 選 項 。 數
+字 不 可 為 負 值。預 設 為 最 小 不 得 小 於 999 而 逐 次
+增 加 。 0~ 999 傳 統 上 是 保 留 給 系 統 帳 號 使 用 。
+使 用 者 目 錄 樹 下 所 有 的 檔 案 目 錄 其 user ID 會 自 動 改 變 。
+放 在 使 用 者 目 錄 外 的 檔 案 則 要 自 行 手 動 更 動 。
+.SH 警告
+\fBusermod\fR 不 允 許 你 改 變 正 在線 上 的 使 用 者 帳 號 名 稱 。
+當 usermod 用 來 改 變 user ID, 必 須 確 認 這 名 user 沒 在 電 腦 上 執
+行 任 何 程 序。
+你 需 手 動 更 改 使 用 者 的 crontab 檔 。
+也 需 手 動 更 改 使 用 者 的 at 工 作 檔 。
+採 用 NIS server 須 在 server 上 更 動 相 關 的 NIS 設 定 。
+
+.SH 檔案
+\fI/etc/passwd\fR \- 使 用 者 帳 號 資 訊
+.br
+\fI/etc/shadow\fR \- 使 用 者 帳 號 資 訊 加 密
+.br
+\fI/etc/group\fR \- 群 組 資 訊
+.SH 相關文件
+.BR chfn (1),
+.BR chsh (1),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR passwd (1),
+.BR useradd (8),
+.BR userdel (8)
+.SH 作者
+Julianne Frances Haugh (jfh@tab.com)
diff --git a/missing b/missing
new file mode 100755
index 0000000..625aeb1
--- /dev/null
+++ b/missing
@@ -0,0 +1,215 @@
+#! /bin/sh
+# Common wrapper for a few potentially missing GNU programs.
+
+scriptversion=2018-03-07.03; # UTC
+
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try '$0 --help' for more information"
+ exit 1
+fi
+
+case $1 in
+
+ --is-lightweight)
+ # Used by our autoconf macros to check whether the available missing
+ # script is modern enough.
+ exit 0
+ ;;
+
+ --run)
+ # Back-compat with the calling convention used by older automake.
+ shift
+ ;;
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
+to PROGRAM being missing or too old.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+
+Supported PROGRAM values:
+ aclocal autoconf autoheader autom4te automake makeinfo
+ bison yacc flex lex help2man
+
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
+
+Send bug reports to <bug-automake@gnu.org>."
+ exit $?
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing $scriptversion (GNU Automake)"
+ exit $?
+ ;;
+
+ -*)
+ echo 1>&2 "$0: unknown '$1' option"
+ echo 1>&2 "Try '$0 --help' for more information"
+ exit 1
+ ;;
+
+esac
+
+# Run the given program, remember its exit status.
+"$@"; st=$?
+
+# If it succeeded, we are done.
+test $st -eq 0 && exit 0
+
+# Also exit now if we it failed (or wasn't found), and '--version' was
+# passed; such an option is passed most likely to detect whether the
+# program is present and works.
+case $2 in --version|--help) exit $st;; esac
+
+# Exit code 63 means version mismatch. This often happens when the user
+# tries to use an ancient version of a tool on a file that requires a
+# minimum version.
+if test $st -eq 63; then
+ msg="probably too old"
+elif test $st -eq 127; then
+ # Program was missing.
+ msg="missing on your system"
+else
+ # Program was found and executed, but failed. Give up.
+ exit $st
+fi
+
+perl_URL=https://www.perl.org/
+flex_URL=https://github.com/westes/flex
+gnu_software_URL=https://www.gnu.org/software
+
+program_details ()
+{
+ case $1 in
+ aclocal|automake)
+ echo "The '$1' program is part of the GNU Automake package:"
+ echo "<$gnu_software_URL/automake>"
+ echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
+ echo "<$gnu_software_URL/autoconf>"
+ echo "<$gnu_software_URL/m4/>"
+ echo "<$perl_URL>"
+ ;;
+ autoconf|autom4te|autoheader)
+ echo "The '$1' program is part of the GNU Autoconf package:"
+ echo "<$gnu_software_URL/autoconf/>"
+ echo "It also requires GNU m4 and Perl in order to run:"
+ echo "<$gnu_software_URL/m4/>"
+ echo "<$perl_URL>"
+ ;;
+ esac
+}
+
+give_advice ()
+{
+ # Normalize program name to check for.
+ normalized_program=`echo "$1" | sed '
+ s/^gnu-//; t
+ s/^gnu//; t
+ s/^g//; t'`
+
+ printf '%s\n' "'$1' is $msg."
+
+ configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
+ case $normalized_program in
+ autoconf*)
+ echo "You should only need it if you modified 'configure.ac',"
+ echo "or m4 files included by it."
+ program_details 'autoconf'
+ ;;
+ autoheader*)
+ echo "You should only need it if you modified 'acconfig.h' or"
+ echo "$configure_deps."
+ program_details 'autoheader'
+ ;;
+ automake*)
+ echo "You should only need it if you modified 'Makefile.am' or"
+ echo "$configure_deps."
+ program_details 'automake'
+ ;;
+ aclocal*)
+ echo "You should only need it if you modified 'acinclude.m4' or"
+ echo "$configure_deps."
+ program_details 'aclocal'
+ ;;
+ autom4te*)
+ echo "You might have modified some maintainer files that require"
+ echo "the 'autom4te' program to be rebuilt."
+ program_details 'autom4te'
+ ;;
+ bison*|yacc*)
+ echo "You should only need it if you modified a '.y' file."
+ echo "You may want to install the GNU Bison package:"
+ echo "<$gnu_software_URL/bison/>"
+ ;;
+ lex*|flex*)
+ echo "You should only need it if you modified a '.l' file."
+ echo "You may want to install the Fast Lexical Analyzer package:"
+ echo "<$flex_URL>"
+ ;;
+ help2man*)
+ echo "You should only need it if you modified a dependency" \
+ "of a man page."
+ echo "You may want to install the GNU Help2man package:"
+ echo "<$gnu_software_URL/help2man/>"
+ ;;
+ makeinfo*)
+ echo "You should only need it if you modified a '.texi' file, or"
+ echo "any other file indirectly affecting the aspect of the manual."
+ echo "You might want to install the Texinfo package:"
+ echo "<$gnu_software_URL/texinfo/>"
+ echo "The spurious makeinfo call might also be the consequence of"
+ echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
+ echo "want to install GNU make:"
+ echo "<$gnu_software_URL/make/>"
+ ;;
+ *)
+ echo "You might have modified some files without having the proper"
+ echo "tools for further handling them. Check the 'README' file, it"
+ echo "often tells you about the needed prerequisites for installing"
+ echo "this package. You may also peek at any GNU archive site, in"
+ echo "case some other package contains this missing '$1' program."
+ ;;
+ esac
+}
+
+give_advice "$1" | sed -e '1s/^/WARNING: /' \
+ -e '2,$s/^/ /' >&2
+
+# Propagate the correct exit status (expected to be 127 for a program
+# not found, 63 for a program that failed due to version mismatch).
+exit $st
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/po/LINGUAS b/po/LINGUAS
new file mode 100644
index 0000000..460ec38
--- /dev/null
+++ b/po/LINGUAS
@@ -0,0 +1,38 @@
+bs
+ca
+cs
+da
+de
+dz
+el
+es
+eu
+fi
+fr
+gl
+he
+hu
+id
+it
+ja
+kk
+km
+ko
+nb
+ne
+nl
+nn
+pl
+pt
+pt_BR
+ro
+ru
+sk
+sq
+sv
+tl
+tr
+uk
+vi
+zh_CN
+zh_TW
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
new file mode 100644
index 0000000..5022b8b
--- /dev/null
+++ b/po/Makefile.in.in
@@ -0,0 +1,403 @@
+# Makefile for PO directory in any package using GNU gettext.
+# Copyright (C) 1995-1997, 2000-2006 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+#
+# This file can be copied and used freely without restrictions. It can
+# be used in projects which are not available under the GNU General Public
+# License but which still want to provide support for the GNU gettext
+# functionality.
+# Please note that the actual code of GNU gettext is covered by the GNU
+# General Public License and is *not* in the public domain.
+#
+# Origin: gettext-0.16
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
+datadir = @datadir@
+localedir = @localedir@
+gettextsrcdir = $(datadir)/gettext/po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+# We use $(mkdir_p).
+# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
+# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
+# @install_sh@ does not start with $(SHELL), so we add it.
+# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
+# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
+# versions, $(mkinstalldirs) and $(install_sh) are unused.
+mkinstalldirs = $(SHELL) @install_sh@ -d
+install_sh = $(SHELL) @install_sh@
+MKDIR_P = @MKDIR_P@
+mkdir_p = @mkdir_p@
+
+GMSGFMT_ = @GMSGFMT@
+GMSGFMT_no = @GMSGFMT@
+GMSGFMT_yes = @GMSGFMT_015@
+GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
+MSGFMT_ = @MSGFMT@
+MSGFMT_no = @MSGFMT@
+MSGFMT_yes = @MSGFMT_015@
+MSGFMT = $(MSGFMT_$(USE_MSGCTXT))
+XGETTEXT_ = @XGETTEXT@
+XGETTEXT_no = @XGETTEXT@
+XGETTEXT_yes = @XGETTEXT_015@
+XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
+MSGMERGE = msgmerge
+MSGMERGE_UPDATE = @MSGMERGE@ --update
+MSGINIT = msginit
+MSGCONV = msgconv
+MSGFILTER = msgfilter
+
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+UPDATEPOFILES = @UPDATEPOFILES@
+DUMMYPOFILES = @DUMMYPOFILES@
+DISTFILES.common = Makefile.in.in remove-potcdate.sin \
+$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
+DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
+$(POFILES) $(GMOFILES) \
+$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+
+# Makevars gets inserted here. (Don't remove this line!)
+
+.SUFFIXES:
+.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update
+
+.po.mo:
+ @echo "$(MSGFMT) -c -o $@ $<"; \
+ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
+
+.po.gmo:
+ @lang=`echo $* | sed -e 's,.*/,,'`; \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \
+ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
+
+.sin.sed:
+ sed -e '/^#/d' $< > t-$@
+ mv t-$@ $@
+
+
+all: all-@USE_NLS@
+
+all-yes: stamp-po
+all-no:
+
+# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
+# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
+# we don't want to bother translators with empty POT files). We assume that
+# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
+# In this case, stamp-po is a nop (i.e. a phony target).
+
+# stamp-po is a timestamp denoting the last time at which the CATALOGS have
+# been loosely updated. Its purpose is that when a developer or translator
+# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,
+# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent
+# invocations of "make" will do nothing. This timestamp would not be necessary
+# if updating the $(CATALOGS) would always touch them; however, the rule for
+# $(POFILES) has been designed to not touch files that don't need to be
+# changed.
+stamp-po: $(srcdir)/$(DOMAIN).pot
+ test ! -f $(srcdir)/$(DOMAIN).pot || \
+ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
+ @test ! -f $(srcdir)/$(DOMAIN).pot || { \
+ echo "touch stamp-po" && \
+ echo timestamp > stamp-poT && \
+ mv stamp-poT stamp-po; \
+ }
+
+# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
+# otherwise packages like GCC can not be built if only parts of the source
+# have been downloaded.
+
+# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
+# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
+$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
+ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
+ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
+ else \
+ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
+ fi; \
+ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \
+ --files-from=$(srcdir)/POTFILES.in \
+ --copyright-holder='$(COPYRIGHT_HOLDER)' \
+ --msgid-bugs-address="$$msgid_bugs_address"
+ test ! -f $(DOMAIN).po || { \
+ if test -f $(srcdir)/$(DOMAIN).pot; then \
+ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
+ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
+ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
+ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
+ else \
+ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
+ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+ fi; \
+ else \
+ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+ fi; \
+ }
+
+# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
+# every "make" invocation, only create it when it is missing.
+# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
+$(srcdir)/$(DOMAIN).pot:
+ $(MAKE) $(DOMAIN).pot-update
+
+# This target rebuilds a PO file if $(DOMAIN).pot has changed.
+# Note that a PO file is not touched if it doesn't need to be changed.
+$(POFILES): $(srcdir)/$(DOMAIN).pot
+ @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
+ if test -f "$(srcdir)/$${lang}.po"; then \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \
+ cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \
+ else \
+ $(MAKE) $${lang}.po-create; \
+ fi
+
+
+install: install-exec install-data
+install-exec:
+install-data: install-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+ for file in $(DISTFILES.common) Makevars.template; do \
+ $(INSTALL_DATA) $(srcdir)/$$file \
+ $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ for file in Makevars; do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+install-data-no: all
+install-data-yes: all
+ $(mkdir_p) $(DESTDIR)$(datadir)
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+ $(mkdir_p) $(DESTDIR)$$dir; \
+ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
+ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
+ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
+ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+ if test -n "$$lc"; then \
+ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+ for file in *; do \
+ if test -f $$file; then \
+ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+ fi; \
+ done); \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ else \
+ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+ :; \
+ else \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ fi; \
+ fi; \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
+ fi; \
+ done; \
+ done
+
+install-strip: install
+
+installdirs: installdirs-exec installdirs-data
+installdirs-exec:
+installdirs-data: installdirs-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+ else \
+ : ; \
+ fi
+installdirs-data-no:
+installdirs-data-yes:
+ $(mkdir_p) $(DESTDIR)$(datadir)
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+ $(mkdir_p) $(DESTDIR)$$dir; \
+ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+ if test -n "$$lc"; then \
+ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+ for file in *; do \
+ if test -f $$file; then \
+ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+ fi; \
+ done); \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ else \
+ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+ :; \
+ else \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ fi; \
+ fi; \
+ fi; \
+ done; \
+ done
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall: uninstall-exec uninstall-data
+uninstall-exec:
+uninstall-data: uninstall-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ for file in $(DISTFILES.common) Makevars.template; do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+uninstall-data-no:
+uninstall-data-yes:
+ catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ done; \
+ done
+
+check: all
+
+info dvi ps pdf html tags TAGS ctags CTAGS ID:
+
+mostlyclean:
+ rm -f remove-potcdate.sed
+ rm -f stamp-poT
+ rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
+ rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+ rm -f Makefile Makefile.in POTFILES *.mo
+
+maintainer-clean: distclean
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+ rm -f stamp-po $(GMOFILES)
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir:
+ $(MAKE) update-po
+ @$(MAKE) dist2
+# This is a separate target because 'update-po' must be executed before.
+dist2: stamp-po $(DISTFILES)
+ dists="$(DISTFILES)"; \
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ dists="$$dists Makevars.template"; \
+ fi; \
+ if test -f $(srcdir)/$(DOMAIN).pot; then \
+ dists="$$dists $(DOMAIN).pot stamp-po"; \
+ fi; \
+ if test -f $(srcdir)/ChangeLog; then \
+ dists="$$dists ChangeLog"; \
+ fi; \
+ for i in 0 1 2 3 4 5 6 7 8 9; do \
+ if test -f $(srcdir)/ChangeLog.$$i; then \
+ dists="$$dists ChangeLog.$$i"; \
+ fi; \
+ done; \
+ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
+ for file in $$dists; do \
+ if test -f $$file; then \
+ cp -p $$file $(distdir) || exit 1; \
+ else \
+ cp -p $(srcdir)/$$file $(distdir) || exit 1; \
+ fi; \
+ done
+
+update-po: Makefile
+ $(MAKE) $(DOMAIN).pot-update
+ test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
+ $(MAKE) update-gmo
+
+# General rule for creating PO files.
+
+.nop.po-create:
+ @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
+ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
+ exit 1
+
+# General rule for updating PO files.
+
+.nop.po-update:
+ @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
+ if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \
+ tmpdir=`pwd`; \
+ echo "$$lang:"; \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
+ cd $(srcdir); \
+ if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \
+ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+ rm -f $$tmpdir/$$lang.new.po; \
+ else \
+ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+ :; \
+ else \
+ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+ exit 1; \
+ fi; \
+ fi; \
+ else \
+ echo "msgmerge for $$lang.po failed!" 1>&2; \
+ rm -f $$tmpdir/$$lang.new.po; \
+ fi
+
+$(DUMMYPOFILES):
+
+update-gmo: Makefile $(GMOFILES)
+ @:
+
+Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
+ cd $(top_builddir) \
+ && $(SHELL) ./config.status $(subdir)/$@.in po-directories
+
+force:
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/po/Makevars b/po/Makevars
new file mode 100644
index 0000000..c2b35f8
--- /dev/null
+++ b/po/Makevars
@@ -0,0 +1,31 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(PACKAGE)
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --no-location
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
+# package. (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.) Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright. The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = Free Software Foundation, Inc.
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used. It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
+
+MSGID_BUGS_ADDRESS = pkg-shadow-devel@lists.alioth.debian.org
+
+MSGMERGE += --previous
+MSGMERGE_UPDATE += --previous
+
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644
index 0000000..df76128
--- /dev/null
+++ b/po/POTFILES.in
@@ -0,0 +1,123 @@
+# List of files which contain translatable strings.
+
+lib/commonio.c
+lib/encrypt.c
+lib/fields.c
+lib/fputsx.c
+lib/getdef.c
+lib/get_gid.c
+lib/getlong.c
+lib/get_uid.c
+lib/groupio.c
+lib/groupmem.c
+lib/gshadow.c
+lib/lockpw.c
+lib/nscd.c
+lib/port.c
+lib/pwauth.c
+lib/pwio.c
+lib/pwmem.c
+lib/selinux.c
+lib/semanage.c
+lib/sgetgrent.c
+lib/sgetpwent.c
+lib/sgetspent.c
+lib/sgroupio.c
+lib/shadow.c
+lib/shadowio.c
+lib/shadowmem.c
+lib/spawn.c
+lib/tcbfuncs.c
+lib/utent.c
+libmisc/addgrps.c
+libmisc/age.c
+libmisc/audit_help.c
+libmisc/basename.c
+libmisc/chkname.c
+libmisc/chowndir.c
+libmisc/chowntty.c
+libmisc/cleanup.c
+libmisc/cleanup_group.c
+libmisc/cleanup_user.c
+libmisc/console.c
+libmisc/copydir.c
+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
+libmisc/log.c
+libmisc/loginprompt.c
+libmisc/mail.c
+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
+libmisc/remove_tree.c
+libmisc/rlogin.c
+libmisc/root_flag.c
+libmisc/salt.c
+libmisc/setugid.c
+libmisc/setupenv.c
+libmisc/shell.c
+libmisc/strtoday.c
+libmisc/sub.c
+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
+libmisc/xmalloc.c
+libmisc/yesno.c
+src/chage.c
+src/chfn.c
+src/chgpasswd.c
+src/chpasswd.c
+src/chsh.c
+src/expiry.c
+src/faillog.c
+src/gpasswd.c
+src/groupadd.c
+src/groupdel.c
+src/groupmems.c
+src/groupmod.c
+src/groups.c
+src/grpck.c
+src/grpconv.c
+src/grpunconv.c
+src/id.c
+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
+src/pwconv.c
+src/pwunconv.c
+src/suauth.c
+src/su.c
+src/sulogin.c
+src/useradd.c
+src/userdel.c
+src/usermod.c
+src/vipw.c
diff --git a/po/Rules-quot b/po/Rules-quot
new file mode 100644
index 0000000..9c2a995
--- /dev/null
+++ b/po/Rules-quot
@@ -0,0 +1,47 @@
+# Special Makefile rules for English message catalogs with quotation marks.
+
+DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot
+
+.SUFFIXES: .insert-header .po-update-en
+
+en@quot.po-create:
+ $(MAKE) en@quot.po-update
+en@boldquot.po-create:
+ $(MAKE) en@boldquot.po-update
+
+en@quot.po-update: en@quot.po-update-en
+en@boldquot.po-update: en@boldquot.po-update-en
+
+.insert-header.po-update-en:
+ @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \
+ if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
+ tmpdir=`pwd`; \
+ echo "$$lang:"; \
+ ll=`echo $$lang | sed -e 's/@.*//'`; \
+ LC_ALL=C; export LC_ALL; \
+ cd $(srcdir); \
+ if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \
+ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+ rm -f $$tmpdir/$$lang.new.po; \
+ else \
+ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+ :; \
+ else \
+ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+ exit 1; \
+ fi; \
+ fi; \
+ else \
+ echo "creation of $$lang.po failed!" 1>&2; \
+ rm -f $$tmpdir/$$lang.new.po; \
+ fi
+
+en@quot.insert-header: insert-header.sin
+ sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header
+
+en@boldquot.insert-header: insert-header.sin
+ sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header
+
+mostlyclean: mostlyclean-quot
+mostlyclean-quot:
+ rm -f *.insert-header
diff --git a/po/boldquot.sed b/po/boldquot.sed
new file mode 100644
index 0000000..4b937aa
--- /dev/null
+++ b/po/boldquot.sed
@@ -0,0 +1,10 @@
+s/"\([^"]*\)"/“\1”/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“”/""/g
+s/“/“/g
+s/”/”/g
+s/‘/‘/g
+s/’/’/g
diff --git a/po/bs.gmo b/po/bs.gmo
new file mode 100644
index 0000000..f968642
--- /dev/null
+++ b/po/bs.gmo
Binary files differ
diff --git a/po/bs.po b/po/bs.po
new file mode 100644
index 0000000..261e2c7
--- /dev/null
+++ b/po/bs.po
@@ -0,0 +1,2663 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2004-05-09 12:03+0100\n"
+"Last-Translator: Safir Šećerović <sapphire@linux.org.ba>\n"
+"Language-Team: Bosnian <lokal@lugbih.org>\n"
+"Language: bs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr ""
+
+msgid "Password: "
+msgstr "Šifra:"
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s's Šifra: "
+
+msgid "Cannot open audit interface.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr ""
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set sename for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "%s: nepoznat član %s\n"
+
+#, fuzzy, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "%s: nepoznat član %s\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: nepoznat član %s\n"
+
+#, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: nepoznat član %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: nepoznat član %s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr ""
+
+msgid "Warning: too many groups\n"
+msgstr ""
+
+msgid "Your password has expired."
+msgstr "Vaša šifra je istekla."
+
+msgid "Your password is inactive."
+msgstr "Vaša šifra je neaktivna."
+
+msgid "Your login has expired."
+msgstr "Vaš račun je istekao."
+
+msgid " Contact the system administrator."
+msgstr ""
+
+msgid " Choose a new password."
+msgstr " Izaberite novu šifru."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Vaša šifra ističe za in %ld dana.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Vaša šifra ističe sutra."
+
+msgid "Your password will expire today."
+msgstr "Vaša šifra ističe danas."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: "
+msgstr ""
+
+msgid ": "
+msgstr ""
+
+msgid "Environment overflow\n"
+msgstr ""
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Try again later\n"
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: Pokušajte ponovo kasnije\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid map file %s specified\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Could not seteuid to %d\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Could not set caps\n"
+msgstr "%s: nepoznat član %s\n"
+
+#, c-format
+msgid "%s: snprintf failed!\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: open of %s failed: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: write to %s failed: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+msgid "Too many logins.\n"
+msgstr "Previše prijavljivanja.\n"
+
+msgid "You have new mail."
+msgstr "Imate novu poštu."
+
+msgid "No mail."
+msgstr "Nema pošte."
+
+msgid "You have mail."
+msgstr "Imate poštu."
+
+msgid "no change"
+msgstr ""
+
+msgid "a palindrome"
+msgstr ""
+
+msgid "case changes only"
+msgstr ""
+
+msgid "too similar"
+msgstr ""
+
+msgid "too simple"
+msgstr ""
+
+msgid "rotated"
+msgstr ""
+
+msgid "too short"
+msgstr ""
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Neispravna šifra: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr ""
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr ""
+
+#, fuzzy
+msgid "passwd: password unchanged\n"
+msgstr "Šifra:"
+
+msgid "passwd: password updated successfully\n"
+msgstr ""
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: conversation type %d not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, c-format
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Mijenjam šifru za grupu %s\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr ""
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr ""
+
+msgid "No directory, logging in with HOME=/"
+msgstr ""
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr ""
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, fuzzy, c-format
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: grupa %s postoji\n"
+
+msgid "Unable to determine your tty name."
+msgstr ""
+
+msgid "No"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr ""
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr ""
+
+msgid "Minimum Password Age"
+msgstr "Minimalna trajnost šifre"
+
+msgid "Maximum Password Age"
+msgstr "Maskimalna trajnost šifre"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr ""
+
+msgid "Password Expiration Warning"
+msgstr "Upozorenje o isteku šifre"
+
+msgid "Password Inactive"
+msgstr "Šifra neaktivna"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Datum isteka računa (GGGG-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr ""
+
+#, fuzzy
+msgid "never"
+msgstr "Nikad"
+
+msgid "password must be changed"
+msgstr ""
+
+#, fuzzy
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Šifra:"
+
+#, fuzzy
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Šifra neaktivna"
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr ""
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: PAM: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: Pokušajte ponovo kasnije\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: nepoznat član %s\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr "Puno ime i prezime"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr ""
+
+msgid "Room Number"
+msgstr "Broj sobe"
+
+msgid "Work Phone"
+msgstr "Poslovni telefon"
+
+msgid "Home Phone"
+msgstr "Kućni telefon"
+
+msgid "Other"
+msgstr "Ostalo"
+
+msgid "Cannot change ID to root.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr ""
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr ""
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: grupa %s postoji\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr ""
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr ""
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: grupa %s postoji\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr ""
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr ""
+
+#, c-format
+msgid " [%lus left]"
+msgstr ""
+
+#, c-format
+msgid " [%lds lock]"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "Nepoznat korisnik: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr ""
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr ""
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr ""
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+msgid "The options cannot be combined.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr ""
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Mijenjam šifru za grupu %s\n"
+
+msgid "New Password: "
+msgstr "Nova šifra:"
+
+msgid "Re-enter new password: "
+msgstr "Ponovo unesite novu šifru:"
+
+msgid "They don't match; try again"
+msgstr "One se ne slažu; pokušajte ponovo"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Pokušajte ponovo kasnije\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Dodajem korisnika %s grupi %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Uklanjam korisnika %s iz grupe %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr ""
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid " -r, --system create a system account\n"
+msgstr ""
+
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: nepoznat član %s\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+
+msgid "\n"
+msgstr ""
+
+msgid "Actions:\n"
+msgstr ""
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr ""
+
+msgid " -l, --list list the members of the group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr ""
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr ""
+
+msgid "invalid group file entry"
+msgstr ""
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr ""
+
+#, fuzzy
+msgid "duplicate group entry"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr ""
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr ""
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr ""
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr ""
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr ""
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr ""
+
+msgid "duplicate shadow group entry"
+msgstr ""
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr ""
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr ""
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: nepoznat član %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr ""
+
+msgid "Usage: id\n"
+msgstr ""
+
+msgid " groups="
+msgstr ""
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+
+msgid "Username Port From Latest"
+msgstr ""
+
+msgid "Username Port Latest"
+msgstr ""
+
+msgid "**Never logged in**"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "nepoznata grupa: %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 ""
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr ""
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr ""
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s login: "
+msgstr ""
+
+msgid "login: "
+msgstr ""
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr ""
+
+msgid "login: abort requested by PAM\n"
+msgstr ""
+
+msgid "Login incorrect"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "%s: nepoznat član %s\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr ""
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr ""
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr ""
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr ""
+
+#, c-format
+msgid " from %.*s"
+msgstr ""
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+
+msgid "Usage: logoutd\n"
+msgstr ""
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, c-format
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr ""
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "Stara šifra:"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: grupa %s postoji\n"
+
+msgid "too many groups\n"
+msgstr ""
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid " -b, --badnames allow bad names\n"
+msgstr ""
+
+msgid " -r, --system create system accounts\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "nepoznata grupa: %s\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid " -q, --quiet quiet mode\n"
+msgstr ""
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid "Old password: "
+msgstr "Stara šifra:"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+
+msgid "New password: "
+msgstr "Nova šifra:"
+
+msgid "Try again."
+msgstr "Pokušajte ponovo."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Upozorenje: slaba šifra (unesite je ponovo ako je ipak želite koristiti)."
+
+msgid "They don't match; try again.\n"
+msgstr "One se ne slažu; pokušajte ponovo\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr ""
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr ""
+
+#, c-format
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "Mijenjam šifru za grupu %s\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr ""
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: password changed.\n"
+msgstr "Šifra:"
+
+#, fuzzy, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "Upozorenje o isteku šifre"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid " -q, --quiet report errors only\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+
+#, fuzzy
+msgid "invalid password file entry"
+msgstr "Stara šifra:"
+
+msgid "duplicate password entry"
+msgstr ""
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "Dodajem korisnika %s grupi %s\n"
+
+#, fuzzy, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, fuzzy, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, fuzzy, c-format
+msgid "no tcb directory for %s\n"
+msgstr "Mijenjam šifru za grupu %s\n"
+
+#, c-format
+msgid "create tcb directory for %s?"
+msgstr ""
+
+#, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: nepoznat član %s\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr ""
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr ""
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr ""
+
+msgid "duplicate shadow password entry"
+msgstr ""
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+msgid "Access to su to that account DENIED.\n"
+msgstr ""
+
+msgid "Password authentication bypassed.\n"
+msgstr ""
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: nepoznat član %s\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr ""
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr ""
+
+msgid "Session terminated, terminating shell..."
+msgstr ""
+
+#, c-format
+msgid " ...killed.\n"
+msgstr ""
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr ""
+
+msgid " ...terminated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s\n"
+msgstr ""
+
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr ""
+
+#, fuzzy
+msgid "(Enter your own password)"
+msgstr "Ponovo unesite novu šifru:"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr ""
+
+#, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr ""
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "Cannot execute %s\n"
+msgstr "%s: nepoznat član %s\n"
+
+#, fuzzy
+msgid "No password file"
+msgstr "Nova šifra:"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr ""
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+
+msgid "Entering System Maintenance Mode"
+msgstr ""
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr ""
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr ""
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr ""
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr ""
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, c-format
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid "%s: error while duplicating string %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr ""
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+
+msgid "Setting mailbox file permissions"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: nepoznat član %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr ""
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: error removing subvolume %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr ""
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr ""
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr ""
+
+msgid " -L, --lock lock the user account\n"
+msgstr ""
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr ""
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr ""
+
+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"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: no options\n"
+msgstr "%s: nepoznat član %s\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr ""
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr ""
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr ""
+
+msgid "failed to change mailbox owner"
+msgstr ""
+
+msgid "failed to rename mailbox"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid " -g, --group edit group database\n"
+msgstr ""
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr ""
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "Šifra:"
+
+msgid "failed to create scratch directory"
+msgstr ""
+
+msgid "failed to drop privileges"
+msgstr ""
+
+msgid "Couldn't get file context"
+msgstr ""
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "failed to gain privileges"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr ""
+
+msgid "Couldn't make backup"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+msgid "failed to open scratch file"
+msgstr ""
+
+msgid "failed to unlink scratch file"
+msgstr ""
+
+msgid "failed to stat edited file"
+msgstr ""
+
+msgid "failed to allocate memory"
+msgstr ""
+
+msgid "failed to create backup file"
+msgstr ""
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Password set to expire."
+#~ msgstr "Vaša šifra je istekla."
+
+#, fuzzy
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "Broj sobe"
+
+#, fuzzy
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "Poslovni telefon"
+
+#, fuzzy
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "Kućni telefon"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "nepoznata grupa: %s\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Nepoznat korisnik: %s\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: nepoznat član %s\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Nova šifra:"
+
+#~ msgid "Sorry."
+#~ msgstr "Žalim."
diff --git a/po/ca.gmo b/po/ca.gmo
new file mode 100644
index 0000000..58a7144
--- /dev/null
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
new file mode 100644
index 0000000..61bf5f7
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,4022 @@
+# Shadow Catalan translation.
+# Guillem Jover <guillem@debian.org>, 2004, 2005, 2006.
+# Innocent De Marchi <tangram.peces@gmail.com>, 2011-2012
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.18\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2012-01-22 18:25+0100\n"
+"Last-Translator: Innocent De Marchi <tangram.peces@gmail.com>\n"
+"Language-Team: Catalan <debian-l10n-catalan@lists.debian.org>\n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n!=1;\n"
+"X-Poedit-Language: Catalan\n"
+"X-Poedit-Country: SPAIN\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"Diverses entrades de nom «%s» a %s. Corregiu això amb «pwck» o «grpck».\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "el mètode «crypt» no és compatible amb «libcrypt»? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr "error en la configuració - no és possible analitzar el valor %s: «%s»"
+
+msgid "Could not allocate space for config info.\n"
+msgstr "No s'ha pogut reservar espai per a la informació de configuració.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"error de configuració - element «%s» desconegut (notifiqueu-ho a "
+"l'administrador)\n"
+
+#, c-format
+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\n"
+msgstr "%s: «nscd» ha sortit amb l'estat %d"
+
+msgid "Password: "
+msgstr "Contrasenya: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Contrasenya de l'usuari %s: "
+
+#, fuzzy
+#| msgid "Cannot open audit interface - aborting.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "No es pot obrir la interfície d'auditoria - cancel·lant.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr "[libsemanage]: %s\n"
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr "No es pot generar l'identificador de gestió SELinux\n"
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr "No és possible gestionar la directiva SELinux\n"
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr "No es pot llegir el magatzem de directives de SELinux\n"
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr "No es pot establir la connexió de gestió SELinux\n"
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr "No es pot iniciar la transacció SELinux\n"
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr "No es pot consultar el «seuser» per a %s\n"
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr "No s'ha pogut definir el «serange» per a %s\n"
+
+#, c-format
+msgid "Could not set sename for %s\n"
+msgstr "No es pot establir «sename» per a %s.\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr "No es pot modificar el mapatge d'inici de sessió per a %s\n"
+
+#, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "No es pot generar el mapatge d'inici de sessió SELinux per a %s\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr "No s'ha pogut establir el nom per a %s\n"
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr "No s'ha pogut establir l'usuari SELinux per a %s\n"
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr "No s'ha pogut afegir l'assignació de connexió per a %s\n"
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr "No es pot iniciar el gestor SELinux\n"
+
+#, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "No es pot generar la clau SELinux de l'usuari.\n"
+
+#, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "No es pot verificar l'usuari de SELinux\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr "No es pot modificar l'assignació d'usuaris de SELinux\n"
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr "No es pot afegir l'assignació de l'usuari de SELinux\n"
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr "No es pot validar la transacció SELinux\n"
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+"L'assignació d'inici de sessió per a %s no està definida, seleccionau «OK» "
+"si s'utilitzava l'assignació per defecte\n"
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+"L'assignació d'inici de sessió per a %s està definida a la directiva de "
+"seguretat, no és possible eliminar-la\n"
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr "No es pot eliminar el mapatge d'inici de sessió per a %s"
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: s'ha exhaurit la memòria\n"
+
+#, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: no es pot generar el fitxer %s: %s\n"
+
+#, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: %s no és ni un directori ni un enllaç simbòlic.\n"
+
+#, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: no es pot llegir l'enllaç simbòlic %s: %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr "%s: enllaç simbòlic sospitosament llarg: %s\n"
+
+#, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: no es pot crear el directori %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: no es pot canviar el propietari de %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: no es pot canviar el mode de %s: %s\n"
+
+#, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: desvincular: %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: no es pot eliminar el directori %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: no es pot reanomenar %s a %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: no es pot eliminar %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: no es pot generar l'enllaç simbòlic %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: no es pot canviar els propietaris de %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: no es pot «lstat» %s: %s\n"
+
+#, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: advertència, els usuaris %s no tenen el fitxer «tcb shadow».\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+"%s: emergència: el fitxer «tcb sahdow» %s no és un fitxer regular amb "
+"st_nlink=1.\n"
+"El compte queda bloquejat.\n"
+
+#, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: reanomena: %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: no es pot obrir el fitxer %s: %s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Avís: el grup %s és desconegut\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Avís: hi ha massa grups\n"
+
+msgid "Your password has expired."
+msgstr "La vostra contrasenya ha caducat."
+
+msgid "Your password is inactive."
+msgstr "La vostra contrasenya està inactiva."
+
+msgid "Your login has expired."
+msgstr "El vostre accés ha caducat."
+
+msgid " Contact the system administrator."
+msgstr " Contacteu amb l'administrador del sistema."
+
+msgid " Choose a new password."
+msgstr " Escolliu una nova contrasenya."
+
+msgid "You must change your password."
+msgstr "Ha de canviar la contrasenya."
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "La vostra contrasenya caduca en %ld dies.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "La vostra contrasenya caduca demà."
+
+msgid "Your password will expire today."
+msgstr "La vostra contrasenya caduca avui."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "No es pot obrir la interfície d'auditoria - cancel·lant.\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr ""
+"No es pot canviar el propietari o la manera d'entrada estàndard de «tty»: %s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: ha fallat el desbloqueig de %s\n"
+
+#, c-format
+msgid "%s: "
+msgstr "%s: "
+
+msgid ": "
+msgstr ": "
+
+msgid "Environment overflow\n"
+msgstr "Desbordament d'entorn\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "No podeu canviar $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"S'ha produït %d fallada des de l'últim accés.\n"
+"L'últim va ser %s en %s.\n"
+msgstr[1] ""
+"S'han produït %d fallades des de l'últim accés.\n"
+"L'últim va ser %s en %s.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: Configuració incorrecta: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr "%s: Configuració incorrecta: GID_MIN (%lu), GID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "%s: no es pot assignar memòria: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: no es pot obtenir un GID de sistema únic (no hi ha més GID disponibles)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: no es pot obtenir un GID únic (no hi ha més GID disponibles)\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: no es pot obtenir un GID únic (no hi ha més GID disponibles)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+"%s: Configuració incorrecta: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: no es pot generar l'usuari\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+"%s: Configuració incorrecta: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: no es pot generar l'usuari\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: Configuració incorrecta: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr "%s: Configuració incorrecta: UID_MIN (%lu), UID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr "%s: no es pot obtenir un UID únic (no hi ha més UID disponibles)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: no es pot obtenir un GID únic (no hi ha més GID disponibles)\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: no es pot obtenir un GID únic (no hi ha més GID disponibles)\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Authentication failure\n"
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: l'autenticació ha fallat\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: el camp «%s» no és vàlid\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Could not set name for %s\n"
+msgid "%s: Could not seteuid to %d\n"
+msgstr "No s'ha pogut establir el nom per a %s\n"
+
+#, fuzzy, c-format
+#| msgid "Could not set name for %s\n"
+msgid "%s: Could not set caps\n"
+msgstr "No s'ha pogut establir el nom per a %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't open file\n"
+msgid "%s: snprintf failed!\n"
+msgstr "%s: no es pot obrir el fitxer\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: open of %s failed: %s\n"
+msgstr ""
+"%s: línia %d: no s'ha pogut canviar el propietari (ordre «chown») %s: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: write to %s failed: %s\n"
+msgstr ""
+"%s: línia %d: no s'ha pogut canviar el propietari (ordre «chown») %s: %s\n"
+
+msgid "Too many logins.\n"
+msgstr "Massa entrades.\n"
+
+msgid "You have new mail."
+msgstr "Teniu correu nou."
+
+msgid "No mail."
+msgstr "No hi ha correu."
+
+msgid "You have mail."
+msgstr "Teniu correu."
+
+msgid "no change"
+msgstr "no hi ha canvis"
+
+msgid "a palindrome"
+msgstr "un palíndrom"
+
+msgid "case changes only"
+msgstr "només canvis de majúscules/minúscules"
+
+msgid "too similar"
+msgstr "massa similar"
+
+msgid "too simple"
+msgstr "massa senzilla"
+
+msgid "rotated"
+msgstr "rotada"
+
+msgid "too short"
+msgstr "massa curta"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "La contrasenya és incorrecta: %s."
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() ha fallat, error %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+msgid "passwd: password unchanged\n"
+msgstr "passwd: contrasenya sense canvis\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: s'ha actualitzat la contrasenya satisfactòriament\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: el dipòsit %s no és admès\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start: error %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd: pam_start() ha fallat, error %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "La contrasenya és incorrecta per a «%s».\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr "%s: múltiples opcions «--root»\n"
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr "%s: l'opció '%s' requereix un argument\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: ha fallat la rebaixa de privilegis (%s)\n"
+
+#, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: camí «chroot» incorrecta «%s»\n"
+
+#, c-format
+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 chdir to chroot directory %s: %s\n"
+msgstr "%s: no es pot accedir al directori «chroot» %s: %s\n"
+
+#, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: no es pot executar «chroot» en el directori %s: %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"Valor incorrecta d'ENCRYPT_METHOD: «%s».\n"
+"Valor per defecte a DES.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "No es pot canviar al directori «%s»\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "No hi ha directori, s'està iniciant sessió amb HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "No es pot executar %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "El directori arrel «%s» no és vàlid\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "No es pot canviar el directori arrel a «%s»\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: l'usuari %s està actualment dins el sistema\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: l'usuari %s està actualment dins el sistema\n"
+
+msgid "Unable to determine your tty name."
+msgstr "No s'ha pogut determinar el nom del vostre tty."
+
+msgid "No"
+msgstr "No"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Forma d'ús: %s [opcions] USUARI\n"
+"\n"
+"Opcions:\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+" -d, --lastday ÚLTIM_DIA estableix la data de l'últim canvi de "
+"contrasenya\n"
+" a ÚLTIM_DIA\n"
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -E, --expiredate DATA_EXPIRACIÓ\n"
+" estableix la data de caducitat del\n"
+" compte a DATA_EXPIRACIÓ\n"
+
+msgid " -h, --help display this help message and exit\n"
+msgstr " -h, --help mostra aquesta ajuda i acaba\n"
+
+#, fuzzy
+#| msgid " -g, --group edit group database\n"
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr " -g, --group edita la base de dades del grup\n"
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -I, --inactive INACTIVA estableix la contrasenya com inactiva "
+"després\n"
+" de INACTIVA dies de caducitat \n"
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+" -l, --list mostra informació d'envelliment del compte\n"
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+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 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"
+" del canvi de contrasenya a DIES_MÀX\n"
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+" -R, --root CHROOT_DIR fes «chroot» en el directori CHROOT_DIR \n"
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -W, --warndays DIES_AVÍS estableix els dies d'avís de caducitat\n"
+" a DIES_AVÍS\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Introduïu el nou valor, o premeu INTRO per al predeterminat"
+
+msgid "Minimum Password Age"
+msgstr "Duració mínima de la contrasenya"
+
+msgid "Maximum Password Age"
+msgstr "Duració màxima de la contrasenya"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Últim canvi de contrasenya (AAAA-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Avís de caducitat de la contrasenya"
+
+msgid "Password Inactive"
+msgstr "Contrasenya inactiva"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Data de caducitat per al compte (AAAA-MM-YY)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Últim canvi de contrasenya\t\t\t\t: "
+
+msgid "never"
+msgstr "mai"
+
+msgid "password must be changed"
+msgstr "s'ha de canviar la contrasenya"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "La contrasenya caduca\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Contrasenya inactiva\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "El compte caduca\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Número mínim de dies entre canvis de contrasenya\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Número màxim de dies entre canvis de contrasenya\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Número de dies d'avís abans que la contrasenya caduqui\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: la data «%s» no és vàlida\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: l'argument numèric «%s» no és vàlid\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: no inclogueu «l» amb altres assenyaladors\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: S'ha denegat el permís.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: No es pot determinar el seu nom d'usuari.\n"
+
+#, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: PAM: %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: no es pot blocar %s, intenteu-ho més tard\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: no es pot obrir el fitxer %s\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: fallada en escriure els canvis a: %s\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: ha fallat la preparació de la nova entrada %s: «%s»\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: el fitxer de contrasenyes ombra no és present\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: l'usuari «%s» no existeix a %s\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "S'està canviant la informació de caducitat per a %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: s'ha produït un error en canviar els camps\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Forma d'ús: %s [opcions] [LOGIN]\n"
+"\n"
+"Opcions:\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr " -f, --full-name FULL_NAME canviar el nom complet de l'usuari\n"
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+" -h, --home-phone HOME_PHONE canvia el número de telèfon domestic de "
+"l'usuari\n"
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+" -o, --other OTHER_INFO canvia altres informacions «GECOS» de "
+"l'usuari\n"
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+" -r, --room ROOM_NUMBER canviar el número d'espai de l'usuari\n"
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+" -u, --help mostra aquest missatge d'ajuda i surt\n"
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+" -w, --work-phone WORK_PHONE canvia el número de telèfon del treball de "
+"l'usuari\n"
+
+msgid "Full Name"
+msgstr "Nom complet"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "Número d'espai"
+
+msgid "Work Phone"
+msgstr "Telèfon de la feina"
+
+msgid "Home Phone"
+msgstr "Telèfon de casa"
+
+msgid "Other"
+msgstr "Altre"
+
+msgid "Cannot change ID to root.\n"
+msgstr "No es pot canviar l'ID al de root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: nom amb caràcters que no són ASCII: «%s»\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: el nom no és vàlid: «%s»\n"
+
+# traducció dubtosa
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s: número d'habitació amb caràcters que no són ASCII: «%s»\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: el número d'habitació no és vàlid: «%s»\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: el telèfon de la feina no és vàlid: «%s»\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: el telèfon de casa no és vàlid: «%s»\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: «%s» conté caràcters que no són ASCII\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: «%s» conté caràcters no permesos\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: l'usuari «%s» no existeix\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: no s'ha pogut canviar l'usuari «%s» al client NIS.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: «%s» és el mestre NIS per a aquest client.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "S'està canviant la informació d'usuari per a %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: els camps són massa llargs\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Forma d'ús: %s [opcions]\n"
+"\n"
+"Opcions:\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr " -c, --crypt-method METHOD el mètode de xifratge (un de %s)\n"
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+" -e, --encrypted les contrasenyes subministrades són "
+"xifrades\n"
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+" -m, --md5 encriptar la contrasenya en text clar amb\n"
+" l'algorisme MD5\n"
+
+# traducció dubtosa
+#, fuzzy
+#| msgid ""
+#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
+#| " crypt algorithms\n"
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+" -s, --sha-rounds nombre de passos SHA pel\n"
+" algorisme de xifratge SHA*\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: el senyalador %s només és permet amb el senyalador %s\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: els senyaladors -c, -e, i -m són exclusius\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: mètode de xifratge no està implementat: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: línia %d: la línia és massa llarga\n"
+
+#, c-format
+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 crypt password with salt '%s': %s\n"
+msgstr "%s: Error en escriure %s: %s\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: línia %d: el grup «%s» no existeix\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: línia %d: ha fallat la preparació de la nova entrada %s: «%s»\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: s'ha detectat un error, els canvis s'han ignorat\n"
+
+#, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: (línia %d, usuari %s) contrasenya sense canviar\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: línia %d: l'usuari «%s» no existeix\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+" -s, --shell INTÈRPRET nou intèrpret d'accés per al compte "
+"d'usuari\n"
+
+msgid "Login Shell"
+msgstr "Intèrpret d'accés"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "No podeu canviar l'intèrpret («shell») per a «%s».\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "S'està canviant l'intèrpret d'accés per a %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: L'entrada no és vàlida: %s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s: %s no és un intèrpret («shell») vàlid.\n"
+
+#, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: Advertència: %s no existeix\n"
+
+#, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: Advertència: %s no és executable\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+" -c, --check comprova la caducitat de la contrasenya de "
+"l'usuari\n"
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+" -f, --force força el canvi de la contrasenya de "
+"l'usuari\n"
+" si ha caducat\n"
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: opcions %s i %s conflictes\n"
+
+#, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "%s: no s'esperava l'argument: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+" -a, --all mostra els registres «faillog» per a tots "
+"els usuaris\n"
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+" -l, --lock-secs SEC després d'una identificació fallida, "
+"bloqueja el compte durant SEC segons\n"
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+" -m, --maximum MAX estableix el nombre màxim d'identificacions "
+"fallides a MAX\n"
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+" -r, --reset restableix els comptadors d'errors "
+"d'identificació\n"
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time DAYS mostra els registres «faillog» de menys de "
+"DAYS dies\n"
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+" -u, --user LOGIN/RANGE mostra el registre «faillog» o manté els "
+"comptadors\n"
+" de fallides i els límits (si s'utilitza amb "
+"-r, -m,\n"
+" o -i) només per l'identificador/s LOGIN "
+"especificats\n"
+
+#, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: No s'ha pogut obtenir l'entrada de la UID %lu\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "Usuari Fallades Màxim Últim A\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr " [%lus restants]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [blocat %lds]"
+
+#, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr ""
+"%s: Ha fallat el restabliment del recompte de fallades per a l'UID %lu\n"
+
+#, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: S'ha produït un error en establir el màxim per a l'UID %lu\n"
+
+#, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: Errada en establir «locktime» per a l'UID %lu\n"
+
+#, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "%s: Usuari o rang desconegut: %s\n"
+
+#, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: No es pot obtenir la mida de %s: %s\n"
+
+#, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: Error en escriure %s: %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Forma d'ús: %s [opcions] GRUP\n"
+"\n"
+"Opcions:\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr " -a, --add USER afegir USER al GROUP\n"
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr " -d, --delete USER elimina USER del GROUP\n"
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+" -Q, --root CHROOT_DIR fes «chroot» en el directori CHROOT_DIR\n"
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr ""
+" -r, --remove-password elimina la contrasenya del grup GROUP\n"
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+" -R, --restrict restringeix l'accés als membres del grup "
+"GROUP\n"
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+" -M, --members USER,... estableix el llistat de membres del grup "
+"GROUP\n"
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+" -A, --administrators ADMIN,...\n"
+" estableix la llista d'administradors del "
+"grup GROUP\n"
+
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+"Amb l'excepció de les opcions «-A» i «-M», no és possible combinar opcions.\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "No es pot combinar opcions.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: es requereixen contrasenyes ombra de grups per a «-A»\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: el grup «%s» no existeix a %s\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: Error durant el tancament (en mode de lectura) de %s\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "S'està canviant la contrasenya per al grup %s\n"
+
+msgid "New Password: "
+msgstr "Nova contrasenya: "
+
+msgid "Re-enter new password: "
+msgstr "Tornau a escriure la nova contrasenya: "
+
+msgid "They don't match; try again"
+msgstr "No coincideixen; intenteu-ho de nou."
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Intenteu-ho de nou més tard.\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "S'està afegint l'usuari %s al grup %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "S'està eliminant l'usuari %s del grup %s\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: l'usuari «%s» no és membre de %s\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: No és un tty\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Forma d'ús: %s [opcions] GRUP\n"
+"\n"
+"Opcions:\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+" -f, --force sortir correctament si el grup ja existeix,\n"
+" i calcel·lar «-g» si ja s'utilitza el GID\n"
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr " -g, --gid GID fes servir GID pel nou grup\n"
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+" -K, --key KEY=VALUE substitueix els valors predeterminats de «/"
+"etc/login.defs»\n"
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique permet crear grups amb duplicats\n"
+" (no únics) GID\n"
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+" -p, --password PASSWORD fes servir aquesta contrasenya xifrada pel "
+"nou grup\n"
+
+msgid " -r, --system create a system account\n"
+msgstr " -r, --system genera un compte del sistema\n"
+
+#, fuzzy
+#| msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+" -R, --root CHROOT_DIR fes «chroot» en el directori CHROOT_DIR \n"
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: «%s» no és un nom de grup vàlid\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: l'ID de grup «%s» no és vàlid\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: «-K» requereix CLAU=VALOR\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: el grup «%s» ja existeix\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s: el GID '%lu ja existeix\n"
+
+#, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: no es pot configurar el servei de neteja.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+" -r, --reset restableix els comptadors d'errors "
+"d'identificació\n"
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: no es pot eliminar l'entrada «%s» de %s\n"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: no es pot eliminar el grup primari de l'usuari «%s»\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: el grup «%s» no existeix\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: el grup «%s» és un grup NIS.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s és el mestre NIS\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: l'usuari «%s» és membre de %s\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: s'ha exhaurit la memòria. No es pot actualitzar %s.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Forma d'ús: %s [opcions] [acció]\n"
+"\n"
+"Opcions:\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+" -g, --group groupname canvia el nom de grup en lloc del grup de "
+"l'usuari\n"
+" (només «root»)\n"
+
+msgid "\n"
+msgstr "\n"
+
+msgid "Actions:\n"
+msgstr "Accions:\n"
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+" -a, --add username afegeix el nom d'usuari als membres del "
+"grup\n"
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+" -d, --delete username elimina el nom d'usuari dels membres del "
+"grup\n"
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr " -p, --purge elimina tots els membres del grup\n"
+
+msgid " -l, --list list the members of the group\n"
+msgstr " -l, --list llista els membres del grup\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: el seu nom de grup no concorda amb el seu nom d'usuari\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s:només l'usuari «root» pot fer servir l'opció -g/--group\n"
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr " -g, --gid GID canvia l'ID del grup per GID\n"
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr " -n, --new-name NEW_GROUP canvia el nom del grup per NEW_GROUP\n"
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique permet utilitzar un duplicat (no únics) GID\n"
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+" -p, --password PASSWORD canvia la contrasenya per aquesta (xifrada)\n"
+" PASSWORD\n"
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: el nom de grup «%s» no és vàlid\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: el grup %s no és un grup NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: usuari %s desconegut\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Forma d'ús: %s [opcions] [grup [grup_ombra]]\n"
+"\n"
+"Opcions:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Forma d'ús: %s [opcions] [grup]\n"
+"\n"
+"Opcions:\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+" -r, --read-only visualitza els errors i avisos\n"
+" però sense canviar els fitxers\n"
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr " -s, --sort ordena les entrades per UID\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: «-s» i «-r» són incompatibles\n"
+
+msgid "invalid group file entry"
+msgstr "l'entrada del fitxer de grup no és vàlida"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "voleu eliminar la línia «%s»? "
+
+msgid "duplicate group entry"
+msgstr "l'entrada de grup està duplicada"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "el nom de grup «%s» no és vàlid\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "el nom de grup «%lu» no és vàlid\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "grup %s: no existeix l'usuari %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "voleu eliminar el membre «%s»? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "no hi ha cap entrada coincident al fitxer de grup en %s\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "voleu afegir el grup «%s» a %s?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"el grup %s té una entrada a %s, però el seu camp de contrasenya a %s no "
+"està establert a «x»\n"
+
+msgid "invalid shadow group file entry"
+msgstr "l'entrada del fitxer de grup ombra no és vàlida"
+
+msgid "duplicate shadow group entry"
+msgstr "entrada de grup ombra duplicada"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "grup ombra %s: no existeix l'usuari administratiu %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "voleu eliminar el membre administratiu «%s»? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "grup ombra %s: no existeix l'usuari %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: el fitxer s'ha actualitzat\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: no hi ha canvis\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: no es pot eliminar %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Forma d'ús: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Forma d'ús: id\n"
+
+msgid " groups="
+msgstr " grups="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+" -b, --before DIES mostra només els registres de lastlog més\n"
+" antics que DIES\n"
+
+#, fuzzy
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+" -a, --all mostra els registres «faillog» per a tots "
+"els usuaris\n"
+
+#, fuzzy
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+" -a, --all mostra els registres «faillog» per a tots "
+"els usuaris\n"
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time DIES mostra només els registres de lastlog més\n"
+" recents que DIES\n"
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+" -u, --user USUARI mostra el registre de lastlog de l'USUARI\n"
+
+msgid "Username Port From Latest"
+msgstr "Usuari Port Des de Últim"
+
+msgid "Username Port Latest"
+msgstr "Usuari Port Últim"
+
+msgid "**Never logged in**"
+msgstr "**No ha entrat mai**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+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"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s: no es pot actualitzar el fitxer de contrasenyes\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 "Forma d'ús: %s [-p] [nom]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h ordinador] [-f nom]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r ordinador\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr "error de configuració - no es pot analitzar el valor %s: '%d'"
+
+msgid "Invalid login time"
+msgstr "El temps d'accés no és vàlid"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Sistema tancat per a manteniment rutinari"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[S'ha evitat la desconnexió -- l'accés de «root» està permès]."
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr "%s: no es pot treballar sense ésser administrador\n"
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"No hi ha entrada utmp. Heu d'executar «login» des del «sh» de nivell més baix"
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"L'accés ha caducat després de %u segons.\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: fallada de PAM, s'està cancel·lant: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s usuari: "
+
+msgid "login: "
+msgstr "usuari: "
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "S'ha excedit el nombre màxim d'intents (%u)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "accés: cancel·lat a petició del PAM\n"
+
+msgid "Login incorrect"
+msgstr "Accés incorrecta"
+
+#, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "No es pot trobar l'usuari (%s)\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s usuari: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: fallada al fer fork: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSCTTY ha fallat a %s"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Avís: accés reactivat després d'un bloqueig temporal."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Últim accés: %s a %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Última accés: %.19s a %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " des de %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"temps d'accés excedit\n"
+"\n"
+
+msgid "Usage: logoutd\n"
+msgstr "Forma d'ús: logoutd\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: can't open group file\n"
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr "%s: no es pot obrir el fitxer de grups\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: fallida en eliminar %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: fallida en eliminar %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to unlock %s\n"
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: ha fallat el desbloqueig de %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to find tcb directory for %s\n"
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: no es pot trobar el directori «tcb» per %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Failed to create tcb directory for %s\n"
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: no es pot generar el directori «tcb» per a %s\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Forma d'ús: newgrp [-] [grup]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Forma d'ús: sg grup [[-c] ordre]\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: Error en escriure %s: %s\n"
+
+msgid "Invalid password.\n"
+msgstr "Contrasenya no vàlida.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: fallada al fer fork: %s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: el GID »%lu« no existeix\n"
+
+msgid "too many groups\n"
+msgstr "hi ha massa grups\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+#, fuzzy
+#| msgid " -q, --quiet quiet mode\n"
+msgid " -b, --badnames allow bad names\n"
+msgstr " -q, --quiet mode silenciós\n"
+
+msgid " -r, --system create system accounts\n"
+msgstr " -r, --system genera els comptes del sistema\n"
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: el grup «%s» és un grup «shadow», però no existeix a /etc/group\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: l'ID d'usuari «%s» no és vàlid\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: el nom d'usuari «%s» no és vàlid\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: línia %d: la línia no és vàlida\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: no es pot actualitzar l'entrada per a l'usuari %s (no apareix a la base "
+"de dades de contrasenyes)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: línia %d: no es pot generar l'usuari\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: línia %d: no es pot generar el grup\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: line %d: l'usuari «%s» no existeix a %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: línia %d: no es pot actualitzar la contrasenya\n"
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr ""
+"%s: línia %d: no s'ha pogut generar el directori «%s» (ordre mkdir): %s\n"
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr ""
+"%s: línia %d: no s'ha pogut canviar el propietari (ordre «chown») %s: %s\n"
+
+#, c-format
+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 new %s entry\n"
+msgstr "%s: ha fallat la preparació de la nova entrada %s: «%s»\n"
+
+#, fuzzy, c-format
+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 find subordinate group range\n"
+msgstr "%s: no es pot actualitzar el fitxer de grups\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+" -a, --all informa de l'estat de la contrasenya\n"
+" per a tots els comptes\n"
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+" -d, --delete esborra la contrasenya per al compte\n"
+" anomenat\n"
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+" -e, --expire força la caducitat de la contrasenya per\n"
+" al compte anomenat\n"
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+" -k, --keep-tokens canvia la contrasenya només si ha caducat\n"
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -i, --inactive INACTIU estableix la contrasenya a inactiva després\n"
+" d'INACTIU dies de caducitat\n"
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr " -l, --lock bloca el compte anomenat\n"
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -n, --mindays DIES_MÍN estableix els dies mínims abans del canvi\n"
+" de contrasenya a DIES_MÍN\n"
+
+msgid " -q, --quiet quiet mode\n"
+msgstr " -q, --quiet mode silenciós\n"
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr " -r, --repository DIPÒSIT canvia la contrasenya en el DIPÒSIT\n"
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+" -S, --status informa de l'estat de la contrasenya per\n"
+" al compte anomenat\n"
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr " -u, --unlock desbloca el compte anomenat\n"
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -w, --warndays DIES_AVÍS estableix els dies d'avís de caducitat\n"
+" a DIES_AVÍS\n"
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -x, --maxdays DIES_MÀX estableix els dies màxims abans del canvi\n"
+" de contrasenya a DIES_MÀX\n"
+
+msgid "Old password: "
+msgstr "Contrasenya antiga: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Introduïu la nova contrasenya (un mínim de %d caràcters)\n"
+"Feu servir una combinació de lletres majúscules i minúscules i números.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Introduïu la nova contrasenya (un mínim de %d i un màxim de %d caràcters)\n"
+"Feu servir una combinació de lletres majúscules i minúscules i\n"
+"números.\n"
+
+msgid "New password: "
+msgstr "Contrasenya nova:"
+
+msgid "Try again."
+msgstr "Intenteu-ho de nou."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Avís: contrasenya feble (introduïu-la de nou per fer-la servir igualment)."
+
+msgid "They don't match; try again.\n"
+msgstr "No coincideixen; intenteu-ho de nou.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "No es pot canviar la contrasenya de %s.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Encara no es pot canviar la contrasenya de %s.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: el desbloqueig de la contrasenya deixarà el compte sense contrasenya.\n"
+"Heu d'establir una contrasenya amb «usermod-p» per desblocar la contrasenya "
+"d'aquest compte.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: el dipòsit %s no és admès\n"
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not authorized to change the password of %s\n"
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr "%s: %s no està autoritzat per canviar la contrasenya de %s\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr ""
+"%s: No podeu veure o canviar la informació de la contrasenya per a %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "S'està canviant la contrasenya per a %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "No s'ha canviat la contrasenya per a %s.\n"
+
+#, c-format
+msgid "%s: password changed.\n"
+msgstr "%s: S'ha canviat la contrasenya.\n"
+
+#, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "%s: la informació de caducitat de la contrasenya ha canviat.\n"
+
+# NOTE: passwd is a file (/etc/passwd)
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Forma d'ús: %s [opcions] [fitxer «/etc/passwd»]\n"
+"\n"
+"Opcions:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Forma d'ús: %s [opcions] [passwd [shadow]]\n"
+"\n"
+"Opcions:\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr " -q, --quiet informa només dels errors\n"
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+"%s: no hi ha un fitxer «shadow» alternatiu permès quan USE_TCB està "
+"habilitat.\n"
+
+msgid "invalid password file entry"
+msgstr "l'entrada del fitxer de contrasenyes no és vàlida"
+
+msgid "duplicate password entry"
+msgstr "l'entrada de contrasenya està duplicada"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "el nom d'usuari «%s» no és vàlid\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "l'ID d'usuari «%lu» no és vàlid\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "usuari «%s»: no existeix el grup %lu\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "usuari «%s»: el directori «%s» no existeix\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "usuari «%s»: el programa «%s» no existeix\n"
+
+#, c-format
+msgid "no tcb directory for %s\n"
+msgstr "no es troba el directori «tcb» per a %s\n"
+
+#, c-format
+msgid "create tcb directory for %s?"
+msgstr "genera el directori «tcb» per a %s?"
+
+#, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "ha fallat la generació del directori «tcb» per a %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: no es pot blocar el fitxer %s\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "cap entrada del fitxer de contrasenyes concorda amb %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "voleu afegir l'usuari «%s» a %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"l'usuari %s té una entrada a %s, però el seu camp de contrasenya a %s no "
+"està establert a «x»\n"
+
+msgid "invalid shadow password file entry"
+msgstr "l'entrada del fitxer de contrasenyes ombra no és vàlida"
+
+msgid "duplicate shadow password entry"
+msgstr "entrada de contrasenya ombra duplicada"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "usuari %s: l'últim canvi de contrasenya s'ha produït en el futur\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: no es pot ordenar les entrades en el fitxer %s\n"
+
+#, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: no es pot treballar amb el «tcb» habilitat\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: ha fallat el canvi del mode %s a 0600\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "L'accés de «su» a aquest compte està DENEGAT.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "S'ha evitat l'autenticació de contrasenya.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Si us plau introduïu la VOSTRA contrasenya com a autenticació.\n"
+
+#, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: no es pot blocar el «shell» de l'usuari\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr "%s: senyal de mal funcionament\n"
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr "%s: el senyal emmascara un error\n"
+
+msgid "Session terminated, terminating shell..."
+msgstr "Sessió acabada, finalitzant el «shell»..."
+
+#, c-format
+msgid " ...killed.\n"
+msgstr "...mort.\n"
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr "...esperant al fill per acabar.\n"
+
+msgid " ...terminated.\n"
+msgstr "...acabat.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: su [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
+#| " -h, --help display this help message and exit\n"
+#| " -, -l, --login make the shell a login shell\n"
+#| " -m, -p,\n"
+#| " --preserve-environment do not reset environment variables, and\n"
+#| " keep the same shell\n"
+#| " -s, --shell SHELL use SHELL instead of the default in "
+#| "passwd\n"
+#| "\n"
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"Forma d'ús: su [opcions] [USUARI]\n"
+"\n"
+"Opcions:\n"
+" -c, --command ORDRE passa l'ORDRE a l'intèrpret d'ordres\n"
+" invocat\n"
+" -h, --help mostra aquest missatge d'ajuda i acaba\n"
+" -, -l, --login fes de l'intèrpret d'ordres un d'accés\n"
+" -m, -p,\n"
+" --preserve-environment manté les variables d'entorn,\n"
+" i el mateix intèrpret d'ordres\n"
+" -s, --shell INTÈRPRET fes servir INTÈRPRET en comptes del\n"
+" predeterminat a passwd\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ignorat)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "No esteu autoritzats a usar «su %s»\n"
+
+msgid "(Enter your own password)"
+msgstr "(Introduïu la vostra pròpia contrasenya)"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: l'autenticació ha fallat\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s: No estau autoritzat a usar «su» en aquest moment\n"
+
+#, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "No hi ha entrada de contrasenya per a l'usuari «%s»\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: s'ha d'executar des d'un terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: error %d\n"
+
+#, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: No es pot deixar anar el terminal de control\n"
+
+#, c-format
+msgid "Cannot execute %s\n"
+msgstr "No es pot executar %s\n"
+
+msgid "No password file"
+msgstr "No hi ha fitxer de contrasenyes"
+
+msgid "TIOCSCTTY failed"
+msgstr "ha fallat TIOCSCTTY"
+
+msgid "No password entry for 'root'"
+msgstr "No hi ha entrada de contrasenya per a «root»"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Pitgeu «control-d» per continuar amb l'inici normal del sistema,\n"
+"(o introduïu la contrasenya de «root» per a manteniment del sistema):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "S'està entrant en mode de manteniment del sistema"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr "%s: %s va ser generat, però no és possible eliminar-ho\n"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr "%s: la configuració %s a %s serà ignorada\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: no es pot crear un fitxer nou de preferències predeterminades\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: no es pot crear un fitxer nou de preferències predeterminades\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: no es pot obrir un fitxer nou de preferències predeterminades\n"
+
+#, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: línia massa llarga a %s: %s..."
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: no es pot generar l'enllaç simbòlic %s: %s\n"
+
+#, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: reanomena %s: %s\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: el grup «%s» és un grup NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: s'han especificat massa grups (màx de %d).\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Forma d'ús: %s [opcions] LOGIN\n"
+" %s -D\n"
+" %s -D [opcions]\n"
+"\n"
+"Opcions:\n"
+
+#, fuzzy
+#| msgid " -s, --shadow edit shadow or gshadow database\n"
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+" -s, --shadow edita la base de dades «shadow» o «gshadow»\n"
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+" -b, --base-dir BASE_DIR directori base per al directori arrel del\n"
+" compte nou\n"
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr " -c, --comment COMMENT camp GECOS del nou compte\n"
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr " -d, --home-dir HOME_DIR directori arrel del nou compte\n"
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+" -D, --defaults imprimeix o canvia la configuració "
+"predeterminada de l'usuari afegit\n"
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr " -e, --expiredate EXPIRE_DATE data de venciment del nou compte\n"
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr " -f, --inactive INACTIVE període d'inactivitat del nou compte\n"
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+" -g, --gid GROUP nom o ID del grup primari del nou\n"
+" compte\n"
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+" -G, --groups GROUPS llista dels grups suplementaris del nou\n"
+" compte\n"
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+" -k, --skel SKEL_DIR fer servir aquesta branca de directori "
+"alternativa\n"
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+" -l, --no-log-init no afegir l'usuari al darrer informe i\n"
+" a la base de dades dels informes d'errades\n"
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+" -m, --create-home genera el directori arrel dels usuaris\n"
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+" -M, --no-create-home no genera el directori arrel dels usuaris\n"
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+" -N, --no-user-group no genera el grup amb el mateix nom de\n"
+" l'usuari\n"
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique permetre generar usuaris amb duplicació\n"
+" (no únics) UID\n"
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr " -p, --password PASSWORD contrasenya xifrada del nou compte\n"
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr " -s, --shell SHELL «shell» d'entrada del nou compte\n"
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr " -u, --uid UID ID d'usuari del nou compte\n"
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+" -U, --user-group generar un grup amb el mateix nom que "
+"l'usuari\n"
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+" -Z, --selinux-user SEUSER utilitzar un «SEUSER» específic per a "
+"l'assignació d'usuaris «SELinux»\n"
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: el directori base «%s» no és vàlid\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: el comentari «%s» no és vàlid\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: el directori personal «%s» no és vàlid\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: les contrasenyes ombra són requerides per a «-e»\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: les contrasenyes ombra són requerides per a «-f»\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: el camp «%s» no és vàlid\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: l'intèrpret «%s» no és vàlid\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Warning: %s is not executable\n"
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: Advertència: %s no és executable\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rewrite password file\n"
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s: no es pot reescriure el fitxer de contrasenyes\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr "%s: -Z requereix nucli «SELinux» habilitat\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+"%s: ha fallat el restabliment de l'entrada del registre d'errors de UID %lu: "
+"%s\n"
+
+#, c-format
+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 reset the faillog entry of UID %lu: %s\n"
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr ""
+"%s: ha fallat el restabliment de l'entrada del registre d'errors de UID %lu: "
+"%s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: ha fallat la preparació de la nova entrada %s: «%s»\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error updating files\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: s'ha produït un error en actualitzar el fitxer\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: no es pot crear el directori %s\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s home directory (%s) not found\n"
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: no s'ha trobat el directori personal (%s) de %s \n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to allocate memory: %s\n"
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "%s: no es pot assignar memòria: %s\n"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: no es pot crear el directori %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr ""
+"%s: línia %d: no s'ha pogut canviar el propietari (ordre «chown») %s: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr ""
+"%s: línia %d: no s'ha pogut canviar el propietari (ordre «chown») %s: %s\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "S'està creant la bústia de correu"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"No s'ha trobat el grup «mail». S'està creant la bústia de correu de "
+"l'usuariamb mode 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "S'estan establint els permisos de la bústia de correu"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: l'usuari «%s» existeix\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: el grup %s existeix, si voleu afegir aquest usuari a aquest grup, useu «-"
+"g».\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: no es pot generar l'usuari\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: el UID %lu no és únic\n"
+
+#, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: no es pot generar el directori «tcb» per a %s\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: no es pot generar el grup\n"
+
+#, fuzzy, c-format
+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 subordinate group IDs\n"
+msgstr "%s: no es pot generar el grup\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: avís: el directori personal ja existeix.\n"
+"No s'hi copiarà cap fitxer del directori skel.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+"%s: avís: falla el nom d'usuari %s a %s a l'assignació d'usuaris «SELinux».\n"
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+" -f, --force força l'eliminació de fitxers, encara que\n"
+" no siguin propietat de l'usuari\n"
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+" -r, --remove elimina el directori personal i la cua\n"
+" de correu\n"
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+" -Z, --selinux-user elimina totes les assignacions SELinux per a "
+"l'usuari\n"
+
+#, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr ""
+"%s: no s'ha pogut eliminar el grup %s degut a què no és el grup primari de "
+"l'usuari %s\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr "%s: no s'eliminarà el grup %s degut a que hi ha usuaris assignats.\n"
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: no es pot eliminar el grup %s, que és el grup primari per un altre "
+"usuari.\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "%s: no es pot eliminar l'entrada «%s» de %s\n"
+
+#, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: %s no s'ha trobat la cua de correu (%s)\n"
+
+#, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: avís: no es pot eliminar %s: %s\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s no és propietat de %s, no s'elimina\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+"%s: No és possible assignar memòria, l'entrada «tcb» de %s no s'elimina.\n"
+
+#, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: no es poden eliminar autoritzacions: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: no es pot eliminar el contingut de %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: no es pot eliminar els fitxers «tcb» de %s: %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: l'usuari %s és un usuari NIS\n"
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: no s'ha trobat el directori personal (%s) de %s \n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: no s'elimina el directori %s (eliminaria el directori personal de "
+"l'usuari %s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: s'ha produït un error en eliminar el directori %s\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: s'ha produït un error en eliminar el directori %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+"%s: avís: ha fallat l'eliminació del nom d'usuari %s de l'assignació "
+"d'usuaris SELinux.\n"
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr " -c, --comment COMENTARI nou valor per al camp GECOS\n"
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+" -d, --home DIR_PERSONAL nou directori personal per al nou compte\n"
+" d'usuari\n"
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -e, --expiredate DATA_CADUCITAT estableix la data de caducitat del compte\n"
+" a DATA_CADUCITAT\n"
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -f, --inactive INACTIU estableix la contrasenya a inactiva després\n"
+" d'INACTIU dies de caducitat\n"
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+" -g, --gid GRUP força l'ús de GRUP com a nou grup inicial\n"
+" d'accés\n"
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+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"
+" 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"
+" d'altres grups\n"
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr " -l, --login NEW_LOGIN nou nom d'usuari\n"
+
+msgid " -L, --lock lock the user account\n"
+msgstr " -l, --login USUARI nou valor per al nom d'usuari\n"
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+" -m, --move-home mou els continguts del directori personal\n"
+" a la nova ubicació (usar només amb -d)\n"
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr " -o, --non-unique permet usar UID duplicats (no únics)\n"
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+" -p, --password CONTRASENYA usa contrasenya xifrada per a la nova\n"
+" contrasenya\n"
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr " -u, --uid UID nou UID per al compte d'usuari\n"
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr " -U, --unlock desbloca el compte d'usuari\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"
+msgstr ""
+" -Z, --selinux-user SEUSER nova assignació SELinux per al compte "
+"d'usuari\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: el desbloqueig de la contrasenya de l'usuari deixarà el compte sense "
+"contrasenya.\n"
+"Ha d'establir una contrasenya amb «usermod-p» per desbloquejar la "
+"contrasenya de l'usuari.\n"
+
+#, c-format
+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 subordinate uid range '%s'\n"
+msgstr "%s: la data «%s» no és vàlida\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: la data «%s» no és vàlida\n"
+
+#, c-format
+msgid "%s: no options\n"
+msgstr "%s: sense opcions\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: els indicadors -L, -p, i -U són exclusius\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: les contrasenyes ombra són obligatòries per a «-e» i «-f»\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: UID '%lu' ja existeix\n"
+
+#, fuzzy, c-format
+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"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: el directori %s ja existeix\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+"%s: El directori arrel d'usuari anterior (%s) no és un directori. No s'ha "
+"eliminat i no s'han generat els directoris arrels d'usuaris.\n"
+
+#, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: No s'ha pogut canviar la propietat del directori d'inici"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: avís: no s'ha pogut eliminar completament l'antic directori personal %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: no es pot reanomenar el directori %s a %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: ha fallat la còpia de l'entrada del darrer registre de l'usuari %lu al "
+"usuari %lu: %s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: ha fallat la còpia de l'entrada del registre d'errors del usuari %lu al "
+"usuari %lu: %s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: avís: %s no és propietat de %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "no s'ha pogut canviar el propietari de la bústia de correu"
+
+msgid "failed to rename mailbox"
+msgstr "no s'ha pogut reanomenar la bústia de correu"
+
+#, fuzzy, c-format
+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 add uid range %lu-%lu to '%s'\n"
+msgstr "%s: ha fallat la preparació de la nova entrada %s: «%s»\n"
+
+#, fuzzy, c-format
+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 add gid range %lu-%lu to '%s'\n"
+msgstr "%s: ha fallat la preparació de la nova entrada %s: «%s»\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Heu modificat %s.\n"
+"Cal que modifiqueu %s per mantenir la consistència.\n"
+"Feu servir l'ordre «%s» per fer-ho.\n"
+
+msgid " -g, --group edit group database\n"
+msgstr " -g, --group edita la base de dades del grup\n"
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr ""
+" -p, --passwd edita la base de dades de contrasenyes\n"
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+" -s, --shadow edita la base de dades «shadow» o «gshadow»\n"
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+" -u, --user usuaris «tcb» que poden editar el fitxer "
+"«shadow»\n"
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: fallida en eliminar %s\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: no s'ha canviat %s\n"
+
+msgid "failed to create scratch directory"
+msgstr "no s'ha pogut generar el directori temporal"
+
+msgid "failed to drop privileges"
+msgstr "fallida en eliminar els permisos"
+
+msgid "Couldn't get file context"
+msgstr "No s'ha pogut obtenir el context del fitxer"
+
+msgid "setfscreatecon () failed"
+msgstr "ha fallat setfscreatecon()"
+
+msgid "failed to gain privileges"
+msgstr "fallida en obtenir els permisos"
+
+msgid "Couldn't lock file"
+msgstr "No s'ha pogut blocar el fitxer"
+
+msgid "Couldn't make backup"
+msgstr "No s'ha pogut fer una còpia de seguretat"
+
+#, 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» ha sortit amb l'estat %d"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+msgid "failed to open scratch file"
+msgstr "no s'ha pogut obrir el fitxer de treball («scratch file»)"
+
+msgid "failed to unlink scratch file"
+msgstr "no s'ha pogut desvincular el fitxer de treball "
+
+msgid "failed to stat edited file"
+msgstr "no s'ha pogut comptabilitzar el fitxer editat"
+
+msgid "failed to allocate memory"
+msgstr "no es pot assignar memòria"
+
+msgid "failed to create backup file"
+msgstr "no es pot generar el fitxer de còpia de seguretat"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: no es pot restaurar %s: %s (els seus canvis estan a %s)\n"
+
+#, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: no es pot trobar el directori «tcb» per %s\n"
+
+#~ msgid " -c, --crypt-method the crypt method (one of %s)\n"
+#~ msgstr " -c, --crypt-method el mètode d'encriptat (un de %s)\n"
+
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr ""
+#~ "Forma d'ús: vipw [opcions]\n"
+#~ "\n"
+#~ "Opcions:\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "malloc(%d) ha fallat\n"
+
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Forma d'ús: chage [opcions] [USUARI]\n"
+#~ "\n"
+#~ "Opcions:\n"
+#~ " -d, --lastday ÚLTIM_DIA estableix l'últim canvi de "
+#~ "contrasenya\n"
+#~ " a ÚLTIM_DIA\n"
+#~ " -E, --expiredate DATA_EXPIRACIÓ estableix la data d'expiració del\n"
+#~ " compte a DATA_EXPIRACIÓ\n"
+#~ " -h, --help mostra aquesta ajuda i acaba\n"
+#~ " -I, --inactive INACTIVA estableix la contrasenya inactiva\n"
+#~ " després d'expiració a INACTIVA\n"
+#~ " -l, --list mostra informació d'envelliment del\n"
+#~ " compte\n"
+#~ " -m, --mindays DIES_MÍN estableix el número mínim de dies "
+#~ "abans\n"
+#~ " de canvi de contrasenya a DIES_MÍN\n"
+#~ " -M, --maxdays DIES_MÀX estableix el número màxim de dies "
+#~ "abans\n"
+#~ " de canvi de contrasenya a DIES_MÀX\n"
+#~ " -W, --warndays DIES_AVÍS estableix els dies d'avís d'expiració\n"
+#~ " a DIES_AVÍS\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: l'autenticació PAM ha fallat\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "Forma d'ús: %s [-f nom_complet] [-r num_habitació] [-w tel_feina]\n"
+#~ "\t[-h tel_casa] [-o altre] [usuari]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr ""
+#~ "Forma d'ús: %s [-f nom_complet] [-r num_habitació] [-w tel_feina]\n"
+#~ "[-h tel_casa]\n"
+
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Forma d'ús: %s [opcions]\n"
+#~ "\n"
+#~ "Opcions:\n"
+#~ " -c, --crypt-method mètode de xifrat (un de %s)\n"
+#~ " -e, --encrypted les contrasenyes proveïdes estan "
+#~ "xifrades\n"
+#~ " -h, --help mostra aquest missatge d'ajuda i acaba\n"
+#~ " -m, --md5 xifra la contrasenya en text pla fent "
+#~ "servir\n"
+#~ " l'algorisme MD5\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Forma d'ús: chsh [opcions] [USUARI]\n"
+#~ "\n"
+#~ "Opcions:\n"
+#~ " -h, --help mostra aquest missatge d'ajuda i acaba\n"
+#~ " -s, --shell INTÈRPRET nou intèrpret d'accés per al compte "
+#~ "d'usuari\n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "Forma d'ús: expiry {-f|-c}\n"
+
+#~ msgid "faillog: Failed to get the entry for UID %lu\n"
+#~ msgstr "faillog: Errada en l'obtenció de l'entrada per UID %lu\n"
+
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "informe d'error: no es pot obrir %s: %s\n"
+
+#~ msgid "faillog: Cannot get the size of %s: %s\n"
+#~ msgstr "faillog: No és possible obtenir la mida de %s: %s\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "Forma d'ús: groupdel grup\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "Forma d'ús: %s [-r] [-s] [grup [grup_ombra]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "Forma d'ús: %s [-r] [-s] [grup]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: «-s» i «-r» són incompatibles\n"
+
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "Forma d'ús: grpconv\n"
+
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "Forma d'ús: grpunconv\n"
+
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Forma d'ús: lastlog [opcions]\n"
+#~ "\n"
+#~ "Opcions:\n"
+#~ " -b, --before DIES mostra només els registres de lastlog "
+#~ "més\n"
+#~ " antics que DIES\n"
+#~ " -h, --help mostra aquest missatge d'ajuda i acaba\n"
+#~ " -t, --time DIES mostra només els registres de lastlog "
+#~ "més\n"
+#~ " recents que DIES\n"
+#~ " -u, --user USUARI mostra el registre de lastlog per a\n"
+#~ " l'usuari amb USUARI especific\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Forma d'ús: passwd [opcions] [USUARI]\n"
+#~ "\n"
+#~ "Opcions:\n"
+#~ " -a, --all informa de l'estat de la contrasenya\n"
+#~ " per a tots els comptes\n"
+#~ " -d, --delete esborra la contrasenya per al compte\n"
+#~ " anomenat\n"
+#~ " -e, --expire força la caducitat de la contrasenya per\n"
+#~ " al compte anomenat\n"
+#~ " -h, --help mostra aquest missatge d'ajuda i acaba\n"
+#~ " -k, --keep-tokens canvia la contrasenya només si ha "
+#~ "caducat\n"
+#~ " -i, --inactive INACTIU estableix la contrasenya a inactiva "
+#~ "després\n"
+#~ " d'INACTIU dies de caducitat\n"
+#~ " -l, --lock bloca el compte anomenat\n"
+#~ " -n, --mindays DIES_MÍN estableix els dies mínims abans del "
+#~ "canvi\n"
+#~ " de contrasenya a DIES_MÍN\n"
+#~ " -q, --quiet mode silenciós\n"
+#~ " -r, --repository REPOSITORI canvia la contrasenya en el REPOSITORI\n"
+#~ " -S, --status informa de l'estat de la contrasenya per\n"
+#~ " al compte anomenat\n"
+#~ " -u, --unlock desbloca el compte anomenat\n"
+#~ " -w, --warndays DIES_AVÍS estableix els dies d'avís de caducitat\n"
+#~ " a DIES_AVÍS\n"
+#~ " -x, --maxdays DIES_MÀX estableix els dies màxims abans del "
+#~ "canvi\n"
+#~ " de contrasenya a DIES_MÀX\n"
+#~ "\n"
+
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr "Forma d'ús: %s [-q] [-r] [contrasenya]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr "Forma d'ús: %s [-q] [-r] [-s] [contrasenya [ombra]]\n"
+
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "Forma d'ús: pwconv\n"
+
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "Forma d'ús: pwunconv\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "El identificador és desconegut: %s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "No hi ha intèrpret d'ordres\n"
+
+#~ msgid ""
+#~ "Usage: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force removal of files,\n"
+#~ " even if not owned by user\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -r, --remove remove home directory and mail spool\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Forma d'ús: userdel [opcions] USUARI\n"
+#~ "\n"
+#~ "Opcions:\n"
+#~ " -f, --force força l'eliminació de fitxers, encara "
+#~ "que\n"
+#~ " no siguin propietat de l'usuari\n"
+#~ " -h, --help mostra aquesta ajuda i acaba\n"
+#~ " -r, --remove elimina el directori personal i la cua\n"
+#~ " de correu\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Forma d'ús: usermod [opcions] USUARI\n"
+#~ "\n"
+#~ "Opcions:\n"
+#~ " -c, --comment COMENTARI nou valor per al camp GECOS\n"
+#~ " -d, --home DIR_PERSONAL nou directori personal per al nou compte\n"
+#~ " d'usuari\n"
+#~ " -e, --expiredate DATA_CADUCIT estableix la data de caducitat del "
+#~ "compte\n"
+#~ " a DATA_CADUCITAT\n"
+#~ " -f, --inactive INACTIU estableix la contrasenya a inactiva "
+#~ "després\n"
+#~ " d'INACTIU dies de caducitat\n"
+#~ " -g, --gid GRUP força l'ús de GRUP com a nou grup "
+#~ "inicial\n"
+#~ " d'accés\n"
+#~ " -G, --groups GRUPS llista de GRUPS addicionals\n"
+#~ " -a, --append afegeix l'usuari als GRUPS addicionals\n"
+#~ " llistats amb la opció -G sense eliminar-"
+#~ "los\n"
+#~ " d'altres grups\n"
+#~ " -h, --help mostra aquest missatge d'ajuda i surt\n"
+#~ " -l, --login USUARI nou valor per al nom d'usuari\n"
+#~ " -L, --lock bloca el compte d'usuari\n"
+#~ " -m, --move-home mou els continguts del directori "
+#~ "personal\n"
+#~ " a la nova ubicació (usar només amb -d)\n"
+#~ " -o, --non-unique permet usar UID duplicats (no únics)\n"
+#~ " -p, --password CONTRASENYA usa contrasenya xifrada per a la nova\n"
+#~ " contrasenya\n"
+#~ " -s, --shell INTÈRPRET nou intèrpret d'accés per al compte "
+#~ "d'usuari\n"
+#~ " -u, --uid UID nou UID per al compte d'usuari\n"
+#~ " -U, --unlock desbloca el compte d'usuari\n"
+#~ "%s\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s: no s'han especificat assenyaladors\n"
+
+#~| msgid ""
+#~| "Usage: vipw [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -g, --group edit group database\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -p, --passwd edit passwd database\n"
+#~| " -q, --quiet quiet mode\n"
+#~| " -s, --shadow edit shadow or gshadow database\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group edit group database\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -p, --passwd edit passwd database\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow edit shadow or gshadow database\n"
+#~ " -u, --user which user's tcb shadow file to edit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Forma d'ús: vipw [opcions]\n"
+#~ "\n"
+#~ "Opcions:\n"
+#~ " -g, --group edita la base de dades de grup\n"
+#~ " -h, --help mostra aquest missatge d'ajuda i acaba\n"
+#~ " -p, --passwd edita la base de dades de passwd\n"
+#~ " -q, --quiet mode silenciós\n"
+#~ " -s, --shadow edita la base de dades de shadow o "
+#~ "gshadow\n"
+#~ "\n"
+
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Forma d'ús: %s [entrada]\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s: no es pot crear %s\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s: no es pot fer canviar el propietari a %s\n"
+
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -a, --all display faillog records for all users\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -l, --lock-time SEC after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| " -m, --maximum MAX set maximum failed login counters to "
+#~| "MAX\n"
+#~| " -r, --reset reset the counters of login failures\n"
+#~| " -t, --time DAYS display faillog records more recent than "
+#~| "DAYS\n"
+#~| " -u, --user LOGIN display faillog record or maintains "
+#~| "failure\n"
+#~| " counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| " options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all display faillog records for all users\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -l, --lock-time SEC after failed login lock account to SEC "
+#~ "seconds\n"
+#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
+#~ " -r, --reset reset the counters of login failures\n"
+#~ " -t, --time DAYS display faillog records more recent than "
+#~ "DAYS\n"
+#~ " -u, --user LOGIN display faillog record or maintains "
+#~ "failure\n"
+#~ " counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ " options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Forma d'ús: faillog [opcions]\n"
+#~ "\n"
+#~ "Opcions:\n"
+#~ " -a, --all mostra els registres de faillog de tots "
+#~ "els\n"
+#~ " usuaris\n"
+#~ " -h, --help mostra aquest missatge d'ajuda i acaba\n"
+#~ " -l, --lock-time SEG bloca durant SEG segons després d'una\n"
+#~ " fallada d'accés\n"
+#~ " -m, --maximum MÀX especifica els comptadors màxims de\n"
+#~ " fallades d'accés a MÀX\n"
+#~ " -r, --reset reinicialitza els comptadors de fallades\n"
+#~ " d'accés\n"
+#~ " -t, --time DIES mostra registres de faillog més recents "
+#~ "que\n"
+#~ " DIES\n"
+#~ " -u, --user USUARI mostra registre de faillog o manté\n"
+#~ " comptadors de fallades i límits (si es "
+#~ "fa\n"
+#~ " servir amb les opcions -r, -m o -l) "
+#~ "només\n"
+#~ " per a l'usuari amb USUARI\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force exit with success status if the\n"
+#~ " specified group already exists\n"
+#~ " -g, --gid GID use GID for the new group\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique allow create group with duplicate\n"
+#~ " (non-unique) GID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new group\n"
+#~ " -r, --system create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Forma d'ús: groupadd [opcions] GRUP\n"
+#~ "\n"
+#~ "Opcions:\n"
+#~ " -f, --force força la sortida amb un estat d'èxit si "
+#~ "el\n"
+#~ " grup especificat ja existeix\n"
+#~ " -g, --gid GID usa GID per al nou grup\n"
+#~ " -h, --help mostra aquest missatge d'ajuda i acaba\n"
+#~ " -K, --key CLAU=VALOR substitueix els valors predeterminats de\n"
+#~ " /etc/login.defs\n"
+#~ " -o, --non-unique permet crear grups amb GID duplicats\n"
+#~ " (no únics)\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --gid GID force use new GID by GROUP\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Forma d'ús: groupmod [opcions] GRUP\n"
+#~ "\n"
+#~ "Opcions:\n"
+#~ " -g, --gid GID força l'ús del nou GID per a GRUP\n"
+#~ " -h, --help mostra aquest missatge d'ajuda i acaba\n"
+#~ " -n, --new-name NOU_GRUP força l'ús del nom NOU_GRUP per a GRUP\n"
+#~ " -o, --non-unique permet usar GID duplicats (no únics) per\n"
+#~ " a GRUP\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~ " home directory\n"
+#~ " -c, --comment COMMENT set the GECOS field for the new user "
+#~ "account\n"
+#~ " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~ " -D, --defaults print or save modified default useradd\n"
+#~ " configuration\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP for the new user account\n"
+#~ " -G, --groups GROUPS list of supplementary groups for the new\n"
+#~ " user account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -l, --no-log-init do not add the user to the lastlog and\n"
+#~ " faillog databases\n"
+#~ " -m, --create-home create home directory for the new user\n"
+#~ " account\n"
+#~ " -M, --no-create-home do not create user's home directory\n"
+#~ " (overrides /etc/login.defs)\n"
+#~ " -N, --no-user-group do not create a group with the same name "
+#~ "as\n"
+#~ " the user\n"
+#~ " -o, --non-unique allow create user with duplicate\n"
+#~ " (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new user\n"
+#~ " account\n"
+#~ " -r, --system create a system account\n"
+#~ " -s, --shell SHELL the login shell for the new user account\n"
+#~ " -u, --uid UID force use the UID for the new user "
+#~ "account\n"
+#~ " -U, --user-group create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Forma d'ús: useradd [opcions] USUARI\n"
+#~ "\n"
+#~ "Opcions:\n"
+#~ " -b, --base-dir DIR_BASE directori base per al directori "
+#~ "personal\n"
+#~ " del nou compte d'usuari\n"
+#~ " -c, --comment COMENTARI estableix el camp GECOS per al nou\n"
+#~ " compte d'usuari\n"
+#~ " -d, --home-dir DIR_PERSONAL directori personal per al nou compte\n"
+#~ " -D, --defaults mostra o guarda les modificacions a "
+#~ "les\n"
+#~ " d'usuari configuracions "
+#~ "predeterminades\n"
+#~ " de useradd\n"
+#~ " -e, --expiredate DATA_CADUCITAT estableix la data de caducitat del\n"
+#~ " compte a DATA_CADUCITAT\n"
+#~ " -f, --inactive INACTIU estableix la contrasenya a inactiva\n"
+#~ " després\n"
+#~ " d'INACTIU dies de caducitat\n"
+#~ " -g, --gid GRUP força l'ús del GRUP per al nou compte\n"
+#~ " creat\n"
+#~ " -G, --groups GRUPS llista de grups suplementaris per al "
+#~ "nou\n"
+#~ " compte d'usuari\n"
+#~ " -h, --help mostra aquest missatge d'ajuda i "
+#~ "acaba\n"
+#~ " -k, --skel DIR_SKEL especifica un directori skel "
+#~ "alternatiu\n"
+#~ " -K, --key CLAU=VALOR substitueix els valors predeterminats "
+#~ "de\n"
+#~ " /etc/login.defs\n"
+#~ " -m, --create-home crea el directori personal per al nou\n"
+#~ " compte d'usuari\n"
+#~ " -o, --non-unique permet crear usuaris amb UID "
+#~ "duplicats\n"
+#~ " (no únics)\n"
+#~ " -p, --password CONTRASENYA usa contrasenya xifrada per al nou\n"
+#~ " compte d'usuari\n"
+#~ " -s, --shell INTÈRPRET l'intèrpret d'accés per al nou compte\n"
+#~ " d'usuari\n"
+#~ " -u, --uid UID força l'ús de UID per al nou compte\n"
+#~ " d'usuari\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "S'ha establert la contrasenya a caducada."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: no es pot blocar el fitxer de contrasenyes\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: no es pot obrir el fitxer de contrasenyes\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: no es pot blocar el fitxer de contrasenyes ombra\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: no es pot obrir el fitxer de contrasenyes ombra\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: no es pot reescriure el fitxer de contrasenyes ombra\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: no es pot reescriure el fitxer de contrasenyes\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: no es pot actualitzar el fitxer de contrasenyes ombra\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tNom complet: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tNúmero d'habitació: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tTelèfon de la feina: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tTelèfon de casa: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr ""
+#~ "No s'ha pogut blocar el fitxer de contrasenyes; intenteu-ho més tard\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "No s'ha pogut obrir el fitxer de contrasenyes.\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: no s'ha trobat %s a «/etc/passwd»\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Error en actualitzar l'entrada de la contrasenya.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "No es poden confirmar els canvis del fitxer de contrasenyes.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "No s'ha pogut desblocar el fitxer de contrasenyes.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: no es pot blocar el fitxer de grups\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: no s'ha pogut blocar el fitxer de contrasenyes ombra\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: no s'ha pogut obrir el fitxer de contrasenyes ombra\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr ""
+#~ "%s: s'ha produït un error en actualitzar el fitxer de contrasenyes ombra\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: s'ha produït un error en actualitzar l'entrada de grup\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: línia %d: el grup %s és desconegut\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: línia %d: no es pot actualitzar l'entrada\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: no s'ha pogut blocar el fitxer de contrasenyes ombra\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr ""
+#~ "%s: s'ha produït un error en actualitzar el fitxer de contrasenyes ombra\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr ""
+#~ "%s: s'ha produït un error en actualitzar el fitxer de contrasenyes\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: línia %d: l'usuari %s és desconegut\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr ""
+#~ "%s: línia %d: no s'ha pogut actualitzar l'entrada de la contrasenya\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: l'usuari és desconegut\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "L'usuari és desconegut: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Forma d'ús: %s [-r|-R] grup\n"
+
+#~ msgid " %s [-a user] group\n"
+#~ msgstr " %s [-a usuari] grup\n"
+
+#~ msgid " %s [-d user] group\n"
+#~ msgstr " %s [-d usuari] grup\n"
+
+#~ msgid " %s [-A user,...] [-M user,...] group\n"
+#~ msgstr " %s [-A usuari,...] [-M usuari,...] grup\n"
+
+#~ msgid " %s [-M user,...] group\n"
+#~ msgstr " %s [-M usuari,...] grup\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: no es pot obtenir el bloqueig\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr ""
+#~ "%s: no es pot obtenir el bloqueig del fitxer de contrasenyes ombra\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: no es pot reescriure el fitxer ombra\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: no es pot desblocar el fitxer\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: no es pot actualitzar l'entrada\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr ""
+#~ "%s: no es pot actualitzar l'entrada del fitxer de contrasenyes ombra\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "El grup és desconegut: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: no es pot obrir el fitxer\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: no s'ha pogut obrir el fitxer de contrasenyes ombra\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Qui sou?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: El membre %s és desconegut\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: s'ha produït un error en afegir la nova entrada de grup\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: no es pot reescriure el fitxer de grup\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: no es pot reescriure el fitxer de grups ombra\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: no es pot blocar el fitxer de grup\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: no es pot obrir el fitxer de grup\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: no es pot blocar el fitxer de grup ombra\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: no es pot obrir el fitxer de grup ombra\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: el GID %u no és únic\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: s'ha produït un error en eliminar l'entrada de grup\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: s'ha produït un error en eliminar l'entrada de grup ombra\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: no es pot eliminar el grup primari de l'usuari.\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "No s'han trobat els membres a borrar\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr "Forma d'ús: groupmems -a úsuari | -d úsuari | -D | -l [-g grup]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Només el superusuari pot afegir members a grups diferents\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "És requereix accés de grup\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "No és propietari principal del grup actual\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "l'autenticació PAM ha fallat per\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "No es pot blocar el fitxer de grup\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "No es pot obrir el fitxer de grup\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: no s'ha trobat %s a «/etc/group»\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u no és un GID únic\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s no és un nom únic\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: no es pot reescriure el fitxer de contrasenyes\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: no es pot blocar el fitxer de contrasenyes\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: no es pot d'obrir el fitxer de contrasenyes\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: no es pot actualitzar l'entrada ombra per a %s\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: no es pot actualitzar l'entrada per al grup %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: no es pot blocar el fitxer de grups ombra\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: no es pot obrir el fitxer de grups ombra\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: no es pot eliminar el grup ombra %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: no es pot actualitzar el fitxer de grups ombra\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: no es pot eliminar el fitxer de grups ombra\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "El UID és desconegut: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "El GID és desconegut: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: el grup %s no existeix\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: l'usuari %s no existeix\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: el nom d'usuari «%s» no és vàlid\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: no es pot blocar «/etc/passwd».\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: no es pot blocar «/etc/passwd».\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: no es pot blocar «/etc/passwd».\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: no es pot blocar «/etc/passwd».\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: no es poden obrir els fitxers\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: no es pot actualitzar l'entrada de la contrasenya per a %s\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: no es pot blocar el fitxer de contrasenyes\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: no es pot obrir el fitxer de contrasenyes\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: no es pot eliminar l'entrada ombra per a %s\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: no es pot actualitzar el fitxer de contrasenyes\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: no es pot actualitzar l'entrada per a l'usuari %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: no es pot eliminar el fitxer de contrasenyes ombra\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: el GID %s és desconegut\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: el grup %s és desconegut\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: sense memòria a update_gshadow\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: no es pot reescriure el fitxer de contrasenyes ombra\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: no es pot blocar el fitxer de contrasenyes ombra\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: no es pot obrir el fitxer de contrasenyes ombra\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: s'ha produït un error en blocar el fitxer de grups\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: s'ha produït un error en obrir el fitxer de grups\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: s'ha produït un error en blocar el fitxer de grups ombra\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: s'ha produït un error en obrir el fitxer de grups ombra\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr ""
+#~ "%s: s'ha produït un error en afegir la nova entrada de contrasenya\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr ""
+#~ "%s: s'ha produït un error en afegir la nova entrada de contrasenya ombra\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr ""
+#~ "%s: avís: CREATE_HOME no està suportat, si us plau useu «-m» en el seu "
+#~ "lloc.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: s'ha produït un error en actualitzar l'entrada de grup\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: s'ha produït un error en actualitzar l'entrada de grup\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: no es pot obrir el fitxer de grups\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: no es pot obrir el fitxer de grups ombra\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: s'ha produït un error en eliminar l'entrada de contrasenya\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr ""
+#~ "%s: s'ha produït un error en eliminar l'entrada de contrasenya ombra\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: s'ha produït un error en afegir la nova entrada de grup\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: l'UID %lu no és únic\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: s'ha produït un error en canviar l'entrada de contrasenya\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: s'ha produït un error en eliminar l'entrada de contrasenya\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr ""
+#~ "%s: s'ha produït un error en eliminar l'entrada de contrasenya ombra\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: no es pot obtenir un GID únic\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " a «%.100s» des de «%.200s»"
+
+#~ msgid " on '%.100s'"
+#~ msgstr " a «%.100s»"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: línia %d: no es pot crear el UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: el nom %s no és únic\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ " -h, --help\t\tdisplay this help message and exit\n"
+#~ " -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Forma d'ús: chpasswd [opcions]\n"
+#~ "\n"
+#~ "Opcions:\n"
+#~ " -e, --encrypted\tles contrasenyes proveïdes estan xifrades\n"
+#~ " -h, --help\t\tmostra aquest missatge d'ajuda i acaba\n"
+#~ " -m, --md5\t\tusa xifrat MD5 en comptes de DES quan les contrasenyes\n"
+#~ "\t\t\tproveïdes no estan xifrades\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "No hi ha fitxer de contrasenyes\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Disculpeu.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Disculpeu, la contrasenya per a %s encara no es pot canviar.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Disculpeu."
diff --git a/po/cs.gmo b/po/cs.gmo
new file mode 100644
index 0000000..5bf197e
--- /dev/null
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
new file mode 100644
index 0000000..ad975c0
--- /dev/null
+++ b/po/cs.po
@@ -0,0 +1,3943 @@
+# Czech translation of shadow-utils.
+# Jiří Pavlovský <pavlovsk@ff.cuni.cz>, 1999-2000
+# Miroslav Kuře <kurem@debian.cz>, 2004-2014
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.2\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\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"
+"Language: cs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"Zjištěno několik záznamů pojmenovaných „%s“ v souboru %s. Napravte to prosím "
+"pomocí pwck nebo grpck.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "typ šifry není knihovnou libcrypt podporován? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr "konfigurační chyba - nelze zpracovat hodnotu %s: „%s“"
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Nelze alokovat dostatek místa pro konfigurační údaje.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"konfigurační chyba - neznámá položka „%s“ (informujte správce systému)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr "%s: nscd nebyl ukončen normálně (signál %d)\n"
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr "%s: nscd skončil se stavem %d\n"
+
+msgid "Password: "
+msgstr "Heslo: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Heslo uživatele %s: "
+
+#, fuzzy
+#| msgid "Cannot open audit interface - aborting.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "Nelze otevřít auditní rozhraní - končím.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr "[libsemanage]: %s\n"
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr "Nelze vytvořit spojení k SELinuxovému semanage\n"
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr "Politika SELinuxu není řízená\n"
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr "Nelze číst úložiště SELinux politik\n"
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr "Nelze navázat spojení k SELinuxovému semanage\n"
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr "Nelze zahájit SELinux transakci\n"
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr "Dotaz na „seuser“ uživatele %s selhal\n"
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr "Nelze nastavit „serange“ uživatele %s\n"
+
+#, c-format
+msgid "Could not set sename for %s\n"
+msgstr "Nelze nastavit „sename“ uživatele %s\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr "Nelze změnit mapování uživatele %s na SEuživatele\n"
+
+#, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "Nelze vytvořit mapování uživatele %s na SEuživatele\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr "Nelze nastavit jméno uživatele %s\n"
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr "Nelze nastavit SELinux uživatele pro %s\n"
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr "Nelze přidat mapování uživatele %s na SEuživatele\n"
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr "Nelze inicializovat správu SELinuxu\n"
+
+#, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "Nelze vytvořit uživatelský klíč k SELinuxu\n"
+
+#, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "Nelze ověřit SELinux uživatele\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr "Nelze změnit mapování na SELinuxového uživatele\n"
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr "Nelze přidat mapování na SELinuxového uživatele\n"
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr "Nelze dokončit SELinuxovou transakci\n"
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+"Mapování uživatele %s není definováno, OK, pokud bylo použito výchozí "
+"mapování\n"
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr "Mapování uživatele %s je definováno v politice, nemůže být smazáno\n"
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr "Nelze smazat mapování pro uživatele %s"
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: došla paměť\n"
+
+#, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: nelze zavolat stat %s: %s\n"
+
+#, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: %s není ani adresář, ani symbolický odkaz.\n"
+
+#, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: Nelze číst symbolický odkaz %s: %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr "%s: Podezřele dlouhý symbolický odkaz: %s\n"
+
+#, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: Nelze vytvořit adresář %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: Nelze změnit vlastníka %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: Nelze změnit oprávnění k %s: %s\n"
+
+#, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: smazání: %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: Nelze odstranit adresář %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: Nelze přejmenovat %s na %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: Nelze odstranit %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: Nelze vytvořit symbolický odkaz %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: Nelze změnit vlastníky %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: Nelze zavolat lstat %s: %s\n"
+
+#, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: Varování, uživatel %s nemá v tcb svůj soubor shadow.\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+"%s: Krizový stav: shadow v tcb uživatele %s není běžným souborem "
+"(st_nlink=1).\n"
+"Účet je ponechán zamknutý.\n"
+
+#, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: vytvoření adresáře: %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: Nelze otevřít %s: %s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Varování: neznámá skupina %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Varování: příliš mnoho skupin\n"
+
+msgid "Your password has expired."
+msgstr "Platnost vašeho hesla vypršela."
+
+msgid "Your password is inactive."
+msgstr "Vaše heslo je vypnuto."
+
+msgid "Your login has expired."
+msgstr "Platnost vašeho účtu vypršela."
+
+msgid " Contact the system administrator."
+msgstr " Kontaktujte správce systému."
+
+msgid " Choose a new password."
+msgstr " Zvolte nové heslo."
+
+msgid "You must change your password."
+msgstr "Musíte si změnit heslo."
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Platnost vašeho hesla vyprší za %ld dnů.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Platnost vašeho hesla vyprší zítra."
+
+msgid "Your password will expire today."
+msgstr "Platnost vašeho hesla vyprší dnes."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "Nelze otevřít auditní rozhraní - končím.\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Nelze změnit vlastníka nebo oprávnění k tty stdin: %s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: nepodařilo se odemknout %s\n"
+
+#, c-format
+msgid "%s: "
+msgstr "%s: "
+
+msgid ": "
+msgstr ": "
+
+msgid "Environment overflow\n"
+msgstr "Přetečení prostředí\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Nemůžete změnit $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d selhání od posledního přihlášení.\n"
+"Poslední: %s na %s.\n"
+msgstr[1] ""
+"%d selhání od posledního přihlášení.\n"
+"Poslední: %s na %s.\n"
+msgstr[2] ""
+"%d selhání od posledního přihlášení.\n"
+"Poslední: %s na %s.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: Neplatné nastavení: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr "%s: Neplatné nastavení: GID_MIN (%lu), GID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "%s: selhala alokace paměti: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr "%s: Nelze získat jedinečné systémové GID (volná GID neexistují)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: Nelze získat jedinečné GID (volná GID neexistují)\n"
+
+#, c-format
+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: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: Neplatné nastavení: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX (%lu)\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"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr "%s: Nelze získat jedinečné systémové UID (volná UID neexistují)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: Nelze získat jedinečné UID (volná UID neexistují)\n"
+
+#, c-format
+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: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: chybná položka „%s“\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Could not set name for %s\n"
+msgid "%s: Could not seteuid to %d\n"
+msgstr "Nelze nastavit jméno uživatele %s\n"
+
+#, fuzzy, c-format
+#| msgid "Could not set name for %s\n"
+msgid "%s: Could not set caps\n"
+msgstr "Nelze nastavit jméno uživatele %s\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"
+
+msgid "You have new mail."
+msgstr "Máte novou poštu."
+
+msgid "No mail."
+msgstr "Nemáte žádnou poštu."
+
+msgid "You have mail."
+msgstr "Máte poštu."
+
+msgid "no change"
+msgstr "beze změny"
+
+msgid "a palindrome"
+msgstr "palindrom"
+
+msgid "case changes only"
+msgstr "pouze změna velikosti písmen"
+
+msgid "too similar"
+msgstr "příliš podobné"
+
+msgid "too simple"
+msgstr "příliš jednoduché"
+
+msgid "rotated"
+msgstr "rotované"
+
+msgid "too short"
+msgstr "příliš krátké"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Chybné heslo: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: volání pam_start() selhalo, chyba %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+msgid "passwd: password unchanged\n"
+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"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr "%s: násobné použití --root\n"
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr "%s: volba „%s“ vyžaduje argument\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: selhalo odevzdání privilegií (%s)\n"
+
+#, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: neplatná cesta k chrootu „%s“\n"
+
+#, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: nelze přistoupit k chroot adresáři %s: %s\n"
+
+#, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: nelze přejít (chdir) do chroot adresáře %s: %s\n"
+
+#, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: nelze změnit kořen (chroot) na adresář %s: %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"Neplatná hodnota ENCRYPT_METHOD: „%s“.\n"
+"Používám DES.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Nelze přejít do „%s“\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Žádný adresář, nastavuji HOME na /"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "%s nelze spustit"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Chybný kořenový adresář „%s“\n"
+
+#, c-format
+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."
+
+msgid "No"
+msgstr "Ne"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Použití: %s [volby] ÚČET\n"
+"\n"
+"Volby:\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+" -d, --lastday POSL_DEN nastaví datum poslední změny hesla na "
+"POSL_DEN\n"
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -E, --expiredate EXP_DATUM nastaví datum vypršení účtu na EXP_DATUM\n"
+
+msgid " -h, --help display this help message and exit\n"
+msgstr " -h, --help zobrazí tuto nápovědu a skončí\n"
+
+#, fuzzy
+#| msgid " -g, --group edit group database\n"
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr " -g, --group upraví databázi skupin\n"
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -I, --inactive NEAKTIV zablokuje účet po NEAKTIV dnech od vypršení\n"
+" platnosti hesla\n"
+
+msgid " -l, --list show account aging information\n"
+msgstr " -l, --list zobrazí informace o účtu\n"
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+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 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"
+" hesla na MAX_DNŮ\n"
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr " -R, --root CHROOT_ADRESÁŘ adresář, do kterého přejít\n"
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -W, --warndays VAR_DNŮ nastaví varování o expiraci na VAR_DNŮ\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr ""
+"Zadejte novou hodnotu, nebo stiskněte ENTER pro použití implicitní hodnoty"
+
+msgid "Minimum Password Age"
+msgstr "Minimální stáří hesla"
+
+msgid "Maximum Password Age"
+msgstr "Maximální stáří hesla"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Poslední změna hesla (RRRR-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Varování o vypršení platnosti hesla"
+
+msgid "Password Inactive"
+msgstr "Vypnuté heslo"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Vypršení platnosti účtu (RRRR-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Poslední změna hesla\t\t\t\t\t: "
+
+msgid "never"
+msgstr "nikdy"
+
+msgid "password must be changed"
+msgstr "heslo musí být změněno"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Platnost hesla vyprší\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Vypnuté heslo\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Platnost účtu vyprší\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Minimální počet dnů mezi změnami hesla\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Maximální počet dnů mezi změnami hesla\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Počet varovných dnů před vypršením platnosti hesla\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: chybné datum „%s“\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: chybný numerický argument „%s“\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: nepoužívejte „l“ s ostatními parametry\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Přístup odmítnut.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: vaše uživatelské jméno nelze zjistit.\n"
+
+#, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: PAM: %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: nelze zamknout %s, zkuste to opět později.\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: nelze otevřít %s\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: chyba při zápisu změn do %s\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: selhala příprava nového %s záznamu „%s“\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: soubor se stínovými hesly není přítomen\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: uživatel „%s“ v %s neexistuje\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Měním informace o uživateli %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: chyba při změně položek\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Použití: %s [volby] [ÚČET]\n"
+"\n"
+"Volby:\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr " -f, --full-name CELÉ_JMÉNO změní uživatelovo celé jméno\n"
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr " -h, --home-phone TEL_DOMŮ změní užvatelovo tel. číslo domů\n"
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr " -o, --other JINÉ_INFORMACE změní uživatelovy ostatní informace\n"
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr " -r, --room ČÍSLO_MÍSTNOSTI změní uživatelovo číslo místnosti\n"
+
+msgid " -u, --help display this help message and exit\n"
+msgstr " -u, --help zobrazí tuto nápovědu a skončí\n"
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+" -w, --work-phone TEL_ZAMĚSTN změní uživatelovo tel. číslo do kanceláře\n"
+
+msgid "Full Name"
+msgstr "Celé jméno"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "Číslo místnosti"
+
+msgid "Work Phone"
+msgstr "Telefon do zaměstnání"
+
+msgid "Home Phone"
+msgstr "Telefon domů"
+
+msgid "Other"
+msgstr "Ostatní"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Nelze změnit ID na root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: jméno obsahuje jiné znaky než ASCII: „%s“\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: chybné jméno: „%s“\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s: číslo místnosti obsahuje jiné znaky než ASCII: „%s“\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: chybné číslo místnosti: „%s“\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: chybné telefonní číslo do zaměstnání: „%s“\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: chybné telefonní číslo domů: „%s“\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: „%s“ obsahuje jiné znaky než ASCII\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: „%s“ obsahuje nepovolené znaky\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: uživatel „%s“ neexistuje\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: uživatele „%s“ nelze na NIS klientu změnit.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: „%s“ je hlavním NIS serverem pro tohoto klienta.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Měním informace o uživateli %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: položka je příliš dlouhá\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Použití: %s [volby]\n"
+"\n"
+"Volby:\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr " -c, --crypt-method TYP typ šifry (jeden z %s)\n"
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr " -e, --encrypted zadaná hesla jsou zašifrovaná\n"
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+" -m, --md5 zašifruje nešifrované heslo\n"
+" algoritmem MD5\n"
+
+#, fuzzy
+#| msgid ""
+#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
+#| " crypt algorithms\n"
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr " -s, --sha-rounds počet SHA iterací algoritmu SHA*\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: přepínač %s je povolen pouze s přepínačem %s\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: přepínače -c, -e a -m se navzájem vylučují\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: nepodporovaný typ šifry: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: řádek %d je příliš dlouhý\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: řádek %d: chybí nové heslo\n"
+
+#, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: nepodařilo se zašifrovat heslo se solí „%s“: %s\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: řádek %d: skupina „%s“ neexistuje\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: řádek %d: selhala příprava nového %s záznamu „%s“\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: chyba, změny budou ignorovány\n"
+
+#, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: (řádek %d: uživatel %s) heslo nebylo změněno\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: řádek %d: uživatel „%s“ neexistuje\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr " -s, --shell SHELL nový přihlašovací shell uživatele\n"
+
+msgid "Login Shell"
+msgstr "Přihlašovací shell"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Nemůžete změnit shell pro „%s“.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Měním přihlašovací shell pro %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: chybná položka %s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s: %s není platný shell\n"
+
+#, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: Varování: %s neexistuje\n"
+
+#, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: Varování: %s se nedá spustit\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+" -c, --check zkontroluje expiraci uživatelova hesla\n"
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+" -f, --force vynutí změnu hesla pokud uživatelovo heslo\n"
+" expirovalo\n"
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: volby %s a %s kolidují\n"
+
+#, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "%s: neočekávaný argument: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+" -a, --all zobrazí záznamy faillogu o všech "
+"uživatelích\n"
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+" -l, --lock-secs SEK po neúspěšném přihlášení zamkne účet na SEC\n"
+" sekund\n"
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+" -m, --maximum MAX nastaví maximální počet chybných přihlášení\n"
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+" -r, --reset vynuluje počitadla chybných přihlášení\n"
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time DNŮ zobrazí záznamy faillogu novější než DNŮ\n"
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+" -u, --user ÚČET/ROZSAH zobrazí záznamy faillogu nebo upraví\n"
+" počitadla a limity chybných přihlášení\n"
+" pouze pro zadané uživatele (s volbami -r, -"
+"m\n"
+" nebo -l)\n"
+
+#, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: nepodařilo se získat záznam pro UID %lu\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "Uživatel Chyb Maximum Poslední Odkud\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr " [%lus zbývá]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds zámek]"
+
+#, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s: nepodařilo se vynulovat počet chybných přihlášení pro UID %lu\n"
+
+#, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: nepodařilo se nastavit maximum pro UID %lu\n"
+
+#, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: nepodařilo se nastavit délku zamknutí pro UID %lu\n"
+
+#, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "%s: Neznámý uživatel nebo rozsah: %s\n"
+
+#, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: nelze zjistit velikost %s: %s\n"
+
+#, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: Selhal zápis %s: %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Použití: %s [volba] SKUPINA\n"
+"\n"
+"Volby:\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr " -a, --add UŽIVATEL přidá UŽIVATELE do SKUPINY\n"
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr " -d, --delete UŽIVATEL odstraní UŽIVATELE ze SKUPINY\n"
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr " -Q, --root CHROOT_ADRESÁŘ adresář, do kterého přejít\n"
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr " -r, --remove-password odstraní heslo SKUPINY\n"
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr " -R, --restrict povolí přístup ke SKUPINĚ jen členům\n"
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr " -M, --members UŽIVATEL,... nastaví seznam členů SKUPINY\n"
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+" -A, --administrators SPRÁVCE,...\n"
+" nastaví seznam správců SKUPINY\n"
+
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "Kromě voleb -A a -M není možné volby kombinovat.\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "Volby se nedají kombinovat.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: přepínač -A funguje pouze se stínovými hesly skupin\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: skupina „%s“ v %s neexistuje\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: chyba při zavírání databáze %s otevřené jen pro čtení\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Měním heslo skupiny %s\n"
+
+msgid "New Password: "
+msgstr "Nové heslo: "
+
+msgid "Re-enter new password: "
+msgstr "Zadejte opět nové heslo: "
+
+msgid "They don't match; try again"
+msgstr "Neshodují se; zkuste to znovu"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Zkuste to později\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Přidávám uživatele %s do skupiny %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Odstraňuji uživatele %s ze skupiny %s\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: uživatel „%s“ není členem „%s“\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Nejedná se o tty\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Použití: %s [volby] SKUPINA\n"
+"\n"
+"Volby:\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+" -f, --force skončí úspěchem pokud již skupina existuje,\n"
+" zruší -g pokud je již GID použito\n"
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr " -g, --gid GID pro novou skupinu použije GID\n"
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+" -K, --key KLÍČ=HODNOTA přebije výchozí nastavení /etc/login.defs\n"
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique povolí vytvoření skupiny s duplicitním\n"
+" (nejedinečným) GID\n"
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+" -p, --password HESLO pro novou skupinu použije šifrované heslo\n"
+
+msgid " -r, --system create a system account\n"
+msgstr " -r, --system vytvoří systémový účet\n"
+
+#, fuzzy
+#| msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr " -R, --root CHROOT_ADRESÁŘ adresář, do kterého přejít\n"
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: „%s“ není platným jménem skupiny\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: neplatné ID skupiny „%s“\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: parametr -K vyžaduje argument typu KLÍČ=HODNOTA\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: skupina „%s“ již existuje\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s: GID „%lu“ již existuje\n"
+
+#, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: nelze nastavit úklidovou službu.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+#, 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"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: nelze odstranit primární skupinu uživatele „%s“.\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: skupina „%s“ neexistuje\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: skupina „%s“ je NIS skupinou\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s je hlavním NIS serverem\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: uživatel „%s“ je již členem „%s“\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: Nedostatek paměti. Nelze aktualizovat %s.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Použití: %s [volby] [akce]\n"
+"\n"
+"Volby:\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+" -g, --group skupina místo uživatelovy skupiny změní zadanou\n"
+" skupinu (pouze root)\n"
+
+msgid "\n"
+msgstr "\n"
+
+msgid "Actions:\n"
+msgstr "Akce:\n"
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr " -a, --add uživatel přidá uživatele mezi členy skupiny\n"
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+" -d, --delete uživatel odebere uživateli členství ve skupině\n"
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr ""
+" -p, --purge ze skupiny odstraní všechny uživatele\n"
+
+msgid " -l, --list list the members of the group\n"
+msgstr " -l, --list vypíše členy skupiny\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: vaše skupina neodpovídá vašemu uživatelskému jménu\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s: volbu -g/--group může používat pouze root\n"
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr " -g, --gid GID změní ID skupiny na GID\n"
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr " -n, --new-name NOVÁ_SKUPINA změní jméno na NOVÁ_SKUPINA\n"
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique povolí použití duplicitního\n"
+" (nejedinečného) GID\n"
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr " -p, --password HESLO změní heslo na (šifrované) HESLO\n"
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: neplatné jméno skupiny „%s“\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: skupina %s je NIS skupinou\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: neznámý uživatel %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Použití: %s [volby] [soubor se skupinami [soubor se stínovými skupinami]]\n"
+"\n"
+"Volby:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Použití: %s [volby] [soubor se skupinami]\n"
+"\n"
+"Volby:\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+" -r, --read-only zobrazí chyby a varování\n"
+" ale soubory nemění\n"
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr " -s, --sort řadí záznamy podle UID\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s a -r nejsou slučitelné\n"
+
+msgid "invalid group file entry"
+msgstr "chybná položka v souboru se skupinami"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "smazat řádek „%s“?"
+
+msgid "duplicate group entry"
+msgstr "tato položka se v souboru se skupinami vyskytuje vícekrát"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "jméno skupiny „%s“ je chybné\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "ID skupiny „%lu“ je chybné\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "skupina %s: uživatel %s neexistuje\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "smazat člena „%s“? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "žádný záznam v souboru se skupinami %s neodpovídá\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "přidat skupinu „%s“ do %s?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"skupina %s má záznam v %s, ale její pole s heslem v %s není nastaveno na "
+"„x“\n"
+
+msgid "invalid shadow group file entry"
+msgstr "chybná položka v souboru se stínovými skupinami"
+
+msgid "duplicate shadow group entry"
+msgstr "duplikovaná položka v souboru se stínovými skupinami"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "stínová skupina %s: administrátor %s neexistuje\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "smazat administrátora „%s“? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "stínová skupina %s: uživatel %s neexistuje\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: soubory byly aktualizovány\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: žádné změny nebyly provedeny\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: nelze smazat %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Použití: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Použití: id\n"
+
+msgid " groups="
+msgstr " skupiny="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+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"
+msgstr ""
+" -t, --time DNŮ zobrazí záznamy lastlogu novější než DNŮ\n"
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+" -u, --user ÚČET zobrazí záznamy lastlogu pro uživatele ÚČET\n"
+
+msgid "Username Port From Latest"
+msgstr "Uživatel Port Z Naposledy"
+
+msgid "Username Port Latest"
+msgstr "Uživatel Port Naposledy"
+
+msgid "**Never logged in**"
+msgstr "**Nikdy nebyl přihlášen**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, 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"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, 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"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h počítač] [-f jméno]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r počítač\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr "konfigurační chyba - nelze zpracovat hodnotu %s: „%d“"
+
+msgid "Invalid login time"
+msgstr "Chybný čas přihlášení"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Systém byl uzavřen kvůli pravidelné údržbě."
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+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"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Vypršel časový limit pro přihlášení (%u sekund).\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: Chyba PAM, končím: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "Přihlašovací jméno na %s: "
+
+msgid "login: "
+msgstr "Přihlašovací jméno: "
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Maximální počet pokusů vyčerpán (%u)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: PAM vyžádal přerušení\n"
+
+msgid "Login incorrect"
+msgstr "Chybné přihlášení"
+
+#, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "Nelze nalézt uživatele (%s)\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"Přihlašovací jméno na %s: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: chyba rozdvojení: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSCTTY selhalo na %s"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Varování: po dočasném zákazu je přihlašování opět povoleno."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Poslední přihlášení: %s na %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Poslední přihlášení: %.19s na %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " z %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"Čas přihlášení vypršel\n"
+"\n"
+
+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: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Could not open proc directory for target %u\n"
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr "%s: Nelze otevřít proc adresář cílového procesu %u\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: selhalo odstranění %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: selhalo odstranění %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to unlock %s\n"
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: nepodařilo se odemknout %s\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: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Použití: newgrp [-] [skupina]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Použití: sg skupina [[-c] příkaz]\n"
+
+#, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: nepodařilo se zašifrovat heslo s předchozí solí: %s\n"
+
+msgid "Invalid password.\n"
+msgstr "Neplatné heslo.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: chyba rozdvojení: %s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+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"
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+#, fuzzy
+#| msgid " -q, --quiet quiet mode\n"
+msgid " -b, --badnames allow bad names\n"
+msgstr " -q, --quiet tichý režim\n"
+
+msgid " -r, --system create system accounts\n"
+msgstr " -r, --system vytvoří systémový účet\n"
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: skupina „%s“ je stínovou skupinou, ale neexistuje v /etc/group\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: chybné uživatelské ID „%s“\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: chybné uživatelské jméno „%s“\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: řádek %d: chybný řádek\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: položku pro uživatele %s nelze aktualizovat (není v passwd databázi)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: řádek %d: nelze vytvořit uživatele\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: řádek %d: nelze vytvořit skupinu\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: řádek %d: uživatel „%s“ v %s neexistuje\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: řádek %d: heslo nelze aktualizovat\n"
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: řádek %d: volání mkdir %s selhalo: %s\n"
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: řádek %d: volání chown %s selhalo: %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: řádek %d: položku nelze aktualizovat\n"
+
+#, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: příprava nového záznamu %s selhala\n"
+
+#, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: nelze nalézt rozsah podřízených uživatelů\n"
+
+#, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: nelze nalézt rozsah podřízených skupin\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr " -a, --all vypíše stav hesel na všech účtech\n"
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr " -d, --delete pro zadaný účet smaže heslo\n"
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+" -e, --expire pro zadaný účet vynutí expiraci hesla\n"
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+" -k, --keep-tokens změní heslo pouze pokud mu vypršela\n"
+" platnost\n"
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -i, --inactive NEAKTIV zablokuje účet po NEAKTIV dnech od\n"
+" vypršení platnosti hesla\n"
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr " -l, --lock zamkne heslo zadaného účtu\n"
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -n, --mindays MIN_DNŮ nastaví minimální počet dnů před změnou\n"
+" hesla na MIN_DNŮ\n"
+
+msgid " -q, --quiet quiet mode\n"
+msgstr " -q, --quiet tichý režim\n"
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr " -r, --repository REPOSITÁŘ změní heslo v repositáři REPOSITÁŘ\n"
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr " -S, --status pro zadaný účet vypíše stav hesla\n"
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr " -u, --unlock odemkne heslo zadaného účtu\n"
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -w, --warndays VAR_DNŮ nastaví varování o expiraci na VAR_DNŮ\n"
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -x, --maxdays MAX_DNŮ nastaví maximální počet dnů před změnou\n"
+" hesla na MAX_DNŮ\n"
+
+msgid "Old password: "
+msgstr "Staré heslo: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Zadejte nové heslo (minimální délka %d znaků).\n"
+"Použijte kombinaci velkých a malých písmen s číslicemi.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Zadejte nové heslo (počet znaků v intervalu %d až %d).\n"
+"Použijte kombinaci velkých a malých písmen s číslicemi.\n"
+
+msgid "New password: "
+msgstr "Nové heslo: "
+
+msgid "Try again."
+msgstr "Zkuste to znovu."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Varování: slabé heslo (chcete-li jej opravdu použít, zadejte jej znovu)."
+
+msgid "They don't match; try again.\n"
+msgstr "Neshodují se; zkuste to znovu.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Heslo uživatele %s nelze změnit.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Heslo uživatele %s nelze zatím změnit.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s odemknutí hesla by znamenalo mít účet bez hesla.\n"
+"Pro odemknutí hesla tohoto účtu byste měli nastavit heslo pomocí usermod -"
+"p.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: úložna %s není podporována\n"
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not authorized to change the password of %s\n"
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr "%s: %s není oprávněn změnit heslo %s\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Nemůžete prohlížet nebo měnit heslo uživatele %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Měním heslo uživatele %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Heslo uživatele %s nebylo změněno.\n"
+
+#, c-format
+msgid "%s: password changed.\n"
+msgstr "%s: heslo bylo změněno.\n"
+
+#, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "%s: informace o vypršení platnosti hesla byly změněny.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Použití: %s [volby] [soubor s hesly]\n"
+"\n"
+"Volby:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Použití: %s [volby] [soubor s hesly [soubor se stínovými hesly]]\n"
+"\n"
+"Volby:\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr " -q, --quiet vypíše pouze chyby\n"
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+"%s: při použití USE_TCB není povolen žádný alternativní soubor shadow.\n"
+
+msgid "invalid password file entry"
+msgstr "chybná položka v souboru s hesly"
+
+msgid "duplicate password entry"
+msgstr "duplikovaná položka v souboru s hesly"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "chybné uživatelské jméno „%s“\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "chybné uživatelské ID „%lu“\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "uživatel „%s“: skupina %lu neexistuje\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "uživatel „%s“: adresář „%s“ neexistuje\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "uživatel „%s“: program „%s“ neexistuje\n"
+
+#, c-format
+msgid "no tcb directory for %s\n"
+msgstr "tcb adresář uživatele %s neexistuje\n"
+
+#, c-format
+msgid "create tcb directory for %s?"
+msgstr "vytvořit tcb adresář pro uživatele %s?"
+
+#, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "nepodařilo se vytvořit tcb adresář uživatele %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: nelze uzamknout %s.\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "žádný záznam v souboru s hesly %s neodpovídá\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "přidat uživatele „%s“ do %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"uživatel %s má záznam v %s, ale jeho pole s heslem v %s není nastaveno na "
+"„x“\n"
+
+msgid "invalid shadow password file entry"
+msgstr "chybná položka v souboru se stínovými hesly"
+
+msgid "duplicate shadow password entry"
+msgstr "duplikovaná položka v souboru se stínovými hesly"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "uživatel %s: poslední změna hesla v budoucnosti\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: nelze seřadit záznamy v %s\n"
+
+#, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: nelze pokračovat s povoleným tcb\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: nepodařilo se změnit oprávnění %s na 0600\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Z tohoto účtu je přístup k su ZAKÁZÁN.\n"
+
+msgid "Password authentication bypassed.\n"
+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"
+
+#, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: Nelze rozdvojit uživatelský shell\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr "%s: chyba signálu\n"
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr "%s: chyba maskování signálu\n"
+
+msgid "Session terminated, terminating shell..."
+msgstr "Sezení skončeno, ukončuji shell..."
+
+#, c-format
+msgid " ...killed.\n"
+msgstr " ...zabit.\n"
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr " ...čeká na ukončení potomka.\n"
+
+msgid " ...terminated.\n"
+msgstr " ...ukončen.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: su [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
+#| " -h, --help display this help message and exit\n"
+#| " -, -l, --login make the shell a login shell\n"
+#| " -m, -p,\n"
+#| " --preserve-environment do not reset environment variables, and\n"
+#| " keep the same shell\n"
+#| " -s, --shell SHELL use SHELL instead of the default in "
+#| "passwd\n"
+#| "\n"
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"Použití: su [volby] [ÚČET]\n"
+"\n"
+"Volby:\n"
+" -c, --command PŘÍKAZ vyvolanému shellu předá PŘÍKAZ\n"
+" -h, --help zobrazí tuto nápovědu a skončí\n"
+" -, -l, --login nastaví shell jako přihlašovací\n"
+" -m, -p,\n"
+" --preserve-environment zachová proměnné prostředí a ponechá\n"
+" současný shell\n"
+" -s, --shell SHELL místo výchozího shellu definovaného\n"
+" v passwd použije SHELL\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ignoruji)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Nejste oprávněn používat su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Zadejte své heslo)"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: Chyba ověření\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s: Toto času nejste oprávněni používat su\n"
+
+#, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "V databázi není záznam pro uživatele „%s“\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: musí být spuštěno z terminálu\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: chyba %d\n"
+
+#, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: Nelze odevzdat řídící terminál\n"
+
+#, c-format
+msgid "Cannot execute %s\n"
+msgstr "%s nelze spustit\n"
+
+msgid "No password file"
+msgstr "Soubor s hesly neexistuje"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY selhalo"
+
+msgid "No password entry for 'root'"
+msgstr "V databázi není položka pro uživatele 'root'"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Stiskněte control-d pro normální spuštění systému,\n"
+"(nebo zadejte heslo uživatele root pro údržbu systému):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Vstupuji do režimu údržby systému"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr "%s: %s byl vytvořen, ale nemůže být odstraněn\n"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr "%s: nastavení %s v %s bude ignorováno\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: nelze vytvořit nový soubor s výchozími hodnotami\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: nelze vytvořit nový soubor s výchozími hodnotami\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: nelze otevřít nový soubor s výchozími hodnotami\n"
+
+#, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: příliš dlouhý řádek v %s: %s..."
+
+#, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: Nelze vytvořit záložní soubor (%s): %s\n"
+
+#, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: přejmenovat: %s: %s\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: skupina „%s“ je NIS skupinou.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: zadáno příliš mnoho skupin (max %d).\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Použití: %s [volby] ÚČET\n"
+" %s -D\n"
+" %s -D [volby]\n"
+"\n"
+"Volby:\n"
+
+#, fuzzy
+#| msgid " -s, --shadow edit shadow or gshadow database\n"
+msgid " --badnames do not check for bad names\n"
+msgstr " -s, --shadow upraví databázi shadow nebo gshadow\n"
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+" -b, --base-dir ZÁKL_ADR základní adresář pro domovský adresář "
+"nového\n"
+" uživatelského účtu\n"
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr " -c, --comment KOMENTÁŘ pole GECOS nového účtu\n"
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr " -d, --home-dir DOMOV_ADR domovský adresář nového účtu\n"
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+" -D, --defaults vypíše nebo změní výchozí nastavení\n"
+" programu useradd\n"
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr " -e, --expiredate EXP_DATUM datum vypršení platnosti nového účtu\n"
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+" -f, --inactive NEAKTIV doba neaktivity pro blokaci nového účtu\n"
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+" -g, --gid SKUPINA jméno nebo ID primární skupiny nového účtu\n"
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+" -G, --groups SKUPINY seznam dodatečných skupin, do kterých\n"
+" má nový účet patřit\n"
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr " -k, --skel VZOR_ADR použije alternativní vzorový adresář\n"
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+" -l, --no-log-init nepřidá uživatele do databází lastlog\n"
+" a faillog\n"
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr " -m, --create-home vytvoří domovský adresář uživatele\n"
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr " -M, --no-create-home nevytvoří domovský adresář uživatele\n"
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+" -N, --no-user-group nevytvoří skupinu se stejným jménem jako\n"
+" uživatel\n"
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique povolí vytvoření uživatele s duplicitním\n"
+" (nejedinečným) UID\n"
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr " -p, --password HESLO zašifrované heslo nového účtu\n"
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr " -s, --shell SHELL přihlašovací shell nového účtu\n"
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr " -u, --uid UID uživatelské ID nového účtu\n"
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+" -U, --user-group vytvoří skupinu se stejným jménem jako\n"
+" uživatel\n"
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+" -Z, --selinux-user SEUŽIVATEL pro mapování na SELinuxového uživatele\n"
+" použije SEUŽIVATELe\n"
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: chybný základní adresář „%s“\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: chybný komentář „%s“\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: chybný domácí adresář „%s“\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: přepínač -e vyžaduje stínová hesla\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: přepínač -f vyžaduje stínová hesla\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: chybná položka „%s“\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: chybný shell „%s“\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Warning: %s is not executable\n"
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: Varování: %s se nedá spustit\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rewrite password file\n"
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s: soubor s hesly nelze přepsat\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr "%s: -Z vyžaduje jádro s povoleným SELinuxem\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr "%s: nepodařilo se vynulovat faillog záznam UID %lu: %s\n"
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr "%s: nepodařilo se vynulovat lastlog záznam UID %lu: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s: nepodařilo se vynulovat faillog záznam UID %lu: %s\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: selhala příprava nového záznamu %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error updating files\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: chyba při aktualizaci souborů\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: adresář %s nelze vytvořit\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s home directory (%s) not found\n"
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: domovský adresář uživatele %s (%s) nebyl nalezen\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to allocate memory: %s\n"
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "%s: selhala alokace paměti: %s\n"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: adresář %s nelze vytvořit\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: řádek %d: volání chown %s selhalo: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: řádek %d: volání chown %s selhalo: %s\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "Vytvářím poštovní schránku"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Skupina „mail“ nebyla nalezena. Vytvářím uživatelovu poštovní schránku s "
+"právy 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Nastavuji oprávnění k poštovní schránce"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: uživatel „%s“ již existuje\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: skupina %s existuje - chcete-li přidat uživatele do této skupiny, "
+"použijte -g.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: nelze vytvořit uživatele\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %lu není jedinečné\n"
+
+#, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: vytvoření tcb adresáře uživatele %s selhalo\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: nelze vytvořit skupinu\n"
+
+#, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: nelze vytvořit podřízená uživatelská ID\n"
+
+#, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: nelze vytvořit podřízená skupinová ID\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: varování: domovský adresář již existuje.\n"
+"Nekopíruji do něj žádné soubory z adresáře skel.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+"%s: varování: mapování uživatele %s na uživatele SELinuxu %s selhalo.\n"
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+" -f, --force vynutí odstranění souborů,\n"
+" i když je uživatel nevlastní\n"
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+" -r, --remove odstraní domovský adresář a poštovní\n"
+" schránku\n"
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+" -Z, --selinux-user odstraní všechna mapování uživatele na\n"
+" uživatele SELinuxu\n"
+
+#, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr ""
+"%s: skupina %s nebyla odstraněna, protože není primární skupinou uživatele "
+"%s.\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr "%s: skupina %s nebyla odstraněna, protože obsahuje další členy.\n"
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: skupina %s je primární skupinou jiného uživatele a nelze ji odstranit.\n"
+
+#, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "%s: nelze odstranit záznam %lu z %s\n"
+
+#, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: %s poštovní schránka (%s) nebyla nalezena\n"
+
+#, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: varování: nelze smazat %s: %s\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: vlastníkem %s není %s, nemažu jej\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr "%s: nelze alokovat paměť, tcb záznam uživatele %s nebyl odtraněn.\n"
+
+#, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: Nelze odevzdat privilegia: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: Nelze odstranit obsah %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: Nelze odstranit tcb soubory uživatele %s: %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: uživatel %s je NIS uživatelem\n"
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: domovský adresář uživatele %s (%s) nebyl nalezen\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s: adresář %s nebudu mazat (je to domácí adresář uživatele %s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: chyba při mazání adresáře %s\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: chyba při mazání adresáře %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+"%s: varování: odstranění mapování uživatele %s na SELinuxového uživatele "
+"selhalo.\n"
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr " -c, --comment KOMENTÁŘ nová hodnota pole GECOS\n"
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr " -d, --home-dir DOMOV_ADR nový domovský adresář uživatele\n"
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -e, --expiredate EXP_DATUM nastaví vypršení platnosti účtu na "
+"EXP_DATUM\n"
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -f, --inactive NEAKTIV zablokuje účet po NEAKTIV dnech od vypršení\n"
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr " -g, --gid SKUPINA nastaví novou primární SKUPINU\n"
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr ""
+" -G, --groups SKUPINY nový seznam dodatečných skupin, do kterých\n"
+" má účet patřit\n"
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\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"
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr " -l, --login NOVÝ_ÚČET nová hodnota přihlašovacího jména\n"
+
+msgid " -L, --lock lock the user account\n"
+msgstr " -L, --lock zamkne uživatelský účet\n"
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+" -m, --move-home přesune obsah původního domovského adresáře\n"
+" do nového umístění (používejte pouze s -d)\n"
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique povolí vytvoření uživatele s duplicitním\n"
+" (nejedinečným) UID\n"
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr " -p, --password HESLO použije nové zašifrované heslo\n"
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr " -u, --uid UID nové UID pro uživatelský účet\n"
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr " -U, --unlock odemkne uživatelský účet\n"
+
+msgid " -v, --add-subuids FIRST-LAST add range of subordinate uids\n"
+msgstr " -v, --add-subuids PRVNÍ-POSL přidá rozsah podřízených uid\n"
+
+msgid " -V, --del-subuids FIRST-LAST remove range of subordinate uids\n"
+msgstr " -V, --del-subuids PRVNÍ-POSL odstraní rozsah podřízených uid\n"
+
+msgid " -w, --add-subgids FIRST-LAST add range of subordinate gids\n"
+msgstr " -w, --add-subgids PRVNÍ-POSL přidá rozsah podřízených gid\n"
+
+msgid " -W, --del-subgids FIRST-LAST remove range of subordinate gids\n"
+msgstr " -W, --del-subgids PRVNÍ-POSL odstraní rozsah podřízených gid\n"
+
+msgid ""
+" -Z, --selinux-user SEUSER new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+" -Z, --selinux-user SEUŽIVATEL nové mapování uživatelského účtu na\n"
+" uživatele SELinuxu\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s odemknutí uživatelova hesla by znamenalo mít účet bez hesla.\n"
+"Pro odemknutí hesla tohoto uživatele byste měli nastavit heslo pomocí "
+"usermod -p.\n"
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: uživatel „%s“ již v %s existuje\n"
+
+#, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: neplatný rozsah podřízených uid „%s“\n"
+
+#, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: neplatný rozsah podřízených gid „%s“\n"
+
+#, c-format
+msgid "%s: no options\n"
+msgstr "%s: žádné volby\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: přepínače -L, -p a -U se navzájem vylučují\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: přepínače -e a -f vyžadují stínová hesla\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: UID „%lu“ již existuje\n"
+
+#, c-format
+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: directory %s exists\n"
+msgstr "%s: adresář %s již existuje\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+"%s: Předchozí domovský adresář (%s) nebyl adresářem. Nebyl tedy odstraněn a "
+"nebyly vytvořeny domovské adresáře.\n"
+
+#, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: Nepodařilo se změnit vlastníka domovského adresáře"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: varování: selhalo úplné odstranění domovského adresáře %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: adresář %s nelze na %s přejmenovat\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: nepodařilo se zkopírovat lastlog záznamy uživatele %lu uživateli %lu: "
+"%s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: nepodařilo se zkopírovat faillog záznamy uživatele %lu uživateli %lu: "
+"%s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: varování: vlastníkem %s není %s\n"
+
+msgid "failed to change mailbox owner"
+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"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to add uid range %lu-%lu from '%s'\n"
+msgid "%s: failed to add uid range %lu-%lu to '%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"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to add gid range %lu-%lu from '%s'\n"
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s: přidání rozsahu gid %lu-%lu z „%s“ selhalo\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Změnili jste %s.\n"
+"Z důvodu konzistence byste měli změnit i %s.\n"
+"Můžete to provést příkazem „%s“.\n"
+
+msgid " -g, --group edit group database\n"
+msgstr " -g, --group upraví databázi skupin\n"
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr " -p, --passwd upraví databázi hesel\n"
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr " -s, --shadow upraví databázi shadow nebo gshadow\n"
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr " -u, --user upraví tcb shadow soubor uživatele\n"
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: selhalo odstranění %s\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: %s je beze změny\n"
+
+msgid "failed to create scratch directory"
+msgstr "vytvoření dočasného adresáře selhalo"
+
+msgid "failed to drop privileges"
+msgstr "odevzdání privilegií selhalo"
+
+msgid "Couldn't get file context"
+msgstr "Nelze získat kontext souboru"
+
+msgid "setfscreatecon () failed"
+msgstr "Volání setfscreatecon() selhalo"
+
+msgid "failed to gain privileges"
+msgstr "nepodařilo se získat privilegia"
+
+msgid "Couldn't lock file"
+msgstr "Soubor nelze zamknout"
+
+msgid "Couldn't make backup"
+msgstr "Zálohování nelze provést"
+
+#, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s: %s: %s\n"
+
+#, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr "%s: %s skončil se stavem %d\n"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr "%s: %s byl zabit signálem %d\n"
+
+msgid "failed to open scratch file"
+msgstr "otevření dočasného souboru selhalo"
+
+msgid "failed to unlink scratch file"
+msgstr "dočasný soubor se nepodařilo smazat"
+
+msgid "failed to stat edited file"
+msgstr "na upravovaný soubor se nepodařilo zavolat stat()"
+
+msgid "failed to allocate memory"
+msgstr "nepodařilo se alokovat paměť"
+
+msgid "failed to create backup file"
+msgstr "vytvoření záložního souboru selhalo"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: %s nelze obnovit: %s (změny jsou v %s)\n"
+
+#, c-format
+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: Target %u is owned by a different user\n"
+#~ msgstr "%s: Cílový proces %u je vlastněn jiným uživatelem\n"
+
+#~ msgid " -c, --crypt-method the crypt method (one of %s)\n"
+#~ msgstr " -c, --crypt-method typ šifry (jeden z %s)\n"
+
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr ""
+#~ "Použití: vipw [volby]\n"
+#~ "\n"
+#~ "Volby:\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "volání malloc(%d) selhalo\n"
+
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použití: chage [volby] ÚČET\n"
+#~ "\n"
+#~ "Volby:\n"
+#~ " -d, --lastday POSL_DEN nastaví datum poslední změny hesla na "
+#~ "POSL_DEN\n"
+#~ " -E, --expiredate EXP_DATUM nastaví datum vypršení účtu na EXP_DATUM\n"
+#~ " -h, --help zobrazí tuto nápovědu a skončí\n"
+#~ " -I, --inactive NEAKTIV zablokuje účet po NEAKTIV dnech od "
+#~ "vypršení\n"
+#~ " platnosti hesla\n"
+#~ " -l, --list zobrazí informace o účtu\n"
+#~ " -m, --mindays MIN_DNŮ nastaví minimální počet dnů před změnou\n"
+#~ " hesla na MIN_DNŮ\n"
+#~ " -M, --maxdays MAX_DNŮ nastaví maximální počet dnů před změnou\n"
+#~ " hesla na MAX_DNŮ\n"
+#~ " -W, --warndays VAR_DNŮ nastaví varování o expiraci na VAR_DNŮ\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: ověření pomocí PAM selhalo\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "Použití: %s [-f jméno] [-r číslo místnosti] [-w telefon do zaměstnání]\n"
+#~ "\t[-h telefon domů] [-o ostatní] [uživatel]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr ""
+#~ "Použití: %s [-f jméno] [-r číslo místnosti] [-w telefon do zaměstnání]\n"
+#~ "\t[-h telefon domů]\n"
+
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Použití: %s [volby]\n"
+#~ "\n"
+#~ "Volby:\n"
+#~ " -c, --crypt-method typ šifry (jeden z %s)\n"
+#~ " -e, --encrypted zadaná hesla jsou zašifrovaná\n"
+#~ " -h, --help zobrazí tuto nápovědu a skončí\n"
+#~ " -m, --md5 zašifruje nešifrované heslo\n"
+#~ " algoritmem MD5\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použití: chsh [volby] [ÚČET]\n"
+#~ "\n"
+#~ "Volby:\n"
+#~ " -h, --help zobrazí tuto nápovědu a skončí\n"
+#~ " -s, --shell SHELL nový přihlašovací shell uživatele\n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "Použití: expiry {-f|-c}\n"
+
+#~ msgid "faillog: Failed to get the entry for UID %lu\n"
+#~ msgstr "faillog: Nepodařilo se získat záznam pro UID %lu\n"
+
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "faillog: Nelze otevřít %s: %s\n"
+
+#~ msgid "faillog: Cannot get the size of %s: %s\n"
+#~ msgstr "faillog: Nelze zjistit velikost %s: %s\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "Použití: groupdel skupina\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr ""
+#~ "Použití: %s [-r] [-s] [soubor se skupinami [soubor se stínovými "
+#~ "skupinami]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "Použití: %s [-r] [-s] [soubor se skupinami]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: -s a -r nejsou slučitelné\n"
+
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "Použití: grpconv\n"
+
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "Použití: grpunconv\n"
+
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použití: lastlog [volby]\n"
+#~ "\n"
+#~ "Volby:\n"
+#~ " -b, --before DNŮ zobrazí záznamy lastlogu starší než DNŮ\n"
+#~ " -h, --help zobrazí tuto nápovědu a skončí\n"
+#~ " -t, --time DNŮ zobrazí záznamy lastlogu novější než DNŮ\n"
+#~ " -u, --user ÚČET zobrazí záznamy lastlogu pro uživatele "
+#~ "ÚČET\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použití: passwd [volby] [ÚČET]\n"
+#~ "\n"
+#~ "Volby:\n"
+#~ " -a, --all vypíše stav hesel na všech účtech\n"
+#~ " -d, --delete pro zadaný účet smaže heslo\n"
+#~ " -e, --expire pro zadaný účet vynutí expiraci hesla\n"
+#~ " -h, --help zobrazí tuto nápovědu a skončí\n"
+#~ " -k, --keep-tokens změní heslo pouze pokud mu vypršela\n"
+#~ " platnost\n"
+#~ " -i, --inactive NEAKTIV zablokuje účet po NEAKTIV dnech od\n"
+#~ " vypršení platnosti hesla\n"
+#~ " -l, --lock zamkne heslo zadaného účtu\n"
+#~ " -n, --mindays MIN_DNŮ nastaví minimální počet dnů před změnou\n"
+#~ " hesla na MIN_DNŮ\n"
+#~ " -q, --quiet tichý režim\n"
+#~ " -r, --repository REPOSITÁŘ změní heslo v repositáři REPOSITÁŘ\n"
+#~ " -S, --status pro zadaný účet vypíše stav hesla\n"
+#~ " -u, --unlock odemkne heslo zadaného účtu\n"
+#~ " -w, --warndays VAR_DNŮ nastaví varování o expiraci na VAR_DNŮ\n"
+#~ " -x, --maxdays MAX_DNŮ nastaví maximální počet dnů před změnou\n"
+#~ " hesla na MAX_DNŮ\n"
+#~ "\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr ""
+#~ "Použití: %s [-q] [-r] [-s] [soubor s hesly [soubor se stínovými hesly]]\n"
+
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "Použití: pwconv\n"
+
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "Použití: pwunconv\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "Neznámé id: %s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "Žádný shell\n"
+
+#~ msgid ""
+#~ "Usage: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force removal of files,\n"
+#~ " even if not owned by user\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -r, --remove remove home directory and mail spool\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použití: userdel [volby] ÚČET\n"
+#~ "\n"
+#~ "VOLBY:\n"
+#~ " -f, --force vynutí odstranění souborů,\n"
+#~ " i když je uživatel nevlastní\n"
+#~ " -h, --help zobrazí tuto nápovědu a skončí\n"
+#~ " -r, --remove odstraní domovský adresář a poštovní\n"
+#~ " schránku\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Použití: usermod [volby] ÚČET\n"
+#~ "\n"
+#~ "Volby:\n"
+#~ " -c, --comment KOMENTÁŘ nová hodnota pole GECOS\n"
+#~ " -d, --home-dir DOMOV_ADR nový domovský adresář uživatele\n"
+#~ " -e, --expiredate EXP_DATUM nastaví vypršení platnosti účtu na "
+#~ "EXP_DATUM\n"
+#~ " -f, --inactive NEAKTIV zablokuje účet po NEAKTIV dnech od "
+#~ "vypršení\n"
+#~ " -g, --gid SKUPINA nastaví novou primární SKUPINU\n"
+#~ " -G, --groups SKUPINY nový seznam dodatečných skupin, do "
+#~ "kterých\n"
+#~ " má účet patřit\n"
+#~ " -a, --append přidá uživatele do dalších SKUPIN "
+#~ "zadaných\n"
+#~ " volbou -G; neruší členství v ostatních "
+#~ "sk.\n"
+#~ " -h, --help zobrazí tuto nápovědu a skončí\n"
+#~ " -l, --login NOVÝ_ÚČET nová hodnota přihlašovacího jména\n"
+#~ " -L, --lock zamkne uživatelský účet\n"
+#~ " -m, --move-home přesune obsah původního domovského "
+#~ "adresáře\n"
+#~ " do nového umístění (používejte pouze s -"
+#~ "d)\n"
+#~ " -o, --non-unique povolí vytvoření uživatele s duplicitním\n"
+#~ " (nejedinečným) UID\n"
+#~ " -p, --password HESLO použije nové zašifrované heslo\n"
+#~ " -s, --shell SHELL nový přihlašovací shell uživatele\n"
+#~ " -u, --uid UID nové UID pro uživatelský účet\n"
+#~ " -U, --unlock odemkne uživatelský účet\n"
+#~ "%s\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s: žádné přepínače\n"
+
+#~ msgid ""
+#~ "Usage: %s [option] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --add USER add USER to GROUP\n"
+#~ " -d, --delete USER remove USER from GROUP\n"
+#~ " -r, --remove-password remove the GROUP's password\n"
+#~ " -R, --restrict restrict access to GROUP to its members\n"
+#~ " -M, --members USER,... set the list of members of GROUP\n"
+#~ "%s\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použití: %s [volby] SKUPINA\n"
+#~ "\n"
+#~ "Volby:\n"
+#~ " -a, --add UŽIVATEL přidá UŽIVATELE do SKUPINY\n"
+#~ " -d, --delete UŽIVATEL odstraní UŽIVATELE ze SKUPINY\n"
+#~ " -r, --remove-password odstraní heslo SKUPINY\n"
+#~ " -R, --restrict povolí přístup ke SKUPINĚ jen členům\n"
+#~ " -M, --members UŽIVATEL,... nastaví seznam členů SKUPINY\n"
+#~ "%s\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmems [options] [action]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group groupname change groupname instead of the user's "
+#~ "group\n"
+#~ " (root only)\n"
+#~ "\n"
+#~ "Actions:\n"
+#~ " -a, --add username add username to the members of the group\n"
+#~ " -d, --delete username remove username from the members of the "
+#~ "group\n"
+#~ " -p, --purge purge all members from the group\n"
+#~ " -l, --list list the members of the group\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použití: groupmems [volby] [akce]\n"
+#~ "\n"
+#~ "Volby:\n"
+#~ " -g, --group skupina místo uživatelovy skupiny změní zadanou\n"
+#~ " skupinu (pouze root)\n"
+#~ "\n"
+#~ "Akce:\n"
+#~ " -a, --add uživatel přidá uživatele mezi členy skupiny\n"
+#~ " -d, --delete uživatel odebere uživateli členství ve skupině\n"
+#~ " -p, --purge ze skupiny odstraní všechny uživatele\n"
+#~ " -l, --list vypíše členy skupiny\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr ""
+#~ "Použití: useradd [volby] ÚČET\n"
+#~ "\n"
+#~ "Volby:\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s: %s nelze vytvořit\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s: volání chown pro %s selhalo\n"
+
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all display faillog records for all users\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -l, --lock-time SEC after failed login lock account to SEC "
+#~ "seconds\n"
+#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
+#~ " -r, --reset reset the counters of login failures\n"
+#~ " -t, --time DAYS display faillog records more recent than "
+#~ "DAYS\n"
+#~ " -u, --user LOGIN display faillog record or maintains "
+#~ "failure\n"
+#~ " counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ " options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použití: faillog [volby]\n"
+#~ "\n"
+#~ "Volby:\n"
+#~ " -a, --all zobrazí záznamy faillogu o všech "
+#~ "uživatelích\n"
+#~ " -h, --help zobrazí tuto nápovědu a skončí\n"
+#~ " -l, --lock-time SEK po neúspěšném přihlášení zamkne účet na "
+#~ "SEC\n"
+#~ " sekund\n"
+#~ " -m, --maximum MAX nastaví maximální počet chybných "
+#~ "přihlášení\n"
+#~ " na MAX\n"
+#~ " -r, --reset vynuluje počitadla chybných přihlášení\n"
+#~ " -t, --time DNŮ zobrazí záznamy faillogu novější než DNŮ\n"
+#~ " -u, --user ÚČET zobrazí záznamy faillogu nebo upraví\n"
+#~ " počitadla a limity chybných přihlášení\n"
+#~ " pouze pro uživatele ÚČET (s volbami -r, -"
+#~ "m\n"
+#~ " nebo -l)\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force exit with success status if the\n"
+#~ " specified group already exists\n"
+#~ " -g, --gid GID use GID for the new group\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique allow create group with duplicate\n"
+#~ " (non-unique) GID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new group\n"
+#~ " -r, --system create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použití: groupadd [volby] SKUPINA\n"
+#~ "\n"
+#~ "Volby:\n"
+#~ " -f, --force vynutí úspěšný návratový kód i když\n"
+#~ " zadaná skupina existuje\n"
+#~ " -g, --gid GID pro novou skupinu použije GID\n"
+#~ " -h, --help zobrazí tuto nápovědu a skončí\n"
+#~ " -K, --key KLÍČ=HODNOTA přebije výchozí nastavení /etc/login."
+#~ "defs\n"
+#~ " -o, --non-unique povolí vytvoření skupiny s duplicitním\n"
+#~ " (nejedinečným) GID\n"
+#~ " -p, --password HESLO pro novou skupinu použije šifrované "
+#~ "heslo\n"
+#~ " -r, --system vytvoří systémový účet\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --gid GID force use new GID by GROUP\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použití: groupmod [volby] SKUPINA\n"
+#~ "\n"
+#~ "Volby:\n"
+#~ " -g, --gid GID pro SKUPINU vynutí nové GID\n"
+#~ " -h, --help zobrazí tuto nápovědu a skončí\n"
+#~ " -n, --new-name NOVÁ_SKUPINA vnutí SKUPINĚ jméno NOVÁ_SKUPINA\n"
+#~ " -o, --non-unique povolí skupině použít duplicitní\n"
+#~ " (nejedinečné) GID\n"
+#~ " -p, --password HESLO pro SKUPINU použije šifrované heslo\n"
+#~ "\n"
+
+#~| msgid ""
+#~| "Usage: useradd [options] LOGIN\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~| " home directory\n"
+#~| " -c, --comment COMMENT set the GECOS field for the new user "
+#~| "account\n"
+#~| " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~| " -D, --defaults print or save modified default useradd\n"
+#~| " configuration\n"
+#~| " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -g, --gid GROUP force use GROUP for the new user "
+#~| "account\n"
+#~| " -G, --groups GROUPS list of supplementary groups for the "
+#~| "new\n"
+#~| " user account\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~| " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~| " -l, --no-log-init do not add the user to the lastlog and\n"
+#~| " faillog databases\n"
+#~| " -m, --create-home create home directory for the new user\n"
+#~| " account\n"
+#~| " -M, --no-create-home do not create user's home directory\n"
+#~| " (overrides /etc/login.defs)\n"
+#~| " -N, --no-user-group do not create a group with the same name "
+#~| "as\n"
+#~| " the user\n"
+#~| " -o, --non-unique allow create user with duplicate\n"
+#~| " (non-unique) UID\n"
+#~| " -p, --password PASSWORD use encrypted password for the new user\n"
+#~| " account\n"
+#~| " -r, --system create a system account\n"
+#~| " -s, --shell SHELL the login shell for the new user "
+#~| "account\n"
+#~| " -u, --uid UID force use the UID for the new user "
+#~| "account\n"
+#~| " -U, --user-group create a group with the same name as the "
+#~| "user\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~ " home directory\n"
+#~ " -c, --comment COMMENT set the GECOS field for the new user "
+#~ "account\n"
+#~ " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~ " -D, --defaults print or save modified default useradd\n"
+#~ " configuration\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP for the new user account\n"
+#~ " -G, --groups GROUPS list of supplementary groups for the new\n"
+#~ " user account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -l, --no-log-init do not add the user to the lastlog and\n"
+#~ " faillog databases\n"
+#~ " -m, --create-home create home directory for the new user\n"
+#~ " account\n"
+#~ " -M, --no-create-home do not create user's home directory\n"
+#~ " (overrides /etc/login.defs)\n"
+#~ " -N, --no-user-group do not create a group with the same name "
+#~ "as\n"
+#~ " the user\n"
+#~ " -o, --non-unique allow create user with duplicate\n"
+#~ " (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new user\n"
+#~ " account\n"
+#~ " -r, --system create a system account\n"
+#~ " -s, --shell SHELL the login shell for the new user account\n"
+#~ " -u, --uid UID force use the UID for the new user "
+#~ "account\n"
+#~ " -U, --user-group create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Použití: useradd [volby] ÚČET\n"
+#~ "\n"
+#~ "Volby:\n"
+#~ " -b, --base-dir ZÁKL_ADR základní adresář domovského adresáře "
+#~ "nového\n"
+#~ " uživatelského účtu\n"
+#~ " -c, --comment KOMENTÁŘ nastaví pole GECOS nového účtu\n"
+#~ " -d, --home-dir DOMOV_ADR domovský adresář nového účtu\n"
+#~ " -D, --defaults vypíše nebo nastaví výchozí nastavení\n"
+#~ " programu useradd\n"
+#~ " -e, --expiredate EXP_DATUM nastaví vypršení platnosti účtu na "
+#~ "EXP_DATUM\n"
+#~ " -f, --inactive NEAKTIV zablokuje účet po NEAKTIV dnech od "
+#~ "vypršení\n"
+#~ " -g, --gid SKUPINA vynutí použití této skupiny pro nový "
+#~ "účet\n"
+#~ " -G, --groups SKUPINY seznam dodatečných skupin, do kterých\n"
+#~ " má nový účet patřit\n"
+#~ " -h, --help zobrazí tuto nápovědu a skončí\n"
+#~ " -k, --skel VZOR_ADR zadá alternativní vzorový adresář\n"
+#~ " -K, --key KLÍČ=HODNOTA přebije výchozí nastavení /etc/login."
+#~ "defs\n"
+#~ " -l, --no-log-init nepřidá uživatele do databází lastlog\n"
+#~ " a faillog\n"
+#~ " -m, --create-home vytvoří domovský adresář pro nový\n"
+#~ " uživatelský účet\n"
+#~ " -M, --no-create-home nevytvoří domovský adresář uživatele\n"
+#~ " (přebíjí nastavení /etc/login.defs)\n"
+#~ " -N, --no-user-group nevytvoří skupinu se stejným jménem jako\n"
+#~ " uživatel\n"
+#~ " -o, --non-unique povolí vytvoření uživatele s duplicitním\n"
+#~ " (nejedinečným) UID\n"
+#~ " -p, --password HESLO použije pro nový účet zadané zašifrované\n"
+#~ " heslo\n"
+#~ " -r, --system vytvoří systémový účet\n"
+#~ " -s, --shell SHELL přihlašovací shell nového účtu\n"
+#~ " -u, --uid UID vynutí použití tohoto UID pro nový účet\n"
+#~ " -U, --user-group vytvoří skupinu se stejným jménem jako\n"
+#~ " uživatel\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "Usage: %s [options] [input]\n"
+#~ "\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -r, --system create system accounts\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Použití: %s [volby] [vstup]\n"
+#~ "\n"
+#~ " -c, --crypt-method typ šifry (jeden z %s)\n"
+#~ " -r, --system vytvoří systémové účty\n"
+#~ "%s\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Heslu byla nastavena vypršená platnost."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: soubor s hesly nelze zamknout\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: soubor s hesly nelze otevřít\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: soubor se stínovými hesly nelze zamknout\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: soubor se stínovými hesly nelze otevřít\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: soubor se stínovými hesly nelze přepsat\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: soubor s hesly nelze přepsat\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: soubor se stínovými hesly nelze aktualizovat\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tCelé jméno: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tČíslo místnosti: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tTelefon do zaměstnání: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tTelefon domů: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "Nelze zamknout soubor s hesly; zkuste to později.\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "Soubor s hesly nelze otevřít.\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: %s se v /etc/passwd nenalézá\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Chyba při aktualizaci položky v souboru s hesly.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Nelze provést změny v souboru s hesly.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Soubor s hesly nelze odemknout.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: soubor se skupinami nelze zamknout\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s: soubor se skupinami nelze otevřít\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: soubor stínových skupin nelze zamknout\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: soubor se stínovými hesly nelze otevřít\n"
+
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: chyba při aktualizaci souboru se stínovými skupinami\n"
+
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: chyba při aktualizaci souboru se skupinami\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: řádek %d: neznámá skupina %s\n"
+
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: řádek %d: položku nelze aktualizovat skupinu\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: soubor se stínovými hesly nelze zamknout\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: chyba při aktualizaci souboru se stínovými hesly\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: chyba při aktualizaci souboru s hesly\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: řádek %d: neznámý uživatel %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: řádek %d: položku v souboru s hesly nelze aktualizovat\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: neznámý uživatel\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Neznámý uživatel: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Použití: %s [r|-R] skupina\n"
+
+#~ msgid " %s [-a user] group\n"
+#~ msgstr " %s [-a uživatel] skupina\n"
+
+#~ msgid " %s [-d user] group\n"
+#~ msgstr " %s [-d uživatel] skupina\n"
+
+#~ msgid " %s [-A user,...] [-M user,...] group\n"
+#~ msgstr " %s [-A uživatel,...] [-M uživatel,...] skupina\n"
+
+#~ msgid " %s [-M user,...] group\n"
+#~ msgstr " %s [-M uživatel,...] skupina\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: nelze získat zámek\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: nelze získat zámek pro soubor se stínovými hesly\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: nelze přepsat soubor se stínovými hesly\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: nelze odemknout soubor\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: nelze aktualizovat položku\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: nelze aktualizovat položku souboru se stínovými hesly\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "neznámá skupina %s\n"
+
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: nelze zavřít soubor\n"
+
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: soubor se stínovými hesly nelze zavřít\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Kdo jste?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: neznámý člen %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: chyba při přidávání nové skupiny\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: soubor se skupinami nelze přepsat\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: soubor se stínovými skupinami nelze přepsat\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: soubor se skupinami nelze zamknout\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: soubor se skupinami nelze otevřít\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: soubor se stínovými skupinami nelze zamknout\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: soubor se stínovými skupinami nelze otevřít\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u není jedinečné\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: chyba při odstraňování položky ze souboru se skupinami\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr ""
+#~ "%s: chyba při odstraňování položky ze souboru se stínovými skupinami\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: primární skupinu uživatele nelze odstranit.\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Člen určený pro odstranění nebyl nalezen\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr ""
+#~ "Použití: groupmems -a uživatel | -d uživatel | -D | -l [-g skupina]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Přidávat členy do jiných skupin může pouze uživatel root\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "Je vyžadován skupinový přístup\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "Nejste vlastníkem aktuální skupiny\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "Ověření pomocí PAM selhalo\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "Soubor se skupinami nelze zamknout\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "Soubor se skupinami nelze zavřít\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s se v /etc/group nenalézá\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u není jedinečné gid\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: jméno %s není jedinečné\n"
+
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: soubor s hesly nelze přepsat\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: soubor s hesly nelze zamknout\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: soubor s hesly nelze otevřít\n"
+
+#~ msgid ""
+#~ "%s: cannot change the primary group of user '%s' from %u to %u, since it "
+#~ "is not in the passwd file.\n"
+#~ msgstr ""
+#~ "%s: nelze změnit primární skupinu uživatele „%s“ z %u na %u, protože se "
+#~ "nenachází v souboru passwd.\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: položku %s souboru se stínovými hesly nelze aktualizovat\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: položku skupiny %s nelze odstranit\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: soubor se stínovými skupinami nelze zamknout\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: soubor se stínovými skupinami nelze otevřít\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: položku stínové skupiny %s nelze odstranit\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: soubor se stínovými hesly nelze aktualizovat\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: soubor se stínovými hesly skupin nelze smazat\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "neznámé UID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "neznámé GID: %lu\n"
+
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: skupinové ID „%s“ není platné\n"
+
+#~ msgid ""
+#~ "%s: group %s created, failure during the creation of the corresponding "
+#~ "gshadow group\n"
+#~ msgstr ""
+#~ "%s: skupina %s byla vytvořena, ale nastala chyba při vytváření "
+#~ "odpovídající stínové skupiny\n"
+
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: uživatelské ID „%s“ není platné\n"
+
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: neplatné uživatelské jméno „%s“\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: soubor /etc/passwd nelze zamknout.\n"
+
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: soubor /etc/shadow nelze zamknout.\n"
+
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: soubor /etc/group nelze zamknout.\n"
+
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: soubor /etc/gshadow nelze zamknout.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: soubory nelze otevřít\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: položku souboru s hesly pro uživatele %s nelze aktualizovat\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: soubor s hesly nelze zamknout\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: soubor s hesly nelze otevřít\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: položku souboru s hesly pro uživatele %s nelze odstranit\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: soubor s hesly nelze aktualizovat\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: položku pro uživatele %s nelze aktualizovat\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: nemůžete smazat soubor se stínovými hesly\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: neznámé GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: neznámá skupina %s\n"
+
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr ""
+#~ "%s: Nedostatek paměti. Nelze aktualizovat databázi stínových skupin.\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: soubor se stínovými hesly nelze přepsat\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: soubor se stínovými hesly nelze zamknout\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: soubor se stínovými hesly nelze otevřít\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: chyba při zamykání souboru se skupinami\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: chyba při otevírání souboru se skupinami\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: chyba při zamykání souboru se stínovými hesly\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: chyba při otevírání souboru se stínovými hesly\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: chyba při vytváření nové položky v souboru s hesly\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: chyba při vytváření nové položky v souboru se stínovými hesly\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s: varování: CREATE_HOME není podporováno, použijte přepínač -m\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: položku souboru se skupinami nelze aktualizovat\n"
+
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: chyba při aktualizaci stínové skupiny\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: soubor se skupinami nelze otevřít\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: soubor se stínovými skupinami nelze otevřít\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: chyba při odstraňování položky ze souboru s hesly\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: chyba při odstraňování položky ze souboru se stínovými hesly\n"
+
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: chyba při přidávání nové stínové skupiny\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu není jedinečné\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: chyba při změně položky v souboru s hesly\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: chyba při odstraňování položky ze souboru s hesly\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: chyba při odstraňování položky ze souboru se stínovými hesly\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " na „%.100s“ z „%.200s“"
+
+#~ msgid " on '%.100s'"
+#~ msgstr " na „%.100s“"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: řádek %d: nelze vytvořit UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: jméno %s není jedinečné\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ " -h, --help\t\tdisplay this help message and exit\n"
+#~ " -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použití: chgpasswd [volby]\n"
+#~ "\n"
+#~ "Volby:\n"
+#~ " -e, --encrypted\tzadaná hesla jsou zašifrovaná\n"
+#~ " -h, --help\t\tzobrazí tuto nápovědu a skončí\n"
+#~ " -m, --md5\t\tpokud zadaná hesla nejsou zašifrovaná,\n"
+#~ "\t\t\tpoužije místo DES algoritmus MD5\n"
+#~ "\n"
+
+#~ msgid "No password.\n"
+#~ msgstr "Žádné heslo.\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Lituji.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Lituji, ale heslo pro %s nelze ještě změnit.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Lituji."
diff --git a/po/da.gmo b/po/da.gmo
new file mode 100644
index 0000000..7278fb9
--- /dev/null
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
new file mode 100644
index 0000000..5895c92
--- /dev/null
+++ b/po/da.po
@@ -0,0 +1,2932 @@
+# Danish translation shadow.
+# Copyright (C) 2011 Free Software Foundation, Inc.
+# This file is distributed under the same license as the shadow package.
+# Claus Hindsgaul <claus.hindsgaul@gmail.com>, 2004, 2005, 2006.
+# Joe Hansen (joedalton2@yahoo.dk), 2011, 2012.
+#
+# konventioner:
+# audit -> overvågning
+# entry, entries -> punkt, punkter
+# exist -> findes
+# locktime -> låsetid
+# mapping -> kortlægning (oversættelse)
+# quiet -> tavs
+# record -> post
+# scratch -> scratch
+# shadow -> skygge
+# unlock -> åbne
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2012-01-26 23:57+0100\n"
+"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
+"Language-Team: Danish <debian-l10n-danish@lists.debian.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"Flere punkter med navnet »%s« i %s. Ret venligst dette med pwck eller "
+"grpck.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "cryptmetode er ikke understøttet af libcrypt? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr "konfigurationsfejl - kan ikke fortolke %s-værdi: »%s«"
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Kunne ikke frigøre plads til opsætningsoplysninger.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "opsætningsfejl - ukendt punkt »%s« (informer administrator)\n"
+
+#, c-format
+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\n"
+msgstr "%s: nscd afsluttede med status %d"
+
+msgid "Password: "
+msgstr "Adgangskode: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s's adgangskode: "
+
+#, fuzzy
+#| msgid "Cannot open audit interface - aborting.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "Kan ikke åbne overvågningsbrugerflade (audit) - afbryder.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr "[libsemanage]: %s\n"
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr "Kan ikke oprette SELinux-håndteringshåndtag\n"
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr "SELinux-politik ikke håndteret\n"
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr "Kan ikke læse SELinux-politiklageret\n"
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr "Kan ikke etablere SELinux-håndteringsforbindelse\n"
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr "Kan ikke begynde SELinux-transaktion\n"
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr "Kunne ikke forespørge seuser for %s\n"
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr "Kunne ikke angive serange for %s\n"
+
+#, c-format
+msgid "Could not set sename for %s\n"
+msgstr "Kunne ikke angive sename for %s\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr "Kunne ikke ændre logingkortlægningen for %s\n"
+
+#, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "Kan ikke oprette SELinux-logindkortlægning for %s\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr "Kunne ikke angive navn for %s\n"
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr "Kunne ikke angive SELinux-bruger for %s\n"
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr "Kunne ikke tilføje logindkortlægning for %s\n"
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr "Kan ikke initialisere SELinux-håntering\n"
+
+#, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "Kan ikke oprette SELinux-brugernøgle\n"
+
+#, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "Kan ikke verificere SELinux-brugeren\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr "Kan ikke ændre SELinux-brugerkortlægning\n"
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr "Kan ikke tilføje SELinux-brugerkortlægning\n"
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr "Kan ikke indsende SELinux-transaktion\n"
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+"Logindkortlægning for %s er ikke defineret, o.k. hvis standardkortlægning "
+"blev brugt\n"
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr "Logindkortlægning for %s er defineret i politik, kan ikke slettes\n"
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr "Kunne ikke slette logindkortlægning for %s"
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: Hukommelse opbrugt\n"
+
+#, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: Kan ikke stat %s: %s\n"
+
+#, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: %s er hverken en mappe eller en symbolsk henvisning.\n"
+
+#, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: Kan ikke omdøbe symbolsk henvisning %s: %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr "%s: Mistænkelig lang symbolsk henvisning: %s\n"
+
+#, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: Kan ikke oprette mappen %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: Kan ikke ændre ejer af %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: Kan ikke ændre tilstand for %s: %s\n"
+
+#, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: Fjern henvisning: %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: Kan ikke fjerne mappen %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: Kan ikke omdøbe %s til %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: Kan ikke fjerne %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: Kan ikke oprette symbolsk henvisning %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: Kan ibkke ændre ejere af %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: Kan ikke lstat %s: %s\n"
+
+#, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: Advarsel, bruger %s har ingen tcb-skyggefil.\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+"%s: Nødsituation: %s's tcb-skygge er ikke en regulær fil med st_nlink=1.\n"
+"Kontoen forbliver låst.\n"
+
+#, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: mkdir: %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: Kan ikke åbne %s: %s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Advarsel: Ukendt gruppe %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Advarsel: For mange grupper\n"
+
+msgid "Your password has expired."
+msgstr "Din adgangskode er udløbet."
+
+msgid "Your password is inactive."
+msgstr "Din adgangskode er inaktiv."
+
+msgid "Your login has expired."
+msgstr "Din adgangskode er udløbet."
+
+msgid " Contact the system administrator."
+msgstr " Kontakt systemadministratoren."
+
+msgid " Choose a new password."
+msgstr " Vælg en ny adgangskode."
+
+msgid "You must change your password."
+msgstr "Du skal ændre din adgangskode."
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Din adgangskode udløber om %ld dage.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Din adgangskode udløber i morgen."
+
+msgid "Your password will expire today."
+msgstr "Din adgangskode udløber i dag."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "Kan ikke åbne overvågningsbrugerflade (audit) - afbryder.\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Kan ikke ændre ejer eller tilstand af tty stdin: %s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: Kunne ikke åbne %s\n"
+
+#, c-format
+msgid "%s: "
+msgstr "%s: "
+
+msgid ": "
+msgstr ": "
+
+msgid "Environment overflow\n"
+msgstr "Miljøoverløb\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Du kan ikke ændre $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d fejl siden sidste logind.\n"
+"Sidst var %s, %s.\n"
+msgstr[1] ""
+"%d fejl siden sidste logind.\n"
+"Sidst var %s, %s.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: Ugyldig opsætning: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr "%s: Ugyldig opsætning: GID_MIN (%lu), GID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "%s: kunne ikke tildele hukommelse: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: Kan ikke indhente unik system-GID (ikke flere tilgængelige GID'er)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: Kan ikke indhente unik GID (ikke flere tilgængelige GID'er)\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: Kan ikke indhente unik GID (ikke flere tilgængelige GID'er)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+"%s: Ugyldig opsætning: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX (%lu)\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: Kan ikke oprette bruger\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+"%s: Ugyldig opsætning: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX (%lu)\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: Kan ikke oprette bruger\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: Ugyldig opsætning: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr "%s: Ugyldig opsætning: UID_MIN (%lu), UID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: Kan ikke indhente unik system-UIK (ikke flere tilgængelige UID'er)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: Kan ikke indhente unik UID (ikke flere tilgængelige UID'er)\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: Kan ikke indhente unik UID (ikke flere tilgængelige UID'er)\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Authentication failure\n"
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: Godkendelse mislykkedes\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: Ugyldigt felt »%s«\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Could not set name for %s\n"
+msgid "%s: Could not seteuid to %d\n"
+msgstr "Kunne ikke angive navn for %s\n"
+
+#, fuzzy, c-format
+#| msgid "Could not set name for %s\n"
+msgid "%s: Could not set caps\n"
+msgstr "Kunne ikke angive navn for %s\n"
+
+#, c-format
+msgid "%s: snprintf failed!\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: Linje %d: chown %s fejlede: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: Linje %d: chown %s fejlede: %s\n"
+
+msgid "Too many logins.\n"
+msgstr "Logget på for mange gange.\n"
+
+msgid "You have new mail."
+msgstr "Du har ny post."
+
+msgid "No mail."
+msgstr "Ingen post."
+
+msgid "You have mail."
+msgstr "Du har post."
+
+msgid "no change"
+msgstr "ingen ændring"
+
+msgid "a palindrome"
+msgstr "et palindrom"
+
+msgid "case changes only"
+msgstr "kun versalændringer"
+
+msgid "too similar"
+msgstr "for ens"
+
+msgid "too simple"
+msgstr "for simpelt"
+
+msgid "rotated"
+msgstr "omrokeret"
+
+msgid "too short"
+msgstr "for kort"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Ugyldig adgangskode: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() mislykkedes, fejl %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+msgid "passwd: password unchanged\n"
+msgstr "passwd: Adgangskode uændret\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: adgangskoden blev opdateret\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: Arkiv %s understøttes ikke\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start: Fejl %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd: pam_start() mislykkedes, fejl %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Ugyldig adgangskode for %s.\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr "%s: flere tilvalg for --root\n"
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr "%s: tilvalg »%s« kræver et argument\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: Kunne ikke afgive rettigheder (%s)\n"
+
+#, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: Ugyldig chroot-sti »%s«\n"
+
+#, c-format
+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 chdir to chroot directory %s: %s\n"
+msgstr "%s: Kan ikke tilgå chroot-mappe %s: %s\n"
+
+#, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: Kan ikke chroot til mappe %s: %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"Ugyldig ENCRYPT_METHOD-værdi: »%s«.\n"
+"Vælger standard DES.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Kunne ikke skifte mappe til »%s«\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Ingen mappe, logger på med HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Kan ikke udføre %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Ugyldig rodmappe »%s«\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Kan ikke ændre rodmappen til »%s«\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user '%s' does not exist in %s\n"
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: Brugeren »%s« findes ikke i %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user '%s' is not a member of '%s'\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: Brugeren »%s« er ikke medlem af »%s«\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Kan ikke afgøre dit tty-navn."
+
+msgid "No"
+msgstr "Nej"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Brug: %s [tilvalg] LOGIND\n"
+"\n"
+"Tilvalg:\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+" -d, --lastday SIDSTE_DAG sæt seneste adgangskodeændring til "
+"SIDSTE_DAG\n"
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -E, --expiredate UDLØBSDATO sæt kontoens udløbsdato til UDLØBSDATO\n"
+
+msgid " -h, --help display this help message and exit\n"
+msgstr " -h, --help vis denne hjælpetekst og afslut\n"
+
+#, fuzzy
+#| msgid " -g, --group edit group database\n"
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr " -g, --group rediger gruppedatabase\n"
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -I, --inactive INAKTIVT sæt inaktiv adgangskode efter udløb til\n"
+" INAKTIVT\n"
+
+msgid " -l, --list show account aging information\n"
+msgstr " -l, --list vis forældelsesoplysninger for konto\n"
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+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 maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -M, --maxdays MAKS_DAGE sæt maksimalt antal dage inden\n"
+" adgangskodeændring til MAKS_DAGE\n"
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr " -R, --root CHROOT_MAPPE mappe at chroote ind i\n"
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -W, --warndays VARSELSDAGE sæt antallet af udløbsvarselsdage til\n"
+" VARSELSDAGE\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Angiv ny værdi eller tryk RETUR for standardværdien"
+
+msgid "Minimum Password Age"
+msgstr "Minimal alder for adgangskode"
+
+msgid "Maximum Password Age"
+msgstr "Maksimal alder for adgangskode"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Sidste ændring af adgangskode (ÅÅÅÅ-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Advarsel om udløb af adgangskode"
+
+msgid "Password Inactive"
+msgstr "Adgangskode inaktiv"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Udløbsdato for konto (ÅÅÅÅ-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Sidste ændring af adgangskode\t\t\t\t\t: "
+
+msgid "never"
+msgstr "aldrig"
+
+msgid "password must be changed"
+msgstr "adgangskoden skal ændres"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Adgangskode udløber\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Adgangskode inaktiv\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Konto udløber\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Minimalt antal dage mellem ændring af adgangskoden\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Maksimalt antal dage mellem ændring af adgangskoden\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Antal dages forvarsel om adgangskodens udløb\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: Ugyldig dato »%s«\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: Ugyldig numerisk parameter »%s«\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: Medtag ikke »l« med andre flag\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Adgang nægtet.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Kan ikke afgøre dit brugernavn.\n"
+
+#, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: PAM: %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: Kan ikke låse %s; prøv igen senere.\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: Kan ikke åbne %s\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: Kunne ikke skrive ændringer til %s\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: Kunne ikke forberede det nye %s-punkt »%s«\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: Skyggeadgangskodefilen findes ikke\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: Brugeren »%s« findes ikke i %s\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Ændrer forældelsesoplysninger for %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: Fejl ved ændring af felter\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Brug: %s [tilvalg] [LOGIND]\n"
+"\n"
+"Tilvalg:\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr " -f, --full-name FULDE_NAVN skift brugers fulde navn\n"
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr " -h, --home-phone HJEMMETEL. skift brugers hjemmetelefonnr.\n"
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+" -o, --other ANDEN_INFO skift brugers andre GECOS-information\n"
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr " -r, --room VÆRELSESNUMMER skift brugers værelsesnummer\n"
+
+msgid " -u, --help display this help message and exit\n"
+msgstr " -u, --help vis denne hjælpetekst og afslut\n"
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr " -w, --work-phone ARBEJDSTEL. skift brugers kontortelefonnr.\n"
+
+msgid "Full Name"
+msgstr "Fulde navn"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "Værelsesnummer"
+
+msgid "Work Phone"
+msgstr "Arbejdstelefon"
+
+msgid "Home Phone"
+msgstr "Telefon"
+
+msgid "Other"
+msgstr "Andet"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Kan ikke ændre id til root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: Navn med ikke-ASCII-tegn: »%s«\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: Ugyldigt navn: »%s«\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s: Værelsesnummer med ikke-ASCII-tegn: »%s«\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: Ugyldigt værelsesnummer: »%s«\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: Ugyldig arbejdstelefon: »%s«\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: Ugyldig hjemmetelefon: »%s«\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: »%s« indeholder ikke-ASCII-tegn\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: »%s« indeholder ugyldige tegn\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: Brugeren »%s« findes ikke\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: Kan ikke ændre brugeren »%s« på NIS-klienten.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: »%s« er NIS-masteren for denne klient.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Ændrer brugeroplysninger for %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: Felter for lange\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Brug: %s [tilvalg]\n"
+"\n"
+"Tilvalg:\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr " -c, --crypt-method METODE crypt-metoden (en af %s)\n"
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr " -e, --encrypted angivne adgangskoder er krypterede\n"
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+" -m, --md5 krypter adgangskoden med klartekst med brug "
+"af\n"
+" MD5-algoritmen\n"
+
+#, fuzzy
+#| msgid ""
+#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
+#| " crypt algorithms\n"
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+" -s, --sha-rounds antal SHA-runder for SHA*\n"
+" crypt-algoritmerne\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: Flaget %s er kun tilladt med flaget %s\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: Flagene -c, -e og -m udelukker hinanden\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: Crypt-metode er ikke understøttet: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: Linje %d: Linjen er for lang\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: Linje %d: Mangler ny adgangskode\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: Kunne ikke skrive %s: %s\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: Linje %d: Gruppe »%s« findes ikke\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: Linje %d: Kunne ikke forberede det nye %s-punkt »%s«\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: Fejl opdaget, ændringerne blev ignoreret\n"
+
+#, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: (Linje %d, bruger %s) adgangskode ikke ændret\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: Linje %d: Bruger »%s« findes ikke\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr " -s, --shell SKAL ny logindskal for brugerkontoen\n"
+
+msgid "Login Shell"
+msgstr "Logindskal"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Du kan ikke ændre skallen for »%s«.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Ændrer logindskallen for %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Ugyldigt punkt: %s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s: %s er en ugyldig skal\n"
+
+#, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: Advarsel: %s findes ikke\n"
+
+#, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: Advarsel: %s er ikke kørbar\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+" -c, --check kontroller udløb for brugerens adgangskode\n"
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+" -f, --force fremtving ændring af adgangskode hvis "
+"brugerens adgangskode\n"
+" er udløbet\n"
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: Tilvalg %s og %s er i konflikt\n"
+
+#, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "%s: Uventet argument: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr " -a, --all vis faillog-poster for alle brugere\n"
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+" -l, --lock-secs SEK efter mislykket logind lås konto for SEK "
+"sekunder\n"
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+" -m, --maximum MAKS angiv maksimum for mislykkede logind til "
+"MAKS\n"
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+" -r, --reset nulstil tælleren for mislykkede logind\n"
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr " -t, --time DAGE vis faillog-poster nyere end DAGE\n"
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+" -u, --user LOGIN/RANGE vis kun faillog-poster eller fejltællere "
+"for\n"
+" vedligehold og begrænsninger (hvis brugt med "
+"-r,\n"
+" -m, eller -l) for de angivne LOGIND'ER\n"
+
+#, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: Kunne ikke indhente punktet for UID %lu\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "Logind Fejl Maksimum Seneste Tid\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr " [%lus tilbage]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds lås]"
+
+#, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s: Kunne ikke nulstille fejlantal for UID %lu\n"
+
+#, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: Kunne ikke angive maks for UID %lu\n"
+
+#, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: Kunne ikke angive låsetid for UID %lu\n"
+
+#, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "%s: Ukendt bruger eller interval: %s\n"
+
+#, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: Kan ikke indhente størrelsen for %s: %s\n"
+
+#, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: Kunne ikke skrive %s: %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Brug: %s [tilvalg] GRUPPE\n"
+"\n"
+"Tilvalg:\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr " -a, --add BRUGER tilføj BRUGER til GRUPPE\n"
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr " -d, --delete BRUGER fjern BRUGER fra GRUPPE\n"
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr " -Q, --root CHROOT_MAPPE mappe at chroote ind i\n"
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr " -r, --remove-password fjern GRUPPENS adgangskode\n"
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+" -R, --restrict begræns adgang til GRUPPE til gruppens "
+"medlemmer\n"
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr " -M, --members BRUGER,... angiv medlemslisten for GRUPPE\n"
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+" -A, --administrators ADMIN,...\n"
+" angiv administratorlisten for GRUPPE\n"
+
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+"Med undtagelse af tilvalgene -A og -M kan tilvalgene ikke kombineres.\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "Tilvalgene kan ikke kombineres.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: Adgangskode for shadowgruppe er krævet for -A\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: Gruppen »%s« findes ikke i %s\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: Fejl under lukning af skrivebeskyttet %s\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Ændrer adgangskoden for gruppen %s\n"
+
+msgid "New Password: "
+msgstr "Ny adgangskode: "
+
+msgid "Re-enter new password: "
+msgstr "Gentag ny adgangskode: "
+
+msgid "They don't match; try again"
+msgstr "De er ikke ens. Prøv igen"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Prøv igen senere\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Tilføjer brugeren %s til gruppen %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Fjerner brugeren %s fra gruppen %s\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: Brugeren »%s« er ikke medlem af »%s«\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Ikke en tty\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Brug: %s [tilvalg] GRUPPE\n"
+"\n"
+"Tilvalg:\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+" -f, --force afslut hvis gruppen allerede findes,\n"
+" og afbryd -g hvis GID'en allerede bruges\n"
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr " -g, --gid GID anvend GID for den nye gruppe\n"
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr " -K, --key NØGLE=VÆRDI overskriv /etc/login.defs-standarder\n"
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique tillad at oprette grupper med den samme\n"
+" (ikke unikke) GID\n"
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+" -p, --password ADGANGSKODE brug denne krypterede adgangskode for den "
+"nye gruppe\n"
+
+msgid " -r, --system create a system account\n"
+msgstr " -r, --system opret en systemkonto\n"
+
+#, fuzzy
+#| msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr " -R, --root CHROOT_MAPPE mappe at chroote ind i\n"
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: »%s« er ikke et gyldigt gruppenavn\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: Ugyldigt gruppe-id »%s«\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K kræver NØGLE=VÆRDI\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: gruppen »%s« findes allerede\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s: GID »%lu« findes allerede\n"
+
+#, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: Kan ikke opsætte tjenesten cleanup.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+" -r, --reset nulstil tælleren for mislykkede logind\n"
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: Kan ikke fjerne punkt »%s« fra %s\n"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: Kan ikke fjerne den primære gruppe for bruger »%s«.\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: Gruppe »%s« findes ikke\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: Gruppe »%s« er en NIS-gruppe.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s er NIS-masteren\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: Bruger »%s« er allerede medlem af »%s«\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: Ikke nok hukommelse. Kan ikke opdatere %s.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Brug: %s [tilvalg] [handling]\n"
+"\n"
+"Tilvalg:\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+" -g, --group groupname ændr gruppenavn i stedet for brugerens "
+"gruppe\n"
+" (kun root)\n"
+
+msgid "\n"
+msgstr "\n"
+
+msgid "Actions:\n"
+msgstr "Handlinger:\n"
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+" -a, --add brugernavn tilføj brugernavn til medlemmer af gruppen\n"
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+" -d, --delete brugernavn fjern brugernavn fra medlemmer af gruppen\n"
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr ""
+" -p, --purge afinstaller alle medlemmer fra gruppen\n"
+
+msgid " -l, --list list the members of the group\n"
+msgstr " -l, --list vis medlemmer af gruppen\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: Dit gruppenavn svarer ikke overens med dit brugernavn\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s: Kun root kan bruge tilvalget -g/--group\n"
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr " -g, --gid GID ændr gruppe-id'et til GID\n"
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr " -n, --new-name NY_GRUPPE ændr navnet til NY_GRUPPE\n"
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique tillad at bruge en tilsvarende (der ikke er "
+"unik) GID\n"
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+" -p, --password ADGANGSKODE ændr adgangskoden til denne (krypteret)\n"
+" ADGANGSKODE\n"
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: Ugyldigt gruppenavn »%s«\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: Gruppen %s er en NIS-gruppe\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: Ukendt bruger %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Brug: %s [tilvalg] [gruppe [gskygge]]\n"
+"\n"
+"Tilvalg:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Brug: %s [tilvalg] [gruppe]\n"
+"\n"
+"Tilvalg:\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+" -r, --read-only vis fejl og advarsler\n"
+" men ændr ikke filer\n"
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr " -s, --sort sorter punkter efter UID\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s og -r er ikke kompatible\n"
+
+msgid "invalid group file entry"
+msgstr "ugyldig gruppefilspunkt"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "slet linjen »%s«? "
+
+msgid "duplicate group entry"
+msgstr "gruppepunktet er en dublet"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "ugyldigt gruppenavn »%s«\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "ugyldigt gruppe-id »%lu«\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "gruppe %s: ingen bruger %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "slet medlemmet »%s«? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "intet tilsvarende gruppefilspunkt i %s\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "tilføj gruppe »%s« i %s? "
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"gruppe %s har et punkt i %s, men dennes adgangskodefelt i %s er ikke angivet "
+"til »x«\n"
+
+msgid "invalid shadow group file entry"
+msgstr "ugyldigt skyggegruppefilspunkt"
+
+msgid "duplicate shadow group entry"
+msgstr "skyggegruppepunkt er en dublet"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "skyggegruppen %s: ingen administratorbruger %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "slet administratormedlemmet »%s«? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "skyggegruppen %s: Ingen bruger %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: Filerne er blevet opdateret\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: Ingen ændringer\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: Kan ikke slette %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Brug: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Brug: id\n"
+
+msgid " groups="
+msgstr " grupper="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+" -b, --before DAGE vis kun lastlog-poster, der er ældre\n"
+" end DAGE\n"
+
+#, fuzzy
+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 ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr " -a, --all vis faillog-poster for alle brugere\n"
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time DAGE vis kun lastlog-poster, der er nyere\n"
+" end DAGE\n"
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+" -u, --user LOGIND vis lastlog-poster for brugeren med\n"
+" det angivne LOGIND\n"
+
+msgid "Username Port From Latest"
+msgstr "Brugernavn Port Fra Seneste"
+
+msgid "Username Port Latest"
+msgstr "Brugernavn Port Seneste"
+
+msgid "**Never logged in**"
+msgstr "**Har aldrig logget på**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s: Kunne ikke indhente punktet for UID %lu\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s: Kunne ikke nulstille lastlog-punktet for UID %lu: %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 "Brug: %s [-p] [navn]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h vært] [-f navn]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r vært\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr "konfigurationsfejl - kan ikke fortolke %s-værdi: »%d«"
+
+msgid "Invalid login time"
+msgstr "Ugyldig logindtid"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Systemet er lukket for rutinemæssig vedligehold"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Afbrød ikke forbindelsen - root-logind er tilladt.]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr "%s: Kan umuligt arbejde uden effektiv root\n"
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr "Intet utmp-punkt. Du skal køre »login« fra det laveste »sh-niveau«"
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Logind udløb efter %u sekunder.\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM-fejl, afbryder: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s logind: "
+
+msgid "login: "
+msgstr "logind: "
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Maksimalt antal forsøg overgået (%u)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: PAM har anmodet om afbrydelse\n"
+
+msgid "Login incorrect"
+msgstr "Forkert logind"
+
+#, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "Kan ikke finde bruger (%s)\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s logind: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: Fejl under forgrening: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSCTTY mislykkedes på %s"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Advarsel: Logind genetableret efter midlertidig udelukkelse."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Sidst logget på: %s på %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Sidst logget på: %.19s på %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " fra %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"logindtid overskredet\n"
+"\n"
+
+msgid "Usage: logoutd\n"
+msgstr "Brug: logoutd\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, c-format
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: Kunne ikke fjerne %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: Kunne ikke fjerne %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to unlock %s\n"
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: Kunne ikke åbne %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to find tcb directory for %s\n"
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: Kunne ikke finde tcb-mappe for %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Failed to create tcb directory for %s\n"
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: Kan ikke oprette tcv-mappe for %s\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Brug: newgrp [-] [gruppe]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Brug: sg gruppe [[-c] kommando]\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: Kunne ikke skrive %s: %s\n"
+
+msgid "Invalid password.\n"
+msgstr "Ugyldig adgangskode.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: fejl under forgrening: %s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: GID »%lu« findes ikke\n"
+
+msgid "too many groups\n"
+msgstr "for mange grupper\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+#, fuzzy
+#| msgid " -q, --quiet quiet mode\n"
+msgid " -b, --badnames allow bad names\n"
+msgstr " -q, --quiet tavs tilstand\n"
+
+msgid " -r, --system create system accounts\n"
+msgstr " -r, --system opret systemkontoer\n"
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: gruppe »%s« er en skyggegruppe, men findes ikke i /etc/group\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: Ugyldigt bruger-id »%s«\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: Ugyldigt brugernavn »%s«\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: Linje %d: Ugyldig linje\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: Kan ikke opdatere punktet for brugeren %s (ikke i passwd-databasen)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: Linje %d: Kan ikke oprette bruger\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: Linje %d: Kan ikke oprette gruppe\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: Linje %d: Bruger »%s« findes ikke i %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: Linje %d: Kan ikke opdatere adgangskode\n"
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: Linje %d: mkdir %s fejlede: %s\n"
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: Linje %d: chown %s fejlede: %s\n"
+
+#, c-format
+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 new %s entry\n"
+msgstr "%s: Kunne ikke forberede det nye %s-punkt »%s«\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: Kan ikke oprette bruger\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: Kan ikke oprette gruppe\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+" -a, --all rapporter alle kontis adgangskodestatus\n"
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+" -d, --delete slet den navngivne kontos adgangskode\n"
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+" -e, --expire gennemtving udløb af den navngivne kontos\n"
+" adgangskode\n"
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+" -k, --keep-tokens skift kun adgangskode, hvis den er udløbet\n"
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -i, --inactive INAKTIVE set udløbne adgangskoder til INAKTIVE\n"
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr " -l, --lock læs den navngivne konto\n"
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -n, --mindays MIN_DAGE angiv minimale antal dage inden skift af\n"
+" adgangskode til MIN_DAGE\n"
+
+msgid " -q, --quiet quiet mode\n"
+msgstr " -q, --quiet tavs tilstand\n"
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+" -r, --repository SAMLING skift adgangskode i samlingen SAMLING\n"
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+" -S, --status raporter den navngivne kontos\n"
+" adgangskodestatus\n"
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+" -u, --unlock åbn adgangskoden på den navngivne konto\n"
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr " -w, --warndays ADVAR_DAGE advar om udløb i ADVAR_DAGE dage\n"
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -x, --maxdays MAKS_DAGE sæt det maksimale antal dage inden skift af\n"
+" adgangskode til MAKS_DAGE\n"
+
+msgid "Old password: "
+msgstr "Gammel adgangskode: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Angiv ny adgangskode (mindst %d tegn)\n"
+"Brug en kombination af små og store bogstaver samt tal.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Angiv ny adgangskode (mindst %d, højst %d tegn)\n"
+"Brug en kombination af små og store bogstaver samt tal.\n"
+
+msgid "New password: "
+msgstr "Ny adgangskode: "
+
+msgid "Try again."
+msgstr "Prøv igen."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Advarsel: Svag adgangskode (skriv den igen for at bruge den alligevel)."
+
+msgid "They don't match; try again.\n"
+msgstr "De er ikke ens; prøv igen.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Adgangskoden for %s kan ikke ændres.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Adgangskoden for %s kan endnu ikke ændres.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: Åbning af adgangskode vil medføre en konto uden adgangskode.\n"
+"Du bør angive en adgangskode med usermod -p for at åbne adgangskoden for "
+"denne konto.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: Arkiv %s understøttes ikke\n"
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not authorized to change the password of %s\n"
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr "%s: %s er ikke godkendt til at ændre adgangskoden på %s\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Du har ikke lov til at se adgangskodeoplysninger for %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Ændrer adgangskode for %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Adgangskoden for %s er uændret.\n"
+
+#, c-format
+msgid "%s: password changed.\n"
+msgstr "%s: Adgangskode ændret.\n"
+
+#, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "%s: Information om udløb af adgangskode blev ændret.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Brug: %s [tilvalg] [adgangskode]\n"
+"\n"
+"Tilvalg:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Brug: %s [tilvalg] [adgangskode [skygge]]\n"
+"\n"
+"Tilvalg:\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr " -q, --quiet rapporter kun fejl\n"
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr "%s: Ingen alternativ skyggefil er tilladt, når USE_TCB er aktiveret.\n"
+
+msgid "invalid password file entry"
+msgstr "ugyldig linje i adgangskodepunkt"
+
+msgid "duplicate password entry"
+msgstr "adgangskodepunkt er en dublet"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "ugyldigt brugernavn »%s«\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "ugyldigt bruger-id »%lu«\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "bruger »%s«: Ingen gruppe %lu\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "bruger »%s«: Mappen »%s« findes ikke\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "bruger »%s«: Programmet »%s« findes ikke\n"
+
+#, c-format
+msgid "no tcb directory for %s\n"
+msgstr "ingen tcb-mappe for %s\n"
+
+#, c-format
+msgid "create tcb directory for %s?"
+msgstr "opret tcb-mappe for %s?"
+
+#, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "kan ikke oprette tcb-mappe for %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: Kan ikke låse %s.\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "intet tilsvarende adgangskodepunkt i %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "tilføj brugeren »%s« i %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"bruger %s har et punkt i %s, men dets adgangskodefelt i %s er ikke angivet "
+"til »x«\n"
+
+msgid "invalid shadow password file entry"
+msgstr "ugyldigt punkt i skyggeadgangskodefil"
+
+msgid "duplicate shadow password entry"
+msgstr "skyggeadgangskodepunkt er en dublet"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "bruger %s: seneste ændring af adgangskoden skete i fremtiden\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: Kan ikke sortere punkter i %s\n"
+
+#, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: Kan ikke arbejde med tcb aktiveret\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: Kunne ikke ændre tilstanden for %s til 0600\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Adgang til at udføre su til den konto er NÆGTET.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Gik uden om adgangskodegodkendelse.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Angiv din EGEN adgangskode som godkendelse.\n"
+
+#, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: Kan ikke forgrene brugerskal\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr "%s: Forkert signal\n"
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr "%s: Forkert signalmasking\n"
+
+msgid "Session terminated, terminating shell..."
+msgstr "Session termineret, terminerer skal..."
+
+#, c-format
+msgid " ...killed.\n"
+msgstr " ...dræbt.\n"
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr " ...venter på at underproces termineres.\n"
+
+msgid " ...terminated.\n"
+msgstr " ...termineret.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: su [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
+#| " -h, --help display this help message and exit\n"
+#| " -, -l, --login make the shell a login shell\n"
+#| " -m, -p,\n"
+#| " --preserve-environment do not reset environment variables, and\n"
+#| " keep the same shell\n"
+#| " -s, --shell SHELL use SHELL instead of the default in "
+#| "passwd\n"
+#| "\n"
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"Brug: su [tilvalg] [LOGIND]\n"
+"\n"
+"Tilvalg:\n"
+" -c, --command KOMMANDO videregiv KOMMANDO til den startede skal\n"
+" -h, --help vis denne hjælpebesked og afslut\n"
+" -, -l, --login gør skallen til en logind-skal\n"
+" -m, -p,\n"
+" --preserve-environment nulstil ikke miljøvariable, og behold\n"
+" den samme skal\n"
+" -s, --shell SKAL benyt SKAL i stedet for standard-skallen\n"
+" i passwd\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ignoreret)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Du er ikke autoriseret til at su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Angiv din adgangskode)"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: Godkendelse mislykkedes\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s: Du er ikke autoriseret til at su på det tidspunkt\n"
+
+#, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "Intet adgangskodepunkt for bruger »%s«\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: Skal køres fra en terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: Fejl %d\n"
+
+#, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: Kan ikke fjerne den kontrollerende terminal\n"
+
+#, c-format
+msgid "Cannot execute %s\n"
+msgstr "Kan ikke udføre %s\n"
+
+msgid "No password file"
+msgstr "Ingen adgangskodefil"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY mislykkedes"
+
+msgid "No password entry for 'root'"
+msgstr "Intet adgangskodepunkt for »root«"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Tryk control-d for at fortsætte den normale opstart,\n"
+"(eller angiv root-adgangskoden for systemvedligehold):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Går i systemvedligeholdelsestilstand"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr "%s: %s blev oprettet, men kunne ikke fjernes\n"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr "%s: Konfigurationen %s i %s vil blive ignoreret\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: Kan ikke oprette ny standardværdifil\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: Kan ikke oprette ny standardværdifil\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: Kan ikke åbne ny standardværdifil\n"
+
+#, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: Linje for lang i %s: %s..."
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: Kan ikke oprette symbolsk henvisning %s: %s\n"
+
+#, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: Omdøb: %s: %s\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: Gruppen »%s« er en NIS-gruppe.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: Der er angivet for mange grupper (højst %d).\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Brug: %s [tilvalg] LOGIND\n"
+" %s -D\n"
+" %s -D [tilvalg]\n"
+"\n"
+"Tilvalg:\n"
+
+#, fuzzy
+#| msgid " -s, --shadow edit shadow or gshadow database\n"
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+" -s, --shadow rediger skygge- eller gskyggedatabase\n"
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+" -b, --base-dir BASIS_MAP basismappe for hjemmemappen på den nye\n"
+" konto\n"
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr " -c, --comment KOMMENTAR GECOS-felt på den nye konto\n"
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr " -d, --home-dir HJEMMEMAPPE hjemmemappe på den nye konto\n"
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+" -D, --defaults udskriv eller ændr standard for "
+"konfigurationen af useradd\n"
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr " -e, --expiredate UDLØBSDATO udløbsdato på den nye konto\n"
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+" -f, --inactive INAKTIVE inaktiv periode for adgangskode på den nye "
+"konto\n"
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+" -g, --gid GRUPPE navn eller id på den primære gruppe på den "
+"nye\n"
+" konto\n"
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+" -G, --groups GROUPS liste af suplementære grupper for den nye\n"
+" konto\n"
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr " -k, --skel SKEL_DIR brug denne alternative skeletmappe\n"
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+" -l, --no-log-init tilføj ikke brugeren til lastlog- og \n"
+" faillog-databaserne\n"
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr " -m, --create-home opret brugerens hjemmemappe\n"
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr " -M, --no-create-home opret ikke brugerens hjemmemappe\n"
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+" -N, --no-user-group opret ikke en gruppe med det samme navn som\n"
+" brugeren\n"
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique tillad oprettelse af brugere med ens\n"
+" (der ikke er unik) UID\n"
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+" -p, --password ADGANGSKODE krypteret adgangskode for den nye konto\n"
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr " -s, --shell SKAL logindskal for den nye konto\n"
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr " -u, --uid UID bruger-id for den nye konto\n"
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+" -U, --user-group opret en gruppe med det samme navn som "
+"brugeren\n"
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+" -Z, --selinux-user SE_BRUGER brug en specifik SE_BRUGER for "
+"kortlægningen af SELinux-brugere\n"
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: Ugyldig basismappe »%s«\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: Ugyldig kommentar »%s«\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: Ugyldig hjemmemappe »%s«\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: Der kræves skyggeadgangskoder for -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: Der kræves skyggeadgangskoder for -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: Ugyldigt felt »%s«\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: Ugyldig skal »%s«\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Warning: %s is not executable\n"
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: Advarsel: %s er ikke kørbar\n"
+
+#, c-format
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr "%s: -Z kræver SELinux-aktiveret kerne\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr "%s: Kunne ikke nulstille faillog-punktet for UID %lu: %s\n"
+
+#, c-format
+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 reset the faillog entry of UID %lu: %s\n"
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s: Kunne ikke nulstille faillog-punktet for UID %lu: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: Kunne ikke forberede det nye %s-punkt »%s«\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error changing fields\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: Fejl ved ændring af felter\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: Kan ikke oprette mappen %s\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s home directory (%s) not found\n"
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: %s hjemmemappe (%s) er ikke fundet\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to allocate memory: %s\n"
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "%s: kunne ikke tildele hukommelse: %s\n"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: Kan ikke oprette mappen %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: Linje %d: chown %s fejlede: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: Linje %d: chown %s fejlede: %s\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "Opretter postboksfil"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Gruppen »mail« blev ikke fundet. Opretter brugerens postboksfil med "
+"tilstanden 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Indstiller postboksfilens rettigheder"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: Brugeren »%s« findes allerede\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: Gruppen %s findes - brug -g hvis du vil tilføje denne bruger til den "
+"gruppe.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: Kan ikke oprette bruger\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %lu er ikke unik\n"
+
+#, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: Kan ikke oprette tcv-mappe for %s\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: Kan ikke oprette gruppe\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: Kan ikke oprette bruger\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: Kan ikke oprette gruppe\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: Advarsel: Hjemmemappen findes allerede.\n"
+"Kopierer ikke nogen filer til den fra skelet-mappen.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+"%s: Advarsel: Brugernavnet %s til %s SELinux-brugerkortlægning mislykkedes.\n"
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+" -f, --force gennemtving fjernelse af filer,\n"
+" selvom de ikke ejers af brugeren\n"
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr " -r, --remove fjern home-mappen og postkøen\n"
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+" -Z, --selinux-user fjern alle SELinux-brugerkortlægninger for "
+"brugeren\n"
+
+#, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr ""
+"%s: Gruppe %s er ikke fjernet, da den ikke er den primære gruppe for bruger "
+"%s.\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr "%s: Gruppe %s er ikke fjernet da gruppen har andre medlemmer.\n"
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+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 %lu from %s\n"
+msgstr "%s: Kan ikke fjerne punkt »%s« fra %s\n"
+
+#, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: %s postkø (%s) er ikke fundet\n"
+
+#, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: Advarsel: Kan ikke fjerne %s: %s\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s ejes ikke af %s, fjerner ikke\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+"%s: Kan ikke allokere hukommelse, tcb-punkt for %s blev ikke fjernet.\n"
+
+#, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: Kan ikke smide privilegier: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: Kan ikke fjerne indholdet af %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: Kan ikke fjerne tcb-filer for %s: %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: Brugeren %s er en NIS-bruger\n"
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: %s hjemmemappe (%s) er ikke fundet\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: Fjerner ikke mappen %s (det ville fjerne hjemmemappen for brugeren %s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: Fejl under fjernelse af mappen %s\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: Fejl under fjernelse af mappen %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+"%s: Advarsel: Brugernavnet %s for fjernelse af SELinux-brugerkortlægning "
+"mislykkedes.\n"
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr " -c, --comment KOMMENTAR ny værdi til GECOS-feltet\n"
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr " -d, --home-dir HJEMMEMAPPE den nye brugerkontos hjemmemappe\n"
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -e, --expiredate UDLØBSDATO sæt kontoens udløbsdato til UDLØBSDATO\n"
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -f, --inactive INAKTIV sæt inaktiv adgangskode til INAKTIV efter\n"
+" udløb\n"
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+" -g, --gid GRUPPE gennemtving brugen af GRUPPE til den nye\n"
+" primære gruppe\n"
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+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"
+" the user from other groups\n"
+msgstr ""
+" -a, --append tilføj brugeren til de supplementære "
+"GRUPPER\n"
+" nævnt af tilvalget -G uden at fjerne "
+"personen\n"
+" fra andre grupper\n"
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr " -l, --login NYT_LOGIND ny værdi til logindnavnet\n"
+
+msgid " -L, --lock lock the user account\n"
+msgstr " -L, --lock lås brugerkontoen\n"
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+" -m, --move-home flyt indholdet af hjemmemappen til den nye\n"
+" placering (brug kun sammen med -d)\n"
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique tillad oprettelse af ens (der ikke er unik) "
+"UID\n"
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+" -p, --password ADGANGSKODE brug krypteret adgangskode til den nye\n"
+" adgangskode\n"
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr " -u, --uid UID ny UID til brugerkontoen\n"
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr " -U, --unlock åbn brugerkontoen\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"
+msgstr ""
+" -Z, --selinux-user SEUSER ny SELinux-brugerkortlægning for "
+"brugerkontoen\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: Fjernelse af lås på brugerens adgangskode vil medføre en konto uden "
+"adgangskode.\n"
+"Du bør angive en adgangskode med usermod -p for at åbne lås for denne "
+"brugers adgangskode.\n"
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: Brugeren »%s« findes allerede i %s\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: Ugyldig dato »%s«\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: Ugyldig dato »%s«\n"
+
+#, c-format
+msgid "%s: no options\n"
+msgstr "%s: Ingen tilvalg\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: Flagene -L, -p og -U udelukker hinanden\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: Skyggeadgangskoder kræves for -e og -f\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: UID »%lu« findes allerede\n"
+
+#, fuzzy, c-format
+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"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: Mappen %s findes\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+"%s: Den tidligere hjemmemappe (%s) var ikke en mappe. Den fjernes ikke og "
+"ingen hjemmemappe oprettes.\n"
+
+#, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: Kunne ikke ændre ejerskab af hjemmemappen"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: Advarsel: Kunne ikke fjerne den gamle hjemmemappe %s fuldstændigt"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: Kan ikke omdøbe mappen %s til %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: Kunne ikke kopiere lastlog-punktet for bruger %lu til bruger %lu: %s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: Kunne ikke kopiere faillog-punktet for bruger %lu til bruger %lu: %s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: Advarsel: %s ejes ikke af %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "kunne ikke ændre postkassens ejer"
+
+msgid "failed to rename mailbox"
+msgstr "kunne ikke omdøbe postkasse"
+
+#, fuzzy, c-format
+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 add uid range %lu-%lu to '%s'\n"
+msgstr "%s: Kunne ikke forberede det nye %s-punkt »%s«\n"
+
+#, fuzzy, c-format
+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 add gid range %lu-%lu to '%s'\n"
+msgstr "%s: Kunne ikke forberede det nye %s-punkt »%s«\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Du har ændret %s.\n"
+"Du skal måske ændre %s for konsistens.\n"
+"Brug venligst kommandoen »%s« til dette.\n"
+
+msgid " -g, --group edit group database\n"
+msgstr " -g, --group rediger gruppedatabase\n"
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr " -p, --passwd rediger passwd-database\n"
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+" -s, --shadow rediger skygge- eller gskyggedatabase\n"
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+" -u, --user hvilken brugers tcb-skyggefil at redigere\n"
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: Kunne ikke fjerne %s\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: %s er uændret\n"
+
+msgid "failed to create scratch directory"
+msgstr "kunne ikke oprette scratch-mappe"
+
+msgid "failed to drop privileges"
+msgstr "kunne ikke afgive rettigheder"
+
+msgid "Couldn't get file context"
+msgstr "Kunne ikke indhente filkontekst"
+
+msgid "setfscreatecon () failed"
+msgstr "setfscreatecon () mislykkedes"
+
+msgid "failed to gain privileges"
+msgstr "kunne ikke opnå rettigheder"
+
+msgid "Couldn't lock file"
+msgstr "Kunne ikke låse filen"
+
+msgid "Couldn't make backup"
+msgstr "Kunne ikke lave sikkerhedskopi"
+
+#, 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 afsluttede med status %d"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+msgid "failed to open scratch file"
+msgstr "kunne ikke åbne scratch-fil"
+
+msgid "failed to unlink scratch file"
+msgstr "kunne ikke fjerne henvisning for scratch-fil"
+
+msgid "failed to stat edited file"
+msgstr "kunne ikke stat redigeret fil"
+
+msgid "failed to allocate memory"
+msgstr "kunne ikke tildele hukommelse"
+
+msgid "failed to create backup file"
+msgstr "kunne ikke oprette sikkerhedskopifil"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: Kan ikke gendanne %s: %s (dine ændringer er i %s)\n"
+
+#, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: Kunne ikke finde tcb-mappe for %s\n"
diff --git a/po/de.gmo b/po/de.gmo
new file mode 100644
index 0000000..7c8dd17
--- /dev/null
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 0000000..3d926f0
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,2999 @@
+# shadow de.po
+# Copyright (C) 1999 Free Software Foundation, Inc.
+# Frank Schmid <frank@cs-schmid.de>, 2002
+# Holger Wansing <linux@wansing-online.de>, 2006, 2008, 2009, 2011, 2012, 2014.
+# Patches, suggestions, etc welcome.
+#
+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: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2014-07-27 23:06+0200\n"
+"Last-Translator: Holger Wansing <hwansing@mailbox.org>\n"
+"Language-Team: German <debian-l10n-german@lists.debian.org>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"Mehrere Einträge namens »%s« in %s. Bitte beheben Sie dies mit pwck oder "
+"grpck.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "Verschlüsselungsmethode von libcrypt nicht unterstützt? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr "Konfigurationsfehler - Wert für %s kann nicht ausgewertet werden: »%s«"
+
+msgid "Could not allocate space for config info.\n"
+msgstr ""
+"Es konnte kein Speicherplatz für Konfigurationsinformationen reserviert "
+"werden.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"Konfigurationsfehler - Element »%s« unbekannt (Administrator verständigen).\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr "%s: nscd wurde nicht normal beendet (Signal %d)\n"
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr "%s: nscd wurde mit Status %d beendet\n"
+
+msgid "Password: "
+msgstr "Passwort: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Passwort von %s: "
+
+#, fuzzy
+#| msgid "Cannot open audit interface - aborting.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "Audit-Schnittstelle konnte nicht geöffnet werden - Abbruch.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr "[libsemanage]: %s\n"
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr "SELinux-Management-Handhabung kann nicht erstellt werden\n"
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr "SELinux-Richtlinie nicht verwaltet\n"
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr "SELinux-Richtlinien-Speicher kann nicht gelesen werden\n"
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr "SELinux-Management-Verbindung kann nicht aufgebaut werden\n"
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr "SELinux-Vorgang kann nicht gestartet werden\n"
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr "seuser für %s konnte nicht abgefragt werden\n"
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr "serange für %s konnte nicht gesetzt werden\n"
+
+#, c-format
+msgid "Could not set sename for %s\n"
+msgstr "sename für %s konnte nicht gesetzt werden\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr "Login-Zuordnung für %s konnte nicht verändert werden\n"
+
+#, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "SELinux-Login-Zuordnung für %s kann nicht erstellt werden\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr "Name für %s konnte nicht gesetzt werden\n"
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr "SELinux-Benutzer für %s konnte nicht gesetzt werden\n"
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr "Login-Zuordnung für %s konnte nicht hinzugefügt werden\n"
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr "SELinux-Management kann nicht initialisiert werden\n"
+
+#, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "SELinux-Benutzerschlüssel kann nicht erstellt werden\n"
+
+#, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "SELinux-Benutzer kann nicht verifiziert werden\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr "SELinux-Benutzer-Zuordnung kann nicht verändert werden\n"
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr "SELinux-Benutzer-Zuordnung kann nicht hinzugefügt werden\n"
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr "SELinux-Vorgang kann nicht eingepflegt werden\n"
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+"Login-Zuordnung für %s ist nicht definiert; dies ist OK, falls die Standard-"
+"Zuordnung verwendet wurde\n"
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+"Login-Zuordnung für %s ist in der Richtlinie definiert, kann nicht gelöscht "
+"werden\n"
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr "Login-Zuordnung für %s konnte nicht gelöscht werden"
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: Speicher erschöpft\n"
+
+#, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: %s kann nicht mit stat abgefragt werden: %s\n"
+
+#, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: %s ist weder ein Verzeichnis noch eine symbolische Verknüpfung.\n"
+
+#, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: Symbolische Verknüpfung %s kann nicht gelesen werden: %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr "%s: Verdächtig lange symbolische Verknüpfung: %s\n"
+
+#, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: Verzeichnis %s kann nicht erstellt werden: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: Eigentümer von %s kann nicht geändert werden: %s\n"
+
+#, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: Berechtigungen von %s können nicht geändert werden: %s\n"
+
+#, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: Löschen (unlink): %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: Verzeichnis %s kann nicht entfernt werden: %s\n"
+
+#, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: %s kann nicht in %s umbenannt werden: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: %s kann nicht entfernt werden: %s\n"
+
+#, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: Symbolische Verknüpfung %s kann nicht erstellt werden: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: Eigentümer von %s können nicht geändert werden: %s\n"
+
+#, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: %s kann nicht mit lstat abgefragt werden: %s\n"
+
+#, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: Warnung: Benutzer %s hat keine tcb-shadow-Datei.\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+"%s: Ernstes Problem: %ss tcb-shadow ist keine reguläre Datei mit "
+"st_nlink=1.\n"
+"Der Benutzerzugang bleibt gesperrt.\n"
+
+#, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: mkdir (Verzeichnis erstellen): %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: %s kann nicht geöffnet werden: %s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Warnung: unbekannte Gruppe %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Warnung: zu viele Gruppen\n"
+
+msgid "Your password has expired."
+msgstr "Ihr Passwort ist abgelaufen."
+
+msgid "Your password is inactive."
+msgstr "Ihr Passwort ist inaktiv."
+
+msgid "Your login has expired."
+msgstr "Ihr Benutzerzugang ist abgelaufen."
+
+msgid " Contact the system administrator."
+msgstr " Verständigen Sie den Systemadministrator."
+
+msgid " Choose a new password."
+msgstr " Wählen Sie ein neues Passwort."
+
+msgid "You must change your password."
+msgstr "Sie müssen Ihr Passwort ändern."
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Ihr Passwort läuft in %ld Tagen ab.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Ihr Passwort läuft morgen ab."
+
+msgid "Your password will expire today."
+msgstr "Ihr Passwort läuft heute ab."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "Audit-Schnittstelle konnte nicht geöffnet werden - Abbruch.\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Eigentümer oder Modus von tty stdin kann nicht geändert werden: %s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: Entsperren von %s fehlgeschlagen\n"
+
+#, c-format
+msgid "%s: "
+msgstr "%s: "
+
+msgid ": "
+msgstr ": "
+
+msgid "Environment overflow\n"
+msgstr "Umgebungsüberlauf\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Sie dürfen $%s nicht ändern.\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d Fehlversuch seit letzter Anmeldung.\n"
+"Der letzte war am %s auf %s.\n"
+msgstr[1] ""
+"%d Fehlversuche seit letzter Anmeldung.\n"
+"Der letzte war am %s auf %s.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: Ungültige Konfiguration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr "%s: Ungültige Konfiguration: GID_MIN (%lu), GID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "%s: Speicherreservierung fehlgeschlagen: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr "%s: Keine einmalige System-GID bekommen (keine GIDs mehr verfügbar)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: Keine einmalige GID bekommen (keine GIDs mehr verfügbar)\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: Keine einmalige GID bekommen (keine GIDs mehr verfügbar)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+"%s: Ungültige Konfiguration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: Benutzer kann nicht erstellt werden\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+"%s: Ungültige Konfiguration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: Benutzer kann nicht erstellt werden\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: Ungültige Konfiguration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr "%s: Ungültige Konfiguration: UID_MIN (%lu), UID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr "%s: Keine einmalige System-UID bekommen (keine UIDs mehr verfügbar)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: Keine einmalige UID bekommen (keine UIDs mehr verfügbar)\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: Keine einmalige UID bekommen (keine UIDs mehr verfügbar)\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Authentication failure\n"
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: Authentifizierung fehlgeschlagen\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: Ungültiges Feld »%s«\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Could not set name for %s\n"
+msgid "%s: Could not seteuid to %d\n"
+msgstr "Name für %s konnte nicht gesetzt werden\n"
+
+#, fuzzy, c-format
+#| msgid "Could not set name for %s\n"
+msgid "%s: Could not set caps\n"
+msgstr "Name für %s konnte nicht gesetzt werden\n"
+
+#, c-format
+msgid "%s: snprintf failed!\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: Zeile %d: chown %s (Eigentümer ändern) fehlgeschlagen: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: Zeile %d: chown %s (Eigentümer ändern) fehlgeschlagen: %s\n"
+
+msgid "Too many logins.\n"
+msgstr "Zu viele Anmeldungen.\n"
+
+msgid "You have new mail."
+msgstr "Neue E-Mails vorhanden."
+
+msgid "No mail."
+msgstr "Keine E-Mails vorhanden."
+
+msgid "You have mail."
+msgstr "E-Mails vorhanden."
+
+msgid "no change"
+msgstr "keine Änderungen"
+
+msgid "a palindrome"
+msgstr "ein Palindrom"
+
+msgid "case changes only"
+msgstr "nur Änderungen bei Groß-/Kleinschreibung"
+
+msgid "too similar"
+msgstr "zu ähnlich"
+
+msgid "too simple"
+msgstr "zu einfach"
+
+msgid "rotated"
+msgstr "rotiert"
+
+msgid "too short"
+msgstr "zu kurz"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Schlechtes Passwort: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() fehlgeschlagen, Fehler %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+msgid "passwd: password unchanged\n"
+msgstr "passwd: Passwort nicht geändert\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: Passwort erfolgreich geändert\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: Repository %s nicht unterstützt\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start: Fehler %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd: pam_start() fehlgeschlagen, Fehler %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Falsches Passwort für %s.\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr "%s: mehrfache »--root«-Optionen\n"
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr "%s: Option »%s« erfordert ein Argument\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: Fehler beim Entfernen der Privilegien (%s)\n"
+
+#, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: Ungültiger chroot-Pfad »%s«\n"
+
+#, c-format
+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"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"Ungültiger Wert für ENCRYPT_METHOD: »%s«.\n"
+"Standard DES wird gewählt.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Es konnte nicht in das Verzeichnis »%s« gewechselt werden.\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Kein Verzeichnis, Anmeldung mit HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "%s konnte nicht ausgeführt werden"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Ungültiges root-Verzeichnis »%s«\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "root-Verzeichnis kann nicht auf »%s« geändert werden.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user '%s' does not exist in %s\n"
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: Benutzer »%s« ist in %s nicht vorhanden.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user '%s' is not a member of '%s'\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: Benutzer »%s« ist kein Mitglied von »%s«.\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Ihr tty-Name konnte nicht festgestellt werden."
+
+msgid "No"
+msgstr "Nein"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Aufruf: %s [Optionen] BENUTZERZUGANG\n"
+"\n"
+"Optionen:\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+" -d, --lastday LETZTER_TAG Tag der letzten Passwortänderung auf\n"
+" LETZTER_TAG setzen\n"
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -E, --expiredate ABL_DATUM Ablaufdatum des Benutzerzugangs auf\n"
+" ABL_DATUM setzen\n"
+
+msgid " -h, --help display this help message and exit\n"
+msgstr " -h, --help Diese Hilfe anzeigen, sonst nichts\n"
+
+#, fuzzy
+#| msgid " -g, --group edit group database\n"
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr " -g, --group Gruppen-Datenbank editieren\n"
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -I, --inactive INAKTIV Passwort nach Ablauf von INAKTIV\n"
+" deaktivieren\n"
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+" -l, --list Informationen zu Ablaufdaten usw. anzeigen\n"
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+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 maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -M, --maxdays MAX_TAGE Maximale Anzahl der Tage vor\n"
+" Passwortänderung auf MAX_TAGE setzen\n"
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr " -R, --root CHROOT_VERZ Verzeichnis für chroot\n"
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -W, --warndays WARN_TAGE Anzahl der Tage für Ablaufwarnung auf\n"
+" WARN_TAGE setzen\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr ""
+"Geben Sie einen neuen Wert an oder drücken Sie ENTER für den Standardwert"
+
+msgid "Minimum Password Age"
+msgstr "Minimales Passwortalter"
+
+msgid "Maximum Password Age"
+msgstr "Maximales Passwortalter"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Letzte Passwortänderung (JJJJ-MM-TT)"
+
+msgid "Password Expiration Warning"
+msgstr "Passwortablaufwarnung"
+
+msgid "Password Inactive"
+msgstr "Passwort inaktiv"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Ablaufdatum des Benutzerzugangs (JJJJ-MM-TT)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Letzte Passwortänderung\t\t\t\t\t: "
+
+msgid "never"
+msgstr "nie"
+
+msgid "password must be changed"
+msgstr "Passwort muss geändert werden"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Passwort läuft ab\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Passwort inaktiv\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Benutzerzugang läuft ab\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Minimale Anzahl der Tage zwischen Passwortänderungen\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Maximale Anzahl der Tage zwischen Passwortänderungen\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Anzahl Tage, an denen vor Passwortablauf gewarnt wird\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: Ungültiges Datum »%s«\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: Ungültiges numerisches Argument »%s«\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: benutzen Sie »l« nicht mit anderen Optionen.\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Erlaubnis verweigert.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Ihr Benutzername konnte nicht bestimmt werden.\n"
+
+#, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: PAM: %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr ""
+"%s: %s konnte nicht gesperrt werden; versuchen Sie es später noch einmal.\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: %s konnte nicht geöffnet werden.\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: Fehler beim Schreiben der Änderungen nach %s\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: Vorbereiten des neuen %s-Eintrags »%s« fehlgeschlagen.\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: shadow-Passwortdatei ist nicht vorhanden.\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: Benutzer »%s« ist in %s nicht vorhanden.\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Passwortalterung für %s wird geändert.\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: Fehler beim Ändern der Felder\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Aufruf: %s [Optionen] [BENUTZERZUGANG]\n"
+"\n"
+"Optionen:\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr " -f, --full-name VOLLST_NAME Vollständigen Benutzernamen ändern\n"
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+" -h, --home-phone TEL_PRIVAT Private Telefonnummer des Benutzers ändern\n"
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+" -o, --other SONSTIGE_INFO Sonst. GECOS-Information des Benutzers "
+"ändern\n"
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr " -r, --room ZIMMERNUMMER Zimmernummer des Benutzers ändern\n"
+
+msgid " -u, --help display this help message and exit\n"
+msgstr " -u, --help Diese Hilfe anzeigen, sonst nichts\n"
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+" -w, --work-phone TEL_GESCH Geschäftl. Telefonnummer des Benutzers "
+"ändern\n"
+
+msgid "Full Name"
+msgstr "Vollständiger Name"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "Zimmernummer"
+
+msgid "Work Phone"
+msgstr "Telefon geschäftlich"
+
+msgid "Home Phone"
+msgstr "Telefon privat"
+
+msgid "Other"
+msgstr "Sonstiges"
+
+msgid "Cannot change ID to root.\n"
+msgstr "ID konnte nicht auf root geändert werden.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: Name mit Zeichen, die nicht zum ASCII-Zeichensatz gehören: »%s«\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: Ungültiger Name: »%s«\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+"%s: Zimmernummer mit Zeichen, die nicht zum ASCII-Zeichensatz gehören: »%s«\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: Ungültige Zimmernummer: »%s«\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: Ungültige Telefon-Nr. (geschäftlich): »%s«\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: Ungültige Telefon-Nr. (privat): »%s«\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: »%s« enthält Zeichen, die nicht zum ASCII-Zeichensatz gehören.\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: »%s« enthält ungültige Zeichen.\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: Benutzer »%s« ist nicht vorhanden.\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: Benutzer »%s« auf dem NIS-Client konnte nicht geändert werden.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: »%s« ist der NIS-Master für diesen Client.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Benutzerinformationen für %s werden geändert.\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: Felder zu lang\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Aufruf: %s [Optionen]\n"
+"\n"
+"Optionen:\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr ""
+" -c, --crypt-method METHODE Verschlüsselungsmethode (eine der\n"
+" folgenden: %s)\n"
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+" -e, --encrypted Angegebene Passwörter sind verschlüsselt\n"
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+" -m, --md5 Die Klartext-Passwörter mittels MD5-\n"
+" Algorithmus verschlüsseln\n"
+
+#, fuzzy
+#| msgid ""
+#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
+#| " crypt algorithms\n"
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+" -s, --sha-rounds Anzahl der SHA-Runden für den SHA*-\n"
+" Verschlüsselungs-Algorithmus\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: %s ist nur zusammen mit %s erlaubt.\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: -c, -e und -m können nur exklusiv genutzt werden.\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: Nicht unterstützte Verschlüsselungsmethode: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: Zeile %d: Zeile zu lang\n"
+
+#, c-format
+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"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: Zeile %d: Neuer %s-Eintrag »%s« konnte nicht vorbereitet werden.\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: Fehler entdeckt, Änderungen verworfen\n"
+
+#, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: (Zeile %d, Benutzer %s) Passwort nicht geändert\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: Zeile %d: Benutzer »%s« ist nicht vorhanden.\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+" -s, --shell SHELL Neue Login-Shell für den Benutzerzugang\n"
+
+msgid "Login Shell"
+msgstr "Login-Shell"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Sie dürfen die Shell für »%s« nicht ändern.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Login-Shell für %s wird geändert.\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Ungültiger Eintrag: %s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s: %s ist eine ungültige Shell\n"
+
+#, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: Warnung: %s ist nicht vorhanden.\n"
+
+#, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: Warnung: %s nicht ausführbar.\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+" -c, --check Ablauf des Benutzerpassworts überprüfen\n"
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+" -f, --force Passwortänderung erzwingen, wenn das "
+"Benutzer-\n"
+" passwort abgelaufen ist\n"
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: Optionen %s und %s stehen im Konflikt zueinander.\n"
+
+#, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "%s: Unerwartetes Argument: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+" -a, --all Aufzeichnungen fehlgeschlagener Anmeldungen\n"
+" für alle Benutzer anzeigen\n"
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+" -l, --lock-time SEK Den Benutzerzugang nach fehlgeschlagener\n"
+" Anmeldung für SEK Sekunden sperren\n"
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+" -m, --maximum MAX Maximal mögliche Anzahl fehlgeschlagener\n"
+" Anmeldungen auf MAX setzen\n"
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+" -r, --reset Zähler fehlgeschlagener Anmeldungen\n"
+" zurücksetzen\n"
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time TAGE Aufzeichnungen fehlgeschlagener Anmeldungen\n"
+" anzeigen, die jünger als TAGE sind\n"
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+" -u, --user BENUTZERZUGANG/ Aufzeichnungen fehlgeschlagener Anmeldungen\n"
+" BEREICH anzeigen bzw. Verwalten von Zählern und Be-\n"
+" schränkungen (falls mit Optionen -r, -m "
+"oder\n"
+" -l aufgerufen) nur für BENUTZERZUGANG\n"
+
+#, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: Auslesen des Eintrags für UID %lu fehlgeschlagen\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "Login Fehlver. Maximum Letzter Auf\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr " [%lus übrig]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds Sperre]"
+
+#, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr ""
+"%s: Zurücksetzen des Zählers fehlgeschlagener Anmeldungen für UID %lu "
+"fehlgeschlagen\n"
+
+#, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: Setzen des Max-Werts für UID %lu fehlgeschlagen\n"
+
+#, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: Setzen der Sperrzeit für UID %lu fehlgeschlagen\n"
+
+#, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "%s: Unbekannter Benutzer oder Bereich: %s\n"
+
+#, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: Auslesen der Größe von %s fehlgeschlagen: %s\n"
+
+#, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: Schreiben von %s fehlgeschlagen: %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Aufruf: %s [Option] GRUPPE\n"
+"\n"
+"Optionen:\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr " -a, --add BENUTZER BENUTZER zu GRUPPE hinzufügen\n"
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr " -d, --delete BENUTZER BENUTZER aus GRUPPE entfernen\n"
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr " -Q, --root CHROOT_VERZ Verzeichnis für chroot\n"
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr " -r, --remove-password Passwort der GRUPPE entfernen\n"
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+" -R, --restrict Zugriff zu GRUPPE auf ihre Mitglieder\n"
+" beschränken\n"
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+" -M, --members BENUTZER,... Liste der Mitglieder von GRUPPE setzen\n"
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+" -A, --administrators ADMIN,...\n"
+" Liste der Administratoren für GRUPPE setzen\n"
+
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "Außer für -A und -M können die Optionen nicht kombiniert werden.\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "Die Optionen können nicht kombiniert werden.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: shadow-Gruppenpasswörter für -A erforderlich\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: Gruppe »%s« existiert nicht in %s.\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: Fehler beim Schließen von %s im Nur-Lese-Modus\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Passwort für die Gruppe %s wird geändert.\n"
+
+msgid "New Password: "
+msgstr "Neues Passwort: "
+
+msgid "Re-enter new password: "
+msgstr "Passwort wiederholen: "
+
+msgid "They don't match; try again"
+msgstr "Keine Übereinstimmung; versuchen Sie es noch einmal."
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Versuchen Sie es später noch einmal.\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Benutzer %s wird zur Gruppe %s hinzugefügt.\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Benutzer %s wird aus der Gruppe %s entfernt.\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: Benutzer »%s« ist kein Mitglied von »%s«.\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Kein tty\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Aufruf: %s [Optionen] GRUPPE\n"
+"\n"
+"Optionen:\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+" -f, --force Ohne Fehler beenden, falls die Gruppe\n"
+" bereits existiert\n"
+" und Operation für -g abbrechen, falls die\n"
+" GID bereits verwendet wird\n"
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr " -g, --gid GID GID für die neue Gruppe benutzen\n"
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+" -K, --key SCHLÜSSEL=WERT Die Vorgabewerte in /etc/login.defs\n"
+" überschreiben\n"
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique Erstellen einer Gruppe mit nicht\n"
+" einmaliger (doppelter) GID erlauben\n"
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+" -p, --password PASSWORT Dieses verschlüsselte PASSWORT für die\n"
+" neue Gruppe verwenden\n"
+
+msgid " -r, --system create a system account\n"
+msgstr " -r, --system Eine Systemgruppe erstellen\n"
+
+#, fuzzy
+#| msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr " -R, --root CHROOT_VERZ Verzeichnis für chroot\n"
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: »%s« ist kein gültiger Gruppenname.\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: Ungültige Gruppen-ID »%s«\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K erfordert SCHLÜSSEL=WERT\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: Gruppe »%s« existiert bereits.\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s: GID »%lu« existiert bereits.\n"
+
+#, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: Ihr Benutzername konnte nicht bestimmt werden.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+#, 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"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: Primäre Gruppe des Benutzers »%s« konnte nicht entfernt werden.\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: Gruppe »%s« existiert nicht.\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: Gruppe »%s« ist eine NIS-Gruppe.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s ist der NIS-Master.\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: Benutzer »%s« ist bereits ein Mitglied von »%s«.\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: Zu wenig Speicher. %s kann nicht aktualisiert werden.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Aufruf: %s [Optionen [Aktion]\n"
+"\n"
+"Optionen:\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+" -g, --group Gruppenname Gruppenname ändern statt der Gruppe des\n"
+" Benutzers (nur root)\n"
+
+msgid "\n"
+msgstr "\n"
+
+msgid "Actions:\n"
+msgstr "Aktionen:\n"
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+" -a, --add Benutzername Benutzername zu den Mitgliedern der Gruppe\n"
+" hinzufügen\n"
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+" -d, --delete Benutzername Benutzername aus der Liste der Gruppen-\n"
+" mitglieder entfernen\n"
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr ""
+" -p, --purge Alle Mitglieder aus der Gruppe entfernen\n"
+
+msgid " -l, --list list the members of the group\n"
+msgstr " -l, --list Die Mitglieder der Gruppe auflisten\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: Ihr Gruppenname passt nicht zu Ihrem Benutzername.\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s: Nur root kann die Option -g/--group nutzen.\n"
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr " -g, --gid GID Die Gruppen-ID auf GID ändern\n"
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr ""
+" -n, --new-name NEUE_GRUPPE Den Gruppennamen auf NEUE_GRUPPE ändern\n"
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique Verwenden einer nicht einmaligen "
+"(doppelten)\n"
+" GID erlauben\n"
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+" -p, --password PASSWORT Das Passwort auf dieses (verschlüsselte)\n"
+" PASSWORT ändern\n"
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: Ungültiger Gruppenname »%s«\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: Gruppe %s ist eine NIS-Gruppe.\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: Unbekannter Benutzer %s\n"
+
+# NOTE: group is a file (/etc/group)
+#, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Aufruf: %s [Optionen] [Gruppe [gshadow]]\n"
+"\n"
+"Optionen:\n"
+
+# NOTE: group is a file (/etc/group)
+#, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Aufruf: %s [Optionen] [Gruppe]\n"
+"\n"
+"Optionen:\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+" -r, --read-only Fehler und Warnungen anzeigen,\n"
+" aber keine Dateien verändern\n"
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr " -s, --sort Einträge nach UID sortieren\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s und -r sind nicht kompatibel.\n"
+
+msgid "invalid group file entry"
+msgstr "Ungültiger Eintrag in group-Datei"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "Zeile »%s« löschen?"
+
+msgid "duplicate group entry"
+msgstr "Doppelter Gruppeneintrag"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "Ungültiger Gruppenname »%s«\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "Ungültige Gruppen-ID »%lu«\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "Gruppe %s: Kein Benutzer %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "Mitglied »%s« löschen?"
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "Kein passender group-Datei-Eintrag in %s\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "Gruppe »%s« zu %s hinzufügen?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"Für Gruppe %s existiert ein Eintrag in %s, aber ihr Passwort-Feld in %s ist "
+"nicht auf »x« gesetzt\n"
+
+msgid "invalid shadow group file entry"
+msgstr "Ungültiger Eintrag in shadow-group-Datei"
+
+msgid "duplicate shadow group entry"
+msgstr "Doppelter Eintrag für shadow-Gruppe"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "shadow-Gruppe %s: Benutzer %s ist kein Administrator.\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "Administratives Mitglied »%s« löschen? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "shadow-Gruppe %s: Kein Benutzer %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: Die Dateien wurden aktualisiert.\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: Keine Änderungen\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: %s kann nicht gelöscht werden.\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Aufruf: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Aufruf: id\n"
+
+msgid " groups="
+msgstr " Gruppen="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+" -b, --before TAGE Nur lastlog-Aufzeichnungen zeigen, die "
+"ä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"
+msgstr ""
+" -t, --time TAGE Nur lastlog-Aufzeichnungen zeigen, die "
+"jünger\n"
+" als TAGE sind\n"
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+" -u, --user BENUTZERZUGANG lastlog-Eintrag für BENUTZERZUGANG anzeigen\n"
+
+msgid "Username Port From Latest"
+msgstr "Benutzername Port Von Letzter"
+
+msgid "Username Port Latest"
+msgstr "Benutzername Port Letzter"
+
+msgid "**Never logged in**"
+msgstr "**Noch nie angemeldet**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, 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"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, 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"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h Rechner] [-f Name]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r Rechner\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr "Konfigurationsfehler - Wert für %s kann nicht ausgewertet werden: »%d«"
+
+msgid "Invalid login time"
+msgstr "Ungültige Login-Zeit"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"System wegen planmäßigen Wartungsarbeiten geschlossen"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+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"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Login nach %u Sekunden wegen\n"
+"Zeitüberschreitung abgebrochen.\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM-Fehler, Abbruch: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s Login: "
+
+msgid "login: "
+msgstr "login: "
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Maximale Anzahl der Versuche überschritten (%u)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: Abbruch durch PAM angefordert\n"
+
+msgid "Login incorrect"
+msgstr "Login fehlerhaft"
+
+#, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "Benutzer kann nicht gefunden werden (%s)\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s Login: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: Fehler bei Prozessaufspaltung (fork): %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSCTTY auf %s fehlgeschlagen"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Warnung: Login nach temporärer Sperre reaktiviert."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Letztes Login: %s auf %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Letztes Login: %.19s auf %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " von %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"Login-Zeit überschritten\n"
+"\n"
+
+msgid "Usage: logoutd\n"
+msgstr "Aufruf: logoutd\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, c-format
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: Entfernen von %s fehlgeschlagen\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: Entfernen von %s fehlgeschlagen\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to unlock %s\n"
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: Entsperren von %s fehlgeschlagen\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to find tcb directory for %s\n"
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: tcb-Verzeichnis für %s konnte nicht gefunden werden\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Failed to create tcb directory for %s\n"
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: Erstellen des tcb-Verzeichnisses für %s fehlgeschlagen\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+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"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: Fehler bei Prozessaufspaltung (fork): %s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: GID »%lu« existiert nicht.\n"
+
+msgid "too many groups\n"
+msgstr "zu viele Gruppen\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+#, fuzzy
+#| msgid " -q, --quiet quiet mode\n"
+msgid " -b, --badnames allow bad names\n"
+msgstr " -q, --quiet Nicht so geschwätzig verhalten\n"
+
+msgid " -r, --system create system accounts\n"
+msgstr " -r, --system Systemzugänge erzeugen\n"
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr ""
+"%s: Gruppe »%s« ist eine shadow-Gruppe, existiert aber nicht in /etc/group.\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: Ungültige Benutzer-ID »%s«\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: Ungültiger Benutzername »%s«\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: Zeile %d: Ungültige Zeile\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: Eintrag für Benutzer %s kann nicht aktualisiert werden (ist nicht in der "
+"passwd-Datenbank).\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: Zeile %d: Benutzer kann nicht erstellt werden.\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: Zeile %d: Gruppe kann nicht erstellt werden.\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: Zeile %d: Benutzer »%s« existiert nicht in %s.\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: Zeile %d: Passwort kann nicht aktualisiert werden.\n"
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: Zeile %d: mkdir %s (Verzeichnis erstellen) fehlgeschlagen: %s\n"
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: Zeile %d: chown %s (Eigentümer ändern) fehlgeschlagen: %s\n"
+
+#, c-format
+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 ""
+" -a, --all Passwort-Status für alle Benutzerzugänge\n"
+" anzeigen\n"
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+" -d, --delete Passwort für den Benutzerzugang löschen\n"
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+" -e, --expire Ablauf des Passworts für den Benutzerzugang\n"
+" erzwingen\n"
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr " -k, --keep-tokens Passwort nur ändern falls abgelaufen\n"
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -i, --inactive INAKTIV Passwort nach Ablauf von INAKTIV\n"
+" deaktivieren\n"
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr " -l, --lock Benutzerzugang sperren\n"
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -n, --mindays MIN_TAGE Minimale Anzahl der Tage vor\n"
+" Passwortänderung auf MIN_TAGE setzen\n"
+
+msgid " -q, --quiet quiet mode\n"
+msgstr " -q, --quiet Nicht so geschwätzig verhalten\n"
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr " -r, --repository REPOSITORY Passwort ändern in REPOSITORY\n"
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+" -S, --status Passwort-Status des Benutzerzugangs "
+"anzeigen\n"
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr " -u, --unlock Benutzerzugang entsperren\n"
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -w, --warndays WARN_TAGE Anzahl der Tage für Ablaufwarnung auf\n"
+" WARN_TAGE setzen\n"
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -x, --maxdays MAX_TAGE Maximale Anzahl der Tage vor\n"
+" Passwortänderung auf MAX_TAGE setzen\n"
+
+msgid "Old password: "
+msgstr "Altes Passwort: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Geben Sie das neue Passwort ein (mindestens %d Zeichen).\n"
+"Bitte benutzen Sie eine Kombination aus Groß- und Kleinbuchstaben\n"
+"sowie Ziffern.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Geben Sie das neue Passwort ein (mindestens %d, höchstens %d Zeichen).\n"
+"Bitte benutzen Sie eine Kombination aus Groß- und Kleinbuchstaben\n"
+"sowie Ziffern.\n"
+
+msgid "New password: "
+msgstr "Neues Passwort: "
+
+msgid "Try again."
+msgstr "Versuchen Sie es noch einmal."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Warnung: Schwaches Passwort (geben Sie es noch einmal ein,\n"
+"um es trotzdem zu verwenden)."
+
+msgid "They don't match; try again.\n"
+msgstr "Nicht identisch; versuchen Sie es noch einmal.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Das Passwort für %s kann nicht geändert werden.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Das Passwort für %s kann noch nicht geändert werden.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: Das Passwort zu entsperren würde zu einem Benutzerzugang ohne\n"
+"Passwort führen. Sie sollten mit usermod -p ein Passwort setzen, um das\n"
+"Passwort für diesen Benutzerzugang zu entsperren.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: Repository %s nicht unterstützt\n"
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not authorized to change the password of %s\n"
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr "%s: %s ist nicht berechtigt, das Passwort von %s zu ändern.\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr ""
+"%s: Sie dürfen die Passwortinformationen für %s nicht anzeigen oder ändern.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Passwort für %s wird geändert.\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Das Passwort für %s wurde nicht geändert.\n"
+
+#, c-format
+msgid "%s: password changed.\n"
+msgstr "%s: Passwort geändert.\n"
+
+#, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "%s: Passwortablauf-Informationen geändert.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Aufruf: %s [Optionen] [Passwort]\n"
+"\n"
+"Optionen:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Aufruf: %s [Optionen] [Passwort [shadow]]\n"
+"\n"
+"Optionen:\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr " -q, --quiet Nur Fehler melden\n"
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+"%s: keine alternative shadow-Datei erlaubt, wenn USE_TCB aktiviert ist.\n"
+
+msgid "invalid password file entry"
+msgstr "Ungültiger Eintrag in Passwortdatei"
+
+msgid "duplicate password entry"
+msgstr "Doppelter Passworteintrag"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "Ungültiger Benutzername »%s«\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "Ungültige Benutzer-ID »%lu«\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "Benutzer »%s«: Keine Gruppe %lu\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "Benutzer »%s«: Verzeichnis »%s« existiert nicht.\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "Benutzer »%s«: Programm »%s« existiert nicht.\n"
+
+#, c-format
+msgid "no tcb directory for %s\n"
+msgstr "kein tcb-Verzeichnis für %s\n"
+
+#, c-format
+msgid "create tcb directory for %s?"
+msgstr "tcb-Verzeichnis für %s erstellen?"
+
+#, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "Erstellen von tcb-Verzeichnis für %s fehlgeschlagen\n"
+
+#, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: %s kann nicht gesperrt werden.\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "Kein passender Passwortdatei-Eintrag in %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "Benutzer »%s« zu %s hinzufügen? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"Für Benutzer %s existiert ein Eintrag in %s, aber sein Passwort-Feld in %s "
+"ist nicht auf »x« gesetzt.\n"
+
+msgid "invalid shadow password file entry"
+msgstr "Ungültiger shadow-Passwortdatei-Eintrag"
+
+msgid "duplicate shadow password entry"
+msgstr "Doppelter shadow-Passwort-Eintrag"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "Benutzer %s: Letzte Passwortänderung liegt in der Zukunft.\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: Einträge in %s können nicht sortiert werden.\n"
+
+#, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: Arbeit mit aktivierter tcb-Funktionalität nicht möglich\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: Änderung des Modus' von %s auf 0600 fehlgeschlagen\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Zugriff mit su zu diesem Benutzerzugang VERWEIGERT.\n"
+
+msgid "Password authentication bypassed.\n"
+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"
+
+#, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: Prozessaufspaltung (fork) für Benutzer-Shell nicht möglich\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr "%s: Signal-Fehlfunktion\n"
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr "%s: Signalmaskierungs-Fehlfunktion\n"
+
+msgid "Session terminated, terminating shell..."
+msgstr "Sitzung abgebrochen, Shell wird beendet ..."
+
+#, c-format
+msgid " ...killed.\n"
+msgstr " ... abgeschossen.\n"
+
+#, c-format
+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"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: su [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
+#| " -h, --help display this help message and exit\n"
+#| " -, -l, --login make the shell a login shell\n"
+#| " -m, -p,\n"
+#| " --preserve-environment do not reset environment variables, and\n"
+#| " keep the same shell\n"
+#| " -s, --shell SHELL use SHELL instead of the default in "
+#| "passwd\n"
+#| "\n"
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"Aufruf: su [Optionen] [BENUTZERZUGANG]\n"
+"\n"
+"Optionen:\n"
+" -c, --command BEFEHL BEFEHL an aufgerufene Shell weiterleiten\n"
+" -h, --help Diese Hilfe anzeigen, sonst nichts\n"
+" -, -l, --login Die Shell als Login-Shell starten\n"
+" -m, -p,\n"
+" --preserve-environment Umgebungsvariablen nicht zurücksetzen und\n"
+" die Shell beibehalten\n"
+" -s, --shell SHELL SHELL anstatt der Vorgabe aus passwd\n"
+" benutzen\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ignoriert)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "su %s ist Ihnen nicht erlaubt.\n"
+
+msgid "(Enter your own password)"
+msgstr "(Geben Sie Ihr eigenes Passwort ein)"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: Authentifizierung fehlgeschlagen\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s: su ist Ihnen derzeit nicht erlaubt.\n"
+
+#, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "Kein Passworteintrag für Benutzer »%s«\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: Muss von einem Terminal gestartet werden.\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: Fehler %d\n"
+
+#, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: Das kontrollierende Terminal kann nicht abgebrochen werden\n"
+
+#, c-format
+msgid "Cannot execute %s\n"
+msgstr "%s konnte nicht ausgeführt werden\n"
+
+msgid "No password file"
+msgstr "Keine Passwortdatei"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY fehlgeschlagen"
+
+msgid "No password entry for 'root'"
+msgstr "Kein Passworteintrag für »root«"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Geben Sie Strg-D ein, um mit dem normalen Startvorgang fortzufahren\n"
+"(oder geben Sie zur Systemwartung das root-Passwort ein):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Wechsel in den Systemwartungsmodus"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr "%s: %s wurde erstellt, konnte aber nicht entfernt werden\n"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr "%s: die %s-Konfiguration in %s wird ignoriert.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: Neue defaults-Datei kann nicht erzeugt werden.\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: Neue defaults-Datei kann nicht erzeugt werden.\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: Neue defaults-Datei kann nicht geöffnet werden.\n"
+
+#, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: Zeile zu lang in %s: %s..."
+
+#, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: Sicherungsdatei kann nicht erstellt werden (%s): %s\n"
+
+#, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: Umbenennen: %s: %s\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: Die Gruppe »%s« ist eine NIS-Gruppe.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: Zu viele Gruppen angegeben (max. %d).\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Aufruf: %s [Optionen] BENUTZERZUGANG\n"
+" %s -D\n"
+" %s -D [Optionen]\n"
+"\n"
+"Optionen:\n"
+
+#, fuzzy
+#| msgid " -s, --shadow edit shadow or gshadow database\n"
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+" -s, --shadow shadow- oder gshadow-Datenbank editieren\n"
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+" -b, --base-dir BASIS_VERZ Basisverzeichnis für das\n"
+" Home-Verzeichnis des neuen Benutzers\n"
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr ""
+" -c, --comment KOMMENTAR KOMMENTAR für das GECOS-Feld des neuen\n"
+" Benutzers\n"
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr " -d, --home-dir HOME_VERZ Home-Verzeichnis des neuen Benutzers\n"
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+" -D, --defaults Anzeigen oder Speichern der modifizierten\n"
+" Standardkonfiguration für useradd\n"
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+" -e, --expiredate ABL_DATUM Das Ablaufdatum des neuen Benutzerzugangs\n"
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+" -f, --inactive INAKTIV Passwort nach Ablauf von INAKTIV "
+"deaktivieren\n"
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+" -g, --gid GRUPPE Name oder ID der primären Gruppe des neuen\n"
+" Benutzerzugangs\n"
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+" -G, --groups GRUPPEN Liste der zusätzlichen Gruppen für den\n"
+" neuen Benutzerzugang\n"
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+" -k, --skel SKEL_VERZ Ein alternatives skeleton-Verzeichnis\n"
+" (Vorlagenverzeichnis) verwenden\n"
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+" -l, --no-log-init Den Benutzer nicht zu den lastlog- und\n"
+" faillog-Datenbanken hinzufügen\n"
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+" -m, --create-home Home-Verzeichnis des neuen Benutzers "
+"erstellen\n"
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+" -M, --no-create-home Kein Home-Verzeichnis für den Benutzer\n"
+" erstellen\n"
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+" -N, --no-user-group Keine Gruppe mit dem gleichen Namen wie dem\n"
+" des Benutzers erstellen\n"
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique Benutzer mit doppelter (nicht einmaliger)\n"
+" UID erlauben\n"
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+" -p, --password PASSWORT Verschlüsseltes Passwort für den neuen\n"
+" Benutzerzugang\n"
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr ""
+" -s, --shell SHELL Die Login-Shell des neuen Benutzerzugangs\n"
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr ""
+" -u, --uid UID Benutzer-ID (UID) des neuen Benutzerzugangs\n"
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+" -U, --user-group Eine Gruppe mit dem gleichen Namen wie dem\n"
+" des Benutzers erstellen\n"
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+" -Z, --selinux-user SEBENUTZER Den Benutzernamen SEBENUTZER für die "
+"SELinux-\n"
+" Benutzer-Zuordnung verwenden\n"
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: Ungültiges Basis-Verzeichnis »%s«\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: Ungültiger Kommentar »%s«\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: Ungültiges Home-Verzeichnis »%s«\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: shadow-Passwörter für -e erforderlich\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: shadow-Passwörter für -f erforderlich\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: Ungültiges Feld »%s«\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: Ungültige Shell »%s«\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Warning: %s is not executable\n"
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: Warnung: %s nicht ausführbar.\n"
+
+#, c-format
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr "%s: -Z erfordert einen Kernel, in dem SELinux aktiviert ist.\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr "%s: Zurücksetzen des faillog-Eintrags für UID %lu fehlgeschlagen: %s\n"
+
+#, c-format
+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 reset the faillog entry of UID %lu: %s\n"
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s: Zurücksetzen des faillog-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"
+
+#, fuzzy, c-format
+#| msgid "%s: error changing fields\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: Fehler beim Ändern der Felder\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: Verzeichnis %s kann nicht erstellt werden.\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s home directory (%s) not found\n"
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: %s-Home-Verzeichnis (%s) nicht gefunden\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to allocate memory: %s\n"
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "%s: Speicherreservierung fehlgeschlagen: %s\n"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: Verzeichnis %s kann nicht erstellt werden.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: Zeile %d: chown %s (Eigentümer ändern) fehlgeschlagen: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: Zeile %d: chown %s (Eigentümer ändern) fehlgeschlagen: %s\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "Erzeugen der Mailbox-Datei"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Gruppe »mail« nicht gefunden. Mailbox-Datei des Benutzers mit Modus 0600 "
+"wird erzeugt.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Zugriffsrechte der Mailboxdatei werden gesetzt"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: Benutzer »%s« existiert bereits\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: Gruppe %s existiert - wenn Sie den Benutzer zur Gruppe hinzufügen\n"
+"möchten, benutzen Sie -g.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: Benutzer kann nicht erstellt werden\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %lu ist nicht einmalig\n"
+
+#, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: Erstellen des tcb-Verzeichnisses für %s fehlgeschlagen\n"
+
+#, c-format
+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"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: Warnung: Das Home-Verzeichnis existiert bereits.\n"
+"Es werden keine Dateien vom skel-Verzeichnis dorthin kopiert.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+"%s: Warnung: Die SELinux-Benutzer-Zuordnung des Benutzernamens %s zu %s ist\n"
+"fehlgeschlagen.\n"
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+" -f, --force Entfernen von Dateien erzwingen, auch wenn\n"
+" sie nicht Eigentum des zu löschenden\n"
+" Benutzers sind\n"
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+" -r, --remove Entferne Home-Verzeichnis und\n"
+" Mail-Warteschlange\n"
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+" -Z, --selinux-user Jede SELinux-Benutzer-Zuordnung für\n"
+" den Benutzer entfernen\n"
+
+#, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr ""
+"%s: Gruppe %s nicht entfernt, da es nicht die primäre Gruppe des Benutzers "
+"%s ist.\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr "%s: Gruppe %s nicht entfernt, da sie noch andere Mitglieder hat.\n"
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+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"
+
+#, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: Warnung: %s kann nicht gelöscht werden: %s\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s nicht im Besitz von %s, wird nicht gelöscht.\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+"%s: Speicher kann nicht reserviert werden, tcb-Eintrag für %s nicht "
+"entfernt.\n"
+
+#, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: Privilegien können nicht entfernt werden: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: Inhalt von %s kann nicht gelöscht werden: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: tcb-Dateien für %s können nicht gelöscht werden: %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: Benutzer %s ist ein NIS-Benutzer.\n"
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: %s-Home-Verzeichnis (%s) nicht gefunden\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: Verzeichnis %s wird nicht gelöscht (würde das Home-Verzeichnis des\n"
+"Benutzers %s löschen).\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: Fehler beim Löschen des Verzeichnisses %s\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: Fehler beim Löschen des Verzeichnisses %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+"%s: Warnung: Die Löschung der SELinux-Benutzer-Zuordnung für Benutzername %s "
+"ist fehlgeschlagen.\n"
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr " -c, --comment KOMMENTAR Neuer KOMMENTAR im GECOS-Feld\n"
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+" -d, --home HOME_DIR Neues Home-Verzeichnis für den Benutzer-\n"
+" zugang\n"
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr " -e, --expiredate ABL_DATUM Ablaufdatum auf ABL_DATUM setzen\n"
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -f, --inactive INAKTIV Passwort nach Ablauf von INAKTIV\n"
+" deaktivieren\n"
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+" -g, --gid GRUPPE Erzwinge GRUPPE als neue primäre Gruppe\n"
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+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"
+" the user from other groups\n"
+msgstr ""
+" -a, --append Benutzer zu zusätzlichen Gruppen "
+"hinzufügen,\n"
+" die mit der Option -G angegeben werden, "
+"ohne\n"
+" ihn dabei aus anderen Gruppen zu entfernen\n"
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr ""
+" -l, --login NEUER_NAME Neuer Wert für den Namen des "
+"Benutzerzugangs\n"
+
+msgid " -L, --lock lock the user account\n"
+msgstr " -L, --lock Den Benutzerzugang sperren\n"
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+" -m, --move-home Den Inhalt des Home-Verzeichnisses an den\n"
+" neuen Ort verschieben (nur mit -d benutzen)\n"
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique Benutzung von doppelter (nicht einmaliger)\n"
+" UID erlauben\n"
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+" -p, --password PASSWORD Ein verschlüsseltes Passwort als neues\n"
+" Passwort verwenden\n"
+
+msgid " -u, --uid UID new UID for the user account\n"
+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"
+msgstr ""
+" -Z, --selinux-user SEUSER neue SELinux-Benutzer-Zuordnung für den\n"
+" Benutzerzugang\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: Das Passwort dieses Benutzer zu entsperren würde zu einem "
+"Benutzerzugang\n"
+"ohne Passwort führen. Sie sollten mit usermod -p ein Passwort setzen, um\n"
+"diesen Benutzerzugang zu entsperren.\n"
+
+#, c-format
+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"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: -L, -p und -U können nur exklusiv genutzt werden.\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: shadow-Passwörter für -e und -f erforderlich\n"
+
+#, c-format
+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"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+"%s: Das vorherige Home-Verzeichnis (%s) war kein Verzeichnis. Es wird nicht "
+"gelöscht und keine Home-Verzeichnisse werden erzeugt.\n"
+
+#, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: Ändern des Eigentümers vom Home-Verzeichnis fehlgeschlagen"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: Warnung: Altes Home-Verzeichnis %s kann nicht komplett gelöscht werden"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: Verzeichnis %s kann nicht in %s umbenannt werden\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: Kopieren des lastlog-Eintrags von Benutzer %lu zu Benutzer %lu "
+"fehlgeschlagen: %s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: Kopieren des faillog-Eintrags von Benutzer %lu zu Benutzer %lu "
+"fehlgeschlagen: %s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: Warnung: %s nicht im Besitz von %s.\n"
+
+msgid "failed to change mailbox owner"
+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 to '%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 to '%s'\n"
+msgstr "%s: Vorbereiten des neuen %s-Eintrags »%s« fehlgeschlagen.\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Sie haben %s verändert.\n"
+"Aus Konsistenzgründen müssen Sie unter Umständen auch %s ändern.\n"
+"Bitte nutzen Sie dazu den Befehl »%s«.\n"
+
+msgid " -g, --group edit group database\n"
+msgstr " -g, --group Gruppen-Datenbank editieren\n"
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr " -p, --passwd passwd-Datenbank editieren\n"
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+" -s, --shadow shadow- oder gshadow-Datenbank editieren\n"
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+" -u, --user Die tcb-shadow-Datei welches Benutzers\n"
+" editiert werden soll\n"
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: Entfernen von %s fehlgeschlagen\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: %s ist unverändert.\n"
+
+msgid "failed to create scratch directory"
+msgstr "Erzeugen des scratch-Verzeichnisses fehlgeschlagen"
+
+msgid "failed to drop privileges"
+msgstr "Entfernen der Privilegien fehlgeschlagen"
+
+msgid "Couldn't get file context"
+msgstr "Dateikontext konnte nicht empfangen werden"
+
+msgid "setfscreatecon () failed"
+msgstr "setfscreatecon () fehlgeschlagen"
+
+msgid "failed to gain privileges"
+msgstr "Anlegen der Privilegien fehlgeschlagen"
+
+msgid "Couldn't lock file"
+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"
+
+msgid "failed to unlink scratch file"
+msgstr "Löschen (unlink) der scratch-Datei fehlgeschlagen"
+
+msgid "failed to stat edited file"
+msgstr "stat-Abfrage der editierten Datei fehlgeschlagen"
+
+msgid "failed to allocate memory"
+msgstr "Speicherreservierung fehlgeschlagen"
+
+msgid "failed to create backup file"
+msgstr "Erzeugen der Sicherungsdatei fehlgeschlagen"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr ""
+"%s: Wiederherstellung von %s fehlgeschlagen: %s\n"
+"(Ihre Änderungen befinden sich in %s)\n"
+
+#, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: tcb-Verzeichnis für %s konnte nicht gefunden werden\n"
diff --git a/po/dz.gmo b/po/dz.gmo
new file mode 100644
index 0000000..bbf42bf
--- /dev/null
+++ b/po/dz.gmo
Binary files differ
diff --git a/po/dz.po b/po/dz.po
new file mode 100644
index 0000000..f3a6c15
--- /dev/null
+++ b/po/dz.po
@@ -0,0 +1,3613 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.17\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2006-06-01 15:28+0530\n"
+"Last-Translator: Jurmey Rabgay <jur_gay@yahoo.com>\n"
+"Language-Team: dzongkha <pgeyleg@dit.gov.bt>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Poedit-Language: dzongkha\n"
+"X-Poedit-Country: bhutan\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "རིམ་སྒྲིག་བརྡ་དོན་གྱི་དོན་ལུ་ བར་སྟོང་སྤྲོད་མ་ཚུགས།\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "རིམ་སྒྲིག་འཚོལ་བ་-མ་ཤེས་པའི་རྣམ་གྲངས་ '%s'(བདག་སྐྱོང་པ་བརྡ་བསྐུལ་འབད་)།\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr ""
+
+msgid "Password: "
+msgstr "ཆོག་ཡིག་:"
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s's ཆོག་ཡིག་:"
+
+#, fuzzy
+#| msgid "Cannot open the password file.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "ཆོག་ཡིག་ཡིག་སྣོད་ ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr ""
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not set sename for %s\n"
+msgstr "རིམ་སྒྲིག་བརྡ་དོན་གྱི་དོན་ལུ་ བར་སྟོང་སྤྲོད་མ་ཚུགས།\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "%s གི་དོན་ལུ་ རྒས་པའི་བརྡ་དོན་བསྒྱུར་བཅོས་འབད་དོ།\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "%s: ཁྱོད་ཀྱི་ལག་ལེན་པའི་མིང་ གཏན་འབེབས་བཟོ་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "%s: གྲལ་ཐིག་ %d:ལག་ལེན་པ་ %sའཚོལ་མི་ཚུགས།\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: དྲན་ཚད་ལས་བརྒལ་བ།\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: ཡིག་སྣོད་ %sའདི་ དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: ནུས་མེད་ཁྱིམ་གྱི་སྣོད་ཐོ་ '%s'།\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: སྣོད་ཐོ་ %s འདི་ %s ལུ་ བསྐྱར་མིང་བཏགས་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: ཉེན་བརྡ་:རྩ་བསྐྲད་གཏང་མི་ཚུགས།"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: ཉེན་བརྡ་:རྩ་བསྐྲད་གཏང་མི་ཚུགས།"
+
+#, fuzzy, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: བསྐྱར་མིང་བཏགས་:%s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: སྣོད་ཐོ་ %s འདི་ %s ལུ་ བསྐྱར་མིང་བཏགས་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: སྣོད་ཐོ་ %s འདི་ %s ལུ་ བསྐྱར་མིང་བཏགས་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: ཉེན་བརྡ་:རྩ་བསྐྲད་གཏང་མི་ཚུགས།"
+
+#, fuzzy, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: ཉེན་བརྡ་:རྩ་བསྐྲད་གཏང་མི་ཚུགས།"
+
+#, fuzzy, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: ཡིག་སྣོད་ %sའདི་ དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: གྱིབ་མའི་ཡིག་སྣོད་ དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: བསྐྱར་མིང་བཏགས་:%s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: ཡིག་སྣོད་%s ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "ཉེན་བརྡ་:མ་ཤེས་པའི་སྡེ་ཚན་%s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "ཉེན་བརྡ་:སྡེ་ཚན་མང་དྲགས་པ་\n"
+
+msgid "Your password has expired."
+msgstr "ཁྱོད་ཀྱི་ཆོག་ཡིག་འདི་ དུས་ཡོལ་ནུག"
+
+msgid "Your password is inactive."
+msgstr "ཁྱོད་ཀྱི་ཆོག་ཡིག་འདི་ ནུས་མེད་ཨིན་པས།"
+
+msgid "Your login has expired."
+msgstr "ཁྱོད་ཀྱི་ནང་བསྐྱོད་འདི་ དུས་ཡོལ་ནུག"
+
+msgid " Contact the system administrator."
+msgstr "རིམ་ལུགས་བདག་སྐྱོང་པ་ལུ་ འབྲེལ་བ་འཐབ།"
+
+msgid " Choose a new password."
+msgstr "ཆོག་ཡིག་གསརཔ་ཅིག་གདམས།"
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "ཁྱོད་ཀྱི་ཆོག་ཡིག་འདི་ ཉིནམ་%ldནང་ དུས་ཡོལ་ནི་མས།\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "ཁྱོད་ཀྱི་ཆོག་ཡིག་འདི་ ནངས་པར་དུས་ཡོལ་ནི་མས།"
+
+msgid "Your password will expire today."
+msgstr "ཁྱོད་ཀྱི་ཆོག་ཡིག་འདི་ ད་རིས་དུས་ཡོལ་ནི་མས།"
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "ཊི་ཊི་ཝའི་ %s བསྒྱུར་བཅོས་འབད་མ་ཚུགས།"
+
+#, fuzzy, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: ས་སྒོ་ཚུ་རིང་དྲགས་པས།\n"
+
+#, fuzzy, c-format
+msgid "%s: "
+msgstr "%s: %s\n"
+
+msgid ": "
+msgstr ""
+
+msgid "Environment overflow\n"
+msgstr "མཐའ་འཁོར་ལུད་སོང་བ།\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr ""
+"ཁྱོད་ཀྱིས་ $%s\n"
+"བསྒྱུར་བཅོས་འབད་མི་ཚུགསཔ་འོང་།\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"མཇུག་མམ་གྱི་ནང་བསྐྱོད་འབད་ཞིནམ་ལས་ཚུར་ %dའཐུས་ཤོར།\n"
+"མཇུག་མམ་ %s འདི་ %s གུ་ཨིན་པས།\n"
+msgstr[1] ""
+"མཇུག་མམ་གྱི་ནང་བསྐྱོད་འབད་ཞིནམ་ལས་ཚུར་ %dའཐུས་ཤོར་ཚུ།\n"
+"མཇུག་མམ་ %s འདི་ %s གུ་ཨིན་པས།\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "ཡིག་སྒྲོམ་བདག་པོ་སོར་ནི་ལུ་ འཐུས་ཤོར་བྱུང་ཡོདཔ།"
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr "%s: ཐུན་མོང་ ཡུ་ཨའི་ཌི་འཐོབ་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: ཐུན་མོང་མ་ཡིན་པའི་ ཇི་ཨའི་ཌི་འཐོབ་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: ཐུན་མོང་མ་ཡིན་པའི་ ཇི་ཨའི་ཌི་འཐོབ་མི་ཚུགས།\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: %sགསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: %sགསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr "%s: ཐུན་མོང་ ཡུ་ཨའི་ཌི་འཐོབ་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: ཐུན་མོང་ ཡུ་ཨའི་ཌི་འཐོབ་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: ཐུན་མོང་ ཡུ་ཨའི་ཌི་འཐོབ་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: པི་ཨེ་ཨེམ་ བདེན་བཤད་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: ནུས་མེད་ཀྱི་ས་སྒོ་ '%s'།\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Could not seteuid to %d\n"
+msgstr "རིམ་སྒྲིག་བརྡ་དོན་གྱི་དོན་ལུ་ བར་སྟོང་སྤྲོད་མ་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not set caps\n"
+msgstr "རིམ་སྒྲིག་བརྡ་དོན་གྱི་དོན་ལུ་ བར་སྟོང་སྤྲོད་མ་ཚུགས།\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't open file\n"
+msgid "%s: snprintf failed!\n"
+msgstr "%s: ཡིག་སྣོད་ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: གྲལ་ཐིག་ %d: chown འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy, c-format
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: གྲལ་ཐིག་ %d: chown འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+msgid "Too many logins.\n"
+msgstr "ནང་བསྐྱོད་མང་དྲགས་པ།\n"
+
+msgid "You have new mail."
+msgstr "ཁྱོད་ལུ་ཡིག་འཕྲིན་གསརཔ་ཅིག་འདུག"
+
+msgid "No mail."
+msgstr "ཡིག་འཕྲིན་མེད།"
+
+msgid "You have mail."
+msgstr "ཁྱོད་ལུ་ཡིག་འཕྲིན་འདུག"
+
+msgid "no change"
+msgstr "བསྒྱུར་བཅོས་མེད།"
+
+msgid "a palindrome"
+msgstr "མདུན་རྒྱབ་སྒྲ་དང་དོན་གཅིག་ཏུ་བཀླག་རུང་བ་ཅིག"
+
+msgid "case changes only"
+msgstr "ཡི་གུ་རྐྱངམ་ཅིག་བསྒྱུར་བཅོས་འབདཝ་ཨིན།"
+
+msgid "too similar"
+msgstr "ཤིན་ཏུ་ཆ་འདྲ་བ།"
+
+msgid "too simple"
+msgstr "ཤིན་ཏུ་འཇམ་སམ།"
+
+msgid "rotated"
+msgstr "བསྒྱིར་ཡོདཔ།"
+
+msgid "too short"
+msgstr "ཐུང་དྲགས་པ།"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "ཆོག་ཡིག་བྱང་ཉེས་:%s"
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "ཆོག་ཡིག་:པམ་སི་ཊཊི་()འཐུས་ཤོར་བྱུང་ཡོདཔ་(_s) འཛོལ་བ་ %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "ཆོག་ཡིག་: %s\n"
+
+#, fuzzy
+msgid "passwd: password unchanged\n"
+msgstr "ཆོག་ཡིག་སོར་ཡོདཔ།"
+
+msgid "passwd: password updated successfully\n"
+msgstr "ཆོག་ཡིག་:ཆོག་ཡིག་འདི་མཐར་འཁྱོལ་སྦེ་ དུས་མཐུན་བཟོ་ཡི།\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: མཛོད་གནས་ %sའདི་ རྒྱབ་སྐྱོར་མ་འབད་བས།\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start:འཛོལ་བ་%d(_s)\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "ཆོག་ཡིག་:པམ་སི་ཊཊི་()འཐུས་ཤོར་བྱུང་ཡོདཔ་(_s) འཛོལ་བ་ %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "%s གི་དོན་ལུ་ བདེན་མེད་ཀྱི་ཆོག་ཡིག\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr ""
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: ནུས་མེད་ཀྱི་ ཁྱིམ་གྱི་བརྒྱུད་འཕྲིན་: '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "'%s'ལུ་ སི་ཌི་འབད་མ་ཚུགས་\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "སྣོད་ཐོ་མེད་ ཁྱིམ་དང་བཅས་ ནང་བསྐྱོད་འབད་དོ་=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "%sལག་ལེན་འཐབ་མི་ཚུགས།"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "ནུས་མེད་རྩ་བའི་སྣོད་ཐོ་ '%s'\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr " '%s'ལུ་ རྩ་བའི་སྣོད་ཐོ་བསྒྱུར་བཅོས་འབད་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: ལག་ལེན་པ་ %sའདི་ ད་ལྟོ་རང་ནང་བསྐྱོད་འབད་ཡི།\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: ལག་ལེན་པ་ %sའདི་ ད་ལྟོ་རང་ནང་བསྐྱོད་འབད་ཡི།\n"
+
+msgid "Unable to determine your tty name."
+msgstr "ཁྱོད་ཀྱི་ཊི་ཊི་ཝའི་མིང་ གཏན་འབེབས་བཟོ་མ་ཚུགས།"
+
+#, fuzzy
+msgid "No"
+msgstr "མེན།\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "ལག་ལེན་: %s [ཨིན་པུཊི་]\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr ""
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "བེ་ལུ་གསརཔ་བཙུགས་ ཡང་ཅིན་ སྔོན་སྒྲིག་གི་དོན་ལུ་ ENTERལུ་ཨེབས།"
+
+msgid "Minimum Password Age"
+msgstr "ཆོག་ཡིག་ལོ་ཉུང་མཐའ།"
+
+msgid "Maximum Password Age"
+msgstr "ཆོག་ཡིག་ལོ་མང་མཐའ།"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "མཇུག་གི་ཆོག་ཡིག་བསྒྱུར་བཅོས་(ཝའི་ཝའི་ཝའི་ཝའི་-ཨེམ་ཨེམ་-ཌི་ཌི་)།"
+
+msgid "Password Expiration Warning"
+msgstr "ཆོག་ཡིག་དུས་ཡོལ་ཉེན་བརྡ།"
+
+msgid "Password Inactive"
+msgstr "ཆོག་ཡིག་ནུས་མེད།"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "རྩིས་ཐོའི་དུས་ཡོལ་ཚེས་གྲངས་(ཝའི་ཝའི་ཝའི་ཝའི་-ཨེམ་ཨེམ་-ཌི་ཌི་)།"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "མཇུག་གི་ཆོག་ཡིག་བསྒྱུར་བཅོས་\t\t\t\t\t: "
+
+msgid "never"
+msgstr "ནམ་ཡང་"
+
+msgid "password must be changed"
+msgstr "ཆོག་ཡིག་འདི་བསྒྱུར་བཅོས་འབད་དགོ"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "ཆོག་ཡིག་དུས་ཡོལཝ་ཨིན་\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "ཆོག་ཡིག་ནུས་མེད་\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "རྩིས་ཐོ་དུས་ཡོལཝ་ཨིན་\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "ཆོག་ཡིག་བསྒྱུར་བཅོས་\t\tབར་ནའི་ཉིན་གྲངས་ཉུང་མཐའ་:%ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "ཆོག་ཡིག་བསྒྱུར་བཅོས་\t\tབར་ནའི་ཉིན་གྲངས་མང་མཐའ་:%ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "ཆོག་ཡིག་དུས་མ་ཡོལ་བའི་ཧེ་མ་ ཉེན་བརྡའི་ཉིན་གྲངས་\t:%ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: ནུས་མེད་ཚེས་གྲངས་ '%s'།\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: ནུས་མེད་ཨང་གྲངས་སྒྲུབ་རྟགས་ '%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: ཟུར་རྟགས་གཞན་མི་དང་གཅིག་ཁར་ \"l\" གྲངས་སུ་མི་བཙུགས།\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: སྣང་བ་ཉན་མ་བཏུབ།\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: ཁྱོད་ཀྱི་ལག་ལེན་པའི་མིང་ གཏན་འབེབས་བཟོ་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s:ཡིག་སྣོད་ཚུ་ལྡེ་མིག་བརྐྱབ་མི་ཚུགས་ དོ་རུང་ཤུལ་ལས་འབད་རྩོལ་བསྐྱེད།\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: ཡིག་སྣོད་%s ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: ཁ་སྤེལ་བ་འཐུས་ཤོར་:%s"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: གྱིབ་མའི་ཆོག་ཡིག་ཡིག་སྣོད་འདི་ མིན་འདུག\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: ལག་ལེན་པ་ %sའདི་ མེད།\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "%s གི་དོན་ལུ་ རྒས་པའི་བརྡ་དོན་བསྒྱུར་བཅོས་འབད་དོ།\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: ས་སྒོ་ཚུ་བསྒྱུར་བཅོས་འབད་བའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr "ལག་ལེན་: %s [ཨིན་པུཊི་]\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr "མིང་ཆ་ཚང་།"
+
+#, fuzzy, c-format
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "ཁང་མིག་ཨང་།"
+
+msgid "Work Phone"
+msgstr "ལཱ་གི་བརྒྱུད་འཕྲིན།"
+
+msgid "Home Phone"
+msgstr "ཁྱིམ་གྱི་བརྒྱུད་འཕྲིན།"
+
+msgid "Other"
+msgstr "གཞན།"
+
+msgid "Cannot change ID to root.\n"
+msgstr "རྩ་བ་ལུ་ ཨའི་ཌི་ བསྒྱུར་བཅོས་འབད་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: ནུས་མེད་ཀྱི་མིང་:'%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: ནུས་མེད་ཀྱི་ཁང་མིག་ཨང་:'%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: ནུས་མེད་ཀྱི་ལཱ་གི་བརྒྱུད་འཕྲིན་: '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: ནུས་མེད་ཀྱི་ ཁྱིམ་གྱི་བརྒྱུད་འཕྲིན་: '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s' ནང་ལུ་ ཁྲིམས་འགལ་ཡིག་ཆ་ཚུ་ཡོད།\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s' ནང་ལུ་ ཁྲིམས་འགལ་ཡིག་ཆ་ཚུ་ཡོད།\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: ལག་ལེན་པ་ %sའདི་ མེད།\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: ཨེན་ཨའི་ཨེསི་ ཞབས་ཏོག་སྤྱོད་མི་གུ་ ལག་ལེན་པ་ '%s' བསྒྱུར་བཅོས་འབད་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: '%s' འདི་ ཞབས་ཏོག་སྤྱོད་མི་འདི་གི་དོན་ལུ་ ཨེན་ཨའི་ཨེསི་ ཨམ་ཨིན།\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "%sགི་དོན་ལུ་ ལག་ལེན་པའི་བརྡ་དོན་ བསྒྱུར་བཅོས་འབད་དོ།\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: ས་སྒོ་ཚུ་རིང་དྲགས་པས།\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "ལག་ལེན་: %s [ཨིན་པུཊི་]\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr ""
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: -a ཟུར་རྟགས་འདི་ -Gཟུར་རྟགས་དང་གཅིག་ཁར་རྐྱངམ་ཅིག་ཆོག\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: གྲལ་ཐིག་ %d: གྲལ་ཐིག་རིང་དྲགས་པས།\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: གྲལ་ཐིག་ %d: ཆོག་ཡིག་གསརཔ་ བརླག་སྟོར་ཞུགས་པ།\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: སྡེ་ཚན་ %sམེད།\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: གྲལ་ཐིག་ %d: ཐོ་བཀོད་དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: འཛོལ་བ་སྐྱོན་འཛིན་འབད་ཡི་ བསྒྱུར་བཅོས་ཚུ་སྣང་མེད་བཞག་ཡི།\n"
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: ལག་ལེན་པ་ %sའདི་ མེད།\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: ལག་ལེན་པ་ %sའདི་ མེད།\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr "ནང་བསྐྱོད་ཀྱི་ཤལ།"
+
+#, fuzzy, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "ཁྱོད་ཀྱིས་ %sགི་དོན་ལུ་ ཤལ་བསྒྱུར་བཅོས་མི་འབདཝ་འོང་།\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "%sགི་དོན་ལུ་ ནང་བསྐྱོད་ཤལ་ བསྒྱུར་བཅོས་འབད་དོ།\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: ནུས་མེད་ཀྱི་ཐོ་བཀོད་:%s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s འདི་ནུས་མེད་ཀྱི་ཤལ་ཨིན།\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: ལག་ལེན་པ་ %sའདི་ མེད།\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: ཉེན་བརྡ་: %s འདི་ %s གིས་ བདག་དབང་བཟུངམ་མེན།\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "lastlog: རེ་བ་མ་བསྐྱེད་པའི་སྒྲུབ་རྟགས་:%s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "ནང་བསྐྱོད་ མང་མཐའི་མཇུག་མཐའ་འཐུས་ཤོར་ ཨཱོན། \n"
+
+#, fuzzy, c-format
+msgid " [%lus left]"
+msgstr " [%lds གཡོན་]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds ལྡེ་མིག་]"
+
+#, fuzzy, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "མ་ཤེས་པའི་ལག་ལེན་པ་:%s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: སྣོད་ཐོ་ %s འདི་ %s ལུ་ བསྐྱར་མིང་བཏགས་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "ལག་ལེན་: %s [ཨིན་པུཊི་]\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr ""
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr ""
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr ""
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+
+#, fuzzy
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "%sགི་དོན་ལུ་ ཆོག་ཡིག་སོར་མི་ཚུགས།\n"
+
+#, fuzzy
+msgid "The options cannot be combined.\n"
+msgstr "%sགི་དོན་ལུ་ ཆོག་ཡིག་སོར་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: -Aགི་དོན་ལུ་ གྱིབ་མའི་སྡེ་ཚན་ཆོག་ཡིག་ཚུ་དགོ\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: སྡེ་ཚན་ %sམེད།\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: ཁ་སྤེལ་བ་འཐུས་ཤོར་:%s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "སྡེ་ཚན་ %sགི་དོན་ལུ་ ཆོག་ཡིག་སོར་དོ།\n"
+
+msgid "New Password: "
+msgstr "ཆོག་ཡིག་གསརཔ་:"
+
+msgid "Re-enter new password: "
+msgstr "ཆོག་ཡིག་གསརཔ་ ལོག་བཙུགས་:"
+
+msgid "They don't match; try again"
+msgstr "དེ་ཚུ་མཐུན་སྒྲིག་མིན་འདུག་ དོ་རུང་འབད་རྩོལ་བསྐྱེད།"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: དོ་རུང་ཤུལ་ལས་འབད་རྩོལ་བསྐྱེད།\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "སྡེ་ཚན་ %sལུ་ ལག་ལེན་པ་ %sཁ་སྐོང་འབད་དོ།\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "སྡེ་ཚན་ %sནང་ལས་ ལག་ལེན་པ་ %sརྩ་བསྐྲད་གཏང་དོ།\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: ལག་ལེན་པ་ %sའདི་ མེད།\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: ཊི་ཊི་ཝའི་མེན།\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "ལག་ལེན་: %s [ཨིན་པུཊི་]\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr ""
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid " -r, --system create a system account\n"
+msgstr ""
+
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s འདི་ ནུས་ཅན་གྱི་སྡེ་ཚན་མིང་མེན་པས།\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "ནུས་མེད་སྡེཚན་གྱི་མིང་ '%s'\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K གིས་ ལྡེ་མིག་=བེ་ལུ་ དགོཔ་ཨིན།\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: སྡེ་ཚན་ %sཡོདཔ་ཨིན།\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: ཁྱོད་ཀྱི་ལག་ལེན་པའི་མིང་ གཏན་འབེབས་བཟོ་མི་ཚུགས།\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: སྣོད་ཐོ་ %s འདི་ %s ལུ་ བསྐྱར་མིང་བཏགས་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+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"
+msgstr "%s: སྡེ་ཚན་ %sམེད།\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: སྡེ་ཚན་ '%s' འདི་ ཨེན་ཨའི་ཨེསི་སྡེ་ཚན་ཨིན།\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %sའདི་ ཨེན་ཇི་ཨེསི་ ཨམ་ཨིན།\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: ལག་ལེན་པ་ %sའདི་ ཨེན་ཨའི་ཨེསི་ ལག་ལེན་པ་ཅིག་ཨིན།\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: དུས་མཐུན་སྡེ་ཚན་ནང་ལུ་ དྲན་ཚད་ལས་བརྒལ་བ།\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr "ལག་ལེན་: %s [ཨིན་པུཊི་]\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+
+msgid "\n"
+msgstr ""
+
+msgid "Actions:\n"
+msgstr ""
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr ""
+
+msgid " -l, --list list the members of the group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr ""
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "ནུས་མེད་སྡེཚན་གྱི་མིང་ '%s'\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: སྡེ་ཚན་ %s འདི་ ཨེན་ཇི་ཨེསི་ སྡེ་ཚན་ཨིན།\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: མ་ཤེས་པའི་ལག་ལེན་པ་%s\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr "ལག་ལེན་: %s [ཨིན་པུཊི་]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr "ལག་ལེན་: %s [ཨིན་པུཊི་]\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s དང་ -r གཉིས་མཐུན་འགྱུར་ཅན་མེན།\n"
+
+msgid "invalid group file entry"
+msgstr "ནུས་མེད་སྡེ་ཚན་ཐོ་བཀོད།"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "གྲལ་ཐིག་ '%s'བཏོན་གཏང་ནི་ཨིན་ན?"
+
+msgid "duplicate group entry"
+msgstr "སྡེ་ཚན་ཐོ་བཀོད་ བརྫུན་མ་བཟོ།"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "ནུས་མེད་སྡེཚན་གྱི་མིང་ '%s'\n"
+
+#, fuzzy, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "ནུས་མེད་སྡེཚན་གྱི་མིང་ '%s'\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "སྡེ་ཚན་ %s: ལག་ལེན་པ་ %sམེད།\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "ཨང་གྲངས་ '%s' བཏོན་གཏང་ནི་ཨིན་ན?"
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "%sནང་ མཐུན་སྒྲིག་སྡེ་ཚན་གྱི་ཡིག་སྣོད་ཐོ་བཀོད་མེད།\n"
+
+#, fuzzy, c-format
+msgid "add group '%s' in %s? "
+msgstr "%sནང་ སྡེ་ཚན་ '%s' ཁ་སྐོང་འབད་ནི་ཨིན་ན?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "ནུས་མེད་གྱིབ་མའི་སྡེ་ཚན་ཡིག་སྣོད་ཐོ་བཀོད།"
+
+msgid "duplicate shadow group entry"
+msgstr "ངོ་བཤུས་གྱིབ་མའི་སྡེ་ཚན་ཐོ་བཀོད།"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "གྱིབ་མའི་སྡེ་ཚན་%s: བདག་སྐྱོང་གི་ལག་ལེན་པ་ %sམེད།\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "བདག་སྐྱོང་གི་ཨང་གྲངས་ '%s' བཏོན་གཏང་ནི་ཨིན་ན?"
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "གྱིབ་མའི་སྡེ་ཚན་%s: ལག་ལེན་པ་%sམེད།\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: ཡིག་སྣོད་ཚུ་དུས་མཐུན་བཟོ་ཡི།\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: སོར་ནི་མེད།\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: ཡིག་སྣོད་ %sའདི་ དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "ལག་ལེནཔ་:id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "ལག་ལེན་པ་: id\n"
+
+msgid " groups="
+msgstr "སྡེ་ཚན་="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+
+msgid "Username Port From Latest"
+msgstr "ལག་ལེན་པའི་མིང་ འདྲེན་ལམ་ ལས་ མཇུག་མཐའ།"
+
+msgid "Username Port Latest"
+msgstr "ལག་ལེན་པའི་མིང་ འདྲེན་ལམ་ མཇུག་མཐའ།"
+
+msgid "**Never logged in**"
+msgstr "**ནམ་ཡང་ནང་བསྐྱོད་མ་འབད་**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%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 "ལག་ལེན་: %s [-p] [མིང་]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h host] [-f name]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r host\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "ནུས་མེད་ནང་བསྐྱོད་ཀྱི་དུས་ཚོད།"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"རྒྱུན་ལས་རྒྱུན་སྐྱོང་གི་དོན་ལུ་ རིམ་ལུགས་ཁ་བསྡམས་ཅི།"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[མཐུད་བཏོག་ཟུར་ཏེ་འགྱོ་ཡོདཔ་ --རྩ་བའི་ནང་བསྐྱོད་མི་ཆོག]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"utmpཐོ་བཀོད་མིན་འདུག ཁྱོད་ཀྱིས་ གནས་རིམ་དམའ་ཤོས་\"sh\"གི་ནང་ལས་ \"login\"ལག་ལེན་འཐབ་དགོ"
+
+#, fuzzy, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"%d སྐར་ཆག་གི་ཤུལ་མར་ ནང་བསྐྱོད་ངལ་མཚམས་བྱུང་ཡོདཔ།\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "ནང་བསྐྱོད་: པི་ཨེ་ཨེམ་འཐུས་ཤོར་ བར་བཤོལ་དོ་: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s ནང་བསྐྱོད་: "
+
+msgid "login: "
+msgstr "ནང་བསྐྱོད་: "
+
+#, fuzzy, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "འབད་རྩོལ་གྱི་ཨང་གྲངས་མང་མཐའ་ལྷག་ཡོདཔ་(%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "ནང་བསྐྱོད་:པི་ཨུ་ཨེམ་གྱིས་ཞུ་ཡོད་པའི་བར་བཤོལ།\n"
+
+msgid "Login incorrect"
+msgstr "ནང་བསྐྱོད་བདེན་མེད།"
+
+#, fuzzy, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "%s: གྲལ་ཐིག་ %d:ལག་ལེན་པ་ %sའཚོལ་མི་ཚུགས།\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s ནང་བསྐྱོད་: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: ཁ་སྤེལ་བ་འཐུས་ཤོར་:%s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "ཉེན་བརྡ་:གནས་སྐབས་ལྡེ་མིག་བརྐྱབས་པའི་ཤུལ་ལུ་ ལོག་སྟེ་ནང་བསྐྱོད་ལྕོགས་ཅན་བཟོ་ཡོདཔ།"
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "མཇུག་གི་ནང་བསྐྱོད་: %s གུ་ %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "མཇུག་གི་ནང་བསྐྱོད་: %.19s གུ་ %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " %.*sལས།"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"ནང་བསྐྱོད་དུས་ཚོད་ལྷག་ཡོདཔ།\n"
+"\n"
+
+#, fuzzy
+msgid "Usage: logoutd\n"
+msgstr "ལག་ལེན་པ་: id\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: can't open group file\n"
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr "%s: སྡེ་ཚན་ལྡེ་མིག་ ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: ས་སྒོ་ཚུ་རིང་དྲགས་པས།\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: ནུས་མེད་གཞི་རྟེན་སྣོད་ཐོ་'%s'།\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "ལག་ལེན་: newgrp [-][ སྡེ་ཚན་]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "ལག་ལེན་: sg group [[-c]བརྡ་བཀོད་ ]\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "ཆོག་ཡིག་རྙིངམ་:"
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: ཁ་སྤེལ་བ་འཐུས་ཤོར་:%s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: ལག་ལེན་པ་ %sའདི་ མེད།\n"
+
+msgid "too many groups\n"
+msgstr "སྡེ་ཚན་མང་དྲགས་པ།\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid " -b, --badnames allow bad names\n"
+msgstr ""
+
+msgid " -r, --system create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+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 ID '%s'\n"
+msgstr "%s: ནུས་མེད་ལག་ལེན་པའི་མིང་ '%s'།\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: ནུས་མེད་ལག་ལེན་པའི་མིང་ '%s'།\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s:གྲལ་ཐིག་%d: ནུས་མེད་གྲལ་ཐིག་\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: ལག་ལེན་པ་%sགི་དོན་ལུ་ ཐོ་བཀོད་དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: གྲལ་ཐིག་ %d: ཇི་ཨའི་ཌི་ གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: གྲལ་ཐིག་ %d: ཇི་ཨའི་ཌི་ གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: ལག་ལེན་པ་ %sའདི་ མེད།\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: གྲལ་ཐིག་ %d: ཆོག་ཡིག་དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: གྲལ་ཐིག་ %d: mkdir འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: གྲལ་ཐིག་ %d: chown འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: གྲལ་ཐིག་ %d: ཐོ་བཀོད་དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: %sགསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: སྡེ་ཚན་ཡིག་སྣོད་ དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid " -q, --quiet quiet mode\n"
+msgstr ""
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid "Old password: "
+msgstr "ཆོག་ཡིག་རྙིངམ་:"
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr "ཆོག་ཡིག་གསརཔ་བཙུགས་(%d གི་ཉུང་མཐའ་ %dཡིག་འབྲུའི་མང་མཐའ་)།\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr "ཆོག་ཡིག་གསརཔ་བཙུགས་(%d གི་ཉུང་མཐའ་ %dཡིག་འབྲུའི་མང་མཐའ་)།\n"
+
+msgid "New password: "
+msgstr "ཆོག་ཡིག་གསརཔ་:"
+
+#, fuzzy
+msgid "Try again."
+msgstr "ལོག་འབད་རྩོལ་བསྐྱེད་:"
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"ཉེན་བརྡ་:ནུས་མེད་ཀྱི་ཆོག་ཡིག་(ག་དེ་ཨིན་རུང་ལག་ལེན་འཐབ་ནིའི་དོན་ལས་ ལོག་བཙུགས་)།"
+
+msgid "They don't match; try again.\n"
+msgstr "དེ་ཚུ་མཐུན་སྒྲིག་མིན་འདུག་ ལོག་འབད་རྩོལ་བསྐྱེད།\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "%sགི་དོན་ལུ་ ཆོག་ཡིག་སོར་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "%sགི་དོན་ལུ་ ཆོག་ཡིག་སོར་མི་ཚུགས།\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: མཛོད་གནས་ %sའདི་ རྒྱབ་སྐྱོར་མ་འབད་བས།\n"
+
+#, c-format
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: ཁྱོད་ཀྱིས་ %sགི་དོན་ལུ་ ཆོག་ཡིག་བརྡ་དོན་མ་བལྟ་འོང་ ཡང་ན་ ལེགས་བཅོས་མ་འབདཝ་འོང་།\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "%sགི་དོན་ལུ་ ཆོག་ཡིག་སོར་དོ།\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr " %sགི་དོན་ལུ་ ཆོག་ཡིག་འདི་མ་སོར་བས།\n"
+
+#, fuzzy, c-format
+msgid "%s: password changed.\n"
+msgstr "ཆོག་ཡིག་སོར་ཡོདཔ།"
+
+#, fuzzy, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "ཆོག་ཡིག་དུས་ཡོལ་ཉེན་བརྡ།"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr "ལག་ལེན་: %s [ཨིན་པུཊི་]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr "ལག་ལེན་: %s [ཨིན་པུཊི་]\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+
+msgid "invalid password file entry"
+msgstr "ནུས་མེད་ཀྱི་ཆོག་ཡིག་ཡིག་སྣོད་ཐོ་བཀོད།"
+
+msgid "duplicate password entry"
+msgstr "ཆོག་ཡིག་ཐོ་བཀོད་རྫུན་མ།"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "ནུས་མེད་ལག་ལེན་པའི་མིང་ '%s'\n"
+
+#, fuzzy, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "ནུས་མེད་ལག་ལེན་པའི་མིང་ '%s'\n"
+
+#, fuzzy, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "ལག་ལེན་པ་ %s: སྡེ་ཚན་ %uམེད།\n"
+
+#, fuzzy, c-format
+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"
+msgstr "ལག་ལེན་པ་ %s: ལས་རིམ་%s མེད།\n"
+
+#, fuzzy, c-format
+msgid "no tcb directory for %s\n"
+msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "create tcb directory for %s?"
+msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: ཡིག་སྣོད་ %sའདི་ ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "%sནང་ མཐུན་སྒྲིག་ཡོད་པའི་ཆོག་ཡིག་ཡིག་སྣོད་ཐོ་བཀོད་མེད།\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "%sནང་ ལག་ལེན་པ་ '%s' ཁ་སྐོང་འབད་ནི་ཨིན་ན?"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "ནུས་མེད་གྱིབ་མའི་ཆོག་ཡིག་ཡིག་སྣོད་ཐོ་བཀོད།"
+
+msgid "duplicate shadow password entry"
+msgstr "གྱིབ་མའི་ཆོག་ཡིག་ཐོ་བཀོད་རྫུན་མ།"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "ལག་ལེན་པ་ %s: མ་འོངས་པ་ནང་ མཇུག་གི་ཆོག་ཡིག་སོར་ནི།\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: ཡིག་སྣོད་%s ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: ཡིག་སྣོད་ལོག་འབྲི་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "རྩིས་ཐོ་དེ་ལུ་ ཟླ་ལུ་འཛུལ་སྤྱོད་འབད་ནི་ ཉན་མ་བཏུབ་པས།\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "ཆོག་ཡིག་བདེན་བཤད་ཟུར་ལས་འགྱོ་ཡོདཔ།\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "ཁྱོད་རའི་ཆོག་ཡིག་འདི་ བདེན་བཤད་སྦེ་བཙུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: ཡིག་སྣོད་ %sའདི་ ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr ""
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr ""
+
+msgid "Session terminated, terminating shell..."
+msgstr ""
+
+#, c-format
+msgid " ...killed.\n"
+msgstr ""
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr ""
+
+msgid " ...terminated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"ལག་ལེན་: ཟླ་ [གདམ་ཁ་ཚུ་] [ནང་བསྐྱོད་]\n"
+"\n"
+"གདམ་ཁ་ཚུ་:\n"
+" -c, --command COMMAND\t\t ལས་བཀོལ་འབད་ཡོད་པའི་ཤལ་ལུ་ བརྡ་བཀོད་རྩིས་སྤྲོད་འབད།\n"
+" -h, --help\t\t\t གྲོགས་རམ་འཕྲིན་དོན་འདི་བཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+" -, -l, --login\t\t ཤལ་འདི་ ནང་བསྐྱོད་ཤལ་བཟོ།\n"
+" -m, -p,\n"
+" --preserve-environment\t མཐའ་འཁོར་འགྱུར་ཅན་ཚུ་ སླར་གཞི་སྒྲིག་མ་འབད་དགོཔ་དང་ \n"
+"\t\t\t\tཤལ་ཅོག་འཐདཔ་སྦེ་བཞག\n"
+" -s, --shell SHELL\t\t ཆོག་ཡིག་ནང་ སྔོན་སྒྲིག་གི་ཚབ་ལུ་ ཤལ་ལག་ལེན་འཐབ།\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(སྣང་མེད་བཞག་ཡོདཔ་)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "ཁྱོད་ ཟླ་%sལུ་ དབང་སྤྲོད་མ་འབད།\n"
+
+msgid "(Enter your own password)"
+msgstr "(ཁྱོད་རའི་ཆོག་ཡིག་རྐྱངམ་ཅིག་བཙུགས་)"
+
+#, fuzzy, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: པི་ཨེ་ཨེམ་ བདེན་བཤད་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "ཁྱོད་ ཟླ་%sལུ་ དབང་སྤྲོད་མ་འབད།\n"
+
+#, fuzzy, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "'རྩ་བ་'གི་དོན་ལུ་ ཆོག་ཡིག་ཐོ་བཀོད་མེད།"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: ཊར་མི་ནཱལ་ལས་གཡོག་བཀོལ་དགོ\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start:འཛོལ་བ་%d(_s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: སྣོད་ཐོ་ %s འདི་ %s ལུ་ བསྐྱར་མིང་བཏགས་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "Cannot execute %s\n"
+msgstr "%sལག་ལེན་འཐབ་མི་ཚུགས།"
+
+msgid "No password file"
+msgstr "ཆོག་ཡིག་ཡིག་སྣོད་མེད།"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "'རྩ་བ་'གི་དོན་ལུ་ ཆོག་ཡིག་ཐོ་བཀོད་མེད།"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"སྤྱིར་བཏང་འགོ་བཙུགས་ཀྱི་ཐོག་ལས་ འཕྲོ་མཐུད་ནིའི་དོན་ལུ་ ཚད་འཛིན་-ཌི་ ཡིག་དཔར་རྐྱབས་\n"
+"(ཡང་ན་ རིམ་ལུགས་རྒྱུན་སྐྱོང་གི་དོན་ལུ་ རྩ་བའི་ཆོག་ཡིག་ཅིག་བྱིན་):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "རིམ་ལུགས་རྒྱུན་སྐྱོང་ཐབས་ལམ་བཙུགས་དོ།"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: སྔོན་སྒྲིག་ཡིག་སྣོད་གསརཔ་ གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: སྔོན་སྒྲིག་ཡིག་སྣོད་གསརཔ་ གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: སྔོན་སྒྲིག་ཡིག་སྣོད་གསརཔ་ ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: གྲལ་ཐིག་ %d: chown འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: བསྐྱར་མིང་བཏགས་:%s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: སྡེ་ཚན་ '%s' འདི་ ཨེན་ཨའི་ཨེསི་སྡེ་ཚན་ཨིན།\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: སྡེ་ཚན་མང་རབས་ཅིག་གསལ་བཀོད་འབད་ཡོདཔ་(མང་མཐའ་ %d)།\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr "ལག་ལེན་: %s [ཨིན་པུཊི་]\n"
+
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr ""
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr ""
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr ""
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr ""
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: ནུས་མེད་གཞི་རྟེན་སྣོད་ཐོ་'%s'།\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: ནུས་མེད་བསམ་བཀོད་ '%s'།\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: ནུས་མེད་ཁྱིམ་གྱི་སྣོད་ཐོ་ '%s'།\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: -e ལུ་དགོས་མཁོ་ཡོད་པའི་གྱིབ་མའི་ཆོག་ཡིག་ཚུ།\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: -f ལུ་དགོས་མཁོ་ཡོད་པའི་གྱིབ་མའི་ཆོག་ཡིག་ཚུ།\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: ནུས་མེད་ཀྱི་ས་སྒོ་ '%s'།\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: ནུས་མེད་ཤལ་ '%s'།\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: ཉེན་བརྡ་: %s འདི་ %s གིས་ བདག་དབང་བཟུངམ་མེན།\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rewrite password file\n"
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་འདི་ ལོག་འབྲི་མི་བཏུབ།\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error updating files\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: ཡིག་སྣོད་དུས་མཐུན་བཟོ་བའི་སྐབས་ལུ་ འཛོལ་བ།\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: ནུས་མེད་ཁྱིམ་གྱི་སྣོད་ཐོ་ '%s'།\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "ཡིག་སྒྲོམ་བདག་པོ་སོར་ནི་ལུ་ འཐུས་ཤོར་བྱུང་ཡོདཔ།"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: གྲལ་ཐིག་ %d: chown འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: གྲལ་ཐིག་ %d: chown འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "ཡིག་སྒྲོམ་ཡིག་སྣོད་ གསར་བསྐྲུན་འབད་དོ།"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"སྡེ་ཚན་'mail' མ་ཐོབ། ༠༦༠༠ ཐབས་ལམ་དང་བཅས་ ལག་ལེན་པའི་ཡིག་སྒྲ྄ོམ་ཡིག་སྣོད་ གསར་བསྐྲུན་འབད་དོ།\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "ཡིག་སྒྲོམ་ཡིག་སྣོད་གྱི་གནང་བ་ གཞི་སྒྲིག་འབད་དོ།"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: ལག་ལེན་པ་ %sཡོདཔ་ཨིན།\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: སྡེ་ཚན་%s ཡོདཔ་ཨིན་-ཁྱོད་ཀྱིས་ ལག་ལེན་པ་འདི་སྡེ་ཚན་དེ་ནང་ ཁ་སྐོང་བརྐྱབ་ནི་ཨིན་པ་ཅིན་ -g ལག་"
+"ལེན་འཐབ།\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: %sགསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: ཡུ་ཨའི་ཌི་ %uའདི་ ཐུན་མོང་མེན།\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: %sགསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: %sགསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: %sགསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: ཉེན་བརྡ་:ཁྱིམ་གྱི་སྣོད་ཐོ་འདི་ཧེ་མ་ལས་རང་ཡོདཔ་ཨིན།\n"
+"འདི་ནང་ལུ་ སི་ཀེལ་སྣོད་ཐོ་ནང་ལས་ ཡིག་སྣོད་ག་ཅི་ཡང་འདྲ་བཤུས་མ་བརྐྱབ་ནི།\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr "%s: ཨེན་ཨའི་ཨེསི་ ཞབས་ཏོག་སྤྱོད་མི་གུ་ ལག་ལེན་པ་ '%s' བསྒྱུར་བཅོས་འབད་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr ""
+
+#, fuzzy, c-format
+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 remove entry %lu from %s\n"
+msgstr "%s: སྣོད་ཐོ་ %s འདི་ %s ལུ་ བསྐྱར་མིང་བཏགས་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: ནུས་མེད་ཁྱིམ་གྱི་སྣོད་ཐོ་ '%s'།\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: ཉེན་བརྡ་:རྩ་བསྐྲད་གཏང་མི་ཚུགས།"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %sགིས་བདག་དབང་མ་བཟུང་མི་ %sའདི་ རྩ་བསྐྲད་གཏང་ནི་མེད།\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: སྣོད་ཐོ་ %s འདི་ %s ལུ་ བསྐྱར་མིང་བཏགས་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: སྣོད་ཐོ་ %s འདི་ %s ལུ་ བསྐྱར་མིང་བཏགས་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: ལག་ལེན་པ་ %sའདི་ ཨེན་ཨའི་ཨེསི་ ལག་ལེན་པ་ཅིག་ཨིན།\n"
+
+#, fuzzy, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: ནུས་མེད་ཁྱིམ་གྱི་སྣོད་ཐོ་ '%s'།\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s: སྣོད་ཐོ་ %sའདི་ རྩ་བསྐྲད་གཏང་ནི་མེད་(ལག་ལེན་པ་%sགི་ཁྱིམ་འདི་ རྩ་བསྐྲད་གཏང་འོང་)།\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: སྣོད་ཐོ་%s རྩ་བསྐྲད་གཏང་པའི་སྐབས་ལུ་ འཛོལ་བ།\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: སྣོད་ཐོ་%s རྩ་བསྐྲད་གཏང་པའི་སྐབས་ལུ་ འཛོལ་བ།\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr ""
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr ""
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr ""
+
+msgid " -L, --lock lock the user account\n"
+msgstr ""
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr ""
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr ""
+
+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"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: ལག་ལེན་པ་ %sཡོདཔ་ཨིན།\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: ནུས་མེད་ཚེས་གྲངས་ '%s'།\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: ནུས་མེད་ཚེས་གྲངས་ '%s'།\n"
+
+#, fuzzy, c-format
+msgid "%s: no options\n"
+msgstr "%s: ཡིག་སྣོད་%s ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: -e aདང་ -f གཉིས་ལུ་དངོས་མཁོ་ཡོད་པའི་གྱིབ་མའི་ཆོག་ཡིག་ཚུ།\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: སྣོད་ཐོ་ %sའདི་ཡོདཔཨིན།\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: ཉེན་བརྡ་: ཁྱིམ་གྱི་སྣོད་ཐོ་%sརྙིངམ་འདི་ མཐར་འཁྱོལ་སྦེ་རྩ་བསྐྲད་གཏང་ནི་ལུ་ འཐུས་ཤོར་བྱུང་ཡོདཔ།"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: སྣོད་ཐོ་ %s འདི་ %s ལུ་ བསྐྱར་མིང་བཏགས་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: ཉེན་བརྡ་: %s འདི་ %s གིས་ བདག་དབང་བཟུངམ་མེན།\n"
+
+msgid "failed to change mailbox owner"
+msgstr "ཡིག་སྒྲོམ་བདག་པོ་སོར་ནི་ལུ་ འཐུས་ཤོར་བྱུང་ཡོདཔ།"
+
+msgid "failed to rename mailbox"
+msgstr "ཡིག་སྒྲོམ་གྱི་བསྐྱར་མིང་བཏགས་ནི་ལུ་ འཛོལ་བ།"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid " -g, --group edit group database\n"
+msgstr ""
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr ""
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %sའདི་ བསྒྱུར་བཅོས་མ་འབད་བས།\n"
+
+#, fuzzy
+msgid "failed to create scratch directory"
+msgstr "ཡིག་སྒྲོམ་གྱི་བསྐྱར་མིང་བཏགས་ནི་ལུ་ འཛོལ་བ།"
+
+#, fuzzy
+msgid "failed to drop privileges"
+msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy
+msgid "Couldn't get file context"
+msgstr "ཡིག་སྣོད་ལྡེ་མིག་བརྐྱབས་མ་ཚུགས།"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+#, fuzzy
+msgid "failed to gain privileges"
+msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+msgid "Couldn't lock file"
+msgstr "ཡིག་སྣོད་ལྡེ་མིག་བརྐྱབས་མ་ཚུགས།"
+
+msgid "Couldn't make backup"
+msgstr "རྒྱབ་ཐག་བཟོ་མ་ཚུགས།"
+
+#, fuzzy, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr "%s: /etc/passwd ནང་ལུ་ %s མ་ཐོབ།\n"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+#, fuzzy
+msgid "failed to open scratch file"
+msgstr "%s: སྡེ་ཚན་ཡིག་སྣོད་ ཁ་ཕྱེ་མ་ཚུགས།\n"
+
+#, fuzzy
+msgid "failed to unlink scratch file"
+msgstr "%s: ས་སྒོ་ཚུ་རིང་དྲགས་པས།\n"
+
+#, fuzzy
+msgid "failed to stat edited file"
+msgstr "ཡིག་སྒྲོམ་གྱི་བསྐྱར་མིང་བཏགས་ནི་ལུ་ འཛོལ་བ།"
+
+#, fuzzy
+msgid "failed to allocate memory"
+msgstr "ཡིག་སྒྲོམ་བདག་པོ་སོར་ནི་ལུ་ འཐུས་ཤོར་བྱུང་ཡོདཔ།"
+
+#, fuzzy
+msgid "failed to create backup file"
+msgstr "ཡིག་སྒྲོམ་གྱི་བསྐྱར་མིང་བཏགས་ནི་ལུ་ འཛོལ་བ།"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: %sསོར་ཆུད་འབད་མ་ཚུགས་: %s (ཁྱོད་ཀྱི་བསྒྱུར་བཅོས་ཚུ་ %sནང་ཨིན་)།\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: ནུས་མེད་གཞི་རྟེན་སྣོད་ཐོ་'%s'།\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "ལག་ལེན་: %s [ཨིན་པུཊི་]\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "malloc(%d) འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "ལག་ལེན་:chage[གདམ་ཁ་ཚུ་]user\n"
+#~ "\n"
+#~ "གདམ་ཁ་ཚུ་:\n"
+#~ " -d, ---lastday LAST_DAY\t མཇུག་མམ་གྱི་ཆོག་ཡིག་འདི་ LAST_DAYལུ་ བསྒྱུར་བཅོས་གཞི་སྒྲིག་"
+#~ "འབད།\n"
+#~ " -E, --expiredate EXPIRE_DATE\t རྩིས་ཐོའི་དུས་ཡོལ་ཚེས་གྲངས་འདི་ཚུ་ EXPIRE_DATE ལུ་ "
+#~ "བསྒྱུར་བཅོས་གཞི་སྒྲིག་འབད།\n"
+#~ " -h, --help\t\t\t གྲོགས་རམ་འཕྲིན་དོན་འདི་ བཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+#~ " -I, --inactive INACTIVE\t དུས་ཡོལ་ \n"
+#~ "\t\t\t\tto INACTIVE གི་ཤུལ་མ་ཆོག་ཡིག་ནུས་མེད་འདི་ གཞི་སྒྲིག་འབད།\n"
+#~ " -l, --list\t\t\t རྩིས་ཐོ་རྒས་པའི་བརྡ་དོན་ སྟོན།\n"
+#~ " -m, --mindays MIN_DAYS\t ཉིན་གྲངས་ཉུང་མཐའ་འདི་ཚུ་ ཆོག་ཡིག་\n"
+#~ "\t\t\t\tགི་ཧེ་མར་ MIN_DAYSལུ་བསྒྱུར་བཅོས་ གཞི་སྒྲིག་འབད།\n"
+#~ " -M, --maxdays MAX_DAYS\t ཉིན་གྲངས་མང་མཐའ་འདི་ཚུ་ ཆོག་ཡིག་\n"
+#~ "\t\t\t\tགི་ཧེ་མར་ MAX_DAYSལུ་ བསྒྱུར་བཅོས་ གཞི་སྒྲིག་འབད།\n"
+#~ " -W, --warndays WARN_DAYS\t དུས་ཡོལ་ཉེན་བརྡའི་ཉིནམ་འདི་ཚུ་ WARN_DAYSལུ་ གཞི་སྒྲིག་"
+#~ "འབད།\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: པི་ཨེ་ཨེམ་ བདེན་བཤད་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "ལག་ལེན་:%s[-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] user]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr "ལག་ལེན་:%s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "ལག་ལེན་: chpasswd [གདམ་ཁ་ཚུ་]\n"
+#~ "\n"
+#~ "གདམ་ཁ་ཚུ་:\n"
+#~ " -e, --encrypted\t བཀྲམ་སྤེལ་འབད་ཡོད་པའི་ཆོག་ཡིག་ཚུ་ གསང་བཟོས་མ་འབད་ཡོདཔ།\n"
+#~ " -h, --help\t\t གྲོགས་རམ་འཕྲིན་དོན་འདི་ བཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+#~ " -m, --md5\t\t བཀྲམ་སྤེལ་འབད་ཡོད་པའི་\t\t\tཆོག་ཡིག་ཚུ་ གསང་བཟོས་མ་ཡིན་པའི་སྐབས་ལུ་ ཌི་"
+#~ "ཨི་ཨེསི་གི་ཚབ་ལུ་ ཨེབ་ཌི་ ༥ གསང་བཟོ་ ལག་ལེན་འཐབ།\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "ལག་ལེན་: userdel [གདམ་ཁ་ཚུ་] ནང་བསྐྱོད་\n"
+#~ "\n"
+#~ "གདམ་ཁ་ཚུ་:\n"
+#~ " -f, --force\t\t\t ལག་ལེན་པ་གིས་བདག་དབང་མ་བཟུང་སྟེ་འབད་རུང་ ཡིག་སྣོད་བང་བཙོང་སྟེ་རྩ་"
+#~ "བསྐྲད་གཏང་།\n"
+#~ " -h, --help\t\t\t གྲོགས་རམ་འཕྲིན་དོན་འདི་བཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+#~ " -r, --remove\t\t\t ཁྱིམ་གྱི་སྣོད་ཐོ་དང་ཡིག་འཕྲིན་འཕྲལ་གསོག་རྩ་བསྐྲད་གཏང་།\n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "ལག་ལེན་: དུས་ཡོལ་{-f|-c}\n"
+
+#, fuzzy
+#~| msgid "%s: cannot open file %s\n"
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "%s: ཡིག་སྣོད་%s ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "ལག་ལེན་:groupdel སྡེ་ཚན།\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "ལག་ལེན་:%s [-r] [-s] [group [gshadow]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "ལག་ལེན་: %s [-r] [-s] [སྡེ་ཚན་]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: -s དང་ -r གཉིས་མཐུན་འགྱུར་ཅན་མེན།\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "ལག་ལེན་:groupdel སྡེ་ཚན།\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "ལག་ལེན་:groupdel སྡེ་ཚན།\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "ལག་ལེན་: lastlog [གདམ་ཁ་ཚུ་]\n"
+#~ "\n"
+#~ "གདམ་ཁ་ཚུ་:\n"
+#~ " -b, --before DAYS\t ཉིན་གྲངས་ལས་རྙིང་པའི་lastlogདྲན་ཐོ་ཚུ་རྐྱངམ་ཅིག་ དཔར་བསྐྲུན་འབད།\n"
+#~ " -h, --help\t\t གྲོགས་རམ་འཕྲིན་དོན་འདི་བཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+#~ " -t, --time DAYS\t ཉིན་གྲངས་ལས་ལྷག་པའི་འཕྲལ་གྱི་ lastlogདྲན་ཐོ་ཚུ་རྐྱངམ་ཅིག་ དཔར་བསྐྲུན་"
+#~ "འབད།\n"
+#~ " -u, ---user LOGIN\t ལག་ལེན་པའི་དོན་ལུ་ གསལ་བཀོད་འབད་ཡོད་པའི་ནང་བསྐྱོད་དང་བཅས་ "
+#~ "lastlog དྲན་ཐོ་ དཔར་བསྐྲུན་འབད།\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "ལག་ལེན་: passwd [གདམ་ཁ་ཚུ་] [ནང་བསྐྱོད་]\n"
+#~ "\n"
+#~ "གདམ་ཁ་ཚུ་:\n"
+#~ " -a, --all\t\t\t རྩིས་ཐོ་ཆ་མཉམ་གྱི་གུ་ ཆོག་ཡིག་གནས་ཚད་ སྙན་ཞུ་འབད།\n"
+#~ " -d, --delete\t\t\t མིང་བཏགས་ཡོད་པའི་རྩིས་ཐོའི་དོན་ལུ་ ཆོག་ཡིག་བཏོན་གཏང་།\n"
+#~ " -e, --expire\t\t\t མིང་བཏགས་ཡོད་པའི་རྩིས་ཐོའི་དོན་ལུ་ ཆོག་ཡིག་གི་དུས་ཡོལ་བང་བཙོང་།\n"
+#~ " -h, --help\t\t\t གྲོགས་རམ་འཕྲིན་དོན་འདི་བཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+#~ " -k, --keep-tokens\t\t དུས་ལས་ཡོལ་སོང་པ་ཅིན་རྐྱངམ་ཅིག་ ཆོག་ཡིག་སོར།\n"
+#~ " -i, --inactive INACTIVE\t ཆོག་ཡིག་འདི་ནུས་མེད་ལུ་ དུས་ཡོལ་\n"
+#~ "\t\t\t\t གི་ཤུལ་མར་ ནུས་མེད་སྦེ་གཞི་སྒྲིག་འབད།\n"
+#~ " -l, --lock\t\t\t མིང་བཏགས་ཡོད་པའི་རྩིས་ཐོ་ ལྡེ་མིག་རྐྱབས།\n"
+#~ " -n, --mindays MIN_DAYS\t ཆོག་ཡིག་ \n"
+#~ "\t\t\t\tའདི་ MIN_DAYSལུ་མ་བསྒྱུར་བའི་ཧེ་མ་ ཉིན་གྲངས་ཉུང་མཐའ་གཞི་སྒྲིག་འབད། -q, --quiet"
+#~ "\t\t\t ཁུ་སིམ་སིམ་གྱི་ཐབས་ལམ།\n"
+#~ " -r, --repository REPOSITORY\t REPOSITORYམཛོད་གནས་ནང་ལུ་ ཆོག་ཡིག་སོར།\n"
+#~ " -s, --status\t\t\t མིང་བཏགས་ཡོད་པའི་རྩིས་ཐོའི་གུ་ ཆོག་ཡིག་སྙན་ཞུ་འབད།\n"
+#~ " -u, --unlock\t\t\t མིང་བཏགས་ཡོད་པའི་རྩིས་ཐོ་འདི་ ལྡེ་མིག་ཕྱེ།\n"
+#~ " -w, --warndays WARN_DAYS\t WARN_DAYSལུ་ དུས་ཡོལ་ཉེན་བརྡའི་ཉིན་གྲངས་ གཞི་སྒྲིག་"
+#~ "འབད།\n"
+#~ " -x, --maxdays MAX_DAYS\t ཆོག་ཡིག་ \n"
+#~ "\t\t\t\tའདི་ MAX_DAYSལུ་ བསྒྱུར་བཅོས་མ་འབད་བའི་ཧེ་མ་ ཉིན་གྲངས་ཉུང་མཐའ་ གཞི་སྒྲིག་འབད།\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr "ལག་ལེན་:%s [-q] [-r] [-s] [passwd [གྱིབ་མ་]]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr "ལག་ལེན་:%s [-q] [-r] [-s] [passwd [གྱིབ་མ་]]\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "ལག་ལེན་པ་: id\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "ལག་ལེན་པ་: id\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "མ་ཤེས་པའི་ཨའི་ཌི་:%s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "ཤལ་མེད།\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force removal of files,\n"
+#~ " even if not owned by user\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -r, --remove remove home directory and mail spool\n"
+#~ "\n"
+#~ msgstr ""
+#~ "ལག་ལེན་: userdel [གདམ་ཁ་ཚུ་] ནང་བསྐྱོད་\n"
+#~ "\n"
+#~ "གདམ་ཁ་ཚུ་:\n"
+#~ " -f, --force\t\t\t ལག་ལེན་པ་གིས་བདག་དབང་མ་བཟུང་སྟེ་འབད་རུང་ ཡིག་སྣོད་བང་བཙོང་སྟེ་རྩ་"
+#~ "བསྐྲད་གཏང་།\n"
+#~ " -h, --help\t\t\t གྲོགས་རམ་འཕྲིན་དོན་འདི་བཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+#~ " -r, --remove\t\t\t ཁྱིམ་གྱི་སྣོད་ཐོ་དང་ཡིག་འཕྲིན་འཕྲལ་གསོག་རྩ་བསྐྲད་གཏང་།\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "ལག་ལེན་: usermod [གདམ་ཁ་ཚུ་] ནང་བསྐྱོད་\n"
+#~ "\n"
+#~ "གདམ་ཁ་ཚུ་:\n"
+#~ " -a, --append GROUP\t\t ལྷན་ཐབས་སྡེ་ཚན་ལུ་ ལག་ལེན་པ་མཇུག་བསྣོད་འབད། \n"
+#~ " -c, --comment COMMENT\t\t ཇི་ཨི་སི་ཨོ་ཨེསི་ ས་སྒོའི་བེ་ལུ་གསརཔ།\n"
+#~ " -d, --home HOME_DIR\t\t ལག་ལེན་པའི་རྩིས་ཐོ་གསརཔ་གི་དོན་ལུ་ ནང་བསྐྱོད་སྣོད་ཐོ་གསརཔ།\n"
+#~ " -e, --expiredate EXPIRE_DATE\t EXPIRE_DATEལུ་ རྩིས་ཐོའི་དུས་ཡོལ་ཚེས་གྲངས་ གཞི་སྒྲིག་"
+#~ "འབད།\n"
+#~ " -f, ---inactive INACTIVE\t INACTIVEལུ་ དུས་ཡོལ་ \n"
+#~ " \t\t\t\tགི་ཤུལ་མ་ ཆོག་ཡིག་ནུས་མེད་སྦེ་ གཞི་སྒྲིག་འབད།\n"
+#~ " -g, ---gid GROUP\t\t འགོ་ཐོག་ནང་བསྐྱོད་སྡེ་ཚན་གསརཔ་སྦེ་ སྡེ་ཚན་འདི་བང་ཅན་སྦེ་ལག་ལེན་"
+#~ "འཐབ།\n"
+#~ " -G, --groups GROUPS\t\t ལྷན་ཐབས་སྡེ་ཚན་གྱི་ཐོ་ཡིག\n"
+#~ " -h, --help\t\t\t གྲོགས་རམ་འཕྲིན་དོན་འདི་བཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+#~ " -l, --login LOGIN\t\t ནང་བསྐྱོད་མིང་གི་བེ་ལུ་གསརཔ།\n"
+#~ " -L, --lock\t\t\t ལག་ལེན་པའི་རྩིས་ཐོ་ ལྡེ་མིག་རྐྱབས།\n"
+#~ " -m, --move-home\t\t ཁྱིམ་གྱི་སྣོད་ཐོའི་ནང་དོན་ཚུ་ \n"
+#~ " \t\t\t\t གནས་ཁོངས་ (-dདང་རྐྱངམ་ཅིག་)གསརཔ་ལུ་སྤོ།\n"
+#~ " -o, --non-unique\t\t ཡུ་ཨའི་ཌི་ རྫུན་མ་(ཐུན་མོང་)ལག་ལེན་གྱི་ཐོག་ལས་ འབད་བཅུག\n"
+#~ " -p, --password PASSWORD\t ཆོག་ཡིག་གསརཔ་གི་དོན་ལུ་ གསང་བཟོས་ཆོག་ཡིག་ལག་ལེན་འཐབ།\n"
+#~ " -s, --shell SHELL\t\t ལག་ལེན་པའི་རྩིས་ཐོའི་དོན་ལུ་ ནང་བསྐྱོད་ཤལ་གསརཔ།\n"
+#~ " -u, --uid UID\t\t\t ལག་ལེན་པའི་རྩིས་ཐོའི་དོན་ལུ་ ཡུ་ཨི་ཌི་གསརཔ།\n"
+#~ " -U, --unlock\t\t\t ལག་ལེན་པའི་རྩིས་ཐོ་ ལྡེ་མིག་ཕྱེ།\n"
+#~ "\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s: ཟུར་རྟགས་ཚུ་གྲ་སྒྲིག་མིན་འདུག\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group edit group database\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -p, --passwd edit passwd database\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow edit shadow or gshadow database\n"
+#~ " -u, --user which user's tcb shadow file to edit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "ལག་ལེན་: vipw [གདམ་ཁ་ཚུ་]\n"
+#~ "\n"
+#~ "གདམ་ཁ་ཚུ་:\n"
+#~ " -g, --group\t\t\t སྡེ་ཚན་གནད་སྡུད་གཞི་རྟེན་ ཞུན་དག་འབད།\n"
+#~ " -h, --help\t\t\t གྲོགས་རམ་འཕྲིན་དོན་འདི་བཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+#~ " -p, --passwd\t\t\t ཆོག་ཡིག་གནད་སྡུད་གཞི་རྟེན་ ཞུན་དག་འབད།\n"
+#~ " -q, --quiet\t\t\t ཁུ་སིམ་སིམ་གྱི་ཐབས་ལམ།\n"
+#~ " -s, --shadow\t\t\t གྱིབ་མ་ ཡང་ན་ gshadowགནད་སྡུད་གཞི་རྟེན་ ཞུན་དག་འབད།\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "ལག་ལེན་: %s [ཨིན་པུཊི་]\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s: %sགསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s: %s chownའབད་མི་ཚུགས།\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all display faillog records for all users\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -l, --lock-time SEC after failed login lock account to SEC "
+#~ "seconds\n"
+#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
+#~ " -r, --reset reset the counters of login failures\n"
+#~ " -t, --time DAYS display faillog records more recent than "
+#~ "DAYS\n"
+#~ " -u, --user LOGIN display faillog record or maintains "
+#~ "failure\n"
+#~ " counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ " options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "ལག་ལེན་པ་:faillog [གདམ་ཁ་ཚུ་]\n"
+#~ "\n"
+#~ "གདམ་ཁ་ཚུ་:\n"
+#~ " -a, --all\t\t\t ལག་ལེན་ཆ་མཉམ་གྱི་དོན་ལུ་ faillog དྲན་ཐོ་ཚུ་བཀྲམ་སྟོན་འབད།\n"
+#~ " -h, --help\t\t\t གྲོགས་རམ་འཕྲིན་དོན་འདི་ བཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+#~ " -l, --lock-time SEC\t\t ནང་བསྐྱོད་འཐུས་ཤོར་བྱུང་བའི་ཤུལ་ལུ་ SECདཀར་ཆག་ཚུ་ལུ་ ལྡེ་མིག་"
+#~ "རྩིས་ཐོ།\n"
+#~ " -m, --maximum MAX\t\t MAX ལུ་ འཐུས་ཤོར་བྱུང་ཡོད་པའི་ནང་བསྐྱོད་གདོང་ལན་ གཞི་སྒྲིག་འབད།\n"
+#~ " -r, --reset\t\t\t ནང་བསྐྱོད་འཐུས་ཤོར་ཚུ་གི་གདོང་ལན་ སླར་གཞི་སྒྲིག་འབད།\n"
+#~ " -t, --time DAYS\t\t DAYSལས་ལྷག་པའི་འཕྲལ་གྱི་ཕེཡེ་ལོག་དྲན་ཐོ་ཚུ་ བཀྲམ་སྟོན་འབད།\n"
+#~ " -u, --user LOGIN\t\t ཕེ་ཡེ་ལོག་དྲན་ཐོ་བཀྲམ་སྟོན་འབད་ ཡངན་ འཐུས་ཤོར་གདོང་ལན་\n"
+#~ "\t\t\t\tཚུ་ རྒྱུན་སྐྱོང་འབདཝ་ཨིནམ་དང་ ལག་ལེན་པའི་དོན་ལུ་ ནང་བསྐྱོད་ཀྱི་ཐོག་ལས་ \n"
+#~ "\t\t\t\tརྐྱངམ་ཅིག་ བཅད་མཚམས་( -r, -m ཡང་ན་ -l optionsདང་བཅས་ལག་ལེན་འཐབ་ཡོད་པ་"
+#~ "ཅིན་)བཟོཝ་ཨིན།\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force exit with success status if the\n"
+#~ " specified group already exists\n"
+#~ " -g, --gid GID use GID for the new group\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique allow create group with duplicate\n"
+#~ " (non-unique) GID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new group\n"
+#~ " -r, --system create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "ལག་ལེན་:groupadd [གདམ་ཁ་ཚུ་]སྡེ་ཚན།\n"
+#~ "\n"
+#~ "གདམ་ཁ་ཚུ་:\n"
+#~ " -f, --force\t\t གསལ་བཀོད་འབད་ཡོད་པའི་ \n"
+#~ "\t\t\t\t སྡེ་ཚན་འདི་ཧེ་མ་ལས་ཡོད་པ་ཅིན་ མཐར་འཁྱོལ་གནས་ཚད་ཀྱི་ཐོག་ལས་ བང་ཅན་སྦེ་ཕྱིར་འཐོན་"
+#~ "འབད།\n"
+#~ " -g, --gid GID\t\t སྡེ་ཚན་གསརཔ་གི་དོན་ལུ་ ཇི་ཨིའ་ཌི་ལག་ལེན་འཐབ།\n"
+#~ " -h, --help\t\t\t གྲོགས་རམ་འཕྲིན་དོན་འདི་བཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+#~ " -k, --key KEY=VALUE\t\t /etc/login.defs སྔོན་སྒྲིག་ཚུ་ ཟུར་བཞག་འབདཝ་ཨིན།\n"
+#~ " -o, --non-unique\t\t ངོ་བཤུས་ \n"
+#~ " \t\t\t\t(ཐུན་མོང་པ་)ཇི་ཨའི་ཌི་དང་བཅས་ སྡེ་ཚན་གསར་བསྐྲུན་འབད་བཅུག\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --gid GID force use new GID by GROUP\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "ལག་ལེན་:groupadd [གདམ་ཁ་ཚུ་]སྡེ་ཚན།\n"
+#~ "\n"
+#~ "གདམ་ཁ་ཚུ་:\n"
+#~ " -f, --force\t\t གསལ་བཀོད་འབད་ཡོད་པའི་ \n"
+#~ "\t\t\t\t སྡེ་ཚན་འདི་ཧེ་མ་ལས་ཡོད་པ་ཅིན་ མཐར་འཁྱོལ་གནས་ཚད་ཀྱི་ཐོག་ལས་ བང་ཅན་སྦེ་ཕྱིར་འཐོན་"
+#~ "འབད།\n"
+#~ " -g, --gid GID\t\t སྡེ་ཚན་གསརཔ་གི་དོན་ལུ་ ཇི་ཨིའ་ཌི་ལག་ལེན་འཐབ།\n"
+#~ " -h, --help\t\t\t གྲོགས་རམ་འཕྲིན་དོན་འདི་བཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+#~ " -k, --key KEY=VALUE\t\t /etc/login.defs སྔོན་སྒྲིག་ཚུ་ ཟུར་བཞག་འབདཝ་ཨིན།\n"
+#~ " -o, --non-unique\t\t ངོ་བཤུས་ \n"
+#~ " \t\t\t\t(ཐུན་མོང་པ་)ཇི་ཨའི་ཌི་དང་བཅས་ སྡེ་ཚན་གསར་བསྐྲུན་འབད་བཅུག\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~ " home directory\n"
+#~ " -c, --comment COMMENT set the GECOS field for the new user "
+#~ "account\n"
+#~ " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~ " -D, --defaults print or save modified default useradd\n"
+#~ " configuration\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP for the new user account\n"
+#~ " -G, --groups GROUPS list of supplementary groups for the new\n"
+#~ " user account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -l, --no-log-init do not add the user to the lastlog and\n"
+#~ " faillog databases\n"
+#~ " -m, --create-home create home directory for the new user\n"
+#~ " account\n"
+#~ " -M, --no-create-home do not create user's home directory\n"
+#~ " (overrides /etc/login.defs)\n"
+#~ " -N, --no-user-group do not create a group with the same name "
+#~ "as\n"
+#~ " the user\n"
+#~ " -o, --non-unique allow create user with duplicate\n"
+#~ " (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new user\n"
+#~ " account\n"
+#~ " -r, --system create a system account\n"
+#~ " -s, --shell SHELL the login shell for the new user account\n"
+#~ " -u, --uid UID force use the UID for the new user "
+#~ "account\n"
+#~ " -U, --user-group create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "ལག་ལེན་: useradd [གདམ་ཁ་ཚུ་] ནང་བསྐྱོད་\n"
+#~ "\n"
+#~ "གདམ་ཁ་ཚུ་:\n"
+#~ " -b, --base-dir BASE_DIR\t ལག་ལེན་པའི་རྩིས་ཐོ་གསརཔ་ \n"
+#~ "\t\t\t\t ཁྱིམ་གྱི་སྣོད་ཐོའི་དོན་ལུ་ གཞི་རྟེན་སྣོད་ཐོ།\n"
+#~ " -c, --comment COMMENT\t\t ལག་ལེན་པའི་རྩིས་ཐོ་གསརཔ་གི་དོན་ལུ་ ཇི་ཨི་སི་ཨོ་ཨེསི་ས་སྒོ་ གཞི་"
+#~ "སྒྲིག་འབད།\n"
+#~ " -d, --home-dir HOME_DIR\t ལག་ལེན་པའི་རྩིས་ཐོ་གསརཔ་གི་དོན་ལུ་ ཁྱིམ་གྱི་སྣོད་ཐོ།\n"
+#~ " -D, --defaults\t\t ལེགས་བཅོས་འབད་ཡོད་པའི་སྔོན་སྒྲིག་ useradd\n"
+#~ "\t\t\t\t རིམ་སྒྲིག་འདི་ དཔར་བསྐྲུན་འབད་ཡང་ན་ སྲུངས། \n"
+#~ " -e, --expiredate EXPIRE_DATE\t EXPIRE_DATEལུ་ རྩིས་ཐོའི་དུས་ཡོལ་ཚེས་གྲངས་ གཞི་"
+#~ "སྒྲིག་འབད།\n"
+#~ " -f, --inactive INACTIVE\t དུས་ཡོལ་ \n"
+#~ "\t\t\t\t གི་ཤུལ་མར་ INACTIVEལུ་ ཆོག་ཡིག་ནུས་མེད་སྦེ་གཞི་སྒྲིག་འབད།\n"
+#~ " -g, --gid GROUP\t\t ལག་ལེན་པའི་རྩིས་ཐོ་གསརཔ་གི་དོན་ལུ་ བང་བཅོང་ཐོག་ལས་ སྡེ་ཚན་ལག་ལེན་"
+#~ "འཐབ།\n"
+#~ " -G, --groups GROUPS\t\t \n"
+#~ " \t\t\t\tལག་ལེན་པའི་རྩིས་ཐོ་གསརཔ་གི་དོན་ལུ་ ལྷན་ཐབས་སྡེབ་ཚན་གྱི་ཐོ་ཡིག\n"
+#~ " -h, --help\t\t\t གྲོགས་རམ་འཕྲིན་དོན་འདི་བཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+#~ " -k, --skel SKEL_DIR \t\t ཐབས་གཞན་སི་ཀེལ་སྣོད་ཐོ་ཅིག་ གསལ་བཀོད་འབད།\n"
+#~ " -K, --key KEY=VALUE\t\t /etc/login.defs སྔོན་སྒྲིག་ ཟུར་བཞག་འབདཝ་ཨིན།\n"
+#~ " -m, --create-home\t\t ལག་ལེན་པ་ \n"
+#~ " \t\t\t\tརྩིས་ཐོ་གསརཔ་གི་དོན་ལུ་ ཁྱིམ་གྱི་སྣོད་ཐོ་གསར་བསྐྲུན་འབད།\n"
+#~ " -o, --non-unique\t\t \t\t\t\t(ཐུན་མོང་) ཡུ་ཨའི་ཌི་ རྫུན་མ་\n"
+#~ "གི་ཐོག་ལས་ ལག་ལེན་པ་གསར་བསྐྲུན་འབད་བཅུག\n"
+#~ " -p, --password PASSWORD\t ལག་ལེན་པ་གསརཔ་\n"
+#~ " \t\t\t\tརྩིས་ཐོའི་དོན་ལུ་ གསང་བཟོས་ཆོག་ཡིགལག་ལེན་འཐབ།\n"
+#~ " -s, --shell SHELL\t\t ལག་ལེན་པའི་རྩིས་ཐོ་གསརཔ་གི་དོན་ལུ་ ནང་བསྐྱོད་ཀྱི་ཤལ།\n"
+#~ " -u, --uid UID\t\t\t ལག་ལེན་པའི་རྩིས་ཐོ་གསརཔ་གི་དོན་ལུ་ ཡུ་ཨའི་ཌི་འདི་ བང་ཅན་སྦེ་ལག་"
+#~ "ལེན་འཐབ།\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "ཆོག་ཡིག་དུས་ཡོལ་ནིའི་དོན་ལས་་གཞི་སྒྲིག་འབད་ཡོདཔ།"
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་ ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཆོག་ཡིག་ཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མ་ཚུགས།\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཆོག་ཡིག་ཡིག་སྣོད་ ཁ་ཕྱེ་མ་ཚུགས།\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཆོག་ཡིག་ཡིག་སྣོད་ ལོག་འབྲི་མ་ཚུགས།\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་ ལོག་འབྲི་མ་ཚུགས།\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཆོག་ཡིག་ཡིག་སྣོད་ དུས་མཐུན་བཟོ་མ་ཚུགས།\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tམིང་ཆ་ཚང་: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tཁང་མིག་ཨང་: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tལཱ་གི་བརྒྱུད་འཕྲིན་: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tཁྱིམ་གྱི་བརྒྱུད་འཕྲིན་: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "ཆོག་ཡིག་ཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མི་ཚུགས་ ཤུལ་ལས་ལོག་སྟེ་འབད་རྩོལ་སྐྱེད།\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "ཆོག་ཡིག་ཐོ་བཀོད་དུས་མཐུན་འབདཝ་ད་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "ཆོག་ཡིག་ཡིག་སྣོད་བསྒྱུར་བཅོས་ཚུ་ དང་ལེན་འབད་མི་ཚུགས།\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "ཆོག་ཡིག་ཡིག་སྣོད་ ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: སྡེ་ཚན་ཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: gshadowཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཡིག་སྣོད་ ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཡིག་སྣོད་དུས་མཐུན་བཟོ་བའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: སྡེ་ཚན་ཐོ་བཀོད་དུས་མཐུན་བཟོ་བའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: གྲལ་ཐིག་ %d: མ་ཤེས་པའི་སྡེ་ཚན་ %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: གྲལ་ཐིག་ %d: ཐོ་བཀོད་དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཡིག་སྣོད་དུས་མཐུན་བཟོ་བའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་དུས་མཐུན་བཟོ་བའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: གྲལ་ཐིག་ %d: མ་ཤེས་པའི་ལག་ལེན་པ་%s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: གྲལ་ཐིག་ %d: ཆོག་ཡིག་ཐོ་བཀོད་ དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: མ་ཤེས་པའི་ལག་ལེན་པ།\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "མ་ཤེས་པའི་ལག་ལེན་པ་:%s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "ལག་ལེན་པ་: %s [-r|-R] སྡེ་ཚན།\n"
+
+#~ msgid " %s [-a user] group\n"
+#~ msgstr " %s [-a user] སྡེ་ཚན།\n"
+
+#~ msgid " %s [-d user] group\n"
+#~ msgstr " %s [-d user] སྡེ་ཚན།\n"
+
+#~ msgid " %s [-A user,...] [-M user,...] group\n"
+#~ msgstr " %s [-A user,...] [-M user,...] སྡེ་ཚན།\n"
+
+#~ msgid " %s [-M user,...] group\n"
+#~ msgstr " %s [-M user,...] སྡེ་ཚན།\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: གྱིབ་མ་ལྡེ་མིག་ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཡིག་སྣོད་ལོག་འབྲི་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: ཡིག་སྣོད་ལྡེ་མིག་ཕྱེ་མིཚུགས།\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: ཐོ་བཀོད་ དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: གྱིབ་མའི་ཐོ་བཀོད་ དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "མ་ཤེས་པའི་སྡེ་ཚན་:%s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: ཡིག་སྣོད་ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཡིག་སྣོད་ ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "ཁྱོད་ག་སྨོ?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: མ་ཤེས་པའི་འཐུས་མི་ %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: སྡེ་ཚན་ཐོ་བཀོད་གསརཔ་ཁ་སྐོང་འབད་བའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: སྡེ་ཚན་ཡིག་སྣོད་ ལོག་འབྲི་མི་ཚུགས།\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: གྱིབ་མའི་སྡེ་ཚན་ཡིག་སྣོད་ ལོག་འབྲི་མི་ཚུགས།\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: སྡེ་ཚན་ཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མ་ཚུགས།\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: སྡེ་ཚན་ཡིག་སྣོད་ ཁ་ཕྱེ་མ་ཚུགས།\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: གྱིབ་མའི་སྡེ་ཚན་ཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མ་ཚུགས།\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: གྱིབ་མའི་སྡེ་ཚན་ཡིག་སྣོད་ ཁ་ཕྱེ་མ་ཚུགས།\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: ཇི་ཨའི་ཌི་ %uའདི་ ཐུན་མོང་པ་ཨིན།\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: སྡེ་ཚན་ཐོ་བཀོད་རྩ་བསྐྲད་གཏང་པའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: གྱིབ་མའི་སྡེ་ཚན་ཐོ་བཀོད་རྩ་བསྐྲད་གཏང་པའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: ལག་ལེན་པའི་གཞི་རིམ་སྡེ་ཚན་ རྩ་བསྐྲད་གཏང་མི་ཚུགས།\n"
+
+#, fuzzy
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "%s: པི་ཨེ་ཨེམ་ བདེན་བཤད་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "%s: སྡེ་ཚན་ཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མ་ཚུགས།\n"
+
+#, fuzzy
+#~ msgid "Cannot close group file\n"
+#~ msgstr "%s: སྡེ་ཚན་ཡིག་སྣོད་ ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s འདི་ /etc/groupནང་མི་འཐོབ།\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u འདི་ ཐུན་མོང་གི་ཇི་ཨའི་ཌི་མེན།\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s འདི་ ཐུན་མོང་གི་མིང་མེན།\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་འདི་ ལོག་འབྲི་མི་བཏུབ།\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་འདི་ ལྡེ་མིག་བརྐྱབ་མ་ཚུགས།\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་ ཁ་ཕྱེ་མ་ཚུགས།\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: %sགི་དོན་ལུ་ གྱིབ་མའི་ཐོ་བཀོད་ དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: སྡེ་ཚན་ %sགི་དོན་ལུ་ ཐོ་བཀོད་དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: གྱིབ་མའི་སྡེ་ཚན་ཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: གྱིབ་མའི་སྡེ་ཚན་ཡིག་སྣོད་ ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: གྱིབ་མའི་སྡེ་ཚན་ %sབསྐྲད་གཏང་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: གྱིབ་མའི་སྡེ་ཚན་ཡིག་སྣོད་ དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: གྱིབ་མའི་སྡེ་ཚན་ཡིག་སྣོད་ བཏོན་གཏང་མི་ཚུགས།\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "མ་ཤེས་པའི་ ཇི་ཨའི་ཌི་:%u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "མ་ཤེས་པའི་ ཇི་ཨའི་ཌི་:%lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: སྡེ་ཚན་ %sམེད།\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: ལག་ལེན་པ་ %sའདི་ མེད།\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: ནུས་མེད་ལག་ལེན་པའི་མིང་ '%s'།\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: /etc/passwd ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: /etc/passwd ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: /etc/passwd ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: /etc/passwd ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: ཡིག་སྣོད་ཚུ་ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: %sགི་དོན་ལུ་ ཆོག་ཡིག་ཐོ་བཀོད་དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་ ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: %sགི་དོན་ལུ་ གྱིབ་མའི་ཐོ་བཀོད་ རྩ་བསྐྲད་གཏང་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་ དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: ལག་ལེན་པ་%sགི་དོན་ལུ་ ཐོ་བཀོད་དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཆོག་ཡིག་ཡིག་སྣོད་ བཏོན་གཏང་མི་ཚུགས།\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: མ་ཤེས་པའི་ཇི་ཨའི་ཌི་ %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: མ་ཤེས་པའི་སྡེ་ཚན་ %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: དུས་མཐུན་gshadowནང་ལུ་ དྲན་ཚད་ལས་བརྒལ་བ།\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཆོག་ཡིག་ཡིག་སྣོད་འདི་ ལོག་འབྲི་མི་བཏུབ།\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཆོག་ཡིག་ཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཆོག་ཡིག་ཡིག་སྣོད་ ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: སྡེ་ཚན་ཡིག་སྣོད་འདི་ ལྡེ་མིག་བརྐྱབ་པའི་བསྒང་ལུ་འཛོལ་བ།\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: སྡེ་ཚན་ཡིག་སྣོད་ཁ་ཕྱེ་བའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: གྱིབ་མའི་སྡེ་ཚན་ཡིག་སྣོད་ལྡེ་མིག་བརྐྱབ་པའི་བསྒང་ལུ་ འཛོལབ།\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: གྱིབ་མའི་སྡེ་ཚན་ཡིག་སྣོད་ཁ་ཕྱེ་བའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཐོ་བཀོད་གསརཔ་ཁ་སྐོང་འབད་བའི་སྐབས་ལུ་འཛོལ་བ།\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: གྱིབ་མའི་ཆོག་ཡིག་ཐོ་བཀོད་གསརཔ་ ཁ་སྐོང་འབད་བའི་སྐབས་ལུ་འཛོལ་བ།\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s: ཉེན་བརྡ་: CREATE_HOME རྒྱབ་སྐྱོར་མ་འབད་ དེའི་ཚབ་ལུ་ -mལག་ལེན་འཐབ་གནང་།\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: སྡེ་ཚན་ཐོ་བཀོད་དུས་མཐུན་བཟོ་བའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: སྡེ་ཚན་ཐོ་བཀོད་དུས་མཐུན་བཟོ་བའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: སྡེ་ཚན་ཡིག་སྣོད་ ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: གྱིབ་མའི་སྡེ་ཚན་ཡིག་སྣོད་ ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཐོ་བཀོད་བཏོན་གཏང་པའི་སྐབས་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: གྱིབ་མའི་ཆོག་ཡིག་ཡིག་ཐོ་བཀོད་བོཏན་གཏང་པའི་སྐབས་ལུ་ འཛོལ་བ།\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: སྡེ་ཚན་ཐོ་བཀོད་གསརཔ་ཁ་སྐོང་འབད་བའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %luའདི་ ཐུན་མོང་ཨིན།\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཐོ་བཀོད་སོར་བའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཐོ་བཀོད་རྩ་བསྐྲད་གཏང་པའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: གྱིབ་མའི་ཆོག་ཡིག་ཐོ་བཀོད་རྩ་བསྐྲད་གཏང་པའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: ཐུན་མོང་མ་ཡིན་པའི་ ཇི་ཨའི་ཌི་འཐོབ་མི་ཚུགས།\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr "'%.200s'ནང་ལས་ '%.100s'གུ"
+
+#~ msgid " on '%.100s'"
+#~ msgstr "'%.100s'གུ"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: གྲལ་ཐིག་ %d: ཡུ་ཨའི་ཌི་ གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: མིང་ %s འདི་ ཐུན་མོང་པ་ཨིན།\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ " -h, --help\t\tdisplay this help message and exit\n"
+#~ " -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "ལག་ལེན་:chgpasswd [གདམ་ཁ་ཚུ་]\n"
+#~ "གདམ་ཁ་ཚུ་:\n"
+#~ " -e, --encrypted\t བཀྲམ་སྤེལ་འབད་ཡོད་པའི་ཆོག་ཡིག་ཚུ་ གསང་བ་བཟོ་ཡོདཔ།\n"
+#~ " -h, --help\t\t གྲོགས་རམ་འཕྲིན་དོན་འདི་ མཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+#~ " -m, --md5\t\t བཀྲམ་སྟོན་\n"
+#~ "འབད་ཡོད་པའི་\t\t\t ཆོག་ཡིག་ཚུ་གསང་བཟོས་མེན་པ་ཅིན་ ཌི་ཨི་ཨེསི་གི་ཚབ་ལུ་ ཨེམ་ཌི་ ༥ གསང་ ལག་"
+#~ "ལེན་འཐབ།\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "ཆོག་ཡིག་ཡིག་སྣོད་མེད།\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "དགོངསམ་མ་ཁྲེལ།\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "དགོསངམ་མ་ཁྲེལ་ %s གི་དོན་ལུ་ ཆོག་ཡིག་འདི་ད་རུང་ཡང་སོར་མི་བཏུབ།\n"
+
+#~ msgid "Sorry."
+#~ msgstr "དགོངསམ་མ་ཁྲེལ།"
diff --git a/po/el.gmo b/po/el.gmo
new file mode 100644
index 0000000..b87dbfa
--- /dev/null
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
new file mode 100644
index 0000000..1c65e4a
--- /dev/null
+++ b/po/el.po
@@ -0,0 +1,4037 @@
+# translation of shadow_po_el.po to Greek
+# Shadow Password Suite
+# Greek Translation by Nikos Mavroyanopoulos
+# Thanks to Simos Xenitelis (S.Xenitellis@rhbnc.ac.uk) for his
+# comments about making this translation better.
+# Kostas Papadimas <pkst@gnome.org>, 2005.
+# Konstantinos Margaritis <markos@debian.org>, 2006.
+# Thomas Vasileiou <thomas-v@wildmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow_po_el\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2012-01-21 00:22+0200\n"
+"Last-Translator: Thomas Vasileiou <thomas-v@wildmail.com>\n"
+"Language-Team: Greek <debian-l10n-greek@lists.debian.org>\n"
+"Language: el\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: KBabel 1.10.2\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "η μέθοδος κρυπτογράφησης δεν υποστηρίζεται από το libcrypt? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr "λάθος διαμόρφωση - δεν μπορεί να αναλυθεί η τιμή %s : '%s'"
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Αδυναμία δέσμευσης χώρου για πληροφορίες διαμόρφωσης.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"σφάλμα διαμόρφωσης - άγνωστο αντικείμενο '%s' (ειδοποιήστε το διαχειριστή)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr "%s: το nscd δεν τερμάτισε κανονικά (σήμα %d)\n"
+
+#, fuzzy, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr "%s: το ncsd τερμάτισε με κατάσταση εξόδου %d"
+
+msgid "Password: "
+msgstr "Συνθηματικό: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Του %s το Συνθηματικό: "
+
+#, fuzzy
+#| msgid "Cannot open audit interface - aborting.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "Αδυναμία εγκαθίδρυσης διεπαφής ελέγχου - ματαίωσης.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr "[libsemanage]: %s\n"
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr "Δεν μπορώ να δημιουργήσω διαχειριστή του SELinux\n"
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr "Η πολιτική του SELinux δεν διαχειρίζεται\n"
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr "Αδυναμία ανάγνωσης της αποθηκευμένης πολιτικής του SELinux\n"
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr "Αδυναμία δημιουργίας σύνδεση διαχείρισης του SELinux\n"
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr "Αδυναμία εκκίνησης συναλλαγής SELinux\n"
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr "Αδυναμία ανάκτησης του χρήστη SE για το %s\n"
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr "Αδυναμία ρύθμισης του πεδίου SE για το %s\n"
+
+#, c-format
+msgid "Could not set sename for %s\n"
+msgstr "Αδυναμία ρύθμισης του ονόματος SE για το χρήστη %s\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr "Αδυναμία τροποποίησης της χαρτογράφησης σύνδεσης για το χρήστη %s\n"
+
+#, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "Αδυναμία δημιουργίας χαρτογράφησης σύνδεσης SELinux για το χρήστη %s\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr "Αδυναμία ρύθμισης του ονόματος χρήστη %s\n"
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr "Αδυναμία ρύθμισης του SELinux χρήστη %s\n"
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr "Αδυναμία προσθήκης χαρτογράφηση σύνδεσης για το χρήστη %s\n"
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr "Αδυναμία εκκίνησης της διαχείρισης SELinux\n"
+
+#, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "Αδυναμία δημιουργίας κλειδιού για το χρήστη SELinux\n"
+
+#, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "Ο SELinux χρήστης δεν μπορεί να επαληθευτεί\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr "Αδυναμία τροποποίησης της χαρτογράφησης χρήστη SELinux\n"
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr "Αδυναμία προσθήκης της χαρτογράφησης χρήστη SELinux\n"
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr "Αδυναμία παράδοσης της συναλλαγής SELinux\n"
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+"Δεν έχει οριστεί χαρτογράφηση σύνδεσης για τον χρήστη %s, είναι ΟΚ εάν "
+"χρησιμοποιηθεί η προκαθορισμένη χαρτογράφηση\n"
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+"Η χαρτογράφηση σύνδεσης για το χρήστη %s καθορίζεται από το πλαίσιο της "
+"πολιτική και δεν μπορεί να διαγραφεί\n"
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr "Αδυναμία διαγραφής της χαρτογράφησης σύνδεσης για το χρήστη %s"
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: δεν υπάρχει ελεύθερη μνήμη\n"
+
+#, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: Αδυναμία εκτέλεσης του stat %s: %s\n"
+
+#, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: το %s δεν είναι ούτε κατάλογος ούτε συμβολικός σύνδεσμος\n"
+
+#, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: Αδυναμία ανάγνωσης του συμβολικού συνδέσμου %s: %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr "%s: Ύποπτα μεγάλος συμβολικός σύνδεσμος: %s\n"
+
+#, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: Αδυναμία δημιουργίας καταλόγου %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: Αδυναμία αλλαγής ιδιοκτήτη του %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: Αδυναμία αλλαγής τρόπο λειτουργίας του %s: %s\n"
+
+#, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: αποσύνδεση: %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: Αδυναμία διαγραφής του καταλόγου %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: Αδυναμία μετονομασίας του %s σε %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: Αδυναμία διαγραφής %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: Αδυναμία δημιουργίας συμβολικού συνδέσμου %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: Αδυναμία αλλαγή ιδιοκτητών του %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: Αδυναμία εκτέλεσης του lstat %s: %s\n"
+
+#, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr ""
+"%s: Προειδοποίηση, δεν υπάρχει tcb αρχείο σκιωδών συνθηματικών για το χρήστη "
+"%s.\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+"%s: Επείγον: το tcb αρχείο σκιωδών συνθηματικών του %s δεν φέρει το σύνηθες "
+"st_nlink=1.\n"
+"Ο λογαριασμός θα παραμείνει κλειδωμένος.\n"
+
+#, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: mkdir: %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: Αδυναμία ανοίγματος αρχείου %s: %s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Προειδοποίηση: άγνωστη ομάδα %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Προειδοποίηση: Πολλές ομάδες\n"
+
+msgid "Your password has expired."
+msgstr "Το συνθηματικό σας έχει λήξει."
+
+msgid "Your password is inactive."
+msgstr "Το συνθηματικό σας είναι ανενεργό."
+
+msgid "Your login has expired."
+msgstr "Ο κωδικός εισόδου σας έχει λήξει."
+
+msgid " Contact the system administrator."
+msgstr " Επικοινωνήστε με τον διαχειριστή του συστήματος."
+
+msgid " Choose a new password."
+msgstr " Επιλέξτε ένα νέο συνθηματικό."
+
+msgid "You must change your password."
+msgstr "Πρέπει να αλλάξετε το συνθηματικό σας."
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Το συνθηματικό σας θα λήξει σε %ld μέρες.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Το συνθηματικό σας θα λήξει αύριο."
+
+msgid "Your password will expire today."
+msgstr "Το συνθηματικό σας θα λήξει σήμερα."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "Αδυναμία εγκαθίδρυσης διεπαφής ελέγχου - ματαίωσης.\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Αδυναμία αλλαγής ιδιοκτήτη ή τρόπο λειτουργίας του tty stdin: %s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: Αποτυχία ξεκλειδώματος %s\n"
+
+#, c-format
+msgid "%s: "
+msgstr "%s: "
+
+msgid ": "
+msgstr ": "
+
+msgid "Environment overflow\n"
+msgstr "Υπερχείλιση περιβάλλοντος\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Δεν μπορείτε να αλλάξετε το $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d αποτυχία από την τελευταία είσοδο.\n"
+" Η τελευταία ήταν στις %s στο %s.\n"
+msgstr[1] ""
+"%d αποτυχίες από την τελευταία είσοδο.\n"
+" Η τελευταία ήταν στις %s στο %s.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: Μη έγκυρη διαμόρφωση: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr "%s: Μη έγκυρη διαμόρφωση: GID_MIN (%lu), GID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "%s: αποτυχία εκχώρησης μνήμης: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: αδυναμία λήψης μοναδικού GID συστήματος (δεν υπάρχουν διαθέσιμα GID)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: αδυναμία λήψης μοναδικού GID (δεν υπάρχουν διαθέσιμα GID)\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: αδυναμία λήψης μοναδικού GID (δεν υπάρχουν διαθέσιμα GID)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+"%s: Μη έγκυρη διαμόρφωση: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: αδυναμία δημιουργίας του χρήστη\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+"%s: Μη έγκυρη διαμόρφωση: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: αδυναμία δημιουργίας του χρήστη\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: Μη έγκυρη διαμόρφωση: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr "%s: Μη έγκυρη διαμόρφωση: UID_MIN (%lu), UID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: αδυναμία λήψης μοναδικού UID συστήματος (δεν υπάρχουν διαθέσιμα UID)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: αδυναμία λήψης μοναδικού UID (δεν υπάρχουν διαθέσιμα UID)\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: αδυναμία λήψης μοναδικού UID (δεν υπάρχουν διαθέσιμα UID)\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Authentication failure\n"
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: Αποτυχία εξακρίβωσης\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: Μη έγκυρο πεδίο '%s'\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Could not set name for %s\n"
+msgid "%s: Could not seteuid to %d\n"
+msgstr "Αδυναμία ρύθμισης του ονόματος χρήστη %s\n"
+
+#, fuzzy, c-format
+#| msgid "Could not set name for %s\n"
+msgid "%s: Could not set caps\n"
+msgstr "Αδυναμία ρύθμισης του ονόματος χρήστη %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't open file\n"
+msgid "%s: snprintf failed!\n"
+msgstr "%s: αδυναμία ανοίγματος του αρχείου\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: γραμμή %d: αποτυχία αλλαγής ιδιοκτήτη %s (chown): %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: γραμμή %d: αποτυχία αλλαγής ιδιοκτήτη %s (chown): %s\n"
+
+msgid "Too many logins.\n"
+msgstr "Πολλές είσοδοι στο σύστημα.\n"
+
+msgid "You have new mail."
+msgstr "Έχετε νέα γράμματα."
+
+msgid "No mail."
+msgstr "Κανένα γράμμα."
+
+msgid "You have mail."
+msgstr "Έχετε γράμματα."
+
+msgid "no change"
+msgstr "καμιά αλλαγή"
+
+msgid "a palindrome"
+msgstr "μια παλινδρόμηση"
+
+msgid "case changes only"
+msgstr "αλλαγές κεφαλαίων/πεζών μόνο"
+
+msgid "too similar"
+msgstr "αρκετά παρόμοιο"
+
+msgid "too simple"
+msgstr "πολύ απλό"
+
+msgid "rotated"
+msgstr "κυλιόμενο"
+
+msgid "too short"
+msgstr "πολύ σύντομο"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Κακό συνθηματικό: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "συνθηματικό: pam_start() απέτυχε, σφάλμα %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "συνθηματικό: %s\n"
+
+msgid "passwd: password unchanged\n"
+msgstr "passwd: Το συνθηματικό παρέμεινε όπως είχε\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: το συνθηματικό ενημερώθηκε επιτυχώς\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: η αποθήκη %s δεν υποστηρίζεται\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start: σφάλμα %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "συνθηματικό: pam_start() απέτυχε, σφάλμα %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Εσφαλμένο συνθηματικό για %s.\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr "%s: πολλαπλές επιλογές --root\n"
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr "%s: η επιλογή '%s' απαιτεί μία τιμή\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: αποτυχία απόρριψης προνομίων (%s)\n"
+
+#, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: διαδρομή chroot μη έγκυρη '%s'\n"
+
+#, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: αδυναμία προσπέλαση του καταλόγου chroot %s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: αδυναμία προσπέλαση του καταλόγου chroot %s: %s\n"
+
+#, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr ""
+"%s: αδυναμία αλλαγής του φαινομενικού γονικού καταλόγου (chroot) %s: %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"Μη έγκυρη τιμή για το ENCRYPT_METHOD: '%s'.\n"
+"Επιλέγεται η προκαθορισμένη DES.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Αδυναμία αλλαγής καταλόγου στον '%s'\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Χωρίς κατάλογο, εισαγωγή με ΜΗΤΡΙΚΟ_ΚΑΤΑΛΟΓΟ=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Αδυναμία εκτέλεσης %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Μη έγκυρος πρωταρχικός κατάλογος '%s'\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Αδυναμία αλλαγής του πρωταρχικού καταλόγου σε '%s'\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: Ο χρήστης %s βρίσκεται στο σύστημα\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: Ο χρήστης %s βρίσκεται στο σύστημα\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Δεν είναι δυνατόν να καθοριστεί το όνομα tty."
+
+msgid "No"
+msgstr "Όχι"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Χρήση: %s [επιλογές] ΟΝΟΜΑ\n"
+"\n"
+"Επιλογές:\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+" -d, --lastday ΤΕΛΕΤΑΙΑ_ΗΜΕΡΑ καθορίζει την ημέρα της τελευταίας "
+"αλλαγής συνθηματικού σε ΤΕΛΕΤΑΙΑ_ΗΜΕΡΑ\n"
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -E, --expiredate ΗΜΕΡΟΜΗΝΙΑ_ΛΗΞΗΣ καθορίζει την ημερομηνία λήξης του "
+"λογαριασμού σε ΗΜΕΡΟΜΗΝΙΑ_ΛΗΞΗΣ\n"
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+" -h, --help προβολή αυτού του μηνύματος βοήθειας και "
+"έξοδος\n"
+
+#, fuzzy
+#| msgid " -g, --group edit group database\n"
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr " -g, --group επεξεργασία βάσης δεδομένων ομάδων\n"
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -I, --inactive ΜΗ_ΕΝΕΡΓΟ καθορίζει το συνθηματικό μετά την λήξη\n"
+" σε ΜΗ_ΕΝΕΡΓΟ\n"
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+" -l, --list προβολή πληροφοριών ηλικίας λογαριασμών\n"
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -m, --mindays ΕΛΑΧ_ΗΜΕΡΕΣ καθορίζει ελάχιστο αριθμό ημερών πριν το "
+"συνθηματικό\n"
+" αλλάξει σε ΕΛΑΧ_ΗΜΕΡΕΣ\n"
+
+#, fuzzy
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -M, --maxdays ΜΕΓ_ΗΜΕΡΕΣ καθορίζει μέγιστο αριθμό ημερών πριν το "
+"συνθηματικό\n"
+" αλλάξει σε ΜΕΓ_ΗΜΕΡΕΣ\n"
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+" -R, --root ΚΑΤΑΛΟΓΟΣ_CHROOT κατάλογος στον οποίο να εφαρμοστεί "
+"chroot\n"
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -W, --warndays ΠΡΟΕΙΔ_ΗΜΕΡΕΣ καθορίζει τις ημέρες προειδοποίησης πριν "
+"τη λήξη σε ΠΡΟΕΙΔ_ΗΜΕΡΕΣ\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Εισάγετε την νέα τιμή, ή πιέστε ENTER για την προκαθορισμένη"
+
+msgid "Minimum Password Age"
+msgstr "Μικρότερη διάρκεια συνθηματικού"
+
+msgid "Maximum Password Age"
+msgstr "Μέγιστη διάρκεια συνθηματικού"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Τελευταία αλλαγή συνθηματικού (ΧΧΧΧ-ΜΜ-ΗΗ)"
+
+msgid "Password Expiration Warning"
+msgstr "Προειδοποίηση λήξης συνθηματικού"
+
+msgid "Password Inactive"
+msgstr "Ανενεργό συνθηματικό"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Ημερομηνία Λήξης Λογαριασμού (ΧΧΧΧ-ΜΜ-ΗΗ)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Τελευταία αλλαγή συνθηματικού \t\t\t\t\t: "
+
+msgid "never"
+msgstr "Ποτέ"
+
+msgid "password must be changed"
+msgstr "το συνθηματικό πρέπει να αλλαχθεί"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Το συνθηματικό λήγει\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Ανενεργό συνθηματικό\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Ο λογαριασμός λήγει\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Ελάχιστος αριθμός ημερών μεταξύ των αλλαγών συνθηματικού\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Μέγιστος αριθμός ημερών μεταξύ των αλλαγών συνθηματικού\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Αριθμός ημερών πριν τη λήξη του συνθηματικού\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: Μη έγκυρη ημερομηνία '%s'\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: Μη έγκυρη αριθμητική παράμετρος '%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: Να μην συμπεριλαμβάνετε το \"l\" με τις άλλες ενδείξεις\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: άδεια απορρίφθηκε\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Δεν είναι δυνατόν να καθοριστεί το όνομα χρήστη σας.\n"
+
+#, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: PAM: %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: αδυναμία κλειδώματος %s. Δοκιμάστε αργότερα.\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: αδυναμία ανοίγματος του %s\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: σφάλμα κατά την εγγραφή των αλλαγών στο %s\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: αποτυχία προετοιμασίας της νέας εγγραφής %s '%s'\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: Το αρχείο σκιωδών συνθηματικών δεν υπάρχει\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: Ο χρήστης '%s' δεν υπάρχει στο %s\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Αλλαγή πληροφοριών χρόνου για τον %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: Σφάλμα κατά την αλλαγή πεδίων\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Χρήση: %s [επιλογές] [ΟΝΟΜΑ]\n"
+"\n"
+"Επιλογές:\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+" -f, --full-name ΠΛΗΡΕΣ_ΟΝΟΜΑ αλλαγή του πλήρες ονόματος του χρήστη\n"
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+" -h, --home-phone ΤΗΛ_ΟΙΚΕΙΑΣ αλλαγή του τηλεφώνου οικείας του χρήστη\n"
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+" -o, --other ΑΛΛΕΣ_ΠΛΗΡ αλλαγή των υπόλοιπων πληροφοριών GECOS του "
+"χρήστη\n"
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+" -r, --room ΑΡΙΘΜΟΣ_ΔΩΜ αλλαγή του αριθμού δωματίου του χρήστη\n"
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+" -u, --help προβολή αυτού του μηνύματός βοήθειας και "
+"έξοδος\n"
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+" -w, --work-phone ΤΗΛ_ΕΡΓΑΣΙΑΣ αλλαγή του τηλεφώνου εργασίας του χρήστη\n"
+
+msgid "Full Name"
+msgstr "Πλήρες όνομα"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "Αριθμός δωματίου"
+
+msgid "Work Phone"
+msgstr "Τηλέφωνο Εργασίας"
+
+msgid "Home Phone"
+msgstr "Τηλέφωνο Οικίας"
+
+msgid "Other"
+msgstr "Άλλο"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Αδυναμία αλλαγής ταυτότητας χρήστη σε root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: όνομα με χαρακτήρες μη-ASCII: '%s'\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: Μη έγκυρο όνομα: '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s: αριθμός δωματίου με χαρακτήρες μη-ASCII: '%s'\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: Μη έγκυρος αριθμός δωματίου: '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: Μη έγκυρο τηλέφωνο εργασίας: '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: Μη έγκυρο τηλέφωνο οικίας: '%s'\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s' περιέχει μη-ASCII χαρακτήρες\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s' περιέχει μη έγκυρους χαρακτήρες\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: Ο χρήστης '%s' δεν υπάρχει\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: αδυναμία αλλαγής χρήστη '%s' στον εξυπηρετητή NIS.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: '%s' είναι ο κύριος διακομιστής NIS γι'αυτόν τον εξυπηρετούμενο.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Αλλαγή πληροφοριών χρήστη για τον %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: Πολύ μακριά πεδία\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Χρήση: %s [επιλογές]\n"
+"\n"
+"Επιλογές:\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr " -c, --crypt-method ΜΕΘΟΔΟΣ μέθοδος κρυπτογράφησης (μία από %s)\n"
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+" -e, --encrypted τα παρεχόμενα συνθηματικά είναι "
+"κρυπτογραφημένα\n"
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+" -m, --md5 κρυπτογράφηση το κειμένου του συνθηματικού\n"
+" με χρήση του αλγόριθμου MD5\n"
+
+#, fuzzy
+#| msgid ""
+#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
+#| " crypt algorithms\n"
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+" -s, --sha-rounds αριθμός κύκλων SHA για τους \n"
+" αλγόριθμους κρυπτογράφησης SHA*\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: η σημαία %s επιτρέπεται μόνο με τη σημαία %s\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: οι σημαίες -c, -e, και -m είναι αποκλειστικές\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: η μέθοδος κρυπτογράφησης δεν υποστηρίζεται: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: γραμμή %d: πολύ μεγάλη γραμμή\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: γραμμή %d: έλλειψη νέου συνθηματικού\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: Αποτυχία εγγραφής %s: %s\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: γραμμή %d: η ομάδα '%s' δεν υπάρχει\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: γραμμή %d: αδυναμία προετοιμασίας της νέας εισόδου %s '%s'\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: Ανιχνεύτηκε σφάλμα, οι αλλαγές αγνοήθηκαν\n"
+
+#, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: (γραμμή %d, χρήστης %s) το συνθηματικό δεν άλλαξε\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: γραμμή %d: ο χρήστης '%s' δεν υπάρχει\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+" -s, --shell ΦΛΟΙΟΣ νέος φλοιός εισόδου για λογαριασμό του "
+"χρήστη\n"
+
+msgid "Login Shell"
+msgstr "Κέλυφος Εισόδου"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Δεν μπορείτε να αλλάξετε το φλοιό για το(ν) '%s'.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Αλλαγή του φλοιού για τον %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Μη έγκυρη καταχώρηση: %s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s: ο %s δεν είναι έγκυρος φλοιός.\n"
+
+#, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: Προειδοποίηση: ο χρήστης %s δεν υπάρχει\n"
+
+#, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: Προειδοποίηση: το %s δεν είναι εκτελέσιμο\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+" -c, --check έλεγχος για τη λήξη του συνθηματικού του "
+"χρήστη\n"
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+" -f, --force εξαναγκασμένη αλλαγή συνθηματικού, εάν το "
+"συνθηματικό\n"
+" του χρήστη έχει λήξει\n"
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: συγκρουόμενες επιλογές %s και %s\n"
+
+#, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "%s: μη έγκυρη παράμετρος: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+" -a, --all προβολή των εγγραφών του faillog για όλους "
+"τους χρήστες\n"
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+" -l, --lock-secs ΔΕΥΤ κλείδωμα του λογαριασμού για ΔΕΥΤ "
+"δευτερόλεπτα, μετά από αποτυχημένη είσοδο\n"
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+" -m, --maximum ΜΕΓ καθορισμός του μέγιστου αριθμού αποτυχημένων "
+"εισόδων σε ΜΕΓ\n"
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+" -r, --reset επαναφορά μετρητή αποτυχημένων εισόδων\n"
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time ΗΜΕΡΕΣ προβολή των εγγραφών του faillog των "
+"τελευταίων ΗΜΕΡΕΣ ημερών\n"
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+" -u, --user ΟΝΟΜΑ/ΕΥΡΟΣ προβολή των εγγραφών του faillog ή "
+"διατήρηση\n"
+" των μετρητών και των ορίων (εάν "
+"χρησιμοποιηθεί με τα -r, -m,\n"
+" ή -l) μόνο για το συγκεκριμένο όνομα (ή "
+"ονόματα)\n"
+
+#, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: Aδυναμία ανάκτησης της εγγραφής UID %lu\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "Login Αποτυχίες Μέγιστο Τελευταία Στις\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr " [%lus απέμειναν]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds κλείδωμα]"
+
+#, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s: Αποτυχία επαναφοράς λανθασμένης μέτρησης UID %lu\n"
+
+#, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: Αποτυχία καθορισμού μέγιστου για το UID %lu\n"
+
+#, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: Αποτυχία καθορισμού χρόνου κλειδώματος για το UID %lu\n"
+
+#, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "%s: Άγνωστος χρήστης ή πεδίο: %s\n"
+
+#, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: Αδυναμία ανάκτησης μεγέθους του %s: %s\n"
+
+#, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: Αποτυχία εγγραφής %s: %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Χρήση: %s [επιλογές] ΟΜΑΔΑ\n"
+"\n"
+"Επιλογές:\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr " -a, --add ΧΡΗΣΤΗ προσθήκη ΧΡΗΣΤΗ στην ΟΜΑΔΑ\n"
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr " -d, --delete ΧΡΗΣΤΗ διαγραφή ΧΡΗΣΤΗ από την ΟΜΑΔΑ\n"
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr " -Q, --root ΚΑΤ_CHROOT κατάλογος όπου εκτελείται το chroot\n"
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr " -r, --remove-password διαγραφή του συνθηματικού της ΟΜΑΔΑΣ\n"
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+" -R, --restrict περιορισμός πρόσβασης στην ΟΜΑΔΑ και τα μέλη "
+"της\n"
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+" -M, --members USER,... καθορισμός της λίστας μελών της ΟΜΑΔΑΣ\n"
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+" -A, --administrators ΔΙΑΧΕΙΡ,...\n"
+" καθορισμός του διαχειριστή της ΟΜΑΔΑΣ\n"
+
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "Εκτός των επιλογών -Α και -Μ, οι υπόλοιπες δεν συνδυάζονται.\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "Οι επιλογές δεν συνδυάζονται.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: σκιώδη συνθηματικά ομάδων απαιτούνται για το -A\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: Η ομάδα %s δεν υπάρχει στο %s\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: αποτυχία κατά το κλείσιμο του αρχείου μόνο για ανάγνωση %s\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Αλλαγή του συνθήματος για την ομάδα %s\n"
+
+msgid "New Password: "
+msgstr "Νέο Συνθηματικό: "
+
+msgid "Re-enter new password: "
+msgstr "Εισάγετε ξανά το νέο συνθηματικό: "
+
+msgid "They don't match; try again"
+msgstr "Δεν ταιριάζουν. Δοκιμάστε ξανά"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Ξαναδοκιμάστε αργότερα\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Προσθήκη του χρήστη %s στην ομάδα %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Διαγραφή του χρήστη %s από την ομάδα %s\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: ο χρήστης %s δεν είναι μέλος του '%s'\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Δεν είναι tty\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Χρήση: %s [επιλογές] ΟΜΑΔΑ\n"
+"\n"
+"Επιλογές:\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+" -f, --force επιτυχής έξοδος εάν υπάρχει ήδη η ομάδα,\n"
+" και ακύρωση της επιλογής -g εάν το GID "
+"χρησιμοποιείται ήδη\n"
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr ""
+" -g, --gid GID χρήση του GID για την καινούργια ομάδα\n"
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+" -K, --key ΚΛΕΙΔΙ=ΤΙΜΗ παράκαμψη των προεπιλογών του /etc/login."
+"defs\n"
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique επιτρέπει τη δημιουργία ομάδων με\n"
+" μη μοναδικό GID\n"
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+" -p, --password ΣΥΝΘΗΜΑΤΙΚΟ χρήση του κρυπτογραφημένου συνθηματικού "
+"για τη νέα ομάδα\n"
+
+msgid " -r, --system create a system account\n"
+msgstr " -r, --system δημιουργία λογαριασμού συστήματος\n"
+
+#, fuzzy
+#| msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+" -R, --root ΚΑΤΑΛΟΓΟΣ_CHROOT κατάλογος στον οποίο να εφαρμοστεί "
+"chroot\n"
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: Το '%s' δεν είναι έγκυρο όνομα ομάδας\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: Μη έγκυρο ID ομάδας '%s'\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K απαιτεί KEY=VALUE\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: Η ομάδα '%s' υπάρχει\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s: το GID '%lu' υπάρχει\n"
+
+#, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: Δεν ήταν δυνατή η ρύθμιση της υπηρεσίας εκκαθάρισης.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+" -r, --reset επαναφορά μετρητή αποτυχημένων εισόδων\n"
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: αδυναμία απομάκρυνσης της εγγραφής '%s' από το %s\n"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: αδυναμία απομάκρυνσης της πρωταρχικής ομάδας χρηστών '%s'\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: Η ομάδα '%s' δεν υπάρχει\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: Η ομάδα '%s' είναι NIS ομάδα.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: Ο %s είναι ο κύριος διακομιστής NIS\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: Ο χρήστης '%s' είναι ήδη μέλος του '%s'\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: Δεν υπάρχει ελεύθερη μνήμη. Αδυναμία ενημέρωσης του %s.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Χρήση: %s [επιλογές] [ενέργεια]\n"
+"\n"
+"Επιλογές:\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+" -g, --group groupname αλλαγή του ονόματος της ομάδας αντί αλλαγής "
+"της\n"
+" ομάδας του χρήστη (μόνο ο χρήστης root)\n"
+
+msgid "\n"
+msgstr "\n"
+
+msgid "Actions:\n"
+msgstr "Ενέργειες:\n"
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+" -a, --add username προσθήκη του ονόματος χρήστη στα μέλη της "
+"ομάδας\n"
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+" -d, --delete username διαγραφή ονόματος χρήστη από τα μέλη της "
+"ομάδας\n"
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr " -p, --purge διαγραφή όλων των μελών της ομάδας\n"
+
+msgid " -l, --list list the members of the group\n"
+msgstr " -l, --list λίστα όλων των μελών της ομάδας\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: το όνομα της ομάδας σας δεν ταιριάζει με το όνομα σας\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s: μόνο ο root μπορεί να χρησιμοποιήσει την επιλογή -g/--group\n"
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr " -g, --gid GID αλλαγή του ID της ομάδας σε GID\n"
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr " -n, --new-name ΝΕΑ_ΟΜΑΔΑ αλλαγή του ονόματος σε ΝΕΑ_ΟΜΑΔΑ\n"
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr " -o, --non-unique επιτρέπει τη χρήση μη μοναδικών GID\n"
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+" -p, --password ΣΥΝΘΗΜΑΤΙΚΟ αλλαγή του συνθηματικού σε "
+"(κρυπτογραφημένο)\n"
+" ΣΥΝΘΗΜΑΤΙΚΟ\n"
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: μη έγκυρο όνομα ομάδας '%s'\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: Η ομάδα %s είναι NIS ομάδα\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: άγνωστος χρήστης %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Χρήση: %s [επιλογές] [ομάδα [gshadow]]\n"
+"\n"
+"Επιλογές:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Χρήση: %s [επιλογές] [ομάδα]\n"
+"\n"
+"Επιλογές:\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+" -r, --read-only προβολή λαθών και προειδοποιήσεων\n"
+" χωρίς να γίνεται αλλαγή στα αρχεία\n"
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr " -s, --sort ταξινόμηση εγγραφών κατά UID\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s και -r είναι ασύμβατα\n"
+
+msgid "invalid group file entry"
+msgstr "Μη έγκυρη καταχώρηση στο αρχείο ομάδων"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "διαγραφή γραμμής '%s'; "
+
+msgid "duplicate group entry"
+msgstr "αντιγραφή καταχώρησης στο αρχείο ομάδων"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "Μη έγκυρο όνομα ομάδας '%s'\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "Μη έγκυρο ID ομάδας '%lu'\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "ομάδα %s: δεν υπάρχει χρήστης %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "διαγραφή μέλους '%s'; "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "δεν βρέθηκε καταχώρηση στο αρχείο ομάδων %s που να ταιριάζει\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "να προστεθεί η ομάδα '%s' στο %s; "
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"η ομάδα %s έχει καταχώριση στο %s, αλλά στο πεδίο συνθηματικού στο %s δεν "
+"έχει τεθεί 'x'\n"
+
+msgid "invalid shadow group file entry"
+msgstr "Μη έγκυρη καταχώρηση στο αρχείο σκιωδών συνθηματικών ομάδων"
+
+msgid "duplicate shadow group entry"
+msgstr "αντιγραφή καταχώρησης στο αρχείο σκιωδών συνθηματικών ομάδων"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "σκιώδης ομάδα %s: Δεν υπάρχει διαχειριστής χρήστης %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "διαγραφή διαχειριστικού μέλους '%s'; "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "σκιώδης ομάδα %s: δεν υπάρχει χρήστης %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: τα αρχεία ανανεώθηκαν\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: καμιά αλλαγή\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: αδυναμία διαγραφής του %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Χρήση: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Χρήση: id\n"
+
+msgid " groups="
+msgstr " ομάδες="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+" -b, --before ΗΜΕΡΕΣ προβολή των εγγραφών του lastlog που είναι "
+"παλαιότερες από ΗΜΕΡΕΣ\n"
+
+#, fuzzy
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+" -a, --all προβολή των εγγραφών του faillog για όλους "
+"τους χρήστες\n"
+
+#, fuzzy
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+" -a, --all προβολή των εγγραφών του faillog για όλους "
+"τους χρήστες\n"
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time ΗΜΕΡΕΣ προβολή των εγγραφών του lastlog των "
+"τελευταίων ΗΜΕΡΕΣ ημερών\n"
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+" -u, --user ΟΝΟΜΑ προβολή των εγγραφών του lastlog για το "
+"συγκεκριμένο ΟΝΟΜΑ\n"
+
+msgid "Username Port From Latest"
+msgstr "Όνομα_Χρήστη Θύρα Από Τελευταία"
+
+msgid "Username Port Latest"
+msgstr "Όνομα_Χρήστη Θύρα Τελευταία"
+
+msgid "**Never logged in**"
+msgstr "**Καμιά είσοδος στο σύστημα**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s: Aδυναμία ανάκτησης της εγγραφής UID %lu\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%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 "Χρήση: %s [-p] [όνομα]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h σύστημα] [-f όνομα]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r σύστημα\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr "σφάλμα διαρρύθμισης - αδυναμία ανάλυσης της τιμής %s: '%d'"
+
+msgid "Invalid login time"
+msgstr "Εσφαλμένη ώρα εισόδου"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Το σύστημα έκλεισε για συντήρηση ρουτίνας"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Παράκαμψη αποσύνδεσης -- Η είσοδος του root επετράπη.]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr "%s: Μάλλον δεν είναι δυνατή η λειτουργία χωρίς ενεργό χρήστη root\n"
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Δεν υπάρχει καταχώριση utmp. Πρέπει να εκτελέσετε \"login\" από το \"sh\" "
+"του πιο χαμηλού επιπέδου"
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Η διαδικασία εισόδου τερματίστηκε μετά από %u δευτερόλεπτα.\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: αποτυχία PAM, εγκατάλειψη: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s login: "
+
+msgid "login: "
+msgstr "login: "
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Υπερέβη ο μέγιστος αριθμός προσπαθειών (%u)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: αίτημα ακύρωσης από το PAM\n"
+
+msgid "Login incorrect"
+msgstr "Διαδικασία εισόδου απέτυχε"
+
+#, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "Αδυναμία εύρεσης χρήστη (%s)\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s login: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: αποτυχία διχάλωσης: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "το TIOCSCTTY απέτυχε στο %s"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr ""
+"Προειδοποίηση: Η είσοδος επανενεργοποιήθηκε μετά από προσωρινό αποκλεισμό."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Τελευταία είσοδος: %s στο %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Τελευταία είσοδος: %.19s στο %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " από %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"υπέρβαση ορίου χρόνου εισόδου\n"
+"\n"
+
+msgid "Usage: logoutd\n"
+msgstr "Χρήση: logoutd\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: can't open group file\n"
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr "%s: αδυναμία ανοίγματος του αρχείου ομάδων\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: αποτυχία απομάκρυνσης του %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: αποτυχία απομάκρυνσης του %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to unlock %s\n"
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: Αποτυχία ξεκλειδώματος %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to find tcb directory for %s\n"
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: αποτυχία εύρεσης καταλόγου tcb %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Failed to create tcb directory for %s\n"
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: Αδυναμία δημιουργίας tcb καταλόγου για το χρήστη %s\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Χρήση: newgrp [-] [ομάδα]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Χρήση: sg ομάδα [[-c] εντολή]\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: Αποτυχία εγγραφής %s: %s\n"
+
+msgid "Invalid password.\n"
+msgstr "Λάθος συνθηματικό.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: αποτυχία διχάλωσης: %s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: Ο GID '%lu' δεν υπάρχει\n"
+
+msgid "too many groups\n"
+msgstr "πάρα πολλές ομάδες\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+#, fuzzy
+#| msgid " -q, --quiet quiet mode\n"
+msgid " -b, --badnames allow bad names\n"
+msgstr " -q, --quiet σιωπηλή λειτουργία\n"
+
+msgid " -r, --system create system accounts\n"
+msgstr " -r, --system δημιουργία λογαριασμών συστήματος\n"
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr ""
+"%s: Η ομάδα '%s' είναι σκιώδης ομάδα, αλλά δεν υπάρχει στο /etc/group\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: μη έγκυρο ID χρήστη '%s'\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: μη έγκυρο όνομα χρήστη '%s'\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: γραμμή %d: μη έγκυρη γραμμή\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: αδυναμία ανανέωσης καταχώρησης για το χρήστη %s (δεν βρέθηκε στη βάση "
+"δεδομένων του passwd)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: γραμμή %d: αδυναμία δημιουργίας χρήστη\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: γραμμή %d: αδυναμία δημιουργίας ομάδας\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: γραμμή %d: Ο χρήστης '%s' δεν υπάρχει στο %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: γραμμή %d: αδυναμία ανανέωση συνθηματικού\n"
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: γραμμή %d: αποτυχία δημιουργίας καταλόγου %s (mkdir) : %s\n"
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: γραμμή %d: αποτυχία αλλαγής ιδιοκτήτη %s (chown): %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: γραμμή %d: αδυναμία ανανέωσης καταχώρησης\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: αποτυχία προετοιμασίας της νέας εγγραφής %s '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: αδυναμία δημιουργίας του χρήστη\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: αδυναμία ανανέωσης για το αρχείο ομάδων\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+" -a, --all προβολή της κατάστασης των συνθηματικών για "
+"όλους τους λογαριασμούς\n"
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+" -d, --delete διαγραφή του συνθηματικού για τον "
+"ονομαζόμενο λογαριασμό\n"
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+" -e, --expire εξαναγκασμένη λήξη του συνθηματικού του "
+"ονομαζόμενου λογαριασμού\n"
+
+#, fuzzy
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+" -e, --encrypted τα παρεχόμενα συνθηματικά είναι "
+"κρυπτογραφημένα\n"
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -i, --inactive ΜΗ_ΕΝΕΡΓΟ καθιστά το συνθηματικό μη ενεργό μετά\n"
+" τη λήξη σε ΜΗ_ΕΝΕΡΓΟ\n"
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr ""
+" -l, --lock κλείδωμα του συνθηματικού για τον "
+"ονομαζόμενο λογαριασμό\n"
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -n, --mindays ΕΛΑΧ_ΗΜΕΡΕΣ καθορισμός του ελάχιστου αριθμού ημερών "
+"πριν την\n"
+" αλλαγή του συνθηματικού σε ΕΛΑΧ_ΗΜΕΡΕΣ\n"
+
+msgid " -q, --quiet quiet mode\n"
+msgstr " -q, --quiet σιωπηλή λειτουργία\n"
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+" -r, --repository ΑΠΟΘΗΚΗ αλλαγή του συνθηματικού στην ΑΠΟΘΗΚΗ "
+"(repository)\n"
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+" -S, --status αναφορά της κατάστασης του ονομαζόμενου "
+"λογαριασμού\n"
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+" -u, --unlock ξεκλείδωμα του συνθηματικού του ονομαζόμενου "
+"λογαριασμού\n"
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -w, --warndays ΠΡΟΕΙΔ_ΗΜΕΡΕΣ καθορισμός των ημερών προειδοποίησης "
+"πριν από τη λήξη σε ΠΡΟΕ_ΗΜΕΡΕΣ\n"
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -x, --maxdays ΜΕΓ_ΗΜΕΡΕΣ καθορισμός του μέγιστου αριθμού ημερών "
+"πριν\n"
+" την αλλαγή του συνθηματικού σε ΜΕΓ_ΗΜΕΡΕΣ\n"
+
+msgid "Old password: "
+msgstr "Παλιό Συνθηματικό: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Εισάγετε το νέο συνθηματικό (ελάχιστο %d χαρακτήρες)\n"
+"Παρακαλώ χρησιμοποιήστε ένα συνδυασμό από κεφαλαία και μικρά γράμματα\n"
+"καθώς και αριθμούς.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Εισάγετε το νέο συνθηματικό (ελάχιστο %d, μέγιστο %d χαρακτήρες)\n"
+"Παρακαλώ χρησιμοποιήστε ένα συνδυασμό από κεφαλαία και μικρά γράμματα\n"
+"καθώς και αριθμούς.\n"
+
+msgid "New password: "
+msgstr "Νέο Συνθηματικό: "
+
+msgid "Try again."
+msgstr "Ξαναδοκιμάστε."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Προσοχή: αδύναμο συνθηματικό (εισάγετε το πάλι για να το χρησιμοποιήσετε)."
+
+msgid "They don't match; try again.\n"
+msgstr "Δεν ταιριάζουν. Δοκιμάστε ξανά.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Το συνθηματικό για τον %s δεν μπορεί να αλλάξει.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Το συνθηματικό για το χρήστη %s δεν μπορεί να αλλάξει.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: το ξεκλείδωμα του συνθηματικού θα οδηγήσει σε λογαριασμό χωρίς "
+"συνθηματικό.\n"
+"Πρέπει να καθορίσετε ένα συνθηματικό με χρήση του usermod -p, ώστε να "
+"ξεκλειδώσετε το συνθηματικό για αυτό το λογαριασμό.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: η αποθήκη %s δεν υποστηρίζεται\n"
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not authorized to change the password of %s\n"
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr ""
+"%s: ο χρήστης %s δεν είναι εξουσιοδοτημένος να αλλάξει το συνθηματικό του "
+"%s\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Δεν μπορείτε να δείτε αλλάξετε το συνθηματικό του %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Αλλαγή συνθηματικού για τον %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Το συνθηματικό για τον %s δεν άλλαξε.\n"
+
+#, c-format
+msgid "%s: password changed.\n"
+msgstr "%s: το συνθηματικό άλλαξε.\n"
+
+#, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "%s: αλλαγή πληροφοριών λήξης συνθηματικού.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Χρήση: %s [επιλογές] [passwd]\n"
+"\n"
+"Επιλογές:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Χρήση: %s [επιλογές] [passwd [shadow]]\n"
+"\n"
+"Επιλογές:\n"
+
+#, fuzzy
+msgid " -q, --quiet report errors only\n"
+msgstr " -q, --quiet σιωπηλή λειτουργία\n"
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+"%s: δεν επιτρέπεται η χρήση εναλλακτικού αρχείου σκιωδών συνθηματικών όταν η "
+"επιλογή USE_TCB είναι ενεργοποιημένη.\n"
+
+msgid "invalid password file entry"
+msgstr "Μη έγκυρη καταχώρηση στο αρχείο συνθηματικών"
+
+msgid "duplicate password entry"
+msgstr "διπλότυπη καταχώριση στο αρχείο συνθηματικών"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "Μη έγκυρο όνομα χρήστη '%s'\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "Μη έγκυρο ID χρήστη '%lu'\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "χρήστης %s: καμιά ομάδα %lu\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "χρήστης '%s': ο κατάλογος '%s' δεν υπάρχει\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "χρήστης '%s': το πρόγραμμα '%s' δεν υπάρχει\n"
+
+#, c-format
+msgid "no tcb directory for %s\n"
+msgstr "δεν υπάρχει κατάλογος tcb για το χρήστη %s\n"
+
+#, c-format
+msgid "create tcb directory for %s?"
+msgstr "δημιουργία καταλόγου tcb για το χρήστη %s;"
+
+#, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "αδυναμία δημιουργίας καταλόγου tcb για το χρήστη %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: αδυναμία κλειδώματος του αρχείου %s.\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr ""
+"δεν βρέθηκε καταχώριση στο αρχείο συνθηματικών που να ταιριάζει με το %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "προσθήκη του χρήστη '%s' στο %s;"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"ο χρήστης %s έχει εγγραφεί στο %s, αλλά το πεδίο συνθηματικού στο %s δεν "
+"έχει την τιμή 'x'\n"
+
+msgid "invalid shadow password file entry"
+msgstr "Μη έγκυρη καταχώριση στο αρχείο σκιωδών συνθηματικών"
+
+msgid "duplicate shadow password entry"
+msgstr "διπλότυπη καταχώριση στο αρχείο σκιωδών συνθηματικών"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "χρήστης %s: τελευταία αλλαγή συνθηματικού στο μέλλον\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: αδυναμία ταξινόμησης των εγγραφών στο %s\n"
+
+#, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: δεν μπορώ να εργαστώ με το tcb ενεργοποιημένο\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: αδυναμία αλλαγής της κατάστασης από %s σε 0600\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Πρόσβαση στη su σε αυτόν τον λογαριασμό ΑΡΝΗΘΗΚΕ.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Παράκαμψη εξακρίβωσης με συνθηματικό.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Παρακαλώ εισάγετε το ΔΙΚΟ σας συνθηματικό για εξακρίβωση.\n"
+
+#, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: αδυναμία διχάλωσης του φλοιού του χρήστη\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr "%s: δυσλειτουργία σήματος\n"
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr "%s: δυσλειτουργία μασκαρίσμος του σήματος\n"
+
+msgid "Session terminated, terminating shell..."
+msgstr "Συνεδρία τερματίστηκε, τερματισμός φλοιού..."
+
+#, c-format
+msgid " ...killed.\n"
+msgstr " ...σκοτώθηκε.\n"
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr ""
+
+msgid " ...terminated.\n"
+msgstr " ...τερματίστηκε.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: su [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
+#| " -h, --help display this help message and exit\n"
+#| " -, -l, --login make the shell a login shell\n"
+#| " -m, -p,\n"
+#| " --preserve-environment do not reset environment variables, and\n"
+#| " keep the same shell\n"
+#| " -s, --shell SHELL use SHELL instead of the default in "
+#| "passwd\n"
+#| "\n"
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"Χρήση: su [επιλογές] [ΟΝΟΜΑ]\n"
+"\n"
+"Επιλογές:\n"
+" -c, --command ΕΝΤΟΛΗ εκτέλεση της ΕΝΤΟΛΗΣ στο καλούμενο κέλυφος\n"
+" -h, --help προβολή αυτού του μηνύματος βοήθειας και "
+"έξοδος\n"
+" -, -l, --login κάνει το κέλυφος ένα κέλυφος εισόδου\n"
+" -m, -p,\n"
+" --preserve-environment δεν γίνεται αρχικοποίηση μεταβλητών\n"
+" περιβάλλοντος, και διατηρεί το ίδιο κέλυφος\n"
+" -s, --shell ΦΛΟΙΟΣ χρήση ΦΛΟΙΟΣ αντί του προεπιλεγμένου στο\n"
+" passwd\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Αγνοήθηκε)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Δεν έχετε άδεια για su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Εισάγετε το δικό σας συνθηματικό)"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: Αποτυχία εξακρίβωσης\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s: Δεν έχετε άδεια για su τη δεδομένη στιγμή\n"
+
+#, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "Δεν υπάρχει καταχώρηση συνθηματικού για το χρήστη '%s'\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: πρέπει να εκτελεστεί από τερματικό\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: σφάλμα %d\n"
+
+#, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: αδυναμία απόρριψης τερματικού ελέγχου\n"
+
+#, c-format
+msgid "Cannot execute %s\n"
+msgstr "Αδυναμία εκτέλεσης %s\n"
+
+msgid "No password file"
+msgstr "Δεν υπάρχει αρχείο συνθηματικών"
+
+msgid "TIOCSCTTY failed"
+msgstr "το TIOCSCTTY απέτυχε"
+
+msgid "No password entry for 'root'"
+msgstr "Δεν υπάρχει καταχώρηση συνθηματικού για το χρήστη 'root'"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Πληκτρολογήστε control-d για να συνεχίσετε με την κανονική έναρξη,\n"
+"(ή δώστε το συνθηματικό του root για συντήρηση του συστήματος):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Έναρξη Κατάστασης Συντήρησης Συστήματος"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr "%s: το %s δημιουργήθηκε, αλλά δεν μπορεί να διαγραφεί\n"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr "%s: η %s διαμόρφωση στο %s θα αγνοηθεί\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: αδυναμία δημιουργίας νέου αρχείου προκαθορισμένων ρυθμίσεων\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: αδυναμία δημιουργίας νέου αρχείου προκαθορισμένων ρυθμίσεων\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: αδυναμία ανοίγματος νέου αρχείου προκαθορισμένων ρυθμίσεων\n"
+
+#, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: πολύ μακριά γραμμή στο %s: %s..."
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: Αδυναμία δημιουργίας συμβολικού συνδέσμου %s: %s\n"
+
+#, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: μετονομασία: %s: %s\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: Η ομάδα '%s' είναι NIS ομάδα.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: Προσδιορίστηκαν υπερβολικές ομάδες (μεγ. %d).\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Χρήση: %s [επιλογές] ΟΝΟΜΑ\n"
+" %s -D\n"
+" %s -D [επιλογές]\n"
+"\n"
+"Επιλογές:\n"
+
+#, fuzzy
+#| msgid " -s, --shadow edit shadow or gshadow database\n"
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+" -s, --shadow επεξεργασία βάσης δεδομένων shadow ή "
+"gshadow\n"
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+" -b, --base-dir ΒΑΣΙΚΟΣ_ΚΑΤ βασικός κατάλογος για τον αρχικό κατάλογο "
+"του χρήστη γιατον\n"
+" καινούργιο λογαριασμό\n"
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr " -c, --comment ΣΧΟΛΙΟ πεδίο GECOS του νέου λογαριασμού\n"
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr ""
+" -d, --home-dir ΑΡΧ_ΚΑΤ αρχικός κατάλογος χρήστη για τον νέο "
+"λογαριασμό\n"
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+" -D, --defaults εκτύπωση ή αλλαγή της προκαθορισμένης "
+"διαμόρφωσης useradd\n"
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr " -e, --expiredate ΗΜΕΡ_ΛΗΞΗΣ ημερομηνία λήξης του νέου λογαριασμού\n"
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+" -f, --inactive ΜΗ_ΕΝΕΡΓΟ περίοδος μη ενεργοποίησης του συνθηματικού "
+"για τον νέο λογαριασμό\n"
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+" -g, --gid ΟΜΑΔΑ όνομα ή ID για της πρωτεύουσας ομάδας του\n"
+" νέου λογαριασμού\n"
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+" -G, --groups ΟΜΑΔΕΣ λίστα των συμπληρωματικών ομάδων του\n"
+" νέου λογαριασμού\n"
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+" -k, --skel ΠΡΟΤ_ΚΑΤ χρήση εναλλακτικού πρότυπου καταλόγου\n"
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+" -l, --no-log-init μη προσθήκη του χρήστη στις βάσης δεδομένων\n"
+" lastlog και faillog\n"
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr " -m, --create-home δημιουργία αρχικού καταλόγου χρήστη\n"
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+" -M, --no-create-home μη δημιουργία αρχικού καταλόγου χρήστη\n"
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+" -N, --no-user-group να μην δημιουργηθεί ομάδα με το ίδιο όνομα\n"
+" με αυτό του χρήστη\n"
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique επιτρέπει τη δημιουργία χρηστών με το ίδιο\n"
+" (μη μοναδικό) UID\n"
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+" -p, --password ΣΥΝΘΗΜΑΤΙΚΟ κρυπτογραφημένο συνθηματικό του νέου "
+"λογαριασμού\n"
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr " -s, --shell ΦΛΟΙΟΣ φλοιός εισόδου του νέου λογαριασμού\n"
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr " -u, --uid UID ID χρήστη του νέου λογαριασμού\n"
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+" -U, --user-group δημιουργεί μία ομάδα με το ίδιο όνομα με "
+"αυτό του χρήστη\n"
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+" -Z, --selinux-user ΧΡΗΣΤΗΣ_SE χρήση συγκεκριμένου ΧΡΗΣΤΗΣ_SE για την "
+"χαρτογράφηση χρήστη SELinux\n"
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: Μη έγκυρος κατάλογος βάσης '%s'\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: Μη έγκυρο σχόλιο '%s'\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: Μη έγκυρος αρχικός κατάλογος χρήστη '%s'\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: σκιώδη συνθηματικά απαιτούνται για το -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: σκιώδη συνθηματικά απαιτούνται για -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: Μη έγκυρο πεδίο '%s'\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: Μη έγκυρος φλοιός '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Warning: %s is not executable\n"
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: Προειδοποίηση: το %s δεν είναι εκτελέσιμο\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rewrite password file\n"
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s: αδυναμία επανεγγραφής του αρχείου συνθηματικών\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr "%s: -Z απαιτεί πυρήνα με ενεργοποιημένο το SELinux\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr "%s: αποτυχία επαναφοράς της καταχώρησης στο faillog του UID %lu: %s\n"
+
+#, c-format
+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 reset the faillog entry of UID %lu: %s\n"
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s: αποτυχία επαναφοράς της καταχώρησης στο faillog του UID %lu: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: αποτυχία προετοιμασίας της νέας εγγραφής %s '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error updating files\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: Σφάλμα κατά την ενημέρωση αρχείων\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: αδυναμία δημιουργίας καταλόγου %s\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s home directory (%s) not found\n"
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: %s ο αρχικός κατάλογος χρήστη (%s) δεν βρέθηκε\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to allocate memory: %s\n"
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "%s: αποτυχία εκχώρησης μνήμης: %s\n"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: αδυναμία δημιουργίας καταλόγου %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: γραμμή %d: αποτυχία αλλαγής ιδιοκτήτη %s (chown): %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: γραμμή %d: αποτυχία αλλαγής ιδιοκτήτη %s (chown): %s\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "Δημιουργία αρχείου mailbox"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Δεν βρέθηκε η ομάδα 'mail'. Δημιουργία αρχείου mailbox σε κατάσταση 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Ρύθμιση αδειών του αρχείου mailbox"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: Ο χρήστης '%s' υπάρχει ήδη\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: ομάδα %s υπάρχει - αν θέλετε να προσθέσετε αυτόν το χρήστη σε αυτή την "
+"ομάδα, χρησιμοποιήστε -g.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: αδυναμία δημιουργίας του χρήστη\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: Το UID %lu δεν είναι μοναδικό\n"
+
+#, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: Αδυναμία δημιουργίας tcb καταλόγου για το χρήστη %s\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: αδυναμία δημιουργίας ομάδας\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: αδυναμία δημιουργίας του χρήστη\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: αδυναμία δημιουργίας ομάδας\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: προειδοποίηση: ο αρχικός κατάλογος χρήστη υπάρχει ήδη.\n"
+"Δεν έγινε αντιγραφή σε αυτό οποιουδήποτε καταλόγου skel.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+"%s: προειδοποίηση: απέτυχε η προσθήκη του χρήστη %s στην χαρτογράφηση "
+"SELinux %s.\n"
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+" -f, --force εξαναγκασμένη απομάκρυνση αρχείων,\n"
+" ακόμα και εάν ο χρήστης δεν είναι ιδιοκτήτης "
+"τους\n"
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+" -r, --remove απομάκρυνση αρχικού καταλόγου χρήστη και "
+"ουράς ταχυδρομείου\n"
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+" -Z, --selinux-user απομακρύνει κάθε χαρτογράφηση χρήστη SELinux "
+"για τον χρήστη\n"
+
+#, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr ""
+"%s: η ομάδα %s δεν διαγράφηκε γιατί δεν είναι πρωταρχική ομάδα του χρήστη "
+"%s.\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr "%s: η ομάδα %s δεν αφαιρέθηκε γιατί περιέχει και άλλα μέλη.\n"
+
+#, c-format
+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 remove entry %lu from %s\n"
+msgstr "%s: αδυναμία απομάκρυνσης της εγγραφής '%s' από το %s\n"
+
+#, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: %s η ουρά του ταχυδρομείου (%s) δεν βρέθηκε\n"
+
+#, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: προειδοποίηση: αδυναμία διαγραφής %s: %s\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: Το %s δεν ανήκει στον %s, δεν αφαιρείται\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+"%s: Αδυναμία εκχώρησης μνήμης, η εγγραφή tcb για τον χρήστη %s δεν έχει "
+"διαγραφεί.\n"
+
+#, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: Αδυναμία απόρριψης προνομίων: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: Αδυναμία διαγραφής των περιεχομένων του %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: Αδυναμία διαγραφής των αρχείων tcb για το χρήστη %s: %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: Ο χρήστης %s είναι NIS χρήστης\n"
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: %s ο αρχικός κατάλογος χρήστη (%s) δεν βρέθηκε\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: Δεν διαγράφεται ο κατάλογος %s (θα αφαιρούσε τον αρχικό κατάλογο του "
+"χρήστη %s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: Σφάλμα κατά την διαγραφή του καταλόγου %s\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: Σφάλμα κατά την διαγραφή του καταλόγου %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+"%s: προειδοποίηση: η απομάκρυνση του ονόματος χρήστη %s από την χαρτογράφηση "
+"χρηστών του SELinux απέτυχε.\n"
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr " -c, --comment ΣΧΟΛΙΟ νέα τιμή του πεδίου GECOS\n"
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+" -d, --home ΑΡΧ_ΚΑΤ νέος αρχικός κατάλογος χρήστη για τον "
+"λογαριασμό\n"
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -e, --expiredate ΗΜΕΡ_ΛΗΞΗΣ καθορισμός της ημερομηνίας λήξης του "
+"λογαριασμού σε ΗΜΕΡ_ΛΗΞΗΣ\n"
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -f, --inactive ΜΗ_ΕΝΕΡΓΟ καθορισμός συνθηματικού μετά τη λήξη\n"
+" σε ΜΗ_ΕΝΕΡΓΟ\n"
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+" -g, --gid ΟΜΑΔΑ εξαναγκασμός χρήσης της ΟΜΑΔΑ ως κύρια "
+"ομάδα\n"
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr ""
+" -G, --groups ΟΜΑΔΕΣ νέα λίστα με τις συμπληρωματικές ΟΜΑΔΕΣ\n"
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+" -a, --append προσθήκη του χρήστη στις συμπληρωματικές "
+"ΟΜΑΔΕΣ\n"
+" που προσδιορίζονται από την επιλογή -G, \n"
+" χωρίς να διαγράφεται από τις άλλες ομάδες\n"
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr " -l, --login ΝΕΟ_ΟΝΟΜΑ νέο όνομα χρήστη\n"
+
+msgid " -L, --lock lock the user account\n"
+msgstr " -L, --lock κλείδωμα του λογαριασμού του χρήστη\n"
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+" -m, --move-home μετακίνηση των περιεχομένων του αρχικού "
+"καταλόγου του χρήστη\n"
+" σε νέα τοποθεσία (χρήση μόνο με την επιλογή -"
+"d)\n"
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr " -o, --non-unique επιτρέπει τη χρήση μη μοναδικού UID\n"
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+" -p, --password ΣΥΝΘΗΜΑΤΙΚΟ χρήση κρυπτογραφημένου συνθηματικού ως "
+"νέο συνθηματικό\n"
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr " -u, --uid UID νέο UID για το λογαριασμό του χρήστη\n"
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr ""
+" -U, --unlock ξεκλείδωμα του λογαριασμού του χρήστη\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"
+msgstr ""
+" -Z, --selinux-user ΧΡΗΣΤΗΣ_SE νέα χαρτογράφηση χρήστη SELinux για το "
+"λογαριασμό του χρήστη\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: το ξεκλείδωμα του συνθηματικού του χρήστη θα οδηγούσε σε λογαριασμό "
+"χωρίς συνθηματικό.\n"
+"Πρέπει να εισάγετε ένα συνθηματικό με χρήση του usermod -p ώστε να "
+"ξεκλειδώσετε το συνθηματικό του συγκεκριμένου χρήστη.\n"
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: Ο χρήστης %s υπάρχει ήδη στο %s\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: Μη έγκυρη ημερομηνία '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: Μη έγκυρη ημερομηνία '%s'\n"
+
+#, c-format
+msgid "%s: no options\n"
+msgstr "%s: χωρίς επιλογές\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: οι σημαίες -L, -p, και -U είναι αποκλειστικές\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: σκιώδη συνθηματικά απαιτούνται για το -e και -f\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: το UID '%lu' υπάρχει ήδη\n"
+
+#, fuzzy, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr ""
+"%s: ο χρήστης %s δεν είναι εξουσιοδοτημένος να αλλάξει το συνθηματικό του "
+"%s\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: ο κατάλογος %s υπάρχει\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+"%s: Ο προηγούμενος αρχικός κατάλογος (%s) δεν είναι κατάλογος. Δεν "
+"διαγράφηκε ούτε νέοι αρχικοί κατάλογοι δημιουργήθηκαν.\n"
+
+#, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: Αδυναμία αλλαγής ιδιοκτήτη του αρχικού καταλόγου του χρήστη"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: προειδοποίηση: αποτυχία ολοκληρωτικής απομάκρυνσης του παλιού αρχικού "
+"καταλόγου %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: αδυναμία μετονομασίας του καταλόγου %s σε %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: αποτυχία αντιγραφής της εγγραφής του lastlog από το χρήστη %lu στο "
+"χρήστη %lu: %s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: αποτυχία αντιγραφής της εγγραφής του faillog από το χρήστη %lu στο "
+"χρήστη %lu: %s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: προειδοποίηση: Το %s δεν ανήκει στον %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "αποτυχία αλλαγής του ιδιοκτήτη του γραμματοκιβωτίου"
+
+msgid "failed to rename mailbox"
+msgstr "αποτυχία μετονομασίας γραμματοκιβωτίου"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s: αποτυχία προετοιμασίας της νέας εγγραφής %s '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s: αποτυχία προετοιμασίας της νέας εγγραφής %s '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s: αποτυχία προετοιμασίας της νέας εγγραφής %s '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s: αποτυχία προετοιμασίας της νέας εγγραφής %s '%s'\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Έχετε αλλάξει το %s.\n"
+"Ίσως χρειάζεται να αλλάξετε το %s για λόγους συνέπειας.\n"
+"Για να το επιτύχετε, χρησιμοποιήστε την εντολή '%s'.\n"
+
+msgid " -g, --group edit group database\n"
+msgstr " -g, --group επεξεργασία βάσης δεδομένων ομάδων\n"
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr " -p, --passwd επεξεργασία βάσης δεδομένων κωδικών\n"
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+" -s, --shadow επεξεργασία βάσης δεδομένων shadow ή "
+"gshadow\n"
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+" -u, --user επιλογή χρήστη, του οποίου το αρχείο σκιωδών "
+"συνθηματικών tcb θα επεξεργαστεί\n"
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: αποτυχία απομάκρυνσης του %s\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: Το %s δεν άλλαξε\n"
+
+msgid "failed to create scratch directory"
+msgstr "αποτυχία δημιουργίας προσωρινού καταλόγου"
+
+msgid "failed to drop privileges"
+msgstr "αποτυχία απόρριψης προνομίων"
+
+msgid "Couldn't get file context"
+msgstr "Αδυναμία ανάκτησης περιεχομένων αρχείου"
+
+msgid "setfscreatecon () failed"
+msgstr "αποτυχία του setfscreatecon ()"
+
+msgid "failed to gain privileges"
+msgstr "αποτυχία απόκτησης προνομίων"
+
+msgid "Couldn't lock file"
+msgstr "Αδυναμία ξεκλειδώματος αρχείου"
+
+msgid "Couldn't make backup"
+msgstr "Αδυναμία δημιουργίας αντιγράφου ασφαλείας "
+
+#, 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: το ncsd τερμάτισε με κατάσταση εξόδου %d"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+msgid "failed to open scratch file"
+msgstr "αποτυχία ανοίγματος προσωρινού αρχείου"
+
+msgid "failed to unlink scratch file"
+msgstr "αποτυχία αποσύνδεσης του προσωρινού αρχείου"
+
+msgid "failed to stat edited file"
+msgstr "αποτυχία εκτέλεσης της εφαρμογής stat για το επεξεργασμένο αρχείο"
+
+msgid "failed to allocate memory"
+msgstr "αποτυχία κατανομής μνήμης"
+
+msgid "failed to create backup file"
+msgstr "αποτυχία δημιουργίας αντίγραφου ασφαλείας"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: αδυναμία επαναφοράς %s: %s (οι αλλαγές είναι στο %s)\n"
+
+#, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: αποτυχία εύρεσης καταλόγου tcb %s\n"
+
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Χρήση: %s [είσοδος]\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "Η κλήση malloc(%d) απέτυχε\n"
+
+#~| msgid ""
+#~| "Usage: chage [options] [LOGIN]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -d, --lastday LAST_DAY set last password change to LAST_DAY\n"
+#~| " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -l, --list show account aging information\n"
+#~| " -m, --mindays MIN_DAYS set minimum number of days before "
+#~| "password\n"
+#~| " change to MIN_DAYS\n"
+#~| " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~| "password\n"
+#~| " change to MAX_DAYS\n"
+#~| " -W, --warndays WARN_DAYS set expiration warning days to "
+#~| "WARN_DAYS\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Χρήση: change [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY ρύθμιση τελευταίας αλλαγής συνθηματικού "
+#~ "σε\n"
+#~ " LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE ρύθμιση ημερομηνίας λήξης λογαριασμού σε\n"
+#~ " EXPIRE_DATE\n"
+#~ " -h, --help προβολή αυτού του μηνύματος βοήθειας και\n"
+#~ " έξοδος\n"
+#~ " -I, --inactive INACTIVE ρύθμιση ανενεργού κωδικού μετά από τη "
+#~ "λήξη\n"
+#~ " του σε INACTIVE\n"
+#~ " -l, --list προβολή πληροφοριών ηλικίας λογαριασμού\n"
+#~ " -m, --mindays MIN_DAYS ρύθμιση ελάχιστου αριθμού ημερών πριν "
+#~ "την\n"
+#~ " αλλαγή συνθηματικού σε MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS ρύθμιση μέγιστου αριθμού ημερών πριν την\n"
+#~ " αλλαγή συνθηματικού σε MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS ρύθμιση προειδοποιήσεων ημερών λήξης σε\n"
+#~ " WARN_DAYS\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: Αποτυχία εξακρίβωσης PAM\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "Χρήση: %s [-f πλήρες_όνομα] [-r αρίθμ_δωματίου] [-w τηλ_εργασίας]\n"
+#~ "\t[-h τηλ_οικίας] [-o άλλο] [χρήστης]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr ""
+#~ "Χρήση: %s [-f πλήρες_όνομα] [-r αριθμ_δωματίου] [-w τηλ_δωματίου]\n"
+#~ "[-h τηλ_οικίας]\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Χρήση: chpasswd [options]\n"
+#~ "\n"
+#~ "Επιλογές:\n"
+#~ " -e, --encrypted τα παρεχόμενα συνθηματικά είναι\n"
+#~ " κρυπτογραφημένα\n"
+#~ " -h, --help προβολή αυτού του μηνύματος βοήθειας και\n"
+#~ " έξοδος\n"
+#~ " -m, --md5 χρήση κρυπτογράφησης MD5 αντί για DES "
+#~ "όταν\n"
+#~ " τα παρεχόμενα συνθηματικά δεν είναι\n"
+#~ " κρυπτογραφημένα\n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "Χρήση: expiry {-f|-c}\n"
+
+#~| msgid "%s: cannot open file %s\n"
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "%s: αδυναμία ανοίγματος αρχείου %s\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "Χρήση: groupdel ομάδα\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "Χρήση: %s [-r] [-s] [group [gshadow]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "Χρήση: %s [-r] [-s] [group]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: -s και -r είναι ασύμβατα\n"
+
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "Χρήση: groupdel ομάδα\n"
+
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "Χρήση: groupdel ομάδα\n"
+
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Χρήση: lastlog [options]\n"
+#~ "\n"
+#~ "Επιλογές:\n"
+#~ " -b, --before DAYS εκτύπωση μόνο των τελευταίων εγγραφών\n"
+#~ " lastlog παλαιότερων από DAYS\n"
+#~ " -h, --help προβολή αυτού του μηνύματος βοήθειας και\n"
+#~ " έξοδος\n"
+#~ " -t, --time DAYS εκτύπωση μόνο των τελευταίων εγγραφών\n"
+#~ " lastlog πιο πρόσφατων από από DAYS\n"
+#~ " -u, --user LOGIN εκτύπωση τελευταίας εγγραφής lastlog για\n"
+#~ " χρήστη με καθορισμένο LOGIN\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Χρήση: passwd [options] [login]\n"
+#~ "\n"
+#~ "Επιλογές:\n"
+#~ " -a, --all αναφορά κατάστασης συνθηματικών για "
+#~ "όλους\n"
+#~ " τους λογαριασμούς\n"
+#~ " -d, --delete διαγραφή συνθηματικού για το "
+#~ "συγκεκριμένο\n"
+#~ " λογαριασμό\n"
+#~ " -e, --expire εξαναγκασμός λήξης του συνθηματικού για "
+#~ "το\n"
+#~ " συγκεκριμένο λογαριασμό\n"
+#~ " -h, --help προβολή αυτού του μηνύματος βοήθειας και\n"
+#~ " έξοδος\n"
+#~ " -k, --keep-tokens αλλαγή συνθηματικού μόνο αν αυτό έχει "
+#~ "λήξει\n"
+#~ " -i, --inactive INACTIVE ρύθμιση ανενεργού συνθηματικού μετά τη "
+#~ "λήξη\n"
+#~ " του σε ΑΝΕΝΕΡΓΟ\n"
+#~ " -l, --lock κλείδωμα του συγκεκριμένου λογαριασμού\n"
+#~ " -n, --mindays MIN_DAYS ρύθμιση ελάχιστου αριθμού ημερών πριν "
+#~ "την\n"
+#~ " αλλαγή συνθηματικού σε MIN_DAYS\n"
+#~ " -q, --quiet σιωπηρή λειτουργία\n"
+#~ " -r, --repository REPOSITORY αλλαγή συνθηματικού στο REPOSITORY\n"
+#~ " repository\n"
+#~ " -S, --status αναφορά κατάστασης συνθηματικού για το\n"
+#~ " συγκεκριμένο λογαριασμό\n"
+#~ " -u, --unlock ξεκλείδωμα του συγκεκριμένου λογαριασμού\n"
+#~ " -w, --warndays WARN_DAYS ρύθμιση ημερών προειδοποίησης λήξης σε\n"
+#~ " WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS ρύθμιση μέγιστου αριθμού ημερών πριν την\n"
+#~ " αλλαγή συνθηματικού σε MAX_DAYS\n"
+#~ "\n"
+
+#~| msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr "Χρήση: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr "Χρήση: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "Χρήση: id\n"
+
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "Χρήση: id\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "Άγνωστη ταυτότητα: %s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "Δεν υπάρχει φλοιός\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Χρήση: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Επιλογές:\n"
+#~ " -a, --append GROUP προσθήκη του χρήστη σε συμπληρωματική "
+#~ "ΟΜΑΔΑ\n"
+#~ " -c, --comment COMMENT νέα τιμή του πεδίου GECOS\n"
+#~ " -d, --home HOME_DIR νλεος κατάλογος εισόδου για το νέο\n"
+#~ " λογαριασμό χρήστη\n"
+#~ " -e, --expiredate EXPIRE_DATE ρύθμιση ημερομηνίας λήξης λογαριασμού σε\n"
+#~ " EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE ρύθμιση συνθηματικού ως ανενεργού μετά "
+#~ "από\n"
+#~ " τη λήξη του σε ΑΝΕΝΕΡΓΟ\n"
+#~ " -g, --gid GROUP εξαναγκασμός χρήσης ΟΜΑΔΑΣ ως τη νέα "
+#~ "αρχική\n"
+#~ " ομάδα εισόδου\n"
+#~ " -G, --groups GROUPS λίστα των συμπληρωματικών ΟΜΑΔΩΝ\n"
+#~ " -h, --help προβολή του μηνύματος βοήθειας και "
+#~ "έξοδος\n"
+#~ " -l, --login LOGIN νέα τιμή του ονόματος εισόδου\n"
+#~ " -L, --lock κλείδωμα του λογαριασμού χρήστη\n"
+#~ " -m, --move-home μετακινεί τα περιεχόμενα του αρχικού\n"
+#~ " καταλόγου στη νέατοποθεσία (χρήση μόνο με "
+#~ "-d)\n"
+#~ " -o, --non-unique επιτρέπει τη χρήση διπλότυπου (μη "
+#~ "μοναδικού) UID\n"
+#~ " -p, --password PASSWORD χρήση κρυπτογραφημένου συνθηματικού για "
+#~ "το\n"
+#~ " νέο συνθηματικό\n"
+#~ " -s, --shell SHELL νέο κέλυφος εισόδου για το λογαριασμό "
+#~ "χρήστη\n"
+#~ " -u, --uid UID νέο UID για το λογαριασμό χρήστη\n"
+#~ " -U, --unlock ξεκλείδωμα του λογαριασμού χρήστη\n"
+#~ "\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s: Δεν δόθηκαν ενδείξεις\n"
+
+#~| msgid ""
+#~| "Usage: vipw [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -g, --group edit group database\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -p, --passwd edit passwd database\n"
+#~| " -q, --quiet quiet mode\n"
+#~| " -s, --shadow edit shadow or gshadow database\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group edit group database\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -p, --passwd edit passwd database\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow edit shadow or gshadow database\n"
+#~ " -u, --user which user's tcb shadow file to edit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Χρήση: vipw [options]\n"
+#~ "\n"
+#~ "Επιλογές:\n"
+#~ " -g, --group επεξεργασία βάσης δεδομένων ομάδας\n"
+#~ " -h, --help προβολή κειμένου βοήθειας και έξοδος\n"
+#~ " -p, --passwd επεξεργασία βάσης δεδομένων κωδικών\n"
+#~ " -q, --quiet σιωπηλή λειτουργία\n"
+#~ " -s, --shadow επεξεργασία βάσης δεδομένων shadow ή "
+#~ "gshadow\n"
+#~ "\n"
+
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Χρήση: %s [είσοδος]\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s: αδυναμία δημιουργίας του %s\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s: Αδυναμία αλλαγής ιδιοκτήτη(chown) του %s\n"
+
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -a, --all display faillog records for all users\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -l, --lock-time SEC after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| " -m, --maximum MAX set maximum failed login counters to "
+#~| "MAX\n"
+#~| " -r, --reset reset the counters of login failures\n"
+#~| " -t, --time DAYS display faillog records more recent than "
+#~| "DAYS\n"
+#~| " -u, --user LOGIN display faillog record or maintains "
+#~| "failure\n"
+#~| " counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| " options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all display faillog records for all users\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -l, --lock-time SEC after failed login lock account to SEC "
+#~ "seconds\n"
+#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
+#~ " -r, --reset reset the counters of login failures\n"
+#~ " -t, --time DAYS display faillog records more recent than "
+#~ "DAYS\n"
+#~ " -u, --user LOGIN display faillog record or maintains "
+#~ "failure\n"
+#~ " counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ " options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all προβολή καταγραφής faillog για όλους "
+#~ "τους\n"
+#~ " χρήστες\n"
+#~ " -h, --help προβολή αυτού του μηνύματος βοήθειας και\n"
+#~ " έξοδος\n"
+#~ " -l, --lock-time SEC μετά από αποτυχημένη είσοδο κλείδωμα\n"
+#~ " λογαριασμού για SEC δευτερόλεπτα\n"
+#~ " -m, --maximum MAX ρύθμιση μέγιστου αριθμού καταμέτρησης\n"
+#~ " αποτυχημένων προσπαθειών εισόδου σε MAX\n"
+#~ " -r, --reset αρχικοποίηση της καταμέτρησης "
+#~ "αποτυχημένων\n"
+#~ " προσπαθειών εισόδου\n"
+#~ " -t, --time DAYS προβολή εγγραφών faillog πιο πρόσφατων "
+#~ "από DAYS\n"
+#~ " -u, --user LOGIN προβάλλει τις εγγραφές faillog ή\n"
+#~ " διαχειρίζεται τα όρια καταμέτρησης\n"
+#~ " αποτυχημένων εισόδων (αν χρησιμοποιηθεί\n"
+#~ " με τις επιλογές -r, -m ή -l) μόνο\n"
+#~ " για το χρήστη με LOGIN\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force exit with success status if the\n"
+#~ " specified group already exists\n"
+#~ " -g, --gid GID use GID for the new group\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique allow create group with duplicate\n"
+#~ " (non-unique) GID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new group\n"
+#~ " -r, --system create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Χρήση: groupadd [options] group\n"
+#~ "\n"
+#~ "Επιλογές:\n"
+#~ " -f, --force εξαναγκασμός εξόδου με κατάσταση "
+#~ "επιτυχίας\n"
+#~ " αν η καθορισμένη ομάδα υπάρχει ήδη\n"
+#~ " -g, --gid GID χρήση GID για τη νέα ομάδα\n"
+#~ " -h, --help προβολή αυτού του μηνύματος βοήθειας και\n"
+#~ " έξοδος\n"
+#~ " -K, --key KEY=VALUE παράκαμψη προεπιλογών /etc/login.defs\n"
+#~ " -o, --non-unique επιτρέπει τη δημιουργία ομάδας με "
+#~ "διπλότυπο\n"
+#~ " (μη-μοναδικό) GID\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --gid GID force use new GID by GROUP\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Χρήση: groupadd [options] group\n"
+#~ "\n"
+#~ "Επιλογές:\n"
+#~ " -f, --force εξαναγκασμός εξόδου με κατάσταση "
+#~ "επιτυχίας\n"
+#~ " αν η καθορισμένη ομάδα υπάρχει ήδη\n"
+#~ " -g, --gid GID χρήση GID για τη νέα ομάδα\n"
+#~ " -h, --help προβολή αυτού του μηνύματος βοήθειας και\n"
+#~ " έξοδος\n"
+#~ " -K, --key KEY=VALUE παράκαμψη προεπιλογών /etc/login.defs\n"
+#~ " -o, --non-unique επιτρέπει τη δημιουργία ομάδας με "
+#~ "διπλότυπο\n"
+#~ " (μη-μοναδικό) GID\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~ " home directory\n"
+#~ " -c, --comment COMMENT set the GECOS field for the new user "
+#~ "account\n"
+#~ " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~ " -D, --defaults print or save modified default useradd\n"
+#~ " configuration\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP for the new user account\n"
+#~ " -G, --groups GROUPS list of supplementary groups for the new\n"
+#~ " user account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -l, --no-log-init do not add the user to the lastlog and\n"
+#~ " faillog databases\n"
+#~ " -m, --create-home create home directory for the new user\n"
+#~ " account\n"
+#~ " -M, --no-create-home do not create user's home directory\n"
+#~ " (overrides /etc/login.defs)\n"
+#~ " -N, --no-user-group do not create a group with the same name "
+#~ "as\n"
+#~ " the user\n"
+#~ " -o, --non-unique allow create user with duplicate\n"
+#~ " (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new user\n"
+#~ " account\n"
+#~ " -r, --system create a system account\n"
+#~ " -s, --shell SHELL the login shell for the new user account\n"
+#~ " -u, --uid UID force use the UID for the new user "
+#~ "account\n"
+#~ " -U, --user-group create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Χρήση: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Επιλογές:\n"
+#~ " -b, --base-dir BASE_DIR ο βασικός κατάλογος για τον αρχικό "
+#~ "κατάλογο\n"
+#~ " λογαριασμού νέου χρήστη\n"
+#~ " -c, --comment COMMENT ρύθμιση του πεδίου GECOS για το "
+#~ "λογαριασμό\n"
+#~ " νέου χρήστη\n"
+#~ " -d, --home-dir HOME_DIR ο αρχικός κατάλογος για το λογαριασμό "
+#~ "νέου\n"
+#~ " χρήστη\n"
+#~ " -D, --defaults εκτύπωση ή αποθήκευση τροποποιημένης\n"
+#~ " προεπιλεγμένης ρύθμισης tπροσθήκης "
+#~ "χρήστη\n"
+#~ " -e, --expiredate EXPIRE_DATE ρύθμιση ημερομηνίας λήξης λογαριασμού σε\n"
+#~ " EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE ρύθμιση ανενεργού συνθηματικού μετά τη "
+#~ "λήξη\n"
+#~ " σε ΑΝΕΝΕΡΓΟ\n"
+#~ " -g, --gid GROUP εξαναγκασμός χρήσης GROUP για το νέο\n"
+#~ " λογαριασμό χρήστη\n"
+#~ " -G, --groups GROUPS προβολή λίστας συμπληρωματικών ομάδων "
+#~ "για\n"
+#~ " το νέο λογαριασμό χρήστη\n"
+#~ " -h, --help προβολή αυτού του μηνύματος βοήθειας και\n"
+#~ " έξοδος\n"
+#~ " -k, --skel SKEL_DIR καθορισμός ενός εναλλακτικού κατάλογου "
+#~ "skel\n"
+#~ " -K, --key KEY=VALUE παράκαμψη προεπιλογών /etc/login.defs\n"
+#~ " -m, --create-home δημιουργία αρχικού καταλόγου για το νέο\n"
+#~ " λογαριασμό χρήστη\n"
+#~ " -o, --non-unique επιτρέπει τη δημιουργία χρήστη με "
+#~ "διπλότυπο\n"
+#~ " (μη μοναδικό) UID\n"
+#~ " -p, --password PASSWORD χρήση κρυπτογραφημένου κωδικού για το "
+#~ "νέο\n"
+#~ " λογαριασμό χρήστη\n"
+#~ " -s, --shell SHELL το κέλυφος σύνδεσης για το νέο "
+#~ "λογαριασμό\n"
+#~ " χρήστη\n"
+#~ " -u, --uid UID εξαναγκασμός χρήσης του UID για το νέο\n"
+#~ " λογαριασμό χρήστη\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Το συνθηματικό έχει ρυθμιστεί να λήξει."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: αδυναμία κλειδώματος του αρχείου συνθηματικών\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: αδυναμία ανοίγματος του αρχείου συνθηματικών\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: αδυναμία κλειδώματος του αρχείου σκιωδών συνθηματικών\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: αδυναμία ανοίγματος του αρχείου σκιωδών συνθηματικών\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: αδυναμία επανεγγραφής αρχείου σκιωδών συνθηματικών\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: αδυναμία επανεγγραφής αρχείου συνθηματικών\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: αδυναμία ανανέωσης του αρχείου σκιωδών συνθηματικών\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tΠλήρες Όνομα: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tΑριθμός δωματίου: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tΤηλέφωνο Εργασίας: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tΤηλέφωνο Οικίας: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr ""
+#~ "Αδυναμία κλειδώματος του αρχείου συνθηματικών. Δοκιμάστε αργότερα.\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "Αδυναμία ανοίγματος του αρχείου συνθηματικών.\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: Ο %s δεν βρέθηκε στο /etc/passwd\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Σφάλμα κατά την ανανέωση καταχώρησης στο αρχείο συνθηματικών.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Αδυναμία εισαγωγής των αλλαγών στο αρχείο συνθηματικών.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Αδυναμία ξεκλειδώματος του αρχείου συνθηματικών\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: αδυναμία κλειδώματος του αρχείου ομάδων\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: αδυναμία κλειδώματος του αρχείου σκιωδών συνθηματικών\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: αδυναμία ανοίγματος του αρχείου σκιωδών συνθηματικών\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr ""
+#~ "%s: Σφάλμα κατά την ανανέωση καταχωρήσεων στο αρχείο σκιωδών "
+#~ "συνθηματικών\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: Σφάλμα κατά την ανανέωση καταχώρισης ομάδας\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: γραμμή %d: άγνωστος χρήστης %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: γραμμή %d: αδυναμία ανανέωσης καταχώρησης\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: αδυναμία κλειδώματος του αρχείου σκιωδών συνθηματικών\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr ""
+#~ "%s: Σφάλμα κατά την ανανέωση καταχωρήσεων στο αρχείο σκιωδών "
+#~ "συνθηματικών\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: Σφάλμα κατά την ανανέωση καταχωρήσεων στο αρχείο συνθηματικών\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: γραμμή %d: άγνωστος χρήστης %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: γραμμή %d: αδυναμία ανανέωσης καταχώρησης συνθηματικού\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: άγνωστος χρήστης\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Άγνωστος χρήστης: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Χρήση: %s [-r|-R] ομάδα\n"
+
+#~ msgid " %s [-a user] group\n"
+#~ msgstr " %s [-a χρήστης] ομάδα\n"
+
+#~ msgid " %s [-d user] group\n"
+#~ msgstr " %s [-d χρήστης] ομάδα\n"
+
+#~ msgid " %s [-A user,...] [-M user,...] group\n"
+#~ msgstr " %s [-A χρήστης,...] [-M χρήστης,...] ομάδα\n"
+
+#~ msgid " %s [-M user,...] group\n"
+#~ msgstr " %s [-M χρήστης,...] ομάδα\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: Αδυναμία δημιουργίας κλειδώματος\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr ""
+#~ "%s: Αδυναμία δημιουργίας κλειδώματος του αρχείου σκιωδών συνθηματικών\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: αδυναμία επανεγγραφής αρχείου σκιωδών συνθηματικών\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: αδυναμία ξεκλειδώματος αρχείου\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: αδυναμία ανανέωσης καταχώρησης\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr ""
+#~ "%s: αδυναμία ανανέωσης καταχώρησης στο αρχείο σκιωδών συνθηματικών\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "άγνωστη ομάδα: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: αδυναμία ανοίγματος του αρχείου\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: αδυναμία ανοίγματος του αρχείου σκιωδών συνθηματικών\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Ποιος είσαι;\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: άγνωστο μέλος %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: Σφάλμα κατά την προσθήκη νέας καταχώρησης στο αρχείο ομάδων\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: αδυναμία επανεγγραφής του αρχείου ομάδων\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: αδυναμία επανεγγραφής του αρχείου σκιωδών συνθηματικών ομάδων\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: Αδυναμία κλειδώματος του αρχείου ομάδων\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: Αδυναμία ανοίγματος του αρχείου ομάδων\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: Αδυναμία κλειδώματος του αρχείου σκιωδών συνθηματικών ομάδων\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: Αδυναμία ανοίγματος του αρχείου σκιωδών συνθηματικών ομάδων\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: Το GID %u δεν είναι μοναδικό\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: Σφάλμα κατά την διαγραφή καταχώρησης ομάδας\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr ""
+#~ "%s: Σφάλμα κατά την αφαίρεση καταχώρησης στο αρχείο σκιωδών συνθηματικών "
+#~ "ομάδων\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: αδυναμία αφαίρεσης της πρωταρχικής ομάδας του χρήστη.\n"
+
+#, fuzzy
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "%s: Αποτυχία εξακρίβωσης PAM\n"
+
+#, fuzzy
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "%s: Αδυναμία κλειδώματος του αρχείου ομάδων\n"
+
+#, fuzzy
+#~ msgid "Cannot close group file\n"
+#~ msgstr "%s: αδυναμία ανοίγματος αρχείου ομάδων\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: Ο %s δεν βρέθηκε στο /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: Το %u δεν είναι μοναδικό GID\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: Το %s δεν είναι μοναδικό όνομα\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: αδυναμία επανεγγραφής του αρχείου συνθηματικών\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: Αδυναμία κλειδώματος του αρχείου συνθηματικών\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: Αδυναμία ανοίγματος του αρχείου συνθηματικών\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr ""
+#~ "%s: αδυναμία ανανέωσης καταχώρησης στο αρχείο σκιωδών συνθηματικών για "
+#~ "τον %s\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: αδυναμία ανανέωσης καταχώρησης για την ομάδα %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: αδυναμία κλειδώματος του αρχείου σκιωδών συνθηματικών ομάδων\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: αδυναμία ανοίγματος του αρχείου σκιωδών συνθηματικών ομάδων\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr ""
+#~ "%s: αδυναμία αφαίρεσης της ομάδας %s, από το αρχείο σκιωδών "
+#~ "συνθηματικών\n"
+#~ "ομάδων\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: αδυναμία ανανέωσης του αρχείου σκιωδών συνθηματικών ομάδων\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr ""
+#~ "%s: Δεν είναι δυνατόν να διαγραφεί το αρχείο σκιωδών συνθηματικών ομάδων\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "άγνωστο UID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "άγνωστο GID: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: Η ομάδα %s δεν υπάρχει\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: Ο χρήστης %s δεν υπάρχει\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: Μη έγκυρο όνομα χρήστη `%s'\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: αδυναμία κλειδώματος του /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: αδυναμία κλειδώματος του /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: αδυναμία κλειδώματος του /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: αδυναμία κλειδώματος του /etc/passwd.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: αδυναμία ανοίγματος των αρχείων\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: αδυναμία ανανέωσης καταχώρησης συνθηματικού για τον %s\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: αδυναμία κλειδώματος του αρχείου συνθηματικών\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: αδυναμία ανοίγματος του αρχείου συνθηματικών\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr ""
+#~ "%s: αδυναμία απομάκρυνσης καταχώρησης σκιώδους συνθηματικού για τον %s\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: αδυναμία ανανέωσης αρχείου συνθηματικών\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: αδυναμία ανανέωσης καταχώρησης για τον χρήστη %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: Δεν είναι δυνατόν να διαγραφεί το αρχείο σκιωδών συνθηματικών\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: άγνωστο GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: άγνωστη ομάδα %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: στο update_gshadow\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: αδυναμία επανεγγραφής του αρχείου σκιωδών συνθηματικών\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: αδυναμία κλειδώματος του αρχείου σκιωδών συνθηματικών\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: αδυναμία ανοίγματος αρχείου σκιωδών συνθηματικών\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: Σφάλμα κατά το κλείδωμα του αρχείου ομάδων\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: Σφάλμα κατά το άνοιγμα του αρχείου ομάδων\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr ""
+#~ "%s: Σφάλμα κατά το κλείδωμα του αρχείου σκιωδών συνθηματικών ομάδων\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr ""
+#~ "%s: Σφάλμα κατά το άνοιγμα του αρχείου σκιωδών συνθηματικών ομάδων\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr ""
+#~ "%s: Σφάλμα κατά την προσθήκη νέας καταχώρησης στο αρχείο συνθηματικών\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr ""
+#~ "%s: Σφάλμα κατά την προσθήκη νέας καταχώρησης στο αρχείο σκιωδών "
+#~ "συνθηματικών\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr ""
+#~ "%s: προειδοποίηση: το CREATE_HOME δεν υποστηρίζεται, παρακαλώ "
+#~ "χρησιμοποιήστε το -m.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: Σφάλμα κατά την ανανέωση καταχώρισης ομάδας\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: Σφάλμα κατά την ανανέωση καταχώρισης ομάδας\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: αδυναμία ανοίγματος αρχείου ομάδων\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: αδυναμία ανοίγματος αρχείου σκιωδών συνθηματικών ομάδων\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: Σφάλμα κατά την διαγραφή καταχώρησης στο αρχείο συνθηματικών\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr ""
+#~ "%s: Σφάλμα κατά την διαγραφή καταχώρησης στο αρχείο σκιωδών συνθηματικών\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: Σφάλμα κατά την προσθήκη νέας καταχώρησης στο αρχείο ομάδων\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: Το uid %lu δεν είναι μοναδικό\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: Σφάλμα κατά την αλλαγή καταχώρησης συνθηματικού\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: Σφάλμα κατά την αφαίρεση καταχώρησης στο αρχείο συνθηματικών\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr ""
+#~ "%s: Σφάλμα κατά την αφαίρεση καταχώρησης στο αρχείο σκιωδών συνθηματικών\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: αδυναμία λήψης μοναδικού GID\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " στο `%.100s' από `%.200s'"
+
+#, fuzzy
+#~ msgid " on '%.100s'"
+#~ msgstr " στο `%.100s'"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: γραμμή %d: αδυναμία δημιουργίας UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: Το όνομα %s δεν είναι μοναδικό\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ " -h, --help\t\tdisplay this help message and exit\n"
+#~ " -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Χρήση: chpasswd [επιλογές]\n"
+#~ "\n"
+#~ "Επιλογές:\n"
+#~ " -e, --encrypted\tτα παρεχόμενα συνθηματικά είναι κρυπτογραφημένα\n"
+#~ " -h, --help\t\tπροβολή αυτού του μηνύματος βοήθειας και έξοδος\n"
+#~ " -m, --md5\t\tχρήση κρυπτογράφησης MD5 αντί για DES όταν τα παρεχόμενα\n"
+#~ "\t\t\tσυνθηματικά δεν είναι κρυπτογραφημένα\n"
+#~ "\n"
+
+#~ msgid "No password.\n"
+#~ msgstr "Δεν υπάρχει συνθηματικό\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Λυπάμαι.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Συγνώμη, το συνθηματικό για τον %s δεν μπορεί να αλλάξει ακόμη.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Λυπάμαι."
diff --git a/po/en@boldquot.header b/po/en@boldquot.header
new file mode 100644
index 0000000..fedb6a0
--- /dev/null
+++ b/po/en@boldquot.header
@@ -0,0 +1,25 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
+# This catalog furthermore displays the text between the quotation marks in
+# bold face, assuming the VT100/XTerm escape sequences.
+#
diff --git a/po/en@quot.header b/po/en@quot.header
new file mode 100644
index 0000000..a9647fc
--- /dev/null
+++ b/po/en@quot.header
@@ -0,0 +1,22 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
diff --git a/po/es.gmo b/po/es.gmo
new file mode 100644
index 0000000..1ccca38
--- /dev/null
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
new file mode 100644
index 0000000..9f4a184
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,4013 @@
+# shadow po translation to Spanish
+# Copyright (C) 2004, 2011 Free Software Foundation, Inc.
+# This file is distributed under the same license as the shadow package.
+#
+# Changes:
+# - Initial translation
+# Rubén Porras Campo <nahoo@inicia.es>, 2004
+#
+# - Updates
+# Ricardo Mones <ricardo.mones@hispalinux.es>, 2004
+# Francisco Javier Cuadrado <fcocuadrado@gmail.com>, 2011
+#
+# Traductores, si no conocen el formato PO, merece la pena leer la
+# documentación de gettext, especialmente las secciones dedicadas a este
+# formato, por ejemplo ejecutando:
+# info -n '(gettext)PO Files'
+# info -n '(gettext)Header Entry'
+#
+# Equipo de traducción al español, por favor lean antes de traducir
+# los siguientes documentos:
+#
+# - El proyecto de traducción de Debian al español
+# http://www.debian.org/intl/spanish/
+# especialmente las notas y normas de traducción en
+# http://www.debian.org/intl/spanish/notas
+#
+# - La guía de traducción de po's de debconf:
+# /usr/share/doc/po-debconf/README-trans
+# o http://www.debian.org/intl/l10n/po-debconf/README-trans
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.1.4.2\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2011-11-23 23:56+0100\n"
+"Last-Translator: Francisco Javier Cuadrado <fcocuadrado@gmail.com>\n"
+"Language-Team: Debian l10n Spanish <debian-l10n-spanish@lists.debian.org>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"Hay varias entradas con el nombre «%s» en %s. Por favor, corríjalo "
+"utilizando pwck o grpck.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "¿libcrypt no permite utilizar el método de cifrado? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr "error de configuración, no se pudo procesar el valor %s: «%s»"
+
+msgid "Could not allocate space for config info.\n"
+msgstr "No se pudo reservar espacio para la información de configuración.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"error de configuración, elemento «%s» desconocido (informe al "
+"administrador)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr ""
+
+msgid "Password: "
+msgstr "Contraseña: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Contraseña de %s: "
+
+#, fuzzy
+#| msgid "Cannot open audit interface - aborting.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "No se pudo abrir la interfaz de auditoría, abortando.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr ""
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not set sename for %s\n"
+msgstr "No se pudo reservar espacio para la información de configuración.\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "Cambiando la información de la edad para %s\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "%s: no se pudo determinar su nombre de usuario.\n"
+
+#, fuzzy, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "%s: línea %d: no se puede encontrar el usuario %s\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: sin memoria\n"
+
+#, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: no se pudo realizar «stat» a %s: %s\n"
+
+#, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: %s no es ni un directorio ni un enlace simbólico.\n"
+
+#, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: no se pudo leer el enlace simbólico %s: %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr "%s: enlace simbólico sospechosamente largo: %s\n"
+
+#, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: no se pudo crear el directorio %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: no se pudo cambiar el dueño de %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: no se pudo cambiar el modo de %s: %s\n"
+
+#, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: unlink: %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: no se pudo eliminar el directorio %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: no se pudo renombrar %s a %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: no se pudo eliminar %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s no se pudo crear el enlace simbólico %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: no se pudieron cambiar los dueños de %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: no se pudo realizar «lstat» a %s: %s\n"
+
+#, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: aviso, el usuario %s no tiene un fichero «tcb shadow».\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+"%s: emergencia: el tcb oculto de %s no es un fichero normal con st_nlink=1.\n"
+"La cuenta se queda bloqueada.\n"
+
+#, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: mkdir: %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: no se pudo abrir %s: %s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Aviso: grupo %s desconocido\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Aviso: demasiados grupos\n"
+
+msgid "Your password has expired."
+msgstr "Su contraseña ha caducado."
+
+msgid "Your password is inactive."
+msgstr "Su contraseña está inactiva."
+
+msgid "Your login has expired."
+msgstr "Su acceso ha caducado."
+
+msgid " Contact the system administrator."
+msgstr " Contacte con el administrador."
+
+msgid " Choose a new password."
+msgstr " Elija una contraseña nueva."
+
+msgid "You must change your password."
+msgstr "Debe cambiar su contraseña."
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Su contraseña caducará en %ld días.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Su contraseña caducará mañana."
+
+msgid "Your password will expire today."
+msgstr "Su contraseña caducará hoy."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "No se pudo abrir la interfaz de auditoría, abortando.\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr ""
+"No se pudo cambiar el dueño o el modo de la tty de la entrada estándar "
+"(stdin): %s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: se produjo un fallo al desbloquear %s\n"
+
+#, c-format
+msgid "%s: "
+msgstr "%s: "
+
+msgid ": "
+msgstr ": "
+
+msgid "Environment overflow\n"
+msgstr "Desbordamiento de entorno\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "No debe cambiar $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d fallo desde el último acceso.\n"
+"El último fue %s en %s.\n"
+msgstr[1] ""
+"%d fallos desde el último acceso.\n"
+"El último fue %s en %s.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: configuración incorrecta: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr "%s: configuración incorrecta: GID_MIN (%lu), GID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "%s: se produjo un fallo al reservar memoria: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: no se pudo obtener un GID único del sistema (no hay más GID "
+"disponibles)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: no se pudo obtener un GID único (no hay más GID disponibles)\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: no se pudo obtener un GID único (no hay más GID disponibles)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+"%s: configuración incorrecta: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: no se pudo crear el usuario\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+"%s: configuración incorrecta: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: no se pudo crear el usuario\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: configuración incorrecta: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr "%s: configuración incorrecta: UID_MIN (%lu), UID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: no se pudo obtener un UID único del sistema (no hay más UID "
+"disponibles)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: no se pudo obtener un UID único (no hay más UID disponibles)\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: no se pudo obtener un UID único (no hay más UID disponibles)\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Authentication failure\n"
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: se produjo un fallo en la autenticación\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: campo «%s» incorrecto\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Could not seteuid to %d\n"
+msgstr "No se pudo reservar espacio para la información de configuración.\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not set caps\n"
+msgstr "No se pudo reservar espacio para la información de configuración.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't open file\n"
+msgid "%s: snprintf failed!\n"
+msgstr "%s: no se puede abrir el fichero\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: línea %d: chown %s falló: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: línea %d: chown %s falló: %s\n"
+
+msgid "Too many logins.\n"
+msgstr "Demasiados accesos.\n"
+
+msgid "You have new mail."
+msgstr "Tiene correo nuevo."
+
+msgid "No mail."
+msgstr "Sin correo."
+
+msgid "You have mail."
+msgstr "Tiene correo."
+
+msgid "no change"
+msgstr "sin cambios"
+
+msgid "a palindrome"
+msgstr "un palíndromo"
+
+msgid "case changes only"
+msgstr "sólo cambios de mayúsculas/minúsculas"
+
+msgid "too similar"
+msgstr "demasiado similar"
+
+msgid "too simple"
+msgstr "demasiado simple"
+
+msgid "rotated"
+msgstr "rotada"
+
+msgid "too short"
+msgstr "demasiado corta"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Contraseña incorrecta: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() falló, error %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+msgid "passwd: password unchanged\n"
+msgstr "passwd: no se ha cambiado la contraseña\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: contraseña actualizada correctamente\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: repositorio %s no soportado\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start: error %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd: pam_start() falló, error %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Contraseña incorrecta para %s.\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr ""
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr ""
+
+#, c-format
+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 chroot path '%s'\n"
+msgstr "%s: teléfono de casa incorrecto: «%s»\n"
+
+#, fuzzy, c-format
+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 chdir to chroot directory %s: %s\n"
+msgstr "%s: no se pudo crear el directorio %s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: se produjo un fallo al crear el directorio tcb para %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"El valor de ENCRYPT_METHOD no es válido: «%s».\n"
+"Se usará DES, el valor predeterminado.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Incapaz de cambiar el directorio a «%s»\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Sin directorio, accediendo con HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "No se puede ejecutar %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Directorio raíz «%s» incorrecto\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "No se pudo cambiar el directorio raíz a «%s»\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: el usuario %s está actualmente identificado en el sistema\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: el usuario %s está actualmente identificado en el sistema\n"
+
+msgid "Unable to determine your tty name."
+msgstr "No se pudo determinar el nombre de su tty."
+
+msgid "No"
+msgstr "No"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Modo de uso: %s [opciones] USUARIO\n"
+"\n"
+"Opciones:\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+" -d, --lastday ÚLTIMO_DÍA establece el día del último cambio de la\n"
+" contraseña a ÚLTIMO_DÍA\n"
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -E, --expiredate FECHA_CAD establece la fecha de caducidad a FECHA_CAD\n"
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+" -h, --help muestra este mensaje de ayuda y termina\n"
+
+#, fuzzy
+#| msgid " -g, --group edit group database\n"
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr " -g, --group edita la base de datos del grupo\n"
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -I, --inactive INACTIVA deshabilita la cuenta después de INACTIVA\n"
+" días de la fecha de caducidad\n"
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+" -l, --list muestra la información de la edad de la "
+"cuenta\n"
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+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 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"
+" cambiar la contraseña a DÍAS_MAX\n"
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -W, --warndays DÍAS_AVISO establece los días de aviso de expiración a\n"
+" DÍAS_AVISO\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr ""
+"Introduzca el nuevo valor, o pulse INTRO para usar el valor predeterminado"
+
+msgid "Minimum Password Age"
+msgstr "Duración mínima de la contraseña"
+
+msgid "Maximum Password Age"
+msgstr "Duración máxima de la contraseña"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Último cambio de contraseña (AAAA-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Aviso de caducidad de la contraseña"
+
+msgid "Password Inactive"
+msgstr "Contraseña inactiva"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Fecha de caducidad de la cuenta (AAAA-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Último cambio de contraseña\t\t\t\t\t:"
+
+msgid "never"
+msgstr "nunca"
+
+msgid "password must be changed"
+msgstr "se debe cambiar la contraseña"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "La contraseña caduca\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Contraseña inactiva\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "La cuenta caduca\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Número de días mínimo entre cambio de contraseña\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Número de días máximo entre cambio de contraseña\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Número de días de aviso antes de que caduque la contraseña\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: fecha «%s» incorrecta\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: argumento numérico incorrecto «%s»\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: no incluya «l» junto a otras opciones\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: permiso denegado.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: no se pudo determinar su nombre de usuario.\n"
+
+#, fuzzy, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: no se pudo bloquear %s, inténtelo de nuevo.\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: no se pudo abrir %s\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: se produjo un fallo al escribir los cambios a %s\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: se produjo un fallo al preparar la nueva %s entrada «%s»\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: el fichero de contraseñas ocultas no está presente\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: el usuario «%s» no existe en %s\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Cambiando la información de la edad para %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: error cambiando los campos\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Modo de uso: %s [opciones] [USUARIO]\n"
+"\n"
+"Opciones:\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+" -u, --help muestra este mensaje de ayuda y termina\n"
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr "Nombre completo"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "Número de habitación"
+
+msgid "Work Phone"
+msgstr "Teléfono del trabajo"
+
+msgid "Home Phone"
+msgstr "Teléfono de casa"
+
+msgid "Other"
+msgstr "Otro"
+
+msgid "Cannot change ID to root.\n"
+msgstr ""
+"No se puede cambiar el identificador al usuario del administrador («root»).\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: el nombre contiene caracteres ilegales (no ASCII): «%s»\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: nombre incorrecto: «%s»\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s: la habitación contiene caracteres ilegales (no ASCII): «%s»\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: nombre de habitación incorrecto: «%s»\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: teléfono del trabajo incorrecto: «%s»\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: teléfono de casa incorrecto: «%s»\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: «%s» contiene caracteres ilegales (que no son ASCII)\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: «%s» contiene caracteres ilegales\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: el usuario «%s» no existe\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: no se pudo cambiar el usuario «%s» en el cliente NIS.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: «%s» es el NIS maestro para este cliente.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Cambiando la información de usuario para %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: campos demasiado largos\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Modo de uso: %s [opciones]\n"
+"\n"
+"Opciones:\n"
+
+#, fuzzy, c-format
+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"
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+" -e, --encrypted se cifran las contraseñas proporcionadas\n"
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+" -m, --md5 cifra la contraseña en claro utilizando\n"
+" el algoritmo MD5\n"
+
+#, fuzzy
+#| msgid ""
+#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
+#| " crypt algorithms\n"
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+" -s, --sha-rounds número de rondas SHA para los algoritmos\n"
+" de cifrado SHA*\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: la opción %s sólo está permitida junto a la opción %s\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: las opciones -c, -e y -m son exclusivas\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: método de cifrado no compatible: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: línea %d: línea demasiado larga\n"
+
+#, c-format
+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 crypt password with salt '%s': %s\n"
+msgstr "%s: se produjo un fallo al eliminar %s\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: línea %d: el grupo «%s» no existe\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr ""
+"%s: línea %d: se produjo un fallo al preparar la nueva %s entrada «%s»\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: error detectado, cambios ignorados\n"
+
+#, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: (línea %d, usuario %s) la contraseña no ha cambiado\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: línea %d: el usuario «%s» no existe\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+" -s, --shell CONSOLA nueva consola de acceso para la cuenta del\n"
+" usuario\n"
+
+msgid "Login Shell"
+msgstr "Consola de acceso"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "No debería cambiar la consola para «%s».\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Cambiando la consola de acceso para %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: entrada incorrecta: %s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s: %s es una consola incorrecta.\n"
+
+#, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: aviso: %s no existe\n"
+
+#, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: aviso: %s no es un ejecutable\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: las opciones %s y %s están en conflicto\n"
+
+#, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "%s: argumento inesperado: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+" -a, --all muestra los registros de faillog para\n"
+" todos los usuarios\n"
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+" -l, --lock-secs SEG después de fallar al acceder la cuenta se\n"
+" bloqueará después de SEG segundos\n"
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+" -m, --maximum MAX establece el máximo número de accesos "
+"fallidos\n"
+" a MAX\n"
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+" -r, --reset reinicia el contador de accesos fallidos\n"
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time DÍAS muestra los registros de faillog más "
+"recientes\n"
+" que DÍAS\n"
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+" -u, --user USUARIO/RANGO muestra los registros de faillog o mantiene\n"
+" los contadores y límites de fallos (si se\n"
+" utiliza con -r, -m o -l) sólo para el "
+"USUARIO\n"
+" indicado\n"
+
+#, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: Se produjo un fallo al conseguir la entrada para el UID %lu\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "Usuario Fallos Máximo Último Activo\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr " [faltan %lus]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr "[bloqueados %lds]"
+
+#, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr ""
+"%s: se produjo un fallo al reiniciar el contador de fallos para el UID %lu\n"
+
+#, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: se produjo un fallo al establecer max para el UID %lu\n"
+
+#, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr ""
+"%s: se produjo un fallo al establecer el tiempo de bloqueo para el UID %lu\n"
+
+#, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "%s: usuario o rango desconocido: %s\n"
+
+#, c-format
+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 write %s: %s\n"
+msgstr "%s: se produjo un fallo al eliminar %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Modo de uso: %s [opciones] GRUPO\n"
+"\n"
+"Opciones:\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr " -a, --add USUARIO añade USUARIO al GRUPO\n"
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr " -d, --delete USUARIO elimina USUARIO del GRUPO\n"
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr " -r, --remove-password elimina la contraseña de GRUPO\n"
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+" -R, --restrict restringe el acceso a GRUPO a sus miembros\n"
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+" -M, --members USUARIO,... establece la lista de miembros de GRUPO\n"
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+" -A, --administrators ADMIN,...\n"
+" establece la lista de administradores de "
+"GRUPO\n"
+
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "Excepto las opciones -A y -M, las opciones no se pueden combinar.\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "Las opciones no se pueden combinar.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: se requieren contraseñas de los grupos de shadow para -A\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: el grupo «%s» no existe en %s\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: se produjo un fallo al cerrar el %s de sólo lectura\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Cambiando la contraseña para el grupo %s\n"
+
+msgid "New Password: "
+msgstr "Nueva contraseña: "
+
+msgid "Re-enter new password: "
+msgstr "Vuelva a introducir la nueva contraseña: "
+
+msgid "They don't match; try again"
+msgstr "No concuerdan, inténtelo de nuevo"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: inténtelo más tarde\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Añadiendo al usuario %s al grupo %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Eliminando al usuario %s del grupo %s\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: el usuario «%s» no es miembro de «%s»\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: No es una tty\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Modo de uso: %s [opciones] GRUPO\n"
+"\n"
+"Opciones:\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+" -f, --force termina si el grupo ya existe, y cancela -g\n"
+" si el GID ya se está en uso\n"
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr " -g, --gid GID utiliza GID para el nuevo grupo\n"
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+" -K, --key CLAVE=VALOR sobrescribe los valores predeterminados de\n"
+" «/etc/login.defs»\n"
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique permite crear grupos con GID (no únicos)\n"
+" duplicados\n"
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+" -p, --password CONTRASEÑA utiliza esta contraseña cifrada para el "
+"nuevo\n"
+" grupo\n"
+
+msgid " -r, --system create a system account\n"
+msgstr " -r, --system crea una cuenta del sistema\n"
+
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: «%s» no es un nombre de grupo válido\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: identificador de grupo «%s» incorrecto\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K requiere CLAVE=VALOR\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: el grupo «%s» ya existe\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s: el GID «%lu» ya existe\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: no se pudo determinar su nombre de usuario.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+" -r, --reset reinicia el contador de accesos fallidos\n"
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: no se pudo eliminar la entrada «%s» de %s\n"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: no se pudo eliminar el grupo primario del usuario «%s»\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: el grupo «%s» no existe\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: el grupo «%s» es un grupo NIS\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s es el NIS maestro\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: el usuario «%s» ya es un miembro de «%s»\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: sin memoria. No se pudo actualizar %s.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Modo de uso: %s [opciones] [acción]\n"
+"\n"
+"Opciones:\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+" -g, --group GRUPO cambia el nombre del grupo en lugar del "
+"grupo\n"
+" del usuario (sólo lo puede hacer el\n"
+" administrador)\n"
+
+msgid "\n"
+msgstr "\n"
+
+msgid "Actions:\n"
+msgstr "Acciones:\n"
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+" -a, --add USUARIO añade USUARIO a los miembros del grupo\n"
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+" -d, --delete USUARIO elimina USUARIO de la lista de miembros del\n"
+" grupo\n"
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr " -p, --purge purga todos los miembros del grupo\n"
+
+msgid " -l, --list list the members of the group\n"
+msgstr " -l, --list lista los miembros del grupo\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: su nombre de grupo no coincide con su nombre de usuario\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s: sólo el administrador puede utilizar la opción -g/--group\n"
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr ""
+" -g, --gid GID cambia el identificador del grupo a GID\n"
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr " -n, --new-name GRUPO_NUEVO cambia el nombre a GRUPO_NUEVO\n"
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique permite utilizar un GID duplicado (no "
+"único)\n"
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+" -p, --password CONTRASEÑA cambia la contraseña a CONTRASEÑA (cifrada)\n"
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: nombre del grupo «%s» incorrecto\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: el grupo %s es un grupo NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: usuario desconocido %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Modo de uso: %s [opciones] [grupo [gshadow]]\n"
+"\n"
+"Opciones:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Modo de uso: %s [opciones] [group]\n"
+"\n"
+"Opciones:\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s y -r son incompatibles\n"
+
+msgid "invalid group file entry"
+msgstr "entrada del fichero de grupos incorrecta"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "¿desea eliminar la línea «%s»? "
+
+msgid "duplicate group entry"
+msgstr "entrada de grupo duplicada"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "nombre de grupo «%s» incorrecto\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "identificador de grupo «%lu» incorrecto\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "grupo %s: no existe el usuario %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "¿desea eliminar el miembro «%s»? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "no hay entradas coincidentes en el fichero de grupos en «%s»\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "¿desea añadir el grupo «%s» en %s?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"el grupo %s tiene una entrada en %s, pero su campo de contraseña en %s no "
+"está establecido a «x»\n"
+
+msgid "invalid shadow group file entry"
+msgstr "entrada del fichero shadow de grupos incorrecta"
+
+msgid "duplicate shadow group entry"
+msgstr "entrada del fichero shadow de grupos duplicada"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "grupo de shadow %s: no existe el usuario administrativo %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "¿desea eliminar el miembro administrativo «%s»? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "grupo de shadow %s: no existe el usuario %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: los ficheros se han actualizado\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: sin cambios\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: no se pudo borrar %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Modo de uso: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Modo de uso: id\n"
+
+msgid " groups="
+msgstr "grupos="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+" -b, --before DÍAS muestra los registros de «lastlog» "
+"anteriores\n"
+" a DÍAS\n"
+
+#, fuzzy
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+" -a, --all muestra los registros de faillog para\n"
+" todos los usuarios\n"
+
+#, fuzzy
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+" -a, --all muestra los registros de faillog para\n"
+" todos los usuarios\n"
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time DÍAS muestra sólo los registros de «lastlog» más\n"
+" recientes que DÍAS\n"
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+" -u, --user USUARIO muestra el registro de «lastlog» del "
+"USUARIO\n"
+
+msgid "Username Port From Latest"
+msgstr "Nombre Puerto De Último"
+
+msgid "Username Port Latest"
+msgstr "Nombre Puerto Último"
+
+msgid "**Never logged in**"
+msgstr "**Nunca ha accedido**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+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"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s: no puedo actualizar el fichero de contraseñas\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 "Modo de uso: %s [-p] [nombre]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h máquina] [-f nombre]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r máquina\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr "error de configuración, no se pudo procesar el valor %s: «%d»"
+
+msgid "Invalid login time"
+msgstr "Tiempo de acceso incorrecto"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Sistema cerrado por mantenimiento rutinario"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Desconexión evitada -- acceso del administrador («root») permitido.]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr "%s: posiblemente no se puede trabajar sin el administrador\n"
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr "Sin entrada utmp. Debe ejecutar «login» desde el nivel «sh» más bajo"
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"El acceso caducó después de %u segundos.\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: fallo de PAM, abortando: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s nombre: "
+
+msgid "login: "
+msgstr "nombre: "
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Número de intentos máximo excedido (%u)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: petición abortada por PAM\n"
+
+msgid "Login incorrect"
+msgstr "Identificación incorrecta"
+
+#, fuzzy, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "%s: línea %d: no se puede encontrar el usuario %s\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s nombre: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: se produjo un fallo en la llamada a fork: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSTTY falló en %s"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Aviso: acceso restablecido después de un cierre temporal."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Último acceso: %s en %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Último acceso: %.19s en %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " desde %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"tiempo de acceso excedido\n"
+"\n"
+
+msgid "Usage: logoutd\n"
+msgstr "Modo de uso: logout\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: can't open group file\n"
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr "%s: no se puede abrir el fichero de grupos\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: se produjo un fallo al eliminar %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: se produjo un fallo al eliminar %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to unlock %s\n"
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: se produjo un fallo al desbloquear %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to find tcb directory for %s\n"
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: se produjo un fallo al buscar el directorio tcb de %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Failed to create tcb directory for %s\n"
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: se produjo un fallo al crear el directorio tcb para %s\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Modo de uso: newgrp [-] [grupo]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Modo de uso: sg grupo [[-c] orden]\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: se produjo un fallo al eliminar %s\n"
+
+msgid "Invalid password.\n"
+msgstr "Contraseña incorrecta.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: se produjo un fallo al realizar el «fork»: %s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: el GID «%lu» no existe\n"
+
+msgid "too many groups\n"
+msgstr "demasiados grupos\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+#, fuzzy
+#| msgid " -q, --quiet quiet mode\n"
+msgid " -b, --badnames allow bad names\n"
+msgstr " -q, --quiet modo silencioso\n"
+
+msgid " -r, --system create system accounts\n"
+msgstr " -r, --system crea cuentas del sistema\n"
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: el grupo «%s» es un grupo oculto, pero no existe en «/etc/group»\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: identificador de usuario «%s» incorrecto\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: nombre de usuario «%s» incorrecto\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: línea %d: línea incorrecta\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: no se pudo actualizar la entrada del usuario %s (no está en la base de "
+"datos de passwd)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: línea %d: no se pudo crear el usuario\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: línea %d: no se pudo crear el grupo\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: línea %d: el usuario «%s» no existe en %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: línea %d: no se puede actualizar la contraseña\n"
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: línea %d: mkdir %s falló: %s\n"
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: línea %d: chown %s falló: %s\n"
+
+#, c-format
+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 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 find subordinate user range\n"
+msgstr "%s: no se pudo crear el usuario\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: no se puede actualizar el fichero de grupo\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+" -a, --all informa del estado de las contraseñas de\n"
+" todas las cuentas\n"
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+" -d, --delete borra la contraseña para la cuenta indicada\n"
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+" -e, --expire fuerza a que la contraseña de la cuenta\n"
+" caduque\n"
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+" -k, --keep-tokens cambia la contraseña sólo si ha caducado\n"
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -i, --inactive INACTIVO establece la contraseña inactiva después de\n"
+" caducar a INACTIVO\n"
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr ""
+" -l, --lock bloquea la contraseña de la cuenta indicada\n"
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -n, --mindays DÍAS_MIN establece el número mínimo de días antes\n"
+" de que se cambie la contraseña a DÍAS_MIN\n"
+
+msgid " -q, --quiet quiet mode\n"
+msgstr " -q, --quiet modo silencioso\n"
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+" -r, --repository REP cambia la contraseña en el repositorio REP\n"
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+" -S, --status informa del estado de la contraseña la "
+"cuenta\n"
+" indicada\n"
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+" -u, --unlock desbloquea la contraseña de la cuenta "
+"indicada\n"
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -w, --warndays DÍAS_AVISO establece el aviso de caducidad a "
+"DÍAS_AVISO\n"
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -x, --maxdays DÍAS_MAX establece el número máximo de días antes de\n"
+" cambiar la contraseña a DÍAS_MAX\n"
+
+msgid "Old password: "
+msgstr "Contraseña antigua: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Introduzca la nueva contraseña (con un mínimo de %d caracteres)\n"
+"Por favor, use una combinación de letras mayúsculas, minúsculas y números.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Introduzca la nueva contraseña (con un mínimo de %d caracteres y un máximo "
+"de %d)\n"
+"Por favor, use una combinación de letras mayúsculas, minúsculas y números.\n"
+
+msgid "New password: "
+msgstr "Nueva contraseña: "
+
+msgid "Try again."
+msgstr "Inténtelo de nuevo."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Aviso: contraseña débil (introdúzcala de nuevo para usarla de todos modos)."
+
+msgid "They don't match; try again.\n"
+msgstr "No concuerdan, inténtelo de nuevo.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "No se puede cambiar la contraseña para %s.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Todavía no se puede cambiar la contraseña de %s.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: desbloquear la contraseña dejaría una cuenta sin contraseña.\n"
+"Debería establecer una contraseña mediante «usermod -p» para desbloquear la "
+"contraseña de esta cuenta.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: repositorio %s no soportado\n"
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not authorized to change the password of %s\n"
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr "%s: %s no está autorizado a cambiar la contraseña de %s\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: no debe ver o cambiar la información de la contraseña para %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Cambiando la contraseña para %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "La contraseña para %s no se ha modificado.\n"
+
+#, c-format
+msgid "%s: password changed.\n"
+msgstr "%s: contraseña cambiada.\n"
+
+#, c-format
+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] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Modo de uso: %s [opciones] [acción]\n"
+"\n"
+"Opciones:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Modo de uso: %s [opciones] [passwd [shadow]]\n"
+"\n"
+"Opciones:\n"
+
+#, fuzzy
+msgid " -q, --quiet report errors only\n"
+msgstr " -q, --quiet modo silencioso\n"
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+"%s: no se permite un fichero oculto alternativo cuando USE_TCB está "
+"habilitado.\n"
+
+msgid "invalid password file entry"
+msgstr "entrada del fichero de contraseñas incorrecta"
+
+msgid "duplicate password entry"
+msgstr "entrada de contraseña duplicada"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "nombre de usuario «%s» incorrecto\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "identificador «%lu» de usuario incorrecto\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "usuario «%s»: no existe el grupo %lu\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "usuario «%s»: el directorio «%s» no existe\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "usuario «%s»: el programa «%s» no existe\n"
+
+#, c-format
+msgid "no tcb directory for %s\n"
+msgstr "no existe el directorio tcb para %s\n"
+
+#, c-format
+msgid "create tcb directory for %s?"
+msgstr "¿desea crear el directorio tcb para %s?"
+
+#, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "se produjo un fallo al crear el directorio tcb para %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: no se pudo bloquear %s.\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "ninguna entrada del fichero de contraseñas concuerda con %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "¿desea añadir el usuario «%s» a «%s»?"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"el usuario %s tiene una entrada en %s, pero su campo de la contraseña en %s "
+"no está establecido a «x»\n"
+
+msgid "invalid shadow password file entry"
+msgstr "entrada del fichero shadow de contraseñas incorrecta"
+
+msgid "duplicate shadow password entry"
+msgstr "entrada del fichero shadow de contraseñas duplicada"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr ""
+"usuario %s: el último cambio de la contraseña se produjo en el futuro\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: no se pudieron ordenar las entradas en %s\n"
+
+#, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: no puede funcionar con tcb activado\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: se produjo un fallo al cambiar el modo de %s a 0600\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "El acceso a «su» en esa cuenta se ha DENEGADO.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Autenticación de contraseña evitada.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Por favor, introduzca su PROPIA contraseña como autenticación.\n"
+
+#, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: no se pudo realizar el «fork» de la consola del usuario\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr "%s: funcionamiento incorrecto de la señal\n"
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr "%s: funcionamiento incorrecto del enmascaramiento de la señal\n"
+
+msgid "Session terminated, terminating shell..."
+msgstr "Sesión finalizada, parando la consola ..."
+
+#, c-format
+msgid " ...killed.\n"
+msgstr " ... finalizado.\n"
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr " ... esperando a que el hijo finalice.\n"
+
+msgid " ...terminated.\n"
+msgstr " ... parada.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: su [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
+#| " -h, --help display this help message and exit\n"
+#| " -, -l, --login make the shell a login shell\n"
+#| " -m, -p,\n"
+#| " --preserve-environment do not reset environment variables, and\n"
+#| " keep the same shell\n"
+#| " -s, --shell SHELL use SHELL instead of the default in "
+#| "passwd\n"
+#| "\n"
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"Modo de uso: su [opciones] [USUARIO]\n"
+"\n"
+"Opciones:\n"
+" -c, --command ORDEN pasa la ORDEN a la consola invocada\n"
+" -h, --help muestra este mensaje de ayuda y termina\n"
+" -, -l, --login hace que la consola sea una de acceso\n"
+" -m, -p,\n"
+" --preserve-environment no reinicia las variables de entorno, y\n"
+" mantiene la misma consola\n"
+" -s, --shell CONSOLA usa CONSOLA en lugar de la predeterminada "
+"en\n"
+" passwd\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ignorado)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "No está autorizado a usar su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Introduzca su propia contraseña)"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: se produjo un fallo en la autenticación\n"
+
+#, c-format
+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 passwd entry for user '%s'\n"
+msgstr "Sin entrada de contraseña para el administrador («root»)"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: debe ejecutarse desde un terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: error %d\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: no se pudo eliminar el contenido de %s: %s\n"
+
+#, c-format
+msgid "Cannot execute %s\n"
+msgstr "No se puede ejecutar %s\n"
+
+msgid "No password file"
+msgstr "Sin fichero de contraseñas"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY falló"
+
+msgid "No password entry for 'root'"
+msgstr "Sin entrada de contraseña para el administrador («root»)"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Pulse control-d para continuar con un arranque normal del sistema,\n"
+"(o introduzca la contraseña del administrador («root») para entrar en el "
+"modo de mantenimiento del sistema):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Entrando en el modo de mantenimiento del sistema"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr "%s: se creó %s, pero no se pudo eliminar\n"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr "%s: se ignorará la configuración %s en %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr ""
+"%s: no se puede crear un nuevo fichero de preferencias predeterminadas\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr ""
+"%s: no se puede crear un nuevo fichero de preferencias predeterminadas\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr ""
+"%s: no se puede abrir un nuevo fichero de preferencias predeterminadas\n"
+
+#, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: línea demasiado larga en %s: %s..."
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s no se pudo crear el enlace simbólico %s: %s\n"
+
+#, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: renombrar: %s: %s\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: el grupo «%s» es un grupo NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: demasiados grupos especificados (el máximo es %d).\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Modo de uso: %s [opciones] USUARIO\n"
+" %s -D\n"
+" %s -D [opciones]\n"
+"\n"
+"Opciones:\n"
+
+#, fuzzy
+#| msgid " -s, --shadow edit shadow or gshadow database\n"
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+" -s, --shadow edita la base de datos shadow o gshadow\n"
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+" -b, --base-dir DIR_BASE directorio base para el directorio personal\n"
+" de la nueva cuenta\n"
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr " -c, --comment COMENTARIO campo GECOS de la nueva cuenta\n"
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr ""
+" -d, --home-dir DIR_PERSONAL directorio personal de la nueva cuenta\n"
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+" -D, --defaults imprime o cambia la configuración\n"
+" predeterminada de useradd\n"
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+" -e, --expiredate FECHA_CADUCIDAD fecha de caducidad de la nueva cuenta\n"
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+" -f, --inactive INACTIVO periodo de inactividad de la contraseña\n"
+" de la nueva cuenta\n"
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+" -g, --gid GRUPO nombre o identificador del grupo primario "
+"de\n"
+" la nueva cuenta\n"
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+" -G, --groups GRUPOS lista de grupos suplementarios de la nueva\n"
+" cuenta\n"
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+" -k, --skel DIR_SKEL utiliza este directorio «skeleton» "
+"alternativo\n"
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+" -l, --no-log-init no añade el usuario a las bases de datos de\n"
+" lastlog y faillog\n"
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+" -m, --create-home crea el directorio personal del usuario\n"
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+" -M, --no-create-home no crea el directorio personal del usuario\n"
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+" -N, --no-user-group no crea un grupo con el mismo nombre que el\n"
+" usuario\n"
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique permite crear usuarios con identificadores\n"
+" (UID) duplicados (no únicos)\n"
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+" -p, --password CONTRASEÑA contraseña cifrada de la nueva cuenta\n"
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr " -s, --shell CONSOLA consola de acceso de la nueva cuenta\n"
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr ""
+" -u, --uid UID identificador del usuario de la nueva "
+"cuenta\n"
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+" -U, --user-group crea un grupo con el mismo nombre que el\n"
+" usuario\n"
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+" -Z, --selinux-user USUARIO_SE utiliza el usuario indicado para el "
+"usuario\n"
+" de SELinux\n"
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: directorio base «%s» incorrecto\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: comentario «%s» incorrecto\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: directorio personal («home») «%s» incorrecto\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: se requieren contraseñas de shadow para -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: se requieren contraseñas de shadow para -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: campo «%s» incorrecto\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: consola «%s» incorrecta\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Warning: %s is not executable\n"
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: aviso: %s no es un ejecutable\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rewrite password file\n"
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s: no se puede reescribir el fichero de contraseñas\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr "%s: -Z necesita que el núcleo tenga activado SELinux\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+"%s: se produjo un fallo al reiniciar la entrada de faillog del UID %lu: %s\n"
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+"%s: se produjo un fallo al reiniciar la entrada de lastlog del UID %lu: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr ""
+"%s: se produjo un fallo al reiniciar la entrada de faillog del UID %lu: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: se produjo un fallo al preparar la nueva %s entrada «%s»\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error updating files\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: error actualizando los ficheros\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: no se puede crear el directorio %s\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s home directory (%s) not found\n"
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: %s directorio personal (%s) no encontrado\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to allocate memory: %s\n"
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "%s: se produjo un fallo al reservar memoria: %s\n"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: no se puede crear el directorio %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: línea %d: chown %s falló: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: línea %d: chown %s falló: %s\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "Creando el fichero del buzón de correo"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"No se encontró el grupo «mail». Se creará el fichero del buzón de correo del "
+"usuario con el modo 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Estableciendo los permisos del fichero del buzón de correo"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: el usuario «%s» ya existe\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: el grupo %s existe - si quiere añadir este usuario a ese grupo, use -g.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: no se pudo crear el usuario\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: el UID %lu no es único\n"
+
+#, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: se produjo un fallo al crear el directorio tcb para %s\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: no se puede crear el grupo\n"
+
+#, fuzzy, c-format
+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 subordinate group IDs\n"
+msgstr "%s: no se puede crear el grupo\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: aviso: el directorio personal ya existe.\n"
+"No se va a copiar ningún fichero del directorio «skel» en él.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+"%s: aviso: no se pudo relacionar el nombre del usuario %s con el usuario %s "
+"de SELinux.\n"
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+" -f, --force forzar la eliminación de los ficheros,\n"
+" incluso si no pertenecen al usuario\n"
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+" -r, --remove elimina el directorio personal y el buzón "
+"de\n"
+" correo\n"
+
+#, fuzzy
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+" -Z, --selinux-user nuevo usuario de SELinux para la cuenta del\n"
+" usuario\n"
+
+#, fuzzy, c-format
+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"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr ""
+
+#, c-format
+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 %lu from %s\n"
+msgstr "%s: no se pudo eliminar la entrada «%s» de %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: %s directorio personal (%s) no encontrado\n"
+
+#, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: aviso: no se puede eliminar %s: %s\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s no pertenece a %s, no se eliminará\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr "%s: no se pudo reservar memoria, la entrada tcb %s no se eliminó.\n"
+
+#, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: no se pudo desprender los privilegios: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: no se pudo eliminar el contenido de %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: no se pudieron eliminar los ficheros tcb para %s: %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: el usuario %s es un usuario NIS\n"
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: %s directorio personal (%s) no encontrado\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: no se elimina el directorio %s (eliminaría el directorio personal del "
+"usuario %s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: error eliminando el directorio %s\n"
+
+#, c-format
+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 SELinux user mapping removal failed.\n"
+msgstr ""
+"%s: aviso: no se pudo relacionar el nombre del usuario %s con el usuario %s "
+"de SELinux.\n"
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr " -c, --comment COMENTARIO nuevo valor del campo GECOS\n"
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+" -d, --home DIR_PERSONAL nuevo directorio personal del nuevo usuario\n"
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -e, --expiredate FECHA_EXPIR establece la fecha de caducidad de la\n"
+" cuenta a FECHA_EXPIR\n"
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -f, --inactive INACTIVO establece el tiempo de inactividad después\n"
+" de que caduque la cuenta a INACTIVO\n"
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+" -g, --gid GRUPO fuerza el uso de GRUPO para la nueva cuenta\n"
+" de usuario\n"
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+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"
+" the user from other groups\n"
+msgstr ""
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr " -l, --login NOMBRE nuevo nombre para el usuario\n"
+
+msgid " -L, --lock lock the user account\n"
+msgstr " -L, --lock bloquea la cuenta de usuario\n"
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+" -m, --move-home mueve los contenidos del directorio\n"
+" personal al directorio nuevo (usar sólo\n"
+" junto con -d)\n"
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique permite usar UID duplicados (no únicos)\n"
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+" -p, --password CONTRASEÑA usar la contraseña cifrada para la nueva "
+"cuenta\n"
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr ""
+" -u, --uid UID fuerza el uso del UID para la nueva cuenta\n"
+" de usuario\n"
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr " -U, --unlock desbloquea la cuenta de usuario\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 ""
+
+#, fuzzy
+msgid ""
+" -Z, --selinux-user SEUSER new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+" -Z, --selinux-user nuevo usuario de SELinux para la cuenta del\n"
+" usuario\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: desbloquear la contraseña dejaría una cuenta sin contraseña.\n"
+"Debería establecer una contraseña mediante «usermod -p» para desbloquear la "
+"contraseña de esta cuenta.\n"
+
+#, c-format
+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 subordinate uid range '%s'\n"
+msgstr "%s: fecha «%s» incorrecta\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: fecha «%s» incorrecta\n"
+
+#, fuzzy, c-format
+msgid "%s: no options\n"
+msgstr "%s: no se pudo abrir %s\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: las opciones -L, -p y -U son exclusivas\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: se necesitan contraseñas de shadow para -e y -f\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: el UID «%lu» ya existe\n"
+
+#, fuzzy, c-format
+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"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: el directorio %s existe\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+"%s: el directorio personal anterior (%s) no era un directorio. No se "
+"eliminará y no se crearán directorios personales.\n"
+
+#, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: se produjo un fallo al cambiar el dueño del directorio personal"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: aviso: no se pudo eliminar completamente el directorio personal previo %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: no se puede renombrar el directorio %s a %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: se produjo un fallo al copiar la entrada de lastlog del usuario %lu al "
+"usuario %lu: %s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: se produjo un fallo al copiar la entrada de faillog del usuario %lu al "
+"usuario %lu: %s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: aviso: %s no pertenece a %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "se produjo un fallo al cambiar el propietario del buzón de correo"
+
+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 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 add uid range %lu-%lu to '%s'\n"
+msgstr "%s: se produjo un fallo al preparar la nueva %s entrada «%s»\n"
+
+#, fuzzy, c-format
+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 add gid range %lu-%lu to '%s'\n"
+msgstr "%s: se produjo un fallo al preparar la nueva %s entrada «%s»\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Ha modificado %s.\n"
+"Puede que necesite modificar %s por consistencia.\n"
+"Por favor, utilice la orden «%s» para hacerlo.\n"
+
+msgid " -g, --group edit group database\n"
+msgstr " -g, --group edita la base de datos del grupo\n"
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr " -p, --passwd edita la base de datos de «passwd»\n"
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+" -s, --shadow edita la base de datos shadow o gshadow\n"
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+" -u, --user indica que fichero tcb de shadow del "
+"usuario\n"
+" editar\n"
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: se produjo un fallo al eliminar %s\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: no se ha cambiado %s\n"
+
+msgid "failed to create scratch directory"
+msgstr "se produjo un fallo al crear el directorio temporal"
+
+msgid "failed to drop privileges"
+msgstr "se produjo un fallo al desprenderse de los privilegios"
+
+msgid "Couldn't get file context"
+msgstr "No se pudo conseguir el contexto del fichero"
+
+msgid "setfscreatecon () failed"
+msgstr "setfscreatecon () falló"
+
+msgid "failed to gain privileges"
+msgstr "se produjo un fallo al obtener privilegios"
+
+msgid "Couldn't lock file"
+msgstr "No se puede bloquear el fichero"
+
+msgid "Couldn't make backup"
+msgstr "No se puede realizar una copia de seguridad"
+
+#, fuzzy, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr "%s: no se encontró %s en /etc/passwd\n"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+msgid "failed to open scratch file"
+msgstr "se produjo un fallo al abrir el fichero temporal"
+
+msgid "failed to unlink scratch file"
+msgstr "se produjo un fallo al borrar el fichero temporal"
+
+msgid "failed to stat edited file"
+msgstr "se produjo un fallo al realizar el «stat» del fichero editado"
+
+msgid "failed to allocate memory"
+msgstr "se produjo un fallo al reservar memoria"
+
+msgid "failed to create backup file"
+msgstr "se produjo un fallo al crear la copia de seguridad del fichero"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: no se puede restaurar %s: %s (sus cambios están en %s)\n"
+
+#, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: se produjo un fallo al buscar el directorio tcb de %s\n"
+
+#~ msgid " -c, --crypt-method the crypt method (one of %s)\n"
+#~ msgstr " -c, --crypt-method el método de cifrado (uno de %s)\n"
+
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr ""
+#~ "Modo de uso: vipw [opciones]\n"
+#~ "\n"
+#~ "Opciones:\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "malloc(%d) falló\n"
+
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Modo de uso: chage [opciones] [USUARIO]\n"
+#~ "\n"
+#~ "Opciones:\n"
+#~ " -d, --lastday ÚLTIMO_DÍA establece el día del último cambio de la\n"
+#~ " contraseña a ÚLTIMO_DÍA\n"
+#~ " -E, --expiredate FECHA_CAD establece la fecha de caducidad a "
+#~ "FECHA_CAD\n"
+#~ " -h, --help muestra este mensaje de ayuda y termina\n"
+#~ " -I, --inactive INACTIVA deshabilita la cuenta después de "
+#~ "INACTIVA\n"
+#~ " días de la fecha de caducidad\n"
+#~ " -l, --list muestra la información de la edad de la "
+#~ "cuenta\n"
+#~ " -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"
+#~ " -M, --maxdays DÍAS_MAX establece el número máximo de días antes "
+#~ "de\n"
+#~ " cambiar la contraseña a DÍAS_MAX\n"
+#~ " -W, --warndays DÍAS_AVISO establece los días de aviso de expiración "
+#~ "a\n"
+#~ " DÍAS_AVISO\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: la autenticación PAM falló\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "Modo de uso: %s [-f nombre_completo] [-r num_habitación] [-w "
+#~ "telf_trabajo]\n"
+#~ "\t[-h telf_casa] [-o otro] [usuario]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr ""
+#~ "Modo de uso: %s [-f nombre_completo] [-r num_habitación] [-w "
+#~ "telf_trabajo]\n"
+#~ "\t[-h telf_casa]\n"
+
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Modo de uso: %s [opciones]\n"
+#~ "\n"
+#~ "Opciones:\n"
+#~ " -c, --crypt-method el método de cifrado (uno de %s)\n"
+#~ " -e, --encrypted las contraseñas proporcionadas están "
+#~ "cifradas\n"
+#~ " -h, --help muestra este mensaje de ayuda y termina\n"
+#~ " -m, --md5 usa el algoritmo MD5 para cifrar las\n"
+#~ " contraseñas\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Modo de uso: chsh [opciones] [USUARIO]\n"
+#~ "\n"
+#~ "Opciones:\n"
+#~ " -h, --help muestra este mensaje de ayuda y termina\n"
+#~ " -s, --shell CONSOLA nueva consola de acceso para la cuenta "
+#~ "del\n"
+#~ " usuario\n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "Modo de uso: expiry {-f|-c}\n"
+
+#~ msgid "faillog: Failed to get the entry for UID %lu\n"
+#~ msgstr ""
+#~ "faillog: se produjo un fallo al conseguir la entrada para el UID %lu\n"
+
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "faillog: no se pudo abrir %s: %s\n"
+
+#~ msgid "faillog: Cannot get the size of %s: %s\n"
+#~ msgstr "faillog: no se pudo conseguir el tamaño de %s: %s\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "Modo de uso: groupdel grupo\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "Modo de uso: %s [-r] [-s] [grupo [gshadow]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "Modo de uso: %s [-r] [-s] [grupo]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: -s y -r son incompatibles\n"
+
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "Modo de uso: grpconv\n"
+
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "Modo de uso: grpunconv\n"
+
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Modo de uso: lastlog [opciones]\n"
+#~ "\n"
+#~ "Opciones:\n"
+#~ " -b, --before DÍAS muestra los registros de «lastlog» "
+#~ "anteriores\n"
+#~ " a DÍAS\n"
+#~ " -h, --help muestra este mensaje de ayuda y termina\n"
+#~ " -t, --time DÍAS muestra sólo los registros de «lastlog» "
+#~ "más\n"
+#~ " recientes que DÍAS\n"
+#~ " -u, --user USUARIO muestra el registro de «lastlog» del "
+#~ "USUARIO\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Modo de uso: passwd [opciones] [USUARIO]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all informa del estado de las contraseñas de\n"
+#~ " todas las cuentas\n"
+#~ " -d, --delete borra la contraseña para la cuenta "
+#~ "indicada\n"
+#~ " -e, --expire fuerza a que la contraseña de la cuenta\n"
+#~ " caduque\n"
+#~ " -h, --help muestra este mensaje de ayuda y termina\n"
+#~ " -k, --keep-tokens cambia la contraseña sólo si ha caducado\n"
+#~ " -i, --inactive INACTIVO establece la contraseña inactiva después "
+#~ "de\n"
+#~ " caducar a INACTIVO\n"
+#~ " -l, --lock bloquea la contraseña de la cuenta "
+#~ "indicada\n"
+#~ " -n, --mindays DÍAS_MIN establece el número mínimo de días antes\n"
+#~ " de que se cambie la contraseña a "
+#~ "DÍAS_MIN\n"
+#~ " -q, --quiet modo silencioso\n"
+#~ " -r, --repository REP cambia la contraseña en el repositorio "
+#~ "REP\n"
+#~ " -S, --status informa del estado de la contraseña la "
+#~ "cuenta\n"
+#~ " indicada\n"
+#~ " -u, --unlock desbloquea la contraseña de la cuenta "
+#~ "indicada\n"
+#~ " -w, --warndays DÍAS_AVISO establece el aviso de caducidad a "
+#~ "DÍAS_AVISO\n"
+#~ " -x, --maxdays DÍAS_MAX establece el número máximo de días antes "
+#~ "de\n"
+#~ " cambiar la contraseña a DÍAS_MAX\n"
+#~ "\n"
+
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr "Modo de uso: %s [-q] [-r] [passwd]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr "Modo de uso: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "Modo de uso: pwconv\n"
+
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "Modo de uso: pwunconv\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "Id desconocido: %s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "Sin consola\n"
+
+#~ msgid ""
+#~ "Usage: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force removal of files,\n"
+#~ " even if not owned by user\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -r, --remove remove home directory and mail spool\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Modo de uso: userdel [opciones] USUARIO\n"
+#~ "\n"
+#~ "Opciones:\n"
+#~ " -f, --force forzar la eliminación de los ficheros,\n"
+#~ " incluso si no pertenecen al usuario\n"
+#~ " -h, --help muestra este mensaje de ayuda y termina\n"
+#~ " -r, --remove elimina el directorio personal y el buzón "
+#~ "de\n"
+#~ " correo\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Modo de uso: usermod [opciones] USUARIO\n"
+#~ "\n"
+#~ "Opciones:\n"
+#~ " -c, --comment COMENTARIO nuevo valor del campo GECOS\n"
+#~ " -d, --home DIR_PERSONAL nuevo directorio personal del nuevo "
+#~ "usuario\n"
+#~ " -e, --expiredate FECHA_EXPIR establece la fecha de caducidad de la\n"
+#~ " cuenta a FECHA_EXPIR\n"
+#~ " -f, --inactive INACTIVO establece el tiempo de inactividad "
+#~ "después\n"
+#~ " de que caduque la cuenta a INACTIVO\n"
+#~ " -g, --gid GRUPO fuerza el uso de GRUPO para la nueva "
+#~ "cuenta\n"
+#~ " de usuario\n"
+#~ " -G, --groups GRUPOS lista de grupos suplementarios\n"
+#~ " -h, --help muestra este mensaje de ayuda y termina\n"
+#~ " -l, --login NOMBRE nuevo nombre para el usuario\n"
+#~ " -L, --lock bloquea la cuenta de usuario\n"
+#~ " -m, --move-home mueve los contenidos del directorio\n"
+#~ " personal al directorio nuevo (usar sólo\n"
+#~ " junto con -d)\n"
+#~ " -o, --non-unique permite usar UID duplicados (no únicos)\n"
+#~ " -p, --password CONTRASEÑA usar la contraseña cifrada para la nueva "
+#~ "cuenta\n"
+#~ " -s, --shell CONSOLA la consola de acceso para la nueva cuenta "
+#~ "de\n"
+#~ " usuario\n"
+#~ " -u, --uid UID fuerza el uso del UID para la nueva "
+#~ "cuenta\n"
+#~ " de usuario\n"
+#~ " -U, --unlock desbloquea la cuenta de usuario\n"
+#~ "%s\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s: no se ha proporcionado ninguna opción\n"
+
+#~| msgid ""
+#~| "Usage: vipw [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -g, --group edit group database\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -p, --passwd edit passwd database\n"
+#~| " -q, --quiet quiet mode\n"
+#~| " -s, --shadow edit shadow or gshadow database\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group edit group database\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -p, --passwd edit passwd database\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow edit shadow or gshadow database\n"
+#~ " -u, --user which user's tcb shadow file to edit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Modo de uso: vipw [opciones]\n"
+#~ "\n"
+#~ "Opciones:\n"
+#~ " -g, --group edita la base de datos con los grupos\n"
+#~ " -h, --help muestra este mensaje de ayuda y termina\n"
+#~ " -p, --passwd edita la base de datos con las "
+#~ "contraseñas\n"
+#~ " -q, --quiet modo silencioso\n"
+#~ " -s, --shadow edita la base de datos shadow o gshadow\n"
+#~ "\n"
+
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Modo de uso: %s [entrada]\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s: no se puede crear %s\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s: no se puede chown %s\n"
+
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -a, --all display faillog records for all users\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -l, --lock-time SEC after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| " -m, --maximum MAX set maximum failed login counters to "
+#~| "MAX\n"
+#~| " -r, --reset reset the counters of login failures\n"
+#~| " -t, --time DAYS display faillog records more recent than "
+#~| "DAYS\n"
+#~| " -u, --user LOGIN display faillog record or maintains "
+#~| "failure\n"
+#~| " counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| " options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all display faillog records for all users\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -l, --lock-time SEC after failed login lock account to SEC "
+#~ "seconds\n"
+#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
+#~ " -r, --reset reset the counters of login failures\n"
+#~ " -t, --time DAYS display faillog records more recent than "
+#~ "DAYS\n"
+#~ " -u, --user LOGIN display faillog record or maintains "
+#~ "failure\n"
+#~ " counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ " options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Modo de uso: faillog [opciones]\n"
+#~ "\n"
+#~ "Opciones:\n"
+#~ " -a, --all muestra los registros de faillog para\n"
+#~ " todos los usuarios\n"
+#~ " -h, --help muestra este mensaje de ayuda y termina\n"
+#~ " -l, --lock-time SEC después de un fallo de acceso bloquea\n"
+#~ " la cuenta SEC segundos\n"
+#~ " -m, --maximum MAX establece el número máximo de accesos\n"
+#~ " fallidos a MAX\n"
+#~ " -r, --reset reinicia los contadores de accesos "
+#~ "fallidos\n"
+#~ " -t, --time ND muestra los registros de faillog para "
+#~ "los\n"
+#~ " últimos ND días\n"
+#~ " -u, --user USUARIO muestra el registro de faillog o "
+#~ "mantiene\n"
+#~ " los contadores de fallos y los límites\n"
+#~ " (si se usan las opciones -r, -m o -l)\n"
+#~ " para el usuario USUARIO\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force exit with success status if the\n"
+#~ " specified group already exists\n"
+#~ " -g, --gid GID use GID for the new group\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique allow create group with duplicate\n"
+#~ " (non-unique) GID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new group\n"
+#~ " -r, --system create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Modo de uso: groupadd [opciones] grupo\n"
+#~ "\n"
+#~ "Opciones:\n"
+#~ " -f, --force fuerza una salida con un estado de éxito\n"
+#~ " si el grupo especificado existe\n"
+#~ " -g, --gid GID usa GID para el nuevo grupo\n"
+#~ " -h, --help muestra esta ayuda y termina\n"
+#~ " -K, --key NOMBRE=VALOR prevalece sobre el valor predeterminado "
+#~ "de\n"
+#~ " /etc/login.defs\n"
+#~ " -o, --non-unique permite crear grupos con un GID "
+#~ "duplicado\n"
+#~ " (que no es único)\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --gid GID force use new GID by GROUP\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Modo de uso: groupadd [opciones] grupo\n"
+#~ "\n"
+#~ "Opciones:\n"
+#~ " -f, --force fuerza una salida con un estado de éxito\n"
+#~ " si el grupo especificado existe\n"
+#~ " -g, --gid GID usa GID para el nuevo grupo\n"
+#~ " -h, --help muestra esta ayuda y termina\n"
+#~ " -K, --key NOMBRE=VALOR prevalece sobre el valor predeterminado "
+#~ "de\n"
+#~ " /etc/login.defs\n"
+#~ " -o, --non-unique permite crear grupos con un GID "
+#~ "duplicado\n"
+#~ " (que no es único)\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~ " home directory\n"
+#~ " -c, --comment COMMENT set the GECOS field for the new user "
+#~ "account\n"
+#~ " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~ " -D, --defaults print or save modified default useradd\n"
+#~ " configuration\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP for the new user account\n"
+#~ " -G, --groups GROUPS list of supplementary groups for the new\n"
+#~ " user account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -l, --no-log-init do not add the user to the lastlog and\n"
+#~ " faillog databases\n"
+#~ " -m, --create-home create home directory for the new user\n"
+#~ " account\n"
+#~ " -M, --no-create-home do not create user's home directory\n"
+#~ " (overrides /etc/login.defs)\n"
+#~ " -N, --no-user-group do not create a group with the same name "
+#~ "as\n"
+#~ " the user\n"
+#~ " -o, --non-unique allow create user with duplicate\n"
+#~ " (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new user\n"
+#~ " account\n"
+#~ " -r, --system create a system account\n"
+#~ " -s, --shell SHELL the login shell for the new user account\n"
+#~ " -u, --uid UID force use the UID for the new user "
+#~ "account\n"
+#~ " -U, --user-group create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Modo de uso: useradd [opciones] USUARIO\n"
+#~ "\n"
+#~ "Opciones:\n"
+#~ " -b, --base-dir DIR_BASE directorio base para el nuevo directorio\n"
+#~ " personal\n"
+#~ " -c, --comment COMENTARIO comentarios para el nuevo usuario (campo "
+#~ "GECOS)\n"
+#~ " -d, --home-dir DIR_PERSONAL directorio personal para el nuevo "
+#~ "usuario\n"
+#~ " -D, --defaults muestra o salva la configuración\n"
+#~ " predeterminada modificada para useradd\n"
+#~ " -e, --expiredate FECHA_EXPIR establece la fecha de caducidad de la\n"
+#~ " cuenta a FECHA_EXPIR\n"
+#~ " -f, --inactive INACTIVO establece el tiempo de inactividad "
+#~ "después\n"
+#~ " de que caduque la cuenta a INACTIVO\n"
+#~ " -g, --gid GRUPO forzar el uso de GRUPO para la nueva "
+#~ "cuenta\n"
+#~ " de usuario\n"
+#~ " -G, --groups GRUPOS lista de grupos suplementarios para la "
+#~ "nueva\n"
+#~ " cuenta de usuario\n"
+#~ " -h, --help muestra esta ayuda y termina\n"
+#~ " -k, --skel DIR_SKEL especifica un directorio skel "
+#~ "alternativo\n"
+#~ " -K, --key LLAVE=VALOR modifica los valores predeterminados de\n"
+#~ " /etc/login.defs\n"
+#~ " -m, --create-home crea el directorio personal para la "
+#~ "nueva\n"
+#~ " cuenta de usuario\n"
+#~ " -o, --non-unique permitir crear usuarios con UIDs "
+#~ "duplicadas\n"
+#~ " -p, --password CONTRASEÑA usar la contraseña cifrada CONTRASEÑA "
+#~ "para\n"
+#~ " la nueva cuenta\n"
+#~ " -s, --shell SHELL la shell de entrada para la nueva cuenta\n"
+#~ " de usuario\n"
+#~ " -u, --uid UID forzar el uso del UID para la nueva "
+#~ "cuenta\n"
+#~ " de usuario\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Contraseña caducada."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: no puedo bloquear el fichero de contraseñas\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: no puedo abrir el fichero de contraseñas\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: no puedo bloquear el fichero de contraseñas ocultas\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: no puedo abrir el fichero de contraseñas ocultas\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: no se puede reescribir el fichero de contraseñas ocultas\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: no se puede reescribir el fichero de contraseñas\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: no puedo actualizar el fichero de contraseñas ocultas\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tNombre completo: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tNúmero de habitación: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tTeléfono del trabajo:% s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tTeléfono de casa: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr ""
+#~ "No se puede bloquear el fichero de contraseñas, inténtelo más tarde.\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "No se puede abrir el fichero de contraseñas.\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Error actualizando la entrada de la contraseña.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "No se pueden remitir los cambios del fichero de contraseñas.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "No se puede desbloquear el fichero de contraseñas.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: no se puede bloquear el fichero de grupos\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: no se puede abrir el fichero de contraseñas ocultas (shadow)\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: no se puede abrir el fichero de contraseñas ocultas (shadow)\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: error actualizando el fichero de contraseñas ocultas (shadow)\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: error actualizando la entrada del grupo\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: línea %d: grupo desconocido %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: línea %d: no se puede actualizar la entrada\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr ""
+#~ "%s: no se puede bloquear el fichero de contraseñas ocultas (shadow)\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: error actualizando el fichero de contraseñas ocultas (shadow)\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: error actualizando el fichero de contraseñas\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: línea %d: usuario desconocido %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: línea %d: no se puede actualizar la entrada de la contraseña\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: usuario desconocido\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Usuario desconocido: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Modo de uso: %s [-r|-R] grupo\n"
+
+#~ msgid " %s [-a user] group\n"
+#~ msgstr " %s [-a usuario] grupo\n"
+
+#~ msgid " %s [-d user] group\n"
+#~ msgstr " %s [-d usuario] grupo\n"
+
+#~ msgid " %s [-A user,...] [-M user,...] group\n"
+#~ msgstr " %s [-A usuario,...] [-M usuario,...] grupo\n"
+
+#~ msgid " %s [-M user,...] group\n"
+#~ msgstr " %s [-M usuario,...] grupo\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: no se puede obtener el bloqueo\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: no se puede obtener el bloqueo de shadow\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: no se puede reescribir el fichero oculto (shadow)\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: no se puede desbloquear el fichero\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: no se puede actualizar la entrada\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: no se puede actualizar la entrada oculta (shadow)\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "grupo desconocido: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: no se puede abrir el fichero\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: no se puede abrir el fichero de contraseñas ocultas (shadow)\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "¿Quién es?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: miembro desconocido %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: error añadiendo entrada nueva de grupo\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: no se puede reescribir el fichero grupos\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: no se puede reescribir el fichero de grupos oculto (shadow)\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: incapaz de bloquear el fichero de grupos\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: incapaz de abrir el fichero de grupos\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: incapaz de bloquear el fichero de grupos oculto (shadow)\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: incapaz de abrir el fichero de grupos oculto (shadow)\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: el GID %u no es único\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: error eliminando la entrada del grupo\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: error eliminando entrada del grupo oculto (shadow)\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: no se puede eliminar el grupo primario del usuario.\n"
+
+#, fuzzy
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "%s: Autenticación PAM fallida\n"
+
+#, fuzzy
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "%s: incapaz de bloquear el fichero de grupos\n"
+
+#, fuzzy
+#~ msgid "Cannot close group file\n"
+#~ msgstr "%s: no se puede abrir el fichero de grupos\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: no se encontró %s en /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u no es un GID único\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s no es un nombre único\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: no se puede reescribir el fichero de contraseñas\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: incapaz de bloquear el fichero de contraseñas\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: incapaz de abrir el fichero de contraseñas\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: no se puede actualizar la entrada oculta (shadow) para %s\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: no se puede actualizar la entrada para el grupo %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: no se puede bloquear el fichero de grupos oculto (shadow)\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: no se puede abrir el fichero de grupos oculto (shadow)\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: no se puede eliminar el grupo oculto (shadow) %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: no se puede actualizar el fichero de grupos oculto (shadow)\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: no se puede eliminar el fichero de grupos oculto\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "UID desconocido: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "GID desconocido: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: el grupo %s no existe\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: el usuario %s no existe\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: nombre de usuario `%s' incorrecto\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: no se puede bloquear /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: no se puede bloquear /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: no se puede bloquear /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: no se puede bloquear /etc/passwd.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: no se pueden abrir los ficheros\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: no se puede actualizar la entrada de la contraseña para %s\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: no se puede bloquear el fichero passwd\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: no se puede abrir el fichero passwd\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: no se puede eliminar la entrada oculta (shadow) para %s\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: no se puede actualizar el fichero passwd\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: no se puede actualizar la entrada para el usuario %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr ""
+#~ "%s: no se puede eliminar el fichero de contraseñas ocultas (shadow)\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: GID %s desconocido\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: grupo %s desconocido\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: sin memoria en update_gshadow\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr ""
+#~ "%s: no se puede reescribir el fichero de contraseñas ocultas (shadow)\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr ""
+#~ "%s: no se puede bloquear el fichero de contraseñas ocultas (shadow)\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: no se puede abrir el fichero de contraseñas ocultas (shadow)\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: error bloqueando el fichero de grupos\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: error abriendo el fichero de grupos\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: error bloqueando el fichero de grupos oculto (shadow)\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: error abriendo el fichero de grupos oculto (shadow)\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: error añadiendo entrada de contraseña nueva\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: error añadiendo entrada de contraseña oculta (shadow) nueva\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr ""
+#~ "%s: aviso: CREATE_HOME no está soportado, por favor, use -m en su lugar.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: error actualizando la entrada del grupo\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: error actualizando la entrada del grupo\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: no se puede abrir el fichero de grupos\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: no se puede abrir el fichero de grupos oculto (shadow)\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: error eliminando la entrada de contraseña\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: error eliminando la entrada de contraseña oculta (shadow)\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: error añadiendo entrada nueva de grupo\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: el uid %lu no es único\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: error cambiando la entrada de la contraseña\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: error eliminando la entrada de la contraseña\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: error eliminando entrada de contraseña oculta (shadow)\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: no se puede obtener un GID único\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " en «%.100s» desde «%.200s»"
+
+#~ msgid " on '%.100s'"
+#~ msgstr " en «%.100s»"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: línea %d: no se puede crear UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: el nombre %s no es único\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ " -h, --help\t\tdisplay this help message and exit\n"
+#~ " -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Modo de uso: chgpasswd [opciones]\n"
+#~ "\n"
+#~ "Opciones:\n"
+#~ " -e, --encrypted\tlas contraseñas proporcionadas están cifradas\n"
+#~ " -h, --help\t\tmuestra este mensaje de ayuda y termina\n"
+#~ " -m, --md5\t\tusa cifrado MD5 en vez de DES cuando las\n"
+#~ " contraseñas proporcionadas no estén cifradas\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "No hay fichero de contraseñas\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Disculpe.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Disculpe, aún no puede cambiarse la contraseña para %s.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Disculpe."
diff --git a/po/eu.gmo b/po/eu.gmo
new file mode 100644
index 0000000..92901c0
--- /dev/null
+++ b/po/eu.gmo
Binary files differ
diff --git a/po/eu.po b/po/eu.po
new file mode 100644
index 0000000..e7af077
--- /dev/null
+++ b/po/eu.po
@@ -0,0 +1,3524 @@
+# translation of eu.po to Euskara
+# Copyright (C) 2004, 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+#
+# Piarres Beobide <pi@beobide.net>, 2004, 2005, 2006, 2008, 2009.
+# Inaki Larranga Murgoitio <dooteo@euskalgnu.org>, 2005.
+msgid ""
+msgstr ""
+"Project-Id-Version: eu\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2011-11-26 19:42+0100\n"
+"Last-Translator: Piarres Beobide <pi@beobide.net>\n"
+"Language-Team: Euskara <debian-l10n-eu@lists.debian.org>\n"
+"Language: eu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 1.2.1\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"'%s' izeneko sarrera anitz %s-en. Mesedez konpondu pwck edo grpck "
+"erabiliaz.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "libcrypt-ek onartzen ez duen kriptografia metodoa? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr "konfigurazio errorea - ezin da %s balioa analizatu: '%s'"
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Ezin izan da lekua esleitu, konfigurazioaren informaziorako.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"konfigurazio errorea - %s item ezezaguna (eman honen berri "
+"administratzaileari)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr ""
+
+msgid "Password: "
+msgstr "Pasahitza: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s (r)en pasahitza: "
+
+#, fuzzy
+#| msgid "Cannot open audit interface - aborting.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "Ezin da auditatzeko interfazea ireki - uzten.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr ""
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not set sename for %s\n"
+msgstr "Ezin izan da lekua esleitu, konfigurazioaren informaziorako.\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "%s(r)en data informazioa aldatzen\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "%s: Ezin da Erabiltzaile izena zehaztu.\n"
+
+#, fuzzy, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "%s: Ezin da Erabiltzaile izena zehaztu.\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: memoriarik ez\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: ezin da %s ezabatu\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: %s etxe-direktorioa (%s) ez dago\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: ezin da '%s' sarrera %s-tik kendu\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: ezin da %s direktorioa sortu\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "lastlog: Ezinda %s-ren tamaina eskuratu: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: abisua: ezin da %s ezabatu: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: berrizendatu: %s: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: ezin da %s direktorioa %s gisa izenez aldatu\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: ezin da %s direktorioa %s gisa izenez aldatu\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: abisua: ezin da %s ezabatu: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: ezin da %s direktorioa sortu\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "lastlog: Ezinda %s-ren tamaina eskuratu: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: ezin da %s ezabatu\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: `(%d lerroa, %s erabiltzailea) pasahitza ez da aldatu\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: berrizendatu: %s: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: ezin da %s ireki\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Abisua: %s talde ezezaguna\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Abisua: talde gehiegi\n"
+
+msgid "Your password has expired."
+msgstr "Pasahitza iraungi egin da."
+
+msgid "Your password is inactive."
+msgstr "Pasahitza ezgaitua dago."
+
+msgid "Your login has expired."
+msgstr "Erabiltzaile-izena iraungi egin da."
+
+msgid " Contact the system administrator."
+msgstr " Jarri harremanetan sistema administratzailearekin."
+
+msgid " Choose a new password."
+msgstr " Aukeratu pasahitz berria."
+
+msgid "You must change your password."
+msgstr "Zure pasahitza aldatu behar duzu."
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Pasahitza %ld egun barru iraungi egingo da.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Pasahitza bihar iraungi egingo da."
+
+msgid "Your password will expire today."
+msgstr "Pasahitza gaur iraungi egingo da."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "Ezin da auditatzeko interfazea ireki - uzten.\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Ezin da tty sarrera-estandar modu edo jabea aldatu: %s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: huts %s desblokeatzean\n"
+
+#, c-format
+msgid "%s: "
+msgstr "%s: "
+
+msgid ": "
+msgstr ": "
+
+msgid "Environment overflow\n"
+msgstr "Inguruneak gainezka egin du\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Ez zenuke $%s aldatu beharko\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d hutsegite azken saio hasieratik.\n"
+"Azkena %s izan zen %s(e)n.\n"
+msgstr[1] ""
+"%d hutsegite azken saio hasieratik.\n"
+"Azkena %s izan zen %s(e)n.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "huts egin du postontzia jabez aldatzean"
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: Ezin da sistema UID bakarra lortu (ez dago UID erabilgarri gehiago)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: Ezin da GID bakarra lortu (ez dago GID erabilgarri gehiago)\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: Ezin da GID bakarra lortu (ez dago GID erabilgarri gehiago)\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: ezin da erabiltzailea sortu\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: ezin da erabiltzailea sortu\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: Ezin da sistema UID bakarra lortu (ez dago UID erabilgarri gehiago)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: ezin da UID bakarra lortu (ez dago UID erabilgarri gehiago)\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: ezin da UID bakarra lortu (ez dago UID erabilgarri gehiago)\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Authentication failure\n"
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: ¡autentifikazio errorea\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: '%s' eremu baliogabea\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Could not seteuid to %d\n"
+msgstr "Ezin izan da lekua esleitu, konfigurazioaren informaziorako.\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not set caps\n"
+msgstr "Ezin izan da lekua esleitu, konfigurazioaren informaziorako.\n"
+
+#, c-format
+msgid "%s: snprintf failed!\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: %d lerroa: chown %s-ek huts egin du: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: %d lerroa: chown %s-ek huts egin du: %s\n"
+
+msgid "Too many logins.\n"
+msgstr "Gehiegizko saio hasierak.\n"
+
+msgid "You have new mail."
+msgstr "Mezu berria duzu."
+
+msgid "No mail."
+msgstr "Mezurik ez."
+
+msgid "You have mail."
+msgstr "Mezua duzu."
+
+msgid "no change"
+msgstr "aldaketarik gabe"
+
+msgid "a palindrome"
+msgstr "palindromoa"
+
+msgid "case changes only"
+msgstr "Maiuskulak/minuskula bakarrik aldatu da"
+
+msgid "too similar"
+msgstr "antzekoegia"
+
+msgid "too simple"
+msgstr "sinpleegia"
+
+msgid "rotated"
+msgstr "aldirokoa"
+
+msgid "too short"
+msgstr "laburregia"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Pasahitz okerra: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() huts egin du, errorea: %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+msgid "passwd: password unchanged\n"
+msgstr "passwd: pasahitza ez da aldatu\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: pasahitza ongi eguneratu da\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: %s biltegia ez da onartzen\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start: %d errorea\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd: pam_start() huts egin du, errorea: %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "%s(r)en pasahitz okerra.\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr ""
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: huts baimenak kentzerakoan (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: etxeko tlf baliogabea: '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: ezin da %s direktorioa sortu\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: ezin da %s direktorioa sortu\n"
+
+#, fuzzy, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: ezin da %s direktorioa sortu\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"ENCRYPT_METHOD balio baliogabea: '%s'.\n"
+"DES-era lehenesten.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Ezin da '%s'-ra direktorioa aldatu\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Direktoriorik ez, HOME=/ erabiliz saioa hasiko da"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Ezin izan da %s exekutatu"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Baliogabeko erro direktorioa '%s'\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Ezin da erro direktorioa '%s'-ra aldatu\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: une honetan %s erabiltzaileak saioan sartuta dago\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: une honetan %s erabiltzaileak saioan sartuta dago\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Ezin da zure tty izena zehaztu."
+
+msgid "No"
+msgstr "Ez"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Erabilera: %s [aukerak] IZENA\n"
+"\n"
+"Aukerak:\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr " -d, --lastday AZKEN_EGUNA ezarri pasahitz aldaketa AZKEN_EGUNA\n"
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -E, --expiredate IRAUNGITZE_DATA\n"
+" ezarri kontu iraungitze data\n"
+" IRAUNGITZE_DATA-ra\n"
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+" -h, --help laguntza mezu hau bistarazi eta irten\n"
+
+#, fuzzy
+#| msgid " -g, --group edit group database\n"
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr " -g, --group talde datu-basea editatu\n"
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -I, --inactive INACTIVE ezarri pasahitza ezgaitua bezala\n"
+" -INACTIVE iraungitzean\n"
+
+msgid " -l, --list show account aging information\n"
+msgstr " -l, --list kontu denbora informazioa bistarazi\n"
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -m, --mindays GUTXI_EGUN pasahitz aldaketa gutxieneko data\n"
+" GUTXI_EGUN-era aldatu\n"
+
+#, fuzzy
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -M, --maxdays GEHI_EGUN pasashitz aldaketa gehienezko data\n"
+" GEHI_EGUN-era aldatu\n"
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -W, --warndays ABISU_EGUN iraungitze abisua ABISU_EGUN-era ezarri\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Idatzi balio berria, edo sakatu 'Sartu' tekla lehenetsirako"
+
+msgid "Minimum Password Age"
+msgstr "Pasahitzaren gutxiengo iraupena"
+
+msgid "Maximum Password Age"
+msgstr "Pasahitzaren gehienezko iraupena"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Azken pasahitz aldaketa (UUUU-HH-EE)"
+
+msgid "Password Expiration Warning"
+msgstr "Pasahitza iraungitzearen abisua"
+
+msgid "Password Inactive"
+msgstr "Pasahitza ezgaitua"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Kontuaren iraungitze data (UUUU-HH-EE)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Azken pasahitz aldaketa\t\t\t\t\t: "
+
+msgid "never"
+msgstr "Inoiz ere ez"
+
+msgid "password must be changed"
+msgstr "Pasahitza aldatu egin behar da"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Pasahitz iraungitze data\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Pasahitza ezgaitu egingo da\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Kontua iraungitzeko data\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Gutxiengo egunak, pasahitza aldatzeko\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Gehienezko egunak, pasahitza aldatzeko\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Abisuen egun kopurua, pasahitza iraungi aurretik\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: '%s' data baliogabea\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s:baliogabeko zenbakizko '%s' argumentua\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: ez erabili \"l\" beste bandera batzuekin\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: baimena ukatua.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Ezin da Erabiltzaile izena zehaztu.\n"
+
+#, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: PAM: %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: ezin da %s blokeatu; saiatu geroago.\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: ezin da %s ireki\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: huts %s-en aldaketak idazterakoan\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: huts %s sarrera berria prestatzean '%s'\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: ezin da itzalpeko (shadow) pasahitz fitxategia ez dago\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: `%s' erabiltzailea ez da %s-en existitzen\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "%s(r)en data informazioa aldatzen\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: errorea eremuak aldatzean\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Erabilera: %s [aukerak] [IZENA]\n"
+"\n"
+"Aukerak:\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+" -u, --help laguntza mezu hau bistarazi eta irten\n"
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr "Izen osoa"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "Gela zenbakia"
+
+msgid "Work Phone"
+msgstr "Laneko telefonoa"
+
+msgid "Home Phone"
+msgstr "Etxeko telefonoa"
+
+msgid "Other"
+msgstr "Bestelakoa"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Ezin izan da IDa root-era aldatu.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: ASCII ez diren karaktereak dituen izena: '%s'\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: izen baliogabea: '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s: ASCII ez diren karaktereak dituen gela zenbakia: '%s'\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: gela zenbaki baliogabea: '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: laneko tlf baliogabea: '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: etxeko tlf baliogabea: '%s'\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s'(e)k ASCII ez diren karaktereak ditu\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s'(e)k karaktere baliogabeak ditu\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: '%s' erabiltzailea ez da existitzen\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: ezin da NIS bezeroko '%s' erabiltzailea aldatu.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: '%s' da bezero honen NIS nagusia.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "%s(r)en erabiltzaile informazioa aldatzen\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: eremu luzegiak\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Erabilera: %s [aukerak]\n"
+"\n"
+"Aukerak:\n"
+
+#, fuzzy, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr " -c, --crypt-method zifratze metodoa (%s-etako bat)\n"
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr " -e, --encrypted emandako pasahitzak zifraturik daude\n"
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+" -m, --md5 zifratu testu laueko pasahitza MD5\n"
+" algoritmoa erabiliaz\n"
+
+#, fuzzy
+#| msgid ""
+#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
+#| " crypt algorithms\n"
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+" -s, --sha-rounds SHA* kriptografia algoritmoentzako\n"
+" SHA erronda kopurua\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: %s bandera bakarrik %s banderarekin onartzen da\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: -c, -e, eta -m banderak esklusiboak dira\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: onartzen ez den kriptografia metodoa: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: %d. lerroa: lerro luzegia\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: %d. lerroa: pasahitz berria falta da\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: huts %s kentzerakoan\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: %d lerroa: '%s' taldea ez da existitzen\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: %d lerroa: huts %s sarrera berria prestatzean '%s'\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s:errorea atzeman da, aldaketak alde batera utzi dira\n"
+
+#, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: `(%d lerroa, %s erabiltzailea) pasahitza ez da aldatu\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: %d lerroa: '%s' erabiltzailea ez da existitzen\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+" -s, --shell SHELL erabiltzaile kontuaren saio shell berria\n"
+
+msgid "Login Shell"
+msgstr "Saio-hasierako shell-a"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Ez zenuke '%s'-(r)en shell-a aldatu behar.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "%s(r)en saio-hasierako shell-a aldatzen\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: baliogabeko sarrera: %s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s: %s shell baliogabea da\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: '%s' erabiltzailea ez da existitzen\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: abisua: %s ez dago %s(r)en jabegoan\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: %s eta %s aukerak elkar-jotzen dute\n"
+
+#, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "%s: argumentu esperogabea: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+" -a, --all erabiltzaile guztien faillog-en\n"
+" erregistroak bistaratzen ditu\n"
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+" -l, --lock-secs SEG saio-hasieran hutsegin ondoren kontua "
+"zenbat\n"
+" segundutan blokeatuta egongo den\n"
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+" -m, --maximum GEH saio-hasierako GEHiengo hutsegite kopurua\n"
+" ezartzeko\n"
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+" -r, --reset saio-hasierako hutsegiteen kontatzailea\n"
+" berrezartzeko\n"
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time EGUNAK EGUNAK baino berriagoak diren faillog-en\n"
+" erregistroak bistaratzeko\n"
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+" -u, --user SAIOA faillog-en erregistroak bistaratzeko edo\n"
+" hutsegiteen kontatzailea eta ERABILTZAILEA\n"
+" izeneko erabiltzailearen(-r, -m edo -l\n"
+" aukerekin erabiltzen bada) mantentzeko\n"
+
+#, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: Huts %lu UIDaren sarrera eskuratzean\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "Saio-hasiera Hutsegiteak Gehienezkoa Azkena Aktiboa\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr " [%lus falta]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds blokeatuta]"
+
+#, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s: Errorea %lu UIDaren huts kontua berrabiaraztean\n"
+
+#, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: Huts %lu UIDarentzat max ezartzean\n"
+
+#, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: Huts %lu UIDarentzat blokeo-ordua ezartzean\n"
+
+#, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "%s: Eremu edo erabiltzaile ezezaguna: %s\n"
+
+#, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: Ezinda %s-ren tamaina eskuratu: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: huts %s kentzerakoan\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Erabilera: %s [aukera] TALDEA\n"
+"\n"
+"Aukerak:\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr " -a, --add ERAB Gehitu ERABiltzailea TALDEra\n"
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr " -d, --delete ERAB kendu ERABiltzailea TALDEtik\n"
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr " -r, --remove-password TALDEaren pasahitaz kendu\n"
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr ""
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+" -R, --restrict mugatu sarrera TALDEra bere partaideetara\n"
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr " -M, --members ERAB,... ezarri TALDEaren partaideen zerrenda\n"
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+" -A, --administrators ADMIN,...\n"
+" ezarri TALDEaren kudeatzaile zerrenda\n"
+
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "-A eta -M auekrekin kenduta, aukerak ezin dira nahastu.\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "Aukera hauek ezin dira nahastu.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: -A erabiltzeko itzalpeko talde-pasahitza eskatzen da\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: '%s' taldea ez da existitzen %s-(e)n\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: huts irakurketa-soileko %s ixtean\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "%s taldearen pasahitza aldatzen\n"
+
+msgid "New Password: "
+msgstr "Pasahitz berria: "
+
+msgid "Re-enter new password: "
+msgstr "Berretsi pasahitz berria: "
+
+msgid "They don't match; try again"
+msgstr "Ez dira berdinak, saiatu berriro"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Saiatu geroago\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "%s erabiltzailea %s taldean gehitzen\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "%s erabiltzailea %s taldetik kentzen\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: '%s' erabiltzailea ez da existitzen '%s'-ko partaide\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: ez da tty\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Erabilera: %s [aukerak] TALDEA\n"
+"\n"
+"Aukerak:\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+" -f, --force Indartu arrakastatsuki amaitzea nahiz\n"
+" ezarritako taldea aurretik egon\n"
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr " -g, --gid GID GID erabili talde berrirako\n"
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+" -K, --key KEY=BALIO /etc/login.defs lehenespenak gainidatzi\n"
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique onartu bikoizutiko (ez bakarra) GID-a duen\n"
+" taldea sortzea\n"
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+" -p, --password PASSWORD enkriptatutako pasahitza erabili talde "
+"berrirako\n"
+
+msgid " -r, --system create a system account\n"
+msgstr " -r, --system sistema kontu bat sortu\n"
+
+#, fuzzy
+#| msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr " -r, --remove-password TALDEaren pasahitaz kendu\n"
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: '%s' ez da baliozko talde-izena\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: '%s' talde ID baliogabea\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K KEY=BALIOA eskatzen du\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: '%s' taldea badago dagoeneko\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s: '%lu' GIDa badago dagoeneko\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: Ezin da Erabiltzaile izena zehaztu.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+" -r, --reset saio-hasierako hutsegiteen kontatzailea\n"
+" berrezartzeko\n"
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: ezin da '%s' sarrera %s-tik kendu\n"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: Ezin da '%s' erabiltzailearen talde nagusia kendu\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: '%s' taldea ez da existitzen\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: '%s' taldea NIS talde bat da\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s NIS nagusia da\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: '%s' erabiltzailea '%s' taldeko partaide da dagoeneko\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: memoriarik ez. Ezin da %s eguneratu.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Erabilera: %s [aukerak] [ekintza]\n"
+"\n"
+"Aukerak:\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+" -g, --group groupname aldatu talde-izena erabiltzailearen taldea "
+"ordez\n"
+" (root bakarrik)\n"
+
+msgid "\n"
+msgstr "\n"
+
+msgid "Actions:\n"
+msgstr "Ekintzak:\n"
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+" -a, --add erabiltzailea gehitu erabiltzaile-izena taldearen "
+"partaideetara\n"
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+" -d, --delete erabiltzailea kendu erabiltzaile-izena taldearen "
+"partaideetatik\n"
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr " -p, --purge garbitu talde baten partaide guztiak\n"
+
+msgid " -l, --list list the members of the group\n"
+msgstr " -l, --list taldearen partaideak zerrendatu\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: zure talde-izena ez da erabiltzaile-izenaren berdina\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s: root-ek bakarrik erabili dezake -g/--group aukera\n"
+
+#, fuzzy
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr " -r, --system sortu sistema kontuak\n"
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: '%s' talde izen baliogabea\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: %s taldea NIS talde bat da\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: %s erabiltzaile ezezaguna\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Erabilera: %s [aukerak] [taldea [gshadow]]\n"
+"\n"
+"Aukerak:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Erabilera: %s [aukerak] [taldea]\n"
+"\n"
+"Aukerak:\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s eta -r ezin dira batera erabili\n"
+
+msgid "invalid group file entry"
+msgstr "baliogabeko talde-fitxategiko sarrera"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "'%s' lerroa ezabatu? "
+
+msgid "duplicate group entry"
+msgstr "bikoiztu taldearen sarrera"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "'%s' baliogabeko talde-izena\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "'%lu' talde ID baliogabea\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "%s taldea: %s erabiltzailea ez dago\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "'%s' kidea ezabatu? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "ez dago bat datorren talde fitxategi sarrerarik %s-(e)n\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "'%s' taldea %s(e)n gehitu? "
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"%s taldeak %s-n sarrera bat du, baina %s-ko pasahitza eremua ez dago 'x' "
+"bezala ezarririk\n"
+
+msgid "invalid shadow group file entry"
+msgstr "Baliogabeko itzalpeko talde-fitxategiko sarrera"
+
+msgid "duplicate shadow group entry"
+msgstr "bikoiztutako itzalpeko taldearen sarrera"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "%s itzalpeko taldea: ez dago %s erabiltzaile administratzailea\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "'%s' kide administratzailea kendu? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "%s itzalpeko taldea: %s erabiltzailea ez dago\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: fitxategiak eguneratu dira\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: aldaketarik gabe\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: ezin da %s ezabatu\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Erabilera: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Erabilera: id\n"
+
+msgid " groups="
+msgstr " taldeak="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+" -b, --before EGUN EGUN kopurua baino zaharragoak diren\n"
+" erregistroak\n"
+
+#, fuzzy
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+" -a, --all erabiltzaile guztien faillog-en\n"
+" erregistroak bistaratzen ditu\n"
+
+#, fuzzy
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+" -a, --all erabiltzaile guztien faillog-en\n"
+" erregistroak bistaratzen ditu\n"
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time EGUNAK EGUNAK baino berriagoak diren erregistroak\n"
+" bakarrik bistaratzen ditu\n"
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+" -u, --user IZENA IZENA duen erabiltzailearen lastlog\n"
+" erregistroa bistaratzen du\n"
+
+msgid "Username Port From Latest"
+msgstr "Erabiltzaile-izena Ataka Nondik Azkena"
+
+msgid "Username Port Latest"
+msgstr "Erabiltzaile-izena Ataka Azkena"
+
+msgid "**Never logged in**"
+msgstr "**Inoiz ez du saiorik hasi**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s: Huts %lu UIDaren sarrera eskuratzean\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s: huts %lu UIDaren lastlog sarrera berrezartzean: %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 "Erabilera: %s [-p] [izena]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h ostalaria] [-f izena]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r ostalaria\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr "konfigurazio errorea - ezin da %s balioa analizatu: '%d'"
+
+msgid "Invalid login time"
+msgstr "Baliogabeko saio-hasieraren denbora"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Sistema aldiko mantenuagatik itxita"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Deskonexioa saltatuta -- root-ek saio-hastea baimenduta.]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr "%s: Ezingo du ziurrenik funtzionatu erro efektibo bat gabe\n"
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Ez dago utmp sarrerarik. \"login\" \"sh\" maila baxuenetik exekutatu beharko "
+"zenuke"
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Saio-hasiera denboraz kanpo %u segundo igarotakoan.\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "saio hasiera: PAM hutsa, uzten: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s izena: "
+
+msgid "login: "
+msgstr "izena: "
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Saiakera muga gainditu da (%u)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "Saioa hastea: PAM-ek uztea eskatu du\n"
+
+msgid "Login incorrect"
+msgstr "Izen okerra"
+
+#, fuzzy, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "%s: Ezin da Erabiltzaile izena zehaztu.\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s izena: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: huts zatitzerakoan: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSCTTY huts %s-en"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr ""
+"Abisua: saio-hasiera berriro gaitu egingo da aldi bateko blokeoaren ondoren."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Azken saio-hasiera: %s %s(e)n"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Azken saio-hasiera: %.19s %s(e)n"
+
+#, c-format
+msgid " from %.*s"
+msgstr " %.*s(e)tik"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"saio hasiera denbora pasa da\n"
+"\n"
+
+msgid "Usage: logoutd\n"
+msgstr "Erabilera: logoutd\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, c-format
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: huts %s kentzerakoan\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: huts %s kentzerakoan\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to unlock %s\n"
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: huts %s desblokeatzean\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: oinarrizko '%s' direktorio baliogabea\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: ezin da %s direktorioa sortu\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Erabilera: newgrp [-] [taldea]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Erabilera: sg taldea [[-c] komandoa]\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: huts %s kentzerakoan\n"
+
+msgid "Invalid password.\n"
+msgstr "Pasahitz baliogabea.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: huts zatitzerakoan: %s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: `%lu' GIDa ez da existitzen\n"
+
+msgid "too many groups\n"
+msgstr "talde gehiegi\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+#, fuzzy
+#| msgid " -q, --quiet quiet mode\n"
+msgid " -b, --badnames allow bad names\n"
+msgstr " -q, --quiet ixilik modua\n"
+
+msgid " -r, --system create system accounts\n"
+msgstr " -r, --system sortu sistema kontuak\n"
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: '%s' taldea itzalpeko talde bat da, baina ez dago /etc/group-en\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: '%s' erabiltzaile ID baliogabea\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: '%s' erabiltzaile-izen baliogabea\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: %d lerroa: lerro baliogabea\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: ezin da %s erabiltzailearen sarrera eguneratu (ez dago pasahitz "
+"datubasean)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: %d lerroa: ezin da erabiltzailea sortu\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: %d lerroa: ezin da taldea sortu\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: %d lerroa: `%s' erabiltzailea ez da existitzen %s-en\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: %d lerroa: ezin da pasahitza eguneratu\n"
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: %d lerroa: mkdir %s-ek huts egin du: %s\n"
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: %d lerroa: chown %s-ek huts egin du: %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: %d lerroa: ezin da sarrera eguneratu\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: huts %s sarrera berria prestatzean '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: ezin da erabiltzailea sortu\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: ezin da taldea sortu\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+" -a, --all kontu guztien pasahitzen egoera erreportea\n"
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr " -d, --delete emandako kontuaren pasahitza ezabatu\n"
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+" -e, --expire emandako kontuaren pasahitzaren\n"
+" iraungitzea behartu\n"
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+" -k, --keep-tokens pasahitza iraungirik bakarrik badago\n"
+" aldatu\n"
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -i, --inactive INAKTIBO ezarri iraungiriko pasahitz ezgaitzea\n"
+" INAKTIBO-ra\n"
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr " -l, --lock emandako kontua blokeatu\n"
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -n, --mindays GUTXI_EGUN ezarri pasahitz aldaketa gutxieneko data\n"
+" GUTXI_EGUN-ra\n"
+
+msgid " -q, --quiet quiet mode\n"
+msgstr " -q, --quiet ixilik modua\n"
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+" -r, --repository ERREPOSITORIOA\n"
+" ERREPOSITORIOA errepositorioko pashitza\n"
+" aldatu\n"
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+" -S, --status emandako kontuaren pasahitz egoera\n"
+" erreportea egin\n"
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr " -u, --unlock emandako kontuaren blokeoa kendu\n"
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -w, --warndays ABISU_EGUN ezarri iraungitze abisu data ABISU_EGUN-era\n"
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -x, --maxdays GEHI_EGUN ezarri pasahitz aldatu aurretik gehienezko\n"
+" egun kopurua GEHI_EGUN-era\n"
+
+msgid "Old password: "
+msgstr "Pasahitz zaharra: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Sartu pasahitz berria (gutxienez %d eta karaktere)\n"
+"Erabili maiuskulen, minuskulen eta zenbakien arteko konbinazioa.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Sartu pasahitz berria (gutxienez %d eta gehienez %d karaktere)\n"
+"Erabili maiuskulen, minuskulen eta zenbakien arteko konbinazioa.\n"
+
+msgid "New password: "
+msgstr "Pasahitz berria: "
+
+msgid "Try again."
+msgstr "Saiatu berriro."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Oharra: pasahitza ahula da (sartu berriro erabiltzen jarraitzeko)."
+
+msgid "They don't match; try again.\n"
+msgstr "Ez dira berdinak, saiatu berriro.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "%s(r)en pasahitzak ezin dira aldatu.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "%s(r)en pasahitza ezin dira aldatu oraindik.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: taldea desblokeatzeak pasahitz gabeko kontu baten emaitza izan dezake\n"
+"Erabiltzaile hau desblokeatzeko usermod -p erabiliaz pasahitz bat ezarri "
+"behar duzu.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: %s biltegia ez da onartzen\n"
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not authorized to change the password of %s\n"
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr "%s: %s ez dago %s-ren pasahitza aldatzeko baimendurik\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Ez zenuke %s(r)en shell-a aldatu behar.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "%s(r)en pasahitza aldatzen\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "%s(r)en pasahitza aldatu gabe dago.\n"
+
+#, c-format
+msgid "%s: password changed.\n"
+msgstr "%s: pasahitza aldatuta.\n"
+
+#, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "%s: pasahitz iraungitzea informazioa aldatua.\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Erabilera: %s [aukerak] [pasahitza]\n"
+"\n"
+"Aukerak:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Erabilera: %s [aukerak] [pasahitza [itzalpekoa]]\n"
+"\n"
+"Aukerak:\n"
+
+#, fuzzy
+msgid " -q, --quiet report errors only\n"
+msgstr " -r, --system sortu sistema kontuak\n"
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+
+msgid "invalid password file entry"
+msgstr "Baliogabeko pasahitzen fitxategiko sarrera"
+
+msgid "duplicate password entry"
+msgstr "bikoiztutako pasahitz sarrera"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "%s erabiltzaile-izen baliogabea\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "'%lu' erabiltzaile ID baliogabea\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "'%s' erabiltzailea: ez da %lu talderik\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "'%s' erabiltzailea: '%s' direktorioa ez da existitzen\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "'%s' erabiltzailea: '%s' programa ez da existitzen\n"
+
+#, fuzzy, c-format
+msgid "no tcb directory for %s\n"
+msgstr "%s: ezin da %s direktorioa sortu\n"
+
+#, fuzzy, c-format
+msgid "create tcb directory for %s?"
+msgstr "%s: ezin da %s direktorioa sortu\n"
+
+#, fuzzy, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "%s: ezin da %s direktorioa sortu\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: ezin da %s ireki\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "ez dago bat datorren pasahitz sarrerarik %s(e)n\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "'%s' erabiltzailea %s(e)n gehitu? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"%s erabiltzaileak sarrera bat du %s-en baina %s-ko pasahitza ereemua ez dago "
+"'x' gisa ezarririk\n"
+
+msgid "invalid shadow password file entry"
+msgstr "baliogabeko itzalpeko pasahitz-fitxategiko sarrera"
+
+msgid "duplicate shadow password entry"
+msgstr "bikoiztutako itzalpeko pasahitz-fitxategiko sarrera"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "%s erabiltzailea: pasahitza etorkizunean aldatu zen azken aldiz\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: ezin dira %s fitxategiko sarrerak ordenatu\n"
+
+#, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: huts %s-ren modua 0600-ra aldatzean\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "kontu honentzako 'su' sarbidea UKATUTA.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Pasahitz autentifikazioa saltatuta.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Sartu zure pasahitz PROPIOA autentifikazio gisa.\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: Ezin da Erabiltzaile izena zehaztu.\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr ""
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr ""
+
+msgid "Session terminated, terminating shell..."
+msgstr ""
+
+#, c-format
+msgid " ...killed.\n"
+msgstr ""
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr ""
+
+msgid " ...terminated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: su [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
+#| " -h, --help display this help message and exit\n"
+#| " -, -l, --login make the shell a login shell\n"
+#| " -m, -p,\n"
+#| " --preserve-environment do not reset environment variables, and\n"
+#| " keep the same shell\n"
+#| " -s, --shell SHELL use SHELL instead of the default in "
+#| "passwd\n"
+#| "\n"
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"Erabilera: su [aukerak] [IZENA]\n"
+"\n"
+"Aukerak:\n"
+" -c, --command KOMANDOA deituriko shell-ari KOMANDOA pasa\n"
+" -h, --help laguntza testu hau bistarazi eta irten\n"
+" -, -l, --login shell-a saio shell bihurtu\n"
+" -m, -p,\n"
+" --preserve-environment ez ingurune aldagaiak berezarri eta "
+"mantendu\n"
+" shell berdina\n"
+" -s, --shell SHELL SHELL erabili lehenetsiaren ordez\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ez ikusi egin zaio)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Ez duzu 'su %s' exekutatzeko baimenik\n"
+
+msgid "(Enter your own password)"
+msgstr "(zure pasahitza idatzi)"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: ¡autentifikazio errorea\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s: Ez duzu orain su erabiltzeko baimenik\n"
+
+#, fuzzy, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "Ez dago 'root'-en pasahitzik"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: terminal batetik exekutatu behar da\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: %d errorea\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "lastlog: Ezinda %s-ren tamaina eskuratu: %s\n"
+
+#, c-format
+msgid "Cannot execute %s\n"
+msgstr "Ezin izan da %s exekutatu\n"
+
+msgid "No password file"
+msgstr "Ez dago pasahitz-fitxategirik"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY huts egin du"
+
+msgid "No password entry for 'root'"
+msgstr "Ez dago 'root'-en pasahitzik"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Sakatu Kontrol+d teklak hasiera arrunta erabiltzeko,\n"
+"(edo idatzi root-en pasahitza sistemaren mantentze-lanetarako):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Sistemaren mantentze-lanetako moduan sartzen"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr "%s: %s konfigurazioa %s-n dagoena alde batetara utziko da\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: ezin da lehenespen fitxategi berria sortu\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: ezin da lehenespen fitxategi berria sortu\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: ezin da lehenespen fitxategi berria ireki\n"
+
+#, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: lerro luzeegia %s-n: %s..."
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: ezin da %s direktorioa sortu\n"
+
+#, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: berrizendatu: %s: %s\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: taldea '%s' NIS talde bat da.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: talde gehiegi zehaztu dira (geh. %d).\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Erabilera: %s [aukerak] IZENA\n"
+" %s -D\n"
+" %s -D [aukerak]\n"
+"\n"
+"Aukerak:\n"
+
+#, fuzzy
+#| msgid " -s, --shadow edit shadow or gshadow database\n"
+msgid " --badnames do not check for bad names\n"
+msgstr " -s, --shadow shadow edo gshadow datubasea editatu\n"
+
+#, fuzzy
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+" -b, --base-dir BASE_DIR Erabiltzaile kontu berriaren etxe\n"
+" direktorioaren oinarri direktorioa\n"
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr ""
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr ""
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr ""
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr ""
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+" -Z, --selinux-user SEERAB erabili SEUSER zehatz bat SELinux "
+"erabiltzaile mapatzearentzat\n"
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: oinarrizko '%s' direktorio baliogabea\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: '%s' iruzkin baliogabea\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: '%s' etxe-direktorio baliogabea\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: -e itzalpeko pasahitza eskatzen du\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: -f itzalpeko pasahitza eskatzen du\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: '%s' eremu baliogabea\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: '%s' shell baliogabea\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: abisua: %s ez dago %s(r)en jabegoan\n"
+
+#, c-format
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr "%s: -Z-ek SELinux gaituriko kernel bat behar du\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr "%s: huts %lu UIDaren faillog erregistroa berrezartzean: %s\n"
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr "%s: huts %lu UIDaren lastlog sarrera berrezartzean: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s: huts %lu UIDaren faillog erregistroa berrezartzean: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: huts %s sarrera berria prestatzean '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error changing fields\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: errorea eremuak aldatzean\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: ezin da %s direktorioa sortu\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s home directory (%s) not found\n"
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: %s etxe-direktorioa (%s) ez dago\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "huts egin du postontzia jabez aldatzean"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: ezin da %s direktorioa sortu\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: %d lerroa: chown %s-ek huts egin du: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: %d lerroa: chown %s-ek huts egin du: %s\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "Postakutxa fitxategia sortzen"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Ez da 'mail' taldea aurkitu. Erabiltzaile postakutxa fitxategia 0600 moduan\n"
+"sortzen.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Postakutxa fitxategi baimenak ezartzen"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: '%s' erabiltzailea badago dagoeneko\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: %s taldea badago - erabiltzaile hau talde honetan gehitzeko -g erabili.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: ezin da erabiltzailea sortu\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: %lu UIDa ez da bakarra\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: ezin da %s direktorioa sortu\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: ezin da taldea sortu\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: ezin da erabiltzailea sortu\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: ezin da taldea sortu\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: abisua: etxe direktorioa badago dagoeneko.\n"
+"Ez da bertara skel direktorioko fitxategirik kopiatuko.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+"%s: abisua: %s erabiltzaile izena %s SELinux erabiltzailera mapatzean huts "
+"egin du.\n"
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+" -f, --force fitxategien ezabatzea indartu nahiz ez\n"
+" erabiltzailearenak izan\n"
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+" -r, --remove etxe direktorioa eta posta hilara ezabatu\n"
+
+#, fuzzy
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+" -Z, --selinux-user SELinux erabiltzaile mapatze berria "
+"erabiltzailearen kontuarentzat\n"
+
+#, fuzzy, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr "%s: Ezin da '%s' erabiltzailearen talde nagusia kendu\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: ezin da %s taldea ezabatu beste erabiltzaile baten talde nagusia bait "
+"da.\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "%s: ezin da '%s' sarrera %s-tik kendu\n"
+
+#, fuzzy, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: %s etxe-direktorioa (%s) ez dago\n"
+
+#, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: abisua: ezin da %s ezabatu: %s\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s ez dago %s(r)en jabetzan. ez da ezabatuko\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: huts baimenak kentzerakoan (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "lastlog: Ezinda %s-ren tamaina eskuratu: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: ezin da '%s' sarrera %s-tik kendu\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: %s erabiltzailea NIS erabiltzaile bat da\n"
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: %s etxe-direktorioa (%s) ez dago\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s: ez da %s direktorioa ezabatuko (%s(r)en etxea ezabatuko luke)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: errorea %s direktorioa ezabatzean\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: errorea %s direktorioa ezabatzean\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+"%s: abisua: %s erabiltzaile izena %s SELinux erabiltzailera mapatzean huts "
+"egin du.\n"
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr " -c, --comment IRUZKINA GECOS eremuaren balio berria\n"
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+" -d, --home-dir ETXE_DIR erabiltzaile kontu berriaren etxe "
+"direktorioa\n"
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr " -e, --expiredate IRAUNG_DATA kontu iraungitze data ezarri\n"
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -f, --inactive INAKTIBO iraungitze ondorengo pasahitz ezgaitzea\n"
+" to INAKTIBO-ra ezarri\n"
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+" -g, --gid TALDE erabiltzaile kontu berriarekin TALDE\n"
+" erabiltzea behartu\n"
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr ""
+" -G, --groups TALDEAK erabiltzaile kontu berriaren talde\n"
+" gehigarriak bistarazi\n"
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+" -a, --append gehitu erabiltzailea -G aukerak zehaztutako "
+"talde\n"
+" gehigarrietara beste taldeetatik kendu gabe\n"
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr " -l, --login IZENA saio hasiera izenaren balio berria\n"
+
+msgid " -L, --lock lock the user account\n"
+msgstr " -L, --lock erabiltzaile kontua blokeatu\n"
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+" -m, --move-home etxe direktorioaren edukia kokapen berrira\n"
+" mugitu (--d-rekin bakarrik erabilgarri)\n"
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique onartu UID bikoiztuak (ez bakarrak) "
+"erabiltzea\n"
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+" -p, --password PASAHITZA Enkriptaturiko pasahitza erabili pasahitz\n"
+" berriarentzat\n"
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr " -u, --uid UID erabiltzaile kontuaren UID berria\n"
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr " -U, --unlock erabiltzaile kontua desblokeatu\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 ""
+
+#, fuzzy
+msgid ""
+" -Z, --selinux-user SEUSER new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+" -Z, --selinux-user SELinux erabiltzaile mapatze berria "
+"erabiltzailearen kontuarentzat\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: erabiltzaile pasahitza desblokeatzeak pasahitz gabeko kontu baten "
+"emaitza izan dezake\n"
+"Erabiltzaile pasahitz hau desblokeatzeko usermod -p erabiliaz pasahitz bat "
+"ezarri behar duzu.\n"
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: '%s' erabiltzailea badago dagoeneko %s-n\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: '%s' data baliogabea\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: '%s' data baliogabea\n"
+
+#, fuzzy, c-format
+msgid "%s: no options\n"
+msgstr "%s: ezin da %s ireki\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: -L, -p, eta -U banderak esklusiboak dira\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: -e eta -f aukerek itzalpeko pasahitzak eskatzen dute\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: '%lu' UIDa badago dagoeneko\n"
+
+#, fuzzy, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr "%s: %s ez dago %s-ren pasahitza aldatzeko baimendurik\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: %s direktorioa badago\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: ezin da %s direktorioa sortu\n"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: abisua: huts %s etxe direktorio zaharra guztiz ezabatzerakoan"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: ezin da %s direktorioa %s gisa izenez aldatu\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: huts %lu erabiltzailearen lastlog sarrera %lu erabiltzailera kopiatzean: "
+"%s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: huts %lu erabiltzailearen faillog sarrera %lu erabiltzailera kopiatzean: "
+"%s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: abisua: %s ez dago %s(r)en jabegoan\n"
+
+msgid "failed to change mailbox owner"
+msgstr "huts egin du postontzia jabez aldatzean"
+
+msgid "failed to rename mailbox"
+msgstr "huts egin du postontzia izenez aldatzean"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s: huts %s sarrera berria prestatzean '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s: huts %s sarrera berria prestatzean '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s: huts %s sarrera berria prestatzean '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s: huts %s sarrera berria prestatzean '%s'\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"%s eraldatu duzu\n"
+"Konsistetziagatik %s eraldatu behar duzu.\n"
+"Mesedez erabili '%s' komandoa horretarako.\n"
+
+msgid " -g, --group edit group database\n"
+msgstr " -g, --group talde datu-basea editatu\n"
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr " -p, --passwd pasahitz datu-basea editatu\n"
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr " -s, --shadow shadow edo gshadow datubasea editatu\n"
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: huts %s kentzerakoan\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: %s ez da aldatu\n"
+
+#, fuzzy
+msgid "failed to create scratch directory"
+msgstr "huts egin du postontzia izenez aldatzean"
+
+msgid "failed to drop privileges"
+msgstr "huts baimenak kentzerakoan"
+
+msgid "Couldn't get file context"
+msgstr "Ezin da fitxategi testuingurua eskuratu"
+
+msgid "setfscreatecon () failed"
+msgstr "setfscreatecon () -ek huts egin du"
+
+#, fuzzy
+msgid "failed to gain privileges"
+msgstr "%s: huts baimenak kentzerakoan (%s)\n"
+
+msgid "Couldn't lock file"
+msgstr "Ezin da fitxategia blokeatu"
+
+msgid "Couldn't make backup"
+msgstr "Ezin izan da babeskopiarik egin"
+
+#, fuzzy, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s: PAM: %s\n"
+
+#, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+#, fuzzy
+msgid "failed to open scratch file"
+msgstr "huts egin du postontzia izenez aldatzean"
+
+#, fuzzy
+msgid "failed to unlink scratch file"
+msgstr "%s: huts %s desblokeatzean\n"
+
+#, fuzzy
+msgid "failed to stat edited file"
+msgstr "huts egin du postontzia izenez aldatzean"
+
+#, fuzzy
+msgid "failed to allocate memory"
+msgstr "huts egin du postontzia jabez aldatzean"
+
+#, fuzzy
+msgid "failed to create backup file"
+msgstr "huts egin du postontzia izenez aldatzean"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: ezin da %s leheneratu: %s (zure aldaketak %s(e)n daude)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: oinarrizko '%s' direktorio baliogabea\n"
+
+#~ msgid " -c, --crypt-method the crypt method (one of %s)\n"
+#~ msgstr " -c, --crypt-method zifratze metodoa (%s-etako bat)\n"
+
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr ""
+#~ "Erabilera: vipw [aukerak]\n"
+#~ "\n"
+#~ "Aukerak:\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "malloc(%d) huts egin du\n"
+
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Erabilera: chage [aukerak] [IZENA]\n"
+#~ "\n"
+#~ "Aukerak:\n"
+#~ " -d, --lastday AZKEN_EGUNA ezarri pasahitz aldaketa AZKEN_EGUNA\n"
+#~ " -E, --expiredate IRAUNGITZE_DATA ezarri kontu iraungitze data\n"
+#~ " IRAUNGITZE_DATA-ra\n"
+#~ " -h, --help laguntza mezu hau bistarazi eta "
+#~ "irten\n"
+#~ " -I, --inactive INACTIVE ezarri pasahitza ezgaitua bezala\n"
+#~ " -INACTIVE iraungitzean\n"
+#~ " -l, --list kontu denbora informazioa bistarazi\n"
+#~ " -m, --mindays GUTXI_EGUN pasahitz aldaketa gutxieneko data\n"
+#~ " GUTXI_EGUN-era aldatu\n"
+#~ " -M, --maxdays GEHI_EGUN pasashitz aldaketa gehienezko data\n"
+#~ " GEHI_EGUN-era aldatu\n"
+#~ " -W, --warndays ABISU_EGUN iraungitze abisua ABISU_EGUN-era "
+#~ "ezarri\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: PAM autentifikazioak huts egin du\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "Erabilera: %s [-f izen_osoa] [-r gela_zenb] [-w lan_tlf]\n"
+#~ "\t[-h etxe_tlf] [-o bestelakoa] [erabiltzaile-izena]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr ""
+#~ "Erabilera: %s [-f izen_osoa] [-r gela_zb] [-w lan_tlf] [-h etxe_tlf]\n"
+
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Erabilera: %s [aukerak]\n"
+#~ "\n"
+#~ "Aukerak:\n"
+#~ " -c, --crypt-method kriptografia metodoa (%s-etako bat)\n"
+#~ " -e, --encrypted emandako pasahitzak enkripatzen dira\n"
+#~ " -h, --help laguntzako mezu hau erakutsi eta irten\n"
+#~ " egiten da\n"
+#~ " -m, --md5 erabili MD5 enkriptatze algoritmoa ,\n"
+#~ " pasahitzak enkriptatuta ez daudenean\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Erabilera: chsh [aukerak] [IZENA]\n"
+#~ "\n"
+#~ "Aukerak:\n"
+#~ " -h, --help laguntza testu hau bistarazi eta irten\n"
+#~ " -r, --shell IZENA erabiltzaile kontukoaren shell berria\n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "Erabilera: expiry {-f|-c}\n"
+
+#~ msgid "faillog: Failed to get the entry for UID %lu\n"
+#~ msgstr "huts-erregistroa: Huts %lu UID-arentat sarrera eskuratzean\n"
+
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "huts-erregistroa: Ezin da %s ireki: %s\n"
+
+#~ msgid "faillog: Cannot get the size of %s: %s\n"
+#~ msgstr "huts-erregistroa: Ezinda %s tamaina eskuratu: %s\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "Erabilera: groupdel taldea\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "Erabilera: %s [-r] [-s] [taldea [gshadow]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "Erabilera: %s [-r] [-s] [taldea]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: -s eta -r ezin dira batera erabili\n"
+
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "Erabilera: grpconv\n"
+
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "Erabilera: grpunconv\n"
+
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Erabilera: lastlog [aukerak]\n"
+#~ "\n"
+#~ "Aukerak:\n"
+#~ " -b, --before EGUN EGUN kopurua baino zaharragoak diren\n"
+#~ " erregistroak\n"
+#~ " -h, --help laguntzako mezu hau bistaratu eta irten\n"
+#~ " egiten da\n"
+#~ " -t, --time EGUNAK EGUNAK baino berriagoak diren "
+#~ "erregistroak\n"
+#~ " bakarrik bistaratzen ditu\n"
+#~ " -u, --user IZENA IZENA duen erabiltzailearen lastlog\n"
+#~ " erregistroa bistaratzen du\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Erabilera: passwd [aukerak] [IZENA]\n"
+#~ "\n"
+#~ "Aukerak:\n"
+#~ " -a, --all kontu guztien pasahitzen egoera "
+#~ "erreportea\n"
+#~ " -d, --delete emandako kontuaren pasahitza ezabatu\n"
+#~ " -e, --expire emandako kontuaren pasahitzaren\n"
+#~ " iraungitzea behartu\n"
+#~ " -h, --help laguntza mezu hau bistarazi eta irten\n"
+#~ " -k, --keep-tokens pasahitza iraungirik bakarrik badago\n"
+#~ " aldatu\n"
+#~ " -i, --inactive INAKTIBO ezarri iraungiriko pasahitz ezgaitzea\n"
+#~ " INAKTIBO-ra\n"
+#~ " -l, --lock emandako kontua blokeatu\n"
+#~ " -n, --mindays GUTXI_EGUN ezarri pasahitz aldaketa gutxieneko "
+#~ "data\n"
+#~ " GUTXI_EGUN-ra\n"
+#~ " -q, --quiet ixilik modua\n"
+#~ " -r, --repository ERREPOSITORIOA ERREPOSITORIOA errepositorioko "
+#~ "pashitza\n"
+#~ " aldatu\n"
+#~ " -S, --status emandako kontuaren pasahitz egoera\n"
+#~ " erreportea egin\n"
+#~ " -u, --unlock emandako kontuaren blokeoa kendu\n"
+#~ " -w, --warndays ABISU_EGUN ezarri iraungitze abisu data "
+#~ "ABISU_EGUN-era\n"
+#~ " -x, --maxdays GEHI_EGUN ezarri pasahitz aldatu aurretik "
+#~ "gehienezko\n"
+#~ " egun kopurua GEHI_EGUN-era\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr "Erabilera: %s [-q] [-r] [-s] [pasahitza [itzalpekoa]]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr "Erabilera: %s [-q] [-r] [-s] [pasahitza [itzalpekoa]]\n"
+
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "Erabilera: pwconv\n"
+
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "Erabilera: pwunconv\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "ID ezezaguna: %s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "Ez dago shell-a\n"
+
+#~ msgid ""
+#~ "Usage: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force removal of files,\n"
+#~ " even if not owned by user\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -r, --remove remove home directory and mail spool\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Erabilera: userdel [aukerak] IZENA\n"
+#~ "\n"
+#~ "Aukerak:\n"
+#~ " -f, --force fitxategien ezabatzea indartu nahiz ez\n"
+#~ " erabiltzailearenak izan\n"
+#~ " -h, --help laguntza testu hau bistarazi eta irten\n"
+#~ " -r, --remove etxe direktorioa eta posta hilara "
+#~ "ezabatu\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Erabilera: usermod [aukerak] IZENA\n"
+#~ "\n"
+#~ "Aukerak:\n"
+#~ " -c, --comment IRUZKINA GECOS eremuaren balio berria\n"
+#~ " -d, --home-dir ETXE_DIR erabiltzaile kontu berriaren etxe "
+#~ "direktorioa\n"
+#~ " -e, --expiredate IRAUNG_DATA kontu iraungitze data ezarri\n"
+#~ " -f, --inactive INAKTIBO iraungitze ondorengo pasahitz ezgaitzea\n"
+#~ " to INAKTIBO-ra ezarri\n"
+#~ " -g, --gid TALDE erabiltzaile kontu berriarekin TALDE\n"
+#~ " erabiltzea behartu\n"
+#~ " -G, --groups TALDEAK erabiltzaile kontu berriaren talde\n"
+#~ " gehigarriak bistarazi\n"
+#~ " -a, --append gehitu erabiltzailea -G aukerak "
+#~ "zehaztutako talde\n"
+#~ " gehigarrietara beste taldeetatik kendu "
+#~ "gabe\n"
+#~ " -h, --help laguntza mezu hau bistarazi eta irten\n"
+#~ " -l, --login IZENA saio hasiera izenaren balio berria\n"
+#~ " -L, --lock erabiltzaile kontua blokeatu\n"
+#~ " -m, --move-home etxe direktorioaren edukia kokapen "
+#~ "berrira\n"
+#~ " mugitu (--d-rekin bakarrik erabilgarri)\n"
+#~ " -o, --non-unique onartu UID bikoiztuak (ez bakarrak) "
+#~ "erabiltzea\n"
+#~ " -p, --password PASAHITZA Enkriptaturiko pasahitza erabili "
+#~ "pasahitz\n"
+#~ " berriarentzat\n"
+#~ " -s, --shell SHELL erabiltzaile kontuaren saio shell berria\n"
+#~ " -u, --uid UID erabiltzaile kontuaren UID berria\n"
+#~ " -U, --unlock erabiltzaile kontua desblokeatu\n"
+#~ "%s\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s: ez da banderarik eman\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: vipw [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -g, --group edit group database\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -p, --passwd edit passwd database\n"
+#~| " -q, --quiet quiet mode\n"
+#~| " -s, --shadow edit shadow or gshadow database\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group edit group database\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -p, --passwd edit passwd database\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow edit shadow or gshadow database\n"
+#~ " -u, --user which user's tcb shadow file to edit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Erabilera: vipw [aukerak]\n"
+#~ "\n"
+#~ "Aukerak:\n"
+#~ " -g, --group talde datu-basea editatu\n"
+#~ " -h, --help laguntza testu hau bistarazi eta irten\n"
+#~ " -p, --passwd pasahitz datu-basea editatu\n"
+#~ " -q, --quiet ixiltasun modua\n"
+#~ " -s, --shadow shadow edo gshadow datubasea editatu\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: %s [option] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --add USER add USER to GROUP\n"
+#~ " -d, --delete USER remove USER from GROUP\n"
+#~ " -r, --remove-password remove the GROUP's password\n"
+#~ " -R, --restrict restrict access to GROUP to its members\n"
+#~ " -M, --members USER,... set the list of members of GROUP\n"
+#~ "%s\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Erabilera: %s [aukera] TALDEA\n"
+#~ "\n"
+#~ "Aukerak:\n"
+#~ " -a, --add ERAB Gehitu ERABiltzailea TALDEra\n"
+#~ " -d, --delete ERAB kendu ERABiltzailea TALDEtik\n"
+#~ " -r, --remove-password TALDEaren pasahitaz kendu\n"
+#~ " -R, --restrict mugatu sarrera TALDEra bere "
+#~ "partaideetara\n"
+#~ " -M, --members ERAB,... ezarri TALDEaren partaideen zerrenda\n"
+#~ "%s\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmems [options] [action]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group groupname change groupname instead of the user's "
+#~ "group\n"
+#~ " (root only)\n"
+#~ "\n"
+#~ "Actions:\n"
+#~ " -a, --add username add username to the members of the group\n"
+#~ " -d, --delete username remove username from the members of the "
+#~ "group\n"
+#~ " -p, --purge purge all members from the group\n"
+#~ " -l, --list list the members of the group\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Erabilera: groupmems [aukerak] [ekintza]\n"
+#~ "\n"
+#~ "Aukerak:\n"
+#~ " -g, --group groupname aldatu talde-izena erabiltzailearen "
+#~ "taldea ordez\n"
+#~ " (root bakarrik)\n"
+#~ "\n"
+#~ "Ekintzak:\n"
+#~ " -a, --add erabiltzailea gehitu erabiltzaile-izena taldearen "
+#~ "partaideetara\n"
+#~ " -d, --delete erabiltzailea kendu erabiltzaile-izena taldearen "
+#~ "partaideetatik\n"
+#~ " -p, --purge garbitu talde baten partaide guztiak\n"
+#~ " -l, --list taldearen partaideak zerrendatu\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: %s [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr ""
+#~ "Erabilera: %s [aukerak]\n"
+#~ "\n"
+#~ "Aukerak:\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s: ezin da %s sortu\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s:ezin da %s jabez aldatu\n"
+
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all display faillog records for all users\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -l, --lock-time SEC after failed login lock account to SEC "
+#~ "seconds\n"
+#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
+#~ " -r, --reset reset the counters of login failures\n"
+#~ " -t, --time DAYS display faillog records more recent than "
+#~ "DAYS\n"
+#~ " -u, --user LOGIN display faillog record or maintains "
+#~ "failure\n"
+#~ " counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ " options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Erabilera: faillog [aukerak]\n"
+#~ "\n"
+#~ "Aukerak:\n"
+#~ " -a, --all erabiltzaile guztien faillog-en\n"
+#~ " erregistroak bistaratzen ditu\n"
+#~ " -h, --help laguntzako mezu hau bistarazi eta irten\n"
+#~ " -l, --lock-time SEG saio-hasieran hutsegin ondoren kontua "
+#~ "zenbat\n"
+#~ " segundutan blokeatuta egongo den\n"
+#~ " -m, --maximum GEH saio-hasierako GEHiengo hutsegite "
+#~ "kopurua\n"
+#~ " ezartzeko\n"
+#~ " -r, --reset saio-hasierako hutsegiteen kontatzailea\n"
+#~ " berrezartzeko\n"
+#~ " -t, --time EGUNAK EGUNAK baino berriagoak diren faillog-en\n"
+#~ " erregistroak bistaratzeko\n"
+#~ " -u, --user SAIOA faillog-en erregistroak bistaratzeko edo\n"
+#~ " hutsegiteen kontatzailea eta "
+#~ "ERABILTZAILEA\n"
+#~ " izeneko erabiltzailearen(-r, -m edo -l\n"
+#~ " aukerekin erabiltzen bada) mantentzeko\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force exit with success status if the\n"
+#~ " specified group already exists\n"
+#~ " -g, --gid GID use GID for the new group\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique allow create group with duplicate\n"
+#~ " (non-unique) GID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new group\n"
+#~ " -r, --system create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Erabilera: groupadd [aukerak] TALDEA\n"
+#~ "\n"
+#~ "Aukerak:\n"
+#~ " -f, --force Indartu arrakastatsuki amaitzea nahiz\n"
+#~ " ezarritako taldea aurretik egon\n"
+#~ " -g, --gid GID GID erabili talde berrirako\n"
+#~ " -h, --help laguntza hau bistarazi eta irten\n"
+#~ " -K, --key KEY=BALIO /etc/login.defs lehenespenak gainidatzi\n"
+#~ " -o, --non-unique onartu bikoizutiko (ez bakarra) GID-a "
+#~ "duen\n"
+#~ " taldea sortzea\n"
+#~ " -p, --password PASSWORD enkriptatutako pasahitza erabili talde "
+#~ "berrirako\n"
+#~ " -r, --system sistema kontu bat sortu\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --gid GID force use new GID by GROUP\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Erabilera: groupmod [aukerak] TALDEA\n"
+#~ "\n"
+#~ "Aukerak::\n"
+#~ " -g, --gid GID taldearentzat GID berria erabiltzea "
+#~ "indartu\n"
+#~ " -h, --help laguntza hau bistarazi eta irten\n"
+#~ " -K, --new-name TALDE_BERRIA Taldearentzat TALDE_BERRI izena\n"
+#~ " erabiltzea indartu\n"
+#~ " -o, --non-unique onartu TALDEAK bikoizutiko (ez bakarra) "
+#~ "GID-a erabiltzea\n"
+#~ " -p, --password PASSWORD enkriptatutako pasahitza erabili pasahitz "
+#~ "berrirako\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~ " home directory\n"
+#~ " -c, --comment COMMENT set the GECOS field for the new user "
+#~ "account\n"
+#~ " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~ " -D, --defaults print or save modified default useradd\n"
+#~ " configuration\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP for the new user account\n"
+#~ " -G, --groups GROUPS list of supplementary groups for the new\n"
+#~ " user account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -l, --no-log-init do not add the user to the lastlog and\n"
+#~ " faillog databases\n"
+#~ " -m, --create-home create home directory for the new user\n"
+#~ " account\n"
+#~ " -M, --no-create-home do not create user's home directory\n"
+#~ " (overrides /etc/login.defs)\n"
+#~ " -N, --no-user-group do not create a group with the same name "
+#~ "as\n"
+#~ " the user\n"
+#~ " -o, --non-unique allow create user with duplicate\n"
+#~ " (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new user\n"
+#~ " account\n"
+#~ " -r, --system create a system account\n"
+#~ " -s, --shell SHELL the login shell for the new user account\n"
+#~ " -u, --uid UID force use the UID for the new user "
+#~ "account\n"
+#~ " -U, --user-group create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Erabilera: useradd [aukerak] IZENA\n"
+#~ "\n"
+#~ "Aukerak:\n"
+#~ " -b, --base-dir BASE_DIR Erabiltzaile kontu berriaren etxe\n"
+#~ " direktorioaren oinarri direktorioa\n"
+#~ " -c, --comment IRUZKINA erabiltzaile kontu berriaren GECOS "
+#~ "ezarri\n"
+#~ " -d, --home-dir HOME_DIR erabiltzaile kontu berriaren etxe\n"
+#~ " direktorioa\n"
+#~ " -D, --defaults bistarazi edo gorde aldaturiko\n"
+#~ " lehenetsiriko useradd konfigurazioa\n"
+#~ " -e, --expiredate IRAUNG_DATA kontu iraungitze data ezarri\n"
+#~ " -f, --inactive EZAKTIBO ezarri pasahitza ez-aktibo gisa EZAKTIBO "
+#~ "iarungitzearen\n"
+#~ " ondoren\n"
+#~ " -g, --gid TALDE erabiltzaile kontu berriarekin TALDE\n"
+#~ " erabiltzea behartu\n"
+#~ " -G, --groups TALDEAK erabiltzaile kontu berriaren talde\n"
+#~ " gehiarriak bistarazi\n"
+#~ " -h, --help laguntza mezu hau bistarazi eta irten\n"
+#~ " -k, --skel SKEL_DIR beste skel direktorio bat ezarri\n"
+#~ " -K, --key KEY=BALIO lehenetsiriko /etc/login.defs gainidatzi\n"
+#~ " -l, --no-log-init ez gehitu erabiltzailea lastlog eta "
+#~ "faillog\n"
+#~ " datu-baseetara\n"
+#~ " -m, --create-home erabiltzaile kontu berriarentzar etxe\n"
+#~ " direktorioa sortu\n"
+#~ " -M, --no-create-home ez sortu erabiltzailearen etxe-"
+#~ "direktorioa\n"
+#~ " (/etc/login.defs gainidazten du)\n"
+#~ " -N, --no-user-group ez sortu erabiltzailearen izen berdineko\n"
+#~ " talde bat\n"
+#~ " -o, --non-unique onartu erabiltzailea sortzea "
+#~ "bikoizturiko\n"
+#~ " (ez-bakarra) UIDa erabiliaz\n"
+#~ " -p, --password PASAHITZA enkriptatutako pasahitza erabili "
+#~ "erabiltzaile\n"
+#~ " berri kontuarentzat\n"
+#~ " -r, --system sistema kontu bat sortu\n"
+#~ " -s, --shell SHELL Erabiltzaile kontu berriaren sarrera "
+#~ "shell-a\n"
+#~ " -u, --uid UID behartu UID erabiltzea erabiltzaile kontu "
+#~ "berriarentzat\n"
+#~ " -U, --user-group sortu erabiltzailearen izen berdineko "
+#~ "talde bat\n"
+#~ "%s\n"
diff --git a/po/fi.gmo b/po/fi.gmo
new file mode 100644
index 0000000..db1a730
--- /dev/null
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
new file mode 100644
index 0000000..778ecf3
--- /dev/null
+++ b/po/fi.po
@@ -0,0 +1,3732 @@
+# Finnish translation for shadow.
+# Copyright (C) 2004-2007 Free Software Foundation, Inc.
+# Tommi Vainikainen <Tommi.Vainikainen@iki.fi>, 2004-2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.18.1\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2007-11-24 22:54+0100\n"
+"Last-Translator: Tommi Vainikainen <thv+debian@iki.fi>\n"
+"Language-Team: Finnish <debian-l10n-finnish@lists.debian.org>\n"
+"Language: fi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Asetustiedoille ei voi varata tilaa.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "asetusvirhe - tuntematon kohta \"%s\" (kerro ylläpidolle)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr ""
+
+msgid "Password: "
+msgstr "Salasana: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Käyttäjän %s salasana: "
+
+#, fuzzy
+#| msgid "Cannot open the password file.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "Salasanatiedostoa ei voi avata.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr ""
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not set sename for %s\n"
+msgstr "Asetustiedoille ei voi varata tilaa.\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "Muutetaan käyttäjän %s vanhenemistietoja\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "%s: Käyttäjätunnusta ei voi selvittää.\n"
+
+#, fuzzy, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "%s: rivi %d: käyttäjää %s ei löydy\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: muisti loppui\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: tiedostoa %s ei voi päivittää\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: virheellinen kotihakemisto \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: hakemistoa %s ei voi uudelleennimetä hakemistoksi %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: hakemistoa %s ei voi luoda\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: varoitus: ei voi poistaa tiedostoa "
+
+#, fuzzy, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: varoitus: ei voi poistaa tiedostoa "
+
+# Kannattaako tuota kääntää, siinä viitataan rename()-funktioon...
+#, fuzzy, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: rename: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: hakemistoa %s ei voi uudelleennimetä hakemistoksi %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: hakemistoa %s ei voi uudelleennimetä hakemistoksi %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: varoitus: ei voi poistaa tiedostoa "
+
+#, fuzzy, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: hakemistoa %s ei voi luoda\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: varoitus: ei voi poistaa tiedostoa "
+
+#, fuzzy, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: tiedostoa %s ei voi päivittää\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: varjotiedostoa ei voi päivittää\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+
+# Kannattaako tuota kääntää, siinä viitataan rename()-funktioon...
+#, fuzzy, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: rename: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: tiedostoa %s ei voi lukita\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Varoitus: tuntematon ryhmä %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Varoitus: liian monta ryhmää\n"
+
+msgid "Your password has expired."
+msgstr "Salasanasi on vanhentunut."
+
+msgid "Your password is inactive."
+msgstr "Salasanasi ei ole käytössä."
+
+msgid "Your login has expired."
+msgstr "Käyttäjätunnuksesi on vanhentunut."
+
+msgid " Contact the system administrator."
+msgstr " Ota yhteys järjestelmän ylläpitoon."
+
+msgid " Choose a new password."
+msgstr " Valitse uusi salasana."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Salasanasi vanhenee %ld päivässä.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Salasanasi vanhenee huomenna."
+
+msgid "Your password will expire today."
+msgstr "Salasanasi vanhenee tänään."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Päätettä %s ei voi vaihtaa"
+
+#, fuzzy, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: kentät liian pitkiä\n"
+
+#, fuzzy, c-format
+msgid "%s: "
+msgstr "%s: %s\n"
+
+msgid ": "
+msgstr ""
+
+msgid "Environment overflow\n"
+msgstr "Ympäristön ylivuoto\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Et voi muuttaa muuttujaa $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"Edellisen kirjautumisen jälkeen %d epäonnistunut yritys.\n"
+"Viimeisin oli %s päätteellä %s.\n"
+msgstr[1] ""
+"Edellisen kirjautumisen jälkeen %d epäonnistunutta yritystä.\n"
+"Viimeisin oli %s päätteellä %s.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "postilaatikon omistajan vaihtaminen epäonnistui"
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr "%s: ei saa ainutkertaista UID:tä\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: ei saa ainutkertaista GID:iä\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: ei saa ainutkertaista GID:iä\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: tiedostoa %s ei voi luoda\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: tiedostoa %s ei voi luoda\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr "%s: ei saa ainutkertaista UID:tä\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: ei saa ainutkertaista UID:tä\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: ei saa ainutkertaista UID:tä\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: PAM-todennus epäonnistui\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: virheellinen kenttä \"%s\"\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Could not seteuid to %d\n"
+msgstr "Asetustiedoille ei voi varata tilaa.\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not set caps\n"
+msgstr "Asetustiedoille ei voi varata tilaa.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't open file\n"
+msgid "%s: snprintf failed!\n"
+msgstr "%s: tiedosta ei voi avata\n"
+
+#, fuzzy, c-format
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: rivi %d: chown epäonnistui\n"
+
+#, fuzzy, c-format
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: rivi %d: chown epäonnistui\n"
+
+msgid "Too many logins.\n"
+msgstr "Liian monta sisäänkirjautumista.\n"
+
+msgid "You have new mail."
+msgstr "Sinulle on uutta postia."
+
+msgid "No mail."
+msgstr "Ei postia."
+
+msgid "You have mail."
+msgstr "Sinulle on postia."
+
+msgid "no change"
+msgstr "ei muutoksia"
+
+msgid "a palindrome"
+msgstr "palidromi"
+
+msgid "case changes only"
+msgstr "vain kirjainkoon muutoksia"
+
+msgid "too similar"
+msgstr "liian samankaltainen"
+
+msgid "too simple"
+msgstr "liian yksinkertainen"
+
+msgid "rotated"
+msgstr "pyöräytetty"
+
+msgid "too short"
+msgstr "liian lyhyt"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Huono salasana: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() epäonnistui, virhe %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+msgid "passwd: password unchanged\n"
+msgstr "Salasana vaihdettu."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: salasanan päivitys onnistui\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: tietolähdettä %s ei tueta\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start: virhe %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd: pam_start() epäonnistui, virhe %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Väärä salasana käyttäjälle \"%s\".\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr ""
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: virheellinen kotipuhelin: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: hakemistoa %s ei voi luoda\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: hakemistoa %s ei voi luoda\n"
+
+#, fuzzy, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: hakemistoa %s ei voi luoda\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Ei voi vaihtaa hakemistoon \"%s\"\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Ei hakemistoa, sisäänkirjaudutaan siten, että HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Ei voi suorittaa %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Virheellinen juurihakemisto \"%s\"\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Ei voi vaihtaa juurihakemistoksi \"%s\"\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: käyttäjä %s on nyt sisäänkirjautuneena\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: käyttäjä %s on nyt sisäänkirjautuneena\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Tty-päätteesi nimeä ei voi selvittää."
+
+#, fuzzy
+msgid "No"
+msgstr "Ei\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Käyttö: %s [syöte]\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr ""
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Syötä uusi arvo tai paina ENTER jättääksesi oletuksen"
+
+msgid "Minimum Password Age"
+msgstr "Salasanan ikä vähintään"
+
+msgid "Maximum Password Age"
+msgstr "Salasanan ikä korkeintaan"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Viimeisin salasanan vaihto (VVVV-KK-PP)"
+
+msgid "Password Expiration Warning"
+msgstr "Salasanan vanhenemisvaroitus"
+
+msgid "Password Inactive"
+msgstr "Salasana pois käytöstä"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Tunnuksen vanhenemispäiväys (VVVV-KK-PP)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Edellinen salasanan vaihto\t\t\t\t\t: "
+
+msgid "never"
+msgstr "ei koskaan"
+
+msgid "password must be changed"
+msgstr "salasana täytyy vaihtaa"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Salasana vanhenee\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Salasana pois käytöstä\t\t\t\t\t:"
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Tunnus vanhenee\t\t\t\t\t:"
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Salasanan vaihtamisten välillä vähintään päiviä\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Salasanan vaihtamisten välillä korkeintaan päiviä\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Montako päivää varoitetaan ennen salasanan vanhenemista\t\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: virheellinen päiväys \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: virheellinen numeroargumentti \"%s\"\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: älä sisällytä \"l\" muiden lippujen kanssa\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Lupa evätty.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Käyttäjätunnusta ei voi selvittää.\n"
+
+#, fuzzy, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: tiedostoja ei voi lukita, yritä myöhemmin uudelleen\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: tiedostoa %s ei voi lukita\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: fork-kutsu epäonnistui: %s"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: varjosalasanatiedostoa ei ole\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: käyttäjää %s ei ole olemassa\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Muutetaan käyttäjän %s vanhenemistietoja\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: virhe muutettaessa kenttiä\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr "Käyttö: %s [syöte]\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr "Koko nimi"
+
+#, fuzzy, c-format
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Huonenumero"
+
+msgid "Work Phone"
+msgstr "Työpuhelin"
+
+msgid "Home Phone"
+msgstr "Kotipuhelin"
+
+msgid "Other"
+msgstr "Muu"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Ei voi vaihtaa tunnusta pääkäyttäjäksi.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: virheellinen nimi: \"%s\"\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: virheellinen huonenumero: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: virheellinen työpuhelin: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: virheellinen kotipuhelin: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: \"%s\" sisältää ei-sallittuja merkkejä\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: \"%s\" sisältää ei-sallittuja merkkejä\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: käyttäjää %s ei ole olemassa\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: ei voi vaihtaa käyttäjää \"%s\" NIS-asiakkaalla.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: \"%s\" on NIS-palvelin tälle asiakkaalle.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Muutetaan käyttäjän %s tietoja\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: kentät liian pitkiä\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Käyttö: %s [syöte]\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr ""
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: Valitsinta -a voi käyttää VAIN yhdessä valitsimen -G kanssa\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: rivi %d: rivi on liian pitkä\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: rivi %d: uusi salasana puuttuu\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: ryhmää %s ei ole olemassa\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: rivi %d: tietuetta ei voi päivittää\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: virhe havaittu, muutokset ohitetaan\n"
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: käyttäjää %s ei ole olemassa\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: käyttäjää %s ei ole olemassa\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr "Sisäänkirjautumiskuori"
+
+#, fuzzy, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Et voi muuttaa käyttäjän %s kuorta.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Muutetaan käyttäjän %s sisäänkirjautumiskuorta\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Virheellinen tietue: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s on virheellinen kuori.\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: käyttäjää %s ei ole olemassa\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: varoitus: tiedoston %s omistaja ei ole %s\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "lastlog: odottamaton argumentti: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: hakemistoa %s ei voi luoda\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "Tunnus Epäonn. Enint. Edellinen Päätteellä\n"
+
+#, fuzzy, c-format
+msgid " [%lus left]"
+msgstr " [%lds jäljellä]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds lukittu]"
+
+#, fuzzy, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s: hakemistoa %s ei voi luoda\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: hakemistoa %s ei voi luoda\n"
+
+#, fuzzy, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "Tuntematon käyttäjä: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: hakemistoa %s ei voi uudelleennimetä hakemistoksi %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Käyttö: %s [syöte]\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr ""
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr ""
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr ""
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+
+#, fuzzy
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "Käyttäjän %s salasanaa ei voi vaihtaa.\n"
+
+#, fuzzy
+msgid "The options cannot be combined.\n"
+msgstr "Käyttäjän %s salasanaa ei voi vaihtaa.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: varjoryhmäsalanat vaaditaan valitsimelle -A\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: ryhmää %s ei ole olemassa\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: fork-kutsu epäonnistui: %s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Vaihdetaan ryhmän %s salasana\n"
+
+msgid "New Password: "
+msgstr "Uusi salasana: "
+
+msgid "Re-enter new password: "
+msgstr "Toista uusi salasana: "
+
+msgid "They don't match; try again"
+msgstr "Ne eivät täsmää. Yritä uudelleen"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Yritä myöhemmin uudelleen\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Lisätään käyttäjä %s ryhmään %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Poistetaan käyttäjä %s ryhmästä %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: käyttäjää %s ei ole olemassa\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Ei ole pääte\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Käyttö: %s [syöte]\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr ""
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid " -r, --system create a system account\n"
+msgstr ""
+
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s ei ole kelpo ryhmänimi\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "virheellinen ryhmänimi \"%s\"\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K vaatii AVAIN=ARVO\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: ryhmä %s on olemassa\n"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "Jäsen on jo olemassa\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: Käyttäjätunnusta ei voi selvittää.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: hakemistoa %s ei voi uudelleennimetä hakemistoksi %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: ei voi vaihtaa käyttäjää \"%s\" NIS-asiakkaalla.\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: ryhmää %s ei ole olemassa\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: ryhmä \"%s\" on NIS-ryhmä.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: isäntä %s on NIS-palvelin\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: käyttäjä %s on NIS-käyttäjä\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: muisti loppui funktiossa update_group\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr "Käyttö: %s [syöte]\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+
+msgid "\n"
+msgstr ""
+
+msgid "Actions:\n"
+msgstr ""
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr ""
+
+msgid " -l, --list list the members of the group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr ""
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "virheellinen ryhmänimi \"%s\"\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: ryhmä %s on NIS-ryhmä\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: Tuntematon käyttäjä %s\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr "Käyttö: %s [syöte]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr "Käyttö: %s [syöte]\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: valitsimet -s ja -r eivät sovi yhteen\n"
+
+msgid "invalid group file entry"
+msgstr "virheellinen ryhmätiedostotietue"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "poista rivi \"%s\"? "
+
+msgid "duplicate group entry"
+msgstr "kaksinkertainen ryhmätietue"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "virheellinen ryhmänimi \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "virheellinen ryhmänimi \"%s\"\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "ryhmä %s: ei käyttäjää %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "poista jäsen \"%s\"? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "ei täsmäävää ryhmätiedostotietuetta tiedostossa %s\n"
+
+#, fuzzy, c-format
+msgid "add group '%s' in %s? "
+msgstr "lisää ryhmä \"%s\" tiedostoon %s?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "virheellinen tietue varjoryhmätiedostossa"
+
+msgid "duplicate shadow group entry"
+msgstr "kaksinkertainen varjoryhmätietue"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "varjoryhmä %s: käyttäjä %s ei kuulu ylläpitoon\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "poista ylläpidon jäsen \"%s\"? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "varjoryhmä %s: ei käyttäjää %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: tiedostot päivitettiin\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: ei muutoksia\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: tiedostoa %s ei voi päivittää\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Käyttö: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Käyttö: id\n"
+
+msgid " groups="
+msgstr " ryhmät="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+
+msgid "Username Port From Latest"
+msgstr "Käyttäjä Portti Mistä Viimeksi"
+
+msgid "Username Port Latest"
+msgstr "Käyttäjä Portti Viimeksi"
+
+msgid "**Never logged in**"
+msgstr "**Ei koskaan kirjautunut sisään**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s: hakemistoa %s ei voi luoda\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s: salasanatiedostoa ei voi päivittää\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 "Käyttö: %s [-p] [nimi]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h isäntä] [-f nimi]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r isäntä\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Virheellinen kirjautumisaika"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Järjestelmä on suljettu ylläpidon ajaksi"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Yhteydenkatkaisu ohitettu -- pääkäyttäjän kirjautuminen sallittu.]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr "Ei utmp-tietuetta. Suorita \"login\" alimman tason kuoresta"
+
+#, fuzzy, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Sisäänkirjautuminen keskeytetty %d sekunnin jälkeen.\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM-virhe, keskeytetään: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s-tunnus: "
+
+msgid "login: "
+msgstr "tunnus: "
+
+#, fuzzy, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Suurin sallittu määrä yrityksiä ylitetty (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: keskeytyspyyntö PAM:sta\n"
+
+msgid "Login incorrect"
+msgstr "Sisäänkirjautuminen epäonnistui"
+
+#, fuzzy, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "%s: rivi %d: käyttäjää %s ei löydy\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s-tunnus: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: fork-kutsu epäonnistui: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr ""
+"Varoitus: sisäänkirjautuminen uudelleen käytössä hetkellisen eston jälkeen."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Edellinen kirjautuminen: %s päätteellä %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Edellinen kirjautuminen: %.19s päätteellä %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " osoitteesta %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"sisäänkirjautumisaika ylitetty\n"
+"\n"
+
+#, fuzzy
+msgid "Usage: logoutd\n"
+msgstr "Käyttö: id\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: can't open group file\n"
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr "%s: ryhmätiedostoa ei voi avata\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: kentät liian pitkiä\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: virheellinen perushakemisto \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: hakemistoa %s ei voi luoda\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Käyttö: newgrp [-] [ryhmä]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Käyttö: sg ryhmä [[-c] komento]\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "Vanha salasana: "
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: fork-kutsu epäonnistui: %s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: käyttäjää %s ei ole olemassa\n"
+
+msgid "too many groups\n"
+msgstr "liian monta ryhmää\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid " -b, --badnames allow bad names\n"
+msgstr ""
+
+msgid " -r, --system create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: ryhmää %s ei ole olemassa\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: virheellinen käyttäjätunnus \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: virheellinen käyttäjätunnus \"%s\"\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: rivi %d: virheellinen rivi\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: käyttäjän %s tietuetta ei voi päivittää\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: rivi %d: GIDiä ei voi luoda\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: rivi %d: GIDiä ei voi luoda\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: käyttäjää %s ei ole olemassa\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: rivi %d: salasanaa ei voi päivittää\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: rivi %d: mkdir epäonnistui\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: rivi %d: chown epäonnistui\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: rivi %d: tietuetta ei voi päivittää\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: tiedostoa %s ei voi luoda\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: ryhmätiedostoa ei voi päivittää\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid " -q, --quiet quiet mode\n"
+msgstr ""
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid "Old password: "
+msgstr "Vanha salasana: "
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Syötä uusi salasana (vähintään %d ja korkeintaan %d merkkiä)\n"
+"Käytäthän salasanassa numeroita sekä pien- ja suuraakkosia.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Syötä uusi salasana (vähintään %d ja korkeintaan %d merkkiä)\n"
+"Käytäthän salasanassa numeroita sekä pien- ja suuraakkosia.\n"
+
+msgid "New password: "
+msgstr "Uusi salasana: "
+
+msgid "Try again."
+msgstr "Yritä uudelleen."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Varoitus: heikko salasana (syötä uudelleen käyttääksesi joka tapauksessa)."
+
+msgid "They don't match; try again.\n"
+msgstr "Ne eivät täsmää. Yritä uudelleen.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Käyttäjän %s salasanaa ei voi vaihtaa.\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Käyttäjän %s salasanaa ei voi vaihtaa.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: tietolähdettä %s ei tueta\n"
+
+#, c-format
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Et voi katsoa tai muokata käyttäjän %s salasanatietoja.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Vaihdetaan salasana käyttäjälle %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Käyttäjän %s salasanaa ei vaihdettu.\n"
+
+#, fuzzy, c-format
+msgid "%s: password changed.\n"
+msgstr "Salasana vaihdettu."
+
+#, fuzzy, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "Salasanan vanhenemisvaroitus"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr "Käyttö: %s [syöte]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr "Käyttö: %s [syöte]\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+
+msgid "invalid password file entry"
+msgstr "virheellinen sanasanatiedostotietue"
+
+msgid "duplicate password entry"
+msgstr "kaksinkertainen salasanatietue"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "virheellinen käyttäjätunnus \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "virheellinen käyttäjätunnus \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "käyttäjä %s: ei ryhmää %u\n"
+
+#, fuzzy, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "käyttäjä %s: hakemistoa %s ei ole olemassa\n"
+
+#, fuzzy, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "käyttäjä %s: kuorta %s ei ole olemassa\n"
+
+#, fuzzy, c-format
+msgid "no tcb directory for %s\n"
+msgstr "%s: hakemistoa %s ei voi luoda\n"
+
+#, fuzzy, c-format
+msgid "create tcb directory for %s?"
+msgstr "%s: hakemistoa %s ei voi luoda\n"
+
+#, fuzzy, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "%s: hakemistoa %s ei voi luoda\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: tiedostoa %s ei voi lukita\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "ei täsmäävää salasanatiedostotietuetta tiedostossa %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "lisää käyttäjä \"%s\" tiedostoon %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "virheellinen tietue varjosalasanatiedostossa"
+
+msgid "duplicate shadow password entry"
+msgstr "kaksinkertainen varjosalasanatietue"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "käyttäjä %s: viimeisin salasanan vaihto tapahtunut tulevaisuudessa\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: tiedostoa %s ei voi lukita\n"
+
+#, fuzzy, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: tiedostoa ei voi uudelleenkirjoittaa\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Tunnuksen vaihtaminen täksi käyttäjäksi EVÄTTY.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Salasanatodennus ohitettu.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Syötä OMA salasanasi todennukseksi.\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: tiedostoa %s ei voi lukita\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr ""
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr ""
+
+msgid "Session terminated, terminating shell..."
+msgstr ""
+
+#, c-format
+msgid " ...killed.\n"
+msgstr ""
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr ""
+
+msgid " ...terminated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: su [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
+#| " -h, --help display this help message and exit\n"
+#| " -, -l, --login make the shell a login shell\n"
+#| " -m, -p,\n"
+#| " --preserve-environment do not reset environment variables, and\n"
+#| " keep the same shell\n"
+#| " -s, --shell SHELL use SHELL instead of the default in "
+#| "passwd\n"
+#| "\n"
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"Käyttö: su [valitsimet] [TUNNUS]\n"
+"\n"
+"Valitsimet:\n"
+" -c, --command KOMENTO Välitä KOMENTO käynnistyvälle kuorelle\n"
+" -h, --help Näytä tämä ohje ja lopeta\n"
+" -, -l, --login Tee kuoresta sisäänkirjautumiskuori\n"
+" -m, -p,\n"
+" --preserve-environment Älä tyhjää ympäristömuuttujia ja säilytä\n"
+" sama kuori\n"
+" -s, --shell KUORI Käytä kuorta KUORI passwd:n oletuksen "
+"sijaan\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ohitettu)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Sinulla ei ole lupaa asettua käyttäjäksi %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Syötä oma salasanasi)"
+
+#, fuzzy, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: PAM-todennus epäonnistui\n"
+
+#, fuzzy, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "Sinulla ei ole lupaa asettua käyttäjäksi %s\n"
+
+#, fuzzy, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "Ei salasanatietuetta pääkäyttäjälle (\"root\")"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: täytyy suorittaa päätteessä\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: virhe %d\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: hakemistoa %s ei voi uudelleennimetä hakemistoksi %s\n"
+
+#, fuzzy, c-format
+msgid "Cannot execute %s\n"
+msgstr "Ei voi suorittaa %s"
+
+msgid "No password file"
+msgstr "Ei salasanatiedosto"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "Ei salasanatietuetta pääkäyttäjälle (\"root\")"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Paina ctrl-d jatkaaksesi normaalia käynnistystä,\n"
+"(tai syötä pääkäyttäjän salasana järjestelmän ylläpitämiseksi):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Siirrytään järjestelmän ylläpitotilaan"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: uutta defaults-tiedostoa ei voi luoda\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: uutta defaults-tiedostoa ei voi luoda\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: uutta defaults-tiedostoa ei voi avata\n"
+
+#, fuzzy, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: rivi %d: chown epäonnistui\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: hakemistoa %s ei voi luoda\n"
+
+# Kannattaako tuota kääntää, siinä viitataan rename()-funktioon...
+#, fuzzy, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: rename: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: ryhmä \"%s\" on NIS-ryhmä.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: liian monta ryhmää määritelty (korkeintaan %d).\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr "Käyttö: %s [syöte]\n"
+
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr ""
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr ""
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr ""
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr ""
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: virheellinen perushakemisto \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: virheellinen kommentti \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: virheellinen kotihakemisto \"%s\"\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: varjosalasanat vaaditaan valitsimelle -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: varjosalasanat vaaditaan valitsimelle -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: virheellinen kenttä \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: virheellinen kuori \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: varoitus: tiedoston %s omistaja ei ole %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rewrite password file\n"
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s: salasanatiedostoa ei voi uudelleenkirjoittaa\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s: hakemistoa %s ei voi luoda\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error updating files\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: virhe päivitettäessä tiedostoja\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: hakemistoa %s ei voi luoda\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: virheellinen kotihakemisto \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "postilaatikon omistajan vaihtaminen epäonnistui"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: hakemistoa %s ei voi luoda\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: rivi %d: chown epäonnistui\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: rivi %d: chown epäonnistui\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "Luodaan postilaatikkotiedosto"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Ryhmää \"mail\" ei löytynyt. Luodaan käyttäjälle postilaatikkotiedosto 0600-"
+"oikeuksin.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Asetetaan postilaatikkotiedoston oikeudet"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: käyttäjä %s on olemassa\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: ryhmä %s on olemassa - jos haluat lisätä tämän käyttäjän ryhmään, käytä "
+"valitsinta -g.\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: tiedostoa %s ei voi luoda\n"
+
+#, fuzzy, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %u ei ole ainutkertainen\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: hakemistoa %s ei voi luoda\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: tiedostoa %s ei voi luoda\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: tiedostoa %s ei voi luoda\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: tiedostoa %s ei voi luoda\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: varoitus: kotihakemisto on jo olemassa.\n"
+"Ei kopioida yhtään tiedostoa sinne skel-hakemistosta.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr "%s: ei voi vaihtaa käyttäjää \"%s\" NIS-asiakkaalla.\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: Ryhmää %s ei voi poistaa, koska se on toisen käyttäjän ensisijainen "
+"ryhmä.\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "%s: hakemistoa %s ei voi uudelleennimetä hakemistoksi %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: virheellinen kotihakemisto \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: varoitus: ei voi poistaa tiedostoa "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: tiedoston %s omistaja ei ole %s, ei poisteta\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: hakemistoa %s ei voi uudelleennimetä hakemistoksi %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: hakemistoa %s ei voi uudelleennimetä hakemistoksi %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: käyttäjä %s on NIS-käyttäjä\n"
+
+#, fuzzy, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: virheellinen kotihakemisto \"%s\"\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: ei poisteta hakemistoa %s (poistettaisiin käyttäjän %s kotihakemisto)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: virhe poistettaessa hakemistoa %s\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: virhe poistettaessa hakemistoa %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr ""
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr ""
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr ""
+
+msgid " -L, --lock lock the user account\n"
+msgstr ""
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr ""
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr ""
+
+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"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: käyttäjä %s on olemassa\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: virheellinen päiväys \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: virheellinen päiväys \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: no options\n"
+msgstr "%s: tiedostoa %s ei voi lukita\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: varjosalasanat vaaditaan valitsimille -e ja -f\n"
+
+#, fuzzy, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "Jäsen on jo olemassa\n"
+
+#, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: hakemisto %s on olemassa\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: hakemistoa %s ei voi luoda\n"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: varoitus: vanhan kotihakemiston %s täydellinen poistaminen epäonnistui"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: hakemistoa %s ei voi uudelleennimetä hakemistoksi %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: varoitus: tiedoston %s omistaja ei ole %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "postilaatikon omistajan vaihtaminen epäonnistui"
+
+msgid "failed to rename mailbox"
+msgstr "postilaatikon uudelleennimeäminen epäonnistui"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid " -g, --group edit group database\n"
+msgstr ""
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr ""
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: tiedostoa %s ei muutettu\n"
+
+#, fuzzy
+msgid "failed to create scratch directory"
+msgstr "postilaatikon uudelleennimeäminen epäonnistui"
+
+#, fuzzy
+msgid "failed to drop privileges"
+msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
+
+#, fuzzy
+msgid "Couldn't get file context"
+msgstr "Tiedostoa ei voi lukita"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+#, fuzzy
+msgid "failed to gain privileges"
+msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
+
+msgid "Couldn't lock file"
+msgstr "Tiedostoa ei voi lukita"
+
+msgid "Couldn't make backup"
+msgstr "Tiedostoa ei voi varmuuskopioida"
+
+#, fuzzy, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr "%s: Käyttäjää %s ei löydy tiedostosta /etc/passwd\n"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+#, fuzzy
+msgid "failed to open scratch file"
+msgstr "Ryhmätiedostoa ei voi avata\n"
+
+#, fuzzy
+msgid "failed to unlink scratch file"
+msgstr "%s: kentät liian pitkiä\n"
+
+#, fuzzy
+msgid "failed to stat edited file"
+msgstr "postilaatikon uudelleennimeäminen epäonnistui"
+
+#, fuzzy
+msgid "failed to allocate memory"
+msgstr "postilaatikon omistajan vaihtaminen epäonnistui"
+
+#, fuzzy
+msgid "failed to create backup file"
+msgstr "postilaatikon uudelleennimeäminen epäonnistui"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr ""
+"%s: tiedostoa %s ei voi palauttaa: %s (muutoksesi ovat tiedostossa %s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: virheellinen perushakemisto \"%s\"\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Käyttö: %s [syöte]\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "malloc(%d) epäonnistui\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: chage [options] [LOGIN]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -d, --lastday LAST_DAY set last password change to LAST_DAY\n"
+#~| " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -l, --list show account aging information\n"
+#~| " -m, --mindays MIN_DAYS set minimum number of days before "
+#~| "password\n"
+#~| " change to MIN_DAYS\n"
+#~| " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~| "password\n"
+#~| " change to MAX_DAYS\n"
+#~| " -W, --warndays WARN_DAYS set expiration warning days to "
+#~| "WARN_DAYS\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Käyttö: chage [valitsimet] [TUNNUS]\n"
+#~ "\n"
+#~ "Valitsimet:\n"
+#~ " -d, --lastday VIIM_PVM Aseta edelliseksi salasanan "
+#~ "vaihtopäiväksi\n"
+#~ " VIIM_PVM\n"
+#~ " -E, --expiredate VANH_PVM Aseta tilin vanhenemispäiväykseksi "
+#~ "VANH_PVM\n"
+#~ " -h, --help Näytä tämä ohje ja lopeta\n"
+#~ " -I, --inactive POISKÄYTÖSTÄ Ota salasana pois käytöstä POISKÄYTÖSTÄ\n"
+#~ " päivää vanhenemisen jälkeen\n"
+#~ " -l, --list Näytä tilin vanhenemistiedot\n"
+#~ " -m, --mindays MIN_PÄIVIÄ Aseta pienimmäksi sallittuksi määräksi\n"
+#~ " päiviä ennen salasanan vaihtamista "
+#~ "MIN_PÄIVIÄ\n"
+#~ " -M, --maxdays MAX_PÄIVIÄ Aseta suurimmaksi sallituksi määräksi "
+#~ "päiviä\n"
+#~ " ennen salasanan vaihtamista MAX_PÄIVIÄ\n"
+#~ " -W, --warndays VAR_PÄIVIÄ Aseta vanhenemisen varoitusajaksi "
+#~ "VAR_PÄIVIÄ\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: PAM-todennus epäonnistui\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "Käyttö: %s [-f koko_nimi] [-r huonenro] [-w työpuh]\n"
+#~ "\t[-h kotipuh] [-o muu] [käyttäjä]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr "Käyttö: %s [-f koko_nimi] [-r huonenro] [-w työpuh] [-h kotipuh]\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Käyttö: chpasswd [valitsimet]\n"
+#~ "\n"
+#~ "Valitsimet:\n"
+#~ " -e, --encrypted Annetut salasanat ovat salakirjoitettuja\n"
+#~ " -h, --help Näytä tämä ohje ja lopeta\n"
+#~ " -m, --md5 Käytä MD5:tä eikä DES:iä kun annetut\n"
+#~ " salasanat eivät ole salakirjoitettuja\n"
+
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Käyttö: chsh [valitsimet] [TUNNUS]\n"
+#~ "\n"
+#~ "Valitsimet:\n"
+#~ " -h, --help Näytä tämä ohje ja poistu\n"
+#~ " -s, --shell KUORI Aseta uusi sisäänkirjautumiskuori "
+#~ "käyttäjälle\n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "Käyttö: expiry {-f|-c}\n"
+
+#, fuzzy
+#~| msgid "%s: cannot open file %s\n"
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "%s: tiedostoa %s ei voi lukita\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "Käyttö: groupdel ryhmä\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "Käyttö: %s [-r] [-s] [ryhmä [ryhmävarjo]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "Käyttö: %s [-r] [-s] [ryhmä]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: valitsimet -s ja -r eivät sovi yhteen\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "Käyttö: groupdel ryhmä\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "Käyttö: groupdel ryhmä\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Käyttö: lastlog [valitsimet]\n"
+#~ "\n"
+#~ "Valitsimet:\n"
+#~ " -b, --before PÄIVÄÄ Tulosta vain PÄIVÄÄ vanhemmat lastlog-"
+#~ "tietueet\n"
+#~ " -t, --time PÄIVÄÄ Tulosta vain PÄIVÄÄ tuoreemmat lastlog-"
+#~ "tietueet\n"
+#~ " -u, --login TUNNUS Tulosta lastlog-tietue käyttäjälle TUNNUS\n"
+#~ " -h, --help Näytä tämä ohje ja lopeta\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: passwd [options] [LOGIN]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -a, --all report password status on all accounts\n"
+#~| " -d, --delete delete the password for the named "
+#~| "account\n"
+#~| " -e, --expire force expire the password for the named "
+#~| "account\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -k, --keep-tokens change password only if expired\n"
+#~| " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -l, --lock lock the named account\n"
+#~| " -n, --mindays MIN_DAYS set minimum number of days before "
+#~| "password\n"
+#~| " change to MIN_DAYS\n"
+#~| " -q, --quiet quiet mode\n"
+#~| " -r, --repository REPOSITORY change password in REPOSITORY "
+#~| "repository\n"
+#~| " -S, --status report password status on the named "
+#~| "account\n"
+#~| " -u, --unlock unlock the named account\n"
+#~| " -w, --warndays WARN_DAYS set expiration warning days to "
+#~| "WARN_DAYS\n"
+#~| " -x, --maxdays MAX_DAYS set maximim number of days before "
+#~| "password\n"
+#~| " change to MAX_DAYS\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Käyttö: passwd [valitsimet] [TUNNUS]\n"
+#~ "\n"
+#~ "Valitsimet:\n"
+#~ " -a, --all Ilmoita jokaisen tunnuksen "
+#~ "salasanatilanne\n"
+#~ " -d, --delete Poista annetun tunnuksen salasana\n"
+#~ " -e, --expire Aseta annetun tunnuksen salasana\n"
+#~ " vanhentuneeksi\n"
+#~ " -h, --help Näytä tämä ohje ja lopeta\n"
+#~ " -k, --keep-tokens Vaihda vain vanhentunut salasana\n"
+#~ " -i, --inactive POISKÄYTÖSTÄ Ota salasana pois käytöstä POISKÄYTÖSTÄ\n"
+#~ " päivää vanhenemisen jälkeen\n"
+#~ " -l, --lock Lukitse annettu tunnus\n"
+#~ " -n, --mindays VÄH_PÄIVÄ Aseta vähin määrä päiviä ennen kuin\n"
+#~ " salasanan voi vaihtaa VÄH_PÄIVÄksi\n"
+#~ " -q, --quiet Hiljainen toiminta\n"
+#~ " -r, --repository TIETOLÄHDE Vaihda salasana tietolähteessä "
+#~ "TIETOLÄHDE\n"
+#~ " -S, --status Ilmoita annetun tunnuksen salasanan tila\n"
+#~ " -u, --unlock Avaa annetun tunnuksen lukitus\n"
+#~ " -w, --warndays VAR_PÄIVÄÄ Aseta varoituspäiviksi VAR_PÄIVÄÄ ennen\n"
+#~ " vanhentumista\n"
+#~ " -x, --maxdays KORK_PÄIVÄ Aseta korkein määrä päivä ennen kuin\n"
+#~ " salasana täytyy vaihtaa KORK_PÄIVÄksi\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr "Käyttö: %s [-q] [-r] [-s] [passwd [varjo]]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr "Käyttö: %s [-q] [-r] [-s] [passwd [varjo]]\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "Käyttö: id\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "Käyttö: id\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "Tuntematon id: %s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "Ei kuorta\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force removal of files,\n"
+#~ " even if not owned by user\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -r, --remove remove home directory and mail spool\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Käyttö: userdel [valitsimet] TUNNUS\n"
+#~ "\n"
+#~ "Valitsimet:\n"
+#~ " -f, --force Pakota tiedostojen poisto vaikkei niitä\n"
+#~ " omistaisikaan käyttäjä\n"
+#~ " -h, --help Näytä tämä ohje ja poistu\n"
+#~ " -r, --remove Poista kotihakemistoja ja postilaatikko\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Käyttö: usermod [valitsimet] TUNNUS\n"
+#~ "\n"
+#~ "Valitsimet:\n"
+#~ " -a, --append RYHMÄ Lisää käyttäjä ryhmään RYHMÄ\n"
+#~ " (käytetään vain valitsimen -G kanssa)\n"
+#~ " -c, --comment KOMMENTTI Aseta GECOS-kenttään uusi arvo\n"
+#~ " -d, --home KOTIHAK Käyttäjätunnuksen uusi kotihakemisto\n"
+#~ " -e, --expiredate VANH_PVM Aseta tilin vanhenemispäiväykseksi "
+#~ "VANH_PVM\n"
+#~ " -f, --inactive POISKÄYTÖSTÄ Ota salasana pois käytöstä POISKÄYTÖSTÄ\n"
+#~ " päivää vanhenemisen jälkeen\n"
+#~ " -g, --gid RYHMÄ Aseta RYHMÄ uudeksi "
+#~ "sisäänkirjautumisryhmäksi\n"
+#~ " -G, --groups RYHMÄT Luettelo lisäryhmistä\n"
+#~ " -h, --help Näytä tämä ohje ja lopeta\n"
+#~ " -l, --login TUNNUS Uusi arvo tunnukseksi\n"
+#~ " -L, --lock Lukitse annettu tunnus\n"
+#~ " -m, --move-home Siirrä kotihakemiston sisältö uuteen\n"
+#~ " sijaintiin (käytä vain yhdessä "
+#~ "valitsimen\n"
+#~ " -d kanssa)\n"
+#~ " -o, --non-unique Salli UID:n uudelleenkäyttö (ei-uniikki "
+#~ "UID)\n"
+#~ " -p, --password SALASANA Käytä salakirjoitettua salasanaa\n"
+#~ " -s, --shell KUORI Käyttäjätunnuksen uusi "
+#~ "sisäänkirjautumiskuori\n"
+#~ " -u, --uid UID Uusi UID käyttäjätunnukselle\n"
+#~ " -U, --unlock Avaa annetun tunnuksen lukitus\n"
+#~ "\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s: lippuja ei annettu\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: vipw [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -g, --group edit group database\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -p, --passwd edit passwd database\n"
+#~| " -q, --quiet quiet mode\n"
+#~| " -s, --shadow edit shadow or gshadow database\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group edit group database\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -p, --passwd edit passwd database\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow edit shadow or gshadow database\n"
+#~ " -u, --user which user's tcb shadow file to edit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Käyttö: vipw [valitsimet]\n"
+#~ "\n"
+#~ "Valitsimet:\n"
+#~ " -g, --group Muokkaa ryhmätietokantaa\n"
+#~ " -h, --help Näytä tämä ohje ja lopeta\n"
+#~ " -p, --passwd Muokkaa passwd-tietokantaa\n"
+#~ " -q, --quiet Hiljainen toiminta\n"
+#~ " -s, --shadow Muokkaa shadow- tai gshadow-tietokantaa\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Käyttö: %s [syöte]\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s: tiedostoa %s ei voi luoda\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s: tiedoston %s omistajaa ei voi asettaa\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -a, --all display faillog records for all users\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -l, --lock-time SEC after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| " -m, --maximum MAX set maximum failed login counters to "
+#~| "MAX\n"
+#~| " -r, --reset reset the counters of login failures\n"
+#~| " -t, --time DAYS display faillog records more recent than "
+#~| "DAYS\n"
+#~| " -u, --user LOGIN display faillog record or maintains "
+#~| "failure\n"
+#~| " counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| " options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all display faillog records for all users\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -l, --lock-time SEC after failed login lock account to SEC "
+#~ "seconds\n"
+#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
+#~ " -r, --reset reset the counters of login failures\n"
+#~ " -t, --time DAYS display faillog records more recent than "
+#~ "DAYS\n"
+#~ " -u, --user LOGIN display faillog record or maintains "
+#~ "failure\n"
+#~ " counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ " options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Käyttö: faillog [valitsimet]\n"
+#~ "\n"
+#~ "Valitsimet:\n"
+#~ " -a, --all Näytä faillog-tietueet kaikille "
+#~ "käyttäjille\n"
+#~ " -h, --help Näytä tämä ohje ja lopeta\n"
+#~ " -l, --lock-time SEK Lukitse epäonnistuneen kirjautumisen "
+#~ "jälkeen\n"
+#~ " tunnus SEK sekunniksi\n"
+#~ " -m, --maximum MAX Aseta sallittujen kirjautumisyritysten\n"
+#~ " laskureiksi MAX\n"
+#~ " -r, --reset Nollaa kirjautumisyrityslaskurit\n"
+#~ " -t, --time PÄIVIÄ Näytä PÄIVIÄ uudemmat faillog-tietueet\n"
+#~ " -u, --user TUNNUS Näytä faillog-tietue tai muuta\n"
+#~ " kirjautumisyrityslaskureita (kun\n"
+#~ " käytetään -r, -m tai -l-valitsimilla)\n"
+#~ " vain käyttäjälle TUNNUS\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force exit with success status if the\n"
+#~ " specified group already exists\n"
+#~ " -g, --gid GID use GID for the new group\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique allow create group with duplicate\n"
+#~ " (non-unique) GID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new group\n"
+#~ " -r, --system create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Käyttö: groupadd [valitsimet] RYHMÄ\n"
+#~ "\n"
+#~ "Valitsimet:\n"
+#~ " -f, --force poistu onnistuneella arvolla vaikka "
+#~ "annettu\n"
+#~ " ryhmä olisikin jo olemassa\n"
+#~ " -g, --gid RYHMÄID käytä RYHMÄID:tä uudelle ryhmälle\n"
+#~ " -h, --help näytä tämä ohjeviesti ja poistu\n"
+#~ " -K, --key AVAIN=ARVO ohita /etc/login.defs:n oletusarvot\n"
+#~ " -o, --non-unique salli ryhmän luominen (ei-uniikilla)\n"
+#~ " kopio-RYHMÄID:llä\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --gid GID force use new GID by GROUP\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Käyttö: groupmod [valitsimet] RYHMÄ\n"
+#~ "\n"
+#~ "Valitsimet:\n"
+#~ " -g, --gid RYHMÄID käytä RYHMÄID:tä tälle ryhmälle\n"
+#~ " -h, --help näytä tämä ohjeviesti ja poistu\n"
+#~ " -n, --new-name UUSI_RYHMÄ aseta UUSI_RYHMÄ nimeksi RYHMÄlle\n"
+#~ " -o, --non-unique salli saman RYHMÄID:n käyttäminen "
+#~ "RYHMÄlle\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~ " home directory\n"
+#~ " -c, --comment COMMENT set the GECOS field for the new user "
+#~ "account\n"
+#~ " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~ " -D, --defaults print or save modified default useradd\n"
+#~ " configuration\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP for the new user account\n"
+#~ " -G, --groups GROUPS list of supplementary groups for the new\n"
+#~ " user account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -l, --no-log-init do not add the user to the lastlog and\n"
+#~ " faillog databases\n"
+#~ " -m, --create-home create home directory for the new user\n"
+#~ " account\n"
+#~ " -M, --no-create-home do not create user's home directory\n"
+#~ " (overrides /etc/login.defs)\n"
+#~ " -N, --no-user-group do not create a group with the same name "
+#~ "as\n"
+#~ " the user\n"
+#~ " -o, --non-unique allow create user with duplicate\n"
+#~ " (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new user\n"
+#~ " account\n"
+#~ " -r, --system create a system account\n"
+#~ " -s, --shell SHELL the login shell for the new user account\n"
+#~ " -u, --uid UID force use the UID for the new user "
+#~ "account\n"
+#~ " -U, --user-group create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Käyttö: useradd [valitsimet] TUNNUS\n"
+#~ "\n"
+#~ "Valitsimet:\n"
+#~ " -b, --base-dir YLÄHAK Ylähakemisto uuden käyttäjätunnuksen\n"
+#~ " kotihakemistolle\n"
+#~ " -c, --comment KOMMENTTI Aseta GECOS-kenttä uudelle "
+#~ "käyttäjätunnukselle\n"
+#~ " -d, --home-dir KOTIHAK Uuden käyttäjätunnuksen kotihakemisto\n"
+#~ " -D, --defaults Tulosta tai tallenna useradd-työkalun\n"
+#~ " oletusasetukset\n"
+#~ " -e, --expiredate VANH_PVM Aseta tilin vanhenemispäiväykseksi "
+#~ "VANH_PVM\n"
+#~ " -f, --inactive POISKÄYTÖSTÄ Ota salasana pois käytöstä POISKÄYTÖSTÄ\n"
+#~ " päivää vanhenemisen jälkeen\n"
+#~ " -g, --gid RYHMÄ Valitse itse RYHMÄ uudelle "
+#~ "käyttäjätunnukselle\n"
+#~ " -G, --groups RYHMÄT Luettelo lisäryhmistä uudelle\n"
+#~ " käyttäjätunnukselle\n"
+#~ " -h, --help Näytä tämä ohje ja lopeta\n"
+#~ " -k, --skel MALLIHAK Määritä vaihtoehtoinen mallihakemisto\n"
+#~ " -K, --key AVAIN=ARVO Kumoa /etc/login.defs-oletusarvot\n"
+#~ " -m, --create-home Luo kotihakemisto uudelle "
+#~ "käyttäjätunnukselle\n"
+#~ " -o, --non-unique Salli UID:n uudelleenkäyttö (ei-uniikki "
+#~ "UID)\n"
+#~ " luotaessa käyttäjätunnus\n"
+#~ " -p, --password SALASANA Käytä salakirjoitettua salasanaa uudelle\n"
+#~ " käyttäjätunnukselle\n"
+#~ " -s, --shell KUORI Uuden käyttäjätunnuksen "
+#~ "sisäänkirjautumiskuori\n"
+#~ " -u, --uid UID Valitse itse UID uudelle "
+#~ "käyttäjätunnukselle\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Salasana asetettu vanhenemaan."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: salasanatiedostoa ei voi lukita\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: salasanatiedostoa ei voi avata\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: varjosalasanatiedostoa ei voi lukita\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: varjosalasanatiedostoa ei voi avata\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: varjosalasanatiedostoa ei voi uudelleenkirjoittaa\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: salasanatiedostoa ei voi uudelleenkirjoittaa\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: varjosalasanatiedostoa ei voi päivittää\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tKoko nimi: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tHuonenumero: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tTyöpuhelin: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tKotipuhelin: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "Salasanatiedostoa ei voi lukita. Yritä myöhemmin uudelleen.\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Virhe päivitettäessä salasanatietuetta.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Salasanatiedoston muutoksia ei voi tallentaa.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Salasanatiedoston lukitusta ei voi avata.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: ryhmätiedostoa ei voi lukita\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: gshadow-tiedostoa ei voi lukita\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: varjotiedostoa ei voi avata\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: virhe päivitettäessä varjotiedostoa\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: virhe päivitettäessä ryhmätietuetta\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: rivi %d: tuntematon ryhmä %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: rivi %d: tietuetta ei voi päivittää\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: varjotiedostoa ei voi lukita\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: virhe päivitettäessä varjotiedostoa\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: virhe päivitettäessä salasanatiedostoa\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: rivi %d: tuntematon käyttäjä %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: rivi %d: salasanatietuetta ei voi päivittää\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: tuntematon käyttäjä\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Tuntematon käyttäjä: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Käyttö: %s [-r|-R] ryhmä\n"
+
+#~ msgid " %s [-a user] group\n"
+#~ msgstr " %s [-a käyttäjä] ryhmä\n"
+
+#~ msgid " %s [-d user] group\n"
+#~ msgstr " %s [-d käyttäjä] ryhmä\n"
+
+#~ msgid " %s [-A user,...] [-M user,...] group\n"
+#~ msgstr " %s [-A käyttäjä,...] [-M käyttäjä,...] ryhmä\n"
+
+#~ msgid " %s [-M user,...] group\n"
+#~ msgstr " %s [-M käyttäjä,...] ryhmä\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: ei voi lukita\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: varjoa ei voi lukita\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: varjotiedostoa ei voi uudelleenkirjoittaa\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: tiedoston lukkoa ei voi avata\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: tietuetta ei voi päivittää\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: varjotietuetta ei voi päivittää\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "tuntematon ryhmä: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: tiedosta ei voi avata\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: varjotiedostoa ei voi avata\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Kuka olet?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: tuntematon jäsen %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: virhe lisättäessä uutta ryhmätietuetta\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: ryhmätiedostoa ei voi uudelleenkirjoittaa\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: varjoryhmätiedostoa ei voi uudelleenkirjoittaa\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: ryhmätiedostoa ei voi lukita\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: ryhmätiedostoa ei voi avata\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: varjoryhmätiedostoa ei voi lukita\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: varjoryhmätiedostoa ei voi avata\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u ei ole ainutkertainen\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: virhe poistettaessa ryhmätietuetta\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: virhe poistettaessa varjoryhmätietuetta\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: käyttäjän ensisijaista ryhmää ei voi poistaa\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Poistettavaa jäsentä ei löytynyt\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr "Käyttö: groupmems -a tunnus | -d tunnus | -D | -l [-g ryhmännimi]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Vain pääkäyttäjä voi lisätä jäseniä eri ryhmiin\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "Ryhmäoikeus vaaditaan\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "Et ole nykyisen ryhmän ensisijainen omistaja\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "PAM-todennus epäonnistui\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "Ryhmätiedostoa ei voi lukita\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "Ryhmätiedostoa ei voi avata\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: Ryhmää %s ei löydy tiedostosta /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u ei ole ainutkertainen GID\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s ei ole ainutkertainen nimi\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: salasanatiedostoa ei voi uudelleenkirjoittaa\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: salasanatiedostoa ei voi lukita\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: salasanatiedostoa ei voi avata\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: varjotietuetta ryhmälle %s ei voi päivittää\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: ryhmän %s tietuetta ei voi päivittää\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: varjoryhmätiedostoa ei voi lukita\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: varjoryhmätiedostoa ei voi avata\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: varjoryhmää %s ei voi poistaa\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: varjoryhmätiedostoa ei voi päivittää\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: varjoryhmätiedostoa ei voi poistaa\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "tuntematon UID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "tuntematon GID: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: ryhmää %s ei ole olemassa\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: käyttäjää %s ei ole olemassa\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: virheellinen käyttäjätunnus \"%s\"\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: tiedostoa /etc/passwd ei voi lukita.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: tiedostoa /etc/passwd ei voi lukita.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: tiedostoa /etc/passwd ei voi lukita.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: tiedostoa /etc/passwd ei voi lukita.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: tiedostoja ei voi avata\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: salasanatietuetta %s ei voi päivittää\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: passwd-tiedostoa ei voi lukita\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: passwd-tiedostoa ei voi avata\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: varjotietuetta %s ei voi poistaa\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: salasanatiedostoa ei voi päivittää\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: käyttäjän %s tietuetta ei voi päivittää\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: varjosalasanatiedostoa ei voi poistaa\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: tuntematon GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: tuntematon ryhmä %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: muisti loppui funktiossa update_gshadow\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: varjosalasanatiedostoa ei voi uudelleenkirjoittaa\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: varjosalasanatiedostoa ei voi lukita\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: varjosalasanatiedostoa ei voi avata\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: virhe lukittaessa ryhmätiedostoa\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: virhe avattaessa ryhmätiedostoa\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: virhe lukittaessa varjoryhmätiedostoa\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: virhe avattaessa varjoryhmätiedostoa\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: virhe lisättäessä uutta salasanatietuetta\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: virhe lisättäessä uutta varjosalasanatietuetta\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s: varoitus: CREATE_HOME ei tuettu, käytä -m sen sijaan.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: virhe päivitettäessä ryhmätietuetta\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: virhe päivitettäessä ryhmätietuetta\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: ryhmätiedostoa ei voi avata\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: varjoryhmätiedostoa ei voi avata\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: virhe poistettaessa salasanatietuetta\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: virhe poistettaessa varjosalasanatietuetta\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: virhe lisättäessä uutta ryhmätietuetta\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu ei ole ainutkertainen\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: virhe muutettaessa salasanatietuetta\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: virhe poistettaessa salasanatietuetta\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: virhe poistettaessa varjosalasanatietuetta\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: ei saa ainutkertaista GID:iä\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " päätteeltä \"%.100s\" osoitteesta \"%.200s\""
+
+#~ msgid " on '%.100s'"
+#~ msgstr " päätteeltä \"%.100s\""
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: rivi %d: UID:tä ei voi luoda\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: nimi %s ei ole ainutkertainen\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ " -h, --help\t\tdisplay this help message and exit\n"
+#~ " -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Käyttö: chgpasswd [valitsimet]\n"
+#~ "\n"
+#~ "Valitsimet:\n"
+#~ " -e, --encrypted\tAnnetut salasanat ovat salakirjoitettuja\n"
+#~ " -h, --help\t\tNäytä tämä ohje ja lopeta\n"
+#~ " -m, --md5\t\tKäytä MD5:tä eikä DES:iä kun annetut salasanat\n"
+#~ "\t\t\teivät ole salakirjoitettuja\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Ei salasanatiedosto\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Pahoittelen.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Pahoittelen, käyttäjän %s salasanaa ei voi vaihtaa vielä.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Pahoittelen."
diff --git a/po/fr.gmo b/po/fr.gmo
new file mode 100644
index 0000000..78663f6
--- /dev/null
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
new file mode 100644
index 0000000..9455f67
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,11951 @@
+# translation of shadow-man.po to French
+# French translation of the shadow's man pages
+# Traduction des pages de manuel livrées avec shadow
+# Copyright (C) 2011-2013 Debian French l10n team <debian-l10n-french@lists.debian.org>
+#
+# Certaines pages étaient déjà traduites:
+# chpasswd: Amand Tihon <amand@alrj.org>
+# faillog(5): Pascal Terjan <CMoi@tuxfamily.org>
+#
+# Nicolas FRANÇOIS <nicolas.francois@centraliens.net>, 2004-2009.
+# Jean-Luc Coulon <jean-luc.coulon@wanadoo.fr>, 2008.
+# ABBAS.B <abelkcem@hotmail.com>, 2009.
+# chage: Olivier Marin, 2001.
+# chsh, groups, passwd(1), passwd(5): Christophe Blaess, 1997.
+# gpasswd: Maxime Mastin, 2001.
+# shadow(5): Thierry Vignaud <tvignaud@mandrakesoft.com>, 1999.
+# useradd: Frédéric Delanoy, 2000.
+# Christian Perrier <bubulle@debian.org>, 2009, 2012.
+# Thomas Blein <tblein@tblein.eu>, 2011, 2012, 2013, 2015.
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow-man-pages 4.0.18\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2015-08-04 21:59+0200\n"
+"Last-Translator: Thomas Blein <tblein@tblein.eu>\n"
+"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.5\n"
+"X-Poedit-Language: French\n"
+"X-Poedit-Country: FRANCE\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr ""
+
+#, fuzzy
+msgid "Password: "
+msgstr "Modifications du mot de passe"
+
+#, c-format
+msgid "%s's Password: "
+msgstr ""
+
+msgid "Cannot open audit interface.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr ""
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set sename for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "Impossible de mettre à jour la correspondance d'utilisateur SELinux"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "Impossible de mettre à jour la correspondance d'utilisateur SELinux"
+
+#, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr "Impossible de mettre à jour la correspondance d'utilisateur SELinux"
+
+#, fuzzy, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr "Impossible de mettre à jour la correspondance d'utilisateur SELinux"
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "impossible de créer le répertoire personnel"
+
+#, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "impossible de supprimer le répertoire personnel"
+
+#, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr ""
+
+#, fuzzy
+msgid "Warning: too many groups\n"
+msgstr "se connecter avec un nouveau groupe"
+
+msgid "Your password has expired."
+msgstr ""
+
+#, fuzzy
+msgid "Your password is inactive."
+msgstr "période d'inactivité du mot de passe"
+
+msgid "Your login has expired."
+msgstr ""
+
+#, fuzzy
+msgid " Contact the system administrator."
+msgstr "Configurer la liste des administrateurs."
+
+msgid " Choose a new password."
+msgstr ""
+
+#, fuzzy
+msgid "You must change your password."
+msgstr "Modifier le mot de passe d'un utilisateur"
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr ""
+
+msgid "Your password will expire tomorrow."
+msgstr ""
+
+msgid "Your password will expire today."
+msgstr ""
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: "
+msgstr ""
+
+msgid ": "
+msgstr ""
+
+msgid "Environment overflow\n"
+msgstr ""
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "impossible de mettre à jour le fichier des groupes"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "impossible de mettre à jour le fichier des groupes"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Memory allocation failure\n"
+msgstr "Échec système ou d'authentification"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid map file %s specified\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Could not seteuid to %d\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Could not set caps\n"
+msgstr ""
+
+#, c-format
+msgid "%s: snprintf failed!\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: open of %s failed: %s\n"
+msgstr "nom de groupe déjà utilisé"
+
+#, c-format
+msgid "%s: write to %s failed: %s\n"
+msgstr ""
+
+msgid "Too many logins.\n"
+msgstr ""
+
+msgid "You have new mail."
+msgstr ""
+
+msgid "No mail."
+msgstr ""
+
+msgid "You have mail."
+msgstr ""
+
+msgid "no change"
+msgstr ""
+
+msgid "a palindrome"
+msgstr ""
+
+msgid "case changes only"
+msgstr ""
+
+msgid "too similar"
+msgstr ""
+
+msgid "too simple"
+msgstr ""
+
+msgid "rotated"
+msgstr ""
+
+msgid "too short"
+msgstr ""
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr ""
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "passwd: %s\n"
+msgstr "passwd"
+
+#, fuzzy
+msgid "passwd: password unchanged\n"
+msgstr "date du dernier changement de mot de passe"
+
+msgid "passwd: password updated successfully\n"
+msgstr ""
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: conversation type %d not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr ""
+"sp_min - nombre de jours pendant lesquels le mot de passe ne peut pas être "
+"changé"
+
+#, c-format
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "impossible de trier les fichiers de mots de passe"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr ""
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr ""
+
+msgid "No directory, logging in with HOME=/"
+msgstr ""
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "validité du répertoire personnel ;"
+
+#, fuzzy, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "impossible de créer le répertoire personnel"
+
+#, fuzzy, c-format
+#| msgid "user currently logged in"
+msgid "%s: user %s is currently logged in\n"
+msgstr "l'utilisateur est actuellement connecté"
+
+#, c-format
+msgid "%s: user %s is currently used by process %d\n"
+msgstr ""
+
+msgid "Unable to determine your tty name."
+msgstr ""
+
+msgid "No"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+
+#, fuzzy
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr "Afficher les informations sur l'âge des comptes."
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+#, fuzzy
+msgid " -l, --list show account aging information\n"
+msgstr "Afficher les informations sur l'âge des comptes."
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr ""
+
+#, fuzzy
+msgid "Minimum Password Age"
+msgstr "âge minimum du mot de passe"
+
+#, fuzzy
+msgid "Maximum Password Age"
+msgstr "âge maximum du mot de passe"
+
+#, fuzzy
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Modifications du mot de passe"
+
+msgid "Password Expiration Warning"
+msgstr ""
+
+#, fuzzy
+msgid "Password Inactive"
+msgstr "période d'inactivité du mot de passe"
+
+#, fuzzy
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "date de fin de validité du compte"
+
+#, fuzzy
+msgid "Last password change\t\t\t\t\t: "
+msgstr "date du dernier changement de mot de passe"
+
+msgid "never"
+msgstr ""
+
+#, fuzzy
+msgid "password must be changed"
+msgstr "nombre de jours après lesquels le mot de passe doit être changé"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr ""
+
+#, fuzzy
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "période d'inactivité du mot de passe"
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr ""
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "date du dernier changement de mot de passe"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Permission denied.\n"
+msgstr "permission refusée"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: PAM: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "impossible de trouver le fichier des mots de passe cachés"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "l'utilisateur indiqué n'existe pas"
+
+#, fuzzy, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Afficher les informations sur l'âge des comptes."
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+
+#, fuzzy
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr "Modifier le numéro de téléphone personnel de l'utilisateur."
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+
+#, fuzzy
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr "Modifier le numéro de téléphone professionnel de l'utilisateur."
+
+msgid "Full Name"
+msgstr ""
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr ""
+
+msgid "Room Number"
+msgstr ""
+
+msgid "Work Phone"
+msgstr ""
+
+msgid "Home Phone"
+msgstr ""
+
+#, fuzzy
+msgid "Other"
+msgstr "autre"
+
+msgid "Cannot change ID to root.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "l'utilisateur indiqué n'existe pas"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Modifier le nom complet et les informations associées à un utilisateur"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr ""
+
+#, fuzzy
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+"Permettre d'utiliser le chiffrement MD5, plutôt que DES, lorsque les mots de "
+"passe fournis ne sont pas chiffrés."
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr "N'ajoute pas l'utilisateur aux bases de données lastlog et faillog."
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "le groupe spécifié n'existe pas"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr ""
+"sp_min - nombre de jours pendant lesquels le mot de passe ne peut pas être "
+"changé"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "l'utilisateur indiqué n'existe pas"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+
+#, fuzzy
+msgid "Login Shell"
+msgstr "Changer l'interpréteur de commandes initial"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Changer l'interpréteur de commandes initial"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr ""
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr ""
+
+#, fuzzy
+msgid " -a, --all display faillog records for all users\n"
+msgstr "Afficher les échecs de tous les utilisateurs."
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+
+#, fuzzy
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr "Remettre à zéro le compteur d'échecs de connexion."
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr ""
+
+#, c-format
+msgid " [%lus left]"
+msgstr ""
+
+#, c-format
+msgid " [%lds lock]"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr ""
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr ""
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr ""
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+
+#, fuzzy
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+"À part les options <option>-A</option> et <option>-M</option>, les options "
+"ne peuvent pas être combinées."
+
+#, fuzzy
+msgid "The options cannot be combined.\n"
+msgstr "Les options ne peuvent pas être combinées."
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "le groupe spécifié n'existe pas"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr ""
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr ""
+
+#, fuzzy
+msgid "New Password: "
+msgstr "fichier des mots de passe"
+
+#, fuzzy
+msgid "Re-enter new password: "
+msgstr "mot de passe chiffré"
+
+msgid "They don't match; try again"
+msgstr ""
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr ""
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr ""
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr ""
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid " -r, --system create a system account\n"
+msgstr ""
+
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "unicité et validité des noms de groupe ;"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "nom de groupe déjà utilisé"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr ""
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "impossible de supprimer le groupe primaire d'un utilisateur existant"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "le groupe spécifié n'existe pas"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+
+msgid "\n"
+msgstr ""
+
+#, fuzzy
+msgid "Actions:\n"
+msgstr "options"
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr ""
+
+msgid " -l, --list list the members of the group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr ""
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "unicité et validité des noms de groupe ;"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr ""
+
+#, fuzzy
+msgid "invalid group file entry"
+msgstr "informations cachées sur les groupes"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr ""
+
+msgid "duplicate group entry"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "invalid group name '%s'\n"
+msgstr "unicité et validité des noms de groupe ;"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr ""
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr ""
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr ""
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr ""
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr ""
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+#, fuzzy
+msgid "invalid shadow group file entry"
+msgstr "informations cachées sur les groupes"
+
+msgid "duplicate shadow group entry"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "Configurer la liste des administrateurs."
+
+#, fuzzy, c-format
+msgid "delete administrative member '%s'? "
+msgstr "Configurer la liste des administrateurs."
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr ""
+
+msgid "Usage: id [-a]\n"
+msgstr ""
+
+msgid "Usage: id\n"
+msgstr ""
+
+#, fuzzy
+msgid " groups="
+msgstr "groups"
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+
+msgid "Username Port From Latest"
+msgstr ""
+
+msgid "Username Port Latest"
+msgstr ""
+
+msgid "**Never logged in**"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr ""
+
+#, 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 ""
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr ""
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+#, fuzzy
+msgid "Invalid login time"
+msgstr "validité de l'interpréteur de commandes initial (« login shell »)."
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "journal des échecs de connexion"
+
+#, fuzzy, c-format
+msgid "%s login: "
+msgstr "sulogin"
+
+#, fuzzy
+msgid "login: "
+msgstr "login"
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr ""
+
+msgid "login: abort requested by PAM\n"
+msgstr ""
+
+msgid "Login incorrect"
+msgstr ""
+
+#, c-format
+msgid "Cannot find user (%s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr "sulogin"
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr ""
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr ""
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr ""
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr ""
+
+#, c-format
+msgid " from %.*s"
+msgstr ""
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+
+#, fuzzy
+msgid "Usage: logoutd\n"
+msgstr "logoutd"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, c-format
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to read setgroups: %s\n"
+msgstr ""
+"Ce champ est utilisé pour définir le répertoire personnel de l'utilisateur."
+
+#, fuzzy, c-format
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr ""
+"Ce champ est utilisé pour définir le répertoire personnel de l'utilisateur."
+
+#, c-format
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr ""
+"Ce champ est utilisé pour définir le répertoire personnel de l'utilisateur."
+
+#, fuzzy, c-format
+msgid "%s: Could not stat directory for target %u\n"
+msgstr ""
+"Ce champ est utilisé pour définir le répertoire personnel de l'utilisateur."
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr ""
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr ""
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "mot de passe chiffré"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr ""
+
+#, fuzzy
+msgid "too many groups\n"
+msgstr "Supprimer un groupe"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+#, fuzzy
+msgid " -b, --badnames allow bad names\n"
+msgstr "Éditer les bases de données shadow ou gshadow."
+
+msgid " -r, --system create system accounts\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "unicité et validité des noms d'utilisateur ;"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "l'utilisateur indiqué n'existe pas"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "impossible de mettre à jour le fichier des mots de passe"
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "impossible de mettre à jour le fichier des groupes"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid " -q, --quiet quiet mode\n"
+msgstr ""
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+#, fuzzy
+msgid "Old password: "
+msgstr "fichier des mots de passe"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+
+#, fuzzy
+msgid "New password: "
+msgstr "fichier des mots de passe"
+
+msgid "Try again."
+msgstr ""
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+
+msgid "They don't match; try again.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Les options ne peuvent pas être combinées."
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Les options ne peuvent pas être combinées."
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr ""
+
+#, c-format
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Changing password for %s\n"
+msgstr "impossible d'ouvrir les fichiers de mots de passe"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: password changed.\n"
+msgstr "Modifications du mot de passe"
+
+#, fuzzy, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "Modifier les informations de validité d'un mot de passe"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid " -q, --quiet report errors only\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+
+#, fuzzy
+msgid "invalid password file entry"
+msgstr "fichier des mots de passe cachés"
+
+#, fuzzy
+msgid "duplicate password entry"
+msgstr "impossible de mettre à jour le fichier des mots de passe"
+
+#, fuzzy, c-format
+msgid "invalid user name '%s'\n"
+msgstr "unicité et validité des noms d'utilisateur ;"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr ""
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr ""
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr ""
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr ""
+
+#, c-format
+msgid "no tcb directory for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "create tcb directory for %s?"
+msgstr "impossible de créer le répertoire personnel"
+
+#, fuzzy, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "impossible de créer le répertoire personnel"
+
+#, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "routines d'utilisation des mots de passe cachés"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr ""
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+#, fuzzy
+msgid "invalid shadow password file entry"
+msgstr "fichier des mots de passe cachés"
+
+#, fuzzy
+msgid "duplicate shadow password entry"
+msgstr "impossible de trouver le fichier des mots de passe cachés"
+
+#, fuzzy, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "la date du dernier changement de mot de passe n'est pas dans le futur."
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+msgid "Access to su to that account DENIED.\n"
+msgstr ""
+
+#, fuzzy
+msgid "Password authentication bypassed.\n"
+msgstr "Échec système ou d'authentification"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr ""
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr ""
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr ""
+
+msgid "Session terminated, terminating shell..."
+msgstr ""
+
+#, c-format
+msgid " ...killed.\n"
+msgstr ""
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr ""
+
+msgid " ...terminated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s\n"
+msgstr ""
+
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr ""
+
+#, fuzzy
+msgid "(Enter your own password)"
+msgstr "Modifier le mot de passe d'un utilisateur"
+
+#, fuzzy, c-format
+msgid "%s: Authentication failure\n"
+msgstr "Échec système ou d'authentification"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr ""
+
+#, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr ""
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot execute %s\n"
+msgstr ""
+
+#, fuzzy
+msgid "No password file"
+msgstr "fichier des mots de passe"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr ""
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+
+msgid "Entering System Maintenance Mode"
+msgstr ""
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "impossible de créer le répertoire personnel"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, fuzzy
+msgid " --badnames do not check for bad names\n"
+msgstr "Éditer les bases de données shadow ou gshadow."
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr ""
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr ""
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr "N'ajoute pas l'utilisateur aux bases de données lastlog et faillog."
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr ""
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr ""
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "validité du répertoire personnel ;"
+
+#, fuzzy, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "erreur de syntaxe"
+
+#, fuzzy, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "validité du répertoire personnel ;"
+
+#, fuzzy, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "configuration de la suite des mots de passe cachés « shadow password »"
+
+#, fuzzy, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "configuration de la suite des mots de passe cachés « shadow password »"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "impossible de créer le répertoire personnel"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr ""
+
+#, c-format
+msgid "%s: error while duplicating string %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "impossible de créer le répertoire personnel"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "impossible de créer le répertoire personnel"
+
+#, c-format
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr ""
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+
+msgid "Setting mailbox file permissions"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "impossible de créer le répertoire d'attente des courriels"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "impossible de mettre à jour le fichier des groupes"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "Identifiants subordonnés par utilisateur."
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "Identifiants de groupe subordonnés par utilisateur."
+
+#, c-format
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+"Élimine toute association avec tout utilisateur SELinux pour la connexion de "
+"l'utilisateur."
+
+#, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr ""
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: error removing subvolume %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr ""
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr ""
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr ""
+
+msgid " -L, --lock lock the user account\n"
+msgstr ""
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr ""
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr ""
+
+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 ""
+
+#, fuzzy
+msgid ""
+" -Z, --selinux-user SEUSER new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+"Élimine toute association avec tout utilisateur SELinux pour la connexion de "
+"l'utilisateur."
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: no options\n"
+msgstr "options"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "configuration de la suite des mots de passe cachés « shadow password »"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr ""
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "impossible de créer le répertoire personnel"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr ""
+
+msgid "failed to change mailbox owner"
+msgstr ""
+
+msgid "failed to rename mailbox"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid " -g, --group edit group database\n"
+msgstr ""
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr ""
+
+#, fuzzy
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr "Éditer les bases de données shadow ou gshadow."
+
+#, fuzzy
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr "Indique l'utilisateur dont le fichier shadow de tcb doit être édité."
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr ""
+
+#, fuzzy
+msgid "failed to create scratch directory"
+msgstr "impossible de créer le répertoire personnel"
+
+msgid "failed to drop privileges"
+msgstr ""
+
+msgid "Couldn't get file context"
+msgstr ""
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "failed to gain privileges"
+msgstr ""
+
+#, fuzzy
+msgid "Couldn't lock file"
+msgstr "impossible de verrouiller les fichiers group"
+
+msgid "Couldn't make backup"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+msgid "failed to open scratch file"
+msgstr ""
+
+msgid "failed to unlink scratch file"
+msgstr ""
+
+msgid "failed to stat edited file"
+msgstr ""
+
+msgid "failed to allocate memory"
+msgstr ""
+
+msgid "failed to create backup file"
+msgstr ""
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr ""
+"Ce champ est utilisé pour définir le répertoire personnel de l'utilisateur."
+
+#~ msgid "Marek"
+#~ msgstr "Marek"
+
+#~ msgid "Michałkiewicz"
+#~ msgstr "Michałkiewicz"
+
+#~ msgid "Creation, 1997"
+#~ msgstr "Création, 1997"
+
+#~ msgid "Thomas"
+#~ msgstr "Thomas"
+
+#~ msgid "Kłoczko"
+#~ msgstr "Kłoczko"
+
+#~ msgid "kloczek@pld.org.pl"
+#~ msgstr "kloczek@pld.org.pl"
+
+#~ msgid "shadow-utils maintainer, 2000 - 2007"
+#~ msgstr "Mainteneur de shadow-utils, 2000 - 2007"
+
+#~ msgid "Nicolas"
+#~ msgstr "Nicolas"
+
+#~ msgid "François"
+#~ msgstr "François"
+
+#~ msgid "nicolas.francois@centraliens.net"
+#~ msgstr "nicolas.francois@centraliens.net"
+
+#~ msgid "shadow-utils maintainer, 2007 - now"
+#~ msgstr "Mainteneur de shadow-utils, 2007 - maintenant"
+
+#~ msgid "vipw"
+#~ msgstr "vipw"
+
+#~ msgid "8"
+#~ msgstr "8"
+
+#~ msgid "System Management Commands"
+#~ msgstr "Commandes de gestion du système"
+
+#~ msgid "shadow-utils"
+#~ msgstr "shadow-utils"
+
+#~ msgid "vigr"
+#~ msgstr "vigr"
+
+#~ msgid "edit the password, group, shadow-password or shadow-group file"
+#~ msgstr "Éditer les fichiers passwd, group, shadow ou gshadow"
+
+#~ msgid "DESCRIPTION"
+#~ msgstr "DESCRIPTION"
+
+#~ msgid ""
+#~ "The <command>vipw</command> and <command>vigr</command> commands edits "
+#~ "the files <filename>/etc/passwd</filename> and <filename>/etc/group</"
+#~ "filename>, respectively. With the <option>-s</option> flag, they will "
+#~ "edit the shadow versions of those files, <filename>/etc/shadow</filename> "
+#~ "and <filename>/etc/gshadow</filename>, respectively. The programs will "
+#~ "set the appropriate locks to prevent file corruption. When looking for an "
+#~ "editor, the programs will first try the environment variable <envar>"
+#~ "$VISUAL</envar>, then the environment variable <envar>$EDITOR</envar>, "
+#~ "and finally the default editor, <citerefentry><refentrytitle>vi</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<command>vipw</command> et <command>vigr</command> permettent de modifier "
+#~ "les fichiers <filename>/etc/passwd</filename> et <filename>/etc/group</"
+#~ "filename>, respectivement. Avec l'option <option>-s</option>, ils "
+#~ "permettent d'éditer les versions cachées de ces fichiers : <filename>/etc/"
+#~ "shadow</filename> et <filename>/etc/gshadow</filename>, respectivement. "
+#~ "Ces programmes placent les verrous nécessaires afin d'éviter toute "
+#~ "corruption des fichiers. L'éditeur utilisé est choisi d'abord en fonction "
+#~ "de la variable d'environnement <envar>$VISUAL</envar>, puis de la "
+#~ "variable d'environnement <envar>$EDITOR</envar>. À défaut, l'éditeur, "
+#~ "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry> est utilisé quand ces variables ne sont pas définies."
+
+#~ msgid "OPTIONS"
+#~ msgstr "OPTIONS"
+
+#~ msgid ""
+#~ "The options which apply to the <command>vipw</command> and <command>vigr</"
+#~ "command> commands are:"
+#~ msgstr ""
+#~ "Les options applicables aux commandes <command>vipw</command> et "
+#~ "<command>vigr</command> sont :"
+
+#~ msgid "<option>-g</option>, <option>--group</option>"
+#~ msgstr "<option>-g</option>, <option>--group</option>"
+
+#~ msgid "Edit group database."
+#~ msgstr "Éditer la base de données de groupes."
+
+#~ msgid "<option>-h</option>, <option>--help</option>"
+#~ msgstr "<option>-h</option>, <option>--help</option>"
+
+#~ msgid "Display help message and exit."
+#~ msgstr "Afficher un message d'aide et quitter."
+
+#~ msgid "<option>-p</option>, <option>--passwd</option>"
+#~ msgstr "<option>-p</option>, <option>--passwd</option>"
+
+#~ msgid "Edit passwd database."
+#~ msgstr "Éditer la base de données passwd."
+
+#~ msgid "<option>-q</option>, <option>--quiet</option>"
+#~ msgstr "<option>-q</option>, <option>--quiet</option>"
+
+#~ msgid "Quiet mode."
+#~ msgstr "Mode silencieux."
+
+#~| msgid ""
+#~| "<option>-R</option>, <option>--root</option><replaceable>CHROOT_DIR</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-R</option>, <option>--root</option>&nbsp;"
+#~ "<replaceable>CHROOT_DIR</replaceable>"
+#~ msgstr ""
+#~ "<option>-R</option>, <option>--root</option>&nbsp;"
+#~ "<replaceable>RÉP_CHROOT</replaceable>"
+
+#~ msgid ""
+#~ "Apply changes in the <replaceable>CHROOT_DIR</replaceable> directory and "
+#~ "use the configuration files from the <replaceable>CHROOT_DIR</"
+#~ "replaceable> directory."
+#~ msgstr ""
+#~ "Appliquer les changements dans le répertoire <replaceable>RÉP_CHROOT</"
+#~ "replaceable> et utiliser les fichiers de configuration du répertoire "
+#~ "<replaceable>RÉP_CHROOT</replaceable>."
+
+#~ msgid "<option>-s</option>, <option>--shadow</option>"
+#~ msgstr "<option>-s</option>, <option>--shadow</option>"
+
+#~ msgid "<option>-u</option>, <option>--user</option>"
+#~ msgstr "<option>-u</option>, <option>--user</option>"
+
+#~ msgid "CONFIGURATION"
+#~ msgstr "CONFIGURATION"
+
+#~ msgid ""
+#~ "The following configuration variables in <filename>/etc/login.defs</"
+#~ "filename> change the behavior of this tool:"
+#~ msgstr ""
+#~ "Les variables de configuration suivantes dans <filename>/etc/login.defs</"
+#~ "filename> modifient le comportement de cet outil :"
+
+#~ msgid "<option>USE_TCB</option> (boolean)"
+#~ msgstr "<option>USE_TCB</option> (booléen)"
+
+#~ msgid ""
+#~ "If <replaceable>yes</replaceable>, the <citerefentry><refentrytitle>tcb</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry> password shadowing "
+#~ "scheme will be used."
+#~ msgstr ""
+#~ "Si <replaceable>yes</replaceable> (« oui »), le schéma de mot de passe "
+#~ "shadow de <citerefentry><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry> sera utilisé."
+
+#~ msgid "ENVIRONMENT"
+#~ msgstr "ENVIRONNEMENT"
+
+#~ msgid "VISUAL"
+#~ msgstr "VISUAL"
+
+#~ msgid "Editor to be used."
+#~ msgstr "L'éditeur à utiliser"
+
+#~ msgid "EDITOR"
+#~ msgstr "EDITOR"
+
+#~ msgid "Editor to be used if <option>VISUAL</option> is not set."
+#~ msgstr "L'éditeur à utiliser si <option>VISUAL</option> n'est pas définie."
+
+#~ msgid "FILES"
+#~ msgstr "FICHIERS"
+
+#~ msgid "/etc/group"
+#~ msgstr "/etc/group"
+
+#~ msgid "Group account information."
+#~ msgstr "Informations sur les groupes."
+
+#~ msgid "/etc/gshadow"
+#~ msgstr "/etc/gshadow"
+
+#~ msgid "Secure group account information."
+#~ msgstr "Informations sécurisées sur les groupes."
+
+#~ msgid "/etc/passwd"
+#~ msgstr "/etc/passwd"
+
+#~ msgid "User account information."
+#~ msgstr "Informations sur les comptes des utilisateurs."
+
+#~ msgid "/etc/shadow"
+#~ msgstr "/etc/shadow"
+
+#~ msgid "Secure user account information."
+#~ msgstr "Informations sécurisées sur les comptes utilisateurs."
+
+#~ msgid "SEE ALSO"
+#~ msgstr "VOIR AUSSI"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>group</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry><citerefentry condition=\"tcb"
+#~ "\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+#~ "condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>group</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry><citerefentry condition=\"tcb"
+#~ "\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+#~ "condition=\"tcb\"><refentrytitle>tcb</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#~ msgid "Julianne Frances"
+#~ msgstr "Julianne Frances"
+
+#~ msgid "Haugh"
+#~ msgstr "Haugh"
+
+#~ msgid "Creation, 1991"
+#~ msgstr "Création, 1991"
+
+#~ msgid "usermod"
+#~ msgstr "usermod"
+
+#~ msgid "modify a user account"
+#~ msgstr "Modifier un compte utilisateur"
+
+#~ msgid "LOGIN"
+#~ msgstr "LOGIN"
+
+#~ msgid ""
+#~ "The <command>usermod</command> command modifies the system account files "
+#~ "to reflect the changes that are specified on the command line."
+#~ msgstr ""
+#~ "La commande <command>usermod</command> modifie les fichiers "
+#~ "d'administration des comptes du système selon les modifications qui ont "
+#~ "été indiquées sur la ligne de commande."
+
+#~ msgid ""
+#~ "The options which apply to the <command>usermod</command> command are:"
+#~ msgstr ""
+#~ "Les options disponibles pour la commande <command>usermod</command> sont :"
+
+#~ msgid "<option>-a</option>, <option>--append</option>"
+#~ msgstr "<option>-a</option>, <option>--append</option>"
+
+#~ msgid ""
+#~ "Add the user to the supplementary group(s). Use only with the <option>-G</"
+#~ "option> option."
+#~ msgstr ""
+#~ "Ajouter l'utilisateur aux groupes supplémentaires. N'utilisez cette "
+#~ "option qu'avec l'option <option>-G</option>."
+
+#~| msgid ""
+#~| "<option>-c</option>, <option>--comment</option><replaceable>COMMENT</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-c</option>, <option>--comment</option>&nbsp;"
+#~ "<replaceable>COMMENT</replaceable>"
+#~ msgstr ""
+#~ "<option>-c</option>, <option>--comment</option>&nbsp;"
+#~ "<replaceable>COMMENTAIRE</replaceable>"
+
+#~ msgid ""
+#~ "The new value of the user's password file comment field. It is normally "
+#~ "modified using the <citerefentry><refentrytitle>chfn</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry> utility."
+#~ msgstr ""
+#~ "La nouvelle valeur du champ de commentaire du fichier de mots de passe "
+#~ "pour l'utilisateur. Il est normalement modifié en utilisant l'utilitaire "
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>."
+
+#~| msgid ""
+#~| "<option>-d</option>, <option>--home</option><replaceable>HOME_DIR</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-d</option>, <option>--home</option>&nbsp;<replaceable>HOME_DIR</"
+#~ "replaceable>"
+#~ msgstr ""
+#~ "<option>-d</option>, <option>--home</option>&nbsp;<replaceable>RÉP_PERSO</"
+#~ "replaceable>"
+
+#~ msgid "The user's new login directory."
+#~ msgstr "Le nouveau répertoire personnel de l'utilisateur."
+
+#~ msgid ""
+#~ "If the <option>-m</option> option is given, the contents of the current "
+#~ "home directory will be moved to the new home directory, which is created "
+#~ "if it does not already exist."
+#~ msgstr ""
+#~ "Si l'option <option>-m</option> est fournie, le contenu du répertoire "
+#~ "personnel actuel sera déplacé dans le nouveau répertoire personnel, qui "
+#~ "sera créé si nécessaire."
+
+#~| msgid ""
+#~| "<option>-e</option>, <option>--expiredate</"
+#~| "option><replaceable>EXPIRE_DATE</replaceable>"
+#~ msgid ""
+#~ "<option>-e</option>, <option>--expiredate</option>&nbsp;"
+#~ "<replaceable>EXPIRE_DATE</replaceable>"
+#~ msgstr ""
+#~ "<option>-e</option>, <option>--expiredate</option>&nbsp;"
+#~ "<replaceable>DATE_FIN_VALIDITÉ</replaceable>"
+
+#~ msgid ""
+#~ "The date on which the user account will be disabled. The date is "
+#~ "specified in the format <emphasis remap=\"I\">YYYY-MM-DD</emphasis>."
+#~ msgstr ""
+#~ "Date à laquelle le compte utilisateur sera désactivé. La date est "
+#~ "indiquée dans le format <emphasis remap=\"I\">AAAA-MM-JJ</emphasis>."
+
+#~ msgid ""
+#~ "An empty <replaceable>EXPIRE_DATE</replaceable> argument will disable the "
+#~ "expiration of the account."
+#~ msgstr ""
+#~ "Un paramètre <replaceable>DATE_FIN_VALIDITÉ</replaceable> vide "
+#~ "désactivera l'expiration du compte."
+
+#~ msgid ""
+#~ "This option requires a <filename>/etc/shadow</filename> file. A "
+#~ "<filename>/etc/shadow</filename> entry will be created if there were none."
+#~ msgstr ""
+#~ "Cette option nécessite un fichier <filename>/etc/shadow</filename>. Une "
+#~ "entrée <filename>/etc/shadow</filename> sera créée si il n'y en avait pas."
+
+#~| msgid ""
+#~| "<option>-f</option>, <option>--inactive</option><replaceable>INACTIVE</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-f</option>, <option>--inactive</option>&nbsp;"
+#~ "<replaceable>INACTIVE</replaceable>"
+#~ msgstr ""
+#~ "<option>-f</option>, <option>--inactive</option>&nbsp;"
+#~ "<replaceable>DURÉE_INACTIVITÉ</replaceable>"
+
+#~ msgid ""
+#~ "The number of days after a password expires until the account is "
+#~ "permanently disabled."
+#~ msgstr ""
+#~ "Nombre de jours suivant la fin de validité d'un mot de passe après lequel "
+#~ "le compte est définitivement désactivé."
+
+#~ msgid ""
+#~ "A value of 0 disables the account as soon as the password has expired, "
+#~ "and a value of -1 disables the feature."
+#~ msgstr ""
+#~ "Une valeur de 0 désactive le compte dès que le mot de passe a dépassé sa "
+#~ "fin de validité, et une valeur de -1 désactive cette fonctionnalité."
+
+#~| msgid ""
+#~| "<option>-g</option>, <option>--gid</option><replaceable>GROUP</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GROUP</"
+#~ "replaceable>"
+#~ msgstr ""
+#~ "<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GROUPE</"
+#~ "replaceable>"
+
+#~ msgid ""
+#~ "The group name or number of the user's new initial login group. The group "
+#~ "must exist."
+#~ msgstr ""
+#~ "Nom du groupe ou identifiant numérique du groupe de connexion initial de "
+#~ "l'utilisateur. Le groupe doit exister."
+
+#~ msgid ""
+#~ "Any file from the user's home directory owned by the previous primary "
+#~ "group of the user will be owned by this new group."
+#~ msgstr ""
+#~ "Tout fichier du répertoire personnel de l'utilisateur appartenant au "
+#~ "groupe primaire précédent de l'utilisateur appartiendra à ce nouveau "
+#~ "groupe."
+
+#~ msgid ""
+#~ "The group ownership of files outside of the user's home directory must be "
+#~ "fixed manually."
+#~ msgstr ""
+#~ "Le groupe propriétaire des fichiers en dehors du répertoire personnel de "
+#~ "l'utilisateur doit être modifié manuellement."
+
+#~| msgid ""
+#~| "<option>-G</option>, <option>--groups</option><replaceable>GROUP1</"
+#~| "replaceable>[<emphasis remap=\"I\">,GROUP2,...</emphasis>[<emphasis "
+#~| "remap=\"I\">,GROUPN</emphasis>]]]"
+#~ msgid ""
+#~ "<option>-G</option>, <option>--groups</option>&nbsp;<replaceable>GROUP1</"
+#~ "replaceable>[<emphasis remap=\"I\">,GROUP2,...</emphasis>[<emphasis remap="
+#~ "\"I\">,GROUPN</emphasis>]]]"
+#~ msgstr ""
+#~ "<option>-G</option>, <option>--groups</option>&nbsp;<replaceable>GROUPE1</"
+#~ "replaceable>[<emphasis remap=\"I\">,GROUPE2,...</emphasis>[<emphasis "
+#~ "remap=\"I\">,GROUPEN</emphasis>]]]"
+
+#~ msgid ""
+#~ "A list of supplementary groups which the user is also a member of. Each "
+#~ "group is separated from the next by a comma, with no intervening "
+#~ "whitespace. The groups are subject to the same restrictions as the group "
+#~ "given with the <option>-g</option> option."
+#~ msgstr ""
+#~ "Liste de groupes supplémentaires auxquels appartient également "
+#~ "l'utilisateur. Chaque groupe est séparé du suivant par une virgule, sans "
+#~ "espace entre eux. Les groupes sont soumis aux mêmes restrictions que "
+#~ "celles de l'option <option>-g</option>."
+
+#~ msgid ""
+#~ "If the user is currently a member of a group which is not listed, the "
+#~ "user will be removed from the group. This behaviour can be changed via "
+#~ "the <option>-a</option> option, which appends the user to the current "
+#~ "supplementary group list."
+#~ msgstr ""
+#~ "Si l'utilisateur fait actuellement partie d'un groupe qui n'est pas "
+#~ "listé, l'utilisateur sera supprimé du groupe. Ce comportement peut être "
+#~ "modifié par l'option <option>-a</option>, qui permet d'ajouter "
+#~ "l'utilisateur à la liste actuelle des groupes supplémentaires."
+
+#~| msgid ""
+#~| "<option>-l</option>, <option>--login</option><replaceable>NEW_LOGIN</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-l</option>, <option>--login</option>&nbsp;"
+#~ "<replaceable>NEW_LOGIN</replaceable>"
+#~ msgstr ""
+#~ "<option>-l</option>, <option>--login</option>&nbsp;"
+#~ "<replaceable>NOUVEAU_LOGIN</replaceable>"
+
+#~ msgid ""
+#~ "The name of the user will be changed from <replaceable>LOGIN</"
+#~ "replaceable> to <replaceable>NEW_LOGIN</replaceable>. Nothing else is "
+#~ "changed. In particular, the user's home directory or mail spool should "
+#~ "probably be renamed manually to reflect the new login name."
+#~ msgstr ""
+#~ "Le nom de l'utilisateur passera de <replaceable>LOGIN</replaceable> à "
+#~ "<replaceable>NOUVEAU_LOGIN</replaceable>. Rien d'autre ne sera modifié. "
+#~ "En particulier, le nom du répertoire personnel et l'emplacement de la "
+#~ "boîte aux lettres de l'utilisateur devrontprobablement être changés pour "
+#~ "refléter le nouveau nom de connexion."
+
+#~ msgid "<option>-L</option>, <option>--lock</option>"
+#~ msgstr "<option>-L</option>, <option>--lock</option>"
+
+#~ msgid ""
+#~ "Lock a user's password. This puts a '!' in front of the encrypted "
+#~ "password, effectively disabling the password. You can't use this option "
+#~ "with <option>-p</option> or <option>-U</option>."
+#~ msgstr ""
+#~ "Verrouiller le mot de passe d'un utilisateur. Cette option ajoute un "
+#~ "« ! » devant le mot de passe chiffré, ce qui désactive le mot de passe. "
+#~ "Vous ne pouvez pas utiliser cette option avec <option>-p</option> ou "
+#~ "<option>-U</option>."
+
+#~ msgid ""
+#~ "Note: if you wish to lock the account (not only access with a password), "
+#~ "you should also set the <replaceable>EXPIRE_DATE</replaceable> to "
+#~ "<replaceable>1</replaceable>."
+#~ msgstr ""
+#~ "Remarque : pour verrouiller le compte (et pas seulement l'accès au compte "
+#~ "par un mot de passe), il est également nécessaire de placer "
+#~ "<replaceable>DATE_FIN_VALIDITÉ</replaceable> à <replaceable>1</"
+#~ "replaceable>."
+
+#~ msgid "<option>-m</option>, <option>--move-home</option>"
+#~ msgstr "<option>-m</option>, <option>--move-home</option>"
+
+#~ msgid "Move the content of the user's home directory to the new location."
+#~ msgstr ""
+#~ "Déplacer le contenu du répertoire personnel de l'utilisateur vers un "
+#~ "nouvel emplacement."
+
+#~ msgid ""
+#~ "This option is only valid in combination with the <option>-d</option> (or "
+#~ "<option>--home</option>) option."
+#~ msgstr ""
+#~ "Cette option ne fonctionne que lorsqu'elle est combinée avec l'option "
+#~ "<option>-d</option> (ou <option>--home</option>)."
+
+#~ msgid ""
+#~ "<command>usermod</command> will try to adapt the ownership of the files "
+#~ "and to copy the modes, ACL and extended attributes, but manual changes "
+#~ "might be needed afterwards."
+#~ msgstr ""
+#~ "<command>usermod</command> essayera d'adapter les permissions des "
+#~ "fichiers et de copier les modes, ACL et attributs étendus. Cependant, "
+#~ "vous risquez de devoir procéder à des modifications vous-même."
+
+#~ msgid "<option>-o</option>, <option>--non-unique</option>"
+#~ msgstr "<option>-o</option>, <option>--non-unique</option>"
+
+#~ msgid ""
+#~ "When used with the <option>-u</option> option, this option allows to "
+#~ "change the user ID to a non-unique value."
+#~ msgstr ""
+#~ "En combinaison avec l'option <option>-u</option>, cette option permet de "
+#~ "changer l'identifiant utilisateur vers une valeur déjà utilisée."
+
+#~| msgid ""
+#~| "<option>-p</option>, <option>--password</option><replaceable>PASSWORD</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-p</option>, <option>--password</option>&nbsp;"
+#~ "<replaceable>PASSWORD</replaceable>"
+#~ msgstr ""
+#~ "<option>-p</option>, <option>--password</option>&nbsp;"
+#~ "<replaceable>MOT_DE_PASSE</replaceable>"
+
+#~ msgid ""
+#~ "The encrypted password, as returned by "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "Mot de passe chiffré, comme renvoyé par "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<emphasis role=\"bold\">Note:</emphasis> This option is not recommended "
+#~ "because the password (or encrypted password) will be visible by users "
+#~ "listing the processes."
+#~ msgstr ""
+#~ "<emphasis role=\"bold\">Remarque :</emphasis> l'utilisation de cette "
+#~ "option est déconseillée car le mot de passe (ou le mot de passe chiffré) "
+#~ "peut être visible des utilisateurs qui affichent la liste des processus. "
+
+#~ msgid ""
+#~ "The password will be written in the local <filename>/etc/passwd</"
+#~ "filename> or <filename>/etc/shadow</filename> file. This might differ "
+#~ "from the password database configured in your PAM configuration."
+#~ msgstr ""
+#~ "Le mot de passe sera écrit dans le fichier <filename>/etc/passwd</"
+#~ "filename> local ou le fichier <filename>/etc/shadow</filename>. Cela peut "
+#~ "être différent de la base de données de mots de passe définie dans la "
+#~ "configuration de PAM."
+
+#~ msgid ""
+#~ "You should make sure the password respects the system's password policy."
+#~ msgstr ""
+#~ "Il est nécessaire de vérifier si le mot de passe respecte la politique de "
+#~ "mots de passe du système."
+
+#~| msgid ""
+#~| "<option>-s</option>, <option>--shell</option><replaceable>SHELL</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SHELL</"
+#~ "replaceable>"
+#~ msgstr ""
+#~ "<option>-s</option>, <option>--shell</option>&nbsp;"
+#~ "<replaceable>INTERPRÉTEUR</replaceable>"
+
+#~ msgid ""
+#~ "The name of the user's new login shell. Setting this field to blank "
+#~ "causes the system to select the default login shell."
+#~ msgstr ""
+#~ "Nom du nouvel interpréteur de commandes initial (« login shell ») de "
+#~ "l'utilisateur. Si ce champ est vide, le système sélectionnera "
+#~ "l'interpréteur de commandes initial par défaut."
+
+#~| msgid ""
+#~| "<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+#~ msgid ""
+#~ "<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+#~ "replaceable>"
+#~ msgstr ""
+#~ "<option>-u</option>, <option>--uid</option>&nbsp;<replaceable>UID</"
+#~ "replaceable>"
+
+#~ msgid "The new numerical value of the user's ID."
+#~ msgstr "La valeur numérique de l'identifiant de l'utilisateur."
+
+#~ msgid ""
+#~ "This value must be unique, unless the <option>-o</option> option is used. "
+#~ "The value must be non-negative."
+#~ msgstr ""
+#~ "Cette valeur doit être unique, à moins que l'option <option>-o</option> "
+#~ "ne soit utilisée. La valeur ne doit pas être négative."
+
+#~ msgid ""
+#~ "The user's mailbox, and any files which the user owns and which are "
+#~ "located in the user's home directory will have the file user ID changed "
+#~ "automatically."
+#~ msgstr ""
+#~ "La boîte aux lettres et tous les fichiers possédés par l'utilisateur et "
+#~ "qui sont situés dans son répertoire personnel verront leur identifiant "
+#~ "d'utilisateur automatiquement modifié."
+
+#~ msgid ""
+#~ "The ownership of files outside of the user's home directory must be fixed "
+#~ "manually."
+#~ msgstr ""
+#~ "Le propriétaire des fichiers en dehors du répertoire personnel de "
+#~ "l'utilisateur doit être modifié manuellement."
+
+#~ msgid ""
+#~ "No checks will be performed with regard to the <option>UID_MIN</option>, "
+#~ "<option>UID_MAX</option>, <option>SYS_UID_MIN</option>, or "
+#~ "<option>SYS_UID_MAX</option> from <filename>/etc/login.defs</filename>."
+#~ msgstr ""
+#~ "Aucun contrôle ne sera effectué sur les valeurs de <option>UID_MIN</"
+#~ "option>, <option>UID_MAX</option>, <option>SYS_UID_MIN</option>, ou "
+#~ "<option>SYS_UID_MAX</option> du fichier <filename>/etc/login.defs</"
+#~ "filename>."
+
+#~ msgid "<option>-U</option>, <option>--unlock</option>"
+#~ msgstr "<option>-U</option>, <option>--unlock</option>"
+
+#~ msgid ""
+#~ "Unlock a user's password. This removes the '!' in front of the encrypted "
+#~ "password. You can't use this option with <option>-p</option> or <option>-"
+#~ "L</option>."
+#~ msgstr ""
+#~ "Déverrouiller le mot de passe d'un utilisateur. Cela supprime le « ! » "
+#~ "situé devant le mot de passe chiffré. Vous ne pouvez pas utiliser cette "
+#~ "option avec <option>-p</option> ou <option>-L</option>."
+
+#~ msgid ""
+#~ "Note: if you wish to unlock the account (not only access with a "
+#~ "password), you should also set the <replaceable>EXPIRE_DATE</replaceable> "
+#~ "(for example to <replaceable>99999</replaceable>, or to the "
+#~ "<option>EXPIRE</option> value from <filename>/etc/default/useradd</"
+#~ "filename>)."
+#~ msgstr ""
+#~ "Remarque : pour déverrouiller le compte (et pas seulement l'accès au "
+#~ "compte via un mot de passe), vous devriez définir la valeur "
+#~ "<replaceable>DATE_FIN_VALIDITÉ</replaceable> (par exemple à "
+#~ "<replaceable>99999</replaceable> ou à la valeur <option>EXPIRE</option> "
+#~ "dans <filename>/etc/default/useradd</filename>)."
+
+#~| msgid ""
+#~| "<option>-u</option>, <option>--user</option><replaceable>LOGIN</"
+#~| "replaceable>|<replaceable>RANGE</replaceable>"
+#~ msgid ""
+#~ "<option>-v</option>, <option>--add-sub-uids</option>&nbsp;"
+#~ "<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
+#~ msgstr ""
+#~ "<option>-v</option>, <option>--add-sub-uids</option>&nbsp;"
+#~ "<replaceable>PREMIER</replaceable>-<replaceable>DERNIER</replaceable>"
+
+#~ msgid "Add a range of subordinate uids to the user's account."
+#~ msgstr "Ajouter une plage d'identifiants subordonnés au compte utilisateur."
+
+#~ msgid ""
+#~ "This option may be specified multiple times to add multiple ranges to a "
+#~ "users account."
+#~ msgstr ""
+#~ "Cette option peut être spécifiée plusieurs fois pour ajouter plusieurs "
+#~ "plages à un compte utilisateur."
+
+#~| msgid ""
+#~| "No checks will be performed with regard to the <option>UID_MIN</option>, "
+#~| "<option>UID_MAX</option>, <option>SYS_UID_MIN</option>, or "
+#~| "<option>SYS_UID_MAX</option> from <filename>/etc/login.defs</filename>."
+#~ msgid ""
+#~ "No checks will be performed with regard to <option>SUB_UID_MIN</option>, "
+#~ "<option>SUB_UID_MAX</option>, or <option>SUB_UID_COUNT</option> from /etc/"
+#~ "login.defs."
+#~ msgstr ""
+#~ "Aucun contrôle ne sera effectué sur les valeurs de <option>SUB_UID_MIN</"
+#~ "option>, <option>SUB_UID_MAX</option>, ou <option>SUB_UID_COUNT</option> "
+#~ "du fichier <filename>/etc/login.defs</filename>."
+
+#~| msgid ""
+#~| "<option>-u</option>, <option>--user</option><replaceable>LOGIN</"
+#~| "replaceable>|<replaceable>RANGE</replaceable>"
+#~ msgid ""
+#~ "<option>-V</option>, <option>--del-sub-uids</option>&nbsp;"
+#~ "<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
+#~ msgstr ""
+#~ "<option>-V</option>, <option>--del-sub-uids</option>&nbsp;"
+#~ "<replaceable>PREMIER</replaceable>-<replaceable>DERNIER</replaceable>"
+
+#~ msgid "Remove a range of subordinate uids from the user's account."
+#~ msgstr ""
+#~ "Retirer une plage d'identifiants subordonnés d'un compte utilisateur."
+
+#~ msgid ""
+#~ "This option may be specified multiple times to remove multiple ranges to "
+#~ "a users account. When both <option>--del-sub-uids</option> and <option>--"
+#~ "add-sub-uids</option> are specified, the removal of all subordinate uid "
+#~ "ranges happens before any subordinate uid range is added."
+#~ msgstr ""
+#~ "Cette option peut être spécifiée plusieurs fois pour retirer plusieurs "
+#~ "plages à un compte utilisateur. Quand les deux options <option>--del-sub-"
+#~ "uids</option> et <option>--add-sub-uids</option> sont spécifiées en même "
+#~ "temps, le retrait de l'ensemble des plages d'identifiants subordonnés est "
+#~ "effectué avant l'ajout des plages d'identifiants subordonnés."
+
+#~| msgid ""
+#~| "<option>-u</option>, <option>--user</option><replaceable>LOGIN</"
+#~| "replaceable>|<replaceable>RANGE</replaceable>"
+#~ msgid ""
+#~ "<option>-w</option>, <option>--add-sub-gids</option>&nbsp;"
+#~ "<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
+#~ msgstr ""
+#~ "<option>-w</option>, <option>--add-sub-gids</option>&nbsp;"
+#~ "<replaceable>PREMIER</replaceable>-<replaceable>DERNIER</replaceable>"
+
+#~ msgid "Add a range of subordinate gids to the user's account."
+#~ msgstr ""
+#~ "Ajouter une plage d'identifiants de groupe subordonnés au compte "
+#~ "utilisateur."
+
+#~| msgid ""
+#~| "No checks will be performed with regard to the <option>GID_MIN</option>, "
+#~| "<option>GID_MAX</option>, <option>SYS_GID_MIN</option>, or "
+#~| "<option>SYS_GID_MAX</option> from <filename>/etc/login.defs</filename>."
+#~ msgid ""
+#~ "No checks will be performed with regard to <option>SUB_GID_MIN</option>, "
+#~ "<option>SUB_GID_MAX</option>, or <option>SUB_GID_COUNT</option> from /etc/"
+#~ "login.defs."
+#~ msgstr ""
+#~ "Aucun contrôle ne sera effectué sur les valeurs de <option>SUB_GID_MIN</"
+#~ "option>, <option>SUB_GID_MAX</option>, ou<option>SUB_SYS_GID_COUNT</"
+#~ "option> du fichier <filename>/etc/login.defs</filename>."
+
+#~| msgid ""
+#~| "<option>-u</option>, <option>--user</option><replaceable>LOGIN</"
+#~| "replaceable>|<replaceable>RANGE</replaceable>"
+#~ msgid ""
+#~ "<option>-W</option>, <option>--del-sub-gids</option>&nbsp;"
+#~ "<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
+#~ msgstr ""
+#~ "<option>-W</option>, <option>--del-sub-gids</option>&nbsp;"
+#~ "<replaceable>PREMIER</replaceable>-<replaceable>DERNIER</replaceable>"
+
+#~| msgid "Remove any SELinux user mapping for the user's login."
+#~ msgid "Remove a range of subordinate gids from the user's account."
+#~ msgstr ""
+#~ "Retirer une plage d'identifiants de groupe subordonnés d'un compte "
+#~ "utilisateur."
+
+#~ msgid ""
+#~ "This option may be specified multiple times to remove multiple ranges to "
+#~ "a users account. When both <option>--del-sub-gids</option> and <option>--"
+#~ "add-sub-gids</option> are specified, the removal of all subordinate gid "
+#~ "ranges happens before any subordinate gid range is added."
+#~ msgstr ""
+#~ "Cette option peut être spécifiée plusieurs fois pour retirer plusieurs "
+#~ "plages à un compte utilisateur. Quand les deux options <option>--del-sub-"
+#~ "gids</option> et <option>--add-sub-gids</option> sont spécifiées en même "
+#~ "temps, le retrait de l'ensemble des plages d'identifiants de groupe "
+#~ "subordonnés est effectué avant l'ajout des plages d'identifiants de "
+#~ "groupe subordonnés."
+
+#~| msgid ""
+#~| "<option>-Z</option>, <option>--selinux-user</option><replaceable>SEUSER</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-Z</option>, <option>--selinux-user</option>&nbsp;"
+#~ "<replaceable>SEUSER</replaceable>"
+#~ msgstr ""
+#~ "<option>-Z</option>, <option>--selinux-user</option>&nbsp;"
+#~ "<replaceable>UTILISATEUR_SELINUX</replaceable>"
+
+#~ msgid "The new SELinux user for the user's login."
+#~ msgstr ""
+#~ "Le nouvel utilisateur SELinux utilisé pour la connexion de l'utilisateur."
+
+#~ msgid ""
+#~ "A blank <replaceable>SEUSER</replaceable> will remove the SELinux user "
+#~ "mapping for user <replaceable>LOGIN</replaceable> (if any)."
+#~ msgstr ""
+#~ "Un paramètre <replaceable>SEUSER</replaceable> vide éliminera "
+#~ "l'association de l'utilisateur SELinux pour l'utilisateur "
+#~ "<replaceable>LOGIN</replaceable> (si spécifiée)"
+
+#~ msgid "CAVEATS"
+#~ msgstr "AVERTISSEMENTS"
+
+#~ msgid ""
+#~ "You must make certain that the named user is not executing any processes "
+#~ "when this command is being executed if the user's numerical user ID, the "
+#~ "user's name, or the user's home directory is being changed. "
+#~ "<command>usermod</command> checks this on Linux, but only check if the "
+#~ "user is logged in according to utmp on other architectures."
+#~ msgstr ""
+#~ "Il est nécessaire de contrôler que l'identifiant indiqué n'a pas de "
+#~ "processus en cours d'exécution si cette commande est utilisée pour "
+#~ "modifier l'identifiant numérique de l'utilisateur, son identifiant "
+#~ "(login) ou son répertoire personnel. <command>usermod</command> effectue "
+#~ "ce contrôle sous Linux mais vérifie seulement les informations d'utmp sur "
+#~ "les autres architectures."
+
+#~ msgid ""
+#~ "You must change the owner of any <command>crontab</command> files or "
+#~ "<command>at</command> jobs manually."
+#~ msgstr ""
+#~ "Il est nécessaire de changer manuellement le propriétaire des fichiers "
+#~ "<command>crontab</command> ou des travaux programmés par <command>at</"
+#~ "command>."
+
+#~ msgid "You must make any changes involving NIS on the NIS server."
+#~ msgstr ""
+#~ "Les modifications qui concernent NIS doivent être effectuées sur le "
+#~ "serveur NIS."
+
+#~ msgid "<option>MAIL_DIR</option> (string)"
+#~ msgstr "<option>MAIL_DIR</option> (chaîne de caractères)"
+
+#~ msgid ""
+#~ "The mail spool directory. This is needed to manipulate the mailbox when "
+#~ "its corresponding user account is modified or deleted. If not specified, "
+#~ "a compile-time default is used."
+#~ msgstr ""
+#~ "Répertoire d'attente des courriels (« mail spool directory »). Ce "
+#~ "paramètre est nécessaire pour manipuler les boîtes à lettres lorsque le "
+#~ "compte d'un utilisateur est modifié ou supprimé. S'il n'est pas spécifié, "
+#~ "une valeur par défaut définie à la compilation est utilisée."
+
+#~ msgid "<option>MAIL_FILE</option> (string)"
+#~ msgstr "<option>MAIL_FILE</option> (chaîne de caractères)"
+
+#~ msgid ""
+#~ "Defines the location of the users mail spool files relatively to their "
+#~ "home directory."
+#~ msgstr ""
+#~ "Définir l'emplacement des boîtes aux lettres des utilisateurs "
+#~ "relativement à leur répertoire personnel."
+
+#~ msgid ""
+#~ "The <option>MAIL_DIR</option> and <option>MAIL_FILE</option> variables "
+#~ "are used by <command>useradd</command>, <command>usermod</command>, and "
+#~ "<command>userdel</command> to create, move, or delete the user's mail "
+#~ "spool."
+#~ msgstr ""
+#~ "Les paramètres <option>MAIL_DIR</option> et <option>MAIL_FILE</option> "
+#~ "sont utilisés par <command>useradd</command>, <command>usermod</command> "
+#~ "et <command>userdel</command> pour créer, déplacer ou supprimer les "
+#~ "boîtes aux lettres des utilisateurs."
+
+#~ msgid ""
+#~ "If <option>MAIL_CHECK_ENAB</option> is set to <replaceable>yes</"
+#~ "replaceable>, they are also used to define the <envar>MAIL</envar> "
+#~ "environment variable."
+#~ msgstr ""
+#~ "Si <option>MAIL_CHECK_ENAB</option> est réglé sur <replaceable>yes</"
+#~ "replaceable>, ces variables servent également à définir la variable "
+#~ "d'environnement <envar>MAIL</envar>."
+
+#~ msgid "<option>MAX_MEMBERS_PER_GROUP</option> (number)"
+#~ msgstr "<option>MAX_MEMBERS_PER_GROUP</option> (nombre)"
+
+#~ msgid ""
+#~ "Maximum members per group entry. When the maximum is reached, a new group "
+#~ "entry (line) is started in <filename>/etc/group</filename> (with the same "
+#~ "name, same password, and same GID)."
+#~ msgstr ""
+#~ "Nombre maximum de membres par entrée de groupe. Lorsque le maximum est "
+#~ "atteint, une nouvelle entrée de groupe (ligne) est démarrée dans "
+#~ "<filename>/etc/group</filename> (avec le même nom, même mot de passe, et "
+#~ "même GID)."
+
+#~ msgid ""
+#~ "The default value is 0, meaning that there are no limits in the number of "
+#~ "members in a group."
+#~ msgstr ""
+#~ "La valeur par défaut est 0, ce qui signifie qu'il n'y a pas de limites "
+#~ "pour le nombre de membres dans un groupe."
+
+#~ msgid ""
+#~ "This feature (split group) permits to limit the length of lines in the "
+#~ "group file. This is useful to make sure that lines for NIS groups are not "
+#~ "larger than 1024 characters."
+#~ msgstr ""
+#~ "Cette fonctionnalité (groupe découpé) permet de limiter la longueur des "
+#~ "lignes dans le fichier de groupes. Ceci est utile pour s'assurer que les "
+#~ "lignes pour les groupes NIS ne sont pas plus grandes que 1024 caractères."
+
+#~ msgid "If you need to enforce such limit, you can use 25."
+#~ msgstr ""
+#~ "Si vous avez besoin de configurer cette limite, vous pouvez utiliser 25."
+
+#~ msgid ""
+#~ "Note: split groups may not be supported by all tools (even in the Shadow "
+#~ "toolsuite). You should not use this variable unless you really need it."
+#~ msgstr ""
+#~ "Remarque : les groupes découpés ne sont peut-être pas pris en charge par "
+#~ "tous les outils (même dans la suite d'outils Shadow). Vous ne devriez pas "
+#~ "utiliser cette variable, sauf si vous en avez vraiment besoin."
+
+#~| msgid "<option>SYS_GID_MIN</option> (number)"
+#~ msgid "<option>SUB_GID_MIN</option> (number)"
+#~ msgstr "<option>SUB_GID_MIN</option> (nombre)"
+
+#~| msgid "<option>SYS_GID_MAX</option> (number)"
+#~ msgid "<option>SUB_GID_MAX</option> (number)"
+#~ msgstr "<option>SUB_GID_MAX</option> (nombre)"
+
+#~| msgid "<option>SYS_GID_MIN</option> (number)"
+#~ msgid "<option>SUB_GID_COUNT</option> (number)"
+#~ msgstr "<option>SUB_GID_MIN</option> (nombre)"
+
+#~ msgid ""
+#~ "If <filename>/etc/subuid</filename> exists, the commands "
+#~ "<command>useradd</command> and <command>newusers</command> (unless the "
+#~ "user already have subordinate group IDs) allocate <option>SUB_GID_COUNT</"
+#~ "option> unused group IDs from the range <option>SUB_GID_MIN</option> to "
+#~ "<option>SUB_GID_MAX</option> for each new user."
+#~ msgstr ""
+#~ "Si <filename>/etc/subuid</filename> existe, les commandes "
+#~ "<command>useradd</command> et <command>newusers</command> (sauf si "
+#~ "l'utilisateur a déjà des identifiants de groupe subordonnés) allouent "
+#~ "<option>SUB_GID_COUNT</option> identifiants de groupe inutilisés à partir "
+#~ "de la plage <option>SUB_GID_MIN</option> à <option>SUB_GID_MAX</option> "
+#~ "pour chaque nouvel utilisateur."
+
+#~| msgid ""
+#~| "The default value for <option>SYS_GID_MIN</option> (resp. "
+#~| "<option>SYS_GID_MAX</option>) is 101 (resp. <option>GID_MIN</option>-1)."
+#~ msgid ""
+#~ "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."
+#~ msgstr ""
+#~ "Les valeurs par défaut pour <option>SUB_GID_MIN</option>, "
+#~ "<option>SUB_GID_MAX</option> et <option>SUB_GID_COUNT</option> sont "
+#~ "respectivement 100000, 600100000 and 10000."
+
+#~| msgid "<option>SYS_UID_MIN</option> (number)"
+#~ msgid "<option>SUB_UID_MIN</option> (number)"
+#~ msgstr "<option>SUB_UID_MIN</option> (nombre)"
+
+#~| msgid "<option>SYS_UID_MAX</option> (number)"
+#~ msgid "<option>SUB_UID_MAX</option> (number)"
+#~ msgstr "<option>SUB_UID_MAX</option> (nombre)"
+
+#~| msgid "<option>SYS_UID_MIN</option> (number)"
+#~ msgid "<option>SUB_UID_COUNT</option> (number)"
+#~ msgstr "<option>SUB_UID_COUNT</option> (nombre)"
+
+#~ msgid ""
+#~ "If <filename>/etc/subuid</filename> exists, the commands "
+#~ "<command>useradd</command> and <command>newusers</command> (unless the "
+#~ "user already have subordinate user IDs) allocate <option>SUB_UID_COUNT</"
+#~ "option> unused user IDs from the range <option>SUB_UID_MIN</option> to "
+#~ "<option>SUB_UID_MAX</option> for each new user."
+#~ msgstr ""
+#~ "Si <filename>/etc/subuid</filename> existe, les commandes "
+#~ "<command>useradd</command> et <command>newusers</command> (sauf si "
+#~ "l'utilisateur a déjà des identifiants subordonnés) allouent "
+#~ "<option>SUB_UID_COUNT</option> identifiants inutilisés à partir de la "
+#~ "plage <option>SUB_UID_MIN</option> à <option>SUB_UID_MAX</option> pour "
+#~ "chaque nouvel utilisateur."
+
+#~| msgid ""
+#~| "The default value for <option>SYS_UID_MIN</option> (resp. "
+#~| "<option>SYS_UID_MAX</option>) is 101 (resp. <option>UID_MIN</option>-1)."
+#~ msgid ""
+#~ "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."
+#~ msgstr ""
+#~ "Les valeurs par défaut pour <option>SUB_UID_MIN</option>, "
+#~ "<option>SUB_UID_MAX</option> et <option>SUB_UID_COUNT</option> sont "
+#~ "respectivement 100000, 600100000 and 10000."
+
+#~ msgid "<option>TCB_SYMLINKS</option> (boolean)"
+#~ msgstr "<option>TCB_SYMLINKS</option> (booléen)"
+
+#~ msgid ""
+#~ "\n"
+#~ "if ( UID is less than 1000) {\n"
+#~ " use /etc/tcb/user\n"
+#~ "} else if ( UID is less than 1000000) {\n"
+#~ " kilos = UID / 1000\n"
+#~ " use /etc/tcb/:kilos/user\n"
+#~ " make symlink /etc/tcb/user to the above directory\n"
+#~ "} else {\n"
+#~ " megas = UID / 1000000\n"
+#~ " kilos = ( UID / megas * 1000000 ) / 1000\n"
+#~ " use /etc/tcb/:megas/:kilos/user\n"
+#~ " make symlink /etc/tcb/user to the above directory\n"
+#~ "}\n"
+#~ " "
+#~ msgstr ""
+#~ "\n"
+#~ "si ( UID est inférieur à 1000) {\n"
+#~ " utiliser /etc/tcb/user\n"
+#~ "} sinon, et si ( UID est inférieur à 1000000) {\n"
+#~ " kilos = UID / 1000\n"
+#~ " utiliser /etc/tcb/:kilos/user\n"
+#~ " faire un lien symbolique de /etc/tcb/user vers le répertoire précédent\n"
+#~ "} sinon {\n"
+#~ " megas = UID / 1000000\n"
+#~ " kilos = ( UID / megas * 1000000 ) / 1000\n"
+#~ " utiliser /etc/tcb/:megas/:kilos/user\n"
+#~ " faire un lien symbolique de /etc/tcb/user vers le répertoire précédent\n"
+#~ "}\n"
+#~ " "
+
+#~ msgid ""
+#~ "If <replaceable>yes</replaceable>, the location of the user tcb directory "
+#~ "to be created will not be automatically set to /etc/tcb/user, but will be "
+#~ "computed depending on the UID of the user, according to the following "
+#~ "algorithm: <placeholder-1/>"
+#~ msgstr ""
+#~ "Si <replaceable>yes</replaceable> (« oui »), l'emplacement du répertoire "
+#~ "tcb de l'utilisateur à créer ne sera pas automatiquement configuré à /etc/"
+#~ "tcb/user, mais sera calculé en fonction de l'UID de l'utilisateur, à "
+#~ "l'aide de l'algorithme suivant : <placeholder-1/>"
+
+#~ msgid "/etc/login.defs"
+#~ msgstr "/etc/login.defs"
+
+#~ msgid "Shadow password suite configuration."
+#~ msgstr ""
+#~ "Configuration de la suite des mots de passe cachés « shadow password »."
+
+#~| msgid "/etc/suauth"
+#~ msgid "/etc/subgid"
+#~ msgstr "/etc/subgid"
+
+#~| msgid "/etc/suauth"
+#~ msgid "/etc/subuid"
+#~ msgstr "/etc/subuid"
+
+#~| msgid ""
+#~| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#~| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#~| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~| "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~| "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#~| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~| "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#~| "manvolnum></citerefentry>."
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <phrase condition=\"subids"
+#~ "\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+#~ "phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <phrase condition=\"subids"
+#~ "\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+#~ "phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid "userdel"
+#~ msgstr "userdel"
+
+#~ msgid "delete a user account and related files"
+#~ msgstr "supprimer un compte utilisateur et les fichiers associés"
+
+#~ msgid ""
+#~ "The <command>userdel</command> command modifies the system account files, "
+#~ "deleting all entries that refer to the user name <emphasis remap=\"I"
+#~ "\">LOGIN</emphasis>. The named user must exist."
+#~ msgstr ""
+#~ "La commande <command>userdel</command> modifie les fichiers "
+#~ "d'administration des comptes du système, en supprimant les entrées qui se "
+#~ "réfèrent à <emphasis remap=\"I\">LOGIN</emphasis>. L'utilisateur nommé "
+#~ "doit exister."
+
+#~ msgid ""
+#~ "The options which apply to the <command>userdel</command> command are:"
+#~ msgstr ""
+#~ "Les options disponibles de la commande <command>userdel</command> sont :"
+
+#~ msgid "<option>-f</option>, <option>--force</option>"
+#~ msgstr "<option>-f</option>, <option>--force</option>"
+
+#~ msgid ""
+#~ "This option forces the removal of the user account, even if the user is "
+#~ "still logged in. It also forces <command>userdel</command> to remove the "
+#~ "user's home directory and mail spool, even if another user uses the same "
+#~ "home directory or if the mail spool is not owned by the specified user. "
+#~ "If <option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I"
+#~ "\">yes</emphasis> in <filename>/etc/login.defs</filename> and if a group "
+#~ "exists with the same name as the deleted user, then this group will be "
+#~ "removed, even if it is still the primary group of another user."
+#~ msgstr ""
+#~ "Cette option impose la suppression de l'utilisateur, même s'il est encore "
+#~ "connecté. Elle force également <command>userdel</command> à supprimer son "
+#~ "répertoire personnel et sa file d'attente des courriels, même si un autre "
+#~ "utilisateur utilise le même répertoire personnel ou si l'utilisateur "
+#~ "précisé n'est pas le propriétaire de la file d'attente des courriels. Si "
+#~ "<emphasis>USERGROUPS_ENAB</emphasis> vaut <emphasis remap=\"I\">yes</"
+#~ "emphasis> dans <filename>/etc/login.defs</filename> et si un groupe "
+#~ "existe avec le même nom que l'utilisateur supprimé, alors ce groupe sera "
+#~ "supprimé, même s'il s'agit du groupe primaire d'un autre utilisateur."
+
+#~ msgid ""
+#~ "<emphasis>Note:</emphasis> This option is dangerous and may leave your "
+#~ "system in an inconsistent state."
+#~ msgstr ""
+#~ "<emphasis>Remarque :</emphasis> Cette option est dangereuse, elle peut "
+#~ "laisser votre système dans un état incohérent."
+
+#~ msgid "<option>-r</option>, <option>--remove</option>"
+#~ msgstr "<option>-r</option>, <option>--remove</option>"
+
+#~ msgid ""
+#~ "Files in the user's home directory will be removed along with the home "
+#~ "directory itself and the user's mail spool. Files located in other file "
+#~ "systems will have to be searched for and deleted manually."
+#~ msgstr ""
+#~ "Les fichiers présents dans le répertoire personnel de l'utilisateur "
+#~ "seront supprimés en même temps que le répertoire lui-même, ainsi que le "
+#~ "répertoire d'attente des courriels. Vous devrez rechercher et éliminer "
+#~ "vous-même les fichiers situés dans d'autres systèmes de fichiers."
+
+#~ msgid ""
+#~ "The mail spool is defined by the <option>MAIL_DIR</option> variable in "
+#~ "the <filename>login.defs</filename> file."
+#~ msgstr ""
+#~ "Le répertoire d'attente des courriels est défini par la variable "
+#~ "<option>MAIL_DIR</option> dans <filename>login.defs</filename>."
+
+#~ msgid "<option>-Z</option>, <option>--selinux-user</option>"
+#~ msgstr "<option>-Z</option>, <option>--selinux-user</option>"
+
+#~ msgid "<option>USERDEL_CMD</option> (string)"
+#~ msgstr "<option>USERDEL_CMD</option> (chaîne de caractères)"
+
+#~ msgid ""
+#~ "If defined, this command is run when removing a user. It should remove "
+#~ "any at/cron/print jobs etc. owned by the user to be removed (passed as "
+#~ "the first argument)."
+#~ msgstr ""
+#~ "Si définie, la commande est exécutée lors de la suppression d'un "
+#~ "utilisateur. Elle pourra supprimer toutes les tâches périodiques cron ou "
+#~ "at, tous les travaux d'impression, etc. de l'utilisateur (qui sera fourni "
+#~ "comme premier paramètre)."
+
+#~ msgid "The return code of the script is not taken into account."
+#~ msgstr "Le code de retour du script n'est pas pris en compte."
+
+#~ msgid ""
+#~ "\n"
+#~ "#! /bin/sh\n"
+#~ "\n"
+#~ "# Check for the required argument.\n"
+#~ "if [ $# != 1 ]; then\n"
+#~ "\techo \"Usage: $0 username\"\n"
+#~ "\texit 1\n"
+#~ "fi\n"
+#~ "\n"
+#~ "# Remove cron jobs.\n"
+#~ "crontab -r -u $1\n"
+#~ "\n"
+#~ "# Remove at jobs.\n"
+#~ "# Note that it will remove any jobs owned by the same UID,\n"
+#~ "# even if it was shared by a different username.\n"
+#~ "AT_SPOOL_DIR=/var/spool/cron/atjobs\n"
+#~ "find $AT_SPOOL_DIR -name \"[^.]*\" -type f -user $1 -delete \\;\n"
+#~ "\n"
+#~ "# Remove print jobs.\n"
+#~ "lprm $1\n"
+#~ "\n"
+#~ "# All done.\n"
+#~ "exit 0\n"
+#~ " "
+#~ msgstr ""
+#~ "\n"
+#~ "#! /bin/sh\n"
+#~ "\n"
+#~ "# Check for the required argument.\n"
+#~ "if [ $# != 1 ]; then\n"
+#~ "\techo \"Usage: $0 username\"\n"
+#~ "\texit 1\n"
+#~ "fi\n"
+#~ "\n"
+#~ "# Remove cron jobs.\n"
+#~ "crontab -r -u $1\n"
+#~ "\n"
+#~ "# Remove at jobs.\n"
+#~ "# Note that it will remove any jobs owned by the same UID,\n"
+#~ "# even if it was shared by a different username.\n"
+#~ "AT_SPOOL_DIR=/var/spool/cron/atjobs\n"
+#~ "find $AT_SPOOL_DIR -name \"[^.]*\" -type f -user $1 -delete \\;\n"
+#~ "\n"
+#~ "# Remove print jobs.\n"
+#~ "lprm $1\n"
+#~ "\n"
+#~ "# All done.\n"
+#~ "exit 0\n"
+#~ " "
+
+#~ msgid ""
+#~ "Here is an example script, which removes the user's cron, at and print "
+#~ "jobs: <placeholder-1/>"
+#~ msgstr ""
+#~ "Voici un script exemple, qui supprime le fichier d'entrée de cron et d'at "
+#~ "ainsi que les travaux d'impression en attente ;<placeholder-1/>"
+
+#~ msgid "<option>USERGROUPS_ENAB</option> (boolean)"
+#~ msgstr "<option>USERGROUPS_ENAB</option> (booléen)"
+
+#~ msgid ""
+#~ "Enable setting of the umask group bits to be the same as owner bits "
+#~ "(examples: 022 -&gt; 002, 077 -&gt; 007) for non-root users, if the uid "
+#~ "is the same as gid, and username is the same as the primary group name."
+#~ msgstr ""
+#~ "Activer la mise en place de bits de masque de groupe (« umask group "
+#~ "bits ») identiques à ceux du propriétaire (exemple : 022 -&gt; 002, 077 -"
+#~ "&gt; 007) pour les utilisateurs non privilégiés, si l'UID est identique "
+#~ "au GID et que l'identifiant de connexion est identique au groupe "
+#~ "principal."
+
+#~ msgid ""
+#~ "If set to <replaceable>yes</replaceable>, <command>userdel</command> will "
+#~ "remove the user's group if it contains no more members, and "
+#~ "<command>useradd</command> will create by default a group with the name "
+#~ "of the user."
+#~ msgstr ""
+#~ "Si cette variable est configurée à <replaceable>yes</replaceable>, "
+#~ "<command>userdel</command> supprimera le groupe de l'utilisateur s'il ne "
+#~ "contient pas d'autres membres, et <command>useradd</command> créera par "
+#~ "défaut un groupe portant le nom de l'utilisateur."
+
+#~ msgid "EXIT VALUES"
+#~ msgstr "VALEURS DE RETOUR"
+
+#~ msgid "0"
+#~ msgstr "0"
+
+#~ msgid "success"
+#~ msgstr "succès"
+
+#~ msgid "1"
+#~ msgstr "1"
+
+#~ msgid "2"
+#~ msgstr "2"
+
+#~ msgid "6"
+#~ msgstr "6"
+
+#~ msgid "10"
+#~ msgstr "10"
+
+#~ msgid "12"
+#~ msgstr "12"
+
+#~ msgid ""
+#~ "The <command>userdel</command> command exits with the following values: "
+#~ "<placeholder-1/>"
+#~ msgstr ""
+#~ "La commande <command>userdel</command> retourne les valeurs suivantes en "
+#~ "quittant : <placeholder-1/>"
+
+#~ msgid ""
+#~ "<command>userdel</command> will not allow you to remove an account if "
+#~ "there are running processes which belong to this account. In that case, "
+#~ "you may have to kill those processes or lock the user's password or "
+#~ "account and remove the account later. The <option>-f</option> option can "
+#~ "force the deletion of this account."
+#~ msgstr ""
+#~ "<command>userdel</command> ne permet pas la suppression d'un compte si "
+#~ "des processus actifs lui appartiennent encore. Dans ce cas, il peut être "
+#~ "nécessaire de tuer ces processus ou de simplement verrouiller le mot de "
+#~ "passe ou le compte de l'utilisateur, afin de supprimer le compte plus "
+#~ "tard. L'option <option>-f</option> permet de forcer la suppression du "
+#~ "compte."
+
+#~ msgid ""
+#~ "You should manually check all file systems to ensure that no files remain "
+#~ "owned by this user."
+#~ msgstr ""
+#~ "Vous devez vérifier vous-même qu'aucun fichier possédé par l'utilisateur "
+#~ "ne subsiste sur tous les systèmes de fichiers."
+
+#~ msgid ""
+#~ "You may not remove any NIS attributes on a NIS client. This must be "
+#~ "performed on the NIS server."
+#~ msgstr ""
+#~ "Vous ne pouvez supprimer aucun attribut NIS d'un client NIS. Cela doit "
+#~ "être effectué sur le serveur NIS."
+
+#~ msgid ""
+#~ "If <option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I"
+#~ "\">yes</emphasis> in <filename>/etc/login.defs</filename>, "
+#~ "<command>userdel</command> will delete the group with the same name as "
+#~ "the user. To avoid inconsistencies in the passwd and group databases, "
+#~ "<command>userdel</command> will check that this group is not used as a "
+#~ "primary group for another user, and will just warn without deleting the "
+#~ "group otherwise. The <option>-f</option> option can force the deletion of "
+#~ "this group."
+#~ msgstr ""
+#~ "Si <option>USERGROUPS_ENAB</option> vaut <emphasis remap=\"I\">yes</"
+#~ "emphasis> (« oui ») dans <filename>/etc/login.defs</filename>, "
+#~ "<command>userdel</command> supprimera le groupe ayant le même nom que "
+#~ "l'utilisateur. Afin d'éviter des incohérences entre les fichiers passwd "
+#~ "et group, <command>userdel</command> vérifiera que le groupe n'est pas "
+#~ "utilisé comme groupe primaire d'un autre utilisateur ; si c'est le cas un "
+#~ "avertissement sera affiché et le groupe ne sera pas supprimé. L'option "
+#~ "<option>-f</option> permet d'imposer la suppression du groupe."
+
+#~| msgid ""
+#~| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#~| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#~| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~| "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~| "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#~| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~| "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#~| "manvolnum></citerefentry>."
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+#~ "\"subids\"><citerefentry><refentrytitle>subgid</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>subuid</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>useradd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+#~ "\"subids\"><citerefentry><refentrytitle>subgid</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>subuid</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>useradd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "useradd"
+#~ msgstr "useradd"
+
+#~ msgid "create a new user or update default new user information"
+#~ msgstr ""
+#~ "créer un nouvel utilisateur ou modifier les informations par défaut "
+#~ "appliquées aux nouveaux utilisateurs"
+
+#~ msgid "-D"
+#~ msgstr "-D"
+
+#~ msgid ""
+#~ "When invoked without the <option>-D</option> option, the "
+#~ "<command>useradd</command> command creates a new user account using the "
+#~ "values specified on the command line plus the default values from the "
+#~ "system. Depending on command line options, the <command>useradd</command> "
+#~ "command will update system files and may also create the new user's home "
+#~ "directory and copy initial files."
+#~ msgstr ""
+#~ "Quand elle est invoquée sans l'option <option>-D</option>, la commande "
+#~ "<command>useradd</command> crée un nouveau compte utilisateur qui utilise "
+#~ "les valeurs indiquées sur la ligne de commande et les valeurs par défaut "
+#~ "du système. En fonction des options de la ligne de commande, la commande "
+#~ "<command>useradd</command> fera la mise à jour des fichiers du système, "
+#~ "elle pourra créer le répertoire personnel et copier les fichiers initiaux."
+
+#~ msgid ""
+#~ "By default, a group will also be created for the new user (see <option>-"
+#~ "g</option>, <option>-N</option>, <option>-U</option>, and "
+#~ "<option>USERGROUPS_ENAB</option>)."
+#~ msgstr ""
+#~ "Par défaut, un groupe sera également créé pour le nouvel utilisateur "
+#~ "(voir <option>-g</option>, <option>-N</option>, <option>-U</option>, et "
+#~ "<option>USERGROUPS_ENAB</option>)"
+
+#~ msgid ""
+#~ "The options which apply to the <command>useradd</command> command are:"
+#~ msgstr ""
+#~ "Les options disponibles pour la commande <command>useradd</command> sont :"
+
+#~| msgid ""
+#~| "<option>-b</option>, <option>--base-dir</option><replaceable>BASE_DIR</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-b</option>, <option>--base-dir</option>&nbsp;"
+#~ "<replaceable>BASE_DIR</replaceable>"
+#~ msgstr ""
+#~ "<option>-b</option>, <option>--base-dir</option>&nbsp;"
+#~ "<replaceable>RÉP_BASE</replaceable>"
+
+#~| msgid ""
+#~| "The default base directory for the system if <option>-d</"
+#~| "option><replaceable>HOME_DIR</replaceable> is not specified. "
+#~| "<replaceable>BASE_DIR</replaceable> is concatenated with the account "
+#~| "name to define the home directory. If the <option>-m</option> option is "
+#~| "not used, <replaceable>BASE_DIR</replaceable> must exist."
+#~ msgid ""
+#~ "The default base directory for the system if <option>-d</option>&nbsp;"
+#~ "<replaceable>HOME_DIR</replaceable> is not specified. "
+#~ "<replaceable>BASE_DIR</replaceable> is concatenated with the account name "
+#~ "to define the home directory. If the <option>-m</option> option is not "
+#~ "used, <replaceable>BASE_DIR</replaceable> must exist."
+#~ msgstr ""
+#~ "Répertoire de base par défaut du système si l'option <option>-d</"
+#~ "option>&nbsp;<replaceable>RÉP_PERSO</replaceable> n'est pas spécifiée. "
+#~ "<replaceable>RÉP_BASE</replaceable> est concaténé avec le nom du compte "
+#~ "pour définir le répertoire personnel. Quand l'option <option>-m</option> "
+#~ "n'est pas utilisée, <replaceable>RÉP_BASE</replaceable> doit exister."
+
+#~ msgid ""
+#~ "If this option is not specified, <command>useradd</command> will use the "
+#~ "base directory specified by the <option>HOME</option> variable in "
+#~ "<filename>/etc/default/useradd</filename>, or <filename>/home</filename> "
+#~ "by default."
+#~ msgstr ""
+#~ "Si cette option n'est pas précisée, <command>useradd</command> utilisera "
+#~ "le répertoire de base précisé par la variable <option>HOME</option> dans "
+#~ "<filename>/etc/default/useradd</filename> ou <filename>/home</filename> "
+#~ "par défaut."
+
+#~ msgid ""
+#~ "Any text string. It is generally a short description of the login, and is "
+#~ "currently used as the field for the user's full name."
+#~ msgstr ""
+#~ "Toute chaîne de texte. C'est généralement une description courte du "
+#~ "compte, elle est actuellement utilisée comme champ pour le nom complet de "
+#~ "l'utilisateur."
+
+#~| msgid ""
+#~| "<option>-d</option>, <option>--home</option><replaceable>HOME_DIR</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-d</option>, <option>--home-dir</option>&nbsp;"
+#~ "<replaceable>HOME_DIR</replaceable>"
+#~ msgstr ""
+#~ "<option>-d</option>, <option>--home</option>&nbsp;<replaceable>RÉP_PERSO</"
+#~ "replaceable>"
+
+#~ msgid ""
+#~ "The new user will be created using <replaceable>HOME_DIR</replaceable> as "
+#~ "the value for the user's login directory. The default is to append the "
+#~ "<replaceable>LOGIN</replaceable> name to <replaceable>BASE_DIR</"
+#~ "replaceable> and use that as the login directory name. The directory "
+#~ "<replaceable>HOME_DIR</replaceable> does not have to exist but will not "
+#~ "be created if it is missing."
+#~ msgstr ""
+#~ "Le nouvel utilisateur sera créé en utilisant <replaceable>RÉP_PERSO</"
+#~ "replaceable> comme valeur de répertoire de connexion de l'utilisateur. Le "
+#~ "comportement par défaut est de concaténer <replaceable>UTILISATEUR</"
+#~ "replaceable> au répertoire <replaceable>RÉP_BASE</replaceable>, et de "
+#~ "l'utiliser en tant que nom de répertoire de connexion. Il n'est pas "
+#~ "nécessaire que le répertoire <replaceable>RÉP_PERSO</replaceable> existe "
+#~ "mais il ne sera pas créé s'il n'existe pas."
+
+#~ msgid "<option>-D</option>, <option>--defaults</option>"
+#~ msgstr "<option>-D</option>, <option>--defaults</option>"
+
+#~ msgid "See below, the subsection \"Changing the default values\"."
+#~ msgstr ""
+#~ "Consultez ci-dessous la sous-section « Modifier les valeurs par défaut »."
+
+#~ msgid ""
+#~ "If not specified, <command>useradd</command> will use the default expiry "
+#~ "date specified by the <option>EXPIRE</option> variable in <filename>/etc/"
+#~ "default/useradd</filename>, or an empty string (no expiry) by default."
+#~ msgstr ""
+#~ "Si non précisé, <command>useradd</command> utilisera la date d'expiration "
+#~ "par défaut précisée par la variable <option>EXPIRE</option> dans "
+#~ "<filename>/etc/default/useradd</filename> ou une chaîne vide (pas "
+#~ "d'expiration) par défaut."
+
+#~ msgid ""
+#~ "The number of days after a password expires until the account is "
+#~ "permanently disabled. A value of 0 disables the account as soon as the "
+#~ "password has expired, and a value of -1 disables the feature."
+#~ msgstr ""
+#~ "Nombre de jours suivant la fin de validité d'un mot de passe après lequel "
+#~ "le compte est définitivement désactivé. Une valeur de 0 désactive le "
+#~ "compte dès que le mot de passe a dépassé sa fin de validité, et une "
+#~ "valeur de -1 désactive cette fonctionnalité."
+
+#~ msgid ""
+#~ "If not specified, <command>useradd</command> will use the default "
+#~ "inactivity period specified by the <option>INACTIVE</option> variable in "
+#~ "<filename>/etc/default/useradd</filename>, or -1 by default."
+#~ msgstr ""
+#~ "Si non précisé, <command>useradd</command> utilisera la période "
+#~ "d'inactivité par défaut précisée par la variable <option>INACTIVE</"
+#~ "option> dans <filename>/etc/default/useradd</filename>, ou -1 par défaut."
+
+#~ msgid ""
+#~ "The group name or number of the user's initial login group. The group "
+#~ "name must exist. A group number must refer to an already existing group."
+#~ msgstr ""
+#~ "Nom du groupe ou identifiant numérique du groupe de connexion initial de "
+#~ "l'utilisateur. Le nom du groupe doit exister. Un numéro de groupe doit se "
+#~ "référer à un groupe déjà existant."
+
+#~ msgid ""
+#~ "If not specified, the behavior of <command>useradd</command> will depend "
+#~ "on the <option>USERGROUPS_ENAB</option> variable in <filename>/etc/login."
+#~ "defs</filename>. If this variable is set to <replaceable>yes</"
+#~ "replaceable> (or <option>-U/--user-group</option> is specified on the "
+#~ "command line), a group will be created for the user, with the same name "
+#~ "as her loginname. If the variable is set to <replaceable>no</replaceable> "
+#~ "(or <option>-N/--no-user-group</option> is specified on the command "
+#~ "line), useradd will set the primary group of the new user to the value "
+#~ "specified by the <option>GROUP</option> variable in <filename>/etc/"
+#~ "default/useradd</filename>, or 100 by default."
+#~ msgstr ""
+#~ "Si non précisé, le comportement de <command>useradd</command> dépendra de "
+#~ "la variable <option>USERGROUPS_ENAB</option> dans <filename>/etc/login."
+#~ "defs</filename>. Si cette variable est configurée à <replaceable>yes</"
+#~ "replaceable> (ou si <option>-U/--user-group</option> est précisée sur la "
+#~ "ligne de commandes), un groupe sera créé pour l'utilisateur, avec le même "
+#~ "nom que son identifiant. Si la variable est configurée à <replaceable>no</"
+#~ "replaceable> (ou si <option>-N/--no-user-group</option> est précisé sur "
+#~ "la ligne de commandes), useradd configurera le groupe primaire du nouvel "
+#~ "utilisateur à la valeur précisée par la variable <option>GROUP</option> "
+#~ "dans <filename>/etc/default/useradd</filename>, ou 100 par défaut."
+
+#~ msgid ""
+#~ "A list of supplementary groups which the user is also a member of. Each "
+#~ "group is separated from the next by a comma, with no intervening "
+#~ "whitespace. The groups are subject to the same restrictions as the group "
+#~ "given with the <option>-g</option> option. The default is for the user to "
+#~ "belong only to the initial group."
+#~ msgstr ""
+#~ "Liste de groupes supplémentaires auxquels appartient également "
+#~ "l'utilisateur. Chaque groupe est séparé du suivant par une virgule, sans "
+#~ "espace entre eux. Les groupes sont soumis aux mêmes restrictions que "
+#~ "celles de l'option <option>-g</option>. Le comportement par défaut pour "
+#~ "l'utilisateur est de n'appartenir qu'au groupe initial."
+
+#~| msgid ""
+#~| "<option>-k</option>, <option>--skel</option><replaceable>SKEL_DIR</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-k</option>, <option>--skel</option>&nbsp;<replaceable>SKEL_DIR</"
+#~ "replaceable>"
+#~ msgstr ""
+#~ "<option>-k</option>, <option>--skel</option>&nbsp;"
+#~ "<replaceable>RÉP_SQUELETTE</replaceable>"
+
+#~ msgid ""
+#~ "The skeleton directory, which contains files and directories to be copied "
+#~ "in the user's home directory, when the home directory is created by "
+#~ "<command>useradd</command>."
+#~ msgstr ""
+#~ "Le répertoire squelette, qui contient les fichiers et répertoires qui "
+#~ "seront copiés dans le répertoire personnel de l'utilisateur, quand le "
+#~ "répertoire personnel est créé par <command>useradd</command>."
+
+#~ msgid ""
+#~ "This option is only valid if the <option>-m</option> (or <option>--create-"
+#~ "home</option>) option is specified."
+#~ msgstr ""
+#~ "Cette option n'est valable que si l'option <option>-m</option> (ou "
+#~ "<option>--create-home</option>) est utilisée."
+
+#~ msgid ""
+#~ "If this option is not set, the skeleton directory is defined by the "
+#~ "<option>SKEL</option> variable in <filename>/etc/default/useradd</"
+#~ "filename> or, by default, <filename>/etc/skel</filename>."
+#~ msgstr ""
+#~ "Si cette option n'est pas précisée, le répertoire squelette est défini "
+#~ "par la variable <option>SKEL</option> dans <filename>/etc/default/"
+#~ "useradd</filename> ou, par défaut, <filename>/etc/skel</filename>."
+
+#~ msgid "If possible, the ACLs and extended attributes are copied."
+#~ msgstr "Si possible, les ACL et les attributs étendus seront copiés."
+
+#~| msgid ""
+#~| "<option>-K</option>, <option>--key</option><replaceable>KEY</"
+#~| "replaceable>=<replaceable>VALUE</replaceable>"
+#~ msgid ""
+#~ "<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
+#~ "replaceable>=<replaceable>VALUE</replaceable>"
+#~ msgstr ""
+#~ "<option>-K</option>, <option>--key</option>&nbsp;<replaceable>CLÉ</"
+#~ "replaceable>=<replaceable>VALEUR</replaceable>"
+
+#~| msgid ""
+#~| "Overrides <filename>/etc/login.defs</filename> defaults "
+#~| "(<option>UID_MIN</option>, <option>UID_MAX</option>, <option>UMASK</"
+#~| "option>, <option>PASS_MAX_DAYS</option> and others). <placeholder-1/> "
+#~| "Example: <option>-K </option><replaceable>PASS_MAX_DAYS</"
+#~| "replaceable>=<replaceable>-1</replaceable> can be used when creating "
+#~| "system account to turn off password ageing, even though system account "
+#~| "has no password at all. Multiple <option>-K</option> options can be "
+#~| "specified, e.g.: <option>-K </option><replaceable>UID_MIN</"
+#~| "replaceable>=<replaceable>100</replaceable><option>-K </"
+#~| "option><replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>"
+#~ msgid ""
+#~ "Overrides <filename>/etc/login.defs</filename> defaults (<option>UID_MIN</"
+#~ "option>, <option>UID_MAX</option>, <option>UMASK</option>, "
+#~ "<option>PASS_MAX_DAYS</option> and others). <placeholder-1/> Example: "
+#~ "<option>-K</option>&nbsp;<replaceable>PASS_MAX_DAYS</"
+#~ "replaceable>=<replaceable>-1</replaceable> can be used when creating "
+#~ "system account to turn off password ageing, even though system account "
+#~ "has no password at all. Multiple <option>-K</option> options can be "
+#~ "specified, e.g.: <option>-K</option>&nbsp;<replaceable>UID_MIN</"
+#~ "replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+#~ "<replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>"
+#~ msgstr ""
+#~ "Overrides <filename>/etc/login.defs</filename> defaults (<option>UID_MIN</"
+#~ "option>, <option>UID_MAX</option>, <option>UMASK</option>, "
+#~ "<option>PASS_MAX_DAYS</option> and others). <placeholder-1/> Example: "
+#~ "<option>-K</option>&nbsp;<replaceable>PASS_MAX_DAYS</"
+#~ "replaceable>=<replaceable>-1</replaceable> peut être utilisé pour la "
+#~ "création de comptes système pour désactiver la gestion de la durée de "
+#~ "validité des mots de passe, même si les comptes système n'ont pas de mot "
+#~ "de passe. Plusieurs options <option>-K</option> peuvent être précisées, "
+#~ "comme par exemple : <option>-K</option>&nbsp;<replaceable>UID_MIN</"
+#~ "replaceable>=<replaceable>100</replaceable> <option>-K</option>&nbsp;"
+#~ "<replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>"
+
+#~ msgid "<option>-l</option>, <option>--no-log-init</option>"
+#~ msgstr "<option>-l</option>, <option>--no-log-init</option>"
+
+#~ msgid ""
+#~ "By default, the user's entries in the lastlog and faillog databases are "
+#~ "resetted to avoid reusing the entry from a previously deleted user."
+#~ msgstr ""
+#~ "Par défaut, les entrées de l'utilisateur dans les bases de données "
+#~ "lastlog et faillog sont remises à zéro pour éviter de réutiliser les "
+#~ "entrées d'un utilisateur précédemment supprimé."
+
+#~ msgid "<option>-m</option>, <option>--create-home</option>"
+#~ msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#~ msgid ""
+#~ "Create the user's home directory if it does not exist. The files and "
+#~ "directories contained in the skeleton directory (which can be defined "
+#~ "with the <option>-k</option> option) will be copied to the home directory."
+#~ msgstr ""
+#~ "Créé le répertoire personnel de l'utilisateur s'il n'existe pas. Les "
+#~ "fichiers et les répertoires contenus dans le répertoire squelette (qui "
+#~ "peut être défini avec l'option <option>-k</option>) sera copié dans le "
+#~ "répertoire personnel."
+
+#~ msgid ""
+#~ "By default, if this option is not specified and <option>CREATE_HOME</"
+#~ "option> is not enabled, no home directories are created."
+#~ msgstr ""
+#~ "Par défaut, si cette option n'est pas précisée et si <option>CREATE_HOME</"
+#~ "option> n'est pas activée, aucun répertoire personnel ne sera créé."
+
+#~ msgid "-M"
+#~ msgstr "-M"
+
+#~ msgid ""
+#~ "Do no create the user's home directory, even if the system wide setting "
+#~ "from <filename>/etc/login.defs</filename> (<option>CREATE_HOME</option>) "
+#~ "is set to <replaceable>yes</replaceable>."
+#~ msgstr ""
+#~ "Ne crée pas le répertoire personnel de l'utilisateur, même si la "
+#~ "configuration globale au système contenue dans <filename>/etc/login.defs</"
+#~ "filename> (<option>CREATE_HOME</option>) est configurée à "
+#~ "<replaceable>yes</replaceable>."
+
+#~ msgid "<option>-N</option>, <option>--no-user-group</option>"
+#~ msgstr "<option>-N</option>, <option>--no-user-group</option>"
+
+#~ msgid ""
+#~ "Do not create a group with the same name as the user, but add the user to "
+#~ "the group specified by the <option>-g</option> option or by the "
+#~ "<option>GROUP</option> variable in <filename>/etc/default/useradd</"
+#~ "filename>."
+#~ msgstr ""
+#~ "Ne crée pas de groupe avec le même nom que celui de l'utilisateur, mais "
+#~ "ajoute l'utilisateur au groupe précisé par l'option <option>-g</option> "
+#~ "ou par la variable <option>GROUP</option> dans <filename>/etc/default/"
+#~ "useradd</filename>."
+
+#~ msgid ""
+#~ "The default behavior (if the <option>-g</option>, <option>-N</option>, "
+#~ "and <option>-U</option> options are not specified) is defined by the "
+#~ "<option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+#~ "filename>."
+#~ msgstr ""
+#~ "Le comportement par défaut (si les options <option>-g</option>, <option>-"
+#~ "N</option>, et <option>-U</option> ne sont pas précisées) est défini par "
+#~ "la variable <option>USERGROUPS_ENAB</option> dans <filename>/etc/login."
+#~ "defs</filename>."
+
+#~ msgid ""
+#~ "Allow the creation of a user account with a duplicate (non-unique) UID."
+#~ msgstr ""
+#~ "Permet de créer un compte d'utilisateur avec un identifiant (« UID ») "
+#~ "dupliqué (non unique)."
+
+#~ msgid ""
+#~ "This option is only valid in combination with the <option>-u</option> "
+#~ "option."
+#~ msgstr "Cette option n'est valable qu'avec l'option <option>-u</option>."
+
+#~ msgid ""
+#~ "The encrypted password, as returned by "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>. The default is to disable the password."
+#~ msgstr ""
+#~ "Le mot de passe chiffré, comme renvoyé par "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>. Le comportement par défaut est de désactiver "
+#~ "le mot de passe."
+
+#~ msgid "<option>-r</option>, <option>--system</option>"
+#~ msgstr "<option>-r</option>, <option>--system</option>"
+
+#~ msgid "Create a system account."
+#~ msgstr "Créer un compte système."
+
+#~ msgid ""
+#~ "System users will be created with no aging information in <filename>/etc/"
+#~ "shadow</filename>, and their numeric identifiers are chosen in the "
+#~ "<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined "
+#~ "in <filename>/etc/login.defs</filename>, instead of <option>UID_MIN</"
+#~ "option>-<option>UID_MAX</option> (and their <option>GID</option> "
+#~ "counterparts for the creation of groups)."
+#~ msgstr ""
+#~ "Les utilisateurs système seront créés sans information d'expiration dans "
+#~ "<filename>/etc/shadow</filename>, et leur identifiant numérique est "
+#~ "choisi dans l'intervalle <option>SYS_UID_MIN</option>-"
+#~ "<option>SYS_UID_MAX</option>, défini dans <filename>/etc/login.defs</"
+#~ "filename>, au lieu de <option>UID_MIN</option>-<option>UID_MAX</option> "
+#~ "(et leurs équivalents <option>GID</option> pour la création des groupes)."
+
+#~ msgid ""
+#~ "Note that <command>useradd</command> will not create a home directory for "
+#~ "such an user, regardless of the default setting in <filename>/etc/login."
+#~ "defs</filename> (<option>CREATE_HOME</option>). You have to specify the "
+#~ "<option>-m</option> options if you want a home directory for a system "
+#~ "account to be created."
+#~ msgstr ""
+#~ "Notez que <command>useradd</command> ne créera pas de répertoire "
+#~ "personnel pour ces utilisateurs, indépendamment de la configuration par "
+#~ "défaut dans <filename>/etc/login.defs</filename> (<option>CREATE_HOME</"
+#~ "option>). Vous devez préciser l'option <option>-m</option> si vous voulez "
+#~ "qu'un répertoire personnel soit créé pour un compte système."
+
+#~ msgid ""
+#~ "The name of the user's login shell. The default is to leave this field "
+#~ "blank, which causes the system to select the default login shell "
+#~ "specified by the <option>SHELL</option> variable in <filename>/etc/"
+#~ "default/useradd</filename>, or an empty string by default."
+#~ msgstr ""
+#~ "Le nom de l'interpréteur de commandes initial de l'utilisateur (« login "
+#~ "shell »). Le comportement par défaut est de laisser ce champ vide. Le "
+#~ "système sélectionnera alors l'interpréteur par défaut indiqué par la "
+#~ "variable <option>SHELL</option> dans <filename>/etc/default/useradd</"
+#~ "filename>, ou une chaîne vide par défaut."
+
+#~ msgid ""
+#~ "The numerical value of the user's ID. This value must be unique, unless "
+#~ "the <option>-o</option> option is used. The value must be non-negative. "
+#~ "The default is to use the smallest ID value greater than or equal to "
+#~ "<option>UID_MIN</option> and greater than every other user."
+#~ msgstr ""
+#~ "La valeur numérique de l'identifiant de l'utilisateur. Cette valeur doit "
+#~ "être unique, sauf si l'option <option>-o</option> est utilisée. La valeur "
+#~ "ne doit pas être négative. Le comportement par défaut est d'utiliser la "
+#~ "plus petite valeur d'identifiant à la fois supérieure ou égale à "
+#~ "<option>UID_MIN</option> et supérieure aux identifiants de tous les "
+#~ "autres utilisateurs."
+
+#~ msgid ""
+#~ "See also the <option>-r</option> option and the <option>UID_MAX</option> "
+#~ "description."
+#~ msgstr ""
+#~ "Voir aussi aussi l'option <option>-r</option> et la description de "
+#~ "<option>UID_MAX</option>."
+
+#~ msgid "<option>-U</option>, <option>--user-group</option>"
+#~ msgstr "<option>-U</option>, <option>--user-group</option>"
+
+#~ msgid ""
+#~ "Create a group with the same name as the user, and add the user to this "
+#~ "group."
+#~ msgstr ""
+#~ "Crée un groupe avec le même nom que celui de l'utilisateur, et ajoute "
+#~ "l'utilisateur à ce groupe."
+
+#~ msgid ""
+#~ "The SELinux user for the user's login. The default is to leave this field "
+#~ "blank, which causes the system to select the default SELinux user."
+#~ msgstr ""
+#~ "L'utilisateur SELinux utilisé pour la connexion de l'utilisateur. Le "
+#~ "comportement par défaut est de laisser ce champ vide. Le système "
+#~ "sélectionnera alors l'utilisateur SELinux par défaut."
+
+#~ msgid "Changing the default values"
+#~ msgstr "Modifier les valeurs par défaut"
+
+#~ msgid ""
+#~ "When invoked with only the <option>-D</option> option, <command>useradd</"
+#~ "command> will display the current default values. When invoked with "
+#~ "<option>-D</option> plus other options, <command>useradd</command> will "
+#~ "update the default values for the specified options. Valid default-"
+#~ "changing options are:"
+#~ msgstr ""
+#~ "Quand il est invoqué avec seulement l'option <option>-D</option>, "
+#~ "<command>useradd</command> affichera les valeurs actuelles par défaut. "
+#~ "Quand il est invoqué avec l'option <option>-D</option> et d'autres "
+#~ "options, <command>useradd</command> mettra à jour les valeurs par défaut "
+#~ "des options précisées. Les options valables sont :"
+
+#~ msgid ""
+#~ "The path prefix for a new user's home directory. The user's name will be "
+#~ "affixed to the end of <replaceable>BASE_DIR</replaceable> to form the new "
+#~ "user's home directory name, if the <option>-d</option> option is not used "
+#~ "when creating a new account."
+#~ msgstr ""
+#~ "Préfixe du chemin des répertoires personnels pour les nouveaux "
+#~ "utilisateurs. Le nom de l'utilisateur sera attaché à la fin de "
+#~ "<replaceable>RÉP_PERSO</replaceable> pour créer le nom du nouveau "
+#~ "répertoire personnel si l'option <option>-d</option> n'est pas utilisée "
+#~ "pendant la création d'un nouveau compte."
+
+#~ msgid ""
+#~ "This option sets the <option>HOME</option> variable in <filename>/etc/"
+#~ "default/useradd</filename>."
+#~ msgstr ""
+#~ "Cette option configure la variable <option>HOME</option> dans <filename>/"
+#~ "etc/default/useradd</filename>."
+
+#~ msgid "The date on which the user account is disabled."
+#~ msgstr "Date à laquelle le compte utilisateur sera désactivé."
+
+#~ msgid ""
+#~ "This option sets the <option>EXPIRE</option> variable in <filename>/etc/"
+#~ "default/useradd</filename>."
+#~ msgstr ""
+#~ "Cette option configure la variable <option>EXPIRE</option> dans "
+#~ "<filename>/etc/default/useradd</filename>."
+
+#~ msgid ""
+#~ "The number of days after a password has expired before the account will "
+#~ "be disabled."
+#~ msgstr ""
+#~ "Nombre de jours après la fin de validité d'un mot de passe avant que le "
+#~ "compte ne soit désactivé."
+
+#~ msgid ""
+#~ "This option sets the <option>INACTIVE</option> variable in <filename>/etc/"
+#~ "default/useradd</filename>."
+#~ msgstr ""
+#~ "Cette option configure la variable <option>INACTIVE</option> dans "
+#~ "<filename>/etc/default/useradd</filename>."
+
+#~ msgid ""
+#~ "The group name or ID for a new user's initial group (when the <option>-"
+#~ "N/--no-user-group</option> is used or when the <option>USERGROUPS_ENAB</"
+#~ "option> variable is set to <replaceable>no</replaceable> in <filename>/"
+#~ "etc/login.defs</filename>). The named group must exist, and a numerical "
+#~ "group ID must have an existing entry."
+#~ msgstr ""
+#~ "Le nom ou l'identifiant du groupe pour le groupe principal d'un nouvel "
+#~ "utilisateur (quand l'option <option>-N/--no-user-group</option> est "
+#~ "utilisée ou quand la variable <option>USERGROUPS_ENAB</option> est "
+#~ "configurée à <replaceable>no</replaceable> dans <filename>/etc/login."
+#~ "defs</filename>). Le nom du groupe doit exister, et un identifiant de "
+#~ "groupe numérique doit avoir une entrée existante."
+
+#~ msgid ""
+#~ "This option sets the <option>GROUP</option> variable in <filename>/etc/"
+#~ "default/useradd</filename>."
+#~ msgstr ""
+#~ "Cette option configure la variable <option>GROUP</option> dans <filename>/"
+#~ "etc/default/useradd</filename>."
+
+#~ msgid "The name of a new user's login shell."
+#~ msgstr "Le nom de l'interpréteur de commandes du nouvel utilisateur."
+
+#~ msgid ""
+#~ "This option sets the <option>SHELL</option> variable in <filename>/etc/"
+#~ "default/useradd</filename>."
+#~ msgstr ""
+#~ "Cette option configure la variable <option>SHELL</option> dans <filename>/"
+#~ "etc/default/useradd</filename>."
+
+#~ msgid "NOTES"
+#~ msgstr "NOTES"
+
+#~ msgid ""
+#~ "The system administrator is responsible for placing the default user "
+#~ "files in the <filename>/etc/skel/</filename> directory (or any other "
+#~ "skeleton directory specified in <filename>/etc/default/useradd</filename> "
+#~ "or on the command line)."
+#~ msgstr ""
+#~ "L'administrateur système doit se charger de placer les fichiers par "
+#~ "défaut dans le répertoire <filename>/etc/skel</filename> (ou tout autre "
+#~ "répertoire de modèles indiqué dans <filename>/etc/default/useradd</"
+#~ "filename> ou sur la ligne de commande)."
+
+#~ msgid ""
+#~ "You may not add a user to a NIS or LDAP group. This must be performed on "
+#~ "the corresponding server."
+#~ msgstr ""
+#~ "Vous ne pouvez pas ajouter d'utilisateur à un groupe NIS ou LDAP. Cela "
+#~ "doit être effectué sur le serveur correspondant."
+
+#~ msgid ""
+#~ "Similarly, if the username already exists in an external user database "
+#~ "such as NIS or LDAP, <command>useradd</command> will deny the user "
+#~ "account creation request."
+#~ msgstr ""
+#~ "De la même façon, si le nom de l'utilisateur existe dans une base de "
+#~ "données externe, telle que NIS ou LDAP, <command>useradd</command> "
+#~ "refusera de créer le compte d'utilisateur."
+
+#~ msgid ""
+#~ "Usernames must start with a lower case letter or an underscore, followed "
+#~ "by lower case letters, digits, underscores, or dashes. They can end with "
+#~ "a dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+#~ msgstr ""
+#~ "Les noms d'utilisateur doivent commencer par une lettre minuscule ou un "
+#~ "tiret bas (« underscore »), et seuls des lettres minuscules, des "
+#~ "chiffres, des « underscore », ou des tirets peuvent suivre. Ils peuvent "
+#~ "se terminer par un signe dollar. Soit, sous la forme d'une expression "
+#~ "rationnelle : [a-z_][a-z0-9_-]*[$]?"
+
+#~ msgid "Usernames may only be up to 32 characters long."
+#~ msgstr "Les noms d'utilisateur sont limités à 16 caractères."
+
+#~ msgid "<option>CREATE_HOME</option> (boolean)"
+#~ msgstr "<option>CREATE_HOME</option> (boolean)"
+
+#~ msgid ""
+#~ "Indicate if a home directory should be created by default for new users."
+#~ msgstr ""
+#~ "Indiquer si un répertoire personnel doit être créé par défaut pour les "
+#~ "nouveaux utilisateurs."
+
+#~ msgid ""
+#~ "This setting does not apply to system users, and can be overridden on the "
+#~ "command line."
+#~ msgstr ""
+#~ "Ce réglage ne s'applique pas pour les utilisateurs système, et peut être "
+#~ "annulé sur la ligne de commande."
+
+#~ msgid "<option>GID_MAX</option> (number)"
+#~ msgstr "<option>GID_MAX</option> (nombre)"
+
+#~ msgid "<option>GID_MIN</option> (number)"
+#~ msgstr "<option>GID_MIN</option> (nombre)"
+
+#~ msgid ""
+#~ "Range of group IDs used for the creation of regular groups by "
+#~ "<command>useradd</command>, <command>groupadd</command>, or "
+#~ "<command>newusers</command>."
+#~ msgstr ""
+#~ "Plage d'identifiants numériques de groupes que les commandes "
+#~ "<command>useradd</command>, <command>groupadd</command> ou "
+#~ "<command>newusers</command> peuvent utiliser pour la création des groupes "
+#~ "normaux."
+
+#~ msgid ""
+#~ "The default value for <option>GID_MIN</option> (resp. <option>GID_MAX</"
+#~ "option>) is 1000 (resp. 60000)."
+#~ msgstr ""
+#~ "La valeur par défaut pour <option>GID_MIN</option> (respectivement "
+#~ "<option>GID_MAX</option>) est 1000 (respectivement 60000)."
+
+#~ msgid "<option>PASS_MAX_DAYS</option> (number)"
+#~ msgstr "<option>PASS_MAX_DAYS</option> (nombre)"
+
+#~ msgid ""
+#~ "The maximum number of days a password may be used. If the password is "
+#~ "older than this, a password change will be forced. If not specified, -1 "
+#~ "will be assumed (which disables the restriction)."
+#~ msgstr ""
+#~ "Nombre maximum de jours de validité d'un mot de passe. Après cette durée, "
+#~ "une modification du mot de passe est obligatoire. S'il n'est pas précisé, "
+#~ "la valeur de -1 est utilisée (ce qui enlève toute restriction)."
+
+#~ msgid "<option>PASS_MIN_DAYS</option> (number)"
+#~ msgstr "<option>PASS_MIN_DAYS</option> (nombre)"
+
+#~ msgid ""
+#~ "The minimum number of days allowed between password changes. Any password "
+#~ "changes attempted sooner than this will be rejected. If not specified, -1 "
+#~ "will be assumed (which disables the restriction)."
+#~ msgstr ""
+#~ "Nombre minimum de jours autorisé avant la modification d'un mot de passe. "
+#~ "Toute tentative de modification du mot de passe avant cette durée est "
+#~ "rejetée. S'il n'est pas précisé, la valeur de -1 est utilisée (ce qui "
+#~ "enlève toute restriction)."
+
+#~ msgid "<option>PASS_WARN_AGE</option> (number)"
+#~ msgstr "<option>PASS_WARN_AGE</option> (nombre)"
+
+#~ msgid ""
+#~ "The number of days warning given before a password expires. A zero means "
+#~ "warning is given only upon the day of expiration, a negative value means "
+#~ "no warning is given. If not specified, no warning will be provided."
+#~ msgstr ""
+#~ "Nombre de jours durant lesquels l'utilisateur recevra un avertissement "
+#~ "avant que son mot de passe n'arrive en fin de validité. Une valeur "
+#~ "négative signifie qu'aucun avertissement n'est donné. S'il n'est pas "
+#~ "précisé, aucun avertissement n'est donné."
+
+#~ msgid "<option>SYS_GID_MAX</option> (number)"
+#~ msgstr "<option>SYS_GID_MAX</option> (nombre)"
+
+#~ msgid "<option>SYS_GID_MIN</option> (number)"
+#~ msgstr "<option>SYS_GID_MIN</option> (nombre)"
+
+#~ msgid ""
+#~ "Range of group IDs used for the creation of system groups by "
+#~ "<command>useradd</command>, <command>groupadd</command>, or "
+#~ "<command>newusers</command>."
+#~ msgstr ""
+#~ "Plage d'identifiants numériques de groupes que les commandes "
+#~ "<command>useradd</command>, <command>groupadd</command> ou "
+#~ "<command>newusers</command> peuvent utiliser pour la création de groupes "
+#~ "système."
+
+#~ msgid ""
+#~ "The default value for <option>SYS_GID_MIN</option> (resp. "
+#~ "<option>SYS_GID_MAX</option>) is 101 (resp. <option>GID_MIN</option>-1)."
+#~ msgstr ""
+#~ "La valeur par défaut pour <option>SYS_GID_MIN</option> (respectivement "
+#~ "<option>SYS_GID_MAX</option>) est 101 (respectivement <option>GID_MIN</"
+#~ "option>-1)."
+
+#~ msgid "<option>SYS_UID_MAX</option> (number)"
+#~ msgstr "<option>SYS_UID_MAX</option> (nombre)"
+
+#~ msgid "<option>SYS_UID_MIN</option> (number)"
+#~ msgstr "<option>SYS_UID_MIN</option> (nombre)"
+
+#~ msgid ""
+#~ "Range of user IDs used for the creation of system users by "
+#~ "<command>useradd</command> or <command>newusers</command>."
+#~ msgstr ""
+#~ "Plage d'identifiants numériques d'utilisateurs que les commandes "
+#~ "<command>useradd</command> ou <command>newusers</command> peuvent "
+#~ "utiliser pour la création d'utilisateurs système."
+
+#~ msgid ""
+#~ "The default value for <option>SYS_UID_MIN</option> (resp. "
+#~ "<option>SYS_UID_MAX</option>) is 101 (resp. <option>UID_MIN</option>-1)."
+#~ msgstr ""
+#~ "La valeur par défaut pour <option>SYS_UID_MIN</option> (respectivement "
+#~ "<option>SYS_UID_MAX</option>) est 101 (respectivement <option>UID_MIN</"
+#~ "option>-1)."
+
+#~ msgid "<option>TCB_AUTH_GROUP</option> (boolean)"
+#~ msgstr "<option>TCB_AUTH_GROUP</option> (booléen)"
+
+#~ msgid ""
+#~ "If <replaceable>yes</replaceable>, newly created tcb shadow files will be "
+#~ "group owned by the <replaceable>auth</replaceable> group."
+#~ msgstr ""
+#~ "Si <replaceable>yes</replaceable>, le fichier shadow de tcb nouvellement "
+#~ "créé appartiendra au groupe <replaceable>auth</replaceable>."
+
+#~ msgid "<option>UID_MAX</option> (number)"
+#~ msgstr "<option>UID_MAX</option> (nombre)"
+
+#~ msgid "<option>UID_MIN</option> (number)"
+#~ msgstr "<option>UID_MIN</option> (nombre)"
+
+#~ msgid ""
+#~ "Range of user IDs used for the creation of regular users by "
+#~ "<command>useradd</command> or <command>newusers</command>."
+#~ msgstr ""
+#~ "Plage d'identifiants numériques d'utilisateurs que les commandes "
+#~ "<command>useradd</command> ou <command>newusers</command> peuvent "
+#~ "utiliser pour la création d'utilisateurs normaux."
+
+#~ msgid ""
+#~ "The default value for <option>UID_MIN</option> (resp. <option>UID_MAX</"
+#~ "option>) is 1000 (resp. 60000)."
+#~ msgstr ""
+#~ "La valeur par défaut de <option>UID_MIN</option> (respectivement "
+#~ "<option>UID_MAX</option>) est 1000 (respectivement 60000)."
+
+#~ msgid "<option>UMASK</option> (number)"
+#~ msgstr "<option>UMASK</option> (nombre)"
+
+#~ msgid ""
+#~ "The file mode creation mask is initialized to this value. If not "
+#~ "specified, the mask will be initialized to 022."
+#~ msgstr ""
+#~ "Valeur d'initialisation du masque de permissions. S'il n'est pas précisé, "
+#~ "le masque des permissions sera initialisé à 022."
+
+#~ msgid ""
+#~ "<command>useradd</command> and <command>newusers</command> use this mask "
+#~ "to set the mode of the home directory they create"
+#~ msgstr ""
+#~ "<command>useradd</command> et <command>newusers</command> utilisent ce "
+#~ "masque pour définir les permissions d'accès des répertoires personnels "
+#~ "qu'ils créent."
+
+#~ msgid ""
+#~ "It is also used by <command>login</command> to define users' initial "
+#~ "umask. Note that this mask can be overridden by the user's GECOS line (if "
+#~ "<option>QUOTAS_ENAB</option> is set) or by the specification of a limit "
+#~ "with the <emphasis>K</emphasis> identifier in "
+#~ "<citerefentry><refentrytitle>limits</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "Il est également utilisé par <command>login</command> pour définir "
+#~ "l'umask initial de l'utilisateur. Veuillez noter que cet umask peut être "
+#~ "redéfini par les GECOS de l'utilisateur (si <option>QUOTAS_ENAB</option> "
+#~ "est activé) ou en précisant une limite avec l'identifiant <emphasis>K</"
+#~ "emphasis> dans <citerefentry><refentrytitle>limits</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "It is also used by <command>pam_umask</command> as the default umask "
+#~ "value."
+#~ msgstr ""
+#~ "Il est également utilisé par <command>pam_umask</command> en tant que "
+#~ "valeur d'umask par défaut."
+
+#~ msgid "/etc/default/useradd"
+#~ msgstr "/etc/default/useradd"
+
+#~ msgid "Default values for account creation."
+#~ msgstr "Valeurs par défaut pour la création de comptes."
+
+#~ msgid "/etc/skel/"
+#~ msgstr "/etc/skel/"
+
+#~ msgid "Directory containing default files."
+#~ msgstr "Répertoire contenant les fichiers par défaut."
+
+#~ msgid "3"
+#~ msgstr "3"
+
+#~ msgid "invalid argument to option"
+#~ msgstr "paramètre non valable pour l'option"
+
+#~ msgid "4"
+#~ msgstr "4"
+
+#~ msgid "UID already in use (and no <option>-o</option>)"
+#~ msgstr "UID déjà utilisé (et pas d'option <option>-o</option>)"
+
+#~ msgid "9"
+#~ msgstr "9"
+
+#~ msgid "username already in use"
+#~ msgstr "nom d'utilisateur déjà utilisé"
+
+#~ msgid "14"
+#~ msgstr "14"
+
+#~ msgid ""
+#~ "The <command>useradd</command> command exits with the following values: "
+#~ "<placeholder-1/>"
+#~ msgstr ""
+#~ "La commande <command>useradd</command> retourne les valeurs suivantes en "
+#~ "quittant : <placeholder-1/>"
+
+#~| msgid ""
+#~| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#~| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#~| "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+#~| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~| "<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~| "<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#~| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~| "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~| "manvolnum></citerefentry>."
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <phrase condition=\"subids"
+#~ "\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+#~ "phrase><citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <phrase condition=\"subids"
+#~ "\"><citerefentry><refentrytitle>subgid</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>subuid</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+#~ "phrase><citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid "Creation, 1996"
+#~ msgstr "Création, 1996"
+
+#~ msgid "suauth"
+#~ msgstr "suauth"
+
+#~ msgid "5"
+#~ msgstr "5"
+
+#~ msgid "File Formats and Conversions"
+#~ msgstr "Formats et conversions de fichiers"
+
+#~ msgid "detailed su control file"
+#~ msgstr "Fichier de contrôle détaillé de su"
+
+#~ msgid "/etc/suauth"
+#~ msgstr "/etc/suauth"
+
+#~ msgid ""
+#~ "The file <filename>/etc/suauth</filename> is referenced whenever the su "
+#~ "command is called. It can change the behaviour of the su command, based "
+#~ "upon:"
+#~ msgstr ""
+#~ "Le fichier <filename>/etc/suauth</filename> est lu chaque fois que su est "
+#~ "exécuté. Il permet de modifier le comportement de la commande su, en "
+#~ "fonction de :"
+
+#~ msgid ""
+#~ "\n"
+#~ " 1) the user su is targetting\n"
+#~ " "
+#~ msgstr ""
+#~ "\n"
+#~ " 1) l'utilisateur cible de su\n"
+#~ " "
+
+#~ msgid ""
+#~ "2) the user executing the su command (or any groups he might be a member "
+#~ "of)"
+#~ msgstr ""
+#~ "2) l'utilisateur qui exécute la commande su (ou un groupe dont il est "
+#~ "membre)"
+
+#~ msgid ""
+#~ "The file is formatted like this, with lines starting with a # being "
+#~ "treated as comment lines and ignored;"
+#~ msgstr ""
+#~ "Le fichier est formaté de la façon suivante (les lignes commençant par un "
+#~ "« # » sont des commentaires, et sont ignorées) :"
+
+#~ msgid ""
+#~ "\n"
+#~ " to-id:from-id:ACTION\n"
+#~ " "
+#~ msgstr ""
+#~ "\n"
+#~ " vers-id:par-id:ACTION\n"
+#~ " "
+
+#~ msgid ""
+#~ "Where to-id is either the word <emphasis>ALL</emphasis>, a list of "
+#~ "usernames delimited by \",\" or the words <emphasis>ALL EXCEPT</emphasis> "
+#~ "followed by a list of usernames delimited by \",\"."
+#~ msgstr ""
+#~ "Où vers-id peut être le mot <emphasis>ALL</emphasis>, une liste de noms "
+#~ "d'utilisateurs séparés par une virgule ou <emphasis>ALL EXCEPT</emphasis> "
+#~ "suivi d'une liste d'utilisateurs séparés par une virgule."
+
+#~ msgid ""
+#~ "from-id is formatted the same as to-id except the extra word "
+#~ "<emphasis>GROUP</emphasis> is recognised. <emphasis>ALL EXCEPT GROUP</"
+#~ "emphasis> is perfectly valid too. Following <emphasis>GROUP</emphasis> "
+#~ "appears one or more group names, delimited by \",\". It is not sufficient "
+#~ "to have primary group id of the relevant group, an entry in "
+#~ "<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry> is neccessary."
+#~ msgstr ""
+#~ "par-id utilise le même format que vers-id, mais accepte également le mot-"
+#~ "clé <emphasis>GROUP</emphasis>. <emphasis>ALL EXCEPT GROUP</emphasis> est "
+#~ "également accepté. <emphasis>GROUP</emphasis> est suivi d'un ou plusieurs "
+#~ "noms de groupes, séparés par une virgule. Il n'est pas suffisant d'avoir "
+#~ "comme groupe primaire le groupe approprié : une entrée dans "
+#~ "<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry> est nécessaire."
+
+#~ msgid "Action can be one only of the following currently supported options."
+#~ msgstr "Les valeurs d'ACTION valables sont :"
+
+#~ msgid "DENY"
+#~ msgstr "DENY"
+
+#~ msgid "The attempt to su is stopped before a password is even asked for."
+#~ msgstr ""
+#~ "La tentative de changement d'utilisateur est arrêtée avant que le mot de "
+#~ "passe ne soit demandé."
+
+#~ msgid "NOPASS"
+#~ msgstr "NOPASS"
+
+#~ msgid ""
+#~ "The attempt to su is automatically successful; no password is asked for."
+#~ msgstr ""
+#~ "La tentative est automatiquement réussie. Aucun mot de passe n'est "
+#~ "demandé."
+
+#~ msgid "OWNPASS"
+#~ msgstr "OWNPASS"
+
+#~ msgid ""
+#~ "For the su command to be successful, the user must enter his or her own "
+#~ "password. They are told this."
+#~ msgstr ""
+#~ "Pour que la commande su soit réussie, l'utilisateur doit entrer son "
+#~ "propre mot de passe. Ceci lui est demandé."
+
+#~ msgid ""
+#~ "Note there are three separate fields delimited by a colon. No whitespace "
+#~ "must surround this colon. Also note that the file is examined "
+#~ "sequentially line by line, and the first applicable rule is used without "
+#~ "examining the file further. This makes it possible for a system "
+#~ "administrator to exercise as fine control as he or she wishes."
+#~ msgstr ""
+#~ "Notez qu'il y a trois champs séparés par un « deux-points ». Ne pas "
+#~ "accoler d'espace à ce « deux-points ». Notez aussi que le fichier est "
+#~ "examiné séquentiellement ligne par ligne, et que la première règle "
+#~ "applicable est utilisée sans que le reste du fichier ne soit examiné. "
+#~ "Ceci permet à l'administrateur système de définir un contrôle aussi fin "
+#~ "qu'il le souhaite."
+
+#~ msgid "EXAMPLE"
+#~ msgstr "EXEMPLE"
+
+#~ msgid ""
+#~ "\n"
+#~ " # sample /etc/suauth file\n"
+#~ " #\n"
+#~ " # A couple of privileged usernames may\n"
+#~ " # su to root with their own password.\n"
+#~ " #\n"
+#~ " root:chris,birddog:OWNPASS\n"
+#~ " #\n"
+#~ " # Anyone else may not su to root unless in\n"
+#~ " # group wheel. This is how BSD does things.\n"
+#~ " #\n"
+#~ " root:ALL EXCEPT GROUP wheel:DENY\n"
+#~ " #\n"
+#~ " # Perhaps terry and birddog are accounts\n"
+#~ " # owned by the same person.\n"
+#~ " # Access can be arranged between them\n"
+#~ " # with no password.\n"
+#~ " #\n"
+#~ " terry:birddog:NOPASS\n"
+#~ " birddog:terry:NOPASS\n"
+#~ " #\n"
+#~ " "
+#~ msgstr ""
+#~ "\n"
+#~ " # exemple de fichier /etc/suauth\n"
+#~ " #\n"
+#~ " # Deux utilisateurs privilégiés peuvent\n"
+#~ " # devenir root avec leur propre mot de passe.\n"
+#~ " #\n"
+#~ " root:chris,birddog:OWNPASS\n"
+#~ " #\n"
+#~ " # Les autres ne peuvent pas de venir root avec\n"
+#~ " # su, à l'exception des membres du groupe wheel.\n"
+#~ " # Ceci correspond au comportement des BSD.\n"
+#~ " #\n"
+#~ " root:ALL EXCEPT GROUP wheel:DENY\n"
+#~ " #\n"
+#~ " # terry et birddog sont des comptes possédés\n"
+#~ " # par la même personne.\n"
+#~ " # Un accès sans mot passe est aménagé\n"
+#~ " # entre ces deux comptes.\n"
+#~ " #\n"
+#~ " terry:birddog:NOPASS\n"
+#~ " birddog:terry:NOPASS\n"
+#~ " #\n"
+#~ " "
+
+#~ msgid "BUGS"
+#~ msgstr "BOGUES"
+
+#~ msgid ""
+#~ "There could be plenty lurking. The file parser is particularly "
+#~ "unforgiving about syntax errors, expecting no spurious whitespace (apart "
+#~ "from beginning and end of lines), and a specific token delimiting "
+#~ "different things."
+#~ msgstr ""
+#~ "Il en reste sans doute beaucoup. L'analyseur du fichier est "
+#~ "particulièrement impitoyable avec les erreurs de syntaxe. Il n'autorise "
+#~ "d'espace qu'en début et fin de ligne, et seul le délimiteur spécifique "
+#~ "doit être utilisé."
+
+#~ msgid "DIAGNOSTICS"
+#~ msgstr "DIAGNOSTICS"
+
+#~ msgid ""
+#~ "An error parsing the file is reported using "
+#~ "<citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry> as level ERR on facility AUTH."
+#~ msgstr ""
+#~ "Une erreur dans l'analyse du fichier est reportée via "
+#~ "<citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry> au niveau ERR dans la catégorie AUTH."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>."
+
+#~ msgid "Creation, 1989"
+#~ msgstr "Création, 1989"
+
+#~ msgid "su"
+#~ msgstr "su"
+
+#~ msgid "User Commands"
+#~ msgstr "Commandes utilisateur"
+
+#~ msgid "change user ID or become superuser"
+#~ msgstr "Changer d'identifiant d'utilisateur ou devenir superutilisateur"
+
+#~ msgid "username"
+#~ msgstr "nom_utilisateur"
+
+#~ msgid ""
+#~ "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."
+#~ msgstr ""
+#~ "La commande <command>su</command> permet de devenir un autre utilisateur "
+#~ "pour la durée d'une session. Invoqué sans nom d'<option>utilisateur</"
+#~ "option>, le comportement par défaut de <command>su</command>est de "
+#~ "devenir superutilisateur. Le paramètre optionnel <option>-</option> "
+#~ "permet d'obtenir un environnement similaire à celui que l'utilisateur "
+#~ "aurait obtenu lors d'une connexion directe."
+
+#~ msgid ""
+#~ "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."
+#~ msgstr ""
+#~ "Des paramètres supplémentaires peuvent être fournis après le nom de "
+#~ "l'utilisateur. Dans ce cas, ils sont donnés à l'interpréteur de commandes "
+#~ "de connexion de l'utilisateur. En particulier, le paramètre « <option>-c</"
+#~ "option> » considère que le paramètre suivant est une commande pour la "
+#~ "plupart des interpréteurs de commandes. La commande sera exécutée par "
+#~ "l'interpréteur indiqué dans <filename>/etc/passwd</filename> pour "
+#~ "l'utilisateur cible."
+
+#~ msgid ""
+#~ "You can use the <option>--</option> argument to separate <command>su</"
+#~ "command> options from the arguments supplied to the shell."
+#~ msgstr ""
+#~ "Vous pouvez utiliser le paramètre <option>--</option> pour séparer les "
+#~ "options de <command>su</command> des paramètres fournis par "
+#~ "l'interpréteur de commandes."
+
+#~ msgid ""
+#~ "The user will be prompted for a password, if appropriate. Invalid "
+#~ "passwords will produce an error message. All attempts, both valid and "
+#~ "invalid, are logged to detect abuse of the system."
+#~ msgstr ""
+#~ "Un mot de passe sera demandé à l'utilisateur, si nécessaire. Les mots de "
+#~ "passe incorrects produisent un message d'erreur. Toutes les tentatives, "
+#~ "réussies ou non, sont enregistrées afin de détecter tout abus du système."
+
+#~ msgid ""
+#~ "The current environment is passed to the new shell. The value of <envar>"
+#~ "$PATH</envar> is reset to <filename>/bin:/usr/bin</filename> for normal "
+#~ "users, or <filename>/sbin:/bin:/usr/sbin:/usr/bin</filename> for the "
+#~ "superuser. This may be changed with the <option>ENV_PATH</option> and "
+#~ "<option>ENV_SUPATH</option> definitions in <filename>/etc/login.defs</"
+#~ "filename>."
+#~ msgstr ""
+#~ "L'environnement actuel est fourni au nouvel interpréteur de commandes. La "
+#~ "valeur de <envar>$PATH</envar> est réinitialisée à <filename>/bin:/usr/"
+#~ "bin</filename> pour les utilisateurs normaux, ou à <emphasis>/sbin:/bin:/"
+#~ "usr/sbin:/usr/bin</emphasis> pour le superutilisateur. Ce comportement "
+#~ "peut être modifié avec les paramètres <emphasis>ENV_PATH</emphasis> et "
+#~ "<emphasis>ENV_SUPATH</emphasis> dans <filename>/etc/login.defs</"
+#~ "filename>. "
+
+#~ msgid ""
+#~ "A subsystem login is indicated by the presence of a \"*\" as the first "
+#~ "character of the login shell. The given home directory will be used as "
+#~ "the root of a new file system which the user is actually logged into."
+#~ msgstr ""
+#~ "Une connexion à un sous-système est indiquée par la présence d'un « * » "
+#~ "comme premier caractère de l'interpréteur de commandes initial. Le "
+#~ "répertoire personnel sera utilisé comme racine d'un nouveau système de "
+#~ "fichiers dans lequel l'utilisateur sera connecté."
+
+#~ msgid "The options which apply to the <command>su</command> command are:"
+#~ msgstr "Les options applicables à la commande <command>su</command> sont :"
+
+#~| msgid ""
+#~| "<option>-c</option>, <option>--command</option><replaceable>COMMAND</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-c</option>, <option>--command</option>&nbsp;"
+#~ "<replaceable>COMMAND</replaceable>"
+#~ msgstr ""
+#~ "<option>-c</option>, <option>--command</option>&nbsp;"
+#~ "<replaceable>COMMANDE</replaceable>"
+
+#~ msgid ""
+#~ "Specify a command that will be invoked by the shell using its <option>-c</"
+#~ "option>."
+#~ msgstr ""
+#~ "Indiquer une commande qui sera invoquée par l'interpréteur de commandes "
+#~ "en utilisant son option <option>-c</option>"
+
+#~| msgid ""
+#~| "The executed command will have no controlling terminal. This option "
+#~| "cannot be used to execute interractive programs which need a controlling "
+#~| "TTY."
+#~ msgid ""
+#~ "The executed command will have no controlling terminal. This option "
+#~ "cannot be used to execute interactive programs which need a controlling "
+#~ "TTY."
+#~ msgstr ""
+#~ "La commande exécutée n'aura aucun terminal de contrôle. Cette option ne "
+#~ "peut pas être utilisée pour exécuter des programmes interactifs qui ont "
+#~ "besoin d'un terminal de contrôle."
+
+#~ msgid "<option>-</option>, <option>-l</option>, <option>--login</option>"
+#~ msgstr "<option>-</option>, <option>-l</option>, <option>--login</option>"
+
+#~ msgid ""
+#~ "Provide an environment similar to what the user would expect had the user "
+#~ "logged in directly."
+#~ msgstr ""
+#~ "Fournir à l'utilisateur un environnement similaire à celui qu'il aurait "
+#~ "obtenu s'il s'était connecté directement."
+
+#~| msgid ""
+#~| "When <option>-</option> is used, it must be specified as the last "
+#~| "<command>su</command> option. The other forms (<option>-l</option> and "
+#~| "<option>--login</option>) do not have this restriction."
+#~ msgid ""
+#~ "When <option>-</option> is used, it must be specified before any "
+#~ "<option>username</option>. For portability it is recommended to use it as "
+#~ "last option, before any <option>username</option>. The other forms "
+#~ "(<option>-l</option> and <option>--login</option>) do not have this "
+#~ "restriction."
+#~ msgstr ""
+#~ "Lorsque <option>-</option> est utilisé, il doit être indiqué avant tout "
+#~ "<option>username</option>. Pour des questions de compatibilité il est "
+#~ "recommandé de l'utiliser en dernière option, avant tout <option>username</"
+#~ "option>. Les autres formes (<option>-l</option> et <option>--login</"
+#~ "option>) ne présentent pas cette restriction."
+
+#~ msgid "The shell that will be invoked."
+#~ msgstr "Interpréteur de commande devant être appelé."
+
+#~ msgid "The shell specified with --shell."
+#~ msgstr "Interpréteur de commande indiqué par --shell."
+
+#~ msgid ""
+#~ "If <option>--preserve-environment</option> is used, the shell specified "
+#~ "by the <envar>$SHELL</envar> environment variable."
+#~ msgstr ""
+#~ "Si <option>--preserve-environment</option> est utilisé, l'interpréteur de "
+#~ "commandes indiqué par la variable d'environnement <envar>$SHELL</envar> "
+#~ "sera utilisé."
+
+#~ msgid ""
+#~ "The shell indicated in the <filename>/etc/passwd</filename> entry for the "
+#~ "target user."
+#~ msgstr ""
+#~ "Interpréteur de commandes indiqué dans <filename>/etc/passwd</filename> "
+#~ "pour l'utilisateur cible."
+
+#~ msgid ""
+#~ "<filename>/bin/sh</filename> if a shell could not be found by any above "
+#~ "method."
+#~ msgstr ""
+#~ "<filename>/bin/sh</filename> si aucun interpréteur de commandes ne peut "
+#~ "être trouvé par l'une des méthodes ci-dessus."
+
+#~ msgid ""
+#~ "The invoked shell is chosen from (highest priority first): <placeholder-1/"
+#~ ">"
+#~ msgstr ""
+#~ "L'interpréteur de commandes à appeler est choisi parmi (le choix de plus "
+#~ "haute priorité en tête) : <placeholder-1/>"
+
+#~ msgid ""
+#~ "If the target user has a restricted shell (i.e. the shell field of this "
+#~ "user's entry in <filename>/etc/passwd</filename> is not listed in "
+#~ "<filename>/etc/shells</filename>), then the <option>--shell</option> "
+#~ "option or the <envar>$SHELL</envar> environment variable won't be taken "
+#~ "into account, unless <command>su</command> is called by root."
+#~ msgstr ""
+#~ "Si l'utilisateur cible possède un interpréteur de commande restreint (par "
+#~ "exemple, le champ de l'interpréteur de commande dans <filename>/etc/"
+#~ "passwd</filename> n'est pas renseigné dans <filename>/etc/shells</"
+#~ "filename>), alors, ni l'option <option>--shell</option> ni la variable "
+#~ "d'environnement <envar>$SHELL</envar> ne seront prises en compte à moins "
+#~ "que <command>su</command> ne soit appelé par le superutilisateur."
+
+#~ msgid ""
+#~ "<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+#~ "option>"
+#~ msgstr ""
+#~ "<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+#~ "option>"
+
+#~ msgid "$PATH"
+#~ msgstr "$PATH"
+
+#~ msgid ""
+#~ "reset according to the <filename>/etc/login.defs</filename> options "
+#~ "<option>ENV_PATH</option> or <option>ENV_SUPATH</option> (see below);"
+#~ msgstr ""
+#~ "réinitialise suivant les options <option>ENV_PATH</option> ou "
+#~ "<option>ENV_SUPATH</option> dans <filename>/etc/login.defs</filename> "
+#~ "(voir ci-dessous) :"
+
+#~ msgid "$IFS"
+#~ msgstr "$IFS"
+
+#~ msgid ""
+#~ "reset to <quote>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</quote>, if it "
+#~ "was set."
+#~ msgstr ""
+#~ "réinitialise à <quote>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</quote>, "
+#~ "s'il a été défini."
+
+#~ msgid "Preserve the current environment, except for: <placeholder-1/>"
+#~ msgstr "Préserver l'environnement actuel, sauf pour : <placeholder-1/>"
+
+#~ msgid ""
+#~ "If the target user has a restricted shell, this option has no effect "
+#~ "(unless <command>su</command> is called by root)."
+#~ msgstr ""
+#~ "Si l'utilisateur cible possède un interpréteur de commandes restreint, "
+#~ "cette option n'a aucun effet (à moins que <command>su</command> ne soit "
+#~ "appelé par le superutilisateur)."
+
+#~ msgid ""
+#~ "The <envar>$HOME</envar>, <envar>$SHELL</envar>, <envar>$USER</envar>, "
+#~ "<envar>$LOGNAME</envar>, <envar>$PATH</envar>, and <envar>$IFS</envar> "
+#~ "environment variables are reset."
+#~ msgstr ""
+#~ "Les variables d'environnement <envar>$HOME</envar>, <envar>$SHELL</"
+#~ "envar>, <envar>$USER</envar>, <envar>$LOGNAME</envar>, <envar>$PATH</"
+#~ "envar> et <envar>$IFS</envar> sont réinitialisées."
+
+#~ msgid ""
+#~ "If <option>--login</option> is not used, the environment is copied, "
+#~ "except for the variables above."
+#~ msgstr ""
+#~ "Si <option>--login</option> n'est pas utilisée, l'environnement est copié "
+#~ "sauf pour les variables ci-dessus."
+
+#~ msgid ""
+#~ "If <option>--login</option> is used, the <envar>$TERM</envar>, <envar>"
+#~ "$COLORTERM</envar>, <envar>$DISPLAY</envar>, and <envar>$XAUTHORITY</"
+#~ "envar> environment variables are copied if they were set."
+#~ msgstr ""
+#~ "Si <option>--login</option> est utilisée, les variables d'environnement "
+#~ "<envar>$TERM</envar>, <envar>$COLORTERM</envar>, <envar>$DISPLAY</envar> "
+#~ "et <envar>$XAUTHORITY</envar> sont copiées si elles ont été définies."
+
+#~ msgid ""
+#~ "If <option>--login</option> is used, the <envar>$TZ</envar>, <envar>$HZ</"
+#~ "envar>, and <envar>$MAIL</envar> environment variables are set according "
+#~ "to the <filename>/etc/login.defs</filename> options <option>ENV_TZ</"
+#~ "option>, <option>ENV_HZ</option>, <option>MAIL_DIR</option>, and "
+#~ "<option>MAIL_FILE</option> (see below)."
+#~ msgstr ""
+#~ "Si <option>--login</option> est utilisée, les variables d'environnement "
+#~ "<envar>$TZ</envar>, <envar>$HZ</envar> et <envar>$MAIL</envar> sont "
+#~ "configurées en accord avec les options <option>ENV_TZ</option>, "
+#~ "<option>ENV_HZ</option>, <option>MAIL_DIR</option> et <option>MAIL_FILE</"
+#~ "option> de <filename>/etc/login.defs</filename> (voir ci-dessous)."
+
+#~ msgid ""
+#~ "If <option>--login</option> is used, other environment variables might be "
+#~ "set by the <option>ENVIRON_FILE</option> file (see below)."
+#~ msgstr ""
+#~ "Si <option>--login</option> est utilisée, les autres variables "
+#~ "d'environnement peuvent être configurées par le fichier "
+#~ "<option>ENVIRON_FILE</option> (voir ci-dessous)."
+
+#~ msgid "Other environments might be set by PAM modules."
+#~ msgstr ""
+#~ "D'autres environnements peuvent être configurés par des modules PAM."
+
+#~ msgid ""
+#~ "Note that the default behavior for the environment is the following: "
+#~ "<placeholder-1/>"
+#~ msgstr ""
+#~ "Notez que le comportement par défaut pour l'environnement est le "
+#~ "suivant : <placeholder-1/>"
+
+#~ msgid ""
+#~ "This version of <command>su</command> has many compilation options, only "
+#~ "some of which may be in use at any particular site."
+#~ msgstr ""
+#~ "Cette version de <command>su</command> a de nombreuses options de "
+#~ "compilation. Seules certaines d'entre elles peuvent avoir été activées "
+#~ "sur votre site."
+
+#~ msgid "<option>CONSOLE</option> (string)"
+#~ msgstr "<option>CONSOLE</option> (chaîne de caractères)"
+
+#~ msgid ""
+#~ "If defined, either full pathname of a file containing device names (one "
+#~ "per line) or a \":\" delimited list of device names. Root logins will be "
+#~ "allowed only upon these devices."
+#~ msgstr ""
+#~ "Si définie, soit un chemin complet du fichier contenant les noms de "
+#~ "périphériques (un par ligne), soit une liste de noms du périphérique "
+#~ "délimitée par des « : ». Les connexions d'un administrateur ne seront "
+#~ "autorisées que depuis ces périphériques."
+
+#~ msgid "If not defined, root will be allowed on any device."
+#~ msgstr ""
+#~ "S'il n'est pas défini, root pourra se connecter depuis n'importe quel "
+#~ "périphérique."
+
+#~ msgid "The device should be specified without the /dev/ prefix."
+#~ msgstr "Le périphérique doit être précisé sans le préfixe /dev/."
+
+#~ msgid "<option>CONSOLE_GROUPS</option> (string)"
+#~ msgstr "<option>CONSOLE_GROUPS</option> (chaîne de caractères)"
+
+#~ msgid ""
+#~ "List of groups to add to the user's supplementary groups set when logging "
+#~ "in on the console (as determined by the CONSOLE setting). Default is "
+#~ "none. <placeholder-1/> Use with caution - it is possible for users to "
+#~ "gain permanent access to these groups, even when not logged in on the "
+#~ "console."
+#~ msgstr ""
+#~ "Une liste de groupes à rajouter aux groupes supplémentaires de "
+#~ "l'utilisateur lors d'une connexion sur une console (déterminé par le "
+#~ "paramètre CONSOLE). Par défaut, aucun groupe n'est ajouté. <placeholder-1/"
+#~ "> À utiliser avec précaution : il est possible que les utilisateurs aient "
+#~ "un accès permanent à ces groupes, et cela même s'ils ne sont pas "
+#~ "connectés sur la console."
+
+#~ msgid "<option>DEFAULT_HOME</option> (boolean)"
+#~ msgstr "<option>DEFAULT_HOME</option> (booléen)"
+
+#~ msgid ""
+#~ "Indicate if login is allowed if we can't cd to the home directory. "
+#~ "Default is no."
+#~ msgstr ""
+#~ "Indiquer si la connexion est permise si on ne peut pas accéder au "
+#~ "répertoire personnel. Le réglage par défaut est « no »."
+
+#~ msgid ""
+#~ "If set to <replaceable>yes</replaceable>, the user will login in the root "
+#~ "(<filename>/</filename>) directory if it is not possible to cd to her "
+#~ "home directory."
+#~ msgstr ""
+#~ "Si elle est configurée à <replaceable>yes</replaceable>, l'utilisateur va "
+#~ "se connecter dans le répertoire racine (<filename>/</filename>) s'il "
+#~ "n'est pas possible d'accéder à son répertoire personnel."
+
+#~ msgid "<option>ENV_HZ</option> (string)"
+#~ msgstr "<option>ENV_HZ</option> (chaîne de caractères)"
+
+#~ msgid ""
+#~ "If set, it will be used to define the HZ environment variable when a user "
+#~ "login. The value must be preceded by <replaceable>HZ=</replaceable>. A "
+#~ "common value on Linux is <replaceable>HZ=100</replaceable>."
+#~ msgstr ""
+#~ "Si définie, sera utilisée pour définir la variable d'environnement HZ "
+#~ "lorsqu'un utilisateur se connecte. La valeur doit être précédée par "
+#~ "<replaceable>HZ=</replaceable>. Une valeur commune sur Linux est "
+#~ "<replaceable>HZ=100</replaceable>."
+
+#~ msgid ""
+#~ "The <envar>HZ</envar> environment variable is only set when the user (the "
+#~ "superuser) logs in with <command>sulogin</command>."
+#~ msgstr ""
+#~ "La variable d'environnement <envar>HZ</envar> est uniquement définie "
+#~ "quand l'utilisateur (le super-utilisateur) se connecte avec "
+#~ "<command>sulogin</command>."
+
+#~ msgid "<option>ENVIRON_FILE</option> (string)"
+#~ msgstr "<option>ENVIRON_FILE</option> (chaîne de caractères)"
+
+#~ msgid ""
+#~ "If this file exists and is readable, login environment will be read from "
+#~ "it. Every line should be in the form name=value."
+#~ msgstr ""
+#~ "Si ce fichier existe et est lisible, l'environnement de connexion sera lu "
+#~ "à  partir de lui. Chaque ligne doit être sous la forme nom=valeur."
+
+#~ msgid "Lines starting with a # are treated as comment lines and ignored."
+#~ msgstr ""
+#~ "Les lignes commençant par un « # » sont considérées comme des "
+#~ "commentaires, et sont ignorées."
+
+#~ msgid "<option>ENV_PATH</option> (string)"
+#~ msgstr "<option>ENV_PATH</option> (chaîne de caractères)"
+
+#~ msgid ""
+#~ "If set, it will be used to define the PATH environment variable when a "
+#~ "regular user login. The value is a colon separated list of paths (for "
+#~ "example <replaceable>/bin:/usr/bin</replaceable>) and can be preceded by "
+#~ "<replaceable>PATH=</replaceable>. The default value is <replaceable>PATH=/"
+#~ "bin:/usr/bin</replaceable>."
+#~ msgstr ""
+#~ "Si définie, sera utilisée pour définir la variable d'environnement PATH "
+#~ "quand un utilisateur ordinaire se connecte. La valeur est une liste de "
+#~ "chemins séparés par des deux points (par exemple <replaceable>/bin:/usr/"
+#~ "bin</replaceable>) et peut être précédée par <replaceable>PATH=</"
+#~ "replaceable>. La valeur par défaut est <replaceable>PATH=/bin:/usr/bin</"
+#~ "replaceable>."
+
+#~ msgid "<option>ENV_SUPATH</option> (string)"
+#~ msgstr "<option>ENV_SUPATH</option> (chaîne de caractères)"
+
+#~ msgid ""
+#~ "If set, it will be used to define the PATH environment variable when the "
+#~ "superuser login. The value is a colon separated list of paths (for "
+#~ "example <replaceable>/sbin:/bin:/usr/sbin:/usr/bin</replaceable>) and can "
+#~ "be preceded by <replaceable>PATH=</replaceable>. The default value is "
+#~ "<replaceable>PATH=/sbin:/bin:/usr/sbin:/usr/bin</replaceable>."
+#~ msgstr ""
+#~ "Si définie, sera utilisée pour définir la variable d'environnement PATH "
+#~ "quand le super-utilisateur se connecte. La valeur est une liste de "
+#~ "chemins séparés par deux points (par exemple <replaceable>/sbin:/bin:/usr/"
+#~ "sbin:/usr/bin</replaceable>) et peut être précédée par "
+#~ "<replaceable>PATH=</replaceable>. La valeur par défaut est "
+#~ "<replaceable>PATH=/sbin:/bin:/usr/sbin:/usr/bin</replaceable>."
+
+#~ msgid "<option>ENV_TZ</option> (string)"
+#~ msgstr "<option>ENV_TZ</option> (chaîne de caractères)"
+
+#~ msgid ""
+#~ "If set, it will be used to define the TZ environment variable when a user "
+#~ "login. The value can be the name of a timezone preceded by "
+#~ "<replaceable>TZ=</replaceable> (for example <replaceable>TZ=CST6CDT</"
+#~ "replaceable>), or the full path to the file containing the timezone "
+#~ "specification (for example <filename>/etc/tzname</filename>)."
+#~ msgstr ""
+#~ "Si définie, sera utilisée pour définir la variable d'environnement TZ "
+#~ "quand un utilisateur se connecte. La valeur peut être le nom d'un fuseau "
+#~ "horaire précédé par <replaceable>TZ=</replaceable> (par exemple "
+#~ "<replaceable>TZ=CST6CDT</replaceable>), ou le chemin complet vers le "
+#~ "fichier contenant la spécification du fuseau horaire (par exemple "
+#~ "<filename>/etc/tzname</filename>)."
+
+#~ msgid ""
+#~ "If a full path is specified but the file does not exist or cannot be "
+#~ "read, the default is to use <replaceable>TZ=CST6CDT</replaceable>."
+#~ msgstr ""
+#~ "Si un chemin complet est spécifié mais que le fichier n'existe pas ou ne "
+#~ "peut pas être lu, la valeur par défaut utilisée est "
+#~ "<replaceable>TZ=CST6CDT</replaceable>."
+
+#~ msgid "<option>LOGIN_STRING</option> (string)"
+#~ msgstr "<option>LOGIN_STRING</option> (chaîne de caractères)"
+
+#~ msgid ""
+#~ "The string used for prompting a password. The default is to use "
+#~ "\"Password: \", or a translation of that string. If you set this "
+#~ "variable, the prompt will not be translated."
+#~ msgstr ""
+#~ "La chaîne de caractères utilisée pour l'invite de mot de passe. La valeur "
+#~ "par défaut est d'utiliser \"Password: \" (« mot de passe : »), ou une "
+#~ "traduction de cette chaîne. Si vous définissez cette variable, l'invite "
+#~ "ne sera pas traduite."
+
+#~ msgid ""
+#~ "If the string contains <replaceable>%s</replaceable>, this will be "
+#~ "replaced by the user's name."
+#~ msgstr ""
+#~ "Si la chaîne contient <replaceable>%s</replaceable>, ces caractères "
+#~ "seront remplacés par le nom de l'utilisateur."
+
+#~ msgid "<option>MAIL_CHECK_ENAB</option> (boolean)"
+#~ msgstr "<option>MAIL_CHECK_ENAB</option> (booléen)"
+
+#~ msgid "Enable checking and display of mailbox status upon login."
+#~ msgstr ""
+#~ "Activer le contrôle et l'affichage du statut de la boîte aux lettres "
+#~ "durant la connexion."
+
+#~ msgid ""
+#~ "You should disable it if the shell startup files already check for mail "
+#~ "(\"mailx -e\" or equivalent)."
+#~ msgstr ""
+#~ "Vous devriez le désactiver si les fichiers de démarrage de l'interpréteur "
+#~ "de commandes vérifient déjà la présence de courriers (« mail -e » ou "
+#~ "équivalent)."
+
+#~ msgid "<option>QUOTAS_ENAB</option> (boolean)"
+#~ msgstr "<option>QUOTAS_ENAB</option> (booléen)"
+
+#~ msgid ""
+#~ "Enable setting of resource limits from <filename>/etc/limits</filename> "
+#~ "and ulimit, umask, and niceness from the user's passwd gecos field."
+#~ msgstr ""
+#~ "Activer la mise en place de limites de resources depuis <filename>/etc/"
+#~ "limits</filename> et ulimit, umask et niveau nice depuis les champs gecos "
+#~ "de passwd."
+
+#~ msgid "<option>SULOG_FILE</option> (string)"
+#~ msgstr "<option>SULOG_FILE</option> (chaîne de caractères)"
+
+#~ msgid "If defined, all su activity is logged to this file."
+#~ msgstr ""
+#~ "Si définie, les activités de su seront enregistrées dans le fichier."
+
+#~ msgid "<option>SU_NAME</option> (string)"
+#~ msgstr "<option>SU_NAME</option> (chaîne de caractères)"
+
+#~ msgid ""
+#~ "If defined, the command name to display when running \"su -\". For "
+#~ "example, if this is defined as \"su\" then a \"ps\" will display the "
+#~ "command is \"-su\". If not defined, then \"ps\" would display the name of "
+#~ "the shell actually being run, e.g. something like \"-sh\"."
+#~ msgstr ""
+#~ "Si définie, le nom de la commande à afficher lorsque « su - » est "
+#~ "exécutée. Par exemple, si elle est définie à « su » alors un « ps » "
+#~ "affichera la commande comme « -su ». Si non définie, alors « ps » "
+#~ "affichera le nom du shell qui sera en fait exécuté, par exemple quelque "
+#~ "chose comme « -sh »."
+
+#~ msgid "<option>SU_WHEEL_ONLY</option> (boolean)"
+#~ msgstr "<option>SU_WHEEL_ONLY</option> (booléen)"
+
+#~ msgid ""
+#~ "If <replaceable>yes</replaceable>, the user must be listed as a member of "
+#~ "the first gid 0 group in <filename>/etc/group</filename> (called "
+#~ "<replaceable>root</replaceable> on most Linux systems) to be able to "
+#~ "<command>su</command> to uid 0 accounts. If the group doesn't exist or is "
+#~ "empty, no one will be able to <command>su</command> to uid 0."
+#~ msgstr ""
+#~ "Si <replaceable>yes</replaceable>, l'utilisateur doit faire partie des "
+#~ "membres du groupe avec le premier gid 0 dans <filename>/etc/group</"
+#~ "filename> (appelé <replaceable>root</replaceable> sur la plupart des "
+#~ "systèmes Linux) pour être capable de <command>su</command> vers des "
+#~ "comptes à uid 0. Si ce groupe n'existe pas ou est vide, personne ne "
+#~ "pourra <command>su</command> vers un uid 0."
+
+#~ msgid "<option>SYSLOG_SU_ENAB</option> (boolean)"
+#~ msgstr "<option>SYSLOG_SU_ENAB</option> (booléen)"
+
+#~ msgid ""
+#~ "Enable \"syslog\" logging of <command>su</command> activity - in addition "
+#~ "to sulog file logging."
+#~ msgstr ""
+#~ "Activer la journalisation « syslog » de l'activité de <command>su</"
+#~ "command> - en plus de la journalisation sulog."
+
+#~ msgid ""
+#~ "On success, <command>su</command> returns the exit value of the command "
+#~ "it executed."
+#~ msgstr ""
+#~ "En cas de succès, <command>su</command> renvoie la valeur de sortie de la "
+#~ "commande qu'il a exécutée."
+
+#~ msgid ""
+#~ "If this command was terminated by a signal, <command>su</command> returns "
+#~ "the number of this signal plus 128."
+#~ msgstr ""
+#~ "Si cette commande s'est terminée par un signal, <command>su</command> y "
+#~ "ajoute 128 et renvoie le résultat."
+
+#~ msgid ""
+#~ "If su has to kill the command (because it was asked to terminate, and the "
+#~ "command did not terminate in time), <command>su</command> returns 255."
+#~ msgstr ""
+#~ "Si <command>su</command> doit tuer la commande (parce qu'il a été demandé "
+#~ "de terminer et que la commande ne s'est pas terminée à temps), "
+#~ "<command>su</command> renvoie 255."
+
+#~ msgid "success (<option>--help</option> only)"
+#~ msgstr "succès (<option>--help</option> uniquement)"
+
+#~ msgid "126"
+#~ msgstr "126"
+
+#~ msgid "The requested command was not found"
+#~ msgstr "La commande demandée n'a pas été trouvée."
+
+#~ msgid "127"
+#~ msgstr "127"
+
+#~ msgid "The requested command could not be executed"
+#~ msgstr "La commande demandée n'a pas pu être exécutée."
+
+#~ msgid ""
+#~ "Some exit values from <command>su</command> are independent from the "
+#~ "executed command: <placeholder-1/>"
+#~ msgstr ""
+#~ "Certaines valeurs de retour de <command>su</command> sont indépendantes "
+#~ "de la commande exécutée : <placeholder-1/>"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>sh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>sh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+#~ msgid "sg"
+#~ msgstr "sg"
+
+#~ msgid "execute command as different group ID"
+#~ msgstr "exécuter une commande avec un autre identifiant de groupe"
+
+#~ msgid "-"
+#~ msgstr "-"
+
+#~ msgid "-c"
+#~ msgstr "-c"
+
+#~ msgid "group <placeholder-1/> command"
+#~ msgstr "groupe <placeholder-1/> commande"
+
+#~ msgid ""
+#~ "The <command>sg</command> command works similar to <command>newgrp</"
+#~ "command> but accepts a command. The command will be executed with the "
+#~ "<filename>/bin/sh</filename> shell. With most shells you may run "
+#~ "<command>sg</command> from, you need to enclose multi-word commands in "
+#~ "quotes. Another difference between <command>newgrp</command> and "
+#~ "<command>sg</command> is that some shells treat <command>newgrp</command> "
+#~ "specially, replacing themselves with a new instance of a shell that "
+#~ "<command>newgrp</command> creates. This doesn't happen with <command>sg</"
+#~ "command>, so upon exit from a <command>sg</command> command you are "
+#~ "returned to your previous group ID."
+#~ msgstr ""
+#~ "La commande <command>sg</command> fonctionne de la même manière que "
+#~ "<command>newgrp</command>, mais prend une commande comme paramètre. Cette "
+#~ "commande sera exécutée avec un interpréteur de commandes <filename>/bin/"
+#~ "sh</filename>. Avec la plupart des interpréteurs de commandes permettant "
+#~ "d'exécuter <command>sg</command>, si la commande comporte plusieurs mots, "
+#~ "il faut la placer entre des guillemets (« \" »). Une autre différence "
+#~ "entre <command>newgrp</command> et <command>sg</command> est que certains "
+#~ "interpréteurs de commandes traitent <command>newgrp</command> de façon "
+#~ "particulière, en se remplaçant eux-mêmes par une nouvelle instance d'un "
+#~ "interpréteur que <command>newgrp</command> crée. Ceci n'est pas le cas de "
+#~ "<command>sg</command>, ce qui permet de retrouver le groupe précédent à "
+#~ "la sortie de <command>sg</command>."
+
+#~ msgid "<option>SYSLOG_SG_ENAB</option> (boolean)"
+#~ msgstr "<option>SYSLOG_SG_ENAB</option> (booléen)"
+
+#~ msgid "Enable \"syslog\" logging of <command>sg</command> activity."
+#~ msgstr ""
+#~ "Activer la journalisation « syslog » de l'activité de <command>sg</"
+#~ "command>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition="
+#~ "\"gshadow\">, <citerefentry><refentrytitle>gshadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition="
+#~ "\"gshadow\">, <citerefentry><refentrytitle>gshadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+
+#~ msgid "shadow"
+#~ msgstr "shadow"
+
+#~ msgid ""
+#~ "<filename>shadow</filename> is a file which contains the password "
+#~ "information for the system's accounts and optional aging information."
+#~ msgstr ""
+#~ "<filename>shadow</filename> est un fichier qui contient les informations "
+#~ "cachées concernant les mots de passe des utilisateurs et leurs dates de "
+#~ "validité."
+
+#~ msgid ""
+#~ "This file must not be readable by regular users if password security is "
+#~ "to be maintained."
+#~ msgstr ""
+#~ "Ce fichier ne doit pas être accessible en lecture par les utilisateurs "
+#~ "normaux afin de maintenir la sécurité des mots de passe, en particuliers "
+#~ "pour prévenir les attaques par dictionnaires."
+
+#~ msgid ""
+#~ "Each line of this file contains 9 fields, separated by colons (<quote>:</"
+#~ "quote>), in the following order:"
+#~ msgstr ""
+#~ "Chaque ligne de ce fichier contient 9 champs, séparés par des deux-points "
+#~ "(<quote>:</quote>), dans l'ordre suivant :"
+
+#~ msgid "login name"
+#~ msgstr "nom de connexion de l'utilisateur (« login »)"
+
+#~ msgid "It must be a valid account name, which exist on the system."
+#~ msgstr "Ce doit être un nom de compte valable, qui existe sur le système."
+
+#~ msgid ""
+#~ "Refer to <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry> for details on how this string is interpreted."
+#~ msgstr ""
+#~ "Consultez <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry> pour plus d'informations sur le traitement de "
+#~ "cette chaîne."
+
+#~ msgid ""
+#~ "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)."
+#~ msgstr ""
+#~ "Si le champ du mot de passe contient une chaîne qui ne peut pas être un "
+#~ "résultat valable de <citerefentry><refentrytitle>crypt</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, par exemple si "
+#~ "elle contient les caractères ! ou *, alors l'utilisateur ne pourra pas "
+#~ "utiliser son mot de passe UNIX pour se connecter (mais il se peut que "
+#~ "l'utilisateur puisse se connecter au système par d'autres moyens)."
+
+#~ msgid ""
+#~ "This field may be empty, in which case no passwords are required to "
+#~ "authenticate as the specified login name. However, some applications "
+#~ "which read the <filename>/etc/shadow</filename> file may decide not to "
+#~ "permit any access at all if the password field is empty."
+#~ msgstr ""
+#~ "Ce champ peut être vide. Dans ce cas aucun mot de passe n'est nécessaire "
+#~ "pour s'authentifier avec l'identifiant de connexion indiqué. Cependant, "
+#~ "certaines applications qui lisent le fichier <filename>/etc/shadow</"
+#~ "filename> peuvent n'autoriser aucun accès si le mot de passe est vide."
+
+#~ msgid ""
+#~ "A password field which starts with a exclamation mark means that the "
+#~ "password is locked. The remaining characters on the line represent the "
+#~ "password field before the password was locked."
+#~ msgstr ""
+#~ "Un champ de mot de passe qui commence avec un point d'exclamation indique "
+#~ "que le mot de passe est bloqué. Les caractères restants sur la ligne "
+#~ "représentent le champ de mot de passe avant que le mot de passe n'ait été "
+#~ "bloqué."
+
+#~ msgid ""
+#~ "The date of the last password change, expressed as the number of days "
+#~ "since Jan 1, 1970."
+#~ msgstr ""
+#~ "La date du dernier changement de mot de passe, exprimée en nombre de "
+#~ "jours depuis le 1er janvier 1970."
+
+#~ msgid ""
+#~ "The value 0 has a special meaning, which is that the user should change "
+#~ "her pasword the next time she will log in the system."
+#~ msgstr ""
+#~ "La valeur 0 a une signification particulière : l'utilisateur devra "
+#~ "changer son mot de passe la prochaine fois qu'il se connectera au système."
+
+#~ msgid "An empty field means that password aging features are disabled."
+#~ msgstr ""
+#~ "Un champ vide indique que les fonctionnalités de vieillissement de mot de "
+#~ "passe sont désactivées."
+
+#~ msgid ""
+#~ "The minimum password age is the number of days the user will have to wait "
+#~ "before she will be allowed to change her password again."
+#~ msgstr ""
+#~ "L'âge minimum du mot de passe est la durée (en jour) que l'utilisateur "
+#~ "devra attendre avant de pouvoir le changer de nouveau."
+
+#~ msgid ""
+#~ "An empty field and value 0 mean that there are no minimum password age."
+#~ msgstr ""
+#~ "Un champ vide ou une valeur de 0 signifie qu'il n'y a pas d'âge minimum "
+#~ "pour le mot de passe."
+
+#~ msgid ""
+#~ "The maximum password age is the number of days after which the user will "
+#~ "have to change her password."
+#~ msgstr ""
+#~ "L'âge maximum du mot de passe est la durée (en jour) après laquelle "
+#~ "l'utilisateur devra changer son mot de passe."
+
+#~ msgid ""
+#~ "After this number of days is elapsed, the password may still be valid. "
+#~ "The user should be asked to change her password the next time she will "
+#~ "log in."
+#~ msgstr ""
+#~ "Une fois cette durée écoulée, le mot de passe restera valable. Il sera "
+#~ "demandé à l'utilisateur de le changer la prochaine fois qu'il se "
+#~ "connectera."
+
+#~ msgid ""
+#~ "An empty field means that there are no maximum password age, no password "
+#~ "warning period, and no password inactivity period (see below)."
+#~ msgstr ""
+#~ "Un champ vide signifie qu'il n'y a pour le mot de passe aucune limite "
+#~ "d'âge, aucune période d'avertissement d'expiration et aucune période "
+#~ "d'inactivité (voir ci-dessous)."
+
+#~ msgid ""
+#~ "If the maximum password age is lower than the minimum password age, the "
+#~ "user cannot change her password."
+#~ msgstr ""
+#~ "Si l'âge maximum du mot de passe est plus petit que l'âge minimum du mot "
+#~ "de passe, l'utilisateur ne pourra pas changer son mot de passe."
+
+#~ msgid "password warning period"
+#~ msgstr "période d'avertissement d'expiration du mot de passe"
+
+#~ msgid ""
+#~ "The number of days before a password is going to expire (see the maximum "
+#~ "password age above) during which the user should be warned."
+#~ msgstr ""
+#~ "La durée (en jour) pendant laquelle l'utilisateur sera averti avant que "
+#~ "le mot de passe n'expire (voir l'âge maximum du mot de passe ci-dessus)."
+
+#~ msgid ""
+#~ "An empty field and value 0 mean that there are no password warning period."
+#~ msgstr ""
+#~ "Un champ vide ou une valeur de 0 signifie qu'il n'y aura pas de période "
+#~ "d'avertissement d'expiration du mot de passe."
+
+#~ msgid ""
+#~ "The number of days after a password has expired (see the maximum password "
+#~ "age above) during which the password should still be accepted (and the "
+#~ "user should update her password during the next login)."
+#~ msgstr ""
+#~ "La durée (en jour) pendant laquelle le mot de passe sera quand même "
+#~ "accepté après son expiration (voir l'âge maximum du mot de passe ci-"
+#~ "dessus). L'utilisateur devra mettre à jour son mot de passe à la "
+#~ "prochaine connexion."
+
+#~ msgid ""
+#~ "After expiration of the password and this expiration period is elapsed, "
+#~ "no login is possible using the current user's password. The user should "
+#~ "contact her administrator."
+#~ msgstr ""
+#~ "Après expiration du mot de passe suivie de la période d'expiration, plus "
+#~ "aucune connexion n'est possible en utilisant le mot de passe de "
+#~ "l'utilisateur. L'utilisateur doit contacter son administrateur."
+
+#~ msgid ""
+#~ "An empty field means that there are no enforcement of an inactivity "
+#~ "period."
+#~ msgstr ""
+#~ "Un champ vide signifie qu'aucune période d'inactivité n'est imposée."
+
+#~ msgid ""
+#~ "The date of expiration of the account, expressed as the number of days "
+#~ "since Jan 1, 1970."
+#~ msgstr ""
+#~ "La date d'expiration du compte, exprimé en nombre de jours depuis le "
+#~ "1er janvier 1970."
+
+#~ msgid ""
+#~ "Note that an account expiration differs from a password expiration. In "
+#~ "case of an acount expiration, the user shall not be allowed to login. In "
+#~ "case of a password expiration, the user is not allowed to login using her "
+#~ "password."
+#~ msgstr ""
+#~ "Veuillez noter que l'expiration d'un compte diffère de l'expiration d'un "
+#~ "mot de passe. En cas d'expiration d'un compte, l'utilisateur ne sera plus "
+#~ "autorisé à se connecter. En cas d'expiration d'un mot de passe, "
+#~ "l'utilisateur n'est pas autorisé à se connecter en utilisant son mot de "
+#~ "passe."
+
+#~ msgid "An empty field means that the account will never expire."
+#~ msgstr "Un champ vide signifie que le compte n'expirera jamais."
+
+#~ msgid ""
+#~ "The value 0 should not be used as it is interpreted as either an account "
+#~ "with no expiration, or as an expiration on Jan 1, 1970."
+#~ msgstr ""
+#~ "La valeur 0 ne doit pas être utilisée puisqu'elle peut être interprétée "
+#~ "soit comme un compte sans expiration, soit comme ayant expiré le "
+#~ "1er janvier 1970."
+
+#~ msgid "reserved field"
+#~ msgstr "champ réservé"
+
+#~ msgid "This field is reserved for future use."
+#~ msgstr "Ce champ est réservé pour une utilisation future."
+
+#~ msgid "/etc/shadow-"
+#~ msgstr "/etc/shadow-"
+
+#~ msgid "Backup file for /etc/shadow."
+#~ msgstr "Fichier de sauvegarde pour /etc/shadow."
+
+#~ msgid ""
+#~ "Note that this file is used by the tools of the shadow toolsuite, but not "
+#~ "by all user and password management tools."
+#~ msgstr ""
+#~ "Notez que ce fichier est utilisé par les outils de la suite d'outils "
+#~ "shadow, mais pas par tous les outils de gestion d'utilisateurs et de mot "
+#~ "de passes."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "Library Calls"
+#~ msgstr "Appels de bibliothèque"
+
+#~ msgid "getspnam"
+#~ msgstr "getspnam"
+
+#~ msgid "SYNTAX"
+#~ msgstr "SYNTAX"
+
+#~ msgid "#include &lt;shadow.h&gt;"
+#~ msgstr "#include &lt;shadow.h&gt;"
+
+#~ msgid "struct spwd *getspent();"
+#~ msgstr "struct spwd *getspent();"
+
+#~ msgid "struct spwd *getspnam(char"
+#~ msgstr "struct spwd *getspnam(char"
+
+#~ msgid "*name"
+#~ msgstr "*nom"
+
+#~ msgid ");"
+#~ msgstr ");"
+
+#~ msgid "void setspent();"
+#~ msgstr "void setspent();"
+
+#~ msgid "void endspent();"
+#~ msgstr "void endspent();"
+
+#~ msgid "struct spwd *fgetspent(FILE"
+#~ msgstr "struct spwd *fgetspent(FILE"
+
+#~ msgid "*fp"
+#~ msgstr "*fp"
+
+#~ msgid "struct spwd *sgetspent(char"
+#~ msgstr "struct spwd *sgetspent(char"
+
+#~ msgid "*cp"
+#~ msgstr "*cp"
+
+#~ msgid "int putspent(struct spwd"
+#~ msgstr "int putspent(struct spwd"
+
+#~ msgid "*p,"
+#~ msgstr "*p,"
+
+#~ msgid "FILE"
+#~ msgstr "FICHIER"
+
+#~ msgid "int lckpwdf();"
+#~ msgstr "int lckpwdf();"
+
+#~ msgid "int ulckpwdf();"
+#~ msgstr "int ulckpwdf();"
+
+#~ msgid ""
+#~ "<emphasis remap=\"I\">shadow</emphasis> manipulates the contents of the "
+#~ "shadow password file, <filename>/etc/shadow</filename>. The structure in "
+#~ "the <emphasis remap=\"I\">#include</emphasis> file is:"
+#~ msgstr ""
+#~ "<emphasis remap=\"I\">shadow</emphasis> manipule le contenu du fichier "
+#~ "des mots de passe cachés, <filename>/etc/shadow</filename>. La structure "
+#~ "définie dans le fichier inclus est :"
+
+#~ msgid ""
+#~ "struct spwd {\n"
+#~ " char\t\t*sp_namp; /* user login name */\n"
+#~ " char\t\t*sp_pwdp; /* encrypted password */\n"
+#~ " long int\t\tsp_lstchg; /* last password change */\n"
+#~ " long int\t\tsp_min; /* days until change allowed. */\n"
+#~ " long int\t\tsp_max; /* days before change required */\n"
+#~ " long int\t\tsp_warn; /* days warning for expiration */\n"
+#~ " long int\t\tsp_inact; /* days before account inactive */\n"
+#~ " long int\t\tsp_expire; /* date when account expires */\n"
+#~ " unsigned long int\tsp_flag; /* reserved for future use */\n"
+#~ "}\n"
+#~ " "
+#~ msgstr ""
+#~ "struct spwd {\n"
+#~ " char\t\t*sp_namp; /* nom de connexion de l'utilisateur */\n"
+#~ " char\t\t*sp_pwdp; /* mot de passe chiffré */\n"
+#~ " long int\t\tsp_lstchg; /* dernier changement de mot de passe */\n"
+#~ " long int\t\tsp_min; /* jours avant de pouvoir changer de mot de "
+#~ "passe */\n"
+#~ " long int\t\tsp_max; /* jours avant l'obligation de changer de mot "
+#~ "de passe */\n"
+#~ " long int\t\tsp_warn; /* jours d'avertissement avant la fin de "
+#~ "validité */\n"
+#~ " long int\t\tsp_inact; /* jours avant que le compte soit inactif */\n"
+#~ " long int\t\tsp_expire; /* date de fin de validité du compte */\n"
+#~ " unsigned long int\tsp_flag; /* réservé pour une utilisation future "
+#~ "*/\n"
+#~ "}\n"
+#~ " "
+
+#~ msgid "The meanings of each field are:"
+#~ msgstr "La signification de chaque champ est la suivante :"
+
+#~ msgid "sp_namp - pointer to null-terminated user name"
+#~ msgstr ""
+#~ "sp_namp - pointeur vers le nom d'utilisateur terminé par un zéro binaire "
+#~ "(« null-terminated »)"
+
+#~ msgid "sp_pwdp - pointer to null-terminated password"
+#~ msgstr ""
+#~ "sp_pwdp - pointeur vers le mot de passe terminé par un zéro binaire "
+#~ "(« null-terminated »)"
+
+#~ msgid "sp_lstchg - days since Jan 1, 1970 password was last changed"
+#~ msgstr ""
+#~ "sp_lstchg - nombre de jours, comptés à partir du 1er janvier 1970, depuis "
+#~ "la dernière modification du mot de passe"
+
+#~ msgid "sp_max - days after which password must be changed"
+#~ msgstr ""
+#~ "sp_max - nombre maximal de jours avant que le mot de passe doive être "
+#~ "changé"
+
+#~ msgid ""
+#~ "sp_warn - days before password is to expire that user is warned of "
+#~ "pending password expiration"
+#~ msgstr ""
+#~ "sp_warn - nombre de jours avant que le mot de passe n'arrive en fin de "
+#~ "validité pendant lesquels l'utilisateur est averti de la fin prochaine de "
+#~ "la validité de son mot de passe"
+
+#~ msgid ""
+#~ "sp_inact - days after password expires that account is considered "
+#~ "inactive and disabled"
+#~ msgstr ""
+#~ "sp_inact - nombre de jours après la fin de validité du mot de passe avant "
+#~ "de considérer que le compte est inactif et soit désactivé"
+
+#~ msgid "sp_expire - days since Jan 1, 1970 when account will be disabled"
+#~ msgstr ""
+#~ "sp_expire - nombre de jours, comptés à partir du 1er janvier 1970, après "
+#~ "lesquels le compte sera désactivé"
+
+#~ msgid "sp_flag - reserved for future use"
+#~ msgstr "sp_flag - réservé pour une utilisation future"
+
+#~ msgid ""
+#~ "<emphasis>getspent</emphasis>, <emphasis>getspname</emphasis>, "
+#~ "<emphasis>fgetspent</emphasis>, and <emphasis>sgetspent</emphasis> each "
+#~ "return a pointer to a <emphasis>struct spwd</emphasis>. "
+#~ "<emphasis>getspent</emphasis> returns the next entry from the file, and "
+#~ "<emphasis>fgetspent</emphasis> returns the next entry from the given "
+#~ "stream, which is assumed to be a file of the proper format. "
+#~ "<emphasis>sgetspent</emphasis> returns a pointer to a <emphasis>struct "
+#~ "spwd</emphasis> using the provided string as input. <emphasis>getspnam</"
+#~ "emphasis> searches from the current position in the file for an entry "
+#~ "matching <emphasis>name</emphasis>."
+#~ msgstr ""
+#~ "<emphasis>Getspent</emphasis>, <emphasis>getspname</emphasis>, "
+#~ "<emphasis>fgetspent</emphasis>, et <emphasis>sgetspent</emphasis> "
+#~ "renvoient tous un pointeur vers une structure <emphasis>struct spwd</"
+#~ "emphasis>. <emphasis>Getspent</emphasis> renvoie l'entrée suivante du "
+#~ "fichier, et <emphasis>fgetspent</emphasis> renvoie l'entrée suivante du "
+#~ "flux qui est considéré comme étant un fichier au format correct. "
+#~ "<emphasis>Sgetspent</emphasis> renvoie un pointeur vers une structure "
+#~ "<emphasis>struct spwd</emphasis> en utilisant la chaîne de caractère "
+#~ "fournie en entrée. <emphasis>Getspnam</emphasis> cherche à partir de la "
+#~ "position courante une entrée correspondant à <emphasis>nom</emphasis> "
+#~ "dans le fichier fourni en entrée."
+
+#~ msgid ""
+#~ "<emphasis>setspent</emphasis> and <emphasis>endspent</emphasis> may be "
+#~ "used to begin and end, respectively, access to the shadow password file."
+#~ msgstr ""
+#~ "<emphasis>Setspent</emphasis> et <emphasis>endspent</emphasis> peuvent "
+#~ "être utilisés pour débuter et terminer l'accès au fichier de mots de "
+#~ "passe cachés."
+
+# TBD: vérifier tous les remap
+#~ msgid ""
+#~ "The <emphasis>lckpwdf</emphasis> and <emphasis>ulckpwdf</emphasis> "
+#~ "routines should be used to insure exclusive access to the <filename>/etc/"
+#~ "shadow</filename> file. <emphasis>lckpwdf</emphasis> attempts to acquire "
+#~ "a lock using <emphasis>pw_lock</emphasis> for up to 15 seconds. It "
+#~ "continues by attempting to acquire a second lock using "
+#~ "<emphasis>spw_lock</emphasis> for the remainder of the initial 15 "
+#~ "seconds. Should either attempt fail after a total of 15 seconds, "
+#~ "<emphasis>lckpwdf</emphasis> returns -1. When both locks are acquired 0 "
+#~ "is returned."
+#~ msgstr ""
+#~ "Les fonctions <emphasis>lckpwdf</emphasis> et <emphasis>ulckpwdf</"
+#~ "emphasis> doivent être utilisées pour garantir un accès exclusif au "
+#~ "fichier <filename>/etc/shadow</filename>. <emphasis>Lckpwdf</emphasis> "
+#~ "essaie de placer un verrou avec <emphasis>pw_lock</emphasis> pendant 15 "
+#~ "secondes. Il essaie ensuite de placer un second verrou en utilisant "
+#~ "<emphasis>spw_lock</emphasis> pendant le reste de ces 15 secondes. Si un "
+#~ "de ces verrous ne peut être placé, <emphasis>lckpwdf</emphasis> renvoie "
+#~ "-1. Quand les deux verrous peuvent être placés, la valeur 0 est renvoyée."
+
+#~ msgid ""
+#~ "Routines return NULL if no more entries are available or if an error "
+#~ "occurs during processing. Routines which have <emphasis>int</emphasis> as "
+#~ "the return value return 0 for success and -1 for failure."
+#~ msgstr ""
+#~ "Les fonctions renvoient NULL si plus aucune entrée n'est disponible ou si "
+#~ "une erreur est survenue lors du traitement. Les fonctions dont la valeur "
+#~ "de retour est un <emphasis>int</emphasis> renvoient 0 en cas de succès et "
+#~ "-1 en cas d'échec."
+
+#~ msgid ""
+#~ "These routines may only be used by the superuser as access to the shadow "
+#~ "password file is restricted."
+#~ msgstr ""
+#~ "Ces fonctions peuvent n'être utilisées que par le superutilisateur car "
+#~ "l'accès au fichier de mots de passe cachés est restreint."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#~ msgid "pwconv"
+#~ msgstr "pwconv"
+
+#~ msgid "pwunconv"
+#~ msgstr "pwunconv"
+
+#~ msgid "grpconv"
+#~ msgstr "grpconv"
+
+#~ msgid "grpunconv"
+#~ msgstr "grpunconv"
+
+#~ msgid "convert to and from shadow passwords and groups"
+#~ msgstr ""
+#~ "Convertir vers ou depuis les fichiers de mots de passe ou de groupe cachés"
+
+#~ msgid ""
+#~ "The <command>pwconv</command> command creates <emphasis remap=\"I"
+#~ "\">shadow</emphasis> from <emphasis remap=\"I\">passwd</emphasis> and an "
+#~ "optionally existing <emphasis remap=\"I\">shadow</emphasis>."
+#~ msgstr ""
+#~ "La commande <command>pwconv</command> crée le fichier <emphasis remap=\"I"
+#~ "\">shadow</emphasis> à partir du fichier <emphasis remap=\"I\">passwd</"
+#~ "emphasis> et d'un éventuel fichier <emphasis remap=\"I\">shadow</"
+#~ "emphasis>."
+
+#~ msgid ""
+#~ "<command>pwconv</command> does not work with <option>USE_TCB</option> "
+#~ "enabled. To convert to tcb passwords, you should first use "
+#~ "<command>pwconv</command> to convert to shadowed passwords by disabling "
+#~ "<option>USE_TCB</option> in <filename>login.defs</filename> and then "
+#~ "convert to tcb password using <command>tcb_convert</command> (and re-"
+#~ "enable <option>USE_TCB</option> in <filename>login.defs</filename>.)"
+#~ msgstr ""
+#~ "<command>pwconv</command> ne fonctionne pas avec <option>USE_TCB</option> "
+#~ "activée. Pour convertir les mots de passe vers tcb, vous devez d'abord "
+#~ "utiliser <command>pwconv</command> pour les convertir vers les mots de "
+#~ "passe cachés en désactivant <option>USE_TCB</option> dans <filename>login."
+#~ "defs</filename> puis les convertir en mots de passe tcb avec "
+#~ "<command>tcb_convert</command> (et en réactivant <option>USE_TCB</option> "
+#~ "dans <filename>login.defs</filename>)."
+
+#~ msgid ""
+#~ "The <command>pwunconv</command> command creates <emphasis remap=\"I"
+#~ "\">passwd</emphasis> from <emphasis remap=\"I\">passwd</emphasis> and "
+#~ "<emphasis remap=\"I\">shadow</emphasis> and then removes <emphasis remap="
+#~ "\"I\">shadow</emphasis>."
+#~ msgstr ""
+#~ "La commande <command>pwunconv</command> crée le fichier <emphasis remap="
+#~ "\"I\">passwd</emphasis> à partir des fichiers <emphasis remap=\"I"
+#~ "\">passwd</emphasis> et <emphasis remap=\"I\">shadow</emphasis> puis "
+#~ "supprime <emphasis remap=\"I\">shadow</emphasis>."
+
+#~ msgid ""
+#~ "<command>pwunconv</command> does not work with <option>USE_TCB</option> "
+#~ "enabled. You should first switch back from tcb to shadowed passwords "
+#~ "using <command>tcb_unconvert</command>, and then disable <option>USE_TCB</"
+#~ "option> in <filename>login.defs</filename> before using "
+#~ "<command>pwunconv</command>."
+#~ msgstr ""
+#~ "<command>pwunconv</command> ne fonctionne pas avec <option>USE_TCB</"
+#~ "option> activé. Vous devez d'abord convertir les mots de passe depuis tcb "
+#~ "vers des mots de passe cachés en utilisant <command>tcb_unconvert</"
+#~ "command> puis désactiver <option>USE_TCB</option> dans <filename>login."
+#~ "defs</filename> avant d'utiliser <command>pwunconv</command>."
+
+#~ msgid ""
+#~ "The <command>grpconv</command> command creates <emphasis remap=\"I"
+#~ "\">gshadow</emphasis> from <emphasis remap=\"I\">group</emphasis> and an "
+#~ "optionally existing <emphasis remap=\"I\">gshadow</emphasis>."
+#~ msgstr ""
+#~ "La commande <command>grpconv</command> crée <emphasis remap=\"I"
+#~ "\">gshadow</emphasis> à partir de <emphasis remap=\"I\">group</emphasis> "
+#~ "et d'un éventuel fichier <emphasis remap=\"I\">gshadow</emphasis>."
+
+#~ msgid ""
+#~ "The <command>grpunconv</command> command creates <emphasis remap=\"I"
+#~ "\">group</emphasis> from <emphasis remap=\"I\">group</emphasis> and "
+#~ "<emphasis remap=\"I\">gshadow</emphasis> and then removes <emphasis remap="
+#~ "\"I\">gshadow</emphasis>."
+#~ msgstr ""
+#~ "La commande <command>grpunconv</command> crée <emphasis remap=\"I"
+#~ "\">group</emphasis> à partir des fichiers <emphasis remap=\"I\">group</"
+#~ "emphasis> et <emphasis remap=\"I\">gshadow</emphasis> puis supprime "
+#~ "<emphasis remap=\"I\">gshadow</emphasis>."
+
+#~ msgid ""
+#~ "These four programs all operate on the normal and shadow password and "
+#~ "group files: <filename>/etc/passwd</filename>, <filename>/etc/group</"
+#~ "filename>, <filename>/etc/shadow</filename>, and <filename>/etc/gshadow</"
+#~ "filename>."
+#~ msgstr ""
+#~ "Ces quatre programmes opèrent sur les fichiers de mots de passe et "
+#~ "d'informations sur les groupes cachés ou non : <filename>/etc/passwd</"
+#~ "filename>, <filename>/etc/group</filename>, <filename>/etc/shadow</"
+#~ "filename>, et <filename>/etc/gshadow</filename>."
+
+#~ msgid ""
+#~ "Each program acquires the necessary locks before conversion. "
+#~ "<command>pwconv</command> and <command>grpconv</command> are similar. "
+#~ "First, entries in the shadowed file which don't exist in the main file "
+#~ "are removed. Then, shadowed entries which don't have `x' as the password "
+#~ "in the main file are updated. Any missing shadowed entries are added. "
+#~ "Finally, passwords in the main file are replaced with `x'. These programs "
+#~ "can be used for initial conversion as well to update the shadowed file if "
+#~ "the main file is edited by hand."
+#~ msgstr ""
+#~ "Chaque programme place les verrous nécessaires avant d'effectuer la "
+#~ "conversion. <command>pwconv</command> et <command>grpconv</command> sont "
+#~ "similaires. Dans un premier temps, les entrées du fichier de mots de "
+#~ "passe cachés (<filename>/etc/shadow</filename> ou <filename>/etc/gshadow</"
+#~ "filename>) qui n'existent pas dans le fichier principal "
+#~ "(<filename>passwd</filename> ou <filename>group</filename>), sont "
+#~ "retirées. Ensuite, les entrées du fichier <filename>shadow</filename> "
+#~ "n'ayant pas pour mot de passe « x » dans le fichier <filename>passwd</"
+#~ "filename> sont mises à jour. Enfin, les mots de passe du fichier "
+#~ "<filename>passwd</filename> sont remplacés par « x ». Ces programmes "
+#~ "peuvent être utilisés pour une première conversion, ou bien pour une mise "
+#~ "à jour, si les fichiers principaux [ NdT : non cachés ] ont été édités à "
+#~ "la main."
+
+#~ msgid ""
+#~ "<command>pwconv</command> will use the values of <emphasis remap=\"I"
+#~ "\">PASS_MIN_DAYS</emphasis>, <emphasis remap=\"I\">PASS_MAX_DAYS</"
+#~ "emphasis>, and <emphasis remap=\"I\">PASS_WARN_AGE</emphasis> from "
+#~ "<filename>/etc/login.defs</filename> when adding new entries to "
+#~ "<filename>/etc/shadow</filename>."
+#~ msgstr ""
+#~ "Lors de l'ajout de nouvelles entrées dans <filename>/etc/shadow</"
+#~ "filename>, <command>pwconv</command> utilisera les valeurs de <emphasis "
+#~ "remap=\"I\">PASS_MIN_DAYS</emphasis>, <emphasis remap=\"I"
+#~ "\">PASS_MAX_DAYS</emphasis>, et <emphasis remap=\"I\">PASS_WARN_AGE</"
+#~ "emphasis> définies dans le fichier <filename>/etc/login.defs</filename>."
+
+#~ msgid ""
+#~ "Likewise <command>pwunconv</command> and <command>grpunconv</command> are "
+#~ "similar. Passwords in the main file are updated from the shadowed file. "
+#~ "Entries which exist in the main file but not in the shadowed file are "
+#~ "left alone. Finally, the shadowed file is removed. Some password aging "
+#~ "information is lost by <command>pwunconv</command>. It will convert what "
+#~ "it can."
+#~ msgstr ""
+#~ "De même, <command>pwunconv</command> et <command>grpunconv</command> sont "
+#~ "similaires. Les mots de passe des fichiers principaux sont mis à jour à "
+#~ "partir des fichiers d'informations cachées (« shadowed file »). Les "
+#~ "entrées existant dans un fichier principal, mais pas dans le fichier "
+#~ "caché sont laissées. Enfin, le fichier caché est supprimé. Certaines "
+#~ "informations d'âge des mots de passe sont perdues par <command>pwunconv</"
+#~ "command>. Il ne convertit que ce qu'il peut."
+
+#~ msgid ""
+#~ "The options which apply to the <command>pwconv</command>, "
+#~ "<command>pwunconv</command>, <command>grpconv</command>, and "
+#~ "<command>grpunconv</command> commands are:"
+#~ msgstr ""
+#~ "Les options applicables aux commandes <command>pwconv</command>, "
+#~ "<command>pwunconv</command>, <command>grpconv</command> et "
+#~ "<command>grpunconv</command> sont :"
+
+#~ msgid ""
+#~ "Errors in the password or group files (such as invalid or duplicate "
+#~ "entries) may cause these programs to loop forever or fail in other "
+#~ "strange ways. Please run <command>pwck</command> and <command>grpck</"
+#~ "command> to correct any such errors before converting to or from shadow "
+#~ "passwords or groups."
+#~ msgstr ""
+#~ "Des erreurs dans les fichiers de mots de passe ou d'informations sur les "
+#~ "groupes (comme des entrées invalides ou redondantes) peuvent conduire ces "
+#~ "programmes à boucler indéfiniment ou à échouer d'une manière tout aussi "
+#~ "étrange. Veuillez exécuter <command>pwck</command> et <command>grpck</"
+#~ "command> pour corriger ces erreurs avant de lancer toute conversion."
+
+#~ msgid ""
+#~ "The following configuration variable in <filename>/etc/login.defs</"
+#~ "filename> changes the behavior of <command>grpconv</command> and "
+#~ "<command>grpunconv</command>:"
+#~ msgstr ""
+#~ "La variable de configuration suivante dans <filename>/etc/login.defs</"
+#~ "filename> change le comportement de <command>grpconv</command> et "
+#~ "<command>grpunconv</command> :"
+
+#~ msgid ""
+#~ "The following configuration variables in <filename>/etc/login.defs</"
+#~ "filename> change the behavior of <command>pwconv</command>:"
+#~ msgstr ""
+#~ "Les variables de configuration suivantes dans <filename>/etc/login.defs</"
+#~ "filename> changent le comportement de <command>pwconv</command> :"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry><phrase condition=\"tcb\">, "
+#~ "<citerefentry><refentrytitle>tcb_convert</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>tcb_unconvert</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry></phrase>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry><phrase condition=\"tcb\">, "
+#~ "<citerefentry><refentrytitle>tcb_convert</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>tcb_unconvert</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry></phrase>."
+
+#~ msgid "Creation, 1992"
+#~ msgstr "Création, 1992"
+
+#~ msgid "pwck"
+#~ msgstr "pwck"
+
+#~ msgid "verify integrity of password files"
+#~ msgstr "Vérifier l'intégrité des fichiers de mots de passe"
+
+#~ msgid ""
+#~ "The <command>pwck</command> command verifies the integrity of the users "
+#~ "and authentication information. It checks that all entries in <filename>/"
+#~ "etc/passwd</filename> and <filename>/etc/shadow</filename><phrase "
+#~ "condition=\"tcb\">(or the files in <filename>/etc/tcb</filename>, when "
+#~ "<option>USE_TCB</option> is enabled)</phrase> have the proper format and "
+#~ "contain valid data. The user is prompted to delete entries that are "
+#~ "improperly formatted or which have other uncorrectable errors."
+#~ msgstr ""
+#~ "La commande <command>pwck</command> vérifie l'intégrité des informations "
+#~ "du système concernant les utilisateurs et leur mots de passe. Toutes les "
+#~ "entrées des fichiers <filename>/etc/passwd</filename> et <filename>/etc/"
+#~ "shadow</filename> sont vérifiées afin de s'assurer qu'elles ont le bon "
+#~ "format et qu'elles contiennent des données valables dans chaque champ. "
+#~ "Une confirmation de l'utilisateur sera demandée pour détruire les entrées "
+#~ "mal formatées ou ayant d'autres erreurs non récupérables."
+
+#~ msgid "Checks are made to verify that each entry has:"
+#~ msgstr "Voici les vérifications effectuées :"
+
+#~ msgid "the correct number of fields"
+#~ msgstr "nombre correct de champs ;"
+
+#~ msgid "a valid user and group identifier"
+#~ msgstr "validité des identifiants d'utilisateur et de groupe ;"
+
+#~ msgid "a valid primary group"
+#~ msgstr "validité du groupe primaire ;"
+
+#~ msgid ""
+#~ "<filename>shadow</filename> checks are enabled when a second file "
+#~ "parameter is specified or when <filename>/etc/shadow</filename> exists on "
+#~ "the system."
+#~ msgstr ""
+#~ "Les vérifications de <filename>shadow</filename> sont activées quand un "
+#~ "second paramètre de fichier est indiqué ou quand <filename>/etc/shadow</"
+#~ "filename> existe sur le système."
+
+#~ msgid "These checks are the following:"
+#~ msgstr "Ces vérifications sont les suivantes :"
+
+#~ msgid ""
+#~ "every passwd entry has a matching shadow entry, and every shadow entry "
+#~ "has a matching passwd entry"
+#~ msgstr ""
+#~ "chaque entrée de passwd a une entrée correspondante dans shadow, et "
+#~ "chaque entrée shadow a une entrée passwd correspondante ;"
+
+#~ msgid "passwords are specified in the shadowed file"
+#~ msgstr ""
+#~ "les mots de passe sont indiqués dans le fichier des mot de passe cachés ;"
+
+#~ msgid "shadow entries have the correct number of fields"
+#~ msgstr "les entrées de shadow ont le bon nombre de champs ;"
+
+#~ msgid "shadow entries are unique in shadow"
+#~ msgstr "les entrées de shadow sont uniques dans shadow ;"
+
+#~ msgid ""
+#~ "The checks for correct number of fields and unique user name are fatal. "
+#~ "If the entry has the wrong number of fields, the user will be prompted to "
+#~ "delete the entire line. If the user does not answer affirmatively, all "
+#~ "further checks are bypassed. An entry with a duplicated user name is "
+#~ "prompted for deletion, but the remaining checks will still be made. All "
+#~ "other errors are warning and the user is encouraged to run the "
+#~ "<command>usermod</command> command to correct the error."
+#~ msgstr ""
+#~ "Une erreur dans le nombre de champs ou la non unicité d'un nom "
+#~ "d'utilisateur sera fatale. Si le nombre de champs n'est pas correct, il "
+#~ "sera demandé à l'utilisateur de supprimer la ligne. Si l'utilisateur ne "
+#~ "répond pas par l'affirmative, les vérifications suivantes ne seront pas "
+#~ "effectuées. Il sera également demandé de supprimer les entrées "
+#~ "correspondant aux noms d'utilisateur redondants, mais dans ce cas, les "
+#~ "autres vérifications seront effectuées. Toutes les autres erreurs ne sont "
+#~ "que des avertissements et l'utilisateur est encouragé à utiliser "
+#~ "<command>usermod</command> pour les corriger."
+
+#~ msgid ""
+#~ "The commands which operate on the <filename>/etc/passwd</filename> file "
+#~ "are not able to alter corrupted or duplicated entries. <command>pwck</"
+#~ "command> should be used in those circumstances to remove the offending "
+#~ "entry."
+#~ msgstr ""
+#~ "Les commandes qui opèrent sur le fichier <filename>/etc/passwd</filename> "
+#~ "ne peuvent pas modifier les entrées corrompues ou redondantes. "
+#~ "<command>pwck</command> doit être utilisé dans ce cas pour retirer ces "
+#~ "entrées."
+
+#~ msgid ""
+#~ "The <option>-r</option> and <option>-s</option> options cannot be "
+#~ "combined."
+#~ msgstr ""
+#~ "Les options <option>-r</option> et <option>-s</option> ne peuvent pas "
+#~ "être combinées."
+
+#~ msgid "The options which apply to the <command>pwck</command> command are:"
+#~ msgstr ""
+#~ "Les options disponibles pour la commande <command>pwck</command> sont :"
+
+#~ msgid ""
+#~ "Report errors only. The warnings which do not require any action from the "
+#~ "user won't be displayed."
+#~ msgstr ""
+#~ "Ne signaler que les erreurs. Les avertissements qui ne nécessitent pas "
+#~ "une action de la part de l'utilisateur ne seront pas affichés."
+
+#~ msgid "<option>-r</option>, <option>--read-only</option>"
+#~ msgstr "<option>-r</option>, <option>--read-only</option>"
+
+#~ msgid "Execute the <command>pwck</command> command in read-only mode."
+#~ msgstr ""
+#~ "Permet d'exécuter <command>pwck</command> dans le mode lecture seule."
+
+#~ msgid "<option>-s</option>, <option>--sort</option>"
+#~ msgstr "<option>-s</option>, <option>--sort</option>"
+
+#~ msgid ""
+#~ "Sort entries in <filename>/etc/passwd</filename> and <filename>/etc/"
+#~ "shadow</filename> by UID."
+#~ msgstr ""
+#~ "Trie les entrées de <filename>/etc/passwd</filename> et <filename>/etc/"
+#~ "shadow</filename> par UID."
+
+#~ msgid "This option has no effect when <option>USE_TCB</option> is enabled."
+#~ msgstr ""
+#~ "Cette option n'a aucun effet quand <option>USE_TCB</option> est activée."
+
+#~ msgid ""
+#~ "By default, <command>pwck</command> operates on the files <filename>/etc/"
+#~ "passwd</filename> and <filename>/etc/shadow</filename><phrase condition="
+#~ "\"tcb\"> (or the files in <filename>/etc/tcb</filename>)</phrase>. The "
+#~ "user may select alternate files with the <replaceable>passwd</"
+#~ "replaceable> and <replaceable>shadow</replaceable> parameters."
+#~ msgstr ""
+#~ "Par défaut, <command>pwck</command> opère sur les fichiers <filename>/etc/"
+#~ "passwd</filename> et <filename>/etc/shadow</filename><phrase condition="
+#~ "\"tcb> (ou les fichiers dans <filename>/etc/tcb</filename>)</phrase>. "
+#~ "L'utilisateur peut spécifier d'autres fichiers avec les paramètres "
+#~ "<replaceable>passwd</replaceable> et <replaceable>shadow</replaceable>."
+
+#~ msgid ""
+#~ "Note that when <option>USE_TCB</option> is enabled, you cannot specify an "
+#~ "alternative <replaceable>shadow</replaceable> file. In future releases, "
+#~ "this paramater could be replaced by an alternate TCB directory."
+#~ msgstr ""
+#~ "Veuillez noter que quand <option>USE_TCB</option> est activée, vous ne "
+#~ "pouvez pas indiquer de fichier <replaceable>shadow</replaceable> "
+#~ "alternatif. Dans les prochaines versions, ce paramètre pourra être "
+#~ "remplacé par un répertoire TCB alternatif."
+
+#~ msgid "one or more bad password entries"
+#~ msgstr "une entrée de mot de passe ou plus est incorrecte"
+
+#~ msgid "can't lock password files"
+#~ msgstr "impossible de verrouiller les fichiers de mots de passe"
+
+#~ msgid "can't update password files"
+#~ msgstr "impossible de mettre à jour les fichiers des mots de passe"
+
+#~ msgid ""
+#~ "The <command>pwck</command> command exits with the following values: "
+#~ "<placeholder-1/>"
+#~ msgstr ""
+#~ "La commande <command>pwck</command> retourne les valeurs suivantes en "
+#~ "quittant : <placeholder-1/>"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>grpck</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>grpck</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "porttime"
+#~ msgstr "porttime"
+
+#~ msgid "port access time file"
+#~ msgstr ""
+#~ "Fichier de configuration des droits d'accès en fonction de la date et de "
+#~ "l'heure"
+
+#~ msgid ""
+#~ "<emphasis remap=\"I\">porttime</emphasis> contains a list of tty devices, "
+#~ "user names, and permitted login times."
+#~ msgstr ""
+#~ "<emphasis remap=\"I\">porttime</emphasis> contient une liste de tty, noms "
+#~ "d'utilisateurs, et horaires d'accès autorisés."
+
+#~ msgid ""
+#~ "Each entry consists of three colon separated fields. The first field is a "
+#~ "comma separated list of tty devices, or an asterisk to indicate that all "
+#~ "tty devices are matched by this entry. The second field is a comma "
+#~ "separated list of user names, or an asterisk to indicated that all user "
+#~ "names are matched by this entry. The third field is a comma separated "
+#~ "list of permitted access times."
+#~ msgstr ""
+#~ "Chaque entrée consiste en trois champs séparés par un caractère deux-"
+#~ "points « : ». Le premier champ est une liste de tty séparés par des "
+#~ "virgules, ou un astérisque « * » pour indiquer que l'entrée correspond à "
+#~ "toutes les tty. Le second champ est une liste de noms d'utilisateurs, ou "
+#~ "un astérisque pour indiquer que cette entrée correspond à n'importe quel "
+#~ "utilisateur. Le troisième champ est une liste d'horaires d'accès "
+#~ "autorisés."
+
+#~ msgid ""
+#~ "Each access time entry consists of zero or more days of the week, "
+#~ "abbreviated <emphasis>Su</emphasis>, <emphasis>Mo</emphasis>, "
+#~ "<emphasis>Tu</emphasis>, <emphasis>We</emphasis>, <emphasis>Th</"
+#~ "emphasis>, <emphasis>Fr</emphasis>, and <emphasis>Sa</emphasis>, followed "
+#~ "by a pair of times separated by a hyphen. The abbreviation <emphasis>Wk</"
+#~ "emphasis> may be used to represent Monday thru Friday, and <emphasis>Al</"
+#~ "emphasis> may be used to indicate every day. If no days are given, "
+#~ "<emphasis>Al</emphasis> is assumed."
+#~ msgstr ""
+#~ "Chaque horaire d'accès consiste en zéro ou plusieurs abréviations de "
+#~ "jours de la semaine : <emphasis>Su</emphasis> (dimanche), <emphasis>Mo</"
+#~ "emphasis> (lundi), <emphasis>Tu</emphasis> (mardi), <emphasis>We</"
+#~ "emphasis> (mercredi), <emphasis>Th</emphasis> (jeudi), <emphasis>Fr</"
+#~ "emphasis> (vendredi), <emphasis>Sa</emphasis> (samedi), suivi d'un couple "
+#~ "d'horaires séparés par un tiret. L'abréviation <emphasis>Wk</emphasis> "
+#~ "peut être utilisée pour représenter les jours de la semaine du lundi au "
+#~ "vendredi, et <emphasis>Al</emphasis> permet de spécifier l'ensemble des "
+#~ "jours de la semaine. Par défaut, si aucun jour n'est spécifié, "
+#~ "<emphasis>Al</emphasis> est utilisé."
+
+#~ msgid "EXAMPLES"
+#~ msgstr "EXEMPLES"
+
+#~ msgid ""
+#~ "The following entry allows access to user <emphasis remap=\"B\">jfh</"
+#~ "emphasis> on every port during weekdays from 9am to 5pm."
+#~ msgstr ""
+#~ "L'entrée suivante autorise l'accès à l'utilisateur <emphasis remap=\"B"
+#~ "\">jfh</emphasis> sur n'importe quel port pendant la semaine de 9 heures "
+#~ "à 17 heures."
+
+#~ msgid "*:jfh:Wk0900-1700"
+#~ msgstr "*:jfh:Wk0900-1700"
+
+#~ msgid ""
+#~ "The following entries allow access only to the users <emphasis>root</"
+#~ "emphasis> and <emphasis>oper</emphasis> on <filename>/dev/console</"
+#~ "filename> at any time. This illustrates how the <filename>/etc/porttime</"
+#~ "filename> file is an ordered list of access times. Any other user would "
+#~ "match the second entry which does not permit access at any time."
+#~ msgstr ""
+#~ "L'entrée suivante autorise l'accès à /dev/console uniquement aux "
+#~ "utilisateurs <emphasis>root</emphasis> et <emphasis>oper</emphasis> à "
+#~ "n'importe quelle heure. Ceci permet de montrer l'importance de l'ordre "
+#~ "des entrées dans le fichier <filename>/etc/porttime</filename>. Les "
+#~ "autres utilisateurs ne satisferont que la deuxième entrée, qui n'autorise "
+#~ "aucun accès."
+
+#~ msgid ""
+#~ "\n"
+#~ " console:root,oper:Al0000-2400\n"
+#~ " console:*:\n"
+#~ " "
+#~ msgstr ""
+#~ "\n"
+#~ " console:root,oper:Al0000-2400\n"
+#~ " console:*:\n"
+#~ " "
+
+#~ msgid ""
+#~ "The following entry allows access for the user <emphasis>games</emphasis> "
+#~ "on any port during non-working hours."
+#~ msgstr ""
+#~ "L'entrée suivante autorise l'accès à tous les ports pour l'utilisateur "
+#~ "<emphasis>games</emphasis>, en dehors des heures de travail."
+
+#~ msgid "*:games:Wk1700-0900,SaSu0000-2400"
+#~ msgstr "*:games:Wk1700-0900,SaSu0000-2400"
+
+#~ msgid "/etc/porttime"
+#~ msgstr "/etc/porttime"
+
+#~ msgid "File containing port access."
+#~ msgstr "Fichier contenant le port d'accès."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<filename>/etc/passwd</filename> contains one line for each user account, "
+#~ "with seven fields delimited by colons (<quote>:</quote>). These fields "
+#~ "are:"
+#~ msgstr ""
+#~ "<filename>/etc/passwd</filename> contient différentes informations sur "
+#~ "les comptes utilisateurs. Ces informations consistent en sept champs "
+#~ "séparés par des deux-points (« : ») :"
+
+#~ msgid "optional encrypted password"
+#~ msgstr "un mot de passe chiffré optionnel"
+
+#~ msgid "numerical user ID"
+#~ msgstr "l'identifiant numérique de l'utilisateur"
+
+#~ msgid "numerical group ID"
+#~ msgstr "l'identifiant numérique du groupe de l'utilisateur"
+
+#~ msgid "user name or comment field"
+#~ msgstr "le nom complet de l'utilisateur ou un champ de commentaires"
+
+#~ msgid "user home directory"
+#~ msgstr "le répertoire personnel de l'utilisateur"
+
+#~ msgid "optional user command interpreter"
+#~ msgstr "l'interpréteur de commandes de l'utilisateur (optionnel)"
+
+#~ msgid ""
+#~ "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 <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>."
+#~ msgstr ""
+#~ "Le champ du mot de passe chiffré peut être vide. Dans ce cas, aucun mot "
+#~ "de passe n'est nécessaire pour s'authentifier avec le compte donné. "
+#~ "Cependant, certaines applications qui lisent le fichier <filename>/etc/"
+#~ "passwd</filename> peuvent décider de ne donner aucun accès si le "
+#~ "<emphasis>mot de</emphasis> passe est vide. Si le mot de passe est un "
+#~ "<quote>x</quote> minuscule, alors le mot de passe chiffré se trouve dans "
+#~ "le fichier <citerefentry><refentrytitle>shadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry> ; il "
+#~ "<emphasis>doit</emphasis> y avoir une ligne correspondante dans le "
+#~ "fichier <filename>shadow</filename>, sinon le compte de l'utilisateur "
+#~ "n'est pas valide. Si le mot de passe est constitué d'une autre chaîne, "
+#~ "alors il est considéré comme un mot de passe chiffré, comme indiqué dans "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "The comment field is used by various system utilities, such as "
+#~ "<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "Le champ de commentaire est utilisé par différents utilitaires système, "
+#~ "tels que <citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "The home directory field provides the name of the initial working "
+#~ "directory. The <command>login</command> program uses this information to "
+#~ "set the value of the <envar>$HOME</envar> environmental variable."
+#~ msgstr ""
+#~ "Le champ du répertoire personnel de l'utilisateur correspond au nom du "
+#~ "répertoire de travail initial. <command>login</command> utilise cette "
+#~ "information pour définir la valeur de la variable d'environnement <envar>"
+#~ "$HOME</envar>."
+
+#~ msgid ""
+#~ "The command interpreter field provides the name of the user's command "
+#~ "language interpreter, or the name of the initial program to execute. The "
+#~ "<command>login</command> program uses this information to set the value "
+#~ "of the <envar>$SHELL</envar> environmental variable. If this field is "
+#~ "empty, it defaults to the value <filename>/bin/sh</filename>."
+#~ msgstr ""
+#~ "Le champ de l'interpréteur de commandes correspond au nom de "
+#~ "l'interpréteur de commandes de l'utilisateur, ou au nom d'un programme "
+#~ "initial à exécuter. <command>login</command> utilise cette information "
+#~ "pour définir la valeur de la variable d'environnement <envar>$SHELL</"
+#~ "envar>. Si ce champ est vide, <filename>/bin/sh</filename> est utilisé "
+#~ "par défaut."
+
+# TBC: file ?
+#~ msgid "optional encrypted password file"
+#~ msgstr "un mot de passe chiffré optionnel"
+
+#~ msgid "/etc/passwd-"
+#~ msgstr "/etc/passwd-"
+
+#~ msgid "Backup file for /etc/passwd."
+#~ msgstr "Fichier de sauvegarde de /etc/passwd."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>getent</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>getpwnam</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwunconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>getent</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>getpwnam</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwunconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ 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 ""
+#~ "La commande <command>passwd</command> modifie les mots de passe des "
+#~ "comptes d'utilisateurs. Un utilisateur normal ne peut changer que son "
+#~ "propre mot de passe, alors que le superutilisateur peut changer le mot de "
+#~ "passe associé à n'importe quel compte. <command>passwd</command> modifie "
+#~ "également les dates de fin de validité du compte ou du mot de passe "
+#~ "associé."
+
+#~ 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 ""
+#~ "Dans un premier temps, l'utilisateur doit fournir son ancien mot de "
+#~ "passe, s'il en avait un. Ce mot de passe est ensuite chiffré puis comparé "
+#~ "avec le mot de passe enregistré. L'utilisateur n'a droit qu'à un seul "
+#~ "essai pour entrer le mot de passe correct. Le superutilisateur peut "
+#~ "contourner cette première étape de manière à changer les mots de passe "
+#~ "ayant été oubliés."
+
+#~ msgid ""
+#~ "After the password has been entered, password aging information is "
+#~ "checked to see if the user is permitted to change the password at this "
+#~ "time. If not, <command>passwd</command> refuses to change the password "
+#~ "and exits."
+#~ msgstr ""
+#~ "Une fois que le mot de passe a été entré, les informations de limite de "
+#~ "validité du mot de passe sont vérifiées pour s'assurer que l'utilisateur "
+#~ "est autorisé à modifier son mot de passe à cet instant. Dans le cas "
+#~ "contraire, <command>passwd</command> refuse de changer le mot de passe, "
+#~ "et quitte."
+
+#~ msgid ""
+#~ "The user is then prompted twice for a replacement password. The second "
+#~ "entry is compared against the first and both are required to match in "
+#~ "order for the password to be changed."
+#~ msgstr ""
+#~ "Le nouveau mot de passe sera demandé deux fois à l'utilisateur. Le second "
+#~ "mot de passe est comparé avec le premier. Ces deux mots de passe devront "
+#~ "être identiques pour que le mot de passe soit changé."
+
+#~ msgid ""
+#~ "Then, the password is tested for complexity. As a general guideline, "
+#~ "passwords should consist of 6 to 8 characters including one or more "
+#~ "characters from each of the following sets:"
+#~ msgstr ""
+#~ "La complexité de ce mot de passe est alors testée. Comme ligne de "
+#~ "conduite générale, un mot de passe doit toujours être constitué de 6 à 8 "
+#~ "caractères en en choisissant un ou plus parmi chacun des ensembles "
+#~ "suivants :"
+
+#~ msgid "lower case alphabetics"
+#~ msgstr "caractères alphabétiques minuscules"
+
+#~ msgid "digits 0 thru 9"
+#~ msgstr "chiffres de 0 à 9"
+
+#~ msgid "punctuation marks"
+#~ msgstr "marques de ponctuation"
+
+#~ msgid ""
+#~ "Care must be taken not to include the system default erase or kill "
+#~ "characters. <command>passwd</command> will reject any password which is "
+#~ "not suitably complex."
+#~ msgstr ""
+#~ "Il faudra faire attention à ne pas utiliser les caractères de suppression "
+#~ "ou d'effacement. <command>passwd</command> rejettera tout mot de passe "
+#~ "dont la complexité ne sera pas suffisante."
+
+#~ msgid "Hints for user passwords"
+#~ msgstr "Astuces pour les mots de passe"
+
+#~ msgid ""
+#~ "The security of a password depends upon the strength of the encryption "
+#~ "algorithm and the size of the key space. The legacy <emphasis>UNIX</"
+#~ "emphasis> System encryption method is based on the NBS DES algorithm. "
+#~ "More recent methods are now recommended (see <option>ENCRYPT_METHOD</"
+#~ "option>). The size of the key space depends upon the randomness of the "
+#~ "password which is selected."
+#~ msgstr ""
+#~ "La sécurité d'un mot de passe repose sur la force de l'algorithme de "
+#~ "chiffrement et sur la taille de l'espace de clés utilisé. La méthode de "
+#~ "chiffrement des systèmes <emphasis>UNIX</emphasis> est basée sur "
+#~ "l'algorithme NBS DES. Des méthodes plus récentes sont maintenant "
+#~ "recommandées (voir <option>ENCRYPT_METHOD</option>). La taille de "
+#~ "l'espace de clés dépend de l'aléa du mot de passe utilisé."
+
+#~ msgid ""
+#~ "Compromises in password security normally result from careless password "
+#~ "selection or handling. For this reason, you should not select a password "
+#~ "which appears in a dictionary or which must be written down. The password "
+#~ "should also not be a proper name, your license number, birth date, or "
+#~ "street address. Any of these may be used as guesses to violate system "
+#~ "security."
+#~ msgstr ""
+#~ "Les compromissions de la sécurité des mots de passe résultent le plus "
+#~ "souvent d'une négligence dans le choix du mot de passe, ou lors de son "
+#~ "utilisation. Pour cette raison, vous ne devez pas sélectionner de mot de "
+#~ "passe apparaissant dans un dictionnaire ou devant être écrit. Le mot de "
+#~ "passe ne doit pas non plus être un nom propre, un numéro minéralogique, "
+#~ "une date de naissance, ou une adresse. En effet ceux-ci pourraient être "
+#~ "devinés pour violer la sécurité du système."
+
+#~ msgid ""
+#~ "You can find advices on how to choose a strong password on http://en."
+#~ "wikipedia.org/wiki/Password_strength"
+#~ msgstr ""
+#~ "Vous pouvez trouver des conseils sur la façon choisir un mot de passe "
+#~ "robuste sur http://en.wikipedia.org/wiki/Password_strength (en anglais)."
+
+#~ msgid ""
+#~ "The options which apply to the <command>passwd</command> command are:"
+#~ msgstr ""
+#~ "Les options disponibles pour la commande <command>passwd</command> sont :"
+
+#~ msgid "<option>-a</option>, <option>--all</option>"
+#~ msgstr "<option>-a</option>, <option>--all</option>"
+
+# NOTE: pas clair
+#~ msgid ""
+#~ "This option can be used only with <option>-S</option> and causes show "
+#~ "status for all users."
+#~ msgstr ""
+#~ "Cette option ne peut être utilisée qu'avec <option>-S</option> et permet "
+#~ "d'afficher l'état des mots de passe pour tous les utilisateurs."
+
+#~ msgid "<option>-d</option>, <option>--delete</option>"
+#~ msgstr "<option>-d</option>, <option>--delete</option>"
+
+#~ msgid ""
+#~ "Delete a user's password (make it empty). This is a quick way to disable "
+#~ "a password for an account. It will set the named account passwordless."
+#~ msgstr ""
+#~ "Supprimer le mot de passe (le rendre vide) d'un utilisateur. C'est une "
+#~ "façon rapide de supprimer l'authentification par mot de passe pour un "
+#~ "compte. Il rend le compte indiqué sans mot de passe."
+
+#~ msgid "<option>-e</option>, <option>--expire</option>"
+#~ msgstr "<option>-e</option>, <option>--expire</option>"
+
+#~ 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 ""
+#~ "Annuler immédiatement la validité du mot de passe d'un compte. Ceci "
+#~ "permet d'obliger un utilisateur à changer son mot de passe lors de sa "
+#~ "prochaine connexion."
+
+#~| msgid ""
+#~| "<option>-i</option>, <option>--inactive</option><replaceable>INACTIVE</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-i</option>, <option>--inactive</option>&nbsp;"
+#~ "<replaceable>INACTIVE</replaceable>"
+#~ msgstr ""
+#~ "<option>-i</option>, <option>--inactive</option>&nbsp;"
+#~ "<replaceable>DURÉE_INACTIVITÉ</replaceable>"
+
+# NOTE: Only this user account
+#~ msgid ""
+#~ "This option is used to disable an account after the password has been "
+#~ "expired for a number of days. After a user account has had an expired "
+#~ "password for <replaceable>INACTIVE</replaceable> days, the user may no "
+#~ "longer sign on to the account."
+#~ msgstr ""
+#~ "Cette option permet de désactiver un compte quelques temps après "
+#~ "expiration de son mot de passe. <replaceable>DURÉE_INACTIVITÉ</"
+#~ "replaceable> jours après expiration de son mot de passe, l'utilisateur ne "
+#~ "pourra plus se connecter avec ce compte."
+
+#~ msgid "<option>-k</option>, <option>--keep-tokens</option>"
+#~ msgstr "<option>-k</option>, <option>--keep-tokens</option>"
+
+# NOTE: pas clair
+#~ msgid ""
+#~ "Indicate password change should be performed only for expired "
+#~ "authentication tokens (passwords). The user wishes to keep their non-"
+#~ "expired tokens as before."
+#~ msgstr ""
+#~ "Indiquer que la modification de mot de passe ne sera effectuée que lors "
+#~ "de l'expiration des jetons d'authentification (mots de passe). C'est "
+#~ "utile dans le cas où l'utilisateur voudrait conserver ses jetons "
+#~ "d'authentification encore valables."
+
+#~ msgid "<option>-l</option>, <option>--lock</option>"
+#~ msgstr "<option>-l</option>, <option>--lock</option>"
+
+#~ msgid ""
+#~ "Lock the password of the named account. This option disables a password "
+#~ "by changing it to a value which matches no possible encrypted value (it "
+#~ "adds a ´!´ at the beginning of the password)."
+#~ msgstr ""
+#~ "Verrouiller le mot de passe du compte indiqué. Cette option désactive un "
+#~ "mot de passe en le modifiant par une valeur qui ne correspond pas à un "
+#~ "mot de passe chiffré possible (cela ajoute un « ! » au début du mot de "
+#~ "passe)."
+
+#~ msgid ""
+#~ "Note that this does not disable the account. The user may still be able "
+#~ "to login using another authentication token (e.g. an SSH key). To disable "
+#~ "the account, administrators should use <command>usermod --expiredate 1</"
+#~ "command> (this set the account's expire date to Jan 2, 1970)."
+#~ msgstr ""
+#~ "Veuillez noter que cela ne désactive pas le compte. L'utilisateur peut "
+#~ "toujours se connecter en utilisant une autre méthode d'authentification "
+#~ "(par exemple une clé SSH). Pour désactiver un compte, les administrateurs "
+#~ "devraient utiliser <command>usermod --expiredate 1</command> (cela "
+#~ "définit la date d'expiration du compte au 2 janvier 1970)."
+
+#~ msgid ""
+#~ "Users with a locked password are not allowed to change their password."
+#~ msgstr ""
+#~ "Les utilisateurs avec un mot de passe verrouillé ne sont pas autorisés à "
+#~ "le changer."
+
+#~| msgid ""
+#~| "<option>-n</option>, <option>--mindays</option><replaceable>MIN_DAYS</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-n</option>, <option>--mindays</option>&nbsp;"
+#~ "<replaceable>MIN_DAYS</replaceable>"
+#~ msgstr ""
+#~ "<option>-n</option>, <option>--mindays</option>&nbsp;"
+#~ "<replaceable>JOURS_MIN</replaceable>"
+
+#~ 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 ""
+#~ "Définir le nombre minimum de jours entre chaque changement de mot de "
+#~ "passe à <replaceable>MIN_DAYS</replaceable>. Une valeur de zéro pour ce "
+#~ "champ indique que l'utilisateur peut changer son mot de passe quand il le "
+#~ "souhaite."
+
+#~| msgid ""
+#~| "<option>-r</option>, <option>--repository</"
+#~| "option><replaceable>REPOSITORY</replaceable>"
+#~ msgid ""
+#~ "<option>-r</option>, <option>--repository</option>&nbsp;"
+#~ "<replaceable>REPOSITORY</replaceable>"
+#~ msgstr ""
+#~ "<option>-r</option>, <option>--repository</option>&nbsp;"
+#~ "<replaceable>REPOSITORY</replaceable>"
+
+#~ msgid "change password in <replaceable>REPOSITORY</replaceable> repository"
+#~ msgstr ""
+#~ "Modifier le mot de passe dans la base <replaceable>REPOSITORY</"
+#~ "replaceable>"
+
+#~ msgid "<option>-S</option>, <option>--status</option>"
+#~ msgstr "<option>-S</option>, <option>--status</option>"
+
+#~ msgid ""
+#~ "Display account status information. The status information consists of 7 "
+#~ "fields. The first field is the user's login name. The second field "
+#~ "indicates if the user account has a locked password (L), has no password "
+#~ "(NP), or has a usable password (P). The third field gives the date of the "
+#~ "last password change. The next four fields are the minimum age, maximum "
+#~ "age, warning period, and inactivity period for the password. These ages "
+#~ "are expressed in days."
+#~ msgstr ""
+#~ "Afficher l'état d'un compte. Cet état est constitué de 7 champs. Le "
+#~ "premier champ est le nom du compte. Le second champ indique si le mot de "
+#~ "passe est bloqué (L), n'a pas de mot de passe (NP) ou a un mot de passe "
+#~ "utilisable (P). Le troisième champ donne la date de dernière modification "
+#~ "du mot de passe. Les quatre champs suivants sont : la durée minimum avant "
+#~ "modification, la durée maximum de validité, la durée d'avertissement, et "
+#~ "la durée d'inactivité autorisée pour le mot de passe. Les durées sont "
+#~ "exprimées en jours."
+
+#~ msgid "<option>-u</option>, <option>--unlock</option>"
+#~ msgstr "<option>-u</option>, <option>--unlock</option>"
+
+#~ msgid ""
+#~ "Unlock the password of the named account. This option re-enables a "
+#~ "password by changing the password back to its previous value (to the "
+#~ "value before using the <option>-l</option> option)."
+#~ msgstr ""
+#~ "Déverrouiller le mot de passe du compte indiqué. Cette option réactive un "
+#~ "mot de passe en remettant le mot de passe à sa valeur précédente (la "
+#~ "valeur présente avant l'utilisation de l'option <option>-l</option>)."
+
+#~| msgid ""
+#~| "<option>-w</option>, <option>--warndays</option><replaceable>WARN_DAYS</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-w</option>, <option>--warndays</option>&nbsp;"
+#~ "<replaceable>WARN_DAYS</replaceable>"
+#~ msgstr ""
+#~ "<option>-w</option>, <option>--warndays</option>&nbsp;"
+#~ "<replaceable>DURÉE_AVERTISSEMENT</replaceable>"
+
+#~ 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 ""
+#~ "Configurer le nombre de jours d'avertissement avant que le changement de "
+#~ "mot de passe ne soit obligatoire. La valeur "
+#~ "<replaceable>DURÉE_AVERTISSEMENT</replaceable> est le nombre de jours "
+#~ "précédant la fin de validité pendant lesquels un utilisateur sera prévenu "
+#~ "que son mot de passe est sur le point d'arriver en fin de validité."
+
+#~| msgid ""
+#~| "<option>-x</option>, <option>--maxdays</option><replaceable>MAX_DAYS</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-x</option>, <option>--maxdays</option>&nbsp;"
+#~ "<replaceable>MAX_DAYS</replaceable>"
+#~ msgstr ""
+#~ "<option>-x</option>, <option>--maxdays</option>&nbsp;"
+#~ "<replaceable>JOURS_MAX</replaceable>"
+
+#~ msgid ""
+#~ "Set the maximum number of days a password remains valid. After "
+#~ "<replaceable>MAX_DAYS</replaceable>, the password is required to be "
+#~ "changed."
+#~ msgstr ""
+#~ "Configurer le nombre maximum de jours pendant lesquels un mot de passe "
+#~ "reste valable. Après <replaceable>JOURS_MAX</replaceable>, le mot de "
+#~ "passe devra être modifié."
+
+#~ msgid ""
+#~ "Password complexity checking may vary from site to site. The user is "
+#~ "urged to select a password as complex as he or she feels comfortable with."
+#~ msgstr ""
+#~ "La vérification de la complexité des mots de passe peut varier d'un site "
+#~ "à l'autre. Il est vivement conseillé aux utilisateurs de choisir un mot "
+#~ "de passe aussi complexe que possible dans la limite de ce qu'il est "
+#~ "capable de mémoriser. "
+
+#~ msgid ""
+#~ "Users may not be able to change their password on a system if NIS is "
+#~ "enabled and they are not logged into the NIS server."
+#~ msgstr ""
+#~ "Il se peut que les utilisateurs ne puissent pas changer leur mot de passe "
+#~ "sur un système si NIS est activé et qu'ils ne sont pas connectés au "
+#~ "serveur NIS."
+
+#~ msgid ""
+#~ "<command>passwd</command> uses PAM to authenticate users and to change "
+#~ "their passwords."
+#~ msgstr ""
+#~ "<command>passwd</command> utilise PAM pour authentifier les utilisateurs "
+#~ "et modifier leur mot de passe."
+
+#~ msgid "<option>ENCRYPT_METHOD</option> (string)"
+#~ msgstr "<option>ENCRYPT_METHOD</option> (chaîne de caractères)"
+
+#~ msgid ""
+#~ "This defines the system default encryption algorithm for encrypting "
+#~ "passwords (if no algorithm are specified on the command line)."
+#~ msgstr ""
+#~ "Définir les algorithmes de chiffrement par défaut du système pour coder "
+#~ "les mots de passes (si aucun algorithme n'a été indiqué sur la ligne de "
+#~ "commandes)."
+
+#~ msgid ""
+#~ "It can take one of these values: <replaceable>DES</replaceable> "
+#~ "(default), <replaceable>MD5</replaceable><phrase condition=\"sha_crypt"
+#~ "\">, <replaceable>SHA256</replaceable>, <replaceable>SHA512</"
+#~ "replaceable></phrase>."
+#~ msgstr ""
+#~ "Les valeurs suivantes sont acceptées : <replaceable>DES</replaceable> "
+#~ "(par défaut), <replaceable>MD5</replaceable><phrase condition=\"sha_crypt"
+#~ "\">, <replaceable>SHA256</replaceable>, <replaceable>SHA512</"
+#~ "replaceable></phrase>."
+
+#~ msgid ""
+#~ "Note: this parameter overrides the <option>MD5_CRYPT_ENAB</option> "
+#~ "variable."
+#~ msgstr ""
+#~ "Remarque : ce paramètre remplace la variable <option>MD5_CRYPT_ENAB</"
+#~ "option>."
+
+#~ msgid ""
+#~ "Note: This only affect the generation of group passwords. The generation "
+#~ "of user passwords is done by PAM and subject to the PAM configuration. It "
+#~ "is recommended to set this variable consistently with the PAM "
+#~ "configuration."
+#~ msgstr ""
+#~ "Remarque : cela n'affecte que la création des mots de passe de groupe. La "
+#~ "création de mot de passe des utilisateurs est effectuée par PAM en "
+#~ "fonction de la configuration de PAM. Il est recommandé de définir cette "
+#~ "variable en cohérence avec la configuration de PAM."
+
+#~ msgid "<option>MD5_CRYPT_ENAB</option> (boolean)"
+#~ msgstr "<option>MD5_CRYPT_ENAB</option> (booléen)"
+
+#~ msgid ""
+#~ "Indicate if passwords must be encrypted using the MD5-based algorithm. If "
+#~ "set to <replaceable>yes</replaceable>, new passwords will be encrypted "
+#~ "using the MD5-based algorithm compatible with the one used by recent "
+#~ "releases of FreeBSD. It supports passwords of unlimited length and longer "
+#~ "salt strings. Set to <replaceable>no</replaceable> if you need to copy "
+#~ "encrypted passwords to other systems which don't understand the new "
+#~ "algorithm. Default is <replaceable>no</replaceable>."
+#~ msgstr ""
+#~ "Indiquer si un mot de passe doit être chiffré en utilisant l'algorithme "
+#~ "basé sur MD5. Si configurée à <replaceable>yes</replaceable>, les "
+#~ "nouveaux mots de passe seront chiffrés en utilisant l'algorithme basé sur "
+#~ "MD5 compatible avec celui utilisé par les versions récentes de FreeBSD. "
+#~ "Il gère des mots de passe de longueur illimitée et des chaînes de salage "
+#~ "plus longues. Configurez-la à <replaceable>no</replaceable> pour copier "
+#~ "les mots de passe chiffrés sur d'autres systèmes qui ne comprennent pas "
+#~ "le nouvel algorithme. la valeur par défaut est <replaceable>no</"
+#~ "replaceable>."
+
+#~ msgid ""
+#~ "This variable is superseded by the <option>ENCRYPT_METHOD</option> "
+#~ "variable or by any command line option used to configure the encryption "
+#~ "algorithm."
+#~ msgstr ""
+#~ "Cette variable est écrasée par la variable <option>ENCRYPT_METHOD</"
+#~ "option> ou par toute option de la ligne de commande utilisée pour "
+#~ "configurer l'algorithme de chiffrement."
+
+#~ msgid ""
+#~ "This variable is deprecated. You should use <option>ENCRYPT_METHOD</"
+#~ "option>."
+#~ msgstr ""
+#~ "Cette variable est obsolète. Vous devriez utiliser "
+#~ "<option>ENCRYPT_METHOD</option>."
+
+#~ msgid "<option>OBSCURE_CHECKS_ENAB</option> (boolean)"
+#~ msgstr "<option>OBSCURE_CHECKS_ENAB</option> (booléen)"
+
+#~ msgid "Enable additional checks upon password changes."
+#~ msgstr ""
+#~ "Activer des vérifications supplémentaires lors des changements de mot de "
+#~ "passe."
+
+#~ msgid "<option>PASS_ALWAYS_WARN</option> (boolean)"
+#~ msgstr "<option>PASS_ALWAYS_WARN</option> (booléen)"
+
+#~ msgid "Warn about weak passwords (but still allow them) if you are root."
+#~ msgstr ""
+#~ "Avertir en cas de mots de passe faibles (mais les accepte quand même) si "
+#~ "vous êtes superutilisateur."
+
+#~ msgid "<option>PASS_CHANGE_TRIES</option> (number)"
+#~ msgstr "<option>PASS_CHANGE_TRIES</option> (nombre)"
+
+#~ msgid ""
+#~ "Maximum number of attempts to change password if rejected (too easy)."
+#~ msgstr ""
+#~ "Nombre maximum d'essais pour changer de mot de passe si refusé (trop "
+#~ "facile)."
+
+#~ msgid "<option>PASS_MAX_LEN</option> (number)"
+#~ msgstr "<option>PASS_MAX_LEN</option> (nombre)"
+
+#~ msgid "<option>PASS_MIN_LEN</option> (number)"
+#~ msgstr "<option>PASS_MIN_LEN</option> (nombre)"
+
+#~ msgid ""
+#~ "Number of significant characters in the password for crypt(). "
+#~ "<option>PASS_MAX_LEN</option> is 8 by default. Don't change unless your "
+#~ "crypt() is better. This is ignored if <option>MD5_CRYPT_ENAB</option> set "
+#~ "to <replaceable>yes</replaceable>."
+#~ msgstr ""
+#~ "Nombre de caractères significatifs dans le mot de passe pour crypt(). La "
+#~ "valeur par défaut de <option>PASS_MAX_LEN</option> est 8. Ne la changez "
+#~ "pas à moins que votre crypt() ne soit meilleur. Ceci est ignoré si "
+#~ "<option>MD5_CRYPT_ENAB</option> est configurée à <replaceable>yes</"
+#~ "replaceable>."
+
+#~ msgid "<option>SHA_CRYPT_MIN_ROUNDS</option> (number)"
+#~ msgstr "<option>SHA_CRYPT_MIN_ROUNDS</option> (nombre)"
+
+#~ msgid "<option>SHA_CRYPT_MAX_ROUNDS</option> (number)"
+#~ msgstr "<option>SHA_CRYPT_MAX_ROUNDS</option> (nombre)"
+
+#~ msgid ""
+#~ "When <option>ENCRYPT_METHOD</option> is set to <replaceable>SHA256</"
+#~ "replaceable> or <replaceable>SHA512</replaceable>, this defines the "
+#~ "number of SHA rounds used by the encryption algorithm by default (when "
+#~ "the number of rounds is not specified on the command line)."
+#~ msgstr ""
+#~ "Quand <option>ENCRYPT_METHOD</option> est configurée à "
+#~ "<replaceable>SHA256</replaceable> ou <replaceable>SHA512</replaceable>, "
+#~ "cela définit le nombre de rounds de SHA utilisés par l'algorithme de "
+#~ "chiffrement par défaut (quand le nombre de rounds n'est pas précisé sur "
+#~ "la ligne de commande)."
+
+#~ msgid ""
+#~ "With a lot of rounds, it is more difficult to brute forcing the password. "
+#~ "But note also that more CPU resources will be needed to authenticate "
+#~ "users."
+#~ msgstr ""
+#~ "Avec beaucoup de rounds, il est plus difficile de trouver le mot de passe "
+#~ "avec une attaque par force brute. Veuillez remarquer que plus de "
+#~ "ressources processeur seront nécessaires pour authentifier les "
+#~ "utilisateurs."
+
+#~ msgid ""
+#~ "If not specified, the libc will choose the default number of rounds "
+#~ "(5000)."
+#~ msgstr ""
+#~ "Si non précisée, la libc utilisera le nombre de rounds par défaut (5000)."
+
+#~ msgid "The values must be inside the 1000-999,999,999 range."
+#~ msgstr ""
+#~ "Les valeurs doivent être comprises dans l'intervalle 1 000 - 999 999 999."
+
+#~ msgid ""
+#~ "If only one of the <option>SHA_CRYPT_MIN_ROUNDS</option> or "
+#~ "<option>SHA_CRYPT_MAX_ROUNDS</option> values is set, then this value will "
+#~ "be used."
+#~ msgstr ""
+#~ "Si une seule des variables <option>SHA_CRYPT_MIN_ROUNDS</option> ou "
+#~ "<option>SHA_CRYPT_MAX_ROUNDS</option> est configurée, alors cette valeur "
+#~ "sera utilisée."
+
+#~ msgid ""
+#~ "If <option>SHA_CRYPT_MIN_ROUNDS</option> &gt; "
+#~ "<option>SHA_CRYPT_MAX_ROUNDS</option>, the highest value will be used."
+#~ msgstr ""
+#~ "Si <option>SHA_CRYPT_MIN_ROUNDS</option> &gt; "
+#~ "<option>SHA_CRYPT_MAX_ROUNDS</option>, la valeur la plus élevée sera "
+#~ "utilisée."
+
+#~ msgid "/etc/pam.d/passwd"
+#~ msgstr "/etc/pam.d/passwd"
+
+#~ msgid "PAM configuration for <command>passwd</command>."
+#~ msgstr "Configuration de PAM pour <command>passwd</command>."
+
+#~ msgid "invalid combination of options"
+#~ msgstr "combinaison d'options non valable"
+
+#~ msgid "unexpected failure, nothing done"
+#~ msgstr "échec inattendu, rien n'a été fait"
+
+#~ msgid "unexpected failure, <filename>passwd</filename> file missing"
+#~ msgstr ""
+#~ "échec inattendu, le fichier <filename>passwd</filename> est manquant"
+
+#~ msgid "<filename>passwd</filename> file busy, try again"
+#~ msgstr ""
+#~ "fichier <filename>passwd</filename> en cours d'utilisation, veuillez "
+#~ "réessayer plus tard"
+
+#~ msgid ""
+#~ "The <command>passwd</command> command exits with the following values: "
+#~ "<placeholder-1/>"
+#~ msgstr ""
+#~ "La commande <command>passwd</command> retourne les valeurs suivantes en "
+#~ "quittant : <placeholder-1/>"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chpasswd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <phrase condition=\"no_pam"
+#~ "\"><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chpasswd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <phrase condition=\"no_pam"
+#~ "\"><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid "nologin"
+#~ msgstr "nologin"
+
+#~ msgid "politely refuse a login"
+#~ msgstr "refuser poliment une connexion"
+
+#~ msgid ""
+#~ "The <command>nologin</command> command displays a message that an account "
+#~ "is not available and exits non-zero. It is intended as a replacement "
+#~ "shell field for accounts that have been disabled."
+#~ msgstr ""
+#~ "La commande <command>nologin</command> affiche un message indiquant que "
+#~ "le compte n'est pas disponible et retourne avec un code non nul. Elle "
+#~ "peut être placée dans le champ indiquant l'interpréteur de commandes pour "
+#~ "les comptes qui ont été désactivés."
+
+#~ msgid ""
+#~ "To disable all logins, investigate <citerefentry><refentrytitle>nologin</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "Pour désactiver toutes les connexions, veuillez consulter "
+#~ "<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>nologin</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>nologin</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#~ msgid "HISTORY"
+#~ msgstr "HISTORIQUE"
+
+#~ msgid "The <command>nologin</command> command appearred in BSD 4.4."
+#~ msgstr "La commande <command>nologin</command> est apparue avec BSD 4.4."
+
+#~ msgid "newusers"
+#~ msgstr "newusers"
+
+#~ msgid "update and create new users in batch"
+#~ msgstr "Mettre à jour, ou créer de nouveaux utilisateurs par lots"
+
+#~ msgid "file"
+#~ msgstr "fichier"
+
+#~ msgid ""
+#~ "The <command>newusers</command> command reads a <replaceable>file</"
+#~ "replaceable> (or the standard input by default) and uses this information "
+#~ "to update a set of existing users or to create new users. Each line is in "
+#~ "the same format as the standard password file (see "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>) with the exceptions explained below:"
+#~ msgstr ""
+#~ "La commande <command>newusers</command> lit un "
+#~ "<replaceable>fichier<replaceable> (ou l'entrée standard par défaut) et "
+#~ "utilise ces informations pour mettre à jour un groupe d'utilisateurs "
+#~ "existants ou pour créer de nouveaux utilisateurs. Chaque ligne est au "
+#~ "même format que le fichier des mots de passe (consultez "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>) avec les exceptions suivantes :"
+
+#~ msgid "pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell"
+#~ msgstr "pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell"
+
+#~ msgid "pw_name"
+#~ msgstr "pw_name"
+
+#~ msgid "This is the name of the user."
+#~ msgstr "C'est le nom de l'utilisateur."
+
+#~ msgid ""
+#~ "It can be the name of a new user or the name of an existing user (or an "
+#~ "user created before by <command>newusers</command>). In case of an "
+#~ "existing user, the user's information will be changed, otherwise a new "
+#~ "user will be created."
+#~ msgstr ""
+#~ "Il peut s'agir du nom d'un nouvel utilisateur ou du nom d'un utilisateur "
+#~ "existant (ou d'un utilisateur créé précédemment par <command>newusers</"
+#~ "command>). Dans le cas d'un utilisateur existant, les informations de "
+#~ "l'utilisateur seront modifiées, sinon un nouvel utilisateur sera créé."
+
+#~ msgid "pw_passwd"
+#~ msgstr "pw_passwd"
+
+#~ msgid ""
+#~ "This field will be encrypted and used as the new value of the encrypted "
+#~ "password."
+#~ msgstr ""
+#~ "Ce champ sera chiffré et utilisé comme nouvelle valeur du mot de passe "
+#~ "chiffré."
+
+#~ msgid "pw_uid"
+#~ msgstr "pw_uid"
+
+#~ msgid "This field is used to define the UID of the user."
+#~ msgstr "Ce champ est utilisé pour définir l'UID de l'utilisateur."
+
+#~ msgid ""
+#~ "If the field is empty, an new (unused) UID will be defined automatically "
+#~ "by <command>newusers</command>."
+#~ msgstr ""
+#~ "Si ce champ est vide, un nouvel UID (non utilisé) sera défini "
+#~ "automatiquement par <command>newusers</command>."
+
+#~ msgid ""
+#~ "If this field contains a number, this number will be used as the UID."
+#~ msgstr "Si ce champ contient un nombre, ce nombre sera utilisé comme UID."
+
+#~ msgid ""
+#~ "If this field contains the name of an existing user (or the name of an "
+#~ "user created before by <command>newusers</command>), the UID of the "
+#~ "specified user will be used."
+#~ msgstr ""
+#~ "Si ce champ contient le nom d'un utilisateur existant (ou le nom d'un "
+#~ "utilisateur créé précédemment par <command>newusers</command>), l'UID de "
+#~ "l'utilisateur indiqué sera utilisé."
+
+#~ msgid ""
+#~ "If the UID of an existing user is changed, the files ownership of the "
+#~ "user's file should be fixed manually."
+#~ msgstr ""
+#~ "Si l'UID d'un utilisateur existant est modifié, vous devrez configurer "
+#~ "vous-même le propriétaire des fichiers de l'utilisateur."
+
+#~ msgid "pw_gid"
+#~ msgstr "pw_gid"
+
+#~ msgid "This field is used to define the primary group ID for the user."
+#~ msgstr ""
+#~ "Ce champ est utilisé pour définir l'identifiant du groupe primaire de "
+#~ "l'utilisateur."
+
+#~ msgid ""
+#~ "If this field contains the name of an existing group (or a group created "
+#~ "before by <command>newusers</command>), the GID of this group will be "
+#~ "used as the primary group ID for the user."
+#~ msgstr ""
+#~ "Si ce champ contient le nom d'un groupe existant (ou d'un groupe créé "
+#~ "précédemment par <command>newusers</command>), le GID de ce groupe sera "
+#~ "utilisé comme identifiant de groupe primaire pour l'utilisateur."
+
+#~ msgid ""
+#~ "If this field is a number, this number will be used as the primary group "
+#~ "ID of the user. If no groups exist with this GID, a new group will be "
+#~ "created with this GID, and the name of the user."
+#~ msgstr ""
+#~ "Si ce champ est un nombre, ce nombre sera utilisé comme identifiant de "
+#~ "groupe primaire de cet utilisateur. Si aucun groupe n'existe avec ce GID, "
+#~ "un nouveau groupe sera créé avec ce GID et le nom de l'utilisateur."
+
+#~ msgid ""
+#~ "If this field is empty, a new group will be created with the name of the "
+#~ "user and a GID will be automatically defined by <command>newusers</"
+#~ "command> to be used as the primary group ID for the user and as the GID "
+#~ "for the new group."
+#~ msgstr ""
+#~ "Si ce champ est vide, un nouveau groupe sera créé avec le nom de "
+#~ "l'utilisateur et un GID sera automatiquement défini par "
+#~ "<command>newusers</command> pour être utilisé comme identifiant de groupe "
+#~ "primaire pour l'utilisateur et comme GID pour le nouveau groupe."
+
+#~ msgid ""
+#~ "If this field contains the name of a group which does not exist (and was "
+#~ "not created before by <command>newusers</command>), a new group will be "
+#~ "created with the specified name and a GID will be automatically defined "
+#~ "by <command>newusers</command> to be used as the primary group ID for the "
+#~ "user and GID for the new group."
+#~ msgstr ""
+#~ "Si le champ contient le nom d'un groupe qui n'existe pas (et qui n'a pas "
+#~ "été créé précédemment par <command>newusers</command>), un nouveau groupe "
+#~ "sera créé avec le nom indiqué et un GID sera automatiquement défini par "
+#~ "<command>newusers</command> pour être utilisé comme identifiant de groupe "
+#~ "primaire pour l'utilisateur et comme identifiant pour le nouveau groupe."
+
+#~ msgid "pw_gecos"
+#~ msgstr "pw_gecos"
+
+#~ msgid "This field is copied in the GECOS field of the user."
+#~ msgstr "Ce champ est copié dans le champ GECOS de l'utilisateur."
+
+#~ msgid "pw_dir"
+#~ msgstr "pw_dir"
+
+#~ msgid ""
+#~ "If this field does not specify an existing directory, the specified "
+#~ "directory is created, with ownership set to the user being created or "
+#~ "updated and its primary group."
+#~ msgstr ""
+#~ "Si ce champ n'indique pas de répertoire existant, le répertoire indiqué "
+#~ "est créé, avec comme propriétaire l'utilisateur en cours de création ou "
+#~ "mis à jour et son groupe primaire."
+
+#~ msgid ""
+#~ "If the home directory of an existing user is changed, <command>newusers</"
+#~ "command> does not move or copy the content of the old directory to the "
+#~ "new location. This should be done manually."
+#~ msgstr ""
+#~ "Si le répertoire personnel d'un utilisateur existant est modifié, "
+#~ "<command>newusers</command> ne déplace ni ne copie le contenu de l'ancien "
+#~ "répertoire personnel à la nouvelle place. Vous devrez effectuer cela vous-"
+#~ "même."
+
+#~ msgid "pw_shell"
+#~ msgstr "pw_shell"
+
+#~ msgid ""
+#~ "This field defines the shell of the user. No checks are performed on this "
+#~ "field."
+#~ msgstr ""
+#~ "Ce champ définit l'interpréteur de commande de l'utilisateur. Aucune "
+#~ "vérification n'est effectuée sur ce champ."
+
+#~ msgid ""
+#~ "<command>newusers</command> first tries to create or change all the "
+#~ "specified users, and then write these changes to the user or group "
+#~ "databases. If an error occurs (except in the final writes to the "
+#~ "databases), no changes are committed to the databases."
+#~ msgstr ""
+#~ "<command>newusers</command> essayera d'abord de créer ou de modifier tous "
+#~ "les utilisateurs indiqués puis écrira ces modifications dans les bases de "
+#~ "données d'utilisateurs et de groupes. Si une erreur survient (en dehors "
+#~ "de l'écriture finale des bases de données), aucune modification ne sera "
+#~ "propagée dans les bases de données."
+
+#~ msgid ""
+#~ "During this first pass, users are created with a locked password (and "
+#~ "passwords are not changed for the users which are not created). A second "
+#~ "pass is used to update the passwords using PAM. Failures to update a "
+#~ "password are reported, but will not stop the other password updates."
+#~ msgstr ""
+#~ "Lors du premier passage, les utilisateurs sont créés avec un mot de passe "
+#~ "verrouillé (les mots de passe ne sont pas modifiés pour les utilisateurs "
+#~ "non créés). Un second passage est utilisé pour mettre à jour les mots de "
+#~ "passe en utilisant PAM. Les échecs de mise à jour des mots de passe sont "
+#~ "signalés, mais n'empêchent pas les mises à jour des autres mots de passe."
+
+#~ msgid ""
+#~ "This command is intended to be used in a large system environment where "
+#~ "many accounts are updated at a single time."
+#~ msgstr ""
+#~ "Cette commande a été conçue pour les gros systèmes pour lesquels un grand "
+#~ "nombre de comptes sont mis à jour en même temps."
+
+#~ msgid ""
+#~ "The options which apply to the <command>newusers</command> command are:"
+#~ msgstr ""
+#~ "Les options disponibles pour la commande <command>newusers</command> "
+#~ "sont :"
+
+#~ msgid "<option>-c</option>, <option>--crypt-method</option>"
+#~ msgstr "<option>-c</option>, <option>--crypt-method</option>"
+
+#~ msgid "Use the specified method to encrypt the passwords."
+#~ msgstr "Utiliser la méthode précisée pour chiffrer les mots de passe."
+
+#~ msgid ""
+#~ "The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your "
+#~ "libc support these methods."
+#~ msgstr ""
+#~ "Les méthodes disponibles sont DES, MD5, NONE et SHA256 ou SHA512 si votre "
+#~ "libc prend en charge ces méthodes."
+
+#~ msgid ""
+#~ "System users will be created with no aging information in <filename>/etc/"
+#~ "shadow</filename>, and their numeric identifiers are chosen in the "
+#~ "<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined "
+#~ "in <filename>login.defs</filename>, instead of <option>UID_MIN</option>-"
+#~ "<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+#~ "the creation of groups)."
+#~ msgstr ""
+#~ "Les utilisateurs système seront créés sans information d'âge dans "
+#~ "<filename>/etc/shadow</filename> et leurs identifiants numériques sont "
+#~ "choisis dans l'intervalle <option>SYS_UID_MIN</option>-"
+#~ "<option>SYS_UID_MAX</option>, défini dans <filename>login.defs</"
+#~ "filename>, au lieu de <option>UID_MIN</option>-<option>UID_MAX</option> "
+#~ "(et leur <option>GID</option> correspondant pour la création de groupes)."
+
+#~ msgid "<option>-s</option>, <option>--sha-rounds</option>"
+#~ msgstr "<option>-s</option>, <option>--sha-rounds</option>"
+
+#~ msgid "Use the specified number of rounds to encrypt the passwords."
+#~ msgstr ""
+#~ "Utiliser le nombre de rounds précisé pour chiffrer les mots de passe."
+
+#~ msgid ""
+#~ "The value 0 means that the system will choose the default number of "
+#~ "rounds for the crypt method (5000)."
+#~ msgstr ""
+#~ "La valeur 0 signifie que le système choisira la valeur par défaut du "
+#~ "nombre de rounds pour la méthode de chiffrement (5 000)."
+
+#~ msgid ""
+#~ "A minimal value of 1000 and a maximal value of 999,999,999 will be "
+#~ "enforced."
+#~ msgstr ""
+#~ "Une valeur minimale de 1 000 et une valeur maximale de 999 999 999 seront "
+#~ "imposées."
+
+#~ msgid "You can only use this option with the SHA256 or SHA512 crypt method."
+#~ msgstr ""
+#~ "Vous ne pouvez utiliser cette méthode qu'avec les méthodes de chiffrement "
+#~ "SHA256 ou SHA512."
+
+#~ msgid ""
+#~ "By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS "
+#~ "and SHA_CRYPT_MAX_ROUNDS variables in <filename>/etc/login.defs</"
+#~ "filename>."
+#~ msgstr ""
+#~ "Par défaut, le nombre de rounds est défini par les variables "
+#~ "SHA_CRYPT_MIN_ROUNDS et SHA_CRYPT_MAX_ROUNDS dans <filename>/etc/login."
+#~ "defs</filename>."
+
+#~ msgid ""
+#~ "The input file must be protected since it contains unencrypted passwords."
+#~ msgstr ""
+#~ "Le fichier d'entrée doit être correctement protégé puisqu'il contient des "
+#~ "mots de passe en clair."
+
+#~ msgid ""
+#~ "You should make sure the passwords and the encryption method respect the "
+#~ "system's password policy."
+#~ msgstr ""
+#~ "Vous devez vous assurer que les mots de passe et la méthode de "
+#~ "chiffrement respectent la politique de mot de passe du système."
+
+#~ msgid "/etc/pam.d/newusers"
+#~ msgstr "/etc/pam.d/newusers"
+
+#~ msgid "PAM configuration for <command>newusers</command>."
+#~ msgstr "Configuration de PAM pour <command>newusers</command>."
+
+#~| msgid ""
+#~| "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>grpck</"
+#~| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~| "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#~| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~| "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~| "manvolnum></citerefentry>."
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, <phrase condition="
+#~ "\"subids\"><citerefentry><refentrytitle>subgid</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>subuid</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>useradd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, <phrase condition="
+#~ "\"subids\"><citerefentry><refentrytitle>subgid</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>subuid</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>useradd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid "newgrp"
+#~ msgstr "newgrp"
+
+#~ msgid "group"
+#~ msgstr "groupe"
+
+#~ msgid ""
+#~ "The <command>newgrp</command> command is used to change the current group "
+#~ "ID during a login session. If the optional <option>-</option> flag is "
+#~ "given, the user's environment will be reinitialized as though the user "
+#~ "had logged in, otherwise the current environment, including current "
+#~ "working directory, remains unchanged."
+#~ msgstr ""
+#~ "La commande <command>newgrp</command> permet de changer l'identifiant de "
+#~ "groupe de l'utilisateur au cours d'une session. Si l'option <option>-</"
+#~ "option> est fournie, l'environnement de l'utilisateur est réinitialisé, "
+#~ "comme si l'utilisateur venait de se connecter. Sinon, l'environnement "
+#~ "actuel, y compris le répertoire de travail actuel est conservé."
+
+# NOTE:
+#~ msgid ""
+#~ "<command>newgrp</command> changes the current real group ID to the named "
+#~ "group, or to the default group listed in <filename>/etc/passwd</filename> "
+#~ "if no group name is given. <command>newgrp</command> also tries to add "
+#~ "the group to the user groupset. If not root, the user will be prompted "
+#~ "for a password if she does not have a password (in <filename>/etc/shadow</"
+#~ "filename> if this user has an entry in the shadowed password file, or in "
+#~ "<filename>/etc/passwd</filename> otherwise) and the group does, or if the "
+#~ "user is not listed as a member and the group has a password. The user "
+#~ "will be denied access if the group password is empty and the user is not "
+#~ "listed as a member."
+#~ msgstr ""
+#~ "<command>newgrp</command> change l'identifiant de groupe réel actuel à la "
+#~ "valeur du groupe indiqué, ou au groupe par défaut défini dans <filename>/"
+#~ "etc/passwd</filename> si aucun nom de groupe n'est fourni. "
+#~ "<command>newgrp</command> essaiera également d'ajouter le groupe à "
+#~ "l'ensemble des groupes de l'utilisateur. Si l'utilisateur n'est pas "
+#~ "superutilisateur, un mot de passe lui sera demandé s'il n'utilise pas de "
+#~ "mot de passe (dans <filename>/etc/shadow</filename>, si cet utilisateur a "
+#~ "une entrée dans le fichier des mots de passe cachés, ou dans <filename>/"
+#~ "etc/passwd</filename> sinon), mais que le groupe en a un, ou si "
+#~ "l'utilisateur n'est pas dans la liste des membres de ce groupe et que ce "
+#~ "groupe utilise un mot de passe. L'accès sera refusé si le mot de passe du "
+#~ "groupe est vide et que l'utilisateur ne fait pas partie de ses membres."
+
+#~ msgid ""
+#~ "If there is an entry for this group in <filename>/etc/gshadow</filename>, "
+#~ "then the list of members and the password of this group will be taken "
+#~ "from this file, otherwise, the entry in <filename>/etc/group</filename> "
+#~ "is considered."
+#~ msgstr ""
+#~ "S'il y a une entrée pour ce groupe dans <filename>/etc/gshadow</"
+#~ "filename>, alors la liste des membres et le mot de passe de ce groupe "
+#~ "seront pris dans ce fichier, sinon, l'entrée du fichier <filename>/etc/"
+#~ "group</filename> est utilisée."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>sg</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition="
+#~ "\"gshadow\">, <citerefentry condition=\"gshadow\"><refentrytitle>gshadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>sg</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition="
+#~ "\"gshadow\">, <citerefentry condition=\"gshadow\"><refentrytitle>gshadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+
+#~ msgid "enforce login time restrictions"
+#~ msgstr "Imposer les restrictions de connexion dans le temps"
+
+#~ msgid ""
+#~ "<command>logoutd</command> enforces the login time and port restrictions "
+#~ "specified in <filename>/etc/porttime</filename>. <command>logoutd</"
+#~ "command> should be started from <filename>/etc/rc</filename>. The "
+#~ "<filename>/var/run/utmp</filename> file is scanned periodically and each "
+#~ "user name is checked to see if the named user is permitted on the named "
+#~ "port at the current time. Any login session which is violating the "
+#~ "restrictions in <filename>/etc/porttime</filename> is terminated."
+#~ msgstr ""
+#~ "<command>logoutd</command> impose les restrictions (sur les ports, la "
+#~ "date et l'heure de connexion) spécifiées dans <filename>/etc/porttime</"
+#~ "filename>. <command>logoutd</command> doit être démarré depuis <filename>/"
+#~ "etc/rc</filename>. Il analyse le fichier <filename>/var/run/utmp</"
+#~ "filename> régulièrement et, pour chaque utilisateur, il vérifie que ce "
+#~ "nom d'utilisateur est autorisé à être connecté à ce port à ce moment. "
+#~ "Toute session en violation avec les restrictions de <filename>/etc/"
+#~ "porttime</filename> est terminée."
+
+#~ msgid "/var/run/utmp"
+#~ msgstr "/var/run/utmp"
+
+#~ msgid "List of current login sessions."
+#~ msgstr "Liste des sessions de connexion en cours."
+
+#~ msgid "login.defs"
+#~ msgstr "login.defs"
+
+#~ msgid ""
+#~ "The <filename>/etc/login.defs</filename> file defines the site-specific "
+#~ "configuration for the shadow password suite. This file is required. "
+#~ "Absence of this file will not prevent system operation, but will probably "
+#~ "result in undesirable operation."
+#~ msgstr ""
+#~ "Le fichier <filename>/etc/login.defs</filename> définit la configuration "
+#~ "de la suite shadow password (mots de passe cachés) pour le système. Ce "
+#~ "fichier est indispensable. Son absence n'empêchera pas le système de "
+#~ "fonctionner, mais aura probablement des conséquences indésirables."
+
+#~ msgid ""
+#~ "This file is a readable text file, each line of the file describing one "
+#~ "configuration parameter. The lines consist of a configuration name and "
+#~ "value, separated by whitespace. Blank lines and comment lines are "
+#~ "ignored. Comments are introduced with a \"#\" pound sign and the pound "
+#~ "sign must be the first non-white character of the line."
+#~ msgstr ""
+#~ "Ce fichier est un fichier texte, dont chaque ligne décrit un paramètre de "
+#~ "configuration. Les lignes consistent en un nom et une valeur, séparés par "
+#~ "une espace. Les lignes blanches et les lignes de commentaires sont "
+#~ "ignorées. Les commentaires commencent par un caractère « # », qui doit "
+#~ "être le premier caractère non blanc de la ligne."
+
+#~ msgid ""
+#~ "Parameter values may be of four types: strings, booleans, numbers, and "
+#~ "long numbers. A string is comprised of any printable characters. A "
+#~ "boolean should be either the value <replaceable>yes</replaceable> or "
+#~ "<replaceable>no</replaceable>. An undefined boolean parameter or one with "
+#~ "a value other than these will be given a <replaceable>no</replaceable> "
+#~ "value. Numbers (both regular and long) may be either decimal values, "
+#~ "octal values (precede the value with <replaceable>0</replaceable>) or "
+#~ "hexadecimal values (precede the value with <replaceable>0x</"
+#~ "replaceable>). The maximum value of the regular and long numeric "
+#~ "parameters is machine-dependent."
+#~ msgstr ""
+#~ "Les valeurs des paramètres sont de quatre types : chaînes de caractères, "
+#~ "booléens, nombres et nombres longs. Une chaîne de caractères est "
+#~ "constituée de n'importe quels caractères imprimables. Un booléen est soit "
+#~ "<replaceable>yes</replaceable> (oui), soit <replaceable>no</replaceable> "
+#~ "(non). Un paramètre booléen non défini, ou défini avec une valeur autre "
+#~ "que celles-là prendra la valeur <replaceable>no</replaceable>. Un nombre "
+#~ "(normal ou long) peut être soit décimal, soit octal (en précédant la "
+#~ "valeur d'un <replaceable>0</replaceable>), ou encore hexadécimal (en "
+#~ "précédant la valeur de <replaceable>0x</replaceable>). La valeur maximale "
+#~ "des paramètres numériques normaux ou longs dépend de la machine."
+
+#~ msgid "The following configuration items are provided:"
+#~ msgstr "Les paramètres de configuration suivants sont fournis :"
+
+#~ msgid "<option>CHFN_AUTH</option> (boolean)"
+#~ msgstr "<option>CHFN_AUTH</option> (booléen)"
+
+#~ msgid ""
+#~ "If <replaceable>yes</replaceable>, the <command>chfn</command> program "
+#~ "will require authentication before making any changes, unless run by the "
+#~ "superuser."
+#~ msgstr ""
+#~ "La valeur <replaceable>yes</replaceable> indique que le programme "
+#~ "<command>chfn</command> nécessitera une authentification avant de "
+#~ "procéder à tout changement, à moins qu'ils ne soient exécutés par le "
+#~ "superutilisateur."
+
+#~ msgid "<option>CHFN_RESTRICT</option> (string)"
+#~ msgstr "<option>CHFN_RESTRICT</option> (chaîne de caractères)"
+
+#~ msgid ""
+#~ "This parameter specifies which values in the <emphasis remap=\"I\">gecos</"
+#~ "emphasis> field of the <filename>/etc/passwd</filename> file may be "
+#~ "changed by regular users using the <command>chfn</command> program. It "
+#~ "can be any combination of letters <replaceable>f</replaceable>, "
+#~ "<replaceable>r</replaceable>, <replaceable>w</replaceable>, "
+#~ "<replaceable>h</replaceable>, for Full name, Room number, Work phone, and "
+#~ "Home phone, respectively. For backward compatibility, <replaceable>yes</"
+#~ "replaceable> is equivalent to <replaceable>rwh</replaceable> and "
+#~ "<replaceable>no</replaceable> is equivalent to <replaceable>frwh</"
+#~ "replaceable>. If not specified, only the superuser can make any changes. "
+#~ "The most restrictive setting is better achieved by not installing "
+#~ "<command>chfn</command> SUID."
+#~ msgstr ""
+#~ "Ce paramètre précise quelles valeurs du champ <emphasis remap=\"I"
+#~ "\">gecos</emphasis> du fichier <filename>passwd</filename> peuvent être "
+#~ "modifiées par les utilisateurs ordinaires à l'aide du programme "
+#~ "<command>chfn</command>. Il est constitué d'une combinaison de lettres "
+#~ "parmi <replaceable>f</replaceable>, <replaceable>r</replaceable>, "
+#~ "<replaceable>w</replaceable> et <replaceable>h</replaceable>, "
+#~ "correspondant respectivement au nom complet, au numéro de bureau, au "
+#~ "numéro de téléphone professionnel et au numéro de téléphone personnel. "
+#~ "Pour des raisons de compatibilité avec des versions antérieures, "
+#~ "<replaceable>yes</replaceable> est équivalent à <replaceable>rwh</"
+#~ "replaceable> et <replaceable>no</replaceable> à <replaceable>frwh</"
+#~ "replaceable>. S'il n'est pas précisé, seul le superutilisateur peut "
+#~ "effectuer des modifications. Pour une configuration encore plus "
+#~ "restrictive, il sera préférable de ne pas installer <command>chfn</"
+#~ "command> avec l'indicateur SUID positionné."
+
+#~ msgid "<option>CHSH_AUTH</option> (boolean)"
+#~ msgstr "<option>CHSH_AUTH</option> (booléen)"
+
+#~ msgid ""
+#~ "If <replaceable>yes</replaceable>, the <command>chsh</command> program "
+#~ "will require authentication before making any changes, unless run by the "
+#~ "superuser."
+#~ msgstr ""
+#~ "La valeur <replaceable>yes</replaceable> indique que le programme "
+#~ "<command>chsh</command> nécessitera une authentification avant de "
+#~ "procéder à tout changement, à moins qu'ils ne soient exécutés par le "
+#~ "superutilisateur."
+
+#~ msgid "<option>ERASECHAR</option> (number)"
+#~ msgstr "<option>ERASECHAR</option> (nombre)"
+
+#~ msgid ""
+#~ "Terminal ERASE character (<replaceable>010</replaceable> = backspace, "
+#~ "<replaceable>0177</replaceable> = DEL)."
+#~ msgstr ""
+#~ "Le caractère ERASE du terminal (<replaceable>010</replaceable> = "
+#~ "backspace, <replaceable>0177</replaceable> = DEL)."
+
+#~ msgid ""
+#~ "The value can be prefixed \"0\" for an octal value, or \"0x\" for an "
+#~ "hexadecimal value."
+#~ msgstr ""
+#~ "La valeur peut être préfixée par « 0 » pour une valeur octale, ou « 0x » "
+#~ "pour une valeur hexadécimale."
+
+#~ msgid "<option>FAIL_DELAY</option> (number)"
+#~ msgstr "<option>FAIL_DELAY</option> (nombre)"
+
+#~ msgid ""
+#~ "Delay in seconds before being allowed another attempt after a login "
+#~ "failure."
+#~ msgstr ""
+#~ "Le délai en secondes avant qu'un nouvel essai soit permis après un échec "
+#~ "de connexion."
+
+#~ msgid "<option>FAILLOG_ENAB</option> (boolean)"
+#~ msgstr "<option>FAILLOG_ENAB</option> (booléen)"
+
+#~ msgid ""
+#~ "Enable logging and display of <filename>/var/log/faillog</filename> login "
+#~ "failure info."
+#~ msgstr ""
+#~ "Activer l'enregistrement et l'affichage des informations d'échec de "
+#~ "connexion de <filename>/var/log/faillog</filename>"
+
+#~ msgid "<option>FAKE_SHELL</option> (string)"
+#~ msgstr "<option>FAKE_SHELL</option> (chaîne de caractères)"
+
+#~ msgid ""
+#~ "If set, <command>login</command> will execute this shell instead of the "
+#~ "users' shell specified in <filename>/etc/passwd</filename>."
+#~ msgstr ""
+#~ "Si définie, <command>login</command> exécutera cet interpréteur de "
+#~ "commandes au lieu de l'interpréteur de l'utilisateur spécifié dans "
+#~ "<filename>/etc/passwd</filename>."
+
+#~ msgid "<option>FTMP_FILE</option> (string)"
+#~ msgstr "<option>FTMP_FILE</option> (chaîne de caractères)"
+
+#~ msgid ""
+#~ "If defined, login failures will be logged in this file in a utmp format."
+#~ msgstr ""
+#~ "Si définie, les échecs de connexion seront enregistrés dans le fichier "
+#~ "sous le format utmp"
+
+#~ msgid "<option>HUSHLOGIN_FILE</option> (string)"
+#~ msgstr "<option>HUSHLOGIN_FILE</option> (chaîne de caractères)"
+
+#~ msgid ""
+#~ "If defined, this file can inhibit all the usual chatter during the login "
+#~ "sequence. If a full pathname is specified, then hushed mode will be "
+#~ "enabled if the user's name or shell are found in the file. If not a full "
+#~ "pathname, then hushed mode will be enabled if the file exists in the "
+#~ "user's home directory."
+#~ msgstr ""
+#~ "Si définie, le fichier peut désactiver tous les affichages habituels "
+#~ "durant la séquence de connexion. Si un nom de chemin complet est "
+#~ "spécifié, alors le mode taiseux sera activé si le nom ou l'interpréteur "
+#~ "de commandes de l'utilisateur sont trouvés dans le fichier. Si ce n'est "
+#~ "pas un nom de chemin complet, alors le mode taiseux sera activé si le "
+#~ "fichier existe dans le répertoire personnel de l'utilisateur."
+
+#~ msgid "<option>ISSUE_FILE</option> (string)"
+#~ msgstr "<option>ISSUE_FILE</option> (chaîne de caractères)"
+
+#~ msgid "If defined, this file will be displayed before each login prompt."
+#~ msgstr ""
+#~ "Si définie, le fichier sera affiché avant chaque invite de connexion."
+
+#~ msgid "<option>KILLCHAR</option> (number)"
+#~ msgstr "<option>KILLCHAR</option> (nombre)"
+
+#~ msgid "Terminal KILL character (<replaceable>025</replaceable> = CTRL/U)."
+#~ msgstr ""
+#~ "Le caractère KILL du terminal (<replaceable>025</replaceable> = CTRL/U)."
+
+#~ msgid "<option>LASTLOG_ENAB</option> (boolean)"
+#~ msgstr "<option>LASTLOG_ENAB</option> (booléen)"
+
+#~ msgid "Enable logging and display of /var/log/lastlog login time info."
+#~ msgstr ""
+#~ "Activer la journalisation et l'affichage des informations de dernière "
+#~ "connexion de /var/log/lastlog."
+
+#~ msgid "<option>LOG_OK_LOGINS</option> (boolean)"
+#~ msgstr "<option>LOG_OK_LOGINS</option> (booléen)"
+
+#~ msgid "Enable logging of successful logins."
+#~ msgstr "Activer la journalisation des connexions réussies."
+
+#~ msgid "<option>LOG_UNKFAIL_ENAB</option> (boolean)"
+#~ msgstr "<option>LOG_UNKFAIL_ENAB</option> (booléen)"
+
+#~ msgid ""
+#~ "Enable display of unknown usernames when login failures are recorded."
+#~ msgstr ""
+#~ "Activer l'affichage des noms d'utilisateurs inconnus quand les échecs de "
+#~ "connexions sont enregistrés."
+
+#~ msgid ""
+#~ "Note: logging unknown usernames may be a security issue if an user enter "
+#~ "her password instead of her login name."
+#~ msgstr ""
+#~ "Remarque : la journalisation des noms d'utilisateurs inconnus peut être "
+#~ "un problème de sécurité si un utilisateur entre son mot de passe au lieu "
+#~ "de son nom d'utilisateur."
+
+#~ msgid "<option>LOGIN_RETRIES</option> (number)"
+#~ msgstr "<option>LOGIN_RETRIES</option> (nombre)"
+
+#~ msgid "Maximum number of login retries in case of bad password."
+#~ msgstr ""
+#~ "Le nombre maximum de tentatives de connexion en cas de mauvais mot de "
+#~ "passe."
+
+#~ msgid ""
+#~ "This will most likely be overridden by PAM, since the default pam_unix "
+#~ "module has its own built in of 3 retries. However, this is a safe "
+#~ "fallback in case you are using an authentication module that does not "
+#~ "enforce PAM_MAXTRIES."
+#~ msgstr ""
+#~ "Ce sera probablement écrasé par PAM, puisque le module pam_unix est réglé "
+#~ "en dur pour n'effectuer que 3 tentatives. Toutefois, il s'agit d'une "
+#~ "solution de repli au cas où vous utilisez un module d'authentification "
+#~ "qui ne fait pas appliquer PAM_MAXTRIES."
+
+#~ msgid "<option>LOGIN_TIMEOUT</option> (number)"
+#~ msgstr "<option>LOGIN_TIMEOUT</option> (nombre)"
+
+#~ msgid "Max time in seconds for login."
+#~ msgstr "Le temps maximum en secondes pour la connexion."
+
+#~ msgid "<option>MOTD_FILE</option> (string)"
+#~ msgstr "<option>MOTD_FILE</option> (chaîne de caractères)"
+
+#~ msgid ""
+#~ "If defined, \":\" delimited list of \"message of the day\" files to be "
+#~ "displayed upon login."
+#~ msgstr ""
+#~ "Si définie, liste délimitée par des « : » de fichiers de « message du "
+#~ "jour » à afficher lors de la connexion."
+
+#~ msgid "<option>NOLOGINS_FILE</option> (string)"
+#~ msgstr "<option>NOLOGINS_FILE</option> (chaîne de caractères)"
+
+#~ msgid ""
+#~ "If defined, name of file whose presence will inhibit non-root logins. The "
+#~ "contents of this file should be a message indicating why logins are "
+#~ "inhibited."
+#~ msgstr ""
+#~ "Si définie, nom de fichier dont la présence empêchera les connexions de "
+#~ "quelqu'un d'autre que le superutilisateur. Le contenu de ces fichiers "
+#~ "doit être un message indiquant pourquoi les connexions sont désactivées."
+
+#~ msgid ""
+#~ "<option>PASS_MAX_DAYS</option>, <option>PASS_MIN_DAYS</option> and "
+#~ "<option>PASS_WARN_AGE</option> are only used at the time of account "
+#~ "creation. Any changes to these settings won't affect existing accounts."
+#~ msgstr ""
+#~ "Les paramètres <option>PASS_MAX_DAYS</option>, <option>PASS_MIN_DAYS</"
+#~ "option> et <option>PASS_WARN_AGE</option> ne sont utilisés qu'au moment "
+#~ "de la création d'un compte. Les changements n'affecteront pas les comptes "
+#~ "existants."
+
+#~ msgid "<option>PORTTIME_CHECKS_ENAB</option> (boolean)"
+#~ msgstr "<option>PORTTIME_CHECKS_ENAB</option> (booléen)"
+
+#~ msgid ""
+#~ "Enable checking of time restrictions specified in <filename>/etc/"
+#~ "porttime</filename>."
+#~ msgstr ""
+#~ "Activer la vérification des restrictions de temps précisées dans "
+#~ "<filename>/etc/porttime</filename>."
+
+#~ msgid "<option>TTYGROUP</option> (string)"
+#~ msgstr "<option>TTYGROUP</option> (chaîne de caractères)"
+
+#~ msgid "<option>TTYPERM</option> (string)"
+#~ msgstr "<option>TTYPERM</option> (chaîne de caractères)"
+
+#~ msgid ""
+#~ "The terminal permissions: the login tty will be owned by the "
+#~ "<option>TTYGROUP</option> group, and the permissions will be set to "
+#~ "<option>TTYPERM</option>."
+#~ msgstr ""
+#~ "Les permissions de terminal : la connexion tty appartiendra au groupe "
+#~ "<option>TTYGROUP</option> et les permissions seront configurées à "
+#~ "<option>TTYPERM</option>."
+
+#~ msgid ""
+#~ "By default, the ownership of the terminal is set to the user's primary "
+#~ "group and the permissions are set to <replaceable>0600</replaceable>."
+#~ msgstr ""
+#~ "Par défaut, le propriétaire du terminal est configuré au groupe primaire "
+#~ "de l'utilisateur et les permissions sont configurées à <replaceable>0600</"
+#~ "replaceable>."
+
+#~ msgid ""
+#~ "<option>TTYGROUP</option> can be either the name of a group or a numeric "
+#~ "group identifier."
+#~ msgstr ""
+#~ "<option>TTYGROUP</option> peut être le nom d'un groupe ou un identifiant "
+#~ "numérique de groupe."
+
+#~ msgid ""
+#~ "If you have a <command>write</command> program which is \"setgid\" to a "
+#~ "special group which owns the terminals, define TTYGROUP to the group "
+#~ "number and TTYPERM to 0620. Otherwise leave TTYGROUP commented out and "
+#~ "assign TTYPERM to either 622 or 600."
+#~ msgstr ""
+#~ "Si vous avez un programme <command>write</command> qui est « setgid » à "
+#~ "un groupe spécial auquel les terminaux appartiennent, définissez TTYGROUP "
+#~ "comme l'identifiant numérique du groupe et TTYPERM à 0620. Autrement "
+#~ "laissez TTYGROUP décommenté et TTYPERM configuré soit à 622 soit à 600."
+
+#~ msgid "<option>TTYTYPE_FILE</option> (string)"
+#~ msgstr "<option>TTYTYPE_FILE</option> (chaîne de caractères)"
+
+#~ msgid ""
+#~ "If defined, file which maps tty line to TERM environment parameter. Each "
+#~ "line of the file is in a format something like \"vt100 tty01\"."
+#~ msgstr ""
+#~ "Si définie, fichier qui lie les lignes de tty à la variable "
+#~ "d'environnement TERM. Chaque ligne du fichier est dans un format "
+#~ "ressemblant à « vt100 tty01 »."
+
+#~ msgid "<option>ULIMIT</option> (number)"
+#~ msgstr "<option>ULIMIT</option> (nombre)"
+
+#~ msgid "Default <command>ulimit</command> value."
+#~ msgstr "Valeur par défaut d'<command>ulimit</command>."
+
+#~ msgid "CROSS REFERENCES"
+#~ msgstr "RÉFÉRENCES CROISÉES"
+
+#~ msgid ""
+#~ "The following cross references show which programs in the shadow password "
+#~ "suite use which parameters."
+#~ msgstr ""
+#~ "Les références croisées ci-dessous montrent quels sont les paramètres "
+#~ "utilisés par les différents programmes de la suite shadow password."
+
+#~ msgid "chage"
+#~ msgstr "chage"
+
+#~ msgid "USE_TCB"
+#~ msgstr "USE_TCB"
+
+#~ msgid "chfn"
+#~ msgstr "chfn"
+
+#~ msgid ""
+#~ "<phrase condition=\"no_pam\">CHFN_AUTH</phrase> CHFN_RESTRICT <phrase "
+#~ "condition=\"no_pam\">LOGIN_STRING</phrase>"
+#~ msgstr ""
+#~ "<phrase condition=\"no_pam\">CHFN_AUTH</phrase> CHFN_RESTRICT <phrase "
+#~ "condition=\"no_pam\">LOGIN_STRING</phrase>"
+
+#~ msgid "chgpasswd"
+#~ msgstr "chgpasswd"
+
+#~ msgid ""
+#~ "ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB <phrase condition="
+#~ "\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+#~ msgstr ""
+#~ "ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB <phrase condition="
+#~ "\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+
+#~ msgid "chpasswd"
+#~ msgstr "chpasswd"
+
+#~ msgid "ENCRYPT_METHOD MD5_CRYPT_ENAB"
+#~ msgstr "ENCRYPT_METHOD MD5_CRYPT_ENAB"
+
+#~ msgid "SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS"
+#~ msgstr "SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS"
+
+#~ msgid "chsh"
+#~ msgstr "chsh"
+
+#~ msgid "CHSH_AUTH LOGIN_STRING"
+#~ msgstr "CHSH_AUTH LOGIN_STRING"
+
+#~ msgid "gpasswd"
+#~ msgstr "gpasswd"
+
+#~ msgid "groupadd"
+#~ msgstr "groupadd"
+
+#~ msgid "GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN"
+#~ msgstr "GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN"
+
+#~ msgid "groupdel"
+#~ msgstr "groupdel"
+
+#~ msgid "MAX_MEMBERS_PER_GROUP"
+#~ msgstr "MAX_MEMBERS_PER_GROUP"
+
+#~ msgid "groupmems"
+#~ msgstr "groupmems"
+
+#~ msgid "groupmod"
+#~ msgstr "groupmod"
+
+#~ msgid "grpck"
+#~ msgstr "grpck"
+
+#~ msgid ""
+#~ "<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+#~ "<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ "
+#~ "ENVIRON_FILE</phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam"
+#~ "\">FAILLOG_ENAB</phrase> FAKE_SHELL <phrase condition=\"no_pam"
+#~ "\">FTMP_FILE</phrase> HUSHLOGIN_FILE <phrase condition=\"no_pam"
+#~ "\">ISSUE_FILE</phrase> KILLCHAR <phrase condition=\"no_pam"
+#~ "\">LASTLOG_ENAB</phrase> LOGIN_RETRIES <phrase condition=\"no_pam"
+#~ "\">LOGIN_STRING</phrase> LOGIN_TIMEOUT LOG_OK_LOGINS LOG_UNKFAIL_ENAB "
+#~ "<phrase condition=\"no_pam\">MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE "
+#~ "NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> TTYGROUP TTYPERM "
+#~ "TTYTYPE_FILE <phrase condition=\"no_pam\">ULIMIT UMASK</phrase> "
+#~ "USERGROUPS_ENAB"
+#~ msgstr ""
+#~ "<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+#~ "<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ "
+#~ "ENVIRON_FILE</phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam"
+#~ "\">FAILLOG_ENAB</phrase> FAKE_SHELL <phrase condition=\"no_pam"
+#~ "\">FTMP_FILE</phrase> HUSHLOGIN_FILE <phrase condition=\"no_pam"
+#~ "\">ISSUE_FILE</phrase> KILLCHAR <phrase condition=\"no_pam"
+#~ "\">LASTLOG_ENAB</phrase> LOGIN_RETRIES <phrase condition=\"no_pam"
+#~ "\">LOGIN_STRING</phrase> LOGIN_TIMEOUT LOG_OK_LOGINS LOG_UNKFAIL_ENAB "
+#~ "<phrase condition=\"no_pam\">MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE "
+#~ "NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> TTYGROUP TTYPERM "
+#~ "TTYTYPE_FILE <phrase condition=\"no_pam\">ULIMIT UMASK</phrase> "
+#~ "USERGROUPS_ENAB"
+
+#~ msgid "newgrp / sg"
+#~ msgstr "newgrp / sg"
+
+#~ msgid "SYSLOG_SG_ENAB"
+#~ msgstr "SYSLOG_SG_ENAB"
+
+#~| msgid ""
+#~| "ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB "
+#~| "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"sha_crypt"
+#~| "\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase> SYS_GID_MAX "
+#~| "SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+#~ msgid ""
+#~ "ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB "
+#~ "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"sha_crypt"
+#~ "\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase> SUB_GID_COUNT "
+#~ "SUB_GID_MAX SUB_GID_MIN SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN SYS_GID_MAX "
+#~ "SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+#~ msgstr ""
+#~ "ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB "
+#~ "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"sha_crypt"
+#~ "\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase> SUB_GID_COUNT "
+#~ "SUB_GID_MAX SUB_GID_MIN SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN SYS_GID_MAX "
+#~ "SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+
+#~ msgid ""
+#~ "ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN "
+#~ "PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN <phrase condition=\"sha_crypt"
+#~ "\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+#~ msgstr ""
+#~ "ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN "
+#~ "PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN <phrase condition=\"sha_crypt"
+#~ "\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+
+#~ msgid ""
+#~ "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb"
+#~ "\">TCB_AUTH_GROUP TCB_SYMLINKS USE_TCB</phrase>"
+#~ msgstr ""
+#~ "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb"
+#~ "\">TCB_AUTH_GROUP TCB_SYMLINKS USE_TCB</phrase>"
+
+#~ msgid ""
+#~ "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb"
+#~ "\">USE_TCB</phrase>"
+#~ msgstr ""
+#~ "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"tcb"
+#~ "\">USE_TCB</phrase>"
+
+#~ msgid ""
+#~ "<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+#~ "<phrase condition=\"no_pam\">ENV_HZ ENVIRON_FILE</phrase> ENV_PATH "
+#~ "ENV_SUPATH <phrase condition=\"no_pam\">ENV_TZ LOGIN_STRING "
+#~ "MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE QUOTAS_ENAB</phrase> SULOG_FILE "
+#~ "SU_NAME <phrase condition=\"no_pam\">SU_WHEEL_ONLY</phrase> "
+#~ "SYSLOG_SU_ENAB <phrase condition=\"no_pam\">USERGROUPS_ENAB</phrase>"
+#~ msgstr ""
+#~ "<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+#~ "<phrase condition=\"no_pam\">ENV_HZ ENVIRON_FILE</phrase> ENV_PATH "
+#~ "ENV_SUPATH <phrase condition=\"no_pam\">ENV_TZ LOGIN_STRING "
+#~ "MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE QUOTAS_ENAB</phrase> SULOG_FILE "
+#~ "SU_NAME <phrase condition=\"no_pam\">SU_WHEEL_ONLY</phrase> "
+#~ "SYSLOG_SU_ENAB <phrase condition=\"no_pam\">USERGROUPS_ENAB</phrase>"
+
+#~ msgid "ENV_HZ <phrase condition=\"no_pam\">ENV_TZ</phrase>"
+#~ msgstr "ENV_HZ <phrase condition=\"no_pam\">ENV_TZ</phrase>"
+
+#~| msgid ""
+#~| "CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP PASS_MAX_DAYS "
+#~| "PASS_MIN_DAYS PASS_WARN_AGE SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX "
+#~| "SYS_UID_MIN UID_MAX UID_MIN UMASK <phrase condition=\"tcb"
+#~| "\">TCB_AUTH_GROUP TCB_SYMLINK USE_TCB</phrase>"
+#~ msgid ""
+#~ "CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP PASS_MAX_DAYS "
+#~ "PASS_MIN_DAYS PASS_WARN_AGE SUB_GID_COUNT SUB_GID_MAX SUB_GID_MIN "
+#~ "SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX "
+#~ "SYS_UID_MIN UID_MAX UID_MIN UMASK <phrase condition=\"tcb"
+#~ "\">TCB_AUTH_GROUP TCB_SYMLINK USE_TCB</phrase>"
+#~ msgstr ""
+#~ "CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP PASS_MAX_DAYS "
+#~ "PASS_MIN_DAYS PASS_WARN_AGE SUB_GID_COUNT SUB_GID_MAX SUB_GID_MIN "
+#~ "SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX "
+#~ "SYS_UID_MIN UID_MAX UID_MIN UMASK <phrase condition=\"tcb"
+#~ "\">TCB_AUTH_GROUP TCB_SYMLINK USE_TCB</phrase>"
+
+#~ msgid ""
+#~ "MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB "
+#~ "<phrase condition=\"tcb\">TCB_SYMLINKS USE_TCB</phrase>"
+#~ msgstr ""
+#~ "MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB "
+#~ "<phrase condition=\"tcb\">TCB_SYMLINKS USE_TCB</phrase>"
+
+#~ msgid ""
+#~ "MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP <phrase condition=\"tcb"
+#~ "\">TCB_SYMLINKS USE_TCB</phrase>"
+#~ msgstr ""
+#~ "MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP <phrase condition=\"tcb"
+#~ "\">TCB_SYMLINKS USE_TCB</phrase>"
+
+#~ msgid ""
+#~ "Much of the functionality that used to be provided by the shadow password "
+#~ "suite is now handled by PAM. Thus, <filename>/etc/login.defs</filename> "
+#~ "is no longer used by <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, or less used by "
+#~ "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, and <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>. Please refer to "
+#~ "the corresponding PAM configuration files instead."
+#~ msgstr ""
+#~ "La plupart des fonctionnalités qui étaient fournies par les mots de passe "
+#~ "cachés (« shadow password ») sont désormais gérées par PAM. De ce fait, "
+#~ "<filename>/etc/login.defs</filename> n'est plus utilisé par "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry> et moins utilisé par "
+#~ "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry> et <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>. Veuillez plutôt "
+#~ "vous référer aux fichiers de configuration de PAM correspondant."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pam</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pam</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid "login.access"
+#~ msgstr "login.access"
+
+#~ msgid "login access control table"
+#~ msgstr "table de contrôle des connexions"
+
+#~ msgid ""
+#~ "The <emphasis remap=\"I\">login.access</emphasis> file specifies (user, "
+#~ "host) combinations and/or (user, tty) combinations for which a login will "
+#~ "be either accepted or refused."
+#~ msgstr ""
+#~ "Le fichier <emphasis remap=\"I\">login.access</emphasis> permet de "
+#~ "spécifier des paires (utilisateur, hôte) et/ou (utilisateur, tty) pour "
+#~ "lesquelles toute connexion sera soit acceptée soit refusée."
+
+#~ msgid ""
+#~ "When someone logs in, the <emphasis remap=\"I\">login.access</emphasis> "
+#~ "is scanned for the first entry that matches the (user, host) combination, "
+#~ "or, in case of non-networked logins, the first entry that matches the "
+#~ "(user, tty) combination. The permissions field of that table entry "
+#~ "determines whether the login will be accepted or refused."
+#~ msgstr ""
+#~ "Lorsqu'un utilisateur se connecte, le fichier <emphasis remap=\"I\">login."
+#~ "access</emphasis> est lu jusqu'à la première entrée correspondant à la "
+#~ "paire (utilisateur, hôte) ou, dans le cas d'une connexion ne passant pas "
+#~ "par le réseau, à la première entrée correspondant au couple (utilisateur, "
+#~ "tty). Le champ des permissions de la table pour cette entrée détermine "
+#~ "alors si la connexion doit être acceptée ou refusée."
+
+#~ msgid ""
+#~ "Each line of the login access control table has three fields separated by "
+#~ "a \":\" character:"
+#~ msgstr ""
+#~ "Chaque ligne de la table de contrôle des connexions (« login access "
+#~ "control table ») est composée de trois champs séparés par le caractère "
+#~ "« : » :"
+
+#~ msgid ""
+#~ "<emphasis remap=\"I\">permission</emphasis>:<emphasis remap=\"I\">users</"
+#~ "emphasis>:<emphasis remap=\"I\">origins</emphasis>"
+#~ msgstr ""
+#~ "<emphasis remap=\"I\">permission</emphasis>:<emphasis remap=\"I"
+#~ "\">utilisateurs</emphasis>:<emphasis remap=\"I\">origines</emphasis>"
+
+#~ msgid ""
+#~ "The first field should be a \"<emphasis>+</emphasis>\" (access granted) "
+#~ "or \"<emphasis>-</emphasis>\" (access denied) character. The second field "
+#~ "should be a list of one or more login names, group names, or "
+#~ "<emphasis>ALL</emphasis> (always matches). The third field should be a "
+#~ "list of one or more tty names (for non-networked logins), host names, "
+#~ "domain names (begin with \"<literal>.</literal>\"), host addresses, "
+#~ "internet network numbers (end with \"<literal>.</literal>\"), "
+#~ "<emphasis>ALL</emphasis> (always matches) or <emphasis>LOCAL</emphasis> "
+#~ "(matches any string that does not contain a \"<literal>.</literal>\" "
+#~ "character). If you run NIS you can use @netgroupname in host or user "
+#~ "patterns."
+#~ msgstr ""
+#~ "Le premier champ est soit un « <emphasis>+</emphasis> » (accès autorisé), "
+#~ "soit un « <emphasis>-</emphasis> » (accès refusé). Le second champ est "
+#~ "une liste d'un ou plusieurs noms d'utilisateurs ou de groupes, ou "
+#~ "<emphasis>ALL</emphasis> (correspond à tous les utilisateurs). Le "
+#~ "troisième champ est une liste d'un ou plusieurs noms de tty (pour les "
+#~ "connexions hors réseau), noms d'hôtes, noms de domaines (commençant par "
+#~ "un « <literal>.</literal> »), adresses d'hôte, adresses de sous-réseau "
+#~ "(terminant par un « <literal>.</literal> »), <emphasis>ALL</emphasis> "
+#~ "(pour spécifier n'importe quelle connexion), ou <emphasis>LOCAL</"
+#~ "emphasis> (correspond à n'importe quelle chaîne ne contenant pas de "
+#~ "« <literal>.</literal> »). Si vous utilisez NIS, vous pouvez utiliser "
+#~ "@nomdegroupe pour les motifs d'utilisateur et d'hôte."
+
+#~ msgid ""
+#~ "The <emphasis>EXCEPT</emphasis> operator makes it possible to write very "
+#~ "compact rules."
+#~ msgstr ""
+#~ "L'opérateur <emphasis>EXCEPT</emphasis> permet d'écrire des règles très "
+#~ "compactes."
+
+#~ msgid ""
+#~ "The group file is searched only when a name does not match that of the "
+#~ "logged-in user. Only groups are matched in which users are explicitly "
+#~ "listed: the program does not look at a user's primary group id value."
+#~ msgstr ""
+#~ "Le fichier d'informations sur les groupes (/etc/group) n'est utilisé que "
+#~ "lorsqu'un nom ne correspond à aucun des utilisateurs connectés. Seuls les "
+#~ "groupes pour lesquels la liste des utilisateurs est spécifiée sont "
+#~ "utilisés : le programme ne recherche pas parmi les groupes primaires des "
+#~ "utilisateurs."
+
+#~ msgid "begin session on the system"
+#~ msgstr "Démarrer une session sur le système"
+
+#~ msgid "-p"
+#~ msgstr "-p"
+
+#~ msgid "host"
+#~ msgstr "hôte"
+
+#~ msgid "-h <placeholder-1/>"
+#~ msgstr "-h <placeholder-1/>"
+
+#~ msgid "ENV=VAR"
+#~ msgstr "ENV=VAR"
+
+#~ msgid "-f"
+#~ msgstr "-f"
+
+#~ msgid "-r <placeholder-1/>"
+#~ msgstr "-r <placeholder-1/>"
+
+#~ msgid ""
+#~ "The <command>login</command> program is used to establish a new session "
+#~ "with the system. It is normally invoked automatically by responding to "
+#~ "the <emphasis remap=\"I\">login:</emphasis> prompt on the user's "
+#~ "terminal. <command>login</command> may be special to the shell and may "
+#~ "not be invoked as a sub-process. When called from a shell, "
+#~ "<command>login</command> should be executed as <emphasis remap=\"B\">exec "
+#~ "login</emphasis> which will cause the user to exit from the current shell "
+#~ "(and thus will prevent the new logged in user to return to the session of "
+#~ "the caller). Attempting to execute <command>login</command> from any "
+#~ "shell but the login shell will produce an error message."
+#~ msgstr ""
+#~ "Le programme <command>login</command> permet d'établir une nouvelle "
+#~ "session sur le système. Il est généralement invoqué après avoir répondu à "
+#~ "l'invite de connexion <emphasis remap=\"I\">login:</emphasis> sur le "
+#~ "terminal de l'utilisateur. <command>login</command> peut être spécifique "
+#~ "à l'interpréteur de commandes et ne devrait pas être invoqué comme un "
+#~ "sous-processus. Lorsqu'il est appelé depuis un interpréteur de commande, "
+#~ "<command>login</command> doit être exécuté comme <emphasis remap=\"B"
+#~ "\">>exec login</emphasis>, ce qui entraîne la sortie de l'interpréteur de "
+#~ "commandes en cours (et ainsi empêche le nouvel utilisateur connecté de "
+#~ "retourner à la session de l'appelant). L'exécution de <command>login</"
+#~ "command> depuis un interpréteur de commandes autre qu'un interpréteur de "
+#~ "commandes initial (« login shell ») produira un message d'erreur."
+
+#~ msgid ""
+#~ "The user is then prompted for a password, where appropriate. Echoing is "
+#~ "disabled to prevent revealing the password. Only a small number of "
+#~ "password failures are permitted before <command>login</command> exits and "
+#~ "the communications link is severed."
+#~ msgstr ""
+#~ "Un mot de passe est ensuite demandé à l'utilisateur. L'affichage du mot "
+#~ "de passe est désactivé pour éviter de révéler le mot de passe. Seul un "
+#~ "petit nombre d'échecs est permis avant que <command>login</command> ne "
+#~ "quitte et que la liaison ne soit interrompue."
+
+#~ msgid ""
+#~ "If password aging has been enabled for your account, you may be prompted "
+#~ "for a new password before proceeding. You will be forced to provide your "
+#~ "old password and the new password before continuing. Please refer to "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry> for more information."
+#~ msgstr ""
+#~ "Si une date de fin de validité du mot de passe a été définie pour ce "
+#~ "compte, un nouveau mot de passe pourra vous être demandé. Votre ancien "
+#~ "mot de passe et votre nouveau mot de passe vous seront alors demandés "
+#~ "avant de pouvoir continuer. Veuillez lire la page de manuel "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry> pour plus d'informations."
+
+#~ msgid ""
+#~ "After a successful login, you will be informed of any system messages and "
+#~ "the presence of mail. You may turn off the printing of the system message "
+#~ "file, <filename>/etc/motd</filename>, by creating a zero-length file "
+#~ "<filename>.hushlogin</filename> in your login directory. The mail message "
+#~ "will be one of \"<emphasis>You have new mail.</emphasis>\", "
+#~ "\"<emphasis>You have mail.</emphasis>\", or \"<emphasis>No Mail.</"
+#~ "emphasis>\" according to the condition of your mailbox."
+#~ msgstr ""
+#~ "Après une connexion réussie, vous serez informé des messages du système "
+#~ "et de la présence de courrier. Vous pouvez désactiver l'affichage du "
+#~ "message du système (<filename>/etc/motd</filename>), en créant un fichier "
+#~ "vide <filename>.hushlogin</filename> dans le répertoire de votre compte. "
+#~ "Le message concernant les courriers sera « <emphasis>You have new mail.</"
+#~ "emphasis> », « <emphasis>You have mail.</emphasis> », ou « <emphasis>No "
+#~ "Mail.</emphasis> » suivant l'état de votre boîte aux lettres."
+
+#~ msgid ""
+#~ "Your user and group ID will be set according to their values in the "
+#~ "<filename>/etc/passwd</filename> file. The value for <envar>$HOME</"
+#~ "envar>, <envar>$SHELL</envar>, <envar>$PATH</envar>, <envar>$LOGNAME</"
+#~ "envar>, and <envar>$MAIL</envar> are set according to the appropriate "
+#~ "fields in the password entry. Ulimit, umask and nice values may also be "
+#~ "set according to entries in the GECOS field."
+#~ msgstr ""
+#~ "Vos identifiants d'utilisateur et de groupe seront définis en fonction "
+#~ "des valeurs spécifiées dans le fichier <filename>/etc/passwd</filename>. "
+#~ "Les valeurs des variables d'environnement <emphasis>$HOME</emphasis>, "
+#~ "<emphasis>$SHELL</emphasis>, <emphasis>$PATH</emphasis>, <emphasis>"
+#~ "$LOGNAME</emphasis>, et <emphasis>$MAIL</emphasis> seront définies en "
+#~ "fonction des champs appropriés de l'entrée qui vous correspond. Les "
+#~ "valeurs d'ulimit, d'umask et de nice pourront également être affectées en "
+#~ "fonction des entrées du champ GECOS."
+
+#~ msgid ""
+#~ "On some installations, the environmental variable <envar>$TERM</envar> "
+#~ "will be initialized to the terminal type on your tty line, as specified "
+#~ "in <filename>/etc/ttytype</filename>."
+#~ msgstr ""
+#~ "Sur certains systèmes, la variable d'environnement <emphasis>$TERM</"
+#~ "emphasis> sera initialisée au type de terminal de votre tty, comme "
+#~ "spécifié dans <filename>/etc/ttytype</filename>."
+
+#~ msgid ""
+#~ "An initialization script for your command interpreter may also be "
+#~ "executed. Please see the appropriate manual section for more information "
+#~ "on this function."
+#~ msgstr ""
+#~ "Un script d'initialisation pour votre interpréteur de commandes pourra "
+#~ "également être exécuté. Veuillez vous référer à la section de manuel "
+#~ "appropriée pour plus d'informations sur cette fonctionnalité."
+
+#~ msgid ""
+#~ "The <command>login</command> program is NOT responsible for removing "
+#~ "users from the utmp file. It is the responsibility of "
+#~ "<citerefentry><refentrytitle>getty</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry> and <citerefentry><refentrytitle>init</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry> to clean up "
+#~ "apparent ownership of a terminal session. If you use <command>login</"
+#~ "command> from the shell prompt without <command>exec</command>, the user "
+#~ "you use will continue to appear to be logged in even after you log out of "
+#~ "the \"subsession\"."
+#~ msgstr ""
+#~ "Le programme <command>login</command> n'est PAS responsable de la "
+#~ "suppression d'utilisateurs dans le fichier utmp. Les responsables du "
+#~ "nettoyage de l'appartenance des sessions de terminal sont "
+#~ "<citerefentry><refentrytitle>getty</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry> et <citerefentry><refentrytitle>init</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>. Si vous utilisez "
+#~ "<command>login</command> depuis un interpréteur de commandes sans "
+#~ "<command>exec</command>, l'utilisateur que vous utilisez continuera à "
+#~ "apparaître comme étant connecté même après s'être déconnecté de cette "
+#~ "« sous-session »."
+
+#~ msgid "Do not perform authentication, user is preauthenticated."
+#~ msgstr ""
+#~ "Ne pas réaliser d'authentification. L'utilisateur est pré-authentifié."
+
+#~ msgid ""
+#~ "Note: In that case, <replaceable>username</replaceable> is mandatory."
+#~ msgstr ""
+#~ "Remarque : Dans ce cas, <replaceable>username</replaceable> est "
+#~ "nécessaire."
+
+#~ msgid "-h"
+#~ msgstr "-h"
+
+#~ msgid "Name of the remote host for this login."
+#~ msgstr "Nom de l'hôte distant pour cette connexion."
+
+#~ msgid "Preserve environment."
+#~ msgstr "Préserver l'environnement."
+
+#~ msgid "-r"
+#~ msgstr "-r"
+
+#~ msgid "Perform autologin protocol for rlogin."
+#~ msgstr ""
+#~ "Exécuter le protocole de connexion automatique (autologin) pour rlogin."
+
+#~ msgid ""
+#~ "The <option>-r</option>, <option>-h</option> and <option>-f</option> "
+#~ "options are only used when <command>login</command> is invoked by root."
+#~ msgstr ""
+#~ "Les options <option>-r</option>, <option>-h</option> et <option>-f</"
+#~ "option> ne peuvent être utilisées que par root."
+
+#~ msgid ""
+#~ "This version of <command>login</command> has many compilation options, "
+#~ "only some of which may be in use at any particular site."
+#~ msgstr ""
+#~ "Cette version de <command>login</command> comporte de nombreuses options "
+#~ "de compilation. Seules certaines d'entre elles peuvent avoir été activées "
+#~ "sur votre site."
+
+#~ msgid ""
+#~ "The location of files is subject to differences in system configuration."
+#~ msgstr ""
+#~ "L'emplacement des fichiers peut varier suivant la configuration du "
+#~ "système."
+
+#~ msgid ""
+#~ "As with any program, <command>login</command>'s appearance can be faked. "
+#~ "If non-trusted users have physical access to a machine, an attacker could "
+#~ "use this to obtain the password of the next person coming to sit in front "
+#~ "of the machine. Under Linux, the SAK mechanism can be used by users to "
+#~ "initiate a trusted path and prevent this kind of attack."
+#~ msgstr ""
+#~ "Comme pour n'importe quel programme, l'apparence de <command>login</"
+#~ "command> peut être imitée. Si des utilisateurs non sûrs ont un accès "
+#~ "physique à la machine, un attaquant pourrait utiliser cet accès pour "
+#~ "obtenir le mot de passe de la personne qui s'assiérait ensuite face à "
+#~ "l'écran. Sous Linux, le mécanisme SAK peut être utilisé par les "
+#~ "utilisateurs pour initier un chemin de confiance et prévenir ce genre "
+#~ "d'attaques."
+
+#~ msgid "/var/log/wtmp"
+#~ msgstr "/var/log/wtmp"
+
+#~ msgid "List of previous login sessions."
+#~ msgstr "Liste des sessions de connexion précédentes."
+
+#~ msgid "/etc/motd"
+#~ msgstr "/etc/motd"
+
+#~ msgid "System message of the day file."
+#~ msgstr "Fichier contenant le message du système."
+
+#~ msgid "/etc/nologin"
+#~ msgstr "/etc/nologin"
+
+#~ msgid "Prevent non-root users from logging in."
+#~ msgstr "Empêcher les utilisateurs non-root de se connecter."
+
+#~ msgid "/etc/ttytype"
+#~ msgstr "/etc/ttytype"
+
+#~ msgid "List of terminal types."
+#~ msgstr "Liste des types de terminaux."
+
+#~ msgid "$HOME/.hushlogin"
+#~ msgstr "$HOME/.hushlogin"
+
+#~ msgid "Suppress printing of system messages."
+#~ msgstr "Supprimer l'affichage des messages du système."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>nologin</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>securetty</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>getty</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>nologin</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>securetty</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>getty</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "Luca"
+#~ msgstr "Luca"
+
+#~ msgid "Berra"
+#~ msgstr "Berra"
+
+#~ msgid "limits"
+#~ msgstr "limits"
+
+#~ msgid "resource limits definition"
+#~ msgstr "définition des limites de ressources"
+
+#~ msgid ""
+#~ "The <emphasis remap=\"I\">limits</emphasis> file (<filename>/etc/limits</"
+#~ "filename> by default or LIMITS_FILE defined <filename>config.h</"
+#~ "filename>) describes the resource limits you wish to impose. It should be "
+#~ "owned by root and readable by root account only."
+#~ msgstr ""
+#~ "Le fichier <emphasis remap=\"I\">limits</emphasis> (<filename>/etc/"
+#~ "limits</filename> par défaut ou LIMITS_FILE définit dans <filename>config."
+#~ "h</filename>) décrit les limites de ressource que vous voulez imposer. Il "
+#~ "doit être possédé et ne doit être lisible que par le compte root."
+
+#~ msgid ""
+#~ "By default no quota is imposed on 'root'. In fact, there is no way to "
+#~ "impose limits via this procedure to root-equiv accounts (accounts with "
+#~ "UID 0)."
+#~ msgstr ""
+#~ "Par défaut, aucun quota (aucune limite) n'est imposé à « root ». En fait, "
+#~ "il n'est pas possible d'imposer de cette façon de limite aux comptes root "
+#~ "ou équivalents (comptes ayant un UID de 0)."
+
+#~ msgid "Each line describes a limit for a user in the form:"
+#~ msgstr ""
+#~ "Chaque ligne décrit une limite pour un utilisateur, elle est de la forme "
+#~ "suivante :"
+
+#~ msgid "user LIMITS_STRING"
+#~ msgstr "utilisateur LISTE_DE_LIMITES"
+
+#~ msgid "or in the form:"
+#~ msgstr "ou sous la forme :"
+
+#~ msgid "@group LIMITS_STRING"
+#~ msgstr "@groupe LISTE_DE_LIMITES"
+
+#~ msgid ""
+#~ "The <emphasis>LIMITS_STRING</emphasis> is a string of a concatenated list "
+#~ "of resource limits. Each limit consists of a letter identifier followed "
+#~ "by a numerical limit."
+#~ msgstr ""
+#~ "Où <emphasis>LISTE_DE_LIMITES</emphasis> est une chaîne construite par la "
+#~ "concaténation d'une liste de limites de ressource. Chaque limite consiste "
+#~ "en une lettre (identifiant le type de limite) et une valeur numérique."
+
+#~ msgid "The valid identifiers are:"
+#~ msgstr "Les identifiants possibles sont :"
+
+#~ msgid "A: max address space (KB)"
+#~ msgstr "A : espace d'adressage maximal (en kilo octets)"
+
+#~ msgid "C: max core file size (KB)"
+#~ msgstr ""
+#~ "C : taille maximale d'un fichier image de la mémoire (« core », en kilo "
+#~ "octets)"
+
+#~ msgid "D: max data size (KB)"
+#~ msgstr ""
+#~ "D : taille maximale du segment de données d'un programme (en kilo octets)"
+
+#~ msgid "F: maximum filesize (KB)"
+#~ msgstr "F : taille maximale des fichiers (en kilo octets)"
+
+#~ msgid ""
+#~ "K: file creation mask, set by <citerefentry><refentrytitle>umask</"
+#~ "refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "K : masque de création de fichier, défini par "
+#~ "<citerefentry><refentrytitle>umask</refentrytitle><manvolnum>2</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "I: max nice value (0..39 which translates to 20..-19)"
+#~ msgstr "I : valeur nice maximum (0..39 qui sera traduit en 20..-19)"
+
+#~ msgid "L: max number of logins for this user"
+#~ msgstr "L : nombre maximal de connexions simultanées pour cet utilisateur"
+
+#~ msgid "M: max locked-in-memory address space (KB)"
+#~ msgstr ""
+#~ "M : taille maximale de mémoire verrouillée (« locked-in-memory », en "
+#~ "kilo octets)"
+
+#~ msgid "N: max number of open files"
+#~ msgstr "N : nombre maximal de fichiers ouverts"
+
+#~ msgid "O: max real time priority"
+#~ msgstr "O : priorité temps réel maximale"
+
+#~ msgid ""
+#~ "P: process priority, set by <citerefentry><refentrytitle>setpriority</"
+#~ "refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "P : priorité des processus, défini par "
+#~ "<citerefentry><refentrytitle>setpriority</refentrytitle><manvolnum>2</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "R: max resident set size (KB)"
+#~ msgstr ""
+#~ "R : taille maximale de la mémoire résidente (« resident set size », en "
+#~ "kilo octets)"
+
+#~ msgid "S: max stack size (KB)"
+#~ msgstr "S : taille maximale de la pile (en kilo octets)"
+
+#~ msgid "T: max CPU time (MIN)"
+#~ msgstr "T : temps processeur maximal consommé (en minutes)"
+
+#~ msgid "U: max number of processes"
+#~ msgstr "U : nombre maximal de processus"
+
+#~ msgid ""
+#~ "For example, <emphasis remap=\"I\">L2D2048N5</emphasis> is a valid "
+#~ "<emphasis>LIMITS_STRING</emphasis>. For reading convenience, the "
+#~ "following entries are equivalent:"
+#~ msgstr ""
+#~ "Par exemple, <emphasis remap=\"I\">L2D2048N5</emphasis> est une chaîne "
+#~ "<emphasis>LISTE_DE_LIMITES</emphasis> valable. Pour faciliter la lecture, "
+#~ "les entrées suivantes sont équivalentes :"
+
+# NOTE: elle va pas cette chaîne
+#~ msgid ""
+#~ "\n"
+#~ " username L2D2048N5\n"
+#~ " username L2 D2048 N5\n"
+#~ " "
+#~ msgstr ""
+#~ "\n"
+#~ " utilisateur L2D2048N5\n"
+#~ " utilisateur L2 D2048 N5\n"
+#~ " "
+
+#~ msgid ""
+#~ "Be aware that after <emphasis remap=\"I\">username</emphasis> the rest of "
+#~ "the line is considered a limit string, thus comments are not allowed. A "
+#~ "invalid limits string will be rejected (not considered) by the "
+#~ "<command>login</command> program."
+#~ msgstr ""
+#~ "Attention : tout ce qui suit <emphasis remap=\"I\">utilisateur</emphasis> "
+#~ "est considéré comme une limite de chaîne. Les commentaires ne sont pas "
+#~ "autorisés. Une chaîne de limites non valable sera rejetée (non utilisée) "
+#~ "par le programme <command>login</command>."
+
+#~ msgid ""
+#~ "The default entry is denoted by username \"<emphasis>*</emphasis>\". If "
+#~ "you have multiple <emphasis remap=\"I\">default</emphasis> entries in "
+#~ "your <emphasis>LIMITS_FILE</emphasis>, then the last one will be used as "
+#~ "the default entry."
+#~ msgstr ""
+#~ "L'entrée par défaut est représentée par un utilisateur dénommé "
+#~ "« <emphasis>*</emphasis> ». Si plusieurs entrées par défaut sont "
+#~ "présentes dans le fichier de limites, alors seule la dernière sera prise "
+#~ "en compte."
+
+#~ msgid ""
+#~ "The limits specified in the form \"<replaceable>@group</replaceable>\" "
+#~ "apply to the members of the specified <replaceable>group</replaceable>."
+#~ msgstr ""
+#~ "Les limites précisées sous la forme « <replaceable>@groupe</"
+#~ "replaceable> » s'appliquent aux membres du <replaceable>groupe</"
+#~ "replaceable> précisé."
+
+#~ msgid ""
+#~ "If more than one line with limits for an user exist, only the first line "
+#~ "for this user will be considered."
+#~ msgstr ""
+#~ "Si plusieurs lignes avec des limites pour un utilisateur existent, seule "
+#~ "la première ligne pour cet utilisateur sera prise en compte."
+
+#~ msgid ""
+#~ "If no lines are specified for an user, the last <replaceable>@group</"
+#~ "replaceable> line matching a group whose the user is a member of will be "
+#~ "considered, or the last line with default limits if no groups contain the "
+#~ "user."
+#~ msgstr ""
+#~ "Si aucune ligne n'est précisée pour l'utilisateur, la dernière ligne "
+#~ "<replaceable>@groupe</replaceable> correspondant à un groupe auquel "
+#~ "l'utilisateur appartient sera prise en compte, ou la dernière ligne avec "
+#~ "les limites par défaut si aucun groupe ne contient l'utilisateur."
+
+#~ msgid ""
+#~ "To completely disable limits for a user, a single dash \"<emphasis>-</"
+#~ "emphasis>\" will do."
+#~ msgstr ""
+#~ "Un simple tiret « <emphasis>-</emphasis> » sera suffisant pour désactiver "
+#~ "toute limite à un utilisateur, "
+
+#~ msgid ""
+#~ "To disable a limit for a user, a single dash \"<replaceable>-</"
+#~ "replaceable>\" can be used instead of the numerical value for this limit."
+#~ msgstr ""
+#~ "Afin de désactiver une limite pour un utilisateur, un simple tiret "
+#~ "« <replaceable>-</replaceable> » peut être utilisé au lieu d'une valeur "
+#~ "numérique pour cette limite."
+
+#~ msgid ""
+#~ "Also, please note that all limit settings are set PER LOGIN. They are not "
+#~ "global, nor are they permanent. Perhaps global limits will come, but for "
+#~ "now this will have to do ;)"
+#~ msgstr ""
+#~ "Notez également que les limites ne sont configurées que PAR CONNEXION. Il "
+#~ "n'y a pas de limite globale ou permanente. Des limites globales "
+#~ "pourraient voir le jour, mais pour l'instant, il faut faire sans."
+
+#~ msgid "/etc/limits"
+#~ msgstr "/etc/limits"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>setpriority</"
+#~ "refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>setpriority</"
+#~ "refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "lastlog"
+#~ msgstr "lastlog"
+
+#~ msgid "reports the most recent login of all users or of a given user"
+#~ msgstr ""
+#~ "signaler les connexions les plus récentes de tous les utilisateurs ou "
+#~ "d'un utilisateur donné"
+
+#~ msgid ""
+#~ "<command>lastlog</command> formats and prints the contents of the last "
+#~ "login log <filename>/var/log/lastlog</filename> file. The <emphasis>login-"
+#~ "name</emphasis>, <emphasis>port</emphasis>, and <emphasis>last login "
+#~ "time</emphasis> will be printed. The default (no flags) causes lastlog "
+#~ "entries to be printed, sorted by their order in <filename>/etc/passwd</"
+#~ "filename>."
+#~ msgstr ""
+#~ "<command>lastlog</command> affiche le contenu du journal des dernières "
+#~ "connexions (<filename>/var/log/lastlog</filename>). Les champs "
+#~ "<emphasis>Utilisateur</emphasis>, <emphasis>Port</emphasis>, date de "
+#~ "<emphasis>Dernière</emphasis> connexion sont affichés. Par défaut (aucune "
+#~ "option de spécifiée), les entrées de lastlog sont affichées triées par "
+#~ "ordre d'apparition dans <filename>/etc/passwd</filename>."
+
+#~ msgid ""
+#~ "The options which apply to the <command>lastlog</command> command are:"
+#~ msgstr ""
+#~ "Les options disponibles pour la commande <command>lastlog</command> sont :"
+
+#~| msgid ""
+#~| "<option>-b</option>, <option>--before</option><replaceable>DAYS</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-b</option>, <option>--before</option>&nbsp;<replaceable>DAYS</"
+#~ "replaceable>"
+#~ msgstr ""
+#~ "<option>-b</option>, <option>--before</option>&nbsp;<replaceable>JOURS</"
+#~ "replaceable>"
+
+#~ msgid ""
+#~ "Print only lastlog records older than <emphasis remap=\"I\">DAYS</"
+#~ "emphasis>."
+#~ msgstr ""
+#~ "N'afficher que les entrées du fichier lastlog plus anciennes que "
+#~ "<emphasis remap=\"I\">JOURS</emphasis>."
+
+#~| msgid ""
+#~| "<option>-t</option>, <option>--time</option><replaceable>DAYS</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-t</option>, <option>--time</option>&nbsp;<replaceable>DAYS</"
+#~ "replaceable>"
+#~ msgstr ""
+#~ "<option>-t</option>, <option>--time</option>&nbsp;<replaceable>JOURS</"
+#~ "replaceable>"
+
+#~ msgid ""
+#~ "Print the lastlog records more recent than <emphasis remap=\"I\">DAYS</"
+#~ "emphasis>."
+#~ msgstr ""
+#~ "Afficher les entrées du fichier lastlog plus récentes que <emphasis remap="
+#~ "\"I\">JOURS</emphasis>."
+
+#~| msgid ""
+#~| "<option>-u</option>, <option>--user</option><replaceable>LOGIN</"
+#~| "replaceable>|<replaceable>RANGE</replaceable>"
+#~ msgid ""
+#~ "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+#~ "replaceable>|<replaceable>RANGE</replaceable>"
+#~ msgstr ""
+#~ "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
+#~ "replaceable>|<replaceable>INTERVALLE</replaceable>"
+
+#~ msgid "Print the lastlog record of the specified user(s)."
+#~ msgstr "N'afficher que les entrées correspondant aux utilisateurs indiqués."
+
+#~ msgid ""
+#~ "The users can be specified by a login name, a numerical user ID, or a "
+#~ "<replaceable>RANGE</replaceable> of users. This <replaceable>RANGE</"
+#~ "replaceable> of users can be specified with a min and max values "
+#~ "(<replaceable>UID_MIN-UID_MAX</replaceable>), a max value (<replaceable>-"
+#~ "UID_MAX</replaceable>), or a min value (<replaceable>UID_MIN-</"
+#~ "replaceable>)."
+#~ msgstr ""
+#~ "Les utilisateurs peuvent être précisés par un nom de connexion, un "
+#~ "identifiant numérique d'utilisateur ou un <replaceable>INTERVALLE</"
+#~ "replaceable> d'utilisateurs. Cet <replaceable>INTERVALLE</replaceable> "
+#~ "d'utilisateurs peut être précisé avec des valeurs minimale et maximale "
+#~ "(<replaceable>UID_MIN-UID_MAX</replaceable>), seulement une valeur "
+#~ "maximale (<replaceable>-UID_MAX</replaceable>) ou une valeur minimale "
+#~ "(<replaceable>UID_MIN-</replaceable>)."
+
+#~ msgid ""
+#~ "If the user has never logged in the message <emphasis>** Never logged "
+#~ "in**</emphasis> will be displayed instead of the port and time."
+#~ msgstr ""
+#~ "Dans le cas où l'utilisateur ne s'est jamais connecté, le message "
+#~ "« <emphasis>**Never logged in**</emphasis> » (« <emphasis>**Jamais "
+#~ "connecté**</emphasis> ») est affiché à la place des champs "
+#~ "<emphasis>Port</emphasis> et date de <emphasis>Dernière</emphasis> "
+#~ "connexion."
+
+#~ msgid ""
+#~ "Only the entries for the current users of the system will be displayed. "
+#~ "Other entries may exist for users that were deleted previously."
+#~ msgstr ""
+#~ "Seules les entrées pour les utilisateurs actuels du système seront "
+#~ "affichées. D'autres entrées peuvent exister pour les utilisateurs "
+#~ "supprimés précédemment."
+
+#~ msgid "NOTE"
+#~ msgstr "NOTE"
+
+#~ msgid ""
+#~ "The <filename>lastlog</filename> file is a database which contains info "
+#~ "on the last login of each user. You should not rotate it. It is a sparse "
+#~ "file, so its size on the disk is usually much smaller than the one shown "
+#~ "by \"<command>ls -l</command>\" (which can indicate a really big file if "
+#~ "you have in <filename>passwd</filename> users with a high UID). You can "
+#~ "display its real size with \"<command>ls -s</command>\"."
+#~ msgstr ""
+#~ "Le fichier <filename>lastlog</filename> est une base de données qui "
+#~ "contient des informations concernant la dernière connexion de chaque "
+#~ "utilisateur. Vous n'avez pas à faire de rotation (avec "
+#~ "<command>logrotate</command>) sur ce fichier. C'est un fichier « creux », "
+#~ "donc sa taille sur le disque est bien plus petite que celle affichée par "
+#~ "« <command>ls -l</command> » (qui peut indiquer un très gros fichier si "
+#~ "vous avez des utilisateurs avec des UID élevés). Vous pouvez afficher sa "
+#~ "taille réelle avec « <command>ls -s</command> »."
+
+#~ msgid "/var/log/lastlog"
+#~ msgstr "/var/log/lastlog"
+
+#~ msgid "Database times of previous user logins."
+#~ msgstr ""
+#~ "Base de données de l'heure des connexions précédentes des utilisateurs."
+
+#~ msgid ""
+#~ "Large gaps in UID numbers will cause the lastlog program to run longer "
+#~ "with no output to the screen (i.e. if in lastlog database there is no "
+#~ "entries for users with UID between 170 and 800 lastlog will appear to "
+#~ "hang as it processes entries with UIDs 171-799)."
+#~ msgstr ""
+#~ "S'il y a des trous importants dans les valeurs des UID, <command>lastlog</"
+#~ "command> s'exécutera plus lentement, sans affichage à l'écran (par "
+#~ "exemple, s'il n'y a pas d'entrée pour les utilisateurs ayant un UID "
+#~ "compris entre 170 et 800 dans base de données lastlog, le programme "
+#~ "lastlog semblera bloqué comme s'il traitait les entrées correspondant aux "
+#~ "UID 171 à 799)."
+
+#~ msgid "Creation, 2005"
+#~ msgstr "Création, 2005"
+
+#~ msgid "gshadow"
+#~ msgstr "gshadow"
+
+#~ msgid ""
+#~ "<filename>/etc/gshadow</filename> contains the shadowed information for "
+#~ "group accounts."
+#~ msgstr ""
+#~ "<filename>/etc/gshadow</filename> contient les informations cachées sur "
+#~ "les groupes."
+
+#~ msgid ""
+#~ "Each line of this file contains the following colon-separated fields:"
+#~ msgstr ""
+#~ "Chaque ligne de ce fichier contient les champs suivants, séparés par des "
+#~ "deux-points (« : ») :"
+
+#~ msgid "group name"
+#~ msgstr "nom du groupe"
+
+#~ msgid "It must be a valid group name, which exist on the system."
+#~ msgstr "Ce doit être un nom de groupe valable, qui existe sur le système."
+
+#~ msgid ""
+#~ "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 *, users will not be able to "
+#~ "use a unix password to access the group (but group members do not need "
+#~ "the password)."
+#~ msgstr ""
+#~ "Si le champ du mot de passe contient une chaîne qui ne peut pas être un "
+#~ "résultat valable de <citerefentry><refentrytitle>crypt</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, par exemple si "
+#~ "elle contient les caractères « ! » ou « * », les utilisateurs ne pourront "
+#~ "pas utiliser le mot de passe UNIX pour accéder au groupe (mais les "
+#~ "membres du groupe n'ont pas besoin de mot de passe)."
+
+#~ msgid ""
+#~ "The password is used when an user who is not a member of the group wants "
+#~ "to gain the permissions of this group (see "
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>)."
+#~ msgstr ""
+#~ "Le mot de passe est utilisé quand un utilisateur non membre du groupe "
+#~ "veut obtenir les permissions de ce groupe (consultez "
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>)."
+
+#~ msgid ""
+#~ "This field may be empty, in which case only the group members can gain "
+#~ "the group permissions."
+#~ msgstr ""
+#~ "Ce champ peut être vide. Dans ce cas seuls les membres du groupe peuvent "
+#~ "obtenir les permissions du groupe."
+
+#~ msgid ""
+#~ "This password supersedes any password specified in <filename>/etc/group</"
+#~ "filename>."
+#~ msgstr ""
+#~ "Ce mot de passe remplace tout mot de passe indiqué dans <filename>/etc/"
+#~ "group</filename>."
+
+#~ msgid "administrators"
+#~ msgstr "administrateurs"
+
+#~ msgid "It must be a comma-separated list of user names."
+#~ msgstr ""
+#~ "Ce champ doit être une liste d'utilisateurs, séparés par des virgules."
+
+#~ msgid "Administrators can change the password or the members of the group."
+#~ msgstr ""
+#~ "Les administrateurs peuvent modifier le mot de passe ou les membres du "
+#~ "groupe."
+
+#~ msgid ""
+#~ "Administrators also have the same permissions as the members (see below)."
+#~ msgstr ""
+#~ "Les administrateurs peuvent aussi avoir les mêmes permissions que les "
+#~ "membres (voir ci-dessous)."
+
+#~ msgid "members"
+#~ msgstr "membres"
+
+#~ msgid "Members can access the group without being prompted for a password."
+#~ msgstr ""
+#~ "Les membres peuvent accéder au groupe sans qu'un mot de passe ne leur "
+#~ "soit demandé."
+
+#~ msgid ""
+#~ "You should use the same list of users as in <filename>/etc/group</"
+#~ "filename>."
+#~ msgstr ""
+#~ "Vous devez utiliser la même liste d'utilisateurs que dans <filename>/etc/"
+#~ "group</filename>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>grpconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>grpconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "verify integrity of group files"
+#~ msgstr "Vérifier l'intégrité des fichiers d'administration des groupes"
+
+#~ msgid ""
+#~ "The <command>grpck</command> command verifies the integrity of the groups "
+#~ "information. It checks that all entries in <filename>/etc/group</"
+#~ "filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</"
+#~ "filename></phrase> have the proper format and contain valid data. The "
+#~ "user is prompted to delete entries that are improperly formatted or which "
+#~ "have other uncorrectable errors."
+#~ msgstr ""
+#~ "La commande <command>grpck</command> vérifie l'intégrité des informations "
+#~ "sur les groupes du système. Toutes les entrées de <filename>/etc/group</"
+#~ "filename> <phrase condition=\"gshadow\"> et <filename>/etc/gshadow</"
+#~ "filename></phrase> sont vérifiées afin de s'assurer qu'elles ont le bon "
+#~ "format et qu'elles contiennent des données valables dans chaque champ. "
+#~ "Une confirmation de l'utilisateur sera demandée pour détruire les entrées "
+#~ "mal formatées ou ayant d'autres erreurs non récupérables."
+
+#~ msgid ""
+#~ "a valid group identifier <phrase condition=\"gshadow\"> (<filename>/etc/"
+#~ "group</filename> only)</phrase>"
+#~ msgstr ""
+#~ "validité des identifiants de groupe <phrase condition=\"gshadow\"> "
+#~ "(seulement <filename>/etc/group</filename>)</phrase> ;"
+
+#~ msgid ""
+#~ "a valid list of members <phrase condition=\"gshadow\"> and "
+#~ "administrators</phrase>"
+#~ msgstr ""
+#~ "validité de la liste de membres <phrase condition=\"gshadow\"> et "
+#~ "d'administrateurs</phrase> ;"
+
+#~ msgid ""
+#~ "a corresponding entry in the <filename>/etc/gshadow</filename> file "
+#~ "(respectively <filename>/etc/group</filename> for the <filename>gshadow</"
+#~ "filename> checks)"
+#~ msgstr ""
+#~ "correspondance d'entrée dans le fichier <filename>/etc/gshadow</filename> "
+#~ "(respectivement <filename>/etc/group</filename> pour les vérifications de "
+#~ "<filename>gshadow</filename>)."
+
+#~ msgid ""
+#~ "The checks for correct number of fields and unique group name are fatal. "
+#~ "If an entry has the wrong number of fields, the user will be prompted to "
+#~ "delete the entire line. If the user does not answer affirmatively, all "
+#~ "further checks are bypassed. An entry with a duplicated group name is "
+#~ "prompted for deletion, but the remaining checks will still be made. All "
+#~ "other errors are warnings and the user is encouraged to run the "
+#~ "<command>groupmod</command> command to correct the error."
+#~ msgstr ""
+#~ "Une erreur dans le nombre de champs ou la non unicité d'un nom de groupe "
+#~ "sera fatale. Si le nombre de champs n'est pas correct, il sera demandé à "
+#~ "l'utilisateur de supprimer la ligne. Si l'utilisateur ne répond pas par "
+#~ "l'affirmative, les vérifications suivantes ne seront pas effectuées. Il "
+#~ "sera également demandé de supprimer les entrées correspondant aux noms de "
+#~ "groupe redondants, mais dans ce cas, les autres vérifications seront "
+#~ "effectuées. Toutes les autres erreurs ne sont que des avertissements et "
+#~ "l'utilisateur est encouragé à utiliser <command>groupmod</command> pour "
+#~ "les corriger."
+
+#~ msgid ""
+#~ "The commands which operate on the <filename>/etc/group</filename><phrase "
+#~ "condition=\"no_gshadow\">file</phrase><phrase condition=\"gshadow\">and "
+#~ "<filename>/etc/gshadow</filename> files</phrase> are not able to alter "
+#~ "corrupted or duplicated entries. <command>grpck</command> should be used "
+#~ "in those circumstances to remove the offending entries."
+#~ msgstr ""
+#~ "Les commandes qui opèrent sur <phrase condition=\"no_gshadow\">le "
+#~ "fichier</phrase> <phrase condition=\"gshadow\">les fichiers</phrase> "
+#~ "<filename>/etc/group</filename> <phrase condition=\"gshadow\">et "
+#~ "<filename>/etc/gshadow</filename></phrase> ne peuvent pas modifier les "
+#~ "entrées corrompues ou redondantes. <command>grpck</command> doit être "
+#~ "utilisée dans ce cas pour supprimer ces entrées."
+
+#~ msgid "The options which apply to the <command>grpck</command> command are:"
+#~ msgstr ""
+#~ "Les options disponibles pour la commande <command>grpck</command> sont :"
+
+#~ msgid ""
+#~ "Execute the <command>grpck</command> command in read-only mode. This "
+#~ "causes all questions regarding changes to be answered <emphasis>no</"
+#~ "emphasis> without user intervention."
+#~ msgstr ""
+#~ "Exécute la commande <command>grpck</command> en mode lecture seule. Cela "
+#~ "signifie qu'à toutes les questions concernant des modifications il sera "
+#~ "répondu <emphasis>no</emphasis> sans l'intervention de l'utilisateur."
+
+#~ msgid ""
+#~ "Sort entries in <filename>/etc/group</filename><phrase condition=\"gshadow"
+#~ "\">and <filename>/etc/gshadow</filename></phrase> by GID."
+#~ msgstr ""
+#~ "Trie les entrées de <filename>/etc/group</filename> <phrase condition="
+#~ "\"gshadow\">et <filename>/etc/gshadow</filename></phrase> par GID."
+
+#~ msgid ""
+#~ "By default, <command>grpck</command> operates on <filename>/etc/group</"
+#~ "filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</"
+#~ "filename></phrase>. The user may select alternate files with the "
+#~ "<emphasis remap=\"I\">group</emphasis><phrase condition=\"no_gshadow"
+#~ "\">parameter.</phrase><phrase condition=\"gshadow\">and <emphasis remap="
+#~ "\"I\">shadow</emphasis> parameters.</phrase>"
+#~ msgstr ""
+#~ "Par défaut, <command>grpck</command> opère sur <filename>/etc/group</"
+#~ "filename> <phrase condition=\"gshadow\">et <filename>/etc/gshadow</"
+#~ "filename></phrase>. L'utilisateur peut préciser d'autres fichiers avec "
+#~ "<phrase condition=\"no_gshadow\">le paramètre</phrase><phrase condition="
+#~ "\"gshadow\">les paramètres</phrase> <emphasis remap=\"I\">group</"
+#~ "emphasis> <phrase condition=\"gshadow\"> et <emphasis remap=\"I\">shadow</"
+#~ "emphasis></phrase>."
+
+#~ msgid "one or more bad group entries"
+#~ msgstr "une entrée de groupe ou plus est incorrecte"
+
+#~ msgid "can't open group files"
+#~ msgstr "impossible d'ouvrir les fichiers group"
+
+#~ msgid "can't update group files"
+#~ msgstr "impossible de mettre à jour les fichiers group"
+
+#~ msgid ""
+#~ "The <command>grpck</command> command exits with the following values: "
+#~ "<placeholder-1/>"
+#~ msgstr ""
+#~ "La commande <command>grpck</command> renvoie les valeurs suivantes en "
+#~ "quittant : <placeholder-1/>"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+#~ "\"gshadow\"><citerefentry><refentrytitle>gshadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum>, </citerefentry>, </"
+#~ "phrase><citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+#~ "\"gshadow\"><citerefentry><refentrytitle>gshadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum>, </citerefentry>, </"
+#~ "phrase><citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "display current group names"
+#~ msgstr "Afficher la liste des groupes auxquels appartient l'utilisateur"
+
+#~ msgid "user"
+#~ msgstr "utilisateur"
+
+#~ msgid ""
+#~ "The <command>groups</command> command displays the current group names or "
+#~ "ID values. If the value does not have a corresponding entry in <filename>/"
+#~ "etc/group</filename>, the value will be displayed as the numerical group "
+#~ "value. The optional <emphasis remap=\"I\">user</emphasis> parameter will "
+#~ "display the groups for the named <emphasis remap=\"I\">user</emphasis>."
+#~ msgstr ""
+#~ "La commande <command>groups</command> affiche la liste des noms de groupe "
+#~ "(ou leur identifiant numérique) de l'utilisateur courant. Si une valeur "
+#~ "n'a pas d'entrée correspondante dans <filename>/etc/group</filename>, "
+#~ "l'identifiant numérique du groupe est affiché. Le paramètre optionnel "
+#~ "<emphasis remap=\"I\">utilisateur</emphasis> permet d'afficher la liste "
+#~ "des groupes pour cet utilisateur."
+
+#~ msgid ""
+#~ "Systems which do not support concurrent group sets will have the "
+#~ "information from <filename>/etc/group</filename> reported. The user must "
+#~ "use <command>newgrp</command> or <command>sg</command> to change his "
+#~ "current real and effective group ID."
+#~ msgstr ""
+#~ "Sur les systèmes qui ne gèrent pas l'appartenance à plusieurs groupes, "
+#~ "seules les informations contenues dans <filename>/etc/group</filename> "
+#~ "sont affichées. L'utilisateur doit utiliser <command>newgrp</command> ou "
+#~ "<command>sg</command> pour modifier l'identifiant de groupe réel et "
+#~ "effectif."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>getgid</"
+#~ "refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+#~ "refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>getgid</"
+#~ "refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+#~ "refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+
+#~ msgid "modify a group definition on the system"
+#~ msgstr "Modifier la définition d'un groupe du système"
+
+#~ msgid "GROUP"
+#~ msgstr "GROUPE"
+
+#~ msgid ""
+#~ "The <command>groupmod</command> command modifies the definition of the "
+#~ "specified <replaceable>GROUP</replaceable> by modifying the appropriate "
+#~ "entry in the group database."
+#~ msgstr ""
+#~ "La commande <command>groupmod</command> modifie la définition du "
+#~ "<replaceable>GROUPE</replaceable> spécifié en modifiant l'entrée "
+#~ "correspondante de la base de données des groupes."
+
+#~ msgid ""
+#~ "The options which apply to the <command>groupmod</command> command are:"
+#~ msgstr ""
+#~ "Les options disponibles pour la commande <command>groupmod</command> "
+#~ "sont :"
+
+#~| msgid ""
+#~| "<option>-g</option>, <option>--gid</option><replaceable>GID</replaceable>"
+#~ msgid ""
+#~ "<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GID</"
+#~ "replaceable>"
+#~ msgstr ""
+#~ "<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GID</"
+#~ "replaceable>"
+
+#~ msgid ""
+#~ "The group ID of the given <replaceable>GROUP</replaceable> will be "
+#~ "changed to <replaceable>GID</replaceable>."
+#~ msgstr ""
+#~ "L'identifiant numérique du groupe <replaceable>GROUPE</replaceable> sera "
+#~ "modifié vers <emphasis remap=\"I\">GID</emphasis>."
+
+#~ msgid ""
+#~ "The value of <replaceable>GID</replaceable> must be a non-negative "
+#~ "decimal integer. This value must be unique, unless the <option>-o</"
+#~ "option> option is used."
+#~ msgstr ""
+#~ "La valeur de <replaceable>GID</replaceable> doit être un nombre décimal "
+#~ "positif. Cette valeur doit être unique, à moins que l'option <option>-o</"
+#~ "option> ne soit utilisée."
+
+#~ msgid ""
+#~ "Users who use the group as primary group will be updated to keep the "
+#~ "group as their primary group."
+#~ msgstr ""
+#~ "Les utilisateurs qui utilisent ce groupe comme groupe primaire seront mis "
+#~ "à jour pour garder le groupe comme groupe primaire."
+
+#~ msgid ""
+#~ "Any files that have the old group ID and must continue to belong to "
+#~ "<replaceable>GROUP</replaceable>, must have their group ID changed "
+#~ "manually."
+#~ msgstr ""
+#~ "Vous devrez modifier vous-même l'identifiant de groupe des fichiers ayant "
+#~ "l'ancien identifiant de groupe qui doivent continuer à appartenir au "
+#~ "<replaceable>GROUPE</replaceable>."
+
+#~ msgid ""
+#~ "No checks will be performed with regard to the <option>GID_MIN</option>, "
+#~ "<option>GID_MAX</option>, <option>SYS_GID_MIN</option>, or "
+#~ "<option>SYS_GID_MAX</option> from <filename>/etc/login.defs</filename>."
+#~ msgstr ""
+#~ "Aucun contrôle ne sera effectué sur les valeurs de <option>GID_MIN</"
+#~ "option>, <option>GID_MAX</option>, <option>SYS_GID_MIN</option>, ou "
+#~ "<option>SYS_GID_MAX</option> du fichier <filename>/etc/login.defs</"
+#~ "filename>."
+
+#~| msgid ""
+#~| "<option>-n</option>, <option>--new-name</option><replaceable>NEW_GROUP</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-n</option>, <option>--new-name</option>&nbsp;"
+#~ "<replaceable>NEW_GROUP</replaceable>"
+#~ msgstr ""
+#~ "<option>-n</option>, <option>--new-name</option>&nbsp;"
+#~ "<replaceable>NOUVEAU_NOM_GROUPE</replaceable>"
+
+#~ msgid ""
+#~ "The name of the group will be changed from <replaceable>GROUP</"
+#~ "replaceable> to <replaceable>NEW_GROUP</replaceable> name."
+#~ msgstr ""
+#~ "Le nom du groupe sera modifié de <emphasis remap=\"I\">GROUPE</emphasis> "
+#~ "vers <emphasis remap=\"I\">NOUVEAU_NOM_GROUPE</emphasis>."
+
+#~ msgid ""
+#~ "When used with the <option>-g</option> option, allow to change the group "
+#~ "<replaceable>GID</replaceable> to a non-unique value."
+#~ msgstr ""
+#~ "En combinaison avec l'option <option>-g</option>, cette option permet de "
+#~ "changer l'identifiant du groupe (<replaceable>GID</replaceable>) vers une "
+#~ "valeur déjà utilisée."
+
+#~ msgid ""
+#~ "The <command>groupmod</command> command exits with the following values: "
+#~ "<placeholder-1/>"
+#~ msgstr ""
+#~ "La commande <command>groupmod</command> retourne les valeurs suivantes en "
+#~ "quittant : <placeholder-1/>"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid "George"
+#~ msgstr "George"
+
+#~ msgid "Kraft"
+#~ msgstr "Kraft"
+
+#~ msgid "IV"
+#~ msgstr "IV"
+
+#~ msgid "Creation, 2000"
+#~ msgstr "Création, 2000"
+
+#~ msgid "administer members of a user's primary group"
+#~ msgstr "Administrer les membres du groupe primaire d'un utilisateur"
+
+#~ msgid "user_name"
+#~ msgstr "nom_utilisateur"
+
+#~ msgid "-a <placeholder-1/>"
+#~ msgstr "-a <placeholder-1/>"
+
+#~ msgid "-d <placeholder-1/>"
+#~ msgstr "-d <placeholder-1/>"
+
+#~ msgid "group_name"
+#~ msgstr "nom_groupe"
+
+#~ msgid "-g <placeholder-1/>"
+#~ msgstr "-g <placeholder-1/>"
+
+#~ msgid "-l"
+#~ msgstr "-l"
+
+#~ 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 ""
+#~ "La commande <command>groupmems</command> permet à un utilisateur "
+#~ "d'administrer la liste des membres de son propre groupe sans avoir les "
+#~ "privilèges du superutilisateur. L'utilitaire <command>groupmems</command> "
+#~ "a été conçu pour les systèmes qui configurent leurs utilisateurs de telle "
+#~ "sorte qu'ils soient responsables de leur groupe primaire (par exemple "
+#~ "guest/guest)."
+
+#~ msgid ""
+#~ "Only the superuser, as administrator, can use <command>groupmems</"
+#~ "command> to alter the memberships of other groups."
+#~ msgstr ""
+#~ "Seul le superutilisateur, en tant qu'administrateur, peut utiliser "
+#~ "<command>groupmems</command> pour modifier la liste des membres d'un "
+#~ "autre groupe."
+
+#~ msgid ""
+#~ "The options which apply to the <command>groupmems</command> command are:"
+#~ msgstr ""
+#~ "Les options disponibles pour la commande <command>groupmems</command> "
+#~ "sont :"
+
+#~| msgid ""
+#~| "<option>-a</option>, <option>--add</option><replaceable>user_name</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-a</option>, <option>--add</option>&nbsp;<replaceable>user_name</"
+#~ "replaceable>"
+#~ msgstr ""
+#~ "<option>-a</option>, <option>--add</option>&nbsp;"
+#~ "<replaceable>nom_utilisateur</replaceable>"
+
+#~ msgid "Add an user to the group membership list."
+#~ msgstr "Ajouter un utilisateur à la liste des membres du groupe."
+
+#~ msgid ""
+#~ "If the <filename>/etc/gshadow</filename> file exist, and the group has no "
+#~ "entry in the <filename>/etc/gshadow</filename> file, a new entry will be "
+#~ "created."
+#~ msgstr ""
+#~ "Si le fichier <filename>/etc/gshadow</filename> existe, et que le groupe "
+#~ "n'y a pas d'entrée, une nouvelle entrée sera créée."
+
+#~| msgid ""
+#~| "<option>-d</option>, <option>--delete</option><replaceable>user_name</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-d</option>, <option>--delete</option>&nbsp;"
+#~ "<replaceable>user_name</replaceable>"
+#~ msgstr ""
+#~ "<option>-d</option>, <option>--delete</option>&nbsp;"
+#~ "<replaceable>nom_utilisateur</replaceable>"
+
+#~ msgid "Delete a user from the group membership list."
+#~ msgstr "Supprimer un utilisateur de la liste des membres du groupe."
+
+#~ msgid ""
+#~ "If the <filename>/etc/gshadow</filename> file exist, the user will be "
+#~ "removed from the list of members and administrators of the group."
+#~ msgstr ""
+#~ "Si le fichier <filename>/etc/gshadow</filename> existe, l'utilisateur "
+#~ "sera retiré de la liste des membres et des administrateurs du groupe."
+
+#~| msgid ""
+#~| "<option>-g</option>, <option>--group</option><replaceable>group_name</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-g</option>, <option>--group</option>&nbsp;"
+#~ "<replaceable>group_name</replaceable>"
+#~ msgstr ""
+#~ "<option>-g</option>, <option>--group</option>&nbsp;"
+#~ "<replaceable>nom_groupe</replaceable>"
+
+#~ msgid "The superuser can specify which group membership list to modify."
+#~ msgstr ""
+#~ "Le superutilisateur peut préciser la liste des membres du groupe à "
+#~ "modifier."
+
+#~ msgid "<option>-l</option>, <option>--list</option>"
+#~ msgstr "<option>-l</option>, <option>--list</option>"
+
+#~ msgid "List the group membership list."
+#~ msgstr "Afficher la liste des membres du groupe."
+
+#~ msgid "<option>-p</option>, <option>--purge</option>"
+#~ msgstr "<option>-p</option>, <option>--purge</option>"
+
+#~ msgid "Purge all users from the group membership list."
+#~ msgstr "Supprimer tous les utilisateurs de la liste des membres du groupe."
+
+#~ msgid "SETUP"
+#~ msgstr "CONFIGURATION"
+
+#~ 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 ""
+#~ "L'exécutable <command>groupmems</command> doit être installé en mode "
+#~ "<literal>2710</literal> avec pour utilisateur <emphasis>root</emphasis> "
+#~ "et pour groupe <emphasis>groups</emphasis>. L'administrateur système peut "
+#~ "ajouter des utilisateurs au groupe <emphasis>groups</emphasis> pour leur "
+#~ "permettre ou leur interdire d'utiliser <command>groupmems</command> pour "
+#~ "gérer leur propre liste de membres du groupe."
+
+#~ 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 ""
+#~ "\n"
+#~ "\t$ groupadd -r groups\n"
+#~ "\t$ chmod 2710 groupmems\n"
+#~ "\t$ chown root.groups groupmems\n"
+#~ "\t$ groupmems -g groups -a gk4\n"
+#~ " "
+
+#~ msgid "secure group account information"
+#~ msgstr "informations cachées sur les groupes"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "The <command>groupdel</command> command modifies the system account "
+#~ "files, deleting all entries that refer to <replaceable>GROUP</"
+#~ "replaceable>. The named group must exist."
+#~ msgstr ""
+#~ "La commande <command>groupdel</command> modifie les fichiers "
+#~ "d'administration des comptes du système, en supprimant les entrées qui se "
+#~ "réfèrent à <replaceable>groupe</replaceable>. Le groupe indiqué doit "
+#~ "exister."
+
+#~ msgid ""
+#~ "The options which apply to the <command>groupdel</command> command are:"
+#~ msgstr ""
+#~ "Les options disponibles pour la commande <command>groupdel</command> "
+#~ "sont :"
+
+#~ msgid ""
+#~ "You may not remove the primary group of any existing user. You must "
+#~ "remove the user before you remove the group."
+#~ msgstr ""
+#~ "Vous ne pouvez pas supprimer le groupe primaire d'un utilisateur "
+#~ "existant. Vous devez supprimer l'utilisateur auparavant."
+
+#~ msgid ""
+#~ "You should manually check all file systems to ensure that no files remain "
+#~ "owned by this group."
+#~ msgstr ""
+#~ "Vous devriez vérifier vous-même qu'aucun fichier possédé par le groupe ne "
+#~ "subsiste sur tous les systèmes de fichiers."
+
+#~ msgid ""
+#~ "The <command>groupdel</command> command exits with the following values: "
+#~ "<placeholder-1/>"
+#~ msgstr ""
+#~ "La commande <command>groupdel</command> renvoie les valeurs suivantes en "
+#~ "quittant : <placeholder-1/>"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "create a new group"
+#~ msgstr "Créer un nouveau groupe"
+
+#~ msgid ""
+#~ "The <command>groupadd</command> command creates a new group account using "
+#~ "the values specified on the command line plus the default values from the "
+#~ "system. The new group will be entered into the system files as needed."
+#~ msgstr ""
+#~ "La commande <command>groupadd</command> crée un nouveau compte de groupe "
+#~ "en utilisant les valeurs spécifiées sur la ligne de commande et les "
+#~ "valeurs par défaut du système. Le nouveau groupe sera inséré dans les "
+#~ "fichiers du système selon les besoins."
+
+#~ msgid ""
+#~ "The options which apply to the <command>groupadd</command> command are:"
+#~ msgstr ""
+#~ "Les options disponibles pour la commande <command>groupadd</command> "
+#~ "sont :"
+
+#~ msgid ""
+#~ "This option causes the command to simply exit with success status if the "
+#~ "specified group already exists. When used with <option>-g</option>, and "
+#~ "the specified GID already exists, another (unique) GID is chosen (i.e. "
+#~ "<option>-g</option> is turned off)."
+#~ msgstr ""
+#~ "Avec cette option, la commande quittera juste avec un état de succès si "
+#~ "le groupe indiqué existe déjà. Avec l'option <option>-g</option>, si "
+#~ "l'identifiant de groupe indiqué existe déjà, un autre identifiant de "
+#~ "groupe (non utilisé) sera choisi (c.-à-d. que <option>-g</option> est "
+#~ "désactivée)."
+
+#~ msgid ""
+#~ "The numerical value of the group's ID. This value must be unique, unless "
+#~ "the <option>-o</option> option is used. The value must be non-negative. "
+#~ "The default is to use the smallest ID value greater than or equal to "
+#~ "<option>GID_MIN</option> and greater than every other group."
+#~ msgstr ""
+#~ "La valeur numérique de l'identifiant du groupe (« group ID » ou GID). "
+#~ "Cette valeur doit être unique, sauf si l'option <option>-o</option> est "
+#~ "utilisée. La valeur ne doit pas être négative. Par défaut, le plus petit "
+#~ "identifiant supérieur au <option>GID_MIN</option> et aux identifiants des "
+#~ "groupes existants est utilisé."
+
+#~ msgid ""
+#~ "See also the <option>-r</option> option and the <option>GID_MAX</option> "
+#~ "description."
+#~ msgstr ""
+#~ "Voir aussi aussi la description des options <option>-r</option> et "
+#~ "<option>GID_MAX</option>."
+
+# NOTE: missing <filename>
+#~ msgid ""
+#~ "Overrides <filename>/etc/login.defs</filename> defaults (GID_MIN, GID_MAX "
+#~ "and others). Multiple <option>-K</option> options can be specified."
+#~ msgstr ""
+#~ "Surcharger les valeurs par défaut du fichier <filename>/etc/login.defs</"
+#~ "filename> (GID_MIN, GID_MAX et autres). L'option <option>-K</option> peut "
+#~ "être indiquée plusieurs fois."
+
+#~| msgid ""
+#~| "Example: <option>-K </option><replaceable>GID_MIN</"
+#~| "replaceable>=<replaceable>100</replaceable><option>-K </"
+#~| "option><replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+#~ msgid ""
+#~ "Example: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+#~ "replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+#~ "<replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+#~ msgstr ""
+#~ "Exemple : <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+#~ "replaceable>=<replaceable>100</replaceable>&nbsp;<option>-K</option>&nbsp;"
+#~ "<replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+
+#~| msgid ""
+#~| "Note: <option>-K </option><replaceable>GID_MIN</"
+#~| "replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+#~| "replaceable>=<replaceable>499</replaceable> doesn't work yet."
+#~ msgid ""
+#~ "Note: <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+#~ "replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+#~ "replaceable>=<replaceable>499</replaceable> doesn't work yet."
+#~ msgstr ""
+#~ "Remarque : <option>-K</option>&nbsp;<replaceable>GID_MIN</"
+#~ "replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+#~ "replaceable>=<replaceable>499</replaceable> ne fonctionne pas pour "
+#~ "l'instant."
+
+#~ msgid "This option permits to add a group with a non-unique GID."
+#~ msgstr ""
+#~ "Cette option permet d'ajouter un groupe avec un identifiant (« GID ») "
+#~ "déjà utilisé."
+
+#~ msgid "Create a system group."
+#~ msgstr "Créer un groupe système."
+
+#~ msgid ""
+#~ "The numeric identifiers of new system groups are chosen in the "
+#~ "<option>SYS_GID_MIN</option>-<option>SYS_GID_MAX</option> range, defined "
+#~ "in <filename>login.defs</filename>, instead of <option>GID_MIN</option>-"
+#~ "<option>GID_MAX</option>."
+#~ msgstr ""
+#~ "Les identifiants numériques des nouveaux groupes systèmes sont choisis "
+#~ "dans l'intervalle <option>SYS_GID_MIN</option>-<option>SYS_GID_MAX</"
+#~ "option>, défini dans <filename>login.defs</filename>, au lieu de "
+#~ "<option>GID_MIN</option>-<option>GID_MAX</option>"
+
+#~ msgid ""
+#~ "Groupnames must start with a lower case letter or an underscore, followed "
+#~ "by lower case letters, digits, underscores, or dashes. They can end with "
+#~ "a dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+#~ msgstr ""
+#~ "Les noms de groupe doivent commencer par une lettre minuscule ou un tiret "
+#~ "bas (« underscore »), et seuls des lettres minuscules, des chiffres, des "
+#~ "« underscore », ou des tirets peuvent suivre. Ils peuvent se terminer par "
+#~ "un signe dollar. Soit, sous la forme d'une expression rationnelle : [a-z_]"
+#~ "[a-z0-9_-]*[$]?"
+
+#~ msgid ""
+#~ "Groupnames may only be up to &GROUP_NAME_MAX_LENGTH; characters long."
+#~ msgstr ""
+#~ "Les noms de groupe sont limités à &GROUP_NAME_MAX_LENGTH; caractères."
+
+#~ msgid ""
+#~ "You may not add a NIS or LDAP group. This must be performed on the "
+#~ "corresponding server."
+#~ msgstr ""
+#~ "Vous ne pouvez pas ajouter d'utilisateur à un groupe NIS ou LDAP. Cela "
+#~ "doit être effectué sur le serveur correspondant."
+
+#~ msgid ""
+#~ "If the groupname already exists in an external group database such as NIS "
+#~ "or LDAP, <command>groupadd</command> will deny the group creation request."
+#~ msgstr ""
+#~ "Si le nom du groupe existe dans une base de données externe, telle que "
+#~ "NIS ou LDAP, <command>groupadd</command> refusera de créer le groupe."
+
+#~ msgid "GID not unique (when <option>-o</option> not used)"
+#~ msgstr "GID déjà utilisé (et <option>-o</option> n'est pas utilisé)"
+
+#~ msgid "group name not unique"
+#~ msgstr "nom de groupe déjà utilisé"
+
+#~ msgid ""
+#~ "The <command>groupadd</command> command exits with the following values: "
+#~ "<placeholder-1/>"
+#~ msgstr ""
+#~ "La commande <command>groupadd</command> retourne les valeurs suivantes en "
+#~ "quittant : <placeholder-1/>"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid "Rafal"
+#~ msgstr "Rafal"
+
+#~ msgid "Maszkowski"
+#~ msgstr "Maszkowski"
+
+#~ msgid "administer <placeholder-1/>"
+#~ msgstr "Administrer <placeholder-1/>"
+
+#~ msgid "administer <placeholder-1/> and <placeholder-2/>"
+#~ msgstr "Administrer <placeholder-1/> et <placeholder-2/>"
+
+#~ msgid "option"
+#~ msgstr "option"
+
+#~ msgid ""
+#~ "The <command>gpasswd</command> command is used to administer <filename>/"
+#~ "etc/group</filename><phrase condition=\"gshadow\">, and <filename>/etc/"
+#~ "gshadow</filename></phrase>. Every group can have <phrase condition="
+#~ "\"gshadow\">administrators,</phrase> members and a password."
+#~ msgstr ""
+#~ "La commande <command>gpasswd</command> est utilisée pour administrer "
+#~ "<filename>/etc/group</filename><phrase condition=\"gshadow\"> et "
+#~ "<filename>/etc/gshadow</filename></phrase>. Chaque groupe peut avoir "
+#~ "<phrase condition=\"gshadow\">des administrateurs,</phrase> des membres "
+#~ "et un mot de passe."
+
+#~ msgid ""
+#~ "System administrators can use the <option>-A</option> option to define "
+#~ "group administrator(s) and the <option>-M</option> option to define "
+#~ "members. They have all rights of group administrators and members."
+#~ msgstr ""
+#~ "Les administrateurs système peuvent utiliser l'option <option>-A</option> "
+#~ "pour définir un ou des administrateurs de groupe et l'option <option>-M</"
+#~ "option> pour définir les membres. Ils ont tous les droits des "
+#~ "administrateurs et membres du groupe."
+
+#~ msgid ""
+#~ "<command>gpasswd</command> called by <phrase condition=\"gshadow\">a "
+#~ "group administrator</phrase><phrase condition=\"no_gshadow\">a system "
+#~ "administrator</phrase> with a group name only prompts for the new "
+#~ "password of the <replaceable>group</replaceable>."
+#~ msgstr ""
+#~ "<command>gpasswd</command> appelée par <phrase condition=\"gshadow\">un "
+#~ "administrateur de groupe</phrase><phrase condition=\"no_gshadow\">un "
+#~ "administrateur système</phrase> avec un nom de groupe demande seulement "
+#~ "le nouveau mot de passe du <replaceable>groupe</replaceable>."
+
+#~ msgid ""
+#~ "If a password is set the members can still use "
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry> without a password, and non-members must supply "
+#~ "the password."
+#~ msgstr ""
+#~ "Si un mot de passe est configuré, les membres peuvent toujours utiliser "
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry> sans mot de passe. Les non membres doivent "
+#~ "fournir le mot de passe."
+
+#~ msgid "Notes about group passwords"
+#~ msgstr "Notes sur les mots de passe de groupe"
+
+#~ msgid ""
+#~ "Group passwords are an inherent security problem since more than one "
+#~ "person is permitted to know the password. However, groups are a useful "
+#~ "tool for permitting co-operation between different users."
+#~ msgstr ""
+#~ "Les mots de passe de groupe représentent naturellement un risque en "
+#~ "matière de sécurité, puisque plusieurs personnes ont connaissance du mot "
+#~ "de passe. Cependant, les groupes sont utiles pour permettre la "
+#~ "coopération entre différents utilisateurs."
+
+#~ msgid ""
+#~ "The options which apply to the <command>gpasswd</command> command are:"
+#~ msgstr ""
+#~ "Les options disponibles pour la commande <command>gpasswd</command> sont :"
+
+#~| msgid ""
+#~| "<option>-a</option>, <option>--add</option><replaceable>user</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-a</option>, <option>--add</option>&nbsp;<replaceable>user</"
+#~ "replaceable>"
+#~ msgstr ""
+#~ "<option>-a</option>, <option>--add</option>&nbsp;"
+#~ "<replaceable>utilisateur</replaceable>"
+
+#~ msgid ""
+#~ "Add the <replaceable>user</replaceable> to the named <replaceable>group</"
+#~ "replaceable>."
+#~ msgstr ""
+#~ "Ajouter l'<replaceable>utilisateur</replaceable> à ce "
+#~ "<replaceable>groupe</replaceable>."
+
+#~| msgid ""
+#~| "<option>-d</option>, <option>--delete</option><replaceable>user</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-d</option>, <option>--delete</option>&nbsp;<replaceable>user</"
+#~ "replaceable>"
+#~ msgstr ""
+#~ "<option>-d</option>, <option>--delete</option>&nbsp;"
+#~ "<replaceable>utilisateur</replaceable>"
+
+#~ msgid ""
+#~ "Remove the <replaceable>user</replaceable> from the named "
+#~ "<replaceable>group</replaceable>."
+#~ msgstr ""
+#~ "Enlever l'<replaceable>utilisateur</replaceable> de ce "
+#~ "<replaceable>groupe</replaceable>."
+
+#~| msgid ""
+#~| "<option>-Q</option>, <option>--root</option><replaceable>CHROOT_DIR</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-Q</option>, <option>--root</option>&nbsp;"
+#~ "<replaceable>CHROOT_DIR</replaceable>"
+#~ msgstr ""
+#~ "<option>-Q</option>, <option>--root</option>&nbsp;"
+#~ "<replaceable>RÉP_CHROOT</replaceable>"
+
+#~ msgid "<option>-r</option>, <option>--remove-password</option>"
+#~ msgstr "<option>-r</option>, <option>--remove-password</option>"
+
+#~ msgid ""
+#~ "Remove the password from the named <replaceable>group</replaceable>. The "
+#~ "group password will be empty. Only group members will be allowed to use "
+#~ "<command>newgrp</command> to join the named <replaceable>group</"
+#~ "replaceable>."
+#~ msgstr ""
+#~ "Enlever le mot de passe pour ce <replaceable>groupe</replaceable>. Le mot "
+#~ "de passe du groupe sera vide. Seuls les membres du groupe seront "
+#~ "autorisés à utiliser <command>newgrp</command> pour rejoindre ce "
+#~ "<replaceable>groupe</replaceable>."
+
+#~ msgid "<option>-R</option>, <option>--restrict</option>"
+#~ msgstr "<option>-R</option>, <option>--restrict</option>"
+
+#~ msgid ""
+#~ "Restrict the access to the named <replaceable>group</replaceable>. The "
+#~ "group password is set to \"!\". Only group members with a password will "
+#~ "be allowed to use <command>newgrp</command> to join the named "
+#~ "<replaceable>group</replaceable>."
+#~ msgstr ""
+#~ "Restreindre l'accès à ce <replaceable>groupe</replaceable>. Le mot de "
+#~ "passe du groupe est défini à « ! ». Seuls les membres du groupe seront "
+#~ "autorisés à utiliser <command>newgrp</command> pour rejoindre ce "
+#~ "<replaceable>groupe</replaceable>."
+
+#~| msgid ""
+#~| "<option>-A</option>, <option>--administrators</option><replaceable>user</"
+#~| "replaceable>,..."
+#~ msgid ""
+#~ "<option>-A</option>, <option>--administrators</option>&nbsp;"
+#~ "<replaceable>user</replaceable>,..."
+#~ msgstr ""
+#~ "<option>-A</option>, <option>--administrators</option>&nbsp;"
+#~ "<replaceable>utilisateur</replaceable>,..."
+
+#~| msgid ""
+#~| "<option>-M</option>, <option>--members</option><replaceable>user</"
+#~| "replaceable>,..."
+#~ msgid ""
+#~ "<option>-M</option>, <option>--members</option>&nbsp;<replaceable>user</"
+#~ "replaceable>,..."
+#~ msgstr ""
+#~ "<option>-M</option>, <option>--members</option>&nbsp;"
+#~ "<replaceable>utilisateur</replaceable>,..."
+
+#~ msgid "Set the list of group members."
+#~ msgstr "Configurer la liste des membres du groupe."
+
+#~ msgid ""
+#~ "This tool only operates on the <filename>/etc/group</filename><phrase "
+#~ "condition=\"gshadow\"> and <filename>/etc/gshadow</filename> files.</"
+#~ "phrase><phrase condition=\"no_gshadow\">file.</phrase> Thus you cannot "
+#~ "change any NIS or LDAP group. This must be performed on the corresponding "
+#~ "server."
+#~ msgstr ""
+#~ "Cet outil ne fonctionne que sur <phrase condition=\"no_gshadow\">le "
+#~ "fichier</phrase><phrase condition=\"gshadow\">les fichiers</phrase> "
+#~ "<filename>/etc/group</filename><phrase condition=\"gshadow\"> et "
+#~ "<filename>/etc/gshadow</filename></phrase>. Par conséquent vous ne pouvez "
+#~ "modifier aucun groupe NIS ou LDAP. Cela doit être effectué sur le serveur "
+#~ "correspondant."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition="
+#~ "\"gshadow\">, <citerefentry><refentrytitle>gshadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition="
+#~ "\"gshadow\">, <citerefentry><refentrytitle>gshadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+
+#~ msgid "faillog"
+#~ msgstr "faillog"
+
+#~ msgid "display faillog records or set login failure limits"
+#~ msgstr ""
+#~ "Examiner le fichier faillog, et configurer les limites d'échecs de "
+#~ "connexion"
+
+#~ msgid ""
+#~ "<command>faillog</command> displays the contents of the failure log "
+#~ "database (<filename>/var/log/faillog</filename>). It can also set the "
+#~ "failure counters and limits. When <command>faillog</command> is run "
+#~ "without arguments, it only displays the faillog records of the users who "
+#~ "had a login failure."
+#~ msgstr ""
+#~ "<command>faillog</command> affiche le contenu du journal des échecs de "
+#~ "connexion (<filename>/var/log/faillog</filename>). Il peut aussi "
+#~ "configurer le décompte et les limitations de ces échecs. Exécuter "
+#~ "<command>faillog</command> sans argument n'affiche que la liste des "
+#~ "échecs des utilisateurs qui ont déjà eu un échec de connexion."
+
+#~ msgid ""
+#~ "The options which apply to the <command>faillog</command> command are:"
+#~ msgstr ""
+#~ "Les options disponibles pour la commande <command>faillog</command> sont :"
+
+#~ msgid ""
+#~ "Display (or act on) faillog records for all users having an entry in the "
+#~ "<filename>faillog</filename> database."
+#~ msgstr ""
+#~ "Afficher (ou agir sur) les enregistrements d'erreurs de connexion pour "
+#~ "tous les utilisateurs ayant une entrée dans la base de données "
+#~ "<filename>faillog</filename>."
+
+#~ msgid ""
+#~ "The range of users can be restricted with the <option>-u</option> option."
+#~ msgstr ""
+#~ "La liste des utilisateurs peut être limitée avec l'option <option>-u</"
+#~ "option>."
+
+#~ msgid ""
+#~ "In display mode, this is still restricted to existing users but forces "
+#~ "the display of the faillog entries even if they are empty."
+#~ msgstr ""
+#~ "En mode affichage, toujours limitée aux utilisateurs existants, mais "
+#~ "l'affichage des entrées d'erreur de connexion est imposé même si elles "
+#~ "sont vides."
+
+#~ msgid ""
+#~ "With the <option>-l</option>, <option>-m</option>, <option>-r</option>, "
+#~ "<option>-t</option> options, the users' records are changed, even if the "
+#~ "user does not exist on the system. This is useful to reset records of "
+#~ "users that have been deleted or to set a policy in advance for a range of "
+#~ "users."
+#~ msgstr ""
+#~ "Avec les options <option>-l</option>, <option>-m</option>, <option>-r</"
+#~ "option> ou <option>-t</option> les enregistrements des utilisateurs sont "
+#~ "modifiés, même si l'utilisateur n'existe pas sur le système. C'est utile "
+#~ "pour remettre à zéro les enregistrements des utilisateurs qui ont été "
+#~ "supprimés ou pour mettre en place une politique préventive pour un "
+#~ "ensemble d'utilisateurs."
+
+#~| msgid ""
+#~| "<option>-l</option>, <option>--lock-secs</option><replaceable>SEC</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-l</option>, <option>--lock-secs</option>&nbsp;<replaceable>SEC</"
+#~ "replaceable>"
+#~ msgstr ""
+#~ "<option>-l</option>, <option>--lock-secs</option>&nbsp;<replaceable>SEC</"
+#~ "replaceable>"
+
+# NOTE: s/to/during/
+#~ msgid ""
+#~ "Lock account for <replaceable>SEC</replaceable> seconds after failed "
+#~ "login."
+#~ msgstr ""
+#~ "Verrouiller le compte pendant <replaceable>SEC</replaceable> secondes "
+#~ "après un échec de connexion."
+
+#~ msgid ""
+#~ "Write access to <filename>/var/log/faillog</filename> is required for "
+#~ "this option."
+#~ msgstr ""
+#~ "L'accès en écriture sur <filename>/var/log/faillog</filename> est "
+#~ "nécessaire pour cette option."
+
+#~| msgid ""
+#~| "<option>-m</option>, <option>--maximum</option><replaceable>MAX</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-m</option>, <option>--maximum</option>&nbsp;<replaceable>MAX</"
+#~ "replaceable>"
+#~ msgstr ""
+#~ "<option>-m</option>, <option>--maximum</option>&nbsp;<replaceable>MAX</"
+#~ "replaceable>"
+
+#~ msgid ""
+#~ "Set the maximum number of login failures after the account is disabled to "
+#~ "<replaceable>MAX</replaceable>."
+#~ msgstr ""
+#~ "Configurer le nombre maximum d'échecs de connexion après lequel le compte "
+#~ "sera désactivé à <replaceable>MAX</replaceable>."
+
+#~ msgid ""
+#~ "Selecting a <replaceable>MAX</replaceable> value of 0 has the effect of "
+#~ "not placing a limit on the number of failed logins."
+#~ msgstr ""
+#~ "Sélectionner une valeur <replaceable>MAX</replaceable> de 0 a pour effet "
+#~ "de ne placer aucune limite sur le nombre d'échecs de connexion."
+
+#~ msgid ""
+#~ "The maximum failure count should always be 0 for <emphasis>root</"
+#~ "emphasis> to prevent a denial of services attack against the system."
+#~ msgstr ""
+#~ "Le compteur d'erreurs maximum doit toujours être 0 pour <emphasis>root</"
+#~ "emphasis> afin d'éviter les attaques de type déni de service sur le "
+#~ "système."
+
+#~ msgid "<option>-r</option>, <option>--reset</option>"
+#~ msgstr "<option>-r</option>, <option>--reset</option>"
+
+#~ msgid ""
+#~ "Display faillog records more recent than <replaceable>DAYS</replaceable>."
+#~ msgstr ""
+#~ "Afficher les entrées de faillog plus récentes que <replaceable>JOURS</"
+#~ "replaceable>."
+
+#~ msgid ""
+#~ "Display faillog record or maintains failure counters and limits (if used "
+#~ "with <option>-l</option>, <option>-m</option> or <option>-r</option> "
+#~ "options) only for the specified user(s)."
+#~ msgstr ""
+#~ "Afficher l'entrée de faillog ou maintient le décompte et les limitations "
+#~ "(suivant que l'option <option>-l</option>, <option>-m</option> ou "
+#~ "<option>-r</option> est utilisée) seulement pour les utilisateurs "
+#~ "indiqués."
+
+#~ msgid ""
+#~ "When none of the <option>-l</option>, <option>-m</option>, or <option>-r</"
+#~ "option> options are used, <command>faillog</command> displays the faillog "
+#~ "record of the specified user(s)."
+#~ msgstr ""
+#~ "Quand aucune des options <option>-l</option>, <option>-m</option> ou "
+#~ "<option>-r</option> n'est utilisée, <command>faillog</command> affiche "
+#~ "l'enregistrement des échecs de connexion des utilisateurs précisés."
+
+#~ msgid ""
+#~ "<command>faillog</command> only prints out users with no successful login "
+#~ "since the last failure. To print out a user who has had a successful "
+#~ "login since their last failure, you must explicitly request the user with "
+#~ "the <option>-u</option> flag, or print out all users with the <option>-a</"
+#~ "option> flag."
+#~ msgstr ""
+#~ "<command>faillog</command> n'affiche que les utilisateurs n'ayant pas eu "
+#~ "de connexion réussie depuis leur dernier échec. Pour afficher un "
+#~ "utilisateur ayant eu une connexion réussie depuis son dernier échec, vous "
+#~ "devez explicitement demander cet utilisateur avec l'option <option>-u</"
+#~ "option>, ou demander l'affichage de tous les utilisateurs avec l'option "
+#~ "<option>-a</option>."
+
+#~ msgid "/var/log/faillog"
+#~ msgstr "/var/log/faillog"
+
+#~ msgid "Failure logging file."
+#~ msgstr "Journal des échecs de connexion."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>faillog</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>faillog</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<filename>/var/log/faillog</filename> maintains a count of login failures "
+#~ "and the limits for each account."
+#~ msgstr ""
+#~ "<filename>/var/log/faillog</filename> maintient un compte des échecs de "
+#~ "connexion et les limites pour chaque compte."
+
+#~ msgid ""
+#~ "The file contains fixed length records, indexed by numerical UID. Each "
+#~ "record contains the count of login failures since the last successful "
+#~ "login; the maximum number of failures before the account is disabled; the "
+#~ "line on which the last login failure occurred; the date of the last login "
+#~ "failure; and the duration (in seconds) during which the account will be "
+#~ "locked after a failure."
+#~ msgstr ""
+#~ "Le fichier contient un nombre constant d'enregistrements, triés par "
+#~ "identifiant d'utilisateur numérique. Chaque enregistrement contient le "
+#~ "nombre d'échecs de connexion depuis la dernière connexion réussie, le "
+#~ "nombre maximum d'échecs de connexion avant désactivation du compte, la "
+#~ "ligne sur laquelle a eu lieu le dernier échec de connexion, la date du "
+#~ "dernier échec de connexion et la durée (en seconde) pendant laquelle le "
+#~ "compte sera verrouillé après un échec."
+
+#~ msgid "The structure of the file is:"
+#~ msgstr "La structure du fichier est la suivante :"
+
+#~ msgid ""
+#~ "\n"
+#~ "struct\tfaillog {\n"
+#~ "\tshort fail_cnt;\n"
+#~ "\tshort fail_max;\n"
+#~ "\tchar fail_line[12];\n"
+#~ "\ttime_t fail_time;\n"
+#~ "\tlong fail_locktime;\n"
+#~ "};"
+#~ msgstr ""
+#~ "\n"
+#~ "struct\tfaillog {\n"
+#~ "\tshort fail_cnt; /* compteur des échecs */\n"
+#~ "\tshort fail_max; /* nb max avant désactivation */\n"
+#~ "\tchar fail_line[12]; /* ligne du dernier échec */\n"
+#~ "\ttime_t fail_time; /* date du dernier échec */\n"
+#~ "\tlong fail_locktime;};"
+
+#~ msgid "Creation, 1990"
+#~ msgstr "Création, 1990"
+
+#~ msgid "expiry"
+#~ msgstr "expiry"
+
+#~ msgid "check and enforce password expiration policy"
+#~ msgstr "Vérifier et sécuriser la durée de validité des mots de passe"
+
+#~ msgid ""
+#~ "The <command>expiry</command> command checks (<option>-c</option>) the "
+#~ "current password expiration and forces (<option>-f</option>) changes when "
+#~ "required. It is callable as a normal user command."
+#~ msgstr ""
+#~ "Avec l'option <option>-c</option>, <command>expiry</command> vérifie la "
+#~ "validité du mot de passe de l'utilisateur actuel, et force (avec l'option "
+#~ "<option>-f</option>) des modifications si nécessaire. Il peut être appelé "
+#~ "par un utilisateur normal."
+
+#~ msgid ""
+#~ "The options which apply to the <command>expiry</command> command are:"
+#~ msgstr ""
+#~ "Les options disponibles pour la commande <command>expiry</command> sont :"
+
+#~ msgid "<option>-c</option>, <option>--check</option>"
+#~ msgstr "<option>-c</option>, <option>--check</option>"
+
+#~ msgid "Check the password expiration of the current user."
+#~ msgstr ""
+#~ "Vérifier la durée de validité du mot de passe de l'utilisateur courant."
+
+#~ msgid "Force a password change if the current user has an expired password."
+#~ msgstr ""
+#~ "Forcer le changement du mot de passe si l'utilisateur courant possède un "
+#~ "mot de passe qui a expiré."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "The <command>chsh</command> command changes the user login shell. This "
+#~ "determines the name of the user's initial login command. A normal user "
+#~ "may only change the login shell for her own account; the superuser may "
+#~ "change the login shell for any account."
+#~ msgstr ""
+#~ "La commande <command>chsh</command> modifie l'interpréteur de commandes "
+#~ "initial (« login shell ») de l'utilisateur qui sera invoqué lors des "
+#~ "connexions de l'utilisateur. Un utilisateur normal ne peut changer que "
+#~ "l'interpréteur associé à son propre compte. Le superutilisateur peut "
+#~ "changer l'interpréteur de commandes initial de n'importe quel compte."
+
+#~ msgid "The options which apply to the <command>chsh</command> command are:"
+#~ msgstr ""
+#~ "Les options applicables à la commande <command>chsh</command> sont :"
+
+#~ msgid ""
+#~ "If the <option>-s</option> option is not selected, <command>chsh</"
+#~ "command> operates in an interactive fashion, prompting the user with the "
+#~ "current login shell. Enter the new value to change the shell, or leave "
+#~ "the line blank to use the current one. The current shell is displayed "
+#~ "between a pair of <emphasis>[ ]</emphasis> marks."
+#~ msgstr ""
+#~ "Quand l'option <option>-s</option> n'est pas sélectionnée, <command>chsh</"
+#~ "command> opère de façon interactive, demandant à l'utilisateur quel doit "
+#~ "être le nouvel interpréteur de commandes initial (« login shell »). "
+#~ "L'utilisateur pourra entrer une nouvelle valeur pour modifier "
+#~ "l'interpréteur, ou laisser la ligne blanche pour conserver l'interpréteur "
+#~ "actuel. L'interpréteur actuel est indiqué entre crochets (<emphasis>[ ]</"
+#~ "emphasis>)."
+
+#~ msgid ""
+#~ "The only restriction placed on the login shell is that the command name "
+#~ "must be listed in <filename>/etc/shells</filename>, unless the invoker is "
+#~ "the superuser, and then any value may be added. An account with a "
+#~ "restricted login shell may not change her login shell. For this reason, "
+#~ "placing <filename>/bin/rsh</filename> in <filename>/etc/shells</filename> "
+#~ "is discouraged since accidentally changing to a restricted shell would "
+#~ "prevent the user from ever changing her login shell back to its original "
+#~ "value."
+#~ msgstr ""
+#~ "La seule restriction placée sur l'interpréteur de commandes initial "
+#~ "(« login shell ») est que cette commande doit faire partie de <filename>/"
+#~ "etc/shells</filename>, à moins qu'elle ne soit invoquée par le "
+#~ "superutilisateur, qui peut ajouter n'importe quelle valeur. Un compte "
+#~ "avec un interpréteur de commandes initial restreint ne peut pas changer "
+#~ "son interpréteur. Pour cette raison, il est déconseillé de placer "
+#~ "<filename>/bin/rsh</filename> dans <filename>/etc/shells</filename>, "
+#~ "puisqu'une modification accidentelle vers un interpréteur restreint "
+#~ "empêchera alors l'utilisateur de revenir ensuite à l'interpréteur "
+#~ "précédent."
+
+#~ msgid "/etc/shells"
+#~ msgstr "/etc/shells"
+
+#~ msgid "List of valid login shells."
+#~ msgstr "Liste des interpréteurs de commandes initiaux valables."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "update passwords in batch mode"
+#~ msgstr "Mettre à jour des mots de passe par lot"
+
+#~ msgid ""
+#~ "The <command>chpasswd</command> command reads a list of user name and "
+#~ "password pairs from standard input and uses this information to update a "
+#~ "group of existing users. Each line is of the format:"
+#~ msgstr ""
+#~ "La commande <command>chpasswd</command> lit une liste de paires de noms "
+#~ "d'utilisateurs et de mots de passe depuis l'entrée standard et utilise "
+#~ "ces informations pour mettre à jour un groupe d'utilisateurs existants. "
+#~ "Chaque ligne est au format suivant :"
+
+#~ msgid ""
+#~ "<emphasis remap=\"I\">user_name</emphasis>:<emphasis remap=\"I"
+#~ "\">password</emphasis>"
+#~ msgstr ""
+#~ "<emphasis remap=\"I\">nom_utilisateur</emphasis>:<emphasis remap=\"I"
+#~ "\">mot_de_passe</emphasis>"
+
+#~ msgid ""
+#~ "By default the passwords must be supplied in clear-text, and are "
+#~ "encrypted by <command>chpasswd</command>. Also the password age will be "
+#~ "updated, if present."
+#~ msgstr ""
+#~ "Par défaut, les mots de passe doivent être fournis en clair, et sont "
+#~ "chiffrés par <command>chpasswd</command>. L'âge du mot de passe sera "
+#~ "également mis à jour, s'il est présent."
+
+#~ msgid ""
+#~ "The default encryption algorithm can be defined for the system with the "
+#~ "<option>ENCRYPT_METHOD</option> or <option>MD5_CRYPT_ENAB</option> "
+#~ "variables of <filename>/etc/login.defs</filename>, and can be overwitten "
+#~ "with the <option>-e</option>, <option>-m</option>, or <option>-c</option> "
+#~ "options."
+#~ msgstr ""
+#~ "L'algorithme de chiffrement par défaut peut être défini pour le système à "
+#~ "l'aide des variables <option>ENCRYPT_METHOD</option> ou "
+#~ "<option>MD5_CRYPT_ENAB</option> de <filename>/etc/login.defs</filename>, "
+#~ "et peut être surchargé par les options <option>-e</option>, <option>-m</"
+#~ "option> ou <option>-c</option>"
+
+#~ msgid ""
+#~ "By default, passwords are encrypted by PAM, but (even if not recommended) "
+#~ "you can select a different encryption method with the <option>-e</"
+#~ "option>, <option>-m</option>, or <option>-c</option> options."
+#~ msgstr ""
+#~ "Par défaut les mots de passe sont chiffrés par PAM, mais (même si cela "
+#~ "est déconseillé) vous pouvez sélectionner une méthode de chiffrement "
+#~ "différente avec les options <option>-e</option>, <option>-m</option> ou "
+#~ "<option>-c</option>."
+
+#~ msgid ""
+#~ "<phrase condition=\"pam\">Except when PAM is used to encrypt the "
+#~ "passwords,</phrase><command>chpasswd</command> first updates all the "
+#~ "passwords in memory, and then commits all the changes to disk if no "
+#~ "errors occured for any user."
+#~ msgstr ""
+#~ "<phrase condition=\"pam\">Sauf quand PAM est utilisé pour chiffrer les "
+#~ "mots de passe, </phrase><command>chpasswd</command> modifie d'abord tous "
+#~ "les mots de passe en mémoire, puis propage toutes les modifications sur "
+#~ "le disque si aucune erreur n'a eu lieu, quelque soit l'utilisateur."
+
+#~ msgid ""
+#~ "When PAM is used to encrypt the passwords (and update the passwords in "
+#~ "the system database) then if a password cannot be updated "
+#~ "<command>chpasswd</command> continues updating the passwords of the next "
+#~ "users, and will return an error code on exit."
+#~ msgstr ""
+#~ "Quand PAM est utilisé pour chiffrer les mots de passe (et pour mettre à "
+#~ "jour les mots de passe dans la base de données du système), si aucun mot "
+#~ "de passe ne peut être mis à jour, <command>chpasswd</command> continuera "
+#~ "la mise à jour des mots de passe pour les utilisateurs suivants, et "
+#~ "renverra un code d'erreur en sortie."
+
+#~ msgid ""
+#~ "This command is intended to be used in a large system environment where "
+#~ "many accounts are created at a single time."
+#~ msgstr ""
+#~ "Cette commande est destinée aux gros systèmes pour lesquels un nombre "
+#~ "importants de comptes sont créés en une seule fois."
+
+#~ msgid ""
+#~ "The options which apply to the <command>chpasswd</command> command are:"
+#~ msgstr ""
+#~ "Les options disponibles pour la commande <command>chpasswd</command> "
+#~ "sont :"
+
+#~| msgid ""
+#~| "<option>-c</option>, <option>--crypt-method</option><replaceable>METHOD</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-c</option>, <option>--crypt-method</option>&nbsp;"
+#~ "<replaceable>METHOD</replaceable>"
+#~ msgstr ""
+#~ "<option>-c</option>, <option>--crypt-method</option>&nbsp;"
+#~ "<replaceable>MÉTHODE</replaceable>"
+
+#~ msgid "The available methods are DES, MD5, and NONE."
+#~ msgstr "Les méthodes disponibles sont DES, MD5 et NONE."
+
+#~ msgid "By default, PAM is used to encrypt the passwords."
+#~ msgstr "Par défaut, PAM est utilisé pour chiffrer les mots de passe."
+
+#~ msgid ""
+#~ "By default (if none of the <option>-c</option>, <option>-m</option>, or "
+#~ "<option>-e</option> options are specified), the encryption method is "
+#~ "defined by the <option>ENCRYPT_METHOD</option> or <option>MD5_CRYPT_ENAB</"
+#~ "option> variables of <filename>/etc/login.defs</filename>."
+#~ msgstr ""
+#~ "Par défaut (si aucune des options <option>-c</option>, <option>-m</"
+#~ "option> ou <option>-e</option> n'est précisée), la méthode de chiffrement "
+#~ "est définie par les variables <option>ENCRYPT_METHOD</option> ou "
+#~ "<option>MD5_CRYPT_ENAB</option> de <filename>/etc/login.defs</filename>."
+
+#~ msgid "<option>-e</option>, <option>--encrypted</option>"
+#~ msgstr "<option>-e</option>, <option>--encrypted</option>"
+
+#~ msgid "Supplied passwords are in encrypted form."
+#~ msgstr "Indiquer que les mots de passe fournis sont chiffrés."
+
+#~ msgid "<option>-m</option>, <option>--md5</option>"
+#~ msgstr "<option>-m</option>, <option>--md5</option>"
+
+#~| msgid ""
+#~| "<option>-s</option>, <option>--sha-rounds</option><replaceable>ROUNDS</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-s</option>, <option>--sha-rounds</option>&nbsp;"
+#~ "<replaceable>ROUNDS</replaceable>"
+#~ msgstr ""
+#~ "<option>-s</option>, <option>--sha-rounds</option>&nbsp;"
+#~ "<replaceable>ROUNDS</replaceable>"
+
+#~ msgid ""
+#~ "By default, the number of rounds is defined by the "
+#~ "<option>SHA_CRYPT_MIN_ROUNDS</option> and <option>SHA_CRYPT_MAX_ROUNDS</"
+#~ "option> variables in <filename>/etc/login.defs</filename>."
+#~ msgstr ""
+#~ "Par défaut, le nombre de rounds est défini par les variables "
+#~ "<option>SHA_CRYPT_MIN_ROUNDS</option> et <option>SHA_CRYPT_MAX_ROUNDS</"
+#~ "option> dans <filename>/etc/login.defs</filename>."
+
+#~ msgid ""
+#~ "Remember to set permissions or umask to prevent readability of "
+#~ "unencrypted files by other users."
+#~ msgstr ""
+#~ "Pensez à configurer les permissions ou umask afin d'empêcher la lecture "
+#~ "des fichiers non chiffrés par les autres utilisateurs."
+
+#~ msgid "/etc/pam.d/chpasswd"
+#~ msgstr "/etc/pam.d/chpasswd"
+
+#~ msgid "PAM configuration for <command>chpasswd</command>."
+#~ msgstr "Configuration de PAM pour <command>chpasswd</command>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>newusers</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<phrase><citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+#~ "phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>newusers</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<phrase><citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+#~ "phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "Creation, 2006"
+#~ msgstr "Création, 2006"
+
+#~ msgid "update group passwords in batch mode"
+#~ msgstr "Mettre à jour par lot des mots de passe des groupes"
+
+#~ msgid ""
+#~ "The <command>chgpasswd</command> command reads a list of group name and "
+#~ "password pairs from standard input and uses this information to update a "
+#~ "set of existing groups. Each line is of the format:"
+#~ msgstr ""
+#~ "La commande <command>chgpasswd</command> lit une liste de paires de noms "
+#~ "de groupes et de mots de passe depuis l'entrée standard et utilise ces "
+#~ "informations pour mettre à jour un ensemble de groupes existants. Chaque "
+#~ "ligne est au format suivant :"
+
+#~ msgid ""
+#~ "<emphasis remap=\"I\">group_name</emphasis>:<emphasis remap=\"I"
+#~ "\">password</emphasis>"
+#~ msgstr ""
+#~ "<emphasis remap=\"I\">nom_utilisateur</emphasis>:<emphasis remap=\"I"
+#~ "\">mot_de_passe</emphasis>"
+
+#~ msgid ""
+#~ "By default the supplied password must be in clear-text, and is encrypted "
+#~ "by <command>chgpasswd</command>."
+#~ msgstr ""
+#~ "Par défaut, le mot de passe doit être fourni en clair, et est chiffré par "
+#~ "<command>chgpasswd</command>."
+
+#~ msgid ""
+#~ "The default encryption algorithm can be defined for the system with the "
+#~ "<option>ENCRYPT_METHOD</option> variable of <filename>/etc/login.defs</"
+#~ "filename>, and can be overwiten with the <option>-e</option>, <option>-m</"
+#~ "option>, or <option>-c</option> options."
+#~ msgstr ""
+#~ "L'algorithme de chiffrement peut être défini pour le système avec la "
+#~ "variable <option>ENCRYPT_METHOD</option> de <filename>/etc/login.defs</"
+#~ "filename> et peut être surchargé avec les options <option>-e</option>, "
+#~ "<option>-m</option> ou <option>-c</option>."
+
+#~ msgid ""
+#~ "The options which apply to the <command>chgpasswd</command> command are:"
+#~ msgstr ""
+#~ "Les options disponibles pour la commande <command>chgpasswd</command> "
+#~ "sont :"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "The <command>chfn</command> command changes user fullname, office room "
+#~ "number, office phone number, and home phone number information for a "
+#~ "user's account. This information is typically printed by "
+#~ "<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry> and similar programs. A normal user may only "
+#~ "change the fields for her own account, subject to the restrictions in "
+#~ "<filename>/etc/login.defs</filename>. (The default configuration is to "
+#~ "prevent users from changing their fullname.) The superuser may change any "
+#~ "field for any account. Additionally, only the superuser may use the "
+#~ "<option>-o</option> option to change the undefined portions of the GECOS "
+#~ "field."
+#~ msgstr ""
+#~ "La commande <command>chfn</command> modifie le nom complet d'un "
+#~ "utilisateur, son numéro de bureau, son numéro de téléphone professionnel, "
+#~ "son extension, et son numéro de téléphone personnel. Ces informations "
+#~ "sont généralement affichées par <citerefentry><refentrytitle>finger</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry> ou d'autres "
+#~ "programmes similaires. Un utilisateur normal ne peut modifier que les "
+#~ "informations associées à son propre compte, avec les restrictions "
+#~ "précisées dans <filename>/etc/login.defs</filename>. (Par défaut, les "
+#~ "utilisateurs ne peuvent pas modifier leur nom complet). Le "
+#~ "superutilisateur peut modifier n'importe quel champ pour n'importe quel "
+#~ "compte. De plus, seul le superutilisateur peut utiliser l'option <option>-"
+#~ "o</option> pour modifier les parties non précisées du champ GECOS."
+
+#~ msgid ""
+#~ "These fields must not contain any colons. Except for the <emphasis remap="
+#~ "\"I\">other</emphasis> field, they should not contain any comma or equal "
+#~ "sign. It is also recommended to avoid non-US-ASCII characters, but this "
+#~ "is only enforced for the phone numbers. The <emphasis remap=\"I\">other</"
+#~ "emphasis> field is used to store accounting information used by other "
+#~ "applications."
+#~ msgstr ""
+#~ "Ces champs ne doivent contenir aucun « : ». À l'exception du champ "
+#~ "<emphasis remap=\"I\">autre</emphasis>, ils ne doivent contenir aucune "
+#~ "virgule ou signe égal. Il est également recommandé d'éviter les "
+#~ "caractères non US-ASCII, mais cela n'est imposé que pour les numéros de "
+#~ "téléphone. Le champ <emphasis remap=\"I\">autre</emphasis> est utilisé "
+#~ "pour garder des informations de compte utilisées par d'autres "
+#~ "applications."
+
+#~ msgid "The options which apply to the <command>chfn</command> command are:"
+#~ msgstr ""
+#~ "Les options applicables à la commande <command>chfn</command> sont :"
+
+#~| msgid ""
+#~| "<option>-f</option>, <option>--full-name</option><replaceable>FULL_NAME</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-f</option>, <option>--full-name</option>&nbsp;"
+#~ "<replaceable>FULL_NAME</replaceable>"
+#~ msgstr ""
+#~ "<option>-f</option>, <option>--full-name</option>&nbsp;"
+#~ "<replaceable>NOM_COMPLET</replaceable>"
+
+#~ msgid "Change the user's full name."
+#~ msgstr "Modifier le nom complet de l'utilisateur."
+
+#~| msgid ""
+#~| "<option>-h</option>, <option>--home-phone</"
+#~| "option><replaceable>HOME_PHONE</replaceable>"
+#~ msgid ""
+#~ "<option>-h</option>, <option>--home-phone</option>&nbsp;"
+#~ "<replaceable>HOME_PHONE</replaceable>"
+#~ msgstr ""
+#~ "<option>-h</option>, <option>--home-phone</option>&nbsp;"
+#~ "<replaceable>TEL_PERSO</replaceable>"
+
+#~| msgid ""
+#~| "<option>-o</option>, <option>--other</option><replaceable>OTHER</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-o</option>, <option>--other</option>&nbsp;<replaceable>OTHER</"
+#~ "replaceable>"
+#~ msgstr ""
+#~ "<option>-o</option>, <option>--other</option>&nbsp;<replaceable>AUTRE</"
+#~ "replaceable>"
+
+#~ msgid ""
+#~ "Change the user's other GECOS information. This field is used to store "
+#~ "accounting information used by other applications, and can be changed "
+#~ "only by a superuser."
+#~ msgstr ""
+#~ "Modifier les informations GECO de l'utilisateur. Ce champ est utilisé "
+#~ "pour enregistrer les informations de l'utilisateur utilisées par d'autres "
+#~ "applications et peut être changé seulement par un superutilisateur."
+
+#~| msgid ""
+#~| "<option>-r</option>, <option>--room</option><replaceable>ROOM_NUMBER</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-r</option>, <option>--room</option>&nbsp;"
+#~ "<replaceable>ROOM_NUMBER</replaceable>"
+#~ msgstr ""
+#~ "<option>-r</option>, <option>--room</option>&nbsp;"
+#~ "<replaceable>NUMÉRO_DE_BUREAU</replaceable>"
+
+#~ msgid "Change the user's room number."
+#~ msgstr "Modifier le numéro de bureau de l'utilisateur."
+
+#~ msgid "<option>-u</option>, <option>--help</option>"
+#~ msgstr "<option>-u</option>, <option>--help</option>"
+
+#~| msgid ""
+#~| "<option>-w</option>, <option>--work-phone</"
+#~| "option><replaceable>WORK_PHONE</replaceable>"
+#~ msgid ""
+#~ "<option>-w</option>, <option>--work-phone</option>&nbsp;"
+#~ "<replaceable>WORK_PHONE</replaceable>"
+#~ msgstr ""
+#~ "<option>-w</option>, <option>--work-phone</option>&nbsp;"
+#~ "<replaceable>TEL_PRO</replaceable>"
+
+#~ msgid ""
+#~ "If none of the options are selected, <command>chfn</command> operates in "
+#~ "an interactive fashion, prompting the user with the current values for "
+#~ "all of the fields. Enter the new value to change the field, or leave the "
+#~ "line blank to use the current value. The current value is displayed "
+#~ "between a pair of <emphasis remap=\"B\">[ ]</emphasis> marks. Without "
+#~ "options, <command>chfn</command> prompts for the current user account."
+#~ msgstr ""
+#~ "Si aucune option n'est sélectionnée, <command>chfn</command> opère de "
+#~ "manière interactive, demandant à l'utilisateur d'entrer les valeurs "
+#~ "actuelles de chacun des champs. Entrer une nouvelle valeur pour la "
+#~ "modifier, ou de laisser une ligne blanche pour conserver la valeur "
+#~ "actuelle. La valeur actuelle est indiquée entre crochets (<emphasis remap="
+#~ "\"B\">[ ]</emphasis>). En l'absence d'option, <command>chfn</command> "
+#~ "opère sur l'utilisateur actuel."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+
+#~ 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 ""
+#~ "La commande <command>chage</command> modifie le nombre de jours entre les "
+#~ "changements de mot de passe et la date du dernier changement. Ces "
+#~ "informations sont utilisées par le système pour déterminer si un "
+#~ "utilisateur doit changer son mot de passe."
+
+#~ msgid "The options which apply to the <command>chage</command> command are:"
+#~ msgstr ""
+#~ "Les options disponibles pour la commande <command>chage</command> sont :"
+
+#~| msgid ""
+#~| "<option>-d</option>, <option>--lastday</option><replaceable>LAST_DAY</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-d</option>, <option>--lastday</option>&nbsp;"
+#~ "<replaceable>LAST_DAY</replaceable>"
+#~ msgstr ""
+#~ "<option>-d</option>, <option>--lastday</option>&nbsp;"
+#~ "<replaceable>DERNIER_JOUR</replaceable>"
+
+#~ msgid ""
+#~ "Set the number of days since January 1st, 1970 when the password was last "
+#~ "changed. The date may also be expressed in the format YYYY-MM-DD (or the "
+#~ "format more commonly used in your area)."
+#~ msgstr ""
+#~ "Configurer le nombre du jour, à compter du 1er janvier 1970, où le mot de "
+#~ "passe a été changé la dernière fois. La date peut aussi être exprimée "
+#~ "dans le format AAAA-MM-JJ (ou le format utilisé plus communément dans "
+#~ "votre région)."
+
+#~| msgid ""
+#~| "<option>-E</option>, <option>--expiredate</"
+#~| "option><replaceable>EXPIRE_DATE</replaceable>"
+#~ msgid ""
+#~ "<option>-E</option>, <option>--expiredate</option>&nbsp;"
+#~ "<replaceable>EXPIRE_DATE</replaceable>"
+#~ msgstr ""
+#~ "<option>-E</option>, <option>--expiredate</option>&nbsp;"
+#~ "<replaceable>DATE_FIN_VALIDITÉ</replaceable>"
+
+# NOTE: s/date//
+#~ msgid ""
+#~ "Set the date or number of days since January 1, 1970 on which the user's "
+#~ "account will no longer be accessible. The date may also be expressed in "
+#~ "the format YYYY-MM-DD (or the format more commonly used in your area). A "
+#~ "user whose account is locked must contact the system administrator before "
+#~ "being able to use the system again."
+#~ msgstr ""
+#~ "Configurer la date, ou le nombre de jours à compter du 1er janvier 1970, "
+#~ "à partir de laquelle le compte de l'utilisateur ne sera plus accessible. "
+#~ "La date peut aussi être exprimée dans le format AAAA-MM-JJ (ou le format "
+#~ "plus communément utilisé dans votre région). Un utilisateur dont le "
+#~ "compte est bloqué doit contacter l'administrateur système pour pouvoir "
+#~ "utiliser à nouveau le système."
+
+#~ msgid ""
+#~ "Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+#~ "<replaceable>EXPIRE_DATE</replaceable> will remove an account expiration "
+#~ "date."
+#~ msgstr ""
+#~ "Une valeur de <emphasis remap=\"I\">-1</emphasis> pour "
+#~ "<replaceable>DATE_FIN_VALIDITÉ</replaceable> aura pour effet de supprimer "
+#~ "la date de fin de validité."
+
+#~| msgid ""
+#~| "<option>-I</option>, <option>--inactive</option><replaceable>INACTIVE</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-I</option>, <option>--inactive</option>&nbsp;"
+#~ "<replaceable>INACTIVE</replaceable>"
+#~ msgstr ""
+#~ "<option>-I</option>, <option>--inactive</option>&nbsp;"
+#~ "<replaceable>DURÉE_INACTIVITÉ</replaceable>"
+
+#~ msgid ""
+#~ "Set the number of days of inactivity after a password has expired before "
+#~ "the account is locked. The <replaceable>INACTIVE</replaceable> option is "
+#~ "the number of days of inactivity. A user whose account is locked must "
+#~ "contact the system administrator before being able to use the system "
+#~ "again."
+#~ msgstr ""
+#~ "Configurer le nombre de jours d'inactivité, après qu'un mot de passe ait "
+#~ "dépassé la date de fin de validité, avant que le compte ne soit bloqué. "
+#~ "La valeur <replaceable>DURÉE_INACTIVITÉ</replaceable> est le nombre de "
+#~ "jours d'inactivité. Un utilisateur dont le compte est bloqué doit "
+#~ "contacter l'administrateur système avant de pouvoir utiliser de nouveau "
+#~ "le système."
+
+#~ msgid ""
+#~ "Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+#~ "<replaceable>INACTIVE</replaceable> will remove an account's inactivity."
+#~ msgstr ""
+#~ "Une valeur de <emphasis remap=\"I\">-1</emphasis> pour "
+#~ "<replaceable>DURÉE_INACTIVITÉ</replaceable> supprime la durée "
+#~ "d'inactivité pour un compte."
+
+#~| msgid ""
+#~| "<option>-m</option>, <option>--mindays</option><replaceable>MIN_DAYS</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-m</option>, <option>--mindays</option>&nbsp;"
+#~ "<replaceable>MIN_DAYS</replaceable>"
+#~ msgstr ""
+#~ "<option>-m</option>, <option>--mindays</option>&nbsp;"
+#~ "<replaceable>JOURS_MIN</replaceable>"
+
+#~| msgid ""
+#~| "<option>-M</option>, <option>--maxdays</option><replaceable>MAX_DAYS</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-M</option>, <option>--maxdays</option>&nbsp;"
+#~ "<replaceable>MAX_DAYS</replaceable>"
+#~ msgstr ""
+#~ "<option>-M</option>, <option>--maxdays</option>&nbsp;"
+#~ "<replaceable>JOURS_MAX</replaceable>"
+
+#~ 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 ""
+#~ "Configurer le nombre maximum de jours pendant lesquels un mot de passe "
+#~ "est valable. Quand <replaceable>JOURS_MAX</replaceable> plus "
+#~ "<replaceable>DERNIER_JOUR</replaceable> est inférieur à la date actuelle, "
+#~ "l'utilisateur est obligé de changer son mot de passe avant de pouvoir "
+#~ "utiliser son compte. Cet événement peut être déclenché plus tôt grâce à "
+#~ "l'option <option>-W</option> qui prévient l'utilisateur à l'avance par un "
+#~ "message d'alerte."
+
+#~ msgid ""
+#~ "Passing the number <emphasis remap=\"I\">-1</emphasis> as "
+#~ "<replaceable>MAX_DAYS</replaceable> will remove checking a password's "
+#~ "validity."
+#~ msgstr ""
+#~ "Une valeur de <emphasis remap=\"I\">-1</emphasis> pour "
+#~ "<replaceable>JOURS_MAX</replaceable> supprime la vérification de validité."
+
+#~| msgid ""
+#~| "<option>-W</option>, <option>--warndays</option><replaceable>WARN_DAYS</"
+#~| "replaceable>"
+#~ msgid ""
+#~ "<option>-W</option>, <option>--warndays</option>&nbsp;"
+#~ "<replaceable>WARN_DAYS</replaceable>"
+#~ msgstr ""
+#~ "<option>-W</option>, <option>--warndays</option>&nbsp;"
+#~ "<replaceable>DURÉE_AVERTISSEMENT</replaceable>"
+
+#~ 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 ""
+#~ "Configurer le nombre de jours d'avertissement avant que le changement de "
+#~ "mot de passe ne soit obligatoire. La valeur "
+#~ "<replaceable>DURÉE_AVERTISSEMENT</replaceable> est le nombre de jours "
+#~ "précédant la fin de validité pendant lesquels un utilisateur sera prévenu "
+#~ "que son mot de passe est sur le point d'arriver en fin de validité."
+
+#~ msgid ""
+#~ "If none of the options are selected, <command>chage</command> operates in "
+#~ "an interactive fashion, prompting the user with the current values for "
+#~ "all of the fields. Enter the new value to change the field, or leave the "
+#~ "line blank to use the current value. The current value is displayed "
+#~ "between a pair of <emphasis>[ ]</emphasis> marks."
+#~ msgstr ""
+#~ "Si aucune de ces options n'est donnée, <command>chage</command> utilise "
+#~ "un mode interactif, demandant confirmation à l'utilisateur pour les "
+#~ "valeurs de tous les champs. Entrez la nouvelle valeur pour modifier la "
+#~ "valeur du champ, ou laissez la ligne vide pour conserver la valeur "
+#~ "actuelle. La valeur actuelle est affichée entre crochets."
+
+#~ msgid ""
+#~ "The <command>chage</command> program requires a shadow password file to "
+#~ "be available."
+#~ msgstr ""
+#~ "Le programme <command>chage</command> nécessite l'utilisation d'un "
+#~ "fichier de mots de passe cachés (« shadow password file »)."
+
+#~ 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 ""
+#~ "La commande <command>chage</command> est réservée à l'utilisateur root, "
+#~ "sauf pour l'option <option>-l</option>, qui peut être utilisée par un "
+#~ "utilisateur non privilégié pour lui permettre de savoir quand son mot de "
+#~ "passe ou son compte arrivera en fin de validité."
+
+#~ msgid "15"
+#~ msgstr "15"
+
+#~ msgid ""
+#~ "The <command>chage</command> command exits with the following values: "
+#~ "<placeholder-1/>"
+#~ msgstr ""
+#~ "La commande <command>chage</command> retourne les valeurs suivantes en "
+#~ "quittant : <placeholder-1/>"
+
+#~ msgid "translator-credits"
+#~ msgstr ""
+#~ "Nicolas FRANÇOIS <nicolas.francois@centraliens.net>, 2005-2010Thomas "
+#~ "Blein <tblein@tblein.eu>, 2011-2012Debian French l10n team <debian-l10n-"
+#~ "french@lists.debian.org>, 2011-2012"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid "Kłoczko"
+#~ msgstr "Kłoczko"
+
+#~ msgid "François"
+#~ msgstr "François"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "13"
+#~ msgstr "13"
+
+#~ msgid ""
+#~ "The SELinux user for the user's login. The default is to leave this field "
+#~ "the blank, which causes the system to select the default SELinux user."
+#~ msgstr ""
+#~ "Identifiant SELinux du nouvel utilisateur. Cette valeur est vide par "
+#~ "défaut et, dans ce cas, le système sélectionnera l'utilisateur SELinux "
+#~ "par défaut."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "-q"
+#~ msgstr "-q"
+
+#~ msgid "-s"
+#~ msgstr "-s"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, <phrase condition="
+#~ "\"no_pam\"><citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+#~ "phrase><citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, <phrase condition="
+#~ "\"no_pam\"><citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+#~ "phrase><citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "new_users"
+#~ msgstr "nouveaux_utilisateurs"
+
+#~ msgid "full_name"
+#~ msgstr "nom_complet"
+
+#~ msgid "-f <placeholder-1/>"
+#~ msgstr "-f <placeholder-1/>"
+
+#~ msgid "room_no"
+#~ msgstr "no_bureau"
+
+#~ msgid "work_ph"
+#~ msgstr "tel_bureau"
+
+#~ msgid "-w <placeholder-1/>"
+#~ msgstr "-w <placeholder-1/>"
+
+#~ msgid "home_ph"
+#~ msgstr "tel_perso"
+
+#~ msgid "-o <placeholder-1/>"
+#~ msgstr "-o <placeholder-1/>"
+
+#~ msgid ""
+#~ "Note: <option>-K </option><replaceable>UID_MIN</"
+#~ "replaceable>=<replaceable>10</replaceable>,<replaceable>UID_MAX</"
+#~ "replaceable>=<replaceable>499</replaceable> doesn't work yet."
+#~ msgstr ""
+#~ "Note : <option>-K</option> <replaceable>UID_MIN</"
+#~ "replaceable>=<replaceable>10</replaceable>,<replaceable>UID_MAX</"
+#~ "replaceable>=<replaceable>499</replaceable> ne fonctionne pas pour "
+#~ "l'instant."
+
+#~ msgid "It can take one of these values: <placeholder-1/>"
+#~ msgstr "Il peut prendre une de ces valeurs : <placeholder-1/>"
+
+#~ msgid "The supplied passwords must be in clear-text."
+#~ msgstr "Les mots de passe doivent être fournis en clair."
+
+#~ msgid ""
+#~ "The encrypted password, as returned by "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>. The default is to disable the account."
+#~ msgstr ""
+#~ "Le mot de passe chiffré, comme renvoyé par "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>. Le comportement par défaut est de désactiver "
+#~ "le compte."
+
+# NOTE: shadowed, not encrypted
+#~ msgid "encrypted password file"
+#~ msgstr "fichier des mots de passe cachés"
+
+#~ msgid "comma-separated list of group administrators"
+#~ msgstr "liste d'administrateurs du groupe séparés par des virgules"
+
+#~ msgid ""
+#~ "The group name and password fields must be filled. The encrypted password "
+#~ "consists of characters from the 64-character alphabet a thru z, A thru Z, "
+#~ "0 thru 9, \\. and /. Refer to <citerefentry><refentrytitle>crypt</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry> for details on how "
+#~ "this string is interpreted. If the password field contains some string "
+#~ "that is not 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, subject to "
+#~ "<citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></"
+#~ "citerefentry>."
+#~ msgstr ""
+#~ "Les champs « nom du groupe » et « mot de passe » doivent être remplis. Le "
+#~ "mot de passe chiffré comprend 13 caractères pris dans l'alphabet de 64 "
+#~ "caractères a-z, A-Z, 0-9, \\. et /. Consultez "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry> pour plus d'informations sur le traitement de "
+#~ "cette chaîne. Si le champ du mot de passe contient une chaîne qui ne peut "
+#~ "pas être un résultat valable de <citerefentry><refentrytitle>crypt</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, par exemple si "
+#~ "elle contient les caractères ! ou *, alors l'utilisateur ne pourra pas "
+#~ "utiliser son mot de passe UNIX pour se connecter. Ceci peut dépendre de "
+#~ "<citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></"
+#~ "citerefentry>."
+
+#, fuzzy
+#~ msgid ""
+#~ "The group ID of the given <replaceable>GROUP</replaceable> will be "
+#~ "changed to <replaceable>GID</replaceable>. The value of <replaceable>GID</"
+#~ "replaceable> must be a non-negative decimal integer. This value must be "
+#~ "unique, unless the <option>-o</option> option is used. Values between 0 "
+#~ "and 999 are typically reserved for system groups. Any files that have the "
+#~ "old group ID and must continue to belong to <replaceable>GROUP</"
+#~ "replaceable>, must have their group ID changed manually."
+#~ msgstr ""
+#~ "Indiquer la nouvelle Valeur numérique de l'identifiant du "
+#~ "<replaceable>GROUPE</replaceable> (« group ID » ou GID). La valeur de "
+#~ "<replaceable>GID</replaceable> doit être un entier décimal non négatif. "
+#~ "Cette valeur doit être unique, à moins que l'option <option>-o</option> "
+#~ "ne soit utilisée. Les valeurs comprises entre 0 et 999 sont généralement "
+#~ "réservées aux comptes système. Vous devrez modifier vous-même le groupe "
+#~ "propriétaire de tous les fichiers possédés par ce groupe."
+
+#~ msgid ""
+#~ "Note: if you use PAM, it is recommended to set this variable consistently "
+#~ "with the PAM modules configuration."
+#~ msgstr ""
+#~ "Remarque : si vous utilisez PAM, il est recommandé d'ajuster cette "
+#~ "variable de façon cohérente avec la configuration des modules PAM."
+
+#~| msgid ""
+#~| "<command>usermod</command> will not allow you to change the name of a "
+#~| "user who is logged in. You must make certain that the named user is not "
+#~| "executing any processes when this command is being executed if the "
+#~| "user's numerical user ID is being changed. You must change the owner of "
+#~| "any <command>crontab</command> files manually. You must change the owner "
+#~| "of any <command>at</command> jobs manually. You must make any changes "
+#~| "involving NIS on the NIS server."
+#~ msgid ""
+#~ "<command>usermod</command> will not allow you to change the name of an "
+#~ "user who is logged in. You must make certain that the named user is not "
+#~ "executing any processes when this command is being executed if the user's "
+#~ "numerical user ID is being changed. You must change the owner of any "
+#~ "<command>crontab</command> files manually. You must change the owner of "
+#~ "any <command>at</command> jobs manually. You must make any changes "
+#~ "involving NIS on the NIS server."
+#~ msgstr ""
+#~ "<command>Usermod</command> ne vous permet pas de modifier le nom d'un "
+#~ "utilisateur qui est actuellement connecté. Vous devez vous assurer que "
+#~ "l'utilisateur nommé n'est pas en train d'exécuter un quelconque programme "
+#~ "lorsque cette commande est exécutée si l'UID numérique de l'utilisateur "
+#~ "est modifié. Vous devez modifier vous-même le nom du propriétaire de tous "
+#~ "les fichiers <command>crontab</command> et des tâches <command>at</"
+#~ "command>. Vous devez effectuer toutes les modifications impliquant NIS "
+#~ "sur le serveur NIS."
+
+#~ msgid ""
+#~ "<command>userdel</command> will not allow you to remove an account if the "
+#~ "user is currently logged in. You must kill any running processes which "
+#~ "belong to an account that you are deleting."
+#~ msgstr ""
+#~ "<command>Userdel</command> ne vous permet pas de supprimer un compte si "
+#~ "l'utilisateur en question est actuellement connecté. Vous devez tuer tous "
+#~ "les processus en cours d'exécution appartenant à l'utilisateur que vous "
+#~ "êtes en train de supprimer."
+
+#~ msgid ""
+#~ "The group name or number of the user's new initial login group. The group "
+#~ "name must exist. A group number must refer to an already existing group. "
+#~ "The default group number is 1."
+#~ msgstr ""
+#~ "Nom du groupe ou identifiant numérique du groupe de connexion initial de "
+#~ "l'utilisateur. Le nom du groupe doit exister. Un numéro de groupe doit se "
+#~ "référer à un groupe déjà existant. Le numéro de groupe par défaut est de "
+#~ "1."
+
+#~ msgid ""
+#~ "The group name or number of the user's initial login group. The group "
+#~ "name must exist. A group number must refer to an already existing group. "
+#~ "The default group number is 1 or whatever is specified in <filename>/etc/"
+#~ "default/useradd</filename>."
+#~ msgstr ""
+#~ "Nom ou ou numéro du groupe de connexion initial de l'utilisateur. Le nom "
+#~ "du groupe doit exister. Un numéro de groupe doit se référer à un groupe "
+#~ "existant. Le numéro de groupe par défaut est de 1, ou la valeur indiquée "
+#~ "dans <filename>/etc/default/useradd</filename>."
+
+#~ msgid ""
+#~ "The group name or ID for a new user's initial group. The named group must "
+#~ "exist, and a numerical group ID must have an existing entry."
+#~ msgstr ""
+#~ "Nom de groupe ou identifiant numérique du groupe initial d'un nouvel "
+#~ "utilisateur. Le groupe spécifié doit exister, et un identifiant de groupe "
+#~ "numérique doit déjà exister."
+
+#~ msgid "days since Jan 1, 1970 that password was last changed"
+#~ msgstr ""
+#~ "nombre de jours, comptés à partir du 1er janvier 1970, depuis le dernier "
+#~ "changement de mot de passe"
+
+#~ msgid "days before password is to expire that user is warned"
+#~ msgstr ""
+#~ "nombre de jours avant la fin de validité du mot de passe et pendant "
+#~ "lesquels l'utilisateur est averti"
+
+#~ msgid "days after password expires that account is disabled"
+#~ msgstr ""
+#~ "nombre de jours après la fin de validité provoquant la désactivation du "
+#~ "compte"
+
+#~ msgid "days since Jan 1, 1970 that account is disabled"
+#~ msgstr ""
+#~ "nombre de jours, comptés à partir du 1er janvier 1970, depuis que le "
+#~ "compte est désactivé"
+
+#, fuzzy
+#~ msgid ""
+#~ "The password field must be filled. The encrypted password consists of 13 "
+#~ "to 24 characters from the 64 character alphabet a thru z, A thru Z, 0 "
+#~ "thru 9, \\. and /. Optionally it can start with a \"$\" character. This "
+#~ "means the encrypted password was generated using another (not DES) "
+#~ "algorithm. For example if it starts with \"$1$\" it means the MD5-based "
+#~ "algorithm was used."
+#~ msgstr ""
+#~ "Le champ « mot de passe » doit être rempli. Le mot de passe chiffré "
+#~ "comprend 13 à 24 caractères pris dans l'alphabet de 64 caractère : a-z, A-"
+#~ "Z, 0-9, \\. et /. Il peut optionellement commencer par un caractère "
+#~ "« $ ». Ceci signifie que le mot de passe a été généré par un autre "
+#~ "algorithme (autre que DES). Par exemple, s'il commence par « $1$ », "
+#~ "l'algorithme basé sur MD5 a été utilisé."
+
+#~ msgid ""
+#~ "The date of the last password change is given as the number of days since "
+#~ "Jan 1, 1970. The password may not be changed again until the proper "
+#~ "number of days have passed, and must be changed after the maximum number "
+#~ "of days. If the minimum number of days required is greater than the "
+#~ "maximum number of day allowed, this password may not be changed by the "
+#~ "user."
+#~ msgstr ""
+#~ "La date de dernière modification du mot de passe est donnée par le nombre "
+#~ "de jours écoulés depuis le 1er janvier 1970 jusqu'au dernier changement "
+#~ "du mot de passe. Un mot de passe ne peut pas être changé de nouveau avant "
+#~ "le nombre de jours indiqués, et doit être modifié avant le nombre maximal "
+#~ "de jours spécifié. Si le nombre minimal de jours requis est plus grand "
+#~ "que le nombre maximal de jours de validité, ce mot de passe ne peut pas "
+#~ "être changé par l'utilisateur."
+
+#~ msgid ""
+#~ "An account is considered to be inactive and is disabled if the password "
+#~ "is not changed within the specified number of days after the password "
+#~ "expires. An account will also be disabled on the specified day regardless "
+#~ "of other password expiration information."
+#~ msgstr ""
+#~ "Un compte est considéré comme inactif et est désactivé si le mot de passe "
+#~ "n'est pas changé dans l'intervalle indiqué après la fin de la validité du "
+#~ "mot de passe. Un compte est également désactivé le jour indiqué quels que "
+#~ "soient les autres informations de validité."
+
+#~ msgid ""
+#~ "This information supersedes any password or password age information "
+#~ "present in <filename>/etc/passwd</filename>."
+#~ msgstr ""
+#~ "Ces informations sont prioritaires sur tous les autres champs présents "
+#~ "dans <filename>/etc/passwd</filename>."
+
+#, fuzzy
+#~ msgid ""
+#~ "This field will be checked for existence as a directory, and a new "
+#~ "directory with this name will be created if it does not already exist. "
+#~ "The ownership of the directory will be set to be that of the user being "
+#~ "created or updated."
+#~ msgstr ""
+#~ "L'existence du répertoire indiqué dans ce champ est vérifiée, et dans le "
+#~ "cas contraire, le répertoire est créé. Le propriétaire du répertoire sera "
+#~ "l'utilisateur dont le compte est créé ou mis à jour."
+
+#~ msgid ""
+#~ "Set maximum number of login failures after the account is disabled to "
+#~ "<replaceable>MAX</replaceable>. Selecting <replaceable>MAX</replaceable> "
+#~ "value of 0 has the effect of not placing a limit on the number of failed "
+#~ "logins. The maximum failure count should always be 0 for <emphasis>root</"
+#~ "emphasis> to prevent a denial of services attack against the system."
+#~ msgstr ""
+#~ "Fixer le nombre maximum d'échecs de connexion après lesquels le compte "
+#~ "sera désactivé à <emphasis remap=\"I\">MAX</emphasis>. Une limite "
+#~ "<replaceable>MAX</replaceable> de 0 aura pour effet de ne pas placer de "
+#~ "limite d'échec. La limite pour l'utilisateur <emphasis>root</emphasis> "
+#~ "devrait toujours être 0 pour éviter tout risque de déni de service contre "
+#~ "le système."
+
+#~ msgid ""
+#~ "The user's home directory will be created if it does not exist. The files "
+#~ "contained in <replaceable>SKEL_DIR</replaceable> will be copied to the "
+#~ "home directory if the <option>-k</option> option is used, otherwise the "
+#~ "files contained in <filename>/etc/skel</filename> will be used instead. "
+#~ "Any directories contained in <replaceable>SKEL_DIR</replaceable> or "
+#~ "<filename>/etc/skel</filename> will be created in the user's home "
+#~ "directory as well. The <option>-k</option> option is only valid in "
+#~ "conjunction with the <option>-m</option> option. The default is to not "
+#~ "create the directory and to not copy any files."
+#~ msgstr ""
+#~ "Le répertoire personnel de l'utilisateur sera créé s'il n'existe pas "
+#~ "déjà. Les fichiers contenus dans <replaceable>rép_squelette</replaceable> "
+#~ "seront copiés dans le répertoire personnel si l'option <option>-k</"
+#~ "option> est employée ; sinon, les fichiers contenus dans <filename>/etc/"
+#~ "skel</filename> seront utilisés à la place. Tous les répertoires contenus "
+#~ "dans <replaceable>rép_squelette</replaceable> ou dans <filename>/etc/"
+#~ "skel</filename> seront également créés dans le répertoire personnel de "
+#~ "l'utilisateur. L'option <option>-k</option> n'est valable qu'en "
+#~ "conjonction avec l'option <option>-m</option>. Le comportement par défaut "
+#~ "est de ne pas créer le répertoire, et de ne copier aucun fichier."
+
+#~ msgid ""
+#~ "Your password must be easily remembered so that you will not be forced to "
+#~ "write it on a piece of paper. This can be accomplished by appending two "
+#~ "small words together and separating each with a special character or "
+#~ "digit. For example, Pass%word."
+#~ msgstr ""
+#~ "Vous devez pouvoir vous souvenir facilement de votre mot de passe, afin "
+#~ "de ne pas avoir à le noter sur un morceau de papier. Pour ce faire, on "
+#~ "peut choisir d'accoler deux mots en les séparant avec un caractère "
+#~ "spécial ou un chiffre. Par exemple, Mot2passe."
+
+#~ msgid ""
+#~ "Other methods of construction involve selecting an easily remembered "
+#~ "phrase from literature and selecting the first or last letter from each "
+#~ "word. An example of this is:"
+#~ msgstr ""
+#~ "D'autres méthodes de construction utilisent une phrase facile à se "
+#~ "rappeler, et consistent à sélectionner la première ou la dernière lettre "
+#~ "de chaque mot. Voici un exemple [ NdT : en anglais ] :"
+
+#~ msgid "Ask not for whom the bell tolls"
+#~ msgstr "Ask not for whom the bell tolls."
+
+#~ msgid "which produces"
+#~ msgstr "Ce qui donne :"
+
+#~ msgid "An4wtbt"
+#~ msgstr "An4wtbt."
+
+#~ msgid ""
+#~ "You may be reasonably sure few crackers will have included this in their "
+#~ "dictionaries. You should, however, select your own methods for "
+#~ "constructing passwords and not rely exclusively on the methods given here."
+#~ msgstr ""
+#~ "Vous pouvez raisonnablement être assuré que quelques crackers ont "
+#~ "désormais inclus ces mots de passe dans leurs dictionnaires. Vous pouvez "
+#~ "également utiliser votre propre méthode de construction de mots de passe "
+#~ "et ne pas compter exclusivement sur les méthodes proposées ici."
+
+#~ msgid ""
+#~ "The only restriction placed on the contents of the fields is that no "
+#~ "control characters may be present, nor any of comma, colon, or equal "
+#~ "sign. The <emphasis remap=\"I\">other</emphasis> field does not have this "
+#~ "restriction, and is used to store accounting information used by other "
+#~ "applications."
+#~ msgstr ""
+#~ "La seule restriction pour le contenu des champs est qu'ils ne doivent "
+#~ "contenir aucun caractère de contrôle, ni aucune virgule, deux-points ou "
+#~ "signe égal. Le champ <emphasis remap=\"I\">autre</emphasis> n'a pas cette "
+#~ "limitation et peut être utilisé pour enregistrer des informations sur le "
+#~ "compte pour d'autres applications."
+
+#~ msgid ""
+#~ "Range of user IDs to choose from for the <command>useradd</command> "
+#~ "program."
+#~ msgstr ""
+#~ "Plage d'identifiants numériques d'utilisateur que <command>useradd</"
+#~ "command> peut utiliser."
+
+#~ msgid ""
+#~ "The <option>-t</option> flag overrides the use of <option>-u</option>."
+#~ msgstr ""
+#~ "L'utilisation de l'option <option>-t</option> supplante l'option <option>-"
+#~ "u</option>."
+
+# NOTE: shadow => gshadow
+#~ msgid ""
+#~ "By default, <command>grpck</command> operates on the files <filename>/etc/"
+#~ "group</filename> and <filename>/etc/gshadow</filename>. The user may "
+#~ "select alternate files with the <emphasis remap=\"I\">group</emphasis> "
+#~ "and <emphasis remap=\"I\">shadow</emphasis> parameters. Additionally, the "
+#~ "user may execute the command in read-only mode by specifying the <option>-"
+#~ "r</option> flag. This causes all questions regarding changes to be "
+#~ "answered <emphasis>no</emphasis> without user intervention. "
+#~ "<command>grpck</command> can also sort entries in <filename>/etc/group</"
+#~ "filename> and <filename>/etc/gshadow</filename> by GID. To run it in sort "
+#~ "mode pass it <option>-s</option> flag. No checks are performed then, it "
+#~ "just sorts."
+#~ msgstr ""
+#~ "Par défaut, <command>grpck</command> opère sur les fichiers <filename>/"
+#~ "etc/group</filename> et <filename>/etc/gshadow</filename>. L'utilisateur "
+#~ "peut spécifier d'autres fichiers avec les paramètres <emphasis remap=\"I"
+#~ "\">group</emphasis> et <emphasis remap=\"I\">gshadow</emphasis>. De plus, "
+#~ "l'utilisateur peut exécuter les commandes en lecture seule en utilisant "
+#~ "l'option <option>-r</option>. Ceci aura pour conséquence de répondre "
+#~ "<emphasis>no</emphasis> à toutes les questions demandant des "
+#~ "modifications, sans intervention de l'utilisateur. <command>Grpck</"
+#~ "command> permet aussi de trier les entrées de <filename>/etc/group</"
+#~ "filename> et <filename>/etc/gshadow</filename> par GID. Pour effectuer ce "
+#~ "tri, utilisez l'option <option>-s</option>. Aucune vérification n'est "
+#~ "alors effectuée, les entrées sont seulement triées."
+
+#~ msgid ""
+#~ "The name of the new user's login shell. The named program will be used "
+#~ "for all future new user accounts."
+#~ msgstr ""
+#~ "Nom de l'interpréteur de commandes initial (« login shell ») d'un nouvel "
+#~ "utilisateur. Le programme nommé sera utilisé pour tous les futurs "
+#~ "nouveaux comptes utilisateur."
+
+#~ msgid ""
+#~ "Group administrator can add and delete users using <option>-a</option> "
+#~ "and <option>-d</option> options respectively. Administrators can use "
+#~ "<option>-r</option> option to remove group password. When no password is "
+#~ "set only group members can use <command>newgrp</command> to join the "
+#~ "group. Option <option>-R</option> disables access via a password to the "
+#~ "group through <command>newgrp</command> command (however members will "
+#~ "still be able to switch to this group)."
+#~ msgstr ""
+#~ "Un administrateur de groupe peut ajouter ou supprimer des utilisateurs en "
+#~ "utilisant respectivement les options <option>-a</option> et <option>-d</"
+#~ "option>. Les administrateurs peuvent utiliser l'option <option>-r</"
+#~ "option> pour supprimer le mot de passe d'un groupe. Lorsqu'aucun mot de "
+#~ "passe n'est défini, seuls les membres d'un groupe peuvent utiliser "
+#~ "<command>newgrp</command> pour utiliser ce groupe. L'option <option>-R</"
+#~ "option> désactive l'accès au groupe via la commande <command>newgrp</"
+#~ "command> (sauf pour les membres du groupe)."
+
+#, fuzzy
+#~ msgid ""
+#~ "This field must contain name of group. When specified an existing group "
+#~ "name the named user will be added as a new member of this group. If "
+#~ "specified non-existent non-numerical group name a new group will be "
+#~ "created."
+#~ msgstr ""
+#~ "Ce champ peut être le nom d'un groupe existant, ce qui permet d'ajouter "
+#~ "l'utilisateur désigné dans la liste des membres du groupe. Si un "
+#~ "identifiant de groupe inexistant est indiqué, un nouveau groupe est créé, "
+#~ "avec cet identifiant de groupe."
diff --git a/po/gl.gmo b/po/gl.gmo
new file mode 100644
index 0000000..dffc57c
--- /dev/null
+++ b/po/gl.gmo
Binary files differ
diff --git a/po/gl.po b/po/gl.po
new file mode 100644
index 0000000..a1b4277
--- /dev/null
+++ b/po/gl.po
@@ -0,0 +1,3626 @@
+# Galician translation of shadow
+# Copyright (C) 1999, 2004, 2005 Free Software Foundation, Inc.
+# Jacobo Tarrio <jtarrio@debian.org>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.18\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2006-07-18 23:27+0200\n"
+"Last-Translator: Jacobo Tarrio <jtarrio@debian.org>\n"
+"Language-Team: Galician <trasno@ceu.fi.udc.es>\n"
+"Language: gl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n!=1;\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Non se puido reservar espacio para a información de configuración.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"erro de configuración - elemento \"%s\" descoñecido (avise ao "
+"administrador)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr ""
+
+msgid "Password: "
+msgstr "Contrasinal: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Contrasinal de %s: "
+
+#, fuzzy
+#| msgid "Cannot open the password file.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "Non se pode abrir o ficheiro de contrasinais.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr ""
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not set sename for %s\n"
+msgstr "Non se puido reservar espacio para a información de configuración.\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "A cambiar a información de caducidade de %s\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "%s: Non se pode determinar o seu nome de usuario.\n"
+
+#, fuzzy, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "%s: liña %d: non se pode atopar o usuario %s\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: memoria esgotada\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: non se pode actualizar o ficheiro %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: directorio inicial \"%s\" non válido\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: non se pode cambiar o nome do directorio %s a %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: non se pode crear o directorio %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: aviso: non se pode eliminar "
+
+#, fuzzy, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: aviso: non se pode eliminar "
+
+#, fuzzy, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: rename: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: non se pode cambiar o nome do directorio %s a %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: non se pode cambiar o nome do directorio %s a %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: aviso: non se pode eliminar "
+
+#, fuzzy, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: non se pode crear o directorio %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: aviso: non se pode eliminar "
+
+#, fuzzy, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: non se pode actualizar o ficheiro %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: non se pode actualizar o ficheiro shadow\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: rename: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: non se pode abrir o ficheiro %s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Aviso: grupo %s descoñecido\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Aviso: hai grupos de máis\n"
+
+msgid "Your password has expired."
+msgstr "O seu contrasinal caducou."
+
+msgid "Your password is inactive."
+msgstr "O seu contrasinal está inactivo."
+
+msgid "Your login has expired."
+msgstr "O seu identificador de usuario caducou."
+
+msgid " Contact the system administrator."
+msgstr " Póñase en contacto co administrador do sistema."
+
+msgid " Choose a new password."
+msgstr " Escolla un novo contrasinal."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "O seu contrasinal ha caducar en %ld días.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "O seu contrasinal ha caducar mañá."
+
+msgid "Your password will expire today."
+msgstr "O seu contrasinal ha caducar hoxe."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Non se puido cambiar o tty %s"
+
+#, fuzzy, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: campos longos de máis\n"
+
+#, fuzzy, c-format
+msgid "%s: "
+msgstr "%s: %s\n"
+
+msgid ": "
+msgstr ""
+
+msgid "Environment overflow\n"
+msgstr "Desbordamento nas variables de ambiente\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Non pode cambiar $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d fallo desde a última entrada.\n"
+"O último foi o %s en %s.\n"
+msgstr[1] ""
+"%d fallos desde a última entrada.\n"
+"O último foi o %s en %s.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "non se puido cambiar o propietario da caixa do correo"
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr "%s: non se pode obter un UID único\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: non se pode obter un GID único\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: non se pode obter un GID único\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: non se pode crear %s\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: non se pode crear %s\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr "%s: non se pode obter un UID único\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: non se pode obter un UID único\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: non se pode obter un UID único\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: a autenticación con PAM fallou\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: campo \"%s\" non válido\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Could not seteuid to %d\n"
+msgstr "Non se puido reservar espacio para a información de configuración.\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not set caps\n"
+msgstr "Non se puido reservar espacio para a información de configuración.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't open file\n"
+msgid "%s: snprintf failed!\n"
+msgstr "%s: non se pode abrir o ficheiro\n"
+
+#, fuzzy, c-format
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: liña %d: a chamada a chown fallou\n"
+
+#, fuzzy, c-format
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: liña %d: a chamada a chown fallou\n"
+
+msgid "Too many logins.\n"
+msgstr "Entrou demasiadas veces.\n"
+
+msgid "You have new mail."
+msgstr "Ten novo correo."
+
+msgid "No mail."
+msgstr "Non hai correo."
+
+msgid "You have mail."
+msgstr "Ten correo."
+
+msgid "no change"
+msgstr "ningún cambio"
+
+msgid "a palindrome"
+msgstr "un palíndromo"
+
+msgid "case changes only"
+msgstr "só cambia maiúsculas/minúsculas"
+
+msgid "too similar"
+msgstr "semellantes de máis"
+
+msgid "too simple"
+msgstr "simple de máis"
+
+msgid "rotated"
+msgstr "rotado"
+
+msgid "too short"
+msgstr "curto de máis"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Contrasinal non válido: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: a chamada a pam_start() fallou, erro %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+msgid "passwd: password unchanged\n"
+msgstr "Cambiouse o contrasinal."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: o contrasinal actualizouse con éxito\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: non se soporta o repositorio %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start(): erro %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd: a chamada a pam_start() fallou, erro %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Contrasinal incorrecto para %s.\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr ""
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: non se puido deixar os privilexios (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: teléfono da casa non válido: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: non se pode crear o directorio %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: non se pode crear o directorio %s\n"
+
+#, fuzzy, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: non se pode crear o directorio %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Non se puido cambiar a \"%s\"\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Non hai un directorio, éntrase con HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Non se pode executar %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Directorio raíz \"%s\" non válido\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Non se pode cambiar o directorio raíz a \"%s\"\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: o usuario %s está conectado\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: o usuario %s está conectado\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Non se pode determinar o nome do seu tty."
+
+#, fuzzy
+msgid "No"
+msgstr "Non\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Emprego: %s [entrada]\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr ""
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Introduza o novo valor ou prema Intro para o valor por defecto"
+
+msgid "Minimum Password Age"
+msgstr "Idade mínima do contrasinal"
+
+msgid "Maximum Password Age"
+msgstr "Idade máxima do contrasinal"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Último cambio de contrasinal (AAAA-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Aviso de caducidade de contrasinal"
+
+msgid "Password Inactive"
+msgstr "Contrasinal inactivo"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Data de caducidade da conta (AAAA-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Último cambio de contrasinal\t\t\t\t: "
+
+msgid "never"
+msgstr "nunca"
+
+msgid "password must be changed"
+msgstr "debe cambiarse o contrasinal"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "O contrasinal caduca\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Contrasinal inactivo\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "A conta caduca\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Número mínimo de días entre cambios de contrasinal\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Número máximo de días entre cambios de contrasinal\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Número de días de aviso antes de que caduque o contrasinal: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: data \"%s\" non válida\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: argumento numérico \"%s\" non válido\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: non inclúa \"l\" con outros indicadores\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Permiso denegado.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Non se pode determinar o seu nome de usuario.\n"
+
+#, fuzzy, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: non se pode bloquear ficheiros, volva tentalo despois\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: non se pode abrir o ficheiro %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: fallo ao lanzar o proceso: %s"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: non se puido deixar os privilexios (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: o ficheiro de contrasinais shadow non está presente\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: o usuario %s non existe\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "A cambiar a información de caducidade de %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: erro ao cambiar os campos\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr "Emprego: %s [entrada]\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr "Nome completo"
+
+#, fuzzy, c-format
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Número de cuarto"
+
+msgid "Work Phone"
+msgstr "Teléfono do traballo"
+
+msgid "Home Phone"
+msgstr "Teléfono da casa"
+
+msgid "Other"
+msgstr "Outro"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Non se pode cambiar o ID a root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: nome non válido: \"%s\"\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: número de cuarto non válido: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: teléfono do traballo non válido: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: teléfono da casa non válido: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: \"%s\" contén caracteres non válidos\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: \"%s\" contén caracteres non válidos\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: o usuario %s non existe\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: non se pode cambiar o usuario \"%s\" no cliente NIS.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: \"%s\" é o mestre NIS deste cliente.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "A cambiar a información de usuario de %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: campos longos de máis\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Emprego: %s [entrada]\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr ""
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: o modificador -a SÓ se admite co modificador -G\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: liña %d: liña longa de máis\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: liña %d: falla o novo contrasinal\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: non se puido deixar os privilexios (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: o grupo %s non existe\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: liña %d: non se pode actualizar a entrada\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: detectouse un erro, ignóranse os cambios\n"
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: o usuario %s non existe\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: o usuario %s non existe\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr "Intérprete de ordes"
+
+#, fuzzy, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Non pode cambiar o intérprete de ordes de %s.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "A cambiar o intérprete de ordes de %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Entrada non válida: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s non é un intérprete de ordes válido.\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: o usuario %s non existe\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: aviso: %s non pertence a %s\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "lastlog: non se esperaba un argumento: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: non se pode crear o directorio %s\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "Usuario Fallos Máximo Último O\n"
+
+#, fuzzy, c-format
+msgid " [%lus left]"
+msgstr " [fallan %lds]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [bloqueado %lds]"
+
+#, fuzzy, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s: non se pode crear o directorio %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: non se puido deixar os privilexios (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: non se pode crear o directorio %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "Usuario descoñecido: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: non se pode cambiar o nome do directorio %s a %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: non se puido deixar os privilexios (%s)\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Emprego: %s [entrada]\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr ""
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr ""
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr ""
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+
+#, fuzzy
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "Non se pode cambiar o contrasinal de %s.\n"
+
+#, fuzzy
+msgid "The options cannot be combined.\n"
+msgstr "Non se pode cambiar o contrasinal de %s.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: precísase de contrasinais de grupo shadow para -A\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: o grupo %s non existe\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: fallo ao lanzar o proceso: %s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "A cambiar o contrasinal do grupo %s\n"
+
+msgid "New Password: "
+msgstr "Novo contrasinal: "
+
+msgid "Re-enter new password: "
+msgstr "Volva introducir o novo contrasinal: "
+
+msgid "They don't match; try again"
+msgstr "Non coinciden, volva tentalo"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Volva tentalo despois\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "A engadir o usuario %s ao grupo %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "A eliminar o usuario %s do grupo %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: o usuario %s non existe\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Non é un tty\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Emprego: %s [entrada]\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr ""
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid " -r, --system create a system account\n"
+msgstr ""
+
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s non é un nome de grupo válido\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "nome de grupo \"%s\" non válido\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K precisa de CLAVE=VALOR\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: o grupo %s existe\n"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "O membro xa existe\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: Non se pode determinar o seu nome de usuario.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: non se pode cambiar o nome do directorio %s a %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: non se pode cambiar o usuario \"%s\" no cliente NIS.\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: o grupo %s non existe\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: o grupo \"%s\" é un grupo NIS.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s é o mestre NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: o usuario %s é un usuario NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: esgotouse a memoria en update_group\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr "Emprego: %s [entrada]\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+
+msgid "\n"
+msgstr ""
+
+msgid "Actions:\n"
+msgstr ""
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr ""
+
+msgid " -l, --list list the members of the group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr ""
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "nome de grupo \"%s\" non válido\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: o grupo %s é un grupo NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: usuario %s descoñecido\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr "Emprego: %s [entrada]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr "Emprego: %s [entrada]\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s e -r son incompatibles\n"
+
+msgid "invalid group file entry"
+msgstr "entrada do ficheiro de grupos non válida"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "¿borrar a liña \"%s\"? "
+
+msgid "duplicate group entry"
+msgstr "entrada de grupo duplicada"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "nome de grupo \"%s\" non válido\n"
+
+#, fuzzy, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "nome de grupo \"%s\" non válido\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "grupo %s: non existe o usuario %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "¿borrar o membro \"%s\"? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "non hai unha entrada do ficheiro de grupos que coincida en %s\n"
+
+#, fuzzy, c-format
+msgid "add group '%s' in %s? "
+msgstr "¿engadir o grupo \"%s\" en %s? "
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "entrada do ficheiro de grupos shadow non válida"
+
+msgid "duplicate shadow group entry"
+msgstr "entrada de grupo shadow duplicada"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "grupo shadow %s: non existe o usuario administrativo %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "¿borrar o membro administrativo \"%s\"? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "grupo shadow %s: non existe o usuario %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: actualizáronse os ficheiros\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: non hai cambios\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: non se pode actualizar o ficheiro %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Emprego: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Emprego: id\n"
+
+msgid " groups="
+msgstr " grupos="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+
+msgid "Username Port From Latest"
+msgstr "Usuario Porto Desde Última"
+
+msgid "Username Port Latest"
+msgstr "Usuario Porto Última"
+
+msgid "**Never logged in**"
+msgstr "**Nunca entrou**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s: non se pode crear o directorio %s\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s: non se pode actualizar o ficheiro de contrasinais\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 "Emprego: %s [-p] [nome]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h servidor] [-f nome]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r servidor\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Hora de entrada non válida"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"O sistema está pechado por mantemento rutinario"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Omitida a desconexión -- permítese a entrada coma root.]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Non hai unha entrada en utmp. Debe executar \"login\" dende o \"sh\" de "
+"nivel máis baixo"
+
+#, fuzzy, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"A entrada caducou despois de %d segundos.\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: Fallo en PAM, a abortar: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s login: "
+
+msgid "login: "
+msgstr "login: "
+
+#, fuzzy, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Superouse o número máximo de intentos (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: cancelación solicitada por PAM\n"
+
+msgid "Login incorrect"
+msgstr "Entrada incorrecta"
+
+#, fuzzy, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "%s: liña %d: non se pode atopar o usuario %s\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s login: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: fallo ao lanzar o proceso: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Aviso: vólvese permitir a entrada despois do bloqueo temporal."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Última entrada: %s en %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Última entrada: %.19s en %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " desde %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"superouse o tempo de entrada\n"
+"\n"
+
+#, fuzzy
+msgid "Usage: logoutd\n"
+msgstr "Emprego: id\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: can't open group file\n"
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr "%s: non se pode abrir o ficheiro de grupos\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: non se puido deixar os privilexios (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: non se puido deixar os privilexios (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: campos longos de máis\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: directorio base \"%s\" non válido\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: non se pode crear o directorio %s\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Emprego: newgrp [-] [grupo]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Emprego: sg grupo [[-c] orde]\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: non se puido deixar os privilexios (%s)\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "Contrasinal antigo: "
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: fallo ao lanzar o proceso: %s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: o usuario %s non existe\n"
+
+msgid "too many groups\n"
+msgstr "hai grupos de máis\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid " -b, --badnames allow bad names\n"
+msgstr ""
+
+msgid " -r, --system create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: o grupo %s non existe\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: nome de usuario \"%s\" non válido\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: nome de usuario \"%s\" non válido\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: liña %d: liña non válida\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: non se pode actualizar a entrada do usuario %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: liña %d: non se pode crear o GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: liña %d: non se pode crear o GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: o usuario %s non existe\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: liña %d: non se pode actualizar o contrasinal\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: liña %d: a chamada a mkdir fallou\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: liña %d: a chamada a chown fallou\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: liña %d: non se pode actualizar a entrada\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: non se puido deixar os privilexios (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: non se pode crear %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: non se pode actualizar o ficheiro de grupos\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid " -q, --quiet quiet mode\n"
+msgstr ""
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid "Old password: "
+msgstr "Contrasinal antigo: "
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Introduza o novo contrasinal (mínimo de %d, máximo de %d caracteres)\n"
+"Empregue unha combinación de maiúsculas, minúsculas e números.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Introduza o novo contrasinal (mínimo de %d, máximo de %d caracteres)\n"
+"Empregue unha combinación de maiúsculas, minúsculas e números.\n"
+
+msgid "New password: "
+msgstr "Novo contrasinal: "
+
+msgid "Try again."
+msgstr "Volva tentalo."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Aviso: contrasinal feble (introdúzao outra vez para o empregar igualmente)."
+
+msgid "They don't match; try again.\n"
+msgstr "Non coinciden; volva tentalo.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Non se pode cambiar o contrasinal de %s.\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Non se pode cambiar o contrasinal de %s.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: non se soporta o repositorio %s\n"
+
+#, c-format
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Non pode ver ou modificar a información de contrasinal de %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "A cambiar o contrasinal de %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Non se cambiou o contrasinal de %s\n"
+
+#, fuzzy, c-format
+msgid "%s: password changed.\n"
+msgstr "Cambiouse o contrasinal."
+
+#, fuzzy, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "Aviso de caducidade de contrasinal"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr "Emprego: %s [entrada]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr "Emprego: %s [entrada]\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+
+msgid "invalid password file entry"
+msgstr "entrada do ficheiro de contrasinais non válida"
+
+msgid "duplicate password entry"
+msgstr "entrada de contrasinal duplicada"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "nome de usuario \"%s\" non válido\n"
+
+#, fuzzy, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "nome de usuario \"%s\" non válido\n"
+
+#, fuzzy, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "usuario %s: non existe o grupo %u\n"
+
+#, fuzzy, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "usuario %s: o directorio %s non existe\n"
+
+#, fuzzy, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "usuario %s: o programa %s non existe\n"
+
+#, fuzzy, c-format
+msgid "no tcb directory for %s\n"
+msgstr "%s: non se pode crear o directorio %s\n"
+
+#, fuzzy, c-format
+msgid "create tcb directory for %s?"
+msgstr "%s: non se pode crear o directorio %s\n"
+
+#, fuzzy, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "%s: non se pode crear o directorio %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: non se pode bloquear o ficheiro %s\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "non hai unha entrada do ficheiro de contrasinais que coincida en %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "¿engadir o usuario \"%s\" en %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "entrada do ficheiro de contrasinais shadow non válida"
+
+msgid "duplicate shadow password entry"
+msgstr "entrada de contrasinal shadow duplicada"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "usuario %s: último cambio de contrasinal no futuro\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: non se pode abrir o ficheiro %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: non se pode rescribir o ficheiro\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "O acceso a su para esa conta está DENEGADO.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Omitiuse a autenticación por contrasinal.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Introduza O SEU PROPIO contrasinal para autenticación.\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: non se pode bloquear o ficheiro %s\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr ""
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr ""
+
+msgid "Session terminated, terminating shell..."
+msgstr ""
+
+#, c-format
+msgid " ...killed.\n"
+msgstr ""
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr ""
+
+msgid " ...terminated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"Emprego: su [opcións] [USUARIO]\n"
+"\n"
+"Opcións:\n"
+" -c, --command ORDE\t\tpasa a ORDE ao intérprete de ordes executado\n"
+" -h, --help\t\t\tamosa esta mensaxe de axuda e sae\n"
+" -, -l, --login\t\tfai que o intérprete de ordes sexa de \"login\"\n"
+" -m, -p,\n"
+" --preserve-environment\tnon reinicia as variables de ambiente e\n"
+"\t\t\t\tmantén o mesmo intérprete de ordes\n"
+" -s, --shell INTÉRPRETE\temprega o INTÉRPRETE no canto do normal\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ignórase)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Non está autorizado para facer su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Introduza o seu propio contrasinal)"
+
+#, fuzzy, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: a autenticación con PAM fallou\n"
+
+#, fuzzy, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "Non está autorizado para facer su %s\n"
+
+#, fuzzy, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "Non hai unha entrada de contrasinal para \"root\""
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: débese executar dende un terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start(): erro %d\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: non se pode cambiar o nome do directorio %s a %s\n"
+
+#, fuzzy, c-format
+msgid "Cannot execute %s\n"
+msgstr "Non se pode executar %s"
+
+msgid "No password file"
+msgstr "Non é un ficheiro de contrasinais"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "Non hai unha entrada de contrasinal para \"root\""
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Escriba control-d para seguir co inicio normal,\n"
+"(ou escriba o contrasinal de root para o mantemento do sistema):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "A entrar no modo de mantemento do sistema"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: non se pode crear o novo ficheiro de valores por defecto\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: non se pode crear o novo ficheiro de valores por defecto\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: non se pode abrir o novo ficheiro de valores por defecto\n"
+
+#, fuzzy, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: liña %d: a chamada a chown fallou\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: non se pode crear o directorio %s\n"
+
+#, fuzzy, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: rename: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: o grupo \"%s\" é un grupo NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: especificáronse grupos de máis (máximo %d).\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr "Emprego: %s [entrada]\n"
+
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr ""
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr ""
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr ""
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr ""
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: directorio base \"%s\" non válido\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: comentario \"%s\" non válido\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: directorio inicial \"%s\" non válido\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: precísase de contrasinais shadow para -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: precísase de contrasinais shadow para -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: campo \"%s\" non válido\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: intérprete de ordes \"%s\" non válido\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: aviso: %s non pertence a %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rewrite password file\n"
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s: non se pode rescribir o ficheiro de contrasinais\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s: non se pode crear o directorio %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: non se puido deixar os privilexios (%s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error updating files\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: erro ao actualizar os ficheiros\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: non se pode crear o directorio %s\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: directorio inicial \"%s\" non válido\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "non se puido cambiar o propietario da caixa do correo"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: non se pode crear o directorio %s\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: liña %d: a chamada a chown fallou\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: liña %d: a chamada a chown fallou\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "A crear o ficheiro da caixa do correo"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Non se atopou o grupo \"mail\". Hase crear a caixa do correo do usuario co "
+"modo 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "A estabrecer os permisos do ficheiro da caixa do correo"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: o usuario %s existe\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: o grupo %s existe - se quere engadir este usuario a este grupo, empregue "
+"-g.\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: non se pode crear %s\n"
+
+#, fuzzy, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: o UID %u non é único\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: non se pode crear o directorio %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: non se pode crear %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: non se pode crear %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: non se pode crear %s\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: aviso: o directorio inicial xa existe.\n"
+"Non se copia nel ningún ficheiro do directorio skel.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr "%s: non se pode cambiar o usuario \"%s\" no cliente NIS.\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: Non se pode eliminar o grupo %s, que é o grupo primario de outro "
+"usuario.\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "%s: non se pode cambiar o nome do directorio %s a %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: directorio inicial \"%s\" non válido\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: aviso: non se pode eliminar "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s non pertence a %s, non se elimina\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: non se puido deixar os privilexios (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: non se pode cambiar o nome do directorio %s a %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: non se pode cambiar o nome do directorio %s a %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: o usuario %s é un usuario NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: directorio inicial \"%s\" non válido\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: non se elimina o directorio %s (había eliminar o directorio inicial do "
+"usuario %s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: erro ao borrar o directorio %s\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: erro ao borrar o directorio %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr ""
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr ""
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr ""
+
+msgid " -L, --lock lock the user account\n"
+msgstr ""
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr ""
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr ""
+
+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"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: o usuario %s existe\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: data \"%s\" non válida\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: data \"%s\" non válida\n"
+
+#, fuzzy, c-format
+msgid "%s: no options\n"
+msgstr "%s: non se pode abrir o ficheiro %s\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: precísase de contrasinais de shadow para -e e -f\n"
+
+#, fuzzy, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "O membro xa existe\n"
+
+#, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: o directorio %s existe\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: non se pode crear o directorio %s\n"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: aviso: non se puido eliminar completamente o vello directorio inicial %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: non se pode cambiar o nome do directorio %s a %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: aviso: %s non pertence a %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "non se puido cambiar o propietario da caixa do correo"
+
+msgid "failed to rename mailbox"
+msgstr "non se puido cambiar o nome da caixa do correo"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s: non se puido deixar os privilexios (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s: non se puido deixar os privilexios (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s: non se puido deixar os privilexios (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s: non se puido deixar os privilexios (%s)\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid " -g, --group edit group database\n"
+msgstr ""
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr ""
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: non se puido deixar os privilexios (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s non ten cambios\n"
+
+#, fuzzy
+msgid "failed to create scratch directory"
+msgstr "non se puido cambiar o nome da caixa do correo"
+
+#, fuzzy
+msgid "failed to drop privileges"
+msgstr "%s: non se puido deixar os privilexios (%s)\n"
+
+#, fuzzy
+msgid "Couldn't get file context"
+msgstr "Non se puido bloquear o ficheiro"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+#, fuzzy
+msgid "failed to gain privileges"
+msgstr "%s: non se puido deixar os privilexios (%s)\n"
+
+msgid "Couldn't lock file"
+msgstr "Non se puido bloquear o ficheiro"
+
+msgid "Couldn't make backup"
+msgstr "Non se puido facer unha copia de seguridade"
+
+#, fuzzy, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr "%s: non se atopou %s en /etc/passwd\n"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+#, fuzzy
+msgid "failed to open scratch file"
+msgstr "Non se pode abrir o ficheiro de grupos\n"
+
+#, fuzzy
+msgid "failed to unlink scratch file"
+msgstr "%s: campos longos de máis\n"
+
+#, fuzzy
+msgid "failed to stat edited file"
+msgstr "non se puido cambiar o nome da caixa do correo"
+
+#, fuzzy
+msgid "failed to allocate memory"
+msgstr "non se puido cambiar o propietario da caixa do correo"
+
+#, fuzzy
+msgid "failed to create backup file"
+msgstr "non se puido cambiar o nome da caixa do correo"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: non se pode restaurar %s: %s (os seus cambios están en %s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: directorio base \"%s\" non válido\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Emprego: %s [entrada]\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "A chamada a malloc(%d) fallou\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Emprego: chage [opcións] [USUARIO]\n"
+#~ "\n"
+#~ "Opcións:\n"
+#~ " -d, --lastday ÚLTIMO\t\tfixa o último cambio de\tcontrasinal ao\n"
+#~ "\t\t\t\tdía ÚLTIMO\n"
+#~ " -E, --expiredate CADUCA\tfixa a data de caducidade ao día CADUCA\n"
+#~ " -h, --help\t\t\tamosa esta mensaxe de axuda e sae\n"
+#~ " -I, --inactive INACTIVO\tfixa o tempo de inactividade do contrasinal\n"
+#~ "\t\t\t\ttrala caducidade a INACTIVO\n"
+#~ " -l, --list\t\t\tamosa a información de caducidade das contas\n"
+#~ " -m, --mindays MÍNIMO\t\tfixa o número mínimo de días antes do\n"
+#~ "\t\t\t\tcambio de contrasinal a MÍNIMO\n"
+#~ " -M, --maxdays MÁXIMO\t\tfixa o número máximo de días antes do\n"
+#~ "\t\t\t\tcambio de contrasinal a MÁXIMO\n"
+#~ " -W, --warndays AVISO\t\tfixa o número de días de aviso de caducidade\n"
+#~ "\t\t\t\ta AVISO\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: a autenticación con PAM fallou\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "Emprego: %s [-f nome] [-r num_cuarto] [-w tlf_traballo]\n"
+#~ "\t[-h tlf_casa] [-o outro] [usuario]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr ""
+#~ "Emprego: %s [-f nome] [-r num_cuarto] [-w tlf_traballo] [-h tlf_casa]\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Emprego: chpasswd [opcións]\n"
+#~ "\n"
+#~ "Opcións:\n"
+#~ " -e, --encrypted\tos contrasinais fornecidos xa están cifrados\n"
+#~ " -h, --help\t\tamosa esta mensaxe de axuda e sae\n"
+#~ " -m, --md5\t\tempregar cifrado MD5 no canto de DES se os\n"
+#~ "\t\t\tcontrasinais fornecidos non están cifrados\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Emprego: chsh [opcións] [USUARIO]\n"
+#~ "\n"
+#~ "Opcións:\n"
+#~ " -h, --help\t\t\tamosa esta mensaxe de axuda e sae\n"
+#~ " -s, --shell INTÉRPRETE\tnovo intérprete de ordes da conta de usuario\n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "Emprego: expiry {-f|-c}\n"
+
+#, fuzzy
+#~| msgid "%s: cannot open file %s\n"
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "%s: non se pode abrir o ficheiro %s\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "Emprego: groupdel grupo\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "Emprego: %s [-r] [-s] [grupo [gshadow]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "Emprego: %s [-r] [-s] [grupo]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: -s e -r son incompatibles\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "Emprego: groupdel grupo\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "Emprego: groupdel grupo\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Emprego: lastlog [opcións]\n"
+#~ "\n"
+#~ "Opcións:\n"
+#~ " -b, --before DÍAS\tamosa só os rexistros de última entrada de máis\n"
+#~ "\t\t\tde DÍAS días\n"
+#~ " -h, --help\t\tamosa esta mensaxe de axuda e sae\n"
+#~ " -t, --time DÍAS\tamosa só os rexistros de última entrada de menos\n"
+#~ "\t\t\tde DÍAS días\n"
+#~ " -u, --user USUARIO\tamosa o rexistro de última entrada do USUARIO\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Emprego: passwd [opcións] [USUARIO]\n"
+#~ "\n"
+#~ "Opcións:\n"
+#~ " -a, --all\t\t\tinforma do estado dos contrasinais en tódalas contas\n"
+#~ " -d, --delete\t\t\telimina o contrasinal da conta indicada\n"
+#~ " -e, --expire\t\t\tfai caducar o contrasinal da conta indicada\n"
+#~ " -h, --help\t\t\tamosa esta mensaxe de axuda e sae\n"
+#~ " -k, --keep-tokens\t\tcambia o contrasinal só se caducou\n"
+#~ " -i, --inactive INACT\t\tcambia o tempo de inactividade trala "
+#~ "caducidade\n"
+#~ "\t\t\t\tda conta a INACT\n"
+#~ " -l, --lock\t\t\tbloquea a conta indicada\n"
+#~ " -n, --mindays MÍN\tfixa o número mínimo de días antes do cambio de\n"
+#~ "\t\t\t\tcontrasinal a MÍN\n"
+#~ " -q, --quiet\t\t\tmodo silencioso\n"
+#~ " -r, --repository REP\t\tcambia o contrasinal do repositorio REP\n"
+#~ " -S, --status\t\t\tinforma do estado do contrasinal da conta indicada\n"
+#~ " -u, --unlock\t\t\tdesbloquea a conta indicada\n"
+#~ " -w, --warndays AVISO\tfixa o tempo de aviso antes da caducidade a "
+#~ "AVISO\n"
+#~ "\t\t\t\tdías\n"
+#~ " -x, --maxdays MÁX\t\tfixa o número máximo de días antes do cambio de\n"
+#~ "\t\t\t\tcontrasinal a MÁX\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr "Emprego: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr "Emprego: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "Emprego: id\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "Emprego: id\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "Id. descoñecido: %s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "Non hai un intérprete de ordes\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force removal of files,\n"
+#~ " even if not owned by user\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -r, --remove remove home directory and mail spool\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Emprego: userdel [opcións] USUARIO\n"
+#~ "\n"
+#~ "Opcións:\n"
+#~ " -f, --force\t\t\ttamén elimina os ficheiros se non son do usuario\n"
+#~ " -h, --help\t\t\tamosa esta mensaxe de axuda e sae\n"
+#~ " -r, --remove\t\t\telimina o directorio inicial e o correo\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Emprego: usermod [opcións] USUARIO\n"
+#~ "\n"
+#~ "Opcións:\n"
+#~ " -a, --append GRUPO\t\tengade o usuario ao GRUPO suplementario\n"
+#~ "\t\t\t\t(emprégueo só con -G)\n"
+#~ " -c, --comment COMENTARIO\tnovo valor do campo GECOS\n"
+#~ " -d, --home DIR_INICIAL\tnovo directorio inicial da conta de usuario\n"
+#~ " -e, --expiredate DATA_CAD\tfixa a data de caducidade da conta a "
+#~ "DATA_CAD\n"
+#~ " -f, --inactive INACTIVA\tfixa o tempo de inactividade do contrasinal\n"
+#~ "\t\t\t\ttrala caducidade a INACTIVA\n"
+#~ " -g, --gid GRUPO\t\tusa o GRUPO coma novo grupo primario\n"
+#~ " -G, --groups GRUPOS\t\tnova lista de GRUPOS suplementarios\n"
+#~ " -h, --help\t\t\tamosa esta mensaxe de axuda e sae\n"
+#~ " -l, --login NOVO_USUARIO\tnovo valor do nome de usuario\n"
+#~ " -L, --lock\t\t\tbloquea a conta do usuario\n"
+#~ " -m, --move-home\t\tmove o contido do directorio inicial á nova\n"
+#~ "\t\t\t\tlocalización (emprégueo só con -d)\n"
+#~ " -o, --non-unique\t\tpermite empregar UIDs duplicados (non únicos)\n"
+#~ " -p, --password CONTRASINAL\temprega o constrasinal cifrado coma novo\n"
+#~ "\t\t\t\tcontrasinal\n"
+#~ " -s, --shell INTÉRPRETE\tnovo intérprete de ordes da conta de usuario\n"
+#~ " -u, --uid UID\t\t\tnovo UID para a conta de usuario\n"
+#~ " -U, --unlock\t\t\tdesbloquea a conta do usuario\n"
+#~ "\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s: non se forneceu ningún modificador\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group edit group database\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -p, --passwd edit passwd database\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow edit shadow or gshadow database\n"
+#~ " -u, --user which user's tcb shadow file to edit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Emprego: vipw [opcións]\n"
+#~ "\n"
+#~ "Opcións:\n"
+#~ " -g, --group\t\tedita a base de datos de grupos\n"
+#~ " -h, --help\t\tamosa esta mensaxe de axuda e sae\n"
+#~ " -p, --passwd\t\tedita a base de datos de contrasinais\n"
+#~ " -q, --quiet\t\tmodo silencioso\n"
+#~ " -s, --shadow\t\tedita a base de datos shadow ou gshadow\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Emprego: %s [entrada]\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s: non se pode crear %s\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s: non se pode cambiar o propietario de %s\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all display faillog records for all users\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -l, --lock-time SEC after failed login lock account to SEC "
+#~ "seconds\n"
+#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
+#~ " -r, --reset reset the counters of login failures\n"
+#~ " -t, --time DAYS display faillog records more recent than "
+#~ "DAYS\n"
+#~ " -u, --user LOGIN display faillog record or maintains "
+#~ "failure\n"
+#~ " counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ " options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Emprego: faillog [opcións]\n"
+#~ "\n"
+#~ "Opcións:\n"
+#~ " -a, --all\t\tamosa os rexistros de entradas fallidas\tpara\n"
+#~ "\t\t\ttódolos usuarios\n"
+#~ " -h, --help\t\tamosa esta mensaxe de axuda e sae\n"
+#~ " -l, --lock-time SEG\tdespois dunha entrada fallida bloquea a conta\n"
+#~ "\t\t\tdurante SEG segundos\n"
+#~ " -m, --maximum MÁX\tfixa os contadores de máximas entradas fallidas a "
+#~ "MÁX\n"
+#~ " -r, --reset\t\treinicia os contadores de entradas fallidas\n"
+#~ " -t, --time DÍAS\tamosa os rexistros de entradas fallidas máis\n"
+#~ "\t\t\trecentes que DÍAS\n"
+#~ " -u, --user USUARIO\tamosa o rexistro de entradas fallidas ou mantén\n"
+#~ "\t\t\tos contadores de fallos e límites (se se emprega coas\n"
+#~ "\t\t\topcións -r, -m ou -l) só do USUARIO\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force exit with success status if the\n"
+#~ " specified group already exists\n"
+#~ " -g, --gid GID use GID for the new group\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique allow create group with duplicate\n"
+#~ " (non-unique) GID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new group\n"
+#~ " -r, --system create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Emprego: groupadd [opcións] GRUPO\n"
+#~ "\n"
+#~ "Opcións:\n"
+#~ " -f, --force\t\tforza a saída con éxito se o grupo indicado xa existe\n"
+#~ " -g, --gid GID\t\temprega o GID para o novo grupo\n"
+#~ " -h, --help\t\tamosa esta mensaxe de axuda e sae\n"
+#~ " -K, --key CLAVE=VALOR\tignora os valores de /etc/login.defs\n"
+#~ " -o, --non-unique\tpermite crear un grupo cun GID duplicado (non único)\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --gid GID force use new GID by GROUP\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Emprego: groupmod [opcións] GRUPO\n"
+#~ "\n"
+#~ "Opcións:\n"
+#~ " -g, --gid GID\t\t\temprega o GID para o novo grupo\n"
+#~ " -h, --help\t\t\tamosa esta mensaxe de axuda e sae\n"
+#~ " -n, --new-name NOVO_GRUPO\tcambia o nome do GRUPO por NOVO_GRUPO\n"
+#~ " -o, --non-unique\t\tpermite crear un grupo cun GID duplicado\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~ " home directory\n"
+#~ " -c, --comment COMMENT set the GECOS field for the new user "
+#~ "account\n"
+#~ " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~ " -D, --defaults print or save modified default useradd\n"
+#~ " configuration\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP for the new user account\n"
+#~ " -G, --groups GROUPS list of supplementary groups for the new\n"
+#~ " user account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -l, --no-log-init do not add the user to the lastlog and\n"
+#~ " faillog databases\n"
+#~ " -m, --create-home create home directory for the new user\n"
+#~ " account\n"
+#~ " -M, --no-create-home do not create user's home directory\n"
+#~ " (overrides /etc/login.defs)\n"
+#~ " -N, --no-user-group do not create a group with the same name "
+#~ "as\n"
+#~ " the user\n"
+#~ " -o, --non-unique allow create user with duplicate\n"
+#~ " (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new user\n"
+#~ " account\n"
+#~ " -r, --system create a system account\n"
+#~ " -s, --shell SHELL the login shell for the new user account\n"
+#~ " -u, --uid UID force use the UID for the new user "
+#~ "account\n"
+#~ " -U, --user-group create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Emprego: useradd [opcións] USUARIO\n"
+#~ "\n"
+#~ "Opcións:\n"
+#~ " -b, --base-dir DIR_BASE\tdirectorio base para o directorio inicial\n"
+#~ "\t\t\t\tda nova conta de usuario\n"
+#~ " -c, --comment COMENTARIO\tfixa o campo GECOS da nova conta de usuario\n"
+#~ " -d, --home-dir DIR_INICIAL\tdirectorio inicial da nova conta de "
+#~ "usuario\n"
+#~ " -D, --defaults\t\tamosa ou grave a configuración modificada\n"
+#~ "\t\t\t\tde useradd\n"
+#~ " -e, --expiredate DATA_CAD\tfixa a data de caducidade da conta a "
+#~ "DATA_CAD\n"
+#~ " -f, --inactive INACTIVA\tfixa o tempo de inactividade do contrasinal\n"
+#~ "\t\t\t\ttrala caducidade a INACTIVA\n"
+#~ " -g, --gid GRUPO\t\tusa o GRUPO para a nova conta de usuario\n"
+#~ " -G, --groups GRUPOS\t\tlista de grupos suplementarios para a nova\n"
+#~ "\t\t\t\tconta de usuario\n"
+#~ " -h, --help\t\t\tamosa esta mensaxe de axuda e sae\n"
+#~ " -k, --skel DIR_SKEL\t\tespecifica un directorio \"skel\" alternativo\n"
+#~ " -K, --key CLAVE=VALOR\t\tomite os valores por defecto de /etc/login."
+#~ "defs\n"
+#~ " -m, --create-home\t\tcrea o directorio inicial para a nova conta\n"
+#~ "\t\t\t\tde usuario\n"
+#~ " -o, --non-unique\t\tpermite crear usuarios con UIDs duplicados\n"
+#~ "\t\t\t\t(non únicos)\n"
+#~ " -p, --password CONTRASINAL\temprega o CONTRASINAL cifrado para a nova\n"
+#~ "\t\t\t\tconta de usuario\n"
+#~ " -s, --shell INTÉRPRETE\to intérprete de ordes da nova conta de usuario\n"
+#~ " -u, --uid UID\t\t\tusa o UID para a nova conta de usuario\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Vai caducar o contrasinal."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: non se pode bloquear o ficheiro de contrasinais\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro de contrasinais\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: non se pode bloquear o ficheiro de contrasinais shadow\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro de contrasinais shadow\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: non se pode rescribir o ficheiro de contrasinais shadow\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: non se pode rescribir o ficheiro de contrasinais\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: non se pode actualizar o ficheiro de contrasinais shadow\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tNome completo: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tNúmero de cuarto: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tTeléfono do traballo: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tTeléfono da casa: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr ""
+#~ "Non se pode bloquear o ficheiro de contrasinais; volva tentalo despois.\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Erro ao actualizar a entrada de contrasinal.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Non se poden gravar os cambios no ficheiro de contrasinais.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Non se pode desbloquear o ficheiro de contrasinais.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: non se pode bloquear o ficheiro de grupos\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: non se pode bloquear o ficheiro gshadow\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro shadow\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: erro ao actualizar o ficheiro shadow\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: erro ao actualizar a entrada do grupo\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: liña %d: grupo %s descoñecido\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: liña %d: non se pode actualizar a entrada\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: non se pode bloquear o ficheiro shadow\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: erro ao actualizar o ficheiro shadow\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: erro ao actualizar o ficheiro de contrasinais\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: liña %d: usuario %s descoñecido\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: liña %d: non se pode actualizar a entrada de contrasinal\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: usuario descoñecido\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Usuario descoñecido: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Emprego: %s [-r|-R] grupo\n"
+
+#~ msgid " %s [-a user] group\n"
+#~ msgstr " %s [-a usuario] grupo\n"
+
+#~ msgid " %s [-d user] group\n"
+#~ msgstr " %s [-d usuario] grupo\n"
+
+#~ msgid " %s [-A user,...] [-M user,...] group\n"
+#~ msgstr " %s [-A usuario,...] [-M usuario,...] grupo\n"
+
+#~ msgid " %s [-M user,...] group\n"
+#~ msgstr " %s [-M usuario,...] grupo\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: non se pode obter un bloqueo\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: non se pode obter o bloqueo de shadow\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: non se pode rescribir o ficheiro de shadow\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: non se pode desbloquear o ficheiro\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: non se pode actualizar a entrada\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: non se pode actualizar a entrada de shadow\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "grupo descoñecido: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro shadow\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "¿Quen é vostede?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: membro %s descoñecido\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: erro ao engadir a entrada do novo grupo\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: non se pode rescribir o ficheiro de grupos\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: non se pode rescribir o ficheiro de grupos shadow\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: non se pode bloquear o ficheiro de grupos\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro de grupos\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: non se pode bloquear o ficheiro de grupos shadow\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro de grupos shadow\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: o GID %u non é único\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: erro ao eliminar a entrada do grupo\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: erro ao eliminar a entrada do grupo shadow\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: non se pode eliminar o grupo primario do usuario.\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Non se atopou o membro a eliminar\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr "Emprego: groupmems -a usuario | -d usuario | -D | -l [-g grupo]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Só o administrador pode engadir membros a distintos grupos\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "Precísase de acceso a grupos\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "Non é o propietario primario do grupo actual\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "A autenticación con PAM fallou para\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "Non se pode bloquear o ficheiro de grupos\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "Non se pode pechar o ficheiro de grupos\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: non se atopou %s en /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u non é un GID único\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s non é un nome único\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: non se pode rescribir o ficheiro de contrasinais\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: non se pode bloquear o ficheiro de contrasinais\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro de contrasinais\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: non se pode actualizar a entrada shadow para %s\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: non se pode actualizar a entrada do grupo %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: non se pode bloquear o ficheiro de grupos shadow\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro de grupos shadow\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: non se pode eliminar o grupo shadow %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: non se pode actualizar o ficheiro de grupos shadow\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: non se pode borrar o ficheiro de grupos shadow\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "UID descoñecido: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "GID descoñecido: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: o grupo %s non existe\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: o usuario %s non existe\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: nome de usuario \"%s\" non válido\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: non se pode bloquear /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: non se pode bloquear /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: non se pode bloquear /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: non se pode bloquear /etc/passwd.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: non se pode abrir ficheiros\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: non se pode actualizar a entrada de contrasinal para %s\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: non se pode bloquear o ficheiro de contrasinais\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro de contrasinais\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: non se pode eliminar a entrada shadow para %s\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: non se pode actualizar o ficheiro de contrasinais\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: non se pode actualizar a entrada do usuario %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: non se pode borrar o ficheiro de contrasinais shadow\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: GID %s descoñecido\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: grupo %s descoñecido\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: esgotouse a memoria en update_gshadow\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: non se pode rescribir o ficheiro de contrasinais shadow\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: non se pode bloquear o ficheiro de contrasinais shadow\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro de contrasinais shadow\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: erro ao bloquear o ficheiro de grupos\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: erro ao abrir o ficheiro de grupos\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: erro ao bloquear o ficheiro de grupos shadow\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: erro ao abrir o ficheiro de grupos shadow\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: erro ao engadir a nova entrada de contrasinal\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: erro ao engadir a nova entrada de contrasinal shadow\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr ""
+#~ "%s: aviso: CREATE_HOME non está soportado, empregue -m no seu canto.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: erro ao actualizar a entrada do grupo\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: erro ao actualizar a entrada do grupo\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro de grupos\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro de grupos shadow\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: erro ao eliminar a entrada de contrasinal\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: erro ao eliminar a entrada de contrasinal shadow\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: erro ao engadir a entrada do novo grupo\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: o uid %lu non é único\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: erro ao cambiar a entrada de contrasinal\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: erro ao eliminar a entrada de contrasinal\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: erro ao eliminar a entrada de contrasinal shadow\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: non se pode obter un GID único\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " en \"%.100s\" desde \"%.200s\""
+
+#~ msgid " on '%.100s'"
+#~ msgstr " en \"%.100s\""
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: liña %d: non se pode crear o UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: o nome %s non é único\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ " -h, --help\t\tdisplay this help message and exit\n"
+#~ " -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Emprego: chgpasswd [opcións]\n"
+#~ "\n"
+#~ "Opcións:\n"
+#~ " -e, --encrypted\tos contrasinais fornecidos xa están cifrados\n"
+#~ " -h, --help\t\tamosa esta mensaxe de axuda e sae\n"
+#~ " -m, --md5\t\tempregar cifrado MD5 no canto de DES se os\n"
+#~ "\t\t\tcontrasinais fornecidos non están cifrados\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Non é un ficheiro de contrasinais\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Perdón.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Aínda non se pode cambiar o contrasinal de %s.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Perdón."
diff --git a/po/he.gmo b/po/he.gmo
new file mode 100644
index 0000000..13598b7
--- /dev/null
+++ b/po/he.gmo
Binary files differ
diff --git a/po/he.po b/po/he.po
new file mode 100644
index 0000000..4756d0a
--- /dev/null
+++ b/po/he.po
@@ -0,0 +1,2784 @@
+# Hebrew translation of shadow.
+# Copyright (C) 2004 THE shadow'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the shadow package.
+# Lior Kaplan <webmaster@guides.co.il>, 2004.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2004-07-21 23:59+0300\n"
+"Last-Translator: Lior Kaplan <webmaster@guides.co.il>\n"
+"Language-Team: Hebrew <en@li.org>\n"
+"Language: he\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "לא יכול להקצות מקום בשביל מידע על הקונפיגורציה.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "שגיאת הגדרות - רכיב לא ידוע '%s' (הודע למנהל)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr ""
+
+msgid "Password: "
+msgstr "סיסמה: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "הסיסמה של %s: "
+
+#, fuzzy
+#| msgid "Cannot open the password file.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "לא יכול לפתוח את קובץ הסיסמאות.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr ""
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not set sename for %s\n"
+msgstr "לא יכול להקצות מקום בשביל מידע על הקונפיגורציה.\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "שנה מידע הזדקות בשביל %s\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "%s: לא יכול לקבוע את שם המשתמש שלך.\n"
+
+#, fuzzy, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "%s: לא יכול לקבוע את שם המשתמש שלך.\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "ספרית שורש לא חוקית \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: לא יכול לשנות משתמש `%s' על לקוח NIS.\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: לא יכול לשנות משתמש `%s' על לקוח NIS.\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, fuzzy, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: לא יכול לשנות משתמש `%s' על לקוח NIS.\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: לא יכול לכתוב מחדש קובץ סיסמאות\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: לא יכול לפתוח קובץ צל\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "אזהרה: קבוצה לא מוכרת %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "אזהרה: יותר מידי קבוצות\n"
+
+msgid "Your password has expired."
+msgstr "תוקף הסיסמה שלך פג."
+
+msgid "Your password is inactive."
+msgstr "הסיסמה שלך אינה פעילה."
+
+msgid "Your login has expired."
+msgstr "תוקף הכניסה שלך למערכת פג."
+
+msgid " Contact the system administrator."
+msgstr " צור קשר עם מנהל המערכת."
+
+msgid " Choose a new password."
+msgstr " בחר סיסמה חדשה."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "תוקף הסיסמה שלך יפוג בתוך %ld ימים.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "תוקף הסיסמה שלך יפוג מחר."
+
+msgid "Your password will expire today."
+msgstr "תוקף הסיסמה שלך פג היום."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "לא יכול לשנות tty %s"
+
+#, fuzzy, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: שדות ארוכים מידי\n"
+
+#, fuzzy, c-format
+msgid "%s: "
+msgstr "passwd: %s\n"
+
+msgid ": "
+msgstr ""
+
+msgid "Environment overflow\n"
+msgstr "הצפת סביבה\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "אינך רשאי לשנות את $%s\n"
+
+#, fuzzy, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] "%d שגיאה מאז כניסה אחרונה למערכת. האחרונה היתה %s על %s.\n"
+msgstr[1] "%d שגיאה מאז כניסה אחרונה למערכת. האחרונה היתה %s על %s.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "%s: שדות ארוכים מידי\n"
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: זיהוי PAM נכשל\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Could not seteuid to %d\n"
+msgstr "לא יכול להקצות מקום בשביל מידע על הקונפיגורציה.\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not set caps\n"
+msgstr "לא יכול להקצות מקום בשביל מידע על הקונפיגורציה.\n"
+
+#, c-format
+msgid "%s: snprintf failed!\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, fuzzy, c-format
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+msgid "Too many logins.\n"
+msgstr "יותר מידי כניסות למערכת.\n"
+
+msgid "You have new mail."
+msgstr "יש לך דואר חדש."
+
+msgid "No mail."
+msgstr "אין דואר."
+
+msgid "You have mail."
+msgstr "יש לך דואר."
+
+msgid "no change"
+msgstr ""
+
+msgid "a palindrome"
+msgstr ""
+
+msgid "case changes only"
+msgstr ""
+
+msgid "too similar"
+msgstr ""
+
+msgid "too simple"
+msgstr ""
+
+msgid "rotated"
+msgstr ""
+
+msgid "too short"
+msgstr ""
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "סיסמה לא טובה: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr ""
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+msgid "passwd: password unchanged\n"
+msgstr "סיסמה: "
+
+msgid "passwd: password updated successfully\n"
+msgstr ""
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: conversation type %d not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: שורה %d: משתמש לא מוכר %s\n"
+
+#, c-format
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr ""
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: מספר טלפון בבית לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: לא יכול לשנות משתמש `%s' על לקוח NIS.\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: לא יכול לשנות משתמש `%s' על לקוח NIS.\n"
+
+#, fuzzy, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "ספרית שורש לא חוקית \"%s\"\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "לא יכול לבצע cd ל-\"%s\"\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "אין ספריה, נכנס למערכת עם HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "לא יכול להריץ %s"
+
+#, fuzzy, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "ספרית שורש לא חוקית \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "לא יכול לשנות ספרית שורש ל-\"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy
+msgid "Unable to determine your tty name."
+msgstr "%s: לא יכול לקבוע את שם המשתמש שלך.\n"
+
+msgid "No"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr ""
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "הכנס ערך חדש, או לחץ ENTER לברירת המחדל"
+
+msgid "Minimum Password Age"
+msgstr "גיל סיסמה מינימלי"
+
+msgid "Maximum Password Age"
+msgstr "גיל סיסמה מקסימלי"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "שינוי סיסמה אחרון (YYYY-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "אזהרת תוקף סיסמה"
+
+msgid "Password Inactive"
+msgstr "סיסמה לא פעילה"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "תאריך תוקף חשבון (YYYY-MM-DD)"
+
+#, fuzzy
+msgid "Last password change\t\t\t\t\t: "
+msgstr "שינוי סיסמה אחרון (YYYY-MM-DD)"
+
+#, fuzzy
+msgid "never"
+msgstr "אף פעם"
+
+msgid "password must be changed"
+msgstr ""
+
+#, fuzzy
+msgid "Password expires\t\t\t\t\t: "
+msgstr "תוקף סיסמה:\t"
+
+#, fuzzy
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "חסור פעילות סיסמה:\t"
+
+#, fuzzy
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "תוקף חשבון:\t"
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: הגישה נאסרה\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: לא יכול לקבוע את שם המשתמש שלך.\n"
+
+#, fuzzy, c-format
+msgid "%s: PAM: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "לא יכול לנעול קובץ סיסמאות; נסה שוב מאוחר יותר\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: לא יכול לפתוח קובץ צל\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: מספר טלפון בעבודה לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: לא יכול לפתוח קובץ סיסמאות צל\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "שנה מידע הזדקות בשביל %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: שגיאה בשינוי שדות\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr "שם מלא"
+
+#, fuzzy, c-format
+msgid "\t%s: %s\n"
+msgstr "passwd: %s\n"
+
+msgid "Room Number"
+msgstr "מספר חדר"
+
+msgid "Work Phone"
+msgstr "מספר טלפון בעבודה"
+
+msgid "Home Phone"
+msgstr "מספר טלפון בבית"
+
+msgid "Other"
+msgstr "אחר"
+
+msgid "Cannot change ID to root.\n"
+msgstr "לא יכול לשנות ID ל-root\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: מספר חדר לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: מספר טלפון בעבודה לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: מספר טלפון בבית לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: \"%s\" מכיל תווים לא חוקיים\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: \"%s\" מכיל תווים לא חוקיים\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: לא יכול לשנות משתמש `%s' על לקוח NIS.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr ""
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "משנה מידע בשביל המשתמש %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: שדות ארוכים מידי\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr ""
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: שורה %d: שורה ארוכה מידי\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: שורה %d: חסרה סיסמה חדשה\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: מספר טלפון בעבודה לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: שורה %d: משתמש לא מוכר %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: שגיאה זוהתה, מתעלם משינויים\n"
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: שורה %d: משתמש לא מוכר %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: שורה %d: משתמש לא מוכר %s\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr "מעטפת כניסה למערכת"
+
+#, fuzzy, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "אינך רשאי לשנות את המעטפת בשביל %s.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "משנה מעטפת כניסה למערכת בשביל %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: רשומה לא חוקית: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s היא מעטפת לא חוקית.\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "ספרית שורש לא חוקית \"%s\"\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr ""
+
+#, c-format
+msgid " [%lus left]"
+msgstr ""
+
+#, c-format
+msgid " [%lds lock]"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "ספרית שורש לא חוקית \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: מספר טלפון בעבודה לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "ספרית שורש לא חוקית \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: לא יכול לשנות משתמש `%s' על לקוח NIS.\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: מספר טלפון בעבודה לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr ""
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr ""
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr ""
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+msgid "The options cannot be combined.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: מספר טלפון בעבודה לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr ""
+
+msgid "New Password: "
+msgstr ""
+
+msgid "Re-enter new password: "
+msgstr ""
+
+msgid "They don't match; try again"
+msgstr ""
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr ""
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr ""
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr ""
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid " -r, --system create a system account\n"
+msgstr ""
+
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: לא יכול לקבוע את שם המשתמש שלך.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: לא יכול לשנות משתמש `%s' על לקוח NIS.\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: לא יכול לשנות משתמש `%s' על לקוח NIS.\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+
+msgid "\n"
+msgstr ""
+
+msgid "Actions:\n"
+msgstr ""
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr ""
+
+msgid " -l, --list list the members of the group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr ""
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr "שימוש: %s [-r|-R] group\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr ""
+
+#, fuzzy
+msgid "invalid group file entry"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr ""
+
+#, fuzzy
+msgid "duplicate group entry"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, fuzzy, c-format
+msgid "invalid group name '%s'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr ""
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr ""
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr ""
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr ""
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+#, fuzzy
+msgid "invalid shadow group file entry"
+msgstr "%s: שגיאה בעדכון קובץ צל\n"
+
+#, fuzzy
+msgid "duplicate shadow group entry"
+msgstr "%s: שגיאה בעדכון קובץ צל\n"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr ""
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr ""
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "שימוש: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "שימוש: id\n"
+
+msgid " groups="
+msgstr ""
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+
+msgid "Username Port From Latest"
+msgstr ""
+
+msgid "Username Port Latest"
+msgstr ""
+
+msgid "**Never logged in**"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "ספרית שורש לא חוקית \"%s\"\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%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 ""
+
+#, fuzzy, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "שימוש: %s [-p] [name]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr ""
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr ""
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s login: "
+msgstr ""
+
+msgid "login: "
+msgstr ""
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr ""
+
+msgid "login: abort requested by PAM\n"
+msgstr ""
+
+msgid "Login incorrect"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "%s: לא יכול לקבוע את שם המשתמש שלך.\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr ""
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr ""
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr ""
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr ""
+
+#, c-format
+msgid " from %.*s"
+msgstr ""
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+
+#, fuzzy
+msgid "Usage: logoutd\n"
+msgstr "שימוש: id\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, c-format
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: מספר טלפון בעבודה לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: מספר טלפון בעבודה לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: שדות ארוכים מידי\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "ספרית שורש לא חוקית \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "ספרית שורש לא חוקית \"%s\"\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr ""
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: מספר טלפון בעבודה לא חוקי: \"%s\"\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "סיסמה לא טובה: %s. "
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: מספר טלפון בעבודה לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+msgid "too many groups\n"
+msgstr ""
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid " -b, --badnames allow bad names\n"
+msgstr ""
+
+msgid " -r, --system create system accounts\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: שורה %d: משתמש לא מוכר %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: שורה %d: חסרה סיסמה חדשה\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid " -q, --quiet quiet mode\n"
+msgstr ""
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid "Old password: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+
+msgid "New password: "
+msgstr ""
+
+msgid "Try again."
+msgstr ""
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+
+msgid "They don't match; try again.\n"
+msgstr ""
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr ""
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr ""
+
+#, c-format
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "אינך רשאי לשנות את המעטפת בשביל %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr ""
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: password changed.\n"
+msgstr "סיסמה: "
+
+#, fuzzy, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "אזהרת תוקף סיסמה"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr "שימוש: %s [-p] [name]\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid " -q, --quiet report errors only\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+
+#, fuzzy
+msgid "invalid password file entry"
+msgstr "לא יכול לנעול קובץ סיסמאות; נסה שוב מאוחר יותר"
+
+#, fuzzy
+msgid "duplicate password entry"
+msgstr "שגיאה בעדכון רשומת הסיסמה."
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "%s: שורה %d: משתמש לא מוכר %s\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr ""
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "no tcb directory for %s\n"
+msgstr "ספרית שורש לא חוקית \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "create tcb directory for %s?"
+msgstr "לא יכול לשנות ספרית שורש ל-\"%s\"\n"
+
+#, fuzzy, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "לא יכול לשנות ספרית שורש ל-\"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: לא יכול לפתוח קובץ צל\n"
+
+#, fuzzy, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "לא יכול לנעול קובץ סיסמאות; נסה שוב מאוחר יותר\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr ""
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+#, fuzzy
+msgid "invalid shadow password file entry"
+msgstr "%s: לא יכול לנעול קובץ סיסמאות צל"
+
+#, fuzzy
+msgid "duplicate shadow password entry"
+msgstr "%s: לא יכול לעדכן קובץ סיסמאות צל"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: לא יכול לכתוב מחדש קובץ סיסמאות\n"
+
+#, fuzzy, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+msgid "Access to su to that account DENIED.\n"
+msgstr ""
+
+msgid "Password authentication bypassed.\n"
+msgstr ""
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: לא יכול לקבוע את שם המשתמש שלך.\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr ""
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr ""
+
+msgid "Session terminated, terminating shell..."
+msgstr ""
+
+#, c-format
+msgid " ...killed.\n"
+msgstr ""
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr ""
+
+msgid " ...terminated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s\n"
+msgstr "passwd: %s\n"
+
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr ""
+
+msgid "(Enter your own password)"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: זיהוי PAM נכשל\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr ""
+
+#, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr ""
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: לא יכול לשנות משתמש `%s' על לקוח NIS.\n"
+
+#, fuzzy, c-format
+msgid "Cannot execute %s\n"
+msgstr "לא יכול להריץ %s"
+
+#, fuzzy
+msgid "No password file"
+msgstr " בחר סיסמה חדשה.\n"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr ""
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+
+msgid "Entering System Maintenance Mode"
+msgstr ""
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: לא יכול לכתוב מחדש קובץ סיסמאות\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: לא יכול לכתוב מחדש קובץ סיסמאות\n"
+
+#, fuzzy, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr ""
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr ""
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr ""
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr ""
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "ספרית שורש לא חוקית \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "ספרית שורש לא חוקית \"%s\"\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "ספרית שורש לא חוקית \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error changing fields\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: שגיאה בשינוי שדות\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: לא יכול לשנות משתמש `%s' על לקוח NIS.\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "ספרית שורש לא חוקית \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "%s: שדות ארוכים מידי\n"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr ""
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+
+msgid "Setting mailbox file permissions"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+#, fuzzy, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "ספרית שורש לא חוקית \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr "%s: לא יכול לשנות משתמש `%s' על לקוח NIS.\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "%s: לא יכול לשנות משתמש `%s' על לקוח NIS.\n"
+
+#, fuzzy, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "ספרית שורש לא חוקית \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: לא יכול לשנות משתמש `%s' על לקוח NIS.\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: לא יכול לשנות משתמש `%s' על לקוח NIS.\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "ספרית שורש לא חוקית \"%s\"\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: מספר טלפון בעבודה לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr ""
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr ""
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr ""
+
+msgid " -L, --lock lock the user account\n"
+msgstr ""
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr ""
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr ""
+
+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"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: no options\n"
+msgstr "%s: לא יכול לפתוח קובץ צל\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr ""
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "ספרית שורש לא חוקית \"%s\"\n"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr ""
+
+msgid "failed to change mailbox owner"
+msgstr ""
+
+msgid "failed to rename mailbox"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s: מספר טלפון בעבודה לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s: שדות ארוכים מידי\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s: מספר טלפון בעבודה לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "ספרית שורש לא חוקית \"%s\"\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid " -g, --group edit group database\n"
+msgstr ""
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr ""
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: מספר טלפון בעבודה לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "סיסמה: "
+
+msgid "failed to create scratch directory"
+msgstr ""
+
+#, fuzzy
+msgid "failed to drop privileges"
+msgstr "%s: מספר טלפון בעבודה לא חוקי: \"%s\"\n"
+
+msgid "Couldn't get file context"
+msgstr ""
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "failed to gain privileges"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr ""
+
+msgid "Couldn't make backup"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s: %s\n"
+msgstr "passwd: %s\n"
+
+#, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+msgid "failed to open scratch file"
+msgstr ""
+
+#, fuzzy
+msgid "failed to unlink scratch file"
+msgstr "%s: שדות ארוכים מידי\n"
+
+msgid "failed to stat edited file"
+msgstr ""
+
+msgid "failed to allocate memory"
+msgstr ""
+
+msgid "failed to create backup file"
+msgstr ""
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "ספרית שורש לא חוקית \"%s\"\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "malloc(%d) נכשל\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: זיהוי PAM נכשל\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "שימוש: expiry {-f|-c}\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "שימוש: id\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "שימוש: id\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "שימוש: id\n"
+
+#, fuzzy
+#~ msgid "Password set to expire."
+#~ msgstr "תוקף הסיסמה שלך פג."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: לא יכול לנעול קובץ סיסמאות\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: לא יכול לפתוח קובץ סיסמאות\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: לא יכול לנעול קובץ סיסמאות צל\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: לא יכול לפתוח קובץ סיסמאות צל\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: לא יכול לכתוב מחדש קובץ סיסמאות צל\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: לא יכול לכתוב מחדש קובץ סיסמאות\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: לא יכול לעדכן קובץ סיסמאות צל\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tשם מלא: %s\n"
+
+#, fuzzy
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "מספר חדר"
+
+#, fuzzy
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "מספר טלפון בעבודה"
+
+#, fuzzy
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "מספר טלפון בבית"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "שגיאה בעדכון רשומת הסיסמה.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "לא יכול לבצע שינויים בקובץ הסיסמאות.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "לא יכול לשחרר נעילה של קובץ הסיסמאות.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: שגיאה בעדכון קובץ צל\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: שגיאה בעדכון קובץ צל\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: שגיאה בעדכון קובץ צל\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: שגיאה בעדכון קובץ סיסמאות\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: לא יכול לפתוח קובץ צל\n"
+
+#, fuzzy
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "%s: זיהוי PAM נכשל\n"
+
+#, fuzzy
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "לא יכול לבצע cd ל-\"%s\"\n"
+
+#, fuzzy
+#~ msgid "Cannot close group file\n"
+#~ msgstr "לא יכול לשחרר נעילה של קובץ הסיסמאות.\n"
+
+#, fuzzy
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "%s: שורה %d: משתמש לא מוכר %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+#, fuzzy
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: שורה %d: משתמש לא מוכר %s\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: שגיאה בעדכון קובץ צל\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: שגיאה בעדכון קובץ צל\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr " בחר סיסמה חדשה.\n"
diff --git a/po/hu.gmo b/po/hu.gmo
new file mode 100644
index 0000000..3c8a62a
--- /dev/null
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
new file mode 100644
index 0000000..23fd60d
--- /dev/null
+++ b/po/hu.po
@@ -0,0 +1,3764 @@
+# Gabor Kelemen <kelemeng@gnome.hu>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: 4.0.18\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2007-11-25 20:56+0100\n"
+"Last-Translator: SZERVÁC Attila <sas@321.hu>\n"
+"Language-Team: Hungarian <gnome@gnome.hu>\n"
+"Language: hu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Poedit-Language: Hungarian\n"
+"X-Poedit-Country: HUNGARY\n"
+"X-Generator: KBabel 1.11.2\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Sikertelen helyfoglalás a beállítási infónak.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "beállítási hiba - ismeretlen '%s' elem (értesítsd a rendszergazdát)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr ""
+
+msgid "Password: "
+msgstr "Jelszó: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s jelszava: "
+
+#, fuzzy
+#| msgid "Cannot open the password file.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "A jelszófájl nem nyitható meg.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr ""
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not set sename for %s\n"
+msgstr "Sikertelen helyfoglalás a beállítási infónak.\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "%s elévülési információinak módosítása\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "%s: A felhasználóneved megállapítása sikertelen\n"
+
+#, fuzzy, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "%s: %d. sor: nem találom e felhasználót: %s\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: a memória elfogyott\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: %s fájl nem frissíthető\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: érvénytelen saját könyvtár: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: nem tudom átnevezni %s könyvtárat erre: %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: %s könyvtár nem hozható létre\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: figyelem: nem törölhető: "
+
+#, fuzzy, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: figyelem: nem törölhető: "
+
+#, fuzzy, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: átnevezés: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: nem tudom átnevezni %s könyvtárat erre: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: nem tudom átnevezni %s könyvtárat erre: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: figyelem: nem törölhető: "
+
+#, fuzzy, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: %s könyvtár nem hozható létre\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: figyelem: nem törölhető: "
+
+#, fuzzy, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: %s fájl nem frissíthető\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: nem tudom frissíteni a \"shadow\" fájlt\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: átnevezés: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: %s fájl nem nyitható meg\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Figyelem: ismeretlen %s csoport\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Figyelem: túl sok csoport\n"
+
+msgid "Your password has expired."
+msgstr "A jelszó lejárt"
+
+msgid "Your password is inactive."
+msgstr "A jelszó inaktív"
+
+msgid "Your login has expired."
+msgstr "A bejelentkezés lejárt"
+
+msgid " Contact the system administrator."
+msgstr " Fordulj a rendszergazdához."
+
+msgid " Choose a new password."
+msgstr " Adj új jelszót"
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "A jelszó %ld nap múlva lejár.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Jelszavad már csak holnapig érvényes"
+
+msgid "Your password will expire today."
+msgstr "Jelszavad érvényessége ma lejár"
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Nem lehet a következő terminálra váltani: %s"
+
+#, fuzzy, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: túl hosszú mezők\n"
+
+#, fuzzy, c-format
+msgid "%s: "
+msgstr "%s: %s\n"
+
+msgid ": "
+msgstr ""
+
+msgid "Environment overflow\n"
+msgstr "Környezeti túlcsordulás\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Nem módosítható a következő: $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d hiba az utolsó bejelentkezés óta\n"
+"A legutóbbi: %s itt: %s\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "a postafiók tulajdonosának váltása sikertelen"
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr "%s: nem kérhető le egyedi felhasználói azonosító\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: nem szerezhető be egyedi csoportazonosító\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: nem szerezhető be egyedi csoportazonosító\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: %s létrehozása sikertelen\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: %s létrehozása sikertelen\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr "%s: nem kérhető le egyedi felhasználói azonosító\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: nem kérhető le egyedi felhasználói azonosító\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: nem kérhető le egyedi felhasználói azonosító\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: PAM hitelesítési hiba\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: érvénytelen mező: \"%s\"\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Could not seteuid to %d\n"
+msgstr "Sikertelen helyfoglalás a beállítási infónak.\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not set caps\n"
+msgstr "Sikertelen helyfoglalás a beállítási infónak.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't open file\n"
+msgid "%s: snprintf failed!\n"
+msgstr "%s: nem tudom megnyitni a fájlt\n"
+
+#, fuzzy, c-format
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: %d. sor: chown sikertelen\n"
+
+#, fuzzy, c-format
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: %d. sor: chown sikertelen\n"
+
+msgid "Too many logins.\n"
+msgstr "Túl sok bejelentkezés\n"
+
+msgid "You have new mail."
+msgstr "Új leveled érkezett"
+
+msgid "No mail."
+msgstr "Nincs leveled"
+
+msgid "You have mail."
+msgstr "Levelek kiolvasva"
+
+msgid "no change"
+msgstr "nem változott"
+
+msgid "a palindrome"
+msgstr "egy palindróma"
+
+msgid "case changes only"
+msgstr "csak változások esetén"
+
+msgid "too similar"
+msgstr "túl hasonló"
+
+msgid "too simple"
+msgstr "túl egyszerű"
+
+msgid "rotated"
+msgstr "fordított"
+
+msgid "too short"
+msgstr "túl rövid"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Rossz jelszó: %s."
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() sikertelen, hibakód: %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+msgid "passwd: password unchanged\n"
+msgstr "Jelszó módosítva."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: a jelszó sikeresen frissült\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: %s tár nem támogatott\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start: hiba: %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd: pam_start() sikertelen, hibakód: %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Hibás jelszó ehhez: %s.\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr ""
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: a jogosultságok eldobása meghiúsult (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: érvénytelen otthoni telefonszám: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: %s könyvtár nem hozható létre\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: %s könyvtár nem hozható létre\n"
+
+#, fuzzy, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: %s könyvtár nem hozható létre\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "nem lehet könyvtárat váltani ide: \"%s\"\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Ismeretlen könyvtár, bejelentkezés így: HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "%s nem futtatható"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Érvénytelen gyökérkönyvtár: \"%s\"\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Nem lehet a gyökérkönyvtárba váltani: \"%s\"\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: %s felhasználó most be van jelentkezve\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: %s felhasználó most be van jelentkezve\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Sikertelen tty név meghatározás."
+
+#, fuzzy
+msgid "No"
+msgstr "Nem\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Használat: %s [bemenet]\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr ""
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Add meg az új értéket vagy üss ENTER-t az alapértelmezetthez"
+
+msgid "Minimum Password Age"
+msgstr "Minimum jelszó-kor"
+
+msgid "Maximum Password Age"
+msgstr "Maximum jelszó-kor"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Utolsó jelszóváltás (ÉÉÉÉ-HH-NN)"
+
+msgid "Password Expiration Warning"
+msgstr "Jelszó elévülési figyelmeztetés"
+
+msgid "Password Inactive"
+msgstr "Inaktív jelszó"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Hozzáférés elévülési dátum (ÉÉÉÉ-HH-NN)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Utolsó jelszóváltás\t\t\t\t\t: "
+
+msgid "never"
+msgstr "soha"
+
+msgid "password must be changed"
+msgstr "jelszóváltás kötelező"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Jelszó lejár\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Jelszó inaktív\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Hozzáférés lejár\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "A jelszómódosítások közti legkevesebb nap\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "A jelszómódosítások közti legtöbb nap\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "A jelszó lejárata előtt figyelmeztetés napok száma\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: érvénytelen dátum: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: érvénytelen numerikus argumentum: \"%s\"\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: ne add meg más jelzőkkel a \"l\"-t\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Hozzáférés megtagadva.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: A felhasználóneved megállapítása sikertelen\n"
+
+#, fuzzy, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: fájlok zárolása sikertelen, próbáld később\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: %s fájl nem nyitható meg\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: hiba a következő indításakor: %s"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: a jogosultságok eldobása meghiúsult (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: nincs meg az árnyék jelszófájl\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: %s felhasználó nem létezik\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "%s elévülési információinak módosítása\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: hiba a mezők módosításakor\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr "Használat: %s [bemenet]\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr "TELJES Név"
+
+#, fuzzy, c-format
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Szobaszám"
+
+msgid "Work Phone"
+msgstr "Munkahelyi telefon"
+
+msgid "Home Phone"
+msgstr "Otthoni telefon"
+
+msgid "Other"
+msgstr "Egyéb"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Az ID nem cserélhető root-ra.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: érvénytelen név: \"%s\"\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: érvénytelen szobaszám: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: érvénytelen munkahelyi telefonszám: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: érvénytelen otthoni telefonszám: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: \"%s\" illegális karaktereket tartalmaz\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: \"%s\" illegális karaktereket tartalmaz\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: %s felhasználó nem létezik\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: `%s' felhasználó nem módosítható NIS kliensen.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: `%s' a NIS mester ehhez a klienshez.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "%s felhasználói információinak cseréje\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: túl hosszú mezők\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Használat: %s [bemenet]\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr ""
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: -a kapcsoló CSAK -G-vel megy\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: %d. sor: túl hosszú\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: %d. sor: hiányzó új jelszó\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: a jogosultságok eldobása meghiúsult (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: %s csoport nem létezik\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: %d. sor: nem tudom frissíteni a bejegyzést\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: hibákat észleltem, a változások elvetve\n"
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: %s felhasználó nem létezik\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: %s felhasználó nem létezik\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr "Bejelentkező héj"
+
+#, fuzzy, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Nem módosíthatod %s parancsértelmezőjét.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Bejelentkező héj ehhez: %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Érvénytelen bejegyzés: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s érvénytelen héj.\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: %s felhasználó nem létezik\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: figyelem: %s tulajdonosa nem %s\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "lastlog: váratlan argumentum: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: %s könyvtár nem hozható létre\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "Név Hibás Maximális Legutóbbi Ezen\n"
+
+#, fuzzy, c-format
+msgid " [%lus left]"
+msgstr " [%lds van hátra]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds zárolva]"
+
+#, fuzzy, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s: %s könyvtár nem hozható létre\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: a jogosultságok eldobása meghiúsult (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: %s könyvtár nem hozható létre\n"
+
+#, fuzzy, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "Ismeretlen felhasználó: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: nem tudom átnevezni %s könyvtárat erre: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: a jogosultságok eldobása meghiúsult (%s)\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Használat: %s [bemenet]\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr ""
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr ""
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr ""
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+
+#, fuzzy
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "%s jelszava nem változtatható\n"
+
+#, fuzzy
+msgid "The options cannot be combined.\n"
+msgstr "%s jelszava nem változtatható\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: árnyék csoport jelszavak kellenek ehhez: -A\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: %s csoport nem létezik\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: hiba a következő indításakor: %s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "%s csoport jelszavának cseréje\n"
+
+msgid "New Password: "
+msgstr "Új jelszó: "
+
+msgid "Re-enter new password: "
+msgstr "Új jelszó ismét: "
+
+msgid "They don't match; try again"
+msgstr "Nem egyeznek; próbáld újra"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Próbáld később\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "%s felhasználó hozzáadása %s csoporthoz\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "%s felhasználó törlése %s csoportból\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: %s felhasználó nem létezik\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Nem tty\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Használat: %s [bemenet]\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr ""
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid " -r, --system create a system account\n"
+msgstr ""
+
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s rossz csoport név\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "érvénytelen csoportnév: `%s'\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K KULCS=ÉRTÉK párost kíván\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: %s csoport létezik\n"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "A tag már létezik\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: A felhasználóneved megállapítása sikertelen\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: nem tudom átnevezni %s könyvtárat erre: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: `%s' felhasználó nem módosítható NIS kliensen.\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: %s csoport nem létezik\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: a(z) \"%s\" csoport egy NIS csoport.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s a NIS mester\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: %s egy NIS felhasználó\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: elfogyott a memória az update_group során\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr "Használat: %s [bemenet]\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+
+msgid "\n"
+msgstr ""
+
+msgid "Actions:\n"
+msgstr ""
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr ""
+
+msgid " -l, --list list the members of the group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr ""
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "érvénytelen csoportnév: `%s'\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: %s egy NIS csoport\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: ismeretlen %s felhasználó\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr "Használat: %s [bemenet]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr "Használat: %s [bemenet]\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s és -r inkompatibilisek\n"
+
+msgid "invalid group file entry"
+msgstr "érvénytelen csoport fájl bejegyzés"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "törlöd a következő sort: `%s'? "
+
+msgid "duplicate group entry"
+msgstr "dupla csoport bejegyzés"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "érvénytelen csoportnév: `%s'\n"
+
+#, fuzzy, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "érvénytelen csoportnév: `%s'\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "%s csoport: nincs %s felhasználó\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "törlöd a következő tagot: `%s'? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "nincs megfelelő csoportfájl bejegyzés a következőben: %s\n"
+
+#, fuzzy, c-format
+msgid "add group '%s' in %s? "
+msgstr "hozzáadod a(z) %s csoportot a következőhöz: %s ?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "érvénytelen árnyék csoport fájl bejegyzés"
+
+msgid "duplicate shadow group entry"
+msgstr "dupla árnyék csoport bejegyzés"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "%s árnyék csoport: nincs %s adminisztratív felhasználó\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "törlöd az adminisztratív %s tagot? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "%s árnyék csoport: nincs %s felhasználó\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: fájlok frissítve\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: nincs változás\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: %s fájl nem frissíthető\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Használat: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Használat: id\n"
+
+msgid " groups="
+msgstr " csoportok="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+
+msgid "Username Port From Latest"
+msgstr "Felhasználónév Port Innen Legutóbb"
+
+msgid "Username Port Latest"
+msgstr "Felhasználónév Port Legutóbb"
+
+msgid "**Never logged in**"
+msgstr "**Sosem lépett be**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s: %s könyvtár nem hozható létre\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s: a jelszófájl frissítése sikertelen\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 "Használat: %s [-p] [név]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h host] [-f név]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r host\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Érvénytelen bejelentkezési idő"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Rendszer lezárva rutin karbantartásra"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Leválasztás átlépve -- root bejelentkezés engedélyezett]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Nincs utmp bejegyzés. Futtasd a \"login\"-t a legalacsonyabb szintű \"sh\"-"
+"ból."
+
+#, fuzzy, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"A bejelentkezés %d mp. után elkésett\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM hiba, törölve: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s bejelentkezés: "
+
+msgid "login: "
+msgstr "bejelentkezés: "
+
+#, fuzzy, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Próbálkozások megengedett száma átlépve (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: a PAM törlést kért\n"
+
+msgid "Login incorrect"
+msgstr "Hibás bejelentkezés"
+
+#, fuzzy, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "%s: %d. sor: nem találom e felhasználót: %s\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s bejelentkezés: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: hiba a következő indításakor: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Figyelem: a bejelentkezés ismét lehetséges az átmeneti kizárás után."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Utolsó bejelentkezés: %s ide: %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Utolsó bejelentkezés: %.19s ide: %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " innen: %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"bejelentkezési idő átlépve\n"
+"\n"
+
+#, fuzzy
+msgid "Usage: logoutd\n"
+msgstr "Használat: id\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: can't open group file\n"
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr "%s: nem tudom megnyitni a 'group' fájlt\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: a jogosultságok eldobása meghiúsult (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: a jogosultságok eldobása meghiúsult (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: túl hosszú mezők\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: érvénytelen alapkönyvtár: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: %s könyvtár nem hozható létre\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Használat: newgrp [-] [csoport]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Használat: sg csoport [[-c] parancs]\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: a jogosultságok eldobása meghiúsult (%s)\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "Régi jelszó: "
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: hiba a következő indításakor: %s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: %s felhasználó nem létezik\n"
+
+msgid "too many groups\n"
+msgstr "túl sok csoport\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid " -b, --badnames allow bad names\n"
+msgstr ""
+
+msgid " -r, --system create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: %s csoport nem létezik\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: érvénytelen '%s' felhasználónév\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: érvénytelen '%s' felhasználónév\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: %d. sor: érvénytelen sor\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: nem tudom frissíteni %s felhasználó bejegyzését\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: %d. sor: GID létrehozása sikertelen\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: %d. sor: GID létrehozása sikertelen\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: %s felhasználó nem létezik\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: %d. sor: jelszó frissítése sikertelen\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: %d. sor: mkdir sikertelen\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: %d. sor: chown sikertelen\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: %d. sor: nem tudom frissíteni a bejegyzést\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: a jogosultságok eldobása meghiúsult (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: %s létrehozása sikertelen\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: nem tudom frissíteni a csoport fájlt\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid " -q, --quiet quiet mode\n"
+msgstr ""
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid "Old password: "
+msgstr "Régi jelszó: "
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Add meg az új jelszót (minimum %d, maximum %d karakter)\n"
+"Biztonság: kérlek használj vegyesen Nagy és kisbetűket és számokat.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Add meg az új jelszót (minimum %d, maximum %d karakter)\n"
+"Biztonság: kérlek használj vegyesen Nagy és kisbetűket és számokat.\n"
+
+msgid "New password: "
+msgstr "Új jelszó: "
+
+msgid "Try again."
+msgstr "Próbáld újra"
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Figyelem: Gyenge jelszó! (add meg újra, ha tényleg ezt akarod)."
+
+msgid "They don't match; try again.\n"
+msgstr "Nem egyeznek; próbáld újra\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "%s jelszava nem változtatható\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "%s jelszava nem változtatható\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: %s tár nem támogatott\n"
+
+#, c-format
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: %s jelszavát nem olvashatod és cserélheted.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "%s jelszavának cseréje\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "%s jelszava változatlan.\n"
+
+#, fuzzy, c-format
+msgid "%s: password changed.\n"
+msgstr "Jelszó módosítva."
+
+#, fuzzy, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "Jelszó elévülési figyelmeztetés"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr "Használat: %s [bemenet]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr "Használat: %s [bemenet]\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+
+msgid "invalid password file entry"
+msgstr "Érvénytelen jelszófájl bejegyzés"
+
+msgid "duplicate password entry"
+msgstr "dupla jelszó bejegyzés"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "érvénytelen '%s' felhasználó név\n"
+
+#, fuzzy, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "érvénytelen '%s' felhasználó név\n"
+
+#, fuzzy, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "%s felhasználó: nincs %u csoport\n"
+
+#, fuzzy, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "%s felhasználó: %s könyvtár nem létezik\n"
+
+#, fuzzy, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "%s felhasználó: %s program nem létezik\n"
+
+#, fuzzy, c-format
+msgid "no tcb directory for %s\n"
+msgstr "%s: %s könyvtár nem hozható létre\n"
+
+#, fuzzy, c-format
+msgid "create tcb directory for %s?"
+msgstr "%s: %s könyvtár nem hozható létre\n"
+
+#, fuzzy, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "%s: %s könyvtár nem hozható létre\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: %s fájl nem zárolható\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "nincs megfelelő jelszófájl bejegyzés a következőben: %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "hozzáadja \"%s\" felhasználót a következőbe: %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "érvénytelen árnyék jelszófájl bejegyzés"
+
+msgid "duplicate shadow password entry"
+msgstr "dupla árnyék jelszó bejegyzés"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "%s felhasználó: az utolsó jelszómódosítás időpontja a jövőben van\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: %s fájl nem nyitható meg\n"
+
+#, fuzzy, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: nem tudom újraírni a fájlt\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "A su-zás e hozzáféréshez ELUTASÍTVA.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Jelszó hitelesítés átlépve.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Add meg SAJÁT jelszavad a hitelesítéshez.\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: %s fájl nem zárolható\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr ""
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr ""
+
+msgid "Session terminated, terminating shell..."
+msgstr ""
+
+#, c-format
+msgid " ...killed.\n"
+msgstr ""
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr ""
+
+msgid " ...terminated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+# CHECK!
+#, fuzzy
+#| msgid ""
+#| "Usage: su [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
+#| " -h, --help display this help message and exit\n"
+#| " -, -l, --login make the shell a login shell\n"
+#| " -m, -p,\n"
+#| " --preserve-environment do not reset environment variables, and\n"
+#| " keep the same shell\n"
+#| " -s, --shell SHELL use SHELL instead of the default in "
+#| "passwd\n"
+#| "\n"
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"Használat: su [kapcsolók] [NÉV]\n"
+"\n"
+"Kapcsolók:\n"
+" -c, --command PARANCS a PARANCS átadása a meghívott héjnak\n"
+" -h, --help kiírja e súgót és kilép\n"
+" -, -l, --login a héj bejelentkezési héjjá tétele\n"
+" -m, -p,\n"
+" --preserve-environment nem állítja vissza a környezeti változókat\n"
+" és megtartja ugyanazt a héjat\n"
+" -s, --shell HÉJ a HÉJ használata a\n"
+" passwd-ben megadott alapértelmezett helyett\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Átlépve)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Nem vagy jogosult ehhez: su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Add meg saját jelszavad)"
+
+#, fuzzy, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: PAM hitelesítési hiba\n"
+
+#, fuzzy, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "Nem vagy jogosult ehhez: su %s\n"
+
+#, fuzzy, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "Nincs 'root' jelszó bejegyzés"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: terminálból kell futnia\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: hiba: %d\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: nem tudom átnevezni %s könyvtárat erre: %s\n"
+
+#, fuzzy, c-format
+msgid "Cannot execute %s\n"
+msgstr "%s nem futtatható"
+
+msgid "No password file"
+msgstr "Nincs jelszófájl"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "Nincs 'root' jelszó bejegyzés"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Üsd le a control-d a szokásos indítás továbblépéséhez\n"
+"(vagy add meg a root jelszót a rendszer karbantartásához):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Belépés a rendszerkarbantartó módba"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: nem tudom létrehozni az új defaults fájlt\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: nem tudom létrehozni az új defaults fájlt\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: nem tudom megnyitni az új defaults fájlt\n"
+
+#, fuzzy, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: %d. sor: chown sikertelen\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: %s könyvtár nem hozható létre\n"
+
+#, fuzzy, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: átnevezés: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: a(z) \"%s\" csoport egy NIS csoport.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: túl sok csoport van megadva (max %d).\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr "Használat: %s [bemenet]\n"
+
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr ""
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr ""
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr ""
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr ""
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: érvénytelen alapkönyvtár: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: érvénytelen megjegyzés: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: érvénytelen saját könyvtár: \"%s\"\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: a -e árnyék jelszavakat vár\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: a -f árnyék jelszavakat vár\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: érvénytelen mező: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: érvénytelen parancsértelmező: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: figyelem: %s tulajdonosa nem %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rewrite password file\n"
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s: nem tudom újraírni a jelszófájlt\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s: %s könyvtár nem hozható létre\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: a jogosultságok eldobása meghiúsult (%s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error updating files\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: hiba a fájlok frissítésekor\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: %s könyvtár nem hozható létre\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: érvénytelen saját könyvtár: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "a postafiók tulajdonosának váltása sikertelen"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: %s könyvtár nem hozható létre\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: %d. sor: chown sikertelen\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: %d. sor: chown sikertelen\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "Postafiókfájl létrehozása"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"A \"mail\" csoport nem található. A felhasználó postafiókfájlja 0600 "
+"móddalkerül létrehozásra.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "A postafiókfájl jogosultságainak beállítása"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: %s felhasználó létezik\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: %s csoport létezik - ha e felhasználót e csoporthoz akarod adni, "
+"használd a -g-t.\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: %s létrehozása sikertelen\n"
+
+#, fuzzy, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %u nem egyedi\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: %s könyvtár nem hozható létre\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: %s létrehozása sikertelen\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: %s létrehozása sikertelen\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: %s létrehozása sikertelen\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: figyelem: a saját könyvtár már létezik.\n"
+"Nem másolok semmit bele a vázkönyvtárból.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr "%s: `%s' felhasználó nem módosítható NIS kliensen.\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: Nem tudom %s csoportot törölni, ami egy másik felhasználó elsődleges "
+"csoportja.\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "%s: nem tudom átnevezni %s könyvtárat erre: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: érvénytelen saját könyvtár: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: figyelem: nem törölhető: "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s tulajdonosa nem %s, nem törlöm\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: a jogosultságok eldobása meghiúsult (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: nem tudom átnevezni %s könyvtárat erre: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: nem tudom átnevezni %s könyvtárat erre: %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: %s egy NIS felhasználó\n"
+
+#, fuzzy, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: érvénytelen saját könyvtár: \"%s\"\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s: nem törlöm %s könyvtárat (%s saját könyvtára)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: hiba %s könyvtár törlésekor\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: hiba %s könyvtár törlésekor\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr ""
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr ""
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr ""
+
+msgid " -L, --lock lock the user account\n"
+msgstr ""
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr ""
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr ""
+
+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"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: %s felhasználó létezik\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: érvénytelen dátum: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: érvénytelen dátum: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: no options\n"
+msgstr "%s: %s fájl nem nyitható meg\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: -e és -f árnyék jelszavakat vár\n"
+
+#, fuzzy, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "A tag már létezik\n"
+
+#, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: %s könyvtár létezik\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: %s könyvtár nem hozható létre\n"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: figyelem: nem sikerült a régi %s saját könyvtár teljes törlése"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: nem tudom átnevezni %s könyvtárat erre: %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: figyelem: %s tulajdonosa nem %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "a postafiók tulajdonosának váltása sikertelen"
+
+msgid "failed to rename mailbox"
+msgstr "a postafiók átnevezése sikertelen"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s: a jogosultságok eldobása meghiúsult (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s: a jogosultságok eldobása meghiúsult (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s: a jogosultságok eldobása meghiúsult (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s: a jogosultságok eldobása meghiúsult (%s)\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid " -g, --group edit group database\n"
+msgstr ""
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr ""
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: a jogosultságok eldobása meghiúsult (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s is változatlan\n"
+
+#, fuzzy
+msgid "failed to create scratch directory"
+msgstr "a postafiók átnevezése sikertelen"
+
+#, fuzzy
+msgid "failed to drop privileges"
+msgstr "%s: a jogosultságok eldobása meghiúsult (%s)\n"
+
+#, fuzzy
+msgid "Couldn't get file context"
+msgstr "Nem tudtam zárolni a fájlt"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+#, fuzzy
+msgid "failed to gain privileges"
+msgstr "%s: a jogosultságok eldobása meghiúsult (%s)\n"
+
+msgid "Couldn't lock file"
+msgstr "Nem tudtam zárolni a fájlt"
+
+msgid "Couldn't make backup"
+msgstr "Nem tudtam biztonsági másolatot készíteni"
+
+#, fuzzy, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr "%s: %s nem található a /etc/passwd-ben\n"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+#, fuzzy
+msgid "failed to open scratch file"
+msgstr "Csoport fájl megnyitása sikertelen\n"
+
+#, fuzzy
+msgid "failed to unlink scratch file"
+msgstr "%s: túl hosszú mezők\n"
+
+#, fuzzy
+msgid "failed to stat edited file"
+msgstr "a postafiók átnevezése sikertelen"
+
+#, fuzzy
+msgid "failed to allocate memory"
+msgstr "a postafiók tulajdonosának váltása sikertelen"
+
+#, fuzzy
+msgid "failed to create backup file"
+msgstr "a postafiók átnevezése sikertelen"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: nem tudom visszaállítani %s-t: %s (módosításaid itt vannak: %s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: érvénytelen alapkönyvtár: \"%s\"\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Használat: %s [bemenet]\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "Sikertelen malloc(%d)\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: chage [options] [LOGIN]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -d, --lastday LAST_DAY set last password change to LAST_DAY\n"
+#~| " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -l, --list show account aging information\n"
+#~| " -m, --mindays MIN_DAYS set minimum number of days before "
+#~| "password\n"
+#~| " change to MIN_DAYS\n"
+#~| " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~| "password\n"
+#~| " change to MAX_DAYS\n"
+#~| " -W, --warndays WARN_DAYS set expiration warning days to "
+#~| "WARN_DAYS\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Használat: chage [kapcsolók] [NÉV]\n"
+#~ "\n"
+#~ "Kapcsolók:\n"
+#~ " -d, --lastday UTOLSÓ_NAP utolsó jelszómódosítás beállítása az\n"
+#~ " UTOLSÓ_NAPRA\n"
+#~ " -E, --expiredate LEJÁRATI_DÁTUM fiók lejárati dátumának beállítása a\n"
+#~ " LEJÁRATI_DÁTUMRA\n"
+#~ " -h, --help ezen súgószöveg megjelenítése és "
+#~ "kilépés\n"
+#~ " -I, --inactive INAKTÍV a jelszó inaktívvá tétele lejárat "
+#~ "után\n"
+#~ " az INAKTÍV értékre\n"
+#~ " -l, --list fiókelévülési információk "
+#~ "megjelenítése\n"
+#~ " -m, --mindays MIN_NAPOK napok minimális számának beállítása\n"
+#~ " jelszómódosítás előtt a MIN_NAPOK "
+#~ "értékre\n"
+#~ " -M, --maxdays MAX_NAPOK napok maximális számának beállítása\n"
+#~ " jelszómódosítás előtt a MAX_NAPOK "
+#~ "értékre\n"
+#~ " -W, --warndays FIGYELM_NAPOK a lejáratra figyelmeztetés napjai\n"
+#~ " számának beállítása FIGYELM_NAPOK-ra\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: PAM hitelesítési hiba\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "Használat: %s [-f TELJES_Név] [-r szobaszám] [-w munka_tel]\n"
+#~ "\t[-h otthoni_tel] [-o egyéb] [felhasználónév]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr ""
+#~ "Használat: %s [-f TELJES_Név] [-r szobaszám] [-w munka_tel] \t[-h "
+#~ "otthoni_tel]\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Használat: chpasswd [kapcsolók]\n"
+#~ "\n"
+#~ "Kapcsolók:\n"
+#~ " -e, --encrypted a megadott jelszavak titkosítottak\n"
+#~ " -h, --help ezen súgó megjelenítése és kilépés\n"
+#~ " -m, --md5 MD5 titkosítás használata DES helyett,ha "
+#~ "a\n"
+#~ " megadott jelszavak nem titkosítottak\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Használat: chsh [kapcsolók] NÉV\n"
+#~ "\n"
+#~ "Kapcsolók:\n"
+#~ " -h, --help kiírja e súgót és kilép\n"
+#~ " -s, --shell új bejelentkező héj a felhasználói "
+#~ "fiókhoz\n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "Használat: expiry {-f|-c}\n"
+
+#, fuzzy
+#~| msgid "%s: cannot open file %s\n"
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "%s: %s fájl nem nyitható meg\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "Használat: groupdel csoport\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "Használat: %s [-r] [-s] [csoport [gshadow]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "Használat: %s [-r] [-s] [csoport]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: -s és -r inkompatibilisek\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "Használat: groupdel csoport\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "Használat: groupdel csoport\n"
+
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Használat: lastlog [kapcsolók]\n"
+#~ "\n"
+#~ "Kapcsolók:\n"
+#~ " -b, --before NAP csak a NAPOK számánál régebbi lastlog\n"
+#~ " rekordok megjelenítése\n"
+#~ " -h, --help ezen súgószöveg megjelenítése és kilépés\n"
+#~ " -t, --time NAP csak a megadott NAPNÁL újabb lastlog\n"
+#~ " rekordok kiírása\n"
+#~ " -u, --user NÉV a megadott NEVŰ felhasználó lastlog\n"
+#~ " rekordjainak kiírása\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: passwd [options] [LOGIN]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -a, --all report password status on all accounts\n"
+#~| " -d, --delete delete the password for the named "
+#~| "account\n"
+#~| " -e, --expire force expire the password for the named "
+#~| "account\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -k, --keep-tokens change password only if expired\n"
+#~| " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -l, --lock lock the named account\n"
+#~| " -n, --mindays MIN_DAYS set minimum number of days before "
+#~| "password\n"
+#~| " change to MIN_DAYS\n"
+#~| " -q, --quiet quiet mode\n"
+#~| " -r, --repository REPOSITORY change password in REPOSITORY "
+#~| "repository\n"
+#~| " -S, --status report password status on the named "
+#~| "account\n"
+#~| " -u, --unlock unlock the named account\n"
+#~| " -w, --warndays WARN_DAYS set expiration warning days to "
+#~| "WARN_DAYS\n"
+#~| " -x, --maxdays MAX_DAYS set maximim number of days before "
+#~| "password\n"
+#~| " change to MAX_DAYS\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Használat: passwd [kapcsolók] [NÉV]\n"
+#~ "\n"
+#~ "Kapcsolók:\n"
+#~ " -a, --all jelszóállapot jelentés az összes fiókon\n"
+#~ " -d, --delete a megadott fiók jelszavának törlése\n"
+#~ " -e, --expire a megadott fiók jelszava lejáratának\n"
+#~ " kényszerítése\n"
+#~ " -h, --help kiírja e súgót és kilép\n"
+#~ " -k, --keep-tokens a jelszót csak annak lejáratakor "
+#~ "módosítsa\n"
+#~ " -i, --inactive INAKTÍV a jelszó inaktívvá tétele lejárat után\n"
+#~ " az INAKTÍV értékre\n"
+#~ " -l, --lock a megadott fiók zárolása\n"
+#~ " -n, --mindays MIN_NAPOK napok minimális számának beállítása\n"
+#~ " jelszómódosítás előtt a MIN_NAPOK "
+#~ "értékre\n"
+#~ " -q, --quiet csendes mód\n"
+#~ " -r, --repository LERAKAT jelszó módosítása a LERAKAT lerakatban\n"
+#~ " -S, --status jelentés a megadott fiók "
+#~ "jelszóállapotáról\n"
+#~ " -u, --unlock a megadott fiók zárolásának feloldása\n"
+#~ " -w, --warndays FIGYELEM_NAPOK a lejáratra figyelmeztetés napjai "
+#~ "számának\n"
+#~ " -x, --maxdays MAX_NAPOK napok maximális számának beállítása\n"
+#~ " jelszómódosítás előtt a MAX_NAPOK "
+#~ "értékre\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr "Használat: %s [-q] [-r] [-s] [jelszó [árnyék]]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr "Használat: %s [-q] [-r] [-s] [jelszó [árnyék]]\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "Használat: id\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "Használat: id\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "Ismeretlen azonosító: %s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "Nincs héj\n"
+
+#~ msgid ""
+#~ "Usage: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force removal of files,\n"
+#~ " even if not owned by user\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -r, --remove remove home directory and mail spool\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Használat: userdel [kapcsolók] NÉV\n"
+#~ "\n"
+#~ "Kapcsolók:\n"
+#~ " -f, --force fájlok eltávolításának kényszerítése, "
+#~ "még\n"
+#~ " ha nem a felhasználó a tulajdonos is\n"
+#~ " -h, --help ezen súgószöveg megjelenítése és kilépés\n"
+#~ " -r, --remove saját könyvtár és levelezési sor "
+#~ "eltávolítása\n"
+#~ "\n"
+
+# FIXME
+#, fuzzy
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Használat: usermod [kapcsolók] NÉV\n"
+#~ "\n"
+#~ "Kapcsolók:\n"
+#~ " -a, --append felhasználó adása a kiegészítő "
+#~ "CSOPORTHOZ\n"
+#~ " (csak -G-vel használd)\n"
+#~ " -c, --comment MEGJEGYZÉS a GECOS mező új értéke\n"
+#~ " -d, --home SAJÁT_KVT új bejelentkezési könyvtár az új\n"
+#~ " felhasználói\n"
+#~ " -e, --expiredate LEJÁRATI_DÁTUM fiók lejárati dátumának beállítása a\n"
+#~ " LEJÁRATI_DÁTUMRA\n"
+#~ " -f, --inactive INAKTÍV a jelszó inaktívvá tétele lejárat "
+#~ "után\n"
+#~ " az INAKTÍV értékre\n"
+#~ " -g, --gid CSOPORT a CSOPORT használatának kényszerítése\n"
+#~ " az új felhasználói fiókhoz\n"
+#~ " -G, --groups CSOPORTOK kiegészítő csoportok felsorolása az "
+#~ "új\n"
+#~ " felhasználói fiókhoz\n"
+#~ " -h, --help ezen súgószöveg megjelenítése és "
+#~ "kilépés\n"
+#~ " -l, --login NÉV a bejelentkezési név új értéke\n"
+#~ " -L, --lock a megadott fiók zárolása\n"
+#~ " -m, --move-home a saját könyvtár tartalmának "
+#~ "áthelyezése az\n"
+#~ " új helyre (csak a -d kapcsolóval "
+#~ "használd)\n"
+#~ " -o, --non-unique engedélyezi a csoport létrehozását "
+#~ "többször\n"
+#~ " szereplő (nem egyedi) GID értékkel\n"
+#~ " -p, --password JELSZÓ az új jelszó titkosított\n"
+#~ " -s, --shell PARANCSÉRTELMEZŐ a PARANCSÉRTELMEZŐ használata a\n"
+#~ " passwd-ben megadott alapértelmezett "
+#~ "helyett\n"
+#~ " -u, --uid UID új UID a felhasználó fiókjához\n"
+#~ " -U, --unlock a felhasználói fiók zárolásának "
+#~ "feloldása\n"
+#~ "\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s: nincs kapcsoló megadva\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: vipw [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -g, --group edit group database\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -p, --passwd edit passwd database\n"
+#~| " -q, --quiet quiet mode\n"
+#~| " -s, --shadow edit shadow or gshadow database\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group edit group database\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -p, --passwd edit passwd database\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow edit shadow or gshadow database\n"
+#~ " -u, --user which user's tcb shadow file to edit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Használat: vipw [kapcsolók]\n"
+#~ "\n"
+#~ "Kapcsolók:\n"
+#~ " -g, --group csoportadatbázis szerkesztése\n"
+#~ " -h, --help ezen súgószöveg megjelenítése\n"
+#~ " -p, --passwd a passwd adatbázis szerkesztése\n"
+#~ " -q, --quiet csendes mód\n"
+#~ " -s, --shadow a shadow vagy gshadow adatbázis "
+#~ "szerkesztése\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Használat: %s [bemenet]\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s: %s létrehozása sikertelen\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s: chown %s sikertelen\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -a, --all display faillog records for all users\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -l, --lock-time SEC after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| " -m, --maximum MAX set maximum failed login counters to "
+#~| "MAX\n"
+#~| " -r, --reset reset the counters of login failures\n"
+#~| " -t, --time DAYS display faillog records more recent than "
+#~| "DAYS\n"
+#~| " -u, --user LOGIN display faillog record or maintains "
+#~| "failure\n"
+#~| " counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| " options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all display faillog records for all users\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -l, --lock-time SEC after failed login lock account to SEC "
+#~ "seconds\n"
+#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
+#~ " -r, --reset reset the counters of login failures\n"
+#~ " -t, --time DAYS display faillog records more recent than "
+#~ "DAYS\n"
+#~ " -u, --user LOGIN display faillog record or maintains "
+#~ "failure\n"
+#~ " counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ " options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Használat: faillog [kapcsolók]\n"
+#~ "\n"
+#~ "Kapcsolók:\n"
+#~ " -a, --all az összes felhasználó faillog "
+#~ "bejegyzésének\n"
+#~ " megjelenítése\n"
+#~ " -h, --help ezen súgószöveg megjelenítése és kilépés\n"
+#~ " -l, --lock-time MP a sikertelen bejelentkezés után a fiók\n"
+#~ " zárolása MP másodpercre\n"
+#~ " -m, --maximum MAX a sikertelen bejelentkezések "
+#~ "számlálójának\n"
+#~ " beállítása a MAX értékre\n"
+#~ " -r, --reset a bejelentkezési hibák számának "
+#~ "visszaállítása\n"
+#~ " -t, --time NAPOK az adott NAPOK számánál régebbi faillog\n"
+#~ " rekordok megjelenítése\n"
+#~ " -u, --user NÉV faillog rekord megjelenítése, vagy csak\n"
+#~ " (ha a -r, -m vagy -l kapcsolókkal "
+#~ "használja) a\n"
+#~ " NÉV bejelentkezési nevű felhasználó "
+#~ "számára\n"
+#~ " karbantartja a hibaszámlálókat és "
+#~ "értékeket.\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force exit with success status if the\n"
+#~ " specified group already exists\n"
+#~ " -g, --gid GID use GID for the new group\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique allow create group with duplicate\n"
+#~ " (non-unique) GID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new group\n"
+#~ " -r, --system create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Használat: groupadd [kapcsolók] CSOPORT\n"
+#~ "\n"
+#~ "Kapcsolók:\n"
+#~ " -f, --force kilépés kényszerítése sikeres "
+#~ "állapottal,\n"
+#~ " ha a megadott csoport már létezik\n"
+#~ " -g, --gid GID a GID használata az új csoporthoz\n"
+#~ " -h, --help kiírja e súgót és kilép\n"
+#~ " -K, --key KULCS=ÉRTÉK felülbírálja az /etc/login.defs\n"
+#~ " alapértelmezéseit\n"
+#~ " -o, --non-unique engedélyezi a csoport létrehozását "
+#~ "többször\n"
+#~ " szereplő (nem egyedi) GID értékkel\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --gid GID force use new GID by GROUP\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Használat: groupmod [kapcsolók] CSOPORT\n"
+#~ "\n"
+#~ "Kapcsolók:\n"
+#~ " -g, --gid GID a GID használata az új csoporthoz\n"
+#~ " -h, --help kiírja e súgót és kilép\n"
+#~ " -n, --new-name Új_CSOPORT a CSOPORTot az ÚJ_CSOPORT névre bírja\n"
+#~ " -o, --non-unique engedélyezi a CSOPORT létrehozását "
+#~ "többször\n"
+#~ " szereplő (nem egyedi) GID értékkel\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~ " home directory\n"
+#~ " -c, --comment COMMENT set the GECOS field for the new user "
+#~ "account\n"
+#~ " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~ " -D, --defaults print or save modified default useradd\n"
+#~ " configuration\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP for the new user account\n"
+#~ " -G, --groups GROUPS list of supplementary groups for the new\n"
+#~ " user account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -l, --no-log-init do not add the user to the lastlog and\n"
+#~ " faillog databases\n"
+#~ " -m, --create-home create home directory for the new user\n"
+#~ " account\n"
+#~ " -M, --no-create-home do not create user's home directory\n"
+#~ " (overrides /etc/login.defs)\n"
+#~ " -N, --no-user-group do not create a group with the same name "
+#~ "as\n"
+#~ " the user\n"
+#~ " -o, --non-unique allow create user with duplicate\n"
+#~ " (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new user\n"
+#~ " account\n"
+#~ " -r, --system create a system account\n"
+#~ " -s, --shell SHELL the login shell for the new user account\n"
+#~ " -u, --uid UID force use the UID for the new user "
+#~ "account\n"
+#~ " -U, --user-group create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Használat: useradd [kapcsolók] NÉV\n"
+#~ "\n"
+#~ "Kapcsolók:\n"
+#~ " -b, --base-dir ALAP_KVT az új felhasználói fiók saját\n"
+#~ " könyvtárának alapkönyvtára\n"
+#~ " -c, --comment MEGJEGYZÉS az új felhasználói fiók GECOS "
+#~ "mezőjének\n"
+#~ " beállítása\n"
+#~ " -d, --home-dir SAJÁT_KVT az új felhasználói fiók saját "
+#~ "könyvtára\n"
+#~ " -D, --defaults az alapértelmezett useradd "
+#~ "beállítások\n"
+#~ " kiírása vagy mentése\n"
+#~ " -e, --expiredate LEJÁRATI_DÁTUM a fiók lejárati dátumának beállítása\n"
+#~ " -f, --inactive INAKTÍV a jelszó inaktívvá tétele lejárat "
+#~ "után\n"
+#~ " az INAKTÍV értékre\n"
+#~ " -g, --gid CSOPORT a CSOPORT használatának kényszerítése\n"
+#~ " az új felhasználói fiókhoz\n"
+#~ " -G, --groups CSOPORTOK kiegészítő csoportok felsorolása az "
+#~ "új\n"
+#~ " felhasználói fiókhoz\n"
+#~ " -h, --help ezen súgószöveg megjelenítése és "
+#~ "kilépés\n"
+#~ " -k, --skel VÁZ_KVT alternatív vázkönyvtár megadása\n"
+#~ " -K, --key KULCS=ÉRTÉK felülbírálja az /etc/login.defs\n"
+#~ " alapértelmezéseit\n"
+#~ " -m, --create-home az új felhasználói fiók saját\n"
+#~ " könyvtárának létrehozása\n"
+#~ " -o, --non-unique engedélyezi a csoport létrehozását "
+#~ "többször\n"
+#~ " szereplő (nem egyedi) GID értékkel\n"
+#~ " -p, --password JELSZÓ titkosított jelszó használata az új\n"
+#~ " felhasználói fiókhoz\n"
+#~ " -s, --shell PARANCSÉRTELMEZŐ a bejelentkezési parancsértelmező az\n"
+#~ " új felhasználói fiókhoz\n"
+#~ " -u, --uid UID az UID használatának kényszerítése az "
+#~ "új\n"
+#~ " felhasználói fiókhoz\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Jelszó lejárata beállítva."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: nem tudom zárolni a jelszófájlt\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: a jelszófájl nem nyitható meg\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: az árnyék jelszófájl zárolása sikertelen\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: az árnyék jelszófájl megnyitása sikertelen\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: az árnyék jelszófájl újraírása sikertelen\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: a jelszófájl újraírása sikertelen\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: az árnyék jelszófájl frissítése sikertelen\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tTELJES Név: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tSzobaszám: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tMunkahelyi telefon: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tOtthoni telefon: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "Nem zárolható a jelszófájl; próbáld később\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Hiba a jelszó bejegyzés frissítésekor\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Nem tudom megtenni a jelszófájl módosításokat.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Nem tudom feloldani a jelszófájl zárolását.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: nem tudom lezárni a 'group' fájlt\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: nem tudom lezárni a 'gshadow' fájlt\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: nem tudom megnyitni a 'gshadow' fájlt\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: hiba az árnyék fájl frissítésekor\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: Hiba a csoport bejegyzés frissítésekor\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: %d.: ismeretlen %s csoport\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: %d. sor: nem tudom frissíteni a bejegyzést\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: nem tudom zárolni az árnyék fájlt\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: hiba az árnyék fájl frissítésekor\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: hiba a jelszófájl frissítésekor\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: %d. sor: ismeretlen %s felhasználó\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: %d. sor: a jelszó bejegyzés nem frissíthető\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: ismeretlen felhasználó\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Ismeretlen felhasználó: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Használat: %s [-r|-R] group\n"
+
+#~ msgid " %s [-a user] group\n"
+#~ msgstr " %s [-a felhasználó] csoport\n"
+
+#~ msgid " %s [-d user] group\n"
+#~ msgstr " %s [-d felhasználó] csoport\n"
+
+#~ msgid " %s [-A user,...] [-M user,...] group\n"
+#~ msgstr " %s [-A felhasználó,...] [-M felhasználó,...] csoport\n"
+
+#~ msgid " %s [-M user,...] group\n"
+#~ msgstr " %s [-M felhasználó,...] csoport\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: nem szerezhető zár\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: nem szerezhető árnyékzár\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: nem tudom újraírni az árnyék fájlt\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: nem tudom feloldani a fájlt\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: nem tudom frissíteni a bejegyzést\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: nem tudom frissíteni az árnyék bejegyzést\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "ismeretlen csoport: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: nem tudom megnyitni a fájlt\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: nem tudom megnyitni a 'gshadow' fájlt\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Ki vagy?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: ismeretlen %s tag\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: hiba az új csoport bejegyzés hozzáadásakor\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: nem tudom újraírni a csoport fájlt\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: nem tudom újraírni az árnyék csoport fájlt\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: nem tudom zárolni a csoport fájlt\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: nem tudom megnyitni a csoport fájlt\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: nem tudom zárolni az árnyék csoport fájlt\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: nem tudom megnyitni az árnyék csoport fájlt\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: %u GID nem egyedi\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: nem tudom törölni a csoport bejegyzést\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: nem tudom törölni az árnyék csoport bejegyzést\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: nem tudom törölni a felhasználó elsődleges csoportját\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Az eltávolítandó tag nem található\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr ""
+#~ "Használat: groupmems -a felhasználónév | -d felhasználónév | -D | -l [-g "
+#~ "csoportnév]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Csak a root adhat tagokat különböző csoportokhoz\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "Csoport hozzáférés kell\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "Nem a jelen csoport elsődleges tulajdonosa\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "PAM hitelesítési hiba ehhez:\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "Csoport fájl zárolása sikertelen\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "Csoport fájl bezárása sikertelen\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s nincs a /etc/group-ban\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u nem egyedi GID\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s nem egyedi név\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: nem tudom újraírni a jelszófájlt\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: nem tudom zárolni a jelszófájlt\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: nem tudom megnyitni a jelszófájlt\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: nem tudom frissíteni %s árnyék bejegyzését\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: nem tudom frissíteni %s csoport bejegyzését\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: nem tudom zárolni az árnyék csoport fájlt\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: nem tudom megnyitni az árnyék csoport fájlt\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: nem tudom törölni %s árnyék csoportot\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: nem tudom frissíteni az árnyék csoport fájlt\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: nem tudom törölni az árnyék csoport fájlt\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "ismeretlen UID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "ismeretlen GID: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: %s csoport nem létezik\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: %s felhasználó nem létezik\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: érvénytelen '%s' felhasználónév\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: nem tudom zárolni a /etc/passwd fájlt.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: nem tudom zárolni a /etc/passwd fájlt.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: nem tudom zárolni a /etc/passwd fájlt.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: nem tudom zárolni a /etc/passwd fájlt.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: fájlok megnyitása sikertelen\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: nem tudom frissíteni %s jelszó bejegyzését\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: nem tudom lezárni a passwd fájlt\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: nem tudom megnyitni a passwd fájlt\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: nem tudom törölni %s árnyék bejegyzését\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: nem tudom frissíteni a \"passwd\" fájlt\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: nem tudom frissíteni %s felhasználó bejegyzését\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: nem tudom törülni az árnyék jelszófájlt\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: ismeretlen %s GID\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: ismeretlen %s csoport\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: elfogyott a memória az update_gshadow során\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: nem tudom újraírni az árnyék jelszófájlt\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: nem tudom zárolni az árnyék jelszófájlt\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: nem tudom megnyitni az árnyék jelszófájlt\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: hiba a csoportfájl zárolásakor\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: hiba a csoportfájl megnyitásakor\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: hiba az árnyék csoportfájl zárolásakor\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: hiba az árnyék csoportfájl megnyitásakor\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: hiba az új jelszó bejegyzés hozzáadásakor\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: hiba az új árnyék jelszó bejegyzés hozzáadásakor\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr ""
+#~ "%s: figyelem: a CREATE_HOME nem támogatott, használd a -m-et helyette.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: Hiba a csoport bejegyzés frissítésekor\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: Hiba a csoport bejegyzés frissítésekor\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: nem tudom megnyitni a csoport fájlt\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: nem tudom megnyitni az árnyék csoport fájlt\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: hiba a jelszó bejegyzés törlésekor\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: hiba az árnyék jelszó bejegyzés törlésekor\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: hiba az új csoport bejegyzés hozzáadásakor\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu nem egyedi\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: hiba a jelszó bejegyzés cseréjekor\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: hiba a jelszó bejegyzés törlésekor\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: hiba az árnyék jelszó bejegyzés törlésekor\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: nem szerezhető be egyedi csoportazonosító\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " erre: `%.100s' erről: `%.200s'"
+
+#~ msgid " on '%.100s'"
+#~ msgstr " erre: `%.100s'"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: %d. sor: UID létrehozása sikertelen\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: %s név nem egyedi\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ " -h, --help\t\tdisplay this help message and exit\n"
+#~ " -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Használat: chgpasswd [kapcsolók]\n"
+#~ "\n"
+#~ "Kapcsolók:\n"
+#~ " -e, --encrypted\ta megadott jelszavak titkosítottak\n"
+#~ " -h, --help\t\tezen súgó megjelenítése és kilépés\n"
+#~ " -m, --md5\t\tMD5 titkosítás használata DES helyett,ha a megadott\n"
+#~ "\t\t\tjelszavak nem titkosítottak\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Nincs jelszófájl\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Bocs.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Bocsi, %s jelszava még nem változtatható...\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Bocs."
diff --git a/po/id.gmo b/po/id.gmo
new file mode 100644
index 0000000..1d52315
--- /dev/null
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
new file mode 100644
index 0000000..521e142
--- /dev/null
+++ b/po/id.po
@@ -0,0 +1,3632 @@
+# Terjemahan Bahasa Indonesia: shadow
+# Parlin Imanuel Toh <parlin@ui.edu>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.15\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2007-11-25 20:58+0100\n"
+"Last-Translator: Parlin Imanuel Toh <parlin_i@yahoo.com>\n"
+"Language-Team: Debian Indonesia <debid@yahoogroups.com>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Tidak dapat mengalokasikan ruang untuk informasi konfigurasi.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"Kesalahan konfigurasi - item tidak dikenal '%s' (beritahu administrator)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr ""
+
+msgid "Password: "
+msgstr "Kata sandi:"
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Kata sandi dari %s:"
+
+#, fuzzy
+#| msgid "Cannot open the password file.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "Tidak dapat membuka berkas kata sandi.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr ""
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not set sename for %s\n"
+msgstr "Tidak dapat mengalokasikan ruang untuk informasi konfigurasi.\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "Mengubah informasi umur akun untuk %s\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "%s: Tidak dapat menentukan nama pengguna anda.\n"
+
+#, fuzzy, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "%s: baris %d: tak menemukan pengguna %s\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: kehabisan memori\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: tidak dapat memperbaharui berkas %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: direktori rumah `%s' tak sah\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: tak dapat mengubah nama direktori %s menjadi %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: tak dapat membuat direktori %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: perhatian: tak dapat menghapus "
+
+#, fuzzy, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: perhatian: tak dapat menghapus "
+
+#, fuzzy, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: ubah nama: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: tak dapat mengubah nama direktori %s menjadi %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: tak dapat mengubah nama direktori %s menjadi %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: perhatian: tak dapat menghapus "
+
+#, fuzzy, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: tak dapat membuat direktori %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: perhatian: tak dapat menghapus "
+
+#, fuzzy, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: tidak dapat memperbaharui berkas %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: tak dapat memperbaharui berkas shadow\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: ubah nama: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: tidak dapat membuka berkas %s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Peringatan: grup tidak dikenal %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Peringatan: terlalu banyak grup\n"
+
+msgid "Your password has expired."
+msgstr "Kata sandi anda telah kadaluarsa."
+
+msgid "Your password is inactive."
+msgstr "Kata sandi anda tidak aktif."
+
+msgid "Your login has expired."
+msgstr "Login anda telah kadaluarsa."
+
+msgid " Contact the system administrator."
+msgstr " Hubungi administrator sistem."
+
+msgid " Choose a new password."
+msgstr " Pilih sebuah kata sandi baru."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Kata sandi anda akan kadaluarsa dalam %ld hari.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Kata sandi anda akan kadaluarsa besok."
+
+msgid "Your password will expire today."
+msgstr "Kata sandi anda akan kadaluarsa hari ini."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Tidak dapat mengubah tts %s"
+
+#, fuzzy, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: ruas terlalu panjang\n"
+
+#, fuzzy, c-format
+msgid "%s: "
+msgstr "%s: %s\n"
+
+msgid ": "
+msgstr ""
+
+msgid "Environment overflow\n"
+msgstr "Lingkungan overflow\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Anda tidak boleh mengubah $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d sejak login terakhir.\n"
+"Terakhir %s pada %s.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "gagal mengganti pemilik kotak-surat"
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr "%s: tidak bisa mendapatkan UID yang unik\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: tak mampu mendapatkan GID yang unik\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: tak mampu mendapatkan GID yang unik\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: tak dapat membuat %s\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: tak dapat membuat %s\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr "%s: tidak bisa mendapatkan UID yang unik\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: tidak bisa mendapatkan UID yang unik\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: tidak bisa mendapatkan UID yang unik\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: Otentikasi PAM gagal\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: ruas `%s' tak sah\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Could not seteuid to %d\n"
+msgstr "Tidak dapat mengalokasikan ruang untuk informasi konfigurasi.\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not set caps\n"
+msgstr "Tidak dapat mengalokasikan ruang untuk informasi konfigurasi.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't open file\n"
+msgid "%s: snprintf failed!\n"
+msgstr "%s: tidak dapat membuka berkas\n"
+
+#, fuzzy, c-format
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: baris %d: chown gagal\n"
+
+#, fuzzy, c-format
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: baris %d: chown gagal\n"
+
+msgid "Too many logins.\n"
+msgstr "Terlalu banyak login.\n"
+
+msgid "You have new mail."
+msgstr "Anda memiliki surat baru."
+
+msgid "No mail."
+msgstr "Tidak ada surat."
+
+msgid "You have mail."
+msgstr "Anda memiliki surat."
+
+msgid "no change"
+msgstr "tak ada perubahan"
+
+msgid "a palindrome"
+msgstr "sebuah palindrom"
+
+msgid "case changes only"
+msgstr "hanya perubahan huruf besar/kecil"
+
+msgid "too similar"
+msgstr "terlalu mirip"
+
+msgid "too simple"
+msgstr "terlalu sederhana"
+
+msgid "rotated"
+msgstr "pernah dipakai"
+
+msgid "too short"
+msgstr "terlalu pendek"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Kata sandi buruk: %s."
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() gagal, kesalahan nomor %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+msgid "passwd: password unchanged\n"
+msgstr "Password telah diubah."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: kata sandi diperbaharui dengan sukses\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: repositori %s tidak didukung\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start: kesalahan %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd: pam_start() gagal, kesalahan nomor %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Kata sandi tidak tepat untuk %s\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr ""
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: gagal membuang hak (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: telepon rumah tidak sah: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: tak dapat membuat direktori %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: tak dapat membuat direktori %s\n"
+
+#, fuzzy, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: tak dapat membuat direktori %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Tidak dapat cd ke \"%s\"\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Tidak terdapat direktori, masuk dengan HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Tidak dapat menjalankan %s"
+
+#, fuzzy, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Direktori root tidak sah \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Tidak dapat mengubah direktori root ke \"%s\"\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: pengguna %s saat ini sedang login\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: pengguna %s saat ini sedang login\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Tak dapat menentukan nama tty anda."
+
+#, fuzzy
+msgid "No"
+msgstr "Tidak\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Penggunaan: %s [input]\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr ""
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Masukkan nilai baru atau tekan ENTER untuk nilai bawaan"
+
+msgid "Minimum Password Age"
+msgstr "Umur Kata Sandi Minimal"
+
+msgid "Maximum Password Age"
+msgstr "Umur Kata Sandi Maksimal"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Penggantian Kata Sandi Terakhir (TTTT-MM-HH)"
+
+msgid "Password Expiration Warning"
+msgstr "Peringatan Kadaluarsanya Kata Sandi"
+
+msgid "Password Inactive"
+msgstr "Kata Sandi Tak-aktif"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Waktu Kadaluarsa Akun (TTTT-MM-HH)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Penggantian kata sandi terakhir\t\t\t\t\t: "
+
+msgid "never"
+msgstr "tak pernah"
+
+msgid "password must be changed"
+msgstr "password mesti diubah"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Kata sandi kadaluarsa\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Kata sandi tak aktif\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Akun kadaluarsa\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Jumlah hari minimum antara penggantian password\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Jumlah hari maksimum antara penggantian password\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Jumlah hari pemberian peringatan sebelum kadaluarsa\t: %ld\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: tanggal `%s' tak sah\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: argumen numerik tak sah `%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: jangan gabungkan \"l\" dengan flag lain\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: ijin ditolak.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Tidak dapat menentukan nama pengguna anda.\n"
+
+#, fuzzy, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: tidak dapat mengunci berkas-berkas, coba lagi nanti\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: tidak dapat membuka berkas %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: gagal membuat proses: %s"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: gagal membuang hak (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: tak terdapat berkas kata sandi bayangan\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: pengguna %s tak ada\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Mengubah informasi umur akun untuk %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: kesalahan saat mengubah ruas-ruas isian\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr "Penggunaan: %s [input]\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr "Nama Lengkap"
+
+#, fuzzy, c-format
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Nomor Ruangan"
+
+msgid "Work Phone"
+msgstr "Telepon Kantor"
+
+msgid "Home Phone"
+msgstr "Telepon Rumah"
+
+msgid "Other"
+msgstr "Lain-lain"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Tidak dapat mengubah ID menjadi root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: nama tidak sah: \"%s\"\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: nomor ruang tidak sah: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: telepon kantor tidak sah: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: telepon rumah tidak sah: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: \"%s\" berisi karakter-karakter ilegal\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: \"%s\" berisi karakter-karakter ilegal\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: pengguna %s tak ada\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: tidak dapat mengubah pengguna '%s' pada klien NIS.\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: `%s' merupakan master NIS untuk klien ini.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Mengubah informasi pengguna dari %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: ruas terlalu panjang\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Penggunaan: %s [input]\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr ""
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: -a hanya diperbolehkan dengan -G\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: baris %d: baris terlalu panjang\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: baris %d: kata sandi baru hilang\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: gagal membuang hak (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: grup %s tidak ada\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: baris %d: tak dapat memperbaharui entri\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: kesalahan terdeteksi, perubahan diabaikan\n"
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: pengguna %s tak ada\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: pengguna %s tak ada\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr "Login Shell"
+
+#, fuzzy, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Anda tidak boleh mengubah shell untuk %s.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Mengubah login shell untuk %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Entri tidak sah: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s merupakan shell yang tidak sah.\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: pengguna %s tak ada\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: perhatian %s tak dimiliki oleh %s\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "lastlog: argumen tak terduga: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: tak dapat membuat direktori %s\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "Login Gagal Maks. Terakhir Pada\n"
+
+#, fuzzy, c-format
+msgid " [%lus left]"
+msgstr " [%lds tersisa]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds terkunci]"
+
+#, fuzzy, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s: tak dapat membuat direktori %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: gagal membuang hak (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: tak dapat membuat direktori %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "Pengguna tak dikenal: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: tak dapat mengubah nama direktori %s menjadi %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: gagal membuang hak (%s)\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Penggunaan: %s [input]\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr ""
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr ""
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr ""
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+
+#, fuzzy
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "Kata sandi untuk %s tidak dapat diganti.\n"
+
+#, fuzzy
+msgid "The options cannot be combined.\n"
+msgstr "Kata sandi untuk %s tidak dapat diganti.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: kata sandi bayangan grup diperlukan untuk -A\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: grup %s tidak ada\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: gagal membuat proses: %s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Mengubah kata sandi untuk grup %s\n"
+
+msgid "New Password: "
+msgstr "Kata sandi baru: "
+
+msgid "Re-enter new password: "
+msgstr "Masukkan lagi kata sandi baru: "
+
+msgid "They don't match; try again"
+msgstr "Kedua kata sandi tidak identik; coba lagi"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Coba lagi nanti\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Menambahkan pengguna %s ke grup %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Mengeluarkan pengguna %s dari grup %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: pengguna %s tak ada\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Bukan sebuah tty\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Penggunaan: %s [input]\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr ""
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid " -r, --system create a system account\n"
+msgstr ""
+
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: nama grup %s tidak sah\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "nama grup `%s' tidak sah\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K memerlukan NAMA=NILAI\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: grup %s telah ada\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: Tidak dapat menentukan nama pengguna anda.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: tak dapat mengubah nama direktori %s menjadi %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: tidak dapat mengubah pengguna '%s' pada klien NIS.\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: grup %s tidak ada\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: grup `%s' merupakan grup NIS.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s merupakan master NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: pengguna %s merupakan pengguna NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: kehabisan memori saat update_group\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr "Penggunaan: %s [input]\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+
+msgid "\n"
+msgstr ""
+
+msgid "Actions:\n"
+msgstr ""
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr ""
+
+msgid " -l, --list list the members of the group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr ""
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "nama grup `%s' tidak sah\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: grup %s merupakan sebuah grup NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: pengguna %s tak dikenal\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr "Penggunaan: %s [input]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr "Penggunaan: %s [input]\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s dan -r tidak kompatible\n"
+
+msgid "invalid group file entry"
+msgstr "entri berkas grup tidak sah"
+
+#, fuzzy, c-format
+msgid "delete line '%s'? "
+msgstr "hapus baris `%s'? "
+
+msgid "duplicate group entry"
+msgstr "entri grup berulang"
+
+#, fuzzy, c-format
+msgid "invalid group name '%s'\n"
+msgstr "nama grup `%s' tidak sah\n"
+
+#, fuzzy, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "nama grup `%s' tidak sah\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "grup %s: tak ada pengguna %s\n"
+
+#, fuzzy, c-format
+msgid "delete member '%s'? "
+msgstr "hapus anggota `%s'? "
+
+#, fuzzy, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "entri tidak ditemukan pada berkas grup\n"
+
+#, fuzzy, c-format
+msgid "add group '%s' in %s? "
+msgstr "grup bayangan %s: tak ada pengguna %s\n"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "entri berkas grup bayangan tidak sah"
+
+msgid "duplicate shadow group entry"
+msgstr "entri grup bayangan berulang"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "grup bayangan %s: tak ada pengguna administratif %s\n"
+
+#, fuzzy, c-format
+msgid "delete administrative member '%s'? "
+msgstr "hapus anggota administratif `%s'? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "grup bayangan %s: tak ada pengguna %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: berkas-berkas telah diperbaharui\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: tak ada perubahan\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: tidak dapat memperbaharui berkas %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Penggunaan: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Penggunaan: id\n"
+
+msgid " groups="
+msgstr " grup="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+
+msgid "Username Port From Latest"
+msgstr "Nama pengguna Port Dari Terakhir"
+
+msgid "Username Port Latest"
+msgstr "Nama pengguna Port Terakhir"
+
+msgid "**Never logged in**"
+msgstr "**Tak pernah log in**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s: tak dapat membuat direktori %s\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s: tidak dapat memperbaharui berkas kata sandi\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 "Penggunaan: %s [-p] [nama]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h host] [-f nama]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r host\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Waktu login tidak sah"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Sistem ditutup untuk pengelolaan rutin"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Pemutusan hubungan diabaikan -- login root diperbolehkan.]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Tanpa entri utmp. Anda mesti menjalankan \"login\" dari level terendah \"sh\""
+
+#, fuzzy, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Login time out setelah %d detik.\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: Kegagalan PAM, berhenti: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s login: "
+
+msgid "login: "
+msgstr "login: "
+
+#, fuzzy, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Jumlah pengulangan maksimum terlampaui (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: penghentian diminta oleh PAM\n"
+
+msgid "Login incorrect"
+msgstr "Login tidak tepat"
+
+#, fuzzy, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "%s: baris %d: tak menemukan pengguna %s\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s login: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: gagal membuat proses: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Perhatian: login dibolehkan setelah penguncian sementara."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Login terakhir: %s pada %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Login terakhir: %.19s pada %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " dari %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"waktu login telah berlebihan\n"
+"\n"
+
+#, fuzzy
+msgid "Usage: logoutd\n"
+msgstr "Penggunaan: id\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: can't open group file\n"
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr "%s: tidak dapat membuka berkas grup\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: gagal membuang hak (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: gagal membuang hak (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: ruas terlalu panjang\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: direktori awal `%s' tak sah\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: tak dapat membuat direktori %s\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Penggunaan: newgrp [-] [grup]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Penggunaan: sg grup [[-c] perintah]\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: gagal membuang hak (%s)\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "Kata sandi lama: "
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: gagal membuat proses: %s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: pengguna %s tak ada\n"
+
+msgid "too many groups\n"
+msgstr "terlalu banyak grup\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid " -b, --badnames allow bad names\n"
+msgstr ""
+
+msgid " -r, --system create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: grup %s tidak ada\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: nama pengguna `%s' tak sah\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: nama pengguna `%s' tak sah\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: baris %d: baris tidak sah\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: tak dapat memperbaharui entri untuk pengguna %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: baris %d: tak dapat membuat GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: baris %d: tak dapat membuat GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: pengguna %s tak ada\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: baris %d: tak dapat memperbaharui kata sandi\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: baris %d: mkdir gagal\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: baris %d: chown gagal\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: baris %d: tak dapat memperbaharui entri\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: gagal membuang hak (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: tak dapat membuat %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: tidak dapat memperbaharui berkas grup\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid " -q, --quiet quiet mode\n"
+msgstr ""
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid "Old password: "
+msgstr "Kata sandi lama: "
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Masukkan password baru (minimim %d, maksimum %d karakter)\n"
+"Mohon gunakan kombinasi huruf besar, huruf kecil dan angka.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Masukkan password baru (minimim %d, maksimum %d karakter)\n"
+"Mohon gunakan kombinasi huruf besar, huruf kecil dan angka.\n"
+
+msgid "New password: "
+msgstr "kata sandi baru: "
+
+msgid "Try again."
+msgstr "Coba lagi."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Kata sandi lemah (masukkan lagi untuk tetap menggunakannya)."
+
+msgid "They don't match; try again.\n"
+msgstr "Kata sandi tidak sama; coba lagi.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Kata sandi untuk %s tidak dapat diganti.\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Kata sandi untuk %s tidak dapat diganti.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: repositori %s tidak didukung\n"
+
+#, c-format
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Anda tak boleh melihat atau mengubah info kata sandi untuk %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Mengganti kata sandi untuk %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Kata sandi untuk %s tidak diubah.\n"
+
+#, fuzzy, c-format
+msgid "%s: password changed.\n"
+msgstr "Password telah diubah."
+
+#, fuzzy, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "Peringatan Kadaluarsanya Kata Sandi"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr "Penggunaan: %s [input]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr "Penggunaan: %s [input]\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+
+msgid "invalid password file entry"
+msgstr "entri kata sandi tak sah"
+
+msgid "duplicate password entry"
+msgstr "entri kata sandi berduplikat"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "nama pengguna tak sah '%s'\n"
+
+#, fuzzy, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "nama pengguna tak sah '%s'\n"
+
+#, fuzzy, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "pengguna %s: tak ada grup %u\n"
+
+#, fuzzy, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "pengguna %s: tak terdapat direktori %s\n"
+
+#, fuzzy, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "pengguna %s: tak terdapat program %s\n"
+
+#, fuzzy, c-format
+msgid "no tcb directory for %s\n"
+msgstr "%s: tak dapat membuat direktori %s\n"
+
+#, fuzzy, c-format
+msgid "create tcb directory for %s?"
+msgstr "%s: tak dapat membuat direktori %s\n"
+
+#, fuzzy, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "%s: tak dapat membuat direktori %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: tidak dapat mengunci berkas %s\n"
+
+#, fuzzy, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "tak terdapat entri kata sandi yang cocok\n"
+
+#, fuzzy, c-format
+msgid "add user '%s' in %s? "
+msgstr "grup bayangan %s: tak ada pengguna %s\n"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "entri kata sandi bayangan tak sah"
+
+msgid "duplicate shadow password entry"
+msgstr "entri kata sandi bayangan terduplikasi"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "pengguna %s: pergantian kata sandi terakhir terjadi dimasa depan\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: tidak dapat membuka berkas %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: tidak dapat menuliskan kembali berkas\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Akses su untuk account itu DITOLAK.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Otentikasi kata sandi diabaikan.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Silakan masukkan kata sandi anda SENDIRI sebagai otentikasi.\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: tidak dapat mengunci berkas %s\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr ""
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr ""
+
+msgid "Session terminated, terminating shell..."
+msgstr ""
+
+#, c-format
+msgid " ...killed.\n"
+msgstr ""
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr ""
+
+msgid " ...terminated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"Penggunaan: su [pilihan-pilihan] [login]\n"
+"\n"
+"Pilihan-pilihan:\n"
+" -c, --command PERINTAH berikan PERINTAH yang akan diberikan\n"
+" pada shell\n"
+" -h, --help tampilkan pesan bantuan ini dan keluar\n"
+" -, -l, --login buat shell menjadi shell login\n"
+" -m, -p,\n"
+" --preserve-environment jangan reset variabel lingkungan, dan\n"
+" pertahankan shell yang sama\n"
+" -s, --shell SHELL gunakan shell SHELL daripada bawaan\n"
+" di passwd\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Diabaikan)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Anda tak diperbolehkan untuk su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Masukkan kata sandi anda sendiri)"
+
+#, fuzzy, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: Otentikasi PAM gagal\n"
+
+#, fuzzy, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "Anda tak diperbolehkan untuk su %s\n"
+
+#, fuzzy, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "Tak ada entri kata sandi untuk 'root'"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: mesti dijalankan dari sebuah terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: kesalahan %d\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: tak dapat mengubah nama direktori %s menjadi %s\n"
+
+#, fuzzy, c-format
+msgid "Cannot execute %s\n"
+msgstr "Tidak dapat menjalankan %s"
+
+msgid "No password file"
+msgstr "Tak ada berkas kata sandi"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "Tak ada entri kata sandi untuk 'root'"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Ketikkan control-d untuk melanjutkan startup normal,\n"
+"(atau berikan kata sandi root untuk pengelolaan sistem):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Memasuki Mode Pengelolaan Sistem"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: tak dapat membuat berkas-berkas bawaan yang baru\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: tak dapat membuat berkas-berkas bawaan yang baru\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: tak dapat membuka berkas-berkas bawaan yang baru\n"
+
+#, fuzzy, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: baris %d: chown gagal\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: tak dapat membuat direktori %s\n"
+
+#, fuzzy, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: ubah nama: %s"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: grup `%s' merupakan grup NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: grup yang diberikan terlalu banyak (maks %d).\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr "Penggunaan: %s [input]\n"
+
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr ""
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr ""
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr ""
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr ""
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: direktori awal `%s' tak sah\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: komentar `%s' tak sah\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: direktori rumah `%s' tak sah\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: kata sandi bayangan dibutuhkan untuk -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: kata sandi banyangan diperlukan untuk -f\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: ruas `%s' tak sah\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: shell `%s' tak sah\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: perhatian %s tak dimiliki oleh %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rewrite password file\n"
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s: tak dapat menulis kembali berkas kata sandi\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s: tak dapat membuat direktori %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: gagal membuang hak (%s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error updating files\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: kesalahan saat memperbaharui berkas-berkas\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: tak dapat membuat direktori %s\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: direktori rumah `%s' tak sah\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "gagal mengganti pemilik kotak-surat"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: tak dapat membuat direktori %s\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: baris %d: chown gagal\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: baris %d: chown gagal\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr ""
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+
+msgid "Setting mailbox file permissions"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: pengguna %s telah ada\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: grup %s telah ada - jika ingin menambah pengguna ke grup itu, pakai -g.\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: tak dapat membuat %s\n"
+
+#, fuzzy, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %u tidak unik\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: tak dapat membuat direktori %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: tak dapat membuat %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: tak dapat membuat %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: tak dapat membuat %s\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: perhatian: direktori rumah telah ada.\n"
+"Tak menyalin berkas apapun dari direktori skel ke situ.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr "%s: tidak dapat mengubah pengguna '%s' pada klien NIS.\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: tidak dapat menghapus grup %s yg merupakan grup utama dari pengguna "
+"lain.\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "%s: tak dapat mengubah nama direktori %s menjadi %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: direktori rumah `%s' tak sah\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: perhatian: tak dapat menghapus "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s tak dimiliki oleh %s, tidak menghapus\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: gagal membuang hak (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: tak dapat mengubah nama direktori %s menjadi %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: tak dapat mengubah nama direktori %s menjadi %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: pengguna %s merupakan pengguna NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: direktori rumah `%s' tak sah\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s: tak menghapus dir %s (karena akan menghapus rumah dari %s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: kesalahan saat menghapus direktori %s\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: kesalahan saat menghapus direktori %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr ""
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr ""
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr ""
+
+msgid " -L, --lock lock the user account\n"
+msgstr ""
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr ""
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr ""
+
+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"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: pengguna %s telah ada\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: tanggal `%s' tak sah\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: tanggal `%s' tak sah\n"
+
+#, fuzzy, c-format
+msgid "%s: no options\n"
+msgstr "%s: tidak dapat membuka berkas %s\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: diperlukan kata sandi bayangan untuk -e dan -f\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: direktori %s telah ada\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: tak dapat membuat direktori %s\n"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: perhatian: gagal menghapus direktori rumah lama %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: tak dapat mengubah nama direktori %s menjadi %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: perhatian %s tak dimiliki oleh %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "gagal mengganti pemilik kotak-surat"
+
+msgid "failed to rename mailbox"
+msgstr "gagal mengubah nama kotak-surat"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s: gagal membuang hak (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s: gagal membuang hak (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s: gagal membuang hak (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s: gagal membuang hak (%s)\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid " -g, --group edit group database\n"
+msgstr ""
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr ""
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: gagal membuang hak (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s tidak berubah\n"
+
+#, fuzzy
+msgid "failed to create scratch directory"
+msgstr "gagal mengubah nama kotak-surat"
+
+#, fuzzy
+msgid "failed to drop privileges"
+msgstr "%s: gagal membuang hak (%s)\n"
+
+#, fuzzy
+msgid "Couldn't get file context"
+msgstr "Tidak dapat mengunci berkas"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+#, fuzzy
+msgid "failed to gain privileges"
+msgstr "%s: gagal membuang hak (%s)\n"
+
+msgid "Couldn't lock file"
+msgstr "Tidak dapat mengunci berkas"
+
+msgid "Couldn't make backup"
+msgstr "Tidak dapat membuat backup"
+
+#, fuzzy, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr "%s: %s tidak ditemukan pada /etc/passwd\n"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+#, fuzzy
+msgid "failed to open scratch file"
+msgstr "%s: tidak dapat membuka berkas grup\n"
+
+#, fuzzy
+msgid "failed to unlink scratch file"
+msgstr "%s: ruas terlalu panjang\n"
+
+#, fuzzy
+msgid "failed to stat edited file"
+msgstr "gagal mengubah nama kotak-surat"
+
+#, fuzzy
+msgid "failed to allocate memory"
+msgstr "gagal mengganti pemilik kotak-surat"
+
+#, fuzzy
+msgid "failed to create backup file"
+msgstr "gagal mengubah nama kotak-surat"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: tidak dapat mengembalikan %s: %s (perubahan ada dalam %s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: direktori awal `%s' tak sah\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Penggunaan: %s [input]\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "malloc(%d) gagal\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: chage [options] [LOGIN]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -d, --lastday LAST_DAY set last password change to LAST_DAY\n"
+#~| " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -l, --list show account aging information\n"
+#~| " -m, --mindays MIN_DAYS set minimum number of days before "
+#~| "password\n"
+#~| " change to MIN_DAYS\n"
+#~| " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~| "password\n"
+#~| " change to MAX_DAYS\n"
+#~| " -W, --warndays WARN_DAYS set expiration warning days to "
+#~| "WARN_DAYS\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Penggunaan: chage [pilihan-pilihan] [NAMA-LOGIN]\n"
+#~ "\n"
+#~ "Pilihan-pilihan:\n"
+#~ " -d, --lastday LAST_DAY atur pergantian password terakhir pada "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE atur kadaluarsa akun pada tanggal\n"
+#~ " EXPIRE_DATE\n"
+#~ " -h, --help tampilkan pesan bantuan ini dan keluar\n"
+#~ " -I, --inactive INACTIVE atur masa inaktif kata sandi setelah\n"
+#~ " kadaluarsa pada INACTIVE\n"
+#~ " -l, --list tampilkan informasi umur akun\n"
+#~ " -m, --mindays MIN_DAYS atur jumlah hari minimum sebelum kata "
+#~ "sandi\n"
+#~ " diganti menjadi MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS atur jumlah hari maksimum sebelum kata "
+#~ "sandi\n"
+#~ " diganti menjadi MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS atur hari peringatan kadaluarsa menjadi\n"
+#~ " WARN_DAYS\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: Otentikasi PAM gagal\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "Penggunaan: %s [-f nama_lkp] [-r no_ruang] [-w telp_ktr]\n"
+#~ "\t[-h telp_rmh] [-o lain_lain] [pengguna]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr ""
+#~ "Penggunaan: %s [-f nama_lkp] [-r no_ruang] [-w telp_ktr] [-h telp_rmh]\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Penggunaan: chpasswd [pilihan-pilihan]\n"
+#~ "\n"
+#~ "Pilihan-pilihan:\n"
+#~ " -e, --encrypted kata sandi yang diberikan telah "
+#~ "terenkripsi\n"
+#~ " -h, --help tampilkan pesan bantuan ini dan keluar\n"
+#~ " -m, --md5 gunakan enkripsi MD5 daripada DES bila "
+#~ "kata\n"
+#~ " sandi yang diberikan tak terenkripsi\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "Penggunaan: expiry {-f|-c}\n"
+
+#, fuzzy
+#~| msgid "%s: cannot open file %s\n"
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "%s: tidak dapat membuka berkas %s\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "Penggunaan: groupdel grup\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "Penggunaan: %s [-r] [-s] [grup [gbayangan]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "Penggunaan: %s [-r] [-s] [grup]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: -s dan -r tidak kompatible\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "Penggunaan: groupdel grup\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "Penggunaan: groupdel grup\n"
+
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Penggunaan: lastlog [pilihan-pilihan]\n"
+#~ "\n"
+#~ "Pilihan-pilihan:\n"
+#~ " -b, --before HARI cetak hanya record lastlog yang lebih tua dari "
+#~ "HARI\n"
+#~ " -h, --help tampilkan pesan bantuan ini dan keluar\n"
+#~ " -t, --time HARI cetak hanya record lastlog yang lebih baru dari "
+#~ "HARI\n"
+#~ " -u, --user NAMA cetak record lastlog untuk pengguna dengan nama "
+#~ "NAMA\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Penggunaan: passwd [pilihan-pilihan] [nama-pengguna]\n"
+#~ "\n"
+#~ "Pilihan-pilihan:\n"
+#~ " -a, --all laporkan status kata sandi untuk semua "
+#~ "akun\n"
+#~ " -d, --delete hapus password untuk pengguna yang "
+#~ "diberikan\n"
+#~ " -e, --expire paksakan kadaluarsa kata sandi untuk "
+#~ "akun\n"
+#~ " pengguna\n"
+#~ " -h, --help tampilkan pesan bantuan ini dan keluar\n"
+#~ " -k, --keep-tokens ganti kata sandi hanya bila telah "
+#~ "kadaluarsa\n"
+#~ " -i, --inactive INAKTIF atur masa inaktif kata sandi setelah\n"
+#~ " kadaluarsa pada INAKTIF\n"
+#~ " -l, --lock blok akun pengguna\n"
+#~ " -n, --mindays HARI_MIN atur jumlah hari minimum sebelum kata "
+#~ "sandi\n"
+#~ " diganti pada HARI_MIN\n"
+#~ " -q, --quiet mode tenang\n"
+#~ " -r, --repository REPOSITORI ubah kata sandi pada repositori "
+#~ "REPOSITORI\n"
+#~ " -S, --status laporkan status kata sandi dari akun "
+#~ "pengguna\n"
+#~ " -u, --unlock buka bloking akun pengguna\n"
+#~ " -w, --warndays HARI atur hari peringatan kadaluarsa pada "
+#~ "HARI\n"
+#~ " -x, --maxdays HARI_MAKS atur jumlah hari maksimum sebelum kata "
+#~ "sandi\n"
+#~ " diganti pada HARI_MAKS\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr "Penggunaan: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr "Penggunaan: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "Penggunaan: id\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "Penggunaan: id\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "Id tak dikenal: %s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "Tak ada shell\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Penggunaan: usermod [pilihan-pilihan] NAMA-LOGIN\n"
+#~ "\n"
+#~ "Pilihan-pilihan:\n"
+#~ " -a, --append GRUP tambahkan pengguna ke grup tambahan GRUP\n"
+#~ " -c, --comment KOMENTAR nilai baru dari ruas GECOS\n"
+#~ " -d, --home DIR_RUMAH direktori rumah baru dari pengguna baru\n"
+#~ " -e, --expiredate TANGGAL atur tanggal kadaluarsa akun pada "
+#~ "TANGGAL\n"
+#~ " -f, --inactive INAKTIF atur masa inaktif setelah kadaluarsa\n"
+#~ " pada INAKTIF\n"
+#~ " -g, --gid GRUP paksakan GRUP sebagai grup login awalan\n"
+#~ " -G, --groups GRUP-GRUP daftar grup-grup tambahan\n"
+#~ " -h, --help tampilkan pesan bantuan ini dan keluar\n"
+#~ " -l, --login LOGIN nilai baru dari nama pengguna\n"
+#~ " -L, --lock blok akun pengguna\n"
+#~ " -m, --move-home pindahkan isi direktori rumah ke lokasi "
+#~ "baru\n"
+#~ " (hanya gunakan dengan -d)\n"
+#~ " -o, --non-unique perbolehkan UID terduplikasi (tak-unik)\n"
+#~ " -p, --password PASSWORD gunakan kata sandi baru yang terenkripsi\n"
+#~ " -s, --shell SHELL shell login baru bagi pengguna\n"
+#~ " -u, --uid UID UID baru untuk pengguna\n"
+#~ " -U, --unlock buka bloking pengguna\n"
+#~ "\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s: tak diberikan tanda-tanda/bendera\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: vipw [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -g, --group edit group database\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -p, --passwd edit passwd database\n"
+#~| " -q, --quiet quiet mode\n"
+#~| " -s, --shadow edit shadow or gshadow database\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group edit group database\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -p, --passwd edit passwd database\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow edit shadow or gshadow database\n"
+#~ " -u, --user which user's tcb shadow file to edit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Penggunaan: vipw [pilihan-pilihan]\n"
+#~ "\n"
+#~ "Pilihan-pilihan:\n"
+#~ " -g, --group sunting basisdata grup\n"
+#~ " -h, --help tampilkan pesan bantuan ini dan keluar\n"
+#~ " -p, --passwd sunting basisdata kata sandi\n"
+#~ " -q, --quiet mode tenang\n"
+#~ " -s, --shadow sunting basisdata shadow atau gshadow\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Penggunaan: %s [input]\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s: tak dapat membuat %s\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s: tak dapat chown %s\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -a, --all display faillog records for all users\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -l, --lock-time SEC after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| " -m, --maximum MAX set maximum failed login counters to "
+#~| "MAX\n"
+#~| " -r, --reset reset the counters of login failures\n"
+#~| " -t, --time DAYS display faillog records more recent than "
+#~| "DAYS\n"
+#~| " -u, --user LOGIN display faillog record or maintains "
+#~| "failure\n"
+#~| " counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| " options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all display faillog records for all users\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -l, --lock-time SEC after failed login lock account to SEC "
+#~ "seconds\n"
+#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
+#~ " -r, --reset reset the counters of login failures\n"
+#~ " -t, --time DAYS display faillog records more recent than "
+#~ "DAYS\n"
+#~ " -u, --user LOGIN display faillog record or maintains "
+#~ "failure\n"
+#~ " counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ " options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Penggunaan: faillog [pilihan-pilihan]\n"
+#~ "\n"
+#~ "Pilihan-pilihan:\n"
+#~ " -a, --all tampilkan record faillog records untuk\n"
+#~ " semua pengguna\n"
+#~ " -h, --help tampilkan pesan bantuan ini dan keluar\n"
+#~ " -l, --lock-time DTK setelah kegagalan login blok akun selama\n"
+#~ " DTK detik\n"
+#~ " -m, --maximum MAX atur penghitung kegagalan login maksimum\n"
+#~ " pada MAX\n"
+#~ " -r, --reset reset penghitung kegagalan login\n"
+#~ " -t, --time HARI tampilkan record faillog yang lebih baru\n"
+#~ " dari HARI\n"
+#~ " -u, --user NAMA tampilkan record faillog atau atur\n"
+#~ " penghitung kegagalan dan batasnya (bila\n"
+#~ " digunakan dengan -r, -m atau -l) hanya\n"
+#~ " untuk pengguna dengan nama NAMA\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force exit with success status if the\n"
+#~ " specified group already exists\n"
+#~ " -g, --gid GID use GID for the new group\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique allow create group with duplicate\n"
+#~ " (non-unique) GID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new group\n"
+#~ " -r, --system create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Usage: groupadd [pilihan-pilihan] namagroup\n"
+#~ "\n"
+#~ "Pilihan-pilihan:\n"
+#~ " -f, --force paksa status sukses saat keluar bila "
+#~ "grup\n"
+#~ " telah ada\n"
+#~ " -g, --gid GID gunakan GID untuk grup yang baru ini\n"
+#~ " -h, --help tampilkan pesan bantuan ini dan keluar\n"
+#~ " -K, --key KEY=VALUE ganti nilai bawaan pada /etc/login.defs\n"
+#~ " -o, --non-unique perbolehkan pembuatan grup dengan GID\n"
+#~ " terduplikasi (tak-unik)\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --gid GID force use new GID by GROUP\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Usage: groupadd [pilihan-pilihan] namagroup\n"
+#~ "\n"
+#~ "Pilihan-pilihan:\n"
+#~ " -f, --force paksa status sukses saat keluar bila "
+#~ "grup\n"
+#~ " telah ada\n"
+#~ " -g, --gid GID gunakan GID untuk grup yang baru ini\n"
+#~ " -h, --help tampilkan pesan bantuan ini dan keluar\n"
+#~ " -K, --key KEY=VALUE ganti nilai bawaan pada /etc/login.defs\n"
+#~ " -o, --non-unique perbolehkan pembuatan grup dengan GID\n"
+#~ " terduplikasi (tak-unik)\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~ " home directory\n"
+#~ " -c, --comment COMMENT set the GECOS field for the new user "
+#~ "account\n"
+#~ " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~ " -D, --defaults print or save modified default useradd\n"
+#~ " configuration\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP for the new user account\n"
+#~ " -G, --groups GROUPS list of supplementary groups for the new\n"
+#~ " user account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -l, --no-log-init do not add the user to the lastlog and\n"
+#~ " faillog databases\n"
+#~ " -m, --create-home create home directory for the new user\n"
+#~ " account\n"
+#~ " -M, --no-create-home do not create user's home directory\n"
+#~ " (overrides /etc/login.defs)\n"
+#~ " -N, --no-user-group do not create a group with the same name "
+#~ "as\n"
+#~ " the user\n"
+#~ " -o, --non-unique allow create user with duplicate\n"
+#~ " (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new user\n"
+#~ " account\n"
+#~ " -r, --system create a system account\n"
+#~ " -s, --shell SHELL the login shell for the new user account\n"
+#~ " -u, --uid UID force use the UID for the new user "
+#~ "account\n"
+#~ " -U, --user-group create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Penggunaan: useradd [pilihan-pilihan] NAMA-LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR direktori awal untuk direktori rumah "
+#~ "dari\n"
+#~ " pengguna baru\n"
+#~ " -c, --comment KOMENTAR atur ruas GECOS untuk pengguna baru\n"
+#~ " -d, --home-dir DIR_RUMAH direktori rumah untuk pengguna baru\n"
+#~ " -D, --defaults cetak atau simpan konfigurasi bawaan "
+#~ "useradd\n"
+#~ " -e, --expiredate KADALUARSA atur tanggal kadaluarsa pada KADALUARSA\n"
+#~ " -f, --inactive INAKTIF atur masa inaktif kata sandi setelah\n"
+#~ " kadaluarsa menjadi INAKTIF\n"
+#~ " -g, --gid GRUP paksakan grup GRUP untuk pengguna baru\n"
+#~ " -G, --groups GRUP-GRUP daftar grup-grup tambahan untuk\n"
+#~ " pengguna baru\n"
+#~ " -h, --help tampilkan pesan bantuan ini dan keluar\n"
+#~ " -k, --skel SKEL_DIR berikan direktori skel alternatif\n"
+#~ " -K, --key KEY=VALUE ganti nilai-nilai bawaan pada /etc/login."
+#~ "defs\n"
+#~ " -m, --create-home buat direktori rumah untuk pengguna baru\n"
+#~ " -o, --non-unique perbolehkan pembuatan pengguna dengan\n"
+#~ " UID terduplikasi (tak-unik)\n"
+#~ " -p, --password PASSWORD gunakan kata sandi terenkripsi untuk\n"
+#~ " pengguna baru\n"
+#~ " -s, --shell SHELL shell login untuk pengguna baru\n"
+#~ " -u, --uid UID paksakan uid UID untuk pengguna baru\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Kata sandi dibuat kadaluarsa."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: tidak dapat mengunci berkas kata sandi\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: tidak dapat membuka berkas kata sandi\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: tidak dapat mengunci berkas kata sandi bayangan\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: tidak dapat membuka berkas kata sandi bayangan\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: tidak dapat menulis kembali berkas kata sandi bayangan\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: tidak dapat menulis kembali berkas kata sandi\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: tidak dapat memperbaharui berkas kata sandi bayangan\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tNama Lengkap: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tNomor Ruangan: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tTelepon Kantor: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tTelepon Rumah: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "Tidak dapat mengunci berkas kata sandi; coba lagi nanti.\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Kesalahan saat memperbaharui entri kata sandi.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Tidak dapat menyimpan perubahan berkas kata sandi.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Tidak dapat membuka kunci berkas kata sandi.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: tidak dapat mengunci berkas grup\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: tidak dapat mengunci berkas gshadow\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: tidak dapat membuka berkas kata sandi bayangan\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: kesalahan saat memperbaharui berkas kata sandi bayangan\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: errot memperbaharui entri grup\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: baris %d: grup %s tak dikenal\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: baris %d: tak dapat memperbaharui entri\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: tidak dapat mengunci berkas kata sandi bayangan\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: kesalahan saat memperbaharui berkas kata sandi bayangan\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: kesalahan saat memperbaharui berkas kata sandi\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: baris %d: pengguna %s tak dikenal\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: baris %d: tidak dapat memperbaharui entri kata sandi\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: pengguna tak dikenal\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Pengguna tak dikenal: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Penggunaan: %s [-r|-R] grup\n"
+
+#~ msgid " %s [-a user] group\n"
+#~ msgstr " %s [-a pengguna] grup\n"
+
+#~ msgid " %s [-d user] group\n"
+#~ msgstr " %s [-d pengguna] grup\n"
+
+#~ msgid " %s [-A user,...] [-M user,...] group\n"
+#~ msgstr " %s [-A pengguna,...] [-M pengguna,...] grup\n"
+
+#~ msgid " %s [-M user,...] group\n"
+#~ msgstr " %s [-M pengguna,...] grup\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: tidak mendapatkan kunci\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: tidak mendapatkan kunci untuk berkas bayangan\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: tidak dapat menuliskan kembali berkas bayangan\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: tidak dapat membuka kunci berkas\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: tidak dapat memperbaharui entri\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: tidak dapat memperbaharui entri bayangan\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "grup tak dikenal: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: tidak dapat membuka berkas\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: tidak dapat membuka berkas kata sandi bayangan\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Anda siapa?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: anggota tak dikenal %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: kesalahan saat menambahkan entri grup yang baru\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: tidak dapat menuliskan kembali berkas grup\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: tidak dapat menuliskan kembali berkas grup bayangan\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: tidak dapat mengunci berkas grup\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: tidak dapat membuka berkas grup\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: tidak dapat mengunci berkas grup bayangan\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: tidak dapat membuka berkas grup bayangan\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u tidak unik\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: kesalahan saat menghapus entri grup\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: kesalahan saat menghapus entri group bayangan\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: tidak dapat menghapus grup utama dari pengguna.\n"
+
+#, fuzzy
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "%s: Otentikasi PAM gagal\n"
+
+#, fuzzy
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "%s: tidak dapat mengunci berkas grup\n"
+
+#, fuzzy
+#~ msgid "Cannot close group file\n"
+#~ msgstr "%s: tak dapat membuka berkas grup\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s tidak ditemukan dalam /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u bukan GID yang unik\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s bukan nama yang unik\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: tak dapat menulis kembali berkas kata sandi\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: tak dapat mengunci berkas kata sandi\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: tak dapat membuka berkas kata sandi\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: tidak dapat memperbaharui entri bayangan untuk %s\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: tidak dapat memperbaharui entri untuk grup %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: tidak dapat mengunci berkas grup bayangan\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: tidak dapat membuka berkas grup banyangan\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: tidak dapat menghapus grup bayangan %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: tidak dapat memperbaharui berkas grup bayangan\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: tidak dapat menghapus berkas grup bayangan\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "UID tak dikenal: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "GID tidak dikenal: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: grup %s tidak ada\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: pengguna %s tak ada\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: nama pengguna `%s' tak sah\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: tidak dapat mengunci /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: tidak dapat mengunci /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: tidak dapat mengunci /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: tidak dapat mengunci /etc/passwd.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: tidak dapat membuka berkas-berkas\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: tak dapat menghapus entri passwd untuk %s\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: tak dapat mengunci berkas passwd\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: tak dapat membuka berkas passwd\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: tak dapat menghapus entri bayangan untuk %s\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: tak dapat memperbaharui berkas passwd\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: tak dapat memperbaharui entri untuk pengguna %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: tak dapat menghapus berkas kata sandi bayangan\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: GID %s tak dikenal\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: grup %s tak dikenal\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: kehabisan memori saat update_gshadow\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: tak dapat menulis kembali berkas kata sandi bayangan\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: tak dapat mengunci berkas kata sandi bayangan\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: tak dapat membuka berkas kata sandi bayangan\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: kesalahan saat mengunci berkas grup\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: kesalahan saat membuka berkas grup\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: kesalahan saat mengunci berkas grup bayangan\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: kesalahan saat membuka berkas grup bayangan\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: kesalahan saat menambah entri baru kata sandi\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: kesalahan saat menambah entri baru kata sandi bayangan\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s: perhatian: CREATE_HOME tak didukung, sebaiknya gunakan -m.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: errot memperbaharui entri grup\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: errot memperbaharui entri grup\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: tak dapat membuka berkas grup\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: tak dapat membuka berkas grup bayangan\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: kesalahan saat menghapus entri kata sandi\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: kesalahan saat menghapus entri kata sandi bayangan\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: kesalahan saat menambahkan entri grup yang baru\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu tak unik\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: kesalahan saat mengganti entri kata sandi\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: kesalahan saat menghapus entri kata sandi\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: kesalahan saat menghapus entri kata sandi bayangan\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: tak mampu mendapatkan GID yang unik\n"
+
+#, fuzzy
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " pada `%.100s' dari `%.200s'"
+
+#, fuzzy
+#~ msgid " on '%.100s'"
+#~ msgstr " pada `%.100s'"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: baris %d: tak dapat membuat UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: nama %s tidak unik\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ " -h, --help\t\tdisplay this help message and exit\n"
+#~ " -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Penggunaan: chgpasswd [pilihan-pilihan]\n"
+#~ "\n"
+#~ "Pilihan-pilihan:\n"
+#~ " -e, --encrypted\tkata sandi yang diberikan telah terenkripsi\n"
+#~ " -h, --help\t\ttampilkan pesan bantuan ini dan keluar\n"
+#~ " -m, --md5\t\tgunakan enkripsi MD5 daripada DES bila kata sandi\n"
+#~ "\t\t\tyang diberikan tak terenkripsi\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Tak ada berkas kata sandi\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Maaf.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Maaf, kata sandi untuk %s belum dapat diganti.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Maaf."
diff --git a/po/insert-header.sin b/po/insert-header.sin
new file mode 100644
index 0000000..b26de01
--- /dev/null
+++ b/po/insert-header.sin
@@ -0,0 +1,23 @@
+# Sed script that inserts the file called HEADER before the header entry.
+#
+# At each occurrence of a line starting with "msgid ", we execute the following
+# commands. At the first occurrence, insert the file. At the following
+# occurrences, do nothing. The distinction between the first and the following
+# occurrences is achieved by looking at the hold space.
+/^msgid /{
+x
+# Test if the hold space is empty.
+s/m/m/
+ta
+# Yes it was empty. First occurrence. Read the file.
+r HEADER
+# Output the file's contents by reading the next line. But don't lose the
+# current line while doing this.
+g
+N
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/po/it.gmo b/po/it.gmo
new file mode 100644
index 0000000..f0bfb4c
--- /dev/null
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
new file mode 100644
index 0000000..b93702c
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,3891 @@
+# Italian translations for shadow package.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# This file is distributed under the same license as the shadow package.
+# Giuseppe Sacco <eppesuig@debian.org>, 2004.
+# Danilo Piazzalunga <danilopiazza@gmail.com>, 2004-2006.
+#
+# Convenzioni utilizzate per tradurre i termini più frequenti:
+#
+# “faillog (record)”..................: «(record degli) accessi falliti»
+# “group file”........................: «file dei gruppi»
+# “logged in”.........................: «collegato»
+# “login”.............................: «accesso» (nella maggioranza dei casi)
+# “login” [user account]..............: «login»
+# “mail spool”........................: «spool di posta»
+# “primary group”.....................: «gruppo principale»
+# “shadow file”.......................: «file shadow»
+# “shadow group”......................: «gruppo shadow»
+# “(shadow) group file”...............: «file dei gruppi (shadow)»
+# “shadow password”...................: «shadow password»
+# “(shadow) password file”............: «file delle (shadow) password»
+# “superuser”.........................: «root» o «amministratore»
+# “user name”.........................: «nome utente»
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.1.1\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2008-03-27 14:40+0100\n"
+"Last-Translator: Danilo Piazzalunga <danilopiazza@gmail.com>\n"
+"Language-Team: Italian <tp@lists.linux.it>\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"Più di una voce chiamata «%s» in %s. Correggere il problema con pwck o "
+"grpck.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "metodo di cifratura non supportato da libcrypt? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Impossibile allocare spazio per le informazioni di configurazione.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"errore di configurazione: oggetto «%s» sconosciuto (avvisare "
+"l'amministratore)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr ""
+
+msgid "Password: "
+msgstr "Password: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Password di %s: "
+
+#, fuzzy
+#| msgid "Cannot open the password file.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "Impossibile aprire il file delle password.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr ""
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not set sename for %s\n"
+msgstr "Impossibile allocare spazio per le informazioni di configurazione.\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "Modifica delle informazioni sulla durata dell'account di %s\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "%s: impossibile determinare il proprio nome utente.\n"
+
+#, fuzzy, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "%s: riga %d: impossibile trovare l'utente %s\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: memoria esaurita\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: impossibile aggiornare il file %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: directory home «%s» non valida\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: impossibile rinominare la directory %s in %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: impossibile creare la directory %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: attenzione: impossibile rimuovere "
+
+#, fuzzy, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: attenzione: impossibile rimuovere "
+
+#, fuzzy, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: rename: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: impossibile rinominare la directory %s in %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: impossibile rinominare la directory %s in %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: attenzione: impossibile rimuovere "
+
+#, fuzzy, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: impossibile creare la directory %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: attenzione: impossibile rimuovere "
+
+#, fuzzy, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: impossibile aggiornare il file %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: impossibile aggiornare il file shadow\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: rename: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: impossibile aprire il file %s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Attenzione: gruppo «%s» sconosciuto\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Attenzione: troppi gruppi\n"
+
+msgid "Your password has expired."
+msgstr "La password in uso è scaduta."
+
+msgid "Your password is inactive."
+msgstr "La password in uso è inattiva."
+
+msgid "Your login has expired."
+msgstr "Il login in uso è scaduto."
+
+msgid " Contact the system administrator."
+msgstr " Contattare l'amministratore del sistema."
+
+msgid " Choose a new password."
+msgstr " Scegliere una nuova password."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "La password in uso scadrà tra %ld giorni.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "La password in uso scadrà domani."
+
+msgid "Your password will expire today."
+msgstr "La password in uso scade oggi."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Impossibile cambiare i permessi al device %s"
+
+#, fuzzy, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: lunghezza dei campi eccessiva\n"
+
+#, fuzzy, c-format
+msgid "%s: "
+msgstr "%s: %s\n"
+
+msgid ": "
+msgstr ""
+
+msgid "Environment overflow\n"
+msgstr "Dimensione dell'ambiente eccessiva\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Non si può modificare $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d tentativo fallito dall'ultimo accesso.\n"
+"L'ultimo è stato %s su %s.\n"
+msgstr[1] ""
+"%d tentativi falliti dall'ultimo accesso.\n"
+"L'ultimo è stato %s su %s.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "impossibile cambiare il proprietario della casella di posta"
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr "Impossibile ottenere un UID univoco (nessun UID disponibile)\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "Impossibile ottenere un GID univoco (nessun GID disponibile)\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "Impossibile ottenere un GID univoco (nessun GID disponibile)\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: impossibile creare l'utente\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: impossibile creare l'utente\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr "Impossibile ottenere un UID univoco (nessun UID disponibile)\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "Impossibile ottenere un UID univoco (nessun UID disponibile)\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "Impossibile ottenere un UID univoco (nessun UID disponibile)\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: autenticazione PAM non riuscita\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: campo «%s» non valido\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Could not seteuid to %d\n"
+msgstr "Impossibile allocare spazio per le informazioni di configurazione.\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not set caps\n"
+msgstr "Impossibile allocare spazio per le informazioni di configurazione.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't open file\n"
+msgid "%s: snprintf failed!\n"
+msgstr "%s: impossibile aprire il file\n"
+
+#, fuzzy, c-format
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: riga %d: la chiamata chown ha restituito un errore\n"
+
+#, fuzzy, c-format
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: riga %d: la chiamata chown ha restituito un errore\n"
+
+# NdT: Riferito al numero massimo di accessi concorrenti per un utente.
+msgid "Too many logins.\n"
+msgstr "Troppi accessi.\n"
+
+msgid "You have new mail."
+msgstr "C'è nuova posta."
+
+msgid "No mail."
+msgstr "Nessun messaggio di posta."
+
+msgid "You have mail."
+msgstr "C'è la solita posta."
+
+msgid "no change"
+msgstr "nessuna modifica"
+
+msgid "a palindrome"
+msgstr "palindromo"
+
+msgid "case changes only"
+msgstr "cambiano solo maiuscole/minuscole"
+
+msgid "too similar"
+msgstr "simile alla precedente"
+
+msgid "too simple"
+msgstr "troppo semplice"
+
+msgid "rotated"
+msgstr "rotazione"
+
+msgid "too short"
+msgstr "troppo corta"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Password non valida: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() ha restituito l'errore %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+msgid "passwd: password unchanged\n"
+msgstr "Password cambiata."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: password aggiornata correttamente\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: repository %s non supportato\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start: errore %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd: pam_start() ha restituito l'errore %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Password sbagliata per %s\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr ""
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: impossibile abbandonare i privilegi (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: telefono di casa «%s» non valido\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: impossibile creare la directory %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: impossibile creare la directory %s\n"
+
+#, fuzzy, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: impossibile creare la directory %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"Valore di ENCRYPT_METHOD «%s» non valido.\n"
+"Viene usato il valore predefinito, DES.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Impossibile spostarsi nella directory «%s»\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Directory non presente, accesso con HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Impossibile eseguire %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Directory root «%s» non valida\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Impossibile cambiare la directory root in «%s»\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: l'utente %s è attualmente collegato\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: l'utente %s è attualmente collegato\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Impossibile determinare il nome del terminale."
+
+msgid "No"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -s, --sha-rounds il numero di passaggi SHA per gli\n"
+" algoritmi di cifratura SHA*\n"
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -s, --sha-rounds il numero di passaggi SHA per gli\n"
+" algoritmi di cifratura SHA*\n"
+
+#, fuzzy
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -s, --sha-rounds il numero di passaggi SHA per gli\n"
+" algoritmi di cifratura SHA*\n"
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Inserire il nuovo valore o premere INVIO per quello predefinito"
+
+msgid "Minimum Password Age"
+msgstr "Durata minima della password"
+
+msgid "Maximum Password Age"
+msgstr "Durata massima della password"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Ultimo cambio della password (AAAA-MM-GG)"
+
+msgid "Password Expiration Warning"
+msgstr "Avviso di scadenza della password"
+
+msgid "Password Inactive"
+msgstr "Inattività della password"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Data di scadenza dell'account (AAAA-MM-GG)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Ultimo cambio della password\t\t\t\t: "
+
+msgid "never"
+msgstr "mai"
+
+msgid "password must be changed"
+msgstr "la password deve essere cambiata"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Scadenza della password\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Inattività della password\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Scadenza dell'account\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Numero minimo di giorni tra i cambi di password\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Numero massimo di giorni tra i cambi di password\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Giorni di preavviso prima della scadenza della password\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: data «%s» non valida\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: argomento numerico «%s» non valido\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: non includere «l» con altri flag\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Permesso negato.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: impossibile determinare il proprio nome utente.\n"
+
+#, fuzzy, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr ""
+"Impossibile fare il lock del file delle password; riprovare più tardi.\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: impossibile aprire il file %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: impossibile eseguire fork(): %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: impossibile abbandonare i privilegi (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: manca il file delle shadow password\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: l'utente «%s» non esiste\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Modifica delle informazioni sulla durata dell'account di %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: errore nel cambiare i campi\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr "Nome completo"
+
+#, fuzzy, c-format
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Stanza n°"
+
+msgid "Work Phone"
+msgstr "Numero telefonico di lavoro"
+
+msgid "Home Phone"
+msgstr "Numero telefonico di casa"
+
+msgid "Other"
+msgstr "Altro"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Impossibile cambiare ID a root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: nome «%s» non valido\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: numero di stanza «%s» non valido\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: telefono di lavoro «%s» non valido\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: telefono di casa «%s» non valido\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: «%s» contiene caratteri non ammessi\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: «%s» contiene caratteri non ammessi\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: l'utente «%s» non esiste\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: impossibile modificare l'utente «%s» sul client NIS.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: «%s» è il NIS master per questo client.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Modifica delle informazioni relative all'utente %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: lunghezza dei campi eccessiva\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr ""
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+" -s, --sha-rounds il numero di passaggi SHA per gli\n"
+" algoritmi di cifratura SHA*\n"
+
+#, fuzzy
+#| msgid ""
+#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
+#| " crypt algorithms\n"
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+" -s, --sha-rounds il numero di passaggi SHA per gli\n"
+" algoritmi di cifratura SHA*\n"
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: è permesso usare il flag %s solo con il flag %s\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: i flag -c, -e e -m sono mutuamente esclusivi\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: metodo di cifratura «%s» non supportato\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: riga %d: riga troppo lunga\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: riga %d: manca la nuova password\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: impossibile abbandonare i privilegi (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: gruppo «%s» inesistente\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: riga %d: impossibile aggiornare la voce\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: rilevato un errore; le modifiche vengono ignorate\n"
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: l'utente «%s» non esiste\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: l'utente «%s» non esiste\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr "Shell di login"
+
+#, fuzzy, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Non è permesso cambiare la shell di %s.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Cambio della shell di login di %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: voce «%s» non valida\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s non è una shell valida.\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: l'utente %s non esiste\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: attenzione: %s non appartiene a %s\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+" -s, --sha-rounds il numero di passaggi SHA per gli\n"
+" algoritmi di cifratura SHA*\n"
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: le opzioni %s e %s sono mutuamente esclusive\n"
+
+#, fuzzy, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "lastlog: argomento «%s» non previsto\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: impossibile creare la directory %s\n"
+
+# NdT: Vedere faillog(5) per il significato dei campi. Il campo "On"
+# è il device tty su cui è avvenuto l'ultimo accesso fallito.
+msgid "Login Failures Maximum Latest On\n"
+msgstr "Login Errori Massimo Ultimo accesso Su\n"
+
+# NdT: La «s» indica l'unità di misura (secondi).
+#, fuzzy, c-format
+msgid " [%lus left]"
+msgstr " [%lds rimasti]"
+
+# NdT: La «s» indica l'unità di misura (secondi).
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds blocco]"
+
+#, fuzzy, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s: impossibile creare la directory %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: impossibile abbandonare i privilegi (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: impossibile creare la directory %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "Utente o intervallo «%s» sconosciuto\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: impossibile rinominare la directory %s in %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: impossibile abbandonare i privilegi (%s)\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr ""
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr ""
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr ""
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+
+#, fuzzy
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "La password di %s non può essere cambiata.\n"
+
+#, fuzzy
+msgid "The options cannot be combined.\n"
+msgstr "La password di %s non può essere cambiata.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: l'opzione -A richiede le shadow password per i gruppi\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: gruppo «%s» inesistente\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: impossibile eseguire fork(): %s\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Cambio della password del gruppo %s\n"
+
+msgid "New Password: "
+msgstr "Nuova password: "
+
+msgid "Re-enter new password: "
+msgstr "Reimmettere la nuova password: "
+
+msgid "They don't match; try again"
+msgstr "Non corrispondono; provare di nuovo"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: riprovare più tardi\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Aggiunta dell'utente %s al gruppo %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Rimozione dell'utente %s dal gruppo %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: l'utente «%s» non esiste\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: non è un terminale\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+" -s, --sha-rounds il numero di passaggi SHA per gli\n"
+" algoritmi di cifratura SHA*\n"
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr ""
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+" -s, --sha-rounds il numero di passaggi SHA per gli\n"
+" algoritmi di cifratura SHA*\n"
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid " -r, --system create a system account\n"
+msgstr ""
+
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s non è un nome di gruppo valido\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: nome di gruppo «%s» non valido\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K richiede NOME=VALORE\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: gruppo «%s» già esistente\n"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "Membro già esistente\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: impossibile determinare il proprio nome utente.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: impossibile rinominare la directory %s in %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr ""
+"%s: impossibile modificare il gruppo principale dell'utente «%s» da %u a "
+"%u.\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: gruppo «%s» inesistente\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: il gruppo «%s» è un gruppo NIS.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s è il NIS master\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: l'utente %s è un utente NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: memoria esaurita. Impossibila aggiornare il database dei gruppi.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+" -s, --sha-rounds il numero di passaggi SHA per gli\n"
+" algoritmi di cifratura SHA*\n"
+
+msgid "\n"
+msgstr ""
+
+msgid "Actions:\n"
+msgstr ""
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr ""
+
+msgid " -l, --list list the members of the group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr ""
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: nome di gruppo «%s» non valido\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: il gruppo «%s» è un gruppo NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: utente «%s» sconosciuto\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr "Uso: %s [-r] [-s] [GRUPPO [GSHADOW]]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr "Uso: %s [-r] [-s] [GRUPPO]\n"
+
+#, fuzzy
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+" -s, --sha-rounds il numero di passaggi SHA per gli\n"
+" algoritmi di cifratura SHA*\n"
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s e -r sono incompatibili\n"
+
+msgid "invalid group file entry"
+msgstr "voce non valida nel file dei gruppi"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "eliminare la riga «%s»? "
+
+msgid "duplicate group entry"
+msgstr "voce duplicata nel file dei gruppi"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "nome di gruppo «%s» non valido\n"
+
+#, fuzzy, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "nome di gruppo «%s» non valido\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "gruppo %s: nessun utente %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "eliminare il membro «%s»? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "nessuna voce corrispondente nel file dei gruppi %s\n"
+
+#, fuzzy, c-format
+msgid "add group '%s' in %s? "
+msgstr "aggiungere il gruppo «%s» in %s? "
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "voce non valida nel file dei gruppi shadow"
+
+msgid "duplicate shadow group entry"
+msgstr "voce duplicata nel file dei gruppi shadow"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "gruppo shadow %s: nessun utente amministrativo %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "eliminare il membro amministrativo «%s»? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "gruppo shadow %s: nessun utente %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: i file sono stati aggiornati\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: nessuna modifica\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: impossibile aggiornare il file %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Uso: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Uso: id\n"
+
+msgid " groups="
+msgstr " gruppi="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+
+msgid "Username Port From Latest"
+msgstr "Nome utente Porta Da Ultimo accesso"
+
+msgid "Username Port Latest"
+msgstr "Nome utente Porta Ultimo accesso"
+
+msgid "**Never logged in**"
+msgstr "**Nessun accesso effettuato**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s: impossibile creare la directory %s\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s: impossibile aggiornare il file delle password\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 "Uso: %s [-p] [NOME]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h HOST] [-f NOME]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r HOST\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+# NdT: Non è l'ora giusta per accedere da questo tty (con questo utente).
+msgid "Invalid login time"
+msgstr "Orario di accesso non permesso"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Sistema chiuso per lavori di ordinaria manutenzione"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Disconnessione obbligatoria evitata: root può accedere.]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr "Nessuna voce utmp. Eseguire «login» dalla shell di livello più basso"
+
+#, fuzzy, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Login scaduto dopo %d secondi.\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM ha restituito un errore: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s login: "
+
+msgid "login: "
+msgstr "login: "
+
+#, fuzzy, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Superato il numero massimo di tentativi (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: PAM ha richiesto l'uscita immediata\n"
+
+msgid "Login incorrect"
+msgstr "Login non corretto"
+
+#, fuzzy, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "%s: riga %d: impossibile trovare l'utente %s\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s login: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: impossibile eseguire fork(): %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSCTTY non riuscita su %s"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr ""
+"Attenzione: accesso nuovamente abilitato dopo una proibizione temporanea."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Ultimo accesso: %s su %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Ultimo accesso: %.19s su %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " da %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"orario di accesso terminato\n"
+"\n"
+
+#, fuzzy
+msgid "Usage: logoutd\n"
+msgstr "Uso: id\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: can't open group file\n"
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr "%s: impossibile aprire il file dei gruppi\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: impossibile abbandonare i privilegi (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: impossibile abbandonare i privilegi (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: lunghezza dei campi eccessiva\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: directory di base «%s» non valida\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: impossibile creare la directory %s\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Uso: newgrp [-] [GRUPPO]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Uso: sg GRUPPO [[-c] COMANDO]\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: impossibile abbandonare i privilegi (%s)\n"
+
+msgid "Invalid password.\n"
+msgstr "Password non valida.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: impossibile eseguire fork(): %s\n"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: l'utente «%s» non esiste\n"
+
+msgid "too many groups\n"
+msgstr "troppi gruppi\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid " -b, --badnames allow bad names\n"
+msgstr ""
+
+msgid " -r, --system create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: il gruppo «%s» è un gruppo shadow, ma non esiste in /etc/group\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: nome utente «%s» non valido\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: nome utente «%s» non valido\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: riga %d: riga non valida\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: impossibile aggiornare la voce dell'utente %s (non presente nel database "
+"delle password)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: riga %d: impossibile creare l'utente\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: riga %d: impossibile creare il gruppo\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: l'utente «%s» non esiste\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: riga %d: impossibile aggiornare la password\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: riga %d: la chiamata mkdir ha restituito un errore\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: riga %d: la chiamata chown ha restituito un errore\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: riga %d: impossibile aggiornare la voce\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: impossibile abbandonare i privilegi (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: impossibile creare l'utente\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: impossibile aggiornare il file dei gruppi\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -s, --sha-rounds il numero di passaggi SHA per gli\n"
+" algoritmi di cifratura SHA*\n"
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -s, --sha-rounds il numero di passaggi SHA per gli\n"
+" algoritmi di cifratura SHA*\n"
+
+msgid " -q, --quiet quiet mode\n"
+msgstr ""
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -s, --sha-rounds il numero di passaggi SHA per gli\n"
+" algoritmi di cifratura SHA*\n"
+
+msgid "Old password: "
+msgstr "Vecchia password: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Inserire la nuova password (minimo %d caratteri)\n"
+"Utilizzare una combinazione di lettere maiuscole, minuscole e numeri.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Inserire la nuova password (minimo %d caratteri, massimo %d)\n"
+"Utilizzare una combinazione di lettere maiuscole, minuscole e numeri.\n"
+
+msgid "New password: "
+msgstr "Nuova password: "
+
+msgid "Try again."
+msgstr "Provare di nuovo."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Attenzione: password troppo debole (inserirla di nuovo per usarla comunque)."
+
+msgid "They don't match; try again.\n"
+msgstr "Non corrispondono; provare di nuovo.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "La password di %s non può essere cambiata.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "La password di %s non può ancora essere cambiata.\n"
+
+#, fuzzy, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: sbloccando l'utente si otterrebbe un account senza password.\n"
+"È necessario impostare una password con «usermod -p» per sbloccare questo "
+"account.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: repository %s non supportato\n"
+
+#, c-format
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr ""
+"%s: non è permesso vedere o cambiare le informazioni sulla password di %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Cambio della password di %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "La password di %s non è cambiata.\n"
+
+#, fuzzy, c-format
+msgid "%s: password changed.\n"
+msgstr "Password cambiata."
+
+#, fuzzy, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "Avviso di scadenza della password"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr "Uso: %s [-q] [-r] [-s] [PASSWD [SHADOW]]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr "Uso: %s [-q] [-r] [-s] [PASSWD [SHADOW]]\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+
+msgid "invalid password file entry"
+msgstr "voce non valida nel file delle password"
+
+msgid "duplicate password entry"
+msgstr "voce duplicata nel file delle password"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "nome utente «%s» non valido\n"
+
+#, fuzzy, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "nome utente «%s» non valido\n"
+
+#, fuzzy, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "utente %s: nessun gruppo %u\n"
+
+#, fuzzy, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "utente %s: la directory %s non esiste\n"
+
+#, fuzzy, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "utente %s: il programma %s non esiste\n"
+
+#, fuzzy, c-format
+msgid "no tcb directory for %s\n"
+msgstr "%s: impossibile creare la directory %s\n"
+
+#, fuzzy, c-format
+msgid "create tcb directory for %s?"
+msgstr "%s: impossibile creare la directory %s\n"
+
+#, fuzzy, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "%s: impossibile creare la directory %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: impossibile fare il lock del file %s\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "nessuna voce corrispondente nel file delle password %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "aggiungere l'utente «%s» in %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "voce non valida nel file delle shadow password"
+
+msgid "duplicate shadow password entry"
+msgstr "voce duplicata nel file delle shadow password"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "utente %s: l'ultimo cambio di password reca una data futura\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: impossibile aprire il file %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: impossibile riscrivere il file\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "L'accesso all'account tramite «su» è NEGATO.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Evitata l'autenticazione tramite password.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Inserire la PROPRIA password per autenticarsi.\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: impossibile fare il lock del file %s\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr ""
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr ""
+
+msgid "Session terminated, terminating shell..."
+msgstr ""
+
+#, c-format
+msgid " ...killed.\n"
+msgstr ""
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr ""
+
+msgid " ...terminated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: su [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
+#| " -h, --help display this help message and exit\n"
+#| " -, -l, --login make the shell a login shell\n"
+#| " -m, -p,\n"
+#| " --preserve-environment do not reset environment variables, and\n"
+#| " keep the same shell\n"
+#| " -s, --shell SHELL use SHELL instead of the default in "
+#| "passwd\n"
+#| "\n"
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"Uso: su [OPZIONI] [LOGIN]\n"
+"\n"
+"Opzioni:\n"
+" -c, --command COMANDO passa il COMANDO alla shell invocata\n"
+" -h, --help mostra questo messaggio di aiuto ed esce\n"
+" -, -l, --login rende la shell una shell di login\n"
+" -m, -p,\n"
+" --preserve-environment non azzera le variabili d'ambiente e\n"
+" mantiene la stessa shell\n"
+" -s, --shell SHELL usa la SHELL specificata anziché quella\n"
+" predefinita in passwd\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ignorato)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Non si è autorizzati a diventare %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Immettere la propria password)"
+
+#, fuzzy, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: autenticazione PAM non riuscita\n"
+
+#, fuzzy, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "Non si è autorizzati a diventare %s\n"
+
+#, fuzzy, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "Manca una voce per «root» nel file delle password"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: si deve avviare da un terminale\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: errore %d\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: impossibile rinominare la directory %s in %s\n"
+
+#, fuzzy, c-format
+msgid "Cannot execute %s\n"
+msgstr "Impossibile eseguire %s"
+
+msgid "No password file"
+msgstr "Manca il file delle password"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY non riuscita"
+
+msgid "No password entry for 'root'"
+msgstr "Manca una voce per «root» nel file delle password"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Premere Ctrl-D per procedere con l'avvio regolare, oppure\n"
+"inserire la password di root per la manutenzione del sistema:"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Avvio modalità manutenzione del sistema"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: impossibile creare il nuovo file dei valori predefiniti\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: impossibile creare il nuovo file dei valori predefiniti\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: impossibile aprire il nuovo file dei valori predefiniti\n"
+
+#, fuzzy, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: riga %d: la chiamata chown ha restituito un errore\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: impossibile creare la directory %s\n"
+
+#, fuzzy, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: rename: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: il gruppo «%s» è un gruppo NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: troppi gruppi specificati (max %d).\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+" -s, --sha-rounds il numero di passaggi SHA per gli\n"
+" algoritmi di cifratura SHA*\n"
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr ""
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr ""
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+" -s, --sha-rounds il numero di passaggi SHA per gli\n"
+" algoritmi di cifratura SHA*\n"
+
+#, fuzzy
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+" -s, --sha-rounds il numero di passaggi SHA per gli\n"
+" algoritmi di cifratura SHA*\n"
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+" -s, --sha-rounds il numero di passaggi SHA per gli\n"
+" algoritmi di cifratura SHA*\n"
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+" -s, --sha-rounds il numero di passaggi SHA per gli\n"
+" algoritmi di cifratura SHA*\n"
+
+#, fuzzy
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+" -s, --sha-rounds il numero di passaggi SHA per gli\n"
+" algoritmi di cifratura SHA*\n"
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr ""
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr ""
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: directory di base «%s» non valida\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: commento «%s» non valido\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: directory home «%s» non valida\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: le shadow password sono necessarie per -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: le shadow password sono necessarie per -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: campo «%s» non valido\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: shell «%s» non valida\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: attenzione: %s non appartiene a %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rewrite password file\n"
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s: impossibile riscrivere il file delle password\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s: impossibile creare la directory %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: impossibile abbandonare i privilegi (%s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error updating files\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: errore nell'aggiornare i file\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: impossibile creare la directory %s\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: directory home «%s» non valida\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "impossibile cambiare il proprietario della casella di posta"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: impossibile creare la directory %s\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: riga %d: la chiamata chown ha restituito un errore\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: riga %d: la chiamata chown ha restituito un errore\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "Creazione del file della casella di posta"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Impossibile trovare il gruppo «mail». Creazione del file della casella di "
+"posta dell'utente con il modo 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Impostazione dei permessi del file della casella di posta"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: l'utente «%s» esiste già\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: il gruppo «%s» esiste già; usare -g per aggiungere questo utente a tale "
+"gruppo.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: impossibile creare l'utente\n"
+
+#, fuzzy, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %u non univoco\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: impossibile creare la directory %s\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: impossibile creare il gruppo\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: impossibile creare l'utente\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: impossibile creare il gruppo\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: attenzione: la directory home esiste già.\n"
+"Non verrà copiato nessun file dalla directory skel.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+" -s, --sha-rounds il numero di passaggi SHA per gli\n"
+" algoritmi di cifratura SHA*\n"
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr ""
+"%s: impossibile modificare il gruppo principale dell'utente «%s» da %u a "
+"%u.\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: impossibile rimuovere il gruppo «%s» in quanto gruppo principale di un "
+"altro utente.\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "%s: impossibile rinominare la directory %s in %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: directory home «%s» non valida\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: attenzione: impossibile rimuovere "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s non appartiene a %s, quindi non viene rimosso\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: impossibile abbandonare i privilegi (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: impossibile rinominare la directory %s in %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: impossibile rinominare la directory %s in %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: l'utente %s è un utente NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: directory home «%s» non valida\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: la directory %s non viene rimossa (verrebbe eliminata la home "
+"dell'utente %s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: errore nel rimuovere la directory %s\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: errore nel rimuovere la directory %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr ""
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -s, --sha-rounds il numero di passaggi SHA per gli\n"
+" algoritmi di cifratura SHA*\n"
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+
+#, fuzzy
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr ""
+" -s, --sha-rounds il numero di passaggi SHA per gli\n"
+" algoritmi di cifratura SHA*\n"
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr ""
+
+msgid " -L, --lock lock the user account\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+" -s, --sha-rounds il numero di passaggi SHA per gli\n"
+" algoritmi di cifratura SHA*\n"
+
+#, fuzzy
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+" -s, --sha-rounds il numero di passaggi SHA per gli\n"
+" algoritmi di cifratura SHA*\n"
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr ""
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr ""
+
+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"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: sbloccando l'utente si otterrebbe un account senza password.\n"
+"È necessario impostare una password con «usermod -p» per sbloccare questo "
+"account.\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: l'utente «%s» esiste già\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: data «%s» non valida\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: data «%s» non valida\n"
+
+#, fuzzy, c-format
+msgid "%s: no options\n"
+msgstr "%s: impossibile aprire il file %s\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: i flag -L, -p e -U sono mutuamente esclusivi\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: le shadow password sono necessarie per le opzioni -e e -f\n"
+
+#, fuzzy, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "Membro già esistente\n"
+
+#, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: la directory %s esiste già\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: impossibile creare la directory %s\n"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: attenzione: impossibile rimuovere completamente la vecchia directory "
+"home %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: impossibile rinominare la directory %s in %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: attenzione: %s non appartiene a %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "impossibile cambiare il proprietario della casella di posta"
+
+msgid "failed to rename mailbox"
+msgstr "impossibile rinominare la casella di posta"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s: impossibile abbandonare i privilegi (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s: impossibile abbandonare i privilegi (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s: impossibile abbandonare i privilegi (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s: impossibile abbandonare i privilegi (%s)\n"
+
+#, fuzzy, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"%s è stato modificato.\n"
+"Per coerenza, potrebbe essere necessario modificare anche %s.\n"
+"Usare il comando «%s» per compiere questa operazione.\n"
+
+msgid " -g, --group edit group database\n"
+msgstr ""
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr ""
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: impossibile abbandonare i privilegi (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s non modificato\n"
+
+#, fuzzy
+msgid "failed to create scratch directory"
+msgstr "impossibile rinominare la casella di posta"
+
+#, fuzzy
+msgid "failed to drop privileges"
+msgstr "%s: impossibile abbandonare i privilegi (%s)\n"
+
+#, fuzzy
+msgid "Couldn't get file context"
+msgstr "Impossibile fare il lock del file"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+#, fuzzy
+msgid "failed to gain privileges"
+msgstr "%s: impossibile abbandonare i privilegi (%s)\n"
+
+msgid "Couldn't lock file"
+msgstr "Impossibile fare il lock del file"
+
+msgid "Couldn't make backup"
+msgstr "Impossibile effettuare il backup"
+
+#, fuzzy, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr "%s: impossibile trovare «%s» in /etc/passwd\n"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+#, fuzzy
+msgid "failed to open scratch file"
+msgstr "Impossibile aprire il file dei gruppi\n"
+
+#, fuzzy
+msgid "failed to unlink scratch file"
+msgstr "%s: lunghezza dei campi eccessiva\n"
+
+#, fuzzy
+msgid "failed to stat edited file"
+msgstr "impossibile rinominare la casella di posta"
+
+#, fuzzy
+msgid "failed to allocate memory"
+msgstr "impossibile cambiare il proprietario della casella di posta"
+
+#, fuzzy
+msgid "failed to create backup file"
+msgstr "impossibile rinominare la casella di posta"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr ""
+"%s: impossibile ripristinare %s: %s (le modifiche effettuate sono in %s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: directory di base «%s» non valida\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "malloc(%d) non riuscita\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: chage [options] [LOGIN]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -d, --lastday LAST_DAY set last password change to LAST_DAY\n"
+#~| " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -l, --list show account aging information\n"
+#~| " -m, --mindays MIN_DAYS set minimum number of days before "
+#~| "password\n"
+#~| " change to MIN_DAYS\n"
+#~| " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~| "password\n"
+#~| " change to MAX_DAYS\n"
+#~| " -W, --warndays WARN_DAYS set expiration warning days to "
+#~| "WARN_DAYS\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: chage [OPZIONI] [LOGIN]\n"
+#~ "\n"
+#~ "Opzioni:\n"
+#~ " -d, --lastday ULTIMO_CAMBIO imposta la data dell'ULTIMO_CAMBIO della\n"
+#~ " password\n"
+#~ " -E, --expiredate SCADENZA imposta la data di SCADENZA dell'account\n"
+#~ " -h, --help mostra questo messaggio di aiuto ed esce\n"
+#~ " -i, --inactive INATTIVITÀ imposta il numero di giorni di "
+#~ "INATTIVITÀ\n"
+#~ " della password oltre la sua scadenza\n"
+#~ " -l, --list mostra le informazioni sulla durata\n"
+#~ " dell'account\n"
+#~ " -m, --mindays MINIMO imposta a il numero MINIMO di giorni tra "
+#~ "i\n"
+#~ " cambi di password\n"
+#~ " -M, --maxdays MASSIMO imposta il numero MASSIMO di giorni tra "
+#~ "i\n"
+#~ " cambi di password\n"
+#~ " -w, --warndays PREAVVISO imposta il numero di giorni di PREAVVISO\n"
+#~ " prima della scadenza della password\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: autenticazione PAM non riuscita\n"
+
+# NdT: L'output è allineato se "%s" == "chfn".
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "Uso: %s [-f NOME_COMPLETO] [-r NUM_STANZA] [-w TEL_LAVORO]\n"
+#~ " [-h TEL_CASA] [-o ALTRO] [UTENTE]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr ""
+#~ "Uso: %s [-f NOME_COMPLETO] [-r NUM_STANZA] [-w TEL_LAVORO] [-h TEL_CASA]\n"
+
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Uso: %s [OPZIONI]\n"
+#~ "\n"
+#~ "Opzioni:\n"
+#~ " -c, --crypt-method il metodo di cifratura (uno di %s)\n"
+#~ " -e, --encrypted le password fornite sono cifrate\n"
+#~ " -h, --help mostra questo messaggio di aiuto ed esce\n"
+#~ " -m, --md5 cifra la password in chiaro usando\n"
+#~ " l'algoritmo MD5\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: chsh [OPZIONI] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help mostra questo messaggio di aiuto ed esce\n"
+#~ " -s, --shell SHELL nuova shell di login per l'utente\n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "Uso: expiry {-f|-c}\n"
+
+#, fuzzy
+#~| msgid "%s: cannot open file %s\n"
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "%s: impossibile aprire il file %s\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "Uso: groupdel GRUPPO\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: -s e -r sono incompatibili\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "Uso: groupdel GRUPPO\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "Uso: groupdel GRUPPO\n"
+
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: lastlog [OPZIONI]\n"
+#~ "\n"
+#~ "Opzioni:\n"
+#~ " -b, --before GIORNI mostra solo i record di ultimo accesso "
+#~ "più\n"
+#~ " vecchi di un numero di GIORNI\n"
+#~ " -h, --help mostra questo messaggio di aiuto ed esce\n"
+#~ " -t, --time GIORNI mostra solo i record di ultimo accesso "
+#~ "più\n"
+#~ " recenti di un numero di GIORNI\n"
+#~ " -u, --user LOGIN mostra il record di ultimo accesso per\n"
+#~ " l'utente specificato da LOGIN\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: passwd [options] [LOGIN]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -a, --all report password status on all accounts\n"
+#~| " -d, --delete delete the password for the named "
+#~| "account\n"
+#~| " -e, --expire force expire the password for the named "
+#~| "account\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -k, --keep-tokens change password only if expired\n"
+#~| " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -l, --lock lock the named account\n"
+#~| " -n, --mindays MIN_DAYS set minimum number of days before "
+#~| "password\n"
+#~| " change to MIN_DAYS\n"
+#~| " -q, --quiet quiet mode\n"
+#~| " -r, --repository REPOSITORY change password in REPOSITORY "
+#~| "repository\n"
+#~| " -S, --status report password status on the named "
+#~| "account\n"
+#~| " -u, --unlock unlock the named account\n"
+#~| " -w, --warndays WARN_DAYS set expiration warning days to "
+#~| "WARN_DAYS\n"
+#~| " -x, --maxdays MAX_DAYS set maximim number of days before "
+#~| "password\n"
+#~| " change to MAX_DAYS\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: passwd [OPZIONI] [LOGIN]\n"
+#~ "\n"
+#~ "Opzioni:\n"
+#~ " -a, --all mostra lo stato delle password di tutti "
+#~ "gli\n"
+#~ " account\n"
+#~ " -d, --delete elimina la password dell'account "
+#~ "specificato\n"
+#~ " -e, --expire segna come scaduta la password "
+#~ "dell'account\n"
+#~ " specificato\n"
+#~ " -h, --help mostra questo messaggio di aiuto ed esce\n"
+#~ " -k, --keep-tokens cambia la password solo se è scaduta\n"
+#~ " -i, --inactive INATTIVITÀ imposta il numero di giorni di "
+#~ "INATTIVITÀ\n"
+#~ " della password oltre la sua scadenza\n"
+#~ " -l, --lock blocca l'account specificato\n"
+#~ " -n, --mindays MINIMO imposta a il numero MINIMO di giorni tra "
+#~ "i\n"
+#~ " cambi di password\n"
+#~ " -q, --quiet opera in modalità silenziosa\n"
+#~ " -r, --repository REPOSITORY cambia la password nel REPOSITORY\n"
+#~ " specificato\n"
+#~ " -S, --status mostra lo stato della password "
+#~ "dell'account\n"
+#~ " specificato\n"
+#~ " -u, --unlock sblocca l'account specificato\n"
+#~ " -w, --warndays PREAVVISO imposta il numero di giorni di PREAVVISO\n"
+#~ " prima della scadenza della password\n"
+#~ " -x, --maxdays MASSIMO imposta il numero MASSIMO di giorni tra "
+#~ "i\n"
+#~ " cambi di password\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "Uso: id\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "Uso: id\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "Id «%s» sconosciuto\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "Nessuna shell\n"
+
+#~ msgid ""
+#~ "Usage: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force removal of files,\n"
+#~ " even if not owned by user\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -r, --remove remove home directory and mail spool\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: userdel [OPZIONI] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force rimuove comunuque i file, anche se non\n"
+#~ " appartengono all'utente\n"
+#~ " -h, --help mostra questo messaggio di aiuto ed esce\n"
+#~ " -r, --remove rimuove directory home e spool di posta\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: usermod [options] LOGIN\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -c, --comment COMMENT new value of the GECOS field\n"
+#~| " -d, --home HOME_DIR new home directory for the user account\n"
+#~| " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -g, --gid GROUP force use GROUP as new primary group\n"
+#~| " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~| " -a, --append append the user to the supplemental "
+#~| "GROUPS\n"
+#~| " mentioned by the -G option without "
+#~| "removing\n"
+#~| " 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"
+#~| " -m, --move-home move contents of the home directory to "
+#~| "the\n"
+#~| " new location (use only with -d)\n"
+#~| " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~| " -p, --password PASSWORD use encrypted password for the new "
+#~| "password\n"
+#~| " -s, --shell SHELL new login shell for the user account\n"
+#~| " -u, --uid UID new UID for the user account\n"
+#~| " -U, --unlock unlock the user account\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Uso: usermod [OPZIONI] LOGIN\n"
+#~ "\n"
+#~ "Opzioni:\n"
+#~ " -c, --comment COMMENTO imposta il nuovo valore del campo GECOS\n"
+#~ " -d, --home DIR_HOME imposta la nuova directory home "
+#~ "dell'utente\n"
+#~ " -e, --expiredate SCADENZA imposta la data di SCADENZA dell'account\n"
+#~ " -f, --inactive INATTIVITÀ imposta il numero di giorni di "
+#~ "INATTIVITÀ\n"
+#~ " della password oltre la sua scadenza\n"
+#~ " -g, --gid GRUPPO impone l'uso di GRUPPO come nuovo gruppo\n"
+#~ "iniziale\n"
+#~ " -G, --groups GRUPPI nuovo elenco di GRUPPI aggiuntivi\n"
+#~ " -a, --append aggiunge l'utente a ulteriori GRUPPI\n"
+#~ " specificati dall'opzione -G senza\n"
+#~ " rimuoverlo da altri gruppi\n"
+#~ " -h, --help mostra questo messaggio di aiuto ed esce\n"
+#~ " -l, --login NUOVO_LOGIN imposta il nuovo nome di login "
+#~ "dell'utente\n"
+#~ " -L, --lock blocca l'account dell'utente\n"
+#~ " -m, --move-home sposta il contenuto della directory home\n"
+#~ " nella nuova posizione (usare solo con -"
+#~ "d)\n"
+#~ " -o, --non-unique permette di usare un UID duplicato (non\n"
+#~ " univoco)\n"
+#~ " -p, --password PASSWORD imposta la nuova PASSWORD cifrata\n"
+#~ " -s, --shell SHELL la nuova shell di login dell'utente\n"
+#~ " -u, --uid UID imposta il nuovo UID dell'utente\n"
+#~ " -U, --unlock sblocca l'account dell'utente\n"
+#~ "\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s: non è stata fornita nessuna opzione\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: vipw [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -g, --group edit group database\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -p, --passwd edit passwd database\n"
+#~| " -q, --quiet quiet mode\n"
+#~| " -s, --shadow edit shadow or gshadow database\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group edit group database\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -p, --passwd edit passwd database\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow edit shadow or gshadow database\n"
+#~ " -u, --user which user's tcb shadow file to edit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: vipw [OPZIONI]\n"
+#~ "\n"
+#~ "Opzioni:\n"
+#~ " -g, --group modifica il database dei gruppi\n"
+#~ " -h, --help mostra questo messaggio di aiuto ed esce\n"
+#~ " -p, --passwd modifica il database delle password\n"
+#~ " -q, --quiet opera in modalità silenziosa\n"
+#~ " -s, --shadow modifica il database shadow o gshadow\n"
+#~ "\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s: impossibile creare %s\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s: chown di %s non riuscito\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -a, --all display faillog records for all users\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -l, --lock-time SEC after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| " -m, --maximum MAX set maximum failed login counters to "
+#~| "MAX\n"
+#~| " -r, --reset reset the counters of login failures\n"
+#~| " -t, --time DAYS display faillog records more recent than "
+#~| "DAYS\n"
+#~| " -u, --user LOGIN display faillog record or maintains "
+#~| "failure\n"
+#~| " counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| " options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all display faillog records for all users\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -l, --lock-time SEC after failed login lock account to SEC "
+#~ "seconds\n"
+#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
+#~ " -r, --reset reset the counters of login failures\n"
+#~ " -t, --time DAYS display faillog records more recent than "
+#~ "DAYS\n"
+#~ " -u, --user LOGIN display faillog record or maintains "
+#~ "failure\n"
+#~ " counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ " options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: faillog [OPZIONI]\n"
+#~ "\n"
+#~ "Opzioni:\n"
+#~ " -a, --all mostra i record degli accessi falliti "
+#~ "per\n"
+#~ " tutti gli utenti\n"
+#~ " -h, --help mostra questo messaggio di aiuto ed esce\n"
+#~ " -l, --lock-time SEC blocca l'account per SEC secondi dopo un\n"
+#~ " tentativo di accesso fallito\n"
+#~ " -m, --maximum MAX imposta a MAX il numero massimo di\n"
+#~ " tentativi di accesso falliti\n"
+#~ " -r, --reset azzera i conteggi degli accessi falliti\n"
+#~ " -t, --time GIORNI mostra i record degli accessi falliti "
+#~ "più\n"
+#~ " recenti di un numero di GIORNI\n"
+#~ " -u, --user LOGIN mostra il record degli accessi falliti "
+#~ "o,\n"
+#~ " se sono state usate con le opzioni -r, -"
+#~ "m\n"
+#~ " o -l, imposta conteggi e limiti solo per\n"
+#~ " l'utente specificato da LOGIN\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force exit with success status if the\n"
+#~ " specified group already exists\n"
+#~ " -g, --gid GID use GID for the new group\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique allow create group with duplicate\n"
+#~ " (non-unique) GID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new group\n"
+#~ " -r, --system create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: groupadd [OPZIONI] GRUPPO\n"
+#~ "\n"
+#~ "Opzioni:\n"
+#~ " -f, --force termina con successo anche se il gruppo\n"
+#~ " specificato esiste già\n"
+#~ " -g, --gid GID usa GID per il nuovo gruppo\n"
+#~ " -h, --help mostra questo messaggio di aiuto ed esce\n"
+#~ " -K, --key CHIAVE=VALORE specifica un valore diverso da quello\n"
+#~ " predefinito in /etc/login.defs\n"
+#~ " -o, --non-unique permette di creare un gruppo con un GID\n"
+#~ " duplicato (non univoco)\n"
+#~ " -p, --password PASSWORD imposta la nuova PASSWORD cifrata\n"
+#~ " -r, --system crea un account di sistema\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --gid GID force use new GID by GROUP\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: groupmod [OPZIONI] GRUPPO\n"
+#~ "\n"
+#~ "Opzioni:\n"
+#~ " -g, --gid GID impone l'uso di GID per il GRUPPO\n"
+#~ " -h, --help mostra questo messaggio di aiuto ed esce\n"
+#~ " -n, --new-name NUOVO_GRUPPO impone l'uso del nome NUOVO_GRUPPO per "
+#~ "il\n"
+#~ " GRUPPO\n"
+#~ " -o, --non-unique permette di che il GRUPPO usi un GID\n"
+#~ " duplicato (non univoco)\n"
+#~ " -p, --password PASSWORD imposta la nuova PASSWORD cifrata\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: useradd [options] LOGIN\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~| " home directory\n"
+#~| " -c, --comment COMMENT set the GECOS field for the new user "
+#~| "account\n"
+#~| " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~| " -D, --defaults print or save modified default useradd\n"
+#~| " configuration\n"
+#~| " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -g, --gid GROUP force use GROUP for the new user "
+#~| "account\n"
+#~| " -G, --groups GROUPS list of supplementary groups for the "
+#~| "new\n"
+#~| " user account\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~| " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~| " -l, do not add the user to the lastlog and\n"
+#~| " faillog databases\n"
+#~| " -m, --create-home create home directory for the new user\n"
+#~| " account\n"
+#~| " -N, --no-user-group do not create a group with the same name "
+#~| "as\n"
+#~| " the user\n"
+#~| " -o, --non-unique allow create user with duplicate\n"
+#~| " (non-unique) UID\n"
+#~| " -p, --password PASSWORD use encrypted password for the new user\n"
+#~| " account\n"
+#~| " -r, --system create a system account\n"
+#~| " -s, --shell SHELL the login shell for the new user "
+#~| "account\n"
+#~| " -u, --uid UID force use the UID for the new user "
+#~| "account\n"
+#~| " -U, --user-group create a group with the same name as the "
+#~| "user\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~ " home directory\n"
+#~ " -c, --comment COMMENT set the GECOS field for the new user "
+#~ "account\n"
+#~ " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~ " -D, --defaults print or save modified default useradd\n"
+#~ " configuration\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP for the new user account\n"
+#~ " -G, --groups GROUPS list of supplementary groups for the new\n"
+#~ " user account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -l, --no-log-init do not add the user to the lastlog and\n"
+#~ " faillog databases\n"
+#~ " -m, --create-home create home directory for the new user\n"
+#~ " account\n"
+#~ " -M, --no-create-home do not create user's home directory\n"
+#~ " (overrides /etc/login.defs)\n"
+#~ " -N, --no-user-group do not create a group with the same name "
+#~ "as\n"
+#~ " the user\n"
+#~ " -o, --non-unique allow create user with duplicate\n"
+#~ " (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new user\n"
+#~ " account\n"
+#~ " -r, --system create a system account\n"
+#~ " -s, --shell SHELL the login shell for the new user account\n"
+#~ " -u, --uid UID force use the UID for the new user "
+#~ "account\n"
+#~ " -U, --user-group create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Uso: useradd [OPZIONI] LOGIN\n"
+#~ "\n"
+#~ "Opzioni:\n"
+#~ " -b, --base-dir DIR_BASE specifica la directory di base in cui "
+#~ "creare\n"
+#~ " la directory home per il nuovo account\n"
+#~ " -c, --comment COMMENTO imposta il campo GECOS per il nuovo "
+#~ "account\n"
+#~ " -d, --home-dir DIR_HOME specifica la directory home per il nuovo\n"
+#~ " account\n"
+#~ " -D, --defaults mostra o imposta i valori predefiniti "
+#~ "della\n"
+#~ " configurazione di useradd\n"
+#~ " -e, --expiredate SCADENZA imposta la data di SCADENZA dell'account\n"
+#~ " -f, --inactive INATTIVITÀ imposta il numero di giorni di "
+#~ "INATTIVITÀ\n"
+#~ " della password oltre la sua scadenza\n"
+#~ " -g, --gid GRUPPO impone l'uso di GRUPPO per il nuovo "
+#~ "account\n"
+#~ " -G, --groups GRUPPI elenco di GRUPPI aggiuntivi per il nuovo\n"
+#~ " account\n"
+#~ " -h, --help mostra questo messaggio di aiuto ed esce\n"
+#~ " -k, --skel DIR_SKEL specifica una directory skel alternativa\n"
+#~ " -K, --key CHIAVE=VALORE specifica un valore diverso da quello\n"
+#~ " predefinito in /etc/login.defs\n"
+#~ " -l non aggiunge l'utente ai database lastlog "
+#~ "e\n"
+#~ " faillog\n"
+#~ " -m, --create-home crea la directory home per il nuovo "
+#~ "account\n"
+#~ " -N, --no-user-group non crea un gruppo con lo stesso nome\n"
+#~ " dell'utente\n"
+#~ " -o, --non-unique permette di creare un utente con un UID\n"
+#~ " duplicato (non univoco)\n"
+#~ " -p, --password PASSWORD usa la PASSWORD cifrata per il nuovo "
+#~ "account\n"
+#~ " -r, --system crea un account di sistema\n"
+#~ " -s, --shell SHELL la shell di login per il nuovo account\n"
+#~ " -u, --uid UID impone l'uso di UID per il nuovo account\n"
+#~ " -U, --user-group crea un gruppo con lo stesso nome\n"
+#~ " dell'utente\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: %s [options] [input]\n"
+#~ "\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -r, --system create system accounts\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Uso: %s [OPZIONI] [INPUT]\n"
+#~ "\n"
+#~ " -c, --crypt-method il metodo di cifratura (uno di %s)\n"
+#~ " -r, --system crea gli account di sistema\n"
+#~ "%s\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Password segnata come scaduta."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: impossibile fare il lock del file delle password\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: impossibile aprire il file delle password\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: impossibile fare il lock del file delle shadow password\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: impossibile aprire il file delle shadow password\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: impossibile riscrivere il file delle shadow password\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: impossibile riscrivere il file delle password\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: impossibile aggiornare il file delle shadow password\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tNome completo: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tStanza n°: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tNumero telefonico di lavoro: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tNumero telefonico di casa: %s\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Errore nell'aggiornare la voce nel file delle password.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Impossibile effettuare le modifiche al file delle password.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Impossibile togliere il lock dal file delle password.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: impossibile fare il lock del file dei gruppi\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: impossibile fare il lock del file gshadow\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: impossibile aprire il file shadow\n"
+
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: errore nell'aggiornare il file gshadow\n"
+
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: errore nell'aggiornare il file dei gruppi\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: riga %d: gruppo «%s» sconosciuto\n"
+
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: riga %d: impossibile aggiornare la voce nel file dei gruppi\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: impossibile fare il lock del file shadow\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: errore nell'aggiornare il file shadow\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: errore nell'aggiornare il file delle password\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: riga %d: utente «%s» sconosciuto\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr ""
+#~ "%s: riga %d: impossibile aggiornare la voce nel file delle password\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: utente sconosciuto\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Utente «%s» sconosciuto\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Uso: %s [-r|-R] GRUPPO\n"
+
+#~ msgid " %s [-a user] group\n"
+#~ msgstr " %s [-a UTENTE] GRUPPO\n"
+
+#~ msgid " %s [-d user] group\n"
+#~ msgstr " %s [-d UTENTE] GRUPPO\n"
+
+#~ msgid " %s [-A user,...] [-M user,...] group\n"
+#~ msgstr " %s [-A UTENTE,...] [-M UTENTE,...] GRUPPO\n"
+
+#~ msgid " %s [-M user,...] group\n"
+#~ msgstr " %s [-M UTENTE,...] GRUPPO\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: impossibile fare il lock\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: impossibile fare il lock del file shadow\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: impossibile riscrivere il file shadow\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: impossibile togliere il lock dal file\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: impossibile aggiornare la voce\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: impossibile aggiornare la voce nel file shadow\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "gruppo «%s» sconosciuto\n"
+
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: impossibile chiudere il file\n"
+
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: impossibile chiudere il file shadow\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Chi sei?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: membro «%s» sconosciuto\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: errore nell'aggiungere la nuova voce al file dei gruppi\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: impossibile riscrivere il file dei gruppi\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: impossibile riscrivere il file dei gruppi shadow\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: impossibile fare il lock del file dei gruppi\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: impossibile aprire il file dei gruppi\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: impossibile fare il lock del file dei gruppi shadow\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: impossibile aprire il file dei gruppi shadow\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u non univoco\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: errore nel rimuovere la voce dal file dei gruppi\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: errore nel rimuovere la voce dal file dei gruppi shadow\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: impossibile rimuovere il gruppo principale dell'utente.\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Impossibile trovare il membro da rimuovere\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr ""
+#~ "Uso: groupmems -a NOME_UTENTE | -d NOME_UTENTE | -D | -l [ -g "
+#~ "NOME_GRUPPO]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Solo root può aggiungere membri a gruppi diversi\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "È necessario l'accesso al gruppo\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "Non si è il proprietario principale del gruppo\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "Autenticazione PAM non riuscita per\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "Impossibile fare il lock del file dei gruppi\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "Impossibile chiudere il file dei gruppi\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: «%s» non trovato in /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u non è un GID univoco\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s non è un nome univoco\n"
+
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: impossibile riscrivere il file delle password\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: impossibile fare il lock del file delle password\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: impossibile aprire il file delle password\n"
+
+#~ msgid ""
+#~ "%s: cannot change the primary group of user '%s' from %u to %u, since it "
+#~ "is not in the passwd file.\n"
+#~ msgstr ""
+#~ "%s: impossibile modificare il gruppo principale dell'utente «%s» da %u a "
+#~ "%u, in quanto non è presente nel file delle password.\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: impossibile aggiornare la voce relativa a %s nel file shadow\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: impossibile aggiornare la voce del gruppo %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: impossibile fare il lock del file dei gruppi shadow\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: impossibile aprire il file dei gruppi shadow\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: impossibile rimuovere il gruppo shadow %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: impossibile aggiornare il file dei gruppi shadow\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: impossibile eliminare il file dei gruppi shadow\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "UID %u sconosciuto\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "GID %lu sconosciuto\n"
+
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: ID gruppo «%s» non valido\n"
+
+#~ msgid ""
+#~ "%s: group %s created, failure during the creation of the corresponding "
+#~ "gshadow group\n"
+#~ msgstr ""
+#~ "%s: creato il gruppo «%s»; errore nel creare il corrispondente gruppo "
+#~ "gshadow\n"
+
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: ID utente «%s» non valido\n"
+
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: nome utente «%s» non valido\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: impossibile fare il lock di /etc/passwd.\n"
+
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: impossibile fare il lock di /etc/shadow.\n"
+
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: impossibile fare il lock di /etc/group.\n"
+
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: impossibile fare il lock di /etc/gshadow.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: impossibile aprire i file\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: impossibile aggiornare la voce relativa a %s nel file passwd\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: impossibile fare il lock del file passwd\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: impossibile aprire il file passwd\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: impossibile rimuovere la voce relativa a %s dal file shadow\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: impossibile aggiornare il file passwd\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: impossibile aggiornare la voce relativa all'utente %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: impossibile eliminare il file delle shadow password\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: GID «%s» sconosciuto\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: gruppo «%s» sconosciuto\n"
+
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr ""
+#~ "%s: memoria esaurita. Impossibile aggiornare il database dei grupppi "
+#~ "shadow.\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: impossibile riscrivere il file delle shadow password\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: impossibile fare il lock del file delle shadow password\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: impossibile aprire il file delle shadow password\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: errore nel fare il lock del file dei gruppi\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: errore nell'aprire il file dei gruppi\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: errore nel fare il lock del file dei gruppi shadow\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: errore nell'aprire il file dei gruppi shadow\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: errore nell'aggiungere la nuova voce al file delle password\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr ""
+#~ "%s: errore nell'aggiungere la nuova voce al file delle shadow password\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s: attenzione: CREATE_HOME non è supportata; usare -m.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: errore nell'aggiornare la voce nel file dei gruppi\n"
+
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: errore nell'aggiornare la voce nel file dei gruppi shadow\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: impossibile aprire il file dei gruppi\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: impossibile aprire il file dei gruppi shadow\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: errore nel rimuovere la voce dal file delle password\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: errore nel rimuovere la voce dal file delle shadow password\n"
+
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr ""
+#~ "%s: errore nell'aggiungere la nuova voce al file dei gruppi shadow\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid «%lu» non univoco\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: errore nel cambio della voce nel file delle password\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: errore nel rimuovere la voce dal file delle password\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: errore nel rimuovere la voce dal file delle shadow password\n"
diff --git a/po/ja.gmo b/po/ja.gmo
new file mode 100644
index 0000000..419e340
--- /dev/null
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
new file mode 100644
index 0000000..7995868
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,3192 @@
+# Shadow utils japanese message catalog
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# Yasuyuki Furukawa <furukawa@vinelinux.org>, 2000.
+# revised by NAKANO Takeo <nakano@webmasters.gr.jp> since 2004-09-05
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.1.5\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2012-05-21 02:52+0900\n"
+"Last-Translator: NAKANO Takeo <nakano@webmasters.gr.jp>\n"
+"Language-Team: Japanese <debian-japanese@lists.debian.org>\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"'%s' というエントリが %s に複数あります。pwck か grpck で修正してください。\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "暗号化手法が libcrypt によってサポートされていない? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr "設定エラー - %s の値 '%s' を正しく解釈できません"
+
+msgid "Could not allocate space for config info.\n"
+msgstr "設定情報用の空き容量が確保できませんでした。\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "設定エラー: 不明な項目 '%s' (管理者に連絡してください)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr "%s: nscd は正常に終了しませんでした (シグナル %d)\n"
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr "%s: nscd はステータス %d で終了しました\n"
+
+msgid "Password: "
+msgstr "パスワード: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s のパスワード: "
+
+#, fuzzy
+#| msgid "Cannot open audit interface - aborting.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "audit インターフェースを開けません - 終了します。\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr "[libsemanage]: %s\n"
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr "SELinux の管理ハンドルを作成できません\n"
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr "SELinux ポリシーが管理されていません\n"
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr "SELinux のポリシー保存領域を読めません\n"
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr "SELinux の管理接続が確立できません\n"
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr "SELinux のトランザクションを開始できません\n"
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr "%s の seuser の問い合わせができません\n"
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr "%s の serange を設定できません\n"
+
+#, c-format
+msgid "Could not set sename for %s\n"
+msgstr "%s の sename を設定できません\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr "%s のログインマッピングを修正できません\n"
+
+#, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "%s の SELinux ログインマッピングを生成できません\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr "%s の名前を設定できません\n"
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr "%s の SELinux ユーザを設定できません\n"
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr "%s のログインマッピングを追加できません\n"
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr "SELinux の管理を初期化できません\n"
+
+#, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "SELinux のユーザキーを生成できません\n"
+
+#, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "この SELinux ユーザを検証できません\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr "SELinux のユーザマッピングを修正できません\n"
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr "SELinux のユーザマッピングを追加できません\n"
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr "SELinux のトランザクションをコミットできません\n"
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+"%s のログインマッピングが定義されていません。デフォルトのマッピングを\n"
+"用いたならば OK です。\n"
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr "%s のログインマッピングはポリシーで定義されており、削除できません\n"
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr "%s のログインマピングを削除できません"
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: メモリが足りません\n"
+
+#, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: %s の状態を取得できません: %s\n"
+
+#, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: %s はディレクトリでもシンボリックリンクでもありません\n"
+
+#, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: シンボリックリンク %s を読めません: %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr "%s: シンボリックリンクが長すぎるようです: %s\n"
+
+#, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: ディレクトリ %s を作成できません: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: %s の所有者を変更できません: %s\n"
+
+#, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: : %s のモードを変更できません: %s\n"
+
+#, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: アンリンク: %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: ディレクトリ %s を削除できません: %s\n"
+
+#, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: %s の名前を %s に変更できません: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: %s を削除できません: %s\n"
+
+#, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: シンボリックリンク %s を作成できません: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: %s の所有者を変更できません: %s\n"
+
+#, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: %s を lstat できません: %s\n"
+
+#, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: 警告: ユーザ %s には tcb shadow ファイルがありません\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+"%s: 緊急事態: %s の tcb shadow が st_nlink=1 の通常ファイルではありません。\n"
+"アカウントはロックされたままになります。\n"
+
+#, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: mkdir: %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: %s を開けません: %s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "警告: 不明なグループ %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "警告: グループが多すぎます\n"
+
+msgid "Your password has expired."
+msgstr "あなたのパスワードは期限が切れています。"
+
+msgid "Your password is inactive."
+msgstr "あなたのパスワードは現在使えません。"
+
+msgid "Your login has expired."
+msgstr "あなたのアカウントは期限が切れました。"
+
+msgid " Contact the system administrator."
+msgstr " システム管理者に連絡してください。"
+
+msgid " Choose a new password."
+msgstr " 新しいパスワードを選択してください。"
+
+msgid "You must change your password."
+msgstr "パスワードを変更してください。"
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "あなたのパスワードはあと %ld 日で期限が切れます。\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "あなたのパスワードは明日で期限が切れます。"
+
+msgid "Your password will expire today."
+msgstr "あなたのパスワードは本日で期限が切れます。"
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "audit インターフェースを開けません - 終了します。\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "tty stdin の所有者かモードを変更できません: %s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: %s がアンロックできませんでした\n"
+
+#, c-format
+msgid "%s: "
+msgstr "%s: "
+
+msgid ": "
+msgstr ": "
+
+msgid "Environment overflow\n"
+msgstr "環境変数領域のオーバーフロー\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "$%s を変更できません\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"最後のログインから %d 回失敗。\n"
+"最後のログインは %s (マシン %s)。\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr "%s: 設定が不正: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr "%s: 設定が不正: GID_MIN (%lu), GID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "%s: メモリ割当に失敗しました: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: 他と重ならないシステム GID を取得できません (利用できる GID がありませ"
+"ん)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: 他と重ならないグループ ID を取得できません (利用できる GID がありませ"
+"ん)\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr ""
+"%s: 他と重ならないグループ ID を取得できません (利用できる GID がありませ"
+"ん)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr "%s: 設定が不正: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX (%lu)\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: ユーザを作成できません\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr "%s: 設定が不正: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX (%lu)\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: ユーザを作成できません\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr "%s: 設定が不正: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr "%s: 設定が不正: UID_MIN (%lu), UID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: 他と重ならないシステム UID を取得できません (利用できる UID がありませ"
+"ん)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: 他と重ならないユーザ ID を取得できません (利用できる UID がありません)\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr ""
+"%s: 他と重ならないユーザ ID を取得できません (利用できる UID がありません)\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Authentication failure\n"
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: 認証に失敗しました\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: フィールド '%s' は不正です\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Could not set name for %s\n"
+msgid "%s: Could not seteuid to %d\n"
+msgstr "%s の名前を設定できません\n"
+
+#, fuzzy, c-format
+#| msgid "Could not set name for %s\n"
+msgid "%s: Could not set caps\n"
+msgstr "%s の名前を設定できません\n"
+
+#, c-format
+msgid "%s: snprintf failed!\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: %d 行: chown %s が失敗しました: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: %d 行: chown %s が失敗しました: %s\n"
+
+msgid "Too many logins.\n"
+msgstr "ログイン試行数が制限を越えました。\n"
+
+msgid "You have new mail."
+msgstr "新しいメールがあります。"
+
+msgid "No mail."
+msgstr "メールはありません。"
+
+msgid "You have mail."
+msgstr "メールがあります。"
+
+msgid "no change"
+msgstr "変更されていません"
+
+msgid "a palindrome"
+msgstr "回文です"
+
+msgid "case changes only"
+msgstr "大文字小文字しか変更されていません"
+
+msgid "too similar"
+msgstr "似すぎています"
+
+msgid "too simple"
+msgstr "単純すぎます"
+
+msgid "rotated"
+msgstr "循環になっています"
+
+msgid "too short"
+msgstr "短かすぎます"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "良くないパスワードです: %s "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() にエラー %d で失敗しました\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "パスワード: %s\n"
+
+msgid "passwd: password unchanged\n"
+msgstr "passwd: パスワードは変更されませんでした\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: パスワードは正しく更新されました\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: レポジトリ %s はサポートしていません\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start: エラー %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd: pam_start() にエラー %d で失敗しました\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "%s のパスワードが正しくありません。\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr "%s: --root オプションが複数あります\n"
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr "%s: オプション '%s' には引き数を指定してください\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: 特権を落とせませんでした (%s)\n"
+
+#, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: chroot のパス'%s' が不正です\n"
+
+#, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: chroot ディレクトリ%s にアクセスできません: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: chroot ディレクトリ%s にアクセスできません: %s\n"
+
+#, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: ディレクトリ %s に chroot できませんでした: %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"ENCRYPT_METHOD の値が正しくありません: '%s'\n"
+"デフォルトの DES を用います。\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "'%s' へディレクトリを変更できません\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "ディレクトリがありません。HOME=/ としてログインします"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "%s を実行できません"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "ルートディレクトリ '%s' は不正です\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "ルートディレクトリを '%s' へ変更できません\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: ユーザ %s は現在ログイン中です\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: ユーザ %s は現在ログイン中です\n"
+
+msgid "Unable to determine your tty name."
+msgstr "あなたの端末 (tty) 名を決定できません。"
+
+msgid "No"
+msgstr "No"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+"使い方: %s [オプション] LOGIN\n"
+"\n"
+"オプション:\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+" -d, --lastday LAST_DAY パスワードの最終変更日を LAST_DAY にする\n"
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -E, --expiredate EXPIRE_DATE アカウント期限切れの日を EXPIRE_DATE にする\n"
+
+msgid " -h, --help display this help message and exit\n"
+msgstr " -h, --help このヘルプを表示して終了する\n"
+
+#, fuzzy
+#| msgid " -g, --group edit group database\n"
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr " -g, --group group データベースを編集する\n"
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -I, --inactive INACTIVE パスワードを期限切れ後に無効化する日数を\n"
+" INACTIVEにする\n"
+
+msgid " -l, --list show account aging information\n"
+msgstr " -l, --list アカウントの経時情報を表示する\n"
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -m, --mindays MIN_DAYS パスワードが変更できるまでの最短日数を\n"
+" MIN_DAYS に変更する\n"
+
+#, fuzzy
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -M, --maxdays MAX_DAYS パスワードが変更できる期間の最長日数を\n"
+" MAX_DAYS に変更する\n"
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr " -R, --root CHROOT_DIR chroot するディレクトリ\n"
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -W, --warndays WARN_DAYS 期限切れ警告の日数を WARN_DAYS にする\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr ""
+"新しい値を入力してください。標準設定値を使うならリターンを押してください"
+
+msgid "Minimum Password Age"
+msgstr "パスワード変更可能までの最短日数"
+
+msgid "Maximum Password Age"
+msgstr "パスワード変更可能期間の最長日数"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "最後にパスワード変更した日付 (YYYY-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "パスワード期限切れ警告日数"
+
+msgid "Password Inactive"
+msgstr "パスワード無効日数"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "アカウント期限切れ日付 (YYYY-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "最終パスワード変更日\t\t\t\t:"
+
+msgid "never"
+msgstr "なし"
+
+msgid "password must be changed"
+msgstr "パスワードは変更しなければなりません"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "パスワード期限:\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "パスワード無効化中\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "アカウント期限切れ\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "パスワードが変更できるまでの最短日数\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "パスワードを変更しなくてよい最長日数\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "パスワード期限が切れる前に警告される日数\t\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: 日付 '%s' は不正です\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: 数値引数 '%s' が正しくありません\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: \"l\" オプションは他のフラグと同時には指定できません\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: 権限がありません。\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: あなたのユーザ名を判定できません。\n"
+
+#, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: PAM: %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: %s をロックできません。後でもう一度試してください。\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: %s を開けません\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: 変更を %s に書き込めませんでした\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: %s の新しいエントリ '%s' を準備できませんでした。\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: シャドウパスワードファイルがありません\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: ユーザ %s は %s に存在しません\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "%s の期限情報を変更中\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: フィールド変更の際にエラーが起きました\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"使い方: %s [オプション] [LOGIN]\n"
+"\n"
+"オプション:\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr " -f, --full-name FULL_NAME ユーザのフルネームを変更する\n"
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr " -h, --home-phone HOME_PHONE ユーザの電話番号を変更する\n"
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr " -o, --other OTHER_INFO ユーザの他の GECOS 情報を変更する\n"
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr " -r, --room ROOM_NUMBER ユーザの部屋番号を変更する\n"
+
+msgid " -u, --help display this help message and exit\n"
+msgstr " -u, --help このヘルプを表示して終了する\n"
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr " -w, --work-phone WORK_PHONE ユーザの職場の電話番号を変更する\n"
+
+msgid "Full Name"
+msgstr "フルネーム"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "部屋番号"
+
+msgid "Work Phone"
+msgstr "職場電話番号"
+
+msgid "Home Phone"
+msgstr "自宅電話番号"
+
+msgid "Other"
+msgstr "その他"
+
+msgid "Cannot change ID to root.\n"
+msgstr "ID を root へ変更できません。\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: 非 ASCII 文字の名前: '%s'\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: ユーザ名が不正です: '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s: 非 ASCII 文字の部屋番号: '%s'\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: 部屋番号が不正です: '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: 職場電話番号が不正です: '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: 自宅電話番号が不正です: '%s'\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s' には非 ASCII 文字が含まれています\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s' には利用できない文字が含まれています\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: ユーザ '%s' は存在しません\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: NIS クライアントではユーザ '%s' を変更できません。\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: '%s' がこのクライアントの NIS マスターです。\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "%s のユーザ情報を変更中\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: 入力内容が長過ぎます\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"使い方: %s [オプション]\n"
+"\n"
+"オプション:\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr " -c, --crypt-method METHOD 暗号化の方法 (%s のどれかひとつ)\n"
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr " -e, --encrypted 与えたパスワードを暗号化する\n"
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+" -m, --md5 平文テキストのパスワードを\n"
+" MD5 アルゴリズムで暗号化する\n"
+
+#, fuzzy
+#| msgid ""
+#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
+#| " crypt algorithms\n"
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+" -s, --sha-rounds SHA* 暗号化アルゴリズムの SHA ラウンド回数\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: %s フラグは %s フラグと共に指定する必要があります\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: -c, -e, -m フラグは同時に指定できません\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: サポートされていない暗号化手法です: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: %d 行: 行が長過ぎます\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: %d 行: 新規パスワードがありません\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: %s に書き込めませんでした: %s\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: %d 行: グループ '%s' は存在しません\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: %d 行: %s の新しいエントリ '%s' を用意できません\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: エラーが検出されました。変更は行いません\n"
+
+#, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: (%d 行目, ユーザ %s) パスワードは変更されませんでした\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: %d 行目: ユーザ '%s' は存在しません\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr " -s, --shell SHELL ユーザのシェルを新たに SHELL にする\n"
+
+msgid "Login Shell"
+msgstr "ログインシェル"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "あなたは '%s' のシェルを変更できません。\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "%s のログインシェルを変更中\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: 不正なエントリ: %s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s: %s はシェルに指定できません\n"
+
+#, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: 警告: %s は存在しません\n"
+
+#, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: 警告: %s は実行可能ではありません\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+" -c, --check ユーザのパスワードの期限切れをチェックする\n"
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+" -f, --force ユーザのパスワードが期限切れだったら\n"
+" パスワード変更を強制する\n"
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: オプション %s と %s は同時に指定できません\n"
+
+#, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "%s: この引き数は不正です: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr " -a, --all 全ユーザの faillog 記録を表示する\n"
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+" -l, --lock-secs SEC ログインに失敗したらアカウントを\n"
+" SEC 秒ロックする\n"
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+" -m, --maximum MAX ログイン失敗カウンタの最大値を MAX にする\n"
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr " -r, --reset ログイン失敗のカウンタをリセットする\n"
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time DAYS ここ DAYS 日分の faillog 記録を表示する\n"
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+" -u, --user LOGIN/RANGE 指定した LOGIN (RANGE) についてのみ\n"
+" faillog 記録を表示する。あるいは -r,\n"
+" -m, -l などを指定した場合は、指定 LOGIN\n"
+" についてのみ失敗カウンタや制限値を変更する\n"
+
+#, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: UID %lu のエントリを取得できませんでした\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "ログイン名 失敗 最大 最新 場所\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr "[残り %lu 秒]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr "[ロック %ld 秒]"
+
+#, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s: UID %lu の失敗回数をリセットできませんでした\n"
+
+#, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: UID %lu の最大回数を設定できませんでした\n"
+
+#, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: UID %lu のロック時間を設定できませんでした\n"
+
+#, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "%s: 不明なユーザまたは範囲です: %s\n"
+
+#, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: %s のサイズを取得できませんでした: %s\n"
+
+#, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: %s に書き込めませんでした: %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"使い方: %s [オプション] GROUP\n"
+"\n"
+"オプション:\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr " -a, --add USER USER を GROUP に追加する\n"
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr " -d, --delete USER USER を GROUP から削除する\n"
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr " -Q, --root CHROOT_DIR chroot するディレクトリ\n"
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr " -r, --remove-password GROUP のパスワードを削除する\n"
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+" -R, --restrict GROUP へのアクセスをメンバーのみに制限する\n"
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr " -M, --members USER,... GROUP のメンバーのリストを設定する\n"
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+" -A, --administrators ADMIN,...\n"
+" GROUP の管理者のリストを設定する\n"
+
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+"-A および -M オプションを除き、これらのオプションは同時に指定できません\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "これらのオプションは同時に指定できません。\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: -A にはシャドウグループパスワードが必要です\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: グループ '%s' は %s に存在しません\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: リードオンリーの %s のクローズ中に失敗\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "グループ %s のパスワードを変更中\n"
+
+msgid "New Password: "
+msgstr "新規パスワード: "
+
+msgid "Re-enter new password: "
+msgstr "新規パスワード再入力: "
+
+msgid "They don't match; try again"
+msgstr "一致しません; もう一度お願いします"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: 後でもう一度お願いします\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "ユーザ %s をグループ %s に追加\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "ユーザ %s をグループ %s から削除\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: ユーザ '%s' は '%s' のメンバーではありません\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: 端末ではありません\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"使い方: %s [オプション] GROUP\n"
+"\n"
+"オプション:\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+" -f, --force グループがすでに存在していたら正常終了しま"
+"す。\n"
+" また GID が既に用いられていたら -g をキャンセ"
+"ル\n"
+" します\n"
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr " -g, --gid GID この新規グループに GID を用います\n"
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+" -K, --key KEY=VALUE /etc/login.defs のデフォルトより優先される\n"
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique 同じ GID を持つ複数のグループの作成を\n"
+" 許可します\n"
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+" -p, --password PASSWORD 新規グループにこの暗号化済パスワードを用い"
+"る\n"
+
+msgid " -r, --system create a system account\n"
+msgstr " -r, --system システムアカウントを作成します\n"
+
+#, fuzzy
+#| msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr " -R, --root CHROOT_DIR chroot するディレクトリ\n"
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: '%s' はグループ名として正しくありません\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: '%s' はグループ ID として正しくありません\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K には KEY=VALUE が必要です\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: グループ '%s' は既に存在します\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s: GID '%lu' は既に存在します\n"
+
+#, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: クリーンアップサービスを設定できません。\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr " -r, --reset ログイン失敗のカウンタをリセットする\n"
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: '%s' のエントリを %s から削除できません\n"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: ユーザ '%s' のプライマリグループは削除できません。\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: グループ '%s' は存在しません\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: グループ '%s' は NIS グループです\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s が NIS マスターです\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: ユーザ '%s' はすでに '%s' のメンバーです\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: メモリ不足です。%s を更新できません。\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"使い方: %s [オプション] [アクション]\n"
+"\n"
+"オプション:\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+" -g, --group groupname ユーザの所属していないグループを変更します\n"
+" (root のみ)\n"
+
+msgid "\n"
+msgstr "\n"
+
+msgid "Actions:\n"
+msgstr "アクション:\n"
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+" -a, --add username username をグループのメンバーに追加します\n"
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+" -d, --delete username グループのメンバーから username を削除する\n"
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr ""
+" -p, --purge グループからすべてのメンバーを削除します\n"
+
+msgid " -l, --list list the members of the group\n"
+msgstr " -l, --list グループのメンバーを表示します。\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: あなたのグループ名はあなたのユーザ名とマッチしません\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s: -g/--group オプションは root のみが指定できます\n"
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr " -g, --gid GID グループの ID を GID に変更します\n"
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr " -n, --new-name NEW_GROUP 名前を NEW_GROUP に変更する\n"
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr " -o, --non-unique 他と重なる GID を許可する\n"
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+" -p, --password PASSWORD パスワードをこの (暗号化された) PASSWORD\n"
+" に変更する\n"
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s '%s' はグループ名として正しくありません\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: グループ %s は NIS のグループです\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: ユーザ %s は不明です\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"使い方: %s [オプション] [group [gshadow]]\n"
+"\n"
+"オプション:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"使い方: %s [オプション] [group]\n"
+"\n"
+"オプション:\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+" -r, --read-only エラーや警告を表示するが、\n"
+" ファイルを変更しない\n"
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr " -s, --sort エントリを UID でソートする\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s と -r は同時に指定できません\n"
+
+msgid "invalid group file entry"
+msgstr "不正なグループファイルエントリです"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "行 '%s' を削除しますか? "
+
+msgid "duplicate group entry"
+msgstr "グループエントリが重複しています"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "'%s' はグループ名として正しくありません\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "'%lu' はグループ ID として正しくありません\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "グループ %s: ユーザ %s はいません\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "メンバー '%s' を削除しますか? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "%s には一致するグループファイルエントリがありません\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "グループ '%s' を %s に追加しますか?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"グループ %s のエントリが %s にありますが、%s のパスワードフィールドが 'x' に"
+"なっていません\n"
+
+msgid "invalid shadow group file entry"
+msgstr "シャドウグループファイルのエントリが正しくありません"
+
+msgid "duplicate shadow group entry"
+msgstr "シャドウグループエントリが重複しています"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "シャドウグループ %s: 管理ユーザ %s は存在しません\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "管理ユーザ '%s' を削除しますか?"
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "シャドウグループ %s: ユーザ %s は存在しません\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: ファイルは更新されました\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: 変更はありません\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: %s を削除できません\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "使い方: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "使い方: id\n"
+
+msgid " groups="
+msgstr " グループ="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+" -b, --before DAYS DAYS 日より以前の lastlog 記録だけを表示す"
+"る\n"
+
+#, fuzzy
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr " -a, --all 全ユーザの faillog 記録を表示する\n"
+
+#, fuzzy
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr " -a, --all 全ユーザの faillog 記録を表示する\n"
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time DAYS DAYS 日前以降の lastlog 記録だけを表示する\n"
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+" -u, --user LOGIN 指定ユーザ LOGIN の lastlog 記録を表示する\n"
+
+msgid "Username Port From Latest"
+msgstr "ユーザ名 ポート 場所 最近のログイン"
+
+msgid "Username Port Latest"
+msgstr "ユーザ名 ポート 最近のログイン"
+
+msgid "**Never logged in**"
+msgstr "**一度もログインしていません**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s: UID %lu のエントリを取得できませんでした\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s: UID %lu の lastlog エントリをリセットできませんでした: %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 "使い方: %s [-p] [ユーザ名]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h ホスト] [-f ユーザ名]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r ホスト\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr "設定エラー - %s の値 '%d' をパースできません"
+
+msgid "Invalid login time"
+msgstr "ログイン時間が不正です"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"システムは定期メンテナンスのため利用できません"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[切断を迂回 -- root ログインが可能です。]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr "%s: おそらく実効 root がないと動作できません\n"
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"utmp にエントリがありません。\"login\" を \"sh\" の最低レベルから行う必要があ"
+"ります"
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"あと %u 秒でログインはタイムアウトします。\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM が失敗しました、終了します: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s login: "
+
+msgid "login: "
+msgstr "login: "
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "最大試行回数 (%u) を越えました\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: PAM から中断要請がありました\n"
+
+msgid "Login incorrect"
+msgstr "ログインが違います"
+
+#, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "ユーザが見つかりません (%s)\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s login: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: fork に失敗しました: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSCTTY が %s で失敗しました"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr ""
+"警告: 一時的にロックアウトします。しばらく経ってからやり直してください。"
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "最近のログイン: %s on %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "最近のログイン: %.19s on %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " from %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"ログイン時間切れ\n"
+"\n"
+
+msgid "Usage: logoutd\n"
+msgstr "使い方: logoutd\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, c-format
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: %s を削除できませんでした\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: %s を削除できませんでした\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to unlock %s\n"
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: %s がアンロックできませんでした\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to find tcb directory for %s\n"
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: %s の tcb ディレクトリが見付かりませんでした\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Failed to create tcb directory for %s\n"
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: %s の tcb ディレクトリの作成に失敗しました\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "使い方: newgrp [-] [グループ]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "使い方: sg グループ [[-c] コマンド]\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: %s に書き込めませんでした: %s\n"
+
+msgid "Invalid password.\n"
+msgstr "そのパスワードは使えません。\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: fork に失敗しました: %s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: GID '%lu' は存在しません\n"
+
+msgid "too many groups\n"
+msgstr "グループが多すぎます\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+#, fuzzy
+#| msgid " -q, --quiet quiet mode\n"
+msgid " -b, --badnames allow bad names\n"
+msgstr " -q, --quiet 表示抑制モード\n"
+
+msgid " -r, --system create system accounts\n"
+msgstr " -r, --system システムアカウントを作成する\n"
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr ""
+"%s: グループ '%s' はシャドウグループですが、/etc/group に存在しません\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: '%s' はユ−ザ ID に使えません\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: '%s' はユーザ名に使えません\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: %d 行: 不正な行です\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: ユーザ %s のエントリを更新できません (passwd データベースに存在しませ"
+"ん)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: %d 行: ユーザを作成できません\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: %d 行: グループを作成できません\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: %d 行: ユーザ '%s' は %s に存在しません\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: %d 行: パスワードを更新できません\n"
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: %d 行: mkdir %s が失敗しました: %s\n"
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: %d 行: chown %s が失敗しました: %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: %d 行: エントリを更新できません\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: %s の新しいエントリ '%s' を準備できませんでした。\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: ユーザを作成できません\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: グループを作成できません\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+" -a, --all 全アカウントのパスワード状態をレポートする\n"
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr " -d, --delete 指定アカウントのパスワードを削除する\n"
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+" -e, --expire 指定アカウントのパスワードを期限切れにする\n"
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+" -k, --keep-tokens 期限切れの場合にのみパスワードを変更する\n"
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -i, --inactive INACTIVE 期限切れ後のパスワード無効化日数を\n"
+" INACTIVE にする\n"
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr " -l, --lock 指定アカウントをロックする\n"
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -n, --mindays MIN_DAYS パスワードが変更できるまでの最短日数を\n"
+" MIN_DAYS に変更する\n"
+
+msgid " -q, --quiet quiet mode\n"
+msgstr " -q, --quiet 表示抑制モード\n"
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+" -r, --repository REPOSITORY リポジトリ REPOSITORY のパスワードを変更す"
+"る\n"
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+" -S, --status 指定アカウントのパスワードの状態を報告する\n"
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr " -u, --unlock 指定アカウントのロックを解除する\n"
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -w, --warndays WARN_DAYS 期限切れ警告の日数を WARN_DAYS にする\n"
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -x, --maxdays MAX_DAYS パスワードが変更できる期間の最長日数を\n"
+" MAX_DAYS に変更する\n"
+
+msgid "Old password: "
+msgstr "古いパスワード: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"新しいパスワードを入れてください (最短 %d 文字)\n"
+"大文字・小文字・数字を混ぜて使うようにしてください。\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"新しいパスワードを入れてください (最低 %d 文字、最高 %d 文字)\n"
+"大文字・小文字・数字を混ぜて使うようにしてください。\n"
+
+msgid "New password: "
+msgstr "新しいパスワード: "
+
+msgid "Try again."
+msgstr "もう一度お願いします。"
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"警告: 弱いパスワードです (どうしてもこれを使いたければもう一度入力)。"
+
+msgid "They don't match; try again.\n"
+msgstr "一致しません。もう一度お願いします。\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "%s のパスワードは変更できません。\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "%s のパスワードはまだ変更できません。\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: パスワードをアンロックするとパスワードのないアカウントができます。\n"
+"このアカウントのパスワードをアンロックするには usermod -p でパスワードを\n"
+"設定すべきです。\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: レポジトリ %s はサポートしていません\n"
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not authorized to change the password of %s\n"
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr "%s: %s は %s のパスワードを変更する権限がありません\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: あなたは %s のパスワード情報を閲覧ないし変更できません。\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "%s のパスワードを変更しています\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "%s のパスワードは変更されません。\n"
+
+#, c-format
+msgid "%s: password changed.\n"
+msgstr "%s: パスワードは変更されました。\n"
+
+#, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "%s: パスワード期限切れ情報を変更しました\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"使い方: %s [オプション] [passwd]\n"
+"\n"
+"オプション:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"使い方: %s [オプション] [passwd [shadow]]\n"
+"\n"
+"オプション:\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr " -q, --quiet エラーのみ報告する\n"
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr "%s: USE_TCB が有効だと他のl shadow ファイルを使うことはできません\n"
+
+msgid "invalid password file entry"
+msgstr "パスワードファイルのエントリが不正です"
+
+msgid "duplicate password entry"
+msgstr "パスワードエントリが重複しています"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "ユーザ名 '%s' は不正です\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "'%lu' はユーザ ID に使えません\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "ユーザ '%s': グループ %lu がありません\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "ユーザ %s: ディレクトリ '%s' が存在しません\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "ユーザ '%s': プログラム '%s' が存在しません\n"
+
+#, c-format
+msgid "no tcb directory for %s\n"
+msgstr "%s の tcb ディレクトリがありません\n"
+
+#, c-format
+msgid "create tcb directory for %s?"
+msgstr "%s の tcb ディレクトリを作成しますか?"
+
+#, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "%s の tcb ディレクトリを作成できませんでした\n"
+
+#, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: %s をロックできません\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "一致するパスワードファイルエントリが %s にありません\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "ユーザ '%s' を '%s' に追加しますか?"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"ユーザ %s のエントリが %s にありますが、%s のパスワードフィールドが 'x' に"
+"なっていません\n"
+
+msgid "invalid shadow password file entry"
+msgstr "不正なシャドウパスワードのエントリです"
+
+msgid "duplicate shadow password entry"
+msgstr "シャドウパスワードエントリが重複しています"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "ユーザ %s: 最後のパスワード変更が未来になっています\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: %s のエントリをソートできません\n"
+
+#, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: tcb が有効になっていると利用できません\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: %s のモードを 0600 に変更できませんでした\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "このアカウントへの su アクセスは禁止されています。\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "パスワード認証を迂回します。\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "「あなた自身のパスワード」を入力して認証してください。\n"
+
+#, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: ユーザシェルを起動できません。\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr "%s: シグナルが異常です\n"
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr "%s: シグナルのマスキングが異常です\n"
+
+msgid "Session terminated, terminating shell..."
+msgstr "セッションが終了しました。シェルを終了しています..."
+
+#, c-format
+msgid " ...killed.\n"
+msgstr " ...kill されました。\n"
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr " ...子プロセスの終了を待ちます。\n"
+
+msgid " ...terminated.\n"
+msgstr " ...終了しました。\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: su [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
+#| " -h, --help display this help message and exit\n"
+#| " -, -l, --login make the shell a login shell\n"
+#| " -m, -p,\n"
+#| " --preserve-environment do not reset environment variables, and\n"
+#| " keep the same shell\n"
+#| " -s, --shell SHELL use SHELL instead of the default in "
+#| "passwd\n"
+#| "\n"
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"使い方: su [オプション] [ユーザ名]\n"
+"\n"
+"オプション:\n"
+" -c, --command COMMAND 起動したシェルにコマンド COMMAND を渡す\n"
+" -h, --help このヘルプを表示して終了する\n"
+" -, -l, --login そのシェルをログインシェルにする\n"
+" -m, -p,\n"
+" --preserve-environment 環境変数をリセットせず、シェルも同じものを使う\n"
+" -s, --shell SHELL passwd にあるデフォルト値でなくシェル SHELL を使"
+"う\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(無視)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "あなたには su %s する権限がありません\n"
+
+msgid "(Enter your own password)"
+msgstr "(あなたのパスワードを入力してください)"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: 認証に失敗しました\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s: あなたは現時点では su する権限がありません\n"
+
+#, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "ユーザ '%s' のパスワードエントリがありません\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: 端末から実行してください\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: エラー %d\n"
+
+#, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: 制御端末を落とせませんでした\n"
+
+#, c-format
+msgid "Cannot execute %s\n"
+msgstr "%s を実行できません\n"
+
+msgid "No password file"
+msgstr "パスワードファイルがありません"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY が失敗しました"
+
+msgid "No password entry for 'root'"
+msgstr "'root' のパスワードエントリがありません"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"通常の起動を継続するには Ctrl-D を押してください。\n"
+"(システムメンテナンスをするには root のパスワードを入力):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "システムメンテナンスモードへ入ります"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr "%s: %s を作成しましたが、削除できません\n"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr "%1$s: %3$s 中の設定 %2$s は無視されます\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: 新しいデフォルトファイルを作れません\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: 新しいデフォルトファイルを作れません\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: 新しいデフォルトファイルを開けません\n"
+
+#, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: %s の行が長すぎます: %s..."
+
+#, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: バックアップファイル (%s) を作成できません: %s\n"
+
+#, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: ファイル名変更: %s: %s\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: グループ '%s' は NIS グループです。\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: 指定したグループ数が多すぎます (最大 %d 個)。\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"使い方: %s [オプション] LOGIN\n"
+" %s -D\n"
+" %s -D [オプション]\n"
+"\n"
+"オプション:\n"
+
+#, fuzzy
+#| msgid " -s, --shadow edit shadow or gshadow database\n"
+msgid " --badnames do not check for bad names\n"
+msgstr " -s, --shadow shadow データベースを編集する\n"
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+" -b, --base-dir BASE_DIR 新アカウントのホームディクトリの\n"
+" ベースディレクトリ\n"
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr " -c, --comment COMMENT 新アカウントの GECOS フィールド\n"
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr " -d, --home-dir HOME_DIR 新アカウントのホームディレクトリ\n"
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+" -D, --defaults useradd のデフォルト設定を表示または変更\n"
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr " -e, --expiredate EXPIRE_DATE 新アカウントの期限切れ日付\n"
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr " -f, --inactive INACTIVE 新アカウントのパスワード無効化日数\n"
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+" -g, --gid GROUP 新アカウントの主グループの名前または ID\n"
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr " -G, --groups GROUPS 新アカウントの補助グループのリスト\n"
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr " -k, --skel SKEL_DIR 雛型ディレクトリに指定のものを使う\n"
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+" -l, --no-log-init ユーザを lastlog, faillog のデータベースに\n"
+" 追加しない\n"
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr " -m, --create-home ユーザのホームディレクトリを作成する\n"
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+" -M, --no-create-home ユーザのホームディレクトリを作成しない\n"
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr " -N, --no-user-group ユーザと同名のグループを作成しない\n"
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr " -o, --non-unique UID が同じユーザの作成を許す\n"
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr " -p, --password PASSWORD 新アカウントの暗号化されたパスワード\n"
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr " -s, --shell SHELL 新アカウントのログインシェル\n"
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr " -u, --uid UID 新アカウントのユーザ ID\n"
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr " -U, --user-group ユーザと同じ名前のグループを作成する\n"
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+" -Z, --selinux-user SEUSER SELinux のユーザマッピングに指定した\n"
+" SEUSER を使う\n"
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: ベースディレクトリ '%s' は不正です\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: コメント '%s' は不正です\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: ホームディレクトリ '%s' は不正です\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: シャドウパスワードには -e が必要です\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: シャドウパスワードには -f が必要です\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: フィールド '%s' は不正です\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: シェル '%s' は不正です\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Warning: %s is not executable\n"
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: 警告: %s は実行可能ではありません\n"
+
+#, c-format
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr "%s: -Z は SELinux カーネル以外では使えません\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr "%s: UID %lu の faillog エントリをリセットできませんでした: %s\n"
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr "%s: UID %lu の lastlog エントリをリセットできませんでした: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s: UID %lu の faillog エントリをリセットできませんでした: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: %s の新しいエントリ '%s' を準備できませんでした。\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error changing fields\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: フィールド変更の際にエラーが起きました\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: ディレクトリ %s を作成できません\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s home directory (%s) not found\n"
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: %s のホームディレクトリ (%s) がありません\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to allocate memory: %s\n"
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "%s: メモリ割当に失敗しました: %s\n"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: ディレクトリ %s を作成できません\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: %d 行: chown %s が失敗しました: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: %d 行: chown %s が失敗しました: %s\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "メールボックスファイルを作成します"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"グループ 'mail' が見付かりません。ユーザのメールボックスファイルを\n"
+"モード 0600 で作成します\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "メールボックスファイルの許可属性を設定します"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: ユーザ '%s' は既に存在します\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: グループ %s は存在します。このユーザをそのグループへ追加するには -g を用"
+"いてください。\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: ユーザを作成できません\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: ユーザ ID %lu は重複しています\n"
+
+#, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: %s の tcb ディレクトリの作成に失敗しました\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: グループを作成できません\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: ユーザを作成できません\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: グループを作成できません\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: 警告: ホームディレクトリが既に存在します。\n"
+"skel ディレクトリからのコピーは行いません。\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+"%s: 警告: ユーザ名 %s から %s への SELinux ユーザマッピングに失敗しました。\n"
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+" -f, --force 当該ユーザの所有でないファイルも削除する\n"
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+" -r, --remove ホームディレクトリとメールスプールを削除す"
+"る\n"
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+" -Z, --selinux-user このユーザの SELinux ユーザマッピングを\n"
+" 全て削除する\n"
+
+#, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr ""
+"%s: グループ %s はユーザ %s のプライマリグループではないので削除しません。\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr "%s: グループ %s には他のメンバーがいるので削除しませんでした\n"
+
+#, c-format
+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 remove entry %lu from %s\n"
+msgstr "%s: '%s' のエントリを %s から削除できません\n"
+
+#, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: %s のメールスプール (%s) がありません\n"
+
+#, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: 警告: %s を削除できません: %s\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s は %s の所有ではありません。削除は行いません\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr "%s: メモリを割当できません。%s の tcb エントリは削除されません。\n"
+
+#, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: 特権を落とせませんでした %s\n"
+
+#, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: %s の内容を削除できませんでした: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: %s の tcb ファイルを削除できません: %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: ユーザ %s は NIS ユーザです\n"
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: %s のホームディレクトリ (%s) がありません\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: ディレクトリ %s の削除は行いません (ユーザ %s のホームディレクトリです)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: ディレクトリ %s の削除でエラーが起きました\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: ディレクトリ %s の削除でエラーが起きました\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+"%s: 警告: ユーザ名 %s から SELinux へのユーザマッピングの削除に失敗しまし"
+"た。\n"
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr " -c, --comment COMMENT GECOS フィールドの値を再設定する\n"
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+" -d, --home HOME_DIR ユーザアカウントのホームディレクトリを\n"
+" 再設定する\n"
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -e, --expiredate EXPIRE_DATE アカウント期限切れの日を EXPIRE_DATE にする\n"
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -f, --inactive INACTIVE パスワードを期限切れ後に無効化する日数を\n"
+" INACTIVEにする\n"
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr " -g, --gid GROUP 主グループを GROUP に変更する\n"
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr " -G, --groups GROUPS 新たな補助グループのリストを与える\n"
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+" -a, --append ユーザを (-G で指定された) 補助グループ群\n"
+" GROUPS に追加する。他のグループからの削除は\n"
+" 行わない。\n"
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr " -l, --login NEW_LOGIN ログイン名を変更する\n"
+
+msgid " -L, --lock lock the user account\n"
+msgstr " -L, --lock このユーザアカウントをロックする\n"
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+" -m, --move-home 現ホームディレクトリの内容を新たな場所に\n"
+" 移動する (-d が指定された場合のみ)\n"
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique 一意でないユーザ (UID の重なるユーザ) を\n"
+" 許可する\n"
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr " -p, --password PASSWORD 新たな暗号化済みパスワードを与える\n"
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr " -u, --uid UID このユーザの UID を変更する\n"
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr ""
+" -U, --unlock このユーザアカウントのロックを解除する\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"
+msgstr ""
+" -Z, --selinux-user このユーザアカウントへの新規 SELinux\n"
+" ユーザマッピング\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: ユーザのパスワードをアンロックするとパスワードのないアカウントができま"
+"す。\n"
+"このユーザのパスワードをアンロックするには usermod -p でパスワードを設定\n"
+"すべきです。\n"
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: ユーザ '%s' は既に %s に存在します\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: 日付 '%s' は不正です\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: 日付 '%s' は不正です\n"
+
+#, c-format
+msgid "%s: no options\n"
+msgstr "%s: オプションがありません\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: -L, -p, -U フラグは同時に指定できません\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: -e および -f にはシャドウパスワードが必要です\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: UID '%lu' は既に存在します\n"
+
+#, fuzzy, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr "%s: %s は %s のパスワードを変更する権限がありません\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: ディレクトリ %s は存在します\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+"%s: 以前のホームディレクトリ (%s) がディレクトリではありません。これは削除さ"
+"れず、ホームディレクトリは作成しません。\n"
+
+#, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: ホームディレクトリの所有モードを変更できません"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: 警告: 古いホームディレクトリ %s を完全削除できませんでした"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: ディレクトリ %s の名前を %s に変更できません\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: ユーザ %lu の lastlog エントリをユーザ %lu にコピーできませんでした: %s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: ユーザ %lu の faillog エントリをユーザ %lu にコピーできませんでした: %s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: 警告: %s は %s の所有ではありません\n"
+
+msgid "failed to change mailbox owner"
+msgstr "mailbox 所有者の変更に失敗しました"
+
+msgid "failed to rename mailbox"
+msgstr "mailbox の名前変更に失敗しました"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s: %s の新しいエントリ '%s' を準備できませんでした。\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s: %s の新しいエントリ '%s' を準備できませんでした。\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s: %s の新しいエントリ '%s' を準備できませんでした。\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s: %s の新しいエントリ '%s' を準備できませんでした。\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"%s を変更しました。\n"
+"整合性を保つために %s を変更する必要があるかもしれません。\n"
+"その場合はコマンド '%s' を使ってください。\n"
+
+msgid " -g, --group edit group database\n"
+msgstr " -g, --group group データベースを編集する\n"
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr " -p, --passwd passwd データベースを編集する\n"
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr " -s, --shadow shadow データベースを編集する\n"
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr " -u, --user 編集する tcb shadow ファイルのユーザ\n"
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: %s を削除できませんでした\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: %s は変更されません\n"
+
+msgid "failed to create scratch directory"
+msgstr "スクラッチディレクトリを作成できませんでした"
+
+msgid "failed to drop privileges"
+msgstr "特権を落とせませんでした"
+
+msgid "Couldn't get file context"
+msgstr "ファイルコンテキストを取得できません"
+
+msgid "setfscreatecon () failed"
+msgstr "setfscreatecon () が失敗しました"
+
+msgid "failed to gain privileges"
+msgstr "特権を取得できませんでした"
+
+msgid "Couldn't lock file"
+msgstr "ファイルをロックできません"
+
+msgid "Couldn't make backup"
+msgstr "バックアップを作成できません"
+
+#, 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 はステータス %d で終了しました\n"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+msgid "failed to open scratch file"
+msgstr "スクラッチファイルをオープンできませんでした"
+
+msgid "failed to unlink scratch file"
+msgstr "スクラッチファイルを削除できませんでした"
+
+msgid "failed to stat edited file"
+msgstr "編集したファイルの状態を取得できませんでした"
+
+msgid "failed to allocate memory"
+msgstr "メモリ割当に失敗しました"
+
+msgid "failed to create backup file"
+msgstr "バックアップファイルを作成できませんでした"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: %s を復旧できませんでした: %s (あなたの変更は %s にあります)\n"
+
+#, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: %s の tcb ディレクトリが見付かりませんでした\n"
+
+#~ msgid " -c, --crypt-method the crypt method (one of %s)\n"
+#~ msgstr " -c, --crypt-method 暗号化の方法 (%s のどれかひとつ)\n"
+
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr ""
+#~ "使い方: vipw [オプション]\n"
+#~ "\n"
+#~ "オプション:\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "malloc(%d) に失敗しました\n"
+
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "使い方: chage [オプション] [ログイン名]\n"
+#~ "\n"
+#~ "オプション\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: PAM 認証に失敗しました\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "使い方: %s [-f フルネーム] [-r 部屋番号] [-w 職場TEL]\n"
+#~ "\t[-h 自宅TEL] [-o その他] [ユーザ]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr ""
+#~ "使い方: %s [-f フルネーム] [-r 部屋番号] [-w 職場TEL] [-h 自宅TEL]\n"
+
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "使い方: %s [オプション]\n"
+#~ "\n"
+#~ "オプション:\n"
+#~ " -c, --crypt-method 暗号化の方法 (%s のどれか)\n"
+#~ " -e, --encrypted パスワードを暗号化した状態で渡す\n"
+#~ " -h, --help このヘルプメッセージを表示して終了する\n"
+#~ " -m, --md5 与えたパスワードが暗号化されていない場"
+#~ "合、\n"
+#~ " MD5 アルゴリズムで暗号化する\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "使い方: chsh [オプション]\n"
+#~ "\n"
+#~ "オプション:\n"
+#~ " -h, --help このヘルプメッセージを表示して終了する\n"
+#~ " -s, --shell SHELL ユーザのシェルを新たに SHELL にする\n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "使い方: expiry {-f|-c}\n"
+
+#~ msgid "faillog: Failed to get the entry for UID %lu\n"
+#~ msgstr "faillog: UID %lu のエントリを取得できませんでした\n"
+
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "faillog: ファイル %s を開けません: %s\n"
+
+#~ msgid "faillog: Cannot get the size of %s: %s\n"
+#~ msgstr "faillog: %s のサイズを取得できませんでした: %s\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "使い方: groupdel グループ\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "使い方: %s [-r] [-s] [group [gshadow]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "使い方: %s [-r] [-s] [group]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: -s と -r は同時に指定できません\n"
+
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "使い方: grpconv\n"
+
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "使い方: grpunconv\n"
+
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "使い方: lastlog [オプション]\n"
+#~ "\n"
+#~ "オプション:\n"
+#~ " -b, --before DAYS DAYS 日より以前の lastlog 記録だけを表示す"
+#~ "る\n"
+#~ " -h, --help このヘルプメッセージを表示して終了する\n"
+#~ " -t, --time DAYS DAYS 日前以降の lastlog 記録だけを表示す"
+#~ "る\n"
+#~ " -u, --user LOGIN 指定ユーザ LOGIN の lastlog 記録を表示す"
+#~ "る\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "使い方: passwd [オプション] [ログイン名]\n"
+#~ "\n"
+#~ "オプション:\n"
+#~ " -a, --all 全アカウントのパスワード状態をレポートす"
+#~ "る\n"
+#~ " -d, --delete 指定アカウントのパスワードを削除する\n"
+#~ " -e, --expire 指定アカウントのパスワードを期限切れにす"
+#~ "る\n"
+#~ " -h, --help このヘルプメッセージを表示して終了する\n"
+#~ " -k, --keep-tokens 期限切れの場合にのみパスワードを変更する\n"
+#~ " -i, --inactive INACTIVE 期限切れ後のパスワード無効化日数を\n"
+#~ " INACTIVE にする\n"
+#~ " -l, --lock 指定アカウントをロックする\n"
+#~ " -n, --mindays MIN_DAYS パスワードが変更できるまでの最短日数を\n"
+#~ " MIN_DAYS に変更する\n"
+#~ " -q, --quiet 表示抑制モード\n"
+#~ " -r, --repository REPOSITORY リポジトリ REPOSITORY のパスワードを変更す"
+#~ "る\n"
+#~ " -S, --status 指定アカウントのパスワードの状態を報告す"
+#~ "る\n"
+#~ " -u, --unlock 指定アカウントのロックを解除する\n"
+#~ " -w, --warndays WARN_DAYS 期限切れ警告の日数を WARN_DAYS にする\n"
+#~ " -x, --maxdays MAX_DAYS パスワードが変更できる期間の最長日数を\n"
+#~ " MAX_DAYS に変更する\n"
+#~ "\n"
+
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr "使い方: %s [-q] [-r] [passwd [shadow]]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr "使い方: %s [-q] [-r] [-s] [パスワード [シャドウ]]\n"
+
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "使い方: pwconv\n"
+
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "使い方: pwunconv\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "不明な ID です: %s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "シェルがありません\n"
+
+#~ msgid ""
+#~ "Usage: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force removal of files,\n"
+#~ " even if not owned by user\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -r, --remove remove home directory and mail spool\n"
+#~ "\n"
+#~ msgstr ""
+#~ "使い方: userdel [オプション] ログイン名\n"
+#~ "\n"
+#~ "オプション:\n"
+#~ " -f, --force 当該ユーザの所有でないファイルも削除する\n"
+#~ " -h, --help このヘルプを表示して終了する\n"
+#~ " -r, --remove ホームディレクトリとメールスプールを削除す"
+#~ "る\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "使い方: usermod [オプション] ログイン名\n"
+#~ "\n"
+#~ "オプション:\n"
+#~ " -c, --comment COMMENT GECOS フィールドの値を再設定する\n"
+#~ " -d, --home HOME_DIR ユーザアカウントのホームディレクトリを\n"
+#~ " 再設定する\n"
+#~ " -e, --expiredate EXPIRE_DATE アカウント期限切れの日を EXPIRE_DATE にす"
+#~ "る\n"
+#~ " -f, --inactive INACTIVE パスワードを期限切れ後に無効化する日数を\n"
+#~ " INACTIVEにする\n"
+#~ " -g, --gid GROUP 主グループを GROUP に変更する\n"
+#~ " -G, --groups GROUPS 新たな補助グループのリストを与える\n"
+#~ " -a, --append ユーザを (-G で指定された) 補助グループ"
+#~ "群\n"
+#~ " GROUPS に追加する。他のグループからの削除"
+#~ "は\n"
+#~ " 行わない。\n"
+#~ " -h, --help このヘルプを表示して終了する\n"
+#~ " -l, --login NEW_LOGIN ログイン名を変更する\n"
+#~ " -L, --lock このユーザアカウントをロックする\n"
+#~ " -m, --move-home 現ホームディレクトリの内容を新たな場所に\n"
+#~ " 移動する (-d が指定された場合のみ)\n"
+#~ " -o, --non-unique 一意でないユーザ (UID の重なるユーザ) を\n"
+#~ " 許可する\n"
+#~ " -p, --password PASSWORD 新たな暗号化済みパスワードを与える\n"
+#~ " -s, --shell SHELL このユーザのログインシェルを変更する\n"
+#~ " -u, --uid UID このユーザの UID を変更する\n"
+#~ " -U, --unlock このユーザアカウントのロックを解除する\n"
+#~ "%s\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s: ひとつもフラグが指定されていません\n"
diff --git a/po/kk.gmo b/po/kk.gmo
new file mode 100644
index 0000000..f963da7
--- /dev/null
+++ b/po/kk.gmo
Binary files differ
diff --git a/po/kk.po b/po/kk.po
new file mode 100644
index 0000000..e91a747
--- /dev/null
+++ b/po/kk.po
@@ -0,0 +1,3262 @@
+# shadowutils to kazakh.
+# Copyright (C) 2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# Baurzhan Muftakhidinov <baurthefirst@gmail.com>, 2009-2017.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadowutils\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2017-02-07 17:09+0500\n"
+"Last-Translator: Baurzhan Muftakhidinov <baurthefirst@gmail.com>\n"
+"Language-Team: Kazakh <kk_KZ@googlegroups.com>\n"
+"Language: kk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 1.8.11\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"'%s' атындағы %s ішінде бірнеше жазба бар. Оны pwck не grpck көмегімен "
+"дұрыстаңыз.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "шифрлеу тәсіліне libcrypt-тан қолдау жоқ па? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr "баптаулар қатесі - %s мәнін талдау мүмкін емес: '%s'"
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Баптауларды жүктеу үшін орын жоқ.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "баптау қатесі - белгісіз элемент '%s' (администраторға хабарласыңыз)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr "%s: nscd өз жұмысын дұрыс аяқтаған жоқ (%d сигналымен)\n"
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr "%s: nscd %d қалып-күймен өз жұмысын аяқтады\n"
+
+msgid "Password: "
+msgstr "Пароль: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s пайдаланушының паролі: "
+
+#, fuzzy
+#| msgid "Cannot open audit interface - aborting.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "Аудит интерфейсін ашу мүмкін емес - шығу.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr "[libsemanage]: %s\n"
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr "SELinux басқарушы ұстағышын жасау мүмкін емес\n"
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr "SELinux саясаты басқарылып жатқан жоқ\n"
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr "SELinux саясаттарын сақтау қорын оқу сәтсіз\n"
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr "SELinux басқарушы байланысын орнату мүмкін емес\n"
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr "SELinux әрекетін бастау мүмкін емес\n"
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr "seuser %s үшін сұрау сәтсіз\n"
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr "%s үшін serange орнату мүмкін емес\n"
+
+#, c-format
+msgid "Could not set sename for %s\n"
+msgstr "%s үшін sename орнату мүмкін емес\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr "%s үшін тіркелгі сәйкестігін түзету мүмкін емес\n"
+
+#, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "%s үшін SELinux тіркелгі сәйкестігін жасау мүмкін емес\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr "%s үшін атын орнату мүмкін емес\n"
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr "%s үшін SELinux пайдаланушысын орнату мүмкін емес\n"
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr "%s үшін тіркелгі сәйкестігін қосу мүмкін емес\n"
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr "SELinux басқаруын іске қосу мүмкін емес\n"
+
+#, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "SELinux пайд.-шы кілтін жасау мүмкін емес\n"
+
+#, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "SELinux пайдаланушысын тексеру мүмкін емес\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr "SELinux пайд. сәйкестігін түзету мүмкін емес\n"
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr "SELinux пайд. сәйкестігін қосу мүмкін емес\n"
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr "SELinux әрекетін іске асыру мүмкін емес\n"
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+"%s үшін тіркелгі сәйкестігі анықталмаған, бастапқы сәйкестк қолданылған "
+"болса ОК\n"
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr "%s үшін тіркелгі сәйкестігі саясатта анықталған, өшіруге мүмкін емес\n"
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr "%s үшін тіркелгі сәйкестігін өшіру мүмкін емес"
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: жады жеткіліксіз\n"
+
+#, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: %s табылмады: %s\n"
+
+#, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: %s бума да, сілтеме де емес.\n"
+
+#, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: %s символдық сілтемесін оқу мүмкін емес: %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr "%s: Күдіктілі ұзын символдық сілтеме: %s\n"
+
+#, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: %s бумасын жасау мүмкін емес: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: %s үшін иені ауыстыру мүмкін емес: %s\n"
+
+#, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: %s үшін режимді ауыстыру мүмкін емес: %s\n"
+
+#, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: unlink: %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: %s бумасын өшіру мүмкін емес: %s\n"
+
+#, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: %s атын %s етіп орнату мүмкін емес: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: %s өшіру мүмкін емес: %s\n"
+
+#, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: %s символдық сілтемесін жасау мүмкін емес: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: %s үшін иелерді өзгерту мүмкін емес: %s\n"
+
+#, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: lstat %s мүмкін емес: %s\n"
+
+#, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: Ескерту, %s пайдаланушысында tcb shadow файлы жоқ.\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+"%s: Төтенше жағдай: %s үшін tcb shadow қалыпты, st_nlink=1, файл емес.\n"
+"Тіркелгі блокталған күйінде қалдырылады.\n"
+
+#, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: mkdir: %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: %s ашу мүмкін емес: %s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Ескерту: белгісіз топ %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Ескерту: топ саны тым көп\n"
+
+msgid "Your password has expired."
+msgstr "Пароліңіздің мерзімі аяқталған."
+
+msgid "Your password is inactive."
+msgstr "Пароліңіз белсенді емес."
+
+msgid "Your login has expired."
+msgstr "Тіркелгіңіздің мерзімі аяқталған."
+
+msgid " Contact the system administrator."
+msgstr " Жүйелік администраторыңызға хабарласыңыз."
+
+msgid " Choose a new password."
+msgstr " Жаңа парольді таңдаңыз."
+
+msgid "You must change your password."
+msgstr "Сіз пароліңізді ауыстыруға тиістісіз."
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Пароліңіздің мерзімі %ld күнде аяқталады.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Пароліңіздің мерзімі ертең аяқталады."
+
+msgid "Your password will expire today."
+msgstr "Пароліңіздің мерзімі бүгін аяқталады."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "Аудит интерфейсін ашу мүмкін емес - шығу.\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Терминал иесін не рұқстатын өзгерту мүмкін емес: %s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: %s босату сәтсіз\n"
+
+#, c-format
+msgid "%s: "
+msgstr "%s: "
+
+msgid ": "
+msgstr ": "
+
+msgid "Environment overflow\n"
+msgstr "Орындалу орта айнымалыларының шектен көп саны\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Сіз $%s өзгерте алмайсыз\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"Жүйеге кірудің %d-ші қате талабы.\n"
+"Соңғысы %s болған, терминал %s.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: Қате баптаулар: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr "%s: Қате баптаулар: GID_MIN (%lu), GID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "%s: жадыны бөлу сәтсіз: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr "%s: Ерекше жүйелік GID алу мүмкін емес (бос GID-тар қалмады)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: Ерекше GID алу мүмкін емес (бос GID-тар қалмады)\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: Ерекше GID алу мүмкін емес (бос GID-тар қалмады)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+"%s: Қате баптаулар: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX (%lu)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't find subordinate user range\n"
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: бағынышты пайдаланушы ауқымын табу мүмкін емес\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+"%s: Қате баптаулар: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX (%lu)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't find subordinate user range\n"
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: бағынышты пайдаланушы ауқымын табу мүмкін емес\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: Қате баптаулар: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr "%s: Қате баптаулар: UID_MIN (%lu), UID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr "%s: Ерекше жүйелік UID алу мүмкін емес (бос UID-тар қалмады)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: Ерекше жүйелік UID алу мүмкін емес (бос UID-тар қалмады)\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: Ерекше жүйелік UID алу мүмкін емес (бос UID-тар қалмады)\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Authentication failure\n"
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: Аутентификация қатесі\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: '%s' өрісі қате\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Could not set name for %s\n"
+msgid "%s: Could not seteuid to %d\n"
+msgstr "%s үшін атын орнату мүмкін емес\n"
+
+#, fuzzy, c-format
+#| msgid "Could not set name for %s\n"
+msgid "%s: Could not set caps\n"
+msgstr "%s үшін атын орнату мүмкін емес\n"
+
+#, c-format
+msgid "%s: snprintf failed!\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: жол %d: chown %s сәтсіз: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: жол %d: chown %s сәтсіз: %s\n"
+
+msgid "Too many logins.\n"
+msgstr "Жүйеге кірудің шектен көп талап саны.\n"
+
+msgid "You have new mail."
+msgstr "Сізде жаңа пошта бар."
+
+msgid "No mail."
+msgstr "Пошта жоқ."
+
+msgid "You have mail."
+msgstr "Сізде пошта бар."
+
+msgid "no change"
+msgstr "өзгерістер жоқ"
+
+msgid "a palindrome"
+msgstr "палиндром"
+
+msgid "case changes only"
+msgstr "өзгерістер тек таңбалардың регистрінде ғана"
+
+msgid "too similar"
+msgstr "өте ұқсас"
+
+msgid "too simple"
+msgstr "өте оңай"
+
+msgid "rotated"
+msgstr "аударылған"
+
+msgid "too short"
+msgstr "өте қысқа"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Пароль жаман: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() ішіндегі %d қатесі\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+msgid "passwd: password unchanged\n"
+msgstr "passwd: пароль өзгертілмеді\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: пароль сәтті жаңартылды\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: %s репозиторийіне қолдау жоқ\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start: қате %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd: pam_start() ішіндегі %d қатесі\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "%s үшін қате пароль.\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr "%s: бірнеше --root опциясы\n"
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr "%s: '%s' опциясы аргументті талап етеді\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: привилегиялар деңгейін төмендету мүмкін емес (%s)\n"
+
+#, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: '%s' chroot жолы қате\n"
+
+#, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: %s chroot бумасына қатынау мүмкін емес: %s\n"
+
+#, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: %s chroot бумасына өту (chdir) мүмкін емес: %s\n"
+
+#, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: %s бумасына chroot жасау мүмкін емес: %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"Қате ENCRYPT_METHOD мәні: '%s'.\n"
+"Бастапқы DES мәні қолданылады.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "'%s' бумасына ауысу мүмкін емес\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Бума табылмады, HOME=/ бумасына кіру орындалады"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "%s орындау мүмкін емес"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "'%s' түбірлік бумасы қате\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Түбірлік бумасын '%s' мәніне ауыстыру мүмкін емес\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: %s пайдаланушысы қазір жүйеге кіріп тұр\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: %s пайдаланушысы қазір жүйеге кіріп тұр\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Терминалыңыздың атын анықтау мүмкін емес."
+
+msgid "No"
+msgstr "Жоқ"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Қолданылуы: %s [опциялар] ТІРКЕЛГІ\n"
+"\n"
+"Опциялар:\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+" -d, --lastday LAST_DAY парольдің аяқталу мерзімін LAST_DAY күніне "
+"орнату\n"
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -E, --expiredate EXPIRE_DATE тіркелгінің аяқталу мерзімі EXPIRE_DATE "
+"күніне орнату\n"
+
+msgid " -h, --help display this help message and exit\n"
+msgstr " -h, --help осы көмек ақпаратын көрсету мен шығу\n"
+
+#, fuzzy
+#| msgid " -g, --group edit group database\n"
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr " -g, --group топ дерекқорын түзету\n"
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -I, --inactive INACTIVE парольдің мерзімі біткен соң оны INACTIVE "
+"болып\n"
+" орнату үшін өтетін күн саны\n"
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+" -l, --list тіркелгінің жұмыс уақыты ақпаратын көрсету\n"
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -m, --mindays MIN_DAYS парольді ауыстыру арасында өту керек ең аз "
+"күн санын\n"
+" MIN_DAYS мәніне орнату\n"
+
+#, fuzzy
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -M, --maxdays MAX_DAYS парольді ауыстыру арасында өту керек ең көп "
+"сүн санын\n"
+" MAX_DAYS мәніне орнату\n"
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr " -R, --root CHROOT_DIR chroot үшін бума\n"
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -W, --warndays WARN_DAYS мерзімі аяқталу туралы хабарламаны WARN_DAYS "
+"күн қалғанда көрсете бастау\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Жаңа мәнді енгізіңіз, немесе ұсынылатынды қабылдау үшін ENTER басыңыз"
+
+msgid "Minimum Password Age"
+msgstr "Парольдің ең аз жасау мерзімі (күн)"
+
+msgid "Maximum Password Age"
+msgstr "Парольдің ең көп жасау мерзімі (күн)"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Парольді соңғы ауыстыру (ЖЖЖЖ-АА-КК)"
+
+msgid "Password Expiration Warning"
+msgstr "Мерзімі аяқталу туралы хабарламаны көрсету (күн саны)"
+
+msgid "Password Inactive"
+msgstr "Тіркелгіні күн өткенде сөндіру (күн саны)"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Тіркелгінің мерзімі аяқталатын күні (ЖЖЖЖ-АА-КК)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Парольді соңғы ауыстыру\t\t\t\t\t: "
+
+msgid "never"
+msgstr "ешқашан"
+
+msgid "password must be changed"
+msgstr "пароль өзгертілу керек"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Парольдің мерзімі бітеді\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Пароль сөндіріледі\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Тіркелгі сөндіріледі\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Парольді ауыстыру арасында өту керек ең аз күн саны\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Парольді ауыстыру арасында өту керек ең көп күн саны\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Пароль аяқталуы туралы хабарлауды бастау, күн саны\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: '%s' күні қате\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: қате сан аргументі '%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: \"l\" опциясын басқалармен бірге қолданбаңыз\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Рұқсат жоқ.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Сіздің пайдаланушы атын анықтау мүмкін емес.\n"
+
+#, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: PAM: %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: %s оқшаулау сәтсіз; кейін қайталаңыз.\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: %s ашу мүмкін емес\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: %s ішіне өзгерістерді сақтау кезінде қате кетті\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: жаңа %s '%s' жазбаны дайындау мүмкін емес\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: көлеңкелі парольдер файлын жоқ болып тұр\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: '%s' пайдаланушысы %s ішінде жоқ\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "%s үшін мерзім ақпаратын өзгерту\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: жолдарды өзгерту қатесі\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Қолданылуы: %s [опциялар] [ТІРКЕЛГІ]\n"
+"\n"
+"Опциялар:\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr " -f, --full-name FULL_NAME пайд.-ның толық атын ауыстыру\n"
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+" -h, --home-phone HOME_PHONE пайд.-ның үй телефон нөмірін ауыстыру\n"
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+" -o, --other OTHER_INFO пайд.-ның басқа GECOS ақпаратын өзгерту\n"
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr " -r, --room ROOM_NUMBER пайд.-ның бөлме нөмірін ауыстыру\n"
+
+msgid " -u, --help display this help message and exit\n"
+msgstr " -u, --help осы көмек ақпаратын көрсету мен шығу\n"
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+" -w, --work-phone WORK_PHONE пайд.-ның жұмыс телефон нөмірін ауыстыру\n"
+
+msgid "Full Name"
+msgstr "Толық аты"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "Бөлме нөмірі"
+
+msgid "Work Phone"
+msgstr "Жұмыс телефон нөмірі"
+
+msgid "Home Phone"
+msgstr "Үй телефон нөмірі"
+
+msgid "Other"
+msgstr "Басқа"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Суперпайдаланушы (root) құқығын алу мүмкін емес.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: ASCII-емес таңбалары бар аты: '%s'\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: пайдаланушы аты қате: '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s: ASCII-емес таңбалары бар бөлме: '%s'\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: бөлме нөмірі қате: '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: жұмыс телефон нөмірі қате: '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: үй телефон нөмірі қате: '%s'\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s' құрамында ASCII-емес таңбалар бар\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s' құрамында қате таңбалар бар\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: пайдаланушы '%s' жоқ болып тұр\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: NIS клиентінде '%s' пайдаланушыны ауыстыруға мүмкін емес.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: '%s' - бұл клиент үшін NIS сервері.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "%s үшін пайдаланушы ақпаратын өзгерту\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: жолдар өте ұзын\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Қолданылуы: %s [опциялар]\n"
+"\n"
+"Опциялар:\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr " -c, --crypt-method METHOD шифрлеу тәсілі (келесіден біреу: %s)\n"
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr " -e, --encrypted берілген парольдер шифрленген\n"
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+" -m, --md5 MD5 алгоритмін пайдаланып, таза мәтінді\n"
+" парольді шифрлеу\n"
+
+#, fuzzy
+#| msgid ""
+#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
+#| " crypt algorithms\n"
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+" -s, --sha-rounds SHA* тектес алгоритмдер үшін SHA\n"
+" раундтар саны\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: %s жалаушасын тек %s жалаушасымен бірге қолдануға болады\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: -c, -e, және -m жалаушалары өзара үйлеспейді\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: қолдауы жоқ шифрлеу тәсілі: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: жол %d: жол өте ұзын\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: жол %d: жаңа пароль жоқ\n"
+
+#, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: парольді '%s' тұзымен шифрлеу сәтсіз аяқталды: %s\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: жол %d: '%s' тобы жоқ болып тұр\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: жол %d: жаңа %s '%s' жазбаны дайындау мүмкін емес\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: қателер орын алды, өзгерістер сақталмады\n"
+
+#, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: (жол %d, пайдаланушы %s) пароль өзгертілмеген\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: жол %d: пайдаланушы '%s' жоқ болып тұр\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+" -s, --shell SHELL пайдаланушы тіркелгісі үшін жаңа қоршам\n"
+
+msgid "Login Shell"
+msgstr "Қоршам"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Сіз '%s' үшін қоршамды өзгерте алмайсыз.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "%s үшін қоршамды өзгерту\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Қате мән: %s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s: %s дұрыс қоршам емес\n"
+
+#, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: Ескерту: %s жоқ болып тұр\n"
+
+#, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: Ескерту: %s орындалатын емес\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+" -c, --check пайд.-шы паролінің аяқталу мерзімін тексеру\n"
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+" -f, --force пайд.-шы паролінің мерзімі бітсе, парольді\n"
+" ауыстыруға мәжбүрлету\n"
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: %s пен %s опциялары өзара ерегіседі\n"
+
+#, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "%s: күтпеген аргумент: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+" -a, --all барлық пайдаланушылар үшін faillog "
+"жазбаларын көрсету\n"
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+" -l, --lock-secs СЕК сәтсіз кіру талабынан кейін тіркелгіні СЕК "
+"секундқа блоктау\n"
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+" -m, --maximum МАКС сәтсіз кіру талап сан максимумын МАКС етіп "
+"орнату\n"
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr " -r, --reset сәтсіз кіру талап санағышын нөлдеу\n"
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time КҮН КҮНнен кейін болған faillog жазбаларын "
+"көрсету\n"
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+" -u, --user ТІРКЕЛГІ/АРАЛЫҚ тек көрсетілген ТІРКЕЛГІ(лер) үшін faillog "
+"жазбасын\n"
+" көрсету не санағыштарды мен лимиттерді (егер "
+"-r, -m,\n"
+" не -l бірге көрсетілсе) басқару\n"
+
+#, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: UID %lu үшін жазбаны алу мүмкін емес\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "Пайд.-шы Сәтсіз кірулер Макс. Соңғы Қайда\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr " [%lus қалды]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds оқшаулар саны]"
+
+#, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr ""
+"%s: UID %lu үшін сәтсіз кіру талаптар санағышын нөлдеу сәтсіз аяқталды\n"
+
+#, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: UID %lu үшін макс мәнін орнату сәтсіз аяқталды\n"
+
+#, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: UID %lu үшін блоктау уақытын орнату сәтсіз аяқталды\n"
+
+#, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "%s: Белгісіз пайдаланушы не аралық: %s\n"
+
+#, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: %s өлшемін алу мүмкін емес: %s\n"
+
+#, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: %s жазу сәтсіз: %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Қолданылуы: %s [опция] ТОП\n"
+"\n"
+"Опциялар:\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr " -a, --add ПАЙД ПАЙДаланушыны ТОПқа қосу\n"
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr " -d, --delete ПАЙД ПАЙДаланушыны ТОПтан өшіру\n"
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr " -Q, --root CHROOT_DIR chroot үшін бума\n"
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr " -r, --remove-password ТОП паролін өшіру\n"
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+" -R, --restrict ТОПқа қатынауды тек оның мүшелерімен шектеу\n"
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr " -M, --members ПАЙД,... ТОП мүшелерін орнату\n"
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+" -A, --administrators ӘКІМШІ,...\n"
+" ТОП үшін әкімшілер тізімін орнату\n"
+
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+"Бұл опцияларды, -A және -M опцияларынан басқа, бірге қолдануға болмайды.\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "Бұл опцияларды бірге қолдануға болмайды.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: -A үшін көлеңкелі парольдер файлына қолдау керек\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: '%s' тобы %s ішінде жоқ болып тұр\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: тек оқу үшін %s жабу қатесі\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "%s тобы үшін парольді өзгерту\n"
+
+msgid "New Password: "
+msgstr "Жаңа пароль:"
+
+msgid "Re-enter new password: "
+msgstr "Жаңа парольді қайта енгізіңіз:"
+
+msgid "They don't match; try again"
+msgstr "Олар сәйкес емес; қайтадан енгізіңіз"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Кейінірек қайталап көріңіз\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "%s пайдаланушысын %s тобына қосу\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "%s пайдаланушысын %s тобынан өшіру\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: '%s' пайдаланушысы '%s' мүшесі емес\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Терминал емес\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Қолданылуы: %s [опциялар] ТОП\n"
+"\n"
+"Опциялар:\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+" -f, --force топ бар болса сәтті шығу, ал GID қолдануда "
+"болса,\n"
+" -g опциясынан бас тарту\n"
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr " -g, --gid GID жаңа топ үшін GID қолдану\n"
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+" -K, --key KEY=VALUE /etc/login.defs бастапқы мәндерін алмастыру\n"
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique қайталанатын (ерекше емес) GID бар топтарды\n"
+" жасауға рұқсат ету\n"
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+" -p, --password ПАРОЛЬ бұл шифрленген парольді жаңа топ үшін "
+"қолдану\n"
+
+msgid " -r, --system create a system account\n"
+msgstr " -r, --system жүйелік тіркелгіні жасау\n"
+
+#, fuzzy
+#| msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr " -R, --root CHROOT_DIR chroot үшін бума\n"
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: '%s' дұрыс топ аты емес\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: қате топ ID-і '%s'\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K талап етеді KEY=МӘНІ\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: '%s' тобы бар болып тұр\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s: GID '%lu' бар болып тұр\n"
+
+#, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: Тазарту қызметін орнату мүмкін емес.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+" -f, --force топты өшіру, егер ол пайдаланушының "
+"біріншілік тобы болса да\n"
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: '%s' жазбасын %s ішінен өшіру мүмкін емес\n"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: '%s' пайдаланушының басты тобын өшіру мүмкін емес\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: '%s' тобы жоқ болып тұр\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: '%s' тобы NIS тобы болып тұр\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s қазір NIS сервері болып тұр\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: '%s' пайдаланушысы '%s' тобының мүшесі болып тұр\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: Жады жеткіліксіз. %s жаңарту мүмкін емес.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Қолданылуы: %s [опциялар] [әрекет]\n"
+"\n"
+"Опциялар:\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+" -g, --group топ_аты пайд. тобы орнына топты көрсету\n"
+" (тек root)\n"
+
+msgid "\n"
+msgstr "\n"
+
+msgid "Actions:\n"
+msgstr "Әрекеттер:\n"
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+" -a, --add пайд_аты пайдаланушыны топтың мүшелер тізіміне қосу\n"
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr " -d, --delete пайд_аты пайдаланушыны топтан өшіру\n"
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr " -p, --purge топтан барлық мүшелерді өшіру\n"
+
+msgid " -l, --list list the members of the group\n"
+msgstr " -l, --list топ мүшелердің тізімін шығару\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: сіздің топ атыңыз пайдаланушы атыңызға сәйкес келмейді\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s: тек root -g/--group опциясын қолдана алады\n"
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr " -g, --gid GID топ ID-ін GID мәніне орнату\n"
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr " -n, --new-name ЖАҢА_ТОП атын жаңа ЖАҢА_ТОП атына орнату\n"
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique қайталанатын (ерекше емес) GID қолдануға "
+"рұқсат ету\n"
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+" -p, --password ПАРОЛЬ парольді осы ПАРОЛЬге (шифрленген) оранту\n"
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: қате топ аты '%s'\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: %s тобы NIS тобы болып тұр\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: белгісіз пайдаланушы %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Қолданылуы: %s [опциялар] [group [gshadow]]\n"
+"\n"
+"Опциялар:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Қолданылуы: %s [опциялар] [group]\n"
+"\n"
+"Опциялар:\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+" -r, --read-only қателер мен ескертулерді көрсету,\n"
+" бірақ файлдарға тиіспеу\n"
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr " -s, --sort жазбаларды UID б/ша сұрыптау\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s пен -r өзара үйлеспейді\n"
+
+msgid "invalid group file entry"
+msgstr "group файл ішінде қате жазба"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "'%s' жолын өшіру керек пе? "
+
+msgid "duplicate group entry"
+msgstr "қайталанатын топ жазбасы"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "қате топ аты '%s'\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "қате топ ID-і '%lu'\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "%s тобы: %s пайдаланушы жоқ\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "'%s' қатысушыны өшіру керек пе? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "%s ішінде сәйкес көлеңкелі топ жазбасы жоқ\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "'%s' тобын %s ішіне қосу керек пе?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"%s тобының %s ішінде жазбасы бар, бірақ оның %s ішіндегі пароль жазбасы 'x' "
+"етіп орнатылмаған\n"
+
+msgid "invalid shadow group file entry"
+msgstr "көлеңкелі топтар файлының қате жазбасы"
+
+msgid "duplicate shadow group entry"
+msgstr "қайталанатын көлеңкелі топтар жазбасы"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "көлеңкелі топ %s: %s әкімші пайдаланушысы жоқ\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "'%s' әкімші пайдаланушысын өшіру керек пе? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "көлеңкелі топ %s: %s пайдаланушысы жоқ\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: файлдар жаңартылды\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: өзгерістер жоқ\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: %s өшіру мүмкін емес\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Қолданылуы: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Қолданылуы: id\n"
+
+msgid " groups="
+msgstr " топтар="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+" -b, --before КҮН мерзімі КҮНнен үлкен ғана lastlog жазбаларын "
+"көрсету\n"
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+" -C, --clear пайдаланушының lastlog жазбасын тазарту (тек "
+"-u опциясымен бірге пайдаланылады)\n"
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+" -S, --set lastlog жазбасын ағымдағы уақытқа орнату "
+"(тек -u опциясымен бірге пайдаланылады)\n"
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time КҮН мерзімі КҮНнен кіші ғана lastlog жазбаларын "
+"көрсету\n"
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+" -u, --user ТІРКЕЛГІ көрсетілген ТІРКЕЛГІ үшін lastlog жазбаларын "
+"көрсету\n"
+
+msgid "Username Port From Latest"
+msgstr "Пайдаланушы Порт Қайдан Соңғы"
+
+msgid "Username Port Latest"
+msgstr "Пайдаланушы Порт Соңғы"
+
+msgid "**Never logged in**"
+msgstr "**Жүйеге ешқашан кірмеген**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s: UID %lu үшін жазбаны жаңарту сәтсіз аяқталды\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s: lastlog файлын жаңарту сәтсіз аяқталды\n"
+
+#, c-format
+msgid "%s: Option -C cannot be used together with option -S\n"
+msgstr "%s: -C опциясын -S опциясымен бірге қолдануға болмайды\n"
+
+#, c-format
+msgid "%s: Options -C and -S require option -u to specify the user\n"
+msgstr ""
+"%s: -C және -S опциялары пайдаланушыны көрсету үшін -u опциясын талап етеді\n"
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Қолданылуы: %s [-p] [аты]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h хост] [-f аты]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r хост\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr "баптау қатесі - %s мәнің өндеу мүмкін емес: '%d'"
+
+msgid "Invalid login time"
+msgstr "Жүйеге кірудің қате уақыты"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Жүйе техникалық жөндеуді өткізу үшін жабылған"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Жүйеден мәжбүрлі шығу орындалмады -- root үшін жүйеге кіруге рұқсат "
+"етілген.]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr "%s: Эффективті root-сыз жұмыс істемеуі мүмкін\n"
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Utmp жазбасы жоқ. Сізге exec \"login\" командасын бірінші деңгейден \"sh\" "
+"қосу керек"
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Жүйеге кіру уақыты %u секундтан кейін аяқталды.\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM қатесі, тоқтатылды: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s пайдаланушы аты: "
+
+msgid "login: "
+msgstr "пайдаланушы аты:"
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Талаптар саны шектен асты (%u)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: тоқтатуды PAM сұраған\n"
+
+msgid "Login incorrect"
+msgstr "Жүйеге кіру орындалмады"
+
+#, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "Пайдаланушыны табу мүмкін емес (%s)\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s пайдаланушы аты: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: үрдісті бастау қатесі: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "%s үшін TIOCSCTTY орындау қатемен аяқталды"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Ескерту: тіркелгі уақытша сөндірілгеннен кейін қайта қосылған."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Жүйеге соңғы кіру: %s, терминал %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Жүйеге соңғы кіру: %.19s, терминал %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " қайдан: %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"жүйеге кіру уақыты өтті\n"
+"\n"
+
+msgid "Usage: logoutd\n"
+msgstr "Қолданылуы: logoutd\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, c-format
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: %s өшіру сәтсіз аяқталды\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: %s өшіру сәтсіз аяқталды\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to unlock %s\n"
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: %s босату сәтсіз\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to find tcb directory for %s\n"
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: %s үшін tcb бумасын табу сәтсіз\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Failed to create tcb directory for %s\n"
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: %s үшін tcb бумасын жасау мүмкін емес\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Қолданылуы: newgrp [-] [топ]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Қолданылуы: sg топ [[-c] командасы]\n"
+
+#, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: парольді алдыңғы тұзбен шифрлеу сәтсіз аяқталды: %s\n"
+
+msgid "Invalid password.\n"
+msgstr "пароль қате.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: үрдісті бастау қатесі: %s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: '%lu' GID-і жоқ болып тұр\n"
+
+msgid "too many groups\n"
+msgstr "топ саны шектен тыс\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+#, fuzzy
+#| msgid " -q, --quiet quiet mode\n"
+msgid " -b, --badnames allow bad names\n"
+msgstr " -q, --quiet тыныш режимі\n"
+
+msgid " -r, --system create system accounts\n"
+msgstr " -r, --system жүйелік тіркелгіні жасау\n"
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr ""
+"%s: топ '%s' shadow тобы болып тұр, бірақ /etc/group ішінен табылмады\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: пайдаланушы ID-і '%s' қате\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: '%s' пайдаланушы аты қате\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: жол %d: жол қате\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: %s пайдаланушы жазбасын жаңарту мүмкін емес (passwd дерекқорында жоқ)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: жол %d: пайдаланушыны жасау мүмкін емес\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: жол %d: топты жасау мүмкін емес\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: жол %d: '%s' пайдаланушысы %s ішінде жоқ\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: жол %d: парольді жаңарту мүмкін емес\n"
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: жол %d: mkdir %s сәтсіз: %s\n"
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: жол %d: chown %s сәтсіз: %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: жол %d: жазбаны жаңарту мүмкін емес\n"
+
+#, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: жаңа %s жазбасын дайындау сәтсіз аяқталды\n"
+
+#, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: бағынышты пайдаланушы ауқымын табу мүмкін емес\n"
+
+#, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: бағынышты топ ауқымын табу мүмкін емес\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+" -a, --all барлық тіркелгілер үшін парольдер күйін "
+"шығару\n"
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+" -d, --delete көрсетілген тіркелгі үшін парольді өшіру\n"
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+" -e, --expire көрсетілген тіркелгі үшін пароль мерзімінің "
+"аяқталуын мәжбүрлету\n"
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+" -k, --keep-tokens парольді тек мерзімі аяқталса ғана өзгерту\n"
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -i, --inactive INACTIVE мерзімі аяқталғаннан кейін тіркелгіні "
+"сөндіру үшін\n"
+" керек күн санын INACTIVE мәніне орнату\n"
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr " -l, --lock көрсетілген тіркелгіні оқшаулау\n"
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -n, --mindays MIN_DAYS парольді өзгерту арасында ең аз рұқсат "
+"етілген күн санын\n"
+" MIN_DAYS мәніне орнату\n"
+
+msgid " -q, --quiet quiet mode\n"
+msgstr " -q, --quiet тыныш режимі\n"
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+" -r, --repository REPOSITORY REPOSITORY репозиторийінде парольді өзгерту\n"
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+" -S, --status көрсетілген тіркелгі үшін пароль күйін "
+"шығару\n"
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+" -u, --unlock көрсетілген тіркелгіні оқшаулаудан босату\n"
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -w, --warndays WARN_DAYS мерзімі аяқталуы туралы WARN_DAYS қалғанда "
+"ескерте бастау\n"
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -x, --maxdays MAX_DAYS парольді өзгерту арасында ең көп рұқсат "
+"етілген күн санын\n"
+" MAX_DAYS мәніне орнату\n"
+
+msgid "Old password: "
+msgstr "Ағымдағы пароль:"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Жаңа парольді енгізіңіз (минимум %d белгі болсын)\n"
+"Парольді бас, кіші әріптер және сандарды араластыра қолданып құраңыз.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Жаңа парольді енгізіңіз (минимум %d, максимум %d белгі болсын)\n"
+"Парольді бас, кіші әріптер және сандарды араластыра қолданып құраңыз.\n"
+
+msgid "New password: "
+msgstr "Жаңа пароль:"
+
+msgid "Try again."
+msgstr "Қайталап көріңіз."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Ескерту: өте оңай пароль (қолданам десеңіз қайта енгізіңіз)."
+
+msgid "They don't match; try again.\n"
+msgstr "Олар өзара сәйкес емес; қайтадан көріңіз.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "%s үшін парольді өзгертуге болмайды.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "%s үшін парольді қазір өзгертуге болмайды.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: пайдаланушыны оқшаулаудан босату парольсіз тіркелгіге әкелуі мүмкін.\n"
+"Осыны жасау үшін сіз оған парольді usermod -p қолданып орнатуыңыз керек.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: %s репозиторийіне қолдау жоқ\n"
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not authorized to change the password of %s\n"
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr "%s: %s пайдаланушының %s үшін паролді өзгертуге құқығы жоқ\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Сізде%s үшін парольдік ақпаратты оқи не өзгерте алмайсыз.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "%s үшін парольді өзгерту\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "%s пайдаланушының паролі өзгертілмеді.\n"
+
+#, c-format
+msgid "%s: password changed.\n"
+msgstr "%s: пароль өзгертілді.\n"
+
+#, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "%s: пароль мерзімі туралы ақпарат өзгертілді.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Қолданылуы: %s [опциялар] [passwd]\n"
+"\n"
+"Опциялар:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Қолданылуы: %s [опциялар] [passwd [shadow]]\n"
+"\n"
+"Опциялар:\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr " -q, --quiet тек қателерді хабарлау\n"
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+"%s: USE_TCB іске қосулы болса, альтернативті shadow файлына рұқсат жоқ.\n"
+
+msgid "invalid password file entry"
+msgstr "парольдер файлының қате жазбасы"
+
+msgid "duplicate password entry"
+msgstr "қайталанатын пароль жазбасы"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "қате пайдаланушы аты '%s'\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "пайдаланушы ID-і '%lu' қате\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "пайдаланушы '%s': %lu тобы жоқ\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "пайдаланушы '%s': '%s' бумасы жоқ болып тұр\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "пайдаланушы '%s': '%s' бағдарламасы жоқ болып тұр\n"
+
+#, c-format
+msgid "no tcb directory for %s\n"
+msgstr "%s үшін tcb бумасы жоқ\n"
+
+#, c-format
+msgid "create tcb directory for %s?"
+msgstr "%s үшін tcb бумасын жасау керек пе?"
+
+#, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "%s үшін tcb бумасын жасау сәтсіз аяқталды\n"
+
+#, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: %s оқшаулау мүмкін емес.\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "%s ішінде сәйкес парольдер файлының жазбасы жоқ\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "'%s' пайдаланушыны %s ішіне қосу керек пе? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"%s пайдаланушысының %s ішінде жазбасы бар, бірақ оның %s ішіндегі пароль "
+"жазбасы 'x' етіп орнатылмаған\n"
+
+msgid "invalid shadow password file entry"
+msgstr "көлеңкелі парольдер файлының қате жазбасы"
+
+msgid "duplicate shadow password entry"
+msgstr "қайталанатын көлеңкелі пароль жазбасы"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "пайдаланушы %s: соңғы парольді өзгерту уақыты болашақта\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: %s ішіндегі жазбаралды сұрыптау мүмкін емес\n"
+
+#, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: tcb іске қосулы болса, жұмыс істеу мүмкін емес\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: %s режимін 0600 мәніне орнату сәтсіз аяқталды\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Осы тіркелгі үшін su орындауға РҰҚСАТ ЖОҚ.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Парольдік аутентификацияны аттап өтеміз.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Шындылықты тексеру үшін ӨЗІҢІЗДІҢ пароліңізді енгізіңіз.\n"
+
+#, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: Пайдаланушы қоршамын іске қосу мүмкін емес\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr "%s: сигнал ақаулығы\n"
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr "%s: сигналды басқару ақаулығы\n"
+
+msgid "Session terminated, terminating shell..."
+msgstr "Сессия тоқтатылды, қоршамды тоқтату..."
+
+#, c-format
+msgid " ...killed.\n"
+msgstr " ...өлтірілді.\n"
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr " ...ұрпақ үрдістің тоқтатылуын күту.\n"
+
+msgid " ...terminated.\n"
+msgstr " ...тоқтатылды.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: su [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
+#| " -h, --help display this help message and exit\n"
+#| " -, -l, --login make the shell a login shell\n"
+#| " -m, -p,\n"
+#| " --preserve-environment do not reset environment variables, and\n"
+#| " keep the same shell\n"
+#| " -s, --shell SHELL use SHELL instead of the default in "
+#| "passwd\n"
+#| "\n"
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"Қолданылуы: su [опциялар] [ТІРКЕЛГІ]\n"
+"\n"
+"Опциялары:\n"
+" -c, --command COMMAND шақырылатын қоршамға COMMAND командасын "
+"беру\n"
+" -h, --help осы көмек ақпаратын көрсету және шығу\n"
+" -, -l, --login қоршамды тіркелгі қоршамына ауыстыру\n"
+" -m, -p,\n"
+" --preserve-environment орта айнымалыларының мәндерін мен қоршамды "
+"сақтау\n"
+" -s, --shell SHELL passwd-да көрсетілгеннің орнына SHELL "
+"қоршамын қолдану\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Елемеу)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Сізде su %s жасау үшін құқығыңыз жоқ\n"
+
+msgid "(Enter your own password)"
+msgstr "(Өзіңіздің пароліңізді енгізіңіз)"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: Аутентификация қатесі\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s: Сізде қазір su жасау үшін құқығыңыз жоқ\n"
+
+#, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "'%s' пайд.-сы үшін passwd жазбасы жоқ\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: терминалда орындалуы керек\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: қате %d\n"
+
+#, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: Басқару терминалын тастау мүмкін емес\n"
+
+#, c-format
+msgid "Cannot execute %s\n"
+msgstr "%s орындау мүмкін емес\n"
+
+msgid "No password file"
+msgstr "Парольдер файлы жоқ"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY қатесі"
+
+msgid "No password entry for 'root'"
+msgstr "'root' үшін пароль жазбасы жоқ"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Кәдімгі жүктелу үшін control-d басыңыз,\n"
+"(немесе жүйені жөндеу режиміне өту үшін root паролін енгізіңіз):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Жүйені жөндеу режиміне өту"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr "%s: %s жасалды, бірақ оны өшіру мүмкін емес\n"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr "%s: %s баптауы, ол %s ішінде, есепке алынбайды\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: жаңа defaults файлын жасау мүмкін емес\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: жаңа defaults файлын жасау мүмкін емес\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: жаңа defaults файлын ашу мүмкін емес\n"
+
+#, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: %s ішіндегі жол тым ұзын: %s..."
+
+#, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: Қор көшірме файлын жасау мүмкін емес (%s): %s\n"
+
+#, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: атын ауыстыру: %s: %s\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: '%s' тобы NIS тобы болып тұр.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: шектен көп топ саны көрсетілген (максимум %d).\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Қолданылуы: %s [опциялар] ТІРКЕЛГІ\n"
+" %s -D\n"
+" %s -D [опциялар]\n"
+"\n"
+"Опциялар:\n"
+
+#, fuzzy
+#| msgid " -s, --shadow edit shadow or gshadow database\n"
+msgid " --badnames do not check for bad names\n"
+msgstr " -s, --shadow shadow не gshadow дерекқорын түзету\n"
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+" -b, --base-dir НЕГ_БУМА жаңа тіркелгінің үй бумасы орналасатын\n"
+" негізгі бума\n"
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr " -c, --comment COMMENT жаңа тіркелгінің GECOS өрісі\n"
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr " -d, --home-dir ҮЙ_БУМАСЫ жаңа тіркелгі үшін үй бумасы\n"
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+" -D, --defaults useradd-ң бастапқы баптауларын шығару не "
+"өзгерту\n"
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+" -e, --expiredate АЯҚТАЛУ_КҮНІ жаңа тіркелгінің мерзімі аяқталатын күні\n"
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+" -f, --inactive INACTIVE жаңа тіркелгі паролінің белсенді емес уақыт "
+"аралығы\n"
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+" -g, --gid ТОП жаңа тіркелгі үшін басты топтың аты не ID-і\n"
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+" -G, --groups ТОПТАР жаңа тіркелгі үшін қосымша топтар тізімі\n"
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr " -k, --skel SKEL_DIR басқа үлгілер бумасын қолдану\n"
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+" -l, --no-log-init пайдаланушыны lastlog пен faillog\n"
+" дерекқорларына қоспау\n"
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr " -m, --create-home пайдаланушы үй бумасын жасау\n"
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr " -M, --no-create-home пайдаланушы үй бумасын жасамау\n"
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr " -N, --no-user-group пайдаланушымен аттас топты жасамау\n"
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique қайталанатын (ерекше емес) UID бар\n"
+" пайдаланушыларды жасауға рұқсат ету\n"
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr " -p, --password ПАРОЛЬ жаңа тіркелгі үшін шифрленген пароль\n"
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr " -s, --shell ҚОРШАМ жаңа тіркелгі үшін кіру қоршамы\n"
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr " -u, --uid UID жаңа тіркелгі үшін пайдаланушы ID-і\n"
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr " -U, --user-group пайдаланушымен аттас топты жасау\n"
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+" -Z, --selinux-user SEUSER SELinux пайдаланушы сәйкестігі үшін "
+"көрсетілген SEUSER қолдану\n"
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: '%s' негізгі бумасы қате\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: '%s' түсініктемесі қате\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: '%s' үй бумасы қате\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: -e үшін көлеңкелі парольдер керек\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: -f үшін көлеңкелі парольдер керек\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: '%s' өрісі қате\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: '%s' қоршамы қате\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Warning: %s is not executable\n"
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: Ескерту: %s орындалатын емес\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Option -C cannot be used together with option -S\n"
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s: -C опциясын -S опциясымен бірге қолдануға болмайды\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr "%s: -Z өз алдында SELinux қосулы ядроны талап етеді\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr "%s: %lu UID-і үшін faillog жазбасын нөлдеу сәтсіз: %s\n"
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr "%s: %lu UID-і үшін lastlog жазбасын нөлдеу сәтсіз: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s: %lu UID-і үшін faillog жазбасын нөлдеу сәтсіз: %s\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: жаңа %s жазбасын дайындау сәтсіз аяқталды\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error changing fields\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: жолдарды өзгерту қатесі\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: %s бумасын жасау мүкін емес\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s home directory (%s) not found\n"
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: %s үшін үй бумасы (%s) табылмады\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to allocate memory: %s\n"
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "%s: жадыны бөлу сәтсіз: %s\n"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: %s бумасын жасау мүкін емес\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: жол %d: chown %s сәтсіз: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: жол %d: chown %s сәтсіз: %s\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "Пошта файлын құру"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"'mail' тобы табылмады. Пайдаланушының пошта файлы 0600 түрінде құрылады.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Пошта файлына рұқсаттарды орнату"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: '%s' пайдаланушысы бар болып тұр\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: %s тобы бар болып тұр - егер оған жаңа пайдаланушыны қосқыңыз келсе, -g "
+"қолданыңыз.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: пайдаланушыны жасау мүмкін емес\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %lu бар болып тұр\n"
+
+#, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: %s үшін tcb бумасын жасау мүмкін емес\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: топты құру мүмкін емес\n"
+
+#, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: бағынышты пайдаланушы ID-ын жасау мүмкін емес\n"
+
+#, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: бағынышты топ ID-ын жасау мүмкін емес\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: ескерту: үй бумасы бар болып тұр.\n"
+"Оның ішіне skel бумасынан бірде-бір файл көшірілмеді.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr "%s: ескерту: %s пайдаланушы атын %s SELinux сәйкестендіру сәтсіз.\n"
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+" -f, --force файлдарды өшіруді мәжбүрлеу,\n"
+" пайдаланушы иелігінде болмаса да\n"
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr " -r, --remove үй бумасын мен поштасын өшіру\n"
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+" -Z, --selinux-user пайд.-ның барлық SELinux пайд. "
+"сәйкестіктерін жою\n"
+
+#, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr "%s: %s тобы өшірілмейді, өйткені ол %s пайд.-ның негізгі тобы емес.\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr "%s: %s тобы өшірілмейді, өйткені онда басқа мүшелері бар.\n"
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: %s тобын өшіру мүмкін емес, ол басқа пайдаланушы үшін басыңқы топ болып "
+"табылады.\n"
+
+#, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "%s: %lu жазбасын %s ішінен өшіру мүмкін емес\n"
+
+#, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: %s пошта спулы (%s) табылмады\n"
+
+#, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: ескерту: %s өшіру мүмкін емес: %s\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s қазір %s иелігінде емес, өшірілмейді\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr "%s: Жадыны бөлу мүмкін емес, %s үшін tcb жазбасы өшірілмеді.\n"
+
+#, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: Привилегияларды тастау мүмкін емес: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: %s құрамасын өшіру мүмкін емес: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: %s үшін tcb файлдарын өшіру мүмкін емес: %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: %s қазір NIS пайдаланушысы болып тұр\n"
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: %s үшін үй бумасы (%s) табылмады\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s: %s бумасы өшірілмеді (%s пайдаланушының үй бумасын өшіру талабы)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: %s бумасын өшіру қатемен аяқталды\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: %s бумасын өшіру қатемен аяқталды\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+"%s: ескерту: %s пайдаланушы атына SELinux пайд. сәйкестендіруін өшіру "
+"сәтсіз.\n"
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr " -c, --comment COMMENT GECOS жазбасы үшін жаңа мәні\n"
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+" -d, --home HOME_DIR пайдаланушы тіркелгісі үшін жаңа үй бумасы\n"
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -e, --expiredate EXPIRE_DATE тіркелгінің аяқталу мерзімін EXPIRE_DATE "
+"күніне орнату\n"
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -f, --inactive INACTIVE мерзімі аяқталғаннан кейін пароль "
+"сөндірілетін күн\n"
+" санын INACTIVE мәніне орнату\n"
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+" -g, --gid ТОП жаңа басыңқы топ ретінде ТОПты қолдануды "
+"мәжбүрлету\n"
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr " -G, --groups ТОПТАР пайдаланушыны қосымша ТОПТАРға қосу\n"
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+" -a, --append пайдаланушыны қосымша ТОПТАР ішіне қосу\n"
+" -G опциясы сияқты, пайдаланушыны басқа "
+"топтардан\n"
+" өшірмейді\n"
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr " -l, --login NEW_LOGIN тіркелгі үшін жаңа аты\n"
+
+msgid " -L, --lock lock the user account\n"
+msgstr " -L, --lock пайдаланушы тіркелгісін оқшаулау\n"
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+" -m, --move-home үй бумасының құрамасын жаңа жерге ауыстыру\n"
+" (тек -d опциясымен бірге қолданыңыз)\n"
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique қайталанатын (ерекше емес) UID-тарды "
+"қолдануды рұқсат ету\n"
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+" -p, --password PASSWORD жаңа пароль ретінде шифрленген парольді "
+"қолдану\n"
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr ""
+" -u, --uid UID жаңа тіркелгі үшін пайдаланушы ID-і\n"
+" -u, --uid UID пайдаланушы тіркелгісі үшін жаңа UID\n"
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr ""
+" -U, --unlock пайдаланушы тіркелгісін оқшаулаудан босату\n"
+
+msgid " -v, --add-subuids FIRST-LAST add range of subordinate uids\n"
+msgstr " -v, --add-subuids БІРІНШІ-СОҢҒЫ бағынышты uid-тар ауқымын қосу\n"
+
+msgid " -V, --del-subuids FIRST-LAST remove range of subordinate uids\n"
+msgstr " -V, --del-subuids БІРІНШІ-СОҢҒЫ бағынышты uid-тар ауқымын өшіру\n"
+
+msgid " -w, --add-subgids FIRST-LAST add range of subordinate gids\n"
+msgstr " -w, --add-subgids БІРІНШІ-СОҢҒЫ бағынышты gid-тар ауқымын қосу\n"
+
+msgid " -W, --del-subgids FIRST-LAST remove range of subordinate gids\n"
+msgstr " -W, --del-subgids БІРІНШІ-СОҢҒЫ бағынышты gid-тар ауқымын өшіру\n"
+
+msgid ""
+" -Z, --selinux-user SEUSER new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+" -Z, --selinux-user SEUSER пайдаланушы тіркелгісі үшін жаңа SELinux "
+"сәйкестігі\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: пайдаланушыны оқшаулаудан босату парольсіз тіркелгіге әкеп соғады.\n"
+"Осыны жасау үшін сіз оған парольді usermod -p қолданып орнатуыңыз керек.\n"
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: '%s' пайдаланушысы %s ішінде бар болып тұр\n"
+
+#, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: жарамсыз бағынышты uid ауқымы '%s'\n"
+
+#, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: жарамсыз бағынышты gid ауқымы '%s'\n"
+
+#, c-format
+msgid "%s: no options\n"
+msgstr "%s: опциялар жоқ\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: -L, -p және -U жалаушаларын бірге қолдануға болмайды\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: -e пен -f үшін көлеңкелі парольдер керек\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: '%lu' UID-і бар болып тұр\n"
+
+#, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr "%s: %s жоқ болып тұр, %s немесе %s жалаушаларын қолдануға болмайды\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: %s бумасы бар болып тұр\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+"%s: Алдыңғы үй бумасы (%s) бума емес болған. Ол өшірілмеді де, ешбір үй "
+"бумасы жасалмады.\n"
+
+#, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: Үй бумасының иелігін ауыстыру мүмкін емес"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: ескерту: %s ескі үй бумасын толығымен өшіру мүмкін емес"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: %s бумасының атын %s атына ауыстыру мүмкін емес\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: %lu пайд.-нан %lu пайдаланушысына lastlog жазбасын көшіру сәтсіз: %s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: %lu пайд.-нан %lu пайдаланушысына faillog жазбасын көшіру сәтсіз: %s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: ескерту: %s қазір %s иелігінде емес\n"
+
+msgid "failed to change mailbox owner"
+msgstr "mailbox иесін ауыстыру қатемен аяқталды"
+
+msgid "failed to rename mailbox"
+msgstr "mailbox атын ауыстыру қатемен аяқталды"
+
+#, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s: %lu-%lu uid-тар ауқымын '%s' ішінен өшіру сәтсіз аяқталды\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to add uid range %lu-%lu from '%s'\n"
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s: %lu-%lu uid ауқымын '%s' ішіне қосу сәтсіз аяқталды\n"
+
+#, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s: %lu-%lu gid-тар ауқымын '%s' ішінен өшіру сәтсіз аяқталды\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to add gid range %lu-%lu from '%s'\n"
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s: %lu-%lu gid ауқымын '%s' ішіне қосу сәтсіз аяқталды\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Сіз %s түзеттіңіз.\n"
+"Сізге %s құрамасын түзетуге керек болуы мүмкін.\n"
+"Оны орындау үшін '%s' командасын қолданыңыз.\n"
+
+msgid " -g, --group edit group database\n"
+msgstr " -g, --group топ дерекқорын түзету\n"
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr " -p, --passwd passwd дерекқорын түзету\n"
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr " -s, --shadow shadow не gshadow дерекқорын түзету\n"
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+" -u, --user қай пайдаланушының tcb shadow файлын түзету "
+"керек\n"
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: %s өшіру сәтсіз аяқталды\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: %s өзгертілмеді\n"
+
+msgid "failed to create scratch directory"
+msgstr "scratch бумасын жасау сәтсіз"
+
+msgid "failed to drop privileges"
+msgstr "привилегияларды тастау сәтсіз"
+
+msgid "Couldn't get file context"
+msgstr "Файлға қол жеткізу мүмкін емес"
+
+msgid "setfscreatecon () failed"
+msgstr "setfscreatecon () сәтсіз"
+
+msgid "failed to gain privileges"
+msgstr "привилегияларды алу мүмкін емес"
+
+msgid "Couldn't lock file"
+msgstr "Файлды оқшаулау мүмкін емес"
+
+msgid "Couldn't make backup"
+msgstr "Қор көшірмені жасау мүмкін емес"
+
+#, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s: %s: %s\n"
+
+#, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr "%s: %s %d қалып-күймен өз жұмысын аяқтады\n"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr "%s: %s %d сигналымен тоқтатылды\n"
+
+msgid "failed to open scratch file"
+msgstr "scratch файлын ашу сәтсіз"
+
+msgid "failed to unlink scratch file"
+msgstr "scratch файлын жою сәтсіз"
+
+msgid "failed to stat edited file"
+msgstr "түзетілген файлды табу сәтсіз"
+
+msgid "failed to allocate memory"
+msgstr "жадыны бөлу сәтсіз"
+
+msgid "failed to create backup file"
+msgstr "резервті көшірме файлын жасау сәтсіз"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: %s қайтару мүмкін емес: %s (сіздің өзгертулеріңіз %s ішінде)\n"
+
+#, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: %s үшін tcb бумасын табу сәтсіз\n"
+
+#~ msgid " -c, --crypt-method the crypt method (one of %s)\n"
+#~ msgstr " -c, --crypt-method шифрлеу тәсілі (%s ішінен біреу)\n"
+
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr ""
+#~ "Қолданылуы: vipw [опциялар]\n"
+#~ "\n"
+#~ "Опциялар:\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "жадыдан %d байт бөлу мүмкін емес\n"
+
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Қолданылуы: chage [опциялар] [ПАЙДАЛАНУШЫ_АТЫ]\n"
+#~ "\n"
+#~ "Опциялар:\n"
+#~ " -d, --lastday LAST_DAY парольдің аяқталу мерзімін LAST_DAY "
+#~ "күніне орнату\n"
+#~ " -E, --expiredate EXPIRE_DATE тіркелгінің аяқталу мерзімі EXPIRE_DATE "
+#~ "күніне орнату\n"
+#~ " -h, --help осы көмек ақпаратын көрсетіп, шығу\n"
+#~ " -I, --inactive INACTIVE парольдің мерзімі біткен соң оны INACTIVE "
+#~ "болып\n"
+#~ " орнату үшін өтетін күн саны\n"
+#~ " -l, --list тіркелгінің жұмыс уақыты ақпаратын "
+#~ "көрсету\n"
+#~ " -m, --mindays MIN_DAYS парольді ауыстыру арасында өту керек ең "
+#~ "аз күн санын\n"
+#~ " MIN_DAYS мәніне орнату\n"
+#~ " -M, --maxdays MAX_DAYS парольді ауыстыру арасында өту керек ең "
+#~ "көп сүн санын\n"
+#~ " MAX_DAYS мәніне орнату\n"
+#~ " -W, --warndays WARN_DAYS мерзімі аяқталу туралы хабарламаны "
+#~ "WARN_DAYS күн қалғанда көрсете бастау\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: PAM көмегімен шындылықты тексеру қатемен аяқталды\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "Қолданылуы: %s [-f толықl_аты] [-r бөлме_нөмірі] [-w жұмыс_тел]\n"
+#~ "\t[-h үй_тел] [-o басқа] [пайдаланушы аты]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr ""
+#~ "Қолданылуы: %s [-f толық_аты] [-r бөлме_нөмірі] [-w жұмыс_тел] [-h "
+#~ "үй_тел]\n"
+
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Қолданылуы: %s [опциялар]\n"
+#~ "\n"
+#~ "Опциялары:\n"
+#~ " -c, --crypt-method шифрлеу тәсіл (%s-дан біреу)\n"
+#~ " -e, --encrypted шифрленген пароль енгізіледі\n"
+#~ " -h, --help осы көмек ақпаратын көрсету және шығу\n"
+#~ " -m, --md5 DES орнына MD5 алгоритмін қолдану, егер "
+#~ "пароль\n"
+#~ " шифрленбеген түрде енгізілсе\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Қолданылуы: chsh [опциялар] [LOGIN]\n"
+#~ "\n"
+#~ "Опциялары:\n"
+#~ " -h, --help осы көмек ақпаратын көрсету және шығу\n"
+#~ " -s, --shell SHELL пайдаланушы тіркелгісі үшін жаңа қоршам\n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "Қолданылуы: expiry {-f|-c}\n"
+
+#~ msgid "faillog: Failed to get the entry for UID %lu\n"
+#~ msgstr "faillog: UID %lu үшін жазбаны алу мүмкін емес\n"
+
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "faillog: %s ашу мүмкін емес: %s\n"
+
+#~ msgid "faillog: Cannot get the size of %s: %s\n"
+#~ msgstr "faillog: %s өлшемін алу мүмкін емес: %s\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "Қолданылуы: groupdel топ\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "Қолданылуы: %s [-r] [-s] [group [gshadow]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "Қолданылуы: %s [-r] [-s] [топ]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: -s пен -r өзара үйлеспейді\n"
+
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "Қолданылуы: grpconv\n"
+
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "Қолданылуы: grpunconv\n"
+
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Қолданылуы: lastlog [опциялар]\n"
+#~ "\n"
+#~ "Опциялары:\n"
+#~ " -b, --before КҮН мерзімі КҮНнен үлкен ғана lastlog "
+#~ "жазбаларын көрсету\n"
+#~ " -h, --help осы көмек ақпаратын көрсету және шығу\n"
+#~ " -t, --time КҮН мерзімі КҮНнен кіші ғана lastlog "
+#~ "жазбаларын көрсету\n"
+#~ " -u, --user ТІРКЕЛГІ көрсетілген ТІРКЕЛГІ үшін lastlog "
+#~ "жазбаларын көрсету\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Қолданылуы: passwd [опциялар] [ТІРКЕЛГІ]\n"
+#~ "\n"
+#~ "Опциялары:\n"
+#~ " -a, --all барлық тіркелгілер үшін парольдер күйін "
+#~ "шығару\n"
+#~ " -d, --delete көрсетілген тіркелгі үшін парольді өшіру\n"
+#~ " -e, --expire көрсетілген тіркелгі үшін пароль "
+#~ "мерзімінің аяқталуын мәжбүрлету\n"
+#~ " -h, --help осы көмек ақпаратын көрсету және шығу\n"
+#~ " -k, --keep-tokens парольді тек мерзімі аяқталса ғана "
+#~ "өзгерту\n"
+#~ " -i, --inactive INACTIVE мерзімі аяқталғаннан кейін тіркелгіні "
+#~ "сөндіру үшін\n"
+#~ " керек күн санын INACTIVE мәніне орнату\n"
+#~ " -l, --lock көрсетілген тіркелгіні оқшаулау\n"
+#~ " -n, --mindays MIN_DAYS парольді өзгерту арасында ең аз рұқсат "
+#~ "етілген күн санын\n"
+#~ " MIN_DAYS мәніне орнату\n"
+#~ " -q, --quiet тыныш түрі\n"
+#~ " -r, --repository REPOSITORY REPOSITORY репозиторийінде парольді "
+#~ "өзгерту\n"
+#~ " -S, --status көрсетілген тіркелгі үшін пароль күйін "
+#~ "шығару\n"
+#~ " -u, --unlock көрсетілген тіркелгіні оқшаулаудан "
+#~ "босату\n"
+#~ " -w, --warndays WARN_DAYS мерзімі аяқталуы туралы WARN_DAYS "
+#~ "қалғанда ескерте бастау\n"
+#~ " -x, --maxdays MAX_DAYS парольді өзгерту арасында ең көп рұқсат "
+#~ "етілген күн санын\n"
+#~ " MAX_DAYS мәніне орнату\n"
+#~ "\n"
+
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr "Қолданылуы: %s [-q] [-r] [passwd]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr "Қолданылуы: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "Қолданылуы: pwconv\n"
+
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "Қолданылуы: pwunconv\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "Белгісіз id: %s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "Қоршам жоқ\n"
+
+#~ msgid ""
+#~ "Usage: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force removal of files,\n"
+#~ " even if not owned by user\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -r, --remove remove home directory and mail spool\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Қолданылуы: userdel [опциялар] ТІРКЕЛГІ\n"
+#~ "\n"
+#~ "Опциялары:\n"
+#~ " -f, --force файлдарды өшіруді мәжбүрлеу,\n"
+#~ " пайдаланушы иелігінде болмаса да\n"
+#~ " -h, --help осы көмек ақпаратын көрсету және шығу\n"
+#~ " -r, --remove үй бумасын мен поштасын өшіру\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Қолданылуы: usermod [опциялар] ТІРКЕЛГІ\n"
+#~ "\n"
+#~ "Опциялары:\n"
+#~ " -c, --comment COMMENT GECOS жазбасы үшін жаңа мәні\n"
+#~ " -d, --home HOME_DIR пайдаланушы тіркелгісі үшін жаңа үй "
+#~ "бумасы\n"
+#~ " -e, --expiredate EXPIRE_DATE тіркелгінің аяқталу мерзімін EXPIRE_DATE "
+#~ "күніне орнату\n"
+#~ " -f, --inactive INACTIVE мерзімі аяқталғаннан кейін пароль "
+#~ "сөндірілетін күн\n"
+#~ " санын INACTIVE мәніне орнату\n"
+#~ " -g, --gid ТОП жаңа басыңқы топ ретінде ТОПты қолдануды "
+#~ "мәжбүрлету\n"
+#~ " -G, --groups ТОПТАР пайдаланушыны қосымша ТОПТАРға қосу\n"
+#~ " -a, --append пайдаланушыны қосымша ТОПТАР ішіне қосу\n"
+#~ " -G опциясы сияқты, пайдаланушыны басқа "
+#~ "топтардан\n"
+#~ " өшірмейді\n"
+#~ " -h, --help осы көмек ақпаратын көрсету және шығу\n"
+#~ " -l, --login NEW_LOGIN тіркелгі үшін жаңа аты\n"
+#~ " -L, --lock пайдаланушы тіркелгісін оқшаулау\n"
+#~ " -m, --move-home үй бумасының құрамасын жаңа жерге "
+#~ "ауыстыру\n"
+#~ " (тек -d опциясымен бірге қолданыңыз)\n"
+#~ " -o, --non-unique қайталанатын (ерекше емес) UID-тарды "
+#~ "қолдануды рұқсат ету\n"
+#~ " -p, --password PASSWORD жаңа пароль ретінде шифрленген парольді "
+#~ "қолдану\n"
+#~ " -s, --shell SHELL пайдаланушы тіркелгісі үшін жаңа қоршам\n"
+#~ " -u, --uid UID пайдаланушы тіркелгісі үшін жаңа UID\n"
+#~ " -U, --unlock пайдаланушы тіркелгісін оқшаулаудан "
+#~ "босату\n"
+#~ "%s\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s: жалаушалар көрсетілмеген\n"
diff --git a/po/km.gmo b/po/km.gmo
new file mode 100644
index 0000000..120eaaa
--- /dev/null
+++ b/po/km.gmo
Binary files differ
diff --git a/po/km.po b/po/km.po
new file mode 100644
index 0000000..bd20f5e
--- /dev/null
+++ b/po/km.po
@@ -0,0 +1,3621 @@
+# translation of shadow_po_km.po to Khmer
+# translation of shadow_po_km.po to
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Khoem Sokhem <khoemsokhem@khmeros.info>, 2006.
+# Poch Sokun <sokun_poch@khmeros.info>, 2006.
+# auk piseth <piseth_dv@khmeros.info>, 2006.
+# Leang Chumsoben <soben@khmeros.info>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow_po_km\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2006-06-28 10:08+0700\n"
+"Last-Translator: Khoem Sokhem <khoemsokhem@khmeros.info>\n"
+"Language-Team: Khmer <support@khmeros.info>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.2\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "មិន​អាច​បម្រុង​ទុក​ទំហំ​សម្រាប់​ព័ត៌មាន​​កំណត់​រចនាសម្ព័ន្ធទេ​ ។\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "កំហុស​ការ​កំណត់​រចនាសម្ព័ន្ធ​ - មិន​ស្គាល់​ធាតុ '%s' (ជូន​ដំណឹង​អ្នក​គ្រប់គ្រង​)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr ""
+
+msgid "Password: "
+msgstr "ពាក្យ​សម្ងាត់​ ៖ "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "ពាក្យសម្ងាត់​របស់ %sសម្ងាត់ ៖ "
+
+#, fuzzy
+#| msgid "Cannot open the password file.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "មិនអាច​បើក​ឯកសារ​ពាក្យសម្ងាត់​បានឡើយ ។\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr ""
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not set sename for %s\n"
+msgstr "មិន​អាច​បម្រុង​ទុក​ទំហំ​សម្រាប់​ព័ត៌មាន​​កំណត់​រចនាសម្ព័ន្ធទេ​ ។\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "ការផ្លាស់​ប្តូរ​ព័ត៌មាន​ចាស់​សម្រាប់​ %s\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "%s ៖ មិន​អាចកំណត់​ឈ្មោះ​អ្នកប្រើ​របស់​អ្នក​បាន​ទេ ។\n"
+
+#, fuzzy, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "%s ៖ បន្ទាត់​ %d ៖ មិន​អាច​រក​អ្នកប្រើ​ %s ឃើញឡើយ\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s ៖ អស់​សតិ​\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s ៖ មិនអាច​ធ្វើឲ្យឯកសារ %s ទាន់សម័យ​បានទេ\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s ៖ ថត​ផ្ទះ​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s ៖ មិនអាចប្ដូរឈ្មោះ​ថត​ %s ទៅ​ជា​ %s បានឡើយ\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s ៖ មិន​​អាច​បង្កើត​ថត​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s  ៖ ការព្រមាន​ ៖ មិន​អាច​យកចេញបានឡើយ "
+
+#, fuzzy, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s  ៖ ការព្រមាន​ ៖ មិន​អាច​យកចេញបានឡើយ "
+
+#, fuzzy, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s ៖​ ប្តូរ​ឈ្មោះ​ ៖ %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s ៖ មិនអាចប្ដូរឈ្មោះ​ថត​ %s ទៅ​ជា​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s ៖ មិនអាចប្ដូរឈ្មោះ​ថត​ %s ទៅ​ជា​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s  ៖ ការព្រមាន​ ៖ មិន​អាច​យកចេញបានឡើយ "
+
+#, fuzzy, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s ៖ មិន​​អាច​បង្កើត​ថត​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s  ៖ ការព្រមាន​ ៖ មិន​អាច​យកចេញបានឡើយ "
+
+#, fuzzy, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s ៖ មិនអាច​ធ្វើឲ្យឯកសារ %s ទាន់សម័យ​បានទេ\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s ៖ មិនអាច​ធ្វើឲ្យឯកសារស្រមោល​ទាន់សម័យបានឡើយ​\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s ៖​ ប្តូរ​ឈ្មោះ​ ៖ %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s ៖ មិនអាច​បើក​ឯកសារ​ %s បានទេ\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "ការ​ព្រមាន ៖ មិន​ស្គាល់​ក្រុម %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "ការព្រមាន​ ៖ មាន​ច្រើន​ក្រុម​ពេក\n"
+
+msgid "Your password has expired."
+msgstr "ពាក្យ​សម្ងាត់​របស់​អ្នក​បាន​ផុត​កំណត់ហើយ​ ។"
+
+msgid "Your password is inactive."
+msgstr "ពាក្យ​សម្ងាត់​របស់​អ្នកអសកម្ម​ ។"
+
+msgid "Your login has expired."
+msgstr "ការចូល​របស់អ្នក​បាន​ផុត​កំណត់ហើយ​ ។"
+
+#, fuzzy
+msgid " Contact the system administrator."
+msgstr " ទាក់ទងទៅ​អ្នកគ្រប់គ្រងប្រព័ន្ធ​ ។\n"
+
+#, fuzzy
+msgid " Choose a new password."
+msgstr " ជ្រើស​ពាក្យ​សម្ងាត់​មួយ ។\n"
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "ពាក្យ​សម្ងាត់​របស់​អ្នក​នឹង​ផុត​កំណត់ក្នុងពេល​ %ld ថ្ងៃ ។\n"
+
+#, fuzzy
+msgid "Your password will expire tomorrow."
+msgstr "ពាក្យ​សម្ងាត់​របស់​អ្នក​នឹងផុត​កំណត់នៅ​ថ្ងៃ​ស្អែក​ ។​\n"
+
+#, fuzzy
+msgid "Your password will expire today."
+msgstr "ពាក្យ​សម្ងាត់​របស់​អ្នក​នឹងផុត​កំណត់នៅ​ថ្ងៃ​នេះ ។\n"
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "មិន​អាច​ប្តូរ​ tty %s បានឡើយ"
+
+#, fuzzy, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s ៖ វាល គឺ​វែងវែងពេក​\n"
+
+#, fuzzy, c-format
+msgid "%s: "
+msgstr "%s ៖ %s\n"
+
+msgid ": "
+msgstr ""
+
+msgid "Environment overflow\n"
+msgstr "​លើស​ចំណុះ​បរិស្ថាន\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "អ្នក​ប្រហែល​មិន​បាន​ប្តូរ​ $%s បានទេ\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d បានបរាជ័យ ចាប់តាំងពីចូលលើក​ចុងក្រោយ​គេមក​ ។\n"
+"ចុងក្រោយគេនៅ​ %s លើ %s ។\n"
+msgstr[1] ""
+"%d ចូល​ចុងក្រោយ​បានបរាជ័យ​ ។\n"
+"ចុងក្រោម​ %s %s.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "បរាជ័យ​ក្នុងការ​ផ្លាស់ប្ដូរ​ម្ចាស់​ប្រអប់សំបុត្រ"
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr "%s ៖ មិនអាចយក​ UID ដែលមានតែមួយ​បានទេ\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s ៖ មិនអាច​យក​​ GID ​ដែលមានតែមួយ​បានឡើយ​\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s ៖ មិនអាច​យក​​ GID ​ដែលមានតែមួយ​បានឡើយ​\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s ៖ មិន​អាច​បង្កើត​ %s បានឡើយ\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s ៖ មិន​អាច​បង្កើត​ %s បានឡើយ\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr "%s ៖ មិនអាចយក​ UID ដែលមានតែមួយ​បានទេ\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s ៖ មិនអាចយក​ UID ដែលមានតែមួយ​បានទេ\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s ៖ មិនអាចយក​ UID ដែលមានតែមួយ​បានទេ\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Memory allocation failure\n"
+msgstr "%s ៖ PAM ការ​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវបាន​បរាជ័យ​\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s ៖ វាល​មិនត្រឹមត្រូវ​ '%s'\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Could not seteuid to %d\n"
+msgstr "មិន​អាច​បម្រុង​ទុក​ទំហំ​សម្រាប់​ព័ត៌មាន​​កំណត់​រចនាសម្ព័ន្ធទេ​ ។\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not set caps\n"
+msgstr "មិន​អាច​បម្រុង​ទុក​ទំហំ​សម្រាប់​ព័ត៌មាន​​កំណត់​រចនាសម្ព័ន្ធទេ​ ។\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't open file\n"
+msgid "%s: snprintf failed!\n"
+msgstr "%s ៖ មិន​អាច​បើក​​ឯកសារ​បានទេ\n"
+
+#, fuzzy, c-format
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s ៖ បន្ទាត់​ %d ៖ chown បានបរាជ័យ​\n"
+
+#, fuzzy, c-format
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s ៖ បន្ទាត់​ %d ៖ chown បានបរាជ័យ​\n"
+
+msgid "Too many logins.\n"
+msgstr "ចូល​ច្រើន​ពេក​ ។\n"
+
+msgid "You have new mail."
+msgstr "អ្នក​មានសំបុត្រ​ថ្មី​ ។​"
+
+msgid "No mail."
+msgstr "គ្មាន​សំបុត្រ​​​ទេ​ ។"
+
+msgid "You have mail."
+msgstr "អ្នក​មាន​សំបុត្រ ។"
+
+msgid "no change"
+msgstr "គ្មាន​​ផ្លាស់ប្តូរ​ "
+
+msgid "a palindrome"
+msgstr "ឃ្លាដែលអាច​អាន​ត្រឡប់​ចុះត្រឡប់ឡើងបាន"
+
+msgid "case changes only"
+msgstr "ករណី​បាន​តែ​ប្តូរ​"
+
+msgid "too similar"
+msgstr "ស្រដៀងគ្នា​ពេក"
+
+msgid "too simple"
+msgstr "ធម្មតា​ពេក"
+
+msgid "rotated"
+msgstr "បានបង្វិល​"
+
+msgid "too short"
+msgstr "ខ្លីពេក​"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "ពាក្យ​សម្ងាត់​មិន​ត្រឹមត្រូវ​ ៖ %s ។ "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "ពាក្យ​សម្ងាត់​ ៖ pam_start() បាន​បរាជ័យ​, កំហុស​ %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "ពាក្យសម្ងាត់ ៖ %s\n"
+
+#, fuzzy
+msgid "passwd: password unchanged\n"
+msgstr "ពាក្យ​សម្ងាត់​បាន​ប្តូរ​ ។\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "ពាក្យសម្ងាត់ ៖ ពាក្យ​សម្ងាត់​បាន​ធ្វើ​ឲ្យ​ទាន់​សម័យ​ដោយ​ជោគជ័យ​\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s ៖ ឃ្លាំង​ %s មិន​បាន​គាំទ្រឡើយ​\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s ៖ pam_start ៖ កំហុស​ %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "ពាក្យ​សម្ងាត់​ ៖ pam_start() បាន​បរាជ័យ​, កំហុស​ %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "ពាក្យ​សម្ងាត់​មិន​ត្រឹមត្រូវ​សម្រាប់​ %s ។\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr ""
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s ៖ បរាជ័យ​ក្នុងការ​ទម្លាក់​សិទ្ធ (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s ៖ លេខ​ទូរស័ព្ទនៅផ្ទះ​មិន​ត្រឹមត្រូវ​ ៖ '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s ៖ មិន​​អាច​បង្កើត​ថត​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s ៖ មិន​​អាច​បង្កើត​ថត​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s ៖ មិន​​អាច​បង្កើត​ថត​ %s បានឡើយ\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "មិន​អាច​​ cd ចូលទៅ​ '%s' បានទេ\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "គ្មាន​ថត​ ការចូល​ជាមួយ​ HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "មិន​អាចប្រតិបត្តិ​ %s បានទេ"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "ថត​ root មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "មិន​អាច​ប្តូរ​ថត root ទៅ​ '%s'បាន​ទេ​\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s ៖ បច្ចុប្បន្ន ​អ្នក​ប្រើ​ %s បាន​ចូលហើយ​\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s ៖ បច្ចុប្បន្ន ​អ្នក​ប្រើ​ %s បាន​ចូលហើយ​\n"
+
+msgid "Unable to determine your tty name."
+msgstr "មិន​អាច​កំណត់​ឈ្មោះ​ tty របស់​អ្នកបានទេ​ ។"
+
+#, fuzzy
+msgid "No"
+msgstr "ទេ\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "របៀបប្រើ ៖ %s [input]\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr ""
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+#, fuzzy
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "បញ្ចូល​តម្លៃ​ថ្មី​ ឬ ​សង្កត់​ បញ្ចូល សម្រាប់​លំនាំដើម​\n"
+
+msgid "Minimum Password Age"
+msgstr "អាយុ​ពាក្យសម្ងាត់​អប្បរមា"
+
+msgid "Maximum Password Age"
+msgstr "អាយុ​ពាក្យសម្ងាត់​អតិបរមាsword Age"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "ការប្ដូរ​ពាក្យ​សម្ងាត់​ជាលើកចុងក្រោយ (YYYY-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "ការព្រមាន​ការផុត​កំណត់​នៃ​ពាក្យ​សម្ងាត់​"
+
+msgid "Password Inactive"
+msgstr "ពាក្យ​សម្ងាត់​អសកម្ម​"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "កាលបរិច្ឆេទ​ការផុត​កំណត់របស់​​គណនី​ (YYYY-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "ការប្តូរ​ពាក្យ​សម្ងាត់​លើកចុង​ក្រោយ​\t\t\t\t\t ៖ "
+
+#, fuzzy
+msgid "never"
+msgstr "កុំ\n"
+
+#, fuzzy
+msgid "password must be changed"
+msgstr "ពាក្យ​សម្ងាត់​ត្រូវ​តែ​ប្តូរ​\n"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "ពាក្យ​សម្ងាត់​ផុត​កំណត់​\t\t\t\t\t ៖ "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "ពាក្យ​សម្ងាត់ អសកម្ម \t\t\t\t\t ៖ "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "គណនី​ផុត​កំណត់​\t\t\t\t\t\t ៖ "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "ចំនួន​ថ្ងៃ​អប្បបរមា​រវាង​ការផ្លាស់​ប្តូរ​ពាក្យ​សម្ងាត់​\t\t ៖ %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "ចំនួនថ្ងៃ​អតិបរមា​រវាង​ការផ្លាស់ប្តូរ​ពាក្យ​សម្ងាត់​\t\t ៖ %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "ចំនួន​ថ្ងៃ​នៃការព្រមាន​ មុនពេល​ពាក្យសម្ងាត់​ផុតកំណត់\t ៖ %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s ៖ កាលបរិច្ឆទ​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s ៖ អាគុយម៉ង់​ជាលេខ​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s ៖ មិន​រូមបញ្ចូល​ទាំង​ \"l\" ជាមួយ​ទង់​ដទៃទៀត​ទេ\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s ៖ សិទ្ធ​ត្រូវ​បាន​បដិសេធ ។\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s ៖ មិន​អាចកំណត់​ឈ្មោះ​អ្នកប្រើ​របស់​អ្នក​បាន​ទេ ។\n"
+
+#, fuzzy, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s ៖ %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s ៖ មិន​អាច​ចាក់សោ​ឯកសារ​បានឡើយ សូមព្យាយាម​ម្តង​ទៀតនៅពេលក្រោយ​\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s ៖ មិនអាច​បើក​ឯកសារ​ %s បានទេ\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s ៖ ការចែកជាពីរវិធី​​បានបរាជ័យ​ ៖ %s"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s ៖ បរាជ័យ​ក្នុងការ​ទម្លាក់​សិទ្ធ (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s ៖ គ្មាន​វត្តមាន​​ឯកសារ​ពាក្យ​សម្ងាត់ស្រមោលទេ​\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s ៖ មិនទាន់មានអ្នក​ប្រើ​ %s ទេ​\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "ការផ្លាស់​ប្តូរ​ព័ត៌មាន​ចាស់​សម្រាប់​ %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s ៖ កំហុស​ការផ្លាស់ប្តូរ​វាល​\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr "របៀបប្រើ ៖ %s [input]\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr "ឈ្មោះ​ពេញ"
+
+#, fuzzy, c-format
+msgid "\t%s: %s\n"
+msgstr "%s ៖ %s\n"
+
+msgid "Room Number"
+msgstr "លេខបន្ទប់​"
+
+msgid "Work Phone"
+msgstr "ទូរស័ព្ទ​​​កន្លែង​​​ធ្វើការ"
+
+msgid "Home Phone"
+msgstr "ទូរស័ព្ទនៅ​ផ្ទះ"
+
+msgid "Other"
+msgstr "ផ្សេងៗ"
+
+msgid "Cannot change ID to root.\n"
+msgstr "មិន​អាចផ្លាស់ប្តូរ​លេខ​សម្គាល់​ទៅ​ជា​ root បាន​ឡើយ​ ។\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s ៖ ឈ្មោះ​មិន​ត្រឹមត្រូវ​ ៖ '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s ៖ ចំនួន​បន្ទប់​មិន​ត្រឹមត្រូវ​ ៖ '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s ៖ លេខទូរស័ព្ទ​នៅ​កន្លែង​ធ្វើការ​មិន​ត្រឹមត្រូវ​ ៖ '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s ៖ លេខ​ទូរស័ព្ទនៅផ្ទះ​មិន​ត្រឹមត្រូវ​ ៖ '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s ៖ '%s' មាន​តួអក្សរ​មិន​ត្រឹមត្រូវ​\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s ៖ '%s' មាន​តួអក្សរ​មិន​ត្រឹមត្រូវ​\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s ៖ មិនទាន់មានអ្នក​ប្រើ​ %s ទេ​\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s ៖ មិនអាចផ្លាស់​​ប្តូរ​អ្នក​ប្រើបានទេ​ '%s' លើ​ម៉ាស៊ីន​ភ្ញៀវ NIS បានទេ ។\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s ៖ '%s' ជាមេ​ NIS សម្រាប់​ម៉ាស៊ីន​ភ្ញៀវ​នេះ​ ។\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "កំពុងផ្លាស់​​ប្តូរ​ព័ត៌មាន​អ្នកប្រើ​សម្រាប់​ %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s ៖ វាល គឺ​វែងវែងពេក​\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "របៀបប្រើ ៖ %s [input]\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr ""
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: ទង់ -a គឺត្រូវបានអនុញ្ញាត​បានតែជាមួយទង់ -G ប៉ុណ្ណោះ\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s ៖ បន្ទាត់​ %d ៖ បន្ទាត់​វែងពេក​\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s ៖ បន្ទាត់​ %d ៖ បាត់បង់​ពាក្យ​សម្ងាត់​ថ្មី​\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s ៖ បរាជ័យ​ក្នុងការ​ទម្លាក់​សិទ្ធ (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s ៖ មិនមានក្រុម​ %sឡើយ​\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s ៖ បន្ទាត់​ %d ៖ មិនអាចធ្វើឲ្យ​ធាតុបញ្ចូល​ទាន់សម័យបានឡើយ\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s ៖ បានរកឃើញ​កំហុស មិនអើពើនឹងការផ្លាស់ប្ដូរ​\n"
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s ៖ មិនទាន់មានអ្នក​ប្រើ​ %s ទេ​\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s ៖ មិនទាន់មានអ្នក​ប្រើ​ %s ទេ​\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr "សែលចូល"
+
+#, fuzzy, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "អ្នក​មិនអាច​​ប្តូរ​សែល​សម្រាប់​ %s បានទេ ។\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "កំពុង​ផ្លាស់ប្ដូរ​សែល​ចូល​សម្រាប់ %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s ៖ ធាតុបញ្ចូល​​មិន​ត្រឹមត្រូវ​ ៖ %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s គឺជា​សែល​មិន​ត្រឹមត្រូវ​ ។\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s ៖ មិនទាន់មានអ្នក​ប្រើ​ %s ទេ​\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s ៖ ការព្រមាន ៖​ %s មិនត្រូវបានទទួល​យក​ដោយ %s ឡើយ\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "កំណត់ត្រាចុងក្រោយ ៖ អាគុយម៉ង់​មិន​រំពឹង​ទុក​ ៖ %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s ៖ មិន​​អាច​បង្កើត​ថត​ %s បានឡើយ\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "ចូល ភាពបរាជ័យ​នៃការចូល​ចុងក្រោយ​ជាអតិបរមា លើ\n"
+
+#, fuzzy, c-format
+msgid " [%lus left]"
+msgstr " [%lds នៅសល់]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds ជាប់សោ]"
+
+#, fuzzy, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s ៖ មិន​​អាច​បង្កើត​ថត​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s ៖ បរាជ័យ​ក្នុងការ​ទម្លាក់​សិទ្ធ (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s ៖ មិន​​អាច​បង្កើត​ថត​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "មិន​ស្គាល់​អ្នក​ប្រើ ៖ %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s ៖ មិនអាចប្ដូរឈ្មោះ​ថត​ %s ទៅ​ជា​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s ៖ បរាជ័យ​ក្នុងការ​ទម្លាក់​សិទ្ធ (%s)\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "របៀបប្រើ ៖ %s [input]\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr ""
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr ""
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr ""
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+
+#, fuzzy
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "មិនអាចប្ដូរ​ពាក្យ​សម្ងាត់​សម្រាប់​ %s បានឡើយ ។\n"
+
+#, fuzzy
+msgid "The options cannot be combined.\n"
+msgstr "មិនអាចប្ដូរ​ពាក្យ​សម្ងាត់​សម្រាប់​ %s បានឡើយ ។\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s ៖ បានទាមទារ​ពាក្យសម្ងាត់​ក្រុម​ស្រមោល​សម្រាប់​ -A\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s ៖ មិនមានក្រុម​ %sឡើយ​\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s ៖ ការចែកជាពីរវិធី​​បានបរាជ័យ​ ៖ %s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "កំពុង​ប្តូរ​ពាក្យ​សម្ងាត់​សម្រាប់​ក្រុម​ %s\n"
+
+msgid "New Password: "
+msgstr "ពាក្យសម្ងាត់​ថ្មី ៖ "
+
+msgid "Re-enter new password: "
+msgstr "បញ្ចូល​ពាក្យ​សម្ងាត់​ថ្មី​ឡើង​វិញ ៖ "
+
+msgid "They don't match; try again"
+msgstr "ពួកគេ​មិន​បាន​​ផ្គូរផ្គងទេ ។ សូមព្យាយាម​ម្តង​ទៀត​"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s ៖ សូមព្យាយាមម្ដងទៀត​នៅពេលក្រោយ\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "កំពុង​បន្ថែម​អ្នកប្រើ​ %s ទៅក្រុម​ %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "កំពុង​យក​អ្នក​ប្រើ​ %s ចេញពី​ក្រុម​ %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s ៖ មិនទាន់មានអ្នក​ប្រើ​ %s ទេ​\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s ៖ មិនមែន​ tty\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "របៀបប្រើ ៖ %s [input]\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr ""
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid " -r, --system create a system account\n"
+msgstr ""
+
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s  ៖ %s ជា​ឈ្មោះ​ក្រុម​មិន​ត្រឹមត្រូវ​\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "ឈ្មោះ​ក្រុម​ '%s' មិនត្រឹមត្រូវ\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K ទាមទារ​ KEY=VALUE\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s ៖ មានក្រុម​ %s រួច​ហើយ​\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s ៖ មិន​អាចកំណត់​ឈ្មោះ​អ្នកប្រើ​របស់​អ្នក​បាន​ទេ ។\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s ៖ មិនអាចប្ដូរឈ្មោះ​ថត​ %s ទៅ​ជា​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s ៖ មិនអាចផ្លាស់​​ប្តូរ​អ្នក​ប្រើបានទេ​ '%s' លើ​ម៉ាស៊ីន​ភ្ញៀវ NIS បានទេ ។\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s ៖ មិនមានក្រុម​ %sឡើយ​\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s ៖ ក្រុម​ '%s' គឺជាក្រុម​ NIS ។\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s ៖ %s គឺជា​មេ NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s ៖ អ្នកប្រើ​ %s គឺជា​អ្នក​​ប្រើ​ NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: អស់​សតិ​ក្នុង​ក្នុងការធ្វើឲ្យ​ក្រុមទាន់សម័យ\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr "របៀបប្រើ ៖ %s [input]\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+
+msgid "\n"
+msgstr ""
+
+msgid "Actions:\n"
+msgstr ""
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr ""
+
+msgid " -l, --list list the members of the group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr ""
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "ឈ្មោះ​ក្រុម​ '%s' មិនត្រឹមត្រូវ\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s ៖ ក្រុម​ %s គឺជា​ក្រុម NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s ៖ មិន​ស្គាល់​អ្នកប្រើ​ %s\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr "របៀបប្រើ ៖ %s [input]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr "របៀបប្រើ ៖ %s [input]\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s ៖ -s និង​ -r គឺមិន​ត្រូវ​គ្នាទេ​\n"
+
+#, fuzzy
+msgid "invalid group file entry"
+msgstr "ធាតុបញ្ចូល​ឯកសារក្រុម​មិនត្រឹមត្រូវ​\n"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "លុប​បន្ទាត់​ '%s' ឬ ? "
+
+#, fuzzy
+msgid "duplicate group entry"
+msgstr "ធាតុបញ្ចូល​​ក្រុម​ស្ទួន​\n"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "ឈ្មោះ​ក្រុម​ '%s' មិនត្រឹមត្រូវ\n"
+
+#, fuzzy, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "ឈ្មោះ​ក្រុម​ '%s' មិនត្រឹមត្រូវ\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "ក្រុម​ %s ៖ គ្មាន​អ្នកប្រើ​ %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "លុប​សមាជិក​ '%s' ឬ ? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "គ្មាន​ធាតុបញ្ចូល​ឯកសារ​ក្រុមផ្គូរផ្គង​នៅក្នុង​​ %s ទេ\n"
+
+#, fuzzy, c-format
+msgid "add group '%s' in %s? "
+msgstr "បន្ថែម​ក្រុម​ '%s' ទៅក្នុង​ %s ឬ ?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+#, fuzzy
+msgid "invalid shadow group file entry"
+msgstr "ធាតុ​ឯកសារ​ក្រុម​ស្រមោល​មិន​ត្រឹមត្រូវ\n"
+
+#, fuzzy
+msgid "duplicate shadow group entry"
+msgstr "ធាតុ​ក្រុម​ស្រមោល​ស្ទួន​\n"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "ក្រុម​ស្រមោល​ %s ៖ គ្មានអ្នកប្រើដែលគ្រប់គ្រង​ %s ទេ\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "លុប​សមាជិក​ដែល​គ្រប់គ្រង​ '%s' ឬ ? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "ក្រុម​ស្រមោល​ %s ៖ គ្មាន​អ្នក​ប្រើ​ %s ទេ\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s ៖ មិនបានធ្វើឲ្យ​ឯកសារទាន់សម័យឡើយ​\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s ៖គ្មាន​ការផ្លាស់ប្ដូរ​\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s ៖ មិនអាច​ធ្វើឲ្យឯកសារ %s ទាន់សម័យ​បានទេ\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "របៀបប្រើ ៖ លេខសម្គាល់ [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "របៀបប្រើ​ ៖ លេខសម្គាល់\n"
+
+msgid " groups="
+msgstr " ក្រុម​="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+
+#, fuzzy
+msgid "Username Port From Latest"
+msgstr "ឈ្មោះ​អ្នក​ប្រើ ច្រក ពី ចុង​ក្រោយ​បំផុត\n"
+
+#, fuzzy
+msgid "Username Port Latest"
+msgstr "ឈ្មោះ​អ្នក​ប្រើ ច្រក ចុង​ក្រោយ​បំផុត​\n"
+
+msgid "**Never logged in**"
+msgstr "**មិន​ដែល​ចូល​សោះ**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s ៖ មិន​​អាច​បង្កើត​ថត​ %s បានឡើយ\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%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 "របៀបប្រើ ៖ %s [-p] [name]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h ម៉ាស៊ីន] [-f ឈ្មោះ]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r ម៉ាស៊ីន​\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+#, fuzzy
+msgid "Invalid login time"
+msgstr "ពេលវេលា​ចូល​មិន​ត្រឹមត្រូវ​\n"
+
+#, fuzzy
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"ប្រព័ន្ធ​បាន​បិទ​សម្រាប់​តំហែទាំ​ទម្រង់ការ\n"
+
+#, fuzzy
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[បាន​វៀង​ការ​ផ្ដាច់ -- បាន​អនុញ្ញាត​ការ​ចូល​ជា root ។]\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr "គ្មាន​ធាតុ​ utmp ឡើយ ។ អ្នក​ត្រូវ​ប្រតិបត្តិ​ \"login\" ពី​កម្រិត​ទាប​បំផុត​ \"sh\""
+
+#, fuzzy, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"អស់​ពេល​ចូល​បន្ទាប់ពី %d វិនាទី ។\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "ចូល ៖ PAM បរាជ័យ​ កំពុង​បោះបង់​ ៖ %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s ចូល ៖ "
+
+msgid "login: "
+msgstr "ចូល​ ៖ "
+
+#, fuzzy, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "បាន​លើសពី​ចំនួន​អតិបរ​មា​នៃ​ការ​សាកល្បង​ (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "ចូល​ ៖ PAM បានស្នើឲ្យ​បោះបង់ចោល​\n"
+
+msgid "Login incorrect"
+msgstr "ចូល​មិន​ត្រឹមត្រូវ​"
+
+#, fuzzy, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "%s ៖ បន្ទាត់​ %d ៖ មិន​អាច​រក​អ្នកប្រើ​ %s ឃើញឡើយ\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s ចូល​ ៖ "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s ៖ ការចែកជាពីរវិធី​​បានបរាជ័យ​ ៖ %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+#, fuzzy
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "ការព្រមាន ៖ បាន​អនុញ្ញាតឲ្យចូល​ម្តង​ទៀត​បន្ទាប់​ពី ចេញ​បណ្តោះអាសន្ន​​\n"
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "ចូល​ចុងក្រោយ ៖​ %s លើ​ %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "ចូល​ចុងក្រោយ​ ៖ %.19s លើ​ %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr "ពី​ %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"បានហួសពេលវេលា​ចូល​​\n"
+"\n"
+
+#, fuzzy
+msgid "Usage: logoutd\n"
+msgstr "របៀបប្រើ​ ៖ លេខសម្គាល់\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: can't open group file\n"
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr "%s ៖ មិន​អាច​បើក​ឯកសារ​ជា​ក្រុម​បាន​ទេ​\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s ៖ បរាជ័យ​ក្នុងការ​ទម្លាក់​សិទ្ធ (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s ៖ បរាជ័យ​ក្នុងការ​ទម្លាក់​សិទ្ធ (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s ៖ វាល គឺ​វែងវែងពេក​\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s  ៖ ថត​មូលដ្ឋាន​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s ៖ មិន​​អាច​បង្កើត​ថត​ %s បានឡើយ\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "របៀបប្រើ ៖ newgrp [-] [group]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "របៀបប្រើ​ ៖ ក្រុម sg [[-c] command]\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s ៖ បរាជ័យ​ក្នុងការ​ទម្លាក់​សិទ្ធ (%s)\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "ពាក្យ​សម្ងាត់​ចាស់ ៖ "
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s ៖ ការចែកជាពីរវិធី​​បានបរាជ័យ​ ៖ %s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s ៖ មិនទាន់មានអ្នក​ប្រើ​ %s ទេ​\n"
+
+msgid "too many groups\n"
+msgstr "ច្រើន​ក្រុមពេក​\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid " -b, --badnames allow bad names\n"
+msgstr ""
+
+msgid " -r, --system create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+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 ID '%s'\n"
+msgstr "%s ៖ឈ្មោះ​អ្នក​ប្រើ​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s ៖ឈ្មោះ​អ្នក​ប្រើ​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s ៖ បន្ទាត់​ %d ៖ បន្ទាត់​មិន​ត្រឹមត្រូវ​\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s ៖ មិនអាច​ធ្វើឲ្យធាតុបញ្ចូល​ទាន់សម័យ​សម្រាប់ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s ៖ បន្ទាត់​ %d ៖ មិន​អាច​បង្កើត​ GID បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s ៖ បន្ទាត់​ %d ៖ មិន​អាច​បង្កើត​ GID បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s ៖ មិនទាន់មានអ្នក​ប្រើ​ %s ទេ​\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s ៖ បន្ទាត់​ %d ៖ មិន​អាច​ធ្វើ​ឲ្យ​ពាក្យ​សម្ងាត់​ទាន់សម័យ​បានឡើយ​\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s ៖ បន្ទាត់​ %d ៖ mkdir បានបរាជ័យ​\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s ៖ បន្ទាត់​ %d ៖ chown បានបរាជ័យ​\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s ៖ បន្ទាត់​ %d ៖ មិនអាចធ្វើឲ្យ​ធាតុបញ្ចូល​ទាន់សម័យបានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s ៖ បរាជ័យ​ក្នុងការ​ទម្លាក់​សិទ្ធ (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s ៖ មិន​អាច​បង្កើត​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s ៖ មិនអាច​ធ្វើឲ្យ​ឯកសារក្រុម​ទាន់សម័យបានទេ​\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid " -q, --quiet quiet mode\n"
+msgstr ""
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid "Old password: "
+msgstr "ពាក្យ​សម្ងាត់​ចាស់ ៖ "
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"បញ្ចូល​ពាក្យ​សម្ងាត់​ថ្មី​ (តួអក្សរ​​អប្បបរមានៃ​ %d អតិបរមានៃ %d)\n"
+"សូម​ប្រើ​អក្សរ​ធំ​ អក្សរ​តូច​ ​និង លេខ​ចូល​គ្នា​ ។\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"បញ្ចូល​ពាក្យ​សម្ងាត់​ថ្មី​ (តួអក្សរ​​អប្បបរមានៃ​ %d អតិបរមានៃ %d)\n"
+"សូម​ប្រើ​អក្សរ​ធំ​ អក្សរ​តូច​ ​និង លេខ​ចូល​គ្នា​ ។\n"
+
+msgid "New password: "
+msgstr "ពាក្យ​សម្ងាត់​ថ្មី​ ៖ "
+
+#, fuzzy
+msgid "Try again."
+msgstr "សូមព្យាយាម​ម្តង​ទៀត​ ។\n"
+
+#, fuzzy
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"ការព្រមាន ៖ ពាក្យ​សម្ងាត់មិនសូវមានសុវត្ថិភាព​ (សូម​បញ្ចូល​វា​ម្តង​ទៀត​​ដើម្បី​ប្រើវា​) ។\n"
+
+msgid "They don't match; try again.\n"
+msgstr "ពួកវាមិនផ្គូរផ្គងគ្នាទេ ។ សូមព្យាយាម​ម្តង​ទៀត​ ។\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "មិនអាចប្ដូរ​ពាក្យ​សម្ងាត់​សម្រាប់​ %s បានឡើយ ។\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "មិនអាចប្ដូរ​ពាក្យ​សម្ងាត់​សម្រាប់​ %s បានឡើយ ។\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s ៖ ឃ្លាំង​ %s មិន​បាន​គាំទ្រឡើយ​\n"
+
+#, c-format
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s ៖ អ្នក​មិនអាច​មើល​ ឬ កែប្រែ​ព័ត៌មាន​ពាក្យ​សម្ងាត់​សម្រាប់​ %s បានឡើយ ។\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "កំពុង​ប្តូរ​ពាក្យ​សម្ងាត់​សម្រាប់​ %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "មិនបានប្ដូរ​ពាក្យ​សម្ងាត់​សម្រាប់​ %s ឡើយ ។\n"
+
+#, fuzzy, c-format
+msgid "%s: password changed.\n"
+msgstr "ពាក្យ​សម្ងាត់​បាន​ប្តូរ​ ។\n"
+
+#, fuzzy, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "ការព្រមាន​ការផុត​កំណត់​នៃ​ពាក្យ​សម្ងាត់​"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr "របៀបប្រើ ៖ %s [input]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr "របៀបប្រើ ៖ %s [input]\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+
+#, fuzzy
+msgid "invalid password file entry"
+msgstr "ធាតុបញ្ចូល​ឯកសារ​ពាក្យសម្ងាត់​មិនត្រឹមត្រូវ\n"
+
+#, fuzzy
+msgid "duplicate password entry"
+msgstr "ធាតុបញ្ចូល​ពាក្យ​សម្ងាត់​ស្ទួន​\n"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "ឈ្មោះ​អ្នក​ប្រើ​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, fuzzy, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "ឈ្មោះ​អ្នក​ប្រើ​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, fuzzy, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "អ្នក​ប្រើ​ %s ៖ គ្មាន​ក្រុម​ %u\n"
+
+#, fuzzy, c-format
+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"
+msgstr "អ្នកប្រើ​ %s ៖ មិនទាន់មាន​កម្មវិធី​ %s នៅឡើយទេ\n"
+
+#, fuzzy, c-format
+msgid "no tcb directory for %s\n"
+msgstr "%s ៖ មិន​​អាច​បង្កើត​ថត​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "create tcb directory for %s?"
+msgstr "%s ៖ មិន​​អាច​បង្កើត​ថត​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "%s ៖ មិន​​អាច​បង្កើត​ថត​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s ៖ មិន​អាច​ចាក់សោ​ឯកសារ​ %s បានទេ\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "មិនមាន​ធាតុបញ្ចូល​ឯកសារ​ពាក្យសម្ងាត់​ដែលផ្គូរផ្គង​នៅក្នុង​ %s ឡើយ\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "បន្ថែម​អ្នក​ប្រើ​ '%s'ក្នុង​ %s ឬ ? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+#, fuzzy
+msgid "invalid shadow password file entry"
+msgstr "ធាតុបញ្ចូល​ឯកសារ​ពាក្យ​សម្ងាត់​ស្រមោល​មិនត្រឹមត្រូវ​\n"
+
+#, fuzzy
+msgid "duplicate shadow password entry"
+msgstr "ធាតុ​បញ្ចូល​ពាក្យសម្ងាត់​ស្រមោល​ស្ទួន​\n"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "អ្នកប្រើ​ %s ៖ ពាក្យ​សម្ងាត់​ចុងក្រោយ​​ប្ដូរនៅក្នុង​អនាគត\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s ៖ មិនអាច​បើក​ឯកសារ​ %s បានទេ\n"
+
+#, fuzzy, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s ៖ មិន​អាច​សរសេរ​ឯកសារ​ឡើង​វិញបានទេ​\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "ដំណើរការ​ជា​ su ទៅ​កាន់​គណនី​នោះ​ DENIED ។\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "ការ​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវពាក្យ​សម្ងាត់ bypassed ។\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "សូម​បញ្ចូល​ពាក្យ​សម្ងាត់ផ្ទាល់ខ្លួន​របស់អ្នក​ ជា​ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ​ ។\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s ៖ មិន​អាច​ចាក់សោ​ឯកសារ​ %s បានទេ\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr ""
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr ""
+
+msgid "Session terminated, terminating shell..."
+msgstr ""
+
+#, c-format
+msgid " ...killed.\n"
+msgstr ""
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr ""
+
+msgid " ...terminated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s ៖ %s\n"
+
+#, fuzzy
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"របៀបប្រើ ៖ su [ជម្រើស] [ការចូល]\n"
+"\n"
+"ជម្រើស ៖\n"
+" -c, --command COMMAND\t\tហុច COMMAND ទៅសែលដែលបានហៅ\n"
+" -h, --help\t\t\tបង្ហាញ​​សា​រ​ជំ​នួយ​​នេះ និង​ចេញ\n"
+" -, -l, --login\t\tធ្វើ​ឲ្យ​សែល​ជា​សែល​ចូល\n"
+" -m, -p,\n"
+" --preserve-environment\tកុំ​កំណត់​អថេរ​បរិស្ថាន និង​រក្សាទុក\n"
+"\t\t\t\tសែលដដែល\n"
+" -s, --shell SHELL\t\tប្រើ SHELL ជំនួស​​ឲ្យលំនាំដើម​នៅ​ក្នុង passwd\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(មិន​អើពើ​)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "អ្នកគ្មាន​ការ​អនុញ្ញាតឲ្យ​ចូល​ទៅ​កាន់​ su ទេ​ %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(បញ្ចូល​ពាក្យ​សម្ងាត់​ផ្ទាល់​ខ្លួនរបស់អ្នក​)"
+
+#, fuzzy, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s ៖ PAM ការ​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវបាន​បរាជ័យ​\n"
+
+#, fuzzy, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "អ្នកគ្មាន​ការ​អនុញ្ញាតឲ្យ​ចូល​ទៅ​កាន់​ su ទេ​ %s\n"
+
+#, fuzzy, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "គ្មាន​ធាតុ​ពាក្យ​សម្ងាត់​សម្រាប់ 'root'​ ឡើយ\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s ៖ ត្រូវ​តែ​រត់​ពី ស្ថានីយមួយ\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s ៖ pam_start ៖ កំហុស​ %d\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s ៖ មិនអាចប្ដូរឈ្មោះ​ថត​ %s ទៅ​ជា​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "Cannot execute %s\n"
+msgstr "មិន​អាចប្រតិបត្តិ​ %s បានទេ"
+
+#, fuzzy
+msgid "No password file"
+msgstr "គ្មាន​ឯកសារ​ពាក្យ​សម្ងាត់ឡើយ​\n"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+#, fuzzy
+msgid "No password entry for 'root'"
+msgstr "គ្មាន​ធាតុ​ពាក្យ​សម្ងាត់​សម្រាប់ 'root'​ ឡើយ\n"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"ចុចគ្រាប់ចុច បញ្ជា-d ដើម្បី​បន្ត​ជាមួយ​ការ​ចាប់ផ្ដើម​ធម្មតា\n"
+"(ឬ ផ្ដល់​ពាក្យសម្ងាត់ root ដើម្បី​ជួសជុល​ប្រព័ន្ធ) ៖"
+
+#, fuzzy
+msgid "Entering System Maintenance Mode"
+msgstr "កំពុង​បញ្ចូល​របៀប​តំហែទាំ​ប្រព័ន្ធ​\n"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s ៖ មិន​អាច​បង្កើត​ឯកសារ​លំនាំ​ដើម​ថ្មី​បានឡើយ​\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s ៖ មិន​អាច​បង្កើត​ឯកសារ​លំនាំ​ដើម​ថ្មី​បានឡើយ​\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s ៖ មិន​អាច​បើក​ឯកសារ​លំនាំដើម​ថ្មី​​បានលឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s ៖ បន្ទាត់​ %d ៖ chown បានបរាជ័យ​\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s ៖ មិន​​អាច​បង្កើត​ថត​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s ៖​ ប្តូរ​ឈ្មោះ​ ៖ %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s ៖ ក្រុម​ '%s' គឺជាក្រុម​ NIS ។\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s ៖ ក្រុម​ដែលបានបញ្ជាក់​ច្រើនពេក​ (អតិ​ %d) ។\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr "របៀបប្រើ ៖ %s [input]\n"
+
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr ""
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr ""
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr ""
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr ""
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s  ៖ ថត​មូលដ្ឋាន​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s ៖ សេចក្តី​អត្ថាធិប្បាយ​មិនត្រឹមត្រូវ​ '%s'\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s ៖ ថត​ផ្ទះ​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s ៖ បានទាមទារ​ពាក្យ​សម្ងាត់​ស្រមោល​​សម្រាប់​-e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s ៖ បានទាមទារពាក្យ​សម្ងាត់​ស្រមោល​​សម្រាប់​ -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s ៖ វាល​មិនត្រឹមត្រូវ​ '%s'\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s ៖ សែល​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s ៖ ការព្រមាន ៖​ %s មិនត្រូវបានទទួល​យក​ដោយ %s ឡើយ\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rewrite password file\n"
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s ៖ មិន​អាច​សរសេរ​ឯកសារ​ពាក្យ​សម្ងាត់​ឡើង​វិញ​បានឡើយ\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s ៖ មិន​​អាច​បង្កើត​ថត​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s ៖ បរាជ័យ​ក្នុងការ​ទម្លាក់​សិទ្ធ (%s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error updating files\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s ៖ មានកំហុសក្នុងការ​ធ្វើឲ្យ​ឯកសារទាន់សម័យ\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s ៖ មិន​​អាច​បង្កើត​ថត​ %s បានឡើយ\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s ៖ ថត​ផ្ទះ​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "បរាជ័យ​ក្នុងការ​ផ្លាស់ប្ដូរ​ម្ចាស់​ប្រអប់សំបុត្រ"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s ៖ មិន​​អាច​បង្កើត​ថត​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s ៖ បន្ទាត់​ %d ៖ chown បានបរាជ័យ​\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s ៖ បន្ទាត់​ %d ៖ chown បានបរាជ័យ​\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "កំពុង​បង្កើត​ឯកសារ​ប្រអប់​សំបុត្រ​"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr "រក​ក្រុម​​ 'សំបុត្រ​' មិន​ឃើញ​ឡើយ ។ កំពុង​បង្កើត​ឯកសារប្រអប់​សំបុត្រ​អ្នក​ប្រើ​ជាមួយ​របៀប​ 0600 ។\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "ការកំណត់​សិទ្ធ​លើ​ឯកសារ​ប្រអប់​សំបុត្រ​"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s ៖ អ្នក​ប្រើ​ %s មាន​រួច​ហើយ​\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr "%s ៖ ក្រុម​ %s មាន​រួច​ហើយ​ - ប្រសិនបើ​អ្នក​ចង់​បន្ថែម​អ្នក​ប្រើទៅ​កាន់​ក្រុម​នោះ​ ប្រើ​ -g ។\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s ៖ មិន​អាច​បង្កើត​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s ៖ UID %u មិន​មែន​មាន​តែមួយទេ​\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s ៖ មិន​​អាច​បង្កើត​ថត​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s ៖ មិន​អាច​បង្កើត​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s ៖ មិន​អាច​បង្កើត​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s ៖ មិន​អាច​បង្កើត​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s ៖ ការព្រមាន​ ៖ មានថតផ្ទះ​រួចហើយ ។\n"
+"មិនចម្លង​​ឯកសារណាមួយ​ពីថត​ skel ចូលក្នុង​វានោះទេ ។\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr "%s ៖ មិនអាចផ្លាស់​​ប្តូរ​អ្នក​ប្រើបានទេ​ '%s' លើ​ម៉ាស៊ីន​ភ្ញៀវ NIS បានទេ ។\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr ""
+
+#, fuzzy, c-format
+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 remove entry %lu from %s\n"
+msgstr "%s ៖ មិនអាចប្ដូរឈ្មោះ​ថត​ %s ទៅ​ជា​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s ៖ ថត​ផ្ទះ​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s  ៖ ការព្រមាន​ ៖ មិន​អាច​យកចេញបានឡើយ "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s ៖ %s មិន​បានទទួលយក​​ %s ទេ, មិនយកចេញ​\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s ៖ បរាជ័យ​ក្នុងការ​ទម្លាក់​សិទ្ធ (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s ៖ មិនអាចប្ដូរឈ្មោះ​ថត​ %s ទៅ​ជា​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s ៖ មិនអាចប្ដូរឈ្មោះ​ថត​ %s ទៅ​ជា​ %s បានឡើយ\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s ៖ អ្នកប្រើ​ %s គឺជា​អ្នក​​ប្រើ​ NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s ៖ ថត​ផ្ទះ​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s ៖ មិនយក​ថត​ %s ចេញ​ឡើយ (នឹងយក​ថតផ្ទះ​របស់អ្នកប្រើ %s ចេញ)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s ៖ មានកំហុស​ក្នុងការយក​ថត​ %s ចេញ\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s ៖ មានកំហុស​ក្នុងការយក​ថត​ %s ចេញ\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr ""
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr ""
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr ""
+
+msgid " -L, --lock lock the user account\n"
+msgstr ""
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr ""
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr ""
+
+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"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s ៖ អ្នក​ប្រើ​ %s មាន​រួច​ហើយ​\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s ៖ កាលបរិច្ឆទ​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s ៖ កាលបរិច្ឆទ​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: no options\n"
+msgstr "%s ៖ មិនអាច​បើក​ឯកសារ​ %s បានទេ\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s ៖ ពាក្យ​សម្ងាត់​ស្រមោល​បានត្រូវការ​​ -e និង -f\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s ៖ មានថត​ %s ​រួច​ហើយ​\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s ៖ មិន​​អាច​បង្កើត​ថត​ %s បានឡើយ\n"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s ៖ ការព្រមាន ៖ បរាជ័យ​ក្នុងការ​បញ្ចប់​ការយកថតផ្ទះ %s ចាស់ចេញ"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s ៖ មិនអាចប្ដូរឈ្មោះ​ថត​ %s ទៅ​ជា​ %s បានឡើយ\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s ៖ ការព្រមាន ៖​ %s មិនត្រូវបានទទួល​យក​ដោយ %s ឡើយ\n"
+
+msgid "failed to change mailbox owner"
+msgstr "បរាជ័យ​ក្នុងការ​ផ្លាស់ប្ដូរ​ម្ចាស់​ប្រអប់សំបុត្រ"
+
+msgid "failed to rename mailbox"
+msgstr "​បរាជ័យ​ក្នុងការប្ដូរឈ្មោះប្រអប់"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s ៖ បរាជ័យ​ក្នុងការ​ទម្លាក់​សិទ្ធ (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s ៖ បរាជ័យ​ក្នុងការ​ទម្លាក់​សិទ្ធ (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s ៖ បរាជ័យ​ក្នុងការ​ទម្លាក់​សិទ្ធ (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s ៖ បរាជ័យ​ក្នុងការ​ទម្លាក់​សិទ្ធ (%s)\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid " -g, --group edit group database\n"
+msgstr ""
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr ""
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s ៖ បរាជ័យ​ក្នុងការ​ទម្លាក់​សិទ្ធ (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s ៖ %s មិនត្រូវបានប្ដូរឡើយ​\n"
+
+#, fuzzy
+msgid "failed to create scratch directory"
+msgstr "​បរាជ័យ​ក្នុងការប្ដូរឈ្មោះប្រអប់"
+
+#, fuzzy
+msgid "failed to drop privileges"
+msgstr "%s ៖ បរាជ័យ​ក្នុងការ​ទម្លាក់​សិទ្ធ (%s)\n"
+
+#, fuzzy
+msgid "Couldn't get file context"
+msgstr "មិនអាច​ចាក់សោ​ឯកសារបានឡើយ"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+#, fuzzy
+msgid "failed to gain privileges"
+msgstr "%s ៖ បរាជ័យ​ក្នុងការ​ទម្លាក់​សិទ្ធ (%s)\n"
+
+msgid "Couldn't lock file"
+msgstr "មិនអាច​ចាក់សោ​ឯកសារបានឡើយ"
+
+msgid "Couldn't make backup"
+msgstr "មិនអាច​បង្កើត​ព័ត៌មាន​បម្រុងទុក​បានឡើយ"
+
+#, fuzzy, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s ៖ %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr "%s ៖ %s រក​មិន​ឃើញ​ក្នុង​ /etc/passwd ទេ\n"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+#, fuzzy
+msgid "failed to open scratch file"
+msgstr "%s ៖ មិនអាច​បើក​ឯកសារក្រុម​បានទេ​\n"
+
+#, fuzzy
+msgid "failed to unlink scratch file"
+msgstr "%s ៖ វាល គឺ​វែងវែងពេក​\n"
+
+#, fuzzy
+msgid "failed to stat edited file"
+msgstr "​បរាជ័យ​ក្នុងការប្ដូរឈ្មោះប្រអប់"
+
+#, fuzzy
+msgid "failed to allocate memory"
+msgstr "បរាជ័យ​ក្នុងការ​ផ្លាស់ប្ដូរ​ម្ចាស់​ប្រអប់សំបុត្រ"
+
+#, fuzzy
+msgid "failed to create backup file"
+msgstr "​បរាជ័យ​ក្នុងការប្ដូរឈ្មោះប្រអប់"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s ៖ មិន​អាច​ស្តារ %s ៖ %s (ការប្ដូរ​របស់អ្នក​គឺនៅក្នុង​ %s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s  ៖ ថត​មូលដ្ឋាន​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "របៀបប្រើ ៖ %s [input]\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "malloc(%d) បាន​បរាជ័យ​\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "ការ​ប្រើប្រាស់​ ៖ ប្តូរ​អ្នកប្រើ​ [options]​\n"
+#~ "ជម្រើស​ ៖\n"
+#~ " -d, --ថ្ងៃ​មុន​ LAST_DAY\t កំណត់​ការប្ដូរ​ពាក្យ​សម្ងាត់​មុន ​ទៅ​ជា​ LAST_DAY\n"
+#~ " -E, --កាលបរិច្ឆេទ​ផុត​កំណត់​ EXPIRE_DATE\t កំណត់​កាលបរិច្ឆេទ​ការផុត​កំណត់​​របស់គណនីទៅ​ជា​ "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --ជំនួយ​\t\t\t បង្ហាញ​សារ​ជំនួយនេះ ហើយ​ ចេញ​\n"
+#~ " -I, --អសកម្ម​ INACTIVE\t កំណត់​ពាក្យ​សម្ងាត់​ឲ្យ​​អសកម្ម ​បន្ទាប់​ពី​ការផុត​កំណត់​\n"
+#~ "\t\t\t\tទៅជា INACTIVE\n"
+#~ " -l, --បញ្ជី​\t\t\t បង្ហាញព័ត៌មាន​ចាស់​របស់​​គណនី​\n"
+#~ " -m, --ចំនួនថ្ងៃ​អប្បរមា MIN_DAYS\t កំណត់​ចំនួន​ថ្ងៃ​អប្បបរមា ​មុន​ពាក្យ​សម្ងាត់​ \n"
+#~ "\t\t\t\tប្តូរទៅ​ជា​ MIN_DAYS\n"
+#~ " -M, --ចំនួនថ្ងៃ​អតិបរមា MAX_DAYS\t កំណត់​ចំនួន​ថ្ងៃ​អតិបរមា ​មុន​ពាក្យ​សម្ងាត់​\n"
+#~ "\t\t\t\tប្តូរ​ទៅ​ជា​ MAX_DAYS\n"
+#~ " -W, --ថ្ងៃព្រមាន WARN_DAYS\tកំណត់ការព្រមាន​ថ្ងៃ​ផុត​កំណត់​ទៅជា​ WARN_DAYS\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s ៖ PAM ការ​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវបាន​បរាជ័យ​\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "កា​រប្រើប្រាស់​ ៖ %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr ""
+#~ "របៀបប្រើ ៖ %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "របៀបប្រើ ៖ chpasswd [ជម្រើស]\n"
+#~ "\n"
+#~ "ជម្រើស ៖\n"
+#~ " -e, --encrypted\tពាក្យសម្ងាត់​ដែល​បាន​ផ្ដល់​ត្រូវ​បាន​អ៊ិនគ្រីប\n"
+#~ " -h, --help\t\tបង្ហាញ​សារ​ជំនួយ​​នេះ និង​ចេញ\n"
+#~ " -m, --md5\t\tប្រើ​ការ​អ៊ិនគ្រីប MD5 ជំនួស​ឲ្យ DES នៅ​ពេល​ដែល​ពាក្យសម្ងាត់\n"
+#~ "\t\t\tដែល​បាន​ផ្ដល់​មិន​ត្រូវបាន​អ៊ិនគ្រីប​ទេ\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "របៀបប្រើ ៖ userdel [ជម្រើស] LOGIN\n"
+#~ "\n"
+#~ "ជម្រើស ៖\n"
+#~ " -f, --force\t\t\tបង្ខំ​ឲ្យ​យក​ឯកសារ​ចេញ ទោះបី​ជា​មិន​បាន​គ្រប់គ្រង​ដោយ​អ្នកប្រើ​ក៏ដោយ\n"
+#~ " -h, --help\t\t\tបង្ហាញ​សារ​ជំនួយ​នេះ និង​ចេញ\n"
+#~ " -r, --remove\t\t\tយកថ​ត​ផ្ទះ និង​ហុង​សំបុត្រ​ចេញ\n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "របៀបប្រើ ៖ ការផុតកំណត់ {-f|-c}\n"
+
+#, fuzzy
+#~| msgid "%s: cannot open file %s\n"
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "%s ៖ មិនអាច​បើក​ឯកសារ​ %s បានទេ\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "របៀបប្រើ​ ៖ ក្រុម​ groupdel \n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "របៀបប្រើ ៖​ %s [-r] [-s] [group [gshadow]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "របៀបប្រើ ៖ %s [-r] [-s] [group]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s ៖ -s និង​ -r គឺមិន​ត្រូវ​គ្នាទេ​\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "របៀបប្រើ​ ៖ ក្រុម​ groupdel \n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "របៀបប្រើ​ ៖ ក្រុម​ groupdel \n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "របៀបប្រើ ៖ lastlog [ជម្រើស]\n"
+#~ "\n"
+#~ "ជម្រើស ៖\n"
+#~ " -b, --before DAYS\tបោះពុម្ពកំណត់កំណត់ហេតុចុងក្រោយចាស់ជាង DAYS\n"
+#~ " -h, --help\t\tបង្ហាញ​សារ​ជំនួយ​នេះ និង​ចេញ\n"
+#~ " -t, --time DAYS\tបោះពុម្ព​តែ​កំណត់ត្រា​កំណត់​ហេតុ​ចុង​ក្រោយ​ដែល​ថ្មី​ជាង DAYS ប៉ុណ្ណោះ\n"
+#~ " -u, --user LOGIN\tបោះពុម្ព​កំណត់ត្រា​កំណត់ហេតុ​ចុង​ក្រោយ​សម្រាប់​អ្នក​ប្រើ​ដែល​មាន LOGIN ដែល​បាន​"
+#~ "បញ្ជាក់\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "របៀបប្រើ ៖ passwd [ជម្រើស] [ការចូល]\n"
+#~ "\n"
+#~ "ជម្រើស ៖\n"
+#~ " -a, --all\t\t\tរាយការណ៍​ស្ថានភាព​ពាក្យសម្ងាត់​អំពី​គណនី​ទាំងអស់\n"
+#~ " -d, --delete\t\t\tលុប​ពាក្យសម្ងាត់​សម្រាប់​គណនី​ដែល​មាន​ឈ្មោះ\n"
+#~ " -e, --expire\t\t\tបង្ហាញ​ឲ្យ​ពាក្យសម្ងាត់​ផុត​កំណត់​សម្រាប់​គណនី​ដែល​មាន​ឈ្មោះ\n"
+#~ " -h, --help\t\t\tបង្ហាញ​សារ​ជំនួយ​នេះ និង​ចេញ\n"
+#~ " -k, --keep-tokens\t\tផ្លាស់ប្ដូរ​ពាក្យសម្ងាត់ ក្នុ​ង​ក​រណី​​ដែល​ផុត​កំណត់\n"
+#~ " -i, --inactive INACTIVE\tកំណត់​ពាក្យសម្ងាត់​ឲ្យ​អសកម្ម​បន្ទាប់​ពី​ផុត​កំណត់\n"
+#~ "\t\t\t\tto INACTIVE\n"
+#~ " -l, --lock\t\t\tចាក់សោ​គណនី​ដែល​មាន​ឈ្មោះ\n"
+#~ " -n, --mindays MIN_DAYS\tកំណត់ចំនួន​ថ្ងៃ​អប្បបរមា​មុន​ពាក្យសម្ងាត់\n"
+#~ "\t\t\t\tផ្លាស់ប្ដូរទៅ MIN_DAYS\n"
+#~ " -q, --quiet\t\t\tរបៀប​ស្ងាត់\n"
+#~ " -r, --repository REPOSITORY\tផ្លាស់ប្ដូរ​ពាក្យសម្ងាត់​នៅ​ក្នុង​ឃ្លាំង REPOSITORY\n"
+#~ " -S, --status\t\t\tរាយការណ៍​ស្ថានភាព​ពាក្យសម្ងាត់​អំពី​គណនី​ដែល​មាន​ឈ្មោះ\n"
+#~ " -u, --unlock\t\t\tដោះសោ​គណនី​ដែល​មាន​ឈ្មោះ\n"
+#~ " -w, --warndays WARN_DAYS\tកំណត់​ថ្ងៃ​ព្រមាន​ផុត​កំណត់​ទៅ​ជា WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS\tកំណត់​ចំនួនថ្ងៃ​អតិបរមា​មុន​ពាក្យសម្ងាត់\n"
+#~ "\t\t\t\tផ្លាស់ប្ដូរ​ទៅ​ជា MAX_DAYS\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr "របៀបប្រើ ៖ %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr "របៀបប្រើ ៖ %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "របៀបប្រើ​ ៖ លេខសម្គាល់\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "របៀបប្រើ​ ៖ លេខសម្គាល់\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "មិន​ស្គាល់​លេខ​សម្គាល់​ ៖ %s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "គ្មានសែល​\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force removal of files,\n"
+#~ " even if not owned by user\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -r, --remove remove home directory and mail spool\n"
+#~ "\n"
+#~ msgstr ""
+#~ "របៀបប្រើ ៖ userdel [ជម្រើស] LOGIN\n"
+#~ "\n"
+#~ "ជម្រើស ៖\n"
+#~ " -f, --force\t\t\tបង្ខំ​ឲ្យ​យក​ឯកសារ​ចេញ ទោះបី​ជា​មិន​បាន​គ្រប់គ្រង​ដោយ​អ្នកប្រើ​ក៏ដោយ\n"
+#~ " -h, --help\t\t\tបង្ហាញ​សារ​ជំនួយ​នេះ និង​ចេញ\n"
+#~ " -r, --remove\t\t\tយកថ​ត​ផ្ទះ និង​ហុង​សំបុត្រ​ចេញ\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "របៀបប្រើ ៖ usermod [ជម្រើស] LOGIN\n"
+#~ "\n"
+#~ "ជម្រើស ៖\n"
+#~ " -a, --append GROUP\t\tបន្ថែម​អ្នក​ប្រើ​ទៅ​ខាង​ចុង​ក្រុម​បន្ទាប់បន្សំ\n"
+#~ " -c, --comment COMMENT\t\tតម្លៃ​ថ្មី​របស់​វាល GECOS\n"
+#~ " -d, --home HOME_DIR\t\tថតផ្ទះ​ថ្មី​សម្រាប់​គណនី​អ្នកប្រើ​ថ្មី\n"
+#~ " -e, --expiredate EXPIRE_DATE\tកំណត់​កាលបរិច្ឆេទ​ផុត​កំណត់​ទៅ​ជា EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE\tកំណត់​ពាក្យសម្ងាត់​ឲ្យ​អសកម្ម​បន្ទាប់​ពី​ផុត​កំណត់\n"
+#~ "\t\t\t\tto INACTIVE\n"
+#~ " -g, --gid GROUP\t\tបង្ខំ​ឲ្យ​ប្រើ GROUP ជា​ក្រុម​សំខាន់​ថ្មី\n"
+#~ " -G, --groups GROUPS\t\tបញ្ជី​ថ្មី​របស់​ក្រុម​បន្ទាប់បន្សំ\n"
+#~ " -h, --help\t\t\tបង្ហាញ​សារ​ជំនួ​យនេះ និង​ចេញ\n"
+#~ " -l, --login NEW_LOGIN\t\tតម្លៃ​ថ្មី​របស់​ឈ្មោះ​ចូល\n"
+#~ " -L, --lock\t\t\tចាក់សោ​គណនី​អ្នកប្រើ\n"
+#~ " -m, --move-home\t\tផ្លាស់ទី​មាតិកា​របស់​ថតផ្ទះ​ទៅ\n"
+#~ "\t\t\t\tទីតាំង​ថ្មី (ប្រើ​តែជា​មួយ -d ប៉ុណ្ណោះ)\n"
+#~ " -o, --non-unique\t\tអនុញ្ញាត​ឲ្យ​ប្រើ UID (មិនមាន​តែ​មួយគត់) ស្ទួន\n"
+#~ " -p, --password PASSWORD\tប្រើ​​ពាក្យសម្ងា​ត់​​ដែ​ល​បាន​អ៊ិនគ្រីប​សម្រាប់​​ពាក្យសម្ងា​ត់​ថ្មី\n"
+#~ " -s, --shell SHELL\t\tសែល​​ចូ​ល​​ថ្មី​​សម្រាប់​​គណនី​អ្នកប្រើ\n"
+#~ " -u, --uid UID\t\t\t UID ថ្មី​សម្រាប់​គណនី​អ្នកប្រើ\n"
+#~ " -U, --unlock\t\t\tដោះសោ​គណនី​អ្នកប្រើ\n"
+#~ "\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s ៖ មិន​ផ្តល់​ទង់​ឲ្យឡើយ​\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group edit group database\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -p, --passwd edit passwd database\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow edit shadow or gshadow database\n"
+#~ " -u, --user which user's tcb shadow file to edit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "របៀបប្រើ ៖ vipw [ជម្រើស]\n"
+#~ "\n"
+#~ "ជម្រើស ៖\n"
+#~ " -g, --group\t\t\tកែសម្រួល​មូលដ្ឋាន​ទិន្នន័យ​ក្រុម\n"
+#~ " -h, --help\t\t\tបង្ហាញ​សារ​ជំនួយ​នេះ និង​ចេញ\n"
+#~ " -p, --passwd\t\t\tកែសម្រួល​មូលដ្ឋាន​ទិន្នន័យ passwd\n"
+#~ " -q, --quiet\t\t\tរបៀប​ស្ងាត់\n"
+#~ " -s, --shadow\t\t\tកែសម្រួល​មូលដ្ឋាន​ទិន្នន័យ​ស្រមោល ឬ gshadow\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "របៀបប្រើ ៖ %s [input]\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s ៖ មិន​អាច​បង្កើត​ %s បានឡើយ\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s ៖ មិន​អាច​ chown %s បានឡើយ\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all display faillog records for all users\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -l, --lock-time SEC after failed login lock account to SEC "
+#~ "seconds\n"
+#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
+#~ " -r, --reset reset the counters of login failures\n"
+#~ " -t, --time DAYS display faillog records more recent than "
+#~ "DAYS\n"
+#~ " -u, --user LOGIN display faillog record or maintains "
+#~ "failure\n"
+#~ " counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ " options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "របៀប​ប្រើ ៖ faillog [ជម្រើស]\n"
+#~ "\n"
+#~ "ជម្រើស ៖\n"
+#~ " -a, --all\t\t\tបង្ហាញ​កំណត់ត្រា​កំណត់ហេតុ​បរាជ័យ សម្រាប់​អ្នក​ប្រើ​ទាំងអស់\n"
+#~ " -h, --help\t\t\tបង្ហាញ​សារ​ជំនួយ​នេះ ហើយ​ចេញ\n"
+#~ " -l, --lock-time វិ.\t\tបន្ទាប់​ពី​ចូល​បរាជ័យ ត្រូវ​ចាក់សោ​គណនី​រយៈពេល វិ. វិនាទី\n"
+#~ " -m, --maximum អតិ.\t\tកំណត់​ចំនួន​អតិបរមា​នៃ​ការ​ចូល​ដែល​បរាជ័យ ចំនួន អតិ.\n"
+#~ " -r, --reset\t\t\tកំណត់​អថេរ​រាប់​នៃ​ការ​ចូល​ដែល​បរាជ័យ​ឡើង​វិញ\n"
+#~ " -t, --time ថ្ងៃ\t\tបង្ហាញ​កំណត់ត្រា​កំណត់ហេតុ​បរាជ័យ ថ្មីៗ​ជាង \"ថ្ងៃ\" ថ្ងៃ\n"
+#~ " -u, --user ឈ្មោះចូល\t\tបង្ហាញ​កំណត់ត្រា​កំណត់ហេតុ​បរាជ័យ ឬ ថែទាំ​អថេរ​រាប់​ការ​បរាជ័យ\n"
+#~ "\t\t\t\tនិង កំណត់ (បើ​ប្រើ​ជាមួយ​ជម្រើស -r, -m ឬ -l) សម្រាប់​តែ\n"
+#~ "\t\t\t\tអ្នកប្រើ​ដែល​មាន​ឈ្មោះ​ចូល \"ឈ្មោះចូល\"\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force exit with success status if the\n"
+#~ " specified group already exists\n"
+#~ " -g, --gid GID use GID for the new group\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique allow create group with duplicate\n"
+#~ " (non-unique) GID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new group\n"
+#~ " -r, --system create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "របៀបប្រើ ៖ groupadd [ជម្រើស] ក្រុម\n"
+#~ "\n"
+#~ "ជម្រើស ៖\n"
+#~ " -f, --force\t\t\tបង្ខំឲ្យ​ចេញ​ជា​មួយ​នឹង​ស្ថានភាព​ជោគជ័យ ប្រសិន​បើ​ក្រុម\n"
+#~ "\t\t\t\tដែល​បាន​បញ្ជាក់​មាន​រួច​ហើយ\n"
+#~ " -g, --gid GID\t\t\tប្រើ GID សម្រាប់​ក្រុមថ្មី\n"
+#~ " -h, --help\t\t\tបង្ហាញ​សារ​ជំនួយ​នេះ និង​ចេញ\n"
+#~ " -K, --key KEY=VALUE\t\tបដិសេធលំនាំដើមរបស់ /etc/login.defs \n"
+#~ " -o, --non-unique\t\tអនុញ្ញាត​ឲ្យ​បង្កើត​ក្រុម​ដែល​មាន\n"
+#~ "\t\t\t\t GID (មិនមាន​តែមួយ​គត់) ស្ទួន\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --gid GID force use new GID by GROUP\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "របៀបប្រើ ៖ groupadd ក្រុម [options]​\n"
+#~ "\n"
+#~ "ជម្រើស ៖\n"
+#~ " -f, --បង្ខំ​ \t\t បង្ខំឲ្យ​​ចេញ​ជាមួយ​ស្ថានភាព​ជោគជ័យ​ ប្រសិនបើ​មាន​\n"
+#~ "\t\t\t\tក្រុមដែលបានបញ្ជាក់​​មាន​រួច​ហើយ​\n"
+#~ " -g, --gid GID\t\tប្រើ​ GID សម្រាប់​ក្រុម​ថ្មី​\n"
+#~ " -h, --ជំនួយ\t\t\tបង្ហាញ​សារជំនួយ​​នេះ​ ហើយ​ ចេញ​\n"
+#~ " -K, --កូនសោ KEY=VALUE\t\tបដិសេធ​ /etc/login.defs លំនាំ​ដើម​\n"
+#~ " -o, --មិនមែនមានតែមួយ\t\t អនុញ្ញាតឲ្យ​​បង្កើត​ក្រុម​ស្ទួន​\n"
+#~ "\t\t\t\t(មិនមែនមានតែមួយ) GID\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~ " home directory\n"
+#~ " -c, --comment COMMENT set the GECOS field for the new user "
+#~ "account\n"
+#~ " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~ " -D, --defaults print or save modified default useradd\n"
+#~ " configuration\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP for the new user account\n"
+#~ " -G, --groups GROUPS list of supplementary groups for the new\n"
+#~ " user account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -l, --no-log-init do not add the user to the lastlog and\n"
+#~ " faillog databases\n"
+#~ " -m, --create-home create home directory for the new user\n"
+#~ " account\n"
+#~ " -M, --no-create-home do not create user's home directory\n"
+#~ " (overrides /etc/login.defs)\n"
+#~ " -N, --no-user-group do not create a group with the same name "
+#~ "as\n"
+#~ " the user\n"
+#~ " -o, --non-unique allow create user with duplicate\n"
+#~ " (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new user\n"
+#~ " account\n"
+#~ " -r, --system create a system account\n"
+#~ " -s, --shell SHELL the login shell for the new user account\n"
+#~ " -u, --uid UID force use the UID for the new user "
+#~ "account\n"
+#~ " -U, --user-group create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "របៀបប្រើ ៖ useradd [ជម្រើស] LOGIN\n"
+#~ "\n"
+#~ "ជម្រើស ៖\n"
+#~ " -b, --base-dir BASE_DIR\tថត​មូលដ្ឋាន​សម្រាប់​គណនី​អ្នក​ប្រើ​ថ្មី\n"
+#~ "\t\t\t\tថតផ្ទះ\n"
+#~ " -c, --comment COMMENT\t\tកំណត់វាល GECOS សម្រាប់​គណនី​អ្នកប្រើ​ថ្មី\n"
+#~ " -d, --home-dir HOME_DIR\tថត​ផ្ទះ​សម្រាប់​គណនី​អ្នក​ប្រើ​ថ្មី\n"
+#~ " -D, --defaults\t\tបោះពុម្ព ឬ​រក្សាទុក useradd លំនាំដើម​ដែល​បាន​កែប្រែ\n"
+#~ "\t\t\t\tconfiguration\n"
+#~ " -e, --expiredate EXPIRE_DATE\tកំណត់​កាលបរិច្ឆេទ​គណនី​ទៅ​ជា EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE\tកំណត់​ពាក្យ​សម្ងាត់​ឲ្យ​អសកម្ម​បន្ទាប់​ពី​ផុតកំណត់\n"
+#~ "\t\t\t\tto INACTIVE\n"
+#~ " -g, --gid GROUP\t\tបង្ខំ​ឲ្យ​ប្រើ GROUP សម្រាប់​គណនី​អ្នក​ប្រើ​ថ្មី\n"
+#~ " -G, --groups GROUPS\t\tបញ្ជី​របស់​ក្រុម​ផ្ដល់​សម្រាប់\n"
+#~ "\t\t\t\tគណនី​អ្នក​ប្រើ​ថ្មី\n"
+#~ " -h, --help\t\t\tបង្ហាញ​សារ​ជំនួយ​នេះ និង​ចេញ\n"
+#~ " -k, --skel SKEL_DIR\t\tបញ្ជាក់ថត skel ជំនួស\n"
+#~ " -K, --key KEY=VALUE\t\tបដិសេធលំនាំដើម /etc/login.defs\n"
+#~ " -m, --create-home\t\tបង្កើត​ថត​ផ្ទះ​សម្រាប់​អ្នកប្រើ​ថ្មី\n"
+#~ "\t\t\t\taccount\n"
+#~ " -o, --non-unique\t\tអនុញ្ញា​ឲ្យ​បង្កើត​អ្នកប្រើ​ដែល​មាន\n"
+#~ "\t\t\t\t UID(មិនមែន​តែ​មួយគត់) ស្ទួន \n"
+#~ " -p, --password PASSWORD\tប្រើ​ពាក្យសម្ងាត់​ដែល​បាន​អ៊ិនគ្រីប​សម្រាប់\n"
+#~ "\t\t\t\tគណនី​អ្នកប្រើ​ថ្មី\n"
+#~ " -s, --shell SHELL\t\tសែល​ចូល​សម្រាប់​គណនី​អ្នកប្រើ​ថ្មី\n"
+#~ " -u, --uid UID\t\t\tបង្ខំឲ្យប្រើ UID សម្រាប់​គណនី​អ្នកប្រើ​ថ្មី\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "Password set to expire."
+#~ msgstr "កំណត់​ពាក្យ​សម្ងាត់​ឲ្យ​ផុត​កំណត់​ ។\n"
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s ៖ មិនអាច​ចាក់សោ​ឯកសារ​ពាក្យ​សម្ងាត់​បានទេ​\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s ៖ មិន​អាច​បើក​ឯកសារ​ពាក្យ​សម្ងាត់​\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s ៖ មិនអាច​ចាក់សោ​​ឯកសារ​ពាក្យ​សម្ងាត់ស្រមោល​បានទេ\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s ៖ មិន​អាច​បើក​ឯកសារពាក្យ​សម្ងាត់​ស្រមោលបានទេ\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s ៖ មិនអាច​សរសេរ​ឯកសារពាក្យសម្ងាត់ស្រមោល​ឡើងវិញ​បានទេ​\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s ៖ មិនអាច​សរសេរ​ឯកសារពាក្យសម្ងាត់​ឡើងវិញបានទេ​\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s ៖ មិនអាច​ធ្វើ​ឲ្យ​ឯកសារពាក្យសម្ងាត់​ស្រមោលទាន់សម័យបានទេ\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tឈ្មោះពេញ​ ៖ %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tលេខ​បន្ទប់​ ៖ %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tទូរស័ព្ទ​​​កន្លែង​​​ធ្វើការ ៖ %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tទូរស័ព្ទនៅ​ផ្ទះ ៖ %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "មិន​អាច​ចាក់សោ​ឯកសារ​ពាក្យ​សម្ងាត់​បានទេ ។ សូមព្យាយាម​ម្តង​ទៀតនៅ​ពេល​ក្រោយ​ ។\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "មានកំហុស​ក្នុងការ​ធ្វើ​ឲ្យ​​ធាតុបញ្ចូល​​ពាក្យសម្ងាត់ទាន់សម័យ ។\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "មិនអាច​ដាក់ស្នើ​ការផ្លាស់ប្ដូរ​ឯកសារពាក្យសម្ងាត់​បានឡើយ​ ។\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "មិន​អាច​ដោះសោ​ឯកសារ​ពាក្យ​សម្ងាត់បានឡើយ​ ។\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s ៖ មិន​អាច​ចាក់​សោ​​​ឯកសារជា​​ក្រុម​បាន​ទេ\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s ៖មិន​អាច​ចាក់សោ​ឯកសារ​ gshadow បានទេ\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s ៖ មិន​អាច​បើក​ឯកសារ​ស្រមោល​បានទេ\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s ៖ មានកំហុស​ក្នុងការ​ធ្វើឲ្យឯកសារស្រមោល​ទាន់សម័យ​\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s  ៖ មានកំហុស​ក្នុងការ​ធ្វើឲ្យ​ធាតុ​បញ្ចូល​ក្រុម​​ទាន់សម័យ\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s ៖ បន្ទាត់​ %d ៖ មិន​ស្គាល់​ក្រុម​ %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s ៖ បន្ទាត់​ %d ៖ មិនអាចធ្វើឲ្យ​ធាតុបញ្ចូល​ទាន់សម័យបានឡើយ\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s ៖ មិនអាច​ចាក់​សោ​ឯកសារ​ស្រមោល​បានទេ​\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s ៖ មានកំហុស​ក្នុងការ​ធ្វើឲ្យឯកសារស្រមោល​ទាន់សម័យ​\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s ៖ កំហុស​ក្នុងការធ្វើឲ្យ​ឯកសារពាក្យសម្ងាត់ទាន់សម័យ\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s ៖ បន្ទាត់​ %d ៖ មិនស្គាល់​អ្នកប្រើ​ %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s ៖ បន្ទាត់​ %d ៖ មិនអាច​ធ្វើឲ្យធាតុបញ្ចូល​ពាក្យសម្ងាត់​ទាន់សម័យ​បានឡើយ​\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s  ៖ មិន​ស្គាល់​អ្នក​ប្រើ​\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "មិន​ស្គាល់​អ្នក​ប្រើ ៖ %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "របៀបប្រើ ៖ %s ក្រុម [-r|-R] \n"
+
+#~ msgid " %s [-a user] group\n"
+#~ msgstr " %s ក្រុម [-a user]​\n"
+
+#~ msgid " %s [-d user] group\n"
+#~ msgstr " %s ក្រុម [-d user]​\n"
+
+#~ msgid " %s [-A user,...] [-M user,...] group\n"
+#~ msgstr " %s ក្រុម [-A user,...] [-M user,...]\n"
+
+#~ msgid " %s [-M user,...] group\n"
+#~ msgstr " %s ក្រុម [-M user,...]\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s ៖ មិនអាច​ចាក់សោ​បានឡើយ\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s ៖ មិនអាច​ចាក់សោ​ស្រមោល​បានឡើយ​\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s ៖ មិន​អាច​សរសេរ​​​​​ឯកសារ​ស្រមោល​ឡើង​វិញ បាន​ទេ​\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s ៖ មិនអាច​ដោះសោ​ឯកសារបានទេ\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s ៖ មិន​អាចធ្វើ​ឲ្យ​ធាតុបញ្ចូល​​ទាន់សម័យ​បានទេ​\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s ៖ មិនអាច​ធ្វើឲ្យ​​ធាតុបញ្ចូល​​ស្រមោល​ទាន់សម័យបានទេ​\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "មិន​ស្គាល់​ក្រុម​ ​ ៖ %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s ៖ មិន​អាច​បើក​​ឯកសារ​បានទេ\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s ៖ មិន​អាច​បើក​ឯកសារ​ស្រមោល​បានទេ\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "តើអ្នក​ជា​នណា​ ?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s ៖ មិន​ស្គាល់​សមាជិក​ %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s ៖ កំហុស​ក្នុងការ​បន្ថែម​ធាតុបញ្ចូល​​ក្រុម​ថ្មី​\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s ៖​ មិនអាច​សរសេរ​ឯកសារក្រុមឡើងវិញ​បានទេ​\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s ៖ មិនអាច​សរសេរ​ឯកសារក្រុម​ស្រមោល​ឡើងវិញ​បានទេ​\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s ៖ មិនអាច​ចាក់សោ​ឯកសារក្រុម​បានទេ\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s ៖ មិនអាច​បើក​ឯកសារក្រុម​បានទេ​\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s ៖ មិនអាច​ចាក់សោ​ឯកសារក្រុមស្រមោល​បានទេ\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s ៖ មិនអាច​បើក​ឯកសារក្រុម​ស្រមោល​បានទេ​\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s ៖ GID %u គឺមិនមែន​មាន​តែមួយទេ​\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s ៖ កំហុស​ក្នុងការយក​ធាតុបញ្ចូល​ក្រុមចេញ\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s ៖ កំហុស​ក្នុងការយក​ធាតុបញ្ចូល​ក្រុម​ស្រមោល​ចេញ\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s ៖ មិនអាចយក​ក្រុម​ចម្បង​របស់អ្នកប្រើ​ចេញ​បានទេ ។\n"
+
+#, fuzzy
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "%s ៖ PAM ការ​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវបាន​បរាជ័យ​\n"
+
+#, fuzzy
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "%s ៖ មិនអាច​ចាក់សោ​ឯកសារក្រុម​បានទេ\n"
+
+#, fuzzy
+#~ msgid "Cannot close group file\n"
+#~ msgstr "%s ៖ មិនអាចបើក​ឯកសារក្រុម​បានឡើយ​\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s ៖ %s រក​មិនឃើញ​នៅក្នុង​ /etc/group ទេ\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s ៖ %u មិនមែន​​ GID ដែលមានតែមួយ​ទេ\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s ៖ %s គឺមិនមែនជាឈ្មោះ​ដែលមានតែមួយទេ​\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s ៖ មិន​អាច​សរសេរ​ឯកសារ​ពាក្យ​សម្ងាត់​ឡើង​វិញ​បានឡើយ\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s ​៖ មិន​អាច​ចាក់​សោ​ឯកសារ​ពាក្យ​សម្ងាត់បានឡើយ​\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s ៖ មិន​អាច​បើក​ឯកសារ​ពាក្យ​សម្ងាត់​បានឡើយ\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s ៖ មិន​អាច​ធ្វើ​ឲ្យ​ធាតុ​ស្រមោល​សម្រាប់​​ %s ទាន់សម័យបានឡើយ\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s ៖ មិនអាច​ធ្វើឲ្យធាតុ​បញ្ចូល​សម្រាប់ក្រុម​ %s ទាន់សម័យ​បានទេ\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s ៖ មិនអាច​ចាក់សោ​ឯកសារក្រុមស្រមោល​បានទេ​\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s ៖ មិនអាច​បើក​ឯកសារក្រុមស្រមោល​បានទេ​\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s ៖ មិនអាច​យក​ក្រុម​ស្រមោល %s ចេញ​បានទេ\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s ៖ មិនអាច​ធ្វើឲ្យ​ឯកសារ​ក្រុម​ស្រមោល​ទាន់សម័យ​បានទេ​\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s ៖ មិនអាច​លុប​ឯកសារក្រុម​ស្រមោលបានទេ​\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "មិន​ស្គាល់​ UID ៖ %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "មិន​ស្គាល់​ GID ៖ %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s ៖ មិនមានក្រុម​ %sឡើយ​\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s ៖ មិនទាន់មានអ្នក​ប្រើ​ %s ទេ​\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s ៖ឈ្មោះ​អ្នក​ប្រើ​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s ៖ មិន​អាច​ចាក់​សោ​ /etc/passwd បានឡើយ ។\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s ៖ មិន​អាច​ចាក់​សោ​ /etc/passwd បានឡើយ ។\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s ៖ មិន​អាច​ចាក់​សោ​ /etc/passwd បានឡើយ ។\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s ៖ មិន​អាច​ចាក់​សោ​ /etc/passwd បានឡើយ ។\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s ៖ មិន​អាច​បើក​ឯកសារបានឡើយ​\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s ៖ មិនអាច​ធ្វើឲ្យ​ធាតុបញ្ចូលពាក្យសម្ងាត់​ទាន់សម័យ​សម្រាប់​​ %s បានឡើយ\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s ៖ មិន​អាច​ចាក់​សោ​ឯកសារ​​ពាក្យសម្ងាត់បានឡើយ\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s ៖ មិន​អាច​បើក​ឯកសារ​ឯកសារពាក្យសម្ងាត់បានឡើយ\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s ៖ មិន​អាច​យក​ធាតុបញ្ចូល​​ស្រមោលចេញ​​សម្រាប់ %s បានឡើយ\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s ៖ មិនអាច​ធ្វើឲ្យ​ឯកសារពាក្យសម្ងាត់​ទាន់សម័យបានឡើយ\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s ៖ មិនអាច​ធ្វើឲ្យធាតុបញ្ចូល​ទាន់សម័យ​សម្រាប់ %s បានឡើយ\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s ៖ មិន​អាច​លុប​ឯកសារ​ពាក្យ​សម្ងាត់​ស្រមោល​បានឡើយ\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s ៖ មិន​ស្គាល់​ GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s ៖ មិន​ស្គាល់​ក្រុម​ %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s ៖ អស់​សតិ​ក្នុងការធ្វើឲ្យ gshadow ទាន់សម័៧\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s ៖ មិន​អាច​សរសេរ​ឯកសារ​ពាក្យ​សម្ងាត់​ស្រមោលឡើងវិញ​​បានឡើយ​\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s ៖ មិន​អាច​ចាក់​សោ​ឯកសារ​ពាក្យ​សម្ងាត់ស្រមោល​បានឡើយ\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s ៖ មិន​អាច​បើក​ឯកសារ​ពាក្យ​សម្ងាត់​ស្រមោលបានឡើយ\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s ៖ មានកំហុសក្នុងការ​ចាក់សោ​ឯកសារក្រុម​\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s ៖ មានកំហុស​ក្នុងការ​បើក​ឯកសារក្រុម\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s ៖មានកំហុសក្នុងការ​ចាក់សោ​ឯកសារក្រុម​ស្រមោល​\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s ៖ មានកំហុស​ក្នុងការ​បើក​ឯកសារក្រុម​ស្រមោល\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s ៖ មានកំហុសក្នុងការ​បន្ថែម​ធាតុបញ្ចូល​ពាក្យសម្ងាត់​ថ្មី​\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s ៖ មានកំហុស​ក្នុងការ​បន្ថែម​ធាតុបញ្ចូល​ពាក្យសម្ងាត់​ស្រមោល​ថ្មី​\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s ៖ ការព្រមាន ៖ CREATE_HOME មិន​បាន​គាំទ្រទេ​ សូម​ប្រើ​ -m ជំនួសវិញ ។\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s  ៖ មានកំហុស​ក្នុងការ​ធ្វើឲ្យ​ធាតុ​បញ្ចូល​ក្រុម​​ទាន់សម័យ\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s  ៖ មានកំហុស​ក្នុងការ​ធ្វើឲ្យ​ធាតុ​បញ្ចូល​ក្រុម​​ទាន់សម័យ\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s ៖ មិនអាចបើក​ឯកសារក្រុម​បានឡើយ​\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s ៖ មិនអាច​បើក​ឯកសារក្រុម​ស្រមោល​បានឡើយ\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s ៖ មានកំហុស​ក្នុងការ​លុប​ធាតុ​បញ្ចូល​ពាក្យសម្ងាត់​\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s ៖ មានកំហុស​ក្នុងការ​លុប​ធាតុបញ្ចូល​ពាក្យសម្ងាត់​ស្រមោល​\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s ៖ កំហុស​ក្នុងការ​បន្ថែម​ធាតុបញ្ចូល​​ក្រុម​ថ្មី​\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s ៖ uid %lu មិនមែន​មាន​តែ​មួយទេ​\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s  ​៖ មានកំហុស​ក្នុងការ​ផ្លាស់ប្ដូរ​ធាតុបញ្ចូល​ពាក្យសម្ងាត់​\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s ៖ មានកំហុស​ក្នុងការ​យក​ធាតុបញ្ចូល​ពាក្យសម្ងាត់ចេញ\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s ៖ មានកំហុសក្នុងការ​យក​ធាតុបញ្ចូល​ពាក្យសម្ងាត់​ស្រមោល​ចេញ\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s ៖ មិនអាច​យក​​ GID ​ដែលមានតែមួយ​បានឡើយ​\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " លើ '%.100s' ពី '%.200s'"
+
+#~ msgid " on '%.100s'"
+#~ msgstr " លើ '%.100s'"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s ៖ បន្ទាត់​ %d ៖ មិន​អាច​បង្កើត​ UID បានឡើយ\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s ៖ ឈ្មោះ​ %s គឺមិន​មែន​មាន​តែមួយ​ទេ\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ " -h, --help\t\tdisplay this help message and exit\n"
+#~ " -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "របៀបប្រើ ៖ chgpasswd [ជម្រើស]\n"
+#~ "\n"
+#~ "ជម្រើស ៖\n"
+#~ " -e, --encrypted\tពាក្យ​សម្ងាត់​ដែល​បាន​ផ្ដល់​ត្រូវ​បាន​អ៊ិនគ្រីប\n"
+#~ " -h, --help\t\tបង្ហា​ញសារ​ជំនួយ​នេះ និង​ចេញ\n"
+#~ " -m, --md5\t\tប្រើ​ការ​អ៊ិនគ្រីប MD5 ជំនួស​ឲ្យ DES នៅ​ពេល​បាន​ផ្ដល់​ឲ្យ\n"
+#~ "\t\t\tពាក្យសម្ងាត់​មិន​ត្រូវបាន​អ៊ិនគ្រីប\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "គ្មាន​ឯកសារ​ពាក្យ​សម្ងាត់ឡើយ​\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "សូមអភ័យទោស ។\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "សូមអភ័យទោស ពាក្យ​សម្ងាត់​សម្រាប់​ %s មិន​ទាន់​ប្តូរ​នូវ​ឡើយ​ទេ​ ។\n"
+
+#~ msgid "Sorry."
+#~ msgstr "សូមអភ័យទោស​ ។"
diff --git a/po/ko.gmo b/po/ko.gmo
new file mode 100644
index 0000000..f856dc2
--- /dev/null
+++ b/po/ko.gmo
Binary files differ
diff --git a/po/ko.po b/po/ko.po
new file mode 100644
index 0000000..d4e150e
--- /dev/null
+++ b/po/ko.po
@@ -0,0 +1,3411 @@
+# shadow korean translations
+# Hwang, SangJin <accel@accellinux.org>, 1999.
+# Changwoo Ryu <cwryu@debian.org>, 2004, 2005, 2006, 2008, 2009.
+# Sunjae Park <darehanl@gmail.com>, 2006.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.1.1\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2009-04-19 21:32+0900\n"
+"Last-Translator: Changwoo Ryu <cwryu@debian.org>\n"
+"Language-Team: Korean <debian-l10n-korean@lists.debian.org>\n"
+"Language: ko\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"이름이 '%s'인 항목이 %s 안에 여러 개 있습니다. pwck 혹은 grpck 명령으로 이 문"
+"제를 바로잡으십시오.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "libcrypt가 지원하지 않는 암호화 방법? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "설정 정보를 위한 공간을 확보할 수 없습니다.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "설정 오류 - 알 수 없는 항목 '%s'(관리자에게 알리시기 바랍니다)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr ""
+
+msgid "Password: "
+msgstr "암호: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s의 암호: "
+
+#, fuzzy
+#| msgid "Cannot open audit interface - aborting.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "검증 인터페이스를 열 수 없습니다. 중지합니다.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr ""
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not set sename for %s\n"
+msgstr "설정 정보를 위한 공간을 확보할 수 없습니다.\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "%s의 사용기한 정보를 바꿉니다\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "%s: 사용자 이름을 인식할 수 없습니다.\n"
+
+#, fuzzy, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "%s: 사용자 이름을 인식할 수 없습니다.\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: 메모리 부족\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: '%s'을(를) 삭제할 수 없습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: 홈 디렉터리 '%s'은(는) 잘못되었습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: '%s' 항목을 %s에서 제거할 수 없습니다\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: 디렉터리 %s을(를) 만들 수 없습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "lastlog: %s의 크기를 읽을 수 없습니다: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: 경고: %s을(를) 제거할 수 없습니다: %s"
+
+#, fuzzy, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: 이름 다시 설정: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: 디렉터리 %s의 이름을 %s(으)로 바꿀 수 없습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: 디렉터리 %s의 이름을 %s(으)로 바꿀 수 없습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: 경고: %s을(를) 제거할 수 없습니다: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: 디렉터리 %s을(를) 만들 수 없습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "lastlog: %s의 크기를 읽을 수 없습니다: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: '%s'을(를) 삭제할 수 없습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: %d번 줄: '%s' 사용자가 없습니다\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: 이름 다시 설정: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: %s을(를) 열 수 없습니다\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "경고: 알 수 없는 그룹(%s)\n"
+
+msgid "Warning: too many groups\n"
+msgstr "경고: 그룹이 너무 많음\n"
+
+msgid "Your password has expired."
+msgstr "암호 사용기한이 지났습니다."
+
+msgid "Your password is inactive."
+msgstr "암호 사용기간 초과로 비활성화 되었습니다."
+
+msgid "Your login has expired."
+msgstr "로그인 사용기한이 지났습니다."
+
+msgid " Contact the system administrator."
+msgstr " 시스템 관리자에게 연락하십시오."
+
+msgid " Choose a new password."
+msgstr " 새로운 암호를 선택하십시오."
+
+msgid "You must change your password."
+msgstr "암호를 바꿔야 합니다."
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "암호 사용기한이 %ld일 후에 끝납니다.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "암호 사용기한이 내일 끝납니다."
+
+msgid "Your password will expire today."
+msgstr "암호 사용기한이 오늘 끝납니다."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "검증 인터페이스를 열 수 없습니다. 중지합니다.\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "TTY 표준 입력의 소유자 혹은 모드를 바꿀 수 없습니다: %s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: %s의 잠금을 푸는데 실패했습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: "
+msgstr "%s: %s\n"
+
+msgid ": "
+msgstr ""
+
+msgid "Environment overflow\n"
+msgstr "환경 변수 오버플로우\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "$%s 변수를 바꿀 수 없습니다\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"마지막 로그인 이후 %d번 실패.\n"
+"마지막 로그인은 %s, %s에서.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "메일함 소유자를 바꾸는 데 실패했습니다"
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr "%s: 유일한 UID를 얻을 수 없습니다 (UID가 남아 있지 않습니다)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: 유일한 GID를 얻을 수 없습니다 (GID가 남아 있지 않습니다)\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: 유일한 GID를 얻을 수 없습니다 (GID가 남아 있지 않습니다)\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: 사용자를 만들 수 없습니다\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: 사용자를 만들 수 없습니다\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr "%s: 유일한 UID를 얻을 수 없습니다 (UID가 남아 있지 않습니다)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: 유일한 UID를 얻을 수 없습니다 (UID가 남아 있지 않습니다)\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: 유일한 UID를 얻을 수 없습니다 (UID가 남아 있지 않습니다)\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Authentication failure\n"
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: 인증이 실패했습니다\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: 올바르지 않은 필드 '%s'\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Could not seteuid to %d\n"
+msgstr "설정 정보를 위한 공간을 확보할 수 없습니다.\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not set caps\n"
+msgstr "설정 정보를 위한 공간을 확보할 수 없습니다.\n"
+
+#, c-format
+msgid "%s: snprintf failed!\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: %d번 줄: chown 실패했습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: %d번 줄: chown 실패했습니다\n"
+
+msgid "Too many logins.\n"
+msgstr "로그인 횟수가 너무 많음.\n"
+
+msgid "You have new mail."
+msgstr "새 메일이 도착하였습니다."
+
+msgid "No mail."
+msgstr "메일 없습니다."
+
+msgid "You have mail."
+msgstr "메일이 있습니다."
+
+msgid "no change"
+msgstr "바뀐 점이 없습니다"
+
+msgid "a palindrome"
+msgstr "앞뒤로 같은 단어입니다"
+
+msgid "case changes only"
+msgstr "대소문자만 바뀌었습니다"
+
+msgid "too similar"
+msgstr "너무 비슷합니다"
+
+msgid "too simple"
+msgstr "너무 간단합니다"
+
+msgid "rotated"
+msgstr "순서만 순환되었습니다"
+
+msgid "too short"
+msgstr "너무 짧습니다"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "잘못된 암호: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "암호: pam_start() 실패했습니다, 오류 %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "암호: %s\n"
+
+msgid "passwd: password unchanged\n"
+msgstr "passwd: 암호를 바꿨습니다\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: 암호를 성공적으로 업데이트했습니다\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: %s 저장소는 지원하지 않습니다\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start: 오류 %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "암호: pam_start() 실패했습니다, 오류 %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "'%s'의 암호가 맞지 않습니다.\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr ""
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: 관리자 권한을 버릴 수 없습니다 (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: 잘못된 집 전화번호: '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: 디렉터리 %s을(를) 만들 수 없습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: 디렉터리 %s을(를) 만들 수 없습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: 디렉터리 %s을(를) 만들 수 없습니다\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"쓸 수 없는 ENCRYPT_METHOD 값: '%s'.\n"
+"기본값인 DES로 설정합니다.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "'%s' 디렉터리로 이동할 수 없습니다\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "디렉터리 없음, 루트 디렉터리(/)로 로그인합니다"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "%s을(를) 실행할 수 없습니다"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "루트 디렉터리 '%s'이(가) 잘못되었습니다\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "루트 디렉터리를 '%s'(으)로 바꿀 수 없습니다\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: %s 사용자는 현재 로그인한 상태 입니다\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: %s 사용자는 현재 로그인한 상태 입니다\n"
+
+msgid "Unable to determine your tty name."
+msgstr "TTY 이름을 확인할 수 없습니다."
+
+msgid "No"
+msgstr "아니오"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr " -s, --sha-rounds SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr " -s, --sha-rounds SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+#, fuzzy
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr " -s, --sha-rounds SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "새로운 값을 넣거나, 기본값을 원하시면 엔터를 치세요"
+
+msgid "Minimum Password Age"
+msgstr "암호의 최소 유효 기간"
+
+msgid "Maximum Password Age"
+msgstr "암호의 최대 유효 기간"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "마지막으로 암호를 바꾼 날 (YYYY-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "암호 사용만료 예고"
+
+msgid "Password Inactive"
+msgstr "암호를 사용할 수 없음"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "계정 만료 날짜 (YYYY-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "마지막으로 암호를 바꾼 날\t\t\t\t\t:"
+
+msgid "never"
+msgstr "안함"
+
+msgid "password must be changed"
+msgstr "암호를 바꿔야 합니다"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "암호 만료\t\t\t\t\t:"
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "암호가 비활성화 기간\t\t\t\t\t:"
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "계정 만료\t\t\t\t\t\t:"
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "암호를 바꿀 수 있는 최소 날 수\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "암호를 바꿔야 하는 최대 날 수\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "암호 만료 예고를 하는 날 수\t\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: 날짜 '%s'은(는) 잘못되었습니다\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: 잘못된 숫자 인자 '%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: \"l\" 플래그를 다른 플래그와 함께 포함하지 말 것\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: 권한이 거부되었습니다.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: 사용자 이름을 인식할 수 없습니다.\n"
+
+#, fuzzy, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: %s을(를) 잠글 수 없습니다. 나중에 다시 시도하십시오.\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: %s을(를) 열 수 없습니다\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: 바뀐 사항을 %s에 쓰는 데 실패했습니다\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: 새 %s 항목 '%s'을(를) 준비하는데 실패했습니다\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: 셰도우 암호 파일이 없습니다\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: '%s' 사용자가 %s에 없습니다\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "%s의 사용기한 정보를 바꿉니다\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: 항목을 변경하는 도중 오류가 발생했습니다\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr "이름"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "방 번호"
+
+msgid "Work Phone"
+msgstr "직장 번화번호"
+
+msgid "Home Phone"
+msgstr "집 전화번호"
+
+msgid "Other"
+msgstr "기타"
+
+msgid "Cannot change ID to root.\n"
+msgstr "아이디를 루트로 바꿀 수는 없습니다.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: 이름에 ASCII가 아닌 문자가 들어 있습니다: '%s'\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: 잘못된 이름: '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s: 방 번호에 ASCII가 아닌 문자가 들어 있습니다: '%s'\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: 잘못된 방 번호: '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: 잘못된 직장 전화번호: '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: 잘못된 집 전화번호: '%s'\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s'에 ASCII가 아닌 문자가 들어 있습니다\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s'에 사용할 수 없는 글자가 들어 있습니다\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: '%s' 사용자가 없습니다\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: NIS 클라이언트에서 '%s' 사용자를 바꿀 수 없습니다.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: '%s'이(가) 현재의 클라이언트의 NIS 마스터입니다.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "%s의 사용자의 정보를 바꿉니다\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: 입력범위가 너무 깁니다\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr ""
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr " -s, --sha-rounds SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+#, fuzzy
+#| msgid ""
+#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
+#| " crypt algorithms\n"
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr " -s, --sha-rounds SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: %s 플래그는 %s 플래그와 함께 사용해야 합니다\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: -c, -e, -m 옵션은 하나만 쓸 수 있습니다\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: 지원하지 않는 암호화 방법: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: %d번 줄: 너무 깁니다\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: %d번 줄: 새 암호가 없습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: %s을(를) 제거하는데 실패했습니다\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: %d번 줄: '%s' 그룹이 없습니다\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: %d번 줄: 새 %s 항목 '%s'을(를) 준비하는 데 실패했습니다\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: 오류 발견, 바뀐 내역은 무시합니다\n"
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: %d번 줄: '%s' 사용자가 없습니다\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: %d번 줄: '%s' 사용자가 없습니다\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr "로그인 쉘"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "'%s'의 쉘을 바꿀 수 없습니다.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "%s의 로그인 쉘을 변경하고 있습니다\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: 부적절한 입력: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s: %s은(는) 사용할 수 없는 쉘입니다.\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: '%s' 사용자가 없습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: 경고: %s은(는) %s이(가) 소유하고 있지 않습니다\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr " -s, --sha-rounds SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: %s 옵션 및 %s 충돌\n"
+
+#, fuzzy, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "lastlog: 올 수 없는 인자입니다: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "lastlog: UID %d번의 항목을 읽는데 실패했습니다\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "로그인 실패 최대값 최근 사용\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr " [%lu초 남음]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%ld초 잠금]"
+
+#, fuzzy, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "faillog: UID %d의 실패 횟수를 초기화하는데 실패했습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "faillog: UID %d의 최대값을 설정하는데 실패했습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "faillog: UID %d의 잠금시각을 설정하는데 실패했습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "lastlog: 알 수 없는 사용자 혹은 범위: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "lastlog: %s의 크기를 읽을 수 없습니다: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: %s을(를) 제거하는데 실패했습니다\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr ""
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr ""
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr ""
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+" -A, --administrators <관리자>,...\n"
+" <그룹>의 관리자 목록을 설정합니다\n"
+"이 옵션은 같이 쓸 수 없습니다. 예외로 -A와 -M 옵션은 같이 쓸 수 있습니다.\n"
+
+#, fuzzy
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "이 옵션은 같이 쓸 수 없습니다.\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "이 옵션은 같이 쓸 수 없습니다.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: -A를 사용할 때에는 셰도우 그룹 암호가 필요합니다\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: '%s' 그룹이 %s에 없습니다\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: 읽기 전용 %s을(를) 닫는데 실패했습니다\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "%s 그룹의 암호를 바꾸는 중\n"
+
+msgid "New Password: "
+msgstr "새 암호: "
+
+msgid "Re-enter new password: "
+msgstr "새 암호를 다시 입력하십시오: "
+
+msgid "They don't match; try again"
+msgstr "입력값이 일치하지 않습니다. 다시 시도하십시오"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: 나중에 다시 시도하십시오\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "사용자 %s을(를) %s 그룹에 등록 중\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "사용자 %s을(를) 그룹 %s에서 제거하는 중\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: `%s' 사용자는 '%s'의 멤버가 아닙니다\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: TTY가 아닙니다\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr " -s, --sha-rounds SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr ""
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr " -s, --sha-rounds SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid " -r, --system create a system account\n"
+msgstr ""
+
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: '%s'은(는) 사용할 수 없는 그룹 이름입니다\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "'%s' `%s' 그룹 ID는 쓸 수 없습니다\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K 옵션에는 <키>=<값> 형태의 입력이 필요합니다\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: '%s' 그룹이 이미 있습니다\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s: '%lu' GID가 이미 있습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: 사용자 이름을 인식할 수 없습니다.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: '%s' 항목을 %s에서 제거할 수 없습니다\n"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: '%s' 사용자의 주요 그룹을 제거할 수 없습니다\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: '%s' 그룹이 없습니다\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: '%s' 그룹은 NIS 그룹입니다\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s은(는) NIS 마스터입니다\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: '%s' 사용자는 이미 '%s'의 멤버입니다\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: 메모리가 부족합니다. %s을(를) 업데이트할 수 없습니다.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr " -s, --sha-rounds SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+msgid "\n"
+msgstr ""
+
+msgid "Actions:\n"
+msgstr ""
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr ""
+
+msgid " -l, --list list the members of the group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: 그룹 이름이 사용자 이름과 맞지 않습니다\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s: root만 -g/--group 옵션을 쓸 수 있습니다\n"
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr ""
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: '%s' 그룹 이름은 쓸 수 없습니다\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: %s 그룹은 NIS 그룹입니다\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: 알 수 없는 사용자 %s\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr "사용법: %s [-r] [-s] [그룹 [gshadow]]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr "사용법: %s [-r] [-s] [그룹]\n"
+
+#, fuzzy
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr " -s, --sha-rounds SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s 옵션과 -r 옵션을 동시에 쓸 수 없습니다\n"
+
+msgid "invalid group file entry"
+msgstr "쓸 수 없는 그룹 파일 입력값입니다"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "'%s' 줄을 삭제하시겠습니까?"
+
+msgid "duplicate group entry"
+msgstr "그룹 입력값 복제"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "'%s' 그룹 이름은 쓸 수 없습니다\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "'%lu' 그룹 ID는 쓸 수 없습니다\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "그룹 %s: %s 사용자가 없습니다\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "'%s' 그룹 멤버를 삭제하시겠습니까? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "%s에 일치하는 그룹 파일 입력값이 없습니다\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "%2$s 그룹을 %1$s 안에 추가하시겠습니까?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "쓸 수 없는 셰도우 그룹파일 입력값"
+
+msgid "duplicate shadow group entry"
+msgstr "셰도우 그룹 입력값 복제"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "셰도우 그룹 %s: 관리용 사용자 %s이(가) 없습니다\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "관리용 멤버 '%s'을(를) 삭제하시겠습니까? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "셰도우 그룹 %s: %s(이)라는 사용자가 없습니다\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: 파일이 업데이트 되었습니다\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: 바뀐 점이 없음\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: '%s'을(를) 삭제할 수 없습니다\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "사용법: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "사용법: id\n"
+
+msgid " groups="
+msgstr " 그룹 목록="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+
+msgid "Username Port From Latest"
+msgstr "사용자이름 포트 어디서 최근정보"
+
+msgid "Username Port Latest"
+msgstr "사용자이름 포트 최근정보"
+
+msgid "**Never logged in**"
+msgstr "**한번도 로그인한 적이 없습니다**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "lastlog: UID %d번의 항목을 읽는데 실패했습니다\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s: UID %lu번의 최근 기록 항목을 초기화하는데 실패했습니다: %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 "사용법: %s [-p] [이름]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h 호스트이름] [-f 이름]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r 호스트\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "잘못된 로그인 시간"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"정기 점검을 위해 시스템이 종료되었습니다"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[접속해제가 무시되었습니다 -- 루트 로그인 허용.]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"UTMP 항목이 없습니다. 가장 낮은 \"sh\"에서 \"login\"을 실행해야 합니다."
+
+#, fuzzy, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"%d 초 후 로그인이 종료되었습니다.\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM 실패. 중지 중: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s 로그인: "
+
+msgid "login: "
+msgstr "로그인: "
+
+#, fuzzy, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "로그인 시도 횟수 최대값을 초과했습니다(%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: PAM에서 종료를 요청했습니다\n"
+
+msgid "Login incorrect"
+msgstr "로그인이 맞지 않습니다"
+
+#, fuzzy, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "%s: 사용자 이름을 인식할 수 없습니다.\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s 로그인: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: fork 실패: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSCTTY 실패, 위치는 %s"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "경고: 로그인이 일시적으로 폐쇄된 후 다시 로그인을 허용합니다."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "마지막 로그인: %s on %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "마지막 로그인: %.19s on %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " %.*s 에서"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"로그인 시간이 지나갔습니다\n"
+"\n"
+
+msgid "Usage: logoutd\n"
+msgstr "사용법: logoutd\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, c-format
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: %s을(를) 제거하는데 실패했습니다\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: %s을(를) 제거하는데 실패했습니다\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to unlock %s\n"
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: %s의 잠금을 푸는데 실패했습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: 기본 디렉터리 '%s' 잘못되었습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: 디렉터리 %s을(를) 만들 수 없습니다\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "사용법: newgrp [-] [그룹]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "사용법: sg group [[-c] 명령]\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: %s을(를) 제거하는데 실패했습니다\n"
+
+msgid "Invalid password.\n"
+msgstr "쓸 수 없는 암호입니다.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: 프로세스 만들기 실패: %s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: '%lu' GID가 없습니다\n"
+
+msgid "too many groups\n"
+msgstr "그룹이 너무 많습니다\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid " -b, --badnames allow bad names\n"
+msgstr ""
+
+msgid " -r, --system create system accounts\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: '%s' 그룹은 셰도우 그룹이지만, /etc/group에 없습니다\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: 사용할 수 없는 사용자 ID '%s'\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: 쓸 수 없는 사용자 이름 '%s'\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: %d번 줄: 올바른 줄이 아닙니다\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: %s 사용자의 항목을 업데이트 할 수 없습니다 (passwd 데이터베이스에 없습니"
+"다)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: %d번 줄: 사용자를 만들 수 없습니다\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: %d번 줄: 그룹을 만들 수 없습니다\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: %d번 줄: `%s' 사용자가 %s 안에 없습니다\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: %d번 줄: 암호를 업데이트 할 수 없습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: %d번 줄: 디렉터리 만들기에 실패했습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: %d번 줄: chown 실패했습니다\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: %d번 줄: 입력값을 업데이트 할 수 없습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: 새 %s 항목 '%s'을(를) 준비하는데 실패했습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: 사용자를 만들 수 없습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: 그룹을 만들 수 없습니다\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr " -s, --sha-rounds SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr " -s, --sha-rounds SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+msgid " -q, --quiet quiet mode\n"
+msgstr ""
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr " -s, --sha-rounds SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+msgid "Old password: "
+msgstr "예전 암호: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"새 암호를 입력하십시오 (최소 %d글자)\n"
+"대소문자와 숫자를 조합하여 사용하십시오.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"새 암호를 입력하십시오(최소 %d, 최대 %d 글자)\n"
+"영어 대소문자와 숫자를 조합하여 사용하십시오.\n"
+
+msgid "New password: "
+msgstr "새 암호: "
+
+msgid "Try again."
+msgstr "다시 시도하십시오."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"경고: 보안성이 없는 암호 (그래도 사용하길 원하신다면 다시 입력하십시오)."
+
+msgid "They don't match; try again.\n"
+msgstr "입력값이 일치하지 않습니다. 다시 시도하십시오.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "%s의 암호는 바꿀 수 없습니다.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "%s의 암호는 아직 바꿀 수 없습니다.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: 암호의 잠금을 해제하면 암호 없는 계정이 됩니다. 이 암호의 잠금을\n"
+"풀려면 usermod -p 명령으로 이 계정의 암호 잠금을 해제해야 합니다.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: %s 저장소는 지원하지 않습니다\n"
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not authorized to change the password of %s\n"
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr "%s: %s 사용자는 %s의 암호를 바꿀 권한이 없습니다\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: %s의 암호 정보를 보거나 바꿀 수 없습니다.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "%s에 대한 암호를 바꾸는 중\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "%s의 암호를 바꾸지 않았습니다.\n"
+
+#, fuzzy, c-format
+msgid "%s: password changed.\n"
+msgstr "암호를 바꿨습니다."
+
+#, fuzzy, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "암호 사용만료 예고"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr "사용법: %s [-q] [-r] [-s] [암호 [shadow]]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr "사용법: %s [-q] [-r] [-s] [암호 [shadow]]\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+
+msgid "invalid password file entry"
+msgstr "올바르지 않은 암호 파일 항목"
+
+msgid "duplicate password entry"
+msgstr "암호 입력값 복제"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "올바르지 않은 사용자 이름 '%s'\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "올바르지 않은 사용자 ID '%lu'\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "사용자 '%s': %lu 그룹이 없습니다\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "사용자 '%s': '%s' 디렉터리가 없습니다\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "사용자 '%s': '%s' 프로그램이 없습니다\n"
+
+#, fuzzy, c-format
+msgid "no tcb directory for %s\n"
+msgstr "%s: 디렉터리 %s을(를) 만들 수 없습니다\n"
+
+#, fuzzy, c-format
+msgid "create tcb directory for %s?"
+msgstr "%s: 디렉터리 %s을(를) 만들 수 없습니다\n"
+
+#, fuzzy, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "%s: 디렉터리 %s을(를) 만들 수 없습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: %s을(를) 열 수 없습니다\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "%s에 있는 암호 파일 입력값이 일치하지 않습니다\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "사용자 '%s'을(를) %s에 추가하시겠습니까?"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "쓸 수 없는 셰도우 암호 파일 입력값입니다"
+
+msgid "duplicate shadow password entry"
+msgstr "셰도우 암호 입력값 복제"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "사용자 %s: 마지막 암호 바꾼 때가 미래입니다\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: %s 안의 항목을 정렬할 수 없습니다\n"
+
+#, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: %s의 모드를 0600으로 바꾸는데 실패했습니다\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "su를 통해 이 계정으로 접근하는 것이 거부되었습니다.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "암호 인증이 무시되었습니다.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "인증하기 위해 본인의 암호를 입력하십시오.\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: 사용자 이름을 인식할 수 없습니다.\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr ""
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr ""
+
+msgid "Session terminated, terminating shell..."
+msgstr ""
+
+#, c-format
+msgid " ...killed.\n"
+msgstr ""
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr ""
+
+msgid " ...terminated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: su [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
+#| " -h, --help display this help message and exit\n"
+#| " -, -l, --login make the shell a login shell\n"
+#| " -m, -p,\n"
+#| " --preserve-environment do not reset environment variables, and\n"
+#| " keep the same shell\n"
+#| " -s, --shell SHELL use SHELL instead of the default in "
+#| "passwd\n"
+#| "\n"
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"사용법: su [옵션] [<로그인>]\n"
+"\n"
+"옵션:\n"
+" -c, --command <명령어> 실행된 쉘에 <명령어>를 보냅니다\n"
+" -h, --help 이 도움말 메시지를 표시하고 끝냅니다\n"
+" -, -l, --login 쉘을 로그인 쉘로 합니다\n"
+" -m, -p,\n"
+" --preserve-environment 환경변수를 초기화하지 않고 같을 쉘을\n"
+" 사용합니다\n"
+" -s, --shell <쉘> 암호 파일의 기본 쉘 대신 <쉘>를 사용합니다\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(무시됨)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "su %s을(를) 하도록 인증이 되지 않았습니다\n"
+
+msgid "(Enter your own password)"
+msgstr "(본인의 암호를 입력하십시오)"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: 인증이 실패했습니다\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s: 현재 su 명령을 실행할 권한이 없습니다\n"
+
+#, fuzzy, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "'루트'에 대한 암호 파일 입력값이 없음"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: 터미널에서 받드시 실행되어야 합니다\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: 오류 %d\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "lastlog: %s의 크기를 읽을 수 없습니다: %s\n"
+
+#, fuzzy, c-format
+msgid "Cannot execute %s\n"
+msgstr "%s을(를) 실행할 수 없습니다"
+
+msgid "No password file"
+msgstr "암호 파일 없음"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY 실패"
+
+msgid "No password entry for 'root'"
+msgstr "'루트'에 대한 암호 파일 입력값이 없음"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"일반적으로 시작(normal startup)을 하려면 control-d를 입력하십시오,\n"
+"(그렇지 않으면 시스템 정비를 위하여 루트 암호를 입력하십시오)"
+
+msgid "Entering System Maintenance Mode"
+msgstr "시스템 정비 모드로 들어가고 있습니다"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: 새로운 기본값 파일을 만들 수 없습니다\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: 새로운 기본값 파일을 만들 수 없습니다\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: 새로운 기본값 파일을 만들 수 없습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: %d번 줄: chown 실패했습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: 디렉터리 %s을(를) 만들 수 없습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: 이름 다시 설정: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: '%s' 그룹은 NIS 그룹입니다.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: 그룹이 너무 많이 명시되었습니다 (최대 %d).\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr " -s, --sha-rounds SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr ""
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr ""
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr " -s, --sha-rounds SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+#, fuzzy
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr " -s, --sha-rounds SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr " -s, --sha-rounds SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr " -s, --sha-rounds SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+#, fuzzy
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr " -s, --sha-rounds SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr ""
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr ""
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: 기본 디렉터리 '%s' 잘못되었습니다\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: 주석 '%s'이(가) 잘못되었습니다\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: 홈 디렉터리 '%s'은(는) 잘못되었습니다\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: -e 옵션을 사용할 경우 셰도우 암호가 필요합니다\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: -f 옵션을 사용할 경우 셰도우 암호가 필요합니다\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: 올바르지 않은 필드 '%s'\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: 올바르지 않은 쉘 '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: 경고: %s은(는) %s이(가) 소유하고 있지 않습니다\n"
+
+#, c-format
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+"%s: UID %lu번의 로그인 실패 기록 항목을 초기화하는데 실패했습니다: %s\n"
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr "%s: UID %lu번의 최근 기록 항목을 초기화하는데 실패했습니다: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr ""
+"%s: UID %lu번의 로그인 실패 기록 항목을 초기화하는데 실패했습니다: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: 새 %s 항목 '%s'을(를) 준비하는데 실패했습니다\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error changing fields\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: 항목을 변경하는 도중 오류가 발생했습니다\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: 디렉터리 %s을(를) 만들 수 없습니다\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: 홈 디렉터리 '%s'은(는) 잘못되었습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "메일함 소유자를 바꾸는 데 실패했습니다"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: 디렉터리 %s을(를) 만들 수 없습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: %d번 줄: chown 실패했습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: %d번 줄: chown 실패했습니다\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "메일함 파일을 만드는 중"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr "'mail' 그룹이 없습니다. 사용자의 메일함 파일을 0600 모드로 만듭니다.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "메일함의 파일 권한을 설정 중"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: '%s' 사용자가 이미 있습니다\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: %s 그룹이 이미 있습니다. 이 사용자를 이 그룹에 추가하려면, -g 옵션을 사용"
+"하십시오.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: 사용자를 만들 수 없습니다\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %lu번은 유일하지 않습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: 디렉터리 %s을(를) 만들 수 없습니다\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: 그룹을 만들 수 없습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: 사용자를 만들 수 없습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: 그룹을 만들 수 없습니다\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: 경고: 홈디렉터리가 이미 있습니다.\n"
+"skel 디렉터리에서 파일을 복사하지 않습니다.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr " -s, --sha-rounds SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr "%s: '%s' 사용자의 주요 그룹을 제거할 수 없습니다\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr ""
+
+#, c-format
+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 remove entry %lu from %s\n"
+msgstr "%s: '%s' 항목을 %s에서 제거할 수 없습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: 홈 디렉터리 '%s'은(는) 잘못되었습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: 경고: %s을(를) 제거할 수 없습니다: %s"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s은(는) %s의 소유가 아닙니다, 제거하지 않습니다\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: 관리자 권한을 버릴 수 없습니다 (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "lastlog: %s의 크기를 읽을 수 없습니다: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: '%s' 항목을 %s에서 제거할 수 없습니다\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: %s 사용자는 NIS 사용자 입니다\n"
+
+#, fuzzy, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: 홈 디렉터리 '%s'은(는) 잘못되었습니다\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: 디렉터리 %s은(는) 제거하지 않습니다 (사용자 %s의 홈 디렉터리를\n"
+"제거하게 됩니다)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: 디렉터리 %s을(를) 제거하는 데 오류가 발생했습니다\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: 디렉터리 %s을(를) 제거하는 데 오류가 발생했습니다\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr ""
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr " -s, --sha-rounds SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+
+#, fuzzy
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr " -s, --sha-rounds SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr ""
+
+msgid " -L, --lock lock the user account\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr " -s, --sha-rounds SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+#, fuzzy
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr " -s, --sha-rounds SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr ""
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr ""
+
+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"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: 사용자의 암호 잠금을 해제하면 암호 없는 계정이 됩니다. 이 사용자의\n"
+"암호 잠금을 풀려면 usermod -p 명령으로 암호 잠금을 해제해야 합니다.\n"
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: '%s' 사용자가 이미 %s 안에 있습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: 날짜 '%s'은(는) 잘못되었습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: 날짜 '%s'은(는) 잘못되었습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: no options\n"
+msgstr "%s: %s을(를) 열 수 없습니다\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: -L, -p, -U 옵션은 한 번에 하나만 쓸 수 있습니다\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: -e 옵션과 -f 옵션은 셰도우 암호가 필요합니다\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: '%lu' UID가 이미 있습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr "%s: %s 사용자는 %s의 암호를 바꿀 권한이 없습니다\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: 디렉터리 %s은(는) 이미 있습니다\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: 디렉터리 %s을(를) 만들 수 없습니다\n"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: 경고: 이전 홈 디렉터리 %s을(를) 완전히 제거하는 데 실패했습니다"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: 디렉터리 %s의 이름을 %s(으)로 바꿀 수 없습니다\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: 사용자 %lu의 최근 기록 항목을 사용자 %lu에 복사하는데 실패했습니다: %s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: 사용자 %lu의 로그인 실패 기록 항목을 사용자 %lu에 복사하는데 실패했습니"
+"다: %s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: 경고: %s은(는) %s이(가) 소유하고 있지 않습니다\n"
+
+msgid "failed to change mailbox owner"
+msgstr "메일함 소유자를 바꾸는 데 실패했습니다"
+
+msgid "failed to rename mailbox"
+msgstr "메일함의 이름을 바꾸는 데 실패했습니다"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s: 새 %s 항목 '%s'을(를) 준비하는데 실패했습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s: 새 %s 항목 '%s'을(를) 준비하는데 실패했습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s: 새 %s 항목 '%s'을(를) 준비하는데 실패했습니다\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s: 새 %s 항목 '%s'을(를) 준비하는데 실패했습니다\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"%s을(를) 수정했습니다.\n"
+"앞뒤가 맞으려면 %s도 바꿔야 합니다.\n"
+"수정하려면 '%s' 명령을 이용하십시오.\n"
+
+msgid " -g, --group edit group database\n"
+msgstr ""
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr ""
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: %s을(를) 제거하는데 실패했습니다\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: %s은(는) 바뀌지 않았습니다\n"
+
+#, fuzzy
+msgid "failed to create scratch directory"
+msgstr "메일함의 이름을 바꾸는 데 실패했습니다"
+
+#, fuzzy
+msgid "failed to drop privileges"
+msgstr "%s: 관리자 권한을 버릴 수 없습니다 (%s)\n"
+
+#, fuzzy
+msgid "Couldn't get file context"
+msgstr "파일을 잠글 수 없습니다"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+#, fuzzy
+msgid "failed to gain privileges"
+msgstr "%s: 관리자 권한을 버릴 수 없습니다 (%s)\n"
+
+msgid "Couldn't lock file"
+msgstr "파일을 잠글 수 없습니다"
+
+msgid "Couldn't make backup"
+msgstr "백업을 만들 수 없습니다"
+
+#, fuzzy, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s: %s\n"
+
+#, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+#, fuzzy
+msgid "failed to open scratch file"
+msgstr "메일함의 이름을 바꾸는 데 실패했습니다"
+
+#, fuzzy
+msgid "failed to unlink scratch file"
+msgstr "%s: %s의 잠금을 푸는데 실패했습니다\n"
+
+#, fuzzy
+msgid "failed to stat edited file"
+msgstr "메일함의 이름을 바꾸는 데 실패했습니다"
+
+#, fuzzy
+msgid "failed to allocate memory"
+msgstr "메일함 소유자를 바꾸는 데 실패했습니다"
+
+#, fuzzy
+msgid "failed to create backup file"
+msgstr "메일함의 이름을 바꾸는 데 실패했습니다"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: %s을(를) 복구할 수 없습니다: %s (바뀐 사항은 %s에 있습니다)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: 기본 디렉터리 '%s' 잘못되었습니다\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "malloc(%d)에 실패\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: chage [options] [LOGIN]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -d, --lastday LAST_DAY set last password change to LAST_DAY\n"
+#~| " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -l, --list show account aging information\n"
+#~| " -m, --mindays MIN_DAYS set minimum number of days before "
+#~| "password\n"
+#~| " change to MIN_DAYS\n"
+#~| " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~| "password\n"
+#~| " change to MAX_DAYS\n"
+#~| " -W, --warndays WARN_DAYS set expiration warning days to "
+#~| "WARN_DAYS\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "사용법: chage [옵션] [로그인]\n"
+#~ "\n"
+#~ "옵션:\n"
+#~ " -d, --lastday <최근날짜> 최근 암호를 바꾼 날짜를 <최근날짜>로 합니"
+#~ "다.\n"
+#~ " -E, --expiredate <만료날짜> 계정 만료날짜를 <만료날짜>로 합니다.\n"
+#~ " -h, --help 이 도움말을 표시하고 끝냅니다.\n"
+#~ " -I, --inactive <비활성화기간> 만료된 후 비활성화 기간을 <비활성화기간>"
+#~ "으로\n"
+#~ " 합니다\n"
+#~ " -l, --list 계정의 사용기한 정보를 표시합니다.\n"
+#~ " -m, --mindays <최소날수> 암호를 바꾸기 전의 최소 날짜 수를 <최소날"
+#~ "수>로\n"
+#~ " 합니다.\n"
+#~ " -M, --maxdays <최대날수> 암호를 바꾸기 전의 최대 날짜 수를 <최대날"
+#~ "수>로\n"
+#~ " 합니다.\n"
+#~ " -W, --warndays <경고날수> 만료 경고 기간을 <경고날수>으로 합니다.\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: PAM 인증이 실패했습니다\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "사용법: %s [-f 이름] [-r 방_번호] [-w 직장_전화번호]\n"
+#~ "\t[-h 집_전화번호] [-o 기타] [사용자]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr ""
+#~ "사용법: %s [-f 이름] [-r 방_번호] [-w 직장_전화번호] [-h 집_전화번호]\n"
+
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "사용법: %s [옵션]\n"
+#~ "\n"
+#~ "옵션:\n"
+#~ " -c, --crypt-method 암호화 방법 (다음 중 하나: %s)\n"
+#~ " -e, --encrypted 입력하는 암호가 암호화되어 있습니다\n"
+#~ " -h, --help 이 도움말 메시지를 표시하고 끝냅니다\n"
+#~ " -m, --md5 일반 텍스트 암호를 MD5 알고리즘을 사용해\n"
+#~ " 암호화합니다\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "사용법: chsh [옵션] [<로그인>]\n"
+#~ "\n"
+#~ "옵션:\n"
+#~ " -h, --help 이 도움말 메시지를 표시하고 끝냅니다\n"
+#~ " -s, --shelll <쉘> 사용자 계정의 새 로그인 쉘\n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "사용법: expiry {-f|-c}\n"
+
+#, fuzzy
+#~| msgid "faillog: Failed to get the entry for UID %d\n"
+#~ msgid "faillog: Failed to get the entry for UID %lu\n"
+#~ msgstr "faillog: UID %d번의 항목을 읽는데 실패했습니다\n"
+
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "faillog: %s을(를) 열 수 없습니다: %s\n"
+
+#~ msgid "faillog: Cannot get the size of %s: %s\n"
+#~ msgstr "faillog: %s의 크기를 얻을 수 없습니다: %s\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "사용법: groupdel 그룹\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: -s 옵션과 -r 옵션을 동시에 쓸 수 없습니다\n"
+
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "사용법: grpconv\n"
+
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "사용법: grpunconv\n"
+
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "사용법: lastlog [옵션]\n"
+#~ "\n"
+#~ "옵션:\n"
+#~ " -b, --before <날짜> <날짜>일 이전의 최근 기록을 표시합니다\n"
+#~ " -h, --help 이 도움말 메시지를 표시하고 끝냅니다\n"
+#~ " -t, --time <날짜> <날짜>일 내의 최근 기록만 표시합니다\n"
+#~ " -u, --user <로그인> <로그인> 사용자의 최근 기록만 표시합니다\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "사용법: passwd [옵션] [<로그인>]\n"
+#~ "\n"
+#~ "옵션:\n"
+#~ " -a, --all 모든 계정의 암호 상태를 보고합니다\n"
+#~ " -d, --delete 지정된 계정의 암호를 지웁니다\n"
+#~ " -e, --expire 지정된 계정 암호를 강제로 만료시킵니다\n"
+#~ " -h, --help 이 도움말 메시지를 표시하고 끝냅니다\n"
+#~ " -k, --keep-tokens 암호가 만료했을 때만 바꿉니다\n"
+#~ " -i, --inactive <비활성화기간> 만료된 후 비활성화 기간을 \n"
+#~ " <비활성화기간>으로 합니다\n"
+#~ " -l, --lock 지정된 계정의 암호를 잠급니다\n"
+#~ " -n, --mindays <최소날수> 암호를 다시 바꿀 수 있는 최소 일\n"
+#~ " 수를 <최소날수>로 합니다\n"
+#~ " -q, --quiet 조용한 모드\n"
+#~ " -r, --repository <저장소> <저장소> 저장소에 있는 암호를 바꿉니다\n"
+#~ " -S, --status 지정된 계정의 암호 상태를 보고합니다\n"
+#~ " -u, --unlock 지정된 계정의 암호 잠금을 해제합니다\n"
+#~ " -w, --warndays <경고날수> 암호 만료 예고를 <경고날수> 이전부터 합니"
+#~ "다\n"
+#~ " -x, --maxdays <최대날수> 암호를 바꾸지 않을 수 있는 최대 일\n"
+#~ " 수를 <최대날수>로 합니다\n"
+#~ "\n"
+
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "사용법: pwconv\n"
+
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "사용법: pwunconv\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "알 수 없는 아이디: %s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "쉘이 없음\n"
+
+#~ msgid ""
+#~ "Usage: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force removal of files,\n"
+#~ " even if not owned by user\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -r, --remove remove home directory and mail spool\n"
+#~ "\n"
+#~ msgstr ""
+#~ "사용법: userdel [옵션] <로그인>\n"
+#~ "\n"
+#~ "옵션:\n"
+#~ " -f, --force 파일이 사용자 소유자가 아니더라도 강제로\n"
+#~ " 지웁니다\n"
+#~ " -h, --help 이 도움말 메시지를 표시하고 끝냅니다\n"
+#~ " -r, --remove 홈 디렉터리와 메일 저장소을 지웁니다\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: usermod [options] LOGIN\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -c, --comment COMMENT new value of the GECOS field\n"
+#~| " -d, --home HOME_DIR new home directory for the user account\n"
+#~| " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -g, --gid GROUP force use GROUP as new primary group\n"
+#~| " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~| " -a, --append append the user to the supplemental "
+#~| "GROUPS\n"
+#~| " mentioned by the -G option without "
+#~| "removing\n"
+#~| " 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"
+#~| " -m, --move-home move contents of the home directory to "
+#~| "the\n"
+#~| " new location (use only with -d)\n"
+#~| " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~| " -p, --password PASSWORD use encrypted password for the new "
+#~| "password\n"
+#~| " -s, --shell SHELL new login shell for the user account\n"
+#~| " -u, --uid UID new UID for the user account\n"
+#~| " -U, --unlock unlock the user account\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "사용법: usermod [옵션] <로그인>\n"
+#~ "\n"
+#~ "옵션:\n"
+#~ " -c, --comment <설명> GECOS필드의 값을 새로 설정합니다\n"
+#~ " -d, --home <홈디렉터리> 지정된 사용자 계정의 새 홈 디렉터리를\n"
+#~ " 지정합니다\n"
+#~ " -e, --expiredate <만료날짜> 계정 만료 날짜를 <만료날짜>로 합니다\n"
+#~ " -f, --inactive <비활성화기간> 만료된 후 비활성화 기간을 <비활성화기간>으"
+#~ "로\n"
+#~ " 합니다\n"
+#~ " -g, --gid <그룹> 새 주요 그룹을 <그룹>으로 강제로 지정합니"
+#~ "다\n"
+#~ " -G, --groups <그룹목록> 보조 그룹의 목록을 새로 지정합니다\n"
+#~ " -a, --append 사용자를 보조 그룹 <그룹>에 추가합니다\n"
+#~ " (그룹 목록은 -G 옵션에 나타나고 다른\n"
+#~ " 그룹의 추가 삭제 상태는 변하지 않습니다)\n"
+#~ " -h, --help 이 도움말을 표시하고 끝냅니다\n"
+#~ " -l, --login <새로그인> 로그인 이름을 새로 지정합니다\n"
+#~ " -L, --lock 지정된 사용자 계정을 잠급니다\n"
+#~ " -m, --move-home 홈 디렉터리의 내용을 새 홈 디렉터리로 옮깁"
+#~ "니다\n"
+#~ " (-d 옵션과 함께 사용해야 합니다)\n"
+#~ " -o, --non-unique 중복되는 UID도 허용합니다\n"
+#~ " -p, --password <암호> 새로 사용할 암호를 암호화하여 사용합니다\n"
+#~ " -s, --shell <쉘> 지정된 사용자 계정의 로그인 쉘을 지정합니"
+#~ "다\n"
+#~ " -u, --uid <UID> 지정된 사용자 계정의 새 <UID> 값을 지정합"
+#~ "니다\n"
+#~ " -U, --unlock 사용자 계정의 잠금을 해제합니다\n"
+#~ "\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s: 주어진 플래그가 없습니다\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: vipw [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -g, --group edit group database\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -p, --passwd edit passwd database\n"
+#~| " -q, --quiet quiet mode\n"
+#~| " -s, --shadow edit shadow or gshadow database\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group edit group database\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -p, --passwd edit passwd database\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow edit shadow or gshadow database\n"
+#~ " -u, --user which user's tcb shadow file to edit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "사용법: vipw [옵션]\n"
+#~ "\n"
+#~ "옵션:\n"
+#~ " -g, --group 그룹 데이터베이스를 편집합니다\n"
+#~ " -h, --help 이 도움말 메시지를 표시하고 끝냅니다\n"
+#~ " -p, --passwd passwd 데이터베이스를 편집합니다\n"
+#~ " -q, --quiet 조용한 모드\n"
+#~ " -s, --shadow 셰도우 데이터베이스나 그룹 셰도우 \n"
+#~ " 데이터베이스를 수정합니다\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: %s [option] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --add USER add USER to GROUP\n"
+#~ " -d, --delete USER remove USER from GROUP\n"
+#~ " -r, --remove-password remove the GROUP's password\n"
+#~ " -R, --restrict restrict access to GROUP to its members\n"
+#~ " -M, --members USER,... set the list of members of GROUP\n"
+#~ "%s\n"
+#~ "\n"
+#~ msgstr ""
+#~ "사용법: %s [옵션] <그룹>\n"
+#~ "\n"
+#~ "옵션:\n"
+#~ " -a, --add <사용자> <사용자>를 <그룹>에 추가합니다\n"
+#~ " -d, --delete <사용자> <사용자>를 <그룹>에서 제거합니다\n"
+#~ " -r, --remove-password <그룹>의 암호를 제거합니다\n"
+#~ " -R, --restrict <그룹>에 접근하는 권한을 멤버로 제한합니"
+#~ "다\n"
+#~ " -M, --members <사용자>,... 그룹의 멤버 목록을 설정합니다\n"
+#~ "%s\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmems [options] [action]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group groupname change groupname instead of the user's "
+#~ "group\n"
+#~ " (root only)\n"
+#~ "\n"
+#~ "Actions:\n"
+#~ " -a, --add username add username to the members of the group\n"
+#~ " -d, --delete username remove username from the members of the "
+#~ "group\n"
+#~ " -p, --purge purge all members from the group\n"
+#~ " -l, --list list the members of the group\n"
+#~ "\n"
+#~ msgstr ""
+#~ "사용법: groupmems [옵션] [동작]\n"
+#~ "\n"
+#~ "옵션:\n"
+#~ " -g, --group <그룹이름> 사용자의 그룹이 아닌 <그룹이름>을 바꿉니"
+#~ "다\n"
+#~ " (root 전용)\n"
+#~ "\n"
+#~ "Actions:\n"
+#~ " -a, --add <사용자이름> <사용자이름>을 그룹의 멤버로 추가합니다\n"
+#~ " -d, --delete <사용자이름> 그룹 멤버에서 <사용자이름>을 제거합니다\n"
+#~ " -p, --purge 그룹에서 모든 멤버를 없앱니다\n"
+#~ " -l, --list 그룹의 멤버 목록을 표시합니다\n"
+#~ "\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s: %s을(를) 만들 수 없습니다\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s: %s을(를) chown할 수 없습니다\n"
+
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all display faillog records for all users\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -l, --lock-time SEC after failed login lock account to SEC "
+#~ "seconds\n"
+#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
+#~ " -r, --reset reset the counters of login failures\n"
+#~ " -t, --time DAYS display faillog records more recent than "
+#~ "DAYS\n"
+#~ " -u, --user LOGIN display faillog record or maintains "
+#~ "failure\n"
+#~ " counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ " options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "사용법: faillog [옵션]\n"
+#~ "\n"
+#~ "옵션:\n"
+#~ " -a, --all 모든 사용자의 로그인 실패 기록을 표시합니다\n"
+#~ " -h, --help 이 도움말 메시지를 표시하고 끝냅니다\n"
+#~ " -l, --lock-time <초> 로그인에 실패하면 <초>초 동안 계정을 잠급니"
+#~ "다\n"
+#~ " -m, --maximum <최대값> 로그인 실패 횟수의 최대값을 <최대값>으로 합니"
+#~ "다\n"
+#~ " -r, --reset 로그인 실패 횟수를 초기화합니다\n"
+#~ " -t, --time <날짜> <날짜>일 내의 로그인 실패 기록만 표시합니다\n"
+#~ " -u, --user <로그인> <로그인> 사용자의 로그인 실패 기록을 표시하거"
+#~ "나,\n"
+#~ " -r, -m, -l 옵션을 사용할 때에는 <로그인> 사용"
+#~ "자의\n"
+#~ " 로그인 실패 횟수와 한계값만 관리합니다\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force exit with success status if the\n"
+#~ " specified group already exists\n"
+#~ " -g, --gid GID use GID for the new group\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique allow create group with duplicate\n"
+#~ " (non-unique) GID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new group\n"
+#~ " -r, --system create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "사용법: groupadd [옵션] <그룹>\n"
+#~ "\n"
+#~ "옵션\n"
+#~ " -f, --force 지정한 그룹이 이미 있을 경우에도 끝내고 \n"
+#~ " 성공한 것으로 표시합니다\n"
+#~ " -g, --gid <GID> 새 그룹의 gid를 <GID>로 합니다\n"
+#~ " -h, --help 이 도움말 메시지를 표시하고 끝냅니다\n"
+#~ " -K, --key <키>=<값> /etc/login.defs의 기본값을 무시하고 설정합"
+#~ "니다\n"
+#~ " -o, --non-unique GID가 중복되더라도(유일하지 않더라도)\n"
+#~ " 그룹 만들기를 허용합니다\n"
+#~ " -p, --password <암호> 새 그룹에 암호화한 암호를 사용합니다\n"
+#~ " -r, --system 시스템 계정을 만듭니다\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --gid GID force use new GID by GROUP\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "사용법: groupmod [옵션] <그룹>\n"
+#~ "\n"
+#~ "옵션:\n"
+#~ " -g, --gid <GID> <그룹>에 새 <GID>를 사용합니다\n"
+#~ " -h, --help 이 도움말을 출력하고 끝납니다\n"
+#~ " -n, --new-name <새그룹> <그룹>에 <새그룹> 이름을 강제로 사용합니"
+#~ "다\n"
+#~ " -o, --non-unique <그룹>에 중복된 (유일하지 않은) GID로 그룹"
+#~ "을 \n"
+#~ " 만듭니다\n"
+#~ " -p, --password <암호> 새 암호에 암호화한 암호를 사용합니다\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: useradd [options] LOGIN\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~| " home directory\n"
+#~| " -c, --comment COMMENT set the GECOS field for the new user "
+#~| "account\n"
+#~| " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~| " -D, --defaults print or save modified default useradd\n"
+#~| " configuration\n"
+#~| " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -g, --gid GROUP force use GROUP for the new user "
+#~| "account\n"
+#~| " -G, --groups GROUPS list of supplementary groups for the "
+#~| "new\n"
+#~| " user account\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~| " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~| " -l, --no-log-init do not add the user to the lastlog and\n"
+#~| " faillog databases\n"
+#~| " -m, --create-home create home directory for the new user\n"
+#~| " account\n"
+#~| " -M, --no-create-home do not create user's home directory\n"
+#~| " (overrides /etc/login.defs)\n"
+#~| " -N, --no-user-group do not create a group with the same name "
+#~| "as\n"
+#~| " the user\n"
+#~| " -o, --non-unique allow create user with duplicate\n"
+#~| " (non-unique) UID\n"
+#~| " -p, --password PASSWORD use encrypted password for the new user\n"
+#~| " account\n"
+#~| " -r, --system create a system account\n"
+#~| " -s, --shell SHELL the login shell for the new user "
+#~| "account\n"
+#~| " -u, --uid UID force use the UID for the new user "
+#~| "account\n"
+#~| " -U, --user-group create a group with the same name as the "
+#~| "user\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~ " home directory\n"
+#~ " -c, --comment COMMENT set the GECOS field for the new user "
+#~ "account\n"
+#~ " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~ " -D, --defaults print or save modified default useradd\n"
+#~ " configuration\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP for the new user account\n"
+#~ " -G, --groups GROUPS list of supplementary groups for the new\n"
+#~ " user account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -l, --no-log-init do not add the user to the lastlog and\n"
+#~ " faillog databases\n"
+#~ " -m, --create-home create home directory for the new user\n"
+#~ " account\n"
+#~ " -M, --no-create-home do not create user's home directory\n"
+#~ " (overrides /etc/login.defs)\n"
+#~ " -N, --no-user-group do not create a group with the same name "
+#~ "as\n"
+#~ " the user\n"
+#~ " -o, --non-unique allow create user with duplicate\n"
+#~ " (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new user\n"
+#~ " account\n"
+#~ " -r, --system create a system account\n"
+#~ " -s, --shell SHELL the login shell for the new user account\n"
+#~ " -u, --uid UID force use the UID for the new user "
+#~ "account\n"
+#~ " -U, --user-group create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "사용법: useradd [옵션] <로그인>\n"
+#~ "\n"
+#~ "옵션:\n"
+#~ " -b, --base-dir <기본디렉터리> 새 사용자 계정의 홈 디렉터리의 기본 디렉"
+#~ "토리\n"
+#~ " -c, --comment <설명> 새 사용자 계정의 GECOS 필드를 설정합니"
+#~ "다\n"
+#~ " -d, --home-dir <홈디렉터리> 새 사용자 계정의 홈 디렉터리\n"
+#~ " -D, --defaults 기본 useradd 설정을 표시하거나 변경합니"
+#~ "다\n"
+#~ " -e, --expiredate <만료일> 계정 만료 날짜를 <만료일>로 합니다\n"
+#~ " -f, --inactive <비활성화기간> 만료된 후 비활성화 기간을 <비활성화기간>"
+#~ "으로\n"
+#~ " 합니다\n"
+#~ " -g, --gid <그룹> 새 주요 그룹을 <그룹>으로 강제로 지정합니"
+#~ "다\n"
+#~ " -G, --groups <그룹목록> 보조 그룹의 목록을 새로 지정합니다\n"
+#~ " -h, --help 이 도움말을 표시하고 끝냅니다\n"
+#~ " -k, --skel <SKEL디렉터리> 다른 skel 디렉터리를 지정합니다\n"
+#~ " -K, --key <키>=<값> /etc/login.defs의 기본값을 무시하고 설정"
+#~ "합니다\n"
+#~ " -l, --no-log-init 사용자를 최근 기록 및 로그인 실패\n"
+#~ " 데이터베이스에 추가하지 않습니다\n"
+#~ " -m, --create-home 새 사용자 계정의 홈 디렉터리를 만듭니다\n"
+#~ " -M, --no-create-home 홈 디렉터리를 만들지 않습니다\n"
+#~ " (/etc/login.defs의 설정을 무시합니다)\n"
+#~ " -o, --non-user-group 사용자와 같은 이름의 그룹을 만들지 않습니"
+#~ "다\n"
+#~ " -o, --non-unique 중복되는 UID도 허용합니다\n"
+#~ " -p, --password <암호> 새로 사용할 암호를 암호화하여 사용합니"
+#~ "다\n"
+#~ " -s, --shell <쉘> 지정한 사용자 계정의 로그인 쉘을 지정합니"
+#~ "다\n"
+#~ " -u, --uid <UID> 지정한 사용자 계정의 새 <UID> 값을 지정합"
+#~ "니다\n"
+#~ " -U, --user-group 사용자와 같은 이름의 그룹을 만듭니다\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: %s [options] [input]\n"
+#~ "\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -r, --system create system accounts\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "사용법: %s [옵션] [입력]\n"
+#~ "\n"
+#~ " -c, --crypt-method 암호화 방법 (다음 중 하나: %s)\n"
+#~ " -r, --system 시스템 계정을 만듭니다\n"
+#~ "%s\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "암호가 만료하도록 설정했습니다."
diff --git a/po/nb.gmo b/po/nb.gmo
new file mode 100644
index 0000000..dd5a591
--- /dev/null
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
new file mode 100644
index 0000000..9d679f5
--- /dev/null
+++ b/po/nb.po
@@ -0,0 +1,4111 @@
+# Translation of shadow.po to Norwegian Bokmål.
+# Copyright (C) 2004, 2006 Free Software Foundation, Inc.
+# Knut Yrvin <knuty@skolelinux.no>, 2004.
+# Klaus Ade Johnstad <klaus.johnstad@holmlia.gs.oslo.no>, 2004.
+# Klaus Ade Johnstad <klaus@skolelinux.no>, 2004.
+# Håvard Korsvoll <korsvoll@skulelinux.no>, 2004.
+# Bjørn Steensrud <bjornst@powertech.no>, 2006.
+# Bjørn Steensrud <bjornst@skogkatt.homelinux.org>, 2009, 2012.
+# Hans Fredrik Nordhaug <hans@nordhaug.priv.no>, 2012.
+# Lars Bahner <bahner@debian.org>, 2015
+# Åka Sikrom <a4@hush.com>, 2018
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.17\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2018-03-05 12:33+0100\n"
+"Last-Translator: Åka Sikrom <a4@hush.com>\n"
+"Language-Team: Norwegian Bokmål <i18n-nb@lister.ping.uio.no>\n"
+"Language: nb\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 1.7.5\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"Det ligger flere oppføringer med navnet «%s» i %s. Korriger dette med pwck "
+"eller grpck.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "har du et libcrypt som ikke støtter crypt-metoden? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr "oppsettsfeil – klarte ikke å tolke %s-verdi: «%s»"
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Klarte ikke å tildele plass til oppsettsinformasjon.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "oppsettsfeil - element «%s» er ukjent (kontakt administrator)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr "%s: nscd avsluttet ikke normallt (signal %d)\n"
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr "%s: nscd avsluttet med status %d\n"
+
+msgid "Password: "
+msgstr "Passord: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s's Passord: "
+
+#, fuzzy
+#| msgid "Cannot open audit interface - aborting.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "Klarte ikke å åpne kontrollgrensesnitt – avbryter.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr "[libsemanage]: %s\n"
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr "Klarte ikke å lage SELinux-styringshåndtak\n"
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr "SELinux-regler blir ikke håndtert\n"
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr "Klarte ikke å lese SELinux-regler\n"
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr "Klarte ikke å sette opp SELinux-styringstilkobling\n"
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr "Klarte ikke å begynne SELinux-transaksjon\n"
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr "Klarte ikke spørre seuser om %s\n"
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr "Klarte ikke endre serange for %s\n"
+
+#, c-format
+msgid "Could not set sename for %s\n"
+msgstr "Klarte ikke endre sename for %s\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr "Klarte ikke å endre brukerkobling for %s\n"
+
+#, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "Klarte ikke å lage SELinux-brukerkobling for %s\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr "Klarte ikke å endre navn på %s\n"
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr "Klarte ikke å endre SELinux-brukernavn for %s\n"
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr "Klarte ikke legge til brukerkobling for %s\n"
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr "Klarte ikke å starte opp SELinux-styringsverktøy\n"
+
+#, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "Klarte ikke å lage SELinux-brukernøkkel\n"
+
+#, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "Klarte ikke å bekrefte SELinux-bruker\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr "Klarte ikke å endre SELinux-brukerkobling\n"
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr "Klarte ikke å legge til SELinux brukeravbildning\n"
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr "Klarte ikke å utføre SELinux-transaksjon\n"
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+"Brukerkobling for %s er ikke definert, OK hvis forvalgt kobling ble brukt\n"
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr "Brukerkobling for %s er definert i regelsett, og kan ikke slettes\n"
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr "Klarte ikke å slette brukerkobling for %s"
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: minnet er fullt\n"
+
+# , c-format
+#, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: Klarte ikke å utføre stat på %s: %s\n"
+
+#, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: %s er hverken en mappe eller symbolsk lenke.\n"
+
+# , c-format
+#, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: Klarte ikke å lese symbolsk lenke %s: %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr "%s: Mistenkelig lang symlenke: %s\n"
+
+#, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: Klarte ikke å opprette mappa %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: Klarte ikke å gi %s ny eier: %s\n"
+
+# , c-format
+#, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: Klarte ikke å endre modus for %s: %s\n"
+
+#, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: avlenk: %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: Klarte ikke å slette mappa %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: Klarte ikke å endre navn på %s til %s: %s\n"
+
+# , c-format
+#, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: Klarte ikke å fjerne %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: Klarte ikke å lage symbolsk lenke %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: Klarte ikke å gi %s ny eier: %s\n"
+
+# , c-format
+#, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: Klarte ikke å kjøre lstat for %s: %s\n"
+
+#, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: Advarsel: bruker %s har ingen tcb-skyggefil.\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+"%s: Kritisk: %s' tcb-skygge er ikke en vanlig fil med st_nlink=1.\n"
+"Kontoen forblir låst.\n"
+
+#, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: mkdir: %s: %s\n"
+
+# , c-format
+#, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: Klarte ikke å åpne %s: %s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Advarsel: ukjent gruppe %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Advarsel: for mange grupper\n"
+
+msgid "Your password has expired."
+msgstr "Passordet ditt har gått ut på dato."
+
+msgid "Your password is inactive."
+msgstr "Passordet ditt er ikke aktivert."
+
+msgid "Your login has expired."
+msgstr "Brukerkontoen din har gått ut på dato."
+
+msgid " Contact the system administrator."
+msgstr " Kontakt systemadministrator."
+
+msgid " Choose a new password."
+msgstr " Velg nytt passord."
+
+msgid "You must change your password."
+msgstr "Du må endre passord."
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Passordet ditt utgår om %ld dager.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Passordet ditt utgår i morgen."
+
+msgid "Your password will expire today."
+msgstr "Passordet ditt utgår i dag."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "Klarte ikke å åpne kontrollgrensesnitt – avbryter.\n"
+
+# , c-format
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Klarte ikke å endre eier eller rettigheter til tty stdin: %s"
+
+# , c-format
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: klarte ikke å låse opp %s\n"
+
+#, c-format
+msgid "%s: "
+msgstr "%s: "
+
+msgid ": "
+msgstr ": "
+
+msgid "Environment overflow\n"
+msgstr "Miljøet er fullt\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Du har ikke tilgang til å endre $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d mislykket forsøk siden forrige innlogging.\n"
+"Forrige var %s (%s).\n"
+msgstr[1] ""
+"%d mislykkede forsøk siden forrige innlogging.\n"
+"Forrige var %s (%s).\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: Ugyldig oppsett: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr "%s: Ugyldige innstillinger: GID_MIN (%lu), GID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "%s: klarte ikke å tildele minne: %s\n"
+
+# , c-format
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr "%s: Fant ikke entydig system-GID (ingen flere GID-er tilgjengelig)\n"
+
+# , c-format
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: Fant ikke entydig GID (ingen flere GID-er tilgjengelig)\n"
+
+# , c-format
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: Fant ikke entydig GID (ingen flere GID-er tilgjengelig)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+"%s: Ugyldig oppsett: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX (%lu)\n"
+
+# , c-format
+#, fuzzy, c-format
+#| msgid "%s: can't find subordinate user range\n"
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: fant ikke underordnet bruker-rekkevidde\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+"%s: Ugyldige innstillinger: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+
+# , c-format
+#, fuzzy, c-format
+#| msgid "%s: can't find subordinate user range\n"
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: fant ikke underordnet bruker-rekkevidde\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: Ugyldige innstillinger: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr "%s: Ugyldige innstillinger: UID_MIN (%lu), UID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+# , c-format
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr "%s: Fant ikke entydig system-UID (ingen flere UID-er tilgjengelig)\n"
+
+# , c-format
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: Fant ikke entydig UID (ingen flere UID-er tilgjengelig)\n"
+
+# , c-format
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: Fant ikke entydig UID (ingen flere UID-er tilgjengelig)\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+# , c-format
+#, fuzzy, c-format
+#| msgid "%s: Authentication failure\n"
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: Autentisering mislyktes\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: ugyldig felt «%s»\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Could not set name for %s\n"
+msgid "%s: Could not seteuid to %d\n"
+msgstr "Klarte ikke å endre navn på %s\n"
+
+#, fuzzy, c-format
+#| msgid "Could not set name for %s\n"
+msgid "%s: Could not set caps\n"
+msgstr "Klarte ikke å endre navn på %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't open file\n"
+msgid "%s: snprintf failed!\n"
+msgstr "%s: klarte ikke å åpne fil\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: linje %d: chown %s mislyktes: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: linje %d: chown %s mislyktes: %s\n"
+
+msgid "Too many logins.\n"
+msgstr "For mange innlogginger.\n"
+
+msgid "You have new mail."
+msgstr "Du har fått ny e-post."
+
+msgid "No mail."
+msgstr "Ingen e-post."
+
+msgid "You have mail."
+msgstr "Du har ulest e-post."
+
+msgid "no change"
+msgstr "ingen endring"
+
+msgid "a palindrome"
+msgstr "et palindrom"
+
+msgid "case changes only"
+msgstr "bare endring i store/små bokstaver"
+
+msgid "too similar"
+msgstr "for likt"
+
+msgid "too simple"
+msgstr "for enkelt"
+
+msgid "rotated"
+msgstr "rotert"
+
+msgid "too short"
+msgstr "for kort"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Dårlig passord: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() mislyktes, feil %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+msgid "passwd: password unchanged\n"
+msgstr "passwd: passordet ble ikke endret\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: passordet ble oppdatert\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: ikke støtte for lager %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start: feil %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd: pam_start() mislyktes, feil %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Feil passord for «%s».\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr "%s: flere --root-valg\n"
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr "%s: valget «%s» må ha et argument\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: klarte ikke å fjerne privilegier (%s)\n"
+
+#, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: chroot-sti «%s» er ugyldig\n"
+
+#, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: fikk ikke tilgang til chroot-mappe %s: %s\n"
+
+#, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: klarte ikke å bytte mappe til chroot-mappe %s: %s\n"
+
+#, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: klarte ikke å utføre chroot med %s: %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"Ugyldig verdi for ENCRYPT_METHOD: «%s»\n"
+"Faller tilbake til DES.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Klarte ikke å bytte mappe til «%s»\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Hjemmemappe mangler. Logger inn med HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Klarte ikke å kjøre %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Rotmappe «%s» er ugyldig\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Klarte ikke å endre rotmappe til «%s»\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: brukeren %s er pålogget\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: brukeren %s er pålogget\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Fant ikke tty-navn."
+
+msgid "No"
+msgstr "Nei"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Bruk: %s [valg] LOGIN\n"
+"\n"
+"Valg:\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+" -d, --lastday DAG endre forrige passordendring til valgt DAG\n"
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -E --expiredate DATO endre kontoens utløpsdato til valgt DATO\n"
+
+msgid " -h, --help display this help message and exit\n"
+msgstr " -h, --help vis denne hjelpeteksten og avslutt\n"
+
+#, fuzzy
+#| msgid " -g, --group edit group database\n"
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr " -g, --group rediger group-database\n"
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -f, --inactive INAKTIV endre passord til INAKTIV etter utløp\n"
+
+msgid " -l, --list show account aging information\n"
+msgstr " -l, --list vis aldringsinformasjon for konto\n"
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -m, --mindays DAGER endre nedre grense for passord-alder\n"
+" til valgt antall DAGER\n"
+
+#, fuzzy
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -M, --maxdays DAGER endre øvre grense for passord-alder\n"
+" til valgt antall DAGER\n"
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr " -R, --root CHROOT_MAPPE mappe som skal brukes til chroot\n"
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -W, --warndays DAGER varsle om at kontoen går ut på dato når det "
+"er valgt antall DAGER igjen\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Skriv inn ny verdi, eller trykk ENTER for å bruke forvalgt verdi"
+
+msgid "Minimum Password Age"
+msgstr "Nedre grense for passord-alder"
+
+msgid "Maximum Password Age"
+msgstr "Øvre grense for passord-alder"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Forrige endring av passord (YYYY-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Varsel om at passord går ut på dato"
+
+msgid "Password Inactive"
+msgstr "Inaktivt passord"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Utløpsdato for konto (YYYY-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Forrige endring av passord\t\t\t\t\t: "
+
+msgid "never"
+msgstr "aldri"
+
+msgid "password must be changed"
+msgstr "passordet må endres"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Passord utløper\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Passordet inaktivt\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Kontoen utløper\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Nedre grense for antall dager mellom passord-endring\t\t\t:%ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Øvre grense for antall dager mellom passord-endring\t\t\t:%ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Antall dager med varsling før passordet utløper:\t\t%ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: «%s» er en ugyldig dato\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: «%s» er et ugyldig numerisk argument\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: ikke bruk «l» sammen med andre valg\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Ingen tilgang.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Fant ikke brukernavnet ditt.\n"
+
+#, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: PAM: %s\n"
+
+# , c-format
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: klarte ikke å låse %s; prøv igjen senere.\n"
+
+# , c-format
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: klarte ikke å åpne %s\n"
+
+# , c-format
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: det oppstod en feil mens endringer ble skrevet til %s\n"
+
+# , c-format
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: klarte ikke lage ny %s-oppføring «%s»\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: skyggepassordfil finnes ikke\n"
+
+# , c-format
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: bruker «%s» finnes ikke i %s\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Endrer aldringsinformasjon for %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: feil under feltendring\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Bruk: %s [valg] [BRUKER]\n"
+"\n"
+"Valg:\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr " -f, --full-name FULLT_NAVN endre brukerens fulle navn\n"
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr " -h, --home-phone HJEMMETLF endre hjemmetelefonnummer\n"
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr " -o, --other ANNEN_INFO endre annen informasjon i GECOS\n"
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr " -r, --room ROM_NUMMER endre romnummer\n"
+
+msgid " -u, --help display this help message and exit\n"
+msgstr " -h, --help vis denne hjelpeteksten og avslutt\n"
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr " -w, --work-phone JOBBTELEFON endre jobbtelefonnummer\n"
+
+msgid "Full Name"
+msgstr "Fullt navn"
+
+# , c-format
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "Romnummer"
+
+msgid "Work Phone"
+msgstr "Jobbtelefon"
+
+msgid "Home Phone"
+msgstr "Hjemmetelefon"
+
+msgid "Other"
+msgstr "Annet"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Klarte ikke å endre ID til root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: navn med tegn som ikke er ASCII: «%s»\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: «%s» er et ugyldig navn\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s: romnummer med tegn som ikke er ASCII: «%s»\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: «%s» er et ugyldig romnummer\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: «%s» er et ugyldig telefonnummer\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: «%s» er et ugyldig telefonnummer\n"
+
+# , c-format
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: «%s» inneholder tegn som ikke er ASCII\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: «%s» inneholder ugyldige tegn\n"
+
+# , c-format
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: bruker «%s» finnes ikke\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: klarte ikke å endre bruker «%s» på NIS-klient.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: «%s» er NIS-sjef for denne klienten.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Endrer brukerinformasjon for %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: feltene er for lange\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Bruk: %s [valg] \n"
+"\n"
+"Valg:\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr " -c, --crypt-method METODE crypt-metode (%s)\n"
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+" -e, --encrypted passord som blir skrevet inn er allerede "
+"kryptert\n"
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+" -m, --md5 krypter klartekst-passordet med\n"
+" MD5-algoritmen\n"
+
+#, fuzzy
+#| msgid ""
+#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
+#| " crypt algorithms\n"
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+" -s, --sha-rounds antall SHA-runder for kryptering med SHA*\n"
+
+# , c-format
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: du kan bare bruke valget %s sammen med %s\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: du kan ikke kombinere valgene «-c», «-e» og «-m»\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: krypteringsmetoden %s støttes ikke på dette systemet\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: linje %d: linja er for lang\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: linje %d: mangler nytt passord\n"
+
+# , c-format
+#, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: klarte ikke å kryptere passord med salt «%s»: %s\n"
+
+# , c-format
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: linje %d: gruppa «%s» finnes ikke\n"
+
+# , c-format
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: linje %d: klarte ikke å lage ny %s-oppføring «%s»\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: fant feil, endringer ble ikke utført\n"
+
+# , c-format
+#, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: (linje %d: bruker %s) passordet er ikke endret\n"
+
+# , c-format
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: linje %d: bruker «%s» finnes ikke\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+" -s, --shell SHELL endre innloggingsskall for brukerkonto\n"
+
+msgid "Login Shell"
+msgstr "Innloggingsskall"
+
+# , c-format
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Du kan ikke endre skall for «%s».\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Endrer innloggingsskall for %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Ugyldig inntasting: %s\n"
+
+# , c-format
+#, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s: %s er et ugyldig skall\n"
+
+#, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: Advarsel: %s finnes ikke\n"
+
+#, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: Advarsel: %s er ikke kjørbar\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+" -c, --check kontroller om brukerens passord er utløpt\n"
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+" -f, --force tving passordendring hvis brukerens passord\n"
+" er utløpt\n"
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: valgene %s og %s er i konflikt\n"
+
+#, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "%s: uventet argument: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+" -a, --all vis faillog-oppføringer for alle brukere\n"
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+" -l, --lock-secs SEK lås konto i valgt antall SEKunder ved "
+"mislykket innloggingsforsøk\n"
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+" -m, --maximum ANT endre maksgrense for mislykkede innlogginger "
+"til valgt ANTall\n"
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+" -r, --reset tilbakestill tellere for mislykkede "
+"innlogginger\n"
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time DAGER vis faillog-poster nyere enn valgt antall "
+"DAGER\n"
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+" -u, --user BRUKER vis faillog-poster eller behandle tellere "
+"og \n"
+" grenser for innloggingsfeil (hvis brukt med -"
+"r,\n"
+" -m eller -l ) bare for valgt(e) BRUKER(e)\n"
+
+#, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: Klarte ikke hente oppføring for UID %lu\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "Bruker Mislyk Maksimum Siste På\n"
+
+# , c-format
+#, c-format
+msgid " [%lus left]"
+msgstr " [%lus gjenstår]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds lås]"
+
+#, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s: Klarte ikke å tilbakestille mislykket-teller for UID %lu\n"
+
+#, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: Klarte ikke å endre maksgrense for UID %lu\n"
+
+#, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: Klarte ikke endre UID-låsetid %lu\n"
+
+# , c-format
+#, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "%s: Ukjent bruker eller område: %s\n"
+
+#, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: Fant ikke størrelse på %s: %s\n"
+
+# , c-format
+#, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: Klarte ikke å skrive %s: %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Bruk: %s [valg] GRUPPE\n"
+"\n"
+"Valg:\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr " -a, --add BRUKER legg til BRUKER i GRUPPE\n"
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr " -d, --delete BRUKER fjern BRUKER fra GRUPPE\n"
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr " -Q, --root CHROOT_MAPPE mappe som skal brukes til chroot\n"
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr " -r, --remove-password fjern passord for GRUPPE\n"
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+" -R, --restrict bare gi tilgang til GRUPPE for "
+"gruppemedlemmer\n"
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr " -M, --members BRUKER,... endre medlemsliste for GRUPPE\n"
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+" -A, --administrators ADMIN,...\n"
+" endre liste over administratorer for valgt "
+"GRUPPE\n"
+
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "Du kan ikke kombinere valg, unntatt «-A» og «-M».\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "Du kan ikke kombinere valg.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: du må skrive inn skygge-gruppepassord for å velge «-A»\n"
+
+# , c-format
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: gruppa «%s» finnes ikke i %s\n"
+
+# , c-format
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: det oppstod en feil under lukking av skrivebeskyttet %s\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Endrer passord for gruppe %s\n"
+
+msgid "New Password: "
+msgstr "Nytt passord: "
+
+msgid "Re-enter new password: "
+msgstr "Skriv inn passordet på nytt: "
+
+msgid "They don't match; try again"
+msgstr "Passordene var ikke like. Prøv igjen"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Prøv igjen senere\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Legger til bruker %s i gruppa %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Fjerner bruker %s fra gruppa %s\n"
+
+# , c-format
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: bruker «%s» er ikke medlem i «%s»\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Ikke en tty\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Bruk: %s [valg] GRUPPE\n"
+"\n"
+"Valg:\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+" -f, --force avslutt normalt hvis gruppa finnes fra før\n"
+" og ikke bruk «-g» hvis GID allerede er i "
+"bruk\n"
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr " -g, --gid GID gi ny gruppe valgt GID\n"
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+" -K. --key NØKKEL=VERDI overstyr standarverdier fra /etc/login.defs\n"
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique tillat grupper med dupliserte\n"
+" (ikke-unike) GID-er\n"
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+" -p, --password PASSWORD bruk valgt kryptert PASSORD for ny gruppe\n"
+
+msgid " -r, --system create a system account\n"
+msgstr " -r, --system lag en systemkonto\n"
+
+#, fuzzy
+#| msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr " -R, --root CHROOT_MAPPE mappe som skal brukes til chroot\n"
+
+# , c-format
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: «%s» er et ugyldig gruppenavn\n"
+
+# , c-format
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: «%s» er en ugyldig gruppe-ID\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K krever NØKKEL=VERDI\n"
+
+# , c-format
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: gruppa «%s» finnes allerede\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s; GID «%lu» finnes allerede\n"
+
+#, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: Klarte ikke å sette opp oppryddingstjeneste.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+" -f, --force slett valgt gruppe selv om den er "
+"primærgruppe for en bruker\n"
+
+# , c-format
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: klarte ikke å fjerne oppføring «%s» fra %s\n"
+
+# , c-format
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: klarte ikke å fjerne hovedgruppe for bruker «%s».\n"
+
+# , c-format
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: gruppa «%s» finnes ikke\n"
+
+# , c-format
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: gruppe «%s» er en NIS-gruppe\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s er NIS-sjef\n"
+
+# , c-format
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: bruker «%s» er allerede medlem av «%s»\n"
+
+# , c-format
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: Minner er fullt. Klarte ikke å oppdatere %s.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Bruk: %s [valg] [handling]\n"
+"\n"
+"Valg:\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+" -g, --group gruppenavn endre gruppenavn i stedet for brukerens "
+"gruppe\n"
+" (bare root)\n"
+
+msgid "\n"
+msgstr "\n"
+
+msgid "Actions:\n"
+msgstr "Handlinger:\n"
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+" -a, --add brukernavn legg til brukernavn som medlem av valgt "
+"gruppe\n"
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr " -d, --delete brukernavn fjern brukernavn fra valgt gruppe\n"
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr ""
+" -p, --purge fjern ut alle medlemmer fra valgt gruppe\n"
+
+msgid " -l, --list list the members of the group\n"
+msgstr " -l, --list vis gruppemedlemmer\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: gruppenavnet samsvarer ikke med brukernavnet ditt\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s: bare root kan bruke valget -g/--group\n"
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr " -g, --gid GID endre gruppe-ID til GID\n"
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr " -n, --new-name NY_GRUPPE endre navnet til NY-GRUPPE\n"
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique tillat bruk av duplisert (ikke-unik) GID\n"
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+" -p, --password PASSORD endre passordet til valgt (kryptert)\n"
+" PASSORD\n"
+
+# , c-format
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: ugyldig gruppenavn «%s»\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: gruppa %s er en NIS-gruppe\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: ukjent bruker %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Bruk: %s [valg] [gruppe [gskygge]]\n"
+"\n"
+"Valg:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Bruk: %s [valg] [gruppe]\n"
+"\n"
+"Valg:\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+" -r, --read-only vis advarsler og feilmeldinger\n"
+" men ikke endre noen filer\n"
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr " -s, --sort sorter oppføringer etter UID\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s og -r passer ikke sammen\n"
+
+msgid "invalid group file entry"
+msgstr "ugyldig oppføring i gruppefil"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "vil du slette linje «%s»? "
+
+msgid "duplicate group entry"
+msgstr "duplisert gruppeoppføring"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "ugyldig gruppenavn «%s»\n"
+
+# , c-format
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "ugyldig gruppe-ID «%lu»\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "gruppe %s: ingen bruker %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "vil du slette medlem «%s»? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "fant ingen tilsvarende oppføring i %s\n"
+
+# , c-format
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "vil du legge til gruppe «%s» i %s? "
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"gruppe %s har en oppføring i %s, men passordfeltet i %s er ikke satt til "
+"«x»\n"
+
+msgid "invalid shadow group file entry"
+msgstr "ugyldig oppføring i skygge-gruppefil"
+
+msgid "duplicate shadow group entry"
+msgstr "duplisert skygge-gruppeoppføring"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "skygge-gruppe %s: ingen administrativ bruker %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "vil du slette administrativt medlem «%s»? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "skygge-gruppe %s: ingen bruker %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: filene er blitt oppdatert\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: ingen endringer\n"
+
+# , c-format
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: klarte ikke å slette %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Bruk: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Bruk: id\n"
+
+msgid " groups="
+msgstr " grupper="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+" -b, --before DAGER skriv ut bare lastlog-poster eldre enn "
+"DAGER\n"
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+" -C, --clear tøm lastlog-oppføring for en bruker (krever "
+"«-u»)\n"
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+" -S, --set endre lastlog til gjeldende tidspunkt "
+"(krever «-u»)\n"
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time DAGER skriv ut bare lastlog-poster nyere enn DAGER\n"
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr " -u, --user LOGIN skriv ut lastlog for valgt LOGIN\n"
+
+msgid "Username Port From Latest"
+msgstr "Brukernavn Port Fra Sist"
+
+msgid "Username Port Latest"
+msgstr "Brukernavn Port Sist"
+
+msgid "**Never logged in**"
+msgstr "**Aldri vært innlogget**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s: Klarte ikke å oppdatere oppføring for UID %lu\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s: klarte ikke å oppdatere lastlog-fil\n"
+
+#, c-format
+msgid "%s: Option -C cannot be used together with option -S\n"
+msgstr "%s: Du kan ikke kombinere valgene «-C» og «-S»\n"
+
+#, c-format
+msgid "%s: Options -C and -S require option -u to specify the user\n"
+msgstr "%s: Valgene «-C» og «-S» krever at du velger bruker med «-u»\n"
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Bruk: %s [-p] [navn]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h host] [-f navn]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r host\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr "oppsettsfeil – klarte ikke å tolke %s-verdi: «%d»"
+
+msgid "Invalid login time"
+msgstr "Ugyldig tidspunkt for innlogging"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Systemet stengt for rutinemessig vedlikehold"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Frakobling omgått - root-innlogging tillatt.]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr "%s: Kan umulig virke uten effektiv root\n"
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr "Ingen oppføring i utmp. Du må kjøre «login» fra «sh» på laveste nivå"
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Innlogging avbrutt på tid etter %u sekunder.\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM mislyktes, avbryter: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s login: "
+
+msgid "login: "
+msgstr "login: "
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Maks. antall forsøk er overskredet (%u)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: PAM ber om avbrytelse\n"
+
+msgid "Login incorrect"
+msgstr "Ugyldig innlogging"
+
+#, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "Fant ikke bruker (%s)\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s login: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: mislykket utspalting: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSTTY mislyktes på %s"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Advarsel: innlogging reaktivert etter midlertidig stenging."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Forrige login: %s på %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Forrige login: %.19s på %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " fra %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"innloggingstid overskredet\n"
+"\n"
+
+msgid "Usage: logoutd\n"
+msgstr "Bruk: logoutd\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: can't open group file\n"
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr "%s: klarte ikke å åpne gruppefil\n"
+
+# , c-format
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: klarte ikke å fjerne %s\n"
+
+# , c-format
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: klarte ikke å fjerne %s\n"
+
+# , c-format
+#, fuzzy, c-format
+#| msgid "%s: failed to unlock %s\n"
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: klarte ikke å låse opp %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to find tcb directory for %s\n"
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: fant ikke tcb-mappe for %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Failed to create tcb directory for %s\n"
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: Klarte ikke opprette tcb-mappe for %s\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Bruk: newgrp [-] [gruppe]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Bruk: sg group [[-c] command]\n"
+
+# , c-format
+#, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: klarte ikke å kryptere passord med tidligere salt: %s\n"
+
+msgid "Invalid password.\n"
+msgstr "Ugyldig passord.\n"
+
+# , c-format
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: mislykket utspalting: %s\n"
+
+# , c-format
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: GID «%lu» finnes ikke\n"
+
+msgid "too many groups\n"
+msgstr "for mange grupper\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+#, fuzzy
+#| msgid " -q, --quiet quiet mode\n"
+msgid " -b, --badnames allow bad names\n"
+msgstr " -q, --quiet stille modus\n"
+
+msgid " -r, --system create system accounts\n"
+msgstr " -r, --system lag systemkontoer\n"
+
+# , c-format
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: gruppa «%s» er en skyggegruppe, men finnes ikke i /etc/group\n"
+
+# , c-format
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: ugyldig bruker-ID «%s»\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: ugyldig brukernavn «%s»\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: linje %d: ugyldig linje\n"
+
+# , c-format
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: klarte ikke å oppdatere oppføring for bruker %s (ikke i passwd-"
+"databasen)\n"
+
+# , c-format
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: linje %d: klarte ikke å lage ny bruker\n"
+
+# , c-format
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: linje %d: klarte ikke å lage ny gruppe\n"
+
+# , c-format
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: linje %d: bruker «%s» finnes ikke i %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: linje %d: klarte ikke å oppdatere passord\n"
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: linje %d: mkdir %s mislyktes: %s\n"
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: linje %d: chown %s mislyktes: %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: linje %d: klarte ikke å oppdatere oppføring\n"
+
+# , c-format
+#, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: klarte ikke å lage ny %s-oppføring\n"
+
+# , c-format
+#, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: fant ikke underordnet bruker-rekkevidde\n"
+
+#, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: fant ikke underordnet gruppe-rekkevidde\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+" -a, --all rapporter passordstatus for alle kontoer\n"
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr " -d, --delete slett passord for valgt konto\n"
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+" -e, --expire tving utløp av passord for valgt konto\n"
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+" -k, --keep-tokens bare endre passord hvis det er utløpt\n"
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -i, --inactive INAKTIV endre passord til INAKTIV når det er utløpt\n"
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr " -L, --lock lås passord for den valgt konto\n"
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -n, --mindays DAGER endre minste antall dager før passord\n"
+" må endres til DAGER\n"
+
+msgid " -q, --quiet quiet mode\n"
+msgstr " -q, --quiet stille modus\n"
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr " -r, --repository LAGER endre passord i lageret LAGER\n"
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+" -S, --status rapporter passordstatus for valgt konto\n"
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr " -u, --unlock lås opp passordet for valgt konto\n"
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -w, --warndays VARSLE_DGR varsle om at kontoen går ut på dato når det "
+"er VARSLE_DGR igjen\n"
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -x, --maxdays DAGER endre maksimalt antall dager før passord\n"
+" må endres til DAGER\n"
+
+msgid "Old password: "
+msgstr "Gammelt passord: "
+
+# , c-format
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Skriv inn det nye passordet (minst %d tegn)\n"
+"Bruk en kombinasjon av store og små bokstaver, og tall.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Skriv inn det nye passordet (minst %d, høyst %d tegn)\n"
+"Bruk en kombinasjon av store og små bokstaver, og tall.\n"
+
+msgid "New password: "
+msgstr "Nytt passord: "
+
+msgid "Try again."
+msgstr "Prøv igjen."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Advarsel: svakt passord (skriv det inn igjen for å bruke det likevel)."
+
+msgid "They don't match; try again.\n"
+msgstr "Passordene var ikke like. Prøv igjen.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Passord for %s kan ikke endres.\n"
+
+# , c-format
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Passord for %s kan ikke endres enda.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: om passordet låses opp dannes en konto uten passord.\n"
+"Du bør velge passord med usermod -p for å låse opp passordet for denne "
+"kontoen.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: ikke støtte for lager %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not authorized to change the password of %s\n"
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr "%s: %s har ikke rett til å endre passord for %s\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Du kan ikke vise eller endre passordinformasjon for %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Endrer passordet for %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Passordet for %s er uendret.\n"
+
+#, c-format
+msgid "%s: password changed.\n"
+msgstr "%s: passordet er endret.\n"
+
+#, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "%s: informasjon om utløp av passord er endret.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Bruk: %s [valg] [passord]\n"
+"\n"
+"Valg:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Bruk: %s [valg] [passord] [skygge]\n"
+"\n"
+"Valg:\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr " -q, --quiet meld fra bare om feil\n"
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+"%s: det er ikke tillatt med alternativ skyggefil når USE_TCB er slått på.\n"
+
+msgid "invalid password file entry"
+msgstr "ugyldig oppføring i passordfil"
+
+msgid "duplicate password entry"
+msgstr "duplisert oppføring i passordfil"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "ugyldig brukernavn «%s»\n"
+
+# , c-format
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "ugyldig bruker-ID «%lu»\n"
+
+# , c-format
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "bruker «%s»: ingen gruppe %lu\n"
+
+# , c-format
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "bruker «%s»: mappe «%s» finnes ikke\n"
+
+# , c-format
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "bruker «%s»: programmet «%s» finnes ikke\n"
+
+#, c-format
+msgid "no tcb directory for %s\n"
+msgstr "ingen tcb-mappe for %s\n"
+
+#, c-format
+msgid "create tcb directory for %s?"
+msgstr "vil du lage tcb-mappe for %s?"
+
+#, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "klarte ikke å lage tcb-mappe for %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: klarte ikke å låse %s.\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "fant ingen tilsvarende passordoppføring i %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "vil du legge til bruker «%s» i %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"bruker %s har en oppføring i %s, men passordfeltet i %s er ikke satt til "
+"«x»\n"
+
+msgid "invalid shadow password file entry"
+msgstr "ugyldig oppføring i skygge-passordfil"
+
+msgid "duplicate shadow password entry"
+msgstr "duplisert oppføring i skygge-passordfil"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "bruker %s: siste passordendring i fremtiden\n"
+
+# , c-format
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: klarte ikke å sortere oppføringer i %s\n"
+
+#, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: fungerer ikke når tcb er slått på\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: klarte ikke endre rettigheter på %s til 0600\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "NEKTET tilgang til su til den kontoen.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Passordautentisering forbi-koblet.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Skriv inn ditt EGET passord for å autentisere deg.\n"
+
+#, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: Klarte ikke å spalte ut brukerskall\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr "%s: funksjonsfeil ved signal\n"
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr "%s: funksjonsfeil ved signalmasking\n"
+
+msgid "Session terminated, terminating shell..."
+msgstr "Økt avsluttet, avslutter skall ..."
+
+#, c-format
+msgid " ...killed.\n"
+msgstr " … drept.\n"
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr " ... venter på at barneprosess avslutter.\n"
+
+msgid " ...terminated.\n"
+msgstr " … avsluttet.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: su [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
+#| " -h, --help display this help message and exit\n"
+#| " -, -l, --login make the shell a login shell\n"
+#| " -m, -p,\n"
+#| " --preserve-environment do not reset environment variables, and\n"
+#| " keep the same shell\n"
+#| " -s, --shell SHELL use SHELL instead of the default in "
+#| "passwd\n"
+#| "\n"
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"Bruk: su [valg] [konto]\n"
+"\n"
+"Valg:\n"
+" -c, --command KOMMANDO send valgt KOMMANDO til skall som starter\n"
+" -h, --help vis denne hjelpeteksten og avslutt\n"
+" -, -l, --login gjør nytt skall til en login-skall\n"
+" -m, -p,\n"
+" --preserve-environment ikke endre miljøvariabler, og behold\n"
+" samme skall\n"
+" -s, --shell SKALL bruk valgt SKALL i stedet for standardskall "
+"i passwd\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ignorert)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Du har ikke adgang til å utføre su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Skriv inn ditt eget passord)"
+
+# , c-format
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: Autentisering mislyktes\n"
+
+# , c-format
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s: Du har ikke adgang til å su på den tiden\n"
+
+#, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "Ingen oppføring for bruker «%s» i passordfil\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: må kjøres fra en terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: feil %d\n"
+
+#, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: Klarte ikke å slippe den styrende terminalen\n"
+
+#, c-format
+msgid "Cannot execute %s\n"
+msgstr "Klarte ikke å kjøre %s\n"
+
+msgid "No password file"
+msgstr "Ingen passordfil"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSTTY mislyktes"
+
+msgid "No password entry for 'root'"
+msgstr "Ingen oppføring for «root» i passordfil"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Bruk control-d for å fortsette med normal oppstart,\n"
+"(eller skriv inn root passordet for å starte maskinen i vedlikeholdsmodus):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Starter systemvedlikeholds-modus"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr "%s: %s ble opprettet, men ikke fjernet\n"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr "%s: oppsettet for %s i %s blir ignorert\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: klarte ikke å opprette ny forvalg-fil\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: klarte ikke å opprette ny forvalg-fil\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: klarte ikke å åpne ny frovalg-fil\n"
+
+#, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: for lang linje i %s: %s ..."
+
+#, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: Klarte ikke å lage sikkerhetskopi-fil (%s): %s\n"
+
+#, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: gi nytt navn: %s: %s\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: gruppe «%s» er en NIS-gruppe.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: for mange grupper (maks %d).\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Bruk: %s [valg] LOGIN\n"
+" %s -D\n"
+" %s -D [valg]\n"
+"\n"
+"Valg:\n"
+
+#, fuzzy
+#| msgid " -s, --shadow edit shadow or gshadow database\n"
+msgid " --badnames do not check for bad names\n"
+msgstr " -s,--shadow rediger shadow eller gshadow-database\n"
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+" -b, --base-dir BASIS basismappe for hjemmemappa til den\n"
+" nye kontoen\n"
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr " -c, --comment KOMMENTAR GECOS-feltet for den nye kontoen\n"
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr " -d, --home-dir HJEMMEMAPPE hjemmemappe for den nye kontoen\n"
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+" -D, --defaults skriv ut eller endre standard useradd-"
+"oppsett\n"
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr " -e --expiredate UTLØPSDATO utløpsdato for den nye kontoen\n"
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+" -f, --inactive INAKTIVE hvor lenge et passord kan brukes etter "
+"utløp\n"
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+" -g, --gid GRUPPE navn eller ID for primærgruppe for den nye "
+"kontoen\n"
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+" -G, --groups GRUPPER liste over ekstra GRUPPER for den nye "
+"kontoen\n"
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr " -k, --skel SKEL_DIR bruk denne alternative skjelettmappa\n"
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+" -l, --no-log-init ikke legg til brukeren i databasene lastlog "
+"og faillog\n"
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr " -m, --create-home lag hjemmemappe\n"
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr " -M, --no-create-home ikke lag hjemmemappe\n"
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+" -N, --no-user-group ikke lag en gruppe med samme navn som "
+"brukeren\n"
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique tillat brukere med dupliserte (ikke-unike) "
+"UID-er\n"
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr " -p, --password PASSORD kryptert passord for den nye kontoen\n"
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr " -s, --shell SHELL innloggingsskall for den nye kontoen\n"
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr " -u, --uid UID bruker-ID for den nye kontoen\n"
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+" -U, --user-group lag en gruppe med samme navn som brukeren\n"
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+" -Z, --selinux-user SEBRUKER bruk en bestemt bruker SEBRUKER for "
+"SELinux brukeravbildning\n"
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: ugyldig basismappe «%s»\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: ugyldig kommentar «%s»\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: ugyldig hjemmemappe «%s»\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: skyggepassord kreves for -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: skyggepassord kreves for -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: ugyldig felt «%s»\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: ugyldig skall «%s»\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Warning: %s is not executable\n"
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: Advarsel: %s er ikke kjørbar\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Option -C cannot be used together with option -S\n"
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s: Du kan ikke kombinere valgene «-C» og «-S»\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr "%s: -Z krever kjerne som har SELinux slått på\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr "%s: klarte ikke nullstille faillog-oppføring for UID %lu: %s\n"
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr "%s: klarte ikke nullstille lastlog-oppføring for UID %lu: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s: klarte ikke nullstille faillog-oppføring for UID %lu: %s\n"
+
+# , c-format
+#, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: klarte ikke å forberede ny %s-oppføring\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error updating files\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: feil under oppdatering av filer\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: klarte ikke å opprette mappa %s\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s home directory (%s) not found\n"
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: fant ikke hjemmemappe for %s (%s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to allocate memory: %s\n"
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "%s: klarte ikke å tildele minne: %s\n"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: klarte ikke å opprette mappa %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: linje %d: chown %s mislyktes: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: linje %d: chown %s mislyktes: %s\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "Lager e-postkassefil"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr "Fant ikke gruppa «mail». Oppretter e-postkassefil med modus 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Endrer rettigheter for e-postkassefil"
+
+# , c-format
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: bruker «%s» finnes fra før\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: gruppa %s finnes - hvis du vil legge til denne brukeren til denne "
+"gruppa, bruk -g.\n"
+
+# , c-format
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: klarte ikke å lage ny bruker\n"
+
+# , c-format
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %lu er ikke entydig\n"
+
+#, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: Klarte ikke opprette tcb-mappe for %s\n"
+
+# , c-format
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: klarte ikke å lage ny gruppe\n"
+
+# , c-format
+#, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: klarte ikke å lage underordnede bruker-id-er\n"
+
+# , c-format
+#, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: klarte ikke å lage underordnede gruppe-id-er\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: advarsel: hjemmemappa finnes fra før.\n"
+"Kopierer ikke filer dit fra skel-mappa.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+"%s: advarsel: klarte ikke å avbilde brukernavn %s til %s SELinux-bruker.\n"
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+" -f, --force fjern filer «med makt»,\n"
+" selv om brukeren ikke eier dem\n"
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr " -r, --remove fjern hjemmemappe og e-postlager\n"
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+" -Z, --selinux-user fjern SELinux avbildninger for brukeren\n"
+
+# , c-format
+#, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr ""
+"%s: gruppa %s ikke fjernet fordi den ikke er hovedgruppa til bruker %s.\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr "%s: gruppa %s ble ikke fjernet fordi den har andre medlemmer.\n"
+
+# , c-format
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: gruppa %s er en primærgruppe for en annen bruker og blir ikke fjernet.\n"
+
+# , c-format
+#, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "%s: klarte ikke å fjerne oppføring %lu fra %s\n"
+
+#, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: fant ikke %s e-postlager (%s).\n"
+
+# , c-format
+#, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: advarsel: klarte ikke å fjerne %s: %s\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s ikke eid av %s, ikke fjernet\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+"%s: Klarte ikke å tildele minne, tcb-oppføring for %s er ikke fjernet.\n"
+
+#, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: Klarte ikke å minske privilegier: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: Klarte ikke å fjerne innhold fra %s: %s\n"
+
+# , c-format
+#, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: Klarte ikke å fjerne tcb-filer for %s: %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: bruker %s er en NIS-bruker\n"
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: fant ikke hjemmemappe for %s (%s)\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: fjerner ikke mappa %s (det ville fjerne hjemmemappa til bruker %s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: feil ved fjerning av mappe %s\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: feil ved fjerning av mappe %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+"%s: advarsel: klarte ikke å fjerne avbildning av brukernavn %s til SELinux-"
+"bruker.\n"
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr " -c, --comment KOMMENTAR ny verdi for GECOS-feltet\n"
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr " -d, --home HJEMMEMAPPE ny hjemmemappe for brukerkontoen\n"
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr " -e, --expiredate UTLØPSDATO endre UTLØPSDATO for konto\n"
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -f, --inactive INAKTIV endre passord til INAKTIV når kontoen er "
+"utløpt\n"
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr " -g, --gid GRUPPE bruk GRUPPE som ny primærgruppe\n"
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr " -G, --groups GRUPPER ny liste over ekstra GRUPPEr\n"
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+" -a, --append legg til brukeren i de ekstra gruppene "
+"listet i \n"
+" valget -G option uten å fjerne ham/henne\n"
+" fra andre grupper\n"
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr " -l, --login NY_LOGIN ny verdi for login-navnet\n"
+
+msgid " -L, --lock lock the user account\n"
+msgstr " -L, --lock lås brukerkontoen\n"
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+" -m, --move-home flytt innholdet i hjemmemappa til det nye stedet\n"
+" (brukes bare med -d)\n"
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique tillat bruk av dupliserte (ikke-unike) UID-"
+"er\n"
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+" -p, --password PASSWORD bruk kryptert passord for det nye passordet\n"
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr " -u, --uid UID ny UID for brukerkontoen\n"
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr " -U, --unlock lås opp brukerkontoen\n"
+
+msgid " -v, --add-subuids FIRST-LAST add range of subordinate uids\n"
+msgstr ""
+" -v, --add-subuids FIRST-LAST legg til rekkevidde av underordnede UID-er\n"
+
+msgid " -V, --del-subuids FIRST-LAST remove range of subordinate uids\n"
+msgstr ""
+" -V, --del-subuids FIRST-LAST fjern rekkevidde av underordnede UID-er\n"
+
+msgid " -w, --add-subgids FIRST-LAST add range of subordinate gids\n"
+msgstr ""
+" -w, --add-subgids FIRST-LAST legg til rekkevidde av underordnede GID-er\n"
+
+msgid " -W, --del-subgids FIRST-LAST remove range of subordinate gids\n"
+msgstr ""
+" -W, --del-subgids FIRST-LAST fjern rekkevidde av underordnede GID-er\n"
+
+msgid ""
+" -Z, --selinux-user SEUSER new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+" -Z, --selinux-user SEUSER ny SELinux brukeravbildning for "
+"brukerkontoen\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: om brukerens passord låses opp oppstår det en passordløs konto.\n"
+"For å låse opp denne brukerens passord bør du bruke usermod -p.\n"
+
+# , c-format
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: bruker «%s» finnes fra før i %s\n"
+
+#, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: underordnet uid-rekkevidde «%s» er ugyldig\n"
+
+#, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: underordnet gid-rekkevidde «%s» er ugyldig\n"
+
+# , c-format
+#, c-format
+msgid "%s: no options\n"
+msgstr "%s: ingen valg\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: valgene -L, -p og -U utelukker hverandre\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: skyggepassord kreves for -e og -f\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: UID «%lu» finnes fra før\n"
+
+#, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr "%s: %s finnes ikke. Du kan ikke bruke valgene %s eller %s\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: mappa %s finnes\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+"%s: Forrige hjemmemappe (%s) var ikke en mappe. Den er ikke fjernet og ingen "
+"hjemmemaper er opprettet.\n"
+
+#, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: Klarte ikke å endre eierskap til hjemmemappe"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: advarsel: klarte ikke å fjerne gammel hjemmemappa %s fullstendig"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: klarte ikke å endre navn på mappa %s til %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: klarte ikke å kopiere lastlog-oppføring for bruker %lu til bruker %lu: "
+"%s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: klarte ikke å kopiere faillog-oppføring for bruker %lu til bruker %lu: "
+"%s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: advarsel: %s er ikke eid av %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "klarte ikke å endre eier av e-postboks"
+
+msgid "failed to rename mailbox"
+msgstr "klarte ikke å gi nytt navn til e-postboks"
+
+# , c-format
+#, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s: klarte ikke å fjerne uid-rekkevidde %lu-%lu fra «%s»\n"
+
+# , c-format
+#, fuzzy, c-format
+#| msgid "%s: failed to add uid range %lu-%lu from '%s'\n"
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s: klarte ikke å legge til uid-rekkevidde %lu-%lu fra «%s»\n"
+
+# , c-format
+#, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s: klarte ikke å fjerne gid-rekkevidde %lu-%lu fra «%s»\n"
+
+# , c-format
+#, fuzzy, c-format
+#| msgid "%s: failed to add gid range %lu-%lu from '%s'\n"
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s: klarte ikke å legge til gid-rekkevidde %lu-%lu fra «%s»\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Du har endret %s.\n"
+"Det kan være du må endre %s for sammenhengen.\n"
+"Bruk kommandoen «%s» til dette.\n"
+
+msgid " -g, --group edit group database\n"
+msgstr " -g, --group rediger group-database\n"
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr " -p, --passwd rediger passwd-database\n"
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr " -s,--shadow rediger shadow eller gshadow-database\n"
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr " -u, --user hvilken brukers tcb skyggefil skal redigeres\n"
+
+# , c-format
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: klarte ikke å fjerne %s\n"
+
+# , c-format
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: %s er ikke endret\n"
+
+msgid "failed to create scratch directory"
+msgstr "klarte ikke å lage ny kladdemappe"
+
+msgid "failed to drop privileges"
+msgstr "klarte ikke å fjerne privilegier"
+
+msgid "Couldn't get file context"
+msgstr "Fant ikke filkontekst"
+
+msgid "setfscreatecon () failed"
+msgstr "setfscreatecon () mislyktes"
+
+msgid "failed to gain privileges"
+msgstr "klarte ikke skaffe privile"
+
+msgid "Couldn't lock file"
+msgstr "Klarte ikke å låse fil"
+
+msgid "Couldn't make backup"
+msgstr "Klarte ikke å lage sikkerhetskopi"
+
+#, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s: %s: %s\n"
+
+#, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr "%s: %s avsluttet med status %d\n"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr "%s: %s drept med signal %d\n"
+
+msgid "failed to open scratch file"
+msgstr "klarte ikke å åpne kladdefil"
+
+# , c-format
+msgid "failed to unlink scratch file"
+msgstr "klarte ikke å avlenke kladdfil"
+
+msgid "failed to stat edited file"
+msgstr "klarte ikke å kjøre «stat» på redigert fil"
+
+msgid "failed to allocate memory"
+msgstr "klarte ikke å tildele minne"
+
+msgid "failed to create backup file"
+msgstr "klarte ikke å lage sikkerhetskopi-fil"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: klarte ikke å gjenopprette %s: %s (endringer ligger i %s)\n"
+
+#, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: fant ikke tcb-mappe for %s\n"
+
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Bruk: %s [input]\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "malloc(%d) mislyktes\n"
+
+#~| msgid ""
+#~| "Usage: chage [options] [LOGIN]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -d, --lastday LAST_DAY set last password change to LAST_DAY\n"
+#~| " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -l, --list show account aging information\n"
+#~| " -m, --mindays MIN_DAYS set minimum number of days before "
+#~| "password\n"
+#~| " change to MIN_DAYS\n"
+#~| " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~| "password\n"
+#~| " change to MAX_DAYS\n"
+#~| " -W, --warndays WARN_DAYS set expiration warning days to "
+#~| "WARN_DAYS\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bruk: chage [valg] [bruker]\n"
+#~ "\n"
+#~ "Valg:\n"
+#~ " -d, --lastday SISTE_DAG angi at siste passord-endring skjedde "
+#~ "SISTE_DAG\n"
+#~ " -E, --expiredate UTLØPSDATO angi at kontoen utløper UTLØPSDATO\n"
+#~ " -h, .--help vis denne hjelpeteksten og avslutt\n"
+#~ " -I, --inaktive INAKTIV passordet blir inaktivt når det utløper\n"
+#~ " -l, --list vis informasjon om kontoens aldring og "
+#~ "utløp\n"
+#~ " m, --mindays DAGER passordet kan ikke endres før valgt antall\n"
+#~ " DAGER\n"
+#~ " M, --maxdays DAGER passordet må endres innen\n"
+#~ " valgt antall DAGER\n"
+#~ " -W, --warndays DAGER varsle bruker etter valgt antall DAGER om at\n"
+#~ " passordet snart utløper\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: PAM autentisering mislyktes\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "Bruk: %s [-f fullt_navn] [-r rom_nr] [-w jobbtlf]\n"
+#~ "\t[-h hjemmetlf] [-o annet] [bruker]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr "Bruk: %s [-f fullt_navn] [-r rom_nr] [-w jobbtlf] [-h hjemmetlf]\n"
+
+# , c-format
+#~| msgid ""
+#~| "Usage: %s [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -c, --crypt-method the crypt method (one of %s)\n"
+#~| " -e, --encrypted supplied passwords are encrypted\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -m, --md5 encrypt the clear text password using\n"
+#~| " the MD5 algorithm\n"
+#~| "%s\n"
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Bruk: %s [valg]\n"
+#~ "\n"
+#~ "Valg:\n"
+#~ " -c, --crypt-method krypteringsmetode (en av %s)\n"
+#~ " -e, --encrypted passord som blir skrevet inn er allerede "
+#~ "kryptert\n"
+#~ " h, --help vis denne hjelpeteksten og avslutt\n"
+#~ " -m, --md5 krypter klartekst-passord med\n"
+#~ " algoritmen MD5\n"
+
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bruk: chsh [valg] LOGIN\n"
+#~ "\n"
+#~ "Valg:\n"
+#~ " -h, --help vis denne meldingen og avslutt\n"
+#~ " -s, --shell SKALL nytt innloggingsskall for brukerkontoen\n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "Bruk: expiry {-f|-c}\n"
+
+#~| msgid "faillog: Failed to get the entry for UID %d\n"
+#~ msgid "faillog: Failed to get the entry for UID %lu\n"
+#~ msgstr "faillog: fant ikke oppføring for UID %d\n"
+
+# , c-format
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "faillog: Klarte ikke å åpne %s:%s\n"
+
+#~ msgid "faillog: Cannot get the size of %s: %s\n"
+#~ msgstr "faillog: Fant ikke størrelse av %s: %s\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "Bruk: groupdel gruppe\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "Bruk: %s [-r] [-s] [gruppe [gshadow]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "Bruk: %s [-r] [-s] [gruppe]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: du kan ikke kombinere valgene -s og -r\n"
+
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "Bruk: grpconv\n"
+
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "Bruk: grpunconv\n"
+
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bruk: lastlog [valg]\n"
+#~ "\n"
+#~ "Valg:\n"
+#~ " -b, --before DAGER skriv bare oppføringer eldre enn DAGER\n"
+#~ " -h, --help vis denne hjelpeteksten og avslutt\n"
+#~ " -t, --time DAGER skriv bare oppføringer nyere enn DAGER\n"
+#~ " -u, --user BRUKER skriv oppføringer for bruker BRUKER\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bruk: passwd [valg] [bruker]\n"
+#~ "\n"
+#~ "Valg:\n"
+#~ " -a, --all rapporter passordstatus for alle kontoer\n"
+#~ " -d, --delete slett passordet for valgt konto\n"
+#~ " -e, --expire angi at passordet for konten er utgått\n"
+#~ " -h, --help vis denne hjelpeteksten og avslutt\n"
+#~ " -k, --keep-tokens endre passord bare hvis utgått\n"
+#~ " -i, --inactive INAKTIV set passord inaktivt etter utløp til "
+#~ "INAKTIV\n"
+#~ " -l, --lock lås valgt konto\n"
+#~ " -n, --mindays MIN_DAGER angi at passord ikke kan endres før "
+#~ "etter\n"
+#~ " MIN_DAGER\n"
+#~ " -q, --quiet ordknapp kjøremåte\n"
+#~ " -r, --repository LAGER endre passord i lageret LAGER\n"
+#~ " -S, --status rapporter passordstatus på valgt konto\n"
+#~ " -u, .--unlock lås opp valgt konto\n"
+#~ " -w, --warndays DAGER varsle om utgått passord DAGER før utløp\n"
+#~ " -x, --maxdays MAX_DAGER passordet må endres før det er gått "
+#~ "MAX_DAGER\n"
+#~ "\n"
+
+#~| msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr "Bruk: %s [-q] [-r] [-s] [passord [shadow]]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr "Bruk: %s [-q] [-r] [-s] [passord [shadow]]\n"
+
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "Bruk: pwconv\n"
+
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "Bruk: pwunconv\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "Ukjent id: %s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "Mangler skall\n"
+
+#~ msgid ""
+#~ "Usage: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force removal of files,\n"
+#~ " even if not owned by user\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -r, --remove remove home directory and mail spool\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bruk: userdel [valg] LOGIN\n"
+#~ "\n"
+#~ "Valg:\n"
+#~ " -f, --force slett filer, selv om det ikke er\n"
+#~ " brukeren som eier dem\n"
+#~ " -h, --help vis denne meldingen og avslutt\n"
+#~ " -r, --remove slett hjemmemappa og postkassa\n"
+#~ "\n"
+
+#~| msgid ""
+#~| "Usage: usermod [options] LOGIN\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -c, --comment COMMENT new value of the GECOS field\n"
+#~| " -d, --home HOME_DIR new home directory for the user account\n"
+#~| " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -g, --gid GROUP force use GROUP as new primary group\n"
+#~| " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~| " -a, --append append the user to the supplemental "
+#~| "GROUPS\n"
+#~| " mentioned by the -G option without "
+#~| "removing\n"
+#~| " 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"
+#~| " -m, --move-home move contents of the home directory to "
+#~| "the\n"
+#~| " new location (use only with -d)\n"
+#~| " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~| " -p, --password PASSWORD use encrypted password for the new "
+#~| "password\n"
+#~| " -s, --shell SHELL new login shell for the user account\n"
+#~| " -u, --uid UID new UID for the user account\n"
+#~| " -U, --unlock unlock the user account\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Bruk: usermod [valg] konto\n"
+#~ "\n"
+#~ "Valg:\n"
+#~ " -a, --append legg til bruker i tilleggsgruppene "
+#~ "GRUPPER\n"
+#~ " nevnt i valget -G uten å fjerne "
+#~ "ham/henne fra\n"
+#~ " andre grupper\n"
+#~ " -c, --comment KOMMENTAR ny verdi i GECOS-feltet\n"
+#~ " -d, --home HJEMME hjemmemappe for den nye kontoen\n"
+#~ " -e, --expiredate DATO kontoen utgår på datoen DATE\n"
+#~ " -f, --inactive INAKTIV passordet settes inaktivt etter utløp\n"
+#~ " -g, --gid GRUPPE bruk GRUPPE som ny primærgruppe\n"
+#~ " -G, --groups GRUPPER ny liste over tilleggsgrupper\n"
+#~ " -h, --help vis denne hjelpeteksten og avslutt\n"
+#~ "\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s: ingen flagg oppgitt\n"
+
+#~| msgid ""
+#~| "Usage: vipw [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -g, --group edit group database\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -p, --passwd edit passwd database\n"
+#~| " -q, --quiet quiet mode\n"
+#~| " -s, --shadow edit shadow or gshadow database\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group edit group database\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -p, --passwd edit passwd database\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow edit shadow or gshadow database\n"
+#~ " -u, --user which user's tcb shadow file to edit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bruk: vipw [valg]\n"
+#~ "\n"
+#~ "Valg:\n"
+#~ " -g, --group rediger gruppedatabasen\n"
+#~ " -h, --help vis denne hjelpeteksten og avslutt\n"
+#~ " -p, --passwd rediger passwd-databasen\n"
+#~ " -q., --quiet ordknapp kjøremåte\n"
+#~ " -s, --shadow rediger shadow- eller gshadow-databasen\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: %s [option] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --add USER add USER to GROUP\n"
+#~ " -d, --delete USER remove USER from GROUP\n"
+#~ " -r, --remove-password remove the GROUP's password\n"
+#~ " -R, --restrict restrict access to GROUP to its members\n"
+#~ " -M, --members USER,... set the list of members of GROUP\n"
+#~ "%s\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bruk: %s [option] GRUPPE\n"
+#~ "\n"
+#~ "Valg:\n"
+#~ " -a, --add BRUKER legg til BRUKER i GRUPPE\n"
+#~ " -d, --delete BRUKER fjern BRUKER fra GRUPPE\n"
+#~ " -r, --remove-password fjern GRUPPEs passord\n"
+#~ " -R, --restrict tilgang til GRUPPE bare for "
+#~ "medlemmer\n"
+#~ " -M, --members BRUKER – oppgi lista over medlemmer i GRUPPE\n"
+#~ "%s\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmems [options] [action]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group groupname change groupname instead of the user's "
+#~ "group\n"
+#~ " (root only)\n"
+#~ "\n"
+#~ "Actions:\n"
+#~ " -a, --add username add username to the members of the group\n"
+#~ " -d, --delete username remove username from the members of the "
+#~ "group\n"
+#~ " -p, --purge purge all members from the group\n"
+#~ " -l, --list list the members of the group\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Brul: groupmems [valg] [handling]\n"
+#~ "\n"
+#~ "Valg:\n"
+#~ " -g, --group gruppenavn endre gruppenavn i stedet for brukerens "
+#~ "gruppe\n"
+#~ " (bare root)\n"
+#~ "\n"
+#~ "Handlinger:\n"
+#~ " -a, --add brukernavn legg til brukernavn til medlemmer av "
+#~ "gruppa\n"
+#~ " -d, --delete brukernavn fjern brukernavn fra medlemmer av "
+#~ "gruppa\n"
+#~ " -p, --purge slett alle medlemmer av gruppa\n"
+#~ " -l, --list list opp medlemmer av gruppa\n"
+#~ "\n"
+
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Bruk: %s [input]\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s: klarte ikke å lage %s\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s: klarte ikke å chown %s\n"
+
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all display faillog records for all users\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -l, --lock-time SEC after failed login lock account to SEC "
+#~ "seconds\n"
+#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
+#~ " -r, --reset reset the counters of login failures\n"
+#~ " -t, --time DAYS display faillog records more recent than "
+#~ "DAYS\n"
+#~ " -u, --user LOGIN display faillog record or maintains "
+#~ "failure\n"
+#~ " counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ " options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bruk: faillog [valg]\n"
+#~ "\n"
+#~ "Valg:\n"
+#~ " -a, --all vis faillog-oppføringer for alle brukere\n"
+#~ " -h, --help vis denne hjelpeteksten og avslutt\n"
+#~ " -l, --lock-time SEK etter mislykket innlogging, lås kontoen\n"
+#~ " i SEK sekunder\n"
+#~ " -m, --maximum MAX endre største antall mislykte "
+#~ "innlogginger\n"
+#~ " til MAX\n"
+#~ " -r, --reset nullstill tellerne for mislykte "
+#~ "innlogginger\n"
+#~ " -t, --time DAGER vis mislykte innlogginger nyere enn "
+#~ "DAGER\n"
+#~ " -u, --user BRUKER vis mislykte innlogginger eller styr\n"
+#~ " tellene og grenseverdiene (med -r, -m\n"
+#~ " eller -l) bare for bruker BRUKER\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force exit with success status if the\n"
+#~ " specified group already exists\n"
+#~ " -g, --gid GID use GID for the new group\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique allow create group with duplicate\n"
+#~ " (non-unique) GID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new group\n"
+#~ " -r, --system create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bruk: groupadd [valg] GRUPPE\n"
+#~ "\n"
+#~ "Valg:\n"
+#~ " -f, --force tving fram normal avslutning hvis den\n"
+#~ " oppgitte gruppa finnes fra før\n"
+#~ " -g, --gid GID bruk GID for den nye gruppa\n"
+#~ " -h, --help vis denne hjelpeteksten og avslutt\n"
+#~ " -K, --key NØKKEL=VERDI overstyrer standardverdier\n"
+#~ " fra /etc/login.defs\n"
+#~ " -o, --non-unique tillat grupper med duplisert\n"
+#~ " GID\n"
+#~ " -p, --password PASSORD bruk kryptert passord for den nye gruppa\n"
+#~ " -r, --system lag en systemkonto\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --gid GID force use new GID by GROUP\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bruk: groupmod [valg] gruppe\n"
+#~ "\n"
+#~ "Valg:\n"
+#~ " -g, --gid GID bruk GID for den nye gruppa\n"
+#~ " -h, --help vis denne hjelpeteksten og avslutt\n"
+#~ " -n, --new-name NY_GRUPPE tving fram nytt navn NY_GRUPPE\n"
+#~ " på GRUPPE\n"
+#~ " -o, --non-unique tillat grupper med duplisert\n"
+#~ " GID\n"
+#~ " -p, --password PASSORD bruk kryptert passord som nytt passord\n"
+#~ "\n"
+
+#~| msgid ""
+#~| "Usage: useradd [options] LOGIN\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~| " home directory\n"
+#~| " -c, --comment COMMENT set the GECOS field for the new user "
+#~| "account\n"
+#~| " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~| " -D, --defaults print or save modified default useradd\n"
+#~| " configuration\n"
+#~| " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -g, --gid GROUP force use GROUP for the new user "
+#~| "account\n"
+#~| " -G, --groups GROUPS list of supplementary groups for the "
+#~| "new\n"
+#~| " user account\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~| " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~| " -l, --no-log-init do not add the user to the lastlog and\n"
+#~| " faillog databases\n"
+#~| " -m, --create-home create home directory for the new user\n"
+#~| " account\n"
+#~| " -M, --no-create-home do not create user's home directory\n"
+#~| " (overrides /etc/login.defs)\n"
+#~| " -N, --no-user-group do not create a group with the same name "
+#~| "as\n"
+#~| " the user\n"
+#~| " -o, --non-unique allow create user with duplicate\n"
+#~| " (non-unique) UID\n"
+#~| " -p, --password PASSWORD use encrypted password for the new user\n"
+#~| " account\n"
+#~| " -r, --system create a system account\n"
+#~| " -s, --shell SHELL the login shell for the new user "
+#~| "account\n"
+#~| " -u, --uid UID force use the UID for the new user "
+#~| "account\n"
+#~| " -U, --user-group create a group with the same name as the "
+#~| "user\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~ " home directory\n"
+#~ " -c, --comment COMMENT set the GECOS field for the new user "
+#~ "account\n"
+#~ " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~ " -D, --defaults print or save modified default useradd\n"
+#~ " configuration\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP for the new user account\n"
+#~ " -G, --groups GROUPS list of supplementary groups for the new\n"
+#~ " user account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -l, --no-log-init do not add the user to the lastlog and\n"
+#~ " faillog databases\n"
+#~ " -m, --create-home create home directory for the new user\n"
+#~ " account\n"
+#~ " -M, --no-create-home do not create user's home directory\n"
+#~ " (overrides /etc/login.defs)\n"
+#~ " -N, --no-user-group do not create a group with the same name "
+#~ "as\n"
+#~ " the user\n"
+#~ " -o, --non-unique allow create user with duplicate\n"
+#~ " (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new user\n"
+#~ " account\n"
+#~ " -r, --system create a system account\n"
+#~ " -s, --shell SHELL the login shell for the new user account\n"
+#~ " -u, --uid UID force use the UID for the new user "
+#~ "account\n"
+#~ " -U, --user-group create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Bruk: useradd [valg] KONTO\n"
+#~ "\n"
+#~ "Valg:\n"
+#~ " -b, --base-dir BASIS basis-mappe for hjemmemappa til den nye\n"
+#~ " brukerkontoen\n"
+#~ " -c, --comment KOMMENTAR endre i GECOS-feltet for den nye\n"
+#~ " brukerkontoen\n"
+#~ " -d, --home-dir HJEMME hjemmemappe for den nye brukerkontoen\n"
+#~ " -D, --defaults skriv ut eller lagre endret "
+#~ "standardoppsett\n"
+#~ " for useradd\n"
+#~ " -e, --expiredate DATO angi at kontoen utgår på DATO\n"
+#~ " -f, --inactive INAKTIV endre passordet inaktivt etter utløp til "
+#~ "INAKTIV\n"
+#~ " -g, --gid GRUPPE angi GRUPPE for den nye brukerkontoen\n"
+#~ " -h, --help vis denne hjelpeteksten og avslutt\n"
+#~ " -k, --skel SKJELETT oppgi en annen skel-mappe\n"
+#~ " -K, --key NØKKEL=VERDI overstyrer oppsett fra /etc/login.defs\n"
+#~ " -m, --create-home lag hjemmemappe for den nye "
+#~ "brukerkontoen\n"
+#~ " -M, --no-create-home ikke lag hjemmemappe for den nye \n"
+#~ " brukeren (overstyrer /etc/login.defs)\n"
+#~ " -N, --no-user-group ikke lag en gruppe med samme navn som\n"
+#~ " brukeren -o, --non-"
+#~ "unique tillat brukere med duplisert UID\n"
+#~ " -p, --password PASSORD bruk dette krypterte passordet for\n"
+#~ " den nye brukerkontoen\n"
+#~ " -s, --shell SKALL innloggingsskall for den nye "
+#~ "brukerkontoen\n"
+#~ " -u, --uid UID bruk UID for den nye brukerkontoen\n"
+#~ " -U, --user-group lag en gruppe med samme navn som\n"
+#~ " brukeren\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: %s [options] [input]\n"
+#~ "\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -r, --system create system accounts\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Bruk: %s [valg] [inndata]\n"
+#~ "\n"
+#~ " -c, --crypt-method krypteringsmetode (en av %s)\n"
+#~ " -r, --system lag systemkontoer\n"
+#~ "%s\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Passordet vil utgå på dato."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: klarte ikke å låse passordfil\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: klarte ikke å åpne passordfil\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: klarte ikke å låse skyggepassordfil\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: klarte ikke å åpne skyggepassordfil\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: klarte ikke å gjenskrive skyggepassordfil\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: klarte ikke å gjenskrive passordfil\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: klarte ikke å oppdatere skyggepassordfil\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tFullstendig navn: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tRomnummer: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tJobbtelefon: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tHjemtelefon: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "Klarte ikke å låse passordfil; forsøk senere.\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "Klarte ikke å åpne passordfil.\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: fant ikke %s i /etc/passwd\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Feil under oppdatering av passord.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Klarte ikke å sende inn endringer til passordfil.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Klarte ikke å låse opp passordfil.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: klarte ikke å låse gruppefil\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: klarte ikke å låse gshadow-fil\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: klarte ikke å åpne shadow-fil\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: feil under oppdatering av shadow-fil\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: feil under oppdatering av gruppe-oppføring\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: linje %d: ukjent gruppe %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: linje %d: klarte ikke å oppdatere oppføring\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: klarte ikke å låse shadow-fil\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: feil under oppdatering av shadow-fil\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: feil under oppdatering av passordfil\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: linje %d: ukjent bruker %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: linje %d: klarte ikke å oppdatere passordlinja\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: ukjent bruker\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Ukjent bruker: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Bruk: %s [-r|-R] gruppe\n"
+
+#~ msgid " %s [-a user] group\n"
+#~ msgstr " %s [-a bruker] gruppe\n"
+
+#~ msgid " %s [-d user] group\n"
+#~ msgstr " %s [-d bruker] gruppe\n"
+
+#~ msgid " %s [-A user,...] [-M user,...] group\n"
+#~ msgstr " %s [-A bruker,...] [-M bruker,...] gruppe\n"
+
+#~ msgid " %s [-M user,...] group\n"
+#~ msgstr " %s [-M bruker,...] gruppe\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: klarte ikke å låse\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: klarte ikke å låse shadow-fil\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: klarte ikke å omskrive shadow-fil\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: klarte ikke å låse opp fil\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: klarte ikke å oppdatere oppføringen\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: klarte ikke å oppdatere oppføringen i shadow-fil\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "ukjent gruppe: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: klarte ikke å åpne fil\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: klarte ikke å åpne shadow-fil\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Hvem er du?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: ukjent medlem %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: feil under oppretting av ny gruppe\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: klarte ikke å omskrive gruppefil\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: klarte ikke å omskrive shadow-fil\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: klarte ikke å låse gruppefil\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: klarte ikke å åpne gruppefil\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: klarte ikke å låse shadow-gruppefil\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: klarte ikke å åpne shadow-gruppefil\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u er ikke entydig\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: feil under fjerning av gruppeoppføring\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: feil under sletting av shadow-gruppeoppføring\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: klarte ikke å fjerne brukerens primærgruppe.\n"
+
+#, fuzzy
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "%s: PAM autentisering mislyktes\n"
+
+#, fuzzy
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "%s: klarte ikke å låse gruppefil\n"
+
+#, fuzzy
+#~ msgid "Cannot close group file\n"
+#~ msgstr "%s: klarte ikke å åpne gruppefil\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: fant ikke %s i /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u er ikke en entydig GID\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s er ikke et entydig navn\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: klarte ikke å skrive passordfil på nytt\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: klarte ikke å låse passordfil\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: klarte ikke å åpne passordfil\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: klarte ikke å oppdatere shadow-oppføringen for %s\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: klarte ikke å oppdatere oppføringen for gruppa %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: klarte ikke å låse shadow-gruppefil\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: klarte ikke å åpne shadow-gruppefil\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: klarte ikke å fjerne shadow-gruppe %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: klarte ikke å oppdatere shadow-gruppefil\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: klarte ikke å slette shadow-gruppefil\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "ukjent UID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "ukjent GID: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: gruppa %s finnes ikke\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: bruker %s finnes ikke\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: ugyldig brukernavn «%s»\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: klarte ikke å låse /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: klarte ikke å låse /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: klarte ikke å låse /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: klarte ikke å låse /etc/passwd.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: klarte ikke å åpne filer\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: klarte ikke å endre passord-oppføringen for %s\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: klarte ikke å låse passordfil\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: klarte ikke å åpne passordfil\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: klarte ikke å fjerne shadow-oppføring for %s\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: klarte ikke å oppdatere passordfil\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: klarte ikke å oppdatere oppføring for bruker %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: klarte ikke å slette shadow-passordfil\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: ukjent GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: ukjent gruppe %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr ""
+#~ "%s: Minnet er fullt. Klarte ikke å oppdatere shadow-gruppedatabase.\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s: klarte ikke å skrive passordfil på nytt\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: klarte ikke å skrive shadow-passordfil på nytt\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: klarte ikke å låse shadow-passordfil\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: klarte ikke å åpne shadow-passordfil\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: feil under låsing av gruppefil\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: feil under åpning av gruppefil\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: feil under låsing av shadow-gruppefil\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: feil under åpning av shadow-gruppefil\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: feil under innlegging av ny passord-oppføring\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: feil under innlegging av ny shadow passord-oppføring\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s: advarsel: CREATE_HOME ikke støttet, bruk -m istedenfor.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: feil under oppdatering av gruppe-oppføring\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: feil under oppdatering av gruppe-oppføring\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: klarte ikke å åpne gruppefil\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: klarte ikke å åpne shadow-gruppefil\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: feil under sletting av passord-oppføring\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: feil under sletting av shadow passordoppføring\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: feil under oppretting av ny gruppe\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu er ikke entydig\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: feil under endring av passordoppføring\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: feil under sletting av passordoppføring\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: feil under sletting av shadow passord-oppføring\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: klarte ikke å få entydig GID\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " på «%.100s» fra «%.200s»"
+
+#~ msgid " on '%.100s'"
+#~ msgstr " på «%.100s»"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: linje %d: klarte ikke å opprette UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: navn %s er ikke entydig\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ " -h, --help\t\tdisplay this help message and exit\n"
+#~ " -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bruk: chgpasswd [valg]\n"
+#~ "\n"
+#~ "Valg:\n"
+#~ " -e, --encrypted\toppgitte passord er krypterte\n"
+#~ " h, --help\t\tvis denne hjelpeteksten og avslutt\n"
+#~ " -m, --md5\t\tbruk MD5-kryptering i stedet for DES når de oppgitte\n"
+#~ "\t\t\tpassordene ikke er krypterte\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Ingen passordfil.\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Beklager.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Du kan ikke endre passord for %s enda.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Beklager."
diff --git a/po/ne.gmo b/po/ne.gmo
new file mode 100644
index 0000000..f6b65df
--- /dev/null
+++ b/po/ne.gmo
Binary files differ
diff --git a/po/ne.po b/po/ne.po
new file mode 100644
index 0000000..f4c8436
--- /dev/null
+++ b/po/ne.po
@@ -0,0 +1,3609 @@
+# translation of shadow_po.po to Nepali
+# translation of shadow_po.po to Nepali
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+# Shiva Pokharel <pokharelshiva@hotmail.com>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.17\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2006-06-16 14:30+0545\n"
+"Last-Translator: Shiva Pokharel <pokharelshiva@hotmail.com>\n"
+"Language-Team: Nepali <info@mpp.org.np>\n"
+"Language: ne\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2;plural=(n!=1)\n"
+"X-Generator: KBabel 1.10.2\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "कनफिगरेसन सूचनाको लागि खाली ठाऊँ बाँड्न सकिदैन ।\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "कन्फिगरेसन त्रुटि - अज्ञात वस्तु '%s' (प्रशासकलाई सूचना गर्नुहोस)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr ""
+
+msgid "Password: "
+msgstr "पासवर्ड: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "'%s' को पासवर्ड: "
+
+#, fuzzy
+#| msgid "Cannot open the password file.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "पासवर्ड फाइल खोल्न सकिएन ।\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr ""
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not set sename for %s\n"
+msgstr "कनफिगरेसन सूचनाको लागि खाली ठाऊँ बाँड्न सकिदैन ।\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "%s का लागि अवधि सूचना परिवर्तन गरिदैछ\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "%s: तपाईँको प्रयोगकर्ता नाम निर्धारण गर्न सकिएन ।\n"
+
+#, fuzzy, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "%s: रेखा %d: प्रयोगकर्ता फेला पार्न सकिएन %s\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: स्मृति भन्दा बाहिर\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: फाइल %s अद्यावधिक गर्न सकिएन\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: अवैध गृह डाइरेक्ट्री '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: डाइरेक्ट्री %s लाई %s मा पुन:नामकरण गर्न सकिदैन\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: डाइरेकट्री सिर्जना गर्न सकिएन %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: चेतावनी: हट्न सक्दैन "
+
+#, fuzzy, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: चेतावनी: हट्न सक्दैन "
+
+#, fuzzy, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: पुन:नामकरण गर्नुहोस्: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: डाइरेक्ट्री %s लाई %s मा पुन:नामकरण गर्न सकिदैन\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: डाइरेक्ट्री %s लाई %s मा पुन:नामकरण गर्न सकिदैन\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: चेतावनी: हट्न सक्दैन "
+
+#, fuzzy, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: डाइरेकट्री सिर्जना गर्न सकिएन %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: चेतावनी: हट्न सक्दैन "
+
+#, fuzzy, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: फाइल %s अद्यावधिक गर्न सकिएन\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: स्याडो फाइल अद्यावधिक हुन सकेन\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: पुन:नामकरण गर्नुहोस्: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: फाइल %s खोल्न सकिएन\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "चेतावनी: अज्ञात समूह %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "चेतावनी: अति धेरै समूहहरू\n"
+
+msgid "Your password has expired."
+msgstr "तपाईँको पासवर्डको म्याद समाप्त भएको छ।"
+
+msgid "Your password is inactive."
+msgstr "तपाईँको पासवर्ड निष्क्रिय छ।"
+
+msgid "Your login has expired."
+msgstr "तपाईँको लगइनको म्याद समाप्त भएको छ।"
+
+msgid " Contact the system administrator."
+msgstr " प्रणाली प्रशासक संग सम्पर्क गर्नुहोस् ।"
+
+msgid " Choose a new password."
+msgstr " नयाँ पासवर्ड रोज्नुहोस् ।"
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "तपाईँको पासवर्डको म्याद %ld दिनमा समाप्त हुन्छ ।\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "तपाईँको पासवर्डको म्याद भोली समाप्त हुनेछ ।"
+
+msgid "Your password will expire today."
+msgstr "तपाईँको पासवर्डको म्याद आज समाप्त हुनेछ ।"
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "tty %s लाई परिवर्तन गर्न असक्षम भयो"
+
+#, fuzzy, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: अति लामो फाँट\n"
+
+#, fuzzy, c-format
+msgid "%s: "
+msgstr "%s: %s\n"
+
+msgid ": "
+msgstr ""
+
+msgid "Environment overflow\n"
+msgstr "परिवेशको अतिप्रवाह\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "तपाईँले $%s परिवर्तन गर्न सक्नुहुन्न\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d अन्तिम लगइन देखिअसफल भयो ।\n"
+"अन्तिम %s मा %s थियो ।\n"
+msgstr[1] ""
+"%d अन्तिम लगइन देखिअसफल भयो ।\n"
+"अन्तिम %s मा %s थियो ।\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "मेलबक्स प्रापक परिवर्तन गर्न असफल भयो"
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr "%s: अद्वितिय UID प्राप्त गर्न सकिएन\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: अद्वितिय GID प्राप्त गर्न सकिएन\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: अद्वितिय GID प्राप्त गर्न सकिएन\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: यो %s सिर्जना गर्न सकिदैन\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: यो %s सिर्जना गर्न सकिदैन\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr "%s: अद्वितिय UID प्राप्त गर्न सकिएन\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: अद्वितिय UID प्राप्त गर्न सकिएन\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: अद्वितिय UID प्राप्त गर्न सकिएन\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: PAM आधिकरण असफल भयो\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: अवैध फाँट '%s'\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Could not seteuid to %d\n"
+msgstr "कनफिगरेसन सूचनाको लागि खाली ठाऊँ बाँड्न सकिदैन ।\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not set caps\n"
+msgstr "कनफिगरेसन सूचनाको लागि खाली ठाऊँ बाँड्न सकिदैन ।\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't open file\n"
+msgid "%s: snprintf failed!\n"
+msgstr "%s: फाइल खोल्न सकिएन\n"
+
+#, fuzzy, c-format
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: रेखा %d: chown असफल भयो\n"
+
+#, fuzzy, c-format
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: रेखा %d: chown असफल भयो\n"
+
+msgid "Too many logins.\n"
+msgstr "अति धेरै लगइनहरू ।\n"
+
+msgid "You have new mail."
+msgstr "तपाईँसँग नयाँ मेल छ।"
+
+msgid "No mail."
+msgstr "मेल छैन।"
+
+msgid "You have mail."
+msgstr "तपाईँको मेल छ।"
+
+msgid "no change"
+msgstr "परिवर्तन छैन"
+
+msgid "a palindrome"
+msgstr "एउटा श्लोक"
+
+msgid "case changes only"
+msgstr "केस परिवर्तनहरू मात्र"
+
+msgid "too similar"
+msgstr "अति मिल्दो"
+
+msgid "too simple"
+msgstr "अति सजिलो"
+
+msgid "rotated"
+msgstr "घुमिरहेको"
+
+msgid "too short"
+msgstr "अति छोटो"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "खराब पासवर्ड: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "पासवर्ड: pam_start() असफल भयो, त्रुटि %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "पासवर्ड: %s\n"
+
+#, fuzzy
+msgid "passwd: password unchanged\n"
+msgstr "पासवर्ड परिवर्तन भयो ।"
+
+msgid "passwd: password updated successfully\n"
+msgstr "पासवर्ड: पासवर्ड सफलतापूर्वक अद्यावधिक भयो\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: रेपोजिटरी %s समर्थित छैन\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start: त्रुटि %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "पासवर्ड: pam_start() असफल भयो, त्रुटि %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr " %s को लागि गलत पासवर्ड ।\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr ""
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: विशेषधिकारहरू छोड्न असफल भयो (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: अवैध गृह फोन: '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: डाइरेकट्री सिर्जना गर्न सकिएन %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: डाइरेकट्री सिर्जना गर्न सकिएन %s\n"
+
+#, fuzzy, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: डाइरेकट्री सिर्जना गर्न सकिएन %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "'%s' मा सि डि गर्न असफल\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "डाइरेक्ट्री होइन, HOME=/ संगै लगइन भइरहेको"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "%s कार्यान्वयन गर्न सकिएन"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "अवैध मूल डाइरेकट्री '%s'\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "'%s' मा मूल डाइरेकट्री परिवर्तन गर्न सकिदैन\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: प्रयोगकर्ता %s हालै लग गरियो\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: प्रयोगकर्ता %s हालै लग गरियो\n"
+
+msgid "Unable to determine your tty name."
+msgstr "तपाईँको tty नाम निर्धारण गर्न सकिएन।"
+
+#, fuzzy
+msgid "No"
+msgstr "होइन\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "उपयोग: %s [आगत]\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr ""
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "नयाँ मान प्रविष्टि गर्नुहोस्, वा पूर्वनिर्धारितको लागि ENTER थिच्नुहोस्"
+
+msgid "Minimum Password Age"
+msgstr "न्यूनतम पासवर्ड अवधि"
+
+msgid "Maximum Password Age"
+msgstr "अधिकतम पासवर्ड अवधि"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "अन्तिम पासवर्ड परिवर्तन गर्नुहोस् (YYYY-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "पासवर्ड समाप्ति चेतावनी"
+
+msgid "Password Inactive"
+msgstr "पासवर्ड निष्क्रिय"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "लेखा समाप्ति मिति (YYYY-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "अन्तिम पासवर्ड परिवर्तन भयो\t\t\t\t\t: "
+
+msgid "never"
+msgstr "कहिल्यै पनि"
+
+msgid "password must be changed"
+msgstr "पासवर्ड परिवर्तन हुनुपर्छ"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "पासवर्ड समाप्त हुन्छ\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "पासवर्ड निष्क्रिय पार्नुहोस्\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "लेखा समाप्त हुन्छ\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "पासवर्ड परिवर्तन बीचको दिनहरुको न्यूनतम संख्या\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "पासवर्ड परिवर्तन बीचको दिनहरुको अधिक्तम संख्या\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "पासवर्ड समाप्त हुनु अगाडि चेतावनीको दिनहरुको संख्या\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: अवैध मिति '%s'\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: अवैध संख्यात्मक तर्क '%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: अन्य झण्डाहरू संग \"l\" समावेश भएन\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: अनुमति अस्वीकार गरियो ।\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: तपाईँको प्रयोगकर्ता नाम निर्धारण गर्न सकिएन ।\n"
+
+#, fuzzy, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: फाइलहरू ताल्चा मार्न सकिएन, पछि फेरी प्रयास गर्नुहोस्\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: फाइल %s खोल्न सकिएन\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: फोर्क गर्दा असफल: %s"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: विशेषधिकारहरू छोड्न असफल भयो (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: स्याडो पासवर्ड फाइल प्रस्तुत भएको छैन\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: प्रयोगकर्ता %s अवस्थित छैन\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "%s का लागि अवधि सूचना परिवर्तन गरिदैछ\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: त्रुटि परिवर्तन फाँट\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr "उपयोग: %s [आगत]\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr "पुरा नाम"
+
+#, fuzzy, c-format
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "कोठा नम्बर"
+
+msgid "Work Phone"
+msgstr "कार्य फोन"
+
+msgid "Home Phone"
+msgstr "गृह फोन"
+
+msgid "Other"
+msgstr "अन्य"
+
+msgid "Cannot change ID to root.\n"
+msgstr "ID लाई मूलमा परिवर्तन गर्न सकिदैन ।\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: अवैध नाम: '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: अवैध कोठा नम्बर: '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: अवैध कार्य फोन: '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: अवैध गृह फोन: '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s' ले गैरकानूनी क्यारेक्टरहरू समाविष्ट गर्दछ\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s' ले गैरकानूनी क्यारेक्टरहरू समाविष्ट गर्दछ\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: प्रयोगकर्ता %s अवस्थित छैन\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: NIS ग्राहकमा प्रयोगकर्ता '%s' परिवर्तन गर्न सकिदैन ।\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: '%s' यो ग्राहकको लागि NIS मास्टर हो ।\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr " %s को लागि प्रयोगकर्ता सूचना परिवर्तन गरिदैछ\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: अति लामो फाँट\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "उपयोग: %s [आगत]\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr ""
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: -a फ्ल्याग -G फ्ल्याग संग मात्र अनुमति छ\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: रेखा %d: अति लामो रेखा\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: रेखा %d: नयाँ पासवर्ड हराइरहेको छ\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: विशेषधिकारहरू छोड्न असफल भयो (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: समूह %s अवस्थित छैन\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: रेखा %d: प्रविष्टि अद्यावधिक गर्न सकिएन\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: त्रुटि पत्ता लाग्यो, परिवर्तनहरू उपेक्षा गरियो\n"
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: प्रयोगकर्ता %s अवस्थित छैन\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: प्रयोगकर्ता %s अवस्थित छैन\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr "शेल लगइन"
+
+#, fuzzy, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "तपाईँ यस को लागि शेल परिवर्तन गर्न सक्नुहुन्न %s ।\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr " %s को लागि शेलको लगइन परिवर्तन गरिदैछ\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: अवैध प्रविष्टि: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s अवैध शेल हो ।\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: प्रयोगकर्ता %s अवस्थित छैन\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: चेतावनी: %s चाँहि %s को स्वामित्वमा छैन\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "अन्तिम लग: अनपेक्षित तर्क: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: डाइरेकट्री सिर्जना गर्न सकिएन %s\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "सबैभन्दा पछि असफल भएको लगइन\n"
+
+#, fuzzy, c-format
+msgid " [%lus left]"
+msgstr " [%lds left]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds lock]"
+
+#, fuzzy, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s: डाइरेकट्री सिर्जना गर्न सकिएन %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: विशेषधिकारहरू छोड्न असफल भयो (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: डाइरेकट्री सिर्जना गर्न सकिएन %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "अज्ञात प्रयोगकर्ता: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: डाइरेक्ट्री %s लाई %s मा पुन:नामकरण गर्न सकिदैन\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: विशेषधिकारहरू छोड्न असफल भयो (%s)\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "उपयोग: %s [आगत]\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr ""
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr ""
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr ""
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+
+#, fuzzy
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "%s को लागि पासवर्ड परिवर्तन गर्न सकिदैन ।\n"
+
+#, fuzzy
+msgid "The options cannot be combined.\n"
+msgstr "%s को लागि पासवर्ड परिवर्तन गर्न सकिदैन ।\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: स्याडो समूह पासवर्डहरुलाई -A को आवश्यक छ\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: समूह %s अवस्थित छैन\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: फोर्क गर्दा असफल: %s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "समूह %s को लागि पासवर्ड परिवर्तन गरिदैछ\n"
+
+msgid "New Password: "
+msgstr "नयाँ पासवर्ड: "
+
+msgid "Re-enter new password: "
+msgstr "नयाँ पासवर्ड पुन:प्रविष्ट गर्नुहोस्: "
+
+msgid "They don't match; try again"
+msgstr "तिनीहरू मेल खाँदैनन्, फेरी प्रयास गर्नुहोस्"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: पछि फेरी प्रयास गर्नुहोस्\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "समूह %s मा प्रयोगकर्ता %s थप गरिदैछ\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "समूह %s बाट प्रयोगकर्ता %s हटाइदैछ\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: प्रयोगकर्ता %s अवस्थित छैन\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: tty होइन\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "उपयोग: %s [आगत]\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr ""
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid " -r, --system create a system account\n"
+msgstr ""
+
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s वैध समूह नाम होइन\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "अवैध समूह नाम '%s'\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K लाई KEY=VALUE को आवश्यक पर्दछ\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: समूह %s अवस्थित छ\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: तपाईँको प्रयोगकर्ता नाम निर्धारण गर्न सकिएन ।\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: डाइरेक्ट्री %s लाई %s मा पुन:नामकरण गर्न सकिदैन\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: NIS ग्राहकमा प्रयोगकर्ता '%s' परिवर्तन गर्न सकिदैन ।\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: समूह %s अवस्थित छैन\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: समूह '%s' NIS समूह हो ।\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s NIS मास्टर हो\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: प्रयोगकर्ता %s NIS प्रयोगकर्ता हो\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: update_group मा स्मृति भन्दा बाहिर\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr "उपयोग: %s [आगत]\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+
+msgid "\n"
+msgstr ""
+
+msgid "Actions:\n"
+msgstr ""
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr ""
+
+msgid " -l, --list list the members of the group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr ""
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "अवैध समूह नाम '%s'\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: समूह %s NIS समूह हो\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: अज्ञात प्रयोगकर्ता %s\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr "उपयोग: %s [आगत]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr "उपयोग: %s [आगत]\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s र -r मिल्दोजुल्दो छैन\n"
+
+msgid "invalid group file entry"
+msgstr "अवैध समूह फाइल प्रविष्टि"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "लाइन '%s' मेट्नुहुन्छ ? "
+
+msgid "duplicate group entry"
+msgstr "नक्कली समूह प्रविष्टि"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "अवैध समूह नाम '%s'\n"
+
+#, fuzzy, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "अवैध समूह नाम '%s'\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "समूह %s: प्रयोगकर्ता छैन %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "सदस्य '%s' मेट्नुहुन्छ ? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "यो %s मा समूह फाइल प्रविष्टि मेल खाएको छैन\n"
+
+#, fuzzy, c-format
+msgid "add group '%s' in %s? "
+msgstr "यस %s मा '%s' समूह थप्नुहुन्छ ?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "अवैध स्याडो समूह फाइल प्रविष्टि"
+
+msgid "duplicate shadow group entry"
+msgstr "नक्कली स्याडो समूह प्रविष्टि"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "स्याडो समूह %s: प्रशासनिक प्रयोगकर्ता छैन %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "प्रशासनिक सदस्य '%s' मेट्नुहुन्छ ? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "स्याडो समूह %s: प्रयोगकर्ता छैन %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: फाइलहरू अद्यावधिक हुनुपर्छ\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: कुनै परिवर्तनहरू छैन\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: फाइल %s अद्यावधिक गर्न सकिएन\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "उपयोग: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "उपयोग: id\n"
+
+msgid " groups="
+msgstr " समूहहरू="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+
+msgid "Username Port From Latest"
+msgstr "सबै भन्दा पछिल्लो बाट पोर्ट प्रयोगकर्ता नाम"
+
+msgid "Username Port Latest"
+msgstr "सबैभन्दा पछिल्लो पोर्ट प्रयोगकर्ता नाम"
+
+msgid "**Never logged in**"
+msgstr "**Never logged in**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s: डाइरेकट्री सिर्जना गर्न सकिएन %s\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%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 "उपयोग: %s [-p] [name]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h host] [-f name]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r host\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "अवैध लगइन समय"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"रुटिन संभारको लागि प्रणाली बन्द गरियो"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[बाइपास जडान विच्छेदन भयो --मूल लगइनलाई अनुमति छ । ]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"utmp प्रविष्टि भएन । तपाईँले \"login\" गर्दा ज्यादै न्यून तह \"sh\" बाट कार्यन्वयन "
+"गर्नुपर्छ"
+
+#, fuzzy, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"%d सेकेण्ड पछि लगइन समय समाप्त भयो ।\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "लगइन: PAM असफल भयो, परित्याग गरिदै: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s लगइन: "
+
+msgid "login: "
+msgstr "लगइन: "
+
+#, fuzzy, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "बढेको प्रयासहरको अधिक्तम संख्या (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "लगइन: PAM द्वारा अनुरोध गरिएको परित्याग\n"
+
+msgid "Login incorrect"
+msgstr "लगइन गलत छ"
+
+#, fuzzy, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "%s: रेखा %d: प्रयोगकर्ता फेला पार्न सकिएन %s\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s लगइन: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: फोर्क गर्दा असफल: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "चेतावनी: अस्थायी लगआउट पछि लगइन पुन: सक्षम गर्नुहोस् ।"
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "अन्तिम लगइन: %s मा %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "अन्तिम लगइन: %s मा %.19s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " %.*s बाट"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"लगइन समय बढ्यो\n"
+"\n"
+
+#, fuzzy
+msgid "Usage: logoutd\n"
+msgstr "उपयोग: id\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: can't open group file\n"
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr "%s: समूह फाइल खोल्न सकिदैन\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: विशेषधिकारहरू छोड्न असफल भयो (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: विशेषधिकारहरू छोड्न असफल भयो (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: अति लामो फाँट\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: अवैध डाइरेक्ट्री '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: डाइरेकट्री सिर्जना गर्न सकिएन %s\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "उपयोग: newgrp [-] [group]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "उपयोग: sg group [[-c] आदेश]\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: विशेषधिकारहरू छोड्न असफल भयो (%s)\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "पुरानो पासवर्ड: "
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: फोर्क गर्दा असफल: %s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: प्रयोगकर्ता %s अवस्थित छैन\n"
+
+msgid "too many groups\n"
+msgstr "अति धेरै समूहहरू\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid " -b, --badnames allow bad names\n"
+msgstr ""
+
+msgid " -r, --system create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+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 ID '%s'\n"
+msgstr "%s: अवैध प्रयोगकर्ता नाम '%s'\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: अवैध प्रयोगकर्ता नाम '%s'\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: रेखा %d: अवैध रेखा\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: प्रयोगकर्ता %s का लागि प्रविष्टि अद्यावधिक गर्न सकिएन\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: रेखा %d: GID सिर्जना गर्न सकिएन\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: रेखा %d: GID सिर्जना गर्न सकिएन\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: प्रयोगकर्ता %s अवस्थित छैन\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: रेखा %d: पासवर्ड अद्यावधिक गर्न सकिएन\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: रेखा %d: mkdir असफल भयो\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: रेखा %d: chown असफल भयो\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: रेखा %d: प्रविष्टि अद्यावधिक गर्न सकिएन\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: विशेषधिकारहरू छोड्न असफल भयो (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: यो %s सिर्जना गर्न सकिदैन\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: समूह फाइल अद्यावधिक गर्न सकिएन\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid " -q, --quiet quiet mode\n"
+msgstr ""
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid "Old password: "
+msgstr "पुरानो पासवर्ड: "
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"नयाँ पासवर्ड प्रविष्ट गर्नुहोस् (%d को न्युनतम, %d को अधिक्तम क्यारेक्टरहरू)\n"
+"कृपया सानो र ठूलो अक्षरहरू र नम्बरहरुको मिलान प्रयोग गर्नुहोस् ।\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"नयाँ पासवर्ड प्रविष्ट गर्नुहोस् (%d को न्युनतम, %d को अधिक्तम क्यारेक्टरहरू)\n"
+"कृपया सानो र ठूलो अक्षरहरू र नम्बरहरुको मिलान प्रयोग गर्नुहोस् ।\n"
+
+msgid "New password: "
+msgstr "नयाँ पासवर्ड : "
+
+msgid "Try again."
+msgstr "फेरी प्रयास गर्नुहोस् ।"
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"चेतावनी: कम्जोर पासवर्ड (जे भए पनि यसलाई प्रयोग गर्न फेरी यसलाई प्रविष्ट गर्नुहोस्) ।"
+
+msgid "They don't match; try again.\n"
+msgstr "तिनीहरू मेल खाँदैनन्; फेरी प्रयास गर्नुहोस् ।\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "%s को लागि पासवर्ड परिवर्तन गर्न सकिदैन ।\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "%s को लागि पासवर्ड परिवर्तन गर्न सकिदैन ।\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: रेपोजिटरी %s समर्थित छैन\n"
+
+#, c-format
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr ""
+"%s: यस %s को लागि तपाईवले पासवर्ड सूचना दृश्य गर्न वा परिमार्जन गर्न सक्नुहुन्न ।\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "%s को लागि पासवर्ड परिवर्तन गरिदैछ\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "%s को लागि पासवर्ड परिवर्तन हुन सकिदैन ।\n"
+
+#, fuzzy, c-format
+msgid "%s: password changed.\n"
+msgstr "पासवर्ड परिवर्तन भयो ।"
+
+#, fuzzy, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "पासवर्ड समाप्ति चेतावनी"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr "उपयोग: %s [आगत]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr "उपयोग: %s [आगत]\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+
+msgid "invalid password file entry"
+msgstr "अवैध पासवर्ड फाइल प्रविष्टि"
+
+msgid "duplicate password entry"
+msgstr "नक्कली पासवर्ड प्रविष्टि"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "अवैध प्रयोगकर्ता नाम '%s'\n"
+
+#, fuzzy, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "अवैध प्रयोगकर्ता नाम '%s'\n"
+
+#, fuzzy, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "प्रयोगकर्ता %s: समूह छैन %u\n"
+
+#, fuzzy, c-format
+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"
+msgstr "प्रयोगकर्ता %s: कार्यक्रम %s अवस्थित छैन\n"
+
+#, fuzzy, c-format
+msgid "no tcb directory for %s\n"
+msgstr "%s: डाइरेकट्री सिर्जना गर्न सकिएन %s\n"
+
+#, fuzzy, c-format
+msgid "create tcb directory for %s?"
+msgstr "%s: डाइरेकट्री सिर्जना गर्न सकिएन %s\n"
+
+#, fuzzy, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "%s: डाइरेकट्री सिर्जना गर्न सकिएन %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: फाइल %s ताल्चा मार्न सकिदैन\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "यो %s मा मेल खाने पासवर्ड फाइल प्रविष्टि छैन\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "'%s' मा %s प्रयोगकर्ता थप्नुहुन्छ ? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "अवैध स्याडो पासवर्ड फाइल प्रविष्टि"
+
+msgid "duplicate shadow password entry"
+msgstr "नक्कलि स्याडो पासवर्ड प्रविष्टि"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "प्रयोगकर्ता %s: अन्तिम पासवर्ड भविष्यमा परिवर्तन हुनेछ\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: फाइल %s खोल्न सकिएन\n"
+
+#, fuzzy, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: फाइल पुन:लेखन गर्न सकिएन\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "su बाट त्यो खातामा पहुँच गर्न अस्वीकार गरियो ।\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "पासवर्ड प्रमाणीकरण बाइपास गरियो ।\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr " कृपया प्रमाणीकरणको रुपमा तपाईँको आफ्नो पासवर्ड प्रविष्ट गर्नुहोस् ।\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: फाइल %s ताल्चा मार्न सकिदैन\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr ""
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr ""
+
+msgid "Session terminated, terminating shell..."
+msgstr ""
+
+#, c-format
+msgid " ...killed.\n"
+msgstr ""
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr ""
+
+msgid " ...terminated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"उपयोग: su [options] [login]\n"
+"\n"
+"विकल्पहरू:\n"
+" -c, --आदेश COMMAND\t\t शेल आह्वान गर्न आदेश पास गर्नुहोस्\n"
+" -h, --मद्दत\t\t\t ले यो मद्दत संदेशलाई प्रदर्शन गर्दछ र बन्द गर्दछ\n"
+" -, -l, --लगइन\t\tशेललाई एउटा लगइन शेल बनाउँछ \n"
+" -m, -p,\n"
+" --preserve-environment\t ले परिवेश चलहरू पुन: सेट गर्दैन\n"
+" र उही शेल\t\t\t\t राख्दछ\n"
+" -s, --शेल SHELL\t\t पूर्वनिर्धारित पासवर्डको सट्टामा SHELL प्रयोग गर्दछ\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(उपेक्षा गरियो)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "तपाईँ su %s मा प्रमाणिकरण हुनुहुन्न\n"
+
+msgid "(Enter your own password)"
+msgstr "(तपाईँको आफ्नै पासवर्ड प्रविष्ट गर्नुहोस्)"
+
+#, fuzzy, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: PAM आधिकरण असफल भयो\n"
+
+#, fuzzy, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "तपाईँ su %s मा प्रमाणिकरण हुनुहुन्न\n"
+
+#, fuzzy, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "मूलको लागि पासवर्ड प्रविष्टि छैन'"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: टर्मिनलबाट चल्नुपर्छ\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: त्रुटि %d\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: डाइरेक्ट्री %s लाई %s मा पुन:नामकरण गर्न सकिदैन\n"
+
+#, fuzzy, c-format
+msgid "Cannot execute %s\n"
+msgstr "%s कार्यान्वयन गर्न सकिएन"
+
+msgid "No password file"
+msgstr "पासवर्ड फाइल होइन"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "मूलको लागि पासवर्ड प्रविष्टि छैन'"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"सामन्य सुरुवात संगै प्रक्रिया गर्न control-d टाइप गर्नुहोस्,\n"
+"(वा प्रणाली संभारको लागि मूल पासवर्ड दिनुहोस्):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "प्रणाली संभार मोड प्रविष्टि गरिदैछ"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: नयाँ पूर्वनिर्धारित फाइल सिर्जना गर्न सकिएन\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: नयाँ पूर्वनिर्धारित फाइल सिर्जना गर्न सकिएन\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: नयाँ पूर्वनिर्धारित फाइल खोल्न सकिएन\n"
+
+#, fuzzy, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: रेखा %d: chown असफल भयो\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: डाइरेकट्री सिर्जना गर्न सकिएन %s\n"
+
+#, fuzzy, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: पुन:नामकरण गर्नुहोस्: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: समूह '%s' NIS समूह हो ।\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: अति धेरै समूहरू निर्दिष्ट गरिएको छ (max %d) ।\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr "उपयोग: %s [आगत]\n"
+
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr ""
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr ""
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr ""
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr ""
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: अवैध डाइरेक्ट्री '%s'\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: अवैध टिप्पणी '%s'\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: अवैध गृह डाइरेक्ट्री '%s'\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: स्याडो पासवर्डहरुको लागि -e को आवश्यक पर्दछ\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: स्याडो पासवर्डहरुको लागि -f को आवश्यक पर्दछ\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: अवैध फाँट '%s'\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: अवैध शेल '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: चेतावनी: %s चाँहि %s को स्वामित्वमा छैन\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rewrite password file\n"
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s: पासवर्ड फाइल पुन:लेखन गर्न सकिएन\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s: डाइरेकट्री सिर्जना गर्न सकिएन %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: विशेषधिकारहरू छोड्न असफल भयो (%s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error updating files\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: फाइलहरू अद्यावधिक गर्दा त्रुटि\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: डाइरेकट्री सिर्जना गर्न सकिएन %s\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: अवैध गृह डाइरेक्ट्री '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "मेलबक्स प्रापक परिवर्तन गर्न असफल भयो"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: डाइरेकट्री सिर्जना गर्न सकिएन %s\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: रेखा %d: chown असफल भयो\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: रेखा %d: chown असफल भयो\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "मेल बाकस फाइल सिर्जना गर्दै"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr "समूह मेल फेला परेन । ०६०० मोड द्वारा प्रयोगकर्ता मेल बाकस फाइल सिर्जना गर्दैछ ।\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "मेल बाकस फाइल अनुमतिहरू मिलाउदै"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: प्रयोगकर्ता %s अवस्थित छ\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: समूह %s अवस्थित छ - यदि तपाईँ यो प्रयोगकर्तालाई त्यो समूहमा थप्न चाहनुहुन्छ भने, -g "
+"प्रयोग गर्नुहोस् ।\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: यो %s सिर्जना गर्न सकिदैन\n"
+
+#, fuzzy, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %u अद्वितिय होइन\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: डाइरेकट्री सिर्जना गर्न सकिएन %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: यो %s सिर्जना गर्न सकिदैन\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: यो %s सिर्जना गर्न सकिदैन\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: यो %s सिर्जना गर्न सकिदैन\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: चेतावनी: गृह डाइरेक्ट्री पहिल्यै अवस्थित छ ।\n"
+"यसमा स्केल डाइरेक्ट्रीबाट कुनै फाइल प्रतिलिपी भएको छैन ।\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr "%s: NIS ग्राहकमा प्रयोगकर्ता '%s' परिवर्तन गर्न सकिदैन ।\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr ""
+
+#, fuzzy, c-format
+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 remove entry %lu from %s\n"
+msgstr "%s: डाइरेक्ट्री %s लाई %s मा पुन:नामकरण गर्न सकिदैन\n"
+
+#, fuzzy, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: अवैध गृह डाइरेक्ट्री '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: चेतावनी: हट्न सक्दैन "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s चाँहि %s को स्वामित्वमा छैन, हटिरहेको छैन\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: विशेषधिकारहरू छोड्न असफल भयो (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: डाइरेक्ट्री %s लाई %s मा पुन:नामकरण गर्न सकिदैन\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: डाइरेक्ट्री %s लाई %s मा पुन:नामकरण गर्न सकिदैन\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: प्रयोगकर्ता %s NIS प्रयोगकर्ता हो\n"
+
+#, fuzzy, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: अवैध गृह डाइरेक्ट्री '%s'\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s: हट्ने डाइरेक्ट्री होइन %s (प्रयोगकर्ता %s को गृह हटाउँछ)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: डाइरेक्ट्री हटाउँदा त्रुटि %s\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: डाइरेक्ट्री हटाउँदा त्रुटि %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr ""
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr ""
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr ""
+
+msgid " -L, --lock lock the user account\n"
+msgstr ""
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr ""
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr ""
+
+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"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: प्रयोगकर्ता %s अवस्थित छ\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: अवैध मिति '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: अवैध मिति '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: no options\n"
+msgstr "%s: फाइल %s खोल्न सकिएन\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: -e र -f को लागि स्याडो पासवर्डहरुको आवश्यक छ\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: डाइरेक्ट्री %s अवस्थित छ\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: डाइरेकट्री सिर्जना गर्न सकिएन %s\n"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: चेतावनी: पुरानो गृह डाइरेक्ट्री पूर्णरुपले हटाउन असफल भयो %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: डाइरेक्ट्री %s लाई %s मा पुन:नामकरण गर्न सकिदैन\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: चेतावनी: %s चाँहि %s को स्वामित्वमा छैन\n"
+
+msgid "failed to change mailbox owner"
+msgstr "मेलबक्स प्रापक परिवर्तन गर्न असफल भयो"
+
+msgid "failed to rename mailbox"
+msgstr "मेल बक्सलाई पुन:नामकरण गर्न असफल भयो"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s: विशेषधिकारहरू छोड्न असफल भयो (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s: विशेषधिकारहरू छोड्न असफल भयो (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s: विशेषधिकारहरू छोड्न असफल भयो (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s: विशेषधिकारहरू छोड्न असफल भयो (%s)\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid " -g, --group edit group database\n"
+msgstr ""
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr ""
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: विशेषधिकारहरू छोड्न असफल भयो (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s परिवर्तन हुदैन\n"
+
+#, fuzzy
+msgid "failed to create scratch directory"
+msgstr "मेल बक्सलाई पुन:नामकरण गर्न असफल भयो"
+
+#, fuzzy
+msgid "failed to drop privileges"
+msgstr "%s: विशेषधिकारहरू छोड्न असफल भयो (%s)\n"
+
+#, fuzzy
+msgid "Couldn't get file context"
+msgstr "फाइल ताल्चा मार्न सकिदैन"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+#, fuzzy
+msgid "failed to gain privileges"
+msgstr "%s: विशेषधिकारहरू छोड्न असफल भयो (%s)\n"
+
+msgid "Couldn't lock file"
+msgstr "फाइल ताल्चा मार्न सकिदैन"
+
+msgid "Couldn't make backup"
+msgstr "जगेडा बनाउँन सकिदैन"
+
+#, fuzzy, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr "%s: %s /etc/passwd मा फेला परेन\n"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+#, fuzzy
+msgid "failed to open scratch file"
+msgstr "%s: समूह फाइल खोल्न असक्षम भयो\n"
+
+#, fuzzy
+msgid "failed to unlink scratch file"
+msgstr "%s: अति लामो फाँट\n"
+
+#, fuzzy
+msgid "failed to stat edited file"
+msgstr "मेल बक्सलाई पुन:नामकरण गर्न असफल भयो"
+
+#, fuzzy
+msgid "failed to allocate memory"
+msgstr "मेलबक्स प्रापक परिवर्तन गर्न असफल भयो"
+
+#, fuzzy
+msgid "failed to create backup file"
+msgstr "मेल बक्सलाई पुन:नामकरण गर्न असफल भयो"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: पुन:भण्डारण गर्न सकिदैन %s: %s (तपाईँको परिवर्तनहरू %s मा छ)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: अवैध डाइरेक्ट्री '%s'\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "उपयोग: %s [आगत]\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "malloc(%d) असफल भयो\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "उपयोग:प्रयोगकर्ता [विकल्पहरू] परिवर्तन गर्नुहोस्\n"
+#~ "\n"
+#~ " विकल्पहरू:\n"
+#~ " -d, --अन्तिम दिन LAST_DAY\t ले LAST_DAY मा परिवर्तन भएको अन्तिम पासवर्ड सेट\n"
+#~ "\t\t\t\tगर्दछ\n"
+#~ " -E, --समाप्त मिति EXPIRE_DATE\t ले EXPIRE_DATE मा खाता समाप्त मिति सेट "
+#~ "गर्दछ\n"
+#~ " -h, --help\t\t\t ले यो मद्दत संदेशलाई प्रदर्शित र बन्द गर्दछ\n"
+#~ " -I, --निष्क्रिय INACTIVE\t ले म्याद समाप्त भएपछि निष्क्रिय पासवर्ड सेट गर्दछ\n"
+#~ "\t\t\t\tto INACTIVE\n"
+#~ " -l, --सूचि\t\t\t ले खाता अवधि सूचना देखाउँछ\n"
+#~ " -m, --न्युनतम दिन MIN_DAYS\tपासवर्ड अघि दिनहरुको न्युनतम संख्या सेट गर्दछ\n"
+#~ "\t\t\t\tchange to MIN_DAYS\n"
+#~ " -M, --अधिकमत दिन MAX_DAYS\tपासवर्ड अघि दिनहरुको न्युनतम संख्या सेट गर्दछ\n"
+#~ "\t\t\t\tchange to MAX_DAYS\n"
+#~ " -W, --चेतावनी दिन WARN_DAYS\t ले WARN_DAYS मा समाप्त भएको चेतावनी दिनहरू "
+#~ "सेट \n"
+#~ "\t\t\t\tगर्दछ\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: PAM आधिकरण असफल भयो\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "उपयोग: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr "उपयोग: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "उपयोग: पासवर्ड परिवर्तन गर्नुहोस् [options]\n"
+#~ "\n"
+#~ "विकल्पहरू:\n"
+#~ " -e, --गुप्तिकृत\tआपूर्ति भएका पासवर्डहरू गुप्तिकृत छन\n"
+#~ " -h, --मद्दत\t\tले यो मद्दत संदेशलाई प्रदर्शित र बन्द गर्छ\n"
+#~ " -m, --md5\t\tले DES को सट्टामा MD5 प्रयोग गर्छ जब आपूर्ति भएको\n"
+#~ "\t\t\tपासवर्डहरू गुप्तिकृत भएको हुदैन\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "उपयोग: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "विकल्पहरू:\n"
+#~ " -f, --force\t\t\tप्रयोगकर्ताले प्राप्त नगरेता पनि, फाइलहरुको हटाईमा जोड गर्दछ\n"
+#~ " -h, --help\t\t\tयो मद्दत संदेशलाई प्रदर्शन गर्छ र बनद गर्दछ\n"
+#~ " -r, --remove\t\t\tगृह डाइरेक्ट्री र मेल स्पूललाई हटाउँछ \n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "उपयोग: अवधि {-f|-c}\n"
+
+#, fuzzy
+#~| msgid "%s: cannot open file %s\n"
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "%s: फाइल %s खोल्न सकिएन\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "उपयोग: groupdel समूह नाम\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "उपयोग: %s [-r] [-s] [group [gshadow]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "उपयोग: %s [-r] [-s] [group]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: -s र -r मिल्दोजुल्दो छैन\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "उपयोग: groupdel समूह नाम\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "उपयोग: groupdel समूह नाम\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "उपयोग: lastlog [options]\n"
+#~ "\n"
+#~ "विकल्पहरू:\n"
+#~ " -b, --DAYS अगाडि\t DAYS भन्दा पुरानो अन्तिम लग रेकर्ड मुद्रण गर्दछ\n"
+#~ " -h, --मद्दत\t\tयो मद्दत संदेशलाई प्रदर्शन गर्छ र बन्द गर्दछ\n"
+#~ " -t, --समय DAYS\t DAYS भन्दा धेरै नविन अन्तिम लग रेकर्डहरू मात्र मुद्रण गर्दछ\n"
+#~ " -u, --प्रयोगकर्ता LOGIN\t निर्दिष्ट गरिएको LOGIN संगै अन्तिम लग रेकर्डहरू मुद्रण "
+#~ "गर्दछ\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "उपयोग: पासवर्ड [विकल्पहरू] [लगइन]\n"
+#~ "\n"
+#~ "विकल्पहरू:\n"
+#~ " -a, --सबै\t\t\t सबै खातामा पासवर्ड स्थिति प्रतिवेदन गर्दछ\n"
+#~ " -d, --मेट्नुहोस्\t\t\t नामकरण गरिएको खाताको लागि पासवर्ड मेट्दछ\n"
+#~ " -e, --समाप्त हुनु\t\t\t नामकरण गरिएको खाताको लागि पासवर्ड समाप्त गर्न जोड "
+#~ "गर्दछ\n"
+#~ " -h, --मद्दत\t\t\t यो मद्दत संदेशलाई प्रदर्शन गर्दछ र बन्द गर्दछ\n"
+#~ " -k, --टोकनहरू राख्नुहोस्\t\tयदि समाप्त भएमा मात्र पासवर्ड परिवर्तन गर्नुहोस्\n"
+#~ " -i, --निस्क्रिय INACTIVE\t समाप्ति पछ निस्क्रियमा निस्क्रिय पासवर्ड सेट गर्नुहोस्\n"
+#~ " -l, --ताल्चा मार्नुहोस्\t\t\t नामकरण गरिएको खाता ताल्चा मार्नुहोस्\n"
+#~ " -n, --न्युनतम दिनहरू MIN_DAYS\t ले MIN_DAYS मा पासवर्ड\n"
+#~ "\t\t\t\t परिवर्तन गर्नु अघि दिनहरुको न्युनतम नम्बरलाई सेट गर्दछ\n"
+#~ " -q, --अन्त्य गर्नुहोस्\t\t\tअन्त्य मोड\n"
+#~ " -r, --रेपोजिटरी REPOSITORY\t रेपोजिटरीमा पासवर्ड परिवर्तन गर्नुहोस् "
+#~ "REPOSITORY \n"
+#~ " -S, --वस्तुस्थिति\t\t\t नामकरण गरिएको खातामा पासवर्ड वस्तुस्थिति प्रतिवेदन गर्दछ\n"
+#~ " -u, --अनलग गर्नुहोस्\t\t\t नामकरण गरिएको खाता अनलग गर्नुहोस्\n"
+#~ " -w, --चेतावनी दिनहरू WARN_DAYS\t WARN_DAYS मा समाप्त भएको चेतावनी दिनहरू सेट\n"
+#~ "\t\t\t\tगर्नुहोस्\n"
+#~ " -x, --अधिक्तम दिनहरू MAX_DAYS\t ले MAX_DAYS मा\n"
+#~ "\t\t\t\tपासवरड परिवर्तन गर्नु अघि दिनहरुको अधिक्तम नम्बरलाई सेट गर्दछ\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr "उपयोग: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr "उपयोग: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "उपयोग: id\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "उपयोग: id\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "अज्ञात id: %s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "शेल होइन\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force removal of files,\n"
+#~ " even if not owned by user\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -r, --remove remove home directory and mail spool\n"
+#~ "\n"
+#~ msgstr ""
+#~ "उपयोग: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "विकल्पहरू:\n"
+#~ " -f, --force\t\t\tप्रयोगकर्ताले प्राप्त नगरेता पनि, फाइलहरुको हटाईमा जोड गर्दछ\n"
+#~ " -h, --help\t\t\tयो मद्दत संदेशलाई प्रदर्शन गर्छ र बनद गर्दछ\n"
+#~ " -r, --remove\t\t\tगृह डाइरेक्ट्री र मेल स्पूललाई हटाउँछ \n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "उपयोगिता: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "विकल्पहरू:\n"
+#~ " -a, --append GROUP\t\tबाँकि GROUP मा प्रयोगकर्ता थप गर्नुहोस् \n"
+#~ " -c, --comment COMMENT\t\t GECOS फाँटको नयाँ मान\n"
+#~ " -d, --home HOME_DIR\t\tप्रयोगकर्ता खाताका लागि नयाँ गृह डाइरेक्टरी\n"
+#~ " -e, --expiredate EXPIRE_DATE\tखाता म्याद समाप्ति EXPIRE_DATE मा सेट "
+#~ "गर्नुहोस्\n"
+#~ " -f, --inactive INACTIVE\tम्याद समाप्ति पछि पासवर्ड निस्क्रिय पार्नुहोस्\n"
+#~ "\t\t\t\tto INACTIVE\n"
+#~ " -g, --gid GROUP\t\t GROUP लाई नयाँ प्राथमिक समूहको रुपमा प्रयोग गर्न दवाद "
+#~ "दिनुहोस्\n"
+#~ " -G, --groups GROUPS\t\tबाँकि GROUPS को नयाँ सूची\n"
+#~ " -h, --help\t\t\tयो मद्दत सन्देश प्रदर्शन गर्नुहोस् र निस्कनुहोस्\n"
+#~ " -l, --login NEW_LOGIN\t\tलगइन नामको नयाँ मान\n"
+#~ " -L, --lock\t\t\tप्रयोगकरता खाता ताल्चा मार्नुहोस्\n"
+#~ " -m, --move-home\t\tगृह डाइरेक्टरिको सामग्रिहरू नयाँ स्थानमा सार्नुहोस् \n"
+#~ "\t\t\t\tlocation ( -d संग मात्रै प्रयोग गर्नुहोस्)\n"
+#~ " -o, --non-unique\t\tनक्कली प्रयोग गर्न अनुमति दिनुहोस् (अमौलिक) UID\n"
+#~ " -p, --password PASSWORD\tनयाँ पासवर्डका लागि गुप्तिकृत प्रयोग गर्नुहोस्\n"
+#~ " -s, --shell SHELL\t\tप्रयोगकर्ता खाताका लागि नयाँ लगइन शेल\n"
+#~ " -u, --uid UID\t\t\tप्रयोगकर्ता खाताका लागि नयाँ UID\n"
+#~ " -U, --unlock\t\t\tप्रयोगकर्ता खाताको ताल्चा खोल्नुहोस्\n"
+#~ "\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s: झण्डाहरू दिएको छैन\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group edit group database\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -p, --passwd edit passwd database\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow edit shadow or gshadow database\n"
+#~ " -u, --user which user's tcb shadow file to edit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "उपयोग: vipw [options]\n"
+#~ "\n"
+#~ "विकल्पहरू:\n"
+#~ " -g, --group\t\t\tसमूह डेटाबेस सम्पादन गर्दछ\n"
+#~ " -h, --help\t\t\tयो मद्दत संदेशलाई प्रदर्शन गर्छ र बन्द गर्दछ\n"
+#~ " -p, --passwd\t\t\tपासवर्ड डेटाबेस सम्पादन गर्दछ\n"
+#~ " -q, --quiet \t\t\tअन्त्य मोड\n"
+#~ " -s, --shadow\t\t\t स्याडो वा जि स्याडो डेटाबेस सम्पादन गर्दछ\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "उपयोग: %s [आगत]\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s: यो %s सिर्जना गर्न सकिदैन\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s: स्वामित्व परिवर्तन गर्न सकिदैन %s\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all display faillog records for all users\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -l, --lock-time SEC after failed login lock account to SEC "
+#~ "seconds\n"
+#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
+#~ " -r, --reset reset the counters of login failures\n"
+#~ " -t, --time DAYS display faillog records more recent than "
+#~ "DAYS\n"
+#~ " -u, --user LOGIN display faillog record or maintains "
+#~ "failure\n"
+#~ " counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ " options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "उपयोग: असफल लग [options]\n"
+#~ "\n"
+#~ "विकल्पहरू:\n"
+#~ " -a, --सबै\t\t\t ले सबै प्रयोगकर्ताहरुको लागि असफल लगको रेकर्डहरू प्रदर्शन गर्दछ\n"
+#~ " -h, --मद्दत\t\t\t ले यो मद्दत संदेशलाई प्रदर्शन गर्छ र बन्द गर्दछ\n"
+#~ " -l, --ताल्चा मार्ने समय SEC\t\t ले SEC सेकेण्डमा लगइन लग खाता असफल भएपछि \n"
+#~ " -m, --अधिक्तम MAX\t\t ले अधिक्तम असफल लगइन काउन्टरहरू MAX मा सेट गर्दछ\n"
+#~ " -r, --पुन:सेट गर्नु\t\t\t ले असफल लगइनहरुको काउन्टरलाई पुन:सेट गर्दछ\n"
+#~ " -t, --समय DAYS\t\t ले समयको भन्दा धेरै नयाँ असफल लग रेकर्डहरू प्रदर्शन गर्दछ\n"
+#~ " -u, --प्रयोगकर्ता LOGIN\t\t ले असफल लगइन प्रदर्शन गर्छ वा असफल काउन्टरहरू\n"
+#~ "\t\t\t\tर सीमाहरू (यदि -r, -m वा -l विकल्पहरू संगै प्रयोग भयो भने) मात्र संभार "
+#~ "गर्दछ\n"
+#~ "\t\t\t\tप्रयोगकर्ताको लागि LOGIN संगै \n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force exit with success status if the\n"
+#~ " specified group already exists\n"
+#~ " -g, --gid GID use GID for the new group\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique allow create group with duplicate\n"
+#~ " (non-unique) GID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new group\n"
+#~ " -r, --system create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "उपयोग: groupadd [विकल्प] समूह\n"
+#~ "\n"
+#~ "विकल्पहरू:\n"
+#~ " -f, --जोड दिनुहोस्\t\t यदि निर्दिष्ट गरिएको छ भने सफल स्थिति सहित जोड दिन "
+#~ "बन्द \n"
+#~ "\t\t\t\tहुन्छ समूह पहिल्यै अवस्थित छ\n"
+#~ " -g, --gid GID\t\tनयाँ समूहको लागि GID प्रयोग गर्नुहोस्\n"
+#~ " -h, --मद्दत\t\t\t ले यो मद्दत संदेशलाई प्रदर्शन गर्छ र बन्द गर्छ\n"
+#~ " -K, --key KEY=VALUE\t\toverrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique\t\t ले नक्कली संगै समूह सिर्जना गर्न अनुमति दिन्छ\n"
+#~ "\t\t\t\t(non-unique) GID\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --gid GID force use new GID by GROUP\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "उपयोग: groupadd [विकल्प] समूह\n"
+#~ "\n"
+#~ "विकल्पहरू:\n"
+#~ " -f, --जोड दिनुहोस्\t\t यदि निर्दिष्ट गरिएको छ भने सफल स्थिति सहित जोड दिन "
+#~ "बन्द \n"
+#~ "\t\t\t\tहुन्छ समूह पहिल्यै अवस्थित छ\n"
+#~ " -g, --gid GID\t\tनयाँ समूहको लागि GID प्रयोग गर्नुहोस्\n"
+#~ " -h, --मद्दत\t\t\t ले यो मद्दत संदेशलाई प्रदर्शन गर्छ र बन्द गर्छ\n"
+#~ " -K, --key KEY=VALUE\t\toverrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique\t\t ले नक्कली संगै समूह सिर्जना गर्न अनुमति दिन्छ\n"
+#~ "\t\t\t\t(non-unique) GID\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~ " home directory\n"
+#~ " -c, --comment COMMENT set the GECOS field for the new user "
+#~ "account\n"
+#~ " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~ " -D, --defaults print or save modified default useradd\n"
+#~ " configuration\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP for the new user account\n"
+#~ " -G, --groups GROUPS list of supplementary groups for the new\n"
+#~ " user account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -l, --no-log-init do not add the user to the lastlog and\n"
+#~ " faillog databases\n"
+#~ " -m, --create-home create home directory for the new user\n"
+#~ " account\n"
+#~ " -M, --no-create-home do not create user's home directory\n"
+#~ " (overrides /etc/login.defs)\n"
+#~ " -N, --no-user-group do not create a group with the same name "
+#~ "as\n"
+#~ " the user\n"
+#~ " -o, --non-unique allow create user with duplicate\n"
+#~ " (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new user\n"
+#~ " account\n"
+#~ " -r, --system create a system account\n"
+#~ " -s, --shell SHELL the login shell for the new user account\n"
+#~ " -u, --uid UID force use the UID for the new user "
+#~ "account\n"
+#~ " -U, --user-group create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "उपयोग: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "विकल्पहरू:\n"
+#~ " -b, --base-dir BASE_DIR\tनयाँ प्रयोगकर्ता खाताको लागि बेस डाइरेक्ट्री\n"
+#~ "\t\t\t\tगृह डाइरेक्ट्री\n"
+#~ " -c, --comment COMMENT\t\tनयाँ प्रयोगकर्ता खाताको लागि GECOS फाँट सेट गर्दछ\n"
+#~ " -d, --home-dir HOME_DIR\t नयाँ प्रयोगकर्ता खाताको लागि गृह डाइरेक्ट्री\n"
+#~ " -D, --defaults\t\tपरिमार्जित पूर्वनिर्धारित थप प्रयोगकर्ता मुद्रण गर्नुहोस् वा "
+#~ "बचत\n"
+#~ "\t\t\t\tगर्नुहोस् कनफिगरेसन\n"
+#~ " -e, --expiredate EXPIRE_DATE\t ले EXPIRE_DATE मा खाता समाप्ति मिति सेट "
+#~ "गर्दछ\n"
+#~ " -f, --inactive INACTIVE\tले मिति समाप्ति पछि पासवर्डलाई INACTIVE मा सेट "
+#~ "गर्दछ\n"
+#~ " -g, --gid GROUP\t\tनयाँ प्रयोगकर्ता खाताको लागि GROUP प्रयोग गर्न जोड गर्दछ\n"
+#~ " -G, --groups GROUPS\t\t नयाँको लागि परिपूरक समूहहरुको सूचि\n"
+#~ "\t\t\t\tप्रयोगकर्ता खाता\n"
+#~ " -h, --help\t\t\tयो मद्दत संदेशलाई प्रदर्शन गर्छ र बन्द गर्दछ\n"
+#~ " -k, --skel SKEL_DIR\t\tएउटा वैकल्पिक स्केल डाइरेक्ट्री निर्दिष्ट गर्नुहोस्\n"
+#~ " -K, --key KEY=VALUE\t\t /etc/login.defs पूर्वनिर्धारणहरू अधिलेखन गर्दछ\n"
+#~ " -m, --create-home\t\tनयाँ प्रयोगकर्ताको लागि गृह डाइरेक्ट्री सिर्जना गर्दछ\n"
+#~ "\t\t\t\tखाता\n"
+#~ " -o, --non-unique\t\tनक्कली संग प्रयोगकर्ता सिर्जना गर्न अनुमति दिन्छ\n"
+#~ "\t\t\t\t(non-unique) UID\n"
+#~ " -p, --password PASSWORD\t नयाँ प्रयोगकर्ताको लागि गुप्तिकृत पासवर्ड प्रयोग "
+#~ "गर्दछ\n"
+#~ "\t\t\t\tखाता\n"
+#~ " -s, --shell SHELL\t\t नयाँ प्रयोगकर्ता खाताको लागि लगइन शेल\n"
+#~ " -u, --uid UID\t\t\t नयाँ प्रयोगकर्ता खाताको लागि UID प्रयोग गर्न जोड दिन्छ\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "समाप्तिलाई पासवर्ड सेट गरियो ।"
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: पासवर्ड फाइलमा ताल्चा मार्न सकिदैन\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: पासवर्ड फाइल खोल्न सकिएन\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: स्याडो पासवर्ड फाइल ताल्चा मार्न सकिएन\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: स्याडो पासवर्ड फाइल खोल्न सकिएन\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: स्याडो पासवर्ड फाइल पुन:लेखन गर्न सकिएन\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: पासवर्ड फाइल पुन:लेखन गर्न सकिएन\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: स्याडो पासवर्ड फाइल अद्यावधिक गर्न सकिएन\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tपूरा नाम: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tकोठा नम्बर: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tकार्य फोन: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tगृह फोन: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "पासवर्ड फाइल ताल्चा मार्न सकिएन; फेरी पछि प्रयास गर्नुहोस् ।\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "पासवर्ड प्रविष्टिमा त्रुटि अद्यावधिक गरिदैछ ।\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "पासवर्ड फाइल परिवर्तनहरू कमिट गर्नु सकिएन ।\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "पासवर्ड फाइलबाट ताल्चा हटाउन सकिदैन ।\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: समूह फाइल ताल्चा मार्न सकिदैन\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: जि स्याडो फाइल ताल्चा मार्न सकिएन\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: स्याडो फाइल खोल्न सकिएन\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: स्याडो फाइल अद्यावधिक गर्दा त्रुटि\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: समूह प्रविष्टि अद्यावधिक गर्दा त्रुटि\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: रेखा %d: अज्ञात समूह %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: रेखा %d: प्रविष्टि अद्यावधिक गर्न सकिएन\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: स्याडो फाइल ताल्चा मार्न सकिएन\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: स्याडो फाइल अद्यावधिक गर्दा त्रुटि\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: पासवर्ड फाइल अद्यावधिक गर्दा त्रुटि\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: रेखा %d: अज्ञात प्रयोगकर्ता %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: रेखा %d: पासवर्ड प्रविष्टि अद्यावधिक गर्न सकिदैन\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: अज्ञात प्रयोगकर्ता\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "अज्ञात प्रयोगकर्ता: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "उपयोग: %s [-r|-R] समूह\n"
+
+#~ msgid " %s [-a user] group\n"
+#~ msgstr " %s [-एउटा प्रयोगकर्ता] समूह\n"
+
+#~ msgid " %s [-d user] group\n"
+#~ msgstr " %s [-d प्रयोगकर्ता] समूह\n"
+
+#~ msgid " %s [-A user,...] [-M user,...] group\n"
+#~ msgstr " %s [-A प्रयोगकर्ता,...] [-M प्रयोगकर्ता,...] समूह\n"
+
+#~ msgid " %s [-M user,...] group\n"
+#~ msgstr " %s [-M प्रयोगकर्ता,...] समूह\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: ताल्चा प्राप्त गर्न सकिएन\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: स्याडो ताल्चा प्राप्त गर्न सकिएन\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: स्याडो फाइल पुन:लेखन गर्न सकिएन\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: फाइल अनलग गर्न सकिएन\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: प्रविष्टि अद्यावधिक गर्न सकिएन\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: स्याडो प्रविष्टि अद्यावधिक गर्न सकिएन\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "अज्ञात समूह: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: फाइल खोल्न सकिएन\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: स्याडो फाइल खोल्न सकिएन\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "तपाईँ को हो ?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: अज्ञात सदस्य %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: नयाँ समूह प्रविष्टि थप गर्दा त्रुटि\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: समूह फाइल पुन:लेखन गर्न सकिएन\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: स्याडो समूह फाइल पुन:लेखन गर्न सकिएन\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: समूह फाइल ताल्चा मार्न असक्षम भयो\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: समूह फाइल खोल्न असक्षम भयो\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: स्याडो समूह फाइल ताल्चा मार्न असफल भयो\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: स्याडो समूह फाइल खोल्न असक्षम भयो\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u अद्वितिय होइन\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: समूह प्रविष्टि हटाउँदा त्रुटि\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: स्याडो समूह प्रविष्टि हटाउँदा त्रुटि\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: प्रयोगकर्ताको प्राइमेरी समूह हटाउन सकिएन ।\n"
+
+#, fuzzy
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "%s: PAM आधिकरण असफल भयो\n"
+
+#, fuzzy
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "%s: समूह फाइल ताल्चा मार्न असक्षम भयो\n"
+
+#, fuzzy
+#~ msgid "Cannot close group file\n"
+#~ msgstr "%s: समूह फाइल खोल्न सकिदैन\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s /etc/group मा फेला परेन\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u अद्वितिय GID होइन\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s अद्वितिय नाम होइन\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: पासवर्ड फाइल पुन:लेखन गर्न सकिएन\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: पासवर्ड फाइल ताल्चा मार्न असक्षम छ\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: पासवर्ड फाइल खोल्न असक्षम भयो\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: यस %s का लागि स्याडो प्रविष्टि अद्यावधिक गर्न सकिएन\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: यस %s समूहका लागि प्रविष्टि अद्यावधिक गर्न सकिएन\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: स्याडो समूह फाइल ताल्चा मार्न सकिदैन\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: स्याडो समूह फाइल खोल्न सकिएन\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: स्याडो समूह %s हटाउन सकिएन\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: स्याडो समूह फाइल अद्यावधिक गर्न सकिएन\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: स्याडो समूह फाइल मेट्न सकिएन\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "अज्ञात UID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "अज्ञात GID: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: समूह %s अवस्थित छैन\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: प्रयोगकर्ता %s अवस्थित छैन\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: अवैध प्रयोगकर्ता नाम '%s'\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: /etc/passwd ताल्चा मार्न सकिएन ।\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: /etc/passwd ताल्चा मार्न सकिएन ।\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: /etc/passwd ताल्चा मार्न सकिएन ।\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: /etc/passwd ताल्चा मार्न सकिएन ।\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: फाइलहरू खओल्न सकिएन\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: %s को लागि पासवर्ड प्रविष्टि अद्यावधिक गर्न सकिएन\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: पासवर्ड फाइल ताल्चा मार्न सकिएन\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: पासवर्ड फाइल खोल्न सकिएन\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: यो %s का लागि स्याडो प्रविष्टि हटाउन सकिएन\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: पासवर्ड फाइल अद्यावधिक हुन सकेन\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: प्रयोगकर्ता %s का लागि प्रविष्टि अद्यावधिक गर्न सकिएन\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: स्याडो पासवर्ड फाइल मेट्न सकिएन\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: अज्ञात GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: अज्ञात समूह %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: gshadow_group मा स्मृति भन्दा बाहिर\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: स्याडो पासवर्ड फाइल पुन:लेखन गर्न सकिएन\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: स्याडो पासवर्ड फाइल ताल्चा मार्न सकिएन\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: स्याडो पासवर्ड फाइल खोल्न सकिएन\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: समूह फाइल ताल्चा मार्दा त्रुटि\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: समूह फाइल खोल्दा त्रुटि\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: स्याडो समूह फाइल ताल्चा मार्दा त्रुटि\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: स्याडो समूह फाइल खोल्दा त्रुटि\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: नयाँ पासवर्ड प्रविष्टि थप्दा त्रुटि\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: नयाँ स्याडो पासवर्ड प्रविष्टि थप्दा त्रुटि\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s: चेतावनी: CREATE_HOME समर्थित छैन, कृपया सट्टामा -m प्रयोग गर्नुहोस् ।\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: समूह प्रविष्टि अद्यावधिक गर्दा त्रुटि\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: समूह प्रविष्टि अद्यावधिक गर्दा त्रुटि\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: समूह फाइल खोल्न सकिदैन\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: स्याडो समूह फाइल खोल्न सकिदैन\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: पासवर्ड प्रविष्टि मेट्दा त्रुटि\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: स्याडो पासवर्ड प्रविष्टि मेट्दा त्रुटि\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: नयाँ समूह प्रविष्टि थप गर्दा त्रुटि\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu अद्वितिय होइन\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: पासवर्ड प्रविष्टि परिवर्तन गर्दा त्रुटि\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: पासवर्ड प्रविष्टि हटाउँदा त्रुटि\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: स्याडो पासवर्ड प्रविष्टि हटाउँदा त्रुटि\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: अद्वितिय GID प्राप्त गर्न सकिएन\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr "'%'.200s' बाट %.100s'मा"
+
+#~ msgid " on '%.100s'"
+#~ msgstr "'%.100s' मा"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: रेखा %d: UID सिर्जना गर्न सकिएन\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: नाम %s अद्वितिय होइन\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ " -h, --help\t\tdisplay this help message and exit\n"
+#~ " -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "उपयोग: पासवर्ड परिवर्तन गर्नुहोस् [options]\n"
+#~ "\n"
+#~ "विकल्पहरू:\n"
+#~ " -e, --गुप्तिकृत\tआपूर्ति भएका पासवर्डहरू गुप्तिकृत छन\n"
+#~ " -h, --मद्दत\t\tले यो मद्दत संदेशलाई प्रदर्शित र बन्द गर्छ\n"
+#~ " -m, --md5\t\tले DES को सट्टामा MD5 प्रयोग गर्छ जब आपूर्ति भएको\n"
+#~ "\t\t\tपासवर्डहरू गुप्तिकृत भएको हुदैन\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "पासवर्ड फाइल होइन\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "माफ दिनुहोस् ।\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "माफ दिनुहोस्, %s को लागि अहिले पासवर्ड परिवर्तन गर्न सकिदैन ।\n"
+
+#~ msgid "Sorry."
+#~ msgstr "माफ गर्नुहोस्।"
diff --git a/po/nl.gmo b/po/nl.gmo
new file mode 100644
index 0000000..966449b
--- /dev/null
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
new file mode 100644
index 0000000..824991b
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,2957 @@
+# dutch po-file for shadow
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Bart Cornelis <cobaco@linux.be>, 2004, 2006.
+# Frans Spiesschaert <Frans.Spiesschaert@yucom.be>, 2014-2019.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow_1_4.8\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2019-12-23 23:33+0100\n"
+"Last-Translator: Frans Spiesschaert <Frans.Spiesschaert@yucom.be>\n"
+"Language-Team: Debian Dutch l10n Team <debian-l10n-dutch@lists.debian.org>\n"
+"Language: nl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Gtranslator 3.30.1\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"In %s staan meerdere regels met als naam '%s'. Gelieve dit met pwck of grpck "
+"te repareren.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "niet door libcrypt ondersteunde encryptiemethode? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr "configuratiefout - kan waarde %s niet ontleden: '%s'"
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Kon geen ruimte toewijzen voor de configuratie-info.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"configuratiefout - onbekend item '%s' (waarschuw een systeembeheerder)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr "%s: nscd werd niet normaal beëindigd (signaal %d)\n"
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr "%s: nscd sloot af met status %d\n"
+
+msgid "Password: "
+msgstr "Wachtwoord: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Wachtwoord van %s: "
+
+msgid "Cannot open audit interface.\n"
+msgstr "Kan auditinterface niet openen.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+"%s: kan context van vorige SELinux-proces niet verkrijgen: %s\n"
+"\n"
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr "[libsemanage]: %s\n"
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr "Kan geen instrument voor SELinux-beheer creëren\n"
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr "SELinux-beleid wordt niet beheerd\n"
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr "Kan het gebied met het SELinux-beleid niet lezen\n"
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr "Kan geen verbinding leggen om SELinux te beheren\n"
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr "Kan de SELinux-transactie niet beginnen\n"
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr "Kon de seuser van %s niet opvragen\n"
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr "Kon de serange van %s niet instellen\n"
+
+#, c-format
+msgid "Could not set sename for %s\n"
+msgstr "Kon de sename van %s niet instellen\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr "Kon de aanmeldkoppeling van %s niet veranderen\n"
+
+#, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "Kan voor %s geen SELinux-aanmeldkoppeling maken\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr "Kon voor %s geen naam instellen\n"
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr "Kon voor %s geen SELinuxgebruiker instellen\n"
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr "Kon voor %s geen aanmeldkoppeling toevoegen\n"
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr "Kan SELinuxbeheer niet initialiseren\n"
+
+#, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "Kan de gebruikerssleutel voor SELinux niet aanmaken\n"
+
+#, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "Kan de SELinuxgebruiker niet verifiëren\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr "Kon de gebruikerskoppeling in SELinux niet veranderen\n"
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr "Kan in SELinux geen gebruikerskoppeling toevoegen\n"
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr "Kan de SELinux-transactie niet vastleggen\n"
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+"Geen aanmeldkoppeling gedefinieerd voor %s. OK als de standaardkoppeling "
+"gebruikt werd\n"
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+"Aanmeldkoppeling van %s werd in het beleid gedefinieerd en kan niet gewist "
+"worden\n"
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr "Kon de aanmeldkoppeling van %s niet wissen"
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: onvoldoende geheugen\n"
+
+#, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: kan de status niet opvragen van %s: %s\n"
+
+#, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: %s is geen map en ook geen symbolische koppeling.\n"
+
+#, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: kan symbolische koppeling %s niet lezen: %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr "%s: verdacht lange symbolische koppeling: %s\n"
+
+#, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: kan map %s niet aanmaken: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: kan eigenaar van %s niet wijzigen: %s\n"
+
+#, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: kan modus van %s niet wijzigen: %s\n"
+
+#, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: ontkoppelen: %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: kan map %s niet verwijderen: %s\n"
+
+#, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: kan %s niet hernoemen naar %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: kan %s niet verwijderen: %s\n"
+
+#, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: kan symbolische koppeling %s niet aanmaken: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: kan eigenaars van %s niet wijzigen: %s\n"
+
+#, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: kan status van symbolische koppeling %s niet opvragen: %s\n"
+
+#, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: waarschuwing: gebruiker %s heeft geen tcb-schaduwbestand.\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+"%s: noodsituatie: het tcb-schaduwbestand van %s is geen gewoon bestand met "
+"st_nlink=1.\n"
+"Het account is vergrendeld gebleven.\n"
+
+#, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: mkdir: %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: kan bestand %s niet openen: %s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Waarschuwing: onbekende groep %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Waarschuwing: te veel groepen\n"
+
+msgid "Your password has expired."
+msgstr "Uw wachtwoord is vervallen."
+
+msgid "Your password is inactive."
+msgstr "Uw wachtwoord is niet actief."
+
+msgid "Your login has expired."
+msgstr "Uw gebruikersnaam is vervallen."
+
+msgid " Contact the system administrator."
+msgstr " Neem contact op met de systeembeheerder."
+
+msgid " Choose a new password."
+msgstr " Kies een nieuw wachtwoord."
+
+msgid "You must change your password."
+msgstr "U moet uw wachtwoord veranderen."
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Uw wachtwoord vervalt binnen %ld dagen.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Uw wachtwoord vervalt morgen."
+
+msgid "Your password will expire today."
+msgstr "Uw wachtwoord vervalt vandaag."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "Kan auditinterface niet openen - er wordt gestopt.\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Kan eigenaar of modus van tty stdin niet veranderen: %s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: ontgrendelen van %s is mislukt\n"
+
+#, c-format
+msgid "%s: "
+msgstr "%s: "
+
+msgid ": "
+msgstr ": "
+
+msgid "Environment overflow\n"
+msgstr "Omgeving wordt te groot\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "U mag $%s niet veranderen\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d mislukte poging sinds u zich de laatste keer aanmeldde.\n"
+"Die mislukte poging %s was op %s.\n"
+msgstr[1] ""
+"%d mislukte pogingen sinds u zich de laatste keer aanmeldde.\n"
+"De laatste mislukte poging %s was op %s.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: ongeldige configuratie: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr "%s: ongeldige configuratie: GID_MIN (%lu), GID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+"%s: er is een fout opgetreden bij de poging de voorkeurs-GID te gebruiken: "
+"%s\n"
+
+#, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "%s: toewijzen van geheugen is mislukt: %s\n"
+
+#, c-format
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: kan geen uniek systeem-GID verkrijgen (%s). Extra berichten worden "
+"onderdrukt.\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: kan geen uniek GID verkrijgen (%s). Extra berichten worden onderdrukt.\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr ""
+"%s: kan geen uniek GID verkrijgen (er zijn geen GID's meer beschikbaar)\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+"%s: Ongeldige configuratie: 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: Kan geen uniek ondergeschikt GID-bereik krijgen\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+"%s: Ongeldige configuratie: 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: Kan geen uniek ondergeschikt UID-bereik krijgen\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: ongeldige configuratie: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr "%s: ongeldige configuratie: UID_MIN (%lu), UID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+"%s: er is een fout opgetreden bij het proberen de voorkeurs-UID te "
+"gebruiken: %s\n"
+
+#, c-format
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: kan geen uniek systeem-UID verkrijgen (%s). Extra berichten worden "
+"onderdrukt.\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: kan geen uniek UID verkrijgen (%s). Extra berichten worden onderdrukt.\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr ""
+"%s: kan geen uniek UID verkrijgen (er zijn geen UID's meer beschikbaar)\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr "%s: Onvoldoende argumenten om %u-toewijzingen te vormen\n"
+
+#, c-format
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: Geheugentoewijzingsfout\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr "%s: subuid-overloop gedetecteerd.\n"
+
+#, c-format
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: Ongeldig omzettingsbestand %s opgegeven\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr "%s: Kon prctl(PR_SET_KEEPCAPS) niet uitvoeren\n"
+
+#, c-format
+msgid "%s: Could not seteuid to %d\n"
+msgstr "%s: Kon seteuid niet op %d instellen\n"
+
+#, c-format
+msgid "%s: Could not set caps\n"
+msgstr "%s: Kon hoofdletters niet instellen\n"
+
+#, c-format
+msgid "%s: snprintf failed!\n"
+msgstr "%s: snprintf is mislukt!\n"
+
+#, c-format
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: openen van %s mislukte: %s\n"
+
+#, c-format
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: schrijven naar %s mislukte: %s\n"
+
+msgid "Too many logins.\n"
+msgstr "Te veel aanmeldingen.\n"
+
+msgid "You have new mail."
+msgstr "U heeft nieuwe e-mail ontvangen."
+
+msgid "No mail."
+msgstr "Geen e-mail."
+
+msgid "You have mail."
+msgstr "U heeft e-mail."
+
+msgid "no change"
+msgstr "geen veranderingen"
+
+msgid "a palindrome"
+msgstr "een palindroom"
+
+msgid "case changes only"
+msgstr "enkel veranderingen van grote naar kleine letters (of omgekeerd)"
+
+msgid "too similar"
+msgstr "te gelijkaardig"
+
+msgid "too simple"
+msgstr "te simpel"
+
+msgid "rotated"
+msgstr "geroteerd"
+
+msgid "too short"
+msgstr "te kort"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Slecht wachtwoord: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() is mislukt, fout %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+msgid "passwd: password unchanged\n"
+msgstr "passwd: wachtwoord is niet veranderd\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: wachtwoord is met succes aangepast\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr "%s: PAM-modules die om echo vragen, worden niet ondersteund.\n"
+
+#, c-format
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: conversatie van het type %d wordt niet ondersteund.\n"
+
+#, c-format
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: (gebruiker %s) pam_start-fout %d\n"
+
+#, c-format
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr ""
+"%s: (gebruiker %s) pam_chauthtok() is mislukt, fout:\n"
+"%s\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Onjuist wachtwoord voor %s.\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr "%s: meerdere --root-opties\n"
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr "%s: optie '%s' vereist een argument\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: afgeven van rechten is mislukt (%s)\n"
+
+#, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: ongeldig chroot-pad '%s'\n"
+
+#, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: krijg geen toegang tot chroot-map %s: %s\n"
+
+#, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: kan chdir naar chroot-map %s niet uitvoeren: %s\n"
+
+#, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: chroot naar map %s lukt niet: %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"Ongeldige ENCRYPT_METHOD-waarde: '%s'.\n"
+"Terugvallen op standaard DES.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Kan niet van map veranderen (cd) naar '%s'\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Geen thuismap, er wordt aangemeld met HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Kan %s niet uitvoeren"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Ongeldige hoofdmap '%s'\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Kan de hoofdmap niet veranderen naar '%s'\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: gebruiker %s is momenteel aangemeld\n"
+
+#, c-format
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: gebruiker %s wordt momenteel door proces %d gebruikt\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Kan de naam van uw tty niet bepalen."
+
+msgid "No"
+msgstr "Nee"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Gebruik: %s [opties] LOGIN\n"
+"\n"
+"Opties:\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+" -d, --lastday LAATSTE_DAG datum van laatste wachtwoordwijziging\n"
+" instellen op LAATSTE_DAG\n"
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -E, --expiredate VERVAL_DAG account-vervaldag instellen op VERVAL_DAG\n"
+
+msgid " -h, --help display this help message and exit\n"
+msgstr " -h, --help deze hulptekst tonen en afsluiten\n"
+
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr ""
+" -i, --iso8601 JJJJ-MM-DD gebruiken bij het afdrukken van "
+"datums\n"
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -I, --inactive INACTIEF na het vervallen van het wachtwoord de\n"
+" niet-actieve periode instellen op INACTIEF\n"
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+" -l, --list verouderingsinformatie over accounts tonen\n"
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -m, --mindays MIN_DAGN het minimum aantal dagen voor een\n"
+" wachtwoordwijziging instellen op MIN_DAGN\n"
+
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -M, --maxdays MAX_DAGN het maximum aantal dagen voor een\n"
+" wachtwoordwijziging instellen op MAX_DAGN\n"
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr " -R, --root CHROOT_MAP basismap voor chroot\n"
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -W, --warndays MELD_DAGN aantal dagen dat voor wachtwoordverloop\n"
+" gewaarschuwd wordt, instellen op MELD_DAGN\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Voer de nieuwe waarde in of druk op Enter voor de standaardwaarde"
+
+msgid "Minimum Password Age"
+msgstr "Minimumleeftijd voor wachtwoord"
+
+msgid "Maximum Password Age"
+msgstr "Maximumleeftijd voor wachtwoord"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Laatste wachtwoordverandering (JJJJ-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Waarschuwing voor wachtwoordverval"
+
+msgid "Password Inactive"
+msgstr "Wachtwoord niet actief"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Vervaldatum van account (JJJJ-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Laatste wachtwoordverandering\t\t\t\t: "
+
+msgid "never"
+msgstr "nooit"
+
+msgid "password must be changed"
+msgstr "wachtwoord moet veranderd worden"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Wachtwoord vervalt\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Wachtwoord niet actief\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Account vervalt\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Minimum aantal dagen tussen wachtwoordwijzigingen\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Maximum aantal dagen tussen wachtwoordwijzigingen\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Aantal waarschuwingsdagen voor wachtwoordverval\t\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: ongeldige datum '%s'\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: ongeldig numeriek argument '%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: gebruik \"-l\" niet samen met andere opties\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: toegang geweigerd.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: kan uw gebruikersnaam niet bepalen.\n"
+
+#, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: PAM: %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: kan %s niet vergrendelen; probeer het later nog eens.\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: kan %s niet openen\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr ""
+"%s: er trad een fout op tijdens het wegschrijven van veranderingen naar %s\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: voorbereiden van het nieuwe %s-element '%s' is mislukt\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: het schaduwwachtwoordenbestand is afwezig\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: gebruiker '%s' bestaat niet in %s\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Verouderingsinformatie voor %s wordt aangepast\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: fout bij het aanpassen van de velden\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Gebruik: %s [opties] [LOGIN]\n"
+"\n"
+"Opties:\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+" -f, --full-name VOLLEDG_NAAM de volledige naam van de gebruiker wijzigen\n"
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+" -h, --home-phone TEL_THUIS thuistelefoonnummer van de gebruiker "
+"wijzigen\n"
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+" -o, --other OVERIGE_INFO overige GECOS-info van gebruiker wijzigen\n"
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+" -r, --room KAMER_NUMMER het kamernummer van de gebruiker wijzigen\n"
+
+msgid " -u, --help display this help message and exit\n"
+msgstr " -u, --help deze hulptekst tonen en afsluiten\n"
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+" -w, --work-phone TEL_WERK kantoortelefoonnummer van gebruiker "
+"wijzigen\n"
+
+msgid "Full Name"
+msgstr "Volledige naam"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "Kamernummer"
+
+msgid "Work Phone"
+msgstr "Telefoon werk"
+
+msgid "Home Phone"
+msgstr "Telefoon thuis"
+
+msgid "Other"
+msgstr "Varia"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Kan ID niet veranderen naar root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: naam bevat niet-ASCII tekens: '%s'\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: ongeldige naam: '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s: kamernummer bevat niet-ASCII tekens: '%s'\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: ongeldig kamernummer: '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: '%s' voor 'telefoon werk' is ongeldig\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: '%s' voor 'telefoon thuis' is ongeldig\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s' bevat niet-ASCII tekens\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s' bevat ongeldige tekens\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: gebruiker '%s' bestaat niet\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: kan gebruiker '%s' niet veranderen op NIS-client.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: '%s' is de NIS-master voor deze client.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "De gebruikersinformatie over %s wordt veranderd\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: velden zijn te lang\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Gebruik: %s [opties]\n"
+"\n"
+"Opties:\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr " -c, --crypt-method METHODE de encryptiemethode (een van %s)\n"
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+" -e, --encrypted ingevoerde wachtwoorden worden versleuteld\n"
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+" -m, --md5 het wachtwoord in klare tekst\n"
+" met het MD5-algoritme versleutelen\n"
+
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+" -s, --sha-rounds aantal rondes voor de SHA of BCRYPT\n"
+" encryptie-algoritmes\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: vlag %s is enkel toegelaten in combinatie met vlag %s\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: de vlaggen -c, -e, en -m zijn exclusief\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: niet-ondersteunde encryptiemethode: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: regel %d: regel is te lang\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: regel %d: nieuw wachtwoord ontbreekt\n"
+
+#, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr ""
+"%s: mislukte versleuteling van het wachtwoord met toegevoegde willekeurige "
+"bits (salt) '%s': %s\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: regel %d: groep '%s' bestaan niet\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: regel %d: kon het nieuwe %s-item '%s' niet voorbereiden\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: fout gevonden, aanpassingen genegeerd\n"
+
+#, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: (regel %d, gebruiker %s) wachtwoord niet gewijzigd\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: regel %d: gebruiker '%s' bestaat niet\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+" -s, --shell SHELL nieuwe login-shell voor gebruikersaccount\n"
+
+msgid "Login Shell"
+msgstr "Login-shell"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "U mag de shell voor '%s' niet aanpassen.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "De login-shell voor %s wordt aangepast\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: ongeldig element: %s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s: %s is geen geldige shell\n"
+
+#, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: waarschuwing: %s bestaat niet\n"
+
+#, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: waarschuwing: %s is niet uitvoerbaar\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+" -c, --check de wachtwoordvervaldatum van gebruiker\n"
+" controleren\n"
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+" -f, --force wachtwoordwijziging verplichten als het\n"
+" wachtwoord van de gebruiker vervallen is\n"
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: opties %s en %s zijn strijdig\n"
+
+#, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "%s: onverwachte parameter: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+" -a, --all aanmeldingsfouten van alle gebruikers tonen\n"
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+" -l, --lock-secs SEC het account gedurende SEC seconden\n"
+" vergrendelen na een aanmeldingsfout\n"
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+" -m, --maximum MAX het maximum aantal toegelaten\n"
+" aanmeldingsfouten instellen op MAX\n"
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+" -r, --reset tellers van aanmeldingsfouten\n"
+" terug op nul instellen\n"
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time DAGEN aanmeldingsfouten recenter dan DAGEN tonen\n"
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+" -u, --user GEBRUIKER/BEREIK aanmeldingsfouten tonen of tellers en "
+"limieten\n"
+" van aanmeldingsfouten beheren (indien\n"
+" gecombineerd met -r, -m of -l)\n"
+" voor de vermelde GEBRUIKERS(s)\n"
+
+#, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: kon regel betreffende UID %lu niet opvragen\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "Gebruiker Fouten Maximum Laatste Op\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr " [%lus over]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds grendel]"
+
+#, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr ""
+"%s: terugzetten van teller van aanmeldingsfouten mislukte voor UID %lu\n"
+
+#, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: instellen van een maximum voor UID %lu is mislukt\n"
+
+#, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: kan vergrendelingstijd voor UID %lu niet instellen\n"
+
+#, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "%s: onbekende gebruiker of bereik: %s\n"
+
+#, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: kan grootte van %s niet opvragen: %s\n"
+
+#, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: wegschrijven van %s is mislukt: %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Gebruik: %s [optie] GROEP\n"
+"\n"
+"Opties:\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr " -a, --add GEBRUIKER GEBRUIKER toevoegen aan GROEP\n"
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr " -d, --delete GEBRUIKER GEBRUIKER verwijderen uit GROEP\n"
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr " -Q, --root CHROOT_MAP basismap voor chroot\n"
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr " -r, --remove-password het wachtwoord van GROEP verwijderen\n"
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+" -R, --restrict toegang tot GROEP tot zijn leden beperken\n"
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr " -M, --members GEBRUIKER,... de ledenlijst van GROEP instellen\n"
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+" -A, --administrators ADMIN,...\n"
+" de lijst van beheerders van GROEP instellen\n"
+
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+"Opties kunnen niet gecombineerd worden, met uitzondering van de opties -A en "
+"-M.\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "De opties kunnen niet gecombineerd worden.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: shadow-groepswachtwoorden zijn vereist voor -A\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: groep '%s' bestaat niet in %s\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: fout bij het sluiten van alleen-lezen %s\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Het wachtwoord van groep %s wordt veranderd\n"
+
+msgid "New Password: "
+msgstr "Nieuw wachtwoord: "
+
+msgid "Re-enter new password: "
+msgstr "Nieuw wachtwoord bevestigen: "
+
+msgid "They don't match; try again"
+msgstr "Wachtwoorden komen niet overeen; probeer het nog eens"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: U kunt het later nog eens proberen\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Gebruiker %s wordt toegevoegd aan groep %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Gebruiker %s wordt verwijderd uit groep %s\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: gebruiker '%s' is geen lid van '%s'\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Is geen tty\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Gebruik: %s [opties] GROEP\n"
+"\n"
+"Opties:\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+" -f, --force met succes afsluiten als de groep al "
+"bestaat,\n"
+" en -g annuleren als de GID al in gebruik is\n"
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr " -g, --gid GID GID gebruiken voor de nieuwe groep\n"
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+" -K, --key SLEUTEL=WAARDE standaarden uit /etc/login.defs "
+"overschrijven\n"
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique het aanmaken van groepen met een identiek\n"
+" (niet-uniek) GID toestaan\n"
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+" -p, --password WACHTWOORD dit versleuteld wachtwoord gebruiken\n"
+" voor de nieuwe groep\n"
+
+msgid " -r, --system create a system account\n"
+msgstr " -r, --system een systeem-account aanmaken\n"
+
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr " -P, --prefix PREFIX_MAP map-prefix\n"
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: '%s' is geen geldige groepsnaam\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: ongeldige groeps-ID '%s'\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K vereist SLEUTEL=WAARDE\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: groep '%s' bestaat reeds\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s: GID '%lu' bestaat reeds\n"
+
+#, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: kan opschoningsdienst niet instellen.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+" -P, --prefix PREFIX_MAP prefix-map waarin de /etc/*-bestanden staan\n"
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+" -f, --force groep verwijderen, ook al is het\n"
+" de primaire groep van een gebruiker\n"
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: kan item '%s' uit %s niet verwijderen\n"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: kan de primaire groep van gebruiker '%s' niet verwijderen\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: groep '%s' bestaat niet\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: groep '%s' is een NIS-groep\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s is de NIS-master\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: gebruiker '%s' is reeds lid van '%s'\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: onvoldoende geheugen. Kan %s niet bijwerken.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Gebruik: %s [opties] [actie]\n"
+"\n"
+"Opties:\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+" -g, --group groepsnaam de groepsnaam in plaats van de groep van de\n"
+" gebruiker wijzigen(uitsluitend "
+"systeembeheerder)\n"
+
+msgid "\n"
+msgstr "\n"
+
+msgid "Actions:\n"
+msgstr "Acties:\n"
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+" -a, --add gebruikersnaam gebruikersnaam toevoegen als groepslid\n"
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+" -d, --delete gebruikersnaam gebruikersnaam als groepslid verwijderen\n"
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr " -p, --purge alle leden uit de groep verwijderen\n"
+
+msgid " -l, --list list the members of the group\n"
+msgstr " -l, --list de leden van de groep weergeven\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: uw groepsnaam komt niet overeen met uw gebruikersnaam\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s: enkel de systeembeheerder kan de optie -g/--group gebruiken\n"
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr " -g, --gid GID het groeps-ID naar GID veranderen\n"
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr " -n, --new-name NIEUWE_GROEP de naam veranderen naar NIEUWE_GROEP\n"
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique gebruik van een identiek (niet-uniek) GID "
+"toestaan\n"
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+" -p, --password WACHTWOORD het wachtwoord veranderen naar dit "
+"(versleuteld)\n"
+" WACHTWOORD\n"
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: ongeldige groepsnaam '%s'\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: groep %s is een NIS-groep\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: onbekende gebruiker %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Gebruik: %s [opties] [group [gshadow]]\n"
+"\n"
+"Opties:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Gebruik: %s [opties] [group]\n"
+"\n"
+"Opties:\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+" -r, --read-only fouten en waarschuwingen tonen\n"
+" maar bestanden niet veranderen\n"
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr " -s, --sort elementen volgens UID sorteren\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s en -r zijn niet compatibel\n"
+
+msgid "invalid group file entry"
+msgstr "ongeldige regel in het bestand group"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "regel '%s' verwijderen? "
+
+msgid "duplicate group entry"
+msgstr "identiek element in het bestand group"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "ongeldige groepsnaam '%s'\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "ongeldig groeps-ID '%lu'\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "groep %s: geen gebruiker %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "lid '%s' verwijderen? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "geen element in %s dat overeenkomt met dat in het bestand group\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "groep '%s' toevoegen aan %s? "
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"groep %s heeft een regel in %s, maar het wachtwoordveld in %s is niet 'x'\n"
+
+msgid "invalid shadow group file entry"
+msgstr "ongeldig element in het shadow-groepsbestand"
+
+msgid "duplicate shadow group entry"
+msgstr "identiek element in shadow-groepsbestand"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "shadow-groep %s: geen gebruiker %s met systeembeheerdersrechten \n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr ""
+"over systeembeheerdersrechten beschikkende gebruiker '%s' verwijderen? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "shadow-groep %s: geen gebruiker %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: de bestanden zijn bijgewerkt\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: geen aanpassingen\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: kan %s niet verwijderen\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Gebruik: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Gebruik: id\n"
+
+msgid " groups="
+msgstr " groepen="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+" -b, --before DAGEN enkel lastlog-items ouder dan DAGEN tonen\n"
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+" -C, --clear lastlog-informatie over een gebruiker\n"
+" leegmaken (enkel met -u te gebruiken)\n"
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+" -S, --set lastlog-informatie instellen op de\n"
+" huidige tijd (enkel met -u te gebruiken)\n"
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time DAGEN enkel lastlog-items recenter dan DAGEN "
+"tonen\n"
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+" -u, --user GEBRUIKER lastlog-informatie over GEBRUIKER tonen\n"
+
+msgid "Username Port From Latest"
+msgstr "Gebruikersnaam Poort Vanaf Laatste"
+
+msgid "Username Port Latest"
+msgstr "Gebruikersnaam Poort Laatste"
+
+msgid "**Never logged in**"
+msgstr "**Heeft zich nog nooit aangemeld**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+"%s: Geselecteerde uid(s) zijn hoger dan LASTLOG_UID_MAX (%lu),\n"
+"\tmogelijk is de uitvoer niet correct.\n"
+
+#, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s: Bijwerken van de gegevens voor UID %lu mislukte\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+"%s: Geselecteerde uid(s) zijn hoger dan LASTLOG_UID_MAX (%lu),\n"
+"\tze zullen niet bijgewerkt worden.\n"
+
+#, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s: Bijwerken van lastlog-bestand mislukte\n"
+
+#, c-format
+msgid "%s: Option -C cannot be used together with option -S\n"
+msgstr "%s: Optie -C kan niet samen met optie -S gebruikt worden\n"
+
+#, c-format
+msgid "%s: Options -C and -S require option -u to specify the user\n"
+msgstr "%s: Opties -C en -S vereisen optie -u om de gebruiker aan te duiden\n"
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Gebruik: %s [-p] [naam]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h computer] [-f naam]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r computer\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr "configuratiefout - kan waarde %s niet ontleden: '%d'"
+
+msgid "Invalid login time"
+msgstr "Ongeldig aanmeldingstijdstip"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Systeem gesloten wegens routineonderhoud"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Verbinding verbreken omzeild -- aanmelden is toegelaten voor root.]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr "%s: Kan mogelijk niet functioneren zonder effectieve root\n"
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Er is geen utmp-item. U dient \"login\" uit te voeren vanaf het laagste "
+"niveau \"sh\""
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Aanmelden verliep na %u seconden.\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "aanmelden: PAM-fout, er wordt afgebroken: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s gebruikersnaam: "
+
+msgid "login: "
+msgstr "gebruikersnaam: "
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Maximaal aantal pogingen overschreden (%u)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "aanmelden: afgebroken op verzoek van PAM\n"
+
+msgid "Login incorrect"
+msgstr "Gebruikersnaam is onjuist"
+
+#, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "Kan gebruiker (%s) niet vinden\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s gebruikersnaam: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: nieuw proces beginnen is mislukt: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSCTTY is mislukt op %s"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr ""
+"Waarschuwing: aanmelden is opnieuw geactiveerd na tijdelijke uitsluiting."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Laatst aangemeld: %s om %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Laatst aangemeld: %.19s om %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " vanaf %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"aanmeldtijd overschreden\n"
+"\n"
+
+msgid "Usage: logoutd\n"
+msgstr "Gebruik: logoutd\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr "%s: gid-bereik [%lu-%lu) -> [%lu-%lu) niet toegestaan\n"
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+"gebruik: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> "
+"<count> ] ... \n"
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr "%s: kernel ondersteunt setgroups-restricties niet\n"
+
+#, c-format
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr "%s: kon proces-setgroups niet openen: %s\n"
+
+#, c-format
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: setgroups lezen mislukte: %s\n"
+
+#, c-format
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: setgroups opzoeken mislukte: %s\n"
+
+#, c-format
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: setgroups-beleid %s mislukte: %s\n"
+
+#, c-format
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: Kon proc-map voor doel %u niet openen\n"
+
+#, c-format
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: Kon status van map voor doel %u niet opvragen\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+"%s: Doel %u is van een andere gebruiker: uid:%lu pw_uid:%lu st_uid:%lu, gid:"
+"%lu pw_gid:%lu st_gid:%lu\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Gebruik: newgrp [-] [groep]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Gebruik: sg groep [[-c] commando]\n"
+
+#, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr ""
+"%s: versleuteling van het wachtwoord met eerder toegevoegde willekeurige "
+"bits (salt) mislukte: %s\n"
+
+msgid "Invalid password.\n"
+msgstr "Ongeldig wachtwoord.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: nieuw proces beginnen is mislukt: %s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: GID '%lu' bestaat niet\n"
+
+msgid "too many groups\n"
+msgstr "te veel groepen\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr "%s: uid-bereik [%lu-%lu) -> [%lu-%lu) niet toegestaan\n"
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+"gebruik: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> "
+"<count> ] ... \n"
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+"%s: Doelproces %u is van een andere gebruiker: uid:%lu pw_uid:%lu st_uid:"
+"%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+
+msgid " -b, --badnames allow bad names\n"
+msgstr " -b, --badnames slechte namen toestaan\n"
+
+msgid " -r, --system create system accounts\n"
+msgstr " -r, --system systeem-accounts aanmaken\n"
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: groep '%s' is een shadow-groep, maar bestaat niet in /etc/group\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: ongeldig gebruikers-ID '%s'\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: ongeldige gebruikersnaam '%s'\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: regel %d: ongeldige regel\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: kan gegevens over gebruiker %s niet bijwerken (niet in de passwd-"
+"database)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: regel %d: kan de gebruiker niet aanmaken\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: regel %d: kan de groep niet aanmaken\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: regel %d: gebruiker '%s' bestaat niet in %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: regel %d: kan wachtwoord niet bijwerken\n"
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: regel %d: mkdir %s is mislukt: %s\n"
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: regel %d: chown %s is mislukt: %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: regel %d: kan element niet bijwerken\n"
+
+#, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: voorbereiden van het nieuwe %s-element is mislukt\n"
+
+#, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: kan ondergeschikt gebruikersbereik niet vinden\n"
+
+#, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: kan ondergeschikt groepsbereik niet vinden\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+" -a, --all wachtwoordstatus van alle accounts "
+"mededelen\n"
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+" -d, --delete wachtwoord van vermeld account verwijderen\n"
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+" -e, --expire wachtwoord van vermeld account doen "
+"verlopen\n"
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+" -k, --keep-tokens wachtwoord enkel wijzigen indien vervallen\n"
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -i, --inactive INACTIEF na het vervallen van het wachtwoord de\n"
+" niet-actieve periode instellen op INACTIEF\n"
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr ""
+" -l, --lock wachtwoord van vermeld account vergrendelen\n"
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -n, --mindays MIN_DAGEN minimum aantal dagen vooraleer het "
+"wachtwoord\n"
+" gewijzigd mag worden instellen op MIN_DAGEN\n"
+
+msgid " -q, --quiet quiet mode\n"
+msgstr " -q, --quiet stille modus\n"
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+" -r, --repository DEPOT wachtwoord in opslagplaats DEPOT wijzigen\n"
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+" -S, --status wachtwoordstatus voor vermeld account "
+"meedelen\n"
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+" -u, --unlock wachtwoord van vermeld account ontgrendelen\n"
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -w, --warndays WAARSCH_DAGEN aantal waarschuwingsdagen voor het verlopen\n"
+" van het wachtwoord instellen op "
+"WAARSCH_DAGEN\n"
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -x, --maxdays MAX_DAGEN maximum aantal dagen voor "
+"wachtwoordwijziging\n"
+" instellen op MAX_DAGEN\n"
+
+msgid "Old password: "
+msgstr "Oud wachtwoord: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Voer het nieuwe wachtwoord in (minimaal %d tekens)\n"
+"Gebruik een combinatie van grote en kleine letters en cijfers.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Voer het nieuwe wachtwoord in (minimaal %d en maximaal %d tekens)\n"
+"Gebruik een combinatie van grote en kleine letters en cijfers.\n"
+
+msgid "New password: "
+msgstr "Nieuw wachtwoord: "
+
+msgid "Try again."
+msgstr "Probeer het nog eens."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Waarschuwing: zwak wachtwoord (voer het nogmaals in om het toch te "
+"gebruiken)."
+
+msgid "They don't match; try again.\n"
+msgstr "Ze komen niet overeen; probeer het nog eens.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Het wachtwoord van %s kan niet veranderd worden.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Het wachtwoord van %s kan nog niet veranderd worden.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: het wachtwoord ontgrendelen zou leiden tot een account zonder "
+"wachtwoord.\n"
+"U zou een wachtwoord moeten instellen met 'usermod -p' om het wachtwoord "
+"van\n"
+"dit account te ontgrendelen.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: depot %s wordt niet ondersteund\n"
+
+#, c-format
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr ""
+"%s: root heeft volgens SELinux niet het recht om het wachtwoord van %s te "
+"wijzigen\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: U mag wachtwoordinformatie van %s niet bekijken of aanpassen.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Wachtwoord van %s wordt veranderd\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Het wachtwoord van %s is niet veranderd.\n"
+
+#, c-format
+msgid "%s: password changed.\n"
+msgstr "%s: wachtwoord is veranderd.\n"
+
+#, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "%s: gegevens in verband met wachtwoordverloop zijn gewijzigd.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Gebruik: %s [opties] [passwd]\n"
+"\n"
+"Opties:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Gebruik: %s [opties] [passwd [shadow]]\n"
+"\n"
+"Opties:\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr " -q, --quiet enkel fouten rapporteren\n"
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+"%s: alternatief shadow-bestand niet toegestaan als USE_TCB actief is.\n"
+
+msgid "invalid password file entry"
+msgstr "ongeldige regel in het wachtwoordbestand"
+
+msgid "duplicate password entry"
+msgstr "identieke regel in wachtwoordbestand"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "ongeldige gebruikersnaam '%s'\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "ongeldig gebruikers-ID '%lu'\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "gebruiker '%s': geen groep %lu\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "gebruiker '%s': map '%s' bestaat niet\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "gebruiker '%s': programma '%s' bestaat niet\n"
+
+#, c-format
+msgid "no tcb directory for %s\n"
+msgstr "geen tcb-map voor %s\n"
+
+#, c-format
+msgid "create tcb directory for %s?"
+msgstr "tcb-map aanmaken voor %s?"
+
+#, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "tcb-map aanmaken voor %s is mislukt\n"
+
+#, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: kan %s niet vergrendelen.\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "geen element in %s dat overeenkomt met dat in het wachtwoordbestand\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "gebruiker '%s' toevoegen in %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"gebruiker %s heeft een regel in %s, maar zijn wachtwoordveld in %s is niet "
+"'x'\n"
+
+msgid "invalid shadow password file entry"
+msgstr "ongeldige regel in het shadow-wachtwoordbestand"
+
+msgid "duplicate shadow password entry"
+msgstr "identieke regel in het shadow-wachtwoordbestand"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "gebruiker %s: laatste wachtwoordverandering is in de toekomst\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: kan regels van %s niet sorteren\n"
+
+#, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: kan niet functioneren als tcb actief is\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: modus van %s instellen op 0600 is mislukt\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Gebruik van 'su' is voor dat account NIET TOEGESTAAN.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Wachtwoordauthenticatie is omzeild.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Gelieve uw EIGEN wachtwoord in te voeren voor authenticatie.\n"
+
+#, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: kan geen nieuwe gebruikersshell starten\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr "%s: signaal werkt slecht\n"
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr "%s: signaalmaskering werkt slecht\n"
+
+msgid "Session terminated, terminating shell..."
+msgstr "Sessie beëindigd, shell wordt afgesloten..."
+
+#, c-format
+msgid " ...killed.\n"
+msgstr " ...gedood.\n"
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr " ...wachten op het beëindigen van kind-proces.\n"
+
+msgid " ...terminated.\n"
+msgstr " ...beëindigd.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"Gebruik: su [opties] [-] [gebruikersnaam [argn]]\n"
+"\n"
+"Opties:\n"
+" -c, --command COMMANDO COMMANDO meegeven aan de aangeroepen shell\n"
+" -h, --help deze hulptekst tonen en afsluiten\n"
+" -, -l, --login van de shell een aanmeld-shell maken\n"
+" -m, -p,\n"
+" --preserve-environment omgevingsvariabelen niet opnieuw instellen\n"
+" en dezelfde shell behouden\n"
+" -s, --shell SHELL SHELL gebruiken i.p.v. de opgegeven\n"
+" standaardshell in /etc/passwd\n"
+"\n"
+"Als geen gebruikersnaam opgegeven werd, uitgaan van root.\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Genegeerd)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "U bent niet gerechtigd om 'su %s' uit te voeren\n"
+
+msgid "(Enter your own password)"
+msgstr "(U dient uw eigen wachtwoord in te voeren)"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: authenticatie is mislukt\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s: U bent niet gerechtigd om op dat tijdstip 'su' uit te voeren\n"
+
+#, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "Geen wachtwoordregel voor gebruiker '%s'\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: dient uitgevoerd te worden vanaf een terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: fout %d\n"
+
+#, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: kan de sturende terminal niet sluiten\n"
+
+#, c-format
+msgid "Cannot execute %s\n"
+msgstr "Kan %s niet uitvoeren\n"
+
+msgid "No password file"
+msgstr "Geen wachtwoordbestand"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY is mislukt"
+
+msgid "No password entry for 'root'"
+msgstr "Geen wachtwoordregel voor 'root'"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"U dient control-d in te typen om op de normale manier op te starten,\n"
+"(of het beheerderswachtwoord om de systeemonderhoudsmodus in te gaan):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Systeemonderhoudsmodus wordt opgestart"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr "%s: %s was aangemaakt, maar kon niet verwijderd worden\n"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr "%s: de %s-instellingen in %s zullen genegeerd worden\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: kan geen nieuw bestand met standaardwaarden aanmaken: %s\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: kan geen nieuw bestand met standaardwaarden aanmaken\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: kan het nieuwe bestand met standaardwaarden niet openen\n"
+
+#, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: de regel in %s is te lang: %s..."
+
+#, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: kan back-upbestand (%s) niet aanmaken: %s\n"
+
+#, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: hernoemen: %s: %s\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: groep '%s' is een NIS-groep.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: te veel groepen gespecificeerd (max %d).\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Gebruik: %s [opties] GEBRUIKERSNAAM\n"
+" %s -D\n"
+" %s -D [opties]\n"
+"\n"
+"Opties:\n"
+
+msgid " --badnames do not check for bad names\n"
+msgstr " --badnames niet op slechte namen controleren\n"
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+" -b, --base-dir BASIS_MAP basismap voor de persoonlijke map van het\n"
+" nieuwe account\n"
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+" --btrfs-subvolume-home BTRFS-onderdeel als persoonlijke map "
+"gebruiken\n"
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr " -c, --comment COMMENTAAR GECOS-veld van het nieuwe account\n"
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr ""
+" -d, --home-dir THUIS_MAP persoonlijke map van het nieuwe account\n"
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+" -D, --defaults standaardconfiguratie van useradd\n"
+" tonen of wijzigen\n"
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+" -e, --expiredate VERVAL_DATUM datum waarop het nieuwe account verloopt\n"
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+" -f, --inactive INACTIEF periode waarin het wachtwoord van het\n"
+" nieuwe account niet-actief kan zijn\n"
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+" -g, --gid GROUP naam of ID van de primaire groep van het\n"
+" nieuwe account\n"
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+" -G, --groups GROEPEN lijst van bijkomende groepen voor het "
+"nieuwe\n"
+" account\n"
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+" -k, --skel SKELET_MAP deze alternatieve skelet-map gebruiken\n"
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+" -l, --no-log-init de gebruiker niet toevoegen aan de\n"
+" gegevensbestanden van lastlog en faillog\n"
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+" -m, --create-home de persoonlijke map voor de gebruiker "
+"aanmaken\n"
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+" -M, --no-create-home persoonlijke map voor gebruiker niet "
+"aanmaken\n"
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+" -N, --no-user-group geen groep aanmaken met dezelfde naam\n"
+" als de gebruiker\n"
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique toelaten om gebruikers aan te maken\n"
+" met identiek (niet-uniek) UID\n"
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+" -p, --password WACHTWOORD versleuteld wachtwoord voor het nieuwe "
+"account\n"
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr ""
+" -s, --shell SHELL aanmeld-shell voor het nieuwe account\n"
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr " -u, --uid UID gebruikers-ID van het nieuwe account\n"
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+" -U, --user-group een groep maken met de naam van de "
+"gebruiker\n"
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+" -Z, --selinux-user SEUSER een specifieke SEUSER gebruiken om de\n"
+" gebruikerskoppeling voor SELinux te maken\n"
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: ongeldige basismap '%s'\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: ongeldig commentaar '%s'\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: ongeldige persoonlijke map '%s'\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: shadow-wachtwoorden zijn vereist voor -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: shadow-wachtwoorden zijn vereist voor -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: ongeldig veld '%s'\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: ongeldige shell '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Warning: %s is not executable\n"
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: waarschuwing: %s is niet uitvoerbaar\n"
+
+#, c-format
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s: -Z kan niet gebruikt worden met --prefix\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr "%s: -Z vereist dat SELinux geactiveerd is in de kernel\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+"%s: opnieuw instellen van het faillog-item voor UID %lu is mislukt: %s\n"
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+"%s: opnieuw instellen van de lastlog-item voor UID %lu is mislukt: %s\n"
+
+#, c-format
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr ""
+"%s: opnieuw instellen van het tallylog-item voor gebruiker \"%s\" is "
+"mislukt\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: voorbereiden van het nieuwe %s-item is mislukt\n"
+
+#, c-format
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: fout tijdens dupliceren van tekenreeks %s\n"
+
+#, c-format
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: kan SELinux-context voor persoonlijke map %s niet instellen\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr "%s: fout tijdens dupliceren van tekenreeks in BTRFS-controle %s\n"
+
+#, c-format
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: persoonlijke map \"%s\" moet aangekoppeld zijn op BTRFS\n"
+
+#, c-format
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "%s: creëren van BTRFS-onderdeel is mislukt: %s\n"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: kan map %s niet aanmaken\n"
+
+#, c-format
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: waarschuwing: chown uitvoeren op `%s' is mislukt: %m\n"
+
+#, c-format
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: waarschuwing: chmod uitvoeren op `%s' is mislukt: %m\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr "%s: kan SELinux-context voor bestandscreatie niet opnieuw instellen\n"
+
+msgid "Creating mailbox file"
+msgstr "Postvak-bestand wordt aangemaakt"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"De 'mail'-groep is niet gevonden. Het postvak-bestand van de gebruiker wordt "
+"aangemaakt met rechten-modus 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Bestandsrechten van postvak-bestand worden ingesteld"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: gebruiker '%s' bestaat al\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: groep %s bestaat - om deze gebruiker aan die groep toe te voegen dient u "
+"-g te gebruiken.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: kan gebruiker niet aanmaken\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %lu is niet uniek\n"
+
+#, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: tcb-map voor %s aanmaken is mislukt\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: kan groep niet aanmaken\n"
+
+#, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: kan ondergeschikte gebruiker-ID's niet aanmaken\n"
+
+#, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: kan ondergeschikte groep-ID's niet aanmaken\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: waarschuwing: de persoonlijke map %s bestaat reeds.\n"
+"%s: Er worden geen bestanden uit de skelet-map naartoe gekopieerd.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+"%s: waarschuwing: de koppeling van gebruikersnaam %s aan SELinux-gebruiker "
+"%s is mislukt.\n"
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+" -f, --force geforceerde verwijdering van bestanden,\n"
+" ook als ze geen eigendom van gebruiker zijn\n"
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr " -r, --remove thuismap en postvak verwijderen\n"
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+" -Z, --selinux-user elke koppeling met een SELinux-gebruiker\n"
+" verwijderen voor de gebruiker\n"
+
+#, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr ""
+"%s: groep %s wordt niet verwijderd omdat het niet de primaire groep is van "
+"gebruiker %s.\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr "%s: groep %s wordt niet verwijderd omdat hij nog andere leden telt.\n"
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: groep %s is de primaire groep van een andere gebruiker en wordt niet "
+"verwijderd.\n"
+
+#, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "%s: kan item %lu niet verwijderen uit %s\n"
+
+#, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: %s postvak (%s) niet gevonden\n"
+
+#, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: waarschuwing: kan %s niet verwijderen: %s\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s is niet van %s, wordt niet verwijderd\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr "%s: kan geen geheugen toekennen, tcb-item van %s niet verwijderd.\n"
+
+#, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: afgeven van rechten is mislukt: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: kan de inhoud van %s niet verwijderen: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: kan de tcb-bestanden voor %s niet verwijderen: %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: gebruiker %s is een NIS-gebruiker\n"
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: %s persoonlijke map (%s) niet gevonden\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: map %s wordt niet verwijderd (het zou de persoonlijke map van gebruiker "
+"%s verwijderen)\n"
+
+#, c-format
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: fout tijdens verwijderen van onderdeel %s\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: fout tijdens verwijderen van map %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+"%s: waarschuwing: verwijderen van de koppeling van gebruikersnaam %s aan een "
+"SELinux-gebruiker is mislukt.\n"
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr " -c, --comment COMMENTAAR nieuwe inhoud van het GECOS-veld\n"
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+" -d, --home THUIS_MAP nieuwe persoonlijke map voor "
+"gebruikersaccount\n"
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -e, --expiredate VERVAL_DATUM account-vervaldag instellen op "
+"VERVAL_DATUM\n"
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -f, --inactive INACTIEF na het verlopen van het wachtwoord de niet-\n"
+" actieve periode ervan instellen op INACTIEF\n"
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+" -g, --gid GROEP het gebruik van GROEP als nieuwe primaire\n"
+" groep forceren\n"
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr " -G, --groups GROEPEN nieuwe lijst van bijkomende GROEPEN\n"
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+" -a, --append gebruiker toevoegen aan de bijkomende "
+"GROEPEN,\n"
+" vermeld bij de optie -G, zonder hem/haar\n"
+" te verwijderen uit andere groepen\n"
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr " -l, --login NIEUWE_NAAM nieuwe waarde voor de gebruikersnaam\n"
+
+msgid " -L, --lock lock the user account\n"
+msgstr " -L, --lock het gebruikersaccount vergrendelen\n"
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+" -m, --move-home inhoud van persoonlijke map verplaatsen "
+"naar\n"
+" de nieuwe locatie (enkel gebruiken met -d)\n"
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique gebruik van een identiek (niet-uniek)\n"
+" UID toestaan\n"
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+" -p, --password WACHTWOORD versleuteld wachtwoord als nieuw wachtwoord\n"
+" gebruiken\n"
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr " -u, --uid UID nieuw UID voor het gebruikersaccount\n"
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr " -U, --unlock het gebruikersaccount ontgrendelen\n"
+
+msgid " -v, --add-subuids FIRST-LAST add range of subordinate uids\n"
+msgstr ""
+" -v, --add-subuids VAN-TOT bereik van ondergeschikte UID's toevoegen\n"
+
+msgid " -V, --del-subuids FIRST-LAST remove range of subordinate uids\n"
+msgstr ""
+" -V, --del-subuids VAN-TOT bereik van ondergeschikte UID's verwijderen\n"
+
+msgid " -w, --add-subgids FIRST-LAST add range of subordinate gids\n"
+msgstr ""
+" -w, --add-subgids VAN-TOT bereik van ondergeschikte GID's toevoegen\n"
+
+msgid " -W, --del-subgids FIRST-LAST remove range of subordinate gids\n"
+msgstr ""
+" -W, --del-subgids VAN-TOT bereik van ondergeschikte GID's verwijderen\n"
+
+msgid ""
+" -Z, --selinux-user SEUSER new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+" -Z, --selinux-user SEUSER nieuwe koppeling met SELinux-gebruiker voor\n"
+" het gebruikersaccount\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: het wachtwoord van de gebruiker ontgrendelen zou resulteren in een "
+"account zonder wachtwoord.\n"
+"U zou een wachtwoord moeten instellen met 'usermod -p' om het wachtwoord van "
+"deze gebruiker te ontgrendelen.\n"
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: gebruiker '%s' bestaat al in %s\n"
+
+#, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: ongeldig bereik '%s' van ondergeschikte UID's\n"
+
+#, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: ongeldig bereik '%s' van ondergeschikte GID's\n"
+
+#, c-format
+msgid "%s: no options\n"
+msgstr "%s: geen opties\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: de opties -L, -p, en -U zijn exclusief\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: shadow-wachtwoorden zijn vereist voor opties -e en -f\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: UID '%lu' bestaat reeds\n"
+
+#, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr "%s: %s bestaat niet, u kunt de vlaggen %s of %s niet gebruiken\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: map %s bestaat al\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+"%s: De vroegere persoonlijke map (%s) was geen map. Ze werd niet verwijderd "
+"en er werden geen persoonlijke mappen aangemaakt.\n"
+
+#, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: de eigenaar van de persoonlijke map wijzigen is mislukt"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+"%s: fout: kan onderdeel niet verplaatsen van %s naar %s - ander apparaat\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: waarschuwing: volledig verwijderen van de oude persoonlijke map %s is "
+"mislukt"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: kan map %s niet hernoemen naar %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: kopiëren van het lastlog-item van gebruiker %lu naar gebruiker %lu is "
+"mislukt: %s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: kopiëren van het faillog-item van gebruiker %lu naar gebruiker %lu is "
+"mislukt: %s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: waarschuwing: %s is niet van %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "aanpassen van de postvak-eigenaar is mislukt"
+
+msgid "failed to rename mailbox"
+msgstr "hernoemen van het postvak is mislukt"
+
+#, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s: verwijderen van UID-bereik %lu-%lu van '%s' is mislukt\n"
+
+#, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s: toevoegen van UID-bereik %lu-%lu aan '%s' is mislukt\n"
+
+#, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s: verwijderen van GID-bereik %lu-%lu van '%s' is mislukt\n"
+
+#, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s: toevoegen van GID-bereik %lu-%lu aan '%s' is mislukt\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"U heeft %s gewijzigd.\n"
+"Uit consistentieoverwegingen zou u %s moeten wijzigen.\n"
+"Gebruik het commando '%s' om dit te doen.\n"
+
+msgid " -g, --group edit group database\n"
+msgstr " -g, --group de groepsdatabase bewerken\n"
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr " -p, --passwd de wachtwoorddatabase bewerken\n"
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+" -s, --shadow de shadow- of de gshadow-database bewerken\n"
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+" -u, --user tcb-shadow-bestand van de gebruiker "
+"bewerken\n"
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: verwijderen van %s is mislukt\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: %s is niet veranderd\n"
+
+msgid "failed to create scratch directory"
+msgstr "aanmaken van initiële map is mislukt"
+
+msgid "failed to drop privileges"
+msgstr "afgeven van rechten is mislukt"
+
+msgid "Couldn't get file context"
+msgstr "Kon bestandscontext niet verkrijgen"
+
+msgid "setfscreatecon () failed"
+msgstr "setfscreatecon () is mislukt"
+
+msgid "failed to gain privileges"
+msgstr "verwerven van rechten is mislukt"
+
+msgid "Couldn't lock file"
+msgstr "Kon bestand niet vergrendelen"
+
+msgid "Couldn't make backup"
+msgstr "Kon geen reservekopie maken"
+
+#, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s: %s: %s\n"
+
+#, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr "%s: %s sloot af met status %d\n"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr "%s: %s werd vernietigd door signaal %d\n"
+
+msgid "failed to open scratch file"
+msgstr "initieel bestand openen is mislukt"
+
+msgid "failed to unlink scratch file"
+msgstr "ontkoppelen van initieel bestand is mislukt"
+
+msgid "failed to stat edited file"
+msgstr "opvragen van status van bewerkt bestand is mislukt"
+
+msgid "failed to allocate memory"
+msgstr "geheugen toekennen is mislukt"
+
+msgid "failed to create backup file"
+msgstr "maken van reservekopie is mislukt"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: kan %s niet herstellen: %s (uw aanpassingen staan in %s)\n"
+
+#, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: tcb-map van %s vinden is mislukt\n"
diff --git a/po/nn.gmo b/po/nn.gmo
new file mode 100644
index 0000000..a65054c
--- /dev/null
+++ b/po/nn.gmo
Binary files differ
diff --git a/po/nn.po b/po/nn.po
new file mode 100644
index 0000000..592aa80
--- /dev/null
+++ b/po/nn.po
@@ -0,0 +1,3164 @@
+# translation of shadow.po to Norwegian (Nynorsk)
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Håvard Korsvoll <korsvoll@skulelinux.no>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2004-06-03 21:41+0200\n"
+"Last-Translator: Håvard Korsvoll <korsvoll@skulelinux.no>\n"
+"Language-Team: Norwegian (Nynorsk) <i18n-nn@lister.ping.uio.no>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.3.1\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Klarte ikkje finna plass for oppsettsinformasjon.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "oppsettsfeil - ukjent element «%s» (gje melding til administrator)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr ""
+
+msgid "Password: "
+msgstr "Passord: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s sitt passord: "
+
+#, fuzzy
+#| msgid "Cannot open the password file.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "Klarer ikkje opna passordfila.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr ""
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not set sename for %s\n"
+msgstr "Klarte ikkje finna plass for oppsettsinformasjon.\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "Endrar aldringsformasjonen for %s\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "%s: Klarer ikkje avgjere brukarnamnet ditt.\n"
+
+#, fuzzy, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "%s: linje %d: klarer ikkje finne brukar %s\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: tomt for minne\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: klarer ikkje oppdatere fila %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: ugyldig heimemappe «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: klarte ikkje endra namn på mappa %s til %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: kan ikkje oppretta mappa %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: åtvaring: kan ikkje fjerna "
+
+#, fuzzy, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: åtvaring: kan ikkje fjerna "
+
+#, fuzzy, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: gje nytt namn: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: klarte ikkje endra namn på mappa %s til %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: klarte ikkje endra namn på mappa %s til %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: åtvaring: kan ikkje fjerna "
+
+#, fuzzy, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: kan ikkje oppretta mappa %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: åtvaring: kan ikkje fjerna "
+
+#, fuzzy, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: klarer ikkje oppdatere fila %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: klarer ikkje oppdatere skuggepassordfil\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: gje nytt namn: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: klarer ikkje opna fila %s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Åtvaring: ukjent gruppe %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Åtvaring: for mange grupper\n"
+
+msgid "Your password has expired."
+msgstr "Passordet ditt er utgått."
+
+msgid "Your password is inactive."
+msgstr "Passordet ditt er inaktivt."
+
+msgid "Your login has expired."
+msgstr "Innlogginga di er utgått."
+
+msgid " Contact the system administrator."
+msgstr " Ta kontakt med systemadministrator."
+
+msgid " Choose a new password."
+msgstr " Lag eit nytt passord."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Passordet ditt vil utgå om %ld dagar.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Passordet ditt vil utgå i morgon."
+
+msgid "Your password will expire today."
+msgstr "Passordet ditt vil utgå i dag."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Klarer ikkje skifta tty %s"
+
+#, fuzzy, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: felta er for lange\n"
+
+#, fuzzy, c-format
+msgid "%s: "
+msgstr "passwd: %s\n"
+
+msgid ": "
+msgstr ""
+
+msgid "Environment overflow\n"
+msgstr "Miljø overflyt\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Du klarer ikkje endra $%s\n"
+
+#, fuzzy, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] "%d %s sidan førre innlogging. Førre var %s på %s.\n"
+msgstr[1] "%d %s sidan førre innlogging. Førre var %s på %s.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "klarte ikke å endra eigar av mailbox"
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr "%s: klarer ikkje få unikt gid\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: klarer ikkje få unikt gid\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: klarer ikkje få unikt gid\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: kan ikkje oppretta %s\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: kan ikkje oppretta %s\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr "%s: klarer ikkje få unikt gid\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: klarer ikkje få unikt gid\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: klarer ikkje få unikt gid\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: PAM-autentisering feila\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: ugyldig felt «%s»\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Could not seteuid to %d\n"
+msgstr "Klarte ikkje finna plass for oppsettsinformasjon.\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not set caps\n"
+msgstr "Klarte ikkje finna plass for oppsettsinformasjon.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't open file\n"
+msgid "%s: snprintf failed!\n"
+msgstr "%s: klarer ikkje opna fil\n"
+
+#, fuzzy, c-format
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: linje %d: chown feila\n"
+
+#, fuzzy, c-format
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: linje %d: chown feila\n"
+
+msgid "Too many logins.\n"
+msgstr "For mange innloggingar.\n"
+
+msgid "You have new mail."
+msgstr "Du har ny e-post."
+
+msgid "No mail."
+msgstr "Ingen e-post."
+
+msgid "You have mail."
+msgstr "Du har e-post."
+
+#, fuzzy
+msgid "no change"
+msgstr "%s: ingen endringar\n"
+
+msgid "a palindrome"
+msgstr ""
+
+msgid "case changes only"
+msgstr ""
+
+msgid "too similar"
+msgstr ""
+
+msgid "too simple"
+msgstr ""
+
+msgid "rotated"
+msgstr ""
+
+msgid "too short"
+msgstr ""
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Feil passord: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() feila, feil %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+msgid "passwd: password unchanged\n"
+msgstr "Passord er endra."
+
+msgid "passwd: password updated successfully\n"
+msgstr ""
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: arkiv %s er ikkje støtta\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start: feil %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd: pam_start() feila, feil %d\n"
+
+#, fuzzy, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Feil passord for «%s»\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr ""
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: ugyldig telefonnummer, heime: «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: kan ikkje oppretta mappa %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: kan ikkje oppretta mappa %s\n"
+
+#, fuzzy, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: kan ikkje oppretta mappa %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Klarer ikkje cd til «%s»\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Inga mappe, loggar inn med HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Klarer ikkje køyra %s"
+
+#, fuzzy, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Ugyldig rotmappe «%s»\n"
+
+#, fuzzy, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Klarer ikkje endra rotmappe til «%s»\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: brukaren %s er pålogga\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: brukaren %s er pålogga\n"
+
+#, fuzzy
+msgid "Unable to determine your tty name."
+msgstr "%s: Klarer ikkje avgjere brukarnamnet ditt.\n"
+
+#, fuzzy
+msgid "No"
+msgstr "Nei"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Bruk: %s [inndata]\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr ""
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Skriv inn den nye verdien eller trykk Enter for standard"
+
+msgid "Minimum Password Age"
+msgstr "Minimum alder på passord"
+
+msgid "Maximum Password Age"
+msgstr "Maksimum alder på passord"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Førre passordendring (ÅÅÅÅ-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Åtvaring for utgått passord"
+
+msgid "Password Inactive"
+msgstr "Passord inaktivt"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Dato for når kontoen utgår (ÅÅÅÅ-MM-DD)"
+
+#, fuzzy
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Førre passordendring (ÅÅÅÅ-MM-DD)"
+
+#, fuzzy
+msgid "never"
+msgstr "Aldri"
+
+msgid "password must be changed"
+msgstr "Passord er endra"
+
+#, fuzzy
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Passord utgår:\t"
+
+#, fuzzy
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Passord inaktiv:\t"
+
+#, fuzzy
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Konto utgår:\t"
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: ugyldig dato «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: ugyldig nummerisk argument «%s»\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: ta ikkje med «l» med andre flagg\n"
+
+#, fuzzy, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: nekta tilgang\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Klarer ikkje avgjere brukarnamnet ditt.\n"
+
+#, fuzzy, c-format
+msgid "%s: PAM: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: klarer ikkje låsa filer, prøv igjen seinare\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: klarer ikkje opna fila %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: ugyldig telefonnummer, arbeid: «%s»\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: klarer ikkje opna skuggepassordfila\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: brukar %s finst ikkje\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Endrar aldringsformasjonen for %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: feil ved endring av felt\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr "Bruk: %s [inndata]\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr "Fullt namn"
+
+#, fuzzy, c-format
+msgid "\t%s: %s\n"
+msgstr "passwd: %s\n"
+
+msgid "Room Number"
+msgstr "Romnummer"
+
+msgid "Work Phone"
+msgstr "Telefon, arbeid"
+
+msgid "Home Phone"
+msgstr "Telefon, heime"
+
+msgid "Other"
+msgstr "Anna"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Klarer ikkje endra ID til root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: ugyldig namn: «%s»\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: ugyldig romnummer: «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: ugyldig telefonnummer, arbeid: «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: ugyldig telefonnummer, heime: «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: «%s» inneheld ulovlege teikn\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: «%s» inneheld ulovlege teikn\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: brukar %s finst ikkje\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: klarer ikkje endra brukar «%s» på NIS-klient.\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: «%s» er NIS-hovud for denne klienten.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Endrar brukarinformasjon for %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: felta er for lange\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Bruk: %s [inndata]\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr ""
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: ta ikkje med «l» med andre flagg\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: linje %d: linja er for lang\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: linje %d: manglar nytt passord\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: ugyldig telefonnummer, arbeid: «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: gruppe %s eksisterer ikkje\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: linje %d: kan ikkje oppdatere oppføring\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: feil funne, endringar er ikkje utført\n"
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: brukar %s finst ikkje\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: brukar %s finst ikkje\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr "Innloggingskal"
+
+#, fuzzy, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Du treng ikkje endra skal for %s.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Endra innloggingskal for %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Ugyldig inntasting: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s er eit ugyldig skal.\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: brukar %s finst ikkje\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: åtvaring: %s er ikkje eigd av %s\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "%s: ugyldig nummerisk argument «%s»\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: kan ikkje oppretta mappa %s\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid " [%lus left]"
+msgstr " [%lds igjen]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds lås]"
+
+#, fuzzy, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s: kan ikkje oppretta mappa %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: ugyldig telefonnummer, arbeid: «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: kan ikkje oppretta mappa %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "Ukjent brukar: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: klarte ikkje endra namn på mappa %s til %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: ugyldig telefonnummer, arbeid: «%s»\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Bruk: %s [inndata]\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr ""
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr ""
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr ""
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+
+#, fuzzy
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "Passordet for %s kan ikkje endrast.\n"
+
+#, fuzzy
+msgid "The options cannot be combined.\n"
+msgstr "Passordet for %s kan ikkje endrast.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: skuggepassord for gruppe krevst for -A\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: gruppe %s eksisterer ikkje\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: ugyldig telefonnummer, arbeid: «%s»\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Endrar passordet for gruppa %s\n"
+
+msgid "New Password: "
+msgstr "Nytt passord: "
+
+msgid "Re-enter new password: "
+msgstr "Gjenta det nye passordet: "
+
+msgid "They don't match; try again"
+msgstr "Passorda er ikkje like, prøv igjen"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Prøv igjen seinare\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Legg brukaren %s til gruppa %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Fjernar brukaren %s frå gruppa %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: brukar %s finst ikkje\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Ikkje ein tty\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Bruk: %s [inndata]\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr ""
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid " -r, --system create a system account\n"
+msgstr ""
+
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s er ikkje eit gyldig gruppenamn\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "ugyldig gruppenamn «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -O krev NAME=VERDI\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: gruppa %s finst allereie\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: Klarer ikkje avgjere brukarnamnet ditt.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: klarte ikkje endra namn på mappa %s til %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: klarer ikkje endra brukar «%s» på NIS-klient.\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: gruppe %s eksisterer ikkje\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: gruppe «%s» er ei NIS-gruppe.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s er NIS-hovudet\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: brukar %s er ikkje ein NIS brukar\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: slapp opp for minne i update_group\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr "Bruk: %s [inndata]\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+
+msgid "\n"
+msgstr ""
+
+msgid "Actions:\n"
+msgstr ""
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr ""
+
+msgid " -l, --list list the members of the group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr ""
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "ugyldig gruppenamn «%s»\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: gruppe %s er ei NIS-gruppe\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: ukjend brukar %s\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr "Bruk: %s [inndata]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr "Bruk: %s [inndata]\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s og -r er inkompatible\n"
+
+msgid "invalid group file entry"
+msgstr "ugyldig oppføring for gruppefil"
+
+#, fuzzy, c-format
+msgid "delete line '%s'? "
+msgstr "slett linja «%s»? "
+
+msgid "duplicate group entry"
+msgstr "duplisert gruppeoppføring"
+
+#, fuzzy, c-format
+msgid "invalid group name '%s'\n"
+msgstr "ugyldig gruppenamn «%s»\n"
+
+#, fuzzy, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "ugyldig gruppenamn «%s»\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "gruppe %s: ingen brukar %s\n"
+
+#, fuzzy, c-format
+msgid "delete member '%s'? "
+msgstr "slett medlem «%s»?"
+
+#, fuzzy, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "ingen passande oppføring for gruppefil\n"
+
+#, fuzzy, c-format
+msgid "add group '%s' in %s? "
+msgstr "skuggegruppe %s: ingen brukar %s\n"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "ugyldig oppføring av skuggegruppefil"
+
+msgid "duplicate shadow group entry"
+msgstr "duplisert oppføring for skuggegruppe"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "skuggegruppe %s: ingen administratorbrukar %s\n"
+
+#, fuzzy, c-format
+msgid "delete administrative member '%s'? "
+msgstr "slett administratormedlem «%s»?"
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "skuggegruppe %s: ingen brukar %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: filene er oppdaterte\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: ingen endringar\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: klarer ikkje oppdatere fila %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Bruk: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Bruk: id\n"
+
+msgid " groups="
+msgstr " grupper="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+
+msgid "Username Port From Latest"
+msgstr "Brukarnamn Port Frå Siste"
+
+msgid "Username Port Latest"
+msgstr "Brukarnamn Port Siste"
+
+msgid "**Never logged in**"
+msgstr "**Aldri vore innlogga**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s: kan ikkje oppretta mappa %s\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s: klarer ikkje oppdatere passordfil\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 "Bruk: %s [-p] [namn]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h vert] [-f namn]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r vert\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Ugyldig innloggingstid"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Systemet stengt for rutinemessig vedlikehald"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Fråkopling omgått -- innlogging av root er tillete.]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Innlogging gjekk ut på tid etter %d sekund.\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s login: "
+msgstr ""
+"\n"
+"%s brukarnamn: "
+
+#, fuzzy
+msgid "login: "
+msgstr ""
+"\n"
+"%s brukarnamn: "
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr ""
+
+msgid "login: abort requested by PAM\n"
+msgstr ""
+
+msgid "Login incorrect"
+msgstr "Feil innlogging"
+
+#, fuzzy, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "%s: linje %d: klarer ikkje finne brukar %s\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s brukarnamn: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr ""
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Åtvaring: innlogging gjort mogeleg igjen etter mellombels utestenging."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Førre innlogging: %s på %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Førre inlogging: %.19s på %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " frå %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+
+#, fuzzy
+msgid "Usage: logoutd\n"
+msgstr "Bruk: id\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: can't open group file\n"
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr "%s: klarer ikkje opna gruppefil\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: ugyldig telefonnummer, arbeid: «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: ugyldig telefonnummer, arbeid: «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: felta er for lange\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: ugyldig startmappe «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: kan ikkje oppretta mappa %s\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Bruk: newgrp [-] [gruppe]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Bruk: sg gruppe [[-c] kommando]\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: ugyldig telefonnummer, arbeid: «%s»\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "Gamalt passord:"
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: ugyldig telefonnummer, arbeid: «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: brukar %s finst ikkje\n"
+
+msgid "too many groups\n"
+msgstr "for mange grupper\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid " -b, --badnames allow bad names\n"
+msgstr ""
+
+msgid " -r, --system create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: gruppe %s eksisterer ikkje\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: ugyldig brukarnamn «%s»\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: ugyldig brukarnamn «%s»\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: linje %d: ugyldig linje\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: klarer ikkje oppdatere oppføring for brukar %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: linje %d: klarer ikkje laga GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: linje %d: klarer ikkje laga GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: brukar %s finst ikkje\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: linje %d: klarer ikkje oppdatere passord\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: linje %d: mkdir feila\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: linje %d: chown feila\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: linje %d: kan ikkje oppdatere oppføring\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: linje %d: kan ikkje oppdatere oppføring\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: kan ikkje oppretta %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: klarer ikkje oppdatere gruppefil\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid " -q, --quiet quiet mode\n"
+msgstr ""
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid "Old password: "
+msgstr "Gamalt passord:"
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Skriv inn det nye passordet (minimum %d, maksimum %d teikn)\n"
+"Bruk ein kombinasjon av store og små bokstavar og tal.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Skriv inn det nye passordet (minimum %d, maksimum %d teikn)\n"
+"Bruk ein kombinasjon av store og små bokstavar og tal.\n"
+
+msgid "New password: "
+msgstr "Nytt passord: "
+
+msgid "Try again."
+msgstr "Prøv igjen."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Åtvaring: Svakt passord (skriv det inn ein gong til for å bruka det likevel)."
+
+msgid "They don't match; try again.\n"
+msgstr "Passorda er ikkje like, prøv igjen.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Passordet for %s kan ikkje endrast.\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Passordet for %s kan ikkje endrast.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: arkiv %s er ikkje støtta\n"
+
+#, c-format
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "Du treng ikkje endra skal for %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Enrar passord for %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Passordet til %s er ikkje endra.\n"
+
+#, fuzzy, c-format
+msgid "%s: password changed.\n"
+msgstr "Passord er endra."
+
+#, fuzzy, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "Åtvaring for utgått passord"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr "Bruk: %s [inndata]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr "Bruk: %s [inndata]\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+
+msgid "invalid password file entry"
+msgstr "Ugyldig oppføring i passordfila"
+
+msgid "duplicate password entry"
+msgstr "duplisert oppføring i passordfila"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "ugyldig brukarnamn «%s»\n"
+
+#, fuzzy, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "ugyldig brukarnamn «%s»\n"
+
+#, fuzzy, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "brukar %s: inga gruppe %u\n"
+
+#, fuzzy, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "brukar %s: mappe %s finst ikkje\n"
+
+#, fuzzy, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "brukar %s: program %s finst ikkje\n"
+
+#, fuzzy, c-format
+msgid "no tcb directory for %s\n"
+msgstr "%s: kan ikkje oppretta mappa %s\n"
+
+#, fuzzy, c-format
+msgid "create tcb directory for %s?"
+msgstr "%s: kan ikkje oppretta mappa %s\n"
+
+#, fuzzy, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "%s: kan ikkje oppretta mappa %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: klarer ikkje låse fila %s\n"
+
+#, fuzzy, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "ingen oppføringar i passordfila som passar\n"
+
+#, fuzzy, c-format
+msgid "add user '%s' in %s? "
+msgstr "skuggegruppe %s: ingen brukar %s\n"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "ugyldig oppføring i skuggepassordfila"
+
+msgid "duplicate shadow password entry"
+msgstr "duplisert oppføring i skuggepassordfila"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "brukar %s: siste passordendring i framtida\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: klarer ikkje opna fila %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: klarer ikkje skriva ny fila\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Tilgang til su for den kontoen er AVVIST.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Passordautentisering er forbigått.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Oppgje ditt EIGE passord for autentisering.\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: klarer ikkje låse fila %s\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr ""
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr ""
+
+msgid "Session terminated, terminating shell..."
+msgstr ""
+
+#, c-format
+msgid " ...killed.\n"
+msgstr ""
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr ""
+
+msgid " ...terminated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s\n"
+msgstr "passwd: %s\n"
+
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ignorert)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Du er ikkje autorisert til su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Skriv inn ditt eige passord)"
+
+#, fuzzy, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: PAM-autentisering feila\n"
+
+#, fuzzy, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "Du er ikkje autorisert til su %s\n"
+
+#, fuzzy, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "Inga passordoppføring for «root»"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: må køyrast frå ein terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: feil %d\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: klarte ikkje endra namn på mappa %s til %s\n"
+
+#, fuzzy, c-format
+msgid "Cannot execute %s\n"
+msgstr "Klarer ikkje køyra %s"
+
+msgid "No password file"
+msgstr "Inga passordfil"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "Inga passordoppføring for «root»"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Trykk Ctrl-d for å halda fram med normal oppstart,\n"
+"(eller oppgje root-passord for systemvedlikehald):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Startar modus for systemvedlikehald"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: klarer ikkje opprette fil for standardverdiar\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: klarer ikkje opprette fil for standardverdiar\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: klarer ikkje opna fil for standardverdiar\n"
+
+#, fuzzy, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: linje %d: chown feila\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: kan ikkje oppretta mappa %s\n"
+
+#, fuzzy, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: gje nytt namn: %s"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: gruppe «%s» er ei NIS-gruppe.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: for mange grupper spesifisert (maks %d).\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr "Bruk: %s [inndata]\n"
+
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr ""
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr ""
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr ""
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr ""
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: ugyldig startmappe «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: ugyldig kommentar «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: ugyldig heimemappe «%s»\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: skuggepassord krevst for -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: skuggepassord krevst for -f\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: ugyldig felt «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: ugyldig skal «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: åtvaring: %s er ikkje eigd av %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rewrite password file\n"
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s: klarer ikkje skriva ny passordfil\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s: kan ikkje oppretta mappa %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: linje %d: kan ikkje oppdatere oppføring\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error updating files\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: feil ved oppdatering av filer\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: kan ikkje oppretta mappa %s\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: ugyldig heimemappe «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "klarte ikke å endra eigar av mailbox"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: kan ikkje oppretta mappa %s\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: linje %d: chown feila\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: linje %d: chown feila\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr ""
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+
+msgid "Setting mailbox file permissions"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: brukar %s finst\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: gruppa %s finst - viss du ønskjer å leggja brukaren til denne gruppa, "
+"bruk -g.\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: kan ikkje oppretta %s\n"
+
+#, fuzzy, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: gid %u er ikkje unikt\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: kan ikkje oppretta mappa %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: kan ikkje oppretta %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: kan ikkje oppretta %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: kan ikkje oppretta %s\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr "%s: klarer ikkje endra brukar «%s» på NIS-klient.\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr "%s: klarer ikkje fjerna primærgruppa til brukaren.\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "%s: klarte ikkje endra namn på mappa %s til %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: ugyldig heimemappe «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: åtvaring: kan ikkje fjerna "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s ikkje eigd av %s, ikkje fjerna\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: klarer ikkje oppdatere fila %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: klarte ikkje endra namn på mappa %s til %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: klarte ikkje endra namn på mappa %s til %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: brukar %s er ikkje ein NIS brukar\n"
+
+#, fuzzy, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: ugyldig heimemappe «%s»\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: fjernar ikkje mappa %s (det ville fjerna heimemappa til brukar %s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: feil ved fjerning av mappe %s\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: feil ved fjerning av mappe %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr ""
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr ""
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr ""
+
+msgid " -L, --lock lock the user account\n"
+msgstr ""
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr ""
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr ""
+
+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"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: brukar %s finst\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: ugyldig dato «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: ugyldig dato «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: no options\n"
+msgstr "%s: klarer ikkje opna fila %s\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: skuggepassord krevst for -e og -f\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: mappa %s finst\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: kan ikkje oppretta mappa %s\n"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: klarte ikkje endra namn på mappa %s til %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: åtvaring: %s er ikkje eigd av %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "klarte ikke å endra eigar av mailbox"
+
+msgid "failed to rename mailbox"
+msgstr "klarte ikkje endra namn på mailbox"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s: ugyldig telefonnummer, arbeid: «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s: felta er for lange\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s: ugyldig telefonnummer, arbeid: «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s: ugyldig startmappe «%s»\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid " -g, --group edit group database\n"
+msgstr ""
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr ""
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: ugyldig telefonnummer, arbeid: «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s er ikkje endra\n"
+
+#, fuzzy
+msgid "failed to create scratch directory"
+msgstr "klarte ikkje endra namn på mailbox"
+
+#, fuzzy
+msgid "failed to drop privileges"
+msgstr "%s: ugyldig telefonnummer, arbeid: «%s»\n"
+
+#, fuzzy
+msgid "Couldn't get file context"
+msgstr "Klarte ikkje låsa fil"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "failed to gain privileges"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "Klarte ikkje låsa fil"
+
+msgid "Couldn't make backup"
+msgstr "Klarte ikkje laga reservekopi"
+
+#, fuzzy, c-format
+msgid "%s: %s: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr "%s: %s ikkje funne i /etc/passwd\n"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+#, fuzzy
+msgid "failed to open scratch file"
+msgstr "%s: klarer ikkje opna gruppefil\n"
+
+#, fuzzy
+msgid "failed to unlink scratch file"
+msgstr "%s: felta er for lange\n"
+
+#, fuzzy
+msgid "failed to stat edited file"
+msgstr "klarte ikkje endra namn på mailbox"
+
+#, fuzzy
+msgid "failed to allocate memory"
+msgstr "klarte ikke å endra eigar av mailbox"
+
+#, fuzzy
+msgid "failed to create backup file"
+msgstr "klarte ikkje endra namn på mailbox"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: klarer ikkje gjenoppretta %s: %s (endringane dine er i %s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: ugyldig startmappe «%s»\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Bruk: %s [inndata]\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "malloc(%d) feila\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: PAM-autentisering feila\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "Bruk: %s [-f fullt_namn] [-r romnr] [-w tlf_arb]\n"
+#~ "\t[-h tlf_heime] [-o anna] [brukar]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr "Bruk: %s [-f fullt_namn] [-r romnr] [-w tlf_arb] [-h tlf_heime]\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "Bruk: expiry {-f|-c}\n"
+
+#, fuzzy
+#~| msgid "%s: cannot open file %s\n"
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "%s: klarer ikkje opna fila %s\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "Bruk: goupdel gruppe\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "Bruk: %s [-r] [-s] [gruppe [gskugge]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "Bruk: %s [-r] [-s] [gruppe]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: -s og -r er inkompatible\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "Bruk: goupdel gruppe\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "Bruk: goupdel gruppe\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr "Bruk: %s [-q] [-r] [-s] [passord [skugge]]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr "Bruk: %s [-q] [-r] [-s] [passord [skugge]]\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "Bruk: id\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "Bruk: id\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "Ukjent id: %s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "Ingen skal\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s: ingen flagg oppgjeve\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Bruk: %s [inndata]\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s: kan ikkje oppretta %s\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s: kan ikkje chown %s\n"
+
+#, fuzzy
+#~ msgid "Password set to expire."
+#~ msgstr "Passordet ditt er utgått."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: klarer ikkje låsa passordfil\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: klarer ikkje opna passordfil\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: klarer ikkje låsa skuggepassordfila\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: klarer ikkje opna skuggepassordfila\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: klarer ikkje skriva ny skuggepassordfil\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: klarer ikkje skriva ny passordfil\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: klarer ikkje oppdatere skuggepassordfil\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tFullt namn: %s\n"
+
+#, fuzzy
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "Romnummer"
+
+#, fuzzy
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "Telefon, arbeid"
+
+#, fuzzy
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "Telefon, heime"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "Klarer ikkje låsa passordfila, prøv igjen seinare.\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Feil ved oppdatering av passordet.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Klarer ikkje utføra endringar i passordfila.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Klarer ikkje låsa opp passordfila.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: klarer ikkje låsa gruppefil\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: klarer ikkje låsa skuggepassordfila\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: klarer ikkje opna skuggepassordfila\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: feil ved oppdatering av skuggepassordfila\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: feil ved oppdatering av gruppeoppføring\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: linje %d: ukjent brukar %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: linje %d: kan ikkje oppdatere oppføring\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: klarer ikkje låsa skuggepassordfila\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: feil ved oppdatering av skuggepassordfila\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: feil ved oppdatering av passordfila\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: linje %d: ukjent brukar %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: linje %d: klarer ikkje oppdatere passordet\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: ukjent brukar\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Ukjent brukar: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Bruk: %s [-r|-R] gruppe\n"
+
+#~ msgid " %s [-a user] group\n"
+#~ msgstr " %s [-a brukar] gruppe\n"
+
+#~ msgid " %s [-d user] group\n"
+#~ msgstr " %s [-d brukar] gruppe\n"
+
+#~ msgid " %s [-A user,...] [-M user,...] group\n"
+#~ msgstr " %s [-A brukar,...] [-M brukar,...] gruppe\n"
+
+#~ msgid " %s [-M user,...] group\n"
+#~ msgstr " %s [-M brukar,...] gruppe\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: klarer ikkje få lås\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: klarer ikkje få lås på skuggefil\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: klarer ikkje skriva ny skuggefil\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: klarer ikkje låsa opp fil\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: klarer ikkje oppdatere oppføring\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: klarer ikkje oppdatere skuggeoppføring\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "ukjent gruppe: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: klarer ikkje opna fil\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: klarer ikkje opna skuggepassordfila\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Kven er du?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: ukjent medlem %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: feil ved oppretting av ny gruppeoppføring\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: klarer ikkje skriva ny gruppefil\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: klarer ikkje skriva ny skuggegruppefil\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: klarer ikkje låsa gruppefil\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: klarer ikkje opna gruppefil\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: klarer ikkje låsa skuggegruppefil\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: klarer ikkje opna skuggegruppefil\n"
+
+#, fuzzy
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: gid %u er ikkje unikt\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: feil ved fjerning av gruppeoppføring\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: feil ved fjerning av oppføring for skuggegruppe\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: klarer ikkje fjerna primærgruppa til brukaren.\n"
+
+#, fuzzy
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "%s: PAM-autentisering feila\n"
+
+#, fuzzy
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "%s: klarer ikkje låsa gruppefil\n"
+
+#, fuzzy
+#~ msgid "Cannot close group file\n"
+#~ msgstr "%s: klarer ikkje opna gruppefila\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s ikkje funne i /etc/group\n"
+
+#, fuzzy
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u er ikkje ein unik gid\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s er ikkje eit unikt namn\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: klarer ikkje skriva ny passordfil\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: klarer ikkje låsa passordfil\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: klarer ikkje opna passordfil\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: klarer ikkje oppdatere skuggeoppføring for %s\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: klarer ikkje oppdatere oppføring for gruppa %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: klarer ikkje låsa skuggegruppefil\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: klarer ikkje opna skuggegruppefil\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: klarer ikkje fjerna skuggegruppe %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: klarer ikkje oppdatere skuggegruppefil\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: klan ikkje slette skuggegruppefil\n"
+
+#, fuzzy
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "ukjent GID: %lu\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "ukjent GID: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: gruppe %s eksisterer ikkje\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: brukar %s finst ikkje\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: ugyldig brukarnamn «%s»\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: klarer ikkje låsa /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: klarer ikkje låsa /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: klarer ikkje låsa /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: klarer ikkje låsa /etc/passwd.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: klarer ikkje opna filer\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: klarer ikkje oppdatere oppføring i passordfila for %s\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: klarer ikkje låda passordfil\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: klarer ikkje opna passordfil\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: klarer ikkje fjerna oppføring for %s i skuggepassordfila\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: klarer ikkje oppdatere passordfil\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: klarer ikkje oppdatere oppføring for brukar %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: klarer ikkje sletta skuggepassordfil\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: ukjent GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: ukjent gruppe %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: slapp opp for minne i update_gshadow\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: klarer ikkje skriva ny skuggepassordfil\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: klarer ikkje låsa skuggepassordfil\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: klarer ikkje opna skuggepassordfil\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: feil ved låsing av gruppefil\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: feil ved opning av gruppefil\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: feil ved låsing av skuggegruppefil\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: feil ved opning av skuggegruppefil\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: feil når passordoppføring blei lagt til\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: feil når oppføring av skuggepassord blei lag til\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s: åtvaring: CREATE_HOME ikkje støtta, bruk -m istaden.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: feil ved oppdatering av gruppeoppføring\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: feil ved oppdatering av gruppeoppføring\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: klarer ikkje opna gruppefila\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: klarer ikkje opna skuggepassordfila\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: feil ved sletting av passordoppføring\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: feil ved sletting av skuggepassordoppføring\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: feil ved oppretting av ny gruppeoppføring\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu er ikkje unik\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: feil ved endring av passordoppføring\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: feil ved sletting av passordoppføring\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: feil ved sletting av oppføring for skuggepassord\n"
+
+#, fuzzy
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: klarer ikkje få unikt gid\n"
+
+#, fuzzy
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " på «%.100s» frå «%.200s»"
+
+#, fuzzy
+#~ msgid " on '%.100s'"
+#~ msgstr " på «%.100s»"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: linje %d: klarer ikkje laga UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: namn %s er ikkje unikt\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Inga passordfil\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Årsak.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Passordet for %s kan ikkje endrast enno.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Årsak."
diff --git a/po/pl.gmo b/po/pl.gmo
new file mode 100644
index 0000000..c433832
--- /dev/null
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
new file mode 100644
index 0000000..6319233
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,3748 @@
+# Polish translation for shadow.
+# Copyright (C) 1999 Free Software Foundation, Inc.
+# Arkadiusz Miśkiewicz <misiek@misiek.eu.org>, 1999.
+# Jakub Bogusz <qboosh@pld-linux.org>, 2003-2004.
+# Tomasz Kłoczko <kloczek@pld.org.pl>, 2004-2006
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.18\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2007-11-25 20:53+0100\n"
+"Last-Translator: Tomasz Kłoczko <kloczek@pld.org.pl>\n"
+"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Nie można przydzielić miejsca dla informacji o konfiguracji.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"błąd w konfiguracji - nieznana pozycja '%s' (powiadom administratora)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr ""
+
+msgid "Password: "
+msgstr "Hasło: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Hasło użytkownika %s: "
+
+#, fuzzy
+#| msgid "Cannot open the password file.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "Nie można otworzyć pliku z hasłami.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr ""
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not set sename for %s\n"
+msgstr "Nie można przydzielić miejsca dla informacji o konfiguracji.\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "Zmieniam informację o użytkowniku %s\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "%s: Nie można ustalić twojej nazwy użytkownika.\n"
+
+#, fuzzy, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "%s: linia %d: nie można znaleźć użytkownika %s\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: brak pamięci\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: nie można zaktualizować pliku %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: nieprawidłowy katalog domowy '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: nie można zmienić nazwy katalogu z %s na %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: nie można utworzyć katalogu %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: ostrzeżenie: nie można usunąć "
+
+#, fuzzy, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: ostrzeżenie: nie można usunąć "
+
+#, fuzzy, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: zmiana nazwy: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: nie można zmienić nazwy katalogu z %s na %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: nie można zmienić nazwy katalogu z %s na %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: ostrzeżenie: nie można usunąć "
+
+#, fuzzy, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: nie można utworzyć katalogu %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: ostrzeżenie: nie można usunąć "
+
+#, fuzzy, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: nie można zaktualizować pliku %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: nie można zaktualizować pliku z ukrytymi hasłami\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: zmiana nazwy: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: nie można otworzyć pliku %s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Ostrzeżenie: nieznana grupa %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Ostrzeżenie: zbyt wiele grup\n"
+
+msgid "Your password has expired."
+msgstr "Twoje hasło straciło ważność."
+
+msgid "Your password is inactive."
+msgstr "Twoje hasło jest nieaktywne."
+
+msgid "Your login has expired."
+msgstr "Twoje konto straciło ważność."
+
+msgid " Contact the system administrator."
+msgstr " Skontaktuj się z administratorem systemu."
+
+msgid " Choose a new password."
+msgstr " Wybierz nowe hasło."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Twoje hasło straci ważność w ciągu %ld dni.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Jutro twoje hasło straci ważność."
+
+msgid "Your password will expire today."
+msgstr "Dziś twoje hasło straci ważność."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Nie można zmienić tty %s"
+
+#, fuzzy, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: pola zbyt długie\n"
+
+#, fuzzy, c-format
+msgid "%s: "
+msgstr "%s: %s\n"
+
+msgid ": "
+msgstr ""
+
+msgid "Environment overflow\n"
+msgstr "Przepełnienie środowiska\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Nie możesz zmieniać $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d nieudana próba logowania od ostatniego logowania.\n"
+"Ostatnie logowanie: dnia %s na terminalu %s.\n"
+msgstr[1] ""
+"%d nieudane próby logowania od ostatniego logowania.\n"
+"Ostatnie logowanie: dnia %s na terminalu %s.\n"
+msgstr[2] ""
+"%d nieudanych prób logowania od ostatniego logowania.\n"
+"Ostatnie logowanie: dnia %s na terminalu %s.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "zmiana właściciela skrzynki pocztowej nie powiodła się"
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr "%s: nie można uzyskać niepowtarzalnego UID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: nie można uzyskać niepowtarzalnego GID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: nie można uzyskać niepowtarzalnego GID\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: nie można utworzyć %s\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: nie można utworzyć %s\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr "%s: nie można uzyskać niepowtarzalnego UID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: nie można uzyskać niepowtarzalnego UID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: nie można uzyskać niepowtarzalnego UID\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: błąd podczas uwierzytelniania przez PAM\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: nieprawidłowe pole '%s'\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Could not seteuid to %d\n"
+msgstr "Nie można przydzielić miejsca dla informacji o konfiguracji.\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not set caps\n"
+msgstr "Nie można przydzielić miejsca dla informacji o konfiguracji.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't open file\n"
+msgid "%s: snprintf failed!\n"
+msgstr "%s: nie można otworzyć pliku\n"
+
+#, fuzzy, c-format
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: linia %d: chown nie powiodło się\n"
+
+#, fuzzy, c-format
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: linia %d: chown nie powiodło się\n"
+
+msgid "Too many logins.\n"
+msgstr "Zbyt wiele otwartych sesji.\n"
+
+msgid "You have new mail."
+msgstr "Masz nową pocztę."
+
+msgid "No mail."
+msgstr "Nie masz poczty."
+
+msgid "You have mail."
+msgstr "Masz pocztę."
+
+msgid "no change"
+msgstr "bez zmian"
+
+msgid "a palindrome"
+msgstr "palindrom"
+
+msgid "case changes only"
+msgstr "zmieniona tylko wielkości liter"
+
+msgid "too similar"
+msgstr "zbyt podobne"
+
+msgid "too simple"
+msgstr "za proste"
+
+msgid "rotated"
+msgstr "rotacja"
+
+msgid "too short"
+msgstr "za krótkie"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Złe hasło: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() nie powiodło się, błąd %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+msgid "passwd: password unchanged\n"
+msgstr "Hasło zmienione."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: hasło zostało zmienione\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: repozytorium %s nie jest obsługiwane\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start: błąd %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd: pam_start() nie powiodło się, błąd %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Nieprawidłowe hasło %s.\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr ""
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: niepowiodło się porzucenie uprawnień (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: nieprawidłowy numer telefonu domowego: '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: nie można utworzyć katalogu %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: nie można utworzyć katalogu %s\n"
+
+#, fuzzy, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: nie można utworzyć katalogu %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Nie można zmienić katalogu na '%s'\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Brak katalogu, loguję z HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Nie można uruchomić %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Nieprawidłowy katalog główny '%s'\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Nie można zmienić głównego katalogu na '%s'\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: użytkownik %s jest aktualnie zalogowany\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: użytkownik %s jest aktualnie zalogowany\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Nie można ustalić nazwy twojego terminala."
+
+#, fuzzy
+msgid "No"
+msgstr "Nie\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Użycie: %s [wejście]\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr ""
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Wpisz nową wartość lub wciśnij ENTER by przyjąć wartość domyślną"
+
+msgid "Minimum Password Age"
+msgstr "Minimalny wiek hasła"
+
+msgid "Maximum Password Age"
+msgstr "Maksymalny wiek hasła"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Ostatnia zmiana hasła (RRRR-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Ostrzeżenie o utracie ważności hasła"
+
+msgid "Password Inactive"
+msgstr "Hasło nieaktywne"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Data utraty ważności konta (RRRR-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Ostatnia zmiana hasła\t\t\t\t\t: "
+
+msgid "never"
+msgstr "nigdy"
+
+msgid "password must be changed"
+msgstr "Hasło musi zostać zmienione"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Hasło traci ważność\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Hasło nieaktywne\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Konto traci ważność\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Minimalna ilość dni pomiędzy zmianami hasła\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Maksymalna ilość dni pomiędzy zmianami hasła\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Liczba dni ostrzeżenia, zanim ważność hasła upłynie\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: nieprawidłowa data '%s'\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: nieprawidłowy argument numeryczny '%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: nie łącz \"l\" z innymi flagami\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Operacja niedozwolona.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Nie można ustalić twojej nazwy użytkownika.\n"
+
+#, fuzzy, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: nie można zablokować plików, spróbuj później\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: nie można otworzyć pliku %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: failure forking: %s"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: niepowiodło się porzucenie uprawnień (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: brak pliku z ukrytymi hasłami\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: użytkownik %s nie istnieje\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Zmieniam informację o użytkowniku %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: błąd podczas zmieniania pól\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr "Użycie: %s [wejście]\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr "Imię i nazwisko"
+
+#, fuzzy, c-format
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Numer pokoju"
+
+msgid "Work Phone"
+msgstr "Telefon do pracy"
+
+msgid "Home Phone"
+msgstr "Telefon domowy"
+
+msgid "Other"
+msgstr "Inne"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Nie można zmienić ID na root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: nieprawidłowa nazwa: '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: nieprawidłowy numer pokoju: '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: nieprawidłowy numer telefonu do pracy: '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: nieprawidłowy numer telefonu domowego: '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s' zawiera nieprawidłowe znaki\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s' zawiera nieprawidłowe znaki\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: użytkownik %s nie istnieje\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: nie można zmienić użytkownika '%s' na kliencie NIS.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: '%s' jest nadrzędnym serwerem NIS dla tego klienta.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Zmieniam informację o użytkowniku %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: pola zbyt długie\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Użycie: %s [wejście]\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr ""
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: opcja -a można użyć TYLKO z pcją -G\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: linia %d: linia zbyt długa\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: linia %d: brakuje nowego hasła\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: niepowiodło się porzucenie uprawnień (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: grupa %s nie istnieje\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: linia %d: nie można zaktualizować wpisu\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: wykryto błąd, zignorowano modyfikacje\n"
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: użytkownik %s nie istnieje\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: użytkownik %s nie istnieje\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr "Powłoka logowania"
+
+#, fuzzy, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Nie możesz zmieniać powłoki dla %s.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Zmieniam powłokę logowania dla %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Nieprawidłowy wpis: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s jest nieprawidłową powłoką.\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: użytkownik %s nie istnieje\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: ostrzeżenie: właścicielem %s nie jest %s\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "lastlog: nieoczekiwany argument: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: nie można utworzyć katalogu %s\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "Login Nieudane Maks. Ostanio Na\n"
+
+#, fuzzy, c-format
+msgid " [%lus left]"
+msgstr " [pozostało %lds]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [blokada %lds]"
+
+#, fuzzy, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s: nie można utworzyć katalogu %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: niepowiodło się porzucenie uprawnień (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: nie można utworzyć katalogu %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "Nieznany użytkownik: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: nie można zmienić nazwy katalogu z %s na %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: niepowiodło się porzucenie uprawnień (%s)\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Użycie: %s [wejście]\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr ""
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr ""
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr ""
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+
+#, fuzzy
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "Hasło dla %s nie może być zmienione.\n"
+
+#, fuzzy
+msgid "The options cannot be combined.\n"
+msgstr "Hasło dla %s nie może być zmienione.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: plik z ukrytymi hasłami grup wymagany dla -A\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: grupa %s nie istnieje\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: failure forking: %s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Zmieniam hasło dla grupy %s\n"
+
+msgid "New Password: "
+msgstr "Nowe hasło: "
+
+msgid "Re-enter new password: "
+msgstr "Wpisz hasło ponownie: "
+
+msgid "They don't match; try again"
+msgstr "Nie zgadzają się; spróbuj ponownie"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Spróbuj ponownie później\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Dodaję nowego użytkownika %s do grupy %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Usuwam użytkownika %s z grupy %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: użytkownik %s nie istnieje\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: To nie tty\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Użycie: %s [wejście]\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr ""
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid " -r, --system create a system account\n"
+msgstr ""
+
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s: nie jest prawidłową nazwą grupy\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "nieprawidłowa nazwa grupy '%s'\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K wymaga KLUCZ=WARTOŚĆ\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: grupa %s istnieje\n"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "Członek grupy już istnieje\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: Nie można ustalić twojej nazwy użytkownika.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: nie można zmienić nazwy katalogu z %s na %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: nie można zmienić użytkownika '%s' na kliencie NIS.\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: grupa %s nie istnieje\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: grupa '%s' jest grupą NIS.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s jest głównym serwerem NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: użytkownik %s jest użytkownikiem NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: zabrakło pamięci w update_group\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr "Użycie: %s [wejście]\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+
+msgid "\n"
+msgstr ""
+
+msgid "Actions:\n"
+msgstr ""
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr ""
+
+msgid " -l, --list list the members of the group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr ""
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "nieprawidłowa nazwa grupy '%s'\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: grupa %s jest grupą NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: nieznany użytkownik %s\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr "Użycie: %s [wejście]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr "Użycie: %s [wejście]\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s i -r są niekompatybilne\n"
+
+msgid "invalid group file entry"
+msgstr "nieprawidłowy wpis do pliku grup"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "usunąć linię '%s'? "
+
+msgid "duplicate group entry"
+msgstr "powtórzony wpis w pliku grup"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "nieprawidłowa nazwa grupy '%s'\n"
+
+#, fuzzy, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "nieprawidłowa nazwa grupy '%s'\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "grupa %s: nie ma użytkownika %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "skasować członka '%s'? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "brak pasującego wpisu w pliku group %s\n"
+
+#, fuzzy, c-format
+msgid "add group '%s' in %s? "
+msgstr "dodać grupę '%s' w %s ?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "nieprawidłowy wpis w pliku z ukrytymi hasłami grup"
+
+msgid "duplicate shadow group entry"
+msgstr "powtórzony wpis w pliku z ukrytymi hasłami grup"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr ""
+"grupa %s: użytkownik administracyjny %s z pliku ukrytych haseł grup nie "
+"istnieje\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "usunąć członka administracyjnego '%s'? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "grupa %s: użytkownik %s z pliku ukrytych haseł grup nie istnieje\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: pliki zostały zaktualizowane\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: bez zmian\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: nie można zaktualizować pliku %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Użycie: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Użycie: id\n"
+
+msgid " groups="
+msgstr " grupy="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+
+msgid "Username Port From Latest"
+msgstr "Użytkownik Port Z Ostatnio"
+
+msgid "Username Port Latest"
+msgstr "Użytkownik Port Ostatnio"
+
+msgid "**Never logged in**"
+msgstr "**Nigdy nie zalogowany**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s: nie można utworzyć katalogu %s\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s: nie można zaktualizować pliku z hasłami\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 "Użycie: %s [-p] [nazwa]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h host] [-f nazwa]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r host\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Nieprawidłowy czas logowania"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"System zamknięty do rutynowej konserwacji."
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Rozłączenie pominięte -- zezwolenie na logowanie się roota.]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Brak wpisu w utmp. Musisz wykonać \"login\" z najniższego poziomu \"sh\""
+
+#, fuzzy, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Limit czasu logowania przekroczony po %d sekundach.\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM niepowodzenie, przerwane: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s login: "
+
+msgid "login: "
+msgstr "login: "
+
+#, fuzzy, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Maksymalna ilość prób przekroczona (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: przerwanie wywołane przez PAM\n"
+
+msgid "Login incorrect"
+msgstr "Nieprawidłowe logowanie"
+
+#, fuzzy, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "%s: linia %d: nie można znaleźć użytkownika %s\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s login: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: failure forking: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Ostrzeżenie: logowanie ponownie odblokowanie po czasowej blokadzie."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Ostatnie logowanie: %s na %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Ostatnie logowanie: %s na %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " z %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"przekroczony czas logowania\n"
+"\n"
+
+#, fuzzy
+msgid "Usage: logoutd\n"
+msgstr "Użycie: id\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: can't open group file\n"
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr "%s: nie można otworzyć pliku z grupami\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: niepowiodło się porzucenie uprawnień (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: niepowiodło się porzucenie uprawnień (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: pola zbyt długie\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: nieprawidłowy katalog bazowy '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: nie można utworzyć katalogu %s\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Użycie: newgrp [-] [grupa]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Użycie: sg grupa [[-c] polecenie]\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: niepowiodło się porzucenie uprawnień (%s)\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "Stare hasło: "
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: failure forking: %s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: użytkownik %s nie istnieje\n"
+
+msgid "too many groups\n"
+msgstr "zbyt wiele grup\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid " -b, --badnames allow bad names\n"
+msgstr ""
+
+msgid " -r, --system create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: grupa %s nie istnieje\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: nieprawidłowa nazwa użytkownika '%s'\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: nieprawidłowa nazwa użytkownika '%s'\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: linia %d: nieprawidłowa linia\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: nie można zaktualizować wpisu dla użytkownika %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: linia %d: nie można utworzyć GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: linia %d: nie można utworzyć GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: użytkownik %s nie istnieje\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: linia %d: nie można zaktualizować pliku z hasłami\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: linia %d: mkdir nie powiodło się\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: linia %d: chown nie powiodło się\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: linia %d: nie można zaktualizować wpisu\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: niepowiodło się porzucenie uprawnień (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: nie można utworzyć %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: nie można zaktualizować pliku z grupami\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid " -q, --quiet quiet mode\n"
+msgstr ""
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid "Old password: "
+msgstr "Stare hasło: "
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Wpisz nowe hasło (minimum %d, maksimum %d znaków)\n"
+"Proszę użyj kombinacji wielkich i małych znaków oraz cyfr.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Wpisz nowe hasło (minimum %d, maksimum %d znaków)\n"
+"Proszę użyj kombinacji wielkich i małych znaków oraz cyfr.\n"
+
+msgid "New password: "
+msgstr "Nowe hasło: "
+
+msgid "Try again."
+msgstr "Spróbuj ponownie."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Ostrzeżenie: słabe hasło (wpisz je ponowie jeśli jednak chcesz go użyć)."
+
+msgid "They don't match; try again.\n"
+msgstr "Nie zgadzają się; spróbuj ponownie.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Hasło dla %s nie może być zmienione.\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Hasło dla %s nie może być zmienione.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: repozytorium %s nie jest obsługiwane\n"
+
+#, c-format
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Nie możesz przeglądać lub zmieniać informacji o haśle dla %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Zmieniam hasło dla %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Hasło dla %s pozostaje niezmienione.\n"
+
+#, fuzzy, c-format
+msgid "%s: password changed.\n"
+msgstr "Hasło zmienione."
+
+#, fuzzy, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "Ostrzeżenie o utracie ważności hasła"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr "Użycie: %s [wejście]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr "Użycie: %s [wejście]\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+
+msgid "invalid password file entry"
+msgstr "nieprawidłowy wpis do pliku z hasłami"
+
+msgid "duplicate password entry"
+msgstr "powtórzony wpis w pliku z hasłami"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "nieprawidłowa nazwa użytkownika '%s'\n"
+
+#, fuzzy, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "nieprawidłowa nazwa użytkownika '%s'\n"
+
+#, fuzzy, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "użytkownik %s: brak grupy %u\n"
+
+#, fuzzy, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "użytkownik %s: katalog %s nie istnieje\n"
+
+#, fuzzy, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "użytkownik %s: program %s nie istnieje\n"
+
+#, fuzzy, c-format
+msgid "no tcb directory for %s\n"
+msgstr "%s: nie można utworzyć katalogu %s\n"
+
+#, fuzzy, c-format
+msgid "create tcb directory for %s?"
+msgstr "%s: nie można utworzyć katalogu %s\n"
+
+#, fuzzy, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "%s: nie można utworzyć katalogu %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: nie można zablokować pliku %s\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "brak pasującego wpisu w pliku z hasłami %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "dodać grupę '%s' w %s ?"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "nieprawidłowy wpis w pliku z hasłami"
+
+msgid "duplicate shadow password entry"
+msgstr "powtórzony wpis w pliku z ukrytymi hasłami"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "użytkownik %s: ostatnia zmiana hasła w przyszłości\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: nie można otworzyć pliku %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: nie można przepisać pliku\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Dostęp do polecenia su z tego konta ZABRONIONY.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Uwierzytelnianie na podstawie hasła pominięte.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Proszę wpisz swoje WŁASNE hasło jako hasło uwierzytelniające.\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: nie można zablokować pliku %s\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr ""
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr ""
+
+msgid "Session terminated, terminating shell..."
+msgstr ""
+
+#, c-format
+msgid " ...killed.\n"
+msgstr ""
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr ""
+
+msgid " ...terminated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: su [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
+#| " -h, --help display this help message and exit\n"
+#| " -, -l, --login make the shell a login shell\n"
+#| " -m, -p,\n"
+#| " --preserve-environment do not reset environment variables, and\n"
+#| " keep the same shell\n"
+#| " -s, --shell SHELL use SHELL instead of the default in "
+#| "passwd\n"
+#| "\n"
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"Użycie: su [opcje] [LOGIN]\n"
+"\n"
+"Opcje:\n"
+" -c, --command POLECENIE uruchom POLECENIE w to wywoływanym shellu\n"
+" -h, --help wyświetlenie tego opisu i zakończenie działania\n"
+" -, -l, --login uruchom z powłoką z powłoką zgłoszeniową\n"
+" -m, -p,\n"
+" --preserve-environment uruchomienie z zachowaniem zmiennych środowiska\n"
+" -s, --shell SHELL użyj SHELL zamiast domyślny shell z passwd\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Zignorowano)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Nie masz autoryzacji by używać su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Wpisz swoje własne hasło)"
+
+#, fuzzy, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: błąd podczas uwierzytelniania przez PAM\n"
+
+#, fuzzy, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "Nie masz autoryzacji by używać su %s\n"
+
+#, fuzzy, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "Brak wpisu do bazy haseł dla 'root'"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: musisz uruchamiać z terminala\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: błąd %d\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: nie można zmienić nazwy katalogu z %s na %s\n"
+
+#, fuzzy, c-format
+msgid "Cannot execute %s\n"
+msgstr "Nie można uruchomić %s"
+
+msgid "No password file"
+msgstr "Brak pliku z hasłami"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "Brak wpisu do bazy haseł dla 'root'"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Naciśnij control-d by kontynuować normalny start\n"
+"(lub podaj hasło roota by przejść do trybu konserwacji systemu):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Wchodzę w tryb konserwacji systemu"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: nie można utworzyć nowego pliku z ustawieniami domyślnymi\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: nie można utworzyć nowego pliku z ustawieniami domyślnymi\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: nie można otworzyć nowego pliku z ustawieniami domyślnymi\n"
+
+#, fuzzy, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: linia %d: chown nie powiodło się\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: nie można utworzyć katalogu %s\n"
+
+#, fuzzy, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: zmiana nazwy: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: grupa '%s' jest grupą NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: podano zbyt wiele grup (maks %d).\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr "Użycie: %s [wejście]\n"
+
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr ""
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr ""
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr ""
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr ""
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: nieprawidłowy katalog bazowy '%s'\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: nieprawidłowy komentarz '%s'\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: nieprawidłowy katalog domowy '%s'\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: ukryte hasła wymagane dla -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: ukryte hasła wymagane dla -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: nieprawidłowe pole '%s'\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: nieprawidłowa powłoka '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: ostrzeżenie: właścicielem %s nie jest %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rewrite password file\n"
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s: nie można przepisać pliku z hasłami\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s: nie można utworzyć katalogu %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: niepowiodło się porzucenie uprawnień (%s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error updating files\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: błąd podczas aktualizowania plików\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: nie można utworzyć katalogu %s\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: nieprawidłowy katalog domowy '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "zmiana właściciela skrzynki pocztowej nie powiodła się"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: nie można utworzyć katalogu %s\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: linia %d: chown nie powiodło się\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: linia %d: chown nie powiodło się\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "Tworzenie pliku mailbox"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Nie znaleziono grupy 'mail'. Tworzenie pliku mailbox użytkownika z prawami "
+"dostępu 600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Ustawianie praw dostępu do pliku mailbox"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: użytkownik %s istnieje\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: grupa %s istnieje - aby dodać tego użytkownika do tej grupy, użyj -g.\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: nie można utworzyć %s\n"
+
+#, fuzzy, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %u nie jest niepowtarzalny\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: nie można utworzyć katalogu %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: nie można utworzyć %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: nie można utworzyć %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: nie można utworzyć %s\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: uwaga: katalog domowy już istnieje.\n"
+"Pliki z katalogu skel nie są kopiowane.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr "%s: nie można zmienić użytkownika '%s' na kliencie NIS.\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: nie można usunąć grupy %s która jest grupą podstawową\n"
+"dla innego użytkownika.\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "%s: nie można zmienić nazwy katalogu z %s na %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: nieprawidłowy katalog domowy '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: ostrzeżenie: nie można usunąć "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: właścicielem %s nie jest %s, nie usuwam\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: niepowiodło się porzucenie uprawnień (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: nie można zmienić nazwy katalogu z %s na %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: nie można zmienić nazwy katalogu z %s na %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: użytkownik %s jest użytkownikiem NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: nieprawidłowy katalog domowy '%s'\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: nie usuwam katalogu %s (usunęłoby to katalog domowy użytkownika %s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: błąd podczas usuwania katalogu %s\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: błąd podczas usuwania katalogu %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr ""
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr ""
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr ""
+
+msgid " -L, --lock lock the user account\n"
+msgstr ""
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr ""
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr ""
+
+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"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: użytkownik %s istnieje\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: nieprawidłowa data '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: nieprawidłowa data '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: no options\n"
+msgstr "%s: nie można otworzyć pliku %s\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: ukryte hasła wymagane dla -e i -f\n"
+
+#, fuzzy, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "Członek grupy już istnieje\n"
+
+#, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: katalog %s istnieje\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: nie można utworzyć katalogu %s\n"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: uwaga: nie powiodło się całkowite usuniecie starego katalogu domovego %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: nie można zmienić nazwy katalogu z %s na %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: ostrzeżenie: właścicielem %s nie jest %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "zmiana właściciela skrzynki pocztowej nie powiodła się"
+
+msgid "failed to rename mailbox"
+msgstr "zmiana nazwy skrzynki pocztowej nie powiodła się"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s: niepowiodło się porzucenie uprawnień (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s: niepowiodło się porzucenie uprawnień (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s: niepowiodło się porzucenie uprawnień (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s: niepowiodło się porzucenie uprawnień (%s)\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid " -g, --group edit group database\n"
+msgstr ""
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr ""
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: niepowiodło się porzucenie uprawnień (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s jest niezmieniony\n"
+
+#, fuzzy
+msgid "failed to create scratch directory"
+msgstr "zmiana nazwy skrzynki pocztowej nie powiodła się"
+
+#, fuzzy
+msgid "failed to drop privileges"
+msgstr "%s: niepowiodło się porzucenie uprawnień (%s)\n"
+
+#, fuzzy
+msgid "Couldn't get file context"
+msgstr "Nie można zablokować pliku"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+#, fuzzy
+msgid "failed to gain privileges"
+msgstr "%s: niepowiodło się porzucenie uprawnień (%s)\n"
+
+msgid "Couldn't lock file"
+msgstr "Nie można zablokować pliku"
+
+msgid "Couldn't make backup"
+msgstr "Nie można wykonać kopii zapasowej"
+
+#, fuzzy, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr "%s: nie znaleziono %s w /etc/passwd\n"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+#, fuzzy
+msgid "failed to open scratch file"
+msgstr "Nie można otworzyć pliku z grupami\n"
+
+#, fuzzy
+msgid "failed to unlink scratch file"
+msgstr "%s: pola zbyt długie\n"
+
+#, fuzzy
+msgid "failed to stat edited file"
+msgstr "zmiana nazwy skrzynki pocztowej nie powiodła się"
+
+#, fuzzy
+msgid "failed to allocate memory"
+msgstr "zmiana właściciela skrzynki pocztowej nie powiodła się"
+
+#, fuzzy
+msgid "failed to create backup file"
+msgstr "zmiana nazwy skrzynki pocztowej nie powiodła się"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: nie można odzyskać %s: %s (twoje zmiany są w %s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: nieprawidłowy katalog bazowy '%s'\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Użycie: %s [wejście]\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "malloc(%d) nie powiodło się\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: chage [options] [LOGIN]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -d, --lastday LAST_DAY set last password change to LAST_DAY\n"
+#~| " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -l, --list show account aging information\n"
+#~| " -m, --mindays MIN_DAYS set minimum number of days before "
+#~| "password\n"
+#~| " change to MIN_DAYS\n"
+#~| " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~| "password\n"
+#~| " change to MAX_DAYS\n"
+#~| " -W, --warndays WARN_DAYS set expiration warning days to "
+#~| "WARN_DAYS\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Użycie: chage [opcje] [LOGIN]\n"
+#~ "\n"
+#~ "Opcje:\n"
+#~ " -d, --lastday OSTATNI ustawia date ostatniej zmiany hasła na "
+#~ "OSTATNI\n"
+#~ " -E, --expiredate DATA_WAŻN ustawia datę ważności konta na DATA_WAŻN\n"
+#~ " -h, --help wyświetlenie tego opisu i zakończenie "
+#~ "działania\n"
+#~ " -I, --inactive NIEAKTYWNE ustwia liczbę dni nieaktywności konta po\n"
+#~ " których konta jest blokowane na "
+#~ "NIEAKTYWNE\n"
+#~ " -l, --list wyświetlenie informacji o terminach "
+#~ "ważności\n"
+#~ " konta i hasła\n"
+#~ " -m, --mindays MIN_DNI ustawia minimalną liczbę dni pomiędzy\n"
+#~ " zmianami hasła na wartość MIN_DNI\n"
+#~ " -M, --maxdays MAX_DNI ustawia maksymalną liczbę dni, przez "
+#~ "jakie\n"
+#~ " hasło jest ważne na wartość MAX_DNI\n"
+#~ " -W, --warndays DNI_OSTRZ ustawia na DNI_OSTRZ liczbę dni przed\n"
+#~ " upływem ważności hasła\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: błąd podczas uwierzytelniania przez PAM\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "Użycie: %s [-f imię_nazwisko] [-r nr_pokoju] [-w tel_praca]\n"
+#~ "\t[-h tel_dom] [-o inne] [użytkownik]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr ""
+#~ "Użycie: %s [-f imię_nazwisko] [-r nr_pokoju] [-w tel_praca] [-h tel_dom]\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Użycie: chpasswd [opcje]\n"
+#~ "\n"
+#~ "Opcje:\n"
+#~ " -e, --encrypted przekazywane hasła są w postaci zakodowane\n"
+#~ " -h, --help wyświetlenie tego opisu i zakończenie działania\n"
+#~ " -m, --md5 użyj kodowania MD5 zamiast DES w przypadku kiedy\n"
+#~ " przekazywane hasła nie są zakodowane\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Użycie: chsh [opcje] [LOGIN]\n"
+#~ "\n"
+#~ "Opcje:\n"
+#~ " -h, --help wyświetlenie tego opisu i zakończenie działania\n"
+#~ " -s, --shell SHELL nowy SHELL dla użytkownika LOGIN\n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "Użycie: expiry {-f|-c}\n"
+
+#, fuzzy
+#~| msgid "%s: cannot open file %s\n"
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "%s: nie można otworzyć pliku %s\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "Użycie: groupdel grupa\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "Użycie: %s [-r] [-s] [grupa [gshadow]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "Użycie: %s [-r] [-s] [grupa]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: -s i -r są niekompatybilne\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "Użycie: groupdel grupa\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "Użycie: groupdel grupa\n"
+
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Użycie: lastlog [opcje]\n"
+#~ "\n"
+#~ "Opcje:\n"
+#~ " -b, --before DNI wyświetl tylko rekordy lastlog starsze niż DNI\n"
+#~ " -h, --help wyświetlenie tego opisu i zakończenie działania\n"
+#~ " -t, --time DNI wyświetl tylko rekordy lastlog nie starsze niż "
+#~ "DNI\n"
+#~ " -u, --user LOGIN wyświetl rekord lastlog tylko dla użytkownika\n"
+#~ " o loginie LOGIN\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: passwd [options] [LOGIN]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -a, --all report password status on all accounts\n"
+#~| " -d, --delete delete the password for the named "
+#~| "account\n"
+#~| " -e, --expire force expire the password for the named "
+#~| "account\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -k, --keep-tokens change password only if expired\n"
+#~| " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -l, --lock lock the named account\n"
+#~| " -n, --mindays MIN_DAYS set minimum number of days before "
+#~| "password\n"
+#~| " change to MIN_DAYS\n"
+#~| " -q, --quiet quiet mode\n"
+#~| " -r, --repository REPOSITORY change password in REPOSITORY "
+#~| "repository\n"
+#~| " -S, --status report password status on the named "
+#~| "account\n"
+#~| " -u, --unlock unlock the named account\n"
+#~| " -w, --warndays WARN_DAYS set expiration warning days to "
+#~| "WARN_DAYS\n"
+#~| " -x, --maxdays MAX_DAYS set maximim number of days before "
+#~| "password\n"
+#~| " change to MAX_DAYS\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Użycie: passwd [opcje] [LOGIN]\n"
+#~ "\n"
+#~ "Opcje:\n"
+#~ " -a, --all raportuj status hasła dla wszystkich "
+#~ "kont\n"
+#~ " -d, --delete kasuje hasło użytkowanika\n"
+#~ " -e, --expire wymuś przeterminowanie hasła\n"
+#~ " -h, --help wyświetlenie tego opisu i zakończenie "
+#~ "działania\n"
+#~ " -k, --keep-tokens zmiana hasła tylko w przypadku kiedy\n"
+#~ " jest przeterminowane\n"
+#~ " -i, --inactive NIEAKTYWNE konto przeterminowane po upływie "
+#~ "NIEAKTYWNE\n"
+#~ " dni po wygaśnięciu hasła\n"
+#~ " -l, --lock zablokuj konto\n"
+#~ " -n, --mindays MIN_DNI ustaw minimalną ilość dni prezed kolejną\n"
+#~ " zmianą hasła na MIN_DNI\n"
+#~ " -n, --mindays MIN_DNI ustawia minimalną liczbę dni pomiędzy\n"
+#~ " zmianami hasła na MIN_DNI\n"
+#~ " -q, --quiet cichy tryb pracy\n"
+#~ " -r, --repository REPOZYTORIUM zmień hasło w repozytorium REPOZYTORIUM\n"
+#~ " -S, --status raportuj status hasła\n"
+#~ " -u, --unlock odblokuj konto\n"
+#~ " -w, --warndays DNI_OSTRZ ustawia na DNI_OSTRZ liczbę dni przed\n"
+#~ " upływem ważności hasła\n"
+#~ " -x, --maxdays MAX_DNI ustawia maksymalną liczbę dni, przez "
+#~ "jakie\n"
+#~ " hasło jest ważne na wartość MAX_DNI\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr "Użycie: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr "Użycie: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "Użycie: id\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "Użycie: id\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "Nieznany id: %s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "Brak powłoki\n"
+
+#~ msgid ""
+#~ "Usage: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force removal of files,\n"
+#~ " even if not owned by user\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -r, --remove remove home directory and mail spool\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Użycie: userdel [opcje] LOGIN\n"
+#~ "\n"
+#~ "Opcje:\n"
+#~ " -f, --force wymuś usunięcie plików nawet jeżeli nie "
+#~ "należą\n"
+#~ " do usuwanego użytkownika\n"
+#~ " -h, --help wyświetlenie tego opisu i zakończenie "
+#~ "działania\n"
+#~ " -r, --remove usuń katalog domowy i spool pocztowy\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Użycie: usermod [opcje] LOGIN\n"
+#~ "\n"
+#~ "Opcje:\n"
+#~ " -a, --append GRUPA dołącz użytkownika do do dodatkowej grupy "
+#~ "GRUPA\n"
+#~ " -c, --comment KOMENTARZ ustaw pole komentarza (GECOS) dla konta\n"
+#~ " -d, --home-dir KAT_DOMOWY nowy katalog domowy użytkownika\n"
+#~ " -e, --expiredate DATA_WAŻN ustawia datę wazności dla konta na "
+#~ "DATA_WAŻN\n"
+#~ " -f, --inactive NIEAKTYWNE ustwia liczbę dni po których konto jest\n"
+#~ " blokowane na NIEAKTYWNE\n"
+#~ " -g, --gid GRUPA wymuś użycie grupy GRUPA jako grupy\n"
+#~ " podstawowej użytkownika\n"
+#~ " -G, --groups GRUPY lista dodatkowych grup uzytkownika\n"
+#~ " -h, --help wyświetlenie tego opisu i zakończenie "
+#~ "działania\n"
+#~ " -l, --login NOWY_LOGIN nowa nawana logina użytkownika\n"
+#~ " -L, --lock blokuj konto użytkowqnika\n"
+#~ " -m, --move-home przenieś zawartość katalogu domowego\n"
+#~ " użytkownika (może być użyte tylko z opcją -"
+#~ "d)\n"
+#~ " -o, --non-unique pozwól na użycie nieunikalnego UID dla "
+#~ "konta\n"
+#~ " -p, --password HASŁO użyj nowe zakodowane HASŁO dla użytkonta\n"
+#~ " -s, --shell SHELL nowy SHELL dla użytkownika LOGIN\n"
+#~ " -U, --unlock odblokuj konto użytkownika\n"
+#~ "\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s: nie podano flag\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: vipw [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -g, --group edit group database\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -p, --passwd edit passwd database\n"
+#~| " -q, --quiet quiet mode\n"
+#~| " -s, --shadow edit shadow or gshadow database\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group edit group database\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -p, --passwd edit passwd database\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow edit shadow or gshadow database\n"
+#~ " -u, --user which user's tcb shadow file to edit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Użycie: vipw [opcje]\n"
+#~ "\n"
+#~ "Opcje:\n"
+#~ " -g, --group edycja bazy group\n"
+#~ " -h, --help wyświetlenie tego opisu i zakończenie działania\n"
+#~ " -p, --passwd edycja bazy passwd\n"
+#~ " -q, --quiet cichy tryb pracy\n"
+#~ " -s, --shadow edycja bazy shadow lub gshadow\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Użycie: %s [wejście]\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s: nie można utworzyć %s\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s: nie można zmienić właściciela %s\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -a, --all display faillog records for all users\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -l, --lock-time SEC after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| " -m, --maximum MAX set maximum failed login counters to "
+#~| "MAX\n"
+#~| " -r, --reset reset the counters of login failures\n"
+#~| " -t, --time DAYS display faillog records more recent than "
+#~| "DAYS\n"
+#~| " -u, --user LOGIN display faillog record or maintains "
+#~| "failure\n"
+#~| " counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| " options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all display faillog records for all users\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -l, --lock-time SEC after failed login lock account to SEC "
+#~ "seconds\n"
+#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
+#~ " -r, --reset reset the counters of login failures\n"
+#~ " -t, --time DAYS display faillog records more recent than "
+#~ "DAYS\n"
+#~ " -u, --user LOGIN display faillog record or maintains "
+#~ "failure\n"
+#~ " counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ " options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Użycie: faillog [opcje]\n"
+#~ "\n"
+#~ "Opcje:\n"
+#~ " -a, --all wyświetlaj rekordy failloga dla wszystkich "
+#~ "użytkowników\n"
+#~ " -h, --help wyświetlenie tego opisu i zakończenie działania\n"
+#~ " -l, --lock-time SEK ustaw na SEK sekund blokadę konta po nieudanym\n"
+#~ " logowaniu\n"
+#~ " -m, --maximum MAX ustaw maksymalną ilość niepoprawnych logowań na "
+#~ "MAX\n"
+#~ " -r, --reset wyzeruj licznik niepoprawnych logowań\n"
+#~ " -t, --time DNI wyświetlaj rekordy nie starsze niż DNI\n"
+#~ " -u, --user LOGIN wyświetlaj rekordy lub zarządzaj licznikami\n"
+#~ " i limitami faillog (w połaczeniu z opcjami -r,\n"
+#~ " -m lub -l) tylko dla użytkownika o loginie LOGIN\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force exit with success status if the\n"
+#~ " specified group already exists\n"
+#~ " -g, --gid GID use GID for the new group\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique allow create group with duplicate\n"
+#~ " (non-unique) GID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new group\n"
+#~ " -r, --system create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Użycie: groupadd [opcje] GRUPA\n"
+#~ "\n"
+#~ "Opcje:\n"
+#~ " -f, --force wymyś zakończenie programu z poprawnym\n"
+#~ " statusem jeżeli grupa już istnieje\n"
+#~ " -g, --gid GID użyj GID dla tworzonej grupy\n"
+#~ " -h, --help wyświetlenie tego opisu i zakończenie "
+#~ "działania\n"
+#~ " -K, --key KLUCZ=WARTOŚĆ przysłoń wartość domyślną z /etc/login.defs\n"
+#~ " -o, --non-unique pozwól na utworzenie grupy z nieunikalnym "
+#~ "GID\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --gid GID force use new GID by GROUP\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Użycie: groupmod [opcje] GRUPA\n"
+#~ "\n"
+#~ "Opcje:\n"
+#~ " -g, --gid GID wymuś użycie nowego GID dla grupy GRUPA\n"
+#~ " -h, --help wyświetlenie tego opisu i zakończenie "
+#~ "działania\n"
+#~ " -n, --new-name NOWA_GRUPA wymuś użycie nazwy grupy NOWA_GRUPA "
+#~ "zamiast\n"
+#~ " GRUPA\n"
+#~ " -o, --non-unique pozwól na utworzenie grupy z nieunikalnym "
+#~ "GID\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~ " home directory\n"
+#~ " -c, --comment COMMENT set the GECOS field for the new user "
+#~ "account\n"
+#~ " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~ " -D, --defaults print or save modified default useradd\n"
+#~ " configuration\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP for the new user account\n"
+#~ " -G, --groups GROUPS list of supplementary groups for the new\n"
+#~ " user account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -l, --no-log-init do not add the user to the lastlog and\n"
+#~ " faillog databases\n"
+#~ " -m, --create-home create home directory for the new user\n"
+#~ " account\n"
+#~ " -M, --no-create-home do not create user's home directory\n"
+#~ " (overrides /etc/login.defs)\n"
+#~ " -N, --no-user-group do not create a group with the same name "
+#~ "as\n"
+#~ " the user\n"
+#~ " -o, --non-unique allow create user with duplicate\n"
+#~ " (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new user\n"
+#~ " account\n"
+#~ " -r, --system create a system account\n"
+#~ " -s, --shell SHELL the login shell for the new user account\n"
+#~ " -u, --uid UID force use the UID for the new user "
+#~ "account\n"
+#~ " -U, --user-group create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Użycie: useradd [opcje] LOGIN\n"
+#~ "\n"
+#~ "Opcje:\n"
+#~ " -b, --base-dir KAT_BAZOWY katalog bazowy dla katalogu domowego "
+#~ "nowo\n"
+#~ " tworzonego konta\n"
+#~ " -c, --comment COMMENT ustaw pole komentarza (GECOS) dla nowo\n"
+#~ " tworzonego konta\n"
+#~ " -d, --home-dir KAT_DOMOWY katalog domowy dla nowo tworzonego konta\n"
+#~ " -D, --defaults wypisz lub zapisz domyślną konfigurację\n"
+#~ " programu useradd\n"
+#~ " -e, --expiredate DATA_WAŻN. ustawia datę wazności dla nowo "
+#~ "tworzonego\n"
+#~ " konta na DATA_WAŻN.\n"
+#~ " -f, --inactive NIEAKTYWNE ustwia liczbę dni po których konto jest\n"
+#~ " blokowane na NIEAKTYWNE\n"
+#~ " -h, --help wyświetlenie tego opisu i zakończenie\n"
+#~ " działania\n"
+#~ " -g, --gid GROUP wymuś użycie konkretnej grupy dla nowo\n"
+#~ " tworzonego konta\n"
+#~ " -G, --groups GROUPS lista dodatkowych grup dla nowo "
+#~ "tworzonego\n"
+#~ " konta\n"
+#~ " -k, --skel SKEL_DIR podaj alternatywną ścieżkę do katalogu "
+#~ "skel\n"
+#~ " -K, --key KLUCZ=WARTOŚĆ przysłoń wartość domyślną z /etc/login."
+#~ "defs\n"
+#~ " -m, --create-home twórz katalog domowy dla nowego "
+#~ "użytkownika\n"
+#~ " -o, --non-unique pozwól na utworzenie konta z nieunikalnym "
+#~ "UID\n"
+#~ " -p, --password PASSWORD użyj zakodowane hasło dla nowego "
+#~ "tworzonego\n"
+#~ " konta\n"
+#~ " -s, --shell SHELL tshell dla nowo tworzonego konta\n"
+#~ " -u, --uid UID wymuś użycie konkretnego UID dla nowo\n"
+#~ " tworzonego konta\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Hasłu zaznaczone jako przeterminowane."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: nie można zablokować pliku z hasłami\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: nie można otworzyć pliku z hasłami\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: nie można zablokować pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: nie można otworzyć pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: nie można przepisać pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: nie można przepisać pliku z hasłami\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: nie można zaktualizować pliku z ukrytymi hasłami\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tImię i nazwisko: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tNumer pokoju: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tTelefon do pracy: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tTelefon domowy: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "Nie można zablokować pliku z hasłami; spróbuj później.\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Błąd podczas aktualizacji wpisu do bazy haseł.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Wprowadzenie zmian do pliku passwd jest niemożliwe.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Nie można usunąć blokady z pliku z hasłami.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: nie można zablokować pliku z grupami\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: nie można zablokować pliku gshadow\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: nie można otworzyć pliku z ukrytymi hasłami\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: błąd podczas aktualizacji pliku z ukrytymi hasłami\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: błąd podczas aktualizacji wpisu grupy\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: linia %d: nieznana grupa %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: linia %d: nie można zaktualizować wpisu\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: nie można zablokować pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: błąd podczas aktualizacji pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: błąd podczas aktualizacji pliku z hasłami\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: linia %d: nieznany użytkownik %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: linia %d: nie można zaktualizować wpisu do bazy haseł\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: nieznany użytkownik\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Nieznany użytkownik: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Użycie: %s [-r|-R] grupa\n"
+
+#~ msgid " %s [-a user] group\n"
+#~ msgstr " %s [-a użytkownik] grupa\n"
+
+#~ msgid " %s [-d user] group\n"
+#~ msgstr " %s [-d użytkownik] grupa\n"
+
+#~ msgid " %s [-A user,...] [-M user,...] group\n"
+#~ msgstr " %s [-A użytkownik,...] [-M użytkownik,...] grupa\n"
+
+#~ msgid " %s [-M user,...] group\n"
+#~ msgstr " %s [-M użytkownik,...] grupa\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: nie można zablokować\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: nie można zablokować pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: nie można przepisać pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: nie można usunąć blokady z pliku\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: nie można zaktualizować wpisu\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: nie można zaktualizować wpisu do pliku z ukrytymi hasłami\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "nieznana grupa: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: nie można otworzyć pliku\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: nie można otworzyć pliku z ukrytymi hasłami\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Kim jesteś?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: nieznany członek %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: błąd podczas dodawania nowej grupy\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: nie można przepisać pliku z grupami\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: nie można przepisać pliku z ukrytymi hasłami grup\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: nie można zablokować pliku z grupami\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: nie można otworzyć pliku z grupami\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: nie można zablokować pliku z ukrytymi hasłami grup\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: nie można otworzyć pliku z ukrytymi hasłami grup\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u nie jest niepowtarzalny\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: błąd podczas usuwania grupy\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: błąd podczas usuwania wpisu z pliku z ukrytymi hasłami grup\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: nie można usunąć podstawowej grupy użytkowników.\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Nie znaleziony członek grupy do usunięcia\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Tylko root może dodać członka do różnych grup\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "Wymagane prawa dostępu do grupy\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "Nie jesteś głównym właścicielem bieżącej grupy\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "Błąd uwierzytelniania przez PAM dla\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "Nie można zablokować pliku z grupami\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "Nie można zamknąć pliku z grupami\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: nie znaleziono %s w /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u nie jest niepowtarzalnym GID\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s nie jest niepowtarzalną nazwą\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: nie można przepisać pliku z hasłami\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: nie można zablokować pliku z hasłami\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: nie można otworzyć pliku z hasłami\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr ""
+#~ "%s: nie można zaktualizować wpisu w pliku z ukrytymi hasłami dla %s\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: nie można zaktualizować wpisu dla grupy %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: nie można zablokować pliku z ukrytymi hasłami grup\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: nie można otworzyć pliku z ukrytymi hasłami grup\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: nie można usunąć grupy %s z pliku ukrytych haseł grup\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: nie można zaktualizować pliku z ukrytymi hasłami grup\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: nie można skasować pliku z ukrytymi hasłami grup\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "nieznany UID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "nieznany GID: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: grupa %s nie istnieje\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: użytkownik %s nie istnieje\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: nieprawidłowa nazwa użytkownika '%s'\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: nie można zablokować /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: nie można zablokować /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: nie można zablokować /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: nie można zablokować /etc/passwd.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: nie można otworzyć plików\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: nie można zaktualizować wpisu w pliku z hasłami dla %s\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: nie można zablokować pliku z hasłami\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: nie można otworzyć pliku z hasłami\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: nie można usunąć wpisu z pliku z ukrytymi hasłami dla %s\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: nie można zaktualizować pliku z hasłami\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: nie można zaktualizować wpisu dla użytkownika %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: nie można skasować pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: nieznany GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: nieznana grupa %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: zabrakło pamięci w update_gshadow\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: nie można przepisać pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: nie można zablokować pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: nie można otworzyć pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: błąd podczas blokowania pliku z grupami\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: błąd podczas otwierania pliku z grupami\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: błąd podczas blokowania pliku z ukrytymi hasłami grup\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: błąd podczas otwierania pliku z ukrytymi hasłami grup\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: błąd podczas dodawania nowego wpisu do pliku z hasłami\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr ""
+#~ "%s: błąd podczas dodawania nowego wpisu do pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s: uwaga: CREATE_HOME nie jest obsługiwane, użyj opcji -m.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: błąd podczas aktualizacji wpisu grupy\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: błąd podczas aktualizacji wpisu grupy\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: nie można otworzyć pliku z grupami\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: nie można otworzyć pliku z ukrytymi hasłami grup\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: błąd podczas usuwania wpisu z pliku z hasłami\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: błąd podczas usuwania wpisu z pliku z ukrytymi hasłami\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: błąd podczas dodawania nowej grupy\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu nie jest niepowtarzalny\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: błąd podczas zmiany wpisu w pliku z hasłami\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: błąd podczas usuwania wpisu z pliku z hasłami\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: błąd podczas usuwania wpisu z pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: nie można uzyskać niepowtarzalnego GID\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " na '%.100s' z '%.200s'"
+
+#~ msgid " on '%.100s'"
+#~ msgstr " na '%.100s'"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: linia %d: nie można utworzyć UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: nazwa %s nie jest niepowtarzalny\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ " -h, --help\t\tdisplay this help message and exit\n"
+#~ " -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Użycie: chgpasswd [opcje]\n"
+#~ "\n"
+#~ "Opcje:\n"
+#~ " -e, --encrypted\tprzekazywane hasła są w postaci zakodowane\n"
+#~ " -h, --help\t\twyświetlenie tego opisu i zakończenie działania\n"
+#~ " -m, --md5\t\tużyj kodowania MD5 zamiast DES w przypadku kiedy "
+#~ "przekazywane\n"
+#~ "\t\t\thasła nie są zakodowane\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Brak pliku z hasłami\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Wybacz.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Wybacz, hasło dla %s nie może być jeszcze zmienione.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Wybacz."
diff --git a/po/pt.gmo b/po/pt.gmo
new file mode 100644
index 0000000..21cc134
--- /dev/null
+++ b/po/pt.gmo
Binary files differ
diff --git a/po/pt.po b/po/pt.po
new file mode 100644
index 0000000..ffc9cf1
--- /dev/null
+++ b/po/pt.po
@@ -0,0 +1,3609 @@
+# Portuguese (Portugal) Translation Project (traduz@debianpt.org)
+#
+# Nuno Sénica <njs@av.it.pt>, 2004.
+# Miguel Figueiredo <elmig@debianpt.org>, 2005, 2006, 2008, 2009, 2011, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.18\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2012-01-14 12:41+0000\n"
+"Last-Translator: Miguel Figueiredo <elmig@debianpt.org>\n"
+"Language-Team: Portuguese <traduz@debianpt.org>\n"
+"Language: pt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 1.2\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"Existem várias entradas chamadas '%s' em %s. Por favor corrija isto com pwck "
+"ou grpck.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "método de encriptação não suportado por libcrypt? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+"erro de configuração - não foi possível interpretar o valor de %s: '%s'"
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Não foi possível alocar o espaço para a informação de configuração.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"erro de configuração - item '%s' desconhecido (notifique o administrador)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr "%s: nscp não terminou normalmente (sinal %d)\n"
+
+#, fuzzy, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr "%s: nscd saiu com o estado %d"
+
+msgid "Password: "
+msgstr "Palavra-passe: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Palavra-passe de %s: "
+
+#, fuzzy
+#| msgid "Cannot open audit interface - aborting.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "Não é possível abrir o interface de auditoria - a abortar.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr "[libsemanage]: %s\n"
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr "Não foi possível criar handle de gestão SELinux\n"
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr "Política SELinux não gerida\n"
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr "Não foi possível ler armazenamento de políticas SELinux\n"
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr "Não foi possível establecer ligação de gestão SELinux\n"
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr "Não foi possível iniciar transacção SELinux\n"
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr "Não foi possível consultar seuser para %s\n"
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr "Não pode definir serange para %s\n"
+
+#, c-format
+msgid "Could not set sename for %s\n"
+msgstr "Não foi possível definir sename para %s\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr "Não foi possível modificar o mapeamento do login para %s\n"
+
+#, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "Não foi possível criar mapeamento de login SELinux para %s\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr "Não foi possível definir nome para %s\n"
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr "Não foi possível definir utilizador SELinux para %s\n"
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr "Não foi possível acrescentar mapeamento de login para %s\n"
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr "Não foi possível inicia a gestão do SELinux\n"
+
+#, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "Não pode criar a chave de utilizador SELinux\n"
+
+#, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "Não foi possível verificar o utilizador SELinux\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr "Não foi possível alterar o mapeamento de utilizador SELinux\n"
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr "Não foi possível acrescentar o mapeamento de utilizador SELinux\n"
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr "Não foi possível o 'commit' à transacção SELinux\n"
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+"Não está definido o mapeamento de login para %s, OK se foi utilizado o "
+"mapeamento predefinido\n"
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+"O mapeamento de login para %s é definido na política, não pode ser apagado\n"
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr "Não foi possível apagar o mapeamento do login para %s"
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: memória esgotada\n"
+
+#, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: não é possível fazer stat a %s: %s\n"
+
+#, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: %s não é nem um directório, nem um symlink.\n"
+
+#, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: não é possível ler o link simbólico %s: %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr "%s: link simbólico longo suspeito: %s\n"
+
+#, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: não é possível criar o directório %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: Não pode alterar o dono de %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: Não é possível alterar o modo de %s: %s\n"
+
+#, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: unlink: %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: Não é possível remover o directório %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: Não é possível renomear %s para %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: Não é possível remover %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: Não é possível criar link simbólico %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: Não conseguiu alterar os donos de %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: Não é possível lstat %s: %s\n"
+
+#, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: Aviso, o utilizador '%s' não tem ficheiro shadow tcb.\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+"%s: Emergência: o ficheiro shadow tcb de %s não é um ficheiro normal com "
+"st_nlink=1.\n"
+"A conta é mantida bloqueada.\n"
+
+#, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: mkdir: %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: não é possível abrir %s: %s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Aviso: grupo desconhecido %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Aviso: demasiados grupos\n"
+
+msgid "Your password has expired."
+msgstr "A sua palavra-passe caducou."
+
+msgid "Your password is inactive."
+msgstr "A sua palavra-passe está inactiva."
+
+msgid "Your login has expired."
+msgstr "O seu login caducou."
+
+msgid " Contact the system administrator."
+msgstr " Contacte o administrador do sistema."
+
+msgid " Choose a new password."
+msgstr " Escolha uma nova palavra-passe."
+
+msgid "You must change your password."
+msgstr "Tem de alterar a sua palavra-passe."
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "A sua palavra-passe irá caducar em %ld dias.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "A sua palavra-passe irá caducar amanhã."
+
+msgid "Your password will expire today."
+msgstr "A sua palavra-passe irá caducar hoje."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "Não é possível abrir o interface de auditoria - a abortar.\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Foi impossível mudar o dono ou o modo do tty stdin: %s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: falha ao desbloquear %s\n"
+
+#, c-format
+msgid "%s: "
+msgstr "%s: "
+
+msgid ": "
+msgstr ": "
+
+msgid "Environment overflow\n"
+msgstr "Overflow do ambiente\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Não pode alterar $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d falha desde o último login.\n"
+"O último foi %s em %s.\n"
+msgstr[1] ""
+"%d falhas desde o último login.\n"
+"O último foi %s em %s.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: Configuração inválida: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr "%s: Configuração inválida: GID_MIN (%lu), GID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "%s: falhou alocar memória: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: Não foi possível obter um GID de sistema único (não existem mais GIDs "
+"disponíveis)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: Não foi possível obter um GID único (não existem mais GIDs disponíveis)\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr ""
+"%s: Não foi possível obter um GID único (não existem mais GIDs disponíveis)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+"%s: Configuração inválida: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: não é possível criar o utilizador\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+"%s: Configuração inválida: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: não é possível criar o utilizador\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: Configuração inválida: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr "%s: Configuração inválida: UID_MIN (%lu), UID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: Não foi possível obter um UID de sistema único (não existem mais UIDs "
+"disponíveis)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: Não foi possível obter um UID único (não existem mais UIDs disponíveis)\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr ""
+"%s: Não foi possível obter um UID único (não existem mais UIDs disponíveis)\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Authentication failure\n"
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: A autenticação falhou\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: o campo '%s' é inválido\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Could not set name for %s\n"
+msgid "%s: Could not seteuid to %d\n"
+msgstr "Não foi possível definir nome para %s\n"
+
+#, fuzzy, c-format
+#| msgid "Could not set name for %s\n"
+msgid "%s: Could not set caps\n"
+msgstr "Não foi possível definir nome para %s\n"
+
+#, c-format
+msgid "%s: snprintf failed!\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: linha %d: chown %s falhou: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: linha %d: chown %s falhou: %s\n"
+
+msgid "Too many logins.\n"
+msgstr "Demasiados logins.\n"
+
+msgid "You have new mail."
+msgstr "Tem novo correio."
+
+msgid "No mail."
+msgstr "Não tem correio."
+
+msgid "You have mail."
+msgstr "Tem correio."
+
+msgid "no change"
+msgstr "sem alterações"
+
+msgid "a palindrome"
+msgstr "um palíndromo"
+
+msgid "case changes only"
+msgstr "apenas alteração de maiúsculas/minúsculas"
+
+msgid "too similar"
+msgstr "demasiado parecido"
+
+msgid "too simple"
+msgstr "demasiado simples"
+
+msgid "rotated"
+msgstr "rodado"
+
+msgid "too short"
+msgstr "demasiado curto"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Palavra-passe inválida: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() falhou, erro %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+msgid "passwd: password unchanged\n"
+msgstr "passwd: a palavra-passe não foi alterada\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: a palavra-passe foi actualizada com sucesso\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: o repositório %s não é suportado\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start: erro %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd: pam_start() falhou, erro %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Palavra-passe incorrecta para %s.\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr "%s: múltiplas opções --root\n"
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr "%s: opção '%s' necessita de um argumento\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: falhou baixar privilégios (%s)\n"
+
+#, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: caminho de chroot inválido: '%s'\n"
+
+#, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: não pode aceder ao directório chroot %s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: não pode aceder ao directório chroot %s: %s\n"
+
+#, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: não foi possível fazer chroot para o directório %s: %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"Valor inválido de ENCRYPT_METHOD: '%s'.\n"
+"A utilizar o valor predefinido DES.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Não foi possível mudar para o directório '%s'\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Directório não encontrado, a entrar para HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Não foi possível executar %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Directório raiz inválido '%s'\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Não é possível mudar o directório raiz para '%s'\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: o utilizador %s está actualmente no sistema\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: o utilizador %s está actualmente no sistema\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Não é possível determinar o nome do seu tty."
+
+msgid "No"
+msgstr "Não"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Utilização: %s [opções] LOGIN\n"
+"\n"
+"Opções:\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+" -d, --lastday ÚLTIMO_DIA definir data da última alteração da\n"
+" palavra-passe para ÚLTIMO_DIA\n"
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -E, --expiredate DATA_EXPIRA definir a data em que a conta caduca\n"
+" para DATA_EXPIRA\n"
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+" -h, --help mostrar esta mensagem de ajuda e sair\n"
+
+#, fuzzy
+#| msgid " -g, --group edit group database\n"
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr " -g, --group editar base de dados de grupos\n"
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -I, --inactive INACTIVO definir a palavra-passe como inactiva após\n"
+" expirar em INACTIVO\n"
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+" -l, --list mostrar informação de envelhecimento da \n"
+" conta\n"
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -m, --mindays MIN_DIAS definir para MIN_DIAS o número mínimo de\n"
+" dias para alterar a palavra-passe\n"
+
+#, fuzzy
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -M, --maxdays MAX_DIAS definir para MAX_DIAS o número máximo de\n"
+" dias para alterar a palavra-passe\n"
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr " -R, --root CHROOT_DIR\t\tdirectório para onde fazer chroot\n"
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -W, --warndays DIAS_AVISO definir para DIAS_AVISO o número de dias\n"
+" para aviso de caducar\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Introduza o novo valor, ou carregue em ENTER para o valor pré-definido"
+
+msgid "Minimum Password Age"
+msgstr "Idade Mínima da palavra-passe"
+
+msgid "Maximum Password Age"
+msgstr "Idade Máxima da palavra-passe"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Última Alteração da palavra-passe (AAAA-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Aviso de Caducidade da palavra-passe"
+
+msgid "Password Inactive"
+msgstr "Palavra-passe Inactiva"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Data de Caducidade da Conta (AAAA-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Última alteração da palavra-passe\t\t\t\t\t: "
+
+msgid "never"
+msgstr "nunca"
+
+msgid "password must be changed"
+msgstr "a palavra-passe tem de ser alterada"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "A palavra-passe caduca em\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Palavra-passe inactiva\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "A conta caduca\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Número mínimo de dias entre alterações da palavra-passe\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Número máximo de dias entre alterações de palavra-passe\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Número de dias de aviso antes da palavra-passe caducar\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: a data '%s' é inválida\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: argumento numérico inválido '%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: não incluir \"l\" com outras flags\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Permissão negada.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Não é possível determinar o seu nome de utilizador.\n"
+
+#, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: PAM: %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: não é possível bloquear %s, tente novamente mais tarde\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: não é possível abrir %s\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: falha ao escrever as alterações em %s\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: falhou a preparação para a nova %s entrada '%s'\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: o ficheiro de palavras-passe shadow não está presente\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: o utilizador `%s' não existe em %s\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "A alterar a informação de envelhecimento para %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: erro na alteração de campos\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Utilização: %s [opções] [LOGIN]\n"
+"\n"
+"Opções:\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+" -f, --full-name NOME_COMPLETO alterar o nome completo do utilizador\n"
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+" -h, --home-phone TEL_CASA\talterar o número de telefone de casa do "
+"utilizador\n"
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr " -o, --other OUTRA_INFO\talterar outra info GECOS do utilizador\n"
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr " -r, --root NUMERO_PORTA\talterar o número da porta do utilizador\n"
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+" -u, --help mostrar esta mensagem de ajuda e sair\n"
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+" -w, --work-phone TEL_EMPREGO alterar o número de telefone do emprego do "
+"utilizador\n"
+
+msgid "Full Name"
+msgstr "Nome Completo"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "Número da Sala"
+
+msgid "Work Phone"
+msgstr "Telefone do Emprego"
+
+msgid "Home Phone"
+msgstr "Telefone de Casa"
+
+msgid "Other"
+msgstr "Outra Informação"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Não é possível alterar o ID para root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: nome com caracteres não-ASCII: '%s'\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: nome inválido: '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s: número da sala com caracteres não-ASCII: '%s'\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: número de sala inválido: '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: telefone do emprego inválido: '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: telefone de casa inválido: '%s'\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s' contém caracteres não-ASCII\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s' contém caracteres não permitidos.\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: o utilizador '%s' não existe\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: não é possível alterar o utilizador '%s' no cliente NIS.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: '%s' é o mestre NIS para este cliente.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "A alterar a informação de utilizador de %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: valores demasiado grandes\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Utilização: %s [opções]\n"
+"\n"
+"Opções:\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr " -c, --crypt-method MÉTODO\to método crypt (um de %s)\n"
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+" -e, --encrypted as palavras-passe fornecidas são "
+"encriptadas\n"
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+" -m, --md5 encriptar a palavra-passe de texto\n"
+" utilizando o algoritmo MD5\n"
+
+#, fuzzy
+#| msgid ""
+#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
+#| " crypt algorithms\n"
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+" -s, --sha-rounds número de iterações SHA para algoritmos\n"
+" de encriptação SHA*\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: a flag %s só é permitida com a flag %s\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: as flags -c, -e e -m são exclusivas\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: método de encriptação não suportado: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: linha %d: linha demasiado comprida\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: linha %d: falta a nova palavra-passe\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: Falhou ao escrever %s: %s\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: linha %d: o grupo '%s' não existe\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: linha %d: falhou preparar o novo %s registo '%s'\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: foi detectado um erro, as alterações foram ignoradas\n"
+
+#, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: (linha %d, utilizador %s) palavra passe não mudou\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: linha %d: o utilizador '%s' não existe\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+" -s, --shell SHELL nova shell de login para a conta do\n"
+" utilizador\n"
+
+msgid "Login Shell"
+msgstr "Shell de Login"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Não pode alterar a shell para '%s'.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "A alterar a shell de entrada de %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Entrada inválida: %s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s: %s é uma shell inválida\n"
+
+#, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: Aviso: %s não existe\n"
+
+#, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: Aviso: %s não é executável\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+" -c, --check\t\t\tverificar quando expira a palavra-passe do utilizador\n"
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+" -f, --force\t\t\tforçar a alteração da palavra-passe se a palavra-passe do "
+"utilizador já tiver expirado\n"
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: conflito entre as opções %s e %s\n"
+
+#, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "%s: argumento inesperado: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+" -a, --all mostrar registos do faillog para todos os "
+"utilizadores\n"
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+" -l, --lock-secs SEG depois de login falhado bloquear por SEG "
+"segundos\n"
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+" -m, --maximum MAX definir os contadores de máximo de logins "
+"falhados para MAX\n"
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr " -r, --reset apagar o contador de logins falhados\n"
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time DIAS mostrar os registos do faillog mais recentes "
+"do que DIAS\n"
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+" -u, --user LOGIN/RANGE mostrar registo faillog ou manter "
+"contadores\n"
+" de falhas e limites (se utilizado com -r, -"
+"m\n"
+" ou -l) apenas para LOGIN(s) especificado(s)\n"
+
+#, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: Falhou obter a entrada para UID %lu\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "Login Falhas Máximo Última Em\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr " [faltam %lus]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds bloqueio]"
+
+#, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s: Falhou reiniciar a contagem de falhas para o UID %lu\n"
+
+#, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: Falhou definir o máximo para UID %lu\n"
+
+#, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: Falhou definir a hora de bloqueio para UID %lu\n"
+
+#, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "%s: Utilizador ou gama desconhecida: %s\n"
+
+#, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: Não conseguiu obter o tamanho de %s: %s\n"
+
+#, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: Falhou ao escrever %s: %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Utilização: %s [opção] GRUPO\n"
+"\n"
+"Opções:\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr " -a, --add UTILIZADOR acrescentar UTILIZADOR ao GRUPO\n"
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr " -d, --delete UTILIZADOR remover UTILIZADOR do GRUPO\n"
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr " -Q, --root CHROOT_DIR\t\tdirectório para onde fazer chroot\n"
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr " -r, --remove-password remover a palavra-passe do GRUPO\n"
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+" -R, --restrict restringir acesso ao grupo aos seus membros\n"
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr " -M, --members UTILIZADOR,... definir a lista de membros do GRUPO\n"
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+" -A, --administrators ADMIN,...\n"
+" definir a lista de administradores do GRUPO\n"
+
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "Excepto para as opções -A e -M, as opções não podem ser combinadas.\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "As opções não podem ser combinadas.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: são necessárias palavras-passe shadow de grupo para -A\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: o grupo '%s' não existe em %s\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: falha ao fechar %s de apenas leitura\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "A alterar a palavra-passe para o grupo %s\n"
+
+msgid "New Password: "
+msgstr "Nova Palavra-passe: "
+
+msgid "Re-enter new password: "
+msgstr "Introduza novamente a nova palavra-passe: "
+
+msgid "They don't match; try again"
+msgstr "Não coincidem; tente de novo"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Tente de novo mais tarde\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "A adicionar o utilizador %s ao grupo %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "A remover o utilizador %s do grupo %s\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: o utilizador '%s' não é membro de '%s'\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Não é um tty\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Utilização: %s [opções] GRUPO\n"
+"\n"
+"Opções:\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+" -f, --force sair com sucesso se o grupo já existir,\n"
+" e cancelar -g se o GID já for utilizado\n"
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr " -g, --gid GID utilizar GID para o novo grupo\n"
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+" -K, --key KEY=VALOR ultrapassar as predefinições de /etc/login."
+"defs\n"
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique permitir criar grupos com GIDs duplicados\n"
+" (não-únicos)\n"
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+" -p, --password PALAVRA-PASSE utilizar a palavra-passe encriptada para o "
+"novo grupo\n"
+
+msgid " -r, --system create a system account\n"
+msgstr " -r, --system criar uma conta de sistema\n"
+
+#, fuzzy
+#| msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr " -R, --root CHROOT_DIR\t\tdirectório para onde fazer chroot\n"
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: '%s' não é um nome válido para o grupo\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: ID de grupo '%s' inválido\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K necessita de KEY=VALOR\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: o grupo '%s' já existe\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s: o GID '%lu' já existe\n"
+
+#, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: Não é possível configurar o serviço cleanup.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr " -r, --reset apagar o contador de logins falhados\n"
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: não é possível remover a entrada '%s' de %s\n"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: não é possível remover o grupo primário do utilizador '%s'\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: o grupo '%s' não existe.\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: o grupo '%s' é um grupo NIS\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s é o mestre NIS\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: o utilizador '%s' já é um membro de '%s'\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: Memória esgotada. Não é possível actualizar %s.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Utilização: %s [opções] [acção]\n"
+"\n"
+"Opções:\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+" -g, --group nomegrupo mudar nomegrupo em vez do grupo do "
+"utilizador\n"
+" (apenas root)\n"
+
+msgid "\n"
+msgstr "\n"
+
+msgid "Actions:\n"
+msgstr "Acções:\n"
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+" -a, --add NomeUtilizador acrescentar NomeUtilizador aos membros do "
+"grupo\n"
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+" -d, --delete NomeUtilizador remover NomeUtilizador dos membros do grupo\n"
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr " -p, --purge purgar todos os membros do grupo\n"
+
+msgid " -l, --list list the members of the group\n"
+msgstr " -l, --list listar os membros do grupo\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: o seu nome de grupo não coincide com o seu nome de utilizador\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s: apenas o root pode utilizar a opção -g/--group\n"
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr " -g, --gid GID mudar o ID do grupo para GID\n"
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr " --n, --new-name NOVO_GRUPO mudar o nome para NOVO_GRUPO\n"
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+" -o, ..non-unique permitir utilizar um GID duplicado (não-"
+"único)\n"
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+" -p, --password PALAVRAPASSE mudar a palavra-passe para esta "
+"PALAVRAPASSE\n"
+" (encriptada)\n"
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: nome de grupo '%s' inválido\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: o grupo %s é um grupo NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: utilizador desconhecido %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Utilização: %s [opções] [grupo [gshadow]]\n"
+"\n"
+"Opções:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Utilização: %s [opções] [grupo]\n"
+"\n"
+"Opções:\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+" -r, --read-only\t\tmostrar erros e avisos\n"
+"\t\t\t\tmas não alterar ficheiros\n"
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr " -s, --sort\t\t\tordenar entradas por UID\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s e -r são incompatíveis\n"
+
+msgid "invalid group file entry"
+msgstr "entrada no ficheiro dos grupos inválida"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "apagar a linha '%s'? "
+
+msgid "duplicate group entry"
+msgstr "entrada de grupo duplicada"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "o nome de grupo '%s' é inválido\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "ID '%lu' de grupo é inválido\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "grupo %s: não existe o utilizador %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "apagar o membro '%s'? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "nenhuma entrada coincidente de ficheiro de grupo em %s\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "adicionar o grupo '%s' em %s? "
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"o grupo %s tem uma entrada em %s, mas o campo da palavra-passe em %s não "
+"está definido para 'x'\n"
+
+msgid "invalid shadow group file entry"
+msgstr "a entrada no ficheiro de shadow dos grupos é inválida"
+
+msgid "duplicate shadow group entry"
+msgstr "entrada de grupo em shadow duplicada"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "grupo shadow %s: nenhum utilizador administrador %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "apagar o membro administrativo '%s'? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "grupo shadow %s: o utilizador %s não existe\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: os ficheiros foram actualizados\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: sem alterações\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: não é possível apagar %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Utilização: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Utilização: id\n"
+
+msgid " groups="
+msgstr " grupos="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+" -b, --before DIAS escrever apenas registos de lastlog mais\n"
+" antigos que DIAS\n"
+
+#, fuzzy
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+" -a, --all mostrar registos do faillog para todos os "
+"utilizadores\n"
+
+#, fuzzy
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+" -a, --all mostrar registos do faillog para todos os "
+"utilizadores\n"
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time DIAS escrever apenas registos de lastlog mais\n"
+" recentes que DIAS\n"
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+" -u, --user LOGIN mostra o registo de lastlog para o\n"
+" utilizador LOGIN\n"
+
+msgid "Username Port From Latest"
+msgstr "Utilizador Porto De Último"
+
+msgid "Username Port Latest"
+msgstr "Utilizador Porto Último"
+
+msgid "**Never logged in**"
+msgstr "**Nunca entrou no sistema**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s: Falhou obter a entrada para UID %lu\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s: falhou apagar o registo lastlog para o UID %lu: %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 "Utilização: %s [-p] [nome]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h máquina] [-f nome]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r máquina\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr "erro de configuração - não foi possível processar o valor %s: '%d'"
+
+msgid "Invalid login time"
+msgstr "Tempo de login inválido"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Sistema encerrado para manutenção de rotina"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Encerramento ultrapassado -- login de root permitido.]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr "%s: Não é possível trabalhar sem root\n"
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Sem entrada utmp. Tem de executar \"login\" a partir do \"sh\" de nível "
+"mais baixo"
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Tempo de login caducou após %u segundos.\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: Falha de PAM, a abortar: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s login: "
+
+msgid "login: "
+msgstr "login: "
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Número máximo de tentativas excedidas (%u)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: abortar pedido por PAM\n"
+
+msgid "Login incorrect"
+msgstr "Login incorrecto"
+
+#, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "Não pode encontrar utilizador (%s)\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s login: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: falha ao bifurcar: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSTTY falhou em %s"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Aviso: o login foi novamente permitido após um tempo de bloqueio."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Última entrada no sistema: %s em %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Última entrada no sistema: %.19s em %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " de %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"tempo para login excedido\n"
+"\n"
+
+msgid "Usage: logoutd\n"
+msgstr "Utilização: logoutd\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, c-format
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: falhou remover %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: falhou remover %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to unlock %s\n"
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: falha ao desbloquear %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to find tcb directory for %s\n"
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: falhou encontrar o directório tcb para %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Failed to create tcb directory for %s\n"
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: Falhou a criação do directório tcb para %s\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Utilização: newgrp [-] [grupo]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Utilização: sg grupo [[-c] comando]\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: Falhou ao escrever %s: %s\n"
+
+msgid "Invalid password.\n"
+msgstr "Palavra-passe inválida.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: falhou a bifurcação de: %s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: o GID '%lu' não existe\n"
+
+msgid "too many groups\n"
+msgstr "demasiados grupos\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+#, fuzzy
+#| msgid " -q, --quiet quiet mode\n"
+msgid " -b, --badnames allow bad names\n"
+msgstr " -q, --quiet modo silencioso\n"
+
+msgid " -r, --system create system accounts\n"
+msgstr " -r, --system criar contas de sistema\n"
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: o grupo '%s' é um grupo shadow, mas não existe em /etc/group\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: ID '%s' de utilizador inválido\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: o nome de utilizador '%s' é inválido\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: linha %d: linha inválida\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: não é possível actualizar a entrada do utilizador %s (não está na base "
+"de dados passwd)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: linha %d: não é possível criar o utilizador\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: linha %d: não é possível criar o grupo\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: linha %d: o utilizador '%s' não existe em %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: linha %d: não é possível actualizar a palavra-passe\n"
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: linha %d: mkdir %s falhou: %s\n"
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: linha %d: chown %s falhou: %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: linha %d: não é possível actualizar o registo\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: falhou a preparação para a nova %s entrada '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: não é possível criar o utilizador\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: não é possível criar grupo\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+" -a, --all reportar o estado das palavras-passe de\n"
+" todas as contas\n"
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+" -d, --delete apagar a palavra-passe para a conta "
+"indicada\n"
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+" -e, --expire forçar que a palavra-passe caduque para a\n"
+" conta indicada\n"
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+" -k, --keep-tokens apenas mudar a palavra-passe se tiver\n"
+" caducado\n"
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -i, --inactive INACTIVA definir a palavra-passe como inactiva após\n"
+" caducar para INACTIVA\n"
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr ""
+" -l, --lock bloquear a palavra-passe da conta indicada\n"
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -n, --mindays MIN_DIAS definir para MIN_DIAS o número de dias\n"
+" antes de alterar a palavra-passe\n"
+
+msgid " -q, --quiet quiet mode\n"
+msgstr " -q, --quiet modo silencioso\n"
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+" -r, --repository REPOSITÓRIO mudar a palavra-passe no repositório\n"
+" REPOSITÓRIO\n"
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+" -S, --status reportar estado da palavra-passe na conta\n"
+" indicada\n"
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+" -u, --unlock desbloquear a palavra-passe da conta\n"
+" indicada\n"
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -w, --warndays AVISAR_DIAS definir para AVISAR_DIAS o número de dias\n"
+" para alerta de caducar\n"
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -x, --maxdays MAX_DIAS definir para MAX_DIAS o número de dias\n"
+" máximo antes de alterar a palavra-passe\n"
+
+msgid "Old password: "
+msgstr "Palavra-passe antiga: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Introduza a nova palavra-passe (mínimo de %d caracteres)\n"
+"Por favor utilize uma combinação de letras maiúsculas e minúsculas e de "
+"números.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Introduza a nova palavra-passe (mínimo de %d, máximo de %d caracteres)\n"
+"Por favor utilize um combinação de letras maiúsculas e minúsculas e de "
+"números.\n"
+
+msgid "New password: "
+msgstr "Nova palavra-passe: "
+
+msgid "Try again."
+msgstr "Tente de novo."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Aviso: palavra-passe fraca (introduza-a de novo para usá-la mesmo assim)."
+
+msgid "They don't match; try again.\n"
+msgstr "Não coincidem; tente de novo.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "A palavra-passe para %s não pode ser alterada.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "A palavra-passe para %s ainda não pode ser alterada.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: desbloquear a palavra-passe iria resultar numa conta sem palavra-passe.\n"
+"Você deve definir a palavra-passe com usermod -p para desbloquear a palavra-"
+"passe desta conta.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: o repositório %s não é suportado\n"
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not authorized to change the password of %s\n"
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr "%s: %s não está autorizado a alterar a palavra-passe de %s\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Não pode ver ou alterar a informação da palavra-passe para %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "A alterar a palavra-passe de %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "A palavra-passe de %s não foi alterada.\n"
+
+#, c-format
+msgid "%s: password changed.\n"
+msgstr "%s: palavra-passe alterada.\n"
+
+#, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "%s: informação de caducidade da palavra-passe alterada.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Utilização: %s [opções] [passwd]\n"
+"\n"
+"Opções:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Utilização: %s [opções] [passwd [shadow]]\n"
+"\n"
+"Opções:\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr " -q, --quiet apenas relatar erros\n"
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+"%s: não é permitido utilizar ficheiro shadow alternativo quando USE_TCB está "
+"habilitado.\n"
+
+msgid "invalid password file entry"
+msgstr "entrada no ficheiro de palavras-passe inválida"
+
+msgid "duplicate password entry"
+msgstr "entrada de palavra-passe duplicada"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "o nome de utilizador '%s' é inválido\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "ID '%lu' de utilizador inválido\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "utilizador '%s': grupo %lu não existe\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "utilizador '%s': o directório '%s' não existe\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "utilizador '%s': o programa '%s' não existe\n"
+
+#, c-format
+msgid "no tcb directory for %s\n"
+msgstr "nenhum directório tcb para %s\n"
+
+#, c-format
+msgid "create tcb directory for %s?"
+msgstr "criar o directório tcb para %s?"
+
+#, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "falhou a criação do directório tcb para %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: não é possível bloquear %s.\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "nenhuma entrada de ficheiro de palavra-passe coincidente em %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "acrescentar utilizador '%s' em %s?"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"o utilizador %s tem uma entrada em %s, mas o seu campo de palavra-passe em "
+"%s não está definido como 'x'\n"
+
+msgid "invalid shadow password file entry"
+msgstr "entrada no ficheiro de shadow de palavras-passe inválida"
+
+msgid "duplicate shadow password entry"
+msgstr "entrada da palavra-passe shadow duplicada"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "utilizador %s: a última alteração de palavra-passe foi no futuro\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: não é possível ordenar registos em %s\n"
+
+#, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: não pode trabalhar com tcb habilitado\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: falhou mudar o modo de %s para 0600\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Acesso a su para essa conta foi NEGADO.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Autenticação por palavra-passe foi contornada.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Por favor introduza a SUA palavra-passe como autenticação.\n"
+
+#, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: Não é possível fazer fork à shell de utilizador.\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr "%s: mau funcionamento de sinal\n"
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr "%s: mau funcionamento de máscara de sinal\n"
+
+msgid "Session terminated, terminating shell..."
+msgstr "Sessão terminada, a terminar shell..."
+
+#, c-format
+msgid " ...killed.\n"
+msgstr " ...morto.\n"
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr " ...á espera que o processo-filho termine.\n"
+
+msgid " ...terminated.\n"
+msgstr " ...terminado.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: su [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
+#| " -h, --help display this help message and exit\n"
+#| " -, -l, --login make the shell a login shell\n"
+#| " -m, -p,\n"
+#| " --preserve-environment do not reset environment variables, and\n"
+#| " keep the same shell\n"
+#| " -s, --shell SHELL use SHELL instead of the default in "
+#| "passwd\n"
+#| "\n"
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"Utilização: su [opções] [LOGIN]\n"
+"\n"
+"Opções:\n"
+" -c, --command COMANDO passar COMANDO à shell invocada\n"
+" -h, --help mostrar esta mensagem de ajuda e sair\n"
+" -, -l, --login tornar a shell numa shell de login\n"
+" -m, -p,\n"
+" --preserve-environment não reiniciar as variáveis de ambiente, e\n"
+" manter a mesma shell\n"
+" -s, --shell SHELL utilizar SHELL em vez da omissão em passwd\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ignorado)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Não está autorizado a fazer su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Introduza a sua palavra-passe)"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: A autenticação falhou\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s: Não está autorizado a fazer su nessa altura\n"
+
+#, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "Nenhuma palavra-passe para o utilizador '%s'\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: deve ser executado a partir de um terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: erro %d\n"
+
+#, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: Não pode remover o terminal de controlo\n"
+
+#, c-format
+msgid "Cannot execute %s\n"
+msgstr "Não foi possível executar %s\n"
+
+msgid "No password file"
+msgstr "Ficheiro de palavras-passe não existe"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY falhou"
+
+msgid "No password entry for 'root'"
+msgstr "Não está definida nenhuma palavra-passe para 'root'"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Pressione control-d para continuar com o arranque normal,\n"
+"(ou introduza a palavra-passe de root para manutenção do sistema):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "A Entrar no Modo de Manutenção do Sistema"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr "%s: foi criado %s, mas não pode ser removido\n"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr "%s: a configuração %s em %s será ignorada\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr ""
+"%s: não é possível criar um novo ficheiro de configurações pré-definidas\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr ""
+"%s: não é possível criar um novo ficheiro de configurações pré-definidas\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr ""
+"%s: não é possível abrir um novo ficheiro de configurações pré-definidas\n"
+
+#, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: linha demasiado longa em %s: %s..."
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: Não é possível criar link simbólico %s: %s\n"
+
+#, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: renomear: %s: %s\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: o grupo '%s' é um grupo NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: estão especificados demasiados grupos (max %d).\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Utilização: %s [opções] LOGIN\n"
+" %s -D\n"
+" %s -D [opções]\n"
+"\n"
+"Opções:\n"
+
+#, fuzzy
+#| msgid " -s, --shadow edit shadow or gshadow database\n"
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+" -s, --shadow editar a base de dados shadow ou gshadow\n"
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+" -b, --base-dir BASE_DIR directório base para o directório home da\n"
+" nova conta\n"
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr " -c, --comment COMENTÁRIO campo GECOS da nova conta\n"
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr " -d, --home-dir HOME_DIR directório home para a nova conta\n"
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+" -D, --defauls escrever ou alterar a configuração "
+"predefinida de useradd\n"
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr " -e, --expiredate DATA_EXPIRA data de expiração para a nova conta\n"
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+" -f, --inactiva INACTIVA período de inactividade da palavra-passe "
+"para a nova conta\n"
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr " -g, --gid GRUPO nome ou ID do grupo primário da nova conta\n"
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+" -G, --groups GRUPOS lista de grupos suplementares da nova conta\n"
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+" -k, --skel SKEL_DIR utilizar este directório skeleton como "
+"alternativa\n"
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+" -l, --no-log-init não acrescentar o utilizador às bases de\n"
+" dados lastlog e faillog\n"
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+" -m, --create-home criar o directório home do utilizador\n"
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+" -M, --no-create-home não criar o directório home do utilizador\n"
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+" -N, --no-user-group não criar um grupo com o mesmo nome do "
+"utilizador\n"
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique permitir criar utilizadores com UID\n"
+" duplicado (não-único)\n"
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+" -p, --password PALAVRA-PASSE palavra-passe encriptada para a nova conta\n"
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr " -s, --shell SHELL shell de login para a nova conta\n"
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr " -u, --uid UID ID do utilizador para a nova conta\n"
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+" -U, --user-group criar um grupo com o mesmo nome do utilizador\n"
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+" -Z, --selinux-user SEUSER utilizar um SEUSER especifico para o\n"
+" mapeamento do utilizador de SELinux\n"
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: directório base inválido '%s'\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: o comentário '%s' é inválido\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: o directório home '%s' é inválida\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: são necessárias palavras-passe shadow para -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: são necessárias palavras-passes shadow para -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: o campo '%s' é inválido\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: a shell '%s' é inválida\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Warning: %s is not executable\n"
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: Aviso: %s não é executável\n"
+
+#, c-format
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr "%s: -Z necessita de um kernel com SELinux activo\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr "%s: falhou apagar o registo faillog para o UID %lu: %s\n"
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr "%s: falhou apagar o registo lastlog para o UID %lu: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s: falhou apagar o registo faillog para o UID %lu: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: falhou a preparação para a nova %s entrada '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error changing fields\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: erro na alteração de campos\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: não é possível criar o directório %s\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s home directory (%s) not found\n"
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: o directório home %s (%s) não foi encontrado\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to allocate memory: %s\n"
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "%s: falhou alocar memória: %s\n"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: não é possível criar o directório %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: linha %d: chown %s falhou: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: linha %d: chown %s falhou: %s\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "Criar ficheiro mailbox"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Não foi encontrado o grupo 'mail'.\n"
+"A criar o ficheiro mailbox do utilizador com o modo 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "A definir as permissões do ficheiro mailbox"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: o utilizador '%s' já existe\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: o grupo %s existe - se pretende adicionar este utilizador a esse grupo, "
+"utilize -g.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: não é possível criar o utilizador\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %lu não é único\n"
+
+#, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: Falhou a criação do directório tcb para %s\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: não é possível criar grupo\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: não é possível criar o utilizador\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: não é possível criar grupo\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: aviso: o directório home já existe.\n"
+"Não irá copiar quaisquer ficheiros o directório skel para lá.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+"%s: aviso: falhou o mapeamento do nome de utilizador %s para o nome de "
+"utilizador SELinux %s.\n"
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+" -f, --force forçar a remoção de ficheiros,\n"
+" mesmo que não pertençam ao utilizador\n"
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+" -r, --remove remover o directório home e o spool de mail\n"
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+" -Z, --selinux-user remover qualquer mapeamento de utilizador "
+"SELinux para o utilizador\n"
+
+#, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr ""
+"%s: grupo %s não foi removido porque não é o grupo primário do utilizador "
+"%s\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr "%s: grupo %s não foi removido porque tem outros membros.\n"
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: o grupo %s é o grupo primário de outro utilizador e não é removido.\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "%s: não é possível remover a entrada '%s' de %s\n"
+
+#, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: %s spool de mail (%s) não foi encontrado\n"
+
+#, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: aviso: não é possível remover %s: %s\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: o %s não pertence a %s, não será removido\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+"%s: Não é possível alocar memória, a entrada tcb para %s não foi removida.\n"
+
+#, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: Falhou baixar privilégios %s\n"
+
+#, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: Não pode remover o conteúdo de %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: não é possível remover os ficheiros tcb para '%s': %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: o utilizador %s é um utilizador NIS\n"
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: o directório home %s (%s) não foi encontrado\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: o directório %s não será removido (iria remover a home do utilizador "
+"%s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: erro ao remover o directório %s\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: erro ao remover o directório %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+"%s: aviso: falhou a remoção do mapeamento do nome de utilizador %s para "
+"utilizador SELinux.\n"
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr " -c, --comment COMENTÁRIO novo valor do campo GECOS\n"
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+" -d, --home HOME_DIR novo directório home para a conta do\n"
+" utilizador\n"
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -e, --expiredate DATA_EXPIRAR definir a data em que a conta caduca\n"
+" para DATA_EXPIRAR\n"
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -f, --inactive INACTIVA definir para INACTIVA o número de dias após\n"
+" os quais uma palavra-passe caducada passa\n"
+" a inactiva\n"
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+" -g, --gid GRUPO forçar a utilização do GRUPO como novo\n"
+" grupo primário\n"
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr " -G, --groups GRUPOS nova lista de grupos adicionais\n"
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+" -a, --append juntar o utilizador aos GRUPOS\n"
+" suplementares mencionados pela opção -G\n"
+" sem o/a remover dos outros grupos\n"
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr " -l, --login NEW_LOGIN novo valor para o nome de login\n"
+
+msgid " -L, --lock lock the user account\n"
+msgstr " -L, --lock bloquear a conta do utilizador\n"
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+" -m, --move-home mover o conteúdo do directório home para\n"
+" o novo local (usar apenas com -d)\n"
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique permitir utilizar UID duplicado\n"
+" (não único)\n"
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+" -p, --password PALAVRA-PASSE utilizar PALAVRA-PASSE encriptada para a\n"
+" nova palavra-passe\n"
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr " -u, --uid UID novo UID para a conta do utilizador\n"
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr " -U, --unlock desbloquear a conta do utilizador\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"
+msgstr ""
+" -Z, --selinux-user SEUSER\tnovo mapeamento de utilizador SELinux para a "
+"conta do utilizador\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: desbloquear a palavra-passe do utilizador iria resultar numa conta sem "
+"palavra-passe.\n"
+"Você deve definir a palavra-passe com usermod -p para desbloquear a palavra-"
+"passe deste utilizador.\n"
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: o utilizador %s já existe em %s\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: a data '%s' é inválida\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: a data '%s' é inválida\n"
+
+#, c-format
+msgid "%s: no options\n"
+msgstr "%s: sem opções\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: as flags -L, -p e -U são exclusivas\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: são necessárias palavras-passe shadow para -e e -f\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: O UID '%lu' já existe\n"
+
+#, fuzzy, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr "%s: %s não está autorizado a alterar a palavra-passe de %s\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: o directório %s existe\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+"%s: O directório home anterior (%s) não era um directório. Não é removido e "
+"não foram criados directórios home.\n"
+
+#, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: Falhou a alteração do dono do directório home"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: aviso: falhou remover completamente remover o antigo directório home %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: não é possível renomear o directório %s para %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: falhou copiar o registo lastlog do utilizador %lu para o utilizador %lu: "
+"%s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: falhou copiar o registo faillog do utilizador %lu para o utilizador %lu: "
+"%s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: aviso: o %s não pertence a %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "a alteração do dono da caixa de correio falhou"
+
+msgid "failed to rename mailbox"
+msgstr "falha ao renomear a caixa do correio"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s: falhou a preparação para a nova %s entrada '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s: falhou a preparação para a nova %s entrada '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s: falhou a preparação para a nova %s entrada '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s: falhou a preparação para a nova %s entrada '%s'\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Você alterou %s.\n"
+"Poderá ter de modificar %s para manter a consistência.\n"
+"Por favor utilize o comando '%s' para o fazer.\n"
+
+msgid " -g, --group edit group database\n"
+msgstr " -g, --group editar base de dados de grupos\n"
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr " -p, --passwd editar a base de dados passwd\n"
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+" -s, --shadow editar a base de dados shadow ou gshadow\n"
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+" -u, --user qual o ficheiro shadow tcb do utilizador a "
+"editar\n"
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: falhou remover %s\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: %s não foi alterado\n"
+
+msgid "failed to create scratch directory"
+msgstr "falhou a criação de directório 'scratch'"
+
+msgid "failed to drop privileges"
+msgstr "falhou baixar privilégios"
+
+msgid "Couldn't get file context"
+msgstr "Não foi possível obter contexto do ficheiro"
+
+msgid "setfscreatecon () failed"
+msgstr "falhou setfscreatecon ()"
+
+msgid "failed to gain privileges"
+msgstr "falhou ganhar privilégios"
+
+msgid "Couldn't lock file"
+msgstr "Não é possível obter acesso exclusivo ao ficheiro"
+
+msgid "Couldn't make backup"
+msgstr "Não é possível efectuar cópia de segurança"
+
+#, 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 saiu com o estado %d"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+msgid "failed to open scratch file"
+msgstr "falhou abrir ficheiro 'scratch'"
+
+msgid "failed to unlink scratch file"
+msgstr "falhou o unlink a ficheiro 'scratch'"
+
+msgid "failed to stat edited file"
+msgstr "falhou fazer stat ao ficheiro editado"
+
+msgid "failed to allocate memory"
+msgstr "falhou alocar memória"
+
+msgid "failed to create backup file"
+msgstr "falhou criar ficheiro de backup"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: não é possível restaurar %s: %s (a suas alterações estão em %s)\n"
+
+#, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: falhou encontrar o directório tcb para %s\n"
+
+#~ msgid " -c, --crypt-method the crypt method (one of %s)\n"
+#~ msgstr ""
+#~ " -c, --crypt-method o método de encriptação (um de %s)\n"
+
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr ""
+#~ "Utilização: vipw [opções]\n"
+#~ "\n"
+#~ "Opções:\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "O malloc(%d) falhou\n"
+
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Utilização: chage [opções] [LOGIN]\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -d, --lastday ÚLTIMO_DIA definir data da última alteração da\n"
+#~ "\t\t\t\t palavra-passe para ÚLTIMO_DIA\n"
+#~ " -E, --expiredate DATA_EXPIRA definir a data em que a conta caduca\n"
+#~ "\t\t\t\t para DATA_EXPIRA -h, --help mostrar esta "
+#~ "mensagem de ajuda e sair\n"
+#~ " -I, --inactive INACTIVO definir a palavra-passe como inactiva "
+#~ "após\n"
+#~ "\t\t\t\t expirar em INACTIVO\n"
+#~ " -l, --list mostrar informação de envelhecimento da \n"
+#~ " conta\n"
+#~ " -m, --mindays MIN_DIAS definir para MIN_DIAS o número mínimo de\n"
+#~ " dias para alterar a palavra-passe\n"
+#~ " -M, --maxdays MAX_DIAS definir para MAX_DIAS o número máximo de\n"
+#~ " dias para alterar a palavra-passe\n"
+#~ " -W, --warndays DIAS_AVISO definir para DIAS_AVISO o número de dias\n"
+#~ " para aviso de caducar\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: A autenticação PAM falhou\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "Utilização: %s [-f nome_completo] [-r num_sala] [-w telefone_trabalho]\n"
+#~ "\t[-h telefone_casa] [-o outra_info] [utilizador]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr ""
+#~ "Utilização: %s [-f nome_completo] [-r num_sala] [-w telefone_trabalho] [-"
+#~ "h telefone_casa]\n"
+
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Utilização: %s [opções]\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -c, --crypt-method o método de encriptação (um de %s)\n"
+#~ " -e, --encrypted as palavras-passe fornecidas são "
+#~ "encriptadas\n"
+#~ " -h, --help mostrar esta mensagem de ajuda e "
+#~ "terminar\n"
+#~ " -m, --md5 encriptar a palavra-passe de texto com o\n"
+#~ "\t\t\t\t algoritmo MD5\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Utilização: chsh [opções] [LOGIN]\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -h, --help mostrar esta mensagem de ajuda e sair\n"
+#~ " -s, --shell SHELL nova shell de login para a conta do\n"
+#~ " utilizador\n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "Utilização: expiry {-f|-c}\n"
+
+#~ msgid "faillog: Failed to get the entry for UID %lu\n"
+#~ msgstr "faillog: Falhou obter a entrada para UID %lu\n"
+
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "faillog: Não é possível abrir %s: %s\n"
+
+#~ msgid "faillog: Cannot get the size of %s: %s\n"
+#~ msgstr "faillog: Não foi possível obter o tamanho de %s: %s\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "Utilização: groupdel grupo\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "Utilização: %s [-r] [-s] [grupo [gshadow]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "Utilização: %s [-r] [-s] [grupo]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: -s e -r são incompatíveis\n"
+
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "Utilização: grpconv\n"
+
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "Utilização: grpunconv\n"
+
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Utilização: lastlog [opções]\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -b, --before DIAS escrever apenas registos de lastlog mais\n"
+#~ " antigos que DIAS\n"
+#~ " -h, --help mostrar esta mensagem e sai\n"
+#~ " -t, --time DIAS escrever apenas registos de lastlog mais\n"
+#~ " recentes que DIAS\n"
+#~ " -u, --user LOGIN mostra o registo de lastlog para o\n"
+#~ " utilizador LOGIN\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Utilização: passwd [opções] [LOGIN]\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -a, --all reportar o estado das palavras-passe de\n"
+#~ " todas as contas\n"
+#~ " -d, --delete apagar a palavra-passe para a conta "
+#~ "indicada\n"
+#~ " -e, --expire forçar que a palavra-passe caduque para "
+#~ "a\n"
+#~ "\t\t\t\t conta indicada\n"
+#~ " -h, --help mostrar esta mensagem de ajuda e sair\n"
+#~ " -k, --keep-tokens apenas mudar a palavra-passe se tiver\n"
+#~ "\t\t\t\t caducado\n"
+#~ " -i, --inactive INACTIVA definir a palavra-passe como inactiva "
+#~ "após\n"
+#~ "\t\t\t\t caducar para INACTIVA\n"
+#~ " -l, --lock bloquear a palavra-passe da conta "
+#~ "indicada\n"
+#~ " -n, --mindays MIN_DIAS definir para MIN_DIAS o número de dias\n"
+#~ " antes de alterar a palavra-passe\n"
+#~ " -q, --quiet modo discreto\n"
+#~ " -r, --repository REPOSITÓRIO mudar a palavra-passe no repositório\n"
+#~ "\t\t\t\t REPOSITÓRIO\n"
+#~ " -S, --status reportar estado da palavra-passe na "
+#~ "conta\n"
+#~ " indicada\n"
+#~ " -u, --unlock desbloquear a palavra-passe da conta\n"
+#~ "\t\t\t\t indicada\n"
+#~ " -w, --warndays AVISAR_DIAS definir para AVISAR_DIAS o número de "
+#~ "dias\n"
+#~ " para alerta de caducar\n"
+#~ " -x, --maxdays MAX_DIAS definir para MAX_DIAS o número de dias\n"
+#~ " máximo antes de alterar a palavra-passe\n"
+#~ "\n"
+
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr "Utilização: %s [-q] [-r] [passwd]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr "Utilização: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "Utilização: pwconv\n"
+
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "Utilização: pwunconv\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "Id desconhecido: %s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "Sem shell\n"
+
+#~ msgid ""
+#~ "Usage: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force removal of files,\n"
+#~ " even if not owned by user\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -r, --remove remove home directory and mail spool\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Utilização: userdel [opções] LOGIN\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -f, --force forçar a remoção de ficheiros,\n"
+#~ " mesmo que não pertençam ao utilizador\n"
+#~ " -h, --help mostrar esta mensagem de ajuda e sair\n"
+#~ " -r, --remove remover o directório home e o spool de "
+#~ "mail\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Utilização: usermod [opções] LOGIN\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -c, --comment COMENTÁRIO novo valor do campo GECOS\n"
+#~ " -d, --home HOME_DIR novo directório home para a conta do\n"
+#~ " utilizador\n"
+#~ " -e, --expiredate DATA_EXPIRAR definir a data em que a conta caduca\n"
+#~ " para DATA_EXPIRAR\n"
+#~ " -f, --inactive INACTIVA definir para INACTIVA o número de dias "
+#~ "após\n"
+#~ " os quais uma palavra-passe caducada "
+#~ "passa\n"
+#~ " a inactiva\n"
+#~ " -g, --gid GRUPO forçar a utilização do GRUPO como novo\n"
+#~ " grupo primário\n"
+#~ " -G, --groups GRUPOS nova lista de grupos adicionais\n"
+#~ " -a, --append juntar o utilizador aos GRUPOS\n"
+#~ "\t\t\t\t suplementares mencionados pela opção -G\n"
+#~ "\t\t\t\t sem o/a remover dos outros grupos\n"
+#~ " -h, --help mostrar esta mensagem de ajuda e sair\n"
+#~ " -l, --login NEW_LOGIN novo valor para o nome de login\n"
+#~ " -L, --lock bloquear a conta do utilizador\n"
+#~ " -m, --move-home mover o conteúdo do directório home para\n"
+#~ " o novo local (usar apenas com -d)\n"
+#~ " -o, --non-unique permitir utilizar UID duplicado\n"
+#~ "\t\t\t\t (não único)\n"
+#~ " -p, --password PALAVRA-PASSE utilizar PALAVRA-PASSE encriptada para a\n"
+#~ " nova palavra-passe\n"
+#~ " -s, --shell SHELL nova shell de login para a conta do\n"
+#~ "\t\t\t\t utilizador\n"
+#~ " -u, --uid UID novo UID para a conta do utilizador\n"
+#~ " -U, --unlock desbloquear a conta do utilizador\n"
+#~ "%s\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s: não foram especificadas flags\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: vipw [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -g, --group edit group database\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -p, --passwd edit passwd database\n"
+#~| " -q, --quiet quiet mode\n"
+#~| " -s, --shadow edit shadow or gshadow database\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group edit group database\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -p, --passwd edit passwd database\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow edit shadow or gshadow database\n"
+#~ " -u, --user which user's tcb shadow file to edit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Utilização: vipw [opções]\n"
+#~ " -g, --group editar a base de dados group\n"
+#~ " -h, --help mostrar esta mensagem de ajuda e "
+#~ "terminar\n"
+#~ " -p, --passwd editar a base de dados passwd\n"
+#~ " -q, --quit modo silencioso\n"
+#~ " -s, --shadow editar a base de dados shadow ou gshadow\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: %s [option] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --add USER add USER to GROUP\n"
+#~ " -d, --delete USER remove USER from GROUP\n"
+#~ " -r, --remove-password remove the GROUP's password\n"
+#~ " -R, --restrict restrict access to GROUP to its members\n"
+#~ " -M, --members USER,... set the list of members of GROUP\n"
+#~ "%s\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Utilização: %s [opção] GRUPO\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -a, --add UTILIZADOR\t\tacrescentar UTILIZADOR ao GRUPO\n"
+#~ " -d, --delete UTILIZADOR\tremover UTILIZADOR do GRUPO\n"
+#~ " -r, --remove-password\tremover a palavra-passe do GRUPO\n"
+#~ " -R, --restrict\t\trestringir o acesso ao GRUPO aos seus membros\n"
+#~ " -M, --members UTILIZADOR,...\tdefinir a lista de membros do GRUPO\n"
+#~ "%s\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmems [options] [action]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group groupname change groupname instead of the user's "
+#~ "group\n"
+#~ " (root only)\n"
+#~ "\n"
+#~ "Actions:\n"
+#~ " -a, --add username add username to the members of the group\n"
+#~ " -d, --delete username remove username from the members of the "
+#~ "group\n"
+#~ " -p, --purge purge all members from the group\n"
+#~ " -l, --list list the members of the group\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Utilização: groupmems [opções] [acção]\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -g, --group nomegrupo\tmudar nomegrupo em vez do grupo do utilizador\n"
+#~ "\t\t\t\t(apenas root)\n"
+#~ "\n"
+#~ "Acções:\n"
+#~ " -a, --add nomeutilizador\tacrescentar nomeutilizador aos membros do "
+#~ "grupo\n"
+#~ " -d, --delete nomeutilizador\tremover nomeutilizador dos membros do "
+#~ "grupo\n"
+#~ " -p, --purge\t\t\tpurgar todos os membros do grupo\n"
+#~ " -l, --list\t\t\tlistar todos os membros do grupo\n"
+#~ "\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s: não é possível criar %s\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s: não é possível efectuar o chown a %s\n"
+
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all display faillog records for all users\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -l, --lock-time SEC after failed login lock account to SEC "
+#~ "seconds\n"
+#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
+#~ " -r, --reset reset the counters of login failures\n"
+#~ " -t, --time DAYS display faillog records more recent than "
+#~ "DAYS\n"
+#~ " -u, --user LOGIN display faillog record or maintains "
+#~ "failure\n"
+#~ " counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ " options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Utilização: faillog [opções]\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -a, --all mostrar os registos de faillog para "
+#~ "todos\n"
+#~ " os utilizadores\n"
+#~ " -h, --help mostrar esta mensagem de ajuda e sair\n"
+#~ " -l, --lock-time SEG após login falhado bloquear conta por\n"
+#~ " SEG segundos\n"
+#~ " -m, --maximum MAX definir contadores de máximo de logins\n"
+#~ " falhados para MAX\n"
+#~ " -r, --reset esvaziar os contadores de login falhados\n"
+#~ " -t, --time DIAS mostrar registos do faillog mais "
+#~ "recentes\n"
+#~ " do que DIAS\n"
+#~ " -u, --user LOGIN mostra o registo de faillog ou "
+#~ "contadores\n"
+#~ "\t\t\t\t de falhas mantidos e limites (se utilizado\n"
+#~ "\t\t\t\t com as opções -r, -m ou -l) apenas para o\n"
+#~ " utilizador com LOGIN\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force exit with success status if the\n"
+#~ " specified group already exists\n"
+#~ " -g, --gid GID use GID for the new group\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique allow create group with duplicate\n"
+#~ " (non-unique) GID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new group\n"
+#~ " -r, --system create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Utilização: groupadd [opções] GRUPO\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -f, --force forçar sair com estado de sucesso se o\n"
+#~ " grupo especificado já existir\n"
+#~ " -g, --gid GID utilizar GID para o novo grupo\n"
+#~ " -h, --help mostrar esta mensagem de ajuda e sair\n"
+#~ " -k, --key KEY=VALOR ultrapassar os valores pré-definidos em\n"
+#~ " /etc/login.defs\n"
+#~ " -o, --non-unique permitir criar grupo com GID duplicado\n"
+#~ " (não-único)\n"
+#~ " -p, --password PALAVRA-PASSE utilizar a palavra-passe encriptada para "
+#~ "o\n"
+#~ " novo grupo\n"
+#~ " -r, --system criar uma conta de sistema\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --gid GID force use new GID by GROUP\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Utilização: groupmod [opções] GRUPO\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -g, --gid GID forçar utilizar novo GID pelo GRUPO\n"
+#~ " -h, --help mostrar esta mensagem de ajuda e sair\n"
+#~ " -n, --new-name NOVO_GRUPO forçar utilizar NOVO_GRUPO pelo GRUPO\n"
+#~ " -o, --non-unique permitir utilizar, pelo GRUPO, GIDs\n"
+#~ " duplicados (não-únicos)\n"
+#~ " -p, --password PALAVRA-PASSE utilizar palavra-passe encriptada para a\n"
+#~ " nova palavra-passe\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~ " home directory\n"
+#~ " -c, --comment COMMENT set the GECOS field for the new user "
+#~ "account\n"
+#~ " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~ " -D, --defaults print or save modified default useradd\n"
+#~ " configuration\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP for the new user account\n"
+#~ " -G, --groups GROUPS list of supplementary groups for the new\n"
+#~ " user account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -l, --no-log-init do not add the user to the lastlog and\n"
+#~ " faillog databases\n"
+#~ " -m, --create-home create home directory for the new user\n"
+#~ " account\n"
+#~ " -M, --no-create-home do not create user's home directory\n"
+#~ " (overrides /etc/login.defs)\n"
+#~ " -N, --no-user-group do not create a group with the same name "
+#~ "as\n"
+#~ " the user\n"
+#~ " -o, --non-unique allow create user with duplicate\n"
+#~ " (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new user\n"
+#~ " account\n"
+#~ " -r, --system create a system account\n"
+#~ " -s, --shell SHELL the login shell for the new user account\n"
+#~ " -u, --uid UID force use the UID for the new user "
+#~ "account\n"
+#~ " -U, --user-group create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Utilização: useradd [opções] LOGIN\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -b, --base-dir BASE_DIR directório base para o directório home\n"
+#~ " da conta do novo utilizador\n"
+#~ " -c, --comment COMENTÁRIO define o campo GECOS para a conta do "
+#~ "novo\n"
+#~ " utilizador\n"
+#~ " -d, --home-dir HOME_DIR directório home para a conta do novo\n"
+#~ " utilizador\n"
+#~ " -D, --defaults mostrar ou gravar a configuração\n"
+#~ " pré-definida alterada do useradd\n"
+#~ " -e, --expiredate EXPIRE_DATE define para EXPIRE_DATE a data de \t\t\t"
+#~ "\t caducidade da conta\n"
+#~ " -f, --inactive INACTIVA definir para INACTIVA o número de dias "
+#~ "após\n"
+#~ " os quais uma palavra-passe caducada "
+#~ "passa\n"
+#~ " a inactiva\n"
+#~ " -g, --gid GRUPO forçar a utilização do GRUPO para a "
+#~ "conta\n"
+#~ "\t\t\t\t do novo utilizador\n"
+#~ " -G, --groups GRUPOS listar grupos adicionais para a conta\n"
+#~ " do novo utilizador\n"
+#~ " -h, --help mostrar esta mensagem de ajuda e sair\n"
+#~ " -k, --skel SKEL_DIR especificar um directório SKEL "
+#~ "alternativo\n"
+#~ " -K, --key KEY=VALUE ultrapassar as pré-definições de\n"
+#~ "\t\t\t\t /etc/login.defs\n"
+#~ " -l, --no-log-init não acrescentar o utilizador às bases de\n"
+#~ " dados lastlog e faillog\n"
+#~ " -m, --create-home criar directório home para a conta\n"
+#~ " do novo utilizador\n"
+#~ " -M, no-create-home\t\t não criar o directório home para o\n"
+#~ "\t\t\t \t utilizador (ultrapassa /etc/login.defs)\n"
+#~ " -o, --non-unique deixar criar utilizador com UID "
+#~ "duplicado\n"
+#~ " (não-único)\n"
+#~ " -p, --password PALAVRA-PASSE utilizar palavra-passe encriptada para a\n"
+#~ " conta do novo utilizador\n"
+#~ " -r, --system criar uma conta de sistema\n"
+#~ " -s, --shell SHELL shell de login para a conta do novo\n"
+#~ "\t\t\t\t utilizador\n"
+#~ " -u, --uid UID forçar a utilização do UID para a conta\n"
+#~ "\t\t\t\t do novo utilizador\n"
+#~ " -U, --user-group criar um grupo com o mesmo nome do\n"
+#~ "\t\t\t\t utilizador\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "Usage: %s [options] [input]\n"
+#~ "\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -r, --system create system accounts\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Utilização: %s [opções] [input]\n"
+#~ "\n"
+#~ " -c, --crypt-method o método de encriptação (um de %s)\n"
+#~ " -r, --system criar contas de sistema\n"
+#~ "%s\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Palavra-passe definida para caducar."
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
new file mode 100644
index 0000000..4ec834f
--- /dev/null
+++ b/po/pt_BR.gmo
Binary files differ
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100644
index 0000000..451f4a0
--- /dev/null
+++ b/po/pt_BR.po
@@ -0,0 +1,3961 @@
+# Brazilian Portuguese translation of Debian's shadow package.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# André Luís Lopes <andrelop@debian.org>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.15\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2011-11-25 20:20+0100\n"
+"Last-Translator: Fred Ulisses Maranhão <fred.maranhao@gmail.com>\n"
+"Language-Team: Debian-BR Project <debian-l10n-portuguese@lists.debian.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"Cadastro de nome multiplos '%s' in %s. Por Favor conserte-o com pwck ou "
+"grpck.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "metodo de encriptacao não suportado por libcrypt? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr "erro de configuração - não consigo verificar o valor %s: '%s'"
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Não foi possível alocar espaço para a informação de configuração.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"erro de configuração - item '%s' desconhecido (notifique o administrador)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr ""
+
+msgid "Password: "
+msgstr "Senha : "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Senha de %s : "
+
+#, fuzzy
+#| msgid "Cannot open audit interface - aborting.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "Não posso abrir interface de audit - abortando.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr ""
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not set sename for %s\n"
+msgstr "Não foi possível alocar espaço para a informação de configuração.\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "Mudando a informação de idade para %s\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "%s : Não foi possível determinar seu nome de usuário.\n"
+
+#, fuzzy, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "%s : linha %d : não foi possível encontrar usuário %s\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s : sem memória\n"
+
+#, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: não foi possível fazer stat %s: %s\n"
+
+#, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: %s não é diretório, nem link simbólico.\n"
+
+#, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: Não foi possível ler o link simbólico %s: %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr "%s: link simbólico longo suspeito: %s\n"
+
+#, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: não foi possível criar o diretório %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: não foi possível mudar o proprietário de %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: não foi possível mudar o modo de %s: %s\n"
+
+#, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: removendo link: %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: não foi possível remover diretório %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: Não foi possível renomear %s para %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: Não foi possível remover %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: não foi possível criar link simbólico %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: Não foi possível mudar proprietários de %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: Não foi possível fazer lstat %s: %s\n"
+
+#, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: Atenção, usuário %s não tem arquivo tcb shadow.\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+"%s: Emergência: shadow tcb de %s não é um arquivo regular com st_nlink=1.\n"
+"A conta permanece travada.\n"
+
+#, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: mkdir: %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: Não foi possível abrir %s: %s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Aviso : grupo desconhecido %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Aviso : muitos grupos\n"
+
+msgid "Your password has expired."
+msgstr "Sua senha expirou."
+
+msgid "Your password is inactive."
+msgstr "Sua senha está inativa."
+
+msgid "Your login has expired."
+msgstr "Seu login expirou."
+
+msgid " Contact the system administrator."
+msgstr " Entre em contato com o adminisrador do sistema."
+
+msgid " Choose a new password."
+msgstr " Escolha uma nova senha."
+
+msgid "You must change your password."
+msgstr "Você deve trocar a sua senha."
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Sua senha irá expirar em %ld dias.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Sua senha irá expirar amanhã."
+
+msgid "Your password will expire today."
+msgstr "Sua senha irá expirar hoje."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "Não posso abrir interface de audit - abortando.\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Não consegui mudar o proprietário ou modo do tty stdin: %s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: falha ao destravar %s\n"
+
+#, c-format
+msgid "%s: "
+msgstr "%s: "
+
+msgid ": "
+msgstr ": "
+
+msgid "Environment overflow\n"
+msgstr "Overflow de ambiente\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Você não pode mudar $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d falhas desde o último login.\n"
+"O último foi %s em %s.\n"
+msgstr[1] ""
+"%d falhas desde o último login.\n"
+"O último foi %s em %s.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: Configuração inválida: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr "%s: Configuração inválida: GID_MIN (%lu), GID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "%s: falha ao alocar memória: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: Não foi possível obter GID de sistema único (não há mais GIDs "
+"disponíveis)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: Não foi possível obter GID único (não há mais GIDs disponíveis)\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: Não foi possível obter GID único (não há mais GIDs disponíveis)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+"%s: Configuração inválida: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: não foi possível criar usuário\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+"%s: Configuração inválida: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: não foi possível criar usuário\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: Configuração inválida: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr "%s: Configuração inválida: UID_MIN (%lu), UID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: Não foi possível obter UID de sistema único (não há mais UIDs "
+"disponíveis)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: Não foi possível obter UID único (não há mais UIDs disponíveis)\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: Não foi possível obter UID único (não há mais UIDs disponíveis)\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Authentication failure\n"
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: Falha de autenticação\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: campo '%s' inválido\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Could not seteuid to %d\n"
+msgstr "Não foi possível alocar espaço para a informação de configuração.\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not set caps\n"
+msgstr "Não foi possível alocar espaço para a informação de configuração.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't open file\n"
+msgid "%s: snprintf failed!\n"
+msgstr "%s : não foi possível abrir arquivo\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: linha %d: chown %s falhou: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: linha %d: chown %s falhou: %s\n"
+
+msgid "Too many logins.\n"
+msgstr "Muitos logins.\n"
+
+msgid "You have new mail."
+msgstr "Você possui novas mensagens."
+
+msgid "No mail."
+msgstr "Sem mensagens."
+
+msgid "You have mail."
+msgstr "Você possui mensagens."
+
+msgid "no change"
+msgstr "nenhuma mudança"
+
+msgid "a palindrome"
+msgstr "um palíndromo"
+
+msgid "case changes only"
+msgstr "mudanças de caixa somente"
+
+msgid "too similar"
+msgstr "muito similar"
+
+msgid "too simple"
+msgstr "muito simples"
+
+msgid "rotated"
+msgstr "rotacionado"
+
+msgid "too short"
+msgstr "muita pequena"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Senha ruim : %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd : pam_start() falhou, erro %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd : %s\n"
+
+msgid "passwd: password unchanged\n"
+msgstr "passwd: senha inalterada\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: senha atualizada com sucesso\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s : repositório %s não suportado\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s : pam_start : erro %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd : pam_start() falhou, erro %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Senha incorreta para %s.\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr ""
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: falha ao abandonar privilégios (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: telefone residencial inválido: '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: não foi possível criar o diretório %s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: não foi possível criar o diretório %s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: Falha ao criar diretório tcb para %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"inválido ENCRYPT_METHOD valor: '%s'.\n"
+"falta de DES.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Não consegui ir para o diretório '%s'\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Sem diretório, logando com HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Não foi possível executar %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Diretório raíz inválido '%s'\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Não foi possível mudar o diretório raíz para '%s'\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s : o usuário %s está logado no momento\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s : o usuário %s está logado no momento\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Não foi possível determinar o nome de seu tty."
+
+msgid "No"
+msgstr "Não"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Uso: %s [opções] LOGIN\n"
+"\n"
+"Opções:\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+" -d, --lastday ULTIMO_DIA define última mudança de senha para "
+"ULTIMO_DIA\n"
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -E, --expiredate DATA_EXPIRAÇÃO\n"
+" define data de expiração de conta para\n"
+" DATA_EXPIRAÇÃO\n"
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+" -h, --help mostrar esta mensagem de ajuda e sair\n"
+
+#, fuzzy
+#| msgid " -g, --group edit group database\n"
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr " -g, --group edita banco de dados de grupo\n"
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -I, --inactive INATIVO define senha inativa após expiração\n"
+" para INATIVO\n"
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+" -l, --list exibe informação sobre idade da conta\n"
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -m, --mindays MIN_DIAS define número mínimo de dias antes da\n"
+" troca de senha para MIN_DIAS\n"
+
+#, fuzzy
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -M, --maxdays MAX_DIAS define número máximo de dias antes da\n"
+" troca de senha para MAX_DIAS\n"
+" -W, --warndays AVISO_DIAS define dias para aviso de expiração para\n"
+" AVISO_DIAS\n"
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Informe o novo valor ou pressione ENTER para aceitar o padrão"
+
+msgid "Minimum Password Age"
+msgstr "Idade Mínima da Senha"
+
+msgid "Maximum Password Age"
+msgstr "Idade Máxima da Senha"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Última Mudança de Senha (YYYY-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Aviso de Expiração de Senha"
+
+msgid "Password Inactive"
+msgstr "Senha Inativa"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Data de Expiração de Senha (YYYY-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Última mudança de senha\t\t\t\t\t: "
+
+msgid "never"
+msgstr "nunca"
+
+msgid "password must be changed"
+msgstr "Senha modificada"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Senha expira\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Senha inativa\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Conta expira\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Número mínimo de dias entre troca de senhas\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Número máximo de dias entre troca de senhas\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Número de dias de avisos antes da expiração da senha\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: data `%s' inválida\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: argumento numérico `%s' inválido\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s : não inclua \"l\" com outras flags\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s : Permissão negada.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s : Não foi possível determinar seu nome de usuário.\n"
+
+#, fuzzy, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: não foi possível travar %s; tente novamente mais tarde.\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: não consegui abrir %s\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: falha ao escrever mudanças em %s\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: falha ao preparar a nova entrada %s '%s'\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s : o arquivo de senhas shadow não está presente\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: usuário '%s' não existe em %s\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Mudando a informação de idade para %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s : erro modificando campos\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Uso: %s [opções] [LOGIN]\n"
+"\n"
+"Opções:\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+" -u, --help mostrar esta mensagem de ajuda e sair\n"
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr "Nome Completo"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "Número da Sala"
+
+msgid "Work Phone"
+msgstr "Fone de Trabalho"
+
+msgid "Home Phone"
+msgstr "Fone Residencial"
+
+msgid "Other"
+msgstr "Outro"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Não foi possível mudar o ID para root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: nome com caracteres não-ASCII: '%s'\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: nome inválido: '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s: número da sala com caracteres não-ASCII: '%s'\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: número de sala inválido: '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: telefone do trabalho inválido: '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: telefone residencial inválido: '%s'\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s' contém caracteres não-ASCII\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s' contém caracteres ilegais\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: usuário '%s' não existe\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: não foi possível mudar o usuário '%s' no cliente NIS.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: '%s' é o NIS mestre para este cliente.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Modificando as informações de usuário para %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s : campos muito extensos\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Uso: %s [opções]\n"
+"\n"
+"Opções:\n"
+
+#, fuzzy, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr " -c, --crypt-method <MÉTODO> método de criptografia (dentre %s)\n"
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr " -e, --encrypted senhas fornecidas são criptografadas\n"
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+" -m, --md5 criptografa a senha em texto plano usando o\n"
+" algoritmo MD5\n"
+
+#, fuzzy
+#| msgid ""
+#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
+#| " crypt algorithms\n"
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+"-s, --sha-rounds Números de SHA rodadas para a SHA *\n"
+" algoritmos criptografados\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: flag %s é permitida somente com a flag %s\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: the -c, -e, and -m flags são exclusivos\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: metodo de encriptação não suportado : %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s : linha %d : linha muito extensa\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s : linha %d : nova senha faltando\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: falha ao remover %s\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: linha %d: grupo %s não existe\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: linha %d: falhou ao preparar a nova entrada %s '%s'\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s : erro detectado, mudanças ignoradas\n"
+
+#, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: (linha %d, usuário %s) senha inalterada\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: linha %d: usuário '%s' não existe\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+" -s, --shell SHELL novo shell de login para a conta de usuário\n"
+
+msgid "Login Shell"
+msgstr "Shell de Login"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Você não pode mudar o shell para '%s'.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Mudando o shell de login para %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s : Entrada inválida : %s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s: %s é um shell inválido\n"
+
+#, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: Atenção: %s não existe\n"
+
+#, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: Atenção: %s não é executável\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: opções %s e %s em conflito\n"
+
+#, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "%s: argumento inesperado: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+" -a, --all mostrar registros de faillog de todos os "
+"usuários\n"
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+" -l, --lock-secs SEG depois de login falhar, travar a conta por "
+"SEG segundos\n"
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+" -m, --maximum MAX ajustar o máximo de contadores de falha de "
+"logins para MAX\n"
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+" -r, --reset zera os contadores de falhas de login\n"
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time DIAS mostra os registros do faillog mais recentes "
+"que DIAS dias\n"
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+" -u, --user LOGIN/RANGE mostra o registro do faillog ou mantém\n"
+" contadores e limites de falhas (se usado "
+"com\n"
+" -r, -m ou -l) apenas para os LOGIN(s)\n"
+" especificados\n"
+
+#, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: Falha ao obter a entrada para o UID %lu\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "Login Falhas Máximo Último Em\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr " [%lus restante]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds lock]"
+
+#, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s: Falha em zerar o contador de falhas para o UID %lu\n"
+
+#, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: Falha ao ajustar o max para o UID %lu\n"
+
+#, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: Falha ao ajustar o tempo de trava para o UID %lu\n"
+
+#, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "%s: Usuário ou intervalo desconhecidos: %s\n"
+
+#, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: Não foi possível obter o tamanho de %s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: falha ao remover %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Uso: %s [opção] GRUPO\n"
+"\n"
+"Opções:\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr " -a, --add USUÁRIO adiciona o USUÁRIO ao GRUPO\n"
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr " -d, --delete USUÁRIO remove USUÁRIO do GRUPO\n"
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr " -r, --remove-password remove a senha do GRUPO\n"
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+" -R, --restrict restringe acesso dos membros ao GRUPO\n"
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr " -M, --members USUÁRIO,... ajusta a lista de membros do GRUPO\n"
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+" -A, --administrators ADMIN,...\n"
+" ajusta a lista de administradores para o "
+"GRUPO\n"
+
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "Exceto para as opções -A e -M, as opções não podem ser combinadas.\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "As opções não podem ser combinadas.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s : senhas de grupo shadow requeridas para -A\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: grupo '%s' não existe em %s\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: falha ao fechar %s somente leitura\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Mudando a senha para o grupo %s\n"
+
+msgid "New Password: "
+msgstr "Nova Senha : "
+
+msgid "Re-enter new password: "
+msgstr "Informe a nova senha novamente : "
+
+msgid "They don't match; try again"
+msgstr "As senhas não são iguais; tente novamente"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s : Tente novamente mais tarde\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Adicionando usuário %s ao grupo %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Removendo usuário %s do grupo %s\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: usuário '%s' não é um membro de '%s'\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s : Não é um tty\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Uso: %s [opções] GRUPO\n"
+"\n"
+"Opções:\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+" -f, --force sai com sucesso se o grupo já existe,\n"
+" e cancela -g se o GID já está em uso\n"
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr " -g, --gid GID usa GID para o novo grupo\n"
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+" -K, --key CHAVE=VALOR sobreescreve os padrões de /etc/login.defs\n"
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique permite criar grupos com GID duplicado\n"
+" (não-único)\n"
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+" -p, --password SENHA usa a senha criptografada para o novo grupo\n"
+
+msgid " -r, --system create a system account\n"
+msgstr " -r, --system cria uma conta de sistema\n"
+
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: '%s' não é um nome de grupo válido\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: ID de grupo '%s' inválido\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s : -K requer CHAVE=VALOR\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: grupo '%s' já existe\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s: GID '%lu' já existe\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s : Não foi possível determinar seu nome de usuário.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+" -r, --reset zera os contadores de falhas de login\n"
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: não é possível remover entrada '%s' de %s\n"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: não é possível remover o grupo primário do usuário '%s'\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: grupo '%s' não existe\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: grupo '%s' é um grupo NIS\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s : %s é o mestre NIS\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: usuário '%s' já é um membro de '%s'\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: Sem memória. Não pode atualizar %s.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Uso: %s [opções] [ação]\n"
+"\n"
+"Opções:\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+" -g, --group nome_do_grupo muda nome_do_grupo ao invés do grupo do "
+"usuário\n"
+" (apenas root)\n"
+
+msgid "\n"
+msgstr "\n"
+
+msgid "Actions:\n"
+msgstr "Ações:\n"
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+" -a, --add username adiciona username aos membros do grupo\n"
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr " -d, --delete username remove username dos membros do grupo\n"
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr " -p, --purge remove todos os membros do grupo\n"
+
+msgid " -l, --list list the members of the group\n"
+msgstr " -l, --list lista os membros do grupo\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: seu nome de grupo não casa com seu nome de usuário\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s: apenas o root pode usar a opção -g/--group\n"
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr " -g, --gid GID muda o ID do grupo para GID\n"
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr " -n, --new-name NOVO_GRUPO muda o nome para NOVO_GRUPO\n"
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique permite usar um GID (não-único) duplicado\n"
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+" -p, --password SENHA muda a senha para esta SENHA "
+"(criptografada)\n"
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: nome de grupo '%s' inválido\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s : grupo %s é um grupo NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s : usuário %s desconhecido\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Uso: %s [opções] [group [gshadow]]\n"
+"\n"
+"Opções:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Uso: %s [opções] [group]\n"
+"\n"
+"Opções:\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s e -r são incompatíveis\n"
+
+msgid "invalid group file entry"
+msgstr "entrada inválida no arquivo de grupo"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "remover a linha '%s'? "
+
+msgid "duplicate group entry"
+msgstr "entrada de grupo duplicada"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "nome de grupo '%s' inválido\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "ID de grupo '%lu' inválido\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "grupo %s : nenhum usuário %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "remover membro '%s'? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "não há entrada no arquivo de grupos em %s compatível\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "adicionar grupo '%s' em %s? "
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"o grupo %s tem uma entrada em %s, mas seu campo de senha em %s não está com "
+"o valor 'x'\n"
+
+msgid "invalid shadow group file entry"
+msgstr "entrada inválida no arquivo de grupo shadow"
+
+msgid "duplicate shadow group entry"
+msgstr "entrada de grupo shadow duplicada"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "grupo shadow %s : nenhum usuário administrativo %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "remover membro administrativo '%s'? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "grupo shadow %s : nenhum usuário %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s : os arquivos foram atualizados\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s : nenhuma mudança\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: não é possível apagar %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Uso : id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Uso : id\n"
+
+msgid " groups="
+msgstr " grupos="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+" -b, --before DIAS imprime somente registros lastlog mais\n"
+" antigos que DIAS\n"
+
+#, fuzzy
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+" -a, --all mostrar registros de faillog de todos os "
+"usuários\n"
+
+#, fuzzy
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+" -a, --all mostrar registros de faillog de todos os "
+"usuários\n"
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time DIAS imprime somente registros lastlog mais\n"
+" recentes que DIAS\n"
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+" -u, --user LOGIN imprime registro lastlog para usuário com\n"
+" LOGIN especificado\n"
+
+msgid "Username Port From Latest"
+msgstr "Nome de Usuário Porta De Último"
+
+msgid "Username Port Latest"
+msgstr "Nome de Usuário Porta Último"
+
+msgid "**Never logged in**"
+msgstr "**Nunca logou**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s: Falha ao obter a entrada para o UID %lu\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s : não foi possível atualizar arquivo de senhas\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 "Uso : %s [-p] [nome]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h host] [-f nome]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r host\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr "erro de configuração - não foi possível verificar o valor %s: '%d'"
+
+msgid "Invalid login time"
+msgstr "Hora de login inválida"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Sistema fechado para manutenção de rotina"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Desconexão contornada -- login de root permitido.]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr "%s: talvez não seja possível trabalhar sem o root efetivamente\n"
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Nenhuma entrada utmp. Voce deve executar \"login\" do \"sh\" de nível mais "
+"baixo"
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Login expirou após %u segundos.\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: Falha do PAM, abortando: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "Login %s: "
+
+msgid "login: "
+msgstr "login:"
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Número máximo de tentativas excedido (%u)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: abortar requesitado pelo PAM\n"
+
+msgid "Login incorrect"
+msgstr "Login incorreto"
+
+#, fuzzy, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "%s : linha %d : não foi possível encontrar usuário %s\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s login : "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: falha iniciando: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSCTTY falha na %s"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Aviso : login rehabilitado após travamento temporário."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Último login : %s em %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Último login : %.19s em %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " de %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"tempo de login excedido\n"
+"\n"
+
+msgid "Usage: logoutd\n"
+msgstr "Uso: logoutd\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: can't open group file\n"
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr "%s : não foi possível abrir arquivo de grupo\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: falha ao remover %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: falha ao remover %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to unlock %s\n"
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: falha ao destravar %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to find tcb directory for %s\n"
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: falha ao procurar o diretório tcb para %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Failed to create tcb directory for %s\n"
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: Falha ao criar diretório tcb para %s\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Uso : newgrp [-] [grupo]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Uso : sg group [[-c] comando]\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: falha ao remover %s\n"
+
+msgid "Invalid password.\n"
+msgstr "Senha inválida.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: falha ramificando: %s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: GID '%lu' não existe\n"
+
+msgid "too many groups\n"
+msgstr "muitos grupos\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+#, fuzzy
+#| msgid " -q, --quiet quiet mode\n"
+msgid " -b, --badnames allow bad names\n"
+msgstr " -q, --quiet modo silencioso\n"
+
+msgid " -r, --system create system accounts\n"
+msgstr " -r, --system cria contas de sistema\n"
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: grupo '%s' é um grupo shadow, mas não existe em /etc/group\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: ID de usuário '%s' inválido\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s : nome de usuário '%s' inválido\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s : linha %d : linha inválida\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: não conseguiu atualizar a entrada do usuário %s (não está no banco de "
+"dados passwd)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: linha %d: não foi possível criar usuário\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: linha %d: não foi possível criar grupo\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: linha %d: usuário '%s' não existe em %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s : linha %d : não foi possível atualizar a senha\n"
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: linha %d: mkdir %s falhou: %s\n"
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: linha %d: chown %s falhou: %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s : linha %d : não foi possível atualizar entrada\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: falha ao preparar a nova entrada %s '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: não foi possível criar usuário\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s : não foi possível atualizar arquivo de grupo\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+" -a, --all reportar estado de senhas em toda as contas\n"
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+" -d, --delete remover a senha para a conta indicada\n"
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+" -e, --expire forçar expiração da senha para a conta "
+"indicada\n"
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr " -k, --keep-tokens mudar senha somente caso expirada\n"
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -i, --inactive INATIVO definir senha inativa após expiração para\n"
+" INATIVO\n"
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr " -l, --lock trava a conta indicada\n"
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -n, --mindays MIN_DIAS define número mínimo de dias antes da troca\n"
+" de senhas para MIN_DIAS\n"
+
+msgid " -q, --quiet quiet mode\n"
+msgstr " -q, --quiet modo silencioso\n"
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+" -r, --repository REPOSITÓRIO mudar senha no repositório REPOSITÓRIO\n"
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+" -S, --status reportar estado de senha para a conta "
+"indicada\n"
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr " -u, --unlock destravar a conta indicada\n"
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -w, --warndays DIAS_AVISO define dias de aviso de expiração para\n"
+" DIAS_AVISO\n"
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -x, --maxdays MAX_DIAS define número máximo de dias antes da troca\n"
+" de senhas para MAX_DIAS\n"
+
+msgid "Old password: "
+msgstr "Senha antiga : "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Informe a nova senha (mínimo de %d caracteres)\n"
+"Por favor, use uma combinação de letras em maiúsculas e minúsculas\n"
+"e de números.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Informe a nova senha (mínimo de %d, máximo de %d caracteres)\n"
+"Por favor, use uma combinação de letras em maiúsculas e minúsculas\n"
+"e de números.\n"
+
+msgid "New password: "
+msgstr "Nova senha : "
+
+msgid "Try again."
+msgstr "Tente novamente."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Aviso : senha fraca (informe-a novamente para usá-la de qualquer forma)."
+
+msgid "They don't match; try again.\n"
+msgstr "As senhas não são iguais; tente novamente.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "A senha para %s não pode ser modificada.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "A senha para %s ainda não pode ser modificada.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: Desbloquear a senha pode resultar em uma conta sem senha.\n"
+"Você deve ajustar a senha com usermod -p para desbloquear esta conta.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s : repositório %s não suportado\n"
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not authorized to change the password of %s\n"
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr "%s: %s não está autorizado a trocar a senha de %s\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr ""
+"%s: Você não pode visualizar ou modificar informações de senha para %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Modificando a senha para %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "A senha para %s não foi modificada.\n"
+
+#, c-format
+msgid "%s: password changed.\n"
+msgstr "%s: senha modificada.\n"
+
+#, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "%s: informação de expiração de senha alterada.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Uso: %s [opções] [passwd]\n"
+"\n"
+"Opções:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Uso: %s [opções] [passwd [shadow]]\n"
+"\n"
+"Opções:\n"
+
+#, fuzzy
+msgid " -q, --quiet report errors only\n"
+msgstr " -q, --quiet modo silencioso\n"
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+"%s: não é permitido arquivo shadow alternativo quando USE_TCB está "
+"habilitado.\n"
+
+msgid "invalid password file entry"
+msgstr "entrada de arquivo de senha inválida"
+
+msgid "duplicate password entry"
+msgstr "entrada de senha duplicada"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "nome de usuário '%s' inválido\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "ID de usuário '%lu' inválido\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "usuário '%s': nenhum grupo %lu\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "usuário '%s': diretório '%s' não existe\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "usuário '%s': programa '%s' não existe\n"
+
+#, c-format
+msgid "no tcb directory for %s\n"
+msgstr "não há diretório tcb para %s\n"
+
+#, c-format
+msgid "create tcb directory for %s?"
+msgstr "criar diretório tcb para %s?"
+
+#, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "falhou ao criar diretório tcb para %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: não posso travar %s.\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "não há entrada no arquivo de senhas em %s compatível\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "adicionar usuário '%s' em %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"usuário %s tem uma entrada em %s, mas seu campo de senha em %s não está com "
+"o valor 'x'\n"
+
+msgid "invalid shadow password file entry"
+msgstr "entrada de arquivos de senhas shadow inválida"
+
+msgid "duplicate shadow password entry"
+msgstr "entrada de senha shadow inválida"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "usuário %s : última mudança de senha no futuro\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: não é possível ordenar entradas em %s\n"
+
+#, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: não é possível funcionar com tcb habilitado\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: falha ao mudar o modo de %s para 0600\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Acesso ao su para esta conta NEGADO.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Autenticação por senha contornada.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Por favor, informe sua PRÓPRIA senha como autenticação.\n"
+
+#, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: Não posso ramificar shell de usuário\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr "%s: mal funcionamento do sinal\n"
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr "%s: al funcionamento da máscara do sinal\n"
+
+msgid "Session terminated, terminating shell..."
+msgstr "Sessão terminada, encerrando o shell..."
+
+#, c-format
+msgid " ...killed.\n"
+msgstr " ...morto.\n"
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr " ...esperando o filho terminar.\n"
+
+msgid " ...terminated.\n"
+msgstr " ...encerrado.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: su [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
+#| " -h, --help display this help message and exit\n"
+#| " -, -l, --login make the shell a login shell\n"
+#| " -m, -p,\n"
+#| " --preserve-environment do not reset environment variables, and\n"
+#| " keep the same shell\n"
+#| " -s, --shell SHELL use SHELL instead of the default in "
+#| "passwd\n"
+#| "\n"
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"Uso: su [opções] [LOGIN]\n"
+"\n"
+"Opções:\n"
+" -c, --command COMANDO passa COMANDO para o shell invocado\n"
+" -h, --help exibe esta mensagem de ajuda e finaliza\n"
+" -, -l, --login torna o shell um shell de login\n"
+" -m, -p,\n"
+" --preserve-environment não zera variáveis de ambiente e\n"
+" mantém o mesmo shell\n"
+" -s, --shell SHELL utiliza SHELL ao invés do padrão no passwd\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s : %s\n"
+"(Ignorado)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Você não está autorizado a usar o su para %s\n"
+
+msgid "(Enter your own password)"
+msgstr "{Informe sua própria senha)"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: Falha de autenticação\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s: Você não está autorizado a usar o su agora\n"
+
+#, fuzzy, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "Nenhuma entrada de senha para 'root'"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s : deve ser executado a partir de um terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s : pam_start : erro %d\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: Não é possível remover o conteúdo de %s: %s\n"
+
+#, c-format
+msgid "Cannot execute %s\n"
+msgstr "Não foi possível executar %s\n"
+
+msgid "No password file"
+msgstr "Sem arquivo de senhas"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY falhou"
+
+msgid "No password entry for 'root'"
+msgstr "Nenhuma entrada de senha para 'root'"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Digite Control-D para continuar com a inicialização normal,\n"
+"(ou forneça a senha de root para administração do sistema) :"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Entrando em Modo de Manutenção do Sistema"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr "%s: %s foi criado, mas não pode ser removido\n"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr "%s: a configuração %s em %s será ignorada\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: não foi possível criar novo arquivo de padrões\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: não foi possível criar novo arquivo de padrões\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: não foi possível abrir novo arquivo de padrões\n"
+
+#, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: linha muito longa em %s: %s..."
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: não foi possível criar link simbólico %s: %s\n"
+
+#, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: renomear: %s: %s\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: grupo '%s' é um grupo NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: muitos grupos especificados (máximo %d).\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Uso: %s [opções] LOGIN\n"
+" %s -D\n"
+" %s -D [opções]\n"
+"\n"
+"Opções:\n"
+
+#, fuzzy
+#| msgid " -s, --shadow edit shadow or gshadow database\n"
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+" -s, --shadow editar o banco de dados shadow ou gshadow\n"
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+" -b, --base-dir BASE_DIR diretório base para o diretório pessoal da\n"
+" nova conta\n"
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr " -c, --comment COMENTÁRIO campo GECOS da nova conta\n"
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr " -d, --home-dir DIR_PESSOAL diretório pessoal da nova conta\n"
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+" -D, --defaults exibe ou altera configuração padrão do "
+"useradd\n"
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+" -e, --expiredate DATA_DE_EXPIRAÇÃO data de expiração da nova conta\n"
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+" -f, --inactive INATIVO período de inatividade de senha da nova "
+"conta\n"
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+" -g, --gid GRUPO nome ou ID do grupo primário da nova\n"
+" conta\n"
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+" -G, --groups GRUPOS lista de grupos complementares da nova\n"
+" conta\n"
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+" -k, --skel SKEL_DIR use este diretório esqueleto (skeleton) "
+"alternativo\n"
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+" -l, --no-log-init não adiciona o usuário aos bancos de dados\n"
+" lastlog e faillog\n"
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr " -m, --create-home cria o diretório pessoal do usuário\n"
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+" -M, --no-create-home não cria o diretório pessoal do usuário\n"
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+" -N, --no-user-group não cria um grupo com o mesmo nome do "
+"usuário\n"
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique permite criar usuários com UID duplicado\n"
+" (não-único)\n"
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr " -p, --password SENHA senha criptografada da nova conta\n"
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr " -s, --shell SHELL shell de login da nova conta\n"
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr " -u, --uid UID ID de usuário da nova conta\n"
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+" -U, --user-group cria um grupo com o mesmo nome do usuário\n"
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+" -Z, --selinux-user USUÁRIO_SE usa um USUÁRIO_SE específico para o "
+"mapeamento de\n"
+" usuário SELinux\n"
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: diretório base '%s' inválido\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: comentário '%s' inválido\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: diretório pessoal '%s' inválido\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s : senhas shadow necessárias para -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s : senhas shadow necessárias para -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: campo '%s' inválido\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: shell '%s' inválida\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Warning: %s is not executable\n"
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: Atenção: %s não é executável\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rewrite password file\n"
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s : não foi possível reescrever arquivo de senhas\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr "%s: -Z precisa de um núcleo com o SELinux habilitado\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr "%s: falha ao zerar a entrada do faillog de UID %lu: %s\n"
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr "%s: falha ao zerar a entrada do lastlog do UID %lu: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s: falha ao zerar a entrada do faillog de UID %lu: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: falha ao preparar a nova entrada %s '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error updating files\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s : erro atualizando arquivos\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s : não foi possível criar diretório %s\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s home directory (%s) not found\n"
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: diretório pessoal %s (%s) não encontrado\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to allocate memory: %s\n"
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "%s: falha ao alocar memória: %s\n"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s : não foi possível criar diretório %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: linha %d: chown %s falhou: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: linha %d: chown %s falhou: %s\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "Criando caixa-postal"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Grupo 'mail' não encontrado.Criando o usuário caixa-postal arquivo no modo "
+"0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Configurando caixa-postal arquivos de permissao"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: usuário '%s' já existe\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s : grupo %s existe - caso você ueira adicionar esse usuário a esse\n"
+"grupo, utilize -g.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: não foi possível criar usuário\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %lu não é único\n"
+
+#, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: Falha ao criar diretório tcb para %s\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: não é possível criar grupo\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: não foi possível criar usuário\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: não é possível criar grupo\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: aviso: o diretório pessoal já existe.\n"
+"Não copiando nenhum arquivo do diretótio skel.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+"%s: atenção: o relacionamento do nome de usuário %s para o usuário SELinux "
+"%s falhou.\n"
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+" -f, --force força remoção dos arquivos,\n"
+" mesmo se não forem do usuário\n"
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+" -r, --remove remove o diretório pessoal e spool de "
+"mensagens\n"
+
+#, fuzzy
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+" -Z, --selinux-user novo mapeamento de usuário SELinux para a "
+"conta de usuário\n"
+
+#, fuzzy, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr "%s: não é possível remover o grupo primário do usuário '%s'\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: grupo %s é o grupo primário de outro usuário e não será removido.\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "%s: não é possível remover entrada '%s' de %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: diretório pessoal %s (%s) não encontrado\n"
+
+#, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: atenção: não é possível remover %s: %s\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s : %s não é propriedade de %s, não removendo\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+"%s: Não é possível alocar memória, a entrada tcb para %s não foi removida.\n"
+
+#, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: Não é possível retirar privilégios: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: Não é possível remover o conteúdo de %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: Não é possível remover arquivos tcb para %s: %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s : usuário %s é um usuário NIS\n"
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: diretório pessoal %s (%s) não encontrado\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s : não removendo diretório %s (removeria o home do usuário %s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s : erro removendo diretório %s\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s : erro removendo diretório %s\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+"%s: atenção: o relacionamento do nome de usuário %s para o usuário SELinux "
+"%s falhou.\n"
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr " -c, --comment COMENTÁRIO novo valor do campo GECOS\n"
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+" -d, --home DIR_PESSOAL novo diretório de login para a nova conta "
+"de\n"
+" usuário\n"
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -e, --expiredate DATA_EXPIRA define data de expiração de conta para\n"
+" DATA_EXPIRA\n"
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -f, --inactive INATIVO define inatividade de senha após expiração\n"
+" para INATIVO\n"
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+" -g, --gid GRUPO forçar usar GRUPO como novo grupo primário\n"
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr " -G, --groups GRUPOS nova lista de GRUPOS suplementares\n"
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+" -a, --append anexa o usuário para os GRUPOS "
+"suplementares\n"
+" mencionados pela opção -G sem remove-lo de\n"
+" outros grupos\n"
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr " -l, --login LOGIN novo valor do nome de login\n"
+
+msgid " -L, --lock lock the user account\n"
+msgstr " -L, --lock trava a conta de usuário\n"
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+" -m, --move-home move o conteúdo do diretório pessoal para\n"
+" a novo localização (use somente com -d)\n"
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique permitir usar UID duplicados (não-únicos)\n"
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+" -p, --password SENHA usar senha criptografada para a nova senha\n"
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr " -u, --uid UID novo UID para a conta de usuário\n"
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr " -U, --unlock destravar a conta de usuário\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 ""
+
+#, fuzzy
+msgid ""
+" -Z, --selinux-user SEUSER new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+" -Z, --selinux-user novo mapeamento de usuário SELinux para a "
+"conta de usuário\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: Desbloquear a senha do usuario pode resultar em conta sem senha.\n"
+"Você deve ajustar a senha com usermod -p para desbloquear a senha\n"
+"deste usuário.\n"
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: usuário '%s' já existe em %s\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: data `%s' inválida\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: data `%s' inválida\n"
+
+#, fuzzy, c-format
+msgid "%s: no options\n"
+msgstr "%s: não consegui abrir %s\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: the -L, -p, and -U flags são exclusivas\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s : senhas shadow necessárias para -e e -f\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: UID '%lu' já existe\n"
+
+#, fuzzy, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr "%s: %s não está autorizado a trocar a senha de %s\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s : diretório %s existe\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+"%s: O diretório pessoal anterior (%s) não é um diretório. Ele não foi "
+"removido e nenhum diretório pessoal foi criado.\n"
+
+#, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: Falha ao mudar o proprietário do diretório pessoal"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: aviso: falha completa ao remover antigo diretório pessoal %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s : não foi possível renomear diretório %s para %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: falha ao copiar a entrada lastlog do usuário %lu para o usuário %lu: %s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr "%s: falha ao copiar a entrada faillog do usuário %lu para o %lu: %s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s : aviso : %s não é propriedade de %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "falha au mudar o dono da caixa-postal"
+
+msgid "failed to rename mailbox"
+msgstr "falha ao renomear caixa-postal"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s: falha ao preparar a nova entrada %s '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s: falha ao preparar a nova entrada %s '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s: falha ao preparar a nova entrada %s '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s: falha ao preparar a nova entrada %s '%s'\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Você modificou %s.\n"
+"Talvez você precise modificar %s para ter coerência.\n"
+"Por favor use o comando '%s' para faze-lo.\n"
+
+msgid " -g, --group edit group database\n"
+msgstr " -g, --group edita banco de dados de grupo\n"
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr " -p, --passwd edita banco de dados passwd\n"
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+" -s, --shadow editar o banco de dados shadow ou gshadow\n"
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+" -u, --user que arquivo shadow tcb de usuário editar\n"
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: falha ao remover %s\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: %s está inalterado\n"
+
+msgid "failed to create scratch directory"
+msgstr "falha ao criar diretório rascunho"
+
+msgid "failed to drop privileges"
+msgstr "falha ao remover privilégios"
+
+msgid "Couldn't get file context"
+msgstr "Não posso obter contexto de arquivo"
+
+msgid "setfscreatecon () failed"
+msgstr "setfscreatecon () falhou"
+
+msgid "failed to gain privileges"
+msgstr "falha ao obter privilégios"
+
+msgid "Couldn't lock file"
+msgstr "Não foi possível obter lock em arquivo"
+
+msgid "Couldn't make backup"
+msgstr "Não foi possível fazer backup"
+
+#, fuzzy, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr "%s : %s não encontrado em /etc/passwd\n"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+msgid "failed to open scratch file"
+msgstr "falha ao abrir arquivo de rascunho"
+
+msgid "failed to unlink scratch file"
+msgstr "falha ao desvincular arquivo de rascunho"
+
+msgid "failed to stat edited file"
+msgstr "falha ao fazer stat de arquivo editado"
+
+msgid "failed to allocate memory"
+msgstr "falha ao alocar memória"
+
+msgid "failed to create backup file"
+msgstr "falha ao criar arquivo de backup"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s : não foi possível restaurar %s : %s (suas mudanças estão em %s)\n"
+
+#, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: falha ao procurar o diretório tcb para %s\n"
+
+#~ msgid " -c, --crypt-method the crypt method (one of %s)\n"
+#~ msgstr ""
+#~ " -c, --crypt-method o método de criptografia (dentre %s)\n"
+
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr ""
+#~ "Uso: vipw [opções]\n"
+#~ "\n"
+#~ "Opções:\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "malloc(%d) falhou\n"
+
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: chage [opções] [LOGIN]\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -d, --lastday ULTIMO_DIA define última mudança de senha para "
+#~ "ULTIMO_DIA\n"
+#~ " -E, --expiredate DATA_EXPIRAÇÃO define data de expiração de conta "
+#~ "para\n"
+#~ " DATA_EXPIRAÇÃO\n"
+#~ " -h, --help exibe esta mensagem de ajuda e sai\n"
+#~ " -I, --inactive INATIVO define senha inativa após expiração\n"
+#~ " para INATIVO\n"
+#~ " -l, --list exibe informação sobre idade da conta\n"
+#~ " -m, --mindays MIN_DIAS define número mínimo de dias antes da\n"
+#~ " troca de senha para MIN_DIAS\n"
+#~ " -M, --maxdays MAX_DIAS define número máximo de dias antes da\n"
+#~ " troca de senha para MAX_DIAS\n"
+#~ " -W, --warndays AVISO_DIAS define dias para aviso de expiração "
+#~ "para\n"
+#~ " AVISO_DIAS\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s : autenticação PAM falhou\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "Uso : %s [-f nome_completo] [-r número_sala] [-w fone_trabalho]\n"
+#~ "\t[-h fone_residencial] [-o outro] [usuário]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr ""
+#~ "Uso : %s [-f nome_completo] [-r número_sala] [-w fone_rabalho] [-h "
+#~ "fone_residencial]\n"
+
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Uso: %s [opções]\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -c, --crypt-method o método de criptografia (dentre %s)\n"
+#~ " -e, --encrypted senhas fornecidas estão criptografadas\n"
+#~ " -h, --help exibir esta mensagem de ajuda e "
+#~ "finalizar\n"
+#~ " -m, --md5 criptografar a senha em texto plano "
+#~ "usando\n"
+#~ " o algoritmo MD5\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Use: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help exibir a mensagem de ajuda e sair\n"
+#~ " -s, --shell SHELL novo login shell para conta de usuario\n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "Uso : expiry {-f|-c}\n"
+
+#~ msgid "faillog: Failed to get the entry for UID %lu\n"
+#~ msgstr "faillog: Falha em conseguir a entrada para o UID %lu\n"
+
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "faillog: não foi possível abrir %s: %s\n"
+
+#~ msgid "faillog: Cannot get the size of %s: %s\n"
+#~ msgstr "faillog: Não foi possível obter o tamanho de %s: %s\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "Uso: groupdel grupo\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "Uso : %s [-r] [-s] [grupo [gshadow]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "Uso : %s [-r] [-s] [grupo]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s : -s e -r são incompatíveis\n"
+
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "Uso: grpconv\n"
+
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "Uso: grpunconv\n"
+
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: lastlog [opções]\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -b, --before DIAS imprime somente registros lastlog mais\n"
+#~ " antigos que DIAS\n"
+#~ " -h, --help exibe esta mensagem de ajuda e finaliza\n"
+#~ " -t, --time DIAS imprime somente registros lastlog mais\n"
+#~ " recentes que DIAS\n"
+#~ " -u, --user LOGIN imprime registro lastlog para usuário "
+#~ "com\n"
+#~ " LOGIN especificado\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: passwd [opções] [LOGIN]\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -a, --all reportar estado de senhas em toda as "
+#~ "contas\n"
+#~ " -d, --delete remover a senha para a conta indicada\n"
+#~ " -e, --expire forçar expiração da senha para a conta "
+#~ "indicada\n"
+#~ " -h, --help exibir esta mensagem de ajuda e sai\n"
+#~ " -k, --keep-tokens mudar senha somente caso expirada\n"
+#~ " -i, --inactive INATIVO definir senha inativa após expiração "
+#~ "para\n"
+#~ " INATIVO\n"
+#~ " -l, --lock trava a conta indicada\n"
+#~ " -n, --mindays MIN_DIAS define número mínimo de dias antes da "
+#~ "troca\n"
+#~ " de senhas para MIN_DIAS\n"
+#~ " -q, --quiet modo silencioso\n"
+#~ " -r, --repository REPOSITÓRIO mudar senha no repositório REPOSITÓRIO\n"
+#~ " -S, --status reportar estado de senha para a conta "
+#~ "indicada\n"
+#~ " -u, --unlock destravar a conta indicada\n"
+#~ " -w, --warndays DIAS_AVISO define dias de aviso de expiração para\n"
+#~ " DIAS_AVISO\n"
+#~ " -x, --maxdays MAX_DIAS define número máximo de dias antes da "
+#~ "troca\n"
+#~ " de senhas para MAX_DIAS\n"
+#~ "\n"
+
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr "Uso: %s [-q] [-r] [passwd]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr "Uso : %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "Uso: pwconv\n"
+
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "Uso: pwunconv\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "Id desconhecido : %s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "Sem shell\n"
+
+#~ msgid ""
+#~ "Usage: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force removal of files,\n"
+#~ " even if not owned by user\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -r, --remove remove home directory and mail spool\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -f, --force força remoção dos arquivos,\n"
+#~ " mesmo se não forem do usuário\n"
+#~ " -h, --help exibe esta mensagem de ajuda e sai\n"
+#~ " -r, --remove remove o diretório pessoal e spool de "
+#~ "mensagens\n"
+
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Uso: usermod [opções] LOGIN\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -c, --comment COMENTÁRIO novo valor do campo GECOS\n"
+#~ " -d, --home DIR_PESSOAL novo diretório de login para a nova conta "
+#~ "de\n"
+#~ " usuário\n"
+#~ " -e, --expiredate DATA_EXPIRA define data de expiração de conta para\n"
+#~ " DATA_EXPIRA\n"
+#~ " -f, --inactive INATIVO define inatividade de senha após "
+#~ "expiração\n"
+#~ " para INATIVO\n"
+#~ " -g, --gid GRUPO forçar usar GRUPO como novo grupo "
+#~ "primário\n"
+#~ " -G, --groups GRUPOS nova lista de GRUPOS suplementares\n"
+#~ " -a, --append anexa o usuário para os GRUPOS "
+#~ "suplementares\n"
+#~ " mencionados pela opção -G sem remove-lo "
+#~ "de\n"
+#~ " outros grupos\n"
+#~ " -h, --help exibe esta mensagem de ajuda e sai\n"
+#~ " -l, --login LOGIN novo valor do nome de login\n"
+#~ " -L, --lock trava a conta de usuário\n"
+#~ " -m, --move-home move o conteúdo do diretório pessoal "
+#~ "para\n"
+#~ " a novo localização (use somente com -d)\n"
+#~ " -o, --non-unique permitir usar UID duplicados (não-"
+#~ "únicos)\n"
+#~ " -p, --password SENHA usar senha criptografada para a nova "
+#~ "senha\n"
+#~ " -s, --shell SHELL novo shell de login para a conta de "
+#~ "usuário\n"
+#~ " -u, --uid UID novo UID para a conta de usuário\n"
+#~ " -U, --unlock destravar a conta de usuário\n"
+#~ "%s\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s : nenhuma flag informada\n"
+
+#~| msgid ""
+#~| "Usage: vipw [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -g, --group edit group database\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -p, --passwd edit passwd database\n"
+#~| " -q, --quiet quiet mode\n"
+#~| " -s, --shadow edit shadow or gshadow database\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group edit group database\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -p, --passwd edit passwd database\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow edit shadow or gshadow database\n"
+#~ " -u, --user which user's tcb shadow file to edit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: vipw [opções]\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -g, --group editar base de dados de grupo\n"
+#~ " -h, --help exibir esta mensagem de ajuda e "
+#~ "finalizar\n"
+#~ " -p, --passwd editar base de dados de senhas\n"
+#~ " -q, --quiet modo quieto\n"
+#~ " -s, --shadow editar base de dados shadow ou gshadow\n"
+#~ "\n"
+
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Uso : %s [entrada]\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s : não foi possível criar %s\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s : não foi possível executar chown %s\n"
+
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -a, --all display faillog records for all users\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -l, --lock-time SEC after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| " -m, --maximum MAX set maximum failed login counters to "
+#~| "MAX\n"
+#~| " -r, --reset reset the counters of login failures\n"
+#~| " -t, --time DAYS display faillog records more recent than "
+#~| "DAYS\n"
+#~| " -u, --user LOGIN display faillog record or maintains "
+#~| "failure\n"
+#~| " counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| " options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all display faillog records for all users\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -l, --lock-time SEC after failed login lock account to SEC "
+#~ "seconds\n"
+#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
+#~ " -r, --reset reset the counters of login failures\n"
+#~ " -t, --time DAYS display faillog records more recent than "
+#~ "DAYS\n"
+#~ " -u, --user LOGIN display faillog record or maintains "
+#~ "failure\n"
+#~ " counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ " options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: faillog [opções]\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -a, --all exibir registros faillog para todos os usuários\n"
+#~ " -h, --help exibiri esta mensagem de ajuda e finalizar\n"
+#~ " -l, --lock-time SEG após falha de login travar conta por SEG "
+#~ "segundos\n"
+#~ " -m, --maximum MAX define contadores de logins falhos para MAX\n"
+#~ " -r, --reset zerar os contadores de falhas de login\n"
+#~ " -t, --time DIAS exibir registros faillog mais recentes que DIAS\n"
+#~ " -u, --user LOGIN exibir registros faillog ou manter somente\n"
+#~ " contadores de falhas e limites (caso usado com\n"
+#~ " as opções -r, -m ou -l) para usuário com LOGIN\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force exit with success status if the\n"
+#~ " specified group already exists\n"
+#~ " -g, --gid GID use GID for the new group\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique allow create group with duplicate\n"
+#~ " (non-unique) GID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new group\n"
+#~ " -r, --system create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: groupadd [opções] grupo\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -f, --force forçar sair com estado de sucesso caso\n"
+#~ " grupo especificado já exista\n"
+#~ " -g, --gid GID utilizar GID para o novo grupo\n"
+#~ " -h, --help exibir esta mensagem de ajuda e "
+#~ "finalizar\n"
+#~ " -K, --key CHAVE=VALOR sobrepõe os padrões em /etc/login.defs\n"
+#~ " -o, --non-unique permiti criar grupo com GID duplicado\n"
+#~ " (não-único)\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --gid GID force use new GID by GROUP\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: groupadd [opções] grupo\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -f, --force forçar sair com estado de sucesso caso\n"
+#~ " grupo especificado já exista\n"
+#~ " -g, --gid GID utilizar GID para o novo grupo\n"
+#~ " -h, --help exibir esta mensagem de ajuda e "
+#~ "finalizar\n"
+#~ " -K, --key CHAVE=VALOR sobrepõe os padrões em /etc/login.defs\n"
+#~ " -o, --non-unique permiti criar grupo com GID duplicado\n"
+#~ " (não-único)\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~ " home directory\n"
+#~ " -c, --comment COMMENT set the GECOS field for the new user "
+#~ "account\n"
+#~ " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~ " -D, --defaults print or save modified default useradd\n"
+#~ " configuration\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP for the new user account\n"
+#~ " -G, --groups GROUPS list of supplementary groups for the new\n"
+#~ " user account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -l, --no-log-init do not add the user to the lastlog and\n"
+#~ " faillog databases\n"
+#~ " -m, --create-home create home directory for the new user\n"
+#~ " account\n"
+#~ " -M, --no-create-home do not create user's home directory\n"
+#~ " (overrides /etc/login.defs)\n"
+#~ " -N, --no-user-group do not create a group with the same name "
+#~ "as\n"
+#~ " the user\n"
+#~ " -o, --non-unique allow create user with duplicate\n"
+#~ " (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new user\n"
+#~ " account\n"
+#~ " -r, --system create a system account\n"
+#~ " -s, --shell SHELL the login shell for the new user account\n"
+#~ " -u, --uid UID force use the UID for the new user "
+#~ "account\n"
+#~ " -U, --user-group create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Uso: useradd [opções] LOGIN\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -b, --base-dir DIR_BASE diretório base para o diretório pessoal\n"
+#~ " da nova conta de usuário\n"
+#~ " -c, --comment COMENTÁRIO define o campo GECOS para a nova conta "
+#~ "de\n"
+#~ " usuário\n"
+#~ " -d, --home-dir DIR_PESSOAL diretório pessoal para a nova conta de\n"
+#~ " usuário\n"
+#~ " -D, --defaults imprime ou salva configuração padrão do\n"
+#~ " useradd modificada\n"
+#~ " -e, --expiredate DATA_EXPIRA define data de expiração de conta para\n"
+#~ " DATA_EXPIRA\n"
+#~ " -f, --inactive INATIVO define inatividade de senha após "
+#~ "expiração\n"
+#~ " para INATIVO\n"
+#~ " -g, --gid GRUPO força utilização de GRUPO para nova "
+#~ "conta\n"
+#~ " de usuário\n"
+#~ " -G, --groups GRUPOS lista de grupos suplementares para a "
+#~ "nova\n"
+#~ " conta de usuário\n"
+#~ " -h, --help exibe esta mensagem de ajuda e finaliza\n"
+#~ " -k, --skel DIR_SKEL especifica um diretório skel alternativo\n"
+#~ " -K, --key CHAVE=VALOR sobrepões os padrões do /etc/login.defs\n"
+#~ " -m, --create-home cria diretório pessoal para a nova conta "
+#~ "de\n"
+#~ " usuário\n"
+#~ " -o, --non-unique permite cirar usuário com UID duplicado\n"
+#~ " (não-único)\n"
+#~ " -p, --password SENHA utiliza senha encriptada para a nova "
+#~ "conta\n"
+#~ " de usuário\n"
+#~ " -s, --shell SHELL o shell de login para a nova conta\n"
+#~ " de usuário\n"
+#~ " -u, --uid UID força o uso de UID para a nova conta\n"
+#~ " de usuário\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: %s [options] [input]\n"
+#~ "\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -r, --system create system accounts\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Use: %s [opções] [input]\n"
+#~ "\n"
+#~ " -c, --crypt-method metodo de criptacao (um de %s)\n"
+#~ " -r, --system criar sistema de contas\n"
+#~ "%s\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Senha configurada para expirar."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s : não foi possível obter lock em arquivo de senhas\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s : não foi possível abrir o arquivo de senhas\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s : não foi possível obter lock em arquivos de senhas shadow\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s : não foi possível abrir arquivo de senhas shadow\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s : não foi possível reescrever arquivo de senhas shadow\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s : não foi possível reescrever arquivo de senhas\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s : não foi possível atualizar arquivos de senhas shadow\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tNome Completo : %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tNúmero da Sala: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tFone de Trabalho: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tFone Doméstico: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr ""
+#~ "Não foi possível fazer local em arquivo de senhas; tente novamente mais "
+#~ "tarde.\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "Não foi possível abrir arquivo de senhas.\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Erro atualizando a entrada de senha.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Não foi possível gravar as mudanças no arquivo de senhas.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Não foi possível remover o locak do arquivo de senhas.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s : não foi possível obter lock no arquivo de grupo\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s : nao foi possível obter lock no arquivo gshadow\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s : não foi possível abrir arquivo shadow\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s : erro atualizando arquivo shadow\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s : erro atualizando entrada de grupo\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s : linha %d : grupo %s desconhecido\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s : linha %d : não foi possível atualizar entrada\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s : nao foi possível obter lock em arquivo shadow\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s : erro atualizando arquivo shadow\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s : erro atualizando arquivo de senhas\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s : linha %d : usuário %s desconhecido\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s : linha %d : não foi possível atualizar entrada de senha\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s : usuário desconhecido\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Usuário Desconhecido : %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Uso : %s [-r|-R] grupo\n"
+
+#~ msgid " %s [-a user] group\n"
+#~ msgstr " %s [-a usuário] grupo\n"
+
+#~ msgid " %s [-d user] group\n"
+#~ msgstr " %s [-d usuário] grupo\n"
+
+#~ msgid " %s [-A user,...] [-M user,...] group\n"
+#~ msgstr " %s [-A usuário,...] [-M usuário,...] grupo\n"
+
+#~ msgid " %s [-M user,...] group\n"
+#~ msgstr " %s [-M usuário,...] grupo\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s : não foi possível obter lock\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s : nõ foi possível obter lock shadow\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s : não foi possível regravar arquivo shadow\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s : não foi possível remover o lock do arquivo\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s : não foi possível atualizar entrada\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s : não foi possível atualizar entrada shadow\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "grupo desconhecido : %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s : não foi possível abrir arquivo\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s : não foi possível abrir arquivo shadow\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Quem é você ?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s : membro %s desconhecido\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s : erro adicionando nova entrada de grupo\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s : não foi possível regravar arquivo de grupo\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s : não foi possível regravar arquivo de grupo shadow\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s : não foi possível obter lock em arquivo de grupo\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s : não foi possível abrir arquivo de grupo\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s : não foi possível obter lock em arquivo de grupo shadow\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s : não foi possível abrir arquivo de grupo shadow\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s : GID %u não é único\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s : erro removendo entrada de grupo\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s : erro removendo entrada de grupo shadow\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s : não foi possível remover grupo primário do usuário.\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Não foi possivel encontrar membro para remover\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr ""
+#~ "Uso : membrosdogrupo -a nomedousuario | -d nomedousuario | -D | -l [-g "
+#~ "nomedogrupo]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Somente o root pode adicionar membros para diferentes grupos\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "Acesso ao grupo é necessário\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "proprietario do grupo atual\n"
+
+#, fuzzy
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "%s : autenticação PAM falhou\n"
+
+#, fuzzy
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "%s : não foi possível obter lock em arquivo de grupo\n"
+
+#, fuzzy
+#~ msgid "Cannot close group file\n"
+#~ msgstr "%s : não foi possível abrir arquivo de grupo\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s : %s não encontrado em /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s : %u não é um GID único\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s : %s não é um nome único\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s : não foi possível reescrever arquivo de senhas\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s : não foi possível obter lock em arquivo de senhas\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s : não foi possível abrir arquivo de senhas\n"
+
+#~ msgid ""
+#~ "%s: cannot change the primary group of user '%s' from %u to %u, since it "
+#~ "is not in the passwd file.\n"
+#~ msgstr ""
+#~ "%s: não foi possivel mudar o grupo primário do usuario '%s' de %u para "
+#~ "%u, uma vez que não se encontra no arquivo passwd.\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s : não foi possível atualizar entrada shadow para %s\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s : não foi possível atualizar entrada para grupo %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s : não foi possível obter lock em arquivo de grupo shadow\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s : não foi possível abrir arquivo de grupo shadow\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s : não foi possível remover grupo shadow %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s : não foi possível atualizar arquivo de grupo shadow\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s : não foi possível remover arquivo de grupo shadow\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "GID desconhecido : %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "GID desconhecido : %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s : grupo %s não existe\n"
+
+#~ msgid ""
+#~ "%s: group %s created, failure during the creation of the corresponding "
+#~ "gshadow group\n"
+#~ msgstr ""
+#~ "%s: grupo %s criado, falha durante a criação do grupo correspondente ao "
+#~ "gshadow\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s : usuário %s não existe\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s : nome de usuário '%s' inválido\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s : não foi possível obter de /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s : não foi possível obter de /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s : não foi possível obter de /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s : não foi possível obter de /etc/passwd.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s : não foi possível abrir arquivos\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s : não foi possível atualizar entrada passwd para %s\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s : não foi possível obter lock em arquivo passwd\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s : não foi possível abrir arquivo passwd.\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s : não foi possível remover entrada shadow para %s\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s : não foi possível atualizar arquivo passwd\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s : não foi possível atualizar entrada para usuário %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s : não foi possível remover arquivo de senhas shadow\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s : GID %s desconhecido\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s : grupo %s desconhecido\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s : sem memória em update_gshadow\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s : não foi possível reescrever arquivo de senhas shadow\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s : não foi possível obter lock em arquivo de senhas shadow\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s : não foi possível abrir arquivo de senhas shadow\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s : erro obtendo lock em arquivo de grupo\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s : erro abrindo arquivo de grupo\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s : erro obtendo lock em arquivo de grupo shadow\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s : erro abrindo arquivo de grupo shadow\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s : erro adicionando nova entrada de senha\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s : erro adicionando nova entrada de senha shadow\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s : aviso CREATE_HOME não é suportado, por favor, utilize -m.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s : erro atualizando entrada de grupo\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s : erro atualizando entrada de grupo\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s : não foi possível abrir arquivo de grupo\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s : não foi possível abrir arquivo de grupo shadow\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s : erro removendo entrada de senha\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s : erro removendo entrada de senha shadow\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s : erro adicionando nova entrada de grupo\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s : o uid %lu não é único\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s : erro modificando entrada de senha\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s : erro removendo entrada de senha\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s erro removendo entrada de senha shadow\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s : não foi possível obter GID único\n"
+
+#, fuzzy
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " em `%.100s' de `%.200s'"
+
+#, fuzzy
+#~ msgid " on '%.100s'"
+#~ msgstr " em `%.100s'"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s : linha %d : não foi possível criar UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s : o nome %s não é único\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ " -h, --help\t\tdisplay this help message and exit\n"
+#~ " -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: chgpasswd [opções]\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ " -e, --encrypted\tsenhas fornecidas estão encriptadas\n"
+#~ " -h, --help\t\texibir esta mensagem de ajuda e finalizar\n"
+#~ " -m, --md5\t\tutilizar encriptação MD5 ao invés de DES quando as\n"
+#~ "\t\t\tsenhas fornecidas não estiverem encriptadas\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Sem arquivo de senhas\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Desculpe.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Desculpe, a senha para %s ainda não pode ser modificada.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Desculpe."
diff --git a/po/quot.sed b/po/quot.sed
new file mode 100644
index 0000000..0122c46
--- /dev/null
+++ b/po/quot.sed
@@ -0,0 +1,6 @@
+s/"\([^"]*\)"/“\1”/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“”/""/g
diff --git a/po/remove-potcdate.sin b/po/remove-potcdate.sin
new file mode 100644
index 0000000..2436c49
--- /dev/null
+++ b/po/remove-potcdate.sin
@@ -0,0 +1,19 @@
+# Sed script that remove the POT-Creation-Date line in the header entry
+# from a POT file.
+#
+# The distinction between the first and the following occurrences of the
+# pattern is achieved by looking at the hold space.
+/^"POT-Creation-Date: .*"$/{
+x
+# Test if the hold space is empty.
+s/P/P/
+ta
+# Yes it was empty. First occurrence. Remove the line.
+g
+d
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/po/ro.gmo b/po/ro.gmo
new file mode 100644
index 0000000..e2474ed
--- /dev/null
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
new file mode 100644
index 0000000..6929d4b
--- /dev/null
+++ b/po/ro.po
@@ -0,0 +1,3687 @@
+# translation of shadow_ro.po to Romanian
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+# Sorin Batariuc <sorin@bonbon.net>, 2004, 2005, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.17\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2007-11-26 18:18+0100\n"
+"Last-Translator: Sorin Batariuc <sorin@bonbon.net>\n"
+"Language-Team: Romanian <debian-l10n-romanian@lists.debian.org>\n"
+"Language: ro\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n>1\n"
+"X-Generator: KBabel 1.10.2\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Nu pot aloca spaţiu pentru informaţiile despre configurare.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"eroare de configurare - element necunoscut '%s' (anunţaţi administratorul)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr ""
+
+msgid "Password: "
+msgstr "Parola: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Parola pentru %s: "
+
+#, fuzzy
+#| msgid "Cannot open the password file.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "Nu pot deschide fişierul passwd.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr ""
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not set sename for %s\n"
+msgstr "Nu pot aloca spaţiu pentru informaţiile despre configurare.\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "Modific informaţia de temporalitate pentru %s\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "%s: Nu vă pot determina numele de utilizator.\n"
+
+#, fuzzy, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "%s: linia %d: nu pot găsi utilizatorul %s\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: nu mai este memorie\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: nu pot actualiza fişierul %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: director personal nevalid '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: nu pot redenumi directorul %s în %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: nu pot crea directorul %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: avertisment: nu pot şterge "
+
+#, fuzzy, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: avertisment: nu pot şterge "
+
+#, fuzzy, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: redenumire: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: nu pot redenumi directorul %s în %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: nu pot redenumi directorul %s în %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: avertisment: nu pot şterge "
+
+#, fuzzy, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: nu pot crea directorul %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: avertisment: nu pot şterge "
+
+#, fuzzy, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: nu pot actualiza fişierul %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: nu pot actualiza fişierul shadow\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: redenumire: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: nu pot deschide fişierul %s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Avertisment: grup necunoscut %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Avertisment: prea multe grupuri\n"
+
+msgid "Your password has expired."
+msgstr "Parola dvs a expirat."
+
+msgid "Your password is inactive."
+msgstr "Parola dvs este inactivă."
+
+msgid "Your login has expired."
+msgstr "Autentificarea dvs a expirat."
+
+msgid " Contact the system administrator."
+msgstr " Contactaţi administratorul de sistem."
+
+msgid " Choose a new password."
+msgstr " Alegeţi o parolă nouă."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Parola dvs va expira în %ld zile.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Parola dvs va expira mâine."
+
+msgid "Your password will expire today."
+msgstr "Parola dvs va expira azi."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Nu pot schimba tty %s"
+
+#, fuzzy, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: câmpuri prea lungi\n"
+
+#, fuzzy, c-format
+msgid "%s: "
+msgstr "%s: %s\n"
+
+msgid ": "
+msgstr ""
+
+msgid "Environment overflow\n"
+msgstr "Inundaţie de mediu\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Nu puteţi schimba $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d eşuare de la ultima autentificare.\n"
+"Ultima oară a fost %s în %s.\n"
+msgstr[1] ""
+"%d eşuări de la ultima autentificare.\n"
+"Ultima oară a fost %s în %s.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "eşuare în schimbarea proprietarului căsuţei poştale"
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr "%s: nu pot prelua UID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: nu pot prelua GID unic\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: nu pot prelua GID unic\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: nu pot crea %s\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: nu pot crea %s\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr "%s: nu pot prelua UID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: nu pot prelua UID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: nu pot prelua UID\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: autentificare PAM eşuată\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: fişier nevalid '%s'\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Could not seteuid to %d\n"
+msgstr "Nu pot aloca spaţiu pentru informaţiile despre configurare.\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not set caps\n"
+msgstr "Nu pot aloca spaţiu pentru informaţiile despre configurare.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't open file\n"
+msgid "%s: snprintf failed!\n"
+msgstr "%s: nu pot deschide fişierul\n"
+
+#, fuzzy, c-format
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: linia %d: eşuare chown\n"
+
+#, fuzzy, c-format
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: linia %d: eşuare chown\n"
+
+msgid "Too many logins.\n"
+msgstr "Prea multe autentificări.\n"
+
+msgid "You have new mail."
+msgstr "Aveţi mesaje noi."
+
+msgid "No mail."
+msgstr "N-aveţi mesaje."
+
+msgid "You have mail."
+msgstr "Aveţi mesaje."
+
+msgid "no change"
+msgstr "nici o schimbare"
+
+msgid "a palindrome"
+msgstr "palindrome"
+
+msgid "case changes only"
+msgstr "doar schimbări de caz"
+
+msgid "too similar"
+msgstr "prea asemănător"
+
+msgid "too simple"
+msgstr "prea simplu"
+
+msgid "rotated"
+msgstr "rotit"
+
+msgid "too short"
+msgstr "prea scurt"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Parolă incorectă: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() a eşuat, eroare %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+msgid "passwd: password unchanged\n"
+msgstr "Parolă schimbată."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: parolă actualizată cu succes\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: depozitul %s nu este suportat\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start: eroare %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd: pam_start() a eşuat, eroare %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Parolă incorectă pentru %s.\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr ""
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s : eşuare în abandonarea privilegiilor (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: număr telefon acasă nevalid: '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: nu pot crea directorul %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: nu pot crea directorul %s\n"
+
+#, fuzzy, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: nu pot crea directorul %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Nu pot schimba directorul către'%s'\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Fără director personal, autentificare cu HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Nu pot executa %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Director rădăcină invalid '%s'\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Nu pot schimba directorul rădăcină la '%s'\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: utilizatorul %s este autentificat în acest moment\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: utilizatorul %s este autentificat în acest moment\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Nu vă pot determina numele tty."
+
+#, fuzzy
+msgid "No"
+msgstr "Nu\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Utilizare: %s [input]\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr ""
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Introduceţi noua valoare, sau apăsaţi ENTER pentru cea implicită"
+
+msgid "Minimum Password Age"
+msgstr "Vârsta minimă a parolei"
+
+msgid "Maximum Password Age"
+msgstr "Vârsta maximă a parolei"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Ultima schimbare de parolă (AAAA-LL-ZZ)"
+
+msgid "Password Expiration Warning"
+msgstr "Avertisment de expirare a parolei"
+
+msgid "Password Inactive"
+msgstr "Parolă inactivă"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Data expirării contului (AAAA-LL-ZZ)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Ultima schimbare de parolă\t\t\t\t\t: "
+
+msgid "never"
+msgstr "Niciodată"
+
+msgid "password must be changed"
+msgstr "parola trebuie schimbată"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Parola expiră\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Parolă inactivă\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Contul expiră\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Numărul minim de zile dintre schimbările de parolă\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Numărul maxim de zile dintre schimbările de parolă\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Numărul de zile de avertismente înaintea expirării parolei\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: dată nevalidă '%s'\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: argument numeric nevalid '%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: nu include \"l\" cu alte semnalizatoare\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Permisiune refuzată.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Nu vă pot determina numele de utilizator.\n"
+
+#, fuzzy, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: nu pot încuia fişierele, încercaţi mai târziu\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: nu pot deschide fişierul %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s : eşuare la bifurcare: %s"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s : eşuare în abandonarea privilegiilor (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: fişierul shadow nu este prezent\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: utilizatorul %s nu există\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Modific informaţia de temporalitate pentru %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: eroare la modificarea câmpurilor\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr "Utilizare: %s [input]\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr "Nume complet"
+
+#, fuzzy, c-format
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Număr cameră"
+
+msgid "Work Phone"
+msgstr "Telefon birou"
+
+msgid "Home Phone"
+msgstr "Telefon acasă"
+
+msgid "Other"
+msgstr "Altele"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Nu pot schimba identificatorul la root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: nume nevalid: '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: număr de cameră nevalid: '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: număr telefon de birou nevalid: '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: număr telefon acasă nevalid: '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s' conţine caractere ilegale\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s' conţine caractere ilegale\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: utilizatorul %s nu există\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: nu pot schimba utilizatorul '%s' pe un client NIS.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: '%s' este stăpânul NIS pentru acest client.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Modificare informaţii utilizator pentru %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: câmpuri prea lungi\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Utilizare: %s [input]\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr ""
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: semnalizatorul -a este permis DOAR împreună cu semnalizatorul -G\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: linia %d: linie prea lungă\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: linia %d: lipseşte noua parolă\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s : eşuare în abandonarea privilegiilor (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: grupul %s nu există\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: linia %d: nu pot actualiza intrarea\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: a fost detectată o eroare, schimbările sunt ignorate\n"
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: utilizatorul %s nu există\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: utilizatorul %s nu există\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr "Autentificare consolă"
+
+#, fuzzy, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Nu puteţi schimba consola pentru %s.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Schimb consola de autentificare pentru %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Intrare nevalidă: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s este o consolă nevalidă.\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: utilizatorul %s nu există\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: avertisment: %s nu este deţinut de către %s\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "lastlog: argument neaşteptat: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: nu pot crea directorul %s\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "Autentificare Eşuări Maximum Ultima dată La\n"
+
+#, fuzzy, c-format
+msgid " [%lus left]"
+msgstr " [%lds rămase]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds rămase]"
+
+#, fuzzy, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s: nu pot crea directorul %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s : eşuare în abandonarea privilegiilor (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: nu pot crea directorul %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "Utilizator necunoscut: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: nu pot redenumi directorul %s în %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s : eşuare în abandonarea privilegiilor (%s)\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Utilizare: %s [input]\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr ""
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr ""
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr ""
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+
+#, fuzzy
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "Parola pentru %s nu poate fi schimbată.\n"
+
+#, fuzzy
+msgid "The options cannot be combined.\n"
+msgstr "Parola pentru %s nu poate fi schimbată.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: sunt cerute parole criptate de grup pentru -A\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: grupul %s nu există\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s : eşuare la bifurcare: %s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Schimbare parolă pentru grupul %s\n"
+
+msgid "New Password: "
+msgstr "Parola nouă: "
+
+msgid "Re-enter new password: "
+msgstr "Reintroduceţi noua parolă: "
+
+msgid "They don't match; try again"
+msgstr "Acestea nu se potrivesc, mai încercaţi odată"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Mai încercaţi mai târziu\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Adaug utilizatorul %s la grupul %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Şterg utilizatorul %s din grupul %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: utilizatorul %s nu există\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: nu este un tty\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Utilizare: %s [input]\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr ""
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid " -r, --system create a system account\n"
+msgstr ""
+
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s nu este un nume de grup valid\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "nume de grup nevalid '%s'\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K cere KEY=VALUE\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: grupul %s există\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: Nu vă pot determina numele de utilizator.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: nu pot redenumi directorul %s în %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: nu pot schimba utilizatorul '%s' pe un client NIS.\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: grupul %s nu există\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: grupul '%s' este un grup NIS.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s este stăpân NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: utilizatorul %s este un utilizator NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: nu mai este memorie pentru update_group\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr "Utilizare: %s [input]\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+
+msgid "\n"
+msgstr ""
+
+msgid "Actions:\n"
+msgstr ""
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr ""
+
+msgid " -l, --list list the members of the group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr ""
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "nume de grup nevalid '%s'\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: grupul %s este un grup NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: utilizator necunoscut %s\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr "Utilizare: %s [input]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr "Utilizare: %s [input]\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s şi -r sunt incompatibile\n"
+
+msgid "invalid group file entry"
+msgstr "intrare nevalidă în fişierul de grupuri"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "şterg linia '%s'? "
+
+msgid "duplicate group entry"
+msgstr "intrare de grup duplicată"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "nume de grup nevalid '%s'\n"
+
+#, fuzzy, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "nume de grup nevalid '%s'\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "grupul %s: nici un utilizator %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "şterg membrul '%s'? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "nici o potrivire între intrările din fişierul de grupuri în %s\n"
+
+#, fuzzy, c-format
+msgid "add group '%s' in %s? "
+msgstr "adaug grupul '%s' în '%s'?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "intrare nevalidă în fişierul gshadow"
+
+msgid "duplicate shadow group entry"
+msgstr "intrare duplicată în gshadow"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "gshadow %s: nici un utilizator administrativ %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "şterg membrul administrativ '%s'? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "gshadow %s: nici un utilizator %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: fişierele au fost actualizate\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: nici o schimbare\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: nu pot actualiza fişierul %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Utilizare: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Utilizare: id\n"
+
+msgid " groups="
+msgstr " grupuri="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+
+msgid "Username Port From Latest"
+msgstr "Nume utilizator Port De la Cel mai recent"
+
+msgid "Username Port Latest"
+msgstr "Nume utilizator Port Cel mai recent"
+
+msgid "**Never logged in**"
+msgstr "**Niciodată autentificat**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s: nu pot crea directorul %s\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s: nu pot actualiza fişierul passwd\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 "Utilizare: %s [-p] [nume]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h gazdă] [-f nume]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r gazdă\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Timp de autentificare nevalid"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Sistem închis pentru întreţinere de rutină"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Deconectare ocolită -- autentificare permisă pentru root.]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Nici o intrare utmp. Trebuie să executaţi \"login\" de la nivelul cel mai de "
+"jos \"sh\""
+
+#, fuzzy, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Timp expirat pentru autentificare după %d secunde.\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "autentificare: eşuare PAM, abandonare : %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s autentificare: "
+
+msgid "login: "
+msgstr "autentificare: "
+
+#, fuzzy, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Numărul maxim de încercări a depăşit (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "autentificare: renunţare cerută de PAM\n"
+
+msgid "Login incorrect"
+msgstr "Autentificare incorectă"
+
+#, fuzzy, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "%s: linia %d: nu pot găsi utilizatorul %s\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s autentificare: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s : eşuare la bifurcare: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Avertisment: autentificare reactivată după blocarea temporară."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Ultima autentificare: %s în %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Ultima autentificare: %.19s în %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " de la %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"depăşirea timpului de autentificare\n"
+"\n"
+
+#, fuzzy
+msgid "Usage: logoutd\n"
+msgstr "Utilizare: id\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: can't open group file\n"
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr "%s: nu pot deschide fişierul de grupuri\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s : eşuare în abandonarea privilegiilor (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s : eşuare în abandonarea privilegiilor (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: câmpuri prea lungi\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: director de bază nevalid '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: nu pot crea directorul %s\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Utilizare: newgrp [-] [grup]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Utilizare: sg grup [[-c] comanda]\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s : eşuare în abandonarea privilegiilor (%s)\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "Parola veche: "
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s : eşuare la bifurcare: %s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: utilizatorul %s nu există\n"
+
+msgid "too many groups\n"
+msgstr "prea multe grupuri\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid " -b, --badnames allow bad names\n"
+msgstr ""
+
+msgid " -r, --system create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: grupul %s nu există\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: nume utilizator nevalid '%s'\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: nume utilizator nevalid '%s'\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: linia %d: linie nevalidă\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: nu pot actualiza intrarea pentru utilizatorul %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: linia %d: nu pot crea GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: linia %d: nu pot crea GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: utilizatorul %s nu există\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: linia %d: nu pot actualiza parola\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: linia %d: eşuare mkdir\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: linia %d: eşuare chown\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: linia %d: nu pot actualiza intrarea\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s : eşuare în abandonarea privilegiilor (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: nu pot crea %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: nu pot actualiza fişierul de grupuri\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid " -q, --quiet quiet mode\n"
+msgstr ""
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid "Old password: "
+msgstr "Parola veche: "
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Introduceţi noua parolă (minimum %d, maximum %d caractere)\n"
+"Vă rog utilizaţi o combinaţie de litere mari şi mici şi numere.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Introduceţi noua parolă (minimum %d, maximum %d caractere)\n"
+"Vă rog utilizaţi o combinaţie de litere mari şi mici şi numere.\n"
+
+msgid "New password: "
+msgstr "Parola nouă: "
+
+msgid "Try again."
+msgstr "Mai încercaţi."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Avertisment: parolă slabă (mai introduceţi-o odată pentru a o folosi oricum)."
+
+msgid "They don't match; try again.\n"
+msgstr "Nu se potrivesc, mai încercaţi odată.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Parola pentru %s nu poate fi schimbată.\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Parola pentru %s nu poate fi schimbată.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: depozitul %s nu este suportat\n"
+
+#, c-format
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr ""
+"%s: Nu puteţi vizualiza sau modifica informaţiile despre parola lui %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Schimbare parolă pentru %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Parola pentru %s este neschimbată.\n"
+
+#, fuzzy, c-format
+msgid "%s: password changed.\n"
+msgstr "Parolă schimbată."
+
+#, fuzzy, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "Avertisment de expirare a parolei"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr "Utilizare: %s [input]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr "Utilizare: %s [input]\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+
+msgid "invalid password file entry"
+msgstr "intrare nevalidă în fişierul passwd"
+
+msgid "duplicate password entry"
+msgstr "intrare duplicată în passwd"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "nume de utilizator nevalid '%s'\n"
+
+#, fuzzy, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "nume de utilizator nevalid '%s'\n"
+
+#, fuzzy, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "utilizatorul %s: fără grup %u\n"
+
+#, fuzzy, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "utilizatorul %s: directorul %s nu există\n"
+
+#, fuzzy, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "utilizatorul %s: programul %s nu există\n"
+
+#, fuzzy, c-format
+msgid "no tcb directory for %s\n"
+msgstr "%s: nu pot crea directorul %s\n"
+
+#, fuzzy, c-format
+msgid "create tcb directory for %s?"
+msgstr "%s: nu pot crea directorul %s\n"
+
+#, fuzzy, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "%s: nu pot crea directorul %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: nu pot încuia fişierul %s\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "nici o potrivire între intrările fişierului passwd în %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "adaug utilizatorul '%s' în '%s'?"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "intrare nevalidă în fişierul shadow"
+
+msgid "duplicate shadow password entry"
+msgstr "intrare duplicată în shadow"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "utilizatorul %s: ultima schimbare de parolă s-a făcut în viitor\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: nu pot deschide fişierul %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: nu pot rescrie fişierul\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Acces INTERZIS către su spre acest cont.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Autentificare cu parolă ocolită.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Vă rog introduceţi PROPRIA parolă pentru autentificare.\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: nu pot încuia fişierul %s\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr ""
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr ""
+
+msgid "Session terminated, terminating shell..."
+msgstr ""
+
+#, c-format
+msgid " ...killed.\n"
+msgstr ""
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr ""
+
+msgid " ...terminated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"Utilizare: su [opţiuni] [autentificare]\n"
+"\n"
+"Opţiuni:\n"
+" -c, --command COMANDA trimite COMANDA la consola invocată\n"
+" -h, --help afişează acest mesaj de ajutor şi ieşi\n"
+" -, -l, --login face din consolă una de autentificare\n"
+" -m, -p,\n"
+" --preserve-environment nu reface variabilele de mediu, şi\n"
+" păstrează aceeaşi consolă\n"
+" -s, --shell SHELL foloseşte SHELL în locul celei implicite\n"
+" din passwd\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ignorat)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Nu sunteţi autorizat pentru su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Introduceţi propria parolă)"
+
+#, fuzzy, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: autentificare PAM eşuată\n"
+
+#, fuzzy, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "Nu sunteţi autorizat pentru su %s\n"
+
+#, fuzzy, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "Fără intrare în passwd pentru 'root'"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: trebuie pornit de la un terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: eroare %d\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: nu pot redenumi directorul %s în %s\n"
+
+#, fuzzy, c-format
+msgid "Cannot execute %s\n"
+msgstr "Nu pot executa %s"
+
+msgid "No password file"
+msgstr "Fără fişier passwd"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "Fără intrare în passwd pentru 'root'"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Apăsaţi ctrl-D pentru pornire normală,\n"
+"(sau introduceţi parola de root pentru întreţinerea sistemului):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Intrare în modul de întreţinere sistem"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: nu pot crea noile fişiere implicite\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: nu pot crea noile fişiere implicite\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: nu pot deschide noile fişiere implicite\n"
+
+#, fuzzy, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: linia %d: eşuare chown\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: nu pot crea directorul %s\n"
+
+#, fuzzy, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: redenumire: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: grupul '%s' este un grup NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: prea multe grupuri specificate (maximum %d).\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr "Utilizare: %s [input]\n"
+
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr ""
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr ""
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr ""
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr ""
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: director de bază nevalid '%s'\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: comentariu nevalid '%s'\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: director personal nevalid '%s'\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: parole criptate cerute pentru -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s; parole criptate cerute pentru -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: fişier nevalid '%s'\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: consolă nevalidă '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: avertisment: %s nu este deţinut de către %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rewrite password file\n"
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s: nu pot rescrie fişierul passwd\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s: nu pot crea directorul %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s : eşuare în abandonarea privilegiilor (%s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error updating files\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: eroare la actualizarea fişierelor\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: nu pot crea directorul %s\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: director personal nevalid '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "eşuare în schimbarea proprietarului căsuţei poştale"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: nu pot crea directorul %s\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: linia %d: eşuare chown\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: linia %d: eşuare chown\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "Crearea fişierului căsuţă pentru mesaje"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Grupul 'mail' nu a fost găsit. Se crează fişierul căsuţă de mesaje pentru "
+"utilizator cu modul 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Se atribuie permisiunile fişierului căsuţă de mesaje"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: utilizatorul %s există\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: grupul %s există - dacă vreţi să adăugaţi un utilizator la acest grup, "
+"folosiţi -g.\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: nu pot crea %s\n"
+
+#, fuzzy, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %u nu este unic\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: nu pot crea directorul %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: nu pot crea %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: nu pot crea %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: nu pot crea %s\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: avertisment: directorul personal există deja.\n"
+"Nu se copiază nici un fişier în el din directorul schelet.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr "%s: nu pot schimba utilizatorul '%s' pe un client NIS.\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: Nu pot şterge grupul %s care este un grup primar pentru alt utilizator.\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "%s: nu pot redenumi directorul %s în %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: director personal nevalid '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: avertisment: nu pot şterge "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s nu aparţine de %s, nu se şterge\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s : eşuare în abandonarea privilegiilor (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: nu pot redenumi directorul %s în %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: nu pot redenumi directorul %s în %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: utilizatorul %s este un utilizator NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: director personal nevalid '%s'\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: nu se şterge directorul %s (s-ar şterge directorul personal al "
+"utilizatorului %s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: eroare la ştergerea directorului %s\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: eroare la ştergerea directorului %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr ""
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr ""
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr ""
+
+msgid " -L, --lock lock the user account\n"
+msgstr ""
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr ""
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr ""
+
+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"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: utilizatorul %s există\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: dată nevalidă '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: dată nevalidă '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: no options\n"
+msgstr "%s: nu pot deschide fişierul %s\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: sunt necesare parole criptate pentru -e şi -f\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: directorul %s există\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: nu pot crea directorul %s\n"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: avertisment: eşuare în a elimina complet vechiul director personal %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: nu pot redenumi directorul %s în %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: avertisment: %s nu este deţinut de către %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "eşuare în schimbarea proprietarului căsuţei poştale"
+
+msgid "failed to rename mailbox"
+msgstr "eşuare în redenumirea căsuţei poştale"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s : eşuare în abandonarea privilegiilor (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s : eşuare în abandonarea privilegiilor (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s : eşuare în abandonarea privilegiilor (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s : eşuare în abandonarea privilegiilor (%s)\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid " -g, --group edit group database\n"
+msgstr ""
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr ""
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s : eşuare în abandonarea privilegiilor (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s este neschimbat\n"
+
+#, fuzzy
+msgid "failed to create scratch directory"
+msgstr "eşuare în redenumirea căsuţei poştale"
+
+#, fuzzy
+msgid "failed to drop privileges"
+msgstr "%s : eşuare în abandonarea privilegiilor (%s)\n"
+
+#, fuzzy
+msgid "Couldn't get file context"
+msgstr "N-am putut încuia fişierul"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+#, fuzzy
+msgid "failed to gain privileges"
+msgstr "%s : eşuare în abandonarea privilegiilor (%s)\n"
+
+msgid "Couldn't lock file"
+msgstr "N-am putut încuia fişierul"
+
+msgid "Couldn't make backup"
+msgstr "N-am putut face o copie de rezervă"
+
+#, fuzzy, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr "%s: %s negăsit în /etc/passwd\n"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+#, fuzzy
+msgid "failed to open scratch file"
+msgstr "%s: nu pot deschide fişierul de grupuri\n"
+
+#, fuzzy
+msgid "failed to unlink scratch file"
+msgstr "%s: câmpuri prea lungi\n"
+
+#, fuzzy
+msgid "failed to stat edited file"
+msgstr "eşuare în redenumirea căsuţei poştale"
+
+#, fuzzy
+msgid "failed to allocate memory"
+msgstr "eşuare în schimbarea proprietarului căsuţei poştale"
+
+#, fuzzy
+msgid "failed to create backup file"
+msgstr "eşuare în redenumirea căsuţei poştale"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: nu pot reface %s: %s (schimbările dvs. sunt în %s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: director de bază nevalid '%s'\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Utilizare: %s [input]\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "malloc(%d) a eşuat\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Folosire: chage [opţiuni] utilizator\n"
+#~ "\n"
+#~ "Opţiuni:\n"
+#~ " -d, --lastday ULTIMA_ZI setează ultima schimbare de parolă\n"
+#~ " la ULTIMA_ZI\n"
+#~ " -E, --expiredate DATA_EXPIRARE setează data expirării contului la\n"
+#~ " DATA_EXPIRARE\n"
+#~ " -h, --help afişează acest mesaj de ajutor şi ieşi\n"
+#~ " -I, --inactive INACTIVĂ setează parolă inactivă după expirare\n"
+#~ " la INACTIVĂ\n"
+#~ " -l, --list arată informaţiile de temporalitate ale\n"
+#~ " contului\n"
+#~ " -m, --mindays MIN_ZILE setează numărul minim de zile înainde "
+#~ "de\n"
+#~ " schimbarea parolei to MIN_ZILE\n"
+#~ " -M, --maxdays MAX_ZILE setează numărul maxim de zile înainte "
+#~ "de\n"
+#~ " schimbarea parolei la MAX_ZILE\n"
+#~ " -W, --warndays AVERTIZ_ZILE setează zilele de avertisment pentru\n"
+#~ " expirare la AVERTIZ_ZILE\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: autentificare PAM eşuată\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "Utilizare: %s [-f nume_complet] [-r nr_cameră] [-w cale_lucru]\n"
+#~ "\t[-h cale_acasă] [-o altele] [utilizator]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr ""
+#~ "Utilizare: %s [-f nume_complet] [-r nr_cameră] [-w cale_lucru] [-h "
+#~ "cale_acasă]\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Folosire: chpasswd [opţiuni]\n"
+#~ "\n"
+#~ "Opţiuni:\n"
+#~ " -e, --encrypted parolele oferite sunt criptate\n"
+#~ " -h, --help afişează acest mesaj de ajutor şi ieşi\n"
+#~ " -m, --md5 foloseşte criptarea MD5 în loc de DES "
+#~ "atunci\n"
+#~ " când parolele oferite nu sunt criptate\n"
+#~ "%s\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Folosire: userdel [opţiuni] NUME\n"
+#~ "\n"
+#~ "Opţiuni:\n"
+#~ " -f, --force forţează ştergerea fişierelor, chiar\n"
+#~ " dacă nu sunt proprietatea utilizatorului\n"
+#~ " -h, --help afişează acest mesaj de ajutor şi ieşi\n"
+#~ " -r, --remove şterge directorul personal şi cel pentru "
+#~ "mesaje\n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "Utilizare: expiry {-f|-c}\n"
+
+#, fuzzy
+#~| msgid "%s: cannot open file %s\n"
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "%s: nu pot deschide fişierul %s\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "Utilizare: groupdel grup\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "Utilizare: %s [-r] [-s] [grup [gshadow]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "Utilizare: %s [-r] [-s] [grup]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: -s şi -r sunt incompatibile\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "Utilizare: groupdel grup\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "Utilizare: groupdel grup\n"
+
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Utilizaree: lastlog [opţiuni]\n"
+#~ "\n"
+#~ "Opţiuni:\n"
+#~ " -b, --before ZILE afişează doar înregistrările ultimului\n"
+#~ " jurnal mai vechi de ZILE\n"
+#~ " -h, --help afişează acest mesaj de ajutor şi ieşi\n"
+#~ " -t, --time ZILE afişează doar înregistrările ultimului\n"
+#~ " jurnal mai recente de ZILE\n"
+#~ " -u, --user LOGIN afişează înregistrarea ultimului jurnal "
+#~ "pentru\n"
+#~ " utilizatorul cu autentificarea "
+#~ "specificată\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Utilizare: passwd [opţiuni] [nume_cont]\n"
+#~ "\n"
+#~ "Opţiuni:\n"
+#~ " -a, --all afişează starea parolelor din toate "
+#~ "conturile\n"
+#~ " -d, --delete şterge parola respectivului cont\n"
+#~ " -e, --expire forţează expirarea parolei pentru\n"
+#~ " respectivul cont\n"
+#~ " -h, --help afisează acest mesaj de ajutor şi ieşi\n"
+#~ " -k, --keep-tokens schimbă parola doar dacă este expirată\n"
+#~ " -i, --inactive INACTIV fixează durata de inactivitate a parolei "
+#~ "la\n"
+#~ " INACTIV după expirarea sa\n"
+#~ " -l, --lock blochează respectivul cont\n"
+#~ " -n, --mindays ZILE_MIN fixează numărul minim de zile la "
+#~ "ZILE_MIN\n"
+#~ " înainte de schimbarea parolei\n"
+#~ " -q, --quiet modul silenţios\n"
+#~ " -r, --repository DEPOZIT schimbă parola în depozitul DEPOZIT\n"
+#~ " -S, --status raportează starea parolei respectivului "
+#~ "cont\n"
+#~ " -u, --unlock deblochează respectivul cont\n"
+#~ " -w, --warndays ZILE_AVERT fixează numărul de zile de avertisment "
+#~ "de\n"
+#~ " expirare la ZILE_AVERT\n"
+#~ " -x, --maxdays ZILE__MAX fixează numărul maxim de zile înainde de\n"
+#~ " schimbarea parolei la ZILE_MAX\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr "Folosire: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr "Folosire: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "Utilizare: id\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "Utilizare: id\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "Identificator necunoscut: %s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "Fără consolă\n"
+
+#~ msgid ""
+#~ "Usage: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force removal of files,\n"
+#~ " even if not owned by user\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -r, --remove remove home directory and mail spool\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Folosire: userdel [opţiuni] NUME\n"
+#~ "\n"
+#~ "Opţiuni:\n"
+#~ " -f, --force forţează ştergerea fişierelor, chiar "
+#~ "dacă\n"
+#~ " nu sunt proprietatea utilizatorului\n"
+#~ " -h, --help afişează acest mesaj de ajutor şi ieşi\n"
+#~ " -r, --remove şterge directorul personal şi cel pentru "
+#~ "mesaje\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Folosire: usermod [opţiuni] NUME\n"
+#~ "\n"
+#~ "Opţiuni:\n"
+#~ " -a, --append GRUP tadaugă utilizatorul în GRUPUL "
+#~ "suplimentar\n"
+#~ " -c, --comment COMENTARIU valoarea nouă a câmpului GECOS\n"
+#~ " -d, --home DIR_ACASA noul director personal pentru noul "
+#~ "cont\n"
+#~ " -e, --expiredate DATA_EXPIRĂRII setează data expirării contului la\n"
+#~ " DATA_EXPIRĂRII\n"
+#~ " -f, --inactive INACTIVĂ setează parola inactivă după expirare\n"
+#~ " la INACTIVĂ\n"
+#~ " -g, --gid GRUP forţează folosirea GRUPULUI ca nou\n"
+#~ " iniţial grup\n"
+#~ " -G, --groups GRUPURI afişează grupurile suplimentare "
+#~ "GRUPURI\n"
+#~ " -h, --help afişează acest mesaj de ajutor şi ieşi\n"
+#~ " -l, --login NUME_NOU noua valoare a numelui de "
+#~ "autentificare\n"
+#~ " -L, --lock blochează contul\n"
+#~ " -m, --move-home mută conţinutul directorului personal "
+#~ "în\n"
+#~ " noua locaţie (foloseşte doar cu -d)\n"
+#~ " -o, --non-unique permite folosirea UID-urilor duplicate\n"
+#~ " (non-unice)\n"
+#~ " -p, --password PAROLA foloseşte criptarea pentru noua parolă\n"
+#~ " -s, --shell SHELL noul mediu de autentificare pentru\n"
+#~ " contul utilizator\n"
+#~ " -u, --uid UID noul UID pentru contul utilizator\n"
+#~ " -U, --unlock deblochează contul utilizator\n"
+#~ "\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s: nu s-au atribuit semnalizatoare\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: vipw [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -g, --group edit group database\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -p, --passwd edit passwd database\n"
+#~| " -q, --quiet quiet mode\n"
+#~| " -s, --shadow edit shadow or gshadow database\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group edit group database\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -p, --passwd edit passwd database\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow edit shadow or gshadow database\n"
+#~ " -u, --user which user's tcb shadow file to edit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Utilizare: vipw [opţiuni]\n"
+#~ "\n"
+#~ "Opţiuni:\n"
+#~ " -g, --group editează baza de date de grupuri\n"
+#~ " -h, --help afişează acest mesaj de ajutor şi ieşi\n"
+#~ " -p, --passwd editează baza de date de conturi\n"
+#~ " -q, --quiet modul tăcut\n"
+#~ " -s, --shadow editează baza de date shadow sau gshadow\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Utilizare: %s [input]\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s: nu pot crea %s\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s: nu pot schimba proprietarul %s\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -a, --all display faillog records for all users\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -l, --lock-time SEC after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| " -m, --maximum MAX set maximum failed login counters to "
+#~| "MAX\n"
+#~| " -r, --reset reset the counters of login failures\n"
+#~| " -t, --time DAYS display faillog records more recent than "
+#~| "DAYS\n"
+#~| " -u, --user LOGIN display faillog record or maintains "
+#~| "failure\n"
+#~| " counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| " options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all display faillog records for all users\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -l, --lock-time SEC after failed login lock account to SEC "
+#~ "seconds\n"
+#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
+#~ " -r, --reset reset the counters of login failures\n"
+#~ " -t, --time DAYS display faillog records more recent than "
+#~ "DAYS\n"
+#~ " -u, --user LOGIN display faillog record or maintains "
+#~ "failure\n"
+#~ " counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ " options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Utilizare: faillog [opţiuni]\n"
+#~ "\n"
+#~ "Opţiuni:\n"
+#~ " -a, --all afişează jurnalul înregistrărilor de "
+#~ "eşuări\n"
+#~ " pentru toţi utilizatorii\n"
+#~ " -h, --help afişează acest mesaj de ajutor şi ieşi\n"
+#~ " -l, --lock-time SEC blochează contul la SEC secunde după o\n"
+#~ " autentificare eşuată\n"
+#~ " -m, --maximum MAX setează numărul maxim de autentificări\n"
+#~ " eşuate la MAX\n"
+#~ " -r, --reset resetează contorul de autentificări "
+#~ "eşuate\n"
+#~ " -t, --time DAYS afişează jurnalul înregistrărilor de "
+#~ "eşuări\n"
+#~ " mai recente de DAYS zile\n"
+#~ " -u, --user LOGIN afişează jurnalul înregistrărilor de "
+#~ "eşuări\n"
+#~ " sau menţine contoarele de eşuări şi "
+#~ "limite\n"
+#~ " (dacă este folosit cu opţiunile -r, -m "
+#~ "sau\n"
+#~ " -l) doar pentru utilizatorul LOGIN\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force exit with success status if the\n"
+#~ " specified group already exists\n"
+#~ " -g, --gid GID use GID for the new group\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique allow create group with duplicate\n"
+#~ " (non-unique) GID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new group\n"
+#~ " -r, --system create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Utilizare: groupadd [opţiuni] grup\n"
+#~ "\n"
+#~ "Opţiuni:\n"
+#~ " -f, --force forţează terminarea cu starea de succes\n"
+#~ " dacă grupul specificat există deja\n"
+#~ " -g, --gid GID foloseşte GID pentru noul grup\n"
+#~ " -h, --help afişează acest mesaj de ajutor şi ieşi\n"
+#~ " -K, --key KEY=VALUE înlocuieşte cu setările implicite\n"
+#~ " /etc/login.defs\n"
+#~ " -o, --non-unique permite crearea grupului cu GID duplicat\n"
+#~ " (ne-unic)\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --gid GID force use new GID by GROUP\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Utilizare: groupadd [opţiuni] grup\n"
+#~ "\n"
+#~ "Opţiuni:\n"
+#~ " -f, --force forţează terminarea cu starea de succes\n"
+#~ " dacă grupul specificat există deja\n"
+#~ " -g, --gid GID foloseşte GID pentru noul grup\n"
+#~ " -h, --help afişează acest mesaj de ajutor şi ieşi\n"
+#~ " -K, --key KEY=VALUE înlocuieşte cu setările implicite /etc/login."
+#~ "defs\n"
+#~ " -o, --non-unique permite crearea grupului cu GID duplicat\n"
+#~ " (ne-unic)\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~ " home directory\n"
+#~ " -c, --comment COMMENT set the GECOS field for the new user "
+#~ "account\n"
+#~ " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~ " -D, --defaults print or save modified default useradd\n"
+#~ " configuration\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP for the new user account\n"
+#~ " -G, --groups GROUPS list of supplementary groups for the new\n"
+#~ " user account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -l, --no-log-init do not add the user to the lastlog and\n"
+#~ " faillog databases\n"
+#~ " -m, --create-home create home directory for the new user\n"
+#~ " account\n"
+#~ " -M, --no-create-home do not create user's home directory\n"
+#~ " (overrides /etc/login.defs)\n"
+#~ " -N, --no-user-group do not create a group with the same name "
+#~ "as\n"
+#~ " the user\n"
+#~ " -o, --non-unique allow create user with duplicate\n"
+#~ " (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new user\n"
+#~ " account\n"
+#~ " -r, --system create a system account\n"
+#~ " -s, --shell SHELL the login shell for the new user account\n"
+#~ " -u, --uid UID force use the UID for the new user "
+#~ "account\n"
+#~ " -U, --user-group create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Folosire: useradd [opţiuni] LOGIN\n"
+#~ "\n"
+#~ "Opţiuni:\n"
+#~ " -b, --base-dir DIR_BAZA baza directorului pentru noul director\n"
+#~ " personal al contului\n"
+#~ " -c, --comment COMENTARIU setează câmpul GECOS pentru noul cont\n"
+#~ " -d, --home-dir DIR_ACASA directorul personal pentru noul cont\n"
+#~ " -D, --defaults afişează sau salvează configuraţia "
+#~ "useradd\n"
+#~ " implicită modificată\n"
+#~ " -e, --expiredate DATA_EXPIRĂRII setează data expirării contului la\n"
+#~ " DATA_EXPIRĂRII\n"
+#~ " -f, --inactive INACTIVĂ setează parola inactivă după expirare\n"
+#~ " la INACTIVĂ\n"
+#~ " -g, --gid GRUP forţează folosirea GRUPULUI pentru noul "
+#~ "cont\n"
+#~ " -G, --groups GRUPURI afişează grupurile suplimentare pentru\n"
+#~ " noul cont utilizator\n"
+#~ " -h, --help afişează acest mesaj de ajutor şi ieşi\n"
+#~ " -k, --skel DIR_SKELET specifică un schelet director "
+#~ "alternativ\n"
+#~ " -K, --key KEY=VALOARE suprascrie valorile implicite ale\n"
+#~ " /etc/login.defs\n"
+#~ " -m, --create-home crează directorul personal pentru noul\n"
+#~ " cont utilizator\n"
+#~ " -o, --non-unique permite creare unui utilizator cu un "
+#~ "UID\n"
+#~ " duplicat (non-unic)\n"
+#~ " -p, --password PAROLA foloseşte parola criptată pentru noul "
+#~ "cont\n"
+#~ " utilizator\n"
+#~ " -s, --shell SHELL mediul de autentificare pentru noul\n"
+#~ " cont utilizator\n"
+#~ " -u, --uid UID forţează utilizarea UID pentru noul\n"
+#~ " cont utilizator\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Parola setata pentru expirare."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: nu pot închide fişierul passwd\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: nu pot deschide fişierul passwd\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s nu pot încuia fişierul shadow\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: nu pot deschide fişierul shadow\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: nu pot rescrie fişierul shadow\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: nu pot rescrie fişierul passwd\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: nu pot actualiza fişierul shadow\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tNume complet: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tNumăr cameră: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tTelefon birou: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tTelefon acasă: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "Nu pot încuia fişierul passwd; încercaţi mai târziu.\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Eroare la actualizarea intrării în passwd.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Nu pot face modificările în fişierul passwd.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Nu pot debloca fişierul passwd.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: nu pot încuia fişierul de grupuri\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: nu pot închide fişierul gshadow\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: nu pot deschide fişierul shadow\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: eroare la actualizarea fişierului shadow\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: eroare la actualizarea intrărilor de grupuri\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: linia %d: grup necunoscut %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: linia %d: nu pot actualiza intrarea\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: nu pot închide fişierul shadow\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: eroare la actualizarea fişierului shadow\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: eroare la actualizarea fişierului passwd\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: linia %d: utilizator necunoscut %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: linia %d: nu pot actualiza intrarea în passwd\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: utilizator necunoscut\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Utilizator necunoscut: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Utilizare: %s [-r|-R] grup\n"
+
+#~ msgid " %s [-a user] group\n"
+#~ msgstr " %s [-a utilizator] grup\n"
+
+#~ msgid " %s [-d user] group\n"
+#~ msgstr " %s [-d utilizator] grup\n"
+
+#~ msgid " %s [-A user,...] [-M user,...] group\n"
+#~ msgstr " %s [-A utilizator,...] [-M utilizator,...] grup\n"
+
+#~ msgid " %s [-M user,...] group\n"
+#~ msgstr " %s [-M utilizator,...] grup\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: nu pot obţine închiderea\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: nu pot obţine închiderea shadow\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: nu pot rescrie fişierul shadow\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: nu pot descuia fişierul\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: nu pot actualiza intrarea\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: nu pot actualiza intrarea shadow\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "grup necunoscut: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: nu pot deschide fişierul\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: nu pot deschide fişierul shadow\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Cine sunteţi?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: membru necunoscut %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: eroare la adăugarea unei noi intrări de grup\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: nu pot rescrie fişierul de grupuri\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: nu pot rescrie fişierul gshadow\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: nu pot încuia fişierul de grupuri\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: nu pot deschide fişierul de grupuri\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: nu pot încuia fişierul gshadow\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: nu pot deschide fişierul gshadow\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u nu este unic\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: eroare la ştergerea intrării de grup\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: eroare la ştergerea intrării din gshadow\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: nu pot şterge grupul primar al utilizatorului.\n"
+
+#, fuzzy
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "%s: autentificare PAM eşuată\n"
+
+#, fuzzy
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "%s: nu pot încuia fişierul de grupuri\n"
+
+#, fuzzy
+#~ msgid "Cannot close group file\n"
+#~ msgstr "%s: nu pot deschide fişierul de grupuri\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s nu s-a găsit în /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u nu este un GID unic\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s nu este un nume unic\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: nu pot rescrie fişierul passwd\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: nu pot încuia fişierul passwd\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: nu pot deschide fişierul passwd\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: nu pot actualiza intrarea parolei criptate pentru %s\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: nu pot actualiza intrarea pentru grupul %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: nu pot încuia fişierul gshadow\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: nu pot deschide fişierul gshadow\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: nu pot şterge gshadow %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: nu pot actualiza fişierul gshadow\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: nu pot şterge fişierul gshadow\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "UID necunoscut: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "GID necunoscut: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: grupul %s nu există\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: utilizatorul %s nu există\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: nume utilizator nevalid '%s'\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: nu pot încuia /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: nu pot încuia /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: nu pot încuia /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: nu pot încuia /etc/passwd.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: nu pot deschide fişierele\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: nu pot actualiza intrarea passwd pentru %s\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: nu pot încuia fişierul passwd\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: nu pot deschide fişierul passwd\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: nu pot şterge intrarea shadow pentru %s\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: nu pot actualiza fişierul passwd\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: nu pot actualiza intrarea pentru utilizatorul %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: nu pot şterge fişierul shadow\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: GID necunoscut %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: grup necunoscut %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: nu mai este memorie pentru update_gshadow\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: nu pot rescrie fişierul shadow\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: nu pot încuia fişierul shadow\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: nu pot deschide fişierul shadow\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: eroare la închiderea fişierului de grupuri\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: eroare la deschiderea fişierului de grupuri\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: eroare la închiderea fişierului gshadow\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: eroare la deschiderea fişierului gshadow\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: eroare la adăugarea unei noi intrări în passwd\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: eroare la adăugarea unei noi intrări în shadow\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr ""
+#~ "%s: avertisment: CREATE_HOME nu este suportat, vă rog folosiţi -m.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: eroare la actualizarea intrărilor de grupuri\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: eroare la actualizarea intrărilor de grupuri\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: nu pot deschide fişierul de grupuri\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: nu pot deschide fişierul gshadow\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: eroare la ştergerea intrării din passwd\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: eroare la ştergerea intrării din shadow\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: eroare la adăugarea unei noi intrări de grup\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu nu este unic\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: eroare la schimbarea intrării în passwd\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: eroare la ştergerea intrării passwd\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: eroare la ştergerea intrării din shadow\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: nu pot prelua GID unic\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " pe '%.100s' din '%.200s'"
+
+#~ msgid " on '%.100s'"
+#~ msgstr " pe '%.100s'"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: linia %d: nu pot crea UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: numele %s nu este unic\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ " -h, --help\t\tdisplay this help message and exit\n"
+#~ " -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Folosire: chgpasswd [opţiuni]\n"
+#~ "\n"
+#~ "Opţiuni:\n"
+#~ " -e, --encrypted\tparolele oferite sunt criptate\n"
+#~ " -h, --help\t\tafişează acest mesaj de ajutor şi ieşi\n"
+#~ " -m, --md5\t\tfoloseşte criptarea MD5 în loc de DES atunci când "
+#~ "parolele\n"
+#~ "\t\t\toferite nu sunt criptate\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Fără fişier passwd\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Scuze.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Scuze, parola pentru %s încă nu poate fi schimbată.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Scuze."
diff --git a/po/ru.gmo b/po/ru.gmo
new file mode 100644
index 0000000..c0fb0df
--- /dev/null
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
new file mode 100644
index 0000000..175edce
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,3621 @@
+# translation of ru.po to Russian
+# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+#
+# Nikolai Prokoschenko <nikolai@prokoschenko.de>, 2004.
+# Eugene Konev <ejka@imfi.kspu.ru>, 2004.
+# alyoshin.s@gmail.com <alyoshin.s@gmail.com>, 2008.
+# Yuri Kozlov <kozlov.y@gmail.com>, 2004, 2005, 2006, 2007, 2008.
+# Yuri Kozlov <yuray@komyakino.ru>, 2009, 2011, 2012, 2017.
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.1.5.1-1\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2017-03-05 11:14+0300\n"
+"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
+"Language-Team: Russian <debian-l10n-russian@lists.debian.org>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 2.0\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"Существует сразу несколько записей с именем «%s» в %s. Исправьте это с "
+"помощью pwck или grpck.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "алгоритм шифрования не поддерживается libcrypt? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr "ошибка настройки: не удалось разобрать значение %s: «%s»"
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Не удалось выделить память для загрузки настроек.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "ошибка настройки: неизвестный элемент «%s» (сообщите администратору)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr "%s: nscd завершился с ошибкой (по сигналу %d)\n"
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr "%s: nscd завершился с кодом выхода %d\n"
+
+msgid "Password: "
+msgstr "Пароль: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Пароль пользователя %s: "
+
+#, fuzzy
+#| msgid "Cannot open audit interface - aborting.\n"
+msgid "Cannot open audit interface.\n"
+msgstr ""
+"Не удалось открыть интерфейс протоколирования (audit) — прекращение работы.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr "[libsemanage]: %s\n"
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr "Невозможно создать управляющий описатель SELinux\n"
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr "Политика SELinux не управляема\n"
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr "Невозможно прочитать хранилище политики SELinux\n"
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr "Невозможно установить управляющее подключение SELinux\n"
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr "Невозможно начать транзакцию SELinux\n"
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr "Не удалось запросить seuser для %s\n"
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr "Не удалось назначить serange для %s\n"
+
+#, c-format
+msgid "Could not set sename for %s\n"
+msgstr "Не удалось назначить sename для %s\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr "Не удалось изменить сопоставление входа для %s\n"
+
+#, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "Невозможно создать сопоставление входа SELinux для %s\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr "Невозможно задать имя для %s\n"
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr "Невозможно задать пользователя SELinux для %s\n"
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr "Невозможно добавить сопоставление входа для %s\n"
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr "Невозможно инициализировать управление SELinux\n"
+
+#, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "Невозможно создать ключ пользователя SELinux\n"
+
+#, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "Невозможно проверить пользователя SELinux\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr "Невозможно изменить пользовательское сопоставление SELinux\n"
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr "Невозможно добавить пользовательское сопоставление SELinux\n"
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr "Невозможно зафиксировать транзакцию SELinux\n"
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+"Сопоставление входа для %s не определено; нормально, если использовалось "
+"сопоставление по умолчанию\n"
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+"Сопоставление входа для %s определено в политике и не может быть удалено\n"
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr "Невозможно удалить сопоставление входа для %s"
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: нехватка памяти\n"
+
+#, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: не удалось выполнить функцию stat для %s: %s\n"
+
+#, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: %s не является каталогом или символьной ссылкой\n"
+
+#, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: не удалось прочитать символьную ссылку %s: %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr "%s: вероятно, слишком длинная символьная ссылка: %s\n"
+
+#, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: не удалось создать каталог %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: не удалось изменить владельца %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: не удалось изменить права доступа %s: %s\n"
+
+#, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: unlink: %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: не удалось удалить каталог %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: не удалось переименовать каталог %s в %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: не удалось удалить %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: не удалось создать символьную ссылку %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: не удалось изменить владельцев %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: не удалось выполнить функцию lstat для %s: %s\n"
+
+#, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr ""
+"%s: предупреждение: у пользователя %s отсутствует файл shadow в структуре "
+"tcb.\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+"%s: чрезвычайная ситуация: файл shadow у %s в структуре tcb не является\n"
+"обычным файлом с st_nlink=1. Учётная запись остаётся заблокированной.\n"
+
+#, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: mkdir: %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: не удалось открыть %s: %s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Предупреждение: неизвестная группа %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Предупреждение: слишком много групп\n"
+
+msgid "Your password has expired."
+msgstr "Срок действия вашего пароля истёк."
+
+msgid "Your password is inactive."
+msgstr "Действие вашего пароля приостановлено."
+
+msgid "Your login has expired."
+msgstr "Срок действия вашей учётной записи истёк."
+
+msgid " Contact the system administrator."
+msgstr " Обратитесь к системному администратору."
+
+msgid " Choose a new password."
+msgstr " Выберите и введите новый пароль."
+
+msgid "You must change your password."
+msgstr "Вы должны изменить свой пароль."
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Срок действия вашего пароля истекает через %ld дней.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Срок действия вашего пароля истекает завтра."
+
+msgid "Your password will expire today."
+msgstr "Срок действия вашего пароля истекает сегодня."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+"Не удалось открыть интерфейс протоколирования (audit) — прекращение работы.\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Не удалось изменить владельца или права на tty stdin: %s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: не удалось разблокировать %s\n"
+
+#, c-format
+msgid "%s: "
+msgstr "%s: "
+
+msgid ": "
+msgstr ": "
+
+msgid "Environment overflow\n"
+msgstr "Слишком большое количество переменных окружения\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Вы не можете изменить $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d неудачная попытка входа в систему.\n"
+"Последняя была %s на %s.\n"
+msgstr[1] ""
+"%d неудачных попытки входа в систему.\n"
+"Последняя была %s на %s.\n"
+msgstr[2] ""
+"%d неудачных попыток входа в систему.\n"
+"Последняя была %s на %s.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: неверная настройка: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr "%s: неверная настройка: GID_MIN (%lu), GID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "%s: не удалось выделить память: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: не удалось получить уникальный системный GID (кончились свободные GID-"
+"ы)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: не удалось получить уникальный GID (кончились свободные GID-ы)\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: не удалось получить уникальный GID (кончились свободные GID-ы)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+"%s: неверная настройка: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX (%lu)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't find subordinate user range\n"
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: не удалось найти подчинённый диапазон пользователей\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+"%s: неверная настройка: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX (%lu)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't find subordinate user range\n"
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: не удалось найти подчинённый диапазон пользователей\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: неверная настройка: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr "%s: неверная настройка: UID_MIN (%lu), UID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: не удалось получить уникальный системный UID (кончились свободные UID-"
+"ы)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: не удалось получить уникальный UID (кончились свободные UID-ы)\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: не удалось получить уникальный UID (кончились свободные UID-ы)\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Authentication failure\n"
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: не удалось пройти проверку подлинности\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: неверное поле «%s»\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Could not set name for %s\n"
+msgid "%s: Could not seteuid to %d\n"
+msgstr "Невозможно задать имя для %s\n"
+
+#, fuzzy, c-format
+#| msgid "Could not set name for %s\n"
+msgid "%s: Could not set caps\n"
+msgstr "Невозможно задать имя для %s\n"
+
+#, c-format
+msgid "%s: snprintf failed!\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: строка %d: вызов chown %s завершился неудачно: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: строка %d: вызов chown %s завершился неудачно: %s\n"
+
+msgid "Too many logins.\n"
+msgstr "Слишком много попыток входа в систему.\n"
+
+msgid "You have new mail."
+msgstr "Для вас есть новые почтовые сообщения."
+
+msgid "No mail."
+msgstr "Для вас нет почтовых сообщений."
+
+msgid "You have mail."
+msgstr "Для вас есть почтовые сообщения."
+
+msgid "no change"
+msgstr "изменений не внесено"
+
+msgid "a palindrome"
+msgstr "палиндром"
+
+msgid "case changes only"
+msgstr "изменение только в регистре символов"
+
+msgid "too similar"
+msgstr "слишком похожий"
+
+msgid "too simple"
+msgstr "слишком простой"
+
+msgid "rotated"
+msgstr "перестановка символов"
+
+msgid "too short"
+msgstr "слишком короткий"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Неверный пароль: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: не удалось выполнить pam_start(), ошибка %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#
+msgid "passwd: password unchanged\n"
+msgstr "passwd: пароль не изменён\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: пароль успешно обновлён\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: хранилище %s не поддерживается\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start: ошибка %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd: не удалось выполнить pam_start(), ошибка %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Неверный пароль для %s.\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr "%s: несколько параметров --root\n"
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr "%s: для параметра «%s» требуется аргумент\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: не удалось снизить уровень привилегий (%s)\n"
+
+#, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: некорректное значение пути chroot «%s»\n"
+
+#, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: нет доступа к каталогу chroot %s: %s\n"
+
+#, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: не удалось выполнить chdir в chroot-каталог %s: %s\n"
+
+#, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: не удалось выполнить chroot в каталог %s: %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"Неправильное значение для ENCRYPT_METHOD: «%s».\n"
+"Используется значение по умолчанию DES.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Невозможно перейти в каталог «%s»\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr ""
+"Каталог отсутствует или недоступен, вход в систему выполняется с HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Не удалось выполнить %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Неверный корневой каталог «%s»\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Не удалось изменить корневой каталог на «%s»\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: пользователь %s сейчас работает в системе\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: пользователь %s сейчас работает в системе\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Не удалось определить название вашего tty."
+
+msgid "No"
+msgstr "Нет"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Использование: %s [параметры] ПОЛЬЗОВАТЕЛЬ\n"
+"\n"
+"Параметры:\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+" -d, --lastday ПОСЛ_ДЕНЬ установить последний день смены пароля\n"
+" в ПОСЛ_ДЕНЬ\n"
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -E, --expiredate ДАТА_УСТ установить дату окончания действия\n"
+" учётной записи в ДАТА_УСТ\n"
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+" -h, --help показать данное сообщение и закончить "
+"работу\n"
+
+#, fuzzy
+#| msgid " -g, --group edit group database\n"
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr " -g, --group редактировать базу данных групп\n"
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -I, --inactive НЕАКТИВНОСТЬ установить неактивность пароля после\n"
+" устаревания в значение НЕАКТИВНОСТЬ\n"
+
+msgid " -l, --list show account aging information\n"
+msgstr " -l, --list показать «возраст» учётной записи\n"
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -m, --mindays МИН_ДНЕЙ установить минимальное число дней перед\n"
+" сменой пароля в МИН_ДНЕЙ\n"
+
+#, fuzzy
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -M, --maxdays МАКС_ДНЕЙ установить максимальное число дней перед\n"
+" сменой пароля в МАКС_ДНЕЙ\n"
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+" -R, --root КАТ_CHROOT каталог, в который выполняется chroot\n"
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -W, --warndays ПРЕДУП_ДНЕЙ установить количество дней с выдачей\n"
+" предупреждения в ПРЕДУП_ДНЕЙ\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr ""
+"Введите новое значение или нажмите ENTER для выбора значения по умолчанию"
+
+msgid "Minimum Password Age"
+msgstr "Минимальный срок действия пароля"
+
+msgid "Maximum Password Age"
+msgstr "Максимальный срок действия пароля"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Последний раз пароль был изменён (ГГГГ-ММ-ДД)"
+
+msgid "Password Expiration Warning"
+msgstr "Предупреждать об истечении срока действия пароля за"
+
+msgid "Password Inactive"
+msgstr "Деактивировать учётную запись через"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Дата истечения срока действия учётной записи (ГГГГ-ММ-ДД)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Последний раз пароль был изменён\t\t\t\t: "
+
+msgid "never"
+msgstr "никогда"
+
+msgid "password must be changed"
+msgstr "пароль должен быть изменён"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Срок действия пароля истекает\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Пароль будет деактивирован через\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Срок действия учётной записи истекает\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Минимальное количество дней между сменой пароля\t\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Максимальное количество дней между сменой пароля\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Количество дней с предупреждением перед деактивацией пароля\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: неверная дата «%s»\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: неверное числовое значение параметра «%s»\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: не используйте «l» совместно с другими параметрами\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: доступ запрещён.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: не удалось определить имя пользователя.\n"
+
+#, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: PAM: %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: не удалось заблокировать %s; попробуйте ещё раз позже.\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: не удалось открыть %s\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: ошибка при записи изменений в %s\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: не удалось подготовить новую %s запись «%s»\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: отсутствует файл паролей shadow\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: пользователь «%s» не существует в %s\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Изменение информации о сроках действия для %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: ошибка при изменении полей\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Использование: %s [параметры] [ПОЛЬЗОВАТЕЛЬ]\n"
+"\n"
+"Параметры:\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr " -f, --full-name ПОЛН_ИМЯ смена полного имени пользователя\n"
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr " -h, --home-phone ДОМ_ТЕЛЕФОН смена домашнего тел. пользователя\n"
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+" -o, --other ДРУГАЯ_ИНФ смена другой инф. GECOS о пользователе\n"
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr " -r, --room НОМЕР_КОМНАТЫ смена номера комнаты пользователя\n"
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+" -u, --help показать данное сообщение и закончить "
+"работу\n"
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+" -w, --work-phone РАБОЧИЙ_ТЕЛ смена офисного номера тел. пользователя\n"
+
+msgid "Full Name"
+msgstr "Полное имя"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "Номер комнаты"
+
+msgid "Work Phone"
+msgstr "Рабочий телефон"
+
+msgid "Home Phone"
+msgstr "Домашний телефон"
+
+msgid "Other"
+msgstr "Другое"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Не удалось получить права суперпользователя.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: имя «%s» содержит не ASCII-символы\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: неверное имя «%s»\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s: номер комнаты «%s» содержит не ASCII-символы\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: некорректное значение номера комнаты «%s»\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: некорректное значение номера телефона «%s»\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: некорректное значение номера домашнего телефона «%s»\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: в «%s» содержатся не ASCII-символы\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: в «%s» содержатся недопустимые символы\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: пользователь «%s» не существует\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: невозможно изменить пользователя «%s» в клиенте NIS.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: «%s» является мастером NIS для этого клиента.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Изменение информации о пользователе %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: поля слишком длинные\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Использование: %s [параметры]\n"
+"\n"
+"Параметры:\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr " -c, --crypt-method МЕТОД алгоритм шифрования (один из: %s)\n"
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr " -e, --encrypted пароли передаются зашифрованными\n"
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+" -m, --md5 шифровать видимые пароли с помощью \n"
+" алгоритма MD5\n"
+
+#, fuzzy
+#| msgid ""
+#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
+#| " crypt algorithms\n"
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+" -s, --sha-rounds количество раундов SHA для алгоритмов\n"
+" шифрования SHA*\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: параметр %s разрешено использовать только вместе с параметром %s\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: параметры -c, -e и -m являются взаимоисключающими\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: алгоритм шифрования %s не поддерживается\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: строка %d: слишком длинная строка\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: строка %d: отсутствует новый пароль\n"
+
+#, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: не удалось зашифровать пароль с солью «%s»: %s\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: строка %d: группа «%s» не существует\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: строка %d: не удалось подготовить новую %s запись «%s»\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: обнаружена ошибка, изменения не были сохранены\n"
+
+#, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: (строка %d, пользователь %s) пароль не изменён\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: строка %d: пользователь «%s» не существует\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+" -s, --shell ОБОЛОЧКА новая регистрационная оболочка для учётной\n"
+" записи\n"
+
+msgid "Login Shell"
+msgstr "Командная оболочка"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Вы не можете изменять командную оболочку у «%s».\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Изменение командной оболочки для %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: неверное значение %s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s: %s не является допустимой оболочкой\n"
+
+#, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: предупреждение: %s не существует\n"
+
+#, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: предупреждение: %s не является исполняемым\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+" -c, --check проверить срок действия пароля пользователя\n"
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+" -f, --force принудительно сменить пароль, если срок\n"
+" действия пароля истёк\n"
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: конфликт параметров %s и %s\n"
+
+#, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "%s: неожиданный параметр: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+" -a, --all показать записи faillog для всех "
+"пользователей\n"
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+" -l, --lock-secs СЕК заблокировать учётную запись после "
+"неудачных\n"
+" попытки входа на СЕК секунд\n"
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+" -m, --maximum МАКС установить максимальное количество "
+"неудачных\n"
+" попыток входа равным МАКС\n"
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+" -r, --reset сбросить счётчик неудачных попыток входа\n"
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time ДНЕЙ показать записи faillog за последнее\n"
+" количество ДНЕЙ\n"
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+" -u, --user ПОЛЬЗ/ДИАПАЗОН показать записи faillog или отказы по "
+"счётчикам\n"
+" поддержки и ограничений (если используется\n"
+" с -r, -m или -l) только для указанного\n"
+" ПОЛЬЗОВАТЕЛЯ(ЕЙ)\n"
+
+#, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: не удалось получить запись для UID %lu\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "Уч.запись Неуд. попыток Максимум Последний раз\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr " [осталось %lu]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%ld блокировок]"
+
+#, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s: не удалось сбросить счётчик неудачных попыток для UID %lu\n"
+
+#, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: не удалось установить максимальное число попыток для UID %lu\n"
+
+#, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: не удалось установить время блокировки для UID %lu\n"
+
+#, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "%s: неизвестный пользователь или диапазон: %s\n"
+
+#, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: не удалось получить размер %s: %s\n"
+
+#, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: не удалось записать %s: %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Использование: %s [параметр] ГРУППА\n"
+"\n"
+"Параметры:\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr " -a, --add ПОЛЬЗ добавить ПОЛЬЗОВАТЕЛЯ в ГРУППУ\n"
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr " -d, --delete ПОЛЬЗ удалить ПОЛЬЗОВАТЕЛЯ из ГРУППЫ\n"
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr " -Q, --root КАТ_CHROOT каталог, который выполняется chroot\n"
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr " -r, --remove-password удалить пароль ГРУППЫ\n"
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+" -R, --restrict ограничить доступ в ГРУППУ её членами\n"
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr " -M, --members ПОЛЬЗ,… задать список членов ГРУППЫ\n"
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+" -A, --administrators АДМИН,…\n"
+" задать список администраторов ГРУППЫ\n"
+
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+"За исключением параметров -A и -M, остальные не могут указываться\n"
+"одновременно.\n"
+
+#
+msgid "The options cannot be combined.\n"
+msgstr "Параметры не могут быть указаны одновременно.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: для -A требуется поддержка теневого файла паролей групп\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: группа «%s» не существует в %s\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: ошибка при закрытии только для чтения %s\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Изменение пароля для группы %s\n"
+
+msgid "New Password: "
+msgstr "Новый пароль: "
+
+msgid "Re-enter new password: "
+msgstr "Повторите новый пароль: "
+
+msgid "They don't match; try again"
+msgstr "Пароли не совпадают, попробуйте ещё раз"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: попробуйте позже\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Добавление пользователя %s в группу %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Удаление пользователя %s из группы %s\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: пользователь «%s» не является членом «%s»\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: не tty\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Использование: %s [параметры] ГРУППА\n"
+"\n"
+"Параметры:\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+" -f, --force закончить работу без ошибки, если группа\n"
+" существует и отменить -g, если GID уже\n"
+" используется\n"
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr ""
+" -g, --gid GID для новой группы использовать указанный GID\n"
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+" -K, --key КЛЮЧ=ЗНАЧЕНИЕ заменить значение по умолчанию\n"
+" из /etc/login.defs\n"
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique разрешить создание групп с повторяющимся\n"
+" (не уникальным) GID\n"
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+" -p, --password ПАРОЛЬ использовать этот шифрованный пароль для\n"
+" новой группы\n"
+
+msgid " -r, --system create a system account\n"
+msgstr " -r, --system создавать системную группу\n"
+
+#, fuzzy
+#| msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+" -R, --root КАТ_CHROOT каталог, в который выполняется chroot\n"
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: «%s» не может быть именем группы\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: неверный ID группы «%s»\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: для -К необходимо ИМЯ=ЗНАЧЕНИЕ\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: группа «%s» уже существует\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s: GID «%lu» уже существует\n"
+
+#, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: не удалось настроить службу очистки.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+" -f, --force удалить группу, даже если она является "
+"первичной\n"
+" группой пользователя\n"
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: не удалось удалить запись «%s» из %s\n"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: не удалось удалить первичную группу пользователя «%s»\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: группа «%s» не существует\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: группа «%s» является группой NIS\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s является мастером NIS\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: пользователь «%s» является членом «%s»\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: недостаточно памяти. Не удалось обновить %s.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Использование: %s [параметры] [действие]\n"
+"\n"
+"Параметры:\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+" -g, --group имя_группы использовать имя_группы вместо группы с "
+"именем\n"
+" пользователя (только для суперпользователя)\n"
+
+msgid "\n"
+msgstr "\n"
+
+msgid "Actions:\n"
+msgstr "Действия:\n"
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr " -a, --add пользователь добавить пользователя в группу\n"
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr " -d, --delete пользователь удалить пользователя из группы\n"
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr " -p, --purge удалить всех пользователей из группы\n"
+
+msgid " -l, --list list the members of the group\n"
+msgstr " -l, --list перечислить всех членов группы\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: ваше имя_группы не совпадает с вашим пользовательским именем\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s: только суперпользователь может использовать параметр -g/--group\n"
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr " -g, --gid GID изменить ID группы на GID\n"
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr " -n, --new-name НОВАЯ_ГРУППА изменить имя на НОВУЮ_ГРУППУ\n"
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique разрешить повторяющиеся (не уникальные) GID\n"
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+" -p, --password ПАРОЛЬ изменить пароль на заданный (шифрованный)\n"
+" ПАРОЛЬ\n"
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: неверное имя группы «%s»\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: группа %s является группой NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: неизвестный пользователь %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Использование: %s [параметры] [файл_group [файл_gshadow]]\n"
+"\n"
+"Параметры:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Использование: %s [параметры] [группа]\n"
+"\n"
+"Параметры:\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+" -r, --read-only показывать ошибки и предупреждения,\n"
+" но не изменять файлы\n"
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr " -s, --sort сортировать записи по UID\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s и -r не могут использоваться одновременно\n"
+
+msgid "invalid group file entry"
+msgstr "неверная запись в файле групп"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "удалить строку «%s»? "
+
+msgid "duplicate group entry"
+msgstr "повторяющаяся запись в файле групп"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "неверное имя группы «%s»\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "неверный ID группы «%lu»\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "группа %s: пользователь %s не существует\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "удалить члена группы «%s»? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "отсутствует соответствующая группа в файле %s\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "добавить группу «%s» в %s ? "
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr "для группы %s есть запись в %s, но её поле пароля в %s не равно «x»\n"
+
+msgid "invalid shadow group file entry"
+msgstr "неверная запись в теневом файле групп"
+
+msgid "duplicate shadow group entry"
+msgstr "повторяющаяся запись в теневом файле групп"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "теневая группа %s: административный пользователь %s не существует\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "удалить административного члена «%s»? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "теневая группа %s: пользователь %s не существует\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: файлы были изменены\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: изменения не внесены\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: не удалось удалить %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Использование: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Использование: id\n"
+
+msgid " groups="
+msgstr " группы="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+" -b, --before ДНЕЙ показать записи lastlog за последние ДНЕЙ "
+"дней\n"
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+" -C, --clear очистить запись lastlog пользователя\n"
+" (только вместе с -u)\n"
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+" -S, --set поставить в записи lastlog текущее время\n"
+" (только вместе с -u)\n"
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time ДНЕЙ показать записи lastlog за последние ДНЕЙ "
+"дней\n"
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+" -u, --user ИМЯ показать запись lastlog для учётной записи "
+"ИМЯ\n"
+
+msgid "Username Port From Latest"
+msgstr "Пользователь Порт С Последний раз"
+
+msgid "Username Port Latest"
+msgstr "Пользователь Порт Последний раз"
+
+msgid "**Never logged in**"
+msgstr "**Никогда не входил в систему**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s: не удалось обновить запись для UID %lu\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s: не удалось обновить файл lastlog\n"
+
+#, c-format
+msgid "%s: Option -C cannot be used together with option -S\n"
+msgstr "%s: параметр -C нельзя использовать вместе с параметром -S\n"
+
+#, c-format
+msgid "%s: Options -C and -S require option -u to specify the user\n"
+msgstr ""
+"%s: для параметров -C и -S требуется указать пользователя в параметре -u\n"
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Использование: %s [-p] [имя пользователя]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h узел] [-f имя пользователя]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r узел\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr "ошибка настройки: не удалось разобрать значение %s: «%d»"
+
+msgid "Invalid login time"
+msgstr "Вход в систему сейчас запрещён"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Система закрыта для проведения технического обслуживания"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Отключение не выполнено — вход в систему для суперпользователя разрешён.]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr "%s: невозможно выполнить без прав суперпользователя\n"
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Нет записи в utmp. Вы должны запускать «login» из самого первого уровня «sh»"
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Время выполнения входа в систему истекло (%u секунд).\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: ошибка PAM, аварийное завершение работы: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s имя пользователя: "
+
+msgid "login: "
+msgstr "имя пользователя: "
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Превышено максимальное число попыток (%u)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: аварийное завершение работы по запросу PAM\n"
+
+msgid "Login incorrect"
+msgstr "Неверное имя пользователя"
+
+#, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "Невозможно найти пользователя (%s)\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"Имя пользователя %s: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: ошибка при вызове fork: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "Не удалось установить флаг TIOCSCTTY на %s"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Предупреждение: вход в систему снова возможен."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Последний вход в систему: %s на %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Последний вход в систему: %.19s на %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " с %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"время входа в систему истекло\n"
+"\n"
+
+#
+msgid "Usage: logoutd\n"
+msgstr "Использование: logoutd\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, c-format
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: не удалось удалить %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: не удалось удалить %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to unlock %s\n"
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: не удалось разблокировать %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to find tcb directory for %s\n"
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: не удалось найти каталог tcb для %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Failed to create tcb directory for %s\n"
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: не удалось создать tcb-каталог для %s\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Использование: newgrp [-] [группа]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Использование: sg группа [[-c] команда]\n"
+
+#, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: не удалось зашифровать пароль с предыдущей солью: %s\n"
+
+msgid "Invalid password.\n"
+msgstr "Неправильный пароль.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: ошибка при вызове fork: %s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: GID «%lu» не существует\n"
+
+msgid "too many groups\n"
+msgstr "слишком много групп\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+#, fuzzy
+#| msgid " -q, --quiet quiet mode\n"
+msgid " -b, --badnames allow bad names\n"
+msgstr ""
+" -q, --quiet сократить количество выводимых сообщений\n"
+
+msgid " -r, --system create system accounts\n"
+msgstr " -r, --system создать системные учётные записи\n"
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr ""
+"%s: группа «%s» является теневой группой, но не существует в /etc/group\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: неверный пользовательский ID «%s»\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: неверное имя пользователя «%s»\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: строка %d: некорректная строка\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: не удалось обновить запись для пользователя %s (его нет в базе данных "
+"passwd)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: строка %d: не удалось создать пользователя\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: строка %d: не удалось создать группу\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: строка %d: пользователь «%s» не существует в %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: строка %d: не удалось обновить пароль\n"
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: строка %d: вызов mkdir %s завершился неудачно: %s\n"
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: строка %d: вызов chown %s завершился неудачно: %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: строка %d: не удалось обновить запись\n"
+
+#, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: не удалось подготовить новую %s запись\n"
+
+#, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: не удалось найти подчинённый диапазон пользователей\n"
+
+#, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: не удалось найти подчинённый диапазон групп\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+" -a, --all показать состояние паролей всех учётных\n"
+" записей\n"
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+" -d, --delete удалить пароль заданной учётной записи\n"
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+" -e, --expire просрочить пароль заданной учётной записи\n"
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+" -k, --keep-tokens изменять пароль только с истёкшим сроком\n"
+" действия\n"
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -i, --inactive НЕАКТИВНОСТЬ установить неактивность пароля после\n"
+" истечения срока в значение НЕАКТИВНОСТЬ\n"
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr ""
+" -l, --lock заблокировать заданную учётную запись\n"
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -n, --mindays МИН_ДНЕЙ установить минимальное число дней перед\n"
+" сменой пароля в МИН_ДНЕЙ\n"
+
+msgid " -q, --quiet quiet mode\n"
+msgstr ""
+" -q, --quiet сократить количество выводимых сообщений\n"
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr " -r, --repository РЕПОЗИТОРИЙ изменить пароль в РЕПОЗИТОРИИ\n"
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+" -S, --status показать состояние пароля заданной учётной\n"
+" записи\n"
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+" -u, --unlock разблокировать заданную учётную запись\n"
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -w, --warndays ПРЕДУП_ДНЕЙ установить количество дней с\n"
+" выдачей предупреждения в ПРЕДУП_ДНЕЙ\n"
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -x, --maxdays МАКС_ДНЕЙ установить максимальное число дней перед\n"
+" сменой пароля в МАКС_ДНЕЙ\n"
+
+msgid "Old password: "
+msgstr "Старый пароль: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Введите новый пароль (минимальная длина %d символов)\n"
+"Используйте комбинацию из символов в верхнем и нижнем регистре и цифры.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Введите новый пароль (минимальная длина %d, максимальная длина %d символов)\n"
+"Используйте комбинацию из символов в верхнем и нижнем регистре и цифры.\n"
+
+msgid "New password: "
+msgstr "Новый пароль: "
+
+msgid "Try again."
+msgstr "Попробуйте ещё раз."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Предупреждение: слишком простой пароль (чтобы всё равно использовать этот "
+"пароль, введите его ещё раз)."
+
+msgid "They don't match; try again.\n"
+msgstr "Пароли не совпадают, попробуйте ещё раз.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Пароль пользователя %s не может быть изменён.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Пароль для %s пока не может быть изменён.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: разблокировка пароля приведёт к появлению беспарольной учётной\n"
+"записи. Вы должны задать пароль с помощью usermod -p для разблокировки "
+"учётной записи пользователя.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: хранилище %s не поддерживается\n"
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not authorized to change the password of %s\n"
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr "%s: у %s нет прав изменять пароль %s\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: вы не можете посмотреть или изменить пароль %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Изменение пароля для %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Пароль для %s не был изменён.\n"
+
+#, c-format
+msgid "%s: password changed.\n"
+msgstr "%s: пароль изменён.\n"
+
+#, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "%s: информация об истечении срока действия пароля изменена.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Использование: %s [параметры] [passwd]\n"
+"\n"
+"Параметры:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Использование: %s [параметры] [passwd [shadow]]\n"
+"\n"
+"Параметры:\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr ""
+" -q, --quiet показывать только сообщения об ошибках\n"
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+"%s: нельзя указать альтернативный файл shadow, если включён режим USE_TCB.\n"
+
+msgid "invalid password file entry"
+msgstr "неверная запись в файле паролей"
+
+msgid "duplicate password entry"
+msgstr "повторяющаяся запись в файле паролей"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "неверное имя пользователя «%s»\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "неверный пользовательский ID «%lu»\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "пользователь «%s»: группа %lu не существует\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "пользователь «%s: каталог «%s» не существует\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "пользователь «%s»: программа «%s» не существует\n"
+
+#, c-format
+msgid "no tcb directory for %s\n"
+msgstr "нет каталога tcb для %s\n"
+
+#, c-format
+msgid "create tcb directory for %s?"
+msgstr "создать каталог tcb для %s?"
+
+#, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "не удалось создать каталог tcb для %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: не удалось заблокировать %s.\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "отсутствует соответствующая запись %s в файле паролей\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "добавить пользователя «%s» в %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"для пользователя %s есть запись в %s, но её поле пароля в %s не равно «x»\n"
+
+msgid "invalid shadow password file entry"
+msgstr "неверная запись в теневом файле паролей"
+
+msgid "duplicate shadow password entry"
+msgstr "повторяющаяся запись в теневом файле паролей"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "пользователь %s: время последнего изменения пароля в будущем\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: не удалось отсортировать записи в %s\n"
+
+#, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: с включённым режимом tcb работа невозможна\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: не удалось изменить права %s на 0600\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Доступ к su для этой учётной записи ЗАПРЕЩЁН.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Проверка подлинности по паролю пропущена.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Введите ваш СОБСТВЕННЫЙ пароль для аутентификации.\n"
+
+#, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: невозможно выполнить fork пользовательской оболочки\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr "%s: неисправность в сигналах\n"
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr "%s: неисправность в маскировке сигналов\n"
+
+msgid "Session terminated, terminating shell..."
+msgstr "Сеанс завершён, выполняется завершение оболочки…"
+
+#, c-format
+msgid " ...killed.\n"
+msgstr " … завершён.\n"
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr " … ожидает завершения потомка.\n"
+
+msgid " ...terminated.\n"
+msgstr " … завершён.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: su [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
+#| " -h, --help display this help message and exit\n"
+#| " -, -l, --login make the shell a login shell\n"
+#| " -m, -p,\n"
+#| " --preserve-environment do not reset environment variables, and\n"
+#| " keep the same shell\n"
+#| " -s, --shell SHELL use SHELL instead of the default in "
+#| "passwd\n"
+#| "\n"
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"Использование: su [параметры] [ПОЛЬЗОВАТЕЛЬ]\n"
+"\n"
+"Параметры:\n"
+" -c, --command КОМАНДА передать КОМАНДУ вызываемой оболочке\n"
+" -h, --help показать данное сообщение и закончить "
+"работу\n"
+" -, -l, --login запускать оболочку как регистрационную\n"
+" -m, -p,\n"
+" --preserve-environment не сбрасывать переменные окружения и\n"
+" сохранить запустившую оболочку\n"
+" -s, --shell ОБОЛОЧКА использовать ОБОЛОЧКУ\n"
+" вместо значения из файла passwd\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Игнорировано)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "У вас нет прав на выполнение su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Введите ваш собственный пароль)"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: не удалось пройти проверку подлинности\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s: у вас нет прав выполнять su в данный момент\n"
+
+#, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "Отсутствует passwd-запись для пользователя «%s»\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: должен запускаться из терминала\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: ошибка %d\n"
+
+#, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: не удалось сбросить управляющий терминал\n"
+
+#, c-format
+msgid "Cannot execute %s\n"
+msgstr "Не удалось выполнить %s\n"
+
+msgid "No password file"
+msgstr "Отсутствует файл паролей"
+
+msgid "TIOCSCTTY failed"
+msgstr "Не удалось установить флаг TIOCSCTTY"
+
+msgid "No password entry for 'root'"
+msgstr "Отсутствует запись для «root»"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Нажмите control-d для продолжения загрузки в обычном режиме,\n"
+"(или введите пароль суперпользователя для обслуживания системы):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Вход в режим системного обслуживания"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr "%s: каталог %s создан, но не может быть удалён\n"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr "%s: настройка %s в %s будет проигнорирована\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: не удалось создать новый файл значений по умолчанию\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: не удалось создать новый файл значений по умолчанию\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: не удалось открыть новый файл значений по умолчанию\n"
+
+#, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: слишком длинная строка в %s: %s…"
+
+#, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: не удалось создать резервную копию файла (%s): %s\n"
+
+#, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: rename: %s: %s\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: группа «%s» является группой NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: указано слишком много групп (максимум %d).\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Использование: %s [параметры] ПОЛЬЗОВАТЕЛЬ\n"
+" %s -D\n"
+" %s -D [параметры]\n"
+"\n"
+"Параметры:\n"
+
+#, fuzzy
+#| msgid " -s, --shadow edit shadow or gshadow database\n"
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+" -s, --shadow редактировать базу данных shadow или "
+"gshadow\n"
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+" -b, --base-dir БАЗ_КАТ базовый каталог для домашнего каталога "
+"новой\n"
+" учётной записи\n"
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr " -c, --comment КОММЕНТАРИЙ поле GECOS новой учётной записи\n"
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr ""
+" -d, --home-dir ДОМ_КАТ домашний каталог новой учётной записи\n"
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+" -D, --defaults показать или изменить настройки\n"
+" по умолчанию для useradd\n"
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+" -e, --expiredate ДАТА_УСТ дата устаревания новой учётной записи\n"
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+" -f, --inactive НЕАКТИВНОСТЬ период неактивности пароля новой учётной "
+"записи\n"
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+" -g, --gid ГРУППА имя или ID первичной группы новой\n"
+" учётной записи\n"
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+" -G, --groups ГРУППЫ список дополнительных групп новой\n"
+" учётной записи\n"
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+" -k, --skel КАБ_ШАБ использовать альтернативный каталог с "
+"шаблонами\n"
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+" -l, --no-log-init не добавлять пользователя в базы данных "
+"lastlog и\n"
+" faillog\n"
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+" -m, --create-home создать домашний каталог пользователя\n"
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+" -M, --no-create-home не создавать домашний каталог пользователя\n"
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+" -N, --no-user-group не создавать группу с тем же именем что и у\n"
+" пользователя\n"
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique разрешить создание пользователей с\n"
+" повторяющимися (не уникальными) UID\n"
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+" -p, --password ПАРОЛЬ зашифрованный пароль новой учётной записи\n"
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr ""
+" -s, --shell ОБОЛОЧКА регистрационная оболочка новой\n"
+" учётной записи\n"
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr ""
+" -u, --uid UID пользовательский ID новой учётной записи\n"
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+" -U, --user-group создать группу с тем же именем что и у\n"
+" пользователя\n"
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+" -Z, --selinux-user SEUSER использовать указанного SEUSER для\n"
+" пользовательского сопоставления SELinux\n"
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: неверный базовый каталог «%s»\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: неверный комментарий «%s»\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: неверный домашний каталог «%s»\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: для параметра -e необходима поддержка теневых паролей\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: для параметра -f необходима поддержка теневых паролей\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: неверное поле «%s»\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: неверная оболочка «%s»\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Warning: %s is not executable\n"
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: предупреждение: %s не является исполняемым\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Option -C cannot be used together with option -S\n"
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s: параметр -C нельзя использовать вместе с параметром -S\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr "%s: для -Z в ядре требуется включить SELinux\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr "%s: не удалось сбросить запись в faillog для UID %lu: %s\n"
+
+#, c-format
+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 reset the faillog entry of UID %lu: %s\n"
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s: не удалось сбросить запись в faillog для UID %lu: %s\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: не удалось подготовить новую %s запись\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error changing fields\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: ошибка при изменении полей\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: не удалось создать каталог %s\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s home directory (%s) not found\n"
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: домашний каталог пользователя %s (%s) не найден\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to allocate memory: %s\n"
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "%s: не удалось выделить память: %s\n"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: не удалось создать каталог %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: строка %d: вызов chown %s завершился неудачно: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: строка %d: вызов chown %s завершился неудачно: %s\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "Создание почтового ящика"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Не найдена группа «mail». Создаётся пользовательский почтовый ящик с правами "
+"0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Установка прав на файл почтового ящика"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: пользователь «%s» уже существует\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: группа %s существует — для добавления в неё этого пользователя, "
+"используйте -g.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: не удалось создать пользователя\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %lu не является уникальным\n"
+
+#, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: не удалось создать tcb-каталог для %s\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: не удалось создать группу\n"
+
+#, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: не удалось создать подчинённые пользовательские ID\n"
+
+#, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: не удалось создать подчинённые групповые ID\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: предупреждение: домашний каталог уже существует.\n"
+"Никакие файлы из каталога шаблонов копироваться не будут.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+"%s: предупреждение: не удалось сопоставить имя пользователя %s с "
+"пользователем SELinux %s.\n"
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+" -f, --force удалять файлы, даже если они\n"
+" не принадлежат пользователю\n"
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+" -r, --remove удалить домашний каталог и почтовый ящик\n"
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+" -Z, --selinux-user удалить все пользовательские сопоставления\n"
+" SELinux для пользователя\n"
+
+#, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr ""
+"%s: группа %s не удалена, так как это не первичная группа пользователя %s.\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr "%s: группа %s не удалена, так как в ней есть другие члены.\n"
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: группа %s является первичной для другого пользователя и не может быть "
+"удалена.\n"
+
+#, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "%s: не удалось удалить запись %lu из %s\n"
+
+#, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: почтовый ящик %s (%s) не найден\n"
+
+#, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: предупреждение: не удалось удалить %s: %s\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s не принадлежит %s, удаление не выполнено\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr "%s: не удалось выделить память, элемент tcb для %s не удалён.\n"
+
+#, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: не удалось снизить уровень привилегий: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: не удалось удалить содержимое %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: не удалось удалить файлы tcb для %s: %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: пользователь %s является пользователем NIS\n"
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: домашний каталог пользователя %s (%s) не найден\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: каталог %s не удалён (является домашним каталогом пользователя %s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: ошибка удаления каталога %s\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: ошибка удаления каталога %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+"%s: предупреждение: не удалось удалить пользовательское сопоставление "
+"SELinux в имя пользователя %s.\n"
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr " -c, --comment КОММЕНТАРИЙ новое значение поля GECOS\n"
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+" -d, --home ДОМ_КАТ новый домашний каталог учётной записи\n"
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -e, --expiredate ДАТА_УСТ установить дату окончания действия\n"
+" учётной записи в ДАТА_УСТ\n"
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -f, --inactive НЕАКТИВНОСТЬ установить период неактивности пароля после\n"
+" устаревания учётной записи равным "
+"НЕАКТИВНОСТЬ\n"
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+" -g, --gid ГРУППА принудительно назначить первичную ГРУППУ\n"
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr " -G, --groups ГРУППЫ список дополнительных ГРУПП\n"
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+" -a, --append добавить пользователя в дополнительные\n"
+" ГРУППЫ, указанные в параметре -G не удаляя\n"
+" пользователя из других групп\n"
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr " -l, --login НОВОЕ_ИМЯ новое значение имени учётной записи\n"
+
+msgid " -L, --lock lock the user account\n"
+msgstr " -L, --lock заблокировать учётную запись\n"
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+" -m, --move-home переместить содержимое домашнего каталога в\n"
+" новое место (использовать только вместе с -"
+"d)\n"
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique разрешить создание учётной записи с уже\n"
+" имеющимся (не уникальным) UID\n"
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+" -p, --password ПАРОЛЬ задать новый шифрованный пароль для\n"
+" учётной записи\n"
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr " -u, --uid UID новый UID для учётной записи\n"
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr " -U, --unlock разблокировать учётную запись\n"
+
+msgid " -v, --add-subuids FIRST-LAST add range of subordinate uids\n"
+msgstr " -v, --add-subuids ПЕРВ-ПОСЛ добавить диапазон подчинённых uid\n"
+
+msgid " -V, --del-subuids FIRST-LAST remove range of subordinate uids\n"
+msgstr " -V, --del-subuids ПЕРВ-ПОСЛ удалить диапазон подчинённых uid\n"
+
+msgid " -w, --add-subgids FIRST-LAST add range of subordinate gids\n"
+msgstr " -w, --add-subgids ПЕРВ-ПОСЛ добавить диапазон подчинённых gid\n"
+
+msgid " -W, --del-subgids FIRST-LAST remove range of subordinate gids\n"
+msgstr " -W, --del-subgids ПЕРВ-ПОСЛ удалить диапазон подчинённых gid\n"
+
+msgid ""
+" -Z, --selinux-user SEUSER new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+" -Z, --selinux-user SEUSER новое пользовательское сопоставление\n"
+" SELinux для учётной записи\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: разблокировка пароля пользователя приведёт к появлению беспарольной\n"
+"учётной записи. Вы должны задать пароль с помощью usermod -p для "
+"разблокировки пароля пользователя.\n"
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: пользователь «%s» уже существует в %s\n"
+
+#, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: некорректный диапазон подчинённых uid «%s»\n"
+
+#, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: некорректный диапазон подчинённых gid «%s»\n"
+
+#, c-format
+msgid "%s: no options\n"
+msgstr "%s: не указаны параметры\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: параметры -L, -p и -U являются взаимоисключающими\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr ""
+"%s: для параметров -e и -f требуется поддержка теневых файлов паролей\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: UID «%lu» уже существует\n"
+
+#, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr "%s: %s не существует, нельзя указывать флаги %s или %s\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: каталог %s существует\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+"%s: Предыдущий домашний каталог (%s) не являлся домашним каталогом. Он не "
+"удалён и домашний каталог не создан.\n"
+
+#, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: не удалось изменить владельца домашнего каталога"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: предупреждение: не удалось полностью удалить старый домашний каталог %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: не удалось переименовать каталог %s в %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: не удалось скопировать запись lastlog о пользователе %lu в пользователя "
+"%lu: %s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: не удалось скопировать запись faillog о пользователе %lu в пользователя "
+"%lu: %s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: предупреждение: %s не принадлежит %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "не удалось сменить владельца почтового ящика"
+
+msgid "failed to rename mailbox"
+msgstr "не удалось переименовать почтовый ящик"
+
+#, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s: не удалось удалить диапазон uid %lu-%lu из «%s»\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to add uid range %lu-%lu from '%s'\n"
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s: не удалось добавить диапазон uid %lu-%lu в «%s»\n"
+
+#, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s: не удалось удалить диапазон gid %lu-%lu из «%s»\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to add gid range %lu-%lu from '%s'\n"
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s: не удалось добавить диапазон gid %lu-%lu в «%s»\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Вы изменили %s.\n"
+"Для обеспечения согласованности вам может потребоваться изменить %s.\n"
+"Для этого используйте команду «%s».\n"
+
+msgid " -g, --group edit group database\n"
+msgstr " -g, --group редактировать базу данных групп\n"
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr " -p, --passwd редактировать базу данных паролей\n"
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+" -s, --shadow редактировать базу данных shadow или "
+"gshadow\n"
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+" -u, --user редактировать пользовательский файл\n"
+" shadow структуры tcb\n"
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: не удалось удалить %s\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: %s не был изменён\n"
+
+msgid "failed to create scratch directory"
+msgstr "не удалось создать черновой каталог"
+
+msgid "failed to drop privileges"
+msgstr "не удалось снизить уровень привилегий"
+
+#
+msgid "Couldn't get file context"
+msgstr "Не удалось получить файловый контекст"
+
+msgid "setfscreatecon () failed"
+msgstr "Вызов setfscreatecon () завершился неудачно"
+
+msgid "failed to gain privileges"
+msgstr "не удалось повысить уровень привилегий"
+
+msgid "Couldn't lock file"
+msgstr "Не удалось заблокировать файл"
+
+msgid "Couldn't make backup"
+msgstr "Не удалось создать резервную копию"
+
+#, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s: %s: %s\n"
+
+#, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr "%s: %s завершился с кодом выхода %d\n"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr "%s: %s убит по сигналу %d\n"
+
+msgid "failed to open scratch file"
+msgstr "не удалось открыть черновой файл"
+
+msgid "failed to unlink scratch file"
+msgstr "не удалось удалить черновой файл"
+
+msgid "failed to stat edited file"
+msgstr "не удалось получить атрибуты редактируемого файла"
+
+msgid "failed to allocate memory"
+msgstr "не удалось выделить память"
+
+msgid "failed to create backup file"
+msgstr "не удалось создать резервную копию файла"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: не удалось восстановить %s: %s (ваши изменения в %s)\n"
+
+#, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: не удалось найти каталог tcb для %s\n"
+
+#~ msgid " -c, --crypt-method the crypt method (one of %s)\n"
+#~ msgstr " -c, --crypt-method алгоритм шифрования (один из: %s)\n"
+
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr ""
+#~ "Использование: vipw [параметры]\n"
+#~ "\n"
+#~ "Параметры:\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "не удалось выполнить malloc(%d)\n"
+
+#
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Использование: chage [параметры] [ПОЛЬЗОВАТЕЛЬ]\n"
+#~ "\n"
+#~ "Параметры:\n"
+#~ " -d, --lastday LAST_DAY установить последний день смены пароля\n"
+#~ " в LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE установить дату окончания действия\n"
+#~ " учётной записи в EXPIRE_DATE\n"
+#~ " -h, --help показать это сообщение и закончить "
+#~ "работу\n"
+#~ " -I, --inactive INACTIVE установить неактивность пароля после\n"
+#~ " устаревания в значение INACTIVE\n"
+#~ " -l, --list показать «возраст» учётной записи\n"
+#~ " -m, --mindays MIN_DAYS установить минимальное число дней перед\n"
+#~ " сменой пароля в MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS установить максимальное число дней перед\n"
+#~ " сменой пароля в MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS установить количество дней с выдачей\n"
+#~ " предупреждения в WARN_DAYS\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: проверка подлинности PAM завершилась неудачно\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "Использование: %s [-f полное имя] [-r номер комнаты] [-w рабочий "
+#~ "телефон]\n"
+#~ "\t[-h домашний телефон] [-o другое] [пользователь]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr ""
+#~ "Использование: %s [-f полное имя] [-r номер комнаты] [-w рабочий телефон] "
+#~ "[-h домашний телефон]\n"
+
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Использование: %s [параметры]\n"
+#~ "\n"
+#~ "Параметры:\n"
+#~ " -c, --crypt-method алгоритм шифрования (один из %s)\n"
+#~ " -e, --encrypted вводится уже шифрованный пароль\n"
+#~ " -h, --help показать это сообщение и завершить работу "
+#~ "программы\n"
+#~ " -m, --md5 использовать шифрование MD5 вместо DES, если "
+#~ "пароль\n"
+#~ " вводится не шифрованным\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Использование: chsh [параметры] [ПОЛЬЗОВАТЕЛЬ]\n"
+#~ "\n"
+#~ "Параметры:\n"
+#~ " -h, --help показать данное сообщение и закончить работу\n"
+#~ " -s, --shell SHELL новая регистрационная оболочка для учётной "
+#~ "записи\n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "Использование: expiry {-f|-c}\n"
+
+#~ msgid "faillog: Failed to get the entry for UID %lu\n"
+#~ msgstr "faillog: не удалось получить запись для UID %lu\n"
+
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "faillog: не удалось открыть %s: %s\n"
+
+#~ msgid "faillog: Cannot get the size of %s: %s\n"
+#~ msgstr "faillog: не удалось получить размер %s: %s\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "Использование: groupdel группа\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "Использование: %s [-r] [-s] [файл_group [файл_gshadow]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "Использование: %s [-r] [-s] [файл_group]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: -s и -r не могут использоваться одновременно\n"
+
+#
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "Использование: grpconv\n"
+
+#
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "Использование: grpunconv\n"
+
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Использование: lastlog [параметры]\n"
+#~ "\n"
+#~ "Параметры:\n"
+#~ " -b, --before ДНЕЙ показать записи lastlog за последние ДНЕЙ дней\n"
+#~ " -h, --help показать это сообщение и завершить работу "
+#~ "программы\n"
+#~ " -t, --time ДНЕЙ показать записи lastlog за последние ДНЕЙ дней\n"
+#~ " -u, --user ИМЯ показать запись lastlog для учётной записи ИМЯ\n"
+#~ "\n"
+
+#
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Использование: passwd [параметры] [ПОЛЬЗОВАТЕЛЬ]\n"
+#~ "\n"
+#~ "Параметры:\n"
+#~ " -a, --all показать состояние паролей всех учётных\n"
+#~ " записей\n"
+#~ " -d, --delete удалить пароль заданной учётной записи\n"
+#~ " -e, --expire просрочить пароль заданной учётной "
+#~ "записи\n"
+#~ " -h, --help показать это сообщение и завершить "
+#~ "работу\n"
+#~ " программы\n"
+#~ " -k, --keep-tokens изменять пароль только с истёкшим сроком\n"
+#~ " действия\n"
+#~ " -i, --inactive INACTIVE установить неактивность пароля после\n"
+#~ " истечения срока в значение INACTIVE\n"
+#~ " -l, --lock заблокировать заданную учётную запись\n"
+#~ " -n, --mindays MIN_DAYS установить минимальное число дней перед\n"
+#~ " сменой пароля в MIN_DAYS\n"
+#~ " -q, --quiet не показывать сообщений\n"
+#~ " -r, --repository REPOSITORY изменить пароль в репозитории REPOSITORY\n"
+#~ " -S, --status показать состояние пароля заданной "
+#~ "учётной\n"
+#~ " записи\n"
+#~ " -u, --unlock разблокировать заданную учётную запись\n"
+#~ " -w, --warndays WARN_DAYS установить количество дней с\n"
+#~ " выдачей предупреждения в WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS установить максимальное число дней перед\n"
+#~ " сменой пароля в MAX_DAYS\n"
+#~ "\n"
+
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr "Использование: %s [-q] [-r] [passwd]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr "Использование: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "Использование: pwconv\n"
+
+#
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "Использование: pwunconv\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "Неизвестный id: %s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "Отсутствует оболочка\n"
+
+#~ msgid ""
+#~ "Usage: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force removal of files,\n"
+#~ " even if not owned by user\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -r, --remove remove home directory and mail spool\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Использование: userdel [параметры] ПОЛЬЗОВАТЕЛЬ\n"
+#~ "\n"
+#~ "Параметры:\n"
+#~ " -f, --force удалять файлы, даже если они\n"
+#~ " не принадлежат пользователю\n"
+#~ " -h, --help показать данное сообщение и закончить "
+#~ "работу\n"
+#~ " -r, --remove удалить домашний каталог и почтовый ящик\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Использование: usermod [параметры] ПОЛЬЗОВАТЕЛЬ\n"
+#~ "\n"
+#~ "Параметры:\n"
+#~ " -c, --comment КОММЕНТАРИЙ новое значение поля GECOS\n"
+#~ " -d, --home ДОМ_КАТ новый домашний каталог учётной записи\n"
+#~ " -e, --expiredate ДАТА_УСТ установить дату окончания действия\n"
+#~ " учётной записи в ДАТА_УСТ\n"
+#~ " -f, --inactive НЕАКТИВНОСТЬ установить период неактивности пароля "
+#~ "после\n"
+#~ " устаревания учётной записи равным "
+#~ "НЕАКТИВНОСТЬ\n"
+#~ " -g, --gid ГРУППА принудительно назначить первичную ГРУППУ\n"
+#~ " -G, --groups ГРУППЫ список дополнительных ГРУПП\n"
+#~ " -a, --append добавить пользователя в дополнительные\n"
+#~ " ГРУППЫ, указанные в параметре -G не "
+#~ "удаляя\n"
+#~ " пользователя из других групп\n"
+#~ " -h, --help показать данное сообщение и закончить "
+#~ "работу\n"
+#~ " -l, --login НОВОЕ_ИМЯ новое значение имени учётной записи\n"
+#~ " -L, --lock заблокировать учётную запись\n"
+#~ " -m, --move-home переместить содержимое домашнего каталога "
+#~ "в\n"
+#~ " новое место (использовать только вместе с "
+#~ "-d)\n"
+#~ " -o, --non-unique разрешить создание учётной записи с уже\n"
+#~ " имеющимся (не уникальным) UID\n"
+#~ " -p, --password ПАРОЛЬ задать новый шифрованный пароль для\n"
+#~ " учётной записи\n"
+#~ " -s, --shell ОБОЛОЧКА задать новую оболочку для\n"
+#~ " учётной записи\n"
+#~ " -u, --uid UID новый UID для учётной записи\n"
+#~ " -U, --unlock разблокировать учётную запись\n"
+#~ "%s\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s: не заданы параметры\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: vipw [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -g, --group edit group database\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -p, --passwd edit passwd database\n"
+#~| " -q, --quiet quiet mode\n"
+#~| " -s, --shadow edit shadow or gshadow database\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group edit group database\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -p, --passwd edit passwd database\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow edit shadow or gshadow database\n"
+#~ " -u, --user which user's tcb shadow file to edit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Использование: vipw [параметры]\n"
+#~ "\n"
+#~ "Параметры:\n"
+#~ " -g, --group редактировать базу данных групп\n"
+#~ " -h, --help показать данное сообщение и закончить "
+#~ "работу\n"
+#~ " -p, --passwd редактировать базу данных паролей\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow редактировать базу данных теневых\n"
+#~ " паролей пользователей или групп\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: %s [option] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --add USER add USER to GROUP\n"
+#~ " -d, --delete USER remove USER from GROUP\n"
+#~ " -r, --remove-password remove the GROUP's password\n"
+#~ " -R, --restrict restrict access to GROUP to its members\n"
+#~ " -M, --members USER,... set the list of members of GROUP\n"
+#~ "%s\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Использование: %s [параметр] ГРУППА\n"
+#~ "\n"
+#~ "Параметры:\n"
+#~ " -a, --add ПОЛЬЗОВАТЕЛЬ добавить ПОЛЬЗОВАТЕЛЯ в ГРУППУ\n"
+#~ " -d, --delete ПОЛЬЗОВАТЕЛЬ удалить ПОЛЬЗОВАТЕЛЯ из ГРУППЫ\n"
+#~ " -r, --remove-password удалить пароль ГРУППЫ\n"
+#~ " -R, --restrict ограничить доступ к ГРУППЕ её членам\n"
+#~ " -M, --members ПОЛЬЗОВАТЕЛЬ,... задать список членов ГРУППЫ\n"
+#~ "%s\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmems [options] [action]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group groupname change groupname instead of the user's "
+#~ "group\n"
+#~ " (root only)\n"
+#~ "\n"
+#~ "Actions:\n"
+#~ " -a, --add username add username to the members of the group\n"
+#~ " -d, --delete username remove username from the members of the "
+#~ "group\n"
+#~ " -p, --purge purge all members from the group\n"
+#~ " -l, --list list the members of the group\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Использование: groupmems [параметры] [действие]\n"
+#~ "\n"
+#~ "Параметры:\n"
+#~ " -g, --group имя_группы изменить имя_группы вместо "
+#~ "пользовательской\n"
+#~ " группы (только для root)\n"
+#~ "\n"
+#~ "Действия:\n"
+#~ " -a, --add имя_польз добавить имя_польз в члены группы\n"
+#~ " -d, --delete имя_польз удалить имя_польз из членов группы\n"
+#~ " -p, --purge удалить всех членов из группы\n"
+#~ " -l, --list показать всех членов группы\n"
+#~ "\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s: не удалось создать %s\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s: не удалось сменить владельца %s\n"
+
+#
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all display faillog records for all users\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -l, --lock-time SEC after failed login lock account to SEC "
+#~ "seconds\n"
+#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
+#~ " -r, --reset reset the counters of login failures\n"
+#~ " -t, --time DAYS display faillog records more recent than "
+#~ "DAYS\n"
+#~ " -u, --user LOGIN display faillog record or maintains "
+#~ "failure\n"
+#~ " counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ " options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Использование: faillog [параметры]\n"
+#~ "\n"
+#~ "Параметры:\n"
+#~ " -a, --all показать записи faillog обо всех пользователях\n"
+#~ " -h, --help показать это сообщение и завершить работу "
+#~ "программы\n"
+#~ " -l, --lock-time СЕК при неудачной попытке входа блокировать\n"
+#~ " учётную запись на СЕК секунд\n"
+#~ " -m, --maximum МАКС установить максимальное число неудачных попыток\n"
+#~ " входа равным МАКС\n"
+#~ " -r, --reset обнулить счётчики неудачных попыток входа\n"
+#~ " -t, --time ДНЕЙ показать записи faillog за последние ДНЕЙ дней\n"
+#~ " -u, --user ИМЯ показать запись faillog или настроить счётчики\n"
+#~ " неудачных попыток и ограничения (вместе с -r, -m\n"
+#~ " или -l) только для учётной записи с заданным "
+#~ "ИМЕНЕМ\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force exit with success status if the\n"
+#~ " specified group already exists\n"
+#~ " -g, --gid GID use GID for the new group\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique allow create group with duplicate\n"
+#~ " (non-unique) GID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new group\n"
+#~ " -r, --system create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Использование: groupadd [параметры] ГРУППА\n"
+#~ "\n"
+#~ "Параметры:\n"
+#~ " -f, --force закончить работу с успешным кодом возврата, если\n"
+#~ " заданная группа уже существует\n"
+#~ " -g, --gid GID для новой группы использовать GID\n"
+#~ " -h, --help показать данное сообщение и закончить работу\n"
+#~ " -K, --key KEY=VALUE изменить значения по умолчанию из /etc/login."
+#~ "defs\n"
+#~ " -o, --non-unique разрешить создание группы с уже имеющимся\n"
+#~ " (не уникальным) GID\n"
+#~ " -p, --password PASS использовать шифрованный пароль для новой группы\n"
+#~ " -r, --system создать системную учётную запись\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --gid GID force use new GID by GROUP\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Использование: groupmod [параметры] ГРУППА\n"
+#~ "\n"
+#~ "Параметры:\n"
+#~ " -g, --gid GID для новой ГРУППЫ использовать GID\n"
+#~ " -h, --help показать данное сообщение и закончить работу\n"
+#~ " -n, --new-name НОВ_ГР использовать имя НОВ_ГР для ГРУППЫ\n"
+#~ " -o, --non-unique разрешить создание ГРУППЫ с уже имеющимся\n"
+#~ " (не уникальным) GID\n"
+#~ " -p, --password PASS использовать шифрованный пароль для нового "
+#~ "пароля\n"
+#~ "\n"
+
+#
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~ " home directory\n"
+#~ " -c, --comment COMMENT set the GECOS field for the new user "
+#~ "account\n"
+#~ " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~ " -D, --defaults print or save modified default useradd\n"
+#~ " configuration\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP for the new user account\n"
+#~ " -G, --groups GROUPS list of supplementary groups for the new\n"
+#~ " user account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -l, --no-log-init do not add the user to the lastlog and\n"
+#~ " faillog databases\n"
+#~ " -m, --create-home create home directory for the new user\n"
+#~ " account\n"
+#~ " -M, --no-create-home do not create user's home directory\n"
+#~ " (overrides /etc/login.defs)\n"
+#~ " -N, --no-user-group do not create a group with the same name "
+#~ "as\n"
+#~ " the user\n"
+#~ " -o, --non-unique allow create user with duplicate\n"
+#~ " (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new user\n"
+#~ " account\n"
+#~ " -r, --system create a system account\n"
+#~ " -s, --shell SHELL the login shell for the new user account\n"
+#~ " -u, --uid UID force use the UID for the new user "
+#~ "account\n"
+#~ " -U, --user-group create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Использование: useradd [параметры] имя пользователя\n"
+#~ "\n"
+#~ "Параметры:\n"
+#~ " -b, --base-dir BASE_DIR базовый каталог для домашнего каталога\n"
+#~ " новой учётной записи\n"
+#~ " -c, --comment COMMENT заполнить поле GECOS новой учётной "
+#~ "записи\n"
+#~ " -d, --home-dir HOME_DIR домашний каталог новой учётной записи\n"
+#~ " -D, --defaults показать или сохранить изменённые "
+#~ "настройки\n"
+#~ " useradd по умолчанию\n"
+#~ " -e, --expiredate EXPIRE_DATE установить дату окончания действия\n"
+#~ " учётной записи равной EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE установить пароль для устаревших учётных\n"
+#~ " записей в INACTIVE\n"
+#~ " -g, --gid GROUP принудительно назначить группу GROUP\n"
+#~ " для новой учётной записи\n"
+#~ " -G, --groups GROUPS задать список групп для новой\n"
+#~ " учётной записи\n"
+#~ " -h, --help показать данное сообщение и закончить "
+#~ "работу\n"
+#~ " -k, --skel SKEL_DIR указать альтернативный каталог с "
+#~ "шаблонами\n"
+#~ " -K, --key KEY=VALUE изменить значения по умолчанию из\n"
+#~ " /etc/login.defs\n"
+#~ " -l, --no-log-init не добавлять пользователя в базы данных\n"
+#~ " lastlog и faillog\n"
+#~ " -m, --create-home создать домашний каталог для новой\n"
+#~ " учётной записи\n"
+#~ " -M, --no-create-home не создавать домашний каталог для новой\n"
+#~ " учётной записи (изменяет значение\n"
+#~ " из /etc/login.defs)\n"
+#~ " -N, --no-user-group не создавать группу с именем как у\n"
+#~ " пользователя\n"
+#~ " -o, --non-unique разрешить создание учётной записи с уже\n"
+#~ " имеющимся (не уникальным) UID\n"
+#~ " -p, --password PASSWORD задать шифрованный пароль для новой\n"
+#~ " учётной записи\n"
+#~ " -r, --system создать системную учётную запись\n"
+#~ " -s, --shell SHELL задать командную оболочку для новой\n"
+#~ " учётной записи\n"
+#~ " -u, --uid UID принудительно назначить UID для новой\n"
+#~ " учётной записи\n"
+#~ " -U, --user-group создать группу с именем как у "
+#~ "пользователя\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "Usage: %s [options] [input]\n"
+#~ "\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -r, --system create system accounts\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Использование: %s [параметры] [ввод]\n"
+#~ "\n"
+#~ " -c, --crypt-method метод шифрования (один из %s)\n"
+#~ " -r, --system создать системную учётную запись\n"
+#~ "%s\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Срок действия пароля истёк."
+
+#~ msgid "setfscreatecon() failed"
+#~ msgstr "Вызов setfscreatecon() завершился неудачно"
diff --git a/po/shadow.pot b/po/shadow.pot
new file mode 100644
index 0000000..c6a0abb
--- /dev/null
+++ b/po/shadow.pot
@@ -0,0 +1,2607 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr ""
+
+msgid "Password: "
+msgstr ""
+
+#, c-format
+msgid "%s's Password: "
+msgstr ""
+
+msgid "Cannot open audit interface.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr ""
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set sename for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr ""
+
+msgid "Warning: too many groups\n"
+msgstr ""
+
+msgid "Your password has expired."
+msgstr ""
+
+msgid "Your password is inactive."
+msgstr ""
+
+msgid "Your login has expired."
+msgstr ""
+
+msgid " Contact the system administrator."
+msgstr ""
+
+msgid " Choose a new password."
+msgstr ""
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr ""
+
+msgid "Your password will expire tomorrow."
+msgstr ""
+
+msgid "Your password will expire today."
+msgstr ""
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: "
+msgstr ""
+
+msgid ": "
+msgstr ""
+
+msgid "Environment overflow\n"
+msgstr ""
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Memory allocation failure\n"
+msgstr ""
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid map file %s specified\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Could not seteuid to %d\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Could not set caps\n"
+msgstr ""
+
+#, c-format
+msgid "%s: snprintf failed!\n"
+msgstr ""
+
+#, c-format
+msgid "%s: open of %s failed: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: write to %s failed: %s\n"
+msgstr ""
+
+msgid "Too many logins.\n"
+msgstr ""
+
+msgid "You have new mail."
+msgstr ""
+
+msgid "No mail."
+msgstr ""
+
+msgid "You have mail."
+msgstr ""
+
+msgid "no change"
+msgstr ""
+
+msgid "a palindrome"
+msgstr ""
+
+msgid "case changes only"
+msgstr ""
+
+msgid "too similar"
+msgstr ""
+
+msgid "too simple"
+msgstr ""
+
+msgid "rotated"
+msgstr ""
+
+msgid "too short"
+msgstr ""
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr ""
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr ""
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr ""
+
+msgid "passwd: password unchanged\n"
+msgstr ""
+
+msgid "passwd: password updated successfully\n"
+msgstr ""
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: conversation type %d not supported.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr ""
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr ""
+
+msgid "No directory, logging in with HOME=/"
+msgstr ""
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr ""
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user %s is currently used by process %d\n"
+msgstr ""
+
+msgid "Unable to determine your tty name."
+msgstr ""
+
+msgid "No"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr ""
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr ""
+
+msgid "Minimum Password Age"
+msgstr ""
+
+msgid "Maximum Password Age"
+msgstr ""
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr ""
+
+msgid "Password Expiration Warning"
+msgstr ""
+
+msgid "Password Inactive"
+msgstr ""
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr ""
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr ""
+
+msgid "never"
+msgstr ""
+
+msgid "password must be changed"
+msgstr ""
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr ""
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr ""
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr ""
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: PAM: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr ""
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr ""
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr ""
+
+msgid "Room Number"
+msgstr ""
+
+msgid "Work Phone"
+msgstr ""
+
+msgid "Home Phone"
+msgstr ""
+
+msgid "Other"
+msgstr ""
+
+msgid "Cannot change ID to root.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr ""
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr ""
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr ""
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr ""
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr ""
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr ""
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr ""
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr ""
+
+#, c-format
+msgid " [%lus left]"
+msgstr ""
+
+#, c-format
+msgid " [%lds lock]"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr ""
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr ""
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr ""
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+msgid "The options cannot be combined.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr ""
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr ""
+
+msgid "New Password: "
+msgstr ""
+
+msgid "Re-enter new password: "
+msgstr ""
+
+msgid "They don't match; try again"
+msgstr ""
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr ""
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr ""
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr ""
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid " -r, --system create a system account\n"
+msgstr ""
+
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr ""
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+
+msgid "\n"
+msgstr ""
+
+msgid "Actions:\n"
+msgstr ""
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr ""
+
+msgid " -l, --list list the members of the group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr ""
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr ""
+
+msgid "invalid group file entry"
+msgstr ""
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr ""
+
+msgid "duplicate group entry"
+msgstr ""
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr ""
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr ""
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr ""
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr ""
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr ""
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr ""
+
+msgid "duplicate shadow group entry"
+msgstr ""
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr ""
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr ""
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr ""
+
+msgid "Usage: id [-a]\n"
+msgstr ""
+
+msgid "Usage: id\n"
+msgstr ""
+
+msgid " groups="
+msgstr ""
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+
+msgid "Username Port From Latest"
+msgstr ""
+
+msgid "Username Port Latest"
+msgstr ""
+
+msgid "**Never logged in**"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr ""
+
+#, 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 ""
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr ""
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr ""
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s login: "
+msgstr ""
+
+msgid "login: "
+msgstr ""
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr ""
+
+msgid "login: abort requested by PAM\n"
+msgstr ""
+
+msgid "Login incorrect"
+msgstr ""
+
+#, c-format
+msgid "Cannot find user (%s)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr ""
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr ""
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr ""
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr ""
+
+#, c-format
+msgid " from %.*s"
+msgstr ""
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+
+msgid "Usage: logoutd\n"
+msgstr ""
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, c-format
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to read setgroups: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Could not stat directory for target %u\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr ""
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr ""
+
+msgid "Invalid password.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr ""
+
+msgid "too many groups\n"
+msgstr ""
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid " -b, --badnames allow bad names\n"
+msgstr ""
+
+msgid " -r, --system create system accounts\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr ""
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid " -q, --quiet quiet mode\n"
+msgstr ""
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid "Old password: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+
+msgid "New password: "
+msgstr ""
+
+msgid "Try again."
+msgstr ""
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+
+msgid "They don't match; try again.\n"
+msgstr ""
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr ""
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr ""
+
+#, c-format
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr ""
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr ""
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: password changed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid " -q, --quiet report errors only\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+
+msgid "invalid password file entry"
+msgstr ""
+
+msgid "duplicate password entry"
+msgstr ""
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr ""
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr ""
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr ""
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr ""
+
+#, c-format
+msgid "no tcb directory for %s\n"
+msgstr ""
+
+#, c-format
+msgid "create tcb directory for %s?"
+msgstr ""
+
+#, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr ""
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr ""
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr ""
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr ""
+
+msgid "duplicate shadow password entry"
+msgstr ""
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+msgid "Access to su to that account DENIED.\n"
+msgstr ""
+
+msgid "Password authentication bypassed.\n"
+msgstr ""
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr ""
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr ""
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr ""
+
+msgid "Session terminated, terminating shell..."
+msgstr ""
+
+#, c-format
+msgid " ...killed.\n"
+msgstr ""
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr ""
+
+msgid " ...terminated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s\n"
+msgstr ""
+
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr ""
+
+msgid "(Enter your own password)"
+msgstr ""
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr ""
+
+#, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr ""
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot execute %s\n"
+msgstr ""
+
+msgid "No password file"
+msgstr ""
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr ""
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+
+msgid "Entering System Maintenance Mode"
+msgstr ""
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr ""
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr ""
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr ""
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr ""
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr ""
+
+#, c-format
+msgid "%s: error while duplicating string %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr ""
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+
+msgid "Setting mailbox file permissions"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr ""
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr ""
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: error removing subvolume %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr ""
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr ""
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr ""
+
+msgid " -L, --lock lock the user account\n"
+msgstr ""
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr ""
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr ""
+
+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"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no options\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr ""
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr ""
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr ""
+
+msgid "failed to change mailbox owner"
+msgstr ""
+
+msgid "failed to rename mailbox"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid " -g, --group edit group database\n"
+msgstr ""
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr ""
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr ""
+
+msgid "failed to create scratch directory"
+msgstr ""
+
+msgid "failed to drop privileges"
+msgstr ""
+
+msgid "Couldn't get file context"
+msgstr ""
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "failed to gain privileges"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr ""
+
+msgid "Couldn't make backup"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+msgid "failed to open scratch file"
+msgstr ""
+
+msgid "failed to unlink scratch file"
+msgstr ""
+
+msgid "failed to stat edited file"
+msgstr ""
+
+msgid "failed to allocate memory"
+msgstr ""
+
+msgid "failed to create backup file"
+msgstr ""
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr ""
diff --git a/po/sk.gmo b/po/sk.gmo
new file mode 100644
index 0000000..f9dfa57
--- /dev/null
+++ b/po/sk.gmo
Binary files differ
diff --git a/po/sk.po b/po/sk.po
new file mode 100644
index 0000000..c9aa914
--- /dev/null
+++ b/po/sk.po
@@ -0,0 +1,3998 @@
+# Slovak translation of shadow-utils.
+#
+# Ivan Masár <helix84@centrum.sk>, 2008, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.17\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2011-11-26 22:06+0100\n"
+"Last-Translator: Ivan Masár <helix84@centrum.sk>\n"
+"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
+"Language: sk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural= (n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"Existuje viac záznamov s názvom „%s“ v %s. Prosím, napravte to pomocou pwck "
+"alebo grpck.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "libcrypt nepodporuje metódy šifrovania? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Na konfiguračné údaje sa nedá vyhradiť dostatok miesta.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"konfiguračná chyba - neznámy predmet „%s“ (informujte správcu systému)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr ""
+
+msgid "Password: "
+msgstr "Heslo: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Heslo používateľa %s:"
+
+#, fuzzy
+#| msgid "Cannot open audit interface - aborting.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "Nie je možné otvoriť rozhranie pre audit - prerušuje sa.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr ""
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not set sename for %s\n"
+msgstr "Na konfiguračné údaje sa nedá vyhradiť dostatok miesta.\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "Menia sa informácie vypršania platnosti pre používateľa %s\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "%s: vaše používateľské meno sa nedá zistiť.\n"
+
+#, fuzzy, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "%s: riadok %d: nedá sa nájsť používateľ %s\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: nedostatok pamäti\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: nie je možné zmazať %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: chybný domovský adresár „%s“\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: nie je možné odstrániť položku „%s“ z %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: nedá sa vytvoriť adresár %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "lastlog: Nepodarilo sa zistiť veľkosť %s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: upozornenie: nemôžem odstrániť %s: %s"
+
+#, fuzzy, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: premenovať: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: adresár %s sa nedá premenovať na %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: adresár %s sa nedá premenovať na %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: upozornenie: nemôžem odstrániť %s: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: nedá sa vytvoriť adresár %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "lastlog: Nepodarilo sa zistiť veľkosť %s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: nie je možné zmazať %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: súbor s tieňovými heslami sa nedá aktualizovať\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: premenovať: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: súbor %s sa nedá otvoriť\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Upozornenie: skupina %s je neznáma\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Upozornenie: príliš mnoho skupín\n"
+
+msgid "Your password has expired."
+msgstr "Uplynula platnosť vášho hesla."
+
+msgid "Your password is inactive."
+msgstr "Vaše heslo je neaktívne."
+
+msgid "Your login has expired."
+msgstr "Uplynula platnosť vášho účtu."
+
+msgid " Contact the system administrator."
+msgstr " Kontaktujte správcu systému."
+
+msgid " Choose a new password."
+msgstr " Zvoľte nové heslo."
+
+msgid "You must change your password."
+msgstr "Musíte si zmeniť heslo."
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "O %ld dní uplynie platnosť vášho hesla.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Zajtra uplynie platnosť vášho hesla."
+
+msgid "Your password will expire today."
+msgstr "Dnes uplynie platnosť vášho hesla."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "Nie je možné otvoriť rozhranie pre audit - prerušuje sa.\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Nedá sa zmeniť režim vlastníka TTY štandardného vstupu: %s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: nepodarilo sa odmknúť %s\n"
+
+#, c-format
+msgid "%s: "
+msgstr "%s: "
+
+msgid ": "
+msgstr ": "
+
+msgid "Environment overflow\n"
+msgstr "Preplnenie prostredia\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Nemôžete zmeniť $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d chybný pokus o prihlásenie od posledného prihlásenia.\n"
+"Bol to %s na %s.\n"
+msgstr[1] ""
+"%d chybné pokusy o prihlásenie od posledného prihlásenia.\n"
+"Posledné bolo %s na %s.\n"
+msgstr[2] ""
+"%d chybných pokusov o prihlásenie od posledného prihlásenia.\n"
+"Posledné bolo %s na %s.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "chyba pri zmene vlastníka schránky"
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr "%s: Nedá sa získať jedinečný UID (už nie sú dostupné žiadne UID)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: Nedá sa získať jedinečný GID (už nie sú dostupné žiadne GID)\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: Nedá sa získať jedinečný GID (už nie sú dostupné žiadne GID)\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: nie je možné vytvoriť používateľa\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: nie je možné vytvoriť používateľa\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr "%s: Nedá sa získať jedinečný UID (už nie sú dostupné žiadne UID)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: Nedá sa získať jedinečný UID (už nie sú dostupné žiadne UID)\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: Nedá sa získať jedinečný UID (už nie sú dostupné žiadne UID)\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Authentication failure\n"
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: Autentifikácia zlyhala\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: chybná položka „%s“\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Could not seteuid to %d\n"
+msgstr "Na konfiguračné údaje sa nedá vyhradiť dostatok miesta.\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not set caps\n"
+msgstr "Na konfiguračné údaje sa nedá vyhradiť dostatok miesta.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't open file\n"
+msgid "%s: snprintf failed!\n"
+msgstr "%s: nedá sa otvoriť súbor\n"
+
+#, fuzzy, c-format
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: riadok %d: volanie chown zlyhalo\n"
+
+#, fuzzy, c-format
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: riadok %d: volanie chown zlyhalo\n"
+
+msgid "Too many logins.\n"
+msgstr "Príliš mnoho prihlásení.\n"
+
+msgid "You have new mail."
+msgstr "Máte novú poštu."
+
+msgid "No mail."
+msgstr "Nemáte žiadnu poštu."
+
+msgid "You have mail."
+msgstr "Máte poštu."
+
+msgid "no change"
+msgstr "žiadna zmena"
+
+msgid "a palindrome"
+msgstr "palindróm"
+
+msgid "case changes only"
+msgstr "iba zmeny vo veľkosti písmen"
+
+msgid "too similar"
+msgstr "veľmi podobné"
+
+msgid "too simple"
+msgstr "veľmi jednoduché"
+
+msgid "rotated"
+msgstr "opakované"
+
+msgid "too short"
+msgstr "veľmi krátke"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Heslo %s je chybné. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: volanie pam_start() zlyhalo, chyba %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+msgid "passwd: password unchanged\n"
+msgstr "passwd: heslo nezmenené\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: heslo bolo úspešne zmenené\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: úložisko %s nie je podporované\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start: chyba %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd: volanie pam_start() zlyhalo, chyba %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Chybné heslo pre %s.\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr ""
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: zlyhalo odstránenie právomocí (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: chybné telefónne číslo domov: „%s“\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: nedá sa vytvoriť adresár %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: nedá sa vytvoriť adresár %s\n"
+
+#, fuzzy, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: nedá sa vytvoriť adresár %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"neplatná hodnota ENCRYPT_METHOD: „%s“.\n"
+"Používa sa štandardná hodnota DES.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Aktuálny adresár sa nedá nastaviť na „%s“\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Žiadny adresár, prihlásenie s HOME na /"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "%s sa nedá spustiť."
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Chybný koreňový adresár „%s“\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Koreňový adresár sa nedá zmeniť na „%s“\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: používateľ %s je práve prihlásený\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: používateľ %s je práve prihlásený\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Nedá sa zistiť názov vášho tty."
+
+msgid "No"
+msgstr "Nie"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Použitie: %s [voľby] ÚČET\n"
+"\n"
+"Voľby:\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+" -d, --lastday POSL_DEN nastaví dátum poslednej zmeny hesla na "
+"POSL_DEN\n"
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -E, --expiredate EXP_DATUM nastaví dátum vypršania platnosti účtu na\n"
+" EXP_DATUM\n"
+
+msgid " -h, --help display this help message and exit\n"
+msgstr " -h, --help zobrazí tohto pomocníka a ukončí sa\n"
+
+#, fuzzy
+#| msgid " -g, --group edit group database\n"
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr " -g, --group upraví databázu skupín\n"
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -I, --inactive NEAKTIV nastaví nefunkčnosť hesla na NEAKTIV dní\n"
+" po vypršaní platnosti účtu\n"
+
+msgid " -l, --list show account aging information\n"
+msgstr " -l, --list zobrazí časové údaje o účte\n"
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -m, --mindays MIN_DNÍ nastaví minimálny počet dní pred zmenou\n"
+" hesla na MIN_DNÍ\n"
+
+#, fuzzy
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -M, --maxdays MAX_DNÍ nastaví maximálny počet dní pred zmenou\n"
+" hesla na MAX_DNÍ\n"
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -W, --warndays UPOZ_DNÍ nastaví upozornenie o platnosti účtu na "
+"UPOZ_DNÍ\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr ""
+"Zadajte novú hodnotu alebo stlačte ENTER pre použitie predvolenej hodnoty"
+
+msgid "Minimum Password Age"
+msgstr "Minimálna doba platnosti hesla"
+
+msgid "Maximum Password Age"
+msgstr "Maximálna doba platnosti hesla"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Posledná zmena hesla (YYYY-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Upozornenie o uplynutí doby platnosti hesla"
+
+msgid "Password Inactive"
+msgstr "Nečinné heslo"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Uplynutie platnosti účtu (YYYY-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Posledná zmena hesla\t\t\t\t\t: "
+
+msgid "never"
+msgstr "nikdy"
+
+msgid "password must be changed"
+msgstr "heslo je potrebné zmeniť"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Platnosť hesla uplynie\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Neaktívne heslo\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Platnosť účtu uplynie\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Minimálny počet dní medzi zmenami hesla\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Maximálny počet dní medzi zmenami hesla\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Počet dní upozornenia pred vypršaním platnosti hesla\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: chybný dátum „%s“\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: chybný číselný parameter „%s“\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: nepoužívajte „l“ s ostatnými príznakmi\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Odmietnutý prístup.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: vaše používateľské meno sa nedá zistiť.\n"
+
+#, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: PAM: %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: nedá sa zamknúť %s, skúste to opäť neskôr\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: súbor %s sa nedá otvoriť\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: chyba pri zapisovaní zmien do %s\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: zlyhalo pripravenie novej položky %s „%s“\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: súbor s tieňovými heslami nie je dostupný\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: používateľ „%s“ neexistuje v %s\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Menia sa informácie vypršania platnosti pre používateľa %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: chyba pri zmene položiek\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Použitie: %s [voľby] [ÚČET]\n"
+"\n"
+"Voľby:\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+
+msgid " -u, --help display this help message and exit\n"
+msgstr " -u, --help zobrazí tohto pomocníka a ukončí sa\n"
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr "Celé meno"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "Číslo miestnosti"
+
+msgid "Work Phone"
+msgstr "Telefón do zamestnania"
+
+msgid "Home Phone"
+msgstr "Telefón domov"
+
+msgid "Other"
+msgstr "Ostatné"
+
+msgid "Cannot change ID to root.\n"
+msgstr "ID sa nedá zmeniť na root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: meno so znakmi, ktoré nie sú v ASCII: „%s“\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: chybné meno: „%s“\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s: číslo miestnosti so znakmi, ktoré nie sú v ASCII: „%s“\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: chybné číslo miestnosti: „%s“\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: chybné telefónne číslo do zamestnania: „%s“\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: chybné telefónne číslo domov: „%s“\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: „%s“ obsahuje znaky, ktoré nie sú v ASCII\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: „%s“ obsahuje chybné znaky\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: používateľ „%s“ neexistuje\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: na NIC klientovi sa nedá zmeniť používateľ „%s“.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: „%s“ je hlavným NIS serverom pre tohto klienta.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Mením informácie o používateľovi %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: položka je príliš dlhá\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Použitie: %s [voľby]\n"
+"\n"
+"Voľby:\n"
+
+#, fuzzy, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr " -c, --crypt-method metóda šifrovania (jedna z %s)\n"
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr " -e, --encrypted zadané heslá sú zakódované\n"
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+" -m, --md5 použije MD5 kódovanie namiesto DES, ak\n"
+" zadané heslá nie sú zakódované\n"
+
+#, fuzzy
+#| msgid ""
+#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
+#| " crypt algorithms\n"
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+" -s, --sha-rounds počet cyklov šifrovacích\n"
+" algoritmov SHA*\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: prepínač %s je povolený iba s prepínačom %s\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: voľby -c, -e a -m sa navzájom vylučujú\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: nepodporovaná metóda šifrovania: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: riadok %d je príliš dlhý\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: riadok %d: chýba nové heslo\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: zlyhalo odstránenie %s\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: riadok %d: skupina „%s“ neexistuje\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: riadok %d: nepodarilo sa pripraviť novú položku %s „%s“\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: zistená chyba, zmeny budú zamietnuté\n"
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: riadok %d: používateľ „%s“ neexistuje\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: riadok %d: používateľ „%s“ neexistuje\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr "Predvolený shell"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Nemôžete zmeniť shell pre „%s“.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Mením predvolený shell pre %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Chybná položka: %s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s: %s je neplatný shell\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: používateľ %s neexistuje\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: upozornenie: vlastníkom %s nie je %s\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: voľby %s a %s sú v konflikte\n"
+
+#, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "%s: neočakávaný argument: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+" -a, --all zobrazí faillog záznamy všetkých "
+"používateľov\n"
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+" -l, --lock-secs SEC po chybnom prihlásení zablokuje účet na SEC\n"
+" sekúnd\n"
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+" -m, --maximum MAX nastaví maximálny počet chybných prihlásení\n"
+" na MAX\n"
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+" -r, --reset vynuluje počítadlá chybných prihlásení\n"
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time DAYS zobrazí záznamy faillog nie staršie ako\n"
+" DAYS dní\n"
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+" -u, --user LOGIN zobrazí záznam faillog alebo nastaví "
+"počítadlá\n"
+" chybných prihlásení a limitov (iba s "
+"použitím\n"
+" volieb -r, -m or -l) pre používateľa s "
+"loginom\n"
+" LOGIN\n"
+
+#, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: Nepodarilo sa získať položku s UID %lu\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "Login Chybné Najviac Posledné Na\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr " [%lus ostalo]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds zámok]"
+
+#, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s: Nepodarilo sa znulovať počet chýb pre UID %lu\n"
+
+#, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: Nepodarilo sa nastaviť max. pre UID %lu\n"
+
+#, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: Nepodarilo sa nastaviť čas zamknutia pre UID %lu\n"
+
+#, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "%s: Neznámy používateľ alebo rozsah: %s\n"
+
+#, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: Nepodarilo sa zistiť veľkosť %s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: zlyhalo odstránenie %s\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Použitie: %s [vstup]\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr ""
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr ""
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr ""
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+" -A, --administrators ADMIN,...\n"
+" nastaviť zoznam správcov SKUPINY\n"
+"Okrem volieb -A a -M nie je možné voľby kombinovať.\n"
+
+#, fuzzy
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "Voľby nie je možné kombinovať.\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "Voľby nie je možné kombinovať.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: prepínač -A funguje iba s tieňovými heslami skupín\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: skupina „%s“ neexistuje v %s\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: chyba pri zatváraní %s iba na čítanie\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Menísa heslo skupiny %s\n"
+
+msgid "New Password: "
+msgstr "Nové heslo: "
+
+msgid "Re-enter new password: "
+msgstr "Zadajte znova nové heslo: "
+
+msgid "They don't match; try again"
+msgstr "Nezhodujú sa; skúste to znova"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Skúste to neskôr\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Pridáva sa používateľ %s do skupiny %s.\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Odstraňuje sa používateľ %s zo skupiny %s\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: používateľ „%s“ nie je členom „%s“\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Nejedná sa o tty\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Použitie: %s [voľby] SKUPINA\n"
+"\n"
+"Voľby:\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr " -g, --gid GID pre novú skupinu použije GID\n"
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid " -r, --system create a system account\n"
+msgstr " -r, --system vytvorí systémový účet\n"
+
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: „%s“ nie je platným názvom skupiny\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: chybný ID skupiny „%s“\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: prepínač -K vyžaduje argument typu MENO=HODNOTA\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: skupina „%s“ už existuje\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s: GID „%lu“ už existuje\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: vaše používateľské meno sa nedá zistiť.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+" -r, --reset vynuluje počítadlá chybných prihlásení\n"
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: nie je možné odstrániť položku „%s“ z %s\n"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: nie je možné odstrniť primárnu skupinu používateľa „%s“.\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: skupina „%s“ neexistuje\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: skupina „%s“ je skupinou NIS.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s je hlavným NIS serverom\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: používateľ „%s“ je členom „%s“\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: Nedostatok pamäte. Nie je možné aktualizovať %s.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Použitie: %s [voľby] [operácia]\n"
+"\n"
+"Voľby:\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+" -g, --group groupname zmeniť názov skupiny namiesto skupiny\n"
+" používateľa (iba root)\n"
+
+msgid "\n"
+msgstr ""
+
+msgid "Actions:\n"
+msgstr ""
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+" -a, --add používateľ pridať používateľa medzi členov skupiny\n"
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+" -d, --delete používateľ odobrať používateľa spomedzi členov skupiny\n"
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr " -p, --purge odstrániť všetkých členov skupiny\n"
+
+msgid " -l, --list list the members of the group\n"
+msgstr " -l, --list vypísať členov skupiny\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: meno vašej skupiny sa nezhoduje s vašim používateľským menom\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s: iba root môže používať voľbu -g/--group\n"
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr ""
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: chybné pomenovanie skupiny „%s“\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: skupina %s je NIS skupinou\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: používateľ %s je neznámy\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Použitie: %s [voľby] [súbor_so_skupinami [súbor_s_tieňovými_skupinami]]\n"
+"\n"
+"Voľby:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Použitie: %s [voľby] [súbor_so_skupinami]\n"
+"\n"
+"Voľby:\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s a -r nie sú zlučiteľné\n"
+
+msgid "invalid group file entry"
+msgstr "chybná položka v súbore so skupinami"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "zmazať riadok „%s“? "
+
+msgid "duplicate group entry"
+msgstr "v súbore so skupinami sa vyskytuje zdvojená položka"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "chybné pomenovanie skupiny „%s“\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "chybný ID skupiny „%lu“\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "skupina %s: používateľ %s neexistuje\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "zmazať člena „%s“? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "neexistuje zodpovedajúca položka skupiny v súbore %s\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "pridať skupinu „%s“ do %s?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "chybná položka v súbore s tieňovými skupinami"
+
+msgid "duplicate shadow group entry"
+msgstr "v súbore s tieňovými skupinami sa vyskytuje zdvojená položka"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "tieňová skupina %s: správca %s neexistuje\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "zmazať správcu „%s“? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "tieňová skupina %s: používateľ %s neexistuje\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: súbory boli aktualizované\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: bezo zmien\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: nie je možné zmazať %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Použitie: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Použitie: id\n"
+
+msgid " groups="
+msgstr " skupiny="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+" -a, --all zobrazí faillog záznamy všetkých "
+"používateľov\n"
+
+#, fuzzy
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+" -a, --all zobrazí faillog záznamy všetkých "
+"používateľov\n"
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+
+msgid "Username Port From Latest"
+msgstr "Používateľ Port Z Naposledy"
+
+msgid "Username Port Latest"
+msgstr "Používateľ Port Naposledy"
+
+msgid "**Never logged in**"
+msgstr "**Nebol nikdy prihlásený**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s: Nepodarilo sa získať položku s UID %lu\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s: súbor s heslami sa nedá aktualizovaťt\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žitie: %s [-p] [meno]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h počítač] [-f meno]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r počítač\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Chybný čas prihlásenia"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Systém je uzavretý kvôli pravidelnej údržbe."
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Odpojenie vynechané -- používateľ root sa môže prihlásiť.]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr "Žiaden utmp záznam. Musíte spustiť „login“ z najnižšej inštancie „sh“"
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Uplynul časový limit (%u sekúnd) na prihlásenie.\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "prihlásenie: Chyba PAM, ukončuje sa: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s prihlasovacie meno: "
+
+msgid "login: "
+msgstr "Prihlasovacie meno: "
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Prekročený maximálny počet pokusov (%u)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "prihlásenie: PAM prerušenie\n"
+
+msgid "Login incorrect"
+msgstr "Chybné prihlásenie"
+
+#, fuzzy, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "%s: riadok %d: nedá sa nájsť používateľ %s\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"Prihlasovacie meno na %s: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: chybné vetvenie: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSCTTY zlyhalo na %s"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Upozornenie: po dočasnom zákaze je prihlasovanie opäť povolené."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Posledné prihlásenie: %s na %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Posledné prihlásenie: %.19s na %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " z %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"čas na prihlásenie uplynul\n"
+"\n"
+
+msgid "Usage: logoutd\n"
+msgstr "Použitie: logout\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: can't open group file\n"
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr "%s: súbor so skupinami sa nedá otvoriť\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: zlyhalo odstránenie %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: zlyhalo odstránenie %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to unlock %s\n"
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: nepodarilo sa odmknúť %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: chybný základný adresár „%s“\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: nedá sa vytvoriť adresár %s\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Použitie: newgrp [-] [skupina]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Použitie: sg skupina [[-c] príkaz]\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: zlyhalo odstránenie %s\n"
+
+msgid "Invalid password.\n"
+msgstr "Neplatné heslo.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: chybné vetvenie: %s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: GID „%lu“ neexistuje\n"
+
+msgid "too many groups\n"
+msgstr "príliš mnoho skupín\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+#, fuzzy
+#| msgid " -q, --quiet quiet mode\n"
+msgid " -b, --badnames allow bad names\n"
+msgstr " -q, --quiet stručný režim\n"
+
+msgid " -r, --system create system accounts\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: skupina „%s“ je tieňová skupina, ale neexistuje v /etc/group\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: chybný ID používateľa „%s“\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: chybné používateľské meno „%s“\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: riadok %d: chybný riadok\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: záznam používateľa %s sa nedá aktualizovať (nie je v databáze passwd)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: riadok %d: nedá sa vytvoriť používateľ\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: riadok %d: nedá sa vytvoriť skupina\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: riadok %d: používateľ „%s“ neexistuje v %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: riadok %d: heslo sa nedá aktualizovať\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: riadok %d: volanie mkdir zlyhalo\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: riadok %d: volanie chown zlyhalo\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: riadok %d: položka sa nedá aktualizovať\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: zlyhalo pripravenie novej položky %s „%s“\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: nie je možné vytvoriť používateľa\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: súbor s heslami sa nedá aktualizovať\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr " -a, --all zobrazí stav hesiel pre všetky účty\n"
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr " -d, --delete odstráni heslo pre zadaný účet\n"
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+" -e, --expire vynúti platnosť hesla pre zadaný účet\n"
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+" -k, --keep-tokens zmení heslo iba v prípade vypršania času\n"
+" jeho platnosti\n"
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -i, --inactive INACTIVE nastaví neplatnosť hesla po vypršaní času\n"
+" platnosti na INACTIVE dní\n"
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr " -l, --lock zablokuje zadaný účet\n"
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -n, --mindays MIN_DNÍ nastaví minimálny počet dní pred zmenou\n"
+" hesla na MIN_DNÍ dní\n"
+
+msgid " -q, --quiet quiet mode\n"
+msgstr " -q, --quiet stručný režim\n"
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr " -r, --repository REPOSITORY zmení heslo v repozitári REPOSITORY\n"
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr " -S, --status zobrazí stav hesla pre zadaný účet\n"
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr " -u, --unlock odblokuje zadaný účet\n"
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -w, --warndays WARN_DAYS nastaví počet dní na upozornenie o vypršaní\n"
+" platnosti na WARN_DAYS dní\n"
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -x, --maxdays MAX_DNÍ nastaví maximálny počet dní pred zmenou\n"
+" hesla na MAX_DNÍ dní\n"
+
+msgid "Old password: "
+msgstr "Staré heslo: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Zadajte nové heslo (počet znakov najmenej %d).\n"
+"Použijte kombináciu veľkých a malých písmen s číslicami.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Zadajte nové heslo (počet znakov v intervale %d až %d).\n"
+"Použijte kombináciu veľkých a malých písmen s číslicami.\n"
+
+msgid "New password: "
+msgstr "Nové heslo: "
+
+msgid "Try again."
+msgstr "Skúste to znova."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Upozornenie: slabé heslo (ak ho chcete naozaj použiť, znova ho zadajte)."
+
+msgid "They don't match; try again.\n"
+msgstr "Nezhodujú sa; skúste to znova.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Heslo pre %s sa nedá zmeniť.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Heslo pre %s sa zatiaľ nedá zmeniť.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: odomknutie používateľa by malo za následok účet bez hesla.\n"
+"Tento účet by ste mali odomknúť nastavením hesla pomocou usermod -p.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: úložisko %s nie je podporované\n"
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not authorized to change the password of %s\n"
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr "%s: %s nemá oprávnenie zmeniť heslo %s\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Nemôžete prezerať alebo meniť informácie o hesle pre %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Mení sa heslo používateľovi %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Heslo používateľa %s nebolo zmenené.\n"
+
+#, c-format
+msgid "%s: password changed.\n"
+msgstr "%s: heslo bolo zmenené.\n"
+
+#, fuzzy, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "Upozornenie o uplynutí doby platnosti hesla"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Použitie: %s [voľby] [súbor_s_heslami]\n"
+"\n"
+"Voľby:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Použitie: %s [voľby] [súbor_s_heslami [súbor_s_tieňovými_heslami]]\n"
+"\n"
+"Voľby:\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+
+msgid "invalid password file entry"
+msgstr "chybná položka v súbore s heslami"
+
+msgid "duplicate password entry"
+msgstr "duplikovaná položka v súbore s heslami"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "chybné používateľské meno „%s“\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "chybný ID používateľa „%lu“\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "používateľ „%s“: skupina %lu neexistuje\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "používateľ „%s“: adresár „%s“ neexistuje\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "používateľ „%s“: program „%s“ neexistuje\n"
+
+#, fuzzy, c-format
+msgid "no tcb directory for %s\n"
+msgstr "%s: nedá sa vytvoriť adresár %s\n"
+
+#, fuzzy, c-format
+msgid "create tcb directory for %s?"
+msgstr "%s: nedá sa vytvoriť adresár %s\n"
+
+#, fuzzy, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "%s: nedá sa vytvoriť adresár %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: súbor %s sa nedá zamknúť\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "neexistuje zodpovedajúca položka hesla v súbore %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "pridať používateľa „%s“ do %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "chybná položka v súbore s tieňovými heslami"
+
+msgid "duplicate shadow password entry"
+msgstr "duplicitná položka v súbore s tieňovými heslami"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "používateľ %s: posledná zmena hesla v budúcnosti\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: nie je možné zoradiť položdy v %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: súbor sa nedá prepísať\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: lastlog: Nepodarilo sa zmeniť režim %s na 0600\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Z tohto účtu je prístup k su ZAKÁZANÝ.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Overenie hesla vynechané.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Pre overenie zadajte VAŠE vlastné heslo.\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: súbor %s sa nedá zamknúť\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr ""
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr ""
+
+msgid "Session terminated, terminating shell..."
+msgstr ""
+
+#, c-format
+msgid " ...killed.\n"
+msgstr ""
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr ""
+
+msgid " ...terminated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: su [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
+#| " -h, --help display this help message and exit\n"
+#| " -, -l, --login make the shell a login shell\n"
+#| " -m, -p,\n"
+#| " --preserve-environment do not reset environment variables, and\n"
+#| " keep the same shell\n"
+#| " -s, --shell SHELL use SHELL instead of the default in "
+#| "passwd\n"
+#| "\n"
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"Použitie: su [voľby] [ÚČET]\n"
+"\n"
+"Voľby:\n"
+" -c, --command PRÍKAZ odovzdá PRÍKAZ vyvolanému shell-u\n"
+" -h, --help zobrazí tohto pomocníka a ukončí sa\n"
+" -, -l, --login nastaví shell ako prihlasovací shell\n"
+" -m, -p,\n"
+" --preserve-environment zachová premenné prostredia a ponechá\n"
+" ten istý shell\n"
+" -s, --shell SHELL použije SHELL namiesto predvoleného v "
+"passwd\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ignorujem)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Nie ste oprávnení používať su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Zadajte vaše heslo)"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: Autentifikácia zlyhala\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s: Nie ste momentálne oprávnení používať su\n"
+
+#, fuzzy, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "V súbore passwd nie je položka pre používateľa „root“"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: musí byť spustené z terminálu\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: chyba %d\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "lastlog: Nepodarilo sa zistiť veľkosť %s: %s\n"
+
+#, c-format
+msgid "Cannot execute %s\n"
+msgstr "%s sa nedá spustiť\n"
+
+msgid "No password file"
+msgstr "Súbor s heslami neexistuje"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY zlyhalo"
+
+msgid "No password entry for 'root'"
+msgstr "V súbore passwd nie je položka pre používateľa „root“"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Stlačte control-d pre normálne spustenie systému,\n"
+"(alebo zadajte heslo používateľa root pre údržbu systému):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Prepnutie do režimu údržby systému"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: nedá sa vytvoriť nový súbor s predvolenými hodnotami\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: nedá sa vytvoriť nový súbor s predvolenými hodnotami\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: nedá sa otvoriť nový súbor s predvolenými hodnotami\n"
+
+#, fuzzy, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: riadok %d: volanie chown zlyhalo\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: nedá sa vytvoriť adresár %s\n"
+
+#, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: premenovať: %s: %s\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: skupina „%s“ je skupinou NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: bolo zadaných príliš veľa skupín (max %d).\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Použitie: %s [voľby] ÚČET\n"
+" %s -D\n"
+" %s -D [voľby]\n"
+"\n"
+"Voľby:\n"
+
+#, fuzzy
+#| msgid " -s, --shadow edit shadow or gshadow database\n"
+msgid " --badnames do not check for bad names\n"
+msgstr " -s, --shadow upraví databázu shadow alebo gshadow\n"
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr ""
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr ""
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+" -l, --no-log-init nepridávať používateľa do databáz\n"
+" lastlog a faillog \n"
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+" -N, --no-user-group nevytvorí skupinu s rovnakým menom\n"
+" ako má používateľ\n"
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr ""
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr ""
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: chybný základný adresár „%s“\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: chybný komentár „%s“\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: chybný domovský adresár „%s“\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: prepínač -e vyžaduje tieňové heslá\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: prepínač -f vyžaduje tieňové heslá\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: chybná položka „%s“\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: chybný shell „%s“\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: upozornenie: vlastníkom %s nie je %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rewrite password file\n"
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s: súbor s heslami sa nedá prepísať\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr "%s: Nepodarilo sa obnoviť položku faillog s UID %lu: %s\n"
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr "%s: Nepodarilo sa obnoviť položku lastlog s UID %lu: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s: Nepodarilo sa obnoviť položku faillog s UID %lu: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: zlyhalo pripravenie novej položky %s „%s“\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error updating files\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: chyba pri aktualizácii súborov\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: nedá sa vytvoriť adresár %s\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: chybný domovský adresár „%s“\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "chyba pri zmene vlastníka schránky"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: nedá sa vytvoriť adresár %s\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: riadok %d: volanie chown zlyhalo\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: riadok %d: volanie chown zlyhalo\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "Vytvára sa súbor mailbox"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Nebola nájdená skupina „mail“. Používateľský mailbox súbor sa vytvára s "
+"oprávneniami 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Nastavujú sa prístupové práva súboru mailbox"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: používateľ „%s“ už existuje\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: skupina %s už existuje - ak chcete pridať tohto používateľa do tejto "
+"skupiny, použijte -g.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: nie je možné vytvoriť používateľa\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %lu nie je jedinečný\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: nedá sa vytvoriť adresár %s\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: sa nedá vytvoriť skupina\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: nie je možné vytvoriť používateľa\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: sa nedá vytvoriť skupina\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: upozornenie: domovský adresár už existuje.\n"
+"Zo skel adresára sa tam neskopíruje žiaden súbor.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+" -f, --force vynúti odstránenie súborov, aj keď\n"
+" používateľ nie je ich vlastníkom\n"
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+" -r, --remove odstráni domovský adresár a súbory s poštou\n"
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr "%s: nie je možné odstrniť primárnu skupinu používateľa „%s“.\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: skupina %s sa nedá odstrániť, pretože je primárnou skupinou iného "
+"používateľa.\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "%s: nie je možné odstrániť položku „%s“ z %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: chybný domovský adresár „%s“\n"
+
+#, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: upozornenie: nemôžem odstrániť %s: %s\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: vlastníkom %s nie je %s, nemažem ho\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: zlyhalo odstránenie právomocí (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "lastlog: Nepodarilo sa zistiť veľkosť %s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: nie je možné odstrániť položku „%s“ z %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: používateľ %s je NIS používateľom\n"
+
+#, fuzzy, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: chybný domovský adresár „%s“\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s: adresár %s nebudem mazať (je to domovský adresár používateľa %s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: chyba pri mazaní adresára %s\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: chyba pri mazaní adresára %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr " -c, --comment KOMENTÁR nová hodnota poľa GECOS\n"
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+" -d, --home DOM_ADR nový domovský adresár pre nový "
+"používateľský\n"
+" účet\n"
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -e, --expiredate EXP_DATUM nastaví čas vypršania platnosti účtu na\n"
+" EXP_DATUM\n"
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -f, --inactive NEAKTIV zablokuje platnosť hesla po NEAKTIV dňoch\n"
+" od času vypršania platnosti\n"
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+" -g, --gid SKUPINA vynúti použitie skupiny SKUPINA ako novej\n"
+" prvotnej prihlasovacej skupiny\n"
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr " -G, --groups SKUPINY zobrazí prídavné skupiny\n"
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr " -l, --login LOGIN nová hodnota prihlasovacieho mena\n"
+
+msgid " -L, --lock lock the user account\n"
+msgstr " -L, --lock zablokuje používateľský účet\n"
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+" -m, --move-home presunie obsah domovského adresára do "
+"nového\n"
+" umiestnenia (používať iba s -d)\n"
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique dovolí použitie duplicitného\n"
+" (nejedinečného) UID\n"
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+" -p, --password HESLO ako nové heslo použije zadané zašifrované\n"
+" HESLO\n"
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr " -u, --uid UID nový UID pre používateľský účet\n"
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr " -U, --unlock odblokuje používateľský účet\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 ""
+
+#, fuzzy
+msgid ""
+" -Z, --selinux-user SEUSER new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+" -d, --home DOM_ADR nový domovský adresár pre nový "
+"používateľský\n"
+" účet\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: odomknutie používateľa by malo za následok účet bez hesla.\n"
+"Tento účet by ste mali odomknúť nastavením hesla pomocou usermod -p.\n"
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: používateľ %s už existuje v %s\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: chybný dátum „%s“\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: chybný dátum „%s“\n"
+
+#, fuzzy, c-format
+msgid "%s: no options\n"
+msgstr "%s: súbor %s sa nedá otvoriť\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: prepínače -L, -p a -U sa navzájom vylučujú\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: prepínače -e a -f vyžadujú tieňové heslá\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: UID „%lu“ už existuje\n"
+
+#, fuzzy, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr "%s: %s nemá oprávnenie zmeniť heslo %s\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: adresár %s už existuje\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: nedá sa vytvoriť adresár %s\n"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: upozornenie: chyba pri úplnom odstraňovaní starého domovského adresára %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: adresár %s sa nedá premenovať na %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: Nepodarilo sa skopírovať položku lastlog používateľa %lu používateľovi "
+"%lu: %s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: Nepodarilo sa skopírovať položku faillog používateľa %lu používateľovi "
+"%lu: %s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: upozornenie: vlastníkom %s nie je %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "chyba pri zmene vlastníka schránky"
+
+msgid "failed to rename mailbox"
+msgstr "chyba pri premenovaní schránky"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s: zlyhalo pripravenie novej položky %s „%s“\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s: zlyhalo pripravenie novej položky %s „%s“\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s: zlyhalo pripravenie novej položky %s „%s“\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s: zlyhalo pripravenie novej položky %s „%s“\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Zmenili ste %s.\n"
+"Kvôli zachovaniu konzistentnosti budete možno musieť zmeniť %s.\n"
+"Prosím, urobte tak príkazom „%s“.\n"
+
+msgid " -g, --group edit group database\n"
+msgstr " -g, --group upraví databázu skupín\n"
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr " -p, --passwd upraví databázu passwd\n"
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr " -s, --shadow upraví databázu shadow alebo gshadow\n"
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: zlyhalo odstránenie %s\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: %s je bez zmien\n"
+
+#, fuzzy
+msgid "failed to create scratch directory"
+msgstr "chyba pri premenovaní schránky"
+
+msgid "failed to drop privileges"
+msgstr "zlyhalo odstránenie právomocí"
+
+#, fuzzy
+msgid "Couldn't get file context"
+msgstr "Súbor sa nedá zamknúť"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+#, fuzzy
+msgid "failed to gain privileges"
+msgstr "%s: zlyhalo odstránenie právomocí (%s)\n"
+
+msgid "Couldn't lock file"
+msgstr "Súbor sa nedá zamknúť"
+
+msgid "Couldn't make backup"
+msgstr "Nedá sa vytvoriť záloha"
+
+#, 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: %s sa nenachádza v /etc/passwd\n"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+#, fuzzy
+msgid "failed to open scratch file"
+msgstr "Súbor so skupinami sa nedá otvoriť\n"
+
+#, fuzzy
+msgid "failed to unlink scratch file"
+msgstr "%s: nepodarilo sa odmknúť %s\n"
+
+#, fuzzy
+msgid "failed to stat edited file"
+msgstr "chyba pri premenovaní schránky"
+
+#, fuzzy
+msgid "failed to allocate memory"
+msgstr "chyba pri zmene vlastníka schránky"
+
+#, fuzzy
+msgid "failed to create backup file"
+msgstr "chyba pri premenovaní schránky"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: %s sa nedá obnoviť: %s (zmeny sú v %s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: chybný základný adresár „%s“\n"
+
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr ""
+#~ "Použitie: vipw [voľby]\n"
+#~ "\n"
+#~ "Voľby:\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "volanie malloc(%d) zlyhalo\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: chage [options] [LOGIN]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -d, --lastday LAST_DAY set last password change to LAST_DAY\n"
+#~| " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -l, --list show account aging information\n"
+#~| " -m, --mindays MIN_DAYS set minimum number of days before "
+#~| "password\n"
+#~| " change to MIN_DAYS\n"
+#~| " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~| "password\n"
+#~| " change to MAX_DAYS\n"
+#~| " -W, --warndays WARN_DAYS set expiration warning days to "
+#~| "WARN_DAYS\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použitie: chage [voľby] používateľ\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday POSL_DEN nastaví dátum poslednej zmeny hesla na "
+#~ "POSL_DEN\n"
+#~ " -E, --expiredate EXP_DATUM nastaví dátum vypršania platnosti účtu "
+#~ "na\n"
+#~ " EXP_DATUM\n"
+#~ " -h, --help zobrazí tohto pomocníka a ukončí sa\n"
+#~ " -I, --inactive NEAKTIV nastaví nefunkčnosť hesla na NEAKTIV dní\n"
+#~ " po vypršaní platnosti účtu\n"
+#~ " -l, --list zobrazí časové údaje o účte\n"
+#~ " -m, --mindays MIN_DNÍ nastaví minimálny počet dní pred zmenou\n"
+#~ " hesla na MIN_DNÍ\n"
+#~ " -M, --maxdays MAX_DNÍ nastaví maximálny počet dní pred zmenou\n"
+#~ " hesla na MAX_DNÍ\n"
+#~ " -W, --warndays UPOZ_DNÍ nastaví upozornenie o platnosti účtu na "
+#~ "UPOZ_DNÍ\n"
+#~ "\n"
+
+# c-format
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: PAM autentifikácia zlyhala\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "Použitie: %s [-f celé_meno] [-r číslo_miestnosti] [-w "
+#~ "telefón_do_zamestnania]\n"
+#~ "\t[-h telefón_domov] [-o ostatné] [používateľ]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr ""
+#~ "Použitie: %s [-f celé_meno] [-r číslo_miestnosti] [-w "
+#~ "telefón_do_zamestnania]\n"
+#~ "\t[-h telefón_domov]\n"
+
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Použitie: %s [voľby]\n"
+#~ "\n"
+#~ "Voľby:\n"
+#~ " -c, --crypt-method metóda šifrovania (jedna z %s)\n"
+#~ " -e, --encrypted zadané heslá sú zakódované\n"
+#~ " -h, --help vypíše tohto pomocníka a ukončí sa\n"
+#~ " -m, --md5 použije MD5 kódovanie namiesto DES, ak\n"
+#~ " zadané heslá nie sú zakódované\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použitie: chsh [voľby] ÚČET\n"
+#~ "\n"
+#~ "Voľby:\n"
+#~ " -h, --help zobrazí tohto pomocníka a ukončí sa\n"
+#~ " -s, --shell SHELL nový prihlasovací shell používateľského "
+#~ "účtu\n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "Použitie: expiry {-f|-c}\n"
+
+#, fuzzy
+#~| msgid "faillog: Failed to get the entry for UID %d\n"
+#~ msgid "faillog: Failed to get the entry for UID %lu\n"
+#~ msgstr "faillog: Nepodarilo sa získať položku s UID %d\n"
+
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "faillog: Súbor %s sa nedá otvoriť: %s\n"
+
+#~ msgid "faillog: Cannot get the size of %s: %s\n"
+#~ msgstr "faillog: Nepodarilo sa zistiť veľkosť %s: %s\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "Použitie: groupdel skupina\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr ""
+#~ "Použitie: %s [-r] [-s] [súbor_so_skupinami "
+#~ "[súbor_s_tieňovými_skupinami]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "Použitie: %s [-r] [-s] [súbor_so_skupinami]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: -s a -r nie sú zlučiteľné\n"
+
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "Použitie: grpconv\n"
+
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "Použitie: grpunconv\n"
+
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použitie: lastlog [voľby]\n"
+#~ "\n"
+#~ "Voľby:\n"
+#~ " -b, --before DAYS vypíše posledné prihlásenia staršie ako DAYS dní\n"
+#~ " -h, --help zobrazí tohto pomocníka a ukončí sa\n"
+#~ " -t, --time DAYS vypíše posledné prihlásenia nie staršie ako DAYS "
+#~ "dní\n"
+#~ " -u, --user LOGIN vypíše posledné prihlásenia používateľa "
+#~ "uvedeného\n"
+#~ " ako LOGIN\n"
+
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použitie: passwd [voľby] [ÚČET]\n"
+#~ "\n"
+#~ "Voľby:\n"
+#~ " -a, --all zobrazí stav hesiel pre všetky účty\n"
+#~ " -d, --delete odstráni heslo pre zadaný účet\n"
+#~ " -e, --expire vynúti platnosť hesla pre zadaný účet\n"
+#~ " -h, --help zobrazí tohto pomocníka a ukončí sa\n"
+#~ " -k, --keep-tokens zmení heslo iba v prípade vypršania času\n"
+#~ " jeho platnosti\n"
+#~ " -i, --inactive INACTIVE nastaví neplatnosť hesla po vypršaní "
+#~ "času\n"
+#~ " platnosti na INACTIVE dní\n"
+#~ " -l, --lock zablokuje zadaný účet\n"
+#~ " -n, --mindays MIN_DNÍ nastaví minimálny počet dní pred zmenou\n"
+#~ " hesla na MIN_DNÍ dní\n"
+#~ " -q, --quiet stručný režim\n"
+#~ " -r, --repository REPOSITORY zmení heslo v repozitári REPOSITORY\n"
+#~ " -S, --status zobrazí stav hesla pre zadaný účet\n"
+#~ " -u, --unlock odblokuje zadaný účet\n"
+#~ " -w, --warndays WARN_DAYS nastaví počet dní na upozornenie o "
+#~ "vypršaní\n"
+#~ " platnosti na WARN_DAYS dní\n"
+#~ " -x, --maxdays MAX_DNÍ nastaví maximálny počet dní pred zmenou\n"
+#~ " hesla na MAX_DNÍ dní\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr ""
+#~ "Použitie: %s [-q] [-r] [-s] [súbor_s_heslami "
+#~ "[súbor_s_tieňovými_heslami]]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr ""
+#~ "Použitie: %s [-q] [-r] [-s] [súbor_s_heslami "
+#~ "[súbor_s_tieňovými_heslami]]\n"
+
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "Použitie: pwconv\n"
+
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "Použitie: pwunconv\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "Id %s je neznáme.\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "Žiadny shell\n"
+
+#~ msgid ""
+#~ "Usage: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force removal of files,\n"
+#~ " even if not owned by user\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -r, --remove remove home directory and mail spool\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použitie: userdel [voľby] LOGIN\n"
+#~ "\n"
+#~ "Voľby:\n"
+#~ " -f, --force vynúti odstránenie súborov, aj keď\n"
+#~ " používateľ nie je ich vlastníkom\n"
+#~ " -h, --help zobrazí tohto pomocníka a ukončí sa\n"
+#~ " -r, --remove odstráni domovský adresár a súbory s "
+#~ "poštou\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: usermod [options] LOGIN\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -c, --comment COMMENT new value of the GECOS field\n"
+#~| " -d, --home HOME_DIR new home directory for the user account\n"
+#~| " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -g, --gid GROUP force use GROUP as new primary group\n"
+#~| " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~| " -a, --append append the user to the supplemental "
+#~| "GROUPS\n"
+#~| " mentioned by the -G option without "
+#~| "removing\n"
+#~| " 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"
+#~| " -m, --move-home move contents of the home directory to "
+#~| "the\n"
+#~| " new location (use only with -d)\n"
+#~| " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~| " -p, --password PASSWORD use encrypted password for the new "
+#~| "password\n"
+#~| " -s, --shell SHELL new login shell for the user account\n"
+#~| " -u, --uid UID new UID for the user account\n"
+#~| " -U, --unlock unlock the user account\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Použitie: usermod [voľby] ÚČET\n"
+#~ "\n"
+#~ "Voľby:\n"
+#~ " -c, --comment KOMENTÁR nová hodnota poľa GECOS\n"
+#~ " -d, --home DOM_ADR nový domovský adresár pre nový "
+#~ "používateľský\n"
+#~ " účet\n"
+#~ " -e, --expiredate EXP_DATUM nastaví čas vypršania platnosti účtu na\n"
+#~ " EXP_DATUM\n"
+#~ " -f, --inactive NEAKTIV zablokuje platnosť hesla po NEAKTIV "
+#~ "dňoch\n"
+#~ " od času vypršania platnosti\n"
+#~ " -g, --gid SKUPINA vynúti použitie skupiny SKUPINA ako "
+#~ "novej\n"
+#~ " prvotnej prihlasovacej skupiny\n"
+#~ " -G, --groups SKUPINY zobrazí prídavné skupiny\n"
+#~ " -a, --append SKUPINA pridá používateľa do ďalšej skupiny\n"
+#~ " -h, --help zobrazí tohto pomocníka a ukončí sa\n"
+#~ " -l, --login LOGIN nová hodnota prihlasovacieho mena\n"
+#~ " -L, --lock zablokuje používateľský účet\n"
+#~ " -m, --move-home presunie obsah domovského adresára do "
+#~ "nového\n"
+#~ " umiestnenia (používať iba s -d)\n"
+#~ " -o, --non-unique dovolí použitie duplicitného\n"
+#~ " (nejedinečného) UID\n"
+#~ " -p, --password HESLO ako nové heslo použije zadané "
+#~ "zašifrované\n"
+#~ " HESLO\n"
+#~ " -s, --shell SHELL nový prihlasovací shell pre "
+#~ "používateľský\n"
+#~ " účet\n"
+#~ " -u, --uid UID nový UID pre používateľský účet\n"
+#~ " -U, --unlock odblokuje používateľský účet\n"
+#~ "\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s: žiadne prepínače\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: vipw [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -g, --group edit group database\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -p, --passwd edit passwd database\n"
+#~| " -q, --quiet quiet mode\n"
+#~| " -s, --shadow edit shadow or gshadow database\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group edit group database\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -p, --passwd edit passwd database\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow edit shadow or gshadow database\n"
+#~ " -u, --user which user's tcb shadow file to edit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použitie: vipw [voľby]\n"
+#~ "\n"
+#~ "Voľby:\n"
+#~ " -g, --group upraví databázu skupín\n"
+#~ " -h, --help zobrazí tohto pomocníka a ukončí sa\n"
+#~ " -p, --passwd upraví databázu passwd\n"
+#~ " -q, --quiet stručný režim\n"
+#~ " -s, --shadow upraví databázu shadow alebo gshadow\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: %s [option] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --add USER add USER to GROUP\n"
+#~ " -d, --delete USER remove USER from GROUP\n"
+#~ " -r, --remove-password remove the GROUP's password\n"
+#~ " -R, --restrict restrict access to GROUP to its members\n"
+#~ " -M, --members USER,... set the list of members of GROUP\n"
+#~ "%s\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použitie: %s [voľba] SKUPINA\n"
+#~ "\n"
+#~ "Voľby:\n"
+#~ " -a, --add POUŽ pridať POUŽ do SKUPINY\n"
+#~ " -d, --delete POUŽ odstrániť POUŽ zo SKUPINY\n"
+#~ " -r, --remove-password odstrániť heslo SKUPINY\n"
+#~ " -R, --restrict obmedziť prístup do SKUPINY iba na jej "
+#~ "členov\n"
+#~ " -M, --members POUŽ,... nastaviť zoznam členov SKUPINY\n"
+#~ "%s\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmems [options] [action]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group groupname change groupname instead of the user's "
+#~ "group\n"
+#~ " (root only)\n"
+#~ "\n"
+#~ "Actions:\n"
+#~ " -a, --add username add username to the members of the group\n"
+#~ " -d, --delete username remove username from the members of the "
+#~ "group\n"
+#~ " -p, --purge purge all members from the group\n"
+#~ " -l, --list list the members of the group\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použitie: groupmems [voľby] [operácia]\n"
+#~ "\n"
+#~ "Voľby:\n"
+#~ " -g, --group groupname zmeniť názov skupiny namiesto skupiny "
+#~ "používateľa\n"
+#~ " (iba root)\n"
+#~ "\n"
+#~ "Actions:\n"
+#~ " -a, --add používateľ pridať používateľa medzi členov skupiny\n"
+#~ " -d, --delete používateľ odobrať používateľa spomedzi členov "
+#~ "skupiny\n"
+#~ " -p, --purge odstrániť všetkých členov skupiny\n"
+#~ " -l, --list vypísať členov skupiny\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Použitie: %s [vstup]\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s: %s sa nedá vytvoriť\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s: volanie chown pre %s zlyhalo\n"
+
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all display faillog records for all users\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -l, --lock-time SEC after failed login lock account to SEC "
+#~ "seconds\n"
+#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
+#~ " -r, --reset reset the counters of login failures\n"
+#~ " -t, --time DAYS display faillog records more recent than "
+#~ "DAYS\n"
+#~ " -u, --user LOGIN display faillog record or maintains "
+#~ "failure\n"
+#~ " counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ " options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použitie: faillog [voľby]\n"
+#~ "\n"
+#~ "Voľby:\n"
+#~ " -a, --all zobrazí faillog záznamy všetkých používateľov\n"
+#~ " -h, --help zobrazí tohto pomocníka a ukončí sa\n"
+#~ " -l, --lock-time SEC po chybnom prihlásení zablokuje účet na SEC "
+#~ "sekúnd\n"
+#~ " -m, --maximum MAX nastaví maximálny počet chybných prihlásení na "
+#~ "MAX\n"
+#~ " -r, --reset vynuluje počítadlá chybných prihlásení\n"
+#~ " -t, --time DAYS zobrazí záznamy faillog nie staršie ako DAYS dní\n"
+#~ " -u, --user LOGIN zobrazí záznam faillog alebo nastaví počítadlá\n"
+#~ " chybných prihlásení a limitov (iba s použitím "
+#~ "volieb\n"
+#~ " -r, -m or -l) pre používateľa s loginom LOGIN\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force exit with success status if the\n"
+#~ " specified group already exists\n"
+#~ " -g, --gid GID use GID for the new group\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique allow create group with duplicate\n"
+#~ " (non-unique) GID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new group\n"
+#~ " -r, --system create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použitie: groupadd [voľby] SKUPINA\n"
+#~ "\n"
+#~ "Voľby:\n"
+#~ " -f, --force vynúti úspešnú návratovú hodnotu aj "
+#~ "napriek\n"
+#~ " existencii zadanej skupiny\n"
+#~ " -g, --gid GID pre novú skupinu použije GID\n"
+#~ " -h, --help zobrazí tohto pomocníka a ukončí sa\n"
+#~ " -K, --key KEY=VALUE nahradí predvolené hodnoty z /etc/login."
+#~ "defs\n"
+#~ " -o, --non-unique povolí vytvorenie skupiny s duplicitným\n"
+#~ " (nejedinečným) GID\n"
+#~ " -p, --password PASSWORD použije pre novú skupinu šifrované heslo\n"
+#~ " -r, --system vytvorí systémový účet\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --gid GID force use new GID by GROUP\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použitie: groupmod [voľby] SKUPINA\n"
+#~ "\n"
+#~ "Voľby:\n"
+#~ " -g, --gid GID pre novú skupinu použije GID\n"
+#~ " -h, --help zobrazí tohto pomocníka a ukončí sa\n"
+#~ " -n, --new-name NOVÁ_SKUP vynúti pre SKUPINu meno NOVÁ_SKUP\n"
+#~ " -o, --non-unique povolí vytvorenie skupiny s duplicitným\n"
+#~ " (nejedinečným) GID\n"
+#~ " -p, --password PASSWORD nové heslo bude šifrované\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: useradd [options] LOGIN\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~| " home directory\n"
+#~| " -c, --comment COMMENT set the GECOS field for the new user "
+#~| "account\n"
+#~| " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~| " -D, --defaults print or save modified default useradd\n"
+#~| " configuration\n"
+#~| " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -g, --gid GROUP force use GROUP for the new user "
+#~| "account\n"
+#~| " -G, --groups GROUPS list of supplementary groups for the "
+#~| "new\n"
+#~| " user account\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~| " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~| " -l, --no-log-init do not add the user to the lastlog and\n"
+#~| " faillog databases\n"
+#~| " -m, --create-home create home directory for the new user\n"
+#~| " account\n"
+#~| " -M, --no-create-home do not create user's home directory\n"
+#~| " (overrides /etc/login.defs)\n"
+#~| " -N, --no-user-group do not create a group with the same name "
+#~| "as\n"
+#~| " the user\n"
+#~| " -o, --non-unique allow create user with duplicate\n"
+#~| " (non-unique) UID\n"
+#~| " -p, --password PASSWORD use encrypted password for the new user\n"
+#~| " account\n"
+#~| " -r, --system create a system account\n"
+#~| " -s, --shell SHELL the login shell for the new user "
+#~| "account\n"
+#~| " -u, --uid UID force use the UID for the new user "
+#~| "account\n"
+#~| " -U, --user-group create a group with the same name as the "
+#~| "user\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~ " home directory\n"
+#~ " -c, --comment COMMENT set the GECOS field for the new user "
+#~ "account\n"
+#~ " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~ " -D, --defaults print or save modified default useradd\n"
+#~ " configuration\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP for the new user account\n"
+#~ " -G, --groups GROUPS list of supplementary groups for the new\n"
+#~ " user account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -l, --no-log-init do not add the user to the lastlog and\n"
+#~ " faillog databases\n"
+#~ " -m, --create-home create home directory for the new user\n"
+#~ " account\n"
+#~ " -M, --no-create-home do not create user's home directory\n"
+#~ " (overrides /etc/login.defs)\n"
+#~ " -N, --no-user-group do not create a group with the same name "
+#~ "as\n"
+#~ " the user\n"
+#~ " -o, --non-unique allow create user with duplicate\n"
+#~ " (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new user\n"
+#~ " account\n"
+#~ " -r, --system create a system account\n"
+#~ " -s, --shell SHELL the login shell for the new user account\n"
+#~ " -u, --uid UID force use the UID for the new user "
+#~ "account\n"
+#~ " -U, --user-group create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Použitie: useradd [voľby] ÚČET\n"
+#~ "\n"
+#~ "Voľby:\n"
+#~ " -b, --base-dir ZÁKL_ADR základný adresár domovského adresára "
+#~ "nového\n"
+#~ " používateľského účtu\n"
+#~ " -c, --comment KOMENTÁR nastaví pole GECOS nového účtu\n"
+#~ " -d, --home-dir DOM_ADR domovský adresár nového účtu\n"
+#~ " -D, --defaults vypíše alebo nastaví predvolené "
+#~ "nastavenia\n"
+#~ " programu useradd\n"
+#~ " -e, --expiredate EXP_DATUM nastaví čas vypršania platnosti účtu na\n"
+#~ " EXP_DATUM\n"
+#~ " -f, --inactive NEAKTIV zablokuje účet po NEAKTIV dňoch od času\n"
+#~ " vypršania platnosti\n"
+#~ " -g, --gid SKUPINA vynúti použitie tejto skupiny pre nový "
+#~ "účet\n"
+#~ " -G, --groups SKUPINY zoznam ďalších skupín, do ktorých má\n"
+#~ " patriť nový účet\n"
+#~ " -h, --help zobrazí tohto pomocníka a skončí\n"
+#~ " -k, --skel VZOR_ADR zadá alternatívny vzorový adresár\n"
+#~ " -K, --key KĽÚČ=HODNOTA nahradí predvolené nastavenia /etc/login."
+#~ "defs\n"
+#~ " -l, --no-log-init nepridávať používateľa do databáz\n"
+#~ " lastlog a faillog \n"
+#~ " -m, --create-home vytvorí domovský adresár pre nový\n"
+#~ " používateľský účet\n"
+#~ " -N, --no-user-group nevytvorí skupinu s rovnakým menom\n"
+#~ " ako má používateľ\n"
+#~ " -o, --non-unique povolí vytvorenie používateľa s "
+#~ "duplicitným\n"
+#~ " (nejedinečným) UID\n"
+#~ " -p, --password HESLO pre nový účet použije zadané zašifrované\n"
+#~ " heslo\n"
+#~ " -r, --system vytvorí systémový účet\n"
+#~ " -s, --shell SHELL prihlasovací shell nového účtu\n"
+#~ " -u, --uid UID vynúti použitie tohto UID pre nový účet\n"
+#~ " -U, --user-group vytvorí skupinu s rovnakým menom\n"
+#~ " ako má používateľ\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: %s [options] [input]\n"
+#~ "\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -r, --system create system accounts\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Použitie: %s [voľby] [vstup]\n"
+#~ "\n"
+#~ " -c, --crypt-method metóda šifrovania (jedna z %s)\n"
+#~ " -r, --system vytorí systémové účty\n"
+#~ "%s\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Uplynula platnosť vášho hesla."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: súbor s heslami sa nedá zamknúť\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: súbor s heslami sa nedá otvoriť\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: súbor s tieňovými heslami sa nedá zamknúť\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: súbor s tieňovými heslami sa nedá otvoriť\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: súbor s tieňovými heslami sa nedá prepísať\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: súbor s heslami sa nedá prepísať\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: súbor s tieňovými heslami sa nedá aktualizovať\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tCelé meno: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tČíslo miestnosti: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tTelefón do zamestnania: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tTelefón domov: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "Nedá sa zamknúť súbor s heslami; skúste to neskôr.\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "Súbor s heslami sa nedá otvoriť.\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Chyba pri aktualizácii záznamu hesla.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Nedajú sa vykonať zmeny v súbore s heslami.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Súbor s heslami sa nedá odomknúť.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: súbor so skupinami sa nedá zamknúť\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: súbor s tieňovými heslami skupín sa nedá zamknúť\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: súbor s tieňovými heslami sa nedá otvoriť\n"
+
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: chyba pri aktualizácii súboru gshadow\n"
+
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: chyba pri aktualizácii súboru so skupinami\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: riadok %d: skupina %s je neznáma\n"
+
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: riadok %d: sa nedá aktualizovať položka súboru so skupinami\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: súbor s tieňovými heslami sa nedá zamknúť\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: chyba pri aktualizácii súboru s tieňovými heslami\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: chyba pri aktualizácii súboru s heslami\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: riadok %d: používateľ %s je neznámy\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: riadok %d: záznam hesla sa nedá aktualizovať\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: neznámy používateľ\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Používateľ %s je neznámy.\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Použitie: %s [-r|-R] skupina\n"
+
+#~ msgid " %s [-a user] group\n"
+#~ msgstr " %s [-a používateľ] skupina\n"
+
+#~ msgid " %s [-d user] group\n"
+#~ msgstr " %s [-d používateľ] skupina\n"
+
+#~ msgid " %s [-A user,...] [-M user,...] group\n"
+#~ msgstr " %s [-A používateľ,...] [-M používateľ,...] skupina\n"
+
+#~ msgid " %s [-M user,...] group\n"
+#~ msgstr " %s [-M používateľ,...] skupina\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: nedá sa získať zámok\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: nedá sa získať zámok pre súbor s tieňovými heslami\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: súbor s tieňovými heslami sa nedá prepísať\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: súbor sa nedá odomknúť\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: položka sa nedá aktualizovať\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: položka súboru s tieňovými heslami sa nedá aktualizovať\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "skupina %s je neznáma\n"
+
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: nedá sa zatvoriť súbor\n"
+
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: súbor s tieňovými heslami sa nedá zatvoriť\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Kto ste?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: člen %s je neznámy\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: chyba pri pridávaní položky do súboru so skupinami\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: súbor so skupinami sa nedá prepísať\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: súbor s tieňovými skupinami sa nedá prepísať\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: súbor so skupinami sa nedá zamknúť\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: súbor so skupinami sa nedá otvoriť\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: súbor s tieňovými skupinami sa nedá zamknúť\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: súbor s tieňovými skupinami sa nedá otvoriť\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u nie je jedinečný\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: chyba pri odstraňovaní položky zo súboru so skupinami\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr ""
+#~ "%s: chyba pri odstraňovaní položky zo súboru s tieňovými skupinami\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: primárna skupina používateľa sa nedá odstrániť\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Nebolo možné nájsť člena, ktorého chcete odstrániť\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr ""
+#~ "Použitie: groupmems -a používateľ | -d používateľ | -D | -l [-g skupina]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Iba root môže pridávať používateľov do rôznych skupín\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "Vyžaduje sa prístup pre skupinu\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "Nie ste primárnym vlastníkom aktuálnej skupiny\n"
+
+# c-format
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "zlyhalo overenie PAM\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "Súbor so skupinami sa nedá zamknúť\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "Súbor so skupinami sa nedá zatvoriť\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s sa nenachádza v /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: GID %u nie je jedinečný\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: meno %s nie je jedinečné\n"
+
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: súbor passwd sa nedá prepísať\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: súbor s heslami sa nedá zamknúť\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: súbor s heslami sa nedá otvoriť\n"
+
+#~ msgid ""
+#~ "%s: cannot change the primary group of user '%s' from %u to %u, since it "
+#~ "is not in the passwd file.\n"
+#~ msgstr ""
+#~ "%s: nie je možné zmeniť primárnu skupinu používateľa „%s“ z %u na %u, "
+#~ "pretože nie je v súbore passwd.\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: položka %s súboru s tieňovými heslami sa nedá aktualizovať\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: položka skupiny %s sa nedá odstrániť\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: súbor s tieňovými skupinami sa nedá zamknúť\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: súbor s tieňovými skupinami sa nedá otvoriť\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: položka tieňovej skupiny %s sa nedá odstrániť\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: súbor s tieňovými heslami sa nedá aktualizovať\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: súbor s tieňovými heslami skupín sa nedá zmazať\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "neznámy UID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "neznámy GID %lu\n"
+
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: ID skupiny „%s“ nie je platn7\n"
+
+#~ msgid ""
+#~ "%s: group %s created, failure during the creation of the corresponding "
+#~ "gshadow group\n"
+#~ msgstr ""
+#~ "%s: skupina %s bola vytvorená, zlyhalo vytvorenie zodpovedajúcej skupiny "
+#~ "gshadow\n"
+
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: ID používateľa „%s“ nie je platný\n"
+
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: chybné používateľské meno „%s“\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: súbor /etc/passwd sa nedá zamknúť\n"
+
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: súbor /etc/passwd sa nedá zamknúť\n"
+
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: súbor /etc/group sa nedá zamknúť\n"
+
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: súbor /etc/gshadow sa nedá zamknúť\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: súbory sa nedajú otvoriť\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr ""
+#~ "%s: položka súboru s heslami pre používateľe %s sa nedá aktualizovať\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: súbor s heslami sa nedá zamknúť\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: súbor s heslami sa nedá otvoriť\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: položka súboru s heslami pre používateľe %s sa nedá odstrániť\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: súbor s heslami sa nedá aktualizovať\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: položka pre používateľa %s sa nedá aktualizovať\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: nemôžete zmazať súbor s tieňovými heslami\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: neznámy GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: neznáma skupina %s\n"
+
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr ""
+#~ "%s: Nedostatok pamäti. Nie je možné aktualizovať databázu tieňových "
+#~ "skupín.\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: súbor s tieňovými heslami sa nedá prepísať\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: súbor s tieňovými heslami sa nedá zamknúť\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: súbor s tieňovými heslami sa nedá otvoriť\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: chyba pri zamykaní súboru so skupinami\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: chyba pri otváraní súboru so skupinami\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: chyba pri zamykaní súboru s tieňovými heslami\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: chyba pri otváraní súboru s tieňovými heslami\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: chyba pri vytváraní novej položky v súbore s heslami\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr ""
+#~ "%s: chyba pri vytváraní novej položky v súbore s tieňovými heslami\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr ""
+#~ "%s: varovanie: CREATE_HOME nie je podporované, použijte prepínač -m.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: položka súboru so skupinami sa nedá aktualizovať\n"
+
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: chyba pri aktualizácii záznamu súboru so skupinami\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: súbor so skupinami sa nedá otvoriť\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: súbor s tieňovými skupinami sa nedá otvoriť\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: chyba pri odstraňovaní položky zo súboru s heslami\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: chyba pri odstraňovaní položky zo súboru s tieňovými heslami\n"
+
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: chyba pri pridávaní položky do súboru so skupinami\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s uid %lu nie je jedinečný\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: chyba pri zmene položky v súbore s heslami\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: chyba pri odstraňovaní položky zo súboru s heslami\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: chyba pri odstraňovaní položky zo súboru s tieňovými heslami\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: nedá sa vytvoriť jedinečný GID\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " na '%.100s' z '%.200s'"
+
+#~ msgid " on '%.100s'"
+#~ msgstr " na '%.100s'"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: riadok %d: nedá sa vytvoriť UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: meno %s nie je jedinečné\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ " -h, --help\t\tdisplay this help message and exit\n"
+#~ " -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použitie: chgpasswd [voľby]\n"
+#~ "\n"
+#~ "Voľby:\n"
+#~ " -e, --encrypted\tzadané heslá sú zakódované\n"
+#~ " -h, --help\t\tvypíše túto nápovedu a ukončí sa\n"
+#~ " -m, --md5\t\tpoužije MD5 kódovanie namiesto DES, ak zadané\n"
+#~ "\t\t\theslá nie sú zakódované\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Súbor s heslami neexistuje\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Ľutujem.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Ľutujem, ale heslo pre %s sa ešte nedá zmeniť.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Ľutujem."
diff --git a/po/sq.gmo b/po/sq.gmo
new file mode 100644
index 0000000..3592972
--- /dev/null
+++ b/po/sq.gmo
Binary files differ
diff --git a/po/sq.po b/po/sq.po
new file mode 100644
index 0000000..f821b67
--- /dev/null
+++ b/po/sq.po
@@ -0,0 +1,2626 @@
+# Albanian translation of shadow.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Elian Myftiu <elian@lycos.com>, 2004.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.3\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2004-11-20 03:28+0100\n"
+"Last-Translator: Elian Myftiu <pinguini AT fastwebnet DOT it>\n"
+"Language-Team: Albanian <gnome-albanian-perkthyesit@lists.sourceforge.net>\n"
+"Language: sq\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr ""
+
+msgid "Password: "
+msgstr ""
+
+#, c-format
+msgid "%s's Password: "
+msgstr ""
+
+msgid "Cannot open audit interface.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr ""
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set sename for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Kujdes: ka shumë grupe\n"
+
+msgid "Your password has expired."
+msgstr "Fjalëkalimi yt ka skaduar."
+
+msgid "Your password is inactive."
+msgstr "Fjalëkalimi yt nuk është aktiv."
+
+msgid "Your login has expired."
+msgstr "Login-i yt ka skaduar."
+
+msgid " Contact the system administrator."
+msgstr " Kontakto administratorin e sistemit."
+
+msgid " Choose a new password."
+msgstr " Zgjidh një fjalëkalim të ri."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr ""
+
+#, fuzzy
+msgid "Your password will expire tomorrow."
+msgstr "Fjalëkalimi yt ka skaduar."
+
+#, fuzzy
+msgid "Your password will expire today."
+msgstr "Fjalëkalimi yt ka skaduar."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: "
+msgstr ""
+
+msgid ": "
+msgstr ""
+
+msgid "Environment overflow\n"
+msgstr ""
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Memory allocation failure\n"
+msgstr ""
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid map file %s specified\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Could not seteuid to %d\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Could not set caps\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: snprintf failed!\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: open of %s failed: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: write to %s failed: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+msgid "Too many logins.\n"
+msgstr ""
+
+msgid "You have new mail."
+msgstr ""
+
+msgid "No mail."
+msgstr ""
+
+msgid "You have mail."
+msgstr ""
+
+msgid "no change"
+msgstr ""
+
+msgid "a palindrome"
+msgstr ""
+
+msgid "case changes only"
+msgstr ""
+
+msgid "too similar"
+msgstr ""
+
+msgid "too simple"
+msgstr ""
+
+msgid "rotated"
+msgstr ""
+
+msgid "too short"
+msgstr ""
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr ""
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr ""
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr ""
+
+#, fuzzy
+msgid "passwd: password unchanged\n"
+msgstr "Fjalëkalimi yt ka skaduar."
+
+msgid "passwd: password updated successfully\n"
+msgstr ""
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: conversation type %d not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr ""
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr ""
+
+msgid "No directory, logging in with HOME=/"
+msgstr ""
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr ""
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user %s is currently used by process %d\n"
+msgstr ""
+
+msgid "Unable to determine your tty name."
+msgstr ""
+
+msgid "No"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr ""
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr ""
+
+msgid "Minimum Password Age"
+msgstr ""
+
+msgid "Maximum Password Age"
+msgstr ""
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr ""
+
+msgid "Password Expiration Warning"
+msgstr ""
+
+msgid "Password Inactive"
+msgstr ""
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr ""
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr ""
+
+msgid "never"
+msgstr ""
+
+msgid "password must be changed"
+msgstr ""
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr ""
+
+#, fuzzy
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Fjalëkalimi yt nuk është aktiv."
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr ""
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: PAM: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot open %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr ""
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr ""
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr ""
+
+msgid "Room Number"
+msgstr ""
+
+msgid "Work Phone"
+msgstr ""
+
+msgid "Home Phone"
+msgstr ""
+
+msgid "Other"
+msgstr ""
+
+msgid "Cannot change ID to root.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr ""
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr ""
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr ""
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr ""
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr ""
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr ""
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr ""
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr ""
+
+#, c-format
+msgid " [%lus left]"
+msgstr ""
+
+#, c-format
+msgid " [%lds lock]"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr ""
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr ""
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr ""
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+msgid "The options cannot be combined.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr ""
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr ""
+
+msgid "New Password: "
+msgstr ""
+
+msgid "Re-enter new password: "
+msgstr ""
+
+msgid "They don't match; try again"
+msgstr ""
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr ""
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr ""
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr ""
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid " -r, --system create a system account\n"
+msgstr ""
+
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+
+msgid "\n"
+msgstr ""
+
+msgid "Actions:\n"
+msgstr ""
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr ""
+
+msgid " -l, --list list the members of the group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr ""
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr ""
+
+msgid "invalid group file entry"
+msgstr ""
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr ""
+
+#, fuzzy
+msgid "duplicate group entry"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr ""
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr ""
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr ""
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr ""
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr ""
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr ""
+
+msgid "duplicate shadow group entry"
+msgstr ""
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr ""
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr ""
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr ""
+
+msgid "Usage: id\n"
+msgstr ""
+
+msgid " groups="
+msgstr ""
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+
+msgid "Username Port From Latest"
+msgstr ""
+
+msgid "Username Port Latest"
+msgstr ""
+
+msgid "**Never logged in**"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "Kujdes: grup i panjohur %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 ""
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr ""
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr ""
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s login: "
+msgstr ""
+
+msgid "login: "
+msgstr ""
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr ""
+
+msgid "login: abort requested by PAM\n"
+msgstr ""
+
+msgid "Login incorrect"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr ""
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr ""
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr ""
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr ""
+
+#, c-format
+msgid " from %.*s"
+msgstr ""
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+
+msgid "Usage: logoutd\n"
+msgstr ""
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, c-format
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr ""
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr " Zgjidh një fjalëkalim të ri.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr ""
+
+msgid "too many groups\n"
+msgstr ""
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid " -b, --badnames allow bad names\n"
+msgstr ""
+
+msgid " -r, --system create system accounts\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid " -q, --quiet quiet mode\n"
+msgstr ""
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid "Old password: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+
+msgid "New password: "
+msgstr ""
+
+msgid "Try again."
+msgstr ""
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+
+msgid "They don't match; try again.\n"
+msgstr ""
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr ""
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr ""
+
+#, c-format
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr ""
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr ""
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: password changed.\n"
+msgstr "Fjalëkalimi yt ka skaduar."
+
+#, fuzzy, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "Fjalëkalimi yt ka skaduar."
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid " -q, --quiet report errors only\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+
+#, fuzzy
+msgid "invalid password file entry"
+msgstr " Zgjidh një fjalëkalim të ri.\n"
+
+msgid "duplicate password entry"
+msgstr ""
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr ""
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr ""
+
+#, c-format
+msgid "no tcb directory for %s\n"
+msgstr ""
+
+#, c-format
+msgid "create tcb directory for %s?"
+msgstr ""
+
+#, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr ""
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr ""
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr ""
+
+msgid "duplicate shadow password entry"
+msgstr ""
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+msgid "Access to su to that account DENIED.\n"
+msgstr ""
+
+msgid "Password authentication bypassed.\n"
+msgstr ""
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr ""
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr ""
+
+msgid "Session terminated, terminating shell..."
+msgstr ""
+
+#, c-format
+msgid " ...killed.\n"
+msgstr ""
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr ""
+
+msgid " ...terminated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s\n"
+msgstr ""
+
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr ""
+
+msgid "(Enter your own password)"
+msgstr ""
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr ""
+
+#, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr ""
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "Cannot execute %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy
+msgid "No password file"
+msgstr "Fjalëkalimi yt ka skaduar."
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr ""
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+
+msgid "Entering System Maintenance Mode"
+msgstr ""
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr ""
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr ""
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr ""
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr ""
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: error while duplicating string %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr ""
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+
+msgid "Setting mailbox file permissions"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr ""
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr ""
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: error removing subvolume %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr ""
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr ""
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr ""
+
+msgid " -L, --lock lock the user account\n"
+msgstr ""
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr ""
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr ""
+
+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"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: no options\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr ""
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr ""
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr ""
+
+msgid "failed to change mailbox owner"
+msgstr ""
+
+msgid "failed to rename mailbox"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid " -g, --group edit group database\n"
+msgstr ""
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr ""
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "Fjalëkalimi yt ka skaduar."
+
+msgid "failed to create scratch directory"
+msgstr ""
+
+msgid "failed to drop privileges"
+msgstr ""
+
+msgid "Couldn't get file context"
+msgstr ""
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "failed to gain privileges"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr ""
+
+msgid "Couldn't make backup"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+msgid "failed to open scratch file"
+msgstr ""
+
+msgid "failed to unlink scratch file"
+msgstr ""
+
+msgid "failed to stat edited file"
+msgstr ""
+
+msgid "failed to allocate memory"
+msgstr ""
+
+msgid "failed to create backup file"
+msgstr ""
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Password set to expire."
+#~ msgstr "Fjalëkalimi yt ka skaduar."
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "Kujdes: grup i panjohur %s\n"
diff --git a/po/stamp-po b/po/stamp-po
new file mode 100644
index 0000000..9788f70
--- /dev/null
+++ b/po/stamp-po
@@ -0,0 +1 @@
+timestamp
diff --git a/po/sv.gmo b/po/sv.gmo
new file mode 100644
index 0000000..81d5bfd
--- /dev/null
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
new file mode 100644
index 0000000..6ca2d9a
--- /dev/null
+++ b/po/sv.po
@@ -0,0 +1,3351 @@
+# Swedish translation of shadow.
+# Copyright (C) 2006, 2008, 2011 Free Software Foundation, Inc.
+# This file is distributed under the same license as the shadow package.
+# Daniel Nylander <po@danielnylander.se>, 2006, 2008, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.1.1\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2011-11-25 22:08+0100\n"
+"Last-Translator: Daniel Nylander <yeager@ubuntu.com>\n"
+"Language-Team: Swedish <debian-l10n-swedish@lists.debian.org>\n"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"Flera poster med namnet \"%s\" finns i %s. Rätta till detta med pwck eller "
+"grpck.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "krypteringsmetoden stöds inte av libcrypt? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr "konfigurationsfel - kan inte tolka %s-värde: \"%s\""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Kunde inte allokera plats för konfigurationsinformationen.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "konfigurationsfel - okänd post \"%s\" (informera administratören)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr ""
+
+msgid "Password: "
+msgstr "Lösenord: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s lösenord: "
+
+msgid "Cannot open audit interface.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr ""
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not set sename for %s\n"
+msgstr "Kunde inte allokera plats för konfigurationsinformationen.\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "Ändrar åldersinformationen för %s\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "%s: Kan inte fastställa ditt användarnamn.\n"
+
+#, fuzzy, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "%s: Kan inte grena användarskal\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: slut på minne\n"
+
+#, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: Kan inte ta status på %s: %s\n"
+
+#, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: %s är varken en katalog eller symbolisk länk.\n"
+
+#, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: Kan inte läsa symboliska länken %s: %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr "%s: Misstänkt lång symbolisk länk: %s\n"
+
+#, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: Kan inte skapa katalogen %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: Kan inte byta ägare för %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: Kan inte ändra rättigheter för %s: %s\n"
+
+#, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: Kan inte ta bort katalogen %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: Kan inte byta namn på %s till %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: Kan inte ta bort %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: Kan inte skapa symboliska länken %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: Kan inte byta ägare för %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: Kan inte lstat %s: %s\n"
+
+#, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: Varning, användaren %s har ingen tcb shadow-fil.\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+"%s: Nödläge: tcb shadow för %s är inte en vanlig fil med st_nlink=1.\n"
+"Kontot lämnas kvar som låst.\n"
+
+#, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: mkdir: %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: Kan inte öppna %s: %s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Varning: okänd grupp %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Varning: för många grupper\n"
+
+msgid "Your password has expired."
+msgstr "Ditt lösenord har upphört att gälla."
+
+msgid "Your password is inactive."
+msgstr "Ditt lösenord är inaktivt."
+
+msgid "Your login has expired."
+msgstr "Ditt inloggningskonto har upphört att gälla."
+
+msgid " Contact the system administrator."
+msgstr " Kontakta systemadministratören."
+
+msgid " Choose a new password."
+msgstr " Välj ett nytt lösenord."
+
+msgid "You must change your password."
+msgstr "Du måste ändra ditt lösenord."
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Ditt lösenord upphör att gälla om %ld dagar.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Ditt lösenord upphör att gälla imorgon."
+
+msgid "Your password will expire today."
+msgstr "Ditt lösenord upphör att gälla idag."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Kunde inte ändra ägare eller rättigheter för tty standard in: %s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: misslyckades med att låsa upp %s\n"
+
+#, c-format
+msgid "%s: "
+msgstr "%s: "
+
+msgid ": "
+msgstr ": "
+
+msgid "Environment overflow\n"
+msgstr "Överskott av miljövariabler\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Du får inte ändra $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d misslyckade sedan förra inloggningen\n"
+"Senast var %s den %s.\n"
+msgstr[1] ""
+"%d misslyckanden sedan förra inloggningen\n"
+"Senast var %s den %s.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: Ogiltig konfiguration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr "%s: Ogiltig konfiguration: GID_MIN (%lu), GID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "%s: misslyckades att allokera minne: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr "%s: Kan inte få unikt system GID (inga fler tillgängliga GID)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: Kan inte få unik GID (inga fler tillgängliga GID)\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: Kan inte få unik GID (inga fler tillgängliga GID)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+"%s: Ogiltig konfiguration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: kan inte skapa användare\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+"%s: Ogiltig konfiguration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: kan inte skapa användare\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: Ogiltig konfiguration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr "%s: Ogiltig konfiguration: UID_MIN (%lu), UID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr "%s: Kan inte få unikt system UID (inga fler tillgängliga UID)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: Kan inte få unikt UID (inga fler tillgängliga UID)\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: Kan inte få unikt UID (inga fler tillgängliga UID)\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Authentication failure\n"
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: Autentiseringsfel\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: ogiltigt fält \"%s\"\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Could not seteuid to %d\n"
+msgstr "Kunde inte allokera plats för konfigurationsinformationen.\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not set caps\n"
+msgstr "Kunde inte allokera plats för konfigurationsinformationen.\n"
+
+#, c-format
+msgid "%s: snprintf failed!\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: rad %d: chown %s misslyckades: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: rad %d: chown %s misslyckades: %s\n"
+
+msgid "Too many logins.\n"
+msgstr "För många inloggningsförsök.\n"
+
+msgid "You have new mail."
+msgstr "Du har ny post."
+
+msgid "No mail."
+msgstr "Ingen post."
+
+msgid "You have mail."
+msgstr "Du har post."
+
+msgid "no change"
+msgstr "ingen ändring"
+
+msgid "a palindrome"
+msgstr "en palindrom"
+
+msgid "case changes only"
+msgstr "endast ändring av gemener/versaler"
+
+msgid "too similar"
+msgstr "för likt"
+
+msgid "too simple"
+msgstr "för enkelt"
+
+msgid "rotated"
+msgstr "roterat"
+
+msgid "too short"
+msgstr "för kort"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Felaktigt lösenord: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() misslyckades, fel %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+msgid "passwd: password unchanged\n"
+msgstr "passwd: lösenordet är oförändrat\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: uppdatering av lösenord lyckades\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: repository %s stöds inte\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start: fel %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd: pam_start() misslyckades, fel %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Felaktigt lösenord för %s.\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr ""
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: misslyckades med att kasta rättigheterna (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: ogiltigt telefonnummer (hem): \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: Kan inte skapa katalogen %s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: Kan inte skapa katalogen %s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: Misslyckades med att skapa tcb-katalog för %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"Ogiltigt värde för ENCRYPT_METHOD: \"%s\".\n"
+"Faller tillbaka på DES.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Kunde inte byta katalog till \"%s\"\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Ingen katalog, loggar in med HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Kunde inte starta %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Felaktig rotkatalog \"%s\"\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Kan inte ändra rotkatalog till \"%s\"\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: användaren %s är för närvarande inloggad\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: användaren %s är för närvarande inloggad\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Kunde inte fastställa ditt tty-namn."
+
+msgid "No"
+msgstr "Nej"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Användning: %s [flaggor] INLOGGNINGSNAMN\n"
+"\n"
+"Flaggor:\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+" -d, --lastday SISTA_DAG ställ in datum för sista lösenordsändring "
+"till SISTA_DAG\n"
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -E, --expiredate UTGÅNGSDATUM ställ in kontots utgångsdatum till "
+"UTGÅNGSDATUM\n"
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+" -h, --help visa detta hjälpmeddelande och avsluta\n"
+
+#, fuzzy
+#| msgid " -g, --group edit group database\n"
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr " -g, --group redigera gruppdatabas\n"
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -I, --inactive INAKTIV ställ in lösenordet till inaktivt efter "
+"utgång\n"
+" till INAKTIV\n"
+
+msgid " -l, --list show account aging information\n"
+msgstr " -l, --list visa åldringsinformation om kontot\n"
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -m, --mindays MIN_DAGAR ställ in minimum antal dagar innan "
+"lösenords-\n"
+" ändring till MIN_DAGAR\n"
+
+#, fuzzy
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -M, --maxdays MAX_DAGAR ställ in maximalt antal dagar innan "
+"lösenords-\n"
+" ändring till MAX_DAGAR\n"
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -W, --warndays VARN_DAGAR ställ in dagar för utgångsvarning till "
+"VARN_DAGAR\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Ange det nya värdet eller tryck ENTER för standardvärdet"
+
+msgid "Minimum Password Age"
+msgstr "Minimum lösenordsålder"
+
+msgid "Maximum Password Age"
+msgstr "Maximum lösenordsålder"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Senaste lösenordsändringen (ÅÅÅÅ-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Utlöpsvarning för lösenord"
+
+msgid "Password Inactive"
+msgstr "Lösenordet inaktivt"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Utlöpsdatum för kontot (ÅÅÅÅ-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Senaste lösenordsändringen\t\t\t\t: "
+
+msgid "never"
+msgstr "aldrig"
+
+msgid "password must be changed"
+msgstr "lösenordet måste ändras"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Lösenordet löper ut\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Lösenordet inaktivt\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Kontot löper ut\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Minimum antal dagar mellan lösenordsändringar\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Maximum antal dagar mellan lösenordsändringar\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Antal dagar med varningar före lösenordet löper ut\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: ogiltigt datum \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: ogiltigt numeriskt argument \"%s\"\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: inkludera inte \"l\" med andra flaggor\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Åtkomst nekad.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Kan inte fastställa ditt användarnamn.\n"
+
+#, fuzzy, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: kan inte låsa %s; försök igen senare.\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: kan inte öppna %s\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: fel vid skrivning av ändringar till %s\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: misslyckades med att förbereda den nya %s-posten \"%s\"\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: skugglösenordsfilen finns inte\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: användaren \"%s\" finns inte i %s\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Ändrar åldersinformationen för %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: fel vid ändring av fält\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Användning: %s [flaggor] [INLOGGNINGSNAMN]\n"
+"\n"
+"Flaggor:\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+" -u, --help visa detta hjälpmeddelande och avsluta\n"
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr "Helt namn"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "Rumsnummer"
+
+msgid "Work Phone"
+msgstr "Telefonnummer (arbete)"
+
+msgid "Home Phone"
+msgstr "Telefonnummer (hem)"
+
+msgid "Other"
+msgstr "Övrigt"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Kan inte ändra ID till root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: namn med icke-ASCII-tecken: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: ogiltigt namn: \"%s\"\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s: rumsnummer med icke-ASCII-tecken: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: ogiltigt rumsnummer: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: ogiltigt telefonnummer (arbete): \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: ogiltigt telefonnummer (hem): \"%s\"\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: \"%s\" innehåller icke-ASCII-tecken\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: \"%s\" innehåller ogiltiga tecken\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: användaren \"%s\" finns inte\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: kan inte ändra användare \"%s\" på en NIS-klient.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: \"%s\" är NIS-master för denna klient.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Ändrar användarinformationen för %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: fälten för långa\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Användning: %s [flaggor]\n"
+"\n"
+"Flaggor:\n"
+
+#, fuzzy, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr " -c, --crypt-method <METOD> krypteringsmetoden (en av %s)\n"
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr " -e, --encrypted angivna lösenord är krypterade\n"
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+" -m, --md5 kryptera klartextlösenordet med\n"
+" MD5-algoritmen\n"
+
+#, fuzzy
+#| msgid ""
+#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
+#| " crypt algorithms\n"
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+" -s, --sha-rounds antal SHA-rundor för SHA*-\n"
+" krypteringsalgoritmerna\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: flaggan %s tillåts endast med flaggan %s\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: flaggorna -c, -e och -m är uteslutande\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: krypteringsmetoden stöds inte: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: rad %d: raden för lång\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: rad %d: saknar nytt lösenord\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: misslyckades med att ta bort %s\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: rad %d: gruppen \"%s\" finns inte\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: rad %d: misslyckades med att förbereda den nya %s-posten \"%s\"\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: ett fel upptäcktes, ändringar ignorerade\n"
+
+#, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: (rad %d, användare %s) lösenordet har inte ändrats\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: rad %d: användaren \"%s\" finns inte\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+" -s, --shell SHELL nytt inloggningsskal för användarkontot\n"
+
+msgid "Login Shell"
+msgstr "Inloggningsskal"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Du får inte ändra skalet för \"%s\".\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Ändrar inloggningsskal för %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Ogiltig post: %s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s: %s är ett ogiltigt skal\n"
+
+#, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: Varning: %s finns inte\n"
+
+#, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: Varning: %s är inte en körbar fil\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: flaggorna %s och %s står i konflikt\n"
+
+#, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "%s: oväntat argument: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+" -a, --all visa faillog-poster för alla användare\n"
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+" -l, --lock-secs S efter misslyckad inloggning lås kontot i S "
+"sekunder\n"
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+" -m, --maximum MAX ställ in maximalt antal misslyckade "
+"inloggningar till MAX\n"
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+" -r, --reset nollställd räknarna för inloggningsfel\n"
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: Misslyckades med att få posten för UID %lu\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "Användare Fel Max Senaste På\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr " [%lus kvar]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds låsta]"
+
+#, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s: Misslyckades med att ställa in låstid för UID %lu\n"
+
+#, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: Misslyckades med att ställa in max för UID %lu\n"
+
+#, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: Misslyckades med att ställa in låstid för UID %lu\n"
+
+#, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "%s: Okänd användare eller intervall: %s\n"
+
+#, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: Kan inte få storleken för %s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: misslyckades med att ta bort %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Användning: %s [flagga] GRUPP\n"
+"\n"
+"Flaggor:\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr " -a, --add ANVÄNDARE lägg till ANVÄNDARE till GRUPP\n"
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr " -d, --delete ANVÄNDARE ta bort ANVÄNDARE från GRUPP\n"
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr " -r, --remove-password ta bort GRUPPens lösenord\n"
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+" -R, --restrict begränsa åtkomst till GRUPP till dess "
+"medlemmar\n"
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+" -M, --members ANVÄNDARE,... ställ in listan för medlemmar av GRUPP\n"
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+" -A, --administrators ADMIN,...\n"
+" ställ in listan för administratörer för "
+"GRUPP\n"
+
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "Förutom för flaggorna -A och -M, flaggorna kan inte kombineras.\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "Flaggorna kan inte kombineras.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: lösenord för skuggrupper krävs för -A\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: gruppen \"%s\" finns inte i %s\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: fel vid stängning av skrivskyddad %s\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Ändrar lösenordet för gruppen %s\n"
+
+msgid "New Password: "
+msgstr "Nytt lösenord: "
+
+msgid "Re-enter new password: "
+msgstr "Ange nytt lösenord igen: "
+
+msgid "They don't match; try again"
+msgstr "De stämde inte överens, försök igen"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Försök igen senare\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Lägger till användaren %s till gruppen %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Ta bort användaren %s från gruppen %s\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: användaren \"%s\" är inte en medlem av \"%s\"\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Inte en tty\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Användning: %s [flaggor] GRUPP\n"
+"\n"
+"Flaggor:\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+" -f, --force avsluta normalt om gruppen redan finns,\n"
+" och avbryt -g om GID redan används\n"
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr " -g, --gid GID använd GID för den nya gruppen\n"
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+" -K, --key NYCKEL=VÄRDE åsidosätt standardvärden i /etc/login.defs\n"
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique tillåt att skapa grupper med dubletta\n"
+" (icke-unika) GID\n"
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+" -p, --password LÖSENORD använd detta krypterade lösenord för nya "
+"gruppen\n"
+
+msgid " -r, --system create a system account\n"
+msgstr " -r, --system skapa ett systemkonto\n"
+
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: \"%s\" är inte ett giltigt gruppnamn\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: ogiltigt grupp-id \"%s\"\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K kräver KEY=VÄRDE\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: gruppen \"%s\" finns redan\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s: GID \"%lu\" finns redan\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: Kan inte fastställa ditt användarnamn.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+" -r, --reset nollställd räknarna för inloggningsfel\n"
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: kan inte ta bort posten \"%s\" från %s\n"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: kan inte ta bort primära gruppen för användaren \"%s\"\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: gruppen \"%s\" finns inte\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: gruppen \"%s\" är en NIS-grupp\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s är NIS master\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: användaren \"%s\" är redan medlem av \"%s\"\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: Slut på minne. Kan inte uppdatera %s.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Användning: %s [flaggor] [åtgärd]\n"
+"\n"
+"Flaggor:\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+" -g, --group gruppnamn ändra gruppnamn istället för användarens "
+"grupp\n"
+" (endast root)\n"
+
+msgid "\n"
+msgstr "\n"
+
+msgid "Actions:\n"
+msgstr "Åtgärder:\n"
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+" -a, --add användarnamn lägg till användarnamn till medlemmarna av "
+"gruppen\n"
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+" -d, --delete användarnamn ta bort användarnamn från medlemmarna av "
+"gruppen\n"
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr " -p, --purge ta bort alla medlemmar från gruppen\n"
+
+msgid " -l, --list list the members of the group\n"
+msgstr " -l, --list lista medlemmarna av gruppen\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: ditt gruppnamn matchar inte ditt användarnamn\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s: endast root kan använda flaggan -g/--group\n"
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr " -g, --gid GID ändra grupp-id till GID\n"
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr " -n, --new-name NY_GRUPP ändra namnet till NY_GRUPP\n"
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique tillåt användning av dubletta (icke-unika) "
+"GID\n"
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+" -p, --password LÖSENORD ändra lösenordet till detta (krypterade)\n"
+" LÖSENORD\n"
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: ogiltigt gruppnamn \"%s\"\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: gruppen %s är en NIS-grupp\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: okänd användare %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Användning: %s [flaggor] [grupp [gshadow]]\n"
+"\n"
+"Flaggor:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Användning: %s [flaggor] [grupp]\n"
+"\n"
+"Flaggor:\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s och -r är inkompatibla\n"
+
+msgid "invalid group file entry"
+msgstr "ogiltig post i gruppfil"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "ta bort rad \"%s\"? "
+
+msgid "duplicate group entry"
+msgstr "dubblerade grupposter"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "ogiltigt gruppnamn \"%s\"\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "ogiltigt grupp-id \"%lu\"\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "grupp %s: ingen användare %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "ta bort medlem \"%s\"? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "ingen matchande gruppfilspost i %s\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "lägg till gruppen \"%s\" i %s? "
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"gruppen %s har en post i %s, men dess lösenordsfält i %s är inte inställt "
+"till \"x\"\n"
+
+msgid "invalid shadow group file entry"
+msgstr "ogiltig post i fil för skuggrupper"
+
+msgid "duplicate shadow group entry"
+msgstr "duplikata poster i skuggrupp"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "skuggrupp %s: ingen administrativ användare %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "ta bort administrativ medlem \"%s\"? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "skuggrupp %s: ingen användare %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: filerna har uppdaterats\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: inga ändringar\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: kan inte ta bort %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Usage: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Användning: id\n"
+
+msgid " groups="
+msgstr " grupper="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+" -b, --before DAGAR skriv endast ut lastlog information äldre "
+"än\n"
+" DAGAR\n"
+
+#, fuzzy
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+" -a, --all visa faillog-poster för alla användare\n"
+
+#, fuzzy
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+" -a, --all visa faillog-poster för alla användare\n"
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time DAGAR skriv endast ut lastlog information senare "
+"än\n"
+" DAGAR\n"
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+" -u, --user LOGIN skriv ut lastlog information för användare\n"
+" angiven med LOGIN\n"
+
+msgid "Username Port From Latest"
+msgstr "Användarnamn Port Från Senast"
+
+msgid "Username Port Latest"
+msgstr "Användarnamn Port Senast"
+
+msgid "**Never logged in**"
+msgstr "**Aldrig varit inloggad**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s: Misslyckades med att få posten för UID %lu\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s: Misslyckades med att få posten för UID %lu\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 "Användning: %s [-p] [namn]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h värd] [-f namn]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r värd\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr "konfigurationsfel - kan inte tolka %s-värde: \"%d\""
+
+msgid "Invalid login time"
+msgstr "Ogiltig inloggningstid"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Systemet nedstängt för rutinmässigt underhåll"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Nedkoppling kringgådd -- rootinloggning tillåten.]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr "%s: Kan inte fungera utan en användbar root\n"
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr "Ingen utmp post. Du måste köra \"login\" från den lägsta nivån \"sh\""
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Inloggningen översteg tidsgränsen efter %u sekunder.\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM misslyckades, avbryter: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s inloggning: "
+
+msgid "login: "
+msgstr "inloggning: "
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Maximalt antal försök har överstigits (%u)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: avbryt begärdes av PAM\n"
+
+msgid "Login incorrect"
+msgstr "Inloggning misslyckad"
+
+#, fuzzy, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "%s: Kan inte grena användarskal\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s inloggning: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: fel vid processdelning: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSCTTY misslyckades på %s"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Varning: inloggning återaktiverad efter temporär nedstängning."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Senast inloggad: %s på %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Senast inloggad: %.19s på %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " från %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"inloggningstid överskriden\n"
+"\n"
+
+msgid "Usage: logoutd\n"
+msgstr "Användning: logoutd\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, c-format
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: misslyckades med att ta bort %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: misslyckades med att ta bort %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to unlock %s\n"
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: misslyckades med att låsa upp %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to find tcb directory for %s\n"
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: misslyckades med att hitta tcb-katalog för %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Failed to create tcb directory for %s\n"
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: Misslyckades med att skapa tcb-katalog för %s\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Användning: newgrp [-] [grupp]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Användning: sg grupp [[-c] kommando]\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: misslyckades med att ta bort %s\n"
+
+msgid "Invalid password.\n"
+msgstr "Ogiltigt lösenord.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: fel vid processgrening: %s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: GID \"%lu\" finns inte\n"
+
+msgid "too many groups\n"
+msgstr "för många grupper\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+#, fuzzy
+#| msgid " -q, --quiet quiet mode\n"
+msgid " -b, --badnames allow bad names\n"
+msgstr " -q, --quiet tyst läge\n"
+
+msgid " -r, --system create system accounts\n"
+msgstr " -r, --system skapa systemkonton\n"
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: gruppen \"%s\" är en skuggrupp men den finns inte i /etc/group\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: ogiltigt användar-id \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: ogiltigt användarnamn \"%s\"\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: rad %d: ogiltig rad\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: kan inte uppdatera posten för användaren %s (finns inte i passwd-"
+"databasen)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: rad %d: kan inte skapa användare\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: rad %d: kan inte skapa grupp\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: rad %d: användaren \"%s\" finns inte i %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: rad %d: kan inte uppdatera lösenord\n"
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: rad %d: mkdir %s misslyckades: %s\n"
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: rad %d: chown %s misslyckades: %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: rad %d: kan inte uppdatera post\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: misslyckades med att förbereda den nya %s-posten \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: kan inte skapa användare\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: kan inte skapa grupp\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+" -a, --all rapportera lösenordsstatus för alla konton\n"
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr " -d, --delete ta bort lösenordet för angivet konto\n"
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+" -e, --expire tvinga utgång för lösenordet för det angivna "
+"kontot\n"
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr " -k, --keep-tokens ändra lösenord endast om utgånget\n"
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -i, --inactive INAKTIV ställ in lösenordet som inaktivt efter "
+"utgång\n"
+" till INAKTIV\n"
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr ""
+" -l, --lock lås lösenordet för det angivna kontot\n"
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -n, --mindays MIN_DAGAR ställ in minsta antal dagar innan "
+"lösenords-\n"
+" ändring till MIN_DAGAR\n"
+
+msgid " -q, --quiet quiet mode\n"
+msgstr " -q, --quiet tyst läge\n"
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr " -r, --repository FÖRRÅD ändra lösenord i förrådet FÖRRÅD\n"
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+" -S, --status rapportera lösenordsstatus för det angivna "
+"kontot\n"
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+" -u, --unlock lås upp lösenordet för det angivna kontot\n"
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -w, --warndays VARN_DAGAR ställ in dagar för utgångsvarning till "
+"VARN_DAGAR\n"
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -x, --maxdays MAX_DAGAR ställ in maximalt antal dagar innan "
+"lösenords-\n"
+" ändring till MAX_DAGAR\n"
+
+msgid "Old password: "
+msgstr "Gammalt lösenord: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Ange det nya lösenordet (minimum %d tecken)\n"
+"Använd en kombination av stora och små bokstäver samt siffror.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Ange det nya lösenordet (minimum %d, maximum %d tecken)\n"
+"Använd en kombination av gemener, versaler och siffror.\n"
+
+msgid "New password: "
+msgstr "Nytt lösenord: "
+
+msgid "Try again."
+msgstr "Försök igen."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Varning: svagt lösenord (ange det igen för att använda det ändå)."
+
+msgid "They don't match; try again.\n"
+msgstr "De stämde inte, försök igen.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Lösenordet för %s kan inte ändras.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Lösenordet för %s kan inte ändras ännu.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: upplåsning av lösenordet kommer att resultera i ett konto utan "
+"lösenord.\n"
+"Du bör ange ett lösenord med usermod -p för att låsa upp lösenordet för "
+"detta konto.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: repository %s stöds inte\n"
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not authorized to change the password of %s\n"
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr "%s: %s är inte behörig att ändra lösenordet för %s\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Du kan inte visa eller modifiera lösenordsinformationen för %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Ändrar lösenord för %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Lösenordet för %s är oförändrat.\n"
+
+#, c-format
+msgid "%s: password changed.\n"
+msgstr "%s: lösenordet ändrades.\n"
+
+#, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "%s: information om lösenordets utgång har ändrats.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Användning: %s [flaggor] [lösenord]\n"
+"\n"
+"Flaggor:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Användning: %s [flaggor] [lösenord [skugga]]\n"
+"\n"
+"Flaggor:\n"
+
+#, fuzzy
+msgid " -q, --quiet report errors only\n"
+msgstr " -q, --quiet tyst läge\n"
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr "%s: ingen alternativ shadow-fil tillåts när USE_TCB är aktiverad.\n"
+
+msgid "invalid password file entry"
+msgstr "ogiltig post i lösenordsfil"
+
+msgid "duplicate password entry"
+msgstr "duplikata lösenordsposter"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "ogiltigt användarnamn \"%s\"\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "ogiltigt användar-id \"%lu\"\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "användare \"%s\": ingen grupp %lu\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "användare \"%s\": katalogen \"%s\" finns inte\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "användare \"%s\": programmet \"%s\" finns inte\n"
+
+#, c-format
+msgid "no tcb directory for %s\n"
+msgstr "ingen tcb-katalog för %s\n"
+
+#, c-format
+msgid "create tcb directory for %s?"
+msgstr "skapa tcb-katalog för %s?"
+
+#, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "misslyckades med att skapa tcb-katalog för %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: kan inte låsa %s.\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "ingen matchande lösenordfilpost i %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "lägg till grupp \"%s\" i %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"användaren %s har en post i %s, men dess lösenordsfält i %s är inte inställt "
+"till \"x\"\n"
+
+msgid "invalid shadow password file entry"
+msgstr "ogiltig post i skugglösenordsfil"
+
+msgid "duplicate shadow password entry"
+msgstr "duplikat post för skugglösenord"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "användare %s: senaste lösenordsändringen i framtiden\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: kan inte sortera poster i %s\n"
+
+#, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: kan inte fungera med tcb aktiverat\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: misslyckades med att ändra rättigheter för %s till 0600\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Tillgång med su till det kontot NEKAS.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Lösenordsautentisering kringgådd.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Vänligen ange ditt EGNA lösenord för autentisering.\n"
+
+#, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: Kan inte grena användarskal\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr "%s: signalfel\n"
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr ""
+
+msgid "Session terminated, terminating shell..."
+msgstr "Sessionen terminerad, terminerar skal..."
+
+#, c-format
+msgid " ...killed.\n"
+msgstr " ...dödad.\n"
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr " ...väntar på att barn ska termineras.\n"
+
+msgid " ...terminated.\n"
+msgstr " ...terminerad.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: su [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
+#| " -h, --help display this help message and exit\n"
+#| " -, -l, --login make the shell a login shell\n"
+#| " -m, -p,\n"
+#| " --preserve-environment do not reset environment variables, and\n"
+#| " keep the same shell\n"
+#| " -s, --shell SHELL use SHELL instead of the default in "
+#| "passwd\n"
+#| "\n"
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"Användning: su [flaggor] [KONTO]\n"
+"\n"
+"Flaggor:\n"
+" -c, --command KOMMANDO skicka KOMMANDO till anropade skalet\n"
+" -h, --help visa detta hjälpmeddelande och avsluta\n"
+" -, -l, --login gör skalet till inloggningsskal\n"
+" -m, -p,\n"
+" --preserve-environment återställ inte miljövariabler och behåll\n"
+" samma skal\n"
+" -s, --shell SKAL använd SKAL istället för det angivna i "
+"passwd\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ignorerad)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Du är inte bemyndigad att su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Ange ditt egna lösenord)"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: Autentiseringsfel\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s: Du är inte behörig att använda su för tillfället\n"
+
+#, fuzzy, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "Ingen lösenordspost för \"root\""
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: måste köras från en terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: fel %d\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: Kan inte ta bort innehållet i %s: %s\n"
+
+#, c-format
+msgid "Cannot execute %s\n"
+msgstr "Kunde inte starta %s\n"
+
+msgid "No password file"
+msgstr "Ingen lösenordsfil"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY misslyckades"
+
+msgid "No password entry for 'root'"
+msgstr "Ingen lösenordspost för \"root\""
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Tryck Control-D för att fortsätta med normal uppstart,\n"
+"(eller ange root-lösenordet för systemunderhåll):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Går över till läge för systemunderhåll"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr "%s: %s skapades men kunde inte tas bort\n"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr "%s: %s-konfigurationen i %s kommer att ignoreras\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: kan inte skapa ny standardfil\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: kan inte skapa ny standardfil\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: kan inte öppna ny fil med standardvärden\n"
+
+#, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: raden är för lång i %s: %s..."
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: Kan inte skapa symboliska länken %s: %s\n"
+
+#, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: byt namn: %s: %s\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: gruppen \"%s\" är en NIS-grupp.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: för många grupper angivna (max %d).\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Användning: %s [flaggor] INLOGGNINGSNAMN\n"
+" %s -D\n"
+" %s -D [flaggor]\n"
+"\n"
+"Flaggor:\n"
+
+#, fuzzy
+#| msgid " -s, --shadow edit shadow or gshadow database\n"
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+" -s, --shadow redigera shadow- eller gshadow-databasen\n"
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+" -b, --base-dir BASKATALOG baskatalog för hemkatalogen för\n"
+" det nya kontot\n"
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr " -c, --comment KOMMENTAR GECOS-fält för det nya kontot\n"
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr " -d, --home-dir HEM_KAT hemkatalog för det nya kontot\n"
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+" -D, --defaults skriv ut eller ändra standardkonfiguration "
+"för useradd\n"
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr " -e, --expiredate UTGÅNGSDATUM utgångsdatum för det nya kontot\n"
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+" -f, --inactive INAKTIV lösenordets inaktivitetsperiod för det nya "
+"kontot\n"
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+" -g, --gid GRUPP namn eller ID för den primära gruppen för "
+"det\n"
+" nya kontot\n"
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+" -k, --skel SKEL-KAT använd denna alternativa skelett-katalog\n"
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+" -l, --no-log-init lägg inte till användaren till databaserna "
+"lastlog\n"
+" och faillog\n"
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr " -m, --create-home skapa användarens hemkatalog\n"
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr " -M, --no-create-home skapa inte användarens hemkatalog\n"
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+" -N, --no-user-group skapa inte en grupp med samma namn som\n"
+" användaren\n"
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique tillåt att skapa användare med dubletta\n"
+" (icke-unika) UID\n"
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+" -p, --password LÖSENORD krypterat lösenord för det nya kontot\n"
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr " -s, --shell SKAL inloggningsskal för det nya kontot\n"
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr " -u, --uid UID användare-ID för det nya kontot\n"
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+" -U, --user-group skapa en grupp med samma namn som "
+"användaren\n"
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: ogiltig baskatalog \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: ogiltig kommentar \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: ogiltig hemkatalog \"%s\"\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: skugglösenord krävs för -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: skugglösenord krävs för -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: ogiltigt fält \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: ogiltigt skal \"%s\"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Warning: %s is not executable\n"
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: Varning: %s är inte en körbar fil\n"
+
+#, c-format
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr "%s: -Z kräver en SELinux-aktiverad kärna\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr ""
+"%s: misslyckades med att kopiera faillog-posten för användaren %lu till "
+"användaren %lu: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: misslyckades med att förbereda den nya %s-posten \"%s\"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error changing fields\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: fel vid ändring av fält\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: kan inte skapa katalog %s\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s home directory (%s) not found\n"
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: %s hemkatalogen (%s) hittades inte\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to allocate memory: %s\n"
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "%s: misslyckades att allokera minne: %s\n"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: kan inte skapa katalog %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: rad %d: chown %s misslyckades: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: rad %d: chown %s misslyckades: %s\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "Skapar postlådefil"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Gruppen \"mail\" hittades inte. Skapar användarens postlådefil med läget "
+"0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Ställer in rättigheter för postlådefil"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: användaren \"%s\" finns redan\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: gruppen %s finns redan - om du vill lägga till denna användare till den "
+"gruppen, använd -g.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: kan inte skapa användare\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %lu är inte unikt\n"
+
+#, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: Misslyckades med att skapa tcb-katalog för %s\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: kan inte skapa grupp\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: kan inte skapa användare\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: kan inte skapa grupp\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: varning: hem-katalogen finns redan.\n"
+"Kopierar ingen fil från skel-katalogen till den.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+" -f, --force tvinga borttagning av filer, även om\n"
+" de inte ägs av användaren\n"
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr " -r, --remove ta bort hemkatalog och postkö\n"
+
+#, fuzzy
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+" -s, --shell SHELL nytt inloggningsskal för användarkontot\n"
+
+#, fuzzy, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr "%s: kan inte ta bort primära gruppen för användaren \"%s\"\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: gruppen %s är den primära gruppen för en annan användare och tas inte "
+"bort.\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "%s: kan inte ta bort posten \"%s\" från %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: %s hemkatalogen (%s) hittades inte\n"
+
+#, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: varning: kan inte ta bort %s: %s\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s ägs inte av %s, tar inte bort\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: Kan inte släppa privilegier: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: Kan inte ta bort innehållet i %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: Kan inte ta bort tcb-filer för %s: %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: användaren %s är en NIS-användare\n"
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: %s hemkatalogen (%s) hittades inte\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: tar inte bort katalogen %s (skulle ta bort hemmet för användaren %s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: fel vid borttagning av katalogen %s\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: fel vid borttagning av katalogen %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr " -c, --comment KOMMENTAR nytt värde för GECOS-fältet\n"
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr " -d, --home HEMKAT ny hemkatalog för användarkontot\n"
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -e, --expiredate UTGÅNGSDATUM ställ in kontots utgångsdatum\n"
+" till UTGÅNGSDATUM\n"
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -f, --inactive INAKTIV ställ in lösenordet som inaktivt efter\n"
+" utgångsdatum till INAKTIV\n"
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+" -g, --gid GRUPP tvinga användning av GRUPP som ny "
+"primärgrupp\n"
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr " -G, --groups GRUPPER ny lista över ytterligare GRUPPER\n"
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+" -a, --append lägg till användaren till ytterligare "
+"GRUPPER\n"
+" som nämns av flaggan -G utan att ta bort\n"
+" honom/henne från andra grupper\n"
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr " -l, --login NYTT_NAMN nytt värde för inloggningsnamnet\n"
+
+msgid " -L, --lock lock the user account\n"
+msgstr " -L, --lock lås användarkontot\n"
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+" -m, --move-home flytta innehållet i hemkatalogen till\n"
+" en ny plats (använd endast med -d)\n"
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique tillåt användning av dubbletta (icke-unika) "
+"UID\n"
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+" -p, --password LÖSENORD använd krypterat lösenord som nytt lösenord\n"
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr " -u, --uid UID nytt UID för användarkontot\n"
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr " -U, --unlock lås upp användarkontot\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 ""
+
+#, fuzzy
+msgid ""
+" -Z, --selinux-user SEUSER new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+" -s, --shell SHELL nytt inloggningsskal för användarkontot\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: upplåsning av användarens lösenord skulle resultera i ett konto utan "
+"lösenord.\n"
+"Du bör ställa in ett lösenord med usermod -p för att låsa upp användarens "
+"lösenord.\n"
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: användaren \"%s\" finns redan i %s\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: ogiltigt datum \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: ogiltigt datum \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: no options\n"
+msgstr "%s: kan inte öppna %s\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: flaggorna -L, -p och -U är uteslutande\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: skugglösenord krävs för -e och -f\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: UID \"%lu\" finns redan\n"
+
+#, fuzzy, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr "%s: %s är inte behörig att ändra lösenordet för %s\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: katalogen %s finns redan\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+"%s: Tidigare hemkatalogen (%s) var inte en katalog. Den har inte tagits bort "
+"och inga hemkataloger har skapats.\n"
+
+#, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: Misslyckades med att ändra ägarskap för hemkatalogen"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: varning: misslyckades med att ta bort hela den gamla hemkatalogen %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: kunde inte byta namn på katalogen %s till %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: misslyckades med att kopiera lastlog-posten för användaren %lu till "
+"användaren %lu: %s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: misslyckades med att kopiera faillog-posten för användaren %lu till "
+"användaren %lu: %s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: varning: %s ägs inte av %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "misslyckades med att byta ägare på postlåda"
+
+msgid "failed to rename mailbox"
+msgstr "misslyckades med att byta namn på postlåda"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s: misslyckades med att förbereda den nya %s-posten \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s: misslyckades med att förbereda den nya %s-posten \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s: misslyckades med att förbereda den nya %s-posten \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s: misslyckades med att förbereda den nya %s-posten \"%s\"\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Du har ändrat %s.\n"
+"Du kan behöva ändra %s för att stämma överens.\n"
+"Använd kommandot \"%s\" för att göra det.\n"
+
+msgid " -g, --group edit group database\n"
+msgstr " -g, --group redigera gruppdatabas\n"
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr " -p, --passwd redigera lösenordsdatabas\n"
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+" -s, --shadow redigera shadow- eller gshadow-databasen\n"
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+" -u, --user vilken användares tcb shadow-fil att "
+"redigera\n"
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: misslyckades med att ta bort %s\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: %s är oförändrad\n"
+
+msgid "failed to create scratch directory"
+msgstr ""
+
+msgid "failed to drop privileges"
+msgstr "misslyckades med att släppa privilegier"
+
+msgid "Couldn't get file context"
+msgstr ""
+
+msgid "setfscreatecon () failed"
+msgstr "setfscreatecon () misslyckades"
+
+msgid "failed to gain privileges"
+msgstr "misslyckades med att få privilegier"
+
+msgid "Couldn't lock file"
+msgstr "Kunde inte låsa fil"
+
+msgid "Couldn't make backup"
+msgstr "Kunde inte göra en säkerhetskopia"
+
+#, fuzzy, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s: %s\n"
+
+#, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+msgid "failed to open scratch file"
+msgstr ""
+
+msgid "failed to unlink scratch file"
+msgstr ""
+
+msgid "failed to stat edited file"
+msgstr "misslyckades med att ta status på redigerade filen"
+
+msgid "failed to allocate memory"
+msgstr "misslyckades att allokera minne"
+
+msgid "failed to create backup file"
+msgstr "misslyckades med att skapa säkerhetskopia"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: kan inte återställa %s: %s (dina ändringar finns i %s)\n"
+
+#, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: misslyckades med att hitta tcb-katalog för %s\n"
+
+#~ msgid " -c, --crypt-method the crypt method (one of %s)\n"
+#~ msgstr " -c, --crypt-method krypteringsmetoden (en av %s)\n"
+
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr ""
+#~ "Användning: vipw [flaggor]\n"
+#~ "\n"
+#~ "Flaggor:\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "malloc(%d) misslyckades\n"
+
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Användning: chage [flaggor] [INLOGGNINGSNAMN]\n"
+#~ "\n"
+#~ "Flaggor:\n"
+#~ " -d, --lastday SISTA_DAG ställ in datum för sista lösenordsändring "
+#~ "till SISTA_DAG\n"
+#~ " -E, --expiredate UTGÅNGSDATUM ställ in kontots utgångsdatum till "
+#~ "UTGÅNGSDATUM\n"
+#~ " -h, --help visa detta hjälpmeddelande och avsluta\n"
+#~ " -I, --inactive INAKTIV ställ in lösenordet till inaktivt efter "
+#~ "utgång\n"
+#~ " till INAKTIV\n"
+#~ " -l, --list visa åldringsinformation om kontot\n"
+#~ " -m, --mindays MIN_DAGAR ställ in minimum antal dagar innan "
+#~ "lösenords-\n"
+#~ " ändring till MIN_DAGAR\n"
+#~ " -M, --maxdays MAX_DAGAR ställ in maximalt antal dagar innan "
+#~ "lösenords-\n"
+#~ " ändring till MAX_DAGAR\n"
+#~ " -W, --warndays VARN_DAGAR ställ in dagar för utgångsvarning till "
+#~ "VARN_DAGAR\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: PAM autentisering misslyckades\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "Användning: %s [-f fullt_namn] [-r rums_nr] [-w arb_tel]\n"
+#~ "\t[-h hem_tel] [-o annat] [användare]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr ""
+#~ "Användning: %s [-f fullt_namn] [-r rums_nr] [-w arb_tel] [-h hem_tel]\n"
+
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Användning: %s [flaggor]\n"
+#~ "\n"
+#~ "Flaggor:\n"
+#~ " -c, --crypt-method krypteringsmetoden (en av %s)\n"
+#~ " -e, --encrypted angivna lösenord är krypterade\n"
+#~ " -h, --help visa detta hjälpmeddelande och avsluta.\n"
+#~ " -m, --md5 kryptera klartextlösenordet med\n"
+#~ " MD5-algoritmen\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Användning: chsh [flaggor] [KONTO]\n"
+#~ "\n"
+#~ "Flaggor:\n"
+#~ " -h, --help visa detta hjälpmeddelande och avsluta\n"
+#~ " -s, --shell SHELL nytt inloggningsskal för användarkontot\n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "Användning: expiry {-f|-c}\n"
+
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "faillog: Kan inte öppna %s: %s\n"
+
+#~ msgid "faillog: Cannot get the size of %s: %s\n"
+#~ msgstr "faillog: Kan inte få storleken för %s: %s\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "Användning: groupdel grupp\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "Användning: %s [-r] [-s] [grupp [gshadow]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "Användning: %s [-r] [-s] [grupp]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: -s och -r är inkompatibla\n"
+
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "Användning: grpconv\n"
+
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "Användning: grpunconv\n"
+
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Användning: lastlog [flaggor]\n"
+#~ "\n"
+#~ "Flaggor:\n"
+#~ " -b, --before DAGAR skriv endast ut lastlog information äldre än "
+#~ "DAGAR\n"
+#~ " -h, --help visa detta hjälpmeddelande och avsluta\n"
+#~ " -t, --time DAGAR skriv endast ut lastlog information senare än "
+#~ "DAGAR\n"
+#~ " -u, --user LOGIN skriv ut lastlog information för användare\n"
+#~ " angiven med LOGIN\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Användning: passwd [flaggor] [INLOGGNINGSNAMN]\n"
+#~ "\n"
+#~ "Flaggor:\n"
+#~ " -a, --all rapportera lösenordsstatus för alla "
+#~ "konton\n"
+#~ " -d, --delete ta bort lösenordet för angivet konto\n"
+#~ " -e, --expire tvinga utgång för lösenordet för det "
+#~ "angivna kontot\n"
+#~ " -h, --help visa detta hjälpmeddelande och avsluta\n"
+#~ " -k, --keep-tokens ändra lösenord endast om utgånget\n"
+#~ " -i, --inactive INAKTIV ställ in lösenordet som inaktivt efter "
+#~ "utgång\n"
+#~ " till INAKTIV\n"
+#~ " -l, --lock lås lösenordet för det angivna kontot\n"
+#~ " -n, --mindays MIN_DAGAR ställ in minsta antal dagar innan "
+#~ "lösenords-\n"
+#~ " ändring till MIN_DAGAR\n"
+#~ " -q, --quiet tyst läge\n"
+#~ " -r, --repository FÖRRÅD ändra lösenord i förrådet FÖRRÅD\n"
+#~ " -S, --status rapportera lösenordsstatus för det "
+#~ "angivna kontot\n"
+#~ " -u, --unlock lås upp lösenordet för det angivna "
+#~ "kontot\n"
+#~ " -w, --warndays VARN_DAGAR ställ in dagar för utgångsvarning till "
+#~ "VARN_DAGAR\n"
+#~ " -x, --maxdays MAX_DAGAR ställ in maximalt antal dagar innan "
+#~ "lösenords-\n"
+#~ " ändring till MAX_DAGAR\n"
+#~ "\n"
+
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr "Användning: %s [-q] [-r] [passwd]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr "Användning: %s [-q] [-r] [-s] [lösenord [skugga]]\n"
+
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "Användning: pwconv\n"
+
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "Användning: pwunconv\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "Okänt id: %s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "Inget skal\n"
+
+#~ msgid ""
+#~ "Usage: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force removal of files,\n"
+#~ " even if not owned by user\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -r, --remove remove home directory and mail spool\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Användning: userdel [flaggor] KONTO\n"
+#~ "\n"
+#~ "Flaggor:\n"
+#~ " -f, --force tvinga borttagning av filer, även om\n"
+#~ " de inte ägs av användaren\n"
+#~ " -h, --help visa detta hjälpmeddelandet och avsluta\n"
+#~ " -r, --remove ta bort hemkatalog och postkö\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Användning: usermod [flaggor] INLOGGNINGSNAMN\n"
+#~ "\n"
+#~ "Flaggor:\n"
+#~ " -c, --comment KOMMENTAR nytt värde för GECOS-fältet\n"
+#~ " -d, --home HEMKAT ny hemkatalog för användarkontot\n"
+#~ " -e, --expiredate UTGÅNGSDATUM ställ in kontots utgångsdatum\n"
+#~ " till UTGÅNGSDATUM\n"
+#~ " -f, --inactive INAKTIV ställ in lösenordet som inaktivt efter\n"
+#~ " utgångsdatum till INAKTIV\n"
+#~ " -g, --gid GRUPP tvinga användning av GRUPP som ny "
+#~ "primärgrupp\n"
+#~ " -G, --groups GRUPPER ny lista över ytterligare GRUPPER\n"
+#~ " -a, --append lägg till användaren till ytterligare "
+#~ "GRUPPER\n"
+#~ " som nämns av flaggan -G utan att ta bort\n"
+#~ " honom/henne från andra grupper\n"
+#~ " -h, --help visa detta hjälpmeddelande och avsluta\n"
+#~ " -l, --login NYTT_NAMN nytt värde för inloggningsnamnet\n"
+#~ " -L, --lock lås användarkontot\n"
+#~ " -m, --move-home flytta innehållet i hemkatalogen till\n"
+#~ " en ny plats (använd endast med -d)\n"
+#~ " -o, --non-unique tillåt användning av dubbletta (icke-"
+#~ "unika) UID\n"
+#~ " -p, --password LÖSENORD använd krypterat lösenord som nytt "
+#~ "lösenord\n"
+#~ " -s, --shell SKAL nytt inloggningsskal för användarkontot\n"
+#~ " -u, --uid UID nytt UID för användarkontot\n"
+#~ " -U, --unlock lås upp användarkontot\n"
+#~ "%s\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s: inga flaggor angivna\n"
+
+#~ msgid "%s: %s is an invalid shell.\n"
+#~ msgstr "%s: %s är ett ogiltigt skal.\n"
+
+#~ msgid ""
+#~ " -l, --lock-time SEC after failed login lock account for SEC "
+#~ "seconds\n"
+#~ msgstr ""
+#~ " -l, --lock-time S efter misslyckad inloggning lås kontot i "
+#~ "S sekunder\n"
+
+#~ msgid ""
+#~ "Usage: %s [option] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --add USER add USER to GROUP\n"
+#~ " -d, --delete USER remove USER from GROUP\n"
+#~ " -r, --remove-password remove the GROUP's password\n"
+#~ " -R, --restrict restrict access to GROUP to its members\n"
+#~ " -M, --members USER,... set the list of members of GROUP\n"
+#~ "%s\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Användning: %s [flagga] GRUPP\n"
+#~ "\n"
+#~ "Flaggor:\n"
+#~ " -a, --add ANVÄNDARE lägg till ANVÄNDARE till GRUPP\n"
+#~ " -d, --delete ANVÄNDARE ta bort ANVÄNDARE från GRUPP\n"
+#~ " -r, --remove-password ta bort GRUPPens lösenord\n"
+#~ " -R, --restrict begränsa åtkomst till GRUPP till dess "
+#~ "medlemmar\n"
+#~ " -M, --members ANVÄNDARE,... ställ in listan över medlemmar för GRUPP\n"
+#~ "%s\n"
+#~ "\n"
+
+#~ msgid ""
+#~ " -A, --administrators ADMIN,...\n"
+#~ " set the list of administrators for GROUP\n"
+#~ "Except for the -A and -M options, the options cannot be combined.\n"
+#~ msgstr ""
+#~ " -A, --administrators ADMIN,...\n"
+#~ " ställ in listan över administratörer för "
+#~ "GRUPP\n"
+#~ "Förutom för flaggorna -A och -M, flaggorna kan inte kombineras.\n"
+
+#~ msgid ""
+#~ "Usage: groupmems [options] [action]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group groupname change groupname instead of the user's "
+#~ "group\n"
+#~ " (root only)\n"
+#~ "\n"
+#~ "Actions:\n"
+#~ " -a, --add username add username to the members of the group\n"
+#~ " -d, --delete username remove username from the members of the "
+#~ "group\n"
+#~ " -p, --purge purge all members from the group\n"
+#~ " -l, --list list the members of the group\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Användning: groupmems [flaggor] [åtgärd]\n"
+#~ "\n"
+#~ "Flaggor:\n"
+#~ " -g, --group gruppnamn ändra gruppnamn istället för användarens "
+#~ "grupp\n"
+#~ " (endast root)\n"
+#~ "\n"
+#~ "Åtgärder:\n"
+#~ " -a, --add användarnamn lägg till användarnamn till medlemmar av "
+#~ "gruppen\n"
+#~ " -d, --delete användarnamn ta bort användarnamn från medlemmar av "
+#~ "gruppen\n"
+#~ " -p, --purge ta bort alla medlemmar från gruppen\n"
+#~ " -l, --list lista medlemmarna i gruppen\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr ""
+#~ "Användning: useradd [flaggor] INLOGGNINGSNAMN\n"
+#~ "\n"
+#~ "Flaggor:\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s: kan inte skapa %s\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s: kan inte chown %s\n"
+
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group edit group database\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -p, --passwd edit passwd database\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow edit shadow or gshadow database\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Användning: vipw [flaggor]\n"
+#~ "\n"
+#~ "Flaggor:\n"
+#~ " -g, --group redigera gruppdatabas\n"
+#~ " -h, --help visa detta hjälpmeddelande och avsluta\n"
+#~ " -p, --passwd redigera lösenordsdatabas\n"
+#~ " -q, --quiet tyst läge\n"
+#~ " -s, --shadow redigera databaserna shadow eller "
+#~ "gshadow\n"
+#~ "\n"
diff --git a/po/tl.gmo b/po/tl.gmo
new file mode 100644
index 0000000..1a84a31
--- /dev/null
+++ b/po/tl.gmo
Binary files differ
diff --git a/po/tl.po b/po/tl.po
new file mode 100644
index 0000000..3d83f11
--- /dev/null
+++ b/po/tl.po
@@ -0,0 +1,3735 @@
+# Tagalog messages for shadow
+# shadow/po/tl.po
+# Copyright (C) 2005 Software in the Public Interest, Inc.
+# This file is distributed under the same license as shadow
+# Itong talaksan ay ipinamamahagi sa parehong lisensya ng shadow
+# Eric Pareja <xenos@upm.edu.ph>, 2005
+# This file is maintained by Eric Pareja <xenos@upm.edu.ph>
+# Itong talaksan ay inaalagaan ni Eric Pareja <xenos@upm.edu.ph>
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.18\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2007-11-26 21:34+0100\n"
+"Last-Translator: Eric Pareja <xenos@upm.edu.ph>\n"
+"Language-Team: Tagalog <debian-tl@banwa.upm.edu.ph>\n"
+"Language: tl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n>1;\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Hindi makapaglaan ng lugar para sa impormasyong pagsasaayos.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"may mali sa pagsasaayos - hindi kilalang item '%s' (ipaalam sa "
+"tagapangasiwa)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr ""
+
+msgid "Password: "
+msgstr "Kontrasenyas: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Kontrasenyas ni %s: "
+
+#, fuzzy
+#| msgid "Cannot open the password file.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "Hindi mabuksan ang talaksang password\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr ""
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not set sename for %s\n"
+msgstr "Hindi makapaglaan ng lugar para sa impormasyong pagsasaayos.\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "Pinapalitan ang impormasyong pagtanda para kay %s\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "%s: Hindi makilala ang inyong pangalan.\n"
+
+#, fuzzy, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "%s: linya %d: hindi mahanap ang gumagamit %s\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: nagkulang ng memory\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: hindi ma-apdeyt ang talaksang %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: hindi tanggap na directory na tahanan '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: hindi mapalitan ng pangalan ang directory %s sa %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: hindi malikha ang directory %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: babala: hindi matanggal "
+
+#, fuzzy, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: babala: hindi matanggal "
+
+#, fuzzy, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: baguhin ang pangalan: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: hindi mapalitan ng pangalan ang directory %s sa %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: hindi mapalitan ng pangalan ang directory %s sa %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: babala: hindi matanggal "
+
+#, fuzzy, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: hindi malikha ang directory %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: babala: hindi matanggal "
+
+#, fuzzy, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: hindi ma-apdeyt ang talaksang %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: hindi maapdeyt ang talaksang shadow\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: baguhin ang pangalan: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: hindi mabuksan ang talaksang %s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Babala: hindi kilalang grupo %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Babala: labis ang dami ng mga grupo\n"
+
+msgid "Your password has expired."
+msgstr "Lumampas sa taning ang inyong kontrasenyas."
+
+msgid "Your password is inactive."
+msgstr "Ang inyong kontrasenyas ay hindi aktibo."
+
+msgid "Your login has expired."
+msgstr "Lumampas sa taning ang inyong login."
+
+msgid " Contact the system administrator."
+msgstr " Kausapin ang tagapangasiwa ng sistema."
+
+msgid " Choose a new password."
+msgstr " Pumili ng bagong kontrasenyas."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Ang inyong kontrasenyas ay may taning na %ld na araw.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Hanggang bukas ang taning ng inyong kontrasenyas."
+
+msgid "Your password will expire today."
+msgstr "Mapapaso ang inyong kontrasenyas ngayong araw na ito."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Hindi mabago ang tty %s"
+
+#, fuzzy, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: mahaba masyado ang mga field\n"
+
+#, fuzzy, c-format
+msgid "%s: "
+msgstr "%s: %s\n"
+
+msgid ": "
+msgstr ""
+
+msgid "Environment overflow\n"
+msgstr "Umapaw ang kapaligiran\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Hindi niyo maaaring baguhin ang $%s\n"
+
+#, fuzzy, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"May %d kabiguan magmula ng huling pagpasok.\n"
+"Ang huli ay %s noong %s.\n"
+"May %d na kabiguan magmula ng huling pagpasok.\n"
+"Ang huli ay %s noong %s.\n"
+msgstr[1] ""
+"May %d kabiguan magmula ng huling pagpasok.\n"
+"Ang huli ay %s noong %s.\n"
+"May %d na kabiguan magmula ng huling pagpasok.\n"
+"Ang huli ay %s noong %s.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "bigo sa pagpalit ng may-ari ng mailbox"
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr "%s: hindi makakuha ng kakaibang UID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: hindi makakuha ng kakaibang GID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: hindi makakuha ng kakaibang GID\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: hindi malikha ang %s\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: hindi malikha ang %s\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr "%s: hindi makakuha ng kakaibang UID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: hindi makakuha ng kakaibang UID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: hindi makakuha ng kakaibang UID\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: bigo ang pagpapakilalang PAM\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: hindi tanggap na saklaw '%s'\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Could not seteuid to %d\n"
+msgstr "Hindi makapaglaan ng lugar para sa impormasyong pagsasaayos.\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not set caps\n"
+msgstr "Hindi makapaglaan ng lugar para sa impormasyong pagsasaayos.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't open file\n"
+msgid "%s: snprintf failed!\n"
+msgstr "%s: hindi mabuksan ang talaksan\n"
+
+#, fuzzy, c-format
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: linya %d: bigo ang chown\n"
+
+#, fuzzy, c-format
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: linya %d: bigo ang chown\n"
+
+msgid "Too many logins.\n"
+msgstr "Labis ang mga login.\n"
+
+msgid "You have new mail."
+msgstr "May bago kang email."
+
+msgid "No mail."
+msgstr "Walang email."
+
+msgid "You have mail."
+msgstr "Mayroon kang email."
+
+msgid "no change"
+msgstr "walang pagbabago"
+
+msgid "a palindrome"
+msgstr "isang palindromo"
+
+msgid "case changes only"
+msgstr "nagpalit lamang ng laki ng titik"
+
+msgid "too similar"
+msgstr "labis na magkatulad"
+
+msgid "too simple"
+msgstr "labis na simple"
+
+msgid "rotated"
+msgstr "inikot"
+
+msgid "too short"
+msgstr "labis ng ikli"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Maling kontrasenyas: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: bigo ang pam_start(), error %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+msgid "passwd: password unchanged\n"
+msgstr "Napalitan ang password."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: tagumpay sa pagpalit ng kontrasenyas\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: hindi suportado ang repositoryong %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start: error %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd: bigo ang pam_start(), error %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Maling kontrasenyas para kay %s.\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr ""
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: bigo sa pagtanggal ng mga pribilehiyo (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: hindi tanggap na telepono sa bahay: '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: hindi malikha ang directory %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: hindi malikha ang directory %s\n"
+
+#, fuzzy, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: hindi malikha ang directory %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Hindi makalipat sa '%s'\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Walang directory, pumapasok na ang HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Hindi mapatakbo ang %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Hindi tanggap na root directory '%s'\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Hindi mapalitan ang root directory sa '%s'\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: gumagamit na si %s ay kasalukuyang nakapasok\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: gumagamit na si %s ay kasalukuyang nakapasok\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Hindi malaman ang pangalan ng tty ninyo."
+
+#, fuzzy
+msgid "No"
+msgstr "Hindi\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Pag-gamit: %s [input]\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr ""
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Ibigay ang bagong halaga, o pindutin ang ENTER para sa default"
+
+msgid "Minimum Password Age"
+msgstr "Pinakamaliit na Tanda ng Password"
+
+msgid "Maximum Password Age"
+msgstr "Pinakamalaking Tanda ng Password"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Huling Pagpalit ng Password (YYYY-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Babala ng Paglipas ng Taning ng Password"
+
+msgid "Password Inactive"
+msgstr "Inaktibo ang Password"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Hangganan ng Account (YYYY-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Huling Pagpalit ng Password : "
+
+msgid "never"
+msgstr "Hindi kailanman"
+
+msgid "password must be changed"
+msgstr "kailangan palitan ang password"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Taning ng Password:\t"
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Inaktibong Password:\t"
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Mapapaso ang Account:\t"
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Bilang ng mga araw bago magpalit ng password : %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Bilang ng mga araw na dapat magpalit na ng password : %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Bilang ng mga araw bago mapaso ang password na may babala : %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: hindi tanggap na petsa '%s'\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: hindi tanggap na argumentong numero '%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: huwag isama ang \"l\" sa ibang mga flag\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Walang pahintulot.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Hindi makilala ang inyong pangalan.\n"
+
+#, fuzzy, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: hindi makapag-aldaba ng mga talaksan, subukan muli mamaya.\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: hindi mabuksan ang talaksang %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: bigo sa pag-fork: %s"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: bigo sa pagtanggal ng mga pribilehiyo (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: wala ang talaksan ng shadow password\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: walang gumagamit na nagngangalang %s\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Pinapalitan ang impormasyong pagtanda para kay %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: error sa pagbabago ng mga field\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr "Pag-gamit: %s [input]\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr "Buong Pangalan"
+
+#, fuzzy, c-format
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Bilang ng Silid"
+
+msgid "Work Phone"
+msgstr "Telepono sa Trabaho"
+
+msgid "Home Phone"
+msgstr "Telepono sa Bahay"
+
+msgid "Other"
+msgstr "Iba pa"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Hindi mabago ang ID sa root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: hindi tanggap na pangalan: '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: hindi tanggap na bilang ng silid: '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: hindi tanggap na telepono sa trabaho: '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: hindi tanggap na telepono sa bahay: '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s' ay may hindi legal na mga karakter\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s' ay may hindi legal na mga karakter\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: walang gumagamit na nagngangalang %s\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: hindi mapalitan ang gumagamit '%s' sa NIS client.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: '%s' ay ang NIS master ng klienteng ito.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Pinapalitan ang impormasyon tungkol sa gumagamit na si %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: mahaba masyado ang mga field\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Pag-gamit: %s [input]\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr ""
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: ang flag na -a ay pinapayagan LAMANG kung kasama ang flag na -G\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: linya %d: sobrang haba ng linya\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: linya %d: walang bagong password\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: bigo sa pagtanggal ng mga pribilehiyo (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: walang grupong %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: linya %d: hindi ma-apdeyt ang ipinasok\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: may error na naganap, di pinansin ang mga pagbabago\n"
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: walang gumagamit na nagngangalang %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: walang gumagamit na nagngangalang %s\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr "Login Shell"
+
+#, fuzzy, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Hindi niyo mapapalitan ang shell para kay %s.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Pinapalitan ang login shell ni %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Hindi tanggap na entry: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "Ang %s ay hindi tanggap na shell.\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: walang gumagamit na nagngangalang %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: babala: %s ay hindi pag-aari ni %s\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "lastlog: hindi inaasahang argumento: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: hindi malikha ang directory %s\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "Login Kabiguan Maximum Pinakahuli On\n"
+
+#, fuzzy, c-format
+msgid " [%lus left]"
+msgstr " [%lds naiwan]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds lock]"
+
+#, fuzzy, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s: hindi malikha ang directory %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: bigo sa pagtanggal ng mga pribilehiyo (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: hindi malikha ang directory %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "Di kilalang Gumagamit: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: hindi mapalitan ng pangalan ang directory %s sa %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: bigo sa pagtanggal ng mga pribilehiyo (%s)\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Pag-gamit: %s [input]\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr ""
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr ""
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr ""
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+
+#, fuzzy
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "Ang password ni %s ay hindi mapapalitan.\n"
+
+#, fuzzy
+msgid "The options cannot be combined.\n"
+msgstr "Ang password ni %s ay hindi mapapalitan.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: kailangan ng password ng grupong shadow para sa -A\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: walang grupong %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: bigo sa pag-fork: %s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Pinapalitan ang password ng grupong %s\n"
+
+msgid "New Password: "
+msgstr "Bagong Password: "
+
+msgid "Re-enter new password: "
+msgstr "Ibigay muli ang bagong password: "
+
+msgid "They don't match; try again"
+msgstr "Hindi magkapareho; subukan muli"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Subukan muli mamaya\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Dinadagdag ang gumagamit na si %s sa grupong %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Tinatanggal ang gumagamit na si %s mula sa grupong %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: walang gumagamit na nagngangalang %s\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Hindi tty\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Pag-gamit: %s [input]\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr ""
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid " -r, --system create a system account\n"
+msgstr ""
+
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: hindi tanggap na pangalan ng grupo ang %s\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "hindi tanggap na pangalan ng grupo '%s'\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: kinakailangan ng -O ang PANGALAN=HALAGA\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: mayroon nang grupong %s\n"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "Mayroon nang kasapi na ganito\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: Hindi makilala ang inyong pangalan.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: hindi mapalitan ng pangalan ang directory %s sa %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: hindi mapalitan ang gumagamit '%s' sa NIS client.\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: walang grupong %s\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: ang grupong '%s' ay grupong NIS.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s ay ang NIS master\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: ang gumagamit na %s ay nasa NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: naubos ang memory sa update_group\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr "Pag-gamit: %s [input]\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+
+msgid "\n"
+msgstr ""
+
+msgid "Actions:\n"
+msgstr ""
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr ""
+
+msgid " -l, --list list the members of the group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr ""
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "hindi tanggap na pangalan ng grupo '%s'\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: ang grupong %s ay grupong NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: di kilalang gumagamit %s\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr "Pag-gamit: %s [input]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr "Pag-gamit: %s [input]\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s at -r ay hindi maaring magkasabay\n"
+
+msgid "invalid group file entry"
+msgstr "hindi tanggap na entry ng talaksang grupo"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "burahin ang linyang '%s'? "
+
+msgid "duplicate group entry"
+msgstr "pangalawang entry ng grupo"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "hindi tanggap na pangalan ng grupo '%s'\n"
+
+#, fuzzy, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "hindi tanggap na pangalan ng grupo '%s'\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "grupong %s: walang gumagamit %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "tanggalin ang miyembrong '%s'? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "walang katumbas na entry sa talaksang grupo sa %s\n"
+
+#, fuzzy, c-format
+msgid "add group '%s' in %s? "
+msgstr "idagdag ang grupong '%s' sa %s ?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "hindi tanggap na entry sa talaksang shadow group"
+
+msgid "duplicate shadow group entry"
+msgstr "dalawahan ang shadow group entry"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "grupong shadow %s: walang tagapamahalang %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "tanggaling ang miyembrong tagapamahala '%s'? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "grupong shadow %s: walang gumagamit na %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: ang mga talaksan ay na-apdeyt\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: walang pagbabago\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: hindi ma-apdeyt ang talaksang %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Pag-gamit: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Pag-gamit: id\n"
+
+msgid " groups="
+msgstr " mga grupo="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+
+msgid "Username Port From Latest"
+msgstr "Pangalan Puerta Mula Hulihan"
+
+msgid "Username Port Latest"
+msgstr "Pangalan Puerta Hulihan"
+
+msgid "**Never logged in**"
+msgstr "**Di pumasok kailanman**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s: hindi malikha ang directory %s\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s: hindi maapdeyt ang talaksang password\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 "Pag-gamit: %s [-p] [pangalan]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h host] [-f pangalan]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r host\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Di tamang oras ng pagpasok"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Sarado ang sistema para sa kinagawiang pagtaguyod"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Nilaktawan ang pag-diskonek -- pinayagang makapasok ang root.]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Walang nakapasok sa utmp. Kailangan niyong mag-exec \"login\" mula sa "
+"pinakamababang antas ng \"sh\""
+
+#, fuzzy, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Lumipas ang taning ng pagpasok ng %d segundo.\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: kabiguan sa PAM, humihinto: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s login: "
+
+msgid "login: "
+msgstr "login: "
+
+#, fuzzy, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Lumampas sa bilang ng maaaring pagsubok : (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: hiniling na mag-abort ng PAM\n"
+
+msgid "Login incorrect"
+msgstr "Maling pagpasok"
+
+#, fuzzy, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "%s: linya %d: hindi mahanap ang gumagamit %s\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s login: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: bigo sa pag-fork: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Babala: pagpasok ay enabled muli matapos ng panandalian pagbawal."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Huling pagpasok: %s sa %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Huling pagpasok: %.19s sa %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " mula %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"lumampas sa taning ng pagpasok\n"
+"\n"
+
+#, fuzzy
+msgid "Usage: logoutd\n"
+msgstr "Pag-gamit: id\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: can't open group file\n"
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr "%s: hindi mabuksan ang talaksang grupo\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: bigo sa pagtanggal ng mga pribilehiyo (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: bigo sa pagtanggal ng mga pribilehiyo (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: mahaba masyado ang mga field\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: hindi tanggap na batayang directory '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: hindi malikha ang directory %s\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Pag-gamit: newgrp [-] [grupo]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Pag-gamit: sg grupo [[-c] utos]\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: bigo sa pagtanggal ng mga pribilehiyo (%s)\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "Lumang kontrasenyas:"
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: bigo sa pag-fork: %s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: walang gumagamit na nagngangalang %s\n"
+
+msgid "too many groups\n"
+msgstr "labis ang dami ng mga grupo\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid " -b, --badnames allow bad names\n"
+msgstr ""
+
+msgid " -r, --system create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: walang grupong %s\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: hindi tanggap na pangalan `%s'\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: hindi tanggap na pangalan `%s'\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: linya %d: hindi tanggap na linya\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: hindi maapdeyt ang ipinasok para kay %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: linya %d: hindi makalikha ng GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: linya %d: hindi makalikha ng GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: walang gumagamit na nagngangalang %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: linya %d: hindi ma-apdeyt ang kontrasenyas\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: linya %d: bigo ang mkdir\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: linya %d: bigo ang chown\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: linya %d: hindi ma-apdeyt ang ipinasok\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: bigo sa pagtanggal ng mga pribilehiyo (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: hindi malikha ang %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: hindi ma-apdeyt ang talaksang grupo\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid " -q, --quiet quiet mode\n"
+msgstr ""
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid "Old password: "
+msgstr "Lumang kontrasenyas:"
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Ibigay ang bagong kontrasenyas (minimum na %d, maximum na %d karakter)\n"
+"Gumamit ng kombinasyon ng malaki at maliit na titik at mga numero.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Ibigay ang bagong kontrasenyas (minimum na %d, maximum na %d karakter)\n"
+"Gumamit ng kombinasyon ng malaki at maliit na titik at mga numero.\n"
+
+msgid "New password: "
+msgstr "Bagong password: "
+
+msgid "Try again."
+msgstr "Subukan muli."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Babala: mahinang password (ibigay ito muli upang gamitin pa rin)."
+
+msgid "They don't match; try again.\n"
+msgstr "Hindi sila magkapareho; subukan muli.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Ang password ni %s ay hindi mapapalitan.\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Ang password ni %s ay hindi mapapalitan.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: hindi suportado ang repositoryong %s\n"
+
+#, c-format
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr ""
+"%s: Hindi niyo matatanaw o mapapalitan ang impormasyong password ni %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Pinapalitan ang password ni %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Ang password ni %s ay hindi napalitan.\n"
+
+#, fuzzy, c-format
+msgid "%s: password changed.\n"
+msgstr "Napalitan ang password."
+
+#, fuzzy, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "Babala ng Paglipas ng Taning ng Password"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr "Pag-gamit: %s [input]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr "Pag-gamit: %s [input]\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+
+msgid "invalid password file entry"
+msgstr "hindi tanggap na ipinasok sa talaksang password"
+
+msgid "duplicate password entry"
+msgstr "nadobleng ipinasok sa password"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "hindi tanggap na pangalan '%s'\n"
+
+#, fuzzy, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "hindi tanggap na pangalan '%s'\n"
+
+#, fuzzy, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "gumagamit %s: walang grupo %u\n"
+
+#, fuzzy, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "gumagamit %s: walang directory na %s\n"
+
+#, fuzzy, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "gumagamit %s: walang programang %s\n"
+
+#, fuzzy, c-format
+msgid "no tcb directory for %s\n"
+msgstr "%s: hindi malikha ang directory %s\n"
+
+#, fuzzy, c-format
+msgid "create tcb directory for %s?"
+msgstr "%s: hindi malikha ang directory %s\n"
+
+#, fuzzy, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "%s: hindi malikha ang directory %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: hindi maaldaba ang talaksang %s\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "walang kaparehas na kontrasenyas sa %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "idagdag ang gumagamit na si '%s' sa %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "hindi tanggap na ipinasok sa talaksang password na shadow"
+
+msgid "duplicate shadow password entry"
+msgstr "nadobleng ipinasok sa talaksang password ng shadow"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "gumagamit %s: huling pagpalit ng password ay nasa hinaharap\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: hindi mabuksan ang talaksang %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: hindi maisulat muli ang talaksan\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Ang paggamit ng su sa account na iyan ay IPINAGBAWAL.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Linampasan ang password authentication.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Ibigay ang inyong SARILING kontrasenyas bilang authentication.\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: hindi maaldaba ang talaksang %s\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr ""
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr ""
+
+msgid "Session terminated, terminating shell..."
+msgstr ""
+
+#, c-format
+msgid " ...killed.\n"
+msgstr ""
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr ""
+
+msgid " ...terminated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: su [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
+#| " -h, --help display this help message and exit\n"
+#| " -, -l, --login make the shell a login shell\n"
+#| " -m, -p,\n"
+#| " --preserve-environment do not reset environment variables, and\n"
+#| " keep the same shell\n"
+#| " -s, --shell SHELL use SHELL instead of the default in "
+#| "passwd\n"
+#| "\n"
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"Pag-gamit: su [mga opsiyon] [login]\n"
+"\n"
+"Mga opsiyon:\n"
+" -c, --command UTOS ipasa ang UTOS sa tinawag na shell\n"
+" -h, --help ipakita ang payo na ito\n"
+" -, -l, --login gawing login shell ang shell\n"
+" -m, -p,\n"
+" --preserve-environment huwag i-reset ang mga variable\n"
+" na pangkapaligiran at gamitin\n"
+" ang parehong shell\n"
+" -s, --shell SHELL gamitin ang SHELL sa halip ng\n"
+" default sa passwd\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Di pinansin)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Hindi kayo awtorisadong gumamit ng su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Ibigay ang sarili niyong password.)"
+
+#, fuzzy, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: bigo ang pagpapakilalang PAM\n"
+
+#, fuzzy, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "Hindi kayo awtorisadong gumamit ng su %s\n"
+
+#, fuzzy, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "Walang ipinasok sa password para sa 'root'"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: kinakailangang patakbuhin mula sa isang terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: error %d\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: hindi mapalitan ng pangalan ang directory %s sa %s\n"
+
+#, fuzzy, c-format
+msgid "Cannot execute %s\n"
+msgstr "Hindi mapatakbo ang %s"
+
+msgid "No password file"
+msgstr "Walang talaksang password"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "Walang ipinasok sa password para sa 'root'"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Itiklado ang control-d upang magpatuloy ng normal na startup,\n"
+"(o ibigay ang password ng root para sa pagtataguyod ng sistema):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Pumapasok sa Modang Pagtataguyod ng Sistema"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: hindi malikha ang bagong talaksan ng mga default\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: hindi malikha ang bagong talaksan ng mga default\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: hindi mabuksan ang bagong talaksan ng mga default\n"
+
+#, fuzzy, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: linya %d: bigo ang chown\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: hindi malikha ang directory %s\n"
+
+#, fuzzy, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: baguhin ang pangalan: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: ang grupong '%s' ay grupong NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: sobrang dami ng grupo ang nakatakda (max %d).\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr "Pag-gamit: %s [input]\n"
+
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr ""
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr ""
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr ""
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr ""
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: hindi tanggap na batayang directory '%s'\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: hindi tanggap na komento '%s'\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: hindi tanggap na directory na tahanan '%s'\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: kailangan ng shadow password para sa -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: kailangan ng shadow password para sa -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: hindi tanggap na saklaw '%s'\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: hindi tanggap na shell '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: babala: %s ay hindi pag-aari ni %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rewrite password file\n"
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s: hindi maisulat muli ang talaksang password\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s: hindi malikha ang directory %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: bigo sa pagtanggal ng mga pribilehiyo (%s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error updating files\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: error sa pag-apdeyt ng mga talaksan\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: hindi malikha ang directory %s\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: hindi tanggap na directory na tahanan '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "bigo sa pagpalit ng may-ari ng mailbox"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: hindi malikha ang directory %s\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: linya %d: bigo ang chown\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: linya %d: bigo ang chown\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "Inililikha ang talaksang mailbox"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Grupong 'mail' ay hindi nahanap. Inililikha ang talaksang mailbox ng "
+"gumagamit na may modong 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Itinatakda ang pahintulot sa talaksang mailbox"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: mayroon nang gumagamit na %s\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: mayroon nang grupong %s - kung nais niyong idagdag ang gumagamit na ito "
+"sa grupong iyon, gamitin ang -g.\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: hindi malikha ang %s\n"
+
+#, fuzzy, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: hindi kakaiba ang UID %u\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: hindi malikha ang directory %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: hindi malikha ang %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: hindi malikha ang %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: hindi malikha ang %s\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: babala: mayroon nang tahanang directory.\n"
+"Walang kokopyahing talaksan mula sa skel directory dito.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr "%s: hindi mapalitan ang gumagamit '%s' sa NIS client.\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: hindi matanggal ang grupong %s dahil ito'y pangunahing grupo ng ibang "
+"gumagamit.\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "%s: hindi mapalitan ng pangalan ang directory %s sa %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: hindi tanggap na directory na tahanan '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: babala: hindi matanggal "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s ay hindi pag-aari ni %s, hindi tatanggalin\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: bigo sa pagtanggal ng mga pribilehiyo (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: hindi mapalitan ng pangalan ang directory %s sa %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: hindi mapalitan ng pangalan ang directory %s sa %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: ang gumagamit na %s ay nasa NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: hindi tanggap na directory na tahanan '%s'\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s: hindi tatanggalin ang directory %s (mawawalan ng bahay si %s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: error sa pagtanggal ng directory %s\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: error sa pagtanggal ng directory %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr ""
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr ""
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr ""
+
+msgid " -L, --lock lock the user account\n"
+msgstr ""
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr ""
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr ""
+
+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"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: mayroon nang gumagamit na %s\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: hindi tanggap na petsa '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: hindi tanggap na petsa '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: no options\n"
+msgstr "%s: hindi mabuksan ang talaksang %s\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: kailangan ang shadow password para sa -e at -f\n"
+
+#, fuzzy, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "Mayroon nang kasapi na ganito\n"
+
+#, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: mayroon nang directory na %s\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: hindi malikha ang directory %s\n"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: babala: bigo sa pagtanggal ng buo ng lumang directory na tahanan %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: hindi mapalitan ng pangalan ang directory %s sa %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: babala: %s ay hindi pag-aari ni %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "bigo sa pagpalit ng may-ari ng mailbox"
+
+msgid "failed to rename mailbox"
+msgstr "bigo sa pagpalit ng pangalan ng mailbox"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s: bigo sa pagtanggal ng mga pribilehiyo (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s: bigo sa pagtanggal ng mga pribilehiyo (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s: bigo sa pagtanggal ng mga pribilehiyo (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s: bigo sa pagtanggal ng mga pribilehiyo (%s)\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid " -g, --group edit group database\n"
+msgstr ""
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr ""
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: bigo sa pagtanggal ng mga pribilehiyo (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s ay hindi binago\n"
+
+#, fuzzy
+msgid "failed to create scratch directory"
+msgstr "bigo sa pagpalit ng pangalan ng mailbox"
+
+#, fuzzy
+msgid "failed to drop privileges"
+msgstr "%s: bigo sa pagtanggal ng mga pribilehiyo (%s)\n"
+
+#, fuzzy
+msgid "Couldn't get file context"
+msgstr "Hindi maaldaba ang talaksan"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+#, fuzzy
+msgid "failed to gain privileges"
+msgstr "%s: bigo sa pagtanggal ng mga pribilehiyo (%s)\n"
+
+msgid "Couldn't lock file"
+msgstr "Hindi maaldaba ang talaksan"
+
+msgid "Couldn't make backup"
+msgstr "Hindi makagawa ng backup"
+
+#, fuzzy, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr "%s: hindi nahanap ang %s sa /etc/passwd\n"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+#, fuzzy
+msgid "failed to open scratch file"
+msgstr "Hindi mabuksan ang talaksang grupo\n"
+
+#, fuzzy
+msgid "failed to unlink scratch file"
+msgstr "%s: mahaba masyado ang mga field\n"
+
+#, fuzzy
+msgid "failed to stat edited file"
+msgstr "bigo sa pagpalit ng pangalan ng mailbox"
+
+#, fuzzy
+msgid "failed to allocate memory"
+msgstr "bigo sa pagpalit ng may-ari ng mailbox"
+
+#, fuzzy
+msgid "failed to create backup file"
+msgstr "bigo sa pagpalit ng pangalan ng mailbox"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: hindi maibalik ang %s: %s (ang mga pagbabago ay nasa %s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: hindi tanggap na batayang directory '%s'\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Pag-gamit: %s [input]\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "bigo ang malloc(%d)\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: chage [options] [LOGIN]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -d, --lastday LAST_DAY set last password change to LAST_DAY\n"
+#~| " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -l, --list show account aging information\n"
+#~| " -m, --mindays MIN_DAYS set minimum number of days before "
+#~| "password\n"
+#~| " change to MIN_DAYS\n"
+#~| " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~| "password\n"
+#~| " change to MAX_DAYS\n"
+#~| " -W, --warndays WARN_DAYS set expiration warning days to "
+#~| "WARN_DAYS\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Pag-gamit: chage [mga opsiyon] [LOGIN]\n"
+#~ "\n"
+#~ "Mga opsiyon:\n"
+#~ " -d, --lastday HULING_ARAW itakda ang huling pagpalit ng "
+#~ "kontrasenyas\n"
+#~ " sa HULING_ARAW\n"
+#~ " -E, --expiredate EXPIRE_DATE itakda ang pagkapaso ng account sa\n"
+#~ " EXPIRE_DATE\n"
+#~ " -h, --help ipakita ang tulong at lumabas\n"
+#~ " -I, --inactive INACTIVE itakda ang kontrasenyas na inaktibo "
+#~ "matapos\n"
+#~ " mapaso at gawin itong INACTIVE\n"
+#~ " -l, --list ipakita ang impormasyon tungkol sa "
+#~ "account\n"
+#~ " -m, --mindays MIN_DAYS itakda na hindi kukulang sa MIN_DAYS\n"
+#~ " bago palitan ang kontrasenyas\n"
+#~ " -M, --maxdays MAX_DAYS itakda na hindi hihigit sa MAX_DAYS\n"
+#~ " bago palitan ang kontrasenyas\n"
+#~ " -W, --warndays WARN_DAYS itakda ang babala tungkol sa pagpaso sa\n"
+#~ " WARN_DAYS\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: bigo ang pagpapakilalang PAM\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "Pag-gamit: %s [-f buong_pangalan] [-r bilang_ng_silid] [-w "
+#~ "telepono_trabaho]\n"
+#~ "\t[-h telepono_bahay] [-o iba] [gumagamit]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr ""
+#~ "Pag-gamit: %s [-f buong_pangalan] [-r bilang_ng_silid] [-w trabaho] [-h "
+#~ "bahay]\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Pag-gamit: chpasswd [mga opsiyon]\n"
+#~ "\n"
+#~ "Mga opsiyon:\n"
+#~ " -e, --encrypted ang mga bigay na mga kontrasenyas ay naka-encrypt\n"
+#~ " -h, --help ipakita itong payo na ito at lumabas\n"
+#~ " -m, --md5 gamitin ang MD5 encryption imbes na DES kapag ang\n"
+#~ " mga ibinigay na mga kontrasenyas ay hindi naka-"
+#~ "encrypt\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Pag-gamit: chsh [mga opsiyon] [LOGIN]\n"
+#~ "\n"
+#~ "Mga opsiyon:\n"
+#~ " -h, --help ipakita ito at lumabas\n"
+#~ " -s, --shell SHELL bagong login shell para sa gumagamit\n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "Pag-gamit: expiry {-f|-c}\n"
+
+#, fuzzy
+#~| msgid "%s: cannot open file %s\n"
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "%s: hindi mabuksan ang talaksang %s\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "Pag-gamit: groupdel grupo\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "Pag-gamit: %s [-r] [-s] [grupo [gshadow]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "Pag-gamit: %s [-r] [-s] [grupo]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: -s at -r ay hindi maaring magkasabay\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "Pag-gamit: groupdel grupo\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "Pag-gamit: groupdel grupo\n"
+
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Pag-gamit: lastlog [mga option]\n"
+#~ "\n"
+#~ "Mga option:\n"
+#~ " -b, --before ARAW ipakita lamang ang lastlog record na mas-luma sa "
+#~ "ARAW\n"
+#~ " -h, --help ipakita ang tulong na ito at lumabas\n"
+#~ " -t, --time ARAW ipakita lamang ang lastlog record na mas-bagos sa "
+#~ "ARAW\n"
+#~ " -u, --user LOGIN ipakita lamang ang gumagamit na LOGIN\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Pag-gamit: passwd [mga opsiyon] [login]\n"
+#~ "\n"
+#~ "Mga opsiyon:\n"
+#~ " -a, --all mag-ulat tungkol sa kalagayan ng\n"
+#~ " kontrasenyas ng lahat\n"
+#~ " -d, --delete burahin ang kontrasenyas ng account\n"
+#~ " -e, --expire piliting mapaso ang kontrasenyas ng "
+#~ "account\n"
+#~ " -h, --help ipakita ang tulong na ito at lumabas\n"
+#~ " -k, --keep-tokens palitan ang kontrasenyas kung paso "
+#~ "lamang\n"
+#~ " -i, --inactive INACTIVE itakdang inaktibo matapos na mapaso\n"
+#~ " sa INACTIVE\n"
+#~ " -l, --lock i-lock ang account\n"
+#~ " -n, --mindays MIN_ARAW\n"
+#~ " -q, --quiet tahimik lamang\n"
+#~ " -r, --repository REPOSITORYO palitan ang kontrasenyas sa REPOSITORYO\n"
+#~ " -S, --status iulat ang kalagayan ng kontrasenyas ng\n"
+#~ " ibinigay na account\n"
+#~ " -u, --unlock tanggalin ang pagkaaldaba ng account\n"
+#~ " -w, --warndays BABALA_ARAW itakda ang pagbabala ng taning sa\n"
+#~ " BABALA_ARAW\n"
+#~ " -x, --maxdays MAX_ARAW itakda kung hanggang ilang araw bago\n"
+#~ " magpalit ng kontrasenyas sa MAX_ARAW\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr "Pag-gamit: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr "Pag-gamit: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "Pag-gamit: id\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "Pag-gamit: id\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "Di kilalang id: %s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "Walang shell\n"
+
+#~ msgid ""
+#~ "Usage: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force removal of files,\n"
+#~ " even if not owned by user\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -r, --remove remove home directory and mail spool\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Paggamit: userdel [mga opsiyon] LOGIN\n"
+#~ "\n"
+#~ "Mga opsiyon:\n"
+#~ " -f, --force ipilit ang pagtanggal ng mga talaksan,\n"
+#~ " kahit hindi pag-aari ng gumagamit\n"
+#~ " -h, --help ipakita ang patalastas na ito at lumabas\n"
+#~ " -r, --remove tanggalin ang home directory at mail "
+#~ "spool\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Pag-gamit: usermod [mga opsiyon] LOGIN\n"
+#~ "\n"
+#~ "Mga opsiyon:\n"
+#~ " -a, --append GRUPO idagdag ang gumagamit sa karagdagang "
+#~ "GRUPO\n"
+#~ " -c, --comment KOMENTO itakda ang GECOS field\n"
+#~ " -d, --home HOME_DIR ang tahanang directory ng bagong account\n"
+#~ " -e, --expiredate EXPIRE_DATE itakda ang petsa ng expiration ng "
+#~ "account\n"
+#~ " sa EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE itakda ang password na inaktibo matapos "
+#~ "ng\n"
+#~ " pagkapaso na INACTIVE\n"
+#~ " -g, --gid GRUPO ipilit na gamitin ang GRUPO para sa "
+#~ "bagong\n"
+#~ " account\n"
+#~ " -G, --groups MGAGRUPO idagdag ang mga grupo sa MGAGRUPO sa "
+#~ "bagong\n"
+#~ " account\n"
+#~ " -h, --help ipakita ang payo na ito\n"
+#~ " -l, --login LOGIN bagong halaga ng pangalang panglogin\n"
+#~ " -L, --lock ialdaba ang account ng gumagamit\n"
+#~ " -m, --move-home ilipat ang laman ng tahanang directory "
+#~ "sa\n"
+#~ " bagong lugar (gamitin lamang kasama ng -"
+#~ "d)\n"
+#~ " -o, --non-unique payagang lumikha ng user na may "
+#~ "kaparehong UID\n"
+#~ " -p, --password PASSWOWRD gumamit ng encrypted password para sa "
+#~ "bagong\n"
+#~ " account\n"
+#~ " -s, --shell SHELL itakda ang login shell para sa bagong "
+#~ "account\n"
+#~ " -u, --uid UID gamitin ang UID para sa bagong account\n"
+#~ " -U, --unlock tanggalin ang pagkaaldaba ng account ng\n"
+#~ " gumagamit\n"
+#~ "\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s: walang binigay na mga flag\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: vipw [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -g, --group edit group database\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -p, --passwd edit passwd database\n"
+#~| " -q, --quiet quiet mode\n"
+#~| " -s, --shadow edit shadow or gshadow database\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group edit group database\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -p, --passwd edit passwd database\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow edit shadow or gshadow database\n"
+#~ " -u, --user which user's tcb shadow file to edit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Pag-gamit: vipw [mga opsiyon]\n"
+#~ "\n"
+#~ "Mga opsiyon:\n"
+#~ " -g, --group baguhin ang database ng mga grupo\n"
+#~ " -h, --help ipakita ang payo na ito\n"
+#~ " -p, --passwd baguhin ang database na passwd\n"
+#~ " -q, --quiet modong tahimik\n"
+#~ " -s, --shadow baguhin ang database na shadow o gshadow\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Pag-gamit: %s [input]\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s: hindi malikha ang %s\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s: hindi ma-chown %s\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -a, --all display faillog records for all users\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -l, --lock-time SEC after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| " -m, --maximum MAX set maximum failed login counters to "
+#~| "MAX\n"
+#~| " -r, --reset reset the counters of login failures\n"
+#~| " -t, --time DAYS display faillog records more recent than "
+#~| "DAYS\n"
+#~| " -u, --user LOGIN display faillog record or maintains "
+#~| "failure\n"
+#~| " counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| " options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all display faillog records for all users\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -l, --lock-time SEC after failed login lock account to SEC "
+#~ "seconds\n"
+#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
+#~ " -r, --reset reset the counters of login failures\n"
+#~ " -t, --time DAYS display faillog records more recent than "
+#~ "DAYS\n"
+#~ " -u, --user LOGIN display faillog record or maintains "
+#~ "failure\n"
+#~ " counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ " options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Pag-gamit: faillog [mga opsiyon]\n"
+#~ "\n"
+#~ "Mga opsiyon:\n"
+#~ " -a, --all ipakita ang mga record ng faillog para sa lahat\n"
+#~ " -h, --help ipakita ang tulong na ito at lumabas\n"
+#~ " -l, --lock-time SEG matapos mabigo sa pagpasok, i-lock ng SEG "
+#~ "segundo\n"
+#~ " ang account\n"
+#~ " -m, --maximum MAX itakda ang maximum na bilang ng kabiguan sa "
+#~ "pagpasok\n"
+#~ " na hanggang MAX lamang\n"
+#~ " -r, --reset ireset ang mga tagabilang ng kabiguan sa "
+#~ "pagpasok\n"
+#~ " -t, --time ARAW ipakita ang faillog records na hindi tatanda sa "
+#~ "ARAW\n"
+#~ " -u, --user LOGIN ipakita ang faillog record o pangasiwaan ang "
+#~ "tagabilang\n"
+#~ " ng pagkabigo at mga palugit (kung gamit ang -r, -"
+#~ "m o\n"
+#~ " -l na opsiyon) para sa gumagamit ng LOGIN lamang\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force exit with success status if the\n"
+#~ " specified group already exists\n"
+#~ " -g, --gid GID use GID for the new group\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique allow create group with duplicate\n"
+#~ " (non-unique) GID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new group\n"
+#~ " -r, --system create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Pag-gamit: groupadd [mga opsiyon] GRUPO\n"
+#~ "\n"
+#~ "Mga opsiyon:\n"
+#~ " -f, --force ipilit ang paglabas na kalagayang matagumpay "
+#~ "kung\n"
+#~ " ang ibinigay na grupo ay mayroon na\n"
+#~ " -g, --gid GID gamitin ang GID para sa bagong grupo\n"
+#~ " -h, --help ipakita ang patalastas na ito at lumabas\n"
+#~ " -K, --key KEY=HALAGA nangingibabaw sa mga default sa /etc/login.defs\n"
+#~ " -o, --non-unique payagang gumawa ng grupo na may GID na kapareho\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --gid GID force use new GID by GROUP\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Pag-gamit: groupmod [mga opsiyon] GRUPO\n"
+#~ "\n"
+#~ "Mga opsiyon:\n"
+#~ " -g, --gid GID gamitin ang bagong GID ng GRUPO\n"
+#~ " -h, --help ipakita ang tulong na ito at lumabas\n"
+#~ " -n, --new-name BAGONG_GRUPO ipilit na gamitin ang BAGONG_GRUPO ng "
+#~ "GRUPO\n"
+#~ " -o, --non-unique payagang gumawa ng grupo na may "
+#~ "kaparehong\n"
+#~ " GID ng GRUPO\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~ " home directory\n"
+#~ " -c, --comment COMMENT set the GECOS field for the new user "
+#~ "account\n"
+#~ " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~ " -D, --defaults print or save modified default useradd\n"
+#~ " configuration\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP for the new user account\n"
+#~ " -G, --groups GROUPS list of supplementary groups for the new\n"
+#~ " user account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -l, --no-log-init do not add the user to the lastlog and\n"
+#~ " faillog databases\n"
+#~ " -m, --create-home create home directory for the new user\n"
+#~ " account\n"
+#~ " -M, --no-create-home do not create user's home directory\n"
+#~ " (overrides /etc/login.defs)\n"
+#~ " -N, --no-user-group do not create a group with the same name "
+#~ "as\n"
+#~ " the user\n"
+#~ " -o, --non-unique allow create user with duplicate\n"
+#~ " (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new user\n"
+#~ " account\n"
+#~ " -r, --system create a system account\n"
+#~ " -s, --shell SHELL the login shell for the new user account\n"
+#~ " -u, --uid UID force use the UID for the new user "
+#~ "account\n"
+#~ " -U, --user-group create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Pag-gamit: useradd [mga opsiyon] LOGIN\n"
+#~ "\n"
+#~ "Mga opsiyon:\n"
+#~ " -b, --base-dir BASE_DIR punong directory para sa bagong mga "
+#~ "tahanang\n"
+#~ " directory ng account\n"
+#~ " -c, --comment KOMENTO itakda ang GECOS field ng bagong account\n"
+#~ " -d, --home-dir HOME_DIR ang tahanang directory ng bagong account\n"
+#~ " -D, --defaults ipakita o imbakin ang binagong default "
+#~ "na\n"
+#~ " pagkaayos ng useradd\n"
+#~ " -e, --expiredate EXPIRE_DATE itakda ang petsa ng expiration ng "
+#~ "account\n"
+#~ " sa EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE itakda ang password na inaktibo matapos "
+#~ "ng\n"
+#~ " pagkapaso na INACTIVE\n"
+#~ " -g, --gid GRUPO ipilit na gamitin ang GRUPO para sa "
+#~ "bagong\n"
+#~ " account\n"
+#~ " -G, --groups MGAGRUPO idagdag ang mga grupo sa MGAGRUPO sa "
+#~ "bagong\n"
+#~ " account\n"
+#~ " -h, --help ipakita itong tulong na ito at lumabas\n"
+#~ " -k, --skel SKEL_DIR itakda ang alternatibong skel directory\n"
+#~ " -K, --key KEY=HALAGA nangingibabaw sa default sa /etc/login."
+#~ "defs\n"
+#~ " -m, --create-home likhain ang tahanang directory para sa\n"
+#~ " bagong account\n"
+#~ " -o, --non-unique payagang lumikha ng user na may "
+#~ "kaparehong UID\n"
+#~ " -p, --password PASSWOWRD gumamit ng encrypted password para sa "
+#~ "bagong\n"
+#~ " account\n"
+#~ " -s, --shell SHELL itakda ang login shell para sa bagong "
+#~ "account\n"
+#~ " -u, --uid UID gamitin ang UID para sa bagong account\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Itinakdang lumampas sa taning ang password."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: hindi maaldaba ang talaksan ng mga kontrasenyas\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksang password\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: hindi maaldaba ang talaksang shadow password\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksang shadow password\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: hindi maisulat-muli ang talaksang shadow password\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: hindi maisulat-muli ang talaksang password\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: hindi maapdeyt ang talaksang shadow password\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tBuong Pangalan: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tBilang ng Silid: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tTelepono sa Trabaho: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tTelepono sa Bahay: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "Hindi maaldaba ang talaksang password; subukan muli mamaya.\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Error sa pag-apdeyt ng password entry.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Hindi maisulat ang pagbabago sa talaksang password.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Hindi maalis ang aldaba sa talaksang password.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: hindi maaldaba ang talaksang grupo\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: hindi maaldaba ang talaksang gshadow\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksang shadow\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: error sa pag-apdeyt ng talaksang shadow\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: error sa pag-apdeyt ng ipinasok sa grupo\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: linya %d: di kilalang grupo %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: linya %d: hindi ma-apdeyt ang ipinasok\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: hindi maaldaba ang talaksang shadow\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: error sa pag-apdeyt ng talaksang shadow\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: error sa pag-apdeyt ng talaksang password\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: linya %d: di kilalang gumagamit %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: linya %d: hindi ma-apdeyt password entry\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: hindi kilalang gumagamit\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Di kilalang Gumagamit: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Pag-gamit: %s [-r|-R] grupo\n"
+
+#~ msgid " %s [-a user] group\n"
+#~ msgstr " %s [-a gumagamit] grupo\n"
+
+#~ msgid " %s [-d user] group\n"
+#~ msgstr " %s [-d gumagamit] grupo\n"
+
+#~ msgid " %s [-A user,...] [-M user,...] group\n"
+#~ msgstr " %s [-A gumagamit,...] [-M gumagamit,...] grupo\n"
+
+#~ msgid " %s [-M user,...] group\n"
+#~ msgstr " %s [-M gumagamit,...] grupo\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: hindi makakuha ng aldaba\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: hindi makuha ang aldaba ng shadow\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: hindi maisulat muli ang talaksang shadow\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: hindi matanggal ang aldaba ng talaksan\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: hindi ma-apdeyt ang entry\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: hindi ma-apdeyt ang entry na shadow\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "di kilalang grupo: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksan\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksang shadow\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Sino ka?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: di kilalang miyembro %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: error sa pagdagdag ng entry ng bagong grupo\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: hindi maisulat muli ang talaksang grupo\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: hindi maisulat muli ang talaksang grupo ng shadow\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: hindi maaldaba ang talaksang grupo\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksang grupo\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: hindi maaldaba ang talaksang grupo ng shadow\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksang grupo ng shadow\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: hindi kakaiba ang gid na %u\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: error sa pagtanggal ng entry ng grupo\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: error sa pagtanggal ng entry ng grupong shadow\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: hindi matanggal ang pangunahing grupo ng gumagamit.\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Hindi mahanap ang kasapi na tatanggalin\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr ""
+#~ "Pag-gamit: groupmems -a pangalan | -d pangalan | -D | -l [-g pangalan-ng-"
+#~ "grupo]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr ""
+#~ "Ang root lamang ang maaaring magdagdag ng kasapi sa ibang mga grupo\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "Kinakailangan ng akses sa grupo\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "Hindi pangunahing may-ari ng kasalukuyang grupo\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "Bigo ang pagpapakilalang PAM para kay\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "Hindi maaldaba ang talaksang grupo\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "Hindi maisara ang talaksang grupo\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s hindi nahanap sa /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: hindi kakaibang GID ang %u\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s ay hindi kakaibang pangalan\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: hindi maisulat muli ang talaksang password\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: hindi maaldaba ang talaksang password\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksang password\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: hindi ma-apdeyt ang ipinasok sa shadow para kay %s\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: hindi ma-apdeyt ang ipinasok para sa grupong %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: hindi maaldaba ang talaksang grupo na shadow\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksang grupo na shadow\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: hindi matanggal ang grupong shadow %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: hindi ma-apdeyt ang talaksang grupo na shadow\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: hindi matanggal ang talaksang grupo na shadow\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "di kilalang GID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "di kilalang GID: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: walang grupong %s\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: walang gumagamit na nagngangalang %s\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: hindi tanggap na pangalan `%s'\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: hindi maaldaba ang /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: hindi maaldaba ang /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: hindi maaldaba ang /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: hindi maaldaba ang /etc/passwd.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: hindi mabuksan ang mga talaksan\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: hindi maapdeyt ang ipinasok sa passwd para kay %s\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: hindi maaldaba ang talaksang passwd\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksang passwd\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: hindi matanggal ang ipinasok sa shadow para kay %s\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: hindi maapdeyt ang talaksang passwd\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: hindi maapdeyt ang ipinasok para kay %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: hindi matanggal ang talaksang password ng shadow\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: di kilalang GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: di kilalang grupo %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: naubos ang memory sa update_gshadow\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: hindi maisulat muli ang talaksang password na shadow\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: hindi maaldaba ang talaksang password ng shadow\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksang password ng shadow\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: error sa pagaldaba ng talaksang grupo\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: error sa pagbukas ng talaksang grupo\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: error sa pagaldaba ng talaksang grupo ng shadow\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: error sa pagbukas ng talaksang grupo ng shadow\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: error sa pagdagdag ng bagong ipapasok sa password\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: error sa pagdagdag ng bagong ipinasok na password sa shadow\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr ""
+#~ "%s: babala: CREATE_HOME hindi suportado, gamitin na lamang ang -m.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: error sa pag-apdeyt ng ipinasok sa grupo\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: error sa pag-apdeyt ng ipinasok sa grupo\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksang grupo\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksang grupo ng shadow\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: error sa pagtanggal ng ipinasok na password\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: error sa pagtanggal ng ipinasok na password sa shadow\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: error sa pagdagdag ng entry ng bagong grupo\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu ay hindi kakaiba\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: error sa pagpalit ng ipinasok na password\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: error sa pagtanggal ng ipinasok na password\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: error sa pagtanggal ng ipinasok na shadow password\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: hindi makakuha ng kakaibang GID\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " noong '%.100s' mula sa '%.200s'"
+
+#~ msgid " on '%.100s'"
+#~ msgstr " noong `%.100s'"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: linya %d: hindi makalikha ng UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: hindi kakaiba ang pangalang %s\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ " -h, --help\t\tdisplay this help message and exit\n"
+#~ " -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Pag-gamit: chpasswd [mga opsiyon]\n"
+#~ "\n"
+#~ "Mga opsiyon:\n"
+#~ " -e, --encrypted\tang mga bigay na mga password ay naka-encrypt\n"
+#~ " -h, --help\t\tipakita itong payo na ito at lumabas\n"
+#~ " -m, --md5\t\tgamitin ang MD5 encryption imbes na DES kapag ang\n"
+#~ "\t\t\tmga ibinigay na mga password ay hindi naka-encrypt\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Walang talaksang password\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Ipagpaumanhin.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Ipagpaumanhin, ang password ni %s ay hindi pa mapapalitan.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Pasensya na."
diff --git a/po/tr.gmo b/po/tr.gmo
new file mode 100644
index 0000000..40afded
--- /dev/null
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
new file mode 100644
index 0000000..6ce93b9
--- /dev/null
+++ b/po/tr.po
@@ -0,0 +1,3940 @@
+# translation of shadow.po to Türkçe
+# Turkish translation of shadow.
+# This file is distributed under the same license as the shadow package.
+#
+# Mehmet Türker <mturker@innova.com.tr>, 2004.
+# Murat Şenel <muratasenel@gmail.com>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.18\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2008-03-29 20:31+0200\n"
+"Last-Translator: Mehmet Türker <mturker@innova.com.tr>\n"
+"Language-Team: Türkçe <tr@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: KBabel 1.11.1\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"'%s' içinde '%s' isminde birden fazla giriş mevcut. Lütfen bunu pwck yada "
+"grpck kullanarak düzeltin.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "kripto medotu libcrypt tarafından desteklenmiyor? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Yapılandırma bilgileri için yer ayrılamadı.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"yapılandırma hatası - bilinmeyen öğe '%s' (sistem yöneticisine bildirin)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr ""
+
+msgid "Password: "
+msgstr "Parola: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s kullanıcı parolası: "
+
+#, fuzzy
+#| msgid "Cannot open the password file.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "Parola dosyası açılamıyor.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr ""
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not set sename for %s\n"
+msgstr "Yapılandırma bilgileri için yer ayrılamadı.\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "%s için ömür bilgisi değiştiriliyor\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "%s: Kullanıcı isminiz belirlenemedi.\n"
+
+#, fuzzy, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "%s: satır %d: kullanıcı %s bulunamadı\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: yetersiz bellek\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: %s dosyası güncellenemiyor\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: geçersiz ev dizini '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: %s dizini %s olarak yeniden adlandırılamıyor\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: %s dizini yaratılamıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: uyarı: silinemiyor "
+
+#, fuzzy, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: uyarı: silinemiyor "
+
+#, fuzzy, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: yeniden adlandırma: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: %s dizini %s olarak yeniden adlandırılamıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: %s dizini %s olarak yeniden adlandırılamıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: uyarı: silinemiyor "
+
+#, fuzzy, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: %s dizini yaratılamıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: uyarı: silinemiyor "
+
+#, fuzzy, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: %s dosyası güncellenemiyor\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: gölge dosyası güncellenemedi\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: yeniden adlandırma: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: %s dosyası açılamıyor\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Uyarı: bilinmeyen grup %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Uyarı: grup sayısı çok fazla\n"
+
+msgid "Your password has expired."
+msgstr "Parolanızın kullanım süresi doldu."
+
+msgid "Your password is inactive."
+msgstr "Parolanız etkin değil."
+
+msgid "Your login has expired."
+msgstr "Hesabınızın kullanım süresi doldu."
+
+msgid " Contact the system administrator."
+msgstr " Sistem yöneticisine başvurunuz."
+
+msgid " Choose a new password."
+msgstr "Yeni bir parola seçin."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Parolanızın kullanım süresi %ld gün sonra dolacaktır.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Parolanızın kullanım süresi yarın dolacaktır."
+
+msgid "Your password will expire today."
+msgstr "Parolanızın kullanım süresi bugün dolacaktır."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Geçilemeyen tty: %s"
+
+#, fuzzy, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: alanlar çok uzun\n"
+
+#, fuzzy, c-format
+msgid "%s: "
+msgstr "%s: %s\n"
+
+msgid ": "
+msgstr ""
+
+msgid "Environment overflow\n"
+msgstr "Ortam taşması\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "$%s değiştirilemez\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"Son girişten beri %d başarısız girişim. En sonuncusu %s üzerinde %s idi.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "postakutusu sahibi değiştirilmedi"
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr "Benzersiz bir UID alınamıyor (mevcut UID yok)\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "Tek (benzersiz) bir GID alınamadı (kullanılabilecek mevcut GID yok)\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "Tek (benzersiz) bir GID alınamadı (kullanılabilecek mevcut GID yok)\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: kullanıcı yaratılamıyor\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: kullanıcı yaratılamıyor\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr "Benzersiz bir UID alınamıyor (mevcut UID yok)\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "Benzersiz bir UID alınamıyor (mevcut UID yok)\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "Benzersiz bir UID alınamıyor (mevcut UID yok)\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: PAM yetkilendirmesi başarısız oldu\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: geçersiz alan '%s'\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Could not seteuid to %d\n"
+msgstr "Yapılandırma bilgileri için yer ayrılamadı.\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not set caps\n"
+msgstr "Yapılandırma bilgileri için yer ayrılamadı.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't open file\n"
+msgid "%s: snprintf failed!\n"
+msgstr "%s: dosya açılamıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: satır %d: chown başarısız oldu\n"
+
+#, fuzzy, c-format
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: satır %d: chown başarısız oldu\n"
+
+msgid "Too many logins.\n"
+msgstr "Çok fazla oturum.\n"
+
+msgid "You have new mail."
+msgstr "Yeni e-postanız var."
+
+msgid "No mail."
+msgstr "E-Posta yok."
+
+msgid "You have mail."
+msgstr "E-Postanız var."
+
+msgid "no change"
+msgstr "değişiklik yok"
+
+msgid "a palindrome"
+msgstr "bu bir palindrome (tersinden de aynı şekilde okunabilen kelime)"
+
+msgid "case changes only"
+msgstr "sadece durum değişiklikleri"
+
+msgid "too similar"
+msgstr "çok benzer"
+
+msgid "too simple"
+msgstr "çok basit"
+
+msgid "rotated"
+msgstr "döndürülmüş"
+
+msgid "too short"
+msgstr "çok kısa"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Hatalı parola: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() başarısız, hata %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+msgid "passwd: password unchanged\n"
+msgstr "Parola değişti "
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: şifre başarıyla güncellendi\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: depo %s desteklenmiyor\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start: hata %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd: pam_start() başarısız, hata %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "`%s' için yanlış parola\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr ""
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: ayrıcalıklar iptal edilemedi (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: geçersiz ev telefonu: '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: %s dizini yaratılamıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: %s dizini yaratılamıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: %s dizini yaratılamıyor\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"Geçersiz ENCRYPT_METHOD değeri: '%s'.\n"
+"Varsayılan olarak DES kullanılacak.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "\"%s\" dizinine geçilemiyor\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Dizin yok, HOME=/ ile giriş yapılıyor"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "%s çalıştırılamıyor"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Geçersiz kök dizin '%s'\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Kök dizin '%s' olarak değiştirilemiyor\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: kullanıcı %s şu an oturumda\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: kullanıcı %s şu an oturumda\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Kullanıcı isminiz belirlenemedi."
+
+#, fuzzy
+msgid "No"
+msgstr "Hayır\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Kullanım: %s [girdi]\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -s, --sha-rounds SHA* kripto algoritmaları için kullanılacak\n"
+" SHA yuvarlamaları sayısı\n"
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -s, --sha-rounds SHA* kripto algoritmaları için kullanılacak\n"
+" SHA yuvarlamaları sayısı\n"
+
+#, fuzzy
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -s, --sha-rounds SHA* kripto algoritmaları için kullanılacak\n"
+" SHA yuvarlamaları sayısı\n"
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Yeni değeri girin, veya varsayılan değer için ENTER'a basın"
+
+msgid "Minimum Password Age"
+msgstr "Asgari Parola Ömrü"
+
+msgid "Maximum Password Age"
+msgstr "Azami Parola Ömrü"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Son Parola Değişimi (YYYY-AA-GG)"
+
+msgid "Password Expiration Warning"
+msgstr "Parola Kullanım Süresi Bitti Uyarısı"
+
+msgid "Password Inactive"
+msgstr "Parola Pasif"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Hesap Bitimi Tarihi (YYYY-AA-GG)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Son Parola Değişimi\t\t\t\t\t: "
+
+msgid "never"
+msgstr "Hiçbir zaman"
+
+msgid "password must be changed"
+msgstr "Parola değiştirilmeli"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Parola Kullanım Süresi Dolumu\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Parola Pasif\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Hesap Bitimi\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Şifre değişiklikleri arasındaki en az gün sayısı\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Maksimum giriş denemesi sayısı aşıldı \t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Şifre süresinin dolumundan önceki uyarı gün sayısı\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: geçersiz tarih '%s'\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: geçersiz sayısal argüman '%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: diğer bayraklarla beraber \"l\" yi kullanmayınız\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: İzin verilmedi\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Kullanıcı isminiz belirlenemedi.\n"
+
+#, fuzzy, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: dosyalar kilitlenemiyor, daha sonra tekrar deneyin\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: %s dosyası açılamıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: çatallama (fork) hatası: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: ayrıcalıklar iptal edilemedi (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: shadow parola dosyası açılamadı\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: kullanıcı `%s' mevcut değil\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "%s için ömür bilgisi değiştiriliyor\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: alanları değiştirirken hata oluştu\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr "Kullanım: %s [girdi]\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr "Tam İsim"
+
+#, fuzzy, c-format
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Oda Numarası"
+
+msgid "Work Phone"
+msgstr "İş Telefonu"
+
+msgid "Home Phone"
+msgstr "Ev Telefonu"
+
+msgid "Other"
+msgstr "Diğer"
+
+msgid "Cannot change ID to root.\n"
+msgstr "ID root kullanıcısı olarak değiştirilemiyor.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: geçersiz isim: '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: geçersiz oda numarası: '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: geçersiz iş telefonu: '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: geçersiz ev telefonu: '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s' geçersiz karakterler içeriyor\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s' geçersiz karakterler içeriyor\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: kullanıcı `%s' mevcut değil\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: kullanıcı `%s' NIS istemcisinde değiştirilemedi.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: `%s' bu istemci için NIS efendisidir.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "%s için kullanıcı bilgileri değiştiriliyor\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: alanlar çok uzun\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Kullanım: %s [girdi]\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr ""
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+" -s, --sha-rounds SHA* kripto algoritmaları için kullanılacak\n"
+" SHA yuvarlamaları sayısı\n"
+
+#, fuzzy
+#| msgid ""
+#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
+#| " crypt algorithms\n"
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+" -s, --sha-rounds SHA* kripto algoritmaları için kullanılacak\n"
+" SHA yuvarlamaları sayısı\n"
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: %s bayrağına SADECE %s bayrağı ile kullanıldığında izin verilir\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: -c, -e, ve -m bayrakları özel bayraklardır\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: desteklenmeyen kripto metodu: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: satır %d: satır çok uzun\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: satır %d: yeni parola eksik\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: ayrıcalıklar iptal edilemedi (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: grup %s mevcut değil\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: satır %d: kayıt güncellenemiyor\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: hata algılandı, değişiklikler görmezden gelindi\n"
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: kullanıcı `%s' mevcut değil\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: kullanıcı `%s' mevcut değil\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr "Oturum Kabuğu"
+
+#, fuzzy, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "%s için kabuğu değiştiremezsiniz.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "%s için oturum kabuğu değiştiriliyor\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Geçersiz kayıt: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s geçersiz bir kabuk.\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: kullanıcı %s mevcut değil\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: uyarı: %s %s kullanıcısına ait değil\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+" -s, --sha-rounds SHA* kripto algoritmaları için kullanılacak\n"
+" SHA yuvarlamaları sayısı\n"
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: %s ve %s seçenekleri çakışıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "lastlog: bilinmeyen argüman: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: %s dizini yaratılamıyor\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "Oturum Aç Failures Maximum Latest Açık\n"
+
+#, fuzzy, c-format
+msgid " [%lus left]"
+msgstr " [%lds kaldı]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds kilitli]"
+
+#, fuzzy, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s: %s dizini yaratılamıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: ayrıcalıklar iptal edilemedi (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: %s dizini yaratılamıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "Bilinmeyen kullanıcı veya aralık: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: %s dizini %s olarak yeniden adlandırılamıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: ayrıcalıklar iptal edilemedi (%s)\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Kullanım: %s [girdi]\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr ""
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr ""
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr ""
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+
+#, fuzzy
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "%s için parola değiştirilemedi.\n"
+
+#, fuzzy
+msgid "The options cannot be combined.\n"
+msgstr "%s için parola değiştirilemedi.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: -A için gölge grup parolaları gerekli\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: grup %s mevcut değil\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: çatallama (fork) hatası: %s\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "%s grubu için parola değiştiriliyor\n"
+
+msgid "New Password: "
+msgstr "Yeni parola: "
+
+msgid "Re-enter new password: "
+msgstr "Yeni parolayı tekrar girin: "
+
+msgid "They don't match; try again"
+msgstr "Eşleşmiyorlar; tekrar deneyin"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Daha sonra tekrar deneyin\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "%s kullanıcısı %s grubuna ekleniyor\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "%s kullanıcısı %s grubundan çıkarılıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: kullanıcı `%s' mevcut değil\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Bir tty değil\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Kullanım: %s [girdi]\n"
+
+#, fuzzy
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+" -s, --sha-rounds SHA* kripto algoritmaları için kullanılacak\n"
+" SHA yuvarlamaları sayısı\n"
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr ""
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+" -s, --sha-rounds SHA* kripto algoritmaları için kullanılacak\n"
+" SHA yuvarlamaları sayısı\n"
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid " -r, --system create a system account\n"
+msgstr ""
+
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s geçerli bir grup adı değil\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: geçersiz grup adı `%s'\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K seçeneği ANAHTAR=DEĞER gerektirir\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: grup %s zaten var\n"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "Üye zaten mevcut\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: Kullanıcı isminiz belirlenemedi.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: %s dizini %s olarak yeniden adlandırılamıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr ""
+"%s: '%s' kullanıcısı için birincil grup %u grubundan %u grubuna "
+"değiştirilemiyor.\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: grup %s mevcut değil\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: grup '%s' bir NIS grubu.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s NIS efendisidir\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: kullanıcı %s bir NIS kullanıcısı\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: Bellek yetersiz. Grup veritabanı güncellenemiyor.\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr "Kullanım: %s [girdi]\n"
+
+#, fuzzy
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+" -s, --sha-rounds SHA* kripto algoritmaları için kullanılacak\n"
+" SHA yuvarlamaları sayısı\n"
+
+msgid "\n"
+msgstr ""
+
+msgid "Actions:\n"
+msgstr ""
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr ""
+
+msgid " -l, --list list the members of the group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr ""
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: geçersiz grup adı `%s'\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: grup %s bir NIS grubudur\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: bilinmeyen kullanıcı %s\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr "Kullanım: %s [girdi]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr "Kullanım: %s [girdi]\n"
+
+#, fuzzy
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+" -s, --sha-rounds SHA* kripto algoritmaları için kullanılacak\n"
+" SHA yuvarlamaları sayısı\n"
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s ve -r uyumsuz\n"
+
+msgid "invalid group file entry"
+msgstr "geçersiz grup dosyası kaydı"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "`%s' satırı silinsin mi? "
+
+msgid "duplicate group entry"
+msgstr "mükerrer grup kaydı"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "geçersiz grup adı '%s'\n"
+
+#, fuzzy, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "geçersiz grup adı '%s'\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "grup %s: %s kullanıcısı yok\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "'%s' üyesi silinsin mi? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "%s girişi içinde grup dosyası kaydı eşleşmedi\n"
+
+#, fuzzy, c-format
+msgid "add group '%s' in %s? "
+msgstr "Grup %s, %s'in içine eklensin mi?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "geçersiz gölge grup dosyası kaydı"
+
+msgid "duplicate shadow group entry"
+msgstr "mükerrer gölge grup kaydı"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "gölge grubu %s: %s yönetici kullanıcı değil\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "yönetici üye '%s' silinsin mi? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "gölge grubu %s: kullanıcı %s mevcut değil\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: dosyalar güncellendi\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: değişiklik yok\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: %s dosyası güncellenemiyor\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Kullanım: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Kullanım: id\n"
+
+msgid " groups="
+msgstr ".gruplar="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+
+msgid "Username Port From Latest"
+msgstr "Kullanıcı adı Port Kimden Sonuncu"
+
+msgid "Username Port Latest"
+msgstr "Kullanıcı adı Port Sonuncu"
+
+msgid "**Never logged in**"
+msgstr "**Hiç giriş yapmadı**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s: %s dizini yaratılamıyor\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s: parola dosyası güncellenemedi\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 "Kullanım: %s [-p] [isim]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h host] [-f isim]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r host\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Geçersiz giriş zamanı"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Sistem rutin bakımlar için kapalı"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Bağlantı kesilmesi atlandı -- root girişi olanaklı.]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Bu bir utmp girişi değil. En düşük \"sh\" düzeyinde \"login\" i "
+"çalıştırmalısınız. "
+
+#, fuzzy, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Giriş %d saniye sonra zaman aşımına uğradı.\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM başarısızlığa uğradı, çıkıyor: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s giriş: "
+
+msgid "login: "
+msgstr "giriş: "
+
+#, fuzzy, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Maksimum giriş denemesi sayısı aşıldı (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "Giriş PAM tarafından iptal edildi\n"
+
+msgid "Login incorrect"
+msgstr "Giriş geçersiz"
+
+#, fuzzy, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "%s: satır %d: kullanıcı %s bulunamadı\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s giriş: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: çatallama hatası: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSCTTY %s için başarısız oldu"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Uyarı: geçici bir kilitlenme sonrasında giriş tekrar olanaklı kılındı."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Son giriş: %s üzerinden %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Son giriş: %s üzerinden %.19s"
+
+#, c-format
+msgid " from %.*s"
+msgstr "%.*s'den"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"oturum açma süresi aşıldı\n"
+"\n"
+
+#, fuzzy
+msgid "Usage: logoutd\n"
+msgstr "Kullanım: id\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: can't open group file\n"
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr "%s: grup dosyası açılamıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: ayrıcalıklar iptal edilemedi (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: ayrıcalıklar iptal edilemedi (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: alanlar çok uzun\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: geçersiz ana dizin '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: %s dizini yaratılamıyor\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Kullanım: newgrp [-] [grup]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Kullanım: sg grup [[-c] komut]\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: ayrıcalıklar iptal edilemedi (%s)\n"
+
+msgid "Invalid password.\n"
+msgstr "Geçersiz parola.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: çatallama (fork) hatası: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: kullanıcı `%s' mevcut değil\n"
+
+msgid "too many groups\n"
+msgstr "çok fazla grup\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid " -b, --badnames allow bad names\n"
+msgstr ""
+
+msgid " -r, --system create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: %s grubu bir shadow grubu, fakat /etc/group içinde mevcut değil\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: geçersiz kullanıcı adı '%s'\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: geçersiz kullanıcı adı '%s'\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: satır %d: geçersiz satır\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: kullanıcı %s için kayıt güncellenemiyor (passwd veritabanında mevcut "
+"değil)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: satır %d: kullanıcı yaratılamıyor\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: satır %d: grup yaratılamıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: kullanıcı `%s' mevcut değil\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: satır %d: parola güncellenemiyor\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: satır %d: mkdir başarısız oldu\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: satır %d: chown başarısız oldu\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: satır %d: kayıt güncellenemiyor\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: ayrıcalıklar iptal edilemedi (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: kullanıcı yaratılamıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: grup dosyası güncellenemiyor\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -s, --sha-rounds SHA* kripto algoritmaları için kullanılacak\n"
+" SHA yuvarlamaları sayısı\n"
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -s, --sha-rounds SHA* kripto algoritmaları için kullanılacak\n"
+" SHA yuvarlamaları sayısı\n"
+
+msgid " -q, --quiet quiet mode\n"
+msgstr ""
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -s, --sha-rounds SHA* kripto algoritmaları için kullanılacak\n"
+" SHA yuvarlamaları sayısı\n"
+
+msgid "Old password: "
+msgstr "Eski parola: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Yeni parolayı girin (en az %d karakter)\n"
+"Lütfen büyük, küçük harf ve rakamların bir kombinasyonunu kullanın.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Yeni parolayı girin (asgari %d, azami %d karakter)\n"
+"Lütfen büyük, küçük harf ve rakamların bir kombinasyonunu kullanın.\n"
+
+msgid "New password: "
+msgstr "Yeni parola: "
+
+msgid "Try again."
+msgstr "Yeniden deneyin."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Uyarı: zayıf parola (yine de kullanmak için aynısını tekrar girin)."
+
+msgid "They don't match; try again.\n"
+msgstr "Eşleşmediler, tekrar deneyin.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "%s için parola değiştirilemedi.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "%s için parola henüz değiştirilemiyor.\n"
+
+#, fuzzy, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: kullanıcının kilidini kaldırmak şifresiz bir hesabın oluşmasına yol "
+"açacaktı.\n"
+"Bu kullanıcı hesabının kilidini kaldırmak için usermod -p ile bir parola "
+"belirlemelisiniz.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: depo %s desteklenmiyor\n"
+
+#, c-format
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: %s için şifre bilgisini göremez ve değiştiremezsiniz..\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "%s için parola değiştiriliyor\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "%s için parola değişmedi\n"
+
+#, fuzzy, c-format
+msgid "%s: password changed.\n"
+msgstr "Parola değişti "
+
+#, fuzzy, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "Parola Kullanım Süresi Bitti Uyarısı"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr "Kullanım: %s [girdi]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr "Kullanım: %s [girdi]\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+
+msgid "invalid password file entry"
+msgstr "geçersiz parola dosyası kaydı"
+
+msgid "duplicate password entry"
+msgstr "mükerrer parola kaydı"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "geçersiz kullanıcı adı '%s'\n"
+
+#, fuzzy, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "geçersiz kullanıcı adı '%s'\n"
+
+#, fuzzy, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "kullanıcı %s: %u grubu mevcut değil\n"
+
+#, fuzzy, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "kullanıcı %s: %s dizini mevcut değil\n"
+
+#, fuzzy, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "kullanıcı %s: uygulama %s mevcut değil\n"
+
+#, fuzzy, c-format
+msgid "no tcb directory for %s\n"
+msgstr "%s: %s dizini yaratılamıyor\n"
+
+#, fuzzy, c-format
+msgid "create tcb directory for %s?"
+msgstr "%s: %s dizini yaratılamıyor\n"
+
+#, fuzzy, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "%s: %s dizini yaratılamıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: %s dosyası kilitlenemiyor\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "%s içinde eşleşen parola dosyası kaydı yok\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "'%s' adlı kullanıyı %s'e ekle?"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "geçersiz gölge parola dosyası kaydı"
+
+msgid "duplicate shadow password entry"
+msgstr "mükerrer gölge parola kaydı"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "kullanıcı %s: gelecekteki son parola değişimi\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: %s dosyası açılamıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: dosya tekrar yazılamıyor\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Bu hesap için 'su'ya erişim ENGELLENDİ.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Parola yetkilendirmesi atlandı.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Lütfen yetkilendirme için KENDİ parolanızı girin.\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: %s dosyası kilitlenemiyor\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr ""
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr ""
+
+msgid "Session terminated, terminating shell..."
+msgstr ""
+
+#, c-format
+msgid " ...killed.\n"
+msgstr ""
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr ""
+
+msgid " ...terminated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: su [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
+#| " -h, --help display this help message and exit\n"
+#| " -, -l, --login make the shell a login shell\n"
+#| " -m, -p,\n"
+#| " --preserve-environment do not reset environment variables, and\n"
+#| " keep the same shell\n"
+#| " -s, --shell SHELL use SHELL instead of the default in "
+#| "passwd\n"
+#| "\n"
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"Kullanım: su [seçenekler] [KULLANICI]\n"
+"\n"
+"Seçenekler:\n"
+" -c --command KOMUT KOMUT u istenen kabuğa geçir\n"
+" -h, --help bu yardım dosyasını göster ve çık\n"
+" -, -l, --login kabuğu oturum açma kabuğu haline getirir\n"
+" -m, -p,\n"
+" --preserve-environment çevre değişkenlerini sıfırlama ve \n"
+" aynı kabuğu sakla\n"
+" -s, --shell KABUK(SHELL) passwd dosyasındaki öntanımlı kabuk yerine\n"
+" KABUK kabuğunu kullan\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Dikkate alınmadı)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "su %s için yetkili değilsiniz\n"
+
+msgid "(Enter your own password)"
+msgstr "(Kendi parolanızı girin)"
+
+#, fuzzy, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: PAM yetkilendirmesi başarısız oldu\n"
+
+#, fuzzy, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "su %s için yetkili değilsiniz\n"
+
+#, fuzzy, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "'root' için parola kaydı yok"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: bir terminalden çalıştırılmalı\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: hata %d\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: %s dizini %s olarak yeniden adlandırılamıyor\n"
+
+#, fuzzy, c-format
+msgid "Cannot execute %s\n"
+msgstr "%s çalıştırılamıyor"
+
+msgid "No password file"
+msgstr "Parola dosyası yok"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY başarısız oldu"
+
+msgid "No password entry for 'root'"
+msgstr "'root' için parola kaydı yok"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Normal başlangıç için control-d ye basın,\n"
+"(ya da sistem bakımı için root parolasını verin):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Sistem Bakımı Kipine Giriliyor"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: yeni varsayılanlar dosyası oluşturulamadı\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: yeni varsayılanlar dosyası oluşturulamadı\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: yeni varsayılanlar dosyası açılamadı\n"
+
+#, fuzzy, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: satır %d: chown başarısız oldu\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: %s dizini yaratılamıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: yeniden adlandırma: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: grup '%s' bir NIS grubu.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: çok fazla grup verildi (azami %d).\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr "Kullanım: %s [girdi]\n"
+
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+" -s, --sha-rounds SHA* kripto algoritmaları için kullanılacak\n"
+" SHA yuvarlamaları sayısı\n"
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr ""
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr ""
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+" -s, --sha-rounds SHA* kripto algoritmaları için kullanılacak\n"
+" SHA yuvarlamaları sayısı\n"
+
+#, fuzzy
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+" -s, --sha-rounds SHA* kripto algoritmaları için kullanılacak\n"
+" SHA yuvarlamaları sayısı\n"
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+" -s, --sha-rounds SHA* kripto algoritmaları için kullanılacak\n"
+" SHA yuvarlamaları sayısı\n"
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+" -s, --sha-rounds SHA* kripto algoritmaları için kullanılacak\n"
+" SHA yuvarlamaları sayısı\n"
+
+#, fuzzy
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+" -s, --sha-rounds SHA* kripto algoritmaları için kullanılacak\n"
+" SHA yuvarlamaları sayısı\n"
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr ""
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr ""
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: geçersiz ana dizin '%s'\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: geçersiz açıklama '%s'\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: geçersiz ev dizini '%s'\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: -e için gölge parolalar gerekli\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: -f için gölge parolalar gerekli\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: geçersiz alan '%s'\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: geçersiz kabuk '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: uyarı: %s %s kullanıcısına ait değil\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rewrite password file\n"
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s: parola dosyası yazılamıyor\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s: %s dizini yaratılamıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: ayrıcalıklar iptal edilemedi (%s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error updating files\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: dosyaların güncellenmesinde hata oluştu\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: %s dizini yaratılamıyor\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: geçersiz ev dizini '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "postakutusu sahibi değiştirilmedi"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: %s dizini yaratılamıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: satır %d: chown başarısız oldu\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: satır %d: chown başarısız oldu\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "Mesaj kutusu dosyası yaratılıyor"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"'mail' grubu bulunamadı. Kullanıcının mail kutusu dosyası 0600 dosya "
+"yetkileriyle yaratılıyor.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Mail kutusu dosyası için yetkiler ayarlanıyor"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: kullanıcı %s mevcut\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: grup %s mevcut - eğer bu kullanıcıyı bu gruba eklemek istiyorsanız, -g "
+"kullanın.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: kullanıcı yaratılamıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: GID %u tek değil\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: %s dizini yaratılamıyor\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: grup yaratılamıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: kullanıcı yaratılamıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: grup yaratılamıyor\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: uyarı: Ev dizini zaten mevcut.\n"
+"Temel dizinden hiçbir dosya kopyalanmıyor.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+" -s, --sha-rounds SHA* kripto algoritmaları için kullanılacak\n"
+" SHA yuvarlamaları sayısı\n"
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr ""
+"%s: '%s' kullanıcısı için birincil grup %u grubundan %u grubuna "
+"değiştirilemiyor.\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: Başka bir kullanıcı için birincil grub olan %s grubu kaldırılamıyor.\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "%s: %s dizini %s olarak yeniden adlandırılamıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: geçersiz ev dizini '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: uyarı: silinemiyor "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s %s kullanıcısına ait değil, silinmiyor\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: ayrıcalıklar iptal edilemedi (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: %s dizini %s olarak yeniden adlandırılamıyor\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: %s dizini %s olarak yeniden adlandırılamıyor\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: kullanıcı %s bir NIS kullanıcısı\n"
+
+#, fuzzy, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: geçersiz ev dizini '%s'\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s: %s dizini silinmiyor (%s kullanıcısının ev dizinini silecekti)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: %s dizini silinirken hata oluştu\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: %s dizini silinirken hata oluştu\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr ""
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -s, --sha-rounds SHA* kripto algoritmaları için kullanılacak\n"
+" SHA yuvarlamaları sayısı\n"
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+
+#, fuzzy
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr ""
+" -s, --sha-rounds SHA* kripto algoritmaları için kullanılacak\n"
+" SHA yuvarlamaları sayısı\n"
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr ""
+
+msgid " -L, --lock lock the user account\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+" -s, --sha-rounds SHA* kripto algoritmaları için kullanılacak\n"
+" SHA yuvarlamaları sayısı\n"
+
+#, fuzzy
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+" -s, --sha-rounds SHA* kripto algoritmaları için kullanılacak\n"
+" SHA yuvarlamaları sayısı\n"
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr ""
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr ""
+
+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"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: kullanıcının kilidini kaldırmak şifresiz bir hesabın oluşmasına yol "
+"açacaktı.\n"
+"Bu kullanıcı hesabının kilidini kaldırmak için usermod -p ile bir parola "
+"belirlemelisiniz.\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: kullanıcı %s mevcut\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: geçersiz tarih '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: geçersiz tarih '%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: no options\n"
+msgstr "%s: %s dosyası açılamıyor\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: -L, -p, ve -U bayrakları özel bayraklardır\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: -e ve -f için gölge parolalar gerekli\n"
+
+#, fuzzy, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "Üye zaten mevcut\n"
+
+#, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: %s dizini mevcut\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: %s dizini yaratılamıyor\n"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: uyarı: eski Ev dizinindeki tüm dosyalar kaldırılamadı %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: %s dizini %s olarak yeniden adlandırılamıyor\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: uyarı: %s %s kullanıcısına ait değil\n"
+
+msgid "failed to change mailbox owner"
+msgstr "postakutusu sahibi değiştirilmedi"
+
+msgid "failed to rename mailbox"
+msgstr "postakutusu isim değişikliği başarısız"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s: ayrıcalıklar iptal edilemedi (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s: ayrıcalıklar iptal edilemedi (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s: ayrıcalıklar iptal edilemedi (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s: ayrıcalıklar iptal edilemedi (%s)\n"
+
+#, fuzzy, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Değişiklik yapıldı: %s.\n"
+"Uyumu sağlamak için değiştirilmesi gerekiyor: %s.\n"
+"Bunu yapmak için lütfen `%s' komutunu kullanın.\n"
+
+msgid " -g, --group edit group database\n"
+msgstr ""
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr ""
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: ayrıcalıklar iptal edilemedi (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s değiştirilmedi\n"
+
+#, fuzzy
+msgid "failed to create scratch directory"
+msgstr "postakutusu isim değişikliği başarısız"
+
+#, fuzzy
+msgid "failed to drop privileges"
+msgstr "%s: ayrıcalıklar iptal edilemedi (%s)\n"
+
+#, fuzzy
+msgid "Couldn't get file context"
+msgstr "Dosya kilitlenemedi"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+#, fuzzy
+msgid "failed to gain privileges"
+msgstr "%s: ayrıcalıklar iptal edilemedi (%s)\n"
+
+msgid "Couldn't lock file"
+msgstr "Dosya kilitlenemedi"
+
+msgid "Couldn't make backup"
+msgstr "Yedek alınamadı"
+
+#, fuzzy, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr "%s: %s /etc/passwd içinde bulunamadı\n"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+#, fuzzy
+msgid "failed to open scratch file"
+msgstr "Grup dosyası açılamıyor\n"
+
+#, fuzzy
+msgid "failed to unlink scratch file"
+msgstr "%s: alanlar çok uzun\n"
+
+#, fuzzy
+msgid "failed to stat edited file"
+msgstr "postakutusu isim değişikliği başarısız"
+
+#, fuzzy
+msgid "failed to allocate memory"
+msgstr "postakutusu sahibi değiştirilmedi"
+
+#, fuzzy
+msgid "failed to create backup file"
+msgstr "postakutusu isim değişikliği başarısız"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: %s geri yüklenemiyor: %s (değişiklikleriniz %s içinde)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: geçersiz ana dizin '%s'\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Kullanım: %s [girdi]\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "malloc(%d) başarısız oldu\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: chage [options] [LOGIN]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -d, --lastday LAST_DAY set last password change to LAST_DAY\n"
+#~| " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -l, --list show account aging information\n"
+#~| " -m, --mindays MIN_DAYS set minimum number of days before "
+#~| "password\n"
+#~| " change to MIN_DAYS\n"
+#~| " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~| "password\n"
+#~| " change to MAX_DAYS\n"
+#~| " -W, --warndays WARN_DAYS set expiration warning days to "
+#~| "WARN_DAYS\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Kullanım: chage [seçenekler] kullanıcı\n"
+#~ "\n"
+#~ "Seçenekler:\n"
+#~ " -d, --lastday SON_GÜN(LAST_DAY)\n"
+#~ " son şifre değiştirme gününü SON_GÜN "
+#~ "olarak\n"
+#~ " belirle\n"
+#~ " -E, --expiredate GEÇERLİLİK_TARİHİ(EXPIRE_DATE)\n"
+#~ " hesap geçerlilik tarihini "
+#~ "GEÇERLİLİK_TARİHİ\n"
+#~ " olarak belirle\n"
+#~ " -h, --help bu yardım mesajını görüntüle ve çık\n"
+#~ " -I, --inactive INACTIVE kullanım süresi dolduktan sonra şifreyi\n"
+#~ " INACTIVE olarak belirle\n"
+#~ " -l, --list hesap aging bilgisini göster\n"
+#~ " -m, --mindays ASGARİ_GÜN(MIN_DAYS)\n"
+#~ " şifre değişikliği için asgari gün\n"
+#~ " sayısını ASGARİ_GÜN olarak belirle\n"
+#~ " -M, --maxdays AZAMİ_GÜN(MAX_DAYS)\n"
+#~ " şifre değişikliği için azami gün\n"
+#~ " sayısını AZAMİ_GÜN olarak belirle\n"
+#~ " -W, --warndays UYARI_GÜN_SAYISI (WARN_DAYS)\n"
+#~ " zorunlu şifre değişikliği uyarısından "
+#~ "önceki\n"
+#~ " gün sayısını UYARI_GÜN_SAYISI olarak "
+#~ "belirle\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: PAM yetkilendirmesi başarısız oldu\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "Kullanım: %s [-f tam_isim] [-r oda_no] [-w iş_tel]\n"
+#~ "\t[-h ev_tel] [-o diğer] [kullanıcı]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr "Kullanım: %s [-f tam_isim] [-r oda_no] [-w iş_tel] [-h ev_tel]\n"
+
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Kullanım: %s [seçenekler]\n"
+#~ "\n"
+#~ "Seçenekler:\n"
+#~ " -c, --crypt-method kripto metodu (bunlardan biri: %s)\n"
+#~ " -e, --encrypted verilen parolalar kriptolu\n"
+#~ " -h, --help bu yardım dosyasını göster ve çık\n"
+#~ " -m, --md5 şifresiz metin parolayı MD5 algoritması "
+#~ "ile şifrele\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Kullanım: chsh [seçenekler] [KULLANICI]\n"
+#~ "\n"
+#~ "Seçenekler:\n"
+#~ " -h, --help bu yardım mesajını göster ve çık\n"
+#~ " -s, --shell KABUK(SHELL) kullanıcı hesabı için yeni kabuk\n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "Kullanım: expiry {-f|-c}\n"
+
+#, fuzzy
+#~| msgid "%s: cannot open file %s\n"
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "%s: %s dosyası açılamıyor\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "Kullanım: groupdel grup_adı\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "Kullanım: %s [-r] [-s] [grup [gshadow]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "Kullanım: %s [-r] [-s] [grup]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: -s ve -r uyumsuz\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "Kullanım: groupdel grup_adı\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "Kullanım: groupdel grup_adı\n"
+
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Kullanım: lastlog [seçenekler]\n"
+#~ "\n"
+#~ "Seçenekler:\n"
+#~ " -b, --before GÜN_SAYISI(DAYS) GÜN_SAYISI kadar günden daha eski olan\n"
+#~ " lastlog kayıtlarını gösterir\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time GÜN_SAYISI(DAYS) GÜN_SAYISI kadar günden daha yeni olan\n"
+#~ " lastlog kayıtlarını gösterir\n"
+#~ " -u, --user KULLANICI KULLANICI ile belirtilen kullanıcının\n"
+#~ " kastlog yıtlarını gösterir\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: passwd [options] [LOGIN]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -a, --all report password status on all accounts\n"
+#~| " -d, --delete delete the password for the named "
+#~| "account\n"
+#~| " -e, --expire force expire the password for the named "
+#~| "account\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -k, --keep-tokens change password only if expired\n"
+#~| " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -l, --lock lock the named account\n"
+#~| " -n, --mindays MIN_DAYS set minimum number of days before "
+#~| "password\n"
+#~| " change to MIN_DAYS\n"
+#~| " -q, --quiet quiet mode\n"
+#~| " -r, --repository REPOSITORY change password in REPOSITORY "
+#~| "repository\n"
+#~| " -S, --status report password status on the named "
+#~| "account\n"
+#~| " -u, --unlock unlock the named account\n"
+#~| " -w, --warndays WARN_DAYS set expiration warning days to "
+#~| "WARN_DAYS\n"
+#~| " -x, --maxdays MAX_DAYS set maximim number of days before "
+#~| "password\n"
+#~| " change to MAX_DAYS\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Kullanım: passwd [seçenekler] [KULLANICI]\n"
+#~ "\n"
+#~ "Seçenekler:\n"
+#~ " -a, --all tüm hesaplardaki şifre durumunu bildirir\n"
+#~ " -d, --delete ismi belirtilen hesabın şifresini siler\n"
+#~ " -e, --expire ismi belirtilen hesaba ait şifrenin süresini "
+#~ "bitirir\n"
+#~ " -h, --help bu yardım dosyasını göster ve çık\n"
+#~ " -k, --keep-tokens sadece süresi dolduğunda şifreleri "
+#~ "değiştirir\n"
+#~ " -i, --inactive INACTIVE şifre süresi dolduktan sonra, şifreyi "
+#~ "INACTIVE\n"
+#~ " olarak ayarlar\n"
+#~ " -l, --lock ismi belirtilen hesabı kilitler\n"
+#~ " -n, --mindays ASGARİ_GÜN_SAYISI(MIN_DAYS)\n"
+#~ " şifre değiştirilmeden önceki en az gün "
+#~ "sayısını\n"
+#~ " ASGARİ_GÜN_SAYISI olarak ayarlar\n"
+#~ " -q, --quiet sessiz kip\n"
+#~ " -r, --repository DEPO(REPOSITORY)\n"
+#~ " DEPO deposundaki şifreyi değiştirir\n"
+#~ " -S, --status ismi belirtilen hesaptaki şifre durumunu "
+#~ "bildirir\n"
+#~ " -u, --unlock ismi belirtilen hesabın kilidini açar\n"
+#~ " -w, --warndays UYARI_GÜN_SAYISI(WARN_DAYS)\n"
+#~ " şifre dolum uyarı gününü UYARI_GÜN_SAYISI\n"
+#~ " olarak ayarlar\n"
+#~ " -x, --maxdays AZAMİ_GÜN_SAYISI(MAX_DAYS)\n"
+#~ " şifre değiştirilmeden önceki en fazla gün\n"
+#~ " sayısını AZAMİ_GÜN_SAYISI olarak ayarlar\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr "Kullanım: %s [-q] [-r] [-s] [parola [gölge]]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr "Kullanım: %s [-q] [-r] [-s] [parola [gölge]]\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "Kullanım: id\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "Kullanım: id\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "Bilinmeyen id: %s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "Kabuk yok\n"
+
+#~ msgid ""
+#~ "Usage: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force removal of files,\n"
+#~ " even if not owned by user\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -r, --remove remove home directory and mail spool\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Kullanım: userdel [seçenekler] KULLANICI\n"
+#~ "\n"
+#~ "Seçenekler:\n"
+#~ " -f, --force dosyalar kullanıcıya ait değilse bile "
+#~ "sil\n"
+#~ " -h, --help bu yardım mesajını göster ve çık\n"
+#~ " -r, --remove ev dizinini ve mesaj arşivini sil\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: usermod [options] LOGIN\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -c, --comment COMMENT new value of the GECOS field\n"
+#~| " -d, --home HOME_DIR new home directory for the user account\n"
+#~| " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -g, --gid GROUP force use GROUP as new primary group\n"
+#~| " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~| " -a, --append append the user to the supplemental "
+#~| "GROUPS\n"
+#~| " mentioned by the -G option without "
+#~| "removing\n"
+#~| " 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"
+#~| " -m, --move-home move contents of the home directory to "
+#~| "the\n"
+#~| " new location (use only with -d)\n"
+#~| " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~| " -p, --password PASSWORD use encrypted password for the new "
+#~| "password\n"
+#~| " -s, --shell SHELL new login shell for the user account\n"
+#~| " -u, --uid UID new UID for the user account\n"
+#~| " -U, --unlock unlock the user account\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Kullanım: usermod [seçenekler] LOGIN\n"
+#~ "\n"
+#~ "Seçenekler:\n"
+#~ " -c, --comment YORUM GECOS alanının yeni değeri\n"
+#~ " -d, --home EV_DIZINI kullanıcı hesabı için yeni oturum açma "
+#~ "dizini\n"
+#~ " -e, --expiredate GEÇERLİLİK_TARİHİ hesap dolum süresini "
+#~ "GEÇERLİLİK_TARİHİ\n"
+#~ " (EXPIRE_DATE) olarak ayarla\n"
+#~ " -f, --inactive PASIF şifre süresi dolduktan sonra şifreyi\n"
+#~ " PASIF olarak ayarla\n"
+#~ " -g, --gid GRUP birincil grup olarak GRUP kullanımını "
+#~ "zorla\n"
+#~ " -G, --groups GRUPLAR ilave grupları yeni listesi\n"
+#~ " -a, --append kullanıcıyı ilave grupların sonuna ekle\n"
+#~ " -G seçeneğinde bahsedildiği gibi\n"
+#~ " diğer gruplardan çıkarmadan\n"
+#~ " -h, --help bu yardım dosyasını göster ve çık\n"
+#~ " -l, --login YENI_LOGIN oturum açma ismi için yeni değer\n"
+#~ " -L, --lock kullanıcı hesabını kilitle\n"
+#~ " -m, --move-home Ev dizininin içeriğini yeni bir\n"
+#~ " dizine kopyalar(sadece -d ile "
+#~ "kullanılır)\n"
+#~ " -o, --non-unique aynı UID yi kullanmaya izin verir\n"
+#~ " -p, --password PAROLA yeni parolalar için şifrelenmiş parola "
+#~ "kullan\n"
+#~ " -s, --shell SHELL kullanıcı hesabı için yeni oturum açma "
+#~ "kabuğu\n"
+#~ " -u, --uid UID kullanıcı hesabı için yeni UID\n"
+#~ " -U, --unlock kullanıcı hesabı kilidini aç\n"
+#~ "\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s: herhangi bir bayrak verilmedi\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: vipw [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -g, --group edit group database\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -p, --passwd edit passwd database\n"
+#~| " -q, --quiet quiet mode\n"
+#~| " -s, --shadow edit shadow or gshadow database\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group edit group database\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -p, --passwd edit passwd database\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow edit shadow or gshadow database\n"
+#~ " -u, --user which user's tcb shadow file to edit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Kullanım: vipw [seçenekler]\n"
+#~ "\n"
+#~ "Seçenekler:\n"
+#~ " -g, --group grub veri tabanını düzenler\n"
+#~ " -h, --help bu yardım dosyasını gösterir ve çıkar\n"
+#~ " -p, --passwd şifre veri tabanını düzenler\n"
+#~ " -q, --quiet sessiz kip\n"
+#~ " -s, --shadow shadow veya gshadow veri tabanını "
+#~ "düzenler\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Kullanım: %s [girdi]\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s: %s yaratılamıyor\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s: chown %s gerçekleştirilemiyor\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -a, --all display faillog records for all users\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -l, --lock-time SEC after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| " -m, --maximum MAX set maximum failed login counters to "
+#~| "MAX\n"
+#~| " -r, --reset reset the counters of login failures\n"
+#~| " -t, --time DAYS display faillog records more recent than "
+#~| "DAYS\n"
+#~| " -u, --user LOGIN display faillog record or maintains "
+#~| "failure\n"
+#~| " counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| " options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all display faillog records for all users\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -l, --lock-time SEC after failed login lock account to SEC "
+#~ "seconds\n"
+#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
+#~ " -r, --reset reset the counters of login failures\n"
+#~ " -t, --time DAYS display faillog records more recent than "
+#~ "DAYS\n"
+#~ " -u, --user LOGIN display faillog record or maintains "
+#~ "failure\n"
+#~ " counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ " options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Kullanım: faillog [seçenekler]\n"
+#~ "\n"
+#~ "Seçenekler:\n"
+#~ " -a, --all tüm kullanıcılar için faillog "
+#~ "kayıtlarını\n"
+#~ " gösterir\n"
+#~ " -h, --help bu yardım dosyasını göster ve çık\n"
+#~ " -l, --lock-time SANİYE(SEC) hatalı oturum açılımından sonra, hesabı\n"
+#~ " SANİYE kadar saniye kilitler\n"
+#~ " -m, --maximum AZAMİ(MAX) en fazla hatalı oturum açılış sayacını "
+#~ "AZAMİ\n"
+#~ " değerine ayarlar\n"
+#~ " -r, --reset oturum açılış sayacını sıfırlar\n"
+#~ " -t, --time GÜN_SAYISI(DAYS) GÜN_SAYISI kadar günden daha güncel olan\n"
+#~ " faillog kayıtlarını gösterir\n"
+#~ " -u, --user KULLANICI(LOGIN) faillog kaydını gösterir veya hata\n"
+#~ " sayacını onarır ve sadece KULLANICI ile\n"
+#~ " belirtilen kullanıcıları sınırlar (-r, -"
+#~ "m\n"
+#~ " veya -l seçenekleri ile kullanıldıysa)\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force exit with success status if the\n"
+#~ " specified group already exists\n"
+#~ " -g, --gid GID use GID for the new group\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique allow create group with duplicate\n"
+#~ " (non-unique) GID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new group\n"
+#~ " -r, --system create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Kullanım: groupadd [seçenekler] GRUP\n"
+#~ "\n"
+#~ "Seçenekler:\n"
+#~ " -f, --force belirtilen grub mevcutsa bile, çıkışta\n"
+#~ " başarılı kodu verecek şekilde zorla\n"
+#~ " -g, --gid GID yeni grub için bu GID yi kullan\n"
+#~ " -h, --help bu yardım dosyasını göster ve çık\n"
+#~ " -K, --key ANAHTAR=DEĞER /etc/login.defs dosyasındaki\n"
+#~ " öntanımlı değerlerin üzerine yazar\n"
+#~ " -o, --non-unique aynı GID ile grub oluşturulmasına izin "
+#~ "ver\n"
+#~ " -p, --password PAROLA yeni grup için şifreli olarak PAROLA "
+#~ "kullan\n"
+#~ " -r, --system bir sistem hesabı yarat\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --gid GID force use new GID by GROUP\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Usage: groupmod [seçenekler] GRUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --gid GID bu grubu yeni GID ile kullanıma zorla\n"
+#~ " -h, --help bu yardım dosyasını göster ve çık\n"
+#~ " -n, --new-name YENİ_GRUP grubu YENİ_GRUP ismini kullanmaya zorla\n"
+#~ " -o, --non-unique grubun aynı GID yi kullanmasına izin ver\n"
+#~ " -p, --password PAROLA yani parola için şifreli olarak PAROLA "
+#~ "kullan\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: useradd [options] LOGIN\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~| " home directory\n"
+#~| " -c, --comment COMMENT set the GECOS field for the new user "
+#~| "account\n"
+#~| " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~| " -D, --defaults print or save modified default useradd\n"
+#~| " configuration\n"
+#~| " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -g, --gid GROUP force use GROUP for the new user "
+#~| "account\n"
+#~| " -G, --groups GROUPS list of supplementary groups for the "
+#~| "new\n"
+#~| " user account\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~| " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~| " -l, do not add the user to the lastlog and\n"
+#~| " faillog databases\n"
+#~| " -m, --create-home create home directory for the new user\n"
+#~| " account\n"
+#~| " -N, --no-user-group do not create a group with the same name "
+#~| "as\n"
+#~| " the user\n"
+#~| " -o, --non-unique allow create user with duplicate\n"
+#~| " (non-unique) UID\n"
+#~| " -p, --password PASSWORD use encrypted password for the new user\n"
+#~| " account\n"
+#~| " -r, --system create a system account\n"
+#~| " -s, --shell SHELL the login shell for the new user "
+#~| "account\n"
+#~| " -u, --uid UID force use the UID for the new user "
+#~| "account\n"
+#~| " -U, --user-group create a group with the same name as the "
+#~| "user\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~ " home directory\n"
+#~ " -c, --comment COMMENT set the GECOS field for the new user "
+#~ "account\n"
+#~ " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~ " -D, --defaults print or save modified default useradd\n"
+#~ " configuration\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP for the new user account\n"
+#~ " -G, --groups GROUPS list of supplementary groups for the new\n"
+#~ " user account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -l, --no-log-init do not add the user to the lastlog and\n"
+#~ " faillog databases\n"
+#~ " -m, --create-home create home directory for the new user\n"
+#~ " account\n"
+#~ " -M, --no-create-home do not create user's home directory\n"
+#~ " (overrides /etc/login.defs)\n"
+#~ " -N, --no-user-group do not create a group with the same name "
+#~ "as\n"
+#~ " the user\n"
+#~ " -o, --non-unique allow create user with duplicate\n"
+#~ " (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new user\n"
+#~ " account\n"
+#~ " -r, --system create a system account\n"
+#~ " -s, --shell SHELL the login shell for the new user account\n"
+#~ " -u, --uid UID force use the UID for the new user "
+#~ "account\n"
+#~ " -U, --user-group create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Kullanım: useradd [seçenekler] KULLANICI\n"
+#~ "\n"
+#~ "Seçenekler:\n"
+#~ " -b, --base-dir EV_DİZİNİ(BASE_DIR)\n"
+#~ " yeni kullanıcı hesabının ev dizini için\n"
+#~ " ana dizin\n"
+#~ " -c, --comment YORUM(COMMENT)\n"
+#~ " yeni kullanıcı için GECOS alanını "
+#~ "ayarlar\n"
+#~ " -d, --home-dir EV_DİZİNİ(HOME_DIR)\n"
+#~ " yeni kullanıcı hesabı için ev dizini\n"
+#~ " -D, --defaults değiştirilmiş öntanımlı "
+#~ "useradd yapılandırmasını görüntüle veya "
+#~ "kaydet\n"
+#~ " -e, --expiredate TARIH hesap süresi dolumunu TARIH olarak\n"
+#~ " ayarla\n"
+#~ " -f, --inactive PASIF şifre süresi dolduktan sonra şifreyi\n"
+#~ " PASIF olarak ayarla\n"
+#~ " -g, --gid GRUP yeni kullanıcı hesabı için GRUP "
+#~ "kullanımını\n"
+#~ " zorla\n"
+#~ " -G, --groups GRUPLAR yeni kullanıcı hesabı için\n"
+#~ " ilave grubları listesi\n"
+#~ " -h, --help bu yardım dosyasını göster ve çık\n"
+#~ " -k, --skel TEMEL_DİZİN farklı bir temel dizin belirtir\n"
+#~ " -K, --key ANAHTAR=DEĞER /etc/login.defs dosyasındaki öntanımlı\n"
+#~ " değerlerin üzerine yazar\n"
+#~ " -l, kullanıcıyı lastlog ve faillog "
+#~ "veritabanlarına\n"
+#~ " ekleme\n"
+#~ " -m, --create-home yeni kullanıcı hesabı için ev dizini "
+#~ "yarat\n"
+#~ " -N, --non-user-group kullanıcı adıyla aynı isimde bir grup "
+#~ "yaratma\n"
+#~ " -o, --non-unique aynı UID ile kullanıcı yaratılmasına izin "
+#~ "ver\n"
+#~ " -p, --password PAROLA yeni kullanıcı hesabı için şifrelenmiş "
+#~ "parola\n"
+#~ " -r, --system bir sistem hesabı yarat\n"
+#~ " -s, --shell KABUK yeni kullanıcı hesabı için oturum açma "
+#~ "kabuğu\n"
+#~ " -u, --uid UID yeni kullanıcı hesabı için UID "
+#~ "kullanımını\n"
+#~ " zorla\n"
+#~ " -U, --user-group kullanıcı ile aynı isimde bir grup yarat\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: %s [options] [input]\n"
+#~ "\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -r, --system create system accounts\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Kullanım: %s [seçenekler] [girdi]\n"
+#~ "\n"
+#~ " -c, --crypt-method kripto metodu (bunlardan biri: %s)\n"
+#~ " -r, --system sistem hesaplarını yarat\n"
+#~ "%s\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Parolanızın kullanım süresi doldu."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: parola dosyası kilitlenemedi\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: parola dosyası açılamadı\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: gölge parola dosyası kilitlenemedi\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: gölge parola dosyası açılamadı\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: gölge parola dosyasının üzerine yazılamadı\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: parola dosyasına yazılamadı\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: gölge parola dosyası güncellenemedi\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tTam İsim: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tOda Numarası: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tİş Telefonu: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tEv Telefonu: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "Parola dosyası kilitlenemiyor, daha sonra tekrar deneyin.\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Parola kaydı güncellenmesinde hata.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Parola dosyası değişiklikleri işlenemiyor.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Parola dosyası kilidi açılamıyor.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: grup dosyası kilitlenemiyor\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: gölge dosyası kilitlenemiyor\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: gölge dosyası açılamıyor\n"
+
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: gshadow dosyası güncellenmesinde hata\n"
+
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: grup dosyası güncellenirken hata oluştu\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: satır %d: bilinmeyen kullanıcı %s\n"
+
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: satır %d: grup kaydı güncellenemiyor\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: gölge dosyası kilitlenemiyor\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: gölge (shadow9 dosyası güncellenmesinde hata\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: parola dosyası güncellenmesinde hata\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: satır %d: bilinmeyen kullanıcı %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: satır %d: parola kaydı güncellenemiyor\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: bilinmeyen kullanıcı\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Bilinmeyen Kullanıcı: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Kullanım: %s [-r|-R] grup\n"
+
+#~ msgid " %s [-a user] group\n"
+#~ msgstr " %s [-a kullanıcı] grup\n"
+
+#~ msgid " %s [-d user] group\n"
+#~ msgstr " %s [-d kullanıcı] grup\n"
+
+#~ msgid " %s [-A user,...] [-M user,...] group\n"
+#~ msgstr " %s [-A kullanıcı,...] [-M kullanıcı,...] grup\n"
+
+#~ msgid " %s [-M user,...] group\n"
+#~ msgstr " %s [-M kullanıcı,...] grup\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: kilitlenemiyor\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: gölge kilidi koyulamıyor\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: gölge dosyası tekrar yazılamıyor\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: dosya kilidi açılamıyor\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: kayıt güncellenemiyor\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: gölge kaydı güncellenemiyor\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "bilinmeyen grup: %s\n"
+
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: dosya kapatılamıyor\n"
+
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: shadow dosyası kapatılamıyor\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Siz kimsiniz?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: bilinmeyen üye %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: yeni grup kaydı eklenirken hata oluştu\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: grup dosyasına yazılamıyor\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: gölge grup dosyasına yazılamıyor\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: grup dosyası kilitlenemiyor\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: grup dosyası açılamıyor\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: gölge grup dosyası kilitlenemiyor\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: gölge grup dosyası açılamıyor\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u tek değil\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: grup kaydını silerken hata oluştu\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: gölge grup kaydını silerken hata oluştu\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: kullanıcının birincil grubu silinemez\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Silinecek üye bulunamadı\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr ""
+#~ "Kullanım: groupmems -a kullanıcıadı | -d kullanıcıadı | -D | -l[-g "
+#~ "grupadı]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Sadece root kullacısı üyeleri başka gruplara ekleyebilir\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "Grup hakkı gerekli\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "Şu anki grubun birincil sahibi değil\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "PAM yetkilendirmesi başarısız oldu\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "Grup dosyası kilitlenemiyor\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "Grup dosyası kapatılamıyor\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s /etc/group dosyasında bulunamadı\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u benzersiz bir GID değil\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s benzersiz bir isim değil\n"
+
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: passwd dosyasına yazılamıyor\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: parola dosyası kilitlenemiyor\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: parola dosyası açılamıyor\n"
+
+#~ msgid ""
+#~ "%s: cannot change the primary group of user '%s' from %u to %u, since it "
+#~ "is not in the passwd file.\n"
+#~ msgstr ""
+#~ "%s: '%s' kullanıcısının birincil grubu %u grubundan %u grubuna\n"
+#~ "değiştirilemiyor, çünkü bu kullanıcı passwd dosyasında yok.\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: %s için gölge kaydı güncellenemiyor\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: %s grubu için kayıt güncellenemiyor\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: gölge grup dosyası kilitlenemiyor\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: gölge grup dosyası açılamıyor\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s gölge grubu %s silinemiyor\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: gölge grup dosyası güncellenemiyor\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: gölge grup dosyası silinemiyor\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "bilinmeyen UID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "bilinmeyen GID: %lu\n"
+
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: grup `%s' geçerli değil\n"
+
+#~ msgid ""
+#~ "%s: group %s created, failure during the creation of the corresponding "
+#~ "gshadow group\n"
+#~ msgstr ""
+#~ "%s: %s grubu yaratıldı, uygun olan gshadow grubu yaratılırken hata "
+#~ "oluştu\n"
+
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: kullanıcı `%s' mevcut değil\n"
+
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: geçersiz kullanıcı adı `%s'\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: /etc/passwd kilitlenemiyor.\n"
+
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: /etc/shadow kilitlenemiyor.\n"
+
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: /etc/group kilitlenemiyor.\n"
+
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: /etc/gshadow kilitlenemiyor.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: dosyalar açılamıyor\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: %s için passwd kaydı güncellenemedi\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: passwd dosyası kilitlenemedi\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: passwd dosyası açılamadı\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: %s için gölge kaydı silinemedi\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: passwd dosyası güncellenemedi\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: kullanıcı %s için kayıt güncellenemiyor\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: gölge parola dosyası silinemiyor\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: bilinmeyen GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: bilinmeyen grup %s\n"
+
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: Bellek yetersiz. Shadow grup veritabanı güncellenemiyor.\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: gölge parola dosyası yazılamıyor\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: gölge parola dosyası kilitlenemiyor\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: gölge parola dosyası açılamıyor\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: grup dosyası kilitlenmesinde hata\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: grup dosyası açılırken hata\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: gölge grup dosyası kilitlenirken hata\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: gölge grup dosyası açılırken hata\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: yeni parola kaydı eklenirken hata\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: yeni gölge parola kaydı eklenirken hata\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr ""
+#~ "%s: uyarı: CREATE_HOME desteklenmiyor, lütfen bunun yerine -m kullanın.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: grup kaydı güncellenirken hata oluştu\n"
+
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: shadow grup kaydı güncellenirken hata oluştu\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: grup dosyası açılamıyor\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: gölge grup dosyası açılamıyor\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: parola kaydı silinirken hata oluştu\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: gölge parola kaydı silinirken hata oluştu\n"
+
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: yeni shadow grup kaydı eklenirken hata oluştu\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu benzersiz değil\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: parola kaydı değiştirilirken hata oluştu\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: parola kaydı silinirken hata oluştu\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: gölge parola kaydı silinirken hata oluştu\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: tek (benzersiz) bir GID alınamadı\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " '%.200s'den '%.100s' üzerinde"
+
+#~ msgid " on '%.100s'"
+#~ msgstr " '%.100s' üzerinde"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: satır %d: UID yaratılamıyor\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: %s ismi tek değil\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ " -h, --help\t\tdisplay this help message and exit\n"
+#~ " -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Kullanım: chgpasswd [seçenekler]\n"
+#~ "\n"
+#~ "Seçenekler:\n"
+#~ " -e, --encrypted\tverilen parolalar, şifrelendirilir\n"
+#~ " -h, --help\t\tbu yardım dosyasını gösterir ve çıkar\n"
+#~ " -m, --md5\t\tgirilen parolalar şifrelenmediğinde, DES yerine MD5\n"
+#~ "\t\t\t\tşifrelemesi kullanır\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Parola dosyası yok\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Üzgünüm.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Üzgünüm, %s için parola henüz değiştirilemedi.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Üzgünüm."
diff --git a/po/uk.gmo b/po/uk.gmo
new file mode 100644
index 0000000..41132a1
--- /dev/null
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
new file mode 100644
index 0000000..4f7dd37
--- /dev/null
+++ b/po/uk.po
@@ -0,0 +1,3747 @@
+# translation of uk.po to Ukrainian
+# Roman Festchook <linux@polesye.net>, 2001-2005.
+# Eugeniy Meshcheryakov <eugen@univ.kiev.ua>, 2005, 2006.
+# translation of uk.po to
+# shadow.pot Ukrainian translation.
+# Comments and bug-reports are welcomed
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.18\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2007-11-26 22:52+0100\n"
+"Last-Translator: Eugeniy Meshcheryakov <eugen@univ.kiev.ua>\n"
+"Language-Team: Ukrainian\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: KBabel 1.11.2\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Не можу виділити ресурси для конфігураційних даних.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"помилка у конфігурації - невідома позиція '%s' (повідомте адміністратора)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr ""
+
+msgid "Password: "
+msgstr "Пароль: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Пароль користувача %s: "
+
+#, fuzzy
+#| msgid "Cannot open the password file.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "Не можу відкрити файл паролів.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr ""
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not set sename for %s\n"
+msgstr "Не можу виділити ресурси для конфігураційних даних.\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "Змінюю вікову інформацію для %s\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "%s: Не можу визначити Ваше ім'я користувача.\n"
+
+#, fuzzy, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "%s: рядок %d: не можу знайти користувача %s\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: брак пам'яті\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: неможливо оновити файл %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: невірна домашня тека \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: не можу перейменувати теку з %s на %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: не можу створити теку %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: застереження: не можу видалити "
+
+#, fuzzy, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: застереження: не можу видалити "
+
+#, fuzzy, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: перейменування: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: не можу перейменувати теку з %s на %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: не можу перейменувати теку з %s на %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: застереження: не можу видалити "
+
+#, fuzzy, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: не можу створити теку %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: застереження: не можу видалити "
+
+#, fuzzy, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: неможливо оновити файл %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: не можу оновити файл прихованих паролів\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: перейменування: %s"
+
+#, fuzzy, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: не можу відкрити файл %s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Застереження: невідома група %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Застереження: забагато груп\n"
+
+msgid "Your password has expired."
+msgstr "Ваш пароль прострочено."
+
+msgid "Your password is inactive."
+msgstr "Ваш пароль є неактивним."
+
+msgid "Your login has expired."
+msgstr "Ваш логін прострочено."
+
+msgid " Contact the system administrator."
+msgstr " Зв'яжіться з системним адміністратором."
+
+msgid " Choose a new password."
+msgstr " Оберіть новий пароль."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Ваш пароль буде прострочено за %ld днів.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Ваш пароль буде прострочено завтра."
+
+msgid "Your password will expire today."
+msgstr "Ваш пароль буде прострочено сьогодні."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Не можу змінити tty %s"
+
+#, fuzzy, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: поля занадто довгі\n"
+
+#, fuzzy, c-format
+msgid "%s: "
+msgstr "%s: %s\n"
+
+msgid ": "
+msgstr ""
+
+msgid "Environment overflow\n"
+msgstr "Переповнення оточення\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Ви не можете змінити $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d помилка з часу останнього входу.\n"
+"Останній вхід: %s з %s.\n"
+msgstr[1] "%d помилки з часу останнього входу. Останній вхід: %s з %s.\n"
+msgstr[2] "%d помилок з часу останнього входу. Останній вхід: %s з %s.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "не можу змінити власника поштової скриньки"
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr "%s: не можу отримати унікальний UID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: не можу отримати унікальний GID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: не можу отримати унікальний GID\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: не можу створити %s\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: не можу створити %s\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr "%s: не можу отримати унікальний UID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: не можу отримати унікальний UID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: не можу отримати унікальний UID\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: PAM автентифікація не пройшла\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: невірне поле \"%s\"\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Could not seteuid to %d\n"
+msgstr "Не можу виділити ресурси для конфігураційних даних.\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not set caps\n"
+msgstr "Не можу виділити ресурси для конфігураційних даних.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't open file\n"
+msgid "%s: snprintf failed!\n"
+msgstr "%s: не можу відкрити файл\n"
+
+#, fuzzy, c-format
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: рядок %d: chown не виконався\n"
+
+#, fuzzy, c-format
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: рядок %d: chown не виконався\n"
+
+msgid "Too many logins.\n"
+msgstr "Забагато входів.\n"
+
+msgid "You have new mail."
+msgstr "Ви маєте нову пошту."
+
+msgid "No mail."
+msgstr "Пошти не має."
+
+msgid "You have mail."
+msgstr "Ви маєте пошту."
+
+msgid "no change"
+msgstr "без змін"
+
+msgid "a palindrome"
+msgstr "паліндром"
+
+msgid "case changes only"
+msgstr "тільки зміна регістру"
+
+msgid "too similar"
+msgstr "занадто подібні"
+
+msgid "too simple"
+msgstr "занадто простий"
+
+msgid "rotated"
+msgstr "переставлені літери"
+
+msgid "too short"
+msgstr "закороткий"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Поганий пароль: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() не виконано, помилка %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+msgid "passwd: password unchanged\n"
+msgstr "Пароль змінено."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: пароль вдало змінено\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: сховище %s не підтримується\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start: помилка %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd: pam_start() не виконано, помилка %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Невірний пароль для %s.\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr ""
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: не вдалося скинути привілеї (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: невірний домашній телефон: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: не можу створити теку %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: не можу створити теку %s\n"
+
+#, fuzzy, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: не можу створити теку %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Неможливо перейти до теки \"%s\"\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Немає теки, входимо з HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Не можу виконати %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Невірна коренева тека \"%s\"\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Неможливо змінити кореневу теку на \"%s\"\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: користувач %s на даний момент у системі\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: користувач %s на даний момент у системі\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Неможливо визначити назву вашого термінала."
+
+#, fuzzy
+msgid "No"
+msgstr "Ні\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Використання: %s [вхідні_данні]\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid " -h, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr ""
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Введіть нове значення або натисніть ENTER для значення за замовчанням"
+
+msgid "Minimum Password Age"
+msgstr "Мінімальний вік пароля"
+
+msgid "Maximum Password Age"
+msgstr "Максимальний вік пароля"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Остання зміна пароля (РРРР-ММ-ДД)"
+
+msgid "Password Expiration Warning"
+msgstr "Застереження про прострочення пароля"
+
+msgid "Password Inactive"
+msgstr "Пароль неактивний"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Дата прострочення рахунку (РРРР-ММ-ДД)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Остання зміна пароля\t\t\t\t\t: "
+
+msgid "never"
+msgstr "ніколи"
+
+msgid "password must be changed"
+msgstr "Пароль змінено"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Пароль стає простроченим\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Пароль неактивний\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Рахунок стає простроченим\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Мінімальна кількість днів між змінами паролю\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Максимальна кількість днів між змінами паролю\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Кількість днів для застереження про прострочення паролю\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: невірна дата \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: невірний числовий аргумент \"%s\"\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: не використовуйте \"l\" з іншими прапорцями\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: У доступі відмовлено.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Не можу визначити Ваше ім'я користувача.\n"
+
+#, fuzzy, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: не можу блокувати файли, спробуйте пізніше\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: не можу відкрити файл %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: помилка відгалудження: %s"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: не вдалося скинути привілеї (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: не можу відкрити файл прихованих паролів\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: користувач %s не існує\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Змінюю вікову інформацію для %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: помилка зміни полів\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr "Використання: %s [вхідні_данні]\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr ""
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr ""
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr ""
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr ""
+
+msgid " -u, --help display this help message and exit\n"
+msgstr ""
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr "Повне ім'я"
+
+#, fuzzy, c-format
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Номер кімнати"
+
+msgid "Work Phone"
+msgstr "Робочій телефон"
+
+msgid "Home Phone"
+msgstr "Домашній телефон"
+
+msgid "Other"
+msgstr "Інше"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Не можу змінити ID на root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: невірне ім'я: \"%s\"\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: невірний номер кімнати: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: невірний робочий телефон: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: невірний домашній телефон: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: \"%s\" містить заборонені символи\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: \"%s\" містить заборонені символи\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: користувач %s не існує\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: неможливо змінити користувача \"%s\" у клієнті NIS.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: \"%s\" є NIS-сервером для цього клієнта.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Зміна інформації про користувача %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: поля занадто довгі\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Використання: %s [вхідні_данні]\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr ""
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: прапорець -a можна використовувати ТІЛЬКИ з прапорцем -G\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: рядок %d: рядок занадто довгий\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: рядок %d: бракує нового пароля\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: не вдалося скинути привілеї (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: група %s не існує\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: рядок %d: не можу оновити запис\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: виявлено помилку, зміни ігноруються\n"
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: користувач %s не існує\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: користувач %s не існує\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr "Логін-оболонка"
+
+#, fuzzy, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Не можна змінити оболонку для %s.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Змінюю оболонку для %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Невірний запис: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s є невірна оболонка.\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: користувач %s не існує\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: застереження: %s не належить %s\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "lastlog: неочікуваний аргумент: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: не можу створити теку %s\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "Логін Помилок Максимум Останнє На\n"
+
+#, fuzzy, c-format
+msgid " [%lus left]"
+msgstr " [%lds залишилось]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds блоковано]"
+
+#, fuzzy, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s: не можу створити теку %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: не вдалося скинути привілеї (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: не можу створити теку %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "Невідомий користувач: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: не можу перейменувати теку з %s на %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: не вдалося скинути привілеї (%s)\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Використання: %s [вхідні_данні]\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr ""
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr ""
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr ""
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr ""
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+
+#, fuzzy
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "Пароль для %s не може бути змінений.\n"
+
+#, fuzzy
+msgid "The options cannot be combined.\n"
+msgstr "Пароль для %s не може бути змінений.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: приховані паролі груп потрібні для -A\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: група %s не існує\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: помилка відгалудження: %s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Зміна пароля для групи %s\n"
+
+msgid "New Password: "
+msgstr "Новий пароль: "
+
+msgid "Re-enter new password: "
+msgstr "Повторіть новий пароль: "
+
+msgid "They don't match; try again"
+msgstr "не співпадає; спробуйте знову"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Спробуйте знову пізніше\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Додано нового користувача %s до групи %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Видалено користувача %s з групи %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: користувач %s не існує\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Не є tty\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Використання: %s [вхідні_данні]\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr ""
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid " -r, --system create a system account\n"
+msgstr ""
+
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s: то не є вірне ім'я групи\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "невірна назва групи \"%s\"\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K вимагає ЗМІННА=ЗНАЧЕННЯ\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: група %s існує\n"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "Член вже існує\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: Не можу визначити Ваше ім'я користувача.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: не можу перейменувати теку з %s на %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: неможливо змінити користувача \"%s\" у клієнті NIS.\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: група %s не існує\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: група \"%s\" є групою NIS.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s є сервер NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: користувач %s є користувачем NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: бракує пам'яті у update_group\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr "Використання: %s [вхідні_данні]\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+
+msgid "\n"
+msgstr ""
+
+msgid "Actions:\n"
+msgstr ""
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr ""
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr ""
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr ""
+
+msgid " -l, --list list the members of the group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr ""
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "невірна назва групи \"%s\"\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: група %s є групою NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: невідомий користувач %s\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr "Використання: %s [вхідні_данні]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr "Використання: %s [вхідні_данні]\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s та -r несумісні\n"
+
+msgid "invalid group file entry"
+msgstr "невірний запис у файлі груп"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "видалити рядок \"%s\"? "
+
+msgid "duplicate group entry"
+msgstr "дублюючий запис у базі груп"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "невірна назва групи \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "невірна назва групи \"%s\"\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "група %s: немає користувача %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "видалити члена \"%s\"? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "відповідний запис файлу груп відсутній у %s\n"
+
+#, fuzzy, c-format
+msgid "add group '%s' in %s? "
+msgstr "додати групу \"%s\" у %s?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "невірний запис у файлі прихованих груп"
+
+msgid "duplicate shadow group entry"
+msgstr "дублюючий запис у файлі прихованих груп"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "прихована група %s: не має адміністратора %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "видалити адміністратора \"%s\"? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "прихована група %s: немає користувача %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: файли було оновлено\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: без змін\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: неможливо оновити файл %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Використання: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Використання: id\n"
+
+msgid " groups="
+msgstr " групи="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+
+msgid "Username Port From Latest"
+msgstr "Користувач Порт Звідки Останній вхід"
+
+msgid "Username Port Latest"
+msgstr "Користувач Порт Останній вхід"
+
+msgid "**Never logged in**"
+msgstr "**Ніколи не входив**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s: не можу створити теку %s\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%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 "Використання: %s [-p] [ім'я]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h вузол] [-f ім'я]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r вузол\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Невірний час для входу"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Систему закрито для профілактики."
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Сталося відключення -- дозволено лише вхід root-a.]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Немає запису utmp. Вам потрібно виконати \"login\" з \"sh\" найнижчого рівня"
+
+#, fuzzy, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Час логіну буде вичерпано за %d секунд.\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: Помилка PAM, перервано: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s логін: "
+
+msgid "login: "
+msgstr "логін: "
+
+#, fuzzy, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Перевищено максимальну кількість спроб (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: система PAM запросила переривання\n"
+
+msgid "Login incorrect"
+msgstr "Невірний логін"
+
+#, fuzzy, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "%s: рядок %d: не можу знайти користувача %s\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s логін: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: помилка відгалудження: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Застереження: login поновлено після тимчасового блокування."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Останній вхід в систему: %s на %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Останній вхід в систему: %.19s на %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " з %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"вичерпано час логіну\n"
+"\n"
+
+#, fuzzy
+msgid "Usage: logoutd\n"
+msgstr "Використання: id\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: can't open group file\n"
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr "%s: не можу відкрити файл груп\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: не вдалося скинути привілеї (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: не вдалося скинути привілеї (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: поля занадто довгі\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: невірна базова тека \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: не можу створити теку %s\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Використання: newgrp [-] [група]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Використання: sg група [[-c] команда]\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: не вдалося скинути привілеї (%s)\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "Старий пароль: "
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: помилка відгалудження: %s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: користувач %s не існує\n"
+
+msgid "too many groups\n"
+msgstr "занадто багато груп\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid " -b, --badnames allow bad names\n"
+msgstr ""
+
+msgid " -r, --system create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+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 ID '%s'\n"
+msgstr "%s: невірне ім'я користувача '%s'\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: невірне ім'я користувача '%s'\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: рядок %d: невірний рядок\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: не можу оновити запис для користувача %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: рядок %d: не можу створити GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: рядок %d: не можу створити GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: користувач %s не існує\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: рядок %d: не можу оновити пароль\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: рядок %d: mkdir не виконався\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: рядок %d: chown не виконався\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: рядок %d: не можу оновити запис\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: не вдалося скинути привілеї (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: не можу створити %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: не можу оновити файл груп\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr ""
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid " -q, --quiet quiet mode\n"
+msgstr ""
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid "Old password: "
+msgstr "Старий пароль: "
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Введіть новий пароль (від %d до %d знаків)\n"
+"Змішуйте великі та малі літери та цифри.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Введіть новий пароль (від %d до %d знаків)\n"
+"Змішуйте великі та малі літери та цифри.\n"
+
+msgid "New password: "
+msgstr "Новий пароль: "
+
+msgid "Try again."
+msgstr "Спробуйте ще."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Застереження: Поганий пароль (введіть його знову, якщо все одно бажаєте його "
+"використовувати)."
+
+msgid "They don't match; try again.\n"
+msgstr "Не співпадає; спробуйте знову.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Пароль для %s не може бути змінений.\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Пароль для %s не може бути змінений.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: сховище %s не підтримується\n"
+
+#, c-format
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Ви не можете дивитися та змінювати парольну інформацію для %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Зміна пароля для %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Пароль для %s не змінено.\n"
+
+#, fuzzy, c-format
+msgid "%s: password changed.\n"
+msgstr "Пароль змінено."
+
+#, fuzzy, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "Застереження про прострочення пароля"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr "Використання: %s [вхідні_данні]\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr "Використання: %s [вхідні_данні]\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+
+msgid "invalid password file entry"
+msgstr "невірний запис у файлі паролів"
+
+msgid "duplicate password entry"
+msgstr "дублюючий запис у файлі паролів"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "невірне ім'я користувача '%s'\n"
+
+#, fuzzy, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "невірне ім'я користувача '%s'\n"
+
+#, fuzzy, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "користувач %s: не має групи %u\n"
+
+#, fuzzy, c-format
+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"
+msgstr "користувач %s: програма %s не існує\n"
+
+#, fuzzy, c-format
+msgid "no tcb directory for %s\n"
+msgstr "%s: не можу створити теку %s\n"
+
+#, fuzzy, c-format
+msgid "create tcb directory for %s?"
+msgstr "%s: не можу створити теку %s\n"
+
+#, fuzzy, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "%s: не можу створити теку %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: не можу заблокувати файл %s\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "відсутній відповідний запис у файлі паролів %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "додати користувача \"%s\" в %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "невірний запис у файлі прихованих паролів"
+
+msgid "duplicate shadow password entry"
+msgstr "дублюючий запис у файлі прихованих паролів"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "користувач %s: остання зміна пароля у майбутньому\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: не можу відкрити файл %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: не можу переписати файл\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Доступ цього користувача до su ЗАБОРОНЕНО.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Аутентифікацію пройдено.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Будь ласка введіть Ваш власний пароль для аутентифікації.\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: не можу заблокувати файл %s\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr ""
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr ""
+
+msgid "Session terminated, terminating shell..."
+msgstr ""
+
+#, c-format
+msgid " ...killed.\n"
+msgstr ""
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr ""
+
+msgid " ...terminated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: su [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
+#| " -h, --help display this help message and exit\n"
+#| " -, -l, --login make the shell a login shell\n"
+#| " -m, -p,\n"
+#| " --preserve-environment do not reset environment variables, and\n"
+#| " keep the same shell\n"
+#| " -s, --shell SHELL use SHELL instead of the default in "
+#| "passwd\n"
+#| "\n"
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"Використання: su [параметри] [ЛОГІН]\n"
+"\n"
+"Параметри:\n"
+" -c, --command КОМАНДА передати КОМАНДУ запущеній оболонці\n"
+" -h, --help вивести це довідкове повідомлення та вийти\n"
+" -, -l, --login зробити оболонку вхідною\n"
+" -m, -p,\n"
+" --preserve-environment не скидувати змінні оточення і залишити\n"
+" таку саму оболонку\n"
+" -s, --shell ОБОЛОНКА використати ОБОЛОНКУ замість вказаної в passwd\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ігнорую)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Ви не авторизовані для su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Введіть ваш пароль)"
+
+#, fuzzy, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: PAM автентифікація не пройшла\n"
+
+#, fuzzy, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "Ви не авторизовані для su %s\n"
+
+#, fuzzy, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "Бракує запису у базі паролів для 'root'"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: повинно бути запущено з терміналу\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: помилка %d\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: не можу перейменувати теку з %s на %s\n"
+
+#, fuzzy, c-format
+msgid "Cannot execute %s\n"
+msgstr "Не можу виконати %s"
+
+msgid "No password file"
+msgstr "Немає файлу паролів"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "Бракує запису у базі паролів для 'root'"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Натисніть control-d для виконання звичайного завантаження,\n"
+"(або введіть пароль адміністратора для відновлення системи):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Входимо у режим відновлення системи"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: не можу створити новий файл із значеннями по замовчуванню\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: не можу створити новий файл із значеннями по замовчуванню\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: не можу відкрити новий файл із значеннями по замовчуванню\n"
+
+#, fuzzy, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: рядок %d: chown не виконався\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: не можу створити теку %s\n"
+
+#, fuzzy, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: перейменування: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: група \"%s\" є групою NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: вказано забагато груп (макс %d).\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr "Використання: %s [вхідні_данні]\n"
+
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr ""
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr ""
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr ""
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr ""
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: невірна базова тека \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: невірний коментар \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: невірна домашня тека \"%s\"\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: приховані паролі потрібні для -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: приховані паролі потрібні для -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: невірне поле \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: невірна оболонка \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: застереження: %s не належить %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rewrite password file\n"
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s: не можу переписати файл паролів\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s: не можу створити теку %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: не вдалося скинути привілеї (%s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error updating files\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: помилка оновлення файлу\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: не можу створити теку %s\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: невірна домашня тека \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "не можу змінити власника поштової скриньки"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: не можу створити теку %s\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: рядок %d: chown не виконався\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: рядок %d: chown не виконався\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "Створюється файл поштової скриньки"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Групу \"mail\" не знайдено. Поштова скринька користувача створюється з "
+"правами доступу 0600\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Встановлюються права доступу на файл поштової скриньки"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: користувач %s існує\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: група %s існує - якщо ви бажаєте додати користувача до цієї групи, "
+"використовуйте -g.\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: не можу створити %s\n"
+
+#, fuzzy, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %u не є унікальним\n"
+
+#, fuzzy, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: не можу створити теку %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: не можу створити %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: не можу створити %s\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: не можу створити %s\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: увага: домашня тека вже існує.\n"
+"Жоден файл з директорії кістяка не копіюється.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr "%s: неможливо змінити користувача \"%s\" у клієнті NIS.\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr ""
+
+#, fuzzy, c-format
+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 remove entry %lu from %s\n"
+msgstr "%s: не можу перейменувати теку з %s на %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: невірна домашня тека \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: застереження: не можу видалити "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s не належить %s, не видалено\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: не вдалося скинути привілеї (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: не можу перейменувати теку з %s на %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: не можу перейменувати теку з %s на %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: користувач %s є користувачем NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: невірна домашня тека \"%s\"\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s: не видалено теку %s (можна видалити домашню теку користувача %s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: помилка видалення теки %s\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: помилка видалення теки %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr ""
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr ""
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr ""
+
+msgid " -L, --lock lock the user account\n"
+msgstr ""
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr ""
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr ""
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr ""
+
+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"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: користувач %s існує\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: невірна дата \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: невірна дата \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: no options\n"
+msgstr "%s: не можу відкрити файл %s\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: приховані паролі потрібні для -e і -f\n"
+
+#, fuzzy, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "Член вже існує\n"
+
+#, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: тека %s існує\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: не можу створити теку %s\n"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: увага: не вдалося повністю видалити стару домашню теку %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: не можу перейменувати теку з %s на %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: застереження: %s не належить %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "не можу змінити власника поштової скриньки"
+
+msgid "failed to rename mailbox"
+msgstr "не можу перейменувати поштову скриньку"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s: не вдалося скинути привілеї (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s: не вдалося скинути привілеї (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s: не вдалося скинути привілеї (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s: не вдалося скинути привілеї (%s)\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid " -g, --group edit group database\n"
+msgstr ""
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr ""
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: не вдалося скинути привілеї (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s не змінено\n"
+
+#, fuzzy
+msgid "failed to create scratch directory"
+msgstr "не можу перейменувати поштову скриньку"
+
+#, fuzzy
+msgid "failed to drop privileges"
+msgstr "%s: не вдалося скинути привілеї (%s)\n"
+
+#, fuzzy
+msgid "Couldn't get file context"
+msgstr "Не можу блокувати файл"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+#, fuzzy
+msgid "failed to gain privileges"
+msgstr "%s: не вдалося скинути привілеї (%s)\n"
+
+msgid "Couldn't lock file"
+msgstr "Не можу блокувати файл"
+
+msgid "Couldn't make backup"
+msgstr "Не можу зробити резервну копію"
+
+#, fuzzy, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr "%s: %s не знайдено у /etc/passwd\n"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr ""
+
+#, fuzzy
+msgid "failed to open scratch file"
+msgstr "Неможливо відкрити файл груп\n"
+
+#, fuzzy
+msgid "failed to unlink scratch file"
+msgstr "%s: поля занадто довгі\n"
+
+#, fuzzy
+msgid "failed to stat edited file"
+msgstr "не можу перейменувати поштову скриньку"
+
+#, fuzzy
+msgid "failed to allocate memory"
+msgstr "не можу змінити власника поштової скриньки"
+
+#, fuzzy
+msgid "failed to create backup file"
+msgstr "не можу перейменувати поштову скриньку"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: не можу відновити %s: %s (ваші зміни у %s)\n"
+
+#, fuzzy, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: невірна базова тека \"%s\"\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Використання: %s [вхідні_данні]\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "malloc(%d) не виконано\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: chage [options] [LOGIN]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -d, --lastday LAST_DAY set last password change to LAST_DAY\n"
+#~| " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -l, --list show account aging information\n"
+#~| " -m, --mindays MIN_DAYS set minimum number of days before "
+#~| "password\n"
+#~| " change to MIN_DAYS\n"
+#~| " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~| "password\n"
+#~| " change to MAX_DAYS\n"
+#~| " -W, --warndays WARN_DAYS set expiration warning days to "
+#~| "WARN_DAYS\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Використання: chage [параметри] [LOGIN]\n"
+#~ "\n"
+#~ "Параметри:\n"
+#~ " -d, --lastday ОСТАННІЙ_ДЕНЬ встановити дату останньої зміни пароля в\n"
+#~ " ОСТАННІЙ_ДЕНЬ\n"
+#~ " -E, --expiredate ДАТА_ПРОСТР встановити дату прострочення облікового\n"
+#~ " запису у ДАТА_ПРОСТР\n"
+#~ " -h, --help вивести це довідкове повідомлення та "
+#~ "вийти\n"
+#~ " -I, --inactive НЕАКТИВНИЙ зробити пароль неактивним після "
+#~ "прострочення\n"
+#~ " -l, --list показати інформацію про вік облікового "
+#~ "запису\n"
+#~ " -m, --mindays МІН_ДНІВ встановити найменшу кількість днів перед "
+#~ "зміною\n"
+#~ " пароля у МІН_ДНІВ\n"
+#~ " -M, --maxdays МАКС_ДНІВ встановити максимальну кількість днів "
+#~ "перед\n"
+#~ " зміною пароля у МАКС_ДНІВ\n"
+#~ " -W, --warndays ПОПЕРЕДЖЕНЯЯ встоновити кількість днів перед\n"
+#~ " попередженням про прострочення у "
+#~ "ПОПЕРЕДЖЕННЯ\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: PAM автентифікація не пройшла\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "Використання: %s [-f повне_ім'я] [-r номер_кімнати] [-w робочій_телефон]\n"
+#~ "\t[-h домашній_телефон] [-o інше] [користувач]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr ""
+#~ "Використання: %s [-f повне_ім'я] [-r номер_кімнати]\n"
+#~ "\t[-w робочій_телефон] [-h домашній_телефон]\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Використання: chpasswd [опції]\n"
+#~ "\n"
+#~ "Опції:\n"
+#~ " -e, --encrypted вказаний пароль зашифровано\n"
+#~ " -h, --help показати цю допомогу та вийти\n"
+#~ " -m, --md5 використовувати MD5 шифрування замість "
+#~ "DES,\n"
+#~ " якщо вказані паролі не зашифровано\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Використання: chsh [параметри] [LOGIN]\n"
+#~ "\n"
+#~ "Параметри:\n"
+#~ " -h, --help вивести це довідкове повідомлення та "
+#~ "вийти\n"
+#~ " -s, --shell ОБОЛОНКА нова вхідна оболонка для облікового "
+#~ "запису\n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "Використання: expiry {-f|-c}\n"
+
+#, fuzzy
+#~| msgid "%s: cannot open file %s\n"
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "%s: не можу відкрити файл %s\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "Використання: groupdel група\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "Використання: %s [-r] [-s] [група [gshadow]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "Використання: %s [-r] [-s] [група]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: -s та -r несумісні\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "Використання: groupdel група\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "Використання: groupdel група\n"
+
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Використання: lastlog [параметри]\n"
+#~ "\n"
+#~ "Параметри:\n"
+#~ " -b, --before ДНІ друкувати лише записи старіші за ДНІ\n"
+#~ " -h, --help вивести допомогу та вийти\n"
+#~ " -t, --time ДНІВ вивести лише записи свіжіші за ДНІВ\n"
+#~ " -u, --user ЛОГІН вивести записи останніх входів для\n"
+#~ " користувача з ЛОГІНом\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: passwd [options] [LOGIN]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -a, --all report password status on all accounts\n"
+#~| " -d, --delete delete the password for the named "
+#~| "account\n"
+#~| " -e, --expire force expire the password for the named "
+#~| "account\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -k, --keep-tokens change password only if expired\n"
+#~| " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~| " to INACTIVE\n"
+#~| " -l, --lock lock the named account\n"
+#~| " -n, --mindays MIN_DAYS set minimum number of days before "
+#~| "password\n"
+#~| " change to MIN_DAYS\n"
+#~| " -q, --quiet quiet mode\n"
+#~| " -r, --repository REPOSITORY change password in REPOSITORY "
+#~| "repository\n"
+#~| " -S, --status report password status on the named "
+#~| "account\n"
+#~| " -u, --unlock unlock the named account\n"
+#~| " -w, --warndays WARN_DAYS set expiration warning days to "
+#~| "WARN_DAYS\n"
+#~| " -x, --maxdays MAX_DAYS set maximim number of days before "
+#~| "password\n"
+#~| " change to MAX_DAYS\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Використання: passwd [параметри] [ЛОГІН]\n"
+#~ "\n"
+#~ "Параметри:\n"
+#~ " -a, --all звітувати про стан паролів усіх записів\n"
+#~ " -d, --delete видалити пароль для вказаного запису\n"
+#~ " -e, --expire прострочити пароль для вказаного запису\n"
+#~ " -h, --help вивести це довідкове повідомлення та "
+#~ "вийти\n"
+#~ " -k, --keep-tokens змінити пароль лише якщо його "
+#~ "прострочено\n"
+#~ " -i, --inactive INACTIVE зробити пароль неактивним після "
+#~ "прострочення\n"
+#~ " -l, --lock заблокувати вказаний запис\n"
+#~ " -n, --mindays МІН_ДНІВ встановити найменшу кількість днів перед\n"
+#~ " зміною пароля у МІН_ДНІВ\n"
+#~ " -q, --quiet тихий режим\n"
+#~ " -r, --repository СХОВИЩЕ змінити пароль у вказаному СХОВИЩІ\n"
+#~ " -S, --status звітувати про стан пароля вказаного "
+#~ "запису\n"
+#~ " -u, --unlock розблокувати вказаний запис\n"
+#~ " -w, --warndays ПОП_ДНІВ встановити кількість днів перед\n"
+#~ " повідомленням про прострочення у "
+#~ "ПОП_ДНІВ\n"
+#~ " -x, --maxdays МАКС_ДНІВ встановити максимальну кількість днів "
+#~ "перед\n"
+#~ " зміною пароля у МАКС_ДНІВ\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr "Використання: %s [-q] [-r] [-s] [пароль [shadow]]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr "Використання: %s [-q] [-r] [-s] [пароль [shadow]]\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "Використання: id\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "Використання: id\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "Невідомий id: %s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "Немає оболонки\n"
+
+#~ msgid ""
+#~ "Usage: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force removal of files,\n"
+#~ " even if not owned by user\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -r, --remove remove home directory and mail spool\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Використання: userdel [параметри] ЛОГІН\n"
+#~ "\n"
+#~ "Параметри:\n"
+#~ " -f, --force видаляти файли навіть якщо вказаний\n"
+#~ " користувач не є їх володарем\n"
+#~ " -h, --help вивести це довідкове повідомлення та "
+#~ "вийти\n"
+#~ " -r, --remove видалити домашню теку і поштову скриньку\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Використання: useradd [параметри] ЛОГІН\n"
+#~ "\n"
+#~ "Параметри:\n"
+#~ " -a, --append додати користувача до додаткових ГРУП\n"
+#~ " (використовувати тільки з -G)\n"
+#~ " -c, --comment КОМЕНТАР встановити поле GECOS для нового запису\n"
+#~ " користувача\n"
+#~ " -d, --home ДОМ_ТЕКА домашня тека для нового запису "
+#~ "користувача\n"
+#~ " -e, --expiredate ДАТА_ПРОСТР встановити дату прострочення запису\n"
+#~ " -f, --inactive НЕАКТИВНИЙ зробити пароль неактивним після "
+#~ "прострочення\n"
+#~ " -g, --gid ГРУПА використовувати ГРУПУ для нового запису\n"
+#~ " користувача\n"
+#~ " -G, --groups ГРУПИ список додаткових груп для нового запису\n"
+#~ " користувача\n"
+#~ " -h, --help показати це довідкове повідомлення і "
+#~ "вийти\n"
+#~ " -l, --login НОВИЙ_ЛОГІН нове значення реєстраційного імені\n"
+#~ " -L, --lock заблокувати обліковий запис користувача\n"
+#~ " -m, --move-home перенести вміст домашньої теки в нове "
+#~ "місце\n"
+#~ " (використовувати тільки з -d)\n"
+#~ " -o, --non-unique дозволювати створювати користувачів з UID "
+#~ "що\n"
+#~ " повторюються\n"
+#~ " -p, --password ПАРОЛЬ використовувати зашифрований пароль для\n"
+#~ " нового запису користувача\n"
+#~ " -s, --shell ОБОЛОНКА вхідна оболонка для нового запису "
+#~ "користувача\n"
+#~ " -u, --uid UID використовувати UID для нового запису\n"
+#~ " користувача\n"
+#~ " -U, --unlock розблокувати обліковий запис користувача\n"
+#~ "\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s: не подано прапорців\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: vipw [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -g, --group edit group database\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -p, --passwd edit passwd database\n"
+#~| " -q, --quiet quiet mode\n"
+#~| " -s, --shadow edit shadow or gshadow database\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group edit group database\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -p, --passwd edit passwd database\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow edit shadow or gshadow database\n"
+#~ " -u, --user which user's tcb shadow file to edit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Використання: vipw [параметри]\n"
+#~ "\n"
+#~ "Параметри:\n"
+#~ " -g, --group редагувати базу даних груп\n"
+#~ " -h, --help вивести це довідкове повідомлення та "
+#~ "вийти\n"
+#~ " -p, --passwd редагувати базу даних паролів\n"
+#~ " -q, --quiet тихий режим\n"
+#~ " -s, --shadow редагувати базу даних shadow або gshadow\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "Використання: %s [вхідні_данні]\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s: не можу створити %s\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s: не можу змінити власника %s\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| " -a, --all display faillog records for all users\n"
+#~| " -h, --help display this help message and exit\n"
+#~| " -l, --lock-time SEC after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| " -m, --maximum MAX set maximum failed login counters to "
+#~| "MAX\n"
+#~| " -r, --reset reset the counters of login failures\n"
+#~| " -t, --time DAYS display faillog records more recent than "
+#~| "DAYS\n"
+#~| " -u, --user LOGIN display faillog record or maintains "
+#~| "failure\n"
+#~| " counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| " options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all display faillog records for all users\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -l, --lock-time SEC after failed login lock account to SEC "
+#~ "seconds\n"
+#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
+#~ " -r, --reset reset the counters of login failures\n"
+#~ " -t, --time DAYS display faillog records more recent than "
+#~ "DAYS\n"
+#~ " -u, --user LOGIN display faillog record or maintains "
+#~ "failure\n"
+#~ " counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ " options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Використання: faillog [опції]\n"
+#~ "\n"
+#~ "Опції:\n"
+#~ " -a, --all показати помилки входу для всіх користувачів\n"
+#~ " -h, --help показати цю допомогу та вийти\n"
+#~ " -l, --lock-time СЕК після помилки входу блокувати рахунок на СЕК\n"
+#~ " секунд\n"
+#~ " -m, --maximum МАКС встановити максимальну кількість помилок входу "
+#~ "до\n"
+#~ " МАКС\n"
+#~ " -r, --reset перезавантажити лічільник помилок входу\n"
+#~ " -t, --time ДНІВ показати помилки входу новіші за ДНІВ\n"
+#~ " -u, --user ЛОГІН показати помилки входу або вести лічільники "
+#~ "помилок\n"
+#~ " та ліміти (якщо використовується з -r, -m або -l\n"
+#~ " опціями) лише для користувача з логіном ЛОГІН\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force exit with success status if the\n"
+#~ " specified group already exists\n"
+#~ " -g, --gid GID use GID for the new group\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique allow create group with duplicate\n"
+#~ " (non-unique) GID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new group\n"
+#~ " -r, --system create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Використання: groupadd [параметри] ГРУПА\n"
+#~ "\n"
+#~ "Параметри:\n"
+#~ " -f, --force примусити не повертати помилку якщо вказана\n"
+#~ " група вже існує\n"
+#~ " -g, --gid GID використати GID для нової групи\n"
+#~ " -h, --help показати це довідкове повідомлення та вийти\n"
+#~ " -K, --key КЛЮЧ=ЗНАЧЕННЯ змінити значення за замовченням\n"
+#~ " з /etc/login.defs\n"
+#~ " -o, --non-unique дозволити створювати групи з GID що "
+#~ "повторюються\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --gid GID force use new GID by GROUP\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Використання: groupmod [параметри] ГРУПА\n"
+#~ "\n"
+#~ "Параметри:\n"
+#~ " -g, --gid GID встановити GID для групи\n"
+#~ " -h, --help показати це довідкове повідомлення та "
+#~ "вийти\n"
+#~ " -n, --new-name НОВА_ГРУПА використовувати назву НОВА_ГРУПА для "
+#~ "ГРУПИ\n"
+#~ " -o, --non-unique дозволити створювати групи з GID що "
+#~ "повторюються\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~ " home directory\n"
+#~ " -c, --comment COMMENT set the GECOS field for the new user "
+#~ "account\n"
+#~ " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~ " -D, --defaults print or save modified default useradd\n"
+#~ " configuration\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP for the new user account\n"
+#~ " -G, --groups GROUPS list of supplementary groups for the new\n"
+#~ " user account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -l, --no-log-init do not add the user to the lastlog and\n"
+#~ " faillog databases\n"
+#~ " -m, --create-home create home directory for the new user\n"
+#~ " account\n"
+#~ " -M, --no-create-home do not create user's home directory\n"
+#~ " (overrides /etc/login.defs)\n"
+#~ " -N, --no-user-group do not create a group with the same name "
+#~ "as\n"
+#~ " the user\n"
+#~ " -o, --non-unique allow create user with duplicate\n"
+#~ " (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new user\n"
+#~ " account\n"
+#~ " -r, --system create a system account\n"
+#~ " -s, --shell SHELL the login shell for the new user account\n"
+#~ " -u, --uid UID force use the UID for the new user "
+#~ "account\n"
+#~ " -U, --user-group create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Використання: useradd [параметри] ЛОГІН\n"
+#~ "\n"
+#~ "Параметри:\n"
+#~ " -b, --base-dir БАЗОВА_ТЕКА базова тека для домашніх тек нових\n"
+#~ " користувацьких облікових записів\n"
+#~ " -c, --comment КОМЕНТАР встановити поле GECOS для нового запису\n"
+#~ " користувача\n"
+#~ " -d, --home-dir ДОМ_ТЕКА домашня тека для нового запису "
+#~ "користувача\n"
+#~ " -D, --defaults друкувати або зберегти змінені "
+#~ "налаштування\n"
+#~ " useradd\n"
+#~ " -e, --expiredate ДАТА_ПРОСТР встановити дату прострочення запису\n"
+#~ " -f, --inactive НЕАКТИВНИЙ зробити пароль неактивним після "
+#~ "прострочення\n"
+#~ " -g, --gid ГРУПА використовувати ГРУПУ для нового запису\n"
+#~ " користувача\n"
+#~ " -G, --groups ГРУПИ список додаткових груп для нового запису\n"
+#~ " користувача\n"
+#~ " -h, --help показати це довідкове повідомлення і "
+#~ "вийти\n"
+#~ " -k, --skel ТЕКА_КІСТЯКА вказати альтернативну теку для кістяка\n"
+#~ " -K, --key КЛЮЧ=ЗНАЧЕННЯ переписати значення з /etc/login.defs\n"
+#~ " -m, --create-home створити домашню теку для запису нового\n"
+#~ " користувача\n"
+#~ " -o, --non-unique дозволювати створювати користувачів з UID "
+#~ "що\n"
+#~ " повторюються\n"
+#~ " -p, --password ПАРОЛЬ використовувати зашифрований пароль для\n"
+#~ " нового запису користувача\n"
+#~ " -s, --shell ОБОЛОНКА вхідна оболонка для нового запису\n"
+#~ " користувача\n"
+#~ " -u, --uid UID використовувати UID для нового запису\n"
+#~ " користувача\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Пароль прострочений."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: не можу заблокувати файл паролів\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: не можу відкрити файл паролів\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: не можу заблокувати файл прихованих паролів\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: не можу відкрити файл прихованих паролів\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: не можу переписати файл прихованих паролів\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: не можу переписати файл паролів\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: не можу оновити файл прихованих паролів\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tПовне ім'я: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tНомер кімнати: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tРобочій телефон: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tДомашній телефон: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "Не можу блокувати файл паролів; спробуйте пізніше.\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Не можу оновити запис у файлі паролів.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Не можу записати зміни до файлу паролів.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Не можу розблокувати файл паролів.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: не можу блокувати файл груп\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: неможливо заблокувати файл gshadow\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: не можу відкрити файл з прихованими паролями\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: помилка оновлення файлу з прихованими паролями\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: помилка оновлення запису у базі груп\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: рядок %d: невідома група %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: рядок %d: не можу оновити запис\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: не можу заблокувати файл з прихованими паролями\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: помилка оновлення файлу з прихованими паролями\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: помилка оновлення файлу з паролями\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: рядок %d: невідомий користувач %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: рядок %d: не можу оновити запис у базі паролів\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: невідомий користувач\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Невідомий користувач: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Використання: %s [-r|-R] група\n"
+
+#~ msgid " %s [-a user] group\n"
+#~ msgstr " %s [-a користувач] група\n"
+
+#~ msgid " %s [-d user] group\n"
+#~ msgstr " %s [-d користувач] група\n"
+
+#~ msgid " %s [-A user,...] [-M user,...] group\n"
+#~ msgstr " %s [-A користувач,...] [-M користувач,...] група\n"
+
+#~ msgid " %s [-M user,...] group\n"
+#~ msgstr " %s [-M користувач,...] група\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: не можу заблокувати\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: не можу заблокувати базу прихований паролів\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: не можу переписати файл прихованих паролів\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: не можу розблокувати файл\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: не можу оновити запис\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: не можу оновити запис у базі прихованих паролів\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "невідома група: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: не можу відкрити файл\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: не можу відкрити файл з прихованими паролями\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Ви хто?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: невідомий член %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: помилка додання нового запису у файл груп\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: не можу переписати файл груп\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: не можу переписати файл прихованих груп\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: не можу заблокувати файл груп\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: не можу відкрити файл груп\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: не можу блокувати файл прихованих груп\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: не можу відкрити файл прихованих груп\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u не є унікальним\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: помилка видалення запису з бази груп\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: помилка видалення запису з бази прихованих груп\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: не можу видалити головну групу користувача.\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Член, якого потрібно видалити, не знайдений\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr ""
+#~ "Використання: groupmems -a користувач | -d користувач | -D | -l [-g "
+#~ "група]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Тільки root може додавати членів до інших груп\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "Необхідний доступ до групи\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "Не є первинним володарем поточної групи\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "PAM автентифікація не пройшла\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "Неможливо заблокувати файл груп\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "Неможливо закрити файл груп\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s не знайдено у /etc/passwd\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u не є унікальний GID\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s не є унікальне ім'я\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: не можу переписати файл паролів\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: не можу блокувати файл паролів\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: не можу відкрити файл паролів\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: не можу оновити прихований запис для %s\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: не можу оновити запис для групи %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: не можу блокувати файл прихованих груп\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: не можу відкрити файл прихованих груп\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: не можу видалити приховану групу %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: не можу оновити файл прихованих груп\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: не можу видалити файл прихованих груп\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "невідомий UID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "невідомий GID: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: група %s не існує\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: користувач %s не існує\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: невірне ім'я користувача '%s'\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: не можу блокувати /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: не можу блокувати /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: не можу блокувати /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: не можу блокувати /etc/passwd.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: не можу відкрити файл\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: не можу оновити запис у файлі паролів для %s\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: не можу блокувати файл паролів\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: не можу відкрити файл паролів\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: не можу видалити запис у файлі прихованих паролів для %s\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: не можу оновити файл паролів\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: не можу оновити запис для користувача %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: не можу видалити файл прихованих паролів\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: невідомий GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: невідома група %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: бракує пам'яті у update_gshadow\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: не можу переписати файл прихованих паролів\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: не можу блокувати файл прихованих паролів\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: не можу відкрити файл прихованих паролів\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: не можу заблокувати файл груп\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: не можу відкрити файл груп\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: не можу заблокувати файл прихованих груп\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: не можу відкрити файл прихованих груп\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: помилка додання нового запису у базу паролів\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: помилка додання нового запису у базу прихованих паролів\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s: застереження: CREATE_HOME не підтримується, користуйтесь -m.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: помилка оновлення запису у базі груп\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: помилка оновлення запису у базі груп\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: не можу відкрити файл груп\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: не можу відкрити файл прихованих груп\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: помилка видалення запису з бази паролів\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: помилка видалення запису з бази прихованих паролів\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: помилка додання нового запису у файл груп\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu не є унікальним\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: помилка зміни запису в базі паролів\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: помилка видалення запису з бази паролів\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: помилка видалення запису з бази прихованих паролів\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: не можу отримати унікальний GID\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " на \"%.100s\" з \"%.200s\""
+
+#~ msgid " on '%.100s'"
+#~ msgstr " на \"%.100s\""
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: рядок %d: не можу створити UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: ім'я %s не є унікальним\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ " -h, --help\t\tdisplay this help message and exit\n"
+#~ " -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Використання: chpasswd [опції]\n"
+#~ "\n"
+#~ "Опції:\n"
+#~ " -e, --encrypted\tвказані паролі зашифровано\n"
+#~ " -h, --help\t\tпоказати цю допомогу та вийти\n"
+#~ " -m, --md5\t\tвикористовувати MD5 шифрування замість DES, якщо вказані\n"
+#~ "\t\t\tпаролі не зашифровано\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Немає файлу паролів\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Вибачте.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Вибачте, пароль для %s не може бути змінено зараз.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Вибачте."
diff --git a/po/vi.gmo b/po/vi.gmo
new file mode 100644
index 0000000..1a60fb4
--- /dev/null
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
new file mode 100644
index 0000000..81e269a
--- /dev/null
+++ b/po/vi.po
@@ -0,0 +1,3173 @@
+# Vietnamese translation for Shadow.
+# Bản dịch tiếng Việt dành cho shadow.
+# Copyright © 2015 Free Software Foundation, Inc.
+# Clytie Siddall <clytie@riverland.net.au>, 2005-2008.
+# Trần Ngọc Quân <vnwildman@gmail.com>, 2014, 2015, 2016.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow master\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2016-10-04 07:07+0700\n"
+"Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
+"Language-Team: Vietnamese <debian-l10n-vietnamese@lists.debian.org>\n"
+"Language: vi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Gtranslator 2.91.7\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"Có nhiều mục tin mang tên “%s” trong %s. Hãy sửa chữa trường hợp này, dùng "
+"pwck hoặc grpck.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "Phương pháp mã hóa không được thư viện libcrypt hỗ trợ? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr "lỗi cấu hình — không thể phân tích cú pháp của giá trị %s: “%s”"
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Không thể cấp phát sức chứa cho thông tin cấu hình.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "lỗi cấu hình - không hiểu mục tin “%s” (báo cho người quản trị).\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr "%s: nscd đã kết thúc bất thường (tín hiệu %d)\n"
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr "%s: nscd đã thoát với mã là %d\n"
+
+msgid "Password: "
+msgstr "Mật khẩu: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Mật khẩu của %s: "
+
+#, fuzzy
+#| msgid "Cannot open audit interface - aborting.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "Không thể mở giao diện thử, kiểm nghiệm nên hủy bỏ.\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr "[libsemanage]: %s\n"
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr "Không thể tạo bộ tiếp hợp quản lý SELinux\n"
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr "Chính sách cho SELinux chưa được quản lý\n"
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr "Không thể đọc kho lưu chính sách SELinux\n"
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr "Không thể thiết lập kết nối quản lý SELinux\n"
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr "Không thể bắt đầu phiên giao dịch SELinux\n"
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr "Không thể truy vấn seuser cho %s\n"
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr "Không thể đặt serange cho %s\n"
+
+#, c-format
+msgid "Could not set sename for %s\n"
+msgstr "Không thể đặt sename cho %s\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr "Không thể sửa đổi ánh xạ đăng nhập cho %s\n"
+
+#, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "Không thể tạo ánh xạ đăng nhập SELinux cho %s\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr "Không thể đặt tên %s\n"
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr "Không thể đặt người dùng SELinux cho %s\n"
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr "Không thể thêm ánh xạ đăng nhập cho %s\n"
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr "Không thể khởi tạo bộ quản lý SELinux\n"
+
+#, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "Không thể tạo khóa người dùng SELinux\n"
+
+#, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "Không thể thẩm định người dùng SELinux\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr "Không thể sửa đổi ánh xạ người dùng SELinux\n"
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr "Không thể thêm ánh xạ người dùng SELinux\n"
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr "Không thể chuyển giao giao dịch SELinux\n"
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr ""
+"Ánh xạ đăng nhập cho %s chưa được định nghĩa, OK nếu ánh xạ mặc định được "
+"dùng\n"
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr ""
+"Ánh xạ đăng nhập cho %s được định nghĩa trong chính sách, không thể xóa đi\n"
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr "Không thể xóa ánh xạ đăng nhập cho %s"
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: hết bộ nhớ\n"
+
+#, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s: Không thể lấy thống kê về %s: %s\n"
+
+#, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s: %s không phải là thư mục mà cũng không phải là liên kết mềm.\n"
+
+#, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s: Không thể đọc liên kết mềm %s: %s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr "%s: Liên kết mềm dài một cách điên rồ: %s\n"
+
+#, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s: Không thể tạo thư mục %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s: Không thể thay đổi người sở hữu của %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s: Không thể thay đổi chế độ của %s: %s\n"
+
+#, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s: unlink: %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s: Không thể gỡ bỏ thư mục %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s: Không thể đổi tên %s thành %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s: Không thể gỡ bỏ %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s: Không thể tạo liên kết mềm %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s: Không thể thay đổi chủ sở hữu của %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s: Không thể lstat %s: %s\n"
+
+#, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s: Cảnh báo, người dùng %s không có tập tin shadow tcb.\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+"%s: Khẩn cấp: shadow tcb của %s không phải là tập tin thường với "
+"st_nlink=1.\n"
+"Tài khoản vẫn bị khóa.\n"
+
+#, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s: mkdir: %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s: Không thể mở %s: %s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Cảnh báo: không biết nhóm %s.\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Cảnh báo: quá nhiều nhóm\n"
+
+msgid "Your password has expired."
+msgstr "Mật khẩu của bạn đã hết hạn dùng."
+
+msgid "Your password is inactive."
+msgstr "Mật khẩu của bạn là không hoạt động."
+
+msgid "Your login has expired."
+msgstr "Đăng nhập của bạn đã hết hạn dùng."
+
+msgid " Contact the system administrator."
+msgstr " Hãy liên lạc với người quản trị hệ thống."
+
+msgid " Choose a new password."
+msgstr " Hãy chọn mật khẩu mới."
+
+msgid "You must change your password."
+msgstr "Bạn cần phải thay đổi mật khẩu."
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Mật khẩu của bạn sẽ hết hạn sau %ld ngày.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Mật khẩu của bạn sễ hết hạn vào ngày mai."
+
+msgid "Your password will expire today."
+msgstr "Mật khẩu của bạn sẽ hết hạn vào hôm nay."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "Không thể mở giao diện thử, kiểm nghiệm nên hủy bỏ.\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr ""
+"Không thể thay đổi chủ sở hữu hay chế độ của đầu vào tiêu chuẩn tty: %s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: gặp lỗi khi mở khóa %s\n"
+
+#, c-format
+msgid "%s: "
+msgstr "%s: "
+
+msgid ": "
+msgstr ": "
+
+msgid "Environment overflow\n"
+msgstr "Tràn môi trường\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Không cho phép bạn thay đổi $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d lần bị lỗi sau khi đăng nhập cuối cùng.\n"
+"Lần gần nhất là %s vào %s.\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: Cấu hình không hợp lệ: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr "%s: Cấu hình không hợp lệ: GID_MIN (%lu), GID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "%s: gặp lỗi khi cấp phát bộ nhớ: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: Không thể lấy GID hệ thống duy nhất (không còn có sẵn GID thêm nữa)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s: Không thể lấy GID duy nhất (không còn có sẵn GID thêm nữa)\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: Không thể lấy GID duy nhất (không còn có sẵn GID thêm nữa)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+"%s: Cấu hình không hợp lệ: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't find subordinate user range\n"
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s: không thể tìm thấy vùng người dùng lệ thuộc\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+"%s: Cấu hình không hợp lệ: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't find subordinate user range\n"
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s: không thể tìm thấy vùng người dùng lệ thuộc\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s: Cấu hình không hợp lệ: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr "%s: Cấu hình không hợp lệ: UID_MIN (%lu), UID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr ""
+"%s: Không thể lấy UID hệ thống duy nhất (không còn có sẵn UID thêm nữa)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s: Không thể lấy UID duy nhất (không còn có sẵn UID thêm nữa)\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: Không thể lấy UID duy nhất (không còn có sẵn UID thêm nữa)\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Authentication failure\n"
+msgid "%s: Memory allocation failure\n"
+msgstr "%s: lỗi xác thực\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s: trường không hợp lệ “%s”\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Could not set name for %s\n"
+msgid "%s: Could not seteuid to %d\n"
+msgstr "Không thể đặt tên %s\n"
+
+#, fuzzy, c-format
+#| msgid "Could not set name for %s\n"
+msgid "%s: Could not set caps\n"
+msgstr "Không thể đặt tên %s\n"
+
+#, c-format
+msgid "%s: snprintf failed!\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s: dòng %d: lỗi chown (thay đổi quyền sở hữu) %s: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s: dòng %d: lỗi chown (thay đổi quyền sở hữu) %s: %s\n"
+
+msgid "Too many logins.\n"
+msgstr "Quá nhiều lần đăng nhập.\n"
+
+msgid "You have new mail."
+msgstr "Bạn có thư mới."
+
+msgid "No mail."
+msgstr "Không có thư."
+
+msgid "You have mail."
+msgstr "Bạn có thư."
+
+msgid "no change"
+msgstr "chưa thay đổi gì"
+
+msgid "a palindrome"
+msgstr "từ đọc xuôi ngược đều giống như nhau"
+
+msgid "case changes only"
+msgstr "chỉ thay đổi HOA/thường"
+
+msgid "too similar"
+msgstr "quá tương tự"
+
+msgid "too simple"
+msgstr "quá đơn giản"
+
+msgid "rotated"
+msgstr "đã xoay"
+
+msgid "too short"
+msgstr "quá ngắn"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "Mật khẩu sai: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() (mật khẩu: bắt đầu pam) đã thất bại với lỗi %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+msgid "passwd: password unchanged\n"
+msgstr "passwd: chưa đổi mật khẩu\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: mật khẩu đã được cập nhật\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s: kho lưu %s không được hỗ trợ\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s: pam_start: (pam bắt đầu) lỗi %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd: pam_start() (mật khẩu: bắt đầu pam) đã thất bại với lỗi %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Mật khẩu không đúng cho %s .\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr "%s: nhiều tùy chọn --root\n"
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr "%s: tùy chọn “%s” cần một đối số\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: gặp lỗi khi xóa bỏ đặc quyền (%s)\n"
+
+#, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s: đường dẫn chroot không hợp lệ “%s”\n"
+
+#, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s: không thể truy cập thư mục chroot %s: %s\n"
+
+#, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s: không thể chuyển sang thư mục chroot %s: %s\n"
+
+#, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s: không thể thay đổi thư mục gốc thành %s: %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"Phương pháp mã hóa (ENCRYPT_METHOD) không hợp lệ: “%s”\n"
+"nên hoàn nguyên về giá trị mặc định: DES.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Không thể cd (chuyển đổi thư mục) sang “%s”.\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Không có thư mục nên đăng nhập với “HOME=/”"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Không thể thực hiện %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Thư mục gốc không hợp lệ “%s”\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Không thể thay đổi thư mục gốc thành “%s”\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user '%s' does not exist in %s\n"
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: người dùng “%s” không tồn tại trong %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user '%s' is not a member of '%s'\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s: người dùng “%s” không thuộc về “%s”\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Không thể quyết định tên TTY của bạn."
+
+msgid "No"
+msgstr "Không"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Cách dùng: %s [các_tuỳ_chọn] ĐĂNG_NHẬP\n"
+"\n"
+"Tùy chọn:\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr ""
+" -d, --lastday NGÀY_CUỐI đặt ngày thay đổi mật khẩu cuối cùng thành "
+"ngày này\n"
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -E, --expiredate NGÀY_HẾT_HẠN đặt ngày hết hạn dùng tài khoản thành ngày "
+"này\n"
+
+msgid " -h, --help display this help message and exit\n"
+msgstr " -h, --help hiển thị trợ giúp này, sau đó thoát\n"
+
+#, fuzzy
+#| msgid " -g, --group edit group database\n"
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr " -g, --group sửa đổi cơ sở dữ liệu nhóm\n"
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -I, --inactive INACTIVE đặt mật khẩu không còn hoạt động lại sau khi "
+"hết hạn dùng,\n"
+" thành INACTIVE\n"
+
+msgid " -l, --list show account aging information\n"
+msgstr ""
+" -l, --list hiển thị thông tin về khoảng thời gian sử "
+"dụng tài khoản\n"
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -m, --mindays SỐ đặt thành số này số tối thiểu các ngày "
+"trước\n"
+" khi thay đổi mật khẩu\n"
+
+#, fuzzy
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -M, --maxdays SỐ đặt thành số này số tối đa các ngày trước "
+"khi thay đổi mật khẩu\n"
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr " -R, --root THƯ_MỤC_ĐỔI thư mục để chuyển gốc đến\n"
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -W, --warndays SỐ_NGÀY đặt thành số này số các ngày gây ra cảnh báo "
+"về hết hạn dùng\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Nhập giá trị mới, hoạc bấm phím Enter đặt chọn giá trị mặc định"
+
+msgid "Minimum Password Age"
+msgstr "Thời gian hoạt động tối thiểu cho mật khẩu"
+
+msgid "Maximum Password Age"
+msgstr "Thời gian hoạt động tối đa cho mật khẩu"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Thay đổi mật khẩu cuối cùng (NNNN-TT-Ng)"
+
+msgid "Password Expiration Warning"
+msgstr "Cảnh báo hết hạn dùng mật khẩu"
+
+msgid "Password Inactive"
+msgstr "Mật khẩu không hoạt động"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Ngày hết hạn dùng tài khoản (NNNN-TT-Ng)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Thay đổi mặt khẩu cuối cùng\t\t\t\t\t: "
+
+msgid "never"
+msgstr "chưa bao giờ"
+
+msgid "password must be changed"
+msgstr "mật khẩu phải thay đổi"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Mật khẩu hết hạn dùng:\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Mật khẩu không hoạt động\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Tài khoản hết hạn dùng\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Số ngày tối thiểu giữa hai lần thay đổi mật khẩu\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Số ngày tối đa giữa hai lần thay đổi mật khẩu\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Số ngày cảnh báo trước khi mật khẩu hết hạn\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: ngày không hợp lệ “%s”\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: đối số thuộc số không hợp lệ “%s”\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: đừng dùng “l” cùng với cờ khác\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: không đủ quyền.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Không thể phân giải tên người dùng của bạn.\n"
+
+#, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s: PAM: %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: Không thể khóa %s; hãy thử lại sau.\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: không thể mở %s\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: gặp lỗi trong khi ghi thay đổi vào %s\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: gặp lỗi khi chuẩn bị mục tin %s mới “%s”\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: không có tập tin mật khẩu shadow\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: người dùng “%s” không tồn tại trong %s\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Đang thay đổi thông tin về thời gian hoạt động đối với %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: gặp lỗi khi thay đổi trường\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Cách dùng: %s [tuỳ_chọn …] [ĐĂNG_NHẬP]\n"
+"\n"
+"Tùy chọn:\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr " -f, --full-name HỌ_TÊN đổi tên thật của người dùng\n"
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr " -h, --home-phone ĐIỆN_THOẠI đổi số điện thoại nhà của người dùng\n"
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr " -o, --other THÔNG_TIN_KHÁC đổi thông tin GECOS khác\n"
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr " -r, --room SỐ_PHÒNG đổi số phòng của người dùng\n"
+
+msgid " -u, --help display this help message and exit\n"
+msgstr " -u, --help hiển thị trợ giúp này, sau đó thoát\n"
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+" -w, --work-phone ĐIỆN_THOẠI_LÀM thay đổi số điện thoại nơi làm của người "
+"dùng\n"
+
+msgid "Full Name"
+msgstr "Họ và tên"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "Số phòng"
+
+msgid "Work Phone"
+msgstr "Điện thoại nơi làm việc"
+
+msgid "Home Phone"
+msgstr "Điện thoại ở nhà"
+
+msgid "Other"
+msgstr "Khác"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Không thể thay đổi mã số thành siêu quản trị (root).\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: tên chứa ký tự khác ASCII: “%s”\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: tên không hợp lệ: “%s”\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s: số thứ tự phòng chứa ký tự khác ASCII: “%s”\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: số thứ tự phòng không hợp lệ: “%s”\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: số điện thoại chỗ làm không hợp lệ: “%s”\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: số điện thoại ở nhà không hợp lệ: “%s”\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: “%s” chứa ký tự không thuộc bảng mã ASCII\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: “%s” chứa ký tự bị cấm\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: người dùng “%s” không tồn tại\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: không thể thay đổi người dùng “%s” trên ứng dụng khách NIS.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: “%s” là NIS cái cho ứng dụng khách này.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Đang thay đổi thông tin về người dùng đối với %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: trường quá dài\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Cách dùng: %s [tuỳ_chọn …]\n"
+"\n"
+"Tùy chọn:\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr " -c, --crypt-method PHƯƠNG_THỨC phương pháp mật mã (một trong %s)\n"
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr ""
+" -e, --encrypted các mật khẩu đã cung cấp cũng được mật mã\n"
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr ""
+" -m, --md5 mật mã hóa mật khẩu chữ thô, dùng thuật toán "
+"MD5\n"
+
+#, fuzzy
+#| msgid ""
+#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
+#| " crypt algorithms\n"
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr ""
+" -s, --sha-rounds số vòng SHA cho thuật toán mã hóa SHA*\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: cho phép cờ %s chỉ cùng với cờ %s\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: các cờ “-c”, “-e” và “-m” loại từ lẫn nhau\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: phương pháp mã hóa không được hỗ trợ: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: dòng %d: dòng quá dài\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: dòng %d: thiếu mật khẩu mới\n"
+
+#, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s: gặp lỗi khi mã hóa mật khẩu với muối “%s”: %s\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: dòng %d, nhóm “%s” không tồn tại\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: dòng %d: gặp lỗi khi chuẩn bị mục tin %s mới “%s”\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: gặp lỗi nên bỏ qua các thay đổi\n"
+
+#, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: (dòng %d, người dùng %s) mật khẩu chưa thay đổi\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: dòng %d: người dùng “%s” không tồn tại\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr ""
+" -s, --shell HỆ_VỎ dùng hệ vỏ đăng nhập mới\n"
+" cho tài khoản người dùng\n"
+
+msgid "Login Shell"
+msgstr "Hệ vỏ Đăng nhập"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Không cho phép bạn thay đổi hệ vỏ đối với “%s”.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Đang thay đổi hệ vỏ đăng nhập đối với %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: mục tin không hợp lệ: %s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s: %s không phải là hệ vỏ hợp lệ\n"
+
+#, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s: Cảnh báo: %s không tồn tại\n"
+
+#, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s: Cảnh báo: %s không có quyền thực thi\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr ""
+" -c, --check kiểm tra sự hết hạn của mật khẩu người dùng\n"
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+" -f, --force ép buộc đổi mật khẩu nếu mật khẩu của người\n"
+" dùng hết hạn\n"
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: hai tùy chọn %s và %s xung đột với nhau\n"
+
+#, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "%s: đối số bất thường: %s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr ""
+" -a, --all hiển thị các mục ghi faillog cho mọi người "
+"dùng\n"
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+" -l, --lock-secs GIÂY sau khi không đăng nhập được thì khóa tài "
+"khoản trong vòng số GIÂY này\n"
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr ""
+" -m, --maximum SỐ đặt thành SỐ này số tối đa các bộ đếm lần "
+"không đăng nhập được\n"
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr ""
+" -r, --reset đặt lại các bộ đếm lần không đăng nhập được\n"
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time NGÀY hiển thị các mục ghi faillog mới hơn số NGÀY "
+"này\n"
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+" -u, --user ĐĂNG_NHẬP/PHẠM_VI hiển thị mục ghi faillog hoặc duy trì các bộ "
+"đếm\n"
+" lần không đăng nhập được và các giới hạn như "
+"thế\n"
+" (nếu dùng với cờ “-r”, “-m” hay “-l” riêng "
+"từng cái)\n"
+" chỉ cho mỗi tên đăng nhập đưa ra\n"
+
+#, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s: Không lấy được mục tin cho UID %lu\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "Đăng nhập Bị lỗi Tối đa Mới nhất Vào\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr " [còn %lus]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds khóa]"
+
+#, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s: Gặp lỗi khi đặt lại số đếm cho UID %lu\n"
+
+#, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s: Gặp lỗi khi đặt số tối đa cho UID %lu\n"
+
+#, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s: Gặp lỗi khi đặt thời gian khóa cho UID %lu\n"
+
+#, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "%s: Không nhận ra người dùng hay phạm vi: %s\n"
+
+#, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s: Không thể lấy kích cỡ của %s: %s\n"
+
+#, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s: Gặp lỗi khi ghi %s: %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Cách dùng: %s [tuỳ_chọn] NHÓM\n"
+"\n"
+"Tùy chọn:\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr " -a, --add NGƯỜI_DÙNG thêm người dùng này vào NHÓM\n"
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr " -d, --delete NGƯỜI_DÙNG gỡ bỏ người dùng này khỏi NHÓM\n"
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr " -Q, --root THƯ_MỤC_ĐỔI thư mục gốc sẽ chuyển đến\n"
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr " -r, --remove-password gỡ bỏ mật khẩu của NHÓM\n"
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr ""
+" -R, --restrict hạn chế truy cập đến NHÓM thành các thành "
+"viên của nó\n"
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr ""
+" -M, --members NGƯỜI_DÙNG,… đặt danh sách các thành viên của NHÓM\n"
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+" -A, --administrators QUẢN_TRỊ,…\n"
+" đặt danh sách các quản trị cho NHÓM\n"
+
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "Trừ hai tùy chọn “-A” và “-M”, không thể tổ hợp các tùy chọn.\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "Không thể tổ hợp các tùy chọn.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: mật khẩu nhóm shadow cần cho tùy chọn “-A”\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: nhóm “%s” không tồn tại trong %s\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: gặp lỗi trong khi đóng %s chỉ-đọc\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Đang thay đổi mật khẩu cho nhóm %s\n"
+
+msgid "New Password: "
+msgstr "Mật khẩu mới: "
+
+msgid "Re-enter new password: "
+msgstr "Nhập lại mật khẩu mới: "
+
+msgid "They don't match; try again"
+msgstr "Hai mật khẩu không khớp nhau, hãy thử lại"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Hãy thử lại sau\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Đang thêm người dung %s vào nhóm %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Đang gỡ bỏ người dùng %s khỏi nhóm %s\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: người dùng “%s” không thuộc về “%s”\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: không phải là TTY\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Cách dùng: %s [tuỳ_chọn …] NHÓM\n"
+"\n"
+"Tùy chọn:\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+" -f, --force thoát thành công nếu nhóm đã có, và \n"
+" hủy bỏ “-g” nếu GID đã được dùng\n"
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr " -g, --gid GID dùng GID này cho nhóm mới\n"
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr ""
+" -K, --key KHÓA=GIÁ_TRỊ ghi đè lên các giá trị mặc định “/etc/login."
+"defs”\n"
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique cho phép tạo nhóm có GID trùng (không duy "
+"nhất)\n"
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr ""
+" -p, --password MẬT_KHẨU dùng mật khẩu đã mật mã này cho nhóm mới\n"
+
+msgid " -r, --system create a system account\n"
+msgstr " -r, --system tạo một tài khoản hệ thống\n"
+
+#, fuzzy
+#| msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr " -R, --root THƯ_MỤC_ĐỔI thư mục để chuyển gốc đến\n"
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: “%s” không phải là tên nhóm hợp lệ\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: mã số nhóm (GID) không hợp lệ “%s”\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K cần cú pháp KHÓA=GIÁ_TRỊ\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: nhóm “%s” đã có\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s: GID “%lu” đã có\n"
+
+#, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s: Không thể cài đặt dịch vụ dọn dẹp.\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+" -f, --force xóa nhóm ngay cả khi nó là nhóm chính của "
+"người dùng\n"
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: không thể gỡ bỏ mục tin “%s” khỏi %s\n"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: không thể gỡ bỏ nhóm chính của người dùng “%s”\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: nhóm “%s” không tồn tại\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: nhóm “%s” là một nhóm kiểu NIS\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s là NIS chủ\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: người dùng “%s” đã thuộc về “%s”\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: Hết bộ nhớ. Không thể cập nhật %s.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Cách dùng: %s [tuỳ_chọn …] [hành_vi]\n"
+"\n"
+"Tùy chọn:\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+" -g, --group TÊN_NHÓM thay đổi tên của nhóm này thay cho nhóm của\n"
+" người dùng (chỉ siêu quản trị)\n"
+
+msgid "\n"
+msgstr "\n"
+
+msgid "Actions:\n"
+msgstr "Hành động là:\n"
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr " -a, --add TÊN thêm tên người dùng này vào nhóm\n"
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr " -d, --delete TÊN gỡ bỏ tên này khỏi nhóm\n"
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr " -p, --purge tẩy mọi người ra nhóm\n"
+
+msgid " -l, --list list the members of the group\n"
+msgstr " -l, --list liệt kê những người trong nhóm\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: tên nhóm của bạn không tương ứng với tên người dùng\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s: chỉ siêu quản trị có quyền sử dụng tùy chọn “-g/--group”\n"
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr " -g, --gid GID thay đổi mã số nhóm sang GID này\n"
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr " -n, --new-name NHÓM_MỚI thay đổi tên sang tên này\n"
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+" -o, --non-unique cho phép sử dụng một GID trùng (không duy "
+"nhất)\n"
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr ""
+" -p, --password MẬT_KHẨU thay đổi mật khẩu thành MẬT_KHẨU (đã mật mã) "
+"này\n"
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: tên nhóm không hợp lệ “%s”\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: nhóm %s là một nhóm kiểu NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: không rõ người dùng %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Cách dùng: %s [các_tuỳ_chọn] [group [gshadow]]\n"
+"\n"
+"Tùy chọn:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Cách dùng: %s [các_tuỳ_chọn] [group]\n"
+"\n"
+"Tùy chọn:\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+" -r, --read-only hiển thị lỗi và cảnh báo\n"
+" nhưng không thay đổi các tập tin\n"
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr " -s, --sort sắp xếp các mục tin theo UID\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: hai tùy chọn “-s” và “-r” không tương thích với nhau\n"
+
+msgid "invalid group file entry"
+msgstr "mục tin tập tin nhóm không hợp lệ"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "xóa dòng “%s” không? "
+
+msgid "duplicate group entry"
+msgstr "mục tin nhóm trùng"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "tên nhóm không hợp lệ “%s”\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "mã số nhóm không hợp lệ “%lu”\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "nhóm %s: không có người dùng %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "xóa thành viên “%s” không? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "không có mục tin tập tin nhóm tương ứng trong %s\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "thêm nhóm “%s” trong %s không?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"nhóm %s có một mục tin trong %s, còn trường mật khẩu trong %s không phải "
+"được đặt thành “x”\n"
+
+msgid "invalid shadow group file entry"
+msgstr "mục tin tập tin nhóm shadow không hợp lệ"
+
+msgid "duplicate shadow group entry"
+msgstr "mục tin nhóm shadow trùng"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "nhóm shadow %s: không có người dùng quản trị %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "xóa thành viên quản trị “%s” không? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "nhóm shadow %s: không có người dùng %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: các tập tin đã được cập nhật\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: chưa thay đổi gì\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: không thể xóa %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Cách dùng: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Cách dùng: id\n"
+
+msgid " groups="
+msgstr " nhóm="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr ""
+" -b, --before SỐ hiển thị chỉ những bản ghi lastlog cũ hơn SỐ "
+"ngày\n"
+" cũ hơn số ngày này (_trước_)\n"
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+" -C, --clear xóa bản ghi lastlog của người dùng (chỉ dùng "
+"được với -u)\n"
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+" -S, --set đặt bản ghi lastlog thành thời điểm hiện tại "
+"(chỉ dùng được với -u)\n"
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr ""
+" -t, --time SỐ hiển thị chỉ những mục ghi lastlog\n"
+" mới hơn số ngày này (_thời gian_)\n"
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr ""
+" -u, --user ĐĂNG_NHẬP hiển thị mục ghi lastlog cho _người dùng_ "
+"tên này\n"
+
+msgid "Username Port From Latest"
+msgstr "Tài_khoản Cổng Từ Mới nhất"
+
+msgid "Username Port Latest"
+msgstr "Người dùng Cổng Mới nhất"
+
+msgid "**Never logged in**"
+msgstr "**Chưa bao giờ đăng nhập**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s: Gặp lỗi khi cập nhật mục tin cho UID %lu\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s: Gặp lỗi khi cập nhật tập tin lastlog\n"
+
+#, c-format
+msgid "%s: Option -C cannot be used together with option -S\n"
+msgstr "%s: Tùy chọn -C không thể dùng cùng với -S\n"
+
+#, c-format
+msgid "%s: Options -C and -S require option -u to specify the user\n"
+msgstr "%s: Các tùy chọn -C và -S cần tùy chọn -u để chỉ định người dùng\n"
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Cách dùng: %s [-p] [tên]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h máy] [-f tên]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r máy\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr "lỗi cấu hình — không thể phân tích cú pháp của giá trị %s: “%d”"
+
+msgid "Invalid login time"
+msgstr "Thời gian đăng nhập không hợp lệ"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Hệ thông bị tắt với lý do bảo dưỡng theo thủ tục."
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Chức năng ngắt kết nối đã bị vòng: cho phép siêu quản trị đăng nhập.]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr "%s: Không thể làm việc mà không có gốc có hiệu lực\n"
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Không có mục tin utmp. Vì thế bạn cần phải thực hiện “login” (đăng nhập) từ "
+"“sh” (hệ vỏ) cấp dưới cùng."
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Đăng nhập đã quá hạn sau %u giây.\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: (đăng nhập) PAM bị lỗi nên hủy bỏ: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s đăng nhập: "
+
+msgid "login: "
+msgstr "đăng nhập: "
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Vượt quá số tối đa các lần thử lại (%u)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: (đăng nhập) PAM đã yêu cầu hủy bỏ\n"
+
+msgid "Login incorrect"
+msgstr "Đăng nhập không đúng"
+
+#, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "Không thể tìm thấy người dùng (%s)\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s đăng nhập: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: lỗi tạo tiến trình con: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSCTTY bị lỗi vào %s"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Cảnh báo: đăng nhập đã bật lại sau bị khóa ra tạm thời."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Đang nhập cuối cùng: %s vào %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Đang nhập cuối cùng: %.19s vào %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " từ %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"vượt quá thời gian đăng nhập\n"
+"\n"
+
+msgid "Usage: logoutd\n"
+msgstr "Cách dùng: logoutd\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, c-format
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s: gặp lỗi khi gỡ bỏ %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s: gặp lỗi khi gỡ bỏ %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to unlock %s\n"
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s: gặp lỗi khi mở khóa %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to find tcb directory for %s\n"
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s: gặp lỗi khi tìm thư mục tcb cho %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Failed to create tcb directory for %s\n"
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s: Gặp lỗi khi tạo thư mục tcb cho %s\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr ""
+"Cách dùng: newgrp [-] [nhóm]\n"
+"[newgrp: nhóm mới]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr ""
+"Cách dùng: sg group [[-c] lệnh]\n"
+"[group: nhóm]\n"
+
+#, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s: gặp lỗi khi mã hóa mật khẩu bằng muối trước đó: %s\n"
+
+msgid "Invalid password.\n"
+msgstr "Mật khẩu không hợp lệ.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: lỗi tạo tiến trình con: %s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: GID “%lu” không tồn tại\n"
+
+msgid "too many groups\n"
+msgstr "quá nhiều nhóm\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+#, fuzzy
+#| msgid " -q, --quiet quiet mode\n"
+msgid " -b, --badnames allow bad names\n"
+msgstr " -q, --quiet chế độ không xuất chi tiết\n"
+
+msgid " -r, --system create system accounts\n"
+msgstr " -r, --system tạo các tài khoản hệ thống\n"
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr ""
+"%s: nhóm “%s” là một nhóm shadow, nhưng không tồn tại trong “/etc/group”\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: mã số người dùng không hợp lệ “%s”\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: tên dùng không hợp lệ “%s”\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: dòng %d: dòng không hợp lệ\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: không thể cập nhật mục tin của người dùng %s (không có trong cơ sở dữ "
+"liệu mật khẩu passwd)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: dòng %d: không thể tạo người dùng\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: dòng %d: không thể tạo nhóm\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: dòng %d: người dùng “%s” không tồn tại trong %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: dòng %d: không thể cập nhật mật khẩu\n"
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: dòng %d: lỗi mkdir (tạo thư mục) %s: %s\n"
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: dòng %d: lỗi chown (thay đổi quyền sở hữu) %s: %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: dòng %d: không thể cập nhật mục tin\n"
+
+#, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s: gặp lỗi khi chuẩn bị mục tin mới “%s”\n"
+
+#, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s: không thể tìm thấy vùng người dùng lệ thuộc\n"
+
+#, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s: không thể tìm thấy vùng nhóm phụ thuộc\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr ""
+" -a, --all thông báo trạng thái mật khẩu về mọi tài "
+"khoản\n"
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr " -d, --delete xóa mật khẩu cho tài khoản đặt tên\n"
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr ""
+" -e, --expire ép buộc hết hạn dùng mật khẩu cho tài khoản "
+"đặt tên\n"
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr ""
+" -k, --keep-tokens thay đổi mật khẩu chỉ nếu bị hết hạn dùng\n"
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -i, --inactive INACTIVE đặt thành INACTIVE mật khẩu không còn hoạt "
+"động lại\n"
+" sau khi hết hạn dùng\n"
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr " -l, --lock khóa mật khẩu của tài khoản đặt tên\n"
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -n, --mindays SỐ đặt thành số này số tối thiểu các ngày\n"
+" trước khi mật khẩu thay đổi được\n"
+
+msgid " -q, --quiet quiet mode\n"
+msgstr " -q, --quiet chế độ không xuất chi tiết\n"
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr " -r, --repository KHO thay đổi mật khẩu trong kho lưu này\n"
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr ""
+" -S, --status thông báo trạng thái mật khẩu về tài khoản "
+"đặt tên\n"
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr ""
+" -u, --unlock mở khóa mật khẩu của tài khoản đặt tên\n"
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr ""
+" -w, --warndays NGÀY đặt thành số này số các ngày cảnh báo về hết "
+"hạn dùng\n"
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -x, --maxdays NGÀY đặt thành số này số tối đa các ngày trước "
+"khi\n"
+" thay đổi được mật khẩu\n"
+
+msgid "Old password: "
+msgstr "Mật khẩu cũ: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Nhập mật khẩu mới (số ký tự tối thiểu %d).\n"
+"Hãy tổ hợp các chữ hoa, chữ thường và chữ số để tạo một mật khẩu mạnh.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Nhập mật khẩu mới (số ký tự tối thiểu %d, tối đa %d).\n"
+"Hãy tổ hợp các chữ hoa, chữ thường và chữ số để tạo một mật khẩu mạnh.\n"
+
+msgid "New password: "
+msgstr "Mật khẩu mới: "
+
+msgid "Try again."
+msgstr "Hãy thử lại."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Cảnh báo: mật khẩu yếu (nhập lại để vẫn dùng nó)"
+
+msgid "They don't match; try again.\n"
+msgstr "Hai mật khẩu không trùng nhau: hãy thử lại.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Không thể thay đổi mật khẩu cho %s.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Chưa có thể thay đổi mật khẩu cho %s.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: mở khóa mật khẩu thì gây ra một tài khoản không có mật khẩu.\n"
+"Bạn nên đặt một mật khẩu dùng câu lệnh “usermod -p” để mở khóa mật khẩu của "
+"tài khoản này.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: kho lưu %s không được hỗ trợ\n"
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not authorized to change the password of %s\n"
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr "%s: %s không có quyền thay đổi mật khẩu của %s\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr ""
+"%s: không cho phép bạn xem hoặc sửa đổi thông tin mật khẩu đối với %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Đang thay đổi mật khẩu cho %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Mật khẩu cho %s chưa thay đổi.\n"
+
+#, c-format
+msgid "%s: password changed.\n"
+msgstr "%s: mật khẩu đã thay đổi.\n"
+
+#, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "%s: thông tin đã thay đổi về sự hết hạn sử dụng mật khẩu.\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Cách dùng: %s [các_tuỳ_chọn] [passwd]\n"
+"\n"
+"Tùy chọn:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Cách dùng: %s [các_tuỳ_chọn] [passwd [shadow]]\n"
+"\n"
+"Tùy chọn:\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr " -q, --quiet chỉ báo cáo lỗi\n"
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr ""
+"%s: không cho phép tập tin shadow thay thế khi mà biến USE_TCB được đặt.\n"
+
+msgid "invalid password file entry"
+msgstr "mục tin tập tin mật khẩu không hợp lệ"
+
+msgid "duplicate password entry"
+msgstr "mục tin mật khẩu trùng"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "tên người dùng không hợp lệ “%s”\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "mã số người dùng không hợp lệ “%lu”\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "người dùng “%s”: không có nhóm %lu\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "người dùng “%s”: thư mục “%s” không tồn tại\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "người dùng “%s”: chương trình “%s” không tồn tại\n"
+
+#, c-format
+msgid "no tcb directory for %s\n"
+msgstr "không có thư mục tcb cho %s\n"
+
+#, c-format
+msgid "create tcb directory for %s?"
+msgstr "tạo thư mục tcb %s không?"
+
+#, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "gặp lỗi khi tạo thư mục tcb cho %s\n"
+
+#, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s: không thể khóa %s.\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "không có mục tin tập tin mật khẩu tương ứng trong %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "thêm người dùng “%s” trong %s không?"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"người dùng %s có một mục tin trong %s, còn trường mật khẩu trong %s không "
+"phải được đặt thành “s”\n"
+
+msgid "invalid shadow password file entry"
+msgstr "mục tin tập tin mật khẩu shadow không hợp lệ"
+
+msgid "duplicate shadow password entry"
+msgstr "mục tin mật khẩu shadow trùng"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "người dùng %s: lần thay đổi mật khẩu cuối cùng nằm trong tương lai\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: không thể sắp xếp các mục tin trong %s\n"
+
+#, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s: không thể làm việc khi tcb được bật\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: không thay đổi được chế độ của %s thành 0600\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Truy cập “su” vào tài khoản đó BỊ TỪ CHỐI.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Xác thực mật khẩu bị đi vòng.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Hãy nhập mật khẩu của MÌNH để xác thực.\n"
+
+#, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s: Không thể rẽ nhánh tiến trình hệ vỏ người dùng\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr "%s: tín hiệu trục trặc\n"
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr "%s: trục trặc mặt nạ tín hiệu\n"
+
+msgid "Session terminated, terminating shell..."
+msgstr "Phiên làm việc đã kết thúc, nên kết thúc hệ vỏ…"
+
+#, c-format
+msgid " ...killed.\n"
+msgstr " …đã chết.\n"
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr " …đang đợi tiến con chấm dứt.\n"
+
+msgid " ...terminated.\n"
+msgstr " …đã chấm dứt.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: su [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
+#| " -h, --help display this help message and exit\n"
+#| " -, -l, --login make the shell a login shell\n"
+#| " -m, -p,\n"
+#| " --preserve-environment do not reset environment variables, and\n"
+#| " keep the same shell\n"
+#| " -s, --shell SHELL use SHELL instead of the default in "
+#| "passwd\n"
+#| "\n"
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"Cách dùng: su [tùy_chọn…] [đăng_nhập]\n"
+"\n"
+"[su: siêu người dùng]\n"
+"\n"
+"Tùy chọn:\n"
+" -c, --command LỆNH gửi lệnh này qua cho hệ vỏ đã gọi\n"
+" -h, --help hiển thị _trợ giúp_ này rồi thoát\n"
+" -, -l, --login lập hệ vỏ là hệ vỏ _đăng nhập_\n"
+" -m, -p,\n"
+" --preserve-environment đừng đặt lại các biến _môi trường_, và "
+"_giữ_\n"
+" hệ vỏ hiện có\n"
+" -s, --shell HỆ_VỎ dùng hệ vỏ này thay cho trình mặc định trong "
+"passwd\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Bị bỏ qua)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Bạn không có quyền sử dụng lệnh “su” (siêu người dùng) với %s.\n"
+
+msgid "(Enter your own password)"
+msgstr "(Nhập mật khẩu của mình)"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: lỗi xác thực\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr ""
+"%s: Bạn không có quyền sử dụng lệnh “su” (siêu người dùng) vào lúc đó\n"
+
+#, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "Không có mục tin mật khẩu cho tài khoản “%s”\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: phải chạy từ thiết bị cuối\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: (pam bắt đầu) lỗi %d\n"
+
+#, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s: Không thể xóa thiết bị cuối điều khiển\n"
+
+#, c-format
+msgid "Cannot execute %s\n"
+msgstr "Không thể thực thi %s\n"
+
+msgid "No password file"
+msgstr "Không có tập tin mật khẩu"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY bị lỗi"
+
+msgid "No password entry for 'root'"
+msgstr "Không có mục tin mật khẩu cho “root” (siêu quản trị)"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Hãy gõ tổ hợp phím Ctrl-D để tiếp tục khởi động bình thường,\n"
+"(hoặc nhập mật khẩu siêu quản trị để bảo dưỡng hệ thống):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Đang vào Chế độ Bảo dưỡng Hệ thống"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr "%s: %s đã được tạo, nhưng không thể bị gỡ bỏ\n"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr "%s: cấu hình %s trong %s sẽ bị bỏ qua\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s: không thể tạo tập tin mặc định mới\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: không thể tạo tập tin mặc định mới\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: không thể mở tập tin mặc định mới\n"
+
+#, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: dòng quá dài trong %s: %s…"
+
+#, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s: Không thể tạo tập tin sao lưu dự phòng (%s): %s\n"
+
+#, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s: thay tên: %s: %s\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: nhóm “%s” là nhóm kiểu NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: ghi rõ quá nhiều nhóm (tối đa %d).\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Cách dùng: %s [các_tuỳ_chọn] ĐĂNG_NHẬP\n"
+" %s -D\n"
+" %s -D [các-tùy-chọn]\n"
+"\n"
+"Tùy chọn:\n"
+
+#, fuzzy
+#| msgid " -s, --shadow edit shadow or gshadow database\n"
+msgid " --badnames do not check for bad names\n"
+msgstr ""
+" -s, --shadow sửa đổi cơ sở dữ liệu shadow hay gshadow\n"
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+" -b, --base-dir THƯ_MỤC đặt thư mục cơ bản cho thư mục riêng của tài "
+"khoản mới\n"
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr " -c, --comment GHI_CHÚ trường GECOS của tài khoản mới\n"
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr " -d, --home-dir THƯ_MỤC thư mục riêng của tài khoản mới\n"
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr ""
+" -D, --defaults in hay thay đổi cấu hình useradd mặc định\n"
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr " -e, --expiredate NGÀY ngày hết hạn sử dụng tài khoản mới\n"
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+" -f, --inactive KHOẢNG khoảng thời gian không hoạt động của tài "
+"khoản mới\n"
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr ""
+" -g, --gid NHÓM tên của mã số của nhóm chính của tài khoản "
+"mới\n"
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+" -G, --groups NHÓM danh sách các nhóm phụ của tài khoản mới\n"
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr " -k, --skel THƯ_MỤC dùng thư mục khung sườn thay thế\n"
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+" -l, --no-log-init đừng thêm người dùng vào các cơ sở \n"
+" dữ liệu faillog và lastlog\n"
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr " -m, --create-home tạo thư mục riêng của người dùng\n"
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr ""
+" -M, --no-create-home không tạo thư mục riêng của người dùng\n"
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr ""
+" -N, --no-user-group đừng tạo một nhóm cùng tên với người dùng\n"
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique cho phép tạo người dùng có UID trùng\n"
+" (không duy nhất)\n"
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr ""
+" -p, --password MẬT_KHẨU mật khẩu được mật mã của tài khoản mới\n"
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr " -s, --shell HỆ_VỎ hệ vỏ đăng nhập của tài khoản mới\n"
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr " -u, --uid UID mã số người dùng của tài khoản mới\n"
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr " -U, --user-group tạo một nhóm cùng tên với người dùng\n"
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+" -Z, --selinux-user SEUSER dùng một người dùng SE (SEUSER) riêng cho sự "
+"ánh xạ người dùng SELinux\n"
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: thư mục cơ sở không hợp lệ “%s”\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: ghi chú không hợp lệ “%s”\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: thư mục riêng không hợp lệ “%s”\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: cần mật khẩu shadow cho tùy chọn “-e”\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: cần mật khẩu shadow cho tùy chọn “-f”\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: trường không hợp lệ “%s”\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: hệ vỏ không hợp lệ “%s”\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Warning: %s is not executable\n"
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s: Cảnh báo: %s không có quyền thực thi\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Option -C cannot be used together with option -S\n"
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s: Tùy chọn -C không thể dùng cùng với -S\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr "%s: “-Z” yêu cầu hạt nhân bật tính năng hỗ trợ SELinux\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr "%s: không đặt lại được mục tin faillog của UID %lu: %s\n"
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr "%s: gặp lỗi khi đặt lại mục tin lastlog của UID %lu: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s: không đặt lại được mục tin faillog của UID %lu: %s\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s: gặp lỗi khi chuẩn bị %s mục tin mới\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error changing fields\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s: gặp lỗi khi thay đổi trường\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s: không thể tạo thư mục %s\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s home directory (%s) not found\n"
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s: %s không tìm thấy thư mục riêng (%s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to allocate memory: %s\n"
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "%s: gặp lỗi khi cấp phát bộ nhớ: %s\n"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: không thể tạo thư mục %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s: dòng %d: lỗi chown (thay đổi quyền sở hữu) %s: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s: dòng %d: lỗi chown (thay đổi quyền sở hữu) %s: %s\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "Đang tạo tập tin hộp thư"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Không tìm thấy nhóm “mail” (thư tín). Vì thế đang tạo tập tin hộp thư người "
+"dùng với chế độ 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Đang đặt quyền truy cập tập tin hộp thư"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: người dùng “%s” đã có\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr "%s: nhóm %s đã có. Muốn thêm họ vào nhóm đó thì dùng tùy chọn “-g”.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: không thể tạo người dùng\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %lu không phải duy nhất\n"
+
+#, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s: Gặp lỗi khi tạo thư mục tcb cho %s\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: không thể tạo nhóm\n"
+
+#, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s: không thể tạo mã số người dùng lệ thuộc\n"
+
+#, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s: không thể tạo mã nhóm phụ thuộc\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: cảnh báo: thư mục riêng đã có.\n"
+"Vì vậy không sao chép vào nó tập tin nào từ thư mục “skel”.\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+"%s: cảnh báo: lỗi ánh xạ tên người dùng %s tới người dùng SELinux %s.\n"
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr ""
+" -f, --force ép buộc gỡ bỏ tập tin, thậm chí nếu không\n"
+" được sở hữu bởi người dùng\n"
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr ""
+" -r, --remove gỡ bỏ thư mục riêng và ống chỉ thư tín\n"
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr ""
+" -Z, --selinux-user gỡ bỏ bất kỳ ánh xạ SELinux nào cho tài "
+"khoản người dùng\n"
+
+#, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr ""
+"%s: không gỡ bỏ nhóm %s bởi vì nó không phải là nhóm chính của người dùng "
+"“%s”.\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr "%s: không thể gỡ bỏ nhóm %s bởi vì nó có thành viên khác nữa.\n"
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: nhóm %s là nhóm chính của một người dùng khác thì không bị gỡ bỏ.\n"
+
+#, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "%s: không thể gỡ bỏ %lu mục tin khỏi %s\n"
+
+#, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s: không tìm thấy bể thư %s (%s)\n"
+
+#, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: cảnh báo: không thể gỡ bỏ %s: %s\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s không phải được %s sở hữu nên không gỡ bỏ nó\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr "%s: Không thể phân bổ bộ nhớ, mục tin tcb cho %s chưa được gỡ bỏ.\n"
+
+#, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s: Gặp lỗi khi xóa bỏ đặc quyền: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s: Không thể gỡ bỏ nội dung của %s: %s\n"
+
+#, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s: Không thể gỡ bỏ tập tin tcb cho %s: %s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: người dùng %s là người dùng kiểu NIS\n"
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: %s không tìm thấy thư mục riêng (%s)\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: sẽ không gỡ bỏ thư mục %s (vì cũng gỡ bỏ thư mục riêng của người dùng "
+"%s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s: gặp lỗi khi gỡ bỏ thư mục %s\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: gặp lỗi khi gỡ bỏ thư mục %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr "%s: cảnh báo: gặp lỗi khi gỡ bỏ ánh xạ người dùng %s tới SELinux.\n"
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr " -c, --comment GHI_LƯU giá trị mới của trường GECOS\n"
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr ""
+" -d, --home THƯ_MỤC thư mục riêng mới cho tài khoản người dùng\n"
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr ""
+" -e, --expiredate NGÀY đặt thành ngày này ngày hết hạn dùng tài "
+"khoản\n"
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -f, --inactive INACTIVE đặt thành INACTIVE mật khẩu không còn hoạt "
+"động lại\n"
+" sau khi hết hạn dùng\n"
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr ""
+" -g, --gid NHÓM ép buộc sử dụng nhóm này làm nhóm chính mới\n"
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr " -G, --groups NHÓM danh sách mới chứa các nhóm phụ\n"
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+" -a, --append thêm người dùng vào các nhóm phụ\n"
+" đưa ra bởi tùy chọn “-G” mà không gỡ bỏ ta "
+"khỏi nhóm khác\n"
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr " -l, --login ĐĂNG_NHẬP giá trị mới của tên đăng nhập\n"
+
+msgid " -L, --lock lock the user account\n"
+msgstr " -L, --lock khóa tài khoản người dùng\n"
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+" -m, --move-home di chuyển nội dung của thư mục riêng sang vị "
+"trí mới\n"
+" (chỉ dùng cùng với “-d”)\n"
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr ""
+" -o, --non-unique cho phép sử dụng UID trùng (không duy nhất)\n"
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr " -p, --password MẬT_KHẨU mật mã hóa mật khẩu mới\n"
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr " -u, --uid UID UID mới cho tài khoản người dùng\n"
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr " -U, --unlock mở khóa tài khoản người dùng\n"
+
+msgid " -v, --add-subuids FIRST-LAST add range of subordinate uids\n"
+msgstr " -v, --add-subuids ĐẦU-CUỐI thêm vùng mã người dùng lệ thuộc\n"
+
+msgid " -V, --del-subuids FIRST-LAST remove range of subordinate uids\n"
+msgstr " -V, --del-subuids ĐẦU-CUỐI xóa vùng mã người dùng lệ thuộc\n"
+
+msgid " -w, --add-subgids FIRST-LAST add range of subordinate gids\n"
+msgstr " -w, --add-subgids ĐẦU-CUỐI thêm vùng mã nhóm lệ thuộc\n"
+
+msgid " -W, --del-subgids FIRST-LAST remove range of subordinate gids\n"
+msgstr " -W, --del-subgids ĐẦU-CUỐI xóa vùng mã nhóm lệ thuộc\n"
+
+msgid ""
+" -Z, --selinux-user SEUSER new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+" -Z, --selinux-user SEUSER ánh xạ SELinux mới cho tài khoản người dùng\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: mở khóa mật khẩu của người dùng thì gây ra một tài khoản không có mật "
+"khẩu.\n"
+"Bạn nên đặt một mật khẩu dùng “usermod -p” để mở khóa mật khẩu của người "
+"dùng này.\n"
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: người dùng “%s” đã có trong %s\n"
+
+#, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s: vùng mã số người dùng lệ thuộc không hợp lệ “%s”\n"
+
+#, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s: vùng mã số nhóm lệ thuộc không hợp lệ “%s”\n"
+
+#, c-format
+msgid "%s: no options\n"
+msgstr "%s: không tùy chọn\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: các cờ “-L”, “-p” và “-U” loại từ lẫn nhau\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: mật khẩu shadow cần cho hai tùy chọn “-e” và “-f”\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: UID “%lu” đã có\n"
+
+#, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr "%s: %s không tồn tại, bạn không thể dùng cờ %s hay %s\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: thư mục %s đã có\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+"%s: Thư mục riêng trước đó (%s) không là một thư mục. Nó chưa được gỡ bỏ và "
+"chưa tạo thư mục riêng (home).\n"
+
+#, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s: Gặp lỗi khi thay đổi chủ sở hữu của thư mục home (riêng)"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: cảnh báo: gặp lỗi khi gỡ bỏ hoàn toàn thư mục riêng cũ %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: không thể thay đổi lại tên thư mục %s thành %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: gặp lỗi khi sao chép mục tin lastlog của người dùng %lu sang người dùng "
+"%lu: %s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: không sao chép được mục tin faillog của người dùng %lu sang người dùng "
+"%lu: %s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: cảnh báo: %s không do %s sở hữu\n"
+
+msgid "failed to change mailbox owner"
+msgstr "gặp lỗi khi đổi chủ sở hữu hộp thư"
+
+msgid "failed to rename mailbox"
+msgstr "gặp lỗi khi đổi tên của hộp thư"
+
+#, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%s: gặp lỗi khi xóa bỏ vùng mã người dùng %lu-%lu khỏi “%s”\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to add uid range %lu-%lu from '%s'\n"
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s: gặp lỗi khi thêm vùng mã người dùng %lu-%lu vào “%s”\n"
+
+#, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%s: gặp lỗi khi gỡ bỏ vùng mã số nhóm %lu-%lu khỏi “%s”\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to add gid range %lu-%lu from '%s'\n"
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s: gặp lỗi khi thêm vùng mã số nhóm %lu-%lu vào “%s”\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Bạn đã sửa đổi %s.\n"
+"Để thống nhất thì bạn cũng có thể cần sửa đổi %s.\n"
+"Hãy sử dụng câu lệnh “%s” để làm như thế.\n"
+
+msgid " -g, --group edit group database\n"
+msgstr " -g, --group sửa đổi cơ sở dữ liệu nhóm\n"
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr " -p, --passwd sửa đổi cơ sở dữ liệu passwd\n"
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr ""
+" -s, --shadow sửa đổi cơ sở dữ liệu shadow hay gshadow\n"
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr " -u, --user sửa tập tin shadow tcb của người này\n"
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: gặp lỗi khi gỡ bỏ %s\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: %s chưa thay đổi\n"
+
+msgid "failed to create scratch directory"
+msgstr "gặp lỗi khi tạo thư mục hỗn tạp"
+
+msgid "failed to drop privileges"
+msgstr "gặp lỗi khi xóa đặc quyền"
+
+msgid "Couldn't get file context"
+msgstr "Không thể lấy ngữ cảnh tập tin"
+
+msgid "setfscreatecon () failed"
+msgstr "setfscreatecon () bị lỗi"
+
+msgid "failed to gain privileges"
+msgstr "gặp lỗi khi cấp đặc quyền"
+
+msgid "Couldn't lock file"
+msgstr "Không thể khóa tập tin"
+
+msgid "Couldn't make backup"
+msgstr "Không thể sao lưu"
+
+#, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s: %s: %s\n"
+
+#, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr "%s: %s trả về với trạng thái là %d\n"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr "%s: %s bị giết bởi tín hiệu %d\n"
+
+msgid "failed to open scratch file"
+msgstr "gặp lỗi khi mở tập tin hỗn tạp"
+
+msgid "failed to unlink scratch file"
+msgstr "gặp lỗi khi bỏ liên kết tập tin hỗn tạp"
+
+msgid "failed to stat edited file"
+msgstr "gặp lỗi khi lấy thống kê tập tin đã sửa"
+
+msgid "failed to allocate memory"
+msgstr "gặp lỗi khi phân bổ bộ nhớ"
+
+msgid "failed to create backup file"
+msgstr "không thể tạo tập tin sao lưu dự phòng"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: không thể phục hồi %s: %s (các thay đổi của bạn nằm trong %s)\n"
+
+#, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s: gặp lỗi khi tìm thư mục tcb cho %s\n"
+
+#~ msgid " -c, --crypt-method the crypt method (one of %s)\n"
+#~ msgstr " -c, --crypt-method phương pháp mật mã (một của %s)\n"
+
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr ""
+#~ "Cách dùng: vipw [tuỳ_chọn …]\n"
+#~ "\n"
+#~ "Tùy chọn:\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "malloc(%d) (cấp phát bộ nhớ) bị lỗi\n"
+
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Cách dùng: chage [tuỳ_chọn …] [ĐĂNG_NHẬP]\n"
+#~ "\n"
+#~ "Tùy chọn:\n"
+#~ " -d, --lastday NGÀY_CUỐI đặt ngày thay đổi mật khẩu cuối cùng "
+#~ "thành ngày này\n"
+#~ " -E, --expiredate NGÀY_HẾT_HẠN đặt ngày hết hạn dùng tài khoản thành "
+#~ "ngày này\n"
+#~ " -h, --help \t\thiển thị trợ giúp này, sau đó thoát\n"
+#~ " -I, --inactive INACTIVE \tđặt mật khẩu không còn hoạt động lại "
+#~ "sau khi hết hạn dùng,\n"
+#~ "\t\t\t\t\t\tthành INACTIVE\n"
+#~ " -l, --list \t\t\thiển thị thông tin về khoảng thời "
+#~ "gian sử dụng tài khoản\n"
+#~ " -m, --mindays SỐ \t\tđặt thành số này số tối thiểu các ngày "
+#~ "trước khi thay đổi mật khẩu\n"
+#~ " -M, --maxdays SỐ\t\t\tđặt thành số này số tối đa các ngày trước khi "
+#~ "thay đổi mật khẩu\n"
+#~ " -W, --warndays SỐ \t\tđặt thành số này số các ngày gây ra cảnh báo "
+#~ "về hết hạn dùng\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s: lỗi xác thực PAM\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "Cách dùng: %s [-f họ_tên] [-r số_phòng] [-w điện_thoại_chỗ_làm]\n"
+#~ "\t[-h điện_thoại_ở_nhà] [-o khác] [người_dùng]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr ""
+#~ "Cách dùng: %s [-f họ_tên] [-r số_phòng] [-w điện_thoại_chỗ_làm]\n"
+#~ "\t[-h điện_thoại_ở_nhà]\n"
+
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Cách dùng: %s [tùy_chọn]\n"
+#~ "\n"
+#~ "Tùy chọn:\n"
+#~ " -c, --crypt-method phương pháp mã hóa (một của %s)\n"
+#~ " -e, --encrypted mã hóa mỗi mật khẩu đã cung cấp\n"
+#~ " -h, --help hiển thị trợ giúp này rồi thoát\n"
+#~ " -m, --md5 mã hóa mật khẩu nhập thô, dùng thuật toán MD5\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Cách dùng: chsh [tùy_chọn…] [ĐĂNG_NHẬP]\n"
+#~ "\n"
+#~ "Tùy chọn:\n"
+#~ " -h, --help hiện _trợ giúp_ này rồi thoát\n"
+#~ " -s, --shell TRÌNH_BAO hệ vỏ đăng nhập mới\n"
+#~ "\t\t\t\t\t\tcho tài khoản người dùng\n"
+#~ "\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr ""
+#~ "Cách dùng: expiry {-f|-c}\n"
+#~ "[expiry: mãn hạn]\n"
+
+#~ msgid "faillog: Failed to get the entry for UID %lu\n"
+#~ msgstr "faillog: không lấy được mục tin cho UID %lu\n"
+
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "faillog: không thể mở %s: %s\n"
+
+#~ msgid "faillog: Cannot get the size of %s: %s\n"
+#~ msgstr "faillog: không thể lấy kích cỡ của %s: %s\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr ""
+#~ "Cách dùng: groupdel nhóm\n"
+#~ "[groupdel: xóa nhóm]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "Cách dùng: %s [-r] [-s] [nhóm [gshadow]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "Cách dùng: %s [-r] [-s] [nhóm]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s: hai tùy chọn “-s” và “-r” không tương thích với nhau\n"
+
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "Cách dùng: grpconv\n"
+
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "Cách dùng: grpunconv\n"
+
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Cách dùng: lastlog [tùy_chọn…]\n"
+#~ "\n"
+#~ "[lastlog: bản ghi cuối cùng]\n"
+#~ "\n"
+#~ "Tùy chọn:\n"
+#~ " -b, --before SỐ hiển thị chỉ những bản ghi lastlog\n"
+#~ " cũ hơn số ngày này (_trước_)\n"
+#~ " -h, --help hiển thị _trợ giúp_ này rồi thoát\n"
+#~ " -t, --time SỐ hiển thị chỉ những mục ghi lastlog\n"
+#~ " mới hơn số ngày này (_thời gian_)\n"
+#~ " -u, --user ĐĂNG_NHẬP hiển thị mục ghi lastlog cho _người dùng_ tên "
+#~ "này\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Cách dùng: passwd [tuỳ_chọn …] [ĐĂNG_NHẬP]\n"
+#~ "\n"
+#~ "Tùy chọn:\n"
+#~ " -a, --all\t\t\tthông báo trạng thái mật khẩu về mọi tài khoản\n"
+#~ " -d, --delete \txóa mật khẩu cho tài khoản đặt tên\n"
+#~ " -e, --expire \tép buộc hết hạn dùng mật khẩu cho tài khoản đặt "
+#~ "tên\n"
+#~ " -h, --help \thiển thị trợ giúp này, sau đó thoát\n"
+#~ " -k, --keep-tokens\tthay đổi mật khẩu chỉ nếu bị hết hạn dùng\n"
+#~ " -i, --inactive INACTIVE\tđặt thành INACTIVE mật khẩu không còn hoạt "
+#~ "động lại\n"
+#~ "\t\t\t\t\tsau khi hết hạn dùng\n"
+#~ " -l, --lock \tkhóa mật khẩu của tài khoản đặt tên\n"
+#~ " -n, --mindays SỐ\tđặt thành số này số tối thiểu các ngày trước khi mật "
+#~ "khẩu thay đổi được\n"
+#~ " -q, --quiet \tchế độ không xuất chi tiết\n"
+#~ " -r, --repository KHO\t\tthay đổi mật khẩu trong kho lưu này\n"
+#~ " -S, --status \tthông báo trạng thái mật khẩu về tài khoản đặt "
+#~ "tên\n"
+#~ " -u, --unlock\t\tmở khóa mật khẩu của tài khoản đặt tên\n"
+#~ " -w, --warndays NGÀY\tđặt thành số này số các ngày cảnh báo về hết hạn "
+#~ "dùng\n"
+#~ " -x, --maxdays NGÀY\tđặt thành số này số tối đa các ngày trước khi thay "
+#~ "đổi được mật khẩu\n"
+#~ "\n"
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
new file mode 100644
index 0000000..5fa7107
--- /dev/null
+++ b/po/zh_CN.gmo
Binary files differ
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644
index 0000000..a59a2ac
--- /dev/null
+++ b/po/zh_CN.po
@@ -0,0 +1,3736 @@
+# Simplified Chinese translation to shadow
+# This file is distributed under the same license as the shadow package.
+# Copyright:
+# Ming Hua <minghua@ubuntu.com>, 2005,2006,2007.
+# Carlos Z.F. Liu <carlosliu@users.sourceforge.net>, 2004,2006.
+# YunQiang Su <wzssyqa@gmail.com>, 2010, 2012.
+# Daming Yang <lion@aosc.io>, 2018.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.15\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2018-06-16 18:17+0800\n"
+"Last-Translator: Daming Yang <lion@aosc.io>\n"
+"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 2.0.8\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr "多个名为“%s”的条目同时存在于 %s 中,请使用 pwck 或 grpck 来修复。\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "libcrypt 不支持此加密方法?(%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr "配置错误 - 无法解析 %s 值:“%s”"
+
+msgid "Could not allocate space for config info.\n"
+msgstr "无法为配置信息分配空间。\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "配置错误 - 未知项目“%s”(请通知管理员)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr "%s:nscd 异常结束 (信号 %d)\n"
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr "%s:nscd 以状态 %d 退出\n"
+
+msgid "Password: "
+msgstr "密码:"
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s 的密码:"
+
+#, fuzzy
+#| msgid "Cannot open audit interface - aborting.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "无法打开审计接口 - 退出。\n"
+
+#, c-format
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr ""
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr "[libsemanage]:%s\n"
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr "无法创建 SELinux 管理句柄\n"
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr "SELinux 策略未被托管\n"
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr "无法读取 SELinux 策略存储\n"
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr "无法建立 SELinux 管理连接\n"
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr "无法开始 SELinux 事务\n"
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr "无法为 %s 查询 seuser\n"
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr "无法为 %s 设置 serange\n"
+
+#, c-format
+msgid "Could not set sename for %s\n"
+msgstr "无法为 %s 设置 sename\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr "无法为 %s 修改登录映射\n"
+
+#, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "无法为 %s 创建登录映射\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr "无法为 %s 设置名称\n"
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr "无法为 %s 设置 SELinux 用户\n"
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr "无法为 %s 添加登录映射\n"
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr "无法初始化 SELinux 管理\n"
+
+#, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "无法创建 SELinux 用户密钥\n"
+
+#, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "无法验证 SELinux 用户\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr "无法修改 SELinux 用户映射\n"
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr "无法添加 SELinux 用户映射\n"
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr "无法提交 SELinux 事务\n"
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr "未定义 %s 的登录映射,使用默认映射时这是正常的\n"
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr "在策略中定义了 %s 的登录映射,无法被删除\n"
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr "无法删除 %s 的登录映射"
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s:内存溢出\n"
+
+#, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s:无法获取文件 %s 的信息:%s\n"
+
+#, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s:%s 既不是目录也不是符号链接。\n"
+
+#, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s:无法读取符号链接 %s:%s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr "%s:可疑的长符合链接:%s\n"
+
+#, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s:无法创建目录 %s:%s\n"
+
+#, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s:无法更改 %s 的属主:%s\n"
+
+#, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s:无法更改 %s 的模式:%s\n"
+
+#, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s:删除(unlink):%s:%s\n"
+
+#, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s:无法删除目录 %s:%s\n"
+
+#, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s:无法将目录 %s 改名为 %s:%s\n"
+
+#, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s:无法删除 %s:%s\n"
+
+#, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s:无法创建符号链接 %s:%s\n"
+
+#, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s:无法更改 %s 的属主:%s\n"
+
+#, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s:无法获取符号链接 %s 的信息(lstat):%s\n"
+
+#, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s:警告,用户 %s 没有 tcb 影子文件。\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+"%s:紧急:%s 的 tcb 影子不是一个 st_nlink=1 的普通文件。\n"
+"已锁定该帐号。\n"
+
+#, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s:创建目录:%s:%s\n"
+
+#, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s:无法打开 %s:%s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "警告:未知组 %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "警告:用户组过多\n"
+
+msgid "Your password has expired."
+msgstr "您的密码已过期。"
+
+msgid "Your password is inactive."
+msgstr "您的密码已失效。"
+
+msgid "Your login has expired."
+msgstr "您的帐户已过期。"
+
+msgid " Contact the system administrator."
+msgstr " 请与系统管理员联系。"
+
+msgid " Choose a new password."
+msgstr " 请选择一个新密码。"
+
+msgid "You must change your password."
+msgstr "您必须更改自己的密码。"
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "您的密码将在 %ld 天内过期。\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "您的密码将在明天过期。"
+
+msgid "Your password will expire today."
+msgstr "您的密码今天过期。"
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "无法打开审计接口 - 退出。\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "不能改变 tty 标准输入的属主或模式:%s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s:解锁 %s 失败\n"
+
+#, c-format
+msgid "%s: "
+msgstr "%s:"
+
+msgid ": "
+msgstr ":"
+
+msgid "Environment overflow\n"
+msgstr "环境溢出\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "您不应该改变 $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"自上一次登录以来已有 %d 次登录失败。\n"
+"最后一次是 %s 在 %s 上。\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr "%s:无效的配置:SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr "%s:无效的配置:GID_MIN (%lu), GID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "%s:申请内存失败:%s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr "%s:无法获取唯一的系统 GID (没有更多可用的 GID 了)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s:无法获取唯一的 GID (没有更多可用的 GID 了)\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s:无法获取唯一的 GID (没有更多可用的 GID 了)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr "%s:无效的配置:SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX (%lu)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't find subordinate user range\n"
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s:找不到子用户范围\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr "%s:无效的配置:SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX (%lu)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't find subordinate user range\n"
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s:找不到子用户范围\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr "%s:无效的配置:SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr "%s:无效的配置:UID_MIN (%lu), UID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr "%s:无法获取唯一的系统 UID (没有更多可用的 UID 了)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s:无法获取唯一的 UID (没有更多可用的 UID 了)\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s:无法获取唯一的 UID (没有更多可用的 UID 了)\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Authentication failure\n"
+msgid "%s: Memory allocation failure\n"
+msgstr "%s:验证失败\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s:无效的字段“%s”\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Could not set name for %s\n"
+msgid "%s: Could not seteuid to %d\n"
+msgstr "无法为 %s 设置名称\n"
+
+#, fuzzy, c-format
+#| msgid "Could not set name for %s\n"
+msgid "%s: Could not set caps\n"
+msgstr "无法为 %s 设置名称\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't open file\n"
+msgid "%s: snprintf failed!\n"
+msgstr "%s:无法打开文件\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s:第 %d 行:改变 %s 的属主失败:%s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s:第 %d 行:改变 %s 的属主失败:%s\n"
+
+msgid "Too many logins.\n"
+msgstr "当前登录数量过多。\n"
+
+msgid "You have new mail."
+msgstr "您有新信件。"
+
+msgid "No mail."
+msgstr "无信件。"
+
+msgid "You have mail."
+msgstr "您有信件。"
+
+msgid "no change"
+msgstr "没有改变"
+
+msgid "a palindrome"
+msgstr "一个回文词"
+
+msgid "case changes only"
+msgstr "仅有大小写改动"
+
+msgid "too similar"
+msgstr "太相似"
+
+msgid "too simple"
+msgstr "太简单"
+
+msgid "rotated"
+msgstr "已轮转"
+
+msgid "too short"
+msgstr "太短"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "错误的密码:%s。 "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd:pam_start() 失败,错误 %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd:%s\n"
+
+msgid "passwd: password unchanged\n"
+msgstr "passwd:密码未更改\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd:已成功更新密码\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s:不支持 %s 存储。\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s:pam_start:错误 %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd:pam_start() 失败,错误 %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "%s 的密码不正确。\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr "%s:有多个 --root 选项\n"
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr "%s:选项“%s”需要一个选项\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s:放弃特权时失败 (%s)\n"
+
+#, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s:无效的 chroot 路径“%s”\n"
+
+#, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s:无法访问 chroot 目录 %s:%s\n"
+
+#, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s:无法进入 chroot 目录 %s:%s\n"
+
+#, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s:无法 chroot 到目录 %s:%s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"无效的 ENCRYPT_METHOD 值:“%s”。\n"
+"默认为 DES。\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "无法 cd 进入“%s”\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "没有目录,将以 HOME=/ 登录"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "无法执行 %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "无效的根目录“%s”\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "无法将根目录改变为“%s”\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s:用户 %s 目前已登录\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s:用户 %s 目前已登录\n"
+
+msgid "Unable to determine your tty name."
+msgstr "无法确定您的 tty 终端名。"
+
+msgid "No"
+msgstr "否"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+"用法:%s [选项] 登录名\n"
+"\n"
+"选项:\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr " -d, --lastday 最近日期 将最近一次密码设置时间设为“最近日期”\n"
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr " -E, --expiredate 过期日期 将帐户过期时间设为“过期日期”\n"
+
+msgid " -h, --help display this help message and exit\n"
+msgstr " -h, --help 显示此帮助信息并退出\n"
+
+#, fuzzy
+#| msgid " -g, --group edit group database\n"
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr " -g, --group 编辑 group 数据库\n"
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -I, --inactive INACITVE 过期 INACTIVE 天数后,设定密码为失效状态\n"
+
+msgid " -l, --list show account aging information\n"
+msgstr " -l, --list 显示帐户年龄信息\n"
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -m, --mindays 最小天数 将两次改变密码之间相距的最小天数设为“最小天"
+"数”\n"
+
+#, fuzzy
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -M, --maxdays 最大天数 将两次改变密码之间相距的最大天数设为“最大天"
+"数”\n"
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr " -R, --root CHROOT_DIR chroot 到的目录\n"
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr " -W, --warndays 警告天数 将过期警告天数设为“警告天数”\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "请输入新值,或直接敲回车键以使用默认值"
+
+msgid "Minimum Password Age"
+msgstr "最小密码年龄"
+
+msgid "Maximum Password Age"
+msgstr "最大密码年龄"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "最近一次密码修改时间 (YYYY-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "密码过期警告"
+
+msgid "Password Inactive"
+msgstr "密码失效"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "帐户过期时间 (YYYY-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "最近一次密码修改时间\t\t\t\t\t:"
+
+msgid "never"
+msgstr "从不"
+
+msgid "password must be changed"
+msgstr "密码必须更改"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "密码过期时间\t\t\t\t\t:"
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "密码失效时间\t\t\t\t\t:"
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "帐户过期时间\t\t\t\t\t\t:"
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "两次改变密码之间相距的最小天数\t\t:%ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "两次改变密码之间相距的最大天数\t\t:%ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "在密码过期之前警告的天数\t:%ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s:无效的日期“%s”\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s:无效的数字参数“%s”\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s:请不要将“l”与其它标志一同使用\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s:没有权限。\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s:无法确定您的用户名。\n"
+
+#, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s:PAM:%s\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s:无法锁定 %s,请稍后再试。\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s:无法打开 %s\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s:将更改写入 %s 时失败\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s:准备新 %s 条目“%s”失败\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s:影子密码文件不存在\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s:用户“%s”不存在于 %s 中\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "正在为 %s 修改年龄信息\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s:改变字段时出错\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"用法:%s [选项] [登录名]\n"
+"\n"
+"选项:\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr " -f, --full-name FULL_NAME 更改用户的全名\n"
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr " -h, --home-phone HOME_PHONE 更改用户的家庭电话号码\n"
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr " -o, --other OTHER_INFO 更改用户的其它 GECOS 信息\n"
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr " -r, --room ROOM_NUMBER 更改用户的房间号\n"
+
+msgid " -u, --help display this help message and exit\n"
+msgstr " -u, --help 显示此帮助信息并退出\n"
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr " -w, --work-phone WORK_PHONE 更改用户的办公室电话号码\n"
+
+msgid "Full Name"
+msgstr "全名"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s:%s\n"
+
+msgid "Room Number"
+msgstr "房间号码"
+
+msgid "Work Phone"
+msgstr "工作电话"
+
+msgid "Home Phone"
+msgstr "家庭电话"
+
+msgid "Other"
+msgstr "其它"
+
+msgid "Cannot change ID to root.\n"
+msgstr "无法将 ID 改为 root。\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s:名称中有非 ASCII 字符:“%s”\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s:无效的名称:“%s”\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s:房间名包含非 ASCII 字符:“%s”\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s:无效的房间号码:“%s”\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s:无效的工作电话:“%s”\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s:无效的家庭电话:“%s”\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s:“%s”包含非 ASCII 字符\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s:“%s”包含非法字符\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s:用户“%s”不存在\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s:不能在 NIS 客户端上修改用户“%s”。\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s:“%s”是此客户端的 NIS 管理员。\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "正在改变 %s 的用户信息\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s:字段太长\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"用法:%s [选项]\n"
+"\n"
+"选项:\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr " -c, --crypt-method METHOD 加密方法(%s 中的一个)\n"
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr " -e, --encrypted 提供的密码已经加密\n"
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr " -m, --md5 使用 MD5 算法加密明文密码\n"
+
+#, fuzzy
+#| msgid ""
+#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
+#| " crypt algorithms\n"
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr " -s, --sha-rounds 使用 SHA* 加密算法的轮数\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s:%s 标记只能和 %s 标记一起使用\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s:-c、-e 和 -m 选项互斥\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s:不支持的加密方法:%s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s:第 %d 行:此行太长\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s:第 %d 行:缺少新密码\n"
+
+#, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%s:使用盐“%s”对密码加密失败:%s\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s:第 %d 行:组“%s”不存在\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s:第 %d 行:准备新 %s 条目“%s”失败\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s:发现错误,忽略改动\n"
+
+#, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s:(第 %d 行,用户 %s) 密码未更改\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s:第 %d 行:用户“%s”不存在\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr " -s, --shell SHELL 该用户帐号的新登录 shell\n"
+
+msgid "Login Shell"
+msgstr "登录 Shell"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "您不能为“%s”更改 shell。\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "正在更改 %s 的 shell\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s:无效的条目:%s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s:%s 是无效的 shell\n"
+
+#, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s:警告:%s 不存在\n"
+
+#, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s:警告:%s 不可执行\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr " -c, --check 检查用户密码是否过期\n"
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr " -f, --force 如果用户密码过期,则强制要求更改密码\n"
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s:选项 %s 和 %s 冲突\n"
+
+#, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "%s:意外的参数:%s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr " -a, --all 为所有用户显示登录失败记录\n"
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr " -l, --lock-secs SEC 登录失败后临时锁定账户 %s 秒\n"
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr " -m, --maximum MAX 将最大登录失败计数设置为 MAX\n"
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr " -r, --reset 重置登录失败计数\n"
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr " -t, --time DAYS 显示 DAYS 天来的登录失败记录\n"
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+" -u, --user LOGIN/RANGE 只显示指定用户(或用户范围)的登录失败记录、\n"
+" 维护故障计数或用户限制(对应 -r, -m 或 -l)\n"
+
+#, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s:获取 UID %lu 的条目失败\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "登录 失败次数 最多 最近 于\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr " [还剩 %lu 秒]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [锁定 %ld 秒]"
+
+#, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s:为 UID %lu 重置失败计数失败\n"
+
+#, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s:为 UID %lu 设置最大值失败\n"
+
+#, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s:为 UID %lu 设置锁定时间失败\n"
+
+#, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "%s:未知用户或范围:%s\n"
+
+#, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s:无法获得 %s 的大小:%s\n"
+
+#, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s:写入 %s 失败:%s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"用法:%s [选项] 组\n"
+"\n"
+"选项:\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr " -a, --add USER 向组 GROUP 中添加用户 USER\n"
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr " -d, --delete USER 从组 GROUP 中添加或删除用户\n"
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr " -Q, --root CHROOT_DIR 要 chroot 进的目录\n"
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr " -r, --remove-password 移除组 GROUP 的密码\n"
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr " -R, --restrict 向其成员限制访问组 GROUP\n"
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr " -M, --members USER,... 设置组 GROUP 的成员列表\n"
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+" -A, --administrators ADMIN,...\n"
+" 设置组的管理员列表\n"
+
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "除非使用 -A 或 -M 选项,不能结合使用这些选项。\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "选项不能结合。\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s:-A 需要影子组密码\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s:%s 组不存在于 %s 中\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s:关闭只读 %s 时失败\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "正在修改 %s 组的密码\n"
+
+msgid "New Password: "
+msgstr "新密码:"
+
+msgid "Re-enter new password: "
+msgstr "请重新输入新密码:"
+
+msgid "They don't match; try again"
+msgstr "他们并不匹配;请重试"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s:请稍后重试\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "正在将用户“%s”加入到“%s”组中\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "正在将用户“%s”从“%s”组中删除\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s:用户“%s”不是“%s”的成员\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s:不是 tty\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"用法:%s [选项] 组\n"
+"\n"
+"选项:\n"
+
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+" -f, --force 如果组已经存在则成功退出\n"
+" 并且如果 GID 已被使用则取消 -g\n"
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr " -g, --gid GID 为新组使用 GID\n"
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr " -K, --key KEY=VALUE 不使用 /etc/login.defs 中的默认值\n"
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr " -o, --non-unique 允许创建有重复 GID 的组\n"
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr " -p, --password PASSWORD 为新组使用此加密过的密码\n"
+
+msgid " -r, --system create a system account\n"
+msgstr " -r, --system 创建一个系统账户\n"
+
+#, fuzzy
+#| msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr " -R, --root CHROOT_DIR chroot 到的目录\n"
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s:“%s”不是有效的组名\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s:无效的组 ID “%s”\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s:-K 需要 KEY=VALUE\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s:“%s”组已存在\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s:GID “%lu”已经存在\n"
+
+#, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s:无法设置清理服务。\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr ""
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr " -f, --force 即便是用户的主组也继续删除\n"
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%1$s:无法从 %3$s 中移除“%2$s”\n"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s:不能移除用户“%s”的主组\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s:“%s”组不存在\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s:“%s”组是一个 NIS 组。\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s:%s 是 NIS 管理员\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s:用户“%s”已经是“%s”的成员\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s:超出内存。不能更新 %s。\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"用法:%s [选项] [动作]\n"
+"\n"
+"选项:\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+" -g, --group groupname 更改组 groupname,而不是用户的组(仅限 root)\n"
+
+msgid "\n"
+msgstr "\n"
+
+msgid "Actions:\n"
+msgstr "动作:\n"
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr " -a, --add username 将用户 username 添加到组成员中\n"
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr " -d, --delete username 从组的成员中删除用户 username\n"
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr " -p, --purge 从组中移除所有成员\n"
+
+msgid " -l, --list list the members of the group\n"
+msgstr " -l, --list 列出组中的所有成员\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s:您的组名和用户名不匹配\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s:只有 root 才可以使用 -g/--group 选项\n"
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr " -g, --gid GID 将组 ID 改为 GID\n"
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr " -n, --new-name NEW_GROUP 改名为 NEW_GROUP\n"
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr " -o, --non-unique 允许使用重复的 GID\n"
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr " -p, --password PASSWORD 将密码更改为(加密过的) PASSWORD\n"
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s:无效的组名“%s”\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s:%s 组是一个 NIS 组\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s:未知用户 %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"用法:%s [选项] [组 [gshadow]]\n"
+"\n"
+"选项:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"用法:%s [选项] [组]\n"
+"\n"
+"选项:\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr " -r, --read-only 显示错误和警告,但不改变文件\n"
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr " -s, --sort 通过 UID 排序项目\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s:-s 与 -r 不兼容\n"
+
+msgid "invalid group file entry"
+msgstr "无效的组文件条目"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "删除“%s”一行?"
+
+msgid "duplicate group entry"
+msgstr "重复的组条目"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "无效的组名“%s”\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "无效的组 ID “%lu”\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "%s 组:无用户 %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "删除成员“%s”吗?"
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "在 %s 中没有找到匹配的组文件条目\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "将组“%s”添加到 %s?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr "组 %s 在 %s 中有一个条目,但是 %s 中它的密码字段不是“x”\n"
+
+msgid "invalid shadow group file entry"
+msgstr "无效的影子组文件条目"
+
+msgid "duplicate shadow group entry"
+msgstr "重复的组影子条目"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "%s 影子组:无管理员用户 %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "删除有管理权限的成员“%s”吗?"
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "%s 影子组:无用户 %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s:文件已更新\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s:无改变\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s:无法删除 %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "用法:id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "用法:id\n"
+
+msgid " groups="
+msgstr " 组="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr " -b, --before DAYS 仅打印早于 DAYS 的最近登录记录\n"
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+" -C, --clear 清除一个用户的最近登录记录(须配合 -u 使用)\n"
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+" -S, --set 设置最近登录记录为当前时间(须配合 -u 使用)\n"
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr " -t, --time DAYS 仅打印晚于 DAYS 的最近登录记录\n"
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr " -u, --user LOGIN 打印 LOGIN 用户的最近登录记录\n"
+
+msgid "Username Port From Latest"
+msgstr "用户名 端口 来自 最后登录时间"
+
+msgid "Username Port Latest"
+msgstr "用户名 端口 最后登录时间"
+
+msgid "**Never logged in**"
+msgstr "**从未登录过**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s:更新 UID %lu 的条目失败\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s:无法更新登录记录文件\n"
+
+#, c-format
+msgid "%s: Option -C cannot be used together with option -S\n"
+msgstr "%s:选项 -C 不能与 -S 选项一起使用\n"
+
+#, c-format
+msgid "%s: Options -C and -S require option -u to specify the user\n"
+msgstr "%s:-C 和 -S 选项需要配合使用 -u 指定用户\n"
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "用法:%s [-p] [名称]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h 主机] [-f 名称]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r 主机\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr "配置出错 - 无法解析 %s 值:“%d”"
+
+msgid "Invalid login time"
+msgstr "无效的登录时间"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"系统关闭,例行维护"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[忽略断线要求 -- 允许 root 登录。]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr "%s:必须持有效 root 身份才能工作\n"
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr "没有 utmp 条目。您必须在最底层的“sh”里执行“login”"
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"%u 秒后登录超时。\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login:PAM 错误,正在退出:%s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s 用户名:"
+
+msgid "login: "
+msgstr "用户名:"
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "已经超过最大尝试次数 (%u)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login:PAM 请求中止\n"
+
+msgid "Login incorrect"
+msgstr "登录错误"
+
+#, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "无法找到用户 (%s)\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s 用户名:"
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s:fork 失败:%s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "%s 上 TIOCSCTTY 失败"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "警告:将在暂时锁定一段时间后恢复登录。"
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "上次登录:%s 在 %s 上"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "上次登录:%.19s 在 %s 上"
+
+#, c-format
+msgid " from %.*s"
+msgstr " 来自 %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"登录超时\n"
+"\n"
+
+msgid "Usage: logoutd\n"
+msgstr "用法:logoutd\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: can't open group file\n"
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr "%s:无法打开组文件\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s:移除 %s 失败\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s:移除 %s 失败\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to unlock %s\n"
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s:解锁 %s 失败\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to find tcb directory for %s\n"
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s:无法为“%s”找到 tcb 目录\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Failed to create tcb directory for %s\n"
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s:为 %s 创建 tcb 目录失败\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "用法:newgrp [-] [组]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "用法:sg 组 [[-c] 命令]\n"
+
+#, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s:使用之前的盐对密码加密失败:%s\n"
+
+msgid "Invalid password.\n"
+msgstr "无效的密码。\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s:fork 失败:%s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s:GID“%lu”不存在\n"
+
+msgid "too many groups\n"
+msgstr "用户组过多\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+#, fuzzy
+#| msgid " -q, --quiet quiet mode\n"
+msgid " -b, --badnames allow bad names\n"
+msgstr " -q, --quiet 安静模式\n"
+
+msgid " -r, --system create system accounts\n"
+msgstr " -r, --system 创建系统帐号\n"
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s:“%s”组是影子组,但是不存在于 /etc/group\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s:无效的用户 ID“%s”\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s:无效的用户名“%s”\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s:第 %d 行:无效行\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s:不能更新用户 %s 的条目 (不存在于 passwd 数据库)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s:第 %d 行:无法创建用户\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s:第 %d 行:无法创建组\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s:第 %d 行:用户“%s”不存在于 %s 中\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s:第 %d 行:无法更新密码\n"
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s:第 %d 行:创建目录 %s 失败:%s\n"
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s:第 %d 行:改变 %s 的属主失败:%s\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s:第 %d 行:无法更新条目\n"
+
+#, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s:准备新 %s 条目失败\n"
+
+#, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s:找不到子用户范围\n"
+
+#, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s:找不到子用户组范围\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr " -a, --all 报告所有帐户的密码状态\n"
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr " -d, --delete 删除指定帐户的密码\n"
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr " -e, --expire 强制使指定帐户的密码过期\n"
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr " -k, --keep-tokens 仅在过期后修改密码\n"
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr " -i, --inactive INACTIVE 密码过期后设置密码不活动为 INACTIVE\n"
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr " -l, --lock 锁定指定的帐户\n"
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+" -n, --mindays MIN_DAYS 设置到下次修改密码所须等待的最短天数\n"
+" 为 MIN_DAYS\n"
+
+msgid " -q, --quiet quiet mode\n"
+msgstr " -q, --quiet 安静模式\n"
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr " -r, --repository REPOSITORY 在 REPOSITORY 库中改变密码\n"
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr " -S, --status 报告指定帐户密码的状态\n"
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr " -u, --unlock 解锁被指定帐户\n"
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr " -w, --warndays WARN_DAYS 设置过期警告天数为 WARN_DAYS\n"
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+" -x, --maxdays MAX_DAYS 设置到下次修改密码所须等待的最多天数\n"
+" 为 MAX_DAYS\n"
+
+msgid "Old password: "
+msgstr "旧密码:"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"请输入新密码(最少 %d 个字符)\n"
+"请混合使用大小写字母和数字。\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"请输入新密码(最少 %d 最多 %d 个字符)\n"
+"请混合使用大小写字母和数字。\n"
+
+msgid "New password: "
+msgstr "新密码:"
+
+msgid "Try again."
+msgstr "重试。"
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"警告:脆弱的密码(重新输入以强制使用它)。"
+
+msgid "They don't match; try again.\n"
+msgstr "它们并不匹配;请重试。\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "无法更改 %s 的密码。\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "尚无法更改 %s 的密码。\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s:解锁密码将产生一个没有密码的账户。\n"
+"您应该使用 usermod -p 来为此账户设置密码并解锁。\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s:不支持 %s 存储。\n"
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not authorized to change the password of %s\n"
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr "%s:%s 没有被授权更改 %s 的密码\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s:您不能查看或更改 %s 的密码信息。\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "正在为 %s 修改密码\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "%s 的密码未被改变。\n"
+
+#, c-format
+msgid "%s: password changed.\n"
+msgstr "%s:密码已更改。\n"
+
+#, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "%s:密码过期信息已更改。\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"用法:%s [选项] [passwd]\n"
+"\n"
+"选项:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"用法:%s [选项] [passwd [shadow]]\n"
+"\n"
+"选项:\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr " -q, --quiet 只报告错误\n"
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr "%s:USE_TCB 启用时没有允许的替代影子文件。\n"
+
+msgid "invalid password file entry"
+msgstr "无效的密码文件项"
+
+msgid "duplicate password entry"
+msgstr "重复的用户条目"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "无效的用户名“%s”\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "无效的用户 ID“%lu”\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "用户“%s”:无 %lu 组\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "用户“%s”:目录 %s 不存在\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "用户“%s”:程序 %s 不存在\n"
+
+#, c-format
+msgid "no tcb directory for %s\n"
+msgstr "没有 %s 的 tcb 目录\n"
+
+#, c-format
+msgid "create tcb directory for %s?"
+msgstr "为 %s 创建 tcb 文件夹?"
+
+#, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "为 %s 创建 tcb 目录失败\n"
+
+#, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s:无法锁定 %s。\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "在 %s 中没有匹配的密码文件项\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "在 %s 中添加用户“%s”?"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr "用户 %s 在 %s 中有一个条目,但是它在 %s 中的密码字段没有设置为“x”\n"
+
+msgid "invalid shadow password file entry"
+msgstr "无效的影子密码文件项"
+
+msgid "duplicate shadow password entry"
+msgstr "重复的用户影子条目"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "用户 %s:未来最近的密码改动\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s:无法排序 %s 中的条目\n"
+
+#, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s:不能与 tcb 配合使用\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s:将 %s 的模式更改为 0600 失败\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "su 到该帐户被拒。\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "忽略密码认证\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "请输入您“自己”的密码作为验证。\n"
+
+#, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s:无法 fork 用户 shell\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr "%s:信号故障\n"
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr "%s:信号屏蔽(mask)故障\n"
+
+msgid "Session terminated, terminating shell..."
+msgstr "会话结束,结束 shell ..."
+
+#, c-format
+msgid " ...killed.\n"
+msgstr " ...已被杀死。\n"
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr " ...等待子进程结束。\n"
+
+msgid " ...terminated.\n"
+msgstr " ...已结束。\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s:%s\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: su [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
+#| " -h, --help display this help message and exit\n"
+#| " -, -l, --login make the shell a login shell\n"
+#| " -m, -p,\n"
+#| " --preserve-environment do not reset environment variables, and\n"
+#| " keep the same shell\n"
+#| " -s, --shell SHELL use SHELL instead of the default in "
+#| "passwd\n"
+#| "\n"
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"用法:su [选项] [登录名]\n"
+"\n"
+"选项:\n"
+" -c, --command COMMAND 将 COMMAND 传递至启动的 shell\n"
+" -h, --help 显示此帮助信息并退出\n"
+" -, -l, --login 将 shell 设为登录 shell\n"
+" -m, -p,\n"
+" --preserve-environment 不重置环境变量并保持同一 shell\n"
+" -s, --shell SHELL 使用 SHELL 而非 passwd 中的默认值\n"
+"\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s:%s\n"
+"(忽略)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "您没有被授权 su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(请输入您自己的密码)"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s:验证失败\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s:那时,您没有被授权 su\n"
+
+#, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "没有用户“%s”的密码项\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s:必须从终端中执行\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s:pam_start:错误 %d\n"
+
+#, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s:无法放弃控制终端\n"
+
+#, c-format
+msgid "Cannot execute %s\n"
+msgstr "无法执行 %s\n"
+
+msgid "No password file"
+msgstr "没有密码文件"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY 失败"
+
+msgid "No password entry for 'root'"
+msgstr "没有“root”的密码项"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"敲击 control-d 继续使用普通帐户环境,\n"
+"(或者输入 root 密码以进行系统维护):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "正在进入系统维护模式"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr "%s:%s 已经创建,但是不能删除\n"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr "%s:%s 配置(位于 %s) 将被忽略\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create new defaults file\n"
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s:无法创建新的默认文件\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s:无法创建新的默认文件\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s:无法打开新的默认文件\n"
+
+#, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s:%s 中行太长:%s..."
+
+#, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s:无法创建备份文件(%s):%s\n"
+
+#, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s:改名:%s:%s\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s:“%s”组是一个 NIS 组。\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s:指定了过多组(最多 %d)。\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"用法:%s [选项] 登录名\n"
+" %s -D\n"
+" %s -D [选项]\n"
+"\n"
+"选项:\n"
+
+#, fuzzy
+#| msgid " -s, --shadow edit shadow or gshadow database\n"
+msgid " --badnames do not check for bad names\n"
+msgstr " -s, --shadow 编辑 shadow 或 gshadow 数据库\n"
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr " -b, --base-dir BASE_DIR 新账户的主目录的基目录\n"
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr ""
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr " -c, --comment COMMENT 新账户的 GECOS 字段\n"
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr " -d, --home-dir HOME_DIR 新账户的主目录\n"
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr " -D, --defaults 显示或更改默认的 useradd 配置\n"
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr " -e, --expiredate EXPIRE_DATE 新账户的过期日期\n"
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr " -f, --inactive INACTIVE 新账户的密码不活动期\n"
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr " -g, --gid GROUP 新账户主组的名称或 ID\n"
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr " -G, --groups GROUPS 新账户的附加组列表\n"
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr " -k, --skel SKEL_DIR 使用此目录作为骨架目录\n"
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+" -l, --no-log-init 不要将此用户添加到最近登录和登录失败数据库\n"
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr " -m, --create-home 创建用户的主目录\n"
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr " -M, --no-create-home 不创建用户的主目录\n"
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr " -N, --no-user-group 不创建同名的组\n"
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr " -o, --non-unique 允许使用重复的 UID 创建用户\n"
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr " -p, --password PASSWORD 加密后的新账户密码\n"
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr " -s, --shell SHELL 新账户的登录 shell\n"
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr " -u, --uid UID 新账户的用户 ID\n"
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr " -U, --user-group 创建与用户同名的组\n"
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr " -Z, --selinux-user SEUSER 为 SELinux 用户映射使用指定 SEUSER\n"
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s:无效的基目录“%s”\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s:无效的注释“%s”\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s:无效的主目录“%s”\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s:-e 参数需要有影子密码\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s:-f 参数需要有影子密码\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s:无效的字段“%s”\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s:无效的 shell“%s”\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Warning: %s is not executable\n"
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s:警告:%s 不可执行\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Option -C cannot be used together with option -S\n"
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s:选项 -C 不能与 -S 选项一起使用\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr "%s:-Z 选项要求内核启用 SELinux\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr "%s:重置 UID %lu 的登录失败条目失败:%s\n"
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr "%s:重置 UID %lu 的最近登录条目失败:%s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s:重置 UID %lu 的登录失败条目失败:%s\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s:准备新 %s 条目失败\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error updating files\n"
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s:更新文件出错\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot create directory %s\n"
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s:无法创建目录 %s\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s home directory (%s) not found\n"
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s:未找到 %s 的主目录“%s”\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to allocate memory: %s\n"
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "%s:申请内存失败:%s\n"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s:无法创建目录 %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s:第 %d 行:改变 %s 的属主失败:%s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s:第 %d 行:改变 %s 的属主失败:%s\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr "正在创建信箱文件"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr "没有找到“mail”组。以 0600 权限模式创建用户的信箱文件。\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "正在设置信箱文件访问权限"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s:用户“%s”已存在\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr "%s:%s 组已经存在 - 如果您想将此用户加入到该组,请使用 -g 参数。\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s:无法创建用户\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s:UID %lu 并不唯一\n"
+
+#, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s:为 %s 创建 tcb 目录失败\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s:无法创建用户组\n"
+
+#, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s:无法创建子用户 ID\n"
+
+#, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s:无法创建子用户组 ID\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s:警告:此主目录已经存在。\n"
+"不从 skel 目录里向其中复制任何文件。\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr "%s:警告:将用户名 %s 到 %s SELinux 的用户映射失败。\n"
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr " -f, --force 即使不属于此用户,也强制删除文件\n"
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr " -r, --remove 删除主目录和信件池\n"
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr " -Z, --selinux-user 为用户删除所有的 SELinux 用户映射\n"
+
+#, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr "%s:组“%s”没有移除,因为它不是用户 %s 的主组\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr "%s:组“%s”没有移除,因为它包含其它成员。\n"
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr "%s:没有删除 %s 组,因为它是另外一个用户的主组。\n"
+
+#, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "%1$s:无法从 %3$s 中移除 %2$lu\n"
+
+#, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s:%s 信件池 (%s) 未找到\n"
+
+#, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s:警告:无法删除 %s:%s\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s:%s 并不属于 %s,所以不会删除\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr "%s:无法申请内存,%s 的 tcb 条目没有移除。\n"
+
+#, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s:无法放弃特权:%s\n"
+
+#, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s:无法删除 %s 的内容:%s\n"
+
+#, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s:无法从 %s 中删除 tcb 文件:%s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s:用户 %s 是 NIS 用户\n"
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s:未找到 %s 的主目录“%s”\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s:不删除目录 %s (因为这将删除用户 %s 的主目录)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: error removing directory %s\n"
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s:删除目录 %s 时出错\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s:删除目录 %s 时出错\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr "%s:警告:将用户名 %s 到 SELinux 的用户映射失败。\n"
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr " -c, --comment COMMENT GECOS 字段的新值\n"
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr " -d, --home HOME_DIR 用户的新主目录\n"
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr " -e, --expiredate EXPIRE_DATE 设定帐户过期的日期为 EXPIRE_DATE\n"
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+" -f, --inactive INACTIVE 过期 INACTIVE 天数后,设定密码为失效状态\n"
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr " -g, --gid GROUP 强制使用 GROUP 为新主组\n"
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr " -G, --groups GROUPS 新的附加组列表 GROUPS\n"
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+" -a, --append GROUP 将用户追加至上边 -G 中提到的附加组中,\n"
+" 并不从其它组中删除此用户\n"
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr " -l, --login NEW_LOGIN 新的登录名称\n"
+
+msgid " -L, --lock lock the user account\n"
+msgstr " -L, --lock 锁定用户帐号\n"
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+" -m, --move-home 将家目录内容移至新位置 (仅于 -d 一起使用)\n"
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr " -o, --non-unique 允许使用重复的(非唯一的) UID\n"
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr " -p, --password PASSWORD 将加密过的密码 (PASSWORD) 设为新密码\n"
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr " -u, --uid UID 用户帐号的新 UID\n"
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr " -U, --unlock 解锁用户帐号\n"
+
+msgid " -v, --add-subuids FIRST-LAST add range of subordinate uids\n"
+msgstr " -v, --add-subuids FIRST-LAST 添加子 UID 范围\n"
+
+msgid " -V, --del-subuids FIRST-LAST remove range of subordinate uids\n"
+msgstr " -V, --del-subuids FIRST-LAST 移除子 UID 范围\n"
+
+msgid " -w, --add-subgids FIRST-LAST add range of subordinate gids\n"
+msgstr " -w, --add-subgids FIRST-LAST 添加子 GID 范围\n"
+
+msgid " -W, --del-subgids FIRST-LAST remove range of subordinate gids\n"
+msgstr " -W, --del-subgids FIRST-LAST 移除子 GID 范围\n"
+
+msgid ""
+" -Z, --selinux-user SEUSER new SELinux user mapping for the user "
+"account\n"
+msgstr " -Z, --selinux-user SEUSER 用户的新的 SELinux 用户映射\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s:解锁用户密码将产生没有密码的账户。\n"
+"您应该使用 usermod -p 设置密码并解锁用户密码。\n"
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s:用户“%s”已存在于 %s 中\n"
+
+#, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s:无效的子 UID 范围“%s”\n"
+
+#, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s:无效的子 GID 范围“%s”\n"
+
+#, c-format
+msgid "%s: no options\n"
+msgstr "%s:无选项\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s:-L、-p 和 -U 标志互斥\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s:-e 和 -f 参数需要影子密码\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s:UID“%lu”已经存在\n"
+
+#, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr "%s:不存在 %s,您不能使用 %s 或 %s 标志\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s:目录 %s 不存在\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr "%s:先前的主目录 (%s) 不是一个目录。没有移除它,也没有创建主目录。\n"
+
+#, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s:更改主目录的属主失败"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s:警告:无法将旧的主目录 %s 完全删除"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s:无法将目录 %s 改名为 %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr "%s:将用户 %lu 的登录失败条目复制给用户 %lu 失败:%s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr "%s:将用户 %lu 的登录失败条目复制给用户 %lu 失败:%s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s:警告:%s 不属于 %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "改变信箱所有者失败"
+
+msgid "failed to rename mailbox"
+msgstr "信箱改名失败"
+
+#, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%1$s:从“%4$s”移除 UID 范围 %2$lu~%3$lu 失败\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to add uid range %lu-%lu from '%s'\n"
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%1$s:向“%4$s”添加 UID 范围 %2$lu~%3$lu 失败\n"
+
+#, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%1$s:从“%4$s”移除 GID 范围 %2$lu~%3$lu 失败\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to add gid range %lu-%lu from '%s'\n"
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%1$s:向“%4$s”添加 GID 范围 %2$lu~%3$lu 失败\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"您已经修改了 %s。\n"
+"出于一致性的考虑,您可能需要修改 %s。\n"
+"请使用命令“%s”来进行这个工作。\n"
+
+msgid " -g, --group edit group database\n"
+msgstr " -g, --group 编辑 group 数据库\n"
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr " -p, --passwd 编辑 passwd 数据库\n"
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr " -s, --shadow 编辑 shadow 或 gshadow 数据库\n"
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr " -u, --user 要编辑哪个用户的 tcb 影子文件\n"
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s:移除 %s 失败\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s:%s 没有更改\n"
+
+msgid "failed to create scratch directory"
+msgstr "创建临时目录失败"
+
+msgid "failed to drop privileges"
+msgstr "放弃特权失败"
+
+msgid "Couldn't get file context"
+msgstr "无法获取文件的上下文"
+
+msgid "setfscreatecon () failed"
+msgstr "setfscreatecon () 失败"
+
+msgid "failed to gain privileges"
+msgstr "获取特权失败"
+
+msgid "Couldn't lock file"
+msgstr "无法锁定文件"
+
+msgid "Couldn't make backup"
+msgstr "无法创建备份"
+
+#, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s:%s:%s\n"
+
+#, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr "%s:%s 以状态 %d 退出\n"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr "%s:%s 被信号 %d 杀死\n"
+
+msgid "failed to open scratch file"
+msgstr "打开临时文件失败"
+
+msgid "failed to unlink scratch file"
+msgstr "删除(unlink)临时文件失败"
+
+msgid "failed to stat edited file"
+msgstr "获取编辑过的文件的信息失败"
+
+msgid "failed to allocate memory"
+msgstr "申请内存失败"
+
+msgid "failed to create backup file"
+msgstr "创建备份文件失败"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s:无法恢复 %s:%s (您的修改在 %s 中)\n"
+
+#, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s:无法为“%s”找到 tcb 目录\n"
+
+#~ msgid " -c, --crypt-method the crypt method (one of %s)\n"
+#~ msgstr " -c, --crypt-method 加密方法 (%s 之一)\n"
+
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr ""
+#~ "用法:vipw [选项]\n"
+#~ "\n"
+#~ "选项:\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "malloc(%d) 失败\n"
+
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "用法:chage [选项] [登录]\n"
+#~ "\n"
+#~ "选项:\n"
+#~ " -d, --lastday 最近日期\t将最近一次密码设置时间设为“最近日期”\n"
+#~ " -E, --expiredate 过期日期\t将帐户过期时间设为“过期日期”\n"
+#~ " -h, --help\t\t\t显示此帮助信息并退出\n"
+#~ " -I, --inactive INACITVE\t过期 INACTIVE 天数后,设定密码为失效状态\n"
+#~ " -l, --list\t\t\t显示帐户年龄信息\n"
+#~ " -m, --mindays 最小天数\t将两次改变密码之间相距的最小天数设为“最小天数”\n"
+#~ " -M, --maxdays 最大天数\t将两次改变密码之间相距的最大天数设为“最大天数”\n"
+#~ " -W, --warndays 警告天数\t将过期警告天数设为“警告天数”\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s:PAM 验证失败\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "用法:%s [-f 全名] [-r 房间号] [-w 工作电话]\n"
+#~ "\t[-h 家庭电话] [-o 其它] [用户]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr "用法:%s [-f 全名] [-r 房间号] [-w 工作电话] [-h 家庭电话]\n"
+
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "用法:%s [选项]\n"
+#~ "\n"
+#~ "选项:\n"
+#~ " -c, --crypt-method\t加密方法 (%s 中的一个)\n"
+#~ " -e, --encrypted\t\t提供的密码是加密过的\n"
+#~ " -h, --help\t\t\t显示此帮助信息然后推出\n"
+#~ " -m, --md5\t\t\t使用 MD5 算法加密明文密码\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "Usage: chsh [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "用法:chsh [选项] [登录]\n"
+#~ "\n"
+#~ "选项:\n"
+#~ " -h, --help\t\t\t\t显示此帮助信息并退出\n"
+#~ " -s, --shell SHELL\t\t\t该用户帐号的新登录 shell\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "用法:expiry {-f|-c}\n"
+
+#~ msgid "faillog: Failed to get the entry for UID %lu\n"
+#~ msgstr "登录失败:获取 UID %lu 的条目失败\n"
+
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "登录失败:无法打开 %s:%s\n"
+
+#~ msgid "faillog: Cannot get the size of %s: %s\n"
+#~ msgstr "登录失败:无法获取 %s 的大小:%s\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "用法:groupdel 组\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "用法:%s [-r] [-s] [组 [gshadow]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "用法:%s [-r] [-s] [组]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s:-s 和 -r 不兼容\n"
+
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "用法:grpconv\n"
+
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "用法:grpunconv\n"
+
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "用法:lastlog [选项]\n"
+#~ "\n"
+#~ "选项:\n"
+#~ " -b, --before DAYS\t仅打印早于 DAYS 的最近登录记录\n"
+#~ " -h, --help\t\t显示此帮助信息并退出\n"
+#~ " -t, --time DAYS\t仅打印晚于 DAYS 的最近登录记录\n"
+#~ " -u, --user LOGIN\t打印 LOGIN 用户的最近登录记录\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "用法:passwd [选项] [用户名]\n"
+#~ "\n"
+#~ "选项:\n"
+#~ " -a, --all\t\t\t报告所有帐户的密码状态\n"
+#~ " -d, --delete\t\t\t删除指定帐户的密码\n"
+#~ " -e, --expire\t\t\t强制使指定帐户的密码过期\n"
+#~ " -h, --help\t\t\t显示此帮助信息并退出\n"
+#~ " -k, --keep-tokens\t\t仅在过期后修改密码\n"
+#~ " -i, --inactive INACTIVE\t密码过期后设置密码不活动为 INACTIVE\n"
+#~ " -l, --lock\t\t\t锁定指定的帐户\n"
+#~ " -n, --mindays MIN_DAYS\t设置到下次修改密码所须等待的最短天数\n"
+#~ "\t\t\t\t为 MIN_DAYS\n"
+#~ " -q, --quiet\t\t\t安静模式\n"
+#~ " -r, --repository REPOSITORY\t在 REPOSITORY 库中改变密码\n"
+#~ " -S, --status\t\t\t报告指定帐户密码的状态\n"
+#~ " -u, --unlock\t\t\t解锁被指定帐户\n"
+#~ " -w, --warndays WARN_DAYS\t设置过期警告天数为 WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS\t设置到下次修改密码所须等待的最多天数\n"
+#~ "\t\t\t\t为 MAX_DAYS\n"
+#~ "\n"
+
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr "用法:%s [-q] [-r] [passwd]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr "用法:%s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "用法:pwconv\n"
+
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "用法:pwunconv\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "未知 id:%s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "没有 shell\n"
+
+#~ msgid ""
+#~ "Usage: userdel [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force removal of files,\n"
+#~ " even if not owned by user\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -r, --remove remove home directory and mail spool\n"
+#~ "\n"
+#~ msgstr ""
+#~ "用法:userdel [选项] 登录\n"
+#~ "\n"
+#~ "选项:\n"
+#~ " -f, --force\t\t即使不属于此用户,也强制删除文件\n"
+#~ " -h, --help\t\t显示此帮组文件并退出\n"
+#~ " -r, --remove\t\t删除主目录和邮箱\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: usermod [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --comment COMMENT new value of the GECOS field\n"
+#~ " -d, --home HOME_DIR new home directory for the user account\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP as new primary group\n"
+#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
+#~ " -a, --append append the user to the supplemental "
+#~ "GROUPS\n"
+#~ " mentioned by the -G option without "
+#~ "removing\n"
+#~ " 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"
+#~ " -m, --move-home move contents of the home directory to "
+#~ "the\n"
+#~ " new location (use only with -d)\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ " -s, --shell SHELL new login shell for the user account\n"
+#~ " -u, --uid UID new UID for the user account\n"
+#~ " -U, --unlock unlock the user account\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "用法:usermod [选项] 登录\n"
+#~ "\n"
+#~ "选项:\n"
+#~ " -c, --comment 注释\t\tGECOS 字段的新值\n"
+#~ " -d, --home HOME_DIR\t\t用户的新主目录\n"
+#~ " -e, --expiredate EXPIRE_DATE\t设定帐户过期的日期为 EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE\t过期 INACTIVE 天数后,设定密码为失效状态\n"
+#~ " -g, --gid GROUP\t\t强制使用 GROUP 为新主组\n"
+#~ " -G, --groups GROUPS\t\t新的附加组列表 GROUPS\n"
+#~ " -a, --append GROUP\t将用户追加至上边 -G 中提到的附加组中,\n"
+#~ "\t\t\t\t\t并不从其它组中删除此用户\n"
+#~ " -h, --help\t\t\t显示此帮助信息并退出\n"
+#~ " -l, --login LOGIN\t\t新的登录名称\n"
+#~ " -L, --lock\t\t\t锁定用户帐号\n"
+#~ " -m, --move-home\t\t将家目录内容移至新位置 (仅于 -d 一起使用)\n"
+#~ " -o, --non-unique\t\t允许使用重复的(非唯一的) UID\n"
+#~ " -p, --password PASSWORD\t将加密过的密码 (PASSWORD) 设为新密码\n"
+#~ " -s, --shell SHELL\t\t用户帐号的新登录 shell\n"
+#~ " -u, --uid UID\t\t\t用户帐号的新 UID\n"
+#~ " -U, --unlock\t\t\t解锁用户帐号\n"
+#~ "%s\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s:没有指定标志\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group edit group database\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -p, --passwd edit passwd database\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow edit shadow or gshadow database\n"
+#~ " -u, --user which user's tcb shadow file to edit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "用法:vipw [选项]\n"
+#~ "\n"
+#~ "选项:\n"
+#~ " -g, --group\t\t\t编辑组数据库\n"
+#~ " -h, --help\t\t\t显示此帮助信息并退出\n"
+#~ " -p, --passwd\t\t\t编辑 passwd 数据库\n"
+#~ " -q, --quiet\t\t\t安静模式\n"
+#~ " -s, --shadow\t\t\t编辑 shadow 或 gshadow 数据库\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "用法:%s [输入]\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s:无法创建 %s\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s:无法改变 %s 的所有者和组别\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all display faillog records for all users\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -l, --lock-time SEC after failed login lock account to SEC "
+#~ "seconds\n"
+#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
+#~ " -r, --reset reset the counters of login failures\n"
+#~ " -t, --time DAYS display faillog records more recent than "
+#~ "DAYS\n"
+#~ " -u, --user LOGIN display faillog record or maintains "
+#~ "failure\n"
+#~ " counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ " options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "用法:faillog [选项]\n"
+#~ "\n"
+#~ "选项:\n"
+#~ " -a, --all\t\t\t显示所有用户的登录失败记录\n"
+#~ " -h, --help\t\t\t显示本帮助信息并退出\n"
+#~ " -l, --lock-time 秒数\t\t在登录失败后锁定帐户“秒数”秒\n"
+#~ " -m, --maximum 最大值\t\t将最大登录失败次数设为“最大值”\n"
+#~ " -r, --reset\t\t\t将登录失败计数器归零\n"
+#~ " -t, --time 天数\t\t显示最近“天数”天以来的登录失败记录\n"
+#~ " -u, --user 登录\t\t仅显示用户“登录”的登录失败记录,或设置用户“登\n"
+#~ "\t\t\t\t录”的登录失败计数器及限制(如果和 -r、-m 或 -l 选\n"
+#~ "\t\t\t\t项合用)\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -f, --force force exit with success status if the\n"
+#~ " specified group already exists\n"
+#~ " -g, --gid GID use GID for the new group\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -o, --non-unique allow create group with duplicate\n"
+#~ " (non-unique) GID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new group\n"
+#~ " -r, --system create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "用法:groupadd [选项] 组\n"
+#~ "\n"
+#~ "选项:\n"
+#~ " -f, --force\t\t如果指组已经存在,则强制以正常状态退出\n"
+#~ " -g, --gid GID\t\t新组使用 GID\n"
+#~ " -h, --help\t\t\t显示此帮助信息并退出\n"
+#~ " -K, --key KEY=VALUE\t\t覆盖 /etc/login.defs 默认值\n"
+#~ " -o, --non-unique\t\t允许使用重复的(非唯一的) GID 创建组\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --gid GID force use new GID by GROUP\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
+#~ " -o, --non-unique allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ " -p, --password PASSWORD use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "用法:groupadd [选项] 组\n"
+#~ "\n"
+#~ "选项:\n"
+#~ " -f, --force\t\t如果指组已经存在,则强制以正常状态退出\n"
+#~ " -g, --gid GID\t\t新组使用 GID\n"
+#~ " -h, --help\t\t\t显示此帮助信息并退出\n"
+#~ " -K, --key KEY=VALUE\t\t覆盖 /etc/login.defs 默认值\n"
+#~ " -o, --non-unique\t\t允许使用重复的(非唯一的) GID 创建组\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR base directory for the new user account\n"
+#~ " home directory\n"
+#~ " -c, --comment COMMENT set the GECOS field for the new user "
+#~ "account\n"
+#~ " -d, --home-dir HOME_DIR home directory for the new user account\n"
+#~ " -D, --defaults print or save modified default useradd\n"
+#~ " configuration\n"
+#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -g, --gid GROUP force use GROUP for the new user account\n"
+#~ " -G, --groups GROUPS list of supplementary groups for the new\n"
+#~ " user account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --skel SKEL_DIR specify an alternative skel directory\n"
+#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
+#~ " -l, --no-log-init do not add the user to the lastlog and\n"
+#~ " faillog databases\n"
+#~ " -m, --create-home create home directory for the new user\n"
+#~ " account\n"
+#~ " -M, --no-create-home do not create user's home directory\n"
+#~ " (overrides /etc/login.defs)\n"
+#~ " -N, --no-user-group do not create a group with the same name "
+#~ "as\n"
+#~ " the user\n"
+#~ " -o, --non-unique allow create user with duplicate\n"
+#~ " (non-unique) UID\n"
+#~ " -p, --password PASSWORD use encrypted password for the new user\n"
+#~ " account\n"
+#~ " -r, --system create a system account\n"
+#~ " -s, --shell SHELL the login shell for the new user account\n"
+#~ " -u, --uid UID force use the UID for the new user "
+#~ "account\n"
+#~ " -U, --user-group create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "用法:useradd [选项] 用户名\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --base-dir BASE_DIR\t新用户帐号家目录的主目录(base directory)\n"
+#~ " -c, --comment 注释\t\t为新用户帐号设置“注释”栏\n"
+#~ " -d, --home-dir HOME_DIR\t新用户帐号的家目录\n"
+#~ " -D, --defaults\t\t打印或保存修改过的 useradd 默认设置\n"
+#~ " -e, --expiredate EXPIRE_DATE\t设定帐户过期的日期为 EXPIRE_DATE\n"
+#~ " -f, --inactive INACTIVE\t过期 INACTIVE 天数后,设定密码为失效状态\n"
+#~ " -g, --gid GROUP\t\t强制将新用户帐号的组设置为 GROUP\n"
+#~ " -G, --groups GROUPS\t\t新用户帐号的补充组列表\n"
+#~ " -h, --help\t\t\t显示此帮助信息并退出\n"
+#~ " -k, --skel SKEL_DIR\t\t指定另一替代的 skel 目录\n"
+#~ " -K, --key KEY=VALUE\t\t覆盖 /etc/login.defs 默认值\n"
+#~ " -m, --create-home\t\t为新用户帐号创建家目录\n"
+#~ " -o, --non-unique\t\t允许以重复的(非唯一的) UID 创建用户\n"
+#~ " -p, --password PASSWORD\t为新用户帐号设定加密过的密码 (PASSWORD)\n"
+#~ " -s, --shell SHELL\t\t新用户帐号的登录 shell\n"
+#~ " -u, --uid UID\t\t\t强制将新用户帐号的 id 设为 UID\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "已设定密码过期时间。"
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s:无法锁定密码文件\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s:无法打开密码文件\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s:无法锁定影子密码文件\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s:无法打开影子密码文件\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s:无法重写影子密码文件\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s:无法重写密码文件\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s:无法更新影子密码文件\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\t全名:%s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\t房间号码:%s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\t工作电话:%s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\t家庭电话:%s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "无法锁定密码文件;稍后再试。\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "无法打开密码文件。\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s:未在 /etc/passwd 中找到 %s\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "更改密码条目时出错。\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "无法提交密码文件改动。\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "无法解锁密码文件。\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s:无法锁定组文件\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s:无法锁定 gshadow 文件\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s:无法打开影子文件\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s:更新影子文件时出错。\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s:更新组条目时出错\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s:第 %d 行:未知组 %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s:第 %d 行:无法更新条目\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s:无法锁定影子文件\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s:更新影子文件时出错。\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s:更新密码文件时出错。\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s:第 %d 行:未知用户 %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s:第 %d 行:无法更新密码条目\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s:未知用户\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "未知用户:%s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "用法:%s [-r|-R] 组\n"
+
+#~ msgid " %s [-a user] group\n"
+#~ msgstr " %s [-a 用户] 组\n"
+
+#~ msgid " %s [-d user] group\n"
+#~ msgstr " %s [-d 用户] 组\n"
+
+#~ msgid " %s [-A user,...] [-M user,...] group\n"
+#~ msgstr " %s [-A 用户,...] [-M 用户,...] 组\n"
+
+#~ msgid " %s [-M user,...] group\n"
+#~ msgstr " %s [-M 用户,...] 组\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s:无法获得锁\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s:无法获得影子锁\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s:无法重写影子文件\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s 无法解锁文件。\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s:无法更新条目\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s:无法更新影子条目\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "未知组:%s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s:无法打开文件\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s:无法打开影子文件\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "你是谁?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s:未知成员 %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s:增加新组条目时出错\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s:无法重写组文件\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s:无法重写影子组文件\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s:无法锁定组文件\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s:无法打开组文件\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s:无法锁定影子组文件\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s:无法打开影子组文件\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s:GID %u 并不唯一\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s:删除组条目时出错\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s:删除影子组条目时出错\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s:不能删除用户的主组。\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "没有找到要删除的成员\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr "用法:groupmems -a 用户名 | -d 用户名 | -D | -l [-g 组名]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "只有 root 能向不同的组里添加成员\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "PAM 验证失败于\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "无法锁定组文件\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "无法关闭组文件\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s:未在 /etc/group 中找到 %s\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s:%u 不是一个独有的 GID\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s:%s 不是一个独有的名称\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s:无法重写密码文件\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s:无法锁定密码文件\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s:无法打开密码文件\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s:无法为 %s 更新影子条目\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s:无法更新 %s 组的条目\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s:无法锁定影子组文件\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s:无法打开影子组文件\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s:无法删除影子组 %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s:无法更新影子组文件\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s:无法删除影子组文件\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "未知的 UID:%u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "未知的 GID:%lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s:%s 组不存在\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s:用户 %s 不存在\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s:无效的用户名“%s”\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s:无法锁定 /etc/passwd。\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s:无法锁定 /etc/passwd。\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s:无法锁定 /etc/passwd。\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s:无法锁定 /etc/passwd。\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s:无法打开文件\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s:无法为 %s 更新密码条目\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s:无法锁定密码文件\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s:无法打开密码文件\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s:无法为 %s 删除影子条目\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s:无法更新密码文件\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s:不能更新用户 %s 的条目\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s:无法删除影子密码文件\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s:未知的 GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s:未知的组 %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s:update_gshadow 内存溢出\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s:无法重写密码文件\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s:无法重写影子密码文件\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s:无法锁定影子密码文件\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s:无法打开影子密码文件\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s:锁定组文件时出错\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s:打开组文件时出错\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s:锁定影子组文件时出错\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s:打开影子组文件时出错\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s:加入新密码项时出错\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s:加入新影子密码项时出错\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s:警告:CREATE_HOME 未被支持,请使用 -m 参数。\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s:更新组条目时出错\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s:更新组条目时出错\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s:无法打开组文件\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s:无法打开影子组文件\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s:删除密码项时出错\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s:删除影子密码项时出错\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s:增加新组条目时出错\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s:uid %lu 不唯一\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s:改变密码项时出错\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s:删除密码项时出错\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s:删除影子密码项时出错\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s:无法获取独有的 GID\n"
+
+#, fuzzy
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " 在“%.100s”上,来自“%.200s”"
+
+#, fuzzy
+#~ msgid " on '%.100s'"
+#~ msgstr "在“%.100s”上"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s:第 %d 行:无法创建 UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s:名称 %s 并不唯一\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ " -h, --help\t\tdisplay this help message and exit\n"
+#~ " -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "用法:chpasswd [选项]\n"
+#~ "\n"
+#~ "选项:\n"
+#~ " -e, --encrypted\t所提供的密码是加密过的\n"
+#~ " -h, --help\t\t显示此帮助信息并退出\n"
+#~ " -m, --md5\t\t如果所提供的密码尚未被加密,使用 MD5 而非 DES 进行加密\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "没有密码文件\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "抱歉。\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "抱歉,无法更改 %s 的密码。\n"
+
+#~ msgid "Sorry."
+#~ msgstr "抱歉"
+
+#~ msgid "Usage: %s [-s shell] [name]\n"
+#~ msgstr "用法:%s [-s shell] [名称]\n"
+
+#~ msgid "Usage: groupmod [-g gid [-o]] [-n name] group\n"
+#~ msgstr "用法:groupmod [-g gid [-o]] [-n 名称] 组\n"
+
+#~ msgid ""
+#~ "No group named \"mail\" exists, creating mail spool with mode 0600.\n"
+#~ msgstr "不存在叫做“mail”的组,将以 0600 的文件权限创建邮件 spool。\n"
+
+#~ msgid "Can't create mail spool for user %s.\n"
+#~ msgstr "不能为用户 %s 创建邮件 spool。\n"
+
+#~ msgid "Usage: %s [-r] name\n"
+#~ msgstr "用法:%s [-r] 名称\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Login incorrect\n"
+#~ msgstr ""
+#~ "\n"
+#~ "登录错误\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage:\n"
+#~ "`vipw' edits /etc/passwd `vipw -s' edits /etc/shadow\n"
+#~ "`vigr' edits /etc/group `vigr -s' edits /etc/gshadow\n"
+#~ "`{vipw|vigr} -q' quiet mode\n"
+#~ msgstr ""
+#~ "用法:\n"
+#~ "“vipw” 编辑 /etc/passwd “vipw -s” 编辑 /etc/shadow\n"
+#~ "“vigr” 编辑 /etc/group “vigr -s” 编辑 /etc/gshadow\n"
+
+#~ msgid "%s: PAM chauthtok failed\n"
+#~ msgstr "%s:PAM chauthtok 失败\n"
+
+#, fuzzy
+#~ msgid "Usage: %s\t[-u uid [-o]] [-g group] [[-G group,...] [-a]] \n"
+#~ msgstr "用法:%s\t[-u uid [-o]] [-g 组] [-G 组,...] \n"
+
+#~ msgid "\t\t[-d home [-m]] [-s shell] [-c comment] [-l new_name]\n"
+#~ msgstr "\t\t[-d 主目录 [-m]] [-s shell] [-c 注释] [-l 新名称]\n"
+
+#~ msgid "[-f inactive] [-e expire] "
+#~ msgstr "[-f 失效日] [-e 过期日] "
+
+#~ msgid "[-p passwd] [-L|-U] name\n"
+#~ msgstr "[-p 密码] [-L|-U] 名称\n"
diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo
new file mode 100644
index 0000000..0dae767
--- /dev/null
+++ b/po/zh_TW.gmo
Binary files differ
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100644
index 0000000..76642bf
--- /dev/null
+++ b/po/zh_TW.po
@@ -0,0 +1,3474 @@
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Asho S.Y. Yeg <asho@debian.org.tw>, 2004.
+# pan93412 <pan93412@gmail.com>, 2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.9\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2020-01-23 14:59-0600\n"
+"PO-Revision-Date: 2019-09-23 21:29+0800\n"
+"Last-Translator: pan93412 <pan93412@gmail.com>\n"
+"Language-Team: Chinese <chinese-l10n@googlegroups.com>\n"
+"Language: zh_TW\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Lokalize 19.08.1\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr "%2$s 中有多個項目的名稱是「%1$s」。請使用 pwck 或 grpck 修復。\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "libcrypt 不支援該加密方法?(%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr "組態設定錯誤 - 無法解析 %s 值:「%s」"
+
+msgid "Could not allocate space for config info.\n"
+msgstr "無法為組態設定資訊分配空間。\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "組態設定錯誤 - 項目「%s」未知(請通知管理員)\n"
+
+#, c-format
+msgid "%s: nscd did not terminate normally (signal %d)\n"
+msgstr "%s:nscd 非正常終止(信號 %d)\n"
+
+#, c-format
+msgid "%s: nscd exited with status %d\n"
+msgstr "%s:nscd 結束並回傳狀態碼 %d\n"
+
+msgid "Password: "
+msgstr "密碼:"
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s 的密碼:"
+
+#, fuzzy
+#| msgid "Cannot open audit interface - aborting.\n"
+msgid "Cannot open audit interface.\n"
+msgstr "無法開啟稽核介面 - 取消。\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot reset SELinux file creation context\n"
+msgid "%s: can not get previous SELinux process context: %s\n"
+msgstr "%s: 無法重設 SELinux 檔案建立上下文\n"
+
+#, c-format
+msgid "[libsemanage]: %s\n"
+msgstr "[libsemanage]:%s\n"
+
+#, c-format
+msgid "Cannot create SELinux management handle\n"
+msgstr "無法建立 SELinux 管理工具的處理器\n"
+
+#, c-format
+msgid "SELinux policy not managed\n"
+msgstr "SELinux 政策未受管理\n"
+
+#, c-format
+msgid "Cannot read SELinux policy store\n"
+msgstr "無法讀取 SELinux 原則儲存區\n"
+
+#, c-format
+msgid "Cannot establish SELinux management connection\n"
+msgstr "無法建立 SELinux 管理工具的連線\n"
+
+#, c-format
+msgid "Cannot begin SELinux transaction\n"
+msgstr "無法開始 SELinux 交易\n"
+
+#, c-format
+msgid "Could not query seuser for %s\n"
+msgstr "無法查詢 %s 的 seuser\n"
+
+#, c-format
+msgid "Could not set serange for %s\n"
+msgstr "無法設定 %s 的 serange\n"
+
+#, c-format
+msgid "Could not set sename for %s\n"
+msgstr "無法設定 %s 的 sename\n"
+
+#, c-format
+msgid "Could not modify login mapping for %s\n"
+msgstr "無法修改 %s 的登入映射\n"
+
+#, c-format
+msgid "Cannot create SELinux login mapping for %s\n"
+msgstr "無法建立 %s 的 SELinux 登入映射\n"
+
+#, c-format
+msgid "Could not set name for %s\n"
+msgstr "無法設定 %s 的名稱\n"
+
+#, c-format
+msgid "Could not set SELinux user for %s\n"
+msgstr "無法設定 %s 的 SELinux 使用者\n"
+
+#, c-format
+msgid "Could not add login mapping for %s\n"
+msgstr "無法新增 %s 的登入映射\n"
+
+#, c-format
+msgid "Cannot init SELinux management\n"
+msgstr "無法初始化 SELinux 管理工具\n"
+
+#, c-format
+msgid "Cannot create SELinux user key\n"
+msgstr "無法建立 SELinux 使用者金鑰\n"
+
+#, c-format
+msgid "Cannot verify the SELinux user\n"
+msgstr "無法驗證 SELinux 使用者\n"
+
+#, c-format
+msgid "Cannot modify SELinux user mapping\n"
+msgstr "無法修改 SELinux 使用者映射\n"
+
+#, c-format
+msgid "Cannot add SELinux user mapping\n"
+msgstr "無法新增 SELinux 使用者映射\n"
+
+#, c-format
+msgid "Cannot commit SELinux transaction\n"
+msgstr "無法提交 SELinux 交易。\n"
+
+#, c-format
+msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
+msgstr "未定義 %s 的登入映射。如果已使用預設映射,那就行\n"
+
+#, c-format
+msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
+msgstr "已在原則中定義 %s 的登入映射,不能刪除\n"
+
+#, c-format
+msgid "Could not delete login mapping for %s"
+msgstr "無法刪除 %s 的登入映射"
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s:記憶體不足\n"
+
+#, c-format
+msgid "%s: Cannot stat %s: %s\n"
+msgstr "%s:無法取得 %s 檔案的資訊 (stat):%s\n"
+
+#, c-format
+msgid "%s: %s is neither a directory, nor a symlink.\n"
+msgstr "%s:%s 既不是目錄,也不是符號連結。\n"
+
+#, c-format
+msgid "%s: Cannot read symbolic link %s: %s\n"
+msgstr "%s:無法讀取 %s 符號連結:%s\n"
+
+#, c-format
+msgid "%s: Suspiciously long symlink: %s\n"
+msgstr "%s:符號連結過長:%s\n"
+
+#, c-format
+msgid "%s: Cannot create directory %s: %s\n"
+msgstr "%s:無法建立 %s 目錄:%s\n"
+
+#, c-format
+msgid "%s: Cannot change owner of %s: %s\n"
+msgstr "%s:無法變更 %s 的所有者:%s\n"
+
+#, c-format
+msgid "%s: Cannot change mode of %s: %s\n"
+msgstr "%s:無法變更 %s 的模式:%s\n"
+
+#, c-format
+msgid "%s: unlink: %s: %s\n"
+msgstr "%s:取消連結 (unlink):%s:%s\n"
+
+#, c-format
+msgid "%s: Cannot remove directory %s: %s\n"
+msgstr "%s:無法移除 %s 目錄:%s\n"
+
+#, c-format
+msgid "%s: Cannot rename %s to %s: %s\n"
+msgstr "%s:無法將 %s 重命名至 %s:%s\n"
+
+#, c-format
+msgid "%s: Cannot remove %s: %s\n"
+msgstr "%s:無法移除 %s:%s\n"
+
+#, c-format
+msgid "%s: Cannot create symbolic link %s: %s\n"
+msgstr "%s:無法建立 %s 符號連結:%s\n"
+
+#, c-format
+msgid "%s: Cannot change owners of %s: %s\n"
+msgstr "%s:無法變更 %s 的所有者:%s\n"
+
+#, c-format
+msgid "%s: Cannot lstat %s: %s\n"
+msgstr "%s:無法執行 lstat %s:%s\n"
+
+#, c-format
+msgid "%s: Warning, user %s has no tcb shadow file.\n"
+msgstr "%s:警告,使用者 %s 沒有 tcb 陰影檔案。\n"
+
+#, c-format
+msgid ""
+"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
+"The account is left locked.\n"
+msgstr ""
+"%s:緊急情況:%s 的 tcb 陰影檔並非包含 st_nlink=1 的正常檔案。\n"
+"已鎖定帳戶。\n"
+"\n"
+
+#, c-format
+msgid "%s: mkdir: %s: %s\n"
+msgstr "%s:建立目錄 (mkdir):%s:%s\n"
+
+#, c-format
+msgid "%s: Cannot open %s: %s\n"
+msgstr "%s:無法開啟 %s:%s\n"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "警告:未知群組 %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "警告:群組過多\n"
+
+msgid "Your password has expired."
+msgstr "您的密碼已經過期。"
+
+msgid "Your password is inactive."
+msgstr "您的密碼已經失效。"
+
+msgid "Your login has expired."
+msgstr "您的登入帳戶已經過期。"
+
+msgid " Contact the system administrator."
+msgstr " 請聯絡系統管理員。"
+
+msgid " Choose a new password."
+msgstr " 請選擇一個新密碼。"
+
+msgid "You must change your password."
+msgstr "您必須變更您的密碼。"
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "您的密碼將在 %ld 天後過期。\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "您的密碼將在明天過期。"
+
+msgid "Your password will expire today."
+msgstr "您的密碼將在今天過期。"
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "無法開啟稽核介面 - 取消。\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "無法變更 tty 標準輸入的所有者或模式:%s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s:無法解鎖 %s\n"
+
+#, c-format
+msgid "%s: "
+msgstr "%s:"
+
+msgid ": "
+msgstr ":"
+
+msgid "Environment overflow\n"
+msgstr "環境溢位\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "您不應變更 $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"距上次登入迄今已登入失敗 %1$d 次。\n"
+"最後一次是在 %3$s 上的 %2$s。\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s:組態設定無效:SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
+msgstr "%s:組態設定無效:GID_MIN (%lu), GID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred GID: %s\n"
+msgstr "%s:嘗試使用偏好 GID 時遇到錯誤:%s\n"
+
+#, c-format
+msgid "%s: failed to allocate memory: %s\n"
+msgstr "%s:無法分配記憶體:%s\n"
+
+#, c-format
+msgid ""
+"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
+msgstr "%s:無法取得唯一系統 GID (%s)。隱藏額外訊息。\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
+msgstr "%s:無法取得唯一 GID (%s)。隱藏額外訊息。\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s:無法取得唯一 GID(沒有更多可用 GID)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
+"SUB_GID_COUNT (%lu)\n"
+msgstr ""
+"%s:組態設定無效:SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX (%lu)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't find subordinate user range\n"
+msgid "%s: Can't get unique subordinate GID range\n"
+msgstr "%s:找不到次級使用者範圍\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+#| "(%lu)\n"
+msgid ""
+"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
+"SUB_UID_COUNT (%lu)\n"
+msgstr ""
+"%s:組態設定無效:SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX (%lu)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't find subordinate user range\n"
+msgid "%s: Can't get unique subordinate UID range\n"
+msgstr "%s:找不到次級使用者範圍\n"
+
+#, c-format
+msgid ""
+"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
+"(%lu)\n"
+msgstr ""
+"%s:組態設定無效:SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
+msgstr "%s:組態設定無效:UID_MIN (%lu), UID_MAX (%lu)\n"
+
+#, c-format
+msgid "%s: Encountered error attempting to use preferred UID: %s\n"
+msgstr "%s:嘗試設定偏好 UID 時遇到錯誤:%s\n"
+
+#, c-format
+msgid ""
+"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
+msgstr "%s:無法取得唯一系統 UID (%s)。隱藏額外訊息。\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
+msgstr "%s:無法取得唯一 UID (%s)。隱藏額外訊息。\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s:無法取得唯一 UID(沒有更多可用 UID)\n"
+
+#, c-format
+msgid "%s: Not enough arguments to form %u mappings\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Authentication failure\n"
+msgid "%s: Memory allocation failure\n"
+msgstr "%s:驗證失敗\n"
+
+#, c-format
+msgid "%s: subuid overflow detected.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid field '%s'\n"
+msgid "%s: Invalid map file %s specified\n"
+msgstr "%s:欄位「%s」無效\n"
+
+#, c-format
+msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Could not set name for %s\n"
+msgid "%s: Could not seteuid to %d\n"
+msgstr "無法設定 %s 的名稱\n"
+
+#, fuzzy, c-format
+#| msgid "Could not set name for %s\n"
+msgid "%s: Could not set caps\n"
+msgstr "無法設定 %s 的名稱\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't open file\n"
+msgid "%s: snprintf failed!\n"
+msgstr "%s:無法打開檔案\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: open of %s failed: %s\n"
+msgstr "%s:第 %d 行:變更 %s 的擁有權失敗:%s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: write to %s failed: %s\n"
+msgstr "%s:第 %d 行:變更 %s 的擁有權失敗:%s\n"
+
+msgid "Too many logins.\n"
+msgstr "登入次數過多。\n"
+
+msgid "You have new mail."
+msgstr "您有新信件。"
+
+msgid "No mail."
+msgstr "沒有信件。"
+
+msgid "You have mail."
+msgstr "您有信件。"
+
+msgid "no change"
+msgstr "沒有變更"
+
+msgid "a palindrome"
+msgstr "一則回文"
+
+msgid "case changes only"
+msgstr "僅變更大小寫"
+
+msgid "too similar"
+msgstr "過於相似"
+
+msgid "too simple"
+msgstr "過於簡單"
+
+msgid "rotated"
+msgstr "已旋轉"
+
+msgid "too short"
+msgstr "過短"
+
+#, c-format
+msgid "Bad password: %s. "
+msgstr "密碼無效:%s。 "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() 失敗,錯誤 %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd:%s\n"
+
+msgid "passwd: password unchanged\n"
+msgstr "passwd:密碼未變更\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd:密碼成功變更\n"
+
+#, c-format
+msgid "%s: PAM modules requesting echoing are not supported.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: repository %s not supported\n"
+msgid "%s: conversation type %d not supported.\n"
+msgstr "%s:不支持 %s 套件存庫。\n"
+
+#, fuzzy, c-format
+#| msgid "%s: pam_start: error %d\n"
+msgid "%s: (user %s) pam_start failure %d\n"
+msgstr "%s:pam_start:錯誤 %d\n"
+
+#, fuzzy, c-format
+#| msgid "passwd: pam_start() failed, error %d\n"
+msgid ""
+"%s: (user %s) pam_chauthtok() failed, error:\n"
+"%s\n"
+msgstr "passwd: pam_start() 失敗,錯誤 %d\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "%s 的密碼錯誤。\n"
+
+#, c-format
+msgid "%s: multiple --root options\n"
+msgstr "%s:指定多個 --root 選項\n"
+
+#, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr "%s:「%s」選項需要參數\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s:無法拋棄權限 (%s)\n"
+
+#, c-format
+msgid "%s: invalid chroot path '%s'\n"
+msgstr "%s:chroot 路徑「%s」無效\n"
+
+#, c-format
+msgid "%s: cannot access chroot directory %s: %s\n"
+msgstr "%s:無法存取 chroot 目錄 %s:%s\n"
+
+#, c-format
+msgid "%s: cannot chdir to chroot directory %s: %s\n"
+msgstr "%s:無法切換至 chroot 目錄 %s:%s\n"
+
+#, c-format
+msgid "%s: unable to chroot to directory %s: %s\n"
+msgstr "%s:無法 chroot 到 %s 目錄:%s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"ENCRYPT_METHOD 數值:「%s」。\n"
+"預設值為 DES。\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "無法切換至「%s」目錄\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "沒有目錄,將以 HOME=/ 登入"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "無法執行 %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "根目錄「%s」無效\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "無法將根目錄變更至「%s」\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s:使用者 %s 目前已登入\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is currently logged in\n"
+msgid "%s: user %s is currently used by process %d\n"
+msgstr "%s:使用者 %s 目前已登入\n"
+
+msgid "Unable to determine your tty name."
+msgstr "無法確定您的 tty 名稱。"
+
+msgid "No"
+msgstr "否"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+"用法:%s [選項] 帳戶\n"
+"\n"
+"選項:\n"
+
+msgid ""
+" -d, --lastday LAST_DAY set date of last password change to "
+"LAST_DAY\n"
+msgstr " -d, --lastday LAST_DAY 將上次變更密碼的日期改成 LAST_DAY\n"
+
+msgid ""
+" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr " -E, --expiredate 過期日期 將帳戶的過期日期設成 <過期日期>\n"
+
+msgid " -h, --help display this help message and exit\n"
+msgstr " -h, --help 顯示此說明訊息後結束\n"
+
+#, fuzzy
+#| msgid " -g, --group edit group database\n"
+msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
+msgstr " -g, --group 編輯群組資料庫\n"
+
+msgid ""
+" -I, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr " -I, --inactive INACTIVE 過期 INACTIVE 天後,停用目前密碼\n"
+
+msgid " -l, --list show account aging information\n"
+msgstr " -l, --list 顯示帳號的時效資訊\n"
+
+msgid ""
+" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr " -m, --mindays 最短天數 設定密碼變更的最短間隔天數\n"
+
+msgid ""
+" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr " -M, --maxdays 最長天數 設定密碼變更的最長間隔天數\n"
+
+msgid " -R, --root CHROOT_DIR directory to chroot into\n"
+msgstr " -R, --root CHROOT_目錄 要 chroot 進去的目錄\n"
+
+msgid ""
+" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr " -W, --warndays 警告天數 將過期警告天數設成 <警告天數>\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "請輸入新值,或直接按 ENTER 鍵使用預設值"
+
+msgid "Minimum Password Age"
+msgstr "最短密碼時效"
+
+msgid "Maximum Password Age"
+msgstr "最長密碼時效"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "最近一次密碼變更時間 (YYYY-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "密碼過期警告時間"
+
+msgid "Password Inactive"
+msgstr "密碼停用時間"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "帳戶過期時間 (YYYY-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "最近一次密碼變更時間\t\t\t\t:"
+
+msgid "never"
+msgstr "永不"
+
+msgid "password must be changed"
+msgstr "必須變更密碼"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "密碼過期\t\t\t\t\t:"
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "密碼失效\t\t\t\t\t:"
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "帳戶過期\t\t\t\t\t:"
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "兩次密碼變更最短相隔天數\t\t\t\t:%ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "兩次密碼變更最長相隔天數\t\t\t\t:%ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "密碼過期幾天前會發出警告\t\t\t\t:%ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s:日期「%s」無效\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s:數字參數「%s」無效\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s:不要同時有 \"l\" 及其他旗標\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s:權限被拒。\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s:無法確定您的使用者名稱。\n"
+
+#, c-format
+msgid "%s: PAM: %s\n"
+msgstr "%s:PAM:%s\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s:無法鎖定 %s;請稍候再試。\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s:無法開啟 %s\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s:無法寫入變更到 %s\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s:無法準備新 %s 項目「%s」\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s:未提供 shadow 密碼檔\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s:使用者「%s」不存在於 %s\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "正在變更 %s 的期限資訊\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s:變更欄位時發生錯誤\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"用法:%s [選項] [帳戶]\n"
+"\n"
+"選項:\n"
+
+msgid " -f, --full-name FULL_NAME change user's full name\n"
+msgstr " -f, --full-name 全名 變更使用者的全名\n"
+
+msgid " -h, --home-phone HOME_PHONE change user's home phone number\n"
+msgstr " -h, --home-phone 家用電話 變更使用者的家用電話號碼\n"
+
+msgid " -o, --other OTHER_INFO change user's other GECOS information\n"
+msgstr " -o, --other 其他資訊 變更使用者的其他 GECOS 資訊\n"
+
+msgid " -r, --room ROOM_NUMBER change user's room number\n"
+msgstr " -r, --room 房間號碼 變更使用者的房間號碼\n"
+
+msgid " -u, --help display this help message and exit\n"
+msgstr " -u, --help 顯示說明訊息後離開\n"
+
+msgid " -w, --work-phone WORK_PHONE change user's office phone number\n"
+msgstr ""
+" -w, --work-phone 工作電話 變更使用者的辦公室電話號碼\n"
+"\n"
+
+msgid "Full Name"
+msgstr "全名"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s:%s\n"
+
+msgid "Room Number"
+msgstr "房間號碼"
+
+msgid "Work Phone"
+msgstr "工作電話"
+
+msgid "Home Phone"
+msgstr "家用電話"
+
+msgid "Other"
+msgstr "其它"
+
+msgid "Cannot change ID to root.\n"
+msgstr "無法將 ID 變更成 root。\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s:名稱有非 ASCII 字元:「%s」\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s:名稱無效:「%s」\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s:房間號碼有非 ASCII 字元:「%s」\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s:房間號碼無效:「%s」\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s:工作電話無效:「%s」\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s:家用電話無效:「%s」\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s:「%s」有非 ASCII 字元\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s:「%s」包含無效字元\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s:使用者「%s」不存在\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s:無法在 NIS 客戶端變更使用者「%s」。\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s:「%s」是此客戶端的 NIS 管理員。\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "正在變更 %s 的使用者資訊\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s:欄位過長\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"用法:%s [選項]\n"
+"\n"
+"選項:\n"
+
+#, c-format
+msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
+msgstr ""
+" -c, --crypt-method 方法 加密方法(%s 中的一個)\n"
+"\n"
+
+msgid " -e, --encrypted supplied passwords are encrypted\n"
+msgstr " -e, --encrypted 提供之密碼皆已被加密\n"
+
+msgid ""
+" -m, --md5 encrypt the clear text password using\n"
+" the MD5 algorithm\n"
+msgstr " -m, --md5 使用 MD5 算法加密此純文字密碼\n"
+
+#, fuzzy
+#| msgid ""
+#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
+#| " crypt algorithms\n"
+msgid ""
+" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+" crypt algorithms\n"
+msgstr " -s, --sha-rounds SHA* 加密算法的 SHA 回數\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s:%s 旗標僅允許搭配 %s 旗標\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s:-c、-e、-m 旗標互斥\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s:加密方式不支援:%s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s:第 %d 行:此行太長\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s:第 %d 行:缺少新密碼\n"
+
+#, c-format
+msgid "%s: failed to crypt password with salt '%s': %s\n"
+msgstr "%1$s:無法使用「%3$s」鹽 (salt) 加密密碼:%2$s\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s:第 %d 行:「%s」群組不存在\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s:第 %d 行:無法準備新 %s 項目「%s」\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s:偵測到錯誤,忽略變更\n"
+
+#, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s:(第 %d 行,使用者 %s)密碼未變更\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s:第 %d 行:使用者「%s」不存在\n"
+
+msgid " -s, --shell SHELL new login shell for the user account\n"
+msgstr " -s, --shell SHELL 用於此使用者帳號的新登入 Shell\n"
+
+msgid "Login Shell"
+msgstr "登入 Shell"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "您不能變更「%s」的 Shell。\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "正在變更 %s 的 shell\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s:項目無效:%s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell\n"
+msgstr "%s:%s 為無效 shell\n"
+
+#, c-format
+msgid "%s: Warning: %s does not exist\n"
+msgstr "%s:警告:%s 不存在\n"
+
+#, c-format
+msgid "%s: Warning: %s is not executable\n"
+msgstr "%s:警告:%s 不能執行\n"
+
+msgid " -c, --check check the user's password expiration\n"
+msgstr " -c, --check 檢查使用者密碼是否過期\n"
+
+msgid ""
+" -f, --force force password change if the user's "
+"password\n"
+" is expired\n"
+msgstr ""
+" -f, --force 如果使用者的密碼已經過期,則強制變更密碼\n"
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s:「%s」和「%s」選項衝突\n"
+
+#, c-format
+msgid "%s: unexpected argument: %s\n"
+msgstr "%s:非預期的參數:%s\n"
+
+msgid " -a, --all display faillog records for all users\n"
+msgstr " -a, --all 顯示所有使用者的 faillog 記錄\n"
+
+msgid ""
+" -l, --lock-secs SEC after failed login lock account for SEC "
+"seconds\n"
+msgstr " -l, --lock-secs SEC 登入失敗後,鎖定帳號 SEC 秒\n"
+
+msgid ""
+" -m, --maximum MAX set maximum failed login counters to MAX\n"
+msgstr " -m, --maximum MAX 將最大登入失敗計數器設定成 MAX\n"
+
+msgid " -r, --reset reset the counters of login failures\n"
+msgstr " -r, --reset 重設登入失敗計數器\n"
+
+msgid ""
+" -t, --time DAYS display faillog records more recent than "
+"DAYS\n"
+msgstr " -t, --time DAYS 顯示最近 DAYS 天的 faillog 記錄\n"
+
+msgid ""
+" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+" counters and limits (if used with -r, -m,\n"
+" or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+" -u, --user 使用者/範圍 顯示 faillog 記錄或維護失敗計數器及限制\n"
+" (如果與 -r、-m 或 -l 一起使用)\n"
+" 則僅顯示指定使用者的項目。\n"
+
+#, c-format
+msgid "%s: Failed to get the entry for UID %lu\n"
+msgstr "%s:無法取得 UID %lu 的項目\n"
+
+msgid "Login Failures Maximum Latest On\n"
+msgstr "登入 失敗數 最多 最近 時間\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr "[剩餘 %lu 秒]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [鎖定 %ld 秒]"
+
+#, c-format
+msgid "%s: Failed to reset fail count for UID %lu\n"
+msgstr "%s:無法重設 UID %lu 的失敗次數\n"
+
+#, c-format
+msgid "%s: Failed to set max for UID %lu\n"
+msgstr "%s:無法設定 UID %lu 的最大值\n"
+
+#, c-format
+msgid "%s: Failed to set locktime for UID %lu\n"
+msgstr "%s:無法設定 UID %lu 的鎖定時間\n"
+
+#, c-format
+msgid "%s: Unknown user or range: %s\n"
+msgstr "%s:使用者或範圍不明:%s\n"
+
+#, c-format
+msgid "%s: Cannot get the size of %s: %s\n"
+msgstr "%s:無法取得 %s 的大小:%s\n"
+
+#, c-format
+msgid "%s: Failed to write %s: %s\n"
+msgstr "%s:無法寫入 %s:%s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"用法:%s [選項] 群組\n"
+"\n"
+"選項:\n"
+
+msgid " -a, --add USER add USER to GROUP\n"
+msgstr " -a, --add 使用者 將 <使用者> 加入到 <群組>\n"
+
+msgid " -d, --delete USER remove USER from GROUP\n"
+msgstr " -d, --delete 使用者 從 <群組> 移除 <使用者>\n"
+
+msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
+msgstr " -Q, --root CHROOT_DIR 要 chroot 進去的目錄\n"
+
+msgid " -r, --remove-password remove the GROUP's password\n"
+msgstr " -r, --remove-password 移除 <群組> 的密碼\n"
+
+msgid ""
+" -R, --restrict restrict access to GROUP to its members\n"
+msgstr " -R, --restrict 限制成員對其群組的存取權限\n"
+
+msgid " -M, --members USER,... set the list of members of GROUP\n"
+msgstr " -M, --members 使用者,... 設定 <群組> 的成員列表\n"
+
+msgid ""
+" -A, --administrators ADMIN,...\n"
+" set the list of administrators for GROUP\n"
+msgstr ""
+" -A, --administrators 管理員,...\n"
+" 設定 <群組> 的管理員列表\n"
+
+msgid "Except for the -A and -M options, the options cannot be combined.\n"
+msgstr "除了 -A 和 -M 選項,只能指定一個選項。\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "不能結合選項。\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s:-A 需要 shadow 群組密碼\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s:「%s」群組不存在 %s\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s:關閉唯讀 %s 失敗\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "正在修改 %s 群組的密碼\n"
+
+msgid "New Password: "
+msgstr "新密碼:"
+
+msgid "Re-enter new password: "
+msgstr "再輸入一遍新密碼:"
+
+msgid "They don't match; try again"
+msgstr "兩者不同;請重試"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s:請稍後重試\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "正在將 %s 使用者加入到 %s 群組\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "正在將 %s 使用者從 %s 群組移除\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s:「%s」使用者並非「%s」中的一員\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s:不是 tty\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"用法:%s [選項] 群組\n"
+"\n"
+"選項:\n"
+
+#, fuzzy
+msgid ""
+" -f, --force exit successfully if the group already "
+"exists,\n"
+" and cancel -g if the GID is already used\n"
+msgstr ""
+" -f, --force 如果群組已經存在,則成功結束,\n"
+" 如果 GID 已經使用過,則取消 -g\n"
+
+msgid " -g, --gid GID use GID for the new group\n"
+msgstr " -g, --gid GID 對新群組使用 GID\n"
+
+msgid " -K, --key KEY=VALUE override /etc/login.defs defaults\n"
+msgstr " -K, --key 鍵=值 覆蓋 /etc/login.defs 中的預設值\n"
+
+msgid ""
+" -o, --non-unique allow to create groups with duplicate\n"
+" (non-unique) GID\n"
+msgstr " -o, --non-unique 允許使用重複(非唯一) GID 建立群組\n"
+
+msgid ""
+" -p, --password PASSWORD use this encrypted password for the new "
+"group\n"
+msgstr " -p, --password 密碼 對此新群組使用此已加密密碼\n"
+
+msgid " -r, --system create a system account\n"
+msgstr " -r, --system 建立系統帳號\n"
+
+msgid " -P, --prefix PREFIX_DIR directory prefix\n"
+msgstr " -P, --prefix 目錄前綴 目錄前綴\n"
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s:「%s」非有效群組名稱\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s:GID「%s」無效\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s:-K 需要「鍵=值」\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s:「%s」群組已存在\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s:「%lu」GID 已存在\n"
+
+#, c-format
+msgid "%s: Cannot setup cleanup service.\n"
+msgstr "%s:無法安裝清理服務。\n"
+
+msgid ""
+" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
+"* files\n"
+msgstr " -P, --prefix 目錄前綴 對放在 /etc/* 之目錄檔案加上前綴\n"
+
+msgid ""
+" -f, --force delete group even if it is the primary group "
+"of a user\n"
+msgstr ""
+" -f, --force 即便該群組是某使用者的主要群組也仍刪除\n"
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%1$s:無法刪除 %3$s 中的「%2$s」項目\n"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s:無法移除「%s」使用者的主要群組\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s:「%s」群組不存在\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s:「%s」群組為 NIS 群組\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s:%s 是 NIS 管理員\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s:「%s」使用者已是「%s」的一員\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s:記憶體不足。無法更新 %s。\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [action]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"用法:%s [選項] [動作]\n"
+"\n"
+"選項:\n"
+
+msgid ""
+" -g, --group groupname change groupname instead of the user's "
+"group\n"
+" (root only)\n"
+msgstr ""
+" -g, --group 群組名稱 變更 <群組名稱> 而非使用者的群組\n"
+" (僅 root 可用)\n"
+
+msgid "\n"
+msgstr "\n"
+
+msgid "Actions:\n"
+msgstr "動作:\n"
+
+msgid ""
+" -a, --add username add username to the members of the group\n"
+msgstr " -a, --add 使用者名稱 將使用者加入成為群組中的一員\n"
+
+msgid ""
+" -d, --delete username remove username from the members of the "
+"group\n"
+msgstr " -d, --delete 使用者名稱 將 <使用者名稱> 從群組成員中移除\n"
+
+msgid " -p, --purge purge all members from the group\n"
+msgstr " -p, --purge 清除群組中的所有成員\n"
+
+msgid " -l, --list list the members of the group\n"
+msgstr " -l, --list 列出群組成員\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s:您的群組名稱與使用者名稱不符\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s:只有 root 才能使用 -g/--group 選項\n"
+
+msgid " -g, --gid GID change the group ID to GID\n"
+msgstr " -g, --gid GID 將群組 ID 變更成 GID\n"
+
+msgid " -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"
+msgstr " -n, --new-name 新群組 將名稱變更成 <新群組>\n"
+
+msgid ""
+" -o, --non-unique allow to use a duplicate (non-unique) GID\n"
+msgstr " -o, --non-unique 允許使用重複(不唯一)GID\n"
+
+msgid ""
+" -p, --password PASSWORD change the password to this (encrypted)\n"
+" PASSWORD\n"
+msgstr " -p, --password 密碼 將密碼變更成此(已加密)<密碼>\n"
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s:群組名稱「%s」無效\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s:%s 群組是 NIS 群組\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s:未知使用者 %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group [gshadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"用法:%s [選項] [群組 [gshadow]]\n"
+"\n"
+"選項:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [group]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"用法:%s [選項] [群組]\n"
+"\n"
+"選項:\n"
+
+msgid ""
+" -r, --read-only display errors and warnings\n"
+" but do not change files\n"
+msgstr ""
+" -r, --read-only 會顯示錯誤及警告,\n"
+" 但不變更檔案\n"
+"\n"
+
+msgid " -s, --sort sort entries by UID\n"
+msgstr " -s, --sort 依 UID 排序項目\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s:-s 和 -r 是互不相容的\n"
+
+msgid "invalid group file entry"
+msgstr "無效的群組檔案項目"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "刪除「%s」行?"
+
+msgid "duplicate group entry"
+msgstr "複製群組項目"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "無效的群組名稱「%s」\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "無效的群組 ID「%lu」\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "%s 群組:無使用者 %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "刪除成員「%s」嗎?"
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "未在 %s 找到符合的群組檔案項目\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "在 %2$s 新增 '%1$s' 群組?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr "%s 群組有存在 %s 的項目,但其在 %s 的密碼欄位未設定成 'x'\n"
+
+msgid "invalid shadow group file entry"
+msgstr "無效的shadow群組檔案項目"
+
+msgid "duplicate shadow group entry"
+msgstr "複製shadow群組項目"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "%s shadow群組:無系統管理者 %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "刪除管理成員 '%s'?"
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "%s shadow群組:無使用者 %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s:檔案已被更新\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s:無改變\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s:無法刪除 %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "用法:id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "用法:id\n"
+
+msgid " groups="
+msgstr " 群組="
+
+msgid ""
+" -b, --before DAYS print only lastlog records older than DAYS\n"
+msgstr " -b, --before DAYS 僅輸出舊於 DAYS 天的 lastlog 記錄\n"
+
+msgid ""
+" -C, --clear clear lastlog record of an user (usable only "
+"with -u)\n"
+msgstr ""
+" -C, --clear 清空某使用者的 lastlog 記錄 (僅在使用 -u 時有"
+"用)\n"
+
+msgid ""
+" -S, --set set lastlog record to current time (usable "
+"only with -u)\n"
+msgstr ""
+" -S, --set 將 lastlog 記錄設成目前時間 (僅在使用 -u 時有"
+"用)\n"
+
+msgid ""
+" -t, --time DAYS print only lastlog records more recent than "
+"DAYS\n"
+msgstr " -t, --time DAYS 僅顯示最近 DAYS 天的 lastlog 記錄\n"
+
+msgid ""
+" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
+msgstr " -u, --user 使用者 輸出 <使用者> 的 lastlog 記錄\n"
+
+msgid "Username Port From Latest"
+msgstr "使用者名 埠號 來自 最後登入時間"
+
+msgid "Username Port Latest"
+msgstr "使用者名 埠號 最後登入時間"
+
+msgid "**Never logged in**"
+msgstr "**從未登入過**"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthe output might be incorrect.\n"
+msgstr ""
+"%s: 選取的 UID 大於 LASTLOG_UID_MAX (%lu),\n"
+"\t輸出結果可能會不正確。\n"
+
+#, c-format
+msgid "%s: Failed to update the entry for UID %lu\n"
+msgstr "%s:無法更新 UID %lu 的項目\n"
+
+#, c-format
+msgid ""
+"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+"\tthey will not be updated.\n"
+msgstr ""
+"%s: 選取的 UID 大於 LASTLOG_UID_MAX (%lu),\n"
+"\t將不會更新。\n"
+
+#, c-format
+msgid "%s: Failed to update the lastlog file\n"
+msgstr "%s:無法更新 lastlog 檔案\n"
+
+#, c-format
+msgid "%s: Option -C cannot be used together with option -S\n"
+msgstr "%s:-C 選項不能與 -S 選項結合使用\n"
+
+#, c-format
+msgid "%s: Options -C and -S require option -u to specify the user\n"
+msgstr "%s:-C 和 -S 選項需要 -u 選項來指定使用者\n"
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "用法:%s [-p] [名稱]\n"
+
+#, c-format
+msgid " %s [-p] [-h host] [-f name]\n"
+msgstr " %s [-p] [-h 主機] [-f 名稱]\n"
+
+#, c-format
+msgid " %s [-p] -r host\n"
+msgstr " %s [-p] -r 主機\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr "組態設定錯誤 - 無法解析 %s 的值:'%d'"
+
+msgid "Invalid login time"
+msgstr "無效的登入時間"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"系統關閉,例行維護"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[忽略斷線要求 -- 允許 root 登入。]"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr "%s: 可能無法在無有效 root 時運作\n"
+
+msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
+msgstr "無 utmp 項目。您必須在最低階的 \"sh\" 執行 \"login\""
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"登入逾時,已過 %u 秒。\n"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM 失敗,中止:%s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s 使用者:"
+
+msgid "login: "
+msgstr "使用者:"
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "已碰到最大嘗試次數 (%u)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: PAM 請求中止\n"
+
+msgid "Login incorrect"
+msgstr "登入錯誤"
+
+#, c-format
+msgid "Cannot find user (%s)\n"
+msgstr "找不到使用者 (%s)\n"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+" %s 使用者名稱:"
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: 無法 fork:%s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "%s 執行 TIOCSCTTY 失敗"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "警告:在短暫的鎖定後將恢復登入。"
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "上次登入:%s 在 %s 上"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "上次登入:%.19s 在 %s 上"
+
+#, c-format
+msgid " from %.*s"
+msgstr " 來自 %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"登入時間逾時\n"
+"\n"
+
+msgid "Usage: logoutd\n"
+msgstr "用法:logoutd\n"
+
+#, c-format
+msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid "%s: kernel doesn't support setgroups restrictions\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: can't open group file\n"
+msgid "%s: couldn't open process setgroups: %s\n"
+msgstr "%s:無法打開群組檔案\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to read setgroups: %s\n"
+msgstr "%s:無法移除 %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to remove %s\n"
+msgid "%s: failed to seek setgroups: %s\n"
+msgstr "%s:無法移除 %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to unlock %s\n"
+msgid "%s: failed to setgroups %s policy: %s\n"
+msgstr "%s:無法解鎖 %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to find tcb directory for %s\n"
+msgid "%s: Could not open proc directory for target %u\n"
+msgstr "%s:找不到 %s 的 tcb 目錄\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Failed to create tcb directory for %s\n"
+msgid "%s: Could not stat directory for target %u\n"
+msgstr "%s:無法對 %s 建立 tcb 目錄\n"
+
+#, c-format
+msgid ""
+"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
+"gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "用法:newgrp [-] [群組]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "用法:sg 群組 [[-c] 命令]\n"
+
+#, c-format
+msgid "%s: failed to crypt password with previous salt: %s\n"
+msgstr "%s:無法使用上一次的 salt 加密密碼:%s\n"
+
+msgid "Invalid password.\n"
+msgstr "密碼無效。\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s:fork 失敗:%s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s:「%lu」群組 ID 不存在\n"
+
+msgid "too many groups\n"
+msgstr "使用者群組過多\n"
+
+#, c-format
+msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
+"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
+msgstr ""
+
+#, fuzzy
+#| msgid " -q, --quiet quiet mode\n"
+msgid " -b, --badnames allow bad names\n"
+msgstr " -q, --quiet 安靜模式\n"
+
+msgid " -r, --system create system accounts\n"
+msgstr " -r, --system 建立系統帳號\n"
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s:「%s」群組是 shadow 群組,但不存在 /etc/group\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s:使用者 ID「%s」無效\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s:無效使用者名稱「%s」\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s:第 %d 行:無效行\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s:無法更新 %s 使用者的項目(不存在 passwd 資料庫)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s:第 %d 行:無法建立使用者\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s:第 %d 行:無法建立群組\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s:第 %d 行:「%s」使用者不存在 %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s:第 %d 行:無法更新密碼\n"
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s:第 %d 行:建立 %s 目錄失敗:%s\n"
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s:第 %d 行:變更 %s 的擁有權失敗:%s\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s:第 %d 行:無法更新項目\n"
+
+#, c-format
+msgid "%s: failed to prepare new %s entry\n"
+msgstr "%s:無法準備新 %s 項目\n"
+
+#, c-format
+msgid "%s: can't find subordinate user range\n"
+msgstr "%s:找不到次級使用者範圍\n"
+
+#, c-format
+msgid "%s: can't find subordinate group range\n"
+msgstr "%s:找不到次級群組範圍\n"
+
+msgid ""
+" -a, --all report password status on all accounts\n"
+msgstr " -a, --all 回報所有帳號的密碼狀態\n"
+
+msgid ""
+" -d, --delete delete the password for the named account\n"
+msgstr " -d, --delete 刪除已命名帳號的密碼\n"
+
+msgid ""
+" -e, --expire force expire the password for the named "
+"account\n"
+msgstr " -e, --expire 強制讓已命名帳號的密碼過期\n"
+
+msgid " -k, --keep-tokens change password only if expired\n"
+msgstr " -k, --keep-tokens 僅在密碼過期時才變更\n"
+
+msgid ""
+" -i, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid ""
+" -l, --lock lock the password of the named account\n"
+msgstr " -l, --lock 鎖定已命名帳號的密碼\n"
+
+msgid ""
+" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+" change to MIN_DAYS\n"
+msgstr ""
+
+msgid " -q, --quiet quiet mode\n"
+msgstr " -q, --quiet 安靜模式\n"
+
+msgid ""
+" -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+msgstr ""
+" -r, --repository 儲存庫 變更 <儲存庫> 中的密碼\n"
+"\n"
+
+msgid ""
+" -S, --status report password status on the named account\n"
+msgstr " -S, --status 回報已命名帳號的密碼狀態\n"
+
+msgid ""
+" -u, --unlock unlock the password of the named account\n"
+msgstr " -u, --unlock 解開已命名帳號的密碼鎖定\n"
+
+msgid ""
+" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+msgstr " -w, --warndays WARN_DAYS 將過期警告天數設成 WARN_DAYS 天\n"
+
+msgid ""
+" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+" change to MAX_DAYS\n"
+msgstr ""
+
+msgid "Old password: "
+msgstr "舊密碼:"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"請輸入新密碼(最少 %d 個字元)\n"
+"請包含大小寫字母及數字。\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"請輸入新密碼(最少 %d 最多 %d 個字元)\n"
+"請混合使用大小寫字母和數字。\n"
+
+msgid "New password: "
+msgstr "新密碼:"
+
+msgid "Try again."
+msgstr "重試。"
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"警告:脆弱的密碼(重新輸入以強制使用它)。"
+
+msgid "They don't match; try again.\n"
+msgstr "他們並不匹配﹔請重試。\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "無法更改 %s 的密碼。\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "尚無法變更 %s 的密碼。\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: 解除密碼鎖定可能會導致帳號沒有密碼。\n"
+"你需要使用 usermod -p 設定密碼,來解鎖這隻帳號的密碼。\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s:不支持 %s 套件存庫。\n"
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not authorized to change the password of %s\n"
+msgid "%s: root is not authorized by SELinux to change the password of %s\n"
+msgstr "%s: 未授權 %s 變更 %s 的密碼\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s:您無法替 %s 檢視或修改密碼資訊。\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "正在為 %s 修改密碼\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "%s 的密碼未被改變。\n"
+
+#, c-format
+msgid "%s: password changed.\n"
+msgstr "%s:密碼已變更。\n"
+
+#, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "%s:已變更密碼過期資訊。\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"用法:%s [選項] [passwd]\n"
+"\n"
+"選項:\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] [passwd [shadow]]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"用法:%s [選項] [passwd [shadow]]\n"
+"\n"
+"選項:\n"
+
+msgid " -q, --quiet report errors only\n"
+msgstr " -q, --quiet 僅回報錯誤\n"
+
+#, c-format
+msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
+msgstr "%s: USE_TCB 啟用時,不允許替代 shadow 檔案。\n"
+
+msgid "invalid password file entry"
+msgstr "無效的密碼檔案項目"
+
+msgid "duplicate password entry"
+msgstr "重復的密碼項目"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "無效的使用者名稱「%s」\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "使用者 ID '%lu' 無效\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "使用者「%s」:沒有群組 %lu\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "使用者「%s」:不存在「%s」目錄\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "使用者「%s」:不存在「%s」程式\n"
+
+#, c-format
+msgid "no tcb directory for %s\n"
+msgstr "沒有 %s 的 tcb 目錄\n"
+
+#, c-format
+msgid "create tcb directory for %s?"
+msgstr "建立 %s 的 tcb 目錄?"
+
+#, c-format
+msgid "failed to create tcb directory for %s\n"
+msgstr "無法建立 %s 的 tcb 目錄\n"
+
+#, c-format
+msgid "%s: cannot lock %s.\n"
+msgstr "%s:無法鎖定 %s。\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "未在 %s 中找到符合的密碼檔項目\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "在 %2$s 新增「%1$s」使用者?"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr "%2$s 有 %1$s 使用者的項目,但其在 %3$s 中的密碼欄位未設成 'x'\n"
+
+msgid "invalid shadow password file entry"
+msgstr "無效的shadow密碼檔案項目"
+
+msgid "duplicate shadow password entry"
+msgstr "重復的shadow密碼項目"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "使用者 %s:最近一次密碼更動\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s:無法排序 %s 中的項目\n"
+
+#, c-format
+msgid "%s: can't work with tcb enabled\n"
+msgstr "%s:無法在 tcb 啟用時運作\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: 無法變更 %s 的模式成 0600\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "su 到該帳戶被拒。\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "忽略密碼認証\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "請輸入您自己的密碼作為驗証。\n"
+
+#, c-format
+msgid "%s: Cannot fork user shell\n"
+msgstr "%s:無法 fork 使用者 shell\n"
+
+#, c-format
+msgid "%s: signal malfunction\n"
+msgstr "%s: 訊號發生問題\n"
+
+#, c-format
+msgid "%s: signal masking malfunction\n"
+msgstr "%s: 訊號遮罩發生問題\n"
+
+msgid "Session terminated, terminating shell..."
+msgstr "已終止工作階段,正在終止 shell..."
+
+#, c-format
+msgid " ...killed.\n"
+msgstr " ...已強制結束。\n"
+
+#, c-format
+msgid " ...waiting for child to terminate.\n"
+msgstr " ...等待子處理程序終止。\n"
+
+msgid " ...terminated.\n"
+msgstr " ...已終止。\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s:%s\n"
+
+msgid ""
+"Usage: su [options] [-] [username [args]]\n"
+"\n"
+"Options:\n"
+" -c, --command COMMAND pass COMMAND to the invoked shell\n"
+" -h, --help display this help message and exit\n"
+" -, -l, --login make the shell a login shell\n"
+" -m, -p,\n"
+" --preserve-environment do not reset environment variables, and\n"
+" keep the same shell\n"
+" -s, --shell SHELL use SHELL instead of the default in passwd\n"
+"\n"
+"If no username is given, assume root.\n"
+msgstr ""
+"用法:su [選項] [-] [使用者名稱 [參數]]\n"
+"\n"
+"選項:\n"
+" -c, --command 指令 將 <指令> 傳遞到呼叫的 shell\n"
+" -h, --help 顯示此說明訊息後離開\n"
+" -, -l, --login 使該 shell 成為登入 shell\n"
+" -m, -p,\n"
+" --preserve-environment 不重設環境變數,並保留相同 shell\n"
+" -s, --shell SHELL 使用 SHELL 而非 passwd 的預設 shell\n"
+"\n"
+"若未指定 <使用者名稱>,則假設成 root。\n"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s:%s\n"
+"(忽略)\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "您沒有被授權 su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(請輸入您自己的密碼)"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s:驗證失敗\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s:目前您尚未授權使用 su\n"
+
+#, c-format
+msgid "No passwd entry for user '%s'\n"
+msgstr "沒有使用者「%s」的 passwd 項目\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s:必須從終端中執行\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s:pam_start:錯誤 %d\n"
+
+# 28.2 Controlling Terminal of a Process
+# A session leader that has control of a terminal is called the controlling process of that terminal....
+#
+# https://www.gnu.org/software/libc/manual/html_node/Controlling-Terminal.html
+#, c-format
+msgid "%s: Cannot drop the controlling terminal\n"
+msgstr "%s:無法捨棄控制中終端機\n"
+
+#, c-format
+msgid "Cannot execute %s\n"
+msgstr "無法執行 %s\n"
+
+msgid "No password file"
+msgstr "沒有密碼檔案"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY 失敗"
+
+msgid "No password entry for 'root'"
+msgstr "沒有「root」的密碼項目"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"按下 control-d 即可繼續使用普通帳戶環境,\n"
+"(或者輸入 root 密碼以進行系統維護):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "正在進入系統維護模式"
+
+#, c-format
+msgid "%s: %s was created, but could not be removed\n"
+msgstr "%s: %s 已經建立,但是無法移除\n"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr "%1$s: 會忽略 %3$s 中的 %2$s 組態設定檔\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file: %s\n"
+msgstr "%s:無法建立新的預設檔案:%s\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s:無法建立新的預設檔案\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s:無法打開新的預設檔案\n"
+
+#, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s:%s 中的行過長:%s..."
+
+#, c-format
+msgid "%s: Cannot create backup file (%s): %s\n"
+msgstr "%s:無法建立備份檔案 (%s):%s\n"
+
+#, c-format
+msgid "%s: rename: %s: %s\n"
+msgstr "%s:重新命名:%s:%s\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s:群組「%s」是 NIS 群組。\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s:指定了過多群組(最多 %d)。\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] LOGIN\n"
+" %s -D\n"
+" %s -D [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"用法:%s [選項] 帳號\n"
+" %s -D\n"
+" %s -D [選項]\n"
+"\n"
+"選項:\n"
+
+#, fuzzy
+#| msgid " -s, --shadow edit shadow or gshadow database\n"
+msgid " --badnames do not check for bad names\n"
+msgstr " -s, --shadow 編輯 shadow 或 gshadow 資料庫\n"
+
+msgid ""
+" -b, --base-dir BASE_DIR base directory for the home directory of "
+"the\n"
+" new account\n"
+msgstr ""
+" -b, --base-dir 基礎目錄 用於新帳號之家目錄的基礎目錄\n"
+"\n"
+
+msgid ""
+" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
+msgstr " --btrfs-subvolume-home 將 BTRFS 子磁碟區用於家目錄\n"
+
+msgid " -c, --comment COMMENT GECOS field of the new account\n"
+msgstr " -c, --comment 備註 新帳號的 GECOS 欄位\n"
+
+msgid " -d, --home-dir HOME_DIR home directory of the new account\n"
+msgstr " -d, --home-dir 家目錄 新帳號的家目錄\n"
+
+msgid ""
+" -D, --defaults print or change default useradd "
+"configuration\n"
+msgstr " -D, --defaults 輸出或變更預設的 useradd 組態設定\n"
+
+msgid " -e, --expiredate EXPIRE_DATE expiration date of the new account\n"
+msgstr " -e, --expiredate 過期日期 新帳號的過期日期\n"
+
+msgid ""
+" -f, --inactive INACTIVE password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+" -g, --gid GROUP name or ID of the primary group of the new\n"
+" account\n"
+msgstr " -g, --gid 群組 新帳號之主群組的名稱或 ID\n"
+
+msgid ""
+" -G, --groups GROUPS list of supplementary groups of the new\n"
+" account\n"
+msgstr ""
+" -G, --groups 群組 新帳號的增補群組列表\n"
+"\n"
+
+msgid ""
+" -k, --skel SKEL_DIR use this alternative skeleton directory\n"
+msgstr " -k, --skel SKEL_DIR 使用此備用基本結構 (skeleton) 目錄\n"
+
+msgid ""
+" -l, --no-log-init do not add the user to the lastlog and\n"
+" faillog databases\n"
+msgstr ""
+" -l, --no-log-init 不將使用者加入至 lastlog 及 faillog\n"
+" 資料庫\n"
+
+msgid " -m, --create-home create the user's home directory\n"
+msgstr " -m, --create-home 建立使用者的家目錄\n"
+
+msgid ""
+" -M, --no-create-home do not create the user's home directory\n"
+msgstr " -M, --no-create-home 不建立使用者的家目錄\n"
+
+msgid ""
+" -N, --no-user-group do not create a group with the same name as\n"
+" the user\n"
+msgstr " -N, --no-user-group 不建立與使用者同名的群組\n"
+
+msgid ""
+" -o, --non-unique allow to create users with duplicate\n"
+" (non-unique) UID\n"
+msgstr " -o, --non-unique 允許建立重複 (非唯一) UID 的使用者\n"
+
+msgid " -p, --password PASSWORD encrypted password of the new account\n"
+msgstr " -p, --password 密碼 新帳號的已加密密碼\n"
+
+msgid " -s, --shell SHELL login shell of the new account\n"
+msgstr " -s, --shell SHELL 新帳號的登入 shell\n"
+
+msgid " -u, --uid UID user ID of the new account\n"
+msgstr " -u, --uid UID 新帳號的使用者 ID\n"
+
+msgid ""
+" -U, --user-group create a group with the same name as the "
+"user\n"
+msgstr " -U, --user-group 建立與使用者同名的群組\n"
+
+msgid ""
+" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+" -Z, --selinux-user SEUSER 使用指定的 SEUSER 來用於 SELinux 使用者映射\n"
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s:基礎目錄「%s」無效\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s:備註「%s」無效\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s:家目錄「%s」無效\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s:-e 參數需要有shadow密碼\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s:-f 參數需要有shadow密碼\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s:欄位「%s」無效\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s:shell「%s」無效\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Warning: %s is not executable\n"
+msgid "%s: Warning: missing or non-executable shell '%s'\n"
+msgstr "%s:警告:%s 不能執行\n"
+
+#, c-format
+msgid "%s: -Z cannot be used with --prefix\n"
+msgstr "%s:-Z 不能跟 --prefix 一起使用\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr "%s: -Z 需要啟用 SELinux 的核心\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr "%s: 無法重設 UID %lu 的 faillog 項目:%s\n"
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr "%s: 無法重設 UID %lu 的 lastlog 項目:%s\n"
+
+#, c-format
+msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
+msgstr "%s:無法重設「%s」使用者的 tallylog 項目\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry\n"
+msgstr "%s:無法準備新 %s 項目\n"
+
+#, c-format
+msgid "%s: error while duplicating string %s\n"
+msgstr "%s:複製字串 %s 時發生錯誤\n"
+
+#, c-format
+msgid "%s: cannot set SELinux context for home directory %s\n"
+msgstr "%s:無法對家目錄 %s 設定 SELinux 上下文\n"
+
+#, c-format
+msgid "%s: error while duplicating string in BTRFS check %s\n"
+msgstr "%s: 複製 BTRFS 檢查 (check) %s 中的字串時發生錯誤\n"
+
+#, c-format
+msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
+msgstr "%s:「%s」家目錄必須掛載於 BTRFS\n"
+
+#, c-format
+msgid "%s: failed to create BTRFS subvolume: %s\n"
+msgstr "%s:無法建立 BTRFS 子磁碟區:%s\n"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s:無法建立目錄 %s\n"
+
+#, c-format
+msgid "%s: warning: chown on `%s' failed: %m\n"
+msgstr "%s:警告:在「%s」上變更所有權失敗:%m\n"
+
+#, c-format
+msgid "%s: warning: chmod on `%s' failed: %m\n"
+msgstr "%s:警告:在「%s」上變更權限失敗:%m\n"
+
+#, c-format
+msgid "%s: cannot reset SELinux file creation context\n"
+msgstr "%s: 無法重設 SELinux 檔案建立上下文\n"
+
+msgid "Creating mailbox file"
+msgstr "正在建立 mailbox 檔案"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr "找不到 'mail' 群組。將建立模式為 0600 的使用者 mailbox 檔案。\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "正在設定 mailbox 檔案的權限"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s:「%s」使用者已存在\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s:%s 群組已經存在 - 如果您想將此使用者加入到該群組,請使用 -g 參數。\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s:無法建立使用者\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s:UID %lu 非唯一 UID\n"
+
+#, c-format
+msgid "%s: Failed to create tcb directory for %s\n"
+msgstr "%s:無法對 %s 建立 tcb 目錄\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s:無法建立群組\n"
+
+#, c-format
+msgid "%s: can't create subordinate user IDs\n"
+msgstr "%s:無法建立次級使用者 ID\n"
+
+#, c-format
+msgid "%s: can't create subordinate group IDs\n"
+msgstr "%s:無法建立次級群組 ID\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: warning: the home directory already exists.\n"
+#| "Not copying any file from skel directory into it.\n"
+msgid ""
+"%s: warning: the home directory %s already exists.\n"
+"%s: Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: 警告:家目錄已存在。\n"
+"將不複製任何基礎結構目錄中的檔案至家目錄。\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr "%s: 警告:映射 %s 使用者名稱至 %s SELinux 使用者失敗。\n"
+
+msgid ""
+" -f, --force force removal of files,\n"
+" even if not owned by user\n"
+msgstr " -f, --force 即使使用者未擁有該檔案仍強制移除\n"
+
+msgid " -r, --remove remove home directory and mail spool\n"
+msgstr " -r, --remove 移除家目錄及 mail spool\n"
+
+msgid ""
+" -Z, --selinux-user remove any SELinux user mapping for the "
+"user\n"
+msgstr " -Z, --selinux-user 移除使用者的所有 SELinux 使用者映射\n"
+
+#, c-format
+msgid ""
+"%s: group %s not removed because it is not the primary group of user %s.\n"
+msgstr "%s:未移除群組 %s,因為其非使用者 %s 的主群組。\n"
+
+#, c-format
+msgid "%s: group %s not removed because it has other members.\n"
+msgstr "%s: 因 %s 群組有其他成員,因此未移除該群組。\n"
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr "%s:群組 %s 是其他使用者的主群組,因此不會移除。\n"
+
+#, c-format
+msgid "%s: cannot remove entry %lu from %s\n"
+msgstr "%1$s:無法從 %3$s 移除第 %2$lu 條項目\n"
+
+#, c-format
+msgid "%s: %s mail spool (%s) not found\n"
+msgstr "%s:找不到 %s mail spool (%s)\n"
+
+#, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s:警告:無法移除 %s:%s\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s:%s 並不屬於 %s,所以不會刪除\n"
+
+#, c-format
+msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
+msgstr "%s: 無法配置記憶體,不移除 %s 的 tcb 項目。\n"
+
+#, c-format
+msgid "%s: Cannot drop privileges: %s\n"
+msgstr "%s:無法捨棄權限:%s\n"
+
+#, c-format
+msgid "%s: Cannot remove the content of %s: %s\n"
+msgstr "%s:無法移除 %s 的內容:%s\n"
+
+#, c-format
+msgid "%s: Cannot remove tcb files for %s: %s\n"
+msgstr "%s:無法移除 %s 的 tcb 檔案:%s\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s:使用者 %s 是 NIS 使用者\n"
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s:找不到 %s 的家目錄 (%s)\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s:不能刪除目錄 %s (因為這將刪除使用者 %s 的主目錄)\n"
+
+#, c-format
+msgid "%s: error removing subvolume %s\n"
+msgstr "%s:移除 %s 子磁碟區時發生錯誤\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s:刪除目錄 %s 時出錯\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
+msgstr "%s: 警告:移除 %s 使用者名稱的 SELinux 使用者映射失敗。\n"
+
+msgid " -c, --comment COMMENT new value of the GECOS field\n"
+msgstr " -c, --comment 備註 設定 GECOS 欄位的新值\n"
+
+msgid ""
+" -d, --home HOME_DIR new home directory for the user account\n"
+msgstr " -d, --home HOME_DIR 設定使用者帳號的新家目錄\n"
+
+msgid ""
+" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"
+msgstr " -e, --expiredate 過期日期 設定帳號的過期日期\n"
+
+msgid ""
+" -f, --inactive INACTIVE set password inactive after expiration\n"
+" to INACTIVE\n"
+msgstr ""
+
+msgid " -g, --gid GROUP force use GROUP as new primary group\n"
+msgstr " -g, --gid 群組 強制將新的主群組設成 <群組>\n"
+
+msgid " -G, --groups GROUPS new list of supplementary GROUPS\n"
+msgstr " -G, --groups 群組 設定新的增補群組列表\n"
+
+msgid ""
+" -a, --append append the user to the supplemental GROUPS\n"
+" mentioned by the -G option without removing\n"
+" the user from other groups\n"
+msgstr ""
+" -a, --append 將使用者附加至 -G 選項所指定的增補群組,\n"
+" 而不將使用者從其他群組移除\n"
+
+msgid " -l, --login NEW_LOGIN new value of the login name\n"
+msgstr " -l, --login 新使用者名稱 設定使用者名稱的新值\n"
+
+msgid " -L, --lock lock the user account\n"
+msgstr " -L, --lock 鎖定使用者帳號\n"
+
+msgid ""
+" -m, --move-home move contents of the home directory to the\n"
+" new location (use only with -d)\n"
+msgstr ""
+" -m, --move-home 將家目錄的內容移至新位置 (僅能與 -d 結合使"
+"用)\n"
+
+msgid ""
+" -o, --non-unique allow using duplicate (non-unique) UID\n"
+msgstr " -o, --non-unique 允許使用重複 (非唯一) UID\n"
+
+msgid ""
+" -p, --password PASSWORD use encrypted password for the new password\n"
+msgstr " -p, --password 密碼 將新密碼設定成加密過的密碼\n"
+
+msgid " -u, --uid UID new UID for the user account\n"
+msgstr " -u, --uid UID 使用者帳號的新 UID\n"
+
+msgid " -U, --unlock unlock the user account\n"
+msgstr " -U, --unlock 解鎖使用者帳號\n"
+
+msgid " -v, --add-subuids FIRST-LAST add range of subordinate uids\n"
+msgstr " -v, --add-subuids 開頭-結尾 新增次級 UID 的範圍\n"
+
+msgid " -V, --del-subuids FIRST-LAST remove range of subordinate uids\n"
+msgstr " -V, --del-subuids 開頭-結尾 移除次級 UID 的範圍\n"
+
+msgid " -w, --add-subgids FIRST-LAST add range of subordinate gids\n"
+msgstr " -w, --add-subgids 開頭-結尾 新增次級 GID 的範圍\n"
+
+msgid " -W, --del-subgids FIRST-LAST remove range of subordinate gids\n"
+msgstr " -W, --del-subgids 開頭-結尾 移除次級 GID 的範圍\n"
+
+msgid ""
+" -Z, --selinux-user SEUSER new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+" -Z, --selinux-user SEUSER 對使用者帳戶設定新 SELinux 使用者映射\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: 解鎖使用者密碼可能會導致帳號沒有密碼。\n"
+"您應使用 usermod -p 設定密碼,以解鎖這位使用者的密碼。\n"
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s:使用者「%s」已存在於 %s\n"
+
+#, c-format
+msgid "%s: invalid subordinate uid range '%s'\n"
+msgstr "%s:次級 UID 範圍「%s」無效\n"
+
+#, c-format
+msgid "%s: invalid subordinate gid range '%s'\n"
+msgstr "%s:次級 GID 範圍「%s」無效\n"
+
+#, c-format
+msgid "%s: no options\n"
+msgstr "%s:沒有選項\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: -L、-p 及 -U 旗標互斥\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s:-e 和 -f 參數需要shadow密碼\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: 已存在 '%lu' UID\n"
+
+#, c-format
+msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
+msgstr "%s: %s 不存在,因此不能使用 %s 或 %s 旗標\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s:目錄 %s 不存在\n"
+
+#, c-format
+msgid ""
+"%s: The previous home directory (%s) was not a directory. It is not removed "
+"and no home directories are created.\n"
+msgstr ""
+"%s: 上一個家目錄 (%s) 不是目錄。將不會移除該項目,且亦不建立任何家目錄。\n"
+
+#, c-format
+msgid "%s: Failed to change ownership of the home directory"
+msgstr "%s:無法變更家目錄的所有權"
+
+#, c-format
+msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
+msgstr "%s: 錯誤:無法移動 %s 子磁碟區至 %s - 裝置不同\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: 警告:無法完全移除 %s 舊家目錄"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s:無法將目錄 %s 改名為 %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr "%s: 無法複製使用者編號為 %lu 的 lastlog 項目至使用者 %lu:%s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr "%s: 無法複製使用者編號為 %lu 的 faillog 項目至使用者 %lu:%s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s:警告:%s 不屬於 %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "改變信箱所有者失敗"
+
+msgid "failed to rename mailbox"
+msgstr "無法為信箱改名"
+
+#, c-format
+msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
+msgstr "%1$s:無法從「%4$s」移除 UID 範圍 %2$lu-%3$lu\n"
+
+#, c-format
+msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
+msgstr "%s:無法新增 UID 範圍 %lu-%lu 至「%s」\n"
+
+#, c-format
+msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
+msgstr "%1$s:無法從「%4$s」移除 GID 範圍 %2$lu-%3$lu\n"
+
+#, c-format
+msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
+msgstr "%s:無法新增 GID 範圍 %lu-%lu 至「%s」\n"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"您已變更 %s。\n"
+"您需要修改 %s 以達成一致性。\n"
+"請使用「%s」指令達成。\n"
+
+msgid " -g, --group edit group database\n"
+msgstr " -g, --group 編輯群組資料庫\n"
+
+msgid " -p, --passwd edit passwd database\n"
+msgstr " -p, --passwd 編輯 passwd 資料庫\n"
+
+msgid " -s, --shadow edit shadow or gshadow database\n"
+msgstr " -s, --shadow 編輯 shadow 或 gshadow 資料庫\n"
+
+msgid " -u, --user which user's tcb shadow file to edit\n"
+msgstr " -u, --user 要變更 tcb shadow 檔案的使用者\n"
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s:無法移除 %s\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s:%s 未變更\n"
+
+msgid "failed to create scratch directory"
+msgstr "無法建立暫存目錄"
+
+msgid "failed to drop privileges"
+msgstr "無法捨棄權限"
+
+msgid "Couldn't get file context"
+msgstr "無法取得檔案上下文"
+
+msgid "setfscreatecon () failed"
+msgstr "setfscreatecon () 失敗"
+
+msgid "failed to gain privileges"
+msgstr "無法取得權限"
+
+msgid "Couldn't lock file"
+msgstr "無法鎖定檔案"
+
+msgid "Couldn't make backup"
+msgstr "無法備份"
+
+#, c-format
+msgid "%s: %s: %s\n"
+msgstr "%s:%s:%s\n"
+
+#, c-format
+msgid "%s: %s returned with status %d\n"
+msgstr "%s:%s 回傳狀態碼 %d\n"
+
+#, c-format
+msgid "%s: %s killed by signal %d\n"
+msgstr "%s: %s 被訊號 %d 強制中止\n"
+
+msgid "failed to open scratch file"
+msgstr "無法開啟暫存檔"
+
+msgid "failed to unlink scratch file"
+msgstr "無法取消暫存檔的連結"
+
+msgid "failed to stat edited file"
+msgstr "無法取得編輯過檔案的資訊"
+
+msgid "failed to allocate memory"
+msgstr "無法配置記憶體"
+
+msgid "failed to create backup file"
+msgstr "無法建立備份檔案"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s:無法復原 %s:%s (您的修改在 %s 中)\n"
+
+#, c-format
+msgid "%s: failed to find tcb directory for %s\n"
+msgstr "%s:找不到 %s 的 tcb 目錄\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "用法:%s [輸入]\n"
+
+#~ msgid "malloc(%d) failed\n"
+#~ msgstr "malloc(%d) 失敗\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: chage [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -d, --lastday LAST_DAY set date of last password change to "
+#~ "LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --list show account aging information\n"
+#~ " -m, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "用法:chage [選項] 使用者\n"
+#~ "\n"
+#~ "選項:\n"
+#~ " -d, --lastday LAST_DAY\t設定密碼的最後修改日期為 LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE\t設定帳號過期的日期為 EXPIRE\n"
+#~ " -h, --help\t\t\t顯示這份說明文字然後結束\n"
+#~ " -I, --inactive INACTIVE\t設定密碼在 INACTIVE 天後失效\n"
+#~ " -l, --list\t\t\t顯示帳號期限的相關資訊\n"
+#~ " -m, --mindays MIN_DAYS\t最少必須相隔 MIN_DAYS 天才能改變密碼\n"
+#~ " -M, --maxdays MAX_DAYS\t最多必須相隔 MIN_DAYS 天才能改變密碼\n"
+#~ " -W, --warndays WARN_DAYS\t密碼在過期前 WARN_DAYS 天會發出警告\n"
+#~ "\n"
+
+#~ msgid "%s: PAM authentication failed\n"
+#~ msgstr "%s:PAM 驗証失敗\n"
+
+#~ msgid ""
+#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+#~ "\t[-h home_ph] [-o other] [user]\n"
+#~ msgstr ""
+#~ "用法:%s [-f 全名] [-r 房間號] [-w 工作電話]\n"
+#~ "\t[-h 住家電話] [-o 其它] [使用者]\n"
+
+#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+#~ msgstr "用法:%s [-f 全名] [-r 房間號] [-w 工作電話] [-h 住家電話]\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -c, --crypt-method the crypt method (one of %s)\n"
+#~ " -e, --encrypted supplied passwords are encrypted\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -m, --md5 encrypt the clear text password using\n"
+#~ " the MD5 algorithm\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "用法:chpasswd [選項]\n"
+#~ "\n"
+#~ "選項:\n"
+#~ " -e, --encrypted\t所提供的密碼已經過加密\n"
+#~ " -h, --help\t\t顯示這份說明文字然後結束\n"
+#~ " -m, --md5\t\t如果所提供的密碼沒有加密,則使用 MD5 加密法\n"
+#~ "\t\t\t來替代 DES。\n"
+
+#~ msgid "Usage: expiry {-f|-c}\n"
+#~ msgstr "用法:expiry {-f|-c}\n"
+
+#, fuzzy
+#~| msgid "%s: cannot open file %s\n"
+#~ msgid "faillog: Cannot open %s: %s\n"
+#~ msgstr "%s:無法打開檔案 %s\n"
+
+#~ msgid "Usage: groupdel group\n"
+#~ msgstr "用法:groupdel 群組\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+#~ msgstr "用法:%s [-r] [-s] [群組 [gshadow]]\n"
+
+#~ msgid "Usage: %s [-r] [-s] [group]\n"
+#~ msgstr "用法:%s [-r] [-s] [群組]\n"
+
+#~ msgid "%s: -s and -r are incompatibile\n"
+#~ msgstr "%s:-s 和 -r 是互不相容的\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpconv\n"
+#~ msgstr "用法:groupdel 群組\n"
+
+#, fuzzy
+#~| msgid "Usage: groupdel group\n"
+#~ msgid "Usage: grpunconv\n"
+#~ msgstr "用法:groupdel 群組\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: lastlog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -b, --before DAYS print only lastlog records older than "
+#~ "DAYS\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -t, --time DAYS print only lastlog records more recent "
+#~ "than DAYS\n"
+#~ " -u, --user LOGIN print lastlog record of the specified "
+#~ "LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "用法:lastlog [選項]\n"
+#~ "\n"
+#~ "選項:\n"
+#~ " -h, --help\t\t顯示這份說明文字然後結束\n"
+#~ " -t, --time DAYS\t只列出 DAYS 天內的歷史記錄\n"
+#~ " -u, --user LOGIN\t根據指定的 LOGIN 列出該使用者最後的歷史記錄\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: passwd [options] [LOGIN]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all report password status on all accounts\n"
+#~ " -d, --delete delete the password for the named "
+#~ "account\n"
+#~ " -e, --expire force expire the password for the named "
+#~ "account\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -k, --keep-tokens change password only if expired\n"
+#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
+#~ " to INACTIVE\n"
+#~ " -l, --lock lock the password of the named account\n"
+#~ " -n, --mindays MIN_DAYS set minimum number of days before "
+#~ "password\n"
+#~ " change to MIN_DAYS\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
+#~ " -S, --status report password status on the named "
+#~ "account\n"
+#~ " -u, --unlock unlock the password of the named account\n"
+#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
+#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
+#~ "password\n"
+#~ " change to MAX_DAYS\n"
+#~ "\n"
+#~ msgstr ""
+#~ "用法:chage [選項] 使用者\n"
+#~ "\n"
+#~ "選項:\n"
+#~ " -d, --lastday LAST_DAY\t設定密碼的最後修改日期為 LAST_DAY\n"
+#~ " -E, --expiredate EXPIRE_DATE\t設定帳號過期的日期為 EXPIRE\n"
+#~ " -h, --help\t\t\t顯示這份說明文字然後結束\n"
+#~ " -I, --inactive INACTIVE\t設定密碼在 INACTIVE 天後失效\n"
+#~ " -l, --list\t\t\t顯示帳號期限的相關資訊\n"
+#~ " -m, --mindays MIN_DAYS\t最少必須相隔 MIN_DAYS 天才能改變密碼\n"
+#~ " -M, --maxdays MAX_DAYS\t最多必須相隔 MIN_DAYS 天才能改變密碼\n"
+#~ " -W, --warndays WARN_DAYS\t密碼在過期前 WARN_DAYS 天會發出警告\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
+#~ msgstr "用法:%s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+#~ msgstr "用法:%s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwconv\n"
+#~ msgstr "用法:id\n"
+
+#, fuzzy
+#~| msgid "Usage: id\n"
+#~ msgid "Usage: pwunconv\n"
+#~ msgstr "用法:id\n"
+
+#~ msgid "Unknown id: %s\n"
+#~ msgstr "未知 id:%s\n"
+
+#~ msgid "No shell\n"
+#~ msgstr "沒有 shell\n"
+
+#~ msgid "%s: no flags given\n"
+#~ msgstr "%s:沒有指定標誌\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: vipw [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -g, --group edit group database\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -p, --passwd edit passwd database\n"
+#~ " -q, --quiet quiet mode\n"
+#~ " -s, --shadow edit shadow or gshadow database\n"
+#~ " -u, --user which user's tcb shadow file to edit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "用法:lastlog [選項]\n"
+#~ "\n"
+#~ "選項:\n"
+#~ " -h, --help\t\t顯示這份說明文字然後結束\n"
+#~ " -t, --time DAYS\t只列出 DAYS 天內的歷史記錄\n"
+#~ " -u, --user LOGIN\t根據指定的 LOGIN 列出該使用者最後的歷史記錄\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid "Usage: %s [input]\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ msgstr "用法:%s [輸入]\n"
+
+#~ msgid "%s: can't create %s\n"
+#~ msgstr "%s:無法建立 %s\n"
+
+#~ msgid "%s: can't chown %s\n"
+#~ msgstr "%s:無法改變 %s 的所有者和群組\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -a, --all display faillog records for all users\n"
+#~ " -h, --help display this help message and exit\n"
+#~ " -l, --lock-time SEC after failed login lock account to SEC "
+#~ "seconds\n"
+#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
+#~ " -r, --reset reset the counters of login failures\n"
+#~ " -t, --time DAYS display faillog records more recent than "
+#~ "DAYS\n"
+#~ " -u, --user LOGIN display faillog record or maintains "
+#~ "failure\n"
+#~ " counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ " options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "用法:faillog [選項]\n"
+#~ "\n"
+#~ "選項:\n"
+#~ " -a, --all\t\t\t顯示所有的使用者的失敗記錄\n"
+#~ " -h, --help\t\t\t顯示這份說明文字然後結束\n"
+#~ " -l, --lock-time SEC\t\t在登入失敗後,關閉帳號 SEC 秒\n"
+#~ " -m, --maximum MAX\t\t設定最多能登入失敗 MAX 次\n"
+#~ " -r, --reset\t\t\t重新設定登入失敗計數\n"
+#~ " -t, --time DAYS\t\t顯示最近 DAYS 內的失敗記錄。\n"
+#~ " -u, --user LOGIN\t\t根據指定的 LOGIN 顯示其失敗記錄及目前的失敗計數\n"
+#~ "\t\t\t\t及限制(當和 -r、-m 或 -l 選項搭配使用時)\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "Password set to expire."
+#~ msgstr "您的密碼已過期。"
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s:無法鎖定密碼檔\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s:無法打開密碼文件\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s:無法鎖定shadow密碼文件\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s:無法打開影子密碼文件\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s:無法重寫shadow密碼檔案\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s:無法重寫密碼檔案\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s:無法更新shadow密碼檔案\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\t全名:%s\n"
+
+#, fuzzy
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "房間號碼"
+
+#, fuzzy
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "工作電話"
+
+#, fuzzy
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "住家電話"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "無法鎖定密碼檔案﹔稍後再試。\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "無法打開密碼檔案。\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "更改密碼項目時出錯。\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "無法提交密碼檔案變動。\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "無法解鎖密碼檔案。\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s:無法鎖定群組檔案\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s:無法鎖定 shadow 檔\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s:無法打開 shadow 檔\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s:更新shadow檔案時出錯。\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s:更新群組項目時出錯\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s:第 %d 行:未知使用者 %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s:第 %d 行:無法更新項目\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s:無法鎖定 shadow 檔\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s:更新shadow檔案時出錯。\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s:更新密碼檔案時出錯。\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s:第 %d 行:未知使用者 %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s:第 %d 行:無法更新密碼項目\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s:未知使用者\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "未知使用者:%s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "用法:%s [-r|-R] 群組\n"
+
+#~ msgid " %s [-a user] group\n"
+#~ msgstr " %s [-a 使用者] 群組\n"
+
+#~ msgid " %s [-d user] group\n"
+#~ msgstr " %s [-d 使用者] 群組\n"
+
+#~ msgid " %s [-A user,...] [-M user,...] group\n"
+#~ msgstr " %s [-A 使用者,...] [-M 使用者,...] 群組\n"
+
+#~ msgid " %s [-M user,...] group\n"
+#~ msgstr " %s [-M 使用者,...] 群組\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s:無法獲得鎖定\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s:無法獲得shadow鎖定\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s:無法重寫shadow檔案\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s 無法解鎖檔案。\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s:無法更新項目\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s:無法更新shadow項目\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "未知群組:%s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s:無法打開檔案\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s:無法打開 shadow 檔\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "你是誰?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s:未知成員 %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s:增加新群組項目時出錯\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s:無法重寫群組檔案\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s:無法重寫shadow群組檔案\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s:無法鎖定群組檔案\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s:無法打開群組檔案\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s:無法鎖定shadow群組檔案\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s:無法打開shadow群組檔案\n"
+
+#, fuzzy
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s:gid %u 並不唯一\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s:刪除群組項目時出錯\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s:刪除shadow群組項目時出錯\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s:不能刪除使用者的主群組。\n"
+
+#, fuzzy
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "%s:PAM 驗証失敗\n"
+
+#, fuzzy
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "%s:無法鎖定群組檔案\n"
+
+#, fuzzy
+#~ msgid "Cannot close group file\n"
+#~ msgstr "%s:無法打開群組檔案\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s:未在 /etc/group 中找到 %s\n"
+
+#, fuzzy
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s:%u 不是一個唯一的 gid\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s:%s 不是一個唯一的名稱\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s:無法重寫密碼檔案\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s:無法鎖定密碼檔案\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s:無法打開密碼檔案\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s:無法為 %s 更新shadow項目\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s:無法更新 %s 群組的項目\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s:無法鎖定shadow群組檔案\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s:無法打開shadow群組檔案\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s:無法移除shadow群組 %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s:無法更新shadow群組檔案\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s:無法刪除shadow群組檔案\n"
+
+#, fuzzy
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "未知的 GID:%lu\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "未知的 GID:%lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s:%s 群組不存在\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s:使用者 %s 不存在\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s:無效使用者名稱“%s”\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s:無法鎖定 /etc/passwd。\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s:無法鎖定 /etc/passwd。\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s:無法鎖定 /etc/passwd。\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s:無法鎖定 /etc/passwd。\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s:無法打開檔案\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s:無法為 %s 更新密碼項目\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s:無法鎖定密碼檔案\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s:無法打開密碼檔案\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s:無法為 %s 刪除shadow項目\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s:無法更新密碼檔案\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s:不能更新使用者 %s 的項目\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s:無法刪除shadow密碼檔案\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s:未知的 GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s:未知的群組 %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s:update_gshadow 時記憶體不足\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s:無法重寫shadow密碼檔案\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s:無法鎖定shadow密碼檔案\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s:無法打開shadow密碼檔案\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s:鎖定群組檔案時出錯\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s:打開群組檔案時出錯\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s:鎖定shadow群組檔案時出錯\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s:打開shadow群組檔案時出錯\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s:加入新密碼項目時出錯\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s:加入新shadow密碼項時出錯\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s:警告:CREATE_HOME 不支援,請使用 -m 參數。\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s:更新群組項目時出錯\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s:更新群組項目時出錯\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s:無法打開群組檔案\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s:無法打開shadow群組檔案\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s:刪除密碼項目時出錯\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s:刪除shadow密碼項目時出錯\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s:增加新群組項目時出錯\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s:uid %lu 不唯一\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s:改變密碼項目時出錯\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s:移除密碼項時出錯\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s:刪除shadow密碼項目時出錯\n"
+
+#, fuzzy
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s:無法獲取獨有的 gid\n"
+
+#, fuzzy
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " 在“%.100s”上,來自“%.200s”"
+
+#, fuzzy
+#~ msgid " on '%.100s'"
+#~ msgstr "在“%.100s”上"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s:第 %d 行:無法建立 UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s:名稱 %s 並不唯一\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ " -h, --help\t\tdisplay this help message and exit\n"
+#~ " -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "用法:chpasswd [選項]\n"
+#~ "\n"
+#~ "選項:\n"
+#~ " -e, --encrypted\t所提供的密碼已經過加密\n"
+#~ " -h, --help\t\t顯示這份說明文字然後結束\n"
+#~ " -m, --md5\t\t如果所提供的密碼沒有加密,則使用 MD5 加密法\n"
+#~ "\t\t\t來替代 DES。\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "沒有密碼檔案\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "抱歉。\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "抱歉,無法更改 %s 的密碼。\n"
+
+#~ msgid "Sorry."
+#~ msgstr "抱歉"
diff --git a/shadow.spec.in b/shadow.spec.in
new file mode 100644
index 0000000..0f9a958
--- /dev/null
+++ b/shadow.spec.in
@@ -0,0 +1,93 @@
+# shadow-utils.spec generated automatically from shadow-utils.spec.in
+# $Id$
+
+Summary: Shadow password file utilities for Linux
+Name: shadow-utils
+Version: @VERSION@
+Release: 1
+Copyright: Free
+Group: Utilities/System
+Source: ftp://pkg-shadow.alioth.debian.org/pub/pkg-shadow/%{name}-%{version}.tar.gz
+BuildRoot: %{_tmppath}/%{name}-%{version}-root
+Obsoletes: adduser
+
+%description
+This package includes the programs necessary to convert traditional
+V7 UNIX password files to the SVR4 shadow password format and additional
+tools to work with shadow passwords.
+ - 'pwconv' converts everything to the shadow password format.
+ - 'pwunconv' converts back to non-shadow passwords.
+ - 'pwck' checks the integrity of the password and shadow files.
+ - 'lastlog' prints out the last login times of all users.
+ - 'useradd', 'userdel', 'usermod' to manage user accounts.
+ - 'groupadd', 'groupdel', 'groupmod' to manage groups.
+
+A number of man pages are also included that relate to these utilities,
+and shadow passwords in general.
+
+%prep
+%setup
+
+%build
+%configure \
+ --disable-shared \
+ --prefix=/usr \
+ --exec-prefix=/usr
+make
+
+%install
+rm -rf $RPM_BUILD_ROOT
+
+make install DESTDIR=$RPM_BUILD_ROOT
+
+mkdir -p $RPM_BUILD_ROOT/etc/default
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%doc doc/ANNOUNCE doc/CHANGES doc/HOWTO
+%doc doc/LICENSE doc/README doc/README.linux
+%dir /etc/default
+%config /etc/default/useradd
+%config /etc/login.defs
+%{_bindir}/chage
+%{_bindir}/gpasswd
+%{_bindir}/lastlog
+%{_mandir}/man1/chage.1*
+%{_mandir}/man1/gpasswd.1*
+%{_mandir}/man3/shadow.3*
+%{_mandir}/man5/shadow.5*
+%{_mandir}/man8/chpasswd.8*
+%{_mandir}/man8/groupadd.8*
+%{_mandir}/man8/groupdel.8*
+%{_mandir}/man8/groupmod.8*
+%{_mandir}/man8/grpck.8*
+%{_mandir}/man8/lastlog.8*
+%{_mandir}/man8/newusers.8*
+%{_mandir}/man8/pwck.8*
+%{_mandir}/man8/pwconv.8*
+%{_mandir}/man8/useradd.8*
+%{_mandir}/man8/userdel.8*
+%{_mandir}/man8/usermod.8*
+%{_sbindir}/chpasswd
+%{_sbindir}/groupadd
+%{_sbindir}/groupdel
+%{_sbindir}/groupmod
+%{_sbindir}/grpck
+%{_sbindir}/grpconv
+%{_sbindir}/grpunconv
+%{_sbindir}/newusers
+%{_sbindir}/pwck
+%{_sbindir}/pwconv
+%{_sbindir}/pwunconv
+%{_sbindir}/useradd
+%{_sbindir}/userdel
+%{_sbindir}/usermod
+
+%changelog
+* Sun Dec 14 1997 Marek Michalkiewicz <marekm@piast.t19.ds.pwr.wroc.pl>
+- Lots of changes, see doc/CHANGES for more details
+
+* Sun Jun 08 1997 Timo Karjalainen <timok@iki.fi>
+- Initial release
diff --git a/src/.indent.pro b/src/.indent.pro
new file mode 100644
index 0000000..fe572bb
--- /dev/null
+++ b/src/.indent.pro
@@ -0,0 +1,5 @@
+-kr
+-i8
+-bad
+-pcs
+-l80
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644
index 0000000..f175928
--- /dev/null
+++ b/src/Makefile.am
@@ -0,0 +1,159 @@
+
+EXTRA_DIST = \
+ .indent.pro
+
+ubindir = ${prefix}/bin
+usbindir = ${prefix}/sbin
+suidperms = 4755
+sgidperms = 2755
+
+AM_CPPFLAGS = \
+ -I${top_srcdir}/lib \
+ -I$(top_srcdir)/libmisc \
+ -DLOCALEDIR=\"$(datadir)/locale\"
+
+# XXX why are login and su in /bin anyway (other than for
+# historical reasons)?
+#
+# if the system is screwed so badly that it can't mount /usr,
+# you can (hopefully) boot single user, and then you're root
+# so you don't need these programs for recovery.
+#
+# also /lib/libshadow.so.x.xx (if any) could be moved to /usr/lib
+# and installation would be much simpler (just two directories,
+# $prefix/bin and $prefix/sbin, no install-data hacks...)
+
+bin_PROGRAMS = groups login
+sbin_PROGRAMS = nologin
+ubin_PROGRAMS = faillog lastlog chage chfn chsh expiry gpasswd newgrp passwd
+if ENABLE_SUBIDS
+ubin_PROGRAMS += newgidmap newuidmap
+endif
+if WITH_SU
+bin_PROGRAMS += su
+endif
+usbin_PROGRAMS = \
+ chgpasswd \
+ chpasswd \
+ groupadd \
+ groupdel \
+ groupmems \
+ groupmod \
+ grpck \
+ grpconv \
+ grpunconv \
+ logoutd \
+ newusers \
+ pwck \
+ pwconv \
+ pwunconv \
+ useradd \
+ userdel \
+ usermod \
+ vipw
+
+# id and groups are from gnu, sulogin from sysvinit
+noinst_PROGRAMS = id sulogin
+
+suidusbins =
+suidbins =
+suidubins = chage chfn chsh expiry gpasswd newgrp
+if WITH_SU
+suidbins += su
+endif
+if !WITH_TCB
+suidubins += passwd
+endif
+if ACCT_TOOLS_SETUID
+suidusbins += chgpasswd chpasswd groupadd groupdel groupmod newusers useradd userdel usermod
+endif
+if ENABLE_SUBIDS
+if !FCAPS
+suidubins += newgidmap newuidmap
+endif
+endif
+
+if WITH_TCB
+shadowsgidubins = passwd
+endif
+
+LDADD = $(INTLLIBS) \
+ $(top_builddir)/libmisc/libmisc.a \
+ $(top_builddir)/lib/libshadow.la \
+ $(LIBTCB)
+
+if ACCT_TOOLS_SETUID
+LIBPAM_SUID = $(LIBPAM)
+else
+LIBPAM_SUID =
+endif
+
+if USE_PAM
+LIBCRYPT_NOPAM =
+else
+LIBCRYPT_NOPAM = $(LIBCRYPT)
+endif
+
+chage_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
+newuidmap_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBCAP)
+newgidmap_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBCAP)
+chfn_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBSELINUX) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD) $(LIBECONF)
+chgpasswd_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBCRYPT) $(LIBECONF)
+chsh_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBSELINUX) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD) $(LIBECONF)
+chpasswd_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBSELINUX) $(LIBCRYPT) $(LIBECONF)
+expiry_LDADD = $(LDADD) $(LIBECONF)
+gpasswd_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBCRYPT) $(LIBECONF)
+groupadd_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
+groupdel_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
+groupmems_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
+groupmod_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
+grpck_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
+grpconv_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
+grpunconv_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
+lastlog_LDADD = $(LDADD) $(LIBAUDIT) $(LIBECONF)
+login_SOURCES = \
+ login.c \
+ login_nopam.c
+login_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD) $(LIBECONF)
+newgrp_LDADD = $(LDADD) $(LIBAUDIT) $(LIBCRYPT) $(LIBECONF)
+newusers_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBSELINUX) $(LIBCRYPT) $(LIBECONF)
+nologin_LDADD =
+passwd_LDADD = $(LDADD) $(LIBPAM) $(LIBCRACK) $(LIBAUDIT) $(LIBSELINUX) $(LIBCRYPT_NOPAM) $(LIBECONF)
+pwck_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
+pwconv_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
+pwunconv_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
+su_SOURCES = \
+ su.c \
+ suauth.c
+su_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD) $(LIBECONF)
+sulogin_LDADD = $(LDADD) $(LIBCRYPT) $(LIBECONF)
+useradd_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBSEMANAGE) $(LIBACL) $(LIBATTR) $(LIBECONF)
+userdel_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBSEMANAGE) $(LIBECONF)
+usermod_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBSEMANAGE) $(LIBACL) $(LIBATTR) $(LIBECONF)
+vipw_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
+
+install-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+ ln -sf newgrp $(DESTDIR)$(ubindir)/sg
+ ln -sf vipw $(DESTDIR)$(usbindir)/vigr
+ set -e; for i in $(suidbins); do \
+ chmod $(suidperms) $(DESTDIR)$(bindir)/$$i; \
+ done
+ set -e; for i in $(suidubins); do \
+ chmod $(suidperms) $(DESTDIR)$(ubindir)/$$i; \
+ done
+ set -e; for i in $(suidusbins); do \
+ chmod $(suidperms) $(DESTDIR)$(usbindir)/$$i; \
+ done
+if WITH_TCB
+ set -e; for i in $(shadowsgidubins); do \
+ chown root:shadow $(DESTDIR)$(ubindir)/$$i; \
+ chmod $(sgidperms) $(DESTDIR)$(ubindir)/$$i; \
+ done
+endif
+if ENABLE_SUBIDS
+if FCAPS
+ setcap cap_setuid+ep $(DESTDIR)$(ubindir)/newuidmap
+ setcap cap_setgid+ep $(DESTDIR)$(ubindir)/newgidmap
+endif
+endif
diff --git a/src/Makefile.in b/src/Makefile.in
new file mode 100644
index 0000000..d66e6e8
--- /dev/null
+++ b/src/Makefile.in
@@ -0,0 +1,1386 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = groups$(EXEEXT) login$(EXEEXT) $(am__EXEEXT_1)
+sbin_PROGRAMS = nologin$(EXEEXT)
+ubin_PROGRAMS = faillog$(EXEEXT) lastlog$(EXEEXT) chage$(EXEEXT) \
+ chfn$(EXEEXT) chsh$(EXEEXT) expiry$(EXEEXT) gpasswd$(EXEEXT) \
+ newgrp$(EXEEXT) passwd$(EXEEXT) $(am__EXEEXT_2)
+@ENABLE_SUBIDS_TRUE@am__append_1 = newgidmap newuidmap
+@WITH_SU_TRUE@am__append_2 = su
+usbin_PROGRAMS = chgpasswd$(EXEEXT) chpasswd$(EXEEXT) \
+ groupadd$(EXEEXT) groupdel$(EXEEXT) groupmems$(EXEEXT) \
+ groupmod$(EXEEXT) grpck$(EXEEXT) grpconv$(EXEEXT) \
+ grpunconv$(EXEEXT) logoutd$(EXEEXT) newusers$(EXEEXT) \
+ pwck$(EXEEXT) pwconv$(EXEEXT) pwunconv$(EXEEXT) \
+ useradd$(EXEEXT) userdel$(EXEEXT) usermod$(EXEEXT) \
+ vipw$(EXEEXT)
+noinst_PROGRAMS = id$(EXEEXT) sulogin$(EXEEXT)
+@WITH_SU_TRUE@am__append_3 = su
+@WITH_TCB_FALSE@am__append_4 = passwd
+@ACCT_TOOLS_SETUID_TRUE@am__append_5 = chgpasswd chpasswd groupadd groupdel groupmod newusers useradd userdel usermod
+@ENABLE_SUBIDS_TRUE@@FCAPS_FALSE@am__append_6 = newgidmap newuidmap
+subdir = src
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+@WITH_SU_TRUE@am__EXEEXT_1 = su$(EXEEXT)
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" \
+ "$(DESTDIR)$(ubindir)" "$(DESTDIR)$(usbindir)"
+@ENABLE_SUBIDS_TRUE@am__EXEEXT_2 = newgidmap$(EXEEXT) \
+@ENABLE_SUBIDS_TRUE@ newuidmap$(EXEEXT)
+PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) $(sbin_PROGRAMS) \
+ $(ubin_PROGRAMS) $(usbin_PROGRAMS)
+chage_SOURCES = chage.c
+chage_OBJECTS = chage.$(OBJEXT)
+am__DEPENDENCIES_1 =
+am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) \
+ $(top_builddir)/libmisc/libmisc.a \
+ $(top_builddir)/lib/libshadow.la $(am__DEPENDENCIES_1)
+@ACCT_TOOLS_SETUID_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1)
+chage_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+chfn_SOURCES = chfn.c
+chfn_OBJECTS = chfn.$(OBJEXT)
+@USE_PAM_FALSE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1)
+chfn_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+chgpasswd_SOURCES = chgpasswd.c
+chgpasswd_OBJECTS = chgpasswd.$(OBJEXT)
+chgpasswd_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+chpasswd_SOURCES = chpasswd.c
+chpasswd_OBJECTS = chpasswd.$(OBJEXT)
+chpasswd_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+chsh_SOURCES = chsh.c
+chsh_OBJECTS = chsh.$(OBJEXT)
+chsh_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+expiry_SOURCES = expiry.c
+expiry_OBJECTS = expiry.$(OBJEXT)
+expiry_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)
+faillog_SOURCES = faillog.c
+faillog_OBJECTS = faillog.$(OBJEXT)
+faillog_LDADD = $(LDADD)
+faillog_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(top_builddir)/libmisc/libmisc.a \
+ $(top_builddir)/lib/libshadow.la $(am__DEPENDENCIES_1)
+gpasswd_SOURCES = gpasswd.c
+gpasswd_OBJECTS = gpasswd.$(OBJEXT)
+gpasswd_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+groupadd_SOURCES = groupadd.c
+groupadd_OBJECTS = groupadd.$(OBJEXT)
+groupadd_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+groupdel_SOURCES = groupdel.c
+groupdel_OBJECTS = groupdel.$(OBJEXT)
+groupdel_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+groupmems_SOURCES = groupmems.c
+groupmems_OBJECTS = groupmems.$(OBJEXT)
+groupmems_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+groupmod_SOURCES = groupmod.c
+groupmod_OBJECTS = groupmod.$(OBJEXT)
+groupmod_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+groups_SOURCES = groups.c
+groups_OBJECTS = groups.$(OBJEXT)
+groups_LDADD = $(LDADD)
+groups_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(top_builddir)/libmisc/libmisc.a \
+ $(top_builddir)/lib/libshadow.la $(am__DEPENDENCIES_1)
+grpck_SOURCES = grpck.c
+grpck_OBJECTS = grpck.$(OBJEXT)
+grpck_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+grpconv_SOURCES = grpconv.c
+grpconv_OBJECTS = grpconv.$(OBJEXT)
+grpconv_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+grpunconv_SOURCES = grpunconv.c
+grpunconv_OBJECTS = grpunconv.$(OBJEXT)
+grpunconv_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+id_SOURCES = id.c
+id_OBJECTS = id.$(OBJEXT)
+id_LDADD = $(LDADD)
+id_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(top_builddir)/libmisc/libmisc.a \
+ $(top_builddir)/lib/libshadow.la $(am__DEPENDENCIES_1)
+lastlog_SOURCES = lastlog.c
+lastlog_OBJECTS = lastlog.$(OBJEXT)
+lastlog_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+am_login_OBJECTS = login.$(OBJEXT) login_nopam.$(OBJEXT)
+login_OBJECTS = $(am_login_OBJECTS)
+login_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+logoutd_SOURCES = logoutd.c
+logoutd_OBJECTS = logoutd.$(OBJEXT)
+logoutd_LDADD = $(LDADD)
+logoutd_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(top_builddir)/libmisc/libmisc.a \
+ $(top_builddir)/lib/libshadow.la $(am__DEPENDENCIES_1)
+newgidmap_SOURCES = newgidmap.c
+newgidmap_OBJECTS = newgidmap.$(OBJEXT)
+newgidmap_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+newgrp_SOURCES = newgrp.c
+newgrp_OBJECTS = newgrp.$(OBJEXT)
+newgrp_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+newuidmap_SOURCES = newuidmap.c
+newuidmap_OBJECTS = newuidmap.$(OBJEXT)
+newuidmap_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+newusers_SOURCES = newusers.c
+newusers_OBJECTS = newusers.$(OBJEXT)
+newusers_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+nologin_SOURCES = nologin.c
+nologin_OBJECTS = nologin.$(OBJEXT)
+nologin_DEPENDENCIES =
+passwd_SOURCES = passwd.c
+passwd_OBJECTS = passwd.$(OBJEXT)
+passwd_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4) \
+ $(am__DEPENDENCIES_1)
+pwck_SOURCES = pwck.c
+pwck_OBJECTS = pwck.$(OBJEXT)
+pwck_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+pwconv_SOURCES = pwconv.c
+pwconv_OBJECTS = pwconv.$(OBJEXT)
+pwconv_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+pwunconv_SOURCES = pwunconv.c
+pwunconv_OBJECTS = pwunconv.$(OBJEXT)
+pwunconv_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am_su_OBJECTS = su.$(OBJEXT) suauth.$(OBJEXT)
+su_OBJECTS = $(am_su_OBJECTS)
+su_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+sulogin_SOURCES = sulogin.c
+sulogin_OBJECTS = sulogin.$(OBJEXT)
+sulogin_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+useradd_SOURCES = useradd.c
+useradd_OBJECTS = useradd.$(OBJEXT)
+useradd_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+userdel_SOURCES = userdel.c
+userdel_OBJECTS = userdel.$(OBJEXT)
+userdel_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+usermod_SOURCES = usermod.c
+usermod_OBJECTS = usermod.$(OBJEXT)
+usermod_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+vipw_SOURCES = vipw.c
+vipw_OBJECTS = vipw.$(OBJEXT)
+vipw_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/chage.Po ./$(DEPDIR)/chfn.Po \
+ ./$(DEPDIR)/chgpasswd.Po ./$(DEPDIR)/chpasswd.Po \
+ ./$(DEPDIR)/chsh.Po ./$(DEPDIR)/expiry.Po \
+ ./$(DEPDIR)/faillog.Po ./$(DEPDIR)/gpasswd.Po \
+ ./$(DEPDIR)/groupadd.Po ./$(DEPDIR)/groupdel.Po \
+ ./$(DEPDIR)/groupmems.Po ./$(DEPDIR)/groupmod.Po \
+ ./$(DEPDIR)/groups.Po ./$(DEPDIR)/grpck.Po \
+ ./$(DEPDIR)/grpconv.Po ./$(DEPDIR)/grpunconv.Po \
+ ./$(DEPDIR)/id.Po ./$(DEPDIR)/lastlog.Po ./$(DEPDIR)/login.Po \
+ ./$(DEPDIR)/login_nopam.Po ./$(DEPDIR)/logoutd.Po \
+ ./$(DEPDIR)/newgidmap.Po ./$(DEPDIR)/newgrp.Po \
+ ./$(DEPDIR)/newuidmap.Po ./$(DEPDIR)/newusers.Po \
+ ./$(DEPDIR)/nologin.Po ./$(DEPDIR)/passwd.Po \
+ ./$(DEPDIR)/pwck.Po ./$(DEPDIR)/pwconv.Po \
+ ./$(DEPDIR)/pwunconv.Po ./$(DEPDIR)/su.Po \
+ ./$(DEPDIR)/suauth.Po ./$(DEPDIR)/sulogin.Po \
+ ./$(DEPDIR)/useradd.Po ./$(DEPDIR)/userdel.Po \
+ ./$(DEPDIR)/usermod.Po ./$(DEPDIR)/vipw.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = chage.c chfn.c chgpasswd.c chpasswd.c chsh.c expiry.c \
+ faillog.c gpasswd.c groupadd.c groupdel.c groupmems.c \
+ groupmod.c groups.c grpck.c grpconv.c grpunconv.c id.c \
+ lastlog.c $(login_SOURCES) logoutd.c newgidmap.c newgrp.c \
+ newuidmap.c newusers.c nologin.c passwd.c pwck.c pwconv.c \
+ pwunconv.c $(su_SOURCES) sulogin.c useradd.c userdel.c \
+ usermod.c vipw.c
+DIST_SOURCES = chage.c chfn.c chgpasswd.c chpasswd.c chsh.c expiry.c \
+ faillog.c gpasswd.c groupadd.c groupdel.c groupmems.c \
+ groupmod.c groups.c grpck.c grpconv.c grpunconv.c id.c \
+ lastlog.c $(login_SOURCES) logoutd.c newgidmap.c newgrp.c \
+ newuidmap.c newusers.c nologin.c passwd.c pwck.c pwconv.c \
+ pwunconv.c $(su_SOURCES) sulogin.c useradd.c userdel.c \
+ usermod.c vipw.c
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBACL = @LIBACL@
+LIBATTR = @LIBATTR@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBECONF = @LIBECONF@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSEMANAGE = @LIBSEMANAGE@
+LIBSKEY = @LIBSKEY@
+LIBTCB = @LIBTCB@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_NLS = @USE_NLS@
+VENDORDIR = @VENDORDIR@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+capcmd = @capcmd@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = \
+ .indent.pro
+
+ubindir = ${prefix}/bin
+usbindir = ${prefix}/sbin
+suidperms = 4755
+sgidperms = 2755
+AM_CPPFLAGS = \
+ -I${top_srcdir}/lib \
+ -I$(top_srcdir)/libmisc \
+ -DLOCALEDIR=\"$(datadir)/locale\"
+
+suidusbins = $(am__append_5)
+suidbins = $(am__append_3)
+suidubins = chage chfn chsh expiry gpasswd newgrp $(am__append_4) \
+ $(am__append_6)
+@WITH_TCB_TRUE@shadowsgidubins = passwd
+LDADD = $(INTLLIBS) \
+ $(top_builddir)/libmisc/libmisc.a \
+ $(top_builddir)/lib/libshadow.la \
+ $(LIBTCB)
+
+@ACCT_TOOLS_SETUID_FALSE@LIBPAM_SUID =
+@ACCT_TOOLS_SETUID_TRUE@LIBPAM_SUID = $(LIBPAM)
+@USE_PAM_FALSE@LIBCRYPT_NOPAM = $(LIBCRYPT)
+@USE_PAM_TRUE@LIBCRYPT_NOPAM =
+chage_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
+newuidmap_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBCAP)
+newgidmap_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBCAP)
+chfn_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBSELINUX) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD) $(LIBECONF)
+chgpasswd_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBCRYPT) $(LIBECONF)
+chsh_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBSELINUX) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD) $(LIBECONF)
+chpasswd_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBSELINUX) $(LIBCRYPT) $(LIBECONF)
+expiry_LDADD = $(LDADD) $(LIBECONF)
+gpasswd_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBCRYPT) $(LIBECONF)
+groupadd_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
+groupdel_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
+groupmems_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
+groupmod_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
+grpck_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
+grpconv_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
+grpunconv_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
+lastlog_LDADD = $(LDADD) $(LIBAUDIT) $(LIBECONF)
+login_SOURCES = \
+ login.c \
+ login_nopam.c
+
+login_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD) $(LIBECONF)
+newgrp_LDADD = $(LDADD) $(LIBAUDIT) $(LIBCRYPT) $(LIBECONF)
+newusers_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBSELINUX) $(LIBCRYPT) $(LIBECONF)
+nologin_LDADD =
+passwd_LDADD = $(LDADD) $(LIBPAM) $(LIBCRACK) $(LIBAUDIT) $(LIBSELINUX) $(LIBCRYPT_NOPAM) $(LIBECONF)
+pwck_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
+pwconv_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
+pwunconv_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
+su_SOURCES = \
+ su.c \
+ suauth.c
+
+su_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD) $(LIBECONF)
+sulogin_LDADD = $(LDADD) $(LIBCRYPT) $(LIBECONF)
+useradd_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBSEMANAGE) $(LIBACL) $(LIBATTR) $(LIBECONF)
+userdel_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBSEMANAGE) $(LIBECONF)
+usermod_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBSEMANAGE) $(LIBACL) $(LIBATTR) $(LIBECONF)
+vipw_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBECONF)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign src/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ || test -f $$p1 \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+install-sbinPROGRAMS: $(sbin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ || test -f $$p1 \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-sbinPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(sbindir)" && rm -f $$files
+
+clean-sbinPROGRAMS:
+ @list='$(sbin_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+install-ubinPROGRAMS: $(ubin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(ubin_PROGRAMS)'; test -n "$(ubindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(ubindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(ubindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ || test -f $$p1 \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(ubindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(ubindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-ubinPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(ubin_PROGRAMS)'; test -n "$(ubindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(ubindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(ubindir)" && rm -f $$files
+
+clean-ubinPROGRAMS:
+ @list='$(ubin_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+install-usbinPROGRAMS: $(usbin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(usbin_PROGRAMS)'; test -n "$(usbindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(usbindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(usbindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ || test -f $$p1 \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(usbindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(usbindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-usbinPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(usbin_PROGRAMS)'; test -n "$(usbindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(usbindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(usbindir)" && rm -f $$files
+
+clean-usbinPROGRAMS:
+ @list='$(usbin_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+chage$(EXEEXT): $(chage_OBJECTS) $(chage_DEPENDENCIES) $(EXTRA_chage_DEPENDENCIES)
+ @rm -f chage$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(chage_OBJECTS) $(chage_LDADD) $(LIBS)
+
+chfn$(EXEEXT): $(chfn_OBJECTS) $(chfn_DEPENDENCIES) $(EXTRA_chfn_DEPENDENCIES)
+ @rm -f chfn$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(chfn_OBJECTS) $(chfn_LDADD) $(LIBS)
+
+chgpasswd$(EXEEXT): $(chgpasswd_OBJECTS) $(chgpasswd_DEPENDENCIES) $(EXTRA_chgpasswd_DEPENDENCIES)
+ @rm -f chgpasswd$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(chgpasswd_OBJECTS) $(chgpasswd_LDADD) $(LIBS)
+
+chpasswd$(EXEEXT): $(chpasswd_OBJECTS) $(chpasswd_DEPENDENCIES) $(EXTRA_chpasswd_DEPENDENCIES)
+ @rm -f chpasswd$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(chpasswd_OBJECTS) $(chpasswd_LDADD) $(LIBS)
+
+chsh$(EXEEXT): $(chsh_OBJECTS) $(chsh_DEPENDENCIES) $(EXTRA_chsh_DEPENDENCIES)
+ @rm -f chsh$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(chsh_OBJECTS) $(chsh_LDADD) $(LIBS)
+
+expiry$(EXEEXT): $(expiry_OBJECTS) $(expiry_DEPENDENCIES) $(EXTRA_expiry_DEPENDENCIES)
+ @rm -f expiry$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(expiry_OBJECTS) $(expiry_LDADD) $(LIBS)
+
+faillog$(EXEEXT): $(faillog_OBJECTS) $(faillog_DEPENDENCIES) $(EXTRA_faillog_DEPENDENCIES)
+ @rm -f faillog$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(faillog_OBJECTS) $(faillog_LDADD) $(LIBS)
+
+gpasswd$(EXEEXT): $(gpasswd_OBJECTS) $(gpasswd_DEPENDENCIES) $(EXTRA_gpasswd_DEPENDENCIES)
+ @rm -f gpasswd$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(gpasswd_OBJECTS) $(gpasswd_LDADD) $(LIBS)
+
+groupadd$(EXEEXT): $(groupadd_OBJECTS) $(groupadd_DEPENDENCIES) $(EXTRA_groupadd_DEPENDENCIES)
+ @rm -f groupadd$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(groupadd_OBJECTS) $(groupadd_LDADD) $(LIBS)
+
+groupdel$(EXEEXT): $(groupdel_OBJECTS) $(groupdel_DEPENDENCIES) $(EXTRA_groupdel_DEPENDENCIES)
+ @rm -f groupdel$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(groupdel_OBJECTS) $(groupdel_LDADD) $(LIBS)
+
+groupmems$(EXEEXT): $(groupmems_OBJECTS) $(groupmems_DEPENDENCIES) $(EXTRA_groupmems_DEPENDENCIES)
+ @rm -f groupmems$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(groupmems_OBJECTS) $(groupmems_LDADD) $(LIBS)
+
+groupmod$(EXEEXT): $(groupmod_OBJECTS) $(groupmod_DEPENDENCIES) $(EXTRA_groupmod_DEPENDENCIES)
+ @rm -f groupmod$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(groupmod_OBJECTS) $(groupmod_LDADD) $(LIBS)
+
+groups$(EXEEXT): $(groups_OBJECTS) $(groups_DEPENDENCIES) $(EXTRA_groups_DEPENDENCIES)
+ @rm -f groups$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(groups_OBJECTS) $(groups_LDADD) $(LIBS)
+
+grpck$(EXEEXT): $(grpck_OBJECTS) $(grpck_DEPENDENCIES) $(EXTRA_grpck_DEPENDENCIES)
+ @rm -f grpck$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(grpck_OBJECTS) $(grpck_LDADD) $(LIBS)
+
+grpconv$(EXEEXT): $(grpconv_OBJECTS) $(grpconv_DEPENDENCIES) $(EXTRA_grpconv_DEPENDENCIES)
+ @rm -f grpconv$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(grpconv_OBJECTS) $(grpconv_LDADD) $(LIBS)
+
+grpunconv$(EXEEXT): $(grpunconv_OBJECTS) $(grpunconv_DEPENDENCIES) $(EXTRA_grpunconv_DEPENDENCIES)
+ @rm -f grpunconv$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(grpunconv_OBJECTS) $(grpunconv_LDADD) $(LIBS)
+
+id$(EXEEXT): $(id_OBJECTS) $(id_DEPENDENCIES) $(EXTRA_id_DEPENDENCIES)
+ @rm -f id$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(id_OBJECTS) $(id_LDADD) $(LIBS)
+
+lastlog$(EXEEXT): $(lastlog_OBJECTS) $(lastlog_DEPENDENCIES) $(EXTRA_lastlog_DEPENDENCIES)
+ @rm -f lastlog$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lastlog_OBJECTS) $(lastlog_LDADD) $(LIBS)
+
+login$(EXEEXT): $(login_OBJECTS) $(login_DEPENDENCIES) $(EXTRA_login_DEPENDENCIES)
+ @rm -f login$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(login_OBJECTS) $(login_LDADD) $(LIBS)
+
+logoutd$(EXEEXT): $(logoutd_OBJECTS) $(logoutd_DEPENDENCIES) $(EXTRA_logoutd_DEPENDENCIES)
+ @rm -f logoutd$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(logoutd_OBJECTS) $(logoutd_LDADD) $(LIBS)
+
+newgidmap$(EXEEXT): $(newgidmap_OBJECTS) $(newgidmap_DEPENDENCIES) $(EXTRA_newgidmap_DEPENDENCIES)
+ @rm -f newgidmap$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(newgidmap_OBJECTS) $(newgidmap_LDADD) $(LIBS)
+
+newgrp$(EXEEXT): $(newgrp_OBJECTS) $(newgrp_DEPENDENCIES) $(EXTRA_newgrp_DEPENDENCIES)
+ @rm -f newgrp$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(newgrp_OBJECTS) $(newgrp_LDADD) $(LIBS)
+
+newuidmap$(EXEEXT): $(newuidmap_OBJECTS) $(newuidmap_DEPENDENCIES) $(EXTRA_newuidmap_DEPENDENCIES)
+ @rm -f newuidmap$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(newuidmap_OBJECTS) $(newuidmap_LDADD) $(LIBS)
+
+newusers$(EXEEXT): $(newusers_OBJECTS) $(newusers_DEPENDENCIES) $(EXTRA_newusers_DEPENDENCIES)
+ @rm -f newusers$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(newusers_OBJECTS) $(newusers_LDADD) $(LIBS)
+
+nologin$(EXEEXT): $(nologin_OBJECTS) $(nologin_DEPENDENCIES) $(EXTRA_nologin_DEPENDENCIES)
+ @rm -f nologin$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(nologin_OBJECTS) $(nologin_LDADD) $(LIBS)
+
+passwd$(EXEEXT): $(passwd_OBJECTS) $(passwd_DEPENDENCIES) $(EXTRA_passwd_DEPENDENCIES)
+ @rm -f passwd$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(passwd_OBJECTS) $(passwd_LDADD) $(LIBS)
+
+pwck$(EXEEXT): $(pwck_OBJECTS) $(pwck_DEPENDENCIES) $(EXTRA_pwck_DEPENDENCIES)
+ @rm -f pwck$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(pwck_OBJECTS) $(pwck_LDADD) $(LIBS)
+
+pwconv$(EXEEXT): $(pwconv_OBJECTS) $(pwconv_DEPENDENCIES) $(EXTRA_pwconv_DEPENDENCIES)
+ @rm -f pwconv$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(pwconv_OBJECTS) $(pwconv_LDADD) $(LIBS)
+
+pwunconv$(EXEEXT): $(pwunconv_OBJECTS) $(pwunconv_DEPENDENCIES) $(EXTRA_pwunconv_DEPENDENCIES)
+ @rm -f pwunconv$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(pwunconv_OBJECTS) $(pwunconv_LDADD) $(LIBS)
+
+su$(EXEEXT): $(su_OBJECTS) $(su_DEPENDENCIES) $(EXTRA_su_DEPENDENCIES)
+ @rm -f su$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(su_OBJECTS) $(su_LDADD) $(LIBS)
+
+sulogin$(EXEEXT): $(sulogin_OBJECTS) $(sulogin_DEPENDENCIES) $(EXTRA_sulogin_DEPENDENCIES)
+ @rm -f sulogin$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(sulogin_OBJECTS) $(sulogin_LDADD) $(LIBS)
+
+useradd$(EXEEXT): $(useradd_OBJECTS) $(useradd_DEPENDENCIES) $(EXTRA_useradd_DEPENDENCIES)
+ @rm -f useradd$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(useradd_OBJECTS) $(useradd_LDADD) $(LIBS)
+
+userdel$(EXEEXT): $(userdel_OBJECTS) $(userdel_DEPENDENCIES) $(EXTRA_userdel_DEPENDENCIES)
+ @rm -f userdel$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(userdel_OBJECTS) $(userdel_LDADD) $(LIBS)
+
+usermod$(EXEEXT): $(usermod_OBJECTS) $(usermod_DEPENDENCIES) $(EXTRA_usermod_DEPENDENCIES)
+ @rm -f usermod$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(usermod_OBJECTS) $(usermod_LDADD) $(LIBS)
+
+vipw$(EXEEXT): $(vipw_OBJECTS) $(vipw_DEPENDENCIES) $(EXTRA_vipw_DEPENDENCIES)
+ @rm -f vipw$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(vipw_OBJECTS) $(vipw_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chage.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chfn.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chgpasswd.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chpasswd.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chsh.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/expiry.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/faillog.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpasswd.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groupadd.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groupdel.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groupmems.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groupmod.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groups.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grpck.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grpconv.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grpunconv.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/id.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lastlog.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/login.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/login_nopam.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logoutd.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newgidmap.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newgrp.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newuidmap.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newusers.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nologin.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/passwd.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwck.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwconv.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwunconv.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/su.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/suauth.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sulogin.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/useradd.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/userdel.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usermod.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vipw.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(ubindir)" "$(DESTDIR)$(usbindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool \
+ clean-noinstPROGRAMS clean-sbinPROGRAMS clean-ubinPROGRAMS \
+ clean-usbinPROGRAMS mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/chage.Po
+ -rm -f ./$(DEPDIR)/chfn.Po
+ -rm -f ./$(DEPDIR)/chgpasswd.Po
+ -rm -f ./$(DEPDIR)/chpasswd.Po
+ -rm -f ./$(DEPDIR)/chsh.Po
+ -rm -f ./$(DEPDIR)/expiry.Po
+ -rm -f ./$(DEPDIR)/faillog.Po
+ -rm -f ./$(DEPDIR)/gpasswd.Po
+ -rm -f ./$(DEPDIR)/groupadd.Po
+ -rm -f ./$(DEPDIR)/groupdel.Po
+ -rm -f ./$(DEPDIR)/groupmems.Po
+ -rm -f ./$(DEPDIR)/groupmod.Po
+ -rm -f ./$(DEPDIR)/groups.Po
+ -rm -f ./$(DEPDIR)/grpck.Po
+ -rm -f ./$(DEPDIR)/grpconv.Po
+ -rm -f ./$(DEPDIR)/grpunconv.Po
+ -rm -f ./$(DEPDIR)/id.Po
+ -rm -f ./$(DEPDIR)/lastlog.Po
+ -rm -f ./$(DEPDIR)/login.Po
+ -rm -f ./$(DEPDIR)/login_nopam.Po
+ -rm -f ./$(DEPDIR)/logoutd.Po
+ -rm -f ./$(DEPDIR)/newgidmap.Po
+ -rm -f ./$(DEPDIR)/newgrp.Po
+ -rm -f ./$(DEPDIR)/newuidmap.Po
+ -rm -f ./$(DEPDIR)/newusers.Po
+ -rm -f ./$(DEPDIR)/nologin.Po
+ -rm -f ./$(DEPDIR)/passwd.Po
+ -rm -f ./$(DEPDIR)/pwck.Po
+ -rm -f ./$(DEPDIR)/pwconv.Po
+ -rm -f ./$(DEPDIR)/pwunconv.Po
+ -rm -f ./$(DEPDIR)/su.Po
+ -rm -f ./$(DEPDIR)/suauth.Po
+ -rm -f ./$(DEPDIR)/sulogin.Po
+ -rm -f ./$(DEPDIR)/useradd.Po
+ -rm -f ./$(DEPDIR)/userdel.Po
+ -rm -f ./$(DEPDIR)/usermod.Po
+ -rm -f ./$(DEPDIR)/vipw.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-ubinPROGRAMS install-usbinPROGRAMS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS install-sbinPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/chage.Po
+ -rm -f ./$(DEPDIR)/chfn.Po
+ -rm -f ./$(DEPDIR)/chgpasswd.Po
+ -rm -f ./$(DEPDIR)/chpasswd.Po
+ -rm -f ./$(DEPDIR)/chsh.Po
+ -rm -f ./$(DEPDIR)/expiry.Po
+ -rm -f ./$(DEPDIR)/faillog.Po
+ -rm -f ./$(DEPDIR)/gpasswd.Po
+ -rm -f ./$(DEPDIR)/groupadd.Po
+ -rm -f ./$(DEPDIR)/groupdel.Po
+ -rm -f ./$(DEPDIR)/groupmems.Po
+ -rm -f ./$(DEPDIR)/groupmod.Po
+ -rm -f ./$(DEPDIR)/groups.Po
+ -rm -f ./$(DEPDIR)/grpck.Po
+ -rm -f ./$(DEPDIR)/grpconv.Po
+ -rm -f ./$(DEPDIR)/grpunconv.Po
+ -rm -f ./$(DEPDIR)/id.Po
+ -rm -f ./$(DEPDIR)/lastlog.Po
+ -rm -f ./$(DEPDIR)/login.Po
+ -rm -f ./$(DEPDIR)/login_nopam.Po
+ -rm -f ./$(DEPDIR)/logoutd.Po
+ -rm -f ./$(DEPDIR)/newgidmap.Po
+ -rm -f ./$(DEPDIR)/newgrp.Po
+ -rm -f ./$(DEPDIR)/newuidmap.Po
+ -rm -f ./$(DEPDIR)/newusers.Po
+ -rm -f ./$(DEPDIR)/nologin.Po
+ -rm -f ./$(DEPDIR)/passwd.Po
+ -rm -f ./$(DEPDIR)/pwck.Po
+ -rm -f ./$(DEPDIR)/pwconv.Po
+ -rm -f ./$(DEPDIR)/pwunconv.Po
+ -rm -f ./$(DEPDIR)/su.Po
+ -rm -f ./$(DEPDIR)/suauth.Po
+ -rm -f ./$(DEPDIR)/sulogin.Po
+ -rm -f ./$(DEPDIR)/useradd.Po
+ -rm -f ./$(DEPDIR)/userdel.Po
+ -rm -f ./$(DEPDIR)/usermod.Po
+ -rm -f ./$(DEPDIR)/vipw.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-sbinPROGRAMS \
+ uninstall-ubinPROGRAMS uninstall-usbinPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-binPROGRAMS clean-generic clean-libtool \
+ clean-noinstPROGRAMS clean-sbinPROGRAMS clean-ubinPROGRAMS \
+ clean-usbinPROGRAMS cscopelist-am ctags ctags-am distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-binPROGRAMS install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-sbinPROGRAMS install-strip \
+ install-ubinPROGRAMS install-usbinPROGRAMS installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \
+ uninstall-sbinPROGRAMS uninstall-ubinPROGRAMS \
+ uninstall-usbinPROGRAMS
+
+.PRECIOUS: Makefile
+
+
+install-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+ ln -sf newgrp $(DESTDIR)$(ubindir)/sg
+ ln -sf vipw $(DESTDIR)$(usbindir)/vigr
+ set -e; for i in $(suidbins); do \
+ chmod $(suidperms) $(DESTDIR)$(bindir)/$$i; \
+ done
+ set -e; for i in $(suidubins); do \
+ chmod $(suidperms) $(DESTDIR)$(ubindir)/$$i; \
+ done
+ set -e; for i in $(suidusbins); do \
+ chmod $(suidperms) $(DESTDIR)$(usbindir)/$$i; \
+ done
+@WITH_TCB_TRUE@ set -e; for i in $(shadowsgidubins); do \
+@WITH_TCB_TRUE@ chown root:shadow $(DESTDIR)$(ubindir)/$$i; \
+@WITH_TCB_TRUE@ chmod $(sgidperms) $(DESTDIR)$(ubindir)/$$i; \
+@WITH_TCB_TRUE@ done
+@ENABLE_SUBIDS_TRUE@@FCAPS_TRUE@ setcap cap_setuid+ep $(DESTDIR)$(ubindir)/newuidmap
+@ENABLE_SUBIDS_TRUE@@FCAPS_TRUE@ setcap cap_setgid+ep $(DESTDIR)$(ubindir)/newgidmap
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/chage.c b/src/chage.c
new file mode 100644
index 0000000..bcc58c9
--- /dev/null
+++ b/src/chage.c
@@ -0,0 +1,958 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 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 <ctype.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <time.h>
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+#include "pam_defs.h"
+#endif /* USE_PAM */
+#endif /* ACCT_TOOLS_SETUID */
+#include <pwd.h>
+#include "prototypes.h"
+#include "defines.h"
+#include "pwio.h"
+#include "shadowio.h"
+#ifdef WITH_TCB
+#include "tcbfuncs.h"
+#endif
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+/*
+ * Global variables
+ */
+const char *Prog;
+
+static bool
+ dflg = false, /* set last password change date */
+ Eflg = false, /* set account expiration date */
+ iflg = false, /* set iso8601 date formatting */
+ Iflg = false, /* set password inactive after expiration */
+ lflg = false, /* show account aging information */
+ mflg = false, /* set minimum number of days before password change */
+ Mflg = false, /* set maximum number of days before password change */
+ Wflg = false; /* set expiration warning days */
+static bool amroot = false;
+
+static bool pw_locked = false; /* Indicate if the password file is locked */
+static bool spw_locked = false; /* Indicate if the shadow file is locked */
+/* The name and UID of the user being worked on */
+static char user_name[BUFSIZ] = "";
+static uid_t user_uid = -1;
+
+static long mindays;
+static long maxdays;
+static long lstchgdate;
+static long warndays;
+static long inactdays;
+static long expdate;
+
+/* local function prototypes */
+static /*@noreturn@*/void usage (int status);
+static void date_to_str (char *buf, size_t maxsize, time_t date);
+static int new_fields (void);
+static void print_date (time_t date);
+static void list_fields (void);
+static void process_flags (int argc, char **argv);
+static void check_flags (int argc, int opt_index);
+static void check_perms (void);
+static void open_files (bool readonly);
+static void close_files (void);
+static /*@noreturn@*/void fail_exit (int code);
+
+/*
+ * fail_exit - do some cleanup and exit with the given error code
+ */
+static /*@noreturn@*/void fail_exit (int code)
+{
+ if (spw_locked) {
+ if (spw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+ /* continue */
+ }
+ }
+ if (pw_locked) {
+ if (pw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+ /* continue */
+ }
+ }
+ closelog ();
+
+#ifdef WITH_AUDIT
+ if (E_SUCCESS != code) {
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "change age",
+ user_name, (unsigned int) user_uid, 0);
+ }
+#endif
+
+ exit (code);
+}
+
+/*
+ * usage - print command line syntax and exit
+ */
+static /*@noreturn@*/void usage (int status)
+{
+ FILE *usageout = (E_SUCCESS != status) ? stderr : stdout;
+ (void) fprintf (usageout,
+ _("Usage: %s [options] LOGIN\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+ (void) fputs (_(" -d, --lastday LAST_DAY set date of last password change to LAST_DAY\n"), usageout);
+ (void) fputs (_(" -E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"), usageout);
+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
+ (void) fputs (_(" -i, --iso8601 use YYYY-MM-DD when printing dates\n"), usageout);
+ (void) fputs (_(" -I, --inactive INACTIVE set password inactive after expiration\n"
+ " to INACTIVE\n"), usageout);
+ (void) fputs (_(" -l, --list show account aging information\n"), usageout);
+ (void) fputs (_(" -m, --mindays MIN_DAYS set minimum number of days before password\n"
+ " change to MIN_DAYS\n"), usageout);
+ (void) fputs (_(" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
+ " change to MAX_DAYS\n"), usageout);
+ (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
+ (void) fputs (_(" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"), usageout);
+ (void) fputs ("\n", usageout);
+ exit (status);
+}
+
+static void date_to_str (char *buf, size_t maxsize, time_t date)
+{
+ struct tm *tp;
+
+ tp = gmtime (&date);
+#ifdef HAVE_STRFTIME
+ (void) strftime (buf, maxsize, "%Y-%m-%d", tp);
+#else
+ (void) snprintf (buf, maxsize, "%04d-%02d-%02d",
+ tp->tm_year + 1900, tp->tm_mon + 1, tp->tm_mday);
+#endif /* HAVE_STRFTIME */
+}
+
+/*
+ * new_fields - change the user's password aging information interactively.
+ *
+ * prompt the user for all of the password age values. set the fields
+ * from the user's response, or leave alone if nothing was entered. The
+ * value (-1) is used to indicate the field should be removed if possible.
+ * any other negative value is an error. very large positive values will
+ * be handled elsewhere.
+ */
+static int new_fields (void)
+{
+ char buf[200];
+
+ (void) puts (_("Enter the new value, or press ENTER for the default"));
+ (void) puts ("");
+
+ (void) snprintf (buf, sizeof buf, "%ld", mindays);
+ change_field (buf, sizeof buf, _("Minimum Password Age"));
+ if ( (getlong (buf, &mindays) == 0)
+ || (mindays < -1)) {
+ return 0;
+ }
+
+ (void) snprintf (buf, sizeof buf, "%ld", maxdays);
+ change_field (buf, sizeof buf, _("Maximum Password Age"));
+ if ( (getlong (buf, &maxdays) == 0)
+ || (maxdays < -1)) {
+ return 0;
+ }
+
+ if (-1 == lstchgdate) {
+ strcpy (buf, "-1");
+ } else {
+ date_to_str (buf, sizeof buf, (time_t) lstchgdate * SCALE);
+ }
+
+ change_field (buf, sizeof buf, _("Last Password Change (YYYY-MM-DD)"));
+
+ if (strcmp (buf, "-1") == 0) {
+ lstchgdate = -1;
+ } else {
+ lstchgdate = strtoday (buf);
+ if (lstchgdate <= -1) {
+ return 0;
+ }
+ }
+
+ (void) snprintf (buf, sizeof buf, "%ld", warndays);
+ change_field (buf, sizeof buf, _("Password Expiration Warning"));
+ if ( (getlong (buf, &warndays) == 0)
+ || (warndays < -1)) {
+ return 0;
+ }
+
+ (void) snprintf (buf, sizeof buf, "%ld", inactdays);
+ change_field (buf, sizeof buf, _("Password Inactive"));
+ if ( (getlong (buf, &inactdays) == 0)
+ || (inactdays < -1)) {
+ return 0;
+ }
+
+ if (-1 == expdate) {
+ strcpy (buf, "-1");
+ } else {
+ date_to_str (buf, sizeof buf, (time_t) expdate * SCALE);
+ }
+
+ change_field (buf, sizeof buf,
+ _("Account Expiration Date (YYYY-MM-DD)"));
+
+ if (strcmp (buf, "-1") == 0) {
+ expdate = -1;
+ } else {
+ expdate = strtoday (buf);
+ if (expdate <= -1) {
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+static void print_date (time_t date)
+{
+#ifdef HAVE_STRFTIME
+ struct tm *tp;
+ char buf[80];
+ char format[80];
+
+ if( iflg ) {
+ (void) snprintf (format, 80, "%%Y-%%m-%%d");
+ }
+ else {
+ (void) snprintf (format, 80, "%%b %%d, %%Y");
+ }
+
+ tp = gmtime (&date);
+ if (NULL == tp) {
+ (void) printf ("time_t: %lu\n", (unsigned long)date);
+ } else {
+ (void) strftime (buf, sizeof buf, format, tp);
+ (void) puts (buf);
+ }
+#else
+ struct tm *tp;
+ char *cp = NULL;
+
+ tp = gmtime (&date);
+ if (NULL != tp) {
+ cp = asctime (tp);
+ }
+ if (NULL != cp) {
+ (void) printf ("%6.6s, %4.4s\n", cp + 4, cp + 20);
+ } else {
+ (void) printf ("time_t: %lu\n", date);
+ }
+#endif
+}
+
+/*
+ * list_fields - display the current values of the expiration fields
+ *
+ * display the password age information from the password fields. Date
+ * values will be displayed as a calendar date, or the word "never" if
+ * the date is 1/1/70, which is day number 0.
+ */
+static void list_fields (void)
+{
+ long changed = 0;
+ long expires;
+
+ /*
+ * The "last change" date is either "never" or the date the password
+ * was last modified. The date is the number of days since 1/1/1970.
+ */
+ (void) fputs (_("Last password change\t\t\t\t\t: "), stdout);
+ if (lstchgdate < 0) {
+ (void) puts (_("never"));
+ } else if (lstchgdate == 0) {
+ (void) puts (_("password must be changed"));
+ } else {
+ changed = lstchgdate * SCALE;
+ print_date ((time_t) changed);
+ }
+
+ /*
+ * The password expiration date is determined from the last change
+ * date plus the number of days the password is valid for.
+ */
+ (void) fputs (_("Password expires\t\t\t\t\t: "), stdout);
+ if (lstchgdate == 0) {
+ (void) puts (_("password must be changed"));
+ } else if ( (lstchgdate < 0)
+ || (maxdays >= (10000 * (DAY / SCALE)))
+ || (maxdays < 0)) {
+ (void) puts (_("never"));
+ } else {
+ expires = changed + maxdays * SCALE;
+ print_date ((time_t) expires);
+ }
+
+ /*
+ * The account becomes inactive if the password is expired for more
+ * than "inactdays". The expiration date is calculated and the
+ * number of inactive days is added. The resulting date is when the
+ * active will be disabled.
+ */
+ (void) fputs (_("Password inactive\t\t\t\t\t: "), stdout);
+ if (lstchgdate == 0) {
+ (void) puts (_("password must be changed"));
+ } else if ( (lstchgdate < 0)
+ || (inactdays < 0)
+ || (maxdays >= (10000 * (DAY / SCALE)))
+ || (maxdays < 0)) {
+ (void) puts (_("never"));
+ } else {
+ expires = changed + (maxdays + inactdays) * SCALE;
+ print_date ((time_t) expires);
+ }
+
+ /*
+ * The account will expire on the given date regardless of the
+ * password expiring or not.
+ */
+ (void) fputs (_("Account expires\t\t\t\t\t\t: "), stdout);
+ if (expdate < 0) {
+ (void) puts (_("never"));
+ } else {
+ expires = expdate * SCALE;
+ print_date ((time_t) expires);
+ }
+
+ /*
+ * Start with the easy numbers - the number of days before the
+ * password can be changed, the number of days after which the
+ * password must be changed, the number of days before the password
+ * expires that the user is told, and the number of days after the
+ * password expires that the account becomes unusable.
+ */
+ printf (_("Minimum number of days between password change\t\t: %ld\n"),
+ mindays);
+ printf (_("Maximum number of days between password change\t\t: %ld\n"),
+ maxdays);
+ printf (_("Number of days of warning before password expires\t: %ld\n"),
+ warndays);
+}
+
+/*
+ * process_flags - parse the command line options
+ *
+ * It will not return if an error is encountered.
+ */
+static void process_flags (int argc, char **argv)
+{
+ /*
+ * Parse the command line options.
+ */
+ int c;
+ static struct option long_options[] = {
+ {"lastday", required_argument, NULL, 'd'},
+ {"expiredate", required_argument, NULL, 'E'},
+ {"help", no_argument, NULL, 'h'},
+ {"inactive", required_argument, NULL, 'I'},
+ {"list", no_argument, NULL, 'l'},
+ {"mindays", required_argument, NULL, 'm'},
+ {"maxdays", required_argument, NULL, 'M'},
+ {"root", required_argument, NULL, 'R'},
+ {"warndays", required_argument, NULL, 'W'},
+ {"iso8601", no_argument, NULL, 'i'},
+ {NULL, 0, NULL, '\0'}
+ };
+
+ while ((c = getopt_long (argc, argv, "d:E:hiI:lm:M:R:W:",
+ long_options, NULL)) != -1) {
+ switch (c) {
+ case 'd':
+ dflg = true;
+ lstchgdate = strtoday (optarg);
+ if (lstchgdate < -1) {
+ fprintf (stderr,
+ _("%s: invalid date '%s'\n"),
+ Prog, optarg);
+ usage (E_USAGE);
+ }
+ break;
+ case 'E':
+ Eflg = true;
+ expdate = strtoday (optarg);
+ if (expdate < -1) {
+ fprintf (stderr,
+ _("%s: invalid date '%s'\n"),
+ Prog, optarg);
+ usage (E_USAGE);
+ }
+ break;
+ case 'h':
+ usage (E_SUCCESS);
+ /*@notreached@*/break;
+ case 'i':
+ iflg = true;
+ break;
+ case 'I':
+ Iflg = true;
+ if ( (getlong (optarg, &inactdays) == 0)
+ || (inactdays < -1)) {
+ fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"),
+ Prog, optarg);
+ usage (E_USAGE);
+ }
+ break;
+ case 'l':
+ lflg = true;
+ break;
+ case 'm':
+ mflg = true;
+ if ( (getlong (optarg, &mindays) == 0)
+ || (mindays < -1)) {
+ fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"),
+ Prog, optarg);
+ usage (E_USAGE);
+ }
+ break;
+ case 'M':
+ Mflg = true;
+ if ( (getlong (optarg, &maxdays) == 0)
+ || (maxdays < -1)) {
+ fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"),
+ Prog, optarg);
+ usage (E_USAGE);
+ }
+ break;
+ case 'R': /* no-op, handled in process_root_flag () */
+ break;
+ case 'W':
+ Wflg = true;
+ if ( (getlong (optarg, &warndays) == 0)
+ || (warndays < -1)) {
+ fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"),
+ Prog, optarg);
+ usage (E_USAGE);
+ }
+ break;
+ default:
+ usage (E_USAGE);
+ }
+ }
+
+ check_flags (argc, optind);
+}
+
+/*
+ * check_flags - check flags and parameters consistency
+ *
+ * It will not return if an error is encountered.
+ */
+static void check_flags (int argc, int opt_index)
+{
+ /*
+ * Make certain the flags do not conflict and that there is a user
+ * name on the command line.
+ */
+
+ if (argc != opt_index + 1) {
+ usage (E_USAGE);
+ }
+
+ if (lflg && (mflg || Mflg || dflg || Wflg || Iflg || Eflg)) {
+ fprintf (stderr,
+ _("%s: do not include \"l\" with other flags\n"),
+ Prog);
+ usage (E_USAGE);
+ }
+}
+
+/*
+ * check_perms - check if the caller is allowed to add a group
+ *
+ * Non-root users are only allowed to display their aging information.
+ * (we will later make sure that the user is only listing her aging
+ * information)
+ *
+ * With PAM support, the setuid bit can be set on chage to allow
+ * non-root users to groups.
+ * Without PAM support, only users who can write in the group databases
+ * can add groups.
+ *
+ * It will not return if the user is not allowed.
+ */
+static void check_perms (void)
+{
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+ pam_handle_t *pamh = NULL;
+ struct passwd *pampw;
+ int retval;
+#endif /* USE_PAM */
+#endif /* ACCT_TOOLS_SETUID */
+
+ /*
+ * An unprivileged user can ask for their own aging information, but
+ * only root can change it, or list another user's aging
+ * information.
+ */
+
+ if (!amroot && !lflg) {
+ fprintf (stderr, _("%s: Permission denied.\n"), Prog);
+ fail_exit (E_NOPERM);
+ }
+
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+ pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
+ if (NULL == pampw) {
+ fprintf (stderr,
+ _("%s: Cannot determine your user name.\n"),
+ Prog);
+ exit (E_NOPERM);
+ }
+
+ retval = pam_start ("chage", pampw->pw_name, &conv, &pamh);
+
+ if (PAM_SUCCESS == retval) {
+ retval = pam_authenticate (pamh, 0);
+ }
+
+ if (PAM_SUCCESS == retval) {
+ retval = pam_acct_mgmt (pamh, 0);
+ }
+
+ if (PAM_SUCCESS != retval) {
+ fprintf (stderr, _("%s: PAM: %s\n"),
+ Prog, pam_strerror (pamh, retval));
+ SYSLOG((LOG_ERR, "%s", pam_strerror (pamh, retval)));
+ if (NULL != pamh) {
+ (void) pam_end (pamh, retval);
+ }
+ fail_exit (E_NOPERM);
+ }
+ (void) pam_end (pamh, retval);
+#endif /* USE_PAM */
+#endif /* ACCT_TOOLS_SETUID */
+}
+
+/*
+ * open_files - open the shadow database
+ *
+ * In read-only mode, the databases are not locked and are opened
+ * only for reading.
+ */
+static void open_files (bool readonly)
+{
+ /*
+ * Lock and open the password file. This loads all of the password
+ * file entries into memory. Then we get a pointer to the password
+ * file entry for the requested user.
+ */
+ if (!readonly) {
+ if (pw_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, pw_dbname ());
+ fail_exit (E_NOPERM);
+ }
+ pw_locked = true;
+ }
+ if (pw_open (readonly ? O_RDONLY: O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr, _("%s: cannot open %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_WARN, "cannot open %s", pw_dbname ()));
+ fail_exit (E_NOPERM);
+ }
+
+ /*
+ * For shadow password files we have to lock the file and read in
+ * the entries as was done for the password file. The user entries
+ * does not have to exist in this case; a new entry will be created
+ * for this user if one does not exist already.
+ */
+ if (!readonly) {
+ if (spw_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, spw_dbname ());
+ fail_exit (E_NOPERM);
+ }
+ spw_locked = true;
+ }
+ if (spw_open (readonly ? O_RDONLY: O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"), Prog, spw_dbname ());
+ SYSLOG ((LOG_WARN, "cannot open %s", spw_dbname ()));
+ fail_exit (E_NOPERM);
+ }
+}
+
+/*
+ * close_files - close and unlock the password/shadow databases
+ */
+static void close_files (void)
+{
+ /*
+ * Now close the shadow password file, which will cause all of the
+ * entries to be re-written.
+ */
+ if (spw_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"), Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", spw_dbname ()));
+ fail_exit (E_NOPERM);
+ }
+
+ /*
+ * Close the password file. If any entries were modified, the file
+ * will be re-written.
+ */
+ if (pw_close () == 0) {
+ fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", pw_dbname ()));
+ fail_exit (E_NOPERM);
+ }
+ if (spw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+ /* continue */
+ }
+ spw_locked = false;
+ if (pw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+ /* continue */
+ }
+ pw_locked = false;
+}
+
+/*
+ * update_age - update the aging information in the database
+ *
+ * It will not return in case of error
+ */
+static void update_age (/*@null@*/const struct spwd *sp,
+ /*@notnull@*/const struct passwd *pw)
+{
+ struct spwd spwent;
+
+ /*
+ * There was no shadow entry. The new entry will have the encrypted
+ * password transferred from the normal password file along with the
+ * aging information.
+ */
+ if (NULL == sp) {
+ struct passwd pwent = *pw;
+
+ memzero (&spwent, sizeof spwent);
+ spwent.sp_namp = xstrdup (pwent.pw_name);
+ spwent.sp_pwdp = xstrdup (pwent.pw_passwd);
+ spwent.sp_flag = SHADOW_SP_FLAG_UNSET;
+
+ pwent.pw_passwd = SHADOW_PASSWD_STRING; /* XXX warning: const */
+ if (pw_update (&pwent) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"), Prog, pw_dbname (), pwent.pw_name);
+ fail_exit (E_NOPERM);
+ }
+ } else {
+ spwent.sp_namp = xstrdup (sp->sp_namp);
+ spwent.sp_pwdp = xstrdup (sp->sp_pwdp);
+ spwent.sp_flag = sp->sp_flag;
+ }
+
+ /*
+ * Copy the fields back to the shadow file entry and write the
+ * modified entry back to the shadow file. Closing the shadow and
+ * password files will commit any changes that have been made.
+ */
+ spwent.sp_max = maxdays;
+ spwent.sp_min = mindays;
+ spwent.sp_lstchg = lstchgdate;
+ spwent.sp_warn = warndays;
+ spwent.sp_inact = inactdays;
+ spwent.sp_expire = expdate;
+
+ if (spw_update (&spwent) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"), Prog, spw_dbname (), spwent.sp_namp);
+ fail_exit (E_NOPERM);
+ }
+
+}
+
+/*
+ * get_defaults - get the value of the fields not set from the command line
+ */
+static void get_defaults (/*@null@*/const struct spwd *sp)
+{
+ /*
+ * Set the fields that aren't being set from the command line from
+ * the password file.
+ */
+ if (NULL != sp) {
+ if (!Mflg) {
+ maxdays = sp->sp_max;
+ }
+ if (!mflg) {
+ mindays = sp->sp_min;
+ }
+ if (!dflg) {
+ lstchgdate = sp->sp_lstchg;
+ }
+ if (!Wflg) {
+ warndays = sp->sp_warn;
+ }
+ if (!Iflg) {
+ inactdays = sp->sp_inact;
+ }
+ if (!Eflg) {
+ expdate = sp->sp_expire;
+ }
+ } else {
+ /*
+ * Use default values that will not change the behavior of the
+ * account.
+ */
+ if (!Mflg) {
+ maxdays = -1;
+ }
+ if (!mflg) {
+ mindays = -1;
+ }
+ if (!dflg) {
+ lstchgdate = -1;
+ }
+ if (!Wflg) {
+ warndays = -1;
+ }
+ if (!Iflg) {
+ inactdays = -1;
+ }
+ if (!Eflg) {
+ expdate = -1;
+ }
+ }
+}
+
+/*
+ * chage - change a user's password aging information
+ *
+ * This command controls the password aging information.
+ *
+ * The valid options are
+ *
+ * -d set last password change date (*)
+ * -E set account expiration date (*)
+ * -I set password inactive after expiration (*)
+ * -l show account aging information
+ * -M set maximum number of days before password change (*)
+ * -m set minimum number of days before password change (*)
+ * -W set expiration warning days (*)
+ *
+ * (*) requires root permission to execute.
+ *
+ * All of the time fields are entered in the internal format which is
+ * either seconds or days.
+ */
+
+int main (int argc, char **argv)
+{
+ const struct spwd *sp;
+ uid_t ruid;
+ gid_t rgid;
+ const struct passwd *pw;
+
+ /*
+ * Get the program name so that error messages can use it.
+ */
+ Prog = Basename (argv[0]);
+
+ sanitize_env ();
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ process_root_flag ("-R", argc, argv);
+
+#ifdef WITH_AUDIT
+ audit_help_open ();
+#endif
+ OPENLOG ("chage");
+
+ ruid = getuid ();
+ rgid = getgid ();
+ amroot = (ruid == 0);
+#ifdef WITH_SELINUX
+ if (amroot) {
+ amroot = (check_selinux_permit ("rootok") == 0);
+ }
+#endif
+
+ process_flags (argc, argv);
+
+ check_perms ();
+
+ if (!spw_file_present ()) {
+ fprintf (stderr,
+ _("%s: the shadow password file is not present\n"),
+ Prog);
+ SYSLOG ((LOG_WARN, "can't find the shadow password file"));
+ closelog ();
+ exit (E_SHADOW_NOTFOUND);
+ }
+
+ open_files (lflg);
+ /* Drop privileges */
+ if (lflg && ( (setregid (rgid, rgid) != 0)
+ || (setreuid (ruid, ruid) != 0))) {
+ fprintf (stderr, _("%s: failed to drop privileges (%s)\n"),
+ Prog, strerror (errno));
+ fail_exit (E_NOPERM);
+ }
+
+ pw = pw_locate (argv[optind]);
+ if (NULL == pw) {
+ fprintf (stderr, _("%s: user '%s' does not exist in %s\n"),
+ Prog, argv[optind], pw_dbname ());
+ closelog ();
+ fail_exit (E_NOPERM);
+ }
+
+ STRFCPY (user_name, pw->pw_name);
+#ifdef WITH_TCB
+ if (shadowtcb_set_user (pw->pw_name) == SHADOWTCB_FAILURE) {
+ fail_exit (E_NOPERM);
+ }
+#endif
+ user_uid = pw->pw_uid;
+
+ sp = spw_locate (argv[optind]);
+ get_defaults (sp);
+
+ /*
+ * Print out the expiration fields if the user has requested the
+ * list option.
+ */
+ if (lflg) {
+ if (!amroot && (ruid != user_uid)) {
+ fprintf (stderr, _("%s: Permission denied.\n"), Prog);
+ fail_exit (E_NOPERM);
+ }
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "display aging info",
+ user_name, (unsigned int) user_uid, 1);
+#endif
+ list_fields ();
+ fail_exit (E_SUCCESS);
+ }
+
+ /*
+ * If none of the fields were changed from the command line, let the
+ * user interactively change them.
+ */
+ if (!mflg && !Mflg && !dflg && !Wflg && !Iflg && !Eflg) {
+ printf (_("Changing the aging information for %s\n"),
+ user_name);
+ if (new_fields () == 0) {
+ fprintf (stderr, _("%s: error changing fields\n"),
+ Prog);
+ fail_exit (E_NOPERM);
+ }
+#ifdef WITH_AUDIT
+ else {
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "change all aging information",
+ user_name, (unsigned int) user_uid, 1);
+ }
+#endif
+ } else {
+#ifdef WITH_AUDIT
+ if (Mflg) {
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "change max age",
+ user_name, (unsigned int) user_uid, 1);
+ }
+ if (mflg) {
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "change min age",
+ user_name, (unsigned int) user_uid, 1);
+ }
+ if (dflg) {
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "change last change date",
+ user_name, (unsigned int) user_uid, 1);
+ }
+ if (Wflg) {
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "change passwd warning",
+ user_name, (unsigned int) user_uid, 1);
+ }
+ if (Iflg) {
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "change inactive days",
+ user_name, (unsigned int) user_uid, 1);
+ }
+ if (Eflg) {
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "change passwd expiration",
+ user_name, (unsigned int) user_uid, 1);
+ }
+#endif
+ }
+
+ update_age (sp, pw);
+
+ close_files ();
+
+ SYSLOG ((LOG_INFO, "changed password expiry for %s", user_name));
+
+ closelog ();
+ exit (E_SUCCESS);
+}
+
diff --git a/src/chfn.c b/src/chfn.c
new file mode 100644
index 0000000..b2658fc
--- /dev/null
+++ b/src/chfn.c
@@ -0,0 +1,750 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 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 <fcntl.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <getopt.h>
+#include "defines.h"
+#include "getdef.h"
+#include "nscd.h"
+#include "sssd.h"
+#ifdef USE_PAM
+#include "pam_defs.h"
+#endif
+#include "prototypes.h"
+#include "pwauth.h"
+#include "pwio.h"
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+/*
+ * Global variables.
+ */
+const char *Prog;
+static char fullnm[BUFSIZ];
+static char roomno[BUFSIZ];
+static char workph[BUFSIZ];
+static char homeph[BUFSIZ];
+static char slop[BUFSIZ];
+static bool amroot;
+/* Flags */
+static bool fflg = false; /* -f - set full name */
+static bool rflg = false; /* -r - set room number */
+static bool wflg = false; /* -w - set work phone number */
+static bool hflg = false; /* -h - set home phone number */
+static bool oflg = false; /* -o - set other information */
+static bool pw_locked = false;
+
+/*
+ * External identifiers
+ */
+
+/* local function prototypes */
+static void fail_exit (int code);
+static /*@noreturn@*/void usage (int status);
+static bool may_change_field (int);
+static void new_fields (void);
+static char *copy_field (char *, char *, char *);
+static void process_flags (int argc, char **argv);
+static void check_perms (const struct passwd *pw);
+static void update_gecos (const char *user, char *gecos);
+static void get_old_fields (const char *gecos);
+
+/*
+ * fail_exit - exit with an error and do some cleanup
+ */
+static void fail_exit (int code)
+{
+ if (pw_locked) {
+ if (pw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+ /* continue */
+ }
+ }
+ pw_locked = false;
+
+ closelog ();
+
+ exit (code);
+}
+
+/*
+ * usage - print command line syntax and exit
+ */
+static /*@noreturn@*/void usage (int status)
+{
+ FILE *usageout = (E_SUCCESS != status) ? stderr : stdout;
+ (void) fprintf (usageout,
+ _("Usage: %s [options] [LOGIN]\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+ (void) fputs (_(" -f, --full-name FULL_NAME change user's full name\n"), usageout);
+ (void) fputs (_(" -h, --home-phone HOME_PHONE change user's home phone number\n"), usageout);
+ (void) fputs (_(" -o, --other OTHER_INFO change user's other GECOS information\n"), usageout);
+ (void) fputs (_(" -r, --room ROOM_NUMBER change user's room number\n"), usageout);
+ (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
+ (void) fputs (_(" -u, --help display this help message and exit\n"), usageout);
+ (void) fputs (_(" -w, --work-phone WORK_PHONE change user's office phone number\n"), usageout);
+ (void) fputs ("\n", usageout);
+ exit (status);
+}
+
+/*
+ * may_change_field - indicate if the user is allowed to change a given field
+ * of her gecos information
+ *
+ * root can change any field.
+ *
+ * field should be one of 'f', 'r', 'w', 'h'
+ *
+ * Return true if the user can change the field and false otherwise.
+ */
+static bool may_change_field (int field)
+{
+ const char *cp;
+
+ /*
+ * CHFN_RESTRICT can now specify exactly which fields may be changed
+ * by regular users, by using any combination of the following
+ * letters:
+ * f - full name
+ * r - room number
+ * w - work phone
+ * h - home phone
+ *
+ * This makes it possible to disallow changing the room number
+ * information, for example - this feature was suggested by Maciej
+ * 'Tycoon' Majchrowski.
+ *
+ * For backward compatibility, "yes" is equivalent to "rwh",
+ * "no" is equivalent to "frwh". Only root can change anything
+ * if the string is empty or not defined at all.
+ */
+ if (amroot) {
+ return true;
+ }
+
+ cp = getdef_str ("CHFN_RESTRICT");
+ if (NULL == cp) {
+ cp = "";
+ } else if (strcmp (cp, "yes") == 0) {
+ cp = "rwh";
+ } else if (strcmp (cp, "no") == 0) {
+ cp = "frwh";
+ }
+
+ if (strchr (cp, field) != NULL) {
+ return true;
+ }
+
+ return false;
+}
+
+/*
+ * new_fields - change the user's GECOS information interactively
+ *
+ * prompt the user for each of the four fields and fill in the fields from
+ * the user's response, or leave alone if nothing was entered.
+ */
+static void new_fields (void)
+{
+ puts (_("Enter the new value, or press ENTER for the default"));
+
+ if (may_change_field ('f')) {
+ change_field (fullnm, sizeof fullnm, _("Full Name"));
+ } else {
+ printf (_("\t%s: %s\n"), _("Full Name"), fullnm);
+ }
+
+ if (may_change_field ('r')) {
+ change_field (roomno, sizeof roomno, _("Room Number"));
+ } else {
+ printf (_("\t%s: %s\n"), _("Room Number"), fullnm);
+ }
+
+ if (may_change_field ('w')) {
+ change_field (workph, sizeof workph, _("Work Phone"));
+ } else {
+ printf (_("\t%s: %s\n"), _("Work Phone"), fullnm);
+ }
+
+ if (may_change_field ('h')) {
+ change_field (homeph, sizeof homeph, _("Home Phone"));
+ } else {
+ printf (_("\t%s: %s\n"), _("Home Phone"), fullnm);
+ }
+
+ if (amroot) {
+ change_field (slop, sizeof slop, _("Other"));
+ }
+}
+
+/*
+ * copy_field - get the next field from the gecos field
+ *
+ * copy_field copies the next field from the gecos field, returning a
+ * pointer to the field which follows, or NULL if there are no more fields.
+ *
+ * in - the current GECOS field
+ * out - where to copy the field to
+ * extra - fields with '=' get copied here
+ */
+static char *copy_field (char *in, char *out, char *extra)
+{
+ char *cp = NULL;
+
+ while (NULL != in) {
+ cp = strchr (in, ',');
+ if (NULL != cp) {
+ *cp++ = '\0';
+ }
+
+ if (strchr (in, '=') == NULL) {
+ break;
+ }
+
+ if (NULL != extra) {
+ if ('\0' != extra[0]) {
+ strcat (extra, ",");
+ }
+
+ strcat (extra, in);
+ }
+ in = cp;
+ }
+ if ((NULL != in) && (NULL != out)) {
+ strcpy (out, in);
+ }
+
+ return cp;
+}
+
+/*
+ * process_flags - parse the command line options
+ *
+ * It will not return if an error is encountered.
+ */
+static void process_flags (int argc, char **argv)
+{
+ int c; /* flag currently being processed */
+ static struct option long_options[] = {
+ {"full-name", required_argument, NULL, 'f'},
+ {"home-phone", required_argument, NULL, 'h'},
+ {"other", required_argument, NULL, 'o'},
+ {"room", required_argument, NULL, 'r'},
+ {"root", required_argument, NULL, 'R'},
+ {"help", no_argument, NULL, 'u'},
+ {"work-phone", required_argument, NULL, 'w'},
+ {NULL, 0, NULL, '\0'}
+ };
+
+ /*
+ * The remaining arguments will be processed one by one and executed
+ * by this command. The name is the last argument if it does not
+ * begin with a "-", otherwise the name is determined from the
+ * environment and must agree with the real UID. Also, the UID will
+ * be checked for any commands which are restricted to root only.
+ */
+ while ((c = getopt_long (argc, argv, "f:h:o:r:R:uw:",
+ long_options, NULL)) != -1) {
+ switch (c) {
+ case 'f':
+ if (!may_change_field ('f')) {
+ fprintf (stderr,
+ _("%s: Permission denied.\n"), Prog);
+ exit (E_NOPERM);
+ }
+ fflg = true;
+ STRFCPY (fullnm, optarg);
+ break;
+ case 'h':
+ if (!may_change_field ('h')) {
+ fprintf (stderr,
+ _("%s: Permission denied.\n"), Prog);
+ exit (E_NOPERM);
+ }
+ hflg = true;
+ STRFCPY (homeph, optarg);
+ break;
+ case 'o':
+ if (!amroot) {
+ fprintf (stderr,
+ _("%s: Permission denied.\n"), Prog);
+ exit (E_NOPERM);
+ }
+ oflg = true;
+ STRFCPY (slop, optarg);
+ break;
+ case 'r':
+ if (!may_change_field ('r')) {
+ fprintf (stderr,
+ _("%s: Permission denied.\n"), Prog);
+ exit (E_NOPERM);
+ }
+ rflg = true;
+ STRFCPY (roomno, optarg);
+ break;
+ case 'R': /* no-op, handled in process_root_flag () */
+ break;
+ case 'u':
+ usage (E_SUCCESS);
+ /*@notreached@*/break;
+ case 'w':
+ if (!may_change_field ('w')) {
+ fprintf (stderr,
+ _("%s: Permission denied.\n"), Prog);
+ exit (E_NOPERM);
+ }
+ wflg = true;
+ STRFCPY (workph, optarg);
+ break;
+ default:
+ usage (E_USAGE);
+ }
+ }
+}
+
+/*
+ * check_perms - check if the caller is allowed to add a group
+ *
+ * Non-root users are only allowed to change their gecos field.
+ * (see also may_change_field())
+ *
+ * Non-root users must be authenticated.
+ *
+ * It will not return if the user is not allowed.
+ */
+static void check_perms (const struct passwd *pw)
+{
+#ifdef USE_PAM
+ pam_handle_t *pamh = NULL;
+ int retval;
+ struct passwd *pampw;
+#endif
+
+ /*
+ * Non-privileged users are only allowed to change the gecos field
+ * if the UID of the user matches the current real UID.
+ */
+ if (!amroot && pw->pw_uid != getuid ()) {
+ fprintf (stderr, _("%s: Permission denied.\n"), Prog);
+ closelog ();
+ exit (E_NOPERM);
+ }
+#ifdef WITH_SELINUX
+ /*
+ * If the UID of the user does not match the current real UID,
+ * check if the change is allowed by SELinux policy.
+ */
+ if ((pw->pw_uid != getuid ())
+ && (check_selinux_permit ("chfn") != 0)) {
+ fprintf (stderr, _("%s: Permission denied.\n"), Prog);
+ closelog ();
+ exit (E_NOPERM);
+ }
+#endif
+
+#ifndef USE_PAM
+ /*
+ * Non-privileged users are optionally authenticated (must enter the
+ * password of the user whose information is being changed) before
+ * any changes can be made. Idea from util-linux chfn/chsh.
+ * --marekm
+ */
+ if (!amroot && getdef_bool ("CHFN_AUTH")) {
+ passwd_check (pw->pw_name, pw->pw_passwd, "chfn");
+ }
+
+#else /* !USE_PAM */
+ pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
+ if (NULL == pampw) {
+ fprintf (stderr,
+ _("%s: Cannot determine your user name.\n"),
+ Prog);
+ exit (E_NOPERM);
+ }
+
+ retval = pam_start ("chfn", pampw->pw_name, &conv, &pamh);
+
+ if (PAM_SUCCESS == retval) {
+ retval = pam_authenticate (pamh, 0);
+ }
+
+ if (PAM_SUCCESS == retval) {
+ retval = pam_acct_mgmt (pamh, 0);
+ }
+
+ if (PAM_SUCCESS != retval) {
+ fprintf (stderr, _("%s: PAM: %s\n"),
+ Prog, pam_strerror (pamh, retval));
+ SYSLOG((LOG_ERR, "%s", pam_strerror (pamh, retval)));
+ if (NULL != pamh) {
+ (void) pam_end (pamh, retval);
+ }
+ exit (E_NOPERM);
+ }
+ (void) pam_end (pamh, retval);
+#endif /* USE_PAM */
+}
+
+/*
+ * update_gecos - update the gecos fields in the password database
+ *
+ * Commit the user's entry after changing her gecos field.
+ */
+static void update_gecos (const char *user, char *gecos)
+{
+ const struct passwd *pw; /* The user's password file entry */
+ struct passwd pwent; /* modified password file entry */
+
+ /*
+ * Before going any further, raise the ulimit to prevent colliding
+ * into a lowered ulimit, and set the real UID to root to protect
+ * against unexpected signals. Any keyboard signals are set to be
+ * ignored.
+ */
+ if (setuid (0) != 0) {
+ fputs (_("Cannot change ID to root.\n"), stderr);
+ SYSLOG ((LOG_ERR, "can't setuid(0)"));
+ fail_exit (E_NOPERM);
+ }
+ pwd_init ();
+
+ /*
+ * The passwd entry is now ready to be committed back to the
+ * password file. Get a lock on the file and open it.
+ */
+ if (pw_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, pw_dbname ());
+ fail_exit (E_NOPERM);
+ }
+ pw_locked = true;
+ if (pw_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"), Prog, pw_dbname ());
+ fail_exit (E_NOPERM);
+ }
+
+ /*
+ * Get the entry to update using pw_locate() - we want the real one
+ * from /etc/passwd, not the one from getpwnam() which could contain
+ * the shadow password if (despite the warnings) someone enables
+ * AUTOSHADOW (or SHADOW_COMPAT in libc). --marekm
+ */
+ pw = pw_locate (user);
+ if (NULL == pw) {
+ fprintf (stderr,
+ _("%s: user '%s' does not exist in %s\n"),
+ Prog, user, pw_dbname ());
+ fail_exit (E_NOPERM);
+ }
+
+ /*
+ * Make a copy of the entry, then change the gecos field. The other
+ * fields remain unchanged.
+ */
+ pwent = *pw;
+ pwent.pw_gecos = gecos;
+
+ /*
+ * Update the passwd file entry. If there is a DBM file, update that
+ * entry as well.
+ */
+ if (pw_update (&pwent) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, pw_dbname (), pwent.pw_name);
+ fail_exit (E_NOPERM);
+ }
+
+ /*
+ * Changes have all been made, so commit them and unlock the file.
+ */
+ if (pw_close () == 0) {
+ fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", pw_dbname ()));
+ fail_exit (E_NOPERM);
+ }
+ if (pw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+ /* continue */
+ }
+ pw_locked = false;
+}
+
+/*
+ * get_old_fields - parse the old gecos and use the old value for the fields
+ * which are not set on the command line
+ */
+static void get_old_fields (const char *gecos)
+{
+ char *cp; /* temporary character pointer */
+ char old_gecos[BUFSIZ]; /* buffer for old GECOS fields */
+ STRFCPY (old_gecos, gecos);
+
+ /*
+ * Now get the full name. It is the first comma separated field in
+ * the GECOS field.
+ */
+ cp = copy_field (old_gecos, fflg ? (char *) 0 : fullnm, slop);
+
+ /*
+ * Now get the room number. It is the next comma separated field,
+ * if there is indeed one.
+ */
+ if (NULL != cp) {
+ cp = copy_field (cp, rflg ? (char *) 0 : roomno, slop);
+ }
+
+ /*
+ * Now get the work phone number. It is the third field.
+ */
+ if (NULL != cp) {
+ cp = copy_field (cp, wflg ? (char *) 0 : workph, slop);
+ }
+
+ /*
+ * Now get the home phone number. It is the fourth field.
+ */
+ if (NULL != cp) {
+ cp = copy_field (cp, hflg ? (char *) 0 : homeph, slop);
+ }
+
+ /*
+ * Anything left over is "slop".
+ */
+ if ((NULL != cp) && !oflg) {
+ if ('\0' != slop[0]) {
+ strcat (slop, ",");
+ }
+
+ strcat (slop, cp);
+ }
+}
+
+/*
+ * check_fields - check all of the fields for valid information
+ *
+ * It will not return if a field is not valid.
+ */
+static void check_fields (void)
+{
+ int err;
+ err = valid_field (fullnm, ":,=\n");
+ if (err > 0) {
+ fprintf (stderr, _("%s: name with non-ASCII characters: '%s'\n"), Prog, fullnm);
+ } else if (err < 0) {
+ fprintf (stderr, _("%s: invalid name: '%s'\n"), Prog, fullnm);
+ fail_exit (E_NOPERM);
+ }
+ err = valid_field (roomno, ":,=\n");
+ if (err > 0) {
+ fprintf (stderr, _("%s: room number with non-ASCII characters: '%s'\n"), Prog, roomno);
+ } else if (err < 0) {
+ fprintf (stderr, _("%s: invalid room number: '%s'\n"),
+ Prog, roomno);
+ fail_exit (E_NOPERM);
+ }
+ if (valid_field (workph, ":,=\n") != 0) {
+ fprintf (stderr, _("%s: invalid work phone: '%s'\n"),
+ Prog, workph);
+ fail_exit (E_NOPERM);
+ }
+ if (valid_field (homeph, ":,=\n") != 0) {
+ fprintf (stderr, _("%s: invalid home phone: '%s'\n"),
+ Prog, homeph);
+ fail_exit (E_NOPERM);
+ }
+ err = valid_field (slop, ":\n");
+ if (err > 0) {
+ fprintf (stderr, _("%s: '%s' contains non-ASCII characters\n"), Prog, slop);
+ } else if (err < 0) {
+ fprintf (stderr,
+ _("%s: '%s' contains illegal characters\n"),
+ Prog, slop);
+ fail_exit (E_NOPERM);
+ }
+}
+
+/*
+ * chfn - change a user's password file information
+ *
+ * This command controls the GECOS field information in the password
+ * file entry.
+ *
+ * The valid options are
+ *
+ * -f full name
+ * -r room number
+ * -w work phone number
+ * -h home phone number
+ * -o other information (*)
+ *
+ * (*) requires root permission to execute.
+ */
+int main (int argc, char **argv)
+{
+ const struct passwd *pw; /* password file entry */
+ char new_gecos[BUFSIZ]; /* buffer for new GECOS fields */
+ char *user;
+
+ /*
+ * Get the program name. The program name is used as a
+ * prefix to most error messages.
+ */
+ Prog = Basename (argv[0]);
+
+ sanitize_env ();
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ process_root_flag ("-R", argc, argv);
+
+ /*
+ * This command behaves different for root and non-root
+ * users.
+ */
+ amroot = (getuid () == 0);
+
+ OPENLOG ("chfn");
+
+ /* parse the command line options */
+ process_flags (argc, argv);
+
+ /*
+ * Get the name of the user to check. It is either the command line
+ * name, or the name getlogin() returns.
+ */
+ if (optind < argc) {
+ user = argv[optind];
+ pw = xgetpwnam (user);
+ if (NULL == pw) {
+ fprintf (stderr, _("%s: user '%s' does not exist\n"), Prog,
+ user);
+ fail_exit (E_NOPERM);
+ }
+ } else {
+ pw = get_my_pwent ();
+ if (NULL == pw) {
+ fprintf (stderr,
+ _("%s: Cannot determine your user name.\n"),
+ Prog);
+ SYSLOG ((LOG_WARN, "Cannot determine the user name of the caller (UID %lu)",
+ (unsigned long) getuid ()));
+ fail_exit (E_NOPERM);
+ }
+ user = xstrdup (pw->pw_name);
+ }
+
+#ifdef USE_NIS
+ /*
+ * Now we make sure this is a LOCAL password entry for this user ...
+ */
+ if (__ispwNIS ()) {
+ char *nis_domain;
+ char *nis_master;
+
+ fprintf (stderr,
+ _("%s: cannot change user '%s' on NIS client.\n"),
+ Prog, user);
+
+ if (!yp_get_default_domain (&nis_domain) &&
+ !yp_master (nis_domain, "passwd.byname", &nis_master)) {
+ fprintf (stderr,
+ _
+ ("%s: '%s' is the NIS master for this client.\n"),
+ Prog, nis_master);
+ }
+ fail_exit (E_NOPERM);
+ }
+#endif
+
+ /* Check that the caller is allowed to change the gecos of the
+ * specified user */
+ check_perms (pw);
+
+ /* If some fields were not set on the command line, load the value from
+ * the old gecos fields. */
+ get_old_fields (pw->pw_gecos);
+
+ /*
+ * If none of the fields were changed from the command line, let the
+ * user interactively change them.
+ */
+ if (!fflg && !rflg && !wflg && !hflg && !oflg) {
+ printf (_("Changing the user information for %s\n"), user);
+ new_fields ();
+ }
+
+ /*
+ * Check all of the fields for valid information
+ */
+ check_fields ();
+
+ /*
+ * Build the new GECOS field by plastering all the pieces together,
+ * if they will fit ...
+ */
+ if ((strlen (fullnm) + strlen (roomno) + strlen (workph) +
+ strlen (homeph) + strlen (slop)) > (unsigned int) 80) {
+ fprintf (stderr, _("%s: fields too long\n"), Prog);
+ fail_exit (E_NOPERM);
+ }
+ snprintf (new_gecos, sizeof new_gecos, "%s,%s,%s,%s%s%s",
+ fullnm, roomno, workph, homeph,
+ ('\0' != slop[0]) ? "," : "", slop);
+
+ /* Rewrite the user's gecos in the passwd file */
+ update_gecos (user, new_gecos);
+
+ SYSLOG ((LOG_INFO, "changed user '%s' information", user));
+
+ nscd_flush_cache ("passwd");
+ sssd_flush_cache (SSSD_DB_PASSWD);
+
+ closelog ();
+ exit (E_SUCCESS);
+}
+
diff --git a/src/chgpasswd.c b/src/chgpasswd.c
new file mode 100644
index 0000000..4013abb
--- /dev/null
+++ b/src/chgpasswd.c
@@ -0,0 +1,636 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 2006 , Tomasz Kłoczko
+ * Copyright (c) 2006 , Jonas Meurer
+ * Copyright (c) 2007 - 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 <fcntl.h>
+#include <getopt.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+#include "pam_defs.h"
+#endif /* USE_PAM */
+#endif /* ACCT_TOOLS_SETUID */
+#include "defines.h"
+#include "nscd.h"
+#include "sssd.h"
+#include "prototypes.h"
+#include "groupio.h"
+#ifdef SHADOWGRP
+#include "sgroupio.h"
+#endif
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+/*
+ * Global variables
+ */
+const char *Prog;
+static bool eflg = false;
+static bool md5flg = false;
+#if defined(USE_SHA_CRYPT) || defined(USE_BCRYPT)
+static bool sflg = false;
+#endif /* USE_SHA_CRYPT || USE_BCRYPT */
+
+static /*@null@*//*@observer@*/const char *crypt_method = NULL;
+#define cflg (NULL != crypt_method)
+#ifdef USE_SHA_CRYPT
+static long sha_rounds = 5000;
+#endif
+#ifdef USE_BCRYPT
+static long bcrypt_rounds = 13;
+#endif
+
+#ifdef SHADOWGRP
+static bool is_shadow_grp;
+static bool sgr_locked = false;
+#endif
+static bool gr_locked = false;
+
+/* local function prototypes */
+static void fail_exit (int code);
+static /*@noreturn@*/void usage (int status);
+static void process_flags (int argc, char **argv);
+static void check_flags (void);
+static void check_perms (void);
+static void open_files (void);
+static void close_files (void);
+
+/*
+ * fail_exit - exit with a failure code after unlocking the files
+ */
+static void fail_exit (int code)
+{
+ if (gr_locked) {
+ if (gr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+ /* continue */
+ }
+ }
+
+#ifdef SHADOWGRP
+ if (sgr_locked) {
+ if (sgr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+ /* continue */
+ }
+ }
+#endif
+
+ exit (code);
+}
+
+/*
+ * usage - display usage message and exit
+ */
+static /*@noreturn@*/void usage (int status)
+{
+ FILE *usageout = (E_SUCCESS != status) ? stderr : stdout;
+ (void) fprintf (usageout,
+ _("Usage: %s [options]\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+ (void) fprintf (usageout,
+ _(" -c, --crypt-method METHOD the crypt method (one of %s)\n"),
+#if !defined(USE_SHA_CRYPT) && !defined(USE_BCRYPT)
+ "NONE DES MD5"
+#elif defined(USE_SHA_CRYPT) && defined(USE_BCRYPT)
+ "NONE DES MD5 SHA256 SHA512 BCRYPT"
+#elif defined(USE_SHA_CRYPT)
+ "NONE DES MD5 SHA256 SHA512"
+#else
+ "NONE DES MD5 BCRYPT"
+#endif
+ );
+ (void) fputs (_(" -e, --encrypted supplied passwords are encrypted\n"), usageout);
+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
+ (void) fputs (_(" -m, --md5 encrypt the clear text password using\n"
+ " the MD5 algorithm\n"),
+ usageout);
+ (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
+#if defined(USE_SHA_CRYPT) || defined(USE_BCRYPT)
+ (void) fputs (_(" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+ " crypt algorithms\n"),
+ usageout);
+#endif /* USE_SHA_CRYPT || USE_BCRYPT */
+ (void) fputs ("\n", usageout);
+
+ exit (status);
+}
+
+/*
+ * process_flags - parse the command line options
+ *
+ * It will not return if an error is encountered.
+ */
+static void process_flags (int argc, char **argv)
+{
+ int c;
+ static struct option long_options[] = {
+ {"crypt-method", required_argument, NULL, 'c'},
+ {"encrypted", no_argument, NULL, 'e'},
+ {"help", no_argument, NULL, 'h'},
+ {"md5", no_argument, NULL, 'm'},
+ {"root", required_argument, NULL, 'R'},
+#if defined(USE_SHA_CRYPT) || defined(USE_BCRYPT)
+ {"sha-rounds", required_argument, NULL, 's'},
+#endif /* USE_SHA_CRYPT || USE_BCRYPT */
+ {NULL, 0, NULL, '\0'}
+ };
+ while ((c = getopt_long (argc, argv,
+#if defined(USE_SHA_CRYPT) || defined(USE_BCRYPT)
+ "c:ehmR:s:",
+#else
+ "c:ehmR:",
+#endif
+ long_options, NULL)) != -1) {
+ switch (c) {
+ case 'c':
+ crypt_method = optarg;
+ break;
+ case 'e':
+ eflg = true;
+ break;
+ case 'h':
+ usage (E_SUCCESS);
+ /*@notreached@*/break;
+ case 'm':
+ md5flg = true;
+ break;
+ case 'R': /* no-op, handled in process_root_flag () */
+ break;
+#if defined(USE_SHA_CRYPT) && defined(USE_BCRYPT)
+ case 's':
+ sflg = true;
+ if ( ( ((0 == strcmp (crypt_method, "SHA256")) || (0 == strcmp (crypt_method, "SHA512")))
+ && (0 == getlong(optarg, &sha_rounds)))
+ || ( (0 == strcmp (crypt_method, "BCRYPT"))
+ && (0 == getlong(optarg, &bcrypt_rounds)))) {
+ fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"),
+ Prog, optarg);
+ usage (E_USAGE);
+ }
+ break;
+#elif defined(USE_SHA_CRYPT)
+ case 's':
+ sflg = true;
+ if (0 == getlong(optarg, &sha_rounds)) {
+ fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"),
+ Prog, optarg);
+ usage (E_USAGE);
+ }
+ break;
+#elif defined(USE_BCRYPT)
+ case 's':
+ sflg = true;
+ if (0 == getlong(optarg, &bcrypt_rounds)) {
+ fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"),
+ Prog, optarg);
+ usage (E_USAGE);
+ }
+ break;
+#endif
+
+ default:
+ usage (E_USAGE);
+ /*@notreached@*/break;
+ }
+ }
+
+ /* validate options */
+ check_flags ();
+}
+
+/*
+ * check_flags - check flags and parameters consistency
+ *
+ * It will not return if an error is encountered.
+ */
+static void check_flags (void)
+{
+#if defined(USE_SHA_CRYPT) || defined(USE_BCRYPT)
+ if (sflg && !cflg) {
+ fprintf (stderr,
+ _("%s: %s flag is only allowed with the %s flag\n"),
+ Prog, "-s", "-c");
+ usage (E_USAGE);
+ }
+#endif
+
+ if ((eflg && (md5flg || cflg)) ||
+ (md5flg && cflg)) {
+ fprintf (stderr,
+ _("%s: the -c, -e, and -m flags are exclusive\n"),
+ Prog);
+ usage (E_USAGE);
+ }
+
+ if (cflg) {
+ if ( (0 != strcmp (crypt_method, "DES"))
+ && (0 != strcmp (crypt_method, "MD5"))
+ && (0 != strcmp (crypt_method, "NONE"))
+#ifdef USE_SHA_CRYPT
+ && (0 != strcmp (crypt_method, "SHA256"))
+ && (0 != strcmp (crypt_method, "SHA512"))
+#endif
+#ifdef USE_BCRYPT
+ && (0 != strcmp (crypt_method, "BCRYPT"))
+#endif
+ ) {
+ fprintf (stderr,
+ _("%s: unsupported crypt method: %s\n"),
+ Prog, crypt_method);
+ usage (E_USAGE);
+ }
+ }
+}
+
+/*
+ * check_perms - check if the caller is allowed to add a group
+ *
+ * With PAM support, the setuid bit can be set on chgpasswd to allow
+ * non-root users to groups.
+ * Without PAM support, only users who can write in the group databases
+ * can add groups.
+ *
+ * It will not return if the user is not allowed.
+ */
+static void check_perms (void)
+{
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+ pam_handle_t *pamh = NULL;
+ int retval;
+ struct passwd *pampw;
+
+ pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
+ if (NULL == pampw) {
+ fprintf (stderr,
+ _("%s: Cannot determine your user name.\n"),
+ Prog);
+ exit (1);
+ }
+
+ retval = pam_start ("chgpasswd", pampw->pw_name, &conv, &pamh);
+
+ if (PAM_SUCCESS == retval) {
+ retval = pam_authenticate (pamh, 0);
+ }
+
+ if (PAM_SUCCESS == retval) {
+ retval = pam_acct_mgmt (pamh, 0);
+ }
+
+ if (PAM_SUCCESS != retval) {
+ fprintf (stderr, _("%s: PAM: %s\n"),
+ Prog, pam_strerror (pamh, retval));
+ SYSLOG((LOG_ERR, "%s", pam_strerror (pamh, retval)));
+ if (NULL != pamh) {
+ (void) pam_end (pamh, retval);
+ }
+ exit (1);
+ }
+ (void) pam_end (pamh, retval);
+#endif /* USE_PAM */
+#endif /* ACCT_TOOLS_SETUID */
+}
+
+/*
+ * open_files - lock and open the group databases
+ */
+static void open_files (void)
+{
+ /*
+ * Lock the group file and open it for reading and writing. This will
+ * bring all of the entries into memory where they may be updated.
+ */
+ if (gr_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, gr_dbname ());
+ fail_exit (1);
+ }
+ gr_locked = true;
+ if (gr_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"), Prog, gr_dbname ());
+ fail_exit (1);
+ }
+
+#ifdef SHADOWGRP
+ /* Do the same for the shadowed database, if it exist */
+ if (is_shadow_grp) {
+ if (sgr_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, sgr_dbname ());
+ fail_exit (1);
+ }
+ sgr_locked = true;
+ if (sgr_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr, _("%s: cannot open %s\n"),
+ Prog, sgr_dbname ());
+ fail_exit (1);
+ }
+ }
+#endif
+}
+
+/*
+ * close_files - close and unlock the group databases
+ */
+static void close_files (void)
+{
+#ifdef SHADOWGRP
+ if (is_shadow_grp) {
+ if (sgr_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", sgr_dbname ()));
+ fail_exit (1);
+ }
+ if (sgr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+ /* continue */
+ }
+ sgr_locked = false;
+ }
+#endif
+
+ if (gr_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", gr_dbname ()));
+ fail_exit (1);
+ }
+ if (gr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+ /* continue */
+ }
+ gr_locked = false;
+}
+
+int main (int argc, char **argv)
+{
+ char buf[BUFSIZ];
+ char *name;
+ char *newpwd;
+ char *cp;
+
+#ifdef SHADOWGRP
+ const struct sgrp *sg;
+ struct sgrp newsg;
+#endif
+
+ const struct group *gr;
+ struct group newgr;
+ int errors = 0;
+ int line = 0;
+
+ Prog = Basename (argv[0]);
+
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ process_root_flag ("-R", argc, argv);
+
+ process_flags (argc, argv);
+
+ OPENLOG ("chgpasswd");
+
+ check_perms ();
+
+#ifdef SHADOWGRP
+ is_shadow_grp = sgr_file_present ();
+#endif
+
+ open_files ();
+
+ /*
+ * Read each line, separating the group name from the password. The
+ * group entry for each group will be looked up in the appropriate
+ * file (gshadow or group) and the password changed.
+ */
+ while (fgets (buf, (int) sizeof buf, stdin) != (char *) 0) {
+ line++;
+ cp = strrchr (buf, '\n');
+ if (NULL != cp) {
+ *cp = '\0';
+ } else {
+ fprintf (stderr, _("%s: line %d: line too long\n"),
+ Prog, line);
+ errors++;
+ continue;
+ }
+
+ /*
+ * The group's name is the first field. It is separated from
+ * the password with a ":" character which is replaced with a
+ * NUL to give the new password. The new password will then
+ * be encrypted in the normal fashion with a new salt
+ * generated, unless the '-e' is given, in which case it is
+ * assumed to already be encrypted.
+ */
+
+ name = buf;
+ cp = strchr (name, ':');
+ if (NULL != cp) {
+ *cp = '\0';
+ cp++;
+ } else {
+ fprintf (stderr,
+ _("%s: line %d: missing new password\n"),
+ Prog, line);
+ errors++;
+ continue;
+ }
+ newpwd = cp;
+ if ( (!eflg)
+ && ( (NULL == crypt_method)
+ || (0 != strcmp (crypt_method, "NONE")))) {
+ void *arg = NULL;
+ const char *salt;
+ if (md5flg) {
+ crypt_method = "MD5";
+ }
+#if defined(USE_SHA_CRYPT) && defined(USE_BCRYPT)
+ if (sflg) {
+ if ( (0 == strcmp (crypt_method, "SHA256"))
+ || (0 == strcmp (crypt_method, "SHA512"))) {
+ arg = &sha_rounds;
+ }
+ else if (0 == strcmp (crypt_method, "BCRYPT")) {
+ arg = &bcrypt_rounds;
+ }
+ }
+#elif defined(USE_SHA_CRYPT)
+ if (sflg) {
+ arg = &sha_rounds;
+ }
+#elif defined(USE_BCRYPT)
+ if (sflg) {
+ arg = &bcrypt_rounds;
+ }
+#endif
+ salt = crypt_make_salt (crypt_method, arg);
+ cp = pw_encrypt (newpwd, salt);
+ if (NULL == cp) {
+ fprintf (stderr,
+ _("%s: failed to crypt password with salt '%s': %s\n"),
+ Prog, salt, strerror (errno));
+ fail_exit (1);
+ }
+ }
+
+ /*
+ * Get the group file entry for this group. The group must
+ * already exist.
+ */
+ gr = gr_locate (name);
+ if (NULL == gr) {
+ fprintf (stderr,
+ _("%s: line %d: group '%s' does not exist\n"), Prog,
+ line, name);
+ errors++;
+ continue;
+ }
+#ifdef SHADOWGRP
+ if (is_shadow_grp) {
+ /* The gshadow entry should be updated if the
+ * group entry has a password set to 'x'.
+ * But on the other hand, if there is already both
+ * a group and a gshadow password, it's preferable
+ * to update both.
+ */
+ sg = sgr_locate (name);
+
+ if ( (NULL == sg)
+ && (strcmp (gr->gr_passwd,
+ SHADOW_PASSWD_STRING) == 0)) {
+ static char *empty = NULL;
+ /* If the password is set to 'x' in
+ * group, but there are no entries in
+ * gshadow, create one.
+ */
+ newsg.sg_name = name;
+ /* newsg.sg_passwd = NULL; will be set later */
+ newsg.sg_adm = &empty;
+ newsg.sg_mem = dup_list (gr->gr_mem);
+ sg = &newsg;
+ }
+ } else {
+ sg = NULL;
+ }
+#endif
+
+ /*
+ * The freshly encrypted new password is merged into the
+ * group's entry.
+ */
+#ifdef SHADOWGRP
+ if (NULL != sg) {
+ newsg = *sg;
+ newsg.sg_passwd = cp;
+ }
+ if ( (NULL == sg)
+ || (strcmp (gr->gr_passwd, SHADOW_PASSWD_STRING) != 0))
+#endif
+ {
+ newgr = *gr;
+ newgr.gr_passwd = cp;
+ }
+
+ /*
+ * The updated group file entry is then put back and will
+ * be written to the group file later, after all the
+ * other entries have been updated as well.
+ */
+#ifdef SHADOWGRP
+ if (NULL != sg) {
+ if (sgr_update (&newsg) == 0) {
+ fprintf (stderr,
+ _("%s: line %d: failed to prepare the new %s entry '%s'\n"),
+ Prog, line, sgr_dbname (), newsg.sg_name);
+ errors++;
+ continue;
+ }
+ }
+ if ( (NULL == sg)
+ || (strcmp (gr->gr_passwd, SHADOW_PASSWD_STRING) != 0))
+#endif
+ {
+ if (gr_update (&newgr) == 0) {
+ fprintf (stderr,
+ _("%s: line %d: failed to prepare the new %s entry '%s'\n"),
+ Prog, line, gr_dbname (), newgr.gr_name);
+ errors++;
+ continue;
+ }
+ }
+ }
+
+ /*
+ * Any detected errors will cause the entire set of changes to be
+ * aborted. Unlocking the group file will cause all of the
+ * changes to be ignored. Otherwise the file is closed, causing the
+ * changes to be written out all at once, and then unlocked
+ * afterwards.
+ */
+ if (0 != errors) {
+ fprintf (stderr,
+ _("%s: error detected, changes ignored\n"), Prog);
+ fail_exit (1);
+ }
+
+ close_files ();
+
+ nscd_flush_cache ("group");
+ sssd_flush_cache (SSSD_DB_GROUP);
+
+ return (0);
+}
+
diff --git a/src/chpasswd.c b/src/chpasswd.c
new file mode 100644
index 0000000..be61e03
--- /dev/null
+++ b/src/chpasswd.c
@@ -0,0 +1,689 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 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 <fcntl.h>
+#include <getopt.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef USE_PAM
+#include "pam_defs.h"
+#endif /* USE_PAM */
+#include "defines.h"
+#include "nscd.h"
+#include "sssd.h"
+#include "getdef.h"
+#include "prototypes.h"
+#include "pwio.h"
+#include "shadowio.h"
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+/*
+ * Global variables
+ */
+const char *Prog;
+static bool eflg = false;
+static bool md5flg = false;
+#if defined(USE_SHA_CRYPT) || defined(USE_BCRYPT)
+static bool sflg = false;
+#endif
+
+static /*@null@*//*@observer@*/const char *crypt_method = NULL;
+#define cflg (NULL != crypt_method)
+#ifdef USE_SHA_CRYPT
+static long sha_rounds = 5000;
+#endif
+#ifdef USE_BCRYPT
+static long bcrypt_rounds = 13;
+#endif
+
+static bool is_shadow_pwd;
+static bool pw_locked = false;
+static bool spw_locked = false;
+
+/* local function prototypes */
+static void fail_exit (int code);
+static /*@noreturn@*/void usage (int status);
+static void process_flags (int argc, char **argv);
+static void check_flags (void);
+static void check_perms (void);
+static void open_files (void);
+static void close_files (void);
+
+/*
+ * fail_exit - exit with a failure code after unlocking the files
+ */
+static void fail_exit (int code)
+{
+ if (pw_locked) {
+ if (pw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+ /* continue */
+ }
+ }
+
+ if (spw_locked) {
+ if (spw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+ /* continue */
+ }
+ }
+
+ exit (code);
+}
+
+/*
+ * usage - display usage message and exit
+ */
+static /*@noreturn@*/void usage (int status)
+{
+ FILE *usageout = (E_SUCCESS != status) ? stderr : stdout;
+ (void) fprintf (usageout,
+ _("Usage: %s [options]\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+ (void) fprintf (usageout,
+ _(" -c, --crypt-method METHOD the crypt method (one of %s)\n"),
+#if !defined(USE_SHA_CRYPT) && !defined(USE_BCRYPT)
+ "NONE DES MD5"
+#elif defined(USE_SHA_CRYPT) && defined(USE_BCRYPT)
+ "NONE DES MD5 SHA256 SHA512 BCRYPT"
+#elif defined(USE_SHA_CRYPT)
+ "NONE DES MD5 SHA256 SHA512"
+#else
+ "NONE DES MD5 BCRYPT"
+#endif
+ );
+ (void) fputs (_(" -e, --encrypted supplied passwords are encrypted\n"), usageout);
+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
+ (void) fputs (_(" -m, --md5 encrypt the clear text password using\n"
+ " the MD5 algorithm\n"),
+ usageout);
+ (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
+#if defined(USE_SHA_CRYPT) || defined(USE_BCRYPT)
+ (void) fputs (_(" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+ " crypt algorithms\n"),
+ usageout);
+#endif /* USE_SHA_CRYPT || USE_BCRYPT */
+ (void) fputs ("\n", usageout);
+
+ exit (status);
+}
+
+/*
+ * process_flags - parse the command line options
+ *
+ * It will not return if an error is encountered.
+ */
+static void process_flags (int argc, char **argv)
+{
+ int c;
+ static struct option long_options[] = {
+ {"crypt-method", required_argument, NULL, 'c'},
+ {"encrypted", no_argument, NULL, 'e'},
+ {"help", no_argument, NULL, 'h'},
+ {"md5", no_argument, NULL, 'm'},
+ {"root", required_argument, NULL, 'R'},
+#if defined(USE_SHA_CRYPT) || defined(USE_BCRYPT)
+ {"sha-rounds", required_argument, NULL, 's'},
+#endif /* USE_SHA_CRYPT || USE_BCRYPT */
+ {NULL, 0, NULL, '\0'}
+ };
+
+ while ((c = getopt_long (argc, argv,
+#if defined(USE_SHA_CRYPT) || defined(USE_BCRYPT)
+ "c:ehmR:s:",
+#else
+ "c:ehmR:",
+#endif
+ long_options, NULL)) != -1) {
+ switch (c) {
+ case 'c':
+ crypt_method = optarg;
+ break;
+ case 'e':
+ eflg = true;
+ break;
+ case 'h':
+ usage (E_SUCCESS);
+ /*@notreached@*/break;
+ case 'm':
+ md5flg = true;
+ break;
+ case 'R': /* no-op, handled in process_root_flag () */
+ break;
+#if defined(USE_SHA_CRYPT) && defined(USE_BCRYPT)
+ case 's':
+ sflg = true;
+ if ( ( ((0 == strcmp (crypt_method, "SHA256")) || (0 == strcmp (crypt_method, "SHA512")))
+ && (0 == getlong(optarg, &sha_rounds)))
+ || ( (0 == strcmp (crypt_method, "BCRYPT"))
+ && (0 == getlong(optarg, &bcrypt_rounds)))) {
+ fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"),
+ Prog, optarg);
+ usage (E_USAGE);
+ }
+ break;
+#elif defined(USE_SHA_CRYPT)
+ case 's':
+ sflg = true;
+ if (0 == getlong(optarg, &sha_rounds)) {
+ fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"),
+ Prog, optarg);
+ usage (E_USAGE);
+ }
+ break;
+#elif defined(USE_BCRYPT)
+ case 's':
+ sflg = true;
+ if (0 == getlong(optarg, &bcrypt_rounds)) {
+ fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"),
+ Prog, optarg);
+ usage (E_USAGE);
+ }
+ break;
+#endif
+
+ default:
+ usage (E_USAGE);
+ /*@notreached@*/break;
+ }
+ }
+
+ /* validate options */
+ check_flags ();
+}
+
+/*
+ * check_flags - check flags and parameters consistency
+ *
+ * It will not return if an error is encountered.
+ */
+static void check_flags (void)
+{
+#if defined(USE_SHA_CRYPT) || defined(USE_BCRYPT)
+ if (sflg && !cflg) {
+ fprintf (stderr,
+ _("%s: %s flag is only allowed with the %s flag\n"),
+ Prog, "-s", "-c");
+ usage (E_USAGE);
+ }
+#endif
+
+ if ((eflg && (md5flg || cflg)) ||
+ (md5flg && cflg)) {
+ fprintf (stderr,
+ _("%s: the -c, -e, and -m flags are exclusive\n"),
+ Prog);
+ usage (E_USAGE);
+ }
+
+ if (cflg) {
+ if ( (0 != strcmp (crypt_method, "DES"))
+ && (0 != strcmp (crypt_method, "MD5"))
+ && (0 != strcmp (crypt_method, "NONE"))
+#ifdef USE_SHA_CRYPT
+ && (0 != strcmp (crypt_method, "SHA256"))
+ && (0 != strcmp (crypt_method, "SHA512"))
+#endif /* USE_SHA_CRYPT */
+#ifdef USE_BCRYPT
+ && (0 != strcmp (crypt_method, "BCRYPT"))
+#endif /* USE_BCRYPT */
+ ) {
+ fprintf (stderr,
+ _("%s: unsupported crypt method: %s\n"),
+ Prog, crypt_method);
+ usage (E_USAGE);
+ }
+ }
+}
+
+/*
+ * check_perms - check if the caller is allowed to add a group
+ *
+ * With PAM support, the setuid bit can be set on chpasswd to allow
+ * non-root users to groups.
+ * Without PAM support, only users who can write in the group databases
+ * can add groups.
+ *
+ * It will not return if the user is not allowed.
+ */
+static void check_perms (void)
+{
+#ifdef USE_PAM
+#ifdef ACCT_TOOLS_SETUID
+ /* If chpasswd uses PAM and is SUID, check the permissions,
+ * otherwise, the permissions are enforced by the access to the
+ * passwd and shadow files.
+ */
+ pam_handle_t *pamh = NULL;
+ int retval;
+ struct passwd *pampw;
+
+ pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
+ if (NULL == pampw) {
+ fprintf (stderr,
+ _("%s: Cannot determine your user name.\n"),
+ Prog);
+ exit (1);
+ }
+
+ retval = pam_start ("chpasswd", pampw->pw_name, &conv, &pamh);
+
+ if (PAM_SUCCESS == retval) {
+ retval = pam_authenticate (pamh, 0);
+ }
+
+ if (PAM_SUCCESS == retval) {
+ retval = pam_acct_mgmt (pamh, 0);
+ }
+
+ if (PAM_SUCCESS != retval) {
+ fprintf (stderr, _("%s: PAM: %s\n"),
+ Prog, pam_strerror (pamh, retval));
+ SYSLOG((LOG_ERR, "%s", pam_strerror (pamh, retval)));
+ if (NULL != pamh) {
+ (void) pam_end (pamh, retval);
+ }
+ exit (1);
+ }
+ (void) pam_end (pamh, retval);
+#endif /* ACCT_TOOLS_SETUID */
+#endif /* USE_PAM */
+}
+
+/*
+ * open_files - lock and open the password databases
+ */
+static void open_files (void)
+{
+ /*
+ * Lock the password file and open it for reading and writing. This
+ * will bring all of the entries into memory where they may be updated.
+ */
+ if (pw_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, pw_dbname ());
+ fail_exit (1);
+ }
+ pw_locked = true;
+ if (pw_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"), Prog, pw_dbname ());
+ fail_exit (1);
+ }
+
+ /* Do the same for the shadowed database, if it exist */
+ if (is_shadow_pwd) {
+ if (spw_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, spw_dbname ());
+ fail_exit (1);
+ }
+ spw_locked = true;
+ if (spw_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, spw_dbname ());
+ fail_exit (1);
+ }
+ }
+}
+
+/*
+ * close_files - close and unlock the password databases
+ */
+static void close_files (void)
+{
+ if (is_shadow_pwd) {
+ if (spw_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", spw_dbname ()));
+ fail_exit (1);
+ }
+ if (spw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+ /* continue */
+ }
+ spw_locked = false;
+ }
+
+ if (pw_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", pw_dbname ()));
+ fail_exit (1);
+ }
+ if (pw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+ /* continue */
+ }
+ pw_locked = false;
+}
+
+int main (int argc, char **argv)
+{
+ char buf[BUFSIZ];
+ char *name;
+ char *newpwd;
+ char *cp;
+
+#ifdef USE_PAM
+ bool use_pam = true;
+#endif /* USE_PAM */
+
+ int errors = 0;
+ int line = 0;
+
+ Prog = Basename (argv[0]);
+
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ process_root_flag ("-R", argc, argv);
+
+ process_flags (argc, argv);
+
+#ifdef USE_PAM
+ if (md5flg || eflg || cflg) {
+ use_pam = false;
+ }
+#endif /* USE_PAM */
+
+ OPENLOG ("chpasswd");
+
+ check_perms ();
+
+#ifdef USE_PAM
+ if (!use_pam)
+#endif /* USE_PAM */
+ {
+ is_shadow_pwd = spw_file_present ();
+
+ open_files ();
+ }
+
+ /*
+ * Read each line, separating the user name from the password. The
+ * password entry for each user will be looked up in the appropriate
+ * file (shadow or passwd) and the password changed. For shadow
+ * files the last change date is set directly, for passwd files the
+ * last change date is set in the age only if aging information is
+ * present.
+ */
+ while (fgets (buf, (int) sizeof buf, stdin) != (char *) 0) {
+ line++;
+ cp = strrchr (buf, '\n');
+ if (NULL != cp) {
+ *cp = '\0';
+ } else {
+ if (feof (stdin) == 0) {
+
+ // Drop all remaining characters on this line.
+ while (fgets (buf, (int) sizeof buf, stdin) != (char *) 0) {
+ cp = strchr (buf, '\n');
+ if (cp != NULL) {
+ break;
+ }
+ }
+
+ fprintf (stderr,
+ _("%s: line %d: line too long\n"),
+ Prog, line);
+ errors++;
+ continue;
+ }
+ }
+
+ /*
+ * The username is the first field. It is separated from the
+ * password with a ":" character which is replaced with a
+ * NUL to give the new password. The new password will then
+ * be encrypted in the normal fashion with a new salt
+ * generated, unless the '-e' is given, in which case it is
+ * assumed to already be encrypted.
+ */
+
+ name = buf;
+ cp = strchr (name, ':');
+ if (NULL != cp) {
+ *cp = '\0';
+ cp++;
+ } else {
+ fprintf (stderr,
+ _("%s: line %d: missing new password\n"),
+ Prog, line);
+ errors++;
+ continue;
+ }
+ newpwd = cp;
+
+#ifdef USE_PAM
+ if (use_pam){
+ if (do_pam_passwd_non_interactive ("chpasswd", name, newpwd) != 0) {
+ fprintf (stderr,
+ _("%s: (line %d, user %s) password not changed\n"),
+ Prog, line, name);
+ errors++;
+ }
+ } else
+#endif /* USE_PAM */
+ {
+ const struct spwd *sp;
+ struct spwd newsp;
+ const struct passwd *pw;
+ struct passwd newpw;
+
+ if ( !eflg
+ && ( (NULL == crypt_method)
+ || (0 != strcmp (crypt_method, "NONE")))) {
+ void *arg = NULL;
+ const char *salt;
+ if (md5flg) {
+ crypt_method = "MD5";
+ }
+#if defined(USE_SHA_CRYPT) && defined(USE_BCRYPT)
+ if (sflg) {
+ if ( (0 == strcmp (crypt_method, "SHA256"))
+ || (0 == strcmp (crypt_method, "SHA512"))) {
+ arg = &sha_rounds;
+ }
+ else if (0 == strcmp (crypt_method, "BCRYPT")) {
+ arg = &bcrypt_rounds;
+ }
+ }
+#elif defined(USE_SHA_CRYPT)
+ if (sflg) {
+ arg = &sha_rounds;
+ }
+#elif defined(USE_BCRYPT)
+ if (sflg) {
+ arg = &bcrypt_rounds;
+ }
+#endif
+ salt = crypt_make_salt (crypt_method, arg);
+ cp = pw_encrypt (newpwd, salt);
+ if (NULL == cp) {
+ fprintf (stderr,
+ _("%s: failed to crypt password with salt '%s': %s\n"),
+ Prog, salt, strerror (errno));
+ fail_exit (1);
+ }
+ }
+
+ /*
+ * Get the password file entry for this user. The user must
+ * already exist.
+ */
+ pw = pw_locate (name);
+ if (NULL == pw) {
+ fprintf (stderr,
+ _("%s: line %d: user '%s' does not exist\n"), Prog,
+ line, name);
+ errors++;
+ continue;
+ }
+ if (is_shadow_pwd) {
+ /* The shadow entry should be updated if the
+ * passwd entry has a password set to 'x'.
+ * But on the other hand, if there is already both
+ * a passwd and a shadow password, it's preferable
+ * to update both.
+ */
+ sp = spw_locate (name);
+
+ if ( (NULL == sp)
+ && (strcmp (pw->pw_passwd,
+ SHADOW_PASSWD_STRING) == 0)) {
+ /* If the password is set to 'x' in
+ * passwd, but there are no entries in
+ * shadow, create one.
+ */
+ newsp.sp_namp = name;
+ /* newsp.sp_pwdp = NULL; will be set later */
+ /* newsp.sp_lstchg= 0; will be set later */
+ newsp.sp_min = getdef_num ("PASS_MIN_DAYS", -1);
+ newsp.sp_max = getdef_num ("PASS_MAX_DAYS", -1);
+ newsp.sp_warn = getdef_num ("PASS_WARN_AGE", -1);
+ newsp.sp_inact = -1;
+ newsp.sp_expire= -1;
+ newsp.sp_flag = SHADOW_SP_FLAG_UNSET;
+ sp = &newsp;
+ }
+ } else {
+ sp = NULL;
+ }
+
+ /*
+ * The freshly encrypted new password is merged into the
+ * user's password file entry and the last password change
+ * date is set to the current date.
+ */
+ if (NULL != sp) {
+ newsp = *sp;
+ newsp.sp_pwdp = cp;
+ newsp.sp_lstchg = (long) gettime () / SCALE;
+ if (0 == newsp.sp_lstchg) {
+ /* Better disable aging than requiring a
+ * password change */
+ newsp.sp_lstchg = -1;
+ }
+ }
+
+ if ( (NULL == sp)
+ || (strcmp (pw->pw_passwd, SHADOW_PASSWD_STRING) != 0)) {
+ newpw = *pw;
+ newpw.pw_passwd = cp;
+ }
+
+ /*
+ * The updated password file entry is then put back and will
+ * be written to the password file later, after all the
+ * other entries have been updated as well.
+ */
+ if (NULL != sp) {
+ if (spw_update (&newsp) == 0) {
+ fprintf (stderr,
+ _("%s: line %d: failed to prepare the new %s entry '%s'\n"),
+ Prog, line, spw_dbname (), newsp.sp_namp);
+ errors++;
+ continue;
+ }
+ }
+ if ( (NULL == sp)
+ || (strcmp (pw->pw_passwd, SHADOW_PASSWD_STRING) != 0)) {
+ if (pw_update (&newpw) == 0) {
+ fprintf (stderr,
+ _("%s: line %d: failed to prepare the new %s entry '%s'\n"),
+ Prog, line, pw_dbname (), newpw.pw_name);
+ errors++;
+ continue;
+ }
+ }
+ }
+ }
+
+ /*
+ * Any detected errors will cause the entire set of changes to be
+ * aborted. Unlocking the password file will cause all of the
+ * changes to be ignored. Otherwise the file is closed, causing the
+ * changes to be written out all at once, and then unlocked
+ * afterwards.
+ *
+ * With PAM, it is not possible to delay the update of the
+ * password database.
+ */
+ if (0 != errors) {
+#ifdef USE_PAM
+ if (!use_pam)
+#endif /* USE_PAM */
+ {
+ fprintf (stderr,
+ _("%s: error detected, changes ignored\n"),
+ Prog);
+ }
+ fail_exit (1);
+ }
+
+#ifdef USE_PAM
+ if (!use_pam)
+#endif /* USE_PAM */
+ {
+ /* Save the changes */
+ close_files ();
+ }
+
+ nscd_flush_cache ("passwd");
+ sssd_flush_cache (SSSD_DB_PASSWD);
+
+ return (0);
+}
+
diff --git a/src/chsh.c b/src/chsh.c
new file mode 100644
index 0000000..06edf40
--- /dev/null
+++ b/src/chsh.c
@@ -0,0 +1,561 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 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 <fcntl.h>
+#include <getopt.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include "defines.h"
+#include "getdef.h"
+#include "nscd.h"
+#include "sssd.h"
+#include "prototypes.h"
+#include "pwauth.h"
+#include "pwio.h"
+#ifdef USE_PAM
+#include "pam_defs.h"
+#endif
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+#ifndef SHELLS_FILE
+#define SHELLS_FILE "/etc/shells"
+#endif
+/*
+ * Global variables
+ */
+const char *Prog; /* Program name */
+static bool amroot; /* Real UID is root */
+static char loginsh[BUFSIZ]; /* Name of new login shell */
+/* command line options */
+static bool sflg = false; /* -s - set shell from command line */
+static bool pw_locked = false;
+
+/* external identifiers */
+
+/* local function prototypes */
+static /*@noreturn@*/void fail_exit (int code);
+static /*@noreturn@*/void usage (int status);
+static void new_fields (void);
+static bool shell_is_listed (const char *);
+static bool is_restricted_shell (const char *);
+static void process_flags (int argc, char **argv);
+static void check_perms (const struct passwd *pw);
+static void update_shell (const char *user, char *loginsh);
+
+/*
+ * fail_exit - do some cleanup and exit with the given error code
+ */
+static /*@noreturn@*/void fail_exit (int code)
+{
+ if (pw_locked) {
+ if (pw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+ /* continue */
+ }
+ }
+
+ closelog ();
+
+ exit (code);
+}
+
+/*
+ * usage - print command line syntax and exit
+ */
+static /*@noreturn@*/void usage (int status)
+{
+ FILE *usageout = (E_SUCCESS != status) ? stderr : stdout;
+ (void) fprintf (usageout,
+ _("Usage: %s [options] [LOGIN]\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
+ (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
+ (void) fputs (_(" -s, --shell SHELL new login shell for the user account\n"), usageout);
+ (void) fputs ("\n", usageout);
+ exit (status);
+}
+
+/*
+ * new_fields - change the user's login shell information interactively
+ *
+ * prompt the user for the login shell and change it according to the
+ * response, or leave it alone if nothing was entered.
+ */
+static void new_fields (void)
+{
+ puts (_("Enter the new value, or press ENTER for the default"));
+ change_field (loginsh, sizeof loginsh, _("Login Shell"));
+}
+
+/*
+ * is_restricted_shell - return true if the shell is restricted
+ *
+ */
+static bool is_restricted_shell (const char *sh)
+{
+ /*
+ * Shells not listed in /etc/shells are considered to be restricted.
+ * Changed this to avoid confusion with "rc" (the plan9 shell - not
+ * restricted despite the name starting with 'r'). --marekm
+ */
+ return !shell_is_listed (sh);
+}
+
+/*
+ * shell_is_listed - see if the user's login shell is listed in /etc/shells
+ *
+ * The /etc/shells file is read for valid names of login shells. If the
+ * /etc/shells file does not exist the user cannot set any shell unless
+ * they are root.
+ *
+ * If getusershell() is available (Linux, *BSD, possibly others), use it
+ * instead of re-implementing it.
+ */
+static bool shell_is_listed (const char *sh)
+{
+ char *cp;
+ bool found = false;
+
+#ifndef HAVE_GETUSERSHELL
+ char buf[BUFSIZ];
+ FILE *fp;
+#endif
+
+#ifdef HAVE_GETUSERSHELL
+ setusershell ();
+ while ((cp = getusershell ())) {
+ if (strcmp (cp, sh) == 0) {
+ found = true;
+ break;
+ }
+ }
+ endusershell ();
+#else
+ fp = fopen (SHELLS_FILE, "r");
+ if (NULL == fp) {
+ return false;
+ }
+
+ while (fgets (buf, sizeof (buf), fp) == buf) {
+ cp = strrchr (buf, '\n');
+ if (NULL != cp) {
+ *cp = '\0';
+ }
+
+ if (buf[0] == '#') {
+ continue;
+ }
+
+ if (strcmp (buf, sh) == 0) {
+ found = true;
+ break;
+ }
+ }
+ fclose (fp);
+#endif
+ return found;
+}
+
+/*
+ * process_flags - parse the command line options
+ *
+ * It will not return if an error is encountered.
+ */
+static void process_flags (int argc, char **argv)
+{
+ int c;
+ static struct option long_options[] = {
+ {"help", no_argument, NULL, 'h'},
+ {"root", required_argument, NULL, 'R'},
+ {"shell", required_argument, NULL, 's'},
+ {NULL, 0, NULL, '\0'}
+ };
+
+ while ((c = getopt_long (argc, argv, "hR:s:",
+ long_options, NULL)) != -1) {
+ switch (c) {
+ case 'h':
+ usage (E_SUCCESS);
+ /*@notreached@*/break;
+ case 'R': /* no-op, handled in process_root_flag () */
+ break;
+ case 's':
+ sflg = true;
+ STRFCPY (loginsh, optarg);
+ break;
+ default:
+ usage (E_USAGE);
+ }
+ }
+
+ /*
+ * There should be only one remaining argument at most and it should
+ * be the user's name.
+ */
+ if (argc > (optind + 1)) {
+ usage (E_USAGE);
+ }
+}
+
+/*
+ * check_perms - check if the caller is allowed to add a group
+ *
+ * Non-root users are only allowed to change their shell, if their current
+ * shell is not a restricted shell.
+ *
+ * Non-root users must be authenticated.
+ *
+ * It will not return if the user is not allowed.
+ */
+static void check_perms (const struct passwd *pw)
+{
+#ifdef USE_PAM
+ pam_handle_t *pamh = NULL;
+ int retval;
+ struct passwd *pampw;
+#endif
+
+ /*
+ * Non-privileged users are only allowed to change the shell if the
+ * UID of the user matches the current real UID.
+ */
+ if (!amroot && pw->pw_uid != getuid ()) {
+ SYSLOG ((LOG_WARN, "can't change shell for '%s'", pw->pw_name));
+ fprintf (stderr,
+ _("You may not change the shell for '%s'.\n"),
+ pw->pw_name);
+ fail_exit (1);
+ }
+
+ /*
+ * Non-privileged users are only allowed to change the shell if it
+ * is not a restricted one.
+ */
+ if (!amroot && is_restricted_shell (pw->pw_shell)) {
+ SYSLOG ((LOG_WARN, "can't change shell for '%s'", pw->pw_name));
+ fprintf (stderr,
+ _("You may not change the shell for '%s'.\n"),
+ pw->pw_name);
+ fail_exit (1);
+ }
+#ifdef WITH_SELINUX
+ /*
+ * If the UID of the user does not match the current real UID,
+ * check if the change is allowed by SELinux policy.
+ */
+ if ((pw->pw_uid != getuid ())
+ && (check_selinux_permit("chsh") != 0)) {
+ SYSLOG ((LOG_WARN, "can't change shell for '%s'", pw->pw_name));
+ fprintf (stderr,
+ _("You may not change the shell for '%s'.\n"),
+ pw->pw_name);
+ fail_exit (1);
+ }
+#endif
+
+#ifndef USE_PAM
+ /*
+ * Non-privileged users are optionally authenticated (must enter
+ * the password of the user whose information is being changed)
+ * before any changes can be made. Idea from util-linux
+ * chfn/chsh. --marekm
+ */
+ if (!amroot && getdef_bool ("CHSH_AUTH")) {
+ passwd_check (pw->pw_name, pw->pw_passwd, "chsh");
+ }
+
+#else /* !USE_PAM */
+ pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
+ if (NULL == pampw) {
+ fprintf (stderr,
+ _("%s: Cannot determine your user name.\n"),
+ Prog);
+ exit (E_NOPERM);
+ }
+
+ retval = pam_start ("chsh", pampw->pw_name, &conv, &pamh);
+
+ if (PAM_SUCCESS == retval) {
+ retval = pam_authenticate (pamh, 0);
+ }
+
+ if (PAM_SUCCESS == retval) {
+ retval = pam_acct_mgmt (pamh, 0);
+ }
+
+ if (PAM_SUCCESS != retval) {
+ fprintf (stderr, _("%s: PAM: %s\n"),
+ Prog, pam_strerror (pamh, retval));
+ SYSLOG((LOG_ERR, "%s", pam_strerror (pamh, retval)));
+ if (NULL != pamh) {
+ (void) pam_end (pamh, retval);
+ }
+ exit (E_NOPERM);
+ }
+ (void) pam_end (pamh, retval);
+#endif /* USE_PAM */
+}
+
+/*
+ * update_shell - update the user's shell in the passwd database
+ *
+ * Commit the user's entry after changing her shell field.
+ *
+ * It will not return in case of error.
+ */
+static void update_shell (const char *user, char *newshell)
+{
+ const struct passwd *pw; /* Password entry from /etc/passwd */
+ struct passwd pwent; /* New password entry */
+
+ /*
+ * Before going any further, raise the ulimit to prevent
+ * colliding into a lowered ulimit, and set the real UID
+ * to root to protect against unexpected signals. Any
+ * keyboard signals are set to be ignored.
+ */
+ if (setuid (0) != 0) {
+ SYSLOG ((LOG_ERR, "can't setuid(0)"));
+ fputs (_("Cannot change ID to root.\n"), stderr);
+ fail_exit (1);
+ }
+ pwd_init ();
+
+ /*
+ * The passwd entry is now ready to be committed back to
+ * the password file. Get a lock on the file and open it.
+ */
+ if (pw_lock () == 0) {
+ fprintf (stderr, _("%s: cannot lock %s; try again later.\n"),
+ Prog, pw_dbname ());
+ fail_exit (1);
+ }
+ pw_locked = true;
+ if (pw_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr, _("%s: cannot open %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_WARN, "cannot open %s", pw_dbname ()));
+ fail_exit (1);
+ }
+
+ /*
+ * Get the entry to update using pw_locate() - we want the real
+ * one from /etc/passwd, not the one from getpwnam() which could
+ * contain the shadow password if (despite the warnings) someone
+ * enables AUTOSHADOW (or SHADOW_COMPAT in libc). --marekm
+ */
+ pw = pw_locate (user);
+ if (NULL == pw) {
+ fprintf (stderr,
+ _("%s: user '%s' does not exist in %s\n"),
+ Prog, user, pw_dbname ());
+ fail_exit (1);
+ }
+
+ /*
+ * Make a copy of the entry, then change the shell field. The other
+ * fields remain unchanged.
+ */
+ pwent = *pw;
+ pwent.pw_shell = newshell;
+
+ /*
+ * Update the passwd file entry. If there is a DBM file, update
+ * that entry as well.
+ */
+ if (pw_update (&pwent) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, pw_dbname (), pwent.pw_name);
+ fail_exit (1);
+ }
+
+ /*
+ * Changes have all been made, so commit them and unlock the file.
+ */
+ if (pw_close () == 0) {
+ fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", pw_dbname ()));
+ fail_exit (1);
+ }
+ if (pw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+ /* continue */
+ }
+ pw_locked= false;
+}
+
+/*
+ * chsh - this command controls changes to the user's shell
+ *
+ * The only supported option is -s which permits the the login shell to
+ * be set from the command line.
+ */
+int main (int argc, char **argv)
+{
+ char *user; /* User name */
+ const struct passwd *pw; /* Password entry from /etc/passwd */
+
+ sanitize_env ();
+
+ /*
+ * Get the program name. The program name is used as a prefix to
+ * most error messages.
+ */
+ Prog = Basename (argv[0]);
+
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ process_root_flag ("-R", argc, argv);
+
+ /*
+ * This command behaves different for root and non-root users.
+ */
+ amroot = (getuid () == 0);
+
+ OPENLOG ("chsh");
+
+ /* parse the command line options */
+ process_flags (argc, argv);
+
+ /*
+ * Get the name of the user to check. It is either the command line
+ * name, or the name getlogin() returns.
+ */
+ if (optind < argc) {
+ user = argv[optind];
+ pw = xgetpwnam (user);
+ if (NULL == pw) {
+ fprintf (stderr,
+ _("%s: user '%s' does not exist\n"), Prog, user);
+ fail_exit (1);
+ }
+ } else {
+ pw = get_my_pwent ();
+ if (NULL == pw) {
+ fprintf (stderr,
+ _("%s: Cannot determine your user name.\n"),
+ Prog);
+ SYSLOG ((LOG_WARN, "Cannot determine the user name of the caller (UID %lu)",
+ (unsigned long) getuid ()));
+ fail_exit (1);
+ }
+ user = xstrdup (pw->pw_name);
+ }
+
+#ifdef USE_NIS
+ /*
+ * Now we make sure this is a LOCAL password entry for this user ...
+ */
+ if (__ispwNIS ()) {
+ char *nis_domain;
+ char *nis_master;
+
+ fprintf (stderr,
+ _("%s: cannot change user '%s' on NIS client.\n"),
+ Prog, user);
+
+ if (!yp_get_default_domain (&nis_domain) &&
+ !yp_master (nis_domain, "passwd.byname", &nis_master)) {
+ fprintf (stderr,
+ _("%s: '%s' is the NIS master for this client.\n"),
+ Prog, nis_master);
+ }
+ fail_exit (1);
+ }
+#endif
+
+ check_perms (pw);
+
+ /*
+ * Now get the login shell. Either get it from the password
+ * file, or use the value from the command line.
+ */
+ if (!sflg) {
+ STRFCPY (loginsh, pw->pw_shell);
+ }
+
+ /*
+ * If the login shell was not set on the command line, let the user
+ * interactively change it.
+ */
+ if (!sflg) {
+ printf (_("Changing the login shell for %s\n"), user);
+ new_fields ();
+ }
+
+ /*
+ * Check all of the fields for valid information. The shell
+ * field may not contain any illegal characters. Non-privileged
+ * users are restricted to using the shells in /etc/shells.
+ * The shell must be executable by the user.
+ */
+ if (valid_field (loginsh, ":,=\n") != 0) {
+ fprintf (stderr, _("%s: Invalid entry: %s\n"), Prog, loginsh);
+ fail_exit (1);
+ }
+ if ( !amroot
+ && ( is_restricted_shell (loginsh)
+ || (access (loginsh, X_OK) != 0))) {
+ fprintf (stderr, _("%s: %s is an invalid shell\n"), Prog, loginsh);
+ fail_exit (1);
+ }
+
+ /* Even for root, warn if an invalid shell is specified. */
+ if (access (loginsh, F_OK) != 0) {
+ fprintf (stderr, _("%s: Warning: %s does not exist\n"), Prog, loginsh);
+ } else if (access (loginsh, X_OK) != 0) {
+ fprintf (stderr, _("%s: Warning: %s is not executable\n"), Prog, loginsh);
+ }
+
+ update_shell (user, loginsh);
+
+ SYSLOG ((LOG_INFO, "changed user '%s' shell to '%s'", user, loginsh));
+
+ nscd_flush_cache ("passwd");
+ sssd_flush_cache (SSSD_DB_PASSWD);
+
+ closelog ();
+ exit (E_SUCCESS);
+}
+
diff --git a/src/expiry.c b/src/expiry.c
new file mode 100644
index 0000000..41add94
--- /dev/null
+++ b/src/expiry.c
@@ -0,0 +1,210 @@
+/*
+ * Copyright (c) 1994 , Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 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 <pwd.h>
+#include <signal.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <getopt.h>
+#include "defines.h"
+#include "prototypes.h"
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+/* Global variables */
+const char *Prog;
+static bool cflg = false;
+
+/* local function prototypes */
+static RETSIGTYPE catch_signals (unused int sig);
+static /*@noreturn@*/void usage (int status);
+static void process_flags (int argc, char **argv);
+
+/*
+ * catch_signals - signal catcher
+ */
+static RETSIGTYPE catch_signals (unused int sig)
+{
+ _exit (10);
+}
+
+/*
+ * usage - print syntax message and exit
+ */
+static /*@noreturn@*/void usage (int status)
+{
+ FILE *usageout = (E_SUCCESS != status) ? stderr : stdout;
+ (void) fprintf (usageout,
+ _("Usage: %s [options]\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+ (void) fputs (_(" -c, --check check the user's password expiration\n"), usageout);
+ (void) fputs (_(" -f, --force force password change if the user's password\n"
+ " is expired\n"), usageout);
+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
+ (void) fputs ("\n", usageout);
+ exit (status);
+}
+
+/*
+ * process_flags - parse the command line options
+ *
+ * It will not return if an error is encountered.
+ */
+static void process_flags (int argc, char **argv)
+{
+ bool fflg = false;
+ int c;
+ static struct option long_options[] = {
+ {"check", no_argument, NULL, 'c'},
+ {"force", no_argument, NULL, 'f'},
+ {"help", no_argument, NULL, 'h'},
+ {NULL, 0, NULL, '\0'}
+ };
+
+ while ((c = getopt_long (argc, argv, "cfh",
+ long_options, NULL)) != -1) {
+ switch (c) {
+ case 'c':
+ cflg = true;
+ break;
+ case 'f':
+ fflg = true;
+ break;
+ case 'h':
+ usage (E_SUCCESS);
+ /*@notreached@*/break;
+ default:
+ usage (E_USAGE);
+ }
+ }
+
+ if (! (cflg || fflg)) {
+ usage (E_USAGE);
+ }
+
+ if (cflg && fflg) {
+ fprintf (stderr,
+ _("%s: options %s and %s conflict\n"),
+ Prog, "-c", "-f");
+ usage (E_USAGE);
+ }
+
+ if (argc != optind) {
+ fprintf (stderr,
+ _("%s: unexpected argument: %s\n"),
+ Prog, argv[optind]);
+ usage (E_USAGE);
+ }
+}
+
+/*
+ * expiry - check and enforce password expiration policy
+ *
+ * expiry checks (-c) the current password expiration and forces (-f)
+ * changes when required. It is callable as a normal user command.
+ */
+int main (int argc, char **argv)
+{
+ struct passwd *pwd;
+ struct spwd *spwd;
+
+ Prog = Basename (argv[0]);
+
+ sanitize_env ();
+
+ /*
+ * Start by disabling all of the keyboard signals.
+ */
+ (void) signal (SIGHUP, catch_signals);
+ (void) signal (SIGINT, catch_signals);
+ (void) signal (SIGQUIT, catch_signals);
+#ifdef SIGTSTP
+ (void) signal (SIGTSTP, catch_signals);
+#endif
+
+ /*
+ * expiry takes one of two arguments. The default action is to give
+ * the usage message.
+ */
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ OPENLOG ("expiry");
+
+ process_flags (argc, argv);
+
+ /*
+ * Get user entries for /etc/passwd and /etc/shadow
+ */
+ pwd = get_my_pwent ();
+ if (NULL == pwd) {
+ fprintf (stderr, _("%s: Cannot determine your user name.\n"),
+ Prog);
+ SYSLOG ((LOG_WARN, "Cannot determine the user name of the caller (UID %lu)",
+ (unsigned long) getuid ()));
+ exit (10);
+ }
+ spwd = getspnam (pwd->pw_name); /* !USE_PAM, No need for xgetspnam */
+
+ /*
+ * If checking accounts, use agecheck() function.
+ */
+ if (cflg) {
+ /*
+ * Print out number of days until expiration.
+ */
+ agecheck (spwd);
+
+ /*
+ * Exit with status indicating state of account.
+ */
+ exit (isexpired (pwd, spwd));
+ }
+
+ /*
+ * Otherwise, force a password change with the expire() function.
+ * It will force the change or give a message indicating what to
+ * do.
+ * It won't return unless the account is unexpired.
+ */
+ (void) expire (pwd, spwd);
+
+ return E_SUCCESS;
+}
+
diff --git a/src/faillog.c b/src/faillog.c
new file mode 100644
index 0000000..1309dad
--- /dev/null
+++ b/src/faillog.c
@@ -0,0 +1,741 @@
+/*
+ * Copyright (c) 1989 - 1993, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2002 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 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 <getopt.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <time.h>
+#include <assert.h>
+#include "defines.h"
+#include "faillog.h"
+#include "prototypes.h"
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+/* local function prototypes */
+static /*@noreturn@*/void usage (int status);
+static void print_one (/*@null@*/const struct passwd *pw, bool force);
+static void set_locktime (long locktime);
+static bool set_locktime_one (uid_t uid, long locktime);
+static void setmax (short max);
+static bool setmax_one (uid_t uid, short max);
+static void print (void);
+static bool reset_one (uid_t uid);
+static void reset (void);
+
+/*
+ * Global variables
+ */
+const char *Prog; /* Program name */
+static FILE *fail; /* failure file stream */
+static time_t seconds; /* that number of days in seconds */
+static unsigned long umin; /* if uflg and has_umin, only display users with uid >= umin */
+static bool has_umin = false;
+static unsigned long umax; /* if uflg and has_umax, only display users with uid <= umax */
+static bool has_umax = false;
+static bool errors = false;
+
+static bool aflg = false; /* set if all users are to be printed always */
+static bool uflg = false; /* set if user is a valid user id */
+static bool tflg = false; /* print is restricted to most recent days */
+static bool lflg = false; /* set the locktime */
+static bool mflg = false; /* set maximum failed login counters */
+static bool rflg = false; /* reset the counters of login failures */
+
+static struct stat statbuf; /* fstat buffer for file size */
+
+#define NOW (time((time_t *) 0))
+
+static /*@noreturn@*/void usage (int status)
+{
+ FILE *usageout = (E_SUCCESS != status) ? stderr : stdout;
+ (void) fprintf (usageout,
+ _("Usage: %s [options]\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+ (void) fputs (_(" -a, --all display faillog records for all users\n"), usageout);
+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
+ (void) fputs (_(" -l, --lock-secs SEC after failed login lock account for SEC seconds\n"), usageout);
+ (void) fputs (_(" -m, --maximum MAX set maximum failed login counters to MAX\n"), usageout);
+ (void) fputs (_(" -r, --reset reset the counters of login failures\n"), usageout);
+ (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
+ (void) fputs (_(" -t, --time DAYS display faillog records more recent than DAYS\n"), usageout);
+ (void) fputs (_(" -u, --user LOGIN/RANGE display faillog record or maintains failure\n"
+ " counters and limits (if used with -r, -m,\n"
+ " or -l) only for the specified LOGIN(s)\n"), usageout);
+ (void) fputs ("\n", usageout);
+ exit (status);
+}
+
+static void print_one (/*@null@*/const struct passwd *pw, bool force)
+{
+ static bool once = false;
+ struct tm *tm;
+ off_t offset;
+ struct faillog fl;
+ time_t now;
+
+#ifdef HAVE_STRFTIME
+ char *cp;
+ char ptime[80];
+#endif
+
+ if (NULL == pw) {
+ return;
+ }
+
+ offset = (off_t) pw->pw_uid * sizeof (fl);
+ if (offset + sizeof (fl) <= statbuf.st_size) {
+ /* fseeko errors are not really relevant for us. */
+ int err = fseeko (fail, offset, SEEK_SET);
+ assert (0 == err);
+ /* faillog is a sparse file. Even if no entries were
+ * entered for this user, which should be able to get the
+ * empty entry in this case.
+ */
+ if (fread ((char *) &fl, sizeof (fl), 1, fail) != 1) {
+ fprintf (stderr,
+ _("%s: Failed to get the entry for UID %lu\n"),
+ Prog, (unsigned long int)pw->pw_uid);
+ return;
+ }
+ } else {
+ /* Outsize of the faillog file.
+ * Behave as if there were a missing entry (same behavior
+ * as if we were reading an non existing entry in the
+ * sparse faillog file).
+ */
+ memzero (&fl, sizeof (fl));
+ }
+
+ /* Nothing to report */
+ if (!force && (0 == fl.fail_time)) {
+ return;
+ }
+
+ (void) time(&now);
+
+ /* Filter out entries that do not match with the -t option */
+ if (tflg && ((now - fl.fail_time) > seconds)) {
+ return;
+ }
+
+ /* Print the header only once */
+ if (!once) {
+ puts (_("Login Failures Maximum Latest On\n"));
+ once = true;
+ }
+
+ tm = localtime (&fl.fail_time);
+#ifdef HAVE_STRFTIME
+ strftime (ptime, sizeof (ptime), "%D %H:%M:%S %z", tm);
+ cp = ptime;
+#endif
+ printf ("%-9s %5d %5d ",
+ pw->pw_name, fl.fail_cnt, fl.fail_max);
+ /* FIXME: cp is not defined ifndef HAVE_STRFTIME */
+ printf ("%s %s", cp, fl.fail_line);
+ if (0 != fl.fail_locktime) {
+ if ( ((fl.fail_time + fl.fail_locktime) > now)
+ && (0 != fl.fail_cnt)) {
+ printf (_(" [%lus left]"),
+ (unsigned long) fl.fail_time + fl.fail_locktime - now);
+ } else {
+ printf (_(" [%lds lock]"),
+ fl.fail_locktime);
+ }
+ }
+ putchar ('\n');
+}
+
+static void print (void)
+{
+ if (uflg && has_umin && has_umax && (umin==umax)) {
+ print_one (getpwuid ((uid_t)umin), true);
+ } else {
+ /* We only print records for existing users.
+ * Loop based on the user database instead of reading the
+ * whole file. We will have to query the database anyway
+ * so except for very small ranges and large user
+ * database, this should not be a performance issue.
+ */
+ struct passwd *pwent;
+
+ setpwent ();
+ while ( (pwent = getpwent ()) != NULL ) {
+ if ( uflg
+ && ( (has_umin && (pwent->pw_uid < (uid_t)umin))
+ || (has_umax && (pwent->pw_uid > (uid_t)umax)))) {
+ continue;
+ }
+ print_one (pwent, aflg);
+ }
+ endpwent ();
+ }
+}
+
+/*
+ * reset_one - Reset the fail count for one user
+ *
+ * This returns a boolean indicating if an error occurred.
+ */
+static bool reset_one (uid_t uid)
+{
+ off_t offset;
+ struct faillog fl;
+
+ offset = (off_t) uid * sizeof (fl);
+ if (offset + sizeof (fl) <= statbuf.st_size) {
+ /* fseeko errors are not really relevant for us. */
+ int err = fseeko (fail, offset, SEEK_SET);
+ assert (0 == err);
+ /* faillog is a sparse file. Even if no entries were
+ * entered for this user, which should be able to get the
+ * empty entry in this case.
+ */
+ if (fread ((char *) &fl, sizeof (fl), 1, fail) != 1) {
+ fprintf (stderr,
+ _("%s: Failed to get the entry for UID %lu\n"),
+ Prog, (unsigned long int)uid);
+ return true;
+ }
+ } else {
+ /* Outsize of the faillog file.
+ * Behave as if there were a missing entry (same behavior
+ * as if we were reading an non existing entry in the
+ * sparse faillog file).
+ */
+ memzero (&fl, sizeof (fl));
+ }
+
+ if (0 == fl.fail_cnt) {
+ /* If the count is already null, do not write in the file.
+ * This avoids writing 0 when no entries were present for
+ * the user.
+ */
+ return false;
+ }
+
+ fl.fail_cnt = 0;
+
+ if ( (fseeko (fail, offset, SEEK_SET) == 0)
+ && (fwrite ((char *) &fl, sizeof (fl), 1, fail) == 1)) {
+ (void) fflush (fail);
+ return false;
+ }
+
+ fprintf (stderr,
+ _("%s: Failed to reset fail count for UID %lu\n"),
+ Prog, (unsigned long int)uid);
+ return true;
+}
+
+static void reset (void)
+{
+ if (uflg && has_umin && has_umax && (umin==umax)) {
+ if (reset_one ((uid_t)umin)) {
+ errors = true;
+ }
+ } else {
+ /* There is no need to reset outside of the faillog
+ * database.
+ */
+ uid_t uidmax = statbuf.st_size / sizeof (struct faillog);
+ if (uidmax > 1) {
+ uidmax--;
+ }
+ if (has_umax && (uid_t)umax < uidmax) {
+ uidmax = (uid_t)umax;
+ }
+
+ /* Reset all entries in the specified range.
+ * Non existing entries will not be touched.
+ */
+ if (aflg) {
+ /* Entries for non existing users are also reset.
+ */
+ uid_t uid = 0;
+
+ /* Make sure we stay in the umin-umax range if specified */
+ if (has_umin) {
+ uid = (uid_t)umin;
+ }
+
+ while (uid <= uidmax) {
+ if (reset_one (uid)) {
+ errors = true;
+ }
+ uid++;
+ }
+ } else {
+ /* Only reset records for existing users.
+ */
+ struct passwd *pwent;
+
+ setpwent ();
+ while ( (pwent = getpwent ()) != NULL ) {
+ if ( uflg
+ && ( (has_umin && (pwent->pw_uid < (uid_t)umin))
+ || (pwent->pw_uid > (uid_t)uidmax))) {
+ continue;
+ }
+ if (reset_one (pwent->pw_uid)) {
+ errors = true;
+ }
+ }
+ endpwent ();
+ }
+ }
+}
+
+/*
+ * setmax_one - Set the maximum failed login counter for one user
+ *
+ * This returns a boolean indicating if an error occurred.
+ */
+static bool setmax_one (uid_t uid, short max)
+{
+ off_t offset;
+ struct faillog fl;
+
+ offset = (off_t) uid * sizeof (fl);
+ if (offset + sizeof (fl) <= statbuf.st_size) {
+ /* fseeko errors are not really relevant for us. */
+ int err = fseeko (fail, offset, SEEK_SET);
+ assert (0 == err);
+ /* faillog is a sparse file. Even if no entries were
+ * entered for this user, which should be able to get the
+ * empty entry in this case.
+ */
+ if (fread ((char *) &fl, sizeof (fl), 1, fail) != 1) {
+ fprintf (stderr,
+ _("%s: Failed to get the entry for UID %lu\n"),
+ Prog, (unsigned long int)uid);
+ return true;
+ }
+ } else {
+ /* Outsize of the faillog file.
+ * Behave as if there were a missing entry (same behavior
+ * as if we were reading an non existing entry in the
+ * sparse faillog file).
+ */
+ memzero (&fl, sizeof (fl));
+ }
+
+ if (max == fl.fail_max) {
+ /* If the max is already set to the right value, do not
+ * write in the file.
+ * This avoids writing 0 when no entries were present for
+ * the user and the max argument is 0.
+ */
+ return false;
+ }
+
+ fl.fail_max = max;
+
+ if ( (fseeko (fail, offset, SEEK_SET) == 0)
+ && (fwrite ((char *) &fl, sizeof (fl), 1, fail) == 1)) {
+ (void) fflush (fail);
+ return false;
+ }
+
+ fprintf (stderr,
+ _("%s: Failed to set max for UID %lu\n"),
+ Prog, (unsigned long int)uid);
+ return true;
+}
+
+static void setmax (short max)
+{
+ if (uflg && has_umin && has_umax && (umin==umax)) {
+ if (setmax_one ((uid_t)umin, max)) {
+ errors = true;
+ }
+ } else {
+ /* Set max for entries in the specified range.
+ * If max is unchanged for an entry, the entry is not touched.
+ * If max is null, and no entries exist for this user, no
+ * entries will be created.
+ */
+ if (aflg) {
+ /* Entries for non existing user are also taken into
+ * account (in order to define policy for future users).
+ */
+ uid_t uid = 0;
+ /* The default umax value is based on the size of the
+ * faillog database.
+ */
+ uid_t uidmax = statbuf.st_size / sizeof (struct faillog);
+ if (uidmax > 1) {
+ uidmax--;
+ }
+
+ /* Make sure we stay in the umin-umax range if specified */
+ if (has_umin) {
+ uid = (uid_t)umin;
+ }
+ if (has_umax) {
+ uidmax = (uid_t)umax;
+ }
+
+ while (uid <= uidmax) {
+ if (setmax_one (uid, max)) {
+ errors = true;
+ }
+ uid++;
+ }
+ } else {
+ /* Only change records for existing users.
+ */
+ struct passwd *pwent;
+
+ setpwent ();
+ while ( (pwent = getpwent ()) != NULL ) {
+ if ( uflg
+ && ( (has_umin && (pwent->pw_uid < (uid_t)umin))
+ || (has_umax && (pwent->pw_uid > (uid_t)umax)))) {
+ continue;
+ }
+ if (setmax_one (pwent->pw_uid, max)) {
+ errors = true;
+ }
+ }
+ endpwent ();
+ }
+ }
+}
+
+/*
+ * set_locktime_one - Set the locktime for one user
+ *
+ * This returns a boolean indicating if an error occurred.
+ */
+static bool set_locktime_one (uid_t uid, long locktime)
+{
+ off_t offset;
+ struct faillog fl;
+
+ offset = (off_t) uid * sizeof (fl);
+ if (offset + sizeof (fl) <= statbuf.st_size) {
+ /* fseeko errors are not really relevant for us. */
+ int err = fseeko (fail, offset, SEEK_SET);
+ assert (0 == err);
+ /* faillog is a sparse file. Even if no entries were
+ * entered for this user, which should be able to get the
+ * empty entry in this case.
+ */
+ if (fread ((char *) &fl, sizeof (fl), 1, fail) != 1) {
+ fprintf (stderr,
+ _("%s: Failed to get the entry for UID %lu\n"),
+ Prog, (unsigned long int)uid);
+ return true;
+ }
+ } else {
+ /* Outsize of the faillog file.
+ * Behave as if there were a missing entry (same behavior
+ * as if we were reading an non existing entry in the
+ * sparse faillog file).
+ */
+ memzero (&fl, sizeof (fl));
+ }
+
+ if (locktime == fl.fail_locktime) {
+ /* If the locktime is already set to the right value, do not
+ * write in the file.
+ * This avoids writing 0 when no entries were present for
+ * the user and the locktime argument is 0.
+ */
+ return false;
+ }
+
+ fl.fail_locktime = locktime;
+
+ if ( (fseeko (fail, offset, SEEK_SET) == 0)
+ && (fwrite ((char *) &fl, sizeof (fl), 1, fail) == 1)) {
+ (void) fflush (fail);
+ return false;
+ }
+
+ fprintf (stderr,
+ _("%s: Failed to set locktime for UID %lu\n"),
+ Prog, (unsigned long int)uid);
+ return true;
+}
+
+static void set_locktime (long locktime)
+{
+ if (uflg && has_umin && has_umax && (umin==umax)) {
+ if (set_locktime_one ((uid_t)umin, locktime)) {
+ errors = true;
+ }
+ } else {
+ /* Set locktime for entries in the specified range.
+ * If locktime is unchanged for an entry, the entry is not touched.
+ * If locktime is null, and no entries exist for this user, no
+ * entries will be created.
+ */
+ if (aflg) {
+ /* Entries for non existing user are also taken into
+ * account (in order to define policy for future users).
+ */
+ uid_t uid = 0;
+ /* The default umax value is based on the size of the
+ * faillog database.
+ */
+ uid_t uidmax = statbuf.st_size / sizeof (struct faillog);
+ if (uidmax > 1) {
+ uidmax--;
+ }
+
+ /* Make sure we stay in the umin-umax range if specified */
+ if (has_umin) {
+ uid = (uid_t)umin;
+ }
+ if (has_umax) {
+ uidmax = (uid_t)umax;
+ }
+
+ while (uid <= uidmax) {
+ if (set_locktime_one (uid, locktime)) {
+ errors = true;
+ }
+ uid++;
+ }
+ } else {
+ /* Only change records for existing users.
+ */
+ struct passwd *pwent;
+
+ setpwent ();
+ while ( (pwent = getpwent ()) != NULL ) {
+ if ( uflg
+ && ( (has_umin && (pwent->pw_uid < (uid_t)umin))
+ || (has_umax && (pwent->pw_uid > (uid_t)umax)))) {
+ continue;
+ }
+ if (set_locktime_one (pwent->pw_uid, locktime)) {
+ errors = true;
+ }
+ }
+ endpwent ();
+ }
+ }
+}
+
+int main (int argc, char **argv)
+{
+ long fail_locktime;
+ short fail_max = 0; // initialize to silence compiler warning
+ long days;
+
+ /*
+ * Get the program name. The program name is used as a prefix to
+ * most error messages.
+ */
+ Prog = Basename (argv[0]);
+
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ process_root_flag ("-R", argc, argv);
+
+ {
+ int c;
+ static struct option long_options[] = {
+ {"all", no_argument, NULL, 'a'},
+ {"help", no_argument, NULL, 'h'},
+ {"lock-secs", required_argument, NULL, 'l'},
+ {"maximum", required_argument, NULL, 'm'},
+ {"reset", no_argument, NULL, 'r'},
+ {"root", required_argument, NULL, 'R'},
+ {"time", required_argument, NULL, 't'},
+ {"user", required_argument, NULL, 'u'},
+ {NULL, 0, NULL, '\0'}
+ };
+ while ((c = getopt_long (argc, argv, "ahl:m:rR:t:u:",
+ long_options, NULL)) != -1) {
+ switch (c) {
+ case 'a':
+ aflg = true;
+ break;
+ case 'h':
+ usage (E_SUCCESS);
+ /*@notreached@*/break;
+ case 'l':
+ if (getlong (optarg, &fail_locktime) == 0) {
+ fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"),
+ Prog, optarg);
+ exit (E_BAD_ARG);
+ }
+ lflg = true;
+ break;
+ case 'm':
+ {
+ long int lmax;
+ if ( (getlong (optarg, &lmax) == 0)
+ || ((long int)(short) lmax != lmax)) {
+ fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"),
+ Prog, optarg);
+ exit (E_BAD_ARG);
+ }
+ fail_max = (short) lmax;
+ mflg = true;
+ break;
+ }
+ case 'r':
+ rflg = true;
+ break;
+ case 'R': /* no-op, handled in process_root_flag () */
+ break;
+ case 't':
+ if (getlong (optarg, &days) == 0) {
+ fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"),
+ Prog, optarg);
+ exit (E_BAD_ARG);
+ }
+ seconds = (time_t) days * DAY;
+ tflg = true;
+ break;
+ case 'u':
+ {
+ /*
+ * The user can be:
+ * - a login name
+ * - numerical
+ * - a numerical login ID
+ * - a range (-x, x-, x-y)
+ */
+ struct passwd *pwent;
+
+ uflg = true;
+ /* local, no need for xgetpwnam */
+ pwent = getpwnam (optarg);
+ if (NULL != pwent) {
+ umin = (unsigned long) pwent->pw_uid;
+ has_umin = true;
+ umax = umin;
+ has_umax = true;
+ } else {
+ if (getrange (optarg,
+ &umin, &has_umin,
+ &umax, &has_umax) == 0) {
+ fprintf (stderr,
+ _("%s: Unknown user or range: %s\n"),
+ Prog, optarg);
+ exit (E_BAD_ARG);
+ }
+ }
+
+ break;
+ }
+ default:
+ usage (E_USAGE);
+ }
+ }
+ if (argc > optind) {
+ fprintf (stderr,
+ _("%s: unexpected argument: %s\n"),
+ Prog, argv[optind]);
+ usage (EXIT_FAILURE);
+ }
+ }
+
+ if (tflg && (lflg || mflg || rflg)) {
+ usage (E_USAGE);
+ }
+
+ /* Open the faillog database */
+ if (lflg || mflg || rflg) {
+ fail = fopen (FAILLOG_FILE, "r+");
+ } else {
+ fail = fopen (FAILLOG_FILE, "r");
+ }
+ if (NULL == fail) {
+ fprintf (stderr,
+ _("%s: Cannot open %s: %s\n"),
+ Prog, FAILLOG_FILE, strerror (errno));
+ exit (E_NOPERM);
+ }
+
+ /* Get the size of the faillog */
+ if (fstat (fileno (fail), &statbuf) != 0) {
+ fprintf (stderr,
+ _("%s: Cannot get the size of %s: %s\n"),
+ Prog, FAILLOG_FILE, strerror (errno));
+ exit (E_NOPERM);
+ }
+
+ if (lflg) {
+ set_locktime (fail_locktime);
+ }
+
+ if (mflg) {
+ setmax (fail_max);
+ }
+
+ if (rflg) {
+ reset ();
+ }
+
+ if (!(lflg || mflg || rflg)) {
+ print ();
+ }
+
+ if (lflg || mflg || rflg) {
+ if ( (ferror (fail) != 0)
+ || (fflush (fail) != 0)
+ || (fsync (fileno (fail)) != 0)
+ || (fclose (fail) != 0)) {
+ fprintf (stderr,
+ _("%s: Failed to write %s: %s\n"),
+ Prog, FAILLOG_FILE, strerror (errno));
+ (void) fclose (fail);
+ errors = true;
+ }
+ } else {
+ (void) fclose (fail);
+ }
+
+ exit (errors ? E_NOPERM : E_SUCCESS);
+}
+
diff --git a/src/gpasswd.c b/src/gpasswd.c
new file mode 100644
index 0000000..4d75af9
--- /dev/null
+++ b/src/gpasswd.c
@@ -0,0 +1,1209 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 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 <errno.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <grp.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include "defines.h"
+#include "groupio.h"
+#include "nscd.h"
+#include "sssd.h"
+#include "prototypes.h"
+#ifdef SHADOWGRP
+#include "sgroupio.h"
+#endif
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+/*
+ * Global variables
+ */
+/* The name of this command, as it is invoked */
+const char *Prog;
+
+#ifdef SHADOWGRP
+/* Indicate if shadow groups are enabled on the system
+ * (/etc/gshadow present) */
+static bool is_shadowgrp;
+#endif
+
+/* Flags set by options */
+static bool aflg = false;
+static bool Aflg = false;
+static bool dflg = false;
+static bool Mflg = false;
+static bool rflg = false;
+static bool Rflg = false;
+/* The name of the group that is being affected */
+static char *group = NULL;
+/* The name of the user being added (-a) or removed (-d) from group */
+static char *user = NULL;
+/* The new list of members set with -M */
+static char *members = NULL;
+#ifdef SHADOWGRP
+/* The new list of group administrators set with -A */
+static char *admins = NULL;
+#endif
+/* The name of the caller */
+static char *myname = NULL;
+/* The UID of the caller */
+static uid_t bywho;
+/* Indicate if gpasswd was called by root */
+#define amroot (0 == bywho)
+
+/* The number of retries for th user to provide and repeat a new password */
+#ifndef RETRIES
+#define RETRIES 3
+#endif
+
+/* local function prototypes */
+static void usage (int status);
+static RETSIGTYPE catch_signals (int killed);
+static bool is_valid_user_list (const char *users);
+static void process_flags (int argc, char **argv);
+static void check_flags (int argc, int opt_index);
+static void open_files (void);
+static void close_files (void);
+#ifdef SHADOWGRP
+static void get_group (struct group *gr, struct sgrp *sg);
+static void check_perms (const struct group *gr, const struct sgrp *sg);
+static void update_group (struct group *gr, struct sgrp *sg);
+static void change_passwd (struct group *gr, struct sgrp *sg);
+#else
+static void get_group (struct group *gr);
+static void check_perms (const struct group *gr);
+static void update_group (struct group *gr);
+static void change_passwd (struct group *gr);
+#endif
+static void log_gpasswd_failure (const char *suffix);
+static void log_gpasswd_failure_system (/*@null@*/unused void *arg);
+static void log_gpasswd_failure_group (/*@null@*/unused void *arg);
+#ifdef SHADOWGRP
+static void log_gpasswd_failure_gshadow (/*@null@*/unused void *arg);
+#endif
+static void log_gpasswd_success (const char *suffix);
+static void log_gpasswd_success_system (/*@null@*/unused void *arg);
+static void log_gpasswd_success_group (/*@null@*/unused void *arg);
+
+/*
+ * usage - display usage message
+ */
+static void usage (int status)
+{
+ FILE *usageout = (E_SUCCESS != status) ? stderr : stdout;
+ (void) fprintf (usageout,
+ _("Usage: %s [option] GROUP\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+ (void) fputs (_(" -a, --add USER add USER to GROUP\n"), usageout);
+ (void) fputs (_(" -d, --delete USER remove USER from GROUP\n"), usageout);
+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
+ (void) fputs (_(" -Q, --root CHROOT_DIR directory to chroot into\n"), usageout);
+ (void) fputs (_(" -r, --remove-password remove the GROUP's password\n"), usageout);
+ (void) fputs (_(" -R, --restrict restrict access to GROUP to its members\n"), usageout);
+ (void) fputs (_(" -M, --members USER,... set the list of members of GROUP\n"), usageout);
+#ifdef SHADOWGRP
+ (void) fputs (_(" -A, --administrators ADMIN,...\n"
+ " set the list of administrators for GROUP\n"), usageout);
+ (void) fputs (_("Except for the -A and -M options, the options cannot be combined.\n"), usageout);
+#else
+ (void) fputs (_("The options cannot be combined.\n"), usageout);
+#endif
+ exit (status);
+}
+
+/*
+ * catch_signals - set or reset termio modes.
+ *
+ * catch_signals() is called before processing begins. signal() is then
+ * called with catch_signals() as the signal handler. If signal later
+ * calls catch_signals() with a signal number, the terminal modes are
+ * then reset.
+ */
+static RETSIGTYPE catch_signals (int killed)
+{
+ static TERMIO sgtty;
+
+ if (0 != killed) {
+ STTY (0, &sgtty);
+ } else {
+ GTTY (0, &sgtty);
+ }
+
+ if (0 != killed) {
+ (void) write (STDOUT_FILENO, "\n", 1);
+ _exit (killed);
+ }
+}
+
+/*
+ * is_valid_user_list - check a comma-separated list of user names for validity
+ *
+ * is_valid_user_list scans a comma-separated list of user names and
+ * checks that each listed name exists is the user database.
+ *
+ * It returns true if the list of users is valid.
+ */
+static bool is_valid_user_list (const char *users)
+{
+ const char *username;
+ char *end;
+ bool is_valid = true;
+ /*@owned@*/char *tmpusers = xstrdup (users);
+
+ for (username = tmpusers;
+ (NULL != username) && ('\0' != *username);
+ username = end) {
+ end = strchr (username, ',');
+ if (NULL != end) {
+ *end = '\0';
+ end++;
+ }
+
+ /*
+ * This user must exist.
+ */
+
+ /* local, no need for xgetpwnam */
+ if (getpwnam (username) == NULL) {
+ fprintf (stderr, _("%s: user '%s' does not exist\n"),
+ Prog, username);
+ is_valid = false;
+ }
+ }
+
+ free (tmpusers);
+
+ return is_valid;
+}
+
+static void failure (void)
+{
+ fprintf (stderr, _("%s: Permission denied.\n"), Prog);
+ log_gpasswd_failure (": Permission denied");
+ exit (E_NOPERM);
+}
+
+/*
+ * process_flags - process the command line options and arguments
+ */
+static void process_flags (int argc, char **argv)
+{
+ int c;
+ static struct option long_options[] = {
+ {"add", required_argument, NULL, 'a'},
+ {"administrators", required_argument, NULL, 'A'},
+ {"delete", required_argument, NULL, 'd'},
+ {"help", no_argument, NULL, 'h'},
+ {"members", required_argument, NULL, 'M'},
+ {"root", required_argument, NULL, 'Q'},
+ {"remove-password", no_argument, NULL, 'r'},
+ {"restrict", no_argument, NULL, 'R'},
+ {NULL, 0, NULL, '\0'}
+ };
+
+ while ((c = getopt_long (argc, argv, "a:A:d:ghM:Q:rR",
+ long_options, NULL)) != -1) {
+ switch (c) {
+ case 'a': /* add a user */
+ aflg = true;
+ user = optarg;
+ /* local, no need for xgetpwnam */
+ if (getpwnam (user) == NULL) {
+ fprintf (stderr,
+ _("%s: user '%s' does not exist\n"),
+ Prog, user);
+ exit (E_BAD_ARG);
+ }
+ break;
+#ifdef SHADOWGRP
+ case 'A': /* set the list of administrators */
+ if (!is_shadowgrp) {
+ fprintf (stderr,
+ _("%s: shadow group passwords required for -A\n"),
+ Prog);
+ exit (E_GSHADOW_NOTFOUND);
+ }
+ admins = optarg;
+ if (!is_valid_user_list (admins)) {
+ exit (E_BAD_ARG);
+ }
+ Aflg = true;
+ break;
+#endif /* SHADOWGRP */
+ case 'd': /* delete a user */
+ dflg = true;
+ user = optarg;
+ break;
+ case 'g': /* no-op from normal password */
+ break;
+ case 'h':
+ usage (E_SUCCESS);
+ break;
+ case 'M': /* set the list of members */
+ members = optarg;
+ if (!is_valid_user_list (members)) {
+ exit (E_BAD_ARG);
+ }
+ Mflg = true;
+ break;
+ case 'Q': /* no-op, handled in process_root_flag () */
+ break;
+ case 'r': /* remove group password */
+ rflg = true;
+ break;
+ case 'R': /* restrict group password */
+ Rflg = true;
+ break;
+ default:
+ usage (E_USAGE);
+ }
+ }
+
+ /* Get the name of the group that is being affected. */
+ group = argv[optind];
+
+ check_flags (argc, optind);
+}
+
+/*
+ * check_flags - check the validity of options
+ */
+static void check_flags (int argc, int opt_index)
+{
+ int exclusive = 0;
+ /*
+ * Make sure exclusive flags are exclusive
+ */
+ if (aflg) {
+ exclusive++;
+ }
+ if (dflg) {
+ exclusive++;
+ }
+ if (rflg) {
+ exclusive++;
+ }
+ if (Rflg) {
+ exclusive++;
+ }
+ if (Aflg || Mflg) {
+ exclusive++;
+ }
+ if (exclusive > 1) {
+ usage (E_USAGE);
+ }
+
+ /*
+ * Make sure one (and only one) group was provided
+ */
+ if ((argc != (opt_index+1)) || (NULL == group)) {
+ usage (E_USAGE);
+ }
+}
+
+/*
+ * open_files - lock and open the group databases
+ *
+ * It will call exit in case of error.
+ */
+static void open_files (void)
+{
+ if (gr_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, gr_dbname ());
+ exit (E_NOPERM);
+ }
+ add_cleanup (cleanup_unlock_group, NULL);
+
+#ifdef SHADOWGRP
+ if (is_shadowgrp) {
+ if (sgr_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, sgr_dbname ());
+ exit (E_NOPERM);
+ }
+ add_cleanup (cleanup_unlock_gshadow, NULL);
+ }
+#endif /* SHADOWGRP */
+
+ add_cleanup (log_gpasswd_failure_system, NULL);
+
+ if (gr_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, gr_dbname ());
+ SYSLOG ((LOG_WARN, "cannot open %s", gr_dbname ()));
+ exit (E_NOPERM);
+ }
+
+#ifdef SHADOWGRP
+ if (is_shadowgrp) {
+ if (sgr_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, sgr_dbname ());
+ SYSLOG ((LOG_WARN, "cannot open %s", sgr_dbname ()));
+ exit (E_NOPERM);
+ }
+ add_cleanup (log_gpasswd_failure_gshadow, NULL);
+ }
+#endif /* SHADOWGRP */
+
+ add_cleanup (log_gpasswd_failure_group, NULL);
+ del_cleanup (log_gpasswd_failure_system);
+}
+
+static void log_gpasswd_failure (const char *suffix)
+{
+#ifdef WITH_AUDIT
+ char buf[1024];
+#endif
+ if (aflg) {
+ SYSLOG ((LOG_ERR,
+ "%s failed to add user %s to group %s%s",
+ myname, user, group, suffix));
+#ifdef WITH_AUDIT
+ snprintf (buf, 1023,
+ "%s failed to add user %s to group %s%s",
+ myname, user, group, suffix);
+ buf[1023] = '\0';
+ audit_logger (AUDIT_USER_ACCT, Prog,
+ buf,
+ group, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ } else if (dflg) {
+ SYSLOG ((LOG_ERR,
+ "%s failed to remove user %s from group %s%s",
+ myname, user, group, suffix));
+#ifdef WITH_AUDIT
+ snprintf (buf, 1023,
+ "%s failed to remove user %s from group %s%s",
+ myname, user, group, suffix);
+ buf[1023] = '\0';
+ audit_logger (AUDIT_USER_ACCT, Prog,
+ buf,
+ group, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ } else if (rflg) {
+ SYSLOG ((LOG_ERR,
+ "%s failed to remove password of group %s%s",
+ myname, group, suffix));
+#ifdef WITH_AUDIT
+ snprintf (buf, 1023,
+ "%s failed to remove password of group %s%s",
+ myname, group, suffix);
+ buf[1023] = '\0';
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ buf,
+ group, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ } else if (Rflg) {
+ SYSLOG ((LOG_ERR,
+ "%s failed to restrict access to group %s%s",
+ myname, group, suffix));
+#ifdef WITH_AUDIT
+ snprintf (buf, 1023,
+ "%s failed to restrict access to group %s%s",
+ myname, group, suffix);
+ buf[1023] = '\0';
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ buf,
+ group, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ } else if (Aflg || Mflg) {
+#ifdef SHADOWGRP
+ if (Aflg) {
+ SYSLOG ((LOG_ERR,
+ "%s failed to set the administrators of group %s to %s%s",
+ myname, group, admins, suffix));
+#ifdef WITH_AUDIT
+ snprintf (buf, 1023,
+ "%s failed to set the administrators of group %s to %s%s",
+ myname, group, admins, suffix);
+ buf[1023] = '\0';
+ audit_logger (AUDIT_USER_ACCT, Prog,
+ buf,
+ group, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ }
+#endif /* SHADOWGRP */
+ if (Mflg) {
+ SYSLOG ((LOG_ERR,
+ "%s failed to set the members of group %s to %s%s",
+ myname, group, members, suffix));
+#ifdef WITH_AUDIT
+ snprintf (buf, 1023,
+ "%s failed to set the members of group %s to %s%s",
+ myname, group, members, suffix);
+ buf[1023] = '\0';
+ audit_logger (AUDIT_USER_ACCT, Prog,
+ buf,
+ group, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ }
+ } else {
+ SYSLOG ((LOG_ERR,
+ "%s failed to change password of group %s%s",
+ myname, group, suffix));
+#ifdef WITH_AUDIT
+ snprintf (buf, 1023,
+ "%s failed to change password of group %s%s",
+ myname, group, suffix);
+ buf[1023] = '\0';
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ buf,
+ group, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ }
+}
+
+static void log_gpasswd_failure_system (unused void *arg)
+{
+ log_gpasswd_failure ("");
+}
+
+static void log_gpasswd_failure_group (unused void *arg)
+{
+ char buf[1024];
+ snprintf (buf, 1023, " in %s", gr_dbname ());
+ buf[1023] = '\0';
+ log_gpasswd_failure (buf);
+}
+
+#ifdef SHADOWGRP
+static void log_gpasswd_failure_gshadow (unused void *arg)
+{
+ char buf[1024];
+ snprintf (buf, 1023, " in %s", sgr_dbname ());
+ buf[1023] = '\0';
+ log_gpasswd_failure (buf);
+}
+#endif /* SHADOWGRP */
+
+static void log_gpasswd_success (const char *suffix)
+{
+#ifdef WITH_AUDIT
+ char buf[1024];
+#endif
+ if (aflg) {
+ SYSLOG ((LOG_INFO,
+ "user %s added by %s to group %s%s",
+ user, myname, group, suffix));
+#ifdef WITH_AUDIT
+ snprintf (buf, 1023,
+ "user %s added by %s to group %s%s",
+ user, myname, group, suffix);
+ buf[1023] = '\0';
+ audit_logger (AUDIT_USER_ACCT, Prog,
+ buf,
+ group, AUDIT_NO_ID,
+ SHADOW_AUDIT_SUCCESS);
+#endif
+ } else if (dflg) {
+ SYSLOG ((LOG_INFO,
+ "user %s removed by %s from group %s%s",
+ user, myname, group, suffix));
+#ifdef WITH_AUDIT
+ snprintf (buf, 1023,
+ "user %s removed by %s from group %s%s",
+ user, myname, group, suffix);
+ buf[1023] = '\0';
+ audit_logger (AUDIT_USER_ACCT, Prog,
+ buf,
+ group, AUDIT_NO_ID,
+ SHADOW_AUDIT_SUCCESS);
+#endif
+ } else if (rflg) {
+ SYSLOG ((LOG_INFO,
+ "password of group %s removed by %s%s",
+ group, myname, suffix));
+#ifdef WITH_AUDIT
+ snprintf (buf, 1023,
+ "password of group %s removed by %s%s",
+ group, myname, suffix);
+ buf[1023] = '\0';
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ buf,
+ group, AUDIT_NO_ID,
+ SHADOW_AUDIT_SUCCESS);
+#endif
+ } else if (Rflg) {
+ SYSLOG ((LOG_INFO,
+ "access to group %s restricted by %s%s",
+ group, myname, suffix));
+#ifdef WITH_AUDIT
+ snprintf (buf, 1023,
+ "access to group %s restricted by %s%s",
+ group, myname, suffix);
+ buf[1023] = '\0';
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ buf,
+ group, AUDIT_NO_ID,
+ SHADOW_AUDIT_SUCCESS);
+#endif
+ } else if (Aflg || Mflg) {
+#ifdef SHADOWGRP
+ if (Aflg) {
+ SYSLOG ((LOG_INFO,
+ "administrators of group %s set by %s to %s%s",
+ group, myname, admins, suffix));
+#ifdef WITH_AUDIT
+ snprintf (buf, 1023,
+ "administrators of group %s set by %s to %s%s",
+ group, myname, admins, suffix);
+ buf[1023] = '\0';
+ audit_logger (AUDIT_USER_ACCT, Prog,
+ buf,
+ group, AUDIT_NO_ID,
+ SHADOW_AUDIT_SUCCESS);
+#endif
+ }
+#endif /* SHADOWGRP */
+ if (Mflg) {
+ SYSLOG ((LOG_INFO,
+ "members of group %s set by %s to %s%s",
+ group, myname, members, suffix));
+#ifdef WITH_AUDIT
+ snprintf (buf, 1023,
+ "members of group %s set by %s to %s%s",
+ group, myname, members, suffix);
+ buf[1023] = '\0';
+ audit_logger (AUDIT_USER_ACCT, Prog,
+ buf,
+ group, AUDIT_NO_ID,
+ SHADOW_AUDIT_SUCCESS);
+#endif
+ }
+ } else {
+ SYSLOG ((LOG_INFO,
+ "password of group %s changed by %s%s",
+ group, myname, suffix));
+#ifdef WITH_AUDIT
+ snprintf (buf, 1023,
+ "password of group %s changed by %s%s",
+ group, myname, suffix);
+ buf[1023] = '\0';
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ buf,
+ group, AUDIT_NO_ID,
+ SHADOW_AUDIT_SUCCESS);
+#endif
+ }
+}
+
+static void log_gpasswd_success_system (unused void *arg)
+{
+ log_gpasswd_success ("");
+}
+
+static void log_gpasswd_success_group (unused void *arg)
+{
+ char buf[1024];
+ snprintf (buf, 1023, " in %s", gr_dbname ());
+ buf[1023] = '\0';
+ log_gpasswd_success (buf);
+}
+
+/*
+ * close_files - close and unlock the group databases
+ *
+ * This cause any changes in the databases to be committed.
+ *
+ * It will call exit in case of error.
+ */
+static void close_files (void)
+{
+ if (gr_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, gr_dbname ());
+ exit (E_NOPERM);
+ }
+ add_cleanup (log_gpasswd_success_group, NULL);
+ del_cleanup (log_gpasswd_failure_group);
+
+ cleanup_unlock_group (NULL);
+ del_cleanup (cleanup_unlock_group);
+
+#ifdef SHADOWGRP
+ if (is_shadowgrp) {
+ if (sgr_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, sgr_dbname ());
+ exit (E_NOPERM);
+ }
+ del_cleanup (log_gpasswd_failure_gshadow);
+
+ cleanup_unlock_gshadow (NULL);
+ del_cleanup (cleanup_unlock_gshadow);
+ }
+#endif /* SHADOWGRP */
+
+ log_gpasswd_success_system (NULL);
+ del_cleanup (log_gpasswd_success_group);
+}
+
+/*
+ * check_perms - check if the user is allowed to change the password of
+ * the specified group.
+ *
+ * It only returns if the user is allowed.
+ */
+#ifdef SHADOWGRP
+static void check_perms (const struct group *gr, const struct sgrp *sg)
+#else
+static void check_perms (const struct group *gr)
+#endif
+{
+ /*
+ * Only root can use the -M and -A options.
+ */
+ if (!amroot && (Aflg || Mflg)) {
+ failure ();
+ }
+
+#ifdef SHADOWGRP
+ if (is_shadowgrp) {
+ /*
+ * The policy here for changing a group is that
+ * 1) you must be root or
+ * 2) you must be listed as an administrative member.
+ * Administrative members can do anything to a group that
+ * the root user can.
+ */
+ if (!amroot && !is_on_list (sg->sg_adm, myname)) {
+ failure ();
+ }
+ } else
+#endif /* SHADOWGRP */
+ {
+#ifdef FIRST_MEMBER_IS_ADMIN
+ /*
+ * The policy here for changing a group is that
+ * 1) you must be root or
+ * 2) you must be the first listed member of the group.
+ * The first listed member of a group can do anything to
+ * that group that the root user can. The rationale for
+ * this hack is that the FIRST user is probably the most
+ * important user in this entire group.
+ *
+ * This feature enabled by default could be a security
+ * problem when installed on existing systems where the
+ * first group member might be just a normal user.
+ * --marekm
+ */
+ if (!amroot) {
+ if (gr->gr_mem[0] == (char *) 0) {
+ failure ();
+ }
+
+ if (strcmp (gr->gr_mem[0], myname) != 0) {
+ failure ();
+ }
+ }
+#else /* ! FIRST_MEMBER_IS_ADMIN */
+ if (!amroot) {
+ failure ();
+ }
+#endif
+ }
+}
+
+/*
+ * update_group - Update the group information in the databases
+ */
+#ifdef SHADOWGRP
+static void update_group (struct group *gr, struct sgrp *sg)
+#else
+static void update_group (struct group *gr)
+#endif
+{
+ if (gr_update (gr) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, gr_dbname (), gr->gr_name);
+ exit (1);
+ }
+#ifdef SHADOWGRP
+ if (is_shadowgrp && (sgr_update (sg) == 0)) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, sgr_dbname (), sg->sg_name);
+ exit (1);
+ }
+#endif /* SHADOWGRP */
+}
+
+/*
+ * get_group - get the current information for the group
+ *
+ * The information are copied in group structure(s) so that they can be
+ * modified later.
+ *
+ * Note: If !is_shadowgrp, *sg will not be initialized.
+ */
+#ifdef SHADOWGRP
+static void get_group (struct group *gr, struct sgrp *sg)
+#else
+static void get_group (struct group *gr)
+#endif
+{
+ struct group const*tmpgr = NULL;
+#ifdef SHADOWGRP
+ struct sgrp const*tmpsg = NULL;
+#endif
+
+ if (gr_open (O_RDONLY) == 0) {
+ fprintf (stderr, _("%s: cannot open %s\n"), Prog, gr_dbname ());
+ SYSLOG ((LOG_WARN, "cannot open %s", gr_dbname ()));
+ exit (E_NOPERM);
+ }
+
+ tmpgr = gr_locate (group);
+ if (NULL == tmpgr) {
+ fprintf (stderr,
+ _("%s: group '%s' does not exist in %s\n"),
+ Prog, group, gr_dbname ());
+ exit (E_BAD_ARG);
+ }
+
+ *gr = *tmpgr;
+ gr->gr_name = xstrdup (tmpgr->gr_name);
+ gr->gr_passwd = xstrdup (tmpgr->gr_passwd);
+ gr->gr_mem = dup_list (tmpgr->gr_mem);
+
+ if (gr_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while closing read-only %s\n"),
+ Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR,
+ "failure while closing read-only %s",
+ gr_dbname ()));
+ exit (E_NOPERM);
+ }
+
+#ifdef SHADOWGRP
+ if (is_shadowgrp) {
+ if (sgr_open (O_RDONLY) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, sgr_dbname ());
+ SYSLOG ((LOG_WARN, "cannot open %s", sgr_dbname ()));
+ exit (E_NOPERM);
+ }
+ tmpsg = sgr_locate (group);
+ if (NULL != tmpsg) {
+ *sg = *tmpsg;
+ sg->sg_name = xstrdup (tmpsg->sg_name);
+ sg->sg_passwd = xstrdup (tmpsg->sg_passwd);
+
+ sg->sg_mem = dup_list (tmpsg->sg_mem);
+ sg->sg_adm = dup_list (tmpsg->sg_adm);
+ } else {
+ sg->sg_name = xstrdup (group);
+ sg->sg_passwd = gr->gr_passwd;
+ gr->gr_passwd = SHADOW_PASSWD_STRING; /* XXX warning: const */
+
+ sg->sg_mem = dup_list (gr->gr_mem);
+
+ sg->sg_adm = (char **) xmalloc (sizeof (char *) * 2);
+#ifdef FIRST_MEMBER_IS_ADMIN
+ if (sg->sg_mem[0]) {
+ sg->sg_adm[0] = xstrdup (sg->sg_mem[0]);
+ sg->sg_adm[1] = NULL;
+ } else
+#endif
+ {
+ sg->sg_adm[0] = NULL;
+ }
+
+ }
+ if (sgr_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while closing read-only %s\n"),
+ Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR,
+ "failure while closing read-only %s",
+ sgr_dbname ()));
+ exit (E_NOPERM);
+ }
+ }
+#endif /* SHADOWGRP */
+}
+
+/*
+ * change_passwd - change the group's password
+ *
+ * Get the new password from the user and update the password in the
+ * group's structure.
+ *
+ * It will call exit in case of error.
+ */
+#ifdef SHADOWGRP
+static void change_passwd (struct group *gr, struct sgrp *sg)
+#else
+static void change_passwd (struct group *gr)
+#endif
+{
+ char *cp;
+ static char pass[BUFSIZ];
+ int retries;
+ const char *salt;
+
+ /*
+ * A new password is to be entered and it must be encrypted, etc.
+ * The password will be prompted for twice, and both entries must be
+ * identical. There is no need to validate the old password since
+ * the invoker is either the group owner, or root.
+ */
+ printf (_("Changing the password for group %s\n"), group);
+
+ for (retries = 0; retries < RETRIES; retries++) {
+ cp = getpass (_("New Password: "));
+ if (NULL == cp) {
+ exit (1);
+ }
+
+ STRFCPY (pass, cp);
+ strzero (cp);
+ cp = getpass (_("Re-enter new password: "));
+ if (NULL == cp) {
+ exit (1);
+ }
+
+ if (strcmp (pass, cp) == 0) {
+ strzero (cp);
+ break;
+ }
+
+ strzero (cp);
+ memzero (pass, sizeof pass);
+
+ if (retries + 1 < RETRIES) {
+ puts (_("They don't match; try again"));
+ }
+ }
+
+ if (retries == RETRIES) {
+ fprintf (stderr, _("%s: Try again later\n"), Prog);
+ exit (1);
+ }
+
+ salt = crypt_make_salt (NULL, NULL);
+ cp = pw_encrypt (pass, salt);
+ if (NULL == cp) {
+ fprintf (stderr,
+ _("%s: failed to crypt password with salt '%s': %s\n"),
+ Prog, salt, strerror (errno));
+ exit (1);
+ }
+ memzero (pass, sizeof pass);
+#ifdef SHADOWGRP
+ if (is_shadowgrp) {
+ gr->gr_passwd = SHADOW_PASSWD_STRING;
+ sg->sg_passwd = cp;
+ } else
+#endif
+ {
+ gr->gr_passwd = cp;
+ }
+}
+
+/*
+ * gpasswd - administer the /etc/group file
+ */
+int main (int argc, char **argv)
+{
+ struct group grent;
+#ifdef SHADOWGRP
+ struct sgrp sgent;
+#endif
+ struct passwd *pw = NULL;
+
+#ifdef WITH_AUDIT
+ audit_help_open ();
+#endif
+
+ sanitize_env ();
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ /*
+ * Make a note of whether or not this command was invoked by root.
+ * This will be used to bypass certain checks later on. Also, set
+ * the real user ID to match the effective user ID. This will
+ * prevent the invoker from issuing signals which would interfere
+ * with this command.
+ */
+ bywho = getuid ();
+ Prog = Basename (argv[0]);
+
+ OPENLOG ("gpasswd");
+ setbuf (stdout, NULL);
+ setbuf (stderr, NULL);
+
+ process_root_flag ("-Q", argc, argv);
+
+#ifdef SHADOWGRP
+ is_shadowgrp = sgr_file_present ();
+#endif
+
+ /*
+ * Determine the name of the user that invoked this command. This
+ * is really hit or miss because there are so many ways that command
+ * can be executed and so many ways to trip up the routines that
+ * report the user name.
+ */
+ pw = get_my_pwent ();
+ if (NULL == pw) {
+ fprintf (stderr, _("%s: Cannot determine your user name.\n"),
+ Prog);
+ SYSLOG ((LOG_WARN,
+ "Cannot determine the user name of the caller (UID %lu)",
+ (unsigned long) getuid ()));
+ exit (E_NOPERM);
+ }
+ myname = xstrdup (pw->pw_name);
+
+ /*
+ * Register an exit function to warn for any inconsistency that we
+ * could create.
+ */
+ if (atexit (do_cleanups) != 0) {
+ fprintf(stderr, "%s: cannot set exit function\n", Prog);
+ exit (1);
+ }
+
+ /* Parse the options */
+ process_flags (argc, argv);
+
+ /*
+ * Replicate the group so it can be modified later on.
+ */
+#ifdef SHADOWGRP
+ get_group (&grent, &sgent);
+#else
+ get_group (&grent);
+#endif
+
+ /*
+ * Check if the user is allowed to change the password of this group.
+ */
+#ifdef SHADOWGRP
+ check_perms (&grent, &sgent);
+#else
+ check_perms (&grent);
+#endif
+
+ /*
+ * Removing a password is straight forward. Just set the password
+ * field to a "".
+ */
+ if (rflg) {
+#ifdef SHADOWGRP
+ if (is_shadowgrp) {
+ grent.gr_passwd = SHADOW_PASSWD_STRING; /* XXX warning: const */
+ sgent.sg_passwd = ""; /* XXX warning: const */
+ } else
+#endif /* SHADOWGRP */
+ {
+ grent.gr_passwd = ""; /* XXX warning: const */
+ }
+ goto output;
+ } else if (Rflg) {
+ /*
+ * Same thing for restricting the group. Set the password
+ * field to "!".
+ */
+#ifdef SHADOWGRP
+ if (is_shadowgrp) {
+ grent.gr_passwd = SHADOW_PASSWD_STRING; /* XXX warning: const */
+ sgent.sg_passwd = "!"; /* XXX warning: const */
+ } else
+#endif /* SHADOWGRP */
+ {
+ grent.gr_passwd = "!"; /* XXX warning: const */
+ }
+ goto output;
+ }
+
+ /*
+ * Adding a member to a member list is pretty straightforward as
+ * well. Call the appropriate routine and split.
+ */
+ if (aflg) {
+ printf (_("Adding user %s to group %s\n"), user, group);
+ grent.gr_mem = add_list (grent.gr_mem, user);
+#ifdef SHADOWGRP
+ if (is_shadowgrp) {
+ sgent.sg_mem = add_list (sgent.sg_mem, user);
+ }
+#endif
+ goto output;
+ }
+
+ /*
+ * Removing a member from the member list is the same deal as adding
+ * one, except the routine is different.
+ */
+ if (dflg) {
+ bool removed = false;
+
+ printf (_("Removing user %s from group %s\n"), user, group);
+
+ if (is_on_list (grent.gr_mem, user)) {
+ removed = true;
+ grent.gr_mem = del_list (grent.gr_mem, user);
+ }
+#ifdef SHADOWGRP
+ if (is_shadowgrp) {
+ if (is_on_list (sgent.sg_mem, user)) {
+ removed = true;
+ sgent.sg_mem = del_list (sgent.sg_mem, user);
+ }
+ }
+#endif
+ if (!removed) {
+ fprintf (stderr,
+ _("%s: user '%s' is not a member of '%s'\n"),
+ Prog, user, group);
+ exit (E_BAD_ARG);
+ }
+ goto output;
+ }
+#ifdef SHADOWGRP
+ /*
+ * Replacing the entire list of administrators is simple. Check the
+ * list to make sure everyone is a real user. Then slap the new list
+ * in place.
+ */
+ if (Aflg) {
+ sgent.sg_adm = comma_to_list (admins);
+ if (!Mflg) {
+ goto output;
+ }
+ }
+#endif /* SHADOWGRP */
+
+ /*
+ * Replacing the entire list of members is simple. Check the list to
+ * make sure everyone is a real user. Then slap the new list in
+ * place.
+ */
+ if (Mflg) {
+#ifdef SHADOWGRP
+ sgent.sg_mem = comma_to_list (members);
+#endif
+ grent.gr_mem = comma_to_list (members);
+ goto output;
+ }
+
+ /*
+ * If the password is being changed, the input and output must both
+ * be a tty. The typical keyboard signals are caught so the termio
+ * modes can be restored.
+ */
+ if ((isatty (0) == 0) || (isatty (1) == 0)) {
+ fprintf (stderr, _("%s: Not a tty\n"), Prog);
+ exit (E_NOPERM);
+ }
+
+ catch_signals (0); /* save tty modes */
+
+ (void) signal (SIGHUP, catch_signals);
+ (void) signal (SIGINT, catch_signals);
+ (void) signal (SIGQUIT, catch_signals);
+ (void) signal (SIGTERM, catch_signals);
+#ifdef SIGTSTP
+ (void) signal (SIGTSTP, catch_signals);
+#endif
+
+ /* Prompt for the new password */
+#ifdef SHADOWGRP
+ change_passwd (&grent, &sgent);
+#else
+ change_passwd (&grent);
+#endif
+
+ /*
+ * This is the common arrival point to output the new group file.
+ * The freshly crafted entry is in allocated space. The group file
+ * will be locked and opened for writing. The new entry will be
+ * output, etc.
+ */
+ output:
+ if (setuid (0) != 0) {
+ fputs (_("Cannot change ID to root.\n"), stderr);
+ SYSLOG ((LOG_ERR, "can't setuid(0)"));
+ closelog ();
+ exit (E_NOPERM);
+ }
+ pwd_init ();
+
+ open_files ();
+
+#ifdef SHADOWGRP
+ update_group (&grent, &sgent);
+#else
+ update_group (&grent);
+#endif
+
+ close_files ();
+
+ nscd_flush_cache ("group");
+ sssd_flush_cache (SSSD_DB_GROUP);
+
+ exit (E_SUCCESS);
+}
+
diff --git a/src/groupadd.c b/src/groupadd.c
new file mode 100644
index 0000000..2dd8eec
--- /dev/null
+++ b/src/groupadd.c
@@ -0,0 +1,633 @@
+/*
+ * Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 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 <ctype.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <grp.h>
+#include <stdio.h>
+#include <sys/types.h>
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+#include "pam_defs.h"
+#include <pwd.h>
+#endif /* USE_PAM */
+#endif /* ACCT_TOOLS_SETUID */
+#include "chkname.h"
+#include "defines.h"
+#include "getdef.h"
+#include "groupio.h"
+#include "nscd.h"
+#include "sssd.h"
+#include "prototypes.h"
+#ifdef SHADOWGRP
+#include "sgroupio.h"
+#endif
+
+/*
+ * exit status values
+ */
+/*@-exitarg@*/
+#define E_SUCCESS 0 /* success */
+#define E_USAGE 2 /* invalid command syntax */
+#define E_BAD_ARG 3 /* invalid argument to option */
+#define E_GID_IN_USE 4 /* gid not unique (when -o not used) */
+#define E_NAME_IN_USE 9 /* group name not unique */
+#define E_GRP_UPDATE 10 /* can't update group file */
+
+/*
+ * Global variables
+ */
+const char *Prog;
+
+static /*@null@*/char *group_name;
+static gid_t group_id;
+static /*@null@*/char *group_passwd;
+static /*@null@*/char *empty_list = NULL;
+
+static const char *prefix = "";
+
+static bool oflg = false; /* permit non-unique group ID to be specified with -g */
+static bool gflg = false; /* ID value for the new group */
+static bool fflg = false; /* if group already exists, do nothing and exit(0) */
+static bool rflg = false; /* create a system account */
+static bool pflg = false; /* new encrypted password */
+
+#ifdef SHADOWGRP
+static bool is_shadow_grp;
+#endif
+
+/* local function prototypes */
+static /*@noreturn@*/void usage (int status);
+static void new_grent (struct group *grent);
+
+#ifdef SHADOWGRP
+static void new_sgent (struct sgrp *sgent);
+#endif
+static void grp_update (void);
+static void check_new_name (void);
+static void close_files (void);
+static void open_files (void);
+static void process_flags (int argc, char **argv);
+static void check_flags (void);
+static void check_perms (void);
+
+/*
+ * usage - display usage message and exit
+ */
+static /*@noreturn@*/void usage (int status)
+{
+ FILE *usageout = (E_SUCCESS != status) ? stderr : stdout;
+ (void) fprintf (usageout,
+ _("Usage: %s [options] GROUP\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+ (void) fputs (_(" -f, --force exit successfully if the group already exists,\n"
+ " and cancel -g if the GID is already used\n"), usageout);
+ (void) fputs (_(" -g, --gid GID use GID for the new group\n"), usageout);
+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
+ (void) fputs (_(" -K, --key KEY=VALUE override /etc/login.defs defaults\n"), usageout);
+ (void) fputs (_(" -o, --non-unique allow to create groups with duplicate\n"
+ " (non-unique) GID\n"), usageout);
+ (void) fputs (_(" -p, --password PASSWORD use this encrypted password for the new group\n"), usageout);
+ (void) fputs (_(" -r, --system create a system account\n"), usageout);
+ (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
+ (void) fputs (_(" -P, --prefix PREFIX_DIR directory prefix\n"), usageout);
+ (void) fputs ("\n", usageout);
+ exit (status);
+}
+
+/*
+ * new_grent - initialize the values in a group file entry
+ *
+ * new_grent() takes all of the values that have been entered and fills
+ * in a (struct group) with them.
+ */
+static void new_grent (struct group *grent)
+{
+ memzero (grent, sizeof *grent);
+ grent->gr_name = group_name;
+ if (pflg) {
+ grent->gr_passwd = group_passwd;
+ } else {
+ grent->gr_passwd = SHADOW_PASSWD_STRING; /* XXX warning: const */
+ }
+ grent->gr_gid = group_id;
+ grent->gr_mem = &empty_list;
+}
+
+#ifdef SHADOWGRP
+/*
+ * new_sgent - initialize the values in a shadow group file entry
+ *
+ * new_sgent() takes all of the values that have been entered and fills
+ * in a (struct sgrp) with them.
+ */
+static void new_sgent (struct sgrp *sgent)
+{
+ memzero (sgent, sizeof *sgent);
+ sgent->sg_name = group_name;
+ if (pflg) {
+ sgent->sg_passwd = group_passwd;
+ } else {
+ sgent->sg_passwd = "!"; /* XXX warning: const */
+ }
+ sgent->sg_adm = &empty_list;
+ sgent->sg_mem = &empty_list;
+}
+#endif /* SHADOWGRP */
+
+/*
+ * grp_update - add new group file entries
+ *
+ * grp_update() writes the new records to the group files.
+ */
+static void grp_update (void)
+{
+ struct group grp;
+
+#ifdef SHADOWGRP
+ struct sgrp sgrp;
+#endif /* SHADOWGRP */
+
+ /*
+ * To add the group, we need to update /etc/group.
+ * Make sure failures will be reported.
+ */
+ add_cleanup (cleanup_report_add_group_group, group_name);
+#ifdef SHADOWGRP
+ if (is_shadow_grp) {
+ /* We also need to update /etc/gshadow */
+ add_cleanup (cleanup_report_add_group_gshadow, group_name);
+ }
+#endif
+
+ /*
+ * Create the initial entries for this new group.
+ */
+ new_grent (&grp);
+#ifdef SHADOWGRP
+ new_sgent (&sgrp);
+ if (is_shadow_grp && pflg) {
+ grp.gr_passwd = SHADOW_PASSWD_STRING; /* XXX warning: const */
+ }
+#endif /* SHADOWGRP */
+
+ /*
+ * Write out the new group file entry.
+ */
+ if (gr_update (&grp) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, gr_dbname (), grp.gr_name);
+ exit (E_GRP_UPDATE);
+ }
+#ifdef SHADOWGRP
+ /*
+ * Write out the new shadow group entries as well.
+ */
+ if (is_shadow_grp && (sgr_update (&sgrp) == 0)) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, sgr_dbname (), sgrp.sg_name);
+ exit (E_GRP_UPDATE);
+ }
+#endif /* SHADOWGRP */
+}
+
+/*
+ * check_new_name - check the new name for validity
+ *
+ * check_new_name() insures that the new name doesn't contain any
+ * illegal characters.
+ */
+static void check_new_name (void)
+{
+ if (is_valid_group_name (group_name)) {
+ return;
+ }
+
+ /*
+ * All invalid group names land here.
+ */
+
+ fprintf (stderr, _("%s: '%s' is not a valid group name\n"),
+ Prog, group_name);
+
+ exit (E_BAD_ARG);
+}
+
+/*
+ * close_files - close all of the files that were opened
+ *
+ * close_files() closes all of the files that were opened for this new
+ * group. This causes any modified entries to be written out.
+ */
+static void close_files (void)
+{
+ /* First, write the changes in the regular group database */
+ if (gr_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, gr_dbname ());
+ exit (E_GRP_UPDATE);
+ }
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_GROUP, Prog,
+ "adding group to /etc/group",
+ group_name, (unsigned int) group_id,
+ SHADOW_AUDIT_SUCCESS);
+#endif
+ SYSLOG ((LOG_INFO, "group added to %s: name=%s, GID=%u",
+ gr_dbname (), group_name, (unsigned int) group_id));
+ del_cleanup (cleanup_report_add_group_group);
+
+ cleanup_unlock_group (NULL);
+ del_cleanup (cleanup_unlock_group);
+
+ /* Now, write the changes in the shadow database */
+#ifdef SHADOWGRP
+ if (is_shadow_grp) {
+ if (sgr_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, sgr_dbname ());
+ exit (E_GRP_UPDATE);
+ }
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_GROUP, Prog,
+ "adding group to /etc/gshadow",
+ group_name, (unsigned int) group_id,
+ SHADOW_AUDIT_SUCCESS);
+#endif
+ SYSLOG ((LOG_INFO, "group added to %s: name=%s",
+ sgr_dbname (), group_name));
+ del_cleanup (cleanup_report_add_group_gshadow);
+
+ cleanup_unlock_gshadow (NULL);
+ del_cleanup (cleanup_unlock_gshadow);
+ }
+#endif /* SHADOWGRP */
+
+ /* Report success at the system level */
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_GROUP, Prog,
+ "",
+ group_name, (unsigned int) group_id,
+ SHADOW_AUDIT_SUCCESS);
+#endif
+ SYSLOG ((LOG_INFO, "new group: name=%s, GID=%u",
+ group_name, (unsigned int) group_id));
+ del_cleanup (cleanup_report_add_group);
+}
+
+/*
+ * open_files - lock and open the group files
+ *
+ * open_files() opens the two group files.
+ */
+static void open_files (void)
+{
+ /* First, lock the databases */
+ if (gr_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, gr_dbname ());
+ exit (E_GRP_UPDATE);
+ }
+ add_cleanup (cleanup_unlock_group, NULL);
+
+#ifdef SHADOWGRP
+ if (is_shadow_grp) {
+ if (sgr_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, sgr_dbname ());
+ exit (E_GRP_UPDATE);
+ }
+ add_cleanup (cleanup_unlock_gshadow, NULL);
+ }
+#endif /* SHADOWGRP */
+
+ /*
+ * Now if the group is not added, it's our fault.
+ * Make sure failures will be reported.
+ */
+ add_cleanup (cleanup_report_add_group, group_name);
+
+ /* And now open the databases */
+ if (gr_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr, _("%s: cannot open %s\n"), Prog, gr_dbname ());
+ SYSLOG ((LOG_WARN, "cannot open %s", gr_dbname ()));
+ exit (E_GRP_UPDATE);
+ }
+
+#ifdef SHADOWGRP
+ if (is_shadow_grp) {
+ if (sgr_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, sgr_dbname ());
+ SYSLOG ((LOG_WARN, "cannot open %s", sgr_dbname ()));
+ exit (E_GRP_UPDATE);
+ }
+ }
+#endif /* SHADOWGRP */
+}
+
+/*
+ * process_flags - parse the command line options
+ *
+ * It will not return if an error is encountered.
+ */
+static void process_flags (int argc, char **argv)
+{
+ /*
+ * Parse the command line options.
+ */
+ char *cp;
+ int c;
+ static struct option long_options[] = {
+ {"force", no_argument, NULL, 'f'},
+ {"gid", required_argument, NULL, 'g'},
+ {"help", no_argument, NULL, 'h'},
+ {"key", required_argument, NULL, 'K'},
+ {"non-unique", no_argument, NULL, 'o'},
+ {"password", required_argument, NULL, 'p'},
+ {"system", no_argument, NULL, 'r'},
+ {"root", required_argument, NULL, 'R'},
+ {"prefix", required_argument, NULL, 'P'},
+ {NULL, 0, NULL, '\0'}
+ };
+
+ while ((c = getopt_long (argc, argv, "fg:hK:op:rR:P:",
+ long_options, NULL)) != -1) {
+ switch (c) {
+ case 'f':
+ /*
+ * "force" - do nothing, just exit(0), if the
+ * specified group already exists. With -g, if
+ * specified gid already exists, choose another
+ * (unique) gid (turn off -g). Based on the RedHat's
+ * patch from shadow-utils-970616-9.
+ */
+ fflg = true;
+ break;
+ case 'g':
+ gflg = true;
+ if ( (get_gid (optarg, &group_id) == 0)
+ || (group_id == (gid_t)-1)) {
+ fprintf (stderr,
+ _("%s: invalid group ID '%s'\n"),
+ Prog, optarg);
+ exit (E_BAD_ARG);
+ }
+ break;
+ case 'h':
+ usage (E_SUCCESS);
+ /*@notreached@*/break;
+ case 'K':
+ /*
+ * override login.defs defaults (-K name=value)
+ * example: -K GID_MIN=100 -K GID_MAX=499
+ * note: -K GID_MIN=10,GID_MAX=499 doesn't work yet
+ */
+ cp = strchr (optarg, '=');
+ if (NULL == cp) {
+ fprintf (stderr,
+ _("%s: -K requires KEY=VALUE\n"),
+ Prog);
+ exit (E_BAD_ARG);
+ }
+ /* terminate name, point to value */
+ *cp++ = '\0';
+ if (putdef_str (optarg, cp) < 0) {
+ exit (E_BAD_ARG);
+ }
+ break;
+ case 'o':
+ oflg = true;
+ break;
+ case 'p':
+ pflg = true;
+ group_passwd = optarg;
+ break;
+ case 'r':
+ rflg = true;
+ break;
+ case 'R': /* no-op, handled in process_root_flag () */
+ break;
+ case 'P': /* no-op, handled in process_prefix_flag () */
+ break;
+ default:
+ usage (E_USAGE);
+ }
+ }
+
+ /*
+ * Check the flags consistency
+ */
+ if (optind != argc - 1) {
+ usage (E_USAGE);
+ }
+ group_name = argv[optind];
+
+ check_flags ();
+}
+
+/*
+ * check_flags - check flags and parameters consistency
+ *
+ * It will not return if an error is encountered.
+ */
+static void check_flags (void)
+{
+ /* -o does not make sense without -g */
+ if (oflg && !gflg) {
+ usage (E_USAGE);
+ }
+
+ check_new_name ();
+
+ /*
+ * Check if the group already exist.
+ */
+ /* local, no need for xgetgrnam */
+ if (prefix_getgrnam (group_name) != NULL) {
+ /* The group already exist */
+ if (fflg) {
+ /* OK, no need to do anything */
+ exit (E_SUCCESS);
+ }
+ fprintf (stderr,
+ _("%s: group '%s' already exists\n"),
+ Prog, group_name);
+ exit (E_NAME_IN_USE);
+ }
+
+ if (gflg && (prefix_getgrgid (group_id) != NULL)) {
+ /* A GID was specified, and a group already exist with that GID
+ * - either we will use this GID anyway (-o)
+ * - either we ignore the specified GID and
+ * we will use another one (-f)
+ * - either it is a failure
+ */
+ if (oflg) {
+ /* Continue with this GID */
+ } else if (fflg) {
+ /* Turn off -g, we can use any GID */
+ gflg = false;
+ } else {
+ fprintf (stderr,
+ _("%s: GID '%lu' already exists\n"),
+ Prog, (unsigned long int) group_id);
+ exit (E_GID_IN_USE);
+ }
+ }
+}
+
+/*
+ * check_perms - check if the caller is allowed to add a group
+ *
+ * With PAM support, the setuid bit can be set on groupadd to allow
+ * non-root users to groups.
+ * Without PAM support, only users who can write in the group databases
+ * can add groups.
+ *
+ * It will not return if the user is not allowed.
+ */
+static void check_perms (void)
+{
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+ pam_handle_t *pamh = NULL;
+ int retval;
+ struct passwd *pampw;
+
+ pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
+ if (NULL == pampw) {
+ fprintf (stderr,
+ _("%s: Cannot determine your user name.\n"),
+ Prog);
+ exit (1);
+ }
+
+ retval = pam_start ("groupadd", pampw->pw_name, &conv, &pamh);
+
+ if (PAM_SUCCESS == retval) {
+ retval = pam_authenticate (pamh, 0);
+ }
+
+ if (PAM_SUCCESS == retval) {
+ retval = pam_acct_mgmt (pamh, 0);
+ }
+
+ if (PAM_SUCCESS != retval) {
+ fprintf (stderr, _("%s: PAM: %s\n"),
+ Prog, pam_strerror (pamh, retval));
+ SYSLOG((LOG_ERR, "%s", pam_strerror (pamh, retval)));
+ if (NULL != pamh) {
+ (void) pam_end (pamh, retval);
+ }
+ exit (1);
+ }
+ (void) pam_end (pamh, retval);
+#endif /* USE_PAM */
+#endif /* ACCT_TOOLS_SETUID */
+}
+
+/*
+ * main - groupadd command
+ */
+int main (int argc, char **argv)
+{
+ /*
+ * Get my name so that I can use it to report errors.
+ */
+ Prog = Basename (argv[0]);
+
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ process_root_flag ("-R", argc, argv);
+ prefix = process_prefix_flag ("-P", argc, argv);
+
+ OPENLOG ("groupadd");
+#ifdef WITH_AUDIT
+ audit_help_open ();
+#endif
+
+ if (atexit (do_cleanups) != 0) {
+ fprintf (stderr,
+ _("%s: Cannot setup cleanup service.\n"),
+ Prog);
+ exit (1);
+ }
+
+ /*
+ * Parse the command line options.
+ */
+ process_flags (argc, argv);
+
+ check_perms ();
+
+#ifdef SHADOWGRP
+ is_shadow_grp = sgr_file_present ();
+#endif
+
+ /*
+ * Do the hard stuff - open the files, create the group entries,
+ * then close and update the files.
+ */
+ open_files ();
+
+ if (!gflg) {
+ if (find_new_gid (rflg, &group_id, NULL) < 0) {
+ exit (E_GID_IN_USE);
+ }
+ }
+
+ grp_update ();
+ close_files ();
+
+ nscd_flush_cache ("group");
+ sssd_flush_cache (SSSD_DB_GROUP);
+
+ return E_SUCCESS;
+}
+
diff --git a/src/groupdel.c b/src/groupdel.c
new file mode 100644
index 0000000..f941a84
--- /dev/null
+++ b/src/groupdel.c
@@ -0,0 +1,500 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 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 <ctype.h>
+#include <fcntl.h>
+#include <grp.h>
+#include <pwd.h>
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+#include "pam_defs.h"
+#endif /* USE_PAM */
+#endif /* ACCT_TOOLS_SETUID */
+#include <stdio.h>
+#include <sys/types.h>
+#include <getopt.h>
+#include "defines.h"
+#include "groupio.h"
+#include "nscd.h"
+#include "sssd.h"
+#include "prototypes.h"
+#ifdef SHADOWGRP
+#include "sgroupio.h"
+#endif
+/*
+ * Global variables
+ */
+const char *Prog;
+
+static char *group_name;
+static gid_t group_id = -1;
+static bool check_group_busy = true;
+
+static const char* prefix = "";
+
+#ifdef SHADOWGRP
+static bool is_shadow_grp;
+#endif
+
+/*
+ * exit status values
+ */
+/*@-exitarg@*/
+#define E_SUCCESS 0 /* success */
+#define E_USAGE 2 /* invalid command syntax */
+#define E_NOTFOUND 6 /* specified group doesn't exist */
+#define E_GROUP_BUSY 8 /* can't remove user's primary group */
+#define E_GRP_UPDATE 10 /* can't update group file */
+
+/* local function prototypes */
+static /*@noreturn@*/void usage (int status);
+static void grp_update (void);
+static void close_files (void);
+static void open_files (void);
+static void group_busy (gid_t gid);
+static void process_flags (int argc, char **argv);
+
+/*
+ * usage - display usage message and exit
+ */
+static /*@noreturn@*/void usage (int status)
+{
+ FILE *usageout = (E_SUCCESS != status) ? stderr : stdout;
+ (void) fprintf (usageout,
+ _("Usage: %s [options] GROUP\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
+ (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
+ (void) fputs (_(" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files\n"), usageout);
+ (void) fputs (_(" -f, --force delete group even if it is the primary group of a user\n"), usageout);
+ (void) fputs ("\n", usageout);
+ exit (status);
+}
+
+/*
+ * grp_update - update group file entries
+ *
+ * grp_update() writes the new records to the group files.
+ */
+static void grp_update (void)
+{
+ /*
+ * To add the group, we need to update /etc/group.
+ * Make sure failures will be reported.
+ */
+ add_cleanup (cleanup_report_del_group_group, group_name);
+#ifdef SHADOWGRP
+ if (is_shadow_grp) {
+ /* We also need to update /etc/gshadow */
+ add_cleanup (cleanup_report_del_group_gshadow, group_name);
+ }
+#endif
+
+ /*
+ * Delete the group entry.
+ */
+ if (gr_remove (group_name) == 0) {
+ fprintf (stderr,
+ _("%s: cannot remove entry '%s' from %s\n"),
+ Prog, group_name, gr_dbname ());
+ exit (E_GRP_UPDATE);
+ }
+
+#ifdef SHADOWGRP
+ /*
+ * Delete the shadow group entries as well.
+ */
+ if (is_shadow_grp && (sgr_locate (group_name) != NULL)) {
+ if (sgr_remove (group_name) == 0) {
+ fprintf (stderr,
+ _("%s: cannot remove entry '%s' from %s\n"),
+ Prog, group_name, sgr_dbname ());
+ exit (E_GRP_UPDATE);
+ }
+ }
+#endif /* SHADOWGRP */
+}
+
+/*
+ * close_files - close all of the files that were opened
+ *
+ * close_files() closes all of the files that were opened for this
+ * new group. This causes any modified entries to be written out.
+ */
+static void close_files (void)
+{
+ /* First, write the changes in the regular group database */
+ if (gr_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, gr_dbname ());
+ exit (E_GRP_UPDATE);
+ }
+
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_GROUP, Prog,
+ "removing group from /etc/group",
+ group_name, (unsigned int) group_id,
+ SHADOW_AUDIT_SUCCESS);
+#endif
+ SYSLOG ((LOG_INFO,
+ "group '%s' removed from %s",
+ group_name, gr_dbname ()));
+ del_cleanup (cleanup_report_del_group_group);
+
+ cleanup_unlock_group (NULL);
+ del_cleanup (cleanup_unlock_group);
+
+
+ /* Then, write the changes in the shadow database */
+#ifdef SHADOWGRP
+ if (is_shadow_grp) {
+ if (sgr_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, sgr_dbname ());
+ exit (E_GRP_UPDATE);
+ }
+
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_GROUP, Prog,
+ "removing group from /etc/gshadow",
+ group_name, (unsigned int) group_id,
+ SHADOW_AUDIT_SUCCESS);
+#endif
+ SYSLOG ((LOG_INFO,
+ "group '%s' removed from %s",
+ group_name, sgr_dbname ()));
+ del_cleanup (cleanup_report_del_group_gshadow);
+
+ cleanup_unlock_gshadow (NULL);
+ del_cleanup (cleanup_unlock_gshadow);
+ }
+#endif /* SHADOWGRP */
+
+ /* Report success at the system level */
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_GROUP, Prog,
+ "",
+ group_name, (unsigned int) group_id,
+ SHADOW_AUDIT_SUCCESS);
+#endif
+ SYSLOG ((LOG_INFO, "group '%s' removed\n", group_name));
+ del_cleanup (cleanup_report_del_group);
+}
+
+/*
+ * open_files - lock and open the group files
+ *
+ * open_files() opens the two group files.
+ */
+static void open_files (void)
+{
+ /* First, lock the databases */
+ if (gr_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, gr_dbname ());
+ exit (E_GRP_UPDATE);
+ }
+ add_cleanup (cleanup_unlock_group, NULL);
+#ifdef SHADOWGRP
+ if (is_shadow_grp) {
+ if (sgr_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, sgr_dbname ());
+ exit (E_GRP_UPDATE);
+ }
+ add_cleanup (cleanup_unlock_gshadow, NULL);
+ }
+#endif
+
+ /*
+ * Now, if the group is not removed, it's our fault.
+ * Make sure failures will be reported.
+ */
+ add_cleanup (cleanup_report_del_group, group_name);
+
+ /* An now open the databases */
+ if (gr_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, gr_dbname ());
+ SYSLOG ((LOG_WARN, "cannot open %s", gr_dbname ()));
+ exit (E_GRP_UPDATE);
+ }
+#ifdef SHADOWGRP
+ if (is_shadow_grp) {
+ if (sgr_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, sgr_dbname ());
+ SYSLOG ((LOG_WARN, "cannot open %s", sgr_dbname ()));
+ exit (E_GRP_UPDATE);
+ }
+ }
+#endif /* SHADOWGRP */
+}
+
+/*
+ * group_busy - check if this is any user's primary group
+ *
+ * group_busy verifies that this group is not the primary group
+ * for any user. You must remove all users before you remove
+ * the group.
+ */
+static void group_busy (gid_t gid)
+{
+ struct passwd *pwd;
+
+ /*
+ * Nice slow linear search.
+ */
+
+ prefix_setpwent ();
+
+ while ( ((pwd = prefix_getpwent ()) != NULL) && (pwd->pw_gid != gid) );
+
+ prefix_endpwent ();
+
+ /*
+ * If pwd isn't NULL, it stopped because the gid's matched.
+ */
+
+ if (pwd == (struct passwd *) 0) {
+ return;
+ }
+
+ /*
+ * Can't remove the group.
+ */
+ fprintf (stderr,
+ _("%s: cannot remove the primary group of user '%s'\n"),
+ Prog, pwd->pw_name);
+ exit (E_GROUP_BUSY);
+}
+
+/*
+ * process_flags - parse the command line options
+ *
+ * It will not return if an error is encountered.
+ */
+static void process_flags (int argc, char **argv)
+{
+ /*
+ * Parse the command line options.
+ */
+ int c;
+ static struct option long_options[] = {
+ {"help", no_argument, NULL, 'h'},
+ {"root", required_argument, NULL, 'R'},
+ {"prefix", required_argument, NULL, 'P'},
+ {NULL, 0, NULL, '\0'}
+ };
+
+ while ((c = getopt_long (argc, argv, "hfR:P:",
+ long_options, NULL)) != -1) {
+ switch (c) {
+ case 'h':
+ usage (E_SUCCESS);
+ /*@notreached@*/break;
+ case 'R': /* no-op, handled in process_root_flag () */
+ break;
+ case 'P': /* no-op, handled in process_prefix_flag () */
+ break;
+ case 'f':
+ check_group_busy = false;
+ break;
+ default:
+ usage (E_USAGE);
+ }
+ }
+
+ if (optind != argc - 1) {
+ usage (E_USAGE);
+ }
+ group_name = argv[optind];
+}
+
+/*
+ * main - groupdel command
+ *
+ * The syntax of the groupdel command is
+ *
+ * groupdel group
+ *
+ * The named group will be deleted.
+ */
+
+int main (int argc, char **argv)
+{
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+ pam_handle_t *pamh = NULL;
+ int retval;
+#endif /* USE_PAM */
+#endif /* ACCT_TOOLS_SETUID */
+
+ /*
+ * Get my name so that I can use it to report errors.
+ */
+ Prog = Basename (argv[0]);
+
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ process_root_flag ("-R", argc, argv);
+ prefix = process_prefix_flag ("-P", argc, argv);
+
+ OPENLOG ("groupdel");
+#ifdef WITH_AUDIT
+ audit_help_open ();
+#endif
+
+ if (atexit (do_cleanups) != 0) {
+ fprintf (stderr,
+ _("%s: Cannot setup cleanup service.\n"),
+ Prog);
+ exit (1);
+ }
+
+ process_flags (argc, argv);
+
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+ {
+ struct passwd *pampw;
+ pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
+ if (pampw == NULL) {
+ fprintf (stderr,
+ _("%s: Cannot determine your user name.\n"),
+ Prog);
+ exit (1);
+ }
+
+ retval = pam_start ("groupdel", pampw->pw_name, &conv, &pamh);
+ }
+
+ if (PAM_SUCCESS == retval) {
+ retval = pam_authenticate (pamh, 0);
+ }
+
+ if (PAM_SUCCESS == retval) {
+ retval = pam_acct_mgmt (pamh, 0);
+ }
+
+ if (PAM_SUCCESS != retval) {
+ fprintf (stderr, _("%s: PAM: %s\n"),
+ Prog, pam_strerror (pamh, retval));
+ SYSLOG((LOG_ERR, "%s", pam_strerror (pamh, retval)));
+ if (NULL != pamh) {
+ (void) pam_end (pamh, retval);
+ }
+ exit (1);
+ }
+ (void) pam_end (pamh, retval);
+#endif /* USE_PAM */
+#endif /* ACCT_TOOLS_SETUID */
+
+#ifdef SHADOWGRP
+ is_shadow_grp = sgr_file_present ();
+#endif
+
+ {
+ struct group *grp;
+ /*
+ * Start with a quick check to see if the group exists.
+ */
+ grp = prefix_getgrnam (group_name); /* local, no need for xgetgrnam */
+ if (NULL == grp) {
+ fprintf (stderr,
+ _("%s: group '%s' does not exist\n"),
+ Prog, group_name);
+ exit (E_NOTFOUND);
+ }
+
+ group_id = grp->gr_gid;
+ }
+
+#ifdef USE_NIS
+ /*
+ * Make sure this isn't a NIS group
+ */
+ if (__isgrNIS ()) {
+ char *nis_domain;
+ char *nis_master;
+
+ fprintf (stderr,
+ _("%s: group '%s' is a NIS group\n"),
+ Prog, group_name);
+
+ if (!yp_get_default_domain (&nis_domain) &&
+ !yp_master (nis_domain, "group.byname", &nis_master)) {
+ fprintf (stderr,
+ _("%s: %s is the NIS master\n"),
+ Prog, nis_master);
+ }
+ exit (E_NOTFOUND);
+ }
+#endif
+
+ /*
+ * Make sure this isn't the primary group of anyone.
+ */
+ if (check_group_busy) {
+ group_busy (group_id);
+ }
+
+ /*
+ * Do the hard stuff - open the files, delete the group entries,
+ * then close and update the files.
+ */
+ open_files ();
+
+ grp_update ();
+
+ close_files ();
+
+ nscd_flush_cache ("group");
+ sssd_flush_cache (SSSD_DB_GROUP);
+
+ return E_SUCCESS;
+}
+
diff --git a/src/groupmems.c b/src/groupmems.c
new file mode 100644
index 0000000..fc91c8b
--- /dev/null
+++ b/src/groupmems.c
@@ -0,0 +1,652 @@
+/*
+ * Copyright (c) 2000 , International Business Machines
+ * George Kraft IV, gk4@us.ibm.com, 03/23/2000
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 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>
+
+#include <fcntl.h>
+#include <getopt.h>
+#include <grp.h>
+#include <stdio.h>
+#include <sys/types.h>
+#ifdef USE_PAM
+#include "pam_defs.h"
+#endif /* USE_PAM */
+#include <pwd.h>
+#include "defines.h"
+#include "prototypes.h"
+#include "groupio.h"
+#ifdef SHADOWGRP
+#include "sgroupio.h"
+#endif
+
+/* Exit Status Values */
+/*@-exitarg@*/
+#define EXIT_SUCCESS 0 /* success */
+#define EXIT_USAGE 1 /* invalid command syntax */
+#define EXIT_GROUP_FILE 2 /* group file access problems */
+#define EXIT_NOT_ROOT 3 /* not superuser */
+#define EXIT_NOT_EROOT 4 /* not effective superuser */
+#define EXIT_NOT_PRIMARY 5 /* not primary owner of group */
+#define EXIT_NOT_MEMBER 6 /* member of group does not exist */
+#define EXIT_MEMBER_EXISTS 7 /* member of group already exists */
+#define EXIT_INVALID_USER 8 /* specified user does not exist */
+#define EXIT_INVALID_GROUP 9 /* specified group does not exist */
+
+/*
+ * Global variables
+ */
+const char *Prog;
+
+static char *adduser = NULL;
+static char *deluser = NULL;
+static char *thisgroup = NULL;
+static bool purge = false;
+static bool list = false;
+static int exclusive = 0;
+static bool gr_locked = false;
+#ifdef SHADOWGRP
+/* Indicate if shadow groups are enabled on the system
+ * (/etc/gshadow present) */
+static bool is_shadowgrp;
+static bool sgr_locked = false;
+#endif
+
+/* local function prototypes */
+static char *whoami (void);
+static void add_user (const char *user,
+ const struct group *grp);
+static void remove_user (const char *user,
+ const struct group *grp);
+static void purge_members (const struct group *grp);
+static void display_members (const char *const *members);
+static /*@noreturn@*/void usage (int status);
+static void process_flags (int argc, char **argv);
+static void check_perms (void);
+static void fail_exit (int code);
+#define isroot() (getuid () == 0)
+
+static char *whoami (void)
+{
+ /* local, no need for xgetgrgid */
+ struct group *grp = getgrgid (getgid ());
+ /* local, no need for xgetpwuid */
+ struct passwd *usr = getpwuid (getuid ());
+
+ if ( (NULL != usr)
+ && (NULL != grp)
+ && (0 == strcmp (usr->pw_name, grp->gr_name))) {
+ return xstrdup (usr->pw_name);
+ } else {
+ return NULL;
+ }
+}
+
+/*
+ * add_user - Add an user to the specified group
+ */
+static void add_user (const char *user,
+ const struct group *grp)
+{
+ struct group *newgrp;
+
+ /* Make sure the user is not already part of the group */
+ if (is_on_list (grp->gr_mem, user)) {
+ fprintf (stderr,
+ _("%s: user '%s' is already a member of '%s'\n"),
+ Prog, user, grp->gr_name);
+ fail_exit (EXIT_MEMBER_EXISTS);
+ }
+
+ newgrp = __gr_dup(grp);
+ if (NULL == newgrp) {
+ fprintf (stderr,
+ _("%s: Out of memory. Cannot update %s.\n"),
+ Prog, gr_dbname ());
+ fail_exit (13);
+ }
+
+ /* Add the user to the /etc/group group */
+ newgrp->gr_mem = add_list (newgrp->gr_mem, user);
+
+#ifdef SHADOWGRP
+ if (is_shadowgrp) {
+ const struct sgrp *sg = sgr_locate (newgrp->gr_name);
+ struct sgrp *newsg;
+
+ if (NULL == sg) {
+ /* Create a shadow group based on this group */
+ static struct sgrp sgrent;
+ sgrent.sg_name = xstrdup (newgrp->gr_name);
+ sgrent.sg_mem = dup_list (newgrp->gr_mem);
+ sgrent.sg_adm = (char **) xmalloc (sizeof (char *));
+#ifdef FIRST_MEMBER_IS_ADMIN
+ if (sgrent.sg_mem[0]) {
+ sgrent.sg_adm[0] = xstrdup (sgrent.sg_mem[0]);
+ sgrent.sg_adm[1] = NULL;
+ } else
+#endif
+ {
+ sgrent.sg_adm[0] = NULL;
+ }
+
+ /* Move any password to gshadow */
+ sgrent.sg_passwd = newgrp->gr_passwd;
+ newgrp->gr_passwd = SHADOW_PASSWD_STRING;
+
+ newsg = &sgrent;
+ } else {
+ newsg = __sgr_dup (sg);
+ if (NULL == newsg) {
+ fprintf (stderr,
+ _("%s: Out of memory. Cannot update %s.\n"),
+ Prog, sgr_dbname ());
+ fail_exit (13);
+ }
+ /* Add the user to the members */
+ newsg->sg_mem = add_list (newsg->sg_mem, user);
+ /* Do not touch the administrators */
+ }
+
+ if (sgr_update (newsg) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, sgr_dbname (), newsg->sg_name);
+ fail_exit (13);
+ }
+ }
+#endif
+
+ if (gr_update (newgrp) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, gr_dbname (), newgrp->gr_name);
+ fail_exit (13);
+ }
+}
+
+/*
+ * remove_user - Remove an user from a given group
+ */
+static void remove_user (const char *user,
+ const struct group *grp)
+{
+ struct group *newgrp;
+
+ /* Check if the user is a member of the specified group */
+ if (!is_on_list (grp->gr_mem, user)) {
+ fprintf (stderr,
+ _("%s: user '%s' is not a member of '%s'\n"),
+ Prog, user, grp->gr_name);
+ fail_exit (EXIT_NOT_MEMBER);
+ }
+
+ newgrp = __gr_dup (grp);
+ if (NULL == newgrp) {
+ fprintf (stderr,
+ _("%s: Out of memory. Cannot update %s.\n"),
+ Prog, gr_dbname ());
+ fail_exit (13);
+ }
+
+ /* Remove the user from the /etc/group group */
+ newgrp->gr_mem = del_list (newgrp->gr_mem, user);
+
+#ifdef SHADOWGRP
+ if (is_shadowgrp) {
+ const struct sgrp *sg = sgr_locate (newgrp->gr_name);
+ struct sgrp *newsg;
+
+ if (NULL == sg) {
+ /* Create a shadow group based on this group */
+ static struct sgrp sgrent;
+ sgrent.sg_name = xstrdup (newgrp->gr_name);
+ sgrent.sg_mem = dup_list (newgrp->gr_mem);
+ sgrent.sg_adm = (char **) xmalloc (sizeof (char *));
+#ifdef FIRST_MEMBER_IS_ADMIN
+ if (sgrent.sg_mem[0]) {
+ sgrent.sg_adm[0] = xstrdup (sgrent.sg_mem[0]);
+ sgrent.sg_adm[1] = NULL;
+ } else
+#endif
+ {
+ sgrent.sg_adm[0] = NULL;
+ }
+
+ /* Move any password to gshadow */
+ sgrent.sg_passwd = newgrp->gr_passwd;
+ newgrp->gr_passwd = SHADOW_PASSWD_STRING;
+
+ newsg = &sgrent;
+ } else {
+ newsg = __sgr_dup (sg);
+ if (NULL == newsg) {
+ fprintf (stderr,
+ _("%s: Out of memory. Cannot update %s.\n"),
+ Prog, sgr_dbname ());
+ fail_exit (13);
+ }
+ /* Remove the user from the members */
+ newsg->sg_mem = del_list (newsg->sg_mem, user);
+ /* Remove the user from the administrators */
+ newsg->sg_adm = del_list (newsg->sg_adm, user);
+ }
+
+ if (sgr_update (newsg) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, sgr_dbname (), newsg->sg_name);
+ fail_exit (13);
+ }
+ }
+#endif
+
+ if (gr_update (newgrp) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, gr_dbname (), newgrp->gr_name);
+ fail_exit (13);
+ }
+}
+
+/*
+ * purge_members - Remove every members of the specified group
+ */
+static void purge_members (const struct group *grp)
+{
+ struct group *newgrp = __gr_dup (grp);
+
+ if (NULL == newgrp) {
+ fprintf (stderr,
+ _("%s: Out of memory. Cannot update %s.\n"),
+ Prog, gr_dbname ());
+ fail_exit (13);
+ }
+
+ /* Remove all the members of the /etc/group group */
+ newgrp->gr_mem[0] = NULL;
+
+#ifdef SHADOWGRP
+ if (is_shadowgrp) {
+ const struct sgrp *sg = sgr_locate (newgrp->gr_name);
+ struct sgrp *newsg;
+
+ if (NULL == sg) {
+ /* Create a shadow group based on this group */
+ static struct sgrp sgrent;
+ sgrent.sg_name = xstrdup (newgrp->gr_name);
+ sgrent.sg_mem = (char **) xmalloc (sizeof (char *));
+ sgrent.sg_mem[0] = NULL;
+ sgrent.sg_adm = (char **) xmalloc (sizeof (char *));
+ sgrent.sg_adm[0] = NULL;
+
+ /* Move any password to gshadow */
+ sgrent.sg_passwd = newgrp->gr_passwd;
+ newgrp->gr_passwd = xstrdup(SHADOW_PASSWD_STRING);
+
+ newsg = &sgrent;
+ } else {
+ newsg = __sgr_dup (sg);
+ if (NULL == newsg) {
+ fprintf (stderr,
+ _("%s: Out of memory. Cannot update %s.\n"),
+ Prog, sgr_dbname ());
+ fail_exit (13);
+ }
+ /* Remove all the members of the /etc/gshadow
+ * group */
+ newsg->sg_mem[0] = NULL;
+ /* Remove all the administrators of the
+ * /etc/gshadow group */
+ newsg->sg_adm[0] = NULL;
+ }
+
+ if (sgr_update (newsg) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, sgr_dbname (), newsg->sg_name);
+ fail_exit (13);
+ }
+ }
+#endif
+
+ if (gr_update (newgrp) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, gr_dbname (), newgrp->gr_name);
+ fail_exit (13);
+ }
+}
+
+static void display_members (const char *const *members)
+{
+ int i;
+
+ for (i = 0; NULL != members[i]; i++) {
+ printf ("%s ", members[i]);
+
+ if (NULL == members[i + 1]) {
+ printf ("\n");
+ } else {
+ printf (" ");
+ }
+ }
+}
+
+static /*@noreturn@*/void usage (int status)
+{
+ FILE *usageout = (EXIT_SUCCESS != status) ? stderr : stdout;
+ (void) fprintf (usageout,
+ _("Usage: %s [options] [action]\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+ (void) fputs (_(" -g, --group groupname change groupname instead of the user's group\n"
+ " (root only)\n"), usageout);
+ (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
+ (void) fputs (_("\n"), usageout);
+ (void) fputs (_("Actions:\n"), usageout);
+ (void) fputs (_(" -a, --add username add username to the members of the group\n"), usageout);
+ (void) fputs (_(" -d, --delete username remove username from the members of the group\n"), usageout);
+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
+ (void) fputs (_(" -p, --purge purge all members from the group\n"), usageout);
+ (void) fputs (_(" -l, --list list the members of the group\n"), usageout);
+ exit (status);
+}
+
+/*
+ * process_flags - perform command line argument setting
+ */
+static void process_flags (int argc, char **argv)
+{
+ int c;
+ static struct option long_options[] = {
+ {"add", required_argument, NULL, 'a'},
+ {"delete", required_argument, NULL, 'd'},
+ {"group", required_argument, NULL, 'g'},
+ {"help", no_argument, NULL, 'h'},
+ {"list", no_argument, NULL, 'l'},
+ {"purge", no_argument, NULL, 'p'},
+ {"root", required_argument, NULL, 'R'},
+ {NULL, 0, NULL, '\0'}
+ };
+
+ while ((c = getopt_long (argc, argv, "a:d:g:hlpR:",
+ long_options, NULL)) != EOF) {
+ switch (c) {
+ case 'a':
+ adduser = xstrdup (optarg);
+ ++exclusive;
+ break;
+ case 'd':
+ deluser = xstrdup (optarg);
+ ++exclusive;
+ break;
+ case 'g':
+ thisgroup = xstrdup (optarg);
+ break;
+ case 'h':
+ usage (EXIT_SUCCESS);
+ /*@notreached@*/break;
+ case 'l':
+ list = true;
+ ++exclusive;
+ break;
+ case 'p':
+ purge = true;
+ ++exclusive;
+ break;
+ case 'R': /* no-op, handled in process_root_flag () */
+ break;
+ default:
+ usage (EXIT_USAGE);
+ }
+ }
+
+ if ((exclusive > 1) || (optind < argc)) {
+ usage (EXIT_USAGE);
+ }
+
+ /* local, no need for xgetpwnam */
+ if ( (NULL != adduser)
+ && (getpwnam (adduser) == NULL)) {
+ fprintf (stderr, _("%s: user '%s' does not exist\n"),
+ Prog, adduser);
+ fail_exit (EXIT_INVALID_USER);
+ }
+
+}
+
+static void check_perms (void)
+{
+ if (!list) {
+#ifdef USE_PAM
+ pam_handle_t *pamh = NULL;
+ int retval;
+ struct passwd *pampw;
+
+ pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
+ if (NULL == pampw) {
+ fprintf (stderr,
+ _("%s: Cannot determine your user name.\n"),
+ Prog);
+ fail_exit (1);
+ }
+
+ retval = pam_start ("groupmems", pampw->pw_name, &conv, &pamh);
+
+ if (PAM_SUCCESS == retval) {
+ retval = pam_authenticate (pamh, 0);
+ }
+
+ if (PAM_SUCCESS == retval) {
+ retval = pam_acct_mgmt (pamh, 0);
+ }
+
+ if (PAM_SUCCESS != retval) {
+ fprintf (stderr, _("%s: PAM: %s\n"),
+ Prog, pam_strerror (pamh, retval));
+ SYSLOG((LOG_ERR, "%s", pam_strerror (pamh, retval)));
+ if (NULL != pamh) {
+ (void) pam_end (pamh, retval);
+ }
+ fail_exit (1);
+ }
+ (void) pam_end (pamh, retval);
+#endif
+ }
+}
+
+static void fail_exit (int code)
+{
+ if (gr_locked) {
+ if (gr_unlock () == 0) {
+ fprintf (stderr,
+ _("%s: failed to unlock %s\n"),
+ Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+ /* continue */
+ }
+ }
+
+#ifdef SHADOWGRP
+ if (sgr_locked) {
+ if (sgr_unlock () == 0) {
+ fprintf (stderr,
+ _("%s: failed to unlock %s\n"),
+ Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+ /* continue */
+ }
+ }
+#endif
+
+ exit (code);
+}
+
+static void open_files (void)
+{
+ if (!list) {
+ if (gr_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, gr_dbname ());
+ fail_exit (EXIT_GROUP_FILE);
+ }
+ gr_locked = true;
+
+#ifdef SHADOWGRP
+ if (is_shadowgrp) {
+ if (sgr_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, sgr_dbname ());
+ fail_exit (EXIT_GROUP_FILE);
+ }
+ sgr_locked = true;
+ }
+#endif
+ }
+
+ if (gr_open (list ? O_RDONLY : O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr, _("%s: cannot open %s\n"), Prog, gr_dbname ());
+ fail_exit (EXIT_GROUP_FILE);
+ }
+
+#ifdef SHADOWGRP
+ if (is_shadowgrp) {
+ if (sgr_open (list ? O_RDONLY : O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr, _("%s: cannot open %s\n"), Prog, sgr_dbname ());
+ fail_exit (EXIT_GROUP_FILE);
+ }
+ }
+#endif
+}
+
+static void close_files (void)
+{
+ if ((gr_close () == 0) && !list) {
+ fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", gr_dbname ()));
+ fail_exit (EXIT_GROUP_FILE);
+ }
+ if (gr_locked) {
+ if (gr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+ /* continue */
+ }
+ gr_locked = false;
+ }
+
+#ifdef SHADOWGRP
+ if (is_shadowgrp) {
+ if ((sgr_close () == 0) && !list) {
+ fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", sgr_dbname ()));
+ fail_exit (EXIT_GROUP_FILE);
+ }
+ if (sgr_locked) {
+ if (sgr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+ /* continue */
+ }
+ sgr_locked = false;
+ }
+ }
+#endif
+}
+
+int main (int argc, char **argv)
+{
+ char *name;
+ const struct group *grp;
+
+ /*
+ * Get my name so that I can use it to report errors.
+ */
+ Prog = Basename (argv[0]);
+
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ process_root_flag ("-R", argc, argv);
+
+ OPENLOG ("groupmems");
+
+#ifdef SHADOWGRP
+ is_shadowgrp = sgr_file_present ();
+#endif
+
+ process_flags (argc, argv);
+
+ if (NULL == thisgroup) {
+ name = whoami ();
+ if (!list && (NULL == name)) {
+ fprintf (stderr, _("%s: your groupname does not match your username\n"), Prog);
+ fail_exit (EXIT_NOT_PRIMARY);
+ }
+ } else {
+ name = thisgroup;
+ if (!list && !isroot ()) {
+ fprintf (stderr, _("%s: only root can use the -g/--group option\n"), Prog);
+ fail_exit (EXIT_NOT_ROOT);
+ }
+ }
+
+ check_perms ();
+
+ open_files ();
+
+ grp = gr_locate (name);
+ if (NULL == grp) {
+ fprintf (stderr, _("%s: group '%s' does not exist in %s\n"),
+ Prog, name, gr_dbname ());
+ fail_exit (EXIT_INVALID_GROUP);
+ }
+
+ if (list) {
+ display_members ((const char *const *)grp->gr_mem);
+ } else if (NULL != adduser) {
+ add_user (adduser, grp);
+ } else if (NULL != deluser) {
+ remove_user (deluser, grp);
+ } else if (purge) {
+ purge_members (grp);
+ }
+
+ close_files ();
+
+ exit (EXIT_SUCCESS);
+}
+
diff --git a/src/groupmod.c b/src/groupmod.c
new file mode 100644
index 0000000..1dca5fc
--- /dev/null
+++ b/src/groupmod.c
@@ -0,0 +1,885 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 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 <ctype.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <grp.h>
+#include <stdio.h>
+#include <sys/types.h>
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+#include "pam_defs.h"
+#include <pwd.h>
+#endif /* USE_PAM */
+#endif /* ACCT_TOOLS_SETUID */
+#include "chkname.h"
+#include "defines.h"
+#include "groupio.h"
+#include "pwio.h"
+#include "nscd.h"
+#include "sssd.h"
+#include "prototypes.h"
+#ifdef SHADOWGRP
+#include "sgroupio.h"
+#endif
+/*
+ * exit status values
+ */
+/*@-exitarg@*/
+#define E_SUCCESS 0 /* success */
+#define E_USAGE 2 /* invalid command syntax */
+#define E_BAD_ARG 3 /* invalid argument to option */
+#define E_GID_IN_USE 4 /* gid already in use (and no -o) */
+#define E_NOTFOUND 6 /* specified group doesn't exist */
+#define E_NAME_IN_USE 9 /* group name already in use */
+#define E_GRP_UPDATE 10 /* can't update group file */
+#define E_CLEANUP_SERVICE 11 /* can't setup cleanup service */
+#define E_PAM_USERNAME 12 /* can't determine your username for use with pam */
+#define E_PAM_ERROR 13 /* pam returned an error, see Syslog facility id groupmod */
+
+
+/*
+ * Global variables
+ */
+const char *Prog;
+
+#ifdef SHADOWGRP
+static bool is_shadow_grp;
+#endif /* SHADOWGRP */
+static char *group_name;
+static char *group_newname;
+static char *group_passwd;
+static gid_t group_id;
+static gid_t group_newid;
+
+static const char* prefix = "";
+
+static struct cleanup_info_mod info_passwd;
+static struct cleanup_info_mod info_group;
+#ifdef SHADOWGRP
+static struct cleanup_info_mod info_gshadow;
+#endif
+
+static bool
+ oflg = false, /* permit non-unique group ID to be specified with -g */
+ gflg = false, /* new ID value for the group */
+ nflg = false, /* a new name has been specified for the group */
+ pflg = false; /* new encrypted password */
+
+/* local function prototypes */
+static void usage (int status);
+static void new_grent (struct group *);
+
+#ifdef SHADOWGRP
+static void new_sgent (struct sgrp *);
+#endif
+static void grp_update (void);
+static void check_new_gid (void);
+static void check_new_name (void);
+static void process_flags (int, char **);
+static void lock_files (void);
+static void prepare_failure_reports (void);
+static void open_files (void);
+static void close_files (void);
+static void update_primary_groups (gid_t ogid, gid_t ngid);
+
+/*
+ * usage - display usage message and exit
+ */
+
+static void usage (int status)
+{
+ FILE *usageout = (E_SUCCESS != status) ? stderr : stdout;
+ (void) fprintf (usageout,
+ _("Usage: %s [options] GROUP\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+ (void) fputs (_(" -g, --gid GID change the group ID to GID\n"), usageout);
+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
+ (void) fputs (_(" -n, --new-name NEW_GROUP change the name to NEW_GROUP\n"), usageout);
+ (void) fputs (_(" -o, --non-unique allow to use a duplicate (non-unique) GID\n"), usageout);
+ (void) fputs (_(" -p, --password PASSWORD change the password to this (encrypted)\n"
+ " PASSWORD\n"), usageout);
+ (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
+ (void) fputs (_(" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files\n"), usageout);
+ (void) fputs ("\n", usageout);
+ exit (status);
+}
+
+/*
+ * new_grent - updates the values in a group file entry
+ *
+ * new_grent() takes all of the values that have been entered and fills
+ * in a (struct group) with them.
+ */
+static void new_grent (struct group *grent)
+{
+ if (nflg) {
+ grent->gr_name = xstrdup (group_newname);
+ }
+
+ if (gflg) {
+ grent->gr_gid = group_newid;
+ }
+
+ if ( pflg
+#ifdef SHADOWGRP
+ && ( (!is_shadow_grp)
+ || (strcmp (grent->gr_passwd, SHADOW_PASSWD_STRING) != 0))
+#endif
+ ) {
+ /* Update the password in group if there is no gshadow
+ * file or if the password is currently in group
+ * (gr_passwd != "x"). We do not force the usage of
+ * shadow passwords if it was not the case before.
+ */
+ grent->gr_passwd = group_passwd;
+ }
+}
+
+#ifdef SHADOWGRP
+/*
+ * new_sgent - updates the values in a shadow group file entry
+ *
+ * new_sgent() takes all of the values that have been entered and fills
+ * in a (struct sgrp) with them.
+ */
+static void new_sgent (struct sgrp *sgent)
+{
+ if (nflg) {
+ sgent->sg_name = xstrdup (group_newname);
+ }
+
+ /* Always update the shadowed password if there is a shadow entry
+ * (even if shadowed passwords might not be enabled for this group
+ * (gr_passwd != "x")).
+ * It seems better to update the password in both places in case a
+ * shadow and a non shadow entry exist.
+ * This might occur only if there were already both entries.
+ */
+ if (pflg) {
+ sgent->sg_passwd = group_passwd;
+ }
+}
+#endif /* SHADOWGRP */
+
+/*
+ * grp_update - update group file entries
+ *
+ * grp_update() updates the new records in the memory databases.
+ */
+static void grp_update (void)
+{
+ struct group grp;
+ const struct group *ogrp;
+
+#ifdef SHADOWGRP
+ struct sgrp sgrp;
+ const struct sgrp *osgrp = NULL;
+#endif /* SHADOWGRP */
+
+ /*
+ * Get the current settings for this group.
+ */
+ ogrp = gr_locate (group_name);
+ if (NULL == ogrp) {
+ fprintf (stderr,
+ _("%s: group '%s' does not exist in %s\n"),
+ Prog, group_name, gr_dbname ());
+ exit (E_GRP_UPDATE);
+ }
+ grp = *ogrp;
+ new_grent (&grp);
+#ifdef SHADOWGRP
+ if ( is_shadow_grp
+ && (pflg || nflg)) {
+ osgrp = sgr_locate (group_name);
+ if (NULL != osgrp) {
+ sgrp = *osgrp;
+ new_sgent (&sgrp);
+ } else if ( pflg
+ && (strcmp (grp.gr_passwd, SHADOW_PASSWD_STRING) == 0)) {
+ static char *empty = NULL;
+ /* If there is a gshadow file with no entries for
+ * the group, but the group file indicates a
+ * shadowed password, we force the creation of a
+ * gshadow entry when a new password is requested.
+ */
+ memset (&sgrp, 0, sizeof sgrp);
+ sgrp.sg_name = xstrdup (grp.gr_name);
+ sgrp.sg_passwd = xstrdup (grp.gr_passwd);
+ sgrp.sg_adm = &empty;
+ sgrp.sg_mem = dup_list (grp.gr_mem);
+ new_sgent (&sgrp);
+ osgrp = &sgrp; /* entry needs to be committed */
+ }
+ }
+#endif /* SHADOWGRP */
+
+ if (gflg) {
+ update_primary_groups (ogrp->gr_gid, group_newid);
+ }
+
+ /*
+ * Write out the new group file entry.
+ */
+ if (gr_update (&grp) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, gr_dbname (), grp.gr_name);
+ exit (E_GRP_UPDATE);
+ }
+ if (nflg && (gr_remove (group_name) == 0)) {
+ fprintf (stderr,
+ _("%s: cannot remove entry '%s' from %s\n"),
+ Prog, grp.gr_name, gr_dbname ());
+ exit (E_GRP_UPDATE);
+ }
+
+#ifdef SHADOWGRP
+ /*
+ * Make sure there was a shadow entry to begin with.
+ */
+ if (NULL != osgrp) {
+ /*
+ * Write out the new shadow group entries as well.
+ */
+ if (sgr_update (&sgrp) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, sgr_dbname (), sgrp.sg_name);
+ exit (E_GRP_UPDATE);
+ }
+ if (nflg && (sgr_remove (group_name) == 0)) {
+ fprintf (stderr,
+ _("%s: cannot remove entry '%s' from %s\n"),
+ Prog, group_name, sgr_dbname ());
+ exit (E_GRP_UPDATE);
+ }
+ }
+#endif /* SHADOWGRP */
+}
+
+/*
+ * check_new_gid - check the new GID value for uniqueness
+ *
+ * check_new_gid() insures that the new GID value is unique.
+ */
+static void check_new_gid (void)
+{
+ /*
+ * First, the easy stuff. If the ID can be duplicated, or if the ID
+ * didn't really change, just return. If the ID didn't change, turn
+ * off those flags. No sense doing needless work.
+ */
+ if (group_id == group_newid) {
+ gflg = 0;
+ return;
+ }
+
+ if (oflg ||
+ (getgrgid (group_newid) == NULL) /* local, no need for xgetgrgid */
+ ) {
+ return;
+ }
+
+ /*
+ * Tell the user what they did wrong.
+ */
+ fprintf (stderr,
+ _("%s: GID '%lu' already exists\n"),
+ Prog, (unsigned long int) group_newid);
+ exit (E_GID_IN_USE);
+}
+
+/*
+ * check_new_name - check the new name for uniqueness
+ *
+ * check_new_name() insures that the new name does not exist already.
+ * You can't have the same name twice, period.
+ */
+static void check_new_name (void)
+{
+ /*
+ * Make sure they are actually changing the name.
+ */
+ if (strcmp (group_name, group_newname) == 0) {
+ nflg = 0;
+ return;
+ }
+
+ if (is_valid_group_name (group_newname)) {
+
+ /*
+ * If the entry is found, too bad.
+ */
+ /* local, no need for xgetgrnam */
+ if (prefix_getgrnam (group_newname) != NULL) {
+ fprintf (stderr,
+ _("%s: group '%s' already exists\n"),
+ Prog, group_newname);
+ exit (E_NAME_IN_USE);
+ }
+ return;
+ }
+
+ /*
+ * All invalid group names land here.
+ */
+
+ fprintf (stderr,
+ _("%s: invalid group name '%s'\n"),
+ Prog, group_newname);
+ exit (E_BAD_ARG);
+}
+
+/*
+ * process_flags - perform command line argument setting
+ *
+ * process_flags() interprets the command line arguments and sets the
+ * values that the user will be created with accordingly. The values
+ * are checked for sanity.
+ */
+static void process_flags (int argc, char **argv)
+{
+ int c;
+ static struct option long_options[] = {
+ {"gid", required_argument, NULL, 'g'},
+ {"help", no_argument, NULL, 'h'},
+ {"new-name", required_argument, NULL, 'n'},
+ {"non-unique", no_argument, NULL, 'o'},
+ {"password", required_argument, NULL, 'p'},
+ {"root", required_argument, NULL, 'R'},
+ {"prefix", required_argument, NULL, 'P'},
+ {NULL, 0, NULL, '\0'}
+ };
+ while ((c = getopt_long (argc, argv, "g:hn:op:R:P:",
+ long_options, NULL)) != -1) {
+ switch (c) {
+ case 'g':
+ gflg = true;
+ if ( (get_gid (optarg, &group_newid) == 0)
+ || (group_newid == (gid_t)-1)) {
+ fprintf (stderr,
+ _("%s: invalid group ID '%s'\n"),
+ Prog, optarg);
+ exit (E_BAD_ARG);
+ }
+ break;
+ case 'h':
+ usage (E_SUCCESS);
+ break;
+ case 'n':
+ nflg = true;
+ group_newname = optarg;
+ break;
+ case 'o':
+ oflg = true;
+ break;
+ case 'p':
+ group_passwd = optarg;
+ pflg = true;
+ break;
+ case 'R': /* no-op, handled in process_root_flag () */
+ break;
+ case 'P': /* no-op, handled in process_prefix_flag () */
+ break;
+ default:
+ usage (E_USAGE);
+ }
+ }
+
+ if (oflg && !gflg) {
+ usage (E_USAGE);
+ }
+
+ if (optind != (argc - 1)) {
+ usage (E_USAGE);
+ }
+
+ group_name = argv[argc - 1];
+}
+
+/*
+ * close_files - close all of the files that were opened
+ *
+ * close_files() closes all of the files that were opened for this new
+ * group. This causes any modified entries to be written out.
+ */
+static void close_files (void)
+{
+ if (gr_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, gr_dbname ());
+ exit (E_GRP_UPDATE);
+ }
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_ACCT, Prog,
+ info_group.audit_msg,
+ group_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_SUCCESS);
+#endif
+ SYSLOG ((LOG_INFO,
+ "group changed in %s (%s)",
+ gr_dbname (), info_group.action));
+ del_cleanup (cleanup_report_mod_group);
+
+ cleanup_unlock_group (NULL);
+ del_cleanup (cleanup_unlock_group);
+
+#ifdef SHADOWGRP
+ if ( is_shadow_grp
+ && (pflg || nflg)) {
+ if (sgr_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, sgr_dbname ());
+ exit (E_GRP_UPDATE);
+ }
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_ACCT, Prog,
+ info_gshadow.audit_msg,
+ group_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_SUCCESS);
+#endif
+ SYSLOG ((LOG_INFO,
+ "group changed in %s (%s)",
+ sgr_dbname (), info_gshadow.action));
+ del_cleanup (cleanup_report_mod_gshadow);
+
+ cleanup_unlock_gshadow (NULL);
+ del_cleanup (cleanup_unlock_gshadow);
+ }
+#endif /* SHADOWGRP */
+
+ if (gflg) {
+ if (pw_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, pw_dbname ());
+ exit (E_GRP_UPDATE);
+ }
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_ACCT, Prog,
+ info_passwd.audit_msg,
+ group_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_SUCCESS);
+#endif
+ SYSLOG ((LOG_INFO,
+ "group changed in %s (%s)",
+ pw_dbname (), info_passwd.action));
+ del_cleanup (cleanup_report_mod_passwd);
+
+ cleanup_unlock_passwd (NULL);
+ del_cleanup (cleanup_unlock_passwd);
+ }
+
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_ACCT, Prog,
+ "modifying group",
+ group_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_SUCCESS);
+#endif
+}
+
+/*
+ * prepare_failure_reports - Prepare the cleanup_info structure for logging
+ * of success and failure to syslog or audit.
+ */
+static void prepare_failure_reports (void)
+{
+ info_group.name = group_name;
+#ifdef SHADOWGRP
+ info_gshadow.name = group_name;
+#endif
+ info_passwd.name = group_name;
+
+ info_group.audit_msg = xmalloc (512);
+#ifdef SHADOWGRP
+ info_gshadow.audit_msg = xmalloc (512);
+#endif
+ info_passwd.audit_msg = xmalloc (512);
+
+ (void) snprintf (info_group.audit_msg, 511,
+ "changing %s; ", gr_dbname ());
+#ifdef SHADOWGRP
+ (void) snprintf (info_gshadow.audit_msg, 511,
+ "changing %s; ", sgr_dbname ());
+#endif
+ (void) snprintf (info_passwd.audit_msg, 511,
+ "changing %s; ", pw_dbname ());
+
+ info_group.action = info_group.audit_msg
+ + strlen (info_group.audit_msg);
+#ifdef SHADOWGRP
+ info_gshadow.action = info_gshadow.audit_msg
+ + strlen (info_gshadow.audit_msg);
+#endif
+ info_passwd.action = info_passwd.audit_msg
+ + strlen (info_passwd.audit_msg);
+
+ (void) snprintf (info_group.action,
+ 511 - strlen (info_group.audit_msg),
+ "group %s/%lu",
+ group_name, (unsigned long int) group_id);
+#ifdef SHADOWGRP
+ (void) snprintf (info_gshadow.action,
+ 511 - strlen (info_group.audit_msg),
+ "group %s", group_name);
+#endif
+ (void) snprintf (info_passwd.action,
+ 511 - strlen (info_group.audit_msg),
+ "group %s/%lu",
+ group_name, (unsigned long int) group_id);
+
+ if (nflg) {
+ strncat (info_group.action, ", new name: ",
+ 511 - strlen (info_group.audit_msg));
+ strncat (info_group.action, group_newname,
+ 511 - strlen (info_group.audit_msg));
+
+#ifdef SHADOWGRP
+ strncat (info_gshadow.action, ", new name: ",
+ 511 - strlen (info_gshadow.audit_msg));
+ strncat (info_gshadow.action, group_newname,
+ 511 - strlen (info_gshadow.audit_msg));
+#endif
+
+ strncat (info_passwd.action, ", new name: ",
+ 511 - strlen (info_passwd.audit_msg));
+ strncat (info_passwd.action, group_newname,
+ 511 - strlen (info_passwd.audit_msg));
+ }
+ if (pflg) {
+ strncat (info_group.action, ", new password",
+ 511 - strlen (info_group.audit_msg));
+
+#ifdef SHADOWGRP
+ strncat (info_gshadow.action, ", new password",
+ 511 - strlen (info_gshadow.audit_msg));
+#endif
+ }
+ if (gflg) {
+ strncat (info_group.action, ", new gid: ",
+ 511 - strlen (info_group.audit_msg));
+ (void) snprintf (info_group.action+strlen (info_group.action),
+ 511 - strlen (info_group.audit_msg),
+ "%lu", (unsigned long int) group_newid);
+
+ strncat (info_passwd.action, ", new gid: ",
+ 511 - strlen (info_passwd.audit_msg));
+ (void) snprintf (info_passwd.action+strlen (info_passwd.action),
+ 511 - strlen (info_passwd.audit_msg),
+ "%lu", (unsigned long int) group_newid);
+ }
+ info_group.audit_msg[511] = '\0';
+#ifdef SHADOWGRP
+ info_gshadow.audit_msg[511] = '\0';
+#endif
+ info_passwd.audit_msg[511] = '\0';
+
+// FIXME: add a system cleanup
+ add_cleanup (cleanup_report_mod_group, &info_group);
+#ifdef SHADOWGRP
+ if ( is_shadow_grp
+ && (pflg || nflg)) {
+ add_cleanup (cleanup_report_mod_gshadow, &info_gshadow);
+ }
+#endif
+ if (gflg) {
+ add_cleanup (cleanup_report_mod_passwd, &info_passwd);
+ }
+
+}
+
+/*
+ * lock_files - lock the accounts databases
+ *
+ * lock_files() locks the group, gshadow, and passwd databases.
+ */
+static void lock_files (void)
+{
+ if (gr_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, gr_dbname ());
+ exit (E_GRP_UPDATE);
+ }
+ add_cleanup (cleanup_unlock_group, NULL);
+
+#ifdef SHADOWGRP
+ if ( is_shadow_grp
+ && (pflg || nflg)) {
+ if (sgr_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, sgr_dbname ());
+ exit (E_GRP_UPDATE);
+ }
+ add_cleanup (cleanup_unlock_gshadow, NULL);
+ }
+#endif
+
+ if (gflg) {
+ if (pw_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, pw_dbname ());
+ exit (E_GRP_UPDATE);
+ }
+ add_cleanup (cleanup_unlock_passwd, NULL);
+ }
+}
+
+
+/*
+ * open_files - open the accounts databases
+ *
+ * open_files() opens the group, gshadow, and passwd databases.
+ */
+static void open_files (void)
+{
+ if (gr_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr, _("%s: cannot open %s\n"), Prog, gr_dbname ());
+ SYSLOG ((LOG_WARN, "cannot open %s", gr_dbname ()));
+ exit (E_GRP_UPDATE);
+ }
+
+#ifdef SHADOWGRP
+ if ( is_shadow_grp
+ && (pflg || nflg)) {
+ if (sgr_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, sgr_dbname ());
+ SYSLOG ((LOG_WARN, "cannot open %s", sgr_dbname ()));
+ exit (E_GRP_UPDATE);
+ }
+ }
+#endif /* SHADOWGRP */
+
+ if (gflg) {
+ if (pw_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, pw_dbname ());
+ SYSLOG ((LOG_WARN, "cannot open %s", gr_dbname ()));
+ exit (E_GRP_UPDATE);
+ }
+ }
+}
+
+void update_primary_groups (gid_t ogid, gid_t ngid)
+{
+ struct passwd *pwd;
+
+ prefix_setpwent ();
+ while ((pwd = prefix_getpwent ()) != NULL) {
+ if (pwd->pw_gid == ogid) {
+ const struct passwd *lpwd;
+ struct passwd npwd;
+ lpwd = pw_locate (pwd->pw_name);
+ if (NULL == lpwd) {
+ fprintf (stderr,
+ _("%s: user '%s' does not exist in %s\n"),
+ Prog, pwd->pw_name, pw_dbname ());
+ exit (E_GRP_UPDATE);
+ } else {
+ npwd = *lpwd;
+ npwd.pw_gid = ngid;
+ if (pw_update (&npwd) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, pw_dbname (), npwd.pw_name);
+ exit (E_GRP_UPDATE);
+ }
+ }
+ }
+ }
+ prefix_endpwent ();
+}
+
+/*
+ * main - groupmod command
+ *
+ */
+int main (int argc, char **argv)
+{
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+ pam_handle_t *pamh = NULL;
+ int retval;
+#endif /* USE_PAM */
+#endif /* ACCT_TOOLS_SETUID */
+
+ /*
+ * Get my name so that I can use it to report errors.
+ */
+ Prog = Basename (argv[0]);
+
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ process_root_flag ("-R", argc, argv);
+ prefix = process_prefix_flag ("-P", argc, argv);
+
+ OPENLOG ("groupmod");
+#ifdef WITH_AUDIT
+ audit_help_open ();
+#endif
+
+ if (atexit (do_cleanups) != 0) {
+ fprintf (stderr,
+ _("%s: Cannot setup cleanup service.\n"),
+ Prog);
+ exit (E_CLEANUP_SERVICE);
+ }
+
+ process_flags (argc, argv);
+
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+ {
+ struct passwd *pampw;
+ pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
+ if (NULL == pampw) {
+ fprintf (stderr,
+ _("%s: Cannot determine your user name.\n"),
+ Prog);
+ exit (E_PAM_USERNAME);
+ }
+
+ retval = pam_start ("groupmod", pampw->pw_name, &conv, &pamh);
+ }
+
+ if (PAM_SUCCESS == retval) {
+ retval = pam_authenticate (pamh, 0);
+ }
+
+ if (PAM_SUCCESS == retval) {
+ retval = pam_acct_mgmt (pamh, 0);
+ }
+
+ if (PAM_SUCCESS != retval) {
+ fprintf (stderr, _("%s: PAM: %s\n"),
+ Prog, pam_strerror (pamh, retval));
+ SYSLOG((LOG_ERR, "%s", pam_strerror (pamh, retval)));
+ if (NULL != pamh) {
+ (void) pam_end (pamh, retval);
+ }
+ exit (E_PAM_ERROR);
+ }
+ (void) pam_end (pamh, retval);
+#endif /* USE_PAM */
+#endif /* ACCT_TOOLS_SETUID */
+
+#ifdef SHADOWGRP
+ is_shadow_grp = sgr_file_present ();
+#endif
+ {
+ struct group *grp;
+ /*
+ * Start with a quick check to see if the group exists.
+ */
+ grp = prefix_getgrnam (group_name); /* local, no need for xgetgrnam */
+ if (NULL == grp) {
+ fprintf (stderr,
+ _("%s: group '%s' does not exist\n"),
+ Prog, group_name);
+ exit (E_NOTFOUND);
+ } else {
+ group_id = grp->gr_gid;
+ }
+ }
+
+#ifdef USE_NIS
+ /*
+ * Now make sure it isn't an NIS group.
+ */
+ if (__isgrNIS ()) {
+ char *nis_domain;
+ char *nis_master;
+
+ fprintf (stderr,
+ _("%s: group %s is a NIS group\n"),
+ Prog, group_name);
+
+ if (!yp_get_default_domain (&nis_domain) &&
+ !yp_master (nis_domain, "group.byname", &nis_master)) {
+ fprintf (stderr,
+ _("%s: %s is the NIS master\n"),
+ Prog, nis_master);
+ }
+ exit (E_NOTFOUND);
+ }
+#endif
+
+ if (gflg) {
+ check_new_gid ();
+ }
+
+ if (nflg) {
+ check_new_name ();
+ }
+
+ lock_files ();
+
+ /*
+ * Now if the group is not changed, it's our fault.
+ * Make sure failures will be reported.
+ */
+ prepare_failure_reports ();
+
+ /*
+ * Do the hard stuff - open the files, create the group entries,
+ * then close and update the files.
+ */
+ open_files ();
+
+ grp_update ();
+
+ close_files ();
+
+ nscd_flush_cache ("group");
+ sssd_flush_cache (SSSD_DB_GROUP);
+
+ return E_SUCCESS;
+}
+
diff --git a/src/groups.c b/src/groups.c
new file mode 100644
index 0000000..fcd669b
--- /dev/null
+++ b/src/groups.c
@@ -0,0 +1,218 @@
+/*
+ * Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, 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 <grp.h>
+#include <pwd.h>
+#include <stdio.h>
+#include "defines.h"
+#include "prototypes.h"
+/*
+ * Global variables
+ */
+const char *Prog;
+
+/* local function prototypes */
+static void print_groups (const char *member);
+
+/*
+ * print_groups - print the groups which the named user is a member of
+ *
+ * print_groups() scans the groups file for the list of groups which
+ * the user is listed as being a member of.
+ */
+static void print_groups (const char *member)
+{
+ int groups = 0;
+ struct group *grp;
+ struct passwd *pwd;
+ bool flag = false;
+
+ pwd = getpwnam (member); /* local, no need for xgetpwnam */
+ if (NULL == pwd) {
+ (void) fprintf (stderr, _("%s: unknown user %s\n"),
+ Prog, member);
+ exit (EXIT_FAILURE);
+ }
+
+ setgrent ();
+ while ((grp = getgrent ()) != NULL) {
+ if (is_on_list (grp->gr_mem, member)) {
+ if (0 != groups) {
+ (void) putchar (' ');
+ }
+ groups++;
+
+ (void) printf ("%s", grp->gr_name);
+ if (grp->gr_gid == pwd->pw_gid) {
+ flag = true;
+ }
+ }
+ }
+ endgrent ();
+
+ /* The user may not be in the list of members of its primary group */
+ if (!flag) {
+ grp = getgrgid (pwd->pw_gid); /* local, no need for xgetgrgid */
+ if (NULL != grp) {
+ if (0 != groups) {
+ (void) putchar (' ');
+ }
+ groups++;
+
+ (void) printf ("%s", grp->gr_name);
+ }
+ }
+
+ if (0 != groups) {
+ (void) putchar ('\n');
+ }
+}
+
+/*
+ * groups - print out the groups a process is a member of
+ */
+int main (int argc, char **argv)
+{
+#ifdef HAVE_GETGROUPS
+ long sys_ngroups;
+ GETGROUPS_T *groups;
+#else
+ char *logname;
+ char *getlogin ();
+#endif
+
+#ifdef HAVE_GETGROUPS
+ sys_ngroups = sysconf (_SC_NGROUPS_MAX);
+ groups = (GETGROUPS_T *) malloc (sizeof (GETGROUPS_T) * sys_ngroups);
+#endif
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ /*
+ * Get the program name so that error messages can use it.
+ */
+ Prog = Basename (argv[0]);
+
+ if (argc == 1) {
+
+ /*
+ * Called with no arguments - give the group set for the
+ * current user.
+ */
+
+#ifdef HAVE_GETGROUPS
+ int i;
+ int pri_grp; /* TODO: should be GETGROUPS_T */
+ /*
+ * This system supports concurrent group sets, so I can ask
+ * the system to tell me which groups are currently set for
+ * this process.
+ */
+ int ngroups = getgroups (sys_ngroups, groups);
+ if (ngroups < 0) {
+ perror ("getgroups");
+ exit (EXIT_FAILURE);
+ }
+
+ /*
+ * The groupset includes the primary group as well.
+ */
+ pri_grp = getegid ();
+ for (i = 0; i < ngroups; i++) {
+ if (pri_grp == (int) groups[i]) {
+ break;
+ }
+ }
+
+ if (i != ngroups) {
+ pri_grp = -1;
+ }
+
+ /*
+ * Print out the name of every group in the current group
+ * set. Unknown groups are printed as their decimal group ID
+ * values.
+ */
+ if (-1 != pri_grp) {
+ struct group *gr;
+ /* local, no need for xgetgrgid */
+ gr = getgrgid (pri_grp);
+ if (NULL != gr) {
+ (void) printf ("%s", gr->gr_name);
+ } else {
+ (void) printf ("%d", pri_grp);
+ }
+ }
+
+ for (i = 0; i < ngroups; i++) {
+ struct group *gr;
+ if ((0 != i) || (-1 != pri_grp)) {
+ (void) putchar (' ');
+ }
+
+ /* local, no need for xgetgrgid */
+ gr = getgrgid (groups[i]);
+ if (NULL != gr) {
+ (void) printf ("%s", gr->gr_name);
+ } else {
+ (void) printf ("%ld", (long) groups[i]);
+ }
+ }
+ (void) putchar ('\n');
+#else
+ /*
+ * This system does not have the getgroups() system call, so
+ * I must check the groups file directly.
+ */
+ logname = getlogin ();
+ if (NULL != logname) {
+ print_groups (logname);
+ } else {
+ exit (EXIT_FAILURE);
+ }
+#endif
+ } else {
+
+ /*
+ * The invoker wanted to know about some other user. Use
+ * that name to look up the groups instead.
+ */
+ print_groups (argv[1]);
+ }
+ return EXIT_SUCCESS;
+}
+
diff --git a/src/grpck.c b/src/grpck.c
new file mode 100644
index 0000000..e6216ef
--- /dev/null
+++ b/src/grpck.c
@@ -0,0 +1,891 @@
+/*
+ * Copyright (c) 1992 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 , Michał Moskal
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 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 <fcntl.h>
+#include <grp.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <getopt.h>
+#include "chkname.h"
+#include "commonio.h"
+#include "defines.h"
+#include "groupio.h"
+#include "nscd.h"
+#include "sssd.h"
+#include "prototypes.h"
+
+#ifdef SHADOWGRP
+#include "sgroupio.h"
+#endif
+
+/*
+ * Exit codes
+ */
+/*@-exitarg@*/
+#define E_OKAY 0
+#define E_SUCCESS 0
+#define E_USAGE 1
+#define E_BAD_ENTRY 2
+#define E_CANT_OPEN 3
+#define E_CANT_LOCK 4
+#define E_CANT_UPDATE 5
+
+/*
+ * Global variables
+ */
+const char *Prog;
+
+static const char *grp_file = GROUP_FILE;
+static bool use_system_grp_file = true;
+
+#ifdef SHADOWGRP
+static const char *sgr_file = SGROUP_FILE;
+static bool use_system_sgr_file = true;
+static bool is_shadow = false;
+static bool sgr_locked = false;
+#endif
+static bool gr_locked = false;
+/* Options */
+static bool read_only = false;
+static bool sort_mode = false;
+
+/* local function prototypes */
+static void fail_exit (int status);
+static /*@noreturn@*/void usage (int status);
+static void delete_member (char **, const char *);
+static void process_flags (int argc, char **argv);
+static void open_files (void);
+static void close_files (bool changed);
+static int check_members (const char *groupname,
+ char **members,
+ const char *fmt_info,
+ const char *fmt_prompt,
+ const char *fmt_syslog,
+ int *errors);
+static void check_grp_file (int *errors, bool *changed);
+#ifdef SHADOWGRP
+static void compare_members_lists (const char *groupname,
+ char **members,
+ char **other_members,
+ const char *file,
+ const char *other_file);
+static void check_sgr_file (int *errors, bool *changed);
+#endif
+
+/*
+ * fail_exit - exit with an error code after unlocking files
+ */
+static void fail_exit (int status)
+{
+ if (gr_locked) {
+ if (gr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+ /* continue */
+ }
+ }
+
+#ifdef SHADOWGRP
+ if (sgr_locked) {
+ if (sgr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+ /* continue */
+ }
+ }
+#endif
+
+ closelog ();
+
+ exit (status);
+}
+
+/*
+ * usage - print syntax message and exit
+ */
+static /*@noreturn@*/void usage (int status)
+{
+ FILE *usageout = (E_SUCCESS != status) ? stderr : stdout;
+#ifdef SHADOWGRP
+ (void) fprintf (usageout,
+ _("Usage: %s [options] [group [gshadow]]\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+#else /* !SHADOWGRP */
+ (void) fprintf (usageout,
+ _("Usage: %s [options] [group]\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+#endif /* !SHADOWGRP */
+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
+ (void) fputs (_(" -r, --read-only display errors and warnings\n"
+ " but do not change files\n"), usageout);
+ (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
+ (void) fputs (_(" -s, --sort sort entries by UID\n"), usageout);
+ (void) fputs ("\n", usageout);
+ exit (status);
+}
+
+/*
+ * delete_member - delete an entry in a list of members
+ *
+ * It only deletes the first entry with the given name.
+ * The member is defined by its address, no string comparison are
+ * performed.
+ */
+static void delete_member (char **list, const char *member)
+{
+ int i;
+
+ for (i = 0; NULL != list[i]; i++) {
+ if (list[i] == member) {
+ break;
+ }
+ }
+
+ for (; NULL != list[i]; i++) {
+ list[i] = list[i + 1];
+ }
+}
+
+/*
+ * process_flags - parse the command line options
+ *
+ * It will not return if an error is encountered.
+ */
+static void process_flags (int argc, char **argv)
+{
+ int c;
+ static struct option long_options[] = {
+ {"help", no_argument, NULL, 'h'},
+ {"quiet", no_argument, NULL, 'q'},
+ {"read-only", no_argument, NULL, 'r'},
+ {"root", required_argument, NULL, 'R'},
+ {"sort", no_argument, NULL, 's'},
+ {NULL, 0, NULL, '\0'}
+ };
+
+ /*
+ * Parse the command line arguments
+ */
+ while ((c = getopt_long (argc, argv, "hqrR:s",
+ long_options, NULL)) != -1) {
+ switch (c) {
+ case 'h':
+ usage (E_SUCCESS);
+ /*@notreached@*/break;
+ case 'q':
+ /* quiet - ignored for now */
+ break;
+ case 'r':
+ read_only = true;
+ break;
+ case 'R': /* no-op, handled in process_root_flag () */
+ break;
+ case 's':
+ sort_mode = true;
+ break;
+ default:
+ usage (E_USAGE);
+ }
+ }
+
+ if (sort_mode && read_only) {
+ fprintf (stderr, _("%s: -s and -r are incompatible\n"), Prog);
+ exit (E_USAGE);
+ }
+
+ /*
+ * Make certain we have the right number of arguments
+ */
+#ifdef SHADOWGRP
+ if (argc > (optind + 2))
+#else
+ if (argc > (optind + 1))
+#endif
+ {
+ usage (E_USAGE);
+ }
+
+ /*
+ * If there are two left over filenames, use those as the group and
+ * group password filenames.
+ */
+ if (optind != argc) {
+ grp_file = argv[optind];
+ gr_setdbname (grp_file);
+ use_system_grp_file = false;
+ }
+#ifdef SHADOWGRP
+ if ((optind + 2) == argc) {
+ sgr_file = argv[optind + 1];
+ sgr_setdbname (sgr_file);
+ is_shadow = true;
+ use_system_sgr_file = false;
+ } else if (optind == argc) {
+ is_shadow = sgr_file_present ();
+ }
+#endif
+}
+
+/*
+ * open_files - open the shadow database
+ *
+ * In read-only mode, the databases are not locked and are opened
+ * only for reading.
+ */
+static void open_files (void)
+{
+ /*
+ * Lock the files if we aren't in "read-only" mode
+ */
+ if (!read_only) {
+ if (gr_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, grp_file);
+ fail_exit (E_CANT_LOCK);
+ }
+ gr_locked = true;
+#ifdef SHADOWGRP
+ if (is_shadow) {
+ if (sgr_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, sgr_file);
+ fail_exit (E_CANT_LOCK);
+ }
+ sgr_locked = true;
+ }
+#endif
+ }
+
+ /*
+ * Open the files. Use O_RDONLY if we are in read_only mode,
+ * O_RDWR otherwise.
+ */
+ if (gr_open (read_only ? O_RDONLY : O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr, _("%s: cannot open %s\n"), Prog,
+ grp_file);
+ if (use_system_grp_file) {
+ SYSLOG ((LOG_WARN, "cannot open %s", grp_file));
+ }
+ fail_exit (E_CANT_OPEN);
+ }
+#ifdef SHADOWGRP
+ if (is_shadow && (sgr_open (read_only ? O_RDONLY : O_CREAT | O_RDWR) == 0)) {
+ fprintf (stderr, _("%s: cannot open %s\n"), Prog,
+ sgr_file);
+ if (use_system_sgr_file) {
+ SYSLOG ((LOG_WARN, "cannot open %s", sgr_file));
+ }
+ fail_exit (E_CANT_OPEN);
+ }
+#endif
+}
+
+/*
+ * close_files - close and unlock the group/gshadow databases
+ *
+ * If changed is not set, the databases are not closed, and no
+ * changes are committed in the databases. The databases are
+ * unlocked anyway.
+ */
+static void close_files (bool changed)
+{
+ /*
+ * All done. If there were no change we can just abandon any
+ * changes to the files.
+ */
+ if (changed) {
+ if (gr_close () == 0) {
+ fprintf (stderr, _("%s: failure while writing changes to %s\n"),
+ Prog, grp_file);
+ fail_exit (E_CANT_UPDATE);
+ }
+#ifdef SHADOWGRP
+ if (is_shadow && (sgr_close () == 0)) {
+ fprintf (stderr, _("%s: failure while writing changes to %s\n"),
+ Prog, sgr_file);
+ fail_exit (E_CANT_UPDATE);
+ }
+#endif
+ }
+
+ /*
+ * Don't be anti-social - unlock the files when you're done.
+ */
+#ifdef SHADOWGRP
+ if (sgr_locked) {
+ if (sgr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+ /* continue */
+ }
+ sgr_locked = false;
+ }
+#endif
+ if (gr_locked) {
+ if (gr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+ /* continue */
+ }
+ gr_locked = false;
+ }
+}
+
+/*
+ * check_members - check that every members of a group exist
+ *
+ * If an error is detected, *errors is incremented.
+ *
+ * The user will be prompted for the removal of the non-existent
+ * user.
+ *
+ * If any changes are performed, the return value will be 1,
+ * otherwise check_members() returns 0.
+ *
+ * fmt_info, fmt_prompt, and fmt_syslog are used for logging.
+ * * fmt_info must contain two string flags (%s): for the group's
+ * name and the missing member.
+ * * fmt_prompt must contain one string flags (%s): the missing
+ * member.
+ * * fmt_syslog must contain two string flags (%s): for the
+ * group's name and the missing member.
+ */
+static int check_members (const char *groupname,
+ char **members,
+ const char *fmt_info,
+ const char *fmt_prompt,
+ const char *fmt_syslog,
+ int *errors)
+{
+ int i;
+ int members_changed = 0;
+
+ /*
+ * Make sure each member exists
+ */
+ for (i = 0; NULL != members[i]; i++) {
+ /* local, no need for xgetpwnam */
+ if (getpwnam (members[i]) != NULL) {
+ continue;
+ }
+ /*
+ * Can't find this user. Remove them
+ * from the list.
+ */
+ *errors += 1;
+ printf (fmt_info, groupname, members[i]);
+ printf (fmt_prompt, members[i]);
+
+ if (!yes_or_no (read_only)) {
+ continue;
+ }
+
+ SYSLOG ((LOG_INFO, fmt_syslog, members[i], groupname));
+ members_changed = 1;
+ delete_member (members, members[i]);
+
+ /* Rewind in case of removal */
+ i--;
+ }
+
+ return members_changed;
+}
+
+#ifdef SHADOWGRP
+/*
+ * compare_members_lists - make sure the list of members is contained in
+ * another list.
+ *
+ * compare_members_lists() checks that all the members of members are
+ * also in other_members.
+ * file and other_file are used for logging.
+ *
+ * TODO: No changes are performed on the lists.
+ */
+static void compare_members_lists (const char *groupname,
+ char **members,
+ char **other_members,
+ const char *file,
+ const char *other_file)
+{
+ char **pmem, **other_pmem;
+
+ for (pmem = members; NULL != *pmem; pmem++) {
+ for (other_pmem = other_members; NULL != *other_pmem; other_pmem++) {
+ if (strcmp (*pmem, *other_pmem) == 0) {
+ break;
+ }
+ }
+ if (*other_pmem == NULL) {
+ printf
+ ("'%s' is a member of the '%s' group in %s but not in %s\n",
+ *pmem, groupname, file, other_file);
+ }
+ }
+}
+#endif /* SHADOWGRP */
+
+/*
+ * check_grp_file - check the content of the group file
+ */
+static void check_grp_file (int *errors, bool *changed)
+{
+ struct commonio_entry *gre, *tgre;
+ struct group *grp;
+#ifdef SHADOWGRP
+ struct sgrp *sgr;
+#endif
+
+ /*
+ * Loop through the entire group file.
+ */
+ for (gre = __gr_get_head (); NULL != gre; gre = gre->next) {
+ /*
+ * Skip all NIS entries.
+ */
+
+ if ((gre->line[0] == '+') || (gre->line[0] == '-')) {
+ continue;
+ }
+
+ /*
+ * Start with the entries that are completely corrupt. They
+ * have no (struct group) entry because they couldn't be
+ * parsed properly.
+ */
+ if (NULL == gre->eptr) {
+
+ /*
+ * Tell the user this entire line is bogus and ask
+ * them to delete it.
+ */
+ (void) puts (_("invalid group file entry"));
+ printf (_("delete line '%s'? "), gre->line);
+ *errors += 1;
+
+ /*
+ * prompt the user to delete the entry or not
+ */
+ if (!yes_or_no (read_only)) {
+ continue;
+ }
+
+ /*
+ * All group file deletions wind up here. This code
+ * removes the current entry from the linked list.
+ * When done, it skips back to the top of the loop
+ * to try out the next list element.
+ */
+ delete_gr:
+ SYSLOG ((LOG_INFO, "delete group line '%s'",
+ gre->line));
+ *changed = true;
+
+ __gr_del_entry (gre);
+ continue;
+ }
+
+ /*
+ * Group structure is good, start using it.
+ */
+ grp = gre->eptr;
+
+ /*
+ * Make sure this entry has a unique name.
+ */
+ for (tgre = __gr_get_head (); NULL != tgre; tgre = tgre->next) {
+
+ const struct group *ent = tgre->eptr;
+
+ /*
+ * Don't check this entry
+ */
+ if (tgre == gre) {
+ continue;
+ }
+
+ /*
+ * Don't check invalid entries.
+ */
+ if (NULL == ent) {
+ continue;
+ }
+
+ if (strcmp (grp->gr_name, ent->gr_name) != 0) {
+ continue;
+ }
+
+ /*
+ * Tell the user this entry is a duplicate of
+ * another and ask them to delete it.
+ */
+ (void) puts (_("duplicate group entry"));
+ printf (_("delete line '%s'? "), gre->line);
+ *errors += 1;
+
+ /*
+ * prompt the user to delete the entry or not
+ */
+ if (yes_or_no (read_only)) {
+ goto delete_gr;
+ }
+ }
+
+ /*
+ * Check for invalid group names. --marekm
+ */
+ if (!is_valid_group_name (grp->gr_name)) {
+ *errors += 1;
+ printf (_("invalid group name '%s'\n"), grp->gr_name);
+ }
+
+ /*
+ * Check for invalid group ID.
+ */
+ if (grp->gr_gid == (gid_t)-1) {
+ printf (_("invalid group ID '%lu'\n"), (long unsigned int)grp->gr_gid);
+ *errors += 1;
+ }
+
+ /*
+ * Workaround for a NYS libc 5.3.12 bug on RedHat 4.2 -
+ * groups with no members are returned as groups with one
+ * member "", causing grpck to fail. --marekm
+ */
+ if ( (NULL != grp->gr_mem[0])
+ && (NULL == grp->gr_mem[1])
+ && ('\0' == grp->gr_mem[0][0])) {
+ grp->gr_mem[0] = NULL;
+ }
+
+ if (check_members (grp->gr_name, grp->gr_mem,
+ _("group %s: no user %s\n"),
+ _("delete member '%s'? "),
+ "delete member '%s' from group '%s'",
+ errors) == 1) {
+ *changed = true;
+ gre->changed = true;
+ __gr_set_changed ();
+ }
+
+#ifdef SHADOWGRP
+ /*
+ * Make sure this entry exists in the /etc/gshadow file.
+ */
+
+ if (is_shadow) {
+ sgr = (struct sgrp *) sgr_locate (grp->gr_name);
+ if (sgr == NULL) {
+ printf (_("no matching group file entry in %s\n"),
+ sgr_file);
+ printf (_("add group '%s' in %s? "),
+ grp->gr_name, sgr_file);
+ *errors += 1;
+ if (yes_or_no (read_only)) {
+ struct sgrp sg;
+ struct group gr;
+ static char *empty = NULL;
+
+ sg.sg_name = grp->gr_name;
+ sg.sg_passwd = grp->gr_passwd;
+ sg.sg_adm = &empty;
+ sg.sg_mem = grp->gr_mem;
+ SYSLOG ((LOG_INFO,
+ "add group '%s' to '%s'",
+ grp->gr_name, sgr_file));
+ *changed = true;
+
+ if (sgr_update (&sg) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, sgr_dbname (), sg.sg_name);
+ fail_exit (E_CANT_UPDATE);
+ }
+ /* remove password from /etc/group */
+ gr = *grp;
+ gr.gr_passwd = SHADOW_PASSWD_STRING; /* XXX warning: const */
+ if (gr_update (&gr) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, gr_dbname (), gr.gr_name);
+ fail_exit (E_CANT_UPDATE);
+ }
+ }
+ } else {
+ /**
+ * Verify that all the members defined in /etc/group are also
+ * present in /etc/gshadow.
+ */
+ compare_members_lists (grp->gr_name,
+ grp->gr_mem, sgr->sg_mem,
+ grp_file, sgr_file);
+
+ /* The group entry has a gshadow counterpart.
+ * Make sure no passwords are in group.
+ */
+ if (strcmp (grp->gr_passwd, SHADOW_PASSWD_STRING) != 0) {
+ printf (_("group %s has an entry in %s, but its password field in %s is not set to 'x'\n"),
+ grp->gr_name, sgr_file, grp_file);
+ *errors += 1;
+ }
+ }
+ }
+#endif
+
+ }
+}
+
+#ifdef SHADOWGRP
+/*
+ * check_sgr_file - check the content of the shadowed group file (gshadow)
+ */
+static void check_sgr_file (int *errors, bool *changed)
+{
+ struct group *grp;
+ struct commonio_entry *sge, *tsge;
+ struct sgrp *sgr;
+
+ /*
+ * Loop through the entire shadow group file.
+ */
+ for (sge = __sgr_get_head (); NULL != sge; sge = sge->next) {
+
+ /*
+ * Start with the entries that are completely corrupt. They
+ * have no (struct sgrp) entry because they couldn't be
+ * parsed properly.
+ */
+ if (NULL == sge->eptr) {
+
+ /*
+ * Tell the user this entire line is bogus and ask
+ * them to delete it.
+ */
+ (void) puts (_("invalid shadow group file entry"));
+ printf (_("delete line '%s'? "), sge->line);
+ *errors += 1;
+
+ /*
+ * prompt the user to delete the entry or not
+ */
+ if (!yes_or_no (read_only)) {
+ continue;
+ }
+
+ /*
+ * All shadow group file deletions wind up here.
+ * This code removes the current entry from the
+ * linked list. When done, it skips back to the top
+ * of the loop to try out the next list element.
+ */
+ delete_sg:
+ SYSLOG ((LOG_INFO, "delete shadow line '%s'",
+ sge->line));
+ *changed = true;
+
+ __sgr_del_entry (sge);
+ continue;
+ }
+
+ /*
+ * Shadow group structure is good, start using it.
+ */
+ sgr = sge->eptr;
+
+ /*
+ * Make sure this entry has a unique name.
+ */
+ for (tsge = __sgr_get_head (); NULL != tsge; tsge = tsge->next) {
+
+ const struct sgrp *ent = tsge->eptr;
+
+ /*
+ * Don't check this entry
+ */
+ if (tsge == sge) {
+ continue;
+ }
+
+ /*
+ * Don't check invalid entries.
+ */
+ if (NULL == ent) {
+ continue;
+ }
+
+ if (strcmp (sgr->sg_name, ent->sg_name) != 0) {
+ continue;
+ }
+
+ /*
+ * Tell the user this entry is a duplicate of
+ * another and ask them to delete it.
+ */
+ (void) puts (_("duplicate shadow group entry"));
+ printf (_("delete line '%s'? "), sge->line);
+ *errors += 1;
+
+ /*
+ * prompt the user to delete the entry or not
+ */
+ if (yes_or_no (read_only)) {
+ goto delete_sg;
+ }
+ }
+
+ /*
+ * Make sure this entry exists in the /etc/group file.
+ */
+ grp = (struct group *) gr_locate (sgr->sg_name);
+ if (grp == NULL) {
+ printf (_("no matching group file entry in %s\n"),
+ grp_file);
+ printf (_("delete line '%s'? "), sge->line);
+ *errors += 1;
+ if (yes_or_no (read_only)) {
+ goto delete_sg;
+ }
+ } else {
+ /**
+ * Verify that the all members defined in /etc/gshadow are also
+ * present in /etc/group.
+ */
+ compare_members_lists (sgr->sg_name,
+ sgr->sg_mem, grp->gr_mem,
+ sgr_file, grp_file);
+ }
+
+ /*
+ * Make sure each administrator exists
+ */
+ if (check_members (sgr->sg_name, sgr->sg_adm,
+ _("shadow group %s: no administrative user %s\n"),
+ _("delete administrative member '%s'? "),
+ "delete admin '%s' from shadow group '%s'",
+ errors) == 1) {
+ *changed = true;
+ sge->changed = true;
+ __sgr_set_changed ();
+ }
+
+ /*
+ * Make sure each member exists
+ */
+ if (check_members (sgr->sg_name, sgr->sg_mem,
+ _("shadow group %s: no user %s\n"),
+ _("delete member '%s'? "),
+ "delete member '%s' from shadow group '%s'",
+ errors) == 1) {
+ *changed = true;
+ sge->changed = true;
+ __sgr_set_changed ();
+ }
+ }
+}
+#endif /* SHADOWGRP */
+
+/*
+ * grpck - verify group file integrity
+ */
+int main (int argc, char **argv)
+{
+ int errors = 0;
+ bool changed = false;
+
+ /*
+ * Get my name so that I can use it to report errors.
+ */
+ Prog = Basename (argv[0]);
+
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ process_root_flag ("-R", argc, argv);
+
+ OPENLOG ("grpck");
+
+ /* Parse the command line arguments */
+ process_flags (argc, argv);
+
+ open_files ();
+
+ if (sort_mode) {
+ gr_sort ();
+#ifdef SHADOWGRP
+ if (is_shadow) {
+ sgr_sort ();
+ }
+ changed = true;
+#endif
+ } else {
+ check_grp_file (&errors, &changed);
+#ifdef SHADOWGRP
+ if (is_shadow) {
+ check_sgr_file (&errors, &changed);
+ }
+#endif
+ }
+
+ /* Commit the change in the database if needed */
+ close_files (changed);
+
+ if (!read_only) {
+ nscd_flush_cache ("group");
+ sssd_flush_cache (SSSD_DB_GROUP);
+ }
+
+ /*
+ * Tell the user what we did and exit.
+ */
+ if (0 != errors) {
+ if (changed) {
+ printf (_("%s: the files have been updated\n"), Prog);
+ } else {
+ printf (_("%s: no changes\n"), Prog);
+ }
+ }
+
+ return ((0 != errors) ? E_BAD_ENTRY : E_OKAY);
+}
+
diff --git a/src/grpconv.c b/src/grpconv.c
new file mode 100644
index 0000000..5e5eaac
--- /dev/null
+++ b/src/grpconv.c
@@ -0,0 +1,289 @@
+/*
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2002 - 2006, Tomasz Kłoczko
+ * 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.
+ */
+
+/*
+ * grpconv - create or update /etc/gshadow with information from
+ * /etc/group.
+ *
+ */
+
+#include <config.h>
+#ident "$Id$"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <grp.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+#include <getopt.h>
+#include "nscd.h"
+#include "sssd.h"
+#include "prototypes.h"
+/*@-exitarg@*/
+#include "exitcodes.h"
+#ifdef SHADOWGRP
+#include "groupio.h"
+#include "sgroupio.h"
+/*
+ * Global variables
+ */
+const char *Prog;
+
+static bool gr_locked = false;
+static bool sgr_locked = false;
+
+/* local function prototypes */
+static void fail_exit (int status);
+static void usage (int status);
+static void process_flags (int argc, char **argv);
+
+static void fail_exit (int status)
+{
+ if (gr_locked) {
+ if (gr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+ /* continue */
+ }
+ }
+
+ if (sgr_locked) {
+ if (sgr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+ /* continue */
+ }
+ }
+
+ exit (status);
+}
+
+static void usage (int status)
+{
+ FILE *usageout = (E_SUCCESS != status) ? stderr : stdout;
+ (void) fprintf (usageout,
+ _("Usage: %s [options]\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
+ (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
+ (void) fputs ("\n", usageout);
+ exit (status);
+}
+
+/*
+ * process_flags - parse the command line options
+ *
+ * It will not return if an error is encountered.
+ */
+static void process_flags (int argc, char **argv)
+{
+ /*
+ * Parse the command line options.
+ */
+ int c;
+ static struct option long_options[] = {
+ {"help", no_argument, NULL, 'h'},
+ {"root", required_argument, NULL, 'R'},
+ {NULL, 0, NULL, '\0'}
+ };
+
+ while ((c = getopt_long (argc, argv, "hR:",
+ long_options, NULL)) != -1) {
+ switch (c) {
+ case 'h':
+ usage (E_SUCCESS);
+ /*@notreached@*/break;
+ case 'R': /* no-op, handled in process_root_flag () */
+ break;
+ default:
+ usage (E_USAGE);
+ }
+ }
+
+ if (optind != argc) {
+ usage (E_USAGE);
+ }
+}
+
+int main (int argc, char **argv)
+{
+ const struct group *gr;
+ struct group grent;
+ const struct sgrp *sg;
+ struct sgrp sgent;
+
+ Prog = Basename (argv[0]);
+
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ process_root_flag ("-R", argc, argv);
+
+ OPENLOG ("grpconv");
+
+ process_flags (argc, argv);
+
+ if (gr_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, gr_dbname ());
+ fail_exit (5);
+ }
+ gr_locked = true;
+ if (gr_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr, _("%s: cannot open %s\n"), Prog, gr_dbname ());
+ fail_exit (1);
+ }
+
+ if (sgr_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, sgr_dbname ());
+ fail_exit (5);
+ }
+ sgr_locked = true;
+ if (sgr_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr, _("%s: cannot open %s\n"), Prog, sgr_dbname ());
+ fail_exit (1);
+ }
+
+ /*
+ * Remove /etc/gshadow entries for groups not in /etc/group.
+ */
+ (void) sgr_rewind ();
+ while ((sg = sgr_next ()) != NULL) {
+ if (gr_locate (sg->sg_name) != NULL) {
+ continue;
+ }
+
+ if (sgr_remove (sg->sg_name) == 0) {
+ /*
+ * This shouldn't happen (the entry exists) but...
+ */
+ fprintf (stderr,
+ _("%s: cannot remove entry '%s' from %s\n"),
+ Prog, sg->sg_name, sgr_dbname ());
+ fail_exit (3);
+ }
+ (void) sgr_rewind ();
+ }
+
+ /*
+ * Update shadow group passwords if non-shadow password is not "x".
+ * Add any missing shadow group entries.
+ */
+ (void) gr_rewind ();
+ while ((gr = gr_next ()) != NULL) {
+ sg = sgr_locate (gr->gr_name);
+ if (NULL != sg) {
+ /* update existing shadow group entry */
+ sgent = *sg;
+ if (strcmp (gr->gr_passwd, SHADOW_PASSWD_STRING) != 0)
+ sgent.sg_passwd = gr->gr_passwd;
+ } else {
+ static char *empty = 0;
+
+ /* add new shadow group entry */
+ memset (&sgent, 0, sizeof sgent);
+ sgent.sg_name = gr->gr_name;
+ sgent.sg_passwd = gr->gr_passwd;
+ sgent.sg_adm = &empty;
+ }
+ /*
+ * XXX - sg_mem is redundant, it is currently always a copy
+ * of gr_mem. Very few programs actually use sg_mem, and all
+ * of them are in the shadow suite. Maybe this field could
+ * be used for something else? Any suggestions?
+ */
+ sgent.sg_mem = gr->gr_mem;
+
+ if (sgr_update (&sgent) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, sgr_dbname (), sgent.sg_name);
+ fail_exit (3);
+ }
+ /* remove password from /etc/group */
+ grent = *gr;
+ grent.gr_passwd = SHADOW_PASSWD_STRING; /* XXX warning: const */
+ if (gr_update (&grent) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, gr_dbname (), grent.gr_name);
+ fail_exit (3);
+ }
+ }
+
+ if (sgr_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", sgr_dbname ()));
+ fail_exit (3);
+ }
+ if (gr_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", gr_dbname ()));
+ fail_exit (3);
+ }
+ if (sgr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+ /* continue */
+ }
+ if (gr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+ /* continue */
+ }
+
+ nscd_flush_cache ("group");
+ sssd_flush_cache (SSSD_DB_GROUP);
+
+ return 0;
+}
+#else /* !SHADOWGRP */
+int main (int unused(argc), char **argv)
+{
+ fprintf (stderr,
+ "%s: not configured for shadow group support.\n", argv[0]);
+ exit (1);
+}
+#endif /* !SHADOWGRP */
+
diff --git a/src/grpunconv.c b/src/grpunconv.c
new file mode 100644
index 0000000..e4105c2
--- /dev/null
+++ b/src/grpunconv.c
@@ -0,0 +1,252 @@
+/*
+ * Copyright (c) 1996 , Michael Meskes
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2002 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2008 - 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.
+ */
+
+/*
+ * grpunconv - update /etc/group with information from /etc/gshadow.
+ *
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include <time.h>
+#include <unistd.h>
+#include <grp.h>
+#include <getopt.h>
+#include "nscd.h"
+#include "sssd.h"
+#include "prototypes.h"
+/*@-exitarg@*/
+#include "exitcodes.h"
+#ifdef SHADOWGRP
+#include "groupio.h"
+#include "sgroupio.h"
+/*
+ * Global variables
+ */
+const char *Prog;
+
+static bool gr_locked = false;
+static bool sgr_locked = false;
+
+/* local function prototypes */
+static void fail_exit (int status);
+static void usage (int status);
+static void process_flags (int argc, char **argv);
+
+static void fail_exit (int status)
+{
+ if (gr_locked) {
+ if (gr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+ /* continue */
+ }
+ }
+
+ if (sgr_locked) {
+ if (sgr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+ /* continue */
+ }
+ }
+
+ exit (status);
+}
+
+static void usage (int status)
+{
+ FILE *usageout = (E_SUCCESS != status) ? stderr : stdout;
+ (void) fprintf (usageout,
+ _("Usage: %s [options]\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
+ (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
+ (void) fputs ("\n", usageout);
+ exit (status);
+}
+
+/*
+ * process_flags - parse the command line options
+ *
+ * It will not return if an error is encountered.
+ */
+static void process_flags (int argc, char **argv)
+{
+ /*
+ * Parse the command line options.
+ */
+ int c;
+ static struct option long_options[] = {
+ {"help", no_argument, NULL, 'h'},
+ {"root", required_argument, NULL, 'R'},
+ {NULL, 0, NULL, '\0'}
+ };
+
+ while ((c = getopt_long (argc, argv, "hR:",
+ long_options, NULL)) != -1) {
+ switch (c) {
+ case 'h':
+ usage (E_SUCCESS);
+ /*@notreached@*/break;
+ case 'R': /* no-op, handled in process_root_flag () */
+ break;
+ default:
+ usage (E_USAGE);
+ }
+ }
+
+ if (optind != argc) {
+ usage (E_USAGE);
+ }
+}
+
+int main (int argc, char **argv)
+{
+ const struct group *gr;
+ struct group grent;
+ const struct sgrp *sg;
+
+ Prog = Basename (argv[0]);
+
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ process_root_flag ("-R", argc, argv);
+
+ OPENLOG ("grpunconv");
+
+ process_flags (argc, argv);
+
+ if (sgr_file_present () == 0) {
+ exit (0); /* no /etc/gshadow, nothing to do */
+ }
+
+ if (gr_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, gr_dbname ());
+ fail_exit (5);
+ }
+ gr_locked = true;
+ if (gr_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"), Prog, gr_dbname ());
+ fail_exit (1);
+ }
+
+ if (sgr_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, sgr_dbname ());
+ fail_exit (5);
+ }
+ sgr_locked = true;
+ if (sgr_open (O_RDONLY) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"), Prog, sgr_dbname ());
+ fail_exit (1);
+ }
+
+ /*
+ * Update group passwords if non-shadow password is "x".
+ */
+ (void) gr_rewind ();
+ while ((gr = gr_next ()) != NULL) {
+ sg = sgr_locate (gr->gr_name);
+ if ( (NULL != sg)
+ && (strcmp (gr->gr_passwd, SHADOW_PASSWD_STRING) == 0)) {
+ /* add password to /etc/group */
+ grent = *gr;
+ grent.gr_passwd = sg->sg_passwd;
+ if (gr_update (&grent) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, gr_dbname (), grent.gr_name);
+ fail_exit (3);
+ }
+ }
+ }
+
+ (void) sgr_close (); /* was only open O_RDONLY */
+
+ if (gr_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", gr_dbname ()));
+ fail_exit (3);
+ }
+
+ if (unlink (SGROUP_FILE) != 0) {
+ fprintf (stderr,
+ _("%s: cannot delete %s\n"),
+ Prog, SGROUP_FILE);
+ SYSLOG ((LOG_ERR, "cannot delete %s", SGROUP_FILE));
+ fail_exit (3);
+ }
+
+ if (gr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+ /* continue */
+ }
+
+ if (sgr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+ /* continue */
+ }
+
+ nscd_flush_cache ("group");
+ sssd_flush_cache (SSSD_DB_GROUP);
+
+ return 0;
+}
+#else /* !SHADOWGRP */
+int main (int unused(argc), char **argv)
+{
+ fprintf (stderr,
+ "%s: not configured for shadow group support.\n", argv[0]);
+ exit (1);
+}
+#endif /* !SHADOWGRP */
+
diff --git a/src/id.c b/src/id.c
new file mode 100644
index 0000000..4462ae0
--- /dev/null
+++ b/src/id.c
@@ -0,0 +1,207 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, 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.
+ */
+
+/*
+ * id - print current process user identification information
+ *
+ * Print the current process identifiers. This includes the
+ * UID, GID, effective-UID and effective-GID. Optionally print
+ * the concurrent group set if the current system supports it.
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include <grp.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include "defines.h"
+/* local function prototypes */
+static void usage (void);
+
+static void usage (void)
+{
+#ifdef HAVE_GETGROUPS
+ (void) fputs (_("Usage: id [-a]\n"), stderr);
+#else
+ (void) fputs (_("Usage: id\n"), stderr);
+#endif
+ exit (EXIT_FAILURE);
+}
+
+ /*ARGSUSED*/ int main (int argc, char **argv)
+{
+ uid_t ruid, euid;
+ gid_t rgid, egid;
+ long sys_ngroups;
+
+/*
+ * This block of declarations is particularly strained because of several
+ * different ways of doing concurrent groups. Old BSD systems used int for
+ * gid's, but short for the type passed to getgroups(). Newer systems use
+ * gid_t for everything. Some systems have a small and fixed NGROUPS,
+ * usually about 16 or 32. Others use bigger values.
+ */
+#ifdef HAVE_GETGROUPS
+ GETGROUPS_T *groups;
+ int ngroups;
+ bool aflg = 0;
+#endif
+ struct passwd *pw;
+ struct group *gr;
+
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ /*
+ * Dynamically get the maximum number of groups from system, instead
+ * of using the symbolic constant NGROUPS_MAX. This ensures that the
+ * group limit is not hard coded into the binary, so it will still
+ * work if the system library is recompiled.
+ */
+ sys_ngroups = sysconf (_SC_NGROUPS_MAX);
+#ifdef HAVE_GETGROUPS
+ groups = (GETGROUPS_T *) malloc (sizeof (GETGROUPS_T) * sys_ngroups);
+ /*
+ * See if the -a flag has been given to print out the concurrent
+ * group set.
+ */
+
+ if (argc > 1) {
+ if ((argc > 2) || (strcmp (argv[1], "-a") != 0)) {
+ usage ();
+ } else {
+ aflg = true;
+ }
+ }
+#else
+ if (argc > 1) {
+ usage ();
+ }
+#endif
+
+ ruid = getuid ();
+ euid = geteuid ();
+ rgid = getgid ();
+ egid = getegid ();
+
+ /*
+ * Print out the real user ID and group ID. If the user or group
+ * does not exist, just give the numerical value.
+ */
+
+ pw = getpwuid (ruid); /* local, no need for xgetpwuid */
+ if (NULL != pw) {
+ (void) printf ("UID=%lu(%s)",
+ (unsigned long) ruid, pw->pw_name);
+ } else {
+ (void) printf ("UID=%lu", (unsigned long) ruid);
+ }
+
+ gr = getgrgid (rgid);; /* local, no need for xgetgrgid */
+ if (NULL != gr) {
+ (void) printf (" GID=%lu(%s)",
+ (unsigned long) rgid, gr->gr_name);
+ } else {
+ (void) printf (" GID=%lu", (unsigned long) rgid);
+ }
+
+ /*
+ * Print out the effective user ID and group ID if they are
+ * different from the real values.
+ */
+
+ if (ruid != euid) {
+ pw = getpwuid (euid); /* local, no need for xgetpwuid */
+ if (NULL != pw) {
+ (void) printf (" EUID=%lu(%s)",
+ (unsigned long) euid, pw->pw_name);
+ } else {
+ (void) printf (" EUID=%lu", (unsigned long) euid);
+ }
+ }
+ if (rgid != egid) {
+ gr = getgrgid (egid); /* local, no need for xgetgrgid */
+ if (NULL != gr) {
+ (void) printf (" EGID=%lu(%s)",
+ (unsigned long) egid, gr->gr_name);
+ } else {
+ (void) printf (" EGID=%lu", (unsigned long) egid);
+ }
+ }
+#ifdef HAVE_GETGROUPS
+ /*
+ * Print out the concurrent group set if the user has requested it.
+ * The group numbers will be printed followed by their names.
+ */
+ if (aflg && (ngroups = getgroups (sys_ngroups, groups)) != -1) {
+ int i;
+
+ /*
+ * Start off the group message. It will be of the format
+ *
+ * groups=###(aaa),###(aaa),###(aaa)
+ *
+ * where "###" is a numerical value and "aaa" is the
+ * corresponding name for each respective numerical value.
+ */
+ (void) puts (_(" groups="));
+ for (i = 0; i < ngroups; i++) {
+ if (0 != i)
+ (void) putchar (',');
+
+ /* local, no need for xgetgrgid */
+ gr = getgrgid (groups[i]);
+ if (NULL != gr) {
+ (void) printf ("%lu(%s)",
+ (unsigned long) groups[i],
+ gr->gr_name);
+ } else {
+ (void) printf ("%lu",
+ (unsigned long) groups[i]);
+ }
+ }
+ }
+ free (groups);
+#endif
+
+ /*
+ * Finish off the line.
+ */
+ (void) putchar ('\n');
+
+ return EXIT_SUCCESS;
+}
+
diff --git a/src/lastlog.c b/src/lastlog.c
new file mode 100644
index 0000000..c1caedb
--- /dev/null
+++ b/src/lastlog.c
@@ -0,0 +1,449 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 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 <getopt.h>
+#include <lastlog.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <time.h>
+#include <assert.h>
+#include "defines.h"
+#include "prototypes.h"
+#include "getdef.h"
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+/*
+ * Needed for MkLinux DR1/2/2.1 - J.
+ */
+#ifndef LASTLOG_FILE
+#define LASTLOG_FILE "/var/log/lastlog"
+#endif
+
+/*
+ * Global variables
+ */
+const char *Prog; /* Program name */
+static FILE *lastlogfile; /* lastlog file stream */
+static unsigned long umin; /* if uflg and has_umin, only display users with uid >= umin */
+static bool has_umin = false;
+static unsigned long umax; /* if uflg and has_umax, only display users with uid <= umax */
+static bool has_umax = false;
+static time_t seconds; /* that number of days in seconds */
+static time_t inverse_seconds; /* that number of days in seconds */
+static struct stat statbuf; /* fstat buffer for file size */
+
+
+static bool uflg = false; /* print only an user of range of users */
+static bool tflg = false; /* print is restricted to most recent days */
+static bool bflg = false; /* print excludes most recent days */
+static bool Cflg = false; /* clear record for user */
+static bool Sflg = false; /* set record for user */
+
+#define NOW (time ((time_t *) 0))
+
+static /*@noreturn@*/void usage (int status)
+{
+ FILE *usageout = (E_SUCCESS != status) ? stderr : stdout;
+ (void) fprintf (usageout,
+ _("Usage: %s [options]\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+ (void) fputs (_(" -b, --before DAYS print only lastlog records older than DAYS\n"), usageout);
+ (void) fputs (_(" -C, --clear clear lastlog record of an user (usable only with -u)\n"), usageout);
+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
+ (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
+ (void) fputs (_(" -S, --set set lastlog record to current time (usable only with -u)\n"), usageout);
+ (void) fputs (_(" -t, --time DAYS print only lastlog records more recent than DAYS\n"), usageout);
+ (void) fputs (_(" -u, --user LOGIN print lastlog record of the specified LOGIN\n"), usageout);
+ (void) fputs ("\n", usageout);
+ exit (status);
+}
+
+static void print_one (/*@null@*/const struct passwd *pw)
+{
+ static bool once = false;
+ char *cp;
+ struct tm *tm;
+ time_t ll_time;
+ off_t offset;
+ struct lastlog ll;
+
+#ifdef HAVE_STRFTIME
+ char ptime[80];
+#endif
+
+ if (NULL == pw) {
+ return;
+ }
+
+
+ offset = (off_t) pw->pw_uid * sizeof (ll);
+ if (offset + sizeof (ll) <= statbuf.st_size) {
+ /* fseeko errors are not really relevant for us. */
+ int err = fseeko (lastlogfile, offset, SEEK_SET);
+ assert (0 == err);
+ /* lastlog is a sparse file. Even if no entries were
+ * entered for this user, which should be able to get the
+ * empty entry in this case.
+ */
+ if (fread ((char *) &ll, sizeof (ll), 1, lastlogfile) != 1) {
+ fprintf (stderr,
+ _("%s: Failed to get the entry for UID %lu\n"),
+ Prog, (unsigned long int)pw->pw_uid);
+ exit (EXIT_FAILURE);
+ }
+ } else {
+ /* Outsize of the lastlog file.
+ * Behave as if there were a missing entry (same behavior
+ * as if we were reading an non existing entry in the
+ * sparse lastlog file).
+ */
+ memzero (&ll, sizeof (ll));
+ }
+
+ /* Filter out entries that do not match with the -t or -b options */
+ if (tflg && ((NOW - ll.ll_time) > seconds)) {
+ return;
+ }
+
+ if (bflg && ((NOW - ll.ll_time) < inverse_seconds)) {
+ return;
+ }
+
+ /* Print the header only once */
+ if (!once) {
+#ifdef HAVE_LL_HOST
+ puts (_("Username Port From Latest"));
+#else
+ puts (_("Username Port Latest"));
+#endif
+ once = true;
+ }
+
+ ll_time = ll.ll_time;
+ tm = localtime (&ll_time);
+#ifdef HAVE_STRFTIME
+ strftime (ptime, sizeof (ptime), "%a %b %e %H:%M:%S %z %Y", tm);
+ cp = ptime;
+#else
+ cp = asctime (tm);
+ cp[24] = '\0';
+#endif
+
+ if (ll.ll_time == (time_t) 0) {
+ cp = _("**Never logged in**\0");
+ }
+
+#ifdef HAVE_LL_HOST
+ printf ("%-16s %-8.8s %-16.16s %s\n",
+ pw->pw_name, ll.ll_line, ll.ll_host, cp);
+#else
+ printf ("%-16s\t%-8.8s %s\n",
+ pw->pw_name, ll.ll_line, cp);
+#endif
+}
+
+static void print (void)
+{
+ const struct passwd *pwent;
+ unsigned long lastlog_uid_max;
+
+ lastlog_uid_max = getdef_ulong ("LASTLOG_UID_MAX", 0xFFFFFFFFUL);
+ if ( (has_umin && umin > lastlog_uid_max)
+ || (has_umax && umax > lastlog_uid_max)) {
+ fprintf (stderr, _("%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+ "\tthe output might be incorrect.\n"), Prog, lastlog_uid_max);
+ }
+
+ if (uflg && has_umin && has_umax && (umin == umax)) {
+ print_one (getpwuid ((uid_t)umin));
+ } else {
+ setpwent ();
+ while ( (pwent = getpwent ()) != NULL ) {
+ if ( uflg
+ && ( (has_umin && (pwent->pw_uid < (uid_t)umin))
+ || (has_umax && (pwent->pw_uid > (uid_t)umax)))) {
+ continue;
+ } else if ( !uflg && pwent->pw_uid > (uid_t) lastlog_uid_max) {
+ continue;
+ }
+ print_one (pwent);
+ }
+ endpwent ();
+ }
+}
+
+static void update_one (/*@null@*/const struct passwd *pw)
+{
+ off_t offset;
+ struct lastlog ll;
+ int err;
+
+ if (NULL == pw) {
+ return;
+ }
+
+ offset = (off_t) pw->pw_uid * sizeof (ll);
+ /* fseeko errors are not really relevant for us. */
+ err = fseeko (lastlogfile, offset, SEEK_SET);
+ assert (0 == err);
+
+ memzero (&ll, sizeof (ll));
+
+ if (Sflg) {
+ ll.ll_time = NOW;
+#ifdef HAVE_LL_HOST
+ strcpy (ll.ll_host, "localhost");
+#endif
+ strcpy (ll.ll_line, "lastlog");
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ACCT_UNLOCK, Prog,
+ "clearing-lastlog",
+ pw->pw_name, (unsigned int) pw->pw_uid, SHADOW_AUDIT_SUCCESS);
+#endif
+ }
+#ifdef WITH_AUDIT
+ else {
+ audit_logger (AUDIT_ACCT_UNLOCK, Prog,
+ "refreshing-lastlog",
+ pw->pw_name, (unsigned int) pw->pw_uid, SHADOW_AUDIT_SUCCESS);
+ }
+#endif
+
+ if (fwrite (&ll, sizeof(ll), 1, lastlogfile) != 1) {
+ fprintf (stderr,
+ _("%s: Failed to update the entry for UID %lu\n"),
+ Prog, (unsigned long int)pw->pw_uid);
+ exit (EXIT_FAILURE);
+ }
+}
+
+static void update (void)
+{
+ const struct passwd *pwent;
+ unsigned long lastlog_uid_max;
+
+ if (!uflg) /* safety measure */
+ return;
+
+ lastlog_uid_max = getdef_ulong ("LASTLOG_UID_MAX", 0xFFFFFFFFUL);
+ if ( (has_umin && umin > lastlog_uid_max)
+ || (has_umax && umax > lastlog_uid_max)) {
+ fprintf (stderr, _("%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
+ "\tthey will not be updated.\n"), Prog, lastlog_uid_max);
+ return;
+ }
+
+ if (has_umin && has_umax && (umin == umax)) {
+ update_one (getpwuid ((uid_t)umin));
+ } else {
+ setpwent ();
+ while ( (pwent = getpwent ()) != NULL ) {
+ if ((has_umin && (pwent->pw_uid < (uid_t)umin))
+ || (has_umax && (pwent->pw_uid > (uid_t)umax))) {
+ continue;
+ }
+ update_one (pwent);
+ }
+ endpwent ();
+ }
+
+ if (fflush (lastlogfile) != 0 || fsync (fileno (lastlogfile)) != 0) {
+ fprintf (stderr,
+ _("%s: Failed to update the lastlog file\n"),
+ Prog);
+ exit (EXIT_FAILURE);
+ }
+}
+
+int main (int argc, char **argv)
+{
+ /*
+ * Get the program name. The program name is used as a prefix to
+ * most error messages.
+ */
+ Prog = Basename (argv[0]);
+
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ process_root_flag ("-R", argc, argv);
+
+#ifdef WITH_AUDIT
+ audit_help_open ();
+#endif
+
+ {
+ int c;
+ static struct option const longopts[] = {
+ {"before", required_argument, NULL, 'b'},
+ {"clear", no_argument, NULL, 'C'},
+ {"help", no_argument, NULL, 'h'},
+ {"root", required_argument, NULL, 'R'},
+ {"set", no_argument, NULL, 'S'},
+ {"time", required_argument, NULL, 't'},
+ {"user", required_argument, NULL, 'u'},
+ {NULL, 0, NULL, '\0'}
+ };
+
+ while ((c = getopt_long (argc, argv, "b:ChR:St:u:", longopts,
+ NULL)) != -1) {
+ switch (c) {
+ case 'b':
+ {
+ unsigned long inverse_days;
+ if (getulong (optarg, &inverse_days) == 0) {
+ fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"),
+ Prog, optarg);
+ exit (EXIT_FAILURE);
+ }
+ inverse_seconds = (time_t) inverse_days * DAY;
+ bflg = true;
+ break;
+ }
+ case 'C':
+ {
+ Cflg = true;
+ break;
+ }
+ case 'h':
+ usage (EXIT_SUCCESS);
+ /*@notreached@*/break;
+ case 'R': /* no-op, handled in process_root_flag () */
+ break;
+ case 'S':
+ {
+ Sflg = true;
+ break;
+ }
+ case 't':
+ {
+ unsigned long days;
+ if (getulong (optarg, &days) == 0) {
+ fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"),
+ Prog, optarg);
+ exit (EXIT_FAILURE);
+ }
+ seconds = (time_t) days * DAY;
+ tflg = true;
+ break;
+ }
+ case 'u':
+ {
+ const struct passwd *pwent;
+ /*
+ * The user can be:
+ * - a login name
+ * - numerical
+ * - a numerical login ID
+ * - a range (-x, x-, x-y)
+ */
+ uflg = true;
+ /* local, no need for xgetpwnam */
+ pwent = getpwnam (optarg);
+ if (NULL != pwent) {
+ umin = (unsigned long) pwent->pw_uid;
+ has_umin = true;
+ umax = umin;
+ has_umax = true;
+ } else {
+ if (getrange (optarg,
+ &umin, &has_umin,
+ &umax, &has_umax) == 0) {
+ fprintf (stderr,
+ _("%s: Unknown user or range: %s\n"),
+ Prog, optarg);
+ exit (EXIT_FAILURE);
+ }
+ }
+ break;
+ }
+ default:
+ usage (EXIT_FAILURE);
+ /*@notreached@*/break;
+ }
+ }
+ if (argc > optind) {
+ fprintf (stderr,
+ _("%s: unexpected argument: %s\n"),
+ Prog, argv[optind]);
+ usage (EXIT_FAILURE);
+ }
+ if (Cflg && Sflg) {
+ fprintf (stderr,
+ _("%s: Option -C cannot be used together with option -S\n"),
+ Prog);
+ usage (EXIT_FAILURE);
+ }
+ if ((Cflg || Sflg) && !uflg) {
+ fprintf (stderr,
+ _("%s: Options -C and -S require option -u to specify the user\n"),
+ Prog);
+ usage (EXIT_FAILURE);
+ }
+ }
+
+ lastlogfile = fopen (LASTLOG_FILE, (Cflg || Sflg)?"r+":"r");
+ if (NULL == lastlogfile) {
+ perror (LASTLOG_FILE);
+ exit (EXIT_FAILURE);
+ }
+
+ /* Get the lastlog size */
+ if (fstat (fileno (lastlogfile), &statbuf) != 0) {
+ fprintf (stderr,
+ _("%s: Cannot get the size of %s: %s\n"),
+ Prog, LASTLOG_FILE, strerror (errno));
+ exit (EXIT_FAILURE);
+ }
+
+ if (Cflg || Sflg)
+ update ();
+ else
+ print ();
+
+ (void) fclose (lastlogfile);
+
+ return EXIT_SUCCESS;
+}
+
diff --git a/src/login.c b/src/login.c
new file mode 100644
index 0000000..00508cd
--- /dev/null
+++ b/src/login.c
@@ -0,0 +1,1357 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2001, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2012, 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 <errno.h>
+#include <grp.h>
+#ifndef USE_PAM
+#include <lastlog.h>
+#endif /* !USE_PAM */
+#include <pwd.h>
+#include <signal.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <assert.h>
+#include "defines.h"
+#include "faillog.h"
+#include "failure.h"
+#include "getdef.h"
+#include "prototypes.h"
+#include "pwauth.h"
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+#ifdef USE_PAM
+#include "pam_defs.h"
+
+static pam_handle_t *pamh = NULL;
+
+#define PAM_FAIL_CHECK if (retcode != PAM_SUCCESS) { \
+ fprintf(stderr,"\n%s\n",pam_strerror(pamh, retcode)); \
+ SYSLOG((LOG_ERR,"%s",pam_strerror(pamh, retcode))); \
+ (void) pam_end(pamh, retcode); \
+ exit(1); \
+ }
+#define PAM_END { retcode = pam_close_session(pamh,0); \
+ (void) pam_end(pamh,retcode); }
+
+#endif /* USE_PAM */
+
+#ifndef USE_PAM
+/*
+ * Needed for MkLinux DR1/2/2.1 - J.
+ */
+#ifndef LASTLOG_FILE
+#define LASTLOG_FILE "/var/log/lastlog"
+#endif
+#endif /* !USE_PAM */
+
+/*
+ * Global variables
+ */
+const char *Prog;
+
+static const char *hostname = "";
+static /*@null@*/ /*@only@*/char *username = NULL;
+static int reason = PW_LOGIN;
+
+#ifndef USE_PAM
+static struct lastlog ll;
+#endif /* !USE_PAM */
+static bool pflg = false;
+static bool fflg = false;
+
+#ifdef RLOGIN
+static bool rflg = false;
+#else /* RLOGIN */
+#define rflg false
+#endif /* !RLOGIN */
+static bool hflg = false;
+static bool preauth_flag = false;
+
+static bool amroot;
+static char tmsg[256];
+
+/*
+ * External identifiers.
+ */
+
+extern char **newenvp;
+extern size_t newenvc;
+extern char **environ;
+
+#ifndef ALARM
+#define ALARM 60
+#endif
+
+#ifndef RETRIES
+#define RETRIES 3
+#endif
+
+/* local function prototypes */
+static void usage (void);
+static void setup_tty (void);
+static void process_flags (int argc, char *const *argv);
+static /*@observer@*/const char *get_failent_user (/*@returned@*/const char *user);
+static void update_utmp (const char *user,
+ const char *tty,
+ const char *host,
+#ifdef USE_UTMPX
+ /*@null@*/const struct utmpx *utent
+#else
+ /*@null@*/const struct utmp *utent
+#endif
+ );
+
+#ifndef USE_PAM
+static struct faillog faillog;
+
+static void bad_time_notify (void);
+static void check_nologin (bool login_to_root);
+#else
+static void get_pam_user (char **ptr_pam_user);
+#endif
+
+static void init_env (void);
+static RETSIGTYPE alarm_handler (int);
+
+/*
+ * usage - print login command usage and exit
+ *
+ * login [ name ]
+ * login -r hostname (for rlogind)
+ * login -h hostname (for telnetd, etc.)
+ * login -f name (for pre-authenticated login: datakit, xterm, etc.)
+ */
+static void usage (void)
+{
+ fprintf (stderr, _("Usage: %s [-p] [name]\n"), Prog);
+ if (!amroot) {
+ exit (1);
+ }
+ fprintf (stderr, _(" %s [-p] [-h host] [-f name]\n"), Prog);
+#ifdef RLOGIN
+ fprintf (stderr, _(" %s [-p] -r host\n"), Prog);
+#endif /* RLOGIN */
+ exit (1);
+}
+
+static void setup_tty (void)
+{
+ TERMIO termio;
+
+ if (GTTY (0, &termio) == 0) { /* get terminal characteristics */
+ int erasechar;
+ int killchar;
+
+ /*
+ * Add your favorite terminal modes here ...
+ */
+ termio.c_lflag |= ISIG | ICANON | ECHO | ECHOE;
+ termio.c_iflag |= ICRNL;
+
+#if defined(ECHOKE) && defined(ECHOCTL)
+ termio.c_lflag |= ECHOKE | ECHOCTL;
+#endif
+#if defined(ECHOPRT) && defined(NOFLSH) && defined(TOSTOP)
+ termio.c_lflag &= ~(ECHOPRT | NOFLSH | TOSTOP);
+#endif
+#ifdef ONLCR
+ termio.c_oflag |= ONLCR;
+#endif
+
+ /* leave these values unchanged if not specified in login.defs */
+ erasechar = getdef_num ("ERASECHAR", (int) termio.c_cc[VERASE]);
+ killchar = getdef_num ("KILLCHAR", (int) termio.c_cc[VKILL]);
+ termio.c_cc[VERASE] = (cc_t) erasechar;
+ termio.c_cc[VKILL] = (cc_t) killchar;
+ /* Make sure the values were valid.
+ * getdef_num cannot validate this.
+ */
+ if (erasechar != (int) termio.c_cc[VERASE]) {
+ fprintf (stderr,
+ _("configuration error - cannot parse %s value: '%d'"),
+ "ERASECHAR", erasechar);
+ exit (1);
+ }
+ if (killchar != (int) termio.c_cc[VKILL]) {
+ fprintf (stderr,
+ _("configuration error - cannot parse %s value: '%d'"),
+ "KILLCHAR", killchar);
+ exit (1);
+ }
+
+ /*
+ * ttymon invocation prefers this, but these settings
+ * won't come into effect after the first username login
+ */
+ (void) STTY (0, &termio);
+ }
+}
+
+
+#ifndef USE_PAM
+/*
+ * Tell the user that this is not the right time to login at this tty
+ */
+static void bad_time_notify (void)
+{
+ (void) puts (_("Invalid login time"));
+ (void) fflush (stdout);
+}
+
+static void check_nologin (bool login_to_root)
+{
+ const char *fname;
+
+ /*
+ * Check to see if system is turned off for non-root users.
+ * This would be useful to prevent users from logging in
+ * during system maintenance. We make sure the message comes
+ * out for root so she knows to remove the file if she's
+ * forgotten about it ...
+ */
+ fname = getdef_str ("NOLOGINS_FILE");
+ if ((NULL != fname) && (access (fname, F_OK) == 0)) {
+ FILE *nlfp;
+
+ /*
+ * Cat the file if it can be opened, otherwise just
+ * print a default message
+ */
+ nlfp = fopen (fname, "r");
+ if (NULL != nlfp) {
+ int c;
+ while ((c = getc (nlfp)) != EOF) {
+ if (c == '\n') {
+ (void) putchar ('\r');
+ }
+
+ (void) putchar (c);
+ }
+ (void) fflush (stdout);
+ (void) fclose (nlfp);
+ } else {
+ (void) puts (_("\nSystem closed for routine maintenance"));
+ }
+ /*
+ * Non-root users must exit. Root gets the message, but
+ * gets to login.
+ */
+
+ if (!login_to_root) {
+ closelog ();
+ exit (0);
+ }
+ (void) puts (_("\n[Disconnect bypassed -- root login allowed.]"));
+ }
+}
+#endif /* !USE_PAM */
+
+static void process_flags (int argc, char *const *argv)
+{
+ int arg;
+ int flag;
+
+ /*
+ * Check the flags for proper form. Every argument starting with
+ * "-" must be exactly two characters long. This closes all the
+ * clever rlogin, telnet, and getty holes.
+ */
+ for (arg = 1; arg < argc; arg++) {
+ if (argv[arg][0] == '-' && strlen (argv[arg]) > 2) {
+ usage ();
+ }
+ if (strcmp(argv[arg], "--") == 0) {
+ break; /* stop checking on a "--" */
+ }
+ }
+
+ /*
+ * Process options.
+ */
+ while ((flag = getopt (argc, argv, "d:fh:pr:")) != EOF) {
+ switch (flag) {
+ case 'd':
+ /* "-d device" ignored for compatibility */
+ break;
+ case 'f':
+ fflg = true;
+ break;
+ case 'h':
+ hflg = true;
+ hostname = optarg;
+ reason = PW_TELNET;
+ break;
+#ifdef RLOGIN
+ case 'r':
+ rflg = true;
+ hostname = optarg;
+ reason = PW_RLOGIN;
+ break;
+#endif /* RLOGIN */
+ case 'p':
+ pflg = true;
+ break;
+ default:
+ usage ();
+ }
+ }
+
+#ifdef RLOGIN
+ /*
+ * Neither -h nor -f should be combined with -r.
+ */
+
+ if (rflg && (hflg || fflg)) {
+ usage ();
+ }
+#endif /* RLOGIN */
+
+ /*
+ * Allow authentication bypass only if real UID is zero.
+ */
+
+ if ((rflg || fflg || hflg) && !amroot) {
+ fprintf (stderr, _("%s: Permission denied.\n"), Prog);
+ exit (1);
+ }
+
+ /*
+ * Get the user name.
+ */
+ if (optind < argc) {
+ assert (NULL == username);
+ username = xstrdup (argv[optind]);
+ strzero (argv[optind]);
+ ++optind;
+ }
+
+#ifdef RLOGIN
+ if (rflg && (NULL != username)) {
+ usage ();
+ }
+#endif /* RLOGIN */
+ if (fflg && (NULL == username)) {
+ usage ();
+ }
+
+}
+
+
+static void init_env (void)
+{
+#ifndef USE_PAM
+ const char *cp;
+#endif
+ char *tmp;
+
+ tmp = getenv ("LANG");
+ if (NULL != tmp) {
+ addenv ("LANG", tmp);
+ }
+
+ /*
+ * Add the timezone environmental variable so that time functions
+ * work correctly.
+ */
+ tmp = getenv ("TZ");
+ if (NULL != tmp) {
+ addenv ("TZ", tmp);
+ }
+#ifndef USE_PAM
+ else {
+ cp = getdef_str ("ENV_TZ");
+ if (NULL != cp) {
+ addenv (('/' == *cp) ? tz (cp) : cp, NULL);
+ }
+ }
+#endif /* !USE_PAM */
+ /*
+ * Add the clock frequency so that profiling commands work
+ * correctly.
+ */
+ tmp = getenv ("HZ");
+ if (NULL != tmp) {
+ addenv ("HZ", tmp);
+ }
+#ifndef USE_PAM
+ else {
+ cp = getdef_str ("ENV_HZ");
+ if (NULL != cp) {
+ addenv (cp, NULL);
+ }
+ }
+#endif /* !USE_PAM */
+}
+
+
+static RETSIGTYPE alarm_handler (unused int sig)
+{
+ write (STDERR_FILENO, tmsg, strlen (tmsg));
+ _exit (0);
+}
+
+#ifdef USE_PAM
+/*
+ * get_pam_user - Get the username according to PAM
+ *
+ * ptr_pam_user shall point to a malloc'ed string (or NULL).
+ */
+static void get_pam_user (char **ptr_pam_user)
+{
+ int retcode;
+ void *ptr_user;
+
+ assert (NULL != ptr_pam_user);
+
+ retcode = pam_get_item (pamh, PAM_USER, (const void **)&ptr_user);
+ PAM_FAIL_CHECK;
+
+ if (NULL != *ptr_pam_user) {
+ free (*ptr_pam_user);
+ }
+ if (NULL != ptr_user) {
+ *ptr_pam_user = xstrdup ((const char *)ptr_user);
+ } else {
+ *ptr_pam_user = NULL;
+ }
+}
+#endif
+
+/*
+ * get_failent_user - Return a string that can be used to log failure
+ * from an user.
+ *
+ * This will be either the user argument, or "UNKNOWN".
+ *
+ * It is quite common to mistyped the password for username, and passwords
+ * should not be logged.
+ */
+static /*@observer@*/const char *get_failent_user (/*@returned@*/const char *user)
+{
+ const char *failent_user = "UNKNOWN";
+ bool log_unkfail_enab = getdef_bool("LOG_UNKFAIL_ENAB");
+
+ if ((NULL != user) && ('\0' != user[0])) {
+ if ( log_unkfail_enab
+ || (getpwnam (user) != NULL)) {
+ failent_user = user;
+ }
+ }
+
+ return failent_user;
+}
+
+/*
+ * update_utmp - Update or create an utmp entry in utmp, wtmp, utmpw, and
+ * wtmpx
+ *
+ * utent should be the utmp entry returned by get_current_utmp (or
+ * NULL).
+ */
+static void update_utmp (const char *user,
+ const char *tty,
+ const char *host,
+#ifdef USE_UTMPX
+ /*@null@*/const struct utmpx *utent
+#else
+ /*@null@*/const struct utmp *utent
+#endif
+ )
+{
+#ifdef USE_UTMPX
+ struct utmpx *utx = prepare_utmpx (user, tty, host, utent);
+#else
+ struct utmp *ut = prepare_utmp (user, tty, host, utent);
+#endif /* USE_UTMPX */
+
+#ifndef USE_UTMPX
+ (void) setutmp (ut); /* make entry in the utmp & wtmp files */
+ free (ut);
+#else
+ (void) setutmpx (utx); /* make entry in the utmpx & wtmpx files */
+ free (utx);
+#endif /* USE_UTMPX */
+}
+
+/*
+ * login - create a new login session for a user
+ *
+ * login is typically called by getty as the second step of a
+ * new user session. getty is responsible for setting the line
+ * characteristics to a reasonable set of values and getting
+ * the name of the user to be logged in. login may also be
+ * called to create a new user session on a pty for a variety
+ * of reasons, such as X servers or network logins.
+ *
+ * the flags which login supports are
+ *
+ * -p - preserve the environment
+ * -r - perform autologin protocol for rlogin
+ * -f - do not perform authentication, user is preauthenticated
+ * -h - the name of the remote host
+ */
+int main (int argc, char **argv)
+{
+ const char *tmptty;
+ char tty[BUFSIZ];
+
+#ifdef RLOGIN
+ char term[128] = "";
+#endif /* RLOGIN */
+#if defined(HAVE_STRFTIME) && !defined(USE_PAM)
+ char ptime[80];
+#endif
+ unsigned int delay;
+ unsigned int retries;
+ bool subroot = false;
+#ifndef USE_PAM
+ bool is_console;
+#endif
+ int err;
+ unsigned int timeout;
+ const char *cp;
+ const char *tmp;
+ char fromhost[512];
+ struct passwd *pwd = NULL;
+ char **envp = environ;
+ const char *failent_user;
+#ifdef USE_UTMPX
+ /*@null@*/struct utmpx *utent;
+#else
+ /*@null@*/struct utmp *utent;
+#endif
+
+#ifdef USE_PAM
+ int retcode;
+ pid_t child;
+ char *pam_user = NULL;
+#else
+ struct spwd *spwd = NULL;
+#endif
+ /*
+ * Some quick initialization.
+ */
+
+ sanitize_env ();
+
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ initenv ();
+
+ amroot = (getuid () == 0);
+ Prog = Basename (argv[0]);
+
+ if (geteuid() != 0) {
+ fprintf (stderr, _("%s: Cannot possibly work without effective root\n"), Prog);
+ exit (1);
+ }
+
+ process_flags (argc, argv);
+
+ if ((isatty (0) == 0) || (isatty (1) == 0) || (isatty (2) == 0)) {
+ exit (1); /* must be a terminal */
+ }
+
+ utent = get_current_utmp ();
+ /*
+ * Be picky if run by normal users (possible if installed setuid
+ * root), but not if run by root. This way it still allows logins
+ * even if your getty is broken, or if something corrupts utmp,
+ * but users must "exec login" which will use the existing utmp
+ * entry (will not overwrite remote hostname). --marekm
+ */
+ if (!amroot && (NULL == utent)) {
+ (void) puts (_("No utmp entry. You must exec \"login\" from the lowest level \"sh\""));
+ exit (1);
+ }
+ /* NOTE: utent might be NULL afterwards */
+
+ tmptty = ttyname (0);
+ if (NULL == tmptty) {
+ tmptty = "UNKNOWN";
+ }
+ STRFCPY (tty, tmptty);
+
+#ifndef USE_PAM
+ is_console = console (tty);
+#endif
+
+ if (rflg || hflg) {
+ /*
+ * Add remote hostname to the environment. I think
+ * (not sure) I saw it once on Irix. --marekm
+ */
+ addenv ("REMOTEHOST", hostname);
+ }
+ if (fflg) {
+ preauth_flag = true;
+ }
+ if (hflg) {
+ reason = PW_RLOGIN;
+ }
+#ifdef RLOGIN
+ if (rflg) {
+ assert (NULL == username);
+ username = xmalloc (USER_NAME_MAX_LENGTH + 1);
+ username[USER_NAME_MAX_LENGTH] = '\0';
+ if (do_rlogin (hostname, username, USER_NAME_MAX_LENGTH, term, sizeof term)) {
+ preauth_flag = true;
+ } else {
+ free (username);
+ username = NULL;
+ }
+ }
+#endif /* RLOGIN */
+
+ OPENLOG ("login");
+
+ setup_tty ();
+
+#ifndef USE_PAM
+ (void) umask (getdef_num ("UMASK", GETDEF_DEFAULT_UMASK));
+
+ {
+ /*
+ * Use the ULIMIT in the login.defs file, and if
+ * there isn't one, use the default value. The
+ * user may have one for themselves, but otherwise,
+ * just take what you get.
+ */
+ long limit = getdef_long ("ULIMIT", -1L);
+
+ if (limit != -1) {
+ set_filesize_limit (limit);
+ }
+ }
+
+#endif
+ /*
+ * The entire environment will be preserved if the -p flag
+ * is used.
+ */
+ if (pflg) {
+ while (NULL != *envp) { /* add inherited environment, */
+ addenv (*envp, NULL); /* some variables change later */
+ envp++;
+ }
+ }
+
+#ifdef RLOGIN
+ if (term[0] != '\0') {
+ addenv ("TERM", term);
+ } else
+#endif /* RLOGIN */
+ {
+ /* preserve TERM from getty */
+ if (!pflg) {
+ tmp = getenv ("TERM");
+ if (NULL != tmp) {
+ addenv ("TERM", tmp);
+ }
+ }
+ }
+
+ init_env ();
+
+ if (optind < argc) { /* now set command line variables */
+ set_env (argc - optind, &argv[optind]);
+ }
+
+ if (rflg || hflg) {
+ cp = hostname;
+#if defined(HAVE_STRUCT_UTMP_UT_HOST) || defined(USE_UTMPX)
+ } else if ((NULL != utent) && ('\0' != utent->ut_host[0])) {
+ cp = utent->ut_host;
+#endif /* HAVE_STRUCT_UTMP_UT_HOST */
+ } else {
+ cp = "";
+ }
+
+ if ('\0' != *cp) {
+ snprintf (fromhost, sizeof fromhost,
+ " on '%.100s' from '%.200s'", tty, cp);
+ } else {
+ snprintf (fromhost, sizeof fromhost,
+ " on '%.100s'", tty);
+ }
+
+ top:
+ /* only allow ALARM sec. for login */
+ timeout = getdef_unum ("LOGIN_TIMEOUT", ALARM);
+ snprintf (tmsg, sizeof tmsg,
+ _("\nLogin timed out after %u seconds.\n"), timeout);
+ (void) signal (SIGALRM, alarm_handler);
+ if (timeout > 0) {
+ (void) alarm (timeout);
+ }
+
+ environ = newenvp; /* make new environment active */
+ delay = getdef_unum ("FAIL_DELAY", 1);
+ retries = getdef_unum ("LOGIN_RETRIES", RETRIES);
+
+#ifdef USE_PAM
+ retcode = pam_start ("login", username, &conv, &pamh);
+ if (retcode != PAM_SUCCESS) {
+ fprintf (stderr,
+ _("login: PAM Failure, aborting: %s\n"),
+ pam_strerror (pamh, retcode));
+ SYSLOG ((LOG_ERR, "Couldn't initialize PAM: %s",
+ pam_strerror (pamh, retcode)));
+ exit (99);
+ }
+
+ /*
+ * hostname & tty are either set to NULL or their correct values,
+ * depending on how much we know. We also set PAM's fail delay to
+ * ours.
+ *
+ * PAM_RHOST and PAM_TTY are used for authentication, only use
+ * information coming from login or from the caller (e.g. no utmp)
+ */
+ retcode = pam_set_item (pamh, PAM_RHOST, hostname);
+ PAM_FAIL_CHECK;
+ retcode = pam_set_item (pamh, PAM_TTY, tty);
+ PAM_FAIL_CHECK;
+#ifdef HAS_PAM_FAIL_DELAY
+ retcode = pam_fail_delay (pamh, 1000000 * delay);
+ PAM_FAIL_CHECK;
+#endif
+ /* if fflg, then the user has already been authenticated */
+ if (!fflg) {
+ unsigned int failcount = 0;
+ char hostn[256];
+ char loginprompt[256]; /* That's one hell of a prompt :) */
+
+ /* Make the login prompt look like we want it */
+ if (gethostname (hostn, sizeof (hostn)) == 0) {
+ snprintf (loginprompt,
+ sizeof (loginprompt),
+ _("%s login: "), hostn);
+ } else {
+ strncpy (loginprompt, _("login: "),
+ sizeof (loginprompt));
+ }
+
+ retcode = pam_set_item (pamh, PAM_USER_PROMPT, loginprompt);
+ PAM_FAIL_CHECK;
+
+ /* if we didn't get a user on the command line,
+ set it to NULL */
+ get_pam_user (&pam_user);
+ if ((NULL != pam_user) && ('\0' == pam_user[0])) {
+ retcode = pam_set_item (pamh, PAM_USER, NULL);
+ PAM_FAIL_CHECK;
+ }
+
+ /*
+ * There may be better ways to deal with some of
+ * these conditions, but at least this way I don't
+ * think we'll be giving away information. Perhaps
+ * someday we can trust that all PAM modules will
+ * pay attention to failure count and get rid of
+ * MAX_LOGIN_TRIES?
+ */
+ failcount = 0;
+ while (true) {
+ bool failed = false;
+
+ failcount++;
+#ifdef HAS_PAM_FAIL_DELAY
+ if (delay > 0) {
+ retcode = pam_fail_delay(pamh, 1000000*delay);
+ PAM_FAIL_CHECK;
+ }
+#endif
+
+ retcode = pam_authenticate (pamh, 0);
+
+ get_pam_user (&pam_user);
+ failent_user = get_failent_user (pam_user);
+
+ if (retcode == PAM_MAXTRIES) {
+ SYSLOG ((LOG_NOTICE,
+ "TOO MANY LOGIN TRIES (%u)%s FOR '%s'",
+ failcount, fromhost, failent_user));
+ fprintf (stderr,
+ _("Maximum number of tries exceeded (%u)\n"),
+ failcount);
+ PAM_END;
+ exit(0);
+ } else if (retcode == PAM_ABORT) {
+ /* Serious problems, quit now */
+ (void) fputs (_("login: abort requested by PAM\n"), stderr);
+ SYSLOG ((LOG_ERR,"PAM_ABORT returned from pam_authenticate()"));
+ PAM_END;
+ exit(99);
+ } else if (retcode != PAM_SUCCESS) {
+ SYSLOG ((LOG_NOTICE,"FAILED LOGIN (%u)%s FOR '%s', %s",
+ failcount, fromhost, failent_user,
+ pam_strerror (pamh, retcode)));
+ failed = true;
+ }
+
+ if (!failed) {
+ break;
+ }
+
+#ifdef WITH_AUDIT
+ audit_fd = audit_open ();
+ audit_log_acct_message (audit_fd,
+ AUDIT_USER_LOGIN,
+ NULL, /* Prog. name */
+ "login",
+ failent_user,
+ AUDIT_NO_ID,
+ hostname,
+ NULL, /* addr */
+ tty,
+ 0); /* result */
+ close (audit_fd);
+#endif /* WITH_AUDIT */
+
+ (void) puts ("");
+ (void) puts (_("Login incorrect"));
+
+ if (failcount >= retries) {
+ SYSLOG ((LOG_NOTICE,
+ "TOO MANY LOGIN TRIES (%u)%s FOR '%s'",
+ failcount, fromhost, failent_user));
+ fprintf (stderr,
+ _("Maximum number of tries exceeded (%u)\n"),
+ failcount);
+ PAM_END;
+ exit(0);
+ }
+
+ /*
+ * Let's give it another go around.
+ * Even if a username was given on the command
+ * line, prompt again for the username.
+ */
+ retcode = pam_set_item (pamh, PAM_USER, NULL);
+ PAM_FAIL_CHECK;
+ }
+
+ /* We don't get here unless they were authenticated above */
+ (void) alarm (0);
+ }
+
+ /* Check the account validity */
+ retcode = pam_acct_mgmt (pamh, 0);
+ if (retcode == PAM_NEW_AUTHTOK_REQD) {
+ retcode = pam_chauthtok (pamh, PAM_CHANGE_EXPIRED_AUTHTOK);
+ }
+ PAM_FAIL_CHECK;
+
+ /* Open the PAM session */
+ get_pam_user (&pam_user);
+ retcode = pam_open_session (pamh, hushed (pam_user) ? PAM_SILENT : 0);
+ PAM_FAIL_CHECK;
+
+ /* Grab the user information out of the password file for future usage
+ * First get the username that we are actually using, though.
+ *
+ * From now on, we will discard changes of the user (PAM_USER) by
+ * PAM APIs.
+ */
+ get_pam_user (&pam_user);
+ if (NULL != username) {
+ free (username);
+ }
+ username = xstrdup (pam_user);
+ failent_user = get_failent_user (username);
+
+ pwd = xgetpwnam (username);
+ if (NULL == pwd) {
+ SYSLOG ((LOG_ERR, "cannot find user %s", failent_user));
+ fprintf (stderr,
+ _("Cannot find user (%s)\n"),
+ username);
+ exit (1);
+ }
+
+ /* This set up the process credential (group) and initialize the
+ * supplementary group access list.
+ * This has to be done before pam_setcred
+ */
+ if (setup_groups (pwd) != 0) {
+ exit (1);
+ }
+
+ retcode = pam_setcred (pamh, PAM_ESTABLISH_CRED);
+ PAM_FAIL_CHECK;
+ /* NOTE: If pam_setcred changes PAM_USER, this will not be taken
+ * into account.
+ */
+
+#else /* ! USE_PAM */
+ while (true) { /* repeatedly get login/password pairs */
+ bool failed;
+ /* user_passwd is always a pointer to this constant string
+ * or a passwd or shadow password that will be memzero by
+ * pw_free / spw_free.
+ * Do not free() user_passwd. */
+ const char *user_passwd = "!";
+
+ /* Do some cleanup to avoid keeping entries we do not need
+ * anymore. */
+ if (NULL != pwd) {
+ pw_free (pwd);
+ pwd = NULL;
+ }
+ if (NULL != spwd) {
+ spw_free (spwd);
+ spwd = NULL;
+ }
+
+ failed = false; /* haven't failed authentication yet */
+ if (NULL == username) { /* need to get a login id */
+ if (subroot) {
+ closelog ();
+ exit (1);
+ }
+ preauth_flag = false;
+ username = xmalloc (USER_NAME_MAX_LENGTH + 1);
+ username[USER_NAME_MAX_LENGTH] = '\0';
+ login_prompt (_("\n%s login: "), username, USER_NAME_MAX_LENGTH);
+
+ if ('\0' == username[0]) {
+ /* Prompt for a new login */
+ free (username);
+ username = NULL;
+ continue;
+ }
+ }
+ /* Get the username to be used to log failures */
+ failent_user = get_failent_user (username);
+
+ pwd = xgetpwnam (username);
+ if (NULL == pwd) {
+ preauth_flag = false;
+ failed = true;
+ } else {
+ user_passwd = pwd->pw_passwd;
+ /*
+ * If the encrypted password begins with a "!",
+ * the account is locked and the user cannot
+ * login, even if they have been
+ * "pre-authenticated."
+ */
+ if ( ('!' == user_passwd[0])
+ || ('*' == user_passwd[0])) {
+ failed = true;
+ }
+ }
+
+ if (strcmp (user_passwd, SHADOW_PASSWD_STRING) == 0) {
+ spwd = xgetspnam (username);
+ if (NULL != spwd) {
+ user_passwd = spwd->sp_pwdp;
+ } else {
+ /* The user exists in passwd, but not in
+ * shadow. SHADOW_PASSWD_STRING indicates
+ * that the password shall be in shadow.
+ */
+ SYSLOG ((LOG_WARN,
+ "no shadow password for '%s'%s",
+ username, fromhost));
+ }
+ }
+
+ /*
+ * The -r and -f flags provide a name which has already
+ * been authenticated by some server.
+ */
+ if (preauth_flag) {
+ goto auth_ok;
+ }
+
+ if (pw_auth (user_passwd, username, reason, (char *) 0) == 0) {
+ goto auth_ok;
+ }
+
+ SYSLOG ((LOG_WARN, "invalid password for '%s' %s",
+ failent_user, fromhost));
+ failed = true;
+
+ auth_ok:
+ /*
+ * This is the point where all authenticated users wind up.
+ * If you reach this far, your password has been
+ * authenticated and so on.
+ */
+ if ( !failed
+ && (NULL != pwd)
+ && (0 == pwd->pw_uid)
+ && !is_console) {
+ SYSLOG ((LOG_CRIT, "ILLEGAL ROOT LOGIN %s", fromhost));
+ failed = true;
+ }
+ if ( !failed
+ && !login_access (username, ('\0' != *hostname) ? hostname : tty)) {
+ SYSLOG ((LOG_WARN, "LOGIN '%s' REFUSED %s",
+ username, fromhost));
+ failed = true;
+ }
+ if ( (NULL != pwd)
+ && getdef_bool ("FAILLOG_ENAB")
+ && !failcheck (pwd->pw_uid, &faillog, failed)) {
+ SYSLOG ((LOG_CRIT,
+ "exceeded failure limit for '%s' %s",
+ username, fromhost));
+ failed = true;
+ }
+ if (!failed) {
+ break;
+ }
+
+ /* don't log non-existent users */
+ if ((NULL != pwd) && getdef_bool ("FAILLOG_ENAB")) {
+ failure (pwd->pw_uid, tty, &faillog);
+ }
+ if (getdef_str ("FTMP_FILE") != NULL) {
+#ifdef USE_UTMPX
+ struct utmpx *failent =
+ prepare_utmpx (failent_user,
+ tty,
+ /* FIXME: or fromhost? */hostname,
+ utent);
+#else /* !USE_UTMPX */
+ struct utmp *failent =
+ prepare_utmp (failent_user,
+ tty,
+ hostname,
+ utent);
+#endif /* !USE_UTMPX */
+ failtmp (failent_user, failent);
+ free (failent);
+ }
+
+ retries--;
+ if (retries <= 0) {
+ SYSLOG ((LOG_CRIT, "REPEATED login failures%s",
+ fromhost));
+ }
+
+ /*
+ * If this was a passwordless account and we get here, login
+ * was denied (securetty, faillog, etc.). There was no
+ * password prompt, so do it now (will always fail - the bad
+ * guys won't see that the passwordless account exists at
+ * all). --marekm
+ */
+ if (user_passwd[0] == '\0') {
+ pw_auth ("!", username, reason, (char *) 0);
+ }
+
+ /*
+ * Authentication of this user failed.
+ * The username must be confirmed in the next try.
+ */
+ free (username);
+ username = NULL;
+
+ /*
+ * Wait a while (a la SVR4 /usr/bin/login) before attempting
+ * to login the user again. If the earlier alarm occurs
+ * before the sleep() below completes, login will exit.
+ */
+ if (delay > 0) {
+ (void) sleep (delay);
+ }
+
+ (void) puts (_("Login incorrect"));
+
+ /* allow only one attempt with -r or -f */
+ if (rflg || fflg || (retries <= 0)) {
+ closelog ();
+ exit (1);
+ }
+ } /* while (true) */
+#endif /* ! USE_PAM */
+ assert (NULL != username);
+ assert (NULL != pwd);
+
+ (void) alarm (0); /* turn off alarm clock */
+
+#ifndef USE_PAM /* PAM does this */
+ /*
+ * porttime checks moved here, after the user has been
+ * authenticated. now prints a message, as suggested
+ * by Ivan Nejgebauer <ian@unsux.ns.ac.yu>. --marekm
+ */
+ if ( getdef_bool ("PORTTIME_CHECKS_ENAB")
+ && !isttytime (username, tty, time ((time_t *) 0))) {
+ SYSLOG ((LOG_WARN, "invalid login time for '%s'%s",
+ username, fromhost));
+ closelog ();
+ bad_time_notify ();
+ exit (1);
+ }
+
+ check_nologin (pwd->pw_uid == 0);
+#endif
+
+ if (getenv ("IFS")) { /* don't export user IFS ... */
+ addenv ("IFS= \t\n", NULL); /* ... instead, set a safe IFS */
+ }
+
+ if (pwd->pw_shell[0] == '*') { /* subsystem root */
+ pwd->pw_shell++; /* skip the '*' */
+ subsystem (pwd); /* figure out what to execute */
+ subroot = true; /* say I was here again */
+ endpwent (); /* close all of the file which were */
+ endgrent (); /* open in the original rooted file */
+ endspent (); /* system. they will be re-opened */
+#ifdef SHADOWGRP
+ endsgent (); /* in the new rooted file system */
+#endif
+ goto top; /* go do all this all over again */
+ }
+
+#ifdef WITH_AUDIT
+ audit_fd = audit_open ();
+ audit_log_acct_message (audit_fd,
+ AUDIT_USER_LOGIN,
+ NULL, /* Prog. name */
+ "login",
+ username,
+ AUDIT_NO_ID,
+ hostname,
+ NULL, /* addr */
+ tty,
+ 1); /* result */
+ close (audit_fd);
+#endif /* WITH_AUDIT */
+
+#ifndef USE_PAM /* pam_lastlog handles this */
+ if ( getdef_bool ("LASTLOG_ENAB")
+ && pwd->pw_uid <= (uid_t) getdef_ulong ("LASTLOG_UID_MAX", 0xFFFFFFFFUL)) {
+ /* give last login and log this one */
+ dolastlog (&ll, pwd, tty, hostname);
+ }
+#endif
+
+#ifndef USE_PAM /* PAM handles this as well */
+ /*
+ * Have to do this while we still have root privileges, otherwise we
+ * don't have access to /etc/shadow.
+ */
+ if (NULL != spwd) { /* check for age of password */
+ if (expire (pwd, spwd)) {
+ /* The user updated her password, get the new
+ * entries.
+ * Use the x variants because we need to keep the
+ * entry for a long time, and there might be other
+ * getxxyyy in between.
+ */
+ pw_free (pwd);
+ pwd = xgetpwnam (username);
+ if (NULL == pwd) {
+ SYSLOG ((LOG_ERR,
+ "cannot find user %s after update of expired password",
+ username));
+ exit (1);
+ }
+ spw_free (spwd);
+ spwd = xgetspnam (username);
+ }
+ }
+ setup_limits (pwd); /* nice, ulimit etc. */
+#endif /* ! USE_PAM */
+ chown_tty (pwd);
+
+#ifdef USE_PAM
+ /*
+ * We must fork before setuid() because we need to call
+ * pam_close_session() as root.
+ */
+ (void) signal (SIGINT, SIG_IGN);
+ child = fork ();
+ if (child < 0) {
+ /* error in fork() */
+ fprintf (stderr, _("%s: failure forking: %s"),
+ Prog, strerror (errno));
+ PAM_END;
+ exit (0);
+ } else if (child != 0) {
+ /*
+ * parent - wait for child to finish, then cleanup
+ * session
+ */
+ wait (NULL);
+ PAM_END;
+ exit (0);
+ }
+ /* child */
+#endif
+
+ /* If we were init, we need to start a new session */
+ if (getppid() == 1) {
+ setsid();
+ if (ioctl(0, TIOCSCTTY, 1) != 0) {
+ fprintf (stderr, _("TIOCSCTTY failed on %s"), tty);
+ }
+ }
+
+ /*
+ * The utmp entry needs to be updated to indicate the new status
+ * of the session, the new PID and SID.
+ */
+ update_utmp (username, tty, hostname, utent);
+
+ /* The pwd and spwd entries for the user have been copied.
+ *
+ * Close all the files so that unauthorized access won't occur.
+ */
+ endpwent (); /* stop access to password file */
+ endgrent (); /* stop access to group file */
+ endspent (); /* stop access to shadow passwd file */
+#ifdef SHADOWGRP
+ endsgent (); /* stop access to shadow group file */
+#endif
+
+ /* Drop root privileges */
+#ifndef USE_PAM
+ if (setup_uid_gid (pwd, is_console))
+#else
+ /* The group privileges were already dropped.
+ * See setup_groups() above.
+ */
+ if (change_uid (pwd))
+#endif
+ {
+ exit (1);
+ }
+
+ setup_env (pwd); /* set env vars, cd to the home dir */
+
+#ifdef USE_PAM
+ {
+ const char *const *env;
+
+ env = (const char *const *) pam_getenvlist (pamh);
+ while ((NULL != env) && (NULL != *env)) {
+ addenv (*env, NULL);
+ env++;
+ }
+ }
+#endif
+
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ if (!hushed (username)) {
+ addenv ("HUSHLOGIN=FALSE", NULL);
+ /*
+ * pam_unix, pam_mail and pam_lastlog should take care of
+ * this
+ */
+#ifndef USE_PAM
+ motd (); /* print the message of the day */
+ if ( getdef_bool ("FAILLOG_ENAB")
+ && (0 != faillog.fail_cnt)) {
+ failprint (&faillog);
+ /* Reset the lockout times if logged in */
+ if ( (0 != faillog.fail_max)
+ && (faillog.fail_cnt >= faillog.fail_max)) {
+ (void) puts (_("Warning: login re-enabled after temporary lockout."));
+ SYSLOG ((LOG_WARN,
+ "login '%s' re-enabled after temporary lockout (%d failures)",
+ username, (int) faillog.fail_cnt));
+ }
+ }
+ if ( getdef_bool ("LASTLOG_ENAB")
+ && pwd->pw_uid <= (uid_t) getdef_ulong ("LASTLOG_UID_MAX", 0xFFFFFFFFUL)
+ && (ll.ll_time != 0)) {
+ time_t ll_time = ll.ll_time;
+
+#ifdef HAVE_STRFTIME
+ (void) strftime (ptime, sizeof (ptime),
+ "%a %b %e %H:%M:%S %z %Y",
+ localtime (&ll_time));
+ printf (_("Last login: %s on %s"),
+ ptime, ll.ll_line);
+#else
+ printf (_("Last login: %.19s on %s"),
+ ctime (&ll_time), ll.ll_line);
+#endif
+#ifdef HAVE_LL_HOST /* __linux__ || SUN4 */
+ if ('\0' != ll.ll_host[0]) {
+ printf (_(" from %.*s"),
+ (int) sizeof ll.ll_host, ll.ll_host);
+ }
+#endif
+ printf (".\n");
+ }
+ agecheck (spwd);
+
+ mailcheck (); /* report on the status of mail */
+#endif /* !USE_PAM */
+ } else {
+ addenv ("HUSHLOGIN=TRUE", NULL);
+ }
+
+ ttytype (tty);
+
+ (void) signal (SIGQUIT, SIG_DFL); /* default quit signal */
+ (void) signal (SIGTERM, SIG_DFL); /* default terminate signal */
+ (void) signal (SIGALRM, SIG_DFL); /* default alarm signal */
+ (void) signal (SIGHUP, SIG_DFL); /* added this. --marekm */
+ (void) signal (SIGINT, SIG_DFL); /* default interrupt signal */
+
+ if (0 == pwd->pw_uid) {
+ SYSLOG ((LOG_NOTICE, "ROOT LOGIN %s", fromhost));
+ } else if (getdef_bool ("LOG_OK_LOGINS")) {
+ SYSLOG ((LOG_INFO, "'%s' logged in %s", username, fromhost));
+ }
+ closelog ();
+ tmp = getdef_str ("FAKE_SHELL");
+ if (NULL != tmp) {
+ err = shell (tmp, pwd->pw_shell, newenvp); /* fake shell */
+ } else {
+ /* exec the shell finally */
+ err = shell (pwd->pw_shell, (char *) 0, newenvp);
+ }
+
+ return ((err == ENOENT) ? E_CMD_NOTFOUND : E_CMD_NOEXEC);
+}
+
diff --git a/src/login_nopam.c b/src/login_nopam.c
new file mode 100644
index 0000000..68a3775
--- /dev/null
+++ b/src/login_nopam.c
@@ -0,0 +1,336 @@
+/* Taken from logdaemon-5.0, only minimal changes. --marekm */
+
+/************************************************************************
+* Copyright 1995 by Wietse Venema. All rights reserved. Individual files
+* may be covered by other copyrights (as noted in the file itself.)
+*
+* This material was originally written and compiled by Wietse Venema at
+* Eindhoven University of Technology, The Netherlands, in 1990, 1991,
+* 1992, 1993, 1994 and 1995.
+*
+* Redistribution and use in source and binary forms are permitted
+* provided that this entire copyright notice is duplicated in all such
+* copies.
+*
+* This software is provided "as is" and without any expressed or implied
+* warranties, including, without limitation, the implied warranties of
+* merchantibility and fitness for any particular purpose.
+************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifndef USE_PAM
+#ident "$Id$"
+
+#include "prototypes.h"
+ /*
+ * This module implements a simple but effective form of login access
+ * control based on login names and on host (or domain) names, internet
+ * addresses (or network numbers), or on terminal line names in case of
+ * non-networked logins. Diagnostics are reported through syslog(3).
+ *
+ * Author: Wietse Venema, Eindhoven University of Technology, The Netherlands.
+ */
+#include <sys/types.h>
+#include <stdio.h>
+#include <syslog.h>
+#include <ctype.h>
+#ifdef HAVE_NETDB_H
+#include <netdb.h>
+#endif
+#include <grp.h>
+#ifdef PRIMARY_GROUP_MATCH
+#include <pwd.h>
+#endif
+#include <errno.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h> /* for inet_ntoa() */
+
+#if !defined(MAXHOSTNAMELEN) || (MAXHOSTNAMELEN < 64)
+#undef MAXHOSTNAMELEN
+#define MAXHOSTNAMELEN 256
+#endif
+
+ /* Path name of the access control file. */
+#ifndef TABLE
+#define TABLE "/etc/login.access"
+#endif
+
+/* Delimiters for fields and for lists of users, ttys or hosts. */
+static char fs[] = ":"; /* field separator */
+static char sep[] = ", \t"; /* list-element separator */
+
+static bool list_match (char *list, const char *item, bool (*match_fn) (const char *, const char *));
+static bool user_match (const char *tok, const char *string);
+static bool from_match (const char *tok, const char *string);
+static bool string_match (const char *tok, const char *string);
+static const char *resolve_hostname (const char *string);
+
+/* login_access - match username/group and host/tty with access control file */
+int login_access (const char *user, const char *from)
+{
+ FILE *fp;
+ char line[BUFSIZ];
+ char *perm; /* becomes permission field */
+ char *users; /* becomes list of login names */
+ char *froms; /* becomes list of terminals or hosts */
+ bool match = false;
+
+ /*
+ * Process the table one line at a time and stop at the first match.
+ * Blank lines and lines that begin with a '#' character are ignored.
+ * Non-comment lines are broken at the ':' character. All fields are
+ * mandatory. The first field should be a "+" or "-" character. A
+ * non-existing table means no access control.
+ */
+ fp = fopen (TABLE, "r");
+ if (NULL != fp) {
+ int lineno = 0; /* for diagnostics */
+ while ( !match
+ && (fgets (line, (int) sizeof (line), fp) == line)) {
+ int end;
+ lineno++;
+ end = (int) strlen (line) - 1;
+ if (line[end] != '\n') {
+ SYSLOG ((LOG_ERR,
+ "%s: line %d: missing newline or line too long",
+ TABLE, lineno));
+ continue;
+ }
+ if (line[0] == '#') {
+ continue; /* comment line */
+ }
+ while (end > 0 && isspace (line[end - 1])) {
+ end--;
+ }
+ line[end] = '\0'; /* strip trailing whitespace */
+ if (line[0] == '\0') { /* skip blank lines */
+ continue;
+ }
+ if ( ((perm = strtok (line, fs)) == NULL)
+ || ((users = strtok ((char *) 0, fs)) == NULL)
+ || ((froms = strtok ((char *) 0, fs)) == NULL)
+ || (strtok ((char *) 0, fs) != NULL)) {
+ SYSLOG ((LOG_ERR,
+ "%s: line %d: bad field count",
+ TABLE, lineno));
+ continue;
+ }
+ if (perm[0] != '+' && perm[0] != '-') {
+ SYSLOG ((LOG_ERR,
+ "%s: line %d: bad first field",
+ TABLE, lineno));
+ continue;
+ }
+ match = ( list_match (froms, from, from_match)
+ && list_match (users, user, user_match));
+ }
+ (void) fclose (fp);
+ } else if (errno != ENOENT) {
+ int err = errno;
+ SYSLOG ((LOG_ERR, "cannot open %s: %s", TABLE, strerror (err)));
+ }
+ return (!match || (line[0] == '+'))?1:0;
+}
+
+/* list_match - match an item against a list of tokens with exceptions */
+static bool list_match (char *list, const char *item, bool (*match_fn) (const char *, const char*))
+{
+ char *tok;
+ bool match = false;
+
+ /*
+ * Process tokens one at a time. We have exhausted all possible matches
+ * when we reach an "EXCEPT" token or the end of the list. If we do find
+ * a match, look for an "EXCEPT" list and recurse to determine whether
+ * the match is affected by any exceptions.
+ */
+ for (tok = strtok (list, sep); tok != NULL; tok = strtok ((char *) 0, sep)) {
+ if (strcasecmp (tok, "EXCEPT") == 0) { /* EXCEPT: give up */
+ break;
+ }
+ match = (*match_fn) (tok, item);
+ if (match) {
+ break;
+ }
+ }
+
+ /* Process exceptions to matches. */
+ if (match) {
+ while ( ((tok = strtok ((char *) 0, sep)) != NULL)
+ && (strcasecmp (tok, "EXCEPT") != 0))
+ /* VOID */ ;
+ if (tok == 0 || !list_match ((char *) 0, item, match_fn)) {
+ return (match);
+ }
+ }
+ return false;
+}
+
+/* myhostname - figure out local machine name */
+static char *myhostname (void)
+{
+ static char name[MAXHOSTNAMELEN + 1] = "";
+
+ if (name[0] == '\0') {
+ gethostname (name, sizeof (name));
+ name[MAXHOSTNAMELEN] = '\0';
+ }
+ return (name);
+}
+
+#if HAVE_INNETGR
+/* netgroup_match - match group against machine or user */
+static bool
+netgroup_match (const char *group, const char *machine, const char *user)
+{
+ static char *mydomain = (char *)0;
+
+ if (mydomain == (char *)0) {
+ static char domain[MAXHOSTNAMELEN + 1];
+
+ getdomainname (domain, MAXHOSTNAMELEN);
+ mydomain = domain;
+ }
+
+ return (innetgr (group, machine, user, mydomain) != 0);
+}
+#endif
+
+/* user_match - match a username against one token */
+static bool user_match (const char *tok, const char *string)
+{
+ struct group *group;
+
+#ifdef PRIMARY_GROUP_MATCH
+ struct passwd *userinf;
+#endif
+ char *at;
+
+ /*
+ * If a token has the magic value "ALL" the match always succeeds.
+ * Otherwise, return true if the token fully matches the username, or if
+ * the token is a group that contains the username.
+ */
+ at = strchr (tok + 1, '@');
+ if (NULL != at) { /* split user@host pattern */
+ *at = '\0';
+ return ( user_match (tok, string)
+ && from_match (at + 1, myhostname ()));
+#if HAVE_INNETGR
+ } else if (tok[0] == '@') { /* netgroup */
+ return (netgroup_match (tok + 1, (char *) 0, string));
+#endif
+ } else if (string_match (tok, string)) { /* ALL or exact match */
+ return true;
+ /* local, no need for xgetgrnam */
+ } else if ((group = getgrnam (tok)) != NULL) { /* try group membership */
+ int i;
+ for (i = 0; NULL != group->gr_mem[i]; i++) {
+ if (strcasecmp (string, group->gr_mem[i]) == 0) {
+ return true;
+ }
+ }
+#ifdef PRIMARY_GROUP_MATCH
+ /*
+ * If the string is an user whose initial GID matches the token,
+ * accept it. May avoid excessively long lines in /etc/group.
+ * Radu-Adrian Feurdean <raf@licj.soroscj.ro>
+ *
+ * XXX - disabled by default for now. Need to verify that
+ * getpwnam() doesn't have some nasty side effects. --marekm
+ */
+ /* local, no need for xgetpwnam */
+ userinf = getpwnam (string);
+ if (NULL != userinf) {
+ if (userinf->pw_gid == group->gr_gid) {
+ return true;
+ }
+ }
+#endif
+ }
+ return false;
+}
+
+static const char *resolve_hostname (const char *string)
+{
+ /*
+ * Resolve hostname to numeric IP address, as suggested
+ * by Dave Hagewood <admin@arrowweb.com>. --marekm
+ */
+ struct hostent *hp;
+
+ hp = gethostbyname (string);
+ if (NULL != hp) {
+ return inet_ntoa (*((struct in_addr *) *(hp->h_addr_list)));
+ }
+
+ SYSLOG ((LOG_ERR, "%s - unknown host", string));
+ return string;
+}
+
+/* from_match - match a host or tty against a list of tokens */
+
+static bool from_match (const char *tok, const char *string)
+{
+ size_t tok_len;
+
+ /*
+ * If a token has the magic value "ALL" the match always succeeds. Return
+ * true if the token fully matches the string. If the token is a domain
+ * name, return true if it matches the last fields of the string. If the
+ * token has the magic value "LOCAL", return true if the string does not
+ * contain a "." character. If the token is a network number, return true
+ * if it matches the head of the string.
+ */
+#if HAVE_INNETGR
+ if (tok[0] == '@') { /* netgroup */
+ return (netgroup_match (tok + 1, string, (char *) 0));
+ } else
+#endif
+ if (string_match (tok, string)) { /* ALL or exact match */
+ return true;
+ } else if (tok[0] == '.') { /* domain: match last fields */
+ size_t str_len;
+ str_len = strlen (string);
+ tok_len = strlen (tok);
+ if ( (str_len > tok_len)
+ && (strcasecmp (tok, string + str_len - tok_len) == 0)) {
+ return true;
+ }
+ } else if (strcasecmp (tok, "LOCAL") == 0) { /* local: no dots */
+ if (strchr (string, '.') == NULL) {
+ return true;
+ }
+ } else if ( (tok[(tok_len = strlen (tok)) - 1] == '.') /* network */
+ && (strncmp (tok, resolve_hostname (string), tok_len) == 0)) {
+ return true;
+ }
+ return false;
+}
+
+/* string_match - match a string against one token */
+static bool string_match (const char *tok, const char *string)
+{
+
+ /*
+ * If the token has the magic value "ALL" the match always succeeds.
+ * Otherwise, return true if the token fully matches the string.
+ */
+ if (strcasecmp (tok, "ALL") == 0) { /* all: always matches */
+ return true;
+ } else if (strcasecmp (tok, string) == 0) { /* try exact match */
+ return true;
+ }
+ return false;
+}
+
+#else /* !USE_PAM */
+extern int errno; /* warning: ANSI C forbids an empty source file */
+#endif /* !USE_PAM */
diff --git a/src/logoutd.c b/src/logoutd.c
new file mode 100644
index 0000000..1503a74
--- /dev/null
+++ b/src/logoutd.c
@@ -0,0 +1,299 @@
+/*
+ * Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * 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 <fcntl.h>
+#include <signal.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include "defines.h"
+#include "prototypes.h"
+/*
+ * Global variables
+ */
+const char *Prog;
+
+#ifndef DEFAULT_HUP_MESG
+#define DEFAULT_HUP_MESG _("login time exceeded\n\n")
+#endif
+
+#ifndef HUP_MESG_FILE
+#define HUP_MESG_FILE "/etc/logoutd.mesg"
+#endif
+
+/* local function prototypes */
+#ifdef USE_UTMPX
+static int check_login (const struct utmpx *ut);
+#else /* !USE_UTMPX */
+static int check_login (const struct utmp *ut);
+#endif /* !USE_UTMPX */
+static void send_mesg_to_tty (int tty_fd);
+
+/*
+ * check_login - check if user (struct utmpx/utmp) allowed to stay logged in
+ */
+#ifdef USE_UTMPX
+static int check_login (const struct utmpx *ut)
+#else /* !USE_UTMPX */
+static int check_login (const struct utmp *ut)
+#endif /* !USE_UTMPX */
+{
+ char user[sizeof (ut->ut_user) + 1];
+ time_t now;
+
+ /*
+ * ut_user may not have the terminating NUL.
+ */
+ strncpy (user, ut->ut_user, sizeof (ut->ut_user));
+ user[sizeof (ut->ut_user)] = '\0';
+
+ (void) time (&now);
+
+ /*
+ * Check if they are allowed to be logged in right now.
+ */
+ if (!isttytime (user, ut->ut_line, now)) {
+ return 0;
+ }
+ return 1;
+}
+
+
+static void send_mesg_to_tty (int tty_fd)
+{
+ TERMIO oldt, newt;
+ FILE *mesg_file, *tty_file;
+ bool is_tty;
+
+ tty_file = fdopen (tty_fd, "w");
+ if (NULL == tty_file) {
+ return;
+ }
+
+ is_tty = (GTTY (tty_fd, &oldt) == 0);
+ if (is_tty) {
+ /* Suggested by Ivan Nejgebauar <ian@unsux.ns.ac.yu>:
+ set OPOST before writing the message. */
+ newt = oldt;
+ newt.c_oflag |= OPOST;
+ STTY (tty_fd, &newt);
+ }
+
+ mesg_file = fopen (HUP_MESG_FILE, "r");
+ if (NULL != mesg_file) {
+ int c;
+ while ((c = getc (mesg_file)) != EOF) {
+ if (c == '\n') {
+ putc ('\r', tty_file);
+ }
+ putc (c, tty_file);
+ }
+ fclose (mesg_file);
+ } else {
+ fputs (DEFAULT_HUP_MESG, tty_file);
+ }
+ fflush (tty_file);
+ fclose (tty_file);
+
+ if (is_tty) {
+ STTY (tty_fd, &oldt);
+ }
+}
+
+
+/*
+ * logoutd - logout daemon to enforce /etc/porttime file policy
+ *
+ * logoutd is started at system boot time and enforces the login
+ * time and port restrictions specified in /etc/porttime. The
+ * utmpx/utmp file is periodically scanned and offending users are logged
+ * off from the system.
+ */
+int main (int argc, char **argv)
+{
+ int i;
+ int status;
+ pid_t pid;
+
+#ifdef USE_UTMPX
+ struct utmpx *ut;
+#else /* !USE_UTMPX */
+ struct utmp *ut;
+#endif /* !USE_UTMPX */
+ char user[sizeof (ut->ut_user) + 1]; /* terminating NUL */
+ char tty_name[sizeof (ut->ut_line) + 6]; /* /dev/ + NUL */
+ int tty_fd;
+
+ if (1 != argc) {
+ (void) fputs (_("Usage: logoutd\n"), stderr);
+ }
+
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+#ifndef DEBUG
+ for (i = 0; close (i) == 0; i++);
+
+ setpgrp ();
+
+ /*
+ * Put this process in the background.
+ */
+ pid = fork ();
+ if (pid > 0) {
+ /* parent */
+ exit (EXIT_SUCCESS);
+ } else if (pid < 0) {
+ /* error */
+ perror ("fork");
+ exit (EXIT_FAILURE);
+ }
+#endif /* !DEBUG */
+
+ /*
+ * Start syslogging everything
+ */
+ Prog = Basename (argv[0]);
+
+ OPENLOG ("logoutd");
+
+ /*
+ * Scan the utmpx/utmp file once per minute looking for users that
+ * are not supposed to still be logged in.
+ */
+ while (true) {
+
+ /*
+ * Attempt to re-open the utmpx/utmp file. The file is only
+ * open while it is being used.
+ */
+#ifdef USE_UTMPX
+ setutxent ();
+#else /* !USE_UTMPX */
+ setutent ();
+#endif /* !USE_UTMPX */
+
+ /*
+ * Read all of the entries in the utmpx/utmp file. The entries
+ * for login sessions will be checked to see if the user
+ * is permitted to be signed on at this time.
+ */
+#ifdef USE_UTMPX
+ while ((ut = getutxent ()) != NULL)
+#else /* !USE_UTMPX */
+ while ((ut = getutent ()) != NULL)
+#endif /* !USE_UTMPX */
+ {
+ if (ut->ut_type != USER_PROCESS) {
+ continue;
+ }
+ if (ut->ut_user[0] == '\0') {
+ continue;
+ }
+ if (check_login (ut)) {
+ continue;
+ }
+
+ /*
+ * Put the rest of this in a child process. This
+ * keeps the scan from waiting on other ports to die.
+ */
+
+ pid = fork ();
+ if (pid > 0) {
+ /* parent */
+ continue;
+ } else if (pid < 0) {
+ /* failed - give up until the next scan */
+ break;
+ }
+ /* child */
+
+ if (strncmp (ut->ut_line, "/dev/", 5) != 0) {
+ strcpy (tty_name, "/dev/");
+ } else {
+ tty_name[0] = '\0';
+ }
+
+ strcat (tty_name, ut->ut_line);
+#ifndef O_NOCTTY
+#define O_NOCTTY 0
+#endif
+ tty_fd =
+ open (tty_name, O_WRONLY | O_NDELAY | O_NOCTTY);
+ if (tty_fd != -1) {
+ send_mesg_to_tty (tty_fd);
+ close (tty_fd);
+ sleep (10);
+ }
+
+ if (ut->ut_pid > 1) {
+ kill (-ut->ut_pid, SIGHUP);
+ sleep (10);
+ kill (-ut->ut_pid, SIGKILL);
+ }
+
+ strncpy (user, ut->ut_user, sizeof (user) - 1);
+ user[sizeof (user) - 1] = '\0';
+
+ SYSLOG ((LOG_NOTICE,
+ "logged off user '%s' on '%s'", user,
+ tty_name));
+
+ /*
+ * This child has done all it can, drop dead.
+ */
+ exit (EXIT_SUCCESS);
+ }
+
+#ifdef USE_UTMPX
+ endutxent ();
+#else /* !USE_UTMPX */
+ endutent ();
+#endif /* !USE_UTMPX */
+
+#ifndef DEBUG
+ sleep (60);
+#endif
+ /*
+ * Reap any dead babies ...
+ */
+ while (wait (&status) != -1);
+ }
+
+ return EXIT_FAILURE;
+}
+
diff --git a/src/newgidmap.c b/src/newgidmap.c
new file mode 100644
index 0000000..7fcb459
--- /dev/null
+++ b/src/newgidmap.c
@@ -0,0 +1,257 @@
+/*
+ * Copyright (c) 2013 Eric Biederman
+ * 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>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include "defines.h"
+#include "prototypes.h"
+#include "subordinateio.h"
+#include "idmapping.h"
+
+/*
+ * Global variables
+ */
+const char *Prog;
+
+
+static bool verify_range(struct passwd *pw, struct map_range *range, bool *allow_setgroups)
+{
+ /* An empty range is invalid */
+ if (range->count == 0)
+ return false;
+
+ /* Test /etc/subgid. If the mapping is valid then we allow setgroups. */
+ if (have_sub_gids(pw->pw_name, range->lower, range->count)) {
+ *allow_setgroups = true;
+ return true;
+ }
+
+ /* Allow a process to map its own gid. */
+ if ((range->count == 1) && (pw->pw_gid == range->lower)) {
+ /* noop -- if setgroups is enabled already we won't disable it. */
+ return true;
+ }
+
+ return false;
+}
+
+static void verify_ranges(struct passwd *pw, int ranges,
+ struct map_range *mappings, bool *allow_setgroups)
+{
+ struct map_range *mapping;
+ int idx;
+
+ mapping = mappings;
+ for (idx = 0; idx < ranges; idx++, mapping++) {
+ if (!verify_range(pw, mapping, allow_setgroups)) {
+ fprintf(stderr, _( "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"),
+ Prog,
+ mapping->upper,
+ mapping->upper + mapping->count,
+ mapping->lower,
+ mapping->lower + mapping->count);
+ exit(EXIT_FAILURE);
+ }
+ }
+}
+
+static void usage(void)
+{
+ fprintf(stderr, _("usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"), Prog);
+ exit(EXIT_FAILURE);
+}
+
+void write_setgroups(int proc_dir_fd, bool allow_setgroups)
+{
+ int setgroups_fd;
+ char *policy, policy_buffer[4096];
+
+ /*
+ * Default is "deny", and any "allow" will out-rank a "deny". We don't
+ * forcefully write an "allow" here because the process we are writing
+ * mappings for may have already set themselves to "deny" (and "allow"
+ * is the default anyway). So allow_setgroups == true is a noop.
+ */
+ policy = "deny\n";
+ if (allow_setgroups)
+ return;
+
+ setgroups_fd = openat(proc_dir_fd, "setgroups", O_RDWR|O_CLOEXEC);
+ if (setgroups_fd < 0) {
+ /*
+ * If it's an ENOENT then we are on too old a kernel for the setgroups
+ * code to exist. Emit a warning and bail on this.
+ */
+ if (ENOENT == errno) {
+ fprintf(stderr, _("%s: kernel doesn't support setgroups restrictions\n"), Prog);
+ goto out;
+ }
+ fprintf(stderr, _("%s: couldn't open process setgroups: %s\n"),
+ Prog,
+ strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+
+ /*
+ * Check whether the policy is already what we want. /proc/self/setgroups
+ * is write-once, so attempting to write after it's already written to will
+ * fail.
+ */
+ if (read(setgroups_fd, policy_buffer, sizeof(policy_buffer)) < 0) {
+ fprintf(stderr, _("%s: failed to read setgroups: %s\n"),
+ Prog,
+ strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ if (!strncmp(policy_buffer, policy, strlen(policy)))
+ goto out;
+
+ /* Write the policy. */
+ if (lseek(setgroups_fd, 0, SEEK_SET) < 0) {
+ fprintf(stderr, _("%s: failed to seek setgroups: %s\n"),
+ Prog,
+ strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ if (dprintf(setgroups_fd, "%s", policy) < 0) {
+ fprintf(stderr, _("%s: failed to setgroups %s policy: %s\n"),
+ Prog,
+ policy,
+ strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+
+out:
+ close(setgroups_fd);
+}
+
+/*
+ * newgidmap - Set the gid_map for the specified process
+ */
+int main(int argc, char **argv)
+{
+ char proc_dir_name[32];
+ char *target_str;
+ pid_t target;
+ int proc_dir_fd;
+ int ranges;
+ struct map_range *mappings;
+ struct stat st;
+ struct passwd *pw;
+ int written;
+ bool allow_setgroups = false;
+
+ Prog = Basename (argv[0]);
+
+ /*
+ * The valid syntax are
+ * newgidmap target_pid
+ */
+ if (argc < 2)
+ usage();
+
+ /* Find the process that needs its user namespace
+ * gid mapping set.
+ */
+ target_str = argv[1];
+ if (!get_pid(target_str, &target))
+ usage();
+
+ /* max string length is 6 + 10 + 1 + 1 = 18, allocate 32 bytes */
+ written = snprintf(proc_dir_name, sizeof(proc_dir_name), "/proc/%u/",
+ target);
+ if ((written <= 0) || (written >= sizeof(proc_dir_name))) {
+ fprintf(stderr, "%s: snprintf of proc path failed: %s\n",
+ Prog, strerror(errno));
+ }
+
+ proc_dir_fd = open(proc_dir_name, O_DIRECTORY);
+ if (proc_dir_fd < 0) {
+ fprintf(stderr, _("%s: Could not open proc directory for target %u\n"),
+ Prog, target);
+ return EXIT_FAILURE;
+ }
+
+ /* Who am i? */
+ pw = get_my_pwent ();
+ if (NULL == pw) {
+ fprintf (stderr,
+ _("%s: Cannot determine your user name.\n"),
+ Prog);
+ SYSLOG ((LOG_WARN, "Cannot determine the user name of the caller (UID %lu)",
+ (unsigned long) getuid ()));
+ return EXIT_FAILURE;
+ }
+
+ /* Get the effective uid and effective gid of the target process */
+ if (fstat(proc_dir_fd, &st) < 0) {
+ fprintf(stderr, _("%s: Could not stat directory for target %u\n"),
+ Prog, target);
+ return EXIT_FAILURE;
+ }
+
+ /* Verify real user and real group matches the password entry
+ * and the effective user and group of the program whose
+ * mappings we have been asked to set.
+ */
+ if ((getuid() != pw->pw_uid) ||
+ (getgid() != pw->pw_gid) ||
+ (pw->pw_uid != st.st_uid) ||
+ (pw->pw_gid != st.st_gid)) {
+ fprintf(stderr, _( "%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n" ),
+ Prog, target,
+ (unsigned long int)getuid(), (unsigned long int)pw->pw_uid, (unsigned long int)st.st_uid,
+ (unsigned long int)getgid(), (unsigned long int)pw->pw_gid, (unsigned long int)st.st_gid);
+ return EXIT_FAILURE;
+ }
+
+ if (!sub_gid_open(O_RDONLY)) {
+ return EXIT_FAILURE;
+ }
+
+ ranges = ((argc - 2) + 2) / 3;
+ mappings = get_map_ranges(ranges, argc - 2, argv + 2);
+ if (!mappings)
+ usage();
+
+ verify_ranges(pw, ranges, mappings, &allow_setgroups);
+
+ write_setgroups(proc_dir_fd, allow_setgroups);
+ write_mapping(proc_dir_fd, ranges, mappings, "gid_map", pw->pw_uid);
+ sub_gid_close();
+
+ return EXIT_SUCCESS;
+}
diff --git a/src/newgrp.c b/src/newgrp.c
new file mode 100644
index 0000000..e3c44e1
--- /dev/null
+++ b/src/newgrp.c
@@ -0,0 +1,879 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, 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 <errno.h>
+#include <grp.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <assert.h>
+#include "defines.h"
+#include "getdef.h"
+#include "prototypes.h"
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+/*
+ * Global variables
+ */
+const char *Prog;
+
+extern char **newenvp;
+extern char **environ;
+
+#ifdef HAVE_SETGROUPS
+static int ngroups;
+static /*@null@*/ /*@only@*/GETGROUPS_T *grouplist;
+#endif
+
+static bool is_newgrp;
+
+#ifdef WITH_AUDIT
+static char audit_buf[80];
+#endif
+
+/* local function prototypes */
+static void usage (void);
+static void check_perms (const struct group *grp,
+ struct passwd *pwd,
+ const char *groupname);
+static void syslog_sg (const char *name, const char *group);
+
+/*
+ * usage - print command usage message
+ */
+static void usage (void)
+{
+ if (is_newgrp) {
+ (void) fputs (_("Usage: newgrp [-] [group]\n"), stderr);
+ } else {
+ (void) fputs (_("Usage: sg group [[-c] command]\n"), stderr);
+ }
+}
+
+static bool ingroup(const char *name, struct group *gr)
+{
+ char **look;
+ bool notfound = true;
+
+ look = gr->gr_mem;
+ while (*look && notfound)
+ notfound = strcmp (*look++, name);
+
+ return !notfound;
+}
+
+/*
+ * find_matching_group - search all groups of a gr's group id for
+ * membership of a given username
+ * but check gr itself first
+ */
+static /*@null@*/struct group *find_matching_group (const char *name, struct group *gr)
+{
+ gid_t gid = gr->gr_gid;
+
+ if (ingroup(name, gr))
+ return gr;
+
+ setgrent ();
+ while ((gr = getgrent ()) != NULL) {
+ if (gr->gr_gid != gid) {
+ continue;
+ }
+
+ /*
+ * A group with matching GID was found.
+ * Test for membership of 'name'.
+ */
+ if (ingroup(name, gr))
+ break;
+ }
+ endgrent ();
+ return gr;
+}
+
+/*
+ * check_perms - check if the user is allowed to switch to this group
+ *
+ * If needed, the user will be authenticated.
+ *
+ * It will not return if the user could not be authenticated.
+ */
+static void check_perms (const struct group *grp,
+ struct passwd *pwd,
+ const char *groupname)
+{
+ bool needspasswd = false;
+ struct spwd *spwd;
+ char *cp;
+ const char *cpasswd;
+
+ /*
+ * see if she is a member of this group (i.e. in the list of
+ * members of the group, or if the group is her primary group).
+ *
+ * If she isn't a member, she needs to provide the group password.
+ * If there is no group password, she will be denied access
+ * anyway.
+ *
+ */
+ if ( (grp->gr_gid != pwd->pw_gid)
+ && !is_on_list (grp->gr_mem, pwd->pw_name)) {
+ needspasswd = true;
+ }
+
+ /*
+ * If she does not have either a shadowed password, or a regular
+ * password, and the group has a password, she needs to give the
+ * group password.
+ */
+ spwd = xgetspnam (pwd->pw_name);
+ if (NULL != spwd) {
+ pwd->pw_passwd = spwd->sp_pwdp;
+ }
+
+ if ((pwd->pw_passwd[0] == '\0') && (grp->gr_passwd[0] != '\0')) {
+ needspasswd = true;
+ }
+
+ /*
+ * Now I see about letting her into the group she requested. If she
+ * is the root user, I'll let her in without having to prompt for
+ * the password. Otherwise I ask for a password if she flunked one
+ * of the tests above.
+ */
+ if ((getuid () != 0) && needspasswd) {
+ /*
+ * get the password from her, and set the salt for
+ * the decryption from the group file.
+ */
+ cp = getpass (_("Password: "));
+ if (NULL == cp) {
+ goto failure;
+ }
+
+ /*
+ * encrypt the key she gave us using the salt from the
+ * password in the group file. The result of this encryption
+ * must match the previously encrypted value in the file.
+ */
+ cpasswd = pw_encrypt (cp, grp->gr_passwd);
+ strzero (cp);
+
+ if (NULL == cpasswd) {
+ fprintf (stderr,
+ _("%s: failed to crypt password with previous salt: %s\n"),
+ Prog, strerror (errno));
+ SYSLOG ((LOG_INFO,
+ "Failed to crypt password with previous salt of group '%s'",
+ groupname));
+ goto failure;
+ }
+
+ if (grp->gr_passwd[0] == '\0' ||
+ strcmp (cpasswd, grp->gr_passwd) != 0) {
+#ifdef WITH_AUDIT
+ snprintf (audit_buf, sizeof(audit_buf),
+ "authentication new-gid=%lu",
+ (unsigned long) grp->gr_gid);
+ audit_logger (AUDIT_GRP_AUTH, Prog,
+ audit_buf, NULL,
+ (unsigned int) getuid (), 0);
+#endif
+ SYSLOG ((LOG_INFO,
+ "Invalid password for group '%s' from '%s'",
+ groupname, pwd->pw_name));
+ (void) sleep (1);
+ (void) fputs (_("Invalid password.\n"), stderr);
+ goto failure;
+ }
+#ifdef WITH_AUDIT
+ snprintf (audit_buf, sizeof(audit_buf),
+ "authentication new-gid=%lu",
+ (unsigned long) grp->gr_gid);
+ audit_logger (AUDIT_GRP_AUTH, Prog,
+ audit_buf, NULL,
+ (unsigned int) getuid (), 1);
+#endif
+ }
+
+ return;
+
+failure:
+ /* The closelog is probably unnecessary, but it does no
+ * harm. -- JWP
+ */
+ closelog ();
+#ifdef WITH_AUDIT
+ if (groupname) {
+ snprintf (audit_buf, sizeof(audit_buf),
+ "changing new-group=%s", groupname);
+ audit_logger (AUDIT_CHGRP_ID, Prog,
+ audit_buf, NULL,
+ (unsigned int) getuid (), 0);
+ } else {
+ audit_logger (AUDIT_CHGRP_ID, Prog,
+ "changing", NULL,
+ (unsigned int) getuid (), 0);
+ }
+#endif
+ exit (EXIT_FAILURE);
+}
+
+#ifdef USE_SYSLOG
+/*
+ * syslog_sg - log the change of group to syslog
+ *
+ * The logout will also be logged when the user will quit the
+ * sg/newgrp session.
+ */
+static void syslog_sg (const char *name, const char *group)
+{
+ const char *loginname = getlogin ();
+ const char *tty = ttyname (0);
+ char *free_login = NULL, *free_tty = NULL;
+
+ if (loginname != NULL) {
+ free_login = xstrdup (loginname);
+ loginname = free_login;
+ }
+ if (tty != NULL) {
+ free_tty = xstrdup (tty);
+ tty = free_tty;
+ }
+
+ if (loginname == NULL) {
+ loginname = "???";
+ }
+ if (tty == NULL) {
+ tty = "???";
+ } else if (strncmp (tty, "/dev/", 5) == 0) {
+ tty += 5;
+ }
+ SYSLOG ((LOG_INFO,
+ "user '%s' (login '%s' on %s) switched to group '%s'",
+ name, loginname, tty, group));
+#ifdef USE_PAM
+ /*
+ * We want to fork and exec the new shell in the child, leaving the
+ * parent waiting to log the session close.
+ *
+ * The parent must ignore signals generated from the console
+ * (SIGINT, SIGQUIT, SIGHUP) which might make the parent terminate
+ * before its child. When bash is exec'ed as the subshell, it
+ * generates a new process group id for itself, and consequently
+ * only SIGHUP, which is sent to all process groups in the session,
+ * can reach the parent. However, since arbitrary programs can be
+ * specified as login shells, there is no such guarantee in general.
+ * For the same reason, we must also ignore stop signals generated
+ * from the console (SIGTSTP, SIGTTIN, and SIGTTOU) in order to
+ * avoid any possibility of the parent being stopped when it
+ * receives SIGCHLD from the terminating subshell. -- JWP
+ */
+ {
+ pid_t child;
+
+ /* Ignore these signals. The signal handlers will later be
+ * restored to the default handlers. */
+ (void) signal (SIGINT, SIG_IGN);
+ (void) signal (SIGQUIT, SIG_IGN);
+ (void) signal (SIGHUP, SIG_IGN);
+ (void) signal (SIGTSTP, SIG_IGN);
+ (void) signal (SIGTTIN, SIG_IGN);
+ (void) signal (SIGTTOU, SIG_IGN);
+ child = fork ();
+ if ((pid_t)-1 == child) {
+ /* error in fork() */
+ fprintf (stderr, _("%s: failure forking: %s\n"),
+ is_newgrp ? "newgrp" : "sg", strerror (errno));
+#ifdef WITH_AUDIT
+ if (group) {
+ snprintf (audit_buf, sizeof(audit_buf),
+ "changing new-group=%s", group);
+ audit_logger (AUDIT_CHGRP_ID, Prog,
+ audit_buf, NULL,
+ (unsigned int) getuid (), 0);
+ } else {
+ audit_logger (AUDIT_CHGRP_ID, Prog,
+ "changing", NULL,
+ (unsigned int) getuid (), 0);
+ }
+#endif
+ exit (EXIT_FAILURE);
+ } else if (child != 0) {
+ /* parent - wait for child to finish, then log session close */
+ int cst = 0;
+ gid_t gid = getgid();
+ struct group *grp = getgrgid (gid);
+ pid_t pid;
+
+ do {
+ errno = 0;
+ pid = waitpid (child, &cst, WUNTRACED);
+ if ((pid == child) && (WIFSTOPPED (cst) != 0)) {
+ /* The child (shell) was suspended.
+ * Suspend sg/newgrp. */
+ kill (getpid (), SIGSTOP);
+ /* wake child when resumed */
+ kill (child, SIGCONT);
+ }
+ } while ( ((pid == child) && (WIFSTOPPED (cst) != 0))
+ || ((pid != child) && (errno == EINTR)));
+ /* local, no need for xgetgrgid */
+ if (NULL != grp) {
+ SYSLOG ((LOG_INFO,
+ "user '%s' (login '%s' on %s) returned to group '%s'",
+ name, loginname, tty, grp->gr_name));
+ } else {
+ SYSLOG ((LOG_INFO,
+ "user '%s' (login '%s' on %s) returned to group '%lu'",
+ name, loginname, tty,
+ (unsigned long) gid));
+ /* Either the user's passwd entry has a
+ * GID that does not match with any group,
+ * or the group was deleted while the user
+ * was in a newgrp session.*/
+ SYSLOG ((LOG_WARN,
+ "unknown GID '%lu' used by user '%s'",
+ (unsigned long) gid, name));
+ }
+ closelog ();
+ exit ((0 != WIFEXITED (cst)) ? WEXITSTATUS (cst)
+ : WTERMSIG (cst) + 128);
+ }
+
+ /* child - restore signals to their default state */
+ (void) signal (SIGINT, SIG_DFL);
+ (void) signal (SIGQUIT, SIG_DFL);
+ (void) signal (SIGHUP, SIG_DFL);
+ (void) signal (SIGTSTP, SIG_DFL);
+ (void) signal (SIGTTIN, SIG_DFL);
+ (void) signal (SIGTTOU, SIG_DFL);
+ }
+#endif /* USE_PAM */
+ free(free_login);
+ free(free_tty);
+}
+#endif /* USE_SYSLOG */
+
+/*
+ * newgrp - change the invokers current real and effective group id
+ */
+int main (int argc, char **argv)
+{
+ bool initflag = false;
+ int i;
+ bool is_member = false;
+ bool cflag = false;
+ int err = 0;
+ gid_t gid;
+ char *cp;
+ char *progbase;
+ const char *name, *prog;
+ char *group = NULL;
+ char *command = NULL;
+ char **envp = environ;
+ struct passwd *pwd;
+ /*@null@*/struct group *grp;
+
+#ifdef SHADOWGRP
+ struct sgrp *sgrp;
+#endif
+
+#ifdef WITH_AUDIT
+ audit_help_open ();
+#endif
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ /*
+ * Save my name for error messages and save my real gid incase of
+ * errors. If there is an error i have to exec a new login shell for
+ * the user since her old shell won't have fork'd to create the
+ * process. Skip over the program name to the next command line
+ * argument.
+ *
+ * This historical comment, and the code itself, suggest that the
+ * behavior of the system/shell on which it was written differed
+ * significantly from the one I am using. If this process was
+ * started from a shell (including the login shell), it was fork'ed
+ * and exec'ed as a child by that shell. In order to get the user
+ * back to that shell, it is only necessary to exit from this
+ * process which terminates the child of the fork. The parent shell,
+ * which is blocked waiting for a signal, will then receive a
+ * SIGCHLD and will continue; any changes made to the process
+ * persona or the environment after the fork never occurred in the
+ * parent process.
+ *
+ * Bottom line: we want to save the name and real gid for messages,
+ * but we do not need to restore the previous process persona and we
+ * don't need to re-exec anything. -- JWP
+ */
+ Prog = Basename (argv[0]);
+ is_newgrp = (strcmp (Prog, "newgrp") == 0);
+ OPENLOG (is_newgrp ? "newgrp" : "sg");
+ gid = getgid ();
+ argc--;
+ argv++;
+
+ initenv ();
+
+ pwd = get_my_pwent ();
+ if (NULL == pwd) {
+ fprintf (stderr, _("%s: Cannot determine your user name.\n"),
+ Prog);
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_CHGRP_ID, Prog,
+ "changing", NULL,
+ (unsigned int) getuid (), 0);
+#endif
+ SYSLOG ((LOG_WARN, "Cannot determine the user name of the caller (UID %lu)",
+ (unsigned long) getuid ()));
+ closelog ();
+ exit (EXIT_FAILURE);
+ }
+ name = pwd->pw_name;
+
+ /*
+ * Parse the command line. There are two accepted flags. The first
+ * is "-", which for newgrp means to re-create the entire
+ * environment as though a login had been performed, and "-c", which
+ * for sg causes a command string to be executed.
+ *
+ * The next argument, if present, must be the new group name. Any
+ * remaining remaining arguments will be used to execute a command
+ * as the named group. If the group name isn't present, I just use
+ * the login group ID of the current user.
+ *
+ * The valid syntax are
+ * newgrp [-] [groupid]
+ * newgrp [-l] [groupid]
+ * sg [-]
+ * sg [-] groupid [[-c command]
+ */
+ if ( (argc > 0)
+ && ( (strcmp (argv[0], "-") == 0)
+ || (strcmp (argv[0], "-l") == 0))) {
+ argc--;
+ argv++;
+ initflag = true;
+ }
+ if (!is_newgrp) {
+ /*
+ * Do the command line for everything that is
+ * not "newgrp".
+ */
+ if ((argc > 0) && (argv[0][0] != '-')) {
+ group = argv[0];
+ argc--;
+ argv++;
+ } else {
+ usage ();
+ closelog ();
+ exit (EXIT_FAILURE);
+ }
+ if (argc > 0) {
+
+ /*
+ * skip -c if specified so both forms work:
+ * "sg group -c command" (as in the man page) or
+ * "sg group command" (as in the usage message).
+ */
+ if ((argc > 1) && (strcmp (argv[0], "-c") == 0)) {
+ command = argv[1];
+ } else {
+ command = argv[0];
+ }
+ cflag = true;
+ }
+ } else {
+ /*
+ * Do the command line for "newgrp". It's just making sure
+ * there aren't any flags and getting the new group name.
+ */
+ if ((argc > 0) && (argv[0][0] == '-')) {
+ usage ();
+ goto failure;
+ } else if (argv[0] != (char *) 0) {
+ group = argv[0];
+ } else {
+ /*
+ * get the group file entry for her login group id.
+ * the entry must exist, simply to be annoying.
+ *
+ * Perhaps in the past, but the default behavior now depends on the
+ * group entry, so it had better exist. -- JWP
+ */
+ grp = xgetgrgid (pwd->pw_gid);
+ if (NULL == grp) {
+ fprintf (stderr,
+ _("%s: GID '%lu' does not exist\n"),
+ Prog, (unsigned long) pwd->pw_gid);
+ SYSLOG ((LOG_CRIT, "GID '%lu' does not exist",
+ (unsigned long) pwd->pw_gid));
+ goto failure;
+ } else {
+ group = grp->gr_name;
+ }
+ }
+ }
+
+#ifdef HAVE_SETGROUPS
+ /*
+ * get the current users groupset. The new group will be added to
+ * the concurrent groupset if there is room, otherwise you get a
+ * nasty message but at least your real and effective group id's are
+ * set.
+ */
+ /* don't use getgroups(0, 0) - it doesn't work on some systems */
+ i = 16;
+ for (;;) {
+ grouplist = (GETGROUPS_T *) xmalloc (i * sizeof (GETGROUPS_T));
+ ngroups = getgroups (i, grouplist);
+ if (i > ngroups && !(ngroups == -1 && errno == EINVAL)) {
+ break;
+ }
+ /* not enough room, so try allocating a larger buffer */
+ free (grouplist);
+ i *= 2;
+ }
+ if (ngroups < 0) {
+ perror ("getgroups");
+#ifdef WITH_AUDIT
+ if (group) {
+ snprintf (audit_buf, sizeof(audit_buf),
+ "changing new-group=%s", group);
+ audit_logger (AUDIT_CHGRP_ID, Prog,
+ audit_buf, NULL,
+ (unsigned int) getuid (), 0);
+ } else {
+ audit_logger (AUDIT_CHGRP_ID, Prog,
+ "changing", NULL,
+ (unsigned int) getuid (), 0);
+ }
+#endif
+ exit (EXIT_FAILURE);
+ }
+#endif /* HAVE_SETGROUPS */
+
+ /*
+ * now we put her in the new group. The password file entry for her
+ * current user id has been gotten. If there was no optional group
+ * argument she will have her real and effective group id set to the
+ * set to the value from her password file entry.
+ *
+ * If run as newgrp, or as sg with no command, this process exec's
+ * an interactive subshell with the effective GID of the new group.
+ * If run as sg with a command, that command is exec'ed in this
+ * subshell. When this process terminates, either because the user
+ * exits, or the command completes, the parent of this process
+ * resumes with the current GID.
+ *
+ * If a group is explicitly specified on the command line, the
+ * interactive shell or command is run with that effective GID.
+ * Access will be denied if no entry for that group can be found in
+ * /etc/group. If the current user name appears in the members list
+ * for that group, access will be granted immediately; if not, the
+ * user will be challenged for that group's password. If the
+ * password response is incorrect, if the specified group does not
+ * have a password, or if that group has been locked by gpasswd -R,
+ * access will be denied. This is true even if the group specified
+ * has the user's login GID (as shown in /etc/passwd). If no group
+ * is explicitly specified on the command line, the effect is
+ * exactly the same as if a group name matching the user's login GID
+ * had been explicitly specified. Root, however, is never
+ * challenged for passwords, and is always allowed access.
+ *
+ * The previous behavior was to allow access to the login group if
+ * no explicit group was specified, irrespective of the group
+ * control file(s). This behavior is usually not desirable. A user
+ * wishing to return to the login group has only to exit back to the
+ * login shell. Generating yet more shell levels in order to
+ * provide a convenient "return" to the default group has the
+ * undesirable side effects of confusing the user, scrambling the
+ * history file, and consuming system resources. The default now is
+ * to lock out such behavior. A sys admin can allow it by explicitly
+ * including the user's name in the member list of the user's login
+ * group. -- JWP
+ */
+ grp = getgrnam (group); /* local, no need for xgetgrnam */
+ if (NULL == grp) {
+ fprintf (stderr, _("%s: group '%s' does not exist\n"), Prog, group);
+ goto failure;
+ }
+
+#ifdef HAVE_SETGROUPS
+ /* when using pam_group, she will not be listed in the groups
+ * database. However getgroups() will return the group. So
+ * if she is listed there already it is ok to grant membership.
+ */
+ for (i = 0; i < ngroups; i++) {
+ if (grp->gr_gid == grouplist[i]) {
+ is_member = true;
+ break;
+ }
+ }
+#endif /* HAVE_SETGROUPS */
+ /*
+ * For splitted groups (due to limitations of NIS), check all
+ * groups of the same GID like the requested group for
+ * membership of the current user.
+ */
+ if (!is_member) {
+ grp = find_matching_group (name, grp);
+ if (NULL == grp) {
+ /*
+ * No matching group found. As we already know that
+ * the group exists, this happens only in the case
+ * of a requested group where the user is not member.
+ *
+ * Re-read the group entry for further processing.
+ */
+ grp = xgetgrnam (group);
+ assert (NULL != grp);
+ }
+ }
+#ifdef SHADOWGRP
+ sgrp = getsgnam (group);
+ if (NULL != sgrp) {
+ grp->gr_passwd = sgrp->sg_passwd;
+ grp->gr_mem = sgrp->sg_mem;
+ }
+#endif
+
+ /*
+ * Check if the user is allowed to access this group.
+ */
+ if (!is_member) {
+ check_perms (grp, pwd, group);
+ }
+
+ /*
+ * all successful validations pass through this point. The group id
+ * will be set, and the group added to the concurrent groupset.
+ */
+#ifdef USE_SYSLOG
+ if (getdef_bool ("SYSLOG_SG_ENAB")) {
+ syslog_sg (name, group);
+ }
+#endif /* USE_SYSLOG */
+
+ gid = grp->gr_gid;
+
+#ifdef HAVE_SETGROUPS
+ /*
+ * I am going to try to add her new group id to her concurrent group
+ * set. If the group id is already present i'll just skip this part.
+ * If the group doesn't fit, i'll complain loudly and skip this
+ * part.
+ */
+ for (i = 0; i < ngroups; i++) {
+ if (gid == grouplist[i]) {
+ break;
+ }
+ }
+ if (i == ngroups) {
+ if (ngroups >= sysconf (_SC_NGROUPS_MAX)) {
+ (void) fputs (_("too many groups\n"), stderr);
+ } else {
+ grouplist[ngroups++] = gid;
+ if (setgroups (ngroups, grouplist) != 0) {
+ perror ("setgroups");
+ }
+ }
+ }
+#endif
+
+ /*
+ * Close all files before changing the user/group IDs.
+ *
+ * The needed structure should have been copied before, or
+ * permission to read the database will be required.
+ */
+ endspent ();
+#ifdef SHADOWGRP
+ endsgent ();
+#endif
+ endpwent ();
+ endgrent ();
+
+ /*
+ * Set the effective GID to the new group id and the effective UID
+ * to the real UID. For root, this also sets the real GID to the
+ * new group id.
+ */
+ if (setgid (gid) != 0) {
+ perror ("setgid");
+#ifdef WITH_AUDIT
+ snprintf (audit_buf, sizeof(audit_buf),
+ "changing new-gid=%lu", (unsigned long) gid);
+ audit_logger (AUDIT_CHGRP_ID, Prog,
+ audit_buf, NULL,
+ (unsigned int) getuid (), 0);
+#endif
+ exit (EXIT_FAILURE);
+ }
+
+ if (setuid (getuid ()) != 0) {
+ perror ("setuid");
+#ifdef WITH_AUDIT
+ snprintf (audit_buf, sizeof(audit_buf),
+ "changing new-gid=%lu", (unsigned long) gid);
+ audit_logger (AUDIT_CHGRP_ID, Prog,
+ audit_buf, NULL,
+ (unsigned int) getuid (), 0);
+#endif
+ exit (EXIT_FAILURE);
+ }
+
+ /*
+ * See if the "-c" flag was used. If it was, i just create a shell
+ * command for her using the argument that followed the "-c" flag.
+ */
+ if (cflag) {
+ closelog ();
+ execl (SHELL, "sh", "-c", command, (char *) 0);
+#ifdef WITH_AUDIT
+ snprintf (audit_buf, sizeof(audit_buf),
+ "changing new-gid=%lu", (unsigned long) gid);
+ audit_logger (AUDIT_CHGRP_ID, Prog,
+ audit_buf, NULL,
+ (unsigned int) getuid (), 0);
+#endif
+ perror (SHELL);
+ exit ((errno == ENOENT) ? E_CMD_NOTFOUND : E_CMD_NOEXEC);
+ }
+
+ /*
+ * I have to get the pathname of her login shell. As a favor, i'll
+ * try her environment for a $SHELL value first, and then try the
+ * password file entry. Obviously this shouldn't be in the
+ * restricted command directory since it could be used to leave the
+ * restricted environment.
+ *
+ * Note that the following assumes this user's entry in /etc/passwd
+ * does not have a chroot * prefix. If it does, the * will be copied
+ * verbatim into the exec path. This is probably not an issue
+ * because if this user is operating in a chroot jail, her entry in
+ * the version of /etc/passwd that is accessible here should
+ * probably never have a chroot shell entry (but entries for other
+ * users might). If I have missed something, and this causes you a
+ * problem, try using $SHELL as a workaround; also please notify me
+ * at jparmele@wildbear.com -- JWP
+ */
+ cp = getenv ("SHELL");
+ if (!initflag && (NULL != cp)) {
+ prog = cp;
+ } else if ((NULL != pwd->pw_shell) && ('\0' != pwd->pw_shell[0])) {
+ prog = pwd->pw_shell;
+ } else {
+ prog = SHELL;
+ }
+
+ /*
+ * Now I try to find the basename of the login shell. This will
+ * become argv[0] of the spawned command.
+ */
+ progbase = (char *) Basename ((char *) prog);
+
+ /*
+ * Switch back to her home directory if i am doing login
+ * initialization.
+ */
+ if (initflag) {
+ if (chdir (pwd->pw_dir) != 0) {
+ perror ("chdir");
+ }
+
+ while (NULL != *envp) {
+ if (strncmp (*envp, "PATH=", 5) == 0 ||
+ strncmp (*envp, "HOME=", 5) == 0 ||
+ strncmp (*envp, "SHELL=", 6) == 0 ||
+ strncmp (*envp, "TERM=", 5) == 0)
+ addenv (*envp, NULL);
+
+ envp++;
+ }
+ } else {
+ while (NULL != *envp) {
+ addenv (*envp, NULL);
+ envp++;
+ }
+ }
+
+#ifdef WITH_AUDIT
+ snprintf (audit_buf, sizeof(audit_buf), "changing new-gid=%lu",
+ (unsigned long) gid);
+ audit_logger (AUDIT_CHGRP_ID, Prog,
+ audit_buf, NULL,
+ (unsigned int) getuid (), 1);
+#endif
+ /*
+ * Exec the login shell and go away. We are trying to get back to
+ * the previous environment which should be the user's login shell.
+ */
+ err = shell (prog, initflag ? (char *) 0 : progbase, newenvp);
+ exit ((err == ENOENT) ? E_CMD_NOTFOUND : E_CMD_NOEXEC);
+ /*@notreached@*/
+ failure:
+
+ /*
+ * The previous code, when run as newgrp, re-exec'ed the shell in
+ * the current process with the original gid on error conditions.
+ * See the comment above. This historical behavior now has the
+ * effect of creating unlogged extraneous shell layers when the
+ * command line has an error or there is an authentication failure.
+ * We now just want to exit with error status back to the parent
+ * process. The closelog is probably unnecessary, but it does no
+ * harm. -- JWP
+ */
+ closelog ();
+#ifdef WITH_AUDIT
+ if (NULL != group) {
+ snprintf (audit_buf, sizeof(audit_buf),
+ "changing new-group=%s", group);
+ audit_logger (AUDIT_CHGRP_ID, Prog,
+ audit_buf, NULL,
+ (unsigned int) getuid (), 0);
+ } else {
+ audit_logger (AUDIT_CHGRP_ID, Prog,
+ "changing", NULL,
+ (unsigned int) getuid (), 0);
+ }
+#endif
+ exit (EXIT_FAILURE);
+}
+
diff --git a/src/newuidmap.c b/src/newuidmap.c
new file mode 100644
index 0000000..55d84ba
--- /dev/null
+++ b/src/newuidmap.c
@@ -0,0 +1,186 @@
+/*
+ * Copyright (c) 2013 Eric Biederman
+ * 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>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include "defines.h"
+#include "prototypes.h"
+#include "subordinateio.h"
+#include "idmapping.h"
+
+/*
+ * Global variables
+ */
+const char *Prog;
+
+static bool verify_range(struct passwd *pw, struct map_range *range)
+{
+ /* An empty range is invalid */
+ if (range->count == 0)
+ return false;
+
+ /* Test /etc/subuid */
+ if (have_sub_uids(pw->pw_name, range->lower, range->count))
+ return true;
+
+ /* Allow a process to map its own uid */
+ if ((range->count == 1) && (pw->pw_uid == range->lower))
+ return true;
+
+ return false;
+}
+
+static void verify_ranges(struct passwd *pw, int ranges,
+ struct map_range *mappings)
+{
+ struct map_range *mapping;
+ int idx;
+
+ mapping = mappings;
+ for (idx = 0; idx < ranges; idx++, mapping++) {
+ if (!verify_range(pw, mapping)) {
+ fprintf(stderr, _( "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"),
+ Prog,
+ mapping->upper,
+ mapping->upper + mapping->count,
+ mapping->lower,
+ mapping->lower + mapping->count);
+ exit(EXIT_FAILURE);
+ }
+ }
+}
+
+void usage(void)
+{
+ fprintf(stderr, _("usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"), Prog);
+ exit(EXIT_FAILURE);
+}
+
+/*
+ * newuidmap - Set the uid_map for the specified process
+ */
+int main(int argc, char **argv)
+{
+ char proc_dir_name[32];
+ char *target_str;
+ pid_t target;
+ int proc_dir_fd;
+ int ranges;
+ struct map_range *mappings;
+ struct stat st;
+ struct passwd *pw;
+ int written;
+
+ Prog = Basename (argv[0]);
+
+ /*
+ * The valid syntax are
+ * newuidmap target_pid
+ */
+ if (argc < 2)
+ usage();
+
+ /* Find the process that needs its user namespace
+ * uid mapping set.
+ */
+ target_str = argv[1];
+ if (!get_pid(target_str, &target))
+ usage();
+
+ /* max string length is 6 + 10 + 1 + 1 = 18, allocate 32 bytes */
+ written = snprintf(proc_dir_name, sizeof(proc_dir_name), "/proc/%u/",
+ target);
+ if ((written <= 0) || (written >= sizeof(proc_dir_name))) {
+ fprintf(stderr, "%s: snprintf of proc path failed: %s\n",
+ Prog, strerror(errno));
+ }
+
+ proc_dir_fd = open(proc_dir_name, O_DIRECTORY);
+ if (proc_dir_fd < 0) {
+ fprintf(stderr, _("%s: Could not open proc directory for target %u\n"),
+ Prog, target);
+ return EXIT_FAILURE;
+ }
+
+ /* Who am i? */
+ pw = get_my_pwent ();
+ if (NULL == pw) {
+ fprintf (stderr,
+ _("%s: Cannot determine your user name.\n"),
+ Prog);
+ SYSLOG ((LOG_WARN, "Cannot determine the user name of the caller (UID %lu)",
+ (unsigned long) getuid ()));
+ return EXIT_FAILURE;
+ }
+
+ /* Get the effective uid and effective gid of the target process */
+ if (fstat(proc_dir_fd, &st) < 0) {
+ fprintf(stderr, _("%s: Could not stat directory for target %u\n"),
+ Prog, target);
+ return EXIT_FAILURE;
+ }
+
+ /* Verify real user and real group matches the password entry
+ * and the effective user and group of the program whose
+ * mappings we have been asked to set.
+ */
+ if ((getuid() != pw->pw_uid) ||
+ (getgid() != pw->pw_gid) ||
+ (pw->pw_uid != st.st_uid) ||
+ (pw->pw_gid != st.st_gid)) {
+ fprintf(stderr, _( "%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n" ),
+ Prog, target,
+ (unsigned long int)getuid(), (unsigned long int)pw->pw_uid, (unsigned long int)st.st_uid,
+ (unsigned long int)getgid(), (unsigned long int)pw->pw_gid, (unsigned long int)st.st_gid);
+ return EXIT_FAILURE;
+ }
+
+ if (!sub_uid_open(O_RDONLY)) {
+ return EXIT_FAILURE;
+ }
+
+ ranges = ((argc - 2) + 2) / 3;
+ mappings = get_map_ranges(ranges, argc - 2, argv + 2);
+ if (!mappings)
+ usage();
+
+ verify_ranges(pw, ranges, mappings);
+
+ write_mapping(proc_dir_fd, ranges, mappings, "uid_map", pw->pw_uid);
+ sub_uid_close();
+
+ return EXIT_SUCCESS;
+}
diff --git a/src/newusers.c b/src/newusers.c
new file mode 100644
index 0000000..e9fe0e2
--- /dev/null
+++ b/src/newusers.c
@@ -0,0 +1,1324 @@
+/*
+ * Copyright (c) 1990 - 1993, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 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.
+ */
+
+/*
+ * newusers - create users from a batch file
+ *
+ * newusers creates a collection of entries in /etc/passwd
+ * and related files by reading a passwd-format file and
+ * adding entries in the related directories.
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <pwd.h>
+#include <grp.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <ctype.h>
+#include <errno.h>
+#include <string.h>
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+#include "pam_defs.h"
+#endif /* USE_PAM */
+#endif /* ACCT_TOOLS_SETUID */
+#include "prototypes.h"
+#include "defines.h"
+#include "getdef.h"
+#include "groupio.h"
+#include "nscd.h"
+#include "sssd.h"
+#include "pwio.h"
+#include "sgroupio.h"
+#include "shadowio.h"
+#ifdef ENABLE_SUBIDS
+#include "subordinateio.h"
+#endif /* ENABLE_SUBIDS */
+#include "chkname.h"
+
+/*
+ * Global variables
+ */
+const char *Prog;
+
+static bool rflg = false; /* create a system account */
+#ifndef USE_PAM
+static /*@null@*//*@observer@*/char *crypt_method = NULL;
+#define cflg (NULL != crypt_method)
+#if defined(USE_SHA_CRYPT) || defined(USE_BCRYPT)
+static bool sflg = false;
+#endif
+#ifdef USE_SHA_CRYPT
+static long sha_rounds = 5000;
+#endif /* USE_SHA_CRYPT */
+#ifdef USE_BCRYPT
+static long bcrypt_rounds = 13;
+#endif /* USE_BCRYPT */
+#endif /* !USE_PAM */
+
+static bool is_shadow;
+#ifdef SHADOWGRP
+static bool is_shadow_grp;
+static bool sgr_locked = false;
+#endif
+static bool pw_locked = false;
+static bool gr_locked = false;
+static bool spw_locked = false;
+#ifdef ENABLE_SUBIDS
+static bool is_sub_uid = false;
+static bool is_sub_gid = false;
+static bool sub_uid_locked = false;
+static bool sub_gid_locked = false;
+#endif /* ENABLE_SUBIDS */
+
+/* local function prototypes */
+static void usage (int status);
+static void fail_exit (int);
+static int add_group (const char *, const char *, gid_t *, gid_t);
+static int get_user_id (const char *, uid_t *);
+static int add_user (const char *, uid_t, gid_t);
+#ifndef USE_PAM
+static int update_passwd (struct passwd *, const char *);
+#endif /* !USE_PAM */
+static int add_passwd (struct passwd *, const char *);
+static void process_flags (int argc, char **argv);
+static void check_flags (void);
+static void check_perms (void);
+static void open_files (void);
+static void close_files (void);
+
+extern int allow_bad_names;
+
+/*
+ * usage - display usage message and exit
+ */
+static void usage (int status)
+{
+ FILE *usageout = (EXIT_SUCCESS != status) ? stderr : stdout;
+ (void) fprintf (usageout,
+ _("Usage: %s [options]\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+ (void) fputs (_(" -b, --badnames allow bad names\n"), usageout);
+#ifndef USE_PAM
+ (void) fprintf (usageout,
+ _(" -c, --crypt-method METHOD the crypt method (one of %s)\n"),
+#if !defined(USE_SHA_CRYPT) && !defined(USE_BCRYPT)
+ "NONE DES MD5"
+#elif defined(USE_SHA_CRYPT) && defined(USE_BCRYPT)
+ "NONE DES MD5 SHA256 SHA512 BCRYPT"
+#elif defined(USE_SHA_CRYPT)
+ "NONE DES MD5 SHA256 SHA512"
+#else
+ "NONE DES MD5 BCRYPT"
+#endif
+ );
+#endif /* !USE_PAM */
+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
+ (void) fputs (_(" -r, --system create system accounts\n"), usageout);
+ (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
+#ifndef USE_PAM
+#if defined(USE_SHA_CRYPT) || defined(USE_BCRYPT)
+ (void) fputs (_(" -s, --sha-rounds number of rounds for the SHA or BCRYPT\n"
+ " crypt algorithms\n"),
+ usageout);
+#endif /* USE_SHA_CRYPT || USE_BCRYPT */
+#endif /* !USE_PAM */
+ (void) fputs ("\n", usageout);
+
+ exit (status);
+}
+
+/*
+ * fail_exit - undo as much as possible
+ */
+static void fail_exit (int code)
+{
+ if (spw_locked) {
+ if (spw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+ /* continue */
+ }
+ }
+ if (pw_locked) {
+ if (pw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+ /* continue */
+ }
+ }
+ if (gr_locked) {
+ if (gr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+ /* continue */
+ }
+ }
+#ifdef SHADOWGRP
+ if (sgr_locked) {
+ if (sgr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+ /* continue */
+ }
+ }
+#endif
+#ifdef ENABLE_SUBIDS
+ if (sub_uid_locked) {
+ if (sub_uid_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_uid_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sub_uid_dbname ()));
+ /* continue */
+ }
+ }
+ if (sub_gid_locked) {
+ if (sub_gid_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_gid_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sub_gid_dbname ()));
+ /* continue */
+ }
+ }
+#endif /* ENABLE_SUBIDS */
+
+ exit (code);
+}
+
+/*
+ * add_group - create a new group or add a user to an existing group
+ */
+static int add_group (const char *name, const char *gid, gid_t *ngid, uid_t uid)
+{
+ const struct group *grp;
+ struct group grent;
+ char *members[1];
+#ifdef SHADOWGRP
+ const struct sgrp *sg;
+#endif
+
+ /*
+ * Start by seeing if the named group already exists. This will be
+ * very easy to deal with if it does.
+ */
+ grp = getgrnam (gid);
+ if (NULL == grp) {
+ grp = gr_locate (gid);
+ }
+ if (NULL != grp) {
+ /* The user will use this ID for her primary group */
+ *ngid = grp->gr_gid;
+ /* Don't check gshadow */
+ return 0;
+ }
+
+ if (isdigit (gid[0])) {
+ /*
+ * The GID is a number, which means either this is a brand
+ * new group, or an existing group.
+ */
+
+ if (get_gid (gid, &grent.gr_gid) == 0) {
+ fprintf (stderr,
+ _("%s: invalid group ID '%s'\n"),
+ Prog, gid);
+ return -1;
+ }
+
+ /* Look in both the system database (getgrgid) and in the
+ * internal database (gr_locate_gid), which may contain
+ * uncommitted changes */
+ if ( (getgrgid ((gid_t) grent.gr_gid) != NULL)
+ || (gr_locate_gid ((gid_t) grent.gr_gid) != NULL)) {
+ /* The user will use this ID for her
+ * primary group */
+ *ngid = (gid_t) grent.gr_gid;
+ return 0;
+ }
+
+ /* Do not create groups with GID == (gid_t)-1 */
+ if (grent.gr_gid == (gid_t)-1) {
+ fprintf (stderr,
+ _("%s: invalid group ID '%s'\n"),
+ Prog, gid);
+ return -1;
+ }
+ } else {
+ /* The gid parameter can be "" or a name which is not
+ * already the name of an existing group.
+ * In both cases, figure out what group ID can be used.
+ */
+ if (find_new_gid(rflg, &grent.gr_gid, &uid) < 0) {
+ return -1;
+ }
+ }
+
+ /*
+ * Now I have all of the fields required to create the new group.
+ */
+ if (('\0' != gid[0]) && (!isdigit (gid[0]))) {
+ grent.gr_name = xstrdup (gid);
+ } else {
+ grent.gr_name = xstrdup (name);
+/* FIXME: check if the group exists */
+ }
+
+ /* Check if this is a valid group name */
+ if (!is_valid_group_name (grent.gr_name)) {
+ fprintf (stderr,
+ _("%s: invalid group name '%s'\n"),
+ Prog, grent.gr_name);
+ if (grent.gr_name)
+ free (grent.gr_name);
+ return -1;
+ }
+
+ grent.gr_passwd = "*"; /* XXX warning: const */
+ members[0] = NULL;
+ grent.gr_mem = members;
+
+ *ngid = grent.gr_gid;
+
+#ifdef SHADOWGRP
+ if (is_shadow_grp) {
+ sg = sgr_locate (grent.gr_name);
+
+ if (NULL != sg) {
+ fprintf (stderr,
+ _("%s: group '%s' is a shadow group, but does not exist in /etc/group\n"),
+ Prog, grent.gr_name);
+ return -1;
+ }
+ }
+#endif
+
+#ifdef SHADOWGRP
+ if (is_shadow_grp) {
+ struct sgrp sgrent;
+ char *admins[1];
+ sgrent.sg_name = grent.gr_name;
+ sgrent.sg_passwd = "*"; /* XXX warning: const */
+ grent.gr_passwd = "x"; /* XXX warning: const */
+ admins[0] = NULL;
+ sgrent.sg_adm = admins;
+ sgrent.sg_mem = members;
+
+ if (sgr_update (&sgrent) == 0) {
+ return -1;
+ }
+ }
+#endif
+
+ if (gr_update (&grent) == 0) {
+ return -1;
+ }
+
+ return 0;
+}
+
+static int get_user_id (const char *uid, uid_t *nuid) {
+
+ /*
+ * The first guess for the UID is either the numerical UID that the
+ * caller provided, or the next available UID.
+ */
+ if (isdigit (uid[0])) {
+ if ((get_uid (uid, nuid) == 0) || (*nuid == (uid_t)-1)) {
+ fprintf (stderr,
+ _("%s: invalid user ID '%s'\n"),
+ Prog, uid);
+ return -1;
+ }
+ } else {
+ if ('\0' != uid[0]) {
+ const struct passwd *pwd;
+ /* local, no need for xgetpwnam */
+ pwd = getpwnam (uid);
+ if (NULL == pwd) {
+ pwd = pw_locate (uid);
+ }
+
+ if (NULL != pwd) {
+ *nuid = pwd->pw_uid;
+ } else {
+ fprintf (stderr,
+ _("%s: user '%s' does not exist\n"),
+ Prog, uid);
+ return -1;
+ }
+ } else {
+ if (find_new_uid (rflg, nuid, NULL) < 0) {
+ return -1;
+ }
+ }
+ }
+
+ return 0;
+}
+
+/*
+ * add_user - create a new user ID
+ */
+static int add_user (const char *name, uid_t uid, gid_t gid)
+{
+ struct passwd pwent;
+
+ /* Check if this is a valid user name */
+ if (!is_valid_user_name (name)) {
+ fprintf (stderr,
+ _("%s: invalid user name '%s'\n"),
+ Prog, name);
+ return -1;
+ }
+
+ /*
+ * I don't want to fill in the entire password structure members
+ * JUST YET, since there is still more data to be added. So, I fill
+ * in the parts that I have.
+ */
+ pwent.pw_name = xstrdup (name);
+ pwent.pw_uid = uid;
+ pwent.pw_passwd = "x"; /* XXX warning: const */
+ pwent.pw_gid = gid;
+ pwent.pw_gecos = ""; /* XXX warning: const */
+ pwent.pw_dir = ""; /* XXX warning: const */
+ pwent.pw_shell = ""; /* XXX warning: const */
+
+ return (pw_update (&pwent) == 0) ? -1 : 0;
+}
+
+#ifndef USE_PAM
+/*
+ * update_passwd - update the password in the passwd entry
+ *
+ * Return 0 if successful.
+ */
+static int update_passwd (struct passwd *pwd, const char *password)
+{
+ void *crypt_arg = NULL;
+ char *cp;
+ if (NULL != crypt_method) {
+#if defined(USE_SHA_CRYPT) && defined(USE_BCRYPT)
+ if (sflg) {
+ if ( (0 == strcmp (crypt_method, "SHA256"))
+ || (0 == strcmp (crypt_method, "SHA512"))) {
+ crypt_arg = &sha_rounds;
+ }
+ else if (0 == strcmp (crypt_method, "BCRYPT")) {
+ crypt_arg = &bcrypt_rounds;
+ }
+ }
+#elif defined(USE_SHA_CRYPT)
+ if (sflg) {
+ crypt_arg = &sha_rounds;
+ }
+#elif defined(USE_BCRYPT)
+ if (sflg) {
+ crypt_arg = &bcrypt_rounds;
+ }
+#endif
+ }
+
+ if ((NULL != crypt_method) && (0 == strcmp(crypt_method, "NONE"))) {
+ pwd->pw_passwd = (char *)password;
+ } else {
+ const char *salt = crypt_make_salt (crypt_method, crypt_arg);
+ cp = pw_encrypt (password, salt);
+ if (NULL == cp) {
+ fprintf (stderr,
+ _("%s: failed to crypt password with salt '%s': %s\n"),
+ Prog, salt, strerror (errno));
+ return 1;
+ }
+ pwd->pw_passwd = cp;
+ }
+
+ return 0;
+}
+#endif /* !USE_PAM */
+
+/*
+ * add_passwd - add or update the encrypted password
+ */
+static int add_passwd (struct passwd *pwd, const char *password)
+{
+ const struct spwd *sp;
+ struct spwd spent;
+ char *cp;
+
+#ifndef USE_PAM
+ void *crypt_arg = NULL;
+ if (NULL != crypt_method) {
+#if defined(USE_SHA_CRYPT) && defined(USE_BCRYPT)
+ if (sflg) {
+ if ( (0 == strcmp (crypt_method, "SHA256"))
+ || (0 == strcmp (crypt_method, "SHA512"))) {
+ crypt_arg = &sha_rounds;
+ }
+ else if (0 == strcmp (crypt_method, "BCRYPT")) {
+ crypt_arg = &bcrypt_rounds;
+ }
+ }
+#elif defined(USE_SHA_CRYPT)
+ if (sflg) {
+ crypt_arg = &sha_rounds;
+ }
+#elif defined(USE_BCRYPT)
+ if (sflg) {
+ crypt_arg = &bcrypt_rounds;
+ }
+#endif
+ }
+
+ /*
+ * In the case of regular password files, this is real easy - pwd
+ * points to the entry in the password file. Shadow files are
+ * harder since there are zillions of things to do ...
+ */
+ if (!is_shadow) {
+ return update_passwd (pwd, password);
+ }
+#endif /* USE_PAM */
+
+ /*
+ * Do the first and easiest shadow file case. The user already
+ * exists in the shadow password file.
+ */
+ sp = spw_locate (pwd->pw_name);
+#ifndef USE_PAM
+ if (NULL != sp) {
+ spent = *sp;
+ if ( (NULL != crypt_method)
+ && (0 == strcmp(crypt_method, "NONE"))) {
+ spent.sp_pwdp = (char *)password;
+ } else {
+ const char *salt = crypt_make_salt (crypt_method,
+ crypt_arg);
+ cp = pw_encrypt (password, salt);
+ if (NULL == cp) {
+ fprintf (stderr,
+ _("%s: failed to crypt password with salt '%s': %s\n"),
+ Prog, salt, strerror (errno));
+ return 1;
+ }
+ spent.sp_pwdp = cp;
+ }
+ spent.sp_lstchg = (long) gettime () / SCALE;
+ if (0 == spent.sp_lstchg) {
+ /* Better disable aging than requiring a password
+ * change */
+ spent.sp_lstchg = -1;
+ }
+ return (spw_update (&spent) == 0);
+ }
+
+ /*
+ * Pick the next easiest case - the user has an encrypted password
+ * which isn't equal to "x". The password was set to "x" earlier
+ * when the entry was created, so this user would have to have had
+ * the password set someplace else.
+ */
+ if (strcmp (pwd->pw_passwd, "x") != 0) {
+ return update_passwd (pwd, password);
+ }
+#else /* USE_PAM */
+ /*
+ * If there is already a shadow entry, do not touch it.
+ * If there is already a passwd entry with a password, do not
+ * touch it.
+ * The password will be updated later for all users using PAM.
+ */
+ if ( (NULL != sp)
+ || (strcmp (pwd->pw_passwd, "x") != 0)) {
+ return 0;
+ }
+#endif /* USE_PAM */
+
+ /*
+ * Now the really hard case - I need to create an entirely new
+ * shadow password file entry.
+ */
+ spent.sp_namp = pwd->pw_name;
+#ifndef USE_PAM
+ if ((crypt_method != NULL) && (0 == strcmp(crypt_method, "NONE"))) {
+ spent.sp_pwdp = (char *)password;
+ } else {
+ const char *salt = crypt_make_salt (crypt_method, crypt_arg);
+ cp = pw_encrypt (password, salt);
+ if (NULL == cp) {
+ fprintf (stderr,
+ _("%s: failed to crypt password with salt '%s': %s\n"),
+ Prog, salt, strerror (errno));
+ return 1;
+ }
+ spent.sp_pwdp = cp;
+ }
+#else
+ /*
+ * Lock the password.
+ * The password will be updated later for all users using PAM.
+ */
+ spent.sp_pwdp = "!";
+#endif
+ spent.sp_lstchg = (long) gettime () / SCALE;
+ if (0 == spent.sp_lstchg) {
+ /* Better disable aging than requiring a password change */
+ spent.sp_lstchg = -1;
+ }
+ spent.sp_min = getdef_num ("PASS_MIN_DAYS", 0);
+ /* 10000 is infinity this week */
+ spent.sp_max = getdef_num ("PASS_MAX_DAYS", 10000);
+ spent.sp_warn = getdef_num ("PASS_WARN_AGE", -1);
+ spent.sp_inact = -1;
+ spent.sp_expire = -1;
+ spent.sp_flag = SHADOW_SP_FLAG_UNSET;
+
+ return (spw_update (&spent) == 0);
+}
+
+/*
+ * process_flags - parse the command line options
+ *
+ * It will not return if an error is encountered.
+ */
+static void process_flags (int argc, char **argv)
+{
+ int c;
+ static struct option long_options[] = {
+ {"badnames", no_argument, NULL, 'b'},
+#ifndef USE_PAM
+ {"crypt-method", required_argument, NULL, 'c'},
+#endif /* !USE_PAM */
+ {"help", no_argument, NULL, 'h'},
+ {"system", no_argument, NULL, 'r'},
+ {"root", required_argument, NULL, 'R'},
+#ifndef USE_PAM
+#if defined(USE_SHA_CRYPT) || defined(USE_BCRYPT)
+ {"sha-rounds", required_argument, NULL, 's'},
+#endif /* USE_SHA_CRYPT || USE_BCRYPT */
+#endif /* !USE_PAM */
+ {NULL, 0, NULL, '\0'}
+ };
+
+ while ((c = getopt_long (argc, argv,
+#ifndef USE_PAM
+#if defined(USE_SHA_CRYPT) || defined(USE_BCRYPT)
+ "c:bhrs:",
+#else /* !USE_SHA_CRYPT && !USE_BCRYPT */
+ "c:bhr",
+#endif /* USE_SHA_CRYPT || USE_BCRYPT */
+#else /* USE_PAM */
+ "bhr",
+#endif
+ long_options, NULL)) != -1) {
+ switch (c) {
+ case 'b':
+ allow_bad_names = true;
+ break;
+#ifndef USE_PAM
+ case 'c':
+ crypt_method = optarg;
+ break;
+#endif /* !USE_PAM */
+ case 'h':
+ usage (EXIT_SUCCESS);
+ break;
+ case 'r':
+ rflg = true;
+ break;
+ case 'R': /* no-op, handled in process_root_flag () */
+ break;
+#ifndef USE_PAM
+#if defined(USE_SHA_CRYPT) && defined(USE_BCRYPT)
+ case 's':
+ sflg = true;
+ if ( ( ((0 == strcmp (crypt_method, "SHA256")) || (0 == strcmp (crypt_method, "SHA512")))
+ && (0 == getlong(optarg, &sha_rounds)))
+ || ( (0 == strcmp (crypt_method, "BCRYPT"))
+ && (0 == getlong(optarg, &bcrypt_rounds)))) {
+ fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"),
+ Prog, optarg);
+ usage (EXIT_FAILURE);
+ }
+ break;
+#elif defined(USE_SHA_CRYPT)
+ case 's':
+ sflg = true;
+ if (0 == getlong(optarg, &sha_rounds)) {
+ fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"),
+ Prog, optarg);
+ usage (EXIT_FAILURE);
+ }
+ break;
+#elif defined(USE_BCRYPT)
+ case 's':
+ sflg = true;
+ if (0 == getlong(optarg, &bcrypt_rounds)) {
+ fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"),
+ Prog, optarg);
+ usage (EXIT_FAILURE);
+ }
+ break;
+#endif
+#endif /* !USE_PAM */
+ default:
+ usage (EXIT_FAILURE);
+ break;
+ }
+ }
+
+ if ( (optind != argc)
+ && (optind + 1 != argc)) {
+ usage (EXIT_FAILURE);
+ }
+
+ if (argv[optind] != NULL) {
+ if (freopen (argv[optind], "r", stdin) == NULL) {
+ char buf[BUFSIZ];
+ snprintf (buf, sizeof buf, "%s: %s", Prog, argv[1]);
+ perror (buf);
+ fail_exit (EXIT_FAILURE);
+ }
+ }
+
+ /* validate options */
+ check_flags ();
+}
+
+/*
+ * check_flags - check flags and parameters consistency
+ *
+ * It will not return if an error is encountered.
+ */
+static void check_flags (void)
+{
+#ifndef USE_PAM
+#if defined(USE_SHA_CRYPT) || defined(USE_BCRYPT)
+ if (sflg && !cflg) {
+ fprintf (stderr,
+ _("%s: %s flag is only allowed with the %s flag\n"),
+ Prog, "-s", "-c");
+ usage (EXIT_FAILURE);
+ }
+#endif
+
+ if (cflg) {
+ if ( (0 != strcmp (crypt_method, "DES"))
+ && (0 != strcmp (crypt_method, "MD5"))
+ && (0 != strcmp (crypt_method, "NONE"))
+#ifdef USE_SHA_CRYPT
+ && (0 != strcmp (crypt_method, "SHA256"))
+ && (0 != strcmp (crypt_method, "SHA512"))
+#endif /* USE_SHA_CRYPT */
+#ifdef USE_BCRYPT
+ && (0 != strcmp (crypt_method, "BCRYPT"))
+#endif /* USE_BCRYPT */
+ ) {
+ fprintf (stderr,
+ _("%s: unsupported crypt method: %s\n"),
+ Prog, crypt_method);
+ usage (EXIT_FAILURE);
+ }
+ }
+#endif /* !USE_PAM */
+}
+
+/*
+ * check_perms - check if the caller is allowed to add a group
+ *
+ * With PAM support, the setuid bit can be set on groupadd to allow
+ * non-root users to groups.
+ * Without PAM support, only users who can write in the group databases
+ * can add groups.
+ *
+ * It will not return if the user is not allowed.
+ */
+static void check_perms (void)
+{
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+ pam_handle_t *pamh = NULL;
+ int retval;
+ struct passwd *pampw;
+
+ pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
+ if (NULL == pampw) {
+ fprintf (stderr,
+ _("%s: Cannot determine your user name.\n"),
+ Prog);
+ fail_exit (EXIT_FAILURE);
+ }
+
+ retval = pam_start ("newusers", pampw->pw_name, &conv, &pamh);
+
+ if (PAM_SUCCESS == retval) {
+ retval = pam_authenticate (pamh, 0);
+ }
+
+ if (PAM_SUCCESS == retval) {
+ retval = pam_acct_mgmt (pamh, 0);
+ }
+
+ if (PAM_SUCCESS != retval) {
+ fprintf (stderr, _("%s: PAM: %s\n"),
+ Prog, pam_strerror (pamh, retval));
+ SYSLOG((LOG_ERR, "%s", pam_strerror (pamh, retval)));
+ if (NULL != pamh) {
+ (void) pam_end (pamh, retval);
+ }
+ fail_exit (EXIT_FAILURE);
+ }
+ (void) pam_end (pamh, retval);
+#endif /* USE_PAM */
+#endif /* ACCT_TOOLS_SETUID */
+}
+
+/*
+ * open_files - lock and open the password, group and shadow databases
+ */
+static void open_files (void)
+{
+ /*
+ * Lock the password files and open them for update. This will bring
+ * all of the entries into memory where they may be searched for an
+ * modified, or new entries added. The password file is the key - if
+ * it gets locked, assume the others can be locked right away.
+ */
+ if (pw_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, pw_dbname ());
+ fail_exit (EXIT_FAILURE);
+ }
+ pw_locked = true;
+ if (is_shadow) {
+ if (spw_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, spw_dbname ());
+ fail_exit (EXIT_FAILURE);
+ }
+ spw_locked = true;
+ }
+ if (gr_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, gr_dbname ());
+ fail_exit (EXIT_FAILURE);
+ }
+ gr_locked = true;
+#ifdef SHADOWGRP
+ if (is_shadow_grp) {
+ if (sgr_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, sgr_dbname ());
+ fail_exit (EXIT_FAILURE);
+ }
+ sgr_locked = true;
+ }
+#endif
+#ifdef ENABLE_SUBIDS
+ if (is_sub_uid) {
+ if (sub_uid_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, sub_uid_dbname ());
+ fail_exit (EXIT_FAILURE);
+ }
+ sub_uid_locked = true;
+ }
+ if (is_sub_gid) {
+ if (sub_gid_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, sub_gid_dbname ());
+ fail_exit (EXIT_FAILURE);
+ }
+ sub_gid_locked = true;
+ }
+#endif /* ENABLE_SUBIDS */
+
+ if (pw_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr, _("%s: cannot open %s\n"), Prog, pw_dbname ());
+ fail_exit (EXIT_FAILURE);
+ }
+ if (is_shadow && (spw_open (O_CREAT | O_RDWR) == 0)) {
+ fprintf (stderr, _("%s: cannot open %s\n"), Prog, spw_dbname ());
+ fail_exit (EXIT_FAILURE);
+ }
+ if (gr_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr, _("%s: cannot open %s\n"), Prog, gr_dbname ());
+ fail_exit (EXIT_FAILURE);
+ }
+#ifdef SHADOWGRP
+ if (is_shadow_grp && (sgr_open (O_CREAT | O_RDWR) == 0)) {
+ fprintf (stderr, _("%s: cannot open %s\n"), Prog, sgr_dbname ());
+ fail_exit (EXIT_FAILURE);
+ }
+#endif
+#ifdef ENABLE_SUBIDS
+ if (is_sub_uid) {
+ if (sub_uid_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, sub_uid_dbname ());
+ fail_exit (EXIT_FAILURE);
+ }
+ }
+ if (is_sub_gid) {
+ if (sub_gid_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, sub_gid_dbname ());
+ fail_exit (EXIT_FAILURE);
+ }
+ }
+#endif /* ENABLE_SUBIDS */
+}
+
+/*
+ * close_files - close and unlock the password, group and shadow databases
+ */
+static void close_files (void)
+{
+ if (pw_close () == 0) {
+ fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", pw_dbname ()));
+ fail_exit (EXIT_FAILURE);
+ }
+ if (pw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+ /* continue */
+ }
+ pw_locked = false;
+
+ if (is_shadow) {
+ if (spw_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", spw_dbname ()));
+ fail_exit (EXIT_FAILURE);
+ }
+ if (spw_unlock () == 0) {
+ fprintf (stderr,
+ _("%s: failed to unlock %s\n"),
+ Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+ /* continue */
+ }
+ spw_locked = false;
+ }
+
+ if (gr_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", gr_dbname ()));
+ fail_exit (EXIT_FAILURE);
+ }
+#ifdef ENABLE_SUBIDS
+ if (is_sub_uid && (sub_uid_close () == 0)) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"), Prog, sub_uid_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", sub_uid_dbname ()));
+ fail_exit (EXIT_FAILURE);
+ }
+ if (is_sub_gid && (sub_gid_close () == 0)) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"), Prog, sub_gid_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", sub_gid_dbname ()));
+ fail_exit (EXIT_FAILURE);
+ }
+#endif /* ENABLE_SUBIDS */
+
+ if (gr_unlock () == 0) {
+ fprintf (stderr,
+ _("%s: failed to unlock %s\n"),
+ Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+ /* continue */
+ }
+ gr_locked = false;
+
+#ifdef SHADOWGRP
+ if (is_shadow_grp) {
+ if (sgr_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", sgr_dbname ()));
+ fail_exit (EXIT_FAILURE);
+ }
+ if (sgr_unlock () == 0) {
+ fprintf (stderr,
+ _("%s: failed to unlock %s\n"),
+ Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+ /* continue */
+ }
+ sgr_locked = false;
+ }
+#endif
+#ifdef ENABLE_SUBIDS
+ if (is_sub_uid) {
+ if (sub_uid_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_uid_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sub_uid_dbname ()));
+ /* continue */
+ }
+ sub_uid_locked = false;
+ }
+ if (is_sub_gid) {
+ if (sub_gid_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_gid_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sub_gid_dbname ()));
+ /* continue */
+ }
+ sub_gid_locked = false;
+ }
+#endif /* ENABLE_SUBIDS */
+}
+
+int main (int argc, char **argv)
+{
+ char buf[BUFSIZ];
+ char *fields[8];
+ int nfields;
+ char *cp;
+ const struct passwd *pw;
+ struct passwd newpw;
+ int errors = 0;
+ int line = 0;
+ uid_t uid;
+ gid_t gid;
+#ifdef USE_PAM
+ int *lines = NULL;
+ char **usernames = NULL;
+ char **passwords = NULL;
+ unsigned int nusers = 0;
+#endif /* USE_PAM */
+
+ Prog = Basename (argv[0]);
+
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ /* FIXME: will not work with an input file */
+ process_root_flag ("-R", argc, argv);
+
+ OPENLOG ("newusers");
+
+ process_flags (argc, argv);
+
+ check_perms ();
+
+ is_shadow = spw_file_present ();
+
+#ifdef SHADOWGRP
+ is_shadow_grp = sgr_file_present ();
+#endif
+#ifdef ENABLE_SUBIDS
+ is_sub_uid = sub_uid_file_present () && !rflg;
+ is_sub_gid = sub_gid_file_present () && !rflg;
+#endif /* ENABLE_SUBIDS */
+
+ open_files ();
+
+ /*
+ * Read each line. The line has the same format as a password file
+ * entry, except that certain fields are not constrained to be
+ * numerical values. If a group ID is entered which does not already
+ * exist, an attempt is made to allocate the same group ID as the
+ * numerical user ID. Should that fail, the next available group ID
+ * over 100 is allocated. The pw_gid field will be updated with that
+ * value.
+ */
+ while (fgets (buf, (int) sizeof buf, stdin) != (char *) 0) {
+ line++;
+ cp = strrchr (buf, '\n');
+ if (NULL != cp) {
+ *cp = '\0';
+ } else {
+ if (feof (stdin) == 0) {
+ fprintf (stderr,
+ _("%s: line %d: line too long\n"),
+ Prog, line);
+ errors++;
+ continue;
+ }
+ }
+
+ /*
+ * Break the string into fields and screw around with them.
+ * There MUST be 7 colon separated fields, although the
+ * values aren't that particular.
+ */
+ for (cp = buf, nfields = 0; nfields < 7; nfields++) {
+ fields[nfields] = cp;
+ cp = strchr (cp, ':');
+ if (NULL != cp) {
+ *cp = '\0';
+ cp++;
+ } else {
+ break;
+ }
+ }
+ if (nfields != 6) {
+ fprintf (stderr, _("%s: line %d: invalid line\n"),
+ Prog, line);
+ errors++;
+ continue;
+ }
+
+ /*
+ * First check if we have to create or update an user
+ */
+ pw = pw_locate (fields[0]);
+ /* local, no need for xgetpwnam */
+ if ( (NULL == pw)
+ && (getpwnam (fields[0]) != NULL)) {
+ fprintf (stderr, _("%s: cannot update the entry of user %s (not in the passwd database)\n"), Prog, fields[0]);
+ errors++;
+ continue;
+ }
+
+ if ( (NULL == pw)
+ && (get_user_id (fields[2], &uid) != 0)) {
+ fprintf (stderr,
+ _("%s: line %d: can't create user\n"),
+ Prog, line);
+ errors++;
+ continue;
+ }
+
+ /*
+ * Processed is the group name. A new group will be
+ * created if the group name is non-numeric and does not
+ * already exist. If the group name is a number (which is not
+ * an existing GID), a group with the same name as the user
+ * will be created, with the given GID. The given or created
+ * group will be the primary group of the user. If
+ * there is no named group to be a member of, the UID will
+ * be figured out and that value will be a candidate for a
+ * new group, if that group ID exists, a whole new group ID
+ * will be made up.
+ */
+ if ( (NULL == pw)
+ && (add_group (fields[0], fields[3], &gid, uid) != 0)) {
+ fprintf (stderr,
+ _("%s: line %d: can't create group\n"),
+ Prog, line);
+ errors++;
+ continue;
+ }
+
+ /*
+ * Now we work on the user ID. It has to be specified either
+ * as a numerical value, or left blank. If it is a numerical
+ * value, that value will be used, otherwise the next
+ * available user ID is computed and used. After this there
+ * will at least be a (struct passwd) for the user.
+ */
+ if ( (NULL == pw)
+ && (add_user (fields[0], uid, gid) != 0)) {
+ fprintf (stderr,
+ _("%s: line %d: can't create user\n"),
+ Prog, line);
+ errors++;
+ continue;
+ }
+
+ /*
+ * The password, gecos field, directory, and shell fields
+ * all come next.
+ */
+ pw = pw_locate (fields[0]);
+ if (NULL == pw) {
+ fprintf (stderr,
+ _("%s: line %d: user '%s' does not exist in %s\n"),
+ Prog, line, fields[0], pw_dbname ());
+ errors++;
+ continue;
+ }
+ newpw = *pw;
+
+#ifdef USE_PAM
+ /* keep the list of user/password for later update by PAM */
+ nusers++;
+ lines = realloc (lines, sizeof (lines[0]) * nusers);
+ usernames = realloc (usernames, sizeof (usernames[0]) * nusers);
+ passwords = realloc (passwords, sizeof (passwords[0]) * nusers);
+ lines[nusers-1] = line;
+ usernames[nusers-1] = strdup (fields[0]);
+ passwords[nusers-1] = strdup (fields[1]);
+#endif /* USE_PAM */
+ if (add_passwd (&newpw, fields[1]) != 0) {
+ fprintf (stderr,
+ _("%s: line %d: can't update password\n"),
+ Prog, line);
+ errors++;
+ continue;
+ }
+ if ('\0' != fields[4][0]) {
+ newpw.pw_gecos = fields[4];
+ }
+
+ if ('\0' != fields[5][0]) {
+ newpw.pw_dir = fields[5];
+ }
+
+ if ('\0' != fields[6][0]) {
+ newpw.pw_shell = fields[6];
+ }
+
+ if ( ('\0' != fields[5][0])
+ && (access (newpw.pw_dir, F_OK) != 0)) {
+/* FIXME: should check for directory */
+ mode_t mode = getdef_num ("HOME_MODE",
+ 0777 & ~getdef_num ("UMASK", GETDEF_DEFAULT_UMASK));
+ if (mkdir (newpw.pw_dir, mode) != 0) {
+ fprintf (stderr,
+ _("%s: line %d: mkdir %s failed: %s\n"),
+ Prog, line, newpw.pw_dir,
+ strerror (errno));
+ } else if (chown (newpw.pw_dir,
+ newpw.pw_uid,
+ newpw.pw_gid) != 0) {
+ fprintf (stderr,
+ _("%s: line %d: chown %s failed: %s\n"),
+ Prog, line, newpw.pw_dir,
+ strerror (errno));
+ }
+ }
+
+ /*
+ * Update the password entry with the new changes made.
+ */
+ if (pw_update (&newpw) == 0) {
+ fprintf (stderr,
+ _("%s: line %d: can't update entry\n"),
+ Prog, line);
+ errors++;
+ continue;
+ }
+
+#ifdef ENABLE_SUBIDS
+ /*
+ * Add subordinate uids if the user does not have them.
+ */
+ if (is_sub_uid && !sub_uid_assigned(fields[0])) {
+ uid_t sub_uid_start = 0;
+ unsigned long sub_uid_count = 0;
+ if (find_new_sub_uids(fields[0], &sub_uid_start, &sub_uid_count) == 0) {
+ if (sub_uid_add(fields[0], sub_uid_start, sub_uid_count) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare new %s entry\n"),
+ Prog, sub_uid_dbname ());
+ }
+ } else {
+ fprintf (stderr,
+ _("%s: can't find subordinate user range\n"),
+ Prog);
+ errors++;
+ }
+ }
+
+ /*
+ * Add subordinate gids if the user does not have them.
+ */
+ if (is_sub_gid && !sub_gid_assigned(fields[0])) {
+ gid_t sub_gid_start = 0;
+ unsigned long sub_gid_count = 0;
+ if (find_new_sub_gids(fields[0], &sub_gid_start, &sub_gid_count) == 0) {
+ if (sub_gid_add(fields[0], sub_gid_start, sub_gid_count) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare new %s entry\n"),
+ Prog, sub_uid_dbname ());
+ }
+ } else {
+ fprintf (stderr,
+ _("%s: can't find subordinate group range\n"),
+ Prog);
+ errors++;
+ }
+ }
+#endif /* ENABLE_SUBIDS */
+ }
+
+ /*
+ * Any detected errors will cause the entire set of changes to be
+ * aborted. Unlocking the password file will cause all of the
+ * changes to be ignored. Otherwise the file is closed, causing the
+ * changes to be written out all at once, and then unlocked
+ * afterwards.
+ */
+ if (0 != errors) {
+ fprintf (stderr,
+ _("%s: error detected, changes ignored\n"), Prog);
+ fail_exit (EXIT_FAILURE);
+ }
+
+ close_files ();
+
+ nscd_flush_cache ("passwd");
+ nscd_flush_cache ("group");
+ sssd_flush_cache (SSSD_DB_PASSWD | SSSD_DB_GROUP);
+
+#ifdef USE_PAM
+ unsigned int i;
+ /* Now update the passwords using PAM */
+ for (i = 0; i < nusers; i++) {
+ if (do_pam_passwd_non_interactive ("newusers", usernames[i], passwords[i]) != 0) {
+ fprintf (stderr,
+ _("%s: (line %d, user %s) password not changed\n"),
+ Prog, lines[i], usernames[i]);
+ errors++;
+ }
+ }
+#endif /* USE_PAM */
+
+ return ((0 == errors) ? EXIT_SUCCESS : EXIT_FAILURE);
+}
+
diff --git a/src/nologin.c b/src/nologin.c
new file mode 100644
index 0000000..b137f9c
--- /dev/null
+++ b/src/nologin.c
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2004 The FreeBSD Project.
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+ */
+
+
+#ident "$Id$"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <syslog.h>
+#include <unistd.h>
+
+int main (void)
+{
+ const char *user, *tty;
+ uid_t uid;
+
+ tty = ttyname (0);
+ if (NULL == tty) {
+ tty = "UNKNOWN";
+ }
+ user = getlogin ();
+ if (NULL == user) {
+ user = "UNKNOWN";
+ }
+
+ char *ssh_origcmd = getenv("SSH_ORIGINAL_COMMAND");
+ uid = getuid (); /* getuid() is always successful */
+ openlog ("nologin", LOG_CONS, LOG_AUTH);
+ syslog (LOG_CRIT, "Attempted login by %s (UID: %d) on %s%s%s",
+ user, uid, tty,
+ (ssh_origcmd ? " SSH_ORIGINAL_COMMAND=" : ""),
+ (ssh_origcmd ? ssh_origcmd : ""));
+ closelog ();
+
+ printf ("%s", "This account is currently not available.\n");
+
+ return EXIT_FAILURE;
+}
diff --git a/src/passwd.c b/src/passwd.c
new file mode 100644
index 0000000..13619b1
--- /dev/null
+++ b/src/passwd.c
@@ -0,0 +1,1105 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 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 <errno.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <time.h>
+#include "defines.h"
+#include "getdef.h"
+#include "nscd.h"
+#include "sssd.h"
+#include "prototypes.h"
+#include "pwauth.h"
+#include "pwio.h"
+#include "shadowio.h"
+
+/*
+ * exit status values
+ */
+/*@-exitarg@*/
+#define E_SUCCESS 0 /* success */
+#define E_NOPERM 1 /* permission denied */
+#define E_USAGE 2 /* invalid combination of options */
+#define E_FAILURE 3 /* unexpected failure, nothing done */
+#define E_MISSING 4 /* unexpected failure, passwd file missing */
+#define E_PWDBUSY 5 /* passwd file busy, try again later */
+#define E_BAD_ARG 6 /* invalid argument to option */
+/*
+ * Global variables
+ */
+const char *Prog; /* Program name */
+
+static char *name; /* The name of user whose password is being changed */
+static char *myname; /* The current user's name */
+static bool amroot; /* The caller's real UID was 0 */
+
+static bool
+ aflg = false, /* -a - show status for all users */
+ dflg = false, /* -d - delete password */
+ eflg = false, /* -e - force password change */
+ iflg = false, /* -i - set inactive days */
+ kflg = false, /* -k - change only if expired */
+ lflg = false, /* -l - lock the user's password */
+ nflg = false, /* -n - set minimum days */
+ qflg = false, /* -q - quiet mode */
+ Sflg = false, /* -S - show password status */
+ uflg = false, /* -u - unlock the user's password */
+ wflg = false, /* -w - set warning days */
+ xflg = false; /* -x - set maximum days */
+
+/*
+ * set to 1 if there are any flags which require root privileges,
+ * and require username to be specified
+ */
+static bool anyflag = false;
+
+static long age_min = 0; /* Minimum days before change */
+static long age_max = 0; /* Maximum days until change */
+static long warn = 0; /* Warning days before change */
+static long inact = 0; /* Days without change before locked */
+
+#ifndef USE_PAM
+static bool do_update_age = false;
+#endif /* ! USE_PAM */
+
+static bool pw_locked = false;
+static bool spw_locked = false;
+
+#ifndef USE_PAM
+/*
+ * Size of the biggest passwd:
+ * $6$ 3
+ * rounds= 7
+ * 999999999 9
+ * $ 1
+ * salt 16
+ * $ 1
+ * SHA512 123
+ * nul 1
+ *
+ * total 161
+ */
+static char crypt_passwd[256];
+static bool do_update_pwd = false;
+#endif /* !USE_PAM */
+
+/*
+ * External identifiers
+ */
+
+/* local function prototypes */
+static /*@noreturn@*/void usage (int);
+
+#ifndef USE_PAM
+static bool reuse (const char *, const struct passwd *);
+static int new_password (const struct passwd *);
+
+static void check_password (const struct passwd *, const struct spwd *);
+#endif /* !USE_PAM */
+static /*@observer@*/const char *date_to_str (time_t);
+static /*@observer@*/const char *pw_status (const char *);
+static void print_status (const struct passwd *);
+static /*@noreturn@*/void fail_exit (int);
+static /*@noreturn@*/void oom (void);
+static char *update_crypt_pw (char *);
+static void update_noshadow (void);
+
+static void update_shadow (void);
+
+/*
+ * usage - print command usage and exit
+ */
+static /*@noreturn@*/void usage (int status)
+{
+ FILE *usageout = (E_SUCCESS != status) ? stderr : stdout;
+ (void) fprintf (usageout,
+ _("Usage: %s [options] [LOGIN]\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+ (void) fputs (_(" -a, --all report password status on all accounts\n"), usageout);
+ (void) fputs (_(" -d, --delete delete the password for the named account\n"), usageout);
+ (void) fputs (_(" -e, --expire force expire the password for the named account\n"), usageout);
+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
+ (void) fputs (_(" -k, --keep-tokens change password only if expired\n"), usageout);
+ (void) fputs (_(" -i, --inactive INACTIVE set password inactive after expiration\n"
+ " to INACTIVE\n"), usageout);
+ (void) fputs (_(" -l, --lock lock the password of the named account\n"), usageout);
+ (void) fputs (_(" -n, --mindays MIN_DAYS set minimum number of days before password\n"
+ " change to MIN_DAYS\n"), usageout);
+ (void) fputs (_(" -q, --quiet quiet mode\n"), usageout);
+ (void) fputs (_(" -r, --repository REPOSITORY change password in REPOSITORY repository\n"), usageout);
+ (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
+ (void) fputs (_(" -S, --status report password status on the named account\n"), usageout);
+ (void) fputs (_(" -u, --unlock unlock the password of the named account\n"), usageout);
+ (void) fputs (_(" -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"), usageout);
+ (void) fputs (_(" -x, --maxdays MAX_DAYS set maximum number of days before password\n"
+ " change to MAX_DAYS\n"), usageout);
+ (void) fputs ("\n", usageout);
+ exit (status);
+}
+
+#ifndef USE_PAM
+static bool reuse (const char *pass, const struct passwd *pw)
+{
+#ifdef HAVE_LIBCRACK_HIST
+ const char *reason;
+
+#ifdef HAVE_LIBCRACK_PW
+ const char *FascistHistoryPw (const char *, const struct passwd *);
+
+ reason = FascistHistory (pass, pw);
+#else /* !HAVE_LIBCRACK_PW */
+ const char *FascistHistory (const char *, int);
+
+ reason = FascistHistory (pass, pw->pw_uid);
+#endif /* !HAVE_LIBCRACK_PW */
+ if (NULL != reason) {
+ (void) printf (_("Bad password: %s. "), reason);
+ return true;
+ }
+#endif /* HAVE_LIBCRACK_HIST */
+ return false;
+}
+
+/*
+ * new_password - validate old password and replace with new (both old and
+ * new in global "char crypt_passwd[128]")
+ */
+static int new_password (const struct passwd *pw)
+{
+ char *clear; /* Pointer to clear text */
+ char *cipher; /* Pointer to cipher text */
+ const char *salt; /* Pointer to new salt */
+ char *cp; /* Pointer to getpass() response */
+ char orig[200]; /* Original password */
+ char pass[200]; /* New password */
+ int i; /* Counter for retries */
+ bool warned;
+ int pass_max_len = -1;
+ const char *method;
+
+#ifdef HAVE_LIBCRACK_HIST
+ int HistUpdate (const char *, const char *);
+#endif /* HAVE_LIBCRACK_HIST */
+
+ /*
+ * Authenticate the user. The user will be prompted for their own
+ * password.
+ */
+
+ if (!amroot && ('\0' != crypt_passwd[0])) {
+ clear = getpass (_("Old password: "));
+ if (NULL == clear) {
+ return -1;
+ }
+
+ cipher = pw_encrypt (clear, crypt_passwd);
+
+ if (NULL == cipher) {
+ strzero (clear);
+ fprintf (stderr,
+ _("%s: failed to crypt password with previous salt: %s\n"),
+ Prog, strerror (errno));
+ SYSLOG ((LOG_INFO,
+ "Failed to crypt password with previous salt of user '%s'",
+ pw->pw_name));
+ return -1;
+ }
+
+ if (strcmp (cipher, crypt_passwd) != 0) {
+ strzero (clear);
+ strzero (cipher);
+ SYSLOG ((LOG_WARN, "incorrect password for %s",
+ pw->pw_name));
+ (void) sleep (1);
+ (void) fprintf (stderr,
+ _("Incorrect password for %s.\n"),
+ pw->pw_name);
+ return -1;
+ }
+ STRFCPY (orig, clear);
+ strzero (clear);
+ strzero (cipher);
+ } else {
+ orig[0] = '\0';
+ }
+
+ /*
+ * Get the new password. The user is prompted for the new password
+ * and has five tries to get it right. The password will be tested
+ * for strength, unless it is the root user. This provides an escape
+ * for initial login passwords.
+ */
+ method = getdef_str ("ENCRYPT_METHOD");
+ if (NULL == method) {
+ if (!getdef_bool ("MD5_CRYPT_ENAB")) {
+ pass_max_len = getdef_num ("PASS_MAX_LEN", 8);
+ }
+ } else {
+ if ( (strcmp (method, "MD5") == 0)
+#ifdef USE_SHA_CRYPT
+ || (strcmp (method, "SHA256") == 0)
+ || (strcmp (method, "SHA512") == 0)
+#endif /* USE_SHA_CRYPT */
+#ifdef USE_BCRYPT
+ || (strcmp (method, "BCRYPT") == 0)
+#endif /* USE_SHA_CRYPT */
+
+ ) {
+ pass_max_len = -1;
+ } else {
+ pass_max_len = getdef_num ("PASS_MAX_LEN", 8);
+ }
+ }
+ if (!qflg) {
+ if (pass_max_len == -1) {
+ (void) printf (_(
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"),
+ getdef_num ("PASS_MIN_LEN", 5));
+ } else {
+ (void) printf (_(
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"),
+ getdef_num ("PASS_MIN_LEN", 5), pass_max_len);
+ }
+ }
+
+ warned = false;
+ for (i = getdef_num ("PASS_CHANGE_TRIES", 5); i > 0; i--) {
+ cp = getpass (_("New password: "));
+ if (NULL == cp) {
+ memzero (orig, sizeof orig);
+ return -1;
+ }
+ if (warned && (strcmp (pass, cp) != 0)) {
+ warned = false;
+ }
+ STRFCPY (pass, cp);
+ strzero (cp);
+
+ if (!amroot && (!obscure (orig, pass, pw) || reuse (pass, pw))) {
+ (void) puts (_("Try again."));
+ continue;
+ }
+
+ /*
+ * If enabled, warn about weak passwords even if you are
+ * root (enter this password again to use it anyway).
+ * --marekm
+ */
+ if (amroot && !warned && getdef_bool ("PASS_ALWAYS_WARN")
+ && (!obscure (orig, pass, pw) || reuse (pass, pw))) {
+ (void) puts (_("\nWarning: weak password (enter it again to use it anyway)."));
+ warned = true;
+ continue;
+ }
+ cp = getpass (_("Re-enter new password: "));
+ if (NULL == cp) {
+ memzero (orig, sizeof orig);
+ return -1;
+ }
+ if (strcmp (cp, pass) != 0) {
+ (void) fputs (_("They don't match; try again.\n"), stderr);
+ } else {
+ strzero (cp);
+ break;
+ }
+ }
+ memzero (orig, sizeof orig);
+
+ if (i == 0) {
+ memzero (pass, sizeof pass);
+ return -1;
+ }
+
+ /*
+ * Encrypt the password, then wipe the cleartext password.
+ */
+ salt = crypt_make_salt (NULL, NULL);
+ cp = pw_encrypt (pass, salt);
+ memzero (pass, sizeof pass);
+
+ if (NULL == cp) {
+ fprintf (stderr,
+ _("%s: failed to crypt password with salt '%s': %s\n"),
+ Prog, salt, strerror (errno));
+ return -1;
+ }
+
+#ifdef HAVE_LIBCRACK_HIST
+ HistUpdate (pw->pw_name, crypt_passwd);
+#endif /* HAVE_LIBCRACK_HIST */
+ STRFCPY (crypt_passwd, cp);
+ return 0;
+}
+
+/*
+ * check_password - test a password to see if it can be changed
+ *
+ * check_password() sees if the invoker has permission to change the
+ * password for the given user.
+ */
+static void check_password (const struct passwd *pw, const struct spwd *sp)
+{
+ time_t now;
+ int exp_status;
+
+ exp_status = isexpired (pw, sp);
+
+ /*
+ * If not expired and the "change only if expired" option (idea from
+ * PAM) was specified, do nothing. --marekm
+ */
+ if (kflg && (0 == exp_status)) {
+ exit (E_SUCCESS);
+ }
+
+ /*
+ * Root can change any password any time.
+ */
+ if (amroot) {
+ return;
+ }
+
+ (void) time (&now);
+
+ /*
+ * Expired accounts cannot be changed ever. Passwords which are
+ * locked may not be changed. Passwords where min > max may not be
+ * changed. Passwords which have been inactive too long cannot be
+ * changed.
+ */
+ if ( (sp->sp_pwdp[0] == '!')
+ || (exp_status > 1)
+ || ( (sp->sp_max >= 0)
+ && (sp->sp_min > sp->sp_max))) {
+ (void) fprintf (stderr,
+ _("The password for %s cannot be changed.\n"),
+ sp->sp_namp);
+ SYSLOG ((LOG_WARN, "password locked for '%s'", sp->sp_namp));
+ closelog ();
+ exit (E_NOPERM);
+ }
+
+ /*
+ * Passwords may only be changed after sp_min time is up.
+ */
+ if (sp->sp_lstchg > 0) {
+ time_t ok;
+ ok = (time_t) sp->sp_lstchg * SCALE;
+ if (sp->sp_min > 0) {
+ ok += (time_t) sp->sp_min * SCALE;
+ }
+
+ if (now < ok) {
+ (void) fprintf (stderr,
+ _("The password for %s cannot be changed yet.\n"),
+ pw->pw_name);
+ SYSLOG ((LOG_WARN, "now < minimum age for '%s'", pw->pw_name));
+ closelog ();
+ exit (E_NOPERM);
+ }
+ }
+}
+#endif /* !USE_PAM */
+
+static /*@observer@*/const char *date_to_str (time_t t)
+{
+ static char buf[80];
+ struct tm *tm;
+
+ tm = gmtime (&t);
+#ifdef HAVE_STRFTIME
+ (void) strftime (buf, sizeof buf, "%m/%d/%Y", tm);
+#else /* !HAVE_STRFTIME */
+ (void) snprintf (buf, sizeof buf, "%02d/%02d/%04d",
+ tm->tm_mon + 1, tm->tm_mday, tm->tm_year + 1900);
+#endif /* !HAVE_STRFTIME */
+ return buf;
+}
+
+static /*@observer@*/const char *pw_status (const char *pass)
+{
+ if (*pass == '*' || *pass == '!') {
+ return "L";
+ }
+ if (*pass == '\0') {
+ return "NP";
+ }
+ return "P";
+}
+
+/*
+ * print_status - print current password status
+ */
+static void print_status (const struct passwd *pw)
+{
+ struct spwd *sp;
+
+ sp = getspnam (pw->pw_name); /* local, no need for xgetspnam */
+ if (NULL != sp) {
+ (void) printf ("%s %s %s %lld %lld %lld %lld\n",
+ pw->pw_name,
+ pw_status (sp->sp_pwdp),
+ date_to_str (sp->sp_lstchg * SCALE),
+ ((long long)sp->sp_min * SCALE) / DAY,
+ ((long long)sp->sp_max * SCALE) / DAY,
+ ((long long)sp->sp_warn * SCALE) / DAY,
+ ((long long)sp->sp_inact * SCALE) / DAY);
+ } else {
+ (void) printf ("%s %s\n",
+ pw->pw_name, pw_status (pw->pw_passwd));
+ }
+}
+
+
+static /*@noreturn@*/void fail_exit (int status)
+{
+ if (pw_locked) {
+ if (pw_unlock () == 0) {
+ (void) fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+ /* continue */
+ }
+ }
+
+ if (spw_locked) {
+ if (spw_unlock () == 0) {
+ (void) fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+ /* continue */
+ }
+ }
+
+ exit (status);
+}
+
+static /*@noreturn@*/void oom (void)
+{
+ (void) fprintf (stderr, _("%s: out of memory\n"), Prog);
+ fail_exit (E_FAILURE);
+}
+
+static char *update_crypt_pw (char *cp)
+{
+#ifndef USE_PAM
+ if (do_update_pwd) {
+ cp = xstrdup (crypt_passwd);
+ }
+#endif /* !USE_PAM */
+
+ if (dflg) {
+ *cp = '\0';
+ }
+
+ if (uflg && *cp == '!') {
+ if (cp[1] == '\0') {
+ (void) fprintf (stderr,
+ _("%s: unlocking the password would result in a passwordless account.\n"
+ "You should set a password with usermod -p to unlock the password of this account.\n"),
+ Prog);
+ fail_exit (E_FAILURE);
+ } else {
+ cp++;
+ }
+ }
+
+ if (lflg && *cp != '!') {
+ char *newpw = xmalloc (strlen (cp) + 2);
+
+ strcpy (newpw, "!");
+ strcat (newpw, cp);
+ cp = newpw;
+ }
+ return cp;
+}
+
+
+static void update_noshadow (void)
+{
+ const struct passwd *pw;
+ struct passwd *npw;
+
+ if (pw_lock () == 0) {
+ (void) fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, pw_dbname ());
+ exit (E_PWDBUSY);
+ }
+ pw_locked = true;
+ if (pw_open (O_CREAT | O_RDWR) == 0) {
+ (void) fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, pw_dbname ());
+ SYSLOG ((LOG_WARN, "cannot open %s", pw_dbname ()));
+ fail_exit (E_MISSING);
+ }
+ pw = pw_locate (name);
+ if (NULL == pw) {
+ (void) fprintf (stderr,
+ _("%s: user '%s' does not exist in %s\n"),
+ Prog, name, pw_dbname ());
+ fail_exit (E_NOPERM);
+ }
+ npw = __pw_dup (pw);
+ if (NULL == npw) {
+ oom ();
+ }
+ npw->pw_passwd = update_crypt_pw (npw->pw_passwd);
+ if (pw_update (npw) == 0) {
+ (void) fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, pw_dbname (), npw->pw_name);
+ fail_exit (E_FAILURE);
+ }
+ if (pw_close () == 0) {
+ (void) fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", pw_dbname ()));
+ fail_exit (E_FAILURE);
+ }
+ if (pw_unlock () == 0) {
+ (void) fprintf (stderr,
+ _("%s: failed to unlock %s\n"),
+ Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+ /* continue */
+ }
+ pw_locked = false;
+}
+
+static void update_shadow (void)
+{
+ const struct spwd *sp;
+ struct spwd *nsp;
+
+ if (spw_lock () == 0) {
+ (void) fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, spw_dbname ());
+ exit (E_PWDBUSY);
+ }
+ spw_locked = true;
+ if (spw_open (O_CREAT | O_RDWR) == 0) {
+ (void) fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, spw_dbname ());
+ SYSLOG ((LOG_WARN, "cannot open %s", spw_dbname ()));
+ fail_exit (E_FAILURE);
+ }
+ sp = spw_locate (name);
+ if (NULL == sp) {
+ /* Try to update the password in /etc/passwd instead. */
+ (void) spw_close ();
+ update_noshadow ();
+ if (spw_unlock () == 0) {
+ (void) fprintf (stderr,
+ _("%s: failed to unlock %s\n"),
+ Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+ /* continue */
+ }
+ spw_locked = false;
+ return;
+ }
+ nsp = __spw_dup (sp);
+ if (NULL == nsp) {
+ oom ();
+ }
+ nsp->sp_pwdp = update_crypt_pw (nsp->sp_pwdp);
+ if (xflg) {
+ nsp->sp_max = (age_max * DAY) / SCALE;
+ }
+ if (nflg) {
+ nsp->sp_min = (age_min * DAY) / SCALE;
+ }
+ if (wflg) {
+ nsp->sp_warn = (warn * DAY) / SCALE;
+ }
+ if (iflg) {
+ nsp->sp_inact = (inact * DAY) / SCALE;
+ }
+#ifndef USE_PAM
+ if (do_update_age) {
+ nsp->sp_lstchg = (long) gettime () / SCALE;
+ if (0 == nsp->sp_lstchg) {
+ /* Better disable aging than requiring a password
+ * change */
+ nsp->sp_lstchg = -1;
+ }
+ }
+#endif /* !USE_PAM */
+
+ /*
+ * Force change on next login, like SunOS 4.x passwd -e or Solaris
+ * 2.x passwd -f. Solaris 2.x seems to do the same thing (set
+ * sp_lstchg to 0).
+ */
+ if (eflg) {
+ nsp->sp_lstchg = 0;
+ }
+
+ if (spw_update (nsp) == 0) {
+ (void) fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, spw_dbname (), nsp->sp_namp);
+ fail_exit (E_FAILURE);
+ }
+ if (spw_close () == 0) {
+ (void) fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", spw_dbname ()));
+ fail_exit (E_FAILURE);
+ }
+ if (spw_unlock () == 0) {
+ (void) fprintf (stderr,
+ _("%s: failed to unlock %s\n"),
+ Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+ /* continue */
+ }
+ spw_locked = false;
+}
+
+/*
+ * passwd - change a user's password file information
+ *
+ * This command controls the password file and commands which are used
+ * to modify it.
+ *
+ * The valid options are
+ *
+ * -d delete the password for the named account (*)
+ * -e expire the password for the named account (*)
+ * -f execute chfn command to interpret flags
+ * -g execute gpasswd command to interpret flags
+ * -i # set sp_inact to # days (*)
+ * -k change password only if expired
+ * -l lock the password of the named account (*)
+ * -n # set sp_min to # days (*)
+ * -r # change password in # repository
+ * -s execute chsh command to interpret flags
+ * -S show password status of named account
+ * -u unlock the password of the named account (*)
+ * -w # set sp_warn to # days (*)
+ * -x # set sp_max to # days (*)
+ *
+ * (*) requires root permission to execute.
+ *
+ * All of the time fields are entered in days and converted to the
+ * appropriate internal format. For finer resolute the chage
+ * command must be used.
+ */
+int main (int argc, char **argv)
+{
+ const struct passwd *pw; /* Password file entry for user */
+
+#ifndef USE_PAM
+ char *cp; /* Miscellaneous character pointing */
+
+ const struct spwd *sp; /* Shadow file entry for user */
+#endif /* !USE_PAM */
+
+ sanitize_env ();
+
+ /*
+ * Get the program name. The program name is used as a prefix to
+ * most error messages.
+ */
+ Prog = Basename (argv[0]);
+
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ process_root_flag ("-R", argc, argv);
+
+ /*
+ * The program behaves differently when executed by root than when
+ * executed by a normal user.
+ */
+ amroot = (getuid () == 0);
+
+ OPENLOG ("passwd");
+
+ {
+ /*
+ * Parse the command line options.
+ */
+ int c;
+ static struct option long_options[] = {
+ {"all", no_argument, NULL, 'a'},
+ {"delete", no_argument, NULL, 'd'},
+ {"expire", no_argument, NULL, 'e'},
+ {"help", no_argument, NULL, 'h'},
+ {"inactive", required_argument, NULL, 'i'},
+ {"keep-tokens", no_argument, NULL, 'k'},
+ {"lock", no_argument, NULL, 'l'},
+ {"mindays", required_argument, NULL, 'n'},
+ {"quiet", no_argument, NULL, 'q'},
+ {"repository", required_argument, NULL, 'r'},
+ {"root", required_argument, NULL, 'R'},
+ {"status", no_argument, NULL, 'S'},
+ {"unlock", no_argument, NULL, 'u'},
+ {"warndays", required_argument, NULL, 'w'},
+ {"maxdays", required_argument, NULL, 'x'},
+ {NULL, 0, NULL, '\0'}
+ };
+
+ while ((c = getopt_long (argc, argv, "adehi:kln:qr:R:Suw:x:",
+ long_options, NULL)) != -1) {
+ switch (c) {
+ case 'a':
+ aflg = true;
+ break;
+ case 'd':
+ dflg = true;
+ anyflag = true;
+ break;
+ case 'e':
+ eflg = true;
+ anyflag = true;
+ break;
+ case 'h':
+ usage (E_SUCCESS);
+ /*@notreached@*/break;
+ case 'i':
+ if ( (getlong (optarg, &inact) == 0)
+ || (inact < -1)) {
+ fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"),
+ Prog, optarg);
+ usage (E_BAD_ARG);
+ }
+ iflg = true;
+ anyflag = true;
+ break;
+ case 'k':
+ /* change only if expired, like Linux-PAM passwd -k. */
+ kflg = true; /* ok for users */
+ break;
+ case 'l':
+ lflg = true;
+ anyflag = true;
+ break;
+ case 'n':
+ if ( (getlong (optarg, &age_min) == 0)
+ || (age_min < -1)) {
+ fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"),
+ Prog, optarg);
+ usage (E_BAD_ARG);
+ }
+ nflg = true;
+ anyflag = true;
+ break;
+ case 'q':
+ qflg = true; /* ok for users */
+ break;
+ case 'r':
+ /* -r repository (files|nis|nisplus) */
+ /* only "files" supported for now */
+ if (strcmp (optarg, "files") != 0) {
+ fprintf (stderr,
+ _("%s: repository %s not supported\n"),
+ Prog, optarg);
+ exit (E_BAD_ARG);
+ }
+ break;
+ case 'R': /* no-op, handled in process_root_flag () */
+ break;
+ case 'S':
+ Sflg = true; /* ok for users */
+ break;
+ case 'u':
+ uflg = true;
+ anyflag = true;
+ break;
+ case 'w':
+ if ( (getlong (optarg, &warn) == 0)
+ || (warn < -1)) {
+ (void) fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"),
+ Prog, optarg);
+ usage (E_BAD_ARG);
+ }
+ wflg = true;
+ anyflag = true;
+ break;
+ case 'x':
+ if ( (getlong (optarg, &age_max) == 0)
+ || (age_max < -1)) {
+ (void) fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"),
+ Prog, optarg);
+ usage (E_BAD_ARG);
+ }
+ xflg = true;
+ anyflag = true;
+ break;
+ default:
+ usage (E_BAD_ARG);
+ }
+ }
+ }
+
+ /*
+ * Now I have to get the user name. The name will be gotten from the
+ * command line if possible. Otherwise it is figured out from the
+ * environment.
+ */
+ pw = get_my_pwent ();
+ if (NULL == pw) {
+ (void) fprintf (stderr,
+ _("%s: Cannot determine your user name.\n"),
+ Prog);
+ SYSLOG ((LOG_WARN, "Cannot determine the user name of the caller (UID %lu)",
+ (unsigned long) getuid ()));
+ exit (E_NOPERM);
+ }
+ myname = xstrdup (pw->pw_name);
+ if (optind < argc) {
+ name = argv[optind];
+ } else {
+ name = myname;
+ }
+
+ /*
+ * Make sure that at most one username was specified.
+ */
+ if (argc > (optind+1)) {
+ usage (E_USAGE);
+ }
+
+ /*
+ * The -a flag requires -S, no other flags, no username, and
+ * you must be root. --marekm
+ */
+ if (aflg) {
+ if (anyflag || !Sflg || (optind < argc)) {
+ usage (E_USAGE);
+ }
+ if (!amroot) {
+ (void) fprintf (stderr,
+ _("%s: Permission denied.\n"),
+ Prog);
+ exit (E_NOPERM);
+ }
+ setpwent ();
+ while ( (pw = getpwent ()) != NULL ) {
+ print_status (pw);
+ }
+ endpwent ();
+ exit (E_SUCCESS);
+ }
+#if 0
+ /*
+ * Allow certain users (administrators) to change passwords of
+ * certain users. Not implemented yet. --marekm
+ */
+ if (may_change_passwd (myname, name))
+ amroot = 1;
+#endif
+
+ /*
+ * If any of the flags were given, a user name must be supplied on
+ * the command line. Only an unadorned command line doesn't require
+ * the user's name be given. Also, -x, -n, -w, -i, -e, -d,
+ * -l, -u may appear with each other. -S, -k must appear alone.
+ */
+
+ /*
+ * -S now ok for normal users (check status of my own account), and
+ * doesn't require username. --marekm
+ */
+ if (anyflag && optind >= argc) {
+ usage (E_USAGE);
+ }
+
+ if ( (Sflg && kflg)
+ || (anyflag && (Sflg || kflg))) {
+ usage (E_USAGE);
+ }
+
+ if (anyflag && !amroot) {
+ (void) fprintf (stderr, _("%s: Permission denied.\n"), Prog);
+ exit (E_NOPERM);
+ }
+
+ pw = xgetpwnam (name);
+ if (NULL == pw) {
+ (void) fprintf (stderr,
+ _("%s: user '%s' does not exist\n"),
+ Prog, name);
+ exit (E_NOPERM);
+ }
+#ifdef WITH_SELINUX
+ /* only do this check when getuid()==0 because it's a pre-condition for
+ changing a password without entering the old one */
+ if (amroot && (check_selinux_permit ("passwd") != 0)) {
+ SYSLOG ((LOG_ALERT,
+ "root is not authorized by SELinux to change the password of %s",
+ name));
+ (void) fprintf(stderr,
+ _("%s: root is not authorized by SELinux to change the password of %s\n"),
+ Prog, name);
+ exit (E_NOPERM);
+ }
+#endif /* WITH_SELINUX */
+
+ /*
+ * If the UID of the user does not match the current real UID,
+ * check if I'm root.
+ */
+ if (!amroot && (pw->pw_uid != getuid ())) {
+ (void) fprintf (stderr,
+ _("%s: You may not view or modify password information for %s.\n"),
+ Prog, name);
+ SYSLOG ((LOG_WARN,
+ "%s: can't view or modify password information for %s",
+ Prog, name));
+ closelog ();
+ exit (E_NOPERM);
+ }
+
+ if (Sflg) {
+ print_status (pw);
+ exit (E_SUCCESS);
+ }
+#ifndef USE_PAM
+ /*
+ * The user name is valid, so let's get the shadow file entry.
+ */
+ sp = getspnam (name); /* !USE_PAM, no need for xgetspnam */
+ if (NULL == sp) {
+ if (errno == EACCES) {
+ (void) fprintf (stderr,
+ _("%s: Permission denied.\n"),
+ Prog);
+ exit (E_NOPERM);
+ }
+ sp = pwd_to_spwd (pw);
+ }
+
+ cp = sp->sp_pwdp;
+
+ /*
+ * If there are no other flags, just change the password.
+ */
+ if (!anyflag) {
+ STRFCPY (crypt_passwd, cp);
+
+ /*
+ * See if the user is permitted to change the password.
+ * Otherwise, go ahead and set a new password.
+ */
+ check_password (pw, sp);
+
+ /*
+ * Let the user know whose password is being changed.
+ */
+ if (!qflg) {
+ (void) printf (_("Changing password for %s\n"), name);
+ }
+
+ if (new_password (pw) != 0) {
+ (void) fprintf (stderr,
+ _("The password for %s is unchanged.\n"),
+ name);
+ closelog ();
+ exit (E_NOPERM);
+ }
+ do_update_pwd = true;
+ do_update_age = true;
+ }
+#endif /* !USE_PAM */
+ /*
+ * Before going any further, raise the ulimit to prevent colliding
+ * into a lowered ulimit, and set the real UID to root to protect
+ * against unexpected signals. Any keyboard signals are set to be
+ * ignored.
+ */
+ pwd_init ();
+
+#ifdef USE_PAM
+ /*
+ * Don't set the real UID for PAM...
+ */
+ if (!anyflag) {
+ do_pam_passwd (name, qflg, kflg);
+ exit (E_SUCCESS);
+ }
+#endif /* USE_PAM */
+ if (setuid (0) != 0) {
+ (void) fputs (_("Cannot change ID to root.\n"), stderr);
+ SYSLOG ((LOG_ERR, "can't setuid(0)"));
+ closelog ();
+ exit (E_NOPERM);
+ }
+ if (spw_file_present ()) {
+ update_shadow ();
+ } else {
+ update_noshadow ();
+ }
+
+ nscd_flush_cache ("passwd");
+ nscd_flush_cache ("group");
+ sssd_flush_cache (SSSD_DB_PASSWD | SSSD_DB_GROUP);
+
+ SYSLOG ((LOG_INFO, "password for '%s' changed by '%s'", name, myname));
+ closelog ();
+ if (!qflg) {
+ if (!anyflag) {
+#ifndef USE_PAM
+ (void) printf (_("%s: password changed.\n"), Prog);
+#endif /* USE_PAM */
+ } else {
+ (void) printf (_("%s: password expiry information changed.\n"), Prog);
+ }
+ }
+
+ return E_SUCCESS;
+}
+
diff --git a/src/pwck.c b/src/pwck.c
new file mode 100644
index 0000000..be404c3
--- /dev/null
+++ b/src/pwck.c
@@ -0,0 +1,912 @@
+/*
+ * Copyright (c) 1992 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 , Michał Moskal
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 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 <fcntl.h>
+#include <grp.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <getopt.h>
+#include "chkname.h"
+#include "commonio.h"
+#include "defines.h"
+#include "prototypes.h"
+#include "pwio.h"
+#include "shadowio.h"
+#include "getdef.h"
+#include "nscd.h"
+#include "sssd.h"
+#ifdef WITH_TCB
+#include "tcbfuncs.h"
+#endif /* WITH_TCB */
+
+/*
+ * Exit codes
+ */
+/*@-exitarg@*/
+#define E_OKAY 0
+#define E_SUCCESS 0
+#define E_USAGE 1
+#define E_BADENTRY 2
+#define E_CANTOPEN 3
+#define E_CANTLOCK 4
+#define E_CANTUPDATE 5
+#define E_CANTSORT 6
+
+/*
+ * Global variables
+ */
+const char *Prog;
+
+static bool use_system_pw_file = true;
+static bool use_system_spw_file = true;
+
+static bool is_shadow = false;
+
+static bool spw_opened = false;
+
+static bool pw_locked = false;
+static bool spw_locked = false;
+
+/* Options */
+static bool read_only = false;
+static bool sort_mode = false;
+static bool quiet = false; /* don't report warnings, only errors */
+
+/* local function prototypes */
+static void fail_exit (int code);
+static /*@noreturn@*/void usage (int status);
+static void process_flags (int argc, char **argv);
+static void open_files (void);
+static void close_files (bool changed);
+static void check_pw_file (int *errors, bool *changed);
+static void check_spw_file (int *errors, bool *changed);
+
+extern int allow_bad_names;
+
+/*
+ * fail_exit - do some cleanup and exit with the given error code
+ */
+static void fail_exit (int code)
+{
+ if (spw_locked) {
+ if (spw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+ if (use_system_spw_file) {
+ SYSLOG ((LOG_ERR, "failed to unlock %s",
+ spw_dbname ()));
+ }
+ /* continue */
+ }
+ }
+
+ if (pw_locked) {
+ if (pw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+ if (use_system_pw_file) {
+ SYSLOG ((LOG_ERR, "failed to unlock %s",
+ pw_dbname ()));
+ }
+ /* continue */
+ }
+ }
+
+ closelog ();
+
+ exit (code);
+}
+/*
+ * usage - print syntax message and exit
+ */
+static /*@noreturn@*/void usage (int status)
+{
+ FILE *usageout = (E_SUCCESS != status) ? stderr : stdout;
+#ifdef WITH_TCB
+ if (getdef_bool ("USE_TCB")) {
+ (void) fprintf (usageout,
+ _("Usage: %s [options] [passwd]\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+ } else
+#endif /* WITH_TCB */
+ {
+ (void) fprintf (usageout,
+ _("Usage: %s [options] [passwd [shadow]]\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+ }
+ (void) fputs (_(" -b, --badnames allow bad names\n"), usageout);
+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
+ (void) fputs (_(" -q, --quiet report errors only\n"), usageout);
+ (void) fputs (_(" -r, --read-only display errors and warnings\n"
+ " but do not change files\n"), usageout);
+ (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
+#ifdef WITH_TCB
+ if (!getdef_bool ("USE_TCB"))
+#endif /* !WITH_TCB */
+ {
+ (void) fputs (_(" -s, --sort sort entries by UID\n"), usageout);
+ }
+ (void) fputs ("\n", usageout);
+ exit (status);
+}
+
+/*
+ * process_flags - parse the command line options
+ *
+ * It will not return if an error is encountered.
+ */
+static void process_flags (int argc, char **argv)
+{
+ int c;
+ static struct option long_options[] = {
+ {"badnames", no_argument, NULL, 'b'},
+ {"help", no_argument, NULL, 'h'},
+ {"quiet", no_argument, NULL, 'q'},
+ {"read-only", no_argument, NULL, 'r'},
+ {"root", required_argument, NULL, 'R'},
+ {"sort", no_argument, NULL, 's'},
+ {NULL, 0, NULL, '\0'}
+ };
+
+ /*
+ * Parse the command line arguments
+ */
+ while ((c = getopt_long (argc, argv, "behqrR:s",
+ long_options, NULL)) != -1) {
+ switch (c) {
+ case 'b':
+ allow_bad_names = true;
+ break;
+ case 'h':
+ usage (E_SUCCESS);
+ /*@notreached@*/break;
+ case 'e': /* added for Debian shadow-961025-2 compatibility */
+ case 'q':
+ quiet = true;
+ break;
+ case 'r':
+ read_only = true;
+ break;
+ case 'R': /* no-op, handled in process_root_flag () */
+ break;
+ case 's':
+ sort_mode = true;
+ break;
+ default:
+ usage (E_USAGE);
+ }
+ }
+
+ if (sort_mode && read_only) {
+ fprintf (stderr, _("%s: -s and -r are incompatible\n"), Prog);
+ exit (E_USAGE);
+ }
+
+ /*
+ * Make certain we have the right number of arguments
+ */
+ if (argc > (optind + 2)) {
+ usage (E_USAGE);
+ }
+
+ /*
+ * If there are two left over filenames, use those as the password
+ * and shadow password filenames.
+ */
+ if (optind != argc) {
+ pw_setdbname (argv[optind]);
+ use_system_pw_file = false;
+ }
+ if ((optind + 2) == argc) {
+#ifdef WITH_TCB
+ if (getdef_bool ("USE_TCB")) {
+ fprintf (stderr,
+ _("%s: no alternative shadow file allowed when USE_TCB is enabled.\n"),
+ Prog);
+ usage (E_USAGE);
+ }
+#endif /* WITH_TCB */
+ spw_setdbname (argv[optind + 1]);
+ is_shadow = true;
+ use_system_spw_file = false;
+ } else if (optind == argc) {
+ is_shadow = spw_file_present ();
+ }
+}
+
+/*
+ * open_files - open the shadow database
+ *
+ * In read-only mode, the databases are not locked and are opened
+ * only for reading.
+ */
+static void open_files (void)
+{
+ bool use_tcb = false;
+#ifdef WITH_TCB
+ use_tcb = getdef_bool ("USE_TCB");
+#endif /* WITH_TCB */
+
+ /*
+ * Lock the files if we aren't in "read-only" mode
+ */
+ if (!read_only) {
+ if (pw_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, pw_dbname ());
+ fail_exit (E_CANTLOCK);
+ }
+ pw_locked = true;
+ if (is_shadow && !use_tcb) {
+ if (spw_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, spw_dbname ());
+ fail_exit (E_CANTLOCK);
+ }
+ spw_locked = true;
+ }
+ }
+
+ /*
+ * Open the files. Use O_RDONLY if we are in read_only mode, O_RDWR
+ * otherwise.
+ */
+ if (pw_open (read_only ? O_RDONLY : O_RDWR) == 0) {
+ fprintf (stderr, _("%s: cannot open %s\n"),
+ Prog, pw_dbname ());
+ if (use_system_pw_file) {
+ SYSLOG ((LOG_WARN, "cannot open %s", pw_dbname ()));
+ }
+ fail_exit (E_CANTOPEN);
+ }
+ if (is_shadow && !use_tcb) {
+ if (spw_open (read_only ? O_RDONLY : O_RDWR) == 0) {
+ fprintf (stderr, _("%s: cannot open %s\n"),
+ Prog, spw_dbname ());
+ if (use_system_spw_file) {
+ SYSLOG ((LOG_WARN, "cannot open %s",
+ spw_dbname ()));
+ }
+ fail_exit (E_CANTOPEN);
+ }
+ spw_opened = true;
+ }
+}
+
+/*
+ * close_files - close and unlock the password/shadow databases
+ *
+ * If changed is not set, the databases are not closed, and no
+ * changes are committed in the databases. The databases are
+ * unlocked anyway.
+ */
+static void close_files (bool changed)
+{
+ /*
+ * All done. If there were no change we can just abandon any
+ * changes to the files.
+ */
+ if (changed) {
+ if (pw_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, pw_dbname ());
+ if (use_system_pw_file) {
+ SYSLOG ((LOG_ERR,
+ "failure while writing changes to %s",
+ pw_dbname ()));
+ }
+ fail_exit (E_CANTUPDATE);
+ }
+ if (spw_opened && (spw_close () == 0)) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, spw_dbname ());
+ if (use_system_spw_file) {
+ SYSLOG ((LOG_ERR,
+ "failure while writing changes to %s",
+ spw_dbname ()));
+ }
+ fail_exit (E_CANTUPDATE);
+ }
+ spw_opened = false;
+ }
+
+ /*
+ * Don't be anti-social - unlock the files when you're done.
+ */
+ if (spw_locked) {
+ if (spw_unlock () == 0) {
+ fprintf (stderr,
+ _("%s: failed to unlock %s\n"),
+ Prog, spw_dbname ());
+ if (use_system_spw_file) {
+ SYSLOG ((LOG_ERR, "failed to unlock %s",
+ spw_dbname ()));
+ }
+ /* continue */
+ }
+ }
+ spw_locked = false;
+ if (pw_locked) {
+ if (pw_unlock () == 0) {
+ fprintf (stderr,
+ _("%s: failed to unlock %s\n"),
+ Prog, pw_dbname ());
+ if (use_system_pw_file) {
+ SYSLOG ((LOG_ERR, "failed to unlock %s",
+ pw_dbname ()));
+ }
+ /* continue */
+ }
+ }
+ pw_locked = false;
+}
+
+/*
+ * check_pw_file - check the content of the passwd file
+ */
+static void check_pw_file (int *errors, bool *changed)
+{
+ struct commonio_entry *pfe, *tpfe;
+ struct passwd *pwd;
+ struct spwd *spw;
+ uid_t min_sys_id = (uid_t) getdef_ulong ("SYS_UID_MIN", 101UL);
+ uid_t max_sys_id = (uid_t) getdef_ulong ("SYS_UID_MAX", 999UL);
+
+ /*
+ * Loop through the entire password file.
+ */
+ for (pfe = __pw_get_head (); NULL != pfe; pfe = pfe->next) {
+ /*
+ * If this is a NIS line, skip it. You can't "know" what NIS
+ * is going to do without directly asking NIS ...
+ */
+ if (('+' == pfe->line[0]) || ('-' == pfe->line[0])) {
+ continue;
+ }
+
+ /*
+ * Start with the entries that are completely corrupt. They
+ * have no (struct passwd) entry because they couldn't be
+ * parsed properly.
+ */
+ if (NULL == pfe->eptr) {
+ /*
+ * Tell the user this entire line is bogus and ask
+ * them to delete it.
+ */
+ puts (_("invalid password file entry"));
+ printf (_("delete line '%s'? "), pfe->line);
+ *errors += 1;
+
+ /*
+ * prompt the user to delete the entry or not
+ */
+ if (!yes_or_no (read_only)) {
+ continue;
+ }
+
+ /*
+ * All password file deletions wind up here. This
+ * code removes the current entry from the linked
+ * list. When done, it skips back to the top of the
+ * loop to try out the next list element.
+ */
+ delete_pw:
+ if (use_system_pw_file) {
+ SYSLOG ((LOG_INFO, "delete passwd line '%s'",
+ pfe->line));
+ }
+ *changed = true;
+
+ __pw_del_entry (pfe);
+ continue;
+ }
+
+ /*
+ * Password structure is good, start using it.
+ */
+ pwd = pfe->eptr;
+
+ /*
+ * Make sure this entry has a unique name.
+ */
+ for (tpfe = __pw_get_head (); NULL != tpfe; tpfe = tpfe->next) {
+ const struct passwd *ent = tpfe->eptr;
+
+ /*
+ * Don't check this entry
+ */
+ if (tpfe == pfe) {
+ continue;
+ }
+
+ /*
+ * Don't check invalid entries.
+ */
+ if (NULL == ent) {
+ continue;
+ }
+
+ if (strcmp (pwd->pw_name, ent->pw_name) != 0) {
+ continue;
+ }
+
+ /*
+ * Tell the user this entry is a duplicate of
+ * another and ask them to delete it.
+ */
+ puts (_("duplicate password entry"));
+ printf (_("delete line '%s'? "), pfe->line);
+ *errors += 1;
+
+ /*
+ * prompt the user to delete the entry or not
+ */
+ if (yes_or_no (read_only)) {
+ goto delete_pw;
+ }
+ }
+
+ /*
+ * Check for invalid usernames. --marekm
+ */
+
+ if (!is_valid_user_name (pwd->pw_name)) {
+ printf (_("invalid user name '%s'\n"), pwd->pw_name);
+ *errors += 1;
+ }
+
+ /*
+ * Check for invalid user ID.
+ */
+ if (pwd->pw_uid == (uid_t)-1) {
+ printf (_("invalid user ID '%lu'\n"), (long unsigned int)pwd->pw_uid);
+ *errors += 1;
+ }
+
+ /*
+ * Make sure the primary group exists
+ */
+ /* local, no need for xgetgrgid */
+ if (!quiet && (NULL == getgrgid (pwd->pw_gid))) {
+
+ /*
+ * No primary group, just give a warning
+ */
+
+ printf (_("user '%s': no group %lu\n"),
+ pwd->pw_name, (unsigned long) pwd->pw_gid);
+ *errors += 1;
+ }
+
+ /*
+ * If uid is system and has a home directory, then check
+ */
+ if (!(pwd->pw_uid >= min_sys_id && pwd->pw_uid <= max_sys_id && pwd->pw_dir && pwd->pw_dir[0])) {
+ /*
+ * Make sure the home directory exists
+ */
+ if (!quiet && (access (pwd->pw_dir, F_OK) != 0)) {
+ /*
+ * Home directory doesn't exist, give a warning
+ */
+ printf (_("user '%s': directory '%s' does not exist\n"),
+ pwd->pw_name, pwd->pw_dir);
+ *errors += 1;
+ }
+ }
+
+ /*
+ * Make sure the login shell is executable
+ */
+ if ( !quiet
+ && ('\0' != pwd->pw_shell[0])
+ && (access (pwd->pw_shell, F_OK) != 0)) {
+
+ /*
+ * Login shell doesn't exist, give a warning
+ */
+ printf (_("user '%s': program '%s' does not exist\n"),
+ pwd->pw_name, pwd->pw_shell);
+ *errors += 1;
+ }
+
+ /*
+ * Make sure this entry exists in the /etc/shadow file.
+ */
+
+ if (is_shadow) {
+#ifdef WITH_TCB
+ if (getdef_bool ("USE_TCB")) {
+ if (shadowtcb_set_user (pwd->pw_name) == SHADOWTCB_FAILURE) {
+ printf (_("no tcb directory for %s\n"),
+ pwd->pw_name);
+ printf (_("create tcb directory for %s?"),
+ pwd->pw_name);
+ *errors += 1;
+ if (yes_or_no (read_only)) {
+ if (shadowtcb_create (pwd->pw_name, pwd->pw_uid) == SHADOWTCB_FAILURE) {
+ *errors += 1;
+ printf (_("failed to create tcb directory for %s\n"), pwd->pw_name);
+ continue;
+ }
+ } else {
+ continue;
+ }
+ }
+ if (spw_lock () == 0) {
+ *errors += 1;
+ fprintf (stderr,
+ _("%s: cannot lock %s.\n"),
+ Prog, spw_dbname ());
+ continue;
+ }
+ spw_locked = true;
+ if (spw_open (read_only ? O_RDONLY : O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, spw_dbname ());
+ *errors += 1;
+ if (spw_unlock () == 0) {
+ fprintf (stderr,
+ _("%s: failed to unlock %s\n"),
+ Prog, spw_dbname ());
+ if (use_system_spw_file) {
+ SYSLOG ((LOG_ERR,
+ "failed to unlock %s",
+ spw_dbname ()));
+ }
+ }
+ continue;
+ }
+ spw_opened = true;
+ }
+#endif /* WITH_TCB */
+ spw = (struct spwd *) spw_locate (pwd->pw_name);
+ if (NULL == spw) {
+ printf (_("no matching password file entry in %s\n"),
+ spw_dbname ());
+ printf (_("add user '%s' in %s? "),
+ pwd->pw_name, spw_dbname ());
+ *errors += 1;
+ if (yes_or_no (read_only)) {
+ struct spwd sp;
+ struct passwd pw;
+
+ sp.sp_namp = pwd->pw_name;
+ sp.sp_pwdp = pwd->pw_passwd;
+ sp.sp_min =
+ getdef_num ("PASS_MIN_DAYS", -1);
+ sp.sp_max =
+ getdef_num ("PASS_MAX_DAYS", -1);
+ sp.sp_warn =
+ getdef_num ("PASS_WARN_AGE", -1);
+ sp.sp_inact = -1;
+ sp.sp_expire = -1;
+ sp.sp_flag = SHADOW_SP_FLAG_UNSET;
+ sp.sp_lstchg = (long) gettime () / SCALE;
+ if (0 == sp.sp_lstchg) {
+ /* Better disable aging than
+ * requiring a password change
+ */
+ sp.sp_lstchg = -1;
+ }
+ *changed = true;
+
+ if (spw_update (&sp) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, spw_dbname (), sp.sp_namp);
+ fail_exit (E_CANTUPDATE);
+ }
+ /* remove password from /etc/passwd */
+ pw = *pwd;
+ pw.pw_passwd = SHADOW_PASSWD_STRING; /* XXX warning: const */
+ if (pw_update (&pw) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, pw_dbname (), pw.pw_name);
+ fail_exit (E_CANTUPDATE);
+ }
+ }
+ } else {
+ /* The passwd entry has a shadow counterpart.
+ * Make sure no passwords are in passwd.
+ */
+ if ( !quiet
+ && (strcmp (pwd->pw_passwd,
+ SHADOW_PASSWD_STRING) != 0)) {
+ printf (_("user %s has an entry in %s, but its password field in %s is not set to 'x'\n"),
+ pwd->pw_name, spw_dbname (), pw_dbname ());
+ *errors += 1;
+ }
+ }
+ }
+#ifdef WITH_TCB
+ if (getdef_bool ("USE_TCB") && spw_locked) {
+ if (spw_opened && (spw_close () == 0)) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, spw_dbname ());
+ if (use_system_spw_file) {
+ SYSLOG ((LOG_ERR,
+ "failure while writing changes to %s",
+ spw_dbname ()));
+ }
+ } else {
+ spw_opened = false;
+ }
+ if (spw_unlock () == 0) {
+ fprintf (stderr,
+ _("%s: failed to unlock %s\n"),
+ Prog, spw_dbname ());
+ if (use_system_spw_file) {
+ SYSLOG ((LOG_ERR, "failed to unlock %s",
+ spw_dbname ()));
+ }
+ } else {
+ spw_locked = false;
+ }
+ }
+#endif /* WITH_TCB */
+ }
+}
+
+/*
+ * check_spw_file - check the content of the shadowed password file (shadow)
+ */
+static void check_spw_file (int *errors, bool *changed)
+{
+ struct commonio_entry *spe, *tspe;
+ struct spwd *spw;
+
+ /*
+ * Loop through the entire shadow password file.
+ */
+ for (spe = __spw_get_head (); NULL != spe; spe = spe->next) {
+ /*
+ * Do not treat lines which were missing in shadow
+ * and were added earlier.
+ */
+ if (NULL == spe->line) {
+ continue;
+ }
+
+ /*
+ * If this is a NIS line, skip it. You can't "know" what NIS
+ * is going to do without directly asking NIS ...
+ */
+ if (('+' == spe->line[0]) || ('-' == spe->line[0])) {
+ continue;
+ }
+
+ /*
+ * Start with the entries that are completely corrupt. They
+ * have no (struct spwd) entry because they couldn't be
+ * parsed properly.
+ */
+ if (NULL == spe->eptr) {
+ /*
+ * Tell the user this entire line is bogus and ask
+ * them to delete it.
+ */
+ puts (_("invalid shadow password file entry"));
+ printf (_("delete line '%s'? "), spe->line);
+ *errors += 1;
+
+ /*
+ * prompt the user to delete the entry or not
+ */
+ if (!yes_or_no (read_only)) {
+ continue;
+ }
+
+ /*
+ * All shadow file deletions wind up here. This code
+ * removes the current entry from the linked list.
+ * When done, it skips back to the top of the loop
+ * to try out the next list element.
+ */
+ delete_spw:
+ if (use_system_spw_file) {
+ SYSLOG ((LOG_INFO, "delete shadow line '%s'",
+ spe->line));
+ }
+ *changed = true;
+
+ __spw_del_entry (spe);
+ continue;
+ }
+
+ /*
+ * Shadow password structure is good, start using it.
+ */
+ spw = spe->eptr;
+
+ /*
+ * Make sure this entry has a unique name.
+ */
+ for (tspe = __spw_get_head (); NULL != tspe; tspe = tspe->next) {
+ const struct spwd *ent = tspe->eptr;
+
+ /*
+ * Don't check this entry
+ */
+ if (tspe == spe) {
+ continue;
+ }
+
+ /*
+ * Don't check invalid entries.
+ */
+ if (NULL == ent) {
+ continue;
+ }
+
+ if (strcmp (spw->sp_namp, ent->sp_namp) != 0) {
+ continue;
+ }
+
+ /*
+ * Tell the user this entry is a duplicate of
+ * another and ask them to delete it.
+ */
+ puts (_("duplicate shadow password entry"));
+ printf (_("delete line '%s'? "), spe->line);
+ *errors += 1;
+
+ /*
+ * prompt the user to delete the entry or not
+ */
+ if (yes_or_no (read_only)) {
+ goto delete_spw;
+ }
+ }
+
+ /*
+ * Make sure this entry exists in the /etc/passwd
+ * file.
+ */
+ if (pw_locate (spw->sp_namp) == NULL) {
+ /*
+ * Tell the user this entry has no matching
+ * /etc/passwd entry and ask them to delete it.
+ */
+ printf (_("no matching password file entry in %s\n"),
+ pw_dbname ());
+ printf (_("delete line '%s'? "), spe->line);
+ *errors += 1;
+
+ /*
+ * prompt the user to delete the entry or not
+ */
+ if (yes_or_no (read_only)) {
+ goto delete_spw;
+ }
+ }
+
+ /*
+ * Warn if last password change in the future. --marekm
+ */
+ if (!quiet) {
+ time_t t = time ((time_t *) 0);
+ if ( (t != 0)
+ && (spw->sp_lstchg > (long) t / SCALE)) {
+ printf (_("user %s: last password change in the future\n"),
+ spw->sp_namp);
+ *errors += 1;
+ }
+ }
+ }
+}
+
+/*
+ * pwck - verify password file integrity
+ */
+int main (int argc, char **argv)
+{
+ int errors = 0;
+ bool changed = false;
+
+ /*
+ * Get my name so that I can use it to report errors.
+ */
+ Prog = Basename (argv[0]);
+
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ process_root_flag ("-R", argc, argv);
+
+ OPENLOG ("pwck");
+
+ /* Parse the command line arguments */
+ process_flags (argc, argv);
+
+ open_files ();
+
+ if (sort_mode) {
+ if (pw_sort () != 0) {
+ fprintf (stderr,
+ _("%s: cannot sort entries in %s\n"),
+ Prog, pw_dbname ());
+ fail_exit (E_CANTSORT);
+ }
+ if (is_shadow) {
+ if (spw_sort () != 0) {
+ fprintf (stderr,
+ _("%s: cannot sort entries in %s\n"),
+ Prog, spw_dbname ());
+ fail_exit (E_CANTSORT);
+ }
+ }
+ changed = true;
+ } else {
+ check_pw_file (&errors, &changed);
+
+ if (is_shadow) {
+ check_spw_file (&errors, &changed);
+ }
+ }
+
+ close_files (changed);
+
+ if (!read_only) {
+ nscd_flush_cache ("passwd");
+ sssd_flush_cache (SSSD_DB_PASSWD);
+ }
+
+ /*
+ * Tell the user what we did and exit.
+ */
+ if (0 != errors) {
+ printf (changed ?
+ _("%s: the files have been updated\n") :
+ _("%s: no changes\n"), Prog);
+ }
+
+ closelog ();
+ return ((0 != errors) ? E_BADENTRY : E_OKAY);
+}
+
diff --git a/src/pwconv.c b/src/pwconv.c
new file mode 100644
index 0000000..f932f26
--- /dev/null
+++ b/src/pwconv.c
@@ -0,0 +1,336 @@
+/*
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2002 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2009 - 2012, 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.
+ */
+
+/*
+ * pwconv - create or update /etc/shadow with information from
+ * /etc/passwd.
+ *
+ * It is more like SysV pwconv, slightly different from the original Shadow
+ * pwconv. Depends on "x" as password in /etc/passwd which means that the
+ * password has already been moved to /etc/shadow. There is no need to move
+ * /etc/npasswd to /etc/passwd, password files are updated using library
+ * routines with proper locking.
+ *
+ * Can be used to update /etc/shadow after adding/deleting users by editing
+ * /etc/passwd. There is no man page yet, but this program should be close
+ * to pwconv(1M) on Solaris 2.x.
+ *
+ * Warning: make sure that all users have "x" as the password in /etc/passwd
+ * before running this program for the first time on a system which already
+ * has shadow passwords. Anything else (like "*" from old versions of the
+ * shadow suite) will replace the user's encrypted password in /etc/shadow.
+ *
+ * Doesn't currently support pw_age information in /etc/passwd, and doesn't
+ * support DBM files. Add it if you need it...
+ *
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+#include <getopt.h>
+#include "defines.h"
+#include "getdef.h"
+#include "prototypes.h"
+#include "pwio.h"
+#include "shadowio.h"
+#include "nscd.h"
+#include "sssd.h"
+
+/*
+ * exit status values
+ */
+/*@-exitarg@*/
+#define E_SUCCESS 0 /* success */
+#define E_NOPERM 1 /* permission denied */
+#define E_USAGE 2 /* invalid command syntax */
+#define E_FAILURE 3 /* unexpected failure, nothing done */
+#define E_MISSING 4 /* unexpected failure, passwd file missing */
+#define E_PWDBUSY 5 /* passwd file(s) busy */
+#define E_BADENTRY 6 /* bad shadow entry */
+/*
+ * Global variables
+ */
+const char *Prog;
+
+static bool spw_locked = false;
+static bool pw_locked = false;
+
+/* local function prototypes */
+static void fail_exit (int status);
+static void usage (int status);
+static void process_flags (int argc, char **argv);
+
+static void fail_exit (int status)
+{
+ if (pw_locked) {
+ if (pw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+ /* continue */
+ }
+ }
+
+ if (spw_locked) {
+ if (spw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+ /* continue */
+ }
+ }
+
+ exit (status);
+}
+
+static void usage (int status)
+{
+ FILE *usageout = (E_SUCCESS != status) ? stderr : stdout;
+ (void) fprintf (usageout,
+ _("Usage: %s [options]\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
+ (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
+ (void) fputs ("\n", usageout);
+ exit (status);
+}
+
+/*
+ * process_flags - parse the command line options
+ *
+ * It will not return if an error is encountered.
+ */
+static void process_flags (int argc, char **argv)
+{
+ /*
+ * Parse the command line options.
+ */
+ int c;
+ static struct option long_options[] = {
+ {"help", no_argument, NULL, 'h'},
+ {"root", required_argument, NULL, 'R'},
+ {NULL, 0, NULL, '\0'}
+ };
+
+ while ((c = getopt_long (argc, argv, "hR:",
+ long_options, NULL)) != -1) {
+ switch (c) {
+ case 'h':
+ usage (E_SUCCESS);
+ /*@notreached@*/break;
+ case 'R': /* no-op, handled in process_root_flag () */
+ break;
+ default:
+ usage (E_USAGE);
+ }
+ }
+
+ if (optind != argc) {
+ usage (E_USAGE);
+ }
+}
+
+int main (int argc, char **argv)
+{
+ const struct passwd *pw;
+ struct passwd pwent;
+ const struct spwd *sp;
+ struct spwd spent;
+
+ Prog = Basename (argv[0]);
+
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ process_root_flag ("-R", argc, argv);
+
+ OPENLOG ("pwconv");
+
+ process_flags (argc, argv);
+
+#ifdef WITH_TCB
+ if (getdef_bool("USE_TCB")) {
+ fprintf (stderr, _("%s: can't work with tcb enabled\n"), Prog);
+ exit (E_FAILURE);
+ }
+#endif /* WITH_TCB */
+
+ if (pw_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, pw_dbname ());
+ fail_exit (E_PWDBUSY);
+ }
+ pw_locked = true;
+ if (pw_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"), Prog, pw_dbname ());
+ fail_exit (E_MISSING);
+ }
+
+ if (spw_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, spw_dbname ());
+ fail_exit (E_PWDBUSY);
+ }
+ spw_locked = true;
+ if (spw_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"), Prog, spw_dbname ());
+ fail_exit (E_FAILURE);
+ }
+
+ /*
+ * Remove /etc/shadow entries for users not in /etc/passwd.
+ */
+ (void) spw_rewind ();
+ while ((sp = spw_next ()) != NULL) {
+ if (pw_locate (sp->sp_namp) != NULL) {
+ continue;
+ }
+
+ if (spw_remove (sp->sp_namp) == 0) {
+ /*
+ * This shouldn't happen (the entry exists) but...
+ */
+ fprintf (stderr,
+ _("%s: cannot remove entry '%s' from %s\n"),
+ Prog, sp->sp_namp, spw_dbname ());
+ fail_exit (E_FAILURE);
+ }
+ (void) spw_rewind();
+ }
+
+ /*
+ * Update shadow entries which don't have "x" as pw_passwd. Add any
+ * missing shadow entries.
+ */
+ (void) pw_rewind ();
+ while ((pw = pw_next ()) != NULL) {
+ sp = spw_locate (pw->pw_name);
+ if (NULL != sp) {
+ /* do we need to update this entry? */
+ if (strcmp (pw->pw_passwd, SHADOW_PASSWD_STRING) == 0) {
+ continue;
+ }
+ /* update existing shadow entry */
+ spent = *sp;
+ } else {
+ /* add new shadow entry */
+ memset (&spent, 0, sizeof spent);
+ spent.sp_namp = pw->pw_name;
+ spent.sp_min = getdef_num ("PASS_MIN_DAYS", -1);
+ spent.sp_max = getdef_num ("PASS_MAX_DAYS", -1);
+ spent.sp_warn = getdef_num ("PASS_WARN_AGE", -1);
+ spent.sp_inact = -1;
+ spent.sp_expire = -1;
+ spent.sp_flag = SHADOW_SP_FLAG_UNSET;
+ }
+ spent.sp_pwdp = pw->pw_passwd;
+ spent.sp_lstchg = (long) gettime () / SCALE;
+ if (0 == spent.sp_lstchg) {
+ /* Better disable aging than requiring a password
+ * change */
+ spent.sp_lstchg = -1;
+ }
+ if (spw_update (&spent) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, spw_dbname (), spent.sp_namp);
+ fail_exit (E_FAILURE);
+ }
+
+ /* remove password from /etc/passwd */
+ pwent = *pw;
+ pwent.pw_passwd = SHADOW_PASSWD_STRING; /* XXX warning: const */
+ if (pw_update (&pwent) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, pw_dbname (), pwent.pw_name);
+ fail_exit (E_FAILURE);
+ }
+ }
+
+ if (spw_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", spw_dbname ()));
+ fail_exit (E_FAILURE);
+ }
+ if (pw_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", pw_dbname ()));
+ fail_exit (E_FAILURE);
+ }
+
+ /* /etc/passwd- (backup file) */
+ errno = 0;
+ if ((chmod (PASSWD_FILE "-", 0600) != 0) && (errno != ENOENT)) {
+ fprintf (stderr,
+ _("%s: failed to change the mode of %s to 0600\n"),
+ Prog, PASSWD_FILE "-");
+ SYSLOG ((LOG_ERR, "failed to change the mode of %s to 0600", PASSWD_FILE "-"));
+ /* continue */
+ }
+
+ if (pw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+ /* continue */
+ }
+
+ if (spw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+ /* continue */
+ }
+
+ nscd_flush_cache ("passwd");
+ sssd_flush_cache (SSSD_DB_PASSWD);
+
+ return E_SUCCESS;
+}
+
diff --git a/src/pwunconv.c b/src/pwunconv.c
new file mode 100644
index 0000000..e11ea49
--- /dev/null
+++ b/src/pwunconv.c
@@ -0,0 +1,258 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008 - 2012, 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 <fcntl.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <getopt.h>
+#include "defines.h"
+#include "nscd.h"
+#include "sssd.h"
+#include "prototypes.h"
+#include "pwio.h"
+#include "shadowio.h"
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+/*
+ * Global variables
+ */
+const char *Prog;
+
+static bool spw_locked = false;
+static bool pw_locked = false;
+
+/* local function prototypes */
+static void fail_exit (int status);
+static void usage (int status);
+static void process_flags (int argc, char **argv);
+
+static void fail_exit (int status)
+{
+ if (spw_locked) {
+ if (spw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+ /* continue */
+ }
+ }
+ if (pw_locked) {
+ if (pw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+ /* continue */
+ }
+ }
+ exit (status);
+}
+
+static void usage (int status)
+{
+ FILE *usageout = (E_SUCCESS != status) ? stderr : stdout;
+ (void) fprintf (usageout,
+ _("Usage: %s [options]\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
+ (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
+ (void) fputs ("\n", usageout);
+ exit (status);
+}
+
+/*
+ * process_flags - parse the command line options
+ *
+ * It will not return if an error is encountered.
+ */
+static void process_flags (int argc, char **argv)
+{
+ /*
+ * Parse the command line options.
+ */
+ int c;
+ static struct option long_options[] = {
+ {"help", no_argument, NULL, 'h'},
+ {"root", required_argument, NULL, 'R'},
+ {NULL, 0, NULL, '\0'}
+ };
+
+ while ((c = getopt_long (argc, argv, "hR:",
+ long_options, NULL)) != -1) {
+ switch (c) {
+ case 'h':
+ usage (E_SUCCESS);
+ /*@notreached@*/break;
+ case 'R': /* no-op, handled in process_root_flag () */
+ break;
+ default:
+ usage (E_USAGE);
+ }
+ }
+
+ if (optind != argc) {
+ usage (E_USAGE);
+ }
+}
+
+int main (int argc, char **argv)
+{
+ const struct passwd *pw;
+ struct passwd pwent;
+ const struct spwd *spwd;
+
+ Prog = Basename (argv[0]);
+
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ process_root_flag ("-R", argc, argv);
+
+ OPENLOG ("pwunconv");
+
+ process_flags (argc, argv);
+
+#ifdef WITH_TCB
+ if (getdef_bool("USE_TCB")) {
+ fprintf (stderr, _("%s: can't work with tcb enabled\n"), Prog);
+ exit (1);
+ }
+#endif /* WITH_TCB */
+
+ if (!spw_file_present ()) {
+ /* shadow not installed, do nothing */
+ exit (0);
+ }
+
+ if (pw_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, pw_dbname ());
+ fail_exit (5);
+ }
+ pw_locked = true;
+ if (pw_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, pw_dbname ());
+ fail_exit (1);
+ }
+
+ if (spw_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, spw_dbname ());
+ fail_exit (5);
+ }
+ spw_locked = true;
+ if (spw_open (O_RDONLY) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, spw_dbname ());
+ fail_exit (1);
+ }
+
+ (void) pw_rewind ();
+ while ((pw = pw_next ()) != NULL) {
+ spwd = spw_locate (pw->pw_name);
+ if (NULL == spwd) {
+ continue;
+ }
+
+ pwent = *pw;
+
+ /*
+ * Update password if non-shadow is "x".
+ */
+ if (strcmp (pw->pw_passwd, SHADOW_PASSWD_STRING) == 0) {
+ pwent.pw_passwd = spwd->sp_pwdp;
+ }
+
+ /*
+ * Password aging works differently in the two different
+ * systems. With shadow password files you apparently must
+ * have some aging information. The maxweeks or minweeks
+ * may not map exactly. In pwconv we set max == 10000,
+ * which is about 30 years. Here we have to undo that
+ * kludge. So, if maxdays == 10000, no aging information is
+ * put into the new file. Otherwise, the days are converted
+ * to weeks and so on.
+ */
+ if (pw_update (&pwent) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, pw_dbname (), pwent.pw_name);
+ fail_exit (3);
+ }
+ }
+
+ (void) spw_close (); /* was only open O_RDONLY */
+
+ if (pw_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", pw_dbname ()));
+ fail_exit (3);
+ }
+
+ if (unlink (SHADOW) != 0) {
+ fprintf (stderr,
+ _("%s: cannot delete %s\n"), Prog, SHADOW);
+ SYSLOG ((LOG_ERR, "cannot delete %s", SHADOW));
+ fail_exit (3);
+ }
+
+ if (spw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+ /* continue */
+ }
+ if (pw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+ /* continue */
+ }
+
+ nscd_flush_cache ("passwd");
+ sssd_flush_cache (SSSD_DB_PASSWD);
+
+ return 0;
+}
+
diff --git a/src/su.c b/src/su.c
new file mode 100644
index 0000000..fc0e826
--- /dev/null
+++ b/src/su.c
@@ -0,0 +1,1205 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2013, 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.
+ */
+
+/* Some parts substantially derived from an ancestor of:
+ su for GNU. Run a shell with substitute user and group IDs.
+
+ Copyright (C) 1992-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include <getopt.h>
+#include <grp.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <unistd.h>
+#ifndef USE_PAM
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#endif /* !USE_PAM */
+#include "prototypes.h"
+#include "defines.h"
+#include "pwauth.h"
+#include "getdef.h"
+#ifdef USE_PAM
+#include "pam_defs.h"
+#endif /* USE_PAM */
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+/*
+ * Global variables
+ */
+const char *Prog;
+static /*@observer@*/const char *caller_tty = NULL; /* Name of tty SU is run from */
+static bool caller_is_root = false;
+static uid_t caller_uid;
+#ifndef USE_PAM
+static bool caller_on_console = false;
+#ifdef SU_ACCESS
+static /*@only@*/char *caller_pass;
+#endif
+#endif /* !USE_PAM */
+static bool doshell = false;
+static bool fakelogin = false;
+static /*@observer@*/const char *shellstr;
+static /*@null@*/char *command = NULL;
+
+
+/* not needed by sulog.c anymore */
+static char name[BUFSIZ];
+static char caller_name[BUFSIZ];
+
+/* If nonzero, change some environment vars to indicate the user su'd to. */
+static bool change_environment = true;
+
+#ifdef USE_PAM
+static char kill_msg[256];
+static char wait_msg[256];
+static pam_handle_t *pamh = NULL;
+static int caught = 0;
+/* PID of the child, in case it needs to be killed */
+static pid_t pid_child = 0;
+#endif
+
+/*
+ * External identifiers
+ */
+
+extern char **newenvp; /* libmisc/env.c */
+extern size_t newenvc; /* libmisc/env.c */
+
+/* local function prototypes */
+
+static void execve_shell (const char *shellname,
+ char *args[],
+ char *const envp[]);
+#ifdef USE_PAM
+static RETSIGTYPE kill_child (int unused(s));
+static void prepare_pam_close_session (void);
+#else /* !USE_PAM */
+static RETSIGTYPE die (int);
+static bool iswheel (const char *);
+#endif /* !USE_PAM */
+static bool restricted_shell (const char *shellname);
+static /*@noreturn@*/void su_failure (const char *tty, bool su_to_root);
+static /*@only@*/struct passwd * check_perms (void);
+#ifdef USE_PAM
+static void check_perms_pam (const struct passwd *pw);
+#else /* !USE_PAM */
+static void check_perms_nopam (const struct passwd *pw);
+#endif /* !USE_PAM */
+static void save_caller_context (char **argv);
+static void process_flags (int argc, char **argv);
+static void set_environment (struct passwd *pw);
+
+#ifndef USE_PAM
+/*
+ * die - set or reset termio modes.
+ *
+ * die() is called before processing begins. signal() is then called
+ * with die() as the signal handler. If signal later calls die() with a
+ * signal number, the terminal modes are then reset.
+ */
+static RETSIGTYPE die (int killed)
+{
+ static TERMIO sgtty;
+
+ if (killed != 0) {
+ STTY (0, &sgtty);
+ } else {
+ GTTY (0, &sgtty);
+ }
+
+ if (killed != 0) {
+ _exit (128+killed);
+ }
+}
+
+static bool iswheel (const char *username)
+{
+ struct group *grp;
+
+ grp = getgrnam ("wheel"); /* !USE_PAM, no need for xgetgrnam */
+ if ( (NULL ==grp)
+ || (NULL == grp->gr_mem)) {
+ return false;
+ }
+ return is_on_list (grp->gr_mem, username);
+}
+#else /* USE_PAM */
+static RETSIGTYPE kill_child (int unused(s))
+{
+ if (0 != pid_child) {
+ (void) kill (-pid_child, SIGKILL);
+ (void) write (STDERR_FILENO, kill_msg, strlen (kill_msg));
+ } else {
+ (void) write (STDERR_FILENO, wait_msg, strlen (wait_msg));
+ }
+ _exit (255);
+}
+#endif /* USE_PAM */
+
+/* borrowed from GNU sh-utils' "su.c" */
+static bool restricted_shell (const char *shellname)
+{
+ /*@observer@*/const char *line;
+
+ setusershell ();
+ while ((line = getusershell ()) != NULL) {
+ if (('#' != *line) && (strcmp (line, shellname) == 0)) {
+ endusershell ();
+ return false;
+ }
+ }
+ endusershell ();
+ return true;
+}
+
+static /*@noreturn@*/void su_failure (const char *tty, bool su_to_root)
+{
+ sulog (tty, false, caller_name, name); /* log failed attempt */
+#ifdef USE_SYSLOG
+ if (getdef_bool ("SYSLOG_SU_ENAB")) {
+ SYSLOG ((su_to_root ? LOG_NOTICE : LOG_INFO,
+ "- %s %s:%s", tty,
+ ('\0' != caller_name[0]) ? caller_name : "???",
+ ('\0' != name[0]) ? name : "???"));
+ }
+ closelog ();
+#endif
+
+#ifdef WITH_AUDIT
+ audit_fd = audit_open ();
+ audit_log_acct_message (audit_fd,
+ AUDIT_USER_ROLE_CHANGE,
+ NULL, /* Prog. name */
+ "su",
+ ('\0' != caller_name[0]) ? caller_name : "???",
+ AUDIT_NO_ID,
+ "localhost",
+ NULL, /* addr */
+ tty,
+ 0); /* result */
+ close (audit_fd);
+#endif /* WITH_AUDIT */
+
+ exit (1);
+}
+
+/*
+ * execve_shell - Execute a shell with execve, or interpret it with
+ * /bin/sh
+ */
+static void execve_shell (const char *shellname,
+ char *args[],
+ char *const envp[])
+{
+ int err;
+ (void) execve (shellname, (char **) args, envp);
+ err = errno;
+
+ if (access (shellname, R_OK|X_OK) == 0) {
+ /*
+ * Assume this is a shell script (with no shebang).
+ * Interpret it with /bin/sh
+ */
+ size_t n_args = 0;
+ char **targs;
+ while (NULL != args[n_args]) {
+ n_args++;
+ }
+ targs = (char **) xmalloc ((n_args + 3) * sizeof (args[0]));
+ targs[0] = "sh";
+ targs[1] = "-";
+ targs[2] = xstrdup (shellname);
+ targs[n_args+2] = NULL;
+ while (1 != n_args) {
+ targs[n_args+1] = args[n_args - 1];
+ n_args--;
+ }
+
+ (void) execve (SHELL, targs, envp);
+ } else {
+ errno = err;
+ }
+}
+
+#ifdef USE_PAM
+/* Signal handler for parent process later */
+static void catch_signals (int sig)
+{
+ caught = sig;
+}
+
+/*
+ * prepare_pam_close_session - Fork and wait for the child to close the session
+ *
+ * Only the child returns. The parent will wait for the child to
+ * terminate and exit.
+ */
+static void prepare_pam_close_session (void)
+{
+ sigset_t ourset;
+ int status;
+ int ret;
+
+ pid_child = fork ();
+ if (pid_child == 0) { /* child shell */
+ return; /* Only the child will return from pam_create_session */
+ } else if ((pid_t)-1 == pid_child) {
+ (void) fprintf (stderr,
+ _("%s: Cannot fork user shell\n"),
+ Prog);
+ SYSLOG ((LOG_WARN, "Cannot execute %s", shellstr));
+ closelog ();
+ exit (1);
+ /* Only the child returns. See above. */
+ }
+
+ /* parent only */
+ sigfillset (&ourset);
+ if (sigprocmask (SIG_BLOCK, &ourset, NULL) != 0) {
+ (void) fprintf (stderr,
+ _("%s: signal malfunction\n"),
+ Prog);
+ caught = SIGTERM;
+ }
+ if (0 == caught) {
+ struct sigaction action;
+
+ action.sa_handler = catch_signals;
+ sigemptyset (&action.sa_mask);
+ action.sa_flags = 0;
+ sigemptyset (&ourset);
+
+ if ( (sigaddset (&ourset, SIGTERM) != 0)
+ || (sigaddset (&ourset, SIGALRM) != 0)
+ || (sigaction (SIGTERM, &action, NULL) != 0)
+ || ( !doshell /* handle SIGINT (Ctrl-C), SIGQUIT
+ * (Ctrl-\), and SIGTSTP (Ctrl-Z)
+ * since the child will not control
+ * the tty.
+ */
+ && ( (sigaddset (&ourset, SIGINT) != 0)
+ || (sigaddset (&ourset, SIGQUIT) != 0)
+ || (sigaddset (&ourset, SIGTSTP) != 0)
+ || (sigaction (SIGINT, &action, NULL) != 0)
+ || (sigaction (SIGQUIT, &action, NULL) != 0)
+ || (sigaction (SIGTSTP, &action, NULL) != 0)))
+ || (sigprocmask (SIG_UNBLOCK, &ourset, NULL) != 0)
+ ) {
+ fprintf (stderr,
+ _("%s: signal masking malfunction\n"),
+ Prog);
+ caught = SIGTERM;
+ }
+ }
+
+ if (0 == caught) {
+ bool stop = true;
+
+ do {
+ pid_t pid;
+ stop = true;
+
+ pid = waitpid (-1, &status, WUNTRACED);
+
+ /* When interrupted by signal, the signal will be
+ * forwarded to the child, and termination will be
+ * forced later.
+ */
+ if ( ((pid_t)-1 == pid)
+ && (EINTR == errno)
+ && (SIGTSTP == caught)) {
+ caught = 0;
+ /* Except for SIGTSTP, which request to
+ * stop the child.
+ * We will SIGSTOP ourself on the next
+ * waitpid round.
+ */
+ kill (pid_child, SIGSTOP);
+ stop = false;
+ } else if ( ((pid_t)-1 != pid)
+ && (0 != WIFSTOPPED (status))) {
+ /* The child (shell) was suspended.
+ * Suspend su. */
+ kill (getpid (), SIGSTOP);
+ /* wake child when resumed */
+ kill (pid, SIGCONT);
+ stop = false;
+ } else if ( (pid_t)-1 != pid) {
+ pid_child = 0;
+ }
+ } while (!stop);
+ }
+
+ if (0 != caught && 0 != pid_child) {
+ (void) fputs ("\n", stderr);
+ (void) fputs (_("Session terminated, terminating shell..."),
+ stderr);
+ (void) kill (-pid_child, caught);
+
+ snprintf (kill_msg, sizeof kill_msg, _(" ...killed.\n"));
+ snprintf (wait_msg, sizeof wait_msg, _(" ...waiting for child to terminate.\n"));
+
+ (void) signal (SIGALRM, kill_child);
+ (void) signal (SIGCHLD, catch_signals);
+ (void) alarm (2);
+
+ sigemptyset (&ourset);
+ if ((sigaddset (&ourset, SIGALRM) != 0)
+ || (sigprocmask (SIG_BLOCK, &ourset, NULL) != 0)) {
+ fprintf (stderr, _("%s: signal masking malfunction\n"), Prog);
+ kill_child (0);
+ } else {
+ while (0 == waitpid (pid_child, &status, WNOHANG)) {
+ sigsuspend (&ourset);
+ }
+ pid_child = 0;
+ (void) sigprocmask (SIG_UNBLOCK, &ourset, NULL);
+ }
+
+ (void) fputs (_(" ...terminated.\n"), stderr);
+ }
+
+ ret = pam_close_session (pamh, 0);
+ if (PAM_SUCCESS != ret) {
+ SYSLOG ((LOG_ERR, "pam_close_session: %s",
+ pam_strerror (pamh, ret)));
+ fprintf (stderr, _("%s: %s\n"), Prog, pam_strerror (pamh, ret));
+ }
+
+ (void) pam_setcred (pamh, PAM_DELETE_CRED);
+ (void) pam_end (pamh, PAM_SUCCESS);
+
+ exit ((0 != WIFEXITED (status)) ? WEXITSTATUS (status)
+ : WTERMSIG (status) + 128);
+ /* Only the child returns. See above. */
+}
+#endif /* USE_PAM */
+
+/*
+ * usage - print command line syntax and exit
+ */
+static void usage (int status)
+{
+ (void)
+ fputs (_("Usage: su [options] [-] [username [args]]\n"
+ "\n"
+ "Options:\n"
+ " -c, --command COMMAND pass COMMAND to the invoked shell\n"
+ " -h, --help display this help message and exit\n"
+ " -, -l, --login make the shell a login shell\n"
+ " -m, -p,\n"
+ " --preserve-environment do not reset environment variables, and\n"
+ " keep the same shell\n"
+ " -s, --shell SHELL use SHELL instead of the default in passwd\n"
+ "\n"
+ "If no username is given, assume root.\n"), (E_SUCCESS != status) ? stderr : stdout);
+ exit (status);
+}
+
+#ifdef USE_PAM
+static void check_perms_pam (const struct passwd *pw)
+{
+ int ret;
+ ret = pam_authenticate (pamh, 0);
+ if (PAM_SUCCESS != ret) {
+ SYSLOG (((pw->pw_uid != 0)? LOG_NOTICE : LOG_WARN, "pam_authenticate: %s",
+ pam_strerror (pamh, ret)));
+ fprintf (stderr, _("%s: %s\n"), Prog, pam_strerror (pamh, ret));
+ (void) pam_end (pamh, ret);
+ su_failure (caller_tty, 0 == pw->pw_uid);
+ }
+
+ ret = pam_acct_mgmt (pamh, 0);
+ if (PAM_SUCCESS != ret) {
+ if (caller_is_root) {
+ fprintf (stderr,
+ _("%s: %s\n(Ignored)\n"),
+ Prog, pam_strerror (pamh, ret));
+ } else if (PAM_NEW_AUTHTOK_REQD == ret) {
+ ret = pam_chauthtok (pamh, PAM_CHANGE_EXPIRED_AUTHTOK);
+ if (PAM_SUCCESS != ret) {
+ SYSLOG ((LOG_ERR, "pam_chauthtok: %s",
+ pam_strerror (pamh, ret)));
+ fprintf (stderr,
+ _("%s: %s\n"),
+ Prog, pam_strerror (pamh, ret));
+ (void) pam_end (pamh, ret);
+ su_failure (caller_tty, 0 == pw->pw_uid);
+ }
+ } else {
+ SYSLOG ((LOG_ERR, "pam_acct_mgmt: %s",
+ pam_strerror (pamh, ret)));
+ fprintf (stderr,
+ _("%s: %s\n"),
+ Prog, pam_strerror (pamh, ret));
+ (void) pam_end (pamh, ret);
+ su_failure (caller_tty, 0 == pw->pw_uid);
+ }
+ }
+}
+#else /* !USE_PAM */
+static void check_perms_nopam (const struct passwd *pw)
+{
+ /*@observer@*/const struct spwd *spwd = NULL;
+ /*@observer@*/const char *password = pw->pw_passwd;
+ RETSIGTYPE (*oldsig) (int);
+
+ if (caller_is_root) {
+ return;
+ }
+
+ /*
+ * BSD systems only allow "wheel" to SU to root. USG systems don't,
+ * so we make this a configurable option.
+ */
+
+ /* The original Shadow 3.3.2 did this differently. Do it like BSD:
+ *
+ * - check for UID 0 instead of name "root" - there are systems with
+ * several root accounts under different names,
+ *
+ * - check the contents of /etc/group instead of the current group
+ * set (you must be listed as a member, GID 0 is not sufficient).
+ *
+ * In addition to this traditional feature, we now have complete su
+ * access control (allow, deny, no password, own password). Thanks
+ * to Chris Evans <lady0110@sable.ox.ac.uk>.
+ */
+
+ if ( (0 == pw->pw_uid)
+ && getdef_bool ("SU_WHEEL_ONLY")
+ && !iswheel (caller_name)) {
+ fprintf (stderr,
+ _("You are not authorized to su %s\n"),
+ name);
+ exit (1);
+ }
+ spwd = getspnam (name); /* !USE_PAM, no need for xgetspnam */
+#ifdef SU_ACCESS
+ if (strcmp (pw->pw_passwd, SHADOW_PASSWD_STRING) == 0) {
+ if (NULL != spwd) {
+ password = spwd->sp_pwdp;
+ }
+ }
+
+ switch (check_su_auth (caller_name, name, 0 == pw->pw_uid)) {
+ case 0: /* normal su, require target user's password */
+ break;
+ case 1: /* require no password */
+ password = ""; /* XXX warning: const */
+ break;
+ case 2: /* require own password */
+ (void) puts (_("(Enter your own password)"));
+ password = caller_pass;
+ break;
+ default: /* access denied (-1) or unexpected value */
+ fprintf (stderr,
+ _("You are not authorized to su %s\n"),
+ name);
+ exit (1);
+ }
+#endif /* SU_ACCESS */
+ /*
+ * Set up a signal handler in case the user types QUIT.
+ */
+ die (0);
+ oldsig = signal (SIGQUIT, die);
+
+ /*
+ * See if the system defined authentication method is being used.
+ * The first character of an administrator defined method is an '@'
+ * character.
+ */
+ if (pw_auth (password, name, PW_SU, (char *) 0) != 0) {
+ SYSLOG (((pw->pw_uid != 0)? LOG_NOTICE : LOG_WARN,
+ "Authentication failed for %s", name));
+ fprintf(stderr, _("%s: Authentication failure\n"), Prog);
+ su_failure (caller_tty, 0 == pw->pw_uid);
+ }
+ (void) signal (SIGQUIT, oldsig);
+
+ /*
+ * Check to see if the account is expired. root gets to ignore any
+ * expired accounts, but normal users can't become a user with an
+ * expired password.
+ */
+ if (NULL != spwd) {
+ (void) expire (pw, spwd);
+ }
+
+ /*
+ * Check to see if the account permits "su". root gets to ignore any
+ * restricted accounts, but normal users can't become a user if
+ * there is a "SU" entry in the /etc/porttime file denying access to
+ * the account.
+ */
+ if (!isttytime (name, "SU", time ((time_t *) 0))) {
+ SYSLOG (((0 != pw->pw_uid) ? LOG_WARN : LOG_CRIT,
+ "SU by %s to restricted account %s",
+ caller_name, name));
+ fprintf (stderr,
+ _("%s: You are not authorized to su at that time\n"),
+ Prog);
+ su_failure (caller_tty, 0 == pw->pw_uid);
+ }
+}
+#endif /* !USE_PAM */
+
+/*
+ * check_perms - check permissions to switch to the user 'name'
+ *
+ * In case of subsystem login, the user is first authenticated in the
+ * caller's root subsystem, and then in the user's target subsystem.
+ */
+static /*@only@*/struct passwd * check_perms (void)
+{
+#ifdef USE_PAM
+ const char *tmp_name;
+ int ret;
+#endif /* !USE_PAM */
+ /*
+ * The password file entries for the user is gotten and the account
+ * validated.
+ */
+ struct passwd *pw = xgetpwnam (name);
+ if (NULL == pw) {
+ (void) fprintf (stderr,
+ _("No passwd entry for user '%s'\n"), name);
+ SYSLOG ((LOG_NOTICE, "No passwd entry for user '%s'", name));
+ su_failure (caller_tty, true);
+ }
+
+ (void) signal (SIGINT, SIG_IGN);
+ (void) signal (SIGQUIT, SIG_IGN);
+
+#ifdef USE_PAM
+ check_perms_pam (pw);
+ /* PAM authentication can request a change of account */
+ ret = pam_get_item(pamh, PAM_USER, (const void **) &tmp_name);
+ if (ret != PAM_SUCCESS) {
+ SYSLOG((LOG_ERR, "pam_get_item: internal PAM error\n"));
+ (void) fprintf (stderr,
+ "%s: Internal PAM error retrieving username\n",
+ Prog);
+ (void) pam_end (pamh, ret);
+ su_failure (caller_tty, 0 == pw->pw_uid);
+ }
+ if (strcmp (name, tmp_name) != 0) {
+ SYSLOG ((LOG_INFO,
+ "Change user from '%s' to '%s' as requested by PAM",
+ name, tmp_name));
+ strncpy (name, tmp_name, sizeof(name) - 1);
+ name[sizeof(name) - 1] = '\0';
+ pw = xgetpwnam (name);
+ if (NULL == pw) {
+ (void) fprintf (stderr,
+ _("No passwd entry for user '%s'\n"),
+ name);
+ SYSLOG ((LOG_NOTICE,
+ "No passwd entry for user '%s'", name));
+ su_failure (caller_tty, true);
+ }
+ }
+#else /* !USE_PAM */
+ check_perms_nopam (pw);
+#endif /* !USE_PAM */
+
+ (void) signal (SIGINT, SIG_DFL);
+ (void) signal (SIGQUIT, SIG_DFL);
+
+ /*
+ * Even if --shell is specified, the subsystem login test is based on
+ * the shell specified in /etc/passwd (not the one specified with
+ * --shell, which will be the one executed in the chroot later).
+ */
+ if ('*' == pw->pw_shell[0]) { /* subsystem root required */
+ subsystem (pw); /* change to the subsystem root */
+ endpwent (); /* close the old password databases */
+ endspent ();
+ pw_free (pw);
+ return check_perms (); /* authenticate in the subsystem */
+ }
+
+ return pw;
+}
+
+/*
+ * save_caller_context - save information from the call context
+ *
+ * Save the program's name (Prog), caller's UID (caller_uid /
+ * caller_is_root), name (caller_name), and password (caller_pass),
+ * the TTY (ttyp), and whether su was called from a console
+ * (is_console) for further processing and before they might change.
+ */
+static void save_caller_context (char **argv)
+{
+ struct passwd *pw = NULL;
+#ifndef USE_PAM
+#ifdef SU_ACCESS
+ const char *password = NULL;
+#endif /* SU_ACCESS */
+#endif /* !USE_PAM */
+ /*
+ * Get the program name. The program name is used as a prefix to
+ * most error messages.
+ */
+ Prog = Basename (argv[0]);
+
+ caller_uid = getuid ();
+ caller_is_root = (caller_uid == 0);
+
+ /*
+ * Get the tty name. Entries will be logged indicating that the user
+ * tried to change to the named new user from the current terminal.
+ */
+ caller_tty = ttyname (0);
+ if ((isatty (0) != 0) && (NULL != caller_tty)) {
+#ifndef USE_PAM
+ caller_on_console = console (caller_tty);
+#endif /* !USE_PAM */
+ } else {
+ /*
+ * Be more paranoid, like su from SimplePAMApps. --marekm
+ */
+ if (!caller_is_root) {
+ fprintf (stderr,
+ _("%s: must be run from a terminal\n"),
+ Prog);
+ exit (1);
+ }
+ caller_tty = "???";
+ }
+
+ /*
+ * Get the user's real name. The current UID is used to determine
+ * who has executed su. That user ID must exist.
+ */
+ pw = get_my_pwent ();
+ if (NULL == pw) {
+ fprintf (stderr,
+ _("%s: Cannot determine your user name.\n"),
+ Prog);
+ SYSLOG ((LOG_WARN, "Cannot determine the user name of the caller (UID %lu)",
+ (unsigned long) caller_uid));
+ su_failure (caller_tty, true); /* unknown target UID*/
+ }
+ STRFCPY (caller_name, pw->pw_name);
+
+#ifndef USE_PAM
+#ifdef SU_ACCESS
+ /*
+ * Sort out the password of user calling su, in case needed later
+ * -- chris
+ */
+ password = pw->pw_passwd;
+ if (strcmp (pw->pw_passwd, SHADOW_PASSWD_STRING) == 0) {
+ const struct spwd *spwd = getspnam (caller_name);
+ if (NULL != spwd) {
+ password = spwd->sp_pwdp;
+ }
+ }
+ free (caller_pass);
+ caller_pass = xstrdup (password);
+#endif /* SU_ACCESS */
+#endif /* !USE_PAM */
+ pw_free (pw);
+}
+
+/*
+ * process_flags - Process the command line arguments
+ *
+ * process_flags() interprets the command line arguments and sets
+ * the values that the user will be created with accordingly. The
+ * values are checked for sanity.
+ */
+static void process_flags (int argc, char **argv)
+{
+ int c;
+ static struct option long_options[] = {
+ {"command", required_argument, NULL, 'c'},
+ {"help", no_argument, NULL, 'h'},
+ {"login", no_argument, NULL, 'l'},
+ {"preserve-environment", no_argument, NULL, 'p'},
+ {"shell", required_argument, NULL, 's'},
+ {NULL, 0, NULL, '\0'}
+ };
+
+ while ((c = getopt_long (argc, argv, "c:hlmps:",
+ long_options, NULL)) != -1) {
+ switch (c) {
+ case 'c':
+ command = optarg;
+ break;
+ case 'h':
+ usage (E_SUCCESS);
+ break;
+ case 'l':
+ fakelogin = true;
+ break;
+ case 'm':
+ case 'p':
+ /* This will only have an effect if the target
+ * user do not have a restricted shell, or if
+ * su is called by root.
+ */
+ change_environment = false;
+ break;
+ case 's':
+ shellstr = optarg;
+ break;
+ default:
+ usage (E_USAGE); /* NOT REACHED */
+ }
+ }
+
+ if ((optind < argc) && (strcmp (argv[optind], "-") == 0)) {
+ fakelogin = true;
+ optind++;
+ }
+
+ if (optind < argc) {
+ STRFCPY (name, argv[optind++]); /* use this login id */
+ }
+ if ('\0' == name[0]) { /* use default user */
+ struct passwd *root_pw = getpwnam ("root");
+ if ((NULL != root_pw) && (0 == root_pw->pw_uid)) {
+ (void) strcpy (name, "root");
+ } else {
+ root_pw = getpwuid (0);
+ if (NULL == root_pw) {
+ SYSLOG ((LOG_CRIT, "There is no UID 0 user."));
+ su_failure (caller_tty, true);
+ }
+ (void) strcpy (name, root_pw->pw_name);
+ }
+ }
+
+ doshell = (argc == optind); /* any arguments remaining? */
+ if (NULL != command) {
+ doshell = false;
+ }
+}
+
+static void set_environment (struct passwd *pw)
+{
+ const char *cp;
+ /*
+ * If a new login is being set up, the old environment will be
+ * ignored and a new one created later on.
+ */
+ if (change_environment && fakelogin) {
+ /*
+ * The terminal type will be left alone if it is present in
+ * the environment already.
+ */
+ cp = getenv ("TERM");
+ if (NULL != cp) {
+ addenv ("TERM", cp);
+ }
+
+ /*
+ * For some terminals COLORTERM seems to be the only way
+ * for checking for that specific terminal. For instance,
+ * gnome-terminal sets its TERM as "xterm" but its
+ * COLORTERM as "gnome-terminal". The COLORTERM variable
+ * is also of use when running GNU screen since it sets
+ * TERM to "screen" but doesn't touch COLORTERM.
+ */
+ cp = getenv ("COLORTERM");
+ if (NULL != cp) {
+ addenv ("COLORTERM", cp);
+ }
+
+#ifndef USE_PAM
+ cp = getdef_str ("ENV_TZ");
+ if (NULL != cp) {
+ addenv (('/' == *cp) ? tz (cp) : cp, NULL);
+ }
+
+ /*
+ * The clock frequency will be reset to the login value if required
+ */
+ cp = getdef_str ("ENV_HZ");
+ if (NULL != cp) {
+ addenv (cp, NULL); /* set the default $HZ, if one */
+ }
+#endif /* !USE_PAM */
+
+ /*
+ * Also leave DISPLAY and XAUTHORITY if present, else
+ * pam_xauth will not work.
+ */
+ cp = getenv ("DISPLAY");
+ if (NULL != cp) {
+ addenv ("DISPLAY", cp);
+ }
+ cp = getenv ("XAUTHORITY");
+ if (NULL != cp) {
+ addenv ("XAUTHORITY", cp);
+ }
+ } else {
+ char **envp = environ;
+ while (NULL != *envp) {
+ addenv (*envp, NULL);
+ envp++;
+ }
+ }
+
+ cp = getdef_str ((pw->pw_uid == 0) ? "ENV_SUPATH" : "ENV_PATH");
+ if (NULL == cp) {
+ addenv ((pw->pw_uid == 0) ? "PATH=/sbin:/bin:/usr/sbin:/usr/bin" : "PATH=/bin:/usr/bin", NULL);
+ } else if (strchr (cp, '=') != NULL) {
+ addenv (cp, NULL);
+ } else {
+ addenv ("PATH", cp);
+ }
+
+ if (getenv ("IFS") != NULL) { /* don't export user IFS ... */
+ addenv ("IFS= \t\n", NULL); /* ... instead, set a safe IFS */
+ }
+
+ environ = newenvp; /* make new environment active */
+
+ if (change_environment) {
+ if (fakelogin) {
+ if (shellstr != pw->pw_shell) {
+ free (pw->pw_shell);
+ pw->pw_shell = xstrdup (shellstr);
+ }
+ setup_env (pw);
+ } else {
+ addenv ("HOME", pw->pw_dir);
+ addenv ("USER", pw->pw_name);
+ addenv ("LOGNAME", pw->pw_name);
+ addenv ("SHELL", shellstr);
+ }
+
+#ifdef USE_PAM
+ /* we need to setup the environment *after* pam_open_session(),
+ * else the UID is changed before stuff like pam_xauth could
+ * run, and we cannot access /etc/shadow and co
+ */
+ /* update environment with all pam set variables */
+ char **envcp = pam_getenvlist (pamh);
+ if (NULL != envcp) {
+ while (NULL != *envcp) {
+ addenv (*envcp, NULL);
+ envcp++;
+ }
+ }
+#endif /* !USE_PAM */
+ }
+
+}
+
+/*
+ * su - switch user id
+ *
+ * su changes the user's ids to the values for the specified user. if
+ * no new user name is specified, "root" or UID 0 is used by default.
+ *
+ * Any additional arguments are passed to the user's shell. In
+ * particular, the argument "-c" will cause the next argument to be
+ * interpreted as a command by the common shell programs.
+ */
+int main (int argc, char **argv)
+{
+ const char *cp;
+ struct passwd *pw = NULL;
+
+#ifdef USE_PAM
+ int ret;
+#endif /* USE_PAM */
+
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ save_caller_context (argv);
+
+ OPENLOG ("su");
+
+ process_flags (argc, argv);
+
+ initenv ();
+
+#ifdef USE_PAM
+ ret = pam_start ("su", name, &conv, &pamh);
+ if (PAM_SUCCESS != ret) {
+ SYSLOG ((LOG_ERR, "pam_start: error %d", ret);
+ fprintf (stderr,
+ _("%s: pam_start: error %d\n"),
+ Prog, ret));
+ exit (1);
+ }
+
+ ret = pam_set_item (pamh, PAM_TTY, (const void *) caller_tty);
+ if (PAM_SUCCESS == ret) {
+ ret = pam_set_item (pamh, PAM_RUSER, (const void *) caller_name);
+ }
+ if (PAM_SUCCESS != ret) {
+ SYSLOG ((LOG_ERR, "pam_set_item: %s",
+ pam_strerror (pamh, ret)));
+ fprintf (stderr, _("%s: %s\n"), Prog, pam_strerror (pamh, ret));
+ pam_end (pamh, ret);
+ exit (1);
+ }
+#endif /* USE_PAM */
+
+ pw = check_perms ();
+
+ /* If the user do not want to change the environment,
+ * use the current SHELL.
+ * (unless another shell is required by the command line)
+ */
+ if ((NULL == shellstr) && !change_environment) {
+ shellstr = getenv ("SHELL");
+ }
+
+ /* If su is not called by root, and the target user has a
+ * restricted shell, the environment must be changed and the shell
+ * must be the one specified in /etc/passwd.
+ */
+ if ( !caller_is_root
+ && restricted_shell (pw->pw_shell)) {
+ shellstr = NULL;
+ change_environment = true;
+ }
+
+ /* If the shell is not set at this time, use the shell specified
+ * in /etc/passwd.
+ */
+ if (NULL == shellstr) {
+ shellstr = pw->pw_shell;
+ }
+
+ /*
+ * Set the default shell.
+ */
+ if ((NULL == shellstr) || ('\0' == shellstr[0])) {
+ shellstr = SHELL;
+ }
+
+ sulog (caller_tty, true, caller_name, name); /* save SU information */
+#ifdef USE_SYSLOG
+ if (getdef_bool ("SYSLOG_SU_ENAB")) {
+ SYSLOG ((LOG_INFO, "+ %s %s:%s", caller_tty,
+ ('\0' != caller_name[0]) ? caller_name : "???",
+ ('\0' != name[0]) ? name : "???"));
+ }
+#endif
+
+#ifdef USE_PAM
+ /* set primary group id and supplementary groups */
+ if (setup_groups (pw) != 0) {
+ pam_end (pamh, PAM_ABORT);
+ exit (1);
+ }
+
+ /*
+ * pam_setcred() may do things like resource limits, console groups,
+ * and much more, depending on the configured modules
+ */
+ ret = pam_setcred (pamh, PAM_ESTABLISH_CRED);
+ if (PAM_SUCCESS != ret) {
+ SYSLOG ((LOG_ERR, "pam_setcred: %s", pam_strerror (pamh, ret)));
+ fprintf (stderr, _("%s: %s\n"), Prog, pam_strerror (pamh, ret));
+ (void) pam_end (pamh, ret);
+ exit (1);
+ }
+
+ ret = pam_open_session (pamh, 0);
+ if (PAM_SUCCESS != ret) {
+ SYSLOG ((LOG_ERR, "pam_open_session: %s",
+ pam_strerror (pamh, ret)));
+ fprintf (stderr, _("%s: %s\n"), Prog, pam_strerror (pamh, ret));
+ pam_setcred (pamh, PAM_DELETE_CRED);
+ (void) pam_end (pamh, ret);
+ exit (1);
+ }
+
+ prepare_pam_close_session ();
+
+ /* become the new user */
+ if (change_uid (pw) != 0) {
+ exit (1);
+ }
+#else /* !USE_PAM */
+ /* no limits if su from root (unless su must fake login's behavior) */
+ if (!caller_is_root || fakelogin) {
+ setup_limits (pw);
+ }
+
+ if (setup_uid_gid (pw, caller_on_console) != 0) {
+ exit (1);
+ }
+#endif /* !USE_PAM */
+
+#ifdef WITH_AUDIT
+ audit_fd = audit_open ();
+ audit_log_acct_message (audit_fd,
+ AUDIT_USER_ROLE_CHANGE,
+ NULL, /* Prog. name */
+ "su",
+ ('\0' != caller_name[0]) ? caller_name : "???",
+ AUDIT_NO_ID,
+ "localhost",
+ NULL, /* addr */
+ caller_tty,
+ 1); /* result */
+ close (audit_fd);
+#endif /* WITH_AUDIT */
+
+ set_environment (pw);
+
+ if (!doshell) {
+ /* There is no need for a controlling terminal.
+ * This avoids the callee to inject commands on
+ * the caller's tty. */
+ int err = -1;
+
+#ifdef USE_PAM
+ /* When PAM is used, we are on the child */
+ err = setsid ();
+#else
+ /* Otherwise, we cannot use setsid */
+ int fd = open ("/dev/tty", O_RDWR);
+
+ if (fd >= 0) {
+ err = ioctl (fd, TIOCNOTTY, (char *) 0);
+ (void) close (fd);
+ } else if (ENXIO == errno) {
+ /* There are no controlling terminal already */
+ err = 0;
+ }
+#endif /* USE_PAM */
+
+ if (-1 == err) {
+ (void) fprintf (stderr,
+ _("%s: Cannot drop the controlling terminal\n"),
+ Prog);
+ exit (1);
+ }
+ }
+
+ /*
+ * PAM_DATA_SILENT is not supported by some modules, and
+ * there is no strong need to clean up the process space's
+ * memory since we will either call exec or exit.
+ pam_end (pamh, PAM_SUCCESS | PAM_DATA_SILENT);
+ */
+
+ endpwent ();
+ endspent ();
+ /*
+ * This is a workaround for Linux libc bug/feature (?) - the
+ * /dev/log file descriptor is open without the close-on-exec flag
+ * and used to be passed to the new shell. There is "fcntl(LogFile,
+ * F_SETFD, 1)" in libc/misc/syslog.c, but it is commented out (at
+ * least in 5.4.33). Why? --marekm
+ */
+ closelog ();
+
+ /*
+ * See if the user has extra arguments on the command line. In that
+ * case they will be provided to the new user's shell as arguments.
+ */
+ if (fakelogin) {
+ char *arg0;
+
+ cp = getdef_str ("SU_NAME");
+ if (NULL == cp) {
+ cp = Basename (shellstr);
+ }
+
+ arg0 = xmalloc (strlen (cp) + 2);
+ arg0[0] = '-';
+ strcpy (arg0 + 1, cp);
+ cp = arg0;
+ } else {
+ cp = Basename (shellstr);
+ }
+
+ if (!doshell) {
+ int err;
+ /* Position argv to the remaining arguments */
+ argv += optind;
+ if (NULL != command) {
+ argv -= 2;
+ argv[0] = "-c";
+ argv[1] = command;
+ }
+ /*
+ * Use the shell and create an argv
+ * with the rest of the command line included.
+ */
+ argv[-1] = cp;
+ execve_shell (shellstr, &argv[-1], environ);
+ err = errno;
+ (void) fprintf (stderr,
+ _("Cannot execute %s\n"), shellstr);
+ errno = err;
+ } else {
+ (void) shell (shellstr, cp, environ);
+ }
+
+ pw_free (pw);
+
+ return (errno == ENOENT ? E_CMD_NOTFOUND : E_CMD_NOEXEC);
+}
+
diff --git a/src/suauth.c b/src/suauth.c
new file mode 100644
index 0000000..619a593
--- /dev/null
+++ b/src/suauth.c
@@ -0,0 +1,239 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2002 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, 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>
+#include <errno.h>
+#include <grp.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include "defines.h"
+#include "prototypes.h"
+
+#ifndef SUAUTHFILE
+#define SUAUTHFILE "/etc/suauth"
+#endif
+
+#define NOACTION 0
+#define NOPWORD 1
+#define DENY -1
+#define OWNPWORD 2
+
+#ifdef SU_ACCESS
+
+/* Really, I could do with a few const char's here defining all the
+ * strings output to the user or the syslog. -- chris
+ */
+static int applies (const char *, char *);
+
+static int isgrp (const char *, const char *);
+
+static int lines = 0;
+
+
+int check_su_auth (const char *actual_id,
+ const char *wanted_id,
+ bool su_to_root)
+{
+ int posn, endline;
+ const char field[] = ":";
+ FILE *authfile_fd;
+ char temp[1024];
+ char *to_users;
+ char *from_users;
+ char *action;
+
+ if (!(authfile_fd = fopen (SUAUTHFILE, "r"))) {
+ int err = errno;
+ /*
+ * If the file doesn't exist - default to the standard su
+ * behaviour (no access control). If open fails for some
+ * other reason - maybe someone is trying to fool us with
+ * file descriptors limit etc., so deny access. --marekm
+ */
+ if (ENOENT == err) {
+ return NOACTION;
+ }
+ SYSLOG ((LOG_ERR,
+ "could not open/read config file '%s': %s\n",
+ SUAUTHFILE, strerror (err)));
+ return DENY;
+ }
+
+ while (fgets (temp, sizeof (temp), authfile_fd) != NULL) {
+ lines++;
+
+ if (temp[endline = strlen (temp) - 1] != '\n') {
+ SYSLOG ((LOG_ERR,
+ "%s, line %d: line too long or missing newline",
+ SUAUTHFILE, lines));
+ continue;
+ }
+
+ while (endline > 0 && (temp[endline - 1] == ' '
+ || temp[endline - 1] == '\t'
+ || temp[endline - 1] == '\n'))
+ endline--;
+ temp[endline] = '\0';
+
+ posn = 0;
+ while (temp[posn] == ' ' || temp[posn] == '\t')
+ posn++;
+
+ if (temp[posn] == '\n' || temp[posn] == '#'
+ || temp[posn] == '\0') {
+ continue;
+ }
+ if (!(to_users = strtok (temp + posn, field))
+ || !(from_users = strtok ((char *) NULL, field))
+ || !(action = strtok ((char *) NULL, field))
+ || strtok ((char *) NULL, field)) {
+ SYSLOG ((LOG_ERR,
+ "%s, line %d. Bad number of fields.\n",
+ SUAUTHFILE, lines));
+ continue;
+ }
+
+ if (!applies (wanted_id, to_users))
+ continue;
+ if (!applies (actual_id, from_users))
+ continue;
+ if (!strcmp (action, "DENY")) {
+ SYSLOG ((su_to_root ? LOG_WARN : LOG_NOTICE,
+ "DENIED su from '%s' to '%s' (%s)\n",
+ actual_id, wanted_id, SUAUTHFILE));
+ fputs (_("Access to su to that account DENIED.\n"),
+ stderr);
+ fclose (authfile_fd);
+ return DENY;
+ } else if (!strcmp (action, "NOPASS")) {
+ SYSLOG ((su_to_root ? LOG_NOTICE : LOG_INFO,
+ "NO password asked for su from '%s' to '%s' (%s)\n",
+ actual_id, wanted_id, SUAUTHFILE));
+ fputs (_("Password authentication bypassed.\n"),stderr);
+ fclose (authfile_fd);
+ return NOPWORD;
+ } else if (!strcmp (action, "OWNPASS")) {
+ SYSLOG ((su_to_root ? LOG_NOTICE : LOG_INFO,
+ "su from '%s' to '%s': asking for user's own password (%s)\n",
+ actual_id, wanted_id, SUAUTHFILE));
+ fputs (_("Please enter your OWN password as authentication.\n"),
+ stderr);
+ fclose (authfile_fd);
+ return OWNPWORD;
+ } else {
+ SYSLOG ((LOG_ERR,
+ "%s, line %d: unrecognized action!\n",
+ SUAUTHFILE, lines));
+ }
+ }
+ fclose (authfile_fd);
+ return NOACTION;
+}
+
+static int applies (const char *single, char *list)
+{
+ const char split[] = ", ";
+ char *tok;
+
+ int state = 0;
+
+ for (tok = strtok (list, split); tok != NULL;
+ tok = strtok (NULL, split)) {
+
+ if (!strcmp (tok, "ALL")) {
+ if (state != 0) {
+ SYSLOG ((LOG_ERR,
+ "%s, line %d: ALL in bad place\n",
+ SUAUTHFILE, lines));
+ return 0;
+ }
+ state = 1;
+ } else if (!strcmp (tok, "EXCEPT")) {
+ if (state != 1) {
+ SYSLOG ((LOG_ERR,
+ "%s, line %d: EXCEPT in bas place\n",
+ SUAUTHFILE, lines));
+ return 0;
+ }
+ state = 2;
+ } else if (!strcmp (tok, "GROUP")) {
+ if ((state != 0) && (state != 2)) {
+ SYSLOG ((LOG_ERR,
+ "%s, line %d: GROUP in bad place\n",
+ SUAUTHFILE, lines));
+ return 0;
+ }
+ state = (state == 0) ? 3 : 4;
+ } else {
+ switch (state) {
+ case 0: /* No control words yet */
+ if (!strcmp (tok, single))
+ return 1;
+ break;
+ case 1: /* An all */
+ SYSLOG ((LOG_ERR,
+ "%s, line %d: expect another token after ALL\n",
+ SUAUTHFILE, lines));
+ return 0;
+ case 2: /* All except */
+ if (!strcmp (tok, single))
+ return 0;
+ break;
+ case 3: /* Group */
+ if (isgrp (single, tok))
+ return 1;
+ break;
+ case 4: /* All except group */
+ if (isgrp (single, tok))
+ return 0;
+ /* FALL THRU */
+ }
+ }
+ }
+ if ((state != 0) && (state != 3))
+ return 1;
+ return 0;
+}
+
+static int isgrp (const char *name, const char *group)
+{
+ struct group *grp;
+
+ grp = getgrnam (group); /* local, no need for xgetgrnam */
+
+ if (!grp || !grp->gr_mem)
+ return 0;
+
+ return is_on_list (grp->gr_mem, name);
+}
+#endif /* SU_ACCESS */
diff --git a/src/sulogin.c b/src/sulogin.c
new file mode 100644
index 0000000..4264099
--- /dev/null
+++ b/src/sulogin.c
@@ -0,0 +1,257 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2002 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2010, 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 <fcntl.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdio.h>
+#include <sys/ioctl.h>
+#include "defines.h"
+#include "getdef.h"
+#include "prototypes.h"
+#include "pwauth.h"
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+/*
+ * Global variables
+ */
+const char *Prog;
+
+static char name[BUFSIZ];
+static char pass[BUFSIZ];
+
+static struct passwd pwent;
+
+extern char **newenvp;
+extern size_t newenvc;
+
+extern char **environ;
+
+#ifndef ALARM
+#define ALARM 60
+#endif
+
+/* local function prototypes */
+static RETSIGTYPE catch_signals (int);
+
+static RETSIGTYPE catch_signals (unused int sig)
+{
+ _exit (1);
+}
+
+/*
+ * syslogd is usually not running at the time when sulogin is typically
+ * called, cluttering the screen with unnecessary messages. Suggested by
+ * Ivan Nejgebauer <ian@unsux.ns.ac.yu>. --marekm
+ */
+#undef USE_SYSLOG
+
+ /*ARGSUSED*/ int main (int argc, char **argv)
+{
+#ifndef USE_PAM
+ const char *env;
+#endif /* !USE_PAM */
+ char **envp = environ;
+ TERMIO termio;
+ int err = 0;
+
+#ifdef USE_TERMIO
+ ioctl (0, TCGETA, &termio);
+ termio.c_iflag |= (ICRNL | IXON);
+ termio.c_oflag |= (OPOST | ONLCR);
+ termio.c_cflag |= (CREAD);
+ termio.c_lflag |= (ISIG | ICANON | ECHO | ECHOE | ECHOK);
+ ioctl (0, TCSETAF, &termio);
+#endif
+#ifdef USE_TERMIOS
+ tcgetattr (0, &termio);
+ termio.c_iflag |= (ICRNL | IXON);
+ termio.c_oflag |= (CREAD);
+ termio.c_lflag |= (ECHO | ECHOE | ECHOK | ICANON | ISIG);
+ tcsetattr (0, TCSANOW, &termio);
+#endif
+
+ Prog = Basename (argv[0]);
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+#ifdef USE_SYSLOG
+ OPENLOG ("sulogin");
+#endif
+ initenv ();
+ if (argc > 1) {
+ close (0);
+ close (1);
+ close (2);
+
+ if (open (argv[1], O_RDWR) >= 0) {
+ dup (0);
+ dup (0);
+ } else {
+#ifdef USE_SYSLOG
+ SYSLOG (LOG_WARN, "cannot open %s\n", argv[1]);
+ closelog ();
+#endif
+ exit (1);
+ }
+ }
+ if (access (PASSWD_FILE, F_OK) == -1) { /* must be a password file! */
+ (void) puts (_("No password file"));
+#ifdef USE_SYSLOG
+ SYSLOG (LOG_WARN, "No password file\n");
+ closelog ();
+#endif
+ exit (1);
+ }
+#if !defined(DEBUG) && defined(SULOGIN_ONLY_INIT)
+ if (getppid () != 1) { /* parent must be INIT */
+#ifdef USE_SYSLOG
+ SYSLOG (LOG_WARN, "Pid == %d, not 1\n", getppid ());
+ closelog ();
+#endif
+ exit (1);
+ }
+#endif
+ if ((isatty (0) == 0) || (isatty (1) == 0) || (isatty (2) == 0)) {
+#ifdef USE_SYSLOG
+ closelog ();
+#endif
+ exit (1); /* must be a terminal */
+ }
+ /* If we were init, we need to start a new session */
+ if (getppid() == 1) {
+ setsid();
+ if (ioctl(0, TIOCSCTTY, 1) != 0) {
+ (void) fputs (_("TIOCSCTTY failed"), stderr);
+ }
+ }
+ while (NULL != *envp) { /* add inherited environment, */
+ addenv (*envp, NULL); /* some variables change later */
+ envp++;
+ }
+
+#ifndef USE_PAM
+ env = getdef_str ("ENV_TZ");
+ if (NULL != env) {
+ addenv (('/' == *env) ? tz (env) : env, NULL);
+ }
+ env = getdef_str ("ENV_HZ");
+ if (NULL != env) {
+ addenv (env, NULL); /* set the default $HZ, if one */
+ }
+#endif /* !USE_PAM */
+
+ (void) strcpy (name, "root"); /* KLUDGE!!! */
+
+ (void) signal (SIGALRM, catch_signals); /* exit if the timer expires */
+ (void) alarm (ALARM); /* only wait so long ... */
+
+ while (true) { /* repeatedly get login/password pairs */
+ char *cp;
+ pw_entry (name, &pwent); /* get entry from password file */
+ if (pwent.pw_name == (char *) 0) {
+ /*
+ * Fail secure
+ */
+ (void) puts (_("No password entry for 'root'"));
+#ifdef USE_SYSLOG
+ SYSLOG (LOG_WARN, "No password entry for 'root'\n");
+ closelog ();
+#endif
+ exit (1);
+ }
+
+ /*
+ * Here we prompt for the root password, or if no password
+ * is given we just exit.
+ */
+
+ /* get a password for root */
+ cp = getpass (_(
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"));
+ /*
+ * XXX - can't enter single user mode if root password is
+ * empty. I think this doesn't happen very often :-). But
+ * it will work with standard getpass() (no NULL on EOF).
+ * --marekm
+ */
+ if ((NULL == cp) || ('\0' == *cp)) {
+#ifdef USE_SYSLOG
+ SYSLOG (LOG_INFO, "Normal startup\n");
+ closelog ();
+#endif
+ (void) puts ("");
+#ifdef TELINIT
+ execl (PATH_TELINIT, "telinit", RUNLEVEL, (char *) 0);
+#endif
+ exit (0);
+ } else {
+ STRFCPY (pass, cp);
+ strzero (cp);
+ }
+ if (valid (pass, &pwent)) { /* check encrypted passwords ... */
+ break; /* ... encrypted passwords matched */
+ }
+
+#ifdef USE_SYSLOG
+ SYSLOG (LOG_WARN, "Incorrect root password\n");
+#endif
+ sleep (2);
+ (void) puts (_("Login incorrect"));
+ }
+ strzero (pass);
+ (void) alarm (0);
+ (void) signal (SIGALRM, SIG_DFL);
+ environ = newenvp; /* make new environment active */
+
+ (void) puts (_("Entering System Maintenance Mode"));
+#ifdef USE_SYSLOG
+ SYSLOG (LOG_INFO, "System Maintenance Mode\n");
+#endif
+
+#ifdef USE_SYSLOG
+ closelog ();
+#endif
+ /* exec the shell finally. */
+ err = shell (pwent.pw_shell, (char *) 0, environ);
+
+ return ((err == ENOENT) ? E_CMD_NOTFOUND : E_CMD_NOEXEC);
+}
+
diff --git a/src/useradd.c b/src/useradd.c
new file mode 100644
index 0000000..a679392
--- /dev/null
+++ b/src/useradd.c
@@ -0,0 +1,2519 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2012, 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 <assert.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <grp.h>
+#include <lastlog.h>
+#include <pwd.h>
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+#include "pam_defs.h"
+#endif /* USE_PAM */
+#endif /* ACCT_TOOLS_SETUID */
+#include <stdio.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <time.h>
+#include <unistd.h>
+#include "chkname.h"
+#include "defines.h"
+#include "faillog.h"
+#include "getdef.h"
+#include "groupio.h"
+#include "nscd.h"
+#include "sssd.h"
+#include "prototypes.h"
+#include "pwauth.h"
+#include "pwio.h"
+#ifdef SHADOWGRP
+#include "sgroupio.h"
+#endif
+#include "shadowio.h"
+#ifdef ENABLE_SUBIDS
+#include "subordinateio.h"
+#endif /* ENABLE_SUBIDS */
+#ifdef WITH_TCB
+#include "tcbfuncs.h"
+#endif
+
+#ifndef SKEL_DIR
+#define SKEL_DIR "/etc/skel"
+#endif
+#ifndef USER_DEFAULTS_FILE
+#define USER_DEFAULTS_FILE "/etc/default/useradd"
+#define NEW_USER_FILE "/etc/default/nuaddXXXXXX"
+#endif
+/*
+ * Needed for MkLinux DR1/2/2.1 - J.
+ */
+#ifndef LASTLOG_FILE
+#define LASTLOG_FILE "/var/log/lastlog"
+#endif
+/*
+ * Global variables
+ */
+const char *Prog;
+
+/*
+ * These defaults are used if there is no defaults file.
+ */
+static gid_t def_group = 100;
+static const char *def_gname = "other";
+static const char *def_home = "/home";
+static const char *def_shell = "";
+static const char *def_template = SKEL_DIR;
+static const char *def_create_mail_spool = "no";
+
+static long def_inactive = -1;
+static const char *def_expire = "";
+
+#define VALID(s) (strcspn (s, ":\n") == strlen (s))
+
+static const char *user_name = "";
+static const char *user_pass = "!";
+static uid_t user_id;
+static gid_t user_gid;
+static const char *user_comment = "";
+static const char *user_home = "";
+static const char *user_shell = "";
+static const char *create_mail_spool = "";
+
+static const char *prefix = "";
+static const char *prefix_user_home = NULL;
+
+#ifdef WITH_SELINUX
+static /*@notnull@*/const char *user_selinux = "";
+#endif /* WITH_SELINUX */
+
+static long user_expire = -1;
+static bool is_shadow_pwd;
+
+#ifdef SHADOWGRP
+static bool is_shadow_grp;
+static bool sgr_locked = false;
+#endif
+#ifdef ENABLE_SUBIDS
+static bool is_sub_uid = false;
+static bool is_sub_gid = false;
+static bool sub_uid_locked = false;
+static bool sub_gid_locked = false;
+static uid_t sub_uid_start; /* New subordinate uid range */
+static unsigned long sub_uid_count;
+static gid_t sub_gid_start; /* New subordinate gid range */
+static unsigned long sub_gid_count;
+#endif /* ENABLE_SUBIDS */
+static bool pw_locked = false;
+static bool gr_locked = false;
+static bool spw_locked = false;
+static char **user_groups; /* NULL-terminated list */
+static long sys_ngroups;
+static bool do_grp_update = false; /* group files need to be updated */
+
+extern int allow_bad_names;
+
+static bool
+ bflg = false, /* new default root of home directory */
+ cflg = false, /* comment (GECOS) field for new account */
+ dflg = false, /* home directory for new account */
+ Dflg = false, /* set/show new user default values */
+ eflg = false, /* days since 1970-01-01 when account is locked */
+ fflg = false, /* days until account with expired password is locked */
+ gflg = false, /* primary group ID for new account */
+ Gflg = false, /* secondary group set for new account */
+ kflg = false, /* specify a directory to fill new user directory */
+ lflg = false, /* do not add user to lastlog/faillog databases */
+ mflg = false, /* create user's home directory if it doesn't exist */
+ Mflg = false, /* do not create user's home directory even if CREATE_HOME is set */
+ Nflg = false, /* do not create a group having the same name as the user, but add the user to def_group (or the group specified with -g) */
+ oflg = false, /* permit non-unique user ID to be specified with -u */
+ rflg = false, /* create a system account */
+ sflg = false, /* shell program for new account */
+ subvolflg = false, /* create subvolume home on BTRFS */
+ uflg = false, /* specify user ID for new account */
+ Uflg = false; /* create a group having the same name as the user */
+
+#ifdef WITH_SELINUX
+#define Zflg ('\0' != *user_selinux)
+#endif /* WITH_SELINUX */
+
+static bool home_added = false;
+
+/*
+ * exit status values
+ */
+/*@-exitarg@*/
+#define E_SUCCESS 0 /* success */
+#define E_PW_UPDATE 1 /* can't update password file */
+#define E_USAGE 2 /* invalid command syntax */
+#define E_BAD_ARG 3 /* invalid argument to option */
+#define E_UID_IN_USE 4 /* UID already in use (and no -o) */
+#define E_NOTFOUND 6 /* specified group doesn't exist */
+#define E_NAME_IN_USE 9 /* username already in use */
+#define E_GRP_UPDATE 10 /* can't update group file */
+#define E_HOMEDIR 12 /* can't create home directory */
+#define E_SE_UPDATE 14 /* can't update SELinux user mapping */
+#ifdef ENABLE_SUBIDS
+#define E_SUB_UID_UPDATE 16 /* can't update the subordinate uid file */
+#define E_SUB_GID_UPDATE 18 /* can't update the subordinate gid file */
+#endif /* ENABLE_SUBIDS */
+
+#define DGROUP "GROUP="
+#define DHOME "HOME="
+#define DSHELL "SHELL="
+#define DINACT "INACTIVE="
+#define DEXPIRE "EXPIRE="
+#define DSKEL "SKEL="
+#define DCREATE_MAIL_SPOOL "CREATE_MAIL_SPOOL="
+
+/* local function prototypes */
+static void fail_exit (int);
+static void get_defaults (void);
+static void show_defaults (void);
+static int set_defaults (void);
+static int get_groups (char *);
+static void usage (int status);
+static void new_pwent (struct passwd *);
+
+static long scale_age (long);
+static void new_spent (struct spwd *);
+static void grp_update (void);
+
+static void process_flags (int argc, char **argv);
+static void close_files (void);
+static void open_files (void);
+static void open_shadow (void);
+static void faillog_reset (uid_t);
+static void lastlog_reset (uid_t);
+static void tallylog_reset (const char *);
+static void usr_update (void);
+static void create_home (void);
+static void create_mail (void);
+
+/*
+ * fail_exit - undo as much as possible
+ */
+static void fail_exit (int code)
+{
+ if (home_added) {
+ if (rmdir (prefix_user_home) != 0) {
+ fprintf (stderr,
+ _("%s: %s was created, but could not be removed\n"),
+ Prog, prefix_user_home);
+ SYSLOG ((LOG_ERR, "failed to remove %s", prefix_user_home));
+ }
+ }
+
+ if (spw_locked) {
+ if (spw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "unlocking shadow file",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ /* continue */
+ }
+ }
+ if (pw_locked) {
+ if (pw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "unlocking passwd file",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ /* continue */
+ }
+ }
+ if (gr_locked) {
+ if (gr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "unlocking group file",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ /* continue */
+ }
+ }
+#ifdef SHADOWGRP
+ if (sgr_locked) {
+ if (sgr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "unlocking gshadow file",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ /* continue */
+ }
+ }
+#endif
+#ifdef ENABLE_SUBIDS
+ if (sub_uid_locked) {
+ if (sub_uid_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_uid_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sub_uid_dbname ()));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "unlocking subordinate user file",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ /* continue */
+ }
+ }
+ if (sub_gid_locked) {
+ if (sub_gid_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_gid_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sub_gid_dbname ()));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "unlocking subordinate group file",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ /* continue */
+ }
+ }
+#endif /* ENABLE_SUBIDS */
+
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "adding user",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ SYSLOG ((LOG_INFO, "failed adding user '%s', data deleted", user_name));
+ exit (code);
+}
+
+#define MATCH(x,y) (strncmp((x),(y),strlen(y)) == 0)
+
+/*
+ * get_defaults - read the defaults file
+ *
+ * get_defaults() reads the defaults file for this command. It sets the
+ * various values from the file, or uses built-in default values if the
+ * file does not exist.
+ */
+static void get_defaults (void)
+{
+ FILE *fp;
+ char *default_file = USER_DEFAULTS_FILE;
+ char buf[1024];
+ char *cp;
+
+ if(prefix[0]) {
+ size_t len;
+ int wlen;
+
+ len = strlen(prefix) + strlen(USER_DEFAULTS_FILE) + 2;
+ default_file = malloc(len);
+ if (default_file == NULL)
+ return;
+ wlen = snprintf(default_file, len, "%s/%s", prefix, USER_DEFAULTS_FILE);
+ assert (wlen == (int) len -1);
+ }
+
+ /*
+ * Open the defaults file for reading.
+ */
+
+ fp = fopen (default_file, "r");
+ if (NULL == fp) {
+ goto getdef_err;
+ }
+
+ /*
+ * Read the file a line at a time. Only the lines that have relevant
+ * values are used, everything else can be ignored.
+ */
+ while (fgets (buf, (int) sizeof buf, fp) == buf) {
+ cp = strrchr (buf, '\n');
+ if (NULL != cp) {
+ *cp = '\0';
+ }
+
+ cp = strchr (buf, '=');
+ if (NULL == cp) {
+ continue;
+ }
+
+ cp++;
+
+ /*
+ * Primary GROUP identifier
+ */
+ if (MATCH (buf, DGROUP)) {
+ const struct group *grp = prefix_getgr_nam_gid (cp);
+ if (NULL == grp) {
+ fprintf (stderr,
+ _("%s: group '%s' does not exist\n"),
+ Prog, cp);
+ fprintf (stderr,
+ _("%s: the %s configuration in %s will be ignored\n"),
+ Prog, DGROUP, default_file);
+ } else {
+ def_group = grp->gr_gid;
+ def_gname = xstrdup (grp->gr_name);
+ }
+ }
+
+ /*
+ * Default HOME filesystem
+ */
+ else if (MATCH (buf, DHOME)) {
+ def_home = xstrdup (cp);
+ }
+
+ /*
+ * Default Login Shell command
+ */
+ else if (MATCH (buf, DSHELL)) {
+ def_shell = xstrdup (cp);
+ }
+
+ /*
+ * Default Password Inactive value
+ */
+ else if (MATCH (buf, DINACT)) {
+ if ( (getlong (cp, &def_inactive) == 0)
+ || (def_inactive < -1)) {
+ fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"),
+ Prog, cp);
+ fprintf (stderr,
+ _("%s: the %s configuration in %s will be ignored\n"),
+ Prog, DINACT, default_file);
+ def_inactive = -1;
+ }
+ }
+
+ /*
+ * Default account expiration date
+ */
+ else if (MATCH (buf, DEXPIRE)) {
+ def_expire = xstrdup (cp);
+ }
+
+ /*
+ * Default Skeleton information
+ */
+ else if (MATCH (buf, DSKEL)) {
+ if ('\0' == *cp) {
+ cp = SKEL_DIR; /* XXX warning: const */
+ }
+
+ if(prefix[0]) {
+ size_t len;
+ int wlen;
+ char* _def_template; /* avoid const warning */
+
+ len = strlen(prefix) + strlen(cp) + 2;
+ _def_template = xmalloc(len);
+ wlen = snprintf(_def_template, len, "%s/%s", prefix, cp);
+ assert (wlen == (int) len -1);
+ def_template = _def_template;
+ }
+ else {
+ def_template = xstrdup (cp);
+ }
+ }
+
+ /*
+ * Create by default user mail spool or not ?
+ */
+ else if (MATCH (buf, DCREATE_MAIL_SPOOL)) {
+ if (*cp == '\0') {
+ cp = "no"; /* XXX warning: const */
+ }
+
+ def_create_mail_spool = xstrdup (cp);
+ }
+ }
+ (void) fclose (fp);
+ getdef_err:
+ if(prefix[0]) {
+ free(default_file);
+ }
+}
+
+/*
+ * show_defaults - show the contents of the defaults file
+ *
+ * show_defaults() displays the values that are used from the default
+ * file and the built-in values.
+ */
+static void show_defaults (void)
+{
+ printf ("GROUP=%u\n", (unsigned int) def_group);
+ printf ("HOME=%s\n", def_home);
+ printf ("INACTIVE=%ld\n", def_inactive);
+ printf ("EXPIRE=%s\n", def_expire);
+ printf ("SHELL=%s\n", def_shell);
+ printf ("SKEL=%s\n", def_template);
+ printf ("CREATE_MAIL_SPOOL=%s\n", def_create_mail_spool);
+}
+
+/*
+ * set_defaults - write new defaults file
+ *
+ * set_defaults() re-writes the defaults file using the values that
+ * are currently set. Duplicated lines are pruned, missing lines are
+ * added, and unrecognized lines are copied as is.
+ */
+static int set_defaults (void)
+{
+ FILE *ifp;
+ FILE *ofp;
+ char buf[1024];
+ char *new_file = NULL;
+ char *default_file = USER_DEFAULTS_FILE;
+ char *cp;
+ int ofd;
+ int wlen;
+ bool out_group = false;
+ bool out_home = false;
+ bool out_inactive = false;
+ bool out_expire = false;
+ bool out_shell = false;
+ bool out_skel = false;
+ bool out_create_mail_spool = false;
+ size_t len;
+ int ret = -1;
+
+
+ len = strlen(prefix) + strlen(NEW_USER_FILE) + 2;
+ new_file = malloc(len);
+ if (new_file == NULL) {
+ fprintf (stderr,
+ _("%s: cannot create new defaults file: %s\n"),
+ Prog, strerror(errno));
+ return -1;
+ }
+ wlen = snprintf(new_file, len, "%s%s%s", prefix, prefix[0]?"/":"", NEW_USER_FILE);
+ assert (wlen <= (int) len -1);
+
+ if(prefix[0]) {
+ len = strlen(prefix) + strlen(USER_DEFAULTS_FILE) + 2;
+ default_file = malloc(len);
+ if (default_file == NULL) {
+ fprintf (stderr,
+ _("%s: cannot create new defaults file: %s\n"),
+ Prog, strerror(errno));
+ goto setdef_err;
+ }
+ wlen = snprintf(default_file, len, "%s/%s", prefix, USER_DEFAULTS_FILE);
+ assert (wlen == (int) len -1);
+ }
+
+ /*
+ * Create a temporary file to copy the new output to.
+ */
+ ofd = mkstemp (new_file);
+ if (-1 == ofd) {
+ fprintf (stderr,
+ _("%s: cannot create new defaults file\n"),
+ Prog);
+ goto setdef_err;
+ }
+
+ ofp = fdopen (ofd, "w");
+ if (NULL == ofp) {
+ fprintf (stderr,
+ _("%s: cannot open new defaults file\n"),
+ Prog);
+ goto setdef_err;
+ }
+
+ /*
+ * Open the existing defaults file and copy the lines to the
+ * temporary file, using any new values. Each line is checked
+ * to insure that it is not output more than once.
+ */
+ ifp = fopen (default_file, "r");
+ if (NULL == ifp) {
+ fprintf (ofp, "# useradd defaults file\n");
+ goto skip;
+ }
+
+ while (fgets (buf, (int) sizeof buf, ifp) == buf) {
+ cp = strrchr (buf, '\n');
+ if (NULL != cp) {
+ *cp = '\0';
+ } else {
+ /* A line which does not end with \n is only valid
+ * at the end of the file.
+ */
+ if (feof (ifp) == 0) {
+ fprintf (stderr,
+ _("%s: line too long in %s: %s..."),
+ Prog, default_file, buf);
+ (void) fclose (ifp);
+ goto setdef_err;
+ }
+ }
+
+ if (!out_group && MATCH (buf, DGROUP)) {
+ fprintf (ofp, DGROUP "%u\n", (unsigned int) def_group);
+ out_group = true;
+ } else if (!out_home && MATCH (buf, DHOME)) {
+ fprintf (ofp, DHOME "%s\n", def_home);
+ out_home = true;
+ } else if (!out_inactive && MATCH (buf, DINACT)) {
+ fprintf (ofp, DINACT "%ld\n", def_inactive);
+ out_inactive = true;
+ } else if (!out_expire && MATCH (buf, DEXPIRE)) {
+ fprintf (ofp, DEXPIRE "%s\n", def_expire);
+ out_expire = true;
+ } else if (!out_shell && MATCH (buf, DSHELL)) {
+ fprintf (ofp, DSHELL "%s\n", def_shell);
+ out_shell = true;
+ } else if (!out_skel && MATCH (buf, DSKEL)) {
+ fprintf (ofp, DSKEL "%s\n", def_template);
+ out_skel = true;
+ } else if (!out_create_mail_spool
+ && MATCH (buf, DCREATE_MAIL_SPOOL)) {
+ fprintf (ofp,
+ DCREATE_MAIL_SPOOL "%s\n",
+ def_create_mail_spool);
+ out_create_mail_spool = true;
+ } else
+ fprintf (ofp, "%s\n", buf);
+ }
+ (void) fclose (ifp);
+
+ skip:
+ /*
+ * Check each line to insure that every line was output. This
+ * causes new values to be added to a file which did not previously
+ * have an entry for that value.
+ */
+ if (!out_group)
+ fprintf (ofp, DGROUP "%u\n", (unsigned int) def_group);
+ if (!out_home)
+ fprintf (ofp, DHOME "%s\n", def_home);
+ if (!out_inactive)
+ fprintf (ofp, DINACT "%ld\n", def_inactive);
+ if (!out_expire)
+ fprintf (ofp, DEXPIRE "%s\n", def_expire);
+ if (!out_shell)
+ fprintf (ofp, DSHELL "%s\n", def_shell);
+ if (!out_skel)
+ fprintf (ofp, DSKEL "%s\n", def_template);
+
+ if (!out_create_mail_spool)
+ fprintf (ofp, DCREATE_MAIL_SPOOL "%s\n", def_create_mail_spool);
+
+ /*
+ * Flush and close the file. Check for errors to make certain
+ * the new file is intact.
+ */
+ (void) fflush (ofp);
+ if ( (ferror (ofp) != 0)
+ || (fsync (fileno (ofp)) != 0)
+ || (fclose (ofp) != 0)) {
+ unlink (new_file);
+ goto setdef_err;
+ }
+
+ /*
+ * Rename the current default file to its backup name.
+ */
+ wlen = snprintf (buf, sizeof buf, "%s-", default_file);
+ assert (wlen < (int) sizeof buf);
+ unlink (buf);
+ if ((link (default_file, buf) != 0) && (ENOENT != errno)) {
+ int err = errno;
+ fprintf (stderr,
+ _("%s: Cannot create backup file (%s): %s\n"),
+ Prog, buf, strerror (err));
+ unlink (new_file);
+ goto setdef_err;
+ }
+
+ /*
+ * Rename the new default file to its correct name.
+ */
+ if (rename (new_file, default_file) != 0) {
+ int err = errno;
+ fprintf (stderr,
+ _("%s: rename: %s: %s\n"),
+ Prog, new_file, strerror (err));
+ goto setdef_err;
+ }
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USYS_CONFIG, Prog,
+ "changing useradd defaults",
+ NULL, AUDIT_NO_ID,
+ SHADOW_AUDIT_SUCCESS);
+#endif
+ SYSLOG ((LOG_INFO,
+ "useradd defaults: GROUP=%u, HOME=%s, SHELL=%s, INACTIVE=%ld, "
+ "EXPIRE=%s, SKEL=%s, CREATE_MAIL_SPOOL=%s",
+ (unsigned int) def_group, def_home, def_shell,
+ def_inactive, def_expire, def_template,
+ def_create_mail_spool));
+ ret = 0;
+ setdef_err:
+ free(new_file);
+ if(prefix[0]) {
+ free(default_file);
+ }
+
+ return ret;
+}
+
+/*
+ * get_groups - convert a list of group names to an array of group IDs
+ *
+ * get_groups() takes a comma-separated list of group names and
+ * converts it to a NULL-terminated array. Any unknown group
+ * names are reported as errors.
+ */
+static int get_groups (char *list)
+{
+ char *cp;
+ const struct group *grp;
+ int errors = 0;
+ int ngroups = 0;
+
+ if ('\0' == *list) {
+ return 0;
+ }
+
+ /*
+ * So long as there is some data to be converted, strip off
+ * each name and look it up. A mix of numerical and string
+ * values for group identifiers is permitted.
+ */
+ do {
+ /*
+ * Strip off a single name from the list
+ */
+ cp = strchr (list, ',');
+ if (NULL != cp) {
+ *cp++ = '\0';
+ }
+
+ /*
+ * Names starting with digits are treated as numerical
+ * GID values, otherwise the string is looked up as is.
+ */
+ grp = prefix_getgr_nam_gid (list);
+
+ /*
+ * There must be a match, either by GID value or by
+ * string name.
+ * FIXME: It should exist according to gr_locate,
+ * otherwise, we can't change its members
+ */
+ if (NULL == grp) {
+ fprintf (stderr,
+ _("%s: group '%s' does not exist\n"),
+ Prog, list);
+ errors++;
+ }
+ list = cp;
+
+ /*
+ * If the group doesn't exist, don't dump core...
+ * Instead, try the next one. --marekm
+ */
+ if (NULL == grp) {
+ continue;
+ }
+
+#ifdef USE_NIS
+ /*
+ * Don't add this group if they are an NIS group. Tell
+ * the user to go to the server for this group.
+ */
+ if (__isgrNIS ()) {
+ fprintf (stderr,
+ _("%s: group '%s' is a NIS group.\n"),
+ Prog, grp->gr_name);
+ continue;
+ }
+#endif
+
+ if (ngroups == sys_ngroups) {
+ fprintf (stderr,
+ _("%s: too many groups specified (max %d).\n"),
+ Prog, ngroups);
+ break;
+ }
+
+ /*
+ * Add the group name to the user's list of groups.
+ */
+ user_groups[ngroups++] = xstrdup (grp->gr_name);
+ } while (NULL != list);
+
+ user_groups[ngroups] = (char *) 0;
+
+ /*
+ * Any errors in finding group names are fatal
+ */
+ if (0 != errors) {
+ return -1;
+ }
+
+ return 0;
+}
+
+/*
+ * usage - display usage message and exit
+ */
+static void usage (int status)
+{
+ FILE *usageout = (E_SUCCESS != status) ? stderr : stdout;
+ (void) fprintf (usageout,
+ _("Usage: %s [options] LOGIN\n"
+ " %s -D\n"
+ " %s -D [options]\n"
+ "\n"
+ "Options:\n"),
+ Prog, Prog, Prog);
+ (void) fputs (_(" --badnames do not check for bad names\n"), usageout);
+ (void) fputs (_(" -b, --base-dir BASE_DIR base directory for the home directory of the\n"
+ " new account\n"), usageout);
+#ifdef WITH_BTRFS
+ (void) fputs (_(" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"), usageout);
+#endif
+ (void) fputs (_(" -c, --comment COMMENT GECOS field of the new account\n"), usageout);
+ (void) fputs (_(" -d, --home-dir HOME_DIR home directory of the new account\n"), usageout);
+ (void) fputs (_(" -D, --defaults print or change default useradd configuration\n"), usageout);
+ (void) fputs (_(" -e, --expiredate EXPIRE_DATE expiration date of the new account\n"), usageout);
+ (void) fputs (_(" -f, --inactive INACTIVE password inactivity period of the new account\n"), usageout);
+ (void) fputs (_(" -g, --gid GROUP name or ID of the primary group of the new\n"
+ " account\n"), usageout);
+ (void) fputs (_(" -G, --groups GROUPS list of supplementary groups of the new\n"
+ " account\n"), usageout);
+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
+ (void) fputs (_(" -k, --skel SKEL_DIR use this alternative skeleton directory\n"), usageout);
+ (void) fputs (_(" -K, --key KEY=VALUE override /etc/login.defs defaults\n"), usageout);
+ (void) fputs (_(" -l, --no-log-init do not add the user to the lastlog and\n"
+ " faillog databases\n"), usageout);
+ (void) fputs (_(" -m, --create-home create the user's home directory\n"), usageout);
+ (void) fputs (_(" -M, --no-create-home do not create the user's home directory\n"), usageout);
+ (void) fputs (_(" -N, --no-user-group do not create a group with the same name as\n"
+ " the user\n"), usageout);
+ (void) fputs (_(" -o, --non-unique allow to create users with duplicate\n"
+ " (non-unique) UID\n"), usageout);
+ (void) fputs (_(" -p, --password PASSWORD encrypted password of the new account\n"), usageout);
+ (void) fputs (_(" -r, --system create a system account\n"), usageout);
+ (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
+ (void) fputs (_(" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files\n"), usageout);
+ (void) fputs (_(" -s, --shell SHELL login shell of the new account\n"), usageout);
+ (void) fputs (_(" -u, --uid UID user ID of the new account\n"), usageout);
+ (void) fputs (_(" -U, --user-group create a group with the same name as the user\n"), usageout);
+#ifdef WITH_SELINUX
+ (void) fputs (_(" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user mapping\n"), usageout);
+#endif /* WITH_SELINUX */
+ (void) fputs ("\n", usageout);
+ exit (status);
+}
+
+/*
+ * new_pwent - initialize the values in a password file entry
+ *
+ * new_pwent() takes all of the values that have been entered and
+ * fills in a (struct passwd) with them.
+ */
+static void new_pwent (struct passwd *pwent)
+{
+ memzero (pwent, sizeof *pwent);
+ pwent->pw_name = (char *) user_name;
+ if (is_shadow_pwd) {
+ pwent->pw_passwd = (char *) SHADOW_PASSWD_STRING;
+ } else {
+ pwent->pw_passwd = (char *) user_pass;
+ }
+
+ pwent->pw_uid = user_id;
+ pwent->pw_gid = user_gid;
+ pwent->pw_gecos = (char *) user_comment;
+ pwent->pw_dir = (char *) user_home;
+ pwent->pw_shell = (char *) user_shell;
+}
+
+static long scale_age (long x)
+{
+ if (x <= 0) {
+ return x;
+ }
+
+ return x * (DAY / SCALE);
+}
+
+/*
+ * new_spent - initialize the values in a shadow password file entry
+ *
+ * new_spent() takes all of the values that have been entered and
+ * fills in a (struct spwd) with them.
+ */
+static void new_spent (struct spwd *spent)
+{
+ memzero (spent, sizeof *spent);
+ spent->sp_namp = (char *) user_name;
+ spent->sp_pwdp = (char *) user_pass;
+ spent->sp_lstchg = (long) gettime () / SCALE;
+ if (0 == spent->sp_lstchg) {
+ /* Better disable aging than requiring a password change */
+ spent->sp_lstchg = -1;
+ }
+ if (!rflg) {
+ spent->sp_min = scale_age (getdef_num ("PASS_MIN_DAYS", -1));
+ spent->sp_max = scale_age (getdef_num ("PASS_MAX_DAYS", -1));
+ spent->sp_warn = scale_age (getdef_num ("PASS_WARN_AGE", -1));
+ spent->sp_inact = scale_age (def_inactive);
+ spent->sp_expire = scale_age (user_expire);
+ } else {
+ spent->sp_min = -1;
+ spent->sp_max = -1;
+ spent->sp_warn = -1;
+ spent->sp_inact = -1;
+ spent->sp_expire = -1;
+ }
+ spent->sp_flag = SHADOW_SP_FLAG_UNSET;
+}
+
+/*
+ * grp_update - add user to secondary group set
+ *
+ * grp_update() takes the secondary group set given in user_groups
+ * and adds the user to each group given by that set.
+ *
+ * The group files are opened and locked in open_files().
+ *
+ * close_files() should be called afterwards to commit the changes
+ * and unlocking the group files.
+ */
+static void grp_update (void)
+{
+ const struct group *grp;
+ struct group *ngrp;
+
+#ifdef SHADOWGRP
+ const struct sgrp *sgrp;
+ struct sgrp *nsgrp;
+#endif
+
+ /*
+ * Scan through the entire group file looking for the groups that
+ * the user is a member of.
+ * FIXME: we currently do not check that all groups of user_groups
+ * were completed with the new user.
+ */
+ for (gr_rewind (), grp = gr_next (); NULL != grp; grp = gr_next ()) {
+
+ /*
+ * See if the user specified this group as one of their
+ * concurrent groups.
+ */
+ if (!is_on_list (user_groups, grp->gr_name)) {
+ continue;
+ }
+
+ /*
+ * Make a copy - gr_update() will free() everything
+ * from the old entry, and we need it later.
+ */
+ ngrp = __gr_dup (grp);
+ if (NULL == ngrp) {
+ fprintf (stderr,
+ _("%s: Out of memory. Cannot update %s.\n"),
+ Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to prepare the new %s entry '%s'", gr_dbname (), user_name));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "adding user to group",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ fail_exit (E_GRP_UPDATE); /* XXX */
+ }
+
+ /*
+ * Add the username to the list of group members and
+ * update the group entry to reflect the change.
+ */
+ ngrp->gr_mem = add_list (ngrp->gr_mem, user_name);
+ if (gr_update (ngrp) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, gr_dbname (), ngrp->gr_name);
+ SYSLOG ((LOG_ERR, "failed to prepare the new %s entry '%s'", gr_dbname (), user_name));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "adding user to group",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ fail_exit (E_GRP_UPDATE);
+ }
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "adding user to group",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_SUCCESS);
+#endif
+ SYSLOG ((LOG_INFO,
+ "add '%s' to group '%s'",
+ user_name, ngrp->gr_name));
+ }
+
+#ifdef SHADOWGRP
+ if (!is_shadow_grp)
+ return;
+
+ /*
+ * Scan through the entire shadow group file looking for the groups
+ * that the user is a member of. The administrative list isn't
+ * modified.
+ */
+ for (sgr_rewind (), sgrp = sgr_next (); NULL != sgrp; sgrp = sgr_next ()) {
+
+ /*
+ * See if the user specified this group as one of their
+ * concurrent groups.
+ * FIXME: is it really needed?
+ * This would be important only if the group is in
+ * user_groups. All these groups should be checked
+ * for existence with gr_locate already.
+ */
+ if (gr_locate (sgrp->sg_name) == NULL) {
+ continue;
+ }
+
+ if (!is_on_list (user_groups, sgrp->sg_name)) {
+ continue;
+ }
+
+ /*
+ * Make a copy - sgr_update() will free() everything
+ * from the old entry, and we need it later.
+ */
+ nsgrp = __sgr_dup (sgrp);
+ if (NULL == nsgrp) {
+ fprintf (stderr,
+ _("%s: Out of memory. Cannot update %s.\n"),
+ Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to prepare the new %s entry '%s'", sgr_dbname (), user_name));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "adding user to shadow group",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ fail_exit (E_GRP_UPDATE); /* XXX */
+ }
+
+ /*
+ * Add the username to the list of group members and
+ * update the group entry to reflect the change.
+ */
+ nsgrp->sg_mem = add_list (nsgrp->sg_mem, user_name);
+ if (sgr_update (nsgrp) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, sgr_dbname (), nsgrp->sg_name);
+ SYSLOG ((LOG_ERR, "failed to prepare the new %s entry '%s'", sgr_dbname (), user_name));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "adding user to shadow group",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ fail_exit (E_GRP_UPDATE);
+ }
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "adding user to shadow group",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_SUCCESS);
+#endif
+ SYSLOG ((LOG_INFO,
+ "add '%s' to shadow group '%s'",
+ user_name, nsgrp->sg_name));
+ }
+#endif /* SHADOWGRP */
+}
+
+/*
+ * process_flags - perform command line argument setting
+ *
+ * process_flags() interprets the command line arguments and sets
+ * the values that the user will be created with accordingly. The
+ * values are checked for sanity.
+ */
+static void process_flags (int argc, char **argv)
+{
+ const struct group *grp;
+ bool anyflag = false;
+ char *cp;
+ struct stat st;
+
+ {
+ /*
+ * Parse the command line options.
+ */
+ int c;
+ static struct option long_options[] = {
+ {"base-dir", required_argument, NULL, 'b'},
+#ifdef WITH_BTRFS
+ {"btrfs-subvolume-home", no_argument, NULL, 200},
+#endif
+ {"badnames", no_argument, NULL, 201},
+ {"comment", required_argument, NULL, 'c'},
+ {"home-dir", required_argument, NULL, 'd'},
+ {"defaults", no_argument, NULL, 'D'},
+ {"expiredate", required_argument, NULL, 'e'},
+ {"inactive", required_argument, NULL, 'f'},
+ {"gid", required_argument, NULL, 'g'},
+ {"groups", required_argument, NULL, 'G'},
+ {"help", no_argument, NULL, 'h'},
+ {"skel", required_argument, NULL, 'k'},
+ {"key", required_argument, NULL, 'K'},
+ {"no-log-init", no_argument, NULL, 'l'},
+ {"create-home", no_argument, NULL, 'm'},
+ {"no-create-home", no_argument, NULL, 'M'},
+ {"no-user-group", no_argument, NULL, 'N'},
+ {"non-unique", no_argument, NULL, 'o'},
+ {"password", required_argument, NULL, 'p'},
+ {"system", no_argument, NULL, 'r'},
+ {"root", required_argument, NULL, 'R'},
+ {"prefix", required_argument, NULL, 'P'},
+ {"shell", required_argument, NULL, 's'},
+ {"uid", required_argument, NULL, 'u'},
+ {"user-group", no_argument, NULL, 'U'},
+#ifdef WITH_SELINUX
+ {"selinux-user", required_argument, NULL, 'Z'},
+#endif /* WITH_SELINUX */
+ {NULL, 0, NULL, '\0'}
+ };
+ while ((c = getopt_long (argc, argv,
+#ifdef WITH_SELINUX
+ "b:c:d:De:f:g:G:hk:K:lmMNop:rR:P:s:u:UZ:",
+#else /* !WITH_SELINUX */
+ "b:c:d:De:f:g:G:hk:K:lmMNop:rR:P:s:u:U",
+#endif /* !WITH_SELINUX */
+ long_options, NULL)) != -1) {
+ switch (c) {
+ case 'b':
+ if ( ( !VALID (optarg) )
+ || ( optarg[0] != '/' )) {
+ fprintf (stderr,
+ _("%s: invalid base directory '%s'\n"),
+ Prog, optarg);
+ exit (E_BAD_ARG);
+ }
+ def_home = optarg;
+ bflg = true;
+ break;
+ case 200:
+ subvolflg = true;
+ break;
+ case 201:
+ allow_bad_names = true;
+ break;
+ case 'c':
+ if (!VALID (optarg)) {
+ fprintf (stderr,
+ _("%s: invalid comment '%s'\n"),
+ Prog, optarg);
+ exit (E_BAD_ARG);
+ }
+ user_comment = optarg;
+ cflg = true;
+ break;
+ case 'd':
+ if ( ( !VALID (optarg) )
+ || ( optarg[0] != '/' )) {
+ fprintf (stderr,
+ _("%s: invalid home directory '%s'\n"),
+ Prog, optarg);
+ exit (E_BAD_ARG);
+ }
+ user_home = optarg;
+ dflg = true;
+ break;
+ case 'D':
+ if (anyflag) {
+ usage (E_USAGE);
+ }
+ Dflg = true;
+ break;
+ case 'e':
+ if ('\0' != *optarg) {
+ user_expire = strtoday (optarg);
+ if (user_expire < -1) {
+ fprintf (stderr,
+ _("%s: invalid date '%s'\n"),
+ Prog, optarg);
+ exit (E_BAD_ARG);
+ }
+ } else {
+ user_expire = -1;
+ }
+
+ /*
+ * -e "" is allowed without /etc/shadow
+ * (it's a no-op in such case)
+ */
+ if ((-1 != user_expire) && !is_shadow_pwd) {
+ fprintf (stderr,
+ _("%s: shadow passwords required for -e\n"),
+ Prog);
+ exit (E_USAGE);
+ }
+ if (Dflg) {
+ def_expire = optarg;
+ }
+ eflg = true;
+ break;
+ case 'f':
+ if ( (getlong (optarg, &def_inactive) == 0)
+ || (def_inactive < -1)) {
+ fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"),
+ Prog, optarg);
+ exit (E_BAD_ARG);
+ }
+ /*
+ * -f -1 is allowed
+ * it's a no-op without /etc/shadow
+ */
+ if ((-1 != def_inactive) && !is_shadow_pwd) {
+ fprintf (stderr,
+ _("%s: shadow passwords required for -f\n"),
+ Prog);
+ exit (E_USAGE);
+ }
+ fflg = true;
+ break;
+ case 'g':
+ grp = prefix_getgr_nam_gid (optarg);
+ if (NULL == grp) {
+ fprintf (stderr,
+ _("%s: group '%s' does not exist\n"),
+ Prog, optarg);
+ exit (E_NOTFOUND);
+ }
+ if (Dflg) {
+ def_group = grp->gr_gid;
+ def_gname = optarg;
+ } else {
+ user_gid = grp->gr_gid;
+ }
+ gflg = true;
+ break;
+ case 'G':
+ if (get_groups (optarg) != 0) {
+ exit (E_NOTFOUND);
+ }
+ if (NULL != user_groups[0]) {
+ do_grp_update = true;
+ }
+ Gflg = true;
+ break;
+ case 'h':
+ usage (E_SUCCESS);
+ break;
+ case 'k':
+ def_template = optarg;
+ kflg = true;
+ break;
+ case 'K':
+ /*
+ * override login.defs defaults (-K name=value)
+ * example: -K UID_MIN=100 -K UID_MAX=499
+ * note: -K UID_MIN=10,UID_MAX=499 doesn't work yet
+ */
+ cp = strchr (optarg, '=');
+ if (NULL == cp) {
+ fprintf (stderr,
+ _("%s: -K requires KEY=VALUE\n"),
+ Prog);
+ exit (E_BAD_ARG);
+ }
+ /* terminate name, point to value */
+ *cp = '\0';
+ cp++;
+ if (putdef_str (optarg, cp) < 0) {
+ exit (E_BAD_ARG);
+ }
+ break;
+ case 'l':
+ lflg = true;
+ break;
+ case 'm':
+ mflg = true;
+ break;
+ case 'M':
+ Mflg = true;
+ break;
+ case 'N':
+ Nflg = true;
+ break;
+ case 'o':
+ oflg = true;
+ break;
+ case 'p': /* set encrypted password */
+ if (!VALID (optarg)) {
+ fprintf (stderr,
+ _("%s: invalid field '%s'\n"),
+ Prog, optarg);
+ exit (E_BAD_ARG);
+ }
+ user_pass = optarg;
+ break;
+ case 'r':
+ rflg = true;
+ break;
+ case 'R': /* no-op, handled in process_root_flag () */
+ break;
+ case 'P': /* no-op, handled in process_prefix_flag () */
+ break;
+ case 's':
+ if ( ( !VALID (optarg) )
+ || ( ('\0' != optarg[0])
+ && ('/' != optarg[0])
+ && ('*' != optarg[0]) )) {
+ fprintf (stderr,
+ _("%s: invalid shell '%s'\n"),
+ Prog, optarg);
+ exit (E_BAD_ARG);
+ }
+ if ( '\0' != optarg[0]
+ && '*' != optarg[0]
+ && strcmp(optarg, "/sbin/nologin") != 0
+ && ( stat(optarg, &st) != 0
+ || S_ISDIR(st.st_mode)
+ || access(optarg, X_OK) != 0)) {
+ fprintf (stderr,
+ _("%s: Warning: missing or non-executable shell '%s'\n"),
+ Prog, optarg);
+ }
+ user_shell = optarg;
+ def_shell = optarg;
+ sflg = true;
+ break;
+ case 'u':
+ if ( (get_uid (optarg, &user_id) == 0)
+ || (user_id == (gid_t)-1)) {
+ fprintf (stderr,
+ _("%s: invalid user ID '%s'\n"),
+ Prog, optarg);
+ exit (E_BAD_ARG);
+ }
+ uflg = true;
+ break;
+ case 'U':
+ Uflg = true;
+ break;
+#ifdef WITH_SELINUX
+ case 'Z':
+ if (prefix[0]) {
+ fprintf (stderr,
+ _("%s: -Z cannot be used with --prefix\n"),
+ Prog);
+ exit (E_BAD_ARG);
+ }
+ if (is_selinux_enabled () > 0) {
+ user_selinux = optarg;
+ } else {
+ fprintf (stderr,
+ _("%s: -Z requires SELinux enabled kernel\n"),
+ Prog);
+
+ exit (E_BAD_ARG);
+ }
+ break;
+#endif /* WITH_SELINUX */
+ default:
+ usage (E_USAGE);
+ }
+ anyflag = true;
+ }
+ }
+
+ if (!gflg && !Nflg && !Uflg) {
+ /* Get the settings from login.defs */
+ Uflg = getdef_bool ("USERGROUPS_ENAB");
+ }
+
+ /*
+ * Certain options are only valid in combination with others.
+ * Check it here so that they can be specified in any order.
+ */
+ if (oflg && !uflg) {
+ fprintf (stderr,
+ _("%s: %s flag is only allowed with the %s flag\n"),
+ Prog, "-o", "-u");
+ usage (E_USAGE);
+ }
+ if (kflg && !mflg) {
+ fprintf (stderr,
+ _("%s: %s flag is only allowed with the %s flag\n"),
+ Prog, "-k", "-m");
+ usage (E_USAGE);
+ }
+ if (Uflg && gflg) {
+ fprintf (stderr,
+ _("%s: options %s and %s conflict\n"),
+ Prog, "-U", "-g");
+ usage (E_USAGE);
+ }
+ if (Uflg && Nflg) {
+ fprintf (stderr,
+ _("%s: options %s and %s conflict\n"),
+ Prog, "-U", "-N");
+ usage (E_USAGE);
+ }
+ if (mflg && Mflg) {
+ fprintf (stderr,
+ _("%s: options %s and %s conflict\n"),
+ Prog, "-m", "-M");
+ usage (E_USAGE);
+ }
+
+ /*
+ * Either -D or username is required. Defaults can be set with -D
+ * for the -b, -e, -f, -g, -s options only.
+ */
+ if (Dflg) {
+ if (optind != argc) {
+ usage (E_USAGE);
+ }
+
+ if (uflg || Gflg || dflg || cflg || mflg) {
+ usage (E_USAGE);
+ }
+ } else {
+ if (optind != argc - 1) {
+ usage (E_USAGE);
+ }
+
+ user_name = argv[optind];
+ if (!is_valid_user_name (user_name)) {
+ fprintf (stderr,
+ _("%s: invalid user name '%s'\n"),
+ Prog, user_name);
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "adding user",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ exit (E_BAD_ARG);
+ }
+ if (!dflg) {
+ char *uh;
+ size_t len = strlen (def_home) + strlen (user_name) + 2;
+ int wlen;
+
+ uh = xmalloc (len);
+ wlen = snprintf (uh, len, "%s/%s", def_home, user_name);
+ assert (wlen == (int) len -1);
+
+ user_home = uh;
+ }
+ if(prefix[0]) {
+ size_t len = strlen(prefix) + strlen(user_home) + 2;
+ int wlen;
+ char* _prefix_user_home; /* to avoid const warning */
+ _prefix_user_home = xmalloc(len);
+ wlen = snprintf(_prefix_user_home, len, "%s/%s", prefix, user_home);
+ assert (wlen == (int) len -1);
+ prefix_user_home = _prefix_user_home;
+ }
+ else {
+ prefix_user_home = user_home;
+ }
+ }
+
+ if (!eflg) {
+ user_expire = strtoday (def_expire);
+ }
+
+ if (!gflg) {
+ user_gid = def_group;
+ }
+
+ if (!sflg) {
+ user_shell = def_shell;
+ }
+
+ create_mail_spool = def_create_mail_spool;
+
+ if (!rflg) {
+ /* for system accounts defaults are ignored and we
+ * do not create a home dir */
+ if (getdef_bool ("CREATE_HOME")) {
+ mflg = true;
+ }
+ }
+
+ if (Mflg) {
+ /* absolutely sure that we do not create home dirs */
+ mflg = false;
+ }
+}
+
+/*
+ * close_files - close all of the files that were opened
+ *
+ * close_files() closes all of the files that were opened for this
+ * new user. This causes any modified entries to be written out.
+ */
+static void close_files (void)
+{
+ if (pw_close () == 0) {
+ fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", pw_dbname ()));
+ fail_exit (E_PW_UPDATE);
+ }
+ if (is_shadow_pwd && (spw_close () == 0)) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"), Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", spw_dbname ()));
+ fail_exit (E_PW_UPDATE);
+ }
+ if (do_grp_update) {
+ if (gr_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"), Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", gr_dbname ()));
+ fail_exit (E_GRP_UPDATE);
+ }
+#ifdef SHADOWGRP
+ if (is_shadow_grp && (sgr_close () == 0)) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", sgr_dbname ()));
+ fail_exit (E_GRP_UPDATE);
+ }
+#endif
+ }
+#ifdef ENABLE_SUBIDS
+ if (is_sub_uid && (sub_uid_close () == 0)) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"), Prog, sub_uid_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", sub_uid_dbname ()));
+ fail_exit (E_SUB_UID_UPDATE);
+ }
+ if (is_sub_gid && (sub_gid_close () == 0)) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"), Prog, sub_gid_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", sub_gid_dbname ()));
+ fail_exit (E_SUB_GID_UPDATE);
+ }
+#endif /* ENABLE_SUBIDS */
+ if (is_shadow_pwd) {
+ if (spw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "unlocking shadow file",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ /* continue */
+ }
+ spw_locked = false;
+ }
+ if (pw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "unlocking passwd file",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ /* continue */
+ }
+ pw_locked = false;
+ if (gr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "unlocking group file",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ /* continue */
+ }
+ gr_locked = false;
+#ifdef SHADOWGRP
+ if (is_shadow_grp) {
+ if (sgr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "unlocking gshadow file",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ /* continue */
+ }
+ sgr_locked = false;
+ }
+#endif
+#ifdef ENABLE_SUBIDS
+ if (is_sub_uid) {
+ if (sub_uid_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_uid_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sub_uid_dbname ()));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "unlocking subordinate user file",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ /* continue */
+ }
+ sub_uid_locked = false;
+ }
+ if (is_sub_gid) {
+ if (sub_gid_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_gid_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sub_gid_dbname ()));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "unlocking subordinate group file",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ /* continue */
+ }
+ sub_gid_locked = false;
+ }
+#endif /* ENABLE_SUBIDS */
+}
+
+/*
+ * open_files - lock and open the password files
+ *
+ * open_files() opens the two password files.
+ */
+static void open_files (void)
+{
+ if (pw_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, pw_dbname ());
+ exit (E_PW_UPDATE);
+ }
+ pw_locked = true;
+ if (pw_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr, _("%s: cannot open %s\n"), Prog, pw_dbname ());
+ fail_exit (E_PW_UPDATE);
+ }
+
+ /* shadow file will be opened by open_shadow(); */
+
+ /*
+ * Lock and open the group file.
+ */
+ if (gr_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, gr_dbname ());
+ fail_exit (E_GRP_UPDATE);
+ }
+ gr_locked = true;
+ if (gr_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr, _("%s: cannot open %s\n"), Prog, gr_dbname ());
+ fail_exit (E_GRP_UPDATE);
+ }
+#ifdef SHADOWGRP
+ if (is_shadow_grp) {
+ if (sgr_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, sgr_dbname ());
+ fail_exit (E_GRP_UPDATE);
+ }
+ sgr_locked = true;
+ if (sgr_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, sgr_dbname ());
+ fail_exit (E_GRP_UPDATE);
+ }
+ }
+#endif
+#ifdef ENABLE_SUBIDS
+ if (is_sub_uid) {
+ if (sub_uid_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, sub_uid_dbname ());
+ fail_exit (E_SUB_UID_UPDATE);
+ }
+ sub_uid_locked = true;
+ if (sub_uid_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, sub_uid_dbname ());
+ fail_exit (E_SUB_UID_UPDATE);
+ }
+ }
+ if (is_sub_gid) {
+ if (sub_gid_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, sub_gid_dbname ());
+ fail_exit (E_SUB_GID_UPDATE);
+ }
+ sub_gid_locked = true;
+ if (sub_gid_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, sub_gid_dbname ());
+ fail_exit (E_SUB_GID_UPDATE);
+ }
+ }
+#endif /* ENABLE_SUBIDS */
+}
+
+static void open_shadow (void)
+{
+ if (!is_shadow_pwd) {
+ return;
+ }
+ if (spw_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, spw_dbname ());
+ fail_exit (E_PW_UPDATE);
+ }
+ spw_locked = true;
+ if (spw_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, spw_dbname ());
+ fail_exit (E_PW_UPDATE);
+ }
+}
+
+static char *empty_list = NULL;
+
+/*
+ * new_grent - initialize the values in a group file entry
+ *
+ * new_grent() takes all of the values that have been entered and fills
+ * in a (struct group) with them.
+ */
+
+static void new_grent (struct group *grent)
+{
+ memzero (grent, sizeof *grent);
+ grent->gr_name = (char *) user_name;
+#ifdef SHADOWGRP
+ if (is_shadow_grp) {
+ grent->gr_passwd = SHADOW_PASSWD_STRING; /* XXX warning: const */
+ } else
+#endif /* SHADOWGRP */
+ {
+ grent->gr_passwd = "!"; /* XXX warning: const */
+ }
+ grent->gr_gid = user_gid;
+ grent->gr_mem = &empty_list;
+}
+
+#ifdef SHADOWGRP
+/*
+ * new_sgent - initialize the values in a shadow group file entry
+ *
+ * new_sgent() takes all of the values that have been entered and fills
+ * in a (struct sgrp) with them.
+ */
+
+static void new_sgent (struct sgrp *sgent)
+{
+ memzero (sgent, sizeof *sgent);
+ sgent->sg_name = (char *) user_name;
+ sgent->sg_passwd = "!"; /* XXX warning: const */
+ sgent->sg_adm = &empty_list;
+ sgent->sg_mem = &empty_list;
+}
+#endif /* SHADOWGRP */
+
+
+/*
+ * grp_add - add new group file entries
+ *
+ * grp_add() writes the new records to the group files.
+ */
+
+static void grp_add (void)
+{
+ struct group grp;
+
+#ifdef SHADOWGRP
+ struct sgrp sgrp;
+#endif /* SHADOWGRP */
+
+ /*
+ * Create the initial entries for this new group.
+ */
+ new_grent (&grp);
+#ifdef SHADOWGRP
+ new_sgent (&sgrp);
+#endif /* SHADOWGRP */
+
+ /*
+ * Write out the new group file entry.
+ */
+ if (gr_update (&grp) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, gr_dbname (), grp.gr_name);
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_GROUP, Prog,
+ "adding group",
+ grp.gr_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ fail_exit (E_GRP_UPDATE);
+ }
+#ifdef SHADOWGRP
+ /*
+ * Write out the new shadow group entries as well.
+ */
+ if (is_shadow_grp && (sgr_update (&sgrp) == 0)) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, sgr_dbname (), sgrp.sg_name);
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_GROUP, Prog,
+ "adding group",
+ grp.gr_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ fail_exit (E_GRP_UPDATE);
+ }
+#endif /* SHADOWGRP */
+ SYSLOG ((LOG_INFO, "new group: name=%s, GID=%u", user_name, user_gid));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_GROUP, Prog,
+ "adding group",
+ grp.gr_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_SUCCESS);
+#endif
+ do_grp_update = true;
+}
+
+static void faillog_reset (uid_t uid)
+{
+ struct faillog fl;
+ int fd;
+ off_t offset_uid = (off_t) (sizeof fl) * uid;
+
+ if (access (FAILLOG_FILE, F_OK) != 0) {
+ return;
+ }
+
+ memzero (&fl, sizeof (fl));
+
+ fd = open (FAILLOG_FILE, O_RDWR);
+ if ( (-1 == fd)
+ || (lseek (fd, offset_uid, SEEK_SET) != offset_uid)
+ || (write (fd, &fl, sizeof (fl)) != (ssize_t) sizeof (fl))
+ || (fsync (fd) != 0)
+ || (close (fd) != 0)) {
+ fprintf (stderr,
+ _("%s: failed to reset the faillog entry of UID %lu: %s\n"),
+ Prog, (unsigned long) uid, strerror (errno));
+ SYSLOG ((LOG_WARN, "failed to reset the faillog entry of UID %lu", (unsigned long) uid));
+ /* continue */
+ }
+}
+
+static void lastlog_reset (uid_t uid)
+{
+ struct lastlog ll;
+ int fd;
+ off_t offset_uid = (off_t) (sizeof ll) * uid;
+ uid_t max_uid;
+
+ if (access (LASTLOG_FILE, F_OK) != 0) {
+ return;
+ }
+
+ max_uid = (uid_t) getdef_ulong ("LASTLOG_UID_MAX", 0xFFFFFFFFUL);
+ if (uid > max_uid) {
+ /* do not touch lastlog for large uids */
+ return;
+ }
+
+ memzero (&ll, sizeof (ll));
+
+ fd = open (LASTLOG_FILE, O_RDWR);
+ if ( (-1 == fd)
+ || (lseek (fd, offset_uid, SEEK_SET) != offset_uid)
+ || (write (fd, &ll, sizeof (ll)) != (ssize_t) sizeof (ll))
+ || (fsync (fd) != 0)
+ || (close (fd) != 0)) {
+ fprintf (stderr,
+ _("%s: failed to reset the lastlog entry of UID %lu: %s\n"),
+ Prog, (unsigned long) uid, strerror (errno));
+ SYSLOG ((LOG_WARN, "failed to reset the lastlog entry of UID %lu", (unsigned long) uid));
+ /* continue */
+ }
+}
+
+static void tallylog_reset (const char *user_name)
+{
+ const char pam_tally2[] = "/sbin/pam_tally2";
+ const char *pname;
+ pid_t childpid;
+ int failed;
+ int status;
+
+ if (access(pam_tally2, X_OK) == -1)
+ return;
+
+ failed = 0;
+ switch (childpid = fork())
+ {
+ case -1: /* error */
+ failed = 1;
+ break;
+ case 0: /* child */
+ pname = strrchr(pam_tally2, '/');
+ if (pname == NULL)
+ pname = pam_tally2;
+ else
+ pname++; /* Skip the '/' */
+ execl(pam_tally2, pname, "--user", user_name, "--reset", "--quiet", NULL);
+ /* If we come here, something has gone terribly wrong */
+ perror(pam_tally2);
+ exit(42); /* don't continue, we now have 2 processes running! */
+ /* NOTREACHED */
+ break;
+ default: /* parent */
+ if (waitpid(childpid, &status, 0) == -1 || !WIFEXITED(status) || WEXITSTATUS(status) != 0)
+ failed = 1;
+ break;
+ }
+
+ if (failed)
+ {
+ fprintf (stderr,
+ _("%s: failed to reset the tallylog entry of user \"%s\"\n"),
+ Prog, user_name);
+ SYSLOG ((LOG_WARN, "failed to reset the tallylog entry of user \"%s\"", user_name));
+ }
+
+ return;
+}
+
+/*
+ * usr_update - create the user entries
+ *
+ * usr_update() creates the password file entries for this user
+ * and will update the group entries if required.
+ */
+static void usr_update (void)
+{
+ struct passwd pwent;
+ struct spwd spent;
+ char *tty;
+
+ /*
+ * Fill in the password structure with any new fields, making
+ * copies of strings.
+ */
+ new_pwent (&pwent);
+ new_spent (&spent);
+
+ /*
+ * Create a syslog entry. We need to do this now in case anything
+ * happens so we know what we were trying to accomplish.
+ */
+ tty=ttyname (STDIN_FILENO);
+ SYSLOG ((LOG_INFO,
+ "new user: name=%s, UID=%u, GID=%u, home=%s, shell=%s, from=%s",
+ user_name, (unsigned int) user_id,
+ (unsigned int) user_gid, user_home, user_shell,
+ tty ? tty : "none" ));
+
+ /*
+ * Initialize faillog and lastlog entries for this UID in case
+ * it belongs to a previously deleted user. We do it only if
+ * no user with this UID exists yet (entries for shared UIDs
+ * are left unchanged). --marekm
+ */
+ /* local, no need for xgetpwuid */
+ if ((!lflg) && (prefix_getpwuid (user_id) == NULL)) {
+ faillog_reset (user_id);
+ lastlog_reset (user_id);
+ }
+
+ /*
+ * Put the new (struct passwd) in the table.
+ */
+ if (pw_update (&pwent) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, pw_dbname (), pwent.pw_name);
+ fail_exit (E_PW_UPDATE);
+ }
+
+ /*
+ * Put the new (struct spwd) in the table.
+ */
+ if (is_shadow_pwd && (spw_update (&spent) == 0)) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, spw_dbname (), spent.sp_namp);
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "adding shadow password",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ fail_exit (E_PW_UPDATE);
+ }
+#ifdef ENABLE_SUBIDS
+ if (is_sub_uid &&
+ (sub_uid_add(user_name, sub_uid_start, sub_uid_count) == 0)) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry\n"),
+ Prog, sub_uid_dbname ());
+ fail_exit (E_SUB_UID_UPDATE);
+ }
+ if (is_sub_gid &&
+ (sub_gid_add(user_name, sub_gid_start, sub_gid_count) == 0)) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry\n"),
+ Prog, sub_uid_dbname ());
+ fail_exit (E_SUB_GID_UPDATE);
+ }
+#endif /* ENABLE_SUBIDS */
+
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "adding user",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_SUCCESS);
+#endif
+ /*
+ * Do any group file updates for this user.
+ */
+ if (do_grp_update) {
+ grp_update ();
+ }
+}
+
+/*
+ * create_home - create the user's home directory
+ *
+ * create_home() creates the user's home directory if it does not
+ * already exist. It will be created mode 755 owned by the user
+ * with the user's default group.
+ */
+static void create_home (void)
+{
+ if (access (prefix_user_home, F_OK) != 0) {
+ char path[strlen (prefix_user_home) + 2];
+ char *bhome, *cp;
+
+ path[0] = '\0';
+ bhome = strdup (prefix_user_home);
+ if (!bhome) {
+ fprintf (stderr,
+ _("%s: error while duplicating string %s\n"),
+ Prog, user_home);
+ fail_exit (E_HOMEDIR);
+ }
+ ++bhome;
+
+#ifdef WITH_SELINUX
+ if (set_selinux_file_context (prefix_user_home) != 0) {
+ fprintf (stderr,
+ _("%s: cannot set SELinux context for home directory %s\n"),
+ Prog, user_home);
+ fail_exit (E_HOMEDIR);
+ }
+#endif
+
+ /* Check for every part of the path, if the directory
+ exists. If not, create it with permissions 755 and
+ owner root:root.
+ */
+ cp = strtok (bhome, "/");
+ while (cp) {
+ strcat (path, "/");
+ strcat (path, cp);
+ if (access (path, F_OK) != 0) {
+ /* Check if parent directory is BTRFS, fail if requesting
+ subvolume but no BTRFS. The paths cound be different by the
+ trailing slash
+ */
+#if WITH_BTRFS
+ if (subvolflg && (strlen(prefix_user_home) - (int)strlen(path)) <= 1) {
+ char *btrfs_check = strdup(path);
+
+ if (!btrfs_check) {
+ fprintf (stderr,
+ _("%s: error while duplicating string in BTRFS check %s\n"),
+ Prog, path);
+ fail_exit (E_HOMEDIR);
+ }
+ btrfs_check[strlen(path) - strlen(cp) - 1] = '\0';
+ if (is_btrfs(btrfs_check) <= 0) {
+ fprintf (stderr,
+ _("%s: home directory \"%s\" must be mounted on BTRFS\n"),
+ Prog, path);
+ fail_exit (E_HOMEDIR);
+ }
+ // make subvolume to mount for user instead of directory
+ if (btrfs_create_subvolume(path)) {
+ fprintf (stderr,
+ _("%s: failed to create BTRFS subvolume: %s\n"),
+ Prog, path);
+ fail_exit (E_HOMEDIR);
+ }
+ }
+ else
+#endif
+ if (mkdir (path, 0) != 0) {
+ fprintf (stderr,
+ _("%s: cannot create directory %s\n"),
+ Prog, path);
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "adding home directory",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ fail_exit (E_HOMEDIR);
+ }
+ if (chown (path, 0, 0) < 0) {
+ fprintf (stderr,
+ _("%s: warning: chown on `%s' failed: %m\n"),
+ Prog, path);
+ }
+ if (chmod (path, 0755) < 0) {
+ fprintf (stderr,
+ _("%s: warning: chmod on `%s' failed: %m\n"),
+ Prog, path);
+ }
+ }
+ cp = strtok (NULL, "/");
+ }
+
+ (void) chown (prefix_user_home, user_id, user_gid);
+ mode_t mode = getdef_num ("HOME_MODE",
+ 0777 & ~getdef_num ("UMASK", GETDEF_DEFAULT_UMASK));
+ chmod (prefix_user_home, mode);
+ home_added = true;
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "adding home directory",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_SUCCESS);
+#endif
+#ifdef WITH_SELINUX
+ /* Reset SELinux to create files with default contexts */
+ if (reset_selinux_file_context () != 0) {
+ fprintf (stderr,
+ _("%s: cannot reset SELinux file creation context\n"),
+ Prog);
+ fail_exit (E_HOMEDIR);
+ }
+#endif
+ }
+}
+
+/*
+ * create_mail - create the user's mail spool
+ *
+ * create_mail() creates the user's mail spool if it does not already
+ * exist. It will be created mode 660 owned by the user and group
+ * 'mail'
+ */
+static void create_mail (void)
+{
+ if (strcasecmp (create_mail_spool, "yes") == 0) {
+ const char *spool;
+ char *file;
+ int fd;
+ struct group *gr;
+ gid_t gid;
+ mode_t mode;
+
+ spool = getdef_str ("MAIL_DIR");
+ if (NULL == spool) {
+ spool = "/var/mail";
+ }
+ file = alloca (strlen (prefix) + strlen (spool) + strlen (user_name) + 2);
+ if(prefix[0])
+ sprintf (file, "%s/%s/%s", prefix, spool, user_name);
+ else
+ sprintf (file, "%s/%s", spool, user_name);
+ fd = open (file, O_CREAT | O_WRONLY | O_TRUNC | O_EXCL, 0);
+ if (fd < 0) {
+ perror (_("Creating mailbox file"));
+ return;
+ }
+
+ gr = prefix_getgrnam ("mail"); /* local, no need for xgetgrnam */
+ if (NULL == gr) {
+ fputs (_("Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"),
+ stderr);
+ gid = user_gid;
+ mode = 0600;
+ } else {
+ gid = gr->gr_gid;
+ mode = 0660;
+ }
+
+ if ( (fchown (fd, user_id, gid) != 0)
+ || (fchmod (fd, mode) != 0)) {
+ perror (_("Setting mailbox file permissions"));
+ }
+
+ fsync (fd);
+ close (fd);
+ }
+}
+
+/*
+ * main - useradd command
+ */
+int main (int argc, char **argv)
+{
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+ pam_handle_t *pamh = NULL;
+ int retval;
+#endif /* USE_PAM */
+#endif /* ACCT_TOOLS_SETUID */
+
+#ifdef ENABLE_SUBIDS
+ uid_t uid_min;
+ uid_t uid_max;
+#endif
+
+ /*
+ * Get my name so that I can use it to report errors.
+ */
+ Prog = Basename (argv[0]);
+
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ process_root_flag ("-R", argc, argv);
+
+ prefix = process_prefix_flag("-P", argc, argv);
+
+ OPENLOG ("useradd");
+#ifdef WITH_AUDIT
+ audit_help_open ();
+#endif
+
+ sys_ngroups = sysconf (_SC_NGROUPS_MAX);
+ user_groups = (char **) xmalloc ((1 + sys_ngroups) * sizeof (char *));
+ /*
+ * Initialize the list to be empty
+ */
+ user_groups[0] = (char *) 0;
+
+
+ is_shadow_pwd = spw_file_present ();
+#ifdef SHADOWGRP
+ is_shadow_grp = sgr_file_present ();
+#endif
+
+ get_defaults ();
+
+ process_flags (argc, argv);
+
+#ifdef ENABLE_SUBIDS
+ uid_min = (uid_t) getdef_ulong ("UID_MIN", 1000UL);
+ uid_max = (uid_t) getdef_ulong ("UID_MAX", 60000UL);
+ is_sub_uid = sub_uid_file_present () && !rflg &&
+ (!user_id || (user_id <= uid_max && user_id >= uid_min));
+ is_sub_gid = sub_gid_file_present () && !rflg &&
+ (!user_id || (user_id <= uid_max && user_id >= uid_min));
+#endif /* ENABLE_SUBIDS */
+
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+ {
+ struct passwd *pampw;
+ pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
+ if (pampw == NULL) {
+ fprintf (stderr,
+ _("%s: Cannot determine your user name.\n"),
+ Prog);
+ fail_exit (1);
+ }
+
+ retval = pam_start ("useradd", pampw->pw_name, &conv, &pamh);
+ }
+
+ if (PAM_SUCCESS == retval) {
+ retval = pam_authenticate (pamh, 0);
+ }
+
+ if (PAM_SUCCESS == retval) {
+ retval = pam_acct_mgmt (pamh, 0);
+ }
+
+ if (PAM_SUCCESS != retval) {
+ fprintf (stderr, _("%s: PAM: %s\n"),
+ Prog, pam_strerror (pamh, retval));
+ SYSLOG((LOG_ERR, "%s", pam_strerror (pamh, retval)));
+ if (NULL != pamh) {
+ (void) pam_end (pamh, retval);
+ }
+ fail_exit (1);
+ }
+ (void) pam_end (pamh, retval);
+#endif /* USE_PAM */
+#endif /* ACCT_TOOLS_SETUID */
+
+ /*
+ * See if we are messing with the defaults file, or creating
+ * a new user.
+ */
+ if (Dflg) {
+ if (gflg || bflg || fflg || eflg || sflg) {
+ exit ((set_defaults () != 0) ? 1 : 0);
+ }
+
+ show_defaults ();
+ exit (E_SUCCESS);
+ }
+
+ /*
+ * Start with a quick check to see if the user exists.
+ */
+ if (prefix_getpwnam (user_name) != NULL) { /* local, no need for xgetpwnam */
+ fprintf (stderr, _("%s: user '%s' already exists\n"), Prog, user_name);
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "adding user",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ fail_exit (E_NAME_IN_USE);
+ }
+
+ /*
+ * Don't blindly overwrite a group when a user is added...
+ * If you already have a group username, and want to add the user
+ * to that group, use useradd -g username username.
+ * --bero
+ */
+ if (Uflg) {
+ /* local, no need for xgetgrnam */
+ if (prefix_getgrnam (user_name) != NULL) {
+ fprintf (stderr,
+ _("%s: group %s exists - if you want to add this user to that group, use -g.\n"),
+ Prog, user_name);
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "adding group",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ fail_exit (E_NAME_IN_USE);
+ }
+ }
+
+ /*
+ * Do the hard stuff:
+ * - open the files,
+ * - create the user entries,
+ * - create the home directory,
+ * - create user mail spool,
+ * - flush nscd caches for passwd and group services,
+ * - then close and update the files.
+ */
+ open_files ();
+
+ if (!oflg) {
+ /* first, seek for a valid uid to use for this user.
+ * We do this because later we can use the uid we found as
+ * gid too ... --gafton */
+ if (!uflg) {
+ if (find_new_uid (rflg, &user_id, NULL) < 0) {
+ fprintf (stderr, _("%s: can't create user\n"), Prog);
+ fail_exit (E_UID_IN_USE);
+ }
+ } else {
+ if (prefix_getpwuid (user_id) != NULL) {
+ fprintf (stderr,
+ _("%s: UID %lu is not unique\n"),
+ Prog, (unsigned long) user_id);
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "adding user",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_FAILURE);
+#endif
+ fail_exit (E_UID_IN_USE);
+ }
+ }
+ }
+
+#ifdef WITH_TCB
+ if (getdef_bool ("USE_TCB")) {
+ if (shadowtcb_create (user_name, user_id) == SHADOWTCB_FAILURE) {
+ fprintf (stderr,
+ _("%s: Failed to create tcb directory for %s\n"),
+ Prog, user_name);
+ fail_exit (E_UID_IN_USE);
+ }
+ }
+#endif
+ open_shadow ();
+
+ /* do we have to add a group for that user? This is why we need to
+ * open the group files in the open_files() function --gafton */
+ if (Uflg) {
+ if (find_new_gid (rflg, &user_gid, &user_id) < 0) {
+ fprintf (stderr,
+ _("%s: can't create group\n"),
+ Prog);
+ fail_exit (4);
+ }
+ grp_add ();
+ }
+
+#ifdef ENABLE_SUBIDS
+ if (is_sub_uid) {
+ if (find_new_sub_uids(user_name, &sub_uid_start, &sub_uid_count) < 0) {
+ fprintf (stderr,
+ _("%s: can't create subordinate user IDs\n"),
+ Prog);
+ fail_exit(E_SUB_UID_UPDATE);
+ }
+ }
+ if (is_sub_gid) {
+ if (find_new_sub_gids(user_name, &sub_gid_start, &sub_gid_count) < 0) {
+ fprintf (stderr,
+ _("%s: can't create subordinate group IDs\n"),
+ Prog);
+ fail_exit(E_SUB_GID_UPDATE);
+ }
+ }
+#endif /* ENABLE_SUBIDS */
+
+ usr_update ();
+
+ if (mflg) {
+ create_home ();
+ if (home_added) {
+ copy_tree (def_template, prefix_user_home, false, false,
+ (uid_t)-1, user_id, (gid_t)-1, user_gid);
+ } else {
+ fprintf (stderr,
+ _("%s: warning: the home directory %s already exists.\n"
+ "%s: Not copying any file from skel directory into it.\n"),
+ Prog, user_home, Prog);
+ }
+
+ }
+
+ /* Do not create mail directory for system accounts */
+ if (!rflg) {
+ create_mail ();
+ }
+
+ close_files ();
+
+ /*
+ * tallylog_reset needs to be able to lookup
+ * a valid existing user name,
+ * so we cannot call it before close_files()
+ */
+ if (!lflg && getpwuid (user_id) != NULL) {
+ tallylog_reset (user_name);
+ }
+
+#ifdef WITH_SELINUX
+ if (Zflg) {
+ if (set_seuser (user_name, user_selinux) != 0) {
+ fprintf (stderr,
+ _("%s: warning: the user name %s to %s SELinux user mapping failed.\n"),
+ Prog, user_name, user_selinux);
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "adding SELinux user mapping",
+ user_name, (unsigned int) user_id, 0);
+#endif /* WITH_AUDIT */
+ fail_exit (E_SE_UPDATE);
+ }
+ }
+#endif /* WITH_SELINUX */
+
+ nscd_flush_cache ("passwd");
+ nscd_flush_cache ("group");
+ sssd_flush_cache (SSSD_DB_PASSWD | SSSD_DB_GROUP);
+
+ return E_SUCCESS;
+}
+
diff --git a/src/userdel.c b/src/userdel.c
new file mode 100644
index 0000000..cc951e5
--- /dev/null
+++ b/src/userdel.c
@@ -0,0 +1,1355 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2012, 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 <assert.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <grp.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/stat.h>
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+#include "pam_defs.h"
+#endif /* USE_PAM */
+#endif /* ACCT_TOOLS_SETUID */
+#include "defines.h"
+#include "getdef.h"
+#include "groupio.h"
+#include "nscd.h"
+#include "sssd.h"
+#include "prototypes.h"
+#include "pwauth.h"
+#include "pwio.h"
+#include "shadowio.h"
+#ifdef SHADOWGRP
+#include "sgroupio.h"
+#endif /* SHADOWGRP */
+#ifdef WITH_TCB
+#include <tcb.h>
+#include "tcbfuncs.h"
+#endif /* WITH_TCB */
+/*@-exitarg@*/
+#include "exitcodes.h"
+#ifdef ENABLE_SUBIDS
+#include "subordinateio.h"
+#endif /* ENABLE_SUBIDS */
+
+/*
+ * exit status values
+ */
+#define E_PW_UPDATE 1 /* can't update password file */
+#define E_NOTFOUND 6 /* specified user doesn't exist */
+#define E_USER_BUSY 8 /* user currently logged in */
+#define E_GRP_UPDATE 10 /* can't update group file */
+#define E_HOMEDIR 12 /* can't remove home directory */
+#define E_SE_UPDATE 14 /* can't update SELinux user mapping */
+#ifdef ENABLE_SUBIDS
+#define E_SUB_UID_UPDATE 16 /* can't update the subordinate uid file */
+#define E_SUB_GID_UPDATE 18 /* can't update the subordinate gid file */
+#endif /* ENABLE_SUBIDS */
+
+/*
+ * Global variables
+ */
+const char *Prog;
+
+static char *user_name;
+static uid_t user_id;
+static gid_t user_gid;
+static char *user_home;
+
+static bool fflg = false;
+static bool rflg = false;
+#ifdef WITH_SELINUX
+static bool Zflg = false;
+#endif
+static bool Rflg = false;
+
+static bool is_shadow_pwd;
+
+#ifdef SHADOWGRP
+static bool is_shadow_grp;
+static bool sgr_locked = false;
+#endif /* SHADOWGRP */
+static bool pw_locked = false;
+static bool gr_locked = false;
+static bool spw_locked = false;
+#ifdef ENABLE_SUBIDS
+static bool is_sub_uid;
+static bool is_sub_gid;
+static bool sub_uid_locked = false;
+static bool sub_gid_locked = false;
+#endif /* ENABLE_SUBIDS */
+
+static const char* prefix = "";
+
+/* local function prototypes */
+static void usage (int status);
+static void update_groups (void);
+static void remove_usergroup (void);
+static void close_files (void);
+static void fail_exit (int);
+static void open_files (void);
+static void update_user (void);
+static void user_cancel (const char *);
+
+#ifdef EXTRA_CHECK_HOME_DIR
+static bool path_prefix (const char *, const char *);
+#endif /* EXTRA_CHECK_HOME_DIR */
+static int is_owner (uid_t, const char *);
+static int remove_mailbox (void);
+#ifdef WITH_TCB
+static int remove_tcbdir (const char *user_name, uid_t user_id);
+#endif /* WITH_TCB */
+
+/*
+ * usage - display usage message and exit
+ */
+static void usage (int status)
+{
+ FILE *usageout = (E_SUCCESS != status) ? stderr : stdout;
+ (void) fprintf (usageout,
+ _("Usage: %s [options] LOGIN\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+ (void) fputs (_(" -f, --force force removal of files,\n"
+ " even if not owned by user\n"),
+ usageout);
+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
+ (void) fputs (_(" -r, --remove remove home directory and mail spool\n"), usageout);
+ (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
+ (void) fputs (_(" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files\n"), usageout);
+#ifdef WITH_SELINUX
+ (void) fputs (_(" -Z, --selinux-user remove any SELinux user mapping for the user\n"), usageout);
+#endif /* WITH_SELINUX */
+ (void) fputs ("\n", usageout);
+ exit (status);
+}
+
+/*
+ * update_groups - delete user from secondary group set
+ *
+ * update_groups() takes the user name that was given and searches
+ * the group files for membership in any group.
+ *
+ * we also check to see if they have any groups they own (the same
+ * name is their user name) and delete them too (only if USERGROUPS_ENAB
+ * is enabled).
+ */
+static void update_groups (void)
+{
+ const struct group *grp;
+ struct group *ngrp;
+
+#ifdef SHADOWGRP
+ const struct sgrp *sgrp;
+ struct sgrp *nsgrp;
+#endif /* SHADOWGRP */
+
+ /*
+ * Scan through the entire group file looking for the groups that
+ * the user is a member of.
+ */
+ for (gr_rewind (), grp = gr_next (); NULL != grp; grp = gr_next ()) {
+
+ /*
+ * See if the user specified this group as one of their
+ * concurrent groups.
+ */
+ if (!is_on_list (grp->gr_mem, user_name)) {
+ continue;
+ }
+
+ /*
+ * Delete the username from the list of group members and
+ * update the group entry to reflect the change.
+ */
+ ngrp = __gr_dup (grp);
+ if (NULL == ngrp) {
+ fprintf (stderr,
+ _("%s: Out of memory. Cannot update %s.\n"),
+ Prog, gr_dbname ());
+ exit (13); /* XXX */
+ }
+ ngrp->gr_mem = del_list (ngrp->gr_mem, user_name);
+ if (gr_update (ngrp) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, gr_dbname (), ngrp->gr_name);
+ exit (E_GRP_UPDATE);
+ }
+
+ /*
+ * Update the DBM group file with the new entry as well.
+ */
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_USER, Prog,
+ "deleting user from group",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_SUCCESS);
+#endif /* WITH_AUDIT */
+ SYSLOG ((LOG_INFO, "delete '%s' from group '%s'\n",
+ user_name, ngrp->gr_name));
+ }
+
+ if (getdef_bool ("USERGROUPS_ENAB")) {
+ remove_usergroup ();
+ }
+
+#ifdef SHADOWGRP
+ if (!is_shadow_grp) {
+ return;
+ }
+
+ /*
+ * Scan through the entire shadow group file looking for the groups
+ * that the user is a member of. Both the administrative list and
+ * the ordinary membership list is checked.
+ */
+ for (sgr_rewind (), sgrp = sgr_next ();
+ NULL != sgrp;
+ sgrp = sgr_next ()) {
+ bool was_member, was_admin;
+
+ /*
+ * See if the user specified this group as one of their
+ * concurrent groups.
+ */
+ was_member = is_on_list (sgrp->sg_mem, user_name);
+ was_admin = is_on_list (sgrp->sg_adm, user_name);
+
+ if (!was_member && !was_admin) {
+ continue;
+ }
+
+ nsgrp = __sgr_dup (sgrp);
+ if (NULL == nsgrp) {
+ fprintf (stderr,
+ _("%s: Out of memory. Cannot update %s.\n"),
+ Prog, sgr_dbname ());
+ exit (13); /* XXX */
+ }
+
+ if (was_member) {
+ nsgrp->sg_mem = del_list (nsgrp->sg_mem, user_name);
+ }
+
+ if (was_admin) {
+ nsgrp->sg_adm = del_list (nsgrp->sg_adm, user_name);
+ }
+
+ if (sgr_update (nsgrp) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, sgr_dbname (), nsgrp->sg_name);
+ exit (E_GRP_UPDATE);
+ }
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_USER, Prog,
+ "deleting user from shadow group",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_SUCCESS);
+#endif /* WITH_AUDIT */
+ SYSLOG ((LOG_INFO, "delete '%s' from shadow group '%s'\n",
+ user_name, nsgrp->sg_name));
+ }
+#endif /* SHADOWGRP */
+}
+
+/*
+ * remove_usergroup - delete the user's group if it is a usergroup
+ *
+ * An usergroup is removed if
+ * + it has the same name as the user
+ * + it is the primary group of the user
+ * + it has no other members
+ * + it is not the primary group of any other user
+ */
+static void remove_usergroup (void)
+{
+ const struct group *grp;
+ const struct passwd *pwd = NULL;
+
+ grp = gr_locate (user_name);
+ if (NULL == grp) {
+ /* This user has no usergroup. */
+ return;
+ }
+
+ if (grp->gr_gid != user_gid) {
+ fprintf (stderr,
+ _("%s: group %s not removed because it is not the primary group of user %s.\n"),
+ Prog, grp->gr_name, user_name);
+ return;
+ }
+
+ if (NULL != grp->gr_mem[0]) {
+ /* The usergroup has other members. */
+ fprintf (stderr,
+ _("%s: group %s not removed because it has other members.\n"),
+ Prog, grp->gr_name);
+ return;
+ }
+
+ if (!fflg) {
+ /*
+ * Scan the passwd file to check if this group is still
+ * used as a primary group.
+ */
+ prefix_setpwent ();
+ while ((pwd = prefix_getpwent ()) != NULL) {
+ if (strcmp (pwd->pw_name, user_name) == 0) {
+ continue;
+ }
+ if (pwd->pw_gid == grp->gr_gid) {
+ fprintf (stderr,
+ _("%s: group %s is the primary group of another user and is not removed.\n"),
+ Prog, grp->gr_name);
+ break;
+ }
+ }
+ prefix_endpwent ();
+ }
+
+ if (NULL == pwd) {
+ /*
+ * We can remove this group, it is not the primary
+ * group of any remaining user.
+ */
+ if (gr_remove (user_name) == 0) {
+ fprintf (stderr,
+ _("%s: cannot remove entry '%s' from %s\n"),
+ Prog, user_name, gr_dbname ());
+ fail_exit (E_GRP_UPDATE);
+ }
+
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_GROUP, Prog,
+ "deleting group",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_SUCCESS);
+#endif /* WITH_AUDIT */
+ SYSLOG ((LOG_INFO,
+ "removed group '%s' owned by '%s'\n",
+ user_name, user_name));
+
+#ifdef SHADOWGRP
+ if (sgr_locate (user_name) != NULL) {
+ if (sgr_remove (user_name) == 0) {
+ fprintf (stderr,
+ _("%s: cannot remove entry '%s' from %s\n"),
+ Prog, user_name, sgr_dbname ());
+ fail_exit (E_GRP_UPDATE);
+ }
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_GROUP, Prog,
+ "deleting shadow group",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_SUCCESS);
+#endif /* WITH_AUDIT */
+ SYSLOG ((LOG_INFO,
+ "removed shadow group '%s' owned by '%s'\n",
+ user_name, user_name));
+
+ }
+#endif /* SHADOWGRP */
+ }
+}
+
+/*
+ * close_files - close all of the files that were opened
+ *
+ * close_files() closes all of the files that were opened for this
+ * new user. This causes any modified entries to be written out.
+ */
+static void close_files (void)
+{
+ if (pw_close () == 0) {
+ fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", pw_dbname ()));
+ fail_exit (E_PW_UPDATE);
+ }
+ if (pw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+ /* continue */
+ }
+ pw_locked = false;
+
+ if (is_shadow_pwd) {
+ if (spw_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"), Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", spw_dbname ()));
+ fail_exit (E_PW_UPDATE);
+ }
+ if (spw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+ /* continue */
+ }
+ spw_locked = false;
+ }
+
+ if (gr_close () == 0) {
+ fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", gr_dbname ()));
+ fail_exit (E_GRP_UPDATE);
+ }
+ if (gr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+ /* continue */
+ }
+ gr_locked = false;
+
+#ifdef SHADOWGRP
+ if (is_shadow_grp) {
+ if (sgr_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"), Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", sgr_dbname ()));
+ fail_exit (E_GRP_UPDATE);
+ }
+
+ if (sgr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+ /* continue */
+ }
+ sgr_locked = false;
+ }
+#endif /* SHADOWGRP */
+
+#ifdef ENABLE_SUBIDS
+ if (is_sub_uid) {
+ if (sub_uid_close () == 0) {
+ fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, sub_uid_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", sub_uid_dbname ()));
+ fail_exit (E_SUB_UID_UPDATE);
+ }
+ if (sub_uid_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_uid_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sub_uid_dbname ()));
+ /* continue */
+ }
+ sub_uid_locked = false;
+ }
+
+ if (is_sub_gid) {
+ if (sub_gid_close () == 0) {
+ fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, sub_gid_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", sub_gid_dbname ()));
+ fail_exit (E_SUB_GID_UPDATE);
+ }
+ if (sub_gid_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_gid_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sub_gid_dbname ()));
+ /* continue */
+ }
+ sub_gid_locked = false;
+ }
+#endif /* ENABLE_SUBIDS */
+}
+
+/*
+ * fail_exit - exit with a failure code after unlocking the files
+ */
+static void fail_exit (int code)
+{
+ if (pw_locked) {
+ if (pw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+ /* continue */
+ }
+ }
+ if (gr_locked) {
+ if (gr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+ /* continue */
+ }
+ }
+ if (spw_locked) {
+ if (spw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+ /* continue */
+ }
+ }
+#ifdef SHADOWGRP
+ if (sgr_locked) {
+ if (sgr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+ /* continue */
+ }
+ }
+#endif /* SHADOWGRP */
+#ifdef ENABLE_SUBIDS
+ if (sub_uid_locked) {
+ if (sub_uid_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_uid_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sub_uid_dbname ()));
+ /* continue */
+ }
+ }
+ if (sub_gid_locked) {
+ if (sub_gid_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_gid_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sub_gid_dbname ()));
+ /* continue */
+ }
+ }
+#endif /* ENABLE_SUBIDS */
+
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_USER, Prog,
+ "deleting user",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_FAILURE);
+#endif /* WITH_AUDIT */
+
+ exit (code);
+}
+
+/*
+ * open_files - lock and open the password files
+ *
+ * open_files() opens the two password files.
+ */
+
+static void open_files (void)
+{
+ if (pw_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, pw_dbname ());
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_USER, Prog,
+ "locking password file",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_FAILURE);
+#endif /* WITH_AUDIT */
+ fail_exit (E_PW_UPDATE);
+ }
+ pw_locked = true;
+ if (pw_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"), Prog, pw_dbname ());
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_USER, Prog,
+ "opening password file",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_FAILURE);
+#endif /* WITH_AUDIT */
+ fail_exit (E_PW_UPDATE);
+ }
+ if (is_shadow_pwd) {
+ if (spw_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, spw_dbname ());
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_USER, Prog,
+ "locking shadow password file",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_FAILURE);
+#endif /* WITH_AUDIT */
+ fail_exit (E_PW_UPDATE);
+ }
+ spw_locked = true;
+ if (spw_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, spw_dbname ());
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_USER, Prog,
+ "opening shadow password file",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_FAILURE);
+#endif /* WITH_AUDIT */
+ fail_exit (E_PW_UPDATE);
+ }
+ }
+ if (gr_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, gr_dbname ());
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_USER, Prog,
+ "locking group file",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_FAILURE);
+#endif /* WITH_AUDIT */
+ fail_exit (E_GRP_UPDATE);
+ }
+ gr_locked = true;
+ if (gr_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr, _("%s: cannot open %s\n"), Prog, gr_dbname ());
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_USER, Prog,
+ "opening group file",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_FAILURE);
+#endif /* WITH_AUDIT */
+ fail_exit (E_GRP_UPDATE);
+ }
+#ifdef SHADOWGRP
+ if (is_shadow_grp) {
+ if (sgr_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, sgr_dbname ());
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_USER, Prog,
+ "locking shadow group file",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_FAILURE);
+#endif /* WITH_AUDIT */
+ fail_exit (E_GRP_UPDATE);
+ }
+ sgr_locked= true;
+ if (sgr_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr, _("%s: cannot open %s\n"),
+ Prog, sgr_dbname ());
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_USER, Prog,
+ "opening shadow group file",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_FAILURE);
+#endif /* WITH_AUDIT */
+ fail_exit (E_GRP_UPDATE);
+ }
+ }
+#endif /* SHADOWGRP */
+#ifdef ENABLE_SUBIDS
+ if (is_sub_uid) {
+ if (sub_uid_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, sub_uid_dbname ());
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_USER, Prog,
+ "locking subordinate user file",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_FAILURE);
+#endif /* WITH_AUDIT */
+ fail_exit (E_SUB_UID_UPDATE);
+ }
+ sub_uid_locked = true;
+ if (sub_uid_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"), Prog, sub_uid_dbname ());
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_USER, Prog,
+ "opening subordinate user file",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_FAILURE);
+#endif /* WITH_AUDIT */
+ fail_exit (E_SUB_UID_UPDATE);
+ }
+ }
+ if (is_sub_gid) {
+ if (sub_gid_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, sub_gid_dbname ());
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_USER, Prog,
+ "locking subordinate group file",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_FAILURE);
+#endif /* WITH_AUDIT */
+ fail_exit (E_SUB_GID_UPDATE);
+ }
+ sub_gid_locked = true;
+ if (sub_gid_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"), Prog, sub_gid_dbname ());
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_USER, Prog,
+ "opening subordinate group file",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_FAILURE);
+#endif /* WITH_AUDIT */
+ fail_exit (E_SUB_GID_UPDATE);
+ }
+ }
+#endif /* ENABLE_SUBIDS */
+}
+
+/*
+ * update_user - delete the user entries
+ *
+ * update_user() deletes the password file entries for this user
+ * and will update the group entries as required.
+ */
+static void update_user (void)
+{
+ if (pw_remove (user_name) == 0) {
+ fprintf (stderr,
+ _("%s: cannot remove entry '%s' from %s\n"),
+ Prog, user_name, pw_dbname ());
+ fail_exit (E_PW_UPDATE);
+ }
+ if ( is_shadow_pwd
+ && (spw_locate (user_name) != NULL)
+ && (spw_remove (user_name) == 0)) {
+ fprintf (stderr,
+ _("%s: cannot remove entry '%s' from %s\n"),
+ Prog, user_name, spw_dbname ());
+ fail_exit (E_PW_UPDATE);
+ }
+#ifdef ENABLE_SUBIDS
+ if (is_sub_uid && sub_uid_remove(user_name, 0, ULONG_MAX) == 0) {
+ fprintf (stderr,
+ _("%s: cannot remove entry %lu from %s\n"),
+ Prog, (unsigned long)user_id, sub_uid_dbname ());
+ fail_exit (E_SUB_UID_UPDATE);
+ }
+ if (is_sub_gid && sub_gid_remove(user_name, 0, ULONG_MAX) == 0) {
+ fprintf (stderr,
+ _("%s: cannot remove entry %lu from %s\n"),
+ Prog, (unsigned long)user_id, sub_gid_dbname ());
+ fail_exit (E_SUB_GID_UPDATE);
+ }
+#endif /* ENABLE_SUBIDS */
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_USER, Prog,
+ "deleting user entries",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_SUCCESS);
+#endif /* WITH_AUDIT */
+ SYSLOG ((LOG_INFO, "delete user '%s'\n", user_name));
+}
+
+/*
+ * user_cancel - cancel cron and at jobs
+ *
+ * user_cancel calls a script for additional cleanups like removal of
+ * cron, at, or print jobs.
+ */
+
+static void user_cancel (const char *user)
+{
+ const char *cmd;
+ const char *argv[3];
+ int status;
+
+ cmd = getdef_str ("USERDEL_CMD");
+ if (NULL == cmd) {
+ return;
+ }
+ argv[0] = cmd;
+ argv[1] = user;
+ argv[2] = (char *)0;
+ (void) run_command (cmd, argv, NULL, &status);
+}
+
+#ifdef EXTRA_CHECK_HOME_DIR
+static bool path_prefix (const char *s1, const char *s2)
+{
+ return ( (strncmp (s2, s1, strlen (s1)) == 0)
+ && ( ('\0' == s2[strlen (s1)])
+ || ('/' == s2[strlen (s1)])));
+}
+#endif /* EXTRA_CHECK_HOME_DIR */
+
+/*
+ * is_owner - Check if path is owned by uid
+ *
+ * Return
+ * 1: path exists and is owned by uid
+ * 0: path is not owned by uid, or a failure occurred
+ * -1: path does not exist
+ */
+static int is_owner (uid_t uid, const char *path)
+{
+ struct stat st;
+
+ errno = 0;
+ if (stat (path, &st) != 0) {
+ if ((ENOENT == errno) || (ENOTDIR == errno)) {
+ /* The file or directory does not exist */
+ return -1;
+ } else {
+ return 0;
+ }
+ }
+ return (st.st_uid == uid) ? 1 : 0;
+}
+
+static int remove_mailbox (void)
+{
+ const char *maildir;
+ char* mailfile;
+ int i;
+ int errors = 0;
+ size_t len;
+
+ maildir = getdef_str ("MAIL_DIR");
+#ifdef MAIL_SPOOL_DIR
+ if ((NULL == maildir) && (getdef_str ("MAIL_FILE") == NULL)) {
+ maildir = MAIL_SPOOL_DIR;
+ }
+#endif /* MAIL_SPOOL_DIR */
+ if (NULL == maildir) {
+ return 0;
+ }
+
+ len = strlen (prefix) + strlen (maildir) + strlen (user_name) + 2;
+ mailfile = xmalloc (len);
+
+ if (prefix[0]) {
+ (void) snprintf (mailfile, len, "%s/%s/%s",
+ prefix, maildir, user_name);
+ }
+ else {
+ (void) snprintf (mailfile, len, "%s/%s",
+ maildir, user_name);
+ }
+ mailfile[len-1] = '\0';
+
+ if (access (mailfile, F_OK) != 0) {
+ if (ENOENT == errno) {
+ fprintf (stderr,
+ _("%s: %s mail spool (%s) not found\n"),
+ Prog, user_name, mailfile);
+ free(mailfile);
+ return 0;
+ } else {
+ fprintf (stderr,
+ _("%s: warning: can't remove %s: %s\n"),
+ Prog, mailfile, strerror (errno));
+ SYSLOG ((LOG_ERR, "Cannot remove %s: %s", mailfile, strerror (errno)));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_USER, Prog,
+ "deleting mail file",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_FAILURE);
+#endif /* WITH_AUDIT */
+ free(mailfile);
+ return -1;
+ }
+ }
+
+ if (fflg) {
+ if (unlink (mailfile) != 0) {
+ fprintf (stderr,
+ _("%s: warning: can't remove %s: %s\n"),
+ Prog, mailfile, strerror (errno));
+ SYSLOG ((LOG_ERR, "Cannot remove %s: %s", mailfile, strerror (errno)));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_USER, Prog,
+ "deleting mail file",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_FAILURE);
+#endif /* WITH_AUDIT */
+ errors = 1;
+ /* continue */
+ }
+#ifdef WITH_AUDIT
+ else
+ {
+ audit_logger (AUDIT_DEL_USER, Prog,
+ "deleting mail file",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_SUCCESS);
+ }
+#endif /* WITH_AUDIT */
+ free(mailfile);
+ return errors;
+ }
+ i = is_owner (user_id, mailfile);
+ if (i == 0) {
+ fprintf (stderr,
+ _("%s: %s not owned by %s, not removing\n"),
+ Prog, mailfile, user_name);
+ SYSLOG ((LOG_ERR,
+ "%s not owned by %s, not removed",
+ mailfile, strerror (errno)));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_USER, Prog,
+ "deleting mail file",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_FAILURE);
+#endif /* WITH_AUDIT */
+ free(mailfile);
+ return 1;
+ } else if (i == -1) {
+ free(mailfile);
+ return 0; /* mailbox doesn't exist */
+ }
+ if (unlink (mailfile) != 0) {
+ fprintf (stderr,
+ _("%s: warning: can't remove %s: %s\n"),
+ Prog, mailfile, strerror (errno));
+ SYSLOG ((LOG_ERR, "Cannot remove %s: %s", mailfile, strerror (errno)));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_USER, Prog,
+ "deleting mail file",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_FAILURE);
+#endif /* WITH_AUDIT */
+ errors = 1;
+ /* continue */
+ }
+#ifdef WITH_AUDIT
+ else
+ {
+ audit_logger (AUDIT_DEL_USER, Prog,
+ "deleting mail file",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_SUCCESS);
+ }
+#endif /* WITH_AUDIT */
+ free(mailfile);
+ return errors;
+}
+
+#ifdef WITH_TCB
+static int remove_tcbdir (const char *user_name, uid_t user_id)
+{
+ char *buf;
+ int ret = 0;
+ size_t buflen = (sizeof TCB_DIR) + strlen (user_name) + 2;
+
+ if (!getdef_bool ("USE_TCB")) {
+ return 0;
+ }
+
+ buf = malloc (buflen);
+ if (NULL == buf) {
+ fprintf (stderr, _("%s: Can't allocate memory, "
+ "tcb entry for %s not removed.\n"),
+ Prog, user_name);
+ return 1;
+ }
+ snprintf (buf, buflen, TCB_DIR "/%s", user_name);
+ if (shadowtcb_drop_priv () == SHADOWTCB_FAILURE) {
+ fprintf (stderr, _("%s: Cannot drop privileges: %s\n"),
+ Prog, strerror (errno));
+ shadowtcb_gain_priv ();
+ free (buf);
+ return 1;
+ }
+ /* Only remove directory contents with dropped privileges.
+ * We will regain them and remove the user's tcb directory afterwards.
+ */
+ if (remove_tree (buf, false) != 0) {
+ fprintf (stderr, _("%s: Cannot remove the content of %s: %s\n"),
+ Prog, buf, strerror (errno));
+ shadowtcb_gain_priv ();
+ free (buf);
+ return 1;
+ }
+ shadowtcb_gain_priv ();
+ free (buf);
+ if (shadowtcb_remove (user_name) == SHADOWTCB_FAILURE) {
+ fprintf (stderr, _("%s: Cannot remove tcb files for %s: %s\n"),
+ Prog, user_name, strerror (errno));
+ ret = 1;
+ }
+ return ret;
+}
+#endif /* WITH_TCB */
+
+/*
+ * main - userdel command
+ */
+int main (int argc, char **argv)
+{
+ int errors = 0; /* Error in the removal of the home directory */
+
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+ pam_handle_t *pamh = NULL;
+ int retval;
+#endif /* USE_PAM */
+#endif /* ACCT_TOOLS_SETUID */
+
+ /*
+ * Get my name so that I can use it to report errors.
+ */
+ Prog = Basename (argv[0]);
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ process_root_flag ("-R", argc, argv);
+ prefix = process_prefix_flag ("-P", argc, argv);
+
+ OPENLOG ("userdel");
+#ifdef WITH_AUDIT
+ audit_help_open ();
+#endif /* WITH_AUDIT */
+
+ {
+ /*
+ * Parse the command line options.
+ */
+ int c;
+ static struct option long_options[] = {
+ {"force", no_argument, NULL, 'f'},
+ {"help", no_argument, NULL, 'h'},
+ {"remove", no_argument, NULL, 'r'},
+ {"root", required_argument, NULL, 'R'},
+ {"prefix", required_argument, NULL, 'P'},
+#ifdef WITH_SELINUX
+ {"selinux-user", no_argument, NULL, 'Z'},
+#endif /* WITH_SELINUX */
+ {NULL, 0, NULL, '\0'}
+ };
+ while ((c = getopt_long (argc, argv,
+#ifdef WITH_SELINUX
+ "fhrR:P:Z",
+#else /* !WITH_SELINUX */
+ "fhrR:P:",
+#endif /* !WITH_SELINUX */
+ long_options, NULL)) != -1) {
+ switch (c) {
+ case 'f': /* force remove even if not owned by user */
+ fflg = true;
+ break;
+ case 'h':
+ usage (E_SUCCESS);
+ break;
+ case 'r': /* remove home dir and mailbox */
+ rflg = true;
+ break;
+ case 'R': /* no-op, handled in process_root_flag () */
+ Rflg = true;
+ break;
+ case 'P': /* no-op, handled in process_prefix_flag () */
+ break;
+#ifdef WITH_SELINUX
+ case 'Z':
+ if (prefix[0]) {
+ fprintf (stderr,
+ _("%s: -Z cannot be used with --prefix\n"),
+ Prog);
+ exit (E_BAD_ARG);
+ }
+ if (is_selinux_enabled () > 0) {
+ Zflg = true;
+ } else {
+ fprintf (stderr,
+ _("%s: -Z requires SELinux enabled kernel\n"),
+ Prog);
+
+ exit (E_BAD_ARG);
+ }
+ break;
+#endif /* WITH_SELINUX */
+ default:
+ usage (E_USAGE);
+ }
+ }
+ }
+
+ if ((optind + 1) != argc) {
+ usage (E_USAGE);
+ }
+
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+ {
+ struct passwd *pampw;
+ pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
+ if (pampw == NULL) {
+ fprintf (stderr,
+ _("%s: Cannot determine your user name.\n"),
+ Prog);
+ exit (E_PW_UPDATE);
+ }
+
+ retval = pam_start ("userdel", pampw->pw_name, &conv, &pamh);
+ }
+
+ if (PAM_SUCCESS == retval) {
+ retval = pam_authenticate (pamh, 0);
+ }
+
+ if (PAM_SUCCESS == retval) {
+ retval = pam_acct_mgmt (pamh, 0);
+ }
+
+ if (PAM_SUCCESS != retval) {
+ fprintf (stderr, _("%s: PAM: %s\n"),
+ Prog, pam_strerror (pamh, retval));
+ SYSLOG((LOG_ERR, "%s", pam_strerror (pamh, retval)));
+ if (NULL != pamh) {
+ (void) pam_end (pamh, retval);
+ }
+ exit (E_PW_UPDATE);
+ }
+ (void) pam_end (pamh, retval);
+#endif /* USE_PAM */
+#endif /* ACCT_TOOLS_SETUID */
+
+ is_shadow_pwd = spw_file_present ();
+#ifdef SHADOWGRP
+ is_shadow_grp = sgr_file_present ();
+#endif /* SHADOWGRP */
+#ifdef ENABLE_SUBIDS
+ is_sub_uid = sub_uid_file_present ();
+ is_sub_gid = sub_gid_file_present ();
+#endif /* ENABLE_SUBIDS */
+
+ /*
+ * Start with a quick check to see if the user exists.
+ */
+ user_name = argv[argc - 1];
+ {
+ const struct passwd *pwd;
+
+ pw_open(O_RDONLY);
+ pwd = pw_locate (user_name); /* we care only about local users */
+ if (NULL == pwd) {
+ pw_close();
+ fprintf (stderr, _("%s: user '%s' does not exist\n"),
+ Prog, user_name);
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_USER, Prog,
+ "deleting user not found",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif /* WITH_AUDIT */
+ exit (E_NOTFOUND);
+ }
+ user_id = pwd->pw_uid;
+ user_gid = pwd->pw_gid;
+
+ if(prefix[0]) {
+
+ size_t len = strlen(prefix) + strlen(pwd->pw_dir) + 2;
+ int wlen;
+ user_home = xmalloc(len);
+ wlen = snprintf(user_home, len, "%s/%s", prefix, pwd->pw_dir);
+ assert (wlen == (int) len -1);
+ }
+ else {
+ user_home = xstrdup (pwd->pw_dir);
+ }
+ pw_close();
+ }
+#ifdef WITH_TCB
+ if (shadowtcb_set_user (user_name) == SHADOWTCB_FAILURE) {
+ exit (E_NOTFOUND);
+ }
+#endif /* WITH_TCB */
+#ifdef USE_NIS
+
+ /*
+ * Now make sure it isn't an NIS user.
+ */
+ if (__ispwNIS ()) {
+ char *nis_domain;
+ char *nis_master;
+
+ fprintf (stderr,
+ _("%s: user %s is a NIS user\n"), Prog, user_name);
+ if ( !yp_get_default_domain (&nis_domain)
+ && !yp_master (nis_domain, "passwd.byname", &nis_master)) {
+ fprintf (stderr,
+ _("%s: %s is the NIS master\n"),
+ Prog, nis_master);
+ }
+ exit (E_NOTFOUND);
+ }
+#endif /* USE_NIS */
+ /*
+ * Check to make certain the user isn't logged in.
+ * Note: This is a best effort basis. The user may log in between,
+ * a cron job may be started on her behalf, etc.
+ */
+ if ((prefix[0] == '\0') && !Rflg && user_busy (user_name, user_id) != 0) {
+ if (!fflg) {
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_DEL_USER, Prog,
+ "deleting user logged in",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+#endif /* WITH_AUDIT */
+ exit (E_USER_BUSY);
+ }
+ }
+
+ /*
+ * Do the hard stuff - open the files, create the user entries,
+ * create the home directory, then close and update the files.
+ */
+ open_files ();
+ update_user ();
+ update_groups ();
+
+ if (rflg) {
+ errors += remove_mailbox ();
+ }
+ if (rflg) {
+ int home_owned = is_owner (user_id, user_home);
+ if (-1 == home_owned) {
+ fprintf (stderr,
+ _("%s: %s home directory (%s) not found\n"),
+ Prog, user_name, user_home);
+ rflg = 0;
+ } else if ((0 == home_owned) && !fflg) {
+ fprintf (stderr,
+ _("%s: %s not owned by %s, not removing\n"),
+ Prog, user_home, user_name);
+ rflg = 0;
+ errors++;
+ /* continue */
+ }
+ }
+
+#ifdef EXTRA_CHECK_HOME_DIR
+ /* This may be slow, the above should be good enough. */
+ if (rflg && !fflg) {
+ struct passwd *pwd;
+ /*
+ * For safety, refuse to remove the home directory if it
+ * would result in removing some other user's home
+ * directory. Still not perfect so be careful, but should
+ * prevent accidents if someone has /home or / as home
+ * directory... --marekm
+ */
+ prefix_setpwent ();
+ while ((pwd = prefix_getpwent ())) {
+ if (strcmp (pwd->pw_name, user_name) == 0) {
+ continue;
+ }
+ if (path_prefix (user_home, pwd->pw_dir)) {
+ fprintf (stderr,
+ _("%s: not removing directory %s (would remove home of user %s)\n"),
+ Prog, user_home, pwd->pw_name);
+ rflg = false;
+ errors++;
+ /* continue */
+ break;
+ }
+ }
+ prefix_endpwent ();
+ }
+#endif /* EXTRA_CHECK_HOME_DIR */
+
+ if (rflg) {
+#ifdef WITH_BTRFS
+ int is_subvolume = btrfs_is_subvolume (user_home);
+ if (is_subvolume < 0) {
+ errors++;
+ /* continue */
+ }
+ else if (is_subvolume > 0) {
+ if (btrfs_remove_subvolume (user_home)) {
+ fprintf (stderr,
+ _("%s: error removing subvolume %s\n"),
+ Prog, user_home);
+ errors++;
+ /* continue */
+ }
+ }
+ else
+#endif
+ if (remove_tree (user_home, true) != 0) {
+ fprintf (stderr,
+ _("%s: error removing directory %s\n"),
+ Prog, user_home);
+ errors++;
+ /* continue */
+ }
+#ifdef WITH_AUDIT
+ else
+ {
+ audit_logger (AUDIT_DEL_USER, Prog,
+ "deleting home directory",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_SUCCESS);
+ }
+#endif /* WITH_AUDIT */
+ }
+#ifdef WITH_AUDIT
+ if (0 != errors) {
+ audit_logger (AUDIT_DEL_USER, Prog,
+ "deleting home directory",
+ user_name, AUDIT_NO_ID,
+ SHADOW_AUDIT_FAILURE);
+ }
+#endif /* WITH_AUDIT */
+
+#ifdef WITH_SELINUX
+ if (Zflg) {
+ if (del_seuser (user_name) != 0) {
+ fprintf (stderr,
+ _("%s: warning: the user name %s to SELinux user mapping removal failed.\n"),
+ Prog, user_name);
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "removing SELinux user mapping",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_FAILURE);
+#endif /* WITH_AUDIT */
+ fail_exit (E_SE_UPDATE);
+ }
+ }
+#endif /* WITH_SELINUX */
+
+ /*
+ * Cancel any crontabs or at jobs. Have to do this before we remove
+ * the entry from /etc/passwd.
+ */
+ if(prefix[0] == '\0')
+ user_cancel (user_name);
+ close_files ();
+
+#ifdef WITH_TCB
+ errors += remove_tcbdir (user_name, user_id);
+#endif /* WITH_TCB */
+
+ nscd_flush_cache ("passwd");
+ nscd_flush_cache ("group");
+ sssd_flush_cache (SSSD_DB_PASSWD | SSSD_DB_GROUP);
+
+ return ((0 != errors) ? E_HOMEDIR : E_SUCCESS);
+}
+
diff --git a/src/usermod.c b/src/usermod.c
new file mode 100644
index 0000000..05b9871
--- /dev/null
+++ b/src/usermod.c
@@ -0,0 +1,2367 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 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 <assert.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <grp.h>
+#include <lastlog.h>
+#include <pwd.h>
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+#include "pam_defs.h"
+#endif /* USE_PAM */
+#endif /* ACCT_TOOLS_SETUID */
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <time.h>
+#include "chkname.h"
+#include "defines.h"
+#include "faillog.h"
+#include "getdef.h"
+#include "groupio.h"
+#include "nscd.h"
+#include "sssd.h"
+#include "prototypes.h"
+#include "pwauth.h"
+#include "pwio.h"
+#ifdef SHADOWGRP
+#include "sgroupio.h"
+#endif
+#include "shadowio.h"
+#ifdef ENABLE_SUBIDS
+#include "subordinateio.h"
+#endif /* ENABLE_SUBIDS */
+#ifdef WITH_TCB
+#include "tcbfuncs.h"
+#endif
+
+/*
+ * exit status values
+ * for E_GRP_UPDATE and E_NOSPACE (not used yet), other update requests
+ * will be implemented (as documented in the Solaris 2.x man page).
+ */
+/*@-exitarg@*/
+#define E_SUCCESS 0 /* success */
+#define E_PW_UPDATE 1 /* can't update password file */
+#define E_USAGE 2 /* invalid command syntax */
+#define E_BAD_ARG 3 /* invalid argument to option */
+#define E_UID_IN_USE 4 /* UID already in use (and no -o) */
+/* #define E_BAD_PWFILE 5 passwd file contains errors */
+#define E_NOTFOUND 6 /* specified user/group doesn't exist */
+#define E_USER_BUSY 8 /* user to modify is logged in */
+#define E_NAME_IN_USE 9 /* username already in use */
+#define E_GRP_UPDATE 10 /* can't update group file */
+/* #define E_NOSPACE 11 insufficient space to move home dir */
+#define E_HOMEDIR 12 /* unable to complete home dir move */
+#define E_SE_UPDATE 13 /* can't update SELinux user mapping */
+#ifdef ENABLE_SUBIDS
+#define E_SUB_UID_UPDATE 16 /* can't update the subordinate uid file */
+#define E_SUB_GID_UPDATE 18 /* can't update the subordinate gid file */
+#endif /* ENABLE_SUBIDS */
+
+#define VALID(s) (strcspn (s, ":\n") == strlen (s))
+
+/*
+ * Global variables
+ */
+const char *Prog;
+
+static char *user_name;
+static char *user_newname;
+static char *user_pass;
+static uid_t user_id;
+static uid_t user_newid;
+static gid_t user_gid;
+static gid_t user_newgid;
+static char *user_comment;
+static char *user_newcomment;
+static char *user_home;
+static char *user_newhome;
+static char *user_shell;
+#ifdef WITH_SELINUX
+static const char *user_selinux = "";
+#endif /* WITH_SELINUX */
+static char *user_newshell;
+static long user_expire;
+static long user_newexpire;
+static long user_inactive;
+static long user_newinactive;
+static long sys_ngroups;
+static char **user_groups; /* NULL-terminated list */
+
+static const char* prefix = "";
+static char* prefix_user_home = NULL;
+static char* prefix_user_newhome = NULL;
+
+static bool
+ aflg = false, /* append to existing secondary group set */
+ cflg = false, /* new comment (GECOS) field */
+ dflg = false, /* new home directory */
+ eflg = false, /* days since 1970-01-01 when account becomes expired */
+ fflg = false, /* days until account with expired password is locked */
+ gflg = false, /* new primary group ID */
+ Gflg = false, /* new secondary group set */
+ Lflg = false, /* lock the password */
+ lflg = false, /* new user name */
+ mflg = false, /* create user's home directory if it doesn't exist */
+ oflg = false, /* permit non-unique user ID to be specified with -u */
+ pflg = false, /* new encrypted password */
+ sflg = false, /* new shell program */
+#ifdef WITH_SELINUX
+ Zflg = false, /* new selinux user */
+#endif
+#ifdef ENABLE_SUBIDS
+ vflg = false, /* add subordinate uids */
+ Vflg = false, /* delete subordinate uids */
+ wflg = false, /* add subordinate gids */
+ Wflg = false, /* delete subordinate gids */
+#endif /* ENABLE_SUBIDS */
+ uflg = false, /* specify new user ID */
+ Uflg = false; /* unlock the password */
+
+static bool is_shadow_pwd;
+
+#ifdef SHADOWGRP
+static bool is_shadow_grp;
+#endif
+
+#ifdef ENABLE_SUBIDS
+static bool is_sub_uid = false;
+static bool is_sub_gid = false;
+#endif /* ENABLE_SUBIDS */
+
+static bool pw_locked = false;
+static bool spw_locked = false;
+static bool gr_locked = false;
+#ifdef SHADOWGRP
+static bool sgr_locked = false;
+#endif
+#ifdef ENABLE_SUBIDS
+static bool sub_uid_locked = false;
+static bool sub_gid_locked = false;
+#endif /* ENABLE_SUBIDS */
+
+
+/* local function prototypes */
+static void date_to_str (/*@unique@*//*@out@*/char *buf, size_t maxsize,
+ long int date);
+static int get_groups (char *);
+static /*@noreturn@*/void usage (int status);
+static void new_pwent (struct passwd *);
+static void new_spent (struct spwd *);
+static /*@noreturn@*/void fail_exit (int);
+static void update_group (void);
+
+#ifdef SHADOWGRP
+static void update_gshadow (void);
+#endif
+static void grp_update (void);
+
+static void process_flags (int, char **);
+static void close_files (void);
+static void open_files (void);
+static void usr_update (void);
+static void move_home (void);
+static void update_lastlog (void);
+static void update_faillog (void);
+
+#ifndef NO_MOVE_MAILBOX
+static void move_mailbox (void);
+#endif
+
+extern int allow_bad_names;
+
+static void date_to_str (/*@unique@*//*@out@*/char *buf, size_t maxsize,
+ long int date)
+{
+ struct tm *tp;
+
+ if (date < 0) {
+ strncpy (buf, "never", maxsize);
+ } else {
+ time_t t = (time_t) date;
+ tp = gmtime (&t);
+#ifdef HAVE_STRFTIME
+ strftime (buf, maxsize, "%Y-%m-%d", tp);
+#else
+ (void) snprintf (buf, maxsize, "%04d-%02d-%02d",
+ tp->tm_year + 1900,
+ tp->tm_mon + 1,
+ tp->tm_mday);
+#endif /* HAVE_STRFTIME */
+ }
+ buf[maxsize - 1] = '\0';
+}
+
+/*
+ * get_groups - convert a list of group names to an array of group IDs
+ *
+ * get_groups() takes a comma-separated list of group names and
+ * converts it to a NULL-terminated array. Any unknown group names are
+ * reported as errors.
+ */
+static int get_groups (char *list)
+{
+ char *cp;
+ const struct group *grp;
+ int errors = 0;
+ int ngroups = 0;
+
+ /*
+ * Initialize the list to be empty
+ */
+ user_groups[0] = (char *) 0;
+
+ if ('\0' == *list) {
+ return 0;
+ }
+
+ /*
+ * So long as there is some data to be converted, strip off each
+ * name and look it up. A mix of numerical and string values for
+ * group identifiers is permitted.
+ */
+ do {
+ /*
+ * Strip off a single name from the list
+ */
+ cp = strchr (list, ',');
+ if (NULL != cp) {
+ *cp = '\0';
+ cp++;
+ }
+
+ /*
+ * Names starting with digits are treated as numerical GID
+ * values, otherwise the string is looked up as is.
+ */
+ grp = prefix_getgr_nam_gid (list);
+
+ /*
+ * There must be a match, either by GID value or by
+ * string name.
+ */
+ if (NULL == grp) {
+ fprintf (stderr, _("%s: group '%s' does not exist\n"),
+ Prog, list);
+ errors++;
+ }
+ list = cp;
+
+ /*
+ * If the group doesn't exist, don't dump core. Instead,
+ * try the next one. --marekm
+ */
+ if (NULL == grp) {
+ continue;
+ }
+
+#ifdef USE_NIS
+ /*
+ * Don't add this group if they are an NIS group. Tell the
+ * user to go to the server for this group.
+ */
+ if (__isgrNIS ()) {
+ fprintf (stderr,
+ _("%s: group '%s' is a NIS group.\n"),
+ Prog, grp->gr_name);
+ gr_free ((struct group *)grp);
+ continue;
+ }
+#endif
+
+ if (ngroups == sys_ngroups) {
+ fprintf (stderr,
+ _("%s: too many groups specified (max %d).\n"),
+ Prog, ngroups);
+ gr_free ((struct group *)grp);
+ break;
+ }
+
+ /*
+ * Add the group name to the user's list of groups.
+ */
+ user_groups[ngroups++] = xstrdup (grp->gr_name);
+ gr_free ((struct group *)grp);
+ } while (NULL != list);
+
+ user_groups[ngroups] = (char *) 0;
+
+ /*
+ * Any errors in finding group names are fatal
+ */
+ if (0 != errors) {
+ return -1;
+ }
+
+ return 0;
+}
+
+#ifdef ENABLE_SUBIDS
+struct ulong_range
+{
+ unsigned long first;
+ unsigned long last;
+};
+
+static struct ulong_range getulong_range(const char *str)
+{
+ struct ulong_range result = { .first = ULONG_MAX, .last = 0 };
+ long long first, last;
+ char *pos;
+
+ errno = 0;
+ first = strtoll(str, &pos, 10);
+ if (('\0' == *str) || ('-' != *pos ) || (ERANGE == errno) ||
+ (first != (unsigned long int)first))
+ goto out;
+
+ errno = 0;
+ last = strtoll(pos + 1, &pos, 10);
+ if (('\0' != *pos ) || (ERANGE == errno) ||
+ (last != (unsigned long int)last))
+ goto out;
+
+ if (first > last)
+ goto out;
+
+ result.first = (unsigned long int)first;
+ result.last = (unsigned long int)last;
+out:
+ return result;
+
+}
+
+struct ulong_range_list_entry {
+ struct ulong_range_list_entry *next;
+ struct ulong_range range;
+};
+
+static struct ulong_range_list_entry *add_sub_uids = NULL, *del_sub_uids = NULL;
+static struct ulong_range_list_entry *add_sub_gids = NULL, *del_sub_gids = NULL;
+
+static int prepend_range(const char *str, struct ulong_range_list_entry **head)
+{
+ struct ulong_range range;
+ struct ulong_range_list_entry *entry;
+ range = getulong_range(str);
+ if (range.first > range.last)
+ return 0;
+
+ entry = malloc(sizeof(*entry));
+ if (!entry) {
+ fprintf (stderr,
+ _("%s: failed to allocate memory: %s\n"),
+ Prog, strerror (errno));
+ return 0;
+ }
+ entry->next = *head;
+ entry->range = range;
+ *head = entry;
+ return 1;
+}
+#endif /* ENABLE_SUBIDS */
+
+/*
+ * usage - display usage message and exit
+ */
+static /*@noreturn@*/void usage (int status)
+{
+ FILE *usageout = (E_SUCCESS != status) ? stderr : stdout;
+ (void) fprintf (usageout,
+ _("Usage: %s [options] LOGIN\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+ (void) fputs (_(" -b, --badnames allow bad names\n"), usageout);
+ (void) fputs (_(" -c, --comment COMMENT new value of the GECOS field\n"), usageout);
+ (void) fputs (_(" -d, --home HOME_DIR new home directory for the user account\n"), usageout);
+ (void) fputs (_(" -e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE\n"), usageout);
+ (void) fputs (_(" -f, --inactive INACTIVE set password inactive after expiration\n"
+ " to INACTIVE\n"), usageout);
+ (void) fputs (_(" -g, --gid GROUP force use GROUP as new primary group\n"), usageout);
+ (void) fputs (_(" -G, --groups GROUPS new list of supplementary GROUPS\n"), usageout);
+ (void) fputs (_(" -a, --append append the user to the supplemental GROUPS\n"
+ " mentioned by the -G option without removing\n"
+ " the user from other groups\n"), usageout);
+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
+ (void) fputs (_(" -l, --login NEW_LOGIN new value of the login name\n"), usageout);
+ (void) fputs (_(" -L, --lock lock the user account\n"), usageout);
+ (void) fputs (_(" -m, --move-home move contents of the home directory to the\n"
+ " new location (use only with -d)\n"), usageout);
+ (void) fputs (_(" -o, --non-unique allow using duplicate (non-unique) UID\n"), usageout);
+ (void) fputs (_(" -p, --password PASSWORD use encrypted password for the new password\n"), usageout);
+ (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
+ (void) fputs (_(" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files\n"), usageout);
+ (void) fputs (_(" -s, --shell SHELL new login shell for the user account\n"), usageout);
+ (void) fputs (_(" -u, --uid UID new UID for the user account\n"), usageout);
+ (void) fputs (_(" -U, --unlock unlock the user account\n"), usageout);
+#ifdef ENABLE_SUBIDS
+ (void) fputs (_(" -v, --add-subuids FIRST-LAST add range of subordinate uids\n"), usageout);
+ (void) fputs (_(" -V, --del-subuids FIRST-LAST remove range of subordinate uids\n"), usageout);
+ (void) fputs (_(" -w, --add-subgids FIRST-LAST add range of subordinate gids\n"), usageout);
+ (void) fputs (_(" -W, --del-subgids FIRST-LAST remove range of subordinate gids\n"), usageout);
+#endif /* ENABLE_SUBIDS */
+#ifdef WITH_SELINUX
+ (void) fputs (_(" -Z, --selinux-user SEUSER new SELinux user mapping for the user account\n"), usageout);
+#endif /* WITH_SELINUX */
+ (void) fputs ("\n", usageout);
+ exit (status);
+}
+
+/*
+ * update encrypted password string (for both shadow and non-shadow
+ * passwords)
+ */
+static char *new_pw_passwd (char *pw_pass)
+{
+ if (Lflg && ('!' != pw_pass[0])) {
+ char *buf = xmalloc (strlen (pw_pass) + 2);
+
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "updating passwd",
+ user_newname, (unsigned int) user_newid, 0);
+#endif
+ SYSLOG ((LOG_INFO, "lock user '%s' password", user_newname));
+ strcpy (buf, "!");
+ strcat (buf, pw_pass);
+ pw_pass = buf;
+ } else if (Uflg && pw_pass[0] == '!') {
+ char *s;
+
+ if (pw_pass[1] == '\0') {
+ fprintf (stderr,
+ _("%s: unlocking the user's password would result in a passwordless account.\n"
+ "You should set a password with usermod -p to unlock this user's password.\n"),
+ Prog);
+ return pw_pass;
+ }
+
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "updating password",
+ user_newname, (unsigned int) user_newid, 0);
+#endif
+ SYSLOG ((LOG_INFO, "unlock user '%s' password", user_newname));
+ s = pw_pass;
+ while ('\0' != *s) {
+ *s = *(s + 1);
+ s++;
+ }
+ } else if (pflg) {
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "changing password",
+ user_newname, (unsigned int) user_newid, 1);
+#endif
+ SYSLOG ((LOG_INFO, "change user '%s' password", user_newname));
+ pw_pass = xstrdup (user_pass);
+ }
+ return pw_pass;
+}
+
+/*
+ * new_pwent - initialize the values in a password file entry
+ *
+ * new_pwent() takes all of the values that have been entered and fills
+ * in a (struct passwd) with them.
+ */
+static void new_pwent (struct passwd *pwent)
+{
+ if (lflg) {
+ if (pw_locate (user_newname) != NULL) {
+ /* This should never happen.
+ * It was already checked that the user doesn't
+ * exist on the system.
+ */
+ fprintf (stderr,
+ _("%s: user '%s' already exists in %s\n"),
+ Prog, user_newname, pw_dbname ());
+ fail_exit (E_NAME_IN_USE);
+ }
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "changing name",
+ user_newname, (unsigned int) user_newid, 1);
+#endif
+ SYSLOG ((LOG_INFO,
+ "change user name '%s' to '%s'",
+ pwent->pw_name, user_newname));
+ pwent->pw_name = xstrdup (user_newname);
+ }
+ /* Update the password in passwd if there is no shadow file or if
+ * the password is currently in passwd (pw_passwd != "x").
+ * We do not force the usage of shadow passwords if they are not
+ * used for this account.
+ */
+ if ( (!is_shadow_pwd)
+ || (strcmp (pwent->pw_passwd, SHADOW_PASSWD_STRING) != 0)) {
+ pwent->pw_passwd = new_pw_passwd (pwent->pw_passwd);
+ }
+
+ if (uflg) {
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "changing uid",
+ user_newname, (unsigned int) user_newid, 1);
+#endif
+ SYSLOG ((LOG_INFO,
+ "change user '%s' UID from '%d' to '%d'",
+ pwent->pw_name, pwent->pw_uid, user_newid));
+ pwent->pw_uid = user_newid;
+ }
+ if (gflg) {
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "changing primary group",
+ user_newname, (unsigned int) user_newid, 1);
+#endif
+ SYSLOG ((LOG_INFO,
+ "change user '%s' GID from '%d' to '%d'",
+ pwent->pw_name, pwent->pw_gid, user_newgid));
+ pwent->pw_gid = user_newgid;
+ }
+ if (cflg) {
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "changing comment",
+ user_newname, (unsigned int) user_newid, 1);
+#endif
+ pwent->pw_gecos = user_newcomment;
+ }
+
+ if (dflg) {
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "changing home directory",
+ user_newname, (unsigned int) user_newid, 1);
+#endif
+ SYSLOG ((LOG_INFO,
+ "change user '%s' home from '%s' to '%s'",
+ pwent->pw_name, pwent->pw_dir, user_newhome));
+ pwent->pw_dir = user_newhome;
+ }
+ if (sflg) {
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "changing user shell",
+ user_newname, (unsigned int) user_newid, 1);
+#endif
+ SYSLOG ((LOG_INFO,
+ "change user '%s' shell from '%s' to '%s'",
+ pwent->pw_name, pwent->pw_shell, user_newshell));
+ pwent->pw_shell = user_newshell;
+ }
+}
+
+/*
+ * new_spent - initialize the values in a shadow password file entry
+ *
+ * new_spent() takes all of the values that have been entered and fills
+ * in a (struct spwd) with them.
+ */
+static void new_spent (struct spwd *spent)
+{
+ if (lflg) {
+ if (spw_locate (user_newname) != NULL) {
+ fprintf (stderr,
+ _("%s: user '%s' already exists in %s\n"),
+ Prog, user_newname, spw_dbname ());
+ fail_exit (E_NAME_IN_USE);
+ }
+ spent->sp_namp = xstrdup (user_newname);
+ }
+
+ if (fflg) {
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "changing inactive days",
+ user_newname, (unsigned int) user_newid, 1);
+#endif
+ SYSLOG ((LOG_INFO,
+ "change user '%s' inactive from '%ld' to '%ld'",
+ spent->sp_namp, spent->sp_inact, user_newinactive));
+ spent->sp_inact = user_newinactive;
+ }
+ if (eflg) {
+ /* log dates rather than numbers of days. */
+ char new_exp[16], old_exp[16];
+ date_to_str (new_exp, sizeof(new_exp),
+ user_newexpire * DAY);
+ date_to_str (old_exp, sizeof(old_exp),
+ user_expire * DAY);
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "changing expiration date",
+ user_newname, (unsigned int) user_newid, 1);
+#endif
+ SYSLOG ((LOG_INFO,
+ "change user '%s' expiration from '%s' to '%s'",
+ spent->sp_namp, old_exp, new_exp));
+ spent->sp_expire = user_newexpire;
+ }
+
+ /* Always update the shadowed password if there is a shadow entry
+ * (even if shadowed passwords might not be enabled for this
+ * account (pw_passwd != "x")).
+ * It seems better to update the password in both places in case a
+ * shadow and a non shadow entry exist.
+ * This might occur if:
+ * + there were already both entries
+ * + aging has been requested
+ */
+ spent->sp_pwdp = new_pw_passwd (spent->sp_pwdp);
+
+ if (pflg) {
+ spent->sp_lstchg = (long) gettime () / SCALE;
+ if (0 == spent->sp_lstchg) {
+ /* Better disable aging than requiring a password
+ * change. */
+ spent->sp_lstchg = -1;
+ }
+ }
+}
+
+/*
+ * fail_exit - exit with an error code after unlocking files
+ */
+static /*@noreturn@*/void fail_exit (int code)
+{
+ if (gr_locked) {
+ if (gr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+ /* continue */
+ }
+ }
+#ifdef SHADOWGRP
+ if (sgr_locked) {
+ if (sgr_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+ /* continue */
+ }
+ }
+#endif
+ if (spw_locked) {
+ if (spw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+ /* continue */
+ }
+ }
+ if (pw_locked) {
+ if (pw_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+ /* continue */
+ }
+ }
+#ifdef ENABLE_SUBIDS
+ if (sub_uid_locked) {
+ if (sub_uid_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_uid_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sub_uid_dbname ()));
+ /* continue */
+ }
+ }
+ if (sub_gid_locked) {
+ if (sub_gid_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_gid_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sub_gid_dbname ()));
+ /* continue */
+ }
+ }
+#endif /* ENABLE_SUBIDS */
+
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "modifying account",
+ user_name, AUDIT_NO_ID, 0);
+#endif
+ exit (code);
+}
+
+
+static void update_group (void)
+{
+ bool is_member;
+ bool was_member;
+ bool changed;
+ const struct group *grp;
+ struct group *ngrp;
+
+ changed = false;
+
+ /*
+ * Scan through the entire group file looking for the groups that
+ * the user is a member of.
+ */
+ while ((grp = gr_next ()) != NULL) {
+ /*
+ * See if the user specified this group as one of their
+ * concurrent groups.
+ */
+ was_member = is_on_list (grp->gr_mem, user_name);
+ is_member = Gflg && ( (was_member && aflg)
+ || is_on_list (user_groups, grp->gr_name));
+
+ if (!was_member && !is_member) {
+ continue;
+ }
+
+ ngrp = __gr_dup (grp);
+ if (NULL == ngrp) {
+ fprintf (stderr,
+ _("%s: Out of memory. Cannot update %s.\n"),
+ Prog, gr_dbname ());
+ fail_exit (E_GRP_UPDATE);
+ }
+
+ if (was_member) {
+ if ((!Gflg) || is_member) {
+ /* User was a member and is still a member
+ * of this group.
+ * But the user might have been renamed.
+ */
+ if (lflg) {
+ ngrp->gr_mem = del_list (ngrp->gr_mem,
+ user_name);
+ ngrp->gr_mem = add_list (ngrp->gr_mem,
+ user_newname);
+ changed = true;
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "changing group member",
+ user_newname, AUDIT_NO_ID, 1);
+#endif
+ SYSLOG ((LOG_INFO,
+ "change '%s' to '%s' in group '%s'",
+ user_name, user_newname,
+ ngrp->gr_name));
+ }
+ } else {
+ /* User was a member but is no more a
+ * member of this group.
+ */
+ ngrp->gr_mem = del_list (ngrp->gr_mem, user_name);
+ changed = true;
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "removing group member",
+ user_name, AUDIT_NO_ID, 1);
+#endif
+ SYSLOG ((LOG_INFO,
+ "delete '%s' from group '%s'",
+ user_name, ngrp->gr_name));
+ }
+ } else {
+ /* User was not a member but is now a member this
+ * group.
+ */
+ ngrp->gr_mem = add_list (ngrp->gr_mem, user_newname);
+ changed = true;
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "adding user to group",
+ user_name, AUDIT_NO_ID, 1);
+#endif
+ SYSLOG ((LOG_INFO, "add '%s' to group '%s'",
+ user_newname, ngrp->gr_name));
+ }
+ if (!changed) {
+ continue;
+ }
+
+ changed = false;
+ if (gr_update (ngrp) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, gr_dbname (), ngrp->gr_name);
+ SYSLOG ((LOG_WARN, "failed to prepare the new %s entry '%s'", gr_dbname (), ngrp->gr_name));
+ fail_exit (E_GRP_UPDATE);
+ }
+ }
+}
+
+#ifdef SHADOWGRP
+static void update_gshadow (void)
+{
+ bool is_member;
+ bool was_member;
+ bool was_admin;
+ bool changed;
+ const struct sgrp *sgrp;
+ struct sgrp *nsgrp;
+
+ changed = false;
+
+ /*
+ * Scan through the entire shadow group file looking for the groups
+ * that the user is a member of.
+ */
+ while ((sgrp = sgr_next ()) != NULL) {
+
+ /*
+ * See if the user was a member of this group
+ */
+ was_member = is_on_list (sgrp->sg_mem, user_name);
+
+ /*
+ * See if the user was an administrator of this group
+ */
+ was_admin = is_on_list (sgrp->sg_adm, user_name);
+
+ /*
+ * See if the user specified this group as one of their
+ * concurrent groups.
+ */
+ is_member = Gflg && ( (was_member && aflg)
+ || is_on_list (user_groups, sgrp->sg_name));
+
+ if (!was_member && !was_admin && !is_member) {
+ continue;
+ }
+
+ nsgrp = __sgr_dup (sgrp);
+ if (NULL == nsgrp) {
+ fprintf (stderr,
+ _("%s: Out of memory. Cannot update %s.\n"),
+ Prog, sgr_dbname ());
+ fail_exit (E_GRP_UPDATE);
+ }
+
+ if (was_admin && lflg) {
+ /* User was an admin of this group but the user
+ * has been renamed.
+ */
+ nsgrp->sg_adm = del_list (nsgrp->sg_adm, user_name);
+ nsgrp->sg_adm = add_list (nsgrp->sg_adm, user_newname);
+ changed = true;
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "changing admin name in shadow group",
+ user_name, AUDIT_NO_ID, 1);
+#endif
+ SYSLOG ((LOG_INFO,
+ "change admin '%s' to '%s' in shadow group '%s'",
+ user_name, user_newname, nsgrp->sg_name));
+ }
+
+ if (was_member) {
+ if ((!Gflg) || is_member) {
+ /* User was a member and is still a member
+ * of this group.
+ * But the user might have been renamed.
+ */
+ if (lflg) {
+ nsgrp->sg_mem = del_list (nsgrp->sg_mem,
+ user_name);
+ nsgrp->sg_mem = add_list (nsgrp->sg_mem,
+ user_newname);
+ changed = true;
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "changing member in shadow group",
+ user_name, AUDIT_NO_ID, 1);
+#endif
+ SYSLOG ((LOG_INFO,
+ "change '%s' to '%s' in shadow group '%s'",
+ user_name, user_newname,
+ nsgrp->sg_name));
+ }
+ } else {
+ /* User was a member but is no more a
+ * member of this group.
+ */
+ nsgrp->sg_mem = del_list (nsgrp->sg_mem, user_name);
+ changed = true;
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "removing user from shadow group",
+ user_name, AUDIT_NO_ID, 1);
+#endif
+ SYSLOG ((LOG_INFO,
+ "delete '%s' from shadow group '%s'",
+ user_name, nsgrp->sg_name));
+ }
+ } else if (is_member) {
+ /* User was not a member but is now a member this
+ * group.
+ */
+ nsgrp->sg_mem = add_list (nsgrp->sg_mem, user_newname);
+ changed = true;
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "adding user to shadow group",
+ user_newname, AUDIT_NO_ID, 1);
+#endif
+ SYSLOG ((LOG_INFO, "add '%s' to shadow group '%s'",
+ user_newname, nsgrp->sg_name));
+ }
+ if (!changed) {
+ continue;
+ }
+
+ changed = false;
+
+ /*
+ * Update the group entry to reflect the changes.
+ */
+ if (sgr_update (nsgrp) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, sgr_dbname (), nsgrp->sg_name);
+ SYSLOG ((LOG_WARN, "failed to prepare the new %s entry '%s'",
+ sgr_dbname (), nsgrp->sg_name));
+ fail_exit (E_GRP_UPDATE);
+ }
+ }
+}
+#endif /* SHADOWGRP */
+
+/*
+ * grp_update - add user to secondary group set
+ *
+ * grp_update() takes the secondary group set given in user_groups and
+ * adds the user to each group given by that set.
+ */
+static void grp_update (void)
+{
+ update_group ();
+#ifdef SHADOWGRP
+ if (is_shadow_grp) {
+ update_gshadow ();
+ }
+#endif
+}
+
+/*
+ * process_flags - perform command line argument setting
+ *
+ * process_flags() interprets the command line arguments and sets the
+ * values that the user will be created with accordingly. The values
+ * are checked for sanity.
+ */
+static void process_flags (int argc, char **argv)
+{
+ const struct group *grp;
+
+ bool anyflag = false;
+
+ {
+ /*
+ * Parse the command line options.
+ */
+ int c;
+ static struct option long_options[] = {
+ {"append", no_argument, NULL, 'a'},
+ {"badnames", no_argument, NULL, 'b'},
+ {"comment", required_argument, NULL, 'c'},
+ {"home", required_argument, NULL, 'd'},
+ {"expiredate", required_argument, NULL, 'e'},
+ {"inactive", required_argument, NULL, 'f'},
+ {"gid", required_argument, NULL, 'g'},
+ {"groups", required_argument, NULL, 'G'},
+ {"help", no_argument, NULL, 'h'},
+ {"login", required_argument, NULL, 'l'},
+ {"lock", no_argument, NULL, 'L'},
+ {"move-home", no_argument, NULL, 'm'},
+ {"non-unique", no_argument, NULL, 'o'},
+ {"password", required_argument, NULL, 'p'},
+ {"root", required_argument, NULL, 'R'},
+ {"prefix", required_argument, NULL, 'P'},
+ {"shell", required_argument, NULL, 's'},
+ {"uid", required_argument, NULL, 'u'},
+ {"unlock", no_argument, NULL, 'U'},
+#ifdef ENABLE_SUBIDS
+ {"add-subuids", required_argument, NULL, 'v'},
+ {"del-subuids", required_argument, NULL, 'V'},
+ {"add-subgids", required_argument, NULL, 'w'},
+ {"del-subgids", required_argument, NULL, 'W'},
+#endif /* ENABLE_SUBIDS */
+#ifdef WITH_SELINUX
+ {"selinux-user", required_argument, NULL, 'Z'},
+#endif /* WITH_SELINUX */
+ {NULL, 0, NULL, '\0'}
+ };
+ while ((c = getopt_long (argc, argv,
+ "abc:d:e:f:g:G:hl:Lmop:R:s:u:UP:"
+#ifdef ENABLE_SUBIDS
+ "v:w:V:W:"
+#endif /* ENABLE_SUBIDS */
+#ifdef WITH_SELINUX
+ "Z:"
+#endif /* WITH_SELINUX */
+ , long_options, NULL)) != -1) {
+ switch (c) {
+ case 'a':
+ aflg = true;
+ break;
+ case 'b':
+ allow_bad_names = true;
+ break;
+ case 'c':
+ if (!VALID (optarg)) {
+ fprintf (stderr,
+ _("%s: invalid field '%s'\n"),
+ Prog, optarg);
+ exit (E_BAD_ARG);
+ }
+ user_newcomment = optarg;
+ cflg = true;
+ break;
+ case 'd':
+ if (!VALID (optarg)) {
+ fprintf (stderr,
+ _("%s: invalid field '%s'\n"),
+ Prog, optarg);
+ exit (E_BAD_ARG);
+ }
+ dflg = true;
+ user_newhome = optarg;
+ break;
+ case 'e':
+ if ('\0' != *optarg) {
+ user_newexpire = strtoday (optarg);
+ if (user_newexpire < -1) {
+ fprintf (stderr,
+ _("%s: invalid date '%s'\n"),
+ Prog, optarg);
+ exit (E_BAD_ARG);
+ }
+ user_newexpire *= DAY / SCALE;
+ } else {
+ user_newexpire = -1;
+ }
+ eflg = true;
+ break;
+ case 'f':
+ if ( (getlong (optarg, &user_newinactive) == 0)
+ || (user_newinactive < -1)) {
+ fprintf (stderr,
+ _("%s: invalid numeric argument '%s'\n"),
+ Prog, optarg);
+ exit (E_BAD_ARG);
+ }
+ fflg = true;
+ break;
+ case 'g':
+ grp = getgr_nam_gid (optarg);
+ if (NULL == grp) {
+ fprintf (stderr,
+ _("%s: group '%s' does not exist\n"),
+ Prog, optarg);
+ exit (E_NOTFOUND);
+ }
+ user_newgid = grp->gr_gid;
+ gflg = true;
+ break;
+ case 'G':
+ if (get_groups (optarg) != 0) {
+ exit (E_NOTFOUND);
+ }
+ Gflg = true;
+ break;
+ case 'h':
+ usage (E_SUCCESS);
+ /*@notreached@*/break;
+ case 'l':
+ if (!is_valid_user_name (optarg)) {
+ fprintf (stderr,
+ _("%s: invalid user name '%s'\n"),
+ Prog, optarg);
+ exit (E_BAD_ARG);
+ }
+ lflg = true;
+ user_newname = optarg;
+ break;
+ case 'L':
+ Lflg = true;
+ break;
+ case 'm':
+ mflg = true;
+ break;
+ case 'o':
+ oflg = true;
+ break;
+ case 'p':
+ user_pass = optarg;
+ pflg = true;
+ break;
+ case 'R': /* no-op, handled in process_root_flag () */
+ break;
+ case 'P': /* no-op, handled in process_prefix_flag () */
+ break;
+ case 's':
+ if (!VALID (optarg)) {
+ fprintf (stderr,
+ _("%s: invalid field '%s'\n"),
+ Prog, optarg);
+ exit (E_BAD_ARG);
+ }
+ user_newshell = optarg;
+ sflg = true;
+ break;
+ case 'u':
+ if ( (get_uid (optarg, &user_newid) ==0)
+ || (user_newid == (uid_t)-1)) {
+ fprintf (stderr,
+ _("%s: invalid user ID '%s'\n"),
+ Prog, optarg);
+ exit (E_BAD_ARG);
+ }
+ uflg = true;
+ break;
+ case 'U':
+ Uflg = true;
+ break;
+#ifdef ENABLE_SUBIDS
+ case 'v':
+ if (prepend_range (optarg, &add_sub_uids) == 0) {
+ fprintf (stderr,
+ _("%s: invalid subordinate uid range '%s'\n"),
+ Prog, optarg);
+ exit(E_BAD_ARG);
+ }
+ vflg = true;
+ break;
+ case 'V':
+ if (prepend_range (optarg, &del_sub_uids) == 0) {
+ fprintf (stderr,
+ _("%s: invalid subordinate uid range '%s'\n"),
+ Prog, optarg);
+ exit(E_BAD_ARG);
+ }
+ Vflg = true;
+ break;
+ case 'w':
+ if (prepend_range (optarg, &add_sub_gids) == 0) {
+ fprintf (stderr,
+ _("%s: invalid subordinate gid range '%s'\n"),
+ Prog, optarg);
+ exit(E_BAD_ARG);
+ }
+ wflg = true;
+ break;
+ case 'W':
+ if (prepend_range (optarg, &del_sub_gids) == 0) {
+ fprintf (stderr,
+ _("%s: invalid subordinate gid range '%s'\n"),
+ Prog, optarg);
+ exit(E_BAD_ARG);
+ }
+ Wflg = true;
+ break;
+#endif /* ENABLE_SUBIDS */
+#ifdef WITH_SELINUX
+ case 'Z':
+ if (prefix[0]) {
+ fprintf (stderr,
+ _("%s: -Z cannot be used with --prefix\n"),
+ Prog);
+ exit (E_BAD_ARG);
+ }
+ if (is_selinux_enabled () > 0) {
+ user_selinux = optarg;
+ Zflg = true;
+ } else {
+ fprintf (stderr,
+ _("%s: -Z requires SELinux enabled kernel\n"),
+ Prog);
+ exit (E_BAD_ARG);
+ }
+ break;
+#endif /* WITH_SELINUX */
+ default:
+ usage (E_USAGE);
+ }
+ anyflag = true;
+ }
+ }
+
+ if (optind != argc - 1) {
+ usage (E_USAGE);
+ }
+
+ user_name = argv[argc - 1];
+
+ {
+ const struct passwd *pwd;
+ /* local, no need for xgetpwnam */
+ pwd = prefix_getpwnam (user_name);
+ if (NULL == pwd) {
+ fprintf (stderr,
+ _("%s: user '%s' does not exist\n"),
+ Prog, user_name);
+ exit (E_NOTFOUND);
+ }
+
+ user_id = pwd->pw_uid;
+ user_gid = pwd->pw_gid;
+ user_comment = xstrdup (pwd->pw_gecos);
+ user_home = xstrdup (pwd->pw_dir);
+ user_shell = xstrdup (pwd->pw_shell);
+ }
+
+ /* user_newname, user_newid, user_newgid can be used even when the
+ * options where not specified. */
+ if (!lflg) {
+ user_newname = user_name;
+ }
+ if (!uflg) {
+ user_newid = user_id;
+ }
+ if (!gflg) {
+ user_newgid = user_gid;
+ }
+ if(prefix[0]) {
+ size_t len = strlen(prefix) + strlen(user_home) + 2;
+ int wlen;
+ prefix_user_home = xmalloc(len);
+ wlen = snprintf(prefix_user_home, len, "%s/%s", prefix, user_home);
+ assert (wlen == (int) len -1);
+ if (user_newhome) {
+ len = strlen(prefix) + strlen(user_newhome) + 2;
+ prefix_user_newhome = xmalloc(len);
+ wlen = snprintf(prefix_user_newhome, len, "%s/%s", prefix, user_newhome);
+ assert (wlen == (int) len -1);
+ }
+
+ }
+ else {
+ prefix_user_home = user_home;
+ prefix_user_newhome = user_newhome;
+ }
+
+#ifdef USE_NIS
+ /*
+ * Now make sure it isn't an NIS user.
+ */
+ if (__ispwNIS ()) {
+ char *nis_domain;
+ char *nis_master;
+
+ fprintf (stderr,
+ _("%s: user %s is a NIS user\n"),
+ Prog, user_name);
+
+ if ( !yp_get_default_domain (&nis_domain)
+ && !yp_master (nis_domain, "passwd.byname", &nis_master)) {
+ fprintf (stderr,
+ _("%s: %s is the NIS master\n"),
+ Prog, nis_master);
+ }
+ exit (E_NOTFOUND);
+ }
+#endif
+
+ {
+ const struct spwd *spwd = NULL;
+ /* local, no need for xgetspnam */
+ if (is_shadow_pwd && ((spwd = prefix_getspnam (user_name)) != NULL)) {
+ user_expire = spwd->sp_expire;
+ user_inactive = spwd->sp_inact;
+ }
+ }
+
+ if (!anyflag) {
+ fprintf (stderr, _("%s: no options\n"), Prog);
+ usage (E_USAGE);
+ }
+
+ if (aflg && (!Gflg)) {
+ fprintf (stderr,
+ _("%s: %s flag is only allowed with the %s flag\n"),
+ Prog, "-a", "-G");
+ usage (E_USAGE);
+ }
+
+ if ((Lflg && (pflg || Uflg)) || (pflg && Uflg)) {
+ fprintf (stderr,
+ _("%s: the -L, -p, and -U flags are exclusive\n"),
+ Prog);
+ usage (E_USAGE);
+ }
+
+ if (oflg && !uflg) {
+ fprintf (stderr,
+ _("%s: %s flag is only allowed with the %s flag\n"),
+ Prog, "-o", "-u");
+ usage (E_USAGE);
+ }
+
+ if (mflg && !dflg) {
+ fprintf (stderr,
+ _("%s: %s flag is only allowed with the %s flag\n"),
+ Prog, "-m", "-d");
+ usage (E_USAGE);
+ }
+
+ if (user_newid == user_id) {
+ uflg = false;
+ oflg = false;
+ }
+ if (user_newgid == user_gid) {
+ gflg = false;
+ }
+ if ( (NULL != user_newshell)
+ && (strcmp (user_newshell, user_shell) == 0)) {
+ sflg = false;
+ }
+ if (strcmp (user_newname, user_name) == 0) {
+ lflg = false;
+ }
+ if (user_newinactive == user_inactive) {
+ fflg = false;
+ }
+ if (user_newexpire == user_expire) {
+ eflg = false;
+ }
+ if ( (NULL != user_newhome)
+ && (strcmp (user_newhome, user_home) == 0)) {
+ dflg = false;
+ mflg = false;
+ }
+ if ( (NULL != user_newcomment)
+ && (strcmp (user_newcomment, user_comment) == 0)) {
+ cflg = false;
+ }
+
+ if (!(Uflg || uflg || sflg || pflg || mflg || Lflg ||
+ lflg || Gflg || gflg || fflg || eflg || dflg || cflg
+#ifdef ENABLE_SUBIDS
+ || vflg || Vflg || wflg || Wflg
+#endif /* ENABLE_SUBIDS */
+#ifdef WITH_SELINUX
+ || Zflg
+#endif /* WITH_SELINUX */
+ )) {
+ fprintf (stdout, _("%s: no changes\n"), Prog);
+ exit (E_SUCCESS);
+ }
+
+ if (!is_shadow_pwd && (eflg || fflg)) {
+ fprintf (stderr,
+ _("%s: shadow passwords required for -e and -f\n"),
+ Prog);
+ exit (E_USAGE);
+ }
+
+ /* local, no need for xgetpwnam */
+ if (lflg && (prefix_getpwnam (user_newname) != NULL)) {
+ fprintf (stderr,
+ _("%s: user '%s' already exists\n"),
+ Prog, user_newname);
+ exit (E_NAME_IN_USE);
+ }
+
+ /* local, no need for xgetpwuid */
+ if (uflg && !oflg && (prefix_getpwuid (user_newid) != NULL)) {
+ fprintf (stderr,
+ _("%s: UID '%lu' already exists\n"),
+ Prog, (unsigned long) user_newid);
+ exit (E_UID_IN_USE);
+ }
+
+#ifdef ENABLE_SUBIDS
+ if ( (vflg || Vflg)
+ && !is_sub_uid) {
+ fprintf (stderr,
+ _("%s: %s does not exist, you cannot use the flags %s or %s\n"),
+ Prog, sub_uid_dbname (), "-v", "-V");
+ exit (E_USAGE);
+ }
+
+ if ( (wflg || Wflg)
+ && !is_sub_gid) {
+ fprintf (stderr,
+ _("%s: %s does not exist, you cannot use the flags %s or %s\n"),
+ Prog, sub_gid_dbname (), "-w", "-W");
+ exit (E_USAGE);
+ }
+#endif /* ENABLE_SUBIDS */
+}
+
+/*
+ * close_files - close all of the files that were opened
+ *
+ * close_files() closes all of the files that were opened for this new
+ * user. This causes any modified entries to be written out.
+ */
+static void close_files (void)
+{
+ if (pw_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", pw_dbname ()));
+ fail_exit (E_PW_UPDATE);
+ }
+ if (is_shadow_pwd && (spw_close () == 0)) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR,
+ "failure while writing changes to %s",
+ spw_dbname ()));
+ fail_exit (E_PW_UPDATE);
+ }
+
+ if (Gflg || lflg) {
+ if (gr_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR,
+ "failure while writing changes to %s",
+ gr_dbname ()));
+ fail_exit (E_GRP_UPDATE);
+ }
+#ifdef SHADOWGRP
+ if (is_shadow_grp) {
+ if (sgr_close () == 0) {
+ fprintf (stderr,
+ _("%s: failure while writing changes to %s\n"),
+ Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR,
+ "failure while writing changes to %s",
+ sgr_dbname ()));
+ fail_exit (E_GRP_UPDATE);
+ }
+ }
+#endif
+#ifdef SHADOWGRP
+ if (is_shadow_grp) {
+ if (sgr_unlock () == 0) {
+ fprintf (stderr,
+ _("%s: failed to unlock %s\n"),
+ Prog, sgr_dbname ());
+ SYSLOG ((LOG_ERR,
+ "failed to unlock %s",
+ sgr_dbname ()));
+ /* continue */
+ }
+ }
+#endif
+ if (gr_unlock () == 0) {
+ fprintf (stderr,
+ _("%s: failed to unlock %s\n"),
+ Prog, gr_dbname ());
+ SYSLOG ((LOG_ERR,
+ "failed to unlock %s",
+ gr_dbname ()));
+ /* continue */
+ }
+ }
+
+ if (is_shadow_pwd) {
+ if (spw_unlock () == 0) {
+ fprintf (stderr,
+ _("%s: failed to unlock %s\n"),
+ Prog, spw_dbname ());
+ SYSLOG ((LOG_ERR,
+ "failed to unlock %s",
+ spw_dbname ()));
+ /* continue */
+ }
+ }
+ if (pw_unlock () == 0) {
+ fprintf (stderr,
+ _("%s: failed to unlock %s\n"),
+ Prog, pw_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+ /* continue */
+ }
+
+ pw_locked = false;
+ spw_locked = false;
+ gr_locked = false;
+#ifdef SHADOWGRP
+ sgr_locked = false;
+#endif
+
+#ifdef ENABLE_SUBIDS
+ if (vflg || Vflg) {
+ if (sub_uid_close () == 0) {
+ fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, sub_uid_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", sub_uid_dbname ()));
+ fail_exit (E_SUB_UID_UPDATE);
+ }
+ if (sub_uid_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_uid_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sub_uid_dbname ()));
+ /* continue */
+ }
+ sub_uid_locked = false;
+ }
+ if (wflg || Wflg) {
+ if (sub_gid_close () == 0) {
+ fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, sub_gid_dbname ());
+ SYSLOG ((LOG_ERR, "failure while writing changes to %s", sub_gid_dbname ()));
+ fail_exit (E_SUB_GID_UPDATE);
+ }
+ if (sub_gid_unlock () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_gid_dbname ());
+ SYSLOG ((LOG_ERR, "failed to unlock %s", sub_gid_dbname ()));
+ /* continue */
+ }
+ sub_gid_locked = false;
+ }
+#endif /* ENABLE_SUBIDS */
+
+ /*
+ * Close the DBM and/or flat files
+ */
+ endpwent ();
+ endspent ();
+ endgrent ();
+#ifdef SHADOWGRP
+ endsgent ();
+#endif
+}
+
+/*
+ * open_files - lock and open the password files
+ *
+ * open_files() opens the two password files.
+ */
+static void open_files (void)
+{
+ if (pw_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, pw_dbname ());
+ fail_exit (E_PW_UPDATE);
+ }
+ pw_locked = true;
+ if (pw_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, pw_dbname ());
+ fail_exit (E_PW_UPDATE);
+ }
+ if (is_shadow_pwd && (spw_lock () == 0)) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, spw_dbname ());
+ fail_exit (E_PW_UPDATE);
+ }
+ spw_locked = true;
+ if (is_shadow_pwd && (spw_open (O_CREAT | O_RDWR) == 0)) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, spw_dbname ());
+ fail_exit (E_PW_UPDATE);
+ }
+
+ if (Gflg || lflg) {
+ /*
+ * Lock and open the group file. This will load all of the
+ * group entries.
+ */
+ if (gr_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, gr_dbname ());
+ fail_exit (E_GRP_UPDATE);
+ }
+ gr_locked = true;
+ if (gr_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, gr_dbname ());
+ fail_exit (E_GRP_UPDATE);
+ }
+#ifdef SHADOWGRP
+ if (is_shadow_grp && (sgr_lock () == 0)) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, sgr_dbname ());
+ fail_exit (E_GRP_UPDATE);
+ }
+ sgr_locked = true;
+ if (is_shadow_grp && (sgr_open (O_CREAT | O_RDWR) == 0)) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, sgr_dbname ());
+ fail_exit (E_GRP_UPDATE);
+ }
+#endif
+ }
+#ifdef ENABLE_SUBIDS
+ if (vflg || Vflg) {
+ if (sub_uid_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, sub_uid_dbname ());
+ fail_exit (E_SUB_UID_UPDATE);
+ }
+ sub_uid_locked = true;
+ if (sub_uid_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, sub_uid_dbname ());
+ fail_exit (E_SUB_UID_UPDATE);
+ }
+ }
+ if (wflg || Wflg) {
+ if (sub_gid_lock () == 0) {
+ fprintf (stderr,
+ _("%s: cannot lock %s; try again later.\n"),
+ Prog, sub_gid_dbname ());
+ fail_exit (E_SUB_GID_UPDATE);
+ }
+ sub_gid_locked = true;
+ if (sub_gid_open (O_CREAT | O_RDWR) == 0) {
+ fprintf (stderr,
+ _("%s: cannot open %s\n"),
+ Prog, sub_gid_dbname ());
+ fail_exit (E_SUB_GID_UPDATE);
+ }
+ }
+#endif /* ENABLE_SUBIDS */
+}
+
+/*
+ * usr_update - create the user entries
+ *
+ * usr_update() creates the password file entries for this user and
+ * will update the group entries if required.
+ */
+static void usr_update (void)
+{
+ struct passwd pwent;
+ const struct passwd *pwd;
+
+ struct spwd spent;
+ const struct spwd *spwd = NULL;
+
+ /*
+ * Locate the entry in /etc/passwd, which MUST exist.
+ */
+ pwd = pw_locate (user_name);
+ if (NULL == pwd) {
+ fprintf (stderr,
+ _("%s: user '%s' does not exist in %s\n"),
+ Prog, user_name, pw_dbname ());
+ fail_exit (E_NOTFOUND);
+ }
+ pwent = *pwd;
+ new_pwent (&pwent);
+
+
+ /* If the shadow file does not exist, it won't be created */
+ if (is_shadow_pwd) {
+ spwd = spw_locate (user_name);
+ if (NULL != spwd) {
+ /* Update the shadow entry if it exists */
+ spent = *spwd;
+ new_spent (&spent);
+ } else if ( ( pflg
+ && (strcmp (pwent.pw_passwd, SHADOW_PASSWD_STRING) == 0))
+ || eflg || fflg) {
+ /* In some cases, we force the creation of a
+ * shadow entry:
+ * + new password requested and passwd indicates
+ * a shadowed password
+ * + aging information is requested
+ */
+ memset (&spent, 0, sizeof spent);
+ spent.sp_namp = user_name;
+
+ /* The user explicitly asked for a shadow feature.
+ * Enable shadowed passwords for this new account.
+ */
+ spent.sp_pwdp = xstrdup (pwent.pw_passwd);
+ pwent.pw_passwd = xstrdup (SHADOW_PASSWD_STRING);
+
+ spent.sp_lstchg = (long) gettime () / SCALE;
+ if (0 == spent.sp_lstchg) {
+ /* Better disable aging than
+ * requiring a password change */
+ spent.sp_lstchg = -1;
+ }
+ spent.sp_min = getdef_num ("PASS_MIN_DAYS", -1);
+ spent.sp_max = getdef_num ("PASS_MAX_DAYS", -1);
+ spent.sp_warn = getdef_num ("PASS_WARN_AGE", -1);
+ spent.sp_inact = -1;
+ spent.sp_expire = -1;
+ spent.sp_flag = SHADOW_SP_FLAG_UNSET;
+ new_spent (&spent);
+ spwd = &spent; /* entry needs to be committed */
+ }
+ }
+
+ if (lflg || uflg || gflg || cflg || dflg || sflg || pflg
+ || Lflg || Uflg) {
+ if (pw_update (&pwent) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, pw_dbname (), pwent.pw_name);
+ fail_exit (E_PW_UPDATE);
+ }
+ if (lflg && (pw_remove (user_name) == 0)) {
+ fprintf (stderr,
+ _("%s: cannot remove entry '%s' from %s\n"),
+ Prog, user_name, pw_dbname ());
+ fail_exit (E_PW_UPDATE);
+ }
+ }
+ if ((NULL != spwd) && (lflg || eflg || fflg || pflg || Lflg || Uflg)) {
+ if (spw_update (&spent) == 0) {
+ fprintf (stderr,
+ _("%s: failed to prepare the new %s entry '%s'\n"),
+ Prog, spw_dbname (), spent.sp_namp);
+ fail_exit (E_PW_UPDATE);
+ }
+ if (lflg && (spw_remove (user_name) == 0)) {
+ fprintf (stderr,
+ _("%s: cannot remove entry '%s' from %s\n"),
+ Prog, user_name, spw_dbname ());
+ fail_exit (E_PW_UPDATE);
+ }
+ }
+}
+
+/*
+ * move_home - move the user's home directory
+ *
+ * move_home() moves the user's home directory to a new location. The
+ * files will be copied if the directory cannot simply be renamed.
+ */
+static void move_home (void)
+{
+ struct stat sb;
+
+ if (access (prefix_user_newhome, F_OK) == 0) {
+ /*
+ * If the new home directory already exist, the user
+ * should not use -m.
+ */
+ fprintf (stderr,
+ _("%s: directory %s exists\n"),
+ Prog, user_newhome);
+ fail_exit (E_HOMEDIR);
+ }
+
+ if (stat (prefix_user_home, &sb) == 0) {
+ /*
+ * Don't try to move it if it is not a directory
+ * (but /dev/null for example). --marekm
+ */
+ if (!S_ISDIR (sb.st_mode)) {
+ fprintf (stderr,
+ _("%s: The previous home directory (%s) was "
+ "not a directory. It is not removed and no "
+ "home directories are created.\n"),
+ Prog, user_home);
+ fail_exit (E_HOMEDIR);
+ }
+
+#ifdef WITH_AUDIT
+ if (uflg || gflg) {
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "changing home directory owner",
+ user_newname, (unsigned int) user_newid, 1);
+ }
+#endif
+
+ if (rename (prefix_user_home, prefix_user_newhome) == 0) {
+ /* FIXME: rename above may have broken symlinks
+ * pointing to the user's home directory
+ * with an absolute path. */
+ if (chown_tree (prefix_user_newhome,
+ user_id, uflg ? user_newid : (uid_t)-1,
+ user_gid, gflg ? user_newgid : (gid_t)-1) != 0) {
+ fprintf (stderr,
+ _("%s: Failed to change ownership of the home directory"),
+ Prog);
+ fail_exit (E_HOMEDIR);
+ }
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "moving home directory",
+ user_newname, (unsigned int) user_newid,
+ 1);
+#endif
+ return;
+ } else {
+ if (EXDEV == errno) {
+#ifdef WITH_BTRFS
+ if (btrfs_is_subvolume (prefix_user_home) > 0) {
+ fprintf (stderr,
+ _("%s: error: cannot move subvolume from %s to %s - different device\n"),
+ Prog, prefix_user_home, prefix_user_newhome);
+ fail_exit (E_HOMEDIR);
+ }
+#endif
+
+ if (copy_tree (prefix_user_home, prefix_user_newhome, true,
+ true,
+ user_id,
+ uflg ? user_newid : (uid_t)-1,
+ user_gid,
+ gflg ? user_newgid : (gid_t)-1) == 0) {
+ if (remove_tree (prefix_user_home, true) != 0) {
+ fprintf (stderr,
+ _("%s: warning: failed to completely remove old home directory %s"),
+ Prog, prefix_user_home);
+ }
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK,
+ Prog,
+ "moving home directory",
+ user_newname,
+ (unsigned int) user_newid,
+ 1);
+#endif
+ return;
+ }
+
+ (void) remove_tree (prefix_user_newhome, true);
+ }
+ fprintf (stderr,
+ _("%s: cannot rename directory %s to %s\n"),
+ Prog, prefix_user_home, prefix_user_newhome);
+ fail_exit (E_HOMEDIR);
+ }
+ }
+}
+
+/*
+ * update_lastlog - update the lastlog file
+ *
+ * Relocate the "lastlog" entries for the user. The old entry is
+ * left alone in case the UID was shared. It doesn't hurt anything
+ * to just leave it be.
+ */
+static void update_lastlog (void)
+{
+ struct lastlog ll;
+ int fd;
+ off_t off_uid = (off_t) user_id * sizeof ll;
+ off_t off_newuid = (off_t) user_newid * sizeof ll;
+ uid_t max_uid;
+
+ if (access (LASTLOG_FILE, F_OK) != 0) {
+ return;
+ }
+
+ max_uid = (uid_t) getdef_ulong ("LASTLOG_UID_MAX", 0xFFFFFFFFUL);
+ if (user_newid > max_uid) {
+ /* do not touch lastlog for large uids */
+ return;
+ }
+
+ fd = open (LASTLOG_FILE, O_RDWR);
+
+ if (-1 == fd) {
+ fprintf (stderr,
+ _("%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"),
+ Prog, (unsigned long) user_id, (unsigned long) user_newid, strerror (errno));
+ return;
+ }
+
+ if ( (lseek (fd, off_uid, SEEK_SET) == off_uid)
+ && (read (fd, &ll, sizeof ll) == (ssize_t) sizeof ll)) {
+ /* Copy the old entry to its new location */
+ if ( (lseek (fd, off_newuid, SEEK_SET) != off_newuid)
+ || (write (fd, &ll, sizeof ll) != (ssize_t) sizeof ll)
+ || (fsync (fd) != 0)
+ || (close (fd) != 0)) {
+ fprintf (stderr,
+ _("%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"),
+ Prog, (unsigned long) user_id, (unsigned long) user_newid, strerror (errno));
+ }
+ } else {
+ /* Assume lseek or read failed because there is
+ * no entry for the old UID */
+
+ /* Check if the new UID already has an entry */
+ if ( (lseek (fd, off_newuid, SEEK_SET) == off_newuid)
+ && (read (fd, &ll, sizeof ll) == (ssize_t) sizeof ll)) {
+ /* Reset the new uid's lastlog entry */
+ memzero (&ll, sizeof (ll));
+ if ( (lseek (fd, off_newuid, SEEK_SET) != off_newuid)
+ || (write (fd, &ll, sizeof ll) != (ssize_t) sizeof ll)
+ || (fsync (fd) != 0)
+ || (close (fd) != 0)) {
+ fprintf (stderr,
+ _("%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"),
+ Prog, (unsigned long) user_id, (unsigned long) user_newid, strerror (errno));
+ }
+ } else {
+ (void) close (fd);
+ }
+ }
+}
+
+/*
+ * update_faillog - update the faillog file
+ *
+ * Relocate the "faillog" entries for the user. The old entry is
+ * left alone in case the UID was shared. It doesn't hurt anything
+ * to just leave it be.
+ */
+static void update_faillog (void)
+{
+ struct faillog fl;
+ int fd;
+ off_t off_uid = (off_t) user_id * sizeof fl;
+ off_t off_newuid = (off_t) user_newid * sizeof fl;
+
+ if (access (FAILLOG_FILE, F_OK) != 0) {
+ return;
+ }
+
+ fd = open (FAILLOG_FILE, O_RDWR);
+
+ if (-1 == fd) {
+ fprintf (stderr,
+ _("%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"),
+ Prog, (unsigned long) user_id, (unsigned long) user_newid, strerror (errno));
+ return;
+ }
+
+ if ( (lseek (fd, off_uid, SEEK_SET) == off_uid)
+ && (read (fd, (char *) &fl, sizeof fl) == (ssize_t) sizeof fl)) {
+ /* Copy the old entry to its new location */
+ if ( (lseek (fd, off_newuid, SEEK_SET) != off_newuid)
+ || (write (fd, &fl, sizeof fl) != (ssize_t) sizeof fl)
+ || (fsync (fd) != 0)
+ || (close (fd) != 0)) {
+ fprintf (stderr,
+ _("%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"),
+ Prog, (unsigned long) user_id, (unsigned long) user_newid, strerror (errno));
+ }
+ } else {
+ /* Assume lseek or read failed because there is
+ * no entry for the old UID */
+
+ /* Check if the new UID already has an entry */
+ if ( (lseek (fd, off_newuid, SEEK_SET) == off_newuid)
+ && (read (fd, &fl, sizeof fl) == (ssize_t) sizeof fl)) {
+ /* Reset the new uid's faillog entry */
+ memzero (&fl, sizeof (fl));
+ if ( (lseek (fd, off_newuid, SEEK_SET) != off_newuid)
+ || (write (fd, &fl, sizeof fl) != (ssize_t) sizeof fl)
+ || (close (fd) != 0)) {
+ fprintf (stderr,
+ _("%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"),
+ Prog, (unsigned long) user_id, (unsigned long) user_newid, strerror (errno));
+ }
+ } else {
+ (void) close (fd);
+ }
+ }
+}
+
+#ifndef NO_MOVE_MAILBOX
+/*
+ * This is the new and improved code to carefully chown/rename the user's
+ * mailbox. Maybe I am too paranoid but the mail spool dir sometimes
+ * happens to be mode 1777 (this makes mail user agents work without
+ * being setgid mail, but is NOT recommended; they all should be fixed
+ * to use movemail). --marekm
+ */
+static void move_mailbox (void)
+{
+ const char *maildir;
+ char* mailfile;
+ char* newmailfile;
+ int fd;
+ struct stat st;
+ size_t len;
+
+ maildir = getdef_str ("MAIL_DIR");
+#ifdef MAIL_SPOOL_DIR
+ if ((NULL == maildir) && (getdef_str ("MAIL_FILE") == NULL)) {
+ maildir = MAIL_SPOOL_DIR;
+ }
+#endif
+ if (NULL == maildir) {
+ return;
+ }
+ len = strlen (prefix) + strlen (maildir) + strlen (user_name) + 2;
+ mailfile = alloca (len);
+
+ /*
+ * O_NONBLOCK is to make sure open won't hang on mandatory locks.
+ * We do fstat/fchown to make sure there are no races (someone
+ * replacing /var/spool/mail/luser with a hard link to /etc/passwd
+ * between stat and chown). --marekm
+ */
+ if (prefix[0]) {
+ (void) snprintf (mailfile, len, "%s/%s/%s",
+ prefix, maildir, user_name);
+ }
+ else {
+ (void) snprintf (mailfile, len, "%s/%s",
+ maildir, user_name);
+ }
+ mailfile[len-1] = '\0';
+
+ fd = open (mailfile, O_RDONLY | O_NONBLOCK, 0);
+ if (fd < 0) {
+ /* no need for warnings if the mailbox doesn't exist */
+ if (errno != ENOENT) {
+ perror (mailfile);
+ }
+ return;
+ }
+ if (fstat (fd, &st) < 0) {
+ perror ("fstat");
+ (void) close (fd);
+ return;
+ }
+ if (st.st_uid != user_id) {
+ /* better leave it alone */
+ fprintf (stderr, _("%s: warning: %s not owned by %s\n"),
+ Prog, mailfile, user_name);
+ (void) close (fd);
+ return;
+ }
+ if (uflg) {
+ if (fchown (fd, user_newid, (gid_t) -1) < 0) {
+ perror (_("failed to change mailbox owner"));
+ }
+#ifdef WITH_AUDIT
+ else {
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "changing mail file owner",
+ user_newname, (unsigned int) user_newid, 1);
+ }
+#endif
+ }
+
+ (void) close (fd);
+
+ if (lflg) {
+ len = strlen (prefix) + strlen (maildir) + strlen (user_newname) + 2;
+ newmailfile = alloca(len);
+ if (prefix[0]) {
+ (void) snprintf (newmailfile, len, "%s/%s/%s",
+ prefix, maildir, user_newname);
+ }
+ else {
+ (void) snprintf (newmailfile, len, "%s/%s",
+ maildir, user_newname);
+ }
+ newmailfile[len - 1] = '\0';
+ if ( (link (mailfile, newmailfile) != 0)
+ || (unlink (mailfile) != 0)) {
+ perror (_("failed to rename mailbox"));
+ }
+#ifdef WITH_AUDIT
+ else {
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "changing mail file name",
+ user_newname, (unsigned int) user_newid, 1);
+ }
+#endif
+ }
+}
+#endif
+
+/*
+ * main - usermod command
+ */
+int main (int argc, char **argv)
+{
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+ pam_handle_t *pamh = NULL;
+ int retval;
+#endif /* USE_PAM */
+#endif /* ACCT_TOOLS_SETUID */
+
+ /*
+ * Get my name so that I can use it to report errors.
+ */
+ Prog = Basename (argv[0]);
+
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ process_root_flag ("-R", argc, argv);
+ prefix = process_prefix_flag ("-P", argc, argv);
+
+ OPENLOG ("usermod");
+#ifdef WITH_AUDIT
+ audit_help_open ();
+#endif
+
+ sys_ngroups = sysconf (_SC_NGROUPS_MAX);
+ user_groups = (char **) malloc (sizeof (char *) * (1 + sys_ngroups));
+ user_groups[0] = (char *) 0;
+
+ is_shadow_pwd = spw_file_present ();
+#ifdef SHADOWGRP
+ is_shadow_grp = sgr_file_present ();
+#endif
+#ifdef ENABLE_SUBIDS
+ is_sub_uid = sub_uid_file_present ();
+ is_sub_gid = sub_gid_file_present ();
+#endif /* ENABLE_SUBIDS */
+
+ process_flags (argc, argv);
+
+ /*
+ * The home directory, the username and the user's UID should not
+ * be changed while the user is logged in.
+ * Note: no need to check if a prefix is specified...
+ */
+ if ( (prefix[0] == '\0') && (uflg || lflg || dflg
+#ifdef ENABLE_SUBIDS
+ || Vflg || Wflg
+#endif /* ENABLE_SUBIDS */
+ )
+ && (user_busy (user_name, user_id) != 0)) {
+ exit (E_USER_BUSY);
+ }
+
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+ {
+ struct passwd *pampw;
+ pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
+ if (pampw == NULL) {
+ fprintf (stderr,
+ _("%s: Cannot determine your user name.\n"),
+ Prog);
+ exit (1);
+ }
+
+ retval = pam_start ("usermod", pampw->pw_name, &conv, &pamh);
+ }
+
+ if (PAM_SUCCESS == retval) {
+ retval = pam_authenticate (pamh, 0);
+ }
+
+ if (PAM_SUCCESS == retval) {
+ retval = pam_acct_mgmt (pamh, 0);
+ }
+
+ if (PAM_SUCCESS != retval) {
+ fprintf (stderr, _("%s: PAM: %s\n"),
+ Prog, pam_strerror (pamh, retval));
+ SYSLOG((LOG_ERR, "%s", pam_strerror (pamh, retval)));
+ if (NULL != pamh) {
+ (void) pam_end (pamh, retval);
+ }
+ exit (1);
+ }
+ (void) pam_end (pamh, retval);
+#endif /* USE_PAM */
+#endif /* ACCT_TOOLS_SETUID */
+
+#ifdef WITH_TCB
+ if (shadowtcb_set_user (user_name) == SHADOWTCB_FAILURE) {
+ exit (E_PW_UPDATE);
+ }
+#endif
+
+ /*
+ * Do the hard stuff - open the files, change the user entries,
+ * change the home directory, then close and update the files.
+ */
+ open_files ();
+ if ( cflg || dflg || eflg || fflg || gflg || Lflg || lflg || pflg
+ || sflg || uflg || Uflg) {
+ usr_update ();
+ }
+ if (Gflg || lflg) {
+ grp_update ();
+ }
+#ifdef ENABLE_SUBIDS
+ if (Vflg) {
+ struct ulong_range_list_entry *ptr;
+ for (ptr = del_sub_uids; ptr != NULL; ptr = ptr->next) {
+ unsigned long count = ptr->range.last - ptr->range.first + 1;
+ if (sub_uid_remove(user_name, ptr->range.first, count) == 0) {
+ fprintf (stderr,
+ _("%s: failed to remove uid range %lu-%lu from '%s'\n"),
+ Prog, ptr->range.first, ptr->range.last,
+ sub_uid_dbname ());
+ fail_exit (E_SUB_UID_UPDATE);
+ }
+ }
+ }
+ if (vflg) {
+ struct ulong_range_list_entry *ptr;
+ for (ptr = add_sub_uids; ptr != NULL; ptr = ptr->next) {
+ unsigned long count = ptr->range.last - ptr->range.first + 1;
+ if (sub_uid_add(user_name, ptr->range.first, count) == 0) {
+ fprintf (stderr,
+ _("%s: failed to add uid range %lu-%lu to '%s'\n"),
+ Prog, ptr->range.first, ptr->range.last,
+ sub_uid_dbname ());
+ fail_exit (E_SUB_UID_UPDATE);
+ }
+ }
+ }
+ if (Wflg) {
+ struct ulong_range_list_entry *ptr;
+ for (ptr = del_sub_gids; ptr != NULL; ptr = ptr->next) {
+ unsigned long count = ptr->range.last - ptr->range.first + 1;
+ if (sub_gid_remove(user_name, ptr->range.first, count) == 0) {
+ fprintf (stderr,
+ _("%s: failed to remove gid range %lu-%lu from '%s'\n"),
+ Prog, ptr->range.first, ptr->range.last,
+ sub_gid_dbname ());
+ fail_exit (E_SUB_GID_UPDATE);
+ }
+ }
+ }
+ if (wflg) {
+ struct ulong_range_list_entry *ptr;
+ for (ptr = add_sub_gids; ptr != NULL; ptr = ptr->next) {
+ unsigned long count = ptr->range.last - ptr->range.first + 1;
+ if (sub_gid_add(user_name, ptr->range.first, count) == 0) {
+ fprintf (stderr,
+ _("%s: failed to add gid range %lu-%lu to '%s'\n"),
+ Prog, ptr->range.first, ptr->range.last,
+ sub_gid_dbname ());
+ fail_exit (E_SUB_GID_UPDATE);
+ }
+ }
+ }
+#endif /* ENABLE_SUBIDS */
+ close_files ();
+
+#ifdef WITH_TCB
+ if ( (lflg || uflg)
+ && (shadowtcb_move (user_newname, user_newid) == SHADOWTCB_FAILURE) ) {
+ exit (E_PW_UPDATE);
+ }
+#endif
+
+ nscd_flush_cache ("passwd");
+ nscd_flush_cache ("group");
+ sssd_flush_cache (SSSD_DB_PASSWD | SSSD_DB_GROUP);
+
+#ifdef WITH_SELINUX
+ if (Zflg) {
+ if ('\0' != *user_selinux) {
+ if (set_seuser (user_name, user_selinux) != 0) {
+ fprintf (stderr,
+ _("%s: warning: the user name %s to %s SELinux user mapping failed.\n"),
+ Prog, user_name, user_selinux);
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "modifying User mapping ",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_FAILURE);
+#endif /* WITH_AUDIT */
+ fail_exit (E_SE_UPDATE);
+ }
+ } else {
+ if (del_seuser (user_name) != 0) {
+ fprintf (stderr,
+ _("%s: warning: the user name %s to SELinux user mapping removal failed.\n"),
+ Prog, user_name);
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_ADD_USER, Prog,
+ "removing SELinux user mapping",
+ user_name, (unsigned int) user_id,
+ SHADOW_AUDIT_FAILURE);
+#endif /* WITH_AUDIT */
+ fail_exit (E_SE_UPDATE);
+ }
+ }
+ }
+#endif /* WITH_SELINUX */
+
+ if (mflg) {
+ move_home ();
+ }
+
+#ifndef NO_MOVE_MAILBOX
+ if (lflg || uflg) {
+ move_mailbox ();
+ }
+#endif /* NO_MOVE_MAILBOX */
+
+ if (uflg) {
+ update_lastlog ();
+ update_faillog ();
+ }
+
+ if (!mflg && (uflg || gflg)) {
+ struct stat sb;
+
+ if (stat (dflg ? prefix_user_newhome : prefix_user_home, &sb) == 0 &&
+ ((uflg && sb.st_uid == user_newid) || sb.st_uid == user_id)) {
+ /*
+ * Change the UID on all of the files owned by
+ * `user_id' to `user_newid' in the user's home
+ * directory.
+ *
+ * move_home() already takes care of changing the
+ * ownership.
+ *
+ */
+#ifdef WITH_AUDIT
+ if (uflg || gflg) {
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "changing home directory owner",
+ user_newname, (unsigned int) user_newid, 1);
+ }
+#endif
+ if (chown_tree (dflg ? prefix_user_newhome : prefix_user_home,
+ user_id,
+ uflg ? user_newid : (uid_t)-1,
+ user_gid,
+ gflg ? user_newgid : (gid_t)-1) != 0) {
+ fprintf (stderr,
+ _("%s: Failed to change ownership of the home directory"),
+ Prog);
+ fail_exit (E_HOMEDIR);
+ }
+ }
+ }
+
+ return E_SUCCESS;
+}
+
diff --git a/src/vipw.c b/src/vipw.c
new file mode 100644
index 0000000..04f0b23
--- /dev/null
+++ b/src/vipw.c
@@ -0,0 +1,607 @@
+/*
+ vipw, vigr edit the password or group file
+ with -s will edit shadow or gshadow file
+
+ Copyright (c) 1997 , Guy Maor <maor@ece.utexas.edu>
+ Copyright (c) 1999 - 2000, Marek Michałkiewicz
+ Copyright (c) 2002 - 2006, Tomasz Kłoczko
+ Copyright (c) 2007 - 2013, Nicolas François
+ All rights reserved.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include <errno.h>
+#include <getopt.h>
+#ifdef WITH_SELINUX
+#include <selinux/selinux.h>
+#endif /* WITH_SELINUX */
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <utime.h>
+#include "defines.h"
+#include "groupio.h"
+#include "nscd.h"
+#include "sssd.h"
+#include "prototypes.h"
+#include "pwio.h"
+#include "sgroupio.h"
+#include "shadowio.h"
+/*@-exitarg@*/
+#include "exitcodes.h"
+#ifdef WITH_TCB
+#include <tcb.h>
+#include "tcbfuncs.h"
+#endif /* WITH_TCB */
+
+#define MSG_WARN_EDIT_OTHER_FILE _( \
+ "You have modified %s.\n"\
+ "You may need to modify %s for consistency.\n"\
+ "Please use the command '%s' to do so.\n")
+
+/*
+ * Global variables
+ */
+const char *Prog;
+
+static const char *filename, *fileeditname;
+static bool filelocked = false;
+static bool createedit = false;
+static int (*unlock) (void);
+static bool quiet = false;
+#ifdef WITH_TCB
+static const char *user = NULL;
+static bool tcb_mode = false;
+#define SHADOWTCB_SCRATCHDIR ":tmp"
+#endif /* WITH_TCB */
+
+/* local function prototypes */
+static void usage (int status);
+static int create_backup_file (FILE *, const char *, struct stat *);
+static void vipwexit (const char *msg, int syserr, int ret);
+static void vipwedit (const char *, int (*)(void), int (*)(void));
+
+/*
+ * usage - display usage message and exit
+ */
+static void usage (int status)
+{
+ FILE *usageout = (E_SUCCESS != status) ? stderr : stdout;
+ (void) fprintf (stderr,
+ _("Usage: %s [options]\n"
+ "\n"
+ "Options:\n"),
+ Prog);
+ (void) fputs (_(" -g, --group edit group database\n"), usageout);
+ (void) fputs (_(" -h, --help display this help message and exit\n"), usageout);
+ (void) fputs (_(" -p, --passwd edit passwd database\n"), usageout);
+ (void) fputs (_(" -q, --quiet quiet mode\n"), usageout);
+ (void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
+ (void) fputs (_(" -s, --shadow edit shadow or gshadow database\n"), usageout);
+#ifdef WITH_TCB
+ (void) fputs (_(" -u, --user which user's tcb shadow file to edit\n"), usageout);
+#endif /* WITH_TCB */
+ (void) fputs (_("\n"), usageout);
+ exit (status);
+}
+
+/*
+ *
+ */
+static int create_backup_file (FILE * fp, const char *backup, struct stat *sb)
+{
+ struct utimbuf ub;
+ FILE *bkfp;
+ int c;
+ mode_t mask;
+
+ mask = umask (077);
+ bkfp = fopen (backup, "w");
+ (void) umask (mask);
+ if (NULL == bkfp) {
+ return -1;
+ }
+
+ c = 0;
+ if (fseeko (fp, 0, SEEK_SET) == 0)
+ while ((c = getc (fp)) != EOF) {
+ if (putc (c, bkfp) == EOF) {
+ break;
+ }
+ }
+ if ((EOF != c) || (ferror (fp) != 0) || (fflush (bkfp) != 0)) {
+ fclose (bkfp);
+ unlink (backup);
+ return -1;
+ }
+ if (fsync (fileno (bkfp)) != 0) {
+ (void) fclose (bkfp);
+ unlink (backup);
+ return -1;
+ }
+ if (fclose (bkfp) != 0) {
+ unlink (backup);
+ return -1;
+ }
+
+ ub.actime = sb->st_atime;
+ ub.modtime = sb->st_mtime;
+ if ( (utime (backup, &ub) != 0)
+ || (chmod (backup, sb->st_mode) != 0)
+ || (chown (backup, sb->st_uid, sb->st_gid) != 0)) {
+ unlink (backup);
+ return -1;
+ }
+ return 0;
+}
+
+/*
+ *
+ */
+static void vipwexit (const char *msg, int syserr, int ret)
+{
+ int err = errno;
+
+ if (createedit) {
+ if (unlink (fileeditname) != 0) {
+ fprintf (stderr, _("%s: failed to remove %s\n"), Prog, fileeditname);
+ /* continue */
+ }
+ }
+ if (filelocked) {
+ if ((*unlock) () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, fileeditname);
+ SYSLOG ((LOG_ERR, "failed to unlock %s", fileeditname));
+ /* continue */
+ }
+ }
+ if (NULL != msg) {
+ fprintf (stderr, "%s: %s", Prog, msg);
+ }
+ if (0 != syserr) {
+ fprintf (stderr, ": %s", strerror (err));
+ }
+ if ( (NULL != msg)
+ || (0 != syserr)) {
+ (void) fputs ("\n", stderr);
+ }
+ if (!quiet) {
+ fprintf (stdout, _("%s: %s is unchanged\n"), Prog,
+ filename);
+ }
+ exit (ret);
+}
+
+#ifndef DEFAULT_EDITOR
+#define DEFAULT_EDITOR "vi"
+#endif
+
+/*
+ *
+ */
+static void
+vipwedit (const char *file, int (*file_lock) (void), int (*file_unlock) (void))
+{
+ const char *editor;
+ pid_t pid;
+ struct stat st1, st2;
+ int status;
+ FILE *f;
+ pid_t orig_pgrp, editor_pgrp = -1;
+ sigset_t mask, omask;
+ /* FIXME: the following should have variable sizes */
+ char filebackup[1024], fileedit[1024];
+ char *to_rename;
+
+ snprintf (filebackup, sizeof filebackup, "%s-", file);
+#ifdef WITH_TCB
+ if (tcb_mode) {
+ if ( (mkdir (TCB_DIR "/" SHADOWTCB_SCRATCHDIR, 0700) != 0)
+ && (errno != EEXIST)) {
+ vipwexit (_("failed to create scratch directory"), errno, 1);
+ }
+ if (shadowtcb_drop_priv () == SHADOWTCB_FAILURE) {
+ vipwexit (_("failed to drop privileges"), errno, 1);
+ }
+ snprintf (fileedit, sizeof fileedit,
+ TCB_DIR "/" SHADOWTCB_SCRATCHDIR "/.vipw.shadow.%s",
+ user);
+ } else {
+#endif /* WITH_TCB */
+ snprintf (fileedit, sizeof fileedit, "%s.edit", file);
+#ifdef WITH_TCB
+ }
+#endif /* WITH_TCB */
+ unlock = file_unlock;
+ filename = file;
+ fileeditname = fileedit;
+
+ if (access (file, F_OK) != 0) {
+ vipwexit (file, 1, 1);
+ }
+#ifdef WITH_SELINUX
+ /* if SE Linux is enabled then set the context of all new files
+ to be the context of the file we are editing */
+ if (is_selinux_enabled () != 0) {
+ security_context_t passwd_context=NULL;
+ int ret = 0;
+ if (getfilecon (file, &passwd_context) < 0) {
+ vipwexit (_("Couldn't get file context"), errno, 1);
+ }
+ ret = setfscreatecon (passwd_context);
+ freecon (passwd_context);
+ if (0 != ret) {
+ vipwexit (_("setfscreatecon () failed"), errno, 1);
+ }
+ }
+#endif /* WITH_SELINUX */
+#ifdef WITH_TCB
+ if (tcb_mode && (shadowtcb_gain_priv () == SHADOWTCB_FAILURE)) {
+ vipwexit (_("failed to gain privileges"), errno, 1);
+ }
+#endif /* WITH_TCB */
+ if (file_lock () == 0) {
+ vipwexit (_("Couldn't lock file"), errno, 5);
+ }
+ filelocked = true;
+#ifdef WITH_TCB
+ if (tcb_mode && (shadowtcb_drop_priv () == SHADOWTCB_FAILURE)) {
+ vipwexit (_("failed to drop privileges"), errno, 1);
+ }
+#endif /* WITH_TCB */
+
+ /* edited copy has same owners, perm */
+ if (stat (file, &st1) != 0) {
+ vipwexit (file, 1, 1);
+ }
+ f = fopen (file, "r");
+ if (NULL == f) {
+ vipwexit (file, 1, 1);
+ }
+#ifdef WITH_TCB
+ if (tcb_mode && (shadowtcb_gain_priv () == SHADOWTCB_FAILURE))
+ vipwexit (_("failed to gain privileges"), errno, 1);
+#endif /* WITH_TCB */
+ if (create_backup_file (f, fileedit, &st1) != 0) {
+ vipwexit (_("Couldn't make backup"), errno, 1);
+ }
+ (void) fclose (f);
+ createedit = true;
+
+ editor = getenv ("VISUAL");
+ if (NULL == editor) {
+ editor = getenv ("EDITOR");
+ }
+ if (NULL == editor) {
+ editor = DEFAULT_EDITOR;
+ }
+
+ orig_pgrp = tcgetpgrp(STDIN_FILENO);
+
+ pid = fork ();
+ if (-1 == pid) {
+ vipwexit ("fork", 1, 1);
+ } else if (0 == pid) {
+ /* use the system() call to invoke the editor so that it accepts
+ command line args in the EDITOR and VISUAL environment vars */
+ char *buf;
+ int status;
+
+ /* Wait for parent to make us the foreground pgrp. */
+ if (orig_pgrp != -1) {
+ pid = getpid();
+ setpgid(0, 0);
+ while (tcgetpgrp(STDIN_FILENO) != pid)
+ continue;
+ }
+
+ buf = (char *) malloc (strlen (editor) + strlen (fileedit) + 2);
+ snprintf (buf, strlen (editor) + strlen (fileedit) + 2,
+ "%s %s", editor, fileedit);
+ status = system (buf);
+ if (-1 == status) {
+ fprintf (stderr, _("%s: %s: %s\n"), Prog, editor,
+ strerror (errno));
+ exit (1);
+ } else if ( WIFEXITED (status)
+ && (WEXITSTATUS (status) != 0)) {
+ fprintf (stderr, _("%s: %s returned with status %d\n"),
+ Prog, editor, WEXITSTATUS (status));
+ exit (WEXITSTATUS (status));
+ } else if (WIFSIGNALED (status)) {
+ fprintf (stderr, _("%s: %s killed by signal %d\n"),
+ Prog, editor, WTERMSIG (status));
+ exit (1);
+ } else {
+ exit (0);
+ }
+ }
+
+ /* Run child in a new pgrp and make it the foreground pgrp. */
+ if (orig_pgrp != -1) {
+ setpgid(pid, pid);
+ tcsetpgrp(STDIN_FILENO, pid);
+
+ /* Avoid SIGTTOU when changing foreground pgrp below. */
+ sigemptyset(&mask);
+ sigaddset(&mask, SIGTTOU);
+ sigprocmask(SIG_BLOCK, &mask, &omask);
+ }
+
+ for (;;) {
+ pid = waitpid (pid, &status, WUNTRACED);
+ if ((pid != -1) && (WIFSTOPPED (status) != 0)) {
+ /* The child (editor) was suspended.
+ * Restore terminal pgrp and suspend vipw. */
+ if (orig_pgrp != -1) {
+ editor_pgrp = tcgetpgrp(STDIN_FILENO);
+ if (editor_pgrp == -1) {
+ fprintf (stderr, "%s: %s: %s", Prog,
+ "tcgetpgrp", strerror (errno));
+ }
+ if (tcsetpgrp(STDIN_FILENO, orig_pgrp) == -1) {
+ fprintf (stderr, "%s: %s: %s", Prog,
+ "tcsetpgrp", strerror (errno));
+ }
+ }
+ kill (getpid (), SIGSTOP);
+ /* wake child when resumed */
+ if (editor_pgrp != -1) {
+ if (tcsetpgrp(STDIN_FILENO, editor_pgrp) == -1) {
+ fprintf (stderr, "%s: %s: %s", Prog,
+ "tcsetpgrp", strerror (errno));
+ }
+ }
+ killpg (pid, SIGCONT);
+ } else {
+ break;
+ }
+ }
+
+ if (orig_pgrp != -1)
+ sigprocmask(SIG_SETMASK, &omask, NULL);
+
+ if (-1 == pid) {
+ vipwexit (editor, 1, 1);
+ } else if ( WIFEXITED (status)
+ && (WEXITSTATUS (status) != 0)) {
+ vipwexit (NULL, 0, WEXITSTATUS (status));
+ } else if (WIFSIGNALED (status)) {
+ fprintf (stderr, _("%s: %s killed by signal %d\n"),
+ Prog, editor, WTERMSIG(status));
+ vipwexit (NULL, 0, 1);
+ }
+
+ if (stat (fileedit, &st2) != 0) {
+ vipwexit (fileedit, 1, 1);
+ }
+ if (st1.st_mtime == st2.st_mtime) {
+ vipwexit (0, 0, 0);
+ }
+#ifdef WITH_SELINUX
+ /* unset the fscreatecon */
+ if (is_selinux_enabled () != 0) {
+ if (setfscreatecon (NULL) != 0) {
+ vipwexit (_("setfscreatecon () failed"), errno, 1);
+ }
+ }
+#endif /* WITH_SELINUX */
+
+ /*
+ * XXX - here we should check fileedit for errors; if there are any,
+ * ask the user what to do (edit again, save changes anyway, or quit
+ * without saving). Use pwck or grpck to do the check. --marekm
+ */
+ createedit = false;
+#ifdef WITH_TCB
+ if (tcb_mode) {
+ f = fopen (fileedit, "r");
+ if (NULL == f) {
+ vipwexit (_("failed to open scratch file"), errno, 1);
+ }
+ if (unlink (fileedit) != 0) {
+ vipwexit (_("failed to unlink scratch file"), errno, 1);
+ }
+ if (shadowtcb_drop_priv () == SHADOWTCB_FAILURE) {
+ vipwexit (_("failed to drop privileges"), errno, 1);
+ }
+ if (stat (file, &st1) != 0) {
+ vipwexit (_("failed to stat edited file"), errno, 1);
+ }
+ to_rename = malloc (strlen (file) + 2);
+ if (NULL == to_rename) {
+ vipwexit (_("failed to allocate memory"), errno, 1);
+ }
+ snprintf (to_rename, strlen (file) + 2, "%s+", file);
+ if (create_backup_file (f, to_rename, &st1) != 0) {
+ free (to_rename);
+ vipwexit (_("failed to create backup file"), errno, 1);
+ }
+ (void) fclose (f);
+ } else {
+#endif /* WITH_TCB */
+ to_rename = fileedit;
+#ifdef WITH_TCB
+ }
+#endif /* WITH_TCB */
+ unlink (filebackup);
+ link (file, filebackup);
+ if (rename (to_rename, file) == -1) {
+ fprintf (stderr,
+ _("%s: can't restore %s: %s (your changes are in %s)\n"),
+ Prog, file, strerror (errno), to_rename);
+#ifdef WITH_TCB
+ if (tcb_mode) {
+ free (to_rename);
+ }
+#endif /* WITH_TCB */
+ vipwexit (0, 0, 1);
+ }
+
+#ifdef WITH_TCB
+ if (tcb_mode) {
+ free (to_rename);
+ if (shadowtcb_gain_priv () == SHADOWTCB_FAILURE) {
+ vipwexit (_("failed to gain privileges"), errno, 1);
+ }
+ }
+#endif /* WITH_TCB */
+
+ if ((*file_unlock) () == 0) {
+ fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, fileeditname);
+ SYSLOG ((LOG_ERR, "failed to unlock %s", fileeditname));
+ /* continue */
+ }
+ SYSLOG ((LOG_INFO, "file %s edited", fileeditname));
+}
+
+int main (int argc, char **argv)
+{
+ bool editshadow = false;
+ bool do_vipw;
+
+ Prog = Basename (argv[0]);
+
+ (void) setlocale (LC_ALL, "");
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ process_root_flag ("-R", argc, argv);
+
+ do_vipw = (strcmp (Prog, "vigr") != 0);
+
+ OPENLOG (do_vipw ? "vipw" : "vigr");
+
+ {
+ /*
+ * Parse the command line options.
+ */
+ int c;
+ static struct option long_options[] = {
+ {"group", no_argument, NULL, 'g'},
+ {"help", no_argument, NULL, 'h'},
+ {"passwd", no_argument, NULL, 'p'},
+ {"quiet", no_argument, NULL, 'q'},
+ {"root", required_argument, NULL, 'R'},
+ {"shadow", no_argument, NULL, 's'},
+#ifdef WITH_TCB
+ {"user", required_argument, NULL, 'u'},
+#endif /* WITH_TCB */
+ {NULL, 0, NULL, '\0'}
+ };
+ while ((c = getopt_long (argc, argv,
+#ifdef WITH_TCB
+ "ghpqR:su:",
+#else /* !WITH_TCB */
+ "ghpqR:s",
+#endif /* !WITH_TCB */
+ long_options, NULL)) != -1) {
+ switch (c) {
+ case 'g':
+ do_vipw = false;
+ break;
+ case 'h':
+ usage (E_SUCCESS);
+ break;
+ case 'p':
+ do_vipw = true;
+ break;
+ case 'q':
+ quiet = true;
+ break;
+ case 'R': /* no-op, handled in process_root_flag () */
+ break;
+ case 's':
+ editshadow = true;
+ break;
+#ifdef WITH_TCB
+ case 'u':
+ user = optarg;
+ break;
+#endif /* WITH_TCB */
+ default:
+ usage (E_USAGE);
+ }
+ }
+
+ if (optind != argc) {
+ usage (E_USAGE);
+ }
+ }
+
+ if (do_vipw) {
+ if (editshadow) {
+#ifdef WITH_TCB
+ if (getdef_bool ("USE_TCB") && (NULL != user)) {
+ if (shadowtcb_set_user (user) == SHADOWTCB_FAILURE) {
+ fprintf (stderr,
+ _("%s: failed to find tcb directory for %s\n"),
+ Prog, user);
+ return E_SHADOW_NOTFOUND;
+ }
+ tcb_mode = true;
+ }
+#endif /* WITH_TCB */
+ vipwedit (spw_dbname (), spw_lock, spw_unlock);
+ printf (MSG_WARN_EDIT_OTHER_FILE,
+ spw_dbname (),
+ pw_dbname (),
+ "vipw");
+ } else {
+ vipwedit (pw_dbname (), pw_lock, pw_unlock);
+ if (spw_file_present ()) {
+ printf (MSG_WARN_EDIT_OTHER_FILE,
+ pw_dbname (),
+ spw_dbname (),
+ "vipw -s");
+ }
+ }
+ } else {
+#ifdef SHADOWGRP
+ if (editshadow) {
+ vipwedit (sgr_dbname (), sgr_lock, sgr_unlock);
+ printf (MSG_WARN_EDIT_OTHER_FILE,
+ sgr_dbname (),
+ gr_dbname (),
+ "vigr");
+ } else {
+#endif /* SHADOWGRP */
+ vipwedit (gr_dbname (), gr_lock, gr_unlock);
+#ifdef SHADOWGRP
+ if (sgr_file_present ()) {
+ printf (MSG_WARN_EDIT_OTHER_FILE,
+ gr_dbname (),
+ sgr_dbname (),
+ "vigr -s");
+ }
+ }
+#endif /* SHADOWGRP */
+ }
+
+ nscd_flush_cache ("passwd");
+ nscd_flush_cache ("group");
+ sssd_flush_cache (SSSD_DB_PASSWD | SSSD_DB_GROUP);
+
+ return E_SUCCESS;
+}
+
diff --git a/ylwrap b/ylwrap
new file mode 100755
index 0000000..5943168
--- /dev/null
+++ b/ylwrap
@@ -0,0 +1,247 @@
+#! /bin/sh
+# ylwrap - wrapper for lex/yacc invocations.
+
+scriptversion=2018-03-07.03; # UTC
+
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+#
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+get_dirname ()
+{
+ case $1 in
+ */*|*\\*) printf '%s\n' "$1" | sed -e 's|\([\\/]\)[^\\/]*$|\1|';;
+ # Otherwise, we want the empty string (not ".").
+ esac
+}
+
+# guard FILE
+# ----------
+# The CPP macro used to guard inclusion of FILE.
+guard ()
+{
+ printf '%s\n' "$1" \
+ | sed \
+ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \
+ -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g' \
+ -e 's/__*/_/g'
+}
+
+# quote_for_sed [STRING]
+# ----------------------
+# Return STRING (or stdin) quoted to be used as a sed pattern.
+quote_for_sed ()
+{
+ case $# in
+ 0) cat;;
+ 1) printf '%s\n' "$1";;
+ esac \
+ | sed -e 's|[][\\.*]|\\&|g'
+}
+
+case "$1" in
+ '')
+ echo "$0: No files given. Try '$0 --help' for more information." 1>&2
+ exit 1
+ ;;
+ --basedir)
+ basedir=$2
+ shift 2
+ ;;
+ -h|--h*)
+ cat <<\EOF
+Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]...
+
+Wrapper for lex/yacc invocations, renaming files as desired.
+
+ INPUT is the input file
+ OUTPUT is one file PROG generates
+ DESIRED is the file we actually want instead of OUTPUT
+ PROGRAM is program to run
+ ARGS are passed to PROG
+
+Any number of OUTPUT,DESIRED pairs may be used.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v|--v*)
+ echo "ylwrap $scriptversion"
+ exit $?
+ ;;
+esac
+
+
+# The input.
+input=$1
+shift
+# We'll later need for a correct munging of "#line" directives.
+input_sub_rx=`get_dirname "$input" | quote_for_sed`
+case $input in
+ [\\/]* | ?:[\\/]*)
+ # Absolute path; do nothing.
+ ;;
+ *)
+ # Relative path. Make it absolute.
+ input=`pwd`/$input
+ ;;
+esac
+input_rx=`get_dirname "$input" | quote_for_sed`
+
+# Since DOS filename conventions don't allow two dots,
+# the DOS version of Bison writes out y_tab.c instead of y.tab.c
+# and y_tab.h instead of y.tab.h. Test to see if this is the case.
+y_tab_nodot=false
+if test -f y_tab.c || test -f y_tab.h; then
+ y_tab_nodot=true
+fi
+
+# The parser itself, the first file, is the destination of the .y.c
+# rule in the Makefile.
+parser=$1
+
+# A sed program to s/FROM/TO/g for all the FROM/TO so that, for
+# instance, we rename #include "y.tab.h" into #include "parse.h"
+# during the conversion from y.tab.c to parse.c.
+sed_fix_filenames=
+
+# Also rename header guards, as Bison 2.7 for instance uses its header
+# guard in its implementation file.
+sed_fix_header_guards=
+
+while test $# -ne 0; do
+ if test x"$1" = x"--"; then
+ shift
+ break
+ fi
+ from=$1
+ # Handle y_tab.c and y_tab.h output by DOS
+ if $y_tab_nodot; then
+ case $from in
+ "y.tab.c") from=y_tab.c;;
+ "y.tab.h") from=y_tab.h;;
+ esac
+ fi
+ shift
+ to=$1
+ shift
+ sed_fix_filenames="${sed_fix_filenames}s|"`quote_for_sed "$from"`"|$to|g;"
+ sed_fix_header_guards="${sed_fix_header_guards}s|"`guard "$from"`"|"`guard "$to"`"|g;"
+done
+
+# The program to run.
+prog=$1
+shift
+# Make any relative path in $prog absolute.
+case $prog in
+ [\\/]* | ?:[\\/]*) ;;
+ *[\\/]*) prog=`pwd`/$prog ;;
+esac
+
+dirname=ylwrap$$
+do_exit="cd '`pwd`' && rm -rf $dirname > /dev/null 2>&1;"' (exit $ret); exit $ret'
+trap "ret=129; $do_exit" 1
+trap "ret=130; $do_exit" 2
+trap "ret=141; $do_exit" 13
+trap "ret=143; $do_exit" 15
+mkdir $dirname || exit 1
+
+cd $dirname
+
+case $# in
+ 0) "$prog" "$input" ;;
+ *) "$prog" "$@" "$input" ;;
+esac
+ret=$?
+
+if test $ret -eq 0; then
+ for from in *
+ do
+ to=`printf '%s\n' "$from" | sed "$sed_fix_filenames"`
+ if test -f "$from"; then
+ # If $2 is an absolute path name, then just use that,
+ # otherwise prepend '../'.
+ case $to in
+ [\\/]* | ?:[\\/]*) target=$to;;
+ *) target=../$to;;
+ esac
+
+ # Do not overwrite unchanged header files to avoid useless
+ # recompilations. Always update the parser itself: it is the
+ # destination of the .y.c rule in the Makefile. Divert the
+ # output of all other files to a temporary file so we can
+ # compare them to existing versions.
+ if test $from != $parser; then
+ realtarget=$target
+ target=tmp-`printf '%s\n' "$target" | sed 's|.*[\\/]||g'`
+ fi
+
+ # Munge "#line" or "#" directives. Don't let the resulting
+ # debug information point at an absolute srcdir. Use the real
+ # output file name, not yy.lex.c for instance. Adjust the
+ # include guards too.
+ sed -e "/^#/!b" \
+ -e "s|$input_rx|$input_sub_rx|" \
+ -e "$sed_fix_filenames" \
+ -e "$sed_fix_header_guards" \
+ "$from" >"$target" || ret=$?
+
+ # Check whether files must be updated.
+ if test "$from" != "$parser"; then
+ if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then
+ echo "$to is unchanged"
+ rm -f "$target"
+ else
+ echo "updating $to"
+ mv -f "$target" "$realtarget"
+ fi
+ fi
+ else
+ # A missing file is only an error for the parser. This is a
+ # blatant hack to let us support using "yacc -d". If -d is not
+ # specified, don't fail when the header file is "missing".
+ if test "$from" = "$parser"; then
+ ret=1
+ fi
+ fi
+ done
+fi
+
+# Remove the directory.
+cd ..
+rm -rf $dirname
+
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End: